55 minutes ago
engine

v2.24.0

New Features

  • Introduce CameraFrameEffect and convert the vignette and grading effects by @mvaligursky in #9666
  • Add SMAA anti-aliasing as an opt-in CameraFrame effect by @mvaligursky in #9747
  • Add auto exposure as an opt-in CameraFrame effect by @mvaligursky in #9757
  • Add a lens flare effect to CameraFrame by @mvaligursky in #9734
  • Add temporal upscaling to the TAA of CameraFrame by @mvaligursky in #9739
  • Add a channel mixer to the CameraFrame color grading by @mvaligursky in #9939
  • Add DynamicSkyEffect, a camera frame effect rendering a dynamic sky by @mvaligursky in #9765
  • Add haze to DynamicSkyEffect by @mvaligursky in #9897
  • Add an Editor script for the DynamicSkyEffect by @mvaligursky in #9859
  • Add Sky#enabled and let the sky be hidden per camera by @mvaligursky in #9760
  • Make the CameraFrameEffect pass hooks public by @mvaligursky in #9841
  • Add frame passes which execute after a camera renders by @mvaligursky in #9707
  • Add onBefore and onAfter callbacks to all frame passes by @mvaligursky in #9788
  • Make the frame pass classes public by @mvaligursky in #9822
  • Make RenderPassForward and CameraComponent#framePasses public by @mvaligursky in #9839
  • Add ComputePass, which dispatches computes at a position in the frame by @mvaligursky in #9710
  • Add XR view selection and before/after callbacks to ComputePass by @mvaligursky in #9722
  • Add Compute#setupDispatchThreads to dispatch for a number of threads by @mvaligursky in #9733
  • Add scene depth and color map access to compute shaders by @mvaligursky in #9680
  • Add per-camera scene depth and color map handles by @mvaligursky in #9667
  • Add the size of the scene map to its handle by @mvaligursky in #9844
  • Add planar reflections to StandardMaterial by @mvaligursky in #9902
  • Add a Gaussian mipmap filter, and smoother planar reflections by @mvaligursky in #9932
  • Add AgX and AgX Punchy tonemapping by @mvaligursky in #9874
  • Support the KHR_materials_diffuse_transmission glTF extension by @willeastcott in #9558
  • Decode EXT_meshopt_compression and KHR_meshopt_compression glTF buffer views by @willeastcott in #9738
  • Add clipping planes to cameras, mesh instances and render components by @willeastcott in #9755
  • Add shadowBounds to fit the shadow of a directional light to a box by @mvaligursky in #9791
  • Add RoundedBoxGeometry by @mvaligursky in #9849
  • Render to a layer of a 2D texture array by @mvaligursky in #9689
  • Create and upload volume textures on WebGPU by @mvaligursky in #9695
  • Read and copy the depth slices of volume textures by @mvaligursky in #9696
  • Render to the depth slices of volume textures by @mvaligursky in #9697
  • Add SOG v3 loading and over-unity opacity rendering by @slimbuck in #9873
  • Load SPZ version 3 files, enabling SPZ based LCC2 scenes by @mvaligursky in #9980
  • Load XGRIDS LCC2 gsplat scenes by @mvaligursky in #9885
  • Add SH band 4 support for PLY gaussian splats by @mvaligursky in #9796
  • Add VoxelOccupancy and a gaussian splat particle blast example by @mvaligursky in #9907
  • Add camera, light, shape and icon gizmos with snapping handles by @kpal81xd in #9809
  • Add BoundingBoxGizmo to outline a selection's bounds with corner brackets by @kpal81xd in #9804
  • Add gizmo transform readout and Blender-style rotate angle sector by @kpal81xd in #9801
  • Add Grid extra and rebuild the Grid script on it by @kpal81xd in #9808
  • Add letterSpacing to text elements by @mvaligursky in #9728
  • Load TexturePacker and Aseprite sprite sheets as texture atlases by @willeastcott in #9923
  • Add per-button mouse mapping and ground pan to CameraControls by @mvaligursky in #9944
  • Add an optional screen size to CameraComponent worldToScreen and screenToWorld by @mvaligursky in #9911

Changes

  • Hold the light mask and all uv sets as shader define flags by @mvaligursky in #9659
  • Remove the legacy LIT_OLD_AMBIENT combine and LIT_DIFFUSE_MAP by @mvaligursky in #9681
  • Deprecate the legacy post effects by @mvaligursky in #9905
  • Rename inconsistent public API names behind deprecated aliases by @willeastcott in #9937
  • Let a Script base class declare a null scriptName to stay unregistered by @mvaligursky in #9860
  • Use setupDispatchThreads in the gsplat compute passes and the compute examples by @mvaligursky in #9735
  • Filter distant waves in the water script by @mvaligursky in #9762
  • Publish the debug bundles without inline sourcemaps by @willeastcott in #9882

CameraFrame Effects

  • Convert sharpening, fringing, color enhance and color LUT to effects by @mvaligursky in #9679
  • Convert bloom to an effect owning its passes and add high quality bloom by @mvaligursky in #9700
  • Convert SSAO to an effect and provide the scene depth to effects by @mvaligursky in #9702
  • Convert depth of field to a CameraFrame effect by @mvaligursky in #9718
  • Convert volumetric fog to a CameraFrame effect by @mvaligursky in #9720
  • Convert TAA to a CameraFrame effect at a new resolve stage by @mvaligursky in #9741
  • Configure CameraFrame effects when the camera frame is updated by @mvaligursky in #9686
  • Add the postOpaque stage and scene color grab to CameraFrame effects by @mvaligursky in #9731
  • Provide the scene depth to effects running after the opaque geometry by @mvaligursky in #9732
  • Hand CameraFrame effects the time of the frame by @mvaligursky in #9761
  • Let CameraFrame effect scripts select their debug views by @mvaligursky in #9742
  • Move each CameraFrame effect into its own folder under src/extras/effects by @mvaligursky in #9736
  • Move the SMAA and volumetric fog render passes to their own files by @mvaligursky in #9828
  • Improve TAA blending on bright edges and under camera motion by @mvaligursky in #9744
  • Fix the TAA history drifting with the jitter and losing precision by @mvaligursky in #9737
  • Default the auto exposure metering to the 10-90% band by @mvaligursky in #9764
  • Replace DynamicSkyEffect clouds and cloudTechnique with cloudType by @mvaligursky in #9772
  • Let other materials and the CPU evaluate the DynamicSkyEffect sky by @mvaligursky in #9889
  • Scale a LensFlare by the intensity of its light by @mvaligursky in #9773
  • Fade the lens flare occlusion with the application time by @mvaligursky in #9858
  • Apply the CameraFrame fringing before the sharpening by @mvaligursky in #9855
  • Destroy the bloom render target when FramePassBloom is destroyed while disabled by @mvaligursky in #9774

Gaussian Splatting

  • Stream gsplat LOD levels coarsest first across the whole view by @mvaligursky in #9694
  • Choose streamed gsplat LOD by walking a node hierarchy by @mvaligursky in #9883
  • Fall back to CPU sorting when gsplats exceed GPU storage limits by @mvaligursky in #9854
  • Stop allocating the gsplat order buffer when sorting on the GPU by @slimbuck in #9763
  • Space gsplat sort keys by log distance so stray far splats keep near precision by @slimbuck in #9899
  • Cull splats faded out by modifySplatColor before the GPU sort by @mvaligursky in #9962
  • Apply gsplat anti-aliasing per splat, detected from the file by @mvaligursky in #9921
  • Add GSplatParams#antiAliasFilterSize by @mvaligursky in #9928
  • Default GSplatParams.antiAliasFilterSize to 0.1 by @mvaligursky in #9964
  • Use the 3DGS 0.3 px² low-pass filter for gaussian splats by @mvaligursky in #9916
  • Lower the default gsplat minContribution from 3 to 2 by @mvaligursky in #9927
  • Support any number of typed blind fields in SOG v3 by @mvaligursky in #9960
  • Read true gaussian splat opacity from the PLY opacity_linear property by @slimbuck in #9972
  • Read Postshot's real anti-aliasing PLY comment by @slimbuck in #9971
  • Document the gsplat resource classes and make their aabb read-only by @mvaligursky in #9917
  • Distinct gsplat LOD debug colors and billions LOD falloff by @mvaligursky in #9673
  • Rebuild gsplat work buffer render targets for runtime-added streams by @mvaligursky in #9876
  • Fix GSplatBoxShaderEffect edge tint left behind after the sweep by @mvaligursky in #9758

Frame Graph & Render Passes

  • Skip a disabled frame pass together with its before and after passes by @mvaligursky in #9776
  • Do not merge a frame pass which does not execute with its neighbour by @mvaligursky in #9784
  • Run camera before-passes and render events for hand-built passes by @mvaligursky in #9780
  • Keep the before-passes added to a RenderPassForward by @mvaligursky in #9781
  • Render a RenderPassForward with a single camera by @mvaligursky in #9783
  • CameraFrame and clustered lighting manage only their own passes by @mvaligursky in #9786
  • Document frame pass ownership and flag destroyed pass reuse by @mvaligursky in #9787
  • Remove the dead cubemap mipmap skip from the frame graph by @mvaligursky in #9777
  • Rename FrameGraph addRenderPass and renderPasses to addPass and passes by @mvaligursky in #9835
  • Add RenderPass#resizeSource and copy the resize options of init by @mvaligursky in #9830
  • Add RenderPassShaderQuad#numInstances by @mvaligursky in #9832
  • Set render pass clears and stores through the setters by @mvaligursky in #9829
  • Resolve render pass uniforms once instead of every frame by @mvaligursky in #9833
  • Reuse quad render passes in per-frame engine rendering by @mvaligursky in #9827
  • Draw drawQuadWithShader with a RenderPassShaderQuad by @mvaligursky in #9825

Lighting & Shadows

  • Use each camera's own cascade split distances for directional shadows by @mvaligursky in #9831
  • Share the VSM depth warp exponents between the shadow chunks by @mvaligursky in #9866
  • Shadow the volumetric fog correctly with VSM shadow maps by @mvaligursky in #9865
  • Fix area light clear coat specular using the base layer's LTC matrix by @mvaligursky in #9973
  • Fix clear coat strength being ignored with area lights by @mvaligursky in #9975

Materials

  • Do not tone map the minimal passes of the standard material by @mvaligursky in #9645
  • Let the front end of a LitMaterial provide the dispersion by @mvaligursky in #9682
  • Declare the dynamic refraction resources in the lit shader by @mvaligursky in #9691
  • Give material copies the textures that load after they are copied by @mvaligursky in #9717
  • Fix duplicate standard material shader in depth and shadow passes by @mvaligursky in #9778
  • Compile iridescence thickness maps on WebGL2, and fix WebGPU iridescence colors by @willeastcott in #9752
  • Correct the inverted sheen roughness by @willeastcott in #9836
  • Default a missing glTF sheen color factor to black by @willeastcott in #9852
  • Honour the clearcoat and sheen gloss invert flags in the glTF exporter by @willeastcott in #9837

Textures & Render Targets

  • Support compressed textures not aligned to the block size on WebGPU by @mvaligursky in #9708
  • Fix WebGPU upload of compressed mip levels that are not a multiple of the block size by @mvaligursky in #9701
  • Fix the size of compressed volume textures by @mvaligursky in #9706
  • Sample only the base level for non-mipmap texture filters on WebGPU by @mvaligursky in #9709
  • Update the mip count when Texture.setSource changes the size by @mvaligursky in #9821
  • Render to a single face of a cubemap depth buffer on WebGPU by @mvaligursky in #9665

Gizmos

  • Fix gizmo picking, stuck drags, scale snapping, parentless local translate and ViewCube colorNeg by @kpal81xd in #9799
  • Harden gizmos: shared layers, layer setter, enabled state, theme hover, multi-touch, arc mesh leak, uniform plane scaling and picking order by @kpal81xd in #9800
  • Keep the gizmo readout generic and let each gizmo place it by @kpal81xd in #9803
  • Gizmo fixes for editor integration: disabled components, centered icons and flat boxes by @kpal81xd in #9817
  • Gizmo fixes for far icons, picking, frustum fill, flat box corners, lines and handle redraws by @kpal81xd in #9818

XR

  • Render directional shadows once for all views in WebGPU XR by @mvaligursky in #9698
  • Clear the WebGPU XR projection layer's depth to the far plane by @slimbuck in #9748
  • XrNavigation and XrControllers fixes found on Apple Vision Pro by @slimbuck in #9750
  • Recover the WebGPU XR projection layer when its texture can no longer be acquired by @slimbuck in #9878
  • Skip a screen's touch in XrControllers, which has no model to draw by @slimbuck in #9881

Performance

  • Resolve the picker's meshInstanceId scope id once, not per draw by @mvaligursky in #9657
  • Sort opaque draw calls and shadow casters with a radix sort by @mvaligursky in #9662
  • Remove per-draw WebGPU error scopes in debug builds by @mvaligursky in #9725
  • Always apply the metalness constant, so metalness never selects a shader by @mvaligursky in #9945
  • Apply occludeDirect with a uniform, so it never selects a shader by @mvaligursky in #9946
  • Apply twoSidedLighting with a uniform, so it never selects a shader by @mvaligursky in #9947
  • Stop compiling StandardMaterial shader variants for neutral values by @mvaligursky in #9977
  • Invalidate StandardMaterial shaders only when a value changes the shader by @mvaligursky in #9978
  • Speed up compilation of clustered area light shaders by @mvaligursky in #9974

Profiling & Debugging

  • Display cubemaps in TextureRenderer as a cross of their faces by @mvaligursky in #9664
  • Add compute dispatch and compute pass counters to the stats and MiniStats by @mvaligursky in #9740
  • Report buffer operations needing a usage the buffer was not created with by @mvaligursky in #9746
  • Report which frame the GPU profiler timings belong to by @mvaligursky in #9838
  • Keep GPU pass timings apart, and add scripts for profiling to the inspector example by @mvaligursky in #9842

Fixes

  • Keep MiniStats sized to the canvas when it resizes without a resizecanvas event by @slimbuck in #9661
  • Skip the MiniStats draw when it has nothing to render by @mvaligursky in #9672
  • Keep the canvas resolution when its client size is zero by @mvaligursky in #9671
  • Fire devicerestorefailed when WebGPU device recovery fails by @mvaligursky in #9678
  • Announce apps to the devtools hook from every build by @mvaligursky in #9646
  • Keep the Node worker_threads require out of bundled worker code by @mvaligursky in #9656
  • Do not fire tween events that have no name by @mvaligursky in #9650
  • Accept the alignment array and cookie asset options in Entity#addComponent by @mvaligursky in #9683
  • Grab the scene color on the null device without WebGL calls by @mvaligursky in #9684
  • Dispatch each Compute instance at most once per frame by @mvaligursky in #9690
  • Issue radix sort workgroup atomics from every invocation by @MotivaCG in #9756
  • Correct ComputeRadixSort scan growth and destructiveKeys switching by @mvaligursky in #9759
  • Delete WebGL vertex array objects with their vertex buffers by @mvaligursky in #9726
  • Delete cached WebGL vertex array objects with their vertex buffers by @mvaligursky in #9727
  • Destroy old batches when BatchManager.generate() is given no ids by @mvaligursky in #9730
  • Preserve event listeners during nested dispatch by @MokiMeow in #9723
  • Report a failed loadFromUrl again when its URL is requested again by @slimbuck in #9751
  • End a MultiTouchSource touch that leaves without an up or a cancel by @slimbuck in #9749
  • Warn about unregistered render containers only when preload starts by @mvaligursky in #9771
  • Keep a disabled render or model component out of its batch group by @willeastcott in #9779
  • Release held keys when the window loses focus by @kpal81xd in #9811
  • Fix WebGPU creation for cross-document canvases by @GibsDev in #9814
  • Destroy the WebGPU indirect buffers when the device is destroyed by @mvaligursky in #9823
  • Fix math.smoothstep and smootherstep when min is greater than max by @zzoraemon043 in #9798
  • Support the HTML-in-Canvas API names shipping in Chrome 157 by @mvaligursky in #9824
  • Draw nothing for zero instances on WebGL, matching WebGPU by @mvaligursky in #9834
  • Stop passing the graphics device as BoxGeometry options for the infinite sky by @mvaligursky in #9846
  • Destroy the application at once while the graphics context is lost by @mvaligursky in #9862
  • Skip parsing a GLB or PLY that finishes downloading after the application is destroyed by @mvaligursky in #9864
  • Keep another application's registry entry when destroying one with the same canvas id by @mvaligursky in #9869
  • Read the right mesh instance matrices on Firefox on Windows by @mvaligursky in #9870
  • Default a new sprite component's type to SPRITETYPE_SIMPLE when none is given by @willeastcott in #9890
  • Convert colors with the exact sRGB transfer function by @willeastcott in #9892
  • Report rays starting inside a box when a hit point is requested by @mmporong in #9915
  • Return the exit point for rays starting inside a BoundingSphere by @mvaligursky in #9930
  • Stop applying the anim state speed twice to exit time and progress by @mvaligursky in #9931
  • Ignore exit times on anim transitions out of START and END by @mvaligursky in #9935
  • Enable scene color map on both BlurredPlanarReflection cameras by @mvaligursky in #9951

Examples

  • Add a welcome demo as the default example by @mvaligursky in #9914
  • Add an integrations category to the examples, with a Spine physics example by @mvaligursky in #9721
  • Add standalone RenderPass and RenderPassShaderQuad examples by @mvaligursky in #9775
  • Add a sky rendering test example by @mvaligursky in #9903
  • Add a gaussian splatting black hole example by @mvaligursky in #9929
  • Add a glyph rain gaussian splat shader effect and example by @mvaligursky in #9982
  • Add a villa sales demo on a gaussian splat capture by @mvaligursky in #9965
  • Add a car showcase configurator example by @mvaligursky in #9938
  • Add a Mars 3D Tiles example using 3DTilesRendererJS by @mvaligursky in #9942
  • Add a Helsinki 3D Tiles example streaming the city's photogrammetry model by @mvaligursky in #9948
  • Add an impact effects particle example by @mvaligursky in #9958
  • Rebuild the area lights example with a modelled room and controls by @mvaligursky in #9894
  • Rebuild the reflection box example in the area lights room by @mvaligursky in #9895
  • Rebuild the post-processing example in the area lights room with every CameraFrame effect by @mvaligursky in #9896
  • Rebuild the clustered area lights example as floating lights above a metallic floor by @mvaligursky in #9898
  • Rebuild the dynamic batching example as a kinetic sculpture by @mvaligursky in #9901
  • Rebuild the render to texture example in the area lights room by @mvaligursky in #9900
  • Redesign the video texture example by @mvaligursky in #9913
  • Redesign the tween example by @mvaligursky in #9918
  • Redesign the area picker example by @mvaligursky in #9919
  • Redesign four of the compute examples by @mvaligursky in #9926
  • Restyle the mesh particles example by @mvaligursky in #9956
  • Reskin the mesh-deformation example by @mvaligursky in #9967
  • Reskin the snow example by @mvaligursky in #9969
  • Reskin the light-physical-units example by @mvaligursky in #9970
  • Reskin the dithered transparency example and decorrelate dither between meshes by @mvaligursky in #9981
  • Use Gaussian scene color mipmaps in the transmission-roughness example by @mvaligursky in #9968
  • Update the Spineboy example to Spine 4.3 by @mvaligursky in #9713
  • Update the Spine 4.3 plugin to the latest playcanvas-spine release by @mvaligursky in #9716 #9719
  • Compress the car showcase assets, and drop its unused shadow code by @mvaligursky in #9953
  • Declare the shader chunk API version of the car showcase sweeps by @mvaligursky in #9954
  • Share one shader across the car-showcase paints by @mvaligursky in #9976
  • Reconvert the SOG v3 logo with the merged splat-transform writer by @mvaligursky in #9979
  • Show the raw blind fields in the blind-data example by @mvaligursky in #9963
  • Remove the legacy Gaussian splatting picking example by @mvaligursky in #9966
  • Remove unused scifi-platform.glb example asset by @mvaligursky in #9949
  • Fix examples applying settings before the initial values are set by @mvaligursky in #9640
  • Apply settings once the depth of field data is set by @mvaligursky in #9685
  • Declare the msaa-depth-fog resolved depth as unfilterable by @mvaligursky in #9668
  • Destroy the material of each debris crate in the entity inspector example by @mvaligursky in #9692
  • Draw the lines of the compute histogram example every frame by @mvaligursky in #9711
  • Stop orthographic example views clipping at the camera near plane by @kpal81xd in #9840
  • Preview the shot camera view in the editor example while it is selected by @kpal81xd in #9884
  • Default the shape gizmo example to the capsule by @kpal81xd in #9847
  • Migrate the remaining examples from orbitCamera to CameraControls by @kpal81xd in #9843
  • Work around stuck mouse buttons in the particle blast example by @mvaligursky in #9909
  • Remove the Function.prototype.call override from the examples by @mvaligursky in #9910

Examples Browser

  • Move each example into its own folder, with its thumbnails by @mvaligursky in #9886
  • Move CameraFrame examples to a camera-frame category by @mvaligursky in #9676
  • Move render target examples into the render-targets category by @mvaligursky in #9693
  • Move light and shadow examples to lights-and-shadows by @mvaligursky in #9792
  • Move the grid example to the debug category by @mvaligursky in #9950
  • Move seven examples to the graphics-advanced category by @mvaligursky in #9952
  • Move the particle system examples to a particles category by @mvaligursky in #9955
  • Split Gaussian splatting examples into a new gaussian-splatting-fx category by @mvaligursky in #9959
  • Highlight controls panel section headers like the sidebar categories by @mvaligursky in #9699
  • Show the start of the example's category when opening the examples browser by @mvaligursky in #9922
  • Show imported scripts as read-only code editor tabs by @mvaligursky in #9934
  • Show the code editor download as an icon, with quicker tooltips by @mvaligursky in #9936
  • Type check the examples and resolve multi-file example imports by @kpal81xd in #9812
  • Fail CI when an example is missing a thumbnail by @mvaligursky in #9908
  • Resolve the inspector's engine peer to the linked engine by @mvaligursky in #9641
  • Rename the inspector example and let it profile from the start by @mvaligursky in #9856
  • Update @playcanvas/inspector to 0.2.0 by @mvaligursky in #9642
  • Update @playcanvas/inspector to 0.3.0 by @mvaligursky in #9766
  • Update the examples to @playcanvas/inspector 0.5.0 by @mvaligursky in #9957

Documentation & Types

  • Correct types reported by RuntimeTypeInspector by @mvaligursky in #9643
  • Make createScript types inherit the static members of ScriptType by @mvaligursky in #9644
  • Declare LitMaterial#dirLightMap, read by its shader options by @mvaligursky in #9652
  • Widen JSDoc types to the values the engine accepts by @mvaligursky in #9653
  • Clarify that AppBase#timeScale does not pause scripts by @willeastcott in #9807
  • Make CameraFrame#createRenderPass internal by @mvaligursky in #9845
  • Describe the DynamicSkyEffect in XR by @mvaligursky in #9857
  • Describe the ACES tonemapping fits and the screen space units of the camera conversions by @mvaligursky in #9872
  • Describe releasing the WebGL context after AppBase#destroy by @mvaligursky in #9912
  • Document the resource handlers that AppBase apps register by @mvaligursky in #9920
  • Use American spelling across the engine, scripts, tests and examples by @willeastcott in #9940

Engine Dependencies

  • Update dependency sharp to v0.35.5 [security] in #9687
  • Update dependency vite to v8.3.3 [security] in #9805
  • Update dependency node to v26 in #9850

Contributors

  • @GibsDev
  • @kpal81xd
  • @mmporong
  • @MokiMeow
  • @MotivaCG
  • @mvaligursky
  • @slimbuck
  • @willeastcott
  • @zzoraemon043

New Contributors

  • @MokiMeow made their first contribution in #9723
  • @GibsDev made their first contribution in #9814
  • @zzoraemon043 made their first contribution in #9798
  • @mmporong made their first contribution in #9915

Full Changelog: https://github.com/playcanvas/engine/compare/v2.23.3...v2.24.0

1 hours ago
rrweb

rrdom-nodejs@2.2.2

Patch Changes

  • Updated dependencies []:
    • rrdom@2.2.2
    • @rrweb/types@2.2.2
1 hours ago
rrweb

rrweb-player@2.2.2

Patch Changes

  • Updated dependencies [756765f]:
    • @rrweb/packer@2.2.2
    • @rrweb/replay@2.2.2
1 hours ago
rrweb

rrdom@2.2.2

Patch Changes

  • Updated dependencies []:
    • rrweb-snapshot@2.2.2
1 hours ago
rrweb

rrweb@2.2.2

Patch Changes

  • Updated dependencies []:
    • rrweb-snapshot@2.2.2
    • rrdom@2.2.2
    • @rrweb/types@2.2.2
    • @rrweb/utils@2.2.2
1 hours ago
rrweb

rrvideo@2.2.2

Patch Changes

  • Updated dependencies []:
    • rrweb-player@2.2.2