@lightningjs/renderer 3.0.0-beta14 → 3.0.0-beta15

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 (271) hide show
  1. package/dist/exports/index.d.ts +1 -0
  2. package/dist/exports/index.js.map +1 -1
  3. package/dist/src/core/CoreNode.d.ts +1 -1
  4. package/dist/src/core/CoreTextNode.d.ts +0 -2
  5. package/dist/src/core/CoreTextNode.js +4 -16
  6. package/dist/src/core/CoreTextNode.js.map +1 -1
  7. package/dist/src/core/Stage.js +2 -3
  8. package/dist/src/core/Stage.js.map +1 -1
  9. package/dist/src/core/TextureError.d.ts +11 -0
  10. package/dist/src/core/TextureError.js +37 -0
  11. package/dist/src/core/TextureError.js.map +1 -0
  12. package/dist/src/core/animations/CoreAnimation.d.ts +3 -2
  13. package/dist/src/core/animations/CoreAnimation.js +3 -2
  14. package/dist/src/core/animations/CoreAnimation.js.map +1 -1
  15. package/dist/src/core/lib/WebGlContextWrapper.d.ts +5 -5
  16. package/dist/src/core/lib/textureCompression.js +1 -1
  17. package/dist/src/core/lib/textureCompression.js.map +1 -1
  18. package/dist/src/core/platform.d.ts +10 -0
  19. package/dist/src/core/platform.js +81 -0
  20. package/dist/src/core/platform.js.map +1 -0
  21. package/dist/src/core/renderers/CoreShader.d.ts +9 -0
  22. package/{src/core/text-rendering/sdf/index.ts → dist/src/core/renderers/CoreShader.js} +11 -3
  23. package/dist/src/core/renderers/CoreShader.js.map +1 -0
  24. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.d.ts +33 -0
  25. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js +250 -0
  26. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js.map +1 -0
  27. package/dist/src/core/renderers/canvas/CanvasCoreTexture.d.ts +17 -0
  28. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js +125 -0
  29. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js.map +1 -0
  30. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.d.ts +14 -0
  31. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js +138 -0
  32. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js.map +1 -0
  33. package/dist/src/core/renderers/canvas/internal/ColorUtils.d.ts +19 -0
  34. package/dist/src/core/renderers/canvas/internal/ColorUtils.js +58 -0
  35. package/dist/src/core/renderers/canvas/internal/ColorUtils.js.map +1 -0
  36. package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.d.ts +10 -0
  37. package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.js +43 -0
  38. package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.js.map +1 -0
  39. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.d.ts +12 -0
  40. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js +58 -0
  41. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js.map +1 -0
  42. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.d.ts +9 -0
  43. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.js +38 -0
  44. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.js.map +1 -0
  45. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.d.ts +65 -0
  46. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js +269 -0
  47. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js.map +1 -0
  48. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.d.ts +34 -0
  49. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js +114 -0
  50. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js.map +1 -0
  51. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.d.ts +133 -0
  52. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js +616 -0
  53. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js.map +1 -0
  54. package/dist/src/core/renderers/webgl/WebGlCoreShader.d.ts +83 -0
  55. package/dist/src/core/renderers/webgl/WebGlCoreShader.js +233 -0
  56. package/dist/src/core/renderers/webgl/WebGlCoreShader.js.map +1 -0
  57. package/dist/src/core/renderers/webgl/shaders/DefaultShader.d.ts +9 -0
  58. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js +87 -0
  59. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js.map +1 -0
  60. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.d.ts +10 -0
  61. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js +119 -0
  62. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js.map +1 -0
  63. package/dist/src/core/renderers/webgl/shaders/DynamicShader.d.ts +29 -0
  64. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js +413 -0
  65. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js.map +1 -0
  66. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.d.ts +28 -0
  67. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js +131 -0
  68. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js.map +1 -0
  69. package/dist/src/core/renderers/webgl/shaders/SdfShader.d.ts +47 -0
  70. package/dist/src/core/renderers/webgl/shaders/SdfShader.js +160 -0
  71. package/dist/src/core/renderers/webgl/shaders/SdfShader.js.map +1 -0
  72. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.d.ts +31 -0
  73. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js +71 -0
  74. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js.map +1 -0
  75. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.d.ts +30 -0
  76. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js +58 -0
  77. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js.map +1 -0
  78. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.d.ts +31 -0
  79. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js +71 -0
  80. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js.map +1 -0
  81. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.d.ts +31 -0
  82. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js +71 -0
  83. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js.map +1 -0
  84. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.d.ts +31 -0
  85. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js +71 -0
  86. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js.map +1 -0
  87. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.d.ts +9 -0
  88. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js +136 -0
  89. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js.map +1 -0
  90. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.d.ts +36 -0
  91. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js +85 -0
  92. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js.map +1 -0
  93. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.d.ts +45 -0
  94. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js +104 -0
  95. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js.map +1 -0
  96. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.d.ts +22 -0
  97. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.js +45 -0
  98. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.js.map +1 -0
  99. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.d.ts +58 -0
  100. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js +80 -0
  101. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js.map +1 -0
  102. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.d.ts +35 -0
  103. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js +129 -0
  104. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js.map +1 -0
  105. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.d.ts +39 -0
  106. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js +116 -0
  107. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js.map +1 -0
  108. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.d.ts +61 -0
  109. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js +127 -0
  110. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js.map +1 -0
  111. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.d.ts +40 -0
  112. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js +71 -0
  113. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js.map +1 -0
  114. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.d.ts +115 -0
  115. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.js +61 -0
  116. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.js.map +1 -0
  117. package/dist/src/core/shaders/canvas/RoundedWithBorder.js +1 -1
  118. package/dist/src/core/shaders/canvas/RoundedWithBorder.js.map +1 -1
  119. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js +1 -1
  120. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js.map +1 -1
  121. package/dist/src/core/shaders/webgl/LinearGradient.js +26 -3
  122. package/dist/src/core/shaders/webgl/LinearGradient.js.map +1 -1
  123. package/dist/src/core/shaders/webgl/RadialGradient.js +49 -27
  124. package/dist/src/core/shaders/webgl/RadialGradient.js.map +1 -1
  125. package/dist/src/core/shaders/webgl/SdfShader.d.ts +0 -2
  126. package/dist/src/core/shaders/webgl/SdfShader.js +1 -10
  127. package/dist/src/core/shaders/webgl/SdfShader.js.map +1 -1
  128. package/dist/src/core/text-rendering/CanvasFontHandler.d.ts +21 -3
  129. package/dist/src/core/text-rendering/CanvasFontHandler.js +94 -32
  130. package/dist/src/core/text-rendering/CanvasFontHandler.js.map +1 -1
  131. package/dist/src/core/text-rendering/CanvasTextRenderer.d.ts +2 -7
  132. package/dist/src/core/text-rendering/CanvasTextRenderer.js +51 -260
  133. package/dist/src/core/text-rendering/CanvasTextRenderer.js.map +1 -1
  134. package/dist/src/core/text-rendering/SdfFontHandler.d.ts +35 -5
  135. package/dist/src/core/text-rendering/SdfFontHandler.js +76 -56
  136. package/dist/src/core/text-rendering/SdfFontHandler.js.map +1 -1
  137. package/dist/src/core/text-rendering/SdfTextRenderer.d.ts +1 -1
  138. package/dist/src/core/text-rendering/SdfTextRenderer.js +38 -82
  139. package/dist/src/core/text-rendering/SdfTextRenderer.js.map +1 -1
  140. package/dist/src/core/text-rendering/TextLayoutEngine.d.ts +19 -0
  141. package/dist/src/core/text-rendering/{sdf/Utils.js → TextLayoutEngine.js} +125 -105
  142. package/dist/src/core/text-rendering/TextLayoutEngine.js.map +1 -0
  143. package/dist/src/core/text-rendering/TextRenderer.d.ts +30 -13
  144. package/dist/src/core/text-rendering/TextRenderingUtils.d.ts +12 -0
  145. package/dist/src/core/text-rendering/TextRenderingUtils.js +14 -0
  146. package/dist/src/core/text-rendering/TextRenderingUtils.js.map +1 -0
  147. package/dist/src/core/text-rendering/TextTextureRendererUtils.d.ts +72 -0
  148. package/dist/src/core/text-rendering/TextTextureRendererUtils.js +217 -0
  149. package/dist/src/core/text-rendering/TextTextureRendererUtils.js.map +1 -0
  150. package/dist/src/core/text-rendering/TrFontManager.d.ts +26 -0
  151. package/dist/src/core/text-rendering/TrFontManager.js +131 -0
  152. package/dist/src/core/text-rendering/TrFontManager.js.map +1 -0
  153. package/dist/src/core/text-rendering/Utils.d.ts +1 -42
  154. package/dist/src/core/text-rendering/Utils.js +4 -132
  155. package/dist/src/core/text-rendering/Utils.js.map +1 -1
  156. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.d.ts +39 -0
  157. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js +125 -0
  158. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js.map +1 -0
  159. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.d.ts +103 -0
  160. package/dist/src/core/text-rendering/{sdf/index.js → font-face-types/SdfTrFontFace/internal/FontShaper.js} +4 -3
  161. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.js.map +1 -0
  162. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.d.ts +62 -0
  163. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.js +88 -0
  164. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.js.map +1 -0
  165. package/dist/src/core/text-rendering/font-face-types/TrFontFace.d.ts +118 -0
  166. package/dist/src/core/text-rendering/font-face-types/TrFontFace.js +63 -0
  167. package/dist/src/core/text-rendering/font-face-types/TrFontFace.js.map +1 -0
  168. package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.d.ts +14 -0
  169. package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js +66 -0
  170. package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js.map +1 -0
  171. package/dist/src/core/text-rendering/font-face-types/utils.d.ts +1 -0
  172. package/dist/src/core/text-rendering/font-face-types/utils.js +38 -0
  173. package/dist/src/core/text-rendering/font-face-types/utils.js.map +1 -0
  174. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.d.ts +59 -0
  175. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js +397 -0
  176. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js.map +1 -0
  177. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.d.ts +120 -0
  178. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js +551 -0
  179. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js.map +1 -0
  180. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.d.ts +92 -0
  181. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +607 -0
  182. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +1 -0
  183. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.d.ts +12 -0
  184. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.js +61 -0
  185. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.js.map +1 -0
  186. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.d.ts +33 -0
  187. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.js +52 -0
  188. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.js.map +1 -0
  189. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.d.ts +13 -0
  190. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.js +32 -0
  191. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.js.map +1 -0
  192. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.d.ts +23 -0
  193. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.js +84 -0
  194. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.js.map +1 -0
  195. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.d.ts +4 -0
  196. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.js +34 -0
  197. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.js.map +1 -0
  198. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.d.ts +20 -0
  199. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js +308 -0
  200. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js.map +1 -0
  201. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.d.ts +10 -0
  202. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.js +40 -0
  203. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.js.map +1 -0
  204. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.d.ts +26 -0
  205. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.js +70 -0
  206. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.js.map +1 -0
  207. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.d.ts +16 -0
  208. package/dist/src/core/text-rendering/{canvas/Settings.js → renderers/SdfTextRenderer/internal/util.js} +22 -3
  209. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.js.map +1 -0
  210. package/dist/src/core/text-rendering/renderers/TextRenderer.d.ts +373 -0
  211. package/dist/src/core/text-rendering/renderers/TextRenderer.js +178 -0
  212. package/dist/src/core/text-rendering/renderers/TextRenderer.js.map +1 -0
  213. package/dist/src/core/utils.d.ts +2 -1
  214. package/dist/src/core/utils.js +1 -1
  215. package/dist/src/core/utils.js.map +1 -1
  216. package/dist/src/main-api/DynamicShaderController.d.ts +29 -0
  217. package/dist/src/main-api/DynamicShaderController.js +58 -0
  218. package/dist/src/main-api/DynamicShaderController.js.map +1 -0
  219. package/dist/src/main-api/Inspector.d.ts +124 -0
  220. package/dist/src/main-api/Inspector.js +283 -8
  221. package/dist/src/main-api/Inspector.js.map +1 -1
  222. package/dist/src/main-api/Renderer.d.ts +150 -26
  223. package/dist/src/main-api/Renderer.js +27 -25
  224. package/dist/src/main-api/Renderer.js.map +1 -1
  225. package/dist/src/main-api/ShaderController.d.ts +31 -0
  226. package/dist/src/main-api/ShaderController.js +37 -0
  227. package/dist/src/main-api/ShaderController.js.map +1 -0
  228. package/dist/tsconfig.dist.tsbuildinfo +1 -1
  229. package/exports/index.ts +1 -0
  230. package/package.json +14 -15
  231. package/src/core/CoreTextNode.ts +4 -22
  232. package/src/core/Stage.ts +2 -3
  233. package/src/core/animations/CoreAnimation.ts +8 -7
  234. package/src/core/lib/textureCompression.ts +4 -2
  235. package/src/core/shaders/canvas/RoundedWithBorder.ts +1 -1
  236. package/src/core/shaders/canvas/RoundedWithBorderAndShadow.ts +1 -1
  237. package/src/core/shaders/webgl/LinearGradient.ts +26 -3
  238. package/src/core/shaders/webgl/RadialGradient.ts +50 -28
  239. package/src/core/shaders/webgl/SdfShader.ts +1 -12
  240. package/src/core/text-rendering/CanvasFontHandler.ts +136 -39
  241. package/src/core/text-rendering/CanvasTextRenderer.ts +75 -440
  242. package/src/core/text-rendering/SdfFontHandler.ts +94 -60
  243. package/src/core/text-rendering/SdfTextRenderer.ts +62 -116
  244. package/src/core/text-rendering/{sdf/Utils.ts → TextLayoutEngine.ts} +209 -143
  245. package/src/core/text-rendering/TextRenderer.ts +36 -13
  246. package/src/core/text-rendering/Utils.ts +5 -163
  247. package/src/core/text-rendering/{sdf/Utils.test.ts → tests/Canvas.test.ts} +98 -122
  248. package/src/core/text-rendering/tests/SdfTests.test.ts +414 -0
  249. package/src/core/utils.ts +9 -7
  250. package/src/main-api/Inspector.ts +502 -12
  251. package/src/main-api/Renderer.ts +158 -26
  252. package/dist/src/core/text-rendering/canvas/Settings.d.ts +0 -64
  253. package/dist/src/core/text-rendering/canvas/Settings.js.map +0 -1
  254. package/dist/src/core/text-rendering/canvas/Utils.d.ts +0 -20
  255. package/dist/src/core/text-rendering/canvas/Utils.js +0 -144
  256. package/dist/src/core/text-rendering/canvas/Utils.js.map +0 -1
  257. package/dist/src/core/text-rendering/canvas/calculateRenderInfo.d.ts +0 -60
  258. package/dist/src/core/text-rendering/canvas/calculateRenderInfo.js +0 -183
  259. package/dist/src/core/text-rendering/canvas/calculateRenderInfo.js.map +0 -1
  260. package/dist/src/core/text-rendering/canvas/draw.d.ts +0 -5
  261. package/dist/src/core/text-rendering/canvas/draw.js +0 -132
  262. package/dist/src/core/text-rendering/canvas/draw.js.map +0 -1
  263. package/dist/src/core/text-rendering/sdf/Utils.d.ts +0 -26
  264. package/dist/src/core/text-rendering/sdf/Utils.js.map +0 -1
  265. package/dist/src/core/text-rendering/sdf/index.d.ts +0 -1
  266. package/dist/src/core/text-rendering/sdf/index.js.map +0 -1
  267. package/src/core/text-rendering/canvas/Settings.ts +0 -99
  268. package/src/core/text-rendering/canvas/Utils.test.ts +0 -206
  269. package/src/core/text-rendering/canvas/Utils.ts +0 -178
  270. package/src/core/text-rendering/canvas/calculateRenderInfo.ts +0 -299
  271. package/src/core/text-rendering/canvas/draw.ts +0 -165
@@ -5,10 +5,62 @@ 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
13
  import { CoreTextNode, type CoreTextNodeProps } from '../core/CoreTextNode.js';
11
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
+ }
63
+
12
64
  /**
13
65
  * Inspector
14
66
  *
@@ -48,14 +100,14 @@ 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
105
  return null;
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
112
  return null;
61
113
  }
@@ -171,6 +223,51 @@ export class Inspector {
171
223
  private scaleX = 1;
172
224
  private scaleY = 1;
173
225
 
226
+ // Performance monitoring for frequent setter calls
227
+ private static setterCallCount = new Map<
228
+ string,
229
+ { count: number; lastReset: number; nodeId: number }
230
+ >();
231
+
232
+ // Animation monitoring structures
233
+ private static activeAnimations = new Map<
234
+ string,
235
+ {
236
+ nodeId: number;
237
+ animationId: string;
238
+ startTime: number;
239
+ props: CoreNodeAnimateProps;
240
+ settings: AnimationSettings;
241
+ controller: IAnimationController;
242
+ state: AnimationControllerState;
243
+ }
244
+ >();
245
+
246
+ private static animationHistory: Array<{
247
+ nodeId: number;
248
+ animationId: string;
249
+ startTime: number;
250
+ endTime: number;
251
+ duration: number;
252
+ actualDuration: number;
253
+ props: CoreNodeAnimateProps;
254
+ settings: AnimationSettings;
255
+ completionType: 'finished' | 'stopped' | 'cancelled';
256
+ }> = [];
257
+
258
+ // Performance monitoring settings (configured via constructor)
259
+ private performanceSettings: InspectorOptions = {
260
+ enablePerformanceMonitoring: false,
261
+ excessiveCallThreshold: 100,
262
+ resetInterval: 5000,
263
+ enableAnimationMonitoring: false,
264
+ maxAnimationHistory: 1000,
265
+ animationStatsInterval: 0,
266
+ };
267
+
268
+ // Animation stats printing timer
269
+ private animationStatsTimer: number | null = null;
270
+
174
271
  constructor(canvas: HTMLCanvasElement, settings: RendererMainSettings) {
175
272
  if (isProductionEnvironment === true) return;
176
273
 
@@ -178,6 +275,21 @@ export class Inspector {
178
275
  throw new Error('settings is required');
179
276
  }
180
277
 
278
+ // Initialize performance monitoring settings with defaults
279
+ this.performanceSettings = {
280
+ enablePerformanceMonitoring:
281
+ settings.inspectorOptions?.enablePerformanceMonitoring ?? false,
282
+ excessiveCallThreshold:
283
+ settings.inspectorOptions?.excessiveCallThreshold ?? 100,
284
+ resetInterval: settings.inspectorOptions?.resetInterval ?? 5000,
285
+ enableAnimationMonitoring:
286
+ settings.inspectorOptions?.enableAnimationMonitoring ?? false,
287
+ maxAnimationHistory:
288
+ settings.inspectorOptions?.maxAnimationHistory ?? 1000,
289
+ animationStatsInterval:
290
+ settings.inspectorOptions?.animationStatsInterval ?? 0,
291
+ };
292
+
181
293
  // calc dimensions based on the devicePixelRatio
182
294
  this.height = Math.ceil(
183
295
  settings.appHeight ?? 1080 / (settings.deviceLogicalPixelRatio ?? 1),
@@ -212,9 +324,379 @@ export class Inspector {
212
324
  //listen for changes on window
213
325
  window.addEventListener('resize', this.setRootPosition.bind(this));
214
326
 
327
+ // Start animation stats timer if enabled
328
+ this.startAnimationStatsTimer();
329
+
215
330
  console.warn('Inspector is enabled, this will impact performance');
216
331
  }
217
332
 
333
+ /**
334
+ * Track setter calls for performance monitoring
335
+ * Only active when Inspector is loaded
336
+ */
337
+ private trackSetterCall(nodeId: number, setterName: string): void {
338
+ if (!this.performanceSettings.enablePerformanceMonitoring) {
339
+ return;
340
+ }
341
+
342
+ const key = `${nodeId}_${setterName}`;
343
+ const now = Date.now();
344
+ const existing = Inspector.setterCallCount.get(key);
345
+
346
+ if (!existing) {
347
+ Inspector.setterCallCount.set(key, { count: 1, lastReset: now, nodeId });
348
+ return;
349
+ }
350
+
351
+ // Reset counter if enough time has passed
352
+ if (now - existing.lastReset > this.performanceSettings.resetInterval) {
353
+ existing.count = 1;
354
+ existing.lastReset = now;
355
+ return;
356
+ }
357
+
358
+ existing.count++;
359
+
360
+ // Log if threshold exceeded
361
+ if (existing.count === this.performanceSettings.excessiveCallThreshold) {
362
+ console.warn(
363
+ `🚨 Inspector Performance Warning: Setter '${setterName}' called ${existing.count} times in ${this.performanceSettings.resetInterval}ms on node ${nodeId}`,
364
+ );
365
+ } else if (
366
+ existing.count > this.performanceSettings.excessiveCallThreshold &&
367
+ existing.count % 50 === 0
368
+ ) {
369
+ console.warn(
370
+ `🚨 Inspector Performance Warning: Setter '${setterName}' called ${existing.count} times in ${this.performanceSettings.resetInterval}ms on node ${nodeId} (continuing...)`,
371
+ );
372
+ }
373
+ }
374
+
375
+ /**
376
+ * Get current performance monitoring statistics
377
+ */
378
+ public static getPerformanceStats(): Array<{
379
+ nodeId: number;
380
+ setterName: string;
381
+ count: number;
382
+ timeWindow: number;
383
+ }> {
384
+ const stats: Array<{
385
+ nodeId: number;
386
+ setterName: string;
387
+ count: number;
388
+ timeWindow: number;
389
+ }> = [];
390
+ const now = Date.now();
391
+
392
+ Inspector.setterCallCount.forEach((data, key) => {
393
+ const parts = key.split('_');
394
+ const nodeIdStr = parts[0];
395
+ const setterName = parts[1];
396
+
397
+ if (nodeIdStr && setterName) {
398
+ const timeWindow = now - data.lastReset;
399
+
400
+ stats.push({
401
+ nodeId: parseInt(nodeIdStr, 10),
402
+ setterName,
403
+ count: data.count,
404
+ timeWindow,
405
+ });
406
+ }
407
+ });
408
+
409
+ return stats.sort((a, b) => b.count - a.count);
410
+ }
411
+
412
+ /**
413
+ * Clear performance monitoring statistics
414
+ */
415
+ public static clearPerformanceStats(): void {
416
+ Inspector.setterCallCount.clear();
417
+ }
418
+
419
+ /**
420
+ * Generate a unique animation ID
421
+ */
422
+ private static generateAnimationId(): string {
423
+ return `anim_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`;
424
+ }
425
+
426
+ /**
427
+ * Wrap animation controller with monitoring capabilities
428
+ */
429
+ private wrapAnimationController(
430
+ controller: IAnimationController,
431
+ nodeId: number,
432
+ props: CoreNodeAnimateProps,
433
+ settings: AnimationSettings,
434
+ div: HTMLElement,
435
+ ): IAnimationController {
436
+ if (!this.performanceSettings.enableAnimationMonitoring) {
437
+ // Just add the basic DOM animation without tracking
438
+ const originalStart = controller.start.bind(controller);
439
+ controller.start = () => {
440
+ this.animateNode(div, props, settings);
441
+ return originalStart();
442
+ };
443
+ return controller;
444
+ }
445
+
446
+ const animationId = Inspector.generateAnimationId();
447
+
448
+ // Create wrapper controller
449
+ const wrappedController: IAnimationController = {
450
+ start: () => {
451
+ this.trackAnimationStart(
452
+ animationId,
453
+ nodeId,
454
+ props,
455
+ settings,
456
+ controller,
457
+ );
458
+ this.animateNode(div, props, settings);
459
+ return controller.start();
460
+ },
461
+
462
+ stop: () => {
463
+ this.trackAnimationEnd(animationId, 'stopped');
464
+ return controller.stop();
465
+ },
466
+
467
+ pause: () => {
468
+ this.updateAnimationState(animationId, 'paused');
469
+ return controller.pause();
470
+ },
471
+
472
+ restore: () => {
473
+ this.trackAnimationEnd(animationId, 'cancelled');
474
+ return controller.restore();
475
+ },
476
+
477
+ waitUntilStopped: () => {
478
+ return controller.waitUntilStopped().then(() => {
479
+ this.trackAnimationEnd(animationId, 'finished');
480
+ });
481
+ },
482
+
483
+ get state() {
484
+ return controller.state;
485
+ },
486
+
487
+ // Event emitter methods
488
+ on: controller.on.bind(controller),
489
+ off: controller.off.bind(controller),
490
+ once: controller.once.bind(controller),
491
+ emit: controller.emit.bind(controller),
492
+ };
493
+
494
+ // Track animation events
495
+ controller.on('animating', () => {
496
+ this.updateAnimationState(animationId, 'running');
497
+ });
498
+
499
+ controller.on('stopped', () => {
500
+ this.trackAnimationEnd(animationId, 'finished');
501
+ });
502
+
503
+ return wrappedController;
504
+ }
505
+
506
+ /**
507
+ * Track animation start
508
+ */
509
+ private trackAnimationStart(
510
+ animationId: string,
511
+ nodeId: number,
512
+ props: CoreNodeAnimateProps,
513
+ settings: AnimationSettings,
514
+ controller: IAnimationController,
515
+ ): void {
516
+ const startTime = Date.now();
517
+
518
+ Inspector.activeAnimations.set(animationId, {
519
+ nodeId,
520
+ animationId,
521
+ startTime,
522
+ props,
523
+ settings,
524
+ controller,
525
+ state: 'scheduled',
526
+ });
527
+ }
528
+
529
+ /**
530
+ * Update animation state
531
+ */
532
+ private updateAnimationState(
533
+ animationId: string,
534
+ state: AnimationControllerState,
535
+ ): void {
536
+ const animation = Inspector.activeAnimations.get(animationId);
537
+ if (animation) {
538
+ animation.state = state;
539
+ }
540
+ }
541
+
542
+ /**
543
+ * Track animation end
544
+ */
545
+ private trackAnimationEnd(
546
+ animationId: string,
547
+ completionType: 'finished' | 'stopped' | 'cancelled',
548
+ ): void {
549
+ const animation = Inspector.activeAnimations.get(animationId);
550
+ if (!animation) return;
551
+
552
+ const endTime = Date.now();
553
+ const actualDuration = endTime - animation.startTime;
554
+ const expectedDuration = animation.settings.duration || 1000;
555
+
556
+ // Move to history
557
+ Inspector.animationHistory.unshift({
558
+ nodeId: animation.nodeId,
559
+ animationId: animation.animationId,
560
+ startTime: animation.startTime,
561
+ endTime,
562
+ duration: expectedDuration,
563
+ actualDuration,
564
+ props: animation.props,
565
+ settings: animation.settings,
566
+ completionType,
567
+ });
568
+
569
+ // Limit history size for performance
570
+ if (
571
+ Inspector.animationHistory.length >
572
+ this.performanceSettings.maxAnimationHistory
573
+ ) {
574
+ Inspector.animationHistory.splice(
575
+ this.performanceSettings.maxAnimationHistory,
576
+ );
577
+ }
578
+
579
+ // Remove from active animations
580
+ Inspector.activeAnimations.delete(animationId);
581
+ }
582
+
583
+ /**
584
+ * Get currently active animations
585
+ */
586
+ public static getActiveAnimations(): Array<{
587
+ nodeId: number;
588
+ animationId: string;
589
+ startTime: number;
590
+ duration: number;
591
+ elapsedTime: number;
592
+ props: CoreNodeAnimateProps;
593
+ settings: AnimationSettings;
594
+ state: AnimationControllerState;
595
+ }> {
596
+ const now = Date.now();
597
+ const activeAnimations: Array<{
598
+ nodeId: number;
599
+ animationId: string;
600
+ startTime: number;
601
+ duration: number;
602
+ elapsedTime: number;
603
+ props: CoreNodeAnimateProps;
604
+ settings: AnimationSettings;
605
+ state: AnimationControllerState;
606
+ }> = [];
607
+
608
+ Inspector.activeAnimations.forEach((animation) => {
609
+ activeAnimations.push({
610
+ nodeId: animation.nodeId,
611
+ animationId: animation.animationId,
612
+ startTime: animation.startTime,
613
+ duration: animation.settings.duration || 1000,
614
+ elapsedTime: now - animation.startTime,
615
+ props: animation.props,
616
+ settings: animation.settings,
617
+ state: animation.state,
618
+ });
619
+ });
620
+
621
+ return activeAnimations.sort((a, b) => b.startTime - a.startTime);
622
+ }
623
+
624
+ /**
625
+ * Get animation statistics
626
+ */
627
+ public static getAnimationStats(): {
628
+ totalAnimations: number;
629
+ activeCount: number;
630
+ averageDuration: number;
631
+ } {
632
+ const totalAnimations = Inspector.animationHistory.length;
633
+ const activeCount = Inspector.activeAnimations.size;
634
+
635
+ // Calculate average duration from finished animations only
636
+ const finishedAnimations = Inspector.animationHistory.filter(
637
+ (anim) => anim.completionType === 'finished',
638
+ );
639
+
640
+ const averageDuration =
641
+ finishedAnimations.length > 0
642
+ ? finishedAnimations.reduce(
643
+ (sum, anim) => sum + anim.actualDuration,
644
+ 0,
645
+ ) / finishedAnimations.length
646
+ : 0;
647
+
648
+ return {
649
+ totalAnimations,
650
+ activeCount,
651
+ averageDuration,
652
+ };
653
+ }
654
+
655
+ /**
656
+ * Clear animation monitoring data
657
+ */
658
+ public static clearAnimationStats(): void {
659
+ Inspector.activeAnimations.clear();
660
+ Inspector.animationHistory.length = 0;
661
+ }
662
+
663
+ /**
664
+ * Start the animation stats timer if enabled
665
+ */
666
+ private startAnimationStatsTimer(): void {
667
+ console.log(
668
+ `Starting animation stats timer with interval: ${this.performanceSettings.animationStatsInterval} seconds`,
669
+ );
670
+
671
+ if (this.performanceSettings.animationStatsInterval > 0) {
672
+ this.animationStatsTimer = setInterval(() => {
673
+ this.printAnimationStats();
674
+ }, this.performanceSettings.animationStatsInterval * 1000) as unknown as number;
675
+ }
676
+ }
677
+
678
+ /**
679
+ * Stop the animation stats timer
680
+ */
681
+ private stopAnimationStatsTimer(): void {
682
+ if (this.animationStatsTimer) {
683
+ clearInterval(this.animationStatsTimer);
684
+ this.animationStatsTimer = null;
685
+ }
686
+ }
687
+
688
+ /**
689
+ * Print current animation statistics to console
690
+ */
691
+ private printAnimationStats(): void {
692
+ const stats = Inspector.getAnimationStats();
693
+
694
+ console.log(
695
+ `🎬 Animation Stats: ${stats.activeCount} active, ${
696
+ stats.totalAnimations
697
+ } completed, ${Math.round(stats.averageDuration)}ms avg duration`,
698
+ );
699
+ }
218
700
  setRootPosition() {
219
701
  if (this.root === null || this.canvas === null) {
220
702
  return;
@@ -322,6 +804,9 @@ export class Inspector {
322
804
  return originalProp?.get?.call(node);
323
805
  },
324
806
  set: (value) => {
807
+ // Track setter call for performance monitoring
808
+ this.trackSetterCall(node.id, property);
809
+
325
810
  originalProp?.set?.call(node, value);
326
811
  this.updateNodeProperty(
327
812
  div,
@@ -352,15 +837,14 @@ export class Inspector {
352
837
  ): IAnimationController => {
353
838
  const animationController = originalAnimate.call(node, props, settings);
354
839
 
355
- const originalStart =
356
- animationController.start.bind(animationController);
357
- animationController.start = () => {
358
- this.animateNode(div, props, settings);
359
-
360
- return originalStart();
361
- };
362
-
363
- return animationController;
840
+ // Wrap animation controller with monitoring
841
+ return this.wrapAnimationController(
842
+ animationController,
843
+ node.id,
844
+ props,
845
+ settings,
846
+ div,
847
+ );
364
848
  },
365
849
  configurable: true,
366
850
  });
@@ -369,6 +853,9 @@ export class Inspector {
369
853
  }
370
854
 
371
855
  public destroy() {
856
+ // Stop animation stats timer
857
+ this.stopAnimationStatsTimer();
858
+
372
859
  // Remove DOM observers
373
860
  this.mutationObserver.disconnect();
374
861
  this.resizeObserver.disconnect();
@@ -378,6 +865,9 @@ export class Inspector {
378
865
  if (this.root && this.root.parentNode) {
379
866
  this.root.remove();
380
867
  }
868
+
869
+ // Clean up animation monitoring data
870
+ Inspector.clearAnimationStats();
381
871
  }
382
872
 
383
873
  destroyNode(id: number) {