@lightningjs/renderer 3.0.0-beta7 → 3.0.0-beta9

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 (240) hide show
  1. package/dist/exports/utils.d.ts +2 -1
  2. package/dist/exports/utils.js +2 -1
  3. package/dist/exports/utils.js.map +1 -1
  4. package/dist/src/core/CoreNode.d.ts +24 -49
  5. package/dist/src/core/CoreNode.js +257 -255
  6. package/dist/src/core/CoreNode.js.map +1 -1
  7. package/dist/src/core/CoreTextNode.d.ts +1 -1
  8. package/dist/src/core/CoreTextNode.js +14 -15
  9. package/dist/src/core/CoreTextNode.js.map +1 -1
  10. package/dist/src/core/CoreTextureManager.d.ts +4 -9
  11. package/dist/src/core/CoreTextureManager.js +41 -78
  12. package/dist/src/core/CoreTextureManager.js.map +1 -1
  13. package/dist/src/core/Stage.d.ts +12 -27
  14. package/dist/src/core/Stage.js +50 -37
  15. package/dist/src/core/Stage.js.map +1 -1
  16. package/dist/src/core/TextureMemoryManager.d.ts +10 -1
  17. package/dist/src/core/TextureMemoryManager.js +103 -50
  18. package/dist/src/core/TextureMemoryManager.js.map +1 -1
  19. package/dist/src/core/animations/CoreAnimation.js +5 -0
  20. package/dist/src/core/animations/CoreAnimation.js.map +1 -1
  21. package/dist/src/core/animations/CoreAnimationController.d.ts +1 -0
  22. package/dist/src/core/animations/CoreAnimationController.js +11 -4
  23. package/dist/src/core/animations/CoreAnimationController.js.map +1 -1
  24. package/dist/src/core/lib/WebGlContextWrapper.d.ts +19 -2
  25. package/dist/src/core/lib/WebGlContextWrapper.js +56 -25
  26. package/dist/src/core/lib/WebGlContextWrapper.js.map +1 -1
  27. package/dist/src/core/renderers/CoreRenderer.d.ts +1 -0
  28. package/dist/src/core/renderers/CoreRenderer.js.map +1 -1
  29. package/dist/src/core/renderers/CoreShaderNode.d.ts +1 -0
  30. package/dist/src/core/renderers/CoreShaderNode.js +9 -0
  31. package/dist/src/core/renderers/CoreShaderNode.js.map +1 -1
  32. package/dist/src/core/renderers/canvas/CanvasRenderer.d.ts +1 -0
  33. package/dist/src/core/renderers/canvas/CanvasRenderer.js +3 -0
  34. package/dist/src/core/renderers/canvas/CanvasRenderer.js.map +1 -1
  35. package/dist/src/core/renderers/canvas/CanvasShaderNode.js +1 -4
  36. package/dist/src/core/renderers/canvas/CanvasShaderNode.js.map +1 -1
  37. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js +0 -3
  38. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js.map +1 -1
  39. package/dist/src/core/renderers/webgl/WebGlRenderer.d.ts +1 -0
  40. package/dist/src/core/renderers/webgl/WebGlRenderer.js +56 -54
  41. package/dist/src/core/renderers/webgl/WebGlRenderer.js.map +1 -1
  42. package/dist/src/core/renderers/webgl/WebGlShaderNode.js +1 -4
  43. package/dist/src/core/renderers/webgl/WebGlShaderNode.js.map +1 -1
  44. package/dist/src/core/renderers/webgl/WebGlShaderProgram.d.ts +4 -2
  45. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js +31 -13
  46. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js.map +1 -1
  47. package/dist/src/core/shaders/canvas/LinearGradient.js +5 -3
  48. package/dist/src/core/shaders/canvas/LinearGradient.js.map +1 -1
  49. package/dist/src/core/shaders/canvas/RadialGradient.js +13 -11
  50. package/dist/src/core/shaders/canvas/RadialGradient.js.map +1 -1
  51. package/dist/src/core/shaders/canvas/RoundedWithBorder.js +7 -5
  52. package/dist/src/core/shaders/canvas/RoundedWithBorder.js.map +1 -1
  53. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js +10 -8
  54. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js.map +1 -1
  55. package/dist/src/core/shaders/canvas/RoundedWithShadow.js +7 -5
  56. package/dist/src/core/shaders/canvas/RoundedWithShadow.js.map +1 -1
  57. package/dist/src/core/shaders/templates/BorderTemplate.d.ts +1 -1
  58. package/dist/src/core/shaders/templates/BorderTemplate.js +1 -1
  59. package/dist/src/core/shaders/templates/BorderTemplate.js.map +1 -1
  60. package/dist/src/core/shaders/templates/HolePunchTemplate.js +1 -1
  61. package/dist/src/core/shaders/templates/HolePunchTemplate.js.map +1 -1
  62. package/dist/src/core/shaders/templates/RoundedTemplate.js +1 -1
  63. package/dist/src/core/shaders/templates/RoundedTemplate.js.map +1 -1
  64. package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.d.ts +1 -1
  65. package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.d.ts +1 -1
  66. package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.d.ts +1 -1
  67. package/dist/src/core/shaders/templates/ShadowTemplate.d.ts +1 -1
  68. package/dist/src/core/shaders/{templates/shaderUtils.d.ts → utils.d.ts} +1 -1
  69. package/dist/src/core/shaders/{templates/shaderUtils.js → utils.js} +2 -2
  70. package/dist/src/core/shaders/utils.js.map +1 -0
  71. package/dist/src/core/shaders/webgl/HolePunch.js +4 -3
  72. package/dist/src/core/shaders/webgl/HolePunch.js.map +1 -1
  73. package/dist/src/core/shaders/webgl/LinearGradient.js +5 -4
  74. package/dist/src/core/shaders/webgl/LinearGradient.js.map +1 -1
  75. package/dist/src/core/shaders/webgl/RadialGradient.js +6 -5
  76. package/dist/src/core/shaders/webgl/RadialGradient.js.map +1 -1
  77. package/dist/src/core/shaders/webgl/RoundedWithBorder.js +18 -7
  78. package/dist/src/core/shaders/webgl/RoundedWithBorder.js.map +1 -1
  79. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js +30 -17
  80. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js.map +1 -1
  81. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +0 -50
  82. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +1 -1
  83. package/dist/src/core/textures/ImageTexture.d.ts +1 -1
  84. package/dist/src/core/textures/ImageTexture.js +1 -1
  85. package/dist/src/core/textures/ImageTexture.js.map +1 -1
  86. package/dist/src/core/textures/Texture.d.ts +12 -0
  87. package/dist/src/core/textures/Texture.js +19 -0
  88. package/dist/src/core/textures/Texture.js.map +1 -1
  89. package/dist/src/core/utils.d.ts +1 -1
  90. package/dist/src/main-api/Inspector.d.ts +6 -1
  91. package/dist/src/main-api/Inspector.js +42 -4
  92. package/dist/src/main-api/Inspector.js.map +1 -1
  93. package/dist/src/main-api/Renderer.d.ts +62 -43
  94. package/dist/src/main-api/Renderer.js +119 -31
  95. package/dist/src/main-api/Renderer.js.map +1 -1
  96. package/dist/tsconfig.dist.tsbuildinfo +1 -1
  97. package/exports/utils.ts +7 -1
  98. package/package.json +1 -1
  99. package/src/core/CoreNode.ts +307 -313
  100. package/src/core/CoreTextNode.ts +23 -20
  101. package/src/core/CoreTextureManager.ts +40 -99
  102. package/src/core/Stage.ts +68 -65
  103. package/src/core/TextureMemoryManager.ts +135 -67
  104. package/src/core/animations/CoreAnimation.ts +7 -0
  105. package/src/core/animations/CoreAnimationController.ts +13 -4
  106. package/src/core/lib/WebGlContextWrapper.ts +69 -75
  107. package/src/core/renderers/CoreRenderer.ts +1 -0
  108. package/src/core/renderers/CoreShaderNode.ts +10 -0
  109. package/src/core/renderers/canvas/CanvasRenderer.ts +4 -0
  110. package/src/core/renderers/canvas/CanvasShaderNode.ts +1 -4
  111. package/src/core/renderers/webgl/WebGlCtxTexture.ts +0 -3
  112. package/src/core/renderers/webgl/WebGlRenderer.ts +64 -65
  113. package/src/core/renderers/webgl/WebGlShaderNode.ts +2 -4
  114. package/src/core/renderers/webgl/WebGlShaderProgram.ts +37 -14
  115. package/src/core/shaders/canvas/LinearGradient.ts +8 -6
  116. package/src/core/shaders/canvas/RadialGradient.ts +22 -36
  117. package/src/core/shaders/canvas/RoundedWithBorder.ts +10 -8
  118. package/src/core/shaders/canvas/RoundedWithBorderAndShadow.ts +14 -12
  119. package/src/core/shaders/canvas/RoundedWithShadow.ts +8 -7
  120. package/src/core/shaders/templates/BorderTemplate.ts +1 -1
  121. package/src/core/shaders/templates/HolePunchTemplate.ts +1 -1
  122. package/src/core/shaders/templates/RoundedTemplate.ts +1 -1
  123. package/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.ts +1 -1
  124. package/src/core/shaders/templates/RoundedWithBorderTemplate.ts +1 -1
  125. package/src/core/shaders/templates/RoundedWithShadowTemplate.ts +1 -1
  126. package/src/core/shaders/templates/ShadowTemplate.ts +1 -1
  127. package/src/core/shaders/{templates/shaderUtils.ts → utils.ts} +2 -3
  128. package/src/core/shaders/webgl/HolePunch.ts +4 -7
  129. package/src/core/shaders/webgl/LinearGradient.ts +5 -4
  130. package/src/core/shaders/webgl/RadialGradient.ts +7 -6
  131. package/src/core/shaders/webgl/RoundedWithBorder.ts +18 -7
  132. package/src/core/shaders/webgl/RoundedWithBorderAndShadow.ts +30 -21
  133. package/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.ts +2 -58
  134. package/src/core/textures/ImageTexture.ts +17 -16
  135. package/src/core/textures/Texture.ts +23 -0
  136. package/src/main-api/Inspector.ts +52 -5
  137. package/src/main-api/Renderer.ts +222 -77
  138. package/dist/src/core/platform.d.ts +0 -10
  139. package/dist/src/core/platform.js +0 -56
  140. package/dist/src/core/platform.js.map +0 -1
  141. package/dist/src/core/renderers/CoreShader.d.ts +0 -9
  142. package/dist/src/core/renderers/CoreShader.js +0 -28
  143. package/dist/src/core/renderers/CoreShader.js.map +0 -1
  144. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.d.ts +0 -33
  145. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js +0 -250
  146. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js.map +0 -1
  147. package/dist/src/core/renderers/canvas/CanvasCoreTexture.d.ts +0 -16
  148. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js +0 -123
  149. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js.map +0 -1
  150. package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.d.ts +0 -10
  151. package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.js +0 -43
  152. package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.js.map +0 -1
  153. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.d.ts +0 -12
  154. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js +0 -55
  155. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js.map +0 -1
  156. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.d.ts +0 -9
  157. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.js +0 -38
  158. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.js.map +0 -1
  159. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.d.ts +0 -57
  160. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js +0 -227
  161. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js.map +0 -1
  162. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.d.ts +0 -34
  163. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js +0 -114
  164. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js.map +0 -1
  165. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.d.ts +0 -133
  166. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js +0 -613
  167. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js.map +0 -1
  168. package/dist/src/core/renderers/webgl/WebGlCoreShader.d.ts +0 -83
  169. package/dist/src/core/renderers/webgl/WebGlCoreShader.js +0 -231
  170. package/dist/src/core/renderers/webgl/WebGlCoreShader.js.map +0 -1
  171. package/dist/src/core/renderers/webgl/shaders/DefaultShader.d.ts +0 -9
  172. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js +0 -87
  173. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js.map +0 -1
  174. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.d.ts +0 -10
  175. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js +0 -119
  176. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js.map +0 -1
  177. package/dist/src/core/renderers/webgl/shaders/DynamicShader.d.ts +0 -29
  178. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js +0 -413
  179. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js.map +0 -1
  180. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.d.ts +0 -28
  181. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js +0 -131
  182. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js.map +0 -1
  183. package/dist/src/core/renderers/webgl/shaders/SdfShader.d.ts +0 -47
  184. package/dist/src/core/renderers/webgl/shaders/SdfShader.js +0 -160
  185. package/dist/src/core/renderers/webgl/shaders/SdfShader.js.map +0 -1
  186. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.d.ts +0 -31
  187. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js +0 -71
  188. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js.map +0 -1
  189. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.d.ts +0 -30
  190. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js +0 -58
  191. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js.map +0 -1
  192. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.d.ts +0 -31
  193. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js +0 -71
  194. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js.map +0 -1
  195. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.d.ts +0 -31
  196. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js +0 -71
  197. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js.map +0 -1
  198. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.d.ts +0 -31
  199. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js +0 -71
  200. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js.map +0 -1
  201. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.d.ts +0 -9
  202. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js +0 -136
  203. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js.map +0 -1
  204. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.d.ts +0 -36
  205. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js +0 -85
  206. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js.map +0 -1
  207. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.d.ts +0 -45
  208. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js +0 -104
  209. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js.map +0 -1
  210. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.d.ts +0 -22
  211. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.js +0 -45
  212. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.js.map +0 -1
  213. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.d.ts +0 -58
  214. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js +0 -80
  215. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js.map +0 -1
  216. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.d.ts +0 -35
  217. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js +0 -129
  218. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js.map +0 -1
  219. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.d.ts +0 -39
  220. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js +0 -116
  221. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js.map +0 -1
  222. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.d.ts +0 -61
  223. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js +0 -127
  224. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js.map +0 -1
  225. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.d.ts +0 -40
  226. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js +0 -71
  227. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js.map +0 -1
  228. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.d.ts +0 -115
  229. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.js +0 -61
  230. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.js.map +0 -1
  231. package/dist/src/core/shaders/templates/shaderUtils.js.map +0 -1
  232. package/dist/src/core/temp.d.ts +0 -1
  233. package/dist/src/core/temp.js +0 -77
  234. package/dist/src/core/temp.js.map +0 -1
  235. package/dist/src/main-api/DynamicShaderController.d.ts +0 -29
  236. package/dist/src/main-api/DynamicShaderController.js +0 -58
  237. package/dist/src/main-api/DynamicShaderController.js.map +0 -1
  238. package/dist/src/main-api/ShaderController.d.ts +0 -31
  239. package/dist/src/main-api/ShaderController.js +0 -37
  240. package/dist/src/main-api/ShaderController.js.map +0 -1
@@ -16,7 +16,7 @@
16
16
  */
17
17
 
18
18
  import type { CoreShaderType } from '../../renderers/CoreShaderNode.js';
19
- import { validateArrayLength4 } from './shaderUtils.js';
19
+ import { validateArrayLength4 } from '../utils.js';
20
20
 
21
21
  /**
22
22
  * Properties of the {@link HolePunch} shader
@@ -17,7 +17,7 @@
17
17
 
18
18
  import type { CoreShaderType } from '../../renderers/CoreShaderNode.js';
19
19
  import type { Vec4 } from '../../renderers/webgl/internal/ShaderUtils.js';
20
- import { validateArrayLength4 } from './shaderUtils.js';
20
+ import { validateArrayLength4 } from '../utils.js';
21
21
 
22
22
  /**
23
23
  * Properties of the {@link RoundedRectangle} shader
@@ -18,7 +18,7 @@
18
18
  import type { CoreShaderType } from '../../renderers/CoreShaderNode.js';
19
19
  import { getBorderProps, type BorderProps } from './BorderTemplate.js';
20
20
  import { RoundedTemplate, type RoundedProps } from './RoundedTemplate.js';
21
- import type { PrefixedType } from './shaderUtils.js';
21
+ import type { PrefixedType } from '../utils.js';
22
22
  import { getShadowProps, type ShadowProps } from './ShadowTemplate.js';
23
23
 
24
24
  export type RoundedWithBorderAndShadowProps = RoundedProps &
@@ -18,7 +18,7 @@
18
18
  import type { CoreShaderType } from '../../renderers/CoreShaderNode.js';
19
19
  import { getBorderProps, type BorderProps } from './BorderTemplate.js';
20
20
  import { RoundedTemplate, type RoundedProps } from './RoundedTemplate.js';
21
- import type { PrefixedType } from './shaderUtils.js';
21
+ import type { PrefixedType } from '../utils.js';
22
22
 
23
23
  export type RoundedWithBorderProps = RoundedProps &
24
24
  PrefixedType<BorderProps, 'border'>;
@@ -17,7 +17,7 @@
17
17
 
18
18
  import type { CoreShaderType } from '../../renderers/CoreShaderNode.js';
19
19
  import { RoundedTemplate, type RoundedProps } from './RoundedTemplate.js';
20
- import type { PrefixedType } from './shaderUtils.js';
20
+ import type { PrefixedType } from '../utils.js';
21
21
  import { getShadowProps, type ShadowProps } from './ShadowTemplate.js';
22
22
 
23
23
  export type RoundedWithShadowProps = RoundedProps &
@@ -16,7 +16,7 @@
16
16
  */
17
17
 
18
18
  import type { CoreShaderType } from '../../renderers/CoreShaderNode.js';
19
- import type { PrefixedType } from './shaderUtils.js';
19
+ import type { PrefixedType } from '../utils.js';
20
20
 
21
21
  export interface ShadowProps {
22
22
  /**
@@ -14,9 +14,8 @@
14
14
  *
15
15
  * SPDX-License-Identifier: Apache-2.0
16
16
  */
17
-
18
- import { assertTruthy } from '../../../utils.js';
19
- import type { Vec4 } from '../../renderers/webgl/internal/ShaderUtils.js';
17
+ import { assertTruthy } from '../../utils.js';
18
+ import type { Vec4 } from '../renderers/webgl/internal/ShaderUtils.js';
20
19
 
21
20
  export const validateArrayLength4 = (value: number | number[]): Vec4 => {
22
21
  if (!Array.isArray(value)) {
@@ -26,17 +26,14 @@ import type { WebGlShaderType } from '../../renderers/webgl/WebGlShaderNode.js';
26
26
  export const HolePunch: WebGlShaderType<HolePunchProps> = {
27
27
  props: HolePunchTemplate.props,
28
28
  update() {
29
- this.uniform2f('u_pos', this.props!.x, this.props!.y);
29
+ const props = this.props!;
30
+ this.uniform2f('u_pos', props.x, props.y);
30
31
  //precalculate to halfSize once instead of for every pixel
31
- this.uniform2f('u_size', this.props!.width * 0.5, this.props!.height * 0.5);
32
+ this.uniform2f('u_size', props.width * 0.5, props.height * 0.5);
32
33
 
33
34
  this.uniform4fa(
34
35
  'u_radius',
35
- calcFactoredRadiusArray(
36
- this.props!.radius as Vec4,
37
- this.props!.width,
38
- this.props!.height,
39
- ),
36
+ calcFactoredRadiusArray(props.radius as Vec4, props.width, props.height),
40
37
  );
41
38
  },
42
39
  getCacheMarkers(props: HolePunchProps) {
@@ -27,11 +27,12 @@ import type { WebGlShaderType } from '../../renderers/webgl/WebGlShaderNode.js';
27
27
  export const LinearGradient: WebGlShaderType<LinearGradientProps> = {
28
28
  props: LinearGradientTemplate.props,
29
29
  update() {
30
- this.uniform1f('u_angle', this.props!.angle - (Math.PI / 180) * 90);
31
- this.uniform1fv('u_stops', new Float32Array(this.props!.stops));
30
+ const props = this.props!;
31
+ this.uniform1f('u_angle', props.angle - (Math.PI / 180) * 90);
32
+ this.uniform1fv('u_stops', new Float32Array(props.stops));
32
33
  const colors: number[] = [];
33
- for (let i = 0; i < this.props!.colors.length; i++) {
34
- const norm = getNormalizedRgbaComponents(this.props!.colors[i]!);
34
+ for (let i = 0; i < props.colors.length; i++) {
35
+ const norm = getNormalizedRgbaComponents(props.colors[i]!);
35
36
  colors.push(norm[0], norm[1], norm[2], norm[3]);
36
37
  }
37
38
  this.uniform4fv('u_colors', new Float32Array(colors));
@@ -28,16 +28,17 @@ import type { WebGlShaderType } from '../../renderers/webgl/WebGlShaderNode.js';
28
28
  export const RadialGradient: WebGlShaderType<RadialGradientProps> = {
29
29
  props: RadialGradientTemplate.props,
30
30
  update(node: CoreNode) {
31
+ const props = this.props!;
31
32
  this.uniform2f(
32
33
  'u_projection',
33
- this.props!.pivot[0] * node.width,
34
- this.props!.pivot[1] * node.height,
34
+ props.pivot[0] * node.width,
35
+ props.pivot[1] * node.height,
35
36
  );
36
- this.uniform2f('u_size', this.props!.width * 0.5, this.props!.height * 0.5);
37
- this.uniform1fv('u_stops', new Float32Array(this.props!.stops));
37
+ this.uniform2f('u_size', props.width * 0.5, props.height * 0.5);
38
+ this.uniform1fv('u_stops', new Float32Array(props.stops));
38
39
  const colors: number[] = [];
39
- for (let i = 0; i < this.props!.colors.length; i++) {
40
- const norm = getNormalizedRgbaComponents(this.props!.colors[i]!);
40
+ for (let i = 0; i < props.colors.length; i++) {
41
+ const norm = getNormalizedRgbaComponents(props.colors[i]!);
41
42
  colors.push(norm[0], norm[1], norm[2], norm[3]);
42
43
  }
43
44
  this.uniform4fv('u_colors', new Float32Array(colors));
@@ -65,6 +65,7 @@ export const RoundedWithBorder: WebGlShaderType<RoundedWithBorderProps> = {
65
65
  varying vec4 v_innerRadius;
66
66
  varying vec2 v_innerSize;
67
67
  varying vec2 v_halfDimensions;
68
+ varying float v_borderZero;
68
69
 
69
70
  void main() {
70
71
  vec2 normalized = a_position * u_pixelRatio;
@@ -76,14 +77,18 @@ export const RoundedWithBorder: WebGlShaderType<RoundedWithBorderProps> = {
76
77
 
77
78
  v_halfDimensions = u_dimensions * 0.5;
78
79
 
79
- v_innerRadius = vec4(
80
- max(0.0, u_radius.x - max(u_borderWidth.x, u_borderWidth.w) - 0.5),
81
- max(0.0, u_radius.y - max(u_borderWidth.x, u_borderWidth.y) - 0.5),
82
- max(0.0, u_radius.z - max(u_borderWidth.z, u_borderWidth.y) - 0.5),
83
- max(0.0, u_radius.w - max(u_borderWidth.z, u_borderWidth.w) - 0.5)
84
- );
80
+ v_borderZero = u_borderWidth == vec4(0.0) ? 1.0 : 0.0;
85
81
 
86
- v_innerSize = (vec2(u_dimensions.x - (u_borderWidth[3] + u_borderWidth[1]) + 1.0, u_dimensions.y - (u_borderWidth[0] + u_borderWidth[2])) - 2.0) * 0.5;
82
+ if(v_borderZero == 0.0) {
83
+ v_innerRadius = vec4(
84
+ max(0.0, u_radius.x - max(u_borderWidth.x, u_borderWidth.w) - 0.5),
85
+ max(0.0, u_radius.y - max(u_borderWidth.x, u_borderWidth.y) - 0.5),
86
+ max(0.0, u_radius.z - max(u_borderWidth.z, u_borderWidth.y) - 0.5),
87
+ max(0.0, u_radius.w - max(u_borderWidth.z, u_borderWidth.w) - 0.5)
88
+ );
89
+
90
+ v_innerSize = (vec2(u_dimensions.x - (u_borderWidth[3] + u_borderWidth[1]) + 1.0, u_dimensions.y - (u_borderWidth[0] + u_borderWidth[2])) - 2.0) * 0.5;
91
+ }
87
92
 
88
93
  gl_Position = vec4(normalized.x * screenSpace.x - 1.0, normalized.y * -abs(screenSpace.y) + 1.0, 0.0, 1.0);
89
94
  gl_Position.y = -sign(screenSpace.y) * gl_Position.y;
@@ -114,6 +119,7 @@ export const RoundedWithBorder: WebGlShaderType<RoundedWithBorderProps> = {
114
119
  varying vec2 v_halfDimensions;
115
120
  varying vec4 v_innerRadius;
116
121
  varying vec2 v_innerSize;
122
+ varying float v_borderZero;
117
123
 
118
124
  float roundedBox(vec2 p, vec2 s, vec4 r) {
119
125
  r.xy = (p.x > 0.0) ? r.yz : r.xw;
@@ -130,6 +136,11 @@ export const RoundedWithBorder: WebGlShaderType<RoundedWithBorderProps> = {
130
136
 
131
137
  float outerAlpha = 1.0 - smoothstep(0.0, 1.0, outerDist);
132
138
 
139
+ if(v_borderZero == 1.0) {
140
+ gl_FragColor = mix(vec4(0.0), color, outerAlpha) * u_alpha;
141
+ return;
142
+ }
143
+
133
144
  boxUv.x += u_borderWidth.y > u_borderWidth.w ? (u_borderWidth.y - u_borderWidth.w) * 0.5 : -(u_borderWidth.w - u_borderWidth.y) * 0.5;
134
145
  boxUv.y += u_borderWidth.z > u_borderWidth.x ? ((u_borderWidth.z - u_borderWidth.x) * 0.5 + 0.5) : -(u_borderWidth.x - u_borderWidth.z) * 0.5;
135
146
 
@@ -28,19 +28,16 @@ export const RoundedWithBorderAndShadow: WebGlShaderType<RoundedWithBorderAndSha
28
28
  {
29
29
  props: RoundedWithBorderAndShadowTemplate.props,
30
30
  update(node: CoreNode) {
31
- this.uniformRGBA('u_borderColor', this.props!['border-color']);
32
- this.uniform4fa('u_borderWidth', this.props!['border-width'] as Vec4);
31
+ const props = this.props!;
32
+ this.uniformRGBA('u_borderColor', props['border-color']);
33
+ this.uniform4fa('u_borderWidth', props['border-width'] as Vec4);
33
34
 
34
- this.uniformRGBA('u_shadowColor', this.props!['shadow-color']);
35
- this.uniform4fa('u_shadow', this.props!['shadow-projection']);
35
+ this.uniformRGBA('u_shadowColor', props['shadow-color']);
36
+ this.uniform4fa('u_shadow', props['shadow-projection']);
36
37
 
37
38
  this.uniform4fa(
38
39
  'u_radius',
39
- calcFactoredRadiusArray(
40
- this.props!.radius as Vec4,
41
- node.width,
42
- node.height,
43
- ),
40
+ calcFactoredRadiusArray(props.radius as Vec4, node.width, node.height),
44
41
  );
45
42
  },
46
43
  vertex: `
@@ -71,6 +68,7 @@ export const RoundedWithBorderAndShadow: WebGlShaderType<RoundedWithBorderAndSha
71
68
  varying vec4 v_innerRadius;
72
69
  varying vec2 v_innerSize;
73
70
  varying vec2 v_halfDimensions;
71
+ varying float v_borderZero;
74
72
 
75
73
  void main() {
76
74
  vec2 screenSpace = vec2(2.0 / u_resolution.x, -2.0 / u_resolution.y);
@@ -84,18 +82,23 @@ export const RoundedWithBorderAndShadow: WebGlShaderType<RoundedWithBorderAndSha
84
82
 
85
83
  v_halfDimensions = u_dimensions * 0.5;
86
84
 
87
- v_innerRadius = vec4(
88
- max(0.0, u_radius.x - max(u_borderWidth.x, u_borderWidth.w) - 0.5),
89
- max(0.0, u_radius.y - max(u_borderWidth.x, u_borderWidth.y) - 0.5),
90
- max(0.0, u_radius.z - max(u_borderWidth.z, u_borderWidth.y) - 0.5),
91
- max(0.0, u_radius.w - max(u_borderWidth.z, u_borderWidth.w) - 0.5)
92
- );
93
-
94
- v_innerSize = (vec2(u_dimensions.x - (u_borderWidth[3] + u_borderWidth[1]) - 1.0, u_dimensions.y - (u_borderWidth[0] + u_borderWidth[2])) - 2.0) * 0.5;
95
-
96
85
  v_color = a_color;
97
86
  v_nodeCoords = a_nodeCoords + (screenSpace + shadowEdge) / (u_dimensions);
98
87
  v_textureCoords = a_textureCoords + (screenSpace + shadowEdge) / (u_dimensions);
88
+
89
+ v_borderZero = u_borderWidth == vec4(0.0) ? 1.0 : 0.0;
90
+
91
+
92
+ if(v_borderZero == 0.0) {
93
+ v_innerRadius = vec4(
94
+ max(0.0, u_radius.x - max(u_borderWidth.x, u_borderWidth.w) - 0.5),
95
+ max(0.0, u_radius.y - max(u_borderWidth.x, u_borderWidth.y) - 0.5),
96
+ max(0.0, u_radius.z - max(u_borderWidth.z, u_borderWidth.y) - 0.5),
97
+ max(0.0, u_radius.w - max(u_borderWidth.z, u_borderWidth.w) - 0.5)
98
+ );
99
+
100
+ v_innerSize = (vec2(u_dimensions.x - (u_borderWidth[3] + u_borderWidth[1]) - 1.0, u_dimensions.y - (u_borderWidth[0] + u_borderWidth[2])) - 2.0) * 0.5;
101
+ }
99
102
  }
100
103
  `,
101
104
  fragment: `
@@ -125,6 +128,7 @@ export const RoundedWithBorderAndShadow: WebGlShaderType<RoundedWithBorderAndSha
125
128
  varying vec2 v_halfDimensions;
126
129
  varying vec4 v_innerRadius;
127
130
  varying vec2 v_innerSize;
131
+ varying float v_borderZero;
128
132
 
129
133
  float roundedBox(vec2 p, vec2 s, vec4 r) {
130
134
  r.xy = (p.x > 0.0) ? r.yz : r.xw;
@@ -149,15 +153,20 @@ export const RoundedWithBorderAndShadow: WebGlShaderType<RoundedWithBorderAndSha
149
153
 
150
154
  float outerAlpha = 1.0 - smoothstep(0.0, 1.0, outerDist);
151
155
 
156
+ float shadowAlpha = shadowBox(boxUv - u_shadow.xy, v_halfDimensions + u_shadow.w, u_radius + u_shadow.z);
157
+ vec4 shadow = mix(vec4(0.0), u_shadowColor, shadowAlpha);
158
+
159
+ if(v_borderZero == 1.0) {
160
+ gl_FragColor = mix(shadow, color, outerAlpha) * u_alpha;
161
+ return;
162
+ }
163
+
152
164
  boxUv.x += u_borderWidth.y > u_borderWidth.w ? (u_borderWidth.y - u_borderWidth.w) * 0.5 : -(u_borderWidth.w - u_borderWidth.y) * 0.5;
153
165
  boxUv.y += u_borderWidth.z > u_borderWidth.x ? ((u_borderWidth.z - u_borderWidth.x) * 0.5 + 0.5) : -(u_borderWidth.x - u_borderWidth.z) * 0.5;
154
166
 
155
167
  float innerDist = roundedBox(boxUv, v_innerSize, v_innerRadius);
156
168
  float innerAlpha = 1.0 - smoothstep(0.0, 1.0, innerDist);
157
169
 
158
- float shadowAlpha = shadowBox(boxUv - u_shadow.xy, v_halfDimensions + u_shadow.w, u_radius + u_shadow.z);
159
-
160
- vec4 shadow = mix(vec4(0.0), u_shadowColor, shadowAlpha);
161
170
  vec4 resColor = mix(u_borderColor, color, innerAlpha);
162
171
  resColor = mix(shadow, resColor, outerAlpha);
163
172
  gl_FragColor = resColor * u_alpha;
@@ -659,7 +659,6 @@ export class SdfTextRenderer extends TextRenderer<SdfTextRendererState> {
659
659
  },
660
660
  ]);
661
661
  state.bufferUploaded = false;
662
- assertTruthy(state.webGlBuffers);
663
662
  webGlBuffers = state.webGlBuffers;
664
663
  }
665
664
 
@@ -671,9 +670,7 @@ export class SdfTextRenderer extends TextRenderer<SdfTextRendererState> {
671
670
  state.bufferUploaded = true;
672
671
  }
673
672
 
674
- assertTruthy(trFontFace);
675
673
  if (scrollable && contain === 'both') {
676
- assertTruthy(elementBounds.valid);
677
674
  const elementRect = convertBoundToRect(elementBounds, tmpRect);
678
675
 
679
676
  if (node.clippingRect.valid) {
@@ -695,7 +692,7 @@ export class SdfTextRenderer extends TextRenderer<SdfTextRendererState> {
695
692
  sdfShaderProps: {
696
693
  transform: node.globalTransform!.getFloatArr(),
697
694
  color: mergeColorAlpha(color, node.worldAlpha),
698
- size: fontSize / (trFontFace.data?.info.size || 0),
695
+ size: fontSize / (trFontFace!.data?.info.size || 0),
699
696
  scrollY,
700
697
  distanceRange,
701
698
  debug: debug.sdfShaderDebug,
@@ -717,65 +714,12 @@ export class SdfTextRenderer extends TextRenderer<SdfTextRendererState> {
717
714
  );
718
715
 
719
716
  const texture = state.trFontFace?.texture;
720
- assertTruthy(texture);
721
- const ctxTexture = texture.ctxTexture;
717
+ const ctxTexture = texture!.ctxTexture;
722
718
 
723
719
  renderOp.addTexture(ctxTexture as WebGlCtxTexture);
724
720
  renderOp.numQuads = state.bufferNumQuads;
725
721
 
726
722
  renderer.addRenderOp(renderOp);
727
-
728
- // if (!debug.disableScissor) {
729
- // renderer.enableScissor(
730
- // visibleRect.x,
731
- // visibleRect.y,
732
- // visibleRect.w,
733
- // visibleRect.h,
734
- // );
735
- // }
736
-
737
- // Draw the arrays
738
- // gl.drawArrays(
739
- // gl.TRIANGLES, // Primitive type
740
- // 0,
741
- // bufferNumVertices, // Number of verticies
742
- // );
743
-
744
- // renderer.disableScissor();
745
-
746
- // if (debug.showElementRect) {
747
- // this.renderer.drawBorder(
748
- // Colors.Blue,
749
- // elementRect.x,
750
- // elementRect.y,
751
- // elementRect.w,
752
- // elementRect.h,
753
- // );
754
- // }
755
-
756
- // if (debug.showVisibleRect) {
757
- // this.renderer.drawBorder(
758
- // Colors.Green,
759
- // visibleRect.x,
760
- // visibleRect.y,
761
- // visibleRect.w,
762
- // visibleRect.h,
763
- // );
764
- // }
765
-
766
- // if (debug.showRenderWindow && renderWindow) {
767
- // this.renderer.drawBorder(
768
- // Colors.Red,
769
- // x + renderWindow.x1,
770
- // y + renderWindow.y1 - scrollY,
771
- // x + renderWindow.x2 - (x + renderWindow.x1),
772
- // y + renderWindow.y2 - scrollY - (y + renderWindow.y1 - scrollY),
773
- // );
774
- // }
775
- // if (debug.printLayoutTime) {
776
- // debugData.drawSum += performance.now() - drawStartTime;
777
- // debugData.drawCount++;
778
- // }
779
723
  }
780
724
 
781
725
  override setIsRenderable(
@@ -149,24 +149,25 @@ export class ImageTexture extends Texture {
149
149
  img.crossOrigin = 'anonymous';
150
150
  }
151
151
 
152
- return new Promise<{ data: HTMLImageElement; premultiplyAlpha: boolean }>(
153
- (resolve) => {
154
- img.onload = () => {
155
- resolve({ data: img, premultiplyAlpha: hasAlpha });
156
- };
152
+ return new Promise<{
153
+ data: HTMLImageElement | null;
154
+ premultiplyAlpha: boolean;
155
+ }>((resolve) => {
156
+ img.onload = () => {
157
+ resolve({ data: img, premultiplyAlpha: hasAlpha });
158
+ };
157
159
 
158
- img.onerror = () => {
159
- console.warn('Image loading failed, returning fallback object.');
160
- resolve({ data: img, premultiplyAlpha: hasAlpha });
161
- };
160
+ img.onerror = () => {
161
+ console.warn('Image loading failed, returning fallback object.');
162
+ resolve({ data: null, premultiplyAlpha: hasAlpha });
163
+ };
162
164
 
163
- if (src instanceof Blob) {
164
- img.src = URL.createObjectURL(src);
165
- } else {
166
- img.src = src;
167
- }
168
- },
169
- );
165
+ if (src instanceof Blob) {
166
+ img.src = URL.createObjectURL(src);
167
+ } else {
168
+ img.src = src;
169
+ }
170
+ });
170
171
  }
171
172
 
172
173
  async createImageBitmap(
@@ -144,6 +144,12 @@ export abstract class Texture extends EventEmitter {
144
144
  private _dimensions: Dimensions | null = null;
145
145
  private _error: Error | null = null;
146
146
 
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
+
147
153
  // aggregate state
148
154
  public state: TextureState = 'initial';
149
155
 
@@ -250,6 +256,23 @@ export abstract class Texture extends EventEmitter {
250
256
  this.ctxTexture?.free();
251
257
  }
252
258
 
259
+ /**
260
+ * Destroy the texture.
261
+ *
262
+ * @remarks
263
+ * This method is called when the texture is no longer needed and should be
264
+ * cleaned up.
265
+ */
266
+ destroy(): void {
267
+ // Only free GPU resources if we're in a state where they exist
268
+ if (this.state === 'loaded') {
269
+ this.free();
270
+ }
271
+
272
+ // Always free texture data regardless of state
273
+ this.freeTextureData();
274
+ }
275
+
253
276
  /**
254
277
  * Free the source texture data for this Texture.
255
278
  *
@@ -7,7 +7,7 @@ import { type RendererMainSettings } from './Renderer.js';
7
7
  import type { AnimationSettings } from '../core/animations/CoreAnimation.js';
8
8
  import type { IAnimationController } from '../common/IAnimationController.js';
9
9
  import { isProductionEnvironment } from '../utils.js';
10
- import type { CoreTextNode, CoreTextNodeProps } from '../core/CoreTextNode.js';
10
+ import { CoreTextNode, type CoreTextNodeProps } from '../core/CoreTextNode.js';
11
11
 
12
12
  /**
13
13
  * Inspector
@@ -166,6 +166,8 @@ const knownProperties = new Set<string>([
166
166
  export class Inspector {
167
167
  private root: HTMLElement | null = null;
168
168
  private canvas: HTMLCanvasElement | null = null;
169
+ private mutationObserver: MutationObserver = new MutationObserver(() => {});
170
+ private resizeObserver: ResizeObserver = new ResizeObserver(() => {});
169
171
  private height = 1080;
170
172
  private width = 1920;
171
173
  private scaleX = 1;
@@ -196,18 +198,18 @@ export class Inspector {
196
198
  document.body.appendChild(this.root);
197
199
 
198
200
  //listen for changes on canvas
199
- const mutationObserver = new MutationObserver(
201
+ this.mutationObserver = new MutationObserver(
200
202
  this.setRootPosition.bind(this),
201
203
  );
202
- mutationObserver.observe(canvas, {
204
+ this.mutationObserver.observe(canvas, {
203
205
  attributes: true,
204
206
  childList: false,
205
207
  subtree: false,
206
208
  });
207
209
 
208
210
  // Create a ResizeObserver to watch for changes in the element's size
209
- const resizeObserver = new ResizeObserver(this.setRootPosition.bind(this));
210
- resizeObserver.observe(canvas);
211
+ this.resizeObserver = new ResizeObserver(this.setRootPosition.bind(this));
212
+ this.resizeObserver.observe(canvas);
211
213
 
212
214
  //listen for changes on window
213
215
  window.addEventListener('resize', this.setRootPosition.bind(this));
@@ -259,6 +261,24 @@ export class Inspector {
259
261
  return div;
260
262
  }
261
263
 
264
+ createNodes(node: CoreNode): boolean {
265
+ if (this.root === null) {
266
+ return false;
267
+ }
268
+
269
+ const div = this.root.querySelector(`[id="${node.id}"]`);
270
+ if (div === null && node instanceof CoreTextNode) {
271
+ this.createTextNode(node);
272
+ } else if (div === null && node instanceof CoreNode) {
273
+ this.createNode(node);
274
+ }
275
+
276
+ for (const child of node.children) {
277
+ this.createNodes(child);
278
+ }
279
+ return true;
280
+ }
281
+
262
282
  createNode(node: CoreNode): CoreNode {
263
283
  const div = this.createDiv(node.id, node.props);
264
284
  (div as HTMLElement & { node: CoreNode }).node = node;
@@ -323,6 +343,7 @@ export class Inspector {
323
343
  this.destroyNode(node.id);
324
344
  originalDestroy.call(node);
325
345
  },
346
+ configurable: true,
326
347
  });
327
348
 
328
349
  const originalAnimate = node.animate;
@@ -343,11 +364,24 @@ export class Inspector {
343
364
 
344
365
  return animationController;
345
366
  },
367
+ configurable: true,
346
368
  });
347
369
 
348
370
  return node;
349
371
  }
350
372
 
373
+ public destroy() {
374
+ // Remove DOM observers
375
+ this.mutationObserver.disconnect();
376
+ this.resizeObserver.disconnect();
377
+
378
+ // Remove resize listener
379
+ window.removeEventListener('resize', this.setRootPosition.bind(this));
380
+ if (this.root && this.root.parentNode) {
381
+ this.root.remove();
382
+ }
383
+ }
384
+
351
385
  destroyNode(id: number) {
352
386
  const div = document.getElementById(id.toString());
353
387
  div?.remove();
@@ -475,6 +509,19 @@ export class Inspector {
475
509
  }
476
510
  }
477
511
 
512
+ updateViewport(
513
+ width: number,
514
+ height: number,
515
+ deviceLogicalPixelRatio: number,
516
+ ) {
517
+ this.scaleX = deviceLogicalPixelRatio ?? 1;
518
+ this.scaleY = deviceLogicalPixelRatio ?? 1;
519
+
520
+ this.width = width;
521
+ this.height = height;
522
+ this.setRootPosition();
523
+ }
524
+
478
525
  // simple animation handler
479
526
  animateNode(
480
527
  div: HTMLElement,