@roomle/web-sdk 3.9.0-alpha.1 → 3.9.0-alpha.2

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 (109) hide show
  1. package/lib/ConfiguratorKernel.wasm +0 -0
  2. package/lib/{GLTFExporter-BqjC9LhS.mjs → GLTFExporter-yfYOtLdk.mjs} +2 -2
  3. package/lib/{GLTFExporter-BqjC9LhS.mjs.map → GLTFExporter-yfYOtLdk.mjs.map} +1 -1
  4. package/lib/RoomleCore.js +3 -3
  5. package/lib/RoomleCore.wasm +0 -0
  6. package/lib/RoomleToolsCore.wasm +0 -0
  7. package/lib/{USDZExporter-qUD2VgwK.mjs → USDZExporter-DFJQYX8l.mjs} +2 -2
  8. package/lib/{USDZExporter-qUD2VgwK.mjs.map → USDZExporter-DFJQYX8l.mjs.map} +1 -1
  9. package/lib/{api-ByHTYrQ_.mjs → api-s0Yey2rD.mjs} +12 -12
  10. package/lib/api-s0Yey2rD.mjs.map +1 -0
  11. package/lib/asset-loader.worker-A7nEeQB4.mjs.map +1 -1
  12. package/lib/{banana-for-scale-DiBCpVNM.mjs → banana-for-scale-CFY_5rk1.mjs} +4 -4
  13. package/lib/{banana-for-scale-DiBCpVNM.mjs.map → banana-for-scale-CFY_5rk1.mjs.map} +1 -1
  14. package/lib/budgeteer.sw-CQWYbQSc.mjs.map +1 -1
  15. package/lib/{common-utils-AB4Lnet3.mjs → common-utils-L3DF6Ey5.mjs} +2 -2
  16. package/lib/{common-utils-AB4Lnet3.mjs.map → common-utils-L3DF6Ey5.mjs.map} +1 -1
  17. package/lib/{component-dimensioning-LUnZnpqG.mjs → component-dimensioning-DmcHgmpq.mjs} +44 -38
  18. package/lib/component-dimensioning-DmcHgmpq.mjs.map +1 -0
  19. package/lib/{component-raycast-helper-Bl0mWPcj.mjs → component-raycast-helper-cJxdYLXm.mjs} +28 -28
  20. package/lib/{component-raycast-helper-Bl0mWPcj.mjs.map → component-raycast-helper-cJxdYLXm.mjs.map} +1 -1
  21. package/lib/configurator-CC0uDa2i.mjs +2 -0
  22. package/lib/configurator-CxsFgHxg.mjs +45 -0
  23. package/lib/{configurator-Cf6J4eOF.mjs.map → configurator-CxsFgHxg.mjs.map} +1 -1
  24. package/lib/{continuous-drawing-helper-BlRy7u2t.mjs → continuous-drawing-helper-DEmx54k_.mjs} +3 -3
  25. package/lib/{continuous-drawing-helper-BlRy7u2t.mjs.map → continuous-drawing-helper-DEmx54k_.mjs.map} +1 -1
  26. package/lib/{decorate-Bck1_lG8.mjs → decorate-C9r0zXzz.mjs} +1 -1
  27. package/lib/{decorate-Bck1_lG8.mjs.map → decorate-C9r0zXzz.mjs.map} +1 -1
  28. package/lib/{dimensioning-helper-vPhGfHd-.mjs → dimensioning-helper-BXD6AEqL.mjs} +28 -21
  29. package/lib/dimensioning-helper-BXD6AEqL.mjs.map +1 -0
  30. package/lib/dimensioning-helper-Do9jwg8T.mjs +2 -0
  31. package/lib/glb-viewer-DyHnMYi0.mjs +2 -0
  32. package/lib/{glb-viewer-B95ZWAO-.mjs → glb-viewer-I86nXb0A.mjs} +69 -69
  33. package/lib/{glb-viewer-B95ZWAO-.mjs.map → glb-viewer-I86nXb0A.mjs.map} +1 -1
  34. package/lib/{highlight-coordinator-DeB46jQq.mjs → highlight-coordinator-DvgAfvb2.mjs} +3 -3
  35. package/lib/{highlight-coordinator-DeB46jQq.mjs.map → highlight-coordinator-DvgAfvb2.mjs.map} +1 -1
  36. package/lib/{homag-intelligence-ByOCaAFW.mjs → homag-intelligence-Bt--x6_f.mjs} +17 -7
  37. package/lib/homag-intelligence-Bt--x6_f.mjs.map +1 -0
  38. package/lib/{imos-ix-poc-export-helper-Vyv-uuNs.mjs → imos-ix-poc-export-helper-C9wPB6fl.mjs} +3 -3
  39. package/lib/{imos-ix-poc-export-helper-Vyv-uuNs.mjs.map → imos-ix-poc-export-helper-C9wPB6fl.mjs.map} +1 -1
  40. package/lib/kernel-C7YDLxq8.mjs.map +1 -1
  41. package/lib/{kernel-utils-BG1uqfT_.mjs → kernel-utils-B5QlsCwn.mjs} +15 -7
  42. package/lib/kernel-utils-B5QlsCwn.mjs.map +1 -0
  43. package/lib/{layer-BfckfWZz.mjs → layer-C_JtkhdO.mjs} +1 -1
  44. package/lib/{layer-BfckfWZz.mjs.map → layer-C_JtkhdO.mjs.map} +1 -1
  45. package/lib/{main-TlUQxOeW.mjs → main-DeOPstVA.mjs} +36481 -3268
  46. package/lib/main-DeOPstVA.mjs.map +1 -0
  47. package/lib/{material-viewer-37JiZSuS.mjs → material-viewer-D8Qdq6-m.mjs} +55 -55
  48. package/lib/material-viewer-D8Qdq6-m.mjs.map +1 -0
  49. package/lib/packages-eckwotTn.mjs +4 -0
  50. package/lib/{planner-DBhjeG6D.mjs → planner-BWZr-Th2.mjs} +14 -14
  51. package/lib/{planner-DBhjeG6D.mjs.map → planner-BWZr-Th2.mjs.map} +1 -1
  52. package/lib/planner-D3jvWraY.mjs +2 -0
  53. package/lib/{plugin-system-BEZnFUyT.mjs → plugin-system-BBgoIai2.mjs} +3 -3
  54. package/lib/{plugin-system-BEZnFUyT.mjs.map → plugin-system-BBgoIai2.mjs.map} +1 -1
  55. package/lib/roomle-headless-setup-CMK-quZI.mjs.map +1 -1
  56. package/lib/roomle-headless.d.ts +212 -32
  57. package/lib/roomle-headless.js +42 -41
  58. package/lib/roomle-headless.js.map +1 -1
  59. package/lib/{roomle-renderer-BgT28pfp.mjs → roomle-renderer-CkSFbpmg.mjs} +2 -2
  60. package/lib/{roomle-renderer-BgT28pfp.mjs.map → roomle-renderer-CkSFbpmg.mjs.map} +1 -1
  61. package/lib/roomle-sdk.d.ts +212 -32
  62. package/lib/roomle-sdk.js +8 -7
  63. package/lib/{roomle-webgpu-renderer-CdD3cYxN.mjs → roomle-webgpu-renderer-Cs4eLEwf.mjs} +426 -393
  64. package/lib/roomle-webgpu-renderer-Cs4eLEwf.mjs.map +1 -0
  65. package/lib/{scene-renderer-Bdl7umAf.mjs → scene-renderer-4zk6BXsR.mjs} +228 -228
  66. package/lib/{scene-renderer-Bdl7umAf.mjs.map → scene-renderer-4zk6BXsR.mjs.map} +1 -1
  67. package/lib/{script-loader-D3Cbc5BY.mjs → script-loader-DSL6zJat.mjs} +9 -9
  68. package/lib/{script-loader-D3Cbc5BY.mjs.map → script-loader-DSL6zJat.mjs.map} +1 -1
  69. package/lib/static/roomle-core-hsc/node_modules/roomle-core-hsc/package.json +1 -1
  70. package/lib/static/roomle-core-hsc/node_modules/roomle-core-hsc/src/embind/configuratorCoreInterface.d.ts +7 -3
  71. package/lib/static/roomle-core-hsc/node_modules/roomle-core-hsc/src/embind/configuratorCoreInterface.js +2 -1
  72. package/lib/static/roomle-core-hsc/node_modules/roomle-core-hsc/src/embind/configuratorCoreInterface.js.map +1 -1
  73. package/lib/static/roomle-core-hsc/node_modules/roomle-core-hsc/src/embind/plannerCoreInterface.d.ts +35 -2
  74. package/lib/static/roomle-core-hsc/node_modules/roomle-core-hsc/src/embind/plannerCoreInterface.js +12 -1
  75. package/lib/static/roomle-core-hsc/node_modules/roomle-core-hsc/src/embind/plannerCoreInterface.js.map +1 -1
  76. package/lib/static/roomle-core-hsc/node_modules/roomle-core-hsc/wasm_modern/ConfiguratorKernel.wasm +0 -0
  77. package/lib/static/roomle-core-hsc/node_modules/roomle-core-hsc/wasm_modern/RoomleCore.js +3 -3
  78. package/lib/static/roomle-core-hsc/node_modules/roomle-core-hsc/wasm_modern/RoomleCore.wasm +0 -0
  79. package/lib/static/roomle-core-hsc/node_modules/roomle-core-hsc/wasm_modern/RoomleToolsCore.wasm +0 -0
  80. package/lib/{stats-helper-BvDfWWfq.mjs → stats-helper-DyRFKnMs.mjs} +3 -3
  81. package/lib/{stats-helper-BvDfWWfq.mjs.map → stats-helper-DyRFKnMs.mjs.map} +1 -1
  82. package/lib/{three.core-K1JzUaep.mjs → three.core-DNErG1F6.mjs} +1 -1
  83. package/lib/{three.core-K1JzUaep.mjs.map → three.core-DNErG1F6.mjs.map} +1 -1
  84. package/lib/{three.module-Q2K9uyhi.mjs → three.module-BZkESKo3.mjs} +2 -2
  85. package/lib/{three.module-Q2K9uyhi.mjs.map → three.module-BZkESKo3.mjs.map} +1 -1
  86. package/lib/{three.webgpu-7v7o6Pxs.mjs → three.webgpu-C8myBXe1.mjs} +2 -2
  87. package/lib/{three.webgpu-7v7o6Pxs.mjs.map → three.webgpu-C8myBXe1.mjs.map} +1 -1
  88. package/lib/three.webgpu-WIkDzwXU.mjs +3 -0
  89. package/lib/{threejs-utils-BzXU2M3w.mjs → threejs-utils-fEhH05zP.mjs} +103 -87
  90. package/lib/threejs-utils-fEhH05zP.mjs.map +1 -0
  91. package/lib/{tools-core-CUTTHUku.mjs → tools-core-Bf4_WCg8.mjs} +5 -5
  92. package/lib/{tools-core-CUTTHUku.mjs.map → tools-core-Bf4_WCg8.mjs.map} +1 -1
  93. package/package.json +5 -2
  94. package/lib/api-ByHTYrQ_.mjs.map +0 -1
  95. package/lib/component-dimensioning-LUnZnpqG.mjs.map +0 -1
  96. package/lib/configurator-Cf6J4eOF.mjs +0 -45
  97. package/lib/configurator-D5FuWg5f.mjs +0 -2
  98. package/lib/dimensioning-helper-5xsc6I7Y.mjs +0 -2
  99. package/lib/dimensioning-helper-vPhGfHd-.mjs.map +0 -1
  100. package/lib/glb-viewer-C-IBj6p6.mjs +0 -2
  101. package/lib/homag-intelligence-ByOCaAFW.mjs.map +0 -1
  102. package/lib/kernel-utils-BG1uqfT_.mjs.map +0 -1
  103. package/lib/main-TlUQxOeW.mjs.map +0 -1
  104. package/lib/material-viewer-37JiZSuS.mjs.map +0 -1
  105. package/lib/packages-BPyzoYeC.mjs +0 -4
  106. package/lib/planner-BBUr8xHt.mjs +0 -2
  107. package/lib/roomle-webgpu-renderer-CdD3cYxN.mjs.map +0 -1
  108. package/lib/three.webgpu-ChguPx4k.mjs +0 -3
  109. package/lib/threejs-utils-BzXU2M3w.mjs.map +0 -1
@@ -1,142 +1,141 @@
1
- import { Ar as e, C as t, Cr as n, Dn as r, Gn as i, J as a, K as o, Or as s, Sr as c, Tn as l, Ui as u, Vi as d, Wn as f, X as p, Zt as m, _i as h, bi as g, fi as _, gi as v, h as y, hi as b, kn as x, kr as S, mi as C, mr as ee, mt as w, nt as T, on as E, pi as te, pr as ne, q as D, qr as re, rn as ie, si as ae, sn as oe, st as O, t as se, vi as ce, wt as le, yi as ue, zr as de } from "./three.core-K1JzUaep.mjs";
2
- import { t as fe } from "./scene-renderer-Bdl7umAf.mjs";
3
- import { n as pe, r as me, t as he } from "./decorate-Bck1_lG8.mjs";
4
- import { et as ge } from "./threejs-utils-BzXU2M3w.mjs";
5
- import { n as _e } from "./roomle-renderer-BgT28pfp.mjs";
6
- import { Rt as k, Un as A, Ut as ve, Wn as ye, Z as be, bn as j, en as xe, fr as Se, jn as Ce, kt as we, lr as Te, un as Ee, vn as De, x as Oe } from "./three.webgpu-7v7o6Pxs.mjs";
7
- A.BRDF_GGX, A.BRDF_Lambert, A.BasicPointShadowFilter, A.BasicShadowFilter;
8
- var ke = A.Break;
9
- A.Const, A.Continue, A.DFGLUT, A.D_GGX, A.Discard, A.EPSILON, A.F_Schlick;
10
- var M = A.Fn;
11
- A.INFINITY;
12
- var N = A.If, Ae = A.Loop;
13
- A.NodeAccess, A.NodeShaderStage, A.NodeType;
14
- var je = A.NodeUpdateType;
15
- A.PCFShadowFilter, A.PCFSoftShadowFilter;
16
- var Me = A.PI;
17
- A.PI2, A.TWO_PI;
18
- var Ne = A.HALF_PI;
19
- A.PointShadowFilter, A.Return, A.Schlick_to_F0, A.ShaderNode, A.Stack, A.Switch, A.TBNViewMatrix, A.VSMShadowFilter, A.V_GGX_SmithCorrelated, A.Var, A.VarIntent;
20
- var Pe = A.abs;
21
- A.acesFilmicToneMapping;
22
- var Fe = A.acos;
23
- A.acosh;
24
- var Ie = A.add;
25
- A.addMethodChaining, A.addNodeElement, A.agxToneMapping, A.all, A.alphaT, A.and, A.anisotropy, A.anisotropyB, A.anisotropyT, A.any, A.append, A.array, A.arrayBuffer, A.asin, A.asinh, A.assign, A.atan, A.atanh, A.atomicAdd, A.atomicAnd, A.atomicFunc, A.atomicLoad, A.atomicMax, A.atomicMin, A.atomicOr, A.atomicStore, A.atomicSub, A.atomicXor, A.attenuationColor, A.attenuationDistance, A.attribute, A.attributeArray, A.backgroundBlurriness, A.backgroundIntensity, A.backgroundRotation, A.batch, A.bentNormalView, A.billboarding, A.bitAnd, A.bitNot, A.bitOr, A.bitXor, A.bitangentGeometry, A.bitangentLocal, A.bitangentView, A.bitangentWorld, A.bitcast, A.blendBurn, A.blendColor, A.blendDodge, A.blendOverlay, A.blendScreen, A.blur;
26
- var Le = A.bool;
27
- A.buffer, A.bufferAttribute, A.bumpMap, A.builtin, A.builtinAOContext, A.builtinShadowContext, A.bvec2, A.bvec3, A.bvec4, A.bypass, A.cache, A.call, A.cameraFar, A.cameraIndex, A.cameraNear, A.cameraNormalMatrix, A.cameraPosition, A.cameraProjectionMatrix, A.cameraProjectionMatrixInverse, A.cameraViewMatrix, A.cameraViewport, A.cameraWorldMatrix, A.cbrt, A.cdl;
28
- var Re = A.ceil;
29
- A.checker, A.cineonToneMapping;
30
- var P = A.clamp;
31
- A.clearcoat, A.clearcoatNormalView, A.clearcoatRoughness, A.clipSpace, A.code;
32
- var ze = A.color;
33
- A.colorSpaceToWorking;
34
- var Be = A.colorToDirection;
35
- A.compute, A.computeKernel, A.computeSkinning, A.context, A.convert, A.convertColorSpace;
36
- var Ve = A.convertToTexture;
37
- A.countLeadingZeros;
38
- var He = A.countOneBits;
39
- A.countTrailingZeros;
40
- var Ue = A.cos;
41
- A.cosh;
42
- var We = A.cross;
43
- A.cubeTexture, A.cubeTextureBase, A.dFdx, A.dFdy, A.dashSize, A.debug, A.decrement, A.decrementBefore, A.defaultBuildStages, A.defaultShaderStages, A.defined, A.degrees, A.deltaTime, A.densityFog, A.densityFogFactor, A.depth, A.depthPass, A.determinant, A.difference;
44
- var Ge = A.diffuseColor;
45
- A.directPointLight;
46
- var Ke = A.directionToColor;
47
- A.directionToFaceDirection, A.dispersion, A.distance;
48
- var qe = A.div, F = A.dot;
49
- A.drawIndex, A.dynamicBufferAttribute, A.element, A.emissive, A.equal, A.equirectUV;
50
- var Je = A.exp;
51
- A.exp2, A.exponentialHeightFogFactor, A.expression, A.faceDirection, A.faceForward, A.faceforward;
52
- var I = A.float;
53
- A.floatBitsToInt, A.floatBitsToUint, A.floor, A.fog;
54
- var Ye = A.fract;
55
- A.frameGroup, A.frameId, A.frontFacing, A.fwidth, A.gain, A.gapSize, A.getConstNodeType, A.getCurrentStack, A.getDirection, A.getDistanceAttenuation, A.getGeometryRoughness;
56
- var Xe = A.getNormalFromDepth, Ze = A.interleavedGradientNoise;
57
- A.vogelDiskSample, A.getParallaxCorrectNormal, A.getRoughness, A.getScreenPosition, A.getShIrradianceAt, A.getShadowMaterial, A.getShadowRenderObjectFunction, A.getTextureIndex;
58
- var Qe = A.getViewPosition;
59
- A.globalId, A.glsl, A.glslFn, A.grayscale, A.greaterThan, A.greaterThanEqual, A.hash, A.highpModelNormalViewMatrix, A.highpModelViewMatrix, A.hue, A.increment, A.incrementBefore, A.instance, A.instanceIndex, A.instancedArray, A.instancedBufferAttribute, A.instancedDynamicBufferAttribute, A.instancedMesh;
60
- var $e = A.int;
61
- A.intBitsToFloat, A.inverse, A.inverseSqrt, A.inversesqrt, A.invocationLocalIndex, A.invocationSubgroupIndex, A.ior, A.iridescence, A.iridescenceIOR, A.iridescenceThickness;
62
- var et = A.ivec2;
63
- A.ivec3, A.ivec4, A.js, A.label, A.length, A.lengthSq, A.lessThan, A.lessThanEqual, A.lightPosition, A.lightProjectionUV, A.lightShadowMatrix, A.lightTargetDirection, A.lightTargetPosition, A.lightViewPosition, A.lightingContext, A.lights, A.linearDepth, A.linearToneMapping, A.localId, A.log, A.log2;
64
- var tt = A.logarithmicDepthToViewZ, nt = A.luminance;
65
- A.mat2, A.mat3, A.mat4, A.matcapUV, A.materialAO, A.materialAlphaTest, A.materialAnisotropy, A.materialAnisotropyVector, A.materialAttenuationColor, A.materialAttenuationDistance, A.materialClearcoat, A.materialClearcoatNormal, A.materialClearcoatRoughness, A.materialColor, A.materialDispersion, A.materialEmissive, A.materialEnvIntensity, A.materialEnvRotation, A.materialIOR, A.materialIridescence, A.materialIridescenceIOR, A.materialIridescenceThickness, A.materialLightMap, A.materialLineDashOffset, A.materialLineDashSize, A.materialLineGapSize, A.materialLineScale, A.materialLineWidth, A.materialMetalness, A.materialNormal, A.materialOpacity, A.materialPointSize, A.materialReference, A.materialReflectivity, A.materialRefractionRatio, A.materialRotation, A.materialRoughness, A.materialSheen, A.materialSheenRoughness, A.materialShininess, A.materialSpecular, A.materialSpecularColor, A.materialSpecularIntensity, A.materialSpecularStrength, A.materialThickness, A.materialTransmission;
66
- var L = A.max;
67
- A.maxMipLevel, A.mediumpModelViewMatrix, A.metalness;
68
- var rt = A.min, it = A.mix;
69
- A.mixElement, A.mod, A.modInt, A.modelDirection, A.modelNormalMatrix, A.modelPosition, A.modelRadius, A.modelScale, A.modelViewMatrix, A.modelViewPosition, A.modelViewProjection, A.modelWorldMatrix, A.modelWorldMatrixInverse, A.morphReference;
70
- var at = A.mrt, R = A.mul;
71
- A.mx_aastep, A.mx_add, A.mx_atan2, A.mx_cell_noise_float, A.mx_contrast, A.mx_divide, A.mx_fractal_noise_float, A.mx_fractal_noise_vec2, A.mx_fractal_noise_vec3, A.mx_fractal_noise_vec4, A.mx_frame, A.mx_heighttonormal, A.mx_hsvtorgb, A.mx_ifequal, A.mx_ifgreater, A.mx_ifgreatereq, A.mx_invert, A.mx_modulo, A.mx_multiply, A.mx_noise_float, A.mx_noise_vec3, A.mx_noise_vec4, A.mx_place2d, A.mx_power, A.mx_ramp4, A.mx_ramplr, A.mx_ramptb, A.mx_rgbtohsv, A.mx_rotate2d, A.mx_rotate3d, A.mx_safepower, A.mx_separate, A.mx_splitlr, A.mx_splittb, A.mx_srgb_texture_to_lin_rec709, A.mx_subtract, A.mx_timer, A.mx_transform_uv, A.mx_unifiednoise2d, A.mx_unifiednoise3d, A.mx_worley_noise_float, A.mx_worley_noise_vec2, A.mx_worley_noise_vec3, A.negate, A.neutralToneMapping, A.nodeArray, A.nodeImmutable;
72
- var ot = A.nodeObject;
73
- A.nodeObjectIntent, A.nodeObjects, A.nodeProxy, A.nodeProxyIntent, A.normalFlat, A.normalGeometry, A.normalLocal, A.normalMap;
74
- var st = A.normalView;
75
- A.normalViewGeometry, A.normalWorld, A.normalWorldGeometry;
76
- var ct = A.normalize;
77
- A.not, A.notEqual, A.numWorkgroups, A.objectDirection, A.objectGroup, A.objectPosition, A.objectRadius, A.objectScale, A.objectViewPosition, A.objectWorldMatrix, A.OnBeforeObjectUpdate, A.OnBeforeMaterialUpdate, A.OnObjectUpdate;
78
- var lt = A.OnMaterialUpdate;
79
- A.oneMinus, A.or;
80
- var ut = A.orthographicDepthToViewZ;
81
- A.oscSawtooth, A.oscSine, A.oscSquare, A.oscTriangle;
82
- var dt = A.output;
83
- A.outputStruct, A.overloadingFn, A.packHalf2x16, A.packSnorm2x16, A.packUnorm2x16, A.parabola, A.parallaxDirection, A.parallaxUV, A.parameter;
84
- var ft = A.pass, pt = A.passTexture;
85
- A.pcurve;
86
- var mt = A.perspectiveDepthToViewZ;
87
- A.pmremTexture, A.pointShadow, A.pointUV, A.pointWidth, A.positionGeometry, A.positionLocal, A.positionPrevious;
88
- var ht = A.positionView;
89
- A.positionViewDirection, A.positionWorld, A.positionWorldDirection, A.posterize;
90
- var gt = A.pow;
91
- A.pow2, A.pow3, A.pow4, A.premultiplyAlpha, A.property, A.radians;
92
- var _t = A.rand;
93
- A.range, A.rangeFog, A.rangeFogFactor, A.reciprocal;
94
- var vt = A.reference;
95
- A.referenceBuffer, A.reflect, A.reflectVector, A.reflectView, A.reflector, A.refract, A.refractVector, A.refractView, A.reinhardToneMapping, A.remap, A.remapClamp, A.renderGroup;
96
- var yt = A.renderOutput;
97
- A.rendererReference, A.replaceDefaultUV, A.rotate, A.rotateUV, A.roughness, A.round, A.rtt, A.sRGBTransferEOTF, A.sRGBTransferOETF;
98
- var bt = A.sample;
99
- A.sampler, A.samplerComparison, A.saturate, A.saturation, A.screen;
100
- var xt = A.screenCoordinate;
101
- A.screenDPR, A.screenSize;
102
- var St = A.screenUV;
103
- A.select, A.setCurrentStack, A.setName, A.shaderStages, A.shadow, A.shadowPositionWorld, A.shapeCircle, A.sharedUniformGroup, A.sheen, A.sheenRoughness, A.shiftLeft;
104
- var Ct = A.shiftRight;
105
- A.shininess;
106
- var wt = A.sign, Tt = A.sin;
107
- A.sinh, A.sinc, A.skinning, A.smoothstep, A.smoothstepElement, A.specularColor, A.specularF90, A.spherizeUV, A.split, A.spritesheetUV;
108
- var Et = A.sqrt;
109
- A.stack;
110
- var Dt = A.step;
111
- A.stepElement, A.storage, A.storageBarrier, A.storageTexture, A.string;
112
- var Ot = A.struct, kt = A.sub;
113
- A.subgroupAdd, A.subgroupAll, A.subgroupAnd, A.subgroupAny, A.subgroupBallot, A.subgroupBroadcast, A.subgroupBroadcastFirst, A.subBuild, A.subgroupElect, A.subgroupExclusiveAdd, A.subgroupExclusiveMul, A.subgroupInclusiveAdd, A.subgroupInclusiveMul, A.subgroupIndex, A.subgroupMax, A.subgroupMin, A.subgroupMul, A.subgroupOr, A.subgroupShuffle, A.subgroupShuffleDown, A.subgroupShuffleUp, A.subgroupShuffleXor, A.subgroupSize, A.subgroupXor, A.tan, A.tanh, A.tangentGeometry, A.tangentLocal, A.tangentView, A.tangentWorld;
114
- var z = A.texture;
115
- A.texture3D, A.textureBarrier, A.textureBicubic, A.textureBicubicLevel, A.textureCubeUV, A.textureLoad;
116
- var At = A.textureSize;
117
- A.textureLevel, A.textureStore, A.thickness, A.time, A.toneMapping, A.toneMappingExposure, A.toonOutlinePass, A.transformDirection, A.transformNormal, A.transformNormalToView, A.transformedClearcoatNormalView, A.transformedNormalView, A.transformedNormalWorld, A.transmission, A.transpose, A.triNoise3D, A.triplanarTexture, A.triplanarTextures, A.trunc;
118
- var B = A.uint;
119
- A.uintBitsToFloat;
120
- var V = A.uniform;
121
- A.uniformArray, A.uniformCubeTexture, A.uniformGroup, A.uniformFlow, A.uniformTexture, A.unpackHalf2x16, A.unpackSnorm2x16, A.unpackUnorm2x16, A.unpremultiplyAlpha, A.userData;
122
- var jt = A.uv;
123
- A.uvec2, A.uvec3, A.uvec4, A.varying, A.varyingProperty;
124
- var H = A.vec2, U = A.vec3, W = A.vec4;
125
- A.vectorComponents;
126
- var Mt = A.velocity;
127
- A.vertexColor, A.vertexIndex, A.vertexStage, A.vibrance, A.viewZToLogarithmicDepth;
128
- var Nt = A.viewZToOrthographicDepth, Pt = A.viewZToPerspectiveDepth;
129
- A.viewZToReversedOrthographicDepth, A.viewZToReversedPerspectiveDepth, A.viewport, A.viewportCoordinate, A.viewportDepthTexture, A.viewportLinearDepth, A.viewportMipTexture, A.viewportOpaqueMipTexture, A.viewportResolution, A.viewportSafeUV, A.viewportSharedTexture, A.viewportSize, A.viewportTexture, A.viewportUV, A.wgsl, A.wgslFn, A.workgroupArray, A.workgroupBarrier, A.workgroupId, A.workingToColorSpace, A.xor;
1
+ import { Ar as e, C as t, Cr as n, Dn as r, Gn as i, J as a, K as o, Or as s, Sr as c, Tn as l, Ui as u, Vi as d, Wn as f, Zt as p, _i as m, bi as h, fi as g, gi as _, h as v, hi as y, kr as b, mi as x, mr as S, mt as C, nt as ee, on as w, pi as te, pr as ne, q as re, qr as ie, rn as T, si as E, st as ae, t as oe, vi as se, wt as ce, yi as le, zr as ue } from "./three.core-DNErG1F6.mjs";
2
+ import { o as de, t as fe } from "./scene-renderer-4zk6BXsR.mjs";
3
+ import { n as pe, r as me, t as he } from "./decorate-C9r0zXzz.mjs";
4
+ import { n as ge } from "./roomle-renderer-CkSFbpmg.mjs";
5
+ import { Rt as D, Un as O, Ut as _e, Wn as ve, Z as ye, bn as k, fr as be, jn as xe, kt as Se, lr as Ce, un as we, vn as Te, x as Ee } from "./three.webgpu-C8myBXe1.mjs";
6
+ O.BRDF_GGX, O.BRDF_Lambert, O.BasicPointShadowFilter, O.BasicShadowFilter;
7
+ var De = O.Break;
8
+ O.Const, O.Continue, O.DFGLUT, O.D_GGX, O.Discard, O.EPSILON, O.F_Schlick;
9
+ var A = O.Fn;
10
+ O.INFINITY;
11
+ var j = O.If, Oe = O.Loop;
12
+ O.NodeAccess, O.NodeShaderStage, O.NodeType;
13
+ var ke = O.NodeUpdateType;
14
+ O.PCFShadowFilter, O.PCFSoftShadowFilter;
15
+ var Ae = O.PI;
16
+ O.PI2, O.TWO_PI;
17
+ var je = O.HALF_PI;
18
+ O.PointShadowFilter, O.Return, O.Schlick_to_F0, O.ShaderNode, O.Stack, O.Switch, O.TBNViewMatrix, O.VSMShadowFilter, O.V_GGX_SmithCorrelated, O.Var, O.VarIntent;
19
+ var M = O.abs;
20
+ O.acesFilmicToneMapping;
21
+ var Me = O.acos;
22
+ O.acosh;
23
+ var Ne = O.add;
24
+ O.addMethodChaining, O.addNodeElement, O.agxToneMapping, O.all, O.alphaT, O.and, O.anisotropy, O.anisotropyB, O.anisotropyT, O.any, O.append, O.array, O.arrayBuffer, O.asin, O.asinh, O.assign, O.atan, O.atanh, O.atomicAdd, O.atomicAnd, O.atomicFunc, O.atomicLoad, O.atomicMax, O.atomicMin, O.atomicOr, O.atomicStore, O.atomicSub, O.atomicXor, O.attenuationColor, O.attenuationDistance, O.attribute, O.attributeArray, O.backgroundBlurriness, O.backgroundIntensity, O.backgroundRotation, O.batch, O.bentNormalView, O.billboarding, O.bitAnd, O.bitNot, O.bitOr, O.bitXor, O.bitangentGeometry, O.bitangentLocal, O.bitangentView, O.bitangentWorld, O.bitcast, O.blendBurn, O.blendColor, O.blendDodge, O.blendOverlay, O.blendScreen, O.blur;
25
+ var Pe = O.bool;
26
+ O.buffer, O.bufferAttribute, O.bumpMap, O.builtin, O.builtinAOContext, O.builtinShadowContext, O.bvec2, O.bvec3, O.bvec4, O.bypass, O.cache, O.call, O.cameraFar, O.cameraIndex, O.cameraNear, O.cameraNormalMatrix, O.cameraPosition, O.cameraProjectionMatrix, O.cameraProjectionMatrixInverse, O.cameraViewMatrix, O.cameraViewport, O.cameraWorldMatrix, O.cbrt, O.cdl;
27
+ var Fe = O.ceil;
28
+ O.checker, O.cineonToneMapping;
29
+ var N = O.clamp;
30
+ O.clearcoat, O.clearcoatNormalView, O.clearcoatRoughness, O.clipSpace, O.code;
31
+ var Ie = O.color;
32
+ O.colorSpaceToWorking;
33
+ var Le = O.colorToDirection;
34
+ O.compute, O.computeKernel, O.computeSkinning, O.context, O.convert, O.convertColorSpace;
35
+ var Re = O.convertToTexture;
36
+ O.countLeadingZeros;
37
+ var ze = O.countOneBits;
38
+ O.countTrailingZeros;
39
+ var Be = O.cos;
40
+ O.cosh;
41
+ var Ve = O.cross;
42
+ O.cubeTexture, O.cubeTextureBase, O.dFdx, O.dFdy, O.dashSize, O.debug, O.decrement, O.decrementBefore, O.defaultBuildStages, O.defaultShaderStages, O.defined, O.degrees, O.deltaTime, O.densityFog, O.densityFogFactor, O.depth, O.depthPass, O.determinant, O.difference;
43
+ var He = O.diffuseColor;
44
+ O.directPointLight;
45
+ var Ue = O.directionToColor;
46
+ O.directionToFaceDirection, O.dispersion, O.distance;
47
+ var We = O.div, P = O.dot;
48
+ O.drawIndex, O.dynamicBufferAttribute, O.element, O.emissive, O.equal, O.equirectUV;
49
+ var Ge = O.exp;
50
+ O.exp2, O.exponentialHeightFogFactor, O.expression, O.faceDirection, O.faceForward, O.faceforward;
51
+ var F = O.float;
52
+ O.floatBitsToInt, O.floatBitsToUint, O.floor, O.fog;
53
+ var Ke = O.fract;
54
+ O.frameGroup, O.frameId, O.frontFacing, O.fwidth, O.gain, O.gapSize, O.getConstNodeType, O.getCurrentStack, O.getDirection, O.getDistanceAttenuation, O.getGeometryRoughness;
55
+ var qe = O.getNormalFromDepth, Je = O.interleavedGradientNoise;
56
+ O.vogelDiskSample, O.getParallaxCorrectNormal, O.getRoughness, O.getScreenPosition, O.getShIrradianceAt, O.getShadowMaterial, O.getShadowRenderObjectFunction, O.getTextureIndex;
57
+ var Ye = O.getViewPosition;
58
+ O.globalId, O.glsl, O.glslFn, O.grayscale, O.greaterThan, O.greaterThanEqual, O.hash, O.highpModelNormalViewMatrix, O.highpModelViewMatrix, O.hue, O.increment, O.incrementBefore, O.instance, O.instanceIndex, O.instancedArray, O.instancedBufferAttribute, O.instancedDynamicBufferAttribute, O.instancedMesh;
59
+ var Xe = O.int;
60
+ O.intBitsToFloat, O.inverse, O.inverseSqrt, O.inversesqrt, O.invocationLocalIndex, O.invocationSubgroupIndex, O.ior, O.iridescence, O.iridescenceIOR, O.iridescenceThickness;
61
+ var Ze = O.ivec2;
62
+ O.ivec3, O.ivec4, O.js, O.label, O.length, O.lengthSq, O.lessThan, O.lessThanEqual, O.lightPosition, O.lightProjectionUV, O.lightShadowMatrix, O.lightTargetDirection, O.lightTargetPosition, O.lightViewPosition, O.lightingContext, O.lights, O.linearDepth, O.linearToneMapping, O.localId, O.log, O.log2;
63
+ var Qe = O.logarithmicDepthToViewZ, $e = O.luminance;
64
+ O.mat2, O.mat3, O.mat4, O.matcapUV, O.materialAO, O.materialAlphaTest, O.materialAnisotropy, O.materialAnisotropyVector, O.materialAttenuationColor, O.materialAttenuationDistance, O.materialClearcoat, O.materialClearcoatNormal, O.materialClearcoatRoughness, O.materialColor, O.materialDispersion, O.materialEmissive, O.materialEnvIntensity, O.materialEnvRotation, O.materialIOR, O.materialIridescence, O.materialIridescenceIOR, O.materialIridescenceThickness, O.materialLightMap, O.materialLineDashOffset, O.materialLineDashSize, O.materialLineGapSize, O.materialLineScale, O.materialLineWidth, O.materialMetalness, O.materialNormal, O.materialOpacity, O.materialPointSize, O.materialReference, O.materialReflectivity, O.materialRefractionRatio, O.materialRotation, O.materialRoughness, O.materialSheen, O.materialSheenRoughness, O.materialShininess, O.materialSpecular, O.materialSpecularColor, O.materialSpecularIntensity, O.materialSpecularStrength, O.materialThickness, O.materialTransmission;
65
+ var I = O.max;
66
+ O.maxMipLevel, O.mediumpModelViewMatrix, O.metalness;
67
+ var et = O.min, tt = O.mix;
68
+ O.mixElement, O.mod, O.modInt, O.modelDirection, O.modelNormalMatrix, O.modelPosition, O.modelRadius, O.modelScale, O.modelViewMatrix, O.modelViewPosition, O.modelViewProjection, O.modelWorldMatrix, O.modelWorldMatrixInverse, O.morphReference;
69
+ var nt = O.mrt, L = O.mul;
70
+ O.mx_aastep, O.mx_add, O.mx_atan2, O.mx_cell_noise_float, O.mx_contrast, O.mx_divide, O.mx_fractal_noise_float, O.mx_fractal_noise_vec2, O.mx_fractal_noise_vec3, O.mx_fractal_noise_vec4, O.mx_frame, O.mx_heighttonormal, O.mx_hsvtorgb, O.mx_ifequal, O.mx_ifgreater, O.mx_ifgreatereq, O.mx_invert, O.mx_modulo, O.mx_multiply, O.mx_noise_float, O.mx_noise_vec3, O.mx_noise_vec4, O.mx_place2d, O.mx_power, O.mx_ramp4, O.mx_ramplr, O.mx_ramptb, O.mx_rgbtohsv, O.mx_rotate2d, O.mx_rotate3d, O.mx_safepower, O.mx_separate, O.mx_splitlr, O.mx_splittb, O.mx_srgb_texture_to_lin_rec709, O.mx_subtract, O.mx_timer, O.mx_transform_uv, O.mx_unifiednoise2d, O.mx_unifiednoise3d, O.mx_worley_noise_float, O.mx_worley_noise_vec2, O.mx_worley_noise_vec3, O.negate, O.neutralToneMapping, O.nodeArray, O.nodeImmutable;
71
+ var rt = O.nodeObject;
72
+ O.nodeObjectIntent, O.nodeObjects, O.nodeProxy, O.nodeProxyIntent, O.normalFlat, O.normalGeometry, O.normalLocal, O.normalMap;
73
+ var it = O.normalView;
74
+ O.normalViewGeometry, O.normalWorld, O.normalWorldGeometry;
75
+ var R = O.normalize;
76
+ O.not, O.notEqual, O.numWorkgroups, O.objectDirection, O.objectGroup, O.objectPosition, O.objectRadius, O.objectScale, O.objectViewPosition, O.objectWorldMatrix, O.OnBeforeObjectUpdate, O.OnBeforeMaterialUpdate, O.OnObjectUpdate;
77
+ var at = O.OnMaterialUpdate;
78
+ O.oneMinus, O.or;
79
+ var ot = O.orthographicDepthToViewZ;
80
+ O.oscSawtooth, O.oscSine, O.oscSquare, O.oscTriangle;
81
+ var st = O.output;
82
+ O.outputStruct, O.overloadingFn, O.packHalf2x16, O.packSnorm2x16, O.packUnorm2x16, O.parabola, O.parallaxDirection, O.parallaxUV, O.parameter;
83
+ var ct = O.pass, lt = O.passTexture;
84
+ O.pcurve;
85
+ var ut = O.perspectiveDepthToViewZ;
86
+ O.pmremTexture, O.pointShadow, O.pointUV, O.pointWidth, O.positionGeometry, O.positionLocal, O.positionPrevious;
87
+ var dt = O.positionView;
88
+ O.positionViewDirection, O.positionWorld, O.positionWorldDirection, O.posterize;
89
+ var ft = O.pow;
90
+ O.pow2, O.pow3, O.pow4, O.premultiplyAlpha, O.property, O.radians;
91
+ var pt = O.rand;
92
+ O.range, O.rangeFog, O.rangeFogFactor, O.reciprocal;
93
+ var mt = O.reference;
94
+ O.referenceBuffer, O.reflect, O.reflectVector, O.reflectView, O.reflector, O.refract, O.refractVector, O.refractView, O.reinhardToneMapping, O.remap, O.remapClamp, O.renderGroup;
95
+ var ht = O.renderOutput;
96
+ O.rendererReference, O.replaceDefaultUV, O.rotate, O.rotateUV, O.roughness, O.round, O.rtt, O.sRGBTransferEOTF, O.sRGBTransferOETF;
97
+ var gt = O.sample;
98
+ O.sampler, O.samplerComparison, O.saturate, O.saturation, O.screen;
99
+ var _t = O.screenCoordinate;
100
+ O.screenDPR, O.screenSize;
101
+ var vt = O.screenUV;
102
+ O.select, O.setCurrentStack, O.setName, O.shaderStages, O.shadow, O.shadowPositionWorld, O.shapeCircle, O.sharedUniformGroup, O.sheen, O.sheenRoughness, O.shiftLeft;
103
+ var yt = O.shiftRight;
104
+ O.shininess;
105
+ var bt = O.sign, xt = O.sin;
106
+ O.sinh, O.sinc, O.skinning, O.smoothstep, O.smoothstepElement, O.specularColor, O.specularF90, O.spherizeUV, O.split, O.spritesheetUV;
107
+ var St = O.sqrt;
108
+ O.stack;
109
+ var Ct = O.step;
110
+ O.stepElement, O.storage, O.storageBarrier, O.storageTexture, O.string;
111
+ var wt = O.struct, Tt = O.sub;
112
+ O.subgroupAdd, O.subgroupAll, O.subgroupAnd, O.subgroupAny, O.subgroupBallot, O.subgroupBroadcast, O.subgroupBroadcastFirst, O.subBuild, O.subgroupElect, O.subgroupExclusiveAdd, O.subgroupExclusiveMul, O.subgroupInclusiveAdd, O.subgroupInclusiveMul, O.subgroupIndex, O.subgroupMax, O.subgroupMin, O.subgroupMul, O.subgroupOr, O.subgroupShuffle, O.subgroupShuffleDown, O.subgroupShuffleUp, O.subgroupShuffleXor, O.subgroupSize, O.subgroupXor, O.tan, O.tanh, O.tangentGeometry, O.tangentLocal, O.tangentView, O.tangentWorld;
113
+ var z = O.texture;
114
+ O.texture3D, O.textureBarrier, O.textureBicubic, O.textureBicubicLevel, O.textureCubeUV, O.textureLoad;
115
+ var Et = O.textureSize;
116
+ O.textureLevel, O.textureStore, O.thickness, O.time, O.toneMapping, O.toneMappingExposure, O.toonOutlinePass, O.transformDirection, O.transformNormal, O.transformNormalToView, O.transformedClearcoatNormalView, O.transformedNormalView, O.transformedNormalWorld, O.transmission, O.transpose, O.triNoise3D, O.triplanarTexture, O.triplanarTextures, O.trunc;
117
+ var B = O.uint;
118
+ O.uintBitsToFloat;
119
+ var V = O.uniform;
120
+ O.uniformArray, O.uniformCubeTexture, O.uniformGroup, O.uniformFlow, O.uniformTexture, O.unpackHalf2x16, O.unpackSnorm2x16, O.unpackUnorm2x16, O.unpremultiplyAlpha, O.userData;
121
+ var Dt = O.uv;
122
+ O.uvec2, O.uvec3, O.uvec4, O.varying, O.varyingProperty;
123
+ var H = O.vec2, U = O.vec3, W = O.vec4;
124
+ O.vectorComponents;
125
+ var Ot = O.velocity;
126
+ O.vertexColor, O.vertexIndex, O.vertexStage, O.vibrance, O.viewZToLogarithmicDepth;
127
+ var kt = O.viewZToOrthographicDepth, At = O.viewZToPerspectiveDepth;
128
+ O.viewZToReversedOrthographicDepth, O.viewZToReversedPerspectiveDepth, O.viewport, O.viewportCoordinate, O.viewportDepthTexture, O.viewportLinearDepth, O.viewportMipTexture, O.viewportOpaqueMipTexture, O.viewportResolution, O.viewportSafeUV, O.viewportSharedTexture, O.viewportSize, O.viewportTexture, O.viewportUV, O.wgsl, O.wgslFn, O.workgroupArray, O.workgroupBarrier, O.workgroupId, O.workingToColorSpace, O.xor;
130
129
  //#endregion
131
130
  //#region ../../node_modules/three/examples/jsm/tsl/display/OutlineNode.js
132
- var G = /* @__PURE__ */ new Ee(), Ft = /* @__PURE__ */ new g(), It = /* @__PURE__ */ new g(1, 0), Lt = /* @__PURE__ */ new g(0, 1), K, Rt = class extends ye {
131
+ var G = /* @__PURE__ */ new we(), jt = /* @__PURE__ */ new h(), Mt = /* @__PURE__ */ new h(1, 0), Nt = /* @__PURE__ */ new h(0, 1), K, Pt = class extends ve {
133
132
  static get type() {
134
133
  return "OutlineNode";
135
134
  }
136
135
  constructor(t, n, r = {}) {
137
136
  super("vec4");
138
- let { selectedObjects: i = [], edgeThickness: o = I(1), edgeGlow: s = I(0), downSampleRatio: c = 2 } = r;
139
- this.scene = t, this.camera = n, this.selectedObjects = i, this.edgeThicknessNode = ot(o), this.edgeGlowNode = ot(s), this.downSampleRatio = c, this.updateBeforeType = ve.FRAME, this._renderTargetDepthBuffer = new e(), this._renderTargetDepthBuffer.depthTexture = new a(), this._renderTargetDepthBuffer.depthTexture.type = O, this._renderTargetMaskBuffer = new e(), this._renderTargetMaskDownSampleBuffer = new e(1, 1, { depthBuffer: !1 }), this._renderTargetEdgeBuffer1 = new e(1, 1, { depthBuffer: !1 }), this._renderTargetEdgeBuffer2 = new e(1, 1, { depthBuffer: !1 }), this._renderTargetBlurBuffer1 = new e(1, 1, { depthBuffer: !1 }), this._renderTargetBlurBuffer2 = new e(1, 1, { depthBuffer: !1 }), this._renderTargetComposite = new e(1, 1, { depthBuffer: !1 }), this._cameraNear = vt("near", "float", n), this._cameraFar = vt("far", "float", n), this._blurDirection = V(new g()), this._depthTextureUniform = z(this._renderTargetDepthBuffer.depthTexture), this._maskTextureUniform = z(this._renderTargetMaskBuffer.texture), this._maskTextureDownsSampleUniform = z(this._renderTargetMaskDownSampleBuffer.texture), this._edge1TextureUniform = z(this._renderTargetEdgeBuffer1.texture), this._edge2TextureUniform = z(this._renderTargetEdgeBuffer2.texture), this._blurColorTextureUniform = z(this._renderTargetEdgeBuffer1.texture), this._visibleEdgeColor = U(1, 0, 0), this._hiddenEdgeColor = U(0, 1, 0), this._depthMaterial = new k(), this._depthMaterial.colorNode = ze(0, 0, 0), this._depthMaterial.name = "OutlineNode.depth", this._depthSpriteMaterial = new Ce(), this._depthSpriteMaterial.colorNode = ze(0, 0, 0), this._depthSpriteMaterial.name = "OutlineNode.depthSprite", this._prepareMaskMaterial = new k(), this._prepareMaskMaterial.name = "OutlineNode.prepareMask", this._prepareMaskSpriteMaterial = new Ce(), this._prepareMaskSpriteMaterial.name = "OutlineNode.prepareMaskSprite", this._materialCopy = new k(), this._materialCopy.name = "OutlineNode.copy", this._edgeDetectionMaterial = new k(), this._edgeDetectionMaterial.name = "OutlineNode.edgeDetection", this._separableBlurMaterial = new k(), this._separableBlurMaterial.name = "OutlineNode.separableBlur", this._separableBlurMaterial2 = new k(), this._separableBlurMaterial2.name = "OutlineNode.separableBlur2", this._compositeMaterial = new k(), this._compositeMaterial.name = "OutlineNode.composite", this._selectionCache = /* @__PURE__ */ new Set(), this._lastSelectionCount = 0, this._textureNode = pt(this, this._renderTargetComposite.texture);
137
+ let { selectedObjects: i = [], edgeThickness: o = F(1), edgeGlow: s = F(0), downSampleRatio: c = 2 } = r;
138
+ this.scene = t, this.camera = n, this.selectedObjects = i, this.edgeThicknessNode = rt(o), this.edgeGlowNode = rt(s), this.downSampleRatio = c, this.updateBeforeType = _e.FRAME, this._renderTargetDepthBuffer = new e(), this._renderTargetDepthBuffer.depthTexture = new a(), this._renderTargetDepthBuffer.depthTexture.type = ae, this._renderTargetMaskBuffer = new e(), this._renderTargetMaskDownSampleBuffer = new e(1, 1, { depthBuffer: !1 }), this._renderTargetEdgeBuffer1 = new e(1, 1, { depthBuffer: !1 }), this._renderTargetEdgeBuffer2 = new e(1, 1, { depthBuffer: !1 }), this._renderTargetBlurBuffer1 = new e(1, 1, { depthBuffer: !1 }), this._renderTargetBlurBuffer2 = new e(1, 1, { depthBuffer: !1 }), this._renderTargetComposite = new e(1, 1, { depthBuffer: !1 }), this._cameraNear = mt("near", "float", n), this._cameraFar = mt("far", "float", n), this._blurDirection = V(new h()), this._depthTextureUniform = z(this._renderTargetDepthBuffer.depthTexture), this._maskTextureUniform = z(this._renderTargetMaskBuffer.texture), this._maskTextureDownsSampleUniform = z(this._renderTargetMaskDownSampleBuffer.texture), this._edge1TextureUniform = z(this._renderTargetEdgeBuffer1.texture), this._edge2TextureUniform = z(this._renderTargetEdgeBuffer2.texture), this._blurColorTextureUniform = z(this._renderTargetEdgeBuffer1.texture), this._visibleEdgeColor = U(1, 0, 0), this._hiddenEdgeColor = U(0, 1, 0), this._depthMaterial = new D(), this._depthMaterial.colorNode = Ie(0, 0, 0), this._depthMaterial.name = "OutlineNode.depth", this._depthSpriteMaterial = new xe(), this._depthSpriteMaterial.colorNode = Ie(0, 0, 0), this._depthSpriteMaterial.name = "OutlineNode.depthSprite", this._prepareMaskMaterial = new D(), this._prepareMaskMaterial.name = "OutlineNode.prepareMask", this._prepareMaskSpriteMaterial = new xe(), this._prepareMaskSpriteMaterial.name = "OutlineNode.prepareMaskSprite", this._materialCopy = new D(), this._materialCopy.name = "OutlineNode.copy", this._edgeDetectionMaterial = new D(), this._edgeDetectionMaterial.name = "OutlineNode.edgeDetection", this._separableBlurMaterial = new D(), this._separableBlurMaterial.name = "OutlineNode.separableBlur", this._separableBlurMaterial2 = new D(), this._separableBlurMaterial2.name = "OutlineNode.separableBlur2", this._compositeMaterial = new D(), this._compositeMaterial.name = "OutlineNode.composite", this._selectionCache = /* @__PURE__ */ new Set(), this._lastSelectionCount = 0, this._textureNode = lt(this, this._renderTargetComposite.texture);
140
139
  }
141
140
  get visibleEdge() {
142
141
  return this.r;
@@ -155,11 +154,11 @@ var G = /* @__PURE__ */ new Ee(), Ft = /* @__PURE__ */ new g(), It = /* @__PURE_
155
154
  updateBefore(e) {
156
155
  let { renderer: t } = e, { camera: n, scene: r } = this;
157
156
  if (this._updateSelectionCache(), this._selectionCache.size === 0) {
158
- this._lastSelectionCount > 0 && (K = j.resetRendererState(t, K), t.setRenderTarget(this._renderTargetComposite), t.setClearColor(0, 0), t.clear(), j.restoreRendererState(t, K), this._lastSelectionCount = 0);
157
+ this._lastSelectionCount > 0 && (K = k.resetRendererState(t, K), t.setRenderTarget(this._renderTargetComposite), t.setClearColor(0, 0), t.clear(), k.restoreRendererState(t, K), this._lastSelectionCount = 0);
159
158
  return;
160
159
  }
161
- this._lastSelectionCount = this._selectionCache.size, K = j.resetRendererAndSceneState(t, r, K);
162
- let i = t.getDrawingBufferSize(Ft);
160
+ this._lastSelectionCount = this._selectionCache.size, K = k.resetRendererAndSceneState(t, r, K);
161
+ let i = t.getDrawingBufferSize(jt);
163
162
  this.setSize(i.width, i.height), t.setClearColor(16777215, 1);
164
163
  let a = r.name;
165
164
  t.setRenderTarget(this._renderTargetDepthBuffer), t.setRenderObjectFunction((e, n, r, i, a, o, s, c) => {
@@ -172,33 +171,33 @@ var G = /* @__PURE__ */ new Ee(), Ft = /* @__PURE__ */ new g(), It = /* @__PURE_
172
171
  let a = e.isSprite ? this._prepareMaskSpriteMaterial : this._prepareMaskMaterial;
173
172
  t.renderObject(e, n, r, i, a, o, s, c);
174
173
  }
175
- }), r.name = "Outline [ Selected Objects Pass ]", t.render(r, n), t.setRenderObjectFunction(K.renderObjectFunction), this._selectionCache.clear(), r.name = a, G.material = this._materialCopy, G.name = "Outline [ Downsample ]", t.setRenderTarget(this._renderTargetMaskDownSampleBuffer), G.render(t), G.material = this._edgeDetectionMaterial, G.name = "Outline [ Edge Detection ]", t.setRenderTarget(this._renderTargetEdgeBuffer1), G.render(t), this._blurColorTextureUniform.value = this._renderTargetEdgeBuffer1.texture, this._blurDirection.value.copy(It), G.material = this._separableBlurMaterial, G.name = "Outline [ Blur Half Resolution ]", t.setRenderTarget(this._renderTargetBlurBuffer1), G.render(t), this._blurColorTextureUniform.value = this._renderTargetBlurBuffer1.texture, this._blurDirection.value.copy(Lt), t.setRenderTarget(this._renderTargetEdgeBuffer1), G.render(t), this._blurColorTextureUniform.value = this._renderTargetEdgeBuffer1.texture, this._blurDirection.value.copy(It), G.material = this._separableBlurMaterial2, G.name = "Outline [ Blur Quarter Resolution ]", t.setRenderTarget(this._renderTargetBlurBuffer2), G.render(t), this._blurColorTextureUniform.value = this._renderTargetBlurBuffer2.texture, this._blurDirection.value.copy(Lt), t.setRenderTarget(this._renderTargetEdgeBuffer2), G.render(t), G.material = this._compositeMaterial, G.name = "Outline [ Blur Quarter Resolution ]", t.setRenderTarget(this._renderTargetComposite), G.render(t), j.restoreRendererAndSceneState(t, r, K);
174
+ }), r.name = "Outline [ Selected Objects Pass ]", t.render(r, n), t.setRenderObjectFunction(K.renderObjectFunction), this._selectionCache.clear(), r.name = a, G.material = this._materialCopy, G.name = "Outline [ Downsample ]", t.setRenderTarget(this._renderTargetMaskDownSampleBuffer), G.render(t), G.material = this._edgeDetectionMaterial, G.name = "Outline [ Edge Detection ]", t.setRenderTarget(this._renderTargetEdgeBuffer1), G.render(t), this._blurColorTextureUniform.value = this._renderTargetEdgeBuffer1.texture, this._blurDirection.value.copy(Mt), G.material = this._separableBlurMaterial, G.name = "Outline [ Blur Half Resolution ]", t.setRenderTarget(this._renderTargetBlurBuffer1), G.render(t), this._blurColorTextureUniform.value = this._renderTargetBlurBuffer1.texture, this._blurDirection.value.copy(Nt), t.setRenderTarget(this._renderTargetEdgeBuffer1), G.render(t), this._blurColorTextureUniform.value = this._renderTargetEdgeBuffer1.texture, this._blurDirection.value.copy(Mt), G.material = this._separableBlurMaterial2, G.name = "Outline [ Blur Quarter Resolution ]", t.setRenderTarget(this._renderTargetBlurBuffer2), G.render(t), this._blurColorTextureUniform.value = this._renderTargetBlurBuffer2.texture, this._blurDirection.value.copy(Nt), t.setRenderTarget(this._renderTargetEdgeBuffer2), G.render(t), G.material = this._compositeMaterial, G.name = "Outline [ Blur Quarter Resolution ]", t.setRenderTarget(this._renderTargetComposite), G.render(t), k.restoreRendererAndSceneState(t, r, K);
176
175
  }
177
176
  setup() {
178
177
  let e = () => {
179
- let e = this._depthTextureUniform.sample(St), t;
180
- return t = this.camera.isPerspectiveCamera ? mt(e, this._cameraNear, this._cameraFar) : ut(e, this._cameraNear, this._cameraFar), U(0, ht.z.lessThanEqual(t).select(1, 0), 1);
178
+ let e = this._depthTextureUniform.sample(vt), t;
179
+ return t = this.camera.isPerspectiveCamera ? ut(e, this._cameraNear, this._cameraFar) : ot(e, this._cameraNear, this._cameraFar), U(0, dt.z.lessThanEqual(t).select(1, 0), 1);
181
180
  };
182
181
  this._prepareMaskMaterial.colorNode = e(), this._prepareMaskMaterial.needsUpdate = !0, this._prepareMaskSpriteMaterial.colorNode = e(), this._prepareMaskSpriteMaterial.needsUpdate = !0, this._materialCopy.fragmentNode = this._maskTextureUniform, this._materialCopy.needsUpdate = !0;
183
- let t = M(() => {
184
- let e = At(this._maskTextureDownsSampleUniform), t = H(1).div(e).toVar(), n = W(1, 0, 0, 1).mul(W(t, t)), r = jt(), i = this._maskTextureDownsSampleUniform.sample(r.add(n.xy)).toVar(), a = this._maskTextureDownsSampleUniform.sample(r.sub(n.xy)).toVar(), o = this._maskTextureDownsSampleUniform.sample(r.add(n.yw)).toVar(), s = this._maskTextureDownsSampleUniform.sample(r.sub(n.yw)).toVar(), c = H(R(i.r.sub(a.r), .5), R(o.r.sub(s.r), .5)).length();
185
- return W(rt(rt(i.g, a.g), rt(o.g, s.g)).oneMinus().greaterThan(.001).select(this._visibleEdgeColor, this._hiddenEdgeColor), 1).mul(c);
182
+ let t = A(() => {
183
+ let e = Et(this._maskTextureDownsSampleUniform), t = H(1).div(e).toVar(), n = W(1, 0, 0, 1).mul(W(t, t)), r = Dt(), i = this._maskTextureDownsSampleUniform.sample(r.add(n.xy)).toVar(), a = this._maskTextureDownsSampleUniform.sample(r.sub(n.xy)).toVar(), o = this._maskTextureDownsSampleUniform.sample(r.add(n.yw)).toVar(), s = this._maskTextureDownsSampleUniform.sample(r.sub(n.yw)).toVar(), c = H(L(i.r.sub(a.r), .5), L(o.r.sub(s.r), .5)).length();
184
+ return W(et(et(i.g, a.g), et(o.g, s.g)).oneMinus().greaterThan(.001).select(this._visibleEdgeColor, this._hiddenEdgeColor), 1).mul(c);
186
185
  });
187
186
  this._edgeDetectionMaterial.fragmentNode = t(), this._edgeDetectionMaterial.needsUpdate = !0;
188
- let n = M(([e, t]) => I(.39894).mul(Je(I(-.5).mul(e).mul(e).div(t.mul(t))).div(t))), r = M(([e]) => {
189
- let t = At(this._maskTextureDownsSampleUniform), r = H(1).div(t).toVar(), i = jt(), a = e.div(2).toVar(), o = n(0, a).toVar(), s = this._blurColorTextureUniform.sample(i).mul(o).toVar(), c = this._blurDirection.mul(r).mul(e).div(4).toVar(), l = c.toVar();
190
- return Ae({
191
- start: $e(1),
192
- end: $e(4),
187
+ let n = A(([e, t]) => F(.39894).mul(Ge(F(-.5).mul(e).mul(e).div(t.mul(t))).div(t))), r = A(([e]) => {
188
+ let t = Et(this._maskTextureDownsSampleUniform), r = H(1).div(t).toVar(), i = Dt(), a = e.div(2).toVar(), o = n(0, a).toVar(), s = this._blurColorTextureUniform.sample(i).mul(o).toVar(), c = this._blurDirection.mul(r).mul(e).div(4).toVar(), l = c.toVar();
189
+ return Oe({
190
+ start: Xe(1),
191
+ end: Xe(4),
193
192
  type: "int",
194
193
  condition: "<="
195
194
  }, ({ i: t }) => {
196
- let r = n(e.mul(I(t)).div(4), a), u = this._blurColorTextureUniform.sample(i.add(l)), d = this._blurColorTextureUniform.sample(i.sub(l));
195
+ let r = n(e.mul(F(t)).div(4), a), u = this._blurColorTextureUniform.sample(i.add(l)), d = this._blurColorTextureUniform.sample(i.sub(l));
197
196
  s.addAssign(u.add(d).mul(r)), o.addAssign(r.mul(2)), l.addAssign(c);
198
197
  }), s.div(o);
199
198
  });
200
199
  this._separableBlurMaterial.fragmentNode = r(this.edgeThicknessNode), this._separableBlurMaterial.needsUpdate = !0, this._separableBlurMaterial2.fragmentNode = r(4), this._separableBlurMaterial2.needsUpdate = !0;
201
- let i = M(() => {
200
+ let i = A(() => {
202
201
  let e = this._edge1TextureUniform, t = this._edge2TextureUniform, n = this._maskTextureUniform, r = e.add(t.mul(this.edgeGlowNode));
203
202
  return n.r.mul(r);
204
203
  });
@@ -212,7 +211,7 @@ var G = /* @__PURE__ */ new Ee(), Ft = /* @__PURE__ */ new g(), It = /* @__PURE_
212
211
  (e.isMesh || e.isSprite) && this._selectionCache.add(e);
213
212
  });
214
213
  }
215
- }, zt = (e, t, n) => new Rt(e, t, n), Bt = class {}, Vt = class e extends Bt {
214
+ }, Ft = (e, t, n) => new Pt(e, t, n), It = class {}, Lt = class e extends It {
216
215
  static {
217
216
  this.passId = "OutlineRenderPass";
218
217
  }
@@ -225,36 +224,36 @@ var G = /* @__PURE__ */ new Ee(), Ft = /* @__PURE__ */ new g(), It = /* @__PURE_
225
224
  setOutlineColors(e, n) {
226
225
  this.visibleEdgeColor.value = new t(e), this.hiddenEdgeColor.value = new t(n);
227
226
  }
228
- assemble(e, t, n, r) {
229
- let { visibleEdge: i, hiddenEdge: a } = zt(t, n, {
227
+ assemble(e, t, n, r, i) {
228
+ let { visibleEdge: a, hiddenEdge: o } = Ft(n, r, {
230
229
  selectedObjects: this.selectedObjects,
231
230
  edgeThickness: this.edgeThickness,
232
231
  edgeGlow: this.edgeGlow
233
- }), o = i.mul(this.visibleEdgeColor).add(a.mul(this.hiddenEdgeColor)).mul(this.edgeStrength);
234
- return r === "outline" ? W(0, 0, 0, 0).add(o) : e.add(o);
232
+ }), s = a.mul(this.visibleEdgeColor).add(o.mul(this.hiddenEdgeColor)).mul(this.edgeStrength);
233
+ return i === "outline" ? W(0, 0, 0, 0).add(s) : t.add(s);
235
234
  }
236
235
  addParametersToGUI(e, t) {
237
236
  let n = e.addFolder("Outline Settings");
238
- n.add(this.edgeStrength, "value", .01, 10).name("edgeStrength").onChange(() => t()), n.add(this.edgeGlow, "value", 0, 1).name("edgeGlow").onChange(() => t()), n.add(this.edgeThickness, "value", 1, 4).name("edgeThickness").onChange(() => t()), n.addColor({ color: this.visibleEdgeColor.value.getHex(de) }, "color").name("visibleEdgeColor").onChange((e) => {
237
+ n.add(this.edgeStrength, "value", .01, 10).name("edgeStrength").onChange(() => t()), n.add(this.edgeGlow, "value", 0, 1).name("edgeGlow").onChange(() => t()), n.add(this.edgeThickness, "value", 1, 4).name("edgeThickness").onChange(() => t()), n.addColor({ color: this.visibleEdgeColor.value.getHex(ue) }, "color").name("visibleEdgeColor").onChange((e) => {
239
238
  this.visibleEdgeColor.value.set(e), t();
240
- }), n.addColor({ color: this.hiddenEdgeColor.value.getHex(de) }, "color").name("hiddenEdgeColor").onChange((e) => {
239
+ }), n.addColor({ color: this.hiddenEdgeColor.value.getHex(ue) }, "color").name("hiddenEdgeColor").onChange((e) => {
241
240
  this.hiddenEdgeColor.value.set(e), t();
242
241
  });
243
242
  }
244
- }, Ht = class {
243
+ }, Rt = class {
245
244
  constructor(e, t) {
246
245
  this.uid = e, this.cid = e.match(/^(.*):f(\d+)$/)[1], this.name = t, this.timestamp = 0, this.cpu = 0, this.gpu = 0, this.fps = 0, this.children = [], this.parent = null;
247
246
  }
248
- }, Ut = class extends Ht {
247
+ }, zt = class extends Rt {
249
248
  constructor(e, t, n, r) {
250
249
  let i = t.name;
251
250
  i === "" && (t.isScene ? i = "Scene" : t.isQuadMesh && (i = "QuadMesh")), super(e, i), this.scene = t, this.camera = n, this.renderTarget = r, this.isRenderStats = !0;
252
251
  }
253
- }, Wt = class extends Ht {
252
+ }, Bt = class extends Rt {
254
253
  constructor(e, t) {
255
254
  super(e, t.name), this.computeNode = t, this.isComputeStats = !0;
256
255
  }
257
- }, Gt = class extends be {
256
+ }, Vt = class extends ye {
258
257
  constructor() {
259
258
  super(), this.currentFrame = null, this.currentRender = null, this.currentNodes = null, this.lastFrame = null, this.frames = [], this.framesLib = {}, this.maxFrames = 512, this._lastFinishTime = 0, this._resolveTimestampPromise = null, this.isRendererInspector = !0;
260
259
  }
@@ -302,8 +301,8 @@ var G = /* @__PURE__ */ new Ee(), Ft = /* @__PURE__ */ new g(), It = /* @__PURE_
302
301
  return this._resolveTimestampPromise === null && (this._resolveTimestampPromise = new Promise((e) => {
303
302
  requestAnimationFrame(async () => {
304
303
  let t = this.getRenderer();
305
- await t.resolveTimestampsAsync(ae.COMPUTE), await t.resolveTimestampsAsync(ae.RENDER);
306
- let n = t.backend.getTimestampFrames(ae.COMPUTE), r = t.backend.getTimestampFrames(ae.RENDER), i = [...new Set([...n, ...r])];
304
+ await t.resolveTimestampsAsync(E.COMPUTE), await t.resolveTimestampsAsync(E.RENDER);
305
+ let n = t.backend.getTimestampFrames(E.COMPUTE), r = t.backend.getTimestampFrames(E.RENDER), i = [...new Set([...n, ...r])];
307
306
  for (let e of i) {
308
307
  let i = this.getFrameById(e);
309
308
  if (i !== null) {
@@ -343,7 +342,7 @@ var G = /* @__PURE__ */ new Ee(), Ft = /* @__PURE__ */ new g(), It = /* @__PURE_
343
342
  beginCompute(e, t) {
344
343
  let n = this.getFrame();
345
344
  if (!n) return;
346
- let r = new Wt(e, t);
345
+ let r = new Bt(e, t);
347
346
  r.timestamp = performance.now(), r.parent = this.currentCompute || this.getParent(), n.computes.push(r), this.currentRender === null ? n.children.push(r) : this.currentRender.children.push(r), this.currentCompute = r;
348
347
  }
349
348
  finishCompute() {
@@ -354,7 +353,7 @@ var G = /* @__PURE__ */ new Ee(), Ft = /* @__PURE__ */ new g(), It = /* @__PURE_
354
353
  beginRender(e, t, n, r) {
355
354
  let i = this.getFrame();
356
355
  if (!i) return;
357
- let a = new Ut(e, t, n, r);
356
+ let a = new zt(e, t, n, r);
358
357
  a.timestamp = performance.now(), a.parent = this.getParent(), i.renders.push(a), this.currentRender === null ? i.children.push(a) : this.currentRender.children.push(a), this.currentRender = a;
359
358
  }
360
359
  finishRender() {
@@ -362,15 +361,15 @@ var G = /* @__PURE__ */ new Ee(), Ft = /* @__PURE__ */ new g(), It = /* @__PURE_
362
361
  let e = this.currentRender;
363
362
  e.cpu = performance.now() - e.timestamp, this.currentRender = e.parent;
364
363
  }
365
- }, Kt = class {
364
+ }, Ht = class {
366
365
  static init() {
367
366
  if (document.getElementById("profiler-styles")) return;
368
367
  let e = document.createElement("style");
369
368
  e.id = "profiler-styles", e.textContent = "\n:root {\n --profiler-bg: #1e1e24f5;\n --profiler-header-bg: #2a2a33aa;\n --profiler-header: #2a2a33;\n --profiler-border: #4a4a5a;\n --text-primary: #e0e0e0;\n --text-secondary: #9a9aab;\n --accent-color: #00aaff;\n --color-green: #4caf50;\n --color-yellow: #ffc107;\n --color-red: #f44336;\n --color-fps: rgb(63, 81, 181);\n --color-call: rgba(255, 185, 34, 1);\n --font-family: 'Inter', 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n --font-mono: 'Fira Code', 'Courier New', Courier, monospace;\n}\n\n@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;600&family=Fira+Code&display=swap');\n\n#profiler-panel *, #profiler-toggle * {\n text-transform: initial;\n line-height: normal;\n box-sizing: border-box;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n#profiler-toggle {\n position: fixed;\n top: 15px;\n right: 15px;\n background-color: rgba(30, 30, 36, 0.85);\n border: 1px solid #4a4a5a54;\n border-radius: 12px 6px 6px 12px;\n color: var(--text-primary);\n cursor: pointer;\n z-index: 1001;\n transition: all 0.2s ease-in-out;\n /*font-size: 14px;*/\n font-size: 15px;\n backdrop-filter: blur(8px);\n box-shadow: 0 4px 15px rgba(0, 0, 0, 0.3);\n display: flex;\n align-items: stretch;\n padding: 0;\n overflow: hidden;\n font-family: var(--font-family);\n}\n\n#profiler-toggle.position-right.panel-open {\n right: auto;\n left: 15px;\n border-radius: 6px 12px 12px 6px;\n flex-direction: row-reverse;\n}\n\n#profiler-toggle.position-right.panel-open #builtin-tabs-container {\n border-right: none;\n border-left: 1px solid #262636;\n}\n\n#profiler-toggle:hover {\n border-color: var(--accent-color);\n}\n\n#profiler-toggle.panel-open #toggle-icon {\n background-color: rgba(0, 170, 255, 0.2);\n color: var(--accent-color);\n}\n\n#toggle-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 40px;\n font-size: 20px;\n transition: background-color 0.2s;\n}\n\n#profiler-toggle:hover #toggle-icon {\n background-color: rgba(255, 255, 255, 0.05);\n}\n\n#profiler-toggle.panel-open:hover #toggle-icon {\n background-color: rgba(0, 170, 255, 0.3);\n}\n\n.toggle-separator {\n width: 1px;\n background-color: var(--profiler-border);\n}\n\n#toggle-text {\n display: flex;\n align-items: baseline;\n padding: 8px 14px;\n min-width: 80px;\n justify-content: right;\n}\n\n#toggle-text .fps-label {\n font-size: 0.7em;\n margin-left: 10px;\n color: #999;\n}\n\n#builtin-tabs-container {\n display: flex;\n align-items: stretch;\n gap: 0;\n border-right: 1px solid #262636;\n order: -1;\n}\n\n.builtin-tab-btn {\n background: transparent;\n border: none;\n color: var(--text-secondary);\n cursor: pointer;\n padding: 8px 14px;\n font-family: var(--font-family);\n font-size: 13px;\n font-weight: 600;\n transition: all 0.2s;\n display: flex;\n align-items: center;\n justify-content: center;\n min-width: 32px;\n position: relative;\n}\n\n.builtin-tab-btn svg {\n width: 20px;\n height: 20px;\n stroke: currentColor;\n}\n\n.builtin-tab-btn:hover {\n background-color: rgba(255, 255, 255, 0.08);\n color: var(--accent-color);\n}\n\n.builtin-tab-btn:active {\n background-color: rgba(255, 255, 255, 0.12);\n}\n\n.builtin-tab-btn.active {\n background-color: rgba(0, 170, 255, 0.2);\n color: var(--accent-color);\n}\n\n.builtin-tab-btn.active:hover {\n background-color: rgba(0, 170, 255, 0.3);\n}\n\n#profiler-mini-panel {\n position: fixed;\n top: 60px;\n right: 15px;\n background-color: rgba(30, 30, 36, 0.85);\n border: 1px solid #4a4a5a54;\n border-radius: 8px;\n color: var(--text-primary);\n z-index: 9999;\n backdrop-filter: blur(8px);\n box-shadow: 0 6px 24px rgba(0, 0, 0, 0.5);\n font-family: var(--font-family);\n font-size: 11px;\n width: 350px;\n max-height: calc(100vh - 100px);\n overflow-y: auto;\n overflow-x: hidden;\n display: none;\n opacity: 0;\n transform: translateY(-10px) scale(0.98);\n transition: opacity 0.25s cubic-bezier(0.4, 0, 0.2, 1), \n transform 0.25s cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n#profiler-mini-panel.position-right.panel-open {\n right: auto;\n left: 15px;\n}\n\n#profiler-mini-panel.visible {\n display: block;\n opacity: 1;\n transform: translateY(0) scale(1);\n}\n\n#profiler-mini-panel::-webkit-scrollbar {\n width: 6px;\n}\n\n#profiler-mini-panel::-webkit-scrollbar-track {\n background: transparent;\n}\n\n#profiler-mini-panel::-webkit-scrollbar-thumb {\n background: rgba(255, 255, 255, 0.15);\n border-radius: 3px;\n transition: background 0.2s;\n}\n\n#profiler-mini-panel::-webkit-scrollbar-thumb:hover {\n background: rgba(255, 255, 255, 0.25);\n}\n\n.mini-panel-content {\n padding: 0;\n font-size: 11px;\n line-height: 1.5;\n font-family: var(--font-mono);\n letter-spacing: 0.3px;\n user-select: none;\n -webkit-user-select: none;\n}\n\n.mini-panel-content .profiler-content {\n display: block !important;\n background: transparent;\n}\n\n.mini-panel-content .list-scroll-wrapper {\n max-height: calc(100vh - 120px);\n overflow-y: auto;\n overflow-x: hidden;\n width: 100%;\n}\n\n.mini-panel-content .list-scroll-wrapper::-webkit-scrollbar {\n width: 4px;\n}\n\n.mini-panel-content .list-scroll-wrapper::-webkit-scrollbar-track {\n background: transparent;\n}\n\n.mini-panel-content .list-scroll-wrapper::-webkit-scrollbar-thumb {\n background: rgba(255, 255, 255, 0.1);\n border-radius: 2px;\n}\n\n.mini-panel-content .list-scroll-wrapper::-webkit-scrollbar-thumb:hover {\n background: rgba(255, 255, 255, 0.2);\n}\n\n.mini-panel-content .parameters {\n background: transparent;\n border: none;\n box-shadow: none;\n padding: 4px;\n}\n\n.mini-panel-content .list-container.parameters {\n padding: 2px 6px 0px 6px !important;\n}\n\n.mini-panel-content .list-header {\n display: none;\n padding: 2px 4px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.mini-panel-content .list-item {\n border-bottom: 1px solid rgba(74, 74, 90, 0.2);\n transition: background-color 0.15s;\n}\n\n.mini-panel-content .list-item:last-child {\n border-bottom: none;\n}\n\n.mini-panel-content .list-item:hover {\n background-color: rgba(255, 255, 255, 0.04);\n}\n\n.mini-panel-content .list-item.actionable:hover {\n background-color: rgba(255, 255, 255, 0.06);\n cursor: pointer;\n}\n\n/* Style adjustments for lil-gui look */\n.mini-panel-content .item-row {\n padding: 3px 8px;\n min-height: 24px;\n}\n\n.mini-panel-content .list-item-row {\n padding: 1px 4px;\n gap: 8px;\n min-height: 21px;\n align-items: center;\n}\n\n.mini-panel-content input[type=\"checkbox\"] {\n width: 12px;\n height: 12px;\n}\n\n.mini-panel-content input[type=\"range\"] {\n height: 18px;\n}\n\n.mini-panel-content .value-number input,\n.mini-panel-content .value-slider input {\n background-color: rgba(0, 0, 0, 0.3);\n border: 1px solid rgba(74, 74, 90, 0.5);\n font-size: 10px;\n}\n\n.mini-panel-content .value-number input:focus,\n.mini-panel-content .value-slider input:focus {\n border-color: var(--accent-color);\n}\n\n.mini-panel-content .value-slider {\n gap: 6px;\n}\n\n/* Compact nested items */\n.mini-panel-content .list-item .list-item {\n margin-left: 8px;\n}\n\n.mini-panel-content .list-item .list-item .item-row,\n.mini-panel-content .list-item .list-item .list-item-row {\n padding: 2px 6px;\n min-height: 22px;\n}\n\n/* Compact collapsible headers */\n.mini-panel-content .collapsible .item-row,\n.mini-panel-content .list-item-row.collapsible {\n padding: 2px 8px;\n font-weight: 600;\n min-height: 16px;\n display: flex;\n align-items: center;\n}\n\n.mini-panel-content .collapsible-icon {\n font-size: 10px;\n width: 14px;\n height: 14px;\n}\n\n.mini-panel-content .param-control input[type=\"range\"] {\n height: 12px;\n margin-top: 1px;\n padding-top: 5px;\n user-select: none;\n -webkit-user-select: none;\n outline: none;\n}\n\n.mini-panel-content .param-control input[type=\"range\"]::-webkit-slider-thumb {\n width: 14px;\n height: 14px;\n margin-top: -5px;\n user-select: none;\n -webkit-user-select: none;\n}\n\n.mini-panel-content .param-control input[type=\"range\"]::-moz-range-thumb {\n width: 14px;\n height: 14px;\n user-select: none;\n -moz-user-select: none;\n}\n\n.mini-panel-content .list-children-container {\n padding-left: 0;\n}\n\n.mini-panel-content .param-control input[type=\"number\"] {\n flex-basis: 60px !important;\n}\n\n.mini-panel-content .param-control {\n align-items: center;\n}\n\n.mini-panel-content .param-control select {\n font-size: 11px;\n}\n\n.mini-panel-content .list-item-wrapper {\n margin-top: 0;\n margin-bottom: 0;\n}\n\n#profiler-panel {\n position: fixed;\n z-index: 1001 !important;\n bottom: 0;\n left: 0;\n right: 0;\n height: 350px;\n background-color: var(--profiler-bg);\n backdrop-filter: blur(8px);\n border-top: 2px solid var(--profiler-border);\n color: var(--text-primary);\n display: flex;\n flex-direction: column;\n z-index: 1000;\n /*box-shadow: 0 -5px 25px rgba(0, 0, 0, 0.5);*/\n transform: translateY(100%);\n transition: transform 0.35s cubic-bezier(0.25, 0.46, 0.45, 0.94), height 0.3s ease-out, width 0.3s ease-out;\n font-family: var(--font-mono);\n}\n\n#profiler-panel.resizing,\n#profiler-panel.dragging {\n transition: none;\n}\n\n#profiler-panel.visible {\n transform: translateY(0);\n}\n\n#profiler-panel.maximized {\n height: 100vh;\n}\n\n/* Position-specific styles */\n#profiler-panel.position-top {\n bottom: auto;\n top: 0;\n border-top: none;\n border-bottom: 2px solid var(--profiler-border);\n transform: translateY(-100%);\n}\n\n#profiler-panel.position-top.visible {\n transform: translateY(0);\n}\n\n#profiler-panel.position-bottom {\n /* Default position - already defined above */\n}\n\n#profiler-panel.position-left {\n top: 0;\n bottom: 0;\n left: 0;\n right: auto;\n width: 350px;\n height: 100%;\n border-top: none;\n border-right: 2px solid var(--profiler-border);\n transform: translateX(-100%);\n}\n\n#profiler-panel.position-left.visible {\n transform: translateX(0);\n}\n\n#profiler-panel.position-right {\n top: 0;\n bottom: 0;\n left: auto;\n right: 0;\n width: 350px;\n height: 100%;\n border-top: none;\n border-left: 2px solid var(--profiler-border);\n transform: translateX(100%);\n}\n\n#profiler-panel.position-right.visible {\n transform: translateX(0);\n}\n\n#profiler-panel.position-floating {\n border: 2px solid var(--profiler-border);\n border-radius: 8px;\n box-shadow: 0 8px 32px rgba(0, 0, 0, 0.4);\n transform: none !important;\n overflow: hidden;\n}\n\n#profiler-panel.position-floating.visible {\n transform: none !important;\n}\n\n#profiler-panel.position-floating .profiler-header {\n border-radius: 6px 6px 0 0;\n}\n\n#profiler-panel.position-floating .panel-resizer {\n bottom: 0;\n right: 0;\n top: auto;\n left: auto;\n width: 16px;\n height: 16px;\n cursor: nwse-resize;\n border-radius: 0 0 6px 0;\n}\n\n#profiler-panel.position-floating .panel-resizer::after {\n content: '';\n position: absolute;\n right: 2px;\n bottom: 2px;\n width: 10px;\n height: 10px;\n background: linear-gradient(135deg, transparent 0%, transparent 45%, var(--profiler-border) 45%, var(--profiler-border) 55%, transparent 55%);\n}\n\n\n.panel-resizer {\n position: absolute;\n top: -2px;\n left: 0;\n width: 100%;\n height: 5px;\n cursor: ns-resize;\n z-index: 1001;\n touch-action: none;\n}\n\n#profiler-panel.position-top .panel-resizer {\n top: auto;\n bottom: -2px;\n}\n\n#profiler-panel.position-left .panel-resizer {\n top: 0;\n left: auto;\n right: -2px;\n width: 5px;\n height: 100%;\n cursor: ew-resize;\n}\n\n#profiler-panel.position-right .panel-resizer {\n top: 0;\n left: -2px;\n right: auto;\n width: 5px;\n height: 100%;\n cursor: ew-resize;\n}\n\n.profiler-header {\n display: flex;\n background-color: var(--profiler-header-bg);\n border-bottom: 1px solid var(--profiler-border);\n flex-shrink: 0;\n justify-content: space-between;\n align-items: stretch;\n\n overflow-x: auto;\n overflow-y: hidden;\n width: calc(100% - 134px);\n height: 38px;\n user-select: none;\n -webkit-user-select: none;\n}\n\n/* Adjust header width based on panel position */\n#profiler-panel.position-right .profiler-header,\n#profiler-panel.position-left .profiler-header {\n width: calc(100% - 134px);\n}\n\n#profiler-panel.position-bottom .profiler-header,\n#profiler-panel.position-top .profiler-header {\n width: calc(100% - 134px);\n}\n\n/* Adjust header width when position toggle button is hidden (mobile) */\n#profiler-panel.hide-position-toggle .profiler-header {\n width: calc(100% - 90px);\n}\n\n/* ===== RULES FOR WHEN THERE ARE NO TABS ===== */\n\n/* Horizontal mode (bottom/top) without tabs */\n#profiler-panel.position-bottom.no-tabs:not(.maximized),\n#profiler-panel.position-top.no-tabs:not(.maximized) {\n height: 38px !important;\n min-height: 38px !important;\n}\n\n#profiler-panel.position-bottom.no-tabs .profiler-header,\n#profiler-panel.position-top.no-tabs .profiler-header {\n width: 100%;\n height: 38px;\n border-bottom: none;\n}\n\n#profiler-panel.position-bottom.no-tabs .profiler-content-wrapper,\n#profiler-panel.position-top.no-tabs .profiler-content-wrapper {\n display: none;\n}\n\n#profiler-panel.position-bottom.no-tabs .panel-resizer,\n#profiler-panel.position-top.no-tabs .panel-resizer {\n display: none;\n}\n\n/* Vertical mode (right/left) without tabs */\n#profiler-panel.position-right.no-tabs:not(.maximized),\n#profiler-panel.position-left.no-tabs:not(.maximized) {\n width: 45px !important;\n min-width: 45px !important;\n}\n\n/* Vertical layout for header when no tabs */\n#profiler-panel.position-right.no-tabs .profiler-header,\n#profiler-panel.position-left.no-tabs .profiler-header {\n width: 100%;\n flex-direction: column;\n height: 100%;\n border-bottom: none;\n}\n\n/* Vertical layout for controls when no tabs */\n#profiler-panel.position-right.no-tabs .profiler-controls,\n#profiler-panel.position-left.no-tabs .profiler-controls {\n position: static;\n flex-direction: column-reverse;\n justify-content: flex-end;\n width: 100%;\n height: 100%;\n border-bottom: none;\n border-left: none;\n background: transparent;\n}\n\n#profiler-panel.position-right.no-tabs .profiler-controls button,\n#profiler-panel.position-left.no-tabs .profiler-controls button {\n width: 100%;\n height: 45px;\n border-left: none;\n border-top: none;\n border-bottom: 1px solid var(--profiler-border);\n}\n\n#profiler-panel.position-right.no-tabs .profiler-content-wrapper,\n#profiler-panel.position-left.no-tabs .profiler-content-wrapper {\n display: none;\n}\n\n#profiler-panel.position-right.no-tabs .profiler-tabs,\n#profiler-panel.position-left.no-tabs .profiler-tabs {\n display: none;\n}\n\n#profiler-panel.position-right.no-tabs .panel-resizer,\n#profiler-panel.position-left.no-tabs .panel-resizer {\n display: none;\n}\n\n/* Hide position toggle on mobile without tabs */\n#profiler-panel.hide-position-toggle.position-right.no-tabs:not(.maximized),\n#profiler-panel.hide-position-toggle.position-left.no-tabs:not(.maximized) {\n width: 45px !important;\n min-width: 45px !important;\n}\n\n/* Hide drag indicator on mobile devices */\n#profiler-panel.is-mobile .tab-btn.active::before {\n display: none;\n}\n\n.profiler-header::-webkit-scrollbar {\n width: 8px;\n height: 8px;\n}\n\n.profiler-header::-webkit-scrollbar-track {\n background: transparent;\n}\n\n.profiler-header::-webkit-scrollbar-thumb {\n background-color: rgba(0, 0, 0, 0.25);\n border-radius: 10px;\n transition: background 0.3s ease;\n}\n\n.profiler-header::-webkit-scrollbar-thumb:hover {\n background-color: rgba(0, 0, 0, 0.4);\n}\n\n.profiler-header::-webkit-scrollbar-corner {\n background: transparent;\n}\n\n#profiler-panel.dragging .profiler-header {\n cursor: grabbing !important;\n}\n\n#profiler-panel.dragging {\n opacity: 0.8;\n}\n\n.profiler-tabs {\n display: flex;\n cursor: grab;\n position: relative;\n}\n\n.profiler-tabs:active {\n cursor: grabbing;\n}\n\n.profiler-tabs::-webkit-scrollbar {\n width: 8px;\n height: 8px;\n}\n\n.profiler-tabs::-webkit-scrollbar-track {\n background: transparent;\n}\n\n.profiler-tabs::-webkit-scrollbar-thumb {\n background-color: rgba(0, 0, 0, 0.25);\n border-radius: 10px;\n transition: background 0.3s ease;\n}\n\n.profiler-tabs::-webkit-scrollbar-thumb:hover {\n background-color: rgba(0, 0, 0, 0.4);\n}\n\n.profiler-tabs::-webkit-scrollbar-corner {\n background: transparent;\n}\n\n.profiler-controls {\n display: flex;\n position: absolute;\n right: 0;\n top: 0;\n height: 38px;\n background: var(--profiler-header-bg);\n border-bottom: 1px solid var(--profiler-border);\n}\n\n.tab-btn {\n position: relative;\n background: transparent;\n border: none;\n /*border-right: 1px solid var(--profiler-border);*/\n color: var(--text-secondary);\n padding: 8px 18px;\n cursor: default;\n display: flex;\n align-items: center;\n font-family: var(--font-family);\n font-weight: 600;\n font-size: 14px;\n user-select: none;\n transition: opacity 0.2s, transform 0.2s;\n touch-action: pan-x;\n}\n\n.tab-btn.active {\n border-bottom: 2px solid var(--accent-color);\n color: white;\n}\n\n.tab-btn.active::before {\n content: '⋮⋮';\n position: absolute;\n left: 3px;\n top: calc(50% - .1rem);\n transform: translateY(-50%);\n color: var(--profiler-border);\n font-size: 18px;\n letter-spacing: -2px;\n opacity: 0.6;\n}\n\n.tab-btn.no-detach.active::before {\n display: none;\n}\n\n#floating-btn,\n#maximize-btn,\n#hide-panel-btn {\n background: transparent;\n border: none;\n border-left: 1px solid var(--profiler-border);\n color: var(--text-secondary);\n width: 45px;\n height: 100%;\n cursor: pointer;\n transition: all 0.2s;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n/* Disable transitions in vertical mode to avoid broken animations */\n#profiler-panel.position-right #floating-btn,\n#profiler-panel.position-right #maximize-btn,\n#profiler-panel.position-right #hide-panel-btn,\n#profiler-panel.position-left #floating-btn,\n#profiler-panel.position-left #maximize-btn,\n#profiler-panel.position-left #hide-panel-btn {\n transition: background-color 0.2s, color 0.2s;\n}\n\n#floating-btn:hover,\n#maximize-btn:hover,\n#hide-panel-btn:hover {\n background-color: rgba(255, 255, 255, 0.1);\n color: var(--text-primary);\n}\n\n/* Hide maximize button when there are no tabs */\n#profiler-panel.position-right.no-tabs #maximize-btn,\n#profiler-panel.position-left.no-tabs #maximize-btn,\n#profiler-panel.position-bottom.no-tabs #maximize-btn,\n#profiler-panel.position-top.no-tabs #maximize-btn {\n display: none !important;\n}\n\n.profiler-content-wrapper {\n flex-grow: 1;\n overflow: hidden;\n position: relative;\n}\n\n.profiler-content {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n overflow-y: auto;\n font-size: 13px;\n visibility: hidden;\n opacity: 0;\n transition: opacity 0.2s, visibility 0.2s;\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n user-select: none;\n -webkit-user-select: none;\n}\n\n.profiler-content.active {\n visibility: visible;\n opacity: 1;\n}\n\n.profiler-content {\n overflow: auto; /* make sure scrollbars can appear */\n}\n\n.profiler-content::-webkit-scrollbar {\n width: 8px;\n height: 8px;\n}\n\n.profiler-content::-webkit-scrollbar-track {\n background: transparent;\n}\n\n.profiler-content::-webkit-scrollbar-thumb {\n background-color: rgba(0, 0, 0, 0.25);\n border-radius: 10px;\n transition: background 0.3s ease;\n}\n\n.profiler-content::-webkit-scrollbar-thumb:hover {\n background-color: rgba(0, 0, 0, 0.4);\n}\n\n.profiler-content::-webkit-scrollbar-corner {\n background: transparent;\n}\n\n.profiler-content {\n scrollbar-width: thin; /* \"auto\" | \"thin\" */\n scrollbar-color: rgba(0, 0, 0, 0.25) transparent;\n}\n\n.list-item-row {\n display: grid;\n align-items: center;\n padding: 4px 8px;\n border-radius: 3px;\n transition: background-color 0.2s;\n gap: 10px;\n border-bottom: none;\n user-select: none;\n -webkit-user-select: none;\n}\n\n.parameters .list-item-row {\n min-height: 31px;\n}\n\n.mini-panel-content .parameters .list-item-row {\n min-height: 21px;\n}\n\n.list-item-wrapper {\n margin-top: 2px;\n margin-bottom: 2px;\n user-select: none;\n -webkit-user-select: none;\n}\n\n.list-item-wrapper:first-child {\n /*margin-top: 0;*/\n}\n\n.list-item-wrapper:not(.header-wrapper):nth-child(odd) > .list-item-row {\n background-color: rgba(0,0,0,0.1);\n}\n\n.list-item-wrapper.header-wrapper>.list-item-row {\n color: var(--accent-color);\n background-color: rgba(0, 170, 255, 0.1);\n}\n\n.list-item-wrapper.header-wrapper>.list-item-row>.list-item-cell:first-child {\n font-weight: 600;\n line-height: 1;\n}\n\n.list-item-row.collapsible,\n.list-item-row.actionable {\n cursor: pointer;\n}\n\n.list-item-row.collapsible {\n background-color: rgba(0, 170, 255, 0.15) !important;\n min-height: 23px;\n}\n\n.list-item-row.collapsible.alert,\n.list-item-row.alert {\n background-color: rgba(244, 67, 54, 0.1) !important;\n}\n\n@media (hover: hover) {\n\n .list-item-row:hover:not(.collapsible):not(.no-hover),\n .list-item-row:hover:not(.no-hover),\n .list-item-row.actionable:hover,\n .list-item-row.collapsible.actionable:hover {\n background-color: rgba(255, 255, 255, 0.05) !important;\n }\n\n .list-item-row.collapsible:hover {\n background-color: rgba(0, 170, 255, 0.25) !important;\n }\n\n}\n\n.list-item-cell {\n white-space: pre;\n display: flex;\n align-items: center;\n user-select: none;\n -webkit-user-select: none;\n}\n\n.list-item-cell:not(:first-child) {\n justify-content: flex-end;\n font-weight: 600;\n}\n\n.list-header {\n display: grid;\n align-items: center;\n padding: 4px 8px;\n font-weight: 600;\n color: var(--text-secondary);\n padding-bottom: 6px;\n border-bottom: 1px solid var(--profiler-border);\n margin-bottom: 5px;\n gap: 10px;\n user-select: none;\n -webkit-user-select: none;\n}\n\n.list-item-wrapper.section-start {\n margin-top: 5px;\n margin-bottom: 5px;\n}\n\n.list-header .list-header-cell:not(:first-child) {\n text-align: right;\n}\n\n.list-children-container {\n padding-left: 1.5em;\n overflow: hidden;\n transition: max-height 0.1s ease-out;\n margin-top: 2px;\n}\n\n.list-children-container.closed {\n max-height: 0;\n}\n\n.item-toggler {\n display: inline-block;\n margin-right: 0.8em;\n text-align: left;\n}\n\n.list-item-row.open .item-toggler::before {\n content: '-';\n}\n\n.list-item-row:not(.open) .item-toggler::before {\n content: '+';\n}\n\n.list-item-cell .value.good {\n color: var(--color-green);\n}\n\n.list-item-cell .value.warn {\n color: var(--color-yellow);\n}\n\n.list-item-cell .value.bad {\n color: var(--color-red);\n}\n\n.list-scroll-wrapper {\n width: max-content;\n min-width: 100%;\n display: flex;\n flex-direction: column;\n min-height: 100%;\n}\n\n.list-container.parameters .list-item-row:not(.collapsible) {\n}\n\n.graph-container {\n width: 100%;\n box-sizing: border-box;\n padding: 8px 0;\n position: relative;\n}\n\n.graph-svg {\n width: 100%;\n height: 80px;\n background-color: var(--profiler-header);\n border: 1px solid var(--profiler-border);\n border-radius: 4px;\n}\n\n.graph-path {\n stroke-width: 2;\n fill-opacity: 0.4;\n}\n\n.console-header {\n padding: 10px;\n border-bottom: 1px solid var(--profiler-border);\n display: flex;\n gap: 20px;\n flex-shrink: 0;\n align-items: center;\n justify-content: space-between;\n}\n\n.console-buttons-group {\n display: flex;\n gap: 20px;\n}\n\n.console-filter-input {\n background-color: var(--profiler-bg);\n border: 1px solid var(--profiler-border);\n color: var(--text-primary);\n border-radius: 4px;\n padding: 4px 8px;\n font-family: var(--font-mono);\n flex-grow: 1;\n max-width: 300px;\n border-radius: 15px;\n}\n\n.console-filter-input:focus {\n outline: none;\n border-color: var(--text-secondary);\n}\n\n.console-copy-button {\n background: transparent;\n border: none;\n color: var(--text-secondary);\n cursor: pointer;\n padding: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 4px;\n transition: color 0.2s, background-color 0.2s;\n}\n\n.console-copy-button:hover {\n color: var(--text-primary);\n background-color: var(--profiler-hover);\n}\n\n.console-copy-button.copied {\n color: var(--color-green);\n}\n\n#console-log {\n display: flex;\n flex-direction: column;\n gap: 4px;\n padding: 10px;\n overflow-y: auto;\n flex-grow: 1;\n user-select: text;\n -webkit-user-select: text;\n}\n\n.log-message {\n padding: 2px 5px;\n white-space: pre-wrap;\n word-break: break-all;\n border-radius: 3px;\n line-height: 1.5 !important;\n}\n\n.log-message.hidden {\n display: none;\n}\n\n.log-message.info {\n color: var(--text-primary);\n}\n\n.log-message.warn {\n color: var(--color-yellow);\n}\n\n.log-message.error {\n color: #f9dedc;\n background-color: rgba(244, 67, 54, 0.1);\n}\n\n.log-prefix {\n color: var(--text-secondary);\n margin-right: 8px;\n}\n\n.log-code {\n background-color: rgba(255, 255, 255, 0.1);\n border-radius: 3px;\n padding: 1px 4px;\n}\n\n.thumbnail-container {\n display: flex;\n align-items: center;\n}\n\n.thumbnail-svg {\n width: 40px;\n height: 22.5px;\n flex-shrink: 0;\n margin-right: 8px;\n}\n\n.param-control {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: 10px;\n width: 100%;\n}\n\n.param-control input,\n.param-control select,\n.param-control button {\n background-color: var(--profiler-bg);\n border: 1px solid var(--profiler-border);\n color: var(--text-primary);\n border-radius: 4px;\n padding: 4px 6px;\n padding-bottom: 2px;\n font-family: var(--font-mono);\n width: 100%;\n box-sizing: border-box;\n}\n\n.param-control input:focus {\n outline: none;\n border-color: var(--accent-color);\n}\n\n.param-control select {\n padding-top: 3px;\n padding-bottom: 1px;\n}\n\n.param-control input[type=\"number\"] {\n cursor: ns-resize;\n}\n\n.param-control input[type=\"color\"] {\n padding: 2px;\n}\n\n.param-control button {\n cursor: pointer;\n transition: background-color 0.2s;\n}\n\n.param-control button:hover {\n background-color: var(--profiler-header);\n}\n\n.param-control-vector {\n display: flex;\n gap: 5px;\n}\n\n.custom-checkbox {\n display: inline-flex;\n align-items: center;\n cursor: pointer;\n gap: 8px;\n will-change: transform;\n}\n\n.custom-checkbox input {\n display: none;\n}\n\n.custom-checkbox .checkmark {\n width: 14px;\n height: 14px;\n border: 1px solid var(--accent-color);\n border-radius: 3px;\n display: inline-flex;\n justify-content: center;\n align-items: center;\n transition: background-color 0.2s, border-color 0.2s;\n}\n\n.custom-checkbox .checkmark::after {\n content: '';\n width: 6px;\n height: 6px;\n background-color: var(--accent-color);\n border-radius: 1px;\n display: block;\n transform: scale(0);\n transition: transform 0.2s;\n}\n\n.custom-checkbox input:checked+.checkmark {\n border-color: var(--accent-color);\n}\n\n.custom-checkbox input:checked+.checkmark::after {\n transform: scale(1);\n}\n\n.param-control input[type=\"range\"] {\n -webkit-appearance: none;\n appearance: none;\n width: 100%;\n height: 16px;\n background: var(--profiler-header);\n border-radius: 5px;\n border: 1px solid var(--profiler-border);\n outline: none;\n padding: 0px;\n padding-top: 8px;\n}\n\n.param-control input[type=\"range\"]::-webkit-slider-thumb {\n -webkit-appearance: none;\n appearance: none;\n width: 18px;\n height: 18px;\n background: var(--profiler-bg);\n border: 1px solid var(--accent-color);\n border-radius: 3px;\n cursor: pointer;\n margin-top: -8px;\n}\n\n.param-control input[type=\"range\"]::-moz-range-thumb {\n width: 18px;\n height: 18px;\n background: var(--profiler-bg);\n border: 2px solid var(--accent-color);\n border-radius: 3px;\n cursor: pointer;\n}\n\n.param-control input[type=\"range\"]::-moz-range-track {\n width: 100%;\n height: 16px;\n background: var(--profiler-header);\n border-radius: 5px;\n border: 1px solid var(--profiler-border);\n}\n\n/* Override .param-control styles for mini-panel-content */\n.mini-panel-content input,\n.mini-panel-content select,\n.mini-panel-content button {\n padding: 2px 4px;\n height: 21px;\n line-height: 1.4;\n padding-top: 4px;\n}\n\n.mini-panel-content .param-control input,\n.mini-panel-content .param-control select,\n.mini-panel-content .param-control button {\n background-color: #1e1e24c2;\n line-height: 1.0;\n}\n\n.mini-panel-content .param-control select {\n padding: 2px 2px;\n padding-top: 3px;\n}\n\n.mini-panel-content .param-control input[type=\"number\"]::-webkit-outer-spin-button,\n.mini-panel-content .param-control input[type=\"number\"]::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n}\n\n.mini-panel-content .param-control input[type=\"number\"] {\n -moz-appearance: textfield;\n}\n\n.mini-panel-content .list-item-cell span {\n position: relative;\n top: 1px;\n margin-left: 2px;\n}\n\n.mini-panel-content .custom-checkbox .checkmark {\n width: 12px;\n height: 12px;\n margin-bottom: 2px;\n will-change: transform;\n}\n\n.mini-panel-content .list-container.parameters .list-item-row:not(.collapsible) {\n margin-bottom: 2px;\n}\n\n@media screen and (max-width: 450px) and (orientation: portrait) {\n\n .console-filter-input {\n max-width: 100px;\n }\n\n}\n\n/* Touch device optimizations */\n@media (hover: none) and (pointer: coarse) {\n\n .panel-resizer {\n top: -10px !important;\n height: 20px !important;\n }\n\n #profiler-panel.position-top .panel-resizer {\n top: auto !important;\n bottom: -10px !important;\n height: 20px !important;\n }\n\n #profiler-panel.position-left .panel-resizer {\n right: -10px !important;\n width: 20px !important;\n height: 100% !important;\n }\n\n #profiler-panel.position-right .panel-resizer {\n left: -10px !important;\n width: 20px !important;\n height: 100% !important;\n }\n\n .detached-tab-resizer-top,\n .detached-tab-resizer-bottom {\n height: 10px !important;\n }\n\n .detached-tab-resizer-left,\n .detached-tab-resizer-right {\n width: 10px !important;\n }\n\n}\n\n.drag-preview-indicator {\n position: fixed;\n background-color: rgba(0, 170, 255, 0.2);\n border: 2px dashed var(--accent-color);\n z-index: 999;\n pointer-events: none;\n transition: all 0.2s ease-out;\n}\n\n/* Detached Tab Windows */\n.detached-tab-panel {\n position: fixed;\n width: 500px;\n height: 400px;\n background: var(--profiler-bg);\n border: 1px solid var(--profiler-border);\n border-radius: 8px;\n box-shadow: 0 10px 40px rgba(0, 0, 0, 0.5);\n z-index: 1002;\n display: flex;\n flex-direction: column;\n backdrop-filter: blur(10px);\n overflow: hidden;\n opacity: 1;\n visibility: visible;\n transition: opacity 0.2s, visibility 0.2s;\n}\n\n#profiler-panel:not(.visible) ~ * .detached-tab-panel,\nbody:has(#profiler-panel:not(.visible)) .detached-tab-panel {\n opacity: 0;\n visibility: hidden;\n pointer-events: none;\n}\n\n.detached-tab-header {\n background: var(--profiler-header-bg);\n padding: 0 7px 0 15px;\n font-family: var(--font-family);\n font-size: 14px;\n color: var(--text-primary);\n font-weight: 600;\n display: flex;\n justify-content: space-between;\n align-items: center;\n border-bottom: 1px solid var(--profiler-border);\n cursor: grab;\n user-select: none;\n height: 38px;\n flex-shrink: 0;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n touch-action: none;\n}\n\n.detached-tab-header:active {\n cursor: grabbing;\n}\n\n.detached-header-controls {\n display: flex;\n gap: 5px;\n}\n\n.detached-reattach-btn {\n background: transparent;\n border: none;\n color: var(--text-secondary);\n font-family: var(--font-family);\n font-size: 18px;\n line-height: 1;\n cursor: pointer;\n padding: 4px 8px;\n border-radius: 4px;\n transition: all 0.2s;\n display: flex;\n align-items: center;\n justify-content: center;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n.detached-reattach-btn:hover {\n background: rgba(0, 170, 255, 0.2);\n color: var(--accent-color);\n}\n\n.detached-tab-content {\n flex: 1;\n overflow: auto;\n position: relative;\n background: var(--profiler-bg);\n}\n\n.detached-tab-content::-webkit-scrollbar {\n width: 8px;\n height: 8px;\n}\n\n.detached-tab-content::-webkit-scrollbar-track {\n background: transparent;\n}\n\n.detached-tab-content::-webkit-scrollbar-thumb {\n background-color: rgba(0, 0, 0, 0.25);\n border-radius: 10px;\n transition: background 0.3s ease;\n}\n\n.detached-tab-content::-webkit-scrollbar-thumb:hover {\n background-color: rgba(0, 0, 0, 0.4);\n}\n\n.detached-tab-content::-webkit-scrollbar-corner {\n background: transparent;\n}\n\n.detached-tab-content .profiler-content {\n display: block !important;\n height: 100%;\n visibility: visible !important;\n opacity: 1 !important;\n position: relative !important;\n}\n\n.detached-tab-content .profiler-content > * {\n font-family: var(--font-mono);\n color: var(--text-primary);\n}\n\n.detached-tab-resizer {\n position: absolute;\n bottom: 0;\n right: 0;\n width: 20px;\n height: 20px;\n cursor: nwse-resize;\n z-index: 10;\n touch-action: none;\n}\n\n.detached-tab-resizer::after {\n content: '';\n position: absolute;\n bottom: 2px;\n right: 2px;\n width: 12px;\n height: 12px;\n border-right: 2px solid var(--profiler-border);\n border-bottom: 2px solid var(--profiler-border);\n border-bottom-right-radius: 6px;\n opacity: 0.5;\n}\n\n.detached-tab-resizer:hover::after {\n opacity: 1;\n border-color: var(--accent-color);\n}\n\n/* Edge resizers */\n.detached-tab-resizer-top {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n height: 5px;\n cursor: ns-resize;\n z-index: 10;\n touch-action: none;\n}\n\n.detached-tab-resizer-right {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n width: 5px;\n cursor: ew-resize;\n z-index: 10;\n touch-action: none;\n}\n\n.detached-tab-resizer-bottom {\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n height: 5px;\n cursor: ns-resize;\n z-index: 10;\n touch-action: none;\n}\n\n.detached-tab-resizer-left {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: 5px;\n cursor: ew-resize;\n z-index: 10;\n touch-action: none;\n}\n\n/* Input number spin buttons - hide arrows */\n/* Chrome, Safari, Edge, Opera */\n#profiler-panel input[type=\"number\"]::-webkit-outer-spin-button,\n#profiler-panel input[type=\"number\"]::-webkit-inner-spin-button,\n.detached-tab-content input[type=\"number\"]::-webkit-outer-spin-button,\n.detached-tab-content input[type=\"number\"]::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n}\n\n/* Firefox */\n#profiler-panel input[type=\"number\"],\n.detached-tab-content input[type=\"number\"] {\n -moz-appearance: textfield;\n}\n\n.panel-action-btn {\n background: transparent;\n color: var(--text-primary);\n border: 1px solid var(--profiler-border);\n border-radius: 4px;\n padding: 6px 12px;\n cursor: pointer;\n font-family: var(--font-family);\n font-size: 12px;\n transition: background-color 0.2s;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.panel-action-btn:hover {\n background-color: rgba(255, 255, 255, 0.05);\n}\n", document.head.appendChild(e);
370
369
  }
371
- }, qt = class extends T {
370
+ }, Ut = class extends ee {
372
371
  constructor(e) {
373
- super(), this.inspector = e, this.tabs = {}, this.activeTabId = null, this.isResizing = !1, this.lastHeightBottom = 350, this.lastWidthRight = 450, this.position = "bottom", this.detachedWindows = [], this.maxZIndex = 1002, this.nextTabOriginalIndex = 0, Kt.init(), this.setupShell(), this.setupResizing(), this.setupWindowResizeListener(), this.setupOrientationListener();
372
+ super(), this.inspector = e, this.tabs = {}, this.activeTabId = null, this.isResizing = !1, this.lastHeightBottom = 350, this.lastWidthRight = 450, this.position = "bottom", this.detachedWindows = [], this.maxZIndex = 1002, this.nextTabOriginalIndex = 0, Ht.init(), this.setupShell(), this.setupResizing(), this.setupWindowResizeListener(), this.setupOrientationListener();
374
373
  }
375
374
  getSize() {
376
375
  return this.panel.classList.contains("visible") === !1 || this.panel.classList.contains("no-tabs") ? {
@@ -728,7 +727,7 @@ var G = /* @__PURE__ */ new Ee(), Ft = /* @__PURE__ */ new g(), It = /* @__PURE_
728
727
  });
729
728
  });
730
729
  try {
731
- wn("layout", e);
730
+ bn("layout", e);
732
731
  } catch (e) {
733
732
  console.warn("Failed to save profiler layout:", e);
734
733
  }
@@ -736,7 +735,7 @@ var G = /* @__PURE__ */ new Ee(), Ft = /* @__PURE__ */ new g(), It = /* @__PURE_
736
735
  loadLayout() {
737
736
  this.isLoadingLayout = !0;
738
737
  try {
739
- let e = Cn("layout");
738
+ let e = yn("layout");
740
739
  if (Object.keys(e).length === 0) return;
741
740
  if (e.detachedTabs && e.detachedTabs.length > 0) {
742
741
  let t = window.innerWidth, n = window.innerHeight;
@@ -783,7 +782,7 @@ var G = /* @__PURE__ */ new Ee(), Ft = /* @__PURE__ */ new g(), It = /* @__PURE_
783
782
  this.updatePanelSize();
784
783
  }
785
784
  }
786
- }, q = class extends T {
785
+ }, q = class extends ee {
787
786
  constructor(e, t = {}) {
788
787
  super(), this.id = e.toLowerCase(), this.button = document.createElement("button"), this.button.className = "tab-btn", this.button.textContent = e, this.content = document.createElement("div"), this.content.id = `${this.id}-content`, this.content.className = "profiler-content", this._isActive = !1, this.isVisible = !0, this.isDetached = !1, this.detachedWindow = null, this.allowDetach = t.allowDetach === void 0 ? !0 : t.allowDetach, this.builtin = t.builtin === void 0 ? !1 : t.builtin, this.icon = t.icon || null, this.builtinButton = null, this.miniContent = null, this.profiler = null, this.onVisibilityChange = null;
789
788
  }
@@ -823,7 +822,7 @@ var G = /* @__PURE__ */ new Ee(), Ft = /* @__PURE__ */ new g(), It = /* @__PURE_
823
822
  this.builtinButton && this.builtinButton.classList.remove("active"), this.profiler && (Array.from(this.profiler.miniPanel.querySelectorAll(".mini-panel-content")).some((e) => e.style.display !== "none") || this.profiler.miniPanel.classList.remove("visible"), Array.from(this.profiler.builtinTabsContainer.querySelectorAll(".builtin-tab-btn")).some((e) => e.style.display !== "none") || (this.profiler.builtinTabsContainer.style.display = "none"));
824
823
  }
825
824
  }
826
- }, Jt = class {
825
+ }, Wt = class {
827
826
  constructor(...e) {
828
827
  this.headers = e, this.children = [], this.domElement = document.createElement("div"), this.domElement.className = "list-container", this.domElement.style.padding = "10px", this.id = `list-${Math.random().toString(36).slice(2, 11)}`, this.domElement.dataset.listId = this.id, this.gridStyleElement = document.createElement("style"), this.domElement.appendChild(this.gridStyleElement);
829
828
  let t = document.createElement("div");
@@ -847,7 +846,7 @@ var G = /* @__PURE__ */ new Ee(), Ft = /* @__PURE__ */ new g(), It = /* @__PURE_
847
846
  let t = this.children.indexOf(e);
848
847
  return t !== -1 && (this.children.splice(t, 1), this.domElement.removeChild(e.domElement), e.parent = null), this;
849
848
  }
850
- }, Yt = class {
849
+ }, Gt = class {
851
850
  constructor(e = 512) {
852
851
  this.maxPoints = e, this.lines = {}, this.limit = 0, this.limitIndex = 0, this.domElement = document.createElementNS("http://www.w3.org/2000/svg", "svg"), this.domElement.setAttribute("class", "graph-svg");
853
852
  }
@@ -920,7 +919,7 @@ function X(e, t) {
920
919
  let n = e instanceof HTMLElement ? e : document.getElementById(e);
921
920
  n && n.textContent !== t && (n.textContent = t);
922
921
  }
923
- function Xt(e) {
922
+ function Kt(e) {
924
923
  let t = e.lastIndexOf("/");
925
924
  return t === -1 ? {
926
925
  path: "",
@@ -930,7 +929,7 @@ function Xt(e) {
930
929
  name: e.substring(t + 1).trim()
931
930
  };
932
931
  }
933
- function Zt(e) {
932
+ function qt(e) {
934
933
  return e.replace(/([a-z0-9])([A-Z])/g, "$1 $2").trim();
935
934
  }
936
935
  function Z(e, t = 2) {
@@ -950,16 +949,16 @@ function Z(e, t = 2) {
950
949
  }
951
950
  //#endregion
952
951
  //#region ../../node_modules/three/examples/jsm/inspector/tabs/Performance.js
953
- var Qt = class extends q {
952
+ var Jt = class extends q {
954
953
  constructor(e = {}) {
955
954
  super("Performance", e);
956
- let t = new Jt("Name", "CPU", "GPU", "Total");
955
+ let t = new Wt("Name", "CPU", "GPU", "Total");
957
956
  t.setGridStyle("minmax(200px, 2fr) 80px 80px 80px"), t.domElement.style.minWidth = "600px";
958
957
  let n = document.createElement("div");
959
958
  n.className = "list-scroll-wrapper", n.appendChild(t.domElement), this.content.appendChild(n);
960
959
  let r = document.createElement("div");
961
960
  r.className = "graph-container";
962
- let i = new Yt();
961
+ let i = new Gt();
963
962
  i.addLine("fps", "var( --color-fps )"), r.append(i.domElement);
964
963
  let a = new J("Graph Stats", Y(), Y(), Y("graph-fps-counter"));
965
964
  t.add(a);
@@ -1009,16 +1008,16 @@ var Qt = class extends q {
1009
1008
  for (let e of this.notInUse.keys()) this.updateNotInUse(e);
1010
1009
  X("graph-fps-counter", e.fps.toFixed() + " FPS"), X(this.frameStats.data[1], t.cpu.toFixed(2)), X(this.frameStats.data[2], t.gpu.toFixed(2)), X(this.frameStats.data[3], t.total.toFixed(2)), X(this.miscellaneous.data[1], t.miscellaneous.toFixed(2)), X(this.miscellaneous.data[2], "-"), X(this.miscellaneous.data[3], t.miscellaneous.toFixed(2)), this.currentItem = null;
1011
1010
  }
1012
- }, $t = class extends q {
1011
+ }, Yt = class extends q {
1013
1012
  constructor(e = {}) {
1014
1013
  super("Memory", e);
1015
- let t = new Jt("Name", "Count", "Size");
1014
+ let t = new Wt("Name", "Count", "Size");
1016
1015
  t.setGridStyle("minmax(200px, 2fr) 60px 100px"), t.domElement.style.minWidth = "300px";
1017
1016
  let n = document.createElement("div");
1018
1017
  n.className = "list-scroll-wrapper", n.appendChild(t.domElement), this.content.appendChild(n);
1019
1018
  let r = document.createElement("div");
1020
1019
  r.className = "graph-container";
1021
- let i = new Yt();
1020
+ let i = new Gt();
1022
1021
  i.addLine("total", "var( --color-yellow )"), r.append(i.domElement);
1023
1022
  let a = new J("Graph Stats", "", "");
1024
1023
  t.add(a);
@@ -1037,7 +1036,7 @@ var Qt = class extends q {
1037
1036
  let n = t.info.memory;
1038
1037
  X(this.memoryStats.data[2], Z(n.total)), X(this.attributes.data[1], n.attributes.toString()), X(this.attributes.data[2], Z(n.attributesSize)), X(this.geometries.data[1], n.geometries.toString()), X(this.indexAttributes.data[1], n.indexAttributes.toString()), X(this.indexAttributes.data[2], Z(n.indexAttributesSize)), X(this.indirectStorageAttributes.data[1], n.indirectStorageAttributes.toString()), X(this.indirectStorageAttributes.data[2], Z(n.indirectStorageAttributesSize)), X(this.programs.data[1], n.programs.toString()), X(this.programs.data[2], Z(n.programsSize)), X(this.readbackBuffers.data[1], n.readbackBuffers.toString()), X(this.readbackBuffers.data[2], Z(n.readbackBuffersSize)), X(this.renderTargets.data[1], n.renderTargets.toString()), X(this.storageAttributes.data[1], n.storageAttributes.toString()), X(this.storageAttributes.data[2], Z(n.storageAttributesSize)), X(this.textures.data[1], n.textures.toString()), X(this.textures.data[2], Z(n.texturesSize));
1039
1038
  }
1040
- }, en = class extends q {
1039
+ }, Xt = class extends q {
1041
1040
  constructor(e = {}) {
1042
1041
  super("Console", e), this.filters = {
1043
1042
  info: !0,
@@ -1108,7 +1107,7 @@ var Qt = class extends q {
1108
1107
  let r = this.filters[e], i = t.toLowerCase().includes(this.filterText);
1109
1108
  n.classList.toggle("hidden", !(r && i)), this.logContainer.appendChild(n), this.logContainer.scrollTop = this.logContainer.scrollHeight, this.logContainer.children.length > 200 && this.logContainer.removeChild(this.logContainer.firstChild);
1110
1109
  }
1111
- }, Q = class extends T {
1110
+ }, Q = class extends ee {
1112
1111
  constructor() {
1113
1112
  super(), this.domElement = document.createElement("div"), this.domElement.className = "param-control", this._onChangeFunction = null, this.addEventListener("change", (e) => {
1114
1113
  requestAnimationFrame(() => {
@@ -1131,7 +1130,7 @@ var Qt = class extends q {
1131
1130
  onChange(e) {
1132
1131
  return this._onChangeFunction = e, this;
1133
1132
  }
1134
- }, tn = class extends Q {
1133
+ }, Zt = class extends Q {
1135
1134
  constructor({ value: e = 0, step: t = .1, min: n = -Infinity, max: r = Infinity }) {
1136
1135
  super(), this.input = document.createElement("input"), this.input.type = "number", this.input.value = e, this.input.step = t, this.input.min = n, this.input.max = r, this.input.addEventListener("change", this._onChangeValue.bind(this)), this.domElement.appendChild(this.input), this.addDragHandler();
1137
1136
  }
@@ -1162,7 +1161,7 @@ var Qt = class extends q {
1162
1161
  getValue() {
1163
1162
  return parseFloat(this.input.value);
1164
1163
  }
1165
- }, nn = class extends Q {
1164
+ }, Qt = class extends Q {
1166
1165
  constructor({ value: e = !1 }) {
1167
1166
  super();
1168
1167
  let t = document.createElement("label");
@@ -1180,10 +1179,10 @@ var Qt = class extends q {
1180
1179
  getValue() {
1181
1180
  return this.checkbox.checked;
1182
1181
  }
1183
- }, rn = class extends Q {
1182
+ }, $t = class extends Q {
1184
1183
  constructor({ value: e = 0, min: t = 0, max: n = 1, step: r = .01 }) {
1185
1184
  super(), this.slider = document.createElement("input"), this.slider.type = "range", this.slider.min = t, this.slider.max = n, this.slider.step = r;
1186
- let i = new tn({
1185
+ let i = new Zt({
1187
1186
  value: e,
1188
1187
  min: t,
1189
1188
  max: n,
@@ -1204,7 +1203,7 @@ var Qt = class extends q {
1204
1203
  step(e) {
1205
1204
  return this.slider.step = e, this.numberInput.step = e, this;
1206
1205
  }
1207
- }, an = class extends Q {
1206
+ }, en = class extends Q {
1208
1207
  constructor({ options: e = [], value: t = "" }) {
1209
1208
  super();
1210
1209
  let n = document.createElement("select"), r = (e, r) => {
@@ -1219,7 +1218,7 @@ var Qt = class extends q {
1219
1218
  let e = this.options;
1220
1219
  return Array.isArray(e) ? e[this.select.selectedIndex] : e[this.select.value];
1221
1220
  }
1222
- }, on = class extends Q {
1221
+ }, tn = class extends Q {
1223
1222
  constructor({ value: e = "#ffffff" }) {
1224
1223
  super();
1225
1224
  let t = document.createElement("input");
@@ -1235,13 +1234,13 @@ var Qt = class extends q {
1235
1234
  let e = this._value;
1236
1235
  return typeof e == "string" && (e = parseInt(e.slice(1), 16)), e;
1237
1236
  }
1238
- }, sn = class extends Q {
1237
+ }, nn = class extends Q {
1239
1238
  constructor({ text: e = "Button", value: t = () => {} }) {
1240
1239
  super();
1241
1240
  let n = document.createElement("button");
1242
1241
  n.textContent = e, n.onclick = t, this.domElement.appendChild(n);
1243
1242
  }
1244
- }, cn = class extends Q {
1243
+ }, rn = class extends Q {
1245
1244
  constructor({ value: e = "" }) {
1246
1245
  super();
1247
1246
  let t = document.createElement("input");
@@ -1255,7 +1254,7 @@ var Qt = class extends q {
1255
1254
  getValue() {
1256
1255
  return this.input.value;
1257
1256
  }
1258
- }, ln = class e {
1257
+ }, an = class e {
1259
1258
  constructor(e, t) {
1260
1259
  this.parameters = e, this.name = t, this.paramList = new J(t), this.objects = [];
1261
1260
  }
@@ -1284,7 +1283,7 @@ var Qt = class extends q {
1284
1283
  });
1285
1284
  }
1286
1285
  addString(e, t) {
1287
- let n = e[t], r = new cn({ value: n });
1286
+ let n = e[t], r = new rn({ value: n });
1288
1287
  r.addEventListener("change", ({ value: n }) => {
1289
1288
  e[t] = n;
1290
1289
  });
@@ -1298,7 +1297,7 @@ var Qt = class extends q {
1298
1297
  return this.paramList.add(n.paramList), n;
1299
1298
  }
1300
1299
  addBoolean(e, t) {
1301
- let n = e[t], r = new nn({ value: n });
1300
+ let n = e[t], r = new Qt({ value: n });
1302
1301
  r.addEventListener("change", ({ value: n }) => {
1303
1302
  e[t] = n;
1304
1303
  });
@@ -1314,7 +1313,7 @@ var Qt = class extends q {
1314
1313
  }), this._addParameter(e, t, r, a), r;
1315
1314
  }
1316
1315
  addSelect(e, t, n) {
1317
- let r = e[t], i = new an({
1316
+ let r = e[t], i = new en({
1318
1317
  options: n,
1319
1318
  value: r
1320
1319
  });
@@ -1327,7 +1326,7 @@ var Qt = class extends q {
1327
1326
  return this.paramList.add(o), o.domElement.firstChild.classList.add("actionable"), this._addParameter(e, t, i, o), i;
1328
1327
  }
1329
1328
  addColor(e, t) {
1330
- let n = e[t], r = new on({ value: n });
1329
+ let n = e[t], r = new tn({ value: n });
1331
1330
  r.addEventListener("change", ({ value: n }) => {
1332
1331
  e[t] = n;
1333
1332
  });
@@ -1337,7 +1336,7 @@ var Qt = class extends q {
1337
1336
  return this.paramList.add(a), a.domElement.firstChild.classList.add("actionable"), this._addParameter(e, t, r, a), r;
1338
1337
  }
1339
1338
  addSlider(e, t, n = 0, r = 1, i = .01) {
1340
- let a = e[t], o = new rn({
1339
+ let a = e[t], o = new $t({
1341
1340
  value: a,
1342
1341
  min: n,
1343
1342
  max: r,
@@ -1352,7 +1351,7 @@ var Qt = class extends q {
1352
1351
  return this.paramList.add(c), c.domElement.firstChild.classList.add("actionable"), this._addParameter(e, t, o, c), o;
1353
1352
  }
1354
1353
  addNumber(e, t, ...n) {
1355
- let r = e[t], [i, a] = n, o = new tn({
1354
+ let r = e[t], [i, a] = n, o = new Zt({
1356
1355
  value: r,
1357
1356
  min: i,
1358
1357
  max: a
@@ -1366,7 +1365,7 @@ var Qt = class extends q {
1366
1365
  return this.paramList.add(c), c.domElement.firstChild.classList.add("actionable"), this._addParameter(e, t, o, c), o;
1367
1366
  }
1368
1367
  addButton(e, t) {
1369
- let n = e[t], r = new sn({
1368
+ let n = e[t], r = new nn({
1370
1369
  text: t,
1371
1370
  value: n
1372
1371
  });
@@ -1376,54 +1375,54 @@ var Qt = class extends q {
1376
1375
  let i = new J(r.domElement);
1377
1376
  return i.itemRow.childNodes[0].style.gridColumn = "1 / -1", this.paramList.add(i), i.domElement.firstChild.classList.add("actionable"), r.name = (e) => (r.domElement.childNodes[0].textContent = e, r), this._registerParameter(e, t, r, i), r;
1378
1377
  }
1379
- }, un = class extends q {
1378
+ }, on = class extends q {
1380
1379
  constructor(e = {}) {
1381
1380
  super(e.name || "Parameters", e);
1382
- let t = new Jt("Property", "Value");
1381
+ let t = new Wt("Property", "Value");
1383
1382
  t.domElement.classList.add("parameters"), t.setGridStyle(".5fr 1fr"), t.domElement.style.minWidth = "300px";
1384
1383
  let n = document.createElement("div");
1385
1384
  n.className = "list-scroll-wrapper", n.appendChild(t.domElement), this.content.appendChild(n), this.paramList = t, this.groups = [];
1386
1385
  }
1387
1386
  createGroup(e) {
1388
- let t = new ln(this, e);
1387
+ let t = new an(this, e);
1389
1388
  return this.paramList.add(t.paramList), this.groups.push(t), t;
1390
1389
  }
1391
- }, dn = "../extensions/extensions.json", fn = Se.prototype.init;
1392
- function pn(e) {
1393
- e ? Se.prototype.init = async function() {
1390
+ }, sn = "../extensions/extensions.json", cn = be.prototype.init;
1391
+ function ln(e) {
1392
+ e ? be.prototype.init = async function() {
1394
1393
  if (this.backend.isWebGLBackend !== !0) {
1395
1394
  let e = this.backend.parameters;
1396
- this.backend = new Te(e);
1395
+ this.backend = new Ce(e);
1397
1396
  }
1398
- return fn.call(this);
1399
- } : Se.prototype.init = fn;
1397
+ return cn.call(this);
1398
+ } : be.prototype.init = cn;
1400
1399
  }
1401
1400
  var $ = null;
1402
- function mn() {
1401
+ function un() {
1403
1402
  if ($ !== null) return $;
1404
- let e = Cn("settings");
1403
+ let e = yn("settings");
1405
1404
  return $ = {
1406
1405
  forceWebGL: e.forceWebGL === void 0 ? !1 : e.forceWebGL,
1407
1406
  captureStackTrace: e.captureStackTrace === void 0 ? !1 : e.captureStackTrace,
1408
1407
  activeExtensions: e.activeExtensions === void 0 ? {} : e.activeExtensions
1409
- }, $.forceWebGL && pn(!0), $.captureStackTrace && (we.captureStackTrace = !0), $;
1408
+ }, $.forceWebGL && ln(!0), $.captureStackTrace && (Se.captureStackTrace = !0), $;
1410
1409
  }
1411
- function hn() {
1412
- wn("settings", {
1410
+ function dn() {
1411
+ bn("settings", {
1413
1412
  forceWebGL: $.forceWebGL,
1414
1413
  captureStackTrace: $.captureStackTrace,
1415
1414
  activeExtensions: $.activeExtensions
1416
1415
  });
1417
1416
  }
1418
- mn();
1419
- var gn = class extends un {
1417
+ un();
1418
+ var fn = class extends on {
1420
1419
  constructor() {
1421
1420
  super({ name: "Settings" }), this.extensions = {};
1422
- let e = mn(), t = this.createGroup("Renderer");
1421
+ let e = un(), t = this.createGroup("Renderer");
1423
1422
  t.add(e, "forceWebGL").name("Force WebGL").onChange((e) => {
1424
- pn(e), hn(), location.reload();
1423
+ ln(e), dn(), location.reload();
1425
1424
  }), t.add(e, "captureStackTrace").name("Capture Stack Trace").onChange((e) => {
1426
- we.captureStackTrace = e, hn(), location.reload();
1425
+ Se.captureStackTrace = e, dn(), location.reload();
1427
1426
  });
1428
1427
  }
1429
1428
  init() {
@@ -1433,7 +1432,7 @@ var gn = class extends un {
1433
1432
  this.setActiveExtension(n.name, e), e ? $.activeExtensions[n.name] = {
1434
1433
  name: n.name,
1435
1434
  url: n.url
1436
- } : delete $.activeExtensions[n.name], this._updateExtensionUI(n), hn();
1435
+ } : delete $.activeExtensions[n.name], this._updateExtensionUI(n), dn();
1437
1436
  }), $.activeExtensions[n.name] !== void 0 && n.ui.setValue(!0);
1438
1437
  });
1439
1438
  }
@@ -1453,7 +1452,7 @@ var gn = class extends un {
1453
1452
  async _loadExtension(e, t) {
1454
1453
  if (t.active === !0) return;
1455
1454
  t.active = !0;
1456
- let n = await import(new URL(t.url, new URL(dn, import.meta.url)).href), r = n[Object.keys(n)[0]], i = new r();
1455
+ let n = await import(new URL(t.url, new URL(sn, import.meta.url)).href), r = n[Object.keys(n)[0]], i = new r();
1457
1456
  e.addTab(i), t.loaded = !0, t.tab = i, this._updateExtensionUI(t), this.dispatchEvent({
1458
1457
  type: "extensionadded",
1459
1458
  name: t.name,
@@ -1461,21 +1460,21 @@ var gn = class extends un {
1461
1460
  });
1462
1461
  }
1463
1462
  async _getExtensions() {
1464
- let e = new URL(dn, import.meta.url);
1463
+ let e = new URL(sn, import.meta.url);
1465
1464
  return await fetch(e).then((e) => e.json());
1466
1465
  }
1467
- }, _n = /* @__PURE__ */ M(([e, t]) => {
1466
+ }, pn = /* @__PURE__ */ A(([e, t]) => {
1468
1467
  let n = V(0);
1469
- lt(() => {
1468
+ at(() => {
1470
1469
  let { width: e, height: r } = t.value;
1471
1470
  n.value = e / r;
1472
1471
  });
1473
1472
  let r = e.sub(.5), i = H(r.x.div(n), r.y).add(.5);
1474
- return U(i, Dt(0, i.x).mul(Dt(i.x, 1)).mul(Dt(0, i.y)).mul(Dt(i.y, 1)));
1475
- }), vn = class extends q {
1473
+ return U(i, Ct(0, i.x).mul(Ct(i.x, 1)).mul(Ct(0, i.y)).mul(Ct(i.y, 1)));
1474
+ }), mn = class extends q {
1476
1475
  constructor(e = {}) {
1477
1476
  super("Viewer", e);
1478
- let t = new Jt("Viewer", "Name");
1477
+ let t = new Wt("Viewer", "Name");
1479
1478
  t.setGridStyle("150px minmax(200px, 2fr)"), t.domElement.style.minWidth = "400px";
1480
1479
  let n = document.createElement("div");
1481
1480
  n.className = "list-scroll-wrapper", n.appendChild(t.domElement), this.content.appendChild(n);
@@ -1497,16 +1496,16 @@ var gn = class extends un {
1497
1496
  getCanvasDataByNode(e, t) {
1498
1497
  let n = this.canvasNodes.get(t);
1499
1498
  if (n === void 0) {
1500
- let r = new Oe(document.createElement("canvas"));
1499
+ let r = new Ee(document.createElement("canvas"));
1501
1500
  r.setPixelRatio(window.devicePixelRatio), r.setSize(140, 140);
1502
- let i = t.id, { path: a, name: o } = Xt(Zt(t.getName() || "(unnamed)")), s = W(U(t.context({ getUV: (e) => {
1503
- let t = _n(St, e), n = t.xy, r = t.z;
1501
+ let i = t.id, { path: a, name: o } = Kt(qt(t.getName() || "(unnamed)")), s = W(U(t.context({ getUV: (e) => {
1502
+ let t = pn(vt, e), n = t.xy, r = t.z;
1504
1503
  return n.mul(r);
1505
1504
  } })), 1);
1506
- s = yt(s, 0, e.outputColorSpace), s = s.context({ inspector: !0 });
1507
- let c = new k();
1505
+ s = ht(s, 0, e.outputColorSpace), s = s.context({ inspector: !0 });
1506
+ let c = new D();
1508
1507
  c.outputNode = s;
1509
- let l = new Ee(c);
1508
+ let l = new we(c);
1510
1509
  l.name = "Viewer - " + o, n = {
1511
1510
  id: i,
1512
1511
  name: o,
@@ -1542,13 +1541,13 @@ var gn = class extends un {
1542
1541
  a[o] === void 0 && (a[o] = 0), (e.parent === null || n.parent !== e || e.children.indexOf(n) !== a[o]) && e.add(n), a[o]++;
1543
1542
  } else n.parent || this.nodes.add(n);
1544
1543
  this.currentDataList = r;
1545
- let s = j.resetRendererState(t);
1546
- t.toneMapping = 0, t.outputColorSpace = m, t.setCanvasTarget(e.canvasTarget), e.quad.render(t), t.setCanvasTarget(i), j.restoreRendererState(t, s);
1544
+ let s = k.resetRendererState(t);
1545
+ t.toneMapping = 0, t.outputColorSpace = p, t.setCanvasTarget(e.canvasTarget), e.quad.render(t), t.setCanvasTarget(i), k.restoreRendererState(t, s);
1547
1546
  }
1548
1547
  }
1549
- }, yn = 500, bn = 60, xn = class extends q {
1548
+ }, hn = 500, gn = 60, _n = class extends q {
1550
1549
  constructor(e = {}) {
1551
- super("Timeline", e), this.isRecording = !1, this.frames = [], this.baseTriangles = 0, this.currentFrame = null, this.isHierarchicalView = !0, this.callBlocks = /* @__PURE__ */ new WeakMap(), this.fallbackBlocks = [], this.originalBackend = null, this.originalMethods = /* @__PURE__ */ new Map(), this.renderer = null, this.graph = new Yt(yn), this.graph.addLine("fps", "var( --color-fps )"), this.graph.addLine("calls", "var( --color-call )"), this.graph.addLine("triangles", "var( --color-red )");
1550
+ super("Timeline", e), this.isRecording = !1, this.frames = [], this.baseTriangles = 0, this.currentFrame = null, this.isHierarchicalView = !0, this.callBlocks = /* @__PURE__ */ new WeakMap(), this.fallbackBlocks = [], this.originalBackend = null, this.originalMethods = /* @__PURE__ */ new Map(), this.renderer = null, this.graph = new Gt(hn), this.graph.addLine("fps", "var( --color-fps )"), this.graph.addLine("calls", "var( --color-call )"), this.graph.addLine("triangles", "var( --color-red )");
1552
1551
  let t = document.createElement("div");
1553
1552
  t.className = "list-scroll-wrapper", this.scrollWrapper = t, this.content.appendChild(t), this.buildHeader(), this.buildUI(), window.addEventListener("resize", () => {
1554
1553
  !this.isRecording && this.frames.length > 0 && this.renderSlider();
@@ -1561,8 +1560,8 @@ var gn = class extends un {
1561
1560
  t.className = "console-copy-button", t.title = "Clear", t.innerHTML = "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"3 6 5 6 21 6\"></polyline><path d=\"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\"></path><line x1=\"10\" y1=\"11\" x2=\"10\" y2=\"17\"></line><line x1=\"14\" y1=\"11\" x2=\"14\" y2=\"17\"></line></svg>", t.style.padding = "0 10px", t.style.lineHeight = "24px", t.style.display = "flex", t.style.alignItems = "center", t.addEventListener("click", () => this.clear()), this.viewModeButton = document.createElement("button"), this.viewModeButton.className = "console-copy-button", this.viewModeButton.title = "Toggle View Mode", this.viewModeButton.textContent = "Mode: Hierarchy", this.viewModeButton.style.padding = "0 10px", this.viewModeButton.style.lineHeight = "24px", this.viewModeButton.addEventListener("click", () => {
1562
1561
  this.isHierarchicalView = !this.isHierarchicalView, this.viewModeButton.textContent = this.isHierarchicalView ? "Mode: Hierarchy" : "Mode: Counts", this.selectedFrameIndex !== void 0 && this.selectedFrameIndex !== -1 && this.selectFrame(this.selectedFrameIndex);
1563
1562
  }), this.recordRefreshButton = document.createElement("button"), this.recordRefreshButton.className = "console-copy-button", this.recordRefreshButton.title = "Refresh & Record", this.recordRefreshButton.innerHTML = "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8\"></path><path d=\"M21 3v5h-5\"></path><circle cx=\"12\" cy=\"12\" r=\"3\" fill=\"currentColor\"></circle></svg>", this.recordRefreshButton.style.padding = "0 10px", this.recordRefreshButton.style.lineHeight = "24px", this.recordRefreshButton.style.display = "flex", this.recordRefreshButton.style.alignItems = "center", this.recordRefreshButton.addEventListener("click", () => {
1564
- let e = Cn("timeline");
1565
- e.recording = !0, wn("timeline", e), window.location.reload();
1563
+ let e = yn("timeline");
1564
+ e.recording = !0, bn("timeline", e), window.location.reload();
1566
1565
  }), this.exportButton = document.createElement("button"), this.exportButton.className = "console-copy-button", this.exportButton.title = "Export", this.exportButton.innerHTML = "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"></path><polyline points=\"7 10 12 15 17 10\"></polyline><line x1=\"12\" y1=\"15\" x2=\"12\" y2=\"3\"></line></svg>", this.exportButton.style.padding = "0 10px", this.exportButton.style.lineHeight = "24px", this.exportButton.style.display = "flex", this.exportButton.style.alignItems = "center", this.exportButton.addEventListener("click", () => this.exportData());
1567
1566
  let n = document.createElement("div");
1568
1567
  n.className = "console-buttons-group", n.appendChild(this.viewModeButton), n.appendChild(this.recordButton), n.appendChild(this.recordRefreshButton), n.appendChild(this.exportButton), n.appendChild(t), e.style.display = "flex", e.style.justifyContent = "space-between", e.style.padding = "6px", e.style.borderBottom = "1px solid var(--border-color)";
@@ -1644,8 +1643,8 @@ var gn = class extends un {
1644
1643
  }
1645
1644
  setRenderer(e) {
1646
1645
  this.renderer = e;
1647
- let t = Cn("timeline");
1648
- t.recording && (t.recording = !1, wn("timeline", t), this.toggleRecording());
1646
+ let t = yn("timeline");
1647
+ t.recording && (t.recording = !1, bn("timeline", t), this.toggleRecording());
1649
1648
  }
1650
1649
  toggleRecording() {
1651
1650
  if (!this.renderer) {
@@ -1675,7 +1674,7 @@ var gn = class extends un {
1675
1674
  for (let t = 0; t < n.length; t++) n[t] *= e;
1676
1675
  }
1677
1676
  }
1678
- let t = this.baseTriangles > 0 ? e / this.baseTriangles * bn : 0;
1677
+ let t = this.baseTriangles > 0 ? e / this.baseTriangles * gn : 0;
1679
1678
  this.graph.addPoint("calls", this.currentFrame.calls.length), this.graph.addPoint("fps", this.currentFrame.fps), this.graph.addPoint("triangles", t), this.graph.update();
1680
1679
  }
1681
1680
  if (this.currentFrame = {
@@ -1683,7 +1682,7 @@ var gn = class extends un {
1683
1682
  calls: [],
1684
1683
  fps: 0,
1685
1684
  triangles: 0
1686
- }, this.frames.push(this.currentFrame), this.frames.length > yn && this.frames.shift(), !this.isManualScrubbing) {
1685
+ }, this.frames.push(this.currentFrame), this.frames.length > hn && this.frames.shift(), !this.isManualScrubbing) {
1687
1686
  if (this.isTrackingLatest) {
1688
1687
  let e = this.frames.length > 1 ? this.frames.length - 2 : 0;
1689
1688
  this.selectFrame(e);
@@ -1724,32 +1723,32 @@ var gn = class extends un {
1724
1723
  getRenderTargetDetails(e) {
1725
1724
  let t = e.textures, r = [], a = (e) => {
1726
1725
  switch (e.type) {
1727
- case y:
1728
- case _: return "8";
1729
- case re:
1730
- case ue:
1731
- case w:
1732
- case h:
1733
- case ce: return "16";
1734
- case le:
1735
1726
  case v:
1736
- case O:
1727
+ case g: return "8";
1728
+ case ie:
1729
+ case le:
1737
1730
  case C:
1738
- case b:
1731
+ case m:
1732
+ case se: return "16";
1733
+ case ce:
1734
+ case _:
1735
+ case ae:
1736
+ case x:
1737
+ case y:
1739
1738
  case te: return "32";
1740
1739
  default: return "?";
1741
1740
  }
1742
1741
  }, l = (e) => {
1743
1742
  switch (e.format) {
1744
- case se: return "a";
1743
+ case oe: return "a";
1745
1744
  case s:
1746
- case S: return "r";
1745
+ case b: return "r";
1747
1746
  case c:
1748
1747
  case n: return "rg";
1749
1748
  case ne:
1750
- case ee: return "rgb";
1749
+ case S: return "rgb";
1751
1750
  case o: return "depth";
1752
- case D: return "depth-stencil";
1751
+ case re: return "depth-stencil";
1753
1752
  case f:
1754
1753
  case i:
1755
1754
  default: return "rgba";
@@ -1951,7 +1950,7 @@ var gn = class extends un {
1951
1950
  r > t && (t = r);
1952
1951
  }
1953
1952
  for (let n = 0; n < e.length; n++) {
1954
- let r = e[n].triangles || 0, i = t > 0 ? r / t * bn : 0;
1953
+ let r = e[n].triangles || 0, i = t > 0 ? r / t * gn : 0;
1955
1954
  this.graph.addPoint("calls", e[n].calls.length), this.graph.addPoint("fps", e[n].fps || 0), this.graph.addPoint("triangles", i);
1956
1955
  }
1957
1956
  this.graph.update(), this.playhead.style.display = "block";
@@ -2044,27 +2043,27 @@ var gn = class extends un {
2044
2043
  getColorForMethod(e) {
2045
2044
  return e.startsWith("begin") ? "var(--color-green)" : e.startsWith("finish") || e.startsWith("destroy") ? "var(--color-red)" : e.startsWith("draw") || e.startsWith("compute") || e.startsWith("create") || e.startsWith("generate") ? "var(--color-yellow)" : "var(--text-secondary)";
2046
2045
  }
2047
- }, Sn = class extends Gt {
2046
+ }, vn = class extends Vt {
2048
2047
  constructor() {
2049
2048
  super();
2050
- let e = new qt(this);
2049
+ let e = new Ut(this);
2051
2050
  e.addEventListener("resize", (e) => this.dispatchEvent(e));
2052
- let t = new un({
2051
+ let t = new on({
2053
2052
  builtin: !0,
2054
2053
  icon: "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M14 6m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0\" /><path d=\"M4 6l8 0\" /><path d=\"M16 6l4 0\" /><path d=\"M8 12m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0\" /><path d=\"M4 12l2 0\" /><path d=\"M10 12l10 0\" /><path d=\"M17 18m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0\" /><path d=\"M4 18l11 0\" /><path d=\"M19 18l1 0\" /></svg>"
2055
2054
  });
2056
2055
  t.hide(), e.addTab(t);
2057
- let n = new vn();
2056
+ let n = new mn();
2058
2057
  n.hide(), e.addTab(n);
2059
- let r = new Qt();
2058
+ let r = new Jt();
2060
2059
  e.addTab(r);
2061
- let i = new $t();
2060
+ let i = new Yt();
2062
2061
  e.addTab(i);
2063
- let a = new xn();
2062
+ let a = new _n();
2064
2063
  e.addTab(a);
2065
- let o = new en();
2064
+ let o = new Xt();
2066
2065
  e.addTab(o);
2067
- let s = new gn();
2066
+ let s = new fn();
2068
2067
  e.addTab(s), e.loadLayout(), e.activeTabId || e.setActiveTab(r.id), this.statsData = /* @__PURE__ */ new Map(), this.profiler = e, this.performance = r, this.memory = i, this.console = o, this.parameters = t, this.viewer = n, this.timeline = a, this.settings = s, this.once = {}, this.extensionsData = /* @__PURE__ */ new WeakMap(), this.displayCycle = {
2069
2068
  text: {
2070
2069
  needsUpdate: !1,
@@ -2184,70 +2183,70 @@ var gn = class extends un {
2184
2183
  e.time += this.nodeFrame.deltaTime, e.time >= e.duration && (e.needsUpdate = !0, e.time = 0);
2185
2184
  }
2186
2185
  static getItem(e) {
2187
- return console.warn("Inspector.getItem is deprecated. Use getItem directly instead."), Cn(e);
2186
+ return console.warn("Inspector.getItem is deprecated. Use getItem directly instead."), yn(e);
2188
2187
  }
2189
2188
  static setItem(e, t) {
2190
- console.warn("Inspector.setItem is deprecated. Use setItem directly instead."), wn(e, t);
2189
+ console.warn("Inspector.setItem is deprecated. Use setItem directly instead."), bn(e, t);
2191
2190
  }
2192
2191
  };
2193
- function Cn(e) {
2192
+ function yn(e) {
2194
2193
  return JSON.parse(localStorage.getItem("threejs-inspector") || "{}")[e] || {};
2195
2194
  }
2196
- function wn(e, t) {
2195
+ function bn(e, t) {
2197
2196
  let n = JSON.parse(localStorage.getItem("threejs-inspector") || "{}");
2198
2197
  t === null ? delete n[e] : n[e] = t, localStorage.setItem("threejs-inspector", JSON.stringify(n));
2199
2198
  }
2200
2199
  //#endregion
2201
2200
  //#region ../../node_modules/three/examples/jsm/tsl/display/SSGINode.js
2202
- var Tn = /* @__PURE__ */ new Ee(), En = /* @__PURE__ */ new g(), Dn = [
2201
+ var xn = /* @__PURE__ */ new we(), Sn = /* @__PURE__ */ new h(), Cn = [
2203
2202
  60,
2204
2203
  300,
2205
2204
  180,
2206
2205
  240,
2207
2206
  120,
2208
2207
  0
2209
- ], On = [
2208
+ ], wn = [
2210
2209
  0,
2211
2210
  .5,
2212
2211
  .25,
2213
2212
  .75
2214
- ], kn, An = class extends ye {
2213
+ ], Tn, En = class extends ve {
2215
2214
  static get type() {
2216
2215
  return "SSGINode";
2217
2216
  }
2218
2217
  constructor(t, n, r, i) {
2219
- super("vec4"), this.beautyNode = t, this.depthNode = n, this.normalNode = r, this.updateBeforeType = je.FRAME, this.sliceCount = V(1, "uint"), this.stepCount = V(12, "uint"), this.aoIntensity = V(1, "float"), this.giIntensity = V(10, "float"), this.radius = V(12, "float"), this.useScreenSpaceSampling = V(!0, "bool"), this.expFactor = V(2, "float"), this.thickness = V(1, "float"), this.useLinearThickness = V(!1, "bool"), this.backfaceLighting = V(0, "float"), this.useTemporalFiltering = !0, this._resolution = V(new g()), this._halfProjScale = V(1), this._temporalDirection = V(0), this._temporalOffset = V(0), this._cameraProjectionMatrix = V(i.projectionMatrix), this._cameraProjectionMatrixInverse = V(i.projectionMatrixInverse), this._cameraNear = vt("near", "float", i), this._cameraFar = vt("far", "float", i), this._camera = i, this._ssgiRenderTarget = new e(1, 1, { depthBuffer: !1 }), this._ssgiRenderTarget.texture.name = "SSGI", this._material = new k(), this._material.name = "SSGI", this._textureNode = pt(this, this._ssgiRenderTarget.texture);
2218
+ super("vec4"), this.beautyNode = t, this.depthNode = n, this.normalNode = r, this.updateBeforeType = ke.FRAME, this.sliceCount = V(1, "uint"), this.stepCount = V(12, "uint"), this.aoIntensity = V(1, "float"), this.giIntensity = V(10, "float"), this.radius = V(12, "float"), this.useScreenSpaceSampling = V(!0, "bool"), this.expFactor = V(2, "float"), this.thickness = V(1, "float"), this.useLinearThickness = V(!1, "bool"), this.backfaceLighting = V(0, "float"), this.useTemporalFiltering = !0, this._resolution = V(new h()), this._halfProjScale = V(1), this._temporalDirection = V(0), this._temporalOffset = V(0), this._cameraProjectionMatrix = V(i.projectionMatrix), this._cameraProjectionMatrixInverse = V(i.projectionMatrixInverse), this._cameraNear = mt("near", "float", i), this._cameraFar = mt("far", "float", i), this._camera = i, this._ssgiRenderTarget = new e(1, 1, { depthBuffer: !1 }), this._ssgiRenderTarget.texture.name = "SSGI", this._material = new D(), this._material.name = "SSGI", this._textureNode = lt(this, this._ssgiRenderTarget.texture);
2220
2219
  }
2221
2220
  getTextureNode() {
2222
2221
  return this._textureNode;
2223
2222
  }
2224
2223
  setSize(e, t) {
2225
- this._resolution.value.set(e, t), this._ssgiRenderTarget.setSize(e, t), this._halfProjScale.value = t / (Math.tan(this._camera.fov * ie.DEG2RAD * .5) * 2) * .5;
2224
+ this._resolution.value.set(e, t), this._ssgiRenderTarget.setSize(e, t), this._halfProjScale.value = t / (Math.tan(this._camera.fov * T.DEG2RAD * .5) * 2) * .5;
2226
2225
  }
2227
2226
  updateBefore(e) {
2228
2227
  let { renderer: t } = e;
2229
- kn = j.resetRendererState(t, kn);
2230
- let n = t.getDrawingBufferSize(En);
2228
+ Tn = k.resetRendererState(t, Tn);
2229
+ let n = t.getDrawingBufferSize(Sn);
2231
2230
  if (this.setSize(n.width, n.height), this.useTemporalFiltering === !0) {
2232
2231
  let t = e.frameId;
2233
- this._temporalDirection.value = Dn[t % 6] / 360, this._temporalOffset.value = On[t % 4];
2232
+ this._temporalDirection.value = Cn[t % 6] / 360, this._temporalOffset.value = wn[t % 4];
2234
2233
  } else this._temporalDirection.value = 1, this._temporalOffset.value = 1;
2235
- Tn.material = this._material, Tn.name = "SSGI", t.setClearColor(0, 1), t.setRenderTarget(this._ssgiRenderTarget), Tn.render(t), j.restoreRendererState(t, kn);
2234
+ xn.material = this._material, xn.name = "SSGI", t.setClearColor(0, 1), t.setRenderTarget(this._ssgiRenderTarget), xn.render(t), k.restoreRendererState(t, Tn);
2236
2235
  }
2237
2236
  setup(e) {
2238
- let t = jt(), n = B(32), r = B(0), i = (t) => {
2237
+ let t = Dt(), n = B(32), r = B(0), i = (t) => {
2239
2238
  let n = this.depthNode.sample(t).r;
2240
- return e.renderer.logarithmicDepthBuffer === !0 ? Pt(tt(n, this._cameraNear, this._cameraFar), this._cameraNear, this._cameraFar) : n;
2241
- }, a = (e) => this.normalNode === null ? Xe(e, this.depthNode.value, this._cameraProjectionMatrixInverse) : this.normalNode.sample(e).rgb.normalize(), o = (e) => this.beautyNode.sample(e), s = M(([e]) => I(.25).mul(kt(e.y, e.x).bitAnd(3))).setLayout({
2239
+ return e.renderer.logarithmicDepthBuffer === !0 ? At(Qe(n, this._cameraNear, this._cameraFar), this._cameraNear, this._cameraFar) : n;
2240
+ }, a = (e) => this.normalNode === null ? qe(e, this.depthNode.value, this._cameraProjectionMatrixInverse) : this.normalNode.sample(e).rgb.normalize(), o = (e) => this.beautyNode.sample(e), s = A(([e]) => F(.25).mul(Tt(e.y, e.x).bitAnd(3))).setLayout({
2242
2241
  name: "spatialOffsets",
2243
2242
  type: "float",
2244
2243
  inputs: [{
2245
2244
  name: "position",
2246
2245
  type: "vec2"
2247
2246
  }]
2248
- }), c = M(([e]) => {
2249
- let t = Pe(e).mul(I(-.156583)).add(Ne);
2250
- return t.mulAssign(Et(Pe(e).oneMinus())), H(e.x.greaterThanEqual(0).select(t.x, Me.sub(t.x)), e.y.greaterThanEqual(0).select(t.y, Me.sub(t.y)));
2247
+ }), c = A(([e]) => {
2248
+ let t = M(e).mul(F(-.156583)).add(je);
2249
+ return t.mulAssign(St(M(e).oneMinus())), H(e.x.greaterThanEqual(0).select(t.x, Ae.sub(t.x)), e.y.greaterThanEqual(0).select(t.y, Ae.sub(t.y)));
2251
2250
  }).setLayout({
2252
2251
  name: "GTAOFastAcos",
2253
2252
  type: "vec2",
@@ -2255,54 +2254,54 @@ var Tn = /* @__PURE__ */ new Ee(), En = /* @__PURE__ */ new g(), Dn = [
2255
2254
  name: "value",
2256
2255
  type: "vec2"
2257
2256
  }]
2258
- }), l = M(([e, t, s, l, u, d, f, p, m]) => {
2259
- let h = this.stepCount.toConst(), g = this.expFactor.toConst(), _ = this.thickness.toConst(), v = this.backfaceLighting.toConst(), y = I(0);
2260
- N(this.useScreenSpaceSampling.equal(!0), () => {
2261
- y.assign(t.mul(this._resolution.x.div(2)).div(I(16)));
2257
+ }), l = A(([e, t, s, l, u, d, f, p, m]) => {
2258
+ let h = this.stepCount.toConst(), g = this.expFactor.toConst(), _ = this.thickness.toConst(), v = this.backfaceLighting.toConst(), y = F(0);
2259
+ j(this.useScreenSpaceSampling.equal(!0), () => {
2260
+ y.assign(t.mul(this._resolution.x.div(2)).div(F(16)));
2262
2261
  }).Else(() => {
2263
- y.assign(L(t.mul(this._halfProjScale).div(s.z.negate()), I(h)));
2264
- }), y.divAssign(I(h).add(1));
2265
- let b = L(1, I(h.sub(1))).mul(y), x = e.equal(!0).select(H(1, -1), H(-1, 1)), S = e.equal(!0).select(1, -1), C = U(0);
2266
- return Ae({
2262
+ y.assign(I(t.mul(this._halfProjScale).div(s.z.negate()), F(h)));
2263
+ }), y.divAssign(F(h).add(1));
2264
+ let b = I(1, F(h.sub(1))).mul(y), x = e.equal(!0).select(H(1, -1), H(-1, 1)), S = e.equal(!0).select(1, -1), C = U(0);
2265
+ return Oe({
2267
2266
  start: B(0),
2268
2267
  end: h,
2269
2268
  type: "uint",
2270
2269
  condition: "<"
2271
2270
  }, ({ i: t }) => {
2272
- let h = gt(Pe(R(y, I(t).add(u)).div(b)), g).mul(b).toConst(), ee = l.mul(L(h, I(t).add(1))).toConst(), w = d.add(ee.mul(x)).toConst();
2273
- N(w.x.lessThanEqual(0).or(w.y.lessThanEqual(0)).or(w.x.greaterThanEqual(1)).or(w.y.greaterThanEqual(1)), () => {
2274
- ke();
2271
+ let h = ft(M(L(y, F(t).add(u)).div(b)), g).mul(b).toConst(), ee = l.mul(I(h, F(t).add(1))).toConst(), w = d.add(ee.mul(x)).toConst();
2272
+ j(w.x.lessThanEqual(0).or(w.y.lessThanEqual(0)).or(w.x.greaterThanEqual(1)).or(w.y.greaterThanEqual(1)), () => {
2273
+ De();
2275
2274
  });
2276
- let T = Qe(w, i(w), this._cameraProjectionMatrixInverse).toConst(), E = T.sub(s).normalize().toConst(), te = this.useLinearThickness.equal(!0).select(T.z.negate().div(this._cameraFar).clamp().mul(100), I(1)), ne = ct(T.sub(te.mul(f).mul(_)).sub(s)), D = H(F(E, f), F(ne, f));
2277
- D = c(P(D, -1, 1)), D = P(qe(R(S, D.negate()).sub(m.sub(Ne)), Me)), D = e.equal(!0).select(D.yx, D.xy);
2278
- let re = D.x.toConst(), ie = D.y.toConst(), ae = B(D.mul(I(n))).toConst(), oe = B(Re(ie.sub(re).mul(I(n)))).toConst(), O = oe.greaterThan(B(0)).select(B(Ct(B(4294967295), B(32).sub(n).add(n.sub(oe)))), B(0)).toConst().shiftLeft(ae);
2279
- O = O.bitAnd(r.bitNot()), r.assign(r.bitOr(O));
2280
- let se = He(O);
2281
- N(se.greaterThan(0), () => {
2275
+ let te = Ye(w, i(w), this._cameraProjectionMatrixInverse).toConst(), ne = te.sub(s).normalize().toConst(), re = this.useLinearThickness.equal(!0).select(te.z.negate().div(this._cameraFar).clamp().mul(100), F(1)), ie = R(te.sub(re.mul(f).mul(_)).sub(s)), T = H(P(ne, f), P(ie, f));
2276
+ T = c(N(T, -1, 1)), T = N(We(L(S, T.negate()).sub(m.sub(je)), Ae)), T = e.equal(!0).select(T.yx, T.xy);
2277
+ let E = T.x.toConst(), ae = T.y.toConst(), oe = B(T.mul(F(n))).toConst(), se = B(Fe(ae.sub(E).mul(F(n)))).toConst(), ce = se.greaterThan(B(0)).select(B(yt(B(4294967295), B(32).sub(n).add(n.sub(se)))), B(0)).toConst().shiftLeft(oe);
2278
+ ce = ce.bitAnd(r.bitNot()), r.assign(r.bitOr(ce));
2279
+ let le = ze(ce);
2280
+ j(le.greaterThan(0), () => {
2282
2281
  let e = o(w);
2283
- N(nt(e).greaterThan(.001), () => {
2284
- let t = ct(E), r = P(F(p, t));
2285
- N(r.greaterThan(.001), () => {
2286
- let i = a(w), o = F(i, t.negate()), s = wt(o).lessThan(0).select(Pe(o).mul(v), Pe(o));
2287
- o = v.greaterThan(0).and(F(i, f).greaterThan(0)).select(s, P(o)), C.rgb.addAssign(I(se).div(I(n)).mul(e).mul(r).mul(o));
2282
+ j($e(e).greaterThan(.001), () => {
2283
+ let t = R(ne), r = N(P(p, t));
2284
+ j(r.greaterThan(.001), () => {
2285
+ let i = a(w), o = P(i, t.negate()), s = bt(o).lessThan(0).select(M(o).mul(v), M(o));
2286
+ o = v.greaterThan(0).and(P(i, f).greaterThan(0)).select(s, N(o)), C.rgb.addAssign(F(le).div(F(n)).mul(e).mul(r).mul(o));
2288
2287
  });
2289
2288
  });
2290
2289
  });
2291
2290
  }), U(C);
2292
- }), u = M(() => {
2291
+ }), u = A(() => {
2293
2292
  let e = i(t).toVar();
2294
2293
  e.greaterThanEqual(1).discard();
2295
- let o = Qe(t, e, this._cameraProjectionMatrixInverse).toVar(), c = a(t).toVar(), u = ct(o.xyz.negate()).toVar(), d = s(xt), f = Ze(xt), p = this._temporalDirection.mul(.02), m = Ye(d.add(this._temporalOffset)).add(_t(t.add(p).mul(2).sub(1))), h = I(0), g = U(0), _ = this.sliceCount.toConst(), v = this.aoIntensity.toConst(), y = this.giIntensity.toConst(), b = this.radius.toConst();
2296
- Ae({
2294
+ let o = Ye(t, e, this._cameraProjectionMatrixInverse).toVar(), c = a(t).toVar(), u = R(o.xyz.negate()).toVar(), d = s(_t), f = Je(_t), p = this._temporalDirection.mul(.02), m = Ke(d.add(this._temporalOffset)).add(pt(t.add(p).mul(2).sub(1))), h = F(0), g = U(0), _ = this.sliceCount.toConst(), v = this.aoIntensity.toConst(), y = this.giIntensity.toConst(), b = this.radius.toConst();
2295
+ Oe({
2297
2296
  start: B(0),
2298
2297
  end: _,
2299
2298
  type: "uint",
2300
2299
  condition: "<"
2301
2300
  }, ({ i: e }) => {
2302
- let i = R(I(e).add(f).add(this._temporalDirection), Me.div(I(_))).toConst(), a = U(H(Ue(i), Tt(i)), 0).toConst(), s = a.xy.mul(I(1).div(this._resolution)).toConst(), d = ct(We(a, u)).toConst(), p = We(u, d).toConst(), v = c.sub(d.mul(F(c, d))).toConst(), y = P(F(ct(v).toConst(), u), -1, 1).toConst(), x = wt(F(v, p)).negate().mul(Fe(y)).toConst();
2303
- r.assign(0), g.addAssign(l(Le(!0), b, o, s, m, t, u, c, x)), g.addAssign(l(Le(!1), b, o, s, m, t, u, c, x)), h.addAssign(I(He(r)).div(I(n)));
2304
- }), h.divAssign(I(_)), h.assign(gt(h.clamp().oneMinus(), v).clamp()), g.divAssign(I(_)), g.mulAssign(y);
2305
- let x = I(7).toConst(), S = nt(g), C = S.greaterThan(x).select(x.div(S), I(1));
2301
+ let i = L(F(e).add(f).add(this._temporalDirection), Ae.div(F(_))).toConst(), a = U(H(Be(i), xt(i)), 0).toConst(), s = a.xy.mul(F(1).div(this._resolution)).toConst(), d = R(Ve(a, u)).toConst(), p = Ve(u, d).toConst(), v = c.sub(d.mul(P(c, d))).toConst(), y = N(P(R(v).toConst(), u), -1, 1).toConst(), x = bt(P(v, p)).negate().mul(Me(y)).toConst();
2302
+ r.assign(0), g.addAssign(l(Pe(!0), b, o, s, m, t, u, c, x)), g.addAssign(l(Pe(!1), b, o, s, m, t, u, c, x)), h.addAssign(F(ze(r)).div(F(n)));
2303
+ }), h.divAssign(F(_)), h.assign(ft(h.clamp().oneMinus(), v).clamp()), g.divAssign(F(_)), g.mulAssign(y);
2304
+ let x = F(7).toConst(), S = $e(g), C = S.greaterThan(x).select(x.div(S), F(1));
2306
2305
  return g.mulAssign(C), W(g, h);
2307
2306
  });
2308
2307
  return this._material.fragmentNode = u().context(e.getSharedContext()), this._material.needsUpdate = !0, this._textureNode;
@@ -2310,19 +2309,43 @@ var Tn = /* @__PURE__ */ new Ee(), En = /* @__PURE__ */ new g(), Dn = [
2310
2309
  dispose() {
2311
2310
  this._ssgiRenderTarget.dispose(), this._material.dispose();
2312
2311
  }
2313
- }, jn = (e, t, n, r) => new An(Ve(e), t, n, r), Mn = /* @__PURE__ */ new Ee(), Nn = /* @__PURE__ */ new g(), Pn, Fn = class extends ye {
2312
+ }, Dn = (e, t, n, r) => new En(Re(e), t, n, r), On = class e extends It {
2313
+ static {
2314
+ this.passId = "SsgiRenderPass";
2315
+ }
2316
+ constructor(t) {
2317
+ super(), this.passId = e.passId, this.sliceCount = V(t.sliceCount, "uint"), this.stepCount = V(t.stepCount, "uint"), this.radius = V(t.radius), this.expFactor = V(t.expFactor), this.thickness = V(t.thickness), this.backfaceLighting = V(t.backfaceLighting), this.aoIntensity = V(t.aoIntensity), this.giIntensity = V(t.giIntensity), this.useLinearThickness = V(t.useLinearThickness), this.useScreenSpaceSampling = V(t.useScreenSpaceSampling);
2318
+ }
2319
+ addParametersToGUI(e, t) {
2320
+ let n = e.addFolder("SSGI Settings");
2321
+ n.add(this.sliceCount, "value", 1, 4, 1).name("slice count").onChange(() => t()), n.add(this.stepCount, "value", 1, 32, 1).name("step count").onChange(() => t()), n.add(this.radius, "value", 1, 25).name("radius").onChange(() => t()), n.add(this.expFactor, "value", 1, 3).name("exp factor").onChange(() => t()), n.add(this.thickness, "value", .01, 10).name("thickness").onChange(() => t()), n.add(this.backfaceLighting, "value", 0, 1).name("backface lighting").onChange(() => t()), n.add(this.aoIntensity, "value", 0, 4).name("AO intensity").onChange(() => t()), n.add(this.giIntensity, "value", 0, 100).name("GI intensity").onChange(() => t()), n.add(this.useLinearThickness, "value").name("use linear thickness").onChange(() => t()), n.add(this.useScreenSpaceSampling, "value").name("use screen-space sampling").onChange(() => t());
2322
+ }
2323
+ assemble(e, t, n, i, a) {
2324
+ if (!(i instanceof r)) return t;
2325
+ e.setMRT(nt({
2326
+ output: st,
2327
+ diffuseColor: He,
2328
+ normal: Ue(it),
2329
+ velocity: Ot
2330
+ }));
2331
+ let o = e.getTextureNode("output"), s = e.getTextureNode("diffuseColor"), c = e.getTextureNode("depth"), l = e.getTextureNode("normal"), u = Dn(o, c, gt((e) => Le(l.sample(e))), i);
2332
+ u.sliceCount = this.sliceCount, u.stepCount = this.stepCount, u.radius = this.radius, u.expFactor = this.expFactor, u.thickness = this.thickness, u.backfaceLighting = this.backfaceLighting, u.aoIntensity = this.aoIntensity, u.giIntensity = this.giIntensity, u.useLinearThickness = this.useLinearThickness, u.useScreenSpaceSampling = this.useScreenSpaceSampling;
2333
+ let d = u.rgb, f = u.a, p = W(Ne(o.rgb.mul(f), s.rgb.mul(d)), o.a);
2334
+ return p.name = "Ssgi Composite", a === "ao only" ? W(U(f), 1) : a === "gi only" ? W(d, 1) : a === "direct lighting only" ? o : p;
2335
+ }
2336
+ }, kn = /* @__PURE__ */ new we(), An = /* @__PURE__ */ new h(), jn, Mn = class extends ve {
2314
2337
  static get type() {
2315
2338
  return "TRAANode";
2316
2339
  }
2317
2340
  constructor(t, n, r, i) {
2318
- super("vec4"), this.isTRAANode = !0, this.updateBeforeType = ve.FRAME, this.beautyNode = t, this.depthNode = n, this.velocityNode = r, this.camera = i, this.depthThreshold = 5e-4, this.edgeDepthDiff = .001, this.maxVelocityLength = 128, this.useSubpixelCorrection = !0, this._jitterIndex = 0, this._invSize = V(new g()), this._historyRenderTarget = new e(1, 1, {
2341
+ super("vec4"), this.isTRAANode = !0, this.updateBeforeType = _e.FRAME, this.beautyNode = t, this.depthNode = n, this.velocityNode = r, this.camera = i, this.depthThreshold = 5e-4, this.edgeDepthDiff = .001, this.maxVelocityLength = 128, this.useSubpixelCorrection = !0, this._jitterIndex = 0, this._invSize = V(new h()), this._historyRenderTarget = new e(1, 1, {
2319
2342
  depthBuffer: !1,
2320
- type: w,
2343
+ type: C,
2321
2344
  depthTexture: new a()
2322
2345
  }), this._historyRenderTarget.texture.name = "TRAANode.history", this._resolveRenderTarget = new e(1, 1, {
2323
2346
  depthBuffer: !1,
2324
- type: w
2325
- }), this._resolveRenderTarget.texture.name = "TRAANode.resolve", this._resolveMaterial = new k(), this._resolveMaterial.name = "TRAA.resolve", this._textureNode = pt(this, this._resolveRenderTarget.texture), this._originalProjectionMatrix = new E(), this._cameraNearFar = V(new g()), this._cameraWorldMatrix = V(new E()), this._cameraWorldMatrixInverse = V(new E()), this._cameraProjectionMatrixInverse = V(new E()), this._previousCameraWorldMatrix = V(new E()), this._previousCameraProjectionMatrixInverse = V(new E()), this._previousDepthNode = z(new a(1, 1)), this._needsPostProcessingSync = !1, this._velocityNode = null;
2347
+ type: C
2348
+ }), this._resolveRenderTarget.texture.name = "TRAANode.resolve", this._resolveMaterial = new D(), this._resolveMaterial.name = "TRAA.resolve", this._textureNode = lt(this, this._resolveRenderTarget.texture), this._originalProjectionMatrix = new w(), this._cameraNearFar = V(new h()), this._cameraWorldMatrix = V(new w()), this._cameraWorldMatrixInverse = V(new w()), this._cameraProjectionMatrixInverse = V(new w()), this._previousCameraWorldMatrix = V(new w()), this._previousCameraProjectionMatrixInverse = V(new w()), this._previousDepthNode = z(new a(1, 1)), this._needsPostProcessingSync = !1, this._velocityNode = null;
2326
2349
  }
2327
2350
  getTextureNode() {
2328
2351
  return this._textureNode;
@@ -2339,48 +2362,48 @@ var Tn = /* @__PURE__ */ new Ee(), En = /* @__PURE__ */ new g(), Dn = [
2339
2362
  offsetY: 0,
2340
2363
  width: e,
2341
2364
  height: t
2342
- }, r = Ln[this._jitterIndex];
2365
+ }, r = Pn[this._jitterIndex];
2343
2366
  this.camera.setViewOffset(n.fullWidth, n.fullHeight, n.offsetX + r[0] - .5, n.offsetY + r[1] - .5, n.width, n.height);
2344
2367
  }
2345
2368
  clearViewOffset() {
2346
- this.camera.clearViewOffset(), this._velocityNode.setProjectionMatrix(null), this._jitterIndex++, this._jitterIndex %= Ln.length - 1;
2369
+ this.camera.clearViewOffset(), this._velocityNode.setProjectionMatrix(null), this._jitterIndex++, this._jitterIndex %= Pn.length - 1;
2347
2370
  }
2348
2371
  updateBefore(e) {
2349
2372
  let { renderer: t } = e;
2350
2373
  this._previousCameraWorldMatrix.value.copy(this._cameraWorldMatrix.value), this._previousCameraProjectionMatrixInverse.value.copy(this._cameraProjectionMatrixInverse.value), this._cameraNearFar.value.set(this.camera.near, this.camera.far), this._cameraWorldMatrix.value.copy(this.camera.matrixWorld), this._cameraWorldMatrixInverse.value.copy(this.camera.matrixWorldInverse), this._cameraProjectionMatrixInverse.value.copy(this.camera.projectionMatrixInverse);
2351
2374
  let n = this.beautyNode.isRTTNode ? this.beautyNode.renderTarget : this.beautyNode.passNode.renderTarget, r = n.texture.width, i = n.texture.height;
2352
- this._needsPostProcessingSync === !0 && (this.setViewOffset(r, i), this._needsPostProcessingSync = !1), Pn = j.resetRendererState(t, Pn);
2375
+ this._needsPostProcessingSync === !0 && (this.setViewOffset(r, i), this._needsPostProcessingSync = !1), jn = k.resetRendererState(t, jn);
2353
2376
  let a = this._historyRenderTarget.width !== r || this._historyRenderTarget.height !== i;
2354
- this.setSize(r, i), a === !0 && (t.initRenderTarget(this._historyRenderTarget), t.initRenderTarget(this._resolveRenderTarget), t.copyTextureToTexture(n.texture, this._historyRenderTarget.texture)), t.setRenderTarget(this._resolveRenderTarget), Mn.material = this._resolveMaterial, Mn.name = "TRAA", Mn.render(t), t.setRenderTarget(null), t.copyTextureToTexture(this._resolveRenderTarget.texture, this._historyRenderTarget.texture);
2355
- let o = t.getDrawingBufferSize(Nn);
2377
+ this.setSize(r, i), a === !0 && (t.initRenderTarget(this._historyRenderTarget), t.initRenderTarget(this._resolveRenderTarget), t.copyTextureToTexture(n.texture, this._historyRenderTarget.texture)), t.setRenderTarget(this._resolveRenderTarget), kn.material = this._resolveMaterial, kn.name = "TRAA", kn.render(t), t.setRenderTarget(null), t.copyTextureToTexture(this._resolveRenderTarget.texture, this._historyRenderTarget.texture);
2378
+ let o = t.getDrawingBufferSize(An);
2356
2379
  if (this._historyRenderTarget.height === o.height && this._historyRenderTarget.width === o.width) {
2357
2380
  let e = this.depthNode.value;
2358
2381
  t.copyTextureToTexture(e, this._historyRenderTarget.depthTexture), this._previousDepthNode.value = this._historyRenderTarget.depthTexture;
2359
2382
  }
2360
- j.restoreRendererState(t, Pn);
2383
+ k.restoreRendererState(t, jn);
2361
2384
  }
2362
2385
  setup(e) {
2363
2386
  let t = e.context.renderPipeline;
2364
2387
  t && (this._needsPostProcessingSync = !0, t.context.onBeforeRenderPipeline = () => {
2365
- let t = e.renderer.getDrawingBufferSize(Nn);
2388
+ let t = e.renderer.getDrawingBufferSize(An);
2366
2389
  this.setViewOffset(t.width, t.height);
2367
2390
  }, t.context.onAfterRenderPipeline = () => {
2368
2391
  this.clearViewOffset();
2369
- }), e.renderer.reversedDepthBuffer === !0 && (this._historyRenderTarget.depthTexture.type = O), e.context.velocity === void 0 ? this._velocityNode = Mt : this._velocityNode = e.context.velocity;
2392
+ }), e.renderer.reversedDepthBuffer === !0 && (this._historyRenderTarget.depthTexture.type = ae), e.context.velocity === void 0 ? this._velocityNode = Ot : this._velocityNode = e.context.velocity;
2370
2393
  let n = (e) => {
2371
2394
  let { x: t, y: n } = this._cameraNearFar;
2372
- return Pt(tt(e, t, n), t, n);
2373
- }, r = Ot({
2395
+ return At(Qe(e, t, n), t, n);
2396
+ }, r = wt({
2374
2397
  closestDepth: "float",
2375
2398
  closestPositionTexel: "vec2",
2376
2399
  farthestDepth: "float"
2377
- }), i = M(([t]) => {
2378
- let i = I(2).toVar(), a = H(0).toVar(), o = I(-1).toVar();
2400
+ }), i = A(([t]) => {
2401
+ let i = F(2).toVar(), a = H(0).toVar(), o = F(-1).toVar();
2379
2402
  for (let r = -1; r <= 1; ++r) for (let s = -1; s <= 1; ++s) {
2380
2403
  let c = t.add(H(r, s)).toVar(), l = this.depthNode.load(c).r;
2381
- e.renderer.reversedDepthBuffer && (l = l.oneMinus()), e.renderer.logarithmicDepthBuffer && (l = n(l)), l = l.toVar(), N(l.lessThan(i), () => {
2404
+ e.renderer.reversedDepthBuffer && (l = l.oneMinus()), e.renderer.logarithmicDepthBuffer && (l = n(l)), l = l.toVar(), j(l.lessThan(i), () => {
2382
2405
  i.assign(l), a.assign(c);
2383
- }), N(l.greaterThan(o), () => {
2406
+ }), j(l.greaterThan(o), () => {
2384
2407
  o.assign(l);
2385
2408
  });
2386
2409
  }
@@ -2388,10 +2411,10 @@ var Tn = /* @__PURE__ */ new Ee(), En = /* @__PURE__ */ new g(), Dn = [
2388
2411
  }), a = (t) => {
2389
2412
  let r = this._previousDepthNode.sample(t).r;
2390
2413
  e.renderer.logarithmicDepthBuffer && (r = n(r));
2391
- let i = Qe(t, r, this._previousCameraProjectionMatrixInverse), a = this._previousCameraWorldMatrix.mul(W(i, 1)).xyz, o = this._cameraWorldMatrixInverse.mul(W(a, 1)).z;
2392
- return this.camera.isOrthographicCamera ? Nt(o, this._cameraNearFar.x, this._cameraNearFar.y) : Pt(o, this._cameraNearFar.x, this._cameraNearFar.y);
2393
- }, o = M(([e, t, n, r]) => {
2394
- let i = r.rgb.add(n.rgb).mul(.5), a = r.rgb.sub(n.rgb).mul(.5).add(1e-7), o = t.sub(W(i, e.a)), s = o.xyz.div(a).abs(), c = L(s.x, s.y, s.z);
2414
+ let i = Ye(t, r, this._previousCameraProjectionMatrixInverse), a = this._previousCameraWorldMatrix.mul(W(i, 1)).xyz, o = this._cameraWorldMatrixInverse.mul(W(a, 1)).z;
2415
+ return this.camera.isOrthographicCamera ? kt(o, this._cameraNearFar.x, this._cameraNearFar.y) : At(o, this._cameraNearFar.x, this._cameraNearFar.y);
2416
+ }, o = A(([e, t, n, r]) => {
2417
+ let i = r.rgb.add(n.rgb).mul(.5), a = r.rgb.sub(n.rgb).mul(.5).add(1e-7), o = t.sub(W(i, e.a)), s = o.xyz.div(a).abs(), c = I(s.x, s.y, s.z);
2395
2418
  return c.greaterThan(1).select(W(i, e.a).add(o.div(c)), t);
2396
2419
  }).setLayout({
2397
2420
  name: "clipAABB",
@@ -2414,7 +2437,7 @@ var Tn = /* @__PURE__ */ new Ee(), En = /* @__PURE__ */ new g(), Dn = [
2414
2437
  type: "vec4"
2415
2438
  }
2416
2439
  ]
2417
- }), s = M(([e, t, n, r]) => {
2440
+ }), s = A(([e, t, n, r]) => {
2418
2441
  let i = [
2419
2442
  [-1, -1],
2420
2443
  [-1, 1],
@@ -2426,13 +2449,13 @@ var Tn = /* @__PURE__ */ new Ee(), En = /* @__PURE__ */ new g(), Dn = [
2426
2449
  [-1, 0]
2427
2450
  ], a = t.toVar(), s = t.pow2().toVar();
2428
2451
  for (let [t, n] of i) {
2429
- let r = this.beautyNode.offset(et(t, n)).load(e).max(0);
2452
+ let r = this.beautyNode.offset(Ze(t, n)).load(e).max(0);
2430
2453
  a.addAssign(r), s.addAssign(r.pow2());
2431
2454
  }
2432
- let c = I(i.length + 1), l = a.div(c), u = s.div(c).sub(l.pow2()).max(0).sqrt().mul(r), d = l.sub(u), f = l.add(u);
2455
+ let c = F(i.length + 1), l = a.div(c), u = s.div(c).sub(l.pow2()).max(0).sqrt().mul(r), d = l.sub(u), f = l.add(u);
2433
2456
  return o(l.clamp(d, f), n, d, f);
2434
- }), c = M(([e, t]) => {
2435
- let n = e.mul(t).fract().abs(), r = L(n, n.oneMinus());
2457
+ }), c = A(([e, t]) => {
2458
+ let n = e.mul(t).fract().abs(), r = I(n, n.oneMinus());
2436
2459
  return r.x.mul(r.y).oneMinus().div(.75);
2437
2460
  }).setLayout({
2438
2461
  name: "subpixelCorrection",
@@ -2444,12 +2467,12 @@ var Tn = /* @__PURE__ */ new Ee(), En = /* @__PURE__ */ new g(), Dn = [
2444
2467
  name: "textureSize",
2445
2468
  type: "ivec2"
2446
2469
  }]
2447
- }), l = M(([e, t, n]) => {
2448
- let r = n.oneMinus(), i = e.mul(I(1).div(L(e.r, e.g, e.b).add(1))), a = t.mul(I(1).div(L(t.r, t.g, t.b).add(1))), o = nt(i.rgb), s = nt(a.rgb);
2449
- return n.mulAssign(I(1).div(o.add(1))), r.mulAssign(I(1).div(s.add(1))), Ie(e.mul(n), t.mul(r)).div(L(n.add(r), 1e-5)).toVar();
2450
- }), u = z(this._historyRenderTarget.texture), d = M(() => {
2451
- let e = jt(), t = this.beautyNode.size(), n = e.mul(t), r = i(n), o = r.get("closestDepth"), d = r.get("closestPositionTexel"), f = r.get("farthestDepth"), p = this.velocityNode.load(d).xy.mul(H(.5, -.5)), m = e.sub(p), h = a(m), g = m.greaterThanEqual(0).all().and(m.lessThanEqual(1).all()), _ = f.sub(o).greaterThan(this.edgeDepthDiff), v = o.sub(h).greaterThan(this.depthThreshold), y = g.and(_.or(v.not())), b = this.beautyNode.sample(e), x = u.sample(e.sub(p)), S = e.sub(m).mul(t).length().div(this.maxVelocityLength).saturate(), C = I(.05).toVar();
2452
- return this.useSubpixelCorrection && C.addAssign(c(p, t).mul(.25)), C.assign(y.select(C.add(S).saturate(), 1)), l(b, s(n, b, x, it(.5, 1, S.oneMinus().pow2())), C);
2470
+ }), l = A(([e, t, n]) => {
2471
+ let r = n.oneMinus(), i = e.mul(F(1).div(I(e.r, e.g, e.b).add(1))), a = t.mul(F(1).div(I(t.r, t.g, t.b).add(1))), o = $e(i.rgb), s = $e(a.rgb);
2472
+ return n.mulAssign(F(1).div(o.add(1))), r.mulAssign(F(1).div(s.add(1))), Ne(e.mul(n), t.mul(r)).div(I(n.add(r), 1e-5)).toVar();
2473
+ }), u = z(this._historyRenderTarget.texture), d = A(() => {
2474
+ let e = Dt(), t = this.beautyNode.size(), n = e.mul(t), r = i(n), o = r.get("closestDepth"), d = r.get("closestPositionTexel"), f = r.get("farthestDepth"), p = this.velocityNode.load(d).xy.mul(H(.5, -.5)), m = e.sub(p), h = a(m), g = m.greaterThanEqual(0).all().and(m.lessThanEqual(1).all()), _ = f.sub(o).greaterThan(this.edgeDepthDiff), v = o.sub(h).greaterThan(this.depthThreshold), y = g.and(_.or(v.not())), b = this.beautyNode.sample(e), x = u.sample(e.sub(p)), S = e.sub(m).mul(t).length().div(this.maxVelocityLength).saturate(), C = F(.05).toVar();
2475
+ return this.useSubpixelCorrection && C.addAssign(c(p, t).mul(.25)), C.assign(y.select(C.add(S).saturate(), 1)), l(b, s(n, b, x, tt(.5, 1, S.oneMinus().pow2())), C);
2453
2476
  });
2454
2477
  return this._resolveMaterial.colorNode = d(), this._textureNode;
2455
2478
  }
@@ -2457,46 +2480,31 @@ var Tn = /* @__PURE__ */ new Ee(), En = /* @__PURE__ */ new g(), Dn = [
2457
2480
  this._historyRenderTarget.dispose(), this._resolveRenderTarget.dispose(), this._resolveMaterial.dispose();
2458
2481
  }
2459
2482
  };
2460
- function In(e, t) {
2483
+ function Nn(e, t) {
2461
2484
  let n = 1, r = 0;
2462
2485
  for (; e > 0;) n /= t, r += e % t * n, e = Math.floor(e / t);
2463
2486
  return r;
2464
2487
  }
2465
- var Ln = /* @__PURE__ */ Array.from({ length: 32 }, (e, t) => [In(t + 1, 2), In(t + 1, 3)]), Rn = (e, t, n, r) => new Fn(Ve(e), t, n, r), zn = class e extends Bt {
2466
- static {
2467
- this.passId = "SsgiRenderPass";
2488
+ var Pn = /* @__PURE__ */ Array.from({ length: 32 }, (e, t) => [Nn(t + 1, 2), Nn(t + 1, 3)]), Fn = (e, t, n, r) => new Mn(Re(e), t, n, r), In = class e extends It {
2489
+ constructor(...t) {
2490
+ super(...t), this.passId = e.passId;
2468
2491
  }
2469
- constructor(t) {
2470
- super(), this.passId = e.passId, this.sliceCount = V(t.sliceCount, "uint"), this.stepCount = V(t.stepCount, "uint"), this.radius = V(t.radius), this.expFactor = V(t.expFactor), this.thickness = V(t.thickness), this.backfaceLighting = V(t.backfaceLighting), this.aoIntensity = V(t.aoIntensity), this.giIntensity = V(t.giIntensity), this.useLinearThickness = V(t.useLinearThickness), this.useScreenSpaceSampling = V(t.useScreenSpaceSampling);
2471
- }
2472
- addParametersToGUI(e, t) {
2473
- let n = e.addFolder("SSGI Settings");
2474
- n.add(this.sliceCount, "value", 1, 4, 1).name("slice count").onChange(() => t()), n.add(this.stepCount, "value", 1, 32, 1).name("step count").onChange(() => t()), n.add(this.radius, "value", 1, 25).name("radius").onChange(() => t()), n.add(this.expFactor, "value", 1, 3).name("exp factor").onChange(() => t()), n.add(this.thickness, "value", .01, 10).name("thickness").onChange(() => t()), n.add(this.backfaceLighting, "value", 0, 1).name("backface lighting").onChange(() => t()), n.add(this.aoIntensity, "value", 0, 4).name("AO intensity").onChange(() => t()), n.add(this.giIntensity, "value", 0, 100).name("GI intensity").onChange(() => t()), n.add(this.useLinearThickness, "value").name("use linear thickness").onChange(() => t()), n.add(this.useScreenSpaceSampling, "value").name("use screen-space sampling").onChange(() => t());
2492
+ static {
2493
+ this.passId = "TraaRenderPass";
2475
2494
  }
2476
- assemble(e, t, n, i) {
2477
- if (!(e instanceof xe)) throw Error("Ssgi render pass must be the first render pass in the pipeline");
2478
- if (!(n instanceof r)) return e;
2479
- let a = e;
2480
- e.setMRT(at({
2481
- output: dt,
2482
- diffuseColor: Ge,
2483
- normal: Ke(st),
2484
- velocity: Mt
2485
- }));
2486
- let o = a.getTextureNode("output"), s = a.getTextureNode("diffuseColor"), c = a.getTextureNode("depth"), l = a.getTextureNode("normal"), u = a.getTextureNode("velocity"), d = jn(o, c, bt((e) => Be(l.sample(e))), n);
2487
- d.sliceCount = this.sliceCount, d.stepCount = this.stepCount, d.radius = this.radius, d.expFactor = this.expFactor, d.thickness = this.thickness, d.backfaceLighting = this.backfaceLighting, d.aoIntensity = this.aoIntensity, d.giIntensity = this.giIntensity, d.useLinearThickness = this.useLinearThickness, d.useScreenSpaceSampling = this.useScreenSpaceSampling;
2488
- let f = d.rgb, p = d.a, m = W(Ie(o.rgb.mul(p), s.rgb.mul(f)), o.a);
2489
- return m.name = "Ssgi Composite", i === "ao only" ? W(U(p), 1) : i === "gi only" ? W(f, 1) : i === "direct lighting only" ? o : Rn(m, c, u, n);
2495
+ assemble(e, t, n, i, a) {
2496
+ return i instanceof r ? Fn(t, e.getTextureNode("depth"), e.getTextureNode("velocity"), i) : t;
2490
2497
  }
2491
- }, Bn = class extends _e {
2498
+ addParametersToGUI(e, t) {}
2499
+ }, Ln = class extends ge {
2492
2500
  constructor(e, t, n, r) {
2493
- super(e, t), this.passNeedsReassembly = !0, this.debugMode = "off", this.renderPasses = /* @__PURE__ */ new Map(), this.guiParameterGroups = /* @__PURE__ */ new Map(), this.lastRenderCamera = null, this.renderPipeline = new De(t), n && this.enableSsgiPass(), r && this.enableOutline(r.outlineVisibleEdgeColor, r.outlineHiddenEdgeColor);
2501
+ super(e, t), this.passNeedsReassembly = !0, this.debugMode = "off", this.renderPasses = /* @__PURE__ */ new Map(), this.guiParameterGroups = /* @__PURE__ */ new Map(), this.lastRenderCamera = void 0, this.renderPipeline = new Te(t), this.enableRenderPasses(n, r);
2502
+ }
2503
+ enableRenderPasses(e, t) {
2504
+ e && this.enableSsgiPass(), t && this.enableOutline(t.outlineVisibleEdgeColor, t.outlineHiddenEdgeColor), e && this.enableTraaPass();
2494
2505
  }
2495
2506
  addGroundShadowLightAndFloor(e) {
2496
- let t = new p(16777215, 1);
2497
- t.position.set(0, 50, 0), t.castShadow = !0, t.shadow.intensity = 1, t.shadow.camera.top = 10, t.shadow.camera.bottom = -10, t.shadow.camera.left = -10, t.shadow.camera.right = 10, t.shadow.radius = 1.1, e.add(t);
2498
- let n = new oe(new x(100, 100), ge.createMeshStandardMaterial({ color: "#f7f7f7" }));
2499
- n.position.set(0, -.01, 0), n.rotation.x = -Math.PI / 2, n.receiveShadow = !0, n.userData.isGroundShadowFloor = !0, e.add(n);
2507
+ this._webGpuGroundShadow.addToScene(e);
2500
2508
  }
2501
2509
  addRenderPass(e) {
2502
2510
  this.renderPasses.set(e.passId, e), this.passNeedsReassembly = !0;
@@ -2510,8 +2518,11 @@ var Ln = /* @__PURE__ */ Array.from({ length: 32 }, (e, t) => [In(t + 1, 2), In(
2510
2518
  setCameraType(e) {
2511
2519
  super.setCameraType(e), this.passNeedsReassembly = !0;
2512
2520
  }
2521
+ switchToConfigurator() {
2522
+ super.switchToConfigurator(), this._webGpuGroundShadow?.setVisible(!0);
2523
+ }
2513
2524
  switchToPlanner(e) {
2514
- super.switchToPlanner(e), this.passNeedsReassembly = !0;
2525
+ super.switchToPlanner(e), this._webGpuGroundShadow?.setVisible(!1), this.passNeedsReassembly = !0;
2515
2526
  }
2516
2527
  highlightObjects(e) {
2517
2528
  this.getOutlinePassOrUndefined()?.highlightObjects(e);
@@ -2526,9 +2537,9 @@ var Ln = /* @__PURE__ */ Array.from({ length: 32 }, (e, t) => [In(t + 1, 2), In(
2526
2537
  (e instanceof l || e instanceof r) && e.updateProjectionMatrix();
2527
2538
  }
2528
2539
  assembleRenderPasses(e, t) {
2529
- let n = ft(e, t);
2530
- for (let r of this.renderPasses.values()) n = r.assemble(n, e, t, this.debugMode);
2531
- return n;
2540
+ let n = ct(e, t), r = n;
2541
+ for (let i of this.renderPasses.values()) r = i.assemble(n, r, e, t, this.debugMode);
2542
+ return r;
2532
2543
  }
2533
2544
  setAutoQuality(e) {
2534
2545
  console.error("RoomleRenderer.setAutoQuality is part of autoquality/performance tuning which is not implemented yet for WebGPU");
@@ -2539,14 +2550,13 @@ var Ln = /* @__PURE__ */ Array.from({ length: 32 }, (e, t) => [In(t + 1, 2), In(
2539
2550
  t && t.setOutlineColors(e.outlineVisibleEdgeColor, e.outlineHiddenEdgeColor);
2540
2551
  }
2541
2552
  setGroundShadow(e, t) {
2542
- let n = t.children.find((e) => e.userData.isGroundShadowFloor);
2543
- n && (n.visible = e);
2553
+ this.isConfiguratorMode && this._webGpuGroundShadow?.setVisible(e);
2544
2554
  }
2545
2555
  setOnQualityLevelChangeCallback(e) {
2546
2556
  console.error("RoomleRenderer.setOnQualityLevelChangeCallback is part of autoquality/performance tuning which is not implemented yet for WebGPU");
2547
2557
  }
2548
2558
  enableOutline(e, t) {
2549
- this.getOutlinePassOrUndefined() || this.addRenderPass(new Vt({
2559
+ this.getOutlinePassOrUndefined() || this.addRenderPass(new Lt({
2550
2560
  selectedObjects: [],
2551
2561
  visibleEdgeColor: e,
2552
2562
  hiddenEdgeColor: t,
@@ -2556,11 +2566,11 @@ var Ln = /* @__PURE__ */ Array.from({ length: 32 }, (e, t) => [In(t + 1, 2), In(
2556
2566
  }));
2557
2567
  }
2558
2568
  getOutlinePassOrUndefined() {
2559
- let e = this.renderPasses.get(Vt.passId);
2560
- if (e && e instanceof Vt) return e;
2569
+ let e = this.renderPasses.get(Lt.passId);
2570
+ if (e && e instanceof Lt) return e;
2561
2571
  }
2562
2572
  enableSsgiPass() {
2563
- this.renderPasses.get(zn.passId) || this.addRenderPass(new zn({
2573
+ this.renderPasses.get(On.passId) || this.addRenderPass(new On({
2564
2574
  sliceCount: 2,
2565
2575
  stepCount: 12,
2566
2576
  radius: 8,
@@ -2573,6 +2583,9 @@ var Ln = /* @__PURE__ */ Array.from({ length: 32 }, (e, t) => [In(t + 1, 2), In(
2573
2583
  useScreenSpaceSampling: !0
2574
2584
  }));
2575
2585
  }
2586
+ enableTraaPass() {
2587
+ this.renderPasses.get(In.passId) || this.addRenderPass(new In());
2588
+ }
2576
2589
  setQualityLevel(e) {
2577
2590
  console.error("RoomleRenderer.setQualityLevel is part of autoquality/performance tuning which is not implemented yet for WebGPU");
2578
2591
  }
@@ -2580,16 +2593,17 @@ var Ln = /* @__PURE__ */ Array.from({ length: 32 }, (e, t) => [In(t + 1, 2), In(
2580
2593
  console.error("RoomleRenderer.setQualityMap is part of autoquality/performance tuning which is not implemented yet for WebGPU");
2581
2594
  }
2582
2595
  setShadingType(e) {
2583
- console.error("RoomleWebGPURenderer.setShadingType is not implemented yet");
2596
+ e !== de.DEFAULT && console.error("RoomleWebGPURenderer.setShadingType is not implemented yet");
2584
2597
  }
2585
2598
  showGUI(e) {
2586
- if (this.renderer.inspector instanceof Sn) return;
2599
+ if (this.renderer.inspector instanceof vn) return;
2587
2600
  let t = document.createElement("style");
2588
2601
  t.innerText = "#profiler-toggle,\n #profiler-mini-panel {\n left: 15px;\n right: auto !important;\n }", document.head.appendChild(t);
2589
- let n = new Sn();
2602
+ let n = new vn();
2590
2603
  this.renderer.inspector = n, this._domHelper.element?.appendChild(n.domElement), this.addDebugGUI(n, e);
2591
2604
  let r = n.createParameters("Render Pass Settings");
2592
2605
  for (let t of this.renderPasses.values()) t.addParametersToGUI(r, e);
2606
+ this.addToneMappingSettings(r, e);
2593
2607
  }
2594
2608
  addDebugGUI(e, t) {
2595
2609
  let n = e.createParameters("Debug Settings"), r = { debugMode: this.debugMode };
@@ -2603,9 +2617,28 @@ var Ln = /* @__PURE__ */ Array.from({ length: 32 }, (e, t) => [In(t + 1, 2), In(
2603
2617
  this.debugMode = e, this.passNeedsReassembly = !0, t();
2604
2618
  });
2605
2619
  }
2620
+ addToneMappingSettings(e, t) {
2621
+ let n = e.addFolder("Tone Mapping"), r = {
2622
+ toneMapping: this.renderer.toneMapping,
2623
+ toneMappingExposure: this.renderer.toneMappingExposure
2624
+ };
2625
+ n.add(r, "toneMapping", {
2626
+ None: 0,
2627
+ Linear: 1,
2628
+ Reinhard: 2,
2629
+ Cineon: 3,
2630
+ ACESFilmic: 4,
2631
+ AgX: 6,
2632
+ Neutral: 7
2633
+ }).onChange((e) => {
2634
+ this.renderer.toneMapping = e, this.passNeedsReassembly = !0, t();
2635
+ }), n.add(r, "toneMappingExposure", 0, 3, .01).onChange((e) => {
2636
+ this.renderer.toneMappingExposure = e, this.passNeedsReassembly = !0, t();
2637
+ });
2638
+ }
2606
2639
  getOrCreateGUIParameters(e) {
2607
2640
  let t = this.renderer.inspector;
2608
- if (t instanceof Sn) return this.guiParameterGroups.get(e) ?? this.createAndCacheGUIParameters(t, e);
2641
+ if (t instanceof vn) return this.guiParameterGroups.get(e) ?? this.createAndCacheGUIParameters(t, e);
2609
2642
  throw Error("Inspector GUI is not initialized. Call showGUI() before creating parameter groups.");
2610
2643
  }
2611
2644
  createAndCacheGUIParameters(e, t) {
@@ -2613,8 +2646,8 @@ var Ln = /* @__PURE__ */ Array.from({ length: 32 }, (e, t) => [In(t + 1, 2), In(
2613
2646
  return this.guiParameterGroups.set(t, n), n;
2614
2647
  }
2615
2648
  };
2616
- he([me, pe("design:type", Object)], Bn.prototype, "_domHelper", void 0);
2649
+ he([me, pe("design:type", Object)], Ln.prototype, "_domHelper", void 0), he([me, pe("design:type", Object)], Ln.prototype, "_webGpuGroundShadow", void 0);
2617
2650
  //#endregion
2618
- export { Bn as RoomleWebGPURenderer };
2651
+ export { Ln as RoomleWebGPURenderer };
2619
2652
 
2620
- //# sourceMappingURL=roomle-webgpu-renderer-CdD3cYxN.mjs.map
2653
+ //# sourceMappingURL=roomle-webgpu-renderer-Cs4eLEwf.mjs.map