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