@roomle/web-sdk 3.6.0 → 3.7.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. package/lib/{BufferGeometry-DLEagG41.mjs → BufferGeometry-BLeRuMkh.mjs} +1 -1
  2. package/lib/{BufferGeometry-DLEagG41.mjs.map → BufferGeometry-BLeRuMkh.mjs.map} +1 -1
  3. package/lib/ConfiguratorKernel.js +54 -73
  4. package/lib/ConfiguratorKernel.wasm +0 -0
  5. package/lib/{GLTFExporter-D8qsdwDK.mjs → GLTFExporter-CFXCqoLa.mjs} +141 -141
  6. package/lib/{GLTFExporter-D8qsdwDK.mjs.map → GLTFExporter-CFXCqoLa.mjs.map} +1 -1
  7. package/lib/{PointLightHelper-BnjxGaOG.mjs → PointLightHelper-BEJEy6l_.mjs} +2 -2
  8. package/lib/{PointLightHelper-BnjxGaOG.mjs.map → PointLightHelper-BEJEy6l_.mjs.map} +1 -1
  9. package/lib/RoomleCore.js +59 -79
  10. package/lib/RoomleCore.wasm +0 -0
  11. package/lib/RoomleToolsCore.js +54 -74
  12. package/lib/RoomleToolsCore.wasm +0 -0
  13. package/lib/{SpotLightHelper-DqsfqCrs.mjs → SpotLightHelper-aXFW8qaJ.mjs} +2 -2
  14. package/lib/{SpotLightHelper-DqsfqCrs.mjs.map → SpotLightHelper-aXFW8qaJ.mjs.map} +1 -1
  15. package/lib/{USDZExporter-DxIqi8St.mjs → USDZExporter-B4hsiwhd.mjs} +2 -2
  16. package/lib/{USDZExporter-DxIqi8St.mjs.map → USDZExporter-B4hsiwhd.mjs.map} +1 -1
  17. package/lib/{api-xDJ-Uyom.mjs → api-C2-6Jm5W.mjs} +2 -2
  18. package/lib/{api-xDJ-Uyom.mjs.map → api-C2-6Jm5W.mjs.map} +1 -1
  19. package/lib/{banana-for-scale-C_iNmlCT.mjs → banana-for-scale-BV_na-g3.mjs} +4 -4
  20. package/lib/banana-for-scale-BV_na-g3.mjs.map +1 -0
  21. package/lib/chunk-C97zSiVS.mjs +20 -0
  22. package/lib/{common-utils-DMSTohiS.mjs → common-utils-qErzZAiR.mjs} +2 -2
  23. package/lib/common-utils-qErzZAiR.mjs.map +1 -0
  24. package/lib/{component-dimensioning-CvRmUja4.mjs → component-dimensioning-DCQTqssC.mjs} +49 -49
  25. package/lib/{component-dimensioning-CvRmUja4.mjs.map → component-dimensioning-DCQTqssC.mjs.map} +1 -1
  26. package/lib/{component-raycast-helper-CEp7wy9c.mjs → component-raycast-helper-B3WXp3oq.mjs} +20 -24
  27. package/lib/component-raycast-helper-B3WXp3oq.mjs.map +1 -0
  28. package/lib/configurator-CrNkzBp9.mjs +2 -0
  29. package/lib/configurator-Dx6kcXY_.mjs +45 -0
  30. package/lib/{configurator-CmuhFgC9.mjs.map → configurator-Dx6kcXY_.mjs.map} +1 -1
  31. package/lib/{continuous-drawing-helper-v_5UAM9A.mjs → continuous-drawing-helper-DzULJ9d1.mjs} +12 -12
  32. package/lib/continuous-drawing-helper-DzULJ9d1.mjs.map +1 -0
  33. package/lib/{decorate-C1QnXPYw.mjs → decorate-BIflHDAa.mjs} +1 -1
  34. package/lib/{decorate-C1QnXPYw.mjs.map → decorate-BIflHDAa.mjs.map} +1 -1
  35. package/lib/{dimensioning-helper-Fwpt1HTT.mjs → dimensioning-helper-Cj20VTW0.mjs} +66 -57
  36. package/lib/{dimensioning-helper-Fwpt1HTT.mjs.map → dimensioning-helper-Cj20VTW0.mjs.map} +1 -1
  37. package/lib/{glb-viewer-BzNA9-zH.mjs → glb-viewer-BqFcaUlb.mjs} +52 -52
  38. package/lib/glb-viewer-BqFcaUlb.mjs.map +1 -0
  39. package/lib/glb-viewer-FYw7R-ya.mjs +2 -0
  40. package/lib/{homag-intelligence-BwGjJEws.mjs → homag-intelligence-Dkz0AhB4.mjs} +3 -3
  41. package/lib/{homag-intelligence-BwGjJEws.mjs.map → homag-intelligence-Dkz0AhB4.mjs.map} +1 -1
  42. package/lib/{imos-ix-poc-export-helper-CQh94HsO.mjs → imos-ix-poc-export-helper-BjIgAfUu.mjs} +4 -3
  43. package/lib/imos-ix-poc-export-helper-BjIgAfUu.mjs.map +1 -0
  44. package/lib/kernel-BAQSG9r5.mjs.map +1 -1
  45. package/lib/{kernel-utils-H74uNY1h.mjs → kernel-utils-CfGzR_WC.mjs} +15 -15
  46. package/lib/{kernel-utils-H74uNY1h.mjs.map → kernel-utils-CfGzR_WC.mjs.map} +1 -1
  47. package/lib/{layer-C_JtkhdO.mjs → layer-CFAr2mK_.mjs} +1 -1
  48. package/lib/{layer-C_JtkhdO.mjs.map → layer-CFAr2mK_.mjs.map} +1 -1
  49. package/lib/{main-CtVIB52l.mjs → main-DMIVdAcT.mjs} +14471 -14300
  50. package/lib/main-DMIVdAcT.mjs.map +1 -0
  51. package/lib/{material-viewer-Bq4smZ6f.mjs → material-viewer-BkwvhHbQ.mjs} +40 -40
  52. package/lib/material-viewer-BkwvhHbQ.mjs.map +1 -0
  53. package/lib/planner-BPlxsTRJ.mjs +44 -0
  54. package/lib/{planner-CVw_xzGh.mjs.map → planner-BPlxsTRJ.mjs.map} +1 -1
  55. package/lib/planner-oj08ktHE.mjs +2 -0
  56. package/lib/{plugin-system-D9K46xJk.mjs → plugin-system-XhOJU1MI.mjs} +3 -3
  57. package/lib/{plugin-system-D9K46xJk.mjs.map → plugin-system-XhOJU1MI.mjs.map} +1 -1
  58. package/lib/roomle-renderer-BwPvUqSW.mjs +49 -0
  59. package/lib/roomle-renderer-BwPvUqSW.mjs.map +1 -0
  60. package/lib/roomle-sdk.d.ts +114 -1116
  61. package/lib/roomle-sdk.js +6 -6
  62. package/lib/roomle-webgpu-renderer-CSC5zFdC.mjs +217 -0
  63. package/lib/roomle-webgpu-renderer-CSC5zFdC.mjs.map +1 -0
  64. package/lib/{scene-renderer-D8HkTFeZ.mjs → scene-renderer-DWY_zPvU.mjs} +496 -513
  65. package/lib/scene-renderer-DWY_zPvU.mjs.map +1 -0
  66. package/lib/{script-loader-D8xCRzTr.mjs → script-loader-CA-XHFKN.mjs} +3 -3
  67. package/lib/{script-loader-D8xCRzTr.mjs.map → script-loader-CA-XHFKN.mjs.map} +1 -1
  68. package/lib/static/roomle-core-hsc/node_modules/roomle-core-hsc/package.json +1 -1
  69. package/lib/static/roomle-core-hsc/node_modules/roomle-core-hsc/src/embind/configuratorCoreInterface.d.ts +0 -1
  70. package/lib/static/roomle-core-hsc/node_modules/roomle-core-hsc/src/embind/plannerCoreInterface.d.ts +3 -3
  71. package/lib/static/roomle-core-hsc/node_modules/roomle-core-hsc/wasm_modern/ConfiguratorKernel.js +54 -73
  72. package/lib/static/roomle-core-hsc/node_modules/roomle-core-hsc/wasm_modern/ConfiguratorKernel.wasm +0 -0
  73. package/lib/static/roomle-core-hsc/node_modules/roomle-core-hsc/wasm_modern/RoomleCore.js +59 -79
  74. package/lib/static/roomle-core-hsc/node_modules/roomle-core-hsc/wasm_modern/RoomleCore.wasm +0 -0
  75. package/lib/static/roomle-core-hsc/node_modules/roomle-core-hsc/wasm_modern/RoomleToolsCore.js +54 -74
  76. package/lib/static/roomle-core-hsc/node_modules/roomle-core-hsc/wasm_modern/RoomleToolsCore.wasm +0 -0
  77. package/lib/{stats-helper-HM0TaIM5.mjs → stats-helper-C954Cfgh.mjs} +4 -3
  78. package/lib/{stats-helper-HM0TaIM5.mjs.map → stats-helper-C954Cfgh.mjs.map} +1 -1
  79. package/lib/{three.core-CLIofecG.mjs → three.core-mM-jZdgg.mjs} +926 -926
  80. package/lib/{three.core-CLIofecG.mjs.map → three.core-mM-jZdgg.mjs.map} +1 -1
  81. package/lib/{three.module-C4Q1skJQ.mjs → three.module-Bmy3sVQ-.mjs} +1210 -1210
  82. package/lib/{three.module-C4Q1skJQ.mjs.map → three.module-Bmy3sVQ-.mjs.map} +1 -1
  83. package/lib/{three.webgpu-dFspy2yF.mjs → three.webgpu-0l2TztLa.mjs} +5355 -2935
  84. package/lib/{three.webgpu-dFspy2yF.mjs.map → three.webgpu-0l2TztLa.mjs.map} +1 -1
  85. package/lib/{threejs-utils-jEzvlJF1.mjs → threejs-utils-8zlxt158.mjs} +430 -431
  86. package/lib/threejs-utils-8zlxt158.mjs.map +1 -0
  87. package/lib/{tools-core-Bf9WsK5v.mjs → tools-core-BzhFD2Wk.mjs} +3 -3
  88. package/lib/{tools-core-Bf9WsK5v.mjs.map → tools-core-BzhFD2Wk.mjs.map} +1 -1
  89. package/package.json +1 -1
  90. package/lib/banana-for-scale-C_iNmlCT.mjs.map +0 -1
  91. package/lib/common-utils-DMSTohiS.mjs.map +0 -1
  92. package/lib/component-raycast-helper-CEp7wy9c.mjs.map +0 -1
  93. package/lib/configurator-BaUt4_LF.mjs +0 -2
  94. package/lib/configurator-CmuhFgC9.mjs +0 -45
  95. package/lib/continuous-drawing-helper-v_5UAM9A.mjs.map +0 -1
  96. package/lib/dimensioning-helper-DTcW85Oq.mjs +0 -2
  97. package/lib/glb-viewer-BzNA9-zH.mjs.map +0 -1
  98. package/lib/glb-viewer-DOxBD5k-.mjs +0 -2
  99. package/lib/imos-ix-poc-export-helper-CQh94HsO.mjs.map +0 -1
  100. package/lib/main-CtVIB52l.mjs.map +0 -1
  101. package/lib/material-viewer-Bq4smZ6f.mjs.map +0 -1
  102. package/lib/planner-CVw_xzGh.mjs +0 -44
  103. package/lib/planner-si70gWA2.mjs +0 -2
  104. package/lib/scene-renderer-D8HkTFeZ.mjs.map +0 -1
  105. package/lib/threejs-utils-jEzvlJF1.mjs.map +0 -1
package/lib/roomle-sdk.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { i as e, t } from "./kernel-BAQSG9r5.mjs";
2
- import { A as n, D as r, F as i, I as a, L as o, M as s, O as c, R as l, U as u, _ as d, a as f, at as p, b as m, c as h, et as g, j as _, k as v, l as y, n as b, nt as x, rt as S, s as C, v as w, y as T, z as E } from "./main-CtVIB52l.mjs";
3
- import { t as D } from "./configurator-CmuhFgC9.mjs";
4
- import { t as O } from "./planner-CVw_xzGh.mjs";
5
- import { n as k, t as A } from "./glb-viewer-BzNA9-zH.mjs";
6
- import { t as j } from "./api-xDJ-Uyom.mjs";
7
- export { t as CONFIGURATION_TYPE, e as CORE_PERMISSION_TO_DELETE, D as Configurator, f as ConfiguratorUiCallbacks, i as FloorPlanElementViewModel, A as GlbViewer, u as GlobalCallback, y as HI_CONTEXT_ACTION, x as IdbManager, b as Main, m as MeasurementLinePlanElementViewModel, d as PLAN_ELEMENT_CHANGE_TYPES, E as PlanElementViewModel, l as PlanObjectViewModel, O as Planner, g as RapiAccess, j as RoomDesignerApi, r as RoomleConfigurator, k as RoomleGLBViewer, p as RoomleLightSource, C as RoomlePlanner, w as RoomlePlannerUiCallback, h as RoomleSdk, o as StaticPlanObjectViewModel, a as WallPlanElementViewModel, c as createExtObj, s as createExtObjId, S as getCatalogIdFromConfigurationHash, v as isExtObjId, n as isExternalObject, T as isSafari, _ as removeExtObjIdPrefix };
2
+ import { A as n, B as r, I as i, L as a, M as o, O as s, R as c, T as l, U as u, V as d, _ as f, at as p, et as m, g as h, h as g, i as _, j as v, k as y, n as b, nt as x, o as S, rt as C, s as w, v as T, z as E } from "./main-DMIVdAcT.mjs";
3
+ import { t as D } from "./configurator-Dx6kcXY_.mjs";
4
+ import { t as O } from "./planner-BPlxsTRJ.mjs";
5
+ import { n as k, t as A } from "./glb-viewer-BqFcaUlb.mjs";
6
+ import { t as j } from "./api-C2-6Jm5W.mjs";
7
+ export { t as CONFIGURATION_TYPE, e as CORE_PERMISSION_TO_DELETE, D as Configurator, _ as ConfiguratorUiCallbacks, s as FloorPlanElementViewModel, A as GlbViewer, u as GlobalCallback, i as HI_CONTEXT_ACTION, x as IdbManager, b as Main, T as MeasurementLinePlanElementViewModel, g as PLAN_ELEMENT_CHANGE_TYPES, o as PlanElementViewModel, v as PlanObjectViewModel, O as Planner, m as RapiAccess, j as RoomDesignerApi, l as RoomleConfigurator, k as RoomleGLBViewer, p as RoomleLightSource, S as RoomlePlanner, h as RoomlePlannerUiCallback, w as RoomleSdk, n as StaticPlanObjectViewModel, y as WallPlanElementViewModel, a as createExtObj, d as createExtObjId, C as getCatalogIdFromConfigurationHash, c as isExtObjId, E as isExternalObject, f as isSafari, r as removeExtObjIdPrefix };
@@ -0,0 +1,217 @@
1
+ import { Ar as e, C as t, J as n, bi as r, st as i } from "./three.core-mM-jZdgg.mjs";
2
+ import { t as a } from "./scene-renderer-DWY_zPvU.mjs";
3
+ import { n as o } from "./roomle-renderer-BwPvUqSW.mjs";
4
+ import { NodeMaterial as s, NodeUpdateType as c, QuadMesh as l, RenderPipeline as u, RendererUtils as d, TSL as f, TempNode as p } from "./three.webgpu-0l2TztLa.mjs";
5
+ f.BRDF_GGX, f.BRDF_Lambert, f.BasicPointShadowFilter, f.BasicShadowFilter, f.Break, f.Const, f.Continue, f.DFGLUT, f.D_GGX, f.Discard, f.EPSILON, f.F_Schlick;
6
+ var m = f.Fn;
7
+ f.INFINITY, f.If;
8
+ var h = f.Loop;
9
+ f.NodeAccess, f.NodeShaderStage, f.NodeType, f.NodeUpdateType, f.PCFShadowFilter, f.PCFSoftShadowFilter, f.PI, f.PI2, f.TWO_PI, f.HALF_PI, f.PointShadowFilter, f.Return, f.Schlick_to_F0, f.ShaderNode, f.Stack, f.Switch, f.TBNViewMatrix, f.VSMShadowFilter, f.V_GGX_SmithCorrelated, f.Var, f.VarIntent, f.abs, f.acesFilmicToneMapping, f.acos, f.add, f.addMethodChaining, f.addNodeElement, f.agxToneMapping, f.all, f.alphaT, f.and, f.anisotropy, f.anisotropyB, f.anisotropyT, f.any, f.append, f.array, f.arrayBuffer, f.asin, f.assign, f.atan, f.atomicAdd, f.atomicAnd, f.atomicFunc, f.atomicLoad, f.atomicMax, f.atomicMin, f.atomicOr, f.atomicStore, f.atomicSub, f.atomicXor, f.attenuationColor, f.attenuationDistance, f.attribute, f.attributeArray, f.backgroundBlurriness, f.backgroundIntensity, f.backgroundRotation, f.batch, f.bentNormalView, f.billboarding, f.bitAnd, f.bitNot, f.bitOr, f.bitXor, f.bitangentGeometry, f.bitangentLocal, f.bitangentView, f.bitangentWorld, f.bitcast, f.blendBurn, f.blendColor, f.blendDodge, f.blendOverlay, f.blendScreen, f.blur, f.bool, f.buffer, f.bufferAttribute, f.bumpMap, f.builtin, f.builtinAOContext, f.builtinShadowContext, f.bvec2, f.bvec3, f.bvec4, f.bypass, f.cache, f.call, f.cameraFar, f.cameraIndex, f.cameraNear, f.cameraNormalMatrix, f.cameraPosition, f.cameraProjectionMatrix, f.cameraProjectionMatrixInverse, f.cameraViewMatrix, f.cameraViewport, f.cameraWorldMatrix, f.cbrt, f.cdl, f.ceil, f.checker, f.cineonToneMapping, f.clamp, f.clearcoat, f.clearcoatNormalView, f.clearcoatRoughness, f.clipSpace, f.code, f.color, f.colorSpaceToWorking, f.colorToDirection, f.compute, f.computeKernel, f.computeSkinning, f.context, f.convert, f.convertColorSpace, f.convertToTexture, f.countLeadingZeros, f.countOneBits, f.countTrailingZeros, f.cos, f.cross, f.cubeTexture, f.cubeTextureBase, f.dFdx, f.dFdy, f.dashSize, f.debug, f.decrement, f.decrementBefore, f.defaultBuildStages, f.defaultShaderStages, f.defined, f.degrees, f.deltaTime, f.densityFog, f.densityFogFactor, f.depth, f.depthPass, f.determinant, f.difference, f.diffuseColor, f.directPointLight, f.directionToColor, f.directionToFaceDirection, f.dispersion, f.distance, f.div, f.dot, f.drawIndex, f.dynamicBufferAttribute, f.element, f.emissive, f.equal, f.equirectUV;
10
+ var g = f.exp;
11
+ f.exp2, f.exponentialHeightFogFactor, f.expression, f.faceDirection, f.faceForward, f.faceforward;
12
+ var _ = f.float;
13
+ f.floatBitsToInt, f.floatBitsToUint, f.floor, f.fog, f.fract, f.frameGroup, f.frameId, f.frontFacing, f.fwidth, f.gain, f.gapSize, f.getConstNodeType, f.getCurrentStack, f.getDirection, f.getDistanceAttenuation, f.getGeometryRoughness, f.getNormalFromDepth, f.interleavedGradientNoise, f.vogelDiskSample, f.getParallaxCorrectNormal, f.getRoughness, f.getScreenPosition, f.getShIrradianceAt, f.getShadowMaterial, f.getShadowRenderObjectFunction, f.getTextureIndex, f.getViewPosition, f.globalId, f.glsl, f.glslFn, f.grayscale, f.greaterThan, f.greaterThanEqual, f.hash, f.highpModelNormalViewMatrix, f.highpModelViewMatrix, f.hue, f.increment, f.incrementBefore, f.instance, f.instanceIndex, f.instancedArray, f.instancedBufferAttribute, f.instancedDynamicBufferAttribute, f.instancedMesh;
14
+ var v = f.int;
15
+ f.intBitsToFloat, f.inverse, f.inverseSqrt, f.inversesqrt, f.invocationLocalIndex, f.invocationSubgroupIndex, f.ior, f.iridescence, f.iridescenceIOR, f.iridescenceThickness, f.ivec2, f.ivec3, f.ivec4, f.js, f.label, f.length, f.lengthSq, f.lessThan, f.lessThanEqual, f.lightPosition, f.lightProjectionUV, f.lightShadowMatrix, f.lightTargetDirection, f.lightTargetPosition, f.lightViewPosition, f.lightingContext, f.lights, f.linearDepth, f.linearToneMapping, f.localId, f.log, f.log2, f.logarithmicDepthToViewZ, f.luminance, f.mat2, f.mat3, f.mat4, f.matcapUV, f.materialAO, f.materialAlphaTest, f.materialAnisotropy, f.materialAnisotropyVector, f.materialAttenuationColor, f.materialAttenuationDistance, f.materialClearcoat, f.materialClearcoatNormal, f.materialClearcoatRoughness, f.materialColor, f.materialDispersion, f.materialEmissive, f.materialEnvIntensity, f.materialEnvRotation, f.materialIOR, f.materialIridescence, f.materialIridescenceIOR, f.materialIridescenceThickness, f.materialLightMap, f.materialLineDashOffset, f.materialLineDashSize, f.materialLineGapSize, f.materialLineScale, f.materialLineWidth, f.materialMetalness, f.materialNormal, f.materialOpacity, f.materialPointSize, f.materialReference, f.materialReflectivity, f.materialRefractionRatio, f.materialRotation, f.materialRoughness, f.materialSheen, f.materialSheenRoughness, f.materialShininess, f.materialSpecular, f.materialSpecularColor, f.materialSpecularIntensity, f.materialSpecularStrength, f.materialThickness, f.materialTransmission, f.max, f.maxMipLevel, f.mediumpModelViewMatrix, f.metalness;
16
+ var y = f.min;
17
+ f.mix, f.mixElement, f.mod, f.modInt, f.modelDirection, f.modelNormalMatrix, f.modelPosition, f.modelRadius, f.modelScale, f.modelViewMatrix, f.modelViewPosition, f.modelViewProjection, f.modelWorldMatrix, f.modelWorldMatrixInverse, f.morphReference, f.mrt;
18
+ var b = f.mul;
19
+ f.mx_aastep, f.mx_add, f.mx_atan2, f.mx_cell_noise_float, f.mx_contrast, f.mx_divide, f.mx_fractal_noise_float, f.mx_fractal_noise_vec2, f.mx_fractal_noise_vec3, f.mx_fractal_noise_vec4, f.mx_frame, f.mx_heighttonormal, f.mx_hsvtorgb, f.mx_ifequal, f.mx_ifgreater, f.mx_ifgreatereq, f.mx_invert, f.mx_modulo, f.mx_multiply, f.mx_noise_float, f.mx_noise_vec3, f.mx_noise_vec4, f.mx_place2d, f.mx_power, f.mx_ramp4, f.mx_ramplr, f.mx_ramptb, f.mx_rgbtohsv, f.mx_rotate2d, f.mx_rotate3d, f.mx_safepower, f.mx_separate, f.mx_splitlr, f.mx_splittb, f.mx_srgb_texture_to_lin_rec709, f.mx_subtract, f.mx_timer, f.mx_transform_uv, f.mx_unifiednoise2d, f.mx_unifiednoise3d, f.mx_worley_noise_float, f.mx_worley_noise_vec2, f.mx_worley_noise_vec3, f.negate, f.neutralToneMapping, f.nodeArray, f.nodeImmutable;
20
+ var x = f.nodeObject;
21
+ f.nodeObjectIntent, f.nodeObjects, f.nodeProxy, f.nodeProxyIntent, f.normalFlat, f.normalGeometry, f.normalLocal, f.normalMap, f.normalView, f.normalViewGeometry, f.normalWorld, f.normalWorldGeometry, f.normalize, f.not, f.notEqual, f.numWorkgroups, f.objectDirection, f.objectGroup, f.objectPosition, f.objectRadius, f.objectScale, f.objectViewPosition, f.objectWorldMatrix, f.OnBeforeObjectUpdate, f.OnBeforeMaterialUpdate, f.OnObjectUpdate, f.OnMaterialUpdate, f.oneMinus, f.or;
22
+ var S = f.orthographicDepthToViewZ;
23
+ f.oscSawtooth, f.oscSine, f.oscSquare, f.oscTriangle, f.output, f.outputStruct, f.overloadingFn, f.packHalf2x16, f.packSnorm2x16, f.packUnorm2x16, f.parabola, f.parallaxDirection, f.parallaxUV, f.parameter;
24
+ var C = f.pass, w = f.passTexture;
25
+ f.pcurve;
26
+ var T = f.perspectiveDepthToViewZ;
27
+ f.pmremTexture, f.pointShadow, f.pointUV, f.pointWidth, f.positionGeometry, f.positionLocal, f.positionPrevious;
28
+ var E = f.positionView;
29
+ f.positionViewDirection, f.positionWorld, f.positionWorldDirection, f.posterize, f.pow, f.pow2, f.pow3, f.pow4, f.premultiplyAlpha, f.property, f.radians, f.rand, f.range, f.rangeFog, f.rangeFogFactor, f.reciprocal;
30
+ var D = f.reference;
31
+ f.referenceBuffer, f.reflect, f.reflectVector, f.reflectView, f.reflector, f.refract, f.refractVector, f.refractView, f.reinhardToneMapping, f.remap, f.remapClamp, f.renderGroup, f.renderOutput, f.rendererReference, f.replaceDefaultUV, f.rotate, f.rotateUV, f.roughness, f.round, f.rtt, f.sRGBTransferEOTF, f.sRGBTransferOETF, f.sample, f.sampler, f.samplerComparison, f.saturate, f.saturation, f.screen, f.screenCoordinate, f.screenDPR, f.screenSize;
32
+ var O = f.screenUV;
33
+ f.select, f.setCurrentStack, f.setName, f.shaderStages, f.shadow, f.shadowPositionWorld, f.shapeCircle, f.sharedUniformGroup, f.sheen, f.sheenRoughness, f.shiftLeft, f.shiftRight, f.shininess, f.sign, f.sin, f.sinc, f.skinning, f.smoothstep, f.smoothstepElement, f.specularColor, f.specularF90, f.spherizeUV, f.split, f.spritesheetUV, f.sqrt, f.stack, f.step, f.stepElement, f.storage, f.storageBarrier, f.storageTexture, f.string, f.struct, f.sub, f.subgroupAdd, f.subgroupAll, f.subgroupAnd, f.subgroupAny, f.subgroupBallot, f.subgroupBroadcast, f.subgroupBroadcastFirst, f.subBuild, f.subgroupElect, f.subgroupExclusiveAdd, f.subgroupExclusiveMul, f.subgroupInclusiveAdd, f.subgroupInclusiveMul, f.subgroupIndex, f.subgroupMax, f.subgroupMin, f.subgroupMul, f.subgroupOr, f.subgroupShuffle, f.subgroupShuffleDown, f.subgroupShuffleUp, f.subgroupShuffleXor, f.subgroupSize, f.subgroupXor, f.tan, f.tangentGeometry, f.tangentLocal, f.tangentView, f.tangentWorld;
34
+ var k = f.texture;
35
+ f.texture3D, f.textureBarrier, f.textureBicubic, f.textureBicubicLevel, f.textureCubeUV, f.textureLoad;
36
+ var A = f.textureSize;
37
+ f.textureLevel, f.textureStore, f.thickness, f.time, f.toneMapping, f.toneMappingExposure, f.toonOutlinePass, f.transformDirection, f.transformNormal, f.transformNormalToView, f.transformedClearcoatNormalView, f.transformedNormalView, f.transformedNormalWorld, f.transmission, f.transpose, f.triNoise3D, f.triplanarTexture, f.triplanarTextures, f.trunc, f.uint, f.uintBitsToFloat;
38
+ var j = f.uniform;
39
+ f.uniformArray, f.uniformCubeTexture, f.uniformGroup, f.uniformFlow, f.uniformTexture, f.unpackHalf2x16, f.unpackSnorm2x16, f.unpackUnorm2x16, f.unpremultiplyAlpha, f.userData;
40
+ var M = f.uv;
41
+ f.uvec2, f.uvec3, f.uvec4, f.varying, f.varyingProperty;
42
+ var N = f.vec2, P = f.vec3, F = f.vec4;
43
+ f.vectorComponents, f.velocity, f.vertexColor, f.vertexIndex, f.vertexStage, f.vibrance, f.viewZToLogarithmicDepth, f.viewZToOrthographicDepth, f.viewZToPerspectiveDepth, f.viewZToReversedOrthographicDepth, f.viewZToReversedPerspectiveDepth, f.viewport, f.viewportCoordinate, f.viewportDepthTexture, f.viewportLinearDepth, f.viewportMipTexture, f.viewportOpaqueMipTexture, f.viewportResolution, f.viewportSafeUV, f.viewportSharedTexture, f.viewportSize, f.viewportTexture, f.viewportUV, f.wgsl, f.wgslFn, f.workgroupArray, f.workgroupBarrier, f.workgroupId, f.workingToColorSpace, f.xor;
44
+ //#endregion
45
+ //#region ../../node_modules/three/examples/jsm/tsl/display/OutlineNode.js
46
+ var I = /* @__PURE__ */ new l(), L = /* @__PURE__ */ new r(), R = /* @__PURE__ */ new r(1, 0), z = /* @__PURE__ */ new r(0, 1), B, V = class extends p {
47
+ static get type() {
48
+ return "OutlineNode";
49
+ }
50
+ constructor(t, a, o = {}) {
51
+ super("vec4");
52
+ let { selectedObjects: l = [], edgeThickness: u = _(1), edgeGlow: d = _(0), downSampleRatio: f = 2 } = o;
53
+ this.scene = t, this.camera = a, this.selectedObjects = l, this.edgeThicknessNode = x(u), this.edgeGlowNode = x(d), this.downSampleRatio = f, this.updateBeforeType = c.FRAME, this._renderTargetDepthBuffer = new e(), this._renderTargetDepthBuffer.depthTexture = new n(), this._renderTargetDepthBuffer.depthTexture.type = i, 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 = D("near", "float", a), this._cameraFar = D("far", "float", a), this._blurDirection = j(new r()), this._depthTextureUniform = k(this._renderTargetDepthBuffer.depthTexture), this._maskTextureUniform = k(this._renderTargetMaskBuffer.texture), this._maskTextureDownsSampleUniform = k(this._renderTargetMaskDownSampleBuffer.texture), this._edge1TextureUniform = k(this._renderTargetEdgeBuffer1.texture), this._edge2TextureUniform = k(this._renderTargetEdgeBuffer2.texture), this._blurColorTextureUniform = k(this._renderTargetEdgeBuffer1.texture), this._visibleEdgeColor = P(1, 0, 0), this._hiddenEdgeColor = P(0, 1, 0), this._depthMaterial = new s(), this._depthMaterial.fragmentNode = F(0, 0, 0, 1), this._depthMaterial.name = "OutlineNode.depth", this._prepareMaskMaterial = new s(), this._prepareMaskMaterial.name = "OutlineNode.prepareMask", this._materialCopy = new s(), this._materialCopy.name = "OutlineNode.copy", this._edgeDetectionMaterial = new s(), this._edgeDetectionMaterial.name = "OutlineNode.edgeDetection", this._separableBlurMaterial = new s(), this._separableBlurMaterial.name = "OutlineNode.separableBlur", this._separableBlurMaterial2 = new s(), this._separableBlurMaterial2.name = "OutlineNode.separableBlur2", this._compositeMaterial = new s(), this._compositeMaterial.name = "OutlineNode.composite", this._selectionCache = /* @__PURE__ */ new Set(), this._textureNode = w(this, this._renderTargetComposite.texture);
54
+ }
55
+ get visibleEdge() {
56
+ return this.r;
57
+ }
58
+ get hiddenEdge() {
59
+ return this.g;
60
+ }
61
+ getTextureNode() {
62
+ return this._textureNode;
63
+ }
64
+ setSize(e, t) {
65
+ this._renderTargetDepthBuffer.setSize(e, t), this._renderTargetMaskBuffer.setSize(e, t), this._renderTargetComposite.setSize(e, t);
66
+ let n = Math.round(e / this.downSampleRatio), r = Math.round(t / this.downSampleRatio);
67
+ this._renderTargetMaskDownSampleBuffer.setSize(n, r), this._renderTargetEdgeBuffer1.setSize(n, r), this._renderTargetBlurBuffer1.setSize(n, r), n = Math.round(n / 2), r = Math.round(r / 2), this._renderTargetEdgeBuffer2.setSize(n, r), this._renderTargetBlurBuffer2.setSize(n, r);
68
+ }
69
+ updateBefore(e) {
70
+ let { renderer: t } = e, { camera: n, scene: r } = this;
71
+ B = d.resetRendererAndSceneState(t, r, B);
72
+ let i = t.getDrawingBufferSize(L);
73
+ this.setSize(i.width, i.height), t.setClearColor(16777215, 1), this._updateSelectionCache();
74
+ let a = r.name;
75
+ r.overrideMaterial = this._depthMaterial, t.setRenderTarget(this._renderTargetDepthBuffer), t.setRenderObjectFunction((e, ...n) => {
76
+ this._selectionCache.has(e) === !1 && t.renderObject(e, ...n);
77
+ }), r.name = "Outline [ Non-Selected Objects Pass ]", t.render(r, n), r.overrideMaterial = this._prepareMaskMaterial, t.setRenderTarget(this._renderTargetMaskBuffer), t.setRenderObjectFunction((e, ...n) => {
78
+ this._selectionCache.has(e) === !0 && t.renderObject(e, ...n);
79
+ }), r.name = "Outline [ Selected Objects Pass ]", t.render(r, n), t.setRenderObjectFunction(B.renderObjectFunction), this._selectionCache.clear(), r.name = a, I.material = this._materialCopy, I.name = "Outline [ Downsample ]", t.setRenderTarget(this._renderTargetMaskDownSampleBuffer), I.render(t), I.material = this._edgeDetectionMaterial, I.name = "Outline [ Edge Detection ]", t.setRenderTarget(this._renderTargetEdgeBuffer1), I.render(t), this._blurColorTextureUniform.value = this._renderTargetEdgeBuffer1.texture, this._blurDirection.value.copy(R), I.material = this._separableBlurMaterial, I.name = "Outline [ Blur Half Resolution ]", t.setRenderTarget(this._renderTargetBlurBuffer1), I.render(t), this._blurColorTextureUniform.value = this._renderTargetBlurBuffer1.texture, this._blurDirection.value.copy(z), t.setRenderTarget(this._renderTargetEdgeBuffer1), I.render(t), this._blurColorTextureUniform.value = this._renderTargetEdgeBuffer1.texture, this._blurDirection.value.copy(R), I.material = this._separableBlurMaterial2, I.name = "Outline [ Blur Quarter Resolution ]", t.setRenderTarget(this._renderTargetBlurBuffer2), I.render(t), this._blurColorTextureUniform.value = this._renderTargetBlurBuffer2.texture, this._blurDirection.value.copy(z), t.setRenderTarget(this._renderTargetEdgeBuffer2), I.render(t), I.material = this._compositeMaterial, I.name = "Outline [ Blur Quarter Resolution ]", t.setRenderTarget(this._renderTargetComposite), I.render(t), d.restoreRendererAndSceneState(t, r, B);
80
+ }
81
+ setup() {
82
+ let e = () => {
83
+ let e = this._depthTextureUniform.sample(O), t;
84
+ return t = this.camera.isPerspectiveCamera ? T(e, this._cameraNear, this._cameraFar) : S(e, this._cameraNear, this._cameraFar), F(0, E.z.lessThanEqual(t).select(1, 0), 1, 1);
85
+ };
86
+ this._prepareMaskMaterial.fragmentNode = e(), this._prepareMaskMaterial.needsUpdate = !0, this._materialCopy.fragmentNode = this._maskTextureUniform, this._materialCopy.needsUpdate = !0;
87
+ let t = m(() => {
88
+ let e = A(this._maskTextureDownsSampleUniform), t = N(1).div(e).toVar(), n = F(1, 0, 0, 1).mul(F(t, t)), r = M(), 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 = N(b(i.r.sub(a.r), .5), b(o.r.sub(s.r), .5)).length();
89
+ return F(y(y(i.g, a.g), y(o.g, s.g)).oneMinus().greaterThan(.001).select(this._visibleEdgeColor, this._hiddenEdgeColor), 1).mul(c);
90
+ });
91
+ this._edgeDetectionMaterial.fragmentNode = t(), this._edgeDetectionMaterial.needsUpdate = !0;
92
+ let n = m(([e, t]) => _(.39894).mul(g(_(-.5).mul(e).mul(e).div(t.mul(t))).div(t))), r = m(([e]) => {
93
+ let t = A(this._maskTextureDownsSampleUniform), r = N(1).div(t).toVar(), i = M(), 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();
94
+ return h({
95
+ start: v(1),
96
+ end: v(4),
97
+ type: "int",
98
+ condition: "<="
99
+ }, ({ i: t }) => {
100
+ let r = n(e.mul(_(t)).div(4), a), u = this._blurColorTextureUniform.sample(i.add(l)), d = this._blurColorTextureUniform.sample(i.sub(l));
101
+ s.addAssign(u.add(d).mul(r)), o.addAssign(r.mul(2)), l.addAssign(c);
102
+ }), s.div(o);
103
+ });
104
+ this._separableBlurMaterial.fragmentNode = r(this.edgeThicknessNode), this._separableBlurMaterial.needsUpdate = !0, this._separableBlurMaterial2.fragmentNode = r(4), this._separableBlurMaterial2.needsUpdate = !0;
105
+ let i = m(() => {
106
+ let e = this._edge1TextureUniform, t = this._edge2TextureUniform, n = this._maskTextureUniform, r = e.add(t.mul(this.edgeGlowNode));
107
+ return n.r.mul(r);
108
+ });
109
+ return this._compositeMaterial.fragmentNode = i(), this._compositeMaterial.needsUpdate = !0, this._textureNode;
110
+ }
111
+ dispose() {
112
+ this.selectedObjects.length = 0, this._renderTargetDepthBuffer.dispose(), this._renderTargetMaskBuffer.dispose(), this._renderTargetMaskDownSampleBuffer.dispose(), this._renderTargetEdgeBuffer1.dispose(), this._renderTargetEdgeBuffer2.dispose(), this._renderTargetBlurBuffer1.dispose(), this._renderTargetBlurBuffer2.dispose(), this._renderTargetComposite.dispose(), this._depthMaterial.dispose(), this._prepareMaskMaterial.dispose(), this._materialCopy.dispose(), this._edgeDetectionMaterial.dispose(), this._separableBlurMaterial.dispose(), this._separableBlurMaterial2.dispose(), this._compositeMaterial.dispose();
113
+ }
114
+ _updateSelectionCache() {
115
+ for (let e = 0; e < this.selectedObjects.length; e++) this.selectedObjects[e].traverse((e) => {
116
+ e.isMesh && this._selectionCache.add(e);
117
+ });
118
+ }
119
+ }, H = (e, t, n) => new V(e, t, n), U = class {}, W = class e extends U {
120
+ static {
121
+ this.passId = "OutlineRenderPass";
122
+ }
123
+ constructor(n) {
124
+ super(), this.passId = e.passId, this.selectedObjects = n.selectedObjects, this.edgeStrength = j(n.edgeStrength), this.edgeGlow = j(n.edgeGlow), this.edgeThickness = j(n.edgeThickness), this.visibleEdgeColor = j(new t(n.visibleEdgeColor)), this.hiddenEdgeColor = j(new t(n.hiddenEdgeColor));
125
+ }
126
+ highlightObjects(e) {
127
+ this.selectedObjects.splice(0, this.selectedObjects.length, ...e);
128
+ }
129
+ areObjectsSelected() {
130
+ return this.selectedObjects.length !== 0;
131
+ }
132
+ assemble(e, t, n) {
133
+ if (!this.areObjectsSelected()) return e;
134
+ let { visibleEdge: r, hiddenEdge: i } = H(t, n, {
135
+ selectedObjects: this.selectedObjects,
136
+ edgeThickness: this.edgeThickness,
137
+ edgeGlow: this.edgeGlow
138
+ }), a = r.mul(this.visibleEdgeColor).add(i.mul(this.hiddenEdgeColor)).mul(this.edgeStrength);
139
+ return e.add(a);
140
+ }
141
+ }, G = class extends o {
142
+ constructor(e, t, n) {
143
+ super(e, t), this.passNeedsReassembly = !0, this.renderPasses = /* @__PURE__ */ new Map(), this.renderPipeline = new u(t), n && this.enableOutline(n.outlineVisibleEdgeColor, n.outlineHiddenEdgeColor);
144
+ }
145
+ addRenderPass(e) {
146
+ this.renderPasses.set(e.passId, e), this.passNeedsReassembly = !0;
147
+ }
148
+ clearCache() {
149
+ console.error("RoomleWebGPURenderer.clearCache is not implemented yet");
150
+ }
151
+ disableUiInteractionMode() {
152
+ console.error("RoomleWebGPURenderer.disableUiInteractionMode is not implemented yet");
153
+ }
154
+ enableUiInteractionMode() {
155
+ console.error("RoomleWebGPURenderer.enableUiInteractionMode is not implemented yet");
156
+ }
157
+ getQualityLevel() {
158
+ return console.error("RoomleWebGPURenderer.getQualityLevel is not implemented yet"), a.HIGHEST;
159
+ }
160
+ highlightObjects(e) {
161
+ let t = this.getOutlinePassOrUndefined();
162
+ t && (this.passNeedsReassembly = this.passNeedsReassembly || t.areObjectsSelected() && e.length === 0 || !t.areObjectsSelected() && e.length > 0), t?.highlightObjects(e);
163
+ }
164
+ loadLutImages(e) {
165
+ console.error("RoomleWebGPURenderer.loadLutImages is not implemented yet");
166
+ }
167
+ render(e, t) {
168
+ this.passNeedsReassembly &&= (this.renderPipeline.outputNode = this.assembleRenderPasses(e, t), this.renderPipeline.needsUpdate = !0, !1), this.renderPipeline.render(e, t);
169
+ }
170
+ assembleRenderPasses(e, t) {
171
+ let n = C(e, t);
172
+ for (let r of this.renderPasses.values()) n = r.assemble(n, e, t);
173
+ return n;
174
+ }
175
+ setAutoQuality(e) {
176
+ console.error("RoomleWebGPURenderer.setAutoQuality is not implemented yet");
177
+ }
178
+ setCustomShadingParameters(e, t) {
179
+ console.error("RoomleWebGPURenderer.setCustomShadingParameters is not implemented yet");
180
+ }
181
+ setGroundShadow(e) {
182
+ console.error("RoomleWebGPURenderer.setGroundShadow is not implemented yet");
183
+ }
184
+ setOnQualityLevelChangeCallback(e) {
185
+ console.error("RoomleWebGPURenderer.setOnQualityLevelChangeCallback is not implemented yet");
186
+ }
187
+ enableOutline(e, t) {
188
+ this.renderPasses.get(W.passId) || this.addRenderPass(new W({
189
+ selectedObjects: [],
190
+ visibleEdgeColor: e,
191
+ hiddenEdgeColor: t,
192
+ edgeStrength: 3,
193
+ edgeGlow: 0,
194
+ edgeThickness: 1
195
+ }));
196
+ }
197
+ getOutlinePassOrUndefined() {
198
+ let e = this.renderPasses.get(W.passId);
199
+ if (e && e instanceof W) return e;
200
+ }
201
+ setQualityLevel(e) {
202
+ console.error("RoomleWebGPURenderer.setQualityLevel is not implemented yet");
203
+ }
204
+ setQualityMap(e) {
205
+ console.error("RoomleWebGPURenderer.setQualityMap is not implemented yet");
206
+ }
207
+ setShadingType(e) {
208
+ console.error("RoomleWebGPURenderer.setShadingType is not implemented yet");
209
+ }
210
+ showGUI(e) {
211
+ console.error("RoomleWebGPURenderer.showGUI is not implemented yet");
212
+ }
213
+ };
214
+ //#endregion
215
+ export { G as RoomleWebGPURenderer };
216
+
217
+ //# sourceMappingURL=roomle-webgpu-renderer-CSC5zFdC.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"roomle-webgpu-renderer-CSC5zFdC.mjs","names":["NodeUpdateType"],"sources":["../../../../node_modules/three/build/three.tsl.js","../../../../node_modules/three/examples/jsm/tsl/display/OutlineNode.js","../../packages/common-core/src/webgpu/passes/roomle-webgpu-render-pass.ts","../../packages/common-core/src/webgpu/passes/outline-render-pass.ts","../../packages/common-core/src/webgpu/roomle-webgpu-renderer.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2010-2026 Three.js Authors\n * SPDX-License-Identifier: MIT\n */\nimport { TSL } from 'three/webgpu';\n\nconst BRDF_GGX = TSL.BRDF_GGX;\nconst BRDF_Lambert = TSL.BRDF_Lambert;\nconst BasicPointShadowFilter = TSL.BasicPointShadowFilter;\nconst BasicShadowFilter = TSL.BasicShadowFilter;\nconst Break = TSL.Break;\nconst Const = TSL.Const;\nconst Continue = TSL.Continue;\nconst DFGLUT = TSL.DFGLUT;\nconst D_GGX = TSL.D_GGX;\nconst Discard = TSL.Discard;\nconst EPSILON = TSL.EPSILON;\nconst F_Schlick = TSL.F_Schlick;\nconst Fn = TSL.Fn;\nconst INFINITY = TSL.INFINITY;\nconst If = TSL.If;\nconst Loop = TSL.Loop;\nconst NodeAccess = TSL.NodeAccess;\nconst NodeShaderStage = TSL.NodeShaderStage;\nconst NodeType = TSL.NodeType;\nconst NodeUpdateType = TSL.NodeUpdateType;\nconst PCFShadowFilter = TSL.PCFShadowFilter;\nconst PCFSoftShadowFilter = TSL.PCFSoftShadowFilter;\nconst PI = TSL.PI;\nconst PI2 = TSL.PI2;\nconst TWO_PI = TSL.TWO_PI;\nconst HALF_PI = TSL.HALF_PI;\nconst PointShadowFilter = TSL.PointShadowFilter;\nconst Return = TSL.Return;\nconst Schlick_to_F0 = TSL.Schlick_to_F0;\nconst ShaderNode = TSL.ShaderNode;\nconst Stack = TSL.Stack;\nconst Switch = TSL.Switch;\nconst TBNViewMatrix = TSL.TBNViewMatrix;\nconst VSMShadowFilter = TSL.VSMShadowFilter;\nconst V_GGX_SmithCorrelated = TSL.V_GGX_SmithCorrelated;\nconst Var = TSL.Var;\nconst VarIntent = TSL.VarIntent;\nconst abs = TSL.abs;\nconst acesFilmicToneMapping = TSL.acesFilmicToneMapping;\nconst acos = TSL.acos;\nconst add = TSL.add;\nconst addMethodChaining = TSL.addMethodChaining;\nconst addNodeElement = TSL.addNodeElement;\nconst agxToneMapping = TSL.agxToneMapping;\nconst all = TSL.all;\nconst alphaT = TSL.alphaT;\nconst and = TSL.and;\nconst anisotropy = TSL.anisotropy;\nconst anisotropyB = TSL.anisotropyB;\nconst anisotropyT = TSL.anisotropyT;\nconst any = TSL.any;\nconst append = TSL.append;\nconst array = TSL.array;\nconst arrayBuffer = TSL.arrayBuffer;\nconst asin = TSL.asin;\nconst assign = TSL.assign;\nconst atan = TSL.atan;\nconst atomicAdd = TSL.atomicAdd;\nconst atomicAnd = TSL.atomicAnd;\nconst atomicFunc = TSL.atomicFunc;\nconst atomicLoad = TSL.atomicLoad;\nconst atomicMax = TSL.atomicMax;\nconst atomicMin = TSL.atomicMin;\nconst atomicOr = TSL.atomicOr;\nconst atomicStore = TSL.atomicStore;\nconst atomicSub = TSL.atomicSub;\nconst atomicXor = TSL.atomicXor;\nconst attenuationColor = TSL.attenuationColor;\nconst attenuationDistance = TSL.attenuationDistance;\nconst attribute = TSL.attribute;\nconst attributeArray = TSL.attributeArray;\nconst backgroundBlurriness = TSL.backgroundBlurriness;\nconst backgroundIntensity = TSL.backgroundIntensity;\nconst backgroundRotation = TSL.backgroundRotation;\nconst batch = TSL.batch;\nconst bentNormalView = TSL.bentNormalView;\nconst billboarding = TSL.billboarding;\nconst bitAnd = TSL.bitAnd;\nconst bitNot = TSL.bitNot;\nconst bitOr = TSL.bitOr;\nconst bitXor = TSL.bitXor;\nconst bitangentGeometry = TSL.bitangentGeometry;\nconst bitangentLocal = TSL.bitangentLocal;\nconst bitangentView = TSL.bitangentView;\nconst bitangentWorld = TSL.bitangentWorld;\nconst bitcast = TSL.bitcast;\nconst blendBurn = TSL.blendBurn;\nconst blendColor = TSL.blendColor;\nconst blendDodge = TSL.blendDodge;\nconst blendOverlay = TSL.blendOverlay;\nconst blendScreen = TSL.blendScreen;\nconst blur = TSL.blur;\nconst bool = TSL.bool;\nconst buffer = TSL.buffer;\nconst bufferAttribute = TSL.bufferAttribute;\nconst bumpMap = TSL.bumpMap;\nconst builtin = TSL.builtin;\nconst builtinAOContext = TSL.builtinAOContext;\nconst builtinShadowContext = TSL.builtinShadowContext;\nconst bvec2 = TSL.bvec2;\nconst bvec3 = TSL.bvec3;\nconst bvec4 = TSL.bvec4;\nconst bypass = TSL.bypass;\nconst cache = TSL.cache;\nconst call = TSL.call;\nconst cameraFar = TSL.cameraFar;\nconst cameraIndex = TSL.cameraIndex;\nconst cameraNear = TSL.cameraNear;\nconst cameraNormalMatrix = TSL.cameraNormalMatrix;\nconst cameraPosition = TSL.cameraPosition;\nconst cameraProjectionMatrix = TSL.cameraProjectionMatrix;\nconst cameraProjectionMatrixInverse = TSL.cameraProjectionMatrixInverse;\nconst cameraViewMatrix = TSL.cameraViewMatrix;\nconst cameraViewport = TSL.cameraViewport;\nconst cameraWorldMatrix = TSL.cameraWorldMatrix;\nconst cbrt = TSL.cbrt;\nconst cdl = TSL.cdl;\nconst ceil = TSL.ceil;\nconst checker = TSL.checker;\nconst cineonToneMapping = TSL.cineonToneMapping;\nconst clamp = TSL.clamp;\nconst clearcoat = TSL.clearcoat;\nconst clearcoatNormalView = TSL.clearcoatNormalView;\nconst clearcoatRoughness = TSL.clearcoatRoughness;\nconst clipSpace = TSL.clipSpace;\nconst code = TSL.code;\nconst color = TSL.color;\nconst colorSpaceToWorking = TSL.colorSpaceToWorking;\nconst colorToDirection = TSL.colorToDirection;\nconst compute = TSL.compute;\nconst computeKernel = TSL.computeKernel;\nconst computeSkinning = TSL.computeSkinning;\nconst context = TSL.context;\nconst convert = TSL.convert;\nconst convertColorSpace = TSL.convertColorSpace;\nconst convertToTexture = TSL.convertToTexture;\nconst countLeadingZeros = TSL.countLeadingZeros;\nconst countOneBits = TSL.countOneBits;\nconst countTrailingZeros = TSL.countTrailingZeros;\nconst cos = TSL.cos;\nconst cross = TSL.cross;\nconst cubeTexture = TSL.cubeTexture;\nconst cubeTextureBase = TSL.cubeTextureBase;\nconst dFdx = TSL.dFdx;\nconst dFdy = TSL.dFdy;\nconst dashSize = TSL.dashSize;\nconst debug = TSL.debug;\nconst decrement = TSL.decrement;\nconst decrementBefore = TSL.decrementBefore;\nconst defaultBuildStages = TSL.defaultBuildStages;\nconst defaultShaderStages = TSL.defaultShaderStages;\nconst defined = TSL.defined;\nconst degrees = TSL.degrees;\nconst deltaTime = TSL.deltaTime;\nconst densityFog = TSL.densityFog;\nconst densityFogFactor = TSL.densityFogFactor;\nconst depth = TSL.depth;\nconst depthPass = TSL.depthPass;\nconst determinant = TSL.determinant;\nconst difference = TSL.difference;\nconst diffuseColor = TSL.diffuseColor;\nconst directPointLight = TSL.directPointLight;\nconst directionToColor = TSL.directionToColor;\nconst directionToFaceDirection = TSL.directionToFaceDirection;\nconst dispersion = TSL.dispersion;\nconst distance = TSL.distance;\nconst div = TSL.div;\nconst dot = TSL.dot;\nconst drawIndex = TSL.drawIndex;\nconst dynamicBufferAttribute = TSL.dynamicBufferAttribute;\nconst element = TSL.element;\nconst emissive = TSL.emissive;\nconst equal = TSL.equal;\nconst equirectUV = TSL.equirectUV;\nconst exp = TSL.exp;\nconst exp2 = TSL.exp2;\nconst exponentialHeightFogFactor = TSL.exponentialHeightFogFactor;\nconst expression = TSL.expression;\nconst faceDirection = TSL.faceDirection;\nconst faceForward = TSL.faceForward;\nconst faceforward = TSL.faceforward;\nconst float = TSL.float;\nconst floatBitsToInt = TSL.floatBitsToInt;\nconst floatBitsToUint = TSL.floatBitsToUint;\nconst floor = TSL.floor;\nconst fog = TSL.fog;\nconst fract = TSL.fract;\nconst frameGroup = TSL.frameGroup;\nconst frameId = TSL.frameId;\nconst frontFacing = TSL.frontFacing;\nconst fwidth = TSL.fwidth;\nconst gain = TSL.gain;\nconst gapSize = TSL.gapSize;\nconst getConstNodeType = TSL.getConstNodeType;\nconst getCurrentStack = TSL.getCurrentStack;\nconst getDirection = TSL.getDirection;\nconst getDistanceAttenuation = TSL.getDistanceAttenuation;\nconst getGeometryRoughness = TSL.getGeometryRoughness;\nconst getNormalFromDepth = TSL.getNormalFromDepth;\nconst interleavedGradientNoise = TSL.interleavedGradientNoise;\nconst vogelDiskSample = TSL.vogelDiskSample;\nconst getParallaxCorrectNormal = TSL.getParallaxCorrectNormal;\nconst getRoughness = TSL.getRoughness;\nconst getScreenPosition = TSL.getScreenPosition;\nconst getShIrradianceAt = TSL.getShIrradianceAt;\nconst getShadowMaterial = TSL.getShadowMaterial;\nconst getShadowRenderObjectFunction = TSL.getShadowRenderObjectFunction;\nconst getTextureIndex = TSL.getTextureIndex;\nconst getViewPosition = TSL.getViewPosition;\nconst globalId = TSL.globalId;\nconst glsl = TSL.glsl;\nconst glslFn = TSL.glslFn;\nconst grayscale = TSL.grayscale;\nconst greaterThan = TSL.greaterThan;\nconst greaterThanEqual = TSL.greaterThanEqual;\nconst hash = TSL.hash;\nconst highpModelNormalViewMatrix = TSL.highpModelNormalViewMatrix;\nconst highpModelViewMatrix = TSL.highpModelViewMatrix;\nconst hue = TSL.hue;\nconst increment = TSL.increment;\nconst incrementBefore = TSL.incrementBefore;\nconst instance = TSL.instance;\nconst instanceIndex = TSL.instanceIndex;\nconst instancedArray = TSL.instancedArray;\nconst instancedBufferAttribute = TSL.instancedBufferAttribute;\nconst instancedDynamicBufferAttribute = TSL.instancedDynamicBufferAttribute;\nconst instancedMesh = TSL.instancedMesh;\nconst int = TSL.int;\nconst intBitsToFloat = TSL.intBitsToFloat;\nconst inverse = TSL.inverse;\nconst inverseSqrt = TSL.inverseSqrt;\nconst inversesqrt = TSL.inversesqrt;\nconst invocationLocalIndex = TSL.invocationLocalIndex;\nconst invocationSubgroupIndex = TSL.invocationSubgroupIndex;\nconst ior = TSL.ior;\nconst iridescence = TSL.iridescence;\nconst iridescenceIOR = TSL.iridescenceIOR;\nconst iridescenceThickness = TSL.iridescenceThickness;\nconst ivec2 = TSL.ivec2;\nconst ivec3 = TSL.ivec3;\nconst ivec4 = TSL.ivec4;\nconst js = TSL.js;\nconst label = TSL.label;\nconst length = TSL.length;\nconst lengthSq = TSL.lengthSq;\nconst lessThan = TSL.lessThan;\nconst lessThanEqual = TSL.lessThanEqual;\nconst lightPosition = TSL.lightPosition;\nconst lightProjectionUV = TSL.lightProjectionUV;\nconst lightShadowMatrix = TSL.lightShadowMatrix;\nconst lightTargetDirection = TSL.lightTargetDirection;\nconst lightTargetPosition = TSL.lightTargetPosition;\nconst lightViewPosition = TSL.lightViewPosition;\nconst lightingContext = TSL.lightingContext;\nconst lights = TSL.lights;\nconst linearDepth = TSL.linearDepth;\nconst linearToneMapping = TSL.linearToneMapping;\nconst localId = TSL.localId;\nconst log = TSL.log;\nconst log2 = TSL.log2;\nconst logarithmicDepthToViewZ = TSL.logarithmicDepthToViewZ;\nconst luminance = TSL.luminance;\nconst mat2 = TSL.mat2;\nconst mat3 = TSL.mat3;\nconst mat4 = TSL.mat4;\nconst matcapUV = TSL.matcapUV;\nconst materialAO = TSL.materialAO;\nconst materialAlphaTest = TSL.materialAlphaTest;\nconst materialAnisotropy = TSL.materialAnisotropy;\nconst materialAnisotropyVector = TSL.materialAnisotropyVector;\nconst materialAttenuationColor = TSL.materialAttenuationColor;\nconst materialAttenuationDistance = TSL.materialAttenuationDistance;\nconst materialClearcoat = TSL.materialClearcoat;\nconst materialClearcoatNormal = TSL.materialClearcoatNormal;\nconst materialClearcoatRoughness = TSL.materialClearcoatRoughness;\nconst materialColor = TSL.materialColor;\nconst materialDispersion = TSL.materialDispersion;\nconst materialEmissive = TSL.materialEmissive;\nconst materialEnvIntensity = TSL.materialEnvIntensity;\nconst materialEnvRotation = TSL.materialEnvRotation;\nconst materialIOR = TSL.materialIOR;\nconst materialIridescence = TSL.materialIridescence;\nconst materialIridescenceIOR = TSL.materialIridescenceIOR;\nconst materialIridescenceThickness = TSL.materialIridescenceThickness;\nconst materialLightMap = TSL.materialLightMap;\nconst materialLineDashOffset = TSL.materialLineDashOffset;\nconst materialLineDashSize = TSL.materialLineDashSize;\nconst materialLineGapSize = TSL.materialLineGapSize;\nconst materialLineScale = TSL.materialLineScale;\nconst materialLineWidth = TSL.materialLineWidth;\nconst materialMetalness = TSL.materialMetalness;\nconst materialNormal = TSL.materialNormal;\nconst materialOpacity = TSL.materialOpacity;\nconst materialPointSize = TSL.materialPointSize;\nconst materialReference = TSL.materialReference;\nconst materialReflectivity = TSL.materialReflectivity;\nconst materialRefractionRatio = TSL.materialRefractionRatio;\nconst materialRotation = TSL.materialRotation;\nconst materialRoughness = TSL.materialRoughness;\nconst materialSheen = TSL.materialSheen;\nconst materialSheenRoughness = TSL.materialSheenRoughness;\nconst materialShininess = TSL.materialShininess;\nconst materialSpecular = TSL.materialSpecular;\nconst materialSpecularColor = TSL.materialSpecularColor;\nconst materialSpecularIntensity = TSL.materialSpecularIntensity;\nconst materialSpecularStrength = TSL.materialSpecularStrength;\nconst materialThickness = TSL.materialThickness;\nconst materialTransmission = TSL.materialTransmission;\nconst max = TSL.max;\nconst maxMipLevel = TSL.maxMipLevel;\nconst mediumpModelViewMatrix = TSL.mediumpModelViewMatrix;\nconst metalness = TSL.metalness;\nconst min = TSL.min;\nconst mix = TSL.mix;\nconst mixElement = TSL.mixElement;\nconst mod = TSL.mod;\nconst modInt = TSL.modInt;\nconst modelDirection = TSL.modelDirection;\nconst modelNormalMatrix = TSL.modelNormalMatrix;\nconst modelPosition = TSL.modelPosition;\nconst modelRadius = TSL.modelRadius;\nconst modelScale = TSL.modelScale;\nconst modelViewMatrix = TSL.modelViewMatrix;\nconst modelViewPosition = TSL.modelViewPosition;\nconst modelViewProjection = TSL.modelViewProjection;\nconst modelWorldMatrix = TSL.modelWorldMatrix;\nconst modelWorldMatrixInverse = TSL.modelWorldMatrixInverse;\nconst morphReference = TSL.morphReference;\nconst mrt = TSL.mrt;\nconst mul = TSL.mul;\nconst mx_aastep = TSL.mx_aastep;\nconst mx_add = TSL.mx_add;\nconst mx_atan2 = TSL.mx_atan2;\nconst mx_cell_noise_float = TSL.mx_cell_noise_float;\nconst mx_contrast = TSL.mx_contrast;\nconst mx_divide = TSL.mx_divide;\nconst mx_fractal_noise_float = TSL.mx_fractal_noise_float;\nconst mx_fractal_noise_vec2 = TSL.mx_fractal_noise_vec2;\nconst mx_fractal_noise_vec3 = TSL.mx_fractal_noise_vec3;\nconst mx_fractal_noise_vec4 = TSL.mx_fractal_noise_vec4;\nconst mx_frame = TSL.mx_frame;\nconst mx_heighttonormal = TSL.mx_heighttonormal;\nconst mx_hsvtorgb = TSL.mx_hsvtorgb;\nconst mx_ifequal = TSL.mx_ifequal;\nconst mx_ifgreater = TSL.mx_ifgreater;\nconst mx_ifgreatereq = TSL.mx_ifgreatereq;\nconst mx_invert = TSL.mx_invert;\nconst mx_modulo = TSL.mx_modulo;\nconst mx_multiply = TSL.mx_multiply;\nconst mx_noise_float = TSL.mx_noise_float;\nconst mx_noise_vec3 = TSL.mx_noise_vec3;\nconst mx_noise_vec4 = TSL.mx_noise_vec4;\nconst mx_place2d = TSL.mx_place2d;\nconst mx_power = TSL.mx_power;\nconst mx_ramp4 = TSL.mx_ramp4;\nconst mx_ramplr = TSL.mx_ramplr;\nconst mx_ramptb = TSL.mx_ramptb;\nconst mx_rgbtohsv = TSL.mx_rgbtohsv;\nconst mx_rotate2d = TSL.mx_rotate2d;\nconst mx_rotate3d = TSL.mx_rotate3d;\nconst mx_safepower = TSL.mx_safepower;\nconst mx_separate = TSL.mx_separate;\nconst mx_splitlr = TSL.mx_splitlr;\nconst mx_splittb = TSL.mx_splittb;\nconst mx_srgb_texture_to_lin_rec709 = TSL.mx_srgb_texture_to_lin_rec709;\nconst mx_subtract = TSL.mx_subtract;\nconst mx_timer = TSL.mx_timer;\nconst mx_transform_uv = TSL.mx_transform_uv;\nconst mx_unifiednoise2d = TSL.mx_unifiednoise2d;\nconst mx_unifiednoise3d = TSL.mx_unifiednoise3d;\nconst mx_worley_noise_float = TSL.mx_worley_noise_float;\nconst mx_worley_noise_vec2 = TSL.mx_worley_noise_vec2;\nconst mx_worley_noise_vec3 = TSL.mx_worley_noise_vec3;\nconst negate = TSL.negate;\nconst neutralToneMapping = TSL.neutralToneMapping;\nconst nodeArray = TSL.nodeArray;\nconst nodeImmutable = TSL.nodeImmutable;\nconst nodeObject = TSL.nodeObject;\nconst nodeObjectIntent = TSL.nodeObjectIntent;\nconst nodeObjects = TSL.nodeObjects;\nconst nodeProxy = TSL.nodeProxy;\nconst nodeProxyIntent = TSL.nodeProxyIntent;\nconst normalFlat = TSL.normalFlat;\nconst normalGeometry = TSL.normalGeometry;\nconst normalLocal = TSL.normalLocal;\nconst normalMap = TSL.normalMap;\nconst normalView = TSL.normalView;\nconst normalViewGeometry = TSL.normalViewGeometry;\nconst normalWorld = TSL.normalWorld;\nconst normalWorldGeometry = TSL.normalWorldGeometry;\nconst normalize = TSL.normalize;\nconst not = TSL.not;\nconst notEqual = TSL.notEqual;\nconst numWorkgroups = TSL.numWorkgroups;\nconst objectDirection = TSL.objectDirection;\nconst objectGroup = TSL.objectGroup;\nconst objectPosition = TSL.objectPosition;\nconst objectRadius = TSL.objectRadius;\nconst objectScale = TSL.objectScale;\nconst objectViewPosition = TSL.objectViewPosition;\nconst objectWorldMatrix = TSL.objectWorldMatrix;\nconst OnBeforeObjectUpdate = TSL.OnBeforeObjectUpdate;\nconst OnBeforeMaterialUpdate = TSL.OnBeforeMaterialUpdate;\nconst OnObjectUpdate = TSL.OnObjectUpdate;\nconst OnMaterialUpdate = TSL.OnMaterialUpdate;\nconst oneMinus = TSL.oneMinus;\nconst or = TSL.or;\nconst orthographicDepthToViewZ = TSL.orthographicDepthToViewZ;\nconst oscSawtooth = TSL.oscSawtooth;\nconst oscSine = TSL.oscSine;\nconst oscSquare = TSL.oscSquare;\nconst oscTriangle = TSL.oscTriangle;\nconst output = TSL.output;\nconst outputStruct = TSL.outputStruct;\nconst overloadingFn = TSL.overloadingFn;\nconst packHalf2x16 = TSL.packHalf2x16;\nconst packSnorm2x16 = TSL.packSnorm2x16;\nconst packUnorm2x16 = TSL.packUnorm2x16;\nconst parabola = TSL.parabola;\nconst parallaxDirection = TSL.parallaxDirection;\nconst parallaxUV = TSL.parallaxUV;\nconst parameter = TSL.parameter;\nconst pass = TSL.pass;\nconst passTexture = TSL.passTexture;\nconst pcurve = TSL.pcurve;\nconst perspectiveDepthToViewZ = TSL.perspectiveDepthToViewZ;\nconst pmremTexture = TSL.pmremTexture;\nconst pointShadow = TSL.pointShadow;\nconst pointUV = TSL.pointUV;\nconst pointWidth = TSL.pointWidth;\nconst positionGeometry = TSL.positionGeometry;\nconst positionLocal = TSL.positionLocal;\nconst positionPrevious = TSL.positionPrevious;\nconst positionView = TSL.positionView;\nconst positionViewDirection = TSL.positionViewDirection;\nconst positionWorld = TSL.positionWorld;\nconst positionWorldDirection = TSL.positionWorldDirection;\nconst posterize = TSL.posterize;\nconst pow = TSL.pow;\nconst pow2 = TSL.pow2;\nconst pow3 = TSL.pow3;\nconst pow4 = TSL.pow4;\nconst premultiplyAlpha = TSL.premultiplyAlpha;\nconst property = TSL.property;\nconst radians = TSL.radians;\nconst rand = TSL.rand;\nconst range = TSL.range;\nconst rangeFog = TSL.rangeFog;\nconst rangeFogFactor = TSL.rangeFogFactor;\nconst reciprocal = TSL.reciprocal;\nconst reference = TSL.reference;\nconst referenceBuffer = TSL.referenceBuffer;\nconst reflect = TSL.reflect;\nconst reflectVector = TSL.reflectVector;\nconst reflectView = TSL.reflectView;\nconst reflector = TSL.reflector;\nconst refract = TSL.refract;\nconst refractVector = TSL.refractVector;\nconst refractView = TSL.refractView;\nconst reinhardToneMapping = TSL.reinhardToneMapping;\nconst remap = TSL.remap;\nconst remapClamp = TSL.remapClamp;\nconst renderGroup = TSL.renderGroup;\nconst renderOutput = TSL.renderOutput;\nconst rendererReference = TSL.rendererReference;\nconst replaceDefaultUV = TSL.replaceDefaultUV;\nconst rotate = TSL.rotate;\nconst rotateUV = TSL.rotateUV;\nconst roughness = TSL.roughness;\nconst round = TSL.round;\nconst rtt = TSL.rtt;\nconst sRGBTransferEOTF = TSL.sRGBTransferEOTF;\nconst sRGBTransferOETF = TSL.sRGBTransferOETF;\nconst sample = TSL.sample;\nconst sampler = TSL.sampler;\nconst samplerComparison = TSL.samplerComparison;\nconst saturate = TSL.saturate;\nconst saturation = TSL.saturation;\nconst screen = TSL.screen;\nconst screenCoordinate = TSL.screenCoordinate;\nconst screenDPR = TSL.screenDPR;\nconst screenSize = TSL.screenSize;\nconst screenUV = TSL.screenUV;\nconst select = TSL.select;\nconst setCurrentStack = TSL.setCurrentStack;\nconst setName = TSL.setName;\nconst shaderStages = TSL.shaderStages;\nconst shadow = TSL.shadow;\nconst shadowPositionWorld = TSL.shadowPositionWorld;\nconst shapeCircle = TSL.shapeCircle;\nconst sharedUniformGroup = TSL.sharedUniformGroup;\nconst sheen = TSL.sheen;\nconst sheenRoughness = TSL.sheenRoughness;\nconst shiftLeft = TSL.shiftLeft;\nconst shiftRight = TSL.shiftRight;\nconst shininess = TSL.shininess;\nconst sign = TSL.sign;\nconst sin = TSL.sin;\nconst sinc = TSL.sinc;\nconst skinning = TSL.skinning;\nconst smoothstep = TSL.smoothstep;\nconst smoothstepElement = TSL.smoothstepElement;\nconst specularColor = TSL.specularColor;\nconst specularF90 = TSL.specularF90;\nconst spherizeUV = TSL.spherizeUV;\nconst split = TSL.split;\nconst spritesheetUV = TSL.spritesheetUV;\nconst sqrt = TSL.sqrt;\nconst stack = TSL.stack;\nconst step = TSL.step;\nconst stepElement = TSL.stepElement;\nconst storage = TSL.storage;\nconst storageBarrier = TSL.storageBarrier;\nconst storageTexture = TSL.storageTexture;\nconst string = TSL.string;\nconst struct = TSL.struct;\nconst sub = TSL.sub;\nconst subgroupAdd = TSL.subgroupAdd;\nconst subgroupAll = TSL.subgroupAll;\nconst subgroupAnd = TSL.subgroupAnd;\nconst subgroupAny = TSL.subgroupAny;\nconst subgroupBallot = TSL.subgroupBallot;\nconst subgroupBroadcast = TSL.subgroupBroadcast;\nconst subgroupBroadcastFirst = TSL.subgroupBroadcastFirst;\nconst subBuild = TSL.subBuild;\nconst subgroupElect = TSL.subgroupElect;\nconst subgroupExclusiveAdd = TSL.subgroupExclusiveAdd;\nconst subgroupExclusiveMul = TSL.subgroupExclusiveMul;\nconst subgroupInclusiveAdd = TSL.subgroupInclusiveAdd;\nconst subgroupInclusiveMul = TSL.subgroupInclusiveMul;\nconst subgroupIndex = TSL.subgroupIndex;\nconst subgroupMax = TSL.subgroupMax;\nconst subgroupMin = TSL.subgroupMin;\nconst subgroupMul = TSL.subgroupMul;\nconst subgroupOr = TSL.subgroupOr;\nconst subgroupShuffle = TSL.subgroupShuffle;\nconst subgroupShuffleDown = TSL.subgroupShuffleDown;\nconst subgroupShuffleUp = TSL.subgroupShuffleUp;\nconst subgroupShuffleXor = TSL.subgroupShuffleXor;\nconst subgroupSize = TSL.subgroupSize;\nconst subgroupXor = TSL.subgroupXor;\nconst tan = TSL.tan;\nconst tangentGeometry = TSL.tangentGeometry;\nconst tangentLocal = TSL.tangentLocal;\nconst tangentView = TSL.tangentView;\nconst tangentWorld = TSL.tangentWorld;\nconst texture = TSL.texture;\nconst texture3D = TSL.texture3D;\nconst textureBarrier = TSL.textureBarrier;\nconst textureBicubic = TSL.textureBicubic;\nconst textureBicubicLevel = TSL.textureBicubicLevel;\nconst textureCubeUV = TSL.textureCubeUV;\nconst textureLoad = TSL.textureLoad;\nconst textureSize = TSL.textureSize;\nconst textureLevel = TSL.textureLevel;\nconst textureStore = TSL.textureStore;\nconst thickness = TSL.thickness;\nconst time = TSL.time;\nconst toneMapping = TSL.toneMapping;\nconst toneMappingExposure = TSL.toneMappingExposure;\nconst toonOutlinePass = TSL.toonOutlinePass;\nconst transformDirection = TSL.transformDirection;\nconst transformNormal = TSL.transformNormal;\nconst transformNormalToView = TSL.transformNormalToView;\nconst transformedClearcoatNormalView = TSL.transformedClearcoatNormalView;\nconst transformedNormalView = TSL.transformedNormalView;\nconst transformedNormalWorld = TSL.transformedNormalWorld;\nconst transmission = TSL.transmission;\nconst transpose = TSL.transpose;\nconst triNoise3D = TSL.triNoise3D;\nconst triplanarTexture = TSL.triplanarTexture;\nconst triplanarTextures = TSL.triplanarTextures;\nconst trunc = TSL.trunc;\nconst uint = TSL.uint;\nconst uintBitsToFloat = TSL.uintBitsToFloat;\nconst uniform = TSL.uniform;\nconst uniformArray = TSL.uniformArray;\nconst uniformCubeTexture = TSL.uniformCubeTexture;\nconst uniformGroup = TSL.uniformGroup;\nconst uniformFlow = TSL.uniformFlow;\nconst uniformTexture = TSL.uniformTexture;\nconst unpackHalf2x16 = TSL.unpackHalf2x16;\nconst unpackSnorm2x16 = TSL.unpackSnorm2x16;\nconst unpackUnorm2x16 = TSL.unpackUnorm2x16;\nconst unpremultiplyAlpha = TSL.unpremultiplyAlpha;\nconst userData = TSL.userData;\nconst uv = TSL.uv;\nconst uvec2 = TSL.uvec2;\nconst uvec3 = TSL.uvec3;\nconst uvec4 = TSL.uvec4;\nconst varying = TSL.varying;\nconst varyingProperty = TSL.varyingProperty;\nconst vec2 = TSL.vec2;\nconst vec3 = TSL.vec3;\nconst vec4 = TSL.vec4;\nconst vectorComponents = TSL.vectorComponents;\nconst velocity = TSL.velocity;\nconst vertexColor = TSL.vertexColor;\nconst vertexIndex = TSL.vertexIndex;\nconst vertexStage = TSL.vertexStage;\nconst vibrance = TSL.vibrance;\nconst viewZToLogarithmicDepth = TSL.viewZToLogarithmicDepth;\nconst viewZToOrthographicDepth = TSL.viewZToOrthographicDepth;\nconst viewZToPerspectiveDepth = TSL.viewZToPerspectiveDepth;\nconst viewZToReversedOrthographicDepth = TSL.viewZToReversedOrthographicDepth;\nconst viewZToReversedPerspectiveDepth = TSL.viewZToReversedPerspectiveDepth;\nconst viewport = TSL.viewport;\nconst viewportCoordinate = TSL.viewportCoordinate;\nconst viewportDepthTexture = TSL.viewportDepthTexture;\nconst viewportLinearDepth = TSL.viewportLinearDepth;\nconst viewportMipTexture = TSL.viewportMipTexture;\nconst viewportOpaqueMipTexture = TSL.viewportOpaqueMipTexture;\nconst viewportResolution = TSL.viewportResolution;\nconst viewportSafeUV = TSL.viewportSafeUV;\nconst viewportSharedTexture = TSL.viewportSharedTexture;\nconst viewportSize = TSL.viewportSize;\nconst viewportTexture = TSL.viewportTexture;\nconst viewportUV = TSL.viewportUV;\nconst wgsl = TSL.wgsl;\nconst wgslFn = TSL.wgslFn;\nconst workgroupArray = TSL.workgroupArray;\nconst workgroupBarrier = TSL.workgroupBarrier;\nconst workgroupId = TSL.workgroupId;\nconst workingToColorSpace = TSL.workingToColorSpace;\nconst xor = TSL.xor;\n\n/*\n// Use this code to generate the export statements dynamically\n\nlet code = '';\n\nfor ( const key of Object.keys( THREE.TSL ) ) {\n\n\tcode += `export const ${ key } = TSL.${ key };\\n`;\n\n}\n\nlog( code );\n//*/\n\nexport { BRDF_GGX, BRDF_Lambert, BasicPointShadowFilter, BasicShadowFilter, Break, Const, Continue, DFGLUT, D_GGX, Discard, EPSILON, F_Schlick, Fn, HALF_PI, INFINITY, If, Loop, NodeAccess, NodeShaderStage, NodeType, NodeUpdateType, OnBeforeMaterialUpdate, OnBeforeObjectUpdate, OnMaterialUpdate, OnObjectUpdate, PCFShadowFilter, PCFSoftShadowFilter, PI, PI2, PointShadowFilter, Return, Schlick_to_F0, ShaderNode, Stack, Switch, TBNViewMatrix, TWO_PI, VSMShadowFilter, V_GGX_SmithCorrelated, Var, VarIntent, abs, acesFilmicToneMapping, acos, add, addMethodChaining, addNodeElement, agxToneMapping, all, alphaT, and, anisotropy, anisotropyB, anisotropyT, any, append, array, arrayBuffer, asin, assign, atan, atomicAdd, atomicAnd, atomicFunc, atomicLoad, atomicMax, atomicMin, atomicOr, atomicStore, atomicSub, atomicXor, attenuationColor, attenuationDistance, attribute, attributeArray, backgroundBlurriness, backgroundIntensity, backgroundRotation, batch, bentNormalView, billboarding, bitAnd, bitNot, bitOr, bitXor, bitangentGeometry, bitangentLocal, bitangentView, bitangentWorld, bitcast, blendBurn, blendColor, blendDodge, blendOverlay, blendScreen, blur, bool, buffer, bufferAttribute, builtin, builtinAOContext, builtinShadowContext, bumpMap, bvec2, bvec3, bvec4, bypass, cache, call, cameraFar, cameraIndex, cameraNear, cameraNormalMatrix, cameraPosition, cameraProjectionMatrix, cameraProjectionMatrixInverse, cameraViewMatrix, cameraViewport, cameraWorldMatrix, cbrt, cdl, ceil, checker, cineonToneMapping, clamp, clearcoat, clearcoatNormalView, clearcoatRoughness, clipSpace, code, color, colorSpaceToWorking, colorToDirection, compute, computeKernel, computeSkinning, context, convert, convertColorSpace, convertToTexture, cos, countLeadingZeros, countOneBits, countTrailingZeros, cross, cubeTexture, cubeTextureBase, dFdx, dFdy, dashSize, debug, decrement, decrementBefore, defaultBuildStages, defaultShaderStages, defined, degrees, deltaTime, densityFog, densityFogFactor, depth, depthPass, determinant, difference, diffuseColor, directPointLight, directionToColor, directionToFaceDirection, dispersion, distance, div, dot, drawIndex, dynamicBufferAttribute, element, emissive, equal, equirectUV, exp, exp2, exponentialHeightFogFactor, expression, faceDirection, faceForward, faceforward, float, floatBitsToInt, floatBitsToUint, floor, fog, fract, frameGroup, frameId, frontFacing, fwidth, gain, gapSize, getConstNodeType, getCurrentStack, getDirection, getDistanceAttenuation, getGeometryRoughness, getNormalFromDepth, getParallaxCorrectNormal, getRoughness, getScreenPosition, getShIrradianceAt, getShadowMaterial, getShadowRenderObjectFunction, getTextureIndex, getViewPosition, globalId, glsl, glslFn, grayscale, greaterThan, greaterThanEqual, hash, highpModelNormalViewMatrix, highpModelViewMatrix, hue, increment, incrementBefore, instance, instanceIndex, instancedArray, instancedBufferAttribute, instancedDynamicBufferAttribute, instancedMesh, int, intBitsToFloat, interleavedGradientNoise, inverse, inverseSqrt, inversesqrt, invocationLocalIndex, invocationSubgroupIndex, ior, iridescence, iridescenceIOR, iridescenceThickness, ivec2, ivec3, ivec4, js, label, length, lengthSq, lessThan, lessThanEqual, lightPosition, lightProjectionUV, lightShadowMatrix, lightTargetDirection, lightTargetPosition, lightViewPosition, lightingContext, lights, linearDepth, linearToneMapping, localId, log, log2, logarithmicDepthToViewZ, luminance, mat2, mat3, mat4, matcapUV, materialAO, materialAlphaTest, materialAnisotropy, materialAnisotropyVector, materialAttenuationColor, materialAttenuationDistance, materialClearcoat, materialClearcoatNormal, materialClearcoatRoughness, materialColor, materialDispersion, materialEmissive, materialEnvIntensity, materialEnvRotation, materialIOR, materialIridescence, materialIridescenceIOR, materialIridescenceThickness, materialLightMap, materialLineDashOffset, materialLineDashSize, materialLineGapSize, materialLineScale, materialLineWidth, materialMetalness, materialNormal, materialOpacity, materialPointSize, materialReference, materialReflectivity, materialRefractionRatio, materialRotation, materialRoughness, materialSheen, materialSheenRoughness, materialShininess, materialSpecular, materialSpecularColor, materialSpecularIntensity, materialSpecularStrength, materialThickness, materialTransmission, max, maxMipLevel, mediumpModelViewMatrix, metalness, min, mix, mixElement, mod, modInt, modelDirection, modelNormalMatrix, modelPosition, modelRadius, modelScale, modelViewMatrix, modelViewPosition, modelViewProjection, modelWorldMatrix, modelWorldMatrixInverse, morphReference, mrt, mul, mx_aastep, mx_add, mx_atan2, mx_cell_noise_float, mx_contrast, mx_divide, mx_fractal_noise_float, mx_fractal_noise_vec2, mx_fractal_noise_vec3, mx_fractal_noise_vec4, mx_frame, mx_heighttonormal, mx_hsvtorgb, mx_ifequal, mx_ifgreater, mx_ifgreatereq, mx_invert, mx_modulo, mx_multiply, mx_noise_float, mx_noise_vec3, mx_noise_vec4, mx_place2d, mx_power, mx_ramp4, mx_ramplr, mx_ramptb, mx_rgbtohsv, mx_rotate2d, mx_rotate3d, mx_safepower, mx_separate, mx_splitlr, mx_splittb, mx_srgb_texture_to_lin_rec709, mx_subtract, mx_timer, mx_transform_uv, mx_unifiednoise2d, mx_unifiednoise3d, mx_worley_noise_float, mx_worley_noise_vec2, mx_worley_noise_vec3, negate, neutralToneMapping, nodeArray, nodeImmutable, nodeObject, nodeObjectIntent, nodeObjects, nodeProxy, nodeProxyIntent, normalFlat, normalGeometry, normalLocal, normalMap, normalView, normalViewGeometry, normalWorld, normalWorldGeometry, normalize, not, notEqual, numWorkgroups, objectDirection, objectGroup, objectPosition, objectRadius, objectScale, objectViewPosition, objectWorldMatrix, oneMinus, or, orthographicDepthToViewZ, oscSawtooth, oscSine, oscSquare, oscTriangle, output, outputStruct, overloadingFn, packHalf2x16, packSnorm2x16, packUnorm2x16, parabola, parallaxDirection, parallaxUV, parameter, pass, passTexture, pcurve, perspectiveDepthToViewZ, pmremTexture, pointShadow, pointUV, pointWidth, positionGeometry, positionLocal, positionPrevious, positionView, positionViewDirection, positionWorld, positionWorldDirection, posterize, pow, pow2, pow3, pow4, premultiplyAlpha, property, radians, rand, range, rangeFog, rangeFogFactor, reciprocal, reference, referenceBuffer, reflect, reflectVector, reflectView, reflector, refract, refractVector, refractView, reinhardToneMapping, remap, remapClamp, renderGroup, renderOutput, rendererReference, replaceDefaultUV, rotate, rotateUV, roughness, round, rtt, sRGBTransferEOTF, sRGBTransferOETF, sample, sampler, samplerComparison, saturate, saturation, screen, screenCoordinate, screenDPR, screenSize, screenUV, select, setCurrentStack, setName, shaderStages, shadow, shadowPositionWorld, shapeCircle, sharedUniformGroup, sheen, sheenRoughness, shiftLeft, shiftRight, shininess, sign, sin, sinc, skinning, smoothstep, smoothstepElement, specularColor, specularF90, spherizeUV, split, spritesheetUV, sqrt, stack, step, stepElement, storage, storageBarrier, storageTexture, string, struct, sub, subBuild, subgroupAdd, subgroupAll, subgroupAnd, subgroupAny, subgroupBallot, subgroupBroadcast, subgroupBroadcastFirst, subgroupElect, subgroupExclusiveAdd, subgroupExclusiveMul, subgroupInclusiveAdd, subgroupInclusiveMul, subgroupIndex, subgroupMax, subgroupMin, subgroupMul, subgroupOr, subgroupShuffle, subgroupShuffleDown, subgroupShuffleUp, subgroupShuffleXor, subgroupSize, subgroupXor, tan, tangentGeometry, tangentLocal, tangentView, tangentWorld, texture, texture3D, textureBarrier, textureBicubic, textureBicubicLevel, textureCubeUV, textureLevel, textureLoad, textureSize, textureStore, thickness, time, toneMapping, toneMappingExposure, toonOutlinePass, transformDirection, transformNormal, transformNormalToView, transformedClearcoatNormalView, transformedNormalView, transformedNormalWorld, transmission, transpose, triNoise3D, triplanarTexture, triplanarTextures, trunc, uint, uintBitsToFloat, uniform, uniformArray, uniformCubeTexture, uniformFlow, uniformGroup, uniformTexture, unpackHalf2x16, unpackSnorm2x16, unpackUnorm2x16, unpremultiplyAlpha, userData, uv, uvec2, uvec3, uvec4, varying, varyingProperty, vec2, vec3, vec4, vectorComponents, velocity, vertexColor, vertexIndex, vertexStage, vibrance, viewZToLogarithmicDepth, viewZToOrthographicDepth, viewZToPerspectiveDepth, viewZToReversedOrthographicDepth, viewZToReversedPerspectiveDepth, viewport, viewportCoordinate, viewportDepthTexture, viewportLinearDepth, viewportMipTexture, viewportOpaqueMipTexture, viewportResolution, viewportSafeUV, viewportSharedTexture, viewportSize, viewportTexture, viewportUV, vogelDiskSample, wgsl, wgslFn, workgroupArray, workgroupBarrier, workgroupId, workingToColorSpace, xor };\n","import { DepthTexture, FloatType, RenderTarget, Vector2, TempNode, QuadMesh, NodeMaterial, RendererUtils, NodeUpdateType } from 'three/webgpu';\nimport { Loop, int, exp, min, float, mul, uv, vec2, vec3, Fn, textureSize, orthographicDepthToViewZ, screenUV, nodeObject, uniform, vec4, passTexture, texture, perspectiveDepthToViewZ, positionView, reference } from 'three/tsl';\n\nconst _quadMesh = /*@__PURE__*/ new QuadMesh();\nconst _size = /*@__PURE__*/ new Vector2();\nconst _BLUR_DIRECTION_X = /*@__PURE__*/ new Vector2( 1.0, 0.0 );\nconst _BLUR_DIRECTION_Y = /*@__PURE__*/ new Vector2( 0.0, 1.0 );\n\nlet _rendererState;\n\n/**\n * Post processing node for rendering outlines around selected objects. The node\n * gives you great flexibility in composing the final outline look depending on\n * your requirements.\n * ```js\n * const renderPipeline = new THREE.RenderPipeline( renderer );\n *\n * const scenePass = pass( scene, camera );\n *\n * // outline parameter\n *\n * const edgeStrength = uniform( 3.0 );\n * const edgeGlow = uniform( 0.0 );\n * const edgeThickness = uniform( 1.0 );\n * const visibleEdgeColor = uniform( new THREE.Color( 0xffffff ) );\n * const hiddenEdgeColor = uniform( new THREE.Color( 0x4e3636 ) );\n *\n * outlinePass = outline( scene, camera, {\n * \tselectedObjects,\n * \tedgeGlow,\n * \tedgeThickness\n * } );\n *\n * // compose custom outline\n *\n * const { visibleEdge, hiddenEdge } = outlinePass;\n * const outlineColor = visibleEdge.mul( visibleEdgeColor ).add( hiddenEdge.mul( hiddenEdgeColor ) ).mul( edgeStrength );\n *\n * renderPipeline.outputNode = outlineColor.add( scenePass );\n * ```\n *\n * @augments TempNode\n * @three_import import { outline } from 'three/addons/tsl/display/OutlineNode.js';\n */\nclass OutlineNode extends TempNode {\n\n\tstatic get type() {\n\n\t\treturn 'OutlineNode';\n\n\t}\n\n\t/**\n\t * Constructs a new outline node.\n\t *\n\t * @param {Scene} scene - A reference to the scene.\n\t * @param {Camera} camera - The camera the scene is rendered with.\n\t * @param {Object} params - The configuration parameters.\n\t * @param {Array<Object3D>} [params.selectedObjects] - An array of selected objects.\n\t * @param {Node<float>} [params.edgeThickness=float(1)] - The thickness of the edges.\n\t * @param {Node<float>} [params.edgeGlow=float(0)] - Can be used for an animated glow/pulse effects.\n\t * @param {number} [params.downSampleRatio=2] - The downsample ratio.\n\t */\n\tconstructor( scene, camera, params = {} ) {\n\n\t\tsuper( 'vec4' );\n\n\t\tconst {\n\t\t\tselectedObjects = [],\n\t\t\tedgeThickness = float( 1 ),\n\t\t\tedgeGlow = float( 0 ),\n\t\t\tdownSampleRatio = 2\n\t\t} = params;\n\n\t\t/**\n\t\t * A reference to the scene.\n\t\t *\n\t\t * @type {Scene}\n\t\t */\n\t\tthis.scene = scene;\n\n\t\t/**\n\t\t * The camera the scene is rendered with.\n\t\t *\n\t\t * @type {Camera}\n\t\t */\n\t\tthis.camera = camera;\n\n\t\t/**\n\t\t * An array of selected objects.\n\t\t *\n\t\t * @type {Array<Object3D>}\n\t\t */\n\t\tthis.selectedObjects = selectedObjects;\n\n\t\t/**\n\t\t * The thickness of the edges.\n\t\t *\n\t\t * @type {Node<float>}\n\t\t */\n\t\tthis.edgeThicknessNode = nodeObject( edgeThickness );\n\n\t\t/**\n\t\t * Can be used for an animated glow/pulse effect.\n\t\t *\n\t\t * @type {Node<float>}\n\t\t */\n\t\tthis.edgeGlowNode = nodeObject( edgeGlow );\n\n\t\t/**\n\t\t * The downsample ratio.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 2\n\t\t */\n\t\tthis.downSampleRatio = downSampleRatio;\n\n\t\t/**\n\t\t * The `updateBeforeType` is set to `NodeUpdateType.FRAME` since the node renders\n\t\t * its effect once per frame in `updateBefore()`.\n\t\t *\n\t\t * @type {string}\n\t\t * @default 'frame'\n\t\t */\n\t\tthis.updateBeforeType = NodeUpdateType.FRAME;\n\n\t\t// render targets\n\n\t\t/**\n\t\t * The render target for the depth pre-pass.\n\t\t *\n\t\t * @private\n\t\t * @type {RenderTarget}\n\t\t */\n\t\tthis._renderTargetDepthBuffer = new RenderTarget();\n\t\tthis._renderTargetDepthBuffer.depthTexture = new DepthTexture();\n\t\tthis._renderTargetDepthBuffer.depthTexture.type = FloatType;\n\n\t\t/**\n\t\t * The render target for the mask pass.\n\t\t *\n\t\t * @private\n\t\t * @type {RenderTarget}\n\t\t */\n\t\tthis._renderTargetMaskBuffer = new RenderTarget();\n\n\t\t/**\n\t\t * The render target for the mask downsample.\n\t\t *\n\t\t * @private\n\t\t * @type {RenderTarget}\n\t\t */\n\t\tthis._renderTargetMaskDownSampleBuffer = new RenderTarget( 1, 1, { depthBuffer: false } );\n\n\t\t/**\n\t\t * The first render target for the edge detection.\n\t\t *\n\t\t * @private\n\t\t * @type {RenderTarget}\n\t\t */\n\t\tthis._renderTargetEdgeBuffer1 = new RenderTarget( 1, 1, { depthBuffer: false } );\n\n\t\t/**\n\t\t * The second render target for the edge detection.\n\t\t *\n\t\t * @private\n\t\t * @type {RenderTarget}\n\t\t */\n\t\tthis._renderTargetEdgeBuffer2 = new RenderTarget( 1, 1, { depthBuffer: false } );\n\n\t\t/**\n\t\t * The first render target for the blur pass.\n\t\t *\n\t\t * @private\n\t\t * @type {RenderTarget}\n\t\t */\n\t\tthis._renderTargetBlurBuffer1 = new RenderTarget( 1, 1, { depthBuffer: false } );\n\n\t\t/**\n\t\t * The second render target for the blur pass.\n\t\t *\n\t\t * @private\n\t\t * @type {RenderTarget}\n\t\t */\n\t\tthis._renderTargetBlurBuffer2 = new RenderTarget( 1, 1, { depthBuffer: false } );\n\n\t\t/**\n\t\t * The render target for the final composite.\n\t\t *\n\t\t * @private\n\t\t * @type {RenderTarget}\n\t\t */\n\t\tthis._renderTargetComposite = new RenderTarget( 1, 1, { depthBuffer: false } );\n\n\t\t// uniforms\n\n\t\t/**\n\t\t * Represents the near value of the scene's camera.\n\t\t *\n\t\t * @private\n\t\t * @type {ReferenceNode<float>}\n\t\t */\n\t\tthis._cameraNear = reference( 'near', 'float', camera );\n\n\t\t/**\n\t\t * Represents the far value of the scene's camera.\n\t\t *\n\t\t * @private\n\t\t * @type {ReferenceNode<float>}\n\t\t */\n\t\tthis._cameraFar = reference( 'far', 'float', camera );\n\n\t\t/**\n\t\t * Uniform that represents the blur direction of the pass.\n\t\t *\n\t\t * @private\n\t\t * @type {UniformNode<vec2>}\n\t\t */\n\t\tthis._blurDirection = uniform( new Vector2() );\n\n\t\t/**\n\t\t * Texture node that holds the data from the depth pre-pass.\n\t\t *\n\t\t * @private\n\t\t * @type {TextureNode}\n\t\t */\n\t\tthis._depthTextureUniform = texture( this._renderTargetDepthBuffer.depthTexture );\n\n\t\t/**\n\t\t * Texture node that holds the data from the mask pass.\n\t\t *\n\t\t * @private\n\t\t * @type {TextureNode}\n\t\t */\n\t\tthis._maskTextureUniform = texture( this._renderTargetMaskBuffer.texture );\n\n\t\t/**\n\t\t * Texture node that holds the data from the mask downsample pass.\n\t\t *\n\t\t * @private\n\t\t * @type {TextureNode}\n\t\t */\n\t\tthis._maskTextureDownsSampleUniform = texture( this._renderTargetMaskDownSampleBuffer.texture );\n\n\t\t/**\n\t\t * Texture node that holds the data from the first edge detection pass.\n\t\t *\n\t\t * @private\n\t\t * @type {TextureNode}\n\t\t */\n\t\tthis._edge1TextureUniform = texture( this._renderTargetEdgeBuffer1.texture );\n\n\t\t/**\n\t\t * Texture node that holds the data from the second edge detection pass.\n\t\t *\n\t\t * @private\n\t\t * @type {TextureNode}\n\t\t */\n\t\tthis._edge2TextureUniform = texture( this._renderTargetEdgeBuffer2.texture );\n\n\t\t/**\n\t\t * Texture node that holds the current blurred color data.\n\t\t *\n\t\t * @private\n\t\t * @type {TextureNode}\n\t\t */\n\t\tthis._blurColorTextureUniform = texture( this._renderTargetEdgeBuffer1.texture );\n\n\t\t// constants\n\n\t\t/**\n\t\t * Visible edge color.\n\t\t *\n\t\t * @private\n\t\t * @type {Node<vec3>}\n\t\t */\n\t\tthis._visibleEdgeColor = vec3( 1, 0, 0 );\n\n\t\t/**\n\t\t * Hidden edge color.\n\t\t *\n\t\t * @private\n\t\t * @type {Node<vec3>}\n\t\t */\n\t\tthis._hiddenEdgeColor = vec3( 0, 1, 0 );\n\n\t\t// materials\n\n\t\t/**\n\t\t * The material for the depth pre-pass.\n\t\t *\n\t\t * @private\n\t\t * @type {NodeMaterial}\n\t\t */\n\t\tthis._depthMaterial = new NodeMaterial();\n\t\tthis._depthMaterial.fragmentNode = vec4( 0, 0, 0, 1 );\n\t\tthis._depthMaterial.name = 'OutlineNode.depth';\n\n\t\t/**\n\t\t * The material for preparing the mask.\n\t\t *\n\t\t * @private\n\t\t * @type {NodeMaterial}\n\t\t */\n\t\tthis._prepareMaskMaterial = new NodeMaterial();\n\t\tthis._prepareMaskMaterial.name = 'OutlineNode.prepareMask';\n\n\t\t/**\n\t\t * The copy material\n\t\t *\n\t\t * @private\n\t\t * @type {NodeMaterial}\n\t\t */\n\t\tthis._materialCopy = new NodeMaterial();\n\t\tthis._materialCopy.name = 'OutlineNode.copy';\n\n\t\t/**\n\t\t * The edge detection material.\n\t\t *\n\t\t * @private\n\t\t * @type {NodeMaterial}\n\t\t */\n\t\tthis._edgeDetectionMaterial = new NodeMaterial();\n\t\tthis._edgeDetectionMaterial.name = 'OutlineNode.edgeDetection';\n\n\t\t/**\n\t\t * The material that is used to render in the blur pass.\n\t\t *\n\t\t * @private\n\t\t * @type {NodeMaterial}\n\t\t */\n\t\tthis._separableBlurMaterial = new NodeMaterial();\n\t\tthis._separableBlurMaterial.name = 'OutlineNode.separableBlur';\n\n\t\t/**\n\t\t * The material that is used to render in the blur pass.\n\t\t *\n\t\t * @private\n\t\t * @type {NodeMaterial}\n\t\t */\n\t\tthis._separableBlurMaterial2 = new NodeMaterial();\n\t\tthis._separableBlurMaterial2.name = 'OutlineNode.separableBlur2';\n\n\t\t/**\n\t\t * The final composite material.\n\t\t *\n\t\t * @private\n\t\t * @type {NodeMaterial}\n\t\t */\n\t\tthis._compositeMaterial = new NodeMaterial();\n\t\tthis._compositeMaterial.name = 'OutlineNode.composite';\n\n\t\t/**\n\t\t * A set to cache selected objects in the scene.\n\t\t *\n\t\t * @private\n\t\t * @type {Set<Object3D>}\n\t\t */\n\t\tthis._selectionCache = new Set();\n\n\t\t/**\n\t\t * The result of the effect is represented as a separate texture node.\n\t\t *\n\t\t * @private\n\t\t * @type {PassTextureNode}\n\t\t */\n\t\tthis._textureNode = passTexture( this, this._renderTargetComposite.texture );\n\n\t}\n\n\t/**\n\t * A mask value that represents the visible edge.\n\t *\n\t * @return {Node<float>} The visible edge.\n\t */\n\tget visibleEdge() {\n\n\t\treturn this.r;\n\n\t}\n\n\t/**\n\t * A mask value that represents the hidden edge.\n\t *\n\t * @return {Node<float>} The hidden edge.\n\t */\n\tget hiddenEdge() {\n\n\t\treturn this.g;\n\n\t}\n\n\t/**\n\t * Returns the result of the effect as a texture node.\n\t *\n\t * @return {PassTextureNode} A texture node that represents the result of the effect.\n\t */\n\tgetTextureNode() {\n\n\t\treturn this._textureNode;\n\n\t}\n\n\t/**\n\t * Sets the size of the effect.\n\t *\n\t * @param {number} width - The width of the effect.\n\t * @param {number} height - The height of the effect.\n\t */\n\tsetSize( width, height ) {\n\n\t\tthis._renderTargetDepthBuffer.setSize( width, height );\n\t\tthis._renderTargetMaskBuffer.setSize( width, height );\n\t\tthis._renderTargetComposite.setSize( width, height );\n\n\t\t// downsample 1\n\n\t\tlet resx = Math.round( width / this.downSampleRatio );\n\t\tlet resy = Math.round( height / this.downSampleRatio );\n\n\t\tthis._renderTargetMaskDownSampleBuffer.setSize( resx, resy );\n\t\tthis._renderTargetEdgeBuffer1.setSize( resx, resy );\n\t\tthis._renderTargetBlurBuffer1.setSize( resx, resy );\n\n\t\t// downsample 2\n\n\t\tresx = Math.round( resx / 2 );\n\t\tresy = Math.round( resy / 2 );\n\n\t\tthis._renderTargetEdgeBuffer2.setSize( resx, resy );\n\t\tthis._renderTargetBlurBuffer2.setSize( resx, resy );\n\n\t}\n\n\t/**\n\t * This method is used to render the effect once per frame.\n\t *\n\t * @param {NodeFrame} frame - The current node frame.\n\t */\n\tupdateBefore( frame ) {\n\n\t\tconst { renderer } = frame;\n\t\tconst { camera, scene } = this;\n\n\t\t_rendererState = RendererUtils.resetRendererAndSceneState( renderer, scene, _rendererState );\n\n\t\t//\n\n\t\tconst size = renderer.getDrawingBufferSize( _size );\n\t\tthis.setSize( size.width, size.height );\n\n\t\t//\n\n\t\trenderer.setClearColor( 0xffffff, 1 );\n\n\t\tthis._updateSelectionCache();\n\n\t\tconst currentSceneName = scene.name;\n\n\t\t// 1. Draw non-selected objects in the depth buffer\n\n\t\tscene.overrideMaterial = this._depthMaterial;\n\n\t\trenderer.setRenderTarget( this._renderTargetDepthBuffer );\n\t\trenderer.setRenderObjectFunction( ( object, ...params ) => {\n\n\t\t\tif ( this._selectionCache.has( object ) === false ) {\n\n\t\t\t\trenderer.renderObject( object, ...params );\n\n\t\t\t}\n\n\t\t} );\n\n\t\tscene.name = 'Outline [ Non-Selected Objects Pass ]';\n\t\trenderer.render( scene, camera );\n\n\t\t// 2. Draw only the selected objects by comparing the depth buffer of non-selected objects\n\n\t\tscene.overrideMaterial = this._prepareMaskMaterial;\n\n\t\trenderer.setRenderTarget( this._renderTargetMaskBuffer );\n\t\trenderer.setRenderObjectFunction( ( object, ...params ) => {\n\n\t\t\tif ( this._selectionCache.has( object ) === true ) {\n\n\t\t\t\trenderer.renderObject( object, ...params );\n\n\t\t\t}\n\n\t\t} );\n\n\t\tscene.name = 'Outline [ Selected Objects Pass ]';\n\t\trenderer.render( scene, camera );\n\n\t\t//\n\n\t\trenderer.setRenderObjectFunction( _rendererState.renderObjectFunction );\n\n\t\tthis._selectionCache.clear();\n\n\t\tscene.name = currentSceneName;\n\n\t\t// 3. Downsample to (at least) half resolution\n\n\t\t_quadMesh.material = this._materialCopy;\n\t\t_quadMesh.name = 'Outline [ Downsample ]';\n\t\trenderer.setRenderTarget( this._renderTargetMaskDownSampleBuffer );\n\t\t_quadMesh.render( renderer );\n\n\t\t// 4. Perform edge detection (half resolution)\n\n\t\t_quadMesh.material = this._edgeDetectionMaterial;\n\t\t_quadMesh.name = 'Outline [ Edge Detection ]';\n\t\trenderer.setRenderTarget( this._renderTargetEdgeBuffer1 );\n\t\t_quadMesh.render( renderer );\n\n\t\t// 5. Apply blur (half resolution)\n\n\t\tthis._blurColorTextureUniform.value = this._renderTargetEdgeBuffer1.texture;\n\t\tthis._blurDirection.value.copy( _BLUR_DIRECTION_X );\n\n\t\t_quadMesh.material = this._separableBlurMaterial;\n\t\t_quadMesh.name = 'Outline [ Blur Half Resolution ]';\n\t\trenderer.setRenderTarget( this._renderTargetBlurBuffer1 );\n\t\t_quadMesh.render( renderer );\n\n\t\tthis._blurColorTextureUniform.value = this._renderTargetBlurBuffer1.texture;\n\t\tthis._blurDirection.value.copy( _BLUR_DIRECTION_Y );\n\n\t\trenderer.setRenderTarget( this._renderTargetEdgeBuffer1 );\n\t\t_quadMesh.render( renderer );\n\n\t\t// 6. Apply blur (quarter resolution)\n\n\t\tthis._blurColorTextureUniform.value = this._renderTargetEdgeBuffer1.texture;\n\t\tthis._blurDirection.value.copy( _BLUR_DIRECTION_X );\n\n\t\t_quadMesh.material = this._separableBlurMaterial2;\n\t\t_quadMesh.name = 'Outline [ Blur Quarter Resolution ]';\n\t\trenderer.setRenderTarget( this._renderTargetBlurBuffer2 );\n\t\t_quadMesh.render( renderer );\n\n\t\tthis._blurColorTextureUniform.value = this._renderTargetBlurBuffer2.texture;\n\t\tthis._blurDirection.value.copy( _BLUR_DIRECTION_Y );\n\n\t\trenderer.setRenderTarget( this._renderTargetEdgeBuffer2 );\n\t\t_quadMesh.render( renderer );\n\n\t\t// 7. Composite\n\n\t\t_quadMesh.material = this._compositeMaterial;\n\t\t_quadMesh.name = 'Outline [ Blur Quarter Resolution ]';\n\t\trenderer.setRenderTarget( this._renderTargetComposite );\n\t\t_quadMesh.render( renderer );\n\n\t\t// restore\n\n\t\tRendererUtils.restoreRendererAndSceneState( renderer, scene, _rendererState );\n\n\t}\n\n\t/**\n\t * This method is used to setup the effect's TSL code.\n\t *\n\t * @param {NodeBuilder} builder - The current node builder.\n\t * @return {PassTextureNode}\n\t */\n\tsetup() {\n\n\t\t// prepare mask material\n\n\t\tconst prepareMask = () => {\n\n\t\t\tconst depth = this._depthTextureUniform.sample( screenUV );\n\n\t\t\tlet viewZNode;\n\n\t\t\tif ( this.camera.isPerspectiveCamera ) {\n\n\t\t\t\tviewZNode = perspectiveDepthToViewZ( depth, this._cameraNear, this._cameraFar );\n\n\t\t\t} else {\n\n\t\t\t\tviewZNode = orthographicDepthToViewZ( depth, this._cameraNear, this._cameraFar );\n\n\t\t\t}\n\n\t\t\tconst depthTest = positionView.z.lessThanEqual( viewZNode ).select( 1, 0 );\n\t\t\treturn vec4( 0.0, depthTest, 1.0, 1.0 );\n\n\t\t};\n\n\t\tthis._prepareMaskMaterial.fragmentNode = prepareMask();\n\t\tthis._prepareMaskMaterial.needsUpdate = true;\n\n\t\t// copy material\n\n\t\tthis._materialCopy.fragmentNode = this._maskTextureUniform;\n\t\tthis._materialCopy.needsUpdate = true;\n\n\t\t// edge detection material\n\n\t\tconst edgeDetection = Fn( () => {\n\n\t\t\tconst resolution = textureSize( this._maskTextureDownsSampleUniform );\n\t\t\tconst invSize = vec2( 1 ).div( resolution ).toVar();\n\t\t\tconst uvOffset = vec4( 1.0, 0.0, 0.0, 1.0 ).mul( vec4( invSize, invSize ) );\n\n\t\t\tconst uvNode = uv();\n\t\t\tconst c1 = this._maskTextureDownsSampleUniform.sample( uvNode.add( uvOffset.xy ) ).toVar();\n\t\t\tconst c2 = this._maskTextureDownsSampleUniform.sample( uvNode.sub( uvOffset.xy ) ).toVar();\n\t\t\tconst c3 = this._maskTextureDownsSampleUniform.sample( uvNode.add( uvOffset.yw ) ).toVar();\n\t\t\tconst c4 = this._maskTextureDownsSampleUniform.sample( uvNode.sub( uvOffset.yw ) ).toVar();\n\n\t\t\tconst diff1 = mul( c1.r.sub( c2.r ), 0.5 );\n\t\t\tconst diff2 = mul( c3.r.sub( c4.r ), 0.5 );\n\t\t\tconst d = vec2( diff1, diff2 ).length();\n\t\t\tconst a1 = min( c1.g, c2.g );\n\t\t\tconst a2 = min( c3.g, c4.g );\n\t\t\tconst visibilityFactor = min( a1, a2 );\n\t\t\tconst edgeColor = visibilityFactor.oneMinus().greaterThan( 0.001 ).select( this._visibleEdgeColor, this._hiddenEdgeColor );\n\t\t\treturn vec4( edgeColor, 1 ).mul( d );\n\n\t\t} );\n\n\t\tthis._edgeDetectionMaterial.fragmentNode = edgeDetection();\n\t\tthis._edgeDetectionMaterial.needsUpdate = true;\n\n\t\t// separable blur material\n\n\t\tconst MAX_RADIUS = 4;\n\n\t\tconst gaussianPdf = Fn( ( [ x, sigma ] ) => {\n\n\t\t\treturn float( 0.39894 ).mul( exp( float( - 0.5 ).mul( x ).mul( x ).div( sigma.mul( sigma ) ) ).div( sigma ) );\n\n\t\t} );\n\n\t\tconst separableBlur = Fn( ( [ kernelRadius ] ) => {\n\n\t\t\tconst resolution = textureSize( this._maskTextureDownsSampleUniform );\n\t\t\tconst invSize = vec2( 1 ).div( resolution ).toVar();\n\t\t\tconst uvNode = uv();\n\n\t\t\tconst sigma = kernelRadius.div( 2 ).toVar();\n\t\t\tconst weightSum = gaussianPdf( 0, sigma ).toVar();\n\t\t\tconst diffuseSum = this._blurColorTextureUniform.sample( uvNode ).mul( weightSum ).toVar();\n\t\t\tconst delta = this._blurDirection.mul( invSize ).mul( kernelRadius ).div( MAX_RADIUS ).toVar();\n\n\t\t\tconst uvOffset = delta.toVar();\n\n\t\t\tLoop( { start: int( 1 ), end: int( MAX_RADIUS ), type: 'int', condition: '<=' }, ( { i } ) => {\n\n\t\t\t\tconst x = kernelRadius.mul( float( i ) ).div( MAX_RADIUS );\n\t\t\t\tconst w = gaussianPdf( x, sigma );\n\t\t\t\tconst sample1 = this._blurColorTextureUniform.sample( uvNode.add( uvOffset ) );\n\t\t\t\tconst sample2 = this._blurColorTextureUniform.sample( uvNode.sub( uvOffset ) );\n\n\t\t\t\tdiffuseSum.addAssign( sample1.add( sample2 ).mul( w ) );\n\t\t\t\tweightSum.addAssign( w.mul( 2 ) );\n\t\t\t\tuvOffset.addAssign( delta );\n\n\t\t\t} );\n\n\t\t\treturn diffuseSum.div( weightSum );\n\n\t\t} );\n\n\t\tthis._separableBlurMaterial.fragmentNode = separableBlur( this.edgeThicknessNode );\n\t\tthis._separableBlurMaterial.needsUpdate = true;\n\n\t\tthis._separableBlurMaterial2.fragmentNode = separableBlur( MAX_RADIUS );\n\t\tthis._separableBlurMaterial2.needsUpdate = true;\n\n\t\t// composite material\n\n\t\tconst composite = Fn( () => {\n\n\t\t\tconst edgeValue1 = this._edge1TextureUniform;\n\t\t\tconst edgeValue2 = this._edge2TextureUniform;\n\t\t\tconst maskColor = this._maskTextureUniform;\n\n\t\t\tconst edgeValue = edgeValue1.add( edgeValue2.mul( this.edgeGlowNode ) );\n\n\t\t\treturn maskColor.r.mul( edgeValue );\n\n\t\t} );\n\n\t\tthis._compositeMaterial.fragmentNode = composite();\n\t\tthis._compositeMaterial.needsUpdate = true;\n\n\t\treturn this._textureNode;\n\n\t}\n\n\t/**\n\t * Frees internal resources. This method should be called\n\t * when the effect is no longer required.\n\t */\n\tdispose() {\n\n\t\tthis.selectedObjects.length = 0;\n\n\t\tthis._renderTargetDepthBuffer.dispose();\n\t\tthis._renderTargetMaskBuffer.dispose();\n\t\tthis._renderTargetMaskDownSampleBuffer.dispose();\n\t\tthis._renderTargetEdgeBuffer1.dispose();\n\t\tthis._renderTargetEdgeBuffer2.dispose();\n\t\tthis._renderTargetBlurBuffer1.dispose();\n\t\tthis._renderTargetBlurBuffer2.dispose();\n\t\tthis._renderTargetComposite.dispose();\n\n\t\tthis._depthMaterial.dispose();\n\t\tthis._prepareMaskMaterial.dispose();\n\t\tthis._materialCopy.dispose();\n\t\tthis._edgeDetectionMaterial.dispose();\n\t\tthis._separableBlurMaterial.dispose();\n\t\tthis._separableBlurMaterial2.dispose();\n\t\tthis._compositeMaterial.dispose();\n\n\t}\n\n\t/**\n\t * Updates the selection cache based on the selected objects.\n\t *\n\t * @private\n\t */\n\t_updateSelectionCache() {\n\n\t\tfor ( let i = 0; i < this.selectedObjects.length; i ++ ) {\n\n\t\t\tconst selectedObject = this.selectedObjects[ i ];\n\t\t\tselectedObject.traverse( ( object ) => {\n\n\t\t\t\tif ( object.isMesh ) this._selectionCache.add( object );\n\n\t\t\t} );\n\n\t\t}\n\n\t}\n\n}\n\nexport default OutlineNode;\n\n/**\n * TSL function for creating an outline effect around selected objects.\n *\n * @tsl\n * @function\n * @param {Scene} scene - A reference to the scene.\n * @param {Camera} camera - The camera the scene is rendered with.\n * @param {Object} params - The configuration parameters.\n * @param {Array<Object3D>} [params.selectedObjects] - An array of selected objects.\n * @param {Node<float>} [params.edgeThickness=float(1)] - The thickness of the edges.\n * @param {Node<float>} [params.edgeGlow=float(0)] - Can be used for animated glow/pulse effects.\n * @param {number} [params.downSampleRatio=2] - The downsample ratio.\n * @returns {OutlineNode}\n */\nexport const outline = ( scene, camera, params ) => new OutlineNode( scene, camera, params );\n","import type { Node } from 'three/webgpu';\nimport type { Camera, Scene } from 'three';\n\nexport abstract class RoomleWebGPURenderPass {\n abstract readonly passId: string;\n\n /**\n * Combines this effect with the passed basePassNode\n */\n abstract assemble(\n basePassNode: Node<'vec4'>,\n scene: Scene,\n camera: Camera,\n ): Node<'vec4'>;\n}\n","import type { Camera, ColorRepresentation, Object3D, Scene } from 'three';\nimport type { Node, UniformNode } from 'three/webgpu';\nimport { Color } from 'three';\nimport { uniform } from 'three/tsl';\nimport { outline } from 'three/addons/tsl/display/OutlineNode.js';\nimport { RoomleWebGPURenderPass } from './roomle-webgpu-render-pass';\n\nexport interface OutlinePassParameters {\n selectedObjects: Object3D[];\n visibleEdgeColor: ColorRepresentation;\n hiddenEdgeColor: ColorRepresentation;\n edgeStrength: number;\n edgeGlow: number;\n edgeThickness: number;\n}\n\nexport class OutlineRenderPass extends RoomleWebGPURenderPass {\n static readonly passId = 'OutlineRenderPass';\n override readonly passId = OutlineRenderPass.passId;\n private readonly selectedObjects: Object3D[];\n private readonly edgeStrength: UniformNode<'float', number>;\n private readonly edgeGlow: UniformNode<'float', number>;\n private readonly edgeThickness: UniformNode<'float', number>;\n private readonly visibleEdgeColor: UniformNode<'color', Color>;\n private readonly hiddenEdgeColor: UniformNode<'color', Color>;\n\n constructor(params: OutlinePassParameters) {\n super();\n this.selectedObjects = params.selectedObjects;\n this.edgeStrength = uniform(params.edgeStrength);\n this.edgeGlow = uniform(params.edgeGlow);\n this.edgeThickness = uniform(params.edgeThickness);\n this.visibleEdgeColor = uniform(new Color(params.visibleEdgeColor));\n this.hiddenEdgeColor = uniform(new Color(params.hiddenEdgeColor));\n }\n\n public highlightObjects(selectedMeshes: Object3D[]): void {\n this.selectedObjects.splice(\n 0,\n this.selectedObjects.length,\n ...selectedMeshes,\n );\n }\n\n public areObjectsSelected(): boolean {\n return this.selectedObjects.length !== 0;\n }\n\n override assemble(\n basePassNode: Node<'vec4'>,\n scene: Scene,\n camera: Camera,\n ): Node<'vec4'> {\n // dont render outline pass if no objects are selected\n // this should be fixed by threejs themselves at some point, see https://github.com/mrdoob/three.js/issues/33355\n if (!this.areObjectsSelected()) {\n return basePassNode;\n }\n\n const outlinePass = outline(scene, camera, {\n selectedObjects: this.selectedObjects,\n edgeThickness: this.edgeThickness,\n edgeGlow: this.edgeGlow,\n });\n\n const { visibleEdge, hiddenEdge } = outlinePass;\n\n const finalOutline = visibleEdge\n .mul(this.visibleEdgeColor)\n .add(hiddenEdge.mul(this.hiddenEdgeColor))\n .mul(this.edgeStrength);\n\n return basePassNode.add(finalOutline);\n }\n}\n","import type { Node } from 'three/webgpu';\nimport { type WebGPURenderer, RenderPipeline } from 'three/webgpu';\nimport { RoomleRenderer } from '../roomle-renderer';\nimport type {\n LutImageDefinition,\n QualityLevel,\n QualityMap,\n} from '../webgl/renderer/scene-renderer';\nimport { QUALITY_LEVELS } from '../webgl/renderer/scene-renderer';\nimport type { Camera, ColorRepresentation, Object3D, Scene } from 'three';\nimport type {\n CustomShadingParameters,\n SceneShadingType,\n} from '../webgl/renderer/shading-settings';\nimport { pass } from 'three/tsl';\nimport type { RoomleWebGPURenderPass } from './passes/roomle-webgpu-render-pass';\nimport { OutlineRenderPass } from './passes/outline-render-pass';\n\nexport class RoomleWebGPURenderer extends RoomleRenderer<WebGPURenderer> {\n private readonly renderPipeline: RenderPipeline;\n private passNeedsReassembly = true;\n private readonly renderPasses = new Map<string, RoomleWebGPURenderPass>();\n\n constructor(\n creator: string,\n renderer: WebGPURenderer,\n outlineColors?: {\n outlineVisibleEdgeColor: ColorRepresentation;\n outlineHiddenEdgeColor: ColorRepresentation;\n },\n ) {\n super(creator, renderer);\n\n this.renderPipeline = new RenderPipeline(renderer);\n if (outlineColors) {\n this.enableOutline(\n outlineColors.outlineVisibleEdgeColor,\n outlineColors.outlineHiddenEdgeColor,\n );\n }\n }\n\n private addRenderPass(renderPass: RoomleWebGPURenderPass): void {\n this.renderPasses.set(renderPass.passId, renderPass);\n this.passNeedsReassembly = true;\n }\n\n public override clearCache(): void {\n console.error('RoomleWebGPURenderer.clearCache is not implemented yet');\n }\n\n public override disableUiInteractionMode(): void {\n console.error(\n 'RoomleWebGPURenderer.disableUiInteractionMode is not implemented yet',\n );\n }\n\n public override enableUiInteractionMode(): void {\n console.error(\n 'RoomleWebGPURenderer.enableUiInteractionMode is not implemented yet',\n );\n }\n\n public override getQualityLevel(): QualityLevel {\n console.error(\n 'RoomleWebGPURenderer.getQualityLevel is not implemented yet',\n );\n return QUALITY_LEVELS.HIGHEST;\n }\n\n public override highlightObjects(selectedMeshes: Object3D[]): void {\n const outlinePass = this.getOutlinePassOrUndefined();\n if (outlinePass) {\n this.passNeedsReassembly =\n this.passNeedsReassembly ||\n (outlinePass.areObjectsSelected() && selectedMeshes.length === 0) ||\n (!outlinePass.areObjectsSelected() && selectedMeshes.length > 0);\n }\n outlinePass?.highlightObjects(selectedMeshes);\n }\n\n public override loadLutImages(_luts: LutImageDefinition[]): void {\n console.error('RoomleWebGPURenderer.loadLutImages is not implemented yet');\n }\n\n public override render(scene: Scene, camera: Camera): void {\n if (this.passNeedsReassembly) {\n this.renderPipeline.outputNode = this.assembleRenderPasses(scene, camera);\n this.renderPipeline.needsUpdate = true;\n this.passNeedsReassembly = false;\n }\n this.renderPipeline.render(scene, camera);\n }\n\n private assembleRenderPasses(scene: Scene, camera: Camera): Node<'vec4'> {\n let result: Node<'vec4'> = pass(scene, camera); // always include the scene pass\n\n for (const renderPass of this.renderPasses.values()) {\n result = renderPass.assemble(result, scene, camera);\n }\n\n return result;\n }\n\n public override setAutoQuality(_autoQuality: boolean): void {\n console.error('RoomleWebGPURenderer.setAutoQuality is not implemented yet');\n }\n\n public override setCustomShadingParameters(\n _customShadingParameters: CustomShadingParameters | undefined,\n _customShadingParametersMoc: CustomShadingParameters | undefined,\n ): void {\n console.error(\n 'RoomleWebGPURenderer.setCustomShadingParameters is not implemented yet',\n );\n }\n\n public override setGroundShadow(_enabled: boolean): void {\n console.error(\n 'RoomleWebGPURenderer.setGroundShadow is not implemented yet',\n );\n }\n\n public override setOnQualityLevelChangeCallback(\n _callback: (qualityLevel: QualityLevel) => void,\n ): void {\n console.error(\n 'RoomleWebGPURenderer.setOnQualityLevelChangeCallback is not implemented yet',\n );\n }\n\n private enableOutline(\n visibleEdgeColor: ColorRepresentation,\n hiddenEdgeColor: ColorRepresentation,\n ): void {\n if (this.renderPasses.get(OutlineRenderPass.passId)) {\n return;\n }\n\n this.addRenderPass(\n new OutlineRenderPass({\n selectedObjects: [],\n visibleEdgeColor: visibleEdgeColor,\n hiddenEdgeColor: hiddenEdgeColor,\n edgeStrength: 3.0,\n edgeGlow: 0.0,\n edgeThickness: 1.0,\n }),\n );\n }\n\n private getOutlinePassOrUndefined(): OutlineRenderPass | undefined {\n const pass = this.renderPasses.get(OutlineRenderPass.passId);\n if (pass && pass instanceof OutlineRenderPass) {\n return pass;\n }\n return undefined;\n }\n\n public setQualityLevel(_qualityLevel: QualityLevel): void {\n console.error(\n 'RoomleWebGPURenderer.setQualityLevel is not implemented yet',\n );\n }\n\n public override setQualityMap(_qualityMap: QualityMap): void {\n console.error('RoomleWebGPURenderer.setQualityMap is not implemented yet');\n }\n\n public override setShadingType(_shadingType: SceneShadingType): void {\n console.error('RoomleWebGPURenderer.setShadingType is not implemented yet');\n }\n\n public override showGUI(_updateCallback: () => void): void {\n console.error('RoomleWebGPURenderer.showGUI is not implemented yet');\n }\n}\n"],"x_google_ignoreList":[0,1],"mappings":";;;;AAOiB,EAAI,UACA,EAAI,cACM,EAAI,wBACT,EAAI,mBAChB,EAAI,OACJ,EAAI,OACD,EAAI,UACN,EAAI,QACL,EAAI,OACF,EAAI,SACJ,EAAI,SACF,EAAI;AACtB,IAAM,IAAK,EAAI;AACE,EAAI,UACV,EAAI;AACf,IAAM,IAAO,EAAI;AACE,EAAI,YACC,EAAI,iBACX,EAAI,UACE,EAAI,gBACH,EAAI,iBACA,EAAI,qBACrB,EAAI,IACH,EAAI,KACD,EAAI,QACH,EAAI,SACM,EAAI,mBACf,EAAI,QACG,EAAI,eACP,EAAI,YACT,EAAI,OACH,EAAI,QACG,EAAI,eACF,EAAI,iBACE,EAAI,uBACtB,EAAI,KACE,EAAI,WACV,EAAI,KACc,EAAI,uBACrB,EAAI,MACL,EAAI,KACU,EAAI,mBACP,EAAI,gBACJ,EAAI,gBACf,EAAI,KACD,EAAI,QACP,EAAI,KACG,EAAI,YACH,EAAI,aACJ,EAAI,aACZ,EAAI,KACD,EAAI,QACL,EAAI,OACE,EAAI,aACX,EAAI,MACF,EAAI,QACN,EAAI,MACC,EAAI,WACJ,EAAI,WACH,EAAI,YACJ,EAAI,YACL,EAAI,WACJ,EAAI,WACL,EAAI,UACD,EAAI,aACN,EAAI,WACJ,EAAI,WACG,EAAI,kBACD,EAAI,qBACd,EAAI,WACC,EAAI,gBACE,EAAI,sBACL,EAAI,qBACL,EAAI,oBACjB,EAAI,OACK,EAAI,gBACN,EAAI,cACV,EAAI,QACJ,EAAI,QACL,EAAI,OACH,EAAI,QACO,EAAI,mBACP,EAAI,gBACL,EAAI,eACH,EAAI,gBACX,EAAI,SACF,EAAI,WACH,EAAI,YACJ,EAAI,YACF,EAAI,cACL,EAAI,aACX,EAAI,MACJ,EAAI,MACF,EAAI,QACK,EAAI,iBACZ,EAAI,SACJ,EAAI,SACK,EAAI,kBACA,EAAI,sBACnB,EAAI,OACJ,EAAI,OACJ,EAAI,OACH,EAAI,QACL,EAAI,OACL,EAAI,MACC,EAAI,WACF,EAAI,aACL,EAAI,YACI,EAAI,oBACR,EAAI,gBACI,EAAI,wBACG,EAAI,+BACjB,EAAI,kBACN,EAAI,gBACD,EAAI,mBACjB,EAAI,MACL,EAAI,KACH,EAAI,MACD,EAAI,SACM,EAAI,mBAChB,EAAI,OACA,EAAI,WACM,EAAI,qBACL,EAAI,oBACb,EAAI,WACT,EAAI,MACH,EAAI,OACU,EAAI,qBACP,EAAI,kBACb,EAAI,SACE,EAAI,eACF,EAAI,iBACZ,EAAI,SACJ,EAAI,SACM,EAAI,mBACL,EAAI,kBACH,EAAI,mBACT,EAAI,cACE,EAAI,oBACnB,EAAI,KACF,EAAI,OACE,EAAI,aACA,EAAI,iBACf,EAAI,MACJ,EAAI,MACA,EAAI,UACP,EAAI,OACA,EAAI,WACE,EAAI,iBACD,EAAI,oBACH,EAAI,qBAChB,EAAI,SACJ,EAAI,SACF,EAAI,WACH,EAAI,YACE,EAAI,kBACf,EAAI,OACA,EAAI,WACF,EAAI,aACL,EAAI,YACF,EAAI,cACA,EAAI,kBACJ,EAAI,kBACI,EAAI,0BAClB,EAAI,YACN,EAAI,UACT,EAAI,KACJ,EAAI,KACE,EAAI,WACS,EAAI,wBACnB,EAAI,SACH,EAAI,UACP,EAAI,OACC,EAAI;AACvB,IAAM,IAAM,EAAI;AACH,EAAI,MACkB,EAAI,4BACpB,EAAI,YACD,EAAI,eACN,EAAI,aACJ,EAAI;AACxB,IAAM,IAAQ,EAAI;AACK,EAAI,gBACH,EAAI,iBACd,EAAI,OACN,EAAI,KACF,EAAI,OACC,EAAI,YACP,EAAI,SACA,EAAI,aACT,EAAI,QACN,EAAI,MACD,EAAI,SACK,EAAI,kBACL,EAAI,iBACP,EAAI,cACM,EAAI,wBACN,EAAI,sBACN,EAAI,oBACE,EAAI,0BACb,EAAI,iBACK,EAAI,0BAChB,EAAI,cACC,EAAI,mBACJ,EAAI,mBACJ,EAAI,mBACQ,EAAI,+BAClB,EAAI,iBACJ,EAAI,iBACX,EAAI,UACR,EAAI,MACF,EAAI,QACD,EAAI,WACF,EAAI,aACC,EAAI,kBAChB,EAAI,MACkB,EAAI,4BACV,EAAI,sBACrB,EAAI,KACE,EAAI,WACE,EAAI,iBACX,EAAI,UACC,EAAI,eACH,EAAI,gBACM,EAAI,0BACG,EAAI,iCACtB,EAAI;AAC1B,IAAM,IAAM,EAAI;AACO,EAAI,gBACX,EAAI,SACA,EAAI,aACJ,EAAI,aACK,EAAI,sBACD,EAAI,yBACxB,EAAI,KACI,EAAI,aACD,EAAI,gBACE,EAAI,sBACnB,EAAI,OACJ,EAAI,OACJ,EAAI,OACP,EAAI,IACD,EAAI,OACH,EAAI,QACF,EAAI,UACJ,EAAI,UACC,EAAI,eACJ,EAAI,eACA,EAAI,mBACJ,EAAI,mBACD,EAAI,sBACL,EAAI,qBACN,EAAI,mBACN,EAAI,iBACb,EAAI,QACC,EAAI,aACE,EAAI,mBACd,EAAI,SACR,EAAI,KACH,EAAI,MACe,EAAI,yBAClB,EAAI,WACT,EAAI,MACJ,EAAI,MACJ,EAAI,MACA,EAAI,UACF,EAAI,YACG,EAAI,mBACH,EAAI,oBACE,EAAI,0BACJ,EAAI,0BACD,EAAI,6BACd,EAAI,mBACE,EAAI,yBACD,EAAI,4BACjB,EAAI,eACC,EAAI,oBACN,EAAI,kBACA,EAAI,sBACL,EAAI,qBACZ,EAAI,aACI,EAAI,qBACD,EAAI,wBACE,EAAI,8BAChB,EAAI,kBACE,EAAI,wBACN,EAAI,sBACL,EAAI,qBACN,EAAI,mBACJ,EAAI,mBACJ,EAAI,mBACP,EAAI,gBACH,EAAI,iBACF,EAAI,mBACJ,EAAI,mBACD,EAAI,sBACD,EAAI,yBACX,EAAI,kBACH,EAAI,mBACR,EAAI,eACK,EAAI,wBACT,EAAI,mBACL,EAAI,kBACC,EAAI,uBACA,EAAI,2BACL,EAAI,0BACX,EAAI,mBACD,EAAI,sBACrB,EAAI,KACI,EAAI,aACO,EAAI,wBACjB,EAAI;AACtB,IAAM,IAAM,EAAI;AACJ,EAAI,KACG,EAAI,YACX,EAAI,KACD,EAAI,QACI,EAAI,gBACD,EAAI,mBACR,EAAI,eACN,EAAI,aACL,EAAI,YACC,EAAI,iBACF,EAAI,mBACF,EAAI,qBACP,EAAI,kBACG,EAAI,yBACb,EAAI,gBACf,EAAI;AAChB,IAAM,IAAM,EAAI;AACE,EAAI,WACP,EAAI,QACF,EAAI,UACO,EAAI,qBACZ,EAAI,aACN,EAAI,WACS,EAAI,wBACL,EAAI,uBACJ,EAAI,uBACJ,EAAI,uBACjB,EAAI,UACK,EAAI,mBACV,EAAI,aACL,EAAI,YACF,EAAI,cACF,EAAI,gBACT,EAAI,WACJ,EAAI,WACF,EAAI,aACD,EAAI,gBACL,EAAI,eACJ,EAAI,eACP,EAAI,YACN,EAAI,UACJ,EAAI,UACH,EAAI,WACJ,EAAI,WACF,EAAI,aACJ,EAAI,aACJ,EAAI,aACH,EAAI,cACL,EAAI,aACL,EAAI,YACJ,EAAI,YACe,EAAI,+BACtB,EAAI,aACP,EAAI,UACG,EAAI,iBACF,EAAI,mBACJ,EAAI,mBACA,EAAI,uBACL,EAAI,sBACJ,EAAI,sBAClB,EAAI,QACQ,EAAI,oBACb,EAAI,WACA,EAAI;AAC1B,IAAM,IAAa,EAAI;AACE,EAAI,kBACT,EAAI,aACN,EAAI,WACE,EAAI,iBACT,EAAI,YACA,EAAI,gBACP,EAAI,aACN,EAAI,WACH,EAAI,YACI,EAAI,oBACX,EAAI,aACI,EAAI,qBACd,EAAI,WACV,EAAI,KACC,EAAI,UACC,EAAI,eACF,EAAI,iBACR,EAAI,aACD,EAAI,gBACN,EAAI,cACL,EAAI,aACG,EAAI,oBACL,EAAI,mBACD,EAAI,sBACF,EAAI,wBACZ,EAAI,gBACF,EAAI,kBACZ,EAAI,UACV,EAAI;AACf,IAAM,IAA2B,EAAI;AACjB,EAAI,aACR,EAAI,SACF,EAAI,WACF,EAAI,aACT,EAAI,QACE,EAAI,cACH,EAAI,eACL,EAAI,cACH,EAAI,eACJ,EAAI,eACT,EAAI,UACK,EAAI,mBACX,EAAI,YACL,EAAI;AACtB,IAAM,IAAO,EAAI,MACX,IAAc,EAAI;AACT,EAAI;AACnB,IAAM,IAA0B,EAAI;AACf,EAAI,cACL,EAAI,aACR,EAAI,SACD,EAAI,YACE,EAAI,kBACP,EAAI,eACD,EAAI;AAC7B,IAAM,IAAe,EAAI;AACK,EAAI,uBACZ,EAAI,eACK,EAAI,wBACjB,EAAI,WACV,EAAI,KACH,EAAI,MACJ,EAAI,MACJ,EAAI,MACQ,EAAI,kBACZ,EAAI,UACL,EAAI,SACP,EAAI,MACH,EAAI,OACD,EAAI,UACE,EAAI,gBACR,EAAI;AACvB,IAAM,IAAY,EAAI;AACE,EAAI,iBACZ,EAAI,SACE,EAAI,eACN,EAAI,aACN,EAAI,WACN,EAAI,SACE,EAAI,eACN,EAAI,aACI,EAAI,qBAClB,EAAI,OACC,EAAI,YACH,EAAI,aACH,EAAI,cACC,EAAI,mBACL,EAAI,kBACd,EAAI,QACF,EAAI,UACH,EAAI,WACR,EAAI,OACN,EAAI,KACS,EAAI,kBACJ,EAAI,kBACd,EAAI,QACH,EAAI,SACM,EAAI,mBACb,EAAI,UACF,EAAI,YACR,EAAI,QACM,EAAI,kBACX,EAAI,WACH,EAAI;AACvB,IAAM,IAAW,EAAI;AACN,EAAI,QACK,EAAI,iBACZ,EAAI,SACC,EAAI,cACV,EAAI,QACS,EAAI,qBACZ,EAAI,aACG,EAAI,oBACjB,EAAI,OACK,EAAI,gBACT,EAAI,WACH,EAAI,YACL,EAAI,WACT,EAAI,MACL,EAAI,KACH,EAAI,MACA,EAAI,UACF,EAAI,YACG,EAAI,mBACR,EAAI,eACN,EAAI,aACL,EAAI,YACT,EAAI,OACI,EAAI,eACb,EAAI,MACH,EAAI,OACL,EAAI,MACG,EAAI,aACR,EAAI,SACG,EAAI,gBACJ,EAAI,gBACZ,EAAI,QACJ,EAAI,QACP,EAAI,KACI,EAAI,aACJ,EAAI,aACJ,EAAI,aACJ,EAAI,aACD,EAAI,gBACD,EAAI,mBACC,EAAI,wBAClB,EAAI,UACC,EAAI,eACG,EAAI,sBACJ,EAAI,sBACJ,EAAI,sBACJ,EAAI,sBACX,EAAI,eACN,EAAI,aACJ,EAAI,aACJ,EAAI,aACL,EAAI,YACC,EAAI,iBACA,EAAI,qBACN,EAAI,mBACH,EAAI,oBACV,EAAI,cACL,EAAI,aACZ,EAAI,KACQ,EAAI,iBACP,EAAI,cACL,EAAI,aACH,EAAI;AACzB,IAAM,IAAU,EAAI;AACF,EAAI,WACC,EAAI,gBACJ,EAAI,gBACC,EAAI,qBACV,EAAI,eACN,EAAI;AACxB,IAAM,IAAc,EAAI;AACH,EAAI,cACJ,EAAI,cACP,EAAI,WACT,EAAI,MACG,EAAI,aACI,EAAI,qBACR,EAAI,iBACD,EAAI,oBACP,EAAI,iBACE,EAAI,uBACK,EAAI,gCACb,EAAI,uBACH,EAAI,wBACd,EAAI,cACP,EAAI,WACH,EAAI,YACE,EAAI,kBACH,EAAI,mBAChB,EAAI,OACL,EAAI,MACO,EAAI;AAC5B,IAAM,IAAU,EAAI;AACC,EAAI,cACE,EAAI,oBACV,EAAI,cACL,EAAI,aACD,EAAI,gBACJ,EAAI,gBACH,EAAI,iBACJ,EAAI,iBACD,EAAI,oBACd,EAAI;AACrB,IAAM,IAAK,EAAI;AACD,EAAI,OACJ,EAAI,OACJ,EAAI,OACF,EAAI,SACI,EAAI;AAC5B,IAAM,IAAO,EAAI,MACX,IAAO,EAAI,MACX,IAAO,EAAI;AACQ,EAAI,kBACZ,EAAI,UACD,EAAI,aACJ,EAAI,aACJ,EAAI,aACP,EAAI,UACW,EAAI,yBACH,EAAI,0BACL,EAAI,yBACK,EAAI,kCACL,EAAI,iCAC3B,EAAI,UACM,EAAI,oBACF,EAAI,sBACL,EAAI,qBACL,EAAI,oBACE,EAAI,0BACV,EAAI,oBACR,EAAI,gBACG,EAAI,uBACb,EAAI,cACD,EAAI,iBACT,EAAI,YACV,EAAI,MACF,EAAI,QACI,EAAI,gBACF,EAAI,kBACT,EAAI,aACI,EAAI,qBACpB,EAAI;;;ACpnBhB,IAAM,oBAA0B,IAAI,GAAU,EACxC,oBAAsB,IAAI,GAAS,EACnC,oBAAkC,IAAI,EAAS,GAAK,EAAK,EACzD,oBAAkC,IAAI,EAAS,GAAK,EAAK,EAE3D,GAoCE,IAAN,cAA0B,EAAS;CAElC,WAAW,OAAO;AAEjB,SAAO;;CAeR,YAAa,GAAO,GAAQ,IAAS,EAAE,EAAG;AAEzC,QAAO,OAAQ;EAEf,IAAM,EACL,qBAAkB,EAAE,EACpB,mBAAgB,EAAO,EAAG,EAC1B,cAAW,EAAO,EAAG,EACrB,qBAAkB,MACf;AAsSJ,EA/RA,KAAK,QAAQ,GAOb,KAAK,SAAS,GAOd,KAAK,kBAAkB,GAOvB,KAAK,oBAAoB,EAAY,EAAe,EAOpD,KAAK,eAAe,EAAY,EAAU,EAQ1C,KAAK,kBAAkB,GASvB,KAAK,mBAAmBA,EAAe,OAUvC,KAAK,2BAA2B,IAAI,GAAc,EAClD,KAAK,yBAAyB,eAAe,IAAI,GAAc,EAC/D,KAAK,yBAAyB,aAAa,OAAO,GAQlD,KAAK,0BAA0B,IAAI,GAAc,EAQjD,KAAK,oCAAoC,IAAI,EAAc,GAAG,GAAG,EAAE,aAAa,IAAO,CAAE,EAQzF,KAAK,2BAA2B,IAAI,EAAc,GAAG,GAAG,EAAE,aAAa,IAAO,CAAE,EAQhF,KAAK,2BAA2B,IAAI,EAAc,GAAG,GAAG,EAAE,aAAa,IAAO,CAAE,EAQhF,KAAK,2BAA2B,IAAI,EAAc,GAAG,GAAG,EAAE,aAAa,IAAO,CAAE,EAQhF,KAAK,2BAA2B,IAAI,EAAc,GAAG,GAAG,EAAE,aAAa,IAAO,CAAE,EAQhF,KAAK,yBAAyB,IAAI,EAAc,GAAG,GAAG,EAAE,aAAa,IAAO,CAAE,EAU9E,KAAK,cAAc,EAAW,QAAQ,SAAS,EAAQ,EAQvD,KAAK,aAAa,EAAW,OAAO,SAAS,EAAQ,EAQrD,KAAK,iBAAiB,EAAS,IAAI,GAAS,CAAE,EAQ9C,KAAK,uBAAuB,EAAS,KAAK,yBAAyB,aAAc,EAQjF,KAAK,sBAAsB,EAAS,KAAK,wBAAwB,QAAS,EAQ1E,KAAK,iCAAiC,EAAS,KAAK,kCAAkC,QAAS,EAQ/F,KAAK,uBAAuB,EAAS,KAAK,yBAAyB,QAAS,EAQ5E,KAAK,uBAAuB,EAAS,KAAK,yBAAyB,QAAS,EAQ5E,KAAK,2BAA2B,EAAS,KAAK,yBAAyB,QAAS,EAUhF,KAAK,oBAAoB,EAAM,GAAG,GAAG,EAAG,EAQxC,KAAK,mBAAmB,EAAM,GAAG,GAAG,EAAG,EAUvC,KAAK,iBAAiB,IAAI,GAAc,EACxC,KAAK,eAAe,eAAe,EAAM,GAAG,GAAG,GAAG,EAAG,EACrD,KAAK,eAAe,OAAO,qBAQ3B,KAAK,uBAAuB,IAAI,GAAc,EAC9C,KAAK,qBAAqB,OAAO,2BAQjC,KAAK,gBAAgB,IAAI,GAAc,EACvC,KAAK,cAAc,OAAO,oBAQ1B,KAAK,yBAAyB,IAAI,GAAc,EAChD,KAAK,uBAAuB,OAAO,6BAQnC,KAAK,yBAAyB,IAAI,GAAc,EAChD,KAAK,uBAAuB,OAAO,6BAQnC,KAAK,0BAA0B,IAAI,GAAc,EACjD,KAAK,wBAAwB,OAAO,8BAQpC,KAAK,qBAAqB,IAAI,GAAc,EAC5C,KAAK,mBAAmB,OAAO,yBAQ/B,KAAK,kCAAkB,IAAI,KAAK,EAQhC,KAAK,eAAe,EAAa,MAAM,KAAK,uBAAuB,QAAS;;CAS7E,IAAI,cAAc;AAEjB,SAAO,KAAK;;CASb,IAAI,aAAa;AAEhB,SAAO,KAAK;;CASb,iBAAiB;AAEhB,SAAO,KAAK;;CAUb,QAAS,GAAO,GAAS;AAIxB,EAFA,KAAK,yBAAyB,QAAS,GAAO,EAAQ,EACtD,KAAK,wBAAwB,QAAS,GAAO,EAAQ,EACrD,KAAK,uBAAuB,QAAS,GAAO,EAAQ;EAIpD,IAAI,IAAO,KAAK,MAAO,IAAQ,KAAK,gBAAiB,EACjD,IAAO,KAAK,MAAO,IAAS,KAAK,gBAAiB;AAYtD,EAVA,KAAK,kCAAkC,QAAS,GAAM,EAAM,EAC5D,KAAK,yBAAyB,QAAS,GAAM,EAAM,EACnD,KAAK,yBAAyB,QAAS,GAAM,EAAM,EAInD,IAAO,KAAK,MAAO,IAAO,EAAG,EAC7B,IAAO,KAAK,MAAO,IAAO,EAAG,EAE7B,KAAK,yBAAyB,QAAS,GAAM,EAAM,EACnD,KAAK,yBAAyB,QAAS,GAAM,EAAM;;CASpD,aAAc,GAAQ;EAErB,IAAM,EAAE,gBAAa,GACf,EAAE,WAAQ,aAAU;AAE1B,MAAiB,EAAc,2BAA4B,GAAU,GAAO,EAAgB;EAI5F,IAAM,IAAO,EAAS,qBAAsB,EAAO;AAOnD,EANA,KAAK,QAAS,EAAK,OAAO,EAAK,OAAQ,EAIvC,EAAS,cAAe,UAAU,EAAG,EAErC,KAAK,uBAAuB;EAE5B,IAAM,IAAmB,EAAM;AAqG/B,EAjGA,EAAM,mBAAmB,KAAK,gBAE9B,EAAS,gBAAiB,KAAK,yBAA0B,EACzD,EAAS,yBAA2B,GAAQ,GAAG,MAAY;AAE1D,GAAK,KAAK,gBAAgB,IAAK,EAAQ,KAAK,MAE3C,EAAS,aAAc,GAAQ,GAAG,EAAQ;IAIzC,EAEH,EAAM,OAAO,yCACb,EAAS,OAAQ,GAAO,EAAQ,EAIhC,EAAM,mBAAmB,KAAK,sBAE9B,EAAS,gBAAiB,KAAK,wBAAyB,EACxD,EAAS,yBAA2B,GAAQ,GAAG,MAAY;AAE1D,GAAK,KAAK,gBAAgB,IAAK,EAAQ,KAAK,MAE3C,EAAS,aAAc,GAAQ,GAAG,EAAQ;IAIzC,EAEH,EAAM,OAAO,qCACb,EAAS,OAAQ,GAAO,EAAQ,EAIhC,EAAS,wBAAyB,EAAe,qBAAsB,EAEvE,KAAK,gBAAgB,OAAO,EAE5B,EAAM,OAAO,GAIb,EAAU,WAAW,KAAK,eAC1B,EAAU,OAAO,0BACjB,EAAS,gBAAiB,KAAK,kCAAmC,EAClE,EAAU,OAAQ,EAAU,EAI5B,EAAU,WAAW,KAAK,wBAC1B,EAAU,OAAO,8BACjB,EAAS,gBAAiB,KAAK,yBAA0B,EACzD,EAAU,OAAQ,EAAU,EAI5B,KAAK,yBAAyB,QAAQ,KAAK,yBAAyB,SACpE,KAAK,eAAe,MAAM,KAAM,EAAmB,EAEnD,EAAU,WAAW,KAAK,wBAC1B,EAAU,OAAO,oCACjB,EAAS,gBAAiB,KAAK,yBAA0B,EACzD,EAAU,OAAQ,EAAU,EAE5B,KAAK,yBAAyB,QAAQ,KAAK,yBAAyB,SACpE,KAAK,eAAe,MAAM,KAAM,EAAmB,EAEnD,EAAS,gBAAiB,KAAK,yBAA0B,EACzD,EAAU,OAAQ,EAAU,EAI5B,KAAK,yBAAyB,QAAQ,KAAK,yBAAyB,SACpE,KAAK,eAAe,MAAM,KAAM,EAAmB,EAEnD,EAAU,WAAW,KAAK,yBAC1B,EAAU,OAAO,uCACjB,EAAS,gBAAiB,KAAK,yBAA0B,EACzD,EAAU,OAAQ,EAAU,EAE5B,KAAK,yBAAyB,QAAQ,KAAK,yBAAyB,SACpE,KAAK,eAAe,MAAM,KAAM,EAAmB,EAEnD,EAAS,gBAAiB,KAAK,yBAA0B,EACzD,EAAU,OAAQ,EAAU,EAI5B,EAAU,WAAW,KAAK,oBAC1B,EAAU,OAAO,uCACjB,EAAS,gBAAiB,KAAK,uBAAwB,EACvD,EAAU,OAAQ,EAAU,EAI5B,EAAc,6BAA8B,GAAU,GAAO,EAAgB;;CAU9E,QAAQ;EAIP,IAAM,UAAoB;GAEzB,IAAM,IAAQ,KAAK,qBAAqB,OAAQ,EAAU,EAEtD;AAaJ,UAXA,AAMC,IANI,KAAK,OAAO,sBAEJ,EAAyB,GAAO,KAAK,aAAa,KAAK,WAAY,GAInE,EAA0B,GAAO,KAAK,aAAa,KAAK,WAAY,EAK1E,EAAM,GADK,EAAa,EAAE,cAAe,EAAW,CAAC,OAAQ,GAAG,EAAG,EAC7C,GAAK,EAAK;;AAUxC,EANA,KAAK,qBAAqB,eAAe,GAAa,EACtD,KAAK,qBAAqB,cAAc,IAIxC,KAAK,cAAc,eAAe,KAAK,qBACvC,KAAK,cAAc,cAAc;EAIjC,IAAM,IAAgB,QAAU;GAE/B,IAAM,IAAa,EAAa,KAAK,+BAAgC,EAC/D,IAAU,EAAM,EAAG,CAAC,IAAK,EAAY,CAAC,OAAO,EAC7C,IAAW,EAAM,GAAK,GAAK,GAAK,EAAK,CAAC,IAAK,EAAM,GAAS,EAAS,CAAE,EAErE,IAAS,GAAI,EACb,IAAK,KAAK,+BAA+B,OAAQ,EAAO,IAAK,EAAS,GAAI,CAAE,CAAC,OAAO,EACpF,IAAK,KAAK,+BAA+B,OAAQ,EAAO,IAAK,EAAS,GAAI,CAAE,CAAC,OAAO,EACpF,IAAK,KAAK,+BAA+B,OAAQ,EAAO,IAAK,EAAS,GAAI,CAAE,CAAC,OAAO,EACpF,IAAK,KAAK,+BAA+B,OAAQ,EAAO,IAAK,EAAS,GAAI,CAAE,CAAC,OAAO,EAIpF,IAAI,EAFI,EAAK,EAAG,EAAE,IAAK,EAAG,EAAG,EAAE,GAAK,EAC5B,EAAK,EAAG,EAAE,IAAK,EAAG,EAAG,EAAE,GAAK,CACZ,CAAC,QAAQ;AAKvC,UAAO,EAFkB,EAFd,EAAK,EAAG,GAAG,EAAG,EAAG,EACjB,EAAK,EAAG,GAAG,EAAG,EAAG,CACU,CACH,UAAU,CAAC,YAAa,KAAO,CAAC,OAAQ,KAAK,mBAAmB,KAAK,iBAAkB,EAClG,EAAG,CAAC,IAAK,EAAG;IAElC;AAGH,EADA,KAAK,uBAAuB,eAAe,GAAe,EAC1D,KAAK,uBAAuB,cAAc;EAI1C,IAEM,IAAc,GAAM,CAAE,GAAG,OAEvB,EAAO,OAAS,CAAC,IAAK,EAAK,EAAO,IAAO,CAAC,IAAK,EAAG,CAAC,IAAK,EAAG,CAAC,IAAK,EAAM,IAAK,EAAO,CAAE,CAAE,CAAC,IAAK,EAAO,CAAE,CAE3G,EAEG,IAAgB,GAAM,CAAE,OAAoB;GAEjD,IAAM,IAAa,EAAa,KAAK,+BAAgC,EAC/D,IAAU,EAAM,EAAG,CAAC,IAAK,EAAY,CAAC,OAAO,EAC7C,IAAS,GAAI,EAEb,IAAQ,EAAa,IAAK,EAAG,CAAC,OAAO,EACrC,IAAY,EAAa,GAAG,EAAO,CAAC,OAAO,EAC3C,IAAa,KAAK,yBAAyB,OAAQ,EAAQ,CAAC,IAAK,EAAW,CAAC,OAAO,EACpF,IAAQ,KAAK,eAAe,IAAK,EAAS,CAAC,IAAK,EAAc,CAAC,IAAK,EAAY,CAAC,OAAO,EAExF,IAAW,EAAM,OAAO;AAe9B,UAbA,EAAM;IAAE,OAAO,EAAK,EAAG;IAAE,KAAK,EAAK,EAAY;IAAE,MAAM;IAAO,WAAW;IAAM,GAAI,EAAE,WAAS;IAG7F,IAAM,IAAI,EADA,EAAa,IAAK,EAAO,EAAG,CAAE,CAAC,IAAK,EAAY,EAChC,EAAO,EAC3B,IAAU,KAAK,yBAAyB,OAAQ,EAAO,IAAK,EAAU,CAAE,EACxE,IAAU,KAAK,yBAAyB,OAAQ,EAAO,IAAK,EAAU,CAAE;AAI9E,IAFA,EAAW,UAAW,EAAQ,IAAK,EAAS,CAAC,IAAK,EAAG,CAAE,EACvD,EAAU,UAAW,EAAE,IAAK,EAAG,CAAE,EACjC,EAAS,UAAW,EAAO;KAEzB,EAEI,EAAW,IAAK,EAAW;IAEhC;AAMH,EAJA,KAAK,uBAAuB,eAAe,EAAe,KAAK,kBAAmB,EAClF,KAAK,uBAAuB,cAAc,IAE1C,KAAK,wBAAwB,eAAe,EAAe,EAAY,EACvE,KAAK,wBAAwB,cAAc;EAI3C,IAAM,IAAY,QAAU;GAE3B,IAAM,IAAa,KAAK,sBAClB,IAAa,KAAK,sBAClB,IAAY,KAAK,qBAEjB,IAAY,EAAW,IAAK,EAAW,IAAK,KAAK,aAAc,CAAE;AAEvE,UAAO,EAAU,EAAE,IAAK,EAAW;IAEjC;AAKH,SAHA,KAAK,mBAAmB,eAAe,GAAW,EAClD,KAAK,mBAAmB,cAAc,IAE/B,KAAK;;CAQb,UAAU;AAmBT,EAjBA,KAAK,gBAAgB,SAAS,GAE9B,KAAK,yBAAyB,SAAS,EACvC,KAAK,wBAAwB,SAAS,EACtC,KAAK,kCAAkC,SAAS,EAChD,KAAK,yBAAyB,SAAS,EACvC,KAAK,yBAAyB,SAAS,EACvC,KAAK,yBAAyB,SAAS,EACvC,KAAK,yBAAyB,SAAS,EACvC,KAAK,uBAAuB,SAAS,EAErC,KAAK,eAAe,SAAS,EAC7B,KAAK,qBAAqB,SAAS,EACnC,KAAK,cAAc,SAAS,EAC5B,KAAK,uBAAuB,SAAS,EACrC,KAAK,uBAAuB,SAAS,EACrC,KAAK,wBAAwB,SAAS,EACtC,KAAK,mBAAmB,SAAS;;CASlC,wBAAwB;AAEvB,OAAM,IAAI,IAAI,GAAG,IAAI,KAAK,gBAAgB,QAAQ,IAE1B,MAAK,gBAAiB,GAC9B,UAAY,MAAY;AAEtC,GAAK,EAAO,UAAS,KAAK,gBAAgB,IAAK,EAAQ;IAErD;;GAwBO,KAAY,GAAO,GAAQ,MAAY,IAAI,EAAa,GAAO,GAAQ,EAAQ,ECtvBtE,IAAtB,MAA6C,ICahC,IAAb,MAAa,UAA0B,EAAuB;;gBACnC;;CASzB,YAAY,GAA+B;AAOzC,EANA,OAAO,gBATkB,EAAkB,QAU3C,KAAK,kBAAkB,EAAO,iBAC9B,KAAK,eAAe,EAAQ,EAAO,aAAa,EAChD,KAAK,WAAW,EAAQ,EAAO,SAAS,EACxC,KAAK,gBAAgB,EAAQ,EAAO,cAAc,EAClD,KAAK,mBAAmB,EAAQ,IAAI,EAAM,EAAO,iBAAiB,CAAC,EACnE,KAAK,kBAAkB,EAAQ,IAAI,EAAM,EAAO,gBAAgB,CAAC;;CAGnE,iBAAwB,GAAkC;AACxD,OAAK,gBAAgB,OACnB,GACA,KAAK,gBAAgB,QACrB,GAAG,EACJ;;CAGH,qBAAqC;AACnC,SAAO,KAAK,gBAAgB,WAAW;;CAGzC,SACE,GACA,GACA,GACc;AAGd,MAAI,CAAC,KAAK,oBAAoB,CAC5B,QAAO;EAST,IAAM,EAAE,gBAAa,kBAND,EAAQ,GAAO,GAAQ;GACzC,iBAAiB,KAAK;GACtB,eAAe,KAAK;GACpB,UAAU,KAAK;GAChB,CAAC,EAII,IAAe,EAClB,IAAI,KAAK,iBAAiB,CAC1B,IAAI,EAAW,IAAI,KAAK,gBAAgB,CAAC,CACzC,IAAI,KAAK,aAAa;AAEzB,SAAO,EAAa,IAAI,EAAa;;GCtD5B,IAAb,cAA0C,EAA+B;CAKvE,YACE,GACA,GACA,GAIA;AAIA,EAHA,MAAM,GAAS,EAAS,6BAXI,wCACE,IAAI,KAAqC,EAYvE,KAAK,iBAAiB,IAAI,EAAe,EAAS,EAC9C,KACF,KAAK,cACH,EAAc,yBACd,EAAc,uBACf;;CAIL,cAAsB,GAA0C;AAE9D,EADA,KAAK,aAAa,IAAI,EAAW,QAAQ,EAAW,EACpD,KAAK,sBAAsB;;CAG7B,aAAmC;AACjC,UAAQ,MAAM,yDAAyD;;CAGzE,2BAAiD;AAC/C,UAAQ,MACN,uEACD;;CAGH,0BAAgD;AAC9C,UAAQ,MACN,sEACD;;CAGH,kBAAgD;AAI9C,SAHA,QAAQ,MACN,8DACD,EACM,EAAe;;CAGxB,iBAAiC,GAAkC;EACjE,IAAM,IAAc,KAAK,2BAA2B;AAOpD,EANI,MACF,KAAK,sBACH,KAAK,uBACJ,EAAY,oBAAoB,IAAI,EAAe,WAAW,KAC9D,CAAC,EAAY,oBAAoB,IAAI,EAAe,SAAS,IAElE,GAAa,iBAAiB,EAAe;;CAG/C,cAA8B,GAAmC;AAC/D,UAAQ,MAAM,4DAA4D;;CAG5E,OAAuB,GAAc,GAAsB;AAMzD,EALA,AAGE,KAAK,yBAFL,KAAK,eAAe,aAAa,KAAK,qBAAqB,GAAO,EAAO,EACzE,KAAK,eAAe,cAAc,IACP,KAE7B,KAAK,eAAe,OAAO,GAAO,EAAO;;CAG3C,qBAA6B,GAAc,GAA8B;EACvE,IAAI,IAAuB,EAAK,GAAO,EAAO;AAE9C,OAAK,IAAM,KAAc,KAAK,aAAa,QAAQ,CACjD,KAAS,EAAW,SAAS,GAAQ,GAAO,EAAO;AAGrD,SAAO;;CAGT,eAA+B,GAA6B;AAC1D,UAAQ,MAAM,6DAA6D;;CAG7E,2BACE,GACA,GACM;AACN,UAAQ,MACN,yEACD;;CAGH,gBAAgC,GAAyB;AACvD,UAAQ,MACN,8DACD;;CAGH,gCACE,GACM;AACN,UAAQ,MACN,8EACD;;CAGH,cACE,GACA,GACM;AACF,OAAK,aAAa,IAAI,EAAkB,OAAO,IAInD,KAAK,cACH,IAAI,EAAkB;GACpB,iBAAiB,EAAE;GACD;GACD;GACjB,cAAc;GACd,UAAU;GACV,eAAe;GAChB,CAAC,CACH;;CAGH,4BAAmE;EACjE,IAAM,IAAO,KAAK,aAAa,IAAI,EAAkB,OAAO;AAC5D,MAAI,KAAQ,aAAgB,EAC1B,QAAO;;CAKX,gBAAuB,GAAmC;AACxD,UAAQ,MACN,8DACD;;CAGH,cAA8B,GAA+B;AAC3D,UAAQ,MAAM,4DAA4D;;CAG5E,eAA+B,GAAsC;AACnE,UAAQ,MAAM,6DAA6D;;CAG7E,QAAwB,GAAmC;AACzD,UAAQ,MAAM,sDAAsD"}