@lightningjs/renderer 3.0.0-beta9 → 3.0.1

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 (541) hide show
  1. package/LICENSE +202 -202
  2. package/NOTICE +3 -3
  3. package/README.md +230 -147
  4. package/dist/exports/canvas.d.ts +1 -1
  5. package/dist/exports/canvas.js +1 -1
  6. package/dist/exports/canvas.js.map +1 -1
  7. package/dist/exports/index.d.ts +5 -6
  8. package/dist/exports/index.js +3 -5
  9. package/dist/exports/index.js.map +1 -1
  10. package/dist/exports/platform.d.ts +7 -0
  11. package/dist/exports/platform.js +27 -0
  12. package/dist/exports/platform.js.map +1 -0
  13. package/dist/exports/webgl.d.ts +2 -1
  14. package/dist/exports/webgl.js +2 -1
  15. package/dist/exports/webgl.js.map +1 -1
  16. package/dist/src/common/CommonTypes.d.ts +15 -3
  17. package/dist/src/core/Autosizer.d.ts +35 -0
  18. package/dist/src/core/Autosizer.js +196 -0
  19. package/dist/src/core/Autosizer.js.map +1 -0
  20. package/dist/src/core/CoreNode.d.ts +107 -59
  21. package/dist/src/core/CoreNode.js +524 -282
  22. package/dist/src/core/CoreNode.js.map +1 -1
  23. package/dist/src/core/CoreTextNode.d.ts +73 -88
  24. package/dist/src/core/CoreTextNode.js +383 -236
  25. package/dist/src/core/CoreTextNode.js.map +1 -1
  26. package/dist/src/core/CoreTextureManager.d.ts +19 -17
  27. package/dist/src/core/CoreTextureManager.js +52 -120
  28. package/dist/src/core/CoreTextureManager.js.map +1 -1
  29. package/dist/src/core/Stage.d.ts +63 -9
  30. package/dist/src/core/Stage.js +233 -133
  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 +2 -4
  36. package/dist/src/core/TextureMemoryManager.js +80 -113
  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 +3 -3
  40. package/dist/src/core/animations/CoreAnimation.js.map +1 -1
  41. package/dist/src/core/animations/CoreAnimationController.d.ts +1 -1
  42. package/dist/src/core/animations/CoreAnimationController.js +4 -2
  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 +69 -97
  47. package/dist/src/core/lib/WebGlContextWrapper.js +192 -152
  48. package/dist/src/core/lib/WebGlContextWrapper.js.map +1 -1
  49. package/dist/src/core/lib/collectionUtils.d.ts +4 -0
  50. package/dist/src/core/lib/collectionUtils.js +72 -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 +311 -67
  60. package/dist/src/core/lib/textureCompression.js.map +1 -1
  61. package/dist/src/core/lib/utils.d.ts +6 -6
  62. package/dist/src/core/lib/utils.js +21 -65
  63. package/dist/src/core/lib/utils.js.map +1 -1
  64. package/dist/src/core/lib/validateImageBitmap.d.ts +1 -2
  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.d.ts +10 -0
  68. package/dist/src/core/platform.js +84 -0
  69. package/dist/src/core/platform.js.map +1 -0
  70. package/dist/src/core/platforms/GlContextWrapper.d.ts +136 -0
  71. package/{src/core/text-rendering/TextRenderingUtils.ts → dist/src/core/platforms/GlContextWrapper.js} +32 -36
  72. package/dist/src/core/platforms/GlContextWrapper.js.map +1 -0
  73. package/dist/src/core/platforms/Platform.d.ts +78 -12
  74. package/dist/src/core/platforms/Platform.js +18 -0
  75. package/dist/src/core/platforms/Platform.js.map +1 -1
  76. package/dist/src/core/platforms/web/WebGlContextWrapper.d.ts +776 -0
  77. package/dist/src/core/platforms/web/WebGlContextWrapper.js +1208 -0
  78. package/dist/src/core/platforms/web/WebGlContextWrapper.js.map +1 -0
  79. package/dist/src/core/platforms/web/WebPlatform.d.ts +17 -2
  80. package/dist/src/core/platforms/web/WebPlatform.js +158 -13
  81. package/dist/src/core/platforms/web/WebPlatform.js.map +1 -1
  82. package/dist/src/core/platforms/web/WebPlatformChrome50.d.ts +19 -0
  83. package/dist/src/core/platforms/web/WebPlatformChrome50.js +54 -0
  84. package/dist/src/core/platforms/web/WebPlatformChrome50.js.map +1 -0
  85. package/dist/src/core/platforms/web/WebPlatformLegacy.d.ts +20 -0
  86. package/dist/src/core/platforms/web/WebPlatformLegacy.js +105 -0
  87. package/dist/src/core/platforms/web/WebPlatformLegacy.js.map +1 -0
  88. package/dist/src/core/platforms/web/WebPlatformNext.d.ts +21 -0
  89. package/dist/src/core/platforms/web/WebPlatformNext.js +52 -0
  90. package/dist/src/core/platforms/web/WebPlatformNext.js.map +1 -0
  91. package/dist/src/core/platforms/web/lib/ImageWorker.d.ts +21 -0
  92. package/dist/src/core/platforms/web/lib/ImageWorker.js +136 -0
  93. package/dist/src/core/platforms/web/lib/ImageWorker.js.map +1 -0
  94. package/dist/src/core/platforms/web/lib/ImageWorkerDefault.d.ts +6 -0
  95. package/dist/src/core/platforms/web/lib/ImageWorkerDefault.js +92 -0
  96. package/dist/src/core/platforms/web/lib/ImageWorkerDefault.js.map +1 -0
  97. package/dist/src/core/platforms/web/lib/ImageWorkerLegacy.d.ts +1 -0
  98. package/dist/src/core/platforms/web/lib/ImageWorkerLegacy.js +63 -0
  99. package/dist/src/core/platforms/web/lib/ImageWorkerLegacy.js.map +1 -0
  100. package/dist/src/core/platforms/web/lib/ImageWorkerNoOptions.d.ts +7 -0
  101. package/dist/src/core/platforms/web/lib/ImageWorkerNoOptions.js +75 -0
  102. package/dist/src/core/platforms/web/lib/ImageWorkerNoOptions.js.map +1 -0
  103. package/dist/src/core/platforms/web/lib/createImageBitmap.d.ts +1 -0
  104. package/dist/src/core/platforms/web/lib/createImageBitmap.js +27 -0
  105. package/dist/src/core/platforms/web/lib/createImageBitmap.js.map +1 -0
  106. package/dist/src/core/platforms/web/lib/textureCompression.d.ts +26 -0
  107. package/dist/src/core/platforms/web/lib/textureCompression.js +301 -0
  108. package/dist/src/core/platforms/web/lib/textureCompression.js.map +1 -0
  109. package/dist/src/core/platforms/web/lib/textureSvg.d.ts +7 -0
  110. package/dist/src/core/platforms/web/lib/textureSvg.js +51 -0
  111. package/dist/src/core/platforms/web/lib/textureSvg.js.map +1 -0
  112. package/dist/src/core/platforms/web/lib/utils.d.ts +5 -0
  113. package/dist/src/core/platforms/web/lib/utils.js +86 -0
  114. package/dist/src/core/platforms/web/lib/utils.js.map +1 -0
  115. package/dist/src/core/renderers/CoreContextTexture.d.ts +2 -1
  116. package/dist/src/core/renderers/CoreContextTexture.js.map +1 -1
  117. package/dist/src/core/renderers/CoreRenderer.d.ts +4 -40
  118. package/dist/src/core/renderers/CoreRenderer.js +3 -4
  119. package/dist/src/core/renderers/CoreRenderer.js.map +1 -1
  120. package/dist/src/core/renderers/CoreShader.d.ts +9 -0
  121. package/{src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.ts → dist/src/core/renderers/CoreShader.js} +28 -32
  122. package/dist/src/core/renderers/CoreShader.js.map +1 -0
  123. package/dist/src/core/renderers/CoreShaderNode.d.ts +10 -0
  124. package/dist/src/core/renderers/CoreShaderNode.js +19 -2
  125. package/dist/src/core/renderers/CoreShaderNode.js.map +1 -1
  126. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.d.ts +33 -0
  127. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js +250 -0
  128. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js.map +1 -0
  129. package/dist/src/core/renderers/canvas/CanvasCoreTexture.d.ts +17 -0
  130. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js +125 -0
  131. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js.map +1 -0
  132. package/dist/src/core/renderers/canvas/CanvasRenderer.d.ts +5 -6
  133. package/dist/src/core/renderers/canvas/CanvasRenderer.js +67 -91
  134. package/dist/src/core/renderers/canvas/CanvasRenderer.js.map +1 -1
  135. package/dist/src/core/renderers/canvas/CanvasShaderNode.d.ts +1 -2
  136. package/dist/src/core/renderers/canvas/CanvasShaderNode.js +5 -4
  137. package/dist/src/core/renderers/canvas/CanvasShaderNode.js.map +1 -1
  138. package/dist/src/core/renderers/canvas/CanvasTexture.d.ts +3 -2
  139. package/dist/src/core/renderers/canvas/CanvasTexture.js +17 -13
  140. package/dist/src/core/renderers/canvas/CanvasTexture.js.map +1 -1
  141. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.d.ts +13 -0
  142. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js +113 -192
  143. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js.map +1 -1
  144. package/dist/src/core/renderers/canvas/internal/ColorUtils.d.ts +0 -2
  145. package/dist/src/core/renderers/canvas/internal/ColorUtils.js +0 -14
  146. package/dist/src/core/renderers/canvas/internal/ColorUtils.js.map +1 -1
  147. package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.d.ts +10 -0
  148. package/{src/core/text-rendering/renderers/SdfTextRenderer/internal/util.ts → dist/src/core/renderers/canvas/shaders/UnsupportedShader.js} +43 -40
  149. package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.js.map +1 -0
  150. package/dist/src/core/renderers/webgl/SdfRenderOp.d.ts +33 -0
  151. package/dist/src/core/renderers/webgl/SdfRenderOp.js +98 -0
  152. package/dist/src/core/renderers/webgl/SdfRenderOp.js.map +1 -0
  153. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.d.ts +12 -0
  154. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js +58 -0
  155. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js.map +1 -0
  156. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.d.ts +9 -0
  157. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.js +38 -0
  158. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.js.map +1 -0
  159. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.d.ts +69 -0
  160. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js +272 -0
  161. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js.map +1 -0
  162. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.d.ts +34 -0
  163. package/dist/src/core/renderers/webgl/{WebGlRenderOp.js → WebGlCoreRenderOp.js} +43 -47
  164. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js.map +1 -0
  165. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.d.ts +133 -0
  166. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js +649 -0
  167. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js.map +1 -0
  168. package/dist/src/core/renderers/webgl/WebGlCoreShader.d.ts +78 -0
  169. package/dist/src/core/renderers/webgl/WebGlCoreShader.destroy.d.ts +1 -0
  170. package/dist/src/core/renderers/webgl/WebGlCoreShader.destroy.js +2 -0
  171. package/dist/src/core/renderers/webgl/WebGlCoreShader.destroy.js.map +1 -0
  172. package/dist/src/core/renderers/webgl/WebGlCoreShader.js +202 -0
  173. package/dist/src/core/renderers/webgl/WebGlCoreShader.js.map +1 -0
  174. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.d.ts +4 -2
  175. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js +14 -6
  176. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js.map +1 -1
  177. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.d.ts +15 -2
  178. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js +34 -5
  179. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js.map +1 -1
  180. package/dist/src/core/renderers/webgl/WebGlCtxTexture.d.ts +19 -9
  181. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js +101 -49
  182. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js.map +1 -1
  183. package/dist/src/core/renderers/webgl/WebGlRenderer.d.ts +11 -23
  184. package/dist/src/core/renderers/webgl/WebGlRenderer.js +124 -133
  185. package/dist/src/core/renderers/webgl/WebGlRenderer.js.map +1 -1
  186. package/dist/src/core/renderers/webgl/WebGlShaderNode.d.ts +4 -6
  187. package/dist/src/core/renderers/webgl/WebGlShaderNode.js +3 -3
  188. package/dist/src/core/renderers/webgl/WebGlShaderNode.js.map +1 -1
  189. package/dist/src/core/renderers/webgl/WebGlShaderProgram.d.ts +7 -7
  190. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js +60 -38
  191. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js.map +1 -1
  192. package/dist/src/core/renderers/webgl/internal/RendererUtils.d.ts +4 -4
  193. package/dist/src/core/renderers/webgl/internal/RendererUtils.js +1 -2
  194. package/dist/src/core/renderers/webgl/internal/RendererUtils.js.map +1 -1
  195. package/dist/src/core/renderers/webgl/internal/ShaderUtils.d.ts +3 -3
  196. package/dist/src/core/renderers/webgl/internal/ShaderUtils.js +38 -37
  197. package/dist/src/core/renderers/webgl/internal/ShaderUtils.js.map +1 -1
  198. package/dist/src/core/renderers/webgl/shaders/DefaultShader.d.ts +9 -0
  199. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js +84 -0
  200. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js.map +1 -0
  201. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.d.ts +10 -0
  202. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js +108 -0
  203. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js.map +1 -0
  204. package/dist/src/core/renderers/webgl/shaders/DynamicShader.d.ts +29 -0
  205. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js +408 -0
  206. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js.map +1 -0
  207. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.d.ts +28 -0
  208. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js +126 -0
  209. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js.map +1 -0
  210. package/dist/src/core/renderers/webgl/shaders/SdfShader.d.ts +47 -0
  211. package/dist/src/core/renderers/webgl/shaders/SdfShader.js +148 -0
  212. package/dist/src/core/renderers/webgl/shaders/SdfShader.js.map +1 -0
  213. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.d.ts +31 -0
  214. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js +71 -0
  215. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js.map +1 -0
  216. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.d.ts +30 -0
  217. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js +58 -0
  218. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js.map +1 -0
  219. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.d.ts +31 -0
  220. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js +71 -0
  221. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js.map +1 -0
  222. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.d.ts +31 -0
  223. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js +71 -0
  224. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js.map +1 -0
  225. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.d.ts +31 -0
  226. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js +71 -0
  227. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js.map +1 -0
  228. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.d.ts +9 -0
  229. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js +136 -0
  230. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js.map +1 -0
  231. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.d.ts +36 -0
  232. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js +85 -0
  233. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js.map +1 -0
  234. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.d.ts +45 -0
  235. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js +104 -0
  236. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js.map +1 -0
  237. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.d.ts +22 -0
  238. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.js +45 -0
  239. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.js.map +1 -0
  240. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.d.ts +58 -0
  241. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js +80 -0
  242. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js.map +1 -0
  243. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.d.ts +34 -0
  244. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js +113 -0
  245. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js.map +1 -0
  246. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.d.ts +40 -0
  247. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js +126 -0
  248. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js.map +1 -0
  249. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.d.ts +61 -0
  250. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js +127 -0
  251. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js.map +1 -0
  252. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.d.ts +40 -0
  253. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js +71 -0
  254. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js.map +1 -0
  255. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.d.ts +115 -0
  256. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.js +61 -0
  257. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.js.map +1 -0
  258. package/dist/src/core/shaders/canvas/Border.d.ts +8 -2
  259. package/dist/src/core/shaders/canvas/Border.js +64 -25
  260. package/dist/src/core/shaders/canvas/Border.js.map +1 -1
  261. package/dist/src/core/shaders/canvas/HolePunch.js +4 -3
  262. package/dist/src/core/shaders/canvas/HolePunch.js.map +1 -1
  263. package/dist/src/core/shaders/canvas/LinearGradient.js +7 -5
  264. package/dist/src/core/shaders/canvas/LinearGradient.js.map +1 -1
  265. package/dist/src/core/shaders/canvas/RadialGradient.js +12 -10
  266. package/dist/src/core/shaders/canvas/RadialGradient.js.map +1 -1
  267. package/dist/src/core/shaders/canvas/Rounded.js +3 -3
  268. package/dist/src/core/shaders/canvas/Rounded.js.map +1 -1
  269. package/dist/src/core/shaders/canvas/RoundedWithBorder.d.ts +6 -3
  270. package/dist/src/core/shaders/canvas/RoundedWithBorder.js +41 -11
  271. package/dist/src/core/shaders/canvas/RoundedWithBorder.js.map +1 -1
  272. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.d.ts +2 -3
  273. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js +46 -9
  274. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js.map +1 -1
  275. package/dist/src/core/shaders/canvas/RoundedWithShadow.js +6 -5
  276. package/dist/src/core/shaders/canvas/RoundedWithShadow.js.map +1 -1
  277. package/dist/src/core/shaders/canvas/Shadow.js +4 -2
  278. package/dist/src/core/shaders/canvas/Shadow.js.map +1 -1
  279. package/dist/src/core/shaders/canvas/utils/render.d.ts +1 -1
  280. package/dist/src/core/shaders/canvas/utils/render.js +31 -18
  281. package/dist/src/core/shaders/canvas/utils/render.js.map +1 -1
  282. package/dist/src/core/shaders/templates/BorderTemplate.d.ts +11 -1
  283. package/dist/src/core/shaders/templates/BorderTemplate.js +30 -10
  284. package/dist/src/core/shaders/templates/BorderTemplate.js.map +1 -1
  285. package/dist/src/core/shaders/templates/HolePunchTemplate.d.ts +2 -2
  286. package/dist/src/core/shaders/templates/HolePunchTemplate.js +2 -2
  287. package/dist/src/core/shaders/templates/HolePunchTemplate.js.map +1 -1
  288. package/dist/src/core/shaders/templates/RadialGradientTemplate.d.ts +8 -6
  289. package/dist/src/core/shaders/templates/RadialGradientTemplate.js +2 -2
  290. package/dist/src/core/shaders/templates/RadialGradientTemplate.js.map +1 -1
  291. package/dist/src/core/shaders/webgl/Border.js +138 -84
  292. package/dist/src/core/shaders/webgl/Border.js.map +1 -1
  293. package/dist/src/core/shaders/webgl/Default.js +46 -47
  294. package/dist/src/core/shaders/webgl/Default.js.map +1 -1
  295. package/dist/src/core/shaders/webgl/DefaultBatched.js +61 -61
  296. package/dist/src/core/shaders/webgl/HolePunch.js +34 -34
  297. package/dist/src/core/shaders/webgl/HolePunch.js.map +1 -1
  298. package/dist/src/core/shaders/webgl/LinearGradient.js +60 -36
  299. package/dist/src/core/shaders/webgl/LinearGradient.js.map +1 -1
  300. package/dist/src/core/shaders/webgl/RadialGradient.js +60 -37
  301. package/dist/src/core/shaders/webgl/RadialGradient.js.map +1 -1
  302. package/dist/src/core/shaders/webgl/Rounded.js +74 -72
  303. package/dist/src/core/shaders/webgl/Rounded.js.map +1 -1
  304. package/dist/src/core/shaders/webgl/RoundedWithBorder.js +172 -113
  305. package/dist/src/core/shaders/webgl/RoundedWithBorder.js.map +1 -1
  306. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js +191 -132
  307. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js.map +1 -1
  308. package/dist/src/core/shaders/webgl/RoundedWithShadow.js +57 -55
  309. package/dist/src/core/shaders/webgl/RoundedWithShadow.js.map +1 -1
  310. package/dist/src/core/shaders/webgl/SdfShader.d.ts +0 -2
  311. package/dist/src/core/shaders/webgl/SdfShader.js +56 -66
  312. package/dist/src/core/shaders/webgl/SdfShader.js.map +1 -1
  313. package/dist/src/core/shaders/webgl/Shadow.js +89 -83
  314. package/dist/src/core/shaders/webgl/Shadow.js.map +1 -1
  315. package/dist/src/core/text-rendering/CanvasFontHandler.d.ts +59 -0
  316. package/dist/src/core/text-rendering/CanvasFontHandler.js +224 -0
  317. package/dist/src/core/text-rendering/CanvasFontHandler.js.map +1 -0
  318. package/dist/src/core/text-rendering/CanvasTextRenderer.d.ts +17 -0
  319. package/dist/src/core/text-rendering/CanvasTextRenderer.js +157 -0
  320. package/dist/src/core/text-rendering/CanvasTextRenderer.js.map +1 -0
  321. package/dist/src/core/text-rendering/SdfFontHandler.d.ts +182 -0
  322. package/dist/src/core/text-rendering/SdfFontHandler.js +379 -0
  323. package/dist/src/core/text-rendering/SdfFontHandler.js.map +1 -0
  324. package/dist/src/core/text-rendering/SdfTextRenderer.d.ts +17 -0
  325. package/dist/src/core/text-rendering/SdfTextRenderer.js +301 -0
  326. package/dist/src/core/text-rendering/SdfTextRenderer.js.map +1 -0
  327. package/dist/src/core/text-rendering/TextLayoutEngine.d.ts +18 -0
  328. package/dist/src/core/text-rendering/TextLayoutEngine.js +380 -0
  329. package/dist/src/core/text-rendering/TextLayoutEngine.js.map +1 -0
  330. package/dist/src/core/text-rendering/TextRenderer.d.ts +383 -0
  331. package/{src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.ts → dist/src/core/text-rendering/TextRenderer.js} +20 -38
  332. package/dist/src/core/text-rendering/TextRenderer.js.map +1 -0
  333. package/dist/src/core/text-rendering/TextTextureRendererUtils.js.map +1 -1
  334. package/dist/src/core/text-rendering/Utils.d.ts +30 -0
  335. package/dist/src/core/text-rendering/Utils.js +84 -0
  336. package/dist/src/core/text-rendering/Utils.js.map +1 -0
  337. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js +2 -2
  338. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js.map +1 -1
  339. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js +0 -5
  340. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js.map +1 -1
  341. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.d.ts +1 -7
  342. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js +2 -50
  343. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js.map +1 -1
  344. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.d.ts +3 -2
  345. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +87 -46
  346. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +1 -1
  347. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.d.ts +1 -1
  348. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js +8 -66
  349. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js.map +1 -1
  350. package/dist/src/core/text-rendering/renderers/TextRenderer.d.ts +4 -14
  351. package/dist/src/core/text-rendering/renderers/TextRenderer.js +0 -3
  352. package/dist/src/core/text-rendering/renderers/TextRenderer.js.map +1 -1
  353. package/dist/src/core/textures/ColorTexture.d.ts +1 -1
  354. package/dist/src/core/textures/ColorTexture.js +3 -4
  355. package/dist/src/core/textures/ColorTexture.js.map +1 -1
  356. package/dist/src/core/textures/ImageTexture.d.ts +33 -14
  357. package/dist/src/core/textures/ImageTexture.js +46 -125
  358. package/dist/src/core/textures/ImageTexture.js.map +1 -1
  359. package/dist/src/core/textures/NoiseTexture.d.ts +3 -3
  360. package/dist/src/core/textures/NoiseTexture.js +8 -8
  361. package/dist/src/core/textures/NoiseTexture.js.map +1 -1
  362. package/dist/src/core/textures/RenderTexture.d.ts +7 -7
  363. package/dist/src/core/textures/RenderTexture.js +12 -12
  364. package/dist/src/core/textures/RenderTexture.js.map +1 -1
  365. package/dist/src/core/textures/SubTexture.d.ts +6 -8
  366. package/dist/src/core/textures/SubTexture.js +22 -40
  367. package/dist/src/core/textures/SubTexture.js.map +1 -1
  368. package/dist/src/core/textures/Texture.d.ts +74 -15
  369. package/dist/src/core/textures/Texture.js +131 -19
  370. package/dist/src/core/textures/Texture.js.map +1 -1
  371. package/dist/src/core/utils.d.ts +2 -1
  372. package/dist/src/core/utils.js +1 -1
  373. package/dist/src/core/utils.js.map +1 -1
  374. package/dist/src/main-api/DynamicShaderController.d.ts +29 -0
  375. package/dist/src/main-api/DynamicShaderController.js +58 -0
  376. package/dist/src/main-api/DynamicShaderController.js.map +1 -0
  377. package/dist/src/main-api/Inspector.d.ts +129 -1
  378. package/dist/src/main-api/Inspector.js +462 -23
  379. package/dist/src/main-api/Inspector.js.map +1 -1
  380. package/dist/src/main-api/Renderer.d.ts +223 -41
  381. package/dist/src/main-api/Renderer.js +107 -62
  382. package/dist/src/main-api/Renderer.js.map +1 -1
  383. package/dist/src/main-api/ShaderController.d.ts +31 -0
  384. package/dist/src/main-api/ShaderController.js +37 -0
  385. package/dist/src/main-api/ShaderController.js.map +1 -0
  386. package/dist/src/utils.d.ts +0 -2
  387. package/dist/src/utils.js +0 -36
  388. package/dist/src/utils.js.map +1 -1
  389. package/dist/tsconfig.dist.tsbuildinfo +1 -1
  390. package/exports/canvas-shaders.ts +28 -28
  391. package/exports/canvas.ts +45 -45
  392. package/exports/index.ts +90 -90
  393. package/exports/inspector.ts +24 -24
  394. package/exports/platform.ts +31 -0
  395. package/exports/utils.ts +50 -50
  396. package/exports/webgl-shaders.ts +28 -28
  397. package/exports/webgl.ts +52 -50
  398. package/package.json +16 -15
  399. package/src/common/CommonTypes.ts +163 -146
  400. package/src/common/EventEmitter.ts +77 -77
  401. package/src/common/IAnimationController.ts +92 -92
  402. package/src/common/IEventEmitter.ts +28 -28
  403. package/src/core/Autosizer.ts +224 -0
  404. package/src/core/CoreNode.test.ts +365 -202
  405. package/src/core/CoreNode.ts +2785 -2489
  406. package/src/core/CoreShaderManager.ts +188 -188
  407. package/src/core/CoreTextNode.test.ts +311 -0
  408. package/src/core/CoreTextNode.ts +607 -451
  409. package/src/core/CoreTextureManager.ts +484 -548
  410. package/src/core/Stage.ts +927 -800
  411. package/src/core/TextureError.ts +46 -0
  412. package/src/core/TextureMemoryManager.ts +418 -462
  413. package/src/core/animations/AnimationManager.ts +38 -38
  414. package/src/core/animations/CoreAnimation.ts +290 -291
  415. package/src/core/animations/CoreAnimationController.ts +169 -166
  416. package/src/core/lib/ContextSpy.ts +41 -41
  417. package/src/core/lib/Matrix3d.ts +244 -244
  418. package/src/core/lib/RenderCoords.ts +71 -71
  419. package/src/core/lib/collectionUtils.ts +83 -0
  420. package/src/core/lib/colorCache.ts +20 -0
  421. package/src/core/{renderers/canvas/internal/ColorUtils.ts → lib/colorParser.ts} +85 -85
  422. package/src/core/lib/utils.ts +337 -390
  423. package/src/core/platforms/GlContextWrapper.ts +291 -0
  424. package/src/core/platforms/Platform.ts +176 -77
  425. package/src/core/{lib → platforms/web}/WebGlContextWrapper.ts +1547 -1368
  426. package/src/core/platforms/web/WebPlatform.ts +306 -84
  427. package/src/core/platforms/web/WebPlatformChrome50.ts +63 -0
  428. package/src/core/platforms/web/WebPlatformLegacy.ts +150 -0
  429. package/src/core/platforms/web/WebPlatformNext.ts +57 -0
  430. package/src/core/platforms/web/lib/ImageWorker.ts +192 -0
  431. package/src/core/platforms/web/lib/ImageWorkerDefault.ts +117 -0
  432. package/src/core/platforms/web/lib/ImageWorkerLegacy.ts +87 -0
  433. package/src/core/platforms/web/lib/ImageWorkerNoOptions.ts +99 -0
  434. package/src/core/platforms/web/lib/createImageBitmap.ts +40 -0
  435. package/src/core/platforms/web/lib/textureCompression.ts +391 -0
  436. package/src/core/{lib → platforms/web/lib}/textureSvg.ts +66 -78
  437. package/src/core/platforms/web/lib/utils.ts +105 -0
  438. package/src/core/renderers/CoreContextTexture.ts +44 -43
  439. package/src/core/renderers/CoreRenderOp.ts +22 -22
  440. package/src/core/renderers/CoreRenderer.ts +71 -110
  441. package/src/core/renderers/CoreShaderNode.ts +202 -175
  442. package/src/core/renderers/CoreShaderProgram.ts +23 -23
  443. package/src/core/renderers/canvas/CanvasRenderer.ts +258 -302
  444. package/src/core/renderers/canvas/CanvasShaderNode.ts +95 -96
  445. package/src/core/renderers/canvas/CanvasTexture.ts +160 -156
  446. package/src/core/renderers/webgl/SdfRenderOp.ts +106 -0
  447. package/src/core/renderers/webgl/WebGlCtxRenderTexture.ts +89 -86
  448. package/src/core/renderers/webgl/WebGlCtxSubTexture.ts +95 -50
  449. package/src/core/renderers/webgl/WebGlCtxTexture.test.ts +113 -0
  450. package/src/core/renderers/webgl/WebGlCtxTexture.ts +350 -298
  451. package/src/core/renderers/webgl/WebGlRenderer.ts +727 -747
  452. package/src/core/renderers/webgl/WebGlShaderNode.ts +430 -435
  453. package/src/core/renderers/webgl/WebGlShaderProgram.ts +364 -341
  454. package/src/core/renderers/webgl/internal/BufferCollection.ts +54 -54
  455. package/src/core/renderers/webgl/internal/RendererUtils.ts +150 -155
  456. package/src/core/renderers/webgl/internal/ShaderUtils.ts +283 -281
  457. package/src/core/renderers/webgl/internal/WebGlUtils.ts +35 -35
  458. package/src/core/shaders/canvas/Border.ts +132 -78
  459. package/src/core/shaders/canvas/HolePunch.ts +56 -62
  460. package/src/core/shaders/canvas/LinearGradient.ts +73 -71
  461. package/src/core/shaders/canvas/RadialGradient.ts +96 -99
  462. package/src/core/shaders/canvas/Rounded.ts +55 -55
  463. package/src/core/shaders/canvas/RoundedWithBorder.ts +122 -74
  464. package/src/core/shaders/canvas/RoundedWithBorderAndShadow.ts +136 -90
  465. package/src/core/shaders/canvas/RoundedWithShadow.ts +71 -70
  466. package/src/core/shaders/canvas/Shadow.ts +54 -52
  467. package/src/core/shaders/canvas/utils/render.ts +160 -151
  468. package/src/core/shaders/templates/BorderTemplate.ts +145 -115
  469. package/src/core/shaders/templates/HolePunchTemplate.ts +82 -82
  470. package/src/core/shaders/templates/LinearGradientTemplate.ts +71 -71
  471. package/src/core/shaders/templates/RadialGradientTemplate.ts +83 -81
  472. package/src/core/shaders/templates/RoundedTemplate.ts +98 -98
  473. package/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.ts +38 -38
  474. package/src/core/shaders/templates/RoundedWithBorderTemplate.ts +35 -35
  475. package/src/core/shaders/templates/RoundedWithShadowTemplate.ts +35 -35
  476. package/src/core/shaders/templates/ShadowTemplate.ts +106 -106
  477. package/src/core/shaders/utils.ts +46 -46
  478. package/src/core/shaders/webgl/Border.ts +169 -116
  479. package/src/core/shaders/webgl/Default.ts +88 -89
  480. package/src/core/shaders/webgl/DefaultBatched.ts +129 -129
  481. package/src/core/shaders/webgl/HolePunch.ts +75 -75
  482. package/src/core/shaders/webgl/LinearGradient.ts +106 -82
  483. package/src/core/shaders/webgl/RadialGradient.ts +108 -85
  484. package/src/core/shaders/webgl/Rounded.ts +115 -117
  485. package/src/core/shaders/webgl/RoundedWithBorder.ts +210 -155
  486. package/src/core/shaders/webgl/RoundedWithBorderAndShadow.ts +234 -175
  487. package/src/core/shaders/webgl/RoundedWithShadow.ts +96 -98
  488. package/src/core/shaders/webgl/SdfShader.ts +122 -134
  489. package/src/core/shaders/webgl/Shadow.ts +121 -115
  490. package/src/core/text-rendering/CanvasFontHandler.ts +304 -0
  491. package/src/core/text-rendering/CanvasTextRenderer.ts +255 -0
  492. package/src/core/text-rendering/SdfFontHandler.ts +581 -0
  493. package/src/core/text-rendering/SdfTextRenderer.ts +403 -0
  494. package/src/core/text-rendering/TextLayoutEngine.ts +672 -0
  495. package/src/core/text-rendering/TextRenderer.ts +444 -0
  496. package/src/core/text-rendering/Utils.ts +99 -0
  497. package/src/core/text-rendering/tests/TextLayoutEngine.test.ts +453 -0
  498. package/src/core/textures/ColorTexture.ts +104 -102
  499. package/src/core/textures/ImageTexture.ts +292 -418
  500. package/src/core/textures/NoiseTexture.ts +106 -104
  501. package/src/core/textures/RenderTexture.ts +87 -85
  502. package/src/core/textures/SubTexture.ts +184 -205
  503. package/src/core/textures/Texture.ts +524 -381
  504. package/src/core/utils.ts +229 -227
  505. package/src/env.d.ts +7 -7
  506. package/src/main-api/INode.ts +100 -100
  507. package/src/main-api/Inspector.ts +1278 -569
  508. package/src/main-api/Renderer.ts +1030 -818
  509. package/src/main-api/utils.ts +45 -45
  510. package/src/utils.ts +220 -267
  511. package/COPYING +0 -1
  512. package/dist/src/core/renderers/webgl/WebGlRenderOp.d.ts +0 -44
  513. package/dist/src/core/renderers/webgl/WebGlRenderOp.js.map +0 -1
  514. package/src/core/lib/ImageWorker.ts +0 -286
  515. package/src/core/lib/textureCompression.ts +0 -152
  516. package/src/core/lib/validateImageBitmap.ts +0 -87
  517. package/src/core/renderers/canvas/internal/C2DShaderUtils.ts +0 -220
  518. package/src/core/renderers/webgl/WebGlRenderOp.ts +0 -161
  519. package/src/core/text-rendering/TextTextureRendererUtils.ts +0 -263
  520. package/src/core/text-rendering/TrFontManager.ts +0 -183
  521. package/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.ts +0 -176
  522. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.ts +0 -139
  523. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.test.ts +0 -173
  524. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.ts +0 -171
  525. package/src/core/text-rendering/font-face-types/TrFontFace.ts +0 -187
  526. package/src/core/text-rendering/font-face-types/WebTrFontFace.ts +0 -94
  527. package/src/core/text-rendering/font-face-types/utils.ts +0 -39
  528. package/src/core/text-rendering/renderers/CanvasTextRenderer.ts +0 -514
  529. package/src/core/text-rendering/renderers/LightningTextTextureRenderer.ts +0 -863
  530. package/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.ts +0 -793
  531. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.test.ts +0 -48
  532. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.ts +0 -66
  533. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.ts +0 -52
  534. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.ts +0 -117
  535. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.test.ts +0 -133
  536. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.ts +0 -497
  537. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.test.ts +0 -49
  538. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.ts +0 -52
  539. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.test.ts +0 -205
  540. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.ts +0 -93
  541. package/src/core/text-rendering/renderers/TextRenderer.ts +0 -567
@@ -2,6 +2,7 @@ import { CoreNode, } from '../core/CoreNode.js';
2
2
  import {} from './Renderer.js';
3
3
  import { isProductionEnvironment } from '../utils.js';
4
4
  import { CoreTextNode } from '../core/CoreTextNode.js';
5
+ import { TextureType } from '../core/textures/Texture.js';
5
6
  const stylePropertyMap = {
6
7
  alpha: (v) => {
7
8
  if (v === 1) {
@@ -15,15 +16,15 @@ const stylePropertyMap = {
15
16
  y: (y) => {
16
17
  return { prop: 'top', value: `${y}px` };
17
18
  },
18
- width: (w) => {
19
+ w: (w) => {
19
20
  if (w === 0) {
20
- return null;
21
+ return { prop: 'width', value: 'auto' };
21
22
  }
22
23
  return { prop: 'width', value: `${w}px` };
23
24
  },
24
- height: (h) => {
25
+ h: (h) => {
25
26
  if (h === 0) {
26
- return null;
27
+ return { prop: 'height', value: 'auto' };
27
28
  }
28
29
  return { prop: 'height', value: `${h}px` };
29
30
  },
@@ -42,8 +43,6 @@ const stylePropertyMap = {
42
43
  zIndex: () => 'z-index',
43
44
  fontFamily: () => 'font-family',
44
45
  fontStyle: () => 'font-style',
45
- fontWeight: () => 'font-weight',
46
- fontStretch: () => 'font-stretch',
47
46
  letterSpacing: () => 'letter-spacing',
48
47
  textAlign: () => 'text-align',
49
48
  overflowSuffix: () => 'overflow-suffix',
@@ -107,6 +106,14 @@ const gradientColorPropertyMap = [
107
106
  'colorBl',
108
107
  'colorBr',
109
108
  ];
109
+ const textureTypeNames = {
110
+ [TextureType.generic]: 'generic',
111
+ [TextureType.color]: 'color',
112
+ [TextureType.image]: 'image',
113
+ [TextureType.noise]: 'noise',
114
+ [TextureType.renderToTexture]: 'renderToTexture',
115
+ [TextureType.subTexture]: 'subTexture',
116
+ };
110
117
  const knownProperties = new Set([
111
118
  ...Object.keys(stylePropertyMap),
112
119
  ...Object.keys(domPropertyMap),
@@ -114,6 +121,7 @@ const knownProperties = new Set([
114
121
  'src',
115
122
  'parent',
116
123
  'data',
124
+ 'text',
117
125
  ]);
118
126
  export class Inspector {
119
127
  root = null;
@@ -124,12 +132,38 @@ export class Inspector {
124
132
  width = 1920;
125
133
  scaleX = 1;
126
134
  scaleY = 1;
135
+ textureMetrics = new Map();
136
+ // Performance monitoring for frequent setter calls
137
+ static setterCallCount = new Map();
138
+ // Animation monitoring structures
139
+ static activeAnimations = new Map();
140
+ static animationHistory = [];
141
+ // Performance monitoring settings (configured via constructor)
142
+ performanceSettings = {
143
+ enablePerformanceMonitoring: false,
144
+ excessiveCallThreshold: 100,
145
+ resetInterval: 5000,
146
+ enableAnimationMonitoring: false,
147
+ maxAnimationHistory: 1000,
148
+ animationStatsInterval: 0,
149
+ };
150
+ // Animation stats printing timer
151
+ animationStatsTimer = null;
127
152
  constructor(canvas, settings) {
128
153
  if (isProductionEnvironment === true)
129
154
  return;
130
155
  if (!settings) {
131
156
  throw new Error('settings is required');
132
157
  }
158
+ // Initialize performance monitoring settings with defaults
159
+ this.performanceSettings = {
160
+ enablePerformanceMonitoring: settings.inspectorOptions?.enablePerformanceMonitoring ?? false,
161
+ excessiveCallThreshold: settings.inspectorOptions?.excessiveCallThreshold ?? 100,
162
+ resetInterval: settings.inspectorOptions?.resetInterval ?? 5000,
163
+ enableAnimationMonitoring: settings.inspectorOptions?.enableAnimationMonitoring ?? false,
164
+ maxAnimationHistory: settings.inspectorOptions?.maxAnimationHistory ?? 1000,
165
+ animationStatsInterval: settings.inspectorOptions?.animationStatsInterval ?? 0,
166
+ };
133
167
  // calc dimensions based on the devicePixelRatio
134
168
  this.height = Math.ceil(settings.appHeight ?? 1080 / (settings.deviceLogicalPixelRatio ?? 1));
135
169
  this.width = Math.ceil(settings.appWidth ?? 1920 / (settings.deviceLogicalPixelRatio ?? 1));
@@ -151,8 +185,256 @@ export class Inspector {
151
185
  this.resizeObserver.observe(canvas);
152
186
  //listen for changes on window
153
187
  window.addEventListener('resize', this.setRootPosition.bind(this));
188
+ // Start animation stats timer if enabled
189
+ this.startAnimationStatsTimer();
154
190
  console.warn('Inspector is enabled, this will impact performance');
155
191
  }
192
+ /**
193
+ * Track setter calls for performance monitoring
194
+ * Only active when Inspector is loaded
195
+ */
196
+ trackSetterCall(nodeId, setterName) {
197
+ if (!this.performanceSettings.enablePerformanceMonitoring) {
198
+ return;
199
+ }
200
+ const key = `${nodeId}_${setterName}`;
201
+ const now = Date.now();
202
+ const existing = Inspector.setterCallCount.get(key);
203
+ if (!existing) {
204
+ Inspector.setterCallCount.set(key, { count: 1, lastReset: now, nodeId });
205
+ return;
206
+ }
207
+ // Reset counter if enough time has passed
208
+ if (now - existing.lastReset > this.performanceSettings.resetInterval) {
209
+ existing.count = 1;
210
+ existing.lastReset = now;
211
+ return;
212
+ }
213
+ existing.count++;
214
+ // Log if threshold exceeded
215
+ if (existing.count === this.performanceSettings.excessiveCallThreshold) {
216
+ console.warn(`🚨 Inspector Performance Warning: Setter '${setterName}' called ${existing.count} times in ${this.performanceSettings.resetInterval}ms on node ${nodeId}`);
217
+ }
218
+ else if (existing.count > this.performanceSettings.excessiveCallThreshold &&
219
+ existing.count % 50 === 0) {
220
+ console.warn(`🚨 Inspector Performance Warning: Setter '${setterName}' called ${existing.count} times in ${this.performanceSettings.resetInterval}ms on node ${nodeId} (continuing...)`);
221
+ }
222
+ }
223
+ /**
224
+ * Get current performance monitoring statistics
225
+ */
226
+ static getPerformanceStats() {
227
+ const stats = [];
228
+ const now = Date.now();
229
+ Inspector.setterCallCount.forEach((data, key) => {
230
+ const parts = key.split('_');
231
+ const nodeIdStr = parts[0];
232
+ const setterName = parts[1];
233
+ if (nodeIdStr && setterName) {
234
+ const timeWindow = now - data.lastReset;
235
+ stats.push({
236
+ nodeId: parseInt(nodeIdStr, 10),
237
+ setterName,
238
+ count: data.count,
239
+ timeWindow,
240
+ });
241
+ }
242
+ });
243
+ return stats.sort((a, b) => b.count - a.count);
244
+ }
245
+ /**
246
+ * Clear performance monitoring statistics
247
+ */
248
+ static clearPerformanceStats() {
249
+ Inspector.setterCallCount.clear();
250
+ }
251
+ /**
252
+ * Generate a unique animation ID
253
+ */
254
+ static generateAnimationId() {
255
+ return `anim_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`;
256
+ }
257
+ /**
258
+ * Wrap animation controller with monitoring capabilities
259
+ */
260
+ wrapAnimationController(controller, nodeId, props, settings, div) {
261
+ if (!this.performanceSettings.enableAnimationMonitoring) {
262
+ // Just add the basic DOM animation without tracking
263
+ const originalStart = controller.start.bind(controller);
264
+ controller.start = () => {
265
+ this.animateNode(div, props, settings);
266
+ return originalStart();
267
+ };
268
+ return controller;
269
+ }
270
+ const animationId = Inspector.generateAnimationId();
271
+ // Create wrapper controller
272
+ const wrappedController = {
273
+ start: () => {
274
+ this.trackAnimationStart(animationId, nodeId, props, settings, controller);
275
+ this.animateNode(div, props, settings);
276
+ return controller.start();
277
+ },
278
+ stop: () => {
279
+ this.trackAnimationEnd(animationId, 'stopped');
280
+ return controller.stop();
281
+ },
282
+ pause: () => {
283
+ this.updateAnimationState(animationId, 'paused');
284
+ return controller.pause();
285
+ },
286
+ restore: () => {
287
+ this.trackAnimationEnd(animationId, 'cancelled');
288
+ return controller.restore();
289
+ },
290
+ waitUntilStopped: () => {
291
+ return controller.waitUntilStopped().then(() => {
292
+ this.trackAnimationEnd(animationId, 'finished');
293
+ });
294
+ },
295
+ get state() {
296
+ return controller.state;
297
+ },
298
+ // Event emitter methods
299
+ on: controller.on.bind(controller),
300
+ off: controller.off.bind(controller),
301
+ once: controller.once.bind(controller),
302
+ emit: controller.emit.bind(controller),
303
+ };
304
+ // Track animation events
305
+ controller.on('animating', () => {
306
+ this.updateAnimationState(animationId, 'running');
307
+ });
308
+ controller.on('stopped', () => {
309
+ this.trackAnimationEnd(animationId, 'finished');
310
+ });
311
+ return wrappedController;
312
+ }
313
+ /**
314
+ * Track animation start
315
+ */
316
+ trackAnimationStart(animationId, nodeId, props, settings, controller) {
317
+ const startTime = Date.now();
318
+ Inspector.activeAnimations.set(animationId, {
319
+ nodeId,
320
+ animationId,
321
+ startTime,
322
+ props,
323
+ settings,
324
+ controller,
325
+ state: 'scheduled',
326
+ });
327
+ }
328
+ /**
329
+ * Update animation state
330
+ */
331
+ updateAnimationState(animationId, state) {
332
+ const animation = Inspector.activeAnimations.get(animationId);
333
+ if (animation) {
334
+ animation.state = state;
335
+ }
336
+ }
337
+ /**
338
+ * Track animation end
339
+ */
340
+ trackAnimationEnd(animationId, completionType) {
341
+ const animation = Inspector.activeAnimations.get(animationId);
342
+ if (!animation)
343
+ return;
344
+ const endTime = Date.now();
345
+ const actualDuration = endTime - animation.startTime;
346
+ const expectedDuration = animation.settings.duration || 1000;
347
+ // Move to history
348
+ Inspector.animationHistory.unshift({
349
+ nodeId: animation.nodeId,
350
+ animationId: animation.animationId,
351
+ startTime: animation.startTime,
352
+ endTime,
353
+ duration: expectedDuration,
354
+ actualDuration,
355
+ props: animation.props,
356
+ settings: animation.settings,
357
+ completionType,
358
+ });
359
+ // Limit history size for performance
360
+ if (Inspector.animationHistory.length >
361
+ this.performanceSettings.maxAnimationHistory) {
362
+ Inspector.animationHistory.splice(this.performanceSettings.maxAnimationHistory);
363
+ }
364
+ // Remove from active animations
365
+ Inspector.activeAnimations.delete(animationId);
366
+ }
367
+ /**
368
+ * Get currently active animations
369
+ */
370
+ static getActiveAnimations() {
371
+ const now = Date.now();
372
+ const activeAnimations = [];
373
+ Inspector.activeAnimations.forEach((animation) => {
374
+ activeAnimations.push({
375
+ nodeId: animation.nodeId,
376
+ animationId: animation.animationId,
377
+ startTime: animation.startTime,
378
+ duration: animation.settings.duration || 1000,
379
+ elapsedTime: now - animation.startTime,
380
+ props: animation.props,
381
+ settings: animation.settings,
382
+ state: animation.state,
383
+ });
384
+ });
385
+ return activeAnimations.sort((a, b) => b.startTime - a.startTime);
386
+ }
387
+ /**
388
+ * Get animation statistics
389
+ */
390
+ static getAnimationStats() {
391
+ const totalAnimations = Inspector.animationHistory.length;
392
+ const activeCount = Inspector.activeAnimations.size;
393
+ // Calculate average duration from finished animations only
394
+ const finishedAnimations = Inspector.animationHistory.filter((anim) => anim.completionType === 'finished');
395
+ const averageDuration = finishedAnimations.length > 0
396
+ ? finishedAnimations.reduce((sum, anim) => sum + anim.actualDuration, 0) / finishedAnimations.length
397
+ : 0;
398
+ return {
399
+ totalAnimations,
400
+ activeCount,
401
+ averageDuration,
402
+ };
403
+ }
404
+ /**
405
+ * Clear animation monitoring data
406
+ */
407
+ static clearAnimationStats() {
408
+ Inspector.activeAnimations.clear();
409
+ Inspector.animationHistory.length = 0;
410
+ }
411
+ /**
412
+ * Start the animation stats timer if enabled
413
+ */
414
+ startAnimationStatsTimer() {
415
+ console.log(`Starting animation stats timer with interval: ${this.performanceSettings.animationStatsInterval} seconds`);
416
+ if (this.performanceSettings.animationStatsInterval > 0) {
417
+ this.animationStatsTimer = setInterval(() => {
418
+ this.printAnimationStats();
419
+ }, this.performanceSettings.animationStatsInterval * 1000);
420
+ }
421
+ }
422
+ /**
423
+ * Stop the animation stats timer
424
+ */
425
+ stopAnimationStatsTimer() {
426
+ if (this.animationStatsTimer) {
427
+ clearInterval(this.animationStatsTimer);
428
+ this.animationStatsTimer = null;
429
+ }
430
+ }
431
+ /**
432
+ * Print current animation statistics to console
433
+ */
434
+ printAnimationStats() {
435
+ const stats = Inspector.getAnimationStats();
436
+ console.log(`🎬 Animation Stats: ${stats.activeCount} active, ${stats.totalAnimations} completed, ${Math.round(stats.averageDuration)}ms avg duration`);
437
+ }
156
438
  setRootPosition() {
157
439
  if (this.root === null || this.canvas === null) {
158
440
  return;
@@ -211,12 +493,84 @@ export class Inspector {
211
493
  return this.createProxy(node, div);
212
494
  }
213
495
  createTextNode(node) {
214
- const div = this.createDiv(node.id, node.props);
496
+ // eslint-disable-next-line
497
+ // @ts-ignore - textProps is a private property and keeping it that way
498
+ // but we need it from the inspector to set the initial properties on the div element
499
+ const div = this.createDiv(node.id, node.textProps);
215
500
  div.node = node;
216
501
  node.div = div;
217
502
  return this.createProxy(node, div);
218
503
  }
219
504
  createProxy(node, div) {
505
+ // Store texture event listeners for cleanup
506
+ const textureListeners = new Map();
507
+ const coreNodeListeners = new Map();
508
+ const setupCoreNodeListeners = (coreNode) => {
509
+ const onLoaded = () => {
510
+ this.updateTextNodeDimensions(div, coreNode);
511
+ };
512
+ coreNode.on('loaded', onLoaded);
513
+ coreNodeListeners.set(coreNode, { onLoaded });
514
+ };
515
+ // Helper function to setup texture event listeners
516
+ const setupTextureListeners = (texture) => {
517
+ // Clean up existing listeners first
518
+ textureListeners.forEach((listeners, oldTexture) => {
519
+ oldTexture.off('loaded', listeners.onLoaded);
520
+ oldTexture.off('failed', listeners.onFailed);
521
+ oldTexture.off('freed', listeners.onFreed);
522
+ });
523
+ textureListeners.clear();
524
+ // Setup new listeners if texture exists
525
+ if (texture) {
526
+ // Initialize metrics if not exists
527
+ if (!this.textureMetrics.has(texture)) {
528
+ this.textureMetrics.set(texture, {
529
+ previousState: texture.state,
530
+ loadedCount: 0,
531
+ failedCount: 0,
532
+ freedCount: 0,
533
+ });
534
+ }
535
+ const onLoaded = () => {
536
+ const metrics = this.textureMetrics.get(texture);
537
+ if (metrics) {
538
+ metrics.previousState =
539
+ metrics.previousState !== texture.state
540
+ ? metrics.previousState
541
+ : 'loading';
542
+ metrics.loadedCount++;
543
+ }
544
+ this.updateTextureAttributes(div, texture);
545
+ };
546
+ const onFailed = () => {
547
+ const metrics = this.textureMetrics.get(texture);
548
+ if (metrics) {
549
+ metrics.previousState =
550
+ metrics.previousState !== texture.state
551
+ ? metrics.previousState
552
+ : 'loading';
553
+ metrics.failedCount++;
554
+ }
555
+ this.updateTextureAttributes(div, texture);
556
+ };
557
+ const onFreed = () => {
558
+ const metrics = this.textureMetrics.get(texture);
559
+ if (metrics) {
560
+ metrics.previousState =
561
+ metrics.previousState !== texture.state
562
+ ? metrics.previousState
563
+ : texture.state;
564
+ metrics.freedCount++;
565
+ }
566
+ this.updateTextureAttributes(div, texture);
567
+ };
568
+ texture.on('loaded', onLoaded);
569
+ texture.on('failed', onFailed);
570
+ texture.on('freed', onFreed);
571
+ textureListeners.set(texture, { onLoaded, onFailed, onFreed });
572
+ }
573
+ };
220
574
  // Define traps for each property in knownProperties
221
575
  knownProperties.forEach((property) => {
222
576
  let originalProp = Object.getOwnPropertyDescriptor(node, property);
@@ -228,14 +582,26 @@ export class Inspector {
228
582
  if (originalProp === undefined) {
229
583
  return;
230
584
  }
585
+ if (property === 'text') {
586
+ setupCoreNodeListeners(node);
587
+ }
231
588
  Object.defineProperty(node, property, {
232
589
  get() {
233
590
  // eslint-disable-next-line @typescript-eslint/no-unsafe-return
234
591
  return originalProp?.get?.call(node);
235
592
  },
236
593
  set: (value) => {
594
+ // Track setter call for performance monitoring
595
+ this.trackSetterCall(node.id, property);
237
596
  originalProp?.set?.call(node, value);
238
597
  this.updateNodeProperty(div, property, value, node.props);
598
+ // Setup texture event listeners if this is a texture property
599
+ if (property === 'texture') {
600
+ const textureValue = value && typeof value === 'object' && 'state' in value
601
+ ? value
602
+ : null;
603
+ setupTextureListeners(textureValue);
604
+ }
239
605
  },
240
606
  configurable: true,
241
607
  enumerable: true,
@@ -244,6 +610,19 @@ export class Inspector {
244
610
  const originalDestroy = node.destroy;
245
611
  Object.defineProperty(node, 'destroy', {
246
612
  value: () => {
613
+ // Clean up texture event listeners and metrics
614
+ textureListeners.forEach((listeners, texture) => {
615
+ texture.off('loaded', listeners.onLoaded);
616
+ texture.off('failed', listeners.onFailed);
617
+ texture.off('freed', listeners.onFreed);
618
+ // Clean up metrics for this texture
619
+ this.textureMetrics.delete(texture);
620
+ });
621
+ textureListeners.clear();
622
+ coreNodeListeners.forEach((listeners, coreNode) => {
623
+ coreNode.off('loaded', listeners.onLoaded);
624
+ });
625
+ coreNodeListeners.clear();
247
626
  this.destroyNode(node.id);
248
627
  originalDestroy.call(node);
249
628
  },
@@ -253,18 +632,74 @@ export class Inspector {
253
632
  Object.defineProperty(node, 'animate', {
254
633
  value: (props, settings) => {
255
634
  const animationController = originalAnimate.call(node, props, settings);
256
- const originalStart = animationController.start.bind(animationController);
257
- animationController.start = () => {
258
- this.animateNode(div, props, settings);
259
- return originalStart();
260
- };
261
- return animationController;
635
+ // Wrap animation controller with monitoring
636
+ return this.wrapAnimationController(animationController, node.id, props, settings, div);
262
637
  },
263
638
  configurable: true,
264
639
  });
265
640
  return node;
266
641
  }
642
+ updateTextNodeDimensions(div, node) {
643
+ const textMetrics = node.renderInfo;
644
+ if (textMetrics) {
645
+ div.style.width = `${textMetrics.width}px`;
646
+ div.style.height = `${textMetrics.height}px`;
647
+ }
648
+ else {
649
+ div.style.removeProperty('width');
650
+ div.style.removeProperty('height');
651
+ }
652
+ }
653
+ updateTextureAttributes(div, texture) {
654
+ // Update texture state
655
+ div.setAttribute('data-texture-state', texture.state);
656
+ // Update texture type
657
+ div.setAttribute('data-texture-type', textureTypeNames[texture.type] || 'unknown');
658
+ // Update texture dimensions if available
659
+ if (texture.dimensions) {
660
+ div.setAttribute('data-texture-width', String(texture.dimensions.w));
661
+ div.setAttribute('data-texture-height', String(texture.dimensions.h));
662
+ }
663
+ else {
664
+ div.removeAttribute('data-texture-width');
665
+ div.removeAttribute('data-texture-height');
666
+ }
667
+ // Update renderable owners count
668
+ div.setAttribute('data-texture-owners', String(texture.renderableOwners.length));
669
+ // Update retry count
670
+ div.setAttribute('data-texture-retry-count', String(texture.retryCount));
671
+ // Update max retry count if available
672
+ if (texture.maxRetryCount !== null) {
673
+ div.setAttribute('data-texture-max-retry-count', String(texture.maxRetryCount));
674
+ }
675
+ else {
676
+ div.removeAttribute('data-texture-max-retry-count');
677
+ }
678
+ // Update metrics if available
679
+ const metrics = this.textureMetrics.get(texture);
680
+ if (metrics) {
681
+ div.setAttribute('data-texture-previous-state', metrics.previousState);
682
+ div.setAttribute('data-texture-loaded-count', String(metrics.loadedCount));
683
+ div.setAttribute('data-texture-failed-count', String(metrics.failedCount));
684
+ div.setAttribute('data-texture-freed-count', String(metrics.freedCount));
685
+ }
686
+ else {
687
+ div.removeAttribute('data-texture-previous-state');
688
+ div.removeAttribute('data-texture-loaded-count');
689
+ div.removeAttribute('data-texture-failed-count');
690
+ div.removeAttribute('data-texture-freed-count');
691
+ }
692
+ // Update error information if present
693
+ if (texture.error) {
694
+ div.setAttribute('data-texture-error', texture.error.code || texture.error.message);
695
+ }
696
+ else {
697
+ div.removeAttribute('data-texture-error');
698
+ }
699
+ }
267
700
  destroy() {
701
+ // Stop animation stats timer
702
+ this.stopAnimationStatsTimer();
268
703
  // Remove DOM observers
269
704
  this.mutationObserver.disconnect();
270
705
  this.resizeObserver.disconnect();
@@ -273,6 +708,8 @@ export class Inspector {
273
708
  if (this.root && this.root.parentNode) {
274
709
  this.root.remove();
275
710
  }
711
+ // Clean up animation monitoring data
712
+ Inspector.clearAnimationStats();
276
713
  }
277
714
  destroyNode(id) {
278
715
  const div = document.getElementById(id.toString());
@@ -302,9 +739,11 @@ export class Inspector {
302
739
  // special case for text
303
740
  if (property === 'text') {
304
741
  div.innerHTML = String(value);
305
- // hide text because we can't render SDF fonts
306
- // it would look weird and obstruct the WebGL rendering
307
- div.style.visibility = 'hidden';
742
+ // Keep DOM text invisible without breaking visibility checks
743
+ // Use very low opacity (0.001) instead of 0 so Playwright still detects it
744
+ div.style.opacity = '0.001';
745
+ div.style.pointerEvents = 'none';
746
+ div.style.userSelect = 'none';
308
747
  return;
309
748
  }
310
749
  // special case for images
@@ -339,14 +778,14 @@ export class Inspector {
339
778
  let value = mappedStyleResponse.value;
340
779
  if (property === 'x') {
341
780
  const mount = props.mountX;
342
- const width = props.width;
781
+ const width = props.w;
343
782
  if (mount) {
344
783
  value = `${parseInt(value) - width * mount}px`;
345
784
  }
346
785
  }
347
786
  else if (property === 'y') {
348
787
  const mount = props.mountY;
349
- const height = props.height;
788
+ const height = props.h;
350
789
  if (mount) {
351
790
  value = `${parseInt(value) - height * mount}px`;
352
791
  }
@@ -394,14 +833,14 @@ export class Inspector {
394
833
  // loop = false,
395
834
  // stopMethod = false,
396
835
  } = settings;
397
- const { x, y, width, height, alpha = 1, rotation = 0, scale = 1, color, mountX, mountY, } = props;
836
+ const { x, y, w, h, alpha = 1, rotation = 0, scale = 1, color, mountX, mountY, } = props;
398
837
  // ignoring loops and repeats for now, as that might be a bit too much for the inspector
399
838
  function animate() {
400
839
  setTimeout(() => {
401
- div.style.top = `${y - height * mountY}px`;
402
- div.style.left = `${x - width * mountX}px`;
403
- div.style.width = `${width}px`;
404
- div.style.height = `${height}px`;
840
+ div.style.top = `${y - h * mountY}px`;
841
+ div.style.left = `${x - w * mountX}px`;
842
+ div.style.width = `${w}px`;
843
+ div.style.height = `${h}px`;
405
844
  div.style.opacity = `${alpha}`;
406
845
  div.style.rotate = `${rotation}rad`;
407
846
  div.style.scale = `${scale}`;