@react-three/postprocessing 2.19.1 → 3.0.0-rc.1

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 (270) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +81 -81
  3. package/dist/index.d.ts +1 -38
  4. package/dist/index.js +554 -88
  5. package/dist/index.js.map +1 -1
  6. package/package.json +68 -96
  7. package/src/EffectComposer.test.tsx +126 -0
  8. package/src/EffectComposer.tsx +200 -0
  9. package/src/Selection.tsx +46 -0
  10. package/src/effects/ASCII.tsx +135 -0
  11. package/src/effects/Autofocus.tsx +153 -0
  12. package/src/effects/Bloom.tsx +6 -0
  13. package/src/effects/BrightnessContrast.tsx +4 -0
  14. package/src/effects/ChromaticAberration.tsx +5 -0
  15. package/src/effects/ColorAverage.tsx +15 -0
  16. package/src/effects/ColorDepth.tsx +4 -0
  17. package/src/effects/Depth.tsx +4 -0
  18. package/src/effects/DepthOfField.tsx +89 -0
  19. package/src/effects/DotScreen.tsx +4 -0
  20. package/src/effects/FXAA.tsx +4 -0
  21. package/src/effects/Glitch.tsx +40 -0
  22. package/src/effects/GodRays.tsx +16 -0
  23. package/src/effects/Grid.tsx +21 -0
  24. package/src/effects/HueSaturation.tsx +4 -0
  25. package/src/effects/LUT.tsx +26 -0
  26. package/{dist/effects/LensFlare.js → src/effects/LensFlare.tsx} +611 -556
  27. package/src/effects/N8AO.tsx +81 -0
  28. package/src/effects/Noise.tsx +4 -0
  29. package/src/effects/Outline.tsx +117 -0
  30. package/src/effects/Pixelation.tsx +15 -0
  31. package/{dist/effects/Ramp.js → src/effects/Ramp.tsx} +150 -156
  32. package/src/effects/SMAA.tsx +4 -0
  33. package/src/effects/SSAO.tsx +41 -0
  34. package/src/effects/ScanlineEffect.tsx +7 -0
  35. package/src/effects/SelectiveBloom.tsx +126 -0
  36. package/src/effects/Sepia.tsx +4 -0
  37. package/src/effects/ShockWave.tsx +4 -0
  38. package/src/effects/Texture.tsx +23 -0
  39. package/src/effects/TiltShift.tsx +4 -0
  40. package/{dist/effects/TiltShift2.js → src/effects/TiltShift2.tsx} +90 -98
  41. package/src/effects/ToneMapping.tsx +6 -0
  42. package/src/effects/Vignette.tsx +4 -0
  43. package/{dist/effects/Water.js → src/effects/Water.tsx} +35 -38
  44. package/src/index.ts +40 -0
  45. package/src/util.tsx +55 -0
  46. package/dist/EffectComposer.cjs +0 -137
  47. package/dist/EffectComposer.cjs.map +0 -1
  48. package/dist/EffectComposer.d.ts +0 -27
  49. package/dist/EffectComposer.js +0 -137
  50. package/dist/EffectComposer.js.map +0 -1
  51. package/dist/EffectComposer.test.d.ts +0 -4
  52. package/dist/Selection.cjs +0 -36
  53. package/dist/Selection.cjs.map +0 -1
  54. package/dist/Selection.d.ts +0 -16
  55. package/dist/Selection.js +0 -36
  56. package/dist/Selection.js.map +0 -1
  57. package/dist/compat.cjs +0 -77
  58. package/dist/compat.cjs.map +0 -1
  59. package/dist/compat.js +0 -60
  60. package/dist/compat.js.map +0 -1
  61. package/dist/effects/ASCII.cjs +0 -113
  62. package/dist/effects/ASCII.cjs.map +0 -1
  63. package/dist/effects/ASCII.d.ts +0 -18
  64. package/dist/effects/ASCII.js +0 -113
  65. package/dist/effects/ASCII.js.map +0 -1
  66. package/dist/effects/Autofocus.cjs +0 -126
  67. package/dist/effects/Autofocus.cjs.map +0 -1
  68. package/dist/effects/Autofocus.d.ts +0 -22
  69. package/dist/effects/Autofocus.js +0 -109
  70. package/dist/effects/Autofocus.js.map +0 -1
  71. package/dist/effects/Bloom.cjs +0 -9
  72. package/dist/effects/Bloom.cjs.map +0 -1
  73. package/dist/effects/Bloom.d.ts +0 -6
  74. package/dist/effects/Bloom.js +0 -9
  75. package/dist/effects/Bloom.js.map +0 -1
  76. package/dist/effects/BrightnessContrast.cjs +0 -7
  77. package/dist/effects/BrightnessContrast.cjs.map +0 -1
  78. package/dist/effects/BrightnessContrast.d.ts +0 -10
  79. package/dist/effects/BrightnessContrast.js +0 -7
  80. package/dist/effects/BrightnessContrast.js.map +0 -1
  81. package/dist/effects/ChromaticAberration.cjs +0 -7
  82. package/dist/effects/ChromaticAberration.cjs.map +0 -1
  83. package/dist/effects/ChromaticAberration.d.ts +0 -13
  84. package/dist/effects/ChromaticAberration.js +0 -7
  85. package/dist/effects/ChromaticAberration.js.map +0 -1
  86. package/dist/effects/ColorAverage.cjs +0 -11
  87. package/dist/effects/ColorAverage.cjs.map +0 -1
  88. package/dist/effects/ColorAverage.d.ts +0 -8
  89. package/dist/effects/ColorAverage.js +0 -11
  90. package/dist/effects/ColorAverage.js.map +0 -1
  91. package/dist/effects/ColorDepth.cjs +0 -7
  92. package/dist/effects/ColorDepth.cjs.map +0 -1
  93. package/dist/effects/ColorDepth.d.ts +0 -9
  94. package/dist/effects/ColorDepth.js +0 -7
  95. package/dist/effects/ColorDepth.js.map +0 -1
  96. package/dist/effects/Depth.cjs +0 -7
  97. package/dist/effects/Depth.cjs.map +0 -1
  98. package/dist/effects/Depth.d.ts +0 -9
  99. package/dist/effects/Depth.js +0 -7
  100. package/dist/effects/Depth.js.map +0 -1
  101. package/dist/effects/DepthOfField.cjs +0 -74
  102. package/dist/effects/DepthOfField.cjs.map +0 -1
  103. package/dist/effects/DepthOfField.d.ts +0 -25
  104. package/dist/effects/DepthOfField.js +0 -74
  105. package/dist/effects/DepthOfField.js.map +0 -1
  106. package/dist/effects/DotScreen.cjs +0 -7
  107. package/dist/effects/DotScreen.cjs.map +0 -1
  108. package/dist/effects/DotScreen.d.ts +0 -10
  109. package/dist/effects/DotScreen.js +0 -7
  110. package/dist/effects/DotScreen.js.map +0 -1
  111. package/dist/effects/FXAA.cjs +0 -7
  112. package/dist/effects/FXAA.cjs.map +0 -1
  113. package/dist/effects/FXAA.d.ts +0 -8
  114. package/dist/effects/FXAA.js +0 -7
  115. package/dist/effects/FXAA.js.map +0 -1
  116. package/dist/effects/Glitch.cjs +0 -31
  117. package/dist/effects/Glitch.cjs.map +0 -1
  118. package/dist/effects/Glitch.d.ts +0 -30
  119. package/dist/effects/Glitch.js +0 -31
  120. package/dist/effects/Glitch.js.map +0 -1
  121. package/dist/effects/GodRays.cjs +0 -15
  122. package/dist/effects/GodRays.cjs.map +0 -1
  123. package/dist/effects/GodRays.d.ts +0 -21
  124. package/dist/effects/GodRays.js +0 -15
  125. package/dist/effects/GodRays.js.map +0 -1
  126. package/dist/effects/Grid.cjs +0 -18
  127. package/dist/effects/Grid.cjs.map +0 -1
  128. package/dist/effects/Grid.d.ts +0 -12
  129. package/dist/effects/Grid.js +0 -18
  130. package/dist/effects/Grid.js.map +0 -1
  131. package/dist/effects/HueSaturation.cjs +0 -7
  132. package/dist/effects/HueSaturation.cjs.map +0 -1
  133. package/dist/effects/HueSaturation.d.ts +0 -10
  134. package/dist/effects/HueSaturation.js +0 -7
  135. package/dist/effects/HueSaturation.js.map +0 -1
  136. package/dist/effects/LUT.cjs +0 -20
  137. package/dist/effects/LUT.cjs.map +0 -1
  138. package/dist/effects/LUT.d.ts +0 -9
  139. package/dist/effects/LUT.js +0 -20
  140. package/dist/effects/LUT.js.map +0 -1
  141. package/dist/effects/LensFlare.cjs +0 -573
  142. package/dist/effects/LensFlare.cjs.map +0 -1
  143. package/dist/effects/LensFlare.d.ts +0 -55
  144. package/dist/effects/LensFlare.js.map +0 -1
  145. package/dist/effects/N8AO/BlueNoise.cjs +0 -4
  146. package/dist/effects/N8AO/BlueNoise.cjs.map +0 -1
  147. package/dist/effects/N8AO/BlueNoise.js +0 -5
  148. package/dist/effects/N8AO/BlueNoise.js.map +0 -1
  149. package/dist/effects/N8AO/DepthDownSample.cjs +0 -183
  150. package/dist/effects/N8AO/DepthDownSample.cjs.map +0 -1
  151. package/dist/effects/N8AO/DepthDownSample.js +0 -166
  152. package/dist/effects/N8AO/DepthDownSample.js.map +0 -1
  153. package/dist/effects/N8AO/EffectCompositer.cjs +0 -278
  154. package/dist/effects/N8AO/EffectCompositer.cjs.map +0 -1
  155. package/dist/effects/N8AO/EffectCompositer.js +0 -261
  156. package/dist/effects/N8AO/EffectCompositer.js.map +0 -1
  157. package/dist/effects/N8AO/EffectShader.cjs +0 -236
  158. package/dist/effects/N8AO/EffectShader.cjs.map +0 -1
  159. package/dist/effects/N8AO/EffectShader.js +0 -219
  160. package/dist/effects/N8AO/EffectShader.js.map +0 -1
  161. package/dist/effects/N8AO/FullScreenTriangle.cjs +0 -59
  162. package/dist/effects/N8AO/FullScreenTriangle.cjs.map +0 -1
  163. package/dist/effects/N8AO/FullScreenTriangle.js +0 -42
  164. package/dist/effects/N8AO/FullScreenTriangle.js.map +0 -1
  165. package/dist/effects/N8AO/N8AOPostPass.cjs +0 -502
  166. package/dist/effects/N8AO/N8AOPostPass.cjs.map +0 -1
  167. package/dist/effects/N8AO/N8AOPostPass.js +0 -485
  168. package/dist/effects/N8AO/N8AOPostPass.js.map +0 -1
  169. package/dist/effects/N8AO/PoissionBlur.cjs +0 -186
  170. package/dist/effects/N8AO/PoissionBlur.cjs.map +0 -1
  171. package/dist/effects/N8AO/PoissionBlur.js +0 -169
  172. package/dist/effects/N8AO/PoissionBlur.js.map +0 -1
  173. package/dist/effects/N8AO/index.cjs +0 -60
  174. package/dist/effects/N8AO/index.cjs.map +0 -1
  175. package/dist/effects/N8AO/index.d.ts +0 -18
  176. package/dist/effects/N8AO/index.js +0 -60
  177. package/dist/effects/N8AO/index.js.map +0 -1
  178. package/dist/effects/Noise.cjs +0 -7
  179. package/dist/effects/Noise.cjs.map +0 -1
  180. package/dist/effects/Noise.d.ts +0 -9
  181. package/dist/effects/Noise.js +0 -7
  182. package/dist/effects/Noise.js.map +0 -1
  183. package/dist/effects/Outline.cjs +0 -100
  184. package/dist/effects/Outline.cjs.map +0 -1
  185. package/dist/effects/Outline.d.ts +0 -30
  186. package/dist/effects/Outline.js +0 -100
  187. package/dist/effects/Outline.js.map +0 -1
  188. package/dist/effects/Pixelation.cjs +0 -11
  189. package/dist/effects/Pixelation.cjs.map +0 -1
  190. package/dist/effects/Pixelation.d.ts +0 -6
  191. package/dist/effects/Pixelation.js +0 -11
  192. package/dist/effects/Pixelation.js.map +0 -1
  193. package/dist/effects/Ramp.cjs +0 -156
  194. package/dist/effects/Ramp.cjs.map +0 -1
  195. package/dist/effects/Ramp.d.ts +0 -88
  196. package/dist/effects/Ramp.js.map +0 -1
  197. package/dist/effects/SMAA.cjs +0 -7
  198. package/dist/effects/SMAA.cjs.map +0 -1
  199. package/dist/effects/SMAA.d.ts +0 -10
  200. package/dist/effects/SMAA.js +0 -7
  201. package/dist/effects/SMAA.js.map +0 -1
  202. package/dist/effects/SSAO.cjs +0 -37
  203. package/dist/effects/SSAO.cjs.map +0 -1
  204. package/dist/effects/SSAO.d.ts +0 -30
  205. package/dist/effects/SSAO.js +0 -37
  206. package/dist/effects/SSAO.js.map +0 -1
  207. package/dist/effects/SSR/index.cjs +0 -33
  208. package/dist/effects/SSR/index.cjs.map +0 -1
  209. package/dist/effects/SSR/index.d.ts +0 -55
  210. package/dist/effects/SSR/index.js +0 -33
  211. package/dist/effects/SSR/index.js.map +0 -1
  212. package/dist/effects/SSR/screen-space-reflections.cjs +0 -1699
  213. package/dist/effects/SSR/screen-space-reflections.cjs.map +0 -1
  214. package/dist/effects/SSR/screen-space-reflections.js +0 -1699
  215. package/dist/effects/SSR/screen-space-reflections.js.map +0 -1
  216. package/dist/effects/ScanlineEffect.cjs +0 -7
  217. package/dist/effects/ScanlineEffect.cjs.map +0 -1
  218. package/dist/effects/ScanlineEffect.d.ts +0 -9
  219. package/dist/effects/ScanlineEffect.js +0 -7
  220. package/dist/effects/ScanlineEffect.js.map +0 -1
  221. package/dist/effects/SelectiveBloom.cjs +0 -104
  222. package/dist/effects/SelectiveBloom.cjs.map +0 -1
  223. package/dist/effects/SelectiveBloom.d.ts +0 -20
  224. package/dist/effects/SelectiveBloom.js +0 -104
  225. package/dist/effects/SelectiveBloom.js.map +0 -1
  226. package/dist/effects/Sepia.cjs +0 -7
  227. package/dist/effects/Sepia.cjs.map +0 -1
  228. package/dist/effects/Sepia.d.ts +0 -9
  229. package/dist/effects/Sepia.js +0 -7
  230. package/dist/effects/Sepia.js.map +0 -1
  231. package/dist/effects/ShockWave.cjs +0 -7
  232. package/dist/effects/ShockWave.cjs.map +0 -1
  233. package/dist/effects/ShockWave.d.ts +0 -6
  234. package/dist/effects/ShockWave.js +0 -7
  235. package/dist/effects/ShockWave.js.map +0 -1
  236. package/dist/effects/Texture.cjs +0 -21
  237. package/dist/effects/Texture.cjs.map +0 -1
  238. package/dist/effects/Texture.d.ts +0 -11
  239. package/dist/effects/Texture.js +0 -21
  240. package/dist/effects/Texture.js.map +0 -1
  241. package/dist/effects/TiltShift.cjs +0 -7
  242. package/dist/effects/TiltShift.cjs.map +0 -1
  243. package/dist/effects/TiltShift.d.ts +0 -17
  244. package/dist/effects/TiltShift.js +0 -7
  245. package/dist/effects/TiltShift.js.map +0 -1
  246. package/dist/effects/TiltShift2.cjs +0 -98
  247. package/dist/effects/TiltShift2.cjs.map +0 -1
  248. package/dist/effects/TiltShift2.d.ts +0 -30
  249. package/dist/effects/TiltShift2.js.map +0 -1
  250. package/dist/effects/ToneMapping.cjs +0 -7
  251. package/dist/effects/ToneMapping.cjs.map +0 -1
  252. package/dist/effects/ToneMapping.d.ts +0 -19
  253. package/dist/effects/ToneMapping.js +0 -7
  254. package/dist/effects/ToneMapping.js.map +0 -1
  255. package/dist/effects/Vignette.cjs +0 -7
  256. package/dist/effects/Vignette.cjs.map +0 -1
  257. package/dist/effects/Vignette.d.ts +0 -12
  258. package/dist/effects/Vignette.js +0 -7
  259. package/dist/effects/Vignette.js.map +0 -1
  260. package/dist/effects/Water.cjs +0 -38
  261. package/dist/effects/Water.cjs.map +0 -1
  262. package/dist/effects/Water.d.ts +0 -15
  263. package/dist/effects/Water.js.map +0 -1
  264. package/dist/index.cjs +0 -89
  265. package/dist/index.cjs.map +0 -1
  266. package/dist/util.cjs +0 -69
  267. package/dist/util.cjs.map +0 -1
  268. package/dist/util.d.ts +0 -13
  269. package/dist/util.js +0 -52
  270. package/dist/util.js.map +0 -1
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../src/Selection.tsx","../src/EffectComposer.tsx","../src/util.tsx","../src/effects/DepthOfField.tsx","../src/effects/Autofocus.tsx","../src/effects/LensFlare.tsx","../src/effects/Bloom.tsx","../src/effects/BrightnessContrast.tsx","../src/effects/ChromaticAberration.tsx","../src/effects/ColorAverage.tsx","../src/effects/ColorDepth.tsx","../src/effects/Depth.tsx","../src/effects/DotScreen.tsx","../src/effects/Glitch.tsx","../src/effects/GodRays.tsx","../src/effects/Grid.tsx","../src/effects/HueSaturation.tsx","../src/effects/Noise.tsx","../src/effects/Outline.tsx","../src/effects/Pixelation.tsx","../src/effects/ScanlineEffect.tsx","../src/effects/SelectiveBloom.tsx","../src/effects/Sepia.tsx","../src/effects/SSAO.tsx","../src/effects/SMAA.tsx","../src/effects/FXAA.tsx","../src/effects/Ramp.tsx","../src/effects/Texture.tsx","../src/effects/ToneMapping.tsx","../src/effects/Vignette.tsx","../src/effects/ShockWave.tsx","../src/effects/LUT.tsx","../src/effects/TiltShift.tsx","../src/effects/TiltShift2.tsx","../src/effects/ASCII.tsx","../src/effects/Water.tsx","../src/effects/N8AO.tsx"],"sourcesContent":null,"names":["selectionContext","Selection","children","enabled","selected","select","useState","value","useMemo","Select","props","group","useRef","api","useContext","useEffect","changed","current","o","state","t","e","EffectComposerContext","re","n","effect","Tt","memo","forwardRef","_camera","_scene","resolutionScale","renderPriority","autoClear","depthBuffer","enableNormalPass","stencilBuffer","multisampling","frameBufferType","HalfFloatType","ref","gl","defaultScene","defaultCamera","size","useThree","scene","camera","composer","normalPass","downSamplingPass","effectComposer","EffectComposerImpl","RenderPass","normalPass2","NormalPass","DepthDownsamplingPass","useFrame","_","delta","currentAutoClear","useLayoutEffect","passes","groupInstance","i","child","Effect","effects","isConvolution","next","pass","EffectPass","Pass","currentTonemapping","NoToneMapping","useImperativeHandle","S","F","jsx","I","resolveRef","components","defaults","opacity","Component","key","extend","args","React","blendFunction","useVector2","THREE","DepthOfField","worldFocusDistance","worldFocusRange","focusDistance","focusRange","focalLength","bokehScale","resolutionX","resolutionY","width","height","target","depthTexture","autoFocus","DepthOfFieldEffect","effect2","Vector3","maskPass","MaskFunction","v","Autofocus","followMouse","debug","manual","smoothTime","fref","dofRef","hitpointRef","targetRef","pointer","depthPickingPass","DepthPickingPass","copyPass","CopyPass","hitpoint","ndc","getHit","useCallback","x","y","update","updateTarget","hit","easing","jsxs","Fragment","createPortal","f","c","a","LensFlareShader","LensFlareEffect","glareSize","lensPosition","screenRes","starPoints","flareSize","flareSpeed","flareShape","animated","anamorphic","colorGain","lensDirtTexture","haloScale","secondaryGhosts","aditionalStreaks","ghostScale","starBurst","_renderer","_inputBuffer","deltaTime","time","LensFlareWrapped","Bt","viewport","raycaster","raycasterPos","projectedPosition","uLensPosition","uOpacity","intersects","object","screenRes2","Bloom","BrightnessContrast","Rt","ChromaticAberration","ChromaticAberrationEffect","ColorAverageEffect","ColorDepth","ColorDepthEffect","kt","Depth","DotScreenEffect","active","r","invalidate","delay","duration","strength","chromaticAberrationOffset","GlitchEffect","GlitchMode","GodRays","D","GodRaysEffect","Grid","GridEffect","HueSaturation","Xt","wrapEffect","NoiseEffect","Ht","selection","selectionLayer","patternTexture","edgeStrength","pulseSpeed","visibleEdgeColor","hiddenEdgeColor","kernelSize","blur","xRay","OutlineEffect","l","Pixelation","granularity","PixelationEffect","Scanline","addLight","light","removeLight","SelectiveBloom","lights","inverted","ignoreBackground","luminanceThreshold","luminanceSmoothing","intensity","mipmapBlur","SelectiveBloomEffect","Sepia","SepiaEffect","Jt","SSAO","SSAOEffect","SMAA","SMAAEffect","Yt","FXAA","RampType","RampType2","RampEffect","rampType","rampStart","rampEnd","startColor","endColor","rampBias","rampGain","rampMask","rampInvert","params","RampShader","Uniform","Ramp","to","useLoader","TextureLoader","textureSrc","SRGBColorSpace","RepeatWrapping","TextureEffect","texture","ToneMapping","ro","VignetteEffect","ShockWave","LUT3DEffect","lut","tetrahedralInterpolation","TiltShift","A","nt","TiltShiftEffect","xt","taper","start","end","samples","direction","TiltShiftShader","TiltShift2","gt","ASCIIEffect","font","characters","fontSize","cellSize","color","invert","uniforms","Texture","Color","fragment","charactersTextureUniform","canvas","SIZE","MAX_PER_ROW","CELL","CanvasTexture","NearestFilter","context","char","ASCII","WaterShader","WaterEffectImpl","factor","P","WaterEffect","N8AO","halfRes","screenSpaceRadius","quality","depthAwareUpsampling","aoRadius","aoSamples","denoiseSamples","denoiseRadius","distanceFalloff","renderMode","N8AOPostPass","applyProps","m"],"mappings":"k+CAaa,MAAAA,mBAAiE,EAEvE,SAASC,GAAU,CAAE,SAAAC,EAAU,QAAAC,EAAU,IAA0D,CAClG,KAAA,CAACC,EAAUC,CAAM,EAAIC,EAA2B,CAAE,CAAA,EAClDC,EAAQC,EAAQ,KAAO,CAAE,SAAAJ,EAAU,OAAAC,EAAQ,QAAAF,CAAQ,GAAI,CAACC,EAAUC,EAAQF,CAAO,CAAC,gCAC/D,CAAA,MAASI,EAAAA,SAAeL,CAAAA,CAAAA,CACnD,CAEO,SAASO,GAAO,CAAE,QAAAN,EAAU,GAAO,SAAAD,EAAU,GAAGQ,GAAoB,CACnE,MAAAC,EAAQC,EAAoB,IAAK,EACjCC,EAAMC,EAAWd,CAAgB,EACvC,OAAAe,EAAU,IAAM,CACd,GAAIF,GAAOV,EAAS,CAClB,IAAIa,EAAU,GACd,MAAMC,EAA4B,CAAA,EAKlC,GAJMN,EAAA,QAAQ,SAAUO,GAAM,CAC5BA,EAAE,OAAS,QAAUD,EAAQ,KAAKC,CAAC,EAC/BL,EAAI,SAAS,QAAQK,CAAC,IAAM,KAAcF,EAAA,GAAA,CAC/C,EACGA,EACEH,OAAAA,EAAA,OAAQM,GAAU,CAAC,GAAGA,EAAO,GAAGF,CAAO,CAAC,EACrC,IAAM,CACXJ,EAAI,OAAQM,GAAUA,EAAM,OAAQf,GAAa,CAACa,EAAQ,SAASb,CAAQ,CAAC,CAAC,CAAA,EAIlF,EAAA,CAACD,EAASD,EAAUW,CAAG,CAAC,sBAExB,CAAA,IAAWF,EAAAA,GAAQS,EAAGV,SACpBW,CAAA,CAAAnB,CAGP,CCpBa,MAAAoB,mBAOV,EAAKC,GAkBcC,IACnBC,EAAAA,qBAAyB,EAAAC,aAEkBC,GAC5B,UAAAC,EACd,CACE,CACE,SAAA1B,EACA,OAAQ2B,EACR,MAAOC,EACP,gBAAAC,EACA,QAAA5B,EAAU,GACV,eAAA6B,EAAiB,EACjB,UAAAC,EAAY,GACZ,YAAAC,EACA,iBAAAC,EACA,cAAAC,EACA,cAAAC,EAAgB,EAChB,gBAAAC,EAAkBC,IAEpBC,IACG,CACG,KAAA,CAAE,GAAAC,EAAI,MAAOC,EAAc,OAAQC,EAAe,KAAAC,GAASC,IAC3DC,EAAQhB,GAAUY,EAClBK,EAASlB,GAAWc,EAEpB,CAACK,EAAUC,EAAYC,CAAgB,EAAI1C,EAAQ,IAAM,CAEvD2C,MAAAA,EAAiB,IAAIC,GAAmBX,EAAI,CAChD,YAAAP,EACA,cAAAE,EACA,cAAAC,EACA,gBAAAC,CAAA,CACD,EAGDa,EAAe,QAAQ,IAAIE,GAAWP,EAAOC,CAAM,CAAC,EAGhDG,IAAAA,EAAmB,KACnBD,EAAa,KACjB,OAAId,IACWmB,EAAA,IAAIC,GAAWT,EAAOC,CAAM,EACzCE,EAAW,QAAU,GACrBE,EAAe,QAAQF,CAAU,EAC7BlB,IAAoB,SACtBmB,EAAmB,IAAIM,GAAsB,CAAE,aAAcP,EAAW,QAAS,gBAAAlB,EAAiB,EAClGmB,EAAiB,QAAU,GAC3BC,EAAe,QAAQD,CAAgB,IAIpC,CAACC,EAAgBF,EAAYC,CAAgB,CAAA,EACnD,CACDH,EACAN,EACAP,EACAE,EACAC,EACAC,EACAQ,EACAX,EACAJ,CAAA,CACD,EAEShB,EAAA,IAAMiC,GAAU,QAAQJ,EAAK,MAAOA,EAAK,MAAM,EAAG,CAACI,EAAUJ,CAAI,CAAC,EAC5Ea,EACE,CAACC,EAAGC,IAAU,CACZ,GAAIxD,EAAS,CACX,MAAMyD,EAAmBnB,EAAG,UAC5BA,EAAG,UAAYR,EACXG,GAAiB,CAACH,GAAWQ,EAAG,aAAa,EACjDO,EAAS,OAAOW,CAAK,EACrBlB,EAAG,UAAYmB,EAEnB,EACAzD,EAAU6B,EAAiB,CAAA,EAGvBrB,MAAAA,EAAQC,EAAc,IAAK,EACjCiD,EAAgB,IAAM,CACpB,MAAMC,EAAiB,CAAA,EAGjBC,EAAiBpD,EAAM,QAA+C,MAE5E,GAAIoD,GAAiBf,EAAU,CAC7B,MAAM9C,EAAW6D,EAAc,SAE/B,QAASC,EAAI,EAAGA,EAAI9D,EAAS,OAAQ8D,IAAK,CAClCC,MAAAA,EAAQ/D,EAAS8D,CAAC,EAAE,OAE1B,GAAIC,aAAiBC,EAAQ,CACrBC,MAAAA,EAAoB,CAACF,CAAK,EAE5B,GAAA,CAACG,GAAcH,CAAK,EAAG,CACzB,IAAII,EAAgB,KACZA,MAAAA,EAAOnE,EAAS8D,EAAI,CAAC,GAAG,kBAAmBE,GAC7C,CAAAE,GAAcC,CAAI,GACtBF,EAAQ,KAAKE,CAAI,EACjBL,IAIJ,MAAMM,EAAO,IAAIC,GAAWxB,EAAQ,GAAGoB,CAAO,EAC9CL,EAAO,KAAKQ,CAAI,OACPL,aAAiBO,IAC1BV,EAAO,KAAKG,CAAK,EAIrB,UAAWK,KAAQR,EAAQd,GAAU,QAAQsB,CAAI,EAE7CrB,IAAYA,EAAW,QAAU,IACjCC,IAAkBA,EAAiB,QAAU,IAGnD,MAAO,IAAM,CACX,UAAWoB,KAAQR,EAAQd,GAAU,WAAWsB,CAAI,EAChDrB,IAAYA,EAAW,QAAU,IACjCC,IAAkBA,EAAiB,QAAU,GAAA,CACnD,EACC,CAACF,EAAU9C,EAAU6C,EAAQE,EAAYC,CAAgB,CAAC,EAG7DnC,EAAU,IAAM,CACd,MAAM0D,EAAqBhC,EAAG,YAC9BA,OAAAA,EAAG,YAAciC,GACV,IAAM,CACXjC,EAAG,YAAcgC,CAAA,CACnB,EACC,CAAChC,CAAE,CAAC,EAGP,MAAMtB,EAAQX,EACZ,KAAO,CAAE,SAAAwC,EAAU,WAAAC,EAAY,iBAAAC,EAAkB,gBAAAnB,EAAiB,OAAAgB,EAAQ,MAAAD,IAC1E,CAACE,EAAUC,EAAYC,EAAkBnB,EAAiBgB,EAAQD,CAAK,CAAA,EAIzE6B,OAAAA,GAAoBnC,EAAK,IAAMQ,EAAU,CAACA,CAAQ,CAAC,EAGhD,UAAA4B,EAAAC,EAAAvD,SAAA,CAAA,QAAsCH,SACrC,UAAC2D,EAAAA,QAAM,CAAA,IAAAC,EAAKpE,SAAQT,CAAAA,CAAAA,CAAAA,CAAAA,CAG1B,CACF,CACF,ECjMa8E,EAAkBxC,GAC7B,OAAOA,GAAQ,UAAYA,GAAO,MAAQ,YAAaA,EAAMA,EAAI,QAAUA,EAU7E,IAAIwB,GAAI,EACR,MAAMiB,8BAEkDxD,aACtB,CAAA,gBAAkByD,GAAAA,sBAAyBC,EAAAA,GAAUD,QAAmB,GAAA,CAAA,GAClGE,IAAAA,EAAYH,GAAW,IAAIxD,CAAM,EACrC,GAAI,CAAC2D,EAAW,CACRC,MAAAA,EAAM,+BAA+B5D,EAAO,QAAQuC,OAC1DsB,GAAO,CAAE,CAACD,CAAG,EAAG5D,CAAQ,CAAA,EACbwD,GAAA,IAAIxD,EAAS2D,EAAYC,CAAI,EAGpCtC,MAAAA,EAASF,EAAU1B,GAAUA,EAAM,MAAM,EACzCoE,EAAOC,GAAM,QACjB,IAAM,CAAC,GAAIN,GAAU,MAAQ,CAAK,EAAA,GAAIxE,EAAM,MAAQ,CAAC,CAAE,GAAGwE,EAAU,GAAGxE,CAAO,CAAA,CAAE,EAEhF,CAAC,KAAK,UAAUA,CAAK,CAAC,CAAA,EAItB,OAAA,UAAAoE,EAACM,EAAA,CACC,OAAArC,EACA,0BAAyB0C,EACzB,0BAAyBN,EACxB,GAAGzE,EACJ,KAAA6E,CAAA,CAAA,CAGN,EAEWG,EAAa,CAAChF,EAAgC2E,IAA+B,CAClF9E,MAAAA,EAAQG,EAAM2E,CAAG,EAChBG,OAAAA,GAAM,QAAQ,IACf,OAAOjF,GAAU,SAAiB,IAAIoF,EAAM,QAAQpF,EAAOA,CAAK,EAC3DA,EAAc,IAAIoF,EAAM,QAAQ,GAAIpF,CAA4B,EAC7D,IAAIoF,EAAM,QACrB,CAACpF,CAAK,CAAC,CACZ,ECpCaqF,GAA0C,UAAAhE,EAAAA,SACrD,CACE,cAAA6D,EACA,mBAAAI,EACA,gBAAAC,EACA,cAAAC,EACA,WAAAC,EACA,YAAAC,EACA,WAAAC,EACA,gBAAAnE,EACA,YAAAoE,EACA,YAAAC,EACA,MAAAC,EACA,OAAAC,EACA,OAAAC,EACA,aAAAC,EACA,GAAG9F,CACL,EACA8B,EACA,CACA,KAAM,CAAE,OAAAO,CAAA,EAAWjC,EAAWQ,CAAqB,EAC7CmF,EAAYF,GAAU,KACtB9E,EAASjB,EAAQ,IAAM,CACrBiB,MAAAA,EAAS,IAAIiF,GAAmB3D,EAAQ,CAC5C,cAAA0C,EACA,mBAAAI,EACA,gBAAAC,EACA,cAAAC,EACA,WAAAC,EACA,YAAAC,EACA,WAAAC,EACA,gBAAAnE,EACA,YAAAoE,EACA,YAAAC,EACA,MAAAC,EACA,OAAAC,CAAA,CACD,EAEGG,IAAkBE,EAAA,OAAS,IAAIC,IAE/BJ,GAAc/E,EAAO,gBAAgB+E,EAAa,QAASA,EAAa,OAAiC,EAE7G,MAAMK,EAAYpF,EAAe,SACjCoF,OAAAA,EAAS,aAAeC,GAAa,uBAC9BrF,CAAAA,EACN,CACDsB,EACA0C,EACAI,EACAC,EACAC,EACAC,EACAC,EACAC,EACAnE,EACAoE,EACAC,EACAC,EACAC,EACAG,EACAD,CAAA,CACD,EAEDzF,OAAAA,EAAU,IACD,IAAM,CACXU,EAAO,QAAQ,CAAA,EAEhB,CAACA,CAAM,CAAC,0BAEH,CAAA,GAAW,EAAGf,IAAO8B,EAAAA,SAAkBf,OAAQsF,CAAA,CAAAR,CACzD,CAAC,ECnDYS,GAA4B,UAAApF,EACvC,CACE,CAAE,OAAA2E,EAAS,OAAW,MAAOU,EAAc,GAAO,MAAAC,EAAQ,OAAW,OAAAC,EAAS,GAAO,WAAAC,EAAa,IAAM,GAAG1G,GAC3G2G,IACG,CACGC,MAAAA,EAAS1G,EAA2B,IAAI,EACxC2G,EAAc3G,EAAmB,IAAI,EACrC4G,EAAY5G,EAAmB,IAAI,EAEnCkC,EAAQD,EAAS,CAAC,CAAE,MAAAC,CAAAA,IAAYA,CAAK,EACrC2E,EAAU5E,EAAS,CAAC,CAAE,QAAA4E,CAAAA,IAAcA,CAAO,EAC3C,CAAE,SAAAzE,EAAU,OAAAD,CAAO,EAAIjC,EAAWQ,CAAqB,EAGvD,CAACoG,CAAgB,EAAIpH,EAAS,IAAM,IAAIqH,EAAkB,EAC1D,CAACC,CAAQ,EAAItH,EAAS,IAAM,IAAIuH,EAAU,EAChD9G,EAAU,KACRiC,EAAS,QAAQ0E,CAAgB,EACjC1E,EAAS,QAAQ4E,CAAQ,EAClB,IAAM,CACX5E,EAAS,WAAW0E,CAAgB,EACpC1E,EAAS,WAAW4E,CAAQ,CAAA,GAE7B,CAAC5E,EAAU0E,EAAkBE,CAAQ,CAAC,EAEzC7G,EAAU,IACD,IAAM,CACX2G,EAAiB,QAAQ,EACzBE,EAAS,QAAQ,CAAA,EAElB,CAACF,EAAkBE,CAAQ,CAAC,EAEzB,KAAA,CAACE,CAAQ,EAAIxH,EAAS,IAAM,IAAIqF,EAAM,QAAQ,EAAG,EAAG,CAAC,CAAC,EAEtD,CAACoC,CAAG,EAAIzH,EAAS,IAAM,IAAIqF,EAAM,QAAQ,EAAG,EAAG,CAAC,CAAC,EACjDqC,EAASC,GACb,MAAOC,EAAWC,KAChBJ,EAAI,EAAIG,EACRH,EAAI,EAAII,EACRJ,EAAI,EAAI,MAAML,EAAiB,UAAUK,CAAG,EACxCA,EAAA,EAAIA,EAAI,EAAI,EAAM,EACV,EAAIA,EAAI,EAAI,KACXA,EAAI,UAAUhF,CAAM,EAAI,IAEvC,CAACgF,EAAKL,EAAkB3E,CAAM,CAAA,EAG1BqF,EAASH,GACb,MAAOtE,EAAe0E,EAAe,KAAS,CAExC9B,GAAAA,EACOuB,EAAA,IAAI,GAAIvB,CAAmC,MAC/C,CACC,KAAA,CAAE,EAAA2B,EAAG,EAAAC,CAAM,EAAAlB,EAAcQ,EAAU,CAAE,EAAG,EAAG,EAAG,GAC9Ca,EAAM,MAAMN,EAAOE,EAAGC,CAAC,EACzBG,GAAKR,EAAS,KAAKQ,CAAG,EAIxBD,GAAgBf,EAAO,SAAS,SAC9BF,EAAa,GAAKzD,EAAQ,EAC5B4E,GAAO,MAAMjB,EAAO,QAAQ,OAAQQ,EAAUV,EAAYzD,CAAK,EAExD2D,EAAA,QAAQ,OAAO,KAAKQ,CAAQ,EAGzC,EACA,CAACvB,EAAQuB,EAAUb,EAAae,EAAQZ,EAAYK,CAAO,CAAA,EAGpDhE,EAAA,MAAOC,EAAGC,IAAU,CACtBwD,GACHiB,EAAOzE,CAAK,EAEV4D,EAAY,SACFA,EAAA,QAAQ,SAAS,KAAKO,CAAQ,EAExCN,EAAU,SAAWF,EAAO,SAAS,QACvCE,EAAU,QAAQ,SAAS,KAAKF,EAAO,QAAQ,MAAM,CACvD,CACD,EAGD,MAAMzG,EAAML,EACV,KAAO,CACL,OAAA8G,EACA,SAAAQ,EACA,OAAAM,CAAA,GAEF,CAACN,EAAUM,CAAM,CAAA,EAEnB,OAAAzD,GAAoB0C,EAAM,IAAMxG,EAAK,CAACA,CAAG,CAAC,EAIrC,UAAA2H,EAAAA,EAAAC,CAAA,SAAA,CACGvB,EAAAwB,GAEI,UAAAF,EAAAA,EAAAC,CAAA,SAAA,CAAC,mBAAA,CAAA,IAAKE,EAAKpB,SACT,CAAA,UAAA3C,EAAA,iBAAC,CAAA,KAAe,CAAAxD,EAAO8F,GAAO,EAAA,CAAM,CAAA,EACpC,UAAApC,EAAAA,2BAAyB,UAAA,QAAmB,EAAA,YAAc,GAAA,WAAa,EAAA,CAAA,CAAO,EAChF,EACC,mBAAA,CAAA,IAAKd,EAAKwD,SACT,CAAA,UAAA5C,EAAA,iBAAC,CAAA,KAAe,CAAAxD,EAAO8F,EAAQ,GAAG,EAAA,CAAM,CAAA,EACxC,UAAApC,EAAAA,2BAAyB,UAAA,QAAmB,GAAA,YAAgB,GAAA,WAAa,EAAA,CAAA,CAAO,EAClF,CAAA,EACF,EACAhC,CAAA,EAEF,oBAEH8C,CAAAA,IAAagD,EAAKtB,GAASuB,EAAGnI,OAAeoH,CAAAA,CAAAA,GAChD,CAEJ,CACF,EC5IMgB,GAAkB,CACtB,eAA2B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAiY7B,EA2CO,MAAMC,WAAwB7E,CAAO,CAC1C,YAAY,CACV,cAAAuB,EACA,QAAAtF,EACA,UAAA6I,EACA,aAAAC,EACA,UAAAC,EACA,WAAAC,EACA,UAAAC,EACA,WAAAC,EACA,WAAAC,EACA,SAAAC,EACA,WAAAC,EACA,UAAAC,EACA,gBAAAC,EACA,UAAAC,EACA,gBAAAC,EACA,iBAAAC,EACA,WAAAC,EACA,QAAA3E,EACA,UAAA4E,CAAA,EACyB,CACnB,MAAA,kBAAmBjB,GAAgB,eAAgB,CACvD,cAAArD,EACA,2BAAyC,CACvC,CAAC,UAAW,IAAIE,EAAM,QAAQxF,CAAO,CAAC,EACtC,CAAC,YAAa,IAAIwF,EAAM,QAAQqD,CAAS,CAAC,EAC1C,CAAC,eAAgB,IAAIrD,EAAM,QAAQsD,CAAY,CAAC,EAChD,CAAC,OAAQ,IAAItD,EAAM,QAAQ,CAAC,CAAC,EAC7B,CAAC,YAAa,IAAIA,EAAM,QAAQuD,CAAS,CAAC,EAC1C,CAAC,aAAc,IAAIvD,EAAM,QAAQwD,CAAU,CAAC,EAC5C,CAAC,YAAa,IAAIxD,EAAM,QAAQyD,CAAS,CAAC,EAC1C,CAAC,aAAc,IAAIzD,EAAM,QAAQ0D,CAAU,CAAC,EAC5C,CAAC,aAAc,IAAI1D,EAAM,QAAQ2D,CAAU,CAAC,EAC5C,CAAC,WAAY,IAAI3D,EAAM,QAAQ4D,CAAQ,CAAC,EACxC,CAAC,aAAc,IAAI5D,EAAM,QAAQ6D,CAAU,CAAC,EAC5C,CAAC,YAAa,IAAI7D,EAAM,QAAQ8D,CAAS,CAAC,EAC1C,CAAC,kBAAmB,IAAI9D,EAAM,QAAQ+D,CAAe,CAAC,EACtD,CAAC,YAAa,IAAI/D,EAAM,QAAQgE,CAAS,CAAC,EAC1C,CAAC,kBAAmB,IAAIhE,EAAM,QAAQiE,CAAe,CAAC,EACtD,CAAC,mBAAoB,IAAIjE,EAAM,QAAQkE,CAAgB,CAAC,EACxD,CAAC,aAAc,IAAIlE,EAAM,QAAQmE,CAAU,CAAC,EAC5C,CAAC,YAAa,IAAInE,EAAM,QAAQoE,CAAS,CAAC,EAC1C,CAAC,UAAW,IAAIpE,EAAM,QAAQR,CAAO,CAAC,CAAA,CACvC,CAAA,CACF,CACH,CAEA,OAAO6E,EAAgBC,EAAmBC,EAAmB,CAC3D,MAAMC,EAAO,KAAK,SAAS,IAAI,MAAM,EACjCA,IACFA,EAAK,OAASD,EAElB,CACF,CASA,MAAME,mBAA6DC,KAGjE,WAAAjD,EAAa,IAEb,cAAA3B,EAAgB,GAChB,QAAAtF,EAAU,GACV,UAAA6I,EAAY,GACZ,aAAAC,EAAe,IAAItD,EAAM,QAAQ,IAAK,EAAG,GAAG,EAC5C,UAAAuD,EAAY,IAAIvD,EAAM,QAAQ,EAAG,CAAC,EAClC,WAAAwD,EAAa,EACb,UAAAC,EAAY,IACZ,WAAAC,EAAa,IACb,WAAAC,EAAa,IACb,SAAAC,EAAW,GACX,WAAAC,EAAa,GACb,UAAAC,EAAY,IAAI9D,EAAM,MAAM,GAAI,GAAI,EAAE,EACtC,gBAAA+D,EAAkB,KAClB,UAAAC,EAAY,GACZ,gBAAAC,EAAkB,GAClB,iBAAAC,EAAmB,GACnB,WAAAC,EAAa,EACb,QAAA3E,EAAU,EACV,UAAA4E,EAAY,EACd,IAAsB,CACdO,MAAAA,EAAWzH,EAAS,CAAC,CAAE,SAAAyH,CAAAA,IAAeA,CAAQ,EAC9CC,EAAY1H,EAAS,CAAC,CAAE,UAAA0H,CAAAA,IAAgBA,CAAS,EACjD,CAAE,MAAAzH,EAAO,OAAAC,CAAO,EAAIjC,EAAWQ,CAAqB,EACpD,CAACkJ,CAAY,EAAIlK,EAAS,IAAM,IAAIqF,EAAM,OAAS,EACnD,CAAC8E,CAAiB,EAAInK,EAAS,IAAM,IAAIqF,EAAM,OAAS,EAExDnD,EAAM5B,EAAwB,IAAI,EAE/B6C,OAAAA,EAAA,CAACC,EAAGC,IAAU,CACrB,GAAI,CAACnB,GAAK,QAAS,OACnB,MAAMkI,EAAgBlI,EAAI,QAAQ,SAAS,IAAI,cAAc,EACvDmI,EAAWnI,EAAI,QAAQ,SAAS,IAAI,SAAS,EAC/C,GAAA,CAACkI,GAAiB,CAACC,EAAU,OAEjC,IAAIpE,EAAS,EAEbkE,GAAAA,EAAkB,KAAKxB,CAAY,EAAE,QAAQlG,CAAM,EAC/C0H,EAAkB,EAAI,EAAG,OAEfC,EAAA,MAAM,EAAID,EAAkB,EAC5BC,EAAA,MAAM,EAAID,EAAkB,EAC1CD,EAAa,EAAIC,EAAkB,EACnCD,EAAa,EAAIC,EAAkB,EACzBF,EAAA,cAAcC,EAAczH,CAAM,EAE5C,MAAM6H,GAAaL,EAAU,iBAAiBzH,EAAM,SAAU,EAAI,EAC5D,CAAE,OAAA+H,CAAO,EAAID,GAAW,CAAC,GAAK,CAAA,EAChCC,IACEA,EAAO,UAAU,YAAc,eACxBtE,EAAA,EACAsE,aAAkBlF,EAAM,OAC7BkF,EAAO,SAAS,UAAU,eAAe,MAAQ,IAG1CA,EAAO,SAAS,eAAiBA,EAAO,SAAS,cAAgB,GADjEtE,EAAA,GAIAsE,EAAO,SAAS,cAEzBtE,EAASsE,EAAO,SAAS,WAK/BtC,GAAO,KAAKoC,EAAU,QAASpE,EAAQa,EAAYzD,CAAK,CAAA,CACzD,EAED5C,EAAU,IAAM,CACd,GAAI,CAACyB,GAAK,QAAS,OAEnB,MAAM0G,EAAY1G,EAAI,QAAQ,SAAS,IAAI,WAAW,EAClD0G,IACQ4B,EAAA,MAAM,EAAIR,EAAS,MACnBQ,EAAA,MAAM,EAAIR,EAAS,OAC/B,EACC,CAACA,CAAQ,CAAC,EAGX,UAAAxF,EAACsF,GAAA,CACC,IAAA5H,EACA,cAAAiD,EACA,QAAAtF,EACA,UAAA6I,EACA,aAAAC,EACA,UAAAC,EACA,WAAAC,EACA,UAAAC,EACA,WAAAC,EACA,WAAAC,EACA,SAAAC,EACA,WAAAC,EACA,UAAAC,EACA,gBAAAC,EACA,UAAAC,EACA,gBAAAC,EACA,iBAAAC,EACA,WAAAC,EACA,QAAA3E,EACA,UAAA4E,CAAA,CAAA,CAGN,EC/lBagB,kBAAgD,CAC3D,cAAe,CACjB,CAAC,ECFYC,mBAAwEC,GCCxEC,gBAAiDC,wBCGgC,CAC5F,oBAAkB,EAAA,CAIZ1J,MAAAA,EAASjB,EAAQ,IAAM,IAAI4K,GAAmB3F,CAAa,EAAG,CAACA,CAAa,CAAC,iCAC3E,CAAA,IAAU,EAAAjD,OAAkBf,EAAAA,QAAiB,IAAA,CAAA,CACvD,CAAC,ECXY4J,iBAAwCC,EAAgBC,GCAxDC,mBAA8C,mBCAPC,UCawB7J,EAAAA,SAAAA,CAAAA,OAC1E,EAAE,GAAA8J,GAAAA,CAAAA,EAASC,EAAM,CAGXC,MAAAA,EAAa/I,EAAU1B,GAAUA,EAAM,UAAU,EACjD0K,EAAQnG,EAAWhF,EAAO,OAAO,EACjCoL,EAAWpG,EAAWhF,EAAO,UAAU,EACvCqL,EAAWrG,EAAWhF,EAAO,UAAU,EACvCsL,EAA4BtG,EAAWhF,EAAO,2BAA2B,EACzEe,EAASjB,EACb,IAAM,IAAIyL,GAAa,CAAE,GAAGvL,EAAO,MAAAmL,EAAO,SAAAC,EAAU,SAAAC,EAAU,0BAAAC,EAA2B,EACzF,CAACH,EAAOC,EAAUpL,EAAOqL,EAAUC,CAAyB,CAAA,EAE9D,OAAAnI,EAAgB,IAAM,CACpBpC,EAAO,KAAOiK,EAAShL,EAAM,MAAQwL,GAAW,SAAWA,GAAW,SAC3DN,GAAA,EACV,CAACF,EAAQjK,EAAQmK,EAAYlL,EAAM,IAAI,CAAC,EAC3CK,EAAU,IACD,IAAM,CACXU,EAAO,UAAU,CAAA,EAElB,CAACA,CAAM,CAAC,0BACO,CAAA,MAAAe,OAAUwB,EAAQvC,QAAQ,MAC9C,CAAC,EC7BY0K,GAA0B,UAAAC,EAAA,SAAW,EAAiB1L,EAAqB8B,CAChF,KAAA,CAAE,OAAAO,CAAA,EAAWjC,EAAWQ,CAAqB,EAC7CG,EAASjB,EAAQ,IAAM,IAAI6L,GAActJ,EAAQiC,EAAWtE,EAAM,GAAG,EAAGA,CAAK,EAAG,CAACqC,EAAQrC,CAAK,CAAC,EACrGmD,OAAAA,EAAgB,IAAM,KAAMpC,EAAO,YAAcuD,EAAWtE,EAAM,GAAG,GAAI,CAACe,EAAQf,EAAM,GAAG,CAAC,0BAC1E,CAAA,IAAA8B,EAAAA,OAAkBf,EAAAA,QAAiB,IAAA,CAAA,CACvD,CAAC,ECHY6K,wBAAkC,CAAA,KAAgB,EAAA1J,GAAM,CAAA,EAAS+I,EAAcnJ,CAC1F,MAAMoJ,EAAa/I,EAAU1B,GAAUA,EAAM,UAAU,EACjDM,EAASjB,EAAQ,IAAM,IAAI+L,GAAW7L,CAAK,EAAG,CAACA,CAAK,CAAC,EAC3D,OAAAmD,EAAgB,IAAM,CAChBjB,GAAMnB,EAAO,QAAQmB,EAAK,MAAOA,EAAK,MAAM,EACrCgJ,GACV,EAAA,CAACnK,EAAQmB,EAAMgJ,CAAU,CAAC,0BACrB,CAAA,IAAUpJ,EAAAA,SAAkBf,QAAQ,MAC9C,CAAC,ECjBY+K,mBAA8DC,aCA3BC,EAAAA,GAAAA,CAAAC,kBAA8BC,aCa5BR,EAAA,SAAA,CAE9C,UAAAS,EAAY,CAAC,EACb,eAAAC,EAAiB,GACjB,cAAArH,EACA,eAAAsH,EACA,aAAAC,EACA,WAAAC,EACA,iBAAAC,EACA,gBAAAC,EACA,MAAA9G,EACA,OAAAC,EACA,WAAA8G,EACA,KAAAC,EACA,KAAAC,EACA,GAAG5M,CACL,EACAkB,EACA,CACA,MAAMgK,EAAa/I,EAAU1B,GAAUA,EAAM,UAAU,EACjD,CAAE,MAAA2B,EAAO,OAAAC,CAAO,EAAIjC,EAAWQ,CAAqB,EAEpDG,EAASjB,EACb,IACE,IAAI+M,GAAczK,EAAOC,EAAQ,CAC/B,cAAA0C,EACA,eAAAsH,EACA,aAAAC,EACA,WAAAC,EACA,iBAAAC,EACA,gBAAAC,EACA,MAAA9G,EACA,OAAAC,EACA,WAAA8G,EACA,KAAAC,EACA,KAAAC,EACA,GAAG5M,CAAA,CACJ,EAGH,CACE+E,EACA4H,EACAtK,EACAiK,EACA1G,EACA6G,EACAC,EACAL,EACAE,EACAnK,EACAoK,EACA7G,EACAiH,CACF,CAAA,EAGIzM,EAAMC,EAAWd,CAAgB,EAEvC,OAAAe,EAAU,IAAM,CAGV,GAAA,CAACF,GAAOgM,EACV,OAAApL,EAAO,UAAU,IACf,MAAM,QAAQoL,CAAS,EAAKA,EAAyB,IAAI7H,CAAU,EAAI,CAACA,EAAW6H,CAAS,CAAa,CAAA,EAEhGjB,IACJ,IAAM,CACXnK,EAAO,UAAU,QACNmK,GAAA,GAGd,CAACnK,EAAQoL,EAAWhM,EAAK+K,CAAU,CAAC,EAEvC7K,EAAU,IAAM,CACdU,EAAO,eAAiBqL,EACblB,GACV,EAAA,CAACnK,EAAQmK,EAAYkB,CAAc,CAAC,EAE3BlM,EAAsB,MAAS,EAC3CG,EAAU,IAAM,CACV,GAAAF,GAAOA,EAAI,SACTA,EAAI,UAAU,OACTY,OAAAA,EAAA,UAAU,IAAIZ,EAAI,QAAQ,EACtB+K,IACJ,IAAM,CACXnK,EAAO,UAAU,QACNmK,GAAA,GAIhB,CAAC/K,EAAKY,EAAO,UAAWmK,CAAU,CAAC,EAEtC7K,EAAU,IACD,IAAM,CACXU,EAAO,QAAQ,CAAA,EAEhB,CAACA,CAAM,CAAC,0BAEH,CAAA,IAAU,EAAKG,OAAY4L,CAAA,CAAQ/L,CAC7C,CAAC,EC7GYgM,wBAA2E,CAAA,YACpFC,EAAAA,CAAAA,IACFlL,CAGMf,MAAAA,EAASjB,EAAQ,IAAM,IAAImN,GAAiBD,CAAW,EAAG,CAACA,CAAW,CAAC,iCACrE,CAAA,IAAU,EAAAlL,OAAkBf,EAAAA,QAAiB,IAAA,CAAA,CACvD,CAAC,ECXYmM,kBAAsD,CACjE,cAAe,GACf,QAAS,IACX,CAAC,ECcKC,GAAW,CAACC,EAAiBrM,IAAiCqM,EAAM,OAAO,OAAOrM,EAAO,UAAU,KAAK,EACxGsM,GAAc,CAACD,EAAiBrM,IAAiCqM,EAAM,OAAO,QAAQrM,EAAO,UAAU,KAAK,EAErGuM,GAA4C,UAAApM,EAAAA,SACvD,CACE,UAAAiL,EAAY,CAAC,EACb,eAAAC,EAAiB,GACjB,OAAAmB,EAAS,CAAC,EACV,SAAAC,EAAW,GACX,iBAAAC,EAAmB,GACnB,mBAAAC,EACA,mBAAAC,EACA,UAAAC,EACA,MAAAjI,EACA,OAAAC,EACA,WAAA8G,EACA,WAAAmB,EAEA,GAAG7N,CACL,EACAkB,EACA,CACIqM,EAAO,SAAW,GACpB,QAAQ,KAAK,yCAAyC,EAGxD,MAAMrC,EAAa/I,EAAU1B,GAAUA,EAAM,UAAU,EACjD,CAAE,MAAA2B,EAAO,OAAAC,CAAO,EAAIjC,EAAWQ,CAAqB,EACpDG,EAASjB,EAAQ,IAAM,CAC3B,MAAMiB,EAAS,IAAI+M,GAAqB1L,EAAOC,EAAQ,CACrD,cAAe,EACf,mBAAAqL,EACA,mBAAAC,EACA,UAAAC,EACA,MAAAjI,EACA,OAAAC,EACA,WAAA8G,EACA,WAAAmB,EACA,GAAG7N,CAAA,CACJ,EACDe,OAAAA,EAAO,SAAWyM,EAClBzM,EAAO,iBAAmB0M,EACnB1M,CAAAA,EACN,CACDqB,EACAC,EACAqL,EACAC,EACAC,EACAjI,EACAC,EACA8G,EACAmB,EACAL,EACAC,EACAzN,CAAA,CACD,EAEKG,EAAMC,EAAWd,CAAgB,EAEvC,OAAAe,EAAU,IAAM,CAGV,GAAA,CAACF,GAAOgM,EACV,OAAApL,EAAO,UAAU,IACf,MAAM,QAAQoL,CAAS,EAAKA,EAAyB,IAAI7H,CAAU,EAAI,CAACA,EAAW6H,CAAS,CAAa,CAAA,EAEhGjB,IACJ,IAAM,CACXnK,EAAO,UAAU,QACNmK,GAAA,GAGd,CAACnK,EAAQoL,EAAWhM,EAAK+K,CAAU,CAAC,EAEvC7K,EAAU,IAAM,CACdU,EAAO,UAAU,MAAQqL,EACdlB,GACV,EAAA,CAACnK,EAAQmK,EAAYkB,CAAc,CAAC,EAEvC/L,EAAU,IAAM,CACVkN,GAAAA,GAAUA,EAAO,OAAS,EACrB,OAAAA,EAAA,QAASH,GAAUD,GAAS7I,EAAW8I,CAAK,EAAGrM,CAAM,CAAC,EAClDmK,IACJ,IAAM,CACJqC,EAAA,QAASH,GAAUC,GAAY/I,EAAW8I,CAAK,EAAGrM,CAAM,CAAC,EACrDmK,GAAA,GAGd,CAACnK,EAAQmK,EAAYqC,EAAQnB,CAAc,CAAC,EAE/C/L,EAAU,IAAM,CACV,GAAAF,GAAOA,EAAI,SACTA,EAAI,UAAU,OACTY,OAAAA,EAAA,UAAU,IAAIZ,EAAI,QAAQ,EACtB+K,IACJ,IAAM,CACXnK,EAAO,UAAU,QACNmK,GAAA,GAIhB,CAAC/K,EAAKY,EAAO,UAAWmK,CAAU,CAAC,0BAE9B,CAAA,IAAehK,EAAAA,SAAoBH,QAAQ,MACrD,CAAC,EC1HYgN,iBAAmCC,EAAWC,GCI9CC,UAAuBhN,EAAAA,SAClClB,EAAAA,EAAAA,CAGA,KAAM,CAAE,OAAAqC,EAAQ,WAAAE,EAAY,iBAAAC,EAAkB,gBAAAnB,GAAoBjB,EAAWQ,CAAqB,EAC5FG,EAASjB,EAAyB,IAClCyC,IAAe,MAAQC,IAAqB,MAC9C,QAAQ,MAAM,0EAA0E,EACjF,IAEF,IAAI2L,GAAW9L,EAAQE,GAAc,CAACC,EAAoBD,EAAmB,QAAU,KAAM,CAClG,cAAe,GACf,QAAS,GACT,MAAO,EACP,kBAAmB,EACnB,gBAAiB,EACjB,eAAgB,GAChB,aAAc,GACd,mBAAoB,GACpB,OAAQ,GACR,KAAM,GACN,UAAW,EACX,MAAO,OAEP,kBAAmBC,EAAmBA,EAAiB,QAAU,KACjE,gBAAiBnB,GAAmB,EACpC,qBAAsB,GACtB,GAAGrB,CAAA,CACJ,EAGA,CAACqC,EAAQG,EAAkBD,EAAYlB,CAAe,CAAC,iCAClD,CAAA,IAAU,EAAAS,OAAkBf,EAAAA,QAAiB,IAAA,CAAA,CACvD,CAAC,ECrCYqN,iBAAkCC,EAAUC,GCA5CC,mBAA4C,CCEvD,eAA2B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA6D7B,EAEY,IAAAC,cAAAA,IAAAA,EAAAA,EACVC,UAAA,SACAD,EAAAA,EAAAA,OAAA,CAAA,EAAA,SAAA1N,EAAAA,EACA2N,eAAA,CAAA,mBAHUD,IAAAA,IAAA,CAAA,CAAA,EAML,MAAME,WAAmBlL,CAAO,CACrC,YAAY,CAIV,SAAAmL,EAAW,EAMX,UAAAC,EAAY,CAAC,GAAK,EAAG,EAMrB,QAAAC,EAAU,CAAC,EAAG,CAAC,EAMf,WAAAC,EAAa,CAAC,EAAG,EAAG,EAAG,CAAC,EAMxB,SAAAC,EAAW,CAAC,EAAG,EAAG,EAAG,CAAC,EAMtB,SAAAC,EAAW,GAMX,SAAAC,EAAW,GAMX,SAAAC,EAAW,GAQX,WAAAC,EAAa,GACb,GAAGC,CACL,EAAI,GAAI,CACA,MAAA,aAAcC,GAAW,eAAgB,CAC7C,GAAGD,EACH,2BAAmC,CACjC,CAAC,WAAY,IAAIE,EAAQX,CAAQ,CAAC,EAClC,CAAC,YAAa,IAAIW,EAAQV,CAAS,CAAC,EACpC,CAAC,UAAW,IAAIU,EAAQT,CAAO,CAAC,EAChC,CAAC,aAAc,IAAIS,EAAQR,CAAU,CAAC,EACtC,CAAC,WAAY,IAAIQ,EAAQP,CAAQ,CAAC,EAClC,CAAC,WAAY,IAAIO,EAAQN,CAAQ,CAAC,EAClC,CAAC,WAAY,IAAIM,EAAQL,CAAQ,CAAC,EAClC,CAAC,WAAY,IAAIK,EAAQJ,CAAQ,CAAC,EAClC,CAAC,aAAc,IAAII,EAAQH,CAAU,CAAC,CAAA,CACvC,CAAA,CACF,CACH,CACF,CAEa,MAAAI,iBAAkCb,EAAUc,GC1IlB,UAAA9D,EAAA,SACrC,CAAA,qBAAc,EAAA,QAASjH,EAAAA,EAAAA,GAAUjE,GAAMR,EAAM,CAGvCU,MAAAA,EAAI+O,GAAUC,GAAeC,CAAU,EAC7CxM,EAAgB,IAAM,CACpBzC,EAAE,WAAakP,GACblP,EAAA,MAAQA,EAAE,MAAQmP,CAAA,EACnB,CAACnP,CAAC,CAAC,EACN,MAAMK,EAASjB,EAAQ,IAAM,IAAIgQ,GAAc,CAAE,GAAG9P,EAAO,QAASU,GAAKqP,CAAS,CAAA,EAAG,CAAC/P,EAAOU,EAAGqP,CAAO,CAAC,EACjG,OAAA,UAAA3L,EAAAA,iBAAWtC,EAAAA,OAAkBf,EAAAA,0BAAiC0D,EAAAA,QAAkB,IAAA,CAAA,CACzF,CAAC,ECjBYuL,mBAA0DC,mBCFpBC,GCAtCC,mBAAsD,UCQrBzE,EAAA,SAAA,CAAA,IAAA,EAAA,yBACrC,EAAA,GAAAT,CAAA,EAAAzK,EAA0B,CAG3B,MAAAO,EAASjB,EAAQ,IAAM,IAAIsQ,GAAYC,EAAKrQ,CAAK,EAAG,CAACqQ,EAAKrQ,CAAK,CAAC,EAChEkL,EAAa/I,EAAU1B,GAAUA,EAAM,UAAU,EAEvD,OAAA0C,EAAgB,IAAM,CAChBmN,IAA0BvP,EAAO,yBAA2BuP,GAC5DD,IAAKtP,EAAO,IAAMsP,GACXnF,KACV,CAACnK,EAAQmK,EAAYmF,EAAKC,CAAwB,CAAC,0BAE9C,CAAA,IAAUxO,EAAAA,SAAkBf,QAAQ,MAC9C,CAAC,ECtBYwP,GAAuC,UAAAC,EAAAC,GAAAC,CAAAA,cAAkC,CAAA,CAAA,EAAAC,GCC9D,CACtB,eAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAyDlB,EAEO,MAAMD,WAAwBlN,CAAO,CAC1C,YAAY,CACV,cAAAuB,EAAgB,GAChB,KAAA4H,EAAO,IACP,MAAAiE,EAAQ,GACR,MAAAC,EAAQ,CAAC,GAAK,CAAG,EACjB,IAAAC,EAAM,CAAC,GAAK,CAAG,EACf,QAAAC,EAAU,GACV,UAAAC,EAAY,CAAC,EAAG,CAAC,CACnB,EAAI,GAAI,CACA,MAAA,kBAAmBC,GAAgB,eAAgB,CACvD,cAAAlM,EACA,WAAY,EACZ,2BAAsD,CACpD,CAAC,OAAQ,IAAIuK,EAAQ3C,CAAI,CAAC,EAC1B,CAAC,QAAS,IAAI2C,EAAQsB,CAAK,CAAC,EAC5B,CAAC,QAAS,IAAItB,EAAQuB,CAAK,CAAC,EAC5B,CAAC,MAAO,IAAIvB,EAAQwB,CAAG,CAAC,EACxB,CAAC,UAAW,IAAIxB,EAAQyB,CAAO,CAAC,EAChC,CAAC,YAAa,IAAIzB,EAAQ0B,CAAS,CAAC,CAAA,CACrC,CAAA,CACF,CACH,CACF,CAEO,MAAME,GAAwC,eAAAR,CAAAA,cAAkC,EAAA,CAAA,EAAAS,GClFtE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkDjB,MAAMC,WAAoB5N,CAAO,CAC/B,YAAY,CACV,KAAA6N,EAAO,QACP,WAAAC,EAAa,uBACb,SAAAC,EAAW,GACX,SAAAC,EAAW,GACX,MAAAC,EAAQ,UACR,OAAAC,EAAS,EACX,EAAuB,GAAI,CACnBC,MAAAA,oBAAoC,CACxC,CAAC,cAAe,IAAIrC,EAAQ,IAAIsC,EAAS,CAAC,EAC1C,CAAC,YAAa,IAAItC,EAAQkC,CAAQ,CAAC,EACnC,CAAC,mBAAoB,IAAIlC,EAAQgC,EAAW,MAAM,CAAC,EACnD,CAAC,SAAU,IAAIhC,EAAQ,IAAIuC,GAAMJ,CAAK,CAAC,CAAC,EACxC,CAAC,UAAW,IAAInC,EAAQoC,CAAM,CAAC,CAAA,CAChC,EAED,MAAM,cAAeI,GAAU,CAAE,SAAAH,CAAU,CAAA,EAE3C,MAAMI,EAA2B,KAAK,SAAS,IAAI,aAAa,EAE5DA,IACFA,EAAyB,MAAQ,KAAK,wBAAwBT,EAAYD,EAAME,CAAQ,EAE5F,CAGO,wBAAwBD,EAAoBD,EAAcE,EAA2B,CACpFS,MAAAA,EAAS,SAAS,cAAc,QAAQ,EACxCC,EAAO,KACPC,EAAc,GACdC,EAAOF,EAAOC,EAEbF,EAAA,MAAQA,EAAO,OAASC,EACzB,MAAAlC,EAAU,IAAIqC,GAAcJ,EAAQ,OAAWnC,EAAgBA,EAAgBwC,GAAeA,EAAa,EAC3GC,EAAUN,EAAO,WAAW,IAAI,EAEtC,GAAI,CAACM,EACG,MAAA,IAAI,MAAM,uBAAuB,EAGzCA,EAAQ,UAAU,EAAG,EAAGL,EAAMA,CAAI,EAC1BK,EAAA,KAAO,GAAGf,OAAcF,IAChCiB,EAAQ,UAAY,SACpBA,EAAQ,aAAe,SACvBA,EAAQ,UAAY,OAEpB,QAAShP,EAAI,EAAGA,EAAIgO,EAAW,OAAQhO,IAAK,CACpCiP,MAAAA,EAAOjB,EAAWhO,CAAC,EACnBkE,EAAIlE,EAAI4O,EACRzK,EAAI,KAAK,MAAMnE,EAAI4O,CAAW,EAC5BI,EAAA,SAASC,EAAM/K,EAAI2K,EAAOA,EAAO,EAAG1K,EAAI0K,EAAOA,EAAO,CAAC,EAGjEpC,OAAAA,EAAQ,YAAc,GACfA,CACT,CACF,CAEO,MAAMyC,GAAwB,UAAAtR,EACnC,CACE,CACE,KAAAmQ,EAAO,QACP,WAAAC,EAAa,uBACb,SAAAC,EAAW,GACX,SAAAC,EAAW,GACX,MAAAC,EAAQ,UACR,OAAAC,EAAS,IAEX/K,IACG,CACH,MAAM5F,EAASjB,EACb,IAAM,IAAIsR,GAAY,CAAE,WAAAE,EAAY,KAAAD,EAAM,SAAAE,EAAU,SAAAC,EAAU,MAAAC,EAAO,OAAAC,EAAQ,EAC7E,CAACJ,EAAYC,EAAUC,EAAUC,EAAOC,EAAQL,CAAI,CAAA,iCAE9C,CAAA,MAAe1K,OAAMuB,CAAA,CAAQnH,CACvC,CACF,EClIM0R,GAAc,CAClB,eAA2B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAe7B,EAEO,MAAMC,WAAwBlP,CAAO,CAC1C,YAAY,CAAE,cAAAuB,EAAgB,GAAA,OAAA4N,EAAA,MAA+B,CACrD,MAAA,cAAeF,GAAY,eAAgB,CAC/C,cAAA1N,EACA,WAAY,EACZ,SAAc,UAAA,IAAA,IAAA,CAAA,CAAA,SAAoD,IAAA6N,EAAAlS,CAAI4O,CAAQqD,CAAAA,CAAM,CAAG,CACxF,CACH,CACF,CAEa,MAAAE,kBAA0D,CACrE,cAAe,EACjB,CAAC,ECXYC,GAAuB,UAAA5R,EAClC,CACE,CACE,QAAA6R,EACA,kBAAAC,EACA,QAAAC,EACA,qBAAAC,EAAuB,GACvB,SAAAC,EAAW,EACX,UAAAC,EAAY,GACZ,eAAAC,EAAiB,EACjB,cAAAC,EAAgB,GAChB,gBAAAC,EAAkB,EAClB,UAAA3F,EAAY,EACZ,MAAA6D,EACA,WAAA+B,EAAa,GAEf1R,IACG,CACH,KAAM,CAAE,OAAAO,EAAQ,MAAAD,CAAM,EAAID,EAAS,EAC7BpB,EAASjB,EAAQ,IAAM,IAAI2T,GAAarR,EAAOC,CAAM,EAAG,CAACA,EAAQD,CAAK,CAAC,EAG7E,OAAAe,EAAgB,IAAM,CACpBuQ,GAAW3S,EAAO,cAAe,CAC/B,MAAA0Q,EACA,SAAA0B,EACA,gBAAAI,EACA,UAAA3F,EACA,UAAAwF,EACA,eAAAC,EACA,cAAAC,EACA,kBAAAN,EACA,WAAAQ,EACA,QAAAT,EACA,qBAAAG,CAAA,CACD,CAAA,EACA,CACDF,EACAvB,EACA0B,EACAI,EACA3F,EACAwF,EACAC,EACAC,EACAE,EACAT,EACAG,EACAnS,CAAA,CACD,EAEDoC,EAAgB,IAAM,CAChB8P,GAAgBlS,EAAA,eAAekS,EAAQ,OAAO,CAAC,EAAE,cAAgBA,EAAQ,MAAM,CAAC,CAAC,CAAA,EACpF,CAAClS,EAAQkS,CAAO,CAAC,0BAEZ,CAAA,IAAUxL,EAAA3F,OAAU6R,CAAA,CAAQ5S,CACtC,CACF"}
package/package.json CHANGED
@@ -1,96 +1,68 @@
1
- {
2
- "name": "@react-three/postprocessing",
3
- "version": "2.19.1",
4
- "description": "postprocessing wrapper for React and @react-three/fiber",
5
- "keywords": [
6
- "postprocessing",
7
- "react",
8
- "three",
9
- "@react-three/fiber",
10
- "webgl",
11
- "3d"
12
- ],
13
- "license": "MIT",
14
- "type": "module",
15
- "main": "./dist/index.cjs",
16
- "module": "./dist/index.js",
17
- "exports": {
18
- "types": "./dist/index.d.ts",
19
- "require": "./dist/index.cjs",
20
- "import": "./dist/index.js"
21
- },
22
- "types": "./dist/index.d.ts",
23
- "sideEffects": false,
24
- "files": [
25
- "dist"
26
- ],
27
- "repository": {
28
- "type": "git",
29
- "url": "git+https://github.com/pmndrs/react-postprocessing.git"
30
- },
31
- "lint-staged": {
32
- "*.{js,jsx,ts,tsx}": [
33
- "eslint --fix"
34
- ]
35
- },
36
- "scripts": {
37
- "prebuild": "rimraf dist",
38
- "build": "vite build && tsc --emitDeclarationOnly",
39
- "prepare": "yarn build",
40
- "eslint": "eslint . --fix --ext=js,ts,jsx,tsx",
41
- "eslint:ci": "eslint . --ext=js,ts,jsx,tsx",
42
- "test": "vitest run",
43
- "typecheck": "tsc --noEmit false --strict --jsx react",
44
- "release": "semantic-release",
45
- "storybook": "storybook dev -p 6006",
46
- "build-storybook": "storybook build"
47
- },
48
- "dependencies": {
49
- "buffer": "^6.0.3",
50
- "maath": "^0.6.0",
51
- "n8ao": "^1.6.6",
52
- "postprocessing": "^6.32.1",
53
- "three-stdlib": "^2.23.4"
54
- },
55
- "devDependencies": {
56
- "@react-three/drei": "^9.68.2",
57
- "@react-three/fiber": "^8.13.0",
58
- "@storybook/addon-essentials": "^7.0.10",
59
- "@storybook/addon-interactions": "^7.0.10",
60
- "@storybook/addon-links": "^7.0.10",
61
- "@storybook/blocks": "^7.0.10",
62
- "@storybook/react": "^7.0.10",
63
- "@storybook/react-vite": "^7.0.11",
64
- "@storybook/testing-library": "^0.0.14-next.2",
65
- "@types/react": "^18.2.0",
66
- "@types/react-dom": "^18.2.1",
67
- "@types/three": "^0.150.2",
68
- "@typescript-eslint/eslint-plugin": "^5.59.1",
69
- "@typescript-eslint/parser": "^5.59.1",
70
- "eslint": "^8.39.0",
71
- "eslint-config-prettier": "^8.8.0",
72
- "eslint-import-resolver-alias": "^1.1.2",
73
- "eslint-plugin-import": "^2.27.5",
74
- "eslint-plugin-prettier": "^4.2.1",
75
- "eslint-plugin-react": "^7.32.2",
76
- "eslint-plugin-react-hooks": "^4.6.0",
77
- "eslint-plugin-storybook": "^0.6.12",
78
- "husky": "^8.0.3",
79
- "lint-staged": "^13.2.2",
80
- "prettier": "^2.8.8",
81
- "react": "^18.2.0",
82
- "react-dom": "^18.2.0",
83
- "rimraf": "^5.0.0",
84
- "semantic-release": "^21.0.2",
85
- "storybook": "^7.0.10",
86
- "three": "^0.151.3",
87
- "typescript": "^5.0.4",
88
- "vite": "^4.3.5",
89
- "vitest": "^2.1.8"
90
- },
91
- "peerDependencies": {
92
- "@react-three/fiber": "^8.0",
93
- "react": "^18.0",
94
- "three": ">= 0.138.0"
95
- }
96
- }
1
+ {
2
+ "name": "@react-three/postprocessing",
3
+ "version": "3.0.0-rc.1",
4
+ "description": "postprocessing wrapper for React and @react-three/fiber",
5
+ "keywords": [
6
+ "postprocessing",
7
+ "react",
8
+ "three",
9
+ "@react-three/fiber",
10
+ "webgl",
11
+ "3d"
12
+ ],
13
+ "license": "MIT",
14
+ "files": [
15
+ "dist/*",
16
+ "src/*"
17
+ ],
18
+ "type": "module",
19
+ "main": "./dist/index.js",
20
+ "exports": "./dist/index.js",
21
+ "sideEffects": false,
22
+ "repository": {
23
+ "type": "git",
24
+ "url": "git+https://github.com/pmndrs/react-postprocessing.git"
25
+ },
26
+ "scripts": {
27
+ "build": "vite build",
28
+ "eslint": "eslint . --fix --ext=js,ts,jsx,tsx",
29
+ "eslint:ci": "eslint . --ext=js,ts,jsx,tsx",
30
+ "test": "vitest run",
31
+ "typecheck": "tsc",
32
+ "release": "semantic-release"
33
+ },
34
+ "dependencies": {
35
+ "maath": "^0.6.0",
36
+ "n8ao": "^1.9.4",
37
+ "postprocessing": "^6.36.6"
38
+ },
39
+ "devDependencies": {
40
+ "@react-three/fiber": "9.0.0-rc.5",
41
+ "@types/node": "^22.10.7",
42
+ "@types/react": "^19.0.2",
43
+ "@types/react-dom": "^19.0.2",
44
+ "@types/three": "^0.156.0",
45
+ "@typescript-eslint/eslint-plugin": "^5.59.1",
46
+ "@typescript-eslint/parser": "^5.59.1",
47
+ "eslint": "^8.39.0",
48
+ "eslint-config-prettier": "^8.8.0",
49
+ "eslint-import-resolver-alias": "^1.1.2",
50
+ "eslint-plugin-import": "^2.27.5",
51
+ "eslint-plugin-prettier": "^4.2.1",
52
+ "eslint-plugin-react": "^7.32.2",
53
+ "eslint-plugin-react-hooks": "^4.6.0",
54
+ "prettier": "^2.8.8",
55
+ "react": "^19.0.0",
56
+ "react-dom": "^19.0.0",
57
+ "semantic-release": "^21.0.2",
58
+ "three": "^0.156.0",
59
+ "typescript": "^5.0.4",
60
+ "vite": "^4.3.5",
61
+ "vitest": "^2.1.8"
62
+ },
63
+ "peerDependencies": {
64
+ "@react-three/fiber": "9.0.0-rc.5",
65
+ "react": "^19.0",
66
+ "three": ">= 0.156.0"
67
+ }
68
+ }
@@ -0,0 +1,126 @@
1
+ import * as React from 'react'
2
+ import * as THREE from 'three'
3
+ import { vi, describe, it, expect } from 'vitest'
4
+ import { extend, createRoot, act } from '@react-three/fiber'
5
+ import { EffectComposer } from './EffectComposer'
6
+ import { EffectComposer as EffectComposerImpl, RenderPass, Pass, Effect, EffectPass } from 'postprocessing'
7
+
8
+ // Let React know that we'll be testing effectful components
9
+ declare global {
10
+ var IS_REACT_ACT_ENVIRONMENT: boolean
11
+ }
12
+ global.IS_REACT_ACT_ENVIRONMENT = true
13
+
14
+ // Create virtual R3F root for testing
15
+ extend(THREE as any)
16
+ const root = createRoot({
17
+ style: {} as CSSStyleDeclaration,
18
+ addEventListener: (() => {}) as any,
19
+ removeEventListener: (() => {}) as any,
20
+ width: 1280,
21
+ height: 800,
22
+ clientWidth: 1280,
23
+ clientHeight: 800,
24
+ getContext: (() =>
25
+ new Proxy(
26
+ {},
27
+ {
28
+ get(_target, prop) {
29
+ switch (prop) {
30
+ case 'getParameter':
31
+ return () => 'WebGL 2' // GL_VERSION
32
+ case 'getExtension':
33
+ return () => ({}) // EXT_blend_minmax
34
+ case 'getContextAttributes':
35
+ return () => ({ alpha: true })
36
+ case 'getShaderPrecisionFormat':
37
+ return () => ({ rangeMin: 1, rangeMax: 1, precision: 1 })
38
+ default:
39
+ return () => {}
40
+ }
41
+ },
42
+ }
43
+ )) as any,
44
+ } satisfies Partial<HTMLCanvasElement> as HTMLCanvasElement)
45
+ root.configure({ frameloop: 'never' })
46
+
47
+ const EFFECT_SHADER = 'mainImage() {}'
48
+
49
+ describe('EffectComposer', () => {
50
+ it('should merge effects together', async () => {
51
+ const composerRef = React.createRef<EffectComposerImpl>()
52
+
53
+ const effectA = new Effect('A', EFFECT_SHADER)
54
+ const effectB = new Effect('B', EFFECT_SHADER)
55
+ const effectC = new Effect('C', EFFECT_SHADER)
56
+ const passA = new Pass()
57
+ const passB = new Pass()
58
+
59
+ // Forward order
60
+ await act(async () =>
61
+ root.render(
62
+ <EffectComposer ref={composerRef}>
63
+ {/* EffectPass(effectA, effectB) */}
64
+ <primitive object={effectA} />
65
+ <primitive object={effectB} />
66
+ {/* PassA */}
67
+ <primitive object={passA} />
68
+ {/* EffectPass(effectC) */}
69
+ <primitive object={effectC} />
70
+ {/* PassB */}
71
+ <primitive object={passB} />
72
+ </EffectComposer>
73
+ )
74
+ )
75
+ expect(composerRef.current!.passes.map((p) => p.constructor)).toStrictEqual([
76
+ RenderPass,
77
+ EffectPass,
78
+ Pass,
79
+ EffectPass,
80
+ Pass,
81
+ ])
82
+ // @ts-expect-error
83
+ expect((composerRef.current!.passes[1] as EffectPass).effects).toStrictEqual([effectA, effectB])
84
+ expect(composerRef.current!.passes[2]).toBe(passA)
85
+ // @ts-expect-error
86
+ expect((composerRef.current!.passes[3] as EffectPass).effects).toStrictEqual([effectC])
87
+ expect(composerRef.current!.passes[4]).toBe(passB)
88
+
89
+ // NOTE: instance children ordering is unstable until R3F v9, so we remount from scratch
90
+ await act(async () => root.render(null))
91
+
92
+ // Reverse order
93
+ await act(async () =>
94
+ root.render(
95
+ <EffectComposer ref={composerRef}>
96
+ {/* PassB */}
97
+ <primitive object={passB} />
98
+ {/* EffectPass(effectC) */}
99
+ <primitive object={effectC} />
100
+ {/* PassA */}
101
+ <primitive object={passA} />
102
+ {/* EffectPass(effectB, effectA) */}
103
+ <primitive object={effectB} />
104
+ <primitive object={effectA} />
105
+ </EffectComposer>
106
+ )
107
+ )
108
+ expect(composerRef.current!.passes.map((p) => p.constructor)).toStrictEqual([
109
+ RenderPass,
110
+ Pass,
111
+ EffectPass,
112
+ Pass,
113
+ EffectPass,
114
+ ])
115
+ expect(composerRef.current!.passes[1]).toBe(passB)
116
+ // @ts-expect-error
117
+ expect((composerRef.current!.passes[2] as EffectPass).effects).toStrictEqual([effectC])
118
+ expect(composerRef.current!.passes[3]).toBe(passA)
119
+ // @ts-expect-error
120
+ expect((composerRef.current!.passes[4] as EffectPass).effects).toStrictEqual([effectB, effectA])
121
+ })
122
+
123
+ it.skip('should split convolution effects', async () => {
124
+ await act(async () => root.render(null))
125
+ })
126
+ })
@@ -0,0 +1,200 @@
1
+ import type { TextureDataType, Group, Camera, Scene } from 'three'
2
+ import { HalfFloatType, NoToneMapping } from 'three'
3
+ import {
4
+ type JSX,
5
+ memo,
6
+ forwardRef,
7
+ useMemo,
8
+ useEffect,
9
+ useLayoutEffect,
10
+ createContext,
11
+ useRef,
12
+ useImperativeHandle,
13
+ } from 'react'
14
+ import { useThree, useFrame, type Instance } from '@react-three/fiber'
15
+ import {
16
+ EffectComposer as EffectComposerImpl,
17
+ RenderPass,
18
+ EffectPass,
19
+ NormalPass,
20
+ DepthDownsamplingPass,
21
+ Effect,
22
+ Pass,
23
+ EffectAttribute,
24
+ } from 'postprocessing'
25
+
26
+ export const EffectComposerContext = /* @__PURE__ */ createContext<{
27
+ composer: EffectComposerImpl
28
+ normalPass: NormalPass | null
29
+ downSamplingPass: DepthDownsamplingPass | null
30
+ camera: Camera
31
+ scene: Scene
32
+ resolutionScale?: number
33
+ }>(null!)
34
+
35
+ export type EffectComposerProps = {
36
+ enabled?: boolean
37
+ children: JSX.Element | JSX.Element[]
38
+ depthBuffer?: boolean
39
+ /** Only used for SSGI currently, leave it disabled for everything else unless it's needed */
40
+ enableNormalPass?: boolean
41
+ stencilBuffer?: boolean
42
+ autoClear?: boolean
43
+ resolutionScale?: number
44
+ multisampling?: number
45
+ frameBufferType?: TextureDataType
46
+ renderPriority?: number
47
+ camera?: Camera
48
+ scene?: Scene
49
+ }
50
+
51
+ const isConvolution = (effect: Effect): boolean =>
52
+ (effect.getAttributes() & EffectAttribute.CONVOLUTION) === EffectAttribute.CONVOLUTION
53
+
54
+ export const EffectComposer = /* @__PURE__ */ memo(
55
+ /* @__PURE__ */ forwardRef<EffectComposerImpl, EffectComposerProps>(
56
+ (
57
+ {
58
+ children,
59
+ camera: _camera,
60
+ scene: _scene,
61
+ resolutionScale,
62
+ enabled = true,
63
+ renderPriority = 1,
64
+ autoClear = true,
65
+ depthBuffer,
66
+ enableNormalPass,
67
+ stencilBuffer,
68
+ multisampling = 8,
69
+ frameBufferType = HalfFloatType,
70
+ },
71
+ ref
72
+ ) => {
73
+ const { gl, scene: defaultScene, camera: defaultCamera, size } = useThree()
74
+ const scene = _scene || defaultScene
75
+ const camera = _camera || defaultCamera
76
+
77
+ const [composer, normalPass, downSamplingPass] = useMemo(() => {
78
+ // Initialize composer
79
+ const effectComposer = new EffectComposerImpl(gl, {
80
+ depthBuffer,
81
+ stencilBuffer,
82
+ multisampling,
83
+ frameBufferType,
84
+ })
85
+
86
+ // Add render pass
87
+ effectComposer.addPass(new RenderPass(scene, camera))
88
+
89
+ // Create normal pass
90
+ let downSamplingPass = null
91
+ let normalPass = null
92
+ if (enableNormalPass) {
93
+ normalPass = new NormalPass(scene, camera)
94
+ normalPass.enabled = false
95
+ effectComposer.addPass(normalPass)
96
+ if (resolutionScale !== undefined) {
97
+ downSamplingPass = new DepthDownsamplingPass({ normalBuffer: normalPass.texture, resolutionScale })
98
+ downSamplingPass.enabled = false
99
+ effectComposer.addPass(downSamplingPass)
100
+ }
101
+ }
102
+
103
+ return [effectComposer, normalPass, downSamplingPass]
104
+ }, [
105
+ camera,
106
+ gl,
107
+ depthBuffer,
108
+ stencilBuffer,
109
+ multisampling,
110
+ frameBufferType,
111
+ scene,
112
+ enableNormalPass,
113
+ resolutionScale,
114
+ ])
115
+
116
+ useEffect(() => composer?.setSize(size.width, size.height), [composer, size])
117
+ useFrame(
118
+ (_, delta) => {
119
+ if (enabled) {
120
+ const currentAutoClear = gl.autoClear
121
+ gl.autoClear = autoClear
122
+ if (stencilBuffer && !autoClear) gl.clearStencil()
123
+ composer.render(delta)
124
+ gl.autoClear = currentAutoClear
125
+ }
126
+ },
127
+ enabled ? renderPriority : 0
128
+ )
129
+
130
+ const group = useRef<Group>(null!)
131
+ useLayoutEffect(() => {
132
+ const passes: Pass[] = []
133
+
134
+ // TODO: rewrite all of this with R3F v9
135
+ const groupInstance = (group.current as Group & { __r3f: Instance<Group> }).__r3f
136
+
137
+ if (groupInstance && composer) {
138
+ const children = groupInstance.children
139
+
140
+ for (let i = 0; i < children.length; i++) {
141
+ const child = children[i].object
142
+
143
+ if (child instanceof Effect) {
144
+ const effects: Effect[] = [child]
145
+
146
+ if (!isConvolution(child)) {
147
+ let next: unknown = null
148
+ while ((next = children[i + 1]?.object) instanceof Effect) {
149
+ if (isConvolution(next)) break
150
+ effects.push(next)
151
+ i++
152
+ }
153
+ }
154
+
155
+ const pass = new EffectPass(camera, ...effects)
156
+ passes.push(pass)
157
+ } else if (child instanceof Pass) {
158
+ passes.push(child)
159
+ }
160
+ }
161
+
162
+ for (const pass of passes) composer?.addPass(pass)
163
+
164
+ if (normalPass) normalPass.enabled = true
165
+ if (downSamplingPass) downSamplingPass.enabled = true
166
+ }
167
+
168
+ return () => {
169
+ for (const pass of passes) composer?.removePass(pass)
170
+ if (normalPass) normalPass.enabled = false
171
+ if (downSamplingPass) downSamplingPass.enabled = false
172
+ }
173
+ }, [composer, children, camera, normalPass, downSamplingPass])
174
+
175
+ // Disable tone mapping because threejs disallows tonemapping on render targets
176
+ useEffect(() => {
177
+ const currentTonemapping = gl.toneMapping
178
+ gl.toneMapping = NoToneMapping
179
+ return () => {
180
+ gl.toneMapping = currentTonemapping
181
+ }
182
+ }, [gl])
183
+
184
+ // Memoize state, otherwise it would trigger all consumers on every render
185
+ const state = useMemo(
186
+ () => ({ composer, normalPass, downSamplingPass, resolutionScale, camera, scene }),
187
+ [composer, normalPass, downSamplingPass, resolutionScale, camera, scene]
188
+ )
189
+
190
+ // Expose the composer
191
+ useImperativeHandle(ref, () => composer, [composer])
192
+
193
+ return (
194
+ <EffectComposerContext.Provider value={state}>
195
+ <group ref={group}>{children}</group>
196
+ </EffectComposerContext.Provider>
197
+ )
198
+ }
199
+ )
200
+ )
@@ -0,0 +1,46 @@
1
+ import * as THREE from 'three'
2
+ import React, { createContext, useState, useContext, useEffect, useRef, useMemo } from 'react'
3
+ import { type ThreeElements } from '@react-three/fiber'
4
+
5
+ export type Api = {
6
+ selected: THREE.Object3D[]
7
+ select: React.Dispatch<React.SetStateAction<THREE.Object3D[]>>
8
+ enabled: boolean
9
+ }
10
+ export type SelectApi = Omit<ThreeElements['group'], 'ref'> & {
11
+ enabled?: boolean
12
+ }
13
+
14
+ export const selectionContext = /* @__PURE__ */ createContext<Api | null>(null)
15
+
16
+ export function Selection({ children, enabled = true }: { enabled?: boolean; children: React.ReactNode }) {
17
+ const [selected, select] = useState<THREE.Object3D[]>([])
18
+ const value = useMemo(() => ({ selected, select, enabled }), [selected, select, enabled])
19
+ return <selectionContext.Provider value={value}>{children}</selectionContext.Provider>
20
+ }
21
+
22
+ export function Select({ enabled = false, children, ...props }: SelectApi) {
23
+ const group = useRef<THREE.Group>(null!)
24
+ const api = useContext(selectionContext)
25
+ useEffect(() => {
26
+ if (api && enabled) {
27
+ let changed = false
28
+ const current: THREE.Object3D[] = []
29
+ group.current.traverse((o) => {
30
+ o.type === 'Mesh' && current.push(o)
31
+ if (api.selected.indexOf(o) === -1) changed = true
32
+ })
33
+ if (changed) {
34
+ api.select((state) => [...state, ...current])
35
+ return () => {
36
+ api.select((state) => state.filter((selected) => !current.includes(selected)))
37
+ }
38
+ }
39
+ }
40
+ }, [enabled, children, api])
41
+ return (
42
+ <group ref={group} {...props}>
43
+ {children}
44
+ </group>
45
+ )
46
+ }