@lightningjs/renderer 3.0.0-beta18 → 3.0.0-beta19

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 (306) hide show
  1. package/dist/src/core/Autosizer.d.ts +29 -0
  2. package/dist/src/core/Autosizer.js +178 -0
  3. package/dist/src/core/Autosizer.js.map +1 -0
  4. package/dist/src/core/CoreNode.d.ts +44 -26
  5. package/dist/src/core/CoreNode.js +253 -150
  6. package/dist/src/core/CoreNode.js.map +1 -1
  7. package/dist/src/core/CoreTextNode.d.ts +1 -0
  8. package/dist/src/core/CoreTextNode.js +8 -4
  9. package/dist/src/core/CoreTextNode.js.map +1 -1
  10. package/dist/src/core/CoreTextureManager.d.ts +16 -2
  11. package/dist/src/core/CoreTextureManager.js +38 -51
  12. package/dist/src/core/CoreTextureManager.js.map +1 -1
  13. package/dist/src/core/Stage.d.ts +18 -2
  14. package/dist/src/core/Stage.js +44 -14
  15. package/dist/src/core/Stage.js.map +1 -1
  16. package/dist/src/core/TextureMemoryManager.d.ts +2 -4
  17. package/dist/src/core/TextureMemoryManager.js +80 -95
  18. package/dist/src/core/TextureMemoryManager.js.map +1 -1
  19. package/dist/src/core/lib/WebGlContextWrapper.d.ts +11 -0
  20. package/dist/src/core/lib/WebGlContextWrapper.js +34 -0
  21. package/dist/src/core/lib/WebGlContextWrapper.js.map +1 -1
  22. package/dist/src/core/lib/textureCompression.d.ts +14 -2
  23. package/dist/src/core/lib/textureCompression.js +320 -67
  24. package/dist/src/core/lib/textureCompression.js.map +1 -1
  25. package/dist/src/core/platforms/web/WebPlatform.js +2 -2
  26. package/dist/src/core/platforms/web/WebPlatform.js.map +1 -1
  27. package/dist/src/core/renderers/CoreContextTexture.d.ts +1 -0
  28. package/dist/src/core/renderers/CoreContextTexture.js.map +1 -1
  29. package/dist/src/core/renderers/CoreRenderer.d.ts +3 -1
  30. package/dist/src/core/renderers/CoreRenderer.js +1 -0
  31. package/dist/src/core/renderers/CoreRenderer.js.map +1 -1
  32. package/dist/src/core/renderers/CoreShaderNode.d.ts +6 -0
  33. package/dist/src/core/renderers/CoreShaderNode.js +2 -0
  34. package/dist/src/core/renderers/CoreShaderNode.js.map +1 -1
  35. package/dist/src/core/renderers/canvas/CanvasTexture.d.ts +1 -0
  36. package/dist/src/core/renderers/canvas/CanvasTexture.js +4 -1
  37. package/dist/src/core/renderers/canvas/CanvasTexture.js.map +1 -1
  38. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.d.ts +2 -0
  39. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js +6 -0
  40. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js.map +1 -1
  41. package/dist/src/core/renderers/webgl/WebGlCtxTexture.d.ts +11 -0
  42. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js +51 -14
  43. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js.map +1 -1
  44. package/dist/src/core/renderers/webgl/WebGlRenderOp.d.ts +2 -1
  45. package/dist/src/core/renderers/webgl/WebGlRenderOp.js +2 -0
  46. package/dist/src/core/renderers/webgl/WebGlRenderOp.js.map +1 -1
  47. package/dist/src/core/renderers/webgl/WebGlRenderer.d.ts +1 -1
  48. package/dist/src/core/renderers/webgl/WebGlRenderer.js +57 -61
  49. package/dist/src/core/renderers/webgl/WebGlRenderer.js.map +1 -1
  50. package/dist/src/core/renderers/webgl/WebGlShaderProgram.d.ts +1 -0
  51. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js +12 -0
  52. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js.map +1 -1
  53. package/dist/src/core/shaders/webgl/Rounded.js +3 -1
  54. package/dist/src/core/shaders/webgl/Rounded.js.map +1 -1
  55. package/dist/src/core/shaders/webgl/RoundedWithBorder.js +3 -2
  56. package/dist/src/core/shaders/webgl/RoundedWithBorder.js.map +1 -1
  57. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js +3 -2
  58. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js.map +1 -1
  59. package/dist/src/core/shaders/webgl/RoundedWithShadow.js +2 -1
  60. package/dist/src/core/shaders/webgl/RoundedWithShadow.js.map +1 -1
  61. package/dist/src/core/text-rendering/SdfFontHandler.js +1 -1
  62. package/dist/src/core/text-rendering/SdfFontHandler.js.map +1 -1
  63. package/dist/src/core/textures/ColorTexture.d.ts +1 -1
  64. package/dist/src/core/textures/ColorTexture.js +2 -3
  65. package/dist/src/core/textures/ColorTexture.js.map +1 -1
  66. package/dist/src/core/textures/ImageTexture.d.ts +7 -1
  67. package/dist/src/core/textures/ImageTexture.js +20 -36
  68. package/dist/src/core/textures/ImageTexture.js.map +1 -1
  69. package/dist/src/core/textures/NoiseTexture.d.ts +1 -1
  70. package/dist/src/core/textures/NoiseTexture.js +2 -2
  71. package/dist/src/core/textures/NoiseTexture.js.map +1 -1
  72. package/dist/src/core/textures/RenderTexture.d.ts +1 -1
  73. package/dist/src/core/textures/RenderTexture.js +2 -2
  74. package/dist/src/core/textures/RenderTexture.js.map +1 -1
  75. package/dist/src/core/textures/SubTexture.d.ts +2 -4
  76. package/dist/src/core/textures/SubTexture.js +13 -31
  77. package/dist/src/core/textures/SubTexture.js.map +1 -1
  78. package/dist/src/core/textures/Texture.d.ts +67 -8
  79. package/dist/src/core/textures/Texture.js +127 -15
  80. package/dist/src/core/textures/Texture.js.map +1 -1
  81. package/dist/src/main-api/Renderer.d.ts +15 -2
  82. package/dist/src/main-api/Renderer.js +19 -12
  83. package/dist/src/main-api/Renderer.js.map +1 -1
  84. package/dist/tsconfig.dist.tsbuildinfo +1 -1
  85. package/package.json +1 -1
  86. package/src/core/CoreNode.test.ts +0 -1
  87. package/src/core/CoreNode.ts +296 -177
  88. package/src/core/CoreTextNode.ts +9 -4
  89. package/src/core/CoreTextureManager.ts +69 -57
  90. package/src/core/Stage.ts +51 -17
  91. package/src/core/TextureError.ts +46 -0
  92. package/src/core/TextureMemoryManager.ts +95 -122
  93. package/src/core/lib/WebGlContextWrapper.ts +40 -0
  94. package/src/core/lib/collectionUtils.ts +118 -0
  95. package/src/core/lib/textureCompression.ts +433 -77
  96. package/src/core/platforms/web/WebPlatform.ts +2 -2
  97. package/src/core/renderers/CoreContextTexture.ts +1 -0
  98. package/src/core/renderers/CoreRenderer.ts +3 -2
  99. package/src/core/renderers/CoreShaderNode.ts +7 -0
  100. package/src/core/renderers/canvas/CanvasTexture.ts +5 -1
  101. package/src/core/renderers/webgl/WebGlCtxRenderTexture.ts +8 -0
  102. package/src/core/renderers/webgl/WebGlCtxTexture.ts +58 -15
  103. package/src/core/renderers/webgl/WebGlRenderOp.ts +4 -1
  104. package/src/core/renderers/webgl/WebGlRenderer.ts +66 -68
  105. package/src/core/renderers/webgl/WebGlShaderProgram.ts +16 -0
  106. package/src/core/shaders/webgl/Rounded.ts +3 -1
  107. package/src/core/shaders/webgl/RoundedWithBorder.ts +3 -2
  108. package/src/core/shaders/webgl/RoundedWithBorderAndShadow.ts +3 -2
  109. package/src/core/shaders/webgl/RoundedWithShadow.ts +2 -1
  110. package/src/core/text-rendering/SdfFontHandler.ts +1 -1
  111. package/src/core/textures/ColorTexture.ts +6 -4
  112. package/src/core/textures/ImageTexture.ts +35 -42
  113. package/src/core/textures/NoiseTexture.ts +6 -4
  114. package/src/core/textures/RenderTexture.ts +6 -4
  115. package/src/core/textures/SubTexture.ts +17 -38
  116. package/src/core/textures/Texture.ts +159 -20
  117. package/src/main-api/Renderer.ts +36 -14
  118. package/dist/src/core/AutosizeManager.d.ts +0 -29
  119. package/dist/src/core/AutosizeManager.js +0 -171
  120. package/dist/src/core/AutosizeManager.js.map +0 -1
  121. package/dist/src/core/animations/Animation.d.ts +0 -16
  122. package/dist/src/core/animations/Animation.js +0 -111
  123. package/dist/src/core/animations/Animation.js.map +0 -1
  124. package/dist/src/core/animations/CoreTransition.d.ts +0 -24
  125. package/dist/src/core/animations/CoreTransition.js +0 -63
  126. package/dist/src/core/animations/CoreTransition.js.map +0 -1
  127. package/dist/src/core/animations/Playback.d.ts +0 -62
  128. package/dist/src/core/animations/Playback.js +0 -155
  129. package/dist/src/core/animations/Playback.js.map +0 -1
  130. package/dist/src/core/animations/Transition.d.ts +0 -25
  131. package/dist/src/core/animations/Transition.js +0 -63
  132. package/dist/src/core/animations/Transition.js.map +0 -1
  133. package/dist/src/core/animations/utils.d.ts +0 -2
  134. package/dist/src/core/animations/utils.js +0 -137
  135. package/dist/src/core/animations/utils.js.map +0 -1
  136. package/dist/src/core/platform.d.ts +0 -10
  137. package/dist/src/core/platform.js +0 -81
  138. package/dist/src/core/platform.js.map +0 -1
  139. package/dist/src/core/renderers/CoreShader.d.ts +0 -9
  140. package/dist/src/core/renderers/CoreShader.js +0 -28
  141. package/dist/src/core/renderers/CoreShader.js.map +0 -1
  142. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.d.ts +0 -33
  143. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js +0 -250
  144. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js.map +0 -1
  145. package/dist/src/core/renderers/canvas/CanvasCoreTexture.d.ts +0 -17
  146. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js +0 -125
  147. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js.map +0 -1
  148. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.d.ts +0 -14
  149. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js +0 -138
  150. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js.map +0 -1
  151. package/dist/src/core/renderers/canvas/internal/ColorUtils.d.ts +0 -19
  152. package/dist/src/core/renderers/canvas/internal/ColorUtils.js +0 -58
  153. package/dist/src/core/renderers/canvas/internal/ColorUtils.js.map +0 -1
  154. package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.d.ts +0 -10
  155. package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.js +0 -43
  156. package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.js.map +0 -1
  157. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.d.ts +0 -12
  158. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js +0 -58
  159. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js.map +0 -1
  160. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.d.ts +0 -9
  161. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.js +0 -38
  162. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.js.map +0 -1
  163. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.d.ts +0 -69
  164. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js +0 -272
  165. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js.map +0 -1
  166. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.d.ts +0 -34
  167. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js +0 -114
  168. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js.map +0 -1
  169. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.d.ts +0 -133
  170. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js +0 -645
  171. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js.map +0 -1
  172. package/dist/src/core/renderers/webgl/WebGlCoreShader.d.ts +0 -78
  173. package/dist/src/core/renderers/webgl/WebGlCoreShader.js +0 -202
  174. package/dist/src/core/renderers/webgl/WebGlCoreShader.js.map +0 -1
  175. package/dist/src/core/renderers/webgl/shaders/DefaultShader.d.ts +0 -9
  176. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js +0 -84
  177. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js.map +0 -1
  178. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.d.ts +0 -10
  179. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js +0 -108
  180. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js.map +0 -1
  181. package/dist/src/core/renderers/webgl/shaders/DynamicShader.d.ts +0 -29
  182. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js +0 -408
  183. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js.map +0 -1
  184. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.d.ts +0 -28
  185. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js +0 -126
  186. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js.map +0 -1
  187. package/dist/src/core/renderers/webgl/shaders/SdfShader.d.ts +0 -47
  188. package/dist/src/core/renderers/webgl/shaders/SdfShader.js +0 -148
  189. package/dist/src/core/renderers/webgl/shaders/SdfShader.js.map +0 -1
  190. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.d.ts +0 -31
  191. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js +0 -71
  192. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js.map +0 -1
  193. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.d.ts +0 -30
  194. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js +0 -58
  195. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js.map +0 -1
  196. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.d.ts +0 -31
  197. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js +0 -71
  198. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js.map +0 -1
  199. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.d.ts +0 -31
  200. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js +0 -71
  201. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js.map +0 -1
  202. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.d.ts +0 -31
  203. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js +0 -71
  204. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js.map +0 -1
  205. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.d.ts +0 -9
  206. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js +0 -136
  207. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js.map +0 -1
  208. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.d.ts +0 -36
  209. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js +0 -85
  210. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js.map +0 -1
  211. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.d.ts +0 -45
  212. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js +0 -104
  213. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js.map +0 -1
  214. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.d.ts +0 -22
  215. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.js +0 -45
  216. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.js.map +0 -1
  217. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.d.ts +0 -58
  218. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js +0 -80
  219. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js.map +0 -1
  220. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.d.ts +0 -35
  221. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js +0 -134
  222. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js.map +0 -1
  223. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.d.ts +0 -40
  224. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js +0 -143
  225. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js.map +0 -1
  226. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.d.ts +0 -61
  227. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js +0 -127
  228. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js.map +0 -1
  229. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.d.ts +0 -40
  230. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js +0 -71
  231. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js.map +0 -1
  232. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.d.ts +0 -115
  233. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.js +0 -61
  234. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.js.map +0 -1
  235. package/dist/src/core/text-rendering/TextRenderingUtils.d.ts +0 -12
  236. package/dist/src/core/text-rendering/TextRenderingUtils.js +0 -14
  237. package/dist/src/core/text-rendering/TextRenderingUtils.js.map +0 -1
  238. package/dist/src/core/text-rendering/TextTextureRendererUtils.d.ts +0 -72
  239. package/dist/src/core/text-rendering/TextTextureRendererUtils.js +0 -217
  240. package/dist/src/core/text-rendering/TextTextureRendererUtils.js.map +0 -1
  241. package/dist/src/core/text-rendering/TrFontManager.d.ts +0 -26
  242. package/dist/src/core/text-rendering/TrFontManager.js +0 -131
  243. package/dist/src/core/text-rendering/TrFontManager.js.map +0 -1
  244. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.d.ts +0 -39
  245. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js +0 -125
  246. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js.map +0 -1
  247. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.d.ts +0 -103
  248. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.js +0 -21
  249. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.js.map +0 -1
  250. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.d.ts +0 -62
  251. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.js +0 -88
  252. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.js.map +0 -1
  253. package/dist/src/core/text-rendering/font-face-types/TrFontFace.d.ts +0 -118
  254. package/dist/src/core/text-rendering/font-face-types/TrFontFace.js +0 -63
  255. package/dist/src/core/text-rendering/font-face-types/TrFontFace.js.map +0 -1
  256. package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.d.ts +0 -14
  257. package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js +0 -66
  258. package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js.map +0 -1
  259. package/dist/src/core/text-rendering/font-face-types/utils.d.ts +0 -1
  260. package/dist/src/core/text-rendering/font-face-types/utils.js +0 -38
  261. package/dist/src/core/text-rendering/font-face-types/utils.js.map +0 -1
  262. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.d.ts +0 -59
  263. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js +0 -397
  264. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js.map +0 -1
  265. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.d.ts +0 -120
  266. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js +0 -551
  267. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js.map +0 -1
  268. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.d.ts +0 -92
  269. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +0 -607
  270. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +0 -1
  271. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.d.ts +0 -12
  272. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.js +0 -61
  273. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.js.map +0 -1
  274. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.d.ts +0 -33
  275. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.js +0 -52
  276. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.js.map +0 -1
  277. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.d.ts +0 -13
  278. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.js +0 -32
  279. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.js.map +0 -1
  280. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.d.ts +0 -23
  281. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.js +0 -84
  282. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.js.map +0 -1
  283. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.d.ts +0 -4
  284. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.js +0 -34
  285. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.js.map +0 -1
  286. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.d.ts +0 -20
  287. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js +0 -308
  288. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js.map +0 -1
  289. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.d.ts +0 -10
  290. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.js +0 -40
  291. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.js.map +0 -1
  292. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.d.ts +0 -26
  293. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.js +0 -70
  294. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.js.map +0 -1
  295. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.d.ts +0 -16
  296. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.js +0 -39
  297. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.js.map +0 -1
  298. package/dist/src/core/text-rendering/renderers/TextRenderer.d.ts +0 -373
  299. package/dist/src/core/text-rendering/renderers/TextRenderer.js +0 -178
  300. package/dist/src/core/text-rendering/renderers/TextRenderer.js.map +0 -1
  301. package/dist/src/main-api/DynamicShaderController.d.ts +0 -29
  302. package/dist/src/main-api/DynamicShaderController.js +0 -58
  303. package/dist/src/main-api/DynamicShaderController.js.map +0 -1
  304. package/dist/src/main-api/ShaderController.d.ts +0 -31
  305. package/dist/src/main-api/ShaderController.js +0 -37
  306. package/dist/src/main-api/ShaderController.js.map +0 -1
@@ -30,6 +30,8 @@ import {
30
30
  type TextureState,
31
31
  } from './Texture.js';
32
32
 
33
+ let subTextureId = 0;
34
+
33
35
  /**
34
36
  * Properties of the {@link SubTexture}
35
37
  */
@@ -83,10 +85,11 @@ export class SubTexture extends Texture {
83
85
  parentTexture: Texture;
84
86
 
85
87
  public override type: TextureType = TextureType.subTexture;
88
+ public subtextureId = `subtexture-${subTextureId++}`;
86
89
 
87
- constructor(txManager: CoreTextureManager, props: SubTextureProps) {
90
+ constructor(txManager: CoreTextureManager, props: Required<SubTextureProps>) {
88
91
  super(txManager);
89
- this.props = SubTexture.resolveDefaults(props || {});
92
+ this.props = props;
90
93
 
91
94
  assertTruthy(this.props.texture, 'SubTexture requires a parent texture');
92
95
  assertTruthy(
@@ -97,8 +100,8 @@ export class SubTexture extends Texture {
97
100
  // Resolve parent texture from cache or fallback to provided texture
98
101
  this.parentTexture = txManager.resolveParentTexture(this.props.texture);
99
102
 
100
- if (this.renderableOwners.size > 0) {
101
- this.parentTexture.setRenderableOwner(this, true);
103
+ if (this.renderableOwners.length > 0) {
104
+ this.parentTexture.setRenderableOwner(this.subtextureId, true);
102
105
  }
103
106
 
104
107
  // If parent texture is already loaded / failed, trigger loaded event manually
@@ -107,23 +110,17 @@ export class SubTexture extends Texture {
107
110
  // synchronous task after calling loadTexture()
108
111
  queueMicrotask(() => {
109
112
  const parentTx = this.parentTexture;
110
- if (parentTx.state === 'loaded') {
111
- this.onParentTxLoaded(parentTx, parentTx.dimensions!);
112
- } else if (parentTx.state === 'fetching') {
113
- this.onParentTxFetching();
114
- } else if (parentTx.state === 'fetched') {
115
- this.onParentTxFetched();
113
+ if (parentTx.state === 'loaded' && parentTx.dimensions !== null) {
114
+ this.onParentTxLoaded(parentTx, parentTx.dimensions);
116
115
  } else if (parentTx.state === 'loading') {
117
116
  this.onParentTxLoading();
118
- } else if (parentTx.state === 'failed') {
119
- this.onParentTxFailed(parentTx, parentTx.error!);
117
+ } else if (parentTx.state === 'failed' && parentTx.error !== null) {
118
+ this.onParentTxFailed(parentTx, parentTx.error);
120
119
  } else if (parentTx.state === 'freed') {
121
120
  this.onParentTxFreed();
122
121
  }
123
122
 
124
- parentTx.on('fetched', this.onParentTxFetched);
125
123
  parentTx.on('loading', this.onParentTxLoading);
126
- parentTx.on('fetching', this.onParentTxFetching);
127
124
  parentTx.on('loaded', this.onParentTxLoaded);
128
125
  parentTx.on('failed', this.onParentTxFailed);
129
126
  parentTx.on('freed', this.onParentTxFreed);
@@ -133,51 +130,33 @@ export class SubTexture extends Texture {
133
130
  private onParentTxLoaded: TextureLoadedEventHandler = () => {
134
131
  // We ignore the parent's passed dimensions, and simply use the SubTexture's
135
132
  // configured dimensions (because that's all that matters here)
136
- this.forwardParentTxState('loaded', {
133
+ this.setState('loaded', {
137
134
  w: this.props.w,
138
135
  h: this.props.h,
139
136
  });
140
137
  };
141
138
 
142
139
  private onParentTxFailed: TextureFailedEventHandler = (target, error) => {
143
- this.forwardParentTxState('failed', error);
144
- };
145
-
146
- private onParentTxFetched = () => {
147
- this.forwardParentTxState('fetched', {
148
- w: this.props.w,
149
- h: this.props.h,
150
- });
151
- };
152
-
153
- private onParentTxFetching = () => {
154
- this.forwardParentTxState('fetching');
140
+ this.retryCount = this.parentTexture.retryCount - 1;
141
+ this.setState('failed', error);
155
142
  };
156
143
 
157
144
  private onParentTxLoading = () => {
158
- this.forwardParentTxState('loading');
145
+ this.setState('loading');
159
146
  };
160
147
 
161
148
  private onParentTxFreed = () => {
162
- this.forwardParentTxState('freed');
149
+ this.setState('freed');
163
150
  };
164
151
 
165
- private forwardParentTxState(
166
- state: TextureState,
167
- errorOrDimensions?: Error | Dimensions,
168
- ) {
169
- this.setState(state, errorOrDimensions);
170
- }
171
-
172
152
  override onChangeIsRenderable(isRenderable: boolean): void {
173
153
  // Propagate the renderable owner change to the parent texture
174
- this.parentTexture.setRenderableOwner(this, isRenderable);
154
+ this.parentTexture.setRenderableOwner(this.subtextureId, isRenderable);
175
155
  }
176
156
 
177
157
  override async getTextureSource(): Promise<TextureData> {
178
158
  // Check if parent texture is loaded
179
159
  return new Promise((resolve, reject) => {
180
- this.setState('fetched');
181
160
  resolve({
182
161
  data: this.props,
183
162
  });
@@ -54,12 +54,12 @@ export interface CompressedData {
54
54
  /**
55
55
  * All mipmap levels
56
56
  */
57
- mipmaps?: ArrayBuffer[];
57
+ mipmaps: ArrayBuffer[];
58
58
 
59
59
  /**
60
60
  * Supported container types ('pvr' or 'ktx').
61
61
  */
62
- type: 'pvr' | 'ktx';
62
+ type: 'pvr' | 'ktx' | 'astc';
63
63
 
64
64
  /**
65
65
  * The width of the compressed texture in pixels. Defaults to 0.
@@ -72,6 +72,15 @@ export interface CompressedData {
72
72
  * The height of the compressed texture in pixels.
73
73
  **/
74
74
  h: number;
75
+
76
+ /**
77
+ * block info compressed texture format
78
+ */
79
+ blockInfo: {
80
+ width: number;
81
+ height: number;
82
+ bytes: number;
83
+ };
75
84
  }
76
85
 
77
86
  /**
@@ -144,16 +153,10 @@ export abstract class Texture extends EventEmitter {
144
153
  private _dimensions: Dimensions | null = null;
145
154
  private _error: Error | null = null;
146
155
 
147
- /**
148
- * Texture states that are considered transitional and should be skipped during cleanup
149
- */
150
- public static readonly TRANSITIONAL_TEXTURE_STATES: readonly TextureState[] =
151
- ['fetching', 'fetched', 'loading'];
152
-
153
156
  // aggregate state
154
157
  public state: TextureState = 'initial';
155
158
 
156
- readonly renderableOwners = new Set<unknown>();
159
+ readonly renderableOwners: any[] = [];
157
160
 
158
161
  readonly renderable: boolean = false;
159
162
 
@@ -165,8 +168,37 @@ export abstract class Texture extends EventEmitter {
165
168
 
166
169
  public textureData: TextureData | null = null;
167
170
 
171
+ public memUsed = 0;
172
+
173
+ /**
174
+ * Memory used by this texture in bytes
175
+ *
176
+ * @remarks
177
+ * This is tracked by the TextureMemoryManager and updated when the texture
178
+ * is loaded/freed. Set to 0 when texture is not loaded.
179
+ */
180
+ public retryCount = 0;
181
+ public maxRetryCount: number;
182
+
183
+ /**
184
+ * Timestamp when texture was created (for startup grace period)
185
+ */
186
+ private createdAt: number = Date.now();
187
+
188
+ /**
189
+ * Flag to track if grace period has expired to avoid repeated Date.now() calls
190
+ */
191
+ private gracePeriodExpired: boolean = false;
192
+
193
+ /**
194
+ * Grace period in milliseconds to prevent premature cleanup during app startup
195
+ * This helps prevent race conditions when bounds calculation is delayed
196
+ */
197
+ private static readonly STARTUP_GRACE_PERIOD = 2000; // 2 seconds
198
+
168
199
  constructor(protected txManager: CoreTextureManager) {
169
200
  super();
201
+ this.maxRetryCount = this.txManager.maxRetryCount;
170
202
  }
171
203
 
172
204
  get dimensions(): Dimensions | null {
@@ -177,6 +209,59 @@ export abstract class Texture extends EventEmitter {
177
209
  return this._error;
178
210
  }
179
211
 
212
+ /**
213
+ * Checks if the texture is within the startup grace period.
214
+ * During this period, textures are protected from cleanup to prevent
215
+ * race conditions during app initialization.
216
+ */
217
+ isWithinStartupGracePeriod(): boolean {
218
+ // If grace period already expired, return false immediately
219
+ if (this.gracePeriodExpired === true) {
220
+ return false;
221
+ }
222
+
223
+ // Check if grace period has expired now
224
+ const hasExpired =
225
+ Date.now() - this.createdAt >= Texture.STARTUP_GRACE_PERIOD;
226
+
227
+ if (hasExpired) {
228
+ // Cache the result to avoid future Date.now() calls
229
+ this.gracePeriodExpired = true;
230
+ return false;
231
+ }
232
+
233
+ return true;
234
+ }
235
+
236
+ /**
237
+ * Checks if the texture can be safely cleaned up.
238
+ * Considers the renderable state, startup grace period, and renderable owners.
239
+ */
240
+ canBeCleanedUp(): boolean {
241
+ // Never cleanup if explicitly prevented
242
+ if (this.preventCleanup) {
243
+ return false;
244
+ }
245
+
246
+ // Don't cleanup if still within startup grace period
247
+ if (this.isWithinStartupGracePeriod()) {
248
+ return false;
249
+ }
250
+
251
+ // Don't cleanup if not renderable
252
+ if (this.renderable === true) {
253
+ return false;
254
+ }
255
+
256
+ // Don't cleanup if there are still renderable owners
257
+ if (this.renderableOwners.length > 0) {
258
+ return false;
259
+ }
260
+
261
+ // Safe to cleanup
262
+ return true;
263
+ }
264
+
180
265
  /**
181
266
  * Add/remove an owner to/from the Texture based on its renderability.
182
267
  *
@@ -191,33 +276,43 @@ export abstract class Texture extends EventEmitter {
191
276
  * @param owner
192
277
  * @param renderable
193
278
  */
194
- setRenderableOwner(owner: unknown, renderable: boolean): void {
195
- const oldSize = this.renderableOwners.size;
279
+ setRenderableOwner(owner: string | number, renderable: boolean): void {
280
+ const oldSize = this.renderableOwners.length;
281
+ const hasOwnerIndex = this.renderableOwners.indexOf(owner);
196
282
 
197
283
  if (renderable === true) {
198
- if (this.renderableOwners.has(owner) === false) {
284
+ if (hasOwnerIndex === -1) {
199
285
  // Add the owner to the set
200
- this.renderableOwners.add(owner);
286
+ this.renderableOwners.push(owner);
201
287
  }
202
288
 
203
- const newSize = this.renderableOwners.size;
204
- if (newSize > oldSize && newSize === 1) {
289
+ const newSize = this.renderableOwners.length;
290
+ if (oldSize !== newSize && newSize === 1) {
205
291
  (this.renderable as boolean) = true;
206
292
  this.onChangeIsRenderable?.(true);
207
293
  this.load();
208
294
  }
209
295
  } else {
210
- this.renderableOwners.delete(owner);
211
- const newSize = this.renderableOwners.size;
212
- if (newSize < oldSize && newSize === 0) {
296
+ if (hasOwnerIndex !== -1) {
297
+ this.renderableOwners.splice(hasOwnerIndex, 1);
298
+ }
299
+
300
+ const newSize = this.renderableOwners.length;
301
+ if (oldSize !== newSize && newSize === 0) {
213
302
  (this.renderable as boolean) = false;
214
303
  this.onChangeIsRenderable?.(false);
215
- this.txManager.orphanTexture(this);
304
+
305
+ // note, not doing a cleanup here, cleanup is managed by the Stage/TextureMemoryManager
306
+ // when it deems appropriate based on memory pressure
216
307
  }
217
308
  }
218
309
  }
219
310
 
220
311
  load(): void {
312
+ if (this.retryCount > this.maxRetryCount) {
313
+ // We've exceeded the max retry count, do not attempt to load again
314
+ return;
315
+ }
221
316
  this.txManager.loadTexture(this);
222
317
  }
223
318
 
@@ -256,6 +351,18 @@ export abstract class Texture extends EventEmitter {
256
351
  this.ctxTexture?.free();
257
352
  }
258
353
 
354
+ /**
355
+ * Release the texture data and core context texture for this Texture without changing state.
356
+ *
357
+ * @remarks
358
+ * The ctxTexture is created by the renderer and lives on the GPU.
359
+ */
360
+ release(): void {
361
+ this.ctxTexture?.release();
362
+ this.ctxTexture = undefined;
363
+ this.freeTextureData();
364
+ }
365
+
259
366
  /**
260
367
  * Destroy the texture.
261
368
  *
@@ -281,7 +388,7 @@ export abstract class Texture extends EventEmitter {
281
388
  * e.g. ImageData that is downloaded from a URL.
282
389
  */
283
390
  freeTextureData(): void {
284
- this.textureData = null;
391
+ queueMicrotask(this.freeTextureDataTask);
285
392
  }
286
393
 
287
394
  public setState(
@@ -308,6 +415,18 @@ export abstract class Texture extends EventEmitter {
308
415
  } else if (state === 'failed') {
309
416
  this._error = errorOrDimensions as Error;
310
417
  payload = this._error;
418
+
419
+ // increment the retry count for the texture
420
+ // this is used to compare against maxRetryCount, if set
421
+ // to determine if we should try loading again
422
+ this.retryCount += 1;
423
+
424
+ queueMicrotask(this.releaseTask);
425
+ } else if (state === 'loading') {
426
+ this._error = null;
427
+ this._dimensions = null;
428
+ } else {
429
+ this._error = null;
311
430
  }
312
431
 
313
432
  // emit the new state
@@ -333,6 +452,26 @@ export abstract class Texture extends EventEmitter {
333
452
  return this.textureData;
334
453
  }
335
454
 
455
+ /**
456
+ * Task for queueMicrotask to free texture data.
457
+ *
458
+ * @remarks
459
+ * This method is called in a microtask to free the texture data.
460
+ */
461
+ private freeTextureDataTask = (): void => {
462
+ this.textureData = null;
463
+ };
464
+
465
+ /**
466
+ * Task for queueMicrotask to release the texture.
467
+ *
468
+ * @remarks
469
+ * This method is called in a microtask to release the texture.
470
+ */
471
+ private releaseTask = (): void => {
472
+ this.release();
473
+ };
474
+
336
475
  /**
337
476
  * Get the texture source for this texture.
338
477
  *
@@ -425,6 +425,20 @@ export type RendererMainSettings = RendererRuntimeSettings & {
425
425
  * @defaultValue `null`
426
426
  */
427
427
  platform: typeof Platform | null;
428
+
429
+ /**
430
+ * Number of times to retry loading a failed texture
431
+ *
432
+ * @remarks
433
+ * When a texture fails to load, Lightning will retry up to this many times
434
+ * before permanently giving up. Each retry will clear the texture ownership
435
+ * and then re-establish it to trigger a new load attempt.
436
+ *
437
+ * Set to null to disable retries. Set to 0 to always try once and never retry.
438
+ * This is typically only used on ImageTexture instances.
439
+ *
440
+ */
441
+ maxRetryCount?: number;
428
442
  };
429
443
 
430
444
  /**
@@ -493,7 +507,7 @@ export class RendererMain extends EventEmitter {
493
507
  */
494
508
  constructor(
495
509
  settings: Partial<RendererMainSettings>,
496
- target: string | HTMLElement,
510
+ target?: string | HTMLElement,
497
511
  ) {
498
512
  super();
499
513
 
@@ -508,7 +522,7 @@ export class RendererMain extends EventEmitter {
508
522
  boundsMargin: settings.boundsMargin || 0,
509
523
  deviceLogicalPixelRatio: settings.deviceLogicalPixelRatio || 1,
510
524
  devicePhysicalPixelRatio:
511
- settings.devicePhysicalPixelRatio || (window.devicePixelRatio || 1),
525
+ settings.devicePhysicalPixelRatio || window.devicePixelRatio || 1,
512
526
  clearColor: settings.clearColor ?? 0x00000000,
513
527
  fpsUpdateInterval: settings.fpsUpdateInterval || 0,
514
528
  targetFPS: settings.targetFPS || 0,
@@ -525,6 +539,7 @@ export class RendererMain extends EventEmitter {
525
539
  canvas: settings.canvas,
526
540
  createImageBitmapSupport: settings.createImageBitmapSupport || 'full',
527
541
  platform: settings.platform || null,
542
+ maxRetryCount: settings.maxRetryCount ?? 5,
528
543
  };
529
544
 
530
545
  const {
@@ -582,24 +597,31 @@ export class RendererMain extends EventEmitter {
582
597
  textureProcessingTimeLimit: settings.textureProcessingTimeLimit!,
583
598
  createImageBitmapSupport: settings.createImageBitmapSupport!,
584
599
  platform,
600
+ maxRetryCount: settings.maxRetryCount ?? 5,
585
601
  });
586
602
 
587
603
  // Extract the root node
588
604
  this.root = this.stage.root as unknown as INode;
589
605
 
590
606
  // Get the target element and attach the canvas to it
591
- let targetEl: HTMLElement | null;
592
- if (typeof target === 'string') {
593
- targetEl = document.getElementById(target);
594
- } else {
595
- targetEl = target;
596
- }
607
+ if (target) {
608
+ let targetEl: HTMLElement | null;
609
+ if (typeof target === 'string') {
610
+ targetEl = document.getElementById(target);
611
+ } else {
612
+ targetEl = target;
613
+ }
597
614
 
598
- if (!targetEl) {
599
- throw new Error('Could not find target element');
600
- }
615
+ if (!targetEl) {
616
+ throw new Error('Could not find target element');
617
+ }
601
618
 
602
- targetEl.appendChild(canvas);
619
+ targetEl.appendChild(canvas);
620
+ } else if (settings.canvas !== canvas) {
621
+ throw new Error(
622
+ 'New canvas element could not be appended to undefined target',
623
+ );
624
+ }
603
625
 
604
626
  // Initialize inspector (if enabled)
605
627
  if (inspector && isProductionEnvironment === false) {
@@ -832,8 +854,8 @@ export class RendererMain extends EventEmitter {
832
854
  * **NOTE3**: This will not cleanup textures that are marked as `preventCleanup`.
833
855
  * **NOTE4**: This has nothing to do with the garbage collection of JavaScript.
834
856
  */
835
- cleanup(aggressive: boolean = false) {
836
- this.stage.cleanup(aggressive);
857
+ cleanup() {
858
+ this.stage.cleanup();
837
859
  }
838
860
 
839
861
  /**
@@ -1,29 +0,0 @@
1
- import type { CoreNode } from './CoreNode.js';
2
- /**
3
- * Result of autosize calculation containing the new dimensions
4
- */
5
- interface AutosizeResult {
6
- width: number;
7
- height: number;
8
- hasChanged: boolean;
9
- }
10
- /**
11
- * Creates an autosize manager for efficient child bounds calculation
12
- *
13
- * @remarks
14
- * This function creates a closure-based manager that tracks child transform
15
- * changes and calculates parent dimensions based on children's bounding boxes.
16
- * It's optimized for performance with minimal allocations and fast lookups.
17
- *
18
- * @param parentNode - The autosize parent node
19
- * @returns Object with autosize management methods
20
- */
21
- export declare function createAutosizeManager(parentNode: CoreNode): {
22
- addOrUpdateChild: (child: CoreNode) => void;
23
- removeChild: (child: CoreNode) => void;
24
- calculateAutosize: () => AutosizeResult;
25
- deactivate: () => void;
26
- readonly active: boolean;
27
- readonly childCount: number;
28
- };
29
- export {};
@@ -1,171 +0,0 @@
1
- /*
2
- * If not stated otherwise in this file or this component's LICENSE file the
3
- * following copyright and licenses apply:
4
- *
5
- * Copyright 2023 Comcast Cable Communications Management, LLC.
6
- *
7
- * Licensed under the Apache License, Version 2.0 (the License);
8
- * you may not use this file except in compliance with the License.
9
- * You may obtain a copy of the License at
10
- *
11
- * http://www.apache.org/licenses/LICENSE-2.0
12
- *
13
- * Unless required by applicable law or agreed to in writing, software
14
- * distributed under the License is distributed on an "AS IS" BASIS,
15
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
- * See the License for the specific language governing permissions and
17
- * limitations under the License.
18
- */
19
- import { Matrix3d } from './lib/Matrix3d.js';
20
- /**
21
- * Creates an autosize manager for efficient child bounds calculation
22
- *
23
- * @remarks
24
- * This function creates a closure-based manager that tracks child transform
25
- * changes and calculates parent dimensions based on children's bounding boxes.
26
- * It's optimized for performance with minimal allocations and fast lookups.
27
- *
28
- * @param parentNode - The autosize parent node
29
- * @returns Object with autosize management methods
30
- */
31
- export function createAutosizeManager(parentNode) {
32
- const childDataMap = new Map();
33
- let isActive = true;
34
- let lastWidth = 0;
35
- let lastHeight = 0;
36
- let lastHasChanged = false;
37
- const corners = [
38
- { x: 0, y: 0 },
39
- { x: 0, y: 0 },
40
- { x: 0, y: 0 },
41
- { x: 0, y: 0 },
42
- ];
43
- /**
44
- * Add or update a child node in the autosize calculation chain
45
- * @param child - Child node to add or update
46
- */
47
- const addOrUpdateChild = (child) => {
48
- if (isActive === false)
49
- return;
50
- if (child === parentNode)
51
- return; // Avoid circular references
52
- const currentTransform = child.localTransform || Matrix3d.identity();
53
- const existingData = childDataMap.get(child);
54
- if (existingData !== undefined) {
55
- // Update existing child
56
- Matrix3d.copy(currentTransform, existingData.localTransform);
57
- existingData.width = child.w;
58
- existingData.height = child.h;
59
- existingData.hasChanged = true;
60
- }
61
- else {
62
- // Add new child
63
- childDataMap.set(child, {
64
- localTransform: Matrix3d.copy(currentTransform),
65
- hasChanged: true,
66
- width: child.w,
67
- height: child.h,
68
- });
69
- }
70
- // Mark parent for recalculation
71
- parentNode.autosizeNeedsUpdate = true;
72
- };
73
- /**
74
- * Remove a child node from the autosize calculation chain
75
- * @param child - Child node to remove
76
- */
77
- const removeChild = (child) => {
78
- if (childDataMap.delete(child) === true) {
79
- parentNode.autosizeNeedsUpdate = true;
80
- }
81
- };
82
- /**
83
- * Calculate the autosize dimensions based on all child bounds
84
- * @returns Autosize calculation result
85
- */
86
- const calculateAutosize = () => {
87
- if (isActive === false || childDataMap.size === 0) {
88
- return { width: 0, height: 0, hasChanged: false };
89
- }
90
- let hasAnyChildChanged = false;
91
- for (const childData of childDataMap.values()) {
92
- if (childData.hasChanged) {
93
- hasAnyChildChanged = true;
94
- break;
95
- }
96
- }
97
- if (hasAnyChildChanged === false) {
98
- return {
99
- width: lastWidth,
100
- height: lastHeight,
101
- hasChanged: lastHasChanged,
102
- };
103
- }
104
- let minX = Infinity;
105
- let minY = Infinity;
106
- let maxX = -Infinity;
107
- let maxY = -Infinity;
108
- for (const [child, childData] of childDataMap) {
109
- if (!child.isRenderable)
110
- continue;
111
- const transform = child.localTransform || Matrix3d.identity();
112
- const width = childData.width;
113
- const height = childData.height;
114
- corners[0].x = 0;
115
- corners[0].y = 0;
116
- corners[1].x = width;
117
- corners[1].y = 0;
118
- corners[2].x = width;
119
- corners[2].y = height;
120
- corners[3].x = 0;
121
- corners[3].y = height;
122
- for (let i = 0; i < 4; i++) {
123
- const corner = corners[i];
124
- const localX = transform.ta * corner.x + transform.tb * corner.y + transform.tx;
125
- const localY = transform.tc * corner.x + transform.td * corner.y + transform.ty;
126
- if (localX < minX)
127
- minX = localX;
128
- if (localY < minY)
129
- minY = localY;
130
- if (localX > maxX)
131
- maxX = localX;
132
- if (localY > maxY)
133
- maxY = localY;
134
- }
135
- childData.hasChanged = false;
136
- }
137
- // Calculate container size based on maximum extent from container origin (0,0)
138
- // This ensures the container position remains fixed and only size adjusts
139
- const newWidth = maxX > 0 ? maxX : 0;
140
- const newHeight = maxY > 0 ? maxY : 0;
141
- const dimensionsChanged = lastWidth !== newWidth || lastHeight !== newHeight;
142
- lastWidth = newWidth;
143
- lastHeight = newHeight;
144
- lastHasChanged = dimensionsChanged;
145
- return {
146
- width: newWidth,
147
- height: newHeight,
148
- hasChanged: dimensionsChanged,
149
- };
150
- };
151
- /**
152
- * Deactivate this autosize manager and clean up resources
153
- */
154
- const deactivate = () => {
155
- isActive = false;
156
- childDataMap.clear();
157
- };
158
- return {
159
- addOrUpdateChild,
160
- removeChild,
161
- calculateAutosize,
162
- deactivate,
163
- get active() {
164
- return isActive;
165
- },
166
- get childCount() {
167
- return childDataMap.size;
168
- },
169
- };
170
- }
171
- //# sourceMappingURL=AutosizeManager.js.map