← Commit history

Upload full source (MIT) — open source under adom org

John Lauer ·d4a85baa48 ·4mo ago ·parent ca088eb
29 files changed +22845 diff truncated
vendor/adom-step/vendor/3d-viewer-dist/adom-3d-viewer-babylon9.esm.js+1vendor/adom-step/vendor/3d-viewer-dist/chunk-3yOgvDwN.js+37vendor/adom-step/vendor/3d-viewer-dist/chunk-9O52r__4.js+19vendor/adom-step/vendor/3d-viewer-dist/chunk-B-22ATAX.js+274vendor/adom-step/vendor/3d-viewer-dist/chunk-B3szh7UZ.js+16vendor/adom-step/vendor/3d-viewer-dist/chunk-B5_ZMbAO.js+46vendor/adom-step/vendor/3d-viewer-dist/chunk-BAvHv3z9.js+154vendor/adom-step/vendor/3d-viewer-dist/chunk-BDa38Vn2.js+68vendor/adom-step/vendor/3d-viewer-dist/chunk-BF7e5jXO.js+1009vendor/adom-step/vendor/3d-viewer-dist/chunk-BJlKwOsV.js+70vendor/adom-step/vendor/3d-viewer-dist/chunk-BKpenvUR.js+69vendor/adom-step/vendor/3d-viewer-dist/chunk-BQ8Dy87L.js+13vendor/adom-step/vendor/3d-viewer-dist/chunk-B_Vl0aRN.js+18vendor/adom-step/vendor/3d-viewer-dist/chunk-BiVWof0k.js+41vendor/adom-step/vendor/3d-viewer-dist/chunk-Bj6IQT5Z.js+79vendor/adom-step/vendor/3d-viewer-dist/chunk-BloWGZPN.js+80vendor/adom-step/vendor/3d-viewer-dist/chunk-BrLl4i-D.js+3426vendor/adom-step/vendor/3d-viewer-dist/chunk-C5DT99Cs.js+5vendor/adom-step/vendor/3d-viewer-dist/chunk-CLk12wZ9.js+72vendor/adom-step/vendor/3d-viewer-dist/chunk-CU2361BP.js+10vendor/adom-step/vendor/3d-viewer-dist/chunk-CXESUAmj.js+996vendor/adom-step/vendor/3d-viewer-dist/chunk-CbPvriUc.js+74vendor/adom-step/vendor/3d-viewer-dist/chunk-CeVapcuS.js+31vendor/adom-step/vendor/3d-viewer-dist/chunk-CesoqJPD.js+30vendor/adom-step/vendor/3d-viewer-dist/chunk-CktpeoLr.js+2114vendor/adom-step/vendor/3d-viewer-dist/chunk-Cw8L9bT6.js+21vendor/adom-step/vendor/3d-viewer-dist/chunk-Cx4kqim-.js+712vendor/adom-step/vendor/3d-viewer-dist/chunk-CxjklEwO.js+5vendor/adom-step/vendor/3d-viewer-dist/chunk-D41qXL6t.js+13355
vendor/adom-step/vendor/3d-viewer-dist/adom-3d-viewer-babylon9.esm.jsadded+1
@@ -0,0 +1 @@+import "./chunk-IERganv1.js";
vendor/adom-step/vendor/3d-viewer-dist/chunk-3yOgvDwN.jsadded+37
@@ -0,0 +1,37 @@+import { bW as i } from "./chunk-IERganv1.js";+const e = "skyVertexShader", o = `precision highp float;attribute vec3 position;+#ifdef VERTEXCOLOR+attribute vec4 color;+#endif+uniform mat4 world;uniform mat4 view;uniform mat4 viewProjection;+#ifdef POINTSIZE+uniform float pointSize;+#endif+varying vec3 vPositionW;+#ifdef VERTEXCOLOR+varying vec4 vColor;+#endif+#include<logDepthDeclaration>+#include<clipPlaneVertexDeclaration>+#include<fogVertexDeclaration>+#define CUSTOM_VERTEX_DEFINITIONS+void main(void) {+#define CUSTOM_VERTEX_MAIN_BEGIN+gl_Position=viewProjection*world*vec4(position,1.0);vec4 worldPos=world*vec4(position,1.0);vPositionW=vec3(worldPos);+#include<clipPlaneVertex>+#include<logDepthVertex>+#include<fogVertex>+#ifdef VERTEXCOLOR+vColor=color;+#endif+#if defined(POINTSIZE) && !defined(WEBGPU)+gl_PointSize=pointSize;+#endif+#define CUSTOM_VERTEX_MAIN_END+}+`;+i.ShadersStore[e] || (i.ShadersStore[e] = o);+const r = { name: e, shader: o };+export {+  r as skyVertexShader+};
vendor/adom-step/vendor/3d-viewer-dist/chunk-9O52r__4.jsadded+19
@@ -0,0 +1,19 @@+import { bW as i } from "./chunk-IERganv1.js";+const e = "volumetricLightingRenderVolumePixelShader", t = `#include<__decl__sceneFragment>+uniform mat4 invViewProjection;uniform vec3 lightDir; +uniform vec2 outputTextureSize;uniform vec4 extinctionPhaseG;uniform vec3 lightPower;uniform vec2 textureRatio;uniform sampler2D depthTexture;varying vec4 vWorldPos;float henyeyGreenstein(float g,float cosTheta) {float denom=1.0+g*g-2.0*g*cosTheta;return 1.0/(4.0*3.14159265)*(1.0-g*g)/(denom*sqrt(max(denom,0.0)));}+vec3 integrateDirectional(float eyeDist,vec3 viewDir,vec3 lightDir) {float phaseG=extinctionPhaseG.w;+#ifdef USE_EXTINCTION+vec3 extinction=extinctionPhaseG.xyz;return henyeyGreenstein(phaseG,dot(viewDir,lightDir))*(vec3(1.0)-exp(-extinction*eyeDist))/extinction;+#else+return vec3(henyeyGreenstein(phaseG,dot(viewDir,lightDir)))*vec3(eyeDist);+#endif+}+void main(void) {float depth=texelFetch(depthTexture,ivec2(gl_FragCoord.xy*textureRatio),0).r;vec4 worldPos=vWorldPos;if (gl_FragCoord.z>depth) {vec4 ndc=vec4((gl_FragCoord.xy/outputTextureSize)*2.0-1.0,depth*2.0-1.0,1.0);worldPos=invViewProjection*ndc;worldPos=worldPos/worldPos.w;}+vec3 viewDir=worldPos.xyz-vEyePosition.xyz;float eyeDist=length(viewDir);viewDir=viewDir/eyeDist;float fSign=gl_FrontFacing ? 1.0 : -1.0;vec3 integral=integrateDirectional(eyeDist,-viewDir,lightDir);gl_FragColor=vec4(lightPower*integral*fSign,1.0);}+`;+i.ShadersStore[e] || (i.ShadersStore[e] = t);+const r = { name: e, shader: t };+export {+  r as volumetricLightingRenderVolumePixelShader+};
vendor/adom-step/vendor/3d-viewer-dist/chunk-B-22ATAX.jsadded+274
@@ -0,0 +1,274 @@+import { am as Y, bR as h, V as E, bH as p, H as U, Q as R, ay as b, cW as V, c0 as D } from "./chunk-IERganv1.js";+import { B as g } from "./chunk-DsOYaBFP.js";+const O = "Xposition", F = "Yposition", k = "Zposition", x = "Xrotation", v = "Yrotation", M = "Zrotation", j = "HIERARCHY", K = "MOTION";+class X {+  constructor(t) {+    this.loopMode = h.ANIMATIONLOOPMODE_CYCLE, this.list = [], this.root = _(), this.numFrames = 0, this.frameRate = 0, this.skeleton = t;+  }+}+function _() {+  return {+    name: "",+    type: "",+    offset: new E(),+    channels: [],+    children: [],+    frames: [],+    parent: null+  };+}+function Z() {+  return {+    frame: 0,+    position: new E(),+    rotation: new R()+  };+}+function z(n) {+  const t = n.offset.x, o = n.offset.y, i = n.offset.z;+  return p.Translation(t, o, i);+}+function Q(n, t) {+  if (n.frames.length === 0)+    return [];+  const o = [], i = n.channels.some((f) => f === O || f === F || f === k), e = n.channels.some((f) => f === x || f === v || f === M), r = new h(`${n.name}_pos`, "position", t.frameRate, h.ANIMATIONTYPE_VECTOR3, t.loopMode), a = new h(`${n.name}_rot`, "rotationQuaternion", t.frameRate, h.ANIMATIONTYPE_QUATERNION, t.loopMode), s = [], c = [];+  for (let f = 0; f < n.frames.length; f++) {+    const l = n.frames[f];+    i && l.position && s.push({+      frame: l.frame,+      value: l.position.clone()+    }), e && c.push({+      frame: l.frame,+      value: l.rotation.clone()+    });+  }+  return s.length > 0 && (r.setKeys(s), o.push(r)), c.length > 0 && (a.setKeys(c), o.push(a)), o;+}+function P(n, t, o) {+  const i = z(n), e = new b(n.name, o.skeleton, t, i), r = Q(n, o);+  for (const a of r)+    a.getKeys() && a.getKeys().length > 0 && e.animations.push(a);+  for (const a of n.children)+    P(a, e, o);+}+function B(n, t, o, i) {+  if (o.type === "ENDSITE")+    return;+  const e = Z();+  e.frame = t, e.position = new E(), e.rotation = new R(), o.frames.push(e);+  let r = p.Identity();+  for (let a = 0; a < o.channels.length; ++a) {+    const s = o.channels[a], c = n[i.i++];+    if (!c)+      continue;+    const f = parseFloat(c.trim());+    if (s.endsWith("position"))+      switch (s) {+        case O:+          e.position.x = f;+          break;+        case F:+          e.position.y = f;+          break;+        case k:+          e.position.z = f;+          break;+      }+    else if (s.endsWith("rotation")) {+      const l = U.ToRadians(f);+      let m;+      switch (s) {+        case x:+          m = p.RotationX(l);+          break;+        case v:+          m = p.RotationY(l);+          break;+        case M:+          m = p.RotationZ(l);+          break;+      }+      r = m.multiply(r);+    }+  }+  R.FromRotationMatrixToRef(r, e.rotation);+  for (const a of o.children)+    B(n, t, a, i);+}+function L(n, t, o, i) {+  const e = _();+  e.parent = o, i.list.push(e);+  let r = t.trim().split(/\s+/);+  if (r[0].toUpperCase() === "END" && r[1].toUpperCase() === "SITE" ? (e.type = "ENDSITE", e.name = "ENDSITE") : (e.name = r[1], e.type = r[0].toUpperCase()), n.shift()?.trim() != "{")+    throw new Error("Expected opening { after type & name");+  const a = n.shift()?.trim().split(/\s+/);+  if (!a)+    throw new Error("Unexpected end of file: missing OFFSET");+  if (r = a, r[0].toUpperCase() != "OFFSET")+    throw new Error("Expected OFFSET, but got: " + r[0]);+  if (r.length != 4)+    throw new Error("OFFSET: Invalid number of values");+  const s = new E(parseFloat(r[1]), parseFloat(r[2]), parseFloat(r[3]));+  if (isNaN(s.x) || isNaN(s.y) || isNaN(s.z))+    throw new Error("OFFSET: Invalid values");+  if (e.offset = s, e.type != "ENDSITE") {+    if (r = n.shift()?.trim().split(/\s+/), !r)+      throw new Error("Unexpected end of file: missing CHANNELS");+    if (r[0].toUpperCase() != "CHANNELS")+      throw new Error("Expected CHANNELS definition");+    const c = parseInt(r[1]);+    e.channels = r.splice(2, c), e.children = [];+  }+  for (; n.length > 0; ) {+    const c = n.shift()?.trim();+    if (c === "}")+      return e;+    c && e.children.push(L(n, c, e, i));+  }+  throw new Error("Unexpected end of file: missing closing brace");+}+function A(n, t, o, i) {+  const e = n.split(`+`), { loopMode: r } = i;+  t._blockEntityCollection = !!o;+  const a = new Y("", "", t);+  a._parentContainer = o, t._blockEntityCollection = !1;+  const s = new X(a);+  s.loopMode = r;+  const c = e.shift();+  if (!c || c.trim().toUpperCase() !== j)+    throw new Error("HIERARCHY expected");+  const f = e.shift();+  if (!f)+    throw new Error("Unexpected end of file after HIERARCHY");+  const l = L(e, f.trim(), null, s), m = e.shift();+  if (!m || m.trim().toUpperCase() !== K)+    throw new Error("MOTION expected");+  const H = e.shift();+  if (!H)+    throw new Error("Unexpected end of file before frame count");+  const y = H.trim().split(/[\s]+/);+  if (y.length < 2)+    throw new Error("Invalid frame count line");+  const w = parseInt(y[1]);+  if (isNaN(w))+    throw new Error("Failed to read number of frames.");+  s.numFrames = w;+  const C = e.shift();+  if (!C)+    throw new Error("Unexpected end of file before frame time");+  const I = C.trim().split(/[\s]+/);+  if (I.length < 3)+    throw new Error("Invalid frame time line");+  const u = parseFloat(I[2]);+  if (isNaN(u))+    throw new Error("Failed to read frame time.");+  if (u <= 0)+    throw new Error("Failed to read frame time. Invalid value " + u);+  s.frameRate = 1 / u;+  for (let N = 0; N < w; ++N) {+    const T = e.shift();+    if (!T)+      continue;+    const S = T.trim().split(/[\s]+/) || [];+    B(S, N, l, { i: 0 });+  }+  return s.root = l, P(s.root, null, s), s.skeleton.returnToRest(), s.skeleton;+}+class d {+  /**+   * Creates loader for bvh motion files+   * @param loadingOptions - Options for the bvh loader+   */+  constructor(t) {+    this.name = g.name, this.extensions = g.extensions, this._loadingOptions = { ...d._DefaultLoadingOptions, ...t ?? {} };+  }+  static get _DefaultLoadingOptions() {+    return {+      loopMode: h.ANIMATIONLOOPMODE_CYCLE+    };+  }+  /** @internal */+  createPlugin(t) {+    return new d(t[g.name]);+  }+  /**+   * If the data string can be loaded directly.+   * @param data - direct load data+   * @returns if the data can be loaded directly+   */+  canDirectLoad(t) {+    return this.isBvhHeader(t);+  }+  isBvhHeader(t) {+    return t.split(`+`)[0] == "HIERARCHY";+  }+  isNotBvhHeader(t) {+    return !this.isBvhHeader(t);+  }+  /**+   * Imports  from the loaded gaussian splatting data and adds them to the scene+   * @param _meshesNames a string or array of strings of the mesh names that should be loaded from the file+   * @param scene the scene the meshes should be added to+   * @param data the bvh data to load+   * @returns a promise containing the loaded skeletons and animations+   */+  // eslint-disable-next-line @typescript-eslint/promise-function-async, no-restricted-syntax+  importMeshAsync(t, o, i) {+    if (typeof i != "string")+      return Promise.reject("BVH loader expects string data.");+    if (this.isNotBvhHeader(i))+      return Promise.reject("BVH loader expects HIERARCHY header.");+    try {+      const e = A(i, o, null, this._loadingOptions);+      return Promise.resolve({+        meshes: [],+        particleSystems: [],+        skeletons: [e],+        animationGroups: [],+        transformNodes: [],+        geometries: [],+        lights: [],+        spriteManagers: []+      });+    } catch (e) {+      return Promise.reject(e);+    }+  }+  /**+   * Imports all objects from the loaded bvh data and adds them to the scene+   * @param scene the scene the objects should be added to+   * @param data the bvh data to load+   * @returns a promise which completes when objects have been loaded to the scene+   */+  // eslint-disable-next-line no-restricted-syntax, @typescript-eslint/promise-function-async+  loadAsync(t, o) {+    return typeof o != "string" ? Promise.reject("BVH loader expects string data.") : this.isNotBvhHeader(o) ? Promise.reject("BVH loader expects HIERARCHY header.") : this.importMeshAsync(null, t, o).then(() => {+    });+  }+  /**+   * Load into an asset container.+   * @param scene The scene to load into+   * @param data The data to import+   * @returns The loaded asset container+   */+  // eslint-disable-next-line @typescript-eslint/promise-function-async, no-restricted-syntax+  loadAssetContainerAsync(t, o) {+    if (typeof o != "string")+      return Promise.reject("BVH loader expects string data.");+    if (this.isNotBvhHeader(o))+      return Promise.reject("BVH loader expects HIERARCHY header.");+    const i = new V(t);+    try {+      const e = A(o, t, i, this._loadingOptions);+      return i.skeletons.push(e), Promise.resolve(i);+    } catch (e) {+      return Promise.reject(e);+    }+  }+}+D(new d());+export {+  d as BVHFileLoader+};
vendor/adom-step/vendor/3d-viewer-dist/chunk-B3szh7UZ.jsadded+16
@@ -0,0 +1,16 @@+import { bU as e, bV as s } from "./chunk-IERganv1.js";+class m extends e {+  constructor(o) {+    super(o);+    const t = o.glTF, r = t?.animations?.map((a) => a._babylonAnimationGroup) || [];+    this.animationGroups = this.registerDataOutput("animationGroups", s, r);+    const n = t?.nodes?.map((a) => a._babylonTransformNode) || [];+    this.nodes = this.registerDataOutput("nodes", s, n);+  }+  getClassName() {+    return "FlowGraphGLTFDataProvider";+  }+}+export {+  m as FlowGraphGLTFDataProvider+};
vendor/adom-step/vendor/3d-viewer-dist/chunk-B5_ZMbAO.jsadded+46
@@ -0,0 +1,46 @@+import { bW as i } from "./chunk-IERganv1.js";+const e = "gridVertexShader", t = `precision highp float;attribute vec3 position;attribute vec3 normal;+#ifdef UV1+attribute vec2 uv;+#endif+#ifdef UV2+attribute vec2 uv2;+#endif+#include<instancesDeclaration>+#include<__decl__sceneVertex>+varying vec3 vPosition;varying vec3 vNormal;+#include<logDepthDeclaration>+#include<fogVertexDeclaration>+#ifdef OPACITY+varying vec2 vOpacityUV;uniform mat4 opacityMatrix;uniform vec2 vOpacityInfos;+#endif+#include<clipPlaneVertexDeclaration>+#define CUSTOM_VERTEX_DEFINITIONS+void main(void) {+#define CUSTOM_VERTEX_MAIN_BEGIN+#include<instancesVertex>+vec4 worldPos=finalWorld*vec4(position,1.0);+#include<fogVertex>+vec4 cameraSpacePosition=view*worldPos;gl_Position=projection*cameraSpacePosition;+#ifdef OPACITY+#ifndef UV1+vec2 uv=vec2(0.,0.);+#endif+#ifndef UV2+vec2 uv2=vec2(0.,0.);+#endif+if (vOpacityInfos.x==0.)+{vOpacityUV=vec2(opacityMatrix*vec4(uv,1.0,0.0));}+else+{vOpacityUV=vec2(opacityMatrix*vec4(uv2,1.0,0.0));}+#endif +#include<clipPlaneVertex>+#include<logDepthVertex>+vPosition=position;vNormal=normal;+#define CUSTOM_VERTEX_MAIN_END+}`;+i.ShadersStore[e] || (i.ShadersStore[e] = t);+const c = { name: e, shader: t };+export {+  c as gridVertexShader+};
vendor/adom-step/vendor/3d-viewer-dist/chunk-BAvHv3z9.jsadded+154
@@ -0,0 +1,154 @@+import { P as A, i as E, k as p, l as m, c9 as O, m as x, n as H, E as D, ca as _, o as h, cb as N, p as C, A as v, cc as F, cd as G, q as y, r as M, ce as R, w as b, t as B, u as g, v as W, _ as l, g as U, h as d, s as w, e as P, R as k } from "./chunk-IERganv1.js";+class z extends W {+  constructor() {+    super(), this.DIFFUSE = !1, this.CLIPPLANE = !1, this.CLIPPLANE2 = !1, this.CLIPPLANE3 = !1, this.CLIPPLANE4 = !1, this.CLIPPLANE5 = !1, this.CLIPPLANE6 = !1, this.ALPHATEST = !1, this.DEPTHPREPASS = !1, this.POINTSIZE = !1, this.FOG = !1, this.LIGHT0 = !1, this.LIGHT1 = !1, this.LIGHT2 = !1, this.LIGHT3 = !1, this.SPOTLIGHT0 = !1, this.SPOTLIGHT1 = !1, this.SPOTLIGHT2 = !1, this.SPOTLIGHT3 = !1, this.HEMILIGHT0 = !1, this.HEMILIGHT1 = !1, this.HEMILIGHT2 = !1, this.HEMILIGHT3 = !1, this.DIRLIGHT0 = !1, this.DIRLIGHT1 = !1, this.DIRLIGHT2 = !1, this.DIRLIGHT3 = !1, this.POINTLIGHT0 = !1, this.POINTLIGHT1 = !1, this.POINTLIGHT2 = !1, this.POINTLIGHT3 = !1, this.SHADOW0 = !1, this.SHADOW1 = !1, this.SHADOW2 = !1, this.SHADOW3 = !1, this.SHADOWS = !1, this.SHADOWESM0 = !1, this.SHADOWESM1 = !1, this.SHADOWESM2 = !1, this.SHADOWESM3 = !1, this.SHADOWPOISSON0 = !1, this.SHADOWPOISSON1 = !1, this.SHADOWPOISSON2 = !1, this.SHADOWPOISSON3 = !1, this.SHADOWPCF0 = !1, this.SHADOWPCF1 = !1, this.SHADOWPCF2 = !1, this.SHADOWPCF3 = !1, this.SHADOWPCSS0 = !1, this.SHADOWPCSS1 = !1, this.SHADOWPCSS2 = !1, this.SHADOWPCSS3 = !1, this.NORMAL = !1, this.UV1 = !1, this.UV2 = !1, this.NUM_BONE_INFLUENCERS = 0, this.BonesPerMesh = 0, this.INSTANCES = !1, this.THIN_INSTANCES = !1, this.LIGHTING = !1, this.IMAGEPROCESSINGPOSTPROCESS = !1, this.SKIPFINALCOLORCLAMP = !1, this.LOGARITHMICDEPTH = !1, this.AREALIGHTSUPPORTED = !0, this.AREALIGHTNOROUGHTNESS = !0, this.rebuild();+  }+}+class f extends A {+  /**+   * Instantiates a Normal Material in the given scene+   * @param name The friendly name of the material+   * @param scene The scene to add the material to+   * @param forceGLSL Use the GLSL code generation for the shader (even on WebGPU). Default is false+   */+  constructor(e, i, r = !1) {+    super(e, i, void 0, r), this.diffuseColor = new E(1, 1, 1), this._disableLighting = !1, this._maxSimultaneousLights = 4, this._shadersLoaded = !1;+  }+  needAlphaBlending() {+    return this.alpha < 1;+  }+  needAlphaBlendingForMesh(e) {+    return this.needAlphaBlending() || e.visibility < 1;+  }+  needAlphaTesting() {+    return !1;+  }+  getAlphaTestTexture() {+    return null;+  }+  // Methods+  isReadyForSubMesh(e, i, r) {+    const t = i._drawWrapper;+    if (this.isFrozen && t.effect && t._wasPreviouslyReady && t._wasPreviouslyUsingInstances === r)+      return !0;+    i.materialDefines || (i.materialDefines = new z());+    const s = i.materialDefines, a = this.getScene();+    if (this._isReadyForSubMesh(i))+      return !0;+    const S = a.getEngine();+    if (s._areTexturesDirty && (s._needUVs = !1, a.texturesEnabled && this._diffuseTexture && p.DiffuseTextureEnabled))+      if (this._diffuseTexture.isReady())+        s._needUVs = !0, s.DIFFUSE = !0;+      else+        return !1;+    if (m(e, a, this._useLogarithmicDepth, this.pointsCloud, this.fogEnabled, this.needAlphaTestingForMesh(e), s, void 0, void 0, void 0, this._isVertexOutputInvariant), s._needNormals = !0, O(a, e, s, !1, this._maxSimultaneousLights, this._disableLighting), x(a, S, this, s, !!r, null, i.getRenderingMesh().hasThinInstances), s.LIGHTING = !this._disableLighting, H(e, s, !0, !0), s.isDirty) {+      s.markAsProcessed(), a.resetCachedMaterial();+      const n = new D();+      s.FOG && n.addFallback(1, "FOG"), _(s, n), s.NUM_BONE_INFLUENCERS > 0 && n.addCPUSkinningFallback(0, e), s.IMAGEPROCESSINGPOSTPROCESS = a.imageProcessingConfiguration.applyByPostProcess;+      const o = [h.PositionKind];+      s.NORMAL && o.push(h.NormalKind), s.UV1 && o.push(h.UVKind), s.UV2 && o.push(h.UV2Kind), N(o, e, s, n), C(o, s);+      const L = "normal", I = s.toString(), u = [+        "world",+        "view",+        "viewProjection",+        "vEyePosition",+        "vLightsType",+        "vDiffuseColor",+        "vFogInfos",+        "vFogColor",+        "pointSize",+        "vDiffuseInfos",+        "mBones",+        "diffuseMatrix",+        "logarithmicDepthConstant"+      ], c = ["diffuseSampler", "areaLightsLTC1Sampler", "areaLightsLTC2Sampler"], T = [];+      v(u), F({+        uniformsNames: u,+        uniformBuffersNames: T,+        samplers: c,+        defines: s,+        maxSimultaneousLights: 4+      }), i.setEffect(a.getEngine().createEffect(L, {+        attributes: o,+        uniformsNames: u,+        uniformBuffersNames: T,+        samplers: c,+        defines: I,+        fallbacks: n,+        onCompiled: this.onCompiled,+        onError: this.onError,+        indexParameters: { maxSimultaneousLights: 4 },+        shaderLanguage: this._shaderLanguage,+        extraInitializationsAsync: this._shadersLoaded ? void 0 : async () => {+          this.shaderLanguage === 1 ? await Promise.all([import("./chunk-CbPvriUc.js"), import("./chunk-DkGYtK88.js")]) : await Promise.all([import("./chunk-CLk12wZ9.js"), import("./chunk-BJlKwOsV.js")]), this._shadersLoaded = !0;+        }+      }, S), s, this._materialContext);+    }+    if (s.AREALIGHTUSED) {+      for (let n = 0; n < e.lightSources.length; n++)+        if (!e.lightSources[n]._isReady())+          return !1;+    }+    return !i.effect || !i.effect.isReady() ? !1 : (s._renderId = a.getRenderId(), t._wasPreviouslyReady = !0, t._wasPreviouslyUsingInstances = !!r, !0);+  }+  bindForSubMesh(e, i, r) {+    const t = this.getScene(), s = r.materialDefines;+    if (!s)+      return;+    const a = r.effect;+    a && (this._activeEffect = a, this.bindOnlyWorldMatrix(e), this._activeEffect.setMatrix("viewProjection", t.getTransformMatrix()), G(i, this._activeEffect), this._mustRebind(t, a, r) && (this.diffuseTexture && p.DiffuseTextureEnabled && (this._activeEffect.setTexture("diffuseSampler", this.diffuseTexture), this._activeEffect.setFloat2("vDiffuseInfos", this.diffuseTexture.coordinatesIndex, this.diffuseTexture.level), this._activeEffect.setMatrix("diffuseMatrix", this.diffuseTexture.getTextureMatrix())), y(a, this, t), this.pointsCloud && this._activeEffect.setFloat("pointSize", this.pointSize), this._useLogarithmicDepth && M(s, a, t), t.bindEyePosition(a)), this._activeEffect.setColor4("vDiffuseColor", this.diffuseColor, this.alpha * i.visibility), t.lightsEnabled && !this.disableLighting && R(t, i, this._activeEffect, s), t.fogEnabled && i.applyFog && t.fogMode !== b.FOGMODE_NONE && this._activeEffect.setMatrix("view", t.getViewMatrix()), B(t, i, this._activeEffect), this._afterBind(i, this._activeEffect, r));+  }+  getAnimatables() {+    const e = [];+    return this.diffuseTexture && this.diffuseTexture.animations && this.diffuseTexture.animations.length > 0 && e.push(this.diffuseTexture), e;+  }+  getActiveTextures() {+    const e = super.getActiveTextures();+    return this._diffuseTexture && e.push(this._diffuseTexture), e;+  }+  hasTexture(e) {+    return !!(super.hasTexture(e) || this.diffuseTexture === e);+  }+  dispose(e) {+    this.diffuseTexture && this.diffuseTexture.dispose(), super.dispose(e);+  }+  clone(e) {+    return g.Clone(() => new f(e, this.getScene()), this);+  }+  serialize() {+    const e = super.serialize();+    return e.customType = "BABYLON.NormalMaterial", e;+  }+  getClassName() {+    return "NormalMaterial";+  }+  // Statics+  static Parse(e, i, r) {+    return g.Parse(() => new f(e.name, i), e, i, r);+  }+}+l([+  U("diffuseTexture")+], f.prototype, "_diffuseTexture", void 0);+l([+  d("_markAllSubMeshesAsTexturesDirty")+], f.prototype, "diffuseTexture", void 0);+l([+  w()+], f.prototype, "diffuseColor", void 0);+l([+  P("disableLighting")+], f.prototype, "_disableLighting", void 0);+l([+  d("_markAllSubMeshesAsLightsDirty")+], f.prototype, "disableLighting", void 0);+l([+  P("maxSimultaneousLights")+], f.prototype, "_maxSimultaneousLights", void 0);+l([+  d("_markAllSubMeshesAsLightsDirty")+], f.prototype, "maxSimultaneousLights", void 0);+k("BABYLON.NormalMaterial", f);+export {+  f as NormalMaterial+};
vendor/adom-step/vendor/3d-viewer-dist/chunk-BDa38Vn2.jsadded+68
@@ -0,0 +1,68 @@+import { bW as o } from "./chunk-IERganv1.js";+const i = "gridPixelShader", t = `#extension GL_OES_standard_derivatives : enable+#define SQRT2 1.41421356+#define PI 3.14159+precision highp float;uniform float visibility;uniform vec3 mainColor;uniform vec3 lineColor;uniform vec4 gridControl;uniform vec3 gridOffset;varying vec3 vPosition;varying vec3 vNormal;+#ifdef LOGARITHMICDEPTH+#extension GL_EXT_frag_depth : enable+#endif+#include<clipPlaneFragmentDeclaration>+#include<logDepthDeclaration>+#include<fogFragmentDeclaration>+#ifdef OPACITY+varying vec2 vOpacityUV;uniform sampler2D opacitySampler;uniform vec2 vOpacityInfos;+#endif+float getDynamicVisibility(float position) {float majorGridFrequency=gridControl.y;if (floor(position+0.5)==floor(position/majorGridFrequency+0.5)*majorGridFrequency)+{return 1.0;}+return gridControl.z;}+float getAnisotropicAttenuation(float differentialLength) {const float maxNumberOfLines=10.0;return clamp(1.0/(differentialLength+1.0)-1.0/maxNumberOfLines,0.0,1.0);}+float isPointOnLine(float position,float differentialLength) {float fractionPartOfPosition=position-floor(position+0.5); +fractionPartOfPosition/=differentialLength; +#ifdef ANTIALIAS+fractionPartOfPosition=clamp(fractionPartOfPosition,-1.,1.);float result=0.5+0.5*cos(fractionPartOfPosition*PI); +return result;+#else+return abs(fractionPartOfPosition)<SQRT2/4. ? 1. : 0.;+#endif+}+float contributionOnAxis(float position) {float differentialLength=length(vec2(dFdx(position),dFdy(position)));differentialLength*=SQRT2; +float result=isPointOnLine(position,differentialLength);float dynamicVisibility=getDynamicVisibility(position);result*=dynamicVisibility;float anisotropicAttenuation=getAnisotropicAttenuation(differentialLength);result*=anisotropicAttenuation;return result;}+float normalImpactOnAxis(float x) {float normalImpact=clamp(1.0-3.0*abs(x*x*x),0.0,1.0);return normalImpact;}+#define CUSTOM_FRAGMENT_DEFINITIONS+void main(void) {+#define CUSTOM_FRAGMENT_MAIN_BEGIN+#include<clipPlaneFragment>+float gridRatio=gridControl.x;vec3 gridPos=(vPosition+gridOffset.xyz)/gridRatio;float x=contributionOnAxis(gridPos.x);float y=contributionOnAxis(gridPos.y);float z=contributionOnAxis(gridPos.z);vec3 normal=normalize(vNormal);x*=normalImpactOnAxis(normal.x);y*=normalImpactOnAxis(normal.y);z*=normalImpactOnAxis(normal.z);+#ifdef MAX_LINE+float grid=clamp(max(max(x,y),z),0.,1.);+#else+float grid=clamp(x+y+z,0.,1.);+#endif+vec3 color=mix(mainColor,lineColor,grid);+#ifdef FOG+#include<fogFragment>+#endif+float opacity=1.0;+#ifdef TRANSPARENT+opacity=clamp(grid,0.08,gridControl.w*grid);+#endif+#ifdef OPACITY+opacity*=texture2D(opacitySampler,vOpacityUV).a;+#endif+gl_FragColor=vec4(color.rgb,opacity*visibility);+#ifdef TRANSPARENT+#ifdef PREMULTIPLYALPHA+gl_FragColor.rgb*=opacity;+#endif+#else+#endif+#include<logDepthFragment>+#include<imageProcessingCompatibility>+#define CUSTOM_FRAGMENT_MAIN_END+}+`;+o.ShadersStore[i] || (o.ShadersStore[i] = t);+const e = { name: i, shader: t };+export {+  e as gridPixelShader+};
vendor/adom-step/vendor/3d-viewer-dist/chunk-BF7e5jXO.jsadded+1009
@@ -0,0 +1,1009 @@+import { d as r, i as a, V as l } from "./chunk-IERganv1.js";+class h {+  /**+   * Creates a new instance of the PBRMaterialLoadingAdapter.+   * @param material - The PBR material to adapt.+   */+  constructor(e) {+    this._material = e, this._material.enableSpecularAntiAliasing = !0;+  }+  /**+   * Gets the underlying material+   */+  get material() {+    return this._material;+  }+  /**+   * Whether the material should be treated as unlit+   */+  get isUnlit() {+    return this._material.unlit;+  }+  /**+   * Sets whether the material should be treated as unlit+   */+  set isUnlit(e) {+    this._material.unlit = e;+  }+  // ========================================+  // CULLING PROPERTIES+  // ========================================+  /**+   * Sets whether back face culling is enabled.+   * @param value True to enable back face culling+   */+  set backFaceCulling(e) {+    this._material.backFaceCulling = e;+  }+  /**+   * Gets whether back face culling is enabled.+   * @returns True if back face culling is enabled+   */+  get backFaceCulling() {+    return this._material.backFaceCulling;+  }+  /**+   * Sets whether two-sided lighting is enabled.+   * @param value True to enable two-sided lighting+   */+  set twoSidedLighting(e) {+    this._material.twoSidedLighting = e;+  }+  /**+   * Gets whether two-sided lighting is enabled.+   * @returns True if two-sided lighting is enabled+   */+  get twoSidedLighting() {+    return this._material.twoSidedLighting;+  }+  // ========================================+  // ALPHA PROPERTIES+  // ========================================+  /**+   * Sets the alpha cutoff value for alpha testing.+   * @param value The alpha cutoff threshold (0-1)+   */+  set alphaCutOff(e) {+    this._material.alphaCutOff = e;+  }+  /**+   * Gets the alpha cutoff value.+   * @returns The alpha cutoff threshold (0-1)+   */+  get alphaCutOff() {+    return this._material.alphaCutOff;+  }+  /**+   * Sets whether to use alpha from the albedo texture.+   * @param value True to use alpha from albedo texture+   */+  set useAlphaFromBaseColorTexture(e) {+    this._material.useAlphaFromAlbedoTexture = e;+  }+  /**+   * Gets whether alpha is used from the albedo texture.+   * @returns True if using alpha from albedo texture+   */+  get useAlphaFromBaseColorTexture() {+    return this._material.useAlphaFromAlbedoTexture;+  }+  /**+   * Gets whether the transparency is treated as alpha coverage.+   */+  get transparencyAsAlphaCoverage() {+    return this._material.useRadianceOverAlpha || this._material.useSpecularOverAlpha;+  }+  /**+   * Sets/Gets whether the transparency is treated as alpha coverage+   */+  set transparencyAsAlphaCoverage(e) {+    this._material.useRadianceOverAlpha = !e, this._material.useSpecularOverAlpha = !e;+  }+  // ========================================+  // BASE PARAMETERS+  // ========================================+  /**+   * Sets the base color of the material (mapped to PBR albedoColor).+   * @param value The base color as a Color3+   */+  set baseColor(e) {+    this._material.albedoColor = e;+  }+  /**+   * Gets the base color of the material.+   * @returns The base color as a Color3+   */+  get baseColor() {+    return this._material.albedoColor;+  }+  /**+   * Sets the base color texture of the material (mapped to PBR albedoTexture).+   * @param value The base color texture or null+   */+  set baseColorTexture(e) {+    this._material.albedoTexture = e;+  }+  /**+   * Gets the base color texture of the material.+   * @returns The base color texture or null+   */+  get baseColorTexture() {+    return this._material.albedoTexture;+  }+  /**+   * Sets the base diffuse roughness of the material.+   * @param value The diffuse roughness value (0-1)+   */+  set baseDiffuseRoughness(e) {+    this._material.baseDiffuseRoughness = e, e > 0 && (this._material.brdf.baseDiffuseModel = r.MATERIAL_DIFFUSE_MODEL_E_OREN_NAYAR);+  }+  /**+   * Gets the base diffuse roughness of the material.+   * @returns The diffuse roughness value (0-1), defaults to 0 if not set+   */+  get baseDiffuseRoughness() {+    return this._material.baseDiffuseRoughness ?? 0;+  }+  /**+   * Sets the base diffuse roughness texture of the material.+   * @param value The diffuse roughness texture or null+   */+  set baseDiffuseRoughnessTexture(e) {+    this._material.baseDiffuseRoughnessTexture = e;+  }+  /**+   * Gets the base diffuse roughness texture of the material.+   * @returns The diffuse roughness texture or null+   */+  get baseDiffuseRoughnessTexture() {+    return this._material.baseDiffuseRoughnessTexture;+  }+  /**+   * Sets the base metalness value of the material (mapped to PBR metallic).+   * @param value The metalness value (0-1)+   */+  set baseMetalness(e) {+    this._material.metallic = e;+  }+  /**+   * Gets the base metalness value of the material.+   * @returns The metalness value (0-1), defaults to 1 if not set+   */+  get baseMetalness() {+    return this._material.metallic ?? 1;+  }+  /**+   * Sets the base metalness texture of the material (mapped to PBR metallicTexture).+   * @param value The metalness texture or null+   */+  set baseMetalnessTexture(e) {+    this._material.metallicTexture = e;+  }+  /**+   * Gets the base metalness texture of the material.+   * @returns The metalness texture or null+   */+  get baseMetalnessTexture() {+    return this._material.metallicTexture;+  }+  /**+   * Sets whether to use roughness from the metallic texture's green channel.+   * Also disables using roughness from the alpha channel when enabled.+   * @param value True to use green channel for roughness+   */+  set useRoughnessFromMetallicTextureGreen(e) {+    this._material.useRoughnessFromMetallicTextureGreen = e, this._material.useRoughnessFromMetallicTextureAlpha = !e;+  }+  /**+   * Sets whether to use metalness from the metallic texture's blue channel.+   * @param value True to use blue channel for metalness+   */+  set useMetallicFromMetallicTextureBlue(e) {+    this._material.useMetallnessFromMetallicTextureBlue = e;+  }+  // ========================================+  // SPECULAR PARAMETERS+  // ========================================+  /**+   * Configures specular properties and optionally enables OpenPBR BRDF model for edge color support.+   * @param enableEdgeColor Whether to enable OpenPBR BRDF models for edge color support+   */+  enableSpecularEdgeColor(e = !1) {+    e && (this._material.brdf.dielectricSpecularModel = r.MATERIAL_DIELECTRIC_SPECULAR_MODEL_OPENPBR, this._material.brdf.conductorSpecularModel = r.MATERIAL_CONDUCTOR_SPECULAR_MODEL_OPENPBR);+  }+  /**+   * Sets the specular weight (mapped to PBR metallicF0Factor).+   * @param value The specular weight value+   */+  set specularWeight(e) {+    this._material.metallicF0Factor = e;+  }+  /**+   * Gets the specular weight.+   * @returns The specular weight value, defaults to 1 if not set+   */+  get specularWeight() {+    return this._material.metallicF0Factor ?? 1;+  }+  /**+   * Sets the specular weight texture (mapped to PBR metallicReflectanceTexture).+   * Configures the material to use only metalness from this texture when set.+   * @param value The specular weight texture or null+   */+  set specularWeightTexture(e) {+    e ? (this._material.metallicReflectanceTexture = e, this._material.useOnlyMetallicFromMetallicReflectanceTexture = !0) : (this._material.metallicReflectanceTexture = null, this._material.useOnlyMetallicFromMetallicReflectanceTexture = !1);+  }+  /**+   * Gets the specular weight texture.+   * @returns The specular weight texture or null+   */+  get specularWeightTexture() {+    return this._material.metallicReflectanceTexture;+  }+  /**+   * Sets the specular color (mapped to PBR metallicReflectanceColor).+   * @param value The specular color as a Color3+   */+  set specularColor(e) {+    this._material.metallicReflectanceColor = e;+  }+  /**+   * Gets the specular color.+   * @returns The specular color as a Color3+   */+  get specularColor() {+    return this._material.metallicReflectanceColor;+  }+  /**+   * Sets the specular color texture (mapped to PBR reflectanceTexture).+   * @param value The specular color texture or null+   */+  set specularColorTexture(e) {+    this._material.reflectanceTexture = e;+  }+  /**+   * Gets the specular color texture.+   * @returns The specular color texture or null+   */+  get specularColorTexture() {+    return this._material.reflectanceTexture;+  }+  /**+   * Sets the specular roughness (mapped to PBR roughness).+   * @param value The roughness value (0-1)+   */+  set specularRoughness(e) {+    this._material.roughness = e;+  }+  /**+   * Gets the specular roughness.+   * @returns The roughness value (0-1), defaults to 1 if not set+   */+  get specularRoughness() {+    return this._material.roughness ?? 1;+  }+  /**+   * Sets the specular roughness texture.+   * Note: PBR uses the same texture for both metallic and roughness,+   * so this only sets the texture if no base metalness texture exists.+   * @param value The roughness texture or null+   */+  set specularRoughnessTexture(e) {+    this.baseMetalnessTexture || (this._material.metallicTexture = e);+  }+  /**+   * Gets the specular roughness texture.+   * @returns The roughness texture (same as metallic texture for PBR) or null+   */+  get specularRoughnessTexture() {+    return this._material.metallicTexture;+  }+  /**+   * Sets the specular index of refraction (mapped to PBR indexOfRefraction).+   * @param value The IOR value+   */+  set specularIor(e) {+    this._material.indexOfRefraction = e;+  }+  /**+   * Gets the specular index of refraction.+   * @returns The IOR value+   */+  get specularIor() {+    return this._material.indexOfRefraction;+  }+  // ========================================+  // EMISSION PARAMETERS+  // ========================================+  /**+   * Sets the emission color (mapped to PBR emissiveColor).+   * @param value The emission color as a Color3+   */+  set emissionColor(e) {+    this._material.emissiveColor = e;+  }+  /**+   * Gets the emission color.+   * @returns The emission color as a Color3+   */+  get emissionColor() {+    return this._material.emissiveColor;+  }+  /**+   * Sets the emission luminance/intensity (mapped to PBR emissiveIntensity).+   * @param value The emission intensity value+   */+  set emissionLuminance(e) {+    this._material.emissiveIntensity = e;+  }+  /**+   * Gets the emission luminance/intensity.+   * @returns The emission intensity value+   */+  get emissionLuminance() {+    return this._material.emissiveIntensity;+  }+  /**+   * Sets the emission color texture (mapped to PBR emissiveTexture).+   * @param value The emission texture or null+   */+  set emissionColorTexture(e) {+    this._material.emissiveTexture = e;+  }+  /**+   * Gets the emission color texture.+   * @returns The emission texture or null+   */+  get emissionColorTexture() {+    return this._material.emissiveTexture;+  }+  // ========================================+  // AMBIENT OCCLUSION+  // ========================================+  /**+   * Sets the ambient occlusion texture (mapped to PBR ambientTexture).+   * Automatically enables grayscale mode when set.+   * @param value The ambient occlusion texture or null+   */+  set ambientOcclusionTexture(e) {+    this._material.ambientTexture = e, e && (this._material.useAmbientInGrayScale = !0);+  }+  /**+   * Gets the ambient occlusion texture.+   * @returns The ambient occlusion texture or null+   */+  get ambientOcclusionTexture() {+    return this._material.ambientTexture;+  }+  /**+   * Sets the ambient occlusion texture strength.+   * @param value The strength value (typically 0-1)+   */+  set ambientOcclusionTextureStrength(e) {+    this._material.ambientTextureStrength = e;+  }+  /**+   * Gets the ambient occlusion texture strength.+   * @returns The strength value, defaults to 1.0 if not set+   */+  get ambientOcclusionTextureStrength() {+    return this._material.ambientTextureStrength ?? 1;+  }+  // ========================================+  // COAT PARAMETERS+  // ========================================+  /**+   * Configures clear coat for PBR material.+   * Enables clear coat and sets up proper configuration.+   */+  configureCoat() {+    this._material.clearCoat.isEnabled = !0, this._material.clearCoat.useRoughnessFromMainTexture = !1, this._material.clearCoat.remapF0OnInterfaceChange = !1;+  }+  /**+   * Sets the coat weight (mapped to PBR clearCoat.intensity).+   * Automatically enables clear coat.+   * @param value The coat weight value (0-1)+   */+  set coatWeight(e) {+    this._material.clearCoat.isEnabled = !0, this._material.clearCoat.intensity = e;+  }+  /**+   * Gets the coat weight.+   * @returns The coat weight value+   */+  get coatWeight() {+    return this._material.clearCoat.intensity;+  }+  /**+   * Sets the coat weight texture (mapped to PBR clearCoat.texture).+   * Automatically enables clear coat.+   * @param value The coat weight texture or null+   */+  set coatWeightTexture(e) {+    this._material.clearCoat.isEnabled = !0, this._material.clearCoat.texture = e;+  }+  /**+   * Gets the coat weight texture.+   * @returns The coat weight texture or null+   */+  get coatWeightTexture() {+    return this._material.clearCoat.texture;+  }+  /**+   * Sets the coat color (mapped to PBR clearCoat.tintColor).+   * @param value The coat tint color as a Color3+   */+  set coatColor(e) {+    this._material.clearCoat.isTintEnabled = e != a.White(), this._material.clearCoat.tintColor = e;+  }+  /**+   * Sets the coat color texture (mapped to PBR clearCoat.tintTexture).+   * @param value The coat color texture or null+   */+  set coatColorTexture(e) {+    this._material.clearCoat.tintTexture = e;+  }+  /**+   * Sets the coat roughness (mapped to PBR clearCoat.roughness).+   * Automatically enables clear coat.+   * @param value The coat roughness value (0-1)+   */+  set coatRoughness(e) {+    this._material.clearCoat.isEnabled = !0, this._material.clearCoat.roughness = e;+  }+  /**+   * Gets the coat roughness.+   * @returns The coat roughness value, defaults to 0 if not set+   */+  get coatRoughness() {+    return this._material.clearCoat.roughness ?? 0;+  }+  /**+   * Sets the coat roughness texture (mapped to PBR clearCoat.textureRoughness).+   * Automatically enables clear coat and disables using roughness from main texture.+   * @param value The coat roughness texture or null+   */+  set coatRoughnessTexture(e) {+    this._material.clearCoat.isEnabled = !0, this._material.clearCoat.useRoughnessFromMainTexture = !1, this._material.clearCoat.textureRoughness = e;+  }+  /**+   * Gets the coat roughness texture.+   * @returns The coat roughness texture or null+   */+  get coatRoughnessTexture() {+    return this._material.clearCoat.textureRoughness;+  }+  /**+   * Sets the coat index of refraction (IOR).+   */+  set coatIor(e) {+    this._material.clearCoat.indexOfRefraction = e;+  }+  /**+   * Sets the coat darkening value.+   * Note: PBR doesn't have a direct coat darkening property, so this is a no-op.+   * @param value The coat darkening value (ignored for PBR)+   */+  set coatDarkening(e) {+  }+  /**+   * Sets the coat darkening texture+   * @param value The coat darkening texture or null+   */+  set coatDarkeningTexture(e) {+  }+  /**+   * Sets the coat roughness anisotropy.+   * Note: PBR clearCoat doesn't support anisotropy yet, so this is a placeholder.+   * @param value The coat anisotropy intensity value (currently ignored)+   */+  set coatRoughnessAnisotropy(e) {+  }+  /**+   * Gets the coat roughness anisotropy.+   * Note: PBR clearCoat doesn't support anisotropy yet, so this returns 0.+   * @returns Currently returns 0 as clearCoat anisotropy is not yet available+   */+  get coatRoughnessAnisotropy() {+    return 0;+  }+  /**+   * Sets the coat tangent angle for anisotropy.+   * Note: PBR clearCoat doesn't support anisotropy yet, so this is a placeholder.+   * @param value The coat anisotropy rotation angle in radians (currently ignored)+   */+  set geometryCoatTangentAngle(e) {+  }+  /**+   * Sets the coat tangent texture for anisotropy.+   * Note: PBR clearCoat doesn't support anisotropy textures yet, so this is a placeholder.+   * @param value The coat anisotropy texture (currently ignored)+   */+  set geometryCoatTangentTexture(e) {+  }+  /**+   * Gets the coat tangent texture for anisotropy.+   * Note: PBR clearCoat doesn't support anisotropy textures yet, so this returns null.+   * @returns Currently returns null as clearCoat anisotropy is not yet available+   */+  get geometryCoatTangentTexture() {+    return null;+  }+  // ========================================+  // TRANSMISSION LAYER+  // ========================================+  /**+   * Sets the transmission weight (mapped to PBR subSurface.refractionIntensity).+   * Enables refraction when value \> 0.+   * @param value The transmission weight value (0-1)+   */+  set transmissionWeight(e) {+    this._material.subSurface.isRefractionEnabled = e > 0, this._material.subSurface.refractionIntensity = e;+  }+  /**+   * Gets the transmission weight.+   * @returns The transmission weight value+   */+  get transmissionWeight() {+    return this._material.subSurface.isRefractionEnabled ? this._material.subSurface.refractionIntensity : 0;+  }+  /**+   * Sets the transmission weight texture (mapped to PBR subSurface.refractionIntensityTexture).+   * Automatically enables refraction and glTF-style textures.+   * @param value The transmission weight texture or null+   */+  set transmissionWeightTexture(e) {+    this._material.subSurface.isRefractionEnabled = !0, this._material.subSurface.refractionIntensityTexture = e, this._material.subSurface.useGltfStyleTextures = !0;+  }+  /**+   * Sets the attenuation distance for volume.+   * @param value The attenuation distance value+   */+  set transmissionDepth(e) {+    this.transmissionWeight > 0 ? this._material.subSurface.tintColorAtDistance = e : this.subsurfaceWeight > 0 && this._material.subSurface.diffusionDistance.multiplyInPlace(new a(e, e, e));+  }+  /**+   * Gets the attenuation distance for volume.+   * @returns The attenuation distance value+   */+  get transmissionDepth() {+    return this.transmissionWeight > 0 ? this._material.subSurface.tintColorAtDistance : 0;+  }+  /**+   * Sets the attenuation color (mapped to PBR subSurface.tintColor).+   * @param value The attenuation color as a Color3+   */+  set transmissionColor(e) {+    this.transmissionWeight > 0 ? this._material.subSurface.tintColor = e : this.subsurfaceWeight > 0 && this._material.subSurface.diffusionDistance.multiplyInPlace(e);+  }+  /**+   * Sets the attenuation color (mapped to PBR subSurface.tintColor).+   * @returns The attenuation color as a Color3+   */+  get transmissionColor() {+    return this.transmissionWeight > 0 ? this._material.subSurface.tintColor : this.subsurfaceWeight > 0 ? this._material.subSurface.diffusionDistance : new a(0, 0, 0);+  }+  /**+   * Sets the transmission scatter coefficient.+   * @param value The scatter coefficient as a Color3+   */+  set transmissionScatter(e) {+    this._material.subSurface.diffusionDistance = e;+  }+  /**+   * Sets the transmission scatter coefficient.+   * @returns The scatter coefficient as a Color3+   */+  get transmissionScatter() {+    return this._material.subSurface.diffusionDistance;+  }+  set transmissionScatterTexture(e) {+  }+  /**+   * Sets the transmission scattering anisotropy.+   * @param value The anisotropy intensity value (-1 to 1)+   */+  set transmissionScatterAnisotropy(e) {+  }+  /**+   * Sets the transmission dispersion Abbe number.+   * @param value The Abbe number value+   */+  set transmissionDispersionAbbeNumber(e) {+  }+  /**+   * Sets the transmission dispersion scale.+   * @param value The dispersion scale value+   */+  set transmissionDispersionScale(e) {+    e > 0 ? (this._material.subSurface.isDispersionEnabled = !0, this._material.subSurface.dispersion = 20 / e) : (this._material.subSurface.isDispersionEnabled = !1, this._material.subSurface.dispersion = 0);+  }+  /**+   * Gets the refraction background texture+   * @returns The refraction background texture or null+   */+  get refractionBackgroundTexture() {+    return this._material.subSurface.refractionTexture;+  }+  /**+   * Sets the refraction background texture+   * @param value The refraction background texture or null+   */+  set refractionBackgroundTexture(e) {+    this._material.subSurface.refractionTexture = e;+  }+  /**+   * Configures transmission for thin-surface transmission (KHR_materials_transmission).+   * Sets up the material for proper thin-surface transmission behavior.+   */+  configureTransmission() {+    this._material.subSurface.volumeIndexOfRefraction = 1, this._material.subSurface.useAlbedoToTintRefraction = !0, this._material.subSurface.minimumThickness = 0, this._material.subSurface.maximumThickness = 0;+  }+  // ========================================+  // VOLUME PROPERTIES+  // ========================================+  configureVolume() {+  }+  /**+   * Sets whether the material is thin-walled (i.e. non-volumetric) or not.+   */+  set geometryThinWalled(e) {+  }+  /**+   * Gets whether the material is thin-walled (i.e. non-volumetric) or not.+   */+  get geometryThinWalled() {+    return !0;+  }+  /**+   * Sets the thickness texture (mapped to PBR subSurface.thicknessTexture).+   * Automatically enables refraction.+   * @param value The thickness texture or null+   */+  set volumeThicknessTexture(e) {+    this._material.subSurface.thicknessTexture = e, this._material.subSurface.useGltfStyleTextures = !0;+  }+  /**+   * Sets the thickness factor (mapped to PBR subSurface.maximumThickness).+   * Automatically enables refraction.+   * @param value The thickness value+   */+  set volumeThickness(e) {+    this._material.subSurface.minimumThickness = 0, this._material.subSurface.maximumThickness = e, this._material.subSurface.useThicknessAsDepth = !0, e > 0 && (this._material.subSurface.volumeIndexOfRefraction = this._material.indexOfRefraction);+  }+  // ========================================+  // SUBSURFACE PROPERTIES (Subsurface Scattering)+  // ========================================+  /**+   * Configures subsurface properties for PBR material+   */+  configureSubsurface() {+    this._material.subSurface.useGltfStyleTextures = !0, this._material.subSurface.volumeIndexOfRefraction = 1, this._material.subSurface.minimumThickness = 0, this._material.subSurface.maximumThickness = 0, this._material.subSurface.useAlbedoToTintTranslucency = !1;+  }+  /**+   * Sets the subsurface weight+   */+  set subsurfaceWeight(e) {+    this._material.subSurface.isTranslucencyEnabled = e > 0, this._material.subSurface.translucencyIntensity = e;+  }+  /**+   * Gets the subsurface weight+   * @returns The subsurface weight value+   */+  get subsurfaceWeight() {+    return this._material.subSurface.isTranslucencyEnabled ? this._material.subSurface.translucencyIntensity : 0;+  }+  /**+   * Sets the subsurface weight texture+   */+  set subsurfaceWeightTexture(e) {+    this._material.subSurface.translucencyIntensityTexture = e;+  }+  /**+   * Sets the subsurface color.+   * @param value The subsurface tint color as a Color3+   */+  set subsurfaceColor(e) {+    const s = new l(-Math.log(this.transmissionColor.r), -Math.log(this.transmissionColor.g), -Math.log(this.transmissionColor.b));+    s.scaleInPlace(1 / Math.max(this.transmissionDepth, 1e-3));+    const t = s, u = Math.max(t.x, Math.max(t.y, t.z)), i = u > 0 ? 1 / u : 1;+    this._material.subSurface.diffusionDistance = new a(Math.exp(-t.x * i), Math.exp(-t.y * i), Math.exp(-t.z * i));+  }+  /**+   * Sets the subsurface color texture.+   * @param value The subsurface tint texture or null+   */+  set subsurfaceColorTexture(e) {+  }+  /**+   * Sets the surface tint of the material (when using subsurface scattering)+   */+  set diffuseTransmissionTint(e) {+    this._material.subSurface.tintColor = e;+  }+  /**+   * Gets the subsurface constant tint (when using subsurface scattering)+   * @returns The subsurface constant tint as a Color3+   */+  get diffuseTransmissionTint() {+    return this._material.subSurface.tintColor;+  }+  /**+   * Sets the subsurface constant tint texture (when using subsurface scattering)+   * @param value The subsurface constant tint texture or null+   */+  set diffuseTransmissionTintTexture(e) {+    this._material.subSurface.translucencyColorTexture = e;+  }+  /**+   * Gets the subsurface radius (used for subsurface scattering)+   * subsurfaceRadiusScale * subsurfaceRadius gives the mean free path per color channel.+   * @returns The subsurface radius as a Color3+   */+  get subsurfaceRadius() {+    return 1;+  }+  /**+   * Sets the subsurface radius (used for subsurface scattering)+   * subsurfaceRadiusScale * subsurfaceRadius gives the mean free path per color channel.+   * @param value The subsurface radius as a number+   */+  set subsurfaceRadius(e) {+  }+  /**+   * Gets the subsurface radius scale (used for subsurface scattering)+   * subsurfaceRadiusScale * subsurfaceRadius gives the mean free path per color channel.+   * @returns The subsurface radius scale as a Color3+   */+  get subsurfaceRadiusScale() {+    return this._material.subSurface.scatteringDiffusionProfile ?? a.White();+  }+  /**+   * Sets the subsurface radius scale (used for subsurface scattering)+   * subsurfaceRadiusScale * subsurfaceRadius gives the mean free path per color channel.+   * @param value The subsurface radius scale as a Color3+   */+  set subsurfaceRadiusScale(e) {+    this._material.subSurface.scatteringDiffusionProfile = e;+  }+  /**+   * Sets the subsurface scattering anisotropy.+   * Note: PBRMaterial does not have a direct equivalent, so this is a no-op.+   * @param value The anisotropy intensity value (ignored for PBR)+   */+  set subsurfaceScatterAnisotropy(e) {+  }+  /**+   * Does this material have a translucent surface (i.e. either transmission or subsurface)?+   * @returns True if the material is translucent, false otherwise+   */+  isTranslucent() {+    return this.transmissionWeight > 0 || this.subsurfaceWeight > 0;+  }+  // ========================================+  // FUZZ LAYER (Sheen)+  // ========================================+  /**+   * Configures sheen for PBR material.+   * Enables sheen and sets up proper configuration.+   */+  configureFuzz() {+    this._material.sheen.isEnabled = !0, this._material.sheen.useRoughnessFromMainTexture = !1, this._material.sheen.albedoScaling = !0;+  }+  /**+   * Sets the sheen weight (mapped to PBR sheen.intensity).+   * Automatically enables sheen.+   * @param value The sheen weight value+   */+  set fuzzWeight(e) {+    this._material.sheen.isEnabled = !0, this._material.sheen.intensity = e;+  }+  /**+   * Sets the fuzz weight texture.+   * @param value The fuzz weight texture or null+   */+  set fuzzWeightTexture(e) {+    this._material.sheen.texture || (this._material.sheen.texture = e);+  }+  /**+   * Sets the sheen color (mapped to PBR sheen.color).+   * Automatically enables sheen.+   * @param value The sheen color as a Color3+   */+  set fuzzColor(e) {+    this._material.sheen.isEnabled = !0, this._material.sheen.color = e;+  }+  /**+   * Sets the sheen color texture (mapped to PBR sheen.texture).+   * Automatically enables sheen.+   * @param value The sheen color texture or null+   */+  set fuzzColorTexture(e) {+    this._material.sheen.texture = e;+  }+  /**+   * Sets the sheen roughness (mapped to PBR sheen.roughness).+   * Automatically enables sheen.+   * @param value The sheen roughness value (0-1)+   */+  set fuzzRoughness(e) {+    this._material.sheen.isEnabled = !0, this._material.sheen.roughness = e;+  }+  /**+   * Sets the sheen roughness texture (mapped to PBR sheen.textureRoughness).+   * Automatically enables sheen.+   * @param value The sheen roughness texture or null+   */+  set fuzzRoughnessTexture(e) {+    this._material.sheen.isEnabled = !0, this._material.sheen.textureRoughness = e;+  }+  // ========================================+  // ANISOTROPY+  // ========================================+  /**+   * Sets the specular roughness anisotropy (mapped to PBR anisotropy.intensity).+   * Automatically enables anisotropy.+   * @param value The anisotropy intensity value+   */+  set specularRoughnessAnisotropy(e) {+    this._material.anisotropy.isEnabled = !0, this._material.anisotropy.intensity = e;+  }+  /**+   * Gets the specular roughness anisotropy.+   * @returns The anisotropy intensity value+   */+  get specularRoughnessAnisotropy() {+    return this._material.anisotropy.intensity;+  }+  /**+   * Sets the anisotropy rotation (mapped to PBR anisotropy.angle).+   * Automatically enables anisotropy.+   * @param value The anisotropy rotation angle in radians+   */+  set geometryTangentAngle(e) {+    this._material.anisotropy.isEnabled = !0, this._material.anisotropy.angle = e;+  }+  /**+   * Sets the geometry tangent texture (mapped to PBR anisotropy.texture).+   * Automatically enables anisotropy.+   * @param value The anisotropy texture or null+   */+  set geometryTangentTexture(e) {+    this._material.anisotropy.isEnabled = !0, this._material.anisotropy.texture = e;+  }+  /**+   * Gets the geometry tangent texture.+   * @returns The anisotropy texture or null+   */+  get geometryTangentTexture() {+    return this._material.anisotropy.texture;+  }+  /**+   * Configures glTF-style anisotropy for the material.+   * Note: PBR materials don't need this configuration, so this is a no-op.+   * @param useGltfStyle Whether to use glTF-style anisotropy (ignored for PBR)+   */+  configureGltfStyleAnisotropy(e = !0) {+  }+  // ========================================+  // THIN FILM IRIDESCENCE+  // ========================================+  /**+   * Sets the iridescence weight (mapped to PBR iridescence.intensity).+   * Automatically enables iridescence.+   * @param value The iridescence intensity value+   */+  set thinFilmWeight(e) {+    this._material.iridescence.isEnabled = e > 0, this._material.iridescence.intensity = e;+  }+  /**+   * Sets the iridescence IOR (mapped to PBR iridescence.indexOfRefraction).+   * @param value The iridescence IOR value+   */+  set thinFilmIor(e) {+    this._material.iridescence.indexOfRefraction = e;+  }+  /**+   * Sets the iridescence thickness minimum (mapped to PBR iridescence.minimumThickness).+   * @param value The minimum thickness value in nanometers+   */+  set thinFilmThicknessMinimum(e) {+    this._material.iridescence.minimumThickness = e;+  }+  /**+   * Sets the iridescence thickness maximum (mapped to PBR iridescence.maximumThickness).+   * @param value The maximum thickness value in nanometers+   */+  set thinFilmThicknessMaximum(e) {+    this._material.iridescence.maximumThickness = e;+  }+  /**+   * Sets the thin film weight texture (mapped to PBR iridescence.texture).+   * @param value The thin film weight texture or null+   */+  set thinFilmWeightTexture(e) {+    this._material.iridescence.texture = e;+  }+  /**+   * Sets the iridescence thickness texture (mapped to PBR iridescence.thicknessTexture).+   * @param value The iridescence thickness texture or null+   */+  set thinFilmThicknessTexture(e) {+    this._material.iridescence.thicknessTexture = e;+  }+  // ========================================+  // UNLIT MATERIALS+  // ========================================+  /**+   * Sets whether the material is unlit.+   * @param value True to make the material unlit+   */+  set unlit(e) {+    this._material.unlit = e;+  }+  // ========================================+  // GEOMETRY PARAMETERS+  // ========================================+  /**+   * Sets the geometry opacity (mapped to PBR alpha).+   * @param value The opacity value (0-1)+   */+  set geometryOpacity(e) {+    this._material.alpha = e;+  }+  /**+   * Gets the geometry opacity.+   * @returns The opacity value (0-1)+   */+  get geometryOpacity() {+    return this._material.alpha;+  }+  /**+   * Sets the geometry normal texture (mapped to PBR bumpTexture).+   * Also forces irradiance computation in fragment shader for better lighting.+   * @param value The normal texture or null+   */+  set geometryNormalTexture(e) {+    this._material.bumpTexture = e, this._material.forceIrradianceInFragment = !0;+  }+  /**+   * Gets the geometry normal texture.+   * @returns The normal texture or null+   */+  get geometryNormalTexture() {+    return this._material.bumpTexture;+  }+  /**+   * Sets the normal map inversions for the material.+   * @param invertX Whether to invert the normal map on the X axis+   * @param invertY Whether to invert the normal map on the Y axis+   */+  setNormalMapInversions(e, s) {+    this._material.invertNormalMapX = e, this._material.invertNormalMapY = s;+  }+  /**+   * Sets the geometry coat normal texture (mapped to PBR clearCoat.bumpTexture).+   * Automatically enables clear coat.+   * @param value The coat normal texture or null+   */+  set geometryCoatNormalTexture(e) {+    this._material.clearCoat.isEnabled = !0, this._material.clearCoat.bumpTexture = e;+  }+  /**+   * Gets the geometry coat normal texture.+   * @returns The coat normal texture or null+   */+  get geometryCoatNormalTexture() {+    return this._material.clearCoat.bumpTexture;+  }+  /**+   * Sets the geometry coat normal texture scale.+   * @param value The scale value for the coat normal texture+   */+  set geometryCoatNormalTextureScale(e) {+    this._material.clearCoat.bumpTexture && (this._material.clearCoat.bumpTexture.level = e);+  }+}+export {+  h as PBRMaterialLoadingAdapter+};
vendor/adom-step/vendor/3d-viewer-dist/chunk-BJlKwOsV.jsadded+70
@@ -0,0 +1,70 @@+import { bW as i } from "./chunk-IERganv1.js";+const e = "normalPixelShader", n = `precision highp float;uniform vec4 vEyePosition;uniform vec4 vDiffuseColor;varying vec3 vPositionW;+#ifdef NORMAL+varying vec3 vNormalW;+#endif+#ifdef LIGHTING+#include<helperFunctions>+#include<__decl__lightFragment>[0]+#include<__decl__lightFragment>[1]+#include<__decl__lightFragment>[2]+#include<__decl__lightFragment>[3]+#include<lightsFragmentFunctions>+#include<shadowsFragmentFunctions>+#endif+#ifdef DIFFUSE+varying vec2 vDiffuseUV;uniform sampler2D diffuseSampler;uniform vec2 vDiffuseInfos;+#endif+#include<clipPlaneFragmentDeclaration>+#ifdef LOGARITHMICDEPTH+#extension GL_EXT_frag_depth : enable+#endif+#include<logDepthDeclaration>+#include<fogFragmentDeclaration>+#if defined(CLUSTLIGHT_BATCH) && CLUSTLIGHT_BATCH>0+varying float vViewDepth;+#endif+#define CUSTOM_FRAGMENT_DEFINITIONS+void main(void) {+#define CUSTOM_FRAGMENT_MAIN_BEGIN+#include<clipPlaneFragment>+vec3 viewDirectionW=normalize(vEyePosition.xyz-vPositionW);vec4 baseColor=vec4(1.,1.,1.,1.);vec3 diffuseColor=vDiffuseColor.rgb;float alpha=vDiffuseColor.a;+#ifdef DIFFUSE+baseColor=texture2D(diffuseSampler,vDiffuseUV);+#ifdef ALPHATEST+if (baseColor.a<0.4)+discard;+#endif+#include<depthPrePass>+baseColor.rgb*=vDiffuseInfos.y;+#endif+#ifdef NORMAL+baseColor=mix(baseColor,vec4(vNormalW,1.0),0.5);+#endif+#ifdef NORMAL+vec3 normalW=normalize(vNormalW);+#else+vec3 normalW=vec3(1.0,1.0,1.0);+#endif+#ifdef LIGHTING+vec3 diffuseBase=vec3(0.,0.,0.);lightingInfo info;float shadow=1.;float glossiness=0.;float aggShadow=0.;float numLights=0.;+#include<lightFragment>[0]+#include<lightFragment>[1]+#include<lightFragment>[2]+#include<lightFragment>[3]+vec3 finalDiffuse=clamp(diffuseBase*diffuseColor,0.0,1.0)*baseColor.rgb;+#else+vec3 finalDiffuse= baseColor.rgb;+#endif+vec4 color=vec4(finalDiffuse,alpha);+#include<logDepthFragment>+#include<fogFragment>+gl_FragColor=color;+#include<imageProcessingCompatibility>+#define CUSTOM_FRAGMENT_MAIN_END+}`;+i.ShadersStore[e] || (i.ShadersStore[e] = n);+const l = { name: e, shader: n };+export {+  l as normalPixelShader+};
vendor/adom-step/vendor/3d-viewer-dist/chunk-BKpenvUR.jsadded+69
@@ -0,0 +1,69 @@+import { bW as o } from "./chunk-IERganv1.js";+const e = "skyPixelShader", t = `precision highp float;varying vec3 vPositionW;+#ifdef VERTEXCOLOR+varying vec4 vColor;+#endif+#include<clipPlaneFragmentDeclaration>+uniform vec3 cameraPosition;uniform vec3 cameraOffset;uniform vec3 up;uniform float luminance;uniform float turbidity;uniform float rayleigh;uniform float mieCoefficient;uniform float mieDirectionalG;uniform vec3 sunPosition;+#ifdef LOGARITHMICDEPTH+#extension GL_EXT_frag_depth : enable+#endif+#include<logDepthDeclaration>+#include<fogFragmentDeclaration>+const float e=2.71828182845904523536028747135266249775724709369995957;const float pi=3.141592653589793238462643383279502884197169;const float n=1.0003;const float N=2.545E25;const float pn=0.035;const vec3 lambda=vec3(680E-9,550E-9,450E-9);const vec3 K=vec3(0.686,0.678,0.666);const float v=4.0;const float rayleighZenithLength=8.4E3;const float mieZenithLength=1.25E3;const float EE=1000.0;const float sunAngularDiameterCos=0.999956676946448443553574619906976478926848692873900859324;const float cutoffAngle=pi/1.95;const float steepness=1.5;vec3 totalRayleigh(vec3 lambda)+{return (8.0*pow(pi,3.0)*pow(pow(n,2.0)-1.0,2.0)*(6.0+3.0*pn))/(3.0*N*pow(lambda,vec3(4.0))*(6.0-7.0*pn));}+vec3 simplifiedRayleigh()+{return 0.0005/vec3(94,40,18);}+float rayleighPhase(float cosTheta)+{ +return (3.0/(16.0*pi))*(1.0+pow(cosTheta,2.0));}+vec3 totalMie(vec3 lambda,vec3 K,float T)+{float c=(0.2*T )*10E-18;return 0.434*c*pi*pow((2.0*pi)/lambda,vec3(v-2.0))*K;}+float hgPhase(float cosTheta,float g)+{return (1.0/(4.0*pi))*((1.0-pow(g,2.0))/pow(1.0-2.0*g*cosTheta+pow(g,2.0),1.5));}+float sunIntensity(float zenithAngleCos)+{return EE*max(0.0,1.0-exp((-(cutoffAngle-acos(zenithAngleCos))/steepness)));}+float A=0.15;float B=0.50;float C=0.10;float D=0.20;float EEE=0.02;float F=0.30;float W=1000.0;vec3 Uncharted2Tonemap(vec3 x)+{return ((x*(A*x+C*B)+D*EEE)/(x*(A*x+B)+D*F))-EEE/F;}+#if DITHER+#include<helperFunctions>+#endif+#define CUSTOM_FRAGMENT_DEFINITIONS+void main(void) {+#define CUSTOM_FRAGMENT_MAIN_BEGIN+#include<clipPlaneFragment>+/**+*--------------------------------------------------------------------------------------------------+* Sky Color+*--------------------------------------------------------------------------------------------------+*/+float sunfade=1.0-clamp(1.0-exp((sunPosition.y/450000.0)),0.0,1.0);float rayleighCoefficient=rayleigh-(1.0*(1.0-sunfade));vec3 sunDirection=normalize(sunPosition);float sunE=sunIntensity(dot(sunDirection,up));vec3 betaR=simplifiedRayleigh()*rayleighCoefficient;vec3 betaM=totalMie(lambda,K,turbidity)*mieCoefficient;float zenithAngle=acos(max(0.0,dot(up,normalize(vPositionW-cameraPosition+cameraOffset))));float sR=rayleighZenithLength/(cos(zenithAngle)+0.15*pow(93.885-((zenithAngle*180.0)/pi),-1.253));float sM=mieZenithLength/(cos(zenithAngle)+0.15*pow(93.885-((zenithAngle*180.0)/pi),-1.253));vec3 Fex=exp(-(betaR*sR+betaM*sM));float cosTheta=dot(normalize(vPositionW-cameraPosition),sunDirection);float rPhase=rayleighPhase(cosTheta*0.5+0.5);vec3 betaRTheta=betaR*rPhase;float mPhase=hgPhase(cosTheta,mieDirectionalG);vec3 betaMTheta=betaM*mPhase;vec3 Lin=pow(sunE*((betaRTheta+betaMTheta)/(betaR+betaM))*(1.0-Fex),vec3(1.5));Lin*=mix(vec3(1.0),pow(sunE*((betaRTheta+betaMTheta)/(betaR+betaM))*Fex,vec3(1.0/2.0)),clamp(pow(1.0-dot(up,sunDirection),5.0),0.0,1.0));vec3 direction=normalize(vPositionW-cameraPosition);float theta=acos(direction.y);float phi=atan(direction.z,direction.x);vec2 uv=vec2(phi,theta)/vec2(2.0*pi,pi)+vec2(0.5,0.0);vec3 L0=vec3(0.1)*Fex;float sundisk=smoothstep(sunAngularDiameterCos,sunAngularDiameterCos+0.00002,cosTheta);L0+=(sunE*19000.0*Fex)*sundisk;vec3 whiteScale=1.0/Uncharted2Tonemap(vec3(W));vec3 texColor=(Lin+L0);texColor*=0.04 ;texColor+=vec3(0.0,0.001,0.0025)*0.3;float g_fMaxLuminance=1.0;float fLumScaled=0.1/luminance; +float fLumCompressed=(fLumScaled*(1.0+(fLumScaled/(g_fMaxLuminance*g_fMaxLuminance))))/(1.0+fLumScaled); +float ExposureBias=fLumCompressed;vec3 curr=Uncharted2Tonemap((log2(2.0/pow(luminance,4.0)))*texColor);vec3 retColor=curr*whiteScale;/**+*--------------------------------------------------------------------------------------------------+* Sky Color+*--------------------------------------------------------------------------------------------------+*/+float alpha=1.0;+#ifdef VERTEXCOLOR+retColor.rgb*=vColor.rgb;+#endif+#if defined(VERTEXALPHA) || defined(INSTANCESCOLOR) && defined(INSTANCES)+alpha*=vColor.a;+#endif+#if DITHER+retColor.rgb+=dither(gl_FragCoord.xy,0.5);+#endif+vec4 color=clamp(vec4(retColor.rgb,alpha),0.0,1.0);+#include<logDepthFragment>+#include<fogFragment>+gl_FragColor=color;+#include<imageProcessingCompatibility>+#define CUSTOM_FRAGMENT_MAIN_END+}+`;+o.ShadersStore[e] || (o.ShadersStore[e] = t);+const i = { name: e, shader: t };+export {+  i as skyPixelShader+};
vendor/adom-step/vendor/3d-viewer-dist/chunk-BQ8Dy87L.jsadded+13
@@ -0,0 +1,13 @@+import { bW as e } from "./chunk-IERganv1.js";+const o = "msdfVertexShader", r = `#define BILLBOARD 1+#define BILLBOARDSCREENPROJECTED 2+attribute vec2 offsets;attribute vec4 world0;attribute vec4 world1;attribute vec4 world2;attribute vec4 world3;attribute vec4 uvs;uniform mat4 transform;uniform mat4 parentWorld;uniform mat4 view;uniform mat4 projection;uniform vec3 center;uniform int mode;varying vec2 atlasUV;void main(void) {mat4 world=mat4(world0,world1,world2,world3);vec4 worldPos=transform*(world*vec4(offsets.xy-vec2(0.5,0.5),0.,1.0));if (mode>=BILLBOARD) {vec3 viewPos=(view*parentWorld*vec4(0.,0.,0.,1.0)).xyz; +if (mode==BILLBOARDSCREENPROJECTED) {viewPos.x/=viewPos.z;viewPos.y/=viewPos.z;viewPos.z=1.0;}+gl_Position=projection*vec4(viewPos+worldPos.xyz,1.0); } else {vec3 viewPos=(view*parentWorld*worldPos).xyz; +gl_Position=projection*vec4(viewPos,1.0); }+atlasUV=vec2(uvs.x+offsets.x*uvs.z,uvs.y+(1.0-offsets.y)*uvs.w);}`;+e.ShadersStore[o] || (e.ShadersStore[o] = r);+const i = { shader: r };+export {+  i as msdfVertexShader+};
vendor/adom-step/vendor/3d-viewer-dist/chunk-B_Vl0aRN.jsadded+18
@@ -0,0 +1,18 @@+import { bW as o } from "./chunk-IERganv1.js";+const e = "gaussianSplattingVoxelPixelShader", t = `var voxel_storage: texture_storage_3d<r8unorm,write>;varying vNormalizedPosition: vec3f;varying vNormalizedCenterPosition: vec3f;varying vAlpha: f32;varying vPatchPosition: vec2f;fn gsVoxelPrngCanonical1d(co: f32)->f32 {return fract(sin(co*91.3458)*47453.5453);}+fn gsVoxelPrngCanonical2d(co: vec2f)->f32 {return fract(sin(dot(co,vec2f(12.9898,78.233)))*43758.5453);}+fn gsVoxelPrngCanonical3d(co: vec3f)->f32 {return gsVoxelPrngCanonical2d(vec2f(co.x,co.y)+gsVoxelPrngCanonical1d(co.z));}+@fragment+fn main(input: FragmentInputs)->FragmentOutputs {let normPos: vec3f=input.vNormalizedPosition;let stepSize: f32=1.0/f32(textureDimensions(voxel_storage).x);let diff: vec3f=abs(input.vNormalizedCenterPosition-normPos);let distToCenter: f32=max(max(diff.x,diff.y),diff.z);let gaussian: f32=exp(-dot(input.vPatchPosition,input.vPatchPosition));let shadowingOpacity: f32=clamp(+select(gaussian,1.0,distToCenter<stepSize)*input.vAlpha,+0.0,1.0+);if (shadowingOpacity<1.0 && shadowingOpacity<gsVoxelPrngCanonical3d(normPos/stepSize)) {discard;}+let size: vec3f=vec3f(textureDimensions(voxel_storage));textureStore(voxel_storage,+vec3<i32>(i32(normPos.x*size.x),i32(normPos.y*size.y),i32(normPos.z*size.z)),+vec4f(1.0,1.0,1.0,1.0));fragmentOutputs.color=vec4f(0.0,0.0,0.0,0.0);}+`;+o.ShadersStoreWGSL[e] || (o.ShadersStoreWGSL[e] = t);+const i = { name: e, shader: t };+export {+  i as gaussianSplattingVoxelPixelShaderWGSL+};
vendor/adom-step/vendor/3d-viewer-dist/chunk-BiVWof0k.jsadded+41
@@ -0,0 +1,41 @@+import { bW as i } from "./chunk-IERganv1.js";+const e = "selectionPixelShader", f = `#ifdef INSTANCES+flat varying vSelectionId: f32;+#else+uniform selectionId: f32;+#endif+#ifdef STORE_CAMERASPACE_Z+varying vViewPosZ: f32;+#else+varying vDepthMetric: f32;+#endif+#ifdef ALPHATEST+varying vUV: vec2f;var diffuseSamplerSampler: sampler;var diffuseSampler: texture_2d<f32>;+#endif+#include<clipPlaneFragmentDeclaration>+#define CUSTOM_FRAGMENT_DEFINITIONS+@fragment+fn main(input: FragmentInputs)->FragmentOutputs {+#define CUSTOM_FRAGMENT_MAIN_BEGIN+#include<clipPlaneFragment>+#ifdef ALPHATEST+if (textureSample(diffuseSampler,diffuseSamplerSampler,fragmentInputs.vUV).a<0.4) {discard;}+#endif+#ifdef INSTANCES+var id: f32=fragmentInputs.vSelectionId;+#else+var id: f32=uniforms.selectionId;+#endif+#ifdef STORE_CAMERASPACE_Z+fragmentOutputs.color=vec4(id,fragmentInputs.vViewPosZ,0.0,1.0);+#else+fragmentOutputs.color=vec4(id,fragmentInputs.vDepthMetric,0.0,1.0);+#endif+#define CUSTOM_FRAGMENT_MAIN_END+}+`;+i.ShadersStoreWGSL[e] || (i.ShadersStoreWGSL[e] = f);+const r = { name: e, shader: f };+export {+  r as selectionPixelShaderWGSL+};
vendor/adom-step/vendor/3d-viewer-dist/chunk-Bj6IQT5Z.jsadded+79
@@ -0,0 +1,79 @@+import { bW as i } from "./chunk-IERganv1.js";+const e = "selectionVertexShader", t = `attribute vec3 position;+#ifdef INSTANCES+attribute float instanceSelectionId;+#endif+#include<bonesDeclaration>+#include<bakedVertexAnimationDeclaration>+#include<morphTargetsVertexGlobalDeclaration>+#include<morphTargetsVertexDeclaration>[0..maxSimultaneousMorphTargets]+#include<clipPlaneVertexDeclaration>+#include<instancesDeclaration>+uniform mat4 viewProjection;+#ifdef STORE_CAMERASPACE_Z+uniform mat4 view;+#else+uniform vec2 depthValues;+#endif+#ifdef INSTANCES+flat varying float vSelectionId;+#endif+#ifdef STORE_CAMERASPACE_Z+varying float vViewPosZ;+#else+varying float vDepthMetric;+#endif+#ifdef ALPHATEST+varying vec2 vUV;uniform mat4 diffuseMatrix;+#ifdef UV1+attribute vec2 uv;+#endif+#ifdef UV2+attribute vec2 uv2;+#endif+#endif+#define CUSTOM_VERTEX_DEFINITIONS+void main(void) {+#define CUSTOM_VERTEX_MAIN_BEGIN+vec3 positionUpdated=position;+#ifdef UV1+vec2 uvUpdated=uv;+#endif+#ifdef UV2+vec2 uv2Updated=uv2;+#endif+#include<morphTargetsVertexGlobal>+#include<morphTargetsVertex>[0..maxSimultaneousMorphTargets]+#include<instancesVertex>+#include<bonesVertex>+#include<bakedVertexAnimation>+vec4 worldPos=finalWorld*vec4(positionUpdated,1.0);gl_Position=viewProjection*worldPos;+#ifdef ALPHATEST+#ifdef UV1+vUV=vec2(diffuseMatrix*vec4(uvUpdated,1.0,0.0));+#endif+#ifdef UV2+vUV=vec2(diffuseMatrix*vec4(uv2Updated,1.0,0.0));+#endif+#endif+#ifdef STORE_CAMERASPACE_Z+vViewPosZ=(view*worldPos).z;+#else+#ifdef USE_REVERSE_DEPTHBUFFER+vDepthMetric=((-gl_Position.z+depthValues.x)/(depthValues.y));+#else+vDepthMetric=((gl_Position.z+depthValues.x)/(depthValues.y));+#endif+#endif+#ifdef INSTANCES+vSelectionId=instanceSelectionId;+#endif+#include<clipPlaneVertex>+#define CUSTOM_VERTEX_MAIN_END+}+`;+i.ShadersStore[e] || (i.ShadersStore[e] = t);+const n = { name: e, shader: t };+export {+  n as selectionVertexShader+};
vendor/adom-step/vendor/3d-viewer-dist/chunk-BloWGZPN.jsadded+80
@@ -0,0 +1,80 @@+import { bW as t } from "./chunk-IERganv1.js";+const e = "selectionVertexShader", i = `attribute position: vec3f;+#ifdef INSTANCES+attribute instanceSelectionId: f32;+#endif+#include<bonesDeclaration>+#include<bakedVertexAnimationDeclaration>+#include<morphTargetsVertexGlobalDeclaration>+#include<morphTargetsVertexDeclaration>[0..maxSimultaneousMorphTargets]+#include<clipPlaneVertexDeclaration>+#include<instancesDeclaration>+uniform viewProjection: mat4x4f;+#ifdef STORE_CAMERASPACE_Z+uniform view: mat4x4f;+#else+uniform depthValues: vec2f;+#endif+#ifdef INSTANCES+flat varying vSelectionId: f32;+#endif+#ifdef STORE_CAMERASPACE_Z+varying vViewPosZ: f32;+#else+varying vDepthMetric: f32;+#endif+#ifdef ALPHATEST+varying vUV: vec2f;uniform diffuseMatrix: mat4x4f; +#ifdef UV1+attribute uv: vec2f;+#endif+#ifdef UV2+attribute uv2: vec2f;+#endif+#endif+#define CUSTOM_VERTEX_DEFINITIONS+@vertex+fn main(input: VertexInputs)->FragmentInputs {+#define CUSTOM_VERTEX_MAIN_BEGIN+var positionUpdated: vec3f=vertexInputs.position;+#ifdef UV1+var uvUpdated: vec2f=vertexInputs.uv;+#endif+#ifdef UV2+var uv2Updated: vec2f=vertexInputs.uv2;+#endif+#include<morphTargetsVertexGlobal>+#include<morphTargetsVertex>[0..maxSimultaneousMorphTargets]+#include<instancesVertex>+#include<bonesVertex>+#include<bakedVertexAnimation>+var worldPos: vec4f=finalWorld*vec4f(positionUpdated,1.0);vertexOutputs.position=uniforms.viewProjection*worldPos;+#ifdef ALPHATEST+#ifdef UV1+vertexOutputs.vUV=(uniforms.diffuseMatrix*vec4f(uvUpdated,1.0,0.0)).xy;+#endif+#ifdef UV2+vertexOutputs.vUV=(uniforms.diffuseMatrix*vec4f(uv2Updated,1.0,0.0)).xy;+#endif+#endif+#ifdef STORE_CAMERASPACE_Z+vertexOutputs.vViewPosZ=(uniforms.view*worldPos).z;+#else+#ifdef USE_REVERSE_DEPTHBUFFER+vertexOutputs.vDepthMetric=((-vertexOutputs.position.z+uniforms.depthValues.x)/(uniforms.depthValues.y));+#else+vertexOutputs.vDepthMetric=((vertexOutputs.position.z+uniforms.depthValues.x)/(uniforms.depthValues.y));+#endif+#endif+#ifdef INSTANCES+vertexOutputs.vSelectionId=vertexInputs.instanceSelectionId;+#endif+#include<clipPlaneVertex>+#define CUSTOM_VERTEX_MAIN_END+}+`;+t.ShadersStoreWGSL[e] || (t.ShadersStoreWGSL[e] = i);+const r = { name: e, shader: i };+export {+  r as selectionVertexShaderWGSL+};
vendor/adom-step/vendor/3d-viewer-dist/chunk-BrLl4i-D.jsadded+3426
@@ -0,0 +1,3426 @@+import { j as D, a as k, r as g, u as te, o as z, P as E, b as be, c as C, m as I, d as Ge, _ as m, e as b, f as H, g as A, h as he, i as me, k as V, l as Ee, n as ke, p as G, q as U, s as We, t as Ve, v as Me, w as Oe, E as Xe, x as Ue, y as $e, S as Je, z as Ke, A as u, D as Ye, B as ce, T as ye, C as X, F as Qe, G as Ze, H as er, I as rr, J as or, K as ar, L as tr, M as ir, N as nr, O as lr, Q as fr, R as cr, U as sr, V as dr, W as ur, X as xe, Y as vr, Z as gr, $ as pr, a0 as br, a1 as hr, a2 as mr, a3 as kr, a4 as yr, a5 as xr, a6 as Br, a7 as wr, a8 as P } from "./chunk-CODtpsMq.js";+import { a3 as zr } from "./chunk-IERganv1.js";+function qr(e, o) {+  const r = {};+  for (const a in e)+    o.indexOf(a) === -1 && e.hasOwnProperty(a) && (r[a] = e[a]);+  return r;+}+const jr = (e) => /* @__PURE__ */ D(e.root, {+  children: [+    e.initials && /* @__PURE__ */ k(e.initials, {}),+    e.icon && /* @__PURE__ */ k(e.icon, {}),+    e.image && /* @__PURE__ */ k(e.image, {}),+    e.badge && /* @__PURE__ */ k(e.badge, {}),+    e.activeAriaLabelElement+  ]+}), Sr = /[\(\[\{][^\)\]\}]*[\)\]\}]/g, Cr = /[\0-\u001F\!-/:-@\[-`\{-\u00BF\u0250-\u036F\uE000-\uFFFF]/g, Tr = /^\d+[\d\s]*(:?ext|x|)\s*\d+$/i, Pr = /\s+/g, Nr = /[\u0600-\u06FF\u0750-\u077F\u08A0-\u08FF\u1100-\u11FF\u3130-\u318F\uA960-\uA97F\uAC00-\uD7AF\uD7B0-\uD7FF\u3040-\u309F\u30A0-\u30FF\u3400-\u4DBF\u4E00-\u9FFF\uF900-\uFAFF]/;+function O(e) {+  if (!e)+    return "";+  const o = e.codePointAt(0);+  return o === void 0 ? "" : String.fromCodePoint(o);+}+function Ar(e, o, r) {+  let a = "";+  const t = e.split(" ");+  if (t.length !== 0 && (a += O(t[0]).toUpperCase()), r || (t.length === 2 ? a += O(t[1]).toUpperCase() : t.length === 3 && (a += O(t[2]).toUpperCase())), o && [+    ...a+  ].length > 1) {+    const n = [+      ...a+    ];+    return n[1] + n[0];+  }+  return a;+}+function _r(e) {+  return e = e.replace(Sr, ""), e = e.replace(Cr, ""), e = e.replace(Pr, " "), e = e.trim(), e;+}+function Be(e, o, r) {+  if (!e)+    return "";+  e = _r(e);+  const a = O(e);+  return Nr.test(a) || !r?.allowPhoneInitials && Tr.test(e) ? "" : Ar(e, o, r?.firstInitialOnly);+}+const we = g.createContext(void 0), Dr = {};+we.Provider;+const Fr = () => {+  var e;+  return (e = g.useContext(we)) !== null && e !== void 0 ? e : Dr;+}, Hr = {+  active: "active",+  inactive: "inactive"+}, Rr = (e, o) => {+  const { dir: r } = te(), { shape: a, size: t } = Fr(), { size: n = t ?? 32, shape: c = a ?? "circular", active: l = "unset", activeAppearance: f = "ring", idForColor: i, color: s = "neutral", ...d } = e, v = Ir(d, o);+  var p;+  const h = s === "colorful" ? se[Gr((p = i ?? e.name) !== null && p !== void 0 ? p : "") % se.length] : s;+  if (v.initials) {+    var j;+    v.initials = z(e.initials, {+      renderByDefault: !0,+      defaultProps: {+        children: Be(e.name, r === "rtl", {+          firstInitialOnly: n <= 16+        }),+        id: (j = v.initials) === null || j === void 0 ? void 0 : j.id+      },+      elementType: "span"+    });+  }+  v.icon && !v.icon.hasOwnProperty("children") && (v.icon.children = /* @__PURE__ */ g.createElement(Ge, null));+  const y = z(e.badge, {+    defaultProps: {+      size: Lr(n),+      id: v.root.id + "__badge"+    },+    elementType: E+  });+  let B = v.activeAriaLabelElement;+  const q = e["aria-label"] !== void 0, x = e["aria-labelledby"] !== void 0;+  if (!q && !x && (e.name ? y && (v.root["aria-labelledby"] = v.root.id + " " + y.id) : v.initials && (v.root["aria-labelledby"] = v.initials.id + (y ? " " + y.id : ""), delete v.root["aria-label"]), l === "active" || l === "inactive")) {+    const T = Hr[l];+    if (v.root["aria-labelledby"]) {+      const _ = v.root.id + "__active";+      v.root["aria-labelledby"] += " " + _, B = /* @__PURE__ */ g.createElement("span", {+        hidden: !0,+        id: _+      }, T);+    } else v.root["aria-label"] && (v.root["aria-label"] += " " + T);+  }+  return {+    ...v,+    size: n,+    shape: c,+    active: l,+    activeAppearance: f,+    activeAriaLabelElement: B,+    color: h,+    badge: y,+    // eslint-disable-next-line @typescript-eslint/no-deprecated+    components: {+      ...v.components,+      badge: E+    }+  };+}, Ir = (e, o) => {+  const { dir: r } = te(), { name: a, image: t, initials: n, ...c } = e, l = be("avatar-"), f = C({+    role: "img",+    id: l,+    ref: o,+    ...c+  }, {+    elementType: "span"+  }), [i, s] = g.useState(void 0);+  let d = z(t, {+    defaultProps: {+      alt: "",+      role: "presentation",+      "aria-hidden": !0,+      hidden: i+    },+    elementType: "img"+  });+  d?.src || (d = void 0), d && (d.onError = I(d.onError, () => s(!0)), d.onLoad = I(d.onLoad, () => s(void 0)));+  let v = z(n, {+    renderByDefault: !0,+    defaultProps: {+      children: Be(a, r === "rtl"),+      id: l + "__initials"+    },+    elementType: "span"+  });+  v?.children || (v = void 0);+  let p;+  !v && (!d || i) && (p = z(e.icon, {+    renderByDefault: !0,+    defaultProps: {+      "aria-hidden": !0+    },+    elementType: "span"+  }));+  let h;+  return !f["aria-label"] && !f["aria-labelledby"] && (a ? f["aria-label"] = a : v && (f["aria-labelledby"] = v.id)), {+    activeAriaLabelElement: h,+    components: {+      root: "span",+      initials: "span",+      icon: "span",+      image: "img"+    },+    root: f,+    initials: v,+    icon: p,+    image: d+  };+}, Lr = (e) => e >= 96 ? "extra-large" : e >= 64 ? "large" : e >= 56 ? "medium" : e >= 40 ? "small" : e >= 28 ? "extra-small" : "tiny", se = [+  "dark-red",+  "cranberry",+  "red",+  "pumpkin",+  "peach",+  "marigold",+  "gold",+  "brass",+  "brown",+  "forest",+  "seafoam",+  "dark-green",+  "light-teal",+  "teal",+  "steel",+  "blue",+  "royal-blue",+  "cornflower",+  "navy",+  "lavender",+  "purple",+  "grape",+  "lilac",+  "pink",+  "magenta",+  "plum",+  "beige",+  "mink",+  "platinum",+  "anchor"+], Gr = (e) => {+  let o = 0;+  for (let r = e.length - 1; r >= 0; r--) {+    const a = e.charCodeAt(r), t = r % 8;+    o ^= (a << t) + (a >> 8 - t);+  }+  return o;+}, L = {+  root: "fui-Avatar",+  image: "fui-Avatar__image",+  initials: "fui-Avatar__initials",+  icon: "fui-Avatar__icon",+  badge: "fui-Avatar__badge"+}, Er = /* @__PURE__ */ H("r81b29z", "r1aatmv", {+  r: [".r81b29z{display:inline-block;flex-shrink:0;position:relative;vertical-align:middle;border-radius:var(--borderRadiusCircular);font-family:var(--fontFamilyBase);font-weight:var(--fontWeightSemibold);font-size:var(--fontSizeBase300);width:32px;height:32px;}", ".r81b29z::before,.r81b29z::after{position:absolute;top:0;left:0;bottom:0;right:0;z-index:-1;margin:calc(-2 * var(--fui-Avatar-ringWidth, 0px));border-radius:inherit;transition-property:margin,opacity;transition-timing-function:var(--curveEasyEaseMax),var(--curveLinear);transition-duration:var(--durationUltraSlow),var(--durationSlower);}", ".r81b29z::before{border-style:solid;border-width:var(--fui-Avatar-ringWidth);}", ".r1aatmv{display:inline-block;flex-shrink:0;position:relative;vertical-align:middle;border-radius:var(--borderRadiusCircular);font-family:var(--fontFamilyBase);font-weight:var(--fontWeightSemibold);font-size:var(--fontSizeBase300);width:32px;height:32px;}", ".r1aatmv::before,.r1aatmv::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:-1;margin:calc(-2 * var(--fui-Avatar-ringWidth, 0px));border-radius:inherit;transition-property:margin,opacity;transition-timing-function:var(--curveEasyEaseMax),var(--curveLinear);transition-duration:var(--durationUltraSlow),var(--durationSlower);}", ".r1aatmv::before{border-style:solid;border-width:var(--fui-Avatar-ringWidth);}"],+  s: ["@media screen and (prefers-reduced-motion: reduce){.r81b29z::before,.r81b29z::after{transition-duration:0.01ms;}}", "@media screen and (prefers-reduced-motion: reduce){.r1aatmv::before,.r1aatmv::after{transition-duration:0.01ms;}}"]+}), Wr = /* @__PURE__ */ H("r136dc0n", "rjly0nl", [".r136dc0n{position:absolute;top:0;left:0;width:100%;height:100%;border-radius:inherit;object-fit:cover;vertical-align:top;}", ".rjly0nl{position:absolute;top:0;right:0;width:100%;height:100%;border-radius:inherit;object-fit:cover;vertical-align:top;}"]), Vr = /* @__PURE__ */ H("rip04v", "r31uzil", [".rip04v{position:absolute;box-sizing:border-box;top:0;left:0;width:100%;height:100%;line-height:1;border:var(--strokeWidthThin) solid var(--colorTransparentStroke);display:flex;align-items:center;justify-content:center;vertical-align:center;text-align:center;-webkit-user-select:none;-moz-user-select:none;user-select:none;border-radius:inherit;}", ".r31uzil{position:absolute;box-sizing:border-box;top:0;right:0;width:100%;height:100%;line-height:1;border:var(--strokeWidthThin) solid var(--colorTransparentStroke);display:flex;align-items:center;justify-content:center;vertical-align:center;text-align:center;-webkit-user-select:none;-moz-user-select:none;user-select:none;border-radius:inherit;}"]), Mr = /* @__PURE__ */ m({+  textCaption2Strong: {+    Be2twd7: "f13mqy1h"+  },+  textCaption1Strong: {+    Be2twd7: "fy9rknc"+  },+  textSubtitle2: {+    Be2twd7: "fod5ikn"+  },+  textSubtitle1: {+    Be2twd7: "f1pp30po"+  },+  textTitle3: {+    Be2twd7: "f1x0m3f5"+  },+  squareSmall: {+    Beyfa6y: 0,+    Bbmb7ep: 0,+    Btl43ni: 0,+    B7oj6ja: 0,+    Dimara: "fq9zq91"+  },+  squareMedium: {+    Beyfa6y: 0,+    Bbmb7ep: 0,+    Btl43ni: 0,+    B7oj6ja: 0,+    Dimara: "ft85np5"+  },+  squareLarge: {+    Beyfa6y: 0,+    Bbmb7ep: 0,+    Btl43ni: 0,+    B7oj6ja: 0,+    Dimara: "f1o0qvyv"+  },+  squareXLarge: {+    Beyfa6y: 0,+    Bbmb7ep: 0,+    Btl43ni: 0,+    B7oj6ja: 0,+    Dimara: "f1kijzfu"+  },+  activeOrInactive: {+    Bz10aip: "ftfx35i",+    Bmy1vo4: "fv0atk9",+    B3o57yi: "f1iry5bo",+    Bkqvd7p: "f15n41j8",+    Bg24rqe: "f9ttr0w"+  },+  ring: {+    Ftih45: "f1wl9k8s"+  },+  ringBadgeCutout: {+    f4a502: "fp2gujx"+  },+  ringThick: {+    of393c: "fq1w1vq"+  },+  ringThicker: {+    of393c: "fzg6ace"+  },+  ringThickest: {+    of393c: "f1nu8p71"+  },+  shadow: {+    Bsft5z2: "f13zj6fq"+  },+  shadow4: {+    Be6vj1x: "fcjn15l"+  },+  shadow8: {+    Be6vj1x: "f1tm8t9f"+  },+  shadow16: {+    Be6vj1x: "f1a1aohj"+  },+  shadow28: {+    Be6vj1x: "fond6v5"+  },+  inactive: {+    abs64n: "fp25eh",+    Bz10aip: "f1clczzi",+    Bkqvd7p: "f1l3s34x",+    Bfgortx: 0,+    Bnvr3x9: 0,+    b2tv09: 0,+    Bucmhp4: 0,+    iayac2: "flkahu5",+    b6ubon: "fw457kn",+    Bqinb2h: "f1wmllxl"+  },+  badge: {+    qhf8xq: "f1euv43f",+    B5kzvoi: "f1yab3r1",+    j35jbq: ["f1e31b4d", "f1vgc2s3"]+  },+  badgeCutout: {+    btxmck: "f1eugkqs"+  },+  badgeAlign: {+    Dnlfbu: ["f1tlnv9o", "f1y9kyih"]+  },+  tiny: {+    Bdjeniz: "f1uwoubl",+    niu6jh: "fid048z"+  },+  "extra-small": {+    Bdjeniz: "f13ar0e0",+    niu6jh: "fid048z"+  },+  small: {+    Bdjeniz: "fwwuruf",+    niu6jh: "fid048z"+  },+  medium: {+    Bdjeniz: "f1af27q5",+    niu6jh: "fid048z"+  },+  large: {+    Bdjeniz: "f18yy57a",+    niu6jh: "f924bxt"+  },+  "extra-large": {+    Bdjeniz: "f2jg042",+    niu6jh: "f924bxt"+  },+  icon12: {+    Be2twd7: "f1ugzwwg"+  },+  icon16: {+    Be2twd7: "f4ybsrx"+  },+  icon20: {+    Be2twd7: "fe5j1ua"+  },+  icon24: {+    Be2twd7: "f1rt2boy"+  },+  icon28: {+    Be2twd7: "f24l1pt"+  },+  icon32: {+    Be2twd7: "ffl51b"+  },+  icon48: {+    Be2twd7: "f18m8u13"+  }+}, {+  d: [".f13mqy1h{font-size:var(--fontSizeBase100);}", ".fy9rknc{font-size:var(--fontSizeBase200);}", ".fod5ikn{font-size:var(--fontSizeBase400);}", ".f1pp30po{font-size:var(--fontSizeBase500);}", ".f1x0m3f5{font-size:var(--fontSizeBase600);}", [".fq9zq91{border-radius:var(--borderRadiusSmall);}", {+    p: -1+  }], [".ft85np5{border-radius:var(--borderRadiusMedium);}", {+    p: -1+  }], [".f1o0qvyv{border-radius:var(--borderRadiusLarge);}", {+    p: -1+  }], [".f1kijzfu{border-radius:var(--borderRadiusXLarge);}", {+    p: -1+  }], ".ftfx35i{transform:perspective(1px);}", ".fv0atk9{transition-property:transform,opacity;}", ".f1iry5bo{transition-duration:var(--durationUltraSlow),var(--durationFaster);}", ".f15n41j8{transition-timing-function:var(--curveEasyEaseMax),var(--curveLinear);}", '.f1wl9k8s::before{content:"";}', ".fp2gujx::before{-webkit-mask-image:radial-gradient(circle at bottom calc(var(--fui-Avatar-badgeRadius) + 2 * var(--fui-Avatar-ringWidth)) var(--fui-Avatar-badgeAlign) calc(var(--fui-Avatar-badgeRadius) + 2 * var(--fui-Avatar-ringWidth)), transparent calc(var(--fui-Avatar-badgeRadius) + var(--fui-Avatar-badgeGap) - 0.25px), white calc(var(--fui-Avatar-badgeRadius) + var(--fui-Avatar-badgeGap) + 0.25px));mask-image:radial-gradient(circle at bottom calc(var(--fui-Avatar-badgeRadius) + 2 * var(--fui-Avatar-ringWidth)) var(--fui-Avatar-badgeAlign) calc(var(--fui-Avatar-badgeRadius) + 2 * var(--fui-Avatar-ringWidth)), transparent calc(var(--fui-Avatar-badgeRadius) + var(--fui-Avatar-badgeGap) - 0.25px), white calc(var(--fui-Avatar-badgeRadius) + var(--fui-Avatar-badgeGap) + 0.25px));}", ".fq1w1vq{--fui-Avatar-ringWidth:var(--strokeWidthThick);}", ".fzg6ace{--fui-Avatar-ringWidth:var(--strokeWidthThicker);}", ".f1nu8p71{--fui-Avatar-ringWidth:var(--strokeWidthThickest);}", '.f13zj6fq::after{content:"";}', ".fcjn15l::after{box-shadow:var(--shadow4);}", ".f1tm8t9f::after{box-shadow:var(--shadow8);}", ".f1a1aohj::after{box-shadow:var(--shadow16);}", ".fond6v5::after{box-shadow:var(--shadow28);}", ".fp25eh{opacity:0.8;}", ".f1clczzi{transform:scale(0.875);}", ".f1l3s34x{transition-timing-function:var(--curveDecelerateMin),var(--curveLinear);}", [".flkahu5::before,.flkahu5::after{margin:0;}", {+    p: -1+  }], ".fw457kn::before,.fw457kn::after{opacity:0;}", ".f1wmllxl::before,.f1wmllxl::after{transition-timing-function:var(--curveDecelerateMin),var(--curveLinear);}", ".f1euv43f{position:absolute;}", ".f1yab3r1{bottom:0;}", ".f1e31b4d{right:0;}", ".f1vgc2s3{left:0;}", ".f1eugkqs{-webkit-mask-image:radial-gradient(circle at bottom var(--fui-Avatar-badgeRadius) var(--fui-Avatar-badgeAlign) var(--fui-Avatar-badgeRadius), transparent calc(var(--fui-Avatar-badgeRadius) + var(--fui-Avatar-badgeGap) - 0.25px), white calc(var(--fui-Avatar-badgeRadius) + var(--fui-Avatar-badgeGap) + 0.25px));mask-image:radial-gradient(circle at bottom var(--fui-Avatar-badgeRadius) var(--fui-Avatar-badgeAlign) var(--fui-Avatar-badgeRadius), transparent calc(var(--fui-Avatar-badgeRadius) + var(--fui-Avatar-badgeGap) - 0.25px), white calc(var(--fui-Avatar-badgeRadius) + var(--fui-Avatar-badgeGap) + 0.25px));}", ".f1tlnv9o{--fui-Avatar-badgeAlign:right;}", ".f1y9kyih{--fui-Avatar-badgeAlign:left;}", ".f1uwoubl{--fui-Avatar-badgeRadius:3px;}", ".fid048z{--fui-Avatar-badgeGap:var(--strokeWidthThin);}", ".f13ar0e0{--fui-Avatar-badgeRadius:5px;}", ".fwwuruf{--fui-Avatar-badgeRadius:6px;}", ".f1af27q5{--fui-Avatar-badgeRadius:8px;}", ".f18yy57a{--fui-Avatar-badgeRadius:10px;}", ".f924bxt{--fui-Avatar-badgeGap:var(--strokeWidthThick);}", ".f2jg042{--fui-Avatar-badgeRadius:14px;}", ".f1ugzwwg{font-size:12px;}", ".f4ybsrx{font-size:16px;}", ".fe5j1ua{font-size:20px;}", ".f1rt2boy{font-size:24px;}", ".f24l1pt{font-size:28px;}", ".ffl51b{font-size:32px;}", ".f18m8u13{font-size:48px;}"],+  m: [["@media screen and (prefers-reduced-motion: reduce){.f9ttr0w{transition-duration:0.01ms;}}", {+    m: "screen and (prefers-reduced-motion: reduce)"+  }]]+}), ie = /* @__PURE__ */ m({+  16: {+    a9b677: "fjw5fx7",+    Bqenvij: "fd461yt"+  },+  20: {+    a9b677: "f64fuq3",+    Bqenvij: "fjamq6b"+  },+  24: {+    a9b677: "fq4mcun",+    Bqenvij: "frvgh55"+  },+  28: {+    a9b677: "f1w9dchk",+    Bqenvij: "fxldao9"+  },+  32: {+    a9b677: "f1szoe96",+    Bqenvij: "f1d2rq10"+  },+  36: {+    a9b677: "fpdz1er",+    Bqenvij: "f8ljn23"+  },+  40: {+    a9b677: "feqmc2u",+    Bqenvij: "fbhnoac"+  },+  48: {+    a9b677: "f124akge",+    Bqenvij: "ff2sm71"+  },+  56: {+    a9b677: "f1u66zr1",+    Bqenvij: "fzki0ko"+  },+  64: {+    a9b677: "fa9ln6p",+    Bqenvij: "f16k9i2m"+  },+  72: {+    a9b677: "fhcae8x",+    Bqenvij: "f1shusfg"+  },+  96: {+    a9b677: "f1kyr2gn",+    Bqenvij: "fypu0ge"+  },+  120: {+    a9b677: "fwfqyga",+    Bqenvij: "fjr5b71"+  },+  128: {+    a9b677: "f1iksgmy",+    Bqenvij: "fele2au"+  }+}, {+  d: [".fjw5fx7{width:16px;}", ".fd461yt{height:16px;}", ".f64fuq3{width:20px;}", ".fjamq6b{height:20px;}", ".fq4mcun{width:24px;}", ".frvgh55{height:24px;}", ".f1w9dchk{width:28px;}", ".fxldao9{height:28px;}", ".f1szoe96{width:32px;}", ".f1d2rq10{height:32px;}", ".fpdz1er{width:36px;}", ".f8ljn23{height:36px;}", ".feqmc2u{width:40px;}", ".fbhnoac{height:40px;}", ".f124akge{width:48px;}", ".ff2sm71{height:48px;}", ".f1u66zr1{width:56px;}", ".fzki0ko{height:56px;}", ".fa9ln6p{width:64px;}", ".f16k9i2m{height:64px;}", ".fhcae8x{width:72px;}", ".f1shusfg{height:72px;}", ".f1kyr2gn{width:96px;}", ".fypu0ge{height:96px;}", ".fwfqyga{width:120px;}", ".fjr5b71{height:120px;}", ".f1iksgmy{width:128px;}", ".fele2au{height:128px;}"]+}), Or = /* @__PURE__ */ m({+  neutral: {+    sj55zd: "f11d4kpn",+    De3pzq: "f18f03hv"+  },+  brand: {+    sj55zd: "fonrgv7",+    De3pzq: "f1blnnmj"+  },+  "dark-red": {+    sj55zd: "fqjd1y1",+    De3pzq: "f1vq2oo4"+  },+  cranberry: {+    sj55zd: "fg9gses",+    De3pzq: "f1lwxszt"+  },+  red: {+    sj55zd: "f23f7i0",+    De3pzq: "f1q9qhfq"+  },+  pumpkin: {+    sj55zd: "fjnan08",+    De3pzq: "fz91bi3"+  },+  peach: {+    sj55zd: "fknu15p",+    De3pzq: "f1b9nr51"+  },+  marigold: {+    sj55zd: "f9603vw",+    De3pzq: "f3z4w6d"+  },+  gold: {+    sj55zd: "fmq0uwp",+    De3pzq: "fg50kya"+  },+  brass: {+    sj55zd: "f28g5vo",+    De3pzq: "f4w2gd0"+  },+  brown: {+    sj55zd: "ftl572b",+    De3pzq: "f14wu1f4"+  },+  forest: {+    sj55zd: "f1gymlvd",+    De3pzq: "f19ut4y6"+  },+  seafoam: {+    sj55zd: "fnnb6wn",+    De3pzq: "f1n057jc"+  },+  "dark-green": {+    sj55zd: "ff58qw8",+    De3pzq: "f11t05wk"+  },+  "light-teal": {+    sj55zd: "f1up9qbj",+    De3pzq: "f42feg1"+  },+  teal: {+    sj55zd: "f135dsb4",+    De3pzq: "f6hvv1p"+  },+  steel: {+    sj55zd: "f151dlcp",+    De3pzq: "f1lnp8zf"+  },+  blue: {+    sj55zd: "f1rjv50u",+    De3pzq: "f1ggcpy6"+  },+  "royal-blue": {+    sj55zd: "f1emykk5",+    De3pzq: "f12rj61f"+  },+  cornflower: {+    sj55zd: "fqsigj7",+    De3pzq: "f8k7hur"+  },+  navy: {+    sj55zd: "f1nj97xi",+    De3pzq: "f19gw0ux"+  },+  lavender: {+    sj55zd: "fwctg0i",+    De3pzq: "ff379vm"+  },+  purple: {+    sj55zd: "fjrsgpu",+    De3pzq: "f1mzf1e1"+  },+  grape: {+    sj55zd: "f1fiiydq",+    De3pzq: "f1o4k8oy"+  },+  lilac: {+    sj55zd: "f1res9jt",+    De3pzq: "f1x6mz1o"+  },+  pink: {+    sj55zd: "fv3fbbi",+    De3pzq: "fydlv6t"+  },+  magenta: {+    sj55zd: "f1f1fwnz",+    De3pzq: "f4xb6j5"+  },+  plum: {+    sj55zd: "f8ptl6j",+    De3pzq: "fqo8e26"+  },+  beige: {+    sj55zd: "f1ntv3ld",+    De3pzq: "f101elhj"+  },+  mink: {+    sj55zd: "f1fscmp",+    De3pzq: "f13g8o5c"+  },+  platinum: {+    sj55zd: "f1dr00v2",+    De3pzq: "fkh7blw"+  },+  anchor: {+    sj55zd: "f1f3ti53",+    De3pzq: "fu4yj0j"+  }+}, {+  d: [".f11d4kpn{color:var(--colorNeutralForeground3);}", ".f18f03hv{background-color:var(--colorNeutralBackground6);}", ".fonrgv7{color:var(--colorNeutralForegroundStaticInverted);}", ".f1blnnmj{background-color:var(--colorBrandBackgroundStatic);}", ".fqjd1y1{color:var(--colorPaletteDarkRedForeground2);}", ".f1vq2oo4{background-color:var(--colorPaletteDarkRedBackground2);}", ".fg9gses{color:var(--colorPaletteCranberryForeground2);}", ".f1lwxszt{background-color:var(--colorPaletteCranberryBackground2);}", ".f23f7i0{color:var(--colorPaletteRedForeground2);}", ".f1q9qhfq{background-color:var(--colorPaletteRedBackground2);}", ".fjnan08{color:var(--colorPalettePumpkinForeground2);}", ".fz91bi3{background-color:var(--colorPalettePumpkinBackground2);}", ".fknu15p{color:var(--colorPalettePeachForeground2);}", ".f1b9nr51{background-color:var(--colorPalettePeachBackground2);}", ".f9603vw{color:var(--colorPaletteMarigoldForeground2);}", ".f3z4w6d{background-color:var(--colorPaletteMarigoldBackground2);}", ".fmq0uwp{color:var(--colorPaletteGoldForeground2);}", ".fg50kya{background-color:var(--colorPaletteGoldBackground2);}", ".f28g5vo{color:var(--colorPaletteBrassForeground2);}", ".f4w2gd0{background-color:var(--colorPaletteBrassBackground2);}", ".ftl572b{color:var(--colorPaletteBrownForeground2);}", ".f14wu1f4{background-color:var(--colorPaletteBrownBackground2);}", ".f1gymlvd{color:var(--colorPaletteForestForeground2);}", ".f19ut4y6{background-color:var(--colorPaletteForestBackground2);}", ".fnnb6wn{color:var(--colorPaletteSeafoamForeground2);}", ".f1n057jc{background-color:var(--colorPaletteSeafoamBackground2);}", ".ff58qw8{color:var(--colorPaletteDarkGreenForeground2);}", ".f11t05wk{background-color:var(--colorPaletteDarkGreenBackground2);}", ".f1up9qbj{color:var(--colorPaletteLightTealForeground2);}", ".f42feg1{background-color:var(--colorPaletteLightTealBackground2);}", ".f135dsb4{color:var(--colorPaletteTealForeground2);}", ".f6hvv1p{background-color:var(--colorPaletteTealBackground2);}", ".f151dlcp{color:var(--colorPaletteSteelForeground2);}", ".f1lnp8zf{background-color:var(--colorPaletteSteelBackground2);}", ".f1rjv50u{color:var(--colorPaletteBlueForeground2);}", ".f1ggcpy6{background-color:var(--colorPaletteBlueBackground2);}", ".f1emykk5{color:var(--colorPaletteRoyalBlueForeground2);}", ".f12rj61f{background-color:var(--colorPaletteRoyalBlueBackground2);}", ".fqsigj7{color:var(--colorPaletteCornflowerForeground2);}", ".f8k7hur{background-color:var(--colorPaletteCornflowerBackground2);}", ".f1nj97xi{color:var(--colorPaletteNavyForeground2);}", ".f19gw0ux{background-color:var(--colorPaletteNavyBackground2);}", ".fwctg0i{color:var(--colorPaletteLavenderForeground2);}", ".ff379vm{background-color:var(--colorPaletteLavenderBackground2);}", ".fjrsgpu{color:var(--colorPalettePurpleForeground2);}", ".f1mzf1e1{background-color:var(--colorPalettePurpleBackground2);}", ".f1fiiydq{color:var(--colorPaletteGrapeForeground2);}", ".f1o4k8oy{background-color:var(--colorPaletteGrapeBackground2);}", ".f1res9jt{color:var(--colorPaletteLilacForeground2);}", ".f1x6mz1o{background-color:var(--colorPaletteLilacBackground2);}", ".fv3fbbi{color:var(--colorPalettePinkForeground2);}", ".fydlv6t{background-color:var(--colorPalettePinkBackground2);}", ".f1f1fwnz{color:var(--colorPaletteMagentaForeground2);}", ".f4xb6j5{background-color:var(--colorPaletteMagentaBackground2);}", ".f8ptl6j{color:var(--colorPalettePlumForeground2);}", ".fqo8e26{background-color:var(--colorPalettePlumBackground2);}", ".f1ntv3ld{color:var(--colorPaletteBeigeForeground2);}", ".f101elhj{background-color:var(--colorPaletteBeigeBackground2);}", ".f1fscmp{color:var(--colorPaletteMinkForeground2);}", ".f13g8o5c{background-color:var(--colorPaletteMinkBackground2);}", ".f1dr00v2{color:var(--colorPalettePlatinumForeground2);}", ".fkh7blw{background-color:var(--colorPalettePlatinumBackground2);}", ".f1f3ti53{color:var(--colorPaletteAnchorForeground2);}", ".fu4yj0j{background-color:var(--colorPaletteAnchorBackground2);}"]+}), Xr = /* @__PURE__ */ m({+  neutral: {+    Bic5iru: "f1uuiafn"+  },+  brand: {+    Bic5iru: "f1uuiafn"+  },+  "dark-red": {+    Bic5iru: "f1t2x9on"+  },+  cranberry: {+    Bic5iru: "f1pvshc9"+  },+  red: {+    Bic5iru: "f1ectbk9"+  },+  pumpkin: {+    Bic5iru: "fvzpl0b"+  },+  peach: {+    Bic5iru: "fwj2kd7"+  },+  marigold: {+    Bic5iru: "fr120vy"+  },+  gold: {+    Bic5iru: "f8xmmar"+  },+  brass: {+    Bic5iru: "f1hbety2"+  },+  brown: {+    Bic5iru: "f1vg3s4g"+  },+  forest: {+    Bic5iru: "f1m3olm5"+  },+  seafoam: {+    Bic5iru: "f17xiqtr"+  },+  "dark-green": {+    Bic5iru: "fx32vyh"+  },+  "light-teal": {+    Bic5iru: "f1mkihwv"+  },+  teal: {+    Bic5iru: "fecnooh"+  },+  steel: {+    Bic5iru: "f15hfgzm"+  },+  blue: {+    Bic5iru: "fqproka"+  },+  "royal-blue": {+    Bic5iru: "f17v2w59"+  },+  cornflower: {+    Bic5iru: "fp0q1mo"+  },+  navy: {+    Bic5iru: "f1nlym55"+  },+  lavender: {+    Bic5iru: "f62vk8h"+  },+  purple: {+    Bic5iru: "f15zl69q"+  },+  grape: {+    Bic5iru: "f53w4j7"+  },+  lilac: {+    Bic5iru: "fu2771t"+  },+  pink: {+    Bic5iru: "fzflscs"+  },+  magenta: {+    Bic5iru: "fb6rmqc"+  },+  plum: {+    Bic5iru: "f1a4gm5b"+  },+  beige: {+    Bic5iru: "f1qpf9z1"+  },+  mink: {+    Bic5iru: "f1l7or83"+  },+  platinum: {+    Bic5iru: "fzrj0iu"+  },+  anchor: {+    Bic5iru: "f8oz6wf"+  }+}, {+  d: [".f1uuiafn::before{color:var(--colorBrandStroke1);}", ".f1t2x9on::before{color:var(--colorPaletteDarkRedBorderActive);}", ".f1pvshc9::before{color:var(--colorPaletteCranberryBorderActive);}", ".f1ectbk9::before{color:var(--colorPaletteRedBorderActive);}", ".fvzpl0b::before{color:var(--colorPalettePumpkinBorderActive);}", ".fwj2kd7::before{color:var(--colorPalettePeachBorderActive);}", ".fr120vy::before{color:var(--colorPaletteMarigoldBorderActive);}", ".f8xmmar::before{color:var(--colorPaletteGoldBorderActive);}", ".f1hbety2::before{color:var(--colorPaletteBrassBorderActive);}", ".f1vg3s4g::before{color:var(--colorPaletteBrownBorderActive);}", ".f1m3olm5::before{color:var(--colorPaletteForestBorderActive);}", ".f17xiqtr::before{color:var(--colorPaletteSeafoamBorderActive);}", ".fx32vyh::before{color:var(--colorPaletteDarkGreenBorderActive);}", ".f1mkihwv::before{color:var(--colorPaletteLightTealBorderActive);}", ".fecnooh::before{color:var(--colorPaletteTealBorderActive);}", ".f15hfgzm::before{color:var(--colorPaletteSteelBorderActive);}", ".fqproka::before{color:var(--colorPaletteBlueBorderActive);}", ".f17v2w59::before{color:var(--colorPaletteRoyalBlueBorderActive);}", ".fp0q1mo::before{color:var(--colorPaletteCornflowerBorderActive);}", ".f1nlym55::before{color:var(--colorPaletteNavyBorderActive);}", ".f62vk8h::before{color:var(--colorPaletteLavenderBorderActive);}", ".f15zl69q::before{color:var(--colorPalettePurpleBorderActive);}", ".f53w4j7::before{color:var(--colorPaletteGrapeBorderActive);}", ".fu2771t::before{color:var(--colorPaletteLilacBorderActive);}", ".fzflscs::before{color:var(--colorPalettePinkBorderActive);}", ".fb6rmqc::before{color:var(--colorPaletteMagentaBorderActive);}", ".f1a4gm5b::before{color:var(--colorPalettePlumBorderActive);}", ".f1qpf9z1::before{color:var(--colorPaletteBeigeBorderActive);}", ".f1l7or83::before{color:var(--colorPaletteMinkBorderActive);}", ".fzrj0iu::before{color:var(--colorPalettePlatinumBorderActive);}", ".f8oz6wf::before{color:var(--colorPaletteAnchorBorderActive);}"]+}), Ur = (e) => {+  "use no memo";+  const {+    size: o,+    shape: r,+    active: a,+    activeAppearance: t,+    color: n+  } = e, c = Er(), l = Wr(), f = Vr(), i = Mr(), s = ie(), d = Or(), v = Xr(), p = [c, o !== 32 && s[o]];+  if (e.badge && p.push(i.badgeAlign, i[e.badge.size || "medium"]), o <= 24 ? p.push(i.textCaption2Strong) : o <= 28 ? p.push(i.textCaption1Strong) : o <= 40 || (o <= 56 ? p.push(i.textSubtitle2) : o <= 96 ? p.push(i.textSubtitle1) : p.push(i.textTitle3)), r === "square" && (o <= 24 ? p.push(i.squareSmall) : o <= 48 ? p.push(i.squareMedium) : o <= 72 ? p.push(i.squareLarge) : p.push(i.squareXLarge)), (a === "active" || a === "inactive") && (p.push(i.activeOrInactive), (t === "ring" || t === "ring-shadow") && (p.push(i.ring, v[n]), e.badge && p.push(i.ringBadgeCutout), o <= 48 ? p.push(i.ringThick) : o <= 64 ? p.push(i.ringThicker) : p.push(i.ringThickest)), (t === "shadow" || t === "ring-shadow") && (p.push(i.shadow), o <= 28 ? p.push(i.shadow4) : o <= 48 ? p.push(i.shadow8) : o <= 64 ? p.push(i.shadow16) : p.push(i.shadow28)), a === "inactive" && p.push(i.inactive)), e.root.className = b(L.root, ...p, e.root.className), e.badge && (e.badge.className = b(L.badge, i.badge, e.badge.className)), e.image && (e.image.className = b(L.image, l, d[n], e.badge && i.badgeCutout, e.image.className)), e.initials && (e.initials.className = b(L.initials, f, d[n], e.badge && i.badgeCutout, e.initials.className)), e.icon) {+    let h;+    o <= 16 ? h = i.icon12 : o <= 24 ? h = i.icon16 : o <= 40 ? h = i.icon20 : o <= 48 ? h = i.icon24 : o <= 56 ? h = i.icon28 : o <= 72 ? h = i.icon32 : h = i.icon48, e.icon.className = b(L.icon, f, h, d[n], e.badge && i.badgeCutout, e.icon.className);+  }+  return e;+}, W = /* @__PURE__ */ g.forwardRef((e, o) => {+  const r = Rr(e, o);+  return Ur(r), A("useAvatarStyles_unstable")(r), jr(r);+});+W.displayName = "Avatar";+const ne = he(void 0), $r = {}, Jr = ne.Provider, Y = (e) => me(ne, (o = $r) => e(o)), Kr = (e, o) => /* @__PURE__ */ k(Jr, {+  value: o.avatarGroup,+  children: /* @__PURE__ */ k(e.root, {})+}), Yr = (e, o) => {+  const { size: r = ze, ...a } = e, t = Qr(a, o);+  return {+    size: r,+    ...t+  };+}, Qr = (e, o) => {+  const { layout: r = "spread" } = e, a = C(V("div", {+    role: "group",+    ...e,+    ref: o+  }), {+    elementType: "div"+  });+  return {+    layout: r,+    components: {+      root: "div"+    },+    root: a+  };+}, ze = 32, Zr = (e) => {+  const { layout: o, size: r } = e;+  return {+    avatarGroup: g.useMemo(() => ({+      layout: o,+      size: r+    }), [+      o,+      r+    ])+  };+}, eo = {+  root: "fui-AvatarGroup"+}, ro = /* @__PURE__ */ m({+  base: {+    mc9l5x: "ftuwxu6",+    qhf8xq: "f10pi13n"+  },+  pie: {+    Bgl5zvf: "f1uz6ud1",+    De3pzq: "f1ganh6p",+    By8wz76: "f1wgxgin"+  }+}, {+  d: [".ftuwxu6{display:inline-flex;}", ".f10pi13n{position:relative;}", ".f1uz6ud1{clip-path:circle(50%);}", ".f1ganh6p{background-color:var(--colorTransparentStroke);}"],+  m: [["@media (forced-colors: active){.f1wgxgin{background-color:CanvasText;}}", {+    m: "(forced-colors: active)"+  }]]+}), oo = (e) => {+  "use no memo";+  const {+    layout: o,+    size: r+  } = e, a = ro(), t = ie();+  return e.root.className = b(eo.root, a.base, o === "pie" && t[r], o === "pie" && a.pie, e.root.className), e;+}, qe = /* @__PURE__ */ g.forwardRef((e, o) => {+  const r = Yr(e, o), a = Zr(r);+  return oo(r), A("useAvatarGroupStyles_unstable")(r), Kr(r, a);+});+qe.displayName = "AvatarGroup";+const ao = (e) => /* @__PURE__ */ D(e.root, {+  children: [+    /* @__PURE__ */ k(e.avatar, {}),+    e.isOverflowItem && /* @__PURE__ */ k(e.overflowLabel, {})+  ]+}), to = (e, o) => {+  const r = io(e, o), a = Y((n) => n.size), t = a ?? ze;+  return {+    size: t,+    ...r,+    components: {+      // eslint-disable-next-line @typescript-eslint/no-deprecated+      ...r.components,+      avatar: W+    },+    avatar: C(e.avatar, {+      defaultProps: {+        size: t,+        color: "colorful",+        ...r.avatar+      },+      elementType: W+    })+  };+}, io = (e, o) => {+  const r = Y((f) => f.isOverflow), a = Y((f) => f.layout), { style: t, className: n, overflowLabel: c, ...l } = e;+  return Ee(ne), {+    isOverflowItem: r,+    layout: a,+    components: {+      root: r ? "li" : "div",+      avatar: "span",+      overflowLabel: "span"+    },+    root: C(e.root, {+      defaultProps: {+        style: t,+        className: n+      },+      elementType: r ? "li" : "div"+    }),+    avatar: C(e.avatar, {+      defaultProps: {+        ref: o,+        ...l+      },+      elementType: "span"+    }),+    overflowLabel: C(c, {+      defaultProps: {+        // Avatar already has its aria-label set to the name, this will prevent the name to be read twice.+        "aria-hidden": !0,+        children: e.name+      },+      elementType: "span"+    })+  };+}, J = {+  root: "fui-AvatarGroupItem",+  avatar: "fui-AvatarGroupItem__avatar",+  overflowLabel: "fui-AvatarGroupItem__overflowLabel"+}, no = /* @__PURE__ */ m({+  base: {+    Bt984gj: "f122n59",+    mc9l5x: "ftuwxu6",+    Bnnss6s: "fi64zpg",+    qhf8xq: "f10pi13n"+  },+  overflowItem: {+    Byoj8tv: 0,+    uwmqm3: 0,+    z189sj: 0,+    z8tnut: 0,+    B0ocmuz: "f16d74zd"+  },+  nonOverflowItem: {+    Beyfa6y: 0,+    Bbmb7ep: 0,+    Btl43ni: 0,+    B7oj6ja: 0,+    Dimara: "f44lkw9"+  }+}, {+  d: [".f122n59{align-items:center;}", ".ftuwxu6{display:inline-flex;}", ".fi64zpg{flex-shrink:0;}", ".f10pi13n{position:relative;}", [".f16d74zd{padding:var(--spacingVerticalXS) var(--spacingHorizontalXS);}", {+    p: -1+  }], [".f44lkw9{border-radius:var(--borderRadiusCircular);}", {+    p: -1+  }]]+}), lo = /* @__PURE__ */ m({+  nonOverflowItem: {+    qhf8xq: "f1euv43f"+  },+  pie: {+    Beyfa6y: 0,+    Bbmb7ep: 0,+    Btl43ni: 0,+    B7oj6ja: 0,+    Dimara: "fokr779"+  }+}, {+  d: [".f1euv43f{position:absolute;}", [".fokr779{border-radius:0;}", {+    p: -1+  }]]+}), fo = /* @__PURE__ */ m({+  base: {+    Frg6f3: ["foyynoy", "f1vcna3q"],+    sj55zd: "f19n0e5",+    Bahqtrf: "fk6fouc",+    Be2twd7: "fkhj508",+    Bhrd7zp: "figsok6",+    Bg96gwp: "f1i3iumi"+  }+}, {+  d: [".foyynoy{margin-left:var(--spacingHorizontalS);}", ".f1vcna3q{margin-right:var(--spacingHorizontalS);}", ".f19n0e5{color:var(--colorNeutralForeground1);}", ".fk6fouc{font-family:var(--fontFamilyBase);}", ".fkhj508{font-size:var(--fontSizeBase300);}", ".figsok6{font-weight:var(--fontWeightRegular);}", ".f1i3iumi{line-height:var(--lineHeightBase300);}"]+}), co = /* @__PURE__ */ m({+  thick: {+    E5pizo: "foiuzp5"+  },+  thicker: {+    E5pizo: "f1x6o7w7"+  },+  thickest: {+    E5pizo: "f2aml1u"+  },+  xxs: {+    jhia2w: ["f1cjco14", "f13dxjc9"]+  },+  xs: {+    jhia2w: ["f15p6bln", "f1bab3ru"]+  },+  s: {+    jhia2w: ["f1v53ncc", "f17pu8r8"]+  },+  l: {+    jhia2w: ["flv48ch", "fnh1ydj"]+  }+}, {+  d: [".foiuzp5{box-shadow:0 0 0 var(--strokeWidthThick) var(--colorNeutralBackground2);}", ".f1x6o7w7{box-shadow:0 0 0 var(--strokeWidthThicker) var(--colorNeutralBackground2);}", ".f2aml1u{box-shadow:0 0 0 var(--strokeWidthThickest) var(--colorNeutralBackground2);}", ".f1cjco14:not(:first-child){margin-left:calc(-1 * var(--spacingHorizontalXXS));}", ".f13dxjc9:not(:first-child){margin-right:calc(-1 * var(--spacingHorizontalXXS));}", ".f15p6bln:not(:first-child){margin-left:calc(-1 * var(--spacingHorizontalXS));}", ".f1bab3ru:not(:first-child){margin-right:calc(-1 * var(--spacingHorizontalXS));}", ".f1v53ncc:not(:first-child){margin-left:calc(-1 * var(--spacingHorizontalS));}", ".f17pu8r8:not(:first-child){margin-right:calc(-1 * var(--spacingHorizontalS));}", ".flv48ch:not(:first-child){margin-left:calc(-1 * var(--spacingHorizontalL));}", ".fnh1ydj:not(:first-child){margin-right:calc(-1 * var(--spacingHorizontalL));}"]+}), so = /* @__PURE__ */ m({+  s: {+    jhia2w: ["f7lhxv7", "f6ou2b0"]+  },+  mNudge: {+    jhia2w: ["f1h0okno", "fnnqava"]+  },+  m: {+    jhia2w: ["f1wkt588", "f1maio5g"]+  },+  l: {+    jhia2w: ["f1l333zn", "f1r41m4c"]+  },+  xl: {+    jhia2w: ["fahr13a", "f2n7rbo"]+  }+}, {+  d: [".f7lhxv7:not(:first-child){margin-left:var(--spacingHorizontalS);}", ".f6ou2b0:not(:first-child){margin-right:var(--spacingHorizontalS);}", ".f1h0okno:not(:first-child){margin-left:var(--spacingHorizontalMNudge);}", ".fnnqava:not(:first-child){margin-right:var(--spacingHorizontalMNudge);}", ".f1wkt588:not(:first-child){margin-left:var(--spacingHorizontalM);}", ".f1maio5g:not(:first-child){margin-right:var(--spacingHorizontalM);}", ".f1l333zn:not(:first-child){margin-left:var(--spacingHorizontalL);}", ".f1r41m4c:not(:first-child){margin-right:var(--spacingHorizontalL);}", ".fahr13a:not(:first-child){margin-left:var(--spacingHorizontalXL);}", ".f2n7rbo:not(:first-child){margin-right:var(--spacingHorizontalXL);}"]+}), uo = /* @__PURE__ */ m({+  base: {+    qhf8xq: "f1euv43f"+  },+  slices: {+    B3gf25r: "f16m7w7k",+    Be2twx7: ["f1o4hhgz", "fb4gjrz"],+    Bvaow4n: "f1pgb5nx",+    Gpecfs: ["fugirid", "f4sk99m"],+    bhabj1: "fjreaf3",+    B7rc6i7: ["f1k4vw81", "f1w1xcy7"],+    Bwrfys5: "f1ef8vxk",+    Bwuzm9m: ["f1x2qbfv", "f1xwf4nz"],+    fflka: "ff6xuso",+    do7bja: "fzpvk6c",+    Be8zqhl: "f4onu7f",+    Bij0kh0: ["f1ydfez1", "fjensob"],+    Bwexnyt: "f1yv732j",+    Bhe5x6o: "fchq2fj",+    B3kv7bh: "ff5binh"+  },+  rtlSlices: {+    B3gf25r: "f5vdl61",+    Bvaow4n: "f1bnra92",+    bhabj1: "f4ibo7t",+    Bwrfys5: "f17heuis",+    Bwuzm9m: ["f64f2ud", "f1yjglu3"],+    Be8zqhl: "fa6l61x",+    Bij0kh0: ["f1w2396a", "f14ab3yo"]+  },+  thick: {+    uiicq7: "fnyfzln"+  },+  thicker: {+    uiicq7: "f1xdzzot"+  },+  thickest: {+    uiicq7: "f1auhru5"+  }+}, {+  d: [".f1euv43f{position:absolute;}", ".f16m7w7k:nth-of-type(1):nth-last-of-type(2){clip-path:inset(0 calc(25% + (var(--fuiAvatarGroupItem__divider--width) / 2)) 0 25%);}", ".f1o4hhgz:nth-of-type(1):nth-last-of-type(2){left:-25%;}", ".fb4gjrz:nth-of-type(1):nth-last-of-type(2){right:-25%;}", ".f1pgb5nx:nth-of-type(2):nth-last-of-type(1){clip-path:inset(0 25% 0 calc(25% + (var(--fuiAvatarGroupItem__divider--width) / 2)));}", ".fugirid:nth-of-type(2):nth-last-of-type(1){left:25%;}", ".f4sk99m:nth-of-type(2):nth-last-of-type(1){right:25%;}", ".fjreaf3:nth-of-type(1):nth-last-of-type(3){clip-path:inset(0 calc(25% + (var(--fuiAvatarGroupItem__divider--width) / 2)) 0 25%);}", ".f1k4vw81:nth-of-type(1):nth-last-of-type(3){left:-25%;}", ".f1w1xcy7:nth-of-type(1):nth-last-of-type(3){right:-25%;}", ".f1ef8vxk:nth-of-type(2):nth-last-of-type(2){clip-path:inset(0 0 var(--fuiAvatarGroupItem__divider--width) var(--fuiAvatarGroupItem__divider--width));}", ".f1x2qbfv:nth-of-type(2):nth-last-of-type(2){left:50%;}", ".f1xwf4nz:nth-of-type(2):nth-last-of-type(2){right:50%;}", ".ff6xuso:nth-of-type(2):nth-last-of-type(2){transform:scale(0.5);}", ".fzpvk6c:nth-of-type(2):nth-last-of-type(2){transform-origin:0 0;}", ".f4onu7f:nth-of-type(3):nth-last-of-type(1){clip-path:inset(var(--fuiAvatarGroupItem__divider--width) 0 0 var(--fuiAvatarGroupItem__divider--width));}", ".f1ydfez1:nth-of-type(3):nth-last-of-type(1){left:50%;}", ".fjensob:nth-of-type(3):nth-last-of-type(1){right:50%;}", ".f1yv732j:nth-of-type(3):nth-last-of-type(1){top:50%;}", ".fchq2fj:nth-of-type(3):nth-last-of-type(1){transform:scale(0.5);}", ".ff5binh:nth-of-type(3):nth-last-of-type(1){transform-origin:0 0;}", ".f5vdl61:nth-of-type(1):nth-last-of-type(2){clip-path:inset(0 25% 0 calc(25% + (var(--fuiAvatarGroupItem__divider--width) / 2)));}", ".f1bnra92:nth-of-type(2):nth-last-of-type(1){clip-path:inset(0 calc(25% + (var(--fuiAvatarGroupItem__divider--width) / 2)) 0 25%);}", ".f4ibo7t:nth-of-type(1):nth-last-of-type(3){clip-path:inset(0 25% 0 calc(25% + (var(--fuiAvatarGroupItem__divider--width) / 2)));}", ".f17heuis:nth-of-type(2):nth-last-of-type(2){clip-path:inset(0 var(--fuiAvatarGroupItem__divider--width) var(--fuiAvatarGroupItem__divider--width) 0);}", ".f64f2ud:nth-of-type(2):nth-last-of-type(2){left:0;}", ".f1yjglu3:nth-of-type(2):nth-last-of-type(2){right:0;}", ".fa6l61x:nth-of-type(3):nth-last-of-type(1){clip-path:inset(var(--fuiAvatarGroupItem__divider--width) var(--fuiAvatarGroupItem__divider--width) 0 0);}", ".f1w2396a:nth-of-type(3):nth-last-of-type(1){left:0;}", ".f14ab3yo:nth-of-type(3):nth-last-of-type(1){right:0;}", ".fnyfzln{--fuiAvatarGroupItem__divider--width:var(--strokeWidthThick);}", ".f1xdzzot{--fuiAvatarGroupItem__divider--width:var(--strokeWidthThicker);}", ".f1auhru5{--fuiAvatarGroupItem__divider--width:var(--strokeWidthThickest);}"]+}), vo = (e) => {+  "use no memo";+  const {+    isOverflowItem: o,+    layout: r,+    size: a+  } = e, {+    dir: t+  } = te(), n = lo(), c = fo(), l = uo(), f = no(), i = ie(), s = go(r, a), d = [f.base];+  return o ? d.push(f.overflowItem) : (d.push(f.nonOverflowItem), d.push(s), d.push(i[a]), r === "pie" && (d.push(l.base), a < 56 ? d.push(l.thick) : a < 72 ? d.push(l.thicker) : d.push(l.thickest), d.push(l.slices), t === "rtl" && d.push(l.rtlSlices))), e.root.className = b(J.root, ...d, e.root.className), e.avatar.className = b(J.avatar, !o && n.nonOverflowItem, r === "pie" && n.pie, e.avatar.className), e.overflowLabel && (e.overflowLabel.className = b(J.overflowLabel, c.base, e.overflowLabel.className)), e;+}, go = (e, o) => {+  const r = co(), a = so(), t = [];+  return o && (e === "stack" ? (o < 56 ? t.push(r.thick) : o < 72 ? t.push(r.thicker) : t.push(r.thickest), o < 24 ? t.push(r.xxs) : o < 48 ? t.push(r.xs) : o < 96 ? t.push(r.s) : t.push(r.l)) : e === "spread" && (o < 20 ? t.push(a.s) : o < 32 ? t.push(a.mNudge) : o < 64 ? t.push(a.l) : t.push(a.xl))), b(...t);+}, je = /* @__PURE__ */ g.forwardRef((e, o) => {+  const r = to(e, o);+  return vo(r), A("useAvatarGroupItemStyles_unstable")(r), ao(r);+});+je.displayName = "AvatarGroupItem";+const po = (e) => {+  const { presenceOnly: o, textPosition: r } = e, a = o ? e.presence && /* @__PURE__ */ k(e.presence, {}) : e.avatar && /* @__PURE__ */ k(e.avatar, {});+  return /* @__PURE__ */ D(e.root, {+    children: [+      (r === "after" || r === "below") && a,+      e.primaryText && /* @__PURE__ */ k(e.primaryText, {}),+      e.secondaryText && /* @__PURE__ */ k(e.secondaryText, {}),+      e.tertiaryText && /* @__PURE__ */ k(e.tertiaryText, {}),+      e.quaternaryText && /* @__PURE__ */ k(e.quaternaryText, {}),+      r === "before" && a+    ]+  });+}, bo = (e, o) => {+  const { avatar: r, presenceOnly: a = !1, size: t = "medium", textAlignment: n = "start", textPosition: c = "after", presence: l, ...f } = e, i = ho(f, o);+  return {+    ...i,+    presenceOnly: a,+    size: t,+    textAlignment: n,+    textPosition: c,+    components: {+      // eslint-disable-next-line @typescript-eslint/no-deprecated+      ...i.components,+      avatar: W,+      presence: E+    },+    avatar: a ? void 0 : z(r, {+      renderByDefault: !0,+      defaultProps: {+        name: e.name,+        badge: l,+        size: ko[t]+      },+      elementType: W+    }),+    presence: a ? z(l, {+      defaultProps: {+        size: mo[t]+      },+      elementType: E+    }) : void 0+  };+}, ho = (e, o) => {+  const { name: r, primaryText: a, secondaryText: t, tertiaryText: n, quaternaryText: c, ...l } = e, f = z(a, {+    renderByDefault: !0,+    defaultProps: {+      children: r+    },+    elementType: "span"+  }), i = z(t, {+    elementType: "span"+  }), s = z(n, {+    elementType: "span"+  }), d = z(c, {+    elementType: "span"+  });+  return {+    numTextLines: [+      f,+      i,+      s,+      d+    ].filter(Boolean).length,+    components: {+      root: "div",+      primaryText: "span",+      secondaryText: "span",+      tertiaryText: "span",+      quaternaryText: "span"+    },+    root: C({+      ref: o,+      ...l+    }, {+      elementType: "div"+    }),+    primaryText: f,+    secondaryText: i,+    tertiaryText: s,+    quaternaryText: d+  };+}, mo = {+  "extra-small": "tiny",+  small: "extra-small",+  medium: "small",+  large: "medium",+  "extra-large": "large",+  huge: "large"+}, ko = {+  "extra-small": 20,+  small: 28,+  medium: 32,+  large: 36,+  "extra-large": 40,+  huge: 56+}, F = {+  root: "fui-Persona",+  avatar: "fui-Persona__avatar",+  presence: "fui-Persona__presence",+  primaryText: "fui-Persona__primaryText",+  secondaryText: "fui-Persona__secondaryText",+  tertiaryText: "fui-Persona__tertiaryText",+  quaternaryText: "fui-Persona__quaternaryText"+}, yo = /* @__PURE__ */ H("rlroi9i", null, [".rlroi9i{display:inline-grid;grid-auto-rows:max-content;grid-auto-flow:column;justify-items:start;grid-template-columns:max-content [middle] auto;}"]), xo = /* @__PURE__ */ m({+  beforeAfterCenter: {+    wkccdc: "f1iantul"+  },+  after: {},+  before: {+    B7hvi0a: "f1tll2w5",+    Budl1dq: "ffvkwdr"+  },+  below: {+    Bxotwcr: "f1nkeedh",+    B7hvi0a: "f1oiokrs",+    Budl1dq: "f1emgwh2"+  },+  media: {+    Ijaq50: "f1hek2iy"+  },+  mediaBeforeAfterCenter: {+    Ijaq50: "fa4dipu"+  },+  start: {+    qb2dma: "f9h729m"+  },+  center: {+    qb2dma: "f7nlbp4"+  },+  afterAlignToPrimary: {+    qb2dma: "f7nlbp4",+    Ijaq50: "f1rnkkuc",+    Bw0ie65: "f1warjpf"+  },+  beforeAlignToPrimary: {+    qb2dma: "f7nlbp4",+    Ijaq50: "f1rnkkuc",+    Br312pm: "fwu52yu"+  },+  secondLineSpacing: {+    B6of3ja: "f1ryq6si"+  },+  primary: {+    Ijaq50: "f1q3ipgb"+  },+  secondary: {+    Ijaq50: "f3drtdk"+  },+  tertiary: {+    Ijaq50: "fa1o6s1"+  },+  quaternary: {+    Ijaq50: "f1tuwaia"+  }+}, {+  d: [".f1iantul{grid-template-rows:1fr [primary] max-content [secondary] max-content [tertiary] max-content [quaternary] max-content 1fr;}", ".f1tll2w5{justify-items:end;}", ".ffvkwdr{grid-template-columns:auto [middle] max-content;}", ".f1nkeedh{grid-auto-flow:unset;}", ".f1oiokrs{justify-items:center;}", ".f1emgwh2{grid-template-columns:unset;}", ".f1hek2iy{grid-row-start:span 5;}", ".fa4dipu{grid-row-start:span 6;}", ".f9h729m{align-self:start;}", ".f7nlbp4{align-self:center;}", ".f1rnkkuc{grid-row-start:unset;}", ".f1warjpf{grid-column-end:middle;}", ".fwu52yu{grid-column-start:middle;}", ".f1ryq6si{margin-top:-2px;}", ".f1q3ipgb{grid-row-start:primary;}", ".f3drtdk{grid-row-start:secondary;}", ".fa1o6s1{grid-row-start:tertiary;}", ".f1tuwaia{grid-row-start:quaternary;}"]+}), Bo = /* @__PURE__ */ m({+  "extra-small": {+    Bs1gm4r: "f1e48tse"+  },+  small: {+    Bs1gm4r: "f18q9vkd"+  },+  medium: {+    Bs1gm4r: "f18q9vkd"+  },+  large: {+    Bs1gm4r: "fx34bi6"+  },+  "extra-large": {+    Bs1gm4r: "fx34bi6"+  },+  huge: {+    Bs1gm4r: "f1o96qtm"+  },+  after: {+    t21cq0: ["f103ycu4", "f1tao51"]+  },+  below: {+    jrapky: "fbo7acy"+  },+  before: {+    Frg6f3: ["f1tao51", "f103ycu4"]+  }+}, {+  d: [".f1e48tse{--fui-Persona__avatar--spacing:var(--spacingHorizontalSNudge);}", ".f18q9vkd{--fui-Persona__avatar--spacing:var(--spacingHorizontalS);}", ".fx34bi6{--fui-Persona__avatar--spacing:var(--spacingHorizontalMNudge);}", ".f1o96qtm{--fui-Persona__avatar--spacing:var(--spacingHorizontalM);}", ".f103ycu4{margin-right:var(--fui-Persona__avatar--spacing);}", ".f1tao51{margin-left:var(--fui-Persona__avatar--spacing);}", ".fbo7acy{margin-bottom:var(--fui-Persona__avatar--spacing);}"]+}), wo = /* @__PURE__ */ m({+  small: {+    Bs1gm4r: "f1e48tse"+  }+}, {+  d: [".f1e48tse{--fui-Persona__avatar--spacing:var(--spacingHorizontalSNudge);}"]+}), zo = (e) => {+  "use no memo";+  const {+    presenceOnly: o,+    size: r,+    textAlignment: a,+    textPosition: t+  } = e, n = o && a === "start" && r !== "extra-large" && r !== "huge", c = t !== "below" && a === "center", {+    primaryTextClassName: l,+    optionalTextClassName: f+  } = Co(e, n), i = yo(), s = xo(), d = Bo(), v = {+    ...d,+    ...wo()+  };+  return e.root.className = b(F.root, i, c && s.beforeAfterCenter, s[t], e.root.className), e.avatar && (e.avatar.className = b(F.avatar, t !== "below" && s.media, c && s.mediaBeforeAfterCenter, s[a], d[r], d[t], e.avatar.className)), e.presence && (e.presence.className = b(F.presence, t !== "below" && s.media, c && s.mediaBeforeAfterCenter, s[a], v[r], v[t], t === "after" && n && s.afterAlignToPrimary, t === "before" && n && s.beforeAlignToPrimary, e.presence.className)), e.primaryText && (e.primaryText.className = b(F.primaryText, c && s.primary, l, e.primaryText.className)), e.secondaryText && (e.secondaryText.className = b(F.secondaryText, c && s.secondary, f, s.secondLineSpacing, e.secondaryText.className)), e.tertiaryText && (e.tertiaryText.className = b(F.tertiaryText, c && s.tertiary, f, e.tertiaryText.className)), e.quaternaryText && (e.quaternaryText.className = b(F.quaternaryText, c && s.quaternary, f, e.quaternaryText.className)), e;+}, qo = /* @__PURE__ */ H("rvj41k9", null, [".rvj41k9{display:block;color:var(--colorNeutralForeground1);font-family:var(--fontFamilyBase);font-size:var(--fontSizeBase300);font-weight:var(--fontWeightRegular);line-height:var(--lineHeightBase300);}"]), jo = /* @__PURE__ */ H("rp1pf9e", null, [".rp1pf9e{display:block;color:var(--colorNeutralForeground2);font-family:var(--fontFamilyBase);font-size:var(--fontSizeBase200);font-weight:var(--fontWeightRegular);line-height:var(--lineHeightBase200);}"]), So = /* @__PURE__ */ m({+  beforeAlignToPrimary: {+    Bw0ie65: "f1warjpf"+  },+  afterAlignToPrimary: {+    Br312pm: "fwu52yu"+  },+  body1: {+    Bahqtrf: "fk6fouc",+    Be2twd7: "fkhj508",+    Bhrd7zp: "figsok6",+    Bg96gwp: "f1i3iumi"+  },+  caption1: {+    Bahqtrf: "fk6fouc",+    Be2twd7: "fy9rknc",+    Bhrd7zp: "figsok6",+    Bg96gwp: "fwrc4pm"+  },+  subtitle2: {+    Bahqtrf: "fk6fouc",+    Be2twd7: "fod5ikn",+    Bhrd7zp: "fl43uef",+    Bg96gwp: "faaz57k"+  }+}, {+  d: [".f1warjpf{grid-column-end:middle;}", ".fwu52yu{grid-column-start:middle;}", ".fk6fouc{font-family:var(--fontFamilyBase);}", ".fkhj508{font-size:var(--fontSizeBase300);}", ".figsok6{font-weight:var(--fontWeightRegular);}", ".f1i3iumi{line-height:var(--lineHeightBase300);}", ".fy9rknc{font-size:var(--fontSizeBase200);}", ".fwrc4pm{line-height:var(--lineHeightBase200);}", ".fod5ikn{font-size:var(--fontSizeBase400);}", ".fl43uef{font-weight:var(--fontWeightSemibold);}", ".faaz57k{line-height:var(--lineHeightBase400);}"]+}), Co = (e, o) => {+  const {+    presenceOnly: r,+    size: a,+    textPosition: t+  } = e, n = qo(), c = jo(), l = So();+  let f, i;+  return r ? (a === "extra-small" ? f = e.numTextLines <= 1 && l.caption1 : (a === "extra-large" || a === "huge") && (f = l.subtitle2), o && (t === "before" ? i = l.beforeAlignToPrimary : t === "after" && (i = l.afterAlignToPrimary))) : (a === "huge" || a === "extra-large") && (f = l.subtitle2), {+    primaryTextClassName: b(n, f, i),+    optionalTextClassName: b(c, !r && a === "huge" && l.body1, i)+  };+}, le = /* @__PURE__ */ g.forwardRef((e, o) => {+  const r = bo(e, o);+  return zo(r), A("usePersonaStyles_unstable")(r), po(r);+});+le.displayName = "Persona";+const To = (e, o) => {+  const { appearance: r = "transparent", reserveSelectedTabSpace: a = !0, size: t = "medium" } = e, n = Po(e, o), c = No({+    vertical: n.vertical+  });+  return {+    ...n,+    root: {+      ...c,+      ...n.root+    },+    appearance: r,+    reserveSelectedTabSpace: a,+    size: t+  };+}, Po = (e, o) => {+  const { disabled: r = !1, onTabSelect: a, selectTabOnFocus: t = !1, vertical: n = !1, selectedValue: c, defaultSelectedValue: l, ...f } = e, i = g.useRef(null), [s, d] = ke({+    state: c,+    defaultState: l,+    initialState: void 0+  }), v = g.useRef(void 0), p = g.useRef(void 0);+  g.useEffect(() => {+    p.current = v.current, v.current = s;+  }, [+    s+  ]);+  const h = G((x, T) => {+    d(T.value), a?.(x, T);+  }), j = g.useRef({}), y = G((x) => {+    const T = JSON.stringify(x.value);+    j.current[T] = x;+  }), B = G((x) => {+    delete j.current[JSON.stringify(x.value)];+  }), q = g.useCallback(() => ({+    selectedValue: v.current,+    previousSelectedValue: p.current,+    registeredTabs: j.current+  }), []);+  return {+    components: {+      root: "div"+    },+    root: C({+      ref: U(o, i),+      role: "tablist",+      "aria-orientation": n ? "vertical" : "horizontal",+      ...f+    }, {+      elementType: "div"+    }),+    disabled: r,+    selectTabOnFocus: t,+    selectedValue: s,+    onRegister: y,+    onUnregister: B,+    onSelect: h,+    getRegisteredTabs: q,+    vertical: n+  };+}, No = ({ vertical: e }) => We({+  circular: !0,+  axis: e ? "vertical" : "horizontal",+  memorizeCurrent: !1,+  // eslint-disable-next-line @typescript-eslint/naming-convention+  unstable_hasDefault: !0+}), Ao = {+  appearance: "transparent",+  reserveSelectedTabSpace: !0,+  selectTabOnFocus: !1,+  disabled: !1,+  selectedValue: void 0,+  onRegister: () => {+  },+  onUnregister: () => {+  },+  onSelect: () => {+  },+  getRegisteredTabs: () => ({+    registeredTabs: {}+  }),+  size: "medium",+  vertical: !1+}, Se = he(void 0), _o = Se.Provider, N = (e) => me(Se, (o = Ao) => e(o)), Do = (e, o) => /* @__PURE__ */ k(e.root, {+  children: /* @__PURE__ */ k(_o, {+    value: o.tabList,+    children: e.root.children+  })+}), Fo = {+  root: "fui-TabList"+}, Ho = /* @__PURE__ */ m({+  root: {+    mc9l5x: "f22iagw",+    Beiy3e4: "f1063pyq",+    Bnnss6s: "fi64zpg",+    Eh141a: "flvyvdh",+    qhf8xq: "f10pi13n"+  },+  horizontal: {+    Bt984gj: "f1q9h2pe",+    Beiy3e4: "f1063pyq"+  },+  vertical: {+    Bt984gj: "f1q9h2pe",+    Beiy3e4: "f1vx9l62"+  },+  roundedSmall: {+    i8kkvl: 0,+    Belr9w4: 0,+    rmohyg: "f1eyhf9v"+  },+  rounded: {+    i8kkvl: 0,+    Belr9w4: 0,+    rmohyg: "faqewft"+  }+}, {+  d: [".f22iagw{display:flex;}", ".f1063pyq{flex-direction:row;}", ".fi64zpg{flex-shrink:0;}", ".flvyvdh{flex-wrap:nowrap;}", ".f10pi13n{position:relative;}", ".f1q9h2pe{align-items:stretch;}", ".f1vx9l62{flex-direction:column;}", [".f1eyhf9v{gap:var(--spacingHorizontalSNudge);}", {+    p: -1+  }], [".faqewft{gap:var(--spacingHorizontalS);}", {+    p: -1+  }]]+}), Ro = (e) => {+  "use no memo";+  const {+    appearance: o,+    vertical: r,+    size: a+  } = e, t = Ho(), n = o === "subtle-circular" || o === "filled-circular";+  return e.root.className = b(Fo.root, t.root, r ? t.vertical : t.horizontal, n && (a === "small" ? t.roundedSmall : t.rounded), e.root.className), e;+};+function Io(e) {+  const { appearance: o, reserveSelectedTabSpace: r, disabled: a, selectTabOnFocus: t, selectedValue: n, onRegister: c, onUnregister: l, onSelect: f, getRegisteredTabs: i, size: s, vertical: d } = e;+  return {+    tabList: g.useMemo(() => ({+      appearance: o,+      reserveSelectedTabSpace: r,+      disabled: a,+      selectTabOnFocus: t,+      selectedValue: n,+      onSelect: f,+      onRegister: c,+      onUnregister: l,+      getRegisteredTabs: i,+      size: s,+      vertical: d+    }), [+      o,+      r,+      a,+      t,+      n,+      f,+      c,+      l,+      i,+      s,+      d+    ])+  };+}+const Ce = /* @__PURE__ */ g.forwardRef((e, o) => {+  const r = To(e, o), a = Io(r);+  return Ro(r), A("useTabListStyles_unstable")(r), Do(r, a);+});+Ce.displayName = "TabList";+const Lo = (e, o) => {+  const { content: r } = e, a = Go(e, o), t = Eo(a), n = N((i) => i.appearance), c = N((i) => i.reserveSelectedTabSpace), l = N((i) => {+    var s;+    return (s = i.size) !== null && s !== void 0 ? s : "medium";+  }), f = r && typeof r == "object" ? qr(r, [+    "ref"+  ]) : r;+  return {+    ...a,+    // eslint-disable-next-line @typescript-eslint/no-deprecated+    components: {+      ...a.components,+      contentReservedSpace: "span"+    },+    root: {+      ...t,+      ...a.root+    },+    contentReservedSpace: z(f, {+      renderByDefault: !a.selected && !a.iconOnly && c,+      defaultProps: {+        children: e.children+      },+      elementType: "span"+    }),+    appearance: n,+    size: l+  };+}, Go = (e, o) => {+  const { content: r, disabled: a = !1, icon: t, onClick: n, onFocus: c, value: l, ...f } = e, i = N((w) => w.selectTabOnFocus), s = N((w) => w.disabled), d = N((w) => w.selectedValue === l), v = N((w) => w.onRegister), p = N((w) => w.onUnregister), h = N((w) => w.onSelect), j = N((w) => !!w.vertical), y = s || a, B = g.useRef(null), q = (w) => h(w, {+    value: l+  }), x = G(I(n, q)), T = G(I(c, q));+  g.useEffect(() => (v({+    value: l,+    ref: B+  }), () => {+    p({+      value: l,+      ref: B+    });+  }), [+    v,+    p,+    B,+    l+  ]);+  const _ = z(t, {+    elementType: "span"+  }), M = C(r, {+    defaultProps: {+      children: e.children+    },+    elementType: "span"+  }), S = !!(_?.children && !M.children);+  return {+    components: {+      root: "button",+      icon: "span",+      content: "span",+      contentReservedSpace: "span"+    },+    root: C({+      ref: U(o, B),+      role: "tab",+      type: "button",+      // aria-selected undefined indicates it is not selectable+      // according to https://www.w3.org/TR/wai-aria-1.1/#aria-selected+      "aria-selected": y ? void 0 : `${d}`,+      value: l,+      ...f,+      disabled: y,+      onClick: x,+      onFocus: i ? T : c+    }, {+      elementType: "button"+    }),+    icon: _,+    iconOnly: S,+    content: M,+    disabled: y,+    selected: d,+    value: l,+    vertical: j+  };+}, Eo = ({ selected: e }) => Ve({+  focusable: {+    isDefault: e+  }+}), Wo = (e) => /* @__PURE__ */ D(e.root, {+  children: [+    e.icon && /* @__PURE__ */ k(e.icon, {}),+    !e.iconOnly && /* @__PURE__ */ k(e.content, {}),+    e.contentReservedSpace && /* @__PURE__ */ k(e.contentReservedSpace, {})+  ]+}), de = {+  offsetVar: "--fui-Tab__indicator--offset",+  scaleVar: "--fui-Tab__indicator--scale"+}, Vo = /* @__PURE__ */ m({+  base: {+    B68tc82: 0,+    Bmxbyg5: 0,+    Bpg54ce: "f1gl81tg"+  },+  animated: {+    Ba2ppi3: "fhwpy7i",+    F2fol1: "f6zz20j",+    B1dyfl9: "f1ai4sc1",+    Bu93a1u: "f1rnm8gg",+    Bdasjez: "f1x3cmqg"+  },+  horizontal: {+    sjv3b2: ["fug4aj8", "f1i5xzg7"],+    b1kco5: "f1q7ujh"+  },+  vertical: {+    sjv3b2: "f1hqboyk",+    b1kco5: "f1dxupa6"+  }+}, {+  d: [[".f1gl81tg{overflow:visible;}", {+    p: -1+  }], ".fhwpy7i::after{transition-property:transform;}", ".f6zz20j::after{transition-duration:var(--durationSlow);}", ".f1ai4sc1::after{transition-timing-function:var(--curveDecelerateMax);}", ".fug4aj8::after{transform-origin:left;}", ".f1i5xzg7::after{transform-origin:right;}", ".f1q7ujh::after{transform:translateX(var(--fui-Tab__indicator--offset)) scaleX(var(--fui-Tab__indicator--scale));}", ".f1hqboyk::after{transform-origin:top;}", ".f1dxupa6::after{transform:translateY(var(--fui-Tab__indicator--offset)) scaleY(var(--fui-Tab__indicator--scale));}"],+  m: [["@media (prefers-reduced-motion: reduce){.f1rnm8gg::after{transition-property:none;}}", {+    m: "(prefers-reduced-motion: reduce)"+  }], ["@media (prefers-reduced-motion: reduce){.f1x3cmqg::after{transition-duration:0.01ms;}}", {+    m: "(prefers-reduced-motion: reduce)"+  }]]+}), Mo = (e) => {+  if (e) {+    var o;+    const r = ((o = e.parentElement) === null || o === void 0 ? void 0 : o.getBoundingClientRect()) || {+      x: 0,+      y: 0+    }, a = e.getBoundingClientRect();+    return {+      x: a.x - r.x,+      y: a.y - r.y,+      width: a.width,+      height: a.height+    };+  }+}, ue = (e, o) => {+  var r;+  const a = Q(o) ? (r = e[JSON.stringify(o)]) === null || r === void 0 ? void 0 : r.ref.current : void 0;+  return a ? Mo(a) : void 0;+}, Q = (e) => e != null, Oo = (e) => {+  const {+    disabled: o,+    selected: r,+    vertical: a+  } = e, t = Vo(), [n, c] = g.useState(), [l, f] = g.useState({+    offset: 0,+    scale: 1+  }), i = N((p) => p.getRegisteredTabs), [s] = Me();+  if (r) {+    const {+      previousSelectedValue: p,+      selectedValue: h,+      registeredTabs: j+    } = i();+    if (Q(p) && n !== p) {+      const y = ue(j, p), B = ue(j, h);+      if (B && y) {+        const q = a ? y.y - B.y : y.x - B.x, x = a ? y.height / B.height : y.width / B.width;+        f({+          offset: q,+          scale: x+        }), c(p), s(() => f({+          offset: 0,+          scale: 1+        }));+      }+    }+  } else Q(n) && c(void 0);+  if (o)+    return e;+  const d = l.offset === 0 && l.scale === 1;+  e.root.className = b(e.root.className, r && t.base, r && d && t.animated, r && (a ? t.vertical : t.horizontal));+  const v = {+    [de.offsetVar]: `${l.offset}px`,+    [de.scaleVar]: `${l.scale}`+  };+  return e.root.style = {+    ...v,+    ...e.root.style+  }, e;+}, Z = {+  root: "fui-Tab",+  icon: "fui-Tab__icon",+  content: "fui-Tab__content"+}, Xo = {+  content: "fui-Tab__content--reserved-space"+}, Te = /* @__PURE__ */ m({+  root: {+    Bt984gj: "f122n59",+    mc9l5x: "f13qh94s",+    Bnnss6s: "fi64zpg",+    Bxotwcr: "f1u07yai",+    Budl1dq: "frn2hmy",+    wkccdc: "f1olsevy",+    oeaueh: "f1s6fcnf",+    qhf8xq: "f10pi13n"+  },+  button: {+    Bt984gj: "f122n59",+    Bgfg5da: 0,+    B9xav0g: 0,+    oivjwe: 0,+    Bn0qgzm: 0,+    B4g9neb: 0,+    zhjwy3: 0,+    wvpqe5: 0,+    ibv6hh: 0,+    u1mtju: 0,+    h3c5rm: 0,+    vrafjx: 0,+    Bekrc4i: 0,+    i8vvqc: 0,+    g2u3we: 0,+    icvyot: 0,+    B4j52fo: 0,+    irswps: "f3bhgqh",+    Beyfa6y: 0,+    Bbmb7ep: 0,+    Btl43ni: 0,+    B7oj6ja: 0,+    Dimara: "ft85np5",+    Bceei9c: "f1k6fduh",+    mc9l5x: "f13qh94s",+    Bnnss6s: "fi64zpg",+    Bxotwcr: "f1u07yai",+    Budl1dq: "frn2hmy",+    wkccdc: "f1olsevy",+    Bahqtrf: "fk6fouc",+    Bg96gwp: "f1i3iumi",+    oeaueh: "f1s6fcnf",+    qhf8xq: "f10pi13n",+    B68tc82: 0,+    Bmxbyg5: 0,+    Bpg54ce: "f1a3p1vp",+    B9bfxx9: "f1cxpek8"+  },+  horizontal: {+    Brf1p80: "f4d9j23"+  },+  vertical: {+    Brf1p80: "f1s9ku6b"+  },+  smallHorizontal: {+    i8kkvl: "f14mj54c",+    Byoj8tv: 0,+    uwmqm3: 0,+    z189sj: 0,+    z8tnut: 0,+    B0ocmuz: "f1wmopi4"+  },+  smallVertical: {+    i8kkvl: "f14mj54c",+    Byoj8tv: 0,+    uwmqm3: 0,+    z189sj: 0,+    z8tnut: 0,+    B0ocmuz: "f12or63q"+  },+  mediumHorizontal: {+    i8kkvl: "f1rjii52",+    Byoj8tv: 0,+    uwmqm3: 0,+    z189sj: 0,+    z8tnut: 0,+    B0ocmuz: "f1w08f2p"+  },+  mediumVertical: {+    i8kkvl: "f1rjii52",+    Byoj8tv: 0,+    uwmqm3: 0,+    z189sj: 0,+    z8tnut: 0,+    B0ocmuz: "fymxs25"+  },+  largeHorizontal: {+    i8kkvl: "f1rjii52",+    Byoj8tv: 0,+    uwmqm3: 0,+    z189sj: 0,+    z8tnut: 0,+    B0ocmuz: "f1ssfvub"+  },+  largeVertical: {+    i8kkvl: "f1rjii52",+    Byoj8tv: 0,+    uwmqm3: 0,+    z189sj: 0,+    z8tnut: 0,+    B0ocmuz: "fwkd1rq"+  },+  transparent: {+    De3pzq: "f1c21dwh",+    B95qlz1: "f9rvdkv",+    B7xitij: "f1051ucx",+    Bptxc3x: "fmmjozx",+    Bwqhzpy: "fqhzt5g",+    iyk698: "f7l5cgy",+    cl4aha: "fpkze5g",+    B0q3jbp: "f1iywnoi",+    Be9ayug: "f9n45c4"+  },+  subtle: {+    De3pzq: "fhovq9v",+    B95qlz1: "f1bifk9c",+    B7xitij: "fo6hitd",+    Bptxc3x: "fmmjozx",+    Bwqhzpy: "fqhzt5g",+    iyk698: "f7l5cgy",+    cl4aha: "fpkze5g",+    B0q3jbp: "f1iywnoi",+    Be9ayug: "f9n45c4"+  },+  disabledCursor: {+    Bceei9c: "fdrzuqr"+  },+  disabled: {+    De3pzq: "f1c21dwh",+    Bptxc3x: "fato7r6",+    cl4aha: "fao1bnu"+  },+  selected: {+    Bptxc3x: "f1cadz5z",+    Bwqhzpy: "fwhdxxj",+    iyk698: "fintccb",+    cl4aha: "ffplhdr",+    B0q3jbp: "fjo17wb",+    Be9ayug: "f148789c"+  }+}, {+  d: [".f122n59{align-items:center;}", ".f13qh94s{display:grid;}", ".fi64zpg{flex-shrink:0;}", ".f1u07yai{grid-auto-flow:column;}", ".frn2hmy{grid-template-columns:auto;}", ".f1olsevy{grid-template-rows:auto;}", ".f1s6fcnf{outline-style:none;}", ".f10pi13n{position:relative;}", [".f3bhgqh{border:none;}", {+    p: -2+  }], [".ft85np5{border-radius:var(--borderRadiusMedium);}", {+    p: -1+  }], ".f1k6fduh{cursor:pointer;}", ".fk6fouc{font-family:var(--fontFamilyBase);}", ".f1i3iumi{line-height:var(--lineHeightBase300);}", [".f1a3p1vp{overflow:hidden;}", {+    p: -1+  }], ".f1cxpek8{text-transform:none;}", ".f4d9j23{justify-content:center;}", ".f1s9ku6b{justify-content:start;}", ".f14mj54c{column-gap:var(--spacingHorizontalXXS);}", [".f1wmopi4{padding:var(--spacingVerticalSNudge) var(--spacingHorizontalSNudge);}", {+    p: -1+  }], [".f12or63q{padding:var(--spacingVerticalXXS) var(--spacingHorizontalSNudge);}", {+    p: -1+  }], ".f1rjii52{column-gap:var(--spacingHorizontalSNudge);}", [".f1w08f2p{padding:var(--spacingVerticalM) var(--spacingHorizontalMNudge);}", {+    p: -1+  }], [".fymxs25{padding:var(--spacingVerticalSNudge) var(--spacingHorizontalMNudge);}", {+    p: -1+  }], [".f1ssfvub{padding:var(--spacingVerticalL) var(--spacingHorizontalMNudge);}", {+    p: -1+  }], [".fwkd1rq{padding:var(--spacingVerticalS) var(--spacingHorizontalMNudge);}", {+    p: -1+  }], ".f1c21dwh{background-color:var(--colorTransparentBackground);}", ".f9rvdkv:enabled:hover{background-color:var(--colorTransparentBackgroundHover);}", ".f1051ucx:enabled:active{background-color:var(--colorTransparentBackgroundPressed);}", ".fmmjozx .fui-Tab__icon{color:var(--colorNeutralForeground2);}", ".fqhzt5g:enabled:hover .fui-Tab__icon{color:var(--colorNeutralForeground2Hover);}", ".f7l5cgy:enabled:active .fui-Tab__icon{color:var(--colorNeutralForeground2Pressed);}", ".fpkze5g .fui-Tab__content{color:var(--colorNeutralForeground2);}", ".f1iywnoi:enabled:hover .fui-Tab__content{color:var(--colorNeutralForeground2Hover);}", ".f9n45c4:enabled:active .fui-Tab__content{color:var(--colorNeutralForeground2Pressed);}", ".fhovq9v{background-color:var(--colorSubtleBackground);}", ".f1bifk9c:enabled:hover{background-color:var(--colorSubtleBackgroundHover);}", ".fo6hitd:enabled:active{background-color:var(--colorSubtleBackgroundPressed);}", ".fdrzuqr{cursor:not-allowed;}", ".fato7r6 .fui-Tab__icon{color:var(--colorNeutralForegroundDisabled);}", ".fao1bnu .fui-Tab__content{color:var(--colorNeutralForegroundDisabled);}", ".f1cadz5z .fui-Tab__icon{color:var(--colorCompoundBrandForeground1);}", ".fwhdxxj:enabled:hover .fui-Tab__icon{color:var(--colorCompoundBrandForeground1Hover);}", ".fintccb:enabled:active .fui-Tab__icon{color:var(--colorCompoundBrandForeground1Pressed);}", ".ffplhdr .fui-Tab__content{color:var(--colorNeutralForeground1);}", ".fjo17wb:enabled:hover .fui-Tab__content{color:var(--colorNeutralForeground1Hover);}", ".f148789c:enabled:active .fui-Tab__content{color:var(--colorNeutralForeground1Pressed);}"]+}), Uo = /* @__PURE__ */ m({+  base: {+    Beyfa6y: 0,+    Bbmb7ep: 0,+    Btl43ni: 0,+    B7oj6ja: 0,+    Dimara: "f44lkw9",+    Bgfg5da: 0,+    B9xav0g: 0,+    oivjwe: 0,+    Bn0qgzm: 0,+    B4g9neb: 0,+    zhjwy3: 0,+    wvpqe5: 0,+    ibv6hh: 0,+    u1mtju: 0,+    h3c5rm: 0,+    vrafjx: 0,+    Bekrc4i: 0,+    i8vvqc: 0,+    g2u3we: 0,+    icvyot: 0,+    B4j52fo: 0,+    irswps: "fp7rvkm",+    Bptxc3x: "ftorr8m",+    cl4aha: "f16lqpmv"+  },+  small: {+    Dbcxam: 0,+    rjzwhg: 0,+    Bblux5w: "fzklhed"+  },+  medium: {+    Dbcxam: 0,+    rjzwhg: 0,+    Bblux5w: "f1j721cc"+  },+  large: {+    Dbcxam: 0,+    rjzwhg: 0,+    Bblux5w: "frx9knr"+  },+  subtle: {+    De3pzq: "fhovq9v",+    sj55zd: "fkfq4zb",+    B95qlz1: "f1bifk9c",+    Eo63ln: 0,+    r9osk6: 0,+    Itrz8y: 0,+    zeg6vx: 0,+    l65xgk: 0,+    Bw4olcx: 0,+    Folb0i: 0,+    I2h8y4: 0,+    Bgxgoyi: 0,+    Bvlkotb: 0,+    Fwyncl: 0,+    Byh5edv: 0,+    Becqvjq: 0,+    uumbiq: 0,+    B73q3dg: 0,+    Bblwbaf: 0,+    B0ezav: "ft57sj0",+    r4wkhp: "f1fcoy83",+    B7xitij: "fo6hitd",+    d3wsvi: 0,+    Hdqn7s: 0,+    zu5y1p: 0,+    owqphb: 0,+    g9c53k: 0,+    Btmu08z: 0,+    Bthxvy6: 0,+    gluvuq: 0,+    tb88gp: 0,+    wns6jk: 0,+    kdfdk4: 0,+    Bbw008l: 0,+    Bayi1ib: 0,+    B1kkfu3: 0,+    J1oqyp: 0,+    kem6az: 0,+    goa3yj: "fhn220o",+    p743kt: "f15qf7sh",+    wmvzou: 0,+    sc4o1m: 0,+    wymq9i: 0,+    u9orzk: 0,+    puiv5t: 0,+    Bosien3: 0,+    b2z72d: 0,+    Beulxaw: 0,+    B57pkaw: 0,+    Jcjdmf: 0,+    B8qgbzl: 0,+    Bbmb0sr: 0,+    B14q8qp: 0,+    Bcq6wej: 0,+    Byz1pjr: 0,+    kr9cjb: 0,+    Ff9ifp: "f1mljprk"+  },+  subtleSelected: {+    De3pzq: "f16xkysk",+    Bgfg5da: 0,+    B9xav0g: 0,+    oivjwe: 0,+    Bn0qgzm: 0,+    B4g9neb: 0,+    zhjwy3: 0,+    wvpqe5: 0,+    ibv6hh: 0,+    u1mtju: 0,+    h3c5rm: 0,+    vrafjx: 0,+    Bekrc4i: 0,+    i8vvqc: 0,+    g2u3we: 0,+    icvyot: 0,+    B4j52fo: 0,+    irswps: "f1c2pc3t",+    sj55zd: "faj9fo0",+    B95qlz1: "fsm7zmf",+    Eo63ln: 0,+    r9osk6: 0,+    Itrz8y: 0,+    zeg6vx: 0,+    l65xgk: 0,+    Bw4olcx: 0,+    Folb0i: 0,+    I2h8y4: 0,+    Bgxgoyi: 0,+    Bvlkotb: 0,+    Fwyncl: 0,+    Byh5edv: 0,+    Becqvjq: 0,+    uumbiq: 0,+    B73q3dg: 0,+    Bblwbaf: 0,+    B0ezav: "f1wo0sfq",+    r4wkhp: "f1afuynh",+    B7xitij: "f94ddyl",+    d3wsvi: 0,+    Hdqn7s: 0,+    zu5y1p: 0,+    owqphb: 0,+    g9c53k: 0,+    Btmu08z: 0,+    Bthxvy6: 0,+    gluvuq: 0,+    tb88gp: 0,+    wns6jk: 0,+    kdfdk4: 0,+    Bbw008l: 0,+    Bayi1ib: 0,+    B1kkfu3: 0,+    J1oqyp: 0,+    kem6az: 0,+    goa3yj: "fmle6oo",+    p743kt: "f1d3itm4",+    wmvzou: 0,+    sc4o1m: 0,+    wymq9i: 0,+    u9orzk: 0,+    puiv5t: 0,+    Bosien3: 0,+    b2z72d: 0,+    Beulxaw: 0,+    B57pkaw: 0,+    Jcjdmf: 0,+    B8qgbzl: 0,+    Bbmb0sr: 0,+    B14q8qp: 0,+    Bcq6wej: 0,+    Byz1pjr: 0,+    kr9cjb: 0,+    Ff9ifp: "f1e9l2u"+  },+  subtleDisabled: {+    De3pzq: "fhovq9v",+    sj55zd: "f1s2aq7o"+  },+  subtleDisabledSelected: {+    De3pzq: "f1bg9a2p",+    Bgfg5da: 0,+    B9xav0g: 0,+    oivjwe: 0,+    Bn0qgzm: 0,+    B4g9neb: 0,+    zhjwy3: 0,+    wvpqe5: 0,+    ibv6hh: 0,+    u1mtju: 0,+    h3c5rm: 0,+    vrafjx: 0,+    Bekrc4i: 0,+    i8vvqc: 0,+    g2u3we: 0,+    icvyot: 0,+    B4j52fo: 0,+    irswps: "fegtqic",+    sj55zd: "f1s2aq7o"+  },+  filled: {+    De3pzq: "f16xq7d1",+    sj55zd: "fkfq4zb",+    B95qlz1: "fwwxidx",+    r4wkhp: "f1fcoy83",+    B7xitij: "f14i52sd",+    p743kt: "f15qf7sh",+    Hhssn: "f1cpi5f4",+    uaurb9: "f6pj1s0",+    B401qx7: "f12sz5kj",+    Buyp1jb: "f17588c3",+    gsp74p: "fnthgdt"+  },+  filledSelected: {+    De3pzq: "ffp7eso",+    sj55zd: "f1phragk",+    B95qlz1: "f1lm9dni",+    r4wkhp: "f1mn5ei1",+    B7xitij: "f1g6ncd0",+    p743kt: "fl71aob",+    Gedr8k: "f14zl92z",+    Bm69vlq: "f16zy3eu",+    Bodipah: "f1gdgb7p",+    B5kpen0: "f1tua9ng"+  },+  filledDisabled: {+    De3pzq: "f1bg9a2p",+    sj55zd: "f1s2aq7o"+  },+  filledDisabledSelected: {+    De3pzq: "f1bg9a2p",+    Bgfg5da: 0,+    B9xav0g: 0,+    oivjwe: 0,+    Bn0qgzm: 0,+    B4g9neb: 0,+    zhjwy3: 0,+    wvpqe5: 0,+    ibv6hh: 0,+    u1mtju: 0,+    h3c5rm: 0,+    vrafjx: 0,+    Bekrc4i: 0,+    i8vvqc: 0,+    g2u3we: 0,+    icvyot: 0,+    B4j52fo: 0,+    irswps: "fegtqic",+    sj55zd: "f1s2aq7o"+  }+}, {+  d: [[".f44lkw9{border-radius:var(--borderRadiusCircular);}", {+    p: -1+  }], [".fp7rvkm{border:solid var(--strokeWidthThin) var(--colorTransparentStroke);}", {+    p: -2+  }], ".ftorr8m .fui-Tab__icon{color:inherit;}", ".f16lqpmv .fui-Tab__content{color:inherit;}", [".fzklhed{padding-block:calc(var(--spacingVerticalXXS) - var(--strokeWidthThin));}", {+    p: -1+  }], [".f1j721cc{padding-block:calc(var(--spacingVerticalSNudge) - var(--strokeWidthThin));}", {+    p: -1+  }], [".frx9knr{padding-block:calc(var(--spacingVerticalS) - var(--strokeWidthThin));}", {+    p: -1+  }], ".fhovq9v{background-color:var(--colorSubtleBackground);}", ".fkfq4zb{color:var(--colorNeutralForeground2);}", ".f1bifk9c:enabled:hover{background-color:var(--colorSubtleBackgroundHover);}", [".ft57sj0:enabled:hover{border:solid var(--strokeWidthThin) var(--colorNeutralStroke1Hover);}", {+    p: -2+  }], ".f1fcoy83:enabled:hover{color:var(--colorNeutralForeground2Hover);}", ".fo6hitd:enabled:active{background-color:var(--colorSubtleBackgroundPressed);}", [".fhn220o:enabled:active{border:solid var(--strokeWidthThin) var(--colorNeutralStroke1Pressed);}", {+    p: -2+  }], ".f15qf7sh:enabled:active{color:var(--colorNeutralForeground2Pressed);}", ".f16xkysk{background-color:var(--colorBrandBackground2);}", [".f1c2pc3t{border:solid var(--strokeWidthThin) var(--colorCompoundBrandStroke);}", {+    p: -2+  }], ".faj9fo0{color:var(--colorBrandForeground2);}", ".fsm7zmf:enabled:hover{background-color:var(--colorBrandBackground2Hover);}", [".f1wo0sfq:enabled:hover{border:solid var(--strokeWidthThin) var(--colorCompoundBrandStrokeHover);}", {+    p: -2+  }], ".f1afuynh:enabled:hover{color:var(--colorBrandForeground2Hover);}", ".f94ddyl:enabled:active{background-color:var(--colorBrandBackground2Pressed);}", [".fmle6oo:enabled:active{border:solid var(--strokeWidthThin) var(--colorCompoundBrandStrokePressed);}", {+    p: -2+  }], ".f1d3itm4:enabled:active{color:var(--colorBrandForeground2Pressed);}", ".f1s2aq7o{color:var(--colorNeutralForegroundDisabled);}", ".f1bg9a2p{background-color:var(--colorNeutralBackgroundDisabled);}", [".fegtqic{border:solid var(--strokeWidthThin) var(--colorNeutralStrokeDisabled);}", {+    p: -2+  }], ".f16xq7d1{background-color:var(--colorNeutralBackground3);}", ".fwwxidx:enabled:hover{background-color:var(--colorNeutralBackground3Hover);}", ".f14i52sd:enabled:active{background-color:var(--colorNeutralBackground3Pressed);}", ".ffp7eso{background-color:var(--colorBrandBackground);}", ".f1phragk{color:var(--colorNeutralForegroundOnBrand);}", ".f1lm9dni:enabled:hover{background-color:var(--colorBrandBackgroundHover);}", ".f1mn5ei1:enabled:hover{color:var(--colorNeutralForegroundOnBrand);}", ".f1g6ncd0:enabled:active{background-color:var(--colorBrandBackgroundPressed);}", ".fl71aob:enabled:active{color:var(--colorNeutralForegroundOnBrand);}", [".fegtqic{border:solid var(--strokeWidthThin) var(--colorNeutralStrokeDisabled);}", {+    p: -2+  }]],+  m: [["@media (forced-colors: active){.f1mljprk{border:solid var(--strokeWidthThin) Canvas;}}", {+    p: -2,+    m: "(forced-colors: active)"+  }], ["@media (forced-colors: active){.f1e9l2u{border:solid var(--strokeWidthThin) Highlight;}}", {+    p: -2,+    m: "(forced-colors: active)"+  }], ["@media (forced-colors: active){.f1cpi5f4:enabled:hover{background-color:Highlight;}}", {+    m: "(forced-colors: active)"+  }], ["@media (forced-colors: active){.f6pj1s0:enabled:hover{forced-color-adjust:none;}}", {+    m: "(forced-colors: active)"+  }], ["@media (forced-colors: active){.f12sz5kj:enabled:hover .fui-Tab__content{color:HighlightText;}}", {+    m: "(forced-colors: active)"+  }], ["@media (forced-colors: active){.f17588c3:enabled:hover .fui-Icon-filled{color:HighlightText;}}", {+    m: "(forced-colors: active)"+  }], ["@media (forced-colors: active){.fnthgdt:enabled:hover .fui-Icon-regular{color:HighlightText;}}", {+    m: "(forced-colors: active)"+  }], ["@media (forced-colors: active){.f14zl92z:enabled{background-color:ButtonText;}}", {+    m: "(forced-colors: active)"+  }], ["@media (forced-colors: active){.f16zy3eu:enabled .fui-Tab__content{color:ButtonFace;}}", {+    m: "(forced-colors: active)"+  }], ["@media (forced-colors: active){.f1gdgb7p:enabled .fui-Tab__content{forced-color-adjust:none;}}", {+    m: "(forced-colors: active)"+  }], ["@media (forced-colors: active){.f1tua9ng:enabled .fui-Tab__icon{color:ButtonFace;}}", {+    m: "(forced-colors: active)"+  }]]+}), $o = /* @__PURE__ */ m({+  base: {+    B8q5s1w: "f8hki3x",+    Bci5o5g: ["f1d2448m", "ffh67wi"],+    n8qw10: "f1bjia2o",+    Bdrgwmp: ["ffh67wi", "f1d2448m"],+    Bn4voq9: "f1p7hgxw",+    Bfpq7zp: "f1way5bb",+    g9k6zt: "f9znhxp",+    j6ew2k: ["fqa318h", "fqa318h"],+    Bhxq17a: "f1vjpng2"+  },+  circular: {+    B8q5s1w: "f8hki3x",+    Bci5o5g: ["f1d2448m", "ffh67wi"],+    n8qw10: "f1bjia2o",+    Bdrgwmp: ["ffh67wi", "f1d2448m"],+    Bn4voq9: "f1p7hgxw",+    Bfpq7zp: "f1way5bb",+    g9k6zt: "f9znhxp",+    j6ew2k: ["fzgyhws", "fqxug60"],+    Bhxq17a: "f1vjpng2"+  }+}, {+  d: [".f8hki3x[data-fui-focus-visible]{border-top-color:transparent;}", ".f1d2448m[data-fui-focus-visible]{border-right-color:transparent;}", ".ffh67wi[data-fui-focus-visible]{border-left-color:transparent;}", ".f1bjia2o[data-fui-focus-visible]{border-bottom-color:transparent;}", ".f1p7hgxw[data-fui-focus-visible]{outline-width:var(--strokeWidthThick);}", ".f1way5bb[data-fui-focus-visible]{outline-color:transparent;}", ".f9znhxp[data-fui-focus-visible]{outline-style:solid;}", ".fqa318h[data-fui-focus-visible]{box-shadow:var(--shadow4),0 0 0 var(--strokeWidthThick) var(--colorStrokeFocus2);}", ".f1vjpng2[data-fui-focus-visible]{z-index:1;}", ".fzgyhws[data-fui-focus-visible]{box-shadow:var(--shadow4),0 0 0 var(--strokeWidthThick) var(--colorStrokeFocus2),0 0 0 var(--strokeWidthThin) var(--colorNeutralStrokeOnBrand) inset;}", ".fqxug60[data-fui-focus-visible]{box-shadow:var(--shadow4),0 0 0 var(--strokeWidthThick) var(--colorStrokeFocus2),0 0 0 var(--strokeWidthThin) var(--colorNeutralStrokeOnBrand) inset;}"]+}), Jo = /* @__PURE__ */ m({+  base: {+    az7l2e: "fhw179n",+    vqofr: 0,+    Bv4n3vi: 0,+    Bgqb9hq: 0,+    B0uxbk8: 0,+    Bf3jju6: "fg9j5n4",+    amg5m6: "f1kmhr4c",+    zkfqfm: "fl1ydde",+    Bkydozb: "f1y7maxz",+    Bka2azo: 0,+    vzq8l0: 0,+    csmgbd: 0,+    Br4ovkg: 0,+    aelrif: "fceyvr4",+    y36c18: "f16cxu0",+    B1ctymy: "f1nwgacf",+    xzc5d: "fm6alxz",+    h5yqg8: "fhx32z1"+  },+  disabled: {+    az7l2e: "f1ut20fw",+    Bkydozb: "fhrzcfn",+    xzc5d: "fw15awd",+    h5yqg8: "faqmq51"+  },+  smallHorizontal: {+    lawp4y: "fchca7p",+    Baz25je: "f1r53b5e",+    Fbdkly: ["f1s6rxz5", "fo35v8s"],+    mdwyqc: ["fo35v8s", "f1s6rxz5"]+  },+  smallVertical: {+    lawp4y: "fze4zud",+    Fbdkly: ["f1fzr1x6", "f1f351id"],+    Bciustq: "fdp32p8",+    Ccq8qp: "f1aij3q"+  },+  mediumHorizontal: {+    lawp4y: "fchca7p",+    Baz25je: "f1s2r9ax",+    Fbdkly: ["f1o0nnkk", "fxb7rol"],+    mdwyqc: ["fxb7rol", "f1o0nnkk"]+  },+  mediumVertical: {+    lawp4y: "f17jracn",+    Fbdkly: ["f1fzr1x6", "f1f351id"],+    Bciustq: "f117lcb2",+    Ccq8qp: "f1aij3q"+  },+  largeHorizontal: {+    lawp4y: "fchca7p",+    Baz25je: "f1s2r9ax",+    Fbdkly: ["f1o0nnkk", "fxb7rol"],+    mdwyqc: ["fxb7rol", "f1o0nnkk"]+  },+  largeVertical: {+    lawp4y: "fel9d3z",+    Fbdkly: ["f1fzr1x6", "f1f351id"],+    Bciustq: "f6vqlre",+    Ccq8qp: "f1aij3q"+  }+}, {+  h: [".fhw179n:hover::before{background-color:var(--colorNeutralStroke1Hover);}", [".fg9j5n4:hover::before{border-radius:var(--borderRadiusCircular);}", {+    p: -1+  }], '.f1kmhr4c:hover::before{content:"";}', ".fl1ydde:hover::before{position:absolute;}", ".f1ut20fw:hover::before{background-color:var(--colorTransparentStroke);}"],+  a: [".f1y7maxz:active::before{background-color:var(--colorNeutralStroke1Pressed);}", [".fceyvr4:active::before{border-radius:var(--borderRadiusCircular);}", {+    p: -1+  }], '.f16cxu0:active::before{content:"";}', ".f1nwgacf:active::before{position:absolute;}", ".fhrzcfn:active::before{background-color:var(--colorTransparentStroke);}"],+  m: [["@media (forced-colors: active){.fm6alxz:hover::before{background-color:Highlight;}}", {+    m: "(forced-colors: active)"+  }], ["@media (forced-colors: active){.fhx32z1:active::before{background-color:Highlight;}}", {+    m: "(forced-colors: active)"+  }], ["@media (forced-colors: active){.fw15awd:hover::before{background-color:transparent;}}", {+    m: "(forced-colors: active)"+  }], ["@media (forced-colors: active){.faqmq51:active::before{background-color:transparent;}}", {+    m: "(forced-colors: active)"+  }]],+  d: [".fchca7p::before{bottom:0;}", ".f1r53b5e::before{height:var(--strokeWidthThick);}", ".f1s6rxz5::before{left:var(--spacingHorizontalSNudge);}", ".fo35v8s::before{right:var(--spacingHorizontalSNudge);}", ".fze4zud::before{bottom:var(--spacingVerticalXS);}", ".f1fzr1x6::before{left:0;}", ".f1f351id::before{right:0;}", ".fdp32p8::before{top:var(--spacingVerticalXS);}", ".f1aij3q::before{width:var(--strokeWidthThicker);}", ".f1s2r9ax::before{height:var(--strokeWidthThicker);}", ".f1o0nnkk::before{left:var(--spacingHorizontalM);}", ".fxb7rol::before{right:var(--spacingHorizontalM);}", ".f17jracn::before{bottom:var(--spacingVerticalS);}", ".f117lcb2::before{top:var(--spacingVerticalS);}", ".fel9d3z::before{bottom:var(--spacingVerticalMNudge);}", ".f6vqlre::before{top:var(--spacingVerticalMNudge);}"]+}), Ko = /* @__PURE__ */ m({+  base: {+    Bjyk6c5: "f1rp0jgh",+    d9w3h3: 0,+    B3778ie: 0,+    B4j8arr: 0,+    Bl18szs: 0,+    Blrzh8d: "f3b9emi",+    Bsft5z2: "f13zj6fq",+    E3zdtr: "f1mdlcz9"+  },+  selected: {+    Bjyk6c5: "f1ksivud",+    Bej4dhw: "f1476jrx",+    B7wqxwa: "f18q216b",+    Hwb57: "f1wf6u82",+    Beg08s0: "f1xwit7m",+    Bo27r1v: "f1ksfgwi"+  },+  disabled: {+    Bjyk6c5: "f13lkzet"+  },+  smallHorizontal: {+    By385i5: "fo72kxq",+    Dlnsje: "f9bb2ob",+    Eqx8gd: ["f1q70ajw", "f18rbzdx"],+    B1piin3: ["f18rbzdx", "f1q70ajw"]+  },+  smallVertical: {+    By385i5: "fqbue9b",+    Eqx8gd: ["f1n6gb5g", "f15yvnhg"],+    bn5sak: "fk1klkt",+    a2br6o: "f1o25lip"+  },+  mediumHorizontal: {+    By385i5: "fo72kxq",+    Dlnsje: "f1vx7lu8",+    Eqx8gd: ["fna7m5n", "f1oxpfwv"],+    B1piin3: ["f1oxpfwv", "fna7m5n"]+  },+  mediumVertical: {+    By385i5: "fipylg0",+    Eqx8gd: ["f1n6gb5g", "f15yvnhg"],+    bn5sak: "fqchiol",+    a2br6o: "f1o25lip"+  },+  largeHorizontal: {+    By385i5: "fo72kxq",+    Dlnsje: "f1vx7lu8",+    Eqx8gd: ["fna7m5n", "f1oxpfwv"],+    B1piin3: ["f1oxpfwv", "fna7m5n"]+  },+  largeVertical: {+    By385i5: "f1w7dm5g",+    Eqx8gd: ["f1n6gb5g", "f15yvnhg"],+    bn5sak: "f1p6em4m",+    a2br6o: "f1o25lip"+  }+}, {+  d: [".f1rp0jgh::after{background-color:var(--colorTransparentStroke);}", [".f3b9emi::after{border-radius:var(--borderRadiusCircular);}", {+    p: -1+  }], '.f13zj6fq::after{content:"";}', ".f1mdlcz9::after{position:absolute;}", ".f1ksivud::after{background-color:var(--colorCompoundBrandStroke);}", ".f1476jrx:enabled:hover::after{background-color:var(--colorCompoundBrandStrokeHover);}", ".f18q216b:enabled:active::after{background-color:var(--colorCompoundBrandStrokePressed);}", ".f13lkzet::after{background-color:var(--colorNeutralForegroundDisabled);}", ".fo72kxq::after{bottom:0;}", ".f9bb2ob::after{height:var(--strokeWidthThick);}", ".f1q70ajw::after{left:var(--spacingHorizontalSNudge);}", ".f18rbzdx::after{right:var(--spacingHorizontalSNudge);}", ".fqbue9b::after{bottom:var(--spacingVerticalXS);}", ".f1n6gb5g::after{left:0;}", ".f15yvnhg::after{right:0;}", ".fk1klkt::after{top:var(--spacingVerticalXS);}", ".f1o25lip::after{width:var(--strokeWidthThicker);}", ".f1vx7lu8::after{height:var(--strokeWidthThicker);}", ".fna7m5n::after{left:var(--spacingHorizontalM);}", ".f1oxpfwv::after{right:var(--spacingHorizontalM);}", ".fipylg0::after{bottom:var(--spacingVerticalS);}", ".fqchiol::after{top:var(--spacingVerticalS);}", ".f1w7dm5g::after{bottom:var(--spacingVerticalMNudge);}", ".f1p6em4m::after{top:var(--spacingVerticalMNudge);}"],+  m: [["@media (forced-colors: active){.f1wf6u82::after{background-color:ButtonText;}}", {+    m: "(forced-colors: active)"+  }], ["@media (forced-colors: active){.f1xwit7m:enabled:hover::after{background-color:ButtonText;}}", {+    m: "(forced-colors: active)"+  }], ["@media (forced-colors: active){.f1ksfgwi:enabled:active::after{background-color:ButtonText;}}", {+    m: "(forced-colors: active)"+  }]]+}), Yo = /* @__PURE__ */ m({+  base: {+    Br312pm: "fwpfdsa",+    Ijaq50: "f16hsg94",+    Bt984gj: "f122n59",+    mc9l5x: "ftuwxu6",+    Brf1p80: "f4d9j23",+    B68tc82: 0,+    Bmxbyg5: 0,+    Bpg54ce: "f1a3p1vp",+    D0sxk3: "f16u1re",+    t6yez3: "f8bsbmo"+  },+  small: {+    Be2twd7: "fe5j1ua",+    Bqenvij: "fjamq6b",+    a9b677: "f64fuq3"+  },+  medium: {+    Be2twd7: "fe5j1ua",+    Bqenvij: "fjamq6b",+    a9b677: "f64fuq3"+  },+  large: {+    Be2twd7: "f1rt2boy",+    Bqenvij: "frvgh55",+    a9b677: "fq4mcun"+  },+  selected: {+    D0sxk3: "fxoiby5",+    t6yez3: "f15q0o9g"+  }+}, {+  d: [".fwpfdsa{grid-column-start:1;}", ".f16hsg94{grid-row-start:1;}", ".f122n59{align-items:center;}", ".ftuwxu6{display:inline-flex;}", ".f4d9j23{justify-content:center;}", [".f1a3p1vp{overflow:hidden;}", {+    p: -1+  }], ".f16u1re .fui-Icon-filled{display:none;}", ".f8bsbmo .fui-Icon-regular{display:inline;}", ".fe5j1ua{font-size:20px;}", ".fjamq6b{height:20px;}", ".f64fuq3{width:20px;}", ".f1rt2boy{font-size:24px;}", ".frvgh55{height:24px;}", ".fq4mcun{width:24px;}", ".fxoiby5 .fui-Icon-filled{display:inline;}", ".f15q0o9g .fui-Icon-regular{display:none;}"]+}), Qo = /* @__PURE__ */ m({+  base: {+    Bahqtrf: "fk6fouc",+    Be2twd7: "fkhj508",+    Bhrd7zp: "figsok6",+    Bg96gwp: "f1i3iumi",+    B68tc82: 0,+    Bmxbyg5: 0,+    Bpg54ce: "f1a3p1vp",+    Byoj8tv: 0,+    uwmqm3: 0,+    z189sj: 0,+    z8tnut: 0,+    B0ocmuz: "f1bwptpd"+  },+  selected: {+    Bahqtrf: "fk6fouc",+    Be2twd7: "fkhj508",+    Bhrd7zp: "fl43uef",+    Bg96gwp: "f1i3iumi"+  },+  large: {+    Bahqtrf: "fk6fouc",+    Be2twd7: "fod5ikn",+    Bhrd7zp: "figsok6",+    Bg96gwp: "faaz57k"+  },+  largeSelected: {+    Bahqtrf: "fk6fouc",+    Be2twd7: "fod5ikn",+    Bhrd7zp: "fl43uef",+    Bg96gwp: "faaz57k"+  },+  noIconBefore: {+    Br312pm: "fwpfdsa",+    Ijaq50: "f16hsg94"+  },+  iconBefore: {+    Br312pm: "fd46tj4",+    Ijaq50: "f16hsg94"+  },+  placeholder: {+    Bcdw1i0: "fd7fpy0"+  }+}, {+  d: [".fk6fouc{font-family:var(--fontFamilyBase);}", ".fkhj508{font-size:var(--fontSizeBase300);}", ".figsok6{font-weight:var(--fontWeightRegular);}", ".f1i3iumi{line-height:var(--lineHeightBase300);}", [".f1a3p1vp{overflow:hidden;}", {+    p: -1+  }], [".f1bwptpd{padding:var(--spacingVerticalNone) var(--spacingHorizontalXXS);}", {+    p: -1+  }], ".fl43uef{font-weight:var(--fontWeightSemibold);}", ".fod5ikn{font-size:var(--fontSizeBase400);}", ".faaz57k{line-height:var(--lineHeightBase400);}", ".fwpfdsa{grid-column-start:1;}", ".f16hsg94{grid-row-start:1;}", ".fd46tj4{grid-column-start:2;}", ".fd7fpy0{visibility:hidden;}"]+}), Zo = (e) => {+  "use no memo";+  return ea(e), ra(e, e.root), oa(e), e;+}, ea = (e) => {+  "use no memo";+  const o = Te(), r = Jo(), a = Ko(), {+    appearance: t,+    disabled: n,+    selected: c,+    size: l,+    vertical: f+  } = e, i = [Z.root, o.root];+  return t !== "subtle-circular" && t !== "filled-circular" && i.push(+    // pending indicator (before pseudo element)+    r.base,+    l === "small" && (f ? r.smallVertical : r.smallHorizontal),+    l === "medium" && (f ? r.mediumVertical : r.mediumHorizontal),+    l === "large" && (f ? r.largeVertical : r.largeHorizontal),+    n && r.disabled,+    // active indicator (after pseudo element)+    c && a.base,+    c && !n && a.selected,+    c && l === "small" && (f ? a.smallVertical : a.smallHorizontal),+    c && l === "medium" && (f ? a.mediumVertical : a.mediumHorizontal),+    c && l === "large" && (f ? a.largeVertical : a.largeHorizontal),+    c && n && a.disabled+  ), e.root.className = b(...i, e.root.className), Oo(e), e;+}, ra = (e, o) => {+  "use no memo";+  const r = Te(), a = $o(), t = Uo(), {+    appearance: n,+    disabled: c,+    selected: l,+    size: f,+    vertical: i+  } = e, s = n === "subtle-circular", d = n === "filled-circular", v = s || d, p = [+    t.base,+    a.circular,+    // sizes+    f === "small" && t.small,+    f === "medium" && t.medium,+    f === "large" && t.large,+    // subtle-circular appearance+    s && t.subtle,+    l && s && t.subtleSelected,+    c && s && t.subtleDisabled,+    l && c && s && t.subtleDisabledSelected,+    // filled-circular appearance+    d && t.filled,+    l && d && t.filledSelected,+    c && d && t.filledDisabled,+    l && c && d && t.filledDisabledSelected+  ], h = [a.base, !c && n === "subtle" && r.subtle, !c && n === "transparent" && r.transparent, !c && l && r.selected, c && r.disabled];+  return o.className = b(+    r.button,+    // orientation+    i ? r.vertical : r.horizontal,+    // size+    f === "small" && (i ? r.smallVertical : r.smallHorizontal),+    f === "medium" && (i ? r.mediumVertical : r.mediumHorizontal),+    f === "large" && (i ? r.largeVertical : r.largeHorizontal),+    ...v ? p : h,+    c && r.disabledCursor,+    o.className+  ), e;+}, oa = (e) => {+  "use no memo";+  const o = Yo(), r = Qo(), {+    selected: a,+    size: t+  } = e;+  return e.icon && (e.icon.className = b(Z.icon, o.base, o[t], a && o.selected, e.icon.className)), e.contentReservedSpace && (e.contentReservedSpace.className = b(Xo.content, r.base, t === "large" ? r.largeSelected : r.selected, e.icon ? r.iconBefore : r.noIconBefore, r.placeholder, e.content.className), e.contentReservedSpaceClassName = e.contentReservedSpace.className), e.content.className = b(Z.content, r.base, t === "large" && r.large, a && (t === "large" ? r.largeSelected : r.selected), e.icon ? r.iconBefore : r.noIconBefore, e.content.className), e;+}, ee = /* @__PURE__ */ g.forwardRef((e, o) => {+  const r = Lo(e, o);+  return Zo(r), A("useTabStyles_unstable")(r), Wo(r);+});+ee.displayName = "Tab";+const aa = (e, { referenceLabel: o, referenceId: r }, a) => {+  const { checkbox: t = {}, onSelectionChange: n, floatingAction: c, onClick: l, onKeyDown: f, disabled: i } = e, { findAllFocusable: s } = Oe(), d = g.useRef(null), [v, p] = ke({+    state: e.selected,+    defaultState: e.defaultSelected,+    initialState: !1+  }), h = [+    e.selected,+    e.defaultSelected,+    n+  ].some((S) => typeof S < "u"), [j, y] = g.useState(!1), B = g.useCallback((S) => {+    if (!a.current)+      return !1;+    const w = s(a.current), fe = S.target, Re = w.some((Le) => Le.contains(fe)), Ie = d?.current === fe;+    return Re && !Ie;+  }, [+    a,+    s+  ]), q = g.useCallback((S) => {+    if (i || B(S))+      return;+    const w = !v;+    p(w), n && n(S, {+      selected: w+    });+  }, [+    i,+    n,+    v,+    p,+    B+  ]), x = g.useCallback((S) => {+    [+      Xe+    ].includes(S.key) && (S.preventDefault(), q(S));+  }, [+    q+  ]), T = g.useMemo(() => {+    if (!h || c)+      return;+    const S = {};+    return r ? S["aria-labelledby"] = r : o && (S["aria-label"] = o), z(t, {+      defaultProps: {+        ref: d,+        type: "checkbox",+        checked: v,+        disabled: i,+        onChange: (w) => q(w),+        onFocus: () => y(!0),+        onBlur: () => y(!1),+        ...S+      },+      elementType: "input"+    });+  }, [+    t,+    i,+    c,+    v,+    h,+    q,+    r,+    o+  ]), _ = g.useMemo(() => {+    if (c)+      return z(c, {+        defaultProps: {+          ref: d+        },+        elementType: "div"+      });+  }, [+    c+  ]), M = g.useMemo(() => h ? {+    onClick: I(l, q),+    onKeyDown: I(f, x)+  } : null, [+    h,+    q,+    l,+    f,+    x+  ]);+  return {+    selected: v,+    selectable: h,+    selectFocused: j,+    selectableCardProps: M,+    checkboxSlot: T,+    floatingActionSlot: _+  };+}, Pe = g.createContext(void 0), re = {+  selectableA11yProps: {+    referenceId: void 0,+    setReferenceId() {+    },+    referenceLabel: void 0,+    setReferenceLabel() {+    }+  }+}, ta = Pe.Provider, Ne = () => {+  var e;+  return (e = g.useContext(Pe)) !== null && e !== void 0 ? e : re;+}, ia = {+  off: void 0,+  "no-tab": "limited-trap-focus",+  "tab-exit": "limited",+  "tab-only": "unlimited"+}, na = ({ focusMode: e, disabled: o = !1, ...r }) => {+  const a = [+    "onClick",+    "onDoubleClick",+    "onMouseUp",+    "onMouseDown",+    "onPointerUp",+    "onPointerDown",+    "onTouchStart",+    "onTouchEnd",+    "onDragStart",+    "onDragEnd"+  ].some((c) => r[c]), t = e ?? (a ? "no-tab" : "off"), n = $e({+    tabBehavior: ia[t]+  });+  return o ? {+    interactive: !1,+    focusAttributes: null+  } : t === "off" ? {+    interactive: a,+    focusAttributes: null+  } : {+    interactive: a,+    focusAttributes: {+      ...n,+      tabIndex: 0+    }+  };+}, la = (e, o) => {+  const { appearance: r = "filled", orientation: a = "vertical", size: t = "medium", ...n } = e;+  return {+    ...fa(n, o),+    appearance: r,+    orientation: a,+    size: t+  };+}, fa = (e, o) => {+  const { disabled: r = !1, ...a } = e, [t, n] = g.useState(re.selectableA11yProps.referenceId), [c, l] = g.useState(re.selectableA11yProps.referenceId), f = Ue(), { selectable: i, selected: s, selectableCardProps: d, selectFocused: v, checkboxSlot: p, floatingActionSlot: h } = aa(e, {+    referenceId: t,+    referenceLabel: c+  }, f), j = U(f, o), { interactive: y, focusAttributes: B } = na(e);+  let q = {+    ...i ? null : B,+    ...a,+    ...d+  };+  return r && (q = {+    ...a,+    "aria-disabled": !0,+    onClick: void 0+  }), {+    interactive: y,+    selectable: i,+    selectFocused: v,+    selected: s,+    disabled: r,+    selectableA11yProps: {+      setReferenceId: n,+      referenceId: t,+      referenceLabel: c,+      setReferenceLabel: l+    },+    components: {+      root: "div",+      floatingAction: "div",+      checkbox: "input"+    },+    root: C(V("div", {+      ref: j,+      role: "group",+      ...q+    }), {+      elementType: "div"+    }),+    floatingAction: h,+    checkbox: p+  };+}, ca = (e, o) => /* @__PURE__ */ k(e.root, {+  children: /* @__PURE__ */ D(ta, {+    value: o,+    children: [+      e.checkbox ? /* @__PURE__ */ k(e.checkbox, {}) : null,+      e.floatingAction ? /* @__PURE__ */ k(e.floatingAction, {}) : null,+      e.root.children+    ]+  })+}), oe = {+  root: "fui-CardPreview",+  logo: "fui-CardPreview__logo"+}, sa = /* @__PURE__ */ m({+  root: {+    qhf8xq: "f10pi13n",+    Byfpedg: "fgourly",+    Btj6oj6: "f1vui7lx",+    B1m4t4s: "fda5zwx"+  },+  logo: {+    qhf8xq: "f1euv43f",+    B5kzvoi: "f1gcvs1y",+    oyh7mz: ["f1t6tvco", "ffrfxm3"],+    a9b677: "f1szoe96",+    Bqenvij: "f1d2rq10"+  }+}, {+  d: [".f10pi13n{position:relative;}", ".fgourly>:not(.fui-CardPreview__logo){display:block;}", ".f1vui7lx>:not(.fui-CardPreview__logo){height:100%;}", ".fda5zwx>:not(.fui-CardPreview__logo){width:100%;}", ".f1euv43f{position:absolute;}", ".f1gcvs1y{bottom:12px;}", ".f1t6tvco{left:12px;}", ".ffrfxm3{right:12px;}", ".f1szoe96{width:32px;}", ".f1d2rq10{height:32px;}"]+}), da = (e) => {+  "use no memo";+  const o = sa();+  return e.root.className = b(oe.root, o.root, e.root.className), e.logo && (e.logo.className = b(oe.logo, o.logo, e.logo.className)), e;+}, Ae = {+  root: "fui-CardHeader",+  image: "fui-CardHeader__image",+  header: "fui-CardHeader__header",+  description: "fui-CardHeader__description",+  action: "fui-CardHeader__action"+}, ua = /* @__PURE__ */ m({+  root: {+    Bkc6ea2: "fkufhic",+    Bt984gj: "f122n59"+  },+  image: {+    mc9l5x: "ftuwxu6",+    t21cq0: ["fql5097", "f6yss9k"]+  },+  header: {+    mc9l5x: "f22iagw"+  },+  description: {+    mc9l5x: "f22iagw"+  },+  action: {+    Frg6f3: ["f6yss9k", "fql5097"],+    rjrqlh: "fs9eatd",+    Boue1pl: ["fxoo9ru", "f1g0ekvh"],+    Bhz1vi0: "f1m6zfxz",+    etxrgc: ["f1g0ekvh", "fxoo9ru"],+    Bdua9ef: "f1sret3r",+    cbfxhg: "fs4gbcv"+  }+}, {+  d: [".fkufhic{--fui-CardHeader--gap:12px;}", ".f122n59{align-items:center;}", ".ftuwxu6{display:inline-flex;}", ".fql5097{margin-right:var(--fui-CardHeader--gap);}", ".f6yss9k{margin-left:var(--fui-CardHeader--gap);}", ".f22iagw{display:flex;}"],+  m: [["@media (forced-colors: active){.fs9eatd .fui-Button,.fs9eatd .fui-Link{border-top-color:currentColor;}}", {+    m: "(forced-colors: active)"+  }], ["@media (forced-colors: active){.f1g0ekvh .fui-Button,.f1g0ekvh .fui-Link{border-left-color:currentColor;}.fxoo9ru .fui-Button,.fxoo9ru .fui-Link{border-right-color:currentColor;}}", {+    m: "(forced-colors: active)"+  }], ["@media (forced-colors: active){.f1m6zfxz .fui-Button,.f1m6zfxz .fui-Link{border-bottom-color:currentColor;}}", {+    m: "(forced-colors: active)"+  }], ["@media (forced-colors: active){.f1sret3r .fui-Button,.f1sret3r .fui-Link{color:currentColor;}}", {+    m: "(forced-colors: active)"+  }], ["@media (forced-colors: active){.fs4gbcv .fui-Button,.fs4gbcv .fui-Link{outline-color:currentColor;}}", {+    m: "(forced-colors: active)"+  }]]+}), va = /* @__PURE__ */ m({+  root: {+    mc9l5x: "f13qh94s",+    t4k1zu: "f8a668j"+  },+  image: {+    Br312pm: "fwpfdsa",+    Ijaq50: "fldnz9j"+  },+  header: {+    Br312pm: "fd46tj4",+    Ijaq50: "f16hsg94"+  },+  description: {+    Br312pm: "fd46tj4",+    Ijaq50: "faunodf"+  },+  action: {+    Br312pm: "fis13di",+    Ijaq50: "fldnz9j"+  }+}, {+  d: [".f13qh94s{display:grid;}", ".f8a668j{grid-auto-columns:min-content 1fr min-content;}", ".fwpfdsa{grid-column-start:1;}", ".fldnz9j{grid-row-start:span 2;}", ".fd46tj4{grid-column-start:2;}", ".f16hsg94{grid-row-start:1;}", ".faunodf{grid-row-start:2;}", ".fis13di{grid-column-start:3;}"]+}), ga = /* @__PURE__ */ m({+  root: {+    mc9l5x: "f22iagw"+  },+  header: {+    Bh6795r: "fqerorx"+  },+  image: {},+  description: {},+  action: {}+}, {+  d: [".f22iagw{display:flex;}", ".fqerorx{flex-grow:1;}"]+}), pa = (e) => {+  "use no memo";+  const o = ua(), r = va(), a = ga(), t = e.description ? r : a, n = (c) => {+    var l;+    return b(Ae[c], o[c], t[c], (l = e[c]) === null || l === void 0 ? void 0 : l.className);+  };+  return e.root.className = n("root"), e.image && (e.image.className = n("image")), e.header && (e.header.className = n("header")), e.description && (e.description.className = n("description")), e.action && (e.action.className = n("action")), e;+}, ve = {+  root: "fui-CardFooter",+  action: "fui-CardFooter__action"+}, ba = /* @__PURE__ */ m({+  root: {+    mc9l5x: "f22iagw",+    Beiy3e4: "f1063pyq",+    i8kkvl: 0,+    Belr9w4: 0,+    rmohyg: "fsbu5mz"+  },+  action: {+    Frg6f3: ["fcgxt0o", "f1ujusj6"],+    rjrqlh: "fs9eatd",+    Boue1pl: ["fxoo9ru", "f1g0ekvh"],+    Bhz1vi0: "f1m6zfxz",+    etxrgc: ["f1g0ekvh", "fxoo9ru"],+    Bdua9ef: "f1sret3r",+    cbfxhg: "fs4gbcv"+  }+}, {+  d: [".f22iagw{display:flex;}", ".f1063pyq{flex-direction:row;}", [".fsbu5mz{gap:12px;}", {+    p: -1+  }], ".fcgxt0o{margin-left:auto;}", ".f1ujusj6{margin-right:auto;}"],+  m: [["@media (forced-colors: active){.fs9eatd .fui-Button,.fs9eatd .fui-Link{border-top-color:currentColor;}}", {+    m: "(forced-colors: active)"+  }], ["@media (forced-colors: active){.f1g0ekvh .fui-Button,.f1g0ekvh .fui-Link{border-left-color:currentColor;}.fxoo9ru .fui-Button,.fxoo9ru .fui-Link{border-right-color:currentColor;}}", {+    m: "(forced-colors: active)"+  }], ["@media (forced-colors: active){.f1m6zfxz .fui-Button,.f1m6zfxz .fui-Link{border-bottom-color:currentColor;}}", {+    m: "(forced-colors: active)"+  }], ["@media (forced-colors: active){.f1sret3r .fui-Button,.f1sret3r .fui-Link{color:currentColor;}}", {+    m: "(forced-colors: active)"+  }], ["@media (forced-colors: active){.fs4gbcv .fui-Button,.fs4gbcv .fui-Link{outline-color:currentColor;}}", {+    m: "(forced-colors: active)"+  }]]+}), ha = (e) => {+  "use no memo";+  const o = ba();+  return e.root.className = b(ve.root, o.root, e.root.className), e.action && (e.action.className = b(ve.action, o.action, e.action.className)), e;+}, K = {+  root: "fui-Card",+  floatingAction: "fui-Card__floatingAction",+  checkbox: "fui-Card__checkbox"+}, ma = /* @__PURE__ */ H("rfxo2k2", "rgle7w9", [".rfxo2k2{overflow:hidden;border-radius:var(--fui-Card--border-radius);padding:var(--fui-Card--size);gap:var(--fui-Card--size);display:flex;position:relative;box-sizing:border-box;color:var(--colorNeutralForeground1);}", '.rfxo2k2::after{position:absolute;top:0;left:0;right:0;bottom:0;content:"";pointer-events:none;border-top-style:solid;border-right-style:solid;border-bottom-style:solid;border-left-style:solid;border-top-width:var(--strokeWidthThin);border-right-width:var(--strokeWidthThin);border-bottom-width:var(--strokeWidthThin);border-left-width:var(--strokeWidthThin);border-radius:var(--fui-Card--border-radius);}', ".rfxo2k2>.fui-CardHeader,.rfxo2k2>.fui-CardFooter{flex-shrink:0;}", ".rgle7w9{overflow:hidden;border-radius:var(--fui-Card--border-radius);padding:var(--fui-Card--size);gap:var(--fui-Card--size);display:flex;position:relative;box-sizing:border-box;color:var(--colorNeutralForeground1);}", '.rgle7w9::after{position:absolute;top:0;right:0;left:0;bottom:0;content:"";pointer-events:none;border-top-style:solid;border-left-style:solid;border-bottom-style:solid;border-right-style:solid;border-top-width:var(--strokeWidthThin);border-left-width:var(--strokeWidthThin);border-bottom-width:var(--strokeWidthThin);border-right-width:var(--strokeWidthThin);border-radius:var(--fui-Card--border-radius);}', ".rgle7w9>.fui-CardHeader,.rgle7w9>.fui-CardFooter{flex-shrink:0;}"]), ka = /* @__PURE__ */ m({+  focused: {+    Brovlpu: "ftqa4ok",+    B486eqv: "f2hkw1w",+    B8q5s1w: "f8hki3x",+    Bci5o5g: ["f1d2448m", "ffh67wi"],+    n8qw10: "f1bjia2o",+    Bdrgwmp: ["ffh67wi", "f1d2448m"],+    Bqhya38: "f1j6vpng",+    Bwxa6fj: ["f1pniga2", "f1ffjurs"],+    Bdhvstf: "f987i1v",+    B7zbvrb: ["f1ffjurs", "f1pniga2"],+    Bm4h7ae: "f15bsgw9",+    B7ys5i9: "f14e48fq",+    Busjfv9: "f18yb2kv",+    Bhk32uz: "fd6o370",+    f6g5ot: 0,+    Boxcth7: 0,+    Bhdgwq3: 0,+    hgwjuy: 0,+    Bshpdp8: 0,+    Bsom6fd: 0,+    Blkhhs4: 0,+    Bonggc9: 0,+    Ddfuxk: 0,+    i03rao: 0,+    kclons: 0,+    clg4pj: 0,+    Bpqj9nj: 0,+    B6dhp37: 0,+    Bf4ptjt: 0,+    Bqtpl0w: 0,+    i4rwgc: "fpqizxz",+    Dah5zi: 0,+    B1tsrr9: 0,+    qqdqy8: 0,+    Bkh64rk: 0,+    e3fwne: "fnd8nzh",+    J0r882: "f15fr7a0",+    Bule8hv: ["fwsq40z", "fy0y4wt"],+    Bjwuhne: "f34ld9f",+    Ghsupd: ["fy0y4wt", "fwsq40z"]+  },+  selectableFocused: {+    Brovlpu: "ftqa4ok",+    B486eqv: "f2hkw1w",+    Bssx7fj: "f1b1k54r",+    uh7if5: ["f4ne723", "fqqcjud"],+    clntm0: "fh7aioi",+    Dlk2r6: ["fqqcjud", "f4ne723"],+    h6p2u: "f1ufm4qn",+    I6qiy5: ["f1qnwcb4", "fgrk5zm"],+    yzno9d: "fi52z01",+    By0wis0: ["fgrk5zm", "f1qnwcb4"],+    B2j2mmj: "ffht0p2",+    wigs8: "f1p0ul1q",+    pbfy6t: "f1c901ms",+    B0v4ure: "f1alokd7",+    Byrf0fs: 0,+    Bsiemmq: 0,+    Bwckmig: 0,+    skfxo0: 0,+    Iidy0u: 0,+    B98u21t: 0,+    Bvwlmkc: 0,+    jo1ztg: 0,+    Ba1iezr: 0,+    Blmvk6g: 0,+    B24cy0v: 0,+    Bil7v7r: 0,+    Br3gin4: 0,+    nr063g: 0,+    ghq09: 0,+    Bbgo44z: 0,+    Bseh09z: "f1i978nd",+    az1dzo: 0,+    Ba3ybja: 0,+    B6352mv: 0,+    vppk2z: 0,+    Biaj6j7: "f1nh8hsq",+    B2pnrqr: "f1amxum7",+    B29w5g4: ["f1cec8w7", "f554mv0"],+    Bhhzhcn: "f1sj6kbr",+    Bec0n69: ["f554mv0", "f1cec8w7"]+  },+  orientationHorizontal: {+    Beiy3e4: "f1063pyq",+    Bt984gj: "f122n59",+    Binpb3b: "ftrw7vg",+    qrt8p2: "f18opajm",+    k6ws3r: ["f13002it", "fqo182t"],+    Btcwela: ["f18yna97", "f1kd6wh7"],+    Fer9m8: "f4i4759"+  },+  orientationVertical: {+    Beiy3e4: "f1vx9l62",+    B5nvv7i: ["f14k419y", "f1fgo9fz"],+    Baxg94k: ["f1fgo9fz", "f14k419y"],+    tn21ii: "fvqmfsm",+    B0ud6bj: "f3am6yf",+    Bgdo4j: "f1r5wgso"+  },+  sizeSmall: {+    B7balbw: "f1pi9uxy",+    B1h88n7: "f1h1zgly"+  },+  sizeMedium: {+    B7balbw: "frsmuga",+    B1h88n7: "fuldkky"+  },+  sizeLarge: {+    B7balbw: "f1qua4xo",+    B1h88n7: "fimkt6v"+  },+  interactive: {+    rhjd8f: "f1epqm3e"+  },+  filled: {+    De3pzq: "fxugw4r",+    E5pizo: "f1whvlc6",+    B0n5ga8: "f16gxe2i",+    s924m2: ["fpgykix", "fzybk4o"],+    B1q35kw: "f1osi826",+    Gp14am: ["fzybk4o", "fpgykix"]+  },+  filledInteractive: {+    Bceei9c: "f1k6fduh",+    De3pzq: "fxugw4r",+    E5pizo: "f1whvlc6",+    B0n5ga8: "f16gxe2i",+    s924m2: ["fpgykix", "fzybk4o"],+    B1q35kw: "f1osi826",+    Gp14am: ["fzybk4o", "fpgykix"],+    Bi91k9c: "feu1g3u",+    Jwef8y: "f1knas48",+    Bvxd0ez: "f1m145df",+    ecr2s2: "fb40n2d"+  },+  filledInteractiveSelected: {+    De3pzq: "f1nfm20t",+    B0n5ga8: "f16eln5f",+    s924m2: ["fa2okxs", "fg4zq3l"],+    B1q35kw: "ff6932p",+    Gp14am: ["fg4zq3l", "fa2okxs"],+    Bi91k9c: "fx9teim",+    Jwef8y: "f1kz6goq"+  },+  filledAlternative: {+    De3pzq: "f1dmdbja",+    E5pizo: "f1whvlc6",+    B0n5ga8: "f16gxe2i",+    s924m2: ["fpgykix", "fzybk4o"],+    B1q35kw: "f1osi826",+    Gp14am: ["fzybk4o", "fpgykix"]+  },+  filledAlternativeInteractive: {+    Bceei9c: "f1k6fduh",+    De3pzq: "f1dmdbja",+    E5pizo: "f1whvlc6",+    B0n5ga8: "f16gxe2i",+    s924m2: ["fpgykix", "fzybk4o"],+    B1q35kw: "f1osi826",+    Gp14am: ["fzybk4o", "fpgykix"],+    Bi91k9c: "fnwyq0v",+    Jwef8y: "f1uvynv3",+    Bvxd0ez: "f1m145df",+    ecr2s2: "f1yhgkbh"+  },+  filledAlternativeInteractiveSelected: {+    De3pzq: "fjxa0vh",+    B0n5ga8: "f16eln5f",+    s924m2: ["fa2okxs", "fg4zq3l"],+    B1q35kw: "ff6932p",+    Gp14am: ["fg4zq3l", "fa2okxs"],+    Bi91k9c: "f1luvkty",+    Jwef8y: "fehi0vp"+  },+  outline: {+    De3pzq: "f1c21dwh",+    E5pizo: "f1couhl3",+    B0n5ga8: "ft83z1f",+    s924m2: ["f1g4150c", "f192dr6e"],+    B1q35kw: "f1qnawh6",+    Gp14am: ["f192dr6e", "f1g4150c"]+  },+  outlineInteractive: {+    Bceei9c: "f1k6fduh",+    De3pzq: "f1c21dwh",+    E5pizo: "f1couhl3",+    B0n5ga8: "ft83z1f",+    s924m2: ["f1g4150c", "f192dr6e"],+    B1q35kw: "f1qnawh6",+    Gp14am: ["f192dr6e", "f1g4150c"],+    Bi91k9c: "feu1g3u",+    Jwef8y: "fjxutwb",+    Be0v6ae: "f1llr77y",+    B5kxglz: ["fzk0khw", "fjj8tog"],+    B3pwyw6: "fb1u8ub",+    Bymgtzf: ["fjj8tog", "fzk0khw"],+    ecr2s2: "fophhak",+    dmfk: "f1uohb70",+    B4ofi8: ["f1jm7v1n", "f1bus3rq"],+    jgq6uv: "f1fbu7rr",+    Baxewws: ["f1bus3rq", "f1jm7v1n"]+  },+  outlineInteractiveSelected: {+    De3pzq: "f1q9pm1r",+    B0n5ga8: "f16eln5f",+    s924m2: ["fa2okxs", "fg4zq3l"],+    B1q35kw: "ff6932p",+    Gp14am: ["fg4zq3l", "fa2okxs"],+    Bi91k9c: "fx9teim",+    Jwef8y: "fg59vm4"+  },+  outlineDisabled: {+    De3pzq: "f1c21dwh",+    E5pizo: "f1couhl3",+    g2u3we: "f1jj8ep1",+    h3c5rm: ["f15xbau", "fy0fskl"],+    B9xav0g: "f4ikngz",+    zhjwy3: ["fy0fskl", "f15xbau"],+    ezxybo: "f1ls5moo",+    wc7uws: "f1qiza15",+    B0n5ga8: "f13dj02",+    s924m2: ["f9wngki", "f17v59j0"],+    B1q35kw: "f1vxzwsp",+    Gp14am: ["f17v59j0", "f9wngki"]+  },+  subtle: {+    De3pzq: "fhovq9v",+    E5pizo: "f1couhl3",+    B0n5ga8: "f16gxe2i",+    s924m2: ["fpgykix", "fzybk4o"],+    B1q35kw: "f1osi826",+    Gp14am: ["fzybk4o", "fpgykix"]+  },+  subtleInteractive: {+    Bceei9c: "f1k6fduh",+    De3pzq: "fhovq9v",+    E5pizo: "f1couhl3",+    B0n5ga8: "f16gxe2i",+    s924m2: ["fpgykix", "fzybk4o"],+    B1q35kw: "f1osi826",+    Gp14am: ["fzybk4o", "fpgykix"],+    Bi91k9c: "feu1g3u",+    Jwef8y: "f1t94bn6",+    ecr2s2: "f1wfn5kd"+  },+  subtleInteractiveSelected: {+    De3pzq: "fq5gl1p",+    B0n5ga8: "f16eln5f",+    s924m2: ["fa2okxs", "fg4zq3l"],+    B1q35kw: "ff6932p",+    Gp14am: ["fg4zq3l", "fa2okxs"],+    Bi91k9c: "fx9teim",+    Jwef8y: "f1uqaxdt"+  },+  highContrastSelected: {+    B8gzw0y: "f1h3a8gf",+    By8wz76: "f1nz3ub2",+    B7iucu3: "fqc85l4",+    Boo9lyk: "f1ucc5z8",+    sga51p: "fyj59f4",+    qj1yg9: ["f19v95gn", "f1n69f6i"],+    B8acmzm: "f16q7dot",+    Gezqo6: ["f1n69f6i", "f19v95gn"]+  },+  highContrastInteractive: {+    waf3gn: "f1quqgnd",+    B96h8j5: "f193utb4",+    Bpd3jnq: "f1io67iv",+    uhbujs: "f3n01jk",+    sga51p: "fyj59f4",+    qj1yg9: ["f19v95gn", "f1n69f6i"],+    B8acmzm: "f16q7dot",+    Gezqo6: ["f1n69f6i", "f19v95gn"]+  },+  select: {+    qhf8xq: "f1euv43f",+    Bhzewxz: "fqclxi7",+    j35jbq: ["fiv86kb", "f36uhnt"],+    Bj3rh1h: "fom9my7"+  },+  hiddenCheckbox: {+    B68tc82: 0,+    Bmxbyg5: 0,+    Bpg54ce: "f1a3p1vp",+    a9b677: "frkrog8",+    Bqenvij: "f1mpe4l3",+    qhf8xq: "f1euv43f",+    Bh84pgu: "fmf1zke",+    Bgl5zvf: "f1wch0ki",+    Huce71: "fz5stix"+  },+  disabled: {+    Bceei9c: "fdrzuqr",+    famaaq: "f1xqy1su",+    sj55zd: "f1s2aq7o",+    De3pzq: "f1bg9a2p",+    E5pizo: "fyed02w",+    g2u3we: "f1jj8ep1",+    h3c5rm: ["f15xbau", "fy0fskl"],+    B9xav0g: "f4ikngz",+    zhjwy3: ["fy0fskl", "f15xbau"],+    Ftih45: "f1wl9k8s",+    Brfgrao: "f1j7ml58",+    lawp4y: 0,+    Fbdkly: 0,+    mdwyqc: 0,+    Bciustq: 0,+    gc50h5: "f13vvzas",+    Ehzi8l: "f198lalb",+    B0n5ga8: "f13dj02",+    s924m2: ["f9wngki", "f17v59j0"],+    B1q35kw: "f1vxzwsp",+    Gp14am: ["f17v59j0", "f9wngki"],+    Bikrtoi: "f11og98d",+    G8qf51: "f1rg3h4v",+    Brxh4y7: "fbm2y3b",+    ezxybo: "f4yodeu",+    wc7uws: "fcwfbwp",+    gp3uxg: "f1repx37",+    Fohawp: ["f1ybi8ct", "f1h4eg6q"],+    Bxulg6k: "f18mejnb",+    vcjq4m: ["f1h4eg6q", "f1ybi8ct"],+    Bsqkqe9: "f1nift3m",+    fskg1g: "f1wu3i8x",+    iwiei9: 0,+    Effecx: 0,+    Bkt1b9m: 0,+    jfmxvr: 0,+    orauir: "f6v4vfa",+    B2yd9ot: "folrdqs",+    Fn9tzk: "f168z5yf",+    Bv0wker: ["fpor7gj", "fzextn6"],+    Bp2dl5b: "f1yaw79v",+    pzn0iz: ["fzextn6", "fpor7gj"]+  }+}, {+  f: [".ftqa4ok:focus{outline-style:none;}"],+  i: [".f2hkw1w:focus-visible{outline-style:none;}"],+  d: [".f8hki3x[data-fui-focus-visible]{border-top-color:transparent;}", ".f1d2448m[data-fui-focus-visible]{border-right-color:transparent;}", ".ffh67wi[data-fui-focus-visible]{border-left-color:transparent;}", ".f1bjia2o[data-fui-focus-visible]{border-bottom-color:transparent;}", '.f15bsgw9[data-fui-focus-visible]::after{content:"";}', ".f14e48fq[data-fui-focus-visible]::after{position:absolute;}", ".f18yb2kv[data-fui-focus-visible]::after{pointer-events:none;}", ".fd6o370[data-fui-focus-visible]::after{z-index:1;}", [".fpqizxz[data-fui-focus-visible]::after{border:var(--strokeWidthThick) solid var(--colorStrokeFocus2);}", {+    p: -2+  }], [".fnd8nzh[data-fui-focus-visible]::after{border-radius:var(--fui-Card--border-radius);}", {+    p: -1+  }], ".f15fr7a0[data-fui-focus-visible]::after{top:calc(0px - var(--strokeWidthThick) - -2px);}", ".fwsq40z[data-fui-focus-visible]::after{right:calc(0px - var(--strokeWidthThick) - -2px);}", ".fy0y4wt[data-fui-focus-visible]::after{left:calc(0px - var(--strokeWidthThick) - -2px);}", ".f34ld9f[data-fui-focus-visible]::after{bottom:calc(0px - var(--strokeWidthThick) - -2px);}", ".f1b1k54r[data-fui-focus-within]:focus-within{border-top-color:transparent;}", ".f4ne723[data-fui-focus-within]:focus-within{border-right-color:transparent;}", ".fqqcjud[data-fui-focus-within]:focus-within{border-left-color:transparent;}", ".fh7aioi[data-fui-focus-within]:focus-within{border-bottom-color:transparent;}", '.ffht0p2[data-fui-focus-within]:focus-within::after{content:"";}', ".f1p0ul1q[data-fui-focus-within]:focus-within::after{position:absolute;}", ".f1c901ms[data-fui-focus-within]:focus-within::after{pointer-events:none;}", ".f1alokd7[data-fui-focus-within]:focus-within::after{z-index:1;}", [".f1i978nd[data-fui-focus-within]:focus-within::after{border:var(--strokeWidthThick) solid var(--colorStrokeFocus2);}", {+    p: -2+  }], [".f1nh8hsq[data-fui-focus-within]:focus-within::after{border-radius:var(--fui-Card--border-radius);}", {+    p: -1+  }], ".f1amxum7[data-fui-focus-within]:focus-within::after{top:calc(0px - var(--strokeWidthThick) - -2px);}", ".f1cec8w7[data-fui-focus-within]:focus-within::after{right:calc(0px - var(--strokeWidthThick) - -2px);}", ".f554mv0[data-fui-focus-within]:focus-within::after{left:calc(0px - var(--strokeWidthThick) - -2px);}", ".f1sj6kbr[data-fui-focus-within]:focus-within::after{bottom:calc(0px - var(--strokeWidthThick) - -2px);}", ".f1063pyq{flex-direction:row;}", ".f122n59{align-items:center;}", ".ftrw7vg>.fui-CardPreview{margin-top:calc(var(--fui-Card--size) * -1);}", ".f18opajm>.fui-CardPreview{margin-bottom:calc(var(--fui-Card--size) * -1);}", '.f13002it>:not([aria-hidden="true"]).fui-CardPreview:first-of-type{margin-left:calc(var(--fui-Card--size) * -1);}', '.fqo182t>:not([aria-hidden="true"]).fui-CardPreview:first-of-type{margin-right:calc(var(--fui-Card--size) * -1);}', '.f18yna97>:not([aria-hidden="true"]).fui-CardPreview:last-of-type{margin-right:calc(var(--fui-Card--size) * -1);}', '.f1kd6wh7>:not([aria-hidden="true"]).fui-CardPreview:last-of-type{margin-left:calc(var(--fui-Card--size) * -1);}', ".f4i4759>.fui-CardHeader:last-of-type,.f4i4759>.fui-CardFooter:last-of-type{flex-grow:1;}", ".f1vx9l62{flex-direction:column;}", ".f14k419y>.fui-CardPreview{margin-left:calc(var(--fui-Card--size) * -1);}", ".f1fgo9fz>.fui-CardPreview{margin-right:calc(var(--fui-Card--size) * -1);}", '.fvqmfsm>:not([aria-hidden="true"]).fui-CardPreview:first-of-type{margin-top:calc(var(--fui-Card--size) * -1);}', ".f3am6yf>.fui-Card__floatingAction+.fui-CardPreview{margin-top:calc(var(--fui-Card--size) * -1);}", '.f1r5wgso>:not([aria-hidden="true"]).fui-CardPreview:last-of-type{margin-bottom:calc(var(--fui-Card--size) * -1);}', ".f1pi9uxy{--fui-Card--size:8px;}", ".f1h1zgly{--fui-Card--border-radius:var(--borderRadiusSmall);}", ".frsmuga{--fui-Card--size:12px;}", ".fuldkky{--fui-Card--border-radius:var(--borderRadiusMedium);}", ".f1qua4xo{--fui-Card--size:16px;}", ".fimkt6v{--fui-Card--border-radius:var(--borderRadiusLarge);}", ".f1epqm3e .fui-Text{color:currentColor;}", ".fxugw4r{background-color:var(--colorNeutralBackground1);}", ".f1whvlc6{box-shadow:var(--shadow4);}", ".f16gxe2i::after{border-top-color:var(--colorTransparentStroke);}", ".fpgykix::after{border-right-color:var(--colorTransparentStroke);}", ".fzybk4o::after{border-left-color:var(--colorTransparentStroke);}", ".f1osi826::after{border-bottom-color:var(--colorTransparentStroke);}", ".f1k6fduh{cursor:pointer;}", ".f1nfm20t{background-color:var(--colorNeutralBackground1Selected);}", ".f16eln5f::after{border-top-color:var(--colorNeutralStroke1Selected);}", ".fa2okxs::after{border-right-color:var(--colorNeutralStroke1Selected);}", ".fg4zq3l::after{border-left-color:var(--colorNeutralStroke1Selected);}", ".ff6932p::after{border-bottom-color:var(--colorNeutralStroke1Selected);}", ".f1dmdbja{background-color:var(--colorNeutralBackground2);}", ".fjxa0vh{background-color:var(--colorNeutralBackground2Selected);}", ".f1c21dwh{background-color:var(--colorTransparentBackground);}", ".f1couhl3{box-shadow:none;}", ".ft83z1f::after{border-top-color:var(--colorNeutralStroke1);}", ".f1g4150c::after{border-right-color:var(--colorNeutralStroke1);}", ".f192dr6e::after{border-left-color:var(--colorNeutralStroke1);}", ".f1qnawh6::after{border-bottom-color:var(--colorNeutralStroke1);}", ".f1q9pm1r{background-color:var(--colorTransparentBackgroundSelected);}", ".f1jj8ep1{border-top-color:var(--colorNeutralStrokeDisabled);}", ".f15xbau{border-right-color:var(--colorNeutralStrokeDisabled);}", ".fy0fskl{border-left-color:var(--colorNeutralStrokeDisabled);}", ".f4ikngz{border-bottom-color:var(--colorNeutralStrokeDisabled);}", ".f13dj02::after{border-top-color:var(--colorNeutralStrokeDisabled);}", ".f9wngki::after{border-right-color:var(--colorNeutralStrokeDisabled);}", ".f17v59j0::after{border-left-color:var(--colorNeutralStrokeDisabled);}", ".f1vxzwsp::after{border-bottom-color:var(--colorNeutralStrokeDisabled);}", ".fhovq9v{background-color:var(--colorSubtleBackground);}", ".fq5gl1p{background-color:var(--colorSubtleBackgroundSelected);}", ".f1euv43f{position:absolute;}", ".fqclxi7{top:4px;}", ".fiv86kb{right:4px;}", ".f36uhnt{left:4px;}", ".fom9my7{z-index:var(--zIndexContent, 1);}", [".f1a3p1vp{overflow:hidden;}", {+    p: -1+  }], ".frkrog8{width:1px;}", ".f1mpe4l3{height:1px;}", ".fmf1zke{clip:rect(0 0 0 0);}", ".f1wch0ki{clip-path:inset(50%);}", ".fz5stix{white-space:nowrap;}", ".fdrzuqr{cursor:not-allowed;}", ".f1xqy1su{-webkit-user-select:none;-moz-user-select:none;user-select:none;}", ".f1s2aq7o{color:var(--colorNeutralForegroundDisabled);}", ".f1bg9a2p{background-color:var(--colorNeutralBackgroundDisabled);}", ".fyed02w{box-shadow:var(--shadow2);}", '.f1wl9k8s::before{content:"";}', ".f1j7ml58::before{position:absolute;}", [".f13vvzas::before{inset:0;}", {+    p: -1+  }], ".f198lalb::before{z-index:calc(var(--zIndexContent, 1) + 1);}"],+  m: [["@media (forced-colors: active){.f1j6vpng[data-fui-focus-visible]::after{border-top-color:Highlight;}}", {+    m: "(forced-colors: active)"+  }], ["@media (forced-colors: active){.f1ffjurs[data-fui-focus-visible]::after{border-left-color:Highlight;}.f1pniga2[data-fui-focus-visible]::after{border-right-color:Highlight;}}", {+    m: "(forced-colors: active)"+  }], ["@media (forced-colors: active){.f987i1v[data-fui-focus-visible]::after{border-bottom-color:Highlight;}}", {+    m: "(forced-colors: active)"+  }], ["@media (forced-colors: active){.f1ufm4qn[data-fui-focus-within]:focus-within::after{border-top-color:Highlight;}}", {+    m: "(forced-colors: active)"+  }], ["@media (forced-colors: active){.f1qnwcb4[data-fui-focus-within]:focus-within::after{border-right-color:Highlight;}.fgrk5zm[data-fui-focus-within]:focus-within::after{border-left-color:Highlight;}}", {+    m: "(forced-colors: active)"+  }], ["@media (forced-colors: active){.fi52z01[data-fui-focus-within]:focus-within::after{border-bottom-color:Highlight;}}", {+    m: "(forced-colors: active)"+  }], ["@media (forced-colors: active){.f1h3a8gf{forced-color-adjust:none;}}", {+    m: "(forced-colors: active)"+  }], ["@media (forced-colors: active){.f1nz3ub2{background-color:Highlight;}}", {+    m: "(forced-colors: active)"+  }], ["@media (forced-colors: active){.fqc85l4{color:HighlightText;}}", {+    m: "(forced-colors: active)"+  }], ["@media (forced-colors: active){.f1ucc5z8 .fui-CardPreview,.f1ucc5z8 .fui-CardFooter{forced-color-adjust:auto;}}", {+    m: "(forced-colors: active)"+  }], ["@media (forced-colors: active){.fyj59f4::after{border-top-color:Highlight;}}", {+    m: "(forced-colors: active)"+  }], ["@media (forced-colors: active){.f19v95gn::after{border-right-color:Highlight;}.f1n69f6i::after{border-left-color:Highlight;}}", {+    m: "(forced-colors: active)"+  }], ["@media (forced-colors: active){.f16q7dot::after{border-bottom-color:Highlight;}}", {+    m: "(forced-colors: active)"+  }], ["@media (forced-colors: active){.f1quqgnd:hover,.f1quqgnd :active{forced-color-adjust:none;}}", {+    m: "(forced-colors: active)"+  }], ["@media (forced-colors: active){.f193utb4:hover,.f193utb4 :active{background-color:Highlight;}}", {+    m: "(forced-colors: active)"+  }], ["@media (forced-colors: active){.f1io67iv:hover,.f1io67iv :active{color:HighlightText;}}", {+    m: "(forced-colors: active)"+  }], ["@media (forced-colors: active){.f3n01jk:hover .fui-CardPreview,.f3n01jk :active .fui-CardPreview,.f3n01jk:hover .fui-CardFooter,.f3n01jk :active .fui-CardFooter{forced-color-adjust:auto;}}", {+    m: "(forced-colors: active)"+  }]],+  h: [".feu1g3u:hover{color:var(--colorNeutralForeground1Hover);}", ".f1knas48:hover{background-color:var(--colorNeutralBackground1Hover);}", ".f1m145df:hover{box-shadow:var(--shadow8);}", ".fx9teim:hover{color:var(--colorNeutralForeground1Selected);}", ".f1kz6goq:hover{background-color:var(--colorNeutralBackground1Selected);}", ".fnwyq0v:hover{color:var(--colorNeutralForeground2Hover);}", ".f1uvynv3:hover{background-color:var(--colorNeutralBackground2Hover);}", ".f1luvkty:hover{color:var(--colorNeutralForeground2Selected);}", ".fehi0vp:hover{background-color:var(--colorNeutralBackground2Selected);}", ".fjxutwb:hover{background-color:var(--colorTransparentBackgroundHover);}", ".f1llr77y:hover::after{border-top-color:var(--colorNeutralStroke1Hover);}", ".fzk0khw:hover::after{border-right-color:var(--colorNeutralStroke1Hover);}", ".fjj8tog:hover::after{border-left-color:var(--colorNeutralStroke1Hover);}", ".fb1u8ub:hover::after{border-bottom-color:var(--colorNeutralStroke1Hover);}", ".fg59vm4:hover{background-color:var(--colorTransparentBackgroundSelected);}", ".f1ls5moo:hover,.f1ls5moo:active{background-color:var(--colorTransparentBackground);}", ".f1qiza15:hover,.f1qiza15:active{box-shadow:none;}", ".f1t94bn6:hover{background-color:var(--colorSubtleBackgroundHover);}", ".f1uqaxdt:hover{background-color:var(--colorSubtleBackgroundSelected);}", ".f11og98d:hover,.f11og98d:active{cursor:not-allowed;}", ".f1rg3h4v:hover,.f1rg3h4v:active{-webkit-user-select:none;-moz-user-select:none;user-select:none;}", ".fbm2y3b:hover,.fbm2y3b:active{color:var(--colorNeutralForegroundDisabled);}", ".f4yodeu:hover,.f4yodeu:active{background-color:var(--colorNeutralBackgroundDisabled);}", ".fcwfbwp:hover,.fcwfbwp:active{box-shadow:var(--shadow2);}", ".f1repx37:hover,.f1repx37:active{border-top-color:var(--colorNeutralStrokeDisabled);}", ".f1ybi8ct:hover,.f1ybi8ct:active{border-right-color:var(--colorNeutralStrokeDisabled);}", ".f1h4eg6q:hover,.f1h4eg6q:active{border-left-color:var(--colorNeutralStrokeDisabled);}", ".f18mejnb:hover,.f18mejnb:active{border-bottom-color:var(--colorNeutralStrokeDisabled);}", '.f1nift3m:hover::before,.f1nift3m:active::before{content:"";}', ".f1wu3i8x:hover::before,.f1wu3i8x:active::before{position:absolute;}", [".f6v4vfa:hover::before,.f6v4vfa:active::before{inset:0;}", {+    p: -1+  }], ".folrdqs:hover::before,.folrdqs:active::before{z-index:calc(var(--zIndexContent, 1) + 1);}", ".f168z5yf:hover::after,.f168z5yf:active::after{border-top-color:var(--colorNeutralStrokeDisabled);}", ".fpor7gj:hover::after,.fpor7gj:active::after{border-right-color:var(--colorNeutralStrokeDisabled);}", ".fzextn6:hover::after,.fzextn6:active::after{border-left-color:var(--colorNeutralStrokeDisabled);}", ".f1yaw79v:hover::after,.f1yaw79v:active::after{border-bottom-color:var(--colorNeutralStrokeDisabled);}"],+  a: [".fb40n2d:active{background-color:var(--colorNeutralBackground1Pressed);}", ".f1yhgkbh:active{background-color:var(--colorNeutralBackground2Pressed);}", ".fophhak:active{background-color:var(--colorTransparentBackgroundPressed);}", ".f1uohb70:active::after{border-top-color:var(--colorNeutralStroke1Pressed);}", ".f1jm7v1n:active::after{border-right-color:var(--colorNeutralStroke1Pressed);}", ".f1bus3rq:active::after{border-left-color:var(--colorNeutralStroke1Pressed);}", ".f1fbu7rr:active::after{border-bottom-color:var(--colorNeutralStroke1Pressed);}", ".f1wfn5kd:active{background-color:var(--colorSubtleBackgroundPressed);}"]+}), ya = (e) => {+  "use no memo";+  const o = ma(), r = ka(), a = {+    horizontal: r.orientationHorizontal,+    vertical: r.orientationVertical+  }, t = {+    small: r.sizeSmall,+    medium: r.sizeMedium,+    large: r.sizeLarge+  }, n = {+    filled: r.filled,+    "filled-alternative": r.filledAlternative,+    outline: r.outline,+    subtle: r.subtle+  }, c = {+    filled: r.filledInteractiveSelected,+    "filled-alternative": r.filledAlternativeInteractiveSelected,+    outline: r.outlineInteractiveSelected,+    subtle: r.subtleInteractiveSelected+  }, l = {+    filled: r.filledInteractive,+    "filled-alternative": r.filledAlternativeInteractive,+    outline: r.outlineInteractive,+    subtle: r.subtleInteractive+  }, f = !e.disabled && (e.interactive || e.selectable), i = g.useMemo(() => e.disabled ? "" : e.selectable ? e.selectFocused ? r.selectableFocused : "" : r.focused, [e.disabled, e.selectFocused, e.selectable, r.focused, r.selectableFocused]);+  return e.root.className = b(K.root, o, a[e.orientation], t[e.size], n[e.appearance], f && r.interactive, f && l[e.appearance], e.selected && c[e.appearance], i, f && r.highContrastInteractive, e.selected && r.highContrastSelected, e.disabled && r.disabled, e.disabled && e.appearance === "outline" && r.outlineDisabled, e.root.className), e.floatingAction && (e.floatingAction.className = b(K.floatingAction, r.select, e.floatingAction.className)), e.checkbox && (e.checkbox.className = b(K.checkbox, r.hiddenCheckbox, e.checkbox.className)), e;+};+function xa({ selectableA11yProps: e }) {+  return {+    selectableA11yProps: e+  };+}+const _e = /* @__PURE__ */ g.forwardRef((e, o) => {+  const r = la(e, o), a = xa(r);+  return ya(r), A("useCardStyles_unstable")(r), ca(r, a);+});+_e.displayName = "Card";+const Ba = (e, o) => wa(e, o), wa = (e, o) => {+  const { action: r } = e;+  return {+    components: {+      root: "div",+      action: "div"+    },+    root: C(V("div", {+      // FIXME:+      // `ref` is wrongly assigned to be `HTMLElement` instead of `HTMLDivElement`+      // but since it would be a breaking change to fix it, we are casting ref to it's proper type+      ref: o,+      ...e+    }), {+      elementType: "div"+    }),+    action: z(r, {+      elementType: "div"+    })+  };+}, za = (e) => /* @__PURE__ */ D(e.root, {+  children: [+    e.root.children,+    e.action && /* @__PURE__ */ k(e.action, {})+  ]+}), De = /* @__PURE__ */ g.forwardRef((e, o) => {+  const r = Ba(e, o);+  return ha(r), A("useCardFooterStyles_unstable")(r), za(r);+});+De.displayName = "CardFooter";+function qa(e) {+  function o(r) {+    return g.isValidElement(r) && !!r.props.id;+  }+  return g.Children.toArray(e).find(o);+}+function ja(e, o, r) {+  return e || (o?.props.id ? o.props.id : r);+}+const Sa = (e, o) => Ca(e, o), Ca = (e, o) => {+  const { image: r, header: a, description: t, action: n } = e, { selectableA11yProps: { referenceId: c, setReferenceId: l } } = Ne(), f = g.useRef(null), i = g.useRef(!1), s = be(Ae.header, c), d = z(a, {+    renderByDefault: !0,+    defaultProps: {+      ref: f,+      id: i.current ? void 0 : c+    },+    elementType: "div"+  });+  return g.useEffect(() => {+    var v;+    const p = i.current || (v = f.current) === null || v === void 0 ? void 0 : v.id, h = qa(d?.children);+    i.current = !!h, l(ja(p, h, s));+  }, [+    s,+    a,+    d,+    l+  ]), {+    components: {+      root: "div",+      image: "div",+      header: "div",+      description: "div",+      action: "div"+    },+    root: C(V("div", {+      // FIXME:+      // `ref` is wrongly assigned to be `HTMLElement` instead of `HTMLDivElement`+      // but since it would be a breaking change to fix it, we are casting ref to it's proper type+      ref: o,+      ...e+    }), {+      elementType: "div"+    }),+    image: z(r, {+      elementType: "div"+    }),+    header: d,+    description: z(t, {+      elementType: "div"+    }),+    action: z(n, {+      elementType: "div"+    })+  };+}, Ta = (e) => /* @__PURE__ */ D(e.root, {+  children: [+    e.image && /* @__PURE__ */ k(e.image, {}),+    e.header && /* @__PURE__ */ k(e.header, {}),+    e.description && /* @__PURE__ */ k(e.description, {}),+    e.action && /* @__PURE__ */ k(e.action, {})+  ]+}), Fe = /* @__PURE__ */ g.forwardRef((e, o) => {+  const r = Sa(e, o);+  return pa(r), A("useCardHeaderStyles_unstable")(r), Ta(r);+});+Fe.displayName = "CardHeader";+const Pa = (e, o) => Na(e, o), Na = (e, o) => {+  const { logo: r } = e, { selectableA11yProps: { referenceLabel: a, referenceId: t, setReferenceLabel: n, setReferenceId: c } } = Ne(), l = U(o, g.useRef(null));+  return g.useEffect(() => {+    if (!(a && t) && l.current && l.current.parentNode) {+      const f = l.current.parentNode.querySelector(`.${oe.root} > img`);+      if (f) {+        const i = f.getAttribute("aria-label"), s = f.getAttribute("aria-describedby");+        s ? c(s) : f.alt ? n(f.alt) : i && n(i);+      }+    }+  }, [+    n,+    a,+    l,+    t,+    c+  ]), {+    components: {+      root: "div",+      logo: "div"+    },+    root: C(V("div", {+      ref: l,+      ...e+    }), {+      elementType: "div"+    }),+    logo: z(r, {+      elementType: "div"+    })+  };+}, Aa = (e) => /* @__PURE__ */ D(e.root, {+  children: [+    e.root.children,+    e.logo && /* @__PURE__ */ k(e.logo, {})+  ]+}), He = /* @__PURE__ */ g.forwardRef((e, o) => {+  const r = Pa(e, o);+  return da(r), A("useCardPreviewStyles_unstable")(r), Aa(r);+});+He.displayName = "CardPreview";+const $ = ir({+  extensionButton: {},+  extensionsDialogSurface: {+    height: "auto",+    width: "70vw",+    maxWidth: "600px",+    maxHeight: "70vh",+    backgroundColor: P.colorNeutralBackground2+  },+  extensionDialogBody: {+    maxWidth: "100%",+    maxHeight: "100%"+  },+  extensionDialogContent: {+    marginLeft: `calc(-1 * ${P.spacingHorizontalM})`,+    marginRight: `calc(-1 * ${P.spacingHorizontalS})`+  },+  extensionHeader: {},+  extensionItem: {},+  extensionCardPreview: {+    padding: `${P.spacingVerticalM} ${P.spacingHorizontalM}`,+    display: "flex",+    flexDirection: "column",+    rowGap: P.spacingVerticalL+  },+  extensionIntro: {+    display: "flex",+    alignItems: "center",+    columnGap: P.spacingHorizontalM+  },+  extensionDescription: {+    display: "flex",+    flexDirection: "row",+    columnGap: P.spacingHorizontalS+  },+  extensionButtonContainer: {+    marginLeft: "auto",+    alignSelf: "flex-start"+  },+  spinner: {+    animationDuration: "1s",+    animationName: {+      from: { opacity: 0 },+      to: { opacity: 1 }+    }+  },+  webResourceDiv: {+    display: "flex",+    flexDirection: "column"+  },+  webResourceLink: {+    display: "flex",+    flexDirection: "row",+    columnGap: P.spacingHorizontalS,+    alignItems: "center"+  },+  personPopoverSurfaceDiv: {+    display: "flex",+    flexDirection: "column",+    rowGap: P.spacingVerticalS+  },+  accordionHeaderDiv: {+    display: "flex",+    flexDirection: "row",+    columnGap: P.spacingHorizontalS,+    alignItems: "center"+  },+  resourceDetailsDiv: {+    display: "flex",+    flexDirection: "column",+    rowGap: P.spacingVerticalS+  },+  peopleDetailsDiv: {+    display: "flex",+    flexDirection: "row",+    columnGap: P.spacingHorizontalXL+  },+  avatarGroupItem: {+    cursor: "pointer"+  }+});+function _a(e) {+  return typeof e == "string" ? { name: e } : e;+}+function ae(e) {+  return e.avatar ? { src: `data:image/png;base64,${e.avatar}` } : void 0;+}+function ge(e) {+  const o = g.useMemo(() => e ? e.filter((r) => !!r) : [], [e]);+  return g.useMemo(() => o.map(_a), [o]);+}+const R = (e) => {+  const { url: o, urlDisplay: r, icon: a, label: t } = e, n = $();+  return u.jsx("div", { className: n.webResourceDiv, children: u.jsx(ye, { content: t, relationship: "label", positioning: "before", withArrow: !0, children: u.jsxs("div", { className: n.webResourceLink, children: [a, u.jsx(mr, { url: o, value: r || o })] }) }) });+}, pe = (e) => {+  const { person: o, title: r, disabled: a, children: t } = e, n = $();+  return a ? u.jsx(u.Fragment, { children: t }) : u.jsxs(kr, { withArrow: !0, children: [u.jsx(yr, { disableButtonEnhancement: !0, children: t }), u.jsx(xr, { children: u.jsxs("div", { className: n.personPopoverSurfaceDiv, children: [u.jsx(le, { name: o.name, secondaryText: r, avatar: { image: ae(o) } }), o.email && u.jsx(R, { url: `mailto:${o.email}`, urlDisplay: o.email, icon: u.jsx(Br, {}), label: "Email" }), o.url && u.jsx(R, { url: o.url, urlDisplay: o.url, icon: u.jsx(xe, {}), label: "Website" }), o.forumUserName && u.jsx(R, { url: `https://forum.babylonjs.com/u/${o.forumUserName}`, urlDisplay: o.forumUserName, icon: u.jsx(wr, {}), label: "Forum" })] }) })] });+}, Da = g.memo((e) => {+  const { extension: o } = e, { metadata: r } = o, a = $(), [t, n] = g.useState(!1), [c, l] = g.useState(!1), [f, i] = g.useState(!1);+  g.useEffect(() => {+    const x = () => {+      n(!o.isInstalled && !o.isStateChanging), l(o.isInstalled && !o.isStateChanging), i(o.isStateChanging);+    }, T = o.addStateChangedHandler(x);+    return x(), T.dispose;+  }, [o]);+  const [s] = ge(g.useMemo(() => [r.author], [r.author])), d = ge(r.contributors), v = r.homepage || r.repository || r.bugs, p = s || d.length > 0, h = v || p, j = s?.email || s?.url || s?.forumUserName, y = [r.version ? `${r.version}` : null, r.license ? `${r.license}` : null].filter(Boolean).join(" | "), B = g.useCallback(async () => {+    try {+      await o.installAsync();+    } catch {+    }+  }, [o]), q = g.useCallback(async () => {+    try {+      await o.uninstallAsync();+    } catch {+    }+  }, [o]);+  return u.jsxs(nr, { className: a.extensionItem, value: o.metadata.name, children: [u.jsx(lr, { className: a.extensionHeader, expandIconPosition: "end", children: u.jsxs("div", { className: a.accordionHeaderDiv, children: [u.jsx(fr, { children: o.metadata.name }), u.jsx(cr, { visible: o.isInstalled, children: u.jsx(E, { size: "small" }) })] }) }), u.jsx(sr, { children: u.jsxs(_e, { children: [u.jsx(Fe, { header: u.jsx(ur, { children: r.description }), description: u.jsx(dr, { italic: !0, children: y }) }), h && u.jsxs(He, { className: a.extensionCardPreview, children: [v && u.jsxs("div", { className: a.resourceDetailsDiv, style: { display: "flex" }, children: [r.homepage && u.jsx(R, { url: r.homepage, icon: u.jsx(xe, {}), label: "Website" }), r.repository && u.jsx(R, { url: r.repository, icon: u.jsx(vr, {}), label: "Repository" }), r.bugs && u.jsx(R, { url: r.bugs, icon: u.jsx(gr, {}), label: "Report Issues" })] }), p && u.jsxs("div", { className: a.peopleDetailsDiv, style: { display: "flex" }, children: [s && u.jsx(pe, { person: s, title: "Author", disabled: !j, children: u.jsx(le, { name: s.name, secondaryText: "Author", avatar: { image: ae(s) }, style: { cursor: j ? "pointer" : "default" } }) }), d.length > 0 && u.jsx(qe, { layout: "stack", children: d.map((x) => u.jsx(pe, { person: x, title: "Contributor", children: u.jsx(je, { name: x.name, className: a.avatarGroupItem, image: ae(x) }) }, x.name)) })] })] }), u.jsxs(De, { children: [t && u.jsx(X, { appearance: "primary", size: "small", icon: u.jsx(pr, {}), onClick: B, children: "Get" }), c && u.jsx(X, { appearance: "secondary", size: "small", icon: u.jsx(br, {}), onClick: q, children: "Remove" }), f && u.jsx(hr, { className: a.spinner, size: "extra-small" })] })] }) })] });+}), Ra = {+  friendlyName: "ExtensionList",+  consumes: [Je],+  factory: (e) => {+    const o = e.addToolbarItem({+      key: "ExtensionList",+      horizontalLocation: "right",+      verticalLocation: "top",+      teachingMoment: {+        title: "Extensions",+        description: "Extensions provide new optional features that can be useful to your specific task or workflow. Click this button to manage extensions."+      },+      order: -200,+      component: () => {+        const r = $(), [a, t] = g.useState("available"), n = Ke(), [c, l] = g.useState([]);+        return g.useEffect(() => {+          n && (async () => {+            const i = await n.queryExtensionsAsync(void 0, void 0, a === "installed"), s = await i.getExtensionsAsync(0, i.totalCount);+            l(s);+          })().catch((i) => {+            zr.Warn(`Failed to populate extensions: ${i}`);+          });+        }, [n, a]), u.jsxs(Ye, { children: [u.jsx(ce, { disableButtonEnhancement: !0, children: u.jsx(ye, { content: "Manage Extensions", relationship: "label", children: u.jsx(X, { className: r.extensionButton, appearance: "subtle", icon: u.jsx(Qe, {}) }) }) }), u.jsx(Ze, { className: r.extensionsDialogSurface, children: u.jsxs(er, { className: r.extensionDialogBody, children: [u.jsx(rr, { action: u.jsx(ce, { action: "close", children: u.jsx(X, { appearance: "subtle", "aria-label": "close", icon: u.jsx(or, {}) }) }), children: u.jsxs(u.Fragment, { children: ["Extensions", u.jsxs(Ce, { className: r.extensionDialogContent, selectedValue: a, onTabSelect: (f, i) => {+          t(i.value);+        }, children: [u.jsx(ee, { value: "available", children: "Available" }), u.jsx(ee, { value: "installed", children: "Installed" })] })] }) }), u.jsx(ar, { className: r.extensionDialogContent, children: u.jsx(tr, { collapsible: !0, children: c.map((f) => u.jsx(Da, { extension: f }, f.metadata.name)) }) })] }) })] });+      }+    });+    return {+      dispose: () => o.dispose()+    };+  }+};+export {+  Ra as ExtensionListServiceDefinition+};
vendor/adom-step/vendor/3d-viewer-dist/chunk-C5DT99Cs.jsadded+5
@@ -0,0 +1,5 @@+import { bW as r } from "./chunk-IERganv1.js";+const o = "oitFinalSimpleBlendPixelShader", t = `var uFrontColor: texture_2d<f32>;@fragment+fn main(input: FragmentInputs)->FragmentOutputs {var fragCoord: vec2i=vec2i(fragmentInputs.position.xy);var frontColor: vec4f=textureLoad(uFrontColor,fragCoord,0);fragmentOutputs.color=frontColor;}+`;+r.ShadersStoreWGSL[o] || (r.ShadersStoreWGSL[o] = t);
vendor/adom-step/vendor/3d-viewer-dist/chunk-CLk12wZ9.jsadded+72
@@ -0,0 +1,72 @@+import { bW as i } from "./chunk-IERganv1.js";+const e = "normalVertexShader", n = `precision highp float;attribute vec3 position;+#ifdef NORMAL+attribute vec3 normal;+#endif+#ifdef UV1+attribute vec2 uv;+#endif+#ifdef UV2+attribute vec2 uv2;+#endif+#ifdef VERTEXCOLOR+attribute vec4 color;+#endif+#include<bonesDeclaration>+#include<bakedVertexAnimationDeclaration>+#include<instancesDeclaration>+uniform mat4 view;uniform mat4 viewProjection;+#ifdef DIFFUSE+varying vec2 vDiffuseUV;uniform mat4 diffuseMatrix;uniform vec2 vDiffuseInfos;+#endif+#ifdef POINTSIZE+uniform float pointSize;+#endif+varying vec3 vPositionW;+#ifdef NORMAL+varying vec3 vNormalW;+#endif+#include<clipPlaneVertexDeclaration>+#include<logDepthDeclaration>+#include<fogVertexDeclaration>+#include<__decl__lightFragment>[0..maxSimultaneousLights]+#if defined(CLUSTLIGHT_BATCH) && CLUSTLIGHT_BATCH>0+varying float vViewDepth;+#endif+#define CUSTOM_VERTEX_DEFINITIONS+void main(void) {+#define CUSTOM_VERTEX_MAIN_BEGIN+#include<instancesVertex>+#include<bonesVertex>+#include<bakedVertexAnimation>+vec4 worldPos=finalWorld*vec4(position,1.0);gl_Position=viewProjection*worldPos;vPositionW=vec3(worldPos);+#ifdef NORMAL+vNormalW=normalize(vec3(finalWorld*vec4(normal,0.0)));+#endif+#ifndef UV1+vec2 uv=vec2(0.,0.);+#endif+#ifndef UV2+vec2 uv2=vec2(0.,0.);+#endif+#ifdef DIFFUSE+if (vDiffuseInfos.x==0.)+{vDiffuseUV=vec2(diffuseMatrix*vec4(uv,1.0,0.0));}+else+{vDiffuseUV=vec2(diffuseMatrix*vec4(uv2,1.0,0.0));}+#endif+#include<clipPlaneVertex>+#include<logDepthVertex>+#include<fogVertex>+#include<shadowsVertex>[0..maxSimultaneousLights]+#if defined(POINTSIZE) && !defined(WEBGPU)+gl_PointSize=pointSize;+#endif+#define CUSTOM_VERTEX_MAIN_END+}+`;+i.ShadersStore[e] || (i.ShadersStore[e] = n);+const o = { name: e, shader: n };+export {+  o as normalVertexShader+};
vendor/adom-step/vendor/3d-viewer-dist/chunk-CU2361BP.jsadded+10
@@ -0,0 +1,10 @@+import { bW as o } from "./chunk-IERganv1.js";+const e = "volumetricLightingRenderVolumeVertexShader", r = `#include<__decl__sceneVertex>+#include<__decl__meshVertex>+attribute vec3 position;varying vec4 vWorldPos;void main(void) {vec4 worldPos=world*vec4(position,1.0);vWorldPos=worldPos;gl_Position=viewProjection*worldPos;}+`;+o.ShadersStore[e] || (o.ShadersStore[e] = r);+const t = { name: e, shader: r };+export {+  t as volumetricLightingRenderVolumeVertexShader+};
vendor/adom-step/vendor/3d-viewer-dist/chunk-CXESUAmj.jsadded+996
@@ -0,0 +1,996 @@+import { i as t } from "./chunk-IERganv1.js";+class a {+  /**+   * Creates a new instance of the OpenPBRMaterialLoadingAdapter.+   * @param material - The OpenPBR material to adapt.+   */+  constructor(e) {+    this._diffuseTransmissionTint = t.White(), this._diffuseTransmissionTintTexture = null, this._material = e;+  }+  /**+   * Gets the underlying material+   */+  get material() {+    return this._material;+  }+  /**+   * Whether the material should be treated as unlit+   */+  get isUnlit() {+    return this._material.unlit;+  }+  /**+   * Sets whether the material should be treated as unlit+   */+  set isUnlit(e) {+    this._material.unlit = e;+  }+  // ========================================+  // CULLING PROPERTIES+  // ========================================+  /**+   * Sets whether back face culling is enabled.+   * @param value True to enable back face culling+   */+  set backFaceCulling(e) {+    this._material.backFaceCulling = e;+  }+  /**+   * Gets whether back face culling is enabled.+   * @returns True if back face culling is enabled+   */+  get backFaceCulling() {+    return this._material.backFaceCulling;+  }+  /**+   * Sets whether two-sided lighting is enabled.+   * @param value True to enable two-sided lighting+   */+  set twoSidedLighting(e) {+    this._material.twoSidedLighting = e;+  }+  /**+   * Gets whether two-sided lighting is enabled.+   * @returns True if two-sided lighting is enabled+   */+  get twoSidedLighting() {+    return this._material.twoSidedLighting;+  }+  // ========================================+  // ALPHA PROPERTIES+  // ========================================+  /**+   * Sets the alpha cutoff value for alpha testing.+   * Note: OpenPBR doesn't have a direct equivalent, so this is a no-op.+   * @param value The alpha cutoff threshold (ignored for OpenPBR)+   */+  set alphaCutOff(e) {+  }+  /**+   * Gets the alpha cutoff value.+   * @returns Default value of 0.5 (OpenPBR doesn't support this directly)+   */+  get alphaCutOff() {+    return 0.5;+  }+  /**+   * Sets whether to use alpha from the base color texture.+   * Note: OpenPBR handles this differently through the baseColorTexture alpha channel.+   * @param value True to use alpha from base color texture (handled automatically in OpenPBR)+   */+  set useAlphaFromBaseColorTexture(e) {+    this._material._useAlphaFromBaseColorTexture = e;+  }+  /**+   * Gets whether alpha is used from the base color texture.+   * @returns Always false for OpenPBR as it's handled automatically+   */+  get useAlphaFromBaseColorTexture() {+    return !1;+  }+  /**+   * Gets whether the transparency is treated as alpha coverage.+   */+  get transparencyAsAlphaCoverage() {+    return !1;+  }+  /**+   * Sets/Gets whether the transparency is treated as alpha coverage+   */+  set transparencyAsAlphaCoverage(e) {+  }+  // ========================================+  // BASE PARAMETERS+  // ========================================+  /**+   * Sets the base color of the OpenPBR material.+   * @param value The base color as a Color3+   */+  set baseColor(e) {+    this._material.baseColor = e;+  }+  /**+   * Gets the base color of the OpenPBR material.+   * @returns The base color as a Color3+   */+  get baseColor() {+    return this._material.baseColor;+  }+  /**+   * Sets the base color texture of the OpenPBR material.+   * @param value The base color texture or null+   */+  set baseColorTexture(e) {+    this._material.baseColorTexture = e;+  }+  /**+   * Gets the base color texture of the OpenPBR material.+   * @returns The base color texture or null+   */+  get baseColorTexture() {+    return this._material.baseColorTexture;+  }+  /**+   * Sets the base diffuse roughness of the OpenPBR material.+   * @param value The diffuse roughness value (0-1)+   */+  set baseDiffuseRoughness(e) {+    this._material.baseDiffuseRoughness = e;+  }+  /**+   * Gets the base diffuse roughness of the OpenPBR material.+   * @returns The diffuse roughness value (0-1)+   */+  get baseDiffuseRoughness() {+    return this._material.baseDiffuseRoughness;+  }+  /**+   * Sets the base diffuse roughness texture of the OpenPBR material.+   * @param value The diffuse roughness texture or null+   */+  set baseDiffuseRoughnessTexture(e) {+    this._material.baseDiffuseRoughnessTexture = e;+  }+  /**+   * Gets the base diffuse roughness texture of the OpenPBR material.+   * @returns The diffuse roughness texture or null+   */+  get baseDiffuseRoughnessTexture() {+    return this._material.baseDiffuseRoughnessTexture;+  }+  /**+   * Sets the base metalness value of the OpenPBR material.+   * @param value The metalness value (0-1)+   */+  set baseMetalness(e) {+    this._material.baseMetalness = e;+  }+  /**+   * Gets the base metalness value of the OpenPBR material.+   * @returns The metalness value (0-1)+   */+  get baseMetalness() {+    return this._material.baseMetalness;+  }+  /**+   * Sets the base metalness texture of the OpenPBR material.+   * @param value The metalness texture or null+   */+  set baseMetalnessTexture(e) {+    this._material.baseMetalnessTexture = e;+  }+  /**+   * Gets the base metalness texture of the OpenPBR material.+   * @returns The metalness texture or null+   */+  get baseMetalnessTexture() {+    return this._material.baseMetalnessTexture;+  }+  /**+   * Sets whether to use roughness from the metallic texture's green channel.+   * @param value True to use green channel for roughness+   */+  set useRoughnessFromMetallicTextureGreen(e) {+    this._material._useRoughnessFromMetallicTextureGreen = e;+  }+  /**+   * Sets whether to use metalness from the metallic texture's blue channel.+   * @param value True to use blue channel for metalness+   */+  set useMetallicFromMetallicTextureBlue(e) {+    this._material._useMetallicFromMetallicTextureBlue = e;+  }+  // ========================================+  // SPECULAR PARAMETERS+  // ========================================+  /**+   * Configures specular properties for OpenPBR material.+   * @param _enableEdgeColor Whether to enable edge color support (ignored for OpenPBR)+   */+  enableSpecularEdgeColor(e = !1) {+  }+  /**+   * Sets the specular weight of the OpenPBR material.+   * @param value The specular weight value (0-1)+   */+  set specularWeight(e) {+    this._material.specularWeight = e;+  }+  /**+   * Gets the specular weight of the OpenPBR material.+   * @returns The specular weight value (0-1)+   */+  get specularWeight() {+    return this._material.specularWeight;+  }+  /**+   * Sets the specular weight texture of the OpenPBR material.+   * If the same texture is used for specular color, optimizes by using alpha channel for weight.+   * @param value The specular weight texture or null+   */+  set specularWeightTexture(e) {+    this._material.specularColorTexture === e ? (this._material.specularWeightTexture = null, this._material._useSpecularWeightFromSpecularColorTexture = !0, this._material._useSpecularWeightFromAlpha = !0) : this._material.specularWeightTexture = e;+  }+  /**+   * Gets the specular weight texture of the OpenPBR material.+   * @returns The specular weight texture or null+   */+  get specularWeightTexture() {+    return this._material.specularWeightTexture;+  }+  /**+   * Sets the specular color of the OpenPBR material.+   * @param value The specular color as a Color3+   */+  set specularColor(e) {+    this._material.specularColor = e;+  }+  /**+   * Gets the specular color of the OpenPBR material.+   * @returns The specular color as a Color3+   */+  get specularColor() {+    return this._material.specularColor;+  }+  /**+   * Sets the specular color texture of the OpenPBR material.+   * If the same texture is used for specular weight, optimizes by using alpha channel for weight.+   * @param value The specular color texture or null+   */+  set specularColorTexture(e) {+    this._material.specularColorTexture = e, this._material.specularWeightTexture === this._material.specularColorTexture && (this._material.specularWeightTexture = null, this._material._useSpecularWeightFromSpecularColorTexture = !0, this._material._useSpecularWeightFromAlpha = !0);+  }+  /**+   * Gets the specular color texture of the OpenPBR material.+   * @returns The specular color texture or null+   */+  get specularColorTexture() {+    return this._material.specularColorTexture;+  }+  /**+   * Sets the specular roughness of the OpenPBR material.+   * @param value The roughness value (0-1)+   */+  set specularRoughness(e) {+    this._material.specularRoughness = e;+  }+  /**+   * Gets the specular roughness of the OpenPBR material.+   * @returns The roughness value (0-1)+   */+  get specularRoughness() {+    return this._material.specularRoughness;+  }+  /**+   * Sets the specular roughness texture of the OpenPBR material.+   * @param value The roughness texture or null+   */+  set specularRoughnessTexture(e) {+    this._material.specularRoughnessTexture = e;+  }+  /**+   * Gets the specular roughness texture of the OpenPBR material.+   * @returns The roughness texture or null+   */+  get specularRoughnessTexture() {+    return this._material.specularRoughnessTexture;+  }+  /**+   * Sets the specular index of refraction (IOR) of the OpenPBR material.+   * @param value The IOR value+   */+  set specularIor(e) {+    this._material.specularIor = e;+  }+  /**+   * Gets the specular index of refraction (IOR) of the OpenPBR material.+   * @returns The IOR value+   */+  get specularIor() {+    return this._material.specularIor;+  }+  // ========================================+  // EMISSION PARAMETERS+  // ========================================+  /**+   * Sets the emission color of the OpenPBR material.+   * @param value The emission color as a Color3+   */+  set emissionColor(e) {+    this._material.emissionColor = e;+  }+  /**+   * Gets the emission color of the OpenPBR material.+   * @returns The emission color as a Color3+   */+  get emissionColor() {+    return this._material.emissionColor;+  }+  /**+   * Sets the emission luminance of the OpenPBR material.+   * @param value The emission luminance value+   */+  set emissionLuminance(e) {+    this._material.emissionLuminance = e;+  }+  /**+   * Gets the emission luminance of the OpenPBR material.+   * @returns The emission luminance value+   */+  get emissionLuminance() {+    return this._material.emissionLuminance;+  }+  /**+   * Sets the emission color texture of the OpenPBR material.+   * @param value The emission texture or null+   */+  set emissionColorTexture(e) {+    this._material.emissionColorTexture = e;+  }+  /**+   * Gets the emission color texture of the OpenPBR material.+   * @returns The emission texture or null+   */+  get emissionColorTexture() {+    return this._material.emissionColorTexture;+  }+  // ========================================+  // AMBIENT OCCLUSION+  // ========================================+  /**+   * Sets the ambient occlusion texture of the OpenPBR material.+   * @param value The ambient occlusion texture or null+   */+  set ambientOcclusionTexture(e) {+    this._material.ambientOcclusionTexture = e;+  }+  /**+   * Gets the ambient occlusion texture of the OpenPBR material.+   * @returns The ambient occlusion texture or null+   */+  get ambientOcclusionTexture() {+    return this._material.ambientOcclusionTexture;+  }+  /**+   * Sets the ambient occlusion texture strength by modifying the texture's level.+   * @param value The strength value (typically 0-1)+   */+  set ambientOcclusionTextureStrength(e) {+    const s = this._material.ambientOcclusionTexture;+    s && (s.level = e);+  }+  /**+   * Gets the ambient occlusion texture strength from the texture's level property.+   * @returns The strength value, defaults to 1.0 if no texture or level is set+   */+  get ambientOcclusionTextureStrength() {+    return this._material.ambientOcclusionTexture?.level ?? 1;+  }+  // ========================================+  // COAT PARAMETERS+  // ========================================+  /**+   * Configures coat parameters for OpenPBR material.+   * OpenPBR coat is already built-in, so no configuration is needed.+   */+  configureCoat() {+  }+  /**+   * Sets the coat weight of the OpenPBR material.+   * @param value The coat weight value (0-1)+   */+  set coatWeight(e) {+    this._material.coatWeight = e;+  }+  /**+   * Gets the coat weight of the OpenPBR material.+   * @returns The coat weight value (0-1)+   */+  get coatWeight() {+    return this._material.coatWeight;+  }+  /**+   * Sets the coat weight texture of the OpenPBR material.+   * @param value The coat weight texture or null+   */+  set coatWeightTexture(e) {+    this._material.coatWeightTexture = e;+  }+  /**+   * Gets the coat weight texture of the OpenPBR material.+   * @returns The coat weight texture or null+   */+  get coatWeightTexture() {+    return this._material.coatWeightTexture;+  }+  /**+   * Sets the coat color of the OpenPBR material.+   * @param value The coat color as a Color3+   */+  set coatColor(e) {+    this._material.coatColor = e;+  }+  /**+   * Sets the coat color texture of the OpenPBR material.+   * @param value The coat color texture or null+   */+  set coatColorTexture(e) {+    this._material.coatColorTexture = e;+  }+  /**+   * Sets the coat roughness of the OpenPBR material.+   * @param value The coat roughness value (0-1)+   */+  set coatRoughness(e) {+    this._material.coatRoughness = e;+  }+  /**+   * Gets the coat roughness of the OpenPBR material.+   * @returns The coat roughness value (0-1)+   */+  get coatRoughness() {+    return this._material.coatRoughness;+  }+  /**+   * Sets the coat roughness texture of the OpenPBR material.+   * @param value The coat roughness texture or null+   */+  set coatRoughnessTexture(e) {+    this._material.coatRoughnessTexture = e, e && (this._material._useCoatRoughnessFromGreenChannel = !0);+  }+  /**+   * Gets the coat roughness texture of the OpenPBR material.+   * @returns The coat roughness texture or null+   */+  get coatRoughnessTexture() {+    return this._material.coatRoughnessTexture;+  }+  /**+   * Sets the coat index of refraction (IOR) of the OpenPBR material.+   */+  set coatIor(e) {+    this._material.coatIor = e;+  }+  /**+   * Sets the coat darkening value of the OpenPBR material.+   * @param value The coat darkening value+   */+  set coatDarkening(e) {+    this._material.coatDarkening = e;+  }+  /**+   * Sets the coat darkening texture (OpenPBR: coatDarkeningTexture, no PBR equivalent)+   */+  set coatDarkeningTexture(e) {+    this._material.coatDarkeningTexture = e;+  }+  /**+   * Sets the coat roughness anisotropy.+   * TODO: Implementation pending OpenPBR coat anisotropy feature availability.+   * @param value The coat anisotropy intensity value+   */+  set coatRoughnessAnisotropy(e) {+    this._material.coatRoughnessAnisotropy = e;+  }+  /**+   * Gets the coat roughness anisotropy.+   * TODO: Implementation pending OpenPBR coat anisotropy feature availability.+   * @returns Currently returns 0 as coat anisotropy is not yet available+   */+  get coatRoughnessAnisotropy() {+    return this._material.coatRoughnessAnisotropy;+  }+  /**+   * Sets the coat tangent angle for anisotropy.+   * TODO: Implementation pending OpenPBR coat anisotropy feature availability.+   * @param value The coat anisotropy rotation angle in radians+   */+  set geometryCoatTangentAngle(e) {+    this._material.geometryCoatTangentAngle = e;+  }+  /**+   * Sets the coat tangent texture for anisotropy.+   * TODO: Implementation pending OpenPBR coat anisotropy feature availability.+   * @param value The coat anisotropy texture or null+   */+  set geometryCoatTangentTexture(e) {+    this._material.geometryCoatTangentTexture = e, e && (this._material._useCoatRoughnessAnisotropyFromTangentTexture = !0);+  }+  /**+   * Gets the coat tangent texture for anisotropy.+   * TODO: Implementation pending OpenPBR coat anisotropy feature availability.+   * @returns Currently returns null as coat anisotropy is not yet available+   */+  get geometryCoatTangentTexture() {+    return this._material.geometryCoatTangentTexture;+  }+  // ========================================+  // TRANSMISSION LAYER+  // ========================================+  /**+   * Configures transmission for OpenPBR material.+   */+  configureTransmission() {+    this._material.geometryThinWalled = 1, this._material.transmissionDepth = 0;+  }+  /**+   * Sets the transmission weight.+   * @param value The transmission weight value (0-1)+   */+  set transmissionWeight(e) {+    this._material.transmissionWeight = e;+  }+  /**+   * Sets the transmission weight texture.+   * @param value The transmission weight texture or null+   */+  set transmissionWeightTexture(e) {+    this._material.transmissionWeightTexture = e;+  }+  /**+   * Gets the transmission weight.+   * @returns Currently returns 0 as transmission is not yet available+   */+  get transmissionWeight() {+    return this._material.transmissionWeight;+  }+  /**+   * Sets the transmission scatter coefficient.+   * @param value The scatter coefficient as a Vector3+   */+  set transmissionScatter(e) {+    this._material.transmissionScatter = e;+  }+  /**+   * Gets the transmission scatter coefficient.+   * @returns The scatter coefficient as a Vector3+   */+  get transmissionScatter() {+    return this._material.transmissionScatter;+  }+  /**+   * Sets the transmission scatter texture.+   * @param value The transmission scatter texture or null+   */+  set transmissionScatterTexture(e) {+    this._material.transmissionScatterTexture = e;+  }+  /**+   * Gets the transmission scatter texture.+   * @returns The transmission scatter texture or null+   */+  get transmissionScatterTexture() {+    return this._material.transmissionScatterTexture;+  }+  /**+   * Sets the transmission scattering anisotropy.+   * @param value The anisotropy intensity value (-1 to 1)+   */+  set transmissionScatterAnisotropy(e) {+    this._material.transmissionScatterAnisotropy = e;+  }+  /**+   * Sets the transmission dispersion Abbe number.+   * @param value The Abbe number value+   */+  set transmissionDispersionAbbeNumber(e) {+    this._material.transmissionDispersionAbbeNumber = e;+  }+  /**+   * Sets the transmission dispersion scale.+   * @param value The dispersion scale value+   */+  set transmissionDispersionScale(e) {+    this._material.transmissionDispersionScale = e;+  }+  /**+   * Sets the attenuation distance.+   * @param value The attenuation distance value+   */+  set transmissionDepth(e) {+    e !== Number.MAX_VALUE || this._material.transmissionDepth !== 0 ? this._material.transmissionDepth = e : this._material.transmissionDepth = 0;+  }+  /**+   * Gets the attenuation distance.+   */+  get transmissionDepth() {+    return this._material.transmissionDepth;+  }+  /**+   * Sets the attenuation color.+   * @param value The attenuation color as a Color3+   */+  set transmissionColor(e) {+    e.equals(t.White()) || (this._material.transmissionColor = e);+  }+  /**+   * Gets the attenuation color.+   */+  get transmissionColor() {+    return this._material.transmissionColor;+  }+  /**+   * Gets the refraction background texture+   * @returns The refraction background texture or null+   */+  get refractionBackgroundTexture() {+    return this._material.backgroundRefractionTexture;+  }+  /**+   * Sets the refraction background texture+   * @param value The refraction background texture or null+   */+  set refractionBackgroundTexture(e) {+    this._material.backgroundRefractionTexture = e;+  }+  // ========================================+  // VOLUME PROPERTIES+  // ========================================+  configureVolume() {+    this._material.geometryThinWalled = 0;+  }+  /**+   * Sets whether the material is thin-walled (i.e. non-volumetric) or not.+   */+  set geometryThinWalled(e) {+    this._material.geometryThinWalled = e ? 1 : 0;+  }+  /**+   * Gets whether the material is thin-walled (i.e. non-volumetric) or not.+   */+  get geometryThinWalled() {+    return !!this._material.geometryThinWalled;+  }+  /**+   * Sets the thickness texture.+   * @param value The thickness texture or null+   */+  set volumeThicknessTexture(e) {+    this._material.geometryThicknessTexture = e, this._material._useGeometryThicknessFromGreenChannel = !0;+  }+  /**+   * Sets the thickness factor.+   * @param value The thickness value+   */+  set volumeThickness(e) {+    this._material.geometryThickness = e;+  }+  // ========================================+  // SUBSURFACE PROPERTIES (Subsurface Scattering)+  // ========================================+  /**+   * Configures subsurface properties for PBR material+   */+  configureSubsurface() {+    this._material.geometryThinWalled = 1, this._material.subsurfaceScatterAnisotropy = 1;+  }+  /**+   * Sets the subsurface weight+   */+  set subsurfaceWeight(e) {+    this._material.subsurfaceWeight = e;+  }+  get subsurfaceWeight() {+    return this._material.subsurfaceWeight;+  }+  /**+   * Sets the subsurface weight texture+   */+  set subsurfaceWeightTexture(e) {+    this._material.subsurfaceWeightTexture = e;+  }+  /**+   * Sets the subsurface color.+   * @param value The subsurface tint color as a Color3+   */+  set subsurfaceColor(e) {+    this._material.subsurfaceColor = e;+  }+  /**+   * Sets the subsurface color texture.+   * @param value The subsurface tint texture or null+   */+  set subsurfaceColorTexture(e) {+    this._material.subsurfaceColorTexture = e;+  }+  /**+   * Sets the diffuse transmission tint of the material+   */+  set diffuseTransmissionTint(e) {+    this._diffuseTransmissionTint = e;+  }+  /**+   * Gets the diffuse transmission tint of the material+   */+  get diffuseTransmissionTint() {+    return this._diffuseTransmissionTint;+  }+  /**+   * Sets the diffuse transmission tint texture of the material+   */+  set diffuseTransmissionTintTexture(e) {+    this._diffuseTransmissionTintTexture = e;+  }+  /**+   * Gets the subsurface radius for subsurface scattering.+   * subsurfaceRadiusScale * subsurfaceRadius gives the mean free path per color channel.+   */+  get subsurfaceRadius() {+    return this._material.subsurfaceRadius;+  }+  /**+   * Sets the subsurface radius for subsurface scattering.+   * subsurfaceRadiusScale * subsurfaceRadius gives the mean free path per color channel.+   * @param value The subsurface radius value+   */+  set subsurfaceRadius(e) {+    this._material.subsurfaceRadius = e;+  }+  /**+   * Gets the subsurface radius scale for subsurface scattering.+   * subsurfaceRadiusScale * subsurfaceRadius gives the mean free path per color channel.+   */+  get subsurfaceRadiusScale() {+    return this._material.subsurfaceRadiusScale;+  }+  /**+   * Sets the subsurface radius scale for subsurface scattering.+   * subsurfaceRadiusScale * subsurfaceRadius gives the mean free path per color channel.+   * @param value The subsurface radius scale as a Color3+   */+  set subsurfaceRadiusScale(e) {+    this._material.subsurfaceRadiusScale = e;+  }+  /**+   * Sets the subsurface scattering anisotropy.+   * @param value The anisotropy intensity value+   */+  set subsurfaceScatterAnisotropy(e) {+    this._material.subsurfaceScatterAnisotropy = e;+  }+  /**+   * Does this material have a translucent surface (i.e. either transmission or subsurface)?+   * @returns True if the material is translucent, false otherwise+   */+  isTranslucent() {+    return this.transmissionWeight > 0 || this.subsurfaceWeight > 0;+  }+  // ========================================+  // FUZZ LAYER (Sheen)+  // ========================================+  /**+   * Configures fuzz for OpenPBR.+   * Enables fuzz and sets up proper configuration.+   */+  configureFuzz() {+  }+  /**+   * Sets the fuzz weight.+   * @param value The fuzz weight value+   */+  set fuzzWeight(e) {+    this._material.fuzzWeight = e;+  }+  /**+   * Sets the fuzz weight texture.+   * @param value The fuzz weight texture or null+   */+  set fuzzWeightTexture(e) {+    this._material.fuzzWeightTexture = e;+  }+  /**+   * Sets the fuzz color.+   * @param value The fuzz color as a Color3+   */+  set fuzzColor(e) {+    this._material.fuzzColor = e;+  }+  /**+   * Sets the fuzz color texture.+   * @param value The fuzz color texture or null+   */+  set fuzzColorTexture(e) {+    this._material.fuzzColorTexture = e;+  }+  /**+   * Sets the fuzz roughness.+   * @param value The fuzz roughness value (0-1)+   */+  set fuzzRoughness(e) {+    this._material.fuzzRoughness = e;+  }+  /**+   * Sets the fuzz roughness texture.+   * @param value The fuzz roughness texture or null+   */+  set fuzzRoughnessTexture(e) {+    this._material.fuzzRoughnessTexture = e, this._material._useFuzzRoughnessFromTextureAlpha = !0;+  }+  // ========================================+  // ANISOTROPY+  // ========================================+  /**+   * Sets the specular roughness anisotropy of the OpenPBR material.+   * @param value The anisotropy intensity value+   */+  set specularRoughnessAnisotropy(e) {+    this._material.specularRoughnessAnisotropy = e;+  }+  /**+   * Gets the specular roughness anisotropy of the OpenPBR material.+   * @returns The anisotropy intensity value+   */+  get specularRoughnessAnisotropy() {+    return this._material.specularRoughnessAnisotropy;+  }+  /**+   * Sets the anisotropy rotation angle.+   * @param value The anisotropy rotation angle in radians+   */+  set geometryTangentAngle(e) {+    this._material.geometryTangentAngle = e;+  }+  /**+   * Sets the geometry tangent texture for anisotropy.+   * Automatically enables using anisotropy from the tangent texture.+   * @param value The anisotropy texture or null+   */+  set geometryTangentTexture(e) {+    this._material.geometryTangentTexture = e, this._material._useSpecularRoughnessAnisotropyFromTangentTexture = !0;+  }+  /**+   * Gets the geometry tangent texture for anisotropy.+   * @returns The anisotropy texture or null+   */+  get geometryTangentTexture() {+    return this._material.geometryTangentTexture;+  }+  /**+   * Configures glTF-style anisotropy for the OpenPBR material.+   * @param useGltfStyle Whether to use glTF-style anisotropy+   */+  configureGltfStyleAnisotropy(e = !0) {+    this._material._useGltfStyleAnisotropy = e;+  }+  // ========================================+  // THIN FILM IRIDESCENCE+  // ========================================+  /**+   * Sets the thin film weight.+   * @param value The thin film weight value+   */+  set thinFilmWeight(e) {+    this._material.thinFilmWeight = e;+  }+  /**+   * Sets the thin film IOR.+   * @param value The thin film IOR value+   */+  set thinFilmIor(e) {+    this._material.thinFilmIor = e;+  }+  /**+   * Sets the thin film thickness minimum.+   * @param value The minimum thickness value in nanometers+   */+  set thinFilmThicknessMinimum(e) {+    this._material.thinFilmThicknessMin = e / 1e3;+  }+  /**+   * Sets the thin film thickness maximum.+   * @param value The maximum thickness value in nanometers+   */+  set thinFilmThicknessMaximum(e) {+    this._material.thinFilmThickness = e / 1e3;+  }+  /**+   * Sets the thin film weight texture.+   * @param value The thin film weight texture or null+   */+  set thinFilmWeightTexture(e) {+    this._material.thinFilmWeightTexture = e;+  }+  /**+   * Sets the thin film thickness texture.+   * @param value The thin film thickness texture or null+   */+  set thinFilmThicknessTexture(e) {+    this._material.thinFilmThicknessTexture = e, this._material._useThinFilmThicknessFromTextureGreen = !0;+  }+  // ========================================+  // UNLIT MATERIALS+  // ========================================+  /**+   * Sets whether the OpenPBR material is unlit.+   * @param value True to make the material unlit+   */+  set unlit(e) {+    this._material.unlit = e;+  }+  // ========================================+  // GEOMETRY PARAMETERS+  // ========================================+  /**+   * Sets the geometry opacity of the OpenPBR material.+   * @param value The opacity value (0-1)+   */+  set geometryOpacity(e) {+    this._material.geometryOpacity = e;+  }+  /**+   * Gets the geometry opacity of the OpenPBR material.+   * @returns The opacity value (0-1)+   */+  get geometryOpacity() {+    return this._material.geometryOpacity;+  }+  /**+   * Sets the geometry normal texture of the OpenPBR material.+   * @param value The normal texture or null+   */+  set geometryNormalTexture(e) {+    this._material.geometryNormalTexture = e;+  }+  /**+   * Gets the geometry normal texture of the OpenPBR material.+   * @returns The normal texture or null+   */+  get geometryNormalTexture() {+    return this._material.geometryNormalTexture;+  }+  /**+   * Sets the normal map inversions for the OpenPBR material.+   * Note: OpenPBR may handle normal map inversions differently or may not need them.+   * @param invertX Whether to invert the normal map on the X axis (may be ignored)+   * @param invertY Whether to invert the normal map on the Y axis (may be ignored)+   */+  setNormalMapInversions(e, s) {+  }+  /**+   * Sets the geometry coat normal texture of the OpenPBR material.+   * @param value The coat normal texture or null+   */+  set geometryCoatNormalTexture(e) {+    this._material.geometryCoatNormalTexture = e;+  }+  /**+   * Gets the geometry coat normal texture of the OpenPBR material.+   * @returns The coat normal texture or null+   */+  get geometryCoatNormalTexture() {+    return this._material.geometryCoatNormalTexture;+  }+  /**+   * Sets the geometry coat normal texture scale.+   * @param value The scale value for the coat normal texture+   */+  set geometryCoatNormalTextureScale(e) {+    this._material.geometryCoatNormalTexture && (this._material.geometryCoatNormalTexture.level = e);+  }+  finalize() {+    (this._diffuseTransmissionTint && !this._diffuseTransmissionTint.equals(t.White()) || this._diffuseTransmissionTintTexture) && (this._material.geometryThinWalled ? (this.subsurfaceColor = this._diffuseTransmissionTint, this.subsurfaceColorTexture = this._diffuseTransmissionTintTexture) : this._material.coatWeight == 0 && (!this.baseColor.equals(t.White()) || this.baseColorTexture) && (this._material.coatWeight = this.subsurfaceWeight, this._material.coatWeightTexture = this.subsurfaceWeightTexture, this._material.coatColor = this._diffuseTransmissionTint, this._material.coatColorTexture = this._diffuseTransmissionTintTexture, this._material.coatIor = this._material.specularIor, this._material.coatDarkening = 0, this._material.coatRoughness = this._material.specularRoughness, this._material.coatRoughnessTexture = this._material.specularRoughnessTexture, this._material.specularRoughness = 1, this._material.specularRoughnessTexture = null)), this.transmissionWeight > 0 && (this._material.geometryThinWalled || this._material.transmissionDepth === 0 ? (this._material.transmissionColor = this._material.baseColor, this._material.transmissionColorTexture = this._material.baseColorTexture) : this._material.coatWeight == 0 && (!this.baseColor.equals(t.White()) || this.baseColorTexture !== null) && (this._material.coatWeight = this.transmissionWeight, this._material.coatWeightTexture = this.transmissionWeightTexture, this._material.coatColor = this.baseColor, this._material.coatColorTexture = this.baseColorTexture, this._material.coatIor = this._material.specularIor, this._material.coatDarkening = 0, this._material.coatRoughness = this._material.specularRoughness, this._material.coatRoughnessTexture = this._material.specularRoughnessTexture));+  }+}+export {+  a as OpenPBRMaterialLoadingAdapter+};
vendor/adom-step/vendor/3d-viewer-dist/chunk-CbPvriUc.jsadded+74
@@ -0,0 +1,74 @@+import { bW as i } from "./chunk-IERganv1.js";+const e = "normalVertexShader", f = `attribute position: vec3f;+#ifdef NORMAL+attribute normal: vec3f;+#endif+#ifdef UV1+attribute uv: vec2f;+#endif+#ifdef UV2+attribute uv2: vec2f;+#endif+#ifdef VERTEXCOLOR+attribute color: vec4f;+#endif+#include<bonesDeclaration>+#include<bakedVertexAnimationDeclaration>+#include<instancesDeclaration>+uniform view: mat4x4f;uniform viewProjection: mat4x4f;+#ifdef DIFFUSE+varying vDiffuseUV: vec2f;uniform diffuseMatrix: mat4x4f;uniform vDiffuseInfos: vec2f;+#endif+#ifdef POINTSIZE+uniform pointSize: f32;+#endif+varying vPositionW: vec3f;+#ifdef NORMAL+varying vNormalW: vec3f;+#endif+#include<clipPlaneVertexDeclaration>+#include<logDepthDeclaration>+#include<fogVertexDeclaration>+#include<__decl__lightVxFragment>[0..maxSimultaneousLights]+#if defined(CLUSTLIGHT_BATCH) && CLUSTLIGHT_BATCH>0+varying vViewDepth: f32;+#endif+#define CUSTOM_VERTEX_DEFINITIONS+@vertex+fn main(input : VertexInputs)->FragmentInputs {+#define CUSTOM_VERTEX_MAIN_BEGIN+#include<instancesVertex>+#include<bonesVertex>+#include<bakedVertexAnimation>+var worldPos: vec4f=finalWorld* vec4f(vertexInputs.position,1.0);vertexOutputs.position=uniforms.viewProjection*worldPos;vertexOutputs.vPositionW= worldPos.xyz;+#ifdef NORMAL+vertexOutputs.vNormalW=normalize(( finalWorld* vec4f(vertexInputs.normal,0.0)).xyz);+#endif+#ifndef UV1+var uv: vec2f= vec2f(0.,0.);+#else+var uv: vec2f=vertexInputs.uv;+#endif+#ifndef UV2+var uv2: vec2f= vec2f(0.,0.);+#else+var uv2: vec2f=vertexInputs.uv2;+#endif+#ifdef DIFFUSE+if (uniforms.vDiffuseInfos.x==0.)+{vertexOutputs.vDiffuseUV=(uniforms.diffuseMatrix* vec4f(uv,1.0,0.0)).xy;}+else+{vertexOutputs.vDiffuseUV=(uniforms.diffuseMatrix* vec4f(uv2,1.0,0.0)).xy;}+#endif+#include<clipPlaneVertex>+#include<logDepthVertex>+#include<fogVertex>+#include<shadowsVertex>[0..maxSimultaneousLights]+#define CUSTOM_VERTEX_MAIN_END+}+`;+i.ShadersStoreWGSL[e] || (i.ShadersStoreWGSL[e] = f);+const t = { name: e, shader: f };+export {+  t as normalVertexShaderWGSL+};
vendor/adom-step/vendor/3d-viewer-dist/chunk-CeVapcuS.jsadded+31
@@ -0,0 +1,31 @@+import { bX as n, bV as r, bY as a, bZ as h, R as p } from "./chunk-IERganv1.js";+class o extends n {+  /**+   * Creates a new FlowGraphPointerDownEventBlock.+   * @param config optional configuration+   */+  constructor(e) {+    super(e), this.type = "PointerDown", this.targetMesh = this.registerDataInput("targetMesh", r, e?.targetMesh), this.pointerId = this.registerDataOutput("pointerId", a), this.pickedMesh = this.registerDataOutput("pickedMesh", r), this.pickedPoint = this.registerDataOutput("pickedPoint", r);+  }+  /** @internal */+  _executeEvent(e, s) {+    const i = this.targetMesh.getValue(e), t = s.pickInfo?.pickedMesh;+    return i && !(t === i || t && h(t, i)) ? !0 : (this.pointerId.setValue(s.event.pointerId, e), this.pickedMesh.setValue(t ?? null, e), this.pickedPoint.setValue(s.pickInfo?.pickedPoint ?? null, e), this._execute(e), !this.config?.stopPropagation);+  }+  /** @internal */+  _preparePendingTasks(e) {+  }+  /** @internal */+  _cancelPendingTasks(e) {+  }+  /**+   * @returns the class name of the block.+   */+  getClassName() {+    return "FlowGraphPointerDownEventBlock";+  }+}+p("FlowGraphPointerDownEventBlock", o);+export {+  o as FlowGraphPointerDownEventBlock+};
vendor/adom-step/vendor/3d-viewer-dist/chunk-CesoqJPD.jsadded+30
@@ -0,0 +1,30 @@+import { ar as u, A as t, r, af as f, as as p, at as m, au as R } from "./chunk-CODtpsMq.js";+import { c8 as x } from "./chunk-IERganv1.js";+const d = ({ scene: n }) => {+  const [e, o] = r.useState("localhost"), [s, l] = r.useState(1234), c = r.useRef(null), i = r.useCallback(() => {+    c.current && c.current.close(), c.current = new x(n, e, s);+  }, [n, e, s]);+  return t.jsxs(t.Fragment, { children: [t.jsx(f, { label: "Hostname", value: e, onChange: (a) => o(a) }), t.jsx(p, { label: "Port", value: s, onChange: (a) => l(a), forceInt: !0 }), t.jsx(m, { label: "Connect", icon: R, onClick: i })] });+}, h = {+  friendlyName: "Reflector Tools",+  consumes: [u],+  factory: (n) => {+    const e = [];+    return e.push(n.addSectionContent({+      key: "Reflector",+      section: "Reflector",+      component: ({ context: o }) => t.jsx(d, { scene: o })+    })), {+      dispose: () => {+        e.forEach((o) => o.dispose());+      }+    };+  }+};+var g = {+  serviceDefinitions: [h]+};+export {+  h as ReflectorServiceDefinition,+  g as default+};
vendor/adom-step/vendor/3d-viewer-dist/chunk-CktpeoLr.jsadded+2114
@@ -0,0 +1,2114 @@+import { H as N, d as ke, i as z, T as v, cI as xe, cJ as re, aB as le, cK as Ae, cL as we, cM as $, cN as Q, bQ as _e, U as Y, bM as Ue, cO as Be, cP as De, cQ as ee, ai as Z, bH as b, ch as K, x as P, ak as ue, V as O, Q as W, o as A, aK as Ne, a3 as J, N as k, cR as te, J as ne, ah as We, ag as Le, bR as H, cS as oe, j as ae, a8 as Ke, O as Pe, aA as ye, F as ze, b5 as qe, aC as Ge, cT as $e, cU as He, cV as je } from "./chunk-IERganv1.js";+const L = 1e-6, j = new z(0.04, 0.04, 0.04), Qe = 1024, ce = z.White(), Te = z.BlackReadOnly;+function Ye(a) {+  switch (a) {+    case "image/jpeg":+      return ".jpg";+    case "image/png":+      return ".png";+    case "image/webp":+      return ".webp";+    case "image/avif":+      return ".avif";+    case "image/ktx2":+      return ".ktx2";+  }+}+function Oe(a) {+  switch (a) {+    case "image/jpeg":+    case "image/png":+    case "image/webp":+    case "image/avif":+    case "image/ktx2":+      return !0;+    default:+      return !1;+  }+}+async function Je(a) {+  const e = a.getInternalTexture();+  if (!e || e.source !== 1 || e.invertY)+    return null;+  const t = e._buffer;+  let s, n = a.mimeType;+  try {+    t ? ArrayBuffer.isView(t) ? s = t.buffer.slice(t.byteOffset, t.byteOffset + t.byteLength) : t instanceof ArrayBuffer ? s = t : t instanceof Blob ? (s = await t.arrayBuffer(), n = t.type || n) : typeof t == "string" ? (s = await N.LoadFileAsync(t), n = ee(t) || n) : typeof HTMLImageElement < "u" && t instanceof HTMLImageElement && (s = await N.LoadFileAsync(t.src), n = ee(t.src) || n) : (s = await N.LoadFileAsync(e.url), n = ee(e.url) || n);+  } catch {+    return null;+  }+  return s && Oe(n) ? new Blob([s], { type: n }) : null;+}+function Xe(a, e, t) {+  if (e < j.r)+    return 0;+  const s = j.r, n = a * t / (1 - j.r) + e - 2 * j.r, i = j.r - e, r = n * n - 4 * s * i;+  return _e.Clamp((-n + Math.sqrt(r)) / (2 * s), 0, 1);+}+function Ze(a) {+  const e = a.diffuseColor.toLinearSpace(a.getScene().getEngine().useExactSrgbConversions).scale(0.5), t = a.alpha, s = _e.Clamp(a.specularPower, 0, Qe), n = Be(s);+  return {+    baseColorFactor: [e.r, e.g, e.b, t],+    metallicFactor: 0,+    roughnessFactor: n+  };+}+function Ee(a, e) {+  e.needAlphaBlending() ? a.alphaMode = "BLEND" : e.needAlphaTesting() && (a.alphaMode = "MASK", a.alphaCutoff = e.alphaCutOff);+}+function Me(a, e, t) {+  const s = new Uint8Array(a * e * 4);+  for (let i = 0; i < s.length; i = i + 4)+    s[i] = s[i + 1] = s[i + 2] = s[i + 3] = 255;+  return De.CreateRGBATexture(s, a, e, t);+}+function Ce(a) {+  if (a instanceof Uint8Array) {+    const e = a.length, t = new Float32Array(a.length);+    for (let s = 0; s < e; ++s)+      t[s] = a[s] / 255;+    return t;+  } else {+    if (a instanceof Float32Array)+      return a;+    throw new Error("Unsupported pixel format!");+  }+}+class be {+  constructor(e) {+    this._exporter = e, this._textureMap = /* @__PURE__ */ new Map(), this._internalTextureToImage = {};+  }+  getTextureInfo(e) {+    return e ? this._textureMap.get(e.uniqueId) ?? null : null;+  }+  async exportStandardMaterialAsync(e, t) {+    const s = Ze(e), n = { name: e.name };+    if (e.backFaceCulling != null && !e.backFaceCulling && (e.twoSidedLighting || N.Warn(e.name + ": Back-face culling disabled and two-sided lighting disabled is not supported in glTF."), n.doubleSided = !0), t) {+      const r = [], o = e.diffuseTexture;+      o && r.push(this.exportTextureAsync(o).then((u) => {+        u && (s.baseColorTexture = u);+      }));+      const c = e.bumpTexture;+      c && r.push(this.exportTextureAsync(c).then((u) => {+        u && (n.normalTexture = u, c.level !== 1 && (n.normalTexture.scale = c.level));+      }));+      const h = e.emissiveTexture;+      h && (n.emissiveFactor = [1, 1, 1], r.push(this.exportTextureAsync(h).then((u) => {+        u && (n.emissiveTexture = u);+      })));+      const f = e.ambientTexture;+      f && r.push(this.exportTextureAsync(f).then((u) => {+        if (u) {+          const l = {+            index: u.index+          };+          n.occlusionTexture = l;+        }+      })), r.length > 0 && (this._exporter._materialNeedsUVsSet.add(e), await Promise.all(r));+    }+    (e.alpha < 1 || e.opacityTexture) && (e.alphaMode === ke.ALPHA_COMBINE ? n.alphaMode = "BLEND" : N.Warn(e.name + ": glTF 2.0 does not support alpha mode: " + e.alphaMode.toString())), e.emissiveColor && !e.emissiveColor.equalsWithEpsilon(Te, L) && (n.emissiveFactor = e.emissiveColor.asArray()), n.pbrMetallicRoughness = s, Ee(n, e), await this._finishMaterialAsync(n, e);+    const i = this._exporter._materials;+    return i.push(n), i.length - 1;+  }+  async _finishMaterialAsync(e, t) {+    const s = await this._exporter._extensionsPostExportMaterialAdditionalTexturesAsync("exportMaterial", e, t), n = [];+    for (const i of s)+      n.push(this.exportTextureAsync(i));+    await Promise.all(n), await this._exporter._extensionsPostExportMaterialAsync("exportMaterial", e, t);+  }+  /**+   * Resizes the two source textures to the same dimensions.  If a texture is null, a default white texture is generated.  If both textures are null, returns null+   * @param texture1 first texture to resize+   * @param texture2 second texture to resize+   * @param scene babylonjs scene+   * @returns resized textures or null+   */+  _resizeTexturesToSameDimensions(e, t, s) {+    const n = e ? e.getSize() : { width: 0, height: 0 }, i = t ? t.getSize() : { width: 0, height: 0 };+    let r, o;+    return n.width < i.width ? (e && e instanceof v ? r = xe.CreateResizedCopy(e, i.width, i.height, !0) : r = Me(i.width, i.height, s), o = t) : n.width > i.width ? (t && t instanceof v ? o = xe.CreateResizedCopy(t, n.width, n.height, !0) : o = Me(n.width, n.height, s), r = e) : (r = e, o = t), {+      texture1: r,+      texture2: o+    };+  }+  /**+   * Convert Specular Glossiness Textures to Metallic Roughness+   * See link below for info on the material conversions from PBR Metallic/Roughness and Specular/Glossiness+   * @see https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Archived/KHR_materials_pbrSpecularGlossiness/examples/convert-between-workflows-.js/babylon.pbrUtilities.js+   * @param diffuseTexture texture used to store diffuse information+   * @param specularGlossinessTexture texture used to store specular and glossiness information+   * @param factors specular glossiness material factors+   * @returns pbr metallic roughness interface or null+   */+  async _convertSpecularGlossinessTexturesToMetallicRoughnessAsync(e, t, s) {+    const n = new Array();+    if (!(e || t))+      return await Promise.reject("diffuse and specular glossiness textures are not defined!");+    const i = e ? e.getScene() : t ? t.getScene() : null;+    if (i) {+      const r = this._resizeTexturesToSameDimensions(e, t, i), o = r.texture1?.getSize();+      let c, h;+      const f = o.width, u = o.height, l = await r.texture1.readPixels(), m = await r.texture2.readPixels();+      if (l)+        c = Ce(l);+      else+        return await Promise.reject("Failed to retrieve pixels from diffuse texture!");+      if (m)+        h = Ce(m);+      else+        return await Promise.reject("Failed to retrieve pixels from specular glossiness texture!");+      const _ = h.byteLength, g = new Uint8Array(_), p = new Uint8Array(_), d = 4, w = new z(0, 0, 0);+      let y = 0, x = 0;+      for (let I = 0; I < u; ++I)+        for (let M = 0; M < f; ++M) {+          const T = (f * I + M) * d, U = new z(c[T], c[T + 1], c[T + 2]).toLinearSpace(i.getEngine().useExactSrgbConversions).multiply(s.diffuseColor), B = new z(h[T], h[T + 1], h[T + 2]).toLinearSpace(i.getEngine().useExactSrgbConversions).multiply(s.specularColor), F = h[T + 3] * s.glossiness, q = {+            diffuseColor: U,+            specularColor: B,+            glossiness: F+          }, D = this._convertSpecularGlossinessToMetallicRoughness(q);+          w.r = Math.max(w.r, D.baseColor.r), w.g = Math.max(w.g, D.baseColor.g), w.b = Math.max(w.b, D.baseColor.b), y = Math.max(y, D.metallic), x = Math.max(x, D.roughness), p[T] = D.baseColor.r * 255, p[T + 1] = D.baseColor.g * 255, p[T + 2] = D.baseColor.b * 255, p[T + 3] = r.texture1.hasAlpha ? c[T + 3] * 255 : 255, g[T] = 0, g[T + 1] = D.roughness * 255, g[T + 2] = D.metallic * 255, g[T + 3] = 255;+        }+      const E = {+        baseColor: w,+        metallic: y,+        roughness: x+      };+      let C = !1, S = !1;+      for (let I = 0; I < u; ++I)+        for (let M = 0; M < f; ++M) {+          const T = (f * I + M) * d;+          p[T] /= E.baseColor.r > L ? E.baseColor.r : 1, p[T + 1] /= E.baseColor.g > L ? E.baseColor.g : 1, p[T + 2] /= E.baseColor.b > L ? E.baseColor.b : 1;+          const B = z.FromInts(p[T], p[T + 1], p[T + 2]).toGammaSpace(i.getEngine().useExactSrgbConversions);+          p[T] = B.r * 255, p[T + 1] = B.g * 255, p[T + 2] = B.b * 255, B.equalsWithEpsilon(ce, L) || (S = !0), g[T + 1] /= E.roughness > L ? E.roughness : 1, g[T + 2] /= E.metallic > L ? E.metallic : 1, z.FromInts(255, g[T + 1], g[T + 2]).equalsWithEpsilon(ce, L) || (C = !0);+        }+      return C && n.push(re(g, f, u).then((I) => {+        E.metallicRoughnessTextureData = I;+      })), S && n.push(re(p, f, u).then((I) => {+        E.baseColorTextureData = I;+      })), await Promise.all(n).then(() => E);+    } else+      return await Promise.reject("_ConvertSpecularGlossinessTexturesToMetallicRoughness: Scene from textures is missing!");+  }+  /**+   * Converts specular glossiness material properties to metallic roughness+   * @param specularGlossiness interface with specular glossiness material properties+   * @returns interface with metallic roughness material properties+   */+  _convertSpecularGlossinessToMetallicRoughness(e) {+    const t = this._getPerceivedBrightness(e.diffuseColor), s = this._getPerceivedBrightness(e.specularColor), n = 1 - this._getMaxComponent(e.specularColor), i = Xe(t, s, n), r = e.diffuseColor.scale(n / (1 - j.r) / Math.max(1 - i, L)), o = e.specularColor.subtract(j.scale(1 - i)).scale(1 / Math.max(i, L));+    let c = z.Lerp(r, o, i * i);+    return c = c.clampToRef(0, 1, c), {+      baseColor: c,+      metallic: i,+      roughness: 1 - e.glossiness+    };+  }+  /**+   * Calculates the surface reflectance, independent of lighting conditions+   * @param color Color source to calculate brightness from+   * @returns number representing the perceived brightness, or zero if color is undefined+   */+  _getPerceivedBrightness(e) {+    return Math.sqrt(0.299 * e.r * e.r + 0.587 * e.g * e.g + 0.114 * e.b * e.b);+  }+  /**+   * Returns the maximum color component value+   * @param color+   * @returns maximum color component value, or zero if color is null or undefined+   */+  _getMaxComponent(e) {+    return Math.max(e.r, Math.max(e.g, e.b));+  }+  /**+   * Convert a PBRMaterial (Metallic/Roughness) to Metallic Roughness factors+   * @param baseColor Base color of the material+   * @param metallic Metallic factor of the material+   * @param roughness Roughness factor of the material+   * @param albedoTexture Albedo texture of the material+   * @param metallicTexture Metallic texture of the material+   * @param roughnessTexture Roughness texture of the material+   * @param babylonPBRMaterial BJS PBR Metallic Roughness Material+   * @param glTFPbrMetallicRoughness glTF PBR Metallic Roughness interface+   * @param hasUVs specifies if texture coordinates are present on the submesh to determine if textures should be applied+   * @returns glTF PBR Metallic Roughness factors+   */+  async _convertMetalRoughFactorsToMetallicRoughnessAsync(e, t, s, n, i, r, o, c, h) {+    const f = [], u = {+      baseColor: e,+      metallic: t,+      roughness: s+    };+    if (h)+      if (o instanceof le) {+        if (o.geometryOpacityTexture) {+          const l = n && n.getInternalTexture() ? n.getInternalTexture().uniqueId : 0, m = o.geometryOpacityTexture && o.geometryOpacityTexture.getInternalTexture() ? o.geometryOpacityTexture.getInternalTexture().uniqueId : 0, _ = +`${l}${m}`, g = this._textureMap.get(_);+          g ? c.baseColorTexture = g : f.push(Ae("baseColorOpacityTexture", we(n ? $(n, 0) : Q(1), n ? $(n, 1) : Q(1), n ? $(n, 2) : Q(1), $(o.geometryOpacityTexture, 0)), o.getScene()).then(async (p) => {+            const d = await this.exportTextureAsync(p, _);+            d && (c.baseColorTexture = d);+          }));+        } else+          n && f.push(this.exportTextureAsync(n).then((l) => {+            l && (c.baseColorTexture = l);+          }));+        if (o._useMetallicFromMetallicTextureBlue && i)+          f.push(this.exportTextureAsync(i).then((l) => {+            l && (c.metallicRoughnessTexture = l);+          }));+        else if (r || i) {+          const l = i && i.getInternalTexture() ? i.getInternalTexture().uniqueId : 0, m = r && r.getInternalTexture() ? r.getInternalTexture().uniqueId : 0, _ = +`${l}${m}`, g = this._textureMap.get(_);+          g ? c.metallicRoughnessTexture = g : f.push(Ae("MetalRoughTexture", we(o.ambientOcclusionTexture ? $(o.ambientOcclusionTexture, 0) : Q(1), r ? $(r, 0) : Q(1), i ? $(i, 0) : Q(1)), o.getScene()).then(async (p) => {+            const d = await this.exportTextureAsync(p, _);+            d && (c.metallicRoughnessTexture = d);+          }));+        }+      } else+        n && f.push(this.exportTextureAsync(n).then((l) => {+          l && (c.baseColorTexture = l);+        })), i && f.push(this.exportTextureAsync(i).then((l) => {+          l && (c.metallicRoughnessTexture = l);+        }));+    return f.length > 0 && (this._exporter._materialNeedsUVsSet.add(o), await Promise.all(f)), u;+  }+  _getTextureSampler(e) {+    const t = {};+    if (!e || !(e instanceof v))+      return t;+    const s = this._getGLTFTextureWrapMode(e.wrapU);+    s !== 10497 && (t.wrapS = s);+    const n = this._getGLTFTextureWrapMode(e.wrapV);+    switch (n !== 10497 && (t.wrapT = n), e.samplingMode) {+      case v.LINEAR_LINEAR: {+        t.magFilter = 9729, t.minFilter = 9729;+        break;+      }+      case v.LINEAR_NEAREST: {+        t.magFilter = 9729, t.minFilter = 9728;+        break;+      }+      case v.NEAREST_LINEAR: {+        t.magFilter = 9728, t.minFilter = 9729;+        break;+      }+      case v.NEAREST_LINEAR_MIPLINEAR: {+        t.magFilter = 9728, t.minFilter = 9987;+        break;+      }+      case v.NEAREST_NEAREST: {+        t.magFilter = 9728, t.minFilter = 9728;+        break;+      }+      case v.NEAREST_LINEAR_MIPNEAREST: {+        t.magFilter = 9728, t.minFilter = 9985;+        break;+      }+      case v.LINEAR_NEAREST_MIPNEAREST: {+        t.magFilter = 9729, t.minFilter = 9984;+        break;+      }+      case v.LINEAR_NEAREST_MIPLINEAR: {+        t.magFilter = 9729, t.minFilter = 9986;+        break;+      }+      case v.NEAREST_NEAREST_MIPLINEAR: {+        t.magFilter = 9728, t.minFilter = 9986;+        break;+      }+      case v.LINEAR_LINEAR_MIPLINEAR: {+        t.magFilter = 9729, t.minFilter = 9987;+        break;+      }+      case v.LINEAR_LINEAR_MIPNEAREST: {+        t.magFilter = 9729, t.minFilter = 9985;+        break;+      }+      case v.NEAREST_NEAREST_MIPNEAREST: {+        t.magFilter = 9728, t.minFilter = 9984;+        break;+      }+    }+    return t;+  }+  _getGLTFTextureWrapMode(e) {+    switch (e) {+      case v.WRAP_ADDRESSMODE:+        return 10497;+      case v.CLAMP_ADDRESSMODE:+        return 33071;+      case v.MIRROR_ADDRESSMODE:+        return 33648;+      default:+        return N.Error(`Unsupported Texture Wrap Mode ${e}!`), 10497;+    }+  }+  /**+   * Convert a PBRMaterial (Specular/Glossiness) to Metallic Roughness factors+   * @param babylonPBRMaterial BJS PBR Metallic Roughness Material+   * @param pbrMetallicRoughness glTF PBR Metallic Roughness interface+   * @param hasUVs specifies if texture coordinates are present on the submesh to determine if textures should be applied+   * @returns glTF PBR Metallic Roughness factors+   */+  async _convertSpecGlossFactorsToMetallicRoughnessAsync(e, t, s) {+    const n = {+      diffuseColor: e._albedoColor,+      specularColor: e._reflectivityColor,+      glossiness: e._microSurface+    }, i = e._albedoTexture, r = e._reflectivityTexture, o = e._useMicroSurfaceFromReflectivityMapAlpha;+    if (r && !o)+      return await Promise.reject("_ConvertPBRMaterial: Glossiness values not included in the reflectivity texture are currently not supported");+    if ((i || r) && s) {+      this._exporter._materialNeedsUVsSet.add(e);+      const c = this._exportTextureSampler(i || r), h = await this._convertSpecularGlossinessTexturesToMetallicRoughnessAsync(i, r, n), f = this._exporter._textures;+      if (h.baseColorTextureData) {+        const u = await this._exportImageAsync(`baseColor${f.length}`, h.baseColorTextureData);+        t.baseColorTexture = this._exportTextureInfo(u, c, i?.coordinatesIndex);+      }+      if (h.metallicRoughnessTextureData) {+        const u = await this._exportImageAsync(`metallicRoughness${f.length}`, h.metallicRoughnessTextureData);+        t.metallicRoughnessTexture = this._exportTextureInfo(u, c, r?.coordinatesIndex);+      }+      return h;+    } else+      return this._convertSpecularGlossinessToMetallicRoughness(n);+  }+  async exportPBRMaterialAsync(e, t) {+    const s = {}, n = {+      name: e.name+    }, i = e.isMetallicWorkflow();+    if (i) {+      const c = e._albedoColor, h = e.alpha;+      c && (s.baseColorFactor = [c.r, c.g, c.b, h]);+    }+    const r = i ? await this._convertMetalRoughFactorsToMetallicRoughnessAsync(e._albedoColor, e._metallic, e._roughness, e._albedoTexture, e._metallicTexture, e._metallicTexture, e, s, t) : await this._convertSpecGlossFactorsToMetallicRoughnessAsync(e, s, t);+    await this._setMetallicRoughnessPbrMaterialAsync(r, e, n, s, t), await this._finishMaterialAsync(n, e);+    const o = this._exporter._materials;+    return o.push(n), o.length - 1;+  }+  async _setMetallicRoughnessPbrMaterialAsync(e, t, s, n, i) {+    if (Ee(s, t), (!e.baseColor.equalsWithEpsilon(ce, L) || !_e.WithinEpsilon(t.alpha, 1, L)) && (n.baseColorFactor = [e.baseColor.r, e.baseColor.g, e.baseColor.b, t.alpha]), e.metallic != null && e.metallic !== 1 && (n.metallicFactor = e.metallic), e.roughness != null && e.roughness !== 1 && (n.roughnessFactor = e.roughness), t.backFaceCulling != null && !t.backFaceCulling && (t._twoSidedLighting || N.Warn(t.name + ": Back-face culling disabled and two-sided lighting disabled is not supported in glTF."), s.doubleSided = !0), i) {+      const o = [], c = t instanceof Y ? t._bumpTexture : t.geometryNormalTexture;+      c && o.push(this.exportTextureAsync(c).then((u) => {+        u && (s.normalTexture = u, c.level !== 1 && (s.normalTexture.scale = c.level));+      }));+      const h = t instanceof Y ? t._ambientTexture : t.ambientOcclusionTexture;+      h && o.push(new Promise(async (u) => {+        if (t instanceof le && n.metallicRoughnessTexture) {+          const l = this._exportTextureSampler(h), m = this._exporter._textures[n.metallicRoughnessTexture.index].source, _ = this._exportTextureInfo(m, l, h.coordinatesIndex);+          return this._textureMap.set(h.uniqueId, _), this._exporter._extensionsPostExportTextures("exporter", _, h), u(_);+        } else+          return u(await this.exportTextureAsync(h));+      }).then(async (u) => {+        if (u) {+          const l = {+            index: u.index,+            texCoord: u.texCoord,+            extensions: u.extensions+          };+          s.occlusionTexture = l, t instanceof Y ? l.strength = t._ambientTextureStrength : l.strength = t.ambientOcclusionTexture.level;+        }+      }));+      const f = t instanceof Y ? t._emissiveTexture : t.emissionColorTexture;+      f && o.push(this.exportTextureAsync(f).then((u) => {+        u && (s.emissiveTexture = u);+      })), o.length > 0 && (this._exporter._materialNeedsUVsSet.add(t), await Promise.all(o));+    }+    const r = t instanceof Y ? t._emissiveColor : t.emissionColor;+    r.equalsWithEpsilon(Te, L) || (s.emissiveFactor = r.asArray()), s.pbrMetallicRoughness = n;+  }+  async exportOpenPBRMaterialAsync(e, t) {+    const s = {}, n = {+      name: e.name+    }, i = e.baseColor, r = e.geometryOpacity;+    i && (s.baseColorFactor = [i.r, i.g, i.b, r]);+    const o = await this._convertMetalRoughFactorsToMetallicRoughnessAsync(e.baseColor, e.baseMetalness, e.specularRoughness, e.baseColorTexture, e.baseMetalnessTexture, e.specularRoughnessTexture, e, s, t);+    await this._setMetallicRoughnessPbrMaterialAsync(o, e, n, s, t), await this._finishMaterialAsync(n, e);+    const c = this._exporter._materials;+    return c.push(n), c.length - 1;+  }+  async exportTextureAsync(e, t = null) {+    let s = this._textureMap.get(t ?? e.uniqueId);+    if (s)+      return s;+    const n = this._exportTextureSampler(e), i = await this._exportTextureImageAsync(e);+    return s = this._exportTextureInfo(i, n, e.coordinatesIndex), this._textureMap.set(t ?? e.uniqueId, s), this._exporter._extensionsPostExportTextures("exporter", s, e), s;+  }+  async _exportTextureImageAsync(e) {+    const t = e.mimeType ?? "none", s = this._internalTextureToImage, n = e.getInternalTexture().uniqueId;+    s[n] = s[n] || {};+    let i = s[n][t];+    return i === void 0 && (i = (async () => {+      const r = await Je(e);+      if (r && (t === "none" || r.type === t))+        return await this._exportImageAsync(e.name, r);+      let o = "image/png";+      t !== "none" && (Oe(t) ? o = t : (o = "image/png", N.Warn(`Unsupported media type: ${t}. Exporting texture as PNG.`)));+      const c = e.getSize(), h = await Ue(e), f = await re(h, c.width, c.height, o);+      return await this._exportImageAsync(e.name, f);+    })(), s[n][t] = i), await i;+  }+  async _exportImageAsync(e, t) {+    const s = this._exporter._images;+    let n;+    if (this._exporter._shouldUseGlb) {+      n = {+        name: e,+        mimeType: t.type,+        bufferView: void 0+        // Will be updated later by BufferManager+      };+      const i = await t.arrayBuffer(), r = this._exporter._bufferManager.createBufferView(new Uint8Array(i));+      this._exporter._bufferManager.setBufferView(n, r);+    } else {+      const i = e.replace(/\.\/|\/|\.\\|\\/g, "_"), r = Ye(t.type);+      let o = i + r;+      s.some((c) => c.uri === o) && (o = `${i}_${N.RandomId()}${r}`), n = {+        name: e,+        uri: o+      }, this._exporter._imageData[o] = t;+    }+    return s.push(n), s.length - 1;+  }+  _exportTextureInfo(e, t, s) {+    const n = this._exporter._textures;+    let i = n.findIndex((o) => o.sampler == t && o.source === e);+    i === -1 && (i = n.length, n.push({+      source: e,+      sampler: t+    }));+    const r = { index: i };+    return s && (r.texCoord = s), r;+  }+  _exportTextureSampler(e) {+    const t = this._getTextureSampler(e), s = this._exporter._samplers, n = s.findIndex((i) => i.minFilter === t.minFilter && i.magFilter === t.magFilter && i.wrapS === t.wrapS && i.wrapT === t.wrapT);+    return n !== -1 ? n : (s.push(t), s.length - 1);+  }+}+class Ie {+  constructor() {+    this.files = {};+  }+  /**+   * @deprecated Use files instead+   */+  get glTFFiles() {+    return this.files;+  }+  /**+   * Downloads the glTF data as files based on their names and data+   */+  downloadFiles() {+    for (const e in this.files) {+      const t = this.files[e], s = new Blob([t], { type: ee(e) });+      N.Download(s, e);+    }+  }+}+const pe = b.Compose(new O(-1, 1, 1), W.Identity(), O.Zero());+function et(a, e) {+  if (!(a instanceof Z))+    return !1;+  if (e) {+    if (!a.getWorldMatrix().equalsWithEpsilon(b.IdentityReadOnly, K))+      return !1;+  } else if (!a.getWorldMatrix().multiplyToRef(pe, P.Matrix[0]).equalsWithEpsilon(b.IdentityReadOnly, K))+    return !1;+  return !(a instanceof ue && a.geometry);+}+const se = O.ZeroReadOnly, me = W.Identity(), ie = O.OneReadOnly, tt = new O(-1, 1, 1);+function fe(a, e) {+  const { byteOffset: t, byteStride: s, type: n, normalized: i } = a, r = a.getSize(), o = e.reduce((f, u) => u.getTotalVertices() > f ? u.getTotalVertices() : f, -Number.MAX_VALUE), c = o * r, h = a.getKind();+  return { byteOffset: t, byteStride: s, componentCount: r, type: n, count: c, normalized: i, totalVertices: o, kind: h };+}+function st(a) {+  switch (a) {+    case "MAT2":+      return 4;+    case "MAT3":+      return 9;+    case "MAT4":+      return 16;+    case "SCALAR":+      return 1;+    case "VEC2":+      return 2;+    case "VEC3":+      return 3;+    case "VEC4":+      return 4;+  }+}+function nt(a) {+  return a.some((e) => e >= 256);+}+function Se(a) {+  switch (a) {+    case A.PositionKind:+    case A.NormalKind:+    case A.TangentKind:+    case A.ColorKind:+    case A.MatricesIndicesKind:+    case A.MatricesIndicesExtraKind:+    case A.MatricesWeightsKind:+    case A.MatricesWeightsExtraKind:+    case A.UVKind:+    case A.UV2Kind:+    case A.UV3Kind:+    case A.UV4Kind:+    case A.UV5Kind:+    case A.UV6Kind:+      return !0;+  }+  return !1;+}+function it(a, e) {+  if (a == A.ColorKind)+    return e ? "VEC4" : "VEC3";+  switch (a) {+    case A.PositionKind:+    case A.NormalKind:+      return "VEC3";+    case A.TangentKind:+    case A.MatricesIndicesKind:+    case A.MatricesIndicesExtraKind:+    case A.MatricesWeightsKind:+    case A.MatricesWeightsExtraKind:+      return "VEC4";+    case A.UVKind:+    case A.UV2Kind:+    case A.UV3Kind:+    case A.UV4Kind:+    case A.UV5Kind:+    case A.UV6Kind:+      return "VEC2";+  }+  throw new Error(`Unknown kind ${a}`);+}+function rt(a) {+  switch (a) {+    case A.PositionKind:+      return "POSITION";+    case A.NormalKind:+      return "NORMAL";+    case A.TangentKind:+      return "TANGENT";+    case A.ColorKind:+      return "COLOR_0";+    case A.UVKind:+      return "TEXCOORD_0";+    case A.UV2Kind:+      return "TEXCOORD_1";+    case A.UV3Kind:+      return "TEXCOORD_2";+    case A.UV4Kind:+      return "TEXCOORD_3";+    case A.UV5Kind:+      return "TEXCOORD_4";+    case A.UV6Kind:+      return "TEXCOORD_5";+    case A.MatricesIndicesKind:+      return "JOINTS_0";+    case A.MatricesIndicesExtraKind:+      return "JOINTS_1";+    case A.MatricesWeightsKind:+      return "WEIGHTS_0";+    case A.MatricesWeightsExtraKind:+      return "WEIGHTS_1";+  }+  throw new Error(`Unknown kind: ${a}`);+}+function ot(a) {+  switch (a) {+    case k.TriangleFillMode:+      return 4;+    case k.TriangleStripDrawMode:+      return 5;+    case k.TriangleFanDrawMode:+      return 6;+    case k.PointListDrawMode:+    case k.PointFillMode:+      return 0;+    case k.LineLoopDrawMode:+      return 2;+    case k.LineListDrawMode:+      return 1;+    case k.LineStripDrawMode:+      return 3;+  }+  throw new Error(`Unknown fill mode: ${a}`);+}+function at(a) {+  switch (a) {+    case k.TriangleFillMode:+    case k.TriangleStripDrawMode:+    case k.TriangleFanDrawMode:+      return !0;+  }+  return !1;+}+function Ve(a) {+  const e = Math.sqrt(a.x * a.x + a.y * a.y + a.z * a.z);+  e > 0 && (a.x /= e, a.y /= e, a.z /= e);+}+function de(a) {+  return a.x *= -1, a;+}+function ct(a) {+  return pe.invertToRef(P.Matrix[0]).multiplyToRef(a, a).multiplyToRef(pe, a), a;+}+function ge(a) {+  if (a.x * a.x + a.y * a.y > 0.5) {+    const e = Math.abs(a.x), t = Math.abs(a.y);+    if (e > t) {+      const s = Math.sign(a.x);+      a.x = e, a.y *= -s, a.z *= -s, a.w *= s;+    } else {+      const s = Math.sign(a.y);+      a.x *= -s, a.y = t, a.z *= s, a.w *= -s;+    }+  } else {+    const e = Math.abs(a.z), t = Math.abs(a.w);+    if (e > t) {+      const s = Math.sign(a.z);+      a.x *= -s, a.y *= s, a.z = e, a.w *= -s;+    } else {+      const s = Math.sign(a.w);+      a.x *= s, a.y *= -s, a.z *= -s, a.w = t;+    }+  }+  return a;+}+function Fe(a) {+  a.copyFromFloats(-a.z, a.w, a.x, -a.y);+}+function ft(a, e) {+  const t = O.FromArrayToRef(e.translation || [0, 0, 0], 0, P.Vector3[0]), s = W.FromArrayToRef(e.rotation || [0, 0, 0, 1], 0, P.Quaternion[0]), n = b.ComposeToRef(ie, s, t, P.Matrix[0]), i = O.FromArrayToRef(a.translation || [0, 0, 0], 0, P.Vector3[2]), r = W.FromArrayToRef(a.rotation || [0, 0, 0, 1], 0, P.Quaternion[1]), o = b.ComposeToRef(ie, r, i, P.Matrix[1]);+  n.multiplyToRef(o, o), o.decompose(void 0, s, t), t.equalsWithEpsilon(se, K) ? delete e.translation : e.translation = t.asArray(), s.equalsWithEpsilon(me, K) ? delete e.rotation : e.rotation = s.asArray(), e.scale && delete e.scale;+}+function ht(a, e) {+  if (!(e instanceof Z) || !(e.getChildren().length === 1 && a.getChildren().length === 0 && a.parent === e))+    return !1;+  const s = a.getScene(), n = a instanceof Ne && !s.useRightHandedSystem ? tt : ie;+  return e.scaling.equalsWithEpsilon(n, K) ? !0 : (J.Warn(`Cannot collapse node ${a.name} into parent node ${e.name} with modified scaling.`), !1);+}+function lt(a, e, t, s) {+  let n = a;+  return (e !== 0 || t !== a.length) && (n = Array.isArray(a) ? a.slice(e, e + t) : a.subarray(e, e + t)), n instanceof Int32Array ? new Uint32Array(n.buffer, n.byteOffset, n.length) : Array.isArray(n) ? s ? new Uint32Array(n) : new Uint16Array(n) : n;+}+function ut(a) {+  if (a instanceof Array) {+    const e = new Float32Array(a);+    return new Uint8Array(e.buffer, e.byteOffset, e.byteLength);+  }+  return ArrayBuffer.isView(a) ? new Uint8Array(a.buffer, a.byteOffset, a.byteLength) : new Uint8Array(a);+}+function pt(a, e, t, s) {+  const { byteOffset: n, byteStride: i, type: r, normalized: o } = e, c = e.getSize(), h = new Array(c).fill(1 / 0), f = new Array(c).fill(-1 / 0);+  return te(a, n + t * i, i, c, r, s * c, o, (u) => {+    for (let l = 0; l < c; l++)+      h[l] = Math.min(h[l], u[l]), f[l] = Math.max(f[l], u[l]);+  }), { min: h, max: f };+}+const mt = /* @__PURE__ */ new Map([+  [Int8Array, (a, e, t) => a.setInt8(e, t)],+  [Uint8Array, (a, e, t) => a.setUint8(e, t)],+  [Uint8ClampedArray, (a, e, t) => a.setUint8(e, t)],+  [Int16Array, (a, e, t) => a.setInt16(e, t, !0)],+  [Uint16Array, (a, e, t) => a.setUint16(e, t, !0)],+  [Int32Array, (a, e, t) => a.setInt32(e, t, !0)],+  [Uint32Array, (a, e, t) => a.setUint32(e, t, !0)],+  [Float32Array, (a, e, t) => a.setFloat32(e, t, !0)],+  [Float64Array, (a, e, t) => a.setFloat64(e, t, !0)]+]);+class ve {+  writeTypedArray(e) {+    this._checkGrowBuffer(e.byteLength);+    const t = mt.get(e.constructor);+    for (let s = 0; s < e.length; s++)+      t(this._dataView, this._byteOffset, e[s]), this._byteOffset += e.BYTES_PER_ELEMENT;+  }+  constructor(e) {+    this._data = new Uint8Array(e), this._dataView = new DataView(this._data.buffer), this._byteOffset = 0;+  }+  get byteOffset() {+    return this._byteOffset;+  }+  getOutputData() {+    return new Uint8Array(this._data.buffer, 0, this._byteOffset);+  }+  writeUInt8(e) {+    this._checkGrowBuffer(1), this._dataView.setUint8(this._byteOffset, e), this._byteOffset++;+  }+  writeInt8(e) {+    this._checkGrowBuffer(1), this._dataView.setInt8(this._byteOffset, e), this._byteOffset++;+  }+  writeInt16(e) {+    this._checkGrowBuffer(2), this._dataView.setInt16(this._byteOffset, e, !0), this._byteOffset += 2;+  }+  writeUInt16(e) {+    this._checkGrowBuffer(2), this._dataView.setUint16(this._byteOffset, e, !0), this._byteOffset += 2;+  }+  writeInt32(e) {+    this._checkGrowBuffer(4), this._dataView.setInt32(this._byteOffset, e, !0), this._byteOffset += 4;+  }+  writeUInt32(e) {+    this._checkGrowBuffer(4), this._dataView.setUint32(this._byteOffset, e, !0), this._byteOffset += 4;+  }+  writeFloat32(e) {+    this._checkGrowBuffer(4), this._dataView.setFloat32(this._byteOffset, e, !0), this._byteOffset += 4;+  }+  writeFloat64(e) {+    this._checkGrowBuffer(8), this._dataView.setFloat64(this._byteOffset, e, !0), this._byteOffset += 8;+  }+  _checkGrowBuffer(e) {+    const t = this.byteOffset + e;+    if (t > this._data.byteLength) {+      const s = new Uint8Array(t * 2);+      s.set(this._data), this._data = s, this._dataView = new DataView(this._data.buffer);+    }+  }+}+function Re(a) {+  return a % 4 === 0 ? 4 : a % 2 === 0 ? 2 : 1;+}+class dt {+  constructor() {+    this._bufferViewToData = /* @__PURE__ */ new Map(), this._bufferViewToProperties = /* @__PURE__ */ new Map(), this._accessorToBufferView = /* @__PURE__ */ new Map();+  }+  /**+   * Generates a binary buffer from the stored bufferViews. Also populates the bufferViews list.+   * @param bufferViews The list of bufferViews to be populated while writing the binary+   * @returns The binary buffer+   */+  generateBinary(e) {+    let t = 0;+    this._bufferViewToData.forEach((i) => {+      t += i.byteLength;+    });+    const s = new ve(t), n = Array.from(this._bufferViewToData.keys()).sort((i, r) => Re(r.byteLength) - Re(i.byteLength));+    for (const i of n) {+      i.byteOffset = s.byteOffset, e.push(i);+      const r = e.length - 1, o = this.getPropertiesWithBufferView(i);+      for (const c of o)+        c.bufferView = r;+      s.writeTypedArray(this._bufferViewToData.get(i)), this._bufferViewToData.delete(i);+    }+    return s.getOutputData();+  }+  /**+   * Creates a buffer view based on the supplied arguments+   * @param data a TypedArray to create the bufferView for+   * @param byteStride byte distance between consecutive elements+   * @returns bufferView for glTF+   */+  createBufferView(e, t) {+    const s = {+      buffer: 0,+      byteOffset: void 0,+      // byteOffset will be set later, when we write the binary and decide bufferView ordering+      byteLength: e.byteLength,+      byteStride: t+    };+    return this._bufferViewToData.set(s, e), s;+  }+  /**+   * Creates an accessor based on the supplied arguments and assigns it to the bufferView+   * @param bufferView The glTF bufferView referenced by this accessor+   * @param type The type of the accessor+   * @param componentType The datatype of components in the attribute+   * @param count The number of attributes referenced by this accessor+   * @param byteOffset The offset relative to the start of the bufferView in bytes+   * @param minMax Minimum and maximum value of each component in this attribute+   * @param normalized Specifies whether integer data values are normalized before usage+   * @returns accessor for glTF+   */+  createAccessor(e, t, s, n, i, r, o) {+    this._verifyBufferView(e);+    const c = {+      bufferView: void 0,+      // bufferView will be set to a real index later, once we write the binary and decide bufferView ordering+      componentType: s,+      count: n,+      type: t,+      min: r?.min,+      max: r?.max,+      normalized: o,+      byteOffset: i+    };+    return this.setBufferView(c, e), this._accessorToBufferView.set(c, e), c;+  }+  /**+   * Assigns a bufferView to a glTF object that references it+   * @param object The glTF object+   * @param bufferView The bufferView to assign+   */+  setBufferView(e, t) {+    this._verifyBufferView(t), this.getPropertiesWithBufferView(t).push(e);+  }+  /**+   * Removes buffer view from the binary data, as well as from all its known references+   * @param bufferView the bufferView to remove+   */+  removeBufferView(e) {+    const t = this.getPropertiesWithBufferView(e);+    for (const s of t)+      s.bufferView !== void 0 && delete s.bufferView;+    this._bufferViewToData.delete(e), this._bufferViewToProperties.delete(e), this._accessorToBufferView.forEach((s, n) => {+      s === e && (n.byteOffset !== void 0 && delete n.byteOffset, this._accessorToBufferView.delete(n));+    });+  }+  getBufferView(e) {+    const t = this._accessorToBufferView.get(e);+    return this._verifyBufferView(t), t;+  }+  getPropertiesWithBufferView(e) {+    return this._verifyBufferView(e), this._bufferViewToProperties.set(e, this._bufferViewToProperties.get(e) ?? []), this._bufferViewToProperties.get(e);+  }+  getData(e) {+    return this._verifyBufferView(e), this._bufferViewToData.get(e);+  }+  _verifyBufferView(e) {+    if (e === void 0 || !this._bufferViewToData.has(e))+      throw new Error(`BufferView ${e} not found in BufferManager.`);+  }+}+var X;+(function(a) {+  a[a.INTANGENT = 0] = "INTANGENT", a[a.OUTTANGENT = 1] = "OUTTANGENT";+})(X || (X = {}));+class V {+  /**+   * Determine if a node is transformable - ie has properties it should be part of animation of transformation.+   * @param babylonNode the node to test+   * @returns true if can be animated, false otherwise. False if the parameter is null or undefined.+   */+  static _IsTransformable(e) {+    return e && (e instanceof Z || e instanceof ne || e instanceof We);+  }+  /**+   * @ignore+   *+   * Creates glTF channel animation from BabylonJS animation.+   * @param babylonTransformNode - BabylonJS mesh.+   * @param animation - animation.+   * @param animationChannelTargetPath - The target animation channel.+   * @param useQuaternion - Specifies if quaternions are used.+   * @returns nullable IAnimationData+   */+  static _CreateNodeAnimation(e, t, s, n, i) {+    if (this._IsTransformable(e)) {+      const r = [], o = [], c = t.getKeys(), h = V._CalculateMinMaxKeyFrames(c), f = V._DeduceInterpolation(c, s, n), u = f.interpolationType, l = f.shouldBakeAnimation;+      if (l ? V._CreateBakedAnimation(e, t, s, h.min, h.max, t.framePerSecond, i, r, o, h, n) : u === "LINEAR" || u === "STEP" ? V._CreateLinearOrStepAnimation(e, t, s, r, o, n) : u === "CUBICSPLINE" ? V._CreateCubicSplineAnimation(e, t, s, r, o, n) : V._CreateBakedAnimation(e, t, s, h.min, h.max, t.framePerSecond, i, r, o, h, n), r.length && o.length)+        return {+          inputs: r,+          outputs: o,+          samplerInterpolation: u,+          inputsMin: l ? h.min : N.FloatRound(h.min / t.framePerSecond),+          inputsMax: l ? h.max : N.FloatRound(h.max / t.framePerSecond)+        };+    }+    return null;+  }+  static _DeduceAnimationInfo(e) {+    let t = null, s = "VEC3", n = !1;+    const i = e.targetProperty.split(".");+    switch (i[0]) {+      case "scaling": {+        t = "scale";+        break;+      }+      case "position": {+        t = "translation";+        break;+      }+      case "rotation": {+        s = "VEC4", t = "rotation";+        break;+      }+      case "rotationQuaternion": {+        s = "VEC4", n = !0, t = "rotation";+        break;+      }+      case "influence": {+        s = "SCALAR", t = "weights";+        break;+      }+      default:+        N.Error(`Unsupported animatable property ${i[0]}`);+    }+    return t ? { animationChannelTargetPath: t, dataAccessorType: s, useQuaternion: n } : (N.Error("animation channel target path and data accessor type could be deduced"), null);+  }+  /**+   * @ignore+   * Create node animations from the transform node animations+   * @param babylonNode+   * @param runtimeGLTFAnimation+   * @param idleGLTFAnimations+   * @param nodeMap+   * @param nodes+   * @param bufferManager+   * @param bufferViews+   * @param accessors+   * @param animationSampleRate+   */+  static _CreateNodeAnimationFromNodeAnimations(e, t, s, n, i, r, o, c, h, f, u) {+    let l;+    if (V._IsTransformable(e) && e.animations)+      for (const m of e.animations) {+        if (u && !u(m))+          continue;+        const _ = V._DeduceAnimationInfo(m);+        _ && (l = {+          name: m.name,+          samplers: [],+          channels: []+        }, V._AddAnimation(`${m.name}`, m.hasRunningRuntimeAnimations ? t : l, e, m, _.dataAccessorType, _.animationChannelTargetPath, n, r, o, c, _.useQuaternion, h, f), l.samplers.length && l.channels.length && s.push(l));+      }+  }+  /**+   * @ignore+   * Create individual morph animations from the mesh's morph target animation tracks+   * @param babylonNode+   * @param runtimeGLTFAnimation+   * @param idleGLTFAnimations+   * @param nodeMap+   * @param nodes+   * @param bufferManager+   * @param bufferViews+   * @param accessors+   * @param animationSampleRate+   */+  static _CreateMorphTargetAnimationFromMorphTargetAnimations(e, t, s, n, i, r, o, c, h, f, u) {+    let l;+    if (e instanceof Le) {+      const m = e.morphTargetManager;+      if (m)+        for (let _ = 0; _ < m.numTargets; ++_) {+          const g = m.getTarget(_);+          for (const p of g.animations) {+            if (u && !u(p))+              continue;+            const d = new H(`${p.name}`, "influence", p.framePerSecond, p.dataType, p.loopMode, p.enableBlending), w = [], y = p.getKeys();+            for (let E = 0; E < y.length; ++E) {+              const C = y[E];+              for (let S = 0; S < m.numTargets; ++S)+                S == _ ? w.push(C) : w.push({ frame: C.frame, value: 0 });+            }+            d.setKeys(w, !0);+            const x = V._DeduceAnimationInfo(d);+            x && (l = {+              name: d.name,+              samplers: [],+              channels: []+            }, V._AddAnimation(p.name, p.hasRunningRuntimeAnimations ? t : l, e, d, x.dataAccessorType, x.animationChannelTargetPath, n, r, o, c, x.useQuaternion, h, f, m.numTargets), l.samplers.length && l.channels.length && s.push(l));+          }+        }+    }+  }+  /**+   * @internal+   * Create node and morph animations from the animation groups+   * @param babylonScene+   * @param glTFAnimations+   * @param nodeMap+   * @param nodes+   * @param bufferManager+   * @param bufferViews+   * @param accessors+   * @param animationSampleRate+   */+  static _CreateNodeAndMorphAnimationFromAnimationGroups(e, t, s, n, i, r, o, c, h) {+    let f;+    if (e.animationGroups) {+      const u = e.animationGroups;+      for (const l of u) {+        const m = /* @__PURE__ */ new Map(), _ = /* @__PURE__ */ new Map(), g = /* @__PURE__ */ new Set(), p = l.to - l.from;+        f = {+          name: l.name,+          channels: [],+          samplers: []+        };+        for (let d = 0; d < l.targetedAnimations.length; ++d) {+          const w = l.targetedAnimations[d], y = w.target, x = w.animation;+          if (h && !h(x))+            continue;+          const E = c.has(y);+          if (this._IsTransformable(y) || y.length === 1 && this._IsTransformable(y[0])) {+            const C = V._DeduceAnimationInfo(w.animation);+            if (C) {+              const S = this._IsTransformable(y) ? y : this._IsTransformable(y[0]) ? y[0] : null;+              S && V._AddAnimation(`${x.name}`, f, S, x, C.dataAccessorType, C.animationChannelTargetPath, s, n, i, r, C.useQuaternion, o, E);+            }+          } else if ((y instanceof oe || y.length === 1 && y[0] instanceof oe) && V._DeduceAnimationInfo(w.animation)) {+            const S = y instanceof oe ? y : y[0];+            if (S) {+              const I = e.morphTargetManagers.find((M) => {+                for (let T = 0; T < M.numTargets; ++T)+                  if (M.getTarget(T) === S)+                    return !0;+                return !1;+              });+              if (I) {+                const M = e.meshes.find((T) => T.morphTargetManager === I);+                M && (m.has(M) || m.set(M, /* @__PURE__ */ new Map()), m.get(M)?.set(S, x), g.add(M), _.set(M, x));+              }+            }+          }+        }+        g.forEach((d) => {+          const w = d.morphTargetManager;+          let y = null;+          const x = [], C = _.get(d).getKeys(), S = C.length;+          for (let M = 0; M < S; ++M)+            for (let T = 0; T < w.numTargets; ++T) {+              const U = w.getTarget(T), B = m.get(d);+              if (B) {+                const F = B.get(U);+                F ? (y || (y = new H(`${l.name}_${d.name}_MorphWeightAnimation`, "influence", F.framePerSecond, H.ANIMATIONTYPE_FLOAT, F.loopMode, F.enableBlending)), x.push(F.getKeys()[M])) : x.push({+                  frame: l.from + p / S * M,+                  value: U.influence,+                  inTangent: C[0].inTangent ? 0 : void 0,+                  outTangent: C[0].outTangent ? 0 : void 0+                });+              }+            }+          y.setKeys(x, !0);+          const I = V._DeduceAnimationInfo(y);+          I && V._AddAnimation(`${l.name}_${d.name}_MorphWeightAnimation`, f, d, y, I.dataAccessorType, I.animationChannelTargetPath, s, n, i, r, I.useQuaternion, o, !1, w?.numTargets);+        }), f.channels.length && f.samplers.length && t.push(f);+      }+    }+  }+  static _AddAnimation(e, t, s, n, i, r, o, c, h, f, u, l, m, _) {+    const g = V._CreateNodeAnimation(s, n, r, u, l);+    let p, d, w, y, x, E;+    if (g) {+      if (_) {+        let q = 0, D;+        const G = [];+        for (; g.inputs.length > 0; )+          D = g.inputs.shift(), q % _ == 0 && G.push(D), q++;+        g.inputs = G;+      }+      const C = o.get(s), S = new Float32Array(g.inputs);+      p = c.createBufferView(S), d = c.createAccessor(p, "SCALAR", 5126, g.inputs.length, void 0, {+        min: [g.inputsMin],+        max: [g.inputsMax]+      }), f.push(d), w = f.length - 1;+      const I = new W(), M = new O(), T = new O(), U = s instanceof ne, B = st(i), F = new Float32Array(g.outputs.length * B);+      g.outputs.forEach(function(q, D) {+        let G = q;+        switch (r) {+          case "translation":+            m && (O.FromArrayToRef(q, 0, T), de(T), T.toArray(G));+            break;+          case "rotation":+            q.length === 4 ? W.FromArrayToRef(q, 0, I) : (G = new Array(4), O.FromArrayToRef(q, 0, M), W.FromEulerVectorToRef(M, I)), m && (ge(I), U && Fe(I)), I.toArray(G);+            break;+        }+        F.set(G, D * B);+      }), p = c.createBufferView(F), d = c.createAccessor(p, i, 5126, g.outputs.length), f.push(d), y = f.length - 1, x = {+        interpolation: g.samplerInterpolation,+        input: w,+        output: y+      }, t.samplers.push(x), E = {+        sampler: t.samplers.length - 1,+        target: {+          node: C,+          path: r+        }+      }, t.channels.push(E);+    }+  }+  /**+   * Create a baked animation+   * @param babylonTransformNode BabylonJS mesh+   * @param animation BabylonJS animation corresponding to the BabylonJS mesh+   * @param animationChannelTargetPath animation target channel+   * @param minFrame minimum animation frame+   * @param maxFrame maximum animation frame+   * @param fps frames per second of the animation+   * @param sampleRate+   * @param inputs input key frames of the animation+   * @param outputs output key frame data of the animation+   * @param minMaxFrames+   * @param minMaxFrames.min+   * @param minMaxFrames.max+   * @param useQuaternion specifies if quaternions should be used+   */+  static _CreateBakedAnimation(e, t, s, n, i, r, o, c, h, f, u) {+    let l;+    const m = W.Identity();+    let _ = null, g, p = null, d, w, y, x;+    f.min = N.FloatRound(n / r);+    const E = t.getKeys();+    for (let C = 0, S = E.length; C < S; ++C) {+      if (d = E[C], C + 1 < S)+        if (w = E[C + 1], d.value.equals && d.value.equals(w.value) || d.value === w.value)+          if (C === 0)+            x = d.frame;+          else+            continue;+        else+          x = w.frame;+      else {+        if (y = E[C - 1], d.value.equals && d.value.equals(y.value) || d.value === y.value)+          continue;+        x = i;+      }+      if (x)+        for (let I = d.frame; I <= x; I += o) {+          if (g = N.FloatRound(I / r), g === _)+            continue;+          _ = g, p = g;+          const M = {+            key: 0,+            repeatCount: 0,+            loopMode: t.loopMode+          };+          l = t._interpolate(I, M), V._SetInterpolatedValue(e, l, g, t, s, m, c, h, u);+        }+    }+    p && (f.max = p);+  }+  static _ConvertFactorToVector3OrQuaternion(e, t, s, n, i) {+    const r = V._GetBasePositionRotationOrScale(t, n, i), o = s.targetProperty.split("."), c = o ? o[1] : "", h = i ? W.FromArray(r).normalize() : O.FromArray(r);+    switch (c) {+      case "x":+      case "y":+      case "z": {+        h[c] = e;+        break;+      }+      case "w": {+        h.w = e;+        break;+      }+      default:+        N.Error(`glTFAnimation: Unsupported component name "${c}"!`);+    }+    return h;+  }+  static _SetInterpolatedValue(e, t, s, n, i, r, o, c, h) {+    let f;+    if (o.push(s), i === "weights") {+      c.push([t]);+      return;+    }+    n.dataType === H.ANIMATIONTYPE_FLOAT && (t = this._ConvertFactorToVector3OrQuaternion(t, e, n, i, h)), i === "rotation" ? (h ? r = t : (f = t, W.RotationYawPitchRollToRef(f.y, f.x, f.z, r)), c.push(r.asArray())) : (f = t, c.push(f.asArray()));+  }+  /**+   * Creates linear animation from the animation key frames+   * @param babylonTransformNode BabylonJS mesh+   * @param animation BabylonJS animation+   * @param animationChannelTargetPath The target animation channel+   * @param inputs Array to store the key frame times+   * @param outputs Array to store the key frame data+   * @param useQuaternion Specifies if quaternions are used in the animation+   */+  static _CreateLinearOrStepAnimation(e, t, s, n, i, r) {+    for (const o of t.getKeys())+      n.push(o.frame / t.framePerSecond), V._AddKeyframeValue(o, t, i, s, e, r);+  }+  /**+   * Creates cubic spline animation from the animation key frames+   * @param babylonTransformNode BabylonJS mesh+   * @param animation BabylonJS animation+   * @param animationChannelTargetPath The target animation channel+   * @param inputs Array to store the key frame times+   * @param outputs Array to store the key frame data+   * @param useQuaternion Specifies if quaternions are used in the animation+   */+  static _CreateCubicSplineAnimation(e, t, s, n, i, r) {+    t.getKeys().forEach(function(o) {+      n.push(o.frame / t.framePerSecond), V._AddSplineTangent(X.INTANGENT, i, s, "CUBICSPLINE", o, r), V._AddKeyframeValue(o, t, i, s, e, r), V._AddSplineTangent(X.OUTTANGENT, i, s, "CUBICSPLINE", o, r);+    });+  }+  static _GetBasePositionRotationOrScale(e, t, s) {+    let n;+    return t === "rotation" ? s ? n = (e.rotationQuaternion ?? W.Identity()).asArray() : n = (e.rotation ?? O.Zero()).asArray() : t === "translation" ? n = (e.position ?? O.Zero()).asArray() : n = (e.scaling ?? O.One()).asArray(), n;+  }+  /**+   * Adds a key frame value+   * @param keyFrame+   * @param animation+   * @param outputs+   * @param animationChannelTargetPath+   * @param babylonTransformNode+   * @param useQuaternion+   */+  static _AddKeyframeValue(e, t, s, n, i, r) {+    let o;+    const c = t.dataType;+    if (c === H.ANIMATIONTYPE_VECTOR3) {+      let h = e.value.asArray();+      if (n === "rotation") {+        const f = O.FromArray(h);+        h = W.RotationYawPitchRoll(f.y, f.x, f.z).asArray();+      }+      s.push(h);+    } else if (c === H.ANIMATIONTYPE_FLOAT) {+      if (n === "weights")+        s.push([e.value]);+      else if (o = this._ConvertFactorToVector3OrQuaternion(e.value, i, t, n, r), o) {+        if (n === "rotation") {+          const h = r ? o : W.RotationYawPitchRoll(o.y, o.x, o.z).normalize();+          s.push(h.asArray());+        }+        s.push(o.asArray());+      }+    } else c === H.ANIMATIONTYPE_QUATERNION ? s.push(e.value.normalize().asArray()) : N.Error("glTFAnimation: Unsupported key frame values for animation!");+  }+  /**+   * @internal+   * Determine the interpolation based on the key frames+   * @param keyFrames+   * @param animationChannelTargetPath+   * @param useQuaternion+   */+  static _DeduceInterpolation(e, t, s) {+    let n, i = !1, r;+    if (t === "rotation" && !s)+      return { interpolationType: "LINEAR", shouldBakeAnimation: !0 };+    for (let o = 0, c = e.length; o < c; ++o)+      if (r = e[o], r.inTangent || r.outTangent)+        if (n) {+          if (n !== "CUBICSPLINE") {+            n = "LINEAR", i = !0;+            break;+          }+        } else+          n = "CUBICSPLINE";+      else if (n) {+        if (n === "CUBICSPLINE" || r.interpolation && r.interpolation === 1 && n !== "STEP") {+          n = "LINEAR", i = !0;+          break;+        }+      } else+        r.interpolation && r.interpolation === 1 ? n = "STEP" : n = "LINEAR";+    return n || (n = "LINEAR"), { interpolationType: n, shouldBakeAnimation: i };+  }+  /**+   * Adds an input tangent or output tangent to the output data+   * If an input tangent or output tangent is missing, it uses the zero vector or zero quaternion+   * @param tangentType Specifies which type of tangent to handle (inTangent or outTangent)+   * @param outputs The animation data by keyframe+   * @param animationChannelTargetPath The target animation channel+   * @param interpolation The interpolation type+   * @param keyFrame The key frame with the animation data+   * @param useQuaternion Specifies if quaternions are used+   */+  static _AddSplineTangent(e, t, s, n, i, r) {+    let o;+    const c = e === X.INTANGENT ? i.inTangent : i.outTangent;+    if (n === "CUBICSPLINE") {+      if (s === "rotation")+        if (c)+          if (r)+            o = c.asArray();+          else {+            const h = c;+            o = W.RotationYawPitchRoll(h.y, h.x, h.z).asArray();+          }+        else+          o = [0, 0, 0, 0];+      else s === "weights" ? c ? o = [c] : o = [0] : c ? o = c.asArray() : o = [0, 0, 0];+      t.push(o);+    }+  }+  /**+   * Get the minimum and maximum key frames' frame values+   * @param keyFrames animation key frames+   * @returns the minimum and maximum key frame value+   */+  static _CalculateMinMaxKeyFrames(e) {+    let t = 1 / 0, s = -1 / 0;+    return e.forEach(function(n) {+      t = Math.min(t, n.frame), s = Math.max(s, n.frame);+    }), { min: t, max: s };+  }+}+function gt(a, e, t, s, n, i) {+  const r = {+    attributes: {},+    influence: a.influence,+    name: a.name+  }, o = e.geometry;+  if (!o)+    return N.Warn("Attempted to export morph target data from a mesh without geometry. This should not happen."), r;+  const c = i ? -1 : 1, h = 4, f = O.Zero();+  let u, l;+  if (a.hasPositions) {+    const m = a.getPositions(), _ = o.getVerticesData(A.PositionKind);+    if (_) {+      const g = new Float32Array(_.length), p = [1 / 0, 1 / 0, 1 / 0], d = [-1 / 0, -1 / 0, -1 / 0];+      l = _.length / 3, u = 0;+      for (let x = u; x < l; ++x) {+        const E = O.FromArray(_, x * 3);+        O.FromArray(m, x * 3).subtractToRef(E, f), f.x *= c, p[0] = Math.min(p[0], f.x), d[0] = Math.max(d[0], f.x), p[1] = Math.min(p[1], f.y), d[1] = Math.max(d[1], f.y), p[2] = Math.min(p[2], f.z), d[2] = Math.max(d[2], f.z), g[x * 3] = f.x, g[x * 3 + 1] = f.y, g[x * 3 + 2] = f.z;+      }+      const w = t.createBufferView(g, h * 3), y = t.createAccessor(w, "VEC3", 5126, m.length / 3, 0, { min: p, max: d });+      n.push(y), r.attributes.POSITION = n.length - 1;+    } else+      N.Warn(`Morph target positions for mesh ${e.name} were not exported. Mesh does not have position vertex data`);+  }+  if (a.hasNormals) {+    const m = a.getNormals(), _ = o.getVerticesData(A.NormalKind);+    if (_) {+      const g = new Float32Array(_.length);+      l = _.length / 3, u = 0;+      for (let w = u; w < l; ++w) {+        const y = O.FromArray(_, w * 3).normalize();+        O.FromArray(m, w * 3).normalize().subtractToRef(y, f), g[w * 3] = f.x * c, g[w * 3 + 1] = f.y, g[w * 3 + 2] = f.z;+      }+      const p = t.createBufferView(g, h * 3), d = t.createAccessor(p, "VEC3", 5126, m.length / 3, 0);+      n.push(d), r.attributes.NORMAL = n.length - 1;+    } else+      N.Warn(`Morph target normals for mesh ${e.name} were not exported. Mesh does not have normals vertex data`);+  }+  if (a.hasTangents) {+    const m = a.getTangents(), _ = o.getVerticesData(A.TangentKind);+    if (_) {+      l = _.length / 4;+      const g = new Float32Array(l * 3);+      u = 0;+      for (let w = u; w < l; ++w) {+        const y = O.FromArray(_, w * 4);+        Ve(y);+        const x = O.FromArray(m, w * 3);+        Ve(x), x.subtractToRef(y, f), g[w * 3] = f.x * c, g[w * 3 + 1] = f.y, g[w * 3 + 2] = f.z;+      }+      const p = t.createBufferView(g, h * 3), d = t.createAccessor(p, "VEC3", 5126, l, 0);+      n.push(d), r.attributes.TANGENT = n.length - 1;+    } else+      N.Warn(`Morph target tangents for mesh ${e.name} were not exported. Mesh does not have tangents vertex data`);+  }+  if (a.hasColors) {+    const m = a.getColors(), _ = o.getVerticesData(A.ColorKind), g = o.getVertexBuffer(A.ColorKind);+    if (_ && g) {+      const p = g.getSize();+      l = _.length / p;+      const d = new Float32Array(l * p);+      u = 0;+      for (let x = u; x < l; ++x)+        if (p === 3) {+          const E = O.FromArray(_, x * p);+          O.FromArray(m, x * p).subtractToRef(E, f), d[x * 3] = f.x, d[x * 3 + 1] = f.y, d[x * 3 + 2] = f.z;+        } else if (p === 4) {+          const E = new ae(), C = ae.FromArray(_, x * p);+          ae.FromArray(m, x * p).subtractToRef(C, E), d[x * 4] = E.x, d[x * 4 + 1] = E.y, d[x * 4 + 2] = E.z, d[x * 4 + 3] = E.w;+        } else+          N.Warn(`Unsupported number of components for color attribute: ${p}`);+      const w = t.createBufferView(d, h * p), y = t.createAccessor(w, p === 3 ? "VEC3" : "VEC4", 5126, l, 0);+      n.push(y), r.attributes.COLOR_0 = n.length - 1;+    } else+      N.Warn(`Morph target colors for mesh ${e.name} were not exported. Mesh does not have colors vertex data`);+  }+  return r;+}+class he {+  constructor(e, t) {+    this._indicesAccessorMap = /* @__PURE__ */ new Map(), this._vertexBufferViewMap = /* @__PURE__ */ new Map(), this._vertexAccessorMap = /* @__PURE__ */ new Map(), this._remappedBufferView = /* @__PURE__ */ new Map(), this._meshMorphTargetMap = /* @__PURE__ */ new Map(), this._vertexMapColorAlpha = /* @__PURE__ */ new Map(), this._exportedNodes = /* @__PURE__ */ new Set(), this._meshMap = /* @__PURE__ */ new Map(), this.convertedToRightHandedBuffers = /* @__PURE__ */ new Map(), this.convertToRightHanded = e, this.wasAddedByNoopNode = t;+  }+  getIndicesAccessor(e, t, s, n, i) {+    return this._indicesAccessorMap.get(e)?.get(t)?.get(s)?.get(n)?.get(i);+  }+  setIndicesAccessor(e, t, s, n, i, r) {+    let o = this._indicesAccessorMap.get(e);+    o || (o = /* @__PURE__ */ new Map(), this._indicesAccessorMap.set(e, o));+    let c = o.get(t);+    c || (c = /* @__PURE__ */ new Map(), o.set(t, c));+    let h = c.get(s);+    h || (h = /* @__PURE__ */ new Map(), c.set(s, h));+    let f = h.get(n);+    f || (f = /* @__PURE__ */ new Map(), h.set(n, f)), f.set(i, r);+  }+  pushExportedNode(e) {+    this._exportedNodes.has(e) || this._exportedNodes.add(e);+  }+  getNodesSet() {+    return this._exportedNodes;+  }+  getVertexBufferView(e) {+    return this._vertexBufferViewMap.get(e);+  }+  setVertexBufferView(e, t) {+    this._vertexBufferViewMap.set(e, t);+  }+  setRemappedBufferView(e, t, s) {+    this._remappedBufferView.set(e, /* @__PURE__ */ new Map()), this._remappedBufferView.get(e).set(t, s);+  }+  getRemappedBufferView(e, t) {+    return this._remappedBufferView.get(e)?.get(t);+  }+  getVertexAccessor(e, t, s) {+    return this._vertexAccessorMap.get(e)?.get(t)?.get(s);+  }+  setVertexAccessor(e, t, s, n) {+    let i = this._vertexAccessorMap.get(e);+    i || (i = /* @__PURE__ */ new Map(), this._vertexAccessorMap.set(e, i));+    let r = i.get(t);+    r || (r = /* @__PURE__ */ new Map(), i.set(t, r)), r.set(s, n);+  }+  hasVertexColorAlpha(e) {+    return this._vertexMapColorAlpha.get(e) || !1;+  }+  setHasVertexColorAlpha(e, t) {+    return this._vertexMapColorAlpha.set(e, t);+  }+  getMesh(e) {+    return this._meshMap.get(e);+  }+  setMesh(e, t) {+    this._meshMap.set(e, t);+  }+  bindMorphDataToMesh(e, t) {+    const s = this._meshMorphTargetMap.get(e) || [];+    this._meshMorphTargetMap.set(e, s), s.indexOf(t) === -1 && s.push(t);+  }+  getMorphTargetsFromMesh(e) {+    return this._meshMorphTargetMap.get(e);+  }+}+class R {+  // eslint-disable-next-line @typescript-eslint/naming-convention, @typescript-eslint/promise-function-async+  _ApplyExtension(e, t, s, n) {+    if (s >= t.length)+      return Promise.resolve(e);+    const i = n(t[s], e);+    return i ? i.then(async (r) => r ? await this._ApplyExtension(r, t, s + 1, n) : null) : this._ApplyExtension(e, t, s + 1, n);+  }+  // eslint-disable-next-line @typescript-eslint/naming-convention, @typescript-eslint/promise-function-async+  _ApplyExtensions(e, t) {+    const s = [];+    for (const n of R._ExtensionNames)+      s.push(this._extensions[n]);+    return this._ApplyExtension(e, s, 0, t);+  }+  // eslint-disable-next-line no-restricted-syntax, @typescript-eslint/promise-function-async+  _extensionsPostExportNodeAsync(e, t, s, n, i) {+    return this._ApplyExtensions(+      t,+      // eslint-disable-next-line @typescript-eslint/promise-function-async+      (r, o) => r.postExportNodeAsync && r.postExportNodeAsync(e, o, s, n, i, this._bufferManager)+    );+  }+  // eslint-disable-next-line no-restricted-syntax, @typescript-eslint/promise-function-async+  _extensionsPostExportMaterialAsync(e, t, s) {+    return this._ApplyExtensions(t, (n, i) => n.postExportMaterialAsync && n.postExportMaterialAsync(e, i, s));+  }+  /**+   * Get additional textures for a material+   * @param context The context when loading the asset+   * @param material The glTF material+   * @param babylonMaterial The Babylon.js material+   * @returns List of additional textures+   */+  async _extensionsPostExportMaterialAdditionalTexturesAsync(e, t, s) {+    const n = [];+    return await Promise.all(R._ExtensionNames.map(async (i) => {+      const r = this._extensions[i];+      if (r.postExportMaterialAdditionalTexturesAsync) {+        const o = await r.postExportMaterialAdditionalTexturesAsync(e, t, s);+        n.push(...o);+      }+    })), n;+  }+  _extensionsPostExportTextures(e, t, s) {+    for (const n of R._ExtensionNames) {+      const i = this._extensions[n];+      i.postExportTexture && i.postExportTexture(e, t, s);+    }+  }+  _extensionsPostExportMeshPrimitive(e) {+    for (const t of R._ExtensionNames) {+      const s = this._extensions[t];+      s.postExportMeshPrimitive && s.postExportMeshPrimitive(e, this._bufferManager, this._accessors);+    }+  }+  async _extensionsPreGenerateBinaryAsync() {+    for (const e of R._ExtensionNames) {+      const t = this._extensions[e];+      t.preGenerateBinaryAsync && await t.preGenerateBinaryAsync(this._bufferManager);+    }+  }+  _forEachExtensions(e) {+    for (const t of R._ExtensionNames) {+      const s = this._extensions[t];+      s.enabled && e(s);+    }+  }+  _extensionsOnExporting() {+    this._forEachExtensions((e) => {+      var t, s, n;+      e.wasUsed && ((t = this._glTF).extensionsUsed || (t.extensionsUsed = []), this._glTF.extensionsUsed.indexOf(e.name) === -1 && this._glTF.extensionsUsed.push(e.name), e.required && ((s = this._glTF).extensionsRequired || (s.extensionsRequired = []), this._glTF.extensionsRequired.indexOf(e.name) === -1 && this._glTF.extensionsRequired.push(e.name)), (n = this._glTF).extensions || (n.extensions = {}), e.onExporting && e.onExporting());+    });+  }+  _loadExtensions() {+    for (const e of R._ExtensionNames) {+      const t = R._ExtensionFactories[e](this);+      this._extensions[e] = t;+    }+  }+  constructor(e = Ke.LastCreatedScene, t) {+    if (this._glTF = {+      asset: { generator: `Babylon.js v${Pe.Version}`, version: "2.0" }+    }, this._animations = [], this._accessors = [], this._bufferViews = [], this._cameras = [], this._images = [], this._materials = [], this._meshes = [], this._nodes = [], this._samplers = [], this._scenes = [], this._skins = [], this._textures = [], this._imageData = {}, this._shouldUseGlb = !1, this._materialExporter = new be(this), this._extensions = {}, this._bufferManager = new dt(), this._shouldExportNodeMap = /* @__PURE__ */ new Map(), this._nodeMap = /* @__PURE__ */ new Map(), this._materialMap = /* @__PURE__ */ new Map(), this._camerasMap = /* @__PURE__ */ new Map(), this._nodesCameraMap = /* @__PURE__ */ new Map(), this._skinMap = /* @__PURE__ */ new Map(), this._nodesSkinMap = /* @__PURE__ */ new Map(), this._materialNeedsUVsSet = /* @__PURE__ */ new Set(), !e)+      throw new Error("No scene available to export");+    this._babylonScene = e, this._options = {+      shouldExportNode: () => !0,+      shouldExportAnimation: () => !0,+      metadataSelector: (s) => s?.gltf?.extras,+      animationSampleRate: 1 / 60,+      exportWithoutWaitingForScene: !1,+      exportUnusedUVs: !1,+      removeNoopRootNodes: !0,+      includeCoordinateSystemConversionNodes: !1,+      meshCompressionMethod: "None",+      ...t+    }, this._loadExtensions();+  }+  dispose() {+    for (const e in this._extensions)+      this._extensions[e].dispose();+  }+  get options() {+    return this._options;+  }+  static RegisterExtension(e, t, s = 100) {+    R.UnregisterExtension(e) && N.Warn(`Extension with the name ${e} already exists`), R._ExtensionFactories[e] = t;+    const n = s ?? 0;+    R._ExtensionOrders[e] = n;+    let i = R._ExtensionNames.length;+    for (let r = 0; r < R._ExtensionNames.length; r++) {+      const o = R._ExtensionNames[r], c = R._ExtensionOrders[o];+      if (n < c) {+        i = r;+        break;+      }+    }+    R._ExtensionNames.splice(i, 0, e);+  }+  static UnregisterExtension(e) {+    if (!R._ExtensionFactories[e])+      return !1;+    delete R._ExtensionFactories[e], delete R._ExtensionOrders[e];+    const t = R._ExtensionNames.indexOf(e);+    return t !== -1 && R._ExtensionNames.splice(t, 1), !0;+  }+  _generateJSON(e, t, s) {+    const n = { byteLength: e };+    return n.byteLength && (this._glTF.buffers = [n]), this._nodes && this._nodes.length && (this._glTF.nodes = this._nodes), this._meshes && this._meshes.length && (this._glTF.meshes = this._meshes), this._scenes && this._scenes.length && (this._glTF.scenes = this._scenes, this._glTF.scene = 0), this._cameras && this._cameras.length && (this._glTF.cameras = this._cameras), this._bufferViews && this._bufferViews.length && (this._glTF.bufferViews = this._bufferViews), this._accessors && this._accessors.length && (this._glTF.accessors = this._accessors), this._animations && this._animations.length && (this._glTF.animations = this._animations), this._materials && this._materials.length && (this._glTF.materials = this._materials), this._textures && this._textures.length && (this._glTF.textures = this._textures), this._samplers && this._samplers.length && (this._glTF.samplers = this._samplers), this._skins && this._skins.length && (this._glTF.skins = this._skins), this._images && this._images.length && (this._glTF.images = this._images), this._shouldUseGlb || (n.uri = t + ".bin"), s ? JSON.stringify(this._glTF, null, 2) : JSON.stringify(this._glTF);+  }+  async generateGLTFAsync(e) {+    const t = await this._generateBinaryAsync();+    this._extensionsOnExporting();+    const s = this._generateJSON(t.byteLength, e, !0), n = new Blob([t], { type: "application/octet-stream" }), i = e + ".gltf", r = e + ".bin", o = new Ie();+    if (o.files[i] = s, o.files[r] = n, this._imageData)+      for (const c in this._imageData)+        o.files[c] = this._imageData[c];+    return o;+  }+  async _generateBinaryAsync() {+    return await this._exportSceneAsync(), await this._extensionsPreGenerateBinaryAsync(), this._bufferManager.generateBinary(this._bufferViews);+  }+  /**+   * Pads the number to a multiple of 4+   * @param num number to pad+   * @returns padded number+   */+  _getPadding(e) {+    const t = e % 4;+    return t === 0 ? t : 4 - t;+  }+  async generateGLBAsync(e) {+    this._shouldUseGlb = !0;+    const t = await this._generateBinaryAsync();+    this._extensionsOnExporting();+    const s = this._generateJSON(t.byteLength), n = e + ".glb", i = 12, r = 8;+    let o = s.length, c;+    typeof TextEncoder < "u" && (c = new TextEncoder().encode(s), o = c.length);+    const h = this._getPadding(o), f = this._getPadding(t.byteLength), u = i + 2 * r + o + h + t.byteLength + f, l = new ve(u);+    if (l.writeUInt32(1179937895), l.writeUInt32(2), l.writeUInt32(u), l.writeUInt32(o + h), l.writeUInt32(1313821514), c)+      l.writeTypedArray(c);+    else+      for (let g = 0; g < o; ++g) {+        const p = s.charCodeAt(g);+        p != s.codePointAt(g) ? l.writeUInt8(95) : l.writeUInt8(p);+      }+    for (let _ = 0; _ < h; ++_)+      l.writeUInt8(32);+    l.writeUInt32(t.byteLength + f), l.writeUInt32(5130562), l.writeTypedArray(t);+    for (let _ = 0; _ < f; ++_)+      l.writeUInt8(0);+    const m = new Ie();+    return m.files[n] = new Blob([l.getOutputData()], { type: "application/octet-stream" }), m;+  }+  _setNodeTransformation(e, t, s) {+    if (t.getPivotPoint().equalsWithEpsilon(se, K) || N.Warn("Pivot points are not supported in the glTF serializer"), !t.position.equalsWithEpsilon(se, K)) {+      const i = P.Vector3[0].copyFrom(t.position);+      s && de(i), e.translation = i.asArray();+    }+    t.scaling.equalsWithEpsilon(ie, K) || (e.scale = t.scaling.asArray());+    const n = t.rotationQuaternion?.clone() || W.FromEulerAngles(t.rotation.x, t.rotation.y, t.rotation.z);+    n.equalsWithEpsilon(me, K) || (s && ge(n), e.rotation = n.normalize().asArray());+  }+  _setCameraTransformation(e, t, s) {+    const n = P.Vector3[0], i = P.Quaternion[0], r = t.getWorldMatrix();+    if (t.parent) {+      const o = t.parent.getWorldMatrix().invertToRef(P.Matrix[0]);+      r.multiplyToRef(o, P.Matrix[1]).decompose(void 0, i, n);+    } else+      r.decompose(void 0, i, n);+    n.equalsWithEpsilon(se, K) || (s && de(n), e.translation = n.asArray()), s && ge(i), this._babylonScene.useRightHandedSystem || Fe(i), i.equalsWithEpsilon(me, K) || (e.rotation = i.asArray());+  }+  // Export babylon cameras to glTF cameras+  _listAvailableCameras() {+    for (const e of this._babylonScene.cameras) {+      const t = {+        type: e.mode === ne.PERSPECTIVE_CAMERA ? "perspective" : "orthographic"+      };+      if (e.name && (t.name = e.name), t.type === "perspective")+        t.perspective = {+          aspectRatio: e.getEngine().getAspectRatio(e),+          yfov: e.fovMode === ne.FOVMODE_VERTICAL_FIXED ? e.fov : e.fov * e.getEngine().getAspectRatio(e),+          znear: e.minZ,+          zfar: e.maxZ+        };+      else if (t.type === "orthographic") {+        const s = e.orthoLeft && e.orthoRight ? 0.5 * (e.orthoRight - e.orthoLeft) : e.getEngine().getRenderWidth() * 0.5, n = e.orthoBottom && e.orthoTop ? 0.5 * (e.orthoTop - e.orthoBottom) : e.getEngine().getRenderHeight() * 0.5;+        t.orthographic = {+          xmag: s,+          ymag: n,+          znear: e.minZ,+          zfar: e.maxZ+        };+      }+      this._camerasMap.set(e, t);+    }+  }+  // Cleanup unused cameras and assign index to nodes.+  _exportAndAssignCameras() {+    const e = Array.from(this._camerasMap.values());+    for (const t of e) {+      const s = this._nodesCameraMap.get(t);+      if (s !== void 0) {+        this._cameras.push(t);+        for (const n of s)+          n.camera = this._cameras.length - 1;+      }+    }+  }+  // Collects all skins in a skins map so nodes can reference it during node parsing.+  _listAvailableSkeletons() {+    for (const e of this._babylonScene.skeletons) {+      if (e.bones.length <= 0)+        continue;+      const t = { joints: [] };+      this._skinMap.set(e, t);+    }+  }+  _exportAndAssignSkeletons(e) {+    for (const t of this._babylonScene.skeletons) {+      if (t.bones.length <= 0)+        continue;+      const s = this._skinMap.get(t);+      if (s == null)+        continue;+      const n = {};+      let i = -1;+      for (let c = 0; c < t.bones.length; ++c) {+        const h = t.bones[c], f = h.getIndex() ?? c;+        f !== -1 && (n[f] = h, f > i && (i = f));+      }+      const r = [];+      for (let c = 0; c <= i; ++c) {+        const h = n[c], f = h.getTransformNode(), u = f ? this._nodeMap.get(f) : void 0;+        if (u === void 0) {+          N.Warn("Exporting a bone without a linked transform node is currently unsupported.");+          continue;+        }+        s.joints.push(u);+        const l = h.getAbsoluteInverseBindMatrix().clone();+        e.has(f) && ct(l), r.push(l);+      }+      const o = this._nodesSkinMap.get(s);+      if (s.joints.length > 0 && o !== void 0) {+        const c = new Float32Array(r.length * 16);+        r.forEach((u, l) => {+          c.set(u.m, l * 16);+        });+        const h = this._bufferManager.createBufferView(c);+        this._accessors.push(this._bufferManager.createAccessor(h, "MAT4", 5126, r.length)), s.inverseBindMatrices = this._accessors.length - 1, this._skins.push(s);+        const f = this._skins.length - 1;+        for (const u of o)+          u.skin = f;+      }+    }+  }+  async _exportSceneAsync() {+    const e = { nodes: [] };+    if (this._babylonScene.metadata) {+      const h = this._options.metadataSelector(this._babylonScene.metadata);+      h && (e.extras = h);+    }+    const t = new Array(), s = new Array(), n = new Array();+    let i;+    if (this._options.removeNoopRootNodes && !this._options.includeCoordinateSystemConversionNodes)+      for (const h of this._babylonScene.animationGroups)+        for (const f of h.targetedAnimations) {+          const u = f.target;+          u instanceof Z && !u.parent && (i ?? (i = /* @__PURE__ */ new Set())).add(u);+        }+    for (const h of this._babylonScene.rootNodes) {+      const f = h.animations, u = !!f && f.length > 0 || i?.has(h);+      this._options.removeNoopRootNodes && !this._options.includeCoordinateSystemConversionNodes && et(h, this._babylonScene.useRightHandedSystem) && !u ? n.push(...h.getChildren()) : this._babylonScene.useRightHandedSystem ? t.push(h) : s.push(h);+    }+    this._listAvailableCameras(), this._listAvailableSkeletons();+    const r = new he(!0, !1);+    e.nodes.push(...await this._exportNodesAsync(s, r));+    const o = new he(!1, !1);+    e.nodes.push(...await this._exportNodesAsync(t, o));+    const c = new he(!1, !0);+    e.nodes.push(...await this._exportNodesAsync(n, c)), e.nodes.length && this._scenes.push(e), this._exportAndAssignCameras(), this._exportAndAssignSkeletons(r.getNodesSet()), this._babylonScene.animationGroups.length && V._CreateNodeAndMorphAnimationFromAnimationGroups(this._babylonScene, this._animations, this._nodeMap, this._bufferManager, this._bufferViews, this._accessors, this._animationSampleRate, r.getNodesSet(), this._options.shouldExportAnimation);+  }+  _shouldExportNode(e) {+    let t = this._shouldExportNodeMap.get(e);+    return t === void 0 && (t = this._options.shouldExportNode(e), this._shouldExportNodeMap.set(e, t)), t;+  }+  async _exportNodesAsync(e, t) {+    const s = new Array();+    this._exportBuffers(e, t);+    for (const n of e)+      await this._exportNodeAsync(n, s, t);+    return s;+  }+  _collectBuffers(e, t, s, n, i) {+    if (this._shouldExportNode(e) && e instanceof ue && e.geometry) {+      const r = e.geometry.getVertexBuffers();+      if (r)+        for (const c in r) {+          if (!Se(c))+            continue;+          const h = r[c];+          i.setHasVertexColorAlpha(h, e.hasVertexAlpha);+          const f = h._buffer, u = t.get(f) || [];+          t.set(f, u), u.indexOf(h) === -1 && u.push(h);+          const l = s.get(h) || [];+          s.set(h, l), l.indexOf(e) === -1 && l.push(e);+        }+      const o = e.morphTargetManager;+      if (o)+        for (let c = 0; c < o.numTargets; c++) {+          const h = o.getTarget(c), f = n.get(h) || [];+          n.set(h, f), f.indexOf(e) === -1 && f.push(e);+        }+    }+    for (const r of e.getChildren())+      this._collectBuffers(r, t, s, n, i);+  }+  _exportBuffers(e, t) {+    const s = /* @__PURE__ */ new Map(), n = /* @__PURE__ */ new Map(), i = /* @__PURE__ */ new Map();+    for (const c of e)+      this._collectBuffers(c, s, n, i, t);+    const r = Array.from(s.keys());+    for (const c of r) {+      const h = c.getData();+      if (!h)+        throw new Error("Buffer data is not available");+      const f = s.get(c);+      if (!f)+        continue;+      const u = f[0].byteStride;+      if (f.some((p) => p.byteStride !== u))+        throw new Error("Vertex buffers pointing to the same buffer must have the same byte stride");+      const l = ut(h).slice();+      for (const p of f) {+        const d = n.get(p), { byteOffset: w, byteStride: y, componentCount: x, type: E, count: C, normalized: S, kind: I } = fe(p, d);+        switch (I) {+          case A.NormalKind:+          case A.TangentKind: {+            te(l, w, y, x, E, C, S, (M) => {+              const T = Math.sqrt(M[0] * M[0] + M[1] * M[1] + M[2] * M[2]);+              if (T > 0) {+                const U = 1 / T;+                M[0] *= U, M[1] *= U, M[2] *= U;+              }+            });+            break;+          }+          case A.ColorKind: {+            const M = d.filter((F) => F.material instanceof ye || F.material == null).length;+            if (M == 0)+              break;+            if (M != d.length) {+              J.Warn("Not converting vertex color space, as buffer is shared by StandardMaterials and other material types. Results may look incorrect.");+              break;+            }+            E == A.UNSIGNED_BYTE && J.Warn("Converting uint8 vertex colors to linear space. Results may look incorrect.");+            const T = new z(), U = new ze(), B = this._babylonScene.getEngine().useExactSrgbConversions;+            te(l, w, y, x, E, C, S, (F) => {+              F.length === 3 ? (T.fromArray(F, 0), T.toLinearSpaceToRef(T, B), T.toArray(F, 0)) : (U.fromArray(F, 0), U.toLinearSpaceToRef(U, B), U.toArray(F, 0));+            });+          }+        }+      }+      if (t.convertToRightHanded) {+        for (const p of f) {+          const d = n.get(p), { byteOffset: w, byteStride: y, componentCount: x, type: E, count: C, normalized: S, kind: I } = fe(p, d);+          switch (I) {+            case A.PositionKind:+            case A.NormalKind:+            case A.TangentKind:+              te(l, w, y, x, E, C, S, (M) => {+                M[0] = -M[0];+              });+          }+        }+        t.convertedToRightHandedBuffers.set(c, l);+      }+      const m = this._bufferManager.createBufferView(l, u);+      t.setVertexBufferView(c, m);+      const _ = /* @__PURE__ */ new Map();+      for (const p of f) {+        const d = n.get(p), { kind: w, totalVertices: y } = fe(p, d);+        switch (w) {+          case A.MatricesIndicesKind:+          case A.MatricesIndicesExtraKind:+            if (p.type == A.FLOAT) {+              const x = p.getFloatData(y);+              x !== null && _.set(p, x);+            }+        }+      }+      _.size !== 0 && J.Warn("Joint indices conversion needed: some joint indices are stored as floats in Babylon but GLTF requires UNSIGNED BYTES. We will perform the conversion but this might lead to unused data in the buffer.");+      const g = Array.from(_.keys());+      for (const p of g) {+        const d = _.get(p);+        if (!d)+          continue;+        const w = nt(d), y = new (w ? Uint16Array : Uint8Array)(d.length);+        for (let E = 0; E < d.length; E++)+          y[E] = d[E];+        const x = this._bufferManager.createBufferView(y, 4 * (w ? 2 : 1));+        t.setRemappedBufferView(c, p, x);+      }+    }+    const o = Array.from(i.keys());+    for (const c of o) {+      const h = i.get(c);+      if (!h)+        continue;+      const f = gt(c, h[0], this._bufferManager, this._bufferViews, this._accessors, t.convertToRightHanded);+      for (const u of h)+        t.bindMorphDataToMesh(u, f);+    }+  }+  /**+   * Processes a node to be exported to the glTF file+   * @returns A promise that resolves once the node has been exported+   * @internal+   */+  async _exportNodeAsync(e, t, s) {+    let n = this._nodeMap.get(e);+    if (n !== void 0) {+      t.includes(n) || t.push(n);+      return;+    }+    const i = await this._createNodeAsync(e, s);+    if (i) {+      n = this._nodes.length, this._nodes.push(i), this._nodeMap.set(e, n), s.pushExportedNode(e), t.push(n);+      const o = {+        name: "runtime animations",+        channels: [],+        samplers: []+      }, c = [];+      this._babylonScene.animationGroups.length || (V._CreateMorphTargetAnimationFromMorphTargetAnimations(e, o, c, this._nodeMap, this._nodes, this._bufferManager, this._bufferViews, this._accessors, this._animationSampleRate, s.convertToRightHanded, this._options.shouldExportAnimation), e.animations.length && V._CreateNodeAnimationFromNodeAnimations(e, o, c, this._nodeMap, this._nodes, this._bufferManager, this._bufferViews, this._accessors, this._animationSampleRate, s.convertToRightHanded, this._options.shouldExportAnimation)), o.channels.length && o.samplers.length && this._animations.push(o), c.forEach((h) => {+        h.channels.length && h.samplers.length && this._animations.push(h);+      });+    }+    const r = i ? [] : t;+    for (const o of e.getChildren())+      await this._exportNodeAsync(o, r, s);+    i && r.length && (i.children = r);+  }+  /**+   * Creates a glTF node from a Babylon.js node. If skipped, returns null.+   * @internal+   */+  async _createNodeAsync(e, t) {+    if (!this._shouldExportNode(e))+      return null;+    const s = {};+    if (e.name && (s.name = e.name), e.metadata) {+      const i = this._options.metadataSelector(e.metadata);+      i && (s.extras = i);+    }+    if (e instanceof Z && (this._setNodeTransformation(s, e, t.convertToRightHanded), e instanceof ue)) {+      const i = e instanceof qe ? e.sourceMesh : e;+      if (i.subMeshes && i.subMeshes.length > 0 && (s.mesh = await this._exportMeshAsync(i, t)), e.skeleton) {+        const r = this._skinMap.get(e.skeleton);+        r !== void 0 && (this._nodesSkinMap.get(r) === void 0 && this._nodesSkinMap.set(r, []), this._nodesSkinMap.get(r)?.push(s));+      }+    }+    if (e instanceof Ne) {+      const i = this._camerasMap.get(e);+      if (i) {+        this._nodesCameraMap.get(i) === void 0 && this._nodesCameraMap.set(i, []), this._setCameraTransformation(s, e, t.convertToRightHanded);+        const r = e.parent;+        if (r !== null && ht(e, r)) {+          const o = this._nodeMap.get(r);+          if (o !== void 0) {+            const c = this._nodes[o];+            return ft(s, c), this._nodesCameraMap.get(i)?.push(c), null;+          }+        }+        this._nodesCameraMap.get(i)?.push(s);+      }+    }+    return await this._extensionsPostExportNodeAsync("exportNodeAsync", s, e, this._nodeMap, t.convertToRightHanded) ? s : (J.Warn(`Not exporting node ${e.name}`), null);+  }+  _exportIndices(e, t, s, n, i, r, o, c, h) {+    let f = null;+    h.mode = ot(r);+    const u = o !== k.CounterClockWiseSideOrientation && at(r);+    if (u) {+      if (r === k.TriangleStripDrawMode || r === k.TriangleFanDrawMode)+        throw new Error("Triangle strip/fan fill mode is not implemented");+      const l = t ? new Uint32Array(n) : new Uint16Array(n);+      if (e)+        for (let m = 0; m + 2 < n; m += 3)+          l[m] = e[s + m] + i, l[m + 1] = e[s + m + 2] + i, l[m + 2] = e[s + m + 1] + i;+      else+        for (let m = 0; m + 2 < n; m += 3)+          l[m] = m, l[m + 1] = m + 2, l[m + 2] = m + 1;+      f = l;+    } else if (e && i !== 0) {+      const l = t ? new Uint32Array(n) : new Uint16Array(n);+      for (let m = 0; m < n; m++)+        l[m] = e[s + m] + i;+      f = l;+    } else e && (f = lt(e, s, n, t));+    if (f) {+      let l = c.getIndicesAccessor(e, s, n, i, u);+      if (l === void 0) {+        const m = this._bufferManager.createBufferView(f), _ = t ? 5125 : 5123;+        this._accessors.push(this._bufferManager.createAccessor(m, "SCALAR", _, n, 0)), l = this._accessors.length - 1, c.setIndicesAccessor(e, s, n, i, u, l);+      }+      h.indices = l;+    }+  }+  _exportVertexBuffer(e, t, s, n, i, r) {+    const o = e.getKind();+    if (!Se(o) || o.startsWith("uv") && !this._options.exportUnusedUVs && (!t || !this._materialNeedsUVsSet.has(t)))+      return;+    let c = i.getVertexAccessor(e, s, n);+    if (c === void 0) {+      const h = i.convertedToRightHandedBuffers.get(e._buffer) || e._buffer.getData(), f = o === A.PositionKind ? pt(h, e, s, n) : void 0, u = (o === A.MatricesIndicesKind || o === A.MatricesIndicesExtraKind) && e.type === A.FLOAT, l = u ? A.UNSIGNED_BYTE : e.type, m = u ? void 0 : e.normalized, _ = u ? i.getRemappedBufferView(e._buffer, e) : i.getVertexBufferView(e._buffer), g = e.byteOffset + s * e.byteStride;+      this._accessors.push(this._bufferManager.createAccessor(+        _,+        it(o, i.hasVertexColorAlpha(e)),+        l,+        n,+        g,+        f,+        m+        // TODO: Find other places where this is needed.+      )), c = this._accessors.length - 1, i.setVertexAccessor(e, s, n, c);+    }+    r.attributes[rt(o)] = c;+  }+  async _exportMaterialAsync(e, t, s, n) {+    let i = this._materialMap.get(e);+    if (i === void 0) {+      const r = t && Object.keys(t).some((o) => o.startsWith("uv"));+      if (e = e instanceof Ge ? e.subMaterials[s.materialIndex] : e, e instanceof Y)+        i = await this._materialExporter.exportPBRMaterialAsync(e, r);+      else if (e instanceof ye)+        i = await this._materialExporter.exportStandardMaterialAsync(e, r);+      else if (e instanceof le)+        i = await this._materialExporter.exportOpenPBRMaterialAsync(e, r);+      else {+        J.Warn(`Unsupported material '${e.name}' with type ${e.getClassName()}`);+        return;+      }+      this._materialMap.set(e, i);+    }+    n.material = i;+  }+  async _exportMeshAsync(e, t) {+    let s = t.getMesh(e);+    if (s !== void 0)+      return s;+    const n = { primitives: [] };+    s = this._meshes.length, this._meshes.push(n), t.setMesh(e, s);+    const i = e.isUnIndexed ? null : e.getIndices(), r = e.geometry?.getVertexBuffers(), o = t.getMorphTargetsFromMesh(e), c = e instanceof He, h = e instanceof je, f = e.subMeshes;+    if (r && f && f.length > 0)+      for (const u of f) {+        const l = { attributes: {} }, m = u.getMaterial() || this._babylonScene.defaultMaterial;+        if (h) {+          const p = {+            name: m.name+          }, d = e, w = z.White(), y = d.material?.alpha ?? 1, x = d.greasedLineMaterial?.color ?? w;+          (!x.equalsWithEpsilon(w, K) || y < 1) && (p.pbrMetallicRoughness = {+            baseColorFactor: [...x.asArray(), y]+          }), this._materials.push(p), l.material = this._materials.length - 1;+        } else if (c) {+          const p = {+            name: m.name+          }, d = e;+          (!d.color.equalsWithEpsilon(z.White(), K) || d.alpha < 1) && (p.pbrMetallicRoughness = {+            baseColorFactor: [...d.color.asArray(), d.alpha]+          }), this._materials.push(p), l.material = this._materials.length - 1;+        } else+          await this._exportMaterialAsync(m, r, u, l);+        const _ = c || h ? k.LineListDrawMode : e.overrideRenderingFillMode ?? m.fillMode;+        let g = m._getEffectiveOrientation(e);+        t.wasAddedByNoopNode && !e.getScene().useRightHandedSystem && (g = g === k.ClockWiseSideOrientation ? k.CounterClockWiseSideOrientation : k.ClockWiseSideOrientation), this._exportIndices(i, i ? $e(i, u.indexCount, u.indexStart, u.verticesStart) : u.verticesCount > 65535, i ? u.indexStart : u.verticesStart, i ? u.indexCount : u.verticesCount, -u.verticesStart, _, g, t, l);+        for (const p of Object.values(r))+          this._exportVertexBuffer(p, m, u.verticesStart, u.verticesCount, t, l);+        if (o) {+          l.targets = [];+          for (const p of o)+            l.targets.push(p.attributes);+        }+        n.primitives.push(l), this._extensionsPostExportMeshPrimitive(l);+      }+    if (o) {+      n.weights = [], n.extras || (n.extras = {}), n.extras.targetNames = [];+      for (const u of o)+        n.weights.push(u.influence), n.extras.targetNames.push(u.name);+    }+    return s;+  }+}+R._ExtensionNames = new Array();+R._ExtensionFactories = {};+R._ExtensionOrders = {};+class xt {+  /**+   * Exports the scene to .gltf file format+   * @param scene Babylon scene+   * @param fileName Name to use for the .gltf file+   * @param options Exporter options+   * @returns Returns the exported data+   */+  static async GLTFAsync(e, t, s) {+    (!s || !s.exportWithoutWaitingForScene) && await e.whenReadyAsync();+    const n = new R(e, s), i = await n.generateGLTFAsync(t.replace(/\.[^/.]+$/, ""));+    return n.dispose(), i;+  }+  /**+   * Exports the scene to .glb file format+   * @param scene Babylon scene+   * @param fileName Name to use for the .glb file+   * @param options Exporter options+   * @returns Returns the exported data+   */+  static async GLBAsync(e, t, s) {+    (!s || !s.exportWithoutWaitingForScene) && await e.whenReadyAsync();+    const n = new R(e, s), i = await n.generateGLBAsync(t.replace(/\.[^/.]+$/, ""));+    return n.dispose(), i;+  }+}+export {+  xt as GLTF2Export+};
vendor/adom-step/vendor/3d-viewer-dist/chunk-Cw8L9bT6.jsadded+21
@@ -0,0 +1,21 @@+import { bW as t } from "./chunk-IERganv1.js";+const e = "volumetricLightingRenderVolumePixelShader", i = `#include<sceneUboDeclaration>+#include<meshUboDeclaration>+uniform invViewProjection: mat4x4<f32>;uniform lightDir: vec3f; +uniform outputTextureSize: vec2f;uniform extinctionPhaseG: vec4f;uniform lightPower: vec3f;uniform textureRatio: vec2f;var depthTexture: texture_2d<f32>;varying vWorldPos: vec4f;fn henyeyGreenstein(g: f32,cosTheta: f32)->f32 {let denom=1+g*g-2*g*cosTheta;return 1.0/(4.0*3.14159265)*(1.0-g*g)/(denom*sqrt(max(denom,0.0)));}+fn integrateDirectional(eyeDist: f32,viewDir: vec3f,lightDir: vec3f)->vec3f {let phaseG=uniforms.extinctionPhaseG.w;+#ifdef USE_EXTINCTION+let extinction=uniforms.extinctionPhaseG.xyz;return henyeyGreenstein(phaseG,dot(viewDir,lightDir))*(vec3f(1.0)-exp(-extinction*eyeDist))/extinction;+#else+return vec3f(henyeyGreenstein(phaseG,dot(viewDir,lightDir)))*vec3f(eyeDist);+#endif+}+@fragment+fn main(input: FragmentInputs)->FragmentOutputs {let depth=textureLoad(depthTexture,vec2u(fragmentInputs.position.xy*uniforms.textureRatio),0).r;var worldPos=fragmentInputs.vWorldPos;if (fragmentInputs.position.z>depth) {let ndc=vec4f((fragmentInputs.position.xy/uniforms.outputTextureSize)*2.-1.,depth,1.0);worldPos=uniforms.invViewProjection*ndc;worldPos=worldPos/worldPos.w;}+var viewDir=worldPos.xyz-scene.vEyePosition.xyz;let eyeDist=length(viewDir);viewDir=viewDir/eyeDist;let fSign=select(-1.0,1.0,fragmentInputs.frontFacing);let integral=integrateDirectional(eyeDist,-viewDir,uniforms.lightDir);fragmentOutputs.color=vec4f(uniforms.lightPower*integral*fSign,1.0);}+`;+t.ShadersStoreWGSL[e] || (t.ShadersStoreWGSL[e] = i);+const r = { name: e, shader: i };+export {+  r as volumetricLightingRenderVolumePixelShaderWGSL+};
vendor/adom-step/vendor/3d-viewer-dist/chunk-Cx4kqim-.jsadded+712
@@ -0,0 +1,712 @@+import { aA as T, i as b, T as j, F as M, o as B, V as w, a6 as V, a3 as L, cX as P, ag as v, cH as E, H as C, cW as D, c0 as A } from "./chunk-IERganv1.js";+import { O as x } from "./chunk-DsOYaBFP.js";+class f {+  constructor() {+    this.materials = [];+  }+  /**+   * This function will read the mtl file and create each material described inside+   * This function could be improve by adding :+   * -some component missing (Ni, Tf...)+   * -including the specific options available+   *+   * @param scene defines the scene the material will be created in+   * @param data defines the mtl data to parse+   * @param rootUrl defines the rooturl to use in order to load relative dependencies+   * @param assetContainer defines the asset container to store the material in (can be null)+   */+  parseMTL(t, n, i, o) {+    if (n instanceof ArrayBuffer)+      return;+    const l = n.split(`+`), h = /\s+/;+    let _, a = null;+    for (let u = 0; u < l.length; u++) {+      const r = l[u].trim();+      if (r.length === 0 || r.charAt(0) === "#")+        continue;+      const s = r.indexOf(" ");+      let e = s >= 0 ? r.substring(0, s) : r;+      e = e.toLowerCase();+      const p = s >= 0 ? r.substring(s + 1).trim() : "";+      if (e === "newmtl")+        a && this.materials.push(a), t._blockEntityCollection = !!o, a = new T(p, t), a._parentContainer = o, t._blockEntityCollection = !1;+      else if (e === "kd" && a)+        _ = p.split(h, 3).map(parseFloat), a.diffuseColor = b.FromArray(_);+      else if (e === "ka" && a)+        _ = p.split(h, 3).map(parseFloat), a.ambientColor = b.FromArray(_);+      else if (e === "ks" && a)+        _ = p.split(h, 3).map(parseFloat), a.specularColor = b.FromArray(_);+      else if (e === "ke" && a)+        _ = p.split(h, 3).map(parseFloat), a.emissiveColor = b.FromArray(_);+      else if (e === "ns" && a)+        a.specularPower = parseFloat(p);+      else if (e === "d" && a)+        a.alpha = parseFloat(p);+      else if (e === "map_ka" && a)+        a.ambientTexture = f._GetTexture(i, p, t);+      else if (e === "map_kd" && a)+        a.diffuseTexture = f._GetTexture(i, p, t);+      else if (e === "map_ks" && a)+        a.specularTexture = f._GetTexture(i, p, t);+      else if (e !== "map_ns") if (e === "map_bump" && a) {+        const d = p.split(h), F = d.indexOf("-bm");+        let g = null;+        F >= 0 && (g = d[F + 1], d.splice(F, 2)), a.bumpTexture = f._GetTexture(i, d.join(" "), t), a.bumpTexture && g !== null && (a.bumpTexture.level = parseFloat(g));+      } else e === "map_d" && a && (a.opacityTexture = f._GetTexture(i, p, t));+    }+    a && this.materials.push(a);+  }+  /**+   * Gets the texture for the material.+   *+   * If the material is imported from input file,+   * We sanitize the url to ensure it takes the texture from aside the material.+   *+   * @param rootUrl The root url to load from+   * @param value The value stored in the mtl+   * @param scene+   * @returns The Texture+   */+  static _GetTexture(t, n, i) {+    if (!n)+      return null;+    let o = t;+    if (t === "file:") {+      let l = n.lastIndexOf("\\");+      l === -1 && (l = n.lastIndexOf("/")), l > -1 ? o += n.substring(l + 1) : o += n;+    } else+      o += n;+    return new j(o, i, !1, f.INVERT_TEXTURE_Y);+  }+}+f.INVERT_TEXTURE_Y = !0;+class m {+  /**+   * Creates a new SolidParser+   * @param materialToUse defines the array to fill with the list of materials to use (it will be filled by the parse function)+   * @param babylonMeshesArray defines the array to fill with the list of loaded meshes (it will be filled by the parse function)+   * @param loadingOptions defines the loading options to use+   */+  constructor(t, n, i) {+    this._positions = [], this._normals = [], this._uvs = [], this._colors = [], this._extColors = [], this._meshesFromObj = [], this._indicesForBabylon = [], this._wrappedPositionForBabylon = [], this._wrappedUvsForBabylon = [], this._wrappedColorsForBabylon = [], this._wrappedNormalsForBabylon = [], this._tuplePosNorm = [], this._curPositionInIndices = 0, this._hasMeshes = !1, this._unwrappedPositionsForBabylon = [], this._unwrappedColorsForBabylon = [], this._unwrappedNormalsForBabylon = [], this._unwrappedUVForBabylon = [], this._triangles = [], this._materialNameFromObj = "", this._objMeshName = "", this._increment = 1, this._isFirstMaterial = !0, this._grayColor = new M(0.5, 0.5, 0.5, 1), this._hasLineData = !1, this._materialToUse = t, this._babylonMeshesArray = n, this._loadingOptions = i;+  }+  /**+   * Search for obj in the given array.+   * This function is called to check if a couple of data already exists in an array.+   *+   * If found, returns the index of the founded tuple index. Returns -1 if not found+   * @param arr Array<{ normals: Array<number>, idx: Array<number> }>+   * @param obj Array<number>+   * @returns {boolean}+   */+  _isInArray(t, n) {+    t[n[0]] || (t[n[0]] = { normals: [], idx: [] });+    const i = t[n[0]].normals.indexOf(n[1]);+    return i === -1 ? -1 : t[n[0]].idx[i];+  }+  _isInArrayUV(t, n) {+    t[n[0]] || (t[n[0]] = { normals: [], idx: [], uv: [] });+    const i = t[n[0]].normals.indexOf(n[1]);+    return i != 1 && n[2] === t[n[0]].uv[i] ? t[n[0]].idx[i] : -1;+  }+  /**+   * This function set the data for each triangle.+   * Data are position, normals and uvs+   * If a tuple of (position, normal) is not set, add the data into the corresponding array+   * If the tuple already exist, add only their indice+   *+   * @param data The vertex's data+   * * indicesPositionFromObj: The index in positions array+   * * indicesUvsFromObj: The index in uvs array+   * * indicesNormalFromObj: The index in normals array+   * * positionVectorFromOBJ: The value of position at index objIndice+   * * textureVectorFromOBJ: The value of uvs+   * * normalsVectorFromOBJ: The value of normals at index objNormale+   * * positionColorsFromOBJ: The value of color at index objIndice+   */+  _setData(t) {+    t.indiceUvsFromObj ?? (t.indiceUvsFromObj = -1), t.indiceNormalFromObj ?? (t.indiceNormalFromObj = -1);+    let n;+    this._loadingOptions.optimizeWithUV ? n = this._isInArrayUV(this._tuplePosNorm, [t.indicePositionFromObj, t.indiceNormalFromObj, t.indiceUvsFromObj]) : n = this._isInArray(this._tuplePosNorm, [t.indicePositionFromObj, t.indiceNormalFromObj]), n === -1 ? (this._indicesForBabylon.push(this._wrappedPositionForBabylon.length), this._wrappedPositionForBabylon.push(t.positionVectorFromOBJ), t.textureVectorFromOBJ !== void 0 && this._wrappedUvsForBabylon.push(t.textureVectorFromOBJ), t.normalsVectorFromOBJ !== void 0 && this._wrappedNormalsForBabylon.push(t.normalsVectorFromOBJ), t.positionColorsFromOBJ !== void 0 && this._wrappedColorsForBabylon.push(t.positionColorsFromOBJ), this._tuplePosNorm[t.indicePositionFromObj].normals.push(t.indiceNormalFromObj), this._tuplePosNorm[t.indicePositionFromObj].idx.push(this._curPositionInIndices++), this._loadingOptions.optimizeWithUV && this._tuplePosNorm[t.indicePositionFromObj].uv.push(t.indiceUvsFromObj)) : this._indicesForBabylon.push(n);+  }+  /**+   * Transform Vector() and BABYLON.Color() objects into numbers in an array+   */+  _unwrapData() {+    try {+      for (let t = 0; t < this._wrappedPositionForBabylon.length; t++)+        this._unwrappedPositionsForBabylon.push(this._wrappedPositionForBabylon[t].x * this._handednessSign, this._wrappedPositionForBabylon[t].y, this._wrappedPositionForBabylon[t].z), this._wrappedNormalsForBabylon.length && this._unwrappedNormalsForBabylon.push(this._wrappedNormalsForBabylon[t].x * this._handednessSign, this._wrappedNormalsForBabylon[t].y, this._wrappedNormalsForBabylon[t].z), this._wrappedUvsForBabylon.length && this._unwrappedUVForBabylon.push(this._wrappedUvsForBabylon[t].x, this._wrappedUvsForBabylon[t].y), this._wrappedColorsForBabylon.length && this._unwrappedColorsForBabylon.push(this._wrappedColorsForBabylon[t].r, this._wrappedColorsForBabylon[t].g, this._wrappedColorsForBabylon[t].b, this._wrappedColorsForBabylon[t].a);+      this._wrappedPositionForBabylon.length = 0, this._wrappedNormalsForBabylon.length = 0, this._wrappedUvsForBabylon.length = 0, this._wrappedColorsForBabylon.length = 0, this._tuplePosNorm.length = 0, this._curPositionInIndices = 0;+    } catch (t) {+      throw new Error("Unable to unwrap data while parsing OBJ data.", { cause: t });+    }+  }+  /**+   * Create triangles from polygons+   * It is important to notice that a triangle is a polygon+   * We get 5 patterns of face defined in OBJ File :+   * facePattern1 = ["1","2","3","4","5","6"]+   * facePattern2 = ["1/1","2/2","3/3","4/4","5/5","6/6"]+   * facePattern3 = ["1/1/1","2/2/2","3/3/3","4/4/4","5/5/5","6/6/6"]+   * facePattern4 = ["1//1","2//2","3//3","4//4","5//5","6//6"]+   * facePattern5 = ["-1/-1/-1","-2/-2/-2","-3/-3/-3","-4/-4/-4","-5/-5/-5","-6/-6/-6"]+   * Each pattern is divided by the same method+   * @param faces Array[String] The indices of elements+   * @param v Integer The variable to increment+   */+  _getTriangles(t, n) {+    for (let i = n; i < t.length - 1; i++)+      this._pushTriangle(t, i);+  }+  /**+   * To get color between color and extension color+   * @param index Integer The index of the element in the array+   * @returns value of target color+   */+  _getColor(t) {+    if (this._loadingOptions.importVertexColors)+      return this._extColors[t] ?? this._colors[t];+  }+  /**+   * Create triangles and push the data for each polygon for the pattern 1+   * In this pattern we get vertice positions+   * @param face+   * @param v+   */+  _setDataForCurrentFaceWithPattern1(t, n) {+    this._getTriangles(t, n);+    for (let i = 0; i < this._triangles.length; i++) {+      const o = parseInt(this._triangles[i]) - 1;+      this._setData({+        indicePositionFromObj: o,+        positionVectorFromOBJ: this._positions[o],+        positionColorsFromOBJ: this._getColor(o)+      });+    }+    this._triangles.length = 0;+  }+  /**+   * Create triangles and push the data for each polygon for the pattern 2+   * In this pattern we get vertice positions and uvs+   * @param face+   * @param v+   */+  _setDataForCurrentFaceWithPattern2(t, n) {+    this._getTriangles(t, n);+    for (let i = 0; i < this._triangles.length; i++) {+      const o = this._triangles[i].split("/"), l = parseInt(o[0]) - 1, h = parseInt(o[1]) - 1;+      this._setData({+        indicePositionFromObj: l,+        indiceUvsFromObj: h,+        positionVectorFromOBJ: this._positions[l],+        textureVectorFromOBJ: this._uvs[h],+        positionColorsFromOBJ: this._getColor(l)+      });+    }+    this._triangles.length = 0;+  }+  /**+   * Create triangles and push the data for each polygon for the pattern 3+   * In this pattern we get vertice positions, uvs and normals+   * @param face+   * @param v+   */+  _setDataForCurrentFaceWithPattern3(t, n) {+    this._getTriangles(t, n);+    for (let i = 0; i < this._triangles.length; i++) {+      const o = this._triangles[i].split("/"), l = parseInt(o[0]) - 1, h = parseInt(o[1]) - 1, _ = parseInt(o[2]) - 1;+      this._setData({+        indicePositionFromObj: l,+        indiceUvsFromObj: h,+        indiceNormalFromObj: _,+        positionVectorFromOBJ: this._positions[l],+        textureVectorFromOBJ: this._uvs[h],+        normalsVectorFromOBJ: this._normals[_]+      });+    }+    this._triangles.length = 0;+  }+  /**+   * Create triangles and push the data for each polygon for the pattern 4+   * In this pattern we get vertice positions and normals+   * @param face+   * @param v+   */+  _setDataForCurrentFaceWithPattern4(t, n) {+    this._getTriangles(t, n);+    for (let i = 0; i < this._triangles.length; i++) {+      const o = this._triangles[i].split("//"), l = parseInt(o[0]) - 1, h = parseInt(o[1]) - 1;+      this._setData({+        indicePositionFromObj: l,+        indiceNormalFromObj: h,+        positionVectorFromOBJ: this._positions[l],+        normalsVectorFromOBJ: this._normals[h],+        positionColorsFromOBJ: this._getColor(l)+      });+    }+    this._triangles.length = 0;+  }+  /*+   * Create triangles and push the data for each polygon for the pattern 3+   * In this pattern we get vertice positions, uvs and normals+   * @param face+   * @param v+   */+  _setDataForCurrentFaceWithPattern5(t, n) {+    this._getTriangles(t, n);+    for (let i = 0; i < this._triangles.length; i++) {+      const o = this._triangles[i].split("/"), l = this._positions.length + parseInt(o[0]), h = this._uvs.length + parseInt(o[1]), _ = this._normals.length + parseInt(o[2]);+      this._setData({+        indicePositionFromObj: l,+        indiceUvsFromObj: h,+        indiceNormalFromObj: _,+        positionVectorFromOBJ: this._positions[l],+        textureVectorFromOBJ: this._uvs[h],+        normalsVectorFromOBJ: this._normals[_],+        positionColorsFromOBJ: this._getColor(l)+      });+    }+    this._triangles.length = 0;+  }+  _addPreviousObjMesh() {+    this._meshesFromObj.length > 0 && (this._handledMesh = this._meshesFromObj[this._meshesFromObj.length - 1], this._unwrapData(), this._loadingOptions.useLegacyBehavior && this._indicesForBabylon.reverse(), this._handledMesh.indices = this._indicesForBabylon.slice(), this._handledMesh.positions = this._unwrappedPositionsForBabylon.slice(), this._unwrappedNormalsForBabylon.length && (this._handledMesh.normals = this._unwrappedNormalsForBabylon.slice()), this._unwrappedUVForBabylon.length && (this._handledMesh.uvs = this._unwrappedUVForBabylon.slice()), this._unwrappedColorsForBabylon.length && (this._handledMesh.colors = this._unwrappedColorsForBabylon.slice()), this._handledMesh.hasLines = this._hasLineData, this._indicesForBabylon.length = 0, this._unwrappedPositionsForBabylon.length = 0, this._unwrappedColorsForBabylon.length = 0, this._unwrappedNormalsForBabylon.length = 0, this._unwrappedUVForBabylon.length = 0, this._hasLineData = !1);+  }+  _optimizeNormals(t) {+    const n = t.getVerticesData(B.PositionKind), i = t.getVerticesData(B.NormalKind), o = {};+    if (!n || !i)+      return;+    for (let h = 0; h < n.length / 3; h++) {+      const _ = n[h * 3 + 0], a = n[h * 3 + 1], u = n[h * 3 + 2], r = _ + "_" + a + "_" + u;+      let s = o[r];+      s || (s = [], o[r] = s), s.push(h);+    }+    const l = new w();+    for (const h in o) {+      const _ = o[h];+      if (_.length < 2)+        continue;+      const a = _[0];+      for (let u = 1; u < _.length; ++u) {+        const r = _[u];+        i[a * 3 + 0] += i[r * 3 + 0], i[a * 3 + 1] += i[r * 3 + 1], i[a * 3 + 2] += i[r * 3 + 2];+      }+      l.copyFromFloats(i[a * 3 + 0], i[a * 3 + 1], i[a * 3 + 2]), l.normalize();+      for (let u = 0; u < _.length; ++u) {+        const r = _[u];+        i[r * 3 + 0] = l.x, i[r * 3 + 1] = l.y, i[r * 3 + 2] = l.z;+      }+    }+    t.setVerticesData(B.NormalKind, i);+  }+  static _IsLineElement(t) {+    return t.startsWith("l");+  }+  static _IsObjectElement(t) {+    return t.startsWith("o");+  }+  static _IsGroupElement(t) {+    return t.startsWith("g");+  }+  static _GetZbrushMRGB(t, n) {+    if (!t.startsWith("mrgb"))+      return null;+    if (t = t.replace("mrgb", "").trim(), n)+      return [];+    const i = /[a-z0-9]/g, o = t.match(i);+    if (!o || o.length % 8 !== 0)+      return [];+    const l = [];+    for (let h = 0; h < o.length / 8; h++) {+      const _ = o[h * 8 + 2] + o[h * 8 + 3], a = o[h * 8 + 4] + o[h * 8 + 5], u = o[h * 8 + 6] + o[h * 8 + 7];+      l.push(new M(parseInt(_, 16) / 255, parseInt(a, 16) / 255, parseInt(u, 16) / 255, 1));+    }+    return l;+  }+  /**+   * Function used to parse an OBJ string+   * @param meshesNames defines the list of meshes to load (all if not defined)+   * @param data defines the OBJ string+   * @param scene defines the hosting scene+   * @param assetContainer defines the asset container to load data in+   * @param onFileToLoadFound defines a callback that will be called if a MTL file is found+   */+  parse(t, n, i, o, l) {+    n = n.replace(/#MRGB/g, "mrgb"), n = n.replace(/#.*$/gm, "").trim(), this._loadingOptions.useLegacyBehavior ? (this._pushTriangle = (r, s) => this._triangles.push(r[0], r[s], r[s + 1]), this._handednessSign = 1) : i.useRightHandedSystem ? (this._pushTriangle = (r, s) => this._triangles.push(r[0], r[s + 1], r[s]), this._handednessSign = 1) : (this._pushTriangle = (r, s) => this._triangles.push(r[0], r[s], r[s + 1]), this._handednessSign = -1);+    const h = n.split(`+`), _ = [];+    let a = [];+    _.push(a);+    for (let r = 0; r < h.length; r++) {+      const s = h[r].trim().replace(/\s\s/g, " ");+      if (!(s.length === 0 || s.charAt(0) === "#"))+        if ((m._IsGroupElement(s) || m._IsObjectElement(s)) && (a = [], _.push(a)), m._IsLineElement(s)) {+          const e = s.split(" ");+          for (let p = 1; p < e.length - 1; p++)+            a.push(`l ${e[p]} ${e[p + 1]}`);+        } else+          a.push(s);+    }+    const u = _.flat();+    for (let r = 0; r < u.length; r++) {+      const s = u[r].trim().replace(/\s\s/g, " ");+      let e;+      if (!(s.length === 0 || s.charAt(0) === "#"))+        if (m.VertexPattern.test(s)) {+          if (e = s.match(/[^ ]+/g), this._positions.push(new w(parseFloat(e[1]), parseFloat(e[2]), parseFloat(e[3]))), this._loadingOptions.importVertexColors)+            if (e.length >= 7) {+              const p = parseFloat(e[4]), d = parseFloat(e[5]), F = parseFloat(e[6]);+              this._colors.push(new M(p > 1 ? p / 255 : p, d > 1 ? d / 255 : d, F > 1 ? F / 255 : F, e.length === 7 || e[7] === void 0 ? 1 : parseFloat(e[7])));+            } else+              this._colors.push(this._grayColor);+        } else if ((e = m.NormalPattern.exec(s)) !== null)+          this._normals.push(new w(parseFloat(e[1]), parseFloat(e[2]), parseFloat(e[3])));+        else if ((e = m.UVPattern.exec(s)) !== null)+          this._uvs.push(new V(parseFloat(e[1]) * this._loadingOptions.UVScaling.x, parseFloat(e[2]) * this._loadingOptions.UVScaling.y));+        else if ((e = m.FacePattern3.exec(s)) !== null)+          this._setDataForCurrentFaceWithPattern3(+            e[1].trim().split(" "),+            // ["1/1/1", "2/2/2", "3/3/3"]+            1+          );+        else if ((e = m.FacePattern4.exec(s)) !== null)+          this._setDataForCurrentFaceWithPattern4(+            e[1].trim().split(" "),+            // ["1//1", "2//2", "3//3"]+            1+          );+        else if ((e = m.FacePattern5.exec(s)) !== null)+          this._setDataForCurrentFaceWithPattern5(+            e[1].trim().split(" "),+            // ["-1/-1/-1", "-2/-2/-2", "-3/-3/-3"]+            1+          );+        else if ((e = m.FacePattern2.exec(s)) !== null)+          this._setDataForCurrentFaceWithPattern2(+            e[1].trim().split(" "),+            // ["1/1", "2/2", "3/3"]+            1+          );+        else if ((e = m.FacePattern1.exec(s)) !== null)+          this._setDataForCurrentFaceWithPattern1(+            e[1].trim().split(" "),+            // ["1", "2", "3"]+            1+          );+        else if ((e = m.LinePattern1.exec(s)) !== null)+          this._setDataForCurrentFaceWithPattern1(+            e[1].trim().split(" "),+            // ["1", "2"]+            0+          ), this._hasLineData = !0;+        else if ((e = m.LinePattern2.exec(s)) !== null)+          this._setDataForCurrentFaceWithPattern2(+            e[1].trim().split(" "),+            // ["1/1", "2/2"]+            0+          ), this._hasLineData = !0;+        else if (e = m._GetZbrushMRGB(s, !this._loadingOptions.importVertexColors))+          for (const p of e)+            this._extColors.push(p);+        else if ((e = m.LinePattern3.exec(s)) !== null)+          this._setDataForCurrentFaceWithPattern3(+            e[1].trim().split(" "),+            // ["1/1/1", "2/2/2"]+            0+          ), this._hasLineData = !0;+        else if (m.GroupDescriptor.test(s) || m.ObjectDescriptor.test(s)) {+          const p = {+            name: s.substring(2).trim(),+            //Set the name of the current obj mesh+            indices: null,+            positions: null,+            normals: null,+            uvs: null,+            colors: null,+            materialName: this._materialNameFromObj,+            isObject: m.ObjectDescriptor.test(s)+          };+          this._addPreviousObjMesh(), this._meshesFromObj.push(p), this._hasMeshes = !0, this._isFirstMaterial = !0, this._increment = 1;+        } else if (m.UseMtlDescriptor.test(s)) {+          if (this._materialNameFromObj = s.substring(7).trim(), !this._isFirstMaterial || !this._hasMeshes) {+            this._addPreviousObjMesh();+            const p = (+              //Set the name of the current obj mesh+              {+                name: (this._objMeshName || "mesh") + "_mm" + this._increment.toString(),+                //Set the name of the current obj mesh+                indices: null,+                positions: null,+                normals: null,+                uvs: null,+                colors: null,+                materialName: this._materialNameFromObj,+                isObject: !1+              }+            );+            this._increment++, this._meshesFromObj.push(p), this._hasMeshes = !0;+          }+          this._hasMeshes && this._isFirstMaterial && (this._meshesFromObj[this._meshesFromObj.length - 1].materialName = this._materialNameFromObj, this._isFirstMaterial = !1);+        } else m.MtlLibGroupDescriptor.test(s) ? l(s.substring(7).trim()) : m.SmoothDescriptor.test(s) || L.Log("Unhandled expression at line : " + s);+    }+    if (this._hasMeshes && (this._handledMesh = this._meshesFromObj[this._meshesFromObj.length - 1], this._loadingOptions.useLegacyBehavior && this._indicesForBabylon.reverse(), this._unwrapData(), this._handledMesh.indices = this._indicesForBabylon, this._handledMesh.positions = this._unwrappedPositionsForBabylon, this._unwrappedNormalsForBabylon.length && (this._handledMesh.normals = this._unwrappedNormalsForBabylon), this._unwrappedUVForBabylon.length && (this._handledMesh.uvs = this._unwrappedUVForBabylon), this._unwrappedColorsForBabylon.length && (this._handledMesh.colors = this._unwrappedColorsForBabylon), this._handledMesh.hasLines = this._hasLineData), !this._hasMeshes) {+      let r = null;+      if (this._indicesForBabylon.length)+        this._loadingOptions.useLegacyBehavior && this._indicesForBabylon.reverse(), this._unwrapData();+      else {+        for (const s of this._positions)+          this._unwrappedPositionsForBabylon.push(s.x, s.y, s.z);+        if (this._normals.length)+          for (const s of this._normals)+            this._unwrappedNormalsForBabylon.push(s.x, s.y, s.z);+        if (this._uvs.length)+          for (const s of this._uvs)+            this._unwrappedUVForBabylon.push(s.x, s.y);+        if (this._extColors.length)+          for (const s of this._extColors)+            this._unwrappedColorsForBabylon.push(s.r, s.g, s.b, s.a);+        else if (this._colors.length)+          for (const s of this._colors)+            this._unwrappedColorsForBabylon.push(s.r, s.g, s.b, s.a);+        this._materialNameFromObj || (r = new T(P.RandomId(), i), r.pointsCloud = !0, this._materialNameFromObj = r.name, this._normals.length || (r.disableLighting = !0, r.emissiveColor = b.White()));+      }+      this._meshesFromObj.push({+        name: P.RandomId(),+        indices: this._indicesForBabylon,+        positions: this._unwrappedPositionsForBabylon,+        colors: this._unwrappedColorsForBabylon,+        normals: this._unwrappedNormalsForBabylon,+        uvs: this._unwrappedUVForBabylon,+        materialName: this._materialNameFromObj,+        directMaterial: r,+        isObject: !0,+        hasLines: this._hasLineData+      });+    }+    for (let r = 0; r < this._meshesFromObj.length; r++) {+      if (t && this._meshesFromObj[r].name) {+        if (t instanceof Array) {+          if (t.indexOf(this._meshesFromObj[r].name) === -1)+            continue;+        } else if (this._meshesFromObj[r].name !== t)+          continue;+      }+      this._handledMesh = this._meshesFromObj[r], i._blockEntityCollection = !!o;+      const s = new v(this._meshesFromObj[r].name, i);+      if (s._parentContainer = o, i._blockEntityCollection = !1, this._handledMesh._babylonMesh = s, !this._handledMesh.isObject) {+        for (let p = r - 1; p >= 0; --p)+          if (this._meshesFromObj[p].isObject && this._meshesFromObj[p]._babylonMesh) {+            s.parent = this._meshesFromObj[p]._babylonMesh;+            break;+          }+      }+      if (this._materialToUse.push(this._meshesFromObj[r].materialName), this._handledMesh.hasLines && (s._internalMetadata ?? (s._internalMetadata = {}), s._internalMetadata._isLine = !0), this._handledMesh.positions?.length === 0) {+        this._babylonMeshesArray.push(s);+        continue;+      }+      const e = new E();+      if (e.indices = this._handledMesh.indices, e.positions = this._handledMesh.positions, this._loadingOptions.computeNormals || !this._handledMesh.normals) {+        const p = new Array();+        E.ComputeNormals(this._handledMesh.positions, this._handledMesh.indices, p), e.normals = p;+      } else+        e.normals = this._handledMesh.normals;+      this._handledMesh.uvs && (e.uvs = this._handledMesh.uvs), this._handledMesh.colors && (e.colors = this._handledMesh.colors), e.applyToMesh(s), this._loadingOptions.invertY && (s.scaling.y *= -1), this._loadingOptions.optimizeNormals && this._optimizeNormals(s), this._babylonMeshesArray.push(s), this._handledMesh.directMaterial && (s.material = this._handledMesh.directMaterial);+    }+  }+}+m.ObjectDescriptor = /^o/;+m.GroupDescriptor = /^g/;+m.MtlLibGroupDescriptor = /^mtllib /;+m.UseMtlDescriptor = /^usemtl /;+m.SmoothDescriptor = /^s /;+m.VertexPattern = /^v(\s+[\d|.|+|\-|e|E]+){3,7}/;+m.NormalPattern = /^vn(\s+[\d|.|+|\-|e|E]+)( +[\d|.|+|\-|e|E]+)( +[\d|.|+|\-|e|E]+)/;+m.UVPattern = /^vt(\s+[\d|.|+|\-|e|E]+)( +[\d|.|+|\-|e|E]+)/;+m.FacePattern1 = /^f\s+(([\d]{1,}[\s]?){3,})+/;+m.FacePattern2 = /^f\s+((([\d]{1,}\/[\d]{1,}[\s]?){3,})+)/;+m.FacePattern3 = /^f\s+((([\d]{1,}\/[\d]{1,}\/[\d]{1,}[\s]?){3,})+)/;+m.FacePattern4 = /^f\s+((([\d]{1,}\/\/[\d]{1,}[\s]?){3,})+)/;+m.FacePattern5 = /^f\s+(((-[\d]{1,}\/-[\d]{1,}\/-[\d]{1,}[\s]?){3,})+)/;+m.LinePattern1 = /^l\s+(([\d]{1,}[\s]?){2,})+/;+m.LinePattern2 = /^l\s+((([\d]{1,}\/[\d]{1,}[\s]?){2,})+)/;+m.LinePattern3 = /^l\s+((([\d]{1,}\/[\d]{1,}\/[\d]{1,}[\s]?){2,})+)/;+class c {+  /**+   * Invert Y-Axis of referenced textures on load+   */+  static get INVERT_TEXTURE_Y() {+    return f.INVERT_TEXTURE_Y;+  }+  static set INVERT_TEXTURE_Y(t) {+    f.INVERT_TEXTURE_Y = t;+  }+  /**+   * Creates loader for .OBJ files+   *+   * @param loadingOptions options for loading and parsing OBJ/MTL files.+   */+  constructor(t) {+    this.name = x.name, this.extensions = x.extensions, this._assetContainer = null, this._loadingOptions = { ...c._DefaultLoadingOptions, ...t ?? {} };+  }+  static get _DefaultLoadingOptions() {+    return {+      computeNormals: c.COMPUTE_NORMALS,+      optimizeNormals: c.OPTIMIZE_NORMALS,+      importVertexColors: c.IMPORT_VERTEX_COLORS,+      invertY: c.INVERT_Y,+      invertTextureY: c.INVERT_TEXTURE_Y,+      // eslint-disable-next-line @typescript-eslint/naming-convention+      UVScaling: c.UV_SCALING,+      materialLoadingFailsSilently: c.MATERIAL_LOADING_FAILS_SILENTLY,+      optimizeWithUV: c.OPTIMIZE_WITH_UV,+      skipMaterials: c.SKIP_MATERIALS,+      useLegacyBehavior: c.USE_LEGACY_BEHAVIOR+    };+  }+  /**+   * Calls synchronously the MTL file attached to this obj.+   * Load function or importMesh function don't enable to load 2 files in the same time asynchronously.+   * Without this function materials are not displayed in the first frame (but displayed after).+   * In consequence it is impossible to get material information in your HTML file+   *+   * @param url The URL of the MTL file+   * @param rootUrl defines where to load data from+   * @param onSuccess Callback function to be called when the MTL file is loaded+   * @param onFailure+   */+  _loadMTL(t, n, i, o) {+    const l = n + t;+    C.LoadFile(l, i, void 0, void 0, !1, (h, _) => {+      o(l, _);+    });+  }+  /** @internal */+  createPlugin(t) {+    return new c(t[x.name]);+  }+  /**+   * If the data string can be loaded directly.+   * @returns if the data can be loaded directly+   */+  canDirectLoad() {+    return !1;+  }+  /**+   * Imports one or more meshes from the loaded OBJ data and adds them to the scene+   * @param meshesNames a string or array of strings of the mesh names that should be loaded from the file+   * @param scene the scene the meshes should be added to+   * @param data the OBJ data to load+   * @param rootUrl root url to load from+   * @returns a promise containing the loaded meshes, particles, skeletons and animations+   */+  // eslint-disable-next-line @typescript-eslint/promise-function-async, no-restricted-syntax+  importMeshAsync(t, n, i, o) {+    return this._parseSolidAsync(t, n, i, o).then((l) => ({+      meshes: l,+      particleSystems: [],+      skeletons: [],+      animationGroups: [],+      transformNodes: [],+      geometries: [],+      lights: [],+      spriteManagers: []+    }));+  }+  /**+   * Imports all objects from the loaded OBJ data and adds them to the scene+   * @param scene the scene the objects should be added to+   * @param data the OBJ data to load+   * @param rootUrl root url to load from+   * @returns a promise which completes when objects have been loaded to the scene+   */+  // eslint-disable-next-line no-restricted-syntax+  loadAsync(t, n, i) {+    return this.importMeshAsync(null, t, n, i).then(() => {+    });+  }+  /**+   * Load into an asset container.+   * @param scene The scene to load into+   * @param data The data to import+   * @param rootUrl The root url for scene and resources+   * @returns The loaded asset container+   */+  // eslint-disable-next-line @typescript-eslint/promise-function-async, no-restricted-syntax+  loadAssetContainerAsync(t, n, i) {+    const o = new D(t);+    return this._assetContainer = o, this.importMeshAsync(null, t, n, i).then((l) => (l.meshes.forEach((h) => o.meshes.push(h)), l.meshes.forEach((h) => {+      const _ = h.material;+      _ && o.materials.indexOf(_) == -1 && (o.materials.push(_), _.getActiveTextures().forEach((u) => {+        o.textures.indexOf(u) == -1 && o.textures.push(u);+      }));+    }), this._assetContainer = null, o)).catch((l) => {+      throw this._assetContainer = null, l;+    });+  }+  /**+   * Read the OBJ file and create an Array of meshes.+   * Each mesh contains all information given by the OBJ and the MTL file.+   * i.e. vertices positions and indices, optional normals values, optional UV values, optional material+   * @param meshesNames defines a string or array of strings of the mesh names that should be loaded from the file+   * @param scene defines the scene where are displayed the data+   * @param data defines the content of the obj file+   * @param rootUrl defines the path to the folder+   * @returns the list of loaded meshes+   */+  // eslint-disable-next-line @typescript-eslint/promise-function-async, no-restricted-syntax+  _parseSolidAsync(t, n, i, o) {+    let l = "";+    const h = new f(), _ = [], a = [];+    i = i.replace(/#.*$/gm, "").trim(), new m(_, a, this._loadingOptions).parse(t, i, n, this._assetContainer, (s) => {+      l = s;+    });+    const r = [];+    return l !== "" && !this._loadingOptions.skipMaterials && r.push(new Promise((s, e) => {+      this._loadMTL(l, o, (p) => {+        try {+          h.parseMTL(n, p, o, this._assetContainer);+          for (let d = 0; d < h.materials.length; d++) {+            let F = 0;+            const g = [];+            let y;+            for (; (y = _.indexOf(h.materials[d].name, F)) > -1; )+              g.push(y), F = y + 1;+            if (y === -1 && g.length === 0)+              h.materials[d].dispose();+            else+              for (let O = 0; O < g.length; O++) {+                const I = a[g[O]], N = h.materials[d];+                I.material = N, I.getTotalIndices() || (N.pointsCloud = !0);+              }+          }+          s();+        } catch (d) {+          C.Warn(`Error processing MTL file: '${l}'`), this._loadingOptions.materialLoadingFailsSilently ? s() : e(d);+        }+      }, (p, d) => {+        C.Warn(`Error downloading MTL file: '${l}'`), this._loadingOptions.materialLoadingFailsSilently ? s() : e(d);+      });+    })), Promise.all(r).then(() => {+      const s = (e) => !!(e._internalMetadata?._isLine ?? !1);+      return a.forEach((e) => {+        if (s(e)) {+          let p = e.material ?? new T(e.name + "_line", n);+          p.getBindedMeshes().filter((F) => !s(F)).length > 0 && (p = p.clone(p.name + "_line") ?? p), p.wireframe = !0, e.material = p, e._internalMetadata && (e._internalMetadata._isLine = void 0);+        }+      }), a;+    });+  }+}+c.OPTIMIZE_WITH_UV = !0;+c.INVERT_Y = !1;+c.IMPORT_VERTEX_COLORS = !1;+c.COMPUTE_NORMALS = !1;+c.OPTIMIZE_NORMALS = !1;+c.UV_SCALING = new V(1, 1);+c.SKIP_MATERIALS = !1;+c.MATERIAL_LOADING_FAILS_SILENTLY = !0;+c.USE_LEGACY_BEHAVIOR = !1;+A(new c());+export {+  c as OBJFileLoader+};
vendor/adom-step/vendor/3d-viewer-dist/chunk-CxjklEwO.jsadded+5
@@ -0,0 +1,5 @@+import { bW as e } from "./chunk-IERganv1.js";+const r = "lod3DPixelShader", o = `precision highp float;precision highp sampler3D;const float GammaEncodePowerApprox=1.0/2.2;varying vec2 vUV;uniform sampler3D textureSampler;uniform float lod;uniform float slice;uniform int gamma;void main(void)+{ivec3 textureCoordinates=ivec3(vUV*vec2(textureSize(textureSampler,0).xy),int(slice));gl_FragColor=texelFetch(textureSampler,textureCoordinates,int(lod));if (gamma==0) {gl_FragColor.rgb=pow(gl_FragColor.rgb,vec3(GammaEncodePowerApprox));}}+`;+e.ShadersStore[r] || (e.ShadersStore[r] = o);
vendor/adom-step/vendor/3d-viewer-dist/chunk-D41qXL6t.jsadded+13355
@@ -0,0 +1,41022 @@+import { av as J4, aw as $1 } from "./chunk-CODtpsMq.js";+import { cg as x9, a1 as qt, a6 as mo, ch as hn, _ as q, e as H, R as kr, H as Lr, V as Se, bH as Oh, a3 as zh, bg as Ir, u as Eo, ci as yb, a8 as md, ao as K4, T as Wr, d as Is, cj as Ih, i as nr, ak as $4, ck as Kg, cl as ew, bF as C4, x as Jr, cm as A9, cn as C9, co as M9, cp as k9, cq as L9, cr as S9, cs as tw, ai as Mu, j as fi, ct as Wi, aA as xu, cu as eS, bW as br, h as Cb, s as tS, cv as rS, f as ku, g as j9, P as uc, F as Gr, o as Yt, cc as fc, v as hc, ag as Mb, cw as B9, n as vd, E as _d, ca as wd, p as yd, a_ as yu, bD as sl, cx as lw, cy as xb, bQ as ow, cz as N9, cA as I9, cB as z9, bE as D9, cC as M4, cD as T9, cE as E9, Q as wu, cF as k4, cG as oS, cH as _b, aq as L4, bR as jh, b1 as P9, aF as O9 } from "./chunk-IERganv1.js";+import { AdvancedDynamicTextureInstrumentation as R9 } from "./chunk-DbGn2Kk9.js";+function F9($e, i) {+  for (var d = 0; d < i.length; d++) {+    const g = i[d];+    if (typeof g != "string" && !Array.isArray(g)) {+      for (const y in g)+        if (y !== "default" && !(y in $e)) {+          const M = Object.getOwnPropertyDescriptor(g, y);+          M && Object.defineProperty($e, y, M.get ? M : {+            enumerable: !0,+            get: () => g[y]+          });+        }+    }+  }+  return Object.freeze(Object.defineProperty($e, Symbol.toStringTag, { value: "Module" }));+}+var iS = { exports: {} };+const q9 = /* @__PURE__ */ J4(x9);+class St {+  /**+   * Creates a new ValueAndUnit+   * @param value defines the value to store+   * @param unit defines the unit to store - defaults to ValueAndUnit.UNITMODE_PIXEL+   * @param negativeValueAllowed defines a boolean indicating if the value can be negative+   */+  constructor(i, d = St.UNITMODE_PIXEL, g = !0) {+    this.negativeValueAllowed = g, this._value = 1, this._unit = St.UNITMODE_PIXEL, this.ignoreAdaptiveScaling = !1, this.onChangedObservable = new qt(), this._value = i, this._unit = d, this._originalUnit = d;+  }+  /** Gets a boolean indicating if the value is a percentage */+  get isPercentage() {+    return this._unit === St.UNITMODE_PERCENTAGE;+  }+  /** Gets a boolean indicating if the value is store as pixel */+  get isPixel() {+    return this._unit === St.UNITMODE_PIXEL;+  }+  /**+   * Gets value (without units)+   * @deprecated use value property instead+   */+  get internalValue() {+    return this._value;+  }+  /** Gets value (without units) */+  get value() {+    return this._value;+  }+  /** Sets value (without units) */+  set value(i) {+    i !== this._value && (this._value = i, this.onChangedObservable.notifyObservers());+  }+  /** Gets units (without value) */+  get unit() {+    return this._unit;+  }+  /** Sets units (without value) */+  set unit(i) {+    i !== this._unit && (this._unit = i, this.onChangedObservable.notifyObservers());+  }+  /**+   * Gets value as pixel+   * @param host defines the root host+   * @param refValue defines the reference value for percentages+   * @returns the value as pixel+   */+  getValueInPixel(i, d) {+    return this.isPixel ? this.getValue(i) : this.getValue(i) * d;+  }+  /**+   * Update the current value and unit.+   * @param value defines the value to store+   * @param unit defines the unit to store+   * @returns the current ValueAndUnit+   */+  updateInPlace(i, d = St.UNITMODE_PIXEL) {+    return (this.value !== i || this.unit !== d) && (this._value = i, this._unit = d, this.onChangedObservable.notifyObservers()), this;+  }+  /**+   * Gets the value accordingly to its unit+   * @param host  defines the root host+   * @returns the value+   */+  getValue(i) {+    if (i && !this.ignoreAdaptiveScaling && this.unit !== St.UNITMODE_PERCENTAGE) {+      let d = 0, g = 0;+      if (i.idealWidth && (d = Math.ceil(this._value * i.getSize().width / i.idealWidth)), i.idealHeight && (g = Math.ceil(this._value * i.getSize().height / i.idealHeight)), i.useSmallestIdeal && i.idealWidth && i.idealHeight)+        return window.innerWidth < window.innerHeight ? d : g;+      if (i.idealWidth)+        return d;+      if (i.idealHeight)+        return g;+    }+    return this._value;+  }+  /**+   * Gets a string representation of the value+   * @param host defines the root host+   * @param decimals defines an optional number of decimals to display+   * @returns a string+   */+  toString(i, d) {+    switch (this._unit) {+      case St.UNITMODE_PERCENTAGE: {+        const g = this.getValue(i) * 100;+        return (d ? g.toFixed(d) : g) + "%";+      }+      case St.UNITMODE_PIXEL: {+        const g = this.getValue(i);+        return (d ? g.toFixed(d) : g) + "px";+      }+    }+    return this._unit.toString();+  }+  /**+   * Store a value parsed from a string+   * @param source defines the source string+   * @returns true if the value was successfully parsed and updated+   */+  fromString(i) {+    const d = St._Regex.exec(i.toString());+    if (!d || d.length === 0)+      return !1;+    let g = parseFloat(d[1]), y = this._originalUnit;+    if (this.negativeValueAllowed || g < 0 && (g = 0), d.length === 4)+      switch (d[3]) {+        case "px":+          y = St.UNITMODE_PIXEL;+          break;+        case "%":+          y = St.UNITMODE_PERCENTAGE, g /= 100;+          break;+      }+    return g === this._value && y === this._unit ? !1 : (this._value = g, this._unit = y, this.onChangedObservable.notifyObservers(), !0);+  }+  /** UNITMODE_PERCENTAGE */+  static get UNITMODE_PERCENTAGE() {+    return St._UNITMODE_PERCENTAGE;+  }+  /** UNITMODE_PIXEL */+  static get UNITMODE_PIXEL() {+    return St._UNITMODE_PIXEL;+  }+}+St._Regex = /(^-?\d*(\.\d+)?)(%|px)?/;+St._UNITMODE_PERCENTAGE = 0;+St._UNITMODE_PIXEL = 1;+const Bh = [new mo(0, 0), new mo(0, 0), new mo(0, 0), new mo(0, 0)], Jg = [new mo(0, 0), new mo(0, 0), new mo(0, 0), new mo(0, 0)], dc = new mo(0, 0), _u = new mo(0, 0);+class Ko {+  /**+   * Creates a new measure+   * @param left defines left coordinate+   * @param top defines top coordinate+   * @param width defines width dimension+   * @param height defines height dimension+   */+  constructor(i, d, g, y) {+    this.left = i, this.top = d, this.width = g, this.height = y;+  }+  /**+   * Copy from another measure+   * @param other defines the other measure to copy from+   */+  copyFrom(i) {+    this.left = i.left, this.top = i.top, this.width = i.width, this.height = i.height;+  }+  /**+   * Copy from a group of 4 floats+   * @param left defines left coordinate+   * @param top defines top coordinate+   * @param width defines width dimension+   * @param height defines height dimension+   */+  copyFromFloats(i, d, g, y) {+    this.left = i, this.top = d, this.width = g, this.height = y;+  }+  /**+   * Computes the axis aligned bounding box measure for two given measures+   * @param a Input measure+   * @param b Input measure+   * @param result the resulting bounding measure+   */+  static CombineToRef(i, d, g) {+    const y = Math.min(i.left, d.left), M = Math.min(i.top, d.top), N = Math.max(i.left + i.width, d.left + d.width), O = Math.max(i.top + i.height, d.top + d.height);+    g.left = y, g.top = M, g.width = N - y, g.height = O - M;+  }+  /**+   * Computes the axis aligned bounding box of the measure after it is modified by a given transform+   * @param transform the matrix to transform the measure before computing the AABB+   * @param addX number to add to left+   * @param addY number to add to top+   * @param addWidth number to add to width+   * @param addHeight number to add to height+   * @param result the resulting AABB+   */+  addAndTransformToRef(i, d, g, y, M, N) {+    const O = this.left + d, F = this.top + g, ne = this.width + y, $ = this.height + M;+    Bh[0].copyFromFloats(O, F), Bh[1].copyFromFloats(O + ne, F), Bh[2].copyFromFloats(O + ne, F + $), Bh[3].copyFromFloats(O, F + $), dc.copyFromFloats(Number.MAX_VALUE, Number.MAX_VALUE), _u.copyFromFloats(0, 0);+    for (let Q = 0; Q < 4; Q++)+      i.transformCoordinates(Bh[Q].x, Bh[Q].y, Jg[Q]), dc.x = Math.floor(Math.min(dc.x, Jg[Q].x)), dc.y = Math.floor(Math.min(dc.y, Jg[Q].y)), _u.x = Math.ceil(Math.max(_u.x, Jg[Q].x)), _u.y = Math.ceil(Math.max(_u.y, Jg[Q].y));+    N.left = dc.x, N.top = dc.y, N.width = _u.x - dc.x, N.height = _u.y - dc.y;+  }+  /**+   * Computes the axis aligned bounding box of the measure after it is modified by a given transform+   * @param transform the matrix to transform the measure before computing the AABB+   * @param result the resulting AABB+   */+  transformToRef(i, d) {+    this.addAndTransformToRef(i, 0, 0, 0, 0, d);+  }+  /**+   * Check equality between this measure and another one+   * @param other defines the other measures+   * @returns true if both measures are equals+   */+  isEqualsTo(i) {+    return !(this.left !== i.left || this.top !== i.top || this.width !== i.width || this.height !== i.height);+  }+  /**+   * Creates an empty measure+   * @returns a new measure+   */+  static Empty() {+    return new Ko(0, 0, 0, 0);+  }+}+class Nh extends mo {+  /**+   * Creates a new Vector2WithInfo+   * @param source defines the vector2 data to transport+   * @param buttonIndex defines the current mouse button index+   */+  constructor(i, d = 0) {+    super(i.x, i.y), this.buttonIndex = d;+  }+}+class pr {+  /**+   * Creates a new matrix+   * @param m00 defines value for (0, 0)+   * @param m01 defines value for (0, 1)+   * @param m10 defines value for (1, 0)+   * @param m11 defines value for (1, 1)+   * @param m20 defines value for (2, 0)+   * @param m21 defines value for (2, 1)+   */+  constructor(i, d, g, y, M, N) {+    this.m = new Float32Array(6), this.fromValues(i, d, g, y, M, N);+  }+  /**+   * Fills the matrix from direct values+   * @param m00 defines value for (0, 0)+   * @param m01 defines value for (0, 1)+   * @param m10 defines value for (1, 0)+   * @param m11 defines value for (1, 1)+   * @param m20 defines value for (2, 0)+   * @param m21 defines value for (2, 1)+   * @returns the current modified matrix+   */+  fromValues(i, d, g, y, M, N) {+    return this.m[0] = i, this.m[1] = d, this.m[2] = g, this.m[3] = y, this.m[4] = M, this.m[5] = N, this;+  }+  /**+   * Gets matrix determinant+   * @returns the determinant+   */+  determinant() {+    return this.m[0] * this.m[3] - this.m[1] * this.m[2];+  }+  /**+   * Inverses the matrix and stores it in a target matrix+   * @param result defines the target matrix+   * @returns the current matrix+   */+  invertToRef(i) {+    const d = this.m[0], g = this.m[1], y = this.m[2], M = this.m[3], N = this.m[4], O = this.m[5], F = this.determinant();+    if (F < hn * hn)+      return i.m[0] = 0, i.m[1] = 0, i.m[2] = 0, i.m[3] = 0, i.m[4] = 0, i.m[5] = 0, this;+    const ne = 1 / F, $ = y * O - M * N, Q = g * N - d * O;+    return i.m[0] = M * ne, i.m[1] = -g * ne, i.m[2] = -y * ne, i.m[3] = d * ne, i.m[4] = $ * ne, i.m[5] = Q * ne, this;+  }+  /**+   * Multiplies the current matrix with another one+   * @param other defines the second operand+   * @param result defines the target matrix+   * @returns the current matrix+   */+  multiplyToRef(i, d) {+    const g = this.m[0], y = this.m[1], M = this.m[2], N = this.m[3], O = this.m[4], F = this.m[5], ne = i.m[0], $ = i.m[1], Q = i.m[2], X = i.m[3], he = i.m[4], Me = i.m[5];+    return d.m[0] = g * ne + y * Q, d.m[1] = g * $ + y * X, d.m[2] = M * ne + N * Q, d.m[3] = M * $ + N * X, d.m[4] = O * ne + F * Q + he, d.m[5] = O * $ + F * X + Me, this;+  }+  /**+   * Applies the current matrix to a set of 2 floats and stores the result in a vector2+   * @param x defines the x coordinate to transform+   * @param y defines the x coordinate to transform+   * @param result defines the target vector2+   * @returns the current matrix+   */+  transformCoordinates(i, d, g) {+    return g.x = i * this.m[0] + d * this.m[2] + this.m[4], g.y = i * this.m[1] + d * this.m[3] + this.m[5], this;+  }+  // Statics+  /**+   * Creates an identity matrix+   * @returns a new matrix+   */+  static Identity() {+    return new pr(1, 0, 0, 1, 0, 0);+  }+  /**+   * Creates an identity matrix and stores it in a target matrix+   * @param result defines the target matrix+   */+  static IdentityToRef(i) {+    i.m[0] = 1, i.m[1] = 0, i.m[2] = 0, i.m[3] = 1, i.m[4] = 0, i.m[5] = 0;+  }+  /**+   * Creates a translation matrix and stores it in a target matrix+   * @param x defines the x coordinate of the translation+   * @param y defines the y coordinate of the translation+   * @param result defines the target matrix+   */+  static TranslationToRef(i, d, g) {+    g.fromValues(1, 0, 0, 1, i, d);+  }+  /**+   * Creates a scaling matrix and stores it in a target matrix+   * @param x defines the x coordinate of the scaling+   * @param y defines the y coordinate of the scaling+   * @param result defines the target matrix+   */+  static ScalingToRef(i, d, g) {+    g.fromValues(i, 0, 0, d, 0, 0);+  }+  /**+   * Creates a rotation matrix and stores it in a target matrix+   * @param angle defines the rotation angle+   * @param result defines the target matrix+   */+  static RotationToRef(i, d) {+    const g = Math.sin(i), y = Math.cos(i);+    d.fromValues(y, g, -g, y, 0, 0);+  }+  /**+   * Composes a matrix from translation, rotation, scaling and parent matrix and stores it in a target matrix+   * @param tx defines the x coordinate of the translation+   * @param ty defines the y coordinate of the translation+   * @param angle defines the rotation angle+   * @param scaleX defines the x coordinate of the scaling+   * @param scaleY defines the y coordinate of the scaling+   * @param parentMatrix defines the parent matrix to multiply by (can be null)+   * @param result defines the target matrix+   */+  static ComposeToRef(i, d, g, y, M, N, O) {+    pr.TranslationToRef(i, d, pr._TempPreTranslationMatrix), pr.ScalingToRef(y, M, pr._TempScalingMatrix), pr.RotationToRef(g, pr._TempRotationMatrix), pr.TranslationToRef(-i, -d, pr._TempPostTranslationMatrix), pr._TempPreTranslationMatrix.multiplyToRef(pr._TempScalingMatrix, pr._TempCompose0), pr._TempCompose0.multiplyToRef(pr._TempRotationMatrix, pr._TempCompose1), N ? (pr._TempCompose1.multiplyToRef(pr._TempPostTranslationMatrix, pr._TempCompose2), pr._TempCompose2.multiplyToRef(N, O)) : pr._TempCompose1.multiplyToRef(pr._TempPostTranslationMatrix, O);+  }+}+pr._TempPreTranslationMatrix = pr.Identity();+pr._TempPostTranslationMatrix = pr.Identity();+pr._TempRotationMatrix = pr.Identity();+pr._TempScalingMatrix = pr.Identity();+pr._TempCompose0 = pr.Identity();+pr._TempCompose1 = pr.Identity();+pr._TempCompose2 = pr.Identity();+class kb {+  /**+   * Rounds a number to the nearest multiple of a given precision+   * @param value the value to be rounded+   * @param precision the multiple to which the value will be rounded. Default is 100 (2 decimal digits)+   * @returns+   */+  static Round(i, d = kb.DefaultRoundingPrecision) {+    return Math.round(i * d) / d;+  }+}+kb.DefaultRoundingPrecision = 100;+class pe {+  /**+   * Gets or sets a boolean indicating if the control is readonly (default: false).+   * A readonly control will still raise pointer events but will not react to them+   */+  get isReadOnly() {+    return this._isReadOnly;+  }+  set isReadOnly(i) {+    this._isReadOnly = i;+  }+  /**+   * Gets the transformed measure, that is the bounding box of the control after applying all transformations+   */+  get transformedMeasure() {+    return this._evaluatedMeasure;+  }+  /**+   * Sets/Gets a boolean indicating if the children are clipped to the current control bounds.+   * Please note that not clipping children may generate issues with adt.useInvalidateRectOptimization so it is recommended to turn this optimization off if you want to use unclipped children+   */+  set clipChildren(i) {+    this._clipChildren = i;+  }+  get clipChildren() {+    return this._clipChildren;+  }+  /**+   * Sets/Gets a boolean indicating that control content must be clipped+   * Please note that not clipping content may generate issues with adt.useInvalidateRectOptimization so it is recommended to turn this optimization off if you want to use unclipped children+   */+  set clipContent(i) {+    this._clipContent = i;+  }+  get clipContent() {+    return this._clipContent;+  }+  /** Gets or sets a value indicating the offset in pixels to apply on X axis to render the shadow */+  get shadowOffsetX() {+    return this._shadowOffsetX;+  }+  set shadowOffsetX(i) {+    this._shadowOffsetX !== i && (this._shadowOffsetX = i, this._markAsDirty());+  }+  /** Gets or sets a value indicating the offset in pixels to apply on Y axis to render the shadow */+  get shadowOffsetY() {+    return this._shadowOffsetY;+  }+  set shadowOffsetY(i) {+    this._shadowOffsetY !== i && (this._shadowOffsetY = i, this._markAsDirty());+  }+  /** Gets or sets a value indicating the amount of blur to use to render the shadow */+  get shadowBlur() {+    return this._shadowBlur;+  }+  set shadowBlur(i) {+    this._shadowBlur !== i && (this._previousShadowBlur = this._shadowBlur, this._shadowBlur = i, this._markAsDirty());+  }+  /** Gets or sets a value indicating the color of the shadow (black by default ie. "#000") */+  get shadowColor() {+    return this._shadowColor;+  }+  set shadowColor(i) {+    this._shadowColor !== i && (this._shadowColor = i, this._markAsDirty());+  }+  // Properties+  /** Gets the control type name */+  get typeName() {+    return this._getTypeName();+  }+  /**+   * Get the current class name of the control.+   * @returns current class name+   */+  getClassName() {+    return this._getTypeName();+  }+  /**+   * Gets or sets the accessibility tag to describe the control for accessibility purpose.+   * By default, GUI controls already indicate accessibility info, but one can override the info using this tag.+   */+  set accessibilityTag(i) {+    this._accessibilityTag = i, this.onAccessibilityTagChangedObservable.notifyObservers(i);+  }+  get accessibilityTag() {+    return this._accessibilityTag;+  }+  /**+   * Get the hosting AdvancedDynamicTexture+   */+  get host() {+    return this._host;+  }+  /** Gets or set information about font offsets (used to render and align text) */+  get fontOffset() {+    return this._fontOffset;+  }+  set fontOffset(i) {+    this._fontOffset = i;+  }+  /** Gets or sets alpha value for the control (1 means opaque and 0 means entirely transparent) */+  get alpha() {+    return this._alpha;+  }+  set alpha(i) {+    this._alpha !== i && (this._alphaSet = !0, this._alpha = i, this._markAsDirty());+  }+  /**+   * Gets or sets a number indicating size of stroke we want to highlight the control with (mostly for debugging purpose)+   */+  get highlightLineWidth() {+    return this._highlightLineWidth;+  }+  set highlightLineWidth(i) {+    this._highlightLineWidth !== i && (this._highlightLineWidth = i, this._markAsDirty());+  }+  /**+   * Gets or sets a boolean indicating that we want to highlight the control (mostly for debugging purpose)+   */+  get isHighlighted() {+    return this._isHighlighted;+  }+  set isHighlighted(i) {+    this._isHighlighted !== i && (this._isHighlighted = i, this._markAsDirty());+  }+  /**+   * Gets or sets a string defining the color to use for highlighting this control+   */+  get highlightColor() {+    return this._highlightColor;+  }+  set highlightColor(i) {+    this._highlightColor !== i && (this._highlightColor = i, this._markAsDirty());+  }+  /** Gets or sets a value indicating the scale factor on X axis (1 by default)+   * @see https://doc.babylonjs.com/features/featuresDeepDive/gui/gui#rotation-and-scaling+   */+  get scaleX() {+    return this._scaleX;+  }+  set scaleX(i) {+    this._scaleX !== i && (this._scaleX = i, this._markAsDirty(), this._markMatrixAsDirty());+  }+  /** Gets or sets a value indicating the scale factor on Y axis (1 by default)+   * @see https://doc.babylonjs.com/features/featuresDeepDive/gui/gui#rotation-and-scaling+   */+  get scaleY() {+    return this._scaleY;+  }+  set scaleY(i) {+    this._scaleY !== i && (this._scaleY = i, this._markAsDirty(), this._markMatrixAsDirty());+  }+  /** Gets or sets the rotation angle (0 by default)+   * @see https://doc.babylonjs.com/features/featuresDeepDive/gui/gui#rotation-and-scaling+   */+  get rotation() {+    return this._rotation;+  }+  set rotation(i) {+    this._rotation !== i && (this._rotation = i, this._markAsDirty(), this._markMatrixAsDirty());+  }+  /** Gets or sets the transformation center on Y axis (0 by default)+   * @see https://doc.babylonjs.com/features/featuresDeepDive/gui/gui#rotation-and-scaling+   */+  get transformCenterY() {+    return this._transformCenterY;+  }+  set transformCenterY(i) {+    this._transformCenterY !== i && (this._transformCenterY = i, this._markAsDirty(), this._markMatrixAsDirty());+  }+  /** Gets or sets the transformation center on X axis (0 by default)+   * @see https://doc.babylonjs.com/features/featuresDeepDive/gui/gui#rotation-and-scaling+   */+  get transformCenterX() {+    return this._transformCenterX;+  }+  set transformCenterX(i) {+    this._transformCenterX !== i && (this._transformCenterX = i, this._markAsDirty(), this._markMatrixAsDirty());+  }+  /**+   * Gets or sets the horizontal alignment+   * @see https://doc.babylonjs.com/features/featuresDeepDive/gui/gui#alignments+   */+  get horizontalAlignment() {+    return this._horizontalAlignment;+  }+  set horizontalAlignment(i) {+    this._horizontalAlignment !== i && (this._horizontalAlignment = i, this._markAsDirty());+  }+  /**+   * Gets or sets the vertical alignment+   * @see https://doc.babylonjs.com/features/featuresDeepDive/gui/gui#alignments+   */+  get verticalAlignment() {+    return this._verticalAlignment;+  }+  set verticalAlignment(i) {+    this._verticalAlignment !== i && (this._verticalAlignment = i, this._markAsDirty());+  }+  set fixedRatio(i) {+    this._fixedRatio !== i && (this._fixedRatio = i, this._markAsDirty());+  }+  /**+   * Gets or sets a fixed ratio for this control.+   * When different from 0, the ratio is used to compute the "second" dimension.+   * The first dimension used in the computation is the last one set (by setting width / widthInPixels or height / heightInPixels), and the+   * second dimension is computed as first dimension * fixedRatio+   */+  get fixedRatio() {+    return this._fixedRatio;+  }+  set fixedRatioMasterIsWidth(i) {+    this._fixedRatioMasterIsWidth !== i && (this._fixedRatioMasterIsWidth = i, this._markAsDirty());+  }+  /**+   * Gets or sets a boolean indicating that the fixed ratio is set on the width instead of the height. True by default.+   * When the height of a control is set, this property is changed to false.+   */+  get fixedRatioMasterIsWidth() {+    return this._fixedRatioMasterIsWidth;+  }+  /**+   * Gets or sets control width+   * @see https://doc.babylonjs.com/features/featuresDeepDive/gui/gui#position-and-size+   */+  get width() {+    return this._width.toString(this._host);+  }+  set width(i) {+    this._fixedRatioMasterIsWidth = !0, this._width.toString(this._host) !== i && this._width.fromString(i) && this._markAsDirty();+  }+  /**+   * Gets or sets the control width in pixel+   * @see https://doc.babylonjs.com/features/featuresDeepDive/gui/gui#position-and-size+   */+  get widthInPixels() {+    return this._width.getValueInPixel(this._host, this._cachedParentMeasure.width);+  }+  set widthInPixels(i) {+    isNaN(i) || (this._fixedRatioMasterIsWidth = !0, this.width = i + "px");+  }+  /**+   * Gets or sets control height+   * @see https://doc.babylonjs.com/features/featuresDeepDive/gui/gui#position-and-size+   */+  get height() {+    return this._height.toString(this._host);+  }+  set height(i) {+    this._fixedRatioMasterIsWidth = !1, this._height.toString(this._host) !== i && this._height.fromString(i) && this._markAsDirty();+  }+  /**+   * Gets or sets control height in pixel+   * @see https://doc.babylonjs.com/features/featuresDeepDive/gui/gui#position-and-size+   */+  get heightInPixels() {+    return this._height.getValueInPixel(this._host, this._cachedParentMeasure.height);+  }+  set heightInPixels(i) {+    isNaN(i) || (this._fixedRatioMasterIsWidth = !1, this.height = i + "px");+  }+  /** Gets or set font family */+  get fontFamily() {+    return this._fontFamily;+  }+  set fontFamily(i) {+    this._fontFamily !== i && (this._fontFamily = i, this._resetFontCache());+  }+  /** Gets or sets font style */+  get fontStyle() {+    return this._fontStyle;+  }+  set fontStyle(i) {+    this._fontStyle !== i && (this._fontStyle = i, this._resetFontCache());+  }+  /** Gets or sets font weight */+  get fontWeight() {+    return this._fontWeight;+  }+  set fontWeight(i) {+    this._fontWeight !== i && (this._fontWeight = i, this._resetFontCache());+  }+  /**+   * Gets or sets style+   * @see https://doc.babylonjs.com/features/featuresDeepDive/gui/gui#styles+   */+  get style() {+    return this._style;+  }+  set style(i) {+    this._style && (this._style.onChangedObservable.remove(this._styleObserver), this._styleObserver = null), this._style = i, this._style && (this._styleObserver = this._style.onChangedObservable.add(() => {+      this._markAsDirty(), this._resetFontCache();+    })), this._markAsDirty(), this._resetFontCache();+  }+  /** @internal */+  get _isFontSizeInPercentage() {+    return this._fontSize.isPercentage;+  }+  /** Gets or sets font size in pixels */+  get fontSizeInPixels() {+    const i = this._style ? this._style._fontSize : this._fontSize;+    return i.isPixel ? i.getValue(this._host) : i.getValueInPixel(this._host, this._tempParentMeasure.height || this._cachedParentMeasure.height);+  }+  set fontSizeInPixels(i) {+    isNaN(i) || (this.fontSize = i + "px");+  }+  /** Gets or sets font size */+  get fontSize() {+    return this._fontSize.toString(this._host);+  }+  set fontSize(i) {+    this._fontSize.toString(this._host) !== i && this._fontSize.fromString(i) && (this._markAsDirty(), this._resetFontCache());+  }+  /** Gets or sets foreground color */+  get color() {+    return this._color;+  }+  set color(i) {+    this._color !== i && (this._color = i, this._markAsDirty());+  }+  /** Gets or sets gradient. Setting a gradient will override the color */+  get gradient() {+    return this._gradient;+  }+  set gradient(i) {+    this._gradient !== i && (this._gradient = i, this._markAsDirty());+  }+  /** Gets or sets z index which is used to reorder controls on the z axis */+  get zIndex() {+    return this._zIndex;+  }+  set zIndex(i) {+    this.zIndex !== i && (this._zIndex = i, this.parent && this.parent._reOrderControl(this));+  }+  /** Gets or sets a boolean indicating if the control can be rendered */+  get notRenderable() {+    return this._doNotRender;+  }+  set notRenderable(i) {+    this._doNotRender !== i && (this._doNotRender = i, this._markAsDirty());+  }+  /** Gets or sets a boolean indicating if the control is visible */+  get isVisible() {+    return this._isVisible;+  }+  set isVisible(i) {+    this._isVisible !== i && (this._isVisible = i, this._markAsDirty(!0), this.onIsVisibleChangedObservable.notifyObservers(i));+  }+  /** Gets a boolean indicating that the control needs to update its rendering */+  get isDirty() {+    return this._isDirty;+  }+  /**+   * Gets the current linked mesh (or null if none)+   */+  get linkedMesh() {+    return this._linkedMesh;+  }+  /**+   * Gets or sets a value indicating the padding should work like in CSS.+   * Basically, it will add the padding amount on each side of the parent control for its children.+   */+  get descendantsOnlyPadding() {+    return this._descendantsOnlyPadding;+  }+  set descendantsOnlyPadding(i) {+    this._descendantsOnlyPadding !== i && (this._descendantsOnlyPadding = i, this._markAsDirty());+  }+  /**+   * Gets or sets a value indicating the padding to use on the left of the control+   * @see https://doc.babylonjs.com/features/featuresDeepDive/gui/gui#position-and-size+   */+  get paddingLeft() {+    return this._paddingLeft.toString(this._host);+  }+  set paddingLeft(i) {+    this._paddingLeft.fromString(i) && this._markAsDirty();+  }+  /**+   * Gets or sets a value indicating the padding in pixels to use on the left of the control+   * @see https://doc.babylonjs.com/features/featuresDeepDive/gui/gui#position-and-size+   */+  get paddingLeftInPixels() {+    return this._paddingLeft.getValueInPixel(this._host, this._cachedParentMeasure.width);+  }+  set paddingLeftInPixels(i) {+    isNaN(i) || (this.paddingLeft = i + "px");+  }+  /** @internal */+  get _paddingLeftInPixels() {+    return this._descendantsOnlyPadding ? 0 : this.paddingLeftInPixels;+  }+  /**+   * Gets or sets a value indicating the padding to use on the right of the control+   * @see https://doc.babylonjs.com/features/featuresDeepDive/gui/gui#position-and-size+   */+  get paddingRight() {+    return this._paddingRight.toString(this._host);+  }+  set paddingRight(i) {+    this._paddingRight.fromString(i) && this._markAsDirty();+  }+  /**+   * Gets or sets a value indicating the padding in pixels to use on the right of the control+   * @see https://doc.babylonjs.com/features/featuresDeepDive/gui/gui#position-and-size+   */+  get paddingRightInPixels() {+    return this._paddingRight.getValueInPixel(this._host, this._cachedParentMeasure.width);+  }+  set paddingRightInPixels(i) {+    isNaN(i) || (this.paddingRight = i + "px");+  }+  /** @internal */+  get _paddingRightInPixels() {+    return this._descendantsOnlyPadding ? 0 : this.paddingRightInPixels;+  }+  /**+   * Gets or sets a value indicating the padding to use on the top of the control+   * @see https://doc.babylonjs.com/features/featuresDeepDive/gui/gui#position-and-size+   */+  get paddingTop() {+    return this._paddingTop.toString(this._host);+  }+  set paddingTop(i) {+    this._paddingTop.fromString(i) && this._markAsDirty();+  }+  /**+   * Gets or sets a value indicating the padding in pixels to use on the top of the control+   * @see https://doc.babylonjs.com/features/featuresDeepDive/gui/gui#position-and-size+   */+  get paddingTopInPixels() {+    return this._paddingTop.getValueInPixel(this._host, this._cachedParentMeasure.height);+  }+  set paddingTopInPixels(i) {+    isNaN(i) || (this.paddingTop = i + "px");+  }+  /** @internal */+  get _paddingTopInPixels() {+    return this._descendantsOnlyPadding ? 0 : this.paddingTopInPixels;+  }+  /**+   * Gets or sets a value indicating the padding to use on the bottom of the control+   * @see https://doc.babylonjs.com/features/featuresDeepDive/gui/gui#position-and-size+   */+  get paddingBottom() {+    return this._paddingBottom.toString(this._host);+  }+  set paddingBottom(i) {+    this._paddingBottom.fromString(i) && this._markAsDirty();+  }+  /**+   * Gets or sets a value indicating the padding in pixels to use on the bottom of the control+   * @see https://doc.babylonjs.com/features/featuresDeepDive/gui/gui#position-and-size+   */+  get paddingBottomInPixels() {+    return this._paddingBottom.getValueInPixel(this._host, this._cachedParentMeasure.height);+  }+  set paddingBottomInPixels(i) {+    isNaN(i) || (this.paddingBottom = i + "px");+  }+  /** @internal */+  get _paddingBottomInPixels() {+    return this._descendantsOnlyPadding ? 0 : this.paddingBottomInPixels;+  }+  /**+   * Gets or sets a value indicating the left coordinate of the control+   * @see https://doc.babylonjs.com/features/featuresDeepDive/gui/gui#position-and-size+   */+  get left() {+    return this._left.toString(this._host);+  }+  set left(i) {+    this._left.fromString(i) && this._markAsDirty();+  }+  /**+   * Gets or sets a value indicating the left coordinate in pixels of the control+   * @see https://doc.babylonjs.com/features/featuresDeepDive/gui/gui#position-and-size+   */+  get leftInPixels() {+    return this._left.getValueInPixel(this._host, this._cachedParentMeasure.width);+  }+  set leftInPixels(i) {+    isNaN(i) || (this.left = i + "px");+  }+  /**+   * Gets or sets a value indicating the top coordinate of the control+   * @see https://doc.babylonjs.com/features/featuresDeepDive/gui/gui#position-and-size+   */+  get top() {+    return this._top.toString(this._host);+  }+  set top(i) {+    this._top.fromString(i) && this._markAsDirty();+  }+  /**+   * Gets or sets a value indicating the top coordinate in pixels of the control+   * @see https://doc.babylonjs.com/features/featuresDeepDive/gui/gui#position-and-size+   */+  get topInPixels() {+    return this._top.getValueInPixel(this._host, this._cachedParentMeasure.height);+  }+  set topInPixels(i) {+    isNaN(i) || (this.top = i + "px");+  }+  /**+   * Gets or sets a value indicating the offset on X axis to the linked mesh+   * @see https://doc.babylonjs.com/features/featuresDeepDive/gui/gui#tracking-positions+   */+  get linkOffsetX() {+    return this._linkOffsetX.toString(this._host);+  }+  set linkOffsetX(i) {+    this._linkOffsetX.fromString(i) && this._markAsDirty();+  }+  /**+   * Gets or sets a value indicating the offset in pixels on X axis to the linked mesh+   * @see https://doc.babylonjs.com/features/featuresDeepDive/gui/gui#tracking-positions+   */+  get linkOffsetXInPixels() {+    return this._linkOffsetX.getValueInPixel(this._host, this._cachedParentMeasure.width);+  }+  set linkOffsetXInPixels(i) {+    isNaN(i) || (this.linkOffsetX = i + "px");+  }+  /**+   * Gets or sets a value indicating the offset on Y axis to the linked mesh+   * @see https://doc.babylonjs.com/features/featuresDeepDive/gui/gui#tracking-positions+   */+  get linkOffsetY() {+    return this._linkOffsetY.toString(this._host);+  }+  set linkOffsetY(i) {+    this._linkOffsetY.fromString(i) && this._markAsDirty();+  }+  /**+   * Gets or sets a value indicating the offset in pixels on Y axis to the linked mesh+   * @see https://doc.babylonjs.com/features/featuresDeepDive/gui/gui#tracking-positions+   */+  get linkOffsetYInPixels() {+    return this._linkOffsetY.getValueInPixel(this._host, this._cachedParentMeasure.height);+  }+  set linkOffsetYInPixels(i) {+    isNaN(i) || (this.linkOffsetY = i + "px");+  }+  /** Gets the center coordinate on X axis */+  get centerX() {+    return this._currentMeasure.left + this._currentMeasure.width / 2;+  }+  /** Gets the center coordinate on Y axis */+  get centerY() {+    return this._currentMeasure.top + this._currentMeasure.height / 2;+  }+  /** Gets or sets if control is Enabled */+  get isEnabled() {+    return this._isEnabled;+  }+  set isEnabled(i) {+    if (this._isEnabled === i)+      return;+    this._isEnabled = i, this._markAsDirty();+    const d = (g) => {+      if (g.host) {+        for (const y in g.host._lastControlOver)+          g === this.host._lastControlOver[y] && (g._onPointerOut(g, null, !0), delete g.host._lastControlOver[y]);+        if (g.children !== void 0)+          for (const y of g.children)+            d(y);+      }+    };+    d(this), this.onEnabledStateChangedObservable.notifyObservers(i);+  }+  /** Gets or sets background color of control if it's disabled. Only applies to Button class. */+  get disabledColor() {+    return this._disabledColor;+  }+  set disabledColor(i) {+    this._disabledColor !== i && (this._disabledColor = i, this._markAsDirty());+  }+  /** Gets or sets front color of control if it's disabled. Only applies to Checkbox class. */+  get disabledColorItem() {+    return this._disabledColorItem;+  }+  set disabledColorItem(i) {+    this._disabledColorItem !== i && (this._disabledColorItem = i, this._markAsDirty());+  }+  /**+   * Border color when control is focused+   * When not defined the ADT color will be used. If no ADT color is defined, focused state won't have any border+   */+  get focusedColor() {+    return this._focusedColor;+  }+  set focusedColor(i) {+    this._focusedColor = i;+  }+  /** @internal */+  onBlur() {+    this._isFocused && (this._isFocused = !1, this.focusedColor && this._unfocusedColor != null && (this.color = this._unfocusedColor), this.onBlurObservable.notifyObservers(this));+  }+  /** @internal */+  onFocus() {+    this._isFocused = !0, this.focusedColor && (this._unfocusedColor = this.color, this.color = this.focusedColor), this.onFocusObservable.notifyObservers(this);+  }+  /**+   * Function called to get the list of controls that should not steal the focus from this control+   * @returns an array of controls+   */+  keepsFocusWith() {+    return null;+  }+  /**+   * Function to focus a button programmatically+   */+  focus() {+    this._host.moveFocusToControl(this);+  }+  /**+   * Function to unfocus a button programmatically+   */+  blur() {+    this._host.focusedControl = null;+  }+  /**+   * Handles the keyboard event+   * @param evt Defines the KeyboardEvent+   */+  processKeyboard(i) {+    i.key === "Enter" && this.onEnterPressedObservable.notifyObservers(this), this.onKeyboardEventProcessedObservable.notifyObservers(i, -1, this);+  }+  // Functions+  /**+   * Creates a new control+   * @param name defines the name of the control+   */+  constructor(i) {+    this.name = i, this._alpha = 1, this._alphaSet = !1, this._zIndex = 0, this._currentMeasure = Ko.Empty(), this._tempPaddingMeasure = Ko.Empty(), this._fontFamily = "", this._fontStyle = "", this._fontWeight = "", this._fontSize = new St(18, St.UNITMODE_PIXEL, !1), this._width = new St(1, St.UNITMODE_PERCENTAGE, !1), this._height = new St(1, St.UNITMODE_PERCENTAGE, !1), this._color = "", this._style = null, this._horizontalAlignment = pe.HORIZONTAL_ALIGNMENT_CENTER, this._verticalAlignment = pe.VERTICAL_ALIGNMENT_CENTER, this._isDirty = !0, this._wasDirty = !1, this._tempParentMeasure = Ko.Empty(), this._prevCurrentMeasureTransformedIntoGlobalSpace = Ko.Empty(), this._cachedParentMeasure = Ko.Empty(), this._descendantsOnlyPadding = !1, this._paddingLeft = new St(0), this._paddingRight = new St(0), this._paddingTop = new St(0), this._paddingBottom = new St(0), this._left = new St(0), this._top = new St(0), this._scaleX = 1, this._scaleY = 1, this._rotation = 0, this._transformCenterX = 0.5, this._transformCenterY = 0.5, this._transformMatrix = pr.Identity(), this._invertTransformMatrix = pr.Identity(), this._transformedPosition = mo.Zero(), this._isMatrixDirty = !0, this._isVisible = !0, this._isHighlighted = !1, this._highlightColor = "#4affff", this._highlightLineWidth = 2, this._fontSet = !1, this._dummyVector2 = mo.Zero(), this._downCount = 0, this._enterCount = -1, this._doNotRender = !1, this._downPointerIds = {}, this._evaluatedMeasure = new Ko(0, 0, 0, 0), this._evaluatedParentMeasure = new Ko(0, 0, 0, 0), this._isEnabled = !0, this._disabledColor = "#9a9a9a", this._disabledColorItem = "#6a6a6a", this._isReadOnly = !1, this._gradient = null, this._rebuildLayout = !1, this.onEnabledStateChangedObservable = new qt(), this._customData = {}, this._isClipped = !1, this._automaticSize = !1, this.metadata = null, this.isHitTestVisible = !0, this.isPointerBlocker = !1, this.isFocusInvisible = !1, this._clipChildren = !0, this._clipContent = !0, this.useBitmapCache = !1, this._shadowOffsetX = 0, this._shadowOffsetY = 0, this._shadowBlur = 0, this._previousShadowBlur = 0, this._shadowColor = "black", this.hoverCursor = "", this._linkOffsetX = new St(0), this._linkOffsetY = new St(0), this._accessibilityTag = null, this.onAccessibilityTagChangedObservable = new qt(), this.onWheelObservable = new qt(), this.onPointerMoveObservable = new qt(), this.onPointerOutObservable = new qt(), this.onPointerDownObservable = new qt(), this.onPointerUpObservable = new qt(), this.onPointerClickObservable = new qt(), this.onEnterPressedObservable = new qt(), this.onPointerEnterObservable = new qt(), this.onDirtyObservable = new qt(), this.onBeforeDrawObservable = new qt(), this.onAfterDrawObservable = new qt(), this.onDisposeObservable = new qt(), this.onIsVisibleChangedObservable = new qt(), this.isSerializable = !0, this._fixedRatio = 0, this._fixedRatioMasterIsWidth = !0, this.animations = null, this._focusedColor = null, this.tabIndex = -1, this._isFocused = !1, this._unfocusedColor = null, this.onFocusObservable = new qt(), this.onBlurObservable = new qt(), this.onKeyboardEventProcessedObservable = new qt(), this._tmpMeasureA = new Ko(0, 0, 0, 0);+  }+  /** @internal */+  _getTypeName() {+    return "Control";+  }+  /**+   * Gets the first ascendant in the hierarchy of the given type+   * @param className defines the required type+   * @returns the ascendant or null if not found+   */+  getAscendantOfClass(i) {+    return this.parent ? this.parent.getClassName() === i ? this.parent : this.parent.getAscendantOfClass(i) : null;+  }+  /**+   * Mark control element as dirty+   * @param force force non visible elements to be marked too+   */+  markAsDirty(i = !1) {+    this._markAsDirty(i);+  }+  /**+   * Mark the element and its children as dirty+   */+  markAllAsDirty() {+    this._markAllAsDirty();+  }+  /** @internal */+  _resetFontCache() {+    this._fontSet = !0, this._markAsDirty();+  }+  /**+   * Determines if a container is an ascendant of the current control+   * @param container defines the container to look for+   * @returns true if the container is one of the ascendant of the control+   */+  isAscendant(i) {+    return this.parent ? this.parent === i ? !0 : this.parent.isAscendant(i) : !1;+  }+  /**+   * Gets coordinates in local control space+   * @param globalCoordinates defines the coordinates to transform+   * @returns the new coordinates in local space+   */+  getLocalCoordinates(i) {+    const d = mo.Zero();+    return this.getLocalCoordinatesToRef(i, d), d;+  }+  /**+   * Gets coordinates in local control space+   * @param globalCoordinates defines the coordinates to transform+   * @param result defines the target vector2 where to store the result+   * @returns the current control+   */+  getLocalCoordinatesToRef(i, d) {+    return d.x = i.x - this._currentMeasure.left, d.y = i.y - this._currentMeasure.top, this;+  }+  /**+   * Gets coordinates in parent local control space+   * @param globalCoordinates defines the coordinates to transform+   * @returns the new coordinates in parent local space+   */+  getParentLocalCoordinates(i) {+    const d = mo.Zero();+    return d.x = i.x - this._cachedParentMeasure.left, d.y = i.y - this._cachedParentMeasure.top, d;+  }+  /**+   * Move the current control to a vector3 position projected onto the screen.+   * @param position defines the target position+   * @param scene defines the hosting scene+   */+  moveToVector3(i, d) {+    if (!this._host || this.parent !== this._host._rootContainer) {+      Lr.Error("Cannot move a control to a vector3 if the control is not at root level");+      return;+    }+    this.horizontalAlignment = pe.HORIZONTAL_ALIGNMENT_LEFT, this.verticalAlignment = pe.VERTICAL_ALIGNMENT_TOP;+    const g = this._host._getGlobalViewport(), y = Se.Project(i, Oh.IdentityReadOnly, d.getTransformMatrix(), g);+    if (this._moveToProjectedPosition(y), y.z < 0 || y.z > 1) {+      this.notRenderable = !0;+      return;+    }+    this.notRenderable = !1;+  }+  /**+   * Will store all controls that have this control as ascendant in a given array+   * @param results defines the array where to store the descendants+   * @param directDescendantsOnly defines if true only direct descendants of 'this' will be considered, if false direct and also indirect (children of children, an so on in a recursive manner) descendants of 'this' will be considered+   * @param predicate defines an optional predicate that will be called on every evaluated child, the predicate must return true for a given child to be part of the result, otherwise it will be ignored+   */+  getDescendantsToRef(i, d = !1, g) {+  }+  /**+   * Will return all controls that have this control as ascendant+   * @param directDescendantsOnly defines if true only direct descendants of 'this' will be considered, if false direct and also indirect (children of children, an so on in a recursive manner) descendants of 'this' will be considered+   * @param predicate defines an optional predicate that will be called on every evaluated child, the predicate must return true for a given child to be part of the result, otherwise it will be ignored+   * @returns all child controls+   */+  getDescendants(i, d) {+    const g = [];+    return this.getDescendantsToRef(g, i, d), g;+  }+  /**+   * Link current control with a target mesh+   * @param mesh defines the mesh to link with+   * @see https://doc.babylonjs.com/features/featuresDeepDive/gui/gui#tracking-positions+   */+  linkWithMesh(i) {+    if (!this._host || this.parent && this.parent !== this._host._rootContainer) {+      i && Lr.Error("Cannot link a control to a mesh if the control is not at root level");+      return;+    }+    const d = this._host._linkedControls.indexOf(this);+    if (d !== -1) {+      this._linkedMesh = i, i || this._host._linkedControls.splice(d, 1);+      return;+    } else if (!i)+      return;+    this.horizontalAlignment = pe.HORIZONTAL_ALIGNMENT_LEFT, this.verticalAlignment = pe.VERTICAL_ALIGNMENT_TOP, this._linkedMesh = i, this._host._linkedControls.push(this);+  }+  /**+   * Shorthand function to set the top, right, bottom, and left padding values on the control.+   * @param { string | number} paddingTop - The value of the top padding.+   * @param { string | number} paddingRight - The value of the right padding. If omitted, top is used.+   * @param { string | number} paddingBottom - The value of the bottom padding. If omitted, top is used.+   * @param { string | number} paddingLeft - The value of the left padding. If omitted, right is used.+   * @see https://doc.babylonjs.com/features/featuresDeepDive/gui/gui#position-and-size+   */+  setPadding(i, d, g, y) {+    const M = i, N = d ?? M, O = g ?? M, F = y ?? N;+    this.paddingTop = M, this.paddingRight = N, this.paddingBottom = O, this.paddingLeft = F;+  }+  /**+   * Shorthand funtion to set the top, right, bottom, and left padding values in pixels on the control.+   * @param { number} paddingTop - The value in pixels of the top padding.+   * @param { number} paddingRight - The value in pixels of the right padding. If omitted, top is used.+   * @param { number} paddingBottom - The value in pixels of the bottom padding. If omitted, top is used.+   * @param { number} paddingLeft - The value in pixels of the left padding. If omitted, right is used.+   * @see https://doc.babylonjs.com/features/featuresDeepDive/gui/gui#position-and-size+   */+  setPaddingInPixels(i, d, g, y) {+    const M = i, N = d ?? M, O = g ?? M, F = y ?? N;+    this.paddingTopInPixels = M, this.paddingRightInPixels = N, this.paddingBottomInPixels = O, this.paddingLeftInPixels = F;+  }+  /**+   * @internal+   */+  _moveToProjectedPosition(i) {+    const d = this._left.getValue(this._host), g = this._top.getValue(this._host), y = this.parent?._currentMeasure;+    y && this._processMeasures(y, this._host.getContext());+    let M = i.x + this._linkOffsetX.getValue(this._host) - this._currentMeasure.width / 2, N = i.y + this._linkOffsetY.getValue(this._host) - this._currentMeasure.height / 2;+    this._left.ignoreAdaptiveScaling && this._top.ignoreAdaptiveScaling && (Math.abs(M - d) < 0.5 && (M = d), Math.abs(N - g) < 0.5 && (N = g)), !(d === M && g === N) && (this.left = M + "px", this.top = N + "px", this._left.ignoreAdaptiveScaling = !0, this._top.ignoreAdaptiveScaling = !0, this._markAsDirty());+  }+  /**+   * @internal+   */+  _offsetLeft(i) {+    this._isDirty = !0, this._currentMeasure.left += i;+  }+  /**+   * @internal+   */+  _offsetTop(i) {+    this._isDirty = !0, this._currentMeasure.top += i;+  }+  /** @internal */+  _markMatrixAsDirty() {+    this._isMatrixDirty = !0, this._flagDescendantsAsMatrixDirty();+  }+  /** @internal */+  _flagDescendantsAsMatrixDirty() {+  }+  /**+   * @internal+   */+  _intersectsRect(i, d) {+    return this._transform(d), !(this._evaluatedMeasure.left >= i.left + i.width || this._evaluatedMeasure.top >= i.top + i.height || this._evaluatedMeasure.left + this._evaluatedMeasure.width <= i.left || this._evaluatedMeasure.top + this._evaluatedMeasure.height <= i.top);+  }+  /** @internal */+  _computeAdditionalOffsetX() {+    return 0;+  }+  /** @internal */+  _computeAdditionalOffsetY() {+    return 0;+  }+  /** @internal */+  // eslint-disable-next-line @typescript-eslint/naming-convention+  invalidateRect() {+    if (this._transform(), this.host && this.host.useInvalidateRectOptimization) {+      this._currentMeasure.transformToRef(this._transformMatrix, this._tmpMeasureA), Ko.CombineToRef(this._tmpMeasureA, this._prevCurrentMeasureTransformedIntoGlobalSpace, this._tmpMeasureA);+      const i = this.shadowOffsetX * this._host.idealRatio, d = this.shadowOffsetY * this._host.idealRatio, g = Math.max(this._previousShadowBlur, this.shadowBlur), y = Math.min(Math.min(i, 0) - g * 2, 0), M = Math.max(Math.max(i, 0) + g * 2, 0), N = Math.min(Math.min(d, 0) - g * 2, 0), O = Math.max(Math.max(d, 0) + g * 2, 0), F = this._computeAdditionalOffsetX(), ne = this._computeAdditionalOffsetY();+      this.host.invalidateRect(Math.floor(this._tmpMeasureA.left + y - F), Math.floor(this._tmpMeasureA.top + N - ne), Math.ceil(this._tmpMeasureA.left + this._tmpMeasureA.width + M + F), Math.ceil(this._tmpMeasureA.top + this._tmpMeasureA.height + O + ne));+    }+  }+  /**+   * @internal+   */+  _markAsDirty(i = !1) {+    !this._isVisible && !i || (this._isDirty = !0, this._markMatrixAsDirty(), this._host && this._host.markAsDirty());+  }+  /** @internal */+  _markAllAsDirty() {+    this._markAsDirty(), this._font && this._prepareFont();+  }+  /**+   * @internal+   */+  _link(i) {+    this._host = i, this._host && (this.uniqueId = this._host.getScene().getUniqueId());+  }+  /**+   * @internal+   */+  _transform(i) {+    if (!this._isMatrixDirty && this._scaleX === 1 && this._scaleY === 1 && this._rotation === 0)+      return;+    const d = this._currentMeasure.width * this._transformCenterX + this._currentMeasure.left, g = this._currentMeasure.height * this._transformCenterY + this._currentMeasure.top;+    i && (i.translate(d, g), i.rotate(this._rotation), i.scale(this._scaleX, this._scaleY), i.translate(-d, -g)), (this._isMatrixDirty || this._cachedOffsetX !== d || this._cachedOffsetY !== g) && (this._cachedOffsetX = d, this._cachedOffsetY = g, this._isMatrixDirty = !1, this._flagDescendantsAsMatrixDirty(), pr.ComposeToRef(-d, -g, this._rotation, this._scaleX, this._scaleY, this.parent ? this.parent._transformMatrix : null, this._transformMatrix), this._transformMatrix.invertToRef(this._invertTransformMatrix), this._currentMeasure.transformToRef(this._transformMatrix, this._evaluatedMeasure));+  }+  /**+   * @internal+   */+  _renderHighlight(i) {+    this.isHighlighted && (i.save(), i.strokeStyle = this._highlightColor, i.lineWidth = this._highlightLineWidth, this._renderHighlightSpecific(i), i.restore());+  }+  /**+   * @internal+   */+  _renderHighlightSpecific(i) {+    i.strokeRect(this._currentMeasure.left, this._currentMeasure.top, this._currentMeasure.width, this._currentMeasure.height);+  }+  _getColor(i) {+    return this.gradient ? this.gradient.getCanvasGradient(i) : this.color;+  }+  /**+   * Applies the control's state to the provided context.  Important: unless this is a temporary context,+   * be sure to call context.save() before calling _applyStates() and later call context.restore() when+   * you are done using these state updates.+   * @internal+   */+  _applyStates(i) {+    this._isFontSizeInPercentage && (this._fontSet = !0), this._host && this._host.useSmallestIdeal && !this._font && (this._fontSet = !0), this._fontSet && (this._prepareFont(), this._fontSet = !1), this._font && (i.font = this._font), (this._color || this.gradient) && (i.fillStyle = this._getColor(i)), pe.AllowAlphaInheritance ? i.globalAlpha *= this._alpha : this._alphaSet && (i.globalAlpha = this.parent && !this.parent.renderToIntermediateTexture ? this.parent.alpha * this._alpha : this._alpha);+  }+  /**+   * @internal+   */+  _layout(i, d) {+    if (!this.isDirty && (!this.isVisible || this.notRenderable))+      return !1;+    if (this._isDirty || !this._cachedParentMeasure.isEqualsTo(i)) {+      this.host._numLayoutCalls++, this._currentMeasure.addAndTransformToRef(this._transformMatrix, -this._paddingLeftInPixels | 0, -this._paddingTopInPixels | 0, this._paddingRightInPixels | 0, this._paddingBottomInPixels | 0, this._prevCurrentMeasureTransformedIntoGlobalSpace), d.save();+      let g = 0;+      do+        this._rebuildLayout = !1, this._processMeasures(i, d), g++;+      while (this._rebuildLayout && g < 4);+      g >= 4 && zh.Error(`Layout cycle detected in GUI (Control name=${this.name}, uniqueId=${this.uniqueId})`), d.restore(), this.invalidateRect(), this._evaluateClippingState(i);+    }+    return this._wasDirty = this._isDirty, this._isDirty = !1, !0;+  }+  /**+   * @internal+   */+  _processMeasures(i, d) {+    d.save(), this._applyStates(d), this._tempPaddingMeasure.copyFrom(i), this.parent && this.parent.descendantsOnlyPadding && (this._tempPaddingMeasure.left += this.parent.paddingLeftInPixels, this._tempPaddingMeasure.top += this.parent.paddingTopInPixels, this._tempPaddingMeasure.width -= this.parent.paddingLeftInPixels + this.parent.paddingRightInPixels, this._tempPaddingMeasure.height -= this.parent.paddingTopInPixels + this.parent.paddingBottomInPixels), this._currentMeasure.copyFrom(this._tempPaddingMeasure), this._preMeasure(this._tempPaddingMeasure, d), this._measure(), this._postMeasure(this._tempPaddingMeasure, d), this._computeAlignment(this._tempPaddingMeasure, d), this._additionalProcessing(this._tempPaddingMeasure, d), this._cachedParentMeasure.copyFrom(this._tempPaddingMeasure), this._currentMeasure.transformToRef(this._transformMatrix, this._evaluatedMeasure), this.onDirtyObservable.hasObservers() && this.onDirtyObservable.notifyObservers(this), d.restore();+  }+  _evaluateClippingState(i) {+    if (this._transform(), this._currentMeasure.transformToRef(this._transformMatrix, this._evaluatedMeasure), this.parent && this.parent.clipChildren) {+      if (i.transformToRef(this.parent._transformMatrix, this._evaluatedParentMeasure), this._evaluatedMeasure.left > this._evaluatedParentMeasure.left + this._evaluatedParentMeasure.width) {+        this._isClipped = !0;+        return;+      }+      if (this._evaluatedMeasure.left + this._evaluatedMeasure.width < this._evaluatedParentMeasure.left) {+        this._isClipped = !0;+        return;+      }+      if (this._evaluatedMeasure.top > this._evaluatedParentMeasure.top + this._evaluatedParentMeasure.height) {+        this._isClipped = !0;+        return;+      }+      if (this._evaluatedMeasure.top + this._evaluatedMeasure.height < this._evaluatedParentMeasure.top) {+        this._isClipped = !0;+        return;+      }+    }+    this._isClipped = !1;+  }+  /** @internal */+  _measure() {+    this._width.isPixel ? this._currentMeasure.width = this._width.getValue(this._host) : this._currentMeasure.width *= this._width.getValue(this._host), this._height.isPixel ? this._currentMeasure.height = this._height.getValue(this._host) : this._currentMeasure.height *= this._height.getValue(this._host), this._fixedRatio !== 0 && (this._fixedRatioMasterIsWidth ? this._currentMeasure.height = this._currentMeasure.width * this._fixedRatio : this._currentMeasure.width = this._currentMeasure.height * this._fixedRatio);+  }+  /**+   * @internal+   */+  _computeAlignment(i, d) {+    const g = this._currentMeasure.width, y = this._currentMeasure.height, M = i.width, N = i.height;+    let O = 0, F = 0;+    switch (this.horizontalAlignment) {+      case pe.HORIZONTAL_ALIGNMENT_LEFT:+        O = 0;+        break;+      case pe.HORIZONTAL_ALIGNMENT_RIGHT:+        O = M - g;+        break;+      case pe.HORIZONTAL_ALIGNMENT_CENTER:+        O = (M - g) / 2;+        break;+    }+    switch (this.verticalAlignment) {+      case pe.VERTICAL_ALIGNMENT_TOP:+        F = 0;+        break;+      case pe.VERTICAL_ALIGNMENT_BOTTOM:+        F = N - y;+        break;+      case pe.VERTICAL_ALIGNMENT_CENTER:+        F = (N - y) / 2;+        break;+    }+    this.descendantsOnlyPadding || (this._paddingLeft.isPixel ? (this._currentMeasure.left += this._paddingLeft.getValue(this._host), this._currentMeasure.width -= this._paddingLeft.getValue(this._host)) : (this._currentMeasure.left += M * this._paddingLeft.getValue(this._host), this._currentMeasure.width -= M * this._paddingLeft.getValue(this._host)), this._paddingRight.isPixel ? this._currentMeasure.width -= this._paddingRight.getValue(this._host) : this._currentMeasure.width -= M * this._paddingRight.getValue(this._host), this._paddingTop.isPixel ? (this._currentMeasure.top += this._paddingTop.getValue(this._host), this._currentMeasure.height -= this._paddingTop.getValue(this._host)) : (this._currentMeasure.top += N * this._paddingTop.getValue(this._host), this._currentMeasure.height -= N * this._paddingTop.getValue(this._host)), this._paddingBottom.isPixel ? this._currentMeasure.height -= this._paddingBottom.getValue(this._host) : this._currentMeasure.height -= N * this._paddingBottom.getValue(this._host)), this._left.isPixel ? this._currentMeasure.left += this._left.getValue(this._host) : this._currentMeasure.left += M * this._left.getValue(this._host), this._top.isPixel ? this._currentMeasure.top += this._top.getValue(this._host) : this._currentMeasure.top += N * this._top.getValue(this._host), this._currentMeasure.left += O, this._currentMeasure.top += F;+  }+  /**+   * @internal+   */+  _preMeasure(i, d) {+  }+  /**+   * @internal+   */+  _postMeasure(i, d) {+  }+  /**+   * @internal+   */+  _additionalProcessing(i, d) {+  }+  /**+   * @internal+   */+  _clipForChildren(i) {+  }+  _clip(i, d) {+    if (i.beginPath(), pe._ClipMeasure.copyFrom(this._currentMeasure), d) {+      d.transformToRef(this._invertTransformMatrix, this._tmpMeasureA);+      const g = new Ko(0, 0, 0, 0);+      g.left = Math.max(this._tmpMeasureA.left, this._currentMeasure.left), g.top = Math.max(this._tmpMeasureA.top, this._currentMeasure.top), g.width = Math.min(this._tmpMeasureA.left + this._tmpMeasureA.width, this._currentMeasure.left + this._currentMeasure.width) - g.left, g.height = Math.min(this._tmpMeasureA.top + this._tmpMeasureA.height, this._currentMeasure.top + this._currentMeasure.height) - g.top, pe._ClipMeasure.copyFrom(g);+    }+    if (this.shadowBlur || this.shadowOffsetX || this.shadowOffsetY) {+      const g = this.shadowOffsetX * this._host.idealRatio, y = this.shadowOffsetY * this._host.idealRatio, M = this.shadowBlur, N = Math.min(Math.min(g, 0) - M * 2, 0), O = Math.max(Math.max(g, 0) + M * 2, 0), F = Math.min(Math.min(y, 0) - M * 2, 0), ne = Math.max(Math.max(y, 0) + M * 2, 0);+      i.rect(pe._ClipMeasure.left + N, pe._ClipMeasure.top + F, pe._ClipMeasure.width + O - N, pe._ClipMeasure.height + ne - F);+    } else+      i.rect(pe._ClipMeasure.left, pe._ClipMeasure.top, pe._ClipMeasure.width, pe._ClipMeasure.height);+    i.clip();+  }+  /**+   * @internal+   */+  _render(i, d) {+    return !this.isVisible || this.notRenderable || this._isClipped ? (this._isDirty = !1, !1) : (this.host._numRenderCalls++, i.save(), this._applyStates(i), this._transform(i), this.clipContent && this._clip(i, d), this.onBeforeDrawObservable.hasObservers() && this.onBeforeDrawObservable.notifyObservers(this), this.useBitmapCache && !this._wasDirty && this._cacheData ? i.putImageData(this._cacheData, this._currentMeasure.left, this._currentMeasure.top) : this._draw(i, d), this.useBitmapCache && this._wasDirty && (this._cacheData = i.getImageData(this._currentMeasure.left, this._currentMeasure.top, this._currentMeasure.width, this._currentMeasure.height)), this._renderHighlight(i), this.onAfterDrawObservable.hasObservers() && this.onAfterDrawObservable.notifyObservers(this), i.restore(), !0);+  }+  /**+   * @internal+   */+  _draw(i, d) {+  }+  /**+   * Tests if a given coordinates belong to the current control+   * @param x defines x coordinate to test+   * @param y defines y coordinate to test+   * @returns true if the coordinates are inside the control+   */+  contains(i, d) {+    return this._invertTransformMatrix.transformCoordinates(i, d, this._transformedPosition), i = this._transformedPosition.x, d = this._transformedPosition.y, i < this._currentMeasure.left || i > this._currentMeasure.left + this._currentMeasure.width || d < this._currentMeasure.top || d > this._currentMeasure.top + this._currentMeasure.height ? !1 : (this.isPointerBlocker && (this._host._shouldBlockPointer = !0), !0);+  }+  /**+   * @internal+   */+  _processPicking(i, d, g, y, M, N, O, F) {+    return !this._isEnabled || !this.isHitTestVisible || !this.isVisible || this._doNotRender || !this.contains(i, d) ? !1 : (this._processObservables(y, i, d, g, M, N, O, F), !0);+  }+  /**+   * @internal+   */+  _onPointerMove(i, d, g, y) {+    this.onPointerMoveObservable.notifyObservers(d, -1, i, this, y) && this.parent != null && !this.isPointerBlocker && this.parent._onPointerMove(i, d, g, y);+  }+  /**+   * @internal+   */+  _onPointerEnter(i, d) {+    return !this._isEnabled || this._enterCount > 0 ? !1 : (this._enterCount === -1 && (this._enterCount = 0), this._enterCount++, this.onPointerEnterObservable.notifyObservers(this, -1, i, this, d) && this.parent != null && !this.isPointerBlocker && this.parent._onPointerEnter(i, d), !0);+  }+  /**+   * @internal+   */+  _onPointerOut(i, d, g = !1) {+    if (!g && !this._isEnabled)+      return;+    this._enterCount = 0;+    let y = !0;+    i.isAscendant(this) || (y = this.onPointerOutObservable.notifyObservers(this, -1, i, this, d)), y && this.parent != null && !this.isPointerBlocker && this.parent._onPointerOut(i, d, g);+  }+  /**+   * @internal+   */+  _onPointerDown(i, d, g, y, M) {+    return this._onPointerEnter(this, M), this.tabIndex !== -1 && (this.host.focusedControl = this), this._downCount !== 0 ? !1 : (this._downCount++, this._downPointerIds[g] = !0, this.onPointerDownObservable.notifyObservers(new Nh(d, y), -1, i, this, M) && this.parent != null && !this.isPointerBlocker && this.parent._onPointerDown(i, d, g, y, M), M && this.uniqueId !== this._host.rootContainer.uniqueId && this._host._capturedPointerIds.add(M.event.pointerId), !0);+  }+  /**+   * @internal+   */+  _onPointerUp(i, d, g, y, M, N) {+    if (!this._isEnabled)+      return;+    this._downCount = 0, delete this._downPointerIds[g];+    let O = M;+    M && (this._enterCount > 0 || this._enterCount === -1) && (this._host.usePointerTapForClickEvent || (O = this.onPointerClickObservable.notifyObservers(new Nh(d, y), -1, i, this, N))), this.onPointerUpObservable.notifyObservers(new Nh(d, y), -1, i, this, N) && this.parent != null && !this.isPointerBlocker && this.parent._onPointerUp(i, d, g, y, O, N), N && this.uniqueId !== this._host.rootContainer.uniqueId && this._host._capturedPointerIds.delete(N.event.pointerId), this._host.usePointerTapForClickEvent && this.isPointerBlocker && (this._host._shouldBlockPointer = !1);+  }+  _onPointerPick(i, d, g, y, M, N) {+    if (!this._host.usePointerTapForClickEvent)+      return !1;+    let O = M;+    return M && (this._enterCount > 0 || this._enterCount === -1) && (O = this.onPointerClickObservable.notifyObservers(new Nh(d, y), -1, i, this, N)), this.onPointerUpObservable.notifyObservers(new Nh(d, y), -1, i, this, N) && this.parent != null && !this.isPointerBlocker && this.parent._onPointerPick(i, d, g, y, O, N), this._host.usePointerTapForClickEvent && this.isPointerBlocker && (this._host._shouldBlockPointer = !0), !0;+  }+  /**+   * @internal+   */+  _forcePointerUp(i = null) {+    if (i !== null)+      this._onPointerUp(this, mo.Zero(), i, 0, !0);+    else+      for (const d in this._downPointerIds)+        this._onPointerUp(this, mo.Zero(), +d, 0, !0);+  }+  /**+   * @internal+   */+  _onWheelScroll(i, d) {+    if (!this._isEnabled)+      return;+    this.onWheelObservable.notifyObservers(new mo(i, d)) && this.parent != null && this.parent._onWheelScroll(i, d);+  }+  /** @internal */+  _onCanvasBlur() {+  }+  /**+   * @internal+   */+  _processObservables(i, d, g, y, M, N, O, F) {+    if (!this._isEnabled)+      return !1;+    if (this._dummyVector2.copyFromFloats(d, g), i === Ir.POINTERMOVE) {+      this._onPointerMove(this, this._dummyVector2, M, y);+      const ne = this._host._lastControlOver[M];+      return ne && ne !== this && ne._onPointerOut(this, y), ne !== this && this._onPointerEnter(this, y), this._host._lastControlOver[M] = this, !0;+    } else {+      if (i === Ir.POINTERDOWN)+        return this._onPointerDown(this, this._dummyVector2, M, N, y), this._host._registerLastControlDown(this, M), this._host._lastPickedControl = this, !0;+      if (i === Ir.POINTERUP)+        return this._host._lastControlDown[M] && this._host._lastControlDown[M]._onPointerUp(this, this._dummyVector2, M, N, !0, y), this._host.usePointerTapForClickEvent || delete this._host._lastControlDown[M], !0;+      if (i === Ir.POINTERWHEEL) {+        if (this._host._lastControlOver[M])+          return this._host._lastControlOver[M]._onWheelScroll(O, F), !0;+      } else if (i === Ir.POINTERTAP)+        return this._host._lastControlDown[M] && this._host._lastControlDown[M]._onPointerPick(this, this._dummyVector2, M, N, !0, y), delete this._host._lastControlDown[M], !0;+    }+    return !1;+  }+  _getStyleProperty(i, d) {+    const g = (this._style && this._style[i]) ?? this[i];+    return !g && this.parent ? this.parent._getStyleProperty(i, d) : this.parent ? g : d;+  }+  _prepareFont() {+    if (!this._font && !this._fontSet)+      return;+    this._font = this._getStyleProperty("fontStyle", "") + " " + this._getStyleProperty("fontWeight", "") + " " + this.fontSizeInPixels + "px " + this._getStyleProperty("fontFamily", "Arial"), this._fontOffset = pe._GetFontOffset(this._font, this._host?.getScene()?.getEngine());+    const i = this.getDescendants();+    for (const d of i)+      d._markAllAsDirty();+  }+  /**+   * A control has a dimension fully defined if that dimension doesn't depend on the parent's dimension.+   * As an example, a control that has dimensions in pixels is fully defined, while in percentage is not fully defined.+   * @param dim the dimension to check (width or height)+   * @returns if the dimension is fully defined+   */+  isDimensionFullyDefined(i) {+    return this.getDimension(i).isPixel;+  }+  /**+   * Gets the dimension of the control along a specified axis+   * @param dim the dimension to retrieve (width or height)+   * @returns the dimension value along the specified axis+   */+  getDimension(i) {+    return i === "width" ? this._width : this._height;+  }+  /**+   * Clones a control and its descendants+   * @param host the texture where the control will be instantiated. Can be empty, in which case the control will be created on the same texture+   * @returns the cloned control+   */+  clone(i) {+    const d = {};+    this.serialize(d, !0);+    const g = Lr.Instantiate("BABYLON.GUI." + d.className), y = new g();+    return y.parse(d, i), y;+  }+  /**+   * Parses a serialized object into this control+   * @param serializedObject the object with the serialized properties+   * @param host the texture where the control will be instantiated. Can be empty, in which case the control will be created on the same texture+   * @param urlRewriter defines an url rewriter to update urls before sending them to the controls+   * @returns this control+   */+  parse(i, d, g) {+    return this._urlRewriter = g, Eo.Parse(() => this, i, null), this.name = i.name, this._parseFromContent(i, d ?? this._host), this;+  }+  /**+   * Serializes the current control+   * @param serializationObject defined the JSON serialized object+   * @param force if the control should be serialized even if the isSerializable flag is set to false (default false)+   * @param allowCanvas defines if the control is allowed to use a Canvas2D object to serialize (true by default)+   */+  serialize(i, d = !1, g = !0) {+    if (!this.isSerializable && !d)+      return;+    let y = 0, M = 0;+    this.host && (M = this.host.idealHeight, y = this.host.idealWidth, this.host.idealWidth = 0, this.host.idealHeight = 0), Eo.Serialize(this, i), i.name = this.name, i.className = this.getClassName(), g && this._prepareFont(), this._fontFamily && (i.fontFamily = this._fontFamily), this.fontSize && (i.fontSize = this.fontSize), this.fontWeight && (i.fontWeight = this.fontWeight), this.fontStyle && (i.fontStyle = this.fontStyle), this._gradient && (i.gradient = {}, this._gradient.serialize(i.gradient)), Eo.AppendSerializedAnimations(this, i), this.host && (this.host.idealWidth = y, this.host.idealHeight = M);+  }+  /**+   * @internal+   */+  _parseFromContent(i, d, g) {+    if (i.fontFamily && (this.fontFamily = i.fontFamily), i.fontSize && (this.fontSize = i.fontSize), i.fontWeight && (this.fontWeight = i.fontWeight), i.fontStyle && (this.fontStyle = i.fontStyle), i.gradient) {+      const y = Lr.Instantiate("BABYLON.GUI." + i.gradient.className);+      this._gradient = new y(), this._gradient?.parse(i.gradient);+    }+    if (i.animations) {+      this.animations = [];+      for (let y = 0; y < i.animations.length; y++) {+        const M = i.animations[y], N = yb("BABYLON.Animation");+        N && this.animations.push(N.Parse(M));+      }+      i.autoAnimate && this._host && this._host.getScene() && this._host.getScene().beginAnimation(this, i.autoAnimateFrom, i.autoAnimateTo, i.autoAnimateLoop, i.autoAnimateSpeed || 1);+    }+    this.fixedRatioMasterIsWidth = i.fixedRatioMasterIsWidth ?? this.fixedRatioMasterIsWidth;+  }+  /** Releases associated resources */+  dispose() {+    this.onDirtyObservable.clear(), this.onBeforeDrawObservable.clear(), this.onAfterDrawObservable.clear(), this.onPointerDownObservable.clear(), this.onPointerEnterObservable.clear(), this.onPointerMoveObservable.clear(), this.onPointerOutObservable.clear(), this.onPointerUpObservable.clear(), this.onPointerClickObservable.clear(), this.onWheelObservable.clear(), this.onBlurObservable.clear(), this.onFocusObservable.clear(), this.onKeyboardEventProcessedObservable.clear(), this._styleObserver && this._style && (this._style.onChangedObservable.remove(this._styleObserver), this._styleObserver = null), this.parent && (this.parent.removeControl(this), this.parent = null), this._host && this._host._linkedControls.indexOf(this) > -1 && this.linkWithMesh(null), this.onDisposeObservable.notifyObservers(this), this.onDisposeObservable.clear();+  }+  /** HORIZONTAL_ALIGNMENT_LEFT */+  static get HORIZONTAL_ALIGNMENT_LEFT() {+    return pe._HORIZONTAL_ALIGNMENT_LEFT;+  }+  /** HORIZONTAL_ALIGNMENT_RIGHT */+  static get HORIZONTAL_ALIGNMENT_RIGHT() {+    return pe._HORIZONTAL_ALIGNMENT_RIGHT;+  }+  /** HORIZONTAL_ALIGNMENT_CENTER */+  static get HORIZONTAL_ALIGNMENT_CENTER() {+    return pe._HORIZONTAL_ALIGNMENT_CENTER;+  }+  /** VERTICAL_ALIGNMENT_TOP */+  static get VERTICAL_ALIGNMENT_TOP() {+    return pe._VERTICAL_ALIGNMENT_TOP;+  }+  /** VERTICAL_ALIGNMENT_BOTTOM */+  static get VERTICAL_ALIGNMENT_BOTTOM() {+    return pe._VERTICAL_ALIGNMENT_BOTTOM;+  }+  /** VERTICAL_ALIGNMENT_CENTER */+  static get VERTICAL_ALIGNMENT_CENTER() {+    return pe._VERTICAL_ALIGNMENT_CENTER;+  }+  /**+   * @internal+   */+  static _GetFontOffset(i, d) {+    if (pe._FontHeightSizes[i])+      return pe._FontHeightSizes[i];+    const g = d || md.LastCreatedEngine;+    if (!g)+      throw new Error("Invalid engine. Unable to create a canvas.");+    const y = g.getFontOffset(i);+    return pe._FontHeightSizes[i] = y, y;+  }+  /**+   * Creates a Control from parsed data+   * @param serializedObject defines parsed data+   * @param host defines the hosting AdvancedDynamicTexture+   * @param urlRewriter defines an url rewriter to update urls before sending them to the controls+   * @returns a new Control+   */+  static Parse(i, d, g) {+    const y = Lr.Instantiate("BABYLON.GUI." + i.className), M = Eo.Parse(() => {+      const N = new y();+      return N._urlRewriter = g, N;+    }, i, null);+    return M.name = i.name, M._parseFromContent(i, d, g), M;+  }+  /**+   * @internal+   */+  static drawEllipse(i, d, g, y, M, N) {+    N.translate(i, d), N.scale(g, y), N.beginPath(), N.arc(0, 0, 1, 0, 2 * Math.PI * M, M < 0), M >= 1 && N.closePath(), N.scale(1 / g, 1 / y), N.translate(-i, -d);+  }+  /**+   * Returns true if the control is ready to be used+   * @returns+   */+  isReady() {+    return !0;+  }+}+pe.AllowAlphaInheritance = !1;+pe._ClipMeasure = new Ko(0, 0, 0, 0);+pe._HORIZONTAL_ALIGNMENT_LEFT = 0;+pe._HORIZONTAL_ALIGNMENT_RIGHT = 1;+pe._HORIZONTAL_ALIGNMENT_CENTER = 2;+pe._VERTICAL_ALIGNMENT_TOP = 0;+pe._VERTICAL_ALIGNMENT_BOTTOM = 1;+pe._VERTICAL_ALIGNMENT_CENTER = 2;+pe._FontHeightSizes = {};+pe.AddHeader = () => {+};+q([+  H()+], pe.prototype, "metadata", void 0);+q([+  H()+], pe.prototype, "isHitTestVisible", void 0);+q([+  H()+], pe.prototype, "isPointerBlocker", void 0);+q([+  H()+], pe.prototype, "isFocusInvisible", void 0);+q([+  H()+], pe.prototype, "clipChildren", null);+q([+  H()+], pe.prototype, "clipContent", null);+q([+  H()+], pe.prototype, "useBitmapCache", void 0);+q([+  H()+], pe.prototype, "shadowOffsetX", null);+q([+  H()+], pe.prototype, "shadowOffsetY", null);+q([+  H()+], pe.prototype, "shadowBlur", null);+q([+  H()+], pe.prototype, "shadowColor", null);+q([+  H()+], pe.prototype, "hoverCursor", void 0);+q([+  H()+], pe.prototype, "fontOffset", null);+q([+  H()+], pe.prototype, "alpha", null);+q([+  H()+], pe.prototype, "isSerializable", void 0);+q([+  H()+], pe.prototype, "scaleX", null);+q([+  H()+], pe.prototype, "scaleY", null);+q([+  H()+], pe.prototype, "rotation", null);+q([+  H()+], pe.prototype, "transformCenterY", null);+q([+  H()+], pe.prototype, "transformCenterX", null);+q([+  H()+], pe.prototype, "horizontalAlignment", null);+q([+  H()+], pe.prototype, "verticalAlignment", null);+q([+  H()+], pe.prototype, "fixedRatio", null);+q([+  H()+], pe.prototype, "fixedRatioMasterIsWidth", null);+q([+  H()+], pe.prototype, "width", null);+q([+  H()+], pe.prototype, "height", null);+q([+  H()+], pe.prototype, "style", null);+q([+  H()+], pe.prototype, "color", null);+q([+  H()+], pe.prototype, "gradient", null);+q([+  H()+], pe.prototype, "zIndex", null);+q([+  H()+], pe.prototype, "notRenderable", null);+q([+  H()+], pe.prototype, "isVisible", null);+q([+  H()+], pe.prototype, "descendantsOnlyPadding", null);+q([+  H()+], pe.prototype, "paddingLeft", null);+q([+  H()+], pe.prototype, "paddingRight", null);+q([+  H()+], pe.prototype, "paddingTop", null);+q([+  H()+], pe.prototype, "paddingBottom", null);+q([+  H()+], pe.prototype, "left", null);+q([+  H()+], pe.prototype, "top", null);+q([+  H()+], pe.prototype, "linkOffsetX", null);+q([+  H()+], pe.prototype, "linkOffsetY", null);+q([+  H()+], pe.prototype, "isEnabled", null);+q([+  H()+], pe.prototype, "disabledColor", null);+q([+  H()+], pe.prototype, "disabledColorItem", null);+q([+  H()+], pe.prototype, "overlapGroup", void 0);+q([+  H()+], pe.prototype, "overlapDeltaMultiplier", void 0);+kr("BABYLON.GUI.Control", pe);+class wi extends pe {+  /** Gets or sets boolean indicating if children should be rendered to an intermediate texture rather than directly to host, useful for alpha blending */+  get renderToIntermediateTexture() {+    return this._renderToIntermediateTexture;+  }+  set renderToIntermediateTexture(i) {+    this._renderToIntermediateTexture !== i && (this._renderToIntermediateTexture = i, this._markAsDirty());+  }+  /** Gets or sets a boolean indicating if the container should try to adapt to its children height */+  get adaptHeightToChildren() {+    return this._adaptHeightToChildren;+  }+  set adaptHeightToChildren(i) {+    this._adaptHeightToChildren !== i && (this._adaptHeightToChildren = i, i && (this.height = "100%"), this._rebuildLayout = !0, this._markAsDirty());+  }+  /** Gets or sets a boolean indicating if the container should try to adapt to its children width */+  get adaptWidthToChildren() {+    return this._adaptWidthToChildren;+  }+  set adaptWidthToChildren(i) {+    this._adaptWidthToChildren !== i && (this._adaptWidthToChildren = i, i && (this.width = "100%"), this._rebuildLayout = !0, this._markAsDirty());+  }+  /** Gets or sets background color */+  get background() {+    return this._background;+  }+  set background(i) {+    this._background !== i && (this._background = i, this._markAsDirty());+  }+  /** Gets or sets background gradient color. Takes precedence over background */+  get backgroundGradient() {+    return this._backgroundGradient;+  }+  set backgroundGradient(i) {+    this._backgroundGradient !== i && (this._backgroundGradient = i, this._markAsDirty());+  }+  /** Gets the list of children */+  get children() {+    return this._children;+  }+  get isReadOnly() {+    return this._isReadOnly;+  }+  set isReadOnly(i) {+    this._isReadOnly = i;+    for (const d of this._children)+      d.isReadOnly = i;+  }+  /**+   * Creates a new Container+   * @param name defines the name of the container+   */+  constructor(i) {+    super(i), this.name = i, this._children = new Array(), this._measureForChildren = Ko.Empty(), this._background = "", this._backgroundGradient = null, this._adaptWidthToChildren = !1, this._adaptHeightToChildren = !1, this._renderToIntermediateTexture = !1, this._intermediateTexture = null, this.delegatePickingToChildren = !1, this.logLayoutCycleErrors = !1, this.maxLayoutCycle = 3, this.onControlAddedObservable = new qt(), this.onControlRemovedObservable = new qt(), this._inverseTransformMatrix = pr.Identity(), this._inverseMeasure = new Ko(0, 0, 0, 0);+  }+  _getTypeName() {+    return "Container";+  }+  _flagDescendantsAsMatrixDirty() {+    for (const i of this.children)+      i._isClipped = !1, i._markMatrixAsDirty();+  }+  /**+   * Gets a child using its name+   * @param name defines the child name to look for+   * @returns the child control if found+   */+  getChildByName(i) {+    for (const d of this.children)+      if (d.name === i)+        return d;+    return null;+  }+  /**+   * Gets a child using its type and its name+   * @param name defines the child name to look for+   * @param type defines the child type to look for+   * @returns the child control if found+   */+  getChildByType(i, d) {+    for (const g of this.children)+      if (g.name === i && g.typeName === d)+        return g;+    return null;+  }+  /**+   * Search for a specific control in children+   * @param control defines the control to look for+   * @returns true if the control is in child list+   */+  containsControl(i) {+    return this.children.indexOf(i) !== -1;+  }+  /**+   * Adds a new control to the current container+   * @param control defines the control to add+   * @returns the current container+   */+  addControl(i) {+    return i ? this._children.indexOf(i) !== -1 ? this : (i._link(this._host), i._markAllAsDirty(), this._reOrderControl(i), this._markAsDirty(), this.onControlAddedObservable.notifyObservers(i), this) : this;+  }+  /**+   * Removes all controls from the current container+   * @returns the current container+   */+  clearControls() {+    const i = this.children.slice();+    for (const d of i)+      this.removeControl(d);+    return this;+  }+  /**+   * Removes a control from the current container+   * @param control defines the control to remove+   * @returns the current container+   */+  removeControl(i) {+    const d = this._children.indexOf(i);+    return d !== -1 && (this._children.splice(d, 1), i.parent = null), i.linkWithMesh(null), this._host && this._host._cleanControlAfterRemoval(i), this._markAsDirty(), this.onControlRemovedObservable.notifyObservers(i), this;+  }+  /**+   * @internal+   */+  _reOrderControl(i) {+    const d = i.linkedMesh;+    this.removeControl(i);+    let g = !1;+    for (let y = 0; y < this._children.length; y++)+      if (this._children[y].zIndex > i.zIndex) {+        this._children.splice(y, 0, i), g = !0;+        break;+      }+    g || this._children.push(i), i.parent = this, d && i.linkWithMesh(d), this._markAsDirty();+  }+  /**+   * @internal+   */+  _offsetLeft(i) {+    super._offsetLeft(i);+    for (const d of this._children)+      d._offsetLeft(i);+  }+  /**+   * @internal+   */+  _offsetTop(i) {+    super._offsetTop(i);+    for (const d of this._children)+      d._offsetTop(i);+  }+  /** @internal */+  _markAllAsDirty() {+    super._markAllAsDirty();+    for (let i = 0; i < this._children.length; i++)+      this._children[i]._markAllAsDirty();+  }+  _getBackgroundColor(i) {+    return this._backgroundGradient ? this._backgroundGradient.getCanvasGradient(i) : this._background;+  }+  /**+   * @internal+   */+  _localDraw(i) {+    (this._background || this._backgroundGradient) && (i.save(), (this.shadowBlur || this.shadowOffsetX || this.shadowOffsetY) && (i.shadowColor = this.shadowColor, i.shadowBlur = this.shadowBlur, i.shadowOffsetX = this.shadowOffsetX * this._host.idealRatio, i.shadowOffsetY = this.shadowOffsetY * this._host.idealRatio), i.fillStyle = this._getBackgroundColor(i), i.fillRect(this._currentMeasure.left, this._currentMeasure.top, this._currentMeasure.width, this._currentMeasure.height), i.restore());+  }+  /**+   * @internal+   */+  _link(i) {+    super._link(i);+    for (const d of this._children)+      d._link(i);+  }+  /** @internal */+  _beforeLayout() {+  }+  /**+   * @internal+   */+  _processMeasures(i, d) {+    (this._isDirty || !this._cachedParentMeasure.isEqualsTo(i)) && (super._processMeasures(i, d), this._evaluateClippingState(i), this._renderToIntermediateTexture && (this._intermediateTexture && this._host.getScene() != this._intermediateTexture.getScene() && (this._intermediateTexture.dispose(), this._intermediateTexture = null), this._intermediateTexture ? this._intermediateTexture.scaleTo(this._currentMeasure.width, this._currentMeasure.height) : (this._intermediateTexture = new K4("", { width: this._currentMeasure.width, height: this._currentMeasure.height }, this._host.getScene(), !1, Wr.NEAREST_SAMPLINGMODE, Is.TEXTUREFORMAT_RGBA, !1), this._intermediateTexture.hasAlpha = !0)));+  }+  /**+   * @internal+   */+  _layout(i, d) {+    if (!this.isDirty && (!this.isVisible || this.notRenderable))+      return !1;+    this.host._numLayoutCalls++, this._isDirty && this._currentMeasure.transformToRef(this._transformMatrix, this._prevCurrentMeasureTransformedIntoGlobalSpace);+    let g = 0;+    d.save(), this._applyStates(d), this._beforeLayout();+    do {+      let y = -1, M = -1;+      if (this._rebuildLayout = !1, this._processMeasures(i, d), !this._isClipped) {+        for (const N of this._children)+          N._tempParentMeasure.copyFrom(this._measureForChildren), N._layout(this._measureForChildren, d) && N.isVisible && !N.notRenderable && (this.adaptWidthToChildren && N._width.isPixel && (y = Math.max(y, N._currentMeasure.width + N._paddingLeftInPixels + N._paddingRightInPixels)), this.adaptHeightToChildren && N._height.isPixel && (M = Math.max(M, N._currentMeasure.height + N._paddingTopInPixels + N._paddingBottomInPixels)));+        if (this.adaptWidthToChildren && y >= 0) {+          y += this.paddingLeftInPixels + this.paddingRightInPixels;+          const N = y + "px";+          this.width !== N && (this.parent?._markAsDirty(), this.width = N, this._width.ignoreAdaptiveScaling = !0, this._rebuildLayout = !0);+        }+        if (this.adaptHeightToChildren && M >= 0) {+          M += this.paddingTopInPixels + this.paddingBottomInPixels;+          const N = M + "px";+          this.height !== N && (this.parent?._markAsDirty(), this.height = N, this._height.ignoreAdaptiveScaling = !0, this._rebuildLayout = !0);+        }+        this._postMeasure();+      }+      g++;+    } while (this._rebuildLayout && g < this.maxLayoutCycle);+    return this._rebuildLayout && g >= this.maxLayoutCycle && this.logLayoutCycleErrors && zh.Error(`Layout cycle detected in GUI (Container name=${this.name}, uniqueId=${this.uniqueId})`), d.restore(), this._isDirty && (this.invalidateRect(), this._isDirty = !1), !0;+  }+  _postMeasure() {+  }+  /**+   * @internal+   */+  _draw(i, d) {+    const g = this._renderToIntermediateTexture && this._intermediateTexture, y = g ? this._intermediateTexture.getContext() : i;+    g && (y.save(), y.translate(-this._currentMeasure.left, -this._currentMeasure.top), d ? (this._transformMatrix.invertToRef(this._inverseTransformMatrix), d.transformToRef(this._inverseTransformMatrix, this._inverseMeasure), y.clearRect(this._inverseMeasure.left, this._inverseMeasure.top, this._inverseMeasure.width, this._inverseMeasure.height)) : y.clearRect(this._currentMeasure.left, this._currentMeasure.top, this._currentMeasure.width, this._currentMeasure.height)), this._localDraw(y), i.save(), this.clipChildren && this._clipForChildren(y);+    for (const M of this._children)+      d && !M._intersectsRect(d) || M._render(y, d);+    g && (y.restore(), i.save(), i.globalAlpha = this.alpha, i.drawImage(y.canvas, this._currentMeasure.left, this._currentMeasure.top), i.restore()), i.restore();+  }+  getDescendantsToRef(i, d = !1, g) {+    if (this.children)+      for (let y = 0; y < this.children.length; y++) {+        const M = this.children[y];+        (!g || g(M)) && i.push(M), d || M.getDescendantsToRef(i, !1, g);+      }+  }+  /**+   * @internal+   */+  _processPicking(i, d, g, y, M, N, O, F) {+    if (!this._isEnabled || !this.isVisible || this.notRenderable)+      return !1;+    const ne = super.contains(i, d);+    if (!ne && this.clipChildren)+      return !1;+    if (this.delegatePickingToChildren) {+      let $ = !1;+      for (let Q = this._children.length - 1; Q >= 0; Q--) {+        const X = this._children[Q];+        if (X.isEnabled && X.isHitTestVisible && X.isVisible && !X.notRenderable && X.contains(i, d)) {+          $ = !0;+          break;+        }+      }+      if (!$)+        return !1;+    }+    for (let $ = this._children.length - 1; $ >= 0; $--) {+      const Q = this._children[$];+      if (Q._processPicking(i, d, g, y, M, N, O, F))+        return Q.hoverCursor && this._host._changeCursor(Q.hoverCursor), !0;+    }+    return !ne || !this.isHitTestVisible ? !1 : this._processObservables(y, i, d, g, M, N, O, F);+  }+  /**+   * @internal+   */+  _additionalProcessing(i, d) {+    super._additionalProcessing(i, d), this._measureForChildren.copyFrom(this._currentMeasure);+  }+  _getAdaptDimTo(i) {+    return i === "width" ? this.adaptWidthToChildren : this.adaptHeightToChildren;+  }+  isDimensionFullyDefined(i) {+    if (this._getAdaptDimTo(i)) {+      for (const d of this.children)+        if (!d.isDimensionFullyDefined(i))+          return !1;+      return !0;+    }+    return super.isDimensionFullyDefined(i);+  }+  /**+   * Serializes the current control+   * @param serializationObject defined the JSON serialized object+   * @param force force serialization even if isSerializable === false+   * @param allowCanvas defines if the control is allowed to use a Canvas2D object to serialize (true by default)+   */+  serialize(i, d = !1, g = !0) {+    if (super.serialize(i, d, g), !(!this.isSerializable && !d) && (this.backgroundGradient && (i.backgroundGradient = {}, this.backgroundGradient.serialize(i.backgroundGradient)), !!this.children.length)) {+      i.children = [];+      for (const y of this.children)+        if (y.isSerializable || d) {+          const M = {};+          y.serialize(M, d, g), i.children.push(M);+        }+    }+  }+  /** Releases associated resources */+  dispose() {+    super.dispose();+    for (let i = this.children.length - 1; i >= 0; i--)+      this.children[i].dispose();+    this._intermediateTexture?.dispose();+  }+  /**+   * @internal+   */+  _parseFromContent(i, d, g) {+    if (super._parseFromContent(i, d, g), this._link(d), i.backgroundGradient) {+      const y = Lr.Instantiate("BABYLON.GUI." + i.backgroundGradient.className);+      this._backgroundGradient = new y(), this._backgroundGradient?.parse(i.backgroundGradient);+    }+    if (i.children)+      for (const y of i.children)+        this.addControl(pe.Parse(y, d, g));+  }+  isReady() {+    for (const i of this.children)+      if (!i.isReady())+        return !1;+    return !0;+  }+}+q([+  H()+], wi.prototype, "delegatePickingToChildren", void 0);+q([+  H()+], wi.prototype, "renderToIntermediateTexture", null);+q([+  H()+], wi.prototype, "maxLayoutCycle", void 0);+q([+  H()+], wi.prototype, "adaptHeightToChildren", null);+q([+  H()+], wi.prototype, "adaptWidthToChildren", null);+q([+  H()+], wi.prototype, "background", null);+q([+  H()+], wi.prototype, "backgroundGradient", null);+kr("BABYLON.GUI.Container", wi);+class si extends wi {+  /** Gets or sets border thickness */+  get thickness() {+    return this._thickness;+  }+  set thickness(i) {+    this._thickness !== i && (this._thickness = i, this._markAsDirty());+  }+  /** Gets or sets the corner radius of all angles */+  get cornerRadius() {+    return this._cornerRadius[0];+  }+  set cornerRadius(i) {+    i < 0 && (i = 0), !(this._cornerRadius[0] === i && this._cornerRadius[1] === i && this._cornerRadius[2] === i && this._cornerRadius[3] === i) && (this._cornerRadius[0] = this._cornerRadius[1] = this._cornerRadius[2] = this._cornerRadius[3] = i, this._markAsDirty());+  }+  /** Gets or sets the corner radius top left angle */+  get cornerRadiusX() {+    return this._cornerRadius[0];+  }+  set cornerRadiusX(i) {+    this._cornerRadius[0] !== i && (this._cornerRadius[0] = i);+  }+  /** Gets or sets the corner radius top right angle */+  get cornerRadiusY() {+    return this._cornerRadius[1];+  }+  set cornerRadiusY(i) {+    this._cornerRadius[1] !== i && (this._cornerRadius[1] = i);+  }+  /** Gets or sets the corner radius bottom left angle */+  get cornerRadiusZ() {+    return this._cornerRadius[2];+  }+  set cornerRadiusZ(i) {+    this._cornerRadius[2] !== i && (this._cornerRadius[2] = i);+  }+  /** Gets or sets the corner radius bottom right angle */+  get cornerRadiusW() {+    return this._cornerRadius[3];+  }+  set cornerRadiusW(i) {+    this._cornerRadius[3] !== i && (this._cornerRadius[3] = i);+  }+  /**+   * Creates a new Rectangle+   * @param name defines the control name+   */+  constructor(i) {+    super(i), this.name = i, this._thickness = 1, this._cornerRadius = [0, 0, 0, 0], this._cachedRadius = [0, 0, 0, 0];+  }+  _getTypeName() {+    return "Rectangle";+  }+  /** @internal */+  _computeAdditionalOffsetX() {+    let i = 0;+    return (this._cornerRadius[0] !== 0 || this._cornerRadius[1] !== 0 || this._cornerRadius[2] !== 0 || this._cornerRadius[3] !== 0) && (i += 1), this.thickness && (i += this.thickness / 2), i;+  }+  /** @internal */+  _computeAdditionalOffsetY() {+    let i = 0;+    return (this._cornerRadius[0] !== 0 || this._cornerRadius[1] !== 0 || this._cornerRadius[2] !== 0 || this._cornerRadius[3] !== 0) && (i += 1), this.thickness && (i += this.thickness / 2), i;+  }+  _getRectangleFill(i) {+    return this._getBackgroundColor(i);+  }+  _localDraw(i) {+    i.save(), (this.shadowBlur || this.shadowOffsetX || this.shadowOffsetY) && (i.shadowColor = this.shadowColor, i.shadowBlur = this.shadowBlur, i.shadowOffsetX = this.shadowOffsetX * this._host.idealRatio, i.shadowOffsetY = this.shadowOffsetY * this._host.idealRatio), (this._background || this._backgroundGradient) && (i.fillStyle = this._getRectangleFill(i), this._cornerRadius[0] !== 0 || this._cornerRadius[1] !== 0 || this._cornerRadius[2] !== 0 || this._cornerRadius[3] !== 0 ? (this._drawRoundedRect(i, this._thickness / 2), i.fill()) : i.fillRect(this._currentMeasure.left, this._currentMeasure.top, this._currentMeasure.width, this._currentMeasure.height)), this._thickness && ((this.shadowBlur || this.shadowOffsetX || this.shadowOffsetY) && (i.shadowBlur = 0, i.shadowOffsetX = 0, i.shadowOffsetY = 0), (this.color || this.gradient) && (i.strokeStyle = this.gradient ? this.gradient.getCanvasGradient(i) : this.color), i.lineWidth = this._thickness, this._cornerRadius[0] !== 0 || this._cornerRadius[1] !== 0 || this._cornerRadius[2] !== 0 || this._cornerRadius[3] !== 0 ? (this._drawRoundedRect(i, this._thickness / 2), i.stroke()) : i.strokeRect(this._currentMeasure.left + this._thickness / 2, this._currentMeasure.top + this._thickness / 2, this._currentMeasure.width - this._thickness, this._currentMeasure.height - this._thickness)), i.restore();+  }+  _additionalProcessing(i, d) {+    super._additionalProcessing(i, d), this._measureForChildren.width -= 2 * this._thickness, this._measureForChildren.height -= 2 * this._thickness, this._measureForChildren.left += this._thickness, this._measureForChildren.top += this._thickness;+  }+  _drawRoundedRect(i, d = 0) {+    const g = this._currentMeasure.left + d, y = this._currentMeasure.top + d, M = this._currentMeasure.width - d * 2, N = this._currentMeasure.height - d * 2, O = this._host.idealRatio;+    for (let F = 0; F < this._cornerRadius.length; F++)+      this._cachedRadius[F] = Math.abs(Math.min(N / 2, Math.min(M / 2, this._cornerRadius[F] * O)));+    i.beginPath(), i.moveTo(g + this._cachedRadius[0], y), i.lineTo(g + M - this._cachedRadius[1], y), i.arc(g + M - this._cachedRadius[1], y + this._cachedRadius[1], this._cachedRadius[1], 3 * Math.PI / 2, Math.PI * 2), i.lineTo(g + M, y + N - this._cachedRadius[2]), i.arc(g + M - this._cachedRadius[2], y + N - this._cachedRadius[2], this._cachedRadius[2], 0, Math.PI / 2), i.lineTo(g + this._cachedRadius[3], y + N), i.arc(g + this._cachedRadius[3], y + N - this._cachedRadius[3], this._cachedRadius[3], Math.PI / 2, Math.PI), i.lineTo(g, y + this._cachedRadius[0]), i.arc(g + this._cachedRadius[0], y + this._cachedRadius[0], this._cachedRadius[0], Math.PI, 3 * Math.PI / 2), i.closePath();+  }+  _clipForChildren(i) {+    (this._cornerRadius[0] !== 0 || this._cornerRadius[1] !== 0 || this._cornerRadius[2] !== 0 || this._cornerRadius[3] !== 0) && (this._drawRoundedRect(i, this._thickness), i.clip());+  }+}+q([+  H()+], si.prototype, "thickness", null);+q([+  H()+], si.prototype, "cornerRadius", null);+q([+  H()+], si.prototype, "cornerRadiusX", null);+q([+  H()+], si.prototype, "cornerRadiusY", null);+q([+  H()+], si.prototype, "cornerRadiusZ", null);+q([+  H()+], si.prototype, "cornerRadiusW", null);+kr("BABYLON.GUI.Rectangle", si);+var iw;+(function($e) {+  $e[$e.Clip = 0] = "Clip", $e[$e.WordWrap = 1] = "WordWrap", $e[$e.Ellipsis = 2] = "Ellipsis", $e[$e.WordWrapEllipsis = 3] = "WordWrapEllipsis", $e[$e.HTML = 4] = "HTML";+})(iw || (iw = {}));+class zr extends pe {+  /**+   * Return the line list (you may need to use the onLinesReadyObservable to make sure the list is ready)+   */+  get lines() {+    return this._lines;+  }+  /**+       * Gets or sets a boolean indicating that the TextBlock will be resized to fit its content+  +       */+  get resizeToFit() {+    return this._resizeToFit;+  }+  /**+       * Gets or sets a boolean indicating that the TextBlock will be resized to fit its content+  +       */+  set resizeToFit(i) {+    this._resizeToFit !== i && (this._resizeToFit = i, this._resizeToFit && (this._width.ignoreAdaptiveScaling = !0, this._height.ignoreAdaptiveScaling = !0), this._markAsDirty());+  }+  /**+   * Gets or sets a boolean indicating if text must be wrapped+   */+  get textWrapping() {+    return this._textWrapping;+  }+  /**+   * Gets or sets a boolean indicating if text must be wrapped+   */+  set textWrapping(i) {+    this._textWrapping !== i && (this._textWrapping = +i, this._markAsDirty());+  }+  /**+   * Gets or sets text to display+   */+  get text() {+    return this._text;+  }+  /**+   * Gets or sets text to display+   */+  set text(i) {+    this._text !== i && (this._text = i + "", this._markAsDirty(), this.onTextChangedObservable.notifyObservers(this));+  }+  /**+   * Gets or sets text horizontal alignment (BABYLON.GUI.Control.HORIZONTAL_ALIGNMENT_CENTER by default)+   */+  get textHorizontalAlignment() {+    return this._textHorizontalAlignment;+  }+  /**+   * Gets or sets text horizontal alignment (BABYLON.GUI.Control.HORIZONTAL_ALIGNMENT_CENTER by default)+   */+  set textHorizontalAlignment(i) {+    this._textHorizontalAlignment !== i && (this._textHorizontalAlignment = i, this._markAsDirty());+  }+  /**+   * Gets or sets text vertical alignment (BABYLON.GUI.Control.VERTICAL_ALIGNMENT_CENTER by default)+   */+  get textVerticalAlignment() {+    return this._textVerticalAlignment;+  }+  /**+   * Gets or sets text vertical alignment (BABYLON.GUI.Control.VERTICAL_ALIGNMENT_CENTER by default)+   */+  set textVerticalAlignment(i) {+    this._textVerticalAlignment !== i && (this._textVerticalAlignment = i, this._markAsDirty());+  }+  /**+   * Gets or sets line spacing value+   */+  set lineSpacing(i) {+    this._lineSpacing.fromString(i) && this._markAsDirty();+  }+  /**+   * Gets or sets line spacing value+   */+  get lineSpacing() {+    return this._lineSpacing.toString(this._host);+  }+  /**+   * Gets or sets outlineWidth of the text to display+   */+  get outlineWidth() {+    return this._outlineWidth;+  }+  /**+   * Gets or sets outlineWidth of the text to display+   */+  set outlineWidth(i) {+    this._outlineWidth !== i && (this._outlineWidth = i, this._markAsDirty());+  }+  /**+   * Gets or sets a boolean indicating that text must have underline+   */+  get underline() {+    return this._underline;+  }+  /**+   * Gets or sets a boolean indicating that text must have underline+   */+  set underline(i) {+    this._underline !== i && (this._underline = i, this._markAsDirty());+  }+  /**+   * Gets or sets an boolean indicating that text must be crossed out+   */+  get lineThrough() {+    return this._lineThrough;+  }+  /**+   * Gets or sets an boolean indicating that text must be crossed out+   */+  set lineThrough(i) {+    this._lineThrough !== i && (this._lineThrough = i, this._markAsDirty());+  }+  /**+   * If the outline should be applied to the underline/strike-through too. Has different behavior in Edge/Chrome vs Firefox.+   */+  get applyOutlineToUnderline() {+    return this._applyOutlineToUnderline;+  }+  set applyOutlineToUnderline(i) {+    this._applyOutlineToUnderline !== i && (this._applyOutlineToUnderline = i, this._markAsDirty());+  }+  /**+   * Gets or sets outlineColor of the text to display+   */+  get outlineColor() {+    return this._outlineColor;+  }+  /**+   * Gets or sets outlineColor of the text to display+   */+  set outlineColor(i) {+    this._outlineColor !== i && (this._outlineColor = i, this._markAsDirty());+  }+  /**+   * Gets or sets word divider+   */+  get wordDivider() {+    return this._wordDivider;+  }+  /**+   * Gets or sets word divider+   */+  set wordDivider(i) {+    this._wordDivider !== i && (this._wordDivider = i, this._markAsDirty());+  }+  /**+   * By default, if a text block has text wrapping other than Clip, its width+   * is not resized even if resizeToFit = true. This parameter forces the width+   * to be resized.+   */+  get forceResizeWidth() {+    return this._forceResizeWidth;+  }+  set forceResizeWidth(i) {+    this._forceResizeWidth !== i && (this._forceResizeWidth = i, this._markAsDirty());+  }+  /**+   * Creates a new TextBlock object+   * @param name defines the name of the control+   * @param text defines the text to display (empty string by default)+   */+  constructor(i, d = "") {+    super(i), this.name = i, this._text = "", this._textWrapping = 0, this._textHorizontalAlignment = pe.HORIZONTAL_ALIGNMENT_CENTER, this._textVerticalAlignment = pe.VERTICAL_ALIGNMENT_CENTER, this._resizeToFit = !1, this._lineSpacing = new St(0), this._outlineWidth = 0, this._outlineColor = "white", this._underline = !1, this._lineThrough = !1, this._wordDivider = " ", this._forceResizeWidth = !1, this._applyOutlineToUnderline = !1, this.onTextChangedObservable = new qt(), this.onLinesReadyObservable = new qt(), this.reuseHTMLForWordWrapping = !1, this._linesTemp = [], this._htmlElement = null, this.text = d;+  }+  _getTypeName() {+    return "TextBlock";+  }+  _processMeasures(i, d) {+    super._processMeasures(i, d), d.save(), this._applyStates(d), (!this._fontOffset || this.isDirty) && (this._fontOffset = pe._GetFontOffset(d.font, this._host.getScene()?.getEngine())), this._lines = this._breakLines(this._currentMeasure.width, this._currentMeasure.height, d), this.onLinesReadyObservable.notifyObservers(this), d.restore();+    let g = 0;+    for (let y = 0; y < this._lines.length; y++) {+      const M = this._lines[y];+      M.width > g && (g = M.width);+    }+    if (this._resizeToFit) {+      if (this._textWrapping === 0 || this._forceResizeWidth) {+        const M = Math.ceil(this._paddingLeftInPixels) + Math.ceil(this._paddingRightInPixels) + Math.ceil(g);+        M !== this._width.getValueInPixel(this._host, this._tempParentMeasure.width) && (this._width.updateInPlace(M, St.UNITMODE_PIXEL), this._rebuildLayout = !0);+      }+      let y = this._paddingTopInPixels + this._paddingBottomInPixels + this._fontOffset.height * this._lines.length | 0;+      if (this._lines.length > 0 && this._lineSpacing.internalValue !== 0) {+        let M;+        this._lineSpacing.isPixel ? M = this._lineSpacing.getValue(this._host) : M = this._lineSpacing.getValue(this._host) * this._height.getValueInPixel(this._host, this._cachedParentMeasure.height), y += (this._lines.length - 1) * M;+      }+      y !== this._height.internalValue && (this._height.updateInPlace(y, St.UNITMODE_PIXEL), this._rebuildLayout = !0);+    }+  }+  _drawText(i, d, g, y) {+    const M = this._currentMeasure.width;+    let N = 0;+    switch (this._textHorizontalAlignment) {+      case pe.HORIZONTAL_ALIGNMENT_LEFT:+        N = 0;+        break;+      case pe.HORIZONTAL_ALIGNMENT_RIGHT:+        N = M - d;+        break;+      case pe.HORIZONTAL_ALIGNMENT_CENTER:+        N = (M - d) / 2;+        break;+    }+    if (this.shadowBlur || this.shadowOffsetX || this.shadowOffsetY) {+      y.shadowColor = this.shadowColor, y.shadowBlur = this.shadowBlur;+      const O = this.host.idealRatio;+      y.shadowOffsetX = this.shadowOffsetX * O, y.shadowOffsetY = this.shadowOffsetY * O;+    }+    this.outlineWidth && y.strokeText(i, this._currentMeasure.left + N, g), y.fillText(i, this._currentMeasure.left + N, g), this._underline && this._drawLine(this._currentMeasure.left + N, g + 3, this._currentMeasure.left + N + d, g + 3, y), this._lineThrough && this._drawLine(this._currentMeasure.left + N, g - this.fontSizeInPixels / 3, this._currentMeasure.left + N + d, g - this.fontSizeInPixels / 3, y);+  }+  _drawLine(i, d, g, y, M) {+    if (M.beginPath(), M.lineWidth = Math.round(this.fontSizeInPixels * 0.05), M.moveTo(i, d), M.lineTo(g, y), this.outlineWidth && this.applyOutlineToUnderline)+      M.stroke(), M.fill();+    else {+      const N = M.strokeStyle;+      M.strokeStyle = M.fillStyle, M.stroke(), M.strokeStyle = N;+    }+    M.closePath();+  }+  /**+   * @internal+   */+  _draw(i) {+    i.save(), this._applyStates(i), this._renderLines(i), i.restore();+  }+  _applyStates(i) {+    super._applyStates(i), this.outlineWidth && (i.lineWidth = this.outlineWidth, i.strokeStyle = this.outlineColor, i.lineJoin = "miter", i.miterLimit = 2);+  }+  _breakLines(i, d, g) {+    this._linesTemp.length = 0;+    const y = this._textWrapping === 4 ? this._parseHTMLText(i, d, g) : this.text.split(`+`);+    switch (this._textWrapping) {+      case 1:+        for (const M of y)+          this._linesTemp.push(...this._parseLineWordWrap(M, i, g));+        break;+      case 2:+        for (const M of y)+          this._linesTemp.push(this._parseLineEllipsis(M, i, g));+        break;+      case 3:+        for (const M of y)+          this._linesTemp.push(...this._parseLineWordWrapEllipsis(M, i, d, g));+        break;+      case 4:+      default:+        for (const M of y)+          this._linesTemp.push(this._parseLine(M, g));+        break;+    }+    return this._linesTemp;+  }+  _parseHTMLText(i, d, g) {+    const y = [];+    this._htmlElement || (this._htmlElement = document.createElement("div"), document.body.appendChild(this._htmlElement));+    const M = this._htmlElement;+    M.textContent = this.text, M.style.font = g.font, M.style.position = "absolute", M.style.visibility = "hidden", M.style.top = "-1000px", M.style.left = "-1000px", this.adjustWordWrappingHTMLElement?.(M), M.style.width = i + "px", M.style.height = d + "px";+    const N = M.textContent;+    if (!N)+      return y;+    const O = M.childNodes[0], F = document.createRange();+    let ne = 0;+    for (const $ of N) {+      F.setStart(O, 0), F.setEnd(O, ne + 1);+      const Q = F.getClientRects().length - 1;+      y[Q] = (y[Q] || "") + $, ne++;+    }+    return this.reuseHTMLForWordWrapping || (M.remove(), this._htmlElement = null), y;+  }+  _parseLine(i = "", d) {+    return { text: i, width: this._getTextMetricsWidth(d.measureText(i)) };+  }+  //Calculate how many characters approximately we need to remove+  _getCharsToRemove(i, d, g) {+    const y = i > d ? i - d : 0, M = i / g;+    return Math.max(Math.floor(y / M), 1);+  }+  _parseLineEllipsis(i = "", d, g) {+    let y = this._getTextMetricsWidth(g.measureText(i)), M = this._getCharsToRemove(y, d, i.length);+    const N = Array.from && Array.from(i);+    if (N)+      for (; N.length && y > d; )+        N.splice(N.length - M, M), i = `${N.join("")}…`, y = this._getTextMetricsWidth(g.measureText(i)), M = this._getCharsToRemove(y, d, i.length);+    else {+      for (; i.length > 2 && y > d; )+        i = i.slice(0, -M), y = this._getTextMetricsWidth(g.measureText(i + "…")), M = this._getCharsToRemove(y, d, i.length);+      i += "…";+    }+    return { text: i, width: y };+  }+  _getTextMetricsWidth(i) {+    return i.actualBoundingBoxLeft !== void 0 ? Math.abs(i.actualBoundingBoxLeft) + Math.abs(i.actualBoundingBoxRight) : i.width;+  }+  _parseLineWordWrap(i = "", d, g) {+    const y = [], M = this.wordSplittingFunction ? this.wordSplittingFunction(i) : i.split(this._wordDivider);+    let N = this._getTextMetricsWidth(g.measureText(i));+    for (let O = 0; O < M.length; O++) {+      const F = O > 0 ? i + this._wordDivider + M[O] : M[0], ne = this._getTextMetricsWidth(g.measureText(F));+      ne > d && O > 0 ? (y.push({ text: i, width: N }), i = M[O], N = this._getTextMetricsWidth(g.measureText(i))) : (N = ne, i = F);+    }+    return y.push({ text: i, width: N }), y;+  }+  _parseLineWordWrapEllipsis(i = "", d, g, y) {+    const M = this._parseLineWordWrap(i, d, y);+    for (let N = 1; N <= M.length; N++)+      if (this._computeHeightForLinesOf(N) > g && N > 1) {+        const F = M[N - 2], ne = M[N - 1];+        M[N - 2] = this._parseLineEllipsis(F.text + this._wordDivider + ne.text, d, y);+        const $ = M.length - N + 1;+        for (let Q = 0; Q < $; Q++)+          M.pop();+        return M;+      }+    return M;+  }+  _renderLines(i) {+    if (!this._fontOffset || !this._lines)+      return;+    const d = this._currentMeasure.height;+    let g = 0;+    switch (this._textVerticalAlignment) {+      case pe.VERTICAL_ALIGNMENT_TOP:+        g = this._fontOffset.ascent;+        break;+      case pe.VERTICAL_ALIGNMENT_BOTTOM:+        g = d - this._fontOffset.height * (this._lines.length - 1) - this._fontOffset.descent;+        break;+      case pe.VERTICAL_ALIGNMENT_CENTER:+        g = this._fontOffset.ascent + (d - this._fontOffset.height * this._lines.length) / 2;+        break;+    }+    g += this._currentMeasure.top;+    for (let y = 0; y < this._lines.length; y++) {+      const M = this._lines[y];+      y !== 0 && this._lineSpacing.internalValue !== 0 && (this._lineSpacing.isPixel ? g += this._lineSpacing.getValue(this._host) : g = g + this._lineSpacing.getValue(this._host) * this._height.getValueInPixel(this._host, this._cachedParentMeasure.height)), this._drawText(M.text, M.width, g, i), g += this._fontOffset.height;+    }+  }+  _computeHeightForLinesOf(i) {+    let d = this._paddingTopInPixels + this._paddingBottomInPixels + this._fontOffset.height * i;+    if (i > 0 && this._lineSpacing.internalValue !== 0) {+      let g;+      this._lineSpacing.isPixel ? g = this._lineSpacing.getValue(this._host) : g = this._lineSpacing.getValue(this._host) * this._height.getValueInPixel(this._host, this._cachedParentMeasure.height), d += (i - 1) * g;+    }+    return d;+  }+  isDimensionFullyDefined(i) {+    return this.resizeToFit ? !0 : super.isDimensionFullyDefined(i);+  }+  /**+   * Given a width constraint applied on the text block, find the expected height+   * @returns expected height+   */+  computeExpectedHeight() {+    if (this.text && this.widthInPixels) {+      const i = md.LastCreatedEngine?.createCanvas(0, 0).getContext("2d");+      if (i) {+        this._applyStates(i), this._fontOffset || (this._fontOffset = pe._GetFontOffset(i.font, this._host.getScene()?.getEngine()));+        const d = this._lines ? this._lines : this._breakLines(this.widthInPixels - this._paddingLeftInPixels - this._paddingRightInPixels, this.heightInPixels - this._paddingTopInPixels - this._paddingBottomInPixels, i);+        return this._computeHeightForLinesOf(d.length);+      }+    }+    return 0;+  }+  dispose() {+    super.dispose(), this.onTextChangedObservable.clear(), this._htmlElement?.remove(), this._htmlElement = null;+  }+}+q([+  H()+], zr.prototype, "resizeToFit", null);+q([+  H()+], zr.prototype, "textWrapping", null);+q([+  H()+], zr.prototype, "text", null);+q([+  H()+], zr.prototype, "textHorizontalAlignment", null);+q([+  H()+], zr.prototype, "textVerticalAlignment", null);+q([+  H()+], zr.prototype, "lineSpacing", null);+q([+  H()+], zr.prototype, "outlineWidth", null);+q([+  H()+], zr.prototype, "underline", null);+q([+  H()+], zr.prototype, "lineThrough", null);+q([+  H()+], zr.prototype, "applyOutlineToUnderline", null);+q([+  H()+], zr.prototype, "outlineColor", null);+q([+  H()+], zr.prototype, "wordDivider", null);+q([+  H()+], zr.prototype, "forceResizeWidth", null);+kr("BABYLON.GUI.TextBlock", zr);+class Ft extends pe {+  /**+   * Gets a boolean indicating that the content is loaded+   */+  get isLoaded() {+    return this._loaded;+  }+  isReady() {+    return this.isLoaded;+  }+  /**+   * Gets or sets a boolean indicating if pointers should only be validated on pixels with alpha > 0.+   * Beware using this as this will consume more memory as the image has to be stored twice+   */+  get detectPointerOnOpaqueOnly() {+    return this._detectPointerOnOpaqueOnly;+  }+  set detectPointerOnOpaqueOnly(i) {+    this._detectPointerOnOpaqueOnly !== i && (this._detectPointerOnOpaqueOnly = i);+  }+  /**+   * Gets or sets the left value for slicing (9-patch)+   */+  get sliceLeft() {+    return this._sliceLeft;+  }+  set sliceLeft(i) {+    this._sliceLeft !== i && (this._sliceLeft = i, this._markAsDirty());+  }+  /**+   * Gets or sets the right value for slicing (9-patch)+   */+  get sliceRight() {+    return this._sliceRight;+  }+  set sliceRight(i) {+    this._sliceRight !== i && (this._sliceRight = i, this._markAsDirty());+  }+  /**+   * Gets or sets the top value for slicing (9-patch)+   */+  get sliceTop() {+    return this._sliceTop;+  }+  set sliceTop(i) {+    this._sliceTop !== i && (this._sliceTop = i, this._markAsDirty());+  }+  /**+   * Gets or sets the bottom value for slicing (9-patch)+   */+  get sliceBottom() {+    return this._sliceBottom;+  }+  set sliceBottom(i) {+    this._sliceBottom !== i && (this._sliceBottom = i, this._markAsDirty());+  }+  /**+   * Gets or sets the left coordinate in the source image+   */+  get sourceLeft() {+    return this._sourceLeft;+  }+  set sourceLeft(i) {+    this._sourceLeft !== i && (this._sourceLeft = i, this._markAsDirty());+  }+  /**+   * Gets or sets the top coordinate in the source image+   */+  get sourceTop() {+    return this._sourceTop;+  }+  set sourceTop(i) {+    this._sourceTop !== i && (this._sourceTop = i, this._markAsDirty());+  }+  /**+   * Gets or sets the width to capture in the source image+   */+  get sourceWidth() {+    return this._sourceWidth;+  }+  set sourceWidth(i) {+    this._sourceWidth !== i && (this._sourceWidth = i, this._markAsDirty());+  }+  /**+   * Gets or sets the height to capture in the source image+   */+  get sourceHeight() {+    return this._sourceHeight;+  }+  set sourceHeight(i) {+    this._sourceHeight !== i && (this._sourceHeight = i, this._markAsDirty());+  }+  /**+   * Gets the image width+   */+  get imageWidth() {+    return this._imageWidth;+  }+  /**+   * Gets the image height+   */+  get imageHeight() {+    return this._imageHeight;+  }+  /**+   * Gets or sets a boolean indicating if nine patch slices (left, top, right, bottom) should be read from image data+   */+  get populateNinePatchSlicesFromImage() {+    return this._populateNinePatchSlicesFromImage;+  }+  set populateNinePatchSlicesFromImage(i) {+    this._populateNinePatchSlicesFromImage !== i && (this._populateNinePatchSlicesFromImage = i, this._populateNinePatchSlicesFromImage && this._loaded && this._extractNinePatchSliceDataFromImage());+  }+  /** Indicates if the format of the image is SVG */+  get isSVG() {+    return this._isSVG;+  }+  /** Gets the status of the SVG attributes computation (sourceLeft, sourceTop, sourceWidth, sourceHeight) */+  get svgAttributesComputationCompleted() {+    return this._svgAttributesComputationCompleted;+  }+  /**+   * Gets or sets a boolean indicating if the image can force its container to adapt its size+   * @see https://doc.babylonjs.com/features/featuresDeepDive/gui/gui#image+   */+  get autoScale() {+    return this._autoScale;+  }+  set autoScale(i) {+    this._autoScale !== i && (this._autoScale = i, i && this._loaded && this.synchronizeSizeWithContent());+  }+  /** Gets or sets the stretching mode used by the image */+  get stretch() {+    return this._stretch;+  }+  set stretch(i) {+    this._stretch !== i && (this._stretch = i, this._markAsDirty());+  }+  /**+   * @internal+   */+  _rotate90(i, d = !1) {+    const g = this._domImage.width, y = this._domImage.height, M = this._host?.getScene()?.getEngine() || md.LastCreatedEngine;+    if (!M)+      throw new Error("Invalid engine. Unable to create a canvas.");+    const N = M.createCanvas(y, g), O = N.getContext("2d");+    O.translate(N.width / 2, N.height / 2), O.rotate(i * Math.PI / 2), O.drawImage(this._domImage, 0, 0, g, y, -g / 2, -y / 2, g, y);+    const F = N.toDataURL("image/jpg"), ne = new Ft(this.name + "rotated", F);+    return d && (ne._stretch = this._stretch, ne._autoScale = this._autoScale, ne._cellId = this._cellId, ne._cellWidth = i % 1 ? this._cellHeight : this._cellWidth, ne._cellHeight = i % 1 ? this._cellWidth : this._cellHeight), this._handleRotationForSVGImage(this, ne, i), this._imageDataCache.data = null, ne;+  }+  _handleRotationForSVGImage(i, d, g) {+    i._isSVG && (i._svgAttributesComputationCompleted ? (this._rotate90SourceProperties(i, d, g), this._markAsDirty()) : i.onSVGAttributesComputedObservable.addOnce(() => {+      this._rotate90SourceProperties(i, d, g), this._markAsDirty();+    }));+  }+  _rotate90SourceProperties(i, d, g) {+    let y = i.sourceLeft, M = i.sourceTop, N = i.domImage.width, O = i.domImage.height, F = y, ne = M, $ = i.sourceWidth, Q = i.sourceHeight;+    if (g != 0) {+      const X = g < 0 ? -1 : 1;+      g = g % 4;+      for (let he = 0; he < Math.abs(g); ++he)+        F = -(M - O / 2) * X + O / 2, ne = (y - N / 2) * X + N / 2, [$, Q] = [Q, $], g < 0 ? ne -= Q : F -= $, y = F, M = ne, [N, O] = [O, N];+    }+    d.sourceLeft = F, d.sourceTop = ne, d.sourceWidth = $, d.sourceHeight = Q;+  }+  _extractNinePatchSliceDataFromImage() {+    const i = this._domImage.width, d = this._domImage.height;+    if (!this._workingCanvas) {+      const N = this._host?.getScene()?.getEngine() || md.LastCreatedEngine;+      if (!N)+        throw new Error("Invalid engine. Unable to create a canvas.");+      this._workingCanvas = N.createCanvas(i, d);+    }+    const y = this._workingCanvas.getContext("2d");+    y.drawImage(this._domImage, 0, 0, i, d);+    const M = y.getImageData(0, 0, i, d);+    this._sliceLeft = -1, this._sliceRight = -1;+    for (let N = 0; N < i; N++) {+      const O = M.data[N * 4 + 3];+      if (O > 127 && this._sliceLeft === -1) {+        this._sliceLeft = N;+        continue;+      }+      if (O < 127 && this._sliceLeft > -1) {+        this._sliceRight = N;+        break;+      }+    }+    this._sliceTop = -1, this._sliceBottom = -1;+    for (let N = 0; N < d; N++) {+      const O = M.data[N * i * 4 + 3];+      if (O > 127 && this._sliceTop === -1) {+        this._sliceTop = N;+        continue;+      }+      if (O < 127 && this._sliceTop > -1) {+        this._sliceBottom = N;+        break;+      }+    }+  }+  /**+   * Gets or sets the internal DOM image used to render the control+   */+  set domImage(i) {+    this._domImage = i, this._loaded = !1, this._imageDataCache.data = null, this._domImage.width ? this._onImageLoaded() : this._domImage.onload = () => {+      this._onImageLoaded();+    };+  }+  get domImage() {+    return this._domImage;+  }+  _onImageLoaded() {+    this._imageDataCache.data = null, this._imageWidth = this._domImage.width, this._imageHeight = this._domImage.height, this._loaded = !0, this._populateNinePatchSlicesFromImage && this._extractNinePatchSliceDataFromImage(), this._autoScale && this.synchronizeSizeWithContent(), this.onImageLoadedObservable.notifyObservers(this), this._markAsDirty();+  }+  /**+   * Gets the image source url+   */+  get source() {+    return this._source;+  }+  /**+   * Resets the internal Image Element cache. Can reduce memory usage.+   */+  static ResetImageCache() {+    Ft.SourceImgCache.clear();+  }+  _removeCacheUsage(i) {+    const d = i && Ft.SourceImgCache.get(i);+    if (d) {+      d.timesUsed -= 1;+      const g = d.img;+      g.parentNode && g.parentNode.removeChild(g), d.timesUsed === 0 && Ft.SourceImgCache.delete(i);+    }+  }+  /**+   * Gets or sets image source url+   */+  set source(i) {+    if (this._urlRewriter && i && (i = this._urlRewriter(i)), this._source === i)+      return;+    this._removeCacheUsage(this._source), this._loaded = !1, this._source = i, this._imageDataCache.data = null, i && (i = this._svgCheck(i));+    const d = this._host?.getScene()?.getEngine() || md.LastCreatedEngine;+    if (!d)+      return;+    if (i && Ft.SourceImgCache.has(i)) {+      const M = Ft.SourceImgCache.get(i);+      this._domImage = M.img, M.timesUsed += 1, M.loaded ? this._onImageLoaded() : M.waitingForLoadCallback.push(this._onImageLoaded.bind(this));+      return;+    }+    this._domImage = d.createCanvasImage();+    const g = this._domImage;+    let y = !1;+    g.style && this._source?.endsWith(".svg") && (g.style.visibility = "hidden", g.style.position = "absolute", g.style.top = "0", d.getRenderingCanvas()?.parentNode?.appendChild(g), y = !0), i && Ft.SourceImgCache.set(i, { img: this._domImage, timesUsed: 1, loaded: !1, waitingForLoadCallback: [this._onImageLoaded.bind(this)] }), this._domImage.onload = () => {+      if (i) {+        const M = Ft.SourceImgCache.get(i);+        if (M) {+          M.loaded = !0;+          for (const N of M.waitingForLoadCallback)+            N();+          M.waitingForLoadCallback.length = 0, y && g.remove();+          return;+        }+      }+      this._onImageLoaded(), y && g.remove();+    }, i && (Lr.SetCorsBehavior(i, this._domImage), Lr.SetReferrerPolicyBehavior(this.referrerPolicy, this._domImage), this._domImage.src = i);+  }+  _sanitizeSVG(i) {+    if (i.indexOf("<svg") === -1)+      return i;+    const g = new DOMParser().parseFromString(i, "image/svg+xml"), y = ["script", "iframe", "foreignObject", "object", "embed", "link", "style"], M = [/^on/i, /^xlink:href$/, /^href$/];+    y.forEach((O) => {+      const F = g.getElementsByTagName(O);+      for (let ne = F.length - 1; ne >= 0; ne--)+        F[ne].remove();+    });+    function N(O) {+      if (O.attributes)+        for (let F = O.attributes.length - 1; F >= 0; F--) {+          const ne = O.attributes[F], $ = ne.name, Q = ne.value;+          M.some((X) => X.test($)) && O.removeAttribute($), typeof Q == "string" && Q.trim().toLowerCase().startsWith("javascript:") && O.removeAttribute($);+        }+      for (let F = 0; F < O.children.length; F++)+        N(O.children[F]);+    }+    return N(g.documentElement), new XMLSerializer().serializeToString(g);+  }+  /**+   * Checks for svg document with icon id present+   * @param value the source svg+   * @returns the svg+   */+  _svgCheck(i) {+    if (typeof window > "u" || typeof document > "u" || !window.SVGSVGElement)+      return i;+    if (window.SVGSVGElement && i.search(/(\.svg|\.svg?[?|#].*)$/gi) !== -1 && i.indexOf("#") === i.lastIndexOf("#")) {+      this._isSVG = !0, i = this._sanitizeSVG(i);+      const d = i.split("#")[0], g = i.split("#")[1], y = document.body.querySelector('object[data="' + d + '"]');+      if (y) {+        const M = y.contentDocument;+        if (M && M.documentElement) {+          const N = M.documentElement.getAttribute("viewBox"), O = Number(M.documentElement.getAttribute("width")), F = Number(M.documentElement.getAttribute("height"));+          if (M.getElementById(g) && N && O && F)+            return this._getSVGAttribs(y, g), i;+        }+        y.addEventListener("load", () => {+          this._getSVGAttribs(y, g);+        });+      } else {+        const M = document.createElement("object");+        M.data = d, M.type = "image/svg+xml", M.width = "0%", M.height = "0%", document.body.appendChild(M), M.onload = () => {+          const N = document.body.querySelector('object[data="' + d + '"]');+          N && this._getSVGAttribs(N, g);+        };+      }+      return d;+    } else+      return i;+  }+  /**+   * Sets sourceLeft, sourceTop, sourceWidth, sourceHeight automatically+   * given external svg file and icon id+   * @param svgsrc+   * @param elemid+   */+  _getSVGAttribs(i, d) {+    const g = i.contentDocument;+    if (g && g.documentElement) {+      const y = g.documentElement.getAttribute("viewBox"), M = Number(g.documentElement.getAttribute("width")), N = Number(g.documentElement.getAttribute("height")), O = g.getElementById(d);+      if (y && M && N && O) {+        const F = Number(y.split(" ")[2]), ne = Number(y.split(" ")[3]), $ = O.getBBox();+        let Q = 1, X = 1, he = 0, Me = 0;+        const p = O.transform?.baseVal.consolidate();+        if (p) {+          const De = p.matrix;+          Q = De.a, X = De.d, he = De.e, Me = De.f;+        }+        this.sourceLeft = (Q * $.x + he) * M / F, this.sourceTop = (X * $.y + Me) * N / ne, this.sourceWidth = $.width * Q * (M / F), this.sourceHeight = $.height * X * (N / ne), this._svgAttributesComputationCompleted = !0, this.onSVGAttributesComputedObservable.notifyObservers(this);+      }+    }+  }+  /**+   * Gets or sets the cell width to use when animation sheet is enabled+   * @see https://doc.babylonjs.com/features/featuresDeepDive/gui/gui#image+   */+  get cellWidth() {+    return this._cellWidth;+  }+  set cellWidth(i) {+    this._cellWidth !== i && (this._cellWidth = i, this._markAsDirty());+  }+  /**+   * Gets or sets the cell height to use when animation sheet is enabled+   * @see https://doc.babylonjs.com/features/featuresDeepDive/gui/gui#image+   */+  get cellHeight() {+    return this._cellHeight;+  }+  set cellHeight(i) {+    this._cellHeight !== i && (this._cellHeight = i, this._markAsDirty());+  }+  /**+   * Gets or sets the cell id to use (this will turn on the animation sheet mode)+   * @see https://doc.babylonjs.com/features/featuresDeepDive/gui/gui#image+   */+  get cellId() {+    return this._cellId;+  }+  set cellId(i) {+    this._cellId !== i && (this._cellId = i, this._markAsDirty());+  }+  /**+   * Creates a new Image+   * @param name defines the control name+   * @param url defines the image url+   */+  constructor(i, d = null) {+    super(i), this.name = i, this._workingCanvas = null, this._loaded = !1, this._stretch = Ft.STRETCH_FILL, this._source = null, this._autoScale = !1, this._sourceLeft = 0, this._sourceTop = 0, this._sourceWidth = 0, this._sourceHeight = 0, this._svgAttributesComputationCompleted = !1, this._isSVG = !1, this._cellWidth = 0, this._cellHeight = 0, this._cellId = -1, this._populateNinePatchSlicesFromImage = !1, this._imageDataCache = { data: null, key: "" }, this.onImageLoadedObservable = new qt(), this.onSVGAttributesComputedObservable = new qt(), this.source = d;+  }+  /**+   * Tests if a given coordinates belong to the current control+   * @param x defines x coordinate to test+   * @param y defines y coordinate to test+   * @returns true if the coordinates are inside the control+   */+  contains(i, d) {+    if (!super.contains(i, d))+      return !1;+    if (!this._detectPointerOnOpaqueOnly || !this._workingCanvas)+      return !0;+    const g = this._currentMeasure.width | 0, y = this._currentMeasure.height | 0, M = g + "_" + y;+    let N = this._imageDataCache.data;+    if (!N || this._imageDataCache.key !== M) {+      const ne = this._workingCanvas.getContext("2d");+      this._imageDataCache.data = N = ne.getImageData(0, 0, g, y).data, this._imageDataCache.key = M;+    }+    return i = i - this._currentMeasure.left | 0, d = d - this._currentMeasure.top | 0, N[(i + d * g) * 4 + 3] > 0;+  }+  _getTypeName() {+    return "Image";+  }+  /** Force the control to synchronize with its content */+  synchronizeSizeWithContent() {+    this._loaded && (this.width = this._domImage.width + "px", this.height = this._domImage.height + "px");+  }+  _processMeasures(i, d) {+    if (this._loaded)+      switch (this._stretch) {+        case Ft.STRETCH_NONE:+          break;+        case Ft.STRETCH_FILL:+          break;+        case Ft.STRETCH_UNIFORM:+          break;+        case Ft.STRETCH_NINE_PATCH:+          break;+        case Ft.STRETCH_EXTEND:+          this._autoScale && this.synchronizeSizeWithContent(), this.parent && this.parent.parent && (this.parent.adaptWidthToChildren = !0, this.parent.adaptHeightToChildren = !0);+          break;+      }+    super._processMeasures(i, d);+  }+  _prepareWorkingCanvasForOpaqueDetection() {+    if (!this._detectPointerOnOpaqueOnly)+      return;+    const i = this._currentMeasure.width, d = this._currentMeasure.height;+    if (!this._workingCanvas) {+      const M = this._host?.getScene()?.getEngine() || md.LastCreatedEngine;+      if (!M)+        throw new Error("Invalid engine. Unable to create a canvas.");+      this._workingCanvas = M.createCanvas(i, d);+    }+    this._workingCanvas.getContext("2d").clearRect(0, 0, i, d);+  }+  _drawImage(i, d, g, y, M, N, O, F, ne) {+    if (i.drawImage(this._domImage, d, g, y, M, N, O, F, ne), !this._detectPointerOnOpaqueOnly)+      return;+    const $ = i.getTransform(), X = this._workingCanvas.getContext("2d");+    X.save();+    const he = N - this._currentMeasure.left, Me = O - this._currentMeasure.top;+    X.setTransform($.a, $.b, $.c, $.d, (he + F) / 2, (Me + ne) / 2), X.translate(-(he + F) / 2, -(Me + ne) / 2), X.drawImage(this._domImage, d, g, y, M, he, Me, F, ne), X.restore();+  }+  _draw(i) {+    i.save(), (this.shadowBlur || this.shadowOffsetX || this.shadowOffsetY) && (i.shadowColor = this.shadowColor, i.shadowBlur = this.shadowBlur, i.shadowOffsetX = this.shadowOffsetX * this._host.idealRatio, i.shadowOffsetY = this.shadowOffsetY * this._host.idealRatio);+    let d, g, y, M;+    if (this.cellId == -1)+      d = this._sourceLeft, g = this._sourceTop, y = this._sourceWidth ? this._sourceWidth : this._imageWidth, M = this._sourceHeight ? this._sourceHeight : this._imageHeight;+    else {+      const N = this._domImage.naturalWidth / this.cellWidth, O = this.cellId / N >> 0, F = this.cellId % N;+      d = this.cellWidth * F, g = this.cellHeight * O, y = this.cellWidth, M = this.cellHeight;+    }+    if (this._prepareWorkingCanvasForOpaqueDetection(), this._applyStates(i), this._loaded)+      switch (this._stretch) {+        case Ft.STRETCH_NONE:+          this._drawImage(i, d, g, y, M, this._currentMeasure.left, this._currentMeasure.top, this._currentMeasure.width, this._currentMeasure.height);+          break;+        case Ft.STRETCH_FILL:+          this._drawImage(i, d, g, y, M, this._currentMeasure.left, this._currentMeasure.top, this._currentMeasure.width, this._currentMeasure.height);+          break;+        case Ft.STRETCH_UNIFORM: {+          const N = this._currentMeasure.width / y, O = this._currentMeasure.height / M, F = Math.min(N, O), ne = (this._currentMeasure.width - y * F) / 2, $ = (this._currentMeasure.height - M * F) / 2;+          this._drawImage(i, d, g, y, M, this._currentMeasure.left + ne, this._currentMeasure.top + $, y * F, M * F);+          break;+        }+        case Ft.STRETCH_EXTEND:+          this._drawImage(i, d, g, y, M, this._currentMeasure.left, this._currentMeasure.top, this._currentMeasure.width, this._currentMeasure.height);+          break;+        case Ft.STRETCH_NINE_PATCH:+          this._renderNinePatch(i, d, g, y, M);+          break;+      }+    i.restore();+  }+  _renderNinePatch(i, d, g, y, M) {+    const N = this.host.idealRatio, O = this._sliceLeft, F = this._sliceTop, ne = M - this._sliceBottom, $ = y - this._sliceRight, Q = this._sliceRight - this._sliceLeft, X = this._sliceBottom - this._sliceTop, he = Math.round(O * N), Me = Math.round(F * N), p = Math.round(ne * N), De = Math.round($ * N), Ke = Math.round(this._currentMeasure.width) - De - he + 2, oe = Math.round(this._currentMeasure.height) - p - Me + 2, Bt = Math.round(this._currentMeasure.left) + he - 1, xe = Math.round(this._currentMeasure.top) + Me - 1, yt = Math.round(this._currentMeasure.left + this._currentMeasure.width) - De, at = Math.round(this._currentMeasure.top + this._currentMeasure.height) - p;+    this._drawImage(i, d, g, O, F, this._currentMeasure.left, this._currentMeasure.top, he, Me), this._drawImage(i, d + this._sliceLeft, g, Q, F, Bt + 1, this._currentMeasure.top, Ke - 2, Me), this._drawImage(i, d + this._sliceRight, g, $, F, yt, this._currentMeasure.top, De, Me), this._drawImage(i, d, g + this._sliceTop, O, X, this._currentMeasure.left, xe + 1, he, oe - 2), this._drawImage(i, d + this._sliceLeft, g + this._sliceTop, Q, X, Bt + 1, xe + 1, Ke - 2, oe - 2), this._drawImage(i, d + this._sliceRight, g + this._sliceTop, $, X, yt, xe + 1, De, oe - 2), this._drawImage(i, d, g + this._sliceBottom, O, ne, this._currentMeasure.left, at, he, p), this._drawImage(i, d + this.sliceLeft, g + this._sliceBottom, Q, ne, Bt + 1, at, Ke - 2, p), this._drawImage(i, d + this._sliceRight, g + this._sliceBottom, $, ne, yt, at, De, p);+  }+  dispose() {+    super.dispose(), this.onImageLoadedObservable.clear(), this.onSVGAttributesComputedObservable.clear(), this._removeCacheUsage(this._source);+  }+}+Ft.SourceImgCache = /* @__PURE__ */ new Map();+Ft.STRETCH_NONE = 0;+Ft.STRETCH_FILL = 1;+Ft.STRETCH_UNIFORM = 2;+Ft.STRETCH_EXTEND = 3;+Ft.STRETCH_NINE_PATCH = 4;+q([+  H()+], Ft.prototype, "detectPointerOnOpaqueOnly", null);+q([+  H()+], Ft.prototype, "sliceLeft", null);+q([+  H()+], Ft.prototype, "sliceRight", null);+q([+  H()+], Ft.prototype, "sliceTop", null);+q([+  H()+], Ft.prototype, "sliceBottom", null);+q([+  H()+], Ft.prototype, "sourceLeft", null);+q([+  H()+], Ft.prototype, "sourceTop", null);+q([+  H()+], Ft.prototype, "sourceWidth", null);+q([+  H()+], Ft.prototype, "sourceHeight", null);+q([+  H()+], Ft.prototype, "populateNinePatchSlicesFromImage", null);+q([+  H()+], Ft.prototype, "autoScale", null);+q([+  H()+], Ft.prototype, "stretch", null);+q([+  H()+], Ft.prototype, "source", null);+q([+  H()+], Ft.prototype, "cellWidth", null);+q([+  H()+], Ft.prototype, "cellHeight", null);+q([+  H()+], Ft.prototype, "cellId", null);+kr("BABYLON.GUI.Image", Ft);+class Bs extends si {+  /**+   * Returns the image part of the button (if any)+   */+  get image() {+    return this._image;+  }+  /**+   * Returns the TextBlock part of the button (if any)+   */+  get textBlock() {+    return this._textBlock;+  }+  /**+   * Creates a new Button+   * @param name defines the name of the button+   */+  constructor(i) {+    super(i), this.name = i, this.thickness = 1, this.isPointerBlocker = !0;+    let d = null;+    this.pointerEnterAnimation = () => {+      d = this.alpha, this.alpha -= 0.1;+    }, this.pointerOutAnimation = () => {+      d !== null && (this.alpha = d);+    }, this.pointerDownAnimation = () => {+      this.scaleX -= 0.05, this.scaleY -= 0.05;+    }, this.pointerUpAnimation = () => {+      this.scaleX += 0.05, this.scaleY += 0.05;+    };+  }+  _getTypeName() {+    return "Button";+  }+  // While being a container, the button behaves like a control.+  /**+   * @internal+   */+  _processPicking(i, d, g, y, M, N, O, F) {+    if (!this._isEnabled || !this.isHitTestVisible || !this.isVisible || this.notRenderable || !super.contains(i, d))+      return !1;+    if (this.delegatePickingToChildren) {+      let ne = !1;+      for (let $ = this._children.length - 1; $ >= 0; $--) {+        const Q = this._children[$];+        if (Q.isEnabled && Q.isHitTestVisible && Q.isVisible && !Q.notRenderable && Q.contains(i, d)) {+          ne = !0;+          break;+        }+      }+      if (!ne)+        return !1;+    }+    return this._processObservables(y, i, d, g, M, N, O, F), !0;+  }+  /**+   * @internal+   */+  _onPointerEnter(i, d) {+    return super._onPointerEnter(i, d) ? (!this.isReadOnly && this.pointerEnterAnimation && this.pointerEnterAnimation(), !0) : !1;+  }+  /**+   * @internal+   */+  _onPointerOut(i, d, g = !1) {+    !this.isReadOnly && this.pointerOutAnimation && this.pointerOutAnimation(), super._onPointerOut(i, d, g);+  }+  /**+   * @internal+   */+  _onPointerDown(i, d, g, y, M) {+    return super._onPointerDown(i, d, g, y, M) ? (!this.isReadOnly && this.pointerDownAnimation && this.pointerDownAnimation(), !0) : !1;+  }+  _getRectangleFill(i) {+    return this.isEnabled ? this._getBackgroundColor(i) : this._disabledColor;+  }+  /**+   * @internal+   */+  _onPointerUp(i, d, g, y, M, N) {+    !this.isReadOnly && this.pointerUpAnimation && this.pointerUpAnimation(), super._onPointerUp(i, d, g, y, M, N);+  }+  /**+   * Serializes the current button+   * @param serializationObject defines the JSON serialized object+   * @param force force serialization even if isSerializable === false+   * @param allowCanvas defines if the control is allowed to use a Canvas2D object to serialize+   */+  serialize(i, d, g) {+    super.serialize(i, d, g), !(!this.isSerializable && !d) && (this._textBlock && (i.textBlockName = this._textBlock.name), this._image && (i.imageName = this._image.name));+  }+  /**+   * @internal+   */+  _parseFromContent(i, d) {+    super._parseFromContent(i, d), i.textBlockName && (this._textBlock = this.getChildByName(i.textBlockName)), i.imageName && (this._image = this.getChildByName(i.imageName));+  }+  // Statics+  /**+   * Creates a new button made with an image and a text+   * @param name defines the name of the button+   * @param text defines the text of the button+   * @param imageUrl defines the url of the image+   * @returns a new Button+   */+  static CreateImageButton(i, d, g) {+    const y = new this(i), M = new zr(i + "_button", d);+    M.textWrapping = !0, M.textHorizontalAlignment = pe.HORIZONTAL_ALIGNMENT_CENTER, M.paddingLeft = "20%", y.addControl(M);+    const N = new Ft(i + "_icon", g);+    return N.width = "20%", N.stretch = Ft.STRETCH_UNIFORM, N.horizontalAlignment = pe.HORIZONTAL_ALIGNMENT_LEFT, y.addControl(N), y._image = N, y._textBlock = M, y;+  }+  /**+   * Creates a new button made with an image+   * @param name defines the name of the button+   * @param imageUrl defines the url of the image+   * @returns a new Button+   */+  static CreateImageOnlyButton(i, d) {+    const g = new this(i), y = new Ft(i + "_icon", d);+    return y.stretch = Ft.STRETCH_FILL, y.horizontalAlignment = pe.HORIZONTAL_ALIGNMENT_LEFT, g.addControl(y), g._image = y, g;+  }+  /**+   * Creates a new button made with a text+   * @param name defines the name of the button+   * @param text defines the text of the button+   * @returns a new Button+   */+  static CreateSimpleButton(i, d) {+    const g = new this(i), y = new zr(i + "_button", d);+    return y.textWrapping = !0, y.textHorizontalAlignment = pe.HORIZONTAL_ALIGNMENT_CENTER, g.addControl(y), g._textBlock = y, g;+  }+  /**+   * Creates a new button made with an image and a centered text+   * @param name defines the name of the button+   * @param text defines the text of the button+   * @param imageUrl defines the url of the image+   * @returns a new Button+   */+  static CreateImageWithCenterTextButton(i, d, g) {+    const y = new this(i), M = new Ft(i + "_icon", g);+    M.stretch = Ft.STRETCH_FILL, y.addControl(M);+    const N = new zr(i + "_button", d);+    return N.textWrapping = !0, N.textHorizontalAlignment = pe.HORIZONTAL_ALIGNMENT_CENTER, y.addControl(N), y._image = M, y._textBlock = N, y;+  }+}+kr("BABYLON.GUI.Button", Bs);+class Gi extends wi {+  /** Gets or sets a boolean indicating if the stack panel is vertical or horizontal*/+  get isVertical() {+    return this._isVertical;+  }+  set isVertical(i) {+    this._isVertical !== i && (this._isVertical = i, this._markAsDirty());+  }+  /**+   * Gets or sets the spacing (in pixels) between each child.+   */+  get spacing() {+    return this._spacing;+  }+  set spacing(i) {+    this._spacing !== i && (this._spacing = i, this._markAsDirty());+  }+  /**+   * Gets or sets panel width.+   * This value should not be set when in horizontal mode as it will be computed automatically+   */+  set width(i) {+    this._doNotTrackManualChanges || (this._manualWidth = !0), this._width.toString(this._host) !== i && this._width.fromString(i) && this._markAsDirty();+  }+  get width() {+    return this._width.toString(this._host);+  }+  /**+   * Gets or sets panel height.+   * This value should not be set when in vertical mode as it will be computed automatically+   */+  set height(i) {+    this._doNotTrackManualChanges || (this._manualHeight = !0), this._height.toString(this._host) !== i && this._height.fromString(i) && this._markAsDirty();+  }+  get height() {+    return this._height.toString(this._host);+  }+  /**+   * Creates a new StackPanel+   * @param name defines control name+   */+  constructor(i) {+    super(i), this.name = i, this._isVertical = !0, this._manualWidth = !1, this._manualHeight = !1, this._doNotTrackManualChanges = !1, this._spacing = 0, this.ignoreLayoutWarnings = !1;+  }+  _getTypeName() {+    return "StackPanel";+  }+  /**+   * @internal+   */+  _preMeasure(i, d) {+    for (const g of this._children)+      this._isVertical ? g.verticalAlignment = pe.VERTICAL_ALIGNMENT_TOP : g.horizontalAlignment = pe.HORIZONTAL_ALIGNMENT_LEFT;+    super._preMeasure(i, d);+  }+  _additionalProcessing(i, d) {+    super._additionalProcessing(i, d), this._measureForChildren.copyFrom(i), this._measureForChildren.left = this._currentMeasure.left, this._measureForChildren.top = this._currentMeasure.top, (!this.isVertical || this._manualWidth) && (this._measureForChildren.width = this._currentMeasure.width), (this.isVertical || this._manualHeight) && (this._measureForChildren.height = this._currentMeasure.height);+  }+  _postMeasure() {+    let i = 0, d = 0;+    const g = this._children.length, y = this._spacing * this._host.idealRatio;+    for (let O = 0; O < g; O++) {+      const F = this._children[O];+      if (!(!F.isVisible || F.notRenderable))+        if (this._isVertical) {+          const ne = d + "px";+          F.top !== ne && (F.top = ne, this._rebuildLayout = !0, F._top.ignoreAdaptiveScaling = !0), !this.ignoreLayoutWarnings && !F.isDimensionFullyDefined("height") ? zh.Warn(`Control (Name:${F.name}, UniqueId:${F.uniqueId}) is using height in percentage mode inside a vertical StackPanel`, 1) : d += F._currentMeasure.height + F._paddingTopInPixels + F._paddingBottomInPixels + (O < g - 1 ? y : 0);+        } else {+          const ne = i + "px";+          F.left !== ne && (F.left = ne, this._rebuildLayout = !0, F._left.ignoreAdaptiveScaling = !0), !this.ignoreLayoutWarnings && !F.isDimensionFullyDefined("width") ? zh.Warn(`Control (Name:${F.name}, UniqueId:${F.uniqueId}) is using width in percentage mode inside a horizontal StackPanel`, 1) : i += F._currentMeasure.width + F._paddingLeftInPixels + F._paddingRightInPixels + (O < g - 1 ? y : 0);+        }+    }+    i += this._paddingLeftInPixels + this._paddingRightInPixels, d += this._paddingTopInPixels + this._paddingBottomInPixels, this._doNotTrackManualChanges = !0;+    let M = !1, N = !1;+    if ((!this._manualHeight || this.adaptHeightToChildren) && this._isVertical) {+      const O = this.height;+      this.height = d + "px", N = O !== this.height || !this._height.ignoreAdaptiveScaling;+    }+    if ((!this._manualWidth || this.adaptWidthToChildren) && !this._isVertical) {+      const O = this.width;+      this.width = i + "px", M = O !== this.width || !this._width.ignoreAdaptiveScaling;+    }+    N && (this._height.ignoreAdaptiveScaling = !0), M && (this._width.ignoreAdaptiveScaling = !0), this._doNotTrackManualChanges = !1, (M || N) && (this._rebuildLayout = !0), super._postMeasure();+  }+  _getManualDim(i) {+    return i === "width" ? this._manualWidth : this._manualHeight;+  }+  isDimensionFullyDefined(i) {+    if (i === "height" ? this.isVertical : !this.isVertical && !this._getManualDim(i)) {+      for (const d of this._children)+        if (!d.isDimensionFullyDefined(i))+          return !1;+      return !0;+    }+    return this.getDimension(i).isPixel || this._getAdaptDimTo(i);+  }+  /**+   * Serializes the current control+   * @param serializationObject defined the JSON serialized object+   * @param force force serialization even if isSerializable === false+   * @param allowCanvas defines if the control is allowed to use a Canvas2D object to serialize+   */+  serialize(i, d, g) {+    super.serialize(i, d, g), !(!this.isSerializable && !d) && (i.manualWidth = this._manualWidth, i.manualHeight = this._manualHeight);+  }+  /**+   * @internal+   */+  _parseFromContent(i, d) {+    this._manualWidth = i.manualWidth, this._manualHeight = i.manualHeight, super._parseFromContent(i, d);+  }+}+q([+  H()+], Gi.prototype, "ignoreLayoutWarnings", void 0);+q([+  H()+], Gi.prototype, "isVertical", null);+q([+  H()+], Gi.prototype, "spacing", null);+q([+  H()+], Gi.prototype, "width", null);+q([+  H()+], Gi.prototype, "height", null);+kr("BABYLON.GUI.StackPanel", Gi);+class pc extends pe {+  /** Gets or sets border thickness  */+  get thickness() {+    return this._thickness;+  }+  set thickness(i) {+    this._thickness !== i && (this._thickness = i, this._markAsDirty());+  }+  /** Gets or sets a value indicating the ratio between overall size and check size */+  get checkSizeRatio() {+    return this._checkSizeRatio;+  }+  set checkSizeRatio(i) {+    i = Math.max(Math.min(1, i), 0), this._checkSizeRatio !== i && (this._checkSizeRatio = i, this._markAsDirty());+  }+  /** Gets or sets background color */+  get background() {+    return this._background;+  }+  set background(i) {+    this._background !== i && (this._background = i, this._markAsDirty());+  }+  /** Gets or sets a boolean indicating if the checkbox is checked or not */+  get isChecked() {+    return this._isChecked;+  }+  set isChecked(i) {+    this._isChecked !== i && (this._isChecked = i, this._markAsDirty(), this.onIsCheckedChangedObservable.notifyObservers(i));+  }+  /**+   * Creates a new CheckBox+   * @param name defines the control name+   */+  constructor(i) {+    super(i), this.name = i, this._isChecked = !1, this._background = "black", this._checkSizeRatio = 0.8, this._thickness = 1, this.onIsCheckedChangedObservable = new qt(), this.isPointerBlocker = !0;+  }+  _getTypeName() {+    return "Checkbox";+  }+  /**+   * @internal+   */+  _draw(i) {+    i.save(), this._applyStates(i);+    const d = this._currentMeasure.width - this._thickness, g = this._currentMeasure.height - this._thickness;+    if ((this.shadowBlur || this.shadowOffsetX || this.shadowOffsetY) && (i.shadowColor = this.shadowColor, i.shadowBlur = this.shadowBlur, i.shadowOffsetX = this.shadowOffsetX * this._host.idealRatio, i.shadowOffsetY = this.shadowOffsetY * this._host.idealRatio), i.fillStyle = this._isEnabled ? this._background : this._disabledColor, i.fillRect(this._currentMeasure.left + this._thickness / 2, this._currentMeasure.top + this._thickness / 2, d, g), (this.shadowBlur || this.shadowOffsetX || this.shadowOffsetY) && (i.shadowBlur = 0, i.shadowOffsetX = 0, i.shadowOffsetY = 0), this._isChecked) {+      i.fillStyle = this._isEnabled ? this.color ? this.color : "#ffffff" : this._disabledColorItem;+      const y = d * this._checkSizeRatio, M = g * this._checkSizeRatio;+      i.fillRect(this._currentMeasure.left + this._thickness / 2 + (d - y) / 2, this._currentMeasure.top + this._thickness / 2 + (g - M) / 2, y, M);+    }+    i.strokeStyle = this.color, i.lineWidth = this._thickness, i.strokeRect(this._currentMeasure.left + this._thickness / 2, this._currentMeasure.top + this._thickness / 2, d, g), i.restore();+  }+  // Events+  /**+   * @internal+   */+  _onPointerDown(i, d, g, y, M) {+    return super._onPointerDown(i, d, g, y, M) ? (this.isReadOnly || (this.isChecked = !this.isChecked), !0) : !1;+  }+  /**+   * Utility function to easily create a checkbox with a header+   * @param title defines the label to use for the header+   * @param onValueChanged defines the callback to call when value changes+   * @returns a StackPanel containing the checkbox and a textBlock+   */+  static AddCheckBoxWithHeader(i, d) {+    const g = new Gi();+    g.isVertical = !1, g.height = "30px";+    const y = new pc();+    y.width = "20px", y.height = "20px", y.isChecked = !0, y.color = "green", y.onIsCheckedChangedObservable.add(d), g.addControl(y);+    const M = new zr();+    return M.text = i, M.width = "180px", M.paddingLeft = "5px", M.textHorizontalAlignment = pe.HORIZONTAL_ALIGNMENT_LEFT, M.color = "white", g.addControl(M), g;+  }+}+q([+  H()+], pc.prototype, "thickness", null);+q([+  H()+], pc.prototype, "checkSizeRatio", null);+q([+  H()+], pc.prototype, "background", null);+q([+  H()+], pc.prototype, "isChecked", null);+kr("BABYLON.GUI.Checkbox", pc);+class Ab {+  get text() {+    return this._characters ? this._characters.join("") : this._text;+  }+  set text(i) {+    this._text = i, this._characters = Array.from && Array.from(i);+  }+  get length() {+    return this._characters ? this._characters.length : this._text.length;+  }+  removePart(i, d, g) {+    if (this._text = this._text.slice(0, i) + (g || "") + this._text.slice(d), this._characters) {+      const y = g ? Array.from(g) : [];+      this._characters.splice(i, d - i, ...y);+    }+  }+  charAt(i) {+    return this._characters ? this._characters[i] : this._text.charAt(i);+  }+  substr(i, d) {+    if (this._characters) {+      isNaN(i) ? i = 0 : i >= 0 ? i = Math.min(i, this._characters.length) : i = this._characters.length + Math.max(i, -this._characters.length), d === void 0 ? d = this._characters.length - i : (isNaN(d) || d < 0) && (d = 0);+      const g = [];+      for (; --d >= 0; )+        g[d] = this._characters[i + d];+      return g.join("");+    }+    return this._text.substring(i, d ? d + i : void 0);+  }+  substring(i, d) {+    if (this._characters) {+      isNaN(i) ? i = 0 : i > this._characters.length ? i = this._characters.length : i < 0 && (i = 0), d === void 0 ? d = this._characters.length : isNaN(d) ? d = 0 : d > this._characters.length ? d = this._characters.length : d < 0 && (d = 0);+      const g = [];+      let y = 0;+      for (; i < d; )+        g[y++] = this._characters[i++];+      return g.join("");+    }+    return this._text.substring(i, d);+  }+  isWord(i) {+    const d = /\w/g;+    return this._characters ? this._characters[i].search(d) !== -1 : this._text.search(d) !== -1;+  }+}+class bo extends pe {+  /**+   * Gets or sets outlineWidth of the text to display+   */+  get outlineWidth() {+    return this._outlineWidth;+  }+  set outlineWidth(i) {+    this._outlineWidth !== i && (this._outlineWidth = i, this._markAsDirty());+  }+  /**+   * Gets or sets outlineColor of the text to display+   */+  get outlineColor() {+    return this._outlineColor;+  }+  set outlineColor(i) {+    this._outlineColor !== i && (this._outlineColor = i, this._markAsDirty());+  }+  /** Gets or sets the maximum width allowed by the control */+  get maxWidth() {+    return this._maxWidth.toString(this._host);+  }+  /** Gets the maximum width allowed by the control in pixels */+  get maxWidthInPixels() {+    return this._maxWidth.getValueInPixel(this._host, this._cachedParentMeasure.width);+  }+  set maxWidth(i) {+    this._maxWidth.toString(this._host) !== i && this._maxWidth.fromString(i) && this._markAsDirty();+  }+  /**+   * Gets or sets the text highlighter transparency; default: 0.4+   * @deprecated Please use highlighterOpacity instead+   */+  get highligherOpacity() {+    return this.highlighterOpacity;+  }+  set highligherOpacity(i) {+    this.highlighterOpacity = i;+  }+  /**+   * Gets or sets the text highlighter transparency; default: 0.4+   */+  get highlighterOpacity() {+    return this._highlighterOpacity;+  }+  set highlighterOpacity(i) {+    this._highlighterOpacity !== i && (this._highlighterOpacity = i, this._markAsDirty());+  }+  /** Gets or sets a boolean indicating whether to select complete text by default on input focus */+  get onFocusSelectAll() {+    return this._onFocusSelectAll;+  }+  set onFocusSelectAll(i) {+    this._onFocusSelectAll !== i && (this._onFocusSelectAll = i, this._markAsDirty());+  }+  /** Gets or sets the text hightlight color */+  get textHighlightColor() {+    return this._textHighlightColor;+  }+  set textHighlightColor(i) {+    this._textHighlightColor !== i && (this._textHighlightColor = i, this._markAsDirty());+  }+  /** Gets or sets control margin */+  get margin() {+    return this._margin.toString(this._host);+  }+  /** Gets control margin in pixels */+  get marginInPixels() {+    return this._margin.getValueInPixel(this._host, this._cachedParentMeasure.width);+  }+  set margin(i) {+    this._margin.toString(this._host) !== i && this._margin.fromString(i) && this._markAsDirty();+  }+  /** Gets or sets a boolean indicating if the control can auto stretch its width to adapt to the text */+  get autoStretchWidth() {+    return this._autoStretchWidth;+  }+  set autoStretchWidth(i) {+    this._autoStretchWidth !== i && (this._autoStretchWidth = i, this._markAsDirty());+  }+  /** Gets or sets border thickness */+  get thickness() {+    return this._thickness;+  }+  set thickness(i) {+    this._thickness !== i && (this._thickness = i, this._markAsDirty());+  }+  /** Gets or sets the background color when focused */+  get focusedBackground() {+    return this._focusedBackground;+  }+  set focusedBackground(i) {+    this._focusedBackground !== i && (this._focusedBackground = i, this._markAsDirty());+  }+  /** Gets or sets the background color when focused */+  set focusedColor(i) {+    this._focusedColor !== i && (this._focusedColor = i, this._markAsDirty());+  }+  /** Gets or sets the background color */+  get background() {+    return this._background;+  }+  set background(i) {+    this._background !== i && (this._background = i, this._markAsDirty());+  }+  /** Gets or sets the placeholder color */+  get placeholderColor() {+    return this._placeholderColor;+  }+  set placeholderColor(i) {+    this._placeholderColor !== i && (this._placeholderColor = i, this._markAsDirty());+  }+  /** Gets or sets the text displayed when the control is empty */+  get placeholderText() {+    return this._placeholderText;+  }+  set placeholderText(i) {+    this._placeholderText !== i && (this._placeholderText = i, this._markAsDirty());+  }+  /** Gets or sets the dead key. 0 to disable. */+  get deadKey() {+    return this._deadKey;+  }+  set deadKey(i) {+    this._deadKey = i;+  }+  /** Gets or sets the highlight text */+  get highlightedText() {+    return this._highlightedText;+  }+  set highlightedText(i) {+    this._highlightedText !== i && (this._highlightedText = i, this._markAsDirty());+  }+  /** Gets or sets if the current key should be added */+  get addKey() {+    return this._addKey;+  }+  set addKey(i) {+    this._addKey = i;+  }+  /** Gets or sets the value of the current key being entered */+  get currentKey() {+    return this._currentKey;+  }+  set currentKey(i) {+    this._currentKey = i;+  }+  /** Gets or sets the text displayed in the control */+  get text() {+    return this._textWrapper.text;+  }+  set text(i) {+    const d = i.toString();+    this._textWrapper || (this._textWrapper = new Ab()), this._textWrapper.text !== d && (this._textWrapper.text = d, this._textHasChanged());+  }+  _textHasChanged() {+    this._markAsDirty(), this.onTextChangedObservable.notifyObservers(this);+  }+  _applyStates(i) {+    super._applyStates(i), this.outlineWidth && (i.lineWidth = this.outlineWidth, i.strokeStyle = this.outlineColor);+  }+  /** Gets or sets control width */+  get width() {+    return this._width.toString(this._host);+  }+  set width(i) {+    this._width.toString(this._host) === i && !this._autoStretchWidth || (this._width.fromString(i) && this._markAsDirty(), this.autoStretchWidth = !1);+  }+  /**+   * Creates a new InputText+   * @param name defines the control name+   * @param text defines the text of the control+   */+  constructor(i, d = "") {+    super(i), this.name = i, this._placeholderText = "", this._background = "#222222", this._focusedBackground = "#000000", this._placeholderColor = "gray", this._thickness = 1, this._margin = new St(10, St.UNITMODE_PIXEL), this._autoStretchWidth = !0, this._maxWidth = new St(1, St.UNITMODE_PERCENTAGE, !1), this._blinkIsEven = !1, this._cursorOffset = 0, this._deadKey = !1, this._addKey = !0, this._currentKey = "", this._isTextHighlightOn = !1, this._textHighlightColor = "#d5e0ff", this._highlighterOpacity = 0.4, this._highlightedText = "", this._startHighlightIndex = 0, this._endHighlightIndex = 0, this._cursorIndex = -1, this._outlineWidth = 0, this._outlineColor = "white", this._onFocusSelectAll = !1, this._isPointerDown = !1, this.promptMessage = "Please enter text:", this.disableMobilePrompt = !1, this.onTextChangedObservable = new qt(), this.onBeforeKeyAddObservable = new qt(), this.onTextHighlightObservable = new qt(), this.onTextCopyObservable = new qt(), this.onTextCutObservable = new qt(), this.onTextPasteObservable = new qt(), this.text = d, this.isPointerBlocker = !0, this._focusedColor = "white";+  }+  /** @internal */+  onBlur() {+    this._isFocused = !1, this._scrollLeft = null, this._cursorOffset = 0, clearTimeout(this._blinkTimeout), this._markAsDirty(), this.onBlurObservable.notifyObservers(this), this._host.unRegisterClipboardEvents(), this._onClipboardObserver && this._host.onClipboardObservable.remove(this._onClipboardObserver);+    const i = this._host.getScene();+    this._onPointerDblTapObserver && i && i.onPointerObservable.remove(this._onPointerDblTapObserver);+  }+  /** @internal */+  onFocus() {+    if (!this._isEnabled)+      return;+    if (this._scrollLeft = null, this._isFocused = !0, this._blinkIsEven = !1, this._cursorOffset = 0, this._markAsDirty(), this.onFocusObservable.notifyObservers(this), this._focusedBy === "touch" && !this.disableMobilePrompt) {+      const d = prompt(this.promptMessage);+      d !== null && (this.text = d), this._host.focusedControl = null;+      return;+    }+    this._host.registerClipboardEvents(), this._onClipboardObserver = this._host.onClipboardObservable.add((d) => {+      switch (d.type) {+        case Ih.COPY:+          this._onCopyText(d.event), this.onTextCopyObservable.notifyObservers(this);+          break;+        case Ih.CUT:+          this._onCutText(d.event), this.onTextCutObservable.notifyObservers(this);+          break;+        case Ih.PASTE:+          this._onPasteText(d.event), this.onTextPasteObservable.notifyObservers(this);+          break;+        default:+          return;+      }+    });+    const i = this._host.getScene();+    i && (this._onPointerDblTapObserver = i.onPointerObservable.add((d) => {+      this._isFocused && d.type === Ir.POINTERDOUBLETAP && this._processDblClick(d);+    })), this._onFocusSelectAll && this.selectAllText();+  }+  _getTypeName() {+    return "InputText";+  }+  /**+   * Function called to get the list of controls that should not steal the focus from this control+   * @returns an array of controls+   */+  keepsFocusWith() {+    return this._connectedVirtualKeyboard ? [this._connectedVirtualKeyboard] : null;+  }+  /**+   * @internal+   */+  processKey(i, d, g) {+    if (!this.isReadOnly && !(g && (g.ctrlKey || g.metaKey) && (i === 67 || i === 86 || i === 88))) {+      if (g && (g.ctrlKey || g.metaKey) && i === 65) {+        this.selectAllText(), g.preventDefault();+        return;+      }+      switch (i) {+        case 32:+          d = " ";+          break;+        case 191:+          g && g.preventDefault();+          break;+        case 8:+          if (this._textWrapper.text && this._textWrapper.length > 0) {+            if (this.isTextHighlightOn) {+              this._textWrapper.removePart(this._startHighlightIndex, this._endHighlightIndex), this._textHasChanged(), this.isTextHighlightOn = !1, this._cursorOffset = this._textWrapper.length - this._startHighlightIndex, this._blinkIsEven = !1, g && g.preventDefault();+              return;+            }+            if (this._cursorOffset === 0)+              this.text = this._textWrapper.substring(0, this._textWrapper.length - 1);+            else {+              const y = this._textWrapper.length - this._cursorOffset;+              y > 0 && (this._textWrapper.removePart(y - 1, y), this._textHasChanged());+            }+          }+          g && g.preventDefault();+          return;+        case 46:+          if (this.isTextHighlightOn) {+            this._textWrapper.removePart(this._startHighlightIndex, this._endHighlightIndex), this._textHasChanged(), this.isTextHighlightOn = !1, this._cursorOffset = this._textWrapper.length - this._startHighlightIndex, g && g.preventDefault();+            return;+          }+          if (this._textWrapper.text && this._textWrapper.length > 0 && this._cursorOffset > 0) {+            const y = this._textWrapper.length - this._cursorOffset;+            this._textWrapper.removePart(y, y + 1), this._textHasChanged(), this._cursorOffset--;+          }+          g && g.preventDefault();+          return;+        case 13:+          this._host.focusedControl = null, this.isTextHighlightOn = !1;+          return;+        case 35:+          this._cursorOffset = 0, this._blinkIsEven = !1, this.isTextHighlightOn = !1, this._markAsDirty();+          return;+        case 36:+          this._cursorOffset = this._textWrapper.length, this._blinkIsEven = !1, this.isTextHighlightOn = !1, this._markAsDirty();+          return;+        case 37:+          if (this._cursorOffset++, this._cursorOffset > this._textWrapper.length && (this._cursorOffset = this._textWrapper.length), g && g.shiftKey) {+            if (this._blinkIsEven = !1, g.ctrlKey || g.metaKey) {+              if (!this.isTextHighlightOn) {+                if (this._textWrapper.length === this._cursorOffset)+                  return;+                this._endHighlightIndex = this._textWrapper.length - this._cursorOffset + 1;+              }+              this._startHighlightIndex = 0, this._cursorIndex = this._textWrapper.length - this._endHighlightIndex, this._cursorOffset = this._textWrapper.length, this.isTextHighlightOn = !0, this._markAsDirty();+              return;+            }+            this.isTextHighlightOn ? this._cursorIndex === -1 && (this._cursorIndex = this._textWrapper.length - this._endHighlightIndex, this._cursorOffset = this._startHighlightIndex === 0 ? this._textWrapper.length : this._textWrapper.length - this._startHighlightIndex + 1) : (this.isTextHighlightOn = !0, this._cursorIndex = this._cursorOffset >= this._textWrapper.length ? this._textWrapper.length : this._cursorOffset - 1), this._cursorIndex < this._cursorOffset ? (this._endHighlightIndex = this._textWrapper.length - this._cursorIndex, this._startHighlightIndex = this._textWrapper.length - this._cursorOffset) : this._cursorIndex > this._cursorOffset ? (this._endHighlightIndex = this._textWrapper.length - this._cursorOffset, this._startHighlightIndex = this._textWrapper.length - this._cursorIndex) : this.isTextHighlightOn = !1, this._markAsDirty();+            return;+          }+          this.isTextHighlightOn && (this._cursorOffset = this._textWrapper.length - this._startHighlightIndex, this.isTextHighlightOn = !1), g && (g.ctrlKey || g.metaKey) && (this._cursorOffset = this._textWrapper.length, g.preventDefault()), this._blinkIsEven = !1, this.isTextHighlightOn = !1, this._cursorIndex = -1, this._markAsDirty();+          return;+        case 39:+          if (this._cursorOffset--, this._cursorOffset < 0 && (this._cursorOffset = 0), g && g.shiftKey) {+            if (this._blinkIsEven = !1, g.ctrlKey || g.metaKey) {+              if (!this.isTextHighlightOn) {+                if (this._cursorOffset === 0)+                  return;+                this._startHighlightIndex = this._textWrapper.length - this._cursorOffset - 1;+              }+              this._endHighlightIndex = this._textWrapper.length, this.isTextHighlightOn = !0, this._cursorIndex = this._textWrapper.length - this._startHighlightIndex, this._cursorOffset = 0, this._markAsDirty();+              return;+            }+            this.isTextHighlightOn ? this._cursorIndex === -1 && (this._cursorIndex = this._textWrapper.length - this._startHighlightIndex, this._cursorOffset = this._textWrapper.length === this._endHighlightIndex ? 0 : this._textWrapper.length - this._endHighlightIndex - 1) : (this.isTextHighlightOn = !0, this._cursorIndex = this._cursorOffset <= 0 ? 0 : this._cursorOffset + 1), this._cursorIndex < this._cursorOffset ? (this._endHighlightIndex = this._textWrapper.length - this._cursorIndex, this._startHighlightIndex = this._textWrapper.length - this._cursorOffset) : this._cursorIndex > this._cursorOffset ? (this._endHighlightIndex = this._textWrapper.length - this._cursorOffset, this._startHighlightIndex = this._textWrapper.length - this._cursorIndex) : this.isTextHighlightOn = !1, this._markAsDirty();+            return;+          }+          this.isTextHighlightOn && (this._cursorOffset = this._textWrapper.length - this._endHighlightIndex, this.isTextHighlightOn = !1), g && (g.ctrlKey || g.metaKey) && (this._cursorOffset = 0, g.preventDefault()), this._blinkIsEven = !1, this.isTextHighlightOn = !1, this._cursorIndex = -1, this._markAsDirty();+          return;+      }+      if (i === 32 && (d = g?.key ?? " "), this._deadKey = d === "Dead", d && (i === -1 || // Direct access+      i === 32 || // Space+      i === 34 || // "    add support for single and double quotes+      i === 39 || // '+      i > 47 && i < 64 || // Numbers+      i > 64 && i < 91 || // Letters+      i > 159 && i < 193 || // Special characters+      i > 218 && i < 223 || // Special characters+      i > 95 && i < 112) && (this._currentKey = d, this.onBeforeKeyAddObservable.notifyObservers(this), d = this._currentKey, this._addKey && !this._deadKey)) {+        if (this.isTextHighlightOn)+          this._textWrapper.removePart(this._startHighlightIndex, this._endHighlightIndex, d), this._textHasChanged(), this._cursorOffset = this._textWrapper.length - (this._startHighlightIndex + 1), this.isTextHighlightOn = !1, this._blinkIsEven = !1, this._markAsDirty();+        else if (this._cursorOffset === 0)+          this.text += this._deadKey && g?.key ? g.key : d;+        else {+          const y = this._textWrapper.length - this._cursorOffset;+          this._textWrapper.removePart(y, y, d), this._textHasChanged();+        }+        g && g.preventDefault();+      }+    }+  }+  /**+   * @internal+   */+  _updateValueFromCursorIndex(i) {+    if (this._blinkIsEven = !1, this._cursorIndex === -1)+      this._cursorIndex = i;+    else if (this._cursorIndex < this._cursorOffset)+      this._endHighlightIndex = this._textWrapper.length - this._cursorIndex, this._startHighlightIndex = this._textWrapper.length - this._cursorOffset;+    else if (this._cursorIndex > this._cursorOffset)+      this._endHighlightIndex = this._textWrapper.length - this._cursorOffset, this._startHighlightIndex = this._textWrapper.length - this._cursorIndex;+    else {+      this.isTextHighlightOn = !1, this._markAsDirty();+      return;+    }+    this.isTextHighlightOn = !0, this._markAsDirty();+  }+  /**+   * @internal+   */+  // eslint-disable-next-line @typescript-eslint/no-unused-vars+  _processDblClick(i) {+    this._startHighlightIndex = this._textWrapper.length - this._cursorOffset, this._endHighlightIndex = this._startHighlightIndex;+    let d, g;+    do+      g = this._endHighlightIndex < this._textWrapper.length && this._textWrapper.isWord(this._endHighlightIndex) ? ++this._endHighlightIndex : 0, d = this._startHighlightIndex > 0 && this._textWrapper.isWord(this._startHighlightIndex - 1) ? --this._startHighlightIndex : 0;+    while (d || g);+    this._cursorOffset = this._textWrapper.length - this._startHighlightIndex, this.isTextHighlightOn = !0, this._clickedCoordinate = null, this._blinkIsEven = !0, this._cursorIndex = -1, this._markAsDirty();+  }+  /**+   * Allow the user to select all text+   */+  selectAllText() {+    this._blinkIsEven = !0, this.isTextHighlightOn = !0, this._startHighlightIndex = 0, this._endHighlightIndex = this._textWrapper.length, this._cursorOffset = this._textWrapper.length, this._cursorIndex = -1, this._markAsDirty();+  }+  /**+   * Handles the keyboard event+   * @param evt Defines the KeyboardEvent+   */+  processKeyboard(i) {+    this.processKey(i.keyCode, i.key, i), super.processKeyboard(i);+  }+  /**+   * @internal+   */+  _onCopyText(i) {+    this.isTextHighlightOn = !1;+    try {+      i.clipboardData && i.clipboardData.setData("text/plain", this._highlightedText);+    } catch {+    }+    this._host.clipboardData = this._highlightedText;+  }+  /**+   * @internal+   */+  _onCutText(i) {+    if (this._highlightedText) {+      this._textWrapper.removePart(this._startHighlightIndex, this._endHighlightIndex), this._textHasChanged(), this.isTextHighlightOn = !1, this._cursorOffset = this._textWrapper.length - this._startHighlightIndex;+      try {+        i.clipboardData && i.clipboardData.setData("text/plain", this._highlightedText);+      } catch {+      }+      this._host.clipboardData = this._highlightedText, this._highlightedText = "";+    }+  }+  /**+   * @internal+   */+  _onPasteText(i) {+    let d;+    i.clipboardData && i.clipboardData.types.indexOf("text/plain") !== -1 ? d = i.clipboardData.getData("text/plain") : d = this._host.clipboardData;+    const g = this._textWrapper.length - this._cursorOffset;+    this._textWrapper.removePart(g, g, d), this._textHasChanged();+  }+  _draw(i) {+    i.save(), this._applyStates(i), (this.shadowBlur || this.shadowOffsetX || this.shadowOffsetY) && (i.shadowColor = this.shadowColor, i.shadowBlur = this.shadowBlur, i.shadowOffsetX = this.shadowOffsetX * this._host.idealRatio, i.shadowOffsetY = this.shadowOffsetY * this._host.idealRatio), this._isFocused ? this._focusedBackground && (i.fillStyle = this._isEnabled ? this._focusedBackground : this._disabledColor, i.fillRect(this._currentMeasure.left, this._currentMeasure.top, this._currentMeasure.width, this._currentMeasure.height)) : this._background && (i.fillStyle = this._isEnabled ? this._background : this._disabledColor, i.fillRect(this._currentMeasure.left, this._currentMeasure.top, this._currentMeasure.width, this._currentMeasure.height)), (this.shadowBlur || this.shadowOffsetX || this.shadowOffsetY) && (i.shadowBlur = 0, i.shadowOffsetX = 0, i.shadowOffsetY = 0), (!this._fontOffset || this._wasDirty) && (this._fontOffset = pe._GetFontOffset(i.font, this._host.getScene()?.getEngine()));+    const d = this._currentMeasure.left + this._margin.getValueInPixel(this._host, this._tempParentMeasure.width);+    this.color && (i.fillStyle = this.color);+    let g = this._beforeRenderText(this._textWrapper);+    !this._isFocused && !this._textWrapper.text && this._placeholderText && (g = new Ab(), g.text = this._placeholderText, this._placeholderColor && (i.fillStyle = this._placeholderColor)), this._textWidth = i.measureText(g.text).width;+    const y = this._margin.getValueInPixel(this._host, this._tempParentMeasure.width) * 2;+    this._autoStretchWidth && (this.width = Math.min(this._maxWidth.getValueInPixel(this._host, this._tempParentMeasure.width), this._textWidth + y) + "px", this._autoStretchWidth = !0);+    const M = this._fontOffset.ascent + (this._currentMeasure.height - this._fontOffset.height) / 2, N = this._width.getValueInPixel(this._host, this._tempParentMeasure.width) - y;+    if (i.save(), i.beginPath(), i.rect(d, this._currentMeasure.top + (this._currentMeasure.height - this._fontOffset.height) / 2, N + 2, this._currentMeasure.height), i.clip(), this._isFocused && this._textWidth > N) {+      const O = d - this._textWidth + N;+      this._scrollLeft || (this._scrollLeft = O);+    } else+      this._scrollLeft = d;+    if (this.outlineWidth && i.strokeText(g.text, this._scrollLeft, this._currentMeasure.top + M), i.fillText(g.text, this._scrollLeft, this._currentMeasure.top + M), this._isFocused) {+      if (this._clickedCoordinate) {+        const F = this._scrollLeft + this._textWidth - this._clickedCoordinate;+        let ne = 0;+        this._cursorOffset = 0;+        let $ = 0;+        do+          this._cursorOffset && ($ = Math.abs(F - ne)), this._cursorOffset++, ne = i.measureText(g.substr(g.length - this._cursorOffset, this._cursorOffset)).width;+        while (ne < F && g.length >= this._cursorOffset);+        Math.abs(F - ne) > $ && this._cursorOffset--, this._blinkIsEven = !1, this._clickedCoordinate = null;+      }+      if (!this._blinkIsEven) {+        const O = g.substr(g.length - this._cursorOffset), F = i.measureText(O).width;+        let ne = this._scrollLeft + this._textWidth - F;+        ne < d ? (this._scrollLeft += d - ne, ne = d, this._markAsDirty()) : ne > d + N && (this._scrollLeft += d + N - ne, ne = d + N, this._markAsDirty()), this.isTextHighlightOn || i.fillRect(ne, this._currentMeasure.top + (this._currentMeasure.height - this._fontOffset.height) / 2, 2, this._fontOffset.height);+      }+      if (clearTimeout(this._blinkTimeout), this._blinkTimeout = setTimeout(() => {+        this._blinkIsEven = !this._blinkIsEven, this._markAsDirty();+      }, 500), this.isTextHighlightOn) {+        clearTimeout(this._blinkTimeout);+        const O = i.measureText(g.substring(this._startHighlightIndex)).width;+        let F = this._scrollLeft + this._textWidth - O;+        this._highlightedText = g.substring(this._startHighlightIndex, this._endHighlightIndex);+        let ne = i.measureText(g.substring(this._startHighlightIndex, this._endHighlightIndex)).width;+        F < d && (ne = ne - (d - F), ne || (ne = i.measureText(g.charAt(g.length - this._cursorOffset)).width), F = d), i.globalAlpha = this._highlighterOpacity, i.fillStyle = this._textHighlightColor, i.fillRect(F, this._currentMeasure.top + (this._currentMeasure.height - this._fontOffset.height) / 2, ne, this._fontOffset.height), i.globalAlpha = 1;+      }+    }+    i.restore(), this._thickness && (this._isFocused ? this.focusedColor && (i.strokeStyle = this.focusedColor) : this.color && (i.strokeStyle = this.color), i.lineWidth = this._thickness, i.strokeRect(this._currentMeasure.left + this._thickness / 2, this._currentMeasure.top + this._thickness / 2, this._currentMeasure.width - this._thickness, this._currentMeasure.height - this._thickness)), i.restore();+  }+  _onPointerDown(i, d, g, y, M) {+    return super._onPointerDown(i, d, g, y, M) ? this.isReadOnly ? !0 : (this._clickedCoordinate = d.x, this.isTextHighlightOn = !1, this._highlightedText = "", this._cursorIndex = -1, this._isPointerDown = !0, this._host._capturingControl[g] = this, this._focusedBy = M.event.pointerType, this._host.focusedControl === this ? (clearTimeout(this._blinkTimeout), this._markAsDirty(), !0) : this._isEnabled ? (this._host.focusedControl = this, !0) : !1) : !1;+  }+  _onPointerMove(i, d, g, y) {+    this._host.focusedControl === this && this._isPointerDown && !this.isReadOnly && (this._clickedCoordinate = d.x, this._markAsDirty(), this._updateValueFromCursorIndex(this._cursorOffset)), super._onPointerMove(i, d, g, y);+  }+  _onPointerUp(i, d, g, y, M) {+    this._isPointerDown = !1, delete this._host._capturingControl[g], super._onPointerUp(i, d, g, y, M);+  }+  _beforeRenderText(i) {+    return i;+  }+  /** @internal */+  // eslint-disable-next-line @typescript-eslint/naming-convention+  set isTextHighlightOn(i) {+    this._isTextHighlightOn !== i && (i && this.onTextHighlightObservable.notifyObservers(this), this._isTextHighlightOn = i);+  }+  /** @internal */+  // eslint-disable-next-line @typescript-eslint/naming-convention+  get isTextHighlightOn() {+    return this._isTextHighlightOn;+  }+  dispose() {+    super.dispose(), this.onBlurObservable.clear(), this.onFocusObservable.clear(), this.onTextChangedObservable.clear(), this.onTextCopyObservable.clear(), this.onTextCutObservable.clear(), this.onTextPasteObservable.clear(), this.onTextHighlightObservable.clear(), this.onKeyboardEventProcessedObservable.clear();+  }+}+q([+  H()+], bo.prototype, "promptMessage", void 0);+q([+  H()+], bo.prototype, "disableMobilePrompt", void 0);+q([+  H()+], bo.prototype, "maxWidth", null);+q([+  H()+], bo.prototype, "highligherOpacity", null);+q([+  H()+], bo.prototype, "highlighterOpacity", null);+q([+  H()+], bo.prototype, "onFocusSelectAll", null);+q([+  H()+], bo.prototype, "textHighlightColor", null);+q([+  H()+], bo.prototype, "margin", null);+q([+  H()+], bo.prototype, "autoStretchWidth", null);+q([+  H()+], bo.prototype, "thickness", null);+q([+  H()+], bo.prototype, "focusedBackground", null);+q([+  H()+], bo.prototype, "background", null);+q([+  H()+], bo.prototype, "placeholderColor", null);+q([+  H()+], bo.prototype, "placeholderText", null);+q([+  H()+], bo.prototype, "deadKey", null);+q([+  H()+], bo.prototype, "text", null);+q([+  H()+], bo.prototype, "width", null);+kr("BABYLON.GUI.InputText", bo);+class Hi extends wi {+  /**+   * Sets/Gets a boolean indicating that control content must be clipped+   * Please note that not clipping content may generate issues with adt.useInvalidateRectOptimization so it is recommended to turn this optimization off if you want to use unclipped children+   */+  set clipContent(i) {+    this._clipContent = i;+    for (const d in this._cells)+      this._cells[d].clipContent = i;+  }+  get clipContent() {+    return this._clipContent;+  }+  /**+   * Sets/Gets a boolean indicating if the children are clipped to the current control bounds.+   * Please note that not clipping children may generate issues with adt.useInvalidateRectOptimization so it is recommended to turn this optimization off if you want to use unclipped children+   */+  set clipChildren(i) {+    this._clipChildren = i;+    for (const d in this._cells)+      this._cells[d].clipChildren = i;+  }+  get clipChildren() {+    return this._clipChildren;+  }+  /**+   * Gets the number of columns+   */+  get columnCount() {+    return this._columnDefinitions.length;+  }+  /**+   * Gets the number of rows+   */+  get rowCount() {+    return this._rowDefinitions.length;+  }+  /** Gets the list of children */+  get children() {+    return this._childControls;+  }+  /** Gets the list of cells (e.g. the containers) */+  get cells() {+    return this._cells;+  }+  /**+   * Gets the definition of a specific row+   * @param index defines the index of the row+   * @returns the row definition+   */+  getRowDefinition(i) {+    return i < 0 || i >= this._rowDefinitions.length ? null : this._rowDefinitions[i];+  }+  /**+   * Gets the definition of a specific column+   * @param index defines the index of the column+   * @returns the column definition+   */+  getColumnDefinition(i) {+    return i < 0 || i >= this._columnDefinitions.length ? null : this._columnDefinitions[i];+  }+  /**+   * Adds a new row to the grid+   * @param height defines the height of the row (either in pixel or a value between 0 and 1)+   * @param isPixel defines if the height is expressed in pixel (or in percentage)+   * @returns the current grid+   */+  addRowDefinition(i, d = !1) {+    return this._rowDefinitions.push(new St(i, d ? St.UNITMODE_PIXEL : St.UNITMODE_PERCENTAGE)), this._rowDefinitionObservers.push(this._rowDefinitions[this.rowCount - 1].onChangedObservable.add(() => this._markAsDirty())), this._markAsDirty(), this;+  }+  /**+   * Adds a new column to the grid+   * @param width defines the width of the column (either in pixel or a value between 0 and 1)+   * @param isPixel defines if the width is expressed in pixel (or in percentage)+   * @returns the current grid+   */+  addColumnDefinition(i, d = !1) {+    return this._columnDefinitions.push(new St(i, d ? St.UNITMODE_PIXEL : St.UNITMODE_PERCENTAGE)), this._columnDefinitionObservers.push(this._columnDefinitions[this.columnCount - 1].onChangedObservable.add(() => this._markAsDirty())), this._markAsDirty(), this;+  }+  /**+   * Update a row definition+   * @param index defines the index of the row to update+   * @param height defines the height of the row (either in pixel or a value between 0 and 1)+   * @param isPixel defines if the weight is expressed in pixel (or in percentage)+   * @returns the current grid+   */+  setRowDefinition(i, d, g = !1) {+    if (i < 0 || i >= this._rowDefinitions.length)+      return this;+    const y = this._rowDefinitions[i];+    return y && y.isPixel === g && y.value === d ? this : (this._rowDefinitions[i].onChangedObservable.remove(this._rowDefinitionObservers[i]), this._rowDefinitions[i] = new St(d, g ? St.UNITMODE_PIXEL : St.UNITMODE_PERCENTAGE), this._rowDefinitionObservers[i] = this._rowDefinitions[i].onChangedObservable.add(() => this._markAsDirty()), this._markAsDirty(), this);+  }+  /**+   * Update a column definition+   * @param index defines the index of the column to update+   * @param width defines the width of the column (either in pixel or a value between 0 and 1)+   * @param isPixel defines if the width is expressed in pixel (or in percentage)+   * @returns the current grid+   */+  setColumnDefinition(i, d, g = !1) {+    if (i < 0 || i >= this._columnDefinitions.length)+      return this;+    const y = this._columnDefinitions[i];+    return y && y.isPixel === g && y.value === d ? this : (this._columnDefinitions[i].onChangedObservable.remove(this._columnDefinitionObservers[i]), this._columnDefinitions[i] = new St(d, g ? St.UNITMODE_PIXEL : St.UNITMODE_PERCENTAGE), this._columnDefinitionObservers[i] = this._columnDefinitions[i].onChangedObservable.add(() => this._markAsDirty()), this._markAsDirty(), this);+  }+  /**+   * Gets the list of children stored in a specific cell+   * @param row defines the row to check+   * @param column defines the column to check+   * @returns the list of controls+   */+  getChildrenAt(i, d) {+    const g = this._cells[`${i}:${d}`];+    return g ? g.children : null;+  }+  /**+   * Gets a string representing the child cell info (row x column)+   * @param child defines the control to get info from+   * @returns a string containing the child cell info (row x column)+   */+  getChildCellInfo(i) {+    return i._tag;+  }+  _removeCell(i, d) {+    if (i) {+      super.removeControl(i);+      for (const g of i.children) {+        const y = this._childControls.indexOf(g);+        y !== -1 && this._childControls.splice(y, 1);+      }+      delete this._cells[d];+    }+  }+  _offsetCell(i, d) {+    if (this._cells[d]) {+      this._cells[i] = this._cells[d];+      for (const g of this._cells[i].children)+        g._tag = i;+      delete this._cells[d];+    }+  }+  /**+   * Remove a column definition at specified index+   * @param index defines the index of the column to remove+   * @returns the current grid+   */+  removeColumnDefinition(i) {+    if (i < 0 || i >= this._columnDefinitions.length)+      return this;+    for (let d = 0; d < this._rowDefinitions.length; d++) {+      const g = `${d}:${i}`, y = this._cells[g];+      this._removeCell(y, g);+    }+    for (let d = 0; d < this._rowDefinitions.length; d++)+      for (let g = i + 1; g < this._columnDefinitions.length; g++) {+        const y = `${d}:${g - 1}`, M = `${d}:${g}`;+        this._offsetCell(y, M);+      }+    return this._columnDefinitions[i].onChangedObservable.remove(this._columnDefinitionObservers[i]), this._columnDefinitions.splice(i, 1), this._columnDefinitionObservers.splice(i, 1), this._markAsDirty(), this;+  }+  /**+   * Remove a row definition at specified index+   * @param index defines the index of the row to remove+   * @returns the current grid+   */+  removeRowDefinition(i) {+    if (i < 0 || i >= this._rowDefinitions.length)+      return this;+    for (let d = 0; d < this._columnDefinitions.length; d++) {+      const g = `${i}:${d}`, y = this._cells[g];+      this._removeCell(y, g);+    }+    for (let d = 0; d < this._columnDefinitions.length; d++)+      for (let g = i + 1; g < this._rowDefinitions.length; g++) {+        const y = `${g - 1}:${d}`, M = `${g}:${d}`;+        this._offsetCell(y, M);+      }+    return this._rowDefinitions[i].onChangedObservable.remove(this._rowDefinitionObservers[i]), this._rowDefinitions.splice(i, 1), this._rowDefinitionObservers.splice(i, 1), this._markAsDirty(), this;+  }+  /**+   * Adds a new control to the current grid+   * @param control defines the control to add+   * @param row defines the row where to add the control (0 by default)+   * @param column defines the column where to add the control (0 by default)+   * @returns the current grid+   */+  addControl(i, d = 0, g = 0) {+    if (this._rowDefinitions.length === 0 && this.addRowDefinition(1, !1), this._columnDefinitions.length === 0 && this.addColumnDefinition(1, !1), this._childControls.indexOf(i) !== -1)+      return Lr.Warn(`Control (Name:${i.name}, UniqueId:${i.uniqueId}) is already associated with this grid. You must remove it before reattaching it`), this;+    const y = Math.min(d, this._rowDefinitions.length - 1), M = Math.min(g, this._columnDefinitions.length - 1), N = `${y}:${M}`;+    let O = this._cells[N];+    return O || (O = new wi(N), this._cells[N] = O, O.horizontalAlignment = pe.HORIZONTAL_ALIGNMENT_LEFT, O.verticalAlignment = pe.VERTICAL_ALIGNMENT_TOP, O.clipContent = this.clipContent, O.clipChildren = this.clipChildren, super.addControl(O)), O.addControl(i), this._childControls.push(i), i._tag = N, i.parent = this, this._markAsDirty(), this;+  }+  /**+   * Removes a control from the current container+   * @param control defines the control to remove+   * @returns the current container+   */+  removeControl(i) {+    const d = this._childControls.indexOf(i);+    d !== -1 && this._childControls.splice(d, 1);+    const g = this._cells[i._tag];+    return g && (g.removeControl(i), i._tag = null), this._markAsDirty(), this;+  }+  /**+   * Creates a new Grid+   * @param name defines control name+   */+  constructor(i) {+    super(i), this.name = i, this._rowDefinitions = new Array(), this._rowDefinitionObservers = [], this._columnDefinitions = new Array(), this._columnDefinitionObservers = [], this._cells = {}, this._childControls = new Array();+  }+  _getTypeName() {+    return "Grid";+  }+  _getGridDefinitions(i) {+    const d = [], g = [], y = [], M = [];+    let N = this._currentMeasure.width, O = 0, F = this._currentMeasure.height, ne = 0, $ = 0;+    for (const he of this._rowDefinitions) {+      if (he.isPixel) {+        const Me = he.getValue(this._host);+        F -= Me, g[$] = Me;+      } else+        ne += he.value;+      $++;+    }+    let Q = 0;+    $ = 0;+    for (const he of this._rowDefinitions) {+      if (M.push(Q), he.isPixel)+        Q += he.getValue(this._host);+      else {+        const Me = Math.round(he.value / ne * F);+        Q += Me, g[$] = Me;+      }+      $++;+    }+    $ = 0;+    for (const he of this._columnDefinitions) {+      if (he.isPixel) {+        const Me = he.getValue(this._host);+        N -= Me, d[$] = Me;+      } else+        O += he.value;+      $++;+    }+    let X = 0;+    $ = 0;+    for (const he of this._columnDefinitions) {+      if (y.push(X), he.isPixel)+        X += he.getValue(this._host);+      else {+        const Me = Math.round(he.value / O * N);+        X += Me, d[$] = Me;+      }+      $++;+    }+    i(y, M, d, g);+  }+  _additionalProcessing(i, d) {+    this._getGridDefinitions((g, y, M, N) => {+      for (const O in this._cells) {+        if (!Object.prototype.hasOwnProperty.call(this._cells, O))+          continue;+        const F = O.split(":"), ne = parseInt(F[0]), $ = parseInt(F[1]), Q = this._cells[O];+        Q.leftInPixels = g[$], Q.topInPixels = y[ne], Q.widthInPixels = M[$], Q.heightInPixels = N[ne], Q._left.ignoreAdaptiveScaling = !0, Q._top.ignoreAdaptiveScaling = !0, Q._width.ignoreAdaptiveScaling = !0, Q._height.ignoreAdaptiveScaling = !0;+      }+    }), super._additionalProcessing(i, d);+  }+  _flagDescendantsAsMatrixDirty() {+    for (const i in this._cells) {+      if (!Object.prototype.hasOwnProperty.call(this._cells, i))+        continue;+      this._cells[i]._markMatrixAsDirty();+    }+  }+  _renderHighlightSpecific(i) {+    super._renderHighlightSpecific(i), this._getGridDefinitions((d, g, y, M) => {+      for (let N = 0; N < d.length; N++) {+        const O = this._currentMeasure.left + d[N] + y[N];+        i.beginPath(), i.moveTo(O, this._currentMeasure.top), i.lineTo(O, this._currentMeasure.top + this._currentMeasure.height), i.stroke();+      }+      for (let N = 0; N < g.length; N++) {+        const O = this._currentMeasure.top + g[N] + M[N];+        i.beginPath(), i.moveTo(this._currentMeasure.left, O), i.lineTo(this._currentMeasure.left + this._currentMeasure.width, O), i.stroke();+      }+    }), i.restore();+  }+  /** Releases associated resources */+  dispose() {+    super.dispose();+    for (const i of this._childControls)+      i.dispose();+    for (let i = 0; i < this._rowDefinitions.length; i++)+      this._rowDefinitions[i].onChangedObservable.remove(this._rowDefinitionObservers[i]);+    for (let i = 0; i < this._columnDefinitions.length; i++)+      this._columnDefinitions[i].onChangedObservable.remove(this._columnDefinitionObservers[i]);+    this._rowDefinitionObservers.length = 0, this._rowDefinitions.length = 0, this._columnDefinitionObservers.length = 0, this._columnDefinitions.length = 0, this._cells = {}, this._childControls.length = 0;+  }+  /**+   * Serializes the current control+   * @param serializationObject defined the JSON serialized object+   * @param force force serialization even if isSerializable === false+   * @param allowCanvas defines if the control is allowed to use a Canvas2D object to serialize+   */+  serialize(i, d, g) {+    if (super.serialize(i, d, g), !(!this.isSerializable && !d)) {+      i.columnCount = this.columnCount, i.rowCount = this.rowCount, i.columns = [], i.rows = [], i.tags = [];+      for (let y = 0; y < this.columnCount; ++y) {+        const M = this.getColumnDefinition(y), N = { value: M?.getValue(this.host), unit: M?.unit };+        i.columns.push(N);+      }+      for (let y = 0; y < this.rowCount; ++y) {+        const M = this.getRowDefinition(y), N = { value: M?.getValue(this.host), unit: M?.unit };+        i.rows.push(N);+      }+      for (const y of this.children)+        i.tags.push(y._tag);+    }+  }+  /**+   * @internal+   */+  _parseFromContent(i, d) {+    super._parseFromContent(i, d);+    const g = [];+    for (const y of this.children)+      g.push(y);+    this.removeRowDefinition(0), this.removeColumnDefinition(0);+    for (let y = 0; y < i.columnCount; ++y) {+      const M = i.columns[y].value, N = i.columns[y].unit;+      this.addColumnDefinition(M, N === 1);+    }+    for (let y = 0; y < i.rowCount; ++y) {+      const M = i.rows[y].value, N = i.rows[y].unit;+      this.addRowDefinition(M, N === 1);+    }+    for (let y = 0; y < g.length; ++y) {+      const M = i.tags[y];+      let N = parseInt(M.substring(0, M.search(":")));+      isNaN(N) && (N = 0);+      let O = parseInt(M.substring(M.search(":") + 1));+      isNaN(O) && (O = 0), this.addControl(g[y], N, O);+    }+  }+}+q([+  H()+], Hi.prototype, "clipContent", null);+kr("BABYLON.GUI.Grid", Hi);+class an extends pe {+  /** Gets or sets the color of the color picker */+  get value() {+    return this._value;+  }+  set value(i) {+    this._value.equals(i) || (this._value.copyFrom(i), this._value.toHSVToRef(this._tmpColor), this._h = this._tmpColor.r, this._s = Math.max(this._tmpColor.g, 1e-5), this._v = Math.max(this._tmpColor.b, 1e-5), this._markAsDirty(), this._value.r <= an._Epsilon && (this._value.r = 0), this._value.g <= an._Epsilon && (this._value.g = 0), this._value.b <= an._Epsilon && (this._value.b = 0), this._value.r >= 1 - an._Epsilon && (this._value.r = 1), this._value.g >= 1 - an._Epsilon && (this._value.g = 1), this._value.b >= 1 - an._Epsilon && (this._value.b = 1), this.onValueChangedObservable.notifyObservers(this._value, void 0, this, this));+  }+  /**+   * Gets or sets control width+   * @see https://doc.babylonjs.com/features/featuresDeepDive/gui/gui#position-and-size+   */+  get width() {+    return this._width.toString(this._host);+  }+  set width(i) {+    this._width.toString(this._host) !== i && this._width.fromString(i) && (this._width.getValue(this._host) === 0 && (i = "1px", this._width.fromString(i)), this._height.fromString(i), this._markAsDirty());+  }+  /**+   * Gets or sets control height+   * @see https://doc.babylonjs.com/features/featuresDeepDive/gui/gui#position-and-size+   */+  get height() {+    return this._height.toString(this._host);+  }+  /** Gets or sets control height */+  set height(i) {+    this._height.toString(this._host) !== i && this._height.fromString(i) && (this._height.getValue(this._host) === 0 && (i = "1px", this._height.fromString(i)), this._width.fromString(i), this._markAsDirty());+  }+  /** Gets or sets control size */+  get size() {+    return this.width;+  }+  set size(i) {+    this.width = i;+  }+  /**+   * Creates a new ColorPicker+   * @param name defines the control name+   */+  constructor(i) {+    super(i), this.name = i, this._value = nr.Red(), this._tmpColor = new nr(), this._pointerStartedOnSquare = !1, this._pointerStartedOnWheel = !1, this._squareLeft = 0, this._squareTop = 0, this._squareSize = 0, this._h = 360, this._s = 1, this._v = 1, this._lastPointerDownId = -1, this.onValueChangedObservable = new qt(), this._pointerIsDown = !1, this.value = new nr(0.88, 0.1, 0.1), this.size = "200px", this.isPointerBlocker = !0;+  }+  _getTypeName() {+    return "ColorPicker";+  }+  /**+   * @internal+   */+  _preMeasure(i) {+    i.width < i.height ? this._currentMeasure.height = i.width : this._currentMeasure.width = i.height;+  }+  _updateSquareProps() {+    const i = Math.min(this._currentMeasure.width, this._currentMeasure.height) * 0.5, d = i * 0.2, y = (i - d) * 2 / Math.sqrt(2), M = i - y * 0.5;+    this._squareLeft = this._currentMeasure.left + M, this._squareTop = this._currentMeasure.top + M, this._squareSize = y;+  }+  _drawGradientSquare(i, d, g, y, M, N) {+    const O = N.createLinearGradient(d, g, y + d, g);+    O.addColorStop(0, "#fff"), O.addColorStop(1, "hsl(" + i + ", 100%, 50%)"), N.fillStyle = O, N.fillRect(d, g, y, M);+    const F = N.createLinearGradient(d, g, d, M + g);+    F.addColorStop(0, "rgba(0,0,0,0)"), F.addColorStop(1, "#000"), N.fillStyle = F, N.fillRect(d, g, y, M);+  }+  _drawCircle(i, d, g, y) {+    y.beginPath(), y.arc(i, d, g + 1, 0, 2 * Math.PI, !1), y.lineWidth = 3, y.strokeStyle = "#333333", y.stroke(), y.beginPath(), y.arc(i, d, g, 0, 2 * Math.PI, !1), y.lineWidth = 3, y.strokeStyle = "#ffffff", y.stroke();+  }+  _createColorWheelCanvas(i, d) {+    const g = md.LastCreatedEngine;+    if (!g)+      throw new Error("Invalid engine. Unable to create a canvas.");+    const y = g.createCanvas(i * 2, i * 2), M = y.getContext("2d"), N = M.getImageData(0, 0, i * 2, i * 2), O = N.data, F = this._tmpColor, ne = i * i, $ = i - d, Q = $ * $;+    for (let X = -i; X < i; X++)+      for (let he = -i; he < i; he++) {+        const Me = X * X + he * he;+        if (Me > ne || Me < Q)+          continue;+        const p = Math.sqrt(Me), De = Math.atan2(he, X);+        nr.HSVtoRGBToRef(De * 180 / Math.PI + 180, p / i, 1, F);+        const Ke = (X + i + (he + i) * 2 * i) * 4;+        O[Ke] = F.r * 255, O[Ke + 1] = F.g * 255, O[Ke + 2] = F.b * 255;+        let oe;+        const Bt = 0.2, xe = 0.04, yt = 50, at = 150;+        i < yt ? oe = Bt : i > at ? oe = xe : oe = (xe - Bt) * (i - yt) / (at - yt) + Bt;+        const Re = (p - $) / (i - $);+        Re < oe ? O[Ke + 3] = 255 * (Re / oe) : Re > 1 - oe ? O[Ke + 3] = 255 * (1 - (Re - (1 - oe)) / oe) : O[Ke + 3] = 255;+      }+    return M.putImageData(N, 0, 0), y;+  }+  /**+   * @internal+   */+  _draw(i) {+    i.save(), this._applyStates(i);+    const d = Math.min(this._currentMeasure.width, this._currentMeasure.height) * 0.5, g = d * 0.2, y = this._currentMeasure.left, M = this._currentMeasure.top;+    (!this._colorWheelCanvas || this._colorWheelCanvas.width != d * 2) && (this._colorWheelCanvas = this._createColorWheelCanvas(d, g)), this._updateSquareProps(), (this.shadowBlur || this.shadowOffsetX || this.shadowOffsetY) && (i.shadowColor = this.shadowColor, i.shadowBlur = this.shadowBlur, i.shadowOffsetX = this.shadowOffsetX * this._host.idealRatio, i.shadowOffsetY = this.shadowOffsetY * this._host.idealRatio, i.fillRect(this._squareLeft, this._squareTop, this._squareSize, this._squareSize)), i.drawImage(this._colorWheelCanvas, y, M), (this.shadowBlur || this.shadowOffsetX || this.shadowOffsetY) && (i.shadowBlur = 0, i.shadowOffsetX = 0, i.shadowOffsetY = 0), this._drawGradientSquare(this._h, this._squareLeft, this._squareTop, this._squareSize, this._squareSize, i);+    let N = this._squareLeft + this._squareSize * this._s, O = this._squareTop + this._squareSize * (1 - this._v);+    this._drawCircle(N, O, d * 0.04, i);+    const F = d - g * 0.5;+    N = y + d + Math.cos((this._h - 180) * Math.PI / 180) * F, O = M + d + Math.sin((this._h - 180) * Math.PI / 180) * F, this._drawCircle(N, O, g * 0.35, i), i.restore();+  }+  _updateValueFromPointer(i, d) {+    if (this._pointerStartedOnWheel) {+      const g = Math.min(this._currentMeasure.width, this._currentMeasure.height) * 0.5, y = g + this._currentMeasure.left, M = g + this._currentMeasure.top;+      this._h = Math.atan2(d - M, i - y) * 180 / Math.PI + 180;+    } else this._pointerStartedOnSquare && (this._updateSquareProps(), this._s = (i - this._squareLeft) / this._squareSize, this._v = 1 - (d - this._squareTop) / this._squareSize, this._s = Math.min(this._s, 1), this._s = Math.max(this._s, an._Epsilon), this._v = Math.min(this._v, 1), this._v = Math.max(this._v, an._Epsilon));+    nr.HSVtoRGBToRef(this._h, this._s, this._v, this._tmpColor), this.value = this._tmpColor;+  }+  _isPointOnSquare(i, d) {+    this._updateSquareProps();+    const g = this._squareLeft, y = this._squareTop, M = this._squareSize;+    return i >= g && i <= g + M && d >= y && d <= y + M;+  }+  _isPointOnWheel(i, d) {+    const g = Math.min(this._currentMeasure.width, this._currentMeasure.height) * 0.5, y = g + this._currentMeasure.left, M = g + this._currentMeasure.top, N = g * 0.2, O = g - N, F = g * g, ne = O * O, $ = i - y, Q = d - M, X = $ * $ + Q * Q;+    return X <= F && X >= ne;+  }+  _onPointerDown(i, d, g, y, M) {+    if (!super._onPointerDown(i, d, g, y, M))+      return !1;+    if (this.isReadOnly)+      return !0;+    this._pointerIsDown = !0, this._pointerStartedOnSquare = !1, this._pointerStartedOnWheel = !1, this._invertTransformMatrix.transformCoordinates(d.x, d.y, this._transformedPosition);+    const N = this._transformedPosition.x, O = this._transformedPosition.y;+    return this._isPointOnSquare(N, O) ? this._pointerStartedOnSquare = !0 : this._isPointOnWheel(N, O) && (this._pointerStartedOnWheel = !0), this._updateValueFromPointer(N, O), this._host._capturingControl[g] = this, this._lastPointerDownId = g, !0;+  }+  _onPointerMove(i, d, g, y) {+    if (g == this._lastPointerDownId) {+      if (!this.isReadOnly) {+        this._invertTransformMatrix.transformCoordinates(d.x, d.y, this._transformedPosition);+        const M = this._transformedPosition.x, N = this._transformedPosition.y;+        this._pointerIsDown && this._updateValueFromPointer(M, N);+      }+      super._onPointerMove(i, d, g, y);+    }+  }+  _onPointerUp(i, d, g, y, M, N) {+    this._pointerIsDown = !1, delete this._host._capturingControl[g], super._onPointerUp(i, d, g, y, M, N);+  }+  _onCanvasBlur() {+    this._forcePointerUp(), super._onCanvasBlur();+  }+  /**+   * This function expands the color picker by creating a color picker dialog with manual+   * color value input and the ability to save colors into an array to be used later in+   * subsequent launches of the dialogue.+   * @param advancedTexture defines the AdvancedDynamicTexture the dialog is assigned to+   * @param options defines size for dialog and options for saved colors. Also accepts last color picked as hex string and saved colors array as hex strings.+   * @param options.pickerWidth+   * @param options.pickerHeight+   * @param options.headerHeight+   * @param options.lastColor+   * @param options.swatchLimit+   * @param options.numSwatchesPerLine+   * @param options.savedColors+   * @returns picked color as a hex string and the saved colors array as hex strings.+   */+  static async ShowPickerDialogAsync(i, d) {+    return await new Promise((g) => {+      d.pickerWidth = d.pickerWidth || "640px", d.pickerHeight = d.pickerHeight || "400px", d.headerHeight = d.headerHeight || "35px", d.lastColor = d.lastColor || "#000000", d.swatchLimit = d.swatchLimit || 20, d.numSwatchesPerLine = d.numSwatchesPerLine || 10;+      const y = d.swatchLimit / d.numSwatchesPerLine, M = parseFloat(d.pickerWidth) / d.numSwatchesPerLine, N = Math.floor(M * 0.25), O = N * (d.numSwatchesPerLine + 1), F = Math.floor((parseFloat(d.pickerWidth) - O) / d.numSwatchesPerLine), ne = F * y + N * (y + 1), $ = (parseInt(d.pickerHeight) + ne + Math.floor(F * 0.25)).toString() + "px", Q = "#c0c0c0", X = "#535353", he = "#414141", Me = "515151", p = "#555555", De = "#454545", Ke = "#404040", oe = nr.FromHexString("#dddddd"), Bt = oe.r + oe.g + oe.b, xe = "#aaaaaa", yt = "#ffffff";+      let at, Re;+      const Ur = ["R", "G", "B"], vt = "#454545", xt = "#f0f0f0";+      let Io, w, qo = !1, tr, Sr, Dt;+      const Yr = new Hi();+      if (Yr.name = "Dialog Container", Yr.width = d.pickerWidth, d.savedColors) {+        Yr.height = $;+        const ot = parseInt(d.pickerHeight) / parseInt($);+        Yr.addRowDefinition(ot, !1), Yr.addRowDefinition(1 - ot, !1);+      } else+        Yr.height = d.pickerHeight, Yr.addRowDefinition(1, !1);+      if (i.addControl(Yr), d.savedColors) {+        w = new Hi(), w.name = "Swatch Drawer", w.verticalAlignment = pe.VERTICAL_ALIGNMENT_TOP, w.background = X, w.width = d.pickerWidth;+        const ot = d.savedColors.length / d.numSwatchesPerLine;+        let Ht;+        ot == 0 ? Ht = 0 : Ht = ot + 1, w.height = (F * ot + Ht * N).toString() + "px", w.top = Math.floor(F * 0.25).toString() + "px";+        for (let it = 0; it < Math.ceil(d.savedColors.length / d.numSwatchesPerLine) * 2 + 1; it++)+          it % 2 != 0 ? w.addRowDefinition(F, !0) : w.addRowDefinition(N, !0);+        for (let it = 0; it < d.numSwatchesPerLine * 2 + 1; it++)+          it % 2 != 0 ? w.addColumnDefinition(F, !0) : w.addColumnDefinition(N, !0);+        Yr.addControl(w, 1, 0);+      }+      const Zr = new Hi();+      Zr.name = "Picker Panel", Zr.height = d.pickerHeight;+      const hi = parseInt(d.headerHeight) / parseInt(d.pickerHeight), pi = [hi, 1 - hi];+      Zr.addRowDefinition(pi[0], !1), Zr.addRowDefinition(pi[1], !1), Yr.addControl(Zr, 0, 0);+      const ei = new si();+      ei.name = "Dialogue Header Bar", ei.background = "#cccccc", ei.thickness = 0, Zr.addControl(ei, 0, 0);+      const jr = Bs.CreateSimpleButton("closeButton", "a");+      jr.fontFamily = "coreglyphs";+      const Yi = nr.FromHexString(ei.background), yi = new nr(1 - Yi.r, 1 - Yi.g, 1 - Yi.b);+      jr.color = yi.toHexString(), jr.fontSize = Math.floor(parseInt(d.headerHeight) * 0.6), jr.textBlock.textVerticalAlignment = pe.VERTICAL_ALIGNMENT_CENTER, jr.horizontalAlignment = pe.HORIZONTAL_ALIGNMENT_RIGHT, jr.height = jr.width = d.headerHeight, jr.background = ei.background, jr.thickness = 0, jr.pointerDownAnimation = () => {+      }, jr.pointerUpAnimation = () => {+        jr.background = ei.background;+      }, jr.pointerEnterAnimation = () => {+        jr.color = ei.background, jr.background = "red";+      }, jr.pointerOutAnimation = () => {+        jr.color = yi.toHexString(), jr.background = ei.background;+      }, jr.onPointerClickObservable.add(() => {+        ia(xi.background);+      }), Zr.addControl(jr, 0, 0);+      const Ho = new Hi();+      Ho.name = "Dialogue Body", Ho.background = X;+      const Vr = [0.4375, 0.5625];+      Ho.addRowDefinition(1, !1), Ho.addColumnDefinition(Vr[0], !1), Ho.addColumnDefinition(Vr[1], !1), Zr.addControl(Ho, 1, 0);+      const Wo = new Hi();+      Wo.name = "Picker Grid", Wo.addRowDefinition(0.85, !1), Wo.addRowDefinition(0.15, !1), Ho.addControl(Wo, 0, 0);+      const io = new an();+      io.name = "GUI Color Picker", d.pickerHeight < d.pickerWidth ? io.width = 0.89 : io.height = 0.89, io.value = nr.FromHexString(d.lastColor), io.horizontalAlignment = pe.HORIZONTAL_ALIGNMENT_CENTER, io.verticalAlignment = pe.VERTICAL_ALIGNMENT_CENTER, io.onPointerDownObservable.add(() => {+        Dt = io.name, Sr = "", gi(!1);+      }), io.onValueChangedObservable.add(function(ot) {+        Dt == io.name && Lo(ot, io.name);+      }), Wo.addControl(io, 0, 0);+      const ft = new Hi();+      ft.name = "Dialogue Right Half", ft.horizontalAlignment = pe.HORIZONTAL_ALIGNMENT_LEFT;+      const we = [0.514, 0.486];+      ft.addRowDefinition(we[0], !1), ft.addRowDefinition(we[1], !1), Ho.addControl(ft, 1, 1);+      const ke = new Hi();+      ke.name = "Swatches and Buttons";+      const Nt = [0.417, 0.583];+      ke.addRowDefinition(1, !1), ke.addColumnDefinition(Nt[0], !1), ke.addColumnDefinition(Nt[1], !1), ft.addControl(ke, 0, 0);+      const R = new Hi();+      R.name = "New and Current Swatches";+      const rr = [0.04, 0.16, 0.64, 0.16];+      R.addRowDefinition(rr[0], !1), R.addRowDefinition(rr[1], !1), R.addRowDefinition(rr[2], !1), R.addRowDefinition(rr[3], !1), ke.addControl(R, 0, 0);+      const vr = new Hi();+      vr.name = "Active Swatches", vr.width = 0.67, vr.addRowDefinition(0.5, !1), vr.addRowDefinition(0.5, !1), R.addControl(vr, 2, 0);+      const eo = Math.floor(parseInt(d.pickerWidth) * Vr[1] * Nt[0] * 0.11), Tr = Math.floor(parseInt(d.pickerHeight) * pi[1] * we[0] * rr[1] * 0.5);+      let ur;+      d.pickerWidth > d.pickerHeight ? ur = Tr : ur = eo;+      const Er = new zr();+      Er.text = "new", Er.name = "New Color Label", Er.color = Q, Er.fontSize = ur, R.addControl(Er, 1, 0);+      const Ni = new si();+      Ni.name = "New Color Swatch", Ni.background = d.lastColor, Ni.thickness = 0, vr.addControl(Ni, 0, 0);+      const xi = Bs.CreateSimpleButton("currentSwatch", "");+      xi.background = d.lastColor, xi.thickness = 0, xi.onPointerClickObservable.add(() => {+        const ot = nr.FromHexString(xi.background);+        Lo(ot, xi.name), gi(!1);+      }), xi.pointerDownAnimation = () => {+      }, xi.pointerUpAnimation = () => {+      }, xi.pointerEnterAnimation = () => {+      }, xi.pointerOutAnimation = () => {+      }, vr.addControl(xi, 1, 0);+      const Bn = new si();+      Bn.name = "Swatch Outline", Bn.width = 0.67, Bn.thickness = 2, Bn.color = Ke, Bn.isHitTestVisible = !1, R.addControl(Bn, 2, 0);+      const pn = new zr();+      pn.name = "Current Color Label", pn.text = "current", pn.color = Q, pn.fontSize = ur, R.addControl(pn, 3, 0);+      const Ii = new Hi();+      Ii.name = "Button Grid", Ii.height = 0.8;+      const Ia = 1 / 3;+      Ii.addRowDefinition(Ia, !1), Ii.addRowDefinition(Ia, !1), Ii.addRowDefinition(Ia, !1), ke.addControl(Ii, 0, 1);+      const Nn = Math.floor(parseInt(d.pickerWidth) * Vr[1] * Nt[1] * 0.67).toString() + "px", za = Math.floor(parseInt(d.pickerHeight) * pi[1] * we[0] * (parseFloat(Ii.height.toString()) / 100) * Ia * 0.7).toString() + "px";+      parseFloat(Nn) > parseFloat(za) ? at = Math.floor(parseFloat(za) * 0.45) : at = Math.floor(parseFloat(Nn) * 0.11);+      const He = Bs.CreateSimpleButton("butOK", "OK");+      He.width = Nn, He.height = za, He.verticalAlignment = pe.VERTICAL_ALIGNMENT_CENTER, He.thickness = 2, He.color = Q, He.fontSize = at, He.background = X, He.onPointerEnterObservable.add(() => {+        He.background = he;+      }), He.onPointerOutObservable.add(() => {+        He.background = X;+      }), He.pointerDownAnimation = () => {+        He.background = Me;+      }, He.pointerUpAnimation = () => {+        He.background = he;+      }, He.onPointerClickObservable.add(() => {+        gi(!1), ia(Ni.background);+      }), Ii.addControl(He, 0, 0);+      const Mo = Bs.CreateSimpleButton("butCancel", "Cancel");+      Mo.width = Nn, Mo.height = za, Mo.verticalAlignment = pe.VERTICAL_ALIGNMENT_CENTER, Mo.thickness = 2, Mo.color = Q, Mo.fontSize = at, Mo.background = X, Mo.onPointerEnterObservable.add(() => {+        Mo.background = he;+      }), Mo.onPointerOutObservable.add(() => {+        Mo.background = X;+      }), Mo.pointerDownAnimation = () => {+        Mo.background = Me;+      }, Mo.pointerUpAnimation = () => {+        Mo.background = he;+      }, Mo.onPointerClickObservable.add(() => {+        gi(!1), ia(xi.background);+      }), Ii.addControl(Mo, 1, 0), d.savedColors && (tr = Bs.CreateSimpleButton("butSave", "Save"), tr.width = Nn, tr.height = za, tr.verticalAlignment = pe.VERTICAL_ALIGNMENT_CENTER, tr.thickness = 2, tr.fontSize = at, d.savedColors.length < d.swatchLimit ? (tr.color = Q, tr.background = X) : oa(tr, !0), tr.onPointerEnterObservable.add(() => {+        d.savedColors && d.savedColors.length < d.swatchLimit && (tr.background = he);+      }), tr.onPointerOutObservable.add(() => {+        d.savedColors && d.savedColors.length < d.swatchLimit && (tr.background = X);+      }), tr.pointerDownAnimation = () => {+        d.savedColors && d.savedColors.length < d.swatchLimit && (tr.background = Me);+      }, tr.pointerUpAnimation = () => {+        d.savedColors && d.savedColors.length < d.swatchLimit && (tr.background = he);+      }, tr.onPointerClickObservable.add(() => {+        d.savedColors && (d.savedColors.length == 0 && ul(!0), d.savedColors.length < d.swatchLimit && Ta(Ni.background, tr), gi(!1));+      }), d.savedColors.length > 0 && ul(!0), Ii.addControl(tr, 2, 0));+      const Vi = new Hi();+      Vi.name = "Dialog Lower Right", Vi.addRowDefinition(0.02, !1), Vi.addRowDefinition(0.63, !1), Vi.addRowDefinition(0.21, !1), Vi.addRowDefinition(0.14, !1), ft.addControl(Vi, 1, 0);+      const ea = nr.FromHexString(d.lastColor), ti = new Hi();+      ti.name = "RGB Values", ti.width = 0.82, ti.verticalAlignment = pe.VERTICAL_ALIGNMENT_CENTER, ti.addRowDefinition(1 / 3, !1), ti.addRowDefinition(1 / 3, !1), ti.addRowDefinition(1 / 3, !1), ti.addColumnDefinition(0.1, !1), ti.addColumnDefinition(0.2, !1), ti.addColumnDefinition(0.7, !1), Vi.addControl(ti, 1, 0);+      for (let ot = 0; ot < Ur.length; ot++) {+        const Ht = new zr();+        Ht.text = Ur[ot], Ht.color = Q, Ht.fontSize = at, ti.addControl(Ht, ot, 0);+      }+      const ko = new bo();+      ko.width = 0.83, ko.height = 0.72, ko.name = "rIntField", ko.fontSize = at, ko.text = (ea.r * 255).toString(), ko.color = xt, ko.background = vt, ko.onFocusObservable.add(() => {+        Dt = ko.name, Sr = ko.text, gi(!1);+      }), ko.onBlurObservable.add(() => {+        ko.text == "" && (ko.text = "0"), Da(ko, "r"), Dt == ko.name && (Dt = "");+      }), ko.onTextChangedObservable.add(() => {+        Dt == ko.name && Da(ko, "r");+      }), ti.addControl(ko, 0, 1);+      const vo = new bo();+      vo.width = 0.83, vo.height = 0.72, vo.name = "gIntField", vo.fontSize = at, vo.text = (ea.g * 255).toString(), vo.color = xt, vo.background = vt, vo.onFocusObservable.add(() => {+        Dt = vo.name, Sr = vo.text, gi(!1);+      }), vo.onBlurObservable.add(() => {+        vo.text == "" && (vo.text = "0"), Da(vo, "g"), Dt == vo.name && (Dt = "");+      }), vo.onTextChangedObservable.add(() => {+        Dt == vo.name && Da(vo, "g");+      }), ti.addControl(vo, 1, 1);+      const co = new bo();+      co.width = 0.83, co.height = 0.72, co.name = "bIntField", co.fontSize = at, co.text = (ea.b * 255).toString(), co.color = xt, co.background = vt, co.onFocusObservable.add(() => {+        Dt = co.name, Sr = co.text, gi(!1);+      }), co.onBlurObservable.add(() => {+        co.text == "" && (co.text = "0"), Da(co, "b"), Dt == co.name && (Dt = "");+      }), co.onTextChangedObservable.add(() => {+        Dt == co.name && Da(co, "b");+      }), ti.addControl(co, 2, 1);+      const uo = new bo();+      uo.width = 0.95, uo.height = 0.72, uo.name = "rDecField", uo.fontSize = at, uo.text = ea.r.toString(), uo.color = xt, uo.background = vt, uo.onFocusObservable.add(() => {+        Dt = uo.name, Sr = uo.text, gi(!1);+      }), uo.onBlurObservable.add(() => {+        (parseFloat(uo.text) == 0 || uo.text == "") && (uo.text = "0", ra(uo, "r")), Dt == uo.name && (Dt = "");+      }), uo.onTextChangedObservable.add(() => {+        Dt == uo.name && ra(uo, "r");+      }), ti.addControl(uo, 0, 2);+      const fo = new bo();+      fo.width = 0.95, fo.height = 0.72, fo.name = "gDecField", fo.fontSize = at, fo.text = ea.g.toString(), fo.color = xt, fo.background = vt, fo.onFocusObservable.add(() => {+        Dt = fo.name, Sr = fo.text, gi(!1);+      }), fo.onBlurObservable.add(() => {+        (parseFloat(fo.text) == 0 || fo.text == "") && (fo.text = "0", ra(fo, "g")), Dt == fo.name && (Dt = "");+      }), fo.onTextChangedObservable.add(() => {+        Dt == fo.name && ra(fo, "g");+      }), ti.addControl(fo, 1, 2);+      const to = new bo();+      to.width = 0.95, to.height = 0.72, to.name = "bDecField", to.fontSize = at, to.text = ea.b.toString(), to.color = xt, to.background = vt, to.onFocusObservable.add(() => {+        Dt = to.name, Sr = to.text, gi(!1);+      }), to.onBlurObservable.add(() => {+        (parseFloat(to.text) == 0 || to.text == "") && (to.text = "0", ra(to, "b")), Dt == to.name && (Dt = "");+      }), to.onTextChangedObservable.add(() => {+        Dt == to.name && ra(to, "b");+      }), ti.addControl(to, 2, 2);+      const ta = new Hi();+      ta.name = "Hex Value", ta.width = 0.82, ta.addRowDefinition(1, !1), ta.addColumnDefinition(0.1, !1), ta.addColumnDefinition(0.9, !1), Vi.addControl(ta, 2, 0);+      const Qi = new zr();+      Qi.text = "#", Qi.color = Q, Qi.fontSize = at, ta.addControl(Qi, 0, 0);+      const lr = new bo();+      lr.width = 0.96, lr.height = 0.72, lr.name = "hexField", lr.horizontalAlignment = pe.HORIZONTAL_ALIGNMENT_CENTER, lr.fontSize = at;+      const Ad = d.lastColor.split("#");+      lr.text = Ad[1], lr.color = xt, lr.background = vt, lr.onFocusObservable.add(() => {+        Dt = lr.name, Sr = lr.text, gi(!1);+      }), lr.onBlurObservable.add(() => {+        if (lr.text.length == 3) {+          const ot = lr.text.split("");+          lr.text = ot[0] + ot[0] + ot[1] + ot[1] + ot[2] + ot[2];+        }+        lr.text == "" && (lr.text = "000000", Lo(nr.FromHexString(lr.text), "b")), Dt == lr.name && (Dt = "");+      }), lr.onTextChangedObservable.add(() => {+        let ot = lr.text;+        const Ht = /[^0-9A-F]/i.test(ot);+        if ((lr.text.length > 6 || Ht) && Dt == lr.name)+          lr.text = Sr;+        else {+          if (lr.text.length < 6) {+            const it = 6 - lr.text.length;+            for (let Po = 0; Po < it; Po++)+              ot = "0" + ot;+          }+          if (lr.text.length == 3) {+            const it = lr.text.split("");+            ot = it[0] + it[0] + it[1] + it[1] + it[2] + it[2];+          }+          ot = "#" + ot, Dt == lr.name && (Sr = lr.text, Lo(nr.FromHexString(ot), lr.name));+        }+      }), ta.addControl(lr, 0, 1), d.savedColors && d.savedColors.length > 0 && Ta("", tr);+      function Lo(ot, Ht) {+        Dt = Ht;+        const it = ot.toHexString();+        if (Ni.background = it, ko.name != Dt && (ko.text = Math.floor(ot.r * 255).toString()), vo.name != Dt && (vo.text = Math.floor(ot.g * 255).toString()), co.name != Dt && (co.text = Math.floor(ot.b * 255).toString()), uo.name != Dt && (uo.text = ot.r.toString()), fo.name != Dt && (fo.text = ot.g.toString()), to.name != Dt && (to.text = ot.b.toString()), lr.name != Dt) {+          const Po = it.split("#");+          lr.text = Po[1];+        }+        io.name != Dt && (io.value = ot);+      }+      function Da(ot, Ht) {+        let it = ot.text;+        if (/[^0-9]/g.test(it)) {+          ot.text = Sr;+          return;+        } else+          it != "" && (Math.floor(parseInt(it)) < 0 ? it = "0" : Math.floor(parseInt(it)) > 255 ? it = "255" : isNaN(parseInt(it)) && (it = "0")), Dt == ot.name && (Sr = it);+        if (it != "") {+          it = parseInt(it).toString(), ot.text = it;+          const xr = nr.FromHexString(Ni.background);+          Dt == ot.name && (Ht == "r" ? Lo(new nr(parseInt(it) / 255, xr.g, xr.b), ot.name) : Ht == "g" ? Lo(new nr(xr.r, parseInt(it) / 255, xr.b), ot.name) : Lo(new nr(xr.r, xr.g, parseInt(it) / 255), ot.name));+        }+      }+      function ra(ot, Ht) {+        let it = ot.text;+        if (/[^0-9.]/g.test(it)) {+          ot.text = Sr;+          return;+        } else+          it != "" && it != "." && parseFloat(it) != 0 && (parseFloat(it) < 0 ? it = "0.0" : parseFloat(it) > 1 ? it = "1.0" : isNaN(parseFloat(it)) && (it = "0.0")), Dt == ot.name && (Sr = it);+        it != "" && it != "." && parseFloat(it) != 0 ? (it = parseFloat(it).toString(), ot.text = it) : it = "0.0";+        const xr = nr.FromHexString(Ni.background);+        Dt == ot.name && (Ht == "r" ? Lo(new nr(parseFloat(it), xr.g, xr.b), ot.name) : Ht == "g" ? Lo(new nr(xr.r, parseFloat(it), xr.b), ot.name) : Lo(new nr(xr.r, xr.g, parseFloat(it)), ot.name));+      }+      function dl(ot) {+        d.savedColors && d.savedColors.splice(ot, 1), d.savedColors && d.savedColors.length == 0 && (ul(!1), qo = !1);+      }+      function gc() {+        if (d.savedColors && d.savedColors[Io]) {+          let ot;+          qo ? ot = "b" : ot = "";+          const Ht = Bs.CreateSimpleButton("Swatch_" + Io, ot);+          Ht.fontFamily = "coreglyphs";+          const it = nr.FromHexString(d.savedColors[Io]);+          it.r + it.g + it.b > Bt ? Ht.color = xe : Ht.color = yt, Ht.fontSize = Math.floor(F * 0.7), Ht.textBlock.verticalAlignment = pe.VERTICAL_ALIGNMENT_CENTER, Ht.height = Ht.width = F.toString() + "px", Ht.background = d.savedColors[Io], Ht.thickness = 2;+          const xr = Io;+          return Ht.pointerDownAnimation = () => {+            Ht.thickness = 4;+          }, Ht.pointerUpAnimation = () => {+            Ht.thickness = 3;+          }, Ht.pointerEnterAnimation = () => {+            Ht.thickness = 3;+          }, Ht.pointerOutAnimation = () => {+            Ht.thickness = 2;+          }, Ht.onPointerClickObservable.add(() => {+            qo ? (dl(xr), Ta("", tr)) : d.savedColors && Lo(nr.FromHexString(d.savedColors[xr]), Ht.name);+          }), Ht;+        } else+          return null;+      }+      function gi(ot) {+        ot !== void 0 && (qo = ot);+        let Ht;+        if (qo) {+          for (let it = 0; it < w.children.length; it++)+            Ht = w.children[it], Ht.textBlock.text = "b";+          Re !== void 0 && (Re.textBlock.text = "Done");+        } else {+          for (let it = 0; it < w.children.length; it++)+            Ht = w.children[it], Ht.textBlock.text = "";+          Re !== void 0 && (Re.textBlock.text = "Edit");+        }+      }+      function Ta(ot, Ht) {+        if (d.savedColors) {+          ot != "" && d.savedColors.push(ot), Io = 0, w.clearControls();+          const it = Math.ceil(d.savedColors.length / d.numSwatchesPerLine);+          let Po;+          if (it == 0 ? Po = 0 : Po = it + 1, w.rowCount != it + Po) {+            const xr = w.rowCount;+            for (let Ui = 0; Ui < xr; Ui++)+              w.removeRowDefinition(0);+            for (let Ui = 0; Ui < it + Po; Ui++)+              Ui % 2 ? w.addRowDefinition(F, !0) : w.addRowDefinition(N, !0);+          }+          w.height = (F * it + Po * N).toString() + "px";+          for (let xr = 1, Ui = 1; xr < it + Po; xr += 2, Ui++) {+            let In;+            d.savedColors.length > Ui * d.numSwatchesPerLine ? In = d.numSwatchesPerLine : In = d.savedColors.length - (Ui - 1) * d.numSwatchesPerLine;+            const Ea = Math.min(Math.max(In, 0), d.numSwatchesPerLine);+            for (let zn = 0, Ja = 1; zn < Ea; zn++) {+              if (zn > d.numSwatchesPerLine)+                continue;+              const zi = gc();+              if (zi != null)+                w.addControl(zi, xr, Ja), Ja += 2, Io++;+              else+                continue;+            }+          }+          d.savedColors.length >= d.swatchLimit ? oa(Ht, !0) : oa(Ht, !1);+        }+      }+      function ul(ot) {+        ot ? (Re = Bs.CreateSimpleButton("butEdit", "Edit"), Re.width = Nn, Re.height = za, Re.left = Math.floor(parseInt(Nn) * 0.1).toString() + "px", Re.top = (parseFloat(Re.left) * -1).toString() + "px", Re.verticalAlignment = pe.VERTICAL_ALIGNMENT_BOTTOM, Re.horizontalAlignment = pe.HORIZONTAL_ALIGNMENT_LEFT, Re.thickness = 2, Re.color = Q, Re.fontSize = at, Re.background = X, Re.onPointerEnterObservable.add(() => {+          Re.background = he;+        }), Re.onPointerOutObservable.add(() => {+          Re.background = X;+        }), Re.pointerDownAnimation = () => {+          Re.background = Me;+        }, Re.pointerUpAnimation = () => {+          Re.background = he;+        }, Re.onPointerClickObservable.add(() => {+          qo ? qo = !1 : qo = !0, gi();+        }), Wo.addControl(Re, 1, 0)) : Wo.removeControl(Re);+      }+      function oa(ot, Ht) {+        Ht ? (ot.color = p, ot.background = De) : (ot.color = Q, ot.background = X);+      }+      function ia(ot) {+        d.savedColors && d.savedColors.length > 0 ? g({+          savedColors: d.savedColors,+          pickedColor: ot+        }) : g({+          pickedColor: ot+        }), i.removeControl(Yr);+      }+    });+  }+}+an._Epsilon = 1e-6;+q([+  H()+], an.prototype, "value", null);+q([+  H()+], an.prototype, "width", null);+q([+  H()+], an.prototype, "height", null);+q([+  H()+], an.prototype, "size", null);+kr("BABYLON.GUI.ColorPicker", an);+class Lb extends wi {+  /** Gets or sets border thickness */+  get thickness() {+    return this._thickness;+  }+  set thickness(i) {+    this._thickness !== i && (this._thickness = i, this._markAsDirty());+  }+  /** Gets or sets arcing of the ellipse (ratio of the circumference between 0 and 1) */+  get arc() {+    return this._arc;+  }+  set arc(i) {+    this._arc !== i && (this._arc = i, this._markAsDirty());+  }+  /**+   * Creates a new Ellipse+   * @param name defines the control name+   */+  constructor(i) {+    super(i), this.name = i, this._thickness = 1, this._arc = 1;+  }+  _getTypeName() {+    return "Ellipse";+  }+  _localDraw(i) {+    i.save(), (this.shadowBlur || this.shadowOffsetX || this.shadowOffsetY) && (i.shadowColor = this.shadowColor, i.shadowBlur = this.shadowBlur, i.shadowOffsetX = this.shadowOffsetX * this._host.idealRatio, i.shadowOffsetY = this.shadowOffsetY * this._host.idealRatio), pe.drawEllipse(this._currentMeasure.left + this._currentMeasure.width / 2, this._currentMeasure.top + this._currentMeasure.height / 2, this._currentMeasure.width / 2 - this._thickness / 2, this._currentMeasure.height / 2 - this._thickness / 2, this._arc, i), (this._backgroundGradient || this._background) && (i.fillStyle = this._getBackgroundColor(i), i.fill()), (this.shadowBlur || this.shadowOffsetX || this.shadowOffsetY) && (i.shadowBlur = 0, i.shadowOffsetX = 0, i.shadowOffsetY = 0), this._thickness && (this.color && (i.strokeStyle = this.color), i.lineWidth = this._thickness, i.stroke()), i.restore();+  }+  _additionalProcessing(i, d) {+    super._additionalProcessing(i, d), this._measureForChildren.width -= 2 * this._thickness, this._measureForChildren.height -= 2 * this._thickness, this._measureForChildren.left += this._thickness, this._measureForChildren.top += this._thickness;+  }+  _clipForChildren(i) {+    pe.drawEllipse(this._currentMeasure.left + this._currentMeasure.width / 2, this._currentMeasure.top + this._currentMeasure.height / 2, this._currentMeasure.width / 2, this._currentMeasure.height / 2, this._arc, i), i.clip();+  }+  _renderHighlightSpecific(i) {+    pe.drawEllipse(this._currentMeasure.left + this._currentMeasure.width / 2, this._currentMeasure.top + this._currentMeasure.height / 2, this._currentMeasure.width / 2 - this._highlightLineWidth / 2, this._currentMeasure.height / 2 - this._highlightLineWidth / 2, this._arc, i), i.stroke();+  }+}+q([+  H()+], Lb.prototype, "thickness", null);+q([+  H()+], Lb.prototype, "arc", null);+kr("BABYLON.GUI.Ellipse", Lb);+class nS extends Bs {+  constructor(i) {+    super(i), this.name = i, this._unfocusedColor = this.color;+  }+  /**+   * @internal+   */+  _onPointerDown(i, d, g, y, M) {+    return this.isReadOnly || this.focus(), super._onPointerDown(i, d, g, y, M);+  }+}+kr("BABYLON.GUI.FocusableButton", nS);+class Au extends bo {+  /** Gets or sets a boolean indicating if the control can auto stretch its height to adapt to the text */+  get autoStretchHeight() {+    return this._autoStretchHeight;+  }+  set autoStretchHeight(i) {+    this._autoStretchHeight !== i && (this._autoStretchHeight = i, this._markAsDirty());+  }+  set height(i) {+    this.fixedRatioMasterIsWidth = !1, this._height.toString(this._host) !== i && (this._height.fromString(i) && this._markAsDirty(), this._autoStretchHeight = !1);+  }+  get maxHeight() {+    return this._maxHeight.toString(this._host);+  }+  /** Gets the maximum width allowed by the control in pixels */+  get maxHeightInPixels() {+    return this._maxHeight.getValueInPixel(this._host, this._cachedParentMeasure.height);+  }+  set maxHeight(i) {+    this._maxHeight.toString(this._host) !== i && this._maxHeight.fromString(i) && this._markAsDirty();+  }+  /**+   * Creates a new InputTextArea+   * @param name defines the control name+   * @param text defines the text of the control+   */+  constructor(i, d = "") {+    super(i), this.name = i, this._textHorizontalAlignment = pe.HORIZONTAL_ALIGNMENT_LEFT, this._textVerticalAlignment = pe.VERTICAL_ALIGNMENT_TOP, this._prevText = this.text, this._lineSpacing = new St(0), this._maxHeight = new St(1, St.UNITMODE_PERCENTAGE, !1), this.onLinesReadyObservable = new qt(), this.text = d, this.isPointerBlocker = !0, this.onLinesReadyObservable.add(() => this._updateCursorPosition()), this._highlightCursorInfo = {+      initialStartIndex: -1,+      initialRelativeStartIndex: -1,+      initialLineIndex: -1+    }, this._cursorInfo = {+      globalStartIndex: 0,+      globalEndIndex: 0,+      relativeEndIndex: 0,+      relativeStartIndex: 0,+      currentLineIndex: 0+    };+  }+  _getTypeName() {+    return "InputTextArea";+  }+  /**+   * Handles the keyboard event+   * @param evt Defines the KeyboardEvent+   */+  processKeyboard(i) {+    this.isReadOnly || (this.alternativeProcessKey(i.code, i.key, i), this.onKeyboardEventProcessedObservable.notifyObservers(i));+  }+  /**+   * Process the last keyboard input+   *+   * @param code The ascii input number+   * @param key The key string representation+   * @param evt The keyboard event emits with input+   * @internal+   */+  alternativeProcessKey(i, d, g) {+    if (!(g && (g.ctrlKey || g.metaKey) && (d === "c" || d === "v" || d === "x"))) {+      switch (i) {+        case "Period":+          g && g.shiftKey && g.preventDefault();+          break;+        case "Backspace":+          !this._isTextHighlightOn && this._cursorInfo.globalStartIndex > 0 && (this._cursorInfo.globalEndIndex = this._cursorInfo.globalStartIndex, this._cursorInfo.globalStartIndex--), this._prevText = this._textWrapper.text, this._textWrapper.removePart(this._cursorInfo.globalStartIndex, this._cursorInfo.globalEndIndex), this._cursorInfo.globalEndIndex = this._cursorInfo.globalStartIndex, g && g.preventDefault(), this._blinkIsEven = !1, this._isTextHighlightOn = !1, this._textHasChanged();+          break;+        case "Delete":+          !this._isTextHighlightOn && this._cursorInfo.globalEndIndex < this.text.length && (this._cursorInfo.globalEndIndex = this._cursorInfo.globalStartIndex + 1), this._prevText = this._textWrapper.text, this._textWrapper.removePart(this._cursorInfo.globalStartIndex, this._cursorInfo.globalEndIndex), this._cursorInfo.globalEndIndex = this._cursorInfo.globalStartIndex, g && g.preventDefault(), this._blinkIsEven = !1, this._isTextHighlightOn = !1, this._textHasChanged();+          break;+        case "NumpadEnter":+        case "Enter":+          this._prevText = this._textWrapper.text, this._textWrapper.removePart(this._cursorInfo.globalStartIndex, this._cursorInfo.globalEndIndex, `+`), this._cursorInfo.globalStartIndex++, this._cursorInfo.globalEndIndex = this._cursorInfo.globalStartIndex, this._blinkIsEven = !1, this._isTextHighlightOn = !1, this._textHasChanged();+          return;+        case "End":+          this._cursorInfo.globalStartIndex = this.text.length, this._blinkIsEven = !1, this._isTextHighlightOn = !1, this._markAsDirty();+          return;+        case "Home":+          this._cursorInfo.globalStartIndex = 0, this._blinkIsEven = !1, this._isTextHighlightOn = !1, this._markAsDirty();+          return;+        case "ArrowLeft":+          if (this._markAsDirty(), g && g.shiftKey) {+            (g.ctrlKey || g.metaKey) && (this._cursorInfo.globalStartIndex -= this._cursorInfo.relativeStartIndex, this._cursorInfo.globalEndIndex = this._highlightCursorInfo.initialStartIndex), this._isTextHighlightOn ? this._cursorInfo.globalEndIndex > this._highlightCursorInfo.initialStartIndex ? this._cursorInfo.globalEndIndex-- : this._cursorInfo.globalStartIndex-- : (this._highlightCursorInfo.initialLineIndex = this._cursorInfo.currentLineIndex, this._highlightCursorInfo.initialStartIndex = this._cursorInfo.globalStartIndex, this._highlightCursorInfo.initialRelativeStartIndex = this._cursorInfo.relativeStartIndex, this._cursorInfo.globalEndIndex = this._cursorInfo.globalStartIndex, this._cursorInfo.globalStartIndex--, this._isTextHighlightOn = !0), this._blinkIsEven = !0, g.preventDefault();+            return;+          }+          this._isTextHighlightOn ? this._cursorInfo.globalEndIndex = this._cursorInfo.globalStartIndex : g && (g.ctrlKey || g.metaKey) ? (this._cursorInfo.globalStartIndex -= this._cursorInfo.relativeStartIndex, g.preventDefault()) : this._cursorInfo.globalStartIndex > 0 && this._cursorInfo.globalStartIndex--, this._blinkIsEven = !1, this._isTextHighlightOn = !1;+          return;+        case "ArrowRight":+          if (this._markAsDirty(), g && g.shiftKey) {+            if (g.ctrlKey || g.metaKey) {+              const y = this._lines[this._cursorInfo.currentLineIndex].text.length - this._cursorInfo.relativeEndIndex - 1;+              this._cursorInfo.globalEndIndex += y, this._cursorInfo.globalStartIndex = this._highlightCursorInfo.initialStartIndex;+            }+            this._isTextHighlightOn ? this._cursorInfo.globalStartIndex < this._highlightCursorInfo.initialStartIndex ? this._cursorInfo.globalStartIndex++ : this._cursorInfo.globalEndIndex++ : (this._highlightCursorInfo.initialLineIndex = this._cursorInfo.currentLineIndex, this._highlightCursorInfo.initialStartIndex = this._cursorInfo.globalStartIndex, this._highlightCursorInfo.initialRelativeStartIndex = this._cursorInfo.relativeStartIndex, this._cursorInfo.globalEndIndex = this._cursorInfo.globalStartIndex, this._cursorInfo.globalEndIndex++, this._isTextHighlightOn = !0), this._blinkIsEven = !0, g.preventDefault();+            return;+          }+          if (this._isTextHighlightOn)+            this._cursorInfo.globalStartIndex = this._cursorInfo.globalEndIndex;+          else if (g && (g.ctrlKey || g.metaKey)) {+            const y = this._lines[this._cursorInfo.currentLineIndex].text.length - this._cursorInfo.relativeEndIndex;+            this._cursorInfo.globalStartIndex += y;+          } else this._cursorInfo.globalStartIndex < this.text.length && this._cursorInfo.globalStartIndex++;+          this._blinkIsEven = !1, this._isTextHighlightOn = !1;+          return;+        case "ArrowUp":+          if (this._blinkIsEven = !1, g && (g.shiftKey ? (this._isTextHighlightOn || (this._highlightCursorInfo.initialLineIndex = this._cursorInfo.currentLineIndex, this._highlightCursorInfo.initialStartIndex = this._cursorInfo.globalStartIndex, this._highlightCursorInfo.initialRelativeStartIndex = this._cursorInfo.relativeStartIndex), this._isTextHighlightOn = !0, this._blinkIsEven = !0) : this._isTextHighlightOn = !1, g.preventDefault()), this._cursorInfo.currentLineIndex === 0)+            this._cursorInfo.globalStartIndex = 0;+          else {+            const y = this._lines[this._cursorInfo.currentLineIndex], M = this._lines[this._cursorInfo.currentLineIndex - 1];+            let N, O;+            !this._isTextHighlightOn || this._cursorInfo.currentLineIndex < this._highlightCursorInfo.initialLineIndex ? (N = this._cursorInfo.globalStartIndex, O = this._cursorInfo.relativeStartIndex) : (N = this._cursorInfo.globalEndIndex, O = this._cursorInfo.relativeEndIndex);+            const F = y.text.substring(0, O), ne = this._contextForBreakLines.measureText(F).width;+            let $ = 0, Q = 0;+            N -= O, N -= M.text.length + M.lineEnding.length;+            let X = 0;+            for (; $ < ne && X < M.text.length; )+              N++, X++, Q = Math.abs(ne - $), $ = this._contextForBreakLines.measureText(M.text.substring(0, X)).width;+            Math.abs(ne - $) > Q && X > 0 && N--, this._isTextHighlightOn ? this._cursorInfo.currentLineIndex <= this._highlightCursorInfo.initialLineIndex ? (this._cursorInfo.globalStartIndex = N, this._cursorInfo.globalEndIndex = this._highlightCursorInfo.initialStartIndex, this._cursorInfo.relativeEndIndex = this._highlightCursorInfo.initialRelativeStartIndex) : this._cursorInfo.globalEndIndex = N : this._cursorInfo.globalStartIndex = N;+          }+          this._markAsDirty();+          return;+        case "ArrowDown":+          if (this._blinkIsEven = !1, g && (g.shiftKey ? (this._isTextHighlightOn || (this._highlightCursorInfo.initialLineIndex = this._cursorInfo.currentLineIndex, this._highlightCursorInfo.initialStartIndex = this._cursorInfo.globalStartIndex, this._highlightCursorInfo.initialRelativeStartIndex = this._cursorInfo.relativeStartIndex), this._isTextHighlightOn = !0, this._blinkIsEven = !0) : this._isTextHighlightOn = !1, g.preventDefault()), this._cursorInfo.currentLineIndex === this._lines.length - 1)+            this._cursorInfo.globalStartIndex = this.text.length;+          else {+            const y = this._lines[this._cursorInfo.currentLineIndex], M = this._lines[this._cursorInfo.currentLineIndex + 1];+            let N, O;+            !this._isTextHighlightOn || this._cursorInfo.currentLineIndex < this._highlightCursorInfo.initialLineIndex ? (N = this._cursorInfo.globalStartIndex, O = this._cursorInfo.relativeStartIndex) : (N = this._cursorInfo.globalEndIndex, O = this._cursorInfo.relativeEndIndex);+            const F = y.text.substring(0, O), ne = this._contextForBreakLines.measureText(F).width;+            let $ = 0, Q = 0;+            N += y.text.length - O + y.lineEnding.length;+            let X = 0;+            for (; $ < ne && X < M.text.length; )+              N++, X++, Q = Math.abs(ne - $), $ = this._contextForBreakLines.measureText(M.text.substring(0, X)).width;+            Math.abs(ne - $) > Q && X > 0 && N--, this._isTextHighlightOn ? this._cursorInfo.currentLineIndex < this._highlightCursorInfo.initialLineIndex ? (this._cursorInfo.globalStartIndex = N, this._cursorInfo.globalStartIndex > this._cursorInfo.globalEndIndex && (this._cursorInfo.globalEndIndex += this._cursorInfo.globalStartIndex, this._cursorInfo.globalStartIndex = this._cursorInfo.globalEndIndex - this._cursorInfo.globalStartIndex, this._cursorInfo.globalEndIndex -= this._cursorInfo.globalStartIndex)) : (this._cursorInfo.globalEndIndex = N, this._cursorInfo.globalStartIndex = this._highlightCursorInfo.initialStartIndex) : this._cursorInfo.globalStartIndex = N;+          }+          this._markAsDirty();+          return;+      }+      if (d === "a" && g && (g.ctrlKey || g.metaKey)) {+        this.selectAllText(), g.preventDefault();+        return;+      }+      d?.length === 1 && (g?.preventDefault(), this._currentKey = d, this.onBeforeKeyAddObservable.notifyObservers(this), d = this._currentKey, this._addKey && (this._isTextHighlightOn = !1, this._blinkIsEven = !1, this._prevText = this._textWrapper.text, this._textWrapper.removePart(this._cursorInfo.globalStartIndex, this._cursorInfo.globalEndIndex, d), this._cursorInfo.globalStartIndex += d.length, this._cursorInfo.globalEndIndex = this._cursorInfo.globalStartIndex, this._textHasChanged()));+    }+  }+  _parseLineWordWrap(i = "", d, g) {+    const y = [], M = i.split(" ");+    let N = 0;+    for (let O = 0; O < M.length; O++) {+      const F = O > 0 ? i + " " + M[O] : M[0], $ = g.measureText(F).width;+      if ($ > d) {+        O > 0 && (N = g.measureText(i).width, y.push({ text: i, width: N, lineEnding: " " })), i = M[O];+        let Q = "";+        i.split("").map((X) => {+          g.measureText(Q + X).width > d && (y.push({ text: Q, width: g.measureText(Q).width, lineEnding: "" }), Q = ""), Q += X;+        }), i = Q, N = g.measureText(i).width;+      } else+        N = $, i = F;+    }+    return y.push({ text: i, width: N, lineEnding: " " }), y;+  }+  _breakLines(i, d) {+    const g = [], y = (this.text || this.placeholderText).split(`+`);+    if (this.clipContent)+      for (const M of y)+        g.push(...this._parseLineWordWrap(M, i, d));+    else+      for (const M of y)+        g.push(this._parseLine(M, d));+    return g[g.length - 1].lineEnding = `+`, g;+  }+  _parseLine(i = "", d) {+    return { text: i, width: d.measureText(i).width, lineEnding: " " };+  }+  /**+   * Processing of child right before the parent measurement update+   *+   * @param parentMeasure The parent measure+   * @param context The rendering canvas+   * @internal+   */+  _preMeasure(i, d) {+    (!this._fontOffset || this._wasDirty) && (this._fontOffset = pe._GetFontOffset(d.font, this._host.getScene()?.getEngine()));+    let g = this._beforeRenderText(this._textWrapper).text;+    !this.text && this._placeholderText && (g = this._placeholderText), this._textWidth = d.measureText(g).width;+    const y = this._margin.getValueInPixel(this._host, i.width) * 2;+    if (this._autoStretchWidth) {+      const O = g.split(`+`).reduce((ne, $) => {+        const Q = d.measureText($).width, X = d.measureText(ne).width;+        return Q > X ? $ : ne;+      }, ""), F = d.measureText(O).width;+      this.width = Math.min(this._maxWidth.getValueInPixel(this._host, i.width), F + y) + "px", this.autoStretchWidth = !0;+    }+    if (this._availableWidth = this._width.getValueInPixel(this._host, i.width) - y, this._lines = this._breakLines(this._availableWidth, d), this._contextForBreakLines = d, this._autoStretchHeight) {+      const O = this._lines.length * this._fontOffset.height + this._margin.getValueInPixel(this._host, i.height) * 2;+      this.height = Math.min(this._maxHeight.getValueInPixel(this._host, i.height), O) + "px", this._autoStretchHeight = !0;+    }+    const M = this._margin.getValueInPixel(this._host, i.height) * 2;+    if (this._availableHeight = this._height.getValueInPixel(this._host, i.height) - M, this._isFocused) {+      this._cursorInfo.currentLineIndex = 0;+      let N = this._lines[this._cursorInfo.currentLineIndex].text.length + this._lines[this._cursorInfo.currentLineIndex].lineEnding.length, O = 0;+      for (; O + N <= this._cursorInfo.globalStartIndex; )+        O += N, this._cursorInfo.currentLineIndex < this._lines.length - 1 && (this._cursorInfo.currentLineIndex++, N = this._lines[this._cursorInfo.currentLineIndex].text.length + this._lines[this._cursorInfo.currentLineIndex].lineEnding.length);+    }+  }+  _textHasChanged() {+    !this._prevText && this._textWrapper.text && this.placeholderText && (this._cursorInfo.currentLineIndex = 0, this._cursorInfo.globalStartIndex = 1, this._cursorInfo.globalEndIndex = 1, this._cursorInfo.relativeStartIndex = 1, this._cursorInfo.relativeEndIndex = 1), super._textHasChanged();+  }+  _computeScroll() {+    if (this._clipTextLeft = this._currentMeasure.left + this._margin.getValueInPixel(this._host, this._cachedParentMeasure.width), this._clipTextTop = this._currentMeasure.top + this._margin.getValueInPixel(this._host, this._cachedParentMeasure.height), this._isFocused && this._lines[this._cursorInfo.currentLineIndex].width > this._availableWidth) {+      const i = this._clipTextLeft - this._lines[this._cursorInfo.currentLineIndex].width + this._availableWidth;+      this._scrollLeft || (this._scrollLeft = i);+    } else+      this._scrollLeft = this._clipTextLeft;+    if (this._isFocused) {+      const i = (this._cursorInfo.currentLineIndex + 1) * this._fontOffset.height, d = this._clipTextTop - i;+      this._scrollTop || (this._scrollTop = d);+    } else+      this._scrollTop = this._clipTextTop;+  }+  /**+   * Processing of child after the parent measurement update+   *+   * @internal+   */+  _additionalProcessing() {+    this.highlightedText = "", this.onLinesReadyObservable.notifyObservers(this);+  }+  _drawText(i, d, g, y) {+    const M = this._currentMeasure.width;+    let N = this._scrollLeft;+    switch (this._textHorizontalAlignment) {+      case pe.HORIZONTAL_ALIGNMENT_LEFT:+        N += 0;+        break;+      case pe.HORIZONTAL_ALIGNMENT_RIGHT:+        N += M - d;+        break;+      case pe.HORIZONTAL_ALIGNMENT_CENTER:+        N += (M - d) / 2;+        break;+    }+    (this.shadowBlur || this.shadowOffsetX || this.shadowOffsetY) && (y.shadowColor = this.shadowColor, y.shadowBlur = this.shadowBlur, y.shadowOffsetX = this.shadowOffsetX * this._host.idealRatio, y.shadowOffsetY = this.shadowOffsetY * this._host.idealRatio), this.outlineWidth && y.strokeText(i, this._currentMeasure.left + N, g), y.fillText(i, N, g);+  }+  /**+   * Copy the text in the clipboard+   *+   * @param ev The clipboard event+   * @internal+   */+  _onCopyText(i) {+    this._isTextHighlightOn = !1;+    try {+      i.clipboardData && i.clipboardData.setData("text/plain", this._highlightedText);+    } catch {+    }+    this._host.clipboardData = this._highlightedText;+  }+  /**+   * Cut the text and copy it in the clipboard+   *+   * @param ev The clipboard event+   * @internal+   */+  _onCutText(i) {+    if (this._highlightedText) {+      try {+        i.clipboardData && i.clipboardData.setData("text/plain", this._highlightedText);+      } catch {+      }+      this._host.clipboardData = this._highlightedText, this._prevText = this._textWrapper.text, this._textWrapper.removePart(this._cursorInfo.globalStartIndex, this._cursorInfo.globalEndIndex), this._textHasChanged();+    }+  }+  /**+   * Paste the copied text from the clipboard+   *+   * @param ev The clipboard event+   * @internal+   */+  _onPasteText(i) {+    let d;+    i.clipboardData && i.clipboardData.types.indexOf("text/plain") !== -1 ? d = i.clipboardData.getData("text/plain") : d = this._host.clipboardData, this._isTextHighlightOn = !1, this._prevText = this._textWrapper.text, this._textWrapper.removePart(this._cursorInfo.globalStartIndex, this._cursorInfo.globalEndIndex, d);+    const g = d.length - (this._cursorInfo.globalEndIndex - this._cursorInfo.globalStartIndex);+    this._cursorInfo.globalStartIndex += g, this._cursorInfo.globalEndIndex = this._cursorInfo.globalStartIndex, this._clickedCoordinateX = null, this._clickedCoordinateY = null, super._textHasChanged();+  }+  _draw(i) {+    this._computeScroll(), this._scrollLeft = this._scrollLeft ?? 0, this._scrollTop = this._scrollTop ?? 0, i.save(), this._applyStates(i), (this.shadowBlur || this.shadowOffsetX || this.shadowOffsetY) && (i.shadowColor = this.shadowColor, i.shadowBlur = this.shadowBlur, i.shadowOffsetX = this.shadowOffsetX * this._host.idealRatio, i.shadowOffsetY = this.shadowOffsetY * this._host.idealRatio), this._isFocused ? this._focusedBackground && (i.fillStyle = this._isEnabled ? this._focusedBackground : this._disabledColor, i.fillRect(this._currentMeasure.left, this._currentMeasure.top, this._currentMeasure.width, this._currentMeasure.height)) : this._background && (i.fillStyle = this._isEnabled ? this._background : this._disabledColor, i.fillRect(this._currentMeasure.left, this._currentMeasure.top, this._currentMeasure.width, this._currentMeasure.height)), (this.shadowBlur || this.shadowOffsetX || this.shadowOffsetY) && (i.shadowBlur = 0, i.shadowOffsetX = 0, i.shadowOffsetY = 0), this.color && (i.fillStyle = this.color);+    const d = this._currentMeasure.height, g = this._currentMeasure.width;+    let y = 0;+    switch (this._textVerticalAlignment) {+      case pe.VERTICAL_ALIGNMENT_TOP:+        y = this._fontOffset.ascent;+        break;+      case pe.VERTICAL_ALIGNMENT_BOTTOM:+        y = d - this._fontOffset.height * (this._lines.length - 1) - this._fontOffset.descent;+        break;+      case pe.VERTICAL_ALIGNMENT_CENTER:+        y = this._fontOffset.ascent + (d - this._fontOffset.height * this._lines.length) / 2;+        break;+    }+    i.save(), i.beginPath(), i.fillStyle = this.fontStyle, !this._textWrapper.text && this.placeholderText && (i.fillStyle = this._placeholderColor), i.rect(this._clipTextLeft, this._clipTextTop, this._availableWidth + 2, this._availableHeight + 2), i.clip(), y += this._scrollTop;+    for (let M = 0; M < this._lines.length; M++) {+      const N = this._lines[M];+      M !== 0 && this._lineSpacing.internalValue !== 0 && (this._lineSpacing.isPixel ? y += this._lineSpacing.getValue(this._host) : y = y + this._lineSpacing.getValue(this._host) * this._height.getValueInPixel(this._host, this._cachedParentMeasure.height)), this._drawText(N.text, N.width, y, i), y += this._fontOffset.height;+    }+    if (i.restore(), this._isFocused) {+      if (!this._blinkIsEven || this._isTextHighlightOn) {+        let M = this._scrollLeft + i.measureText(this._lines[this._cursorInfo.currentLineIndex].text.substring(0, this._cursorInfo.relativeStartIndex)).width;+        M < this._clipTextLeft ? (this._scrollLeft += this._clipTextLeft - M, M = this._clipTextLeft, this._markAsDirty()) : M > this._clipTextLeft + this._availableWidth && (this._scrollLeft += this._clipTextLeft + this._availableWidth - M, M = this._clipTextLeft + this._availableWidth, this._markAsDirty());+        let N = this._scrollTop + this._cursorInfo.currentLineIndex * this._fontOffset.height;+        N < this._clipTextTop ? (this._scrollTop += this._clipTextTop - N, N = this._clipTextTop, this._markAsDirty()) : N + this._fontOffset.height > this._clipTextTop + this._availableHeight && this._availableHeight > this._fontOffset.height && (this._scrollTop += this._clipTextTop + this._availableHeight - N - this._fontOffset.height, N = this._clipTextTop + this._availableHeight - this._fontOffset.height, this._markAsDirty()), this._isTextHighlightOn || i.fillRect(M, N, 2, this._fontOffset.height);+      }+      if (this._resetBlinking(), this._isTextHighlightOn) {+        clearTimeout(this._blinkTimeout), this._highlightedText = this.text.substring(this._cursorInfo.globalStartIndex, this._cursorInfo.globalEndIndex), i.globalAlpha = this._highlighterOpacity, i.fillStyle = this._textHighlightColor;+        const M = Math.min(this._cursorInfo.currentLineIndex, this._highlightCursorInfo.initialLineIndex), N = Math.max(this._cursorInfo.currentLineIndex, this._highlightCursorInfo.initialLineIndex);+        let O = this._scrollTop + M * this._fontOffset.height;+        for (let F = M; F <= N; F++) {+          const ne = this._lines[F];+          let $ = this._scrollLeft;+          switch (this._textHorizontalAlignment) {+            case pe.HORIZONTAL_ALIGNMENT_LEFT:+              $ += 0;+              break;+            case pe.HORIZONTAL_ALIGNMENT_RIGHT:+              $ += g - ne.width;+              break;+            case pe.HORIZONTAL_ALIGNMENT_CENTER:+              $ += (g - ne.width) / 2;+              break;+          }+          const Q = F === M ? this._cursorInfo.relativeStartIndex : 0, X = F === N ? this._cursorInfo.relativeEndIndex : ne.text.length, he = i.measureText(ne.text.substring(0, Q)).width, Me = ne.text.substring(Q, X), p = i.measureText(Me).width;+          i.fillRect($ + he, O, p, this._fontOffset.height), O += this._fontOffset.height;+        }+        this._cursorInfo.globalEndIndex === this._cursorInfo.globalStartIndex && this._resetBlinking();+      }+    }+    i.restore(), this._thickness && (this._isFocused ? this.focusedColor && (i.strokeStyle = this.focusedColor) : this.color && (i.strokeStyle = this.color), i.lineWidth = this._thickness, i.strokeRect(this._currentMeasure.left + this._thickness / 2, this._currentMeasure.top + this._thickness / 2, this._currentMeasure.width - this._thickness, this._currentMeasure.height - this._thickness));+  }+  _resetBlinking() {+    clearTimeout(this._blinkTimeout), this._blinkTimeout = setTimeout(() => {+      this._blinkIsEven = !this._blinkIsEven, this._markAsDirty();+    }, 500);+  }+  _onPointerDown(i, d, g, y, M) {+    return super._onPointerDown(i, d, g, y, M) ? this.isReadOnly ? !0 : (this._clickedCoordinateX = d.x, this._clickedCoordinateY = d.y, this._isTextHighlightOn = !1, this._highlightedText = "", this._isPointerDown = !0, this._host._capturingControl[g] = this, this._host.focusedControl === this ? (clearTimeout(this._blinkTimeout), this._markAsDirty(), !0) : this._isEnabled ? (this._host.focusedControl = this, !0) : !1) : !1;+  }+  // for textselection+  _onPointerMove(i, d, g, y) {+    y.event.movementX === 0 && y.event.movementY === 0 || (this._host.focusedControl === this && this._isPointerDown && !this.isReadOnly && (this._clickedCoordinateX = d.x, this._clickedCoordinateY = d.y, this._isTextHighlightOn || (this._highlightCursorInfo.initialLineIndex = this._cursorInfo.currentLineIndex, this._highlightCursorInfo.initialStartIndex = this._cursorInfo.globalStartIndex, this._highlightCursorInfo.initialRelativeStartIndex = this._cursorInfo.relativeStartIndex, this._isTextHighlightOn = !0), this._markAsDirty()), super._onPointerMove(i, d, g, y));+  }+  /**+   * Apply the correct position of cursor according to current modification+   */+  _updateCursorPosition() {+    if (this._isFocused)+      if (!this._textWrapper.text && this.placeholderText)+        this._cursorInfo.currentLineIndex = 0, this._cursorInfo.globalStartIndex = 0, this._cursorInfo.globalEndIndex = 0, this._cursorInfo.relativeStartIndex = 0, this._cursorInfo.relativeEndIndex = 0;+      else if (this._clickedCoordinateX && this._clickedCoordinateY) {+        this._isTextHighlightOn || (this._cursorInfo = {+          globalStartIndex: 0,+          globalEndIndex: 0,+          relativeStartIndex: 0,+          relativeEndIndex: 0,+          currentLineIndex: 0+        });+        let i = 0, d = 0;+        const g = this._clickedCoordinateY - this._scrollTop, y = Math.floor(g / this._fontOffset.height);+        this._cursorInfo.currentLineIndex = Math.min(Math.max(y, 0), this._lines.length - 1);+        let M = 0;+        const N = this._clickedCoordinateX - (this._scrollLeft ?? 0);+        let O = 0;+        for (let F = 0; F < this._cursorInfo.currentLineIndex; F++) {+          const ne = this._lines[F];+          i += ne.text.length + ne.lineEnding.length;+        }+        for (; M < N && this._lines[this._cursorInfo.currentLineIndex].text.length > d; )+          d++, O = Math.abs(N - M), M = this._contextForBreakLines.measureText(this._lines[this._cursorInfo.currentLineIndex].text.substring(0, d)).width;+        Math.abs(N - M) > O && d > 0 && d--, i += d, this._isTextHighlightOn ? i < this._highlightCursorInfo.initialStartIndex ? (this._cursorInfo.globalStartIndex = i, this._cursorInfo.relativeStartIndex = d, this._cursorInfo.globalEndIndex = this._highlightCursorInfo.initialStartIndex, this._cursorInfo.relativeEndIndex = this._highlightCursorInfo.initialRelativeStartIndex) : (this._cursorInfo.globalStartIndex = this._highlightCursorInfo.initialStartIndex, this._cursorInfo.relativeStartIndex = this._highlightCursorInfo.initialRelativeStartIndex, this._cursorInfo.globalEndIndex = i, this._cursorInfo.relativeEndIndex = d) : (this._cursorInfo.globalStartIndex = i, this._cursorInfo.relativeStartIndex = d, this._cursorInfo.globalEndIndex = this._cursorInfo.globalStartIndex, this._cursorInfo.relativeEndIndex = this._cursorInfo.relativeStartIndex), this._blinkIsEven = this._isTextHighlightOn, this._clickedCoordinateX = null, this._clickedCoordinateY = null;+      } else {+        this._cursorInfo.relativeStartIndex = 0, this._cursorInfo.currentLineIndex = 0;+        let i = this._lines[this._cursorInfo.currentLineIndex].text.length + this._lines[this._cursorInfo.currentLineIndex].lineEnding.length, d = 0;+        for (; d + i <= this._cursorInfo.globalStartIndex; )+          d += i, this._cursorInfo.currentLineIndex < this._lines.length - 1 && (this._cursorInfo.currentLineIndex++, i = this._lines[this._cursorInfo.currentLineIndex].text.length + this._lines[this._cursorInfo.currentLineIndex].lineEnding.length);+        if (this._cursorInfo.relativeStartIndex = this._cursorInfo.globalStartIndex - d, !this._isTextHighlightOn)+          this._cursorInfo.relativeEndIndex = this._cursorInfo.relativeStartIndex, this._cursorInfo.globalEndIndex = this._cursorInfo.globalStartIndex;+        else if (this._highlightCursorInfo.initialStartIndex !== -1 && this._cursorInfo.globalStartIndex >= this._highlightCursorInfo.initialStartIndex) {+          for (; d + i <= this._cursorInfo.globalEndIndex; )+            d += i, this._cursorInfo.currentLineIndex < this._lines.length - 1 && (this._cursorInfo.currentLineIndex++, i = this._lines[this._cursorInfo.currentLineIndex].text.length + this._lines[this._cursorInfo.currentLineIndex].lineEnding.length);+          this._cursorInfo.relativeEndIndex = this._cursorInfo.globalEndIndex - d;+        }+      }+  }+  /**+   * Update all values of cursor information based on cursorIndex value+   *+   * @param offset The index to take care of+   * @internal+   */+  // eslint-disable-next-line @typescript-eslint/no-unused-vars+  _updateValueFromCursorIndex(i) {+  }+  /**+   * Select the word immediatly under the cursor on double click+   *+   * @param _evt Pointer informations of double click+   * @internal+   */+  _processDblClick(i) {+    let d, g;+    do+      d = this._cursorInfo.globalStartIndex > 0 && this._textWrapper.isWord(this._cursorInfo.globalStartIndex - 1) ? --this._cursorInfo.globalStartIndex : 0, g = this._cursorInfo.globalEndIndex < this._textWrapper.length && this._textWrapper.isWord(this._cursorInfo.globalEndIndex) ? ++this._cursorInfo.globalEndIndex : 0;+    while (d || g);+    this._highlightCursorInfo.initialLineIndex = this._cursorInfo.currentLineIndex, this._highlightCursorInfo.initialStartIndex = this._cursorInfo.globalStartIndex, this.onTextHighlightObservable.notifyObservers(this), this._isTextHighlightOn = !0, this._blinkIsEven = !0, this._markAsDirty();+  }+  /** @internal */+  selectAllText() {+    this._isTextHighlightOn = !0, this._blinkIsEven = !0, this._highlightCursorInfo = {+      initialStartIndex: 0,+      initialRelativeStartIndex: 0,+      initialLineIndex: 0+    }, this._cursorInfo = {+      globalStartIndex: 0,+      globalEndIndex: this._textWrapper.length,+      relativeEndIndex: this._lines[this._lines.length - 1].text.length,+      relativeStartIndex: 0,+      currentLineIndex: this._lines.length - 1+    }, this._markAsDirty();+  }+  dispose() {+    super.dispose(), this.onLinesReadyObservable.clear();+  }+}+q([+  H()+], Au.prototype, "autoStretchHeight", null);+q([+  H()+], Au.prototype, "maxHeight", null);+kr("BABYLON.GUI.InputTextArea", Au);+class aS extends bo {+  _getTypeName() {+    return "InputPassword";+  }+  _beforeRenderText(i) {+    const d = new Ab();+    let g = "";+    for (let y = 0; y < i.length; y++)+      g += "•";+    return d.text = g, d;+  }+}+kr("BABYLON.GUI.InputPassword", aS);+class ll extends pe {+  /** Gets or sets the dash pattern */+  get dash() {+    return this._dash;+  }+  set dash(i) {+    this._dash !== i && (this._dash = i, this._markAsDirty());+  }+  /** Gets or sets the control connected with the line end */+  get connectedControl() {+    return this._connectedControl;+  }+  set connectedControl(i) {+    this._connectedControl === i || i instanceof ll && i._connectedControl === this || (this._connectedControlDirtyObserver && this._connectedControl && (this._connectedControl.onDirtyObservable.remove(this._connectedControlDirtyObserver), this._connectedControlDirtyObserver = null), i && (this._connectedControlDirtyObserver = i.onDirtyObservable.add(() => this._markAsDirty())), this._connectedControl = i, this._markAsDirty());+  }+  /** Gets or sets start coordinates on X axis */+  get x1() {+    return this._x1.toString(this._host);+  }+  set x1(i) {+    this._x1.toString(this._host) !== i && this._x1.fromString(i) && this._markAsDirty();+  }+  /** Gets or sets start coordinates on Y axis */+  get y1() {+    return this._y1.toString(this._host);+  }+  set y1(i) {+    this._y1.toString(this._host) !== i && this._y1.fromString(i) && this._markAsDirty();+  }+  /** Gets or sets end coordinates on X axis */+  get x2() {+    return this._x2.toString(this._host);+  }+  set x2(i) {+    this._x2.toString(this._host) !== i && this._x2.fromString(i) && this._markAsDirty();+  }+  /** Gets or sets end coordinates on Y axis */+  get y2() {+    return this._y2.toString(this._host);+  }+  set y2(i) {+    this._y2.toString(this._host) !== i && this._y2.fromString(i) && this._markAsDirty();+  }+  /** Gets or sets line width */+  get lineWidth() {+    return this._lineWidth;+  }+  set lineWidth(i) {+    this._lineWidth !== i && (this._lineWidth = i, this._markAsDirty());+  }+  /** Gets or sets horizontal alignment */+  set horizontalAlignment(i) {+  }+  /** Gets or sets vertical alignment */+  set verticalAlignment(i) {+  }+  /** @internal */+  get _effectiveX2() {+    return (this._connectedControl ? this._connectedControl.centerX : 0) + this._x2.getValue(this._host);+  }+  /** @internal */+  get _effectiveY2() {+    return (this._connectedControl ? this._connectedControl.centerY : 0) + this._y2.getValue(this._host);+  }+  /**+   * Creates a new Line+   * @param name defines the control name+   */+  constructor(i) {+    super(i), this.name = i, this._lineWidth = 1, this._x1 = new St(0), this._y1 = new St(0), this._x2 = new St(0), this._y2 = new St(0), this._dash = new Array(), this._automaticSize = !0, this.isHitTestVisible = !1, this._horizontalAlignment = pe.HORIZONTAL_ALIGNMENT_LEFT, this._verticalAlignment = pe.VERTICAL_ALIGNMENT_TOP;+  }+  _getTypeName() {+    return "Line";+  }+  _draw(i) {+    i.save(), (this.shadowBlur || this.shadowOffsetX || this.shadowOffsetY) && (i.shadowColor = this.shadowColor, i.shadowBlur = this.shadowBlur, i.shadowOffsetX = this.shadowOffsetX * this._host.idealRatio, i.shadowOffsetY = this.shadowOffsetY * this._host.idealRatio), this._applyStates(i), i.strokeStyle = this._getColor(i), i.lineWidth = this._lineWidth, i.setLineDash(this._dash), i.beginPath(), i.moveTo(this._cachedParentMeasure.left + this._x1.getValue(this._host), this._cachedParentMeasure.top + this._y1.getValue(this._host)), i.lineTo(this._cachedParentMeasure.left + this._effectiveX2, this._cachedParentMeasure.top + this._effectiveY2), i.stroke(), i.restore();+  }+  _measure() {+    this._currentMeasure.width = Math.abs(this._x1.getValue(this._host) - this._effectiveX2) + this._lineWidth, this._currentMeasure.height = Math.abs(this._y1.getValue(this._host) - this._effectiveY2) + this._lineWidth;+  }+  _layout(i, d) {+    return this._connectedControl && this._connectedControl._layout(i, d), super._layout(i, d);+  }+  _computeAlignment(i) {+    this._currentMeasure.left = i.left + Math.min(this._x1.getValue(this._host), this._effectiveX2) - this._lineWidth / 2, this._currentMeasure.top = i.top + Math.min(this._y1.getValue(this._host), this._effectiveY2) - this._lineWidth / 2;+  }+  /**+   * Move one end of the line given 3D cartesian coordinates.+   * @param position Targeted world position+   * @param scene Scene+   * @param end (opt) Set to true to assign x2 and y2 coordinates of the line. Default assign to x1 and y1.+   */+  moveToVector3(i, d, g = !1) {+    if (!this._host || this.parent !== this._host._rootContainer) {+      Lr.Error("Cannot move a control to a vector3 if the control is not at root level");+      return;+    }+    const y = this._host._getGlobalViewport(), M = Se.Project(i, Oh.IdentityReadOnly, d.getTransformMatrix(), y);+    if (this._moveToProjectedPosition(M, g), M.z < 0 || M.z > 1) {+      this.notRenderable = !0;+      return;+    }+    this.notRenderable = !1;+  }+  /**+   * Move one end of the line to a position in screen absolute space.+   * @param projectedPosition Position in screen absolute space (X, Y)+   * @param end (opt) Set to true to assign x2 and y2 coordinates of the line. Default assign to x1 and y1.+   */+  _moveToProjectedPosition(i, d = !1) {+    const g = i.x + this._linkOffsetX.getValue(this._host) + "px", y = i.y + this._linkOffsetY.getValue(this._host) + "px";+    d ? (this.x2 = g, this.y2 = y, this._x2.ignoreAdaptiveScaling = !0, this._y2.ignoreAdaptiveScaling = !0) : (this.x1 = g, this.y1 = y, this._x1.ignoreAdaptiveScaling = !0, this._y1.ignoreAdaptiveScaling = !0);+  }+}+q([+  H()+], ll.prototype, "dash", null);+q([+  H()+], ll.prototype, "x1", null);+q([+  H()+], ll.prototype, "y1", null);+q([+  H()+], ll.prototype, "x2", null);+q([+  H()+], ll.prototype, "y2", null);+q([+  H()+], ll.prototype, "lineWidth", null);+kr("BABYLON.GUI.Line", ll);+class nw {+  /**+   * Creates a new MultiLinePoint+   * @param multiLine defines the source MultiLine object+   */+  constructor(i) {+    this._multiLine = i, this._x = new St(0), this._y = new St(0), this._point = new Se(0, 0, 0);+  }+  /** Gets or sets x coordinate */+  get x() {+    return this._x.toString(this._multiLine._host);+  }+  set x(i) {+    this._x.toString(this._multiLine._host) !== i && this._x.fromString(i) && this._multiLine._markAsDirty();+  }+  /** Gets or sets y coordinate */+  get y() {+    return this._y.toString(this._multiLine._host);+  }+  set y(i) {+    this._y.toString(this._multiLine._host) !== i && this._y.fromString(i) && this._multiLine._markAsDirty();+  }+  /** Gets or sets the control associated with this point */+  get control() {+    return this._control;+  }+  set control(i) {+    this._control !== i && (this._control && this._controlObserver && (this._control.onDirtyObservable.remove(this._controlObserver), this._controlObserver = null), this._control = i, this._control && (this._controlObserver = this._control.onDirtyObservable.add(this._multiLine.onPointUpdate)), this._multiLine._markAsDirty());+  }+  /** Gets or sets the mesh associated with this point */+  get mesh() {+    return this._mesh;+  }+  set mesh(i) {+    this._mesh !== i && (this._mesh && this._meshObserver && this._mesh.getScene().onAfterCameraRenderObservable.remove(this._meshObserver), this._mesh = i, this._mesh && (this._meshObserver = this._mesh.getScene().onAfterCameraRenderObservable.add(this._multiLine.onPointUpdate)), this._multiLine._markAsDirty());+  }+  /** Resets links */+  resetLinks() {+    this.control = null, this.mesh = null;+  }+  /**+   * Gets a translation vector with Z component+   * @returns the translation vector+   */+  translate() {+    return this._point = this._translatePoint(), this._point;+  }+  _translatePoint() {+    if (this._mesh != null)+      return this._multiLine._host.getProjectedPositionWithZ(this._mesh.getBoundingInfo().boundingSphere.center, this._mesh.getWorldMatrix());+    if (this._control != null)+      return new Se(this._control.centerX, this._control.centerY, 1 - hn);+    {+      const i = this._multiLine._host, d = this._x.getValueInPixel(i, Number(i._canvas.width)), g = this._y.getValueInPixel(i, Number(i._canvas.height));+      return new Se(d, g, 1 - hn);+    }+  }+  /** Release associated resources */+  dispose() {+    this.resetLinks();+  }+}+class cw extends pe {+  /**+   * Creates a new MultiLine+   * @param name defines the control name+   */+  constructor(i) {+    super(i), this.name = i, this._lineWidth = 1, this.onPointUpdate = () => {+      this._markAsDirty();+    }, this._automaticSize = !0, this.isHitTestVisible = !1, this._horizontalAlignment = pe.HORIZONTAL_ALIGNMENT_LEFT, this._verticalAlignment = pe.VERTICAL_ALIGNMENT_TOP, this._dash = [], this._points = [];+  }+  /** Gets or sets dash pattern */+  get dash() {+    return this._dash;+  }+  set dash(i) {+    this._dash !== i && (this._dash = i, this._markAsDirty());+  }+  /**+   * Gets point stored at specified index+   * @param index defines the index to look for+   * @returns the requested point if found+   */+  getAt(i) {+    return this._points[i] || (this._points[i] = new nw(this)), this._points[i];+  }+  /**+   * Adds new points to the point collection+   * @param items defines the list of items (mesh, control or 2d coordinates) to add+   * @returns the list of created MultiLinePoint+   */+  add(...i) {+    return i.map((d) => this.push(d));+  }+  /**+   * Adds a new point to the point collection+   * @param item defines the item (mesh, control or 2d coordinates) to add+   * @returns the created MultiLinePoint+   */+  push(i) {+    const d = this.getAt(this._points.length);+    return i == null || (i instanceof $4 ? d.mesh = i : i instanceof pe ? d.control = i : i.x != null && i.y != null && (d.x = i.x, d.y = i.y)), d;+  }+  /**+   * Remove a specific value or point from the active point collection+   * @param value defines the value or point to remove+   */+  remove(i) {+    let d;+    if (i instanceof nw) {+      if (d = this._points.indexOf(i), d === -1)+        return;+    } else+      d = i;+    const g = this._points[d];+    g && (g.dispose(), this._points.splice(d, 1));+  }+  /**+   * Resets this object to initial state (no point)+   */+  reset() {+    for (; this._points.length > 0; )+      this.remove(this._points.length - 1);+  }+  /**+   * Resets all links+   */+  resetLinks() {+    for (const i of this._points)+      i?.resetLinks();+  }+  /** Gets or sets line width */+  get lineWidth() {+    return this._lineWidth;+  }+  set lineWidth(i) {+    this._lineWidth !== i && (this._lineWidth = i, this._markAsDirty());+  }+  set horizontalAlignment(i) {+  }+  set verticalAlignment(i) {+  }+  _getTypeName() {+    return "MultiLine";+  }+  _draw(i) {+    i.save(), (this.shadowBlur || this.shadowOffsetX || this.shadowOffsetY) && (i.shadowColor = this.shadowColor, i.shadowBlur = this.shadowBlur, i.shadowOffsetX = this.shadowOffsetX * this._host.idealRatio, i.shadowOffsetY = this.shadowOffsetY * this._host.idealRatio), this._applyStates(i), i.strokeStyle = this.color, i.lineWidth = this._lineWidth, i.setLineDash(this._dash), i.beginPath();+    let d = !0, g;+    for (const y of this._points)+      y && (d ? (i.moveTo(y._point.x, y._point.y), d = !1) : y._point.z < 1 && g.z < 1 ? i.lineTo(y._point.x, y._point.y) : i.moveTo(y._point.x, y._point.y), g = y._point);+    i.stroke(), i.restore();+  }+  _additionalProcessing() {+    this._minX = null, this._minY = null, this._maxX = null, this._maxY = null;+    for (const i of this._points)+      i && (i.translate(), (this._minX == null || i._point.x < this._minX) && (this._minX = i._point.x), (this._minY == null || i._point.y < this._minY) && (this._minY = i._point.y), (this._maxX == null || i._point.x > this._maxX) && (this._maxX = i._point.x), (this._maxY == null || i._point.y > this._maxY) && (this._maxY = i._point.y));+    this._minX == null && (this._minX = 0), this._minY == null && (this._minY = 0), this._maxX == null && (this._maxX = 0), this._maxY == null && (this._maxY = 0);+  }+  _measure() {+    this._minX == null || this._maxX == null || this._minY == null || this._maxY == null || (this._currentMeasure.width = Math.abs(this._maxX - this._minX) + this._lineWidth, this._currentMeasure.height = Math.abs(this._maxY - this._minY) + this._lineWidth);+  }+  _computeAlignment() {+    this._minX == null || this._minY == null || (this._currentMeasure.left = this._minX - this._lineWidth / 2, this._currentMeasure.top = this._minY - this._lineWidth / 2);+  }+  dispose() {+    this.reset(), super.dispose();+  }+}+q([+  H()+], cw.prototype, "dash", null);+kr("BABYLON.GUI.MultiLine", cw);+class cl extends pe {+  /** Gets or sets border thickness */+  get thickness() {+    return this._thickness;+  }+  set thickness(i) {+    this._thickness !== i && (this._thickness = i, this._markAsDirty());+  }+  /** Gets or sets a value indicating the ratio between overall size and check size */+  get checkSizeRatio() {+    return this._checkSizeRatio;+  }+  set checkSizeRatio(i) {+    i = Math.max(Math.min(1, i), 0), this._checkSizeRatio !== i && (this._checkSizeRatio = i, this._markAsDirty());+  }+  /** Gets or sets background color */+  get background() {+    return this._background;+  }+  set background(i) {+    this._background !== i && (this._background = i, this._markAsDirty());+  }+  /** Gets or sets a boolean indicating if the checkbox is checked or not */+  get isChecked() {+    return this._isChecked;+  }+  set isChecked(i) {+    this._isChecked !== i && (this._isChecked = i, this._markAsDirty(), this.onIsCheckedChangedObservable.notifyObservers(i), this._isChecked && this._host && this._host.executeOnAllControls((d) => {+      if (d === this || d.group === void 0)+        return;+      const g = d;+      g.group === this.group && (g.isChecked = !1);+    }));+  }+  /**+   * Creates a new RadioButton+   * @param name defines the control name+   */+  constructor(i) {+    super(i), this.name = i, this._isChecked = !1, this._background = "black", this._checkSizeRatio = 0.8, this._thickness = 1, this.group = "", this.onIsCheckedChangedObservable = new qt(), this.isPointerBlocker = !0;+  }+  _getTypeName() {+    return "RadioButton";+  }+  _draw(i) {+    i.save(), this._applyStates(i);+    const d = this._currentMeasure.width - this._thickness, g = this._currentMeasure.height - this._thickness;+    if ((this.shadowBlur || this.shadowOffsetX || this.shadowOffsetY) && (i.shadowColor = this.shadowColor, i.shadowBlur = this.shadowBlur, i.shadowOffsetX = this.shadowOffsetX * this._host.idealRatio, i.shadowOffsetY = this.shadowOffsetY * this._host.idealRatio), pe.drawEllipse(this._currentMeasure.left + this._currentMeasure.width / 2, this._currentMeasure.top + this._currentMeasure.height / 2, this._currentMeasure.width / 2 - this._thickness / 2, this._currentMeasure.height / 2 - this._thickness / 2, 1, i), i.fillStyle = this._isEnabled ? this._background : this._disabledColor, i.fill(), (this.shadowBlur || this.shadowOffsetX || this.shadowOffsetY) && (i.shadowBlur = 0, i.shadowOffsetX = 0, i.shadowOffsetY = 0), i.strokeStyle = this.color, i.lineWidth = this._thickness, i.stroke(), this._isChecked) {+      i.fillStyle = this._isEnabled ? this.color : this._disabledColor;+      const y = d * this._checkSizeRatio, M = g * this._checkSizeRatio;+      pe.drawEllipse(this._currentMeasure.left + this._currentMeasure.width / 2, this._currentMeasure.top + this._currentMeasure.height / 2, y / 2 - this._thickness / 2, M / 2 - this._thickness / 2, 1, i), i.fill();+    }+    i.restore();+  }+  // Events+  _onPointerDown(i, d, g, y, M) {+    return super._onPointerDown(i, d, g, y, M) ? (this.isReadOnly || this.isChecked || (this.isChecked = !0), !0) : !1;+  }+  /**+   * Utility function to easily create a radio button with a header+   * @param title defines the label to use for the header+   * @param group defines the group to use for the radio button+   * @param isChecked defines the initial state of the radio button+   * @param onValueChanged defines the callback to call when value changes+   * @returns a StackPanel containing the radio button and a textBlock+   */+  static AddRadioButtonWithHeader(i, d, g, y) {+    const M = new Gi();+    M.isVertical = !1, M.height = "30px";+    const N = new cl();+    N.width = "20px", N.height = "20px", N.isChecked = g, N.color = "green", N.group = d, N.onIsCheckedChangedObservable.add((F) => y(N, F)), M.addControl(N);+    const O = new zr();+    return O.text = i, O.width = "180px", O.paddingLeft = "5px", O.textHorizontalAlignment = pe.HORIZONTAL_ALIGNMENT_LEFT, O.color = "white", M.addControl(O), M;+  }+}+q([+  H()+], cl.prototype, "thickness", null);+q([+  H()+], cl.prototype, "group", void 0);+q([+  H()+], cl.prototype, "checkSizeRatio", null);+q([+  H()+], cl.prototype, "background", null);+q([+  H()+], cl.prototype, "isChecked", null);+kr("BABYLON.GUI.RadioButton", cl);+class $n extends pe {+  /** Gets or sets a boolean indicating if the thumb must be rendered */+  get displayThumb() {+    return this._displayThumb;+  }+  set displayThumb(i) {+    this._displayThumb !== i && (this._displayThumb = i, this._markAsDirty());+  }+  /** Gets or sets a step to apply to values (0 by default) */+  get step() {+    return this._step;+  }+  set step(i) {+    this._step !== i && (this._step = i, this._markAsDirty());+  }+  /** Gets or sets main bar offset (ie. the margin applied to the value bar) */+  get barOffset() {+    return this._barOffset.toString(this._host);+  }+  /** Gets main bar offset in pixels*/+  get barOffsetInPixels() {+    return this._barOffset.getValueInPixel(this._host, this._cachedParentMeasure.width);+  }+  set barOffset(i) {+    this._barOffset.toString(this._host) !== i && this._barOffset.fromString(i) && this._markAsDirty();+  }+  /** Gets or sets thumb width */+  get thumbWidth() {+    return this._thumbWidth.toString(this._host);+  }+  /** Gets thumb width in pixels */+  get thumbWidthInPixels() {+    return this._thumbWidth.getValueInPixel(this._host, this._cachedParentMeasure.width);+  }+  set thumbWidth(i) {+    this._thumbWidth.toString(this._host) !== i && this._thumbWidth.fromString(i) && this._markAsDirty();+  }+  /** Gets or sets minimum value */+  get minimum() {+    return this._minimum;+  }+  set minimum(i) {+    this._minimum !== i && (this._minimum = i, this._markAsDirty(), this.value = Math.max(Math.min(this.value, this._maximum), this._minimum));+  }+  /** Gets or sets maximum value */+  get maximum() {+    return this._maximum;+  }+  set maximum(i) {+    this._maximum !== i && (this._maximum = i, this._markAsDirty(), this.value = Math.max(Math.min(this.value, this._maximum), this._minimum));+  }+  /** Gets or sets current value */+  get value() {+    return this._value;+  }+  set value(i) {+    i = Math.max(Math.min(i, this._maximum), this._minimum), this._value !== i && (this._value = i, this._markAsDirty(), this.onValueChangedObservable.notifyObservers(this._value, void 0, this, this));+  }+  /**Gets or sets a boolean indicating if the slider should be vertical or horizontal */+  get isVertical() {+    return this._isVertical;+  }+  set isVertical(i) {+    this._isVertical !== i && (this._isVertical = i, this._markAsDirty());+  }+  /** Gets or sets a value indicating if the thumb can go over main bar extends */+  get isThumbClamped() {+    return this._isThumbClamped;+  }+  set isThumbClamped(i) {+    this._isThumbClamped !== i && (this._isThumbClamped = i, this._markAsDirty());+  }+  /**+   * Creates a new BaseSlider+   * @param name defines the control name+   */+  constructor(i) {+    super(i), this.name = i, this._thumbWidth = new St(20, St.UNITMODE_PIXEL, !1), this._minimum = 0, this._maximum = 100, this._value = 50, this._isVertical = !1, this._barOffset = new St(5, St.UNITMODE_PIXEL, !1), this._isThumbClamped = !1, this._displayThumb = !0, this._step = 0, this._lastPointerDownId = -1, this._effectiveBarOffset = 0, this.onValueChangedObservable = new qt(), this._pointerIsDown = !1, this.isPointerBlocker = !0;+  }+  _getTypeName() {+    return "BaseSlider";+  }+  _getThumbPosition() {+    return this.isVertical ? (this.maximum - this.value) / (this.maximum - this.minimum) * this._backgroundBoxLength : (this.value - this.minimum) / (this.maximum - this.minimum) * this._backgroundBoxLength;+  }+  _getThumbThickness(i) {+    let d = 0;+    switch (i) {+      case "circle":+        this._thumbWidth.isPixel ? d = Math.max(this._thumbWidth.getValue(this._host), this._backgroundBoxThickness) : d = this._backgroundBoxThickness * this._thumbWidth.getValue(this._host);+        break;+      case "rectangle":+        this._thumbWidth.isPixel ? d = Math.min(this._thumbWidth.getValue(this._host), this._backgroundBoxThickness) : d = this._backgroundBoxThickness * this._thumbWidth.getValue(this._host);+    }+    return d;+  }+  _prepareRenderingData(i) {+    if (this._effectiveBarOffset = 0, this._renderLeft = this._currentMeasure.left, this._renderTop = this._currentMeasure.top, this._renderWidth = this._currentMeasure.width, this._renderHeight = this._currentMeasure.height, this._backgroundBoxLength = Math.max(this._currentMeasure.width, this._currentMeasure.height), this._backgroundBoxThickness = Math.min(this._currentMeasure.width, this._currentMeasure.height), this._effectiveThumbThickness = this._getThumbThickness(i), this.displayThumb && (this._backgroundBoxLength -= this._effectiveThumbThickness), this.isVertical && this._currentMeasure.height < this._currentMeasure.width) {+      zh.Error("Height should be greater than width");+      return;+    }+    this._barOffset.isPixel ? this._effectiveBarOffset = Math.min(this._barOffset.getValue(this._host), this._backgroundBoxThickness) : this._effectiveBarOffset = this._backgroundBoxThickness * this._barOffset.getValue(this._host), this._backgroundBoxThickness -= this._effectiveBarOffset * 2, this.isVertical ? (this._renderLeft += this._effectiveBarOffset, !this.isThumbClamped && this.displayThumb && (this._renderTop += this._effectiveThumbThickness / 2), this._renderHeight = this._backgroundBoxLength, this._renderWidth = this._backgroundBoxThickness) : (this._renderTop += this._effectiveBarOffset, !this.isThumbClamped && this.displayThumb && (this._renderLeft += this._effectiveThumbThickness / 2), this._renderHeight = this._backgroundBoxThickness, this._renderWidth = this._backgroundBoxLength);+  }+  /**+   * @internal+   */+  _updateValueFromPointer(i, d) {+    this._invertTransformMatrix.transformCoordinates(i, d, this._transformedPosition), i = this._transformedPosition.x, d = this._transformedPosition.y;+    let g;+    this._isVertical ? g = this._minimum + (1 - (d - this._currentMeasure.top) / this._currentMeasure.height) * (this._maximum - this._minimum) : g = this._minimum + (i - this._currentMeasure.left) / this._currentMeasure.width * (this._maximum - this._minimum), this.value = this._step ? Math.round(g / this._step) * this._step : g;+  }+  _onPointerDown(i, d, g, y, M) {+    return super._onPointerDown(i, d, g, y, M) ? (this.isReadOnly || (this._pointerIsDown = !0, this._updateValueFromPointer(d.x, d.y), this._host._capturingControl[g] = this, this._lastPointerDownId = g), !0) : !1;+  }+  _onPointerMove(i, d, g, y) {+    g == this._lastPointerDownId && (this._pointerIsDown && !this.isReadOnly && this._updateValueFromPointer(d.x, d.y), super._onPointerMove(i, d, g, y));+  }+  _onPointerUp(i, d, g, y, M) {+    this._pointerIsDown = !1, delete this._host._capturingControl[g], super._onPointerUp(i, d, g, y, M);+  }+  _onCanvasBlur() {+    this._forcePointerUp(), super._onCanvasBlur();+  }+}+q([+  H()+], $n.prototype, "displayThumb", null);+q([+  H()+], $n.prototype, "step", null);+q([+  H()+], $n.prototype, "barOffset", null);+q([+  H()+], $n.prototype, "thumbWidth", null);+q([+  H()+], $n.prototype, "minimum", null);+q([+  H()+], $n.prototype, "maximum", null);+q([+  H()+], $n.prototype, "value", null);+q([+  H()+], $n.prototype, "isVertical", null);+q([+  H()+], $n.prototype, "isThumbClamped", null);+class xd extends $n {+  /** Gets or sets a boolean indicating if the value bar must be rendered */+  get displayValueBar() {+    return this._displayValueBar;+  }+  set displayValueBar(i) {+    this._displayValueBar !== i && (this._displayValueBar = i, this._markAsDirty());+  }+  /** Gets or sets border color */+  get borderColor() {+    return this._borderColor;+  }+  set borderColor(i) {+    this._borderColor !== i && (this._borderColor = i, this._markAsDirty());+  }+  /** Gets or sets background color */+  get background() {+    return this._background;+  }+  set background(i) {+    this._background !== i && (this._background = i, this._markAsDirty());+  }+  /** Gets or sets background gradient */+  get backgroundGradient() {+    return this._backgroundGradient;+  }+  set backgroundGradient(i) {+    this._backgroundGradient !== i && (this._backgroundGradient = i, this._markAsDirty());+  }+  /** Gets or sets thumb's color */+  get thumbColor() {+    return this._thumbColor;+  }+  set thumbColor(i) {+    this._thumbColor !== i && (this._thumbColor = i, this._markAsDirty());+  }+  /** Gets or sets a boolean indicating if the thumb should be round or square */+  get isThumbCircle() {+    return this._isThumbCircle;+  }+  set isThumbCircle(i) {+    this._isThumbCircle !== i && (this._isThumbCircle = i, this._markAsDirty());+  }+  /**+   * Creates a new Slider+   * @param name defines the control name+   */+  constructor(i) {+    super(i), this.name = i, this._background = "black", this._borderColor = "white", this._thumbColor = "", this._isThumbCircle = !1, this._displayValueBar = !0, this._backgroundGradient = null;+  }+  _getTypeName() {+    return "Slider";+  }+  _getBackgroundColor(i) {+    return this._backgroundGradient ? this._backgroundGradient.getCanvasGradient(i) : this._background;+  }+  _draw(i) {+    i.save(), this._applyStates(i), this._prepareRenderingData(this.isThumbCircle ? "circle" : "rectangle");+    let d = this._renderLeft, g = this._renderTop;+    const y = this._renderWidth, M = this._renderHeight;+    let N;+    this.isThumbClamped && this.isThumbCircle ? (this.isVertical ? g += this._effectiveThumbThickness / 2 : d += this._effectiveThumbThickness / 2, N = this._backgroundBoxThickness / 2) : N = (this._effectiveThumbThickness - this._effectiveBarOffset) / 2, N = Math.max(0, N), (this.shadowBlur || this.shadowOffsetX || this.shadowOffsetY) && (i.shadowColor = this.shadowColor, i.shadowBlur = this.shadowBlur, i.shadowOffsetX = this.shadowOffsetX * this._host.idealRatio, i.shadowOffsetY = this.shadowOffsetY * this._host.idealRatio);+    const O = this._getThumbPosition();+    i.fillStyle = this._getBackgroundColor(i), this.isVertical ? this.isThumbClamped ? this.isThumbCircle ? (i.beginPath(), i.arc(d + this._backgroundBoxThickness / 2, g, N, Math.PI, 2 * Math.PI), i.fill(), i.fillRect(d, g, y, M)) : i.fillRect(d, g, y, M + this._effectiveThumbThickness) : i.fillRect(d, g, y, M) : this.isThumbClamped ? this.isThumbCircle ? (i.beginPath(), i.arc(d + this._backgroundBoxLength, g + this._backgroundBoxThickness / 2, N, 0, 2 * Math.PI), i.fill(), i.fillRect(d, g, y, M)) : i.fillRect(d, g, y + this._effectiveThumbThickness, M) : i.fillRect(d, g, y, M), (this.shadowBlur || this.shadowOffsetX || this.shadowOffsetY) && (i.shadowBlur = 0, i.shadowOffsetX = 0, i.shadowOffsetY = 0), i.fillStyle = this._getColor(i), this._displayValueBar && (this.isVertical ? this.isThumbClamped ? this.isThumbCircle ? (i.beginPath(), i.arc(d + this._backgroundBoxThickness / 2, g + this._backgroundBoxLength, N, 0, 2 * Math.PI), i.fill(), i.fillRect(d, g + O, y, M - O)) : i.fillRect(d, g + O, y, M - O + this._effectiveThumbThickness) : i.fillRect(d, g + O, y, M - O) : (this.isThumbClamped && this.isThumbCircle && (i.beginPath(), i.arc(d, g + this._backgroundBoxThickness / 2, N, 0, 2 * Math.PI), i.fill()), i.fillRect(d, g, O, M))), i.fillStyle = this._thumbColor || this._getColor(i), this.displayThumb && ((this.shadowBlur || this.shadowOffsetX || this.shadowOffsetY) && (i.shadowColor = this.shadowColor, i.shadowBlur = this.shadowBlur, i.shadowOffsetX = this.shadowOffsetX * this._host.idealRatio, i.shadowOffsetY = this.shadowOffsetY * this._host.idealRatio), this._isThumbCircle ? (i.beginPath(), this.isVertical ? i.arc(d + this._backgroundBoxThickness / 2, g + O, N, 0, 2 * Math.PI) : i.arc(d + O, g + this._backgroundBoxThickness / 2, N, 0, 2 * Math.PI), i.fill(), (this.shadowBlur || this.shadowOffsetX || this.shadowOffsetY) && (i.shadowBlur = 0, i.shadowOffsetX = 0, i.shadowOffsetY = 0), i.strokeStyle = this._borderColor, i.stroke()) : (this.isVertical ? i.fillRect(d - this._effectiveBarOffset, this._currentMeasure.top + O, this._currentMeasure.width, this._effectiveThumbThickness) : i.fillRect(this._currentMeasure.left + O, this._currentMeasure.top, this._effectiveThumbThickness, this._currentMeasure.height), (this.shadowBlur || this.shadowOffsetX || this.shadowOffsetY) && (i.shadowBlur = 0, i.shadowOffsetX = 0, i.shadowOffsetY = 0), i.strokeStyle = this._borderColor, this.isVertical ? i.strokeRect(d - this._effectiveBarOffset, this._currentMeasure.top + O, this._currentMeasure.width, this._effectiveThumbThickness) : i.strokeRect(this._currentMeasure.left + O, this._currentMeasure.top, this._effectiveThumbThickness, this._currentMeasure.height))), i.restore();+  }+  serialize(i) {+    super.serialize(i), this.backgroundGradient && (i.backgroundGradient = {}, this.backgroundGradient.serialize(i.backgroundGradient));+  }+  /** @internal */+  _parseFromContent(i, d) {+    if (super._parseFromContent(i, d), i.backgroundGradient) {+      const g = Lr.Instantiate("BABYLON.GUI." + i.backgroundGradient.className);+      this.backgroundGradient = new g(), this.backgroundGradient.parse(i.backgroundGradient);+    }+  }+}+q([+  H()+], xd.prototype, "displayValueBar", null);+q([+  H()+], xd.prototype, "borderColor", null);+q([+  H()+], xd.prototype, "background", null);+q([+  H()+], xd.prototype, "thumbColor", null);+q([+  H()+], xd.prototype, "isThumbCircle", null);+kr("BABYLON.GUI.Slider", xd);+class Sb {+  /**+   * Creates a new SelectorGroup+   * @param name of group, used as a group heading+   */+  constructor(i) {+    this.name = i, this._groupPanel = new Gi(), this._selectors = [], this._groupPanel.verticalAlignment = pe.VERTICAL_ALIGNMENT_TOP, this._groupPanel.horizontalAlignment = pe.HORIZONTAL_ALIGNMENT_LEFT, this._groupHeader = this._addGroupHeader(i);+  }+  /** Gets the groupPanel of the SelectorGroup  */+  get groupPanel() {+    return this._groupPanel;+  }+  /** Gets the selectors array */+  get selectors() {+    return this._selectors;+  }+  /** Gets and sets the group header */+  get header() {+    return this._groupHeader.text;+  }+  set header(i) {+    this._groupHeader.text !== "label" && (this._groupHeader.text = i);+  }+  /**+   * @internal+   */+  _addGroupHeader(i) {+    const d = new zr("groupHead", i);+    return d.width = 0.9, d.height = "30px", d.textWrapping = !0, d.color = "black", d.horizontalAlignment = pe.HORIZONTAL_ALIGNMENT_LEFT, d.textHorizontalAlignment = pe.HORIZONTAL_ALIGNMENT_LEFT, d.left = "2px", this._groupPanel.addControl(d), d;+  }+  /**+   * @internal+   */+  _getSelector(i) {+    if (!(i < 0 || i >= this._selectors.length))+      return this._selectors[i];+  }+  /** Removes the selector at the given position+   * @param selectorNb the position of the selector within the group+   */+  removeSelector(i) {+    i < 0 || i >= this._selectors.length || (this._groupPanel.removeControl(this._selectors[i]), this._selectors.splice(i, 1));+  }+}+class H9 extends Sb {+  /** Adds a checkbox as a control+   * @param text is the label for the selector+   * @param func is the function called when the Selector is checked+   * @param checked is true when Selector is checked+   */+  // eslint-disable-next-line @typescript-eslint/no-unused-vars+  addCheckbox(i, d = (y) => {+  }, g = !1) {+    g = g || !1;+    const y = new pc();+    y.width = "20px", y.height = "20px", y.color = "#364249", y.background = "#CCCCCC", y.horizontalAlignment = pe.HORIZONTAL_ALIGNMENT_LEFT, y.onIsCheckedChangedObservable.add(function(N) {+      d(N);+    });+    const M = pe.AddHeader(y, i, "200px", { isHorizontal: !0, controlFirst: !0 });+    M.height = "30px", M.horizontalAlignment = pe.HORIZONTAL_ALIGNMENT_LEFT, M.left = "4px", this.groupPanel.addControl(M), this.selectors.push(M), y.isChecked = g, this.groupPanel.parent && this.groupPanel.parent.parent && (y.color = this.groupPanel.parent.parent.buttonColor, y.background = this.groupPanel.parent.parent.buttonBackground);+  }+  /**+   * @internal+   */+  _setSelectorLabel(i, d) {+    this.selectors[i].children[1].text = d;+  }+  /**+   * @internal+   */+  _setSelectorLabelColor(i, d) {+    this.selectors[i].children[1].color = d;+  }+  /**+   * @internal+   */+  _setSelectorButtonColor(i, d) {+    this.selectors[i].children[0].color = d;+  }+  /**+   * @internal+   */+  _setSelectorButtonBackground(i, d) {+    this.selectors[i].children[0].background = d;+  }+}+class W9 extends Sb {+  constructor() {+    super(...arguments), this._selectNb = 0;+  }+  /** Adds a radio button as a control+   * @param label is the label for the selector+   * @param func is the function called when the Selector is checked+   * @param checked is true when Selector is checked+   */+  // eslint-disable-next-line @typescript-eslint/no-unused-vars+  addRadio(i, d = (y) => {+  }, g = !1) {+    const y = this._selectNb++, M = new cl();+    M.name = i, M.width = "20px", M.height = "20px", M.color = "#364249", M.background = "#CCCCCC", M.group = this.name, M.horizontalAlignment = pe.HORIZONTAL_ALIGNMENT_LEFT, M.onIsCheckedChangedObservable.add(function(O) {+      O && d(y);+    });+    const N = pe.AddHeader(M, i, "200px", { isHorizontal: !0, controlFirst: !0 });+    N.height = "30px", N.horizontalAlignment = pe.HORIZONTAL_ALIGNMENT_LEFT, N.left = "4px", this.groupPanel.addControl(N), this.selectors.push(N), M.isChecked = g, this.groupPanel.parent && this.groupPanel.parent.parent && (M.color = this.groupPanel.parent.parent.buttonColor, M.background = this.groupPanel.parent.parent.buttonBackground);+  }+  /**+   * @internal+   */+  _setSelectorLabel(i, d) {+    this.selectors[i].children[1].text = d;+  }+  /**+   * @internal+   */+  _setSelectorLabelColor(i, d) {+    this.selectors[i].children[1].color = d;+  }+  /**+   * @internal+   */+  _setSelectorButtonColor(i, d) {+    this.selectors[i].children[0].color = d;+  }+  /**+   * @internal+   */+  _setSelectorButtonBackground(i, d) {+    this.selectors[i].children[0].background = d;+  }+}+class G9 extends Sb {+  /**+   * Adds a slider to the SelectorGroup+   * @param label is the label for the SliderBar+   * @param func is the function called when the Slider moves+   * @param unit is a string describing the units used, eg degrees or metres+   * @param min is the minimum value for the Slider+   * @param max is the maximum value for the Slider+   * @param value is the start value for the Slider between min and max+   * @param onValueChange is the function used to format the value displayed, eg radians to degrees+   */+  addSlider(i, d = (F) => {+  }, g = "Units", y = 0, M = 0, N = 0, O = (F) => F | 0) {+    const F = new xd();+    F.name = g, F.value = N, F.minimum = y, F.maximum = M, F.width = 0.9, F.height = "20px", F.color = "#364249", F.background = "#CCCCCC", F.borderColor = "black", F.horizontalAlignment = pe.HORIZONTAL_ALIGNMENT_LEFT, F.left = "4px", F.paddingBottom = "4px", F.onValueChangedObservable.add(function($) {+      F.parent.children[0].text = F.parent.children[0].name + ": " + O($) + " " + F.name, d($);+    });+    const ne = pe.AddHeader(F, i + ": " + O(N) + " " + g, "30px", { isHorizontal: !1, controlFirst: !1 });+    ne.height = "60px", ne.horizontalAlignment = pe.HORIZONTAL_ALIGNMENT_LEFT, ne.left = "4px", ne.children[0].name = i, this.groupPanel.addControl(ne), this.selectors.push(ne), this.groupPanel.parent && this.groupPanel.parent.parent && (F.color = this.groupPanel.parent.parent.buttonColor, F.background = this.groupPanel.parent.parent.buttonBackground);+  }+  /**+   * @internal+   */+  _setSelectorLabel(i, d) {+    this.selectors[i].children[0].name = d, this.selectors[i].children[0].text = d + ": " + this.selectors[i].children[1].value + " " + this.selectors[i].children[1].name;+  }+  /**+   * @internal+   */+  _setSelectorLabelColor(i, d) {+    this.selectors[i].children[0].color = d;+  }+  /**+   * @internal+   */+  _setSelectorButtonColor(i, d) {+    this.selectors[i].children[1].color = d;+  }+  /**+   * @internal+   */+  _setSelectorButtonBackground(i, d) {+    this.selectors[i].children[1].background = d;+  }+}+class Y9 extends si {+  /**+   * Creates a new SelectionPanel+   * @param name of SelectionPanel+   * @param groups is an array of SelectionGroups+   */+  constructor(i, d = []) {+    if (super(i), this.name = i, this.groups = d, this._buttonColor = "#364249", this._buttonBackground = "#CCCCCC", this._headerColor = "black", this._barColor = "white", this._barHeight = "2px", this._spacerHeight = "20px", this._bars = [], this._groups = d, this.thickness = 2, this._panel = new Gi(), this._panel.verticalAlignment = pe.VERTICAL_ALIGNMENT_TOP, this._panel.horizontalAlignment = pe.HORIZONTAL_ALIGNMENT_LEFT, this._panel.top = 5, this._panel.left = 5, this._panel.width = 0.95, d.length > 0) {+      for (let g = 0; g < d.length - 1; g++)+        this._panel.addControl(d[g].groupPanel), this._addSpacer();+      this._panel.addControl(d[d.length - 1].groupPanel);+    }+    this.addControl(this._panel);+  }+  _getTypeName() {+    return "SelectionPanel";+  }+  /** Gets the (stack) panel of the SelectionPanel  */+  get panel() {+    return this._panel;+  }+  /** Gets or sets the headerColor */+  get headerColor() {+    return this._headerColor;+  }+  set headerColor(i) {+    this._headerColor !== i && (this._headerColor = i, this._setHeaderColor());+  }+  _setHeaderColor() {+    for (let i = 0; i < this._groups.length; i++)+      this._groups[i].groupPanel.children[0].color = this._headerColor;+  }+  /** Gets or sets the button color */+  get buttonColor() {+    return this._buttonColor;+  }+  set buttonColor(i) {+    this._buttonColor !== i && (this._buttonColor = i, this._setbuttonColor());+  }+  _setbuttonColor() {+    for (let i = 0; i < this._groups.length; i++)+      for (let d = 0; d < this._groups[i].selectors.length; d++)+        this._groups[i]._setSelectorButtonColor(d, this._buttonColor);+  }+  /** Gets or sets the label color */+  get labelColor() {+    return this._labelColor;+  }+  set labelColor(i) {+    this._labelColor !== i && (this._labelColor = i, this._setLabelColor());+  }+  _setLabelColor() {+    for (let i = 0; i < this._groups.length; i++)+      for (let d = 0; d < this._groups[i].selectors.length; d++)+        this._groups[i]._setSelectorLabelColor(d, this._labelColor);+  }+  /** Gets or sets the button background */+  get buttonBackground() {+    return this._buttonBackground;+  }+  set buttonBackground(i) {+    this._buttonBackground !== i && (this._buttonBackground = i, this._setButtonBackground());+  }+  _setButtonBackground() {+    for (let i = 0; i < this._groups.length; i++)+      for (let d = 0; d < this._groups[i].selectors.length; d++)+        this._groups[i]._setSelectorButtonBackground(d, this._buttonBackground);+  }+  /** Gets or sets the color of separator bar */+  get barColor() {+    return this._barColor;+  }+  set barColor(i) {+    this._barColor !== i && (this._barColor = i, this._setBarColor());+  }+  _setBarColor() {+    for (let i = 0; i < this._bars.length; i++)+      this._bars[i].children[0].background = this._barColor;+  }+  /** Gets or sets the height of separator bar */+  get barHeight() {+    return this._barHeight;+  }+  set barHeight(i) {+    this._barHeight !== i && (this._barHeight = i, this._setBarHeight());+  }+  _setBarHeight() {+    for (let i = 0; i < this._bars.length; i++)+      this._bars[i].children[0].height = this._barHeight;+  }+  /** Gets or sets the height of spacers*/+  get spacerHeight() {+    return this._spacerHeight;+  }+  set spacerHeight(i) {+    this._spacerHeight !== i && (this._spacerHeight = i, this._setSpacerHeight());+  }+  _setSpacerHeight() {+    for (let i = 0; i < this._bars.length; i++)+      this._bars[i].height = this._spacerHeight;+  }+  /** Adds a bar between groups */+  _addSpacer() {+    const i = new wi();+    i.width = 1, i.height = this._spacerHeight, i.horizontalAlignment = pe.HORIZONTAL_ALIGNMENT_LEFT;+    const d = new si();+    d.width = 1, d.height = this._barHeight, d.horizontalAlignment = pe.HORIZONTAL_ALIGNMENT_LEFT, d.verticalAlignment = pe.VERTICAL_ALIGNMENT_CENTER, d.background = this._barColor, d.color = "transparent", i.addControl(d), this._panel.addControl(i), this._bars.push(i);+  }+  /** Add a group to the selection panel+   * @param group is the selector group to add+   */+  addGroup(i) {+    this._groups.length > 0 && this._addSpacer(), this._panel.addControl(i.groupPanel), this._groups.push(i), i.groupPanel.children[0].color = this._headerColor;+    for (let d = 0; d < i.selectors.length; d++)+      i._setSelectorButtonColor(d, this._buttonColor), i._setSelectorButtonBackground(d, this._buttonBackground);+  }+  /** Remove the group from the given position+   * @param groupNb is the position of the group in the list+   */+  removeGroup(i) {+    if (i < 0 || i >= this._groups.length)+      return;+    const d = this._groups[i];+    this._panel.removeControl(d.groupPanel), this._groups.splice(i, 1), i < this._bars.length && (this._panel.removeControl(this._bars[i]), this._bars.splice(i, 1));+  }+  /** Change a group header label+   * @param label is the new group header label+   * @param groupNb is the number of the group to relabel+   * */+  setHeaderName(i, d) {+    if (d < 0 || d >= this._groups.length)+      return;+    const g = this._groups[d];+    g.groupPanel.children[0].text = i;+  }+  /** Change selector label to the one given+   * @param label is the new selector label+   * @param groupNb is the number of the groupcontaining the selector+   * @param selectorNb is the number of the selector within a group to relabel+   * */+  relabel(i, d, g) {+    if (d < 0 || d >= this._groups.length)+      return;+    const y = this._groups[d];+    g < 0 || g >= y.selectors.length || y._setSelectorLabel(g, i);+  }+  /** For a given group position remove the selector at the given position+   * @param groupNb is the number of the group to remove the selector from+   * @param selectorNb is the number of the selector within the group+   */+  removeFromGroupSelector(i, d) {+    if (i < 0 || i >= this._groups.length)+      return;+    const g = this._groups[i];+    d < 0 || d >= g.selectors.length || g.removeSelector(d);+  }+  /** For a given group position of correct type add a checkbox button+   * @param groupNb is the number of the group to remove the selector from+   * @param label is the label for the selector+   * @param func is the function called when the Selector is checked+   * @param checked is true when Selector is checked+   */+  addToGroupCheckbox(i, d, g = () => {+  }, y = !1) {+    if (i < 0 || i >= this._groups.length)+      return;+    this._groups[i].addCheckbox(d, g, y);+  }+  /** For a given group position of correct type add a radio button+   * @param groupNb is the number of the group to remove the selector from+   * @param label is the label for the selector+   * @param func is the function called when the Selector is checked+   * @param checked is true when Selector is checked+   */+  addToGroupRadio(i, d, g = () => {+  }, y = !1) {+    if (i < 0 || i >= this._groups.length)+      return;+    this._groups[i].addRadio(d, g, y);+  }+  /**+   * For a given slider group add a slider+   * @param groupNb is the number of the group to add the slider to+   * @param label is the label for the Slider+   * @param func is the function called when the Slider moves+   * @param unit is a string describing the units used, eg degrees or metres+   * @param min is the minimum value for the Slider+   * @param max is the maximum value for the Slider+   * @param value is the start value for the Slider between min and max+   * @param onVal is the function used to format the value displayed, eg radians to degrees+   */+  addToGroupSlider(i, d, g = () => {+  }, y = "Units", M = 0, N = 0, O = 0, F = (ne) => ne | 0) {+    if (i < 0 || i >= this._groups.length)+      return;+    this._groups[i].addSlider(d, g, y, M, N, O, F);+  }+}+class V9 extends wi {+  get freezeControls() {+    return this._freezeControls;+  }+  set freezeControls(i) {+    if (this._freezeControls === i)+      return;+    i || this._restoreMeasures(), this._freezeControls = !1;+    const d = this.host.getSize(), g = d.width, y = d.height, M = this.host.getContext(), N = new Ko(0, 0, g, y);+    this.host._numLayoutCalls = 0, this.host._rootContainer._layout(N, M), i && (this._updateMeasures(), this._useBuckets() && this._makeBuckets()), this._freezeControls = i, this.host.markAsDirty();+  }+  get bucketWidth() {+    return this._bucketWidth;+  }+  get bucketHeight() {+    return this._bucketHeight;+  }+  setBucketSizes(i, d) {+    this._bucketWidth = i, this._bucketHeight = d, this._useBuckets() ? this._freezeControls && this._makeBuckets() : this._buckets = {};+  }+  _useBuckets() {+    return this._bucketWidth > 0 && this._bucketHeight > 0;+  }+  _makeBuckets() {+    this._buckets = {}, this._bucketLen = Math.ceil(this.widthInPixels / this._bucketWidth), this._dispatchInBuckets(this._children), this._oldLeft = null, this._oldTop = null;+  }+  _dispatchInBuckets(i) {+    for (let d = 0; d < i.length; ++d) {+      const g = i[d], y = Math.max(0, Math.floor((g._customData._origLeft - this._customData.origLeft) / this._bucketWidth)), M = Math.floor((g._customData._origLeft - this._customData.origLeft + g._currentMeasure.width - 1) / this._bucketWidth), N = Math.floor((g._customData._origTop - this._customData.origTop + g._currentMeasure.height - 1) / this._bucketHeight);+      let O = Math.max(0, Math.floor((g._customData._origTop - this._customData.origTop) / this._bucketHeight));+      for (; O <= N; ) {+        for (let F = y; F <= M; ++F) {+          const ne = O * this._bucketLen + F;+          let $ = this._buckets[ne];+          $ || ($ = [], this._buckets[ne] = $), $.push(g);+        }+        O++;+      }+      g instanceof wi && g._children.length > 0 && this._dispatchInBuckets(g._children);+    }+  }+  // reset left and top measures for the window and all its children+  _updateMeasures() {+    const i = this.leftInPixels | 0, d = this.topInPixels | 0;+    this._measureForChildren.left -= i, this._measureForChildren.top -= d, this._currentMeasure.left -= i, this._currentMeasure.top -= d, this._customData.origLeftForChildren = this._measureForChildren.left, this._customData.origTopForChildren = this._measureForChildren.top, this._customData.origLeft = this._currentMeasure.left, this._customData.origTop = this._currentMeasure.top, this._updateChildrenMeasures(this._children, i, d);+  }+  _updateChildrenMeasures(i, d, g) {+    for (let y = 0; y < i.length; ++y) {+      const M = i[y];+      M._currentMeasure.left -= d, M._currentMeasure.top -= g, M._customData._origLeft = M._currentMeasure.left, M._customData._origTop = M._currentMeasure.top, M instanceof wi && M._children.length > 0 && this._updateChildrenMeasures(M._children, d, g);+    }+  }+  _restoreMeasures() {+    const i = this.leftInPixels | 0, d = this.topInPixels | 0;+    this._measureForChildren.left = this._customData.origLeftForChildren + i, this._measureForChildren.top = this._customData.origTopForChildren + d, this._currentMeasure.left = this._customData.origLeft + i, this._currentMeasure.top = this._customData.origTop + d;+  }+  /**+   * Creates a new ScrollViewerWindow+   * @param name of ScrollViewerWindow+   */+  constructor(i) {+    super(i), this._freezeControls = !1, this._bucketWidth = 0, this._bucketHeight = 0, this._buckets = {};+  }+  _getTypeName() {+    return "ScrollViewerWindow";+  }+  /**+   * @internal+   */+  _additionalProcessing(i, d) {+    super._additionalProcessing(i, d), this._parentMeasure = i, this._measureForChildren.left = this._currentMeasure.left, this._measureForChildren.top = this._currentMeasure.top, this._measureForChildren.width = i.width, this._measureForChildren.height = i.height;+  }+  /**+   * @internal+   */+  _layout(i, d) {+    return this._freezeControls ? (this.invalidateRect(), !1) : super._layout(i, d);+  }+  _scrollChildren(i, d, g) {+    for (let y = 0; y < i.length; ++y) {+      const M = i[y];+      M._currentMeasure.left = M._customData._origLeft + d, M._currentMeasure.top = M._customData._origTop + g, M._isClipped = !1, M instanceof wi && M._children.length > 0 && this._scrollChildren(M._children, d, g);+    }+  }+  _scrollChildrenWithBuckets(i, d, g, y) {+    const M = Math.max(0, Math.floor(-i / this._bucketWidth)), N = Math.floor((-i + this._parentMeasure.width - 1) / this._bucketWidth), O = Math.floor((-d + this._parentMeasure.height - 1) / this._bucketHeight);+    let F = Math.max(0, Math.floor(-d / this._bucketHeight));+    for (; F <= O; ) {+      for (let ne = M; ne <= N; ++ne) {+        const $ = F * this._bucketLen + ne, Q = this._buckets[$];+        if (Q)+          for (let X = 0; X < Q.length; ++X) {+            const he = Q[X];+            he._currentMeasure.left = he._customData._origLeft + g, he._currentMeasure.top = he._customData._origTop + y, he._isClipped = !1;+          }+      }+      F++;+    }+  }+  /**+   * @internal+   */+  _draw(i, d) {+    if (!this._freezeControls) {+      super._draw(i, d);+      return;+    }+    this._localDraw(i), this.clipChildren && this._clipForChildren(i);+    const g = this.leftInPixels | 0, y = this.topInPixels | 0;+    this._useBuckets() ? this._oldLeft !== null && this._oldTop !== null ? (this._scrollChildrenWithBuckets(this._oldLeft, this._oldTop, g, y), this._scrollChildrenWithBuckets(g, y, g, y)) : this._scrollChildren(this._children, g, y) : this._scrollChildren(this._children, g, y), this._oldLeft = g, this._oldTop = y;+    for (const M of this._children)+      M._intersectsRect(this._parentMeasure) && M._render(i, this._parentMeasure);+  }+  _postMeasure() {+    if (this._freezeControls) {+      super._postMeasure();+      return;+    }+    let i = this.parentClientWidth, d = this.parentClientHeight;+    for (const g of this.children)+      !g.isVisible || g.notRenderable || (g.horizontalAlignment === pe.HORIZONTAL_ALIGNMENT_CENTER && g._offsetLeft(this._currentMeasure.left - g._currentMeasure.left), g.verticalAlignment === pe.VERTICAL_ALIGNMENT_CENTER && g._offsetTop(this._currentMeasure.top - g._currentMeasure.top), i = Math.max(i, g._currentMeasure.left - this._currentMeasure.left + g._currentMeasure.width + g.paddingRightInPixels), d = Math.max(d, g._currentMeasure.top - this._currentMeasure.top + g._currentMeasure.height + g.paddingBottomInPixels));+    this._currentMeasure.width !== i && (this._width.updateInPlace(i, St.UNITMODE_PIXEL), this._currentMeasure.width = i, this._rebuildLayout = !0, this._isDirty = !0), this._currentMeasure.height !== d && (this._height.updateInPlace(d, St.UNITMODE_PIXEL), this._currentMeasure.height = d, this._rebuildLayout = !0, this._isDirty = !0), super._postMeasure();+  }+}+class Cu extends $n {+  /** Gets or sets border color */+  get borderColor() {+    return this._borderColor;+  }+  set borderColor(i) {+    this._borderColor !== i && (this._borderColor = i, this._markAsDirty());+  }+  /** Gets or sets background color */+  get background() {+    return this._background;+  }+  set background(i) {+    this._background !== i && (this._background = i, this._markAsDirty());+  }+  /** Gets or sets background gradient. Takes precedence over gradient. */+  get backgroundGradient() {+    return this._backgroundGradient;+  }+  set backgroundGradient(i) {+    this._backgroundGradient !== i && (this._backgroundGradient = i, this._markAsDirty());+  }+  /** Inverts the scrolling direction (default: false) */+  get invertScrollDirection() {+    return this._invertScrollDirection;+  }+  set invertScrollDirection(i) {+    this._invertScrollDirection = i;+  }+  /**+   * Creates a new Slider+   * @param name defines the control name+   */+  constructor(i) {+    super(i), this.name = i, this._background = "black", this._borderColor = "white", this._tempMeasure = new Ko(0, 0, 0, 0), this._invertScrollDirection = !1, this._backgroundGradient = null;+  }+  _getTypeName() {+    return "Scrollbar";+  }+  _getThumbThickness() {+    let i;+    return this._thumbWidth.isPixel ? i = this._thumbWidth.getValue(this._host) : i = this._backgroundBoxThickness * this._thumbWidth.getValue(this._host), i;+  }+  _getBackgroundColor(i) {+    return this._backgroundGradient ? this._backgroundGradient.getCanvasGradient(i) : this._background;+  }+  _draw(i) {+    i.save(), this._applyStates(i), this._prepareRenderingData("rectangle");+    const d = this._renderLeft, g = this._getThumbPosition();+    i.fillStyle = this._getBackgroundColor(i), i.fillRect(this._currentMeasure.left, this._currentMeasure.top, this._currentMeasure.width, this._currentMeasure.height), i.fillStyle = this._getColor(i), this.isVertical ? (this._tempMeasure.left = d - this._effectiveBarOffset, this._tempMeasure.top = this._currentMeasure.top + g, this._tempMeasure.width = this._currentMeasure.width, this._tempMeasure.height = this._effectiveThumbThickness) : (this._tempMeasure.left = this._currentMeasure.left + g, this._tempMeasure.top = this._currentMeasure.top, this._tempMeasure.width = this._effectiveThumbThickness, this._tempMeasure.height = this._currentMeasure.height), i.fillRect(this._tempMeasure.left, this._tempMeasure.top, this._tempMeasure.width, this._tempMeasure.height), i.restore();+  }+  /**+   * @internal+   */+  _updateValueFromPointer(i, d) {+    this._invertTransformMatrix.transformCoordinates(i, d, this._transformedPosition), i = this._transformedPosition.x, d = this._transformedPosition.y;+    const g = this._invertScrollDirection ? -1 : 1;+    this._first && (this._first = !1, this._originX = i, this._originY = d, (i < this._tempMeasure.left || i > this._tempMeasure.left + this._tempMeasure.width || d < this._tempMeasure.top || d > this._tempMeasure.top + this._tempMeasure.height) && (this.isVertical ? this.value = this.minimum + (1 - (d - this._currentMeasure.top) / this._currentMeasure.height) * (this.maximum - this.minimum) : this.value = this.minimum + (i - this._currentMeasure.left) / this._currentMeasure.width * (this.maximum - this.minimum)));+    let y;+    this.isVertical ? y = -((d - this._originY) / (this._currentMeasure.height - this._effectiveThumbThickness)) : y = (i - this._originX) / (this._currentMeasure.width - this._effectiveThumbThickness), this.value += g * y * (this.maximum - this.minimum), this._originX = i, this._originY = d;+  }+  _onPointerDown(i, d, g, y, M) {+    return this._first = !0, super._onPointerDown(i, d, g, y, M);+  }+  serialize(i) {+    super.serialize(i), this.backgroundGradient && (i.backgroundGradient = {}, this.backgroundGradient.serialize(i.backgroundGradient));+  }+  _parseFromContent(i, d) {+    if (super._parseFromContent(i, d), i.backgroundGradient) {+      const g = Lr.Instantiate("BABYLON.GUI." + i.backgroundGradient.className);+      this.backgroundGradient = new g(), this.backgroundGradient.parse(i.backgroundGradient);+    }+  }+}+q([+  H()+], Cu.prototype, "borderColor", null);+q([+  H()+], Cu.prototype, "background", null);+q([+  H()+], Cu.prototype, "invertScrollDirection", null);+kr("BABYLON.GUI.Scrollbar", Cu);+class $g extends $n {+  /** Inverts the scrolling direction (default: false) */+  get invertScrollDirection() {+    return this._invertScrollDirection;+  }+  set invertScrollDirection(i) {+    this._invertScrollDirection = i;+  }+  /**+   * Gets or sets the image used to render the background for horizontal bar+   */+  get backgroundImage() {+    return this._backgroundBaseImage;+  }+  set backgroundImage(i) {+    this._backgroundBaseImage !== i && (this._backgroundBaseImage = i, this.isVertical && this.num90RotationInVerticalMode !== 0 ? i.isLoaded ? (this._backgroundImage = i._rotate90(this.num90RotationInVerticalMode, !0), this._markAsDirty()) : i.onImageLoadedObservable.addOnce(() => {+      const d = i._rotate90(this.num90RotationInVerticalMode, !0);+      this._backgroundImage = d, d.isLoaded || d.onImageLoadedObservable.addOnce(() => {+        this._markAsDirty();+      }), this._markAsDirty();+    }) : (this._backgroundImage = i, i && !i.isLoaded && i.onImageLoadedObservable.addOnce(() => {+      this._markAsDirty();+    }), this._markAsDirty()));+  }+  /**+   * Gets or sets the image used to render the thumb+   */+  get thumbImage() {+    return this._thumbBaseImage;+  }+  set thumbImage(i) {+    this._thumbBaseImage !== i && (this._thumbBaseImage = i, this.isVertical && this.num90RotationInVerticalMode !== 0 ? i.isLoaded ? (this._thumbImage = i._rotate90(-this.num90RotationInVerticalMode, !0), this._markAsDirty()) : i.onImageLoadedObservable.addOnce(() => {+      const d = i._rotate90(-this.num90RotationInVerticalMode, !0);+      this._thumbImage = d, d.isLoaded || d.onImageLoadedObservable.addOnce(() => {+        this._markAsDirty();+      }), this._markAsDirty();+    }) : (this._thumbImage = i, i && !i.isLoaded && i.onImageLoadedObservable.addOnce(() => {+      this._markAsDirty();+    }), this._markAsDirty()));+  }+  /**+   * Gets or sets the length of the thumb+   */+  get thumbLength() {+    return this._thumbLength;+  }+  set thumbLength(i) {+    this._thumbLength !== i && (this._thumbLength = i, this._markAsDirty());+  }+  /**+   * Gets or sets the height of the thumb+   */+  get thumbHeight() {+    return this._thumbHeight;+  }+  set thumbHeight(i) {+    this._thumbHeight !== i && (this._thumbHeight = i, this._markAsDirty());+  }+  /**+   * Gets or sets the height of the bar image+   */+  get barImageHeight() {+    return this._barImageHeight;+  }+  set barImageHeight(i) {+    this._barImageHeight !== i && (this._barImageHeight = i, this._markAsDirty());+  }+  /**+   * Creates a new ImageScrollBar+   * @param name defines the control name+   */+  constructor(i) {+    super(i), this.name = i, this._thumbLength = 0.5, this._thumbHeight = 1, this._barImageHeight = 1, this._tempMeasure = new Ko(0, 0, 0, 0), this._invertScrollDirection = !1, this.num90RotationInVerticalMode = 1;+  }+  _getTypeName() {+    return "ImageScrollBar";+  }+  _getThumbThickness() {+    let i;+    return this._thumbWidth.isPixel ? i = this._thumbWidth.getValue(this._host) : i = this._backgroundBoxThickness * this._thumbWidth.getValue(this._host), i;+  }+  _draw(i) {+    i.save(), this._applyStates(i), this._prepareRenderingData("rectangle");+    const d = this._getThumbPosition(), g = this._renderLeft, y = this._renderTop, M = this._renderWidth, N = this._renderHeight;+    this._backgroundImage && (this._tempMeasure.copyFromFloats(g, y, M, N), this.isVertical ? (this._tempMeasure.copyFromFloats(g + M * (1 - this._barImageHeight) * 0.5, this._currentMeasure.top, M * this._barImageHeight, N), this._tempMeasure.height += this._effectiveThumbThickness, this._backgroundImage._currentMeasure.copyFrom(this._tempMeasure)) : (this._tempMeasure.copyFromFloats(this._currentMeasure.left, y + N * (1 - this._barImageHeight) * 0.5, M, N * this._barImageHeight), this._tempMeasure.width += this._effectiveThumbThickness, this._backgroundImage._currentMeasure.copyFrom(this._tempMeasure)), this._backgroundImage._draw(i)), this.isVertical ? this._tempMeasure.copyFromFloats(g - this._effectiveBarOffset + this._currentMeasure.width * (1 - this._thumbHeight) * 0.5, this._currentMeasure.top + d, this._currentMeasure.width * this._thumbHeight, this._effectiveThumbThickness) : this._tempMeasure.copyFromFloats(this._currentMeasure.left + d, this._currentMeasure.top + this._currentMeasure.height * (1 - this._thumbHeight) * 0.5, this._effectiveThumbThickness, this._currentMeasure.height * this._thumbHeight), this._thumbImage && (this._thumbImage._currentMeasure.copyFrom(this._tempMeasure), this._thumbImage._draw(i)), i.restore();+  }+  /**+   * @internal+   */+  _updateValueFromPointer(i, d) {+    this._invertTransformMatrix.transformCoordinates(i, d, this._transformedPosition), i = this._transformedPosition.x, d = this._transformedPosition.y;+    const g = this._invertScrollDirection ? -1 : 1;+    this._first && (this._first = !1, this._originX = i, this._originY = d, (i < this._tempMeasure.left || i > this._tempMeasure.left + this._tempMeasure.width || d < this._tempMeasure.top || d > this._tempMeasure.top + this._tempMeasure.height) && (this.isVertical ? this.value = this.minimum + (1 - (d - this._currentMeasure.top) / this._currentMeasure.height) * (this.maximum - this.minimum) : this.value = this.minimum + (i - this._currentMeasure.left) / this._currentMeasure.width * (this.maximum - this.minimum)));+    let y;+    this.isVertical ? y = -((d - this._originY) / (this._currentMeasure.height - this._effectiveThumbThickness)) : y = (i - this._originX) / (this._currentMeasure.width - this._effectiveThumbThickness), this.value += g * y * (this.maximum - this.minimum), this._originX = i, this._originY = d;+  }+  _onPointerDown(i, d, g, y, M) {+    return this._first = !0, super._onPointerDown(i, d, g, y, M);+  }+}+q([+  H()+], $g.prototype, "num90RotationInVerticalMode", void 0);+q([+  H()+], $g.prototype, "invertScrollDirection", null);+class Lu extends si {+  /**+   * Gets the horizontal scrollbar+   */+  get horizontalBar() {+    return this._horizontalBar;+  }+  /**+   * Gets the vertical scrollbar+   */+  get verticalBar() {+    return this._verticalBar;+  }+  /**+   * Adds a new control to the current container+   * @param control defines the control to add+   * @returns the current container+   */+  addControl(i) {+    return i ? (this._window.addControl(i), this) : this;+  }+  /**+   * Removes a control from the current container+   * @param control defines the control to remove+   * @returns the current container+   */+  removeControl(i) {+    return this._window.removeControl(i), this;+  }+  /** Gets the list of children */+  get children() {+    return this._window.children;+  }+  _flagDescendantsAsMatrixDirty() {+    for (const i of this._children)+      i._markMatrixAsDirty();+  }+  /**+   * Freezes or unfreezes the controls in the window.+   * When controls are frozen, the scroll viewer can render a lot more quickly but updates to positions/sizes of controls+   * are not taken into account. If you want to change positions/sizes, unfreeze, perform the changes then freeze again+   */+  get freezeControls() {+    return this._window.freezeControls;+  }+  set freezeControls(i) {+    this._window.freezeControls = i;+  }+  /** Gets the bucket width */+  get bucketWidth() {+    return this._window.bucketWidth;+  }+  /** Gets the bucket height */+  get bucketHeight() {+    return this._window.bucketHeight;+  }+  /**+   * Sets the bucket sizes.+   * When freezeControls is true, setting a non-zero bucket size will improve performances by updating only+   * controls that are visible. The bucket sizes is used to subdivide (internally) the window area to smaller areas into which+   * controls are dispatched. So, the size should be roughly equals to the mean size of all the controls of+   * the window. To disable the usage of buckets, sets either width or height (or both) to 0.+   * Please note that using this option will raise the memory usage (the higher the bucket sizes, the less memory+   * used), that's why it is not enabled by default.+   * @param width width of the bucket+   * @param height height of the bucket+   */+  setBucketSizes(i, d) {+    this._window.setBucketSizes(i, d);+  }+  /**+   * Forces the horizontal scroll bar to be displayed+   */+  get forceHorizontalBar() {+    return this._forceHorizontalBar;+  }+  set forceHorizontalBar(i) {+    this._grid.setRowDefinition(1, i ? this._barSize : 0, !0), this._horizontalBar.isVisible = i, this._forceHorizontalBar = i;+  }+  /**+   * Forces the vertical scroll bar to be displayed+   */+  get forceVerticalBar() {+    return this._forceVerticalBar;+  }+  set forceVerticalBar(i) {+    this._grid.setColumnDefinition(1, i ? this._barSize : 0, !0), this._verticalBar.isVisible = i, this._forceVerticalBar = i;+  }+  /**+   * Creates a new ScrollViewer+   * @param name of ScrollViewer+   * @param isImageBased+   */+  constructor(i, d) {+    super(i), this._barSize = 20, this._pointerIsOver = !1, this._wheelPrecision = 0.05, this._thumbLength = 0.5, this._thumbHeight = 1, this._barImageHeight = 1, this._horizontalBarImageHeight = 1, this._verticalBarImageHeight = 1, this._oldWindowContentsWidth = 0, this._oldWindowContentsHeight = 0, this._forceHorizontalBar = !1, this._forceVerticalBar = !1, this._useImageBar = d || !1, this.onDirtyObservable.add(() => {+      this._horizontalBarSpace.color = this.color, this._verticalBarSpace.color = this.color, this._dragSpace.color = this.color;+    }), this.onPointerEnterObservable.add(() => {+      this._pointerIsOver = !0;+    }), this.onPointerOutObservable.add(() => {+      this._pointerIsOver = !1;+    }), this._grid = new Hi(), this._useImageBar ? (this._horizontalBar = new $g(), this._verticalBar = new $g()) : (this._horizontalBar = new Cu(), this._verticalBar = new Cu()), this._window = new V9("scrollViewer_window"), this._window.horizontalAlignment = pe.HORIZONTAL_ALIGNMENT_LEFT, this._window.verticalAlignment = pe.VERTICAL_ALIGNMENT_TOP, this._grid.addColumnDefinition(1), this._grid.addColumnDefinition(0, !0), this._grid.addRowDefinition(1), this._grid.addRowDefinition(0, !0), super.addControl(this._grid), this._grid.addControl(this._window, 0, 0), this._verticalBarSpace = new si(), this._verticalBarSpace.horizontalAlignment = pe.HORIZONTAL_ALIGNMENT_LEFT, this._verticalBarSpace.verticalAlignment = pe.VERTICAL_ALIGNMENT_TOP, this._verticalBarSpace.thickness = 1, this._grid.addControl(this._verticalBarSpace, 0, 1), this._addBar(this._verticalBar, this._verticalBarSpace, !0, Math.PI), this._horizontalBarSpace = new si(), this._horizontalBarSpace.horizontalAlignment = pe.HORIZONTAL_ALIGNMENT_LEFT, this._horizontalBarSpace.verticalAlignment = pe.VERTICAL_ALIGNMENT_TOP, this._horizontalBarSpace.thickness = 1, this._grid.addControl(this._horizontalBarSpace, 1, 0), this._addBar(this._horizontalBar, this._horizontalBarSpace, !1, 0), this._dragSpace = new si(), this._dragSpace.thickness = 1, this._grid.addControl(this._dragSpace, 1, 1), this._grid.clipChildren = !1, this._useImageBar || (this.barColor = "grey", this.barBackground = "transparent");+  }+  /** Reset the scroll viewer window to initial size */+  resetWindow() {+    this._window.width = "100%", this._window.height = "100%";+  }+  _getTypeName() {+    return "ScrollViewer";+  }+  _buildClientSizes() {+    const i = this.host.idealRatio;+    this._window.parentClientWidth = this._currentMeasure.width - (this._verticalBar.isVisible || this.forceVerticalBar ? this._barSize * i : 0) - 2 * this.thickness, this._window.parentClientHeight = this._currentMeasure.height - (this._horizontalBar.isVisible || this.forceHorizontalBar ? this._barSize * i : 0) - 2 * this.thickness, this._clientWidth = this._window.parentClientWidth, this._clientHeight = this._window.parentClientHeight;+  }+  _additionalProcessing(i, d) {+    super._additionalProcessing(i, d), this._buildClientSizes();+  }+  _postMeasure() {+    super._postMeasure(), this._updateScroller(), this._setWindowPosition(!1);+  }+  /**+   * Gets or sets the mouse wheel precision+   * from 0 to 1 with a default value of 0.05+   * */+  get wheelPrecision() {+    return this._wheelPrecision;+  }+  set wheelPrecision(i) {+    this._wheelPrecision !== i && (i < 0 && (i = 0), i > 1 && (i = 1), this._wheelPrecision = i);+  }+  /** Gets or sets the scroll bar container background color */+  get scrollBackground() {+    return this._horizontalBarSpace.background;+  }+  set scrollBackground(i) {+    this._horizontalBarSpace.background !== i && (this._horizontalBarSpace.background = i, this._verticalBarSpace.background = i);+  }+  /** Gets or sets the bar color */+  get barColor() {+    return this._barColor;+  }+  set barColor(i) {+    this._barColor !== i && (this._barColor = i, this._horizontalBar.color = i, this._verticalBar.color = i);+  }+  /** Gets or sets the bar image */+  get thumbImage() {+    return this._barImage;+  }+  set thumbImage(i) {+    if (this._barImage === i)+      return;+    this._barImage = i;+    const d = this._horizontalBar, g = this._verticalBar;+    d.thumbImage = i, g.thumbImage = i;+  }+  /** Gets or sets the horizontal bar image */+  get horizontalThumbImage() {+    return this._horizontalBarImage;+  }+  set horizontalThumbImage(i) {+    if (this._horizontalBarImage === i)+      return;+    this._horizontalBarImage = i;+    const d = this._horizontalBar;+    d.thumbImage = i;+  }+  /** Gets or sets the vertical bar image */+  get verticalThumbImage() {+    return this._verticalBarImage;+  }+  set verticalThumbImage(i) {+    if (this._verticalBarImage === i)+      return;+    this._verticalBarImage = i;+    const d = this._verticalBar;+    d.thumbImage = i;+  }+  /** Gets or sets the size of the bar */+  get barSize() {+    return this._barSize;+  }+  set barSize(i) {+    this._barSize !== i && (this._barSize = i, this._markAsDirty(), this._horizontalBar.isVisible && this._grid.setRowDefinition(1, this._barSize, !0), this._verticalBar.isVisible && this._grid.setColumnDefinition(1, this._barSize, !0));+  }+  /** Gets or sets the length of the thumb */+  get thumbLength() {+    return this._thumbLength;+  }+  set thumbLength(i) {+    if (this._thumbLength === i)+      return;+    i <= 0 && (i = 0.1), i > 1 && (i = 1), this._thumbLength = i;+    const d = this._horizontalBar, g = this._verticalBar;+    d.thumbLength = i, g.thumbLength = i, this._markAsDirty();+  }+  /** Gets or sets the height of the thumb */+  get thumbHeight() {+    return this._thumbHeight;+  }+  set thumbHeight(i) {+    if (this._thumbHeight === i)+      return;+    i <= 0 && (i = 0.1), i > 1 && (i = 1), this._thumbHeight = i;+    const d = this._horizontalBar, g = this._verticalBar;+    d.thumbHeight = i, g.thumbHeight = i, this._markAsDirty();+  }+  /** Gets or sets the height of the bar image */+  get barImageHeight() {+    return this._barImageHeight;+  }+  set barImageHeight(i) {+    if (this._barImageHeight === i)+      return;+    i <= 0 && (i = 0.1), i > 1 && (i = 1), this._barImageHeight = i;+    const d = this._horizontalBar, g = this._verticalBar;+    d.barImageHeight = i, g.barImageHeight = i, this._markAsDirty();+  }+  /** Gets or sets the height of the horizontal bar image */+  get horizontalBarImageHeight() {+    return this._horizontalBarImageHeight;+  }+  set horizontalBarImageHeight(i) {+    if (this._horizontalBarImageHeight === i)+      return;+    i <= 0 && (i = 0.1), i > 1 && (i = 1), this._horizontalBarImageHeight = i;+    const d = this._horizontalBar;+    d.barImageHeight = i, this._markAsDirty();+  }+  /** Gets or sets the height of the vertical bar image */+  get verticalBarImageHeight() {+    return this._verticalBarImageHeight;+  }+  set verticalBarImageHeight(i) {+    if (this._verticalBarImageHeight === i)+      return;+    i <= 0 && (i = 0.1), i > 1 && (i = 1), this._verticalBarImageHeight = i;+    const d = this._verticalBar;+    d.barImageHeight = i, this._markAsDirty();+  }+  /** Gets or sets the bar background */+  get barBackground() {+    return this._barBackground;+  }+  set barBackground(i) {+    if (this._barBackground === i)+      return;+    this._barBackground = i;+    const d = this._horizontalBar, g = this._verticalBar;+    d.background = i, g.background = i, this._dragSpace.background = i;+  }+  /** Gets or sets the bar background image */+  get barImage() {+    return this._barBackgroundImage;+  }+  set barImage(i) {+    this._barBackgroundImage = i;+    const d = this._horizontalBar, g = this._verticalBar;+    d.backgroundImage = i, g.backgroundImage = i;+  }+  /** Gets or sets the horizontal bar background image */+  get horizontalBarImage() {+    return this._horizontalBarBackgroundImage;+  }+  set horizontalBarImage(i) {+    this._horizontalBarBackgroundImage = i;+    const d = this._horizontalBar;+    d.backgroundImage = i;+  }+  /** Gets or sets the vertical bar background image */+  get verticalBarImage() {+    return this._verticalBarBackgroundImage;+  }+  set verticalBarImage(i) {+    this._verticalBarBackgroundImage = i;+    const d = this._verticalBar;+    d.backgroundImage = i;+  }+  _setWindowPosition(i = !0) {+    const d = this.host.idealRatio, g = this._window._currentMeasure.width, y = this._window._currentMeasure.height;+    if (!i && this._oldWindowContentsWidth === g && this._oldWindowContentsHeight === y)+      return;+    this._oldWindowContentsWidth = g, this._oldWindowContentsHeight = y;+    const M = this._clientWidth - g, N = this._clientHeight - y, O = this._horizontalBar.value / d * M + "px", F = this._verticalBar.value / d * N + "px";+    O !== this._window.left && (this._window.left = O, this.freezeControls || (this._rebuildLayout = !0)), F !== this._window.top && (this._window.top = F, this.freezeControls || (this._rebuildLayout = !0));+  }+  /** @internal */+  _updateScroller() {+    const i = this._window._currentMeasure.width, d = this._window._currentMeasure.height;+    this._horizontalBar.isVisible && i <= this._clientWidth && !this.forceHorizontalBar ? (this._grid.setRowDefinition(1, 0, !0), this._horizontalBar.isVisible = !1, this._horizontalBar.value = 0, this._rebuildLayout = !0) : !this._horizontalBar.isVisible && (i > this._clientWidth || this.forceHorizontalBar) && (this._grid.setRowDefinition(1, this._barSize, !0), this._horizontalBar.isVisible = !0, this._rebuildLayout = !0), this._verticalBar.isVisible && d <= this._clientHeight && !this.forceVerticalBar ? (this._grid.setColumnDefinition(1, 0, !0), this._verticalBar.isVisible = !1, this._verticalBar.value = 0, this._rebuildLayout = !0) : !this._verticalBar.isVisible && (d > this._clientHeight || this.forceVerticalBar) && (this._grid.setColumnDefinition(1, this._barSize, !0), this._verticalBar.isVisible = !0, this._rebuildLayout = !0), this._buildClientSizes();+    const g = this.host.idealRatio;+    this._horizontalBar.thumbWidth = this._thumbLength * 0.9 * (this._clientWidth / g) + "px", this._verticalBar.thumbWidth = this._thumbLength * 0.9 * (this._clientHeight / g) + "px";+  }+  _link(i) {+    super._link(i), this._attachWheel();+  }+  /**+   * @internal+   */+  _addBar(i, d, g, y) {+    i.paddingLeft = 0, i.width = "100%", i.height = "100%", i.barOffset = 0, i.value = 0, i.maximum = 1, i.horizontalAlignment = pe.HORIZONTAL_ALIGNMENT_CENTER, i.verticalAlignment = pe.VERTICAL_ALIGNMENT_CENTER, i.isVertical = g, i.rotation = y, i.isVisible = !1, d.addControl(i), i.onValueChangedObservable.add(() => {+      this._setWindowPosition();+    });+  }+  /** @internal */+  _attachWheel() {+    !this._host || this._onWheelObserver || (this._onWheelObserver = this.onWheelObservable.add((i) => {+      !this._pointerIsOver || this.isReadOnly || (this._verticalBar.isVisible == !0 && (i.y < 0 && this._verticalBar.value > 0 ? this._verticalBar.value -= this._wheelPrecision : i.y > 0 && this._verticalBar.value < this._verticalBar.maximum && (this._verticalBar.value += this._wheelPrecision)), this._horizontalBar.isVisible == !0 && (i.x < 0 && this._horizontalBar.value < this._horizontalBar.maximum ? this._horizontalBar.value += this._wheelPrecision : i.x > 0 && this._horizontalBar.value > 0 && (this._horizontalBar.value -= this._wheelPrecision)));+    }));+  }+  _renderHighlightSpecific(i) {+    this.isHighlighted && (super._renderHighlightSpecific(i), this._grid._renderHighlightSpecific(i), i.restore());+  }+  /** Releases associated resources */+  dispose() {+    this.onWheelObservable.remove(this._onWheelObserver), this._onWheelObserver = null, super.dispose();+  }+}+q([+  H()+], Lu.prototype, "wheelPrecision", null);+q([+  H()+], Lu.prototype, "scrollBackground", null);+q([+  H()+], Lu.prototype, "barColor", null);+q([+  H()+], Lu.prototype, "barSize", null);+q([+  H()+], Lu.prototype, "barBackground", null);+kr("BABYLON.GUI.ScrollViewer", Lu);+class sS extends si {+  /** Gets or sets group name this toggle button belongs to */+  get group() {+    return this._group;+  }+  set group(i) {+    this._group !== i && (this._group = i);+  }+  /** Gets or sets a boolean indicating if the toggle button is active or not */+  get isActive() {+    return this._isActive;+  }+  set isActive(i) {+    this._isActive !== i && (this._isActive = i, this._isActive ? this.toActiveAnimation?.() : this.toInactiveAnimation?.(), this._markAsDirty(), this.onIsActiveChangedObservable.notifyObservers(i), this._isActive && this._host && this._group && this._host.executeOnAllControls((d) => {+      if (d.typeName === "ToggleButton") {+        if (d === this)+          return;+        const g = d;+        g.group === this.group && (g.isActive = !1);+      }+    }));+  }+  /**+   * Creates a new ToggleButton+   * @param name defines the control name+   * @param group defines the toggle group this toggle belongs to+   */+  constructor(i, d) {+    super(i), this.name = i, this.onIsActiveChangedObservable = new qt(), this.delegatePickingToChildren = !1, this._isActive = !1, this.group = d ?? "", this.thickness = 0, this.isPointerBlocker = !0;+    let g = null;+    this.toActiveAnimation = () => {+      this.thickness = 1;+    }, this.toInactiveAnimation = () => {+      this.thickness = 0;+    }, this.pointerEnterActiveAnimation = () => {+      g = this.alpha, this.alpha -= 0.1;+    }, this.pointerOutActiveAnimation = () => {+      g !== null && (this.alpha = g);+    }, this.pointerDownActiveAnimation = () => {+      this.scaleX -= 0.05, this.scaleY -= 0.05;+    }, this.pointerUpActiveAnimation = () => {+      this.scaleX += 0.05, this.scaleY += 0.05;+    }, this.pointerEnterInactiveAnimation = () => {+      g = this.alpha, this.alpha -= 0.1;+    }, this.pointerOutInactiveAnimation = () => {+      g !== null && (this.alpha = g);+    }, this.pointerDownInactiveAnimation = () => {+      this.scaleX -= 0.05, this.scaleY -= 0.05;+    }, this.pointerUpInactiveAnimation = () => {+      this.scaleX += 0.05, this.scaleY += 0.05;+    };+  }+  _getTypeName() {+    return "ToggleButton";+  }+  // While being a container, the toggle button behaves like a control.+  /**+   * @internal+   */+  _processPicking(i, d, g, y, M, N, O, F) {+    if (!this._isEnabled || !this.isHitTestVisible || !this.isVisible || this.notRenderable || !super.contains(i, d))+      return !1;+    if (this.delegatePickingToChildren) {+      let ne = !1;+      for (let $ = this._children.length - 1; $ >= 0; $--) {+        const Q = this._children[$];+        if (Q.isEnabled && Q.isHitTestVisible && Q.isVisible && !Q.notRenderable && Q.contains(i, d)) {+          ne = !0;+          break;+        }+      }+      if (!ne)+        return !1;+    }+    return this._processObservables(y, i, d, g, M, N, O, F), !0;+  }+  /**+   * @internal+   */+  _onPointerEnter(i, d) {+    return super._onPointerEnter(i, d) ? (this.isReadOnly || (this._isActive ? this.pointerEnterActiveAnimation && this.pointerEnterActiveAnimation() : this.pointerEnterInactiveAnimation && this.pointerEnterInactiveAnimation()), !0) : !1;+  }+  /**+   * @internal+   */+  _onPointerOut(i, d, g = !1) {+    this.isReadOnly || (this._isActive ? this.pointerOutActiveAnimation && this.pointerOutActiveAnimation() : this.pointerOutInactiveAnimation && this.pointerOutInactiveAnimation()), super._onPointerOut(i, d, g);+  }+  /**+   * @internal+   */+  _onPointerDown(i, d, g, y, M) {+    return super._onPointerDown(i, d, g, y, M) ? (this.isReadOnly || (this._isActive ? this.pointerDownActiveAnimation && this.pointerDownActiveAnimation() : this.pointerDownInactiveAnimation && this.pointerDownInactiveAnimation()), !0) : !1;+  }+  /**+   * @internal+   */+  _onPointerUp(i, d, g, y, M, N) {+    this.isReadOnly || (this._isActive ? this.pointerUpActiveAnimation && this.pointerUpActiveAnimation() : this.pointerUpInactiveAnimation && this.pointerUpInactiveAnimation()), super._onPointerUp(i, d, g, y, M, N);+  }+}+kr("BABYLON.GUI.ToggleButton", sS);+class Q9 {+}+class jb extends Gi {+  constructor() {+    super(...arguments), this.onKeyPressObservable = new qt(), this.defaultButtonWidth = "40px", this.defaultButtonHeight = "40px", this.defaultButtonPaddingLeft = "2px", this.defaultButtonPaddingRight = "2px", this.defaultButtonPaddingTop = "2px", this.defaultButtonPaddingBottom = "2px", this.defaultButtonColor = "#DDD", this.defaultButtonBackground = "#070707", this.shiftButtonColor = "#7799FF", this.selectedShiftThickness = 1, this.shiftState = 0, this._currentlyConnectedInputText = null, this._connectedInputTexts = [], this._onKeyPressObserver = null;+  }+  _getTypeName() {+    return "VirtualKeyboard";+  }+  _createKey(i, d) {+    const g = Bs.CreateSimpleButton(i, i);+    return g.width = d && d.width ? d.width : this.defaultButtonWidth, g.height = d && d.height ? d.height : this.defaultButtonHeight, g.color = d && d.color ? d.color : this.defaultButtonColor, g.background = d && d.background ? d.background : this.defaultButtonBackground, g.paddingLeft = d && d.paddingLeft ? d.paddingLeft : this.defaultButtonPaddingLeft, g.paddingRight = d && d.paddingRight ? d.paddingRight : this.defaultButtonPaddingRight, g.paddingTop = d && d.paddingTop ? d.paddingTop : this.defaultButtonPaddingTop, g.paddingBottom = d && d.paddingBottom ? d.paddingBottom : this.defaultButtonPaddingBottom, g.thickness = 0, g.isFocusInvisible = !0, g.shadowColor = this.shadowColor, g.shadowBlur = this.shadowBlur, g.shadowOffsetX = this.shadowOffsetX, g.shadowOffsetY = this.shadowOffsetY, g.onPointerUpObservable.add(() => {+      this.onKeyPressObservable.notifyObservers(i);+    }), g;+  }+  /**+   * Adds a new row of keys+   * @param keys defines the list of keys to add+   * @param propertySets defines the associated property sets+   */+  addKeysRow(i, d) {+    const g = new Gi();+    g.isVertical = !1, g.isFocusInvisible = !0;+    let y = null;+    for (let M = 0; M < i.length; M++) {+      let N = null;+      d && d.length === i.length && (N = d[M]);+      const O = this._createKey(i[M], N);+      (!y || O.heightInPixels > y.heightInPixels) && (y = O), g.addControl(O);+    }+    g.height = y ? y.height : this.defaultButtonHeight, this.addControl(g);+  }+  /**+   * Set the shift key to a specific state+   * @param shiftState defines the new shift state+   */+  applyShiftState(i) {+    if (this.children)+      for (let d = 0; d < this.children.length; d++) {+        const g = this.children[d];+        if (!g || !g.children)+          continue;+        const y = g;+        for (let M = 0; M < y.children.length; M++) {+          const N = y.children[M];+          if (!N || !N.children[0])+            continue;+          const O = N.children[0];+          O.text === "⇧" && (N.color = i ? this.shiftButtonColor : this.defaultButtonColor, N.thickness = i > 1 ? this.selectedShiftThickness : 0), O.text = i > 0 ? O.text.toUpperCase() : O.text.toLowerCase();+        }+      }+  }+  /** Gets the input text control currently attached to the keyboard */+  get connectedInputText() {+    return this._currentlyConnectedInputText;+  }+  /**+   * Connects the keyboard with an input text control+   *+   * @param input defines the target control+   */+  connect(i) {+    if (this._connectedInputTexts.some((M) => M.input === i))+      return;+    this._onKeyPressObserver === null && (this._onKeyPressObserver = this.onKeyPressObservable.add((M) => {+      if (this._currentlyConnectedInputText) {+        switch (this._currentlyConnectedInputText._host.focusedControl = this._currentlyConnectedInputText, M) {+          case "⇧":+            this.shiftState++, this.shiftState > 2 && (this.shiftState = 0), this.applyShiftState(this.shiftState);+            return;+          case "←":+            this._currentlyConnectedInputText instanceof Au ? this._currentlyConnectedInputText.alternativeProcessKey("Backspace") : this._currentlyConnectedInputText.processKey(8);+            return;+          case "↵":+            this._currentlyConnectedInputText instanceof Au ? this._currentlyConnectedInputText.alternativeProcessKey("Enter") : this._currentlyConnectedInputText.processKey(13);+            return;+        }+        this._currentlyConnectedInputText instanceof Au ? this._currentlyConnectedInputText.alternativeProcessKey("", this.shiftState ? M.toUpperCase() : M) : this._currentlyConnectedInputText.processKey(-1, this.shiftState ? M.toUpperCase() : M), this.shiftState === 1 && (this.shiftState = 0, this.applyShiftState(this.shiftState));+      }+    })), this.isVisible = !1, this._currentlyConnectedInputText = i, i._connectedVirtualKeyboard = this;+    const g = i.onFocusObservable.add(() => {+      this._currentlyConnectedInputText = i, i._connectedVirtualKeyboard = this, this.isVisible = !0;+    }), y = i.onBlurObservable.add(() => {+      i._connectedVirtualKeyboard = null, this._currentlyConnectedInputText = null, this.isVisible = !1;+    });+    this._connectedInputTexts.push({+      input: i,+      onBlurObserver: y,+      onFocusObserver: g+    });+  }+  /**+   * Disconnects the keyboard from connected InputText controls+   *+   * @param input optionally defines a target control, otherwise all are disconnected+   */+  disconnect(i) {+    if (i) {+      const d = this._connectedInputTexts.filter((g) => g.input === i);+      d.length === 1 && (this._removeConnectedInputObservables(d[0]), this._connectedInputTexts = this._connectedInputTexts.filter((g) => g.input !== i), this._currentlyConnectedInputText === i && (this._currentlyConnectedInputText = null));+    } else {+      for (const d of this._connectedInputTexts)+        this._removeConnectedInputObservables(d);+      this._connectedInputTexts.length = 0;+    }+    this._connectedInputTexts.length === 0 && (this._currentlyConnectedInputText = null, this.onKeyPressObservable.remove(this._onKeyPressObserver), this._onKeyPressObserver = null);+  }+  _removeConnectedInputObservables(i) {+    i.input._connectedVirtualKeyboard = null, i.input.onFocusObservable.remove(i.onFocusObserver), i.input.onBlurObservable.remove(i.onBlurObserver);+  }+  /**+   * Release all resources+   */+  dispose() {+    super.dispose(), this.disconnect();+  }+  // Statics+  /**+   * Creates a new keyboard using a default layout+   *+   * @param name defines control name+   * @returns a new VirtualKeyboard+   */+  static CreateDefaultLayout(i) {+    const d = new jb(i);+    return d.addKeysRow(["1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "←"]), d.addKeysRow(["q", "w", "e", "r", "t", "y", "u", "i", "o", "p"]), d.addKeysRow(["a", "s", "d", "f", "g", "h", "j", "k", "l", ";", "'", "↵"]), d.addKeysRow(["⇧", "z", "x", "c", "v", "b", "n", "m", ",", ".", "/"]), d.addKeysRow([" "], [{ width: "200px" }]), d;+  }+  /**+   * @internal+   */+  _parseFromContent(i, d) {+    super._parseFromContent(i, d);+    for (const g of this.children)+      if (g.getClassName() === "StackPanel") {+        const y = g;+        for (const M of y.children)+          M.getClassName() === "Button" && M.name && M.onPointerUpObservable.add(() => {+            this.onKeyPressObservable.notifyObservers(M.name);+          });+      }+  }+}+kr("BABYLON.GUI.VirtualKeyboard", jb);+class Xa extends pe {+  /** Gets or sets a boolean indicating if minor lines must be rendered (true by default)) */+  get displayMinorLines() {+    return this._displayMinorLines;+  }+  set displayMinorLines(i) {+    this._displayMinorLines !== i && (this._displayMinorLines = i, this._markAsDirty());+  }+  /** Gets or sets a boolean indicating if major lines must be rendered (true by default)) */+  get displayMajorLines() {+    return this._displayMajorLines;+  }+  set displayMajorLines(i) {+    this._displayMajorLines !== i && (this._displayMajorLines = i, this._markAsDirty());+  }+  /** Gets or sets background color (Black by default) */+  get background() {+    return this._background;+  }+  set background(i) {+    this._background !== i && (this._background = i, this._markAsDirty());+  }+  /** Gets or sets the width of each cell (20 by default) */+  get cellWidth() {+    return this._cellWidth;+  }+  set cellWidth(i) {+    this._cellWidth = i, this._markAsDirty();+  }+  /** Gets or sets the height of each cell (20 by default) */+  get cellHeight() {+    return this._cellHeight;+  }+  set cellHeight(i) {+    this._cellHeight = i, this._markAsDirty();+  }+  /** Gets or sets the tickness of minor lines (1 by default) */+  get minorLineTickness() {+    return this._minorLineTickness;+  }+  set minorLineTickness(i) {+    this._minorLineTickness = i, this._markAsDirty();+  }+  /** Gets or sets the color of minor lines (DarkGray by default) */+  get minorLineColor() {+    return this._minorLineColor;+  }+  set minorLineColor(i) {+    this._minorLineColor = i, this._markAsDirty();+  }+  /** Gets or sets the tickness of major lines (2 by default) */+  get majorLineTickness() {+    return this._majorLineTickness;+  }+  set majorLineTickness(i) {+    this._majorLineTickness = i, this._markAsDirty();+  }+  /** Gets or sets the color of major lines (White by default) */+  get majorLineColor() {+    return this._majorLineColor;+  }+  set majorLineColor(i) {+    this._majorLineColor = i, this._markAsDirty();+  }+  /** Gets or sets the frequency of major lines (default is 1 every 5 minor lines)*/+  get majorLineFrequency() {+    return this._majorLineFrequency;+  }+  set majorLineFrequency(i) {+    this._majorLineFrequency = i, this._markAsDirty();+  }+  /**+   * Creates a new GridDisplayRectangle+   * @param name defines the control name+   */+  constructor(i) {+    super(i), this.name = i, this._cellWidth = 20, this._cellHeight = 20, this._minorLineTickness = 1, this._minorLineColor = "DarkGray", this._majorLineTickness = 2, this._majorLineColor = "White", this._majorLineFrequency = 5, this._background = "Black", this._displayMajorLines = !0, this._displayMinorLines = !0;+  }+  _draw(i) {+    if (i.save(), this._applyStates(i), this._isEnabled) {+      this._background && (i.fillStyle = this._background, i.fillRect(this._currentMeasure.left, this._currentMeasure.top, this._currentMeasure.width, this._currentMeasure.height));+      const d = this._currentMeasure.width / this._cellWidth, g = this._currentMeasure.height / this._cellHeight, y = this._currentMeasure.left + this._currentMeasure.width / 2, M = this._currentMeasure.top + this._currentMeasure.height / 2;+      if (this._displayMinorLines) {+        i.strokeStyle = this._minorLineColor, i.lineWidth = this._minorLineTickness;+        for (let N = -d / 2 + 1; N < d / 2; N++) {+          const O = y + N * this.cellWidth;+          i.beginPath(), i.moveTo(O, this._currentMeasure.top), i.lineTo(O, this._currentMeasure.top + this._currentMeasure.height), i.stroke();+        }+        for (let N = -g / 2 + 1; N < g / 2; N++) {+          const O = M + N * this.cellHeight;+          i.beginPath(), i.moveTo(this._currentMeasure.left, O), i.lineTo(this._currentMeasure.left + this._currentMeasure.width, O), i.stroke();+        }+      }+      if (this._displayMajorLines) {+        i.strokeStyle = this._majorLineColor, i.lineWidth = this._majorLineTickness;+        for (let N = -d / 2 + this._majorLineFrequency; N < d / 2; N += this._majorLineFrequency) {+          const O = y + N * this.cellWidth;+          i.beginPath(), i.moveTo(O, this._currentMeasure.top), i.lineTo(O, this._currentMeasure.top + this._currentMeasure.height), i.stroke();+        }+        for (let N = -g / 2 + this._majorLineFrequency; N < g / 2; N += this._majorLineFrequency) {+          const O = M + N * this.cellHeight;+          i.moveTo(this._currentMeasure.left, O), i.lineTo(this._currentMeasure.left + this._currentMeasure.width, O), i.closePath(), i.stroke();+        }+      }+    }+    i.restore();+  }+  _getTypeName() {+    return "DisplayGrid";+  }+}+q([+  H()+], Xa.prototype, "displayMinorLines", null);+q([+  H()+], Xa.prototype, "displayMajorLines", null);+q([+  H()+], Xa.prototype, "background", null);+q([+  H()+], Xa.prototype, "cellWidth", null);+q([+  H()+], Xa.prototype, "cellHeight", null);+q([+  H()+], Xa.prototype, "minorLineTickness", null);+q([+  H()+], Xa.prototype, "minorLineColor", null);+q([+  H()+], Xa.prototype, "majorLineTickness", null);+q([+  H()+], Xa.prototype, "majorLineColor", null);+q([+  H()+], Xa.prototype, "majorLineFrequency", null);+kr("BABYLON.GUI.DisplayGrid", Xa);+class dw extends $n {+  get displayThumb() {+    return this._displayThumb && this.thumbImage != null;+  }+  set displayThumb(i) {+    this._displayThumb !== i && (this._displayThumb = i, this._markAsDirty());+  }+  /**+   * Gets or sets the image used to render the background+   */+  get backgroundImage() {+    return this._backgroundImage;+  }+  set backgroundImage(i) {+    this._backgroundImage !== i && (this._backgroundImage = i, i && !i.isLoaded && i.onImageLoadedObservable.addOnce(() => this._markAsDirty()), this._markAsDirty());+  }+  /**+   * Gets or sets the image used to render the value bar+   */+  get valueBarImage() {+    return this._valueBarImage;+  }+  set valueBarImage(i) {+    this._valueBarImage !== i && (this._valueBarImage = i, i && !i.isLoaded && i.onImageLoadedObservable.addOnce(() => this._markAsDirty()), this._markAsDirty());+  }+  /**+   * Gets or sets the image used to render the thumb+   */+  get thumbImage() {+    return this._thumbImage;+  }+  set thumbImage(i) {+    this._thumbImage !== i && (this._thumbImage = i, i && !i.isLoaded && i.onImageLoadedObservable.addOnce(() => this._markAsDirty()), this._markAsDirty());+  }+  /**+   * Creates a new ImageBasedSlider+   * @param name defines the control name+   */+  constructor(i) {+    super(i), this.name = i, this._tempMeasure = new Ko(0, 0, 0, 0);+  }+  _getTypeName() {+    return "ImageBasedSlider";+  }+  _draw(i) {+    i.save(), this._applyStates(i), this._prepareRenderingData("rectangle");+    const d = this._getThumbPosition(), g = this._renderLeft, y = this._renderTop, M = this._renderWidth, N = this._renderHeight;+    this._backgroundImage && (this._tempMeasure.copyFromFloats(g, y, M, N), this.isThumbClamped && this.displayThumb && (this.isVertical ? this._tempMeasure.height += this._effectiveThumbThickness : this._tempMeasure.width += this._effectiveThumbThickness), this._backgroundImage._currentMeasure.copyFrom(this._tempMeasure), this._backgroundImage._draw(i)), this._valueBarImage && (this.isVertical ? this.isThumbClamped && this.displayThumb ? this._tempMeasure.copyFromFloats(g, y + d, M, N - d + this._effectiveThumbThickness) : this._tempMeasure.copyFromFloats(g, y + d, M, N - d) : this.isThumbClamped && this.displayThumb ? this._tempMeasure.copyFromFloats(g, y, d + this._effectiveThumbThickness / 2, N) : this._tempMeasure.copyFromFloats(g, y, d, N), this._valueBarImage._currentMeasure.copyFrom(this._tempMeasure), this._valueBarImage._draw(i)), this.displayThumb && (this.isVertical ? this._tempMeasure.copyFromFloats(g - this._effectiveBarOffset, this._currentMeasure.top + d, this._currentMeasure.width, this._effectiveThumbThickness) : this._tempMeasure.copyFromFloats(this._currentMeasure.left + d, this._currentMeasure.top, this._effectiveThumbThickness, this._currentMeasure.height), this._thumbImage._currentMeasure.copyFrom(this._tempMeasure), this._thumbImage._draw(i)), i.restore();+  }+  /**+   * Serializes the current control+   * @param serializationObject defined the JSON serialized object+   */+  serialize(i) {+    super.serialize(i);+    const d = {}, g = {}, y = {};+    this.backgroundImage.serialize(d), this.thumbImage.serialize(g), this.valueBarImage.serialize(y), i.backgroundImage = d, i.thumbImage = g, i.valueBarImage = y;+  }+  /**+   * @internal+   */+  _parseFromContent(i, d) {+    super._parseFromContent(i, d), this.backgroundImage = Ft.Parse(i.backgroundImage, d), this.thumbImage = Ft.Parse(i.thumbImage, d), this.valueBarImage = Ft.Parse(i.valueBarImage, d);+  }+}+q([+  H()+], dw.prototype, "displayThumb", null);+kr("BABYLON.GUI.ImageBasedSlider", dw);+const U9 = "Statics";+pe.AddHeader = function($e, i, d, g) {+  const y = new Gi("panel"), M = g ? g.isHorizontal : !0, N = g ? g.controlFirst : !0;+  y.isVertical = !M;+  const O = new zr("header");+  return O.text = i, O.textHorizontalAlignment = pe.HORIZONTAL_ALIGNMENT_LEFT, M ? O.width = d : O.height = d, N ? (y.addControl($e), y.addControl(O), O.paddingLeft = "5px") : (y.addControl(O), y.addControl($e), O.paddingRight = "5px"), O.shadowBlur = $e.shadowBlur, O.shadowColor = $e.shadowColor, O.shadowOffsetX = $e.shadowOffsetX, O.shadowOffsetY = $e.shadowOffsetY, y;+};+class uw {+  constructor() {+    this._colorStops = [], this._gradientDirty = !0;+  }+  _addColorStopsToCanvasGradient() {+    for (const i of this._colorStops)+      this._canvasGradient.addColorStop(i.offset, i.color);+  }+  /**+   * If there are any changes or the context changed, regenerate the canvas gradient object. Else,+   * reuse the existing gradient.+   * @param context the context to create the gradient from+   * @returns the canvas gradient+   */+  getCanvasGradient(i) {+    return (this._gradientDirty || this._context !== i) && (this._context = i, this._canvasGradient = this._createCanvasGradient(i), this._addColorStopsToCanvasGradient(), this._gradientDirty = !1), this._canvasGradient;+  }+  /**+   * Adds a new color stop to the gradient.+   * @param offset the offset of the stop on the gradient. Should be between 0 and 1+   * @param color the color of the stop+   */+  addColorStop(i, d) {+    this._colorStops.push({ offset: i, color: d }), this._gradientDirty = !0;+  }+  /**+   * Removes an existing color stop with the specified offset from the gradient+   * @param offset the offset of the stop to be removed+   */+  removeColorStop(i) {+    this._colorStops = this._colorStops.filter((d) => d.offset !== i), this._gradientDirty = !0;+  }+  /**+   * Removes all color stops from the gradient+   */+  clearColorStops() {+    this._colorStops = [], this._gradientDirty = !0;+  }+  /**+   * Color stops of the gradient+   */+  get colorStops() {+    return this._colorStops;+  }+  /**+   * @returns Type of the gradient+   */+  getClassName() {+    return "BaseGradient";+  }+  /**+   * Serialize into a json object+   * @param serializationObject object to serialize into+   */+  serialize(i) {+    i.colorStops = this._colorStops, i.className = this.getClassName();+  }+  /**+   * Parse from json object+   * @param serializationObject object to parse from+   */+  parse(i) {+    this._colorStops = i.colorStops;+  }+}+class lS extends uw {+  /**+   * Creates a new linear gradient+   * @param x0+   * @param y0+   * @param x1+   * @param y1+   */+  constructor(i, d, g, y) {+    super(), this._x0 = i ?? 0, this._y0 = d ?? 0, this._x1 = g ?? 0, this._y1 = y ?? 0;+  }+  _createCanvasGradient(i) {+    return i.createLinearGradient(this._x0, this._y0, this._x1, this._y1);+  }+  /** X axis coordinate of the starting point in the line */+  get x0() {+    return this._x0;+  }+  /** X axis coordinate of the ending point in the line */+  get x1() {+    return this._x1;+  }+  /** Y axis coordinate of the starting point in the line */+  get y0() {+    return this._y0;+  }+  /** Y axis coordinate of the ending point in the line */+  get y1() {+    return this._y1;+  }+  /**+   * Class name of the gradient+   * @returns the class name of the gradient+   */+  getClassName() {+    return "LinearGradient";+  }+  /**+   * Serializes this gradient+   * @param serializationObject the object to serialize to+   */+  serialize(i) {+    super.serialize(i), i.x0 = this._x0, i.y0 = this._y0, i.x1 = this._x1, i.y1 = this._y1;+  }+  /**+   * Parses a gradient from a serialization object+   * @param serializationObject the object to parse from+   */+  parse(i) {+    super.parse(i), this._x0 = i.x0, this._y0 = i.y0, this._x1 = i.x1, this._y1 = i.y1;+  }+}+kr("BABYLON.GUI.LinearGradient", lS);+class cS extends uw {+  /**+   * Creates a new radial gradient+   * @param x0 x coordinate of the first circle's center+   * @param y0 y coordinate of the first circle's center+   * @param r0 radius of the first circle+   * @param x1 x coordinate of the second circle's center+   * @param y1 y coordinate of the second circle's center+   * @param r1 radius of the second circle+   */+  constructor(i, d, g, y, M, N) {+    super(), this._x0 = i ?? 0, this._y0 = d ?? 0, this._r0 = g ?? 0, this._x1 = y ?? 0, this._y1 = M ?? 0, this._r1 = N ?? 0;+  }+  _createCanvasGradient(i) {+    return i.createRadialGradient(this._x0, this._y0, this._r0, this._x1, this._y1, this._r1);+  }+  /** x coordinate of the first circle's center */+  get x0() {+    return this._x0;+  }+  /** x coordinate of the second circle's center */+  get x1() {+    return this._x1;+  }+  /** y coordinate of the first circle's center */+  get y0() {+    return this._y0;+  }+  /** y coordinate of the second circle's center */+  get y1() {+    return this._y1;+  }+  /** radius of the first circle */+  get r0() {+    return this._r0;+  }+  /** radius of the second circle */+  get r1() {+    return this._r1;+  }+  /**+   * Class name of the gradient+   * @returns the class name of the gradient+   */+  getClassName() {+    return "RadialGradient";+  }+  /**+   * Serializes this gradient+   * @param serializationObject the object to serialize to+   */+  serialize(i) {+    super.serialize(i), i.x0 = this._x0, i.y0 = this._y0, i.r0 = this._r0, i.x1 = this._x1, i.y1 = this._y1, i.r1 = this._r1;+  }+  /**+   * Parses a gradient from a serialization object+   * @param serializationObject the object to parse from+   */+  parse(i) {+    super.parse(i), this._x0 = i.x0, this._y0 = i.y0, this._r0 = i.r0, this._x1 = i.x1, this._y1 = i.y1, this._r1 = i.r1;+  }+}+kr("BABYLON.GUI.RadialGradient", cS);+class dS {+  /**+   * Creates a new style object+   * @param host defines the AdvancedDynamicTexture which hosts this style+   */+  constructor(i) {+    this._fontFamily = "Arial", this._fontStyle = "", this._fontWeight = "", this._fontSize = new St(18, St.UNITMODE_PIXEL, !1), this.onChangedObservable = new qt(), this._host = i;+  }+  /**+   * Gets or sets the font size+   */+  get fontSize() {+    return this._fontSize.toString(this._host);+  }+  set fontSize(i) {+    this._fontSize.toString(this._host) !== i && this._fontSize.fromString(i) && this.onChangedObservable.notifyObservers(this);+  }+  /**+   * Gets or sets the font family+   */+  get fontFamily() {+    return this._fontFamily;+  }+  set fontFamily(i) {+    this._fontFamily !== i && (this._fontFamily = i, this.onChangedObservable.notifyObservers(this));+  }+  /**+   * Gets or sets the font style+   */+  get fontStyle() {+    return this._fontStyle;+  }+  set fontStyle(i) {+    this._fontStyle !== i && (this._fontStyle = i, this.onChangedObservable.notifyObservers(this));+  }+  /** Gets or sets font weight */+  get fontWeight() {+    return this._fontWeight;+  }+  set fontWeight(i) {+    this._fontWeight !== i && (this._fontWeight = i, this.onChangedObservable.notifyObservers(this));+  }+  /** Dispose all associated resources */+  dispose() {+    this.onChangedObservable.clear();+  }+}+class go extends K4 {+  /** Gets the number of layout calls made the last time the ADT has been rendered */+  get numLayoutCalls() {+    return this._numLayoutCalls;+  }+  /** Gets the number of render calls made the last time the ADT has been rendered */+  get numRenderCalls() {+    return this._numRenderCalls;+  }+  /**+   * If set to true, the renderScale will be adjusted automatically to the engine's hardware scaling+   * If this is set to true, manually setting the renderScale will be ignored+   * This is useful when the engine's hardware scaling is set to a value other than 1+   */+  get adjustToEngineHardwareScalingLevel() {+    return this._adjustToEngineHardwareScalingLevel;+  }+  set adjustToEngineHardwareScalingLevel(i) {+    this._adjustToEngineHardwareScalingLevel !== i && (this._adjustToEngineHardwareScalingLevel = i, this._onResize());+  }+  /**+   * Gets or sets a number used to scale rendering size (2 means that the texture will be twice bigger).+   * Useful when you want more antialiasing+   */+  get renderScale() {+    return this._renderScale;+  }+  set renderScale(i) {+    i !== this._renderScale && (this._renderScale = i, this._onResize());+  }+  /** Gets or sets the background color */+  get background() {+    return this._background;+  }+  set background(i) {+    this._background !== i && (this._background = i, this.markAsDirty());+  }+  /**+   * Gets or sets the ideal width used to design controls.+   * The GUI will then rescale everything accordingly+   * @see https://doc.babylonjs.com/features/featuresDeepDive/gui/gui#adaptive-scaling+   */+  get idealWidth() {+    return this._idealWidth;+  }+  set idealWidth(i) {+    this._idealWidth !== i && (this._idealWidth = i, this.markAsDirty(), this._rootContainer._markAllAsDirty());+  }+  /**+   * Gets or sets the ideal height used to design controls.+   * The GUI will then rescale everything accordingly+   * @see https://doc.babylonjs.com/features/featuresDeepDive/gui/gui#adaptive-scaling+   */+  get idealHeight() {+    return this._idealHeight;+  }+  set idealHeight(i) {+    this._idealHeight !== i && (this._idealHeight = i, this.markAsDirty(), this._rootContainer._markAllAsDirty());+  }+  /**+   * Gets or sets a boolean indicating if the smallest ideal value must be used if idealWidth and idealHeight are both set+   * @see https://doc.babylonjs.com/features/featuresDeepDive/gui/gui#adaptive-scaling+   */+  get useSmallestIdeal() {+    return this._useSmallestIdeal;+  }+  set useSmallestIdeal(i) {+    this._useSmallestIdeal !== i && (this._useSmallestIdeal = i, this.markAsDirty(), this._rootContainer._markAllAsDirty());+  }+  /**+   * Gets or sets a boolean indicating if adaptive scaling must be used+   * @see https://doc.babylonjs.com/features/featuresDeepDive/gui/gui#adaptive-scaling+   */+  get renderAtIdealSize() {+    return this._renderAtIdealSize;+  }+  set renderAtIdealSize(i) {+    this._renderAtIdealSize !== i && (this._renderAtIdealSize = i, this._onResize());+  }+  /**+   * Gets the ratio used when in "ideal mode"+   * @see https://doc.babylonjs.com/features/featuresDeepDive/gui/gui#adaptive-scaling+   * */+  get idealRatio() {+    let i = 0, d = 0;+    return this._idealWidth && (i = this.getSize().width / this._idealWidth), this._idealHeight && (d = this.getSize().height / this._idealHeight), this._useSmallestIdeal && this._idealWidth && this._idealHeight ? window.innerWidth < window.innerHeight ? i : d : this._idealWidth ? i : this._idealHeight ? d : 1;+  }+  /**+   * Gets the underlying layer used to render the texture when in fullscreen mode+   */+  get layer() {+    return this._layerToDispose;+  }+  /**+   * Gets the root container control+   */+  get rootContainer() {+    return this._rootContainer;+  }+  /**+   * Returns an array containing the root container.+   * This is mostly used to let the Inspector introspects the ADT+   * @returns an array containing the rootContainer+   */+  getChildren() {+    return [this._rootContainer];+  }+  /**+   * Will return all controls that are inside this texture+   * @param directDescendantsOnly defines if true only direct descendants of 'this' will be considered, if false direct and also indirect (children of children, an so on in a recursive manner) descendants of 'this' will be considered+   * @param predicate defines an optional predicate that will be called on every evaluated child, the predicate must return true for a given child to be part of the result, otherwise it will be ignored+   * @returns all child controls+   */+  getDescendants(i, d) {+    return this._rootContainer.getDescendants(i, d);+  }+  /**+   * Will return all controls with the given type name+   * @param typeName defines the type name to search for+   * @returns an array of all controls found+   */+  getControlsByType(i) {+    return this._rootContainer.getDescendants(!1, (d) => d.typeName === i);+  }+  /**+   * Will return the first control with the given name+   * @param name defines the name to search for+   * @returns the first control found or null+   */+  getControlByName(i) {+    return this._getControlByKey("name", i);+  }+  _getControlByKey(i, d) {+    return this._rootContainer.getDescendants().find((g) => g[i] === d) || null;+  }+  /**+   * Gets or sets the current focused control+   */+  get focusedControl() {+    return this._focusedControl;+  }+  set focusedControl(i) {+    this._focusedControl != i && (this._focusedControl && this._focusedControl.onBlur(), i && i.onFocus(), this._focusedControl = i);+  }+  /**+   * Gets or sets a boolean indicating if the texture must be rendered in background or foreground when in fullscreen mode+   */+  get isForeground() {+    return this.layer ? !this.layer.isBackground : !0;+  }+  set isForeground(i) {+    this.layer && this.layer.isBackground !== !i && (this.layer.isBackground = !i);+  }+  /**+   * Gets or set information about clipboardData+   */+  get clipboardData() {+    return this._clipboardData;+  }+  set clipboardData(i) {+    this._clipboardData = i;+  }+  /** @internal */+  constructor(i, d, g = 0, y, M = !1, N = Wr.NEAREST_SAMPLINGMODE, O = !0) {+    d = d ?? 0;+    const F = typeof d == "object" && d !== void 0 ? d.width ?? 0 : d ?? 0, ne = typeof d == "object" && d !== void 0 ? d.height ?? 0 : g;+    if (super(i, { width: F, height: ne }, typeof d == "object" && d !== void 0 ? d : y, M, N, Is.TEXTUREFORMAT_RGBA, O), this.useStandalone = !1, this.onGuiReadyObservable = new qt(), this._isDirty = !1, this._rootContainer = new wi("root"), this._lastControlOver = {}, this._lastControlDown = {}, this._capturingControl = {}, this._linkedControls = new Array(), this._isFullscreen = !1, this._fullscreenViewport = new Kg(0, 0, 1, 1), this._idealWidth = 0, this._idealHeight = 0, this._useSmallestIdeal = !1, this._renderAtIdealSize = !1, this._blockNextFocusCheck = !1, this._renderScale = 1, this._cursorChanged = !1, this._defaultMousePointerId = 0, this._rootChildrenHaveChanged = !1, this._adjustToEngineHardwareScalingLevel = !1, this._capturedPointerIds = /* @__PURE__ */ new Set(), this._numLayoutCalls = 0, this._numRenderCalls = 0, this._clipboardData = "", this.onClipboardObservable = new qt(), this.onControlPickedObservable = new qt(), this.onBeginLayoutObservable = new qt(), this.onEndLayoutObservable = new qt(), this.onBeginRenderObservable = new qt(), this.onEndRenderObservable = new qt(), this.premulAlpha = !1, this.applyYInversionOnUpdate = !0, this.disableTabNavigation = !1, this.disablePicking = !1, this.usePointerTapForClickEvent = !1, this.skipBlockEvents = 0, this.checkPointerEveryFrame = !1, this._useInvalidateRectOptimization = !0, this._invalidatedRectangle = null, this._alreadyRegisteredForRender = !1, this._clearMeasure = new Ko(0, 0, 0, 0), this._focusProperties = { index: 0, total: -1 }, this._onClipboardCopy = (Q) => {+      const X = Q, he = new ew(Ih.COPY, X);+      this.onClipboardObservable.notifyObservers(he), X.preventDefault();+    }, this._onClipboardCut = (Q) => {+      const X = Q, he = new ew(Ih.CUT, X);+      this.onClipboardObservable.notifyObservers(he), X.preventDefault();+    }, this._onClipboardPaste = (Q) => {+      const X = Q, he = new ew(Ih.PASTE, X);+      this.onClipboardObservable.notifyObservers(he), X.preventDefault();+    }, this.parseContent = this.parseSerializedObject, y = this.getScene(), !y || !this._texture)+      return;+    this.applyYInversionOnUpdate = O, this._rootElement = y.getEngine().getInputElement();+    const $ = d;+    this.useStandalone = !!$?.useStandalone, this.useStandalone || (this._renderObserver = y.onBeforeCameraRenderObservable.add((Q) => this._checkUpdate(Q))), this._controlAddedObserver = this._rootContainer.onControlAddedObservable.add((Q) => {+      Q && (this._rootChildrenHaveChanged = !0);+    }), this._controlRemovedObserver = this._rootContainer.onControlRemovedObservable.add((Q) => {+      Q && (this._rootChildrenHaveChanged = !0);+    }), this._preKeyboardObserver = y.onPreKeyboardObservable.add((Q) => {+      if (!this.disableTabNavigation && Q.type === C4.KEYDOWN && Q.event.code === "Tab") {+        const X = !Q.event.shiftKey;+        if (X && this._focusProperties.index === this._focusProperties.total - 1 || !X && this._focusProperties.index === 0 && this._focusProperties.total > 0) {+          this.focusedControl = null, this._focusProperties.index = 0, this._focusProperties.total = -1;+          return;+        }+        this._focusNextElement(X), Q.event.preventDefault();+        return;+      }+      this._focusedControl && (Q.type === C4.KEYDOWN && this._focusedControl.processKeyboard(Q.event), Q.skipOnPointerObservable = !0);+    }), this._rootContainer._link(this), this.hasAlpha = !0, (!F || !ne) && (this._resizeObserver = y.getEngine().onResizeObservable.add(() => this._onResize()), this._onResize()), this._texture.isReady = !0;+  }+  /**+   * Get the current class name of the texture useful for serialization or dynamic coding.+   * @returns "AdvancedDynamicTexture"+   */+  getClassName() {+    return "AdvancedDynamicTexture";+  }+  /**+   * Function used to execute a function on all controls+   * @param func defines the function to execute+   * @param container defines the container where controls belong. If null the root container will be used+   */+  executeOnAllControls(i, d) {+    d || (d = this._rootContainer), i(d);+    for (const g of d.children) {+      if (g.children) {+        this.executeOnAllControls(i, g);+        continue;+      }+      i(g);+    }+  }+  /**+   * Gets or sets a boolean indicating if the InvalidateRect optimization should be turned on+   */+  get useInvalidateRectOptimization() {+    return this._useInvalidateRectOptimization;+  }+  set useInvalidateRectOptimization(i) {+    this._useInvalidateRectOptimization = i;+  }+  /**+   * Invalidates a rectangle area on the gui texture+   * @param invalidMinX left most position of the rectangle to invalidate in the texture+   * @param invalidMinY top most position of the rectangle to invalidate in the texture+   * @param invalidMaxX right most position of the rectangle to invalidate in the texture+   * @param invalidMaxY bottom most position of the rectangle to invalidate in the texture+   */+  invalidateRect(i, d, g, y) {+    if (this._useInvalidateRectOptimization)+      if (!this._invalidatedRectangle)+        this._invalidatedRectangle = new Ko(i, d, g - i + 1, y - d + 1);+      else {+        const M = Math.ceil(Math.max(this._invalidatedRectangle.left + this._invalidatedRectangle.width - 1, g)), N = Math.ceil(Math.max(this._invalidatedRectangle.top + this._invalidatedRectangle.height - 1, y));+        this._invalidatedRectangle.left = Math.floor(Math.min(this._invalidatedRectangle.left, i)), this._invalidatedRectangle.top = Math.floor(Math.min(this._invalidatedRectangle.top, d)), this._invalidatedRectangle.width = M - this._invalidatedRectangle.left + 1, this._invalidatedRectangle.height = N - this._invalidatedRectangle.top + 1;+      }+  }+  /**+   * Marks the texture as dirty forcing a complete update+   */+  markAsDirty() {+    this._isDirty = !0;+  }+  /**+   * Helper function used to create a new style+   * @returns a new style+   * @see https://doc.babylonjs.com/features/featuresDeepDive/gui/gui#styles+   */+  createStyle() {+    return new dS(this);+  }+  /**+   * Adds a new control to the root container+   * @param control defines the control to add+   * @returns the current texture+   */+  addControl(i) {+    return this._rootContainer.addControl(i), this;+  }+  /**+   * Removes a control from the root container+   * @param control defines the control to remove+   * @returns the current texture+   */+  removeControl(i) {+    return this._rootContainer.removeControl(i), this;+  }+  /**+   * Moves overlapped controls towards a position where it is not overlapping anymore.+   * Please note that this method alters linkOffsetXInPixels and linkOffsetYInPixels.+   * @param overlapGroup the overlap group which will be processed or undefined to process all overlap groups+   * @param deltaStep the step size (speed) to reach the target non overlapping position (default 0.1)+   * @param repelFactor how much is the control repelled by other controls+   */+  moveToNonOverlappedPosition(i, d = 1, g = 1) {+    let y;+    if (Array.isArray(i))+      y = i;+    else {+      const M = this.getDescendants(!0);+      y = i === void 0 ? M.filter((N) => N.overlapGroup !== void 0) : M.filter((N) => N.overlapGroup === i);+    }+    for (const M of y) {+      let N = mo.Zero();+      const O = new mo(M.centerX, M.centerY);+      for (const F of y)+        if (M !== F && go._Overlaps(M, F)) {+          const ne = O.subtract(new mo(F.centerX, F.centerY)), $ = ne.length();+          $ > 0 && (N = N.add(ne.normalize().scale(g / $)));+        }+      N.length() > 0 && (N = N.normalize().scale(d * (M.overlapDeltaMultiplier ?? 1)), M.linkOffsetXInPixels += N.x, M.linkOffsetYInPixels += N.y);+    }+  }+  /**+   * Release all resources+   */+  dispose() {+    const i = this.getScene();+    i && (this._rootElement = null, i.onBeforeCameraRenderObservable.remove(this._renderObserver), this._resizeObserver && i.getEngine().onResizeObservable.remove(this._resizeObserver), this._prePointerObserver && i.onPrePointerObservable.remove(this._prePointerObserver), this._sceneRenderObserver && i.onBeforeRenderObservable.remove(this._sceneRenderObserver), this._pointerObserver && i.onPointerObservable.remove(this._pointerObserver), this._preKeyboardObserver && i.onPreKeyboardObservable.remove(this._preKeyboardObserver), this._canvasPointerOutObserver && i.getEngine().onCanvasPointerOutObservable.remove(this._canvasPointerOutObserver), this._canvasBlurObserver && i.getEngine().onCanvasBlurObservable.remove(this._canvasBlurObserver), this._controlAddedObserver && this._rootContainer.onControlAddedObservable.remove(this._controlAddedObserver), this._controlRemovedObserver && this._rootContainer.onControlRemovedObservable.remove(this._controlRemovedObserver), this._layerToDispose && (this._layerToDispose.texture = null, this._layerToDispose.dispose(), this._layerToDispose = null), this._rootContainer.dispose(), this.onClipboardObservable.clear(), this.onControlPickedObservable.clear(), this.onBeginRenderObservable.clear(), this.onEndRenderObservable.clear(), this.onBeginLayoutObservable.clear(), this.onEndLayoutObservable.clear(), this.onGuiReadyObservable.clear(), super.dispose());+  }+  _onResize() {+    const i = this.getScene();+    if (!i)+      return;+    const d = i.getEngine();+    this.adjustToEngineHardwareScalingLevel && (this._renderScale = d.getHardwareScalingLevel(), this._renderScale = 1 / Math.max(this._renderScale, d.getRenderWidth() / d.getCaps().maxTextureSize, d.getRenderHeight() / d.getCaps().maxTextureSize));+    const g = this.getSize();+    let y = d.getRenderWidth() * this._renderScale, M = d.getRenderHeight() * this._renderScale;+    if (this._renderAtIdealSize && (this._idealWidth ? (M = M * this._idealWidth / y, y = this._idealWidth) : this._idealHeight && (y = y * this._idealHeight / M, M = this._idealHeight)), g.width !== y || g.height !== M) {+      if (this.scaleTo(y, M), this.adjustToEngineHardwareScalingLevel) {+        const N = 1 / d.getHardwareScalingLevel(), O = this._renderScale * N;+        this._rootContainer.scaleX = O, this._rootContainer.scaleY = O, this._rootContainer.widthInPixels = y / O, this._rootContainer.heightInPixels = M / O;+      }+      this.markAsDirty(), (this._idealWidth || this._idealHeight) && this._rootContainer._markAllAsDirty(), this._alreadyRegisteredForRender || (this._alreadyRegisteredForRender = !0, Lr.SetImmediate(() => {+        this.update(this.applyYInversionOnUpdate, this.premulAlpha, go.AllowGPUOptimizations), this._alreadyRegisteredForRender = !1;+      }));+    }+    this.invalidateRect(0, 0, g.width - 1, g.height - 1);+  }+  /** @internal */+  _getGlobalViewport() {+    const i = this.getSize(), d = this._fullscreenViewport.toGlobal(i.width, i.height), g = Math.round(d.width / this._rootContainer.scaleX), y = Math.round(d.height / this._rootContainer.scaleY), M = this._adjustToEngineHardwareScalingLevel ? this._renderScale / (this.getScene()?.getEngine().getHardwareScalingLevel() || 1) : 1;+    return d.x += (d.width / M - g) / 2, d.y += (d.height / M - y) / 2, d.width = g, d.height = y, d;+  }+  /**+   * Get screen coordinates for a vector3+   * @param position defines the position to project+   * @param worldMatrix defines the world matrix to use+   * @returns the projected position+   */+  getProjectedPosition(i, d) {+    const g = this.getProjectedPositionWithZ(i, d);+    return new mo(g.x, g.y);+  }+  /**+   * Get screen coordinates for a vector3+   * @param position defines the position to project+   * @param worldMatrix defines the world matrix to use+   * @returns the projected position with Z+   */+  getProjectedPositionWithZ(i, d) {+    const g = this.getScene();+    if (!g)+      return Se.Zero();+    const y = this._getGlobalViewport(), M = Se.Project(i, d, g.getTransformMatrix(), y);+    return new Se(M.x, M.y, M.z);+  }+  /** @internal */+  _checkUpdate(i, d) {+    if (!(this._layerToDispose && i && !(i.layerMask & this._layerToDispose.layerMask))) {+      if (this._isFullscreen && this._linkedControls.length) {+        const g = this.getScene();+        if (!g)+          return;+        const y = this._getGlobalViewport();+        for (const M of this._linkedControls) {+          if (!M.isVisible)+            continue;+          const N = M._linkedMesh;+          if (!N || N.isDisposed()) {+            Lr.SetImmediate(() => {+              M.linkWithMesh(null);+            });+            continue;+          }+          const O = N.getBoundingInfo ? N.getBoundingInfo().boundingSphere.center : Se.ZeroReadOnly, F = Se.Project(O, N.getWorldMatrix(), g.getTransformMatrix(), y);+          if (F.z < 0 || F.z > 1) {+            M.notRenderable = !0;+            continue;+          }+          M.notRenderable = !1, this.useInvalidateRectOptimization && M.invalidateRect(), M._moveToProjectedPosition(F);+        }+      }+      !this._isDirty && !this._rootContainer.isDirty || (this._isDirty = !1, this._render(d), d || this.update(this.applyYInversionOnUpdate, this.premulAlpha, go.AllowGPUOptimizations));+    }+  }+  _render(i) {+    const d = this.getSize(), g = d.width, y = d.height, M = this.getContext();+    if (M.font = "18px Arial", M.strokeStyle = "white", this.onGuiReadyObservable.hasObservers() && this._checkGuiIsReady(), this._rootChildrenHaveChanged) {+      const O = this.getScene()?.activeCamera;+      O && (this._rootChildrenHaveChanged = !1, this._checkUpdate(O, !0));+    }+    this.onBeginLayoutObservable.notifyObservers(this);+    const N = new Ko(0, 0, g, y);+    this._numLayoutCalls = 0, this._rootContainer._layout(N, M), this.onEndLayoutObservable.notifyObservers(this), this._isDirty = !1, !i && (this._invalidatedRectangle ? this._clearMeasure.copyFrom(this._invalidatedRectangle) : this._clearMeasure.copyFromFloats(0, 0, g, y), M.clearRect(this._clearMeasure.left, this._clearMeasure.top, this._clearMeasure.width, this._clearMeasure.height), this._background && (M.save(), M.fillStyle = this._background, M.fillRect(this._clearMeasure.left, this._clearMeasure.top, this._clearMeasure.width, this._clearMeasure.height), M.restore()), this.onBeginRenderObservable.notifyObservers(this), this._numRenderCalls = 0, this._rootContainer._render(M, this._invalidatedRectangle), this.onEndRenderObservable.notifyObservers(this), this._invalidatedRectangle = null);+  }+  /**+   * @internal+   */+  _changeCursor(i) {+    this._rootElement && (this._rootElement.style.cursor = i, this._cursorChanged = !0);+  }+  /**+   * @internal+   */+  _registerLastControlDown(i, d) {+    this._lastControlDown[d] = i, this.onControlPickedObservable.notifyObservers(i);+  }+  _doPicking(i, d, g, y, M, N, O, F) {+    const ne = this.getScene();+    if (!ne || this.disablePicking)+      return;+    const $ = ne.getEngine(), Q = this.getSize();+    if (this._isFullscreen) {+      const X = ne.cameraToUseForPointers || ne.activeCamera;+      if (!X)+        return;+      const he = X.viewport;+      i = i * (Q.width / ($.getRenderWidth() * he.width)), d = d * (Q.height / ($.getRenderHeight() * he.height));+    }+    if (this._capturingControl[M]) {+      this._capturingControl[M].isPointerBlocker && (this._shouldBlockPointer = !0), this._capturingControl[M]._processObservables(y, i, d, g, M, N);+      return;+    }+    this._cursorChanged = !1, this._rootContainer._processPicking(i, d, g, y, M, N, O, F) || (ne.doNotHandleCursors || this._changeCursor(""), y === Ir.POINTERMOVE && this._lastControlOver[M] && (this._lastControlOver[M]._onPointerOut(this._lastControlOver[M], g), delete this._lastControlOver[M])), !this._cursorChanged && !ne.doNotHandleCursors && this._changeCursor(""), this._manageFocus();+  }+  /**+   * @internal+   */+  _cleanControlAfterRemovalFromList(i, d) {+    for (const g in i) {+      if (!Object.prototype.hasOwnProperty.call(i, g))+        continue;+      i[g] === d && delete i[g];+    }+  }+  /**+   * @internal+   */+  _cleanControlAfterRemoval(i) {+    this._cleanControlAfterRemovalFromList(this._lastControlDown, i), this._cleanControlAfterRemovalFromList(this._lastControlOver, i);+  }+  /**+   * This function will run a pointer event on this ADT and will trigger any pointer events on any controls+   * This will work on a fullscreen ADT only. For mesh based ADT, simulate pointer events using the scene directly.+   * @param x pointer X on the canvas for the picking+   * @param y pointer Y on the canvas for the picking+   * @param pi optional pointer information+   */+  pick(i, d, g = null) {+    this._isFullscreen && this._scene && this._translateToPicking(this._scene, new Kg(0, 0, 0, 0), g, i, d);+  }+  _translateToPicking(i, d, g, y = i.pointerX, M = i.pointerY) {+    const N = i.cameraToUseForPointers || i.activeCamera, O = i.getEngine(), F = i.cameraToUseForPointers;+    if (!N)+      d.x = 0, d.y = 0, d.width = O.getRenderWidth(), d.height = O.getRenderHeight();+    else if (N.rigCameras.length) {+      const Q = new Kg(0, 0, 1, 1);+      for (const X of N.rigCameras) {+        X.viewport.toGlobalToRef(O.getRenderWidth(), O.getRenderHeight(), Q);+        const he = y / O.getHardwareScalingLevel() - Q.x, Me = M / O.getHardwareScalingLevel() - (O.getRenderHeight() - Q.y - Q.height);+        if (he < 0 || Me < 0 || he > Q.width || Me > Q.height)+          return;+        i.cameraToUseForPointers = X, d.x = Q.x, d.y = Q.y, d.width = Q.width, d.height = Q.height;+      }+    } else+      N.viewport.toGlobalToRef(O.getRenderWidth(), O.getRenderHeight(), d);+    const ne = y / O.getHardwareScalingLevel() - d.x, $ = M / O.getHardwareScalingLevel() - (O.getRenderHeight() - d.y - d.height);+    if (this._shouldBlockPointer = !1, g) {+      const Q = g.event.pointerId || this._defaultMousePointerId;+      this._doPicking(ne, $, g, g.type, Q, g.event.button, g.event.deltaX, g.event.deltaY), (this._shouldBlockPointer && !(g.type & this.skipBlockEvents) || this._capturingControl[Q]) && (g.skipOnPointerObservable = !0);+    } else+      this._doPicking(ne, $, null, Ir.POINTERMOVE, this._defaultMousePointerId, 0);+    i.cameraToUseForPointers = F;+  }+  /** Attach to all scene events required to support pointer events */+  attach() {+    const i = this.getScene();+    if (!i)+      return;+    const d = new Kg(0, 0, 0, 0);+    this._prePointerObserver = i.onPrePointerObservable.add((g) => {+      if (!(i.isPointerCaptured(g.event.pointerId) && g.type === Ir.POINTERUP && !this._capturedPointerIds.has(g.event.pointerId)) && !(g.type !== Ir.POINTERMOVE && g.type !== Ir.POINTERUP && g.type !== Ir.POINTERDOWN && g.type !== Ir.POINTERWHEEL && g.type !== Ir.POINTERTAP)) {+        if (g.type === Ir.POINTERMOVE) {+          if (i.isPointerCaptured(g.event.pointerId))+            return;+          g.event.pointerId && (this._defaultMousePointerId = g.event.pointerId);+        }+        this._translateToPicking(i, d, g);+      }+    }), this._attachPickingToSceneRender(i, () => this._translateToPicking(i, d, null), !1), this._attachToOnPointerOut(i), this._attachToOnBlur(i);+  }+  _focusNextElement(i = !0) {+    const d = [];+    if (this.executeOnAllControls((y) => {+      y.isFocusInvisible || !y.isVisible || y.tabIndex < 0 || d.push(y);+    }), d.length === 0)+      return;+    d.sort((y, M) => y.tabIndex === 0 ? 1 : M.tabIndex === 0 ? -1 : y.tabIndex - M.tabIndex), this._focusProperties.total = d.length;+    let g;+    this._focusedControl ? (g = d.indexOf(this._focusedControl) + (i ? 1 : -1), g < 0 ? g = d.length - 1 : g >= d.length && (g = 0)) : g = i ? 0 : d.length - 1, d[g].focus(), this._focusProperties.index = g;+  }+  /**+   * Register the clipboard Events onto the canvas+   */+  registerClipboardEvents() {+    self.addEventListener("copy", this._onClipboardCopy, !1), self.addEventListener("cut", this._onClipboardCut, !1), self.addEventListener("paste", this._onClipboardPaste, !1);+  }+  /**+   * Unregister the clipboard Events from the canvas+   */+  unRegisterClipboardEvents() {+    self.removeEventListener("copy", this._onClipboardCopy), self.removeEventListener("cut", this._onClipboardCut), self.removeEventListener("paste", this._onClipboardPaste);+  }+  /**+   * Transform uvs from mesh space to texture space, taking the texture into account+   * @param uv the uvs in mesh space+   * @returns the uvs in texture space+   */+  _transformUvs(i) {+    const d = this.getTextureMatrix();+    let g;+    if (d.isIdentityAs3x2())+      g = i;+    else {+      const y = Jr.Matrix[0];+      d.getRowToRef(0, Jr.Vector4[0]), d.getRowToRef(1, Jr.Vector4[1]), d.getRowToRef(2, Jr.Vector4[2]);+      const M = Jr.Vector4[0], N = Jr.Vector4[1], O = Jr.Vector4[2];+      y.setRowFromFloats(0, M.x, M.y, 0, 0), y.setRowFromFloats(1, N.x, N.y, 0, 0), y.setRowFromFloats(2, 0, 0, 1, 0), y.setRowFromFloats(3, O.x, O.y, 0, 1), g = Jr.Vector2[0], mo.TransformToRef(i, y, g);+    }+    if ((this.wrapU === Wr.WRAP_ADDRESSMODE || this.wrapU === Wr.MIRROR_ADDRESSMODE) && g.x > 1) {+      let y = g.x - Math.trunc(g.x);+      this.wrapU === Wr.MIRROR_ADDRESSMODE && Math.trunc(g.x) % 2 === 1 && (y = 1 - y), g.x = y;+    }+    if ((this.wrapV === Wr.WRAP_ADDRESSMODE || this.wrapV === Wr.MIRROR_ADDRESSMODE) && g.y > 1) {+      let y = g.y - Math.trunc(g.y);+      this.wrapV === Wr.MIRROR_ADDRESSMODE && Math.trunc(g.y) % 2 === 1 && (y = 1 - y), g.y = y;+    }+    return g;+  }+  /**+   * Connect the texture to a hosting mesh to enable interactions+   * @param mesh defines the mesh to attach to+   * @param supportPointerMove defines a boolean indicating if pointer move events must be catched as well+   */+  attachToMesh(i, d = !0) {+    const g = this.getScene();+    g && (this._pointerObserver && g.onPointerObservable.remove(this._pointerObserver), this._pointerObserver = g.onPointerObservable.add((y) => {+      if (y.type !== Ir.POINTERMOVE && y.type !== Ir.POINTERUP && y.type !== Ir.POINTERDOWN && y.type !== Ir.POINTERWHEEL)+        return;+      y.type === Ir.POINTERMOVE && y.event.pointerId && (this._defaultMousePointerId = y.event.pointerId);+      const M = y.event.pointerId || this._defaultMousePointerId;+      if (y.pickInfo && y.pickInfo.hit && y.pickInfo.pickedMesh === i) {+        let N = y.pickInfo.getTextureCoordinates();+        if (N) {+          N = this._transformUvs(N);+          const O = this.getSize();+          this._doPicking(N.x * O.width, (this.applyYInversionOnUpdate ? 1 - N.y : N.y) * O.height, y, y.type, M, y.event.button, y.event.deltaX, y.event.deltaY);+        }+      } else if (y.type === Ir.POINTERUP) {+        if (this._lastControlDown[M] && this._lastControlDown[M]._forcePointerUp(M), delete this._lastControlDown[M], this.focusedControl) {+          const N = this.focusedControl.keepsFocusWith();+          let O = !0;+          if (N)+            for (const F of N) {+              if (this === F._host)+                continue;+              const ne = F._host;+              if (ne._lastControlOver[M] && ne._lastControlOver[M].isAscendant(F)) {+                O = !1;+                break;+              }+            }+          O && (this.focusedControl = null);+        }+      } else y.type === Ir.POINTERMOVE && (this._lastControlOver[M] && this._lastControlOver[M]._onPointerOut(this._lastControlOver[M], y, !0), delete this._lastControlOver[M]);+    }), i.enablePointerMoveEvents = d, this._attachPickingToSceneRender(g, () => {+      const y = this._defaultMousePointerId, M = g?.pick(g.pointerX, g.pointerY);+      if (M && M.hit && M.pickedMesh === i) {+        let N = M.getTextureCoordinates();+        if (N) {+          N = this._transformUvs(N);+          const O = this.getSize();+          this._doPicking(N.x * O.width, (this.applyYInversionOnUpdate ? 1 - N.y : N.y) * O.height, null, Ir.POINTERMOVE, y, 0);+        }+      } else+        this._lastControlOver[y] && this._lastControlOver[y]._onPointerOut(this._lastControlOver[y], null, !0), delete this._lastControlOver[y];+    }, !0), this._attachToOnPointerOut(g), this._attachToOnBlur(g));+  }+  /**+   * Move the focus to a specific control+   * @param control defines the control which will receive the focus+   */+  moveFocusToControl(i) {+    this.focusedControl = i, this._lastPickedControl = i, this._blockNextFocusCheck = !0;+  }+  _manageFocus() {+    if (this._blockNextFocusCheck) {+      this._blockNextFocusCheck = !1, this._lastPickedControl = this._focusedControl;+      return;+    }+    if (this._focusedControl && this._focusedControl !== this._lastPickedControl) {+      if (this._lastPickedControl.isFocusInvisible)+        return;+      this.focusedControl = null;+    }+  }+  _attachPickingToSceneRender(i, d, g) {+    this._sceneRenderObserver = i.onBeforeRenderObservable.add(() => {+      this.checkPointerEveryFrame && (this._linkedControls.length > 0 || g) && d();+    });+  }+  _attachToOnPointerOut(i) {+    this._canvasPointerOutObserver = i.getEngine().onCanvasPointerOutObservable.add((d) => {+      this._lastControlOver[d.pointerId] && this._lastControlOver[d.pointerId]._onPointerOut(this._lastControlOver[d.pointerId], null), delete this._lastControlOver[d.pointerId], this._lastControlDown[d.pointerId] && this._lastControlDown[d.pointerId] !== this._capturingControl[d.pointerId] && (this._lastControlDown[d.pointerId]._forcePointerUp(d.pointerId), delete this._lastControlDown[d.pointerId]);+    });+  }+  _attachToOnBlur(i) {+    this._canvasBlurObserver = i.getEngine().onCanvasBlurObservable.add(() => {+      Object.entries(this._lastControlDown).forEach(([, d]) => {+        d._onCanvasBlur();+      }), this.focusedControl = null, this._lastControlDown = {};+    });+  }+  /**+   * Serializes the entire GUI system+   * @returns an object with the JSON serialized data+   */+  serializeContent() {+    const i = this.getSize(), d = {+      root: {},+      width: i.width,+      height: i.height+    };+    return this._rootContainer.serialize(d.root), d;+  }+  /**+   * Recreate the content of the ADT from a JSON object+   * @param serializedObject define the JSON serialized object to restore from+   * @param scaleToSize defines whether to scale to texture to the saved size+   * @param urlRewriter defines an url rewriter to update urls before sending them to the controls+   */+  parseSerializedObject(i, d, g) {+    if (this._rootContainer = pe.Parse(i.root, this, g), d) {+      const y = i.width, M = i.height;+      typeof y == "number" && typeof M == "number" && y >= 0 && M >= 0 ? this.scaleTo(y, M) : this.scaleTo(1920, 1080);+    }+  }+  /**+   * Clones the ADT. If no mesh is defined, the GUI will be considered as a fullscreen GUI+   * @param newName defines the name of the new ADT+   * @param attachToMesh defines if the new ADT should be attached to a mesh+   * @returns the clone of the ADT+   */+  clone(i, d) {+    const g = this.getScene();+    if (!g)+      return this;+    const y = this.getSize(), M = this.serializeContent();+    let N;+    return this._isFullscreen ? N = go.CreateFullscreenUI(i ?? "Clone of " + this.name) : d ? N = go.CreateForMesh(d, y.width, y.height) : N = new go(i ?? "Clone of " + this.name, y.width, y.height, g, !this.noMipmap, this.samplingMode), N.parseSerializedObject(M), N;+  }+  /**+   * Recreate the content of the ADT from a snippet saved by the GUI editor+   * @param snippetId defines the snippet to load+   * @param scaleToSize defines whether to scale to texture to the saved size+   * @param appendToAdt if provided the snippet will be appended to the adt. Otherwise a fullscreen ADT will be created.+   * @param urlRewriter defines an url rewriter to update urls before sending them to the controls+   * @returns a promise that will resolve on success+   */+  static async ParseFromSnippetAsync(i, d, g, y) {+    const M = g ?? go.CreateFullscreenUI("ADT from snippet");+    if (i === "_BLANK")+      return M;+    const N = await go._LoadURLContentAsync(go.SnippetUrl + "/" + i.replace(/#/g, "/"), !0);+    return M.parseSerializedObject(N, d, y), M;+  }+  /**+   * Recreate the content of the ADT from a snippet saved by the GUI editor+   * @param snippetId defines the snippet to load+   * @param scaleToSize defines whether to scale to texture to the saved size+   * @param urlRewriter defines an url rewriter to update urls before sending them to the controls+   * @returns a promise that will resolve on success+   */+  async parseFromSnippetAsync(i, d, g) {+    return await go.ParseFromSnippetAsync(i, d, this, g);+  }+  /**+   * Recreate the content of the ADT from a url json+   * @param url defines the url to load+   * @param scaleToSize defines whether to scale to texture to the saved size+   * @param appendToAdt if provided the snippet will be appended to the adt. Otherwise a fullscreen ADT will be created.+   * @param urlRewriter defines an url rewriter to update urls before sending them to the controls+   * @returns a promise that will resolve on success+   */+  static async ParseFromFileAsync(i, d, g, y) {+    const M = g ?? go.CreateFullscreenUI("ADT from URL"), N = await go._LoadURLContentAsync(i);+    return M.parseSerializedObject(N, d, y), M;+  }+  /**+   * Recreate the content of the ADT from a url json+   * @param url defines the url to load+   * @param scaleToSize defines whether to scale to texture to the saved size+   * @param urlRewriter defines an url rewriter to update urls before sending them to the controls+   * @returns a promise that will resolve on success+   */+  async parseFromURLAsync(i, d, g) {+    return await go.ParseFromFileAsync(i, d, this, g);+  }+  static async _LoadURLContentAsync(i, d = !1) {+    if (i === "")+      throw new Error("No URL provided");+    return await new Promise((g, y) => {+      const M = new A9();+      M.addEventListener("readystatechange", () => {+        if (M.readyState == 4)+          if (M.status == 200) {+            let N;+            if (d) {+              const F = JSON.parse(JSON.parse(M.responseText).jsonPayload);+              N = F.encodedGui ? new TextDecoder("utf-8").decode(C9(F.encodedGui)) : F.gui;+            } else+              N = M.responseText;+            const O = JSON.parse(N);+            g(O);+          } else+            y("Unable to load");+      }), M.open("GET", i), M.send();+    });+  }+  // Statics+  /**+   * Compares two rectangle based controls for pixel overlap+   * @param control1 The first control to compare+   * @param control2 The second control to compare+   * @returns true if overlaps, otherwise false+   */+  static _Overlaps(i, d) {+    return !(i.centerX > d.centerX + d.widthInPixels || i.centerX + i.widthInPixels < d.centerX || i.centerY + i.heightInPixels < d.centerY || i.centerY > d.centerY + d.heightInPixels);+  }+  /**+   * Creates a new AdvancedDynamicTexture in projected mode (ie. attached to a mesh)+   * @param mesh defines the mesh which will receive the texture+   * @param width defines the texture width (1024 by default)+   * @param height defines the texture height (1024 by default)+   * @param supportPointerMove defines a boolean indicating if the texture must capture move events (true by default)+   * @param onlyAlphaTesting defines a boolean indicating that alpha blending will not be used (only alpha testing) (false by default)+   * @param invertY defines if the texture needs to be inverted on the y axis during loading (true by default)+   * @param materialSetupCallback defines a custom way of creating and setting up the material on the mesh+   * @param sampling defines the texture sampling mode (Texture.TRILINEAR_SAMPLINGMODE by default)+   * @returns a new AdvancedDynamicTexture+   */+  static CreateForMesh(i, d = 1024, g = 1024, y = !0, M = !1, N, O = this._CreateMaterial, F = Wr.TRILINEAR_SAMPLINGMODE) {+    const ne = M9(), $ = new go(`AdvancedDynamicTexture for ${i.name} [${ne}]`, d, g, i.getScene(), !0, F, N);+    return O(i, ne, $, M), $.attachToMesh(i, y), $;+  }+  static _CreateMaterial(i, d, g, y) {+    const M = yb("BABYLON.StandardMaterial");+    if (!M)+      throw "StandardMaterial needs to be imported before as it contains a side-effect required by your code.";+    const N = new M(`AdvancedDynamicTextureMaterial for ${i.name} [${d}]`, i.getScene());+    N.backFaceCulling = !1, N.diffuseColor = nr.Black(), N.specularColor = nr.Black(), y ? (N.diffuseTexture = g, N.emissiveTexture = g, g.hasAlpha = !0) : (N.emissiveTexture = g, N.opacityTexture = g), i.material = N;+  }+  /**+   * Creates a new AdvancedDynamicTexture in projected mode (ie. attached to a mesh) BUT do not create a new material for the mesh. You will be responsible for connecting the texture+   * @param mesh defines the mesh which will receive the texture+   * @param width defines the texture width (1024 by default)+   * @param height defines the texture height (1024 by default)+   * @param supportPointerMove defines a boolean indicating if the texture must capture move events (true by default)+   * @param invertY defines if the texture needs to be inverted on the y axis during loading (true by default)+   * @param sampling defines the texture sampling mode (Texture.TRILINEAR_SAMPLINGMODE by default)+   * @returns a new AdvancedDynamicTexture+   */+  static CreateForMeshTexture(i, d = 1024, g = 1024, y = !0, M, N = Wr.TRILINEAR_SAMPLINGMODE) {+    const O = new go(i.name + " AdvancedDynamicTexture", d, g, i.getScene(), !0, N, M);+    return O.attachToMesh(i, y), O;+  }+  /**+   * Creates a new AdvancedDynamicTexture in fullscreen mode.+   * In this mode the texture will rely on a layer for its rendering.+   * This allows it to be treated like any other layer.+   * As such, if you have a multi camera setup, you can set the layerMask on the GUI as well.+   * LayerMask is set through advancedTexture.layer.layerMask+   * @param name defines name for the texture+   * @param foreground defines a boolean indicating if the texture must be rendered in foreground (default is true)+   * @param sceneOrOptions defines the hosting scene or options (IAdvancedDynamicTextureOptions)+   * @param sampling defines the texture sampling mode (Texture.BILINEAR_SAMPLINGMODE by default)+   * @param adaptiveScaling defines whether to automatically scale root to match hardwarescaling (false by default)+   * @returns a new AdvancedDynamicTexture+   */+  static CreateFullscreenUI(i, d = !0, g = null, y = Wr.BILINEAR_SAMPLINGMODE, M = !1) {+    const O = !g || g._isScene ? new go(i, 0, 0, g, !1, y) : new go(i, g), F = O.getScene(), ne = new k9(i + "_layer", null, F, !d);+    return ne.texture = O, O._layerToDispose = ne, O._isFullscreen = !0, O.useStandalone && (ne.layerMask = 0), O.adjustToEngineHardwareScalingLevel = M, O.attach(), O;+  }+  /**+   * Scales the texture+   * @param ratio the scale factor to apply to both width and height+   */+  scale(i) {+    super.scale(i), this.markAsDirty();+  }+  /**+   * Resizes the texture+   * @param width the new width+   * @param height the new height+   */+  scaleTo(i, d) {+    super.scaleTo(i, d), this.markAsDirty();+  }+  _checkGuiIsReady() {+    this.guiIsReady() && (this.onGuiReadyObservable.notifyObservers(this), this.onGuiReadyObservable.clear());+  }+  /**+   * @returns true if all the GUI components are ready to render+   */+  guiIsReady() {+    return this._rootContainer.isReady();+  }+}+go.SnippetUrl = Is.SnippetUrl;+go.AllowGPUOptimizations = !0;+class uS extends L9 {+  get disabled() {+    return this._disabled;+  }+  set disabled(i) {+    this._disabled = i, this._adt.disablePicking = i;+  }+  /**+   * Gets the underlying advanced dynamic texture.+   */+  get gui() {+    return this._adt;+  }+  /**+   * Constructs a new GUI task.+   * @param name Name of the task+   * @param frameGraph Frame graph the task belongs to+   * @param adt The GUI texture. If not provided, a new fullscreen GUI will be created.+   */+  constructor(i, d, g) {+    if (super(i, d), g) {+      if (!g.useStandalone)+        throw new Error(`AdvancedDynamicTexture "${i}": the texture must have been created with the useStandalone property set to true`);+    } else+      g = go.CreateFullscreenUI(i, void 0, { useStandalone: !0, scene: d.scene });+    this._adt = g, this.outputTexture = this._frameGraph.textureManager.createDanglingHandle();+  }+  isReady() {+    return this._adt.guiIsReady() && this._adt._layerToDispose.isReady();+  }+  getClassName() {+    return "FrameGraphGUITask";+  }+  record() {+    if (this.targetTexture === void 0)+      throw new Error("FrameGraphGUITask: targetTexture is required");+    this._frameGraph.textureManager.resolveDanglingHandle(this.outputTexture, this.targetTexture);+    const i = this._frameGraph.addRenderPass(this.name);+    i.setRenderTarget(this.outputTexture), i.setExecuteFunc((g) => {+      this._adt._checkUpdate(null), g.render(this._adt._layerToDispose);+    });+    const d = this._frameGraph.addRenderPass(this.name + "_disabled", !0);+    d.setRenderTarget(this.outputTexture), d.setExecuteFunc((g) => {+    });+  }+  dispose() {+    this._adt.dispose(), super.dispose();+  }+}+class fS extends S9 {+  /**+   * Gets the frame graph task associated with this block+   */+  get task() {+    return this._frameGraphTask;+  }+  /**+   * Gets the GUI texture used by this block+   */+  get gui() {+    return this._frameGraphTask.gui;+  }+  /**+   * Create a new NodeRenderGraphGUIBlock+   * @param name defines the block name+   * @param frameGraph defines the hosting frame graph+   * @param scene defines the hosting scene+   */+  constructor(i, d, g) {+    super(i, d, g), this.registerInput("target", tw.Texture), this._addDependenciesInput(), this.registerOutput("output", tw.BasedOnInput), this.target.addAcceptedConnectionPointTypes(tw.TextureAll), this.output._typeConnectionSource = this.target, this._gui = go.CreateFullscreenUI(this.name, void 0, {+      useStandalone: !0,+      scene: g+    }), this._frameGraphTask = new uS(this.name, d, this._gui);+  }+  /**+   * Gets the current class name+   * @returns the class name+   */+  getClassName() {+    return "GUI.NodeRenderGraphGUIBlock";+  }+  /**+   * Gets the target input component+   */+  get target() {+    return this._inputs[0];+  }+  /**+   * Gets the output component+   */+  get output() {+    return this._outputs[0];+  }+  _buildBlock(i) {+    super._buildBlock(i), this.output.value = this._frameGraphTask.outputTexture, this._frameGraphTask.targetTexture = this.target.connectedPoint?.value;+  }+}+kr("BABYLON.GUI.NodeRenderGraphGUIBlock", fS);+const S4 = "XmlLoader Exception : XML file is malformed or corrupted.";+class Z9 {+  /**+   * Create a new xml loader+   * @param parentClass Sets the class context. Used when the loader is instanced inside a class and not in a global context+   */+  constructor(i = null) {+    this._nodes = {}, this._nodeTypes = {+      element: 1,+      attribute: 2,+      text: 3+    }, this._isLoaded = !1, this._objectAttributes = {+      textHorizontalAlignment: 1,+      textVerticalAlignment: 2,+      horizontalAlignment: 3,+      verticalAlignment: 4,+      stretch: 5+    }, i && (this._parentClass = i);+  }+  _getChainElement(i) {+    let d = window;+    this._parentClass && (d = this._parentClass);+    let g = i;+    g = g.split(".");+    for (let y = 0; y < g.length; y++)+      d = d[g[y]];+    return d;+  }+  _getClassAttribute(i) {+    const d = i.split(".");+    return yb("BABYLON.GUI." + d[0])[d[1]];+  }+  _createGuiElement(i, d, g = !0) {+    try {+      const y = yb("BABYLON.GUI." + i.nodeName), M = new y();+      d && g && d.addControl(M);+      for (let O = 0; O < i.attributes.length; O++)+        if (!i.attributes[O].name.toLowerCase().includes("datasource"))+          if (i.attributes[O].name.toLowerCase().includes("observable")) {+            const F = this._getChainElement(i.attributes[O].value);+            M[i.attributes[O].name].add(F);+            continue;+          } else if (i.attributes[O].name == "linkWithMesh")+            this._parentClass ? M.linkWithMesh(this._parentClass[i.attributes[O].value]) : M.linkWithMesh(window[i.attributes[O].value]);+          else if (i.attributes[O].value.match(/{{.*}}/)) {+            const F = i.attributes[O].value.match(/{{(.*)}}/);+            let ne = this._getChainElement(F[1]);+            i.attributes[O].value.startsWith("{{") && i.attributes[O].value.endsWith("}}") || (ne = i.attributes[O].value.replace(/{{.*}}/, `${ne}`)), M[i.attributes[O].name] = ne;+          } else this._objectAttributes[i.attributes[O].name] ? M[i.attributes[O].name] = this._getClassAttribute(i.attributes[O].value) : i.attributes[O].value == "true" || i.attributes[O].value == "false" ? M[i.attributes[O].name] = i.attributes[O].value == "true" : M[i.attributes[O].name] = isNaN(Number(i.attributes[O].value)) ? i.attributes[O].value : Number(i.attributes[O].value);+      if (!i.attributes.getNamedItem("id"))+        return this._nodes[i.nodeName + Object.keys(this._nodes).length + "_gen"] = M, M;+      let N = i.attributes.getNamedItem("id").value;+      if (N.startsWith("{{") && N.endsWith("}}") && (N = this._getChainElement(N.substring(2, N.length - 2))), !this._nodes[N])+        this._nodes[N] = M;+      else+        throw "XmlLoader Exception : Duplicate ID, every element should have an unique ID attribute";+      return M;+    } catch (y) {+      throw "XmlLoader Exception : Error parsing Control " + i.nodeName + "," + y + ".";+    }+  }+  _parseGrid(i, d, g) {+    let y, M, N;+    const O = i.children;+    let F, ne, $, Q = -1, X = -1, he = 0;+    for (let Me = 0; Me < O.length; Me++)+      if (O[Me].nodeType == this._nodeTypes.element) {+        if (O[Me].nodeName != "Row")+          throw "XmlLoader Exception : Expecting Row node, received " + O[Me].nodeName;+        if (Q += 1, N = O[Me].children, !O[Me].attributes.getNamedItem("height"))+          throw "XmlLoader Exception : Height must be defined for grid rows";+        M = Number(O[Me].attributes.getNamedItem("height").nodeValue), ne = O[Me].attributes.getNamedItem("isPixel") ? JSON.parse(O[Me].attributes.getNamedItem("isPixel").nodeValue) : !1, d.addRowDefinition(M, ne);+        for (let p = 0; p < N.length; p++)+          if (N[p].nodeType == this._nodeTypes.element) {+            if (N[p].nodeName != "Column")+              throw "XmlLoader Exception : Expecting Column node, received " + N[p].nodeName;+            if (X += 1, Q > 0 && X > he)+              throw "XmlLoader Exception : In the Grid element, the number of columns is defined in the first row, do not add more columns in the subsequent rows.";+            if (Q == 0) {+              if (!N[p].attributes.getNamedItem("width"))+                throw "XmlLoader Exception : Width must be defined for all the grid columns in the first row";+              y = Number(N[p].attributes.getNamedItem("width").nodeValue), ne = N[p].attributes.getNamedItem("isPixel") ? JSON.parse(N[p].attributes.getNamedItem("isPixel").nodeValue) : !1, d.addColumnDefinition(y, ne);+            }+            F = N[p].children;+            for (let De = 0; De < F.length; De++)+              F[De].nodeType == this._nodeTypes.element && ($ = this._createGuiElement(F[De], d, !1), d.addControl($, Q, X), F[De].firstChild && this._parseXml(F[De].firstChild, $));+          }+        Q == 0 && (he = X), X = -1;+      }+    i.nextSibling && this._parseXml(i.nextSibling, g);+  }+  _parseElement(i, d, g) {+    i.firstChild && this._parseXml(i.firstChild, d), i.nextSibling && this._parseXml(i.nextSibling, g);+  }+  _prepareSourceElement(i, d, g, y, M) {+    this._parentClass ? this._parentClass[g] = y[M] : window[g] = y[M], i.firstChild && this._parseXml(i.firstChild, d, !0);+  }+  _parseElementsFromSource(i, d, g) {+    const y = i.attributes.getNamedItem("dataSource").value;+    if (y.includes(" in ")) {+      let M = !0;+      const N = y.split(" in ");+      if (N.length < 2)+        throw "XmlLoader Exception : Malformed XML, Data Source must have an iterator and a source";+      let O = N[1];+      if (O.startsWith("{") && O.endsWith("}") && (M = !1), (!M || O.startsWith("[") && O.endsWith("]")) && (O = O.substring(1, O.length - 1)), this._parentClass ? O = this._parentClass[O] : O = window[O], M)+        for (let F = 0; F < O.length; F++)+          this._prepareSourceElement(i, d, N[0], O, F);+      else+        for (const F in O)+          this._prepareSourceElement(i, d, N[0], O, F);+      i.nextSibling && this._parseXml(i.nextSibling, g);+    } else+      throw "XmlLoader Exception : Malformed XML, Data Source must include an in";+  }+  _parseXml(i, d, g = !1) {+    if (i.nodeType != this._nodeTypes.element) {+      i.nextSibling && this._parseXml(i.nextSibling, d, g);+      return;+    }+    g && i.setAttribute("id", d.id + (d._children.length + 1));+    const y = this._createGuiElement(i, d);+    this._rootNode || (this._rootNode = y), i.nodeName == "Grid" ? this._parseGrid(i, y, d) : i.attributes.getNamedItem("dataSource") ? this._parseElementsFromSource(i, y, d) : this._parseElement(i, y, d);+  }+  /**+   * Gets if the loading has finished.+   * @returns whether the loading has finished or not+   */+  isLoaded() {+    return this._isLoaded;+  }+  /**+   * Gets a loaded node / control by id.+   * @param id the Controls id set in the xml+   * @returns element of type Control+   */+  getNodeById(i) {+    return this._nodes[i];+  }+  /**+   * Gets all loaded nodes / controls+   * @returns Array of controls+   */+  getNodes() {+    return this._nodes;+  }+  /**+   * Disposes the loaded layout+   */+  dispose() {+    this._rootNode && (this._rootNode.dispose(), this._rootNode = null, this._nodes = {});+  }+  /**+   * Initiates the xml layout loading+   * @param xmlFile defines the xml layout to load+   * @param rootNode defines the node / control to use as a parent for the loaded layout controls.+   * @param onSuccess defines the callback called on layout load successfully.+   * @param onError defines the callback called on layout load failure.+   */+  loadLayout(i, d, g = null, y = null) {+    const M = new XMLHttpRequest();+    M.onload = () => {+      if (M.readyState === 4 && M.status === 200) {+        if (!M.responseXML)+          if (y) {+            y(S4);+            return;+          } else+            throw S4;+        const N = M.responseXML.documentElement;+        this._parseXml(N.firstChild, d), this._isLoaded = !0, g && g();+      }+    }, M.onerror = function() {+      y && y("an error occurred during loading the layout");+    }, M.open("GET", i, !0), M.send();+  }+  /**+   * Initiates the xml layout loading asynchronously+   * @param xmlFile defines the xml layout to load+   * @param rootNode defines the node / control to use as a parent for the loaded layout controls.+   * @returns Promise+   */+  async loadLayoutAsync(i, d) {+    return await new Promise((g, y) => {+      this.loadLayout(i, d, g, y);+    });+  }+}+class wb extends Se {+  /**+   * Creates a new Vector3WithInfo+   * @param source defines the vector3 data to transport+   * @param buttonIndex defines the current mouse button index+   */+  constructor(i, d = 0) {+    super(i.x, i.y, i.z), this.buttonIndex = d;+  }+}+class tm {+  /** Gets or sets the control position in world space */+  get position() {+    return this._node ? this._node.position : (this._position = this._position || Se.Zero(), this._position);+  }+  set position(i) {+    this._position = i, this._node && (this._node.position = this._position);+  }+  /** Gets or sets the control scaling in world space */+  get scaling() {+    return this._node ? this._node.scaling : (this._scaling = this._scaling || new Se(1, 1, 1), this._scaling);+  }+  set scaling(i) {+    this._scaling = i, this._node && (this._isScaledByManager = !1, this._node.scaling = this._scaling);+  }+  /**+   * Gets the list of attached behaviors+   * @see https://doc.babylonjs.com/features/featuresDeepDive/behaviors+   */+  get behaviors() {+    return this._behaviors;+  }+  /**+   * Attach a behavior to the control+   * @see https://doc.babylonjs.com/features/featuresDeepDive/behaviors+   * @param behavior defines the behavior to attach+   * @returns the current control+   */+  addBehavior(i) {+    if (this._behaviors.indexOf(i) !== -1)+      return this;+    i.init();+    const g = this._host.scene;+    return g.isLoading ? g.onDataLoadedObservable.addOnce(() => {+      i.attach(this);+    }) : i.attach(this), this._behaviors.push(i), this;+  }+  /**+   * Remove an attached behavior+   * @see https://doc.babylonjs.com/features/featuresDeepDive/behaviors+   * @param behavior defines the behavior to attach+   * @returns the current control+   */+  removeBehavior(i) {+    const d = this._behaviors.indexOf(i);+    return d === -1 ? this : (this._behaviors[d].detach(), this._behaviors.splice(d, 1), this);+  }+  /**+   * Gets an attached behavior by name+   * @param name defines the name of the behavior to look for+   * @see https://doc.babylonjs.com/features/featuresDeepDive/behaviors+   * @returns null if behavior was not found else the requested behavior+   */+  getBehaviorByName(i) {+    for (const d of this._behaviors)+      if (d.name === i)+        return d;+    return null;+  }+  /** Gets or sets a boolean indicating if the control is visible */+  get isVisible() {+    return this._isVisible;+  }+  set isVisible(i) {+    if (this._isVisible === i)+      return;+    this._isVisible = i;+    const d = this.mesh;+    d && d.setEnabled(i);+  }+  /**+   * Creates a new control+   * @param name defines the control name+   */+  constructor(i) {+    this.name = i, this._downCount = 0, this._enterCount = -1, this._downPointerIds = {}, this._isVisible = !0, this._isScaledByManager = !1, this.onPointerMoveObservable = new qt(), this.onPointerOutObservable = new qt(), this.onPointerDownObservable = new qt(), this.onPointerUpObservable = new qt(), this.onPointerClickObservable = new qt(), this.onPointerEnterObservable = new qt(), this._behaviors = new Array();+  }+  /**+   * Gets a string representing the class name+   */+  get typeName() {+    return this._getTypeName();+  }+  /**+   * Get the current class name of the control.+   * @returns current class name+   */+  getClassName() {+    return this._getTypeName();+  }+  _getTypeName() {+    return "Control3D";+  }+  /**+   * Gets the transform node used by this control+   */+  get node() {+    return this._node;+  }+  /**+   * Gets the mesh used to render this control+   */+  get mesh() {+    return this._node instanceof $4 ? this._node : null;+  }+  /**+   * Link the control as child of the given node+   * @param node defines the node to link to. Use null to unlink the control+   * @returns the current control+   */+  linkToTransformNode(i) {+    return this._node && (this._node.parent = i), this;+  }+  /**+   * @internal+   */+  _prepareNode(i) {+    if (!this._node) {+      if (this._node = this._createNode(i), !this.node)+        return;+      this._position && (this.node.position = this._position), this._scaling && (this.node.scaling = this._scaling), this._injectGUI3DReservedDataStore(this.node).control = this;+      const d = this.mesh;+      d && (d.isPickable = !0, this._affectMaterial(d));+    }+  }+  _injectGUI3DReservedDataStore(i) {+    return i.reservedDataStore = i.reservedDataStore ?? {}, i.reservedDataStore.GUI3D = i.reservedDataStore.GUI3D ?? {}, i.reservedDataStore.GUI3D;+  }+  /**+   * Node creation.+   * Can be overriden by children+   * @param scene defines the scene where the node must be attached+   * @returns the attached node or null if none. Must return a Mesh or AbstractMesh if there is an attached visible object+   */+  // eslint-disable-next-line @typescript-eslint/no-unused-vars+  _createNode(i) {+    return null;+  }+  /**+   * Affect a material to the given mesh+   * @param mesh defines the mesh which will represent the control+   */+  _affectMaterial(i) {+    i.material = null;+  }+  _isTouchButton3D(i) {+    return i._generatePointerEventType !== void 0;+  }+  // Pointers+  /**+   * @internal+   */+  _onPointerMove(i, d) {+    this.onPointerMoveObservable.notifyObservers(d, -1, i, this);+  }+  /**+   * @internal+   */+  _onPointerEnter(i) {+    return this._enterCount === -1 && (this._enterCount = 0), this._enterCount++, this._enterCount > 1 ? !1 : (this.onPointerEnterObservable.notifyObservers(this, -1, i, this), this.pointerEnterAnimation && this.pointerEnterAnimation(), !0);+  }+  /**+   * @internal+   */+  _onPointerOut(i) {+    this._enterCount--, !(this._enterCount > 0) && (this._enterCount = 0, this.onPointerOutObservable.notifyObservers(this, -1, i, this), this.pointerOutAnimation && this.pointerOutAnimation());+  }+  /**+   * @internal+   */+  _onPointerDown(i, d, g, y) {+    return this._downCount++, this._downPointerIds[g] = this._downPointerIds[g] + 1 || 1, this._downCount !== 1 ? !1 : (this.onPointerDownObservable.notifyObservers(new wb(d, y), -1, i, this), this.pointerDownAnimation && this.pointerDownAnimation(), !0);+  }+  /**+   * @internal+   */+  _onPointerUp(i, d, g, y, M) {+    if (this._downCount--, this._downPointerIds[g]--, this._downPointerIds[g] <= 0 && delete this._downPointerIds[g], this._downCount < 0) {+      this._downCount = 0;+      return;+    }+    this._downCount == 0 && (M && (this._enterCount > 0 || this._enterCount === -1) && this.onPointerClickObservable.notifyObservers(new wb(d, y), -1, i, this), this.onPointerUpObservable.notifyObservers(new wb(d, y), -1, i, this), this.pointerUpAnimation && this.pointerUpAnimation());+  }+  /**+   * @internal+   */+  forcePointerUp(i = null) {+    if (i !== null)+      this._onPointerUp(this, Se.Zero(), i, 0, !0);+    else {+      for (const d in this._downPointerIds)+        this._onPointerUp(this, Se.Zero(), +d, 0, !0);+      this._downCount > 0 && (this._downCount = 1, this._onPointerUp(this, Se.Zero(), 0, 0, !0));+    }+  }+  /**+   * @internal+   */+  _processObservables(i, d, g, y, M) {+    if (this._isTouchButton3D(this) && g && (i = this._generatePointerEventType(i, g, this._downCount)), i === Ir.POINTERMOVE) {+      this._onPointerMove(this, d);+      const N = this._host._lastControlOver[y];+      return N && N !== this && N._onPointerOut(this), N !== this && this._onPointerEnter(this), this._host._lastControlOver[y] = this, !0;+    }+    return i === Ir.POINTERDOWN ? (this._onPointerDown(this, d, y, M), this._host._lastControlDown[y] = this, this._host._lastPickedControl = this, !0) : i === Ir.POINTERUP || i === Ir.POINTERDOUBLETAP ? (this._host._lastControlDown[y] && this._host._lastControlDown[y]._onPointerUp(this, d, y, M, !0), delete this._host._lastControlDown[y], !0) : !1;+  }+  /** @internal */+  _disposeNode() {+    this._node && (this._node.dispose(), this._node = null);+  }+  /**+   * Releases all associated resources+   */+  dispose() {+    this.onPointerDownObservable.clear(), this.onPointerEnterObservable.clear(), this.onPointerMoveObservable.clear(), this.onPointerOutObservable.clear(), this.onPointerUpObservable.clear(), this.onPointerClickObservable.clear(), this._disposeNode();+    for (const i of this._behaviors)+      i.detach();+  }+}+class hS extends tm {+  constructor() {+    super(...arguments), this._contentResolution = 512, this._contentScaleRatio = 2;+  }+  /**+   * Gets or sets the GUI 2D content used to display the button's facade+   */+  get content() {+    return this._content;+  }+  set content(i) {+    if (this._content = i, !(!i || !this._host || !this._host.utilityLayer)) {+      if (this._facadeTexture)+        this._facadeTexture.rootContainer.clearControls();+      else {+        const d = typeof this._contentResolution == "number" ? this._contentResolution : this._contentResolution.width, g = typeof this._contentResolution == "number" ? this._contentResolution : this._contentResolution.height;+        this._facadeTexture = new go("Facade", d, g, this._host.utilityLayer.utilityLayerScene, !0, Wr.TRILINEAR_SAMPLINGMODE), this._setFacadeTextureScaling(), this._facadeTexture.premulAlpha = !0;+      }+      this._facadeTexture.addControl(i), this._applyFacade(this._facadeTexture);+    }+  }+  _setFacadeTextureScaling() {+    this._facadeTexture && (typeof this._contentResolution != "number" && (this._contentScaleRatioY = this._contentResolution.height / this._contentResolution.width * this._contentScaleRatio), this._facadeTexture.rootContainer.scaleX = this._contentScaleRatio, this._facadeTexture.rootContainer.scaleY = this._contentScaleRatioY ?? this._contentScaleRatio);+  }+  /**+   * Gets or sets the texture resolution used to render content (512 by default)+   */+  get contentResolution() {+    return this._contentResolution;+  }+  set contentResolution(i) {+    const d = typeof i == "number" ? i : i.width, g = typeof i == "number" ? i : i.height, y = typeof this._contentResolution == "number" ? this._contentResolution : this._contentResolution.width, M = typeof this._contentResolution == "number" ? this._contentResolution : this._contentResolution.height;+    d === y && g === M || (this._contentResolution = i, this._resetContent());+  }+  _disposeFacadeTexture() {+    this._facadeTexture && (this._facadeTexture.dispose(), this._facadeTexture = null);+  }+  _resetContent() {+    this._disposeFacadeTexture(), this.content = this._content;+  }+  /**+   * Apply the facade texture (created from the content property).+   * This function can be overloaded by child classes+   * @param facadeTexture defines the AdvancedDynamicTexture to use+   */+  // eslint-disable-next-line @typescript-eslint/no-unused-vars+  _applyFacade(i) {+  }+}+class pS extends hS {+  /**+   * Creates a new button+   * @param name defines the control name+   */+  constructor(i) {+    super(i);+  }+  _getTypeName() {+    return "AbstractButton3D";+  }+  // Mesh association+  _createNode(i) {+    return new Mu("button" + this.name, i);+  }+}+class Bb extends pS {+  /**+   * Creates a new button+   * @param name defines the control name+   * @param options defines the options used to create the button+   */+  constructor(i, d) {+    super(i), this._options = {+      width: 1,+      height: 1,+      depth: 0.08,+      ...d+    }, this.pointerEnterAnimation = () => {+      this.mesh && (this._currentMaterial.emissiveColor = nr.Red());+    }, this.pointerOutAnimation = () => {+      this._currentMaterial.emissiveColor = nr.Black();+    }, this.pointerDownAnimation = () => {+      this.mesh && this.mesh.scaling.scaleInPlace(0.95);+    }, this.pointerUpAnimation = () => {+      this.mesh && this.mesh.scaling.scaleInPlace(1 / 0.95);+    };+  }+  /**+   * Apply the facade texture (created from the content property).+   * @param facadeTexture defines the AdvancedDynamicTexture to use+   */+  _applyFacade(i) {+    this._currentMaterial.emissiveTexture = i;+  }+  _getTypeName() {+    return "Button3D";+  }+  // Mesh association+  _createNode(i) {+    const d = new Array(6);+    for (let y = 0; y < 6; y++)+      d[y] = new fi(0, 0, 0, 0);+    i.useRightHandedSystem ? d[0].copyFromFloats(1, 0, 0, 1) : d[1].copyFromFloats(0, 0, 1, 1);+    const g = Wi(this.name + "_rootMesh", {+      width: this._options.width,+      height: this._options.height,+      depth: this._options.depth,+      faceUV: d,+      wrap: !0+    }, i);+    return this._contentScaleRatioY = this._contentScaleRatio * this._options.width / this._options.height, this._setFacadeTextureScaling(), g;+  }+  _affectMaterial(i) {+    const d = new xu(this.name + "Material", i.getScene());+    d.specularColor = nr.Black(), i.material = d, this._currentMaterial = d, this._resetContent();+  }+  /**+   * Releases all associated resources+   */+  dispose() {+    super.dispose(), this._disposeFacadeTexture(), this._currentMaterial && this._currentMaterial.dispose();+  }+}+class No extends tm {+  /**+   * Gets the list of child controls+   */+  get children() {+    return this._children;+  }+  /**+   * Gets or sets a boolean indicating if the layout must be blocked (default is false).+   * This is helpful to optimize layout operation when adding multiple children in a row+   */+  get blockLayout() {+    return this._blockLayout;+  }+  set blockLayout(i) {+    this._blockLayout !== i && (this._blockLayout = i, this._blockLayout || this._arrangeChildren());+  }+  /**+   * Creates a new container+   * @param name defines the container name+   */+  constructor(i) {+    super(i), this._blockLayout = !1, this._children = new Array();+  }+  /**+   * Force the container to update the layout. Please note that it will not take blockLayout property in account+   * @returns the current container+   */+  updateLayout() {+    return this._arrangeChildren(), this;+  }+  /**+   * Gets a boolean indicating if the given control is in the children of this control+   * @param control defines the control to check+   * @returns true if the control is in the child list+   */+  containsControl(i) {+    return this._children.indexOf(i) !== -1;+  }+  /**+   * Adds a control to the children of this control+   * @param control defines the control to add+   * @returns the current container+   */+  addControl(i) {+    return this._children.indexOf(i) !== -1 ? this : (i.parent = this, i._host = this._host, this._children.push(i), this._host.utilityLayer && (i._prepareNode(this._host.utilityLayer.utilityLayerScene), i.node && (i.node.parent = this.node), this.blockLayout || this._arrangeChildren()), this);+  }+  /**+   * This function will be called everytime a new control is added+   */+  _arrangeChildren() {+  }+  _createNode(i) {+    return new Mu("ContainerNode", i);+  }+  /**+   * Removes a control from the children of this control+   * @param control defines the control to remove+   * @returns the current container+   */+  removeControl(i) {+    const d = this._children.indexOf(i);+    return d !== -1 && (this._children.splice(d, 1), i.parent = null, i._disposeNode()), this;+  }+  _getTypeName() {+    return "Container3D";+  }+  /**+   * Releases all associated resources+   */+  dispose() {+    for (const i of this._children)+      i.dispose();+    this._children.length = 0, super.dispose();+  }+}+No.UNSET_ORIENTATION = 0;+No.FACEORIGIN_ORIENTATION = 1;+No.FACEORIGINREVERSED_ORIENTATION = 2;+No.FACEFORWARD_ORIENTATION = 3;+No.FACEFORWARDREVERSED_ORIENTATION = 4;+class Rh extends No {+  /**+   * Gets or sets the orientation to apply to all controls (BABYLON.Container3D.FaceOriginReversedOrientation by default)+   * | Value | Type                                | Description |+   * | ----- | ----------------------------------- | ----------- |+   * | 0     | UNSET_ORIENTATION                   |  Control rotation will remain unchanged |+   * | 1     | FACEORIGIN_ORIENTATION              |  Control will rotate to make it look at sphere central axis |+   * | 2     | FACEORIGINREVERSED_ORIENTATION      |  Control will rotate to make it look back at sphere central axis |+   * | 3     | FACEFORWARD_ORIENTATION             |  Control will rotate to look at z axis (0, 0, 1) |+   * | 4     | FACEFORWARDREVERSED_ORIENTATION     |  Control will rotate to look at negative z axis (0, 0, -1) |+   */+  get orientation() {+    return this._orientation;+  }+  set orientation(i) {+    this._orientation !== i && (this._orientation = i, Lr.SetImmediate(() => {+      this._arrangeChildren();+    }));+  }+  /**+   * Gets or sets the number of columns requested (10 by default).+   * The panel will automatically compute the number of rows based on number of child controls.+   */+  get columns() {+    return this._columns;+  }+  set columns(i) {+    this._columns !== i && (this._columns = i, this._rowThenColum = !0, Lr.SetImmediate(() => {+      this._arrangeChildren();+    }));+  }+  /**+   * Gets or sets a the number of rows requested.+   * The panel will automatically compute the number of columns based on number of child controls.+   */+  get rows() {+    return this._rows;+  }+  set rows(i) {+    this._rows !== i && (this._rows = i, this._rowThenColum = !1, Lr.SetImmediate(() => {+      this._arrangeChildren();+    }));+  }+  /**+   * Creates new VolumeBasedPanel+   * @param name+   */+  constructor(i) {+    super(i), this._columns = 10, this._rows = 0, this._rowThenColum = !0, this._orientation = No.FACEORIGIN_ORIENTATION, this.margin = 0;+  }+  _arrangeChildren() {+    this._cellWidth = 0, this._cellHeight = 0;+    let i, d, g = 0;+    for (const F of this._children) {+      if (!F.mesh)+        continue;+      g++, F.mesh.computeWorldMatrix(!0);+      const ne = F.mesh.getBoundingInfo().boundingBox.extendSize, $ = F.mesh.getDescendants(!1);+      for (const Q of $) {+        Q.computeWorldMatrix(!0);+        const X = Q;+        if (typeof X.getBoundingInfo == "function") {+          const he = X.getBoundingInfo().boundingBox.extendSize;+          ne.x = Math.max(ne.x, he.x), ne.y = Math.max(ne.y, he.y), ne.z = Math.max(ne.z, he.z);+        }+      }+      this._cellWidth = Math.max(this._cellWidth, ne.x * 2), this._cellHeight = Math.max(this._cellHeight, ne.y * 2);+    }+    this._cellWidth += this.margin * 2, this._cellHeight += this.margin * 2, this._rowThenColum ? (d = this._columns, i = Math.ceil(g / this._columns)) : (i = this._rows, d = Math.ceil(g / this._rows));+    const y = d * 0.5 * this._cellWidth, M = i * 0.5 * this._cellHeight, N = [];+    let O = 0;+    if (this._rowThenColum)+      for (let F = 0; F < i; F++)+        for (let ne = 0; ne < d && (N.push(new Se(ne * this._cellWidth - y + this._cellWidth / 2, F * this._cellHeight - M + this._cellHeight / 2, 0)), O++, !(O > g)); ne++)+          ;+    else+      for (let F = 0; F < d; F++)+        for (let ne = 0; ne < i && (N.push(new Se(F * this._cellWidth - y + this._cellWidth / 2, ne * this._cellHeight - M + this._cellHeight / 2, 0)), O++, !(O > g)); ne++)+          ;+    O = 0;+    for (const F of this._children)+      F.mesh && (this._mapGridNode(F, N[O]), O++);+    this._finalProcessing();+  }+  /** Child classes can implement this function to provide additional processing */+  _finalProcessing() {+  }+}+class X9 extends Rh {+  constructor() {+    super(...arguments), this._radius = 5;+  }+  /**+   * Gets or sets the radius of the cylinder where to project controls (5 by default)+   */+  get radius() {+    return this._radius;+  }+  set radius(i) {+    this._radius !== i && (this._radius = i, Lr.SetImmediate(() => {+      this._arrangeChildren();+    }));+  }+  _mapGridNode(i, d) {+    const g = i.mesh;+    if (!g)+      return;+    const y = this._cylindricalMapping(d);+    switch (i.position = y, this.orientation) {+      case No.FACEORIGIN_ORIENTATION:+        g.lookAt(new Se(2 * y.x, y.y, 2 * y.z));+        break;+      case No.FACEORIGINREVERSED_ORIENTATION:+        g.lookAt(new Se(-y.x, y.y, -y.z));+        break;+      case No.FACEFORWARD_ORIENTATION:+        break;+      case No.FACEFORWARDREVERSED_ORIENTATION:+        g.rotate(+          eS.Y,+          Math.PI,+          0+          /* Space.LOCAL */+        );+        break;+    }+  }+  _cylindricalMapping(i) {+    const d = new Se(0, i.y, this._radius), g = i.x / this._radius;+    return Oh.RotationYawPitchRollToRef(g, 0, 0, Jr.Matrix[0]), Se.TransformNormal(d, Jr.Matrix[0]);+  }+}+const j4 = "fluentVertexShader", J9 = `precision highp float;attribute vec3 position;attribute vec3 normal;attribute vec2 uv;uniform mat4 world;uniform mat4 viewProjection;varying vec2 vUV;+#ifdef BORDER+varying vec2 scaleInfo;uniform float borderWidth;uniform vec3 scaleFactor;+#endif+#ifdef HOVERLIGHT+varying vec3 worldPosition;+#endif+void main(void) {vUV=uv;+#ifdef BORDER+vec3 scale=scaleFactor;float minScale=min(min(scale.x,scale.y),scale.z);float maxScale=max(max(scale.x,scale.y),scale.z);float minOverMiddleScale=minScale/(scale.x+scale.y+scale.z-minScale-maxScale);float areaYZ=scale.y*scale.z;float areaXZ=scale.x*scale.z;float areaXY=scale.x*scale.y;float scaledBorderWidth=borderWidth; +if (abs(normal.x)==1.0) +{scale.x=scale.y;scale.y=scale.z;if (areaYZ>areaXZ && areaYZ>areaXY)+{scaledBorderWidth*=minOverMiddleScale;}}+else if (abs(normal.y)==1.0) +{scale.x=scale.z;if (areaXZ>areaXY && areaXZ>areaYZ)+{scaledBorderWidth*=minOverMiddleScale;}}+else +{if (areaXY>areaYZ && areaXY>areaXZ)+{scaledBorderWidth*=minOverMiddleScale;}}+float scaleRatio=min(scale.x,scale.y)/max(scale.x,scale.y);if (scale.x>scale.y)+{scaleInfo.x=1.0-(scaledBorderWidth*scaleRatio);scaleInfo.y=1.0-scaledBorderWidth;}+else+{scaleInfo.x=1.0-scaledBorderWidth;scaleInfo.y=1.0-(scaledBorderWidth*scaleRatio);} +#endif +vec4 worldPos=world*vec4(position,1.0);+#ifdef HOVERLIGHT+worldPosition=worldPos.xyz;+#endif+gl_Position=viewProjection*worldPos;}+`;+br.ShadersStore[j4] || (br.ShadersStore[j4] = J9);+const B4 = "fluentPixelShader", K9 = `precision highp float;varying vec2 vUV;uniform vec4 albedoColor;+#ifdef INNERGLOW+uniform vec4 innerGlowColor;+#endif+#ifdef BORDER+varying vec2 scaleInfo;uniform float edgeSmoothingValue;uniform float borderMinValue;+#endif+#ifdef HOVERLIGHT+varying vec3 worldPosition;uniform vec3 hoverPosition;uniform vec4 hoverColor;uniform float hoverRadius;+#endif+#ifdef TEXTURE+uniform sampler2D albedoSampler;uniform mat4 textureMatrix;vec2 finalUV;+#endif+void main(void) {vec3 albedo=albedoColor.rgb;float alpha=albedoColor.a;+#ifdef TEXTURE+finalUV=vec2(textureMatrix*vec4(vUV,1.0,0.0));albedo=texture2D(albedoSampler,finalUV).rgb;+#endif+#ifdef HOVERLIGHT+float pointToHover=(1.0-clamp(length(hoverPosition-worldPosition)/hoverRadius,0.,1.))*hoverColor.a;albedo=clamp(albedo+hoverColor.rgb*pointToHover,0.,1.);+#else+float pointToHover=1.0;+#endif+#ifdef BORDER +float borderPower=10.0;float inverseBorderPower=1.0/borderPower;vec3 borderColor=albedo*borderPower;vec2 distanceToEdge;distanceToEdge.x=abs(vUV.x-0.5)*2.0;distanceToEdge.y=abs(vUV.y-0.5)*2.0;float borderValue=max(smoothstep(scaleInfo.x-edgeSmoothingValue,scaleInfo.x+edgeSmoothingValue,distanceToEdge.x),+smoothstep(scaleInfo.y-edgeSmoothingValue,scaleInfo.y+edgeSmoothingValue,distanceToEdge.y));borderColor=borderColor*borderValue*max(borderMinValue*inverseBorderPower,pointToHover); +albedo+=borderColor;alpha=max(alpha,borderValue);+#endif+#ifdef INNERGLOW+vec2 uvGlow=(vUV-vec2(0.5,0.5))*(innerGlowColor.a*2.0);uvGlow=uvGlow*uvGlow;uvGlow=uvGlow*uvGlow;albedo+=mix(vec3(0.0,0.0,0.0),innerGlowColor.rgb,uvGlow.x+uvGlow.y); +#endif+gl_FragColor=vec4(albedo,alpha);}`;+br.ShadersStore[B4] || (br.ShadersStore[B4] = K9);+class gS extends hc {+  constructor() {+    super(), this.INNERGLOW = !1, this.BORDER = !1, this.HOVERLIGHT = !1, this.TEXTURE = !1, this.rebuild();+  }+}+class $o extends uc {+  /**+   * Creates a new Fluent material+   * @param name defines the name of the material+   * @param scene defines the hosting scene+   */+  constructor(i, d) {+    super(i, d), this.innerGlowColorIntensity = 0.5, this.innerGlowColor = new nr(1, 1, 1), this.albedoColor = new nr(0.3, 0.35, 0.4), this.renderBorders = !1, this.borderWidth = 0.5, this.edgeSmoothingValue = 0.02, this.borderMinValue = 0.1, this.renderHoverLight = !1, this.hoverRadius = 0.01, this.hoverColor = new Gr(0.3, 0.3, 0.3, 1), this.hoverPosition = Se.Zero();+  }+  needAlphaBlending() {+    return this.alpha !== 1;+  }+  needAlphaTesting() {+    return !1;+  }+  getAlphaTestTexture() {+    return null;+  }+  isReadyForSubMesh(i, d) {+    const g = d._drawWrapper;+    if (this.isFrozen && g.effect && g._wasPreviouslyReady)+      return !0;+    d.materialDefines || (d.materialDefines = new gS());+    const y = this.getScene(), M = d.materialDefines;+    if (!this.checkReadyOnEveryCall && d.effect && M._renderId === y.getRenderId())+      return !0;+    if (M._areTexturesDirty)+      if (M.INNERGLOW = this.innerGlowColorIntensity > 0, M.BORDER = this.renderBorders, M.HOVERLIGHT = this.renderHoverLight, this._albedoTexture)+        if (this._albedoTexture.isReadyOrNotBlocking())+          M.TEXTURE = !0;+        else+          return !1;+      else+        M.TEXTURE = !1;+    const N = y.getEngine();+    if (M.isDirty) {+      M.markAsProcessed(), y.resetCachedMaterial();+      const O = [Yt.PositionKind];+      O.push(Yt.NormalKind), O.push(Yt.UVKind);+      const F = "fluent", ne = [+        "world",+        "viewProjection",+        "innerGlowColor",+        "albedoColor",+        "borderWidth",+        "edgeSmoothingValue",+        "scaleFactor",+        "borderMinValue",+        "hoverColor",+        "hoverPosition",+        "hoverRadius",+        "textureMatrix"+      ], $ = ["albedoSampler"], Q = [];+      fc({+        uniformsNames: ne,+        uniformBuffersNames: Q,+        samplers: $,+        defines: M,+        maxSimultaneousLights: 4+      });+      const X = M.toString();+      d.setEffect(y.getEngine().createEffect(F, {+        attributes: O,+        uniformsNames: ne,+        uniformBuffersNames: Q,+        samplers: $,+        defines: X,+        fallbacks: null,+        onCompiled: this.onCompiled,+        onError: this.onError,+        indexParameters: { maxSimultaneousLights: 4 }+      }, N), M, this._materialContext);+    }+    return !d.effect || !d.effect.isReady() ? !1 : (M._renderId = y.getRenderId(), g._wasPreviouslyReady = !0, !0);+  }+  bindForSubMesh(i, d, g) {+    const y = this.getScene(), M = g.materialDefines;+    if (!M)+      return;+    const N = g.effect;+    if (N) {+      if (this._activeEffect = N, this.bindOnlyWorldMatrix(i), this._activeEffect.setMatrix("viewProjection", y.getTransformMatrix()), this._mustRebind(y, N, g) && (this._activeEffect.setColor4("albedoColor", this.albedoColor, this.alpha), M.INNERGLOW && this._activeEffect.setColor4("innerGlowColor", this.innerGlowColor, this.innerGlowColorIntensity), M.BORDER && (this._activeEffect.setFloat("borderWidth", this.borderWidth), this._activeEffect.setFloat("edgeSmoothingValue", this.edgeSmoothingValue), this._activeEffect.setFloat("borderMinValue", this.borderMinValue), d.getBoundingInfo().boundingBox.extendSize.multiplyToRef(d.scaling, Jr.Vector3[0]), this._activeEffect.setVector3("scaleFactor", Jr.Vector3[0])), M.HOVERLIGHT && (this._activeEffect.setDirectColor4("hoverColor", this.hoverColor), this._activeEffect.setFloat("hoverRadius", this.hoverRadius), this._activeEffect.setVector3("hoverPosition", this.hoverPosition)), M.TEXTURE && this._albedoTexture)) {+        this._activeEffect.setTexture("albedoSampler", this._albedoTexture);+        const O = this._albedoTexture.getTextureMatrix();+        this._activeEffect.setMatrix("textureMatrix", O);+      }+      this._afterBind(d, this._activeEffect, g);+    }+  }+  getActiveTextures() {+    return super.getActiveTextures();+  }+  hasTexture(i) {+    return !!super.hasTexture(i);+  }+  dispose(i) {+    super.dispose(i);+  }+  clone(i) {+    return Eo.Clone(() => new $o(i, this.getScene()), this);+  }+  serialize() {+    const i = super.serialize();+    return i.customType = "BABYLON.GUI.FluentMaterial", i;+  }+  getClassName() {+    return "FluentMaterial";+  }+  // Statics+  static Parse(i, d, g) {+    return Eo.Parse(() => new $o(i.name, d), i, d, g);+  }+}+q([+  H(),+  Cb("_markAllSubMeshesAsTexturesDirty")+], $o.prototype, "innerGlowColorIntensity", void 0);+q([+  tS()+], $o.prototype, "innerGlowColor", void 0);+q([+  tS()+], $o.prototype, "albedoColor", void 0);+q([+  H(),+  Cb("_markAllSubMeshesAsTexturesDirty")+], $o.prototype, "renderBorders", void 0);+q([+  H()+], $o.prototype, "borderWidth", void 0);+q([+  H()+], $o.prototype, "edgeSmoothingValue", void 0);+q([+  H()+], $o.prototype, "borderMinValue", void 0);+q([+  H(),+  Cb("_markAllSubMeshesAsTexturesDirty")+], $o.prototype, "renderHoverLight", void 0);+q([+  H()+], $o.prototype, "hoverRadius", void 0);+q([+  rS()+], $o.prototype, "hoverColor", void 0);+q([+  ku()+], $o.prototype, "hoverPosition", void 0);+q([+  j9("albedoTexture")+], $o.prototype, "_albedoTexture", void 0);+q([+  Cb("_markAllSubMeshesAsTexturesAndMiscDirty")+], $o.prototype, "albedoTexture", void 0);+kr("BABYLON.GUI.FluentMaterial", $o);+class bd extends Rh {+  /**+   * Gets or sets the margin size of the backplate in button size units.+   * Setting this to 1, will make the backPlate margin the size of 1 button+   */+  get backPlateMargin() {+    return this._backPlateMargin;+  }+  set backPlateMargin(i) {+    if (this._backPlateMargin = i, this._children.length >= 1) {+      for (const d of this.children)+        this._updateCurrentMinMax(d.position);+      this._updateMargins();+    }+  }+  _createNode(i) {+    const d = new Mb(`menu_${this.name}`, i);+    return this._backPlate = Wi("backPlate" + this.name, { size: 1 }, i), this._backPlate.parent = d, d;+  }+  _affectMaterial(i) {+    this._backPlateMaterial = new $o(this.name + "backPlateMaterial", i.getScene()), this._backPlateMaterial.albedoColor = new nr(0.08, 0.15, 0.55), this._backPlateMaterial.renderBorders = !0, this._backPlateMaterial.renderHoverLight = !0, this._pickedPointObserver = this._host.onPickedPointChangedObservable.add((d) => {+      d ? (this._backPlateMaterial.hoverPosition = d, this._backPlateMaterial.hoverColor.a = 1) : this._backPlateMaterial.hoverColor.a = 0;+    }), this._backPlate.material = this._backPlateMaterial;+  }+  _mapGridNode(i, d) {+    i.mesh && (i.position = d.clone(), this._updateCurrentMinMax(d));+  }+  _finalProcessing() {+    this._updateMargins();+  }+  _updateCurrentMinMax(i) {+    this._currentMin || (this._currentMin = i.clone(), this._currentMax = i.clone()), this._currentMin.minimizeInPlace(i), this._currentMax.maximizeInPlace(i);+  }+  _updateMargins() {+    if (this._children.length > 0) {+      this._currentMin.addInPlaceFromFloats(-this._cellWidth / 2, -this._cellHeight / 2, 0), this._currentMax.addInPlaceFromFloats(this._cellWidth / 2, this._cellHeight / 2, 0);+      const i = this._currentMax.subtract(this._currentMin);+      this._backPlate.scaling.x = i.x + this._cellWidth * this.backPlateMargin, this._backPlate.scaling.y = i.y + this._cellHeight * this.backPlateMargin, this._backPlate.scaling.z = 1e-3;+      for (let d = 0; d < this._children.length; d++)+        this._children[d].position.subtractInPlace(this._currentMin).subtractInPlace(i.scale(0.5)), this._children[d].position.z -= 0.01;+    }+    this._currentMin = null, this._currentMax = null;+  }+  /**+   * Creates a holographic menu GUI 3D control+   * @param name name of the menu+   */+  constructor(i) {+    super(i), this._backPlateMargin = 1.25;+  }+  /**+   * Adds a button to the menu.+   * Please note that the back material of the button will be set to transparent as it is attached to the menu.+   *+   * @param button Button to add+   * @returns This menu+   */+  addButton(i) {+    const d = this.blockLayout;+    return d || (this.blockLayout = !0), super.addControl(i), i.isBackplateVisible = !1, i.scaling.scaleInPlace(bd.MENU_BUTTON_SCALE), d || (this.blockLayout = !1), this;+  }+  /**+   * This method should not be used directly. It is inherited from `Container3D`.+   * Please use `addButton` instead.+   * @param _control the control to add+   * @returns the current container+   */+  addControl(i) {+    return zh.Warn("TouchHolographicMenu can only contain buttons. Please use the method `addButton` instead."), this;+  }+  /**+   * Disposes the menu+   */+  dispose() {+    super.dispose(), this._host.onPickedPointChangedObservable.remove(this._pickedPointObserver);+  }+}+bd.MENU_BUTTON_SCALE = 1;+class $9 extends bd {+  /**+   * The hand constraint behavior setting the transformation of this node+   */+  get handConstraintBehavior() {+    return this._handConstraintBehavior;+  }+  _createNode(i) {+    const d = super._createNode(i);+    return this._handConstraintBehavior.attach(d), d;+  }+  /**+   * Creates a hand menu GUI 3D control+   * @param xr the WebXRExperienceHelper used to link this control to the enabled WebXRHandTracking feature+   * @param name name of the hand menu+   */+  constructor(i, d) {+    super(d), this._handConstraintBehavior = new B9(), this._handConstraintBehavior.linkToXRExperience(i), this.backPlateMargin = 0.15, this.rows = 3;+  }+  /**+   * Disposes the hand menu+   */+  dispose() {+    super.dispose(), this._handConstraintBehavior.detach();+  }+}+const N4 = "fluentBackplatePixelShader", eF = `uniform vec3 cameraPosition;varying vec3 vPosition;varying vec3 vNormal;varying vec2 vUV;varying vec3 vTangent;varying vec3 vBinormal;varying vec4 vColor;varying vec4 vExtra1;varying vec4 vExtra2;varying vec4 vExtra3;uniform float _Radius_;uniform float _Line_Width_;uniform bool _Absolute_Sizes_;uniform float _Filter_Width_;uniform vec4 _Base_Color_;uniform vec4 _Line_Color_;uniform float _Radius_Top_Left_;uniform float _Radius_Top_Right_;uniform float _Radius_Bottom_Left_;uniform float _Radius_Bottom_Right_;uniform vec3 _Blob_Position_;uniform float _Blob_Intensity_;uniform float _Blob_Near_Size_;uniform float _Blob_Far_Size_;uniform float _Blob_Near_Distance_;uniform float _Blob_Far_Distance_;uniform float _Blob_Fade_Length_;uniform float _Blob_Pulse_;uniform float _Blob_Fade_;uniform sampler2D _Blob_Texture_;uniform vec3 _Blob_Position_2_;uniform float _Blob_Near_Size_2_;uniform float _Blob_Pulse_2_;uniform float _Blob_Fade_2_;uniform float _Rate_;uniform vec4 _Highlight_Color_;uniform float _Highlight_Width_;uniform vec4 _Highlight_Transform_;uniform float _Highlight_;uniform float _Iridescence_Intensity_;uniform float _Iridescence_Edge_Intensity_;uniform float _Angle_;uniform float _Fade_Out_;uniform bool _Reflected_;uniform float _Frequency_;uniform float _Vertical_Offset_;uniform sampler2D _Iridescent_Map_;uniform bool _Use_Global_Left_Index_;uniform bool _Use_Global_Right_Index_;uniform vec4 Global_Left_Index_Tip_Position;uniform vec4 Global_Right_Index_Tip_Position;void Round_Rect_Fragment_B31(+float Radius,+float Line_Width,+vec4 Line_Color,+float Filter_Width,+vec2 UV,+float Line_Visibility,+vec4 Rect_Parms,+vec4 Fill_Color,+out vec4 Color)+{float d=length(max(abs(UV)-Rect_Parms.xy,0.0));float dx=max(fwidth(d)*Filter_Width,0.00001);float g=min(Rect_Parms.z,Rect_Parms.w);float dgrad=max(fwidth(g)*Filter_Width,0.00001);float Inside_Rect=clamp(g/dgrad,0.0,1.0);float inner=clamp((d+dx*0.5-max(Radius-Line_Width,d-dx*0.5))/dx,0.0,1.0);Color=clamp(mix(Fill_Color,Line_Color,inner),0.0,1.0)*Inside_Rect;}+void Blob_Fragment_B71(+sampler2D Blob_Texture,+vec4 Blob_Info1,+vec4 Blob_Info2,+out vec4 Blob_Color)+{float k1=dot(Blob_Info1.xy,Blob_Info1.xy);float k2=dot(Blob_Info2.xy,Blob_Info2.xy);vec3 closer=k1<k2 ? vec3(k1,Blob_Info1.z,Blob_Info1.w) : vec3(k2,Blob_Info2.z,Blob_Info2.w);Blob_Color=closer.z*texture(Blob_Texture,vec2(vec2(sqrt(closer.x),closer.y).x,1.0-vec2(sqrt(closer.x),closer.y).y))*clamp(1.0-closer.x,0.0,1.0);}+void Line_Fragment_B48(+vec4 Base_Color,+vec4 Highlight_Color,+float Highlight_Width,+vec3 Line_Vertex,+float Highlight,+out vec4 Line_Color)+{float k2=1.0-clamp(abs(Line_Vertex.y/Highlight_Width),0.0,1.0);Line_Color=mix(Base_Color,Highlight_Color,Highlight*k2);}+void Scale_RGB_B54(+vec4 Color,+float Scalar,+out vec4 Result)+{Result=vec4(Scalar,Scalar,Scalar,1)*Color;}+void Conditional_Float_B38(+bool Which,+float If_True,+float If_False,+out float Result)+{Result=Which ? If_True : If_False;}+void main()+{float R_Q72;float G_Q72;float B_Q72;float A_Q72;R_Q72=vColor.r; G_Q72=vColor.g; B_Q72=vColor.b; A_Q72=vColor.a;vec4 Blob_Color_Q71;+#if BLOB_ENABLE+float k1=dot(vExtra2.xy,vExtra2.xy);float k2=dot(vExtra3.xy,vExtra3.xy);vec3 closer=k1<k2 ? vec3(k1,vExtra2.z,vExtra2.w) : vec3(k2,vExtra3.z,vExtra3.w);Blob_Color_Q71=closer.z*texture(_Blob_Texture_,vec2(vec2(sqrt(closer.x),closer.y).x,1.0-vec2(sqrt(closer.x),closer.y).y))*clamp(1.0-closer.x,0.0,1.0);+#else+Blob_Color_Q71=vec4(0,0,0,0);+#endif+vec4 Line_Color_Q48;Line_Fragment_B48(_Line_Color_,_Highlight_Color_,_Highlight_Width_,vTangent,_Highlight_,Line_Color_Q48);float X_Q67;float Y_Q67;X_Q67=vUV.x;Y_Q67=vUV.y;vec3 Incident_Q66=normalize(vPosition-cameraPosition);vec3 Reflected_Q60=reflect(Incident_Q66,vBinormal);float Product_Q63=Y_Q67*_Vertical_Offset_;float Dot_Q68=dot(Incident_Q66, Reflected_Q60);float Dot_Q57=dot(vNormal, Incident_Q66);float Result_Q38;Conditional_Float_B38(_Reflected_,Dot_Q68,Dot_Q57,Result_Q38);float Product_Q64=Result_Q38*_Frequency_;float Sum_Q69=Product_Q64+1.0;float Product_Q70=Sum_Q69*0.5;float Sum_Q62=Product_Q63+Product_Q70;float FractF_Q59=fract(Sum_Q62);vec2 Vec2_Q65=vec2(FractF_Q59,0.5);vec4 Color_Q58;+#if IRIDESCENT_MAP_ENABLE+Color_Q58=texture(_Iridescent_Map_,Vec2_Q65);+#else+Color_Q58=vec4(0,0,0,0);+#endif+vec4 Result_Q54;Scale_RGB_B54(Color_Q58,_Iridescence_Edge_Intensity_,Result_Q54);vec4 Result_Q55;Scale_RGB_B54(Color_Q58,_Iridescence_Intensity_,Result_Q55);vec4 Base_And_Iridescent_Q53;Base_And_Iridescent_Q53=Line_Color_Q48+vec4(Result_Q54.rgb,0.0);vec4 Base_And_Iridescent_Q56;Base_And_Iridescent_Q56=_Base_Color_+vec4(Result_Q55.rgb,0.0);vec4 Result_Q52=Base_And_Iridescent_Q53; Result_Q52.a=1.0;vec4 Result_Q35=Blob_Color_Q71+(1.0-Blob_Color_Q71.a)*Base_And_Iridescent_Q56;vec4 Color_Q31;Round_Rect_Fragment_B31(R_Q72,G_Q72,Result_Q52,_Filter_Width_,vUV,1.0,vExtra1,Result_Q35,Color_Q31);vec4 Result_Q47=_Fade_Out_*Color_Q31;vec4 Out_Color=Result_Q47;float Clip_Threshold=0.001;bool To_sRGB=false;gl_FragColor=Out_Color;}`;+br.ShadersStore[N4] || (br.ShadersStore[N4] = eF);+const I4 = "fluentBackplateVertexShader", tF = `uniform mat4 world;uniform mat4 viewProjection;uniform vec3 cameraPosition;attribute vec3 position;attribute vec3 normal;+#ifdef TANGENT+attribute vec3 tangent;+#else+const vec3 tangent=vec3(0.);+#endif+uniform float _Radius_;uniform float _Line_Width_;uniform bool _Absolute_Sizes_;uniform float _Filter_Width_;uniform vec4 _Base_Color_;uniform vec4 _Line_Color_;uniform float _Radius_Top_Left_;uniform float _Radius_Top_Right_;uniform float _Radius_Bottom_Left_;uniform float _Radius_Bottom_Right_;uniform vec3 _Blob_Position_;uniform float _Blob_Intensity_;uniform float _Blob_Near_Size_;uniform float _Blob_Far_Size_;uniform float _Blob_Near_Distance_;uniform float _Blob_Far_Distance_;uniform float _Blob_Fade_Length_;uniform float _Blob_Pulse_;uniform float _Blob_Fade_;uniform sampler2D _Blob_Texture_;uniform vec3 _Blob_Position_2_;uniform float _Blob_Near_Size_2_;uniform float _Blob_Pulse_2_;uniform float _Blob_Fade_2_;uniform float _Rate_;uniform vec4 _Highlight_Color_;uniform float _Highlight_Width_;uniform vec4 _Highlight_Transform_;uniform float _Highlight_;uniform float _Iridescence_Intensity_;uniform float _Iridescence_Edge_Intensity_;uniform float _Angle_;uniform float _Fade_Out_;uniform bool _Reflected_;uniform float _Frequency_;uniform float _Vertical_Offset_;uniform sampler2D _Iridescent_Map_;uniform bool _Use_Global_Left_Index_;uniform bool _Use_Global_Right_Index_;uniform vec4 Global_Left_Index_Tip_Position;uniform vec4 Global_Right_Index_Tip_Position;varying vec3 vPosition;varying vec3 vNormal;varying vec2 vUV;varying vec3 vTangent;varying vec3 vBinormal;varying vec4 vColor;varying vec4 vExtra1;varying vec4 vExtra2;varying vec4 vExtra3;void Object_To_World_Pos_B115(+vec3 Pos_Object,+out vec3 Pos_World)+{Pos_World=(world*vec4(Pos_Object,1.0)).xyz;}+void PickDir_B140(+float Degrees,+vec3 DirX,+vec3 DirY,+out vec3 Dir)+{float a=Degrees*3.14159/180.0;Dir=cos(a)*DirX+sin(a)*DirY;}+void Round_Rect_Vertex_B139(+vec2 UV,+float Radius,+float Margin,+float Anisotropy,+float Gradient1,+float Gradient2,+out vec2 Rect_UV,+out vec4 Rect_Parms,+out vec2 Scale_XY,+out vec2 Line_UV)+{Scale_XY=vec2(Anisotropy,1.0);Line_UV=(UV-vec2(0.5,0.5));Rect_UV=Line_UV*Scale_XY;Rect_Parms.xy=Scale_XY*0.5-vec2(Radius,Radius)-vec2(Margin,Margin);Rect_Parms.z=Gradient1; +Rect_Parms.w=Gradient2;}+void Line_Vertex_B135(+vec2 Scale_XY,+vec2 UV,+float Time,+float Rate,+vec4 Highlight_Transform,+out vec3 Line_Vertex)+{float angle2=(Rate*Time)*2.0*3.1416;float sinAngle2=sin(angle2);float cosAngle2=cos(angle2);vec2 xformUV=UV*Highlight_Transform.xy+Highlight_Transform.zw;Line_Vertex.x=0.0;Line_Vertex.y=cosAngle2*xformUV.x-sinAngle2*xformUV.y;Line_Vertex.z=0.0; }+void Blob_Vertex_B180(+vec3 Position,+vec3 Normal,+vec3 Tangent,+vec3 Bitangent,+vec3 Blob_Position,+float Intensity,+float Blob_Near_Size,+float Blob_Far_Size,+float Blob_Near_Distance,+float Blob_Far_Distance,+float Blob_Fade_Length,+float Blob_Pulse,+float Blob_Fade,+out vec4 Blob_Info)+{vec3 blob=Blob_Position;vec3 delta=blob-Position;float dist=dot(Normal,delta);float lerpValue=clamp((abs(dist)-Blob_Near_Distance)/(Blob_Far_Distance-Blob_Near_Distance),0.0,1.0);float fadeValue=1.0-clamp((abs(dist)-Blob_Far_Distance)/Blob_Fade_Length,0.0,1.0);float size=Blob_Near_Size+(Blob_Far_Size-Blob_Near_Size)*lerpValue;vec2 blobXY=vec2(dot(delta,Tangent),dot(delta,Bitangent))/(0.0001+size);float Fade=fadeValue*Intensity*Blob_Fade;float Distance=(lerpValue*0.5+0.5)*(1.0-Blob_Pulse);Blob_Info=vec4(blobXY.x,blobXY.y,Distance,Fade);}+void Move_Verts_B129(+float Anisotropy,+vec3 P,+float Radius,+out vec3 New_P,+out vec2 New_UV,+out float Radial_Gradient,+out vec3 Radial_Dir)+{vec2 UV=P.xy*2.0+0.5;vec2 center=clamp(UV,0.0,1.0);vec2 delta=UV-center;vec2 r2=2.0*vec2(Radius/Anisotropy,Radius);New_UV=center+r2*(UV-2.0*center+0.5);New_P=vec3(New_UV-0.5,P.z);Radial_Gradient=1.0-length(delta)*2.0;Radial_Dir=vec3(delta*r2,0.0);}+void Object_To_World_Dir_B132(+vec3 Dir_Object,+out vec3 Binormal_World,+out vec3 Binormal_World_N,+out float Binormal_Length)+{Binormal_World=(world*vec4(Dir_Object,0.0)).xyz;Binormal_Length=length(Binormal_World);Binormal_World_N=Binormal_World/Binormal_Length;}+void RelativeOrAbsoluteDetail_B147(+float Nominal_Radius,+float Nominal_LineWidth,+bool Absolute_Measurements,+float Height,+out float Radius,+out float Line_Width)+{float scale=Absolute_Measurements ? 1.0/Height : 1.0;Radius=Nominal_Radius*scale;Line_Width=Nominal_LineWidth*scale;}+void Edge_AA_Vertex_B130(+vec3 Position_World,+vec3 Position_Object,+vec3 Normal_Object,+vec3 Eye,+float Radial_Gradient,+vec3 Radial_Dir,+vec3 Tangent,+out float Gradient1,+out float Gradient2)+{vec3 I=(Eye-Position_World);vec3 T=(world* vec4(Tangent,0.0)).xyz;float g=(dot(T,I)<0.0) ? 0.0 : 1.0;if (Normal_Object.z==0.0) { +Gradient1=Position_Object.z>0.0 ? g : 1.0;Gradient2=Position_Object.z>0.0 ? 1.0 : g;} else {Gradient1=g+(1.0-g)*(Radial_Gradient);Gradient2=1.0;}}+void Pick_Radius_B144(+float Radius,+float Radius_Top_Left,+float Radius_Top_Right,+float Radius_Bottom_Left,+float Radius_Bottom_Right,+vec3 Position,+out float Result)+{bool whichY=Position.y>0.0;Result=Position.x<0.0 ? (whichY ? Radius_Top_Left : Radius_Bottom_Left) : (whichY ? Radius_Top_Right : Radius_Bottom_Right);Result*=Radius;}+void main()+{vec3 Nrm_World_Q128;Nrm_World_Q128=normalize((world*vec4(normal,0.0)).xyz);vec3 Tangent_World_Q131;vec3 Tangent_World_N_Q131;float Tangent_Length_Q131;Tangent_World_Q131=(world*vec4(vec3(1,0,0),0.0)).xyz;Tangent_Length_Q131=length(Tangent_World_Q131);Tangent_World_N_Q131=Tangent_World_Q131/Tangent_Length_Q131;vec3 Binormal_World_Q132;vec3 Binormal_World_N_Q132;float Binormal_Length_Q132;Object_To_World_Dir_B132(vec3(0,1,0),Binormal_World_Q132,Binormal_World_N_Q132,Binormal_Length_Q132);float Anisotropy_Q133=Tangent_Length_Q131/Binormal_Length_Q132;vec3 Result_Q177;Result_Q177=mix(_Blob_Position_,Global_Left_Index_Tip_Position.xyz,float(_Use_Global_Left_Index_));vec3 Result_Q178;Result_Q178=mix(_Blob_Position_2_,Global_Right_Index_Tip_Position.xyz,float(_Use_Global_Right_Index_));float Result_Q144;Pick_Radius_B144(_Radius_,_Radius_Top_Left_,_Radius_Top_Right_,_Radius_Bottom_Left_,_Radius_Bottom_Right_,position,Result_Q144);vec3 Dir_Q140;PickDir_B140(_Angle_,Tangent_World_N_Q131,Binormal_World_N_Q132,Dir_Q140);float Radius_Q147;float Line_Width_Q147;RelativeOrAbsoluteDetail_B147(Result_Q144,_Line_Width_,_Absolute_Sizes_,Binormal_Length_Q132,Radius_Q147,Line_Width_Q147);vec4 Out_Color_Q145=vec4(Radius_Q147,Line_Width_Q147,0,1);vec3 New_P_Q129;vec2 New_UV_Q129;float Radial_Gradient_Q129;vec3 Radial_Dir_Q129;Move_Verts_B129(Anisotropy_Q133,position,Radius_Q147,New_P_Q129,New_UV_Q129,Radial_Gradient_Q129,Radial_Dir_Q129);vec3 Pos_World_Q115;Object_To_World_Pos_B115(New_P_Q129,Pos_World_Q115);vec4 Blob_Info_Q180;+#if BLOB_ENABLE+Blob_Vertex_B180(Pos_World_Q115,Nrm_World_Q128,Tangent_World_N_Q131,Binormal_World_N_Q132,Result_Q177,_Blob_Intensity_,_Blob_Near_Size_,_Blob_Far_Size_,_Blob_Near_Distance_,_Blob_Far_Distance_,_Blob_Fade_Length_,_Blob_Pulse_,_Blob_Fade_,Blob_Info_Q180);+#else+Blob_Info_Q180=vec4(0,0,0,0);+#endif+vec4 Blob_Info_Q181;+#if BLOB_ENABLE_2+Blob_Vertex_B180(Pos_World_Q115,Nrm_World_Q128,Tangent_World_N_Q131,Binormal_World_N_Q132,Result_Q178,_Blob_Intensity_,_Blob_Near_Size_2_,_Blob_Far_Size_,_Blob_Near_Distance_,_Blob_Far_Distance_,_Blob_Fade_Length_,_Blob_Pulse_2_,_Blob_Fade_2_,Blob_Info_Q181);+#else+Blob_Info_Q181=vec4(0,0,0,0);+#endif+float Gradient1_Q130;float Gradient2_Q130;+#if SMOOTH_EDGES+Edge_AA_Vertex_B130(Pos_World_Q115,position,normal,cameraPosition,Radial_Gradient_Q129,Radial_Dir_Q129,tangent,Gradient1_Q130,Gradient2_Q130);+#else+Gradient1_Q130=1.0;Gradient2_Q130=1.0;+#endif+vec2 Rect_UV_Q139;vec4 Rect_Parms_Q139;vec2 Scale_XY_Q139;vec2 Line_UV_Q139;Round_Rect_Vertex_B139(New_UV_Q129,Radius_Q147,0.0,Anisotropy_Q133,Gradient1_Q130,Gradient2_Q130,Rect_UV_Q139,Rect_Parms_Q139,Scale_XY_Q139,Line_UV_Q139);vec3 Line_Vertex_Q135;Line_Vertex_B135(Scale_XY_Q139,Line_UV_Q139,0.0,_Rate_,_Highlight_Transform_,Line_Vertex_Q135);vec3 Position=Pos_World_Q115;vec3 Normal=Dir_Q140;vec2 UV=Rect_UV_Q139;vec3 Tangent=Line_Vertex_Q135;vec3 Binormal=Nrm_World_Q128;vec4 Color=Out_Color_Q145;vec4 Extra1=Rect_Parms_Q139;vec4 Extra2=Blob_Info_Q180;vec4 Extra3=Blob_Info_Q181;gl_Position=viewProjection*vec4(Position,1);vPosition=Position;vNormal=Normal;vUV=UV;vTangent=Tangent;vBinormal=Binormal;vColor=Color;vExtra1=Extra1;vExtra2=Extra2;vExtra3=Extra3;}`;+br.ShadersStore[I4] || (br.ShadersStore[I4] = tF);+class rF extends hc {+  constructor() {+    super(), this.BLOB_ENABLE = !0, this.BLOB_ENABLE_2 = !0, this.SMOOTH_EDGES = !0, this.IRIDESCENT_MAP_ENABLE = !0, this._needNormals = !0, this.rebuild();+  }+}+class Dr extends uc {+  constructor(i, d) {+    super(i, d), this.radius = 0.03, this.lineWidth = 0.01, this.absoluteSizes = !1, this._filterWidth = 1, this.baseColor = new Gr(0.0392157, 0.0666667, 0.207843, 1), this.lineColor = new Gr(0.14902, 0.133333, 0.384314, 1), this.blobIntensity = 0.98, this.blobFarSize = 0.04, this.blobNearDistance = 0, this.blobFarDistance = 0.08, this.blobFadeLength = 0.08, this.blobNearSize = 0.22, this.blobPulse = 0, this.blobFade = 0, this.blobNearSize2 = 0.22, this.blobPulse2 = 0, this.blobFade2 = 0, this._rate = 0.135, this.highlightColor = new Gr(0.98, 0.98, 0.98, 1), this.highlightWidth = 0.25, this._highlightTransform = new fi(1, 1, 0, 0), this._highlight = 1, this.iridescenceIntensity = 0, this.iridescenceEdgeIntensity = 1, this._angle = -45, this.fadeOut = 1, this._reflected = !0, this._frequency = 1, this._verticalOffset = 0, this.globalLeftIndexTipPosition = Se.Zero(), this._globalLeftIndexTipPosition4 = fi.Zero(), this.globalRightIndexTipPosition = Se.Zero(), this._globalRightIndexTipPosition4 = fi.Zero(), this.alphaMode = Is.ALPHA_DISABLE, this.backFaceCulling = !1;+    const g = Lr.GetAssetUrl(Dr.BLOB_TEXTURE_URL), y = Lr.GetAssetUrl(Dr.IM_TEXTURE_URL);+    this._blobTexture = new Wr(g, this.getScene(), !0, !1, Wr.NEAREST_SAMPLINGMODE), this._iridescentMap = new Wr(y, this.getScene(), !0, !1, Wr.NEAREST_SAMPLINGMODE);+  }+  needAlphaBlending() {+    return !1;+  }+  needAlphaTesting() {+    return !1;+  }+  getAlphaTestTexture() {+    return null;+  }+  isReadyForSubMesh(i, d) {+    const g = d._drawWrapper;+    if (this.isFrozen && g.effect && g._wasPreviouslyReady)+      return !0;+    if (!this._blobTexture.isReady() || !this._iridescentMap.isReady())+      return !1;+    d.materialDefines || (d.materialDefines = new rF());+    const y = d.materialDefines, M = this.getScene();+    if (this._isReadyForSubMesh(d))+      return !0;+    const N = M.getEngine();+    if (vd(i, y, !1, !1), y.isDirty) {+      y.markAsProcessed(), M.resetCachedMaterial();+      const O = new _d();+      y.FOG && O.addFallback(1, "FOG"), wd(y, O), y.IMAGEPROCESSINGPOSTPROCESS = M.imageProcessingConfiguration.applyByPostProcess;+      const F = [Yt.PositionKind];+      y.NORMAL && F.push(Yt.NormalKind), y.UV1 && F.push(Yt.UVKind), y.UV2 && F.push(Yt.UV2Kind), y.VERTEXCOLOR && F.push(Yt.ColorKind), y.TANGENT && F.push(Yt.TangentKind), yd(F, y);+      const ne = "fluentBackplate", $ = y.toString(), Q = [+        "world",+        "viewProjection",+        "cameraPosition",+        "_Radius_",+        "_Line_Width_",+        "_Absolute_Sizes_",+        "_Filter_Width_",+        "_Base_Color_",+        "_Line_Color_",+        "_Radius_Top_Left_",+        "_Radius_Top_Right_",+        "_Radius_Bottom_Left_",+        "_Radius_Bottom_Right_",+        "_Blob_Position_",+        "_Blob_Intensity_",+        "_Blob_Near_Size_",+        "_Blob_Far_Size_",+        "_Blob_Near_Distance_",+        "_Blob_Far_Distance_",+        "_Blob_Fade_Length_",+        "_Blob_Pulse_",+        "_Blob_Fade_",+        "_Blob_Texture_",+        "_Blob_Position_2_",+        "_Blob_Near_Size_2_",+        "_Blob_Pulse_2_",+        "_Blob_Fade_2_",+        "_Rate_",+        "_Highlight_Color_",+        "_Highlight_Width_",+        "_Highlight_Transform_",+        "_Highlight_",+        "_Iridescence_Intensity_",+        "_Iridescence_Edge_Intensity_",+        "_Angle_",+        "_Fade_Out_",+        "_Reflected_",+        "_Frequency_",+        "_Vertical_Offset_",+        "_Iridescent_Map_",+        "_Use_Global_Left_Index_",+        "_Use_Global_Right_Index_",+        "Global_Left_Index_Tip_Position",+        "Global_Right_Index_Tip_Position"+      ], X = ["_Blob_Texture_", "_Iridescent_Map_"], he = [];+      fc({+        uniformsNames: Q,+        uniformBuffersNames: he,+        samplers: X,+        defines: y,+        maxSimultaneousLights: 4+      }), d.setEffect(M.getEngine().createEffect(ne, {+        attributes: F,+        uniformsNames: Q,+        uniformBuffersNames: he,+        samplers: X,+        defines: $,+        fallbacks: O,+        onCompiled: this.onCompiled,+        onError: this.onError,+        indexParameters: { maxSimultaneousLights: 4 }+      }, N), y, this._materialContext);+    }+    return !d.effect || !d.effect.isReady() ? !1 : (y._renderId = M.getRenderId(), g._wasPreviouslyReady = !0, !0);+  }+  bindForSubMesh(i, d, g) {+    if (!g.materialDefines)+      return;+    const M = g.effect;+    M && (this._activeEffect = M, this.bindOnlyWorldMatrix(i), this._activeEffect.setMatrix("viewProjection", this.getScene().getTransformMatrix()), this._activeEffect.setVector3("cameraPosition", this.getScene().activeCamera?.position ?? Se.ZeroReadOnly), this._activeEffect.setFloat("_Radius_", this.radius), this._activeEffect.setFloat("_Line_Width_", this.lineWidth), this._activeEffect.setFloat("_Absolute_Sizes_", this.absoluteSizes ? 1 : 0), this._activeEffect.setFloat("_Filter_Width_", this._filterWidth), this._activeEffect.setDirectColor4("_Base_Color_", this.baseColor), this._activeEffect.setDirectColor4("_Line_Color_", this.lineColor), this._activeEffect.setFloat("_Radius_Top_Left_", 1), this._activeEffect.setFloat("_Radius_Top_Right_", 1), this._activeEffect.setFloat("_Radius_Bottom_Left_", 1), this._activeEffect.setFloat("_Radius_Bottom_Right_", 1), this._activeEffect.setFloat("_Blob_Intensity_", this.blobIntensity), this._activeEffect.setFloat("_Blob_Near_Size_", this.blobNearSize), this._activeEffect.setFloat("_Blob_Far_Size_", this.blobFarSize), this._activeEffect.setFloat("_Blob_Near_Distance_", this.blobNearDistance), this._activeEffect.setFloat("_Blob_Far_Distance_", this.blobFarDistance), this._activeEffect.setFloat("_Blob_Fade_Length_", this.blobFadeLength), this._activeEffect.setFloat("_Blob_Pulse_", this.blobPulse), this._activeEffect.setFloat("_Blob_Fade_", this.blobFade), this._activeEffect.setTexture("_Blob_Texture_", this._blobTexture), this._activeEffect.setFloat("_Blob_Near_Size_2_", this.blobNearSize2), this._activeEffect.setFloat("_Blob_Pulse_2_", this.blobPulse2), this._activeEffect.setFloat("_Blob_Fade_2_", this.blobFade2), this._activeEffect.setFloat("_Rate_", this._rate), this._activeEffect.setDirectColor4("_Highlight_Color_", this.highlightColor), this._activeEffect.setFloat("_Highlight_Width_", this.highlightWidth), this._activeEffect.setVector4("_Highlight_Transform_", this._highlightTransform), this._activeEffect.setFloat("_Highlight_", this._highlight), this._activeEffect.setFloat("_Iridescence_Intensity_", this.iridescenceIntensity), this._activeEffect.setFloat("_Iridescence_Edge_Intensity_", this.iridescenceEdgeIntensity), this._activeEffect.setFloat("_Angle_", this._angle), this._activeEffect.setFloat("_Fade_Out_", this.fadeOut), this._activeEffect.setFloat("_Reflected_", this._reflected ? 1 : 0), this._activeEffect.setFloat("_Frequency_", this._frequency), this._activeEffect.setFloat("_Vertical_Offset_", this._verticalOffset), this._activeEffect.setTexture("_Iridescent_Map_", this._iridescentMap), this._activeEffect.setFloat("_Use_Global_Left_Index_", 1), this._activeEffect.setFloat("_Use_Global_Right_Index_", 1), this._globalLeftIndexTipPosition4.set(this.globalLeftIndexTipPosition.x, this.globalLeftIndexTipPosition.y, this.globalLeftIndexTipPosition.z, 1), this._activeEffect.setVector4("Global_Left_Index_Tip_Position", this._globalLeftIndexTipPosition4), this._globalRightIndexTipPosition4.set(this.globalRightIndexTipPosition.x, this.globalRightIndexTipPosition.y, this.globalRightIndexTipPosition.z, 1), this._activeEffect.setVector4("Global_Right_Index_Tip_Position", this._globalRightIndexTipPosition4), this._afterBind(d, this._activeEffect, g));+  }+  /**+   * Get the list of animatables in the material.+   * @returns the list of animatables object used in the material+   */+  getAnimatables() {+    return [];+  }+  dispose(i) {+    super.dispose(i), this._blobTexture.dispose(), this._iridescentMap.dispose();+  }+  clone(i) {+    return Eo.Clone(() => new Dr(i, this.getScene()), this);+  }+  serialize() {+    const i = super.serialize();+    return i.customType = "BABYLON.FluentBackplateMaterial", i;+  }+  getClassName() {+    return "FluentBackplateMaterial";+  }+  // Statics+  static Parse(i, d, g) {+    return Eo.Parse(() => new Dr(i.name, d), i, d, g);+  }+}+Dr.BLOB_TEXTURE_URL = "https://assets.babylonjs.com/core/MRTK/mrtk-fluent-backplate-blob.png";+Dr.IM_TEXTURE_URL = "https://assets.babylonjs.com/core/MRTK/mrtk-fluent-backplate-iridescence.png";+q([+  H()+], Dr.prototype, "radius", void 0);+q([+  H()+], Dr.prototype, "lineWidth", void 0);+q([+  H()+], Dr.prototype, "absoluteSizes", void 0);+q([+  H()+], Dr.prototype, "baseColor", void 0);+q([+  H()+], Dr.prototype, "lineColor", void 0);+q([+  H()+], Dr.prototype, "blobIntensity", void 0);+q([+  H()+], Dr.prototype, "blobFarSize", void 0);+q([+  H()+], Dr.prototype, "blobNearDistance", void 0);+q([+  H()+], Dr.prototype, "blobFarDistance", void 0);+q([+  H()+], Dr.prototype, "blobFadeLength", void 0);+q([+  H()+], Dr.prototype, "blobNearSize", void 0);+q([+  H()+], Dr.prototype, "blobPulse", void 0);+q([+  H()+], Dr.prototype, "blobFade", void 0);+q([+  H()+], Dr.prototype, "blobNearSize2", void 0);+q([+  H()+], Dr.prototype, "blobPulse2", void 0);+q([+  H()+], Dr.prototype, "blobFade2", void 0);+q([+  H()+], Dr.prototype, "highlightColor", void 0);+q([+  H()+], Dr.prototype, "highlightWidth", void 0);+q([+  H()+], Dr.prototype, "iridescenceIntensity", void 0);+q([+  H()+], Dr.prototype, "iridescenceEdgeIntensity", void 0);+q([+  H()+], Dr.prototype, "fadeOut", void 0);+q([+  ku()+], Dr.prototype, "globalLeftIndexTipPosition", void 0);+q([+  ku()+], Dr.prototype, "globalRightIndexTipPosition", void 0);+kr("BABYLON.GUI.FluentBackplateMaterial", Dr);+class Dh extends tm {+  /**+   * Rendering ground id of the backplate mesh.+   */+  set renderingGroupId(i) {+    this._model.renderingGroupId = i;+  }+  get renderingGroupId() {+    return this._model.renderingGroupId;+  }+  /**+   * Gets the material used by the backplate+   */+  get material() {+    return this._material;+  }+  /**+   * Gets a boolean indicating if this backplate shares its material with other HolographicBackplates+   */+  get shareMaterials() {+    return this._shareMaterials;+  }+  /**+   * Creates a new holographic backplate+   * @param name defines the control name+   * @param _shareMaterials+   */+  constructor(i, d = !0) {+    super(i), this._shareMaterials = d;+  }+  _getTypeName() {+    return "HolographicBackplate";+  }+  // Mesh association+  _createNode(i) {+    const d = Wi((this.name ?? "HolographicBackplate") + "_CollisionMesh", {+      width: 1,+      height: 1,+      depth: 1+    }, i);+    d.isPickable = !0, d.visibility = 0;+    const g = Lr.GetAssetUrl(Dh.MODEL_BASE_URL);+    return yu.ImportMeshAsync(void 0, g, Dh.MODEL_FILENAME, i).then((y) => {+      const M = y.meshes[1];+      M.name = `${this.name}_frontPlate`, M.isPickable = !1, M.parent = d, this._material && (M.material = this._material), this._model = M;+    }), d;+  }+  _createMaterial(i) {+    this._material = new Dr(this.name + " Material", i.getScene());+  }+  _affectMaterial(i) {+    this._shareMaterials ? this._host._touchSharedMaterials.fluentBackplateMaterial ? this._material = this._host._touchSharedMaterials.fluentBackplateMaterial : (this._createMaterial(i), this._host._touchSharedMaterials.fluentBackplateMaterial = this._material) : this._createMaterial(i);+  }+  /**+   * Releases all associated resources+   */+  dispose() {+    super.dispose(), this.shareMaterials || this._material.dispose(), this._model.dispose();+  }+}+Dh.MODEL_BASE_URL = "https://assets.babylonjs.com/core/MRTK/";+Dh.MODEL_FILENAME = "mrtk-fluent-backplate.glb";+class oF extends Bb {+  _disposeTooltip() {+    this._tooltipFade = null, this._tooltipTextBlock && this._tooltipTextBlock.dispose(), this._tooltipTexture && this._tooltipTexture.dispose(), this._tooltipMesh && this._tooltipMesh.dispose(), this.onPointerEnterObservable.remove(this._tooltipHoverObserver), this.onPointerOutObservable.remove(this._tooltipOutObserver);+  }+  /**+   * Rendering ground id of all the mesh in the button+   */+  set renderingGroupId(i) {+    this._backPlate.renderingGroupId = i, this._textPlate.renderingGroupId = i, this._frontPlate.renderingGroupId = i, this._tooltipMesh && (this._tooltipMesh.renderingGroupId = i);+  }+  get renderingGroupId() {+    return this._backPlate.renderingGroupId;+  }+  /**+   * Text to be displayed on the tooltip shown when hovering on the button. When set to null tooltip is disabled. (Default: null)+   */+  set tooltipText(i) {+    if (!i) {+      this._disposeTooltip();+      return;+    }+    if (!this._tooltipFade) {+      const d = this._backPlate._scene.useRightHandedSystem;+      this._tooltipMesh = sl("", { size: 1 }, this._backPlate._scene);+      const g = sl("", { size: 1, sideOrientation: Mb.DOUBLESIDE }, this._backPlate._scene), y = new xu("", this._backPlate._scene);+      y.diffuseColor = nr.FromHexString("#212121"), g.material = y, g.isPickable = !1, this._tooltipMesh.addChild(g), g.position = Se.Forward(d).scale(0.05), this._tooltipMesh.scaling.y = 1 / 3, this._tooltipMesh.position = Se.Up().scale(0.7).add(Se.Forward(d).scale(-0.15)), this._tooltipMesh.isPickable = !1, this._tooltipMesh.parent = this._backPlate, this._tooltipTexture = go.CreateForMesh(this._tooltipMesh), this._tooltipTextBlock = new zr(), this._tooltipTextBlock.scaleY = 3, this._tooltipTextBlock.color = "white", this._tooltipTextBlock.fontSize = 130, this._tooltipTexture.addControl(this._tooltipTextBlock), this._tooltipFade = new lw(), this._tooltipFade.delay = 500, this._tooltipMesh.addBehavior(this._tooltipFade), this._tooltipHoverObserver = this.onPointerEnterObservable.add(() => {+        this._tooltipFade && this._tooltipFade.fadeIn(!0);+      }), this._tooltipOutObserver = this.onPointerOutObservable.add(() => {+        this._tooltipFade && this._tooltipFade.fadeIn(!1);+      });+    }+    this._tooltipTextBlock && (this._tooltipTextBlock.text = i);+  }+  get tooltipText() {+    return this._tooltipTextBlock ? this._tooltipTextBlock.text : null;+  }+  /**+   * Gets or sets text for the button+   */+  get text() {+    return this._text;+  }+  set text(i) {+    this._text !== i && (this._text = i, this._rebuildContent());+  }+  /**+   * Gets or sets the image url for the button+   */+  get imageUrl() {+    return this._imageUrl;+  }+  set imageUrl(i) {+    this._imageUrl !== i && (this._imageUrl = i, this._rebuildContent());+  }+  /**+   * Gets the back material used by this button+   */+  get backMaterial() {+    return this._backMaterial;+  }+  /**+   * Gets the front material used by this button+   */+  get frontMaterial() {+    return this._frontMaterial;+  }+  /**+   * Gets the plate material used by this button+   */+  get plateMaterial() {+    return this._plateMaterial;+  }+  /**+   * Gets a boolean indicating if this button shares its material with other HolographicButtons+   */+  get shareMaterials() {+    return this._shareMaterials;+  }+  /**+   * Creates a new button+   * @param name defines the control name+   * @param shareMaterials+   */+  constructor(i, d = !0) {+    super(i), this._shareMaterials = !0, this._shareMaterials = d, this.pointerEnterAnimation = () => {+      this.mesh && this._frontPlate.setEnabled(!0);+    }, this.pointerOutAnimation = () => {+      this.mesh && this._frontPlate.setEnabled(!1);+    };+  }+  _getTypeName() {+    return "HolographicButton";+  }+  _rebuildContent() {+    this._disposeFacadeTexture();+    const i = new Gi();+    if (i.isVertical = !0, xb() && document.createElement && this._imageUrl) {+      const d = new Ft();+      d.source = this._imageUrl, d.paddingTop = "40px", d.height = "180px", d.width = "100px", d.paddingBottom = "40px", i.addControl(d);+    }+    if (this._text) {+      const d = new zr();+      d.text = this._text, d.color = "white", d.height = "30px", d.fontSize = 24, i.addControl(d);+    }+    this._frontPlate && (this.content = i);+  }+  // Mesh association+  _createNode(i) {+    return this._backPlate = Wi(this.name + "BackMesh", {+      width: 1,+      height: 1,+      depth: 0.08+    }, i), this._frontPlate = Wi(this.name + "FrontMesh", {+      width: 1,+      height: 1,+      depth: 0.08+    }, i), this._frontPlate.parent = this._backPlate, this._frontPlate.position = Se.Forward(i.useRightHandedSystem).scale(-0.08), this._frontPlate.isPickable = !1, this._frontPlate.setEnabled(!1), this._textPlate = super._createNode(i), this._textPlate.parent = this._backPlate, this._textPlate.position = Se.Forward(i.useRightHandedSystem).scale(-0.08), this._textPlate.isPickable = !1, this._backPlate;+  }+  _applyFacade(i) {+    this._plateMaterial.emissiveTexture = i, this._plateMaterial.opacityTexture = i;+  }+  _createBackMaterial(i) {+    this._backMaterial = new $o(this.name + "Back Material", i.getScene()), this._backMaterial.renderHoverLight = !0, this._pickedPointObserver = this._host.onPickedPointChangedObservable.add((d) => {+      d ? (this._backMaterial.hoverPosition = d, this._backMaterial.hoverColor.a = 1) : this._backMaterial.hoverColor.a = 0;+    });+  }+  _createFrontMaterial(i) {+    this._frontMaterial = new $o(this.name + "Front Material", i.getScene()), this._frontMaterial.innerGlowColorIntensity = 0, this._frontMaterial.alpha = 0.5, this._frontMaterial.renderBorders = !0;+  }+  _createPlateMaterial(i) {+    this._plateMaterial = new xu(this.name + "Plate Material", i.getScene()), this._plateMaterial.specularColor = nr.Black();+  }+  _affectMaterial(i) {+    this._shareMaterials ? (this._host._sharedMaterials.backFluentMaterial ? this._backMaterial = this._host._sharedMaterials.backFluentMaterial : (this._createBackMaterial(i), this._host._sharedMaterials.backFluentMaterial = this._backMaterial), this._host._sharedMaterials.frontFluentMaterial ? this._frontMaterial = this._host._sharedMaterials.frontFluentMaterial : (this._createFrontMaterial(i), this._host._sharedMaterials.frontFluentMaterial = this._frontMaterial)) : (this._createBackMaterial(i), this._createFrontMaterial(i)), this._createPlateMaterial(i), this._backPlate.material = this._backMaterial, this._frontPlate.material = this._frontMaterial, this._textPlate.material = this._plateMaterial, this._rebuildContent();+  }+  /**+   * Releases all associated resources+   */+  dispose() {+    super.dispose(), this._disposeTooltip(), this.shareMaterials || (this._backMaterial.dispose(), this._frontMaterial.dispose(), this._plateMaterial.dispose(), this._pickedPointObserver && (this._host.onPickedPointChangedObservable.remove(this._pickedPointObserver), this._pickedPointObserver = null));+  }+}+const z4 = "fluentButtonPixelShader", iF = `uniform vec3 cameraPosition;varying vec3 vPosition;varying vec3 vNormal;varying vec2 vUV;varying vec3 vTangent;varying vec3 vBinormal;varying vec4 vColor;varying vec4 vExtra1;uniform float _Edge_Width_;uniform vec4 _Edge_Color_;uniform bool _Relative_Width_;uniform float _Proximity_Max_Intensity_;uniform float _Proximity_Far_Distance_;uniform float _Proximity_Near_Radius_;uniform float _Proximity_Anisotropy_;uniform float _Selection_Fuzz_;uniform float _Selected_;uniform float _Selection_Fade_;uniform float _Selection_Fade_Size_;uniform float _Selected_Distance_;uniform float _Selected_Fade_Length_;uniform bool _Blob_Enable_;uniform vec3 _Blob_Position_;uniform float _Blob_Intensity_;uniform float _Blob_Near_Size_;uniform float _Blob_Far_Size_;uniform float _Blob_Near_Distance_;uniform float _Blob_Far_Distance_;uniform float _Blob_Fade_Length_;uniform float _Blob_Inner_Fade_;uniform float _Blob_Pulse_;uniform float _Blob_Fade_;uniform sampler2D _Blob_Texture_;uniform bool _Blob_Enable_2_;uniform vec3 _Blob_Position_2_;uniform float _Blob_Near_Size_2_;uniform float _Blob_Inner_Fade_2_;uniform float _Blob_Pulse_2_;uniform float _Blob_Fade_2_;uniform vec3 _Active_Face_Dir_;uniform vec3 _Active_Face_Up_;uniform bool Enable_Fade;uniform float _Fade_Width_;uniform bool _Smooth_Active_Face_;uniform bool _Show_Frame_;uniform bool _Use_Blob_Texture_;uniform bool Use_Global_Left_Index;uniform bool Use_Global_Right_Index;uniform vec4 Global_Left_Index_Tip_Position;uniform vec4 Global_Right_Index_Tip_Position;uniform vec4 Global_Left_Thumb_Tip_Position;uniform vec4 Global_Right_Thumb_Tip_Position;uniform float Global_Left_Index_Tip_Proximity;uniform float Global_Right_Index_Tip_Proximity;void Holo_Edge_Fragment_B35(+vec4 Edges,+float Edge_Width,+out float NotEdge)+{vec2 c=vec2(min(Edges.r,Edges.g),min(Edges.b,Edges.a));vec2 df=fwidth(c)*Edge_Width;vec2 g=clamp(c/df,0.0,1.0);NotEdge=g.x*g.y;}+void Blob_Fragment_B39(+vec2 UV,+vec3 Blob_Info,+sampler2D Blob_Texture,+out vec4 Blob_Color)+{float k=dot(UV,UV);Blob_Color=Blob_Info.y*texture(Blob_Texture,vec2(vec2(sqrt(k),Blob_Info.x).x,1.0-vec2(sqrt(k),Blob_Info.x).y))*(1.0-clamp(k,0.0,1.0));}+vec2 FilterStep(vec2 Edge,vec2 X)+{vec2 dX=max(fwidth(X),vec2(0.00001,0.00001));return clamp( (X+dX-max(Edge,X-dX))/(dX*2.0),0.0,1.0);}+void Wireframe_Fragment_B59(+vec3 Widths,+vec2 UV,+float Proximity,+vec4 Edge_Color,+out vec4 Wireframe)+{vec2 c=min(UV,vec2(1.0,1.0)-UV);vec2 g=FilterStep(Widths.xy*0.5,c); +Wireframe=(1.0-min(g.x,g.y))*Proximity*Edge_Color;}+void Proximity_B53(+vec3 Proximity_Center,+vec3 Proximity_Center_2,+float Proximity_Max_Intensity,+float Proximity_Near_Radius,+vec3 Position,+vec3 Show_Selection,+vec4 Extra1,+float Dist_To_Face,+float Intensity,+out float Proximity)+{vec2 delta1=Extra1.xy;vec2 delta2=Extra1.zw;float d2=sqrt(min(dot(delta1,delta1),dot(delta2,delta2))+Dist_To_Face*Dist_To_Face);Proximity=Intensity*Proximity_Max_Intensity*(1.0-clamp(d2/Proximity_Near_Radius,0.0,1.0))*(1.0-Show_Selection.x)+Show_Selection.x;}+void To_XYZ_B46(+vec3 Vec3,+out float X,+out float Y,+out float Z)+{X=Vec3.x;Y=Vec3.y;Z=Vec3.z;}+void main()+{float NotEdge_Q35;+#if ENABLE_FADE+Holo_Edge_Fragment_B35(vColor,_Fade_Width_,NotEdge_Q35);+#else+NotEdge_Q35=1.0;+#endif+vec4 Blob_Color_Q39;float k=dot(vUV,vUV);vec2 blobTextureCoord=vec2(vec2(sqrt(k),vTangent.x).x,1.0-vec2(sqrt(k),vTangent.x).y);vec4 blobColor=mix(vec4(1.0,1.0,1.0,1.0)*step(1.0-vTangent.x,clamp(sqrt(k)+0.1,0.0,1.0)),texture(_Blob_Texture_,blobTextureCoord),float(_Use_Blob_Texture_));Blob_Color_Q39=vTangent.y*blobColor*(1.0-clamp(k,0.0,1.0));float Is_Quad_Q24;Is_Quad_Q24=vNormal.z;vec3 Blob_Position_Q41= mix(_Blob_Position_,Global_Left_Index_Tip_Position.xyz,float(Use_Global_Left_Index));vec3 Blob_Position_Q42= mix(_Blob_Position_2_,Global_Right_Index_Tip_Position.xyz,float(Use_Global_Right_Index));float X_Q46;float Y_Q46;float Z_Q46;To_XYZ_B46(vBinormal,X_Q46,Y_Q46,Z_Q46);float Proximity_Q53;Proximity_B53(Blob_Position_Q41,Blob_Position_Q42,_Proximity_Max_Intensity_,_Proximity_Near_Radius_,vPosition,vBinormal,vExtra1,Y_Q46,Z_Q46,Proximity_Q53);vec4 Wireframe_Q59;Wireframe_Fragment_B59(vNormal,vUV,Proximity_Q53,_Edge_Color_,Wireframe_Q59);vec4 Wire_Or_Blob_Q23=mix(Wireframe_Q59,Blob_Color_Q39,Is_Quad_Q24);vec4 Result_Q22;Result_Q22=mix(Wire_Or_Blob_Q23,vec4(0.3,0.3,0.3,0.3),float(_Show_Frame_));vec4 Final_Color_Q37=NotEdge_Q35*Result_Q22;vec4 Out_Color=Final_Color_Q37;float Clip_Threshold=0.0;bool To_sRGB=false;gl_FragColor=Out_Color;}`;+br.ShadersStore[z4] || (br.ShadersStore[z4] = iF);+const D4 = "fluentButtonVertexShader", nF = `uniform mat4 world;uniform mat4 viewProjection;uniform vec3 cameraPosition;attribute vec3 position;attribute vec3 normal;attribute vec2 uv;attribute vec3 tangent;attribute vec4 color;uniform float _Edge_Width_;uniform vec4 _Edge_Color_;uniform float _Proximity_Max_Intensity_;uniform float _Proximity_Far_Distance_;uniform float _Proximity_Near_Radius_;uniform float _Proximity_Anisotropy_;uniform float _Selection_Fuzz_;uniform float _Selected_;uniform float _Selection_Fade_;uniform float _Selection_Fade_Size_;uniform float _Selected_Distance_;uniform float _Selected_Fade_Length_;uniform bool _Blob_Enable_;uniform vec3 _Blob_Position_;uniform float _Blob_Intensity_;uniform float _Blob_Near_Size_;uniform float _Blob_Far_Size_;uniform float _Blob_Near_Distance_;uniform float _Blob_Far_Distance_;uniform float _Blob_Fade_Length_;uniform float _Blob_Inner_Fade_;uniform float _Blob_Pulse_;uniform float _Blob_Fade_;uniform sampler2D _Blob_Texture_;uniform bool _Blob_Enable_2_;uniform vec3 _Blob_Position_2_;uniform float _Blob_Near_Size_2_;uniform float _Blob_Inner_Fade_2_;uniform float _Blob_Pulse_2_;uniform float _Blob_Fade_2_;uniform vec3 _Active_Face_Dir_;uniform vec3 _Active_Face_Up_;uniform bool _Enable_Fade_;uniform float _Fade_Width_;uniform bool _Smooth_Active_Face_;uniform bool _Show_Frame_;uniform bool Use_Global_Left_Index;uniform bool Use_Global_Right_Index;uniform vec4 Global_Left_Index_Tip_Position;uniform vec4 Global_Right_Index_Tip_Position;uniform vec4 Global_Left_Thumb_Tip_Position;uniform vec4 Global_Right_Thumb_Tip_Position;uniform float Global_Left_Index_Tip_Proximity;uniform float Global_Right_Index_Tip_Proximity;varying vec3 vPosition;varying vec3 vNormal;varying vec2 vUV;varying vec3 vTangent;varying vec3 vBinormal;varying vec4 vColor;varying vec4 vExtra1;void Blob_Vertex_B47(+vec3 Position,+vec3 Normal,+vec3 Tangent,+vec3 Bitangent,+vec3 Blob_Position,+float Intensity,+float Blob_Near_Size,+float Blob_Far_Size,+float Blob_Near_Distance,+float Blob_Far_Distance,+vec4 Vx_Color,+vec2 UV,+vec3 Face_Center,+vec2 Face_Size,+vec2 In_UV,+float Blob_Fade_Length,+float Selection_Fade,+float Selection_Fade_Size,+float Inner_Fade,+vec3 Active_Face_Center,+float Blob_Pulse,+float Blob_Fade,+float Blob_Enabled,+out vec3 Out_Position,+out vec2 Out_UV,+out vec3 Blob_Info)+{float blobSize,fadeIn;vec3 Hit_Position;Blob_Info=vec3(0.0,0.0,0.0);float Hit_Distance=dot(Blob_Position-Face_Center,Normal);Hit_Position=Blob_Position-Hit_Distance*Normal;float absD=abs(Hit_Distance);float lerpVal=clamp((absD-Blob_Near_Distance)/(Blob_Far_Distance-Blob_Near_Distance),0.0,1.0);fadeIn=1.0-clamp((absD-Blob_Far_Distance)/Blob_Fade_Length,0.0,1.0);float innerFade=1.0-clamp(-Hit_Distance/Inner_Fade,0.0,1.0);float farClip=clamp(1.0-step(Blob_Far_Distance+Blob_Fade_Length,absD),0.0,1.0);float size=mix(Blob_Near_Size,Blob_Far_Size,lerpVal)*farClip;blobSize=mix(size,Selection_Fade_Size,Selection_Fade)*innerFade*Blob_Enabled;Blob_Info.x=lerpVal*0.5+0.5;Blob_Info.y=fadeIn*Intensity*(1.0-Selection_Fade)*Blob_Fade;Blob_Info.x*=(1.0-Blob_Pulse);vec3 delta=Hit_Position-Face_Center;vec2 blobCenterXY=vec2(dot(delta,Tangent),dot(delta,Bitangent));vec2 quadUVin=2.0*UV-1.0; +vec2 blobXY=blobCenterXY+quadUVin*blobSize;vec2 blobClipped=clamp(blobXY,-Face_Size*0.5,Face_Size*0.5);vec2 blobUV=(blobClipped-blobCenterXY)/max(blobSize,0.0001)*2.0;vec3 blobCorner=Face_Center+blobClipped.x*Tangent+blobClipped.y*Bitangent;Out_Position=mix(Position,blobCorner,Vx_Color.rrr);Out_UV=mix(In_UV,blobUV,Vx_Color.rr);}+vec2 ProjectProximity(+vec3 blobPosition,+vec3 position,+vec3 center,+vec3 dir,+vec3 xdir,+vec3 ydir,+out float vdistance+)+{vec3 delta=blobPosition-position;vec2 xy=vec2(dot(delta,xdir),dot(delta,ydir));vdistance=abs(dot(delta,dir));return xy;}+void Proximity_Vertex_B66(+vec3 Blob_Position,+vec3 Blob_Position_2,+vec3 Active_Face_Center,+vec3 Active_Face_Dir,+vec3 Position,+float Proximity_Far_Distance,+float Relative_Scale,+float Proximity_Anisotropy,+vec3 Up,+out vec4 Extra1,+out float Distance_To_Face,+out float Intensity)+{vec3 Active_Face_Dir_X=normalize(cross(Active_Face_Dir,Up));vec3 Active_Face_Dir_Y=cross(Active_Face_Dir,Active_Face_Dir_X);float distz1,distz2;Extra1.xy=ProjectProximity(Blob_Position,Position,Active_Face_Center,Active_Face_Dir,Active_Face_Dir_X*Proximity_Anisotropy,Active_Face_Dir_Y,distz1)/Relative_Scale;Extra1.zw=ProjectProximity(Blob_Position_2,Position,Active_Face_Center,Active_Face_Dir,Active_Face_Dir_X*Proximity_Anisotropy,Active_Face_Dir_Y,distz2)/Relative_Scale;Distance_To_Face=dot(Active_Face_Dir,Position-Active_Face_Center);Intensity=1.0-clamp(min(distz1,distz2)/Proximity_Far_Distance,0.0,1.0);}+void Holo_Edge_Vertex_B44(+vec3 Incident,+vec3 Normal,+vec2 UV,+vec3 Tangent,+vec3 Bitangent,+bool Smooth_Active_Face,+float Active,+out vec4 Holo_Edges)+{float NdotI=dot(Incident,Normal);vec2 flip=(UV-vec2(0.5,0.5));float udot=dot(Incident,Tangent)*flip.x*NdotI;float uval=1.0-float(udot>0.0);float vdot=-dot(Incident,Bitangent)*flip.y*NdotI;float vval=1.0-float(vdot>0.0);float Smooth_And_Active=step(1.0,float(Smooth_Active_Face && Active>0.0));uval=mix(uval,max(1.0,uval),Smooth_And_Active); +vval=mix(vval,max(1.0,vval),Smooth_And_Active);Holo_Edges=vec4(1.0,1.0,1.0,1.0)-vec4(uval*UV.x,uval*(1.0-UV.x),vval*UV.y,vval*(1.0-UV.y));}+void Object_To_World_Pos_B13(+vec3 Pos_Object,+out vec3 Pos_World)+{Pos_World=(world*vec4(Pos_Object,1.0)).xyz;}+void Choose_Blob_B38(+vec4 Vx_Color,+vec3 Position1,+vec3 Position2,+bool Blob_Enable_1,+bool Blob_Enable_2,+float Near_Size_1,+float Near_Size_2,+float Blob_Inner_Fade_1,+float Blob_Inner_Fade_2,+float Blob_Pulse_1,+float Blob_Pulse_2,+float Blob_Fade_1,+float Blob_Fade_2,+out vec3 Position,+out float Near_Size,+out float Inner_Fade,+out float Blob_Enable,+out float Fade,+out float Pulse)+{Position=Position1*(1.0-Vx_Color.g)+Vx_Color.g*Position2;float b1=float(Blob_Enable_1);float b2=float(Blob_Enable_2);Blob_Enable=b1+(b2-b1)*Vx_Color.g;Pulse=Blob_Pulse_1*(1.0-Vx_Color.g)+Vx_Color.g*Blob_Pulse_2;Fade=Blob_Fade_1*(1.0-Vx_Color.g)+Vx_Color.g*Blob_Fade_2;Near_Size=Near_Size_1*(1.0-Vx_Color.g)+Vx_Color.g*Near_Size_2;Inner_Fade=Blob_Inner_Fade_1*(1.0-Vx_Color.g)+Vx_Color.g*Blob_Inner_Fade_2;}+void Wireframe_Vertex_B51(+vec3 Position,+vec3 Normal,+vec3 Tangent,+vec3 Bitangent,+float Edge_Width,+vec2 Face_Size,+out vec3 Wire_Vx_Pos,+out vec2 UV,+out vec2 Widths)+{Widths.xy=Edge_Width/Face_Size;float x=dot(Position,Tangent);float y=dot(Position,Bitangent);float dx=0.5-abs(x);float newx=(0.5-dx*Widths.x*2.0)*sign(x);float dy=0.5-abs(y);float newy=(0.5-dy*Widths.y*2.0)*sign(y);Wire_Vx_Pos=Normal*0.5+newx*Tangent+newy*Bitangent;UV.x=dot(Wire_Vx_Pos,Tangent)+0.5;UV.y=dot(Wire_Vx_Pos,Bitangent)+0.5;}+vec2 ramp2(vec2 start,vec2 end,vec2 x)+{return clamp((x-start)/(end-start),vec2(0.0,0.0),vec2(1.0,1.0));}+float computeSelection(+vec3 blobPosition,+vec3 normal,+vec3 tangent,+vec3 bitangent,+vec3 faceCenter,+vec2 faceSize,+float selectionFuzz,+float farDistance,+float fadeLength+)+{vec3 delta=blobPosition-faceCenter;float absD=abs(dot(delta,normal));float fadeIn=1.0-clamp((absD-farDistance)/fadeLength,0.0,1.0);vec2 blobCenterXY=vec2(dot(delta,tangent),dot(delta,bitangent));vec2 innerFace=faceSize*(1.0-selectionFuzz)*0.5;vec2 selectPulse=ramp2(-faceSize*0.5,-innerFace,blobCenterXY)-ramp2(innerFace,faceSize*0.5,blobCenterXY);return selectPulse.x*selectPulse.y*fadeIn;}+void Selection_Vertex_B48(+vec3 Blob_Position,+vec3 Blob_Position_2,+vec3 Face_Center,+vec2 Face_Size,+vec3 Normal,+vec3 Tangent,+vec3 Bitangent,+float Selection_Fuzz,+float Selected,+float Far_Distance,+float Fade_Length,+vec3 Active_Face_Dir,+out float Show_Selection)+{float select1=computeSelection(Blob_Position,Normal,Tangent,Bitangent,Face_Center,Face_Size,Selection_Fuzz,Far_Distance,Fade_Length);float select2=computeSelection(Blob_Position_2,Normal,Tangent,Bitangent,Face_Center,Face_Size,Selection_Fuzz,Far_Distance,Fade_Length);float Active=max(0.0,dot(Active_Face_Dir,Normal));Show_Selection=mix(max(select1,select2),1.0,Selected)*Active;}+void Proximity_Visibility_B54(+float Selection,+vec3 Proximity_Center,+vec3 Proximity_Center_2,+float Input_Width,+float Proximity_Far_Distance,+float Proximity_Radius,+vec3 Active_Face_Center,+vec3 Active_Face_Dir,+out float Width)+{vec3 boxEdges=(world*vec4(vec3(0.5,0.5,0.5),0.0)).xyz;float boxMaxSize=length(boxEdges);float d1=dot(Proximity_Center-Active_Face_Center,Active_Face_Dir);vec3 blob1=Proximity_Center-d1*Active_Face_Dir;float d2=dot(Proximity_Center_2-Active_Face_Center,Active_Face_Dir);vec3 blob2=Proximity_Center_2-d2*Active_Face_Dir;vec3 delta1=blob1-Active_Face_Center;vec3 delta2=blob2-Active_Face_Center;float dist1=dot(delta1,delta1);float dist2=dot(delta2,delta2);float nearestProxDist=sqrt(min(dist1,dist2));Width=Input_Width*(1.0-step(boxMaxSize+Proximity_Radius,nearestProxDist))*(1.0-step(Proximity_Far_Distance,min(d1,d2))*(1.0-step(0.0001,Selection)));}+void Object_To_World_Dir_B67(+vec3 Dir_Object,+out vec3 Dir_World)+{Dir_World=(world*vec4(Dir_Object,0.0)).xyz;}+void main()+{vec3 Active_Face_Center_Q49;Active_Face_Center_Q49=(world*vec4(_Active_Face_Dir_*0.5,1.0)).xyz;vec3 Blob_Position_Q41= mix(_Blob_Position_,Global_Left_Index_Tip_Position.xyz,float(Use_Global_Left_Index));vec3 Blob_Position_Q42= mix(_Blob_Position_2_,Global_Right_Index_Tip_Position.xyz,float(Use_Global_Right_Index));vec3 Active_Face_Dir_Q64=normalize((world*vec4(_Active_Face_Dir_,0.0)).xyz);float Relative_Scale_Q57;+#if RELATIVE_WIDTH+Relative_Scale_Q57=length((world*vec4(vec3(0,1,0),0.0)).xyz);+#else+Relative_Scale_Q57=1.0;+#endif+vec3 Tangent_World_Q30;Tangent_World_Q30=(world*vec4(tangent,0.0)).xyz;vec3 Binormal_World_Q31;Binormal_World_Q31=(world*vec4((cross(normal,tangent)),0.0)).xyz;vec3 Normal_World_Q60;Normal_World_Q60=(world*vec4(normal,0.0)).xyz;vec3 Result_Q18=0.5*normal;vec3 Dir_World_Q67;Object_To_World_Dir_B67(_Active_Face_Up_,Dir_World_Q67);float Product_Q56=_Edge_Width_*Relative_Scale_Q57;vec3 Normal_World_N_Q29=normalize(Normal_World_Q60);vec3 Tangent_World_N_Q28=normalize(Tangent_World_Q30);vec3 Binormal_World_N_Q32=normalize(Binormal_World_Q31);vec3 Position_Q38;float Near_Size_Q38;float Inner_Fade_Q38;float Blob_Enable_Q38;float Fade_Q38;float Pulse_Q38;Choose_Blob_B38(color,Blob_Position_Q41,Blob_Position_Q42,_Blob_Enable_,_Blob_Enable_2_,_Blob_Near_Size_,_Blob_Near_Size_2_,_Blob_Inner_Fade_,_Blob_Inner_Fade_2_,_Blob_Pulse_,_Blob_Pulse_2_,_Blob_Fade_,_Blob_Fade_2_,Position_Q38,Near_Size_Q38,Inner_Fade_Q38,Blob_Enable_Q38,Fade_Q38,Pulse_Q38);vec3 Face_Center_Q33;Face_Center_Q33=(world*vec4(Result_Q18,1.0)).xyz;vec2 Face_Size_Q50=vec2(length(Tangent_World_Q30),length(Binormal_World_Q31));float Show_Selection_Q48;Selection_Vertex_B48(Blob_Position_Q41,Blob_Position_Q42,Face_Center_Q33,Face_Size_Q50,Normal_World_N_Q29,Tangent_World_N_Q28,Binormal_World_N_Q32,_Selection_Fuzz_,_Selected_,_Selected_Distance_,_Selected_Fade_Length_,Active_Face_Dir_Q64,Show_Selection_Q48);vec3 Normalized_Q72=normalize(Dir_World_Q67);float Active_Q34=max(0.0,dot(Active_Face_Dir_Q64,Normal_World_N_Q29));float Width_Q54;Proximity_Visibility_B54(Show_Selection_Q48,Blob_Position_Q41,Blob_Position_Q42,Product_Q56,_Proximity_Far_Distance_,_Proximity_Near_Radius_,Active_Face_Center_Q49,Active_Face_Dir_Q64,Width_Q54);vec3 Wire_Vx_Pos_Q51;vec2 UV_Q51;vec2 Widths_Q51;Wireframe_Vertex_B51(position,normal,tangent,(cross(normal,tangent)),Width_Q54,Face_Size_Q50,Wire_Vx_Pos_Q51,UV_Q51,Widths_Q51);vec3 Vec3_Q27=vec3(Widths_Q51.x,Widths_Q51.y,color.r);vec3 Pos_World_Q13;Object_To_World_Pos_B13(Wire_Vx_Pos_Q51,Pos_World_Q13);vec3 Incident_Q36=normalize(Pos_World_Q13-cameraPosition);vec3 Out_Position_Q47;vec2 Out_UV_Q47;vec3 Blob_Info_Q47;Blob_Vertex_B47(Pos_World_Q13,Normal_World_N_Q29,Tangent_World_N_Q28,Binormal_World_N_Q32,Position_Q38,_Blob_Intensity_,Near_Size_Q38,_Blob_Far_Size_,_Blob_Near_Distance_,_Blob_Far_Distance_,color,uv,Face_Center_Q33,Face_Size_Q50,UV_Q51,_Blob_Fade_Length_,_Selection_Fade_,_Selection_Fade_Size_,Inner_Fade_Q38,Active_Face_Center_Q49,Pulse_Q38,Fade_Q38,Blob_Enable_Q38,Out_Position_Q47,Out_UV_Q47,Blob_Info_Q47);vec4 Extra1_Q66;float Distance_To_Face_Q66;float Intensity_Q66;Proximity_Vertex_B66(Blob_Position_Q41,Blob_Position_Q42,Active_Face_Center_Q49,Active_Face_Dir_Q64,Pos_World_Q13,_Proximity_Far_Distance_,Relative_Scale_Q57,_Proximity_Anisotropy_,Normalized_Q72,Extra1_Q66,Distance_To_Face_Q66,Intensity_Q66);vec4 Holo_Edges_Q44;Holo_Edge_Vertex_B44(Incident_Q36,Normal_World_N_Q29,uv,Tangent_World_Q30,Binormal_World_Q31,_Smooth_Active_Face_,Active_Q34,Holo_Edges_Q44);vec3 Vec3_Q19=vec3(Show_Selection_Q48,Distance_To_Face_Q66,Intensity_Q66);vec3 Position=Out_Position_Q47;vec2 UV=Out_UV_Q47;vec3 Tangent=Blob_Info_Q47;vec3 Binormal=Vec3_Q19;vec3 Normal=Vec3_Q27;vec4 Extra1=Extra1_Q66;vec4 Color=Holo_Edges_Q44;gl_Position=viewProjection*vec4(Position,1);vPosition=Position;vNormal=Normal;vUV=UV;vTangent=Tangent;vBinormal=Binormal;vColor=Color;vExtra1=Extra1;}`;+br.ShadersStore[D4] || (br.ShadersStore[D4] = nF);+class aF extends hc {+  constructor() {+    super(), this.RELATIVE_WIDTH = !0, this.ENABLE_FADE = !0, this._needNormals = !0, this._needUVs = !0, this.rebuild();+  }+}+class sr extends uc {+  constructor(i, d) {+    super(i, d), this.edgeWidth = 0.04, this.edgeColor = new Gr(0.592157, 0.592157, 0.592157, 1), this.proximityMaxIntensity = 0.45, this.proximityFarDistance = 0.16, this.proximityNearRadius = 1.5, this.proximityAnisotropy = 1, this.selectionFuzz = 0.5, this.selected = 0, this.selectionFade = 0, this.selectionFadeSize = 0.3, this.selectedDistance = 0.08, this.selectedFadeLength = 0.08, this.blobIntensity = 0.5, this.blobFarSize = 0.05, this.blobNearDistance = 0, this.blobFarDistance = 0.08, this.blobFadeLength = 0.08, this.leftBlobEnable = !0, this.leftBlobNearSize = 0.025, this.leftBlobPulse = 0, this.leftBlobFade = 1, this.leftBlobInnerFade = 0.01, this.rightBlobEnable = !0, this.rightBlobNearSize = 0.025, this.rightBlobPulse = 0, this.rightBlobFade = 1, this.rightBlobInnerFade = 0.01, this.activeFaceDir = new Se(0, 0, -1), this.activeFaceUp = new Se(0, 1, 0), this.enableFade = !0, this.fadeWidth = 1.5, this.smoothActiveFace = !0, this.showFrame = !1, this.useBlobTexture = !0, this.globalLeftIndexTipPosition = Se.Zero(), this.globalRightIndexTipPosition = Se.Zero(), this.alphaMode = Is.ALPHA_ADD, this.disableDepthWrite = !0, this.backFaceCulling = !1;+    const g = Lr.GetAssetUrl(sr.BLOB_TEXTURE_URL);+    this._blobTexture = new Wr(g, this.getScene(), !0, !1, Wr.NEAREST_SAMPLINGMODE);+  }+  needAlphaBlending() {+    return !0;+  }+  needAlphaTesting() {+    return !0;+  }+  getAlphaTestTexture() {+    return null;+  }+  // Methods+  isReadyForSubMesh(i, d) {+    const g = d._drawWrapper;+    if (this.isFrozen && g.effect && g._wasPreviouslyReady)+      return !0;+    d.materialDefines || (d.materialDefines = new aF());+    const y = d.materialDefines, M = this.getScene();+    if (!this._blobTexture.isReady())+      return !1;+    if (this._isReadyForSubMesh(d))+      return !0;+    const N = M.getEngine();+    if (vd(i, y, !0, !1), y.isDirty) {+      y.markAsProcessed(), M.resetCachedMaterial();+      const O = new _d();+      y.FOG && O.addFallback(1, "FOG"), wd(y, O), y.IMAGEPROCESSINGPOSTPROCESS = M.imageProcessingConfiguration.applyByPostProcess;+      const F = [Yt.PositionKind];+      y.NORMAL && F.push(Yt.NormalKind), y.UV1 && F.push(Yt.UVKind), y.UV2 && F.push(Yt.UV2Kind), y.VERTEXCOLOR && F.push(Yt.ColorKind), y.TANGENT && F.push(Yt.TangentKind), yd(F, y);+      const ne = "fluentButton", $ = y.toString(), Q = [+        "world",+        "viewProjection",+        "cameraPosition",+        "_Edge_Width_",+        "_Edge_Color_",+        "_Relative_Width_",+        "_Proximity_Max_Intensity_",+        "_Proximity_Far_Distance_",+        "_Proximity_Near_Radius_",+        "_Proximity_Anisotropy_",+        "_Selection_Fuzz_",+        "_Selected_",+        "_Selection_Fade_",+        "_Selection_Fade_Size_",+        "_Selected_Distance_",+        "_Selected_Fade_Length_",+        "_Blob_Enable_",+        "_Blob_Position_",+        "_Blob_Intensity_",+        "_Blob_Near_Size_",+        "_Blob_Far_Size_",+        "_Blob_Near_Distance_",+        "_Blob_Far_Distance_",+        "_Blob_Fade_Length_",+        "_Blob_Inner_Fade_",+        "_Blob_Pulse_",+        "_Blob_Fade_",+        "_Blob_Texture_",+        "_Blob_Enable_2_",+        "_Blob_Position_2_",+        "_Blob_Near_Size_2_",+        "_Blob_Inner_Fade_2_",+        "_Blob_Pulse_2_",+        "_Blob_Fade_2_",+        "_Active_Face_Dir_",+        "_Active_Face_Up_",+        "_Enable_Fade_",+        "_Fade_Width_",+        "_Smooth_Active_Face_",+        "_Show_Frame_",+        "_Use_Blob_Texture_",+        "Use_Global_Left_Index",+        "Use_Global_Right_Index",+        "Global_Left_Index_Tip_Position",+        "Global_Right_Index_Tip_Position",+        "Global_Left_Thumb_Tip_Position",+        "Global_Right_Thumb_Tip_Position",+        "Global_Left_Index_Tip_Proximity",+        "Global_Right_Index_Tip_Proximity"+      ], X = ["_Blob_Texture_"], he = [];+      fc({+        uniformsNames: Q,+        uniformBuffersNames: he,+        samplers: X,+        defines: y,+        maxSimultaneousLights: 4+      }), d.setEffect(M.getEngine().createEffect(ne, {+        attributes: F,+        uniformsNames: Q,+        uniformBuffersNames: he,+        samplers: X,+        defines: $,+        fallbacks: O,+        onCompiled: this.onCompiled,+        onError: this.onError,+        indexParameters: { maxSimultaneousLights: 4 }+      }, N), y, this._materialContext);+    }+    return !d.effect || !d.effect.isReady() ? !1 : (y._renderId = M.getRenderId(), g._wasPreviouslyReady = !0, !0);+  }+  bindForSubMesh(i, d, g) {+    const y = this.getScene();+    if (!g.materialDefines)+      return;+    const N = g.effect;+    N && (this._activeEffect = N, this.bindOnlyWorldMatrix(i), this._activeEffect.setMatrix("viewProjection", y.getTransformMatrix()), this._activeEffect.setVector3("cameraPosition", y.activeCamera.position), this._activeEffect.setTexture("_Blob_Texture_", this._blobTexture), this._activeEffect.setFloat("_Edge_Width_", this.edgeWidth), this._activeEffect.setColor4("_Edge_Color_", new nr(this.edgeColor.r, this.edgeColor.g, this.edgeColor.b), this.edgeColor.a), this._activeEffect.setFloat("_Proximity_Max_Intensity_", this.proximityMaxIntensity), this._activeEffect.setFloat("_Proximity_Far_Distance_", this.proximityFarDistance), this._activeEffect.setFloat("_Proximity_Near_Radius_", this.proximityNearRadius), this._activeEffect.setFloat("_Proximity_Anisotropy_", this.proximityAnisotropy), this._activeEffect.setFloat("_Selection_Fuzz_", this.selectionFuzz), this._activeEffect.setFloat("_Selected_", this.selected), this._activeEffect.setFloat("_Selection_Fade_", this.selectionFade), this._activeEffect.setFloat("_Selection_Fade_Size_", this.selectionFadeSize), this._activeEffect.setFloat("_Selected_Distance_", this.selectedDistance), this._activeEffect.setFloat("_Selected_Fade_Length_", this.selectedFadeLength), this._activeEffect.setFloat("_Blob_Enable_", this.leftBlobEnable ? 1 : 0), this._activeEffect.setFloat("_Blob_Intensity_", this.blobIntensity), this._activeEffect.setFloat("_Blob_Near_Size_", this.leftBlobNearSize), this._activeEffect.setFloat("_Blob_Far_Size_", this.blobFarSize), this._activeEffect.setFloat("_Blob_Near_Distance_", this.blobNearDistance), this._activeEffect.setFloat("_Blob_Far_Distance_", this.blobFarDistance), this._activeEffect.setFloat("_Blob_Fade_Length_", this.blobFadeLength), this._activeEffect.setFloat("_Blob_Inner_Fade_", this.leftBlobInnerFade), this._activeEffect.setFloat("_Blob_Pulse_", this.leftBlobPulse), this._activeEffect.setFloat("_Blob_Fade_", this.leftBlobFade), this._activeEffect.setFloat("_Blob_Enable_2_", this.rightBlobEnable ? 1 : 0), this._activeEffect.setFloat("_Blob_Near_Size_2_", this.rightBlobNearSize), this._activeEffect.setFloat("_Blob_Inner_Fade_2_", this.rightBlobInnerFade), this._activeEffect.setFloat("_Blob_Pulse_2_", this.rightBlobPulse), this._activeEffect.setFloat("_Blob_Fade_2_", this.rightBlobFade), this._activeEffect.setVector3("_Active_Face_Dir_", this.activeFaceDir), this._activeEffect.setVector3("_Active_Face_Up_", this.activeFaceUp), this._activeEffect.setFloat("_Fade_Width_", this.fadeWidth), this._activeEffect.setFloat("_Smooth_Active_Face_", this.smoothActiveFace ? 1 : 0), this._activeEffect.setFloat("_Show_Frame_", this.showFrame ? 1 : 0), this._activeEffect.setFloat("_Use_Blob_Texture_", this.useBlobTexture ? 1 : 0), this._activeEffect.setFloat("Use_Global_Left_Index", 1), this._activeEffect.setFloat("Use_Global_Right_Index", 1), this._activeEffect.setVector4("Global_Left_Index_Tip_Position", new fi(this.globalLeftIndexTipPosition.x, this.globalLeftIndexTipPosition.y, this.globalLeftIndexTipPosition.z, 1)), this._activeEffect.setVector4("Global_Right_Index_Tip_Position", new fi(this.globalRightIndexTipPosition.x, this.globalRightIndexTipPosition.y, this.globalRightIndexTipPosition.z, 1)), this._afterBind(d, this._activeEffect, g));+  }+  /**+   * Get the list of animatables in the material.+   * @returns the list of animatables object used in the material+   */+  getAnimatables() {+    return [];+  }+  dispose(i) {+    super.dispose(i);+  }+  clone(i) {+    return Eo.Clone(() => new sr(i, this.getScene()), this);+  }+  serialize() {+    const i = super.serialize();+    return i.customType = "BABYLON.FluentButtonMaterial", i;+  }+  getClassName() {+    return "FluentButtonMaterial";+  }+  // Statics+  static Parse(i, d, g) {+    return Eo.Parse(() => new sr(i.name, d), i, d, g);+  }+}+sr.BLOB_TEXTURE_URL = "https://assets.babylonjs.com/core/MRTK/mrtk-fluent-button-blob.png";+q([+  H()+], sr.prototype, "edgeWidth", void 0);+q([+  rS()+], sr.prototype, "edgeColor", void 0);+q([+  H()+], sr.prototype, "proximityMaxIntensity", void 0);+q([+  H()+], sr.prototype, "proximityFarDistance", void 0);+q([+  H()+], sr.prototype, "proximityNearRadius", void 0);+q([+  H()+], sr.prototype, "proximityAnisotropy", void 0);+q([+  H()+], sr.prototype, "selectionFuzz", void 0);+q([+  H()+], sr.prototype, "selected", void 0);+q([+  H()+], sr.prototype, "selectionFade", void 0);+q([+  H()+], sr.prototype, "selectionFadeSize", void 0);+q([+  H()+], sr.prototype, "selectedDistance", void 0);+q([+  H()+], sr.prototype, "selectedFadeLength", void 0);+q([+  H()+], sr.prototype, "blobIntensity", void 0);+q([+  H()+], sr.prototype, "blobFarSize", void 0);+q([+  H()+], sr.prototype, "blobNearDistance", void 0);+q([+  H()+], sr.prototype, "blobFarDistance", void 0);+q([+  H()+], sr.prototype, "blobFadeLength", void 0);+q([+  H()+], sr.prototype, "leftBlobEnable", void 0);+q([+  H()+], sr.prototype, "leftBlobNearSize", void 0);+q([+  H()+], sr.prototype, "leftBlobPulse", void 0);+q([+  H()+], sr.prototype, "leftBlobFade", void 0);+q([+  H()+], sr.prototype, "leftBlobInnerFade", void 0);+q([+  H()+], sr.prototype, "rightBlobEnable", void 0);+q([+  H()+], sr.prototype, "rightBlobNearSize", void 0);+q([+  H()+], sr.prototype, "rightBlobPulse", void 0);+q([+  H()+], sr.prototype, "rightBlobFade", void 0);+q([+  H()+], sr.prototype, "rightBlobInnerFade", void 0);+q([+  ku()+], sr.prototype, "activeFaceDir", void 0);+q([+  ku()+], sr.prototype, "activeFaceUp", void 0);+q([+  H()+], sr.prototype, "enableFade", void 0);+q([+  H()+], sr.prototype, "fadeWidth", void 0);+q([+  H()+], sr.prototype, "smoothActiveFace", void 0);+q([+  H()+], sr.prototype, "showFrame", void 0);+q([+  H()+], sr.prototype, "useBlobTexture", void 0);+q([+  ku()+], sr.prototype, "globalLeftIndexTipPosition", void 0);+q([+  ku()+], sr.prototype, "globalRightIndexTipPosition", void 0);+kr("BABYLON.GUI.FluentButtonMaterial", sr);+class Nb extends Bb {+  /**+   * Creates a new touchable button+   * @param name defines the control name+   * @param collisionMesh mesh to track collisions with+   */+  constructor(i, d) {+    super(i), this._isNearPressed = !1, this._interactionSurfaceHeight = 0, this._isToggleButton = !1, this._toggleState = !1, this._toggleButtonCallback = () => {+      this._onToggle(!this._toggleState);+    }, this.onToggleObservable = new qt(), this.collidableFrontDirection = Se.Zero(), d && (this.collisionMesh = d);+  }+  /**+   * Whether the current interaction is caused by near interaction or not+   */+  get isActiveNearInteraction() {+    return this._isNearPressed;+  }+  /**+   * Sets the front-facing direction of the button. Pass in Vector3.Zero to allow interactions from any direction+   * @param frontWorldDir the forward direction of the button+   */+  set collidableFrontDirection(i) {+    if (this._collidableFrontDirection = i.normalize(), this._collisionMesh) {+      const d = Jr.Matrix[0];+      d.copyFrom(this._collisionMesh.getWorldMatrix()), d.invert(), Se.TransformNormalToRef(this._collidableFrontDirection, d, this._collidableFrontDirection), this._collidableFrontDirection.normalize();+    }+  }+  /**+   * Returns the front-facing direction of the button, or Vector3.Zero if there is no 'front'+   */+  get collidableFrontDirection() {+    if (this._collisionMesh) {+      const i = Jr.Vector3[0];+      return Se.TransformNormalToRef(this._collidableFrontDirection, this._collisionMesh.getWorldMatrix(), i), i.normalize();+    }+    return this._collidableFrontDirection;+  }+  /**+   * Sets the mesh used for testing input collision+   * @param collisionMesh the new collision mesh for the button+   */+  set collisionMesh(i) {+    if (this._collisionMesh) {+      this._collisionMesh.isNearPickable = !1, this._collisionMesh.reservedDataStore?.GUI3D && (this._collisionMesh.reservedDataStore.GUI3D = {});+      const g = this._collisionMesh.getChildMeshes();+      for (const y of g)+        y.isNearPickable = !1, y.reservedDataStore?.GUI3D && (y.reservedDataStore.GUI3D = {});+    }+    this._collisionMesh = i, this._injectGUI3DReservedDataStore(this._collisionMesh).control = this, this._collisionMesh.isNearPickable = !0;+    const d = this._collisionMesh.getChildMeshes();+    for (const g of d)+      this._injectGUI3DReservedDataStore(g).control = this, g.isNearPickable = !0;+    this.collidableFrontDirection = i.forward;+  }+  /**+   * Setter for if this TouchButton3D should be treated as a toggle button+   * @param value If this TouchHolographicButton should act like a toggle button+   */+  set isToggleButton(i) {+    i !== this._isToggleButton && (this._isToggleButton = i, i ? this.onPointerUpObservable.add(this._toggleButtonCallback) : (this.onPointerUpObservable.removeCallback(this._toggleButtonCallback), this._toggleState && this._onToggle(!1)));+  }+  get isToggleButton() {+    return this._isToggleButton;+  }+  /**+   * A public entrypoint to set the toggle state of the TouchHolographicButton. Only works if 'isToggleButton' is true+   * @param newState The new state to set the TouchHolographicButton's toggle state to+   */+  set isToggled(i) {+    this._isToggleButton && this._toggleState !== i && this._onToggle(i);+  }+  get isToggled() {+    return this._toggleState;+  }+  _onToggle(i) {+    this._toggleState = i, this.onToggleObservable.notifyObservers(i);+  }+  // Returns true if the collidable is in front of the button, or if the button has no front direction+  _isInteractionInFrontOfButton(i) {+    return this._getInteractionHeight(i, this._collisionMesh.getAbsolutePosition()) > 0;+  }+  /**+   * Get the height of the touchPoint from the collidable part of the button+   * @param touchPoint the point to compare to the button, in absolute position+   * @returns the depth of the touch point into the front of the button+   */+  getPressDepth(i) {+    if (!this._isNearPressed)+      return 0;+    const d = this._getInteractionHeight(i, this._collisionMesh.getAbsolutePosition());+    return this._interactionSurfaceHeight - d;+  }+  // Returns true if the collidable is in front of the button, or if the button has no front direction+  _getInteractionHeight(i, d) {+    const g = this.collidableFrontDirection;+    if (g.length() === 0)+      return Se.Distance(i, d);+    const y = Se.Dot(d, g);+    return Se.Dot(i, g) - y;+  }+  /**+   * @internal+   */+  _generatePointerEventType(i, d, g) {+    if (i === Ir.POINTERDOWN || i === Ir.POINTERMOVE)+      if (this._isInteractionInFrontOfButton(d))+        this._isNearPressed = !0, this._interactionSurfaceHeight = this._getInteractionHeight(d, this._collisionMesh.getAbsolutePosition());+      else+        return Ir.POINTERMOVE;+    if (i === Ir.POINTERUP) {+      if (g == 0)+        return Ir.POINTERMOVE;+      this._isNearPressed = !1;+    }+    return i;+  }+  _getTypeName() {+    return "TouchButton3D";+  }+  // Mesh association+  _createNode(i) {+    return super._createNode(i);+  }+  /**+   * Releases all associated resources+   */+  dispose() {+    super.dispose(), this.onPointerUpObservable.removeCallback(this._toggleButtonCallback), this.onToggleObservable.clear(), this._collisionMesh && this._collisionMesh.dispose();+  }+}+let Th = class aw extends Nb {+  _disposeTooltip() {+    this._tooltipFade = null, this._tooltipTextBlock && this._tooltipTextBlock.dispose(), this._tooltipTexture && this._tooltipTexture.dispose(), this._tooltipMesh && this._tooltipMesh.dispose(), this.onPointerEnterObservable.remove(this._tooltipHoverObserver), this.onPointerOutObservable.remove(this._tooltipOutObserver);+  }+  /**+   * Rendering ground id of all the mesh in the button+   */+  set renderingGroupId(i) {+    this._backPlate.renderingGroupId = i, this._textPlate.renderingGroupId = i, this._frontPlate.renderingGroupId = i, this._tooltipMesh && (this._tooltipMesh.renderingGroupId = i);+  }+  get renderingGroupId() {+    return this._backPlate.renderingGroupId;+  }+  /**+   * Gets the mesh used to render this control+   */+  get mesh() {+    return this._backPlate;+  }+  /**+   * Text to be displayed on the tooltip shown when hovering on the button. When set to null tooltip is disabled. (Default: null)+   */+  set tooltipText(i) {+    if (!i) {+      this._disposeTooltip();+      return;+    }+    if (!this._tooltipFade) {+      const d = this._backPlate._scene.useRightHandedSystem;+      this._tooltipMesh = sl("", { size: 1 }, this._backPlate._scene);+      const g = sl("", { size: 1, sideOrientation: Mb.DOUBLESIDE }, this._backPlate._scene), y = new xu("", this._backPlate._scene);+      y.diffuseColor = nr.FromHexString("#212121"), g.material = y, g.isPickable = !1, this._tooltipMesh.addChild(g), g.position = Se.Forward(d).scale(0.05), this._tooltipMesh.scaling.y = 1 / 3, this._tooltipMesh.position = Se.Up().scale(0.7).add(Se.Forward(d).scale(-0.15)), this._tooltipMesh.isPickable = !1, this._tooltipMesh.parent = this._backPlate, this._tooltipTexture = go.CreateForMesh(this._tooltipMesh), this._tooltipTextBlock = new zr(), this._tooltipTextBlock.scaleY = 3, this._tooltipTextBlock.color = "white", this._tooltipTextBlock.fontSize = 130, this._tooltipTexture.addControl(this._tooltipTextBlock), this._tooltipFade = new lw(), this._tooltipFade.delay = 500, this._tooltipMesh.addBehavior(this._tooltipFade), this._tooltipHoverObserver = this.onPointerEnterObservable.add(() => {+        this._tooltipFade && this._tooltipFade.fadeIn(!0);+      }), this._tooltipOutObserver = this.onPointerOutObservable.add(() => {+        this._tooltipFade && this._tooltipFade.fadeIn(!1);+      });+    }+    this._tooltipTextBlock && (this._tooltipTextBlock.text = i);+  }+  get tooltipText() {+    return this._tooltipTextBlock ? this._tooltipTextBlock.text : null;+  }+  /**+   * Gets or sets text for the button+   */+  get text() {+    return this._text;+  }+  set text(i) {+    this._text !== i && (this._text = i, this._rebuildContent());+  }+  /**+   * Gets or sets the image url for the button+   */+  get imageUrl() {+    return this._imageUrl;+  }+  set imageUrl(i) {+    this._imageUrl !== i && (this._imageUrl = i, this._rebuildContent());+  }+  /**+   * Gets the back material used by this button+   */+  get backMaterial() {+    return this._backMaterial;+  }+  /**+   * Gets the front material used by this button+   */+  get frontMaterial() {+    return this._frontMaterial;+  }+  /**+   * Gets the plate material used by this button+   */+  get plateMaterial() {+    return this._plateMaterial;+  }+  /**+   * Gets a boolean indicating if this button shares its material with other HolographicButtons+   */+  get shareMaterials() {+    return this._shareMaterials;+  }+  /**+   * Sets whether the backplate is visible or hidden. Hiding the backplate is not recommended without some sort of replacement+   */+  set isBackplateVisible(i) {+    this.mesh && this._backMaterial && (i && !this._isBackplateVisible ? this._backPlate.visibility = 1 : !i && this._isBackplateVisible && (this._backPlate.visibility = 0)), this._isBackplateVisible = i;+  }+  /**+   * Creates a new button+   * @param name defines the control name+   * @param shareMaterials+   */+  constructor(i, d = !0) {+    super(i), this._shareMaterials = !0, this._isBackplateVisible = !0, this._frontPlateDepth = 0.5, this._backPlateDepth = 0.04, this._backplateColor = new nr(0.08, 0.15, 0.55), this._backplateToggledColor = new nr(0.25, 0.4, 0.95), this._shareMaterials = d, this.pointerEnterAnimation = () => {+      this._frontMaterial.leftBlobEnable = !0, this._frontMaterial.rightBlobEnable = !0;+    }, this.pointerOutAnimation = () => {+      this._frontMaterial.leftBlobEnable = !1, this._frontMaterial.rightBlobEnable = !1;+    }, this.pointerDownAnimation = () => {+      this._frontPlate && !this.isActiveNearInteraction && (this._frontPlate.scaling.z = this._frontPlateDepth * 0.2, this._frontPlate.position = Se.Forward(this._frontPlate._scene.useRightHandedSystem).scale((this._frontPlateDepth - 0.2 * this._frontPlateDepth) / 2), this._textPlate.position = Se.Forward(this._textPlate._scene.useRightHandedSystem).scale(-(this._backPlateDepth + 0.2 * this._frontPlateDepth) / 2));+    }, this.pointerUpAnimation = () => {+      this._frontPlate && (this._frontPlate.scaling.z = this._frontPlateDepth, this._frontPlate.position = Se.Forward(this._frontPlate._scene.useRightHandedSystem).scale((this._frontPlateDepth - this._frontPlateDepth) / 2), this._textPlate.position = Se.Forward(this._textPlate._scene.useRightHandedSystem).scale(-(this._backPlateDepth + this._frontPlateDepth) / 2));+    }, this.onPointerMoveObservable.add((g) => {+      if (this._frontPlate && this.isActiveNearInteraction) {+        const y = Se.Zero();+        if (this._backPlate.getWorldMatrix().decompose(y, void 0, void 0)) {+          let M = this._getInteractionHeight(g, this._backPlate.getAbsolutePosition()) / y.z;+          M = ow.Clamp(M - this._backPlateDepth / 2, 0.2 * this._frontPlateDepth, this._frontPlateDepth), this._frontPlate.scaling.z = M, this._frontPlate.position = Se.Forward(this._frontPlate._scene.useRightHandedSystem).scale((this._frontPlateDepth - M) / 2), this._textPlate.position = Se.Forward(this._textPlate._scene.useRightHandedSystem).scale(-(this._backPlateDepth + M) / 2);+        }+      }+    }), this._pointerHoverObserver = this.onPointerMoveObservable.add((g) => {+      this._frontMaterial.globalLeftIndexTipPosition = g;+    });+  }+  _getTypeName() {+    return "TouchHolographicButton";+  }+  _rebuildContent() {+    this._disposeFacadeTexture();+    const i = new Gi();+    if (i.isVertical = !0, xb() && document.createElement && this._imageUrl) {+      const d = new Ft();+      d.source = this._imageUrl, d.paddingTop = "40px", d.height = "180px", d.width = "100px", d.paddingBottom = "40px", i.addControl(d);+    }+    if (this._text) {+      const d = new zr();+      d.text = this._text, d.color = "white", d.height = "30px", d.fontSize = 24, i.addControl(d);+    }+    this.content = i;+  }+  // Mesh association+  _createNode(i) {+    this.name = this.name ?? "TouchHolographicButton";+    const d = Wi(`${this.name}_collisionMesh`, {+      width: 1,+      height: 1,+      depth: this._frontPlateDepth+    }, i);+    d.isPickable = !0, d.isNearPickable = !0, d.visibility = 0, d.position = Se.Forward(i.useRightHandedSystem).scale(-this._frontPlateDepth / 2);+    const g = Lr.GetAssetUrl(aw.MODEL_BASE_URL);+    yu.ImportMeshAsync(void 0, g, aw.MODEL_FILENAME, i).then((M) => {+      const N = Wi(`${this.name}_alphaMesh`, {+        width: 1,+        height: 1,+        depth: 1+      }, i);+      N.isPickable = !1, N.material = new xu(`${this.name}_alphaMesh_material`, i), N.material.alpha = 0.15;+      const O = M.meshes[1];+      O.name = `${this.name}_frontPlate`, O.isPickable = !1, O.scaling.z = this._frontPlateDepth, N.parent = O, O.parent = d, this._frontMaterial && (O.material = this._frontMaterial), this._frontPlate = O;+    }), this._backPlate = Wi(`${this.name}_backPlate`, {+      width: 1,+      height: 1,+      depth: this._backPlateDepth+    }, i), this._backPlate.position = Se.Forward(i.useRightHandedSystem).scale(this._backPlateDepth / 2), this._backPlate.isPickable = !1, this._textPlate = super._createNode(i), this._textPlate.name = `${this.name}_textPlate`, this._textPlate.isPickable = !1, this._textPlate.position = Se.Forward(i.useRightHandedSystem).scale(-this._frontPlateDepth / 2), this._backPlate.addChild(d), this._backPlate.addChild(this._textPlate);+    const y = new Mu(`${this.name}_root`, i);+    return this._backPlate.setParent(y), this.collisionMesh = d, this.collidableFrontDirection = this._backPlate.forward.negate(), y;+  }+  _applyFacade(i) {+    this._plateMaterial.emissiveTexture = i, this._plateMaterial.opacityTexture = i, this._plateMaterial.diffuseColor = new nr(0.4, 0.4, 0.4);+  }+  _createBackMaterial(i) {+    this._backMaterial = new $o(this.name + "backPlateMaterial", i.getScene()), this._backMaterial.albedoColor = this._backplateColor, this._backMaterial.renderBorders = !0, this._backMaterial.renderHoverLight = !1;+  }+  _createFrontMaterial(i) {+    this._frontMaterial = new sr(this.name + "Front Material", i.getScene());+  }+  _createPlateMaterial(i) {+    this._plateMaterial = new xu(this.name + "Plate Material", i.getScene()), this._plateMaterial.specularColor = nr.Black();+  }+  _onToggle(i) {+    this._backMaterial && (i ? this._backMaterial.albedoColor = this._backplateToggledColor : this._backMaterial.albedoColor = this._backplateColor), super._onToggle(i);+  }+  _affectMaterial(i) {+    this._shareMaterials ? (this._host._touchSharedMaterials.backFluentMaterial ? this._backMaterial = this._host._touchSharedMaterials.backFluentMaterial : (this._createBackMaterial(i), this._host._touchSharedMaterials.backFluentMaterial = this._backMaterial), this._host._touchSharedMaterials.frontFluentMaterial ? this._frontMaterial = this._host._touchSharedMaterials.frontFluentMaterial : (this._createFrontMaterial(i), this._host._touchSharedMaterials.frontFluentMaterial = this._frontMaterial)) : (this._createBackMaterial(i), this._createFrontMaterial(i)), this._createPlateMaterial(i), this._backPlate.material = this._backMaterial, this._textPlate.material = this._plateMaterial, this._isBackplateVisible || (this._backPlate.visibility = 0), this._frontPlate && (this._frontPlate.material = this._frontMaterial), this._rebuildContent();+  }+  /**+   * Releases all associated resources+   */+  dispose() {+    super.dispose(), this._disposeTooltip(), this.onPointerMoveObservable.remove(this._pointerHoverObserver), this.shareMaterials || (this._backMaterial.dispose(), this._frontMaterial.dispose(), this._plateMaterial.dispose(), this._pickedPointObserver && (this._host.onPickedPointChangedObservable.remove(this._pickedPointObserver), this._pickedPointObserver = null));+  }+};+Th.MODEL_BASE_URL = "https://assets.babylonjs.com/core/MRTK/";+Th.MODEL_FILENAME = "mrtk-fluent-button.glb";+class mS {+  /**+   * Instantiates the default behavior+   */+  constructor() {+    this.followBehaviorEnabled = !1, this.sixDofDragBehaviorEnabled = !0, this.surfaceMagnetismBehaviorEnabled = !0, this._followBehavior = new N9(), this._sixDofDragBehavior = new I9(), this._surfaceMagnetismBehavior = new z9();+  }+  /**+   *  The name of the behavior+   */+  get name() {+    return "Default";+  }+  /**+   *  The follow behavior+   */+  get followBehavior() {+    return this._followBehavior;+  }+  /**+   *  The six DoF drag behavior+   */+  get sixDofDragBehavior() {+    return this._sixDofDragBehavior;+  }+  /**+   * The surface magnetism behavior+   */+  get surfaceMagnetismBehavior() {+    return this._surfaceMagnetismBehavior;+  }+  /**+   *  Initializes the behavior+   */+  init() {+  }+  /**+   * Attaches the default behavior+   * @param ownerMesh The top level mesh+   * @param draggablesMeshes Descendant meshes that can be used for dragging the owner mesh+   * @param sceneUnderstandingMeshes Meshes from the scene understanding that will be used for surface magnetism+   */+  attach(i, d, g) {+    this._scene = i.getScene(), this.attachedNode = i, this._addObservables(), this._followBehavior.attach(i), this._sixDofDragBehavior.attach(i), this._sixDofDragBehavior.draggableMeshes = d || null, this._sixDofDragBehavior.faceCameraOnDragStart = !0, this._surfaceMagnetismBehavior.attach(i, this._scene), g && (this._surfaceMagnetismBehavior.meshes = g), this._surfaceMagnetismBehavior.enabled = !1;+  }+  /**+   *  Detaches the behavior from the mesh+   */+  detach() {+    this.attachedNode = null, this._removeObservables(), this._followBehavior.detach(), this._sixDofDragBehavior.detach(), this._surfaceMagnetismBehavior.detach();+  }+  _addObservables() {+    this._onBeforeRenderObserver = this._scene.onBeforeRenderObservable.add(() => {+      this._followBehavior._enabled = !this._sixDofDragBehavior.isMoving && this.followBehaviorEnabled;+    }), this._onDragObserver = this._sixDofDragBehavior.onDragObservable.add((i) => {+      this._sixDofDragBehavior.disableMovement = this._surfaceMagnetismBehavior.findAndUpdateTarget(i.pickInfo);+    });+  }+  _removeObservables() {+    this._scene.onBeforeRenderObservable.remove(this._onBeforeRenderObserver), this._sixDofDragBehavior.onDragObservable.remove(this._onDragObserver);+  }+}+const T4 = "handleVertexShader", sF = "precision highp float;attribute vec3 position;uniform vec3 positionOffset;uniform mat4 worldViewProjection;uniform float scale;void main(void) {vec4 vPos=vec4((vec3(position)+positionOffset)*scale,1.0);gl_Position=worldViewProjection*vPos;}";+br.ShadersStore[T4] || (br.ShadersStore[T4] = sF);+const E4 = "handlePixelShader", lF = "uniform vec3 color;void main(void) {gl_FragColor=vec4(color,1.0);}";+br.ShadersStore[E4] || (br.ShadersStore[E4] = lF);+class bS extends D9 {+  /**+   * Is the material indicating hovering state+   */+  get hover() {+    return this._hover;+  }+  set hover(i) {+    this._hover = i, this._updateInterpolationTarget();+  }+  /**+   * Is the material indicating drag state+   */+  get drag() {+    return this._drag;+  }+  set drag(i) {+    this._drag = i, this._updateInterpolationTarget();+  }+  /**+   * Creates a handle material+   * @param name Name of the material+   * @param scene Scene+   */+  constructor(i, d) {+    super(i, d, "handle", {+      attributes: ["position"],+      uniforms: ["worldViewProjection", "color", "scale", "positionOffset"],+      needAlphaBlending: !1,+      needAlphaTesting: !1+    }), this._hover = !1, this._drag = !1, this._color = new nr(), this._scale = 1, this._lastTick = -1, this.animationLength = 100, this.hoverColor = new nr(0, 0.467, 0.84), this.baseColor = new nr(1, 1, 1), this.hoverScale = 0.75, this.baseScale = 0.35, this.dragScale = 0.55, this._positionOffset = Se.Zero(), this._updateInterpolationTarget(), this._lastTick = Date.now(), this._onBeforeRender = this.getScene().onBeforeRenderObservable.add(() => {+      const g = Date.now(), y = g - this._lastTick, M = this._targetScale - this._scale, N = M4.Color3[0].copyFrom(this._targetColor).subtractToRef(this._color, M4.Color3[0]);+      this._scale = this._scale + M * y / this.animationLength, N.scaleToRef(y / this.animationLength, N), this._color.addToRef(N, this._color), this.setColor3("color", this._color), this.setFloat("scale", this._scale), this.setVector3("positionOffset", this._positionOffset), this._lastTick = g;+    });+  }+  _updateInterpolationTarget() {+    this.drag ? (this._targetColor = this.hoverColor, this._targetScale = this.dragScale) : this.hover ? (this._targetColor = this.hoverColor, this._targetScale = this.hoverScale) : (this._targetColor = this.baseColor, this._targetScale = this.baseScale);+  }+  /**+   * Disposes the handle material+   */+  dispose() {+    super.dispose(), this.getScene().onBeforeRenderObservable.remove(this._onBeforeRender);+  }+}+var sw;+(function($e) {+  $e[$e.IDLE = 0] = "IDLE", $e[$e.HOVER = 1] = "HOVER", $e[$e.DRAG = 2] = "DRAG";+})(sw || (sw = {}));+class fw {+  /**+   * The current state of the handle+   */+  get state() {+    return this._state;+  }+  /**+   * Returns the gizmo carrying this handle+   */+  get gizmo() {+    return this._gizmo;+  }+  /**+   * Sets hover state+   */+  set hover(i) {+    i ? this._state |= 1 : this._state &= -2, this._updateMaterial();+  }+  /**+   * Sets drag state+   */+  set drag(i) {+    i ? this._state |= 2 : this._state &= -3, this._updateMaterial();+  }+  /**+   * Creates a handle for a SlateGizmo+   * @param gizmo associated SlateGizmo+   * @param scene scene+   */+  constructor(i, d) {+    this._state = 0, this._materials = [], this._scene = d, this._gizmo = i, this.node = this.createNode(), this.node.reservedDataStore = {+      handle: this+    };+  }+  _createMaterial(i) {+    const d = new bS("handle", this._scene);+    return i && (d._positionOffset = i), d;+  }+  _updateMaterial() {+    const i = this._state;+    for (const d of this._materials)+      d.hover = !1, d.drag = !1;+    if (i & 2)+      for (const d of this._materials)+        d.drag = !0;+    else if (i & 1)+      for (const d of this._materials)+        d.hover = !0;+  }+  /**+   * Binds callbacks from dragging interaction+   * @param dragStartFn Function to call on drag start+   * @param dragFn Function to call on drag+   * @param dragEndFn Function to call on drag end+   */+  setDragBehavior(i, d, g) {+    const y = new T9();+    this._dragBehavior = y, this._dragStartObserver = y.onDragStartObservable.add(i), this._draggingObserver = y.onDragObservable.add(d), this._dragEndObserver = y.onDragEndObservable.add(g), this._dragBehavior.attach(this.node);+  }+  /**+   * Disposes the handle+   */+  dispose() {+    this._dragBehavior.onDragStartObservable.remove(this._dragStartObserver), this._dragBehavior.onDragObservable.remove(this._draggingObserver), this._dragBehavior.onDragEndObservable.remove(this._dragEndObserver), this._dragBehavior.detach();+    for (const i of this._materials)+      i.dispose();+    this.node.dispose();+  }+}+class vS extends fw {+  /**+   * Creates the meshes and parent node of the handle+   * @returns created node+   */+  createNode() {+    const i = Wi("sideVert", { width: 1, height: 10, depth: 0.1 }, this._scene), d = new Mu("side", this._scene);+    i.parent = d;+    const g = this._createMaterial();+    return i.material = g, i.isNearGrabbable = !0, this._materials.push(g), d;+  }+}+class _S extends fw {+  /**+   * Creates the meshes and parent node of the handle+   * @returns created node+   */+  createNode() {+    const i = Wi("angleHor", { width: 3, height: 1, depth: 0.1 }, this._scene), d = Wi("angleVert", { width: 1, height: 3, depth: 0.1 }, this._scene), g = new Mu("angle", this._scene);+    return i.parent = g, d.parent = g, i.material = this._createMaterial(new Se(1, 0, 0)), d.material = this._createMaterial(new Se(0, 1, 0)), d.isNearGrabbable = !0, i.isNearGrabbable = !0, this._materials.push(i.material), this._materials.push(d.material), g;+  }+}+class wS extends E9 {+  /**+   * The slate attached to this gizmo+   */+  set attachedSlate(i) {+    i ? (this.attachedMesh = i.mesh, this.updateBoundingBox(), this._pickedPointObserver = i._host.onPickingObservable.add((d) => {+      if (this._handleHovered && (!d || d.parent !== this._handleHovered.node) && (this._handleHovered.hover = !1, this._handleHovered = null), d && d.parent && d.parent.reservedDataStore && d.parent.reservedDataStore.handle) {+        const g = d.parent.reservedDataStore.handle;+        g.gizmo === this && (this._handleHovered = g, this._handleHovered.hover = !0);+      }+    })) : this._attachedSlate && this._attachedSlate._host.onPickingObservable.remove(this._pickedPointObserver), this._attachedSlate = i;+  }+  get attachedSlate() {+    return this._attachedSlate;+  }+  constructor(i) {+    super(i), this._boundingDimensions = new Se(0, 0, 0), this._renderObserver = null, this._tmpQuaternion = new wu(), this._tmpVector = new Se(0, 0, 0), this._corners = [], this._sides = [], this._boundingBoxGizmo = {+      min: new Se(),+      max: new Se()+    }, this._margin = 0.35, this._handleSize = 0.075, this._attachedSlate = null, this._existingSlateScale = new Se(), this.fixedScreenSize = !1, this.fixedScreenSizeDistanceFactor = 10, this._createNode(), this.updateScale = !1, this._renderObserver = this.gizmoLayer.originalScene.onBeforeRenderObservable.add(() => {+      this.attachedMesh && !this._existingSlateScale.equals(this.attachedMesh.scaling) && this.updateBoundingBox();+    });+  }+  _createNode() {+    this._handlesParent = new Mu("handlesParent", this.gizmoLayer.utilityLayerScene), this._handlesParent.rotationQuaternion = wu.Identity();+    const i = [+      {+        dimensions: new Se(-1, -1, 0),+        origin: new Se(1, 0, 0)+      },+      {+        dimensions: new Se(1, -1, 0),+        origin: new Se(0, 0, 0)+      },+      {+        dimensions: new Se(1, 1, 0),+        origin: new Se(0, 1, 0)+      },+      {+        dimensions: new Se(-1, 1, 0),+        origin: new Se(1, 1, 0)+      }+    ];+    for (let d = 0; d < 4; d++) {+      const g = new _S(this, this.gizmoLayer.utilityLayerScene);+      this._corners.push(g), g.node.rotation.z = Math.PI / 2 * d, g.node.parent = this._handlesParent, this._assignDragBehaviorCorners(g, (y, M, N, O) => this._moveHandle(y, M, N, O, !0), i[d]);+    }+    for (let d = 0; d < 4; d++) {+      const g = new vS(this, this.gizmoLayer.utilityLayerScene);+      this._sides.push(g), g.node.rotation.z = Math.PI / 2 * d, g.node.parent = this._handlesParent, this._assignDragBehaviorSides(g, d % 2 === 0 ? new Se(0, 1, 0) : new Se(1, 0, 0));+    }+    this._handlesParent.parent = this._rootMesh;+  }+  _keepAspectRatio(i, d, g = !1) {+    const y = Jr.Vector3[0];+    y.copyFromFloats(d, 1, 0).normalize(), g && (y.y *= -1);+    const M = Se.Dot(i, y);+    i.copyFrom(y).scaleInPlace(M);+  }+  _clampDimensions(i, d, g, y = !1) {+    const M = Jr.Vector3[0];+    M.copyFrom(i).multiplyInPlace(g);+    const N = Jr.Vector3[1];+    if (N.copyFromFloats(Math.max(this._attachedSlate.minDimensions.x, M.x + d.x), Math.max(this._attachedSlate.minDimensions.y, M.y + d.y), 0), y) {+      const O = d.x / d.y;+      N.x = Math.max(N.x, N.y * O), N.y = Math.max(N.y, N.x / O);+    }+    M.copyFrom(N).subtractInPlace(d), i.x = Math.sign(i.x) * Math.abs(M.x), i.y = Math.sign(i.y) * Math.abs(M.y);+  }+  _moveHandle(i, d, g, y, M) {+    if (!this._attachedSlate)+      return;+    if (M) {+      const F = d.x / d.y;+      this._keepAspectRatio(g, F, y.dimensions.x * y.dimensions.y < 0);+    }+    this._clampDimensions(g, d, y.dimensions, M);+    const N = Jr.Vector3[0], O = Jr.Vector3[1];+    N.copyFrom(g).multiplyInPlace(y.origin), O.copyFrom(g).multiplyInPlace(y.dimensions), this._attachedSlate.origin.copyFrom(i).addInPlace(N), this._attachedSlate.dimensions.set(d.x + O.x, d.y + O.y);+  }+  _assignDragBehaviorCorners(i, d, g) {+    const y = new Se(), M = new Se(), N = new Se(), O = new Oh(), F = new Se(), ne = (he, Me, p, De) => {+      he.subtractToRef(p, Jr.Vector3[0]);+      const Ke = Se.Dot(Jr.Vector3[0], Me);+      Jr.Vector3[1].copyFrom(Me).scaleInPlace(Ke), Jr.Vector3[0].subtractInPlace(Jr.Vector3[1]), Jr.Vector3[0].addToRef(p, De);+    }, $ = (he) => {+      this.attachedSlate && this.attachedMesh && (y.set(this.attachedSlate.dimensions.x, this.attachedSlate.dimensions.y, hn), M.copyFrom(this.attachedSlate.origin), N.copyFrom(he.position), O.copyFrom(this.attachedMesh.computeWorldMatrix(!0)), O.invert(), this.attachedSlate._followButton.isToggled = !1, Se.TransformNormalToRef(Se.Forward(), this.attachedMesh.getWorldMatrix(), F), F.normalize(), this._handleHovered && (this._handleDragged = this._handleHovered, this._handleDragged.drag = !0));+    }, Q = (he) => {+      this.attachedSlate && this.attachedMesh && (ne(he.position, F, N, this._tmpVector), this._tmpVector.subtractInPlace(N), Se.TransformNormalToRef(this._tmpVector, O, this._tmpVector), d(M, y, this._tmpVector, g), this.attachedSlate._positionElements(), this.updateBoundingBox());+    }, X = () => {+      this.attachedSlate && this.attachedNode && (this.attachedSlate._updatePivot(), this._handleDragged && (this._handleDragged.drag = !1, this._handleDragged = null));+    };+    i.setDragBehavior($, Q, X);+  }+  _assignDragBehaviorSides(i, d) {+    const g = new wu(), y = new Se(), M = new Se(), N = new Se(), O = new Se(), F = (Q) => {+      this.attachedSlate && this.attachedMesh && (g.copyFrom(this.attachedMesh.rotationQuaternion), y.copyFrom(Q.position), N.copyFrom(this.attachedMesh.getAbsolutePivotPoint()), M.copyFrom(y).subtractInPlace(N).normalize(), this.attachedSlate._followButton.isToggled = !1, Se.TransformNormalToRef(d, this.attachedMesh.getWorldMatrix(), O), O.normalize(), this._handleHovered && (this._handleDragged = this._handleHovered, this._handleDragged.drag = !0));+    }, ne = (Q) => {+      if (this.attachedSlate && this.attachedMesh) {+        this._tmpVector.copyFrom(Q.position), this._tmpVector.subtractInPlace(N), this._tmpVector.normalize();+        const X = -Se.GetAngleBetweenVectorsOnPlane(this._tmpVector, M, O);+        wu.RotationAxisToRef(d, X, this._tmpQuaternion), g.multiplyToRef(this._tmpQuaternion, this.attachedMesh.rotationQuaternion);+      }+    }, $ = () => {+      this.attachedSlate && this.attachedNode && (this.attachedSlate._updatePivot(), this._handleDragged && (this._handleDragged.drag = !1, this._handleDragged = null));+    };+    i.setDragBehavior(F, ne, $);+  }+  _attachedNodeChanged(i) {+    i && this.updateBoundingBox();+  }+  /**+   * Updates the bounding box information for the gizmo+   */+  updateBoundingBox() {+    if (this.attachedMesh) {+      k4._RemoveAndStorePivotPoint(this.attachedMesh);+      const i = this.attachedMesh.parent;+      this.attachedMesh.setParent(null), this._update(), this.attachedMesh.rotationQuaternion || (this.attachedMesh.rotationQuaternion = wu.RotationYawPitchRoll(this.attachedMesh.rotation.y, this.attachedMesh.rotation.x, this.attachedMesh.rotation.z)), this._tmpQuaternion.copyFrom(this.attachedMesh.rotationQuaternion), this._tmpVector.copyFrom(this.attachedMesh.position), this.attachedMesh.rotationQuaternion.set(0, 0, 0, 1), this.attachedMesh.position.set(0, 0, 0);+      const d = this.attachedMesh.getHierarchyBoundingVectors();+      d.max.subtractToRef(d.min, this._boundingDimensions), this._boundingBoxGizmo.min = d.min, this._boundingBoxGizmo.max = d.max, this._updateHandlesPosition(), this._updateHandlesScaling(), this.attachedMesh.rotationQuaternion.copyFrom(this._tmpQuaternion), this.attachedMesh.position.copyFrom(this._tmpVector), k4._RestorePivotPoint(this.attachedMesh), this.attachedMesh.setParent(i), this.attachedMesh.computeWorldMatrix(!0), this._existingSlateScale.copyFrom(this.attachedMesh.scaling);+    }+  }+  _updateHandlesPosition() {+    const i = this._boundingBoxGizmo.min.clone(), d = this._boundingBoxGizmo.max.clone(), g = this._corners[0].node.scaling.length();+    i.x -= this._margin * g, i.y -= this._margin * g, d.x += this._margin * g, d.y += this._margin * g;+    const y = i.add(d).scaleInPlace(0.5);+    this._corners[0].node.position.copyFromFloats(i.x, i.y, 0), this._corners[1].node.position.copyFromFloats(d.x, i.y, 0), this._corners[2].node.position.copyFromFloats(d.x, d.y, 0), this._corners[3].node.position.copyFromFloats(i.x, d.y, 0), this._sides[0].node.position.copyFromFloats(i.x, y.y, 0), this._sides[1].node.position.copyFromFloats(y.x, i.y, 0), this._sides[2].node.position.copyFromFloats(d.x, y.y, 0), this._sides[3].node.position.copyFromFloats(y.x, d.y, 0);+  }+  _updateHandlesScaling() {+    if (this._attachedSlate && this._attachedSlate.mesh) {+      const i = this._attachedSlate.mesh.scaling.x * this._attachedSlate.dimensions.x, d = this._attachedSlate.mesh.scaling.y * this._attachedSlate.dimensions.y, g = Math.min(i, d) * this._handleSize;+      for (let y = 0; y < this._corners.length; y++)+        this._corners[y].node.scaling.setAll(g);+      for (let y = 0; y < this._sides.length; y++)+        this._sides[y].node.scaling.setAll(g);+    }+  }+  _update() {+    if (super._update(), !!this.gizmoLayer.utilityLayerScene.activeCamera && this._attachedSlate && this._attachedSlate.mesh) {+      if (this.fixedScreenSize) {+        this._attachedSlate.mesh.absolutePosition.subtractToRef(this.gizmoLayer.utilityLayerScene.activeCamera.position, this._tmpVector);+        const i = this._handleSize * this._tmpVector.length() / this.fixedScreenSizeDistanceFactor;+        for (let d = 0; d < this._corners.length; d++)+          this._corners[d].node.scaling.set(i, i, i);+        for (let d = 0; d < this._sides.length; d++)+          this._sides[d].node.scaling.set(i, i, i);+      }+      this._updateHandlesPosition();+    }+  }+  dispose() {+    this.gizmoLayer.originalScene.onBeforeRenderObservable.remove(this._renderObserver), super.dispose();+    for (const i of this._corners)+      i.dispose();+    for (const i of this._sides)+      i.dispose();+  }+}+class Na extends hS {+  /**+   * Regroups all mesh behaviors for the slate+   */+  get defaultBehavior() {+    return this._defaultBehavior;+  }+  /**+   * 2D dimensions of the slate+   */+  get dimensions() {+    return this._dimensions;+  }+  set dimensions(i) {+    let d = 1;+    if (i.x < this.minDimensions.x || i.y < this.minDimensions.y) {+      const g = i.x / i.y;+      this.minDimensions.x / this.minDimensions.y > g ? d = this.minDimensions.x / i.x : d = this.minDimensions.y / i.y;+    }+    this._dimensions.copyFrom(i).scaleInPlace(d), this._updatePivot(), this._positionElements();+  }+  /**+   * Height of the title bar component+   */+  get titleBarHeight() {+    return this._titleBarHeight;+  }+  set titleBarHeight(i) {+    this._titleBarHeight = i;+  }+  /**+   * Rendering ground id of all the meshes+   */+  set renderingGroupId(i) {+    this._titleBar.renderingGroupId = i, this._titleBarTitle.renderingGroupId = i, this._contentPlate.renderingGroupId = i, this._backPlate.renderingGroupId = i;+  }+  get renderingGroupId() {+    return this._titleBar.renderingGroupId;+  }+  /**+   * The title text displayed at the top of the slate+   */+  set title(i) {+    this._titleText = i, this._titleTextComponent && (this._titleTextComponent.text = i);+  }+  get title() {+    return this._titleText;+  }+  /**+   * Creates a new slate+   * @param name defines the control name+   */+  constructor(i) {+    super(i), this.titleBarMargin = 5e-3, this.origin = new Se(0, 0, 0), this._dimensions = new mo(21.875, 12.5), this._titleBarHeight = 0.625, this._titleText = "", this.fitContentToDimensions = !1, this._contentScaleRatio = 1, this.minDimensions = new mo(15.625, 6.25), this.defaultDimensions = this._dimensions.clone(), this._followButton = new Th("followButton" + this.name), this._followButton.isToggleButton = !0, this._closeButton = new Th("closeButton" + this.name), this._contentViewport = new Kg(0, 0, 1, 1), this._contentDragBehavior = new oS({+      dragPlaneNormal: new Se(0, 0, -1)+    });+  }+  /**+   * Apply the facade texture (created from the content property).+   * This function can be overloaded by child classes+   * @param facadeTexture defines the AdvancedDynamicTexture to use+   */+  _applyFacade(i) {+    this._contentMaterial.albedoTexture = i, this._resetContentPositionAndZoom(), this._applyContentViewport(), i.attachToMesh(this._contentPlate, !0);+  }+  _addControl(i) {+    i._host = this._host, this._host.utilityLayer && i._prepareNode(this._host.utilityLayer.utilityLayerScene);+  }+  _getTypeName() {+    return "HolographicSlate";+  }+  /**+   * @internal+   */+  _positionElements() {+    const i = this._followButton, d = this._closeButton, g = this._titleBar, y = this._titleBarTitle, M = this._contentPlate, N = this._backPlate;+    if (i && d && g) {+      d.scaling.setAll(this.titleBarHeight), i.scaling.setAll(this.titleBarHeight), d.position.copyFromFloats(this.dimensions.x - this.titleBarHeight / 2, -this.titleBarHeight / 2, 0).addInPlace(this.origin), i.position.copyFromFloats(this.dimensions.x - 3 * this.titleBarHeight / 2, -this.titleBarHeight / 2, 0).addInPlace(this.origin);+      const O = this.dimensions.y - this.titleBarHeight - this.titleBarMargin, F = M.getScene().useRightHandedSystem;+      g.scaling.set(this.dimensions.x, this.titleBarHeight, hn), y.scaling.set(this.dimensions.x - 2 * this.titleBarHeight, this.titleBarHeight, hn), M.scaling.copyFromFloats(this.dimensions.x, O, hn), N.scaling.copyFromFloats(this.dimensions.x, O, hn), g.position.copyFromFloats(this.dimensions.x / 2, -(this.titleBarHeight / 2), 0).addInPlace(this.origin), y.position.copyFromFloats(this.dimensions.x / 2 - this.titleBarHeight, -(this.titleBarHeight / 2), F ? hn : -hn).addInPlace(this.origin), M.position.copyFromFloats(this.dimensions.x / 2, -(this.titleBarHeight + this.titleBarMargin + O / 2), 0).addInPlace(this.origin), N.position.copyFromFloats(this.dimensions.x / 2, -(this.titleBarHeight + this.titleBarMargin + O / 2), F ? -hn : hn).addInPlace(this.origin), this._titleTextComponent.host.scaleTo(Na._DEFAULT_TEXT_RESOLUTION_Y * y.scaling.x / y.scaling.y, Na._DEFAULT_TEXT_RESOLUTION_Y);+      const ne = this.dimensions.x / O;+      this._contentViewport.width = this._contentScaleRatio, this._contentViewport.height = this._contentScaleRatio / ne, this._applyContentViewport(), this._gizmo && this._gizmo.updateBoundingBox();+    }+  }+  _applyContentViewport() {+    if (this._contentPlate?.material && this._contentPlate.material.albedoTexture) {+      const i = this._contentPlate.material.albedoTexture;+      i.uScale = this._contentScaleRatio, i.vScale = this.fitContentToDimensions ? this._contentScaleRatio : this._contentScaleRatio / this._contentViewport.width * this._contentViewport.height, i.uOffset = this._contentViewport.x, i.vOffset = this._contentViewport.y;+    }+  }+  _resetContentPositionAndZoom() {+    this._contentViewport.x = 0, this._contentViewport.y = 0, this._contentScaleRatio = 1;+  }+  /**+   * @internal+   */+  _updatePivot() {+    if (!this.mesh)+      return;+    const i = new Se(this.dimensions.x * 0.5, -this.dimensions.y * 0.5, hn);+    i.addInPlace(this.origin), i.z = 0;+    const d = new Se(0, 0, 0);+    Se.TransformCoordinatesToRef(d, this.mesh.computeWorldMatrix(!0), d), this.mesh.setPivotPoint(i);+    const g = new Se(0, 0, 0);+    Se.TransformCoordinatesToRef(g, this.mesh.computeWorldMatrix(!0), g), this.mesh.position.addInPlace(d).subtractInPlace(g);+  }+  // Mesh association+  _createNode(i) {+    const d = new Mb("slate_" + this.name, i);+    this._titleBar = Wi("titleBar_" + this.name, { size: 1 }, i), this._titleBarTitle = sl("titleText_" + this.name, { size: 1 }, i), this._titleBarTitle.parent = d, this._titleBarTitle.isPickable = !1;+    const g = go.CreateForMesh(this._titleBarTitle);+    if (this._titleTextComponent = new zr("titleText_" + this.name, this._titleText), this._titleTextComponent.textWrapping = 2, this._titleTextComponent.textHorizontalAlignment = pe.HORIZONTAL_ALIGNMENT_LEFT, this._titleTextComponent.color = "white", this._titleTextComponent.fontSize = Na._DEFAULT_TEXT_RESOLUTION_Y / 2, this._titleTextComponent.paddingLeft = Na._DEFAULT_TEXT_RESOLUTION_Y / 4, g.addControl(this._titleTextComponent), i.useRightHandedSystem) {+      const O = new fi(0, 0, 1, 1);+      this._contentPlate = sl("contentPlate_" + this.name, { size: 1, sideOrientation: _b.BACKSIDE, frontUVs: O }, i), this._backPlate = sl("backPlate_" + this.name, { size: 1, sideOrientation: _b.FRONTSIDE }, i);+    } else {+      const O = new fi(0, 0, 1, 1);+      this._contentPlate = sl("contentPlate_" + this.name, { size: 1, sideOrientation: _b.FRONTSIDE, frontUVs: O }, i), this._backPlate = sl("backPlate_" + this.name, { size: 1, sideOrientation: _b.BACKSIDE }, i);+    }+    this._titleBar.parent = d, this._titleBar.isNearGrabbable = !0, this._contentPlate.parent = d, this._backPlate.parent = d, this._attachContentPlateBehavior(), this._addControl(this._followButton), this._addControl(this._closeButton);+    const y = this._followButton, M = this._closeButton;+    y.node.parent = d, M.node.parent = d, this._positionElements();+    const N = Lr.GetAssetUrl(Na.ASSETS_BASE_URL);+    return this._followButton.imageUrl = N + Na.FOLLOW_ICON_FILENAME, this._closeButton.imageUrl = N + Na.CLOSE_ICON_FILENAME, this._followButton.isBackplateVisible = !1, this._closeButton.isBackplateVisible = !1, this._followButton.onToggleObservable.add((O) => {+      this._defaultBehavior.followBehaviorEnabled = O, this._defaultBehavior.followBehaviorEnabled && this._defaultBehavior.followBehavior.recenter();+    }), this._closeButton.onPointerClickObservable.add(() => {+      this.dispose();+    }), d.rotationQuaternion = wu.Identity(), d.isVisible = !1, d;+  }+  _attachContentPlateBehavior() {+    this._contentDragBehavior.attach(this._contentPlate), this._contentDragBehavior.moveAttached = !1, this._contentDragBehavior.useObjectOrientationForDragging = !0, this._contentDragBehavior.updateDragPlane = !1;+    const i = new Se(), d = new Se(), g = new Se(), y = new Se(), M = new mo();+    let N, O;+    this._contentDragBehavior.onDragStartObservable.add((ne) => {+      this.node && (N = this._contentViewport.clone(), O = this.node.computeWorldMatrix(!0), i.copyFrom(ne.dragPlanePoint), d.set(this.dimensions.x, this.dimensions.y, hn), d.y -= this.titleBarHeight + this.titleBarMargin, Se.TransformNormalToRef(d, O, d), g.copyFromFloats(0, 1, 0), Se.TransformNormalToRef(g, O, g), y.copyFromFloats(1, 0, 0), Se.TransformNormalToRef(y, O, y), g.normalize(), g.scaleInPlace(1 / Se.Dot(g, d)), y.normalize(), y.scaleInPlace(1 / Se.Dot(y, d)));+    });+    const F = new Se();+    this._contentDragBehavior.onDragObservable.add((ne) => {+      this.fitContentToDimensions || (F.copyFrom(ne.dragPlanePoint), F.subtractInPlace(i), M.copyFromFloats(Se.Dot(F, y), Se.Dot(F, g)), this._contentViewport.x = ow.Clamp(N.x - F.x, 0, 1 - this._contentViewport.width * this._contentScaleRatio), this._contentViewport.y = ow.Clamp(N.y - F.y, 0, 1 - this._contentViewport.height * this._contentScaleRatio), this._applyContentViewport());+    });+  }+  _affectMaterial(i) {+    this._titleBarMaterial = new Dr(`${this.name} plateMaterial`, i.getScene()), this._contentMaterial = new $o(`${this.name} contentMaterial`, i.getScene()), this._contentMaterial.renderBorders = !0, this._backMaterial = new Dr(`${this.name} backPlate`, i.getScene()), this._backMaterial.lineWidth = hn, this._backMaterial.radius = 5e-3, this._backMaterial.backFaceCulling = !0, this._titleBar.material = this._titleBarMaterial, this._contentPlate.material = this._contentMaterial, this._backPlate.material = this._backMaterial, this._resetContent(), this._applyContentViewport();+  }+  /**+   * @internal+   */+  _prepareNode(i) {+    super._prepareNode(i), this._gizmo = new wS(this._host.utilityLayer), this._gizmo.attachedSlate = this, this._defaultBehavior = new mS(), this._defaultBehavior.attach(this.node, [this._titleBar]), this._defaultBehavior.sixDofDragBehavior.onDragStartObservable.add(() => {+      this._followButton.isToggled = !1;+    }), this._positionChangedObserver = this._defaultBehavior.sixDofDragBehavior.onPositionChangedObservable.add(() => {+      this._gizmo.updateBoundingBox();+    }), this._updatePivot(), this.resetDefaultAspectAndPose(!1);+  }+  /**+   * Resets the aspect and pose of the slate so it is right in front of the active camera, facing towards it.+   * @param resetAspect Should the slate's dimensions/aspect ratio be reset as well+   */+  resetDefaultAspectAndPose(i = !0) {+    if (!this._host || !this._host.utilityLayer || !this.node)+      return;+    const d = this._host.utilityLayer.utilityLayerScene, g = d.activeCamera;+    if (g) {+      const y = g.getWorldMatrix(), M = Se.TransformNormal(Se.Backward(d.useRightHandedSystem), y);+      this.origin.setAll(0), this._gizmo.updateBoundingBox();+      const N = this.node.getAbsolutePivotPoint();+      this.node.position.equalsToFloats(0, 0, 0) && this.node.position.copyFrom(g.position).subtractInPlace(M).subtractInPlace(N), this.node.rotationQuaternion = wu.FromLookDirectionLH(M, new Se(0, 1, 0)), i && (this.dimensions = this.defaultDimensions);+    }+  }+  /**+   * Releases all associated resources+   */+  dispose() {+    super.dispose(), this._titleBarMaterial.dispose(), this._contentMaterial.dispose(), this._titleBar.dispose(), this._titleBarTitle.dispose(), this._contentPlate.dispose(), this._backPlate.dispose(), this._followButton.dispose(), this._closeButton.dispose(), this._host.onPickedPointChangedObservable.remove(this._pickedPointObserver), this._defaultBehavior.sixDofDragBehavior.onPositionChangedObservable.remove(this._positionChangedObserver), this._defaultBehavior.detach(), this._gizmo.dispose(), this._contentDragBehavior.detach();+  }+}+Na.ASSETS_BASE_URL = "https://assets.babylonjs.com/core/MRTK/";+Na.CLOSE_ICON_FILENAME = "IconClose.png";+Na.FOLLOW_ICON_FILENAME = "IconFollowMe.png";+Na._DEFAULT_TEXT_RESOLUTION_Y = 102.4;+class cF extends Bb {+  /**+   * Creates a new 3D button based on a mesh+   * @param mesh mesh to become a 3D button+   * @param name defines the control name+   */+  constructor(i, d) {+    super(d), this._currentMesh = i, this.pointerEnterAnimation = () => {+      this.mesh && this.mesh.scaling.scaleInPlace(1.1);+    }, this.pointerOutAnimation = () => {+      this.mesh && this.mesh.scaling.scaleInPlace(1 / 1.1);+    }, this.pointerDownAnimation = () => {+      this.mesh && this.mesh.scaling.scaleInPlace(0.95);+    }, this.pointerUpAnimation = () => {+      this.mesh && this.mesh.scaling.scaleInPlace(1 / 0.95);+    };+  }+  _getTypeName() {+    return "MeshButton3D";+  }+  // Mesh association+  // eslint-disable-next-line @typescript-eslint/no-unused-vars+  _createNode(i) {+    const d = this._currentMesh.getChildMeshes();+    for (const g of d)+      this._injectGUI3DReservedDataStore(g).control = this;+    return this._currentMesh;+  }+  // eslint-disable-next-line @typescript-eslint/no-unused-vars+  _affectMaterial(i) {+  }+}+class Eh extends bd {+  /**+   * Regroups all mesh behaviors for the near menu+   */+  get defaultBehavior() {+    return this._defaultBehavior;+  }+  /**+   * Indicates if the near menu is world-pinned+   */+  get isPinned() {+    return this._isPinned;+  }+  set isPinned(i) {+    if (this._pinButton.isToggled !== i) {+      this._pinButton.isToggled = i;+      return;+    }+    this._isPinned = i, i ? this._defaultBehavior.followBehaviorEnabled = !1 : this._defaultBehavior.followBehaviorEnabled = !0;+  }+  _createPinButton(i) {+    const d = new Th("pin" + this.name, !1), g = Lr.GetAssetUrl(Eh._ASSETS_BASE_URL);+    return d.imageUrl = g + Eh._PIN_ICON_FILENAME, d.parent = this, d._host = this._host, d.isToggleButton = !0, d.onToggleObservable.add((y) => {+      this.isPinned = y;+    }), this._host.utilityLayer && (d._prepareNode(this._host.utilityLayer.utilityLayerScene), d.scaling.scaleInPlace(bd.MENU_BUTTON_SCALE), d.node && (d.node.parent = i)), d;+  }+  _createNode(i) {+    const d = super._createNode(i);+    return this._pinButton = this._createPinButton(d), this.isPinned = !1, this._defaultBehavior.attach(d, [this._backPlate]), this._defaultBehavior.followBehavior.ignoreCameraPitchAndRoll = !0, this._defaultBehavior.followBehavior.pitchOffset = -15, this._defaultBehavior.followBehavior.minimumDistance = 0.3, this._defaultBehavior.followBehavior.defaultDistance = 0.4, this._defaultBehavior.followBehavior.maximumDistance = 0.6, this._backPlate.isNearGrabbable = !0, d.isVisible = !1, d;+  }+  _finalProcessing() {+    super._finalProcessing(), this._pinButton.position.copyFromFloats((this._backPlate.scaling.x + bd.MENU_BUTTON_SCALE) / 2, this._backPlate.scaling.y / 2, 0);+  }+  /**+   * Creates a near menu GUI 3D control+   * @param name name of the near menu+   */+  constructor(i) {+    super(i), this._isPinned = !1, this._defaultBehavior = new mS(), this._dragObserver = this._defaultBehavior.sixDofDragBehavior.onDragObservable.add(() => {+      this.isPinned = !0;+    }), this.backPlateMargin = 1;+  }+  /**+   * Disposes the near menu+   */+  dispose() {+    super.dispose(), this._defaultBehavior.sixDofDragBehavior.onDragObservable.remove(this._dragObserver), this._defaultBehavior.detach();+  }+}+Eh._ASSETS_BASE_URL = "https://assets.babylonjs.com/core/MRTK/";+Eh._PIN_ICON_FILENAME = "IconPin.png";+class dF extends Rh {+  _mapGridNode(i, d) {+    const g = i.mesh;+    if (!g)+      return;+    i.position = d.clone();+    const y = Jr.Vector3[0];+    switch (y.copyFrom(d), this.orientation) {+      case No.FACEORIGIN_ORIENTATION:+      case No.FACEFORWARD_ORIENTATION:+        y.addInPlace(new Se(0, 0, 1)), g.lookAt(y);+        break;+      case No.FACEFORWARDREVERSED_ORIENTATION:+      case No.FACEORIGINREVERSED_ORIENTATION:+        y.addInPlace(new Se(0, 0, -1)), g.lookAt(y);+        break;+    }+  }+}+class uF extends Rh {+  constructor() {+    super(...arguments), this._iteration = 100;+  }+  /**+   * Gets or sets the number of iteration to use to scatter the controls (100 by default)+   */+  get iteration() {+    return this._iteration;+  }+  set iteration(i) {+    this._iteration !== i && (this._iteration = i, Lr.SetImmediate(() => {+      this._arrangeChildren();+    }));+  }+  _mapGridNode(i, d) {+    const g = i.mesh, y = this._scatterMapping(d);+    if (g) {+      switch (this.orientation) {+        case No.FACEORIGIN_ORIENTATION:+        case No.FACEFORWARD_ORIENTATION:+          g.lookAt(new Se(0, 0, 1));+          break;+        case No.FACEFORWARDREVERSED_ORIENTATION:+        case No.FACEORIGINREVERSED_ORIENTATION:+          g.lookAt(new Se(0, 0, -1));+          break;+      }+      i.position = y;+    }+  }+  _scatterMapping(i) {+    return i.x = (1 - Math.random() * 2) * this._cellWidth, i.y = (1 - Math.random() * 2) * this._cellHeight, i;+  }+  _finalProcessing() {+    const i = [];+    for (const d of this._children)+      d.mesh && i.push(d.mesh);+    for (let d = 0; d < this._iteration; d++) {+      i.sort((O, F) => {+        const ne = O.position.lengthSquared(), $ = F.position.lengthSquared();+        return ne < $ ? 1 : ne > $ ? -1 : 0;+      });+      const g = Math.pow(this.margin, 2), y = Math.max(this._cellWidth, this._cellHeight), M = Jr.Vector2[0], N = Jr.Vector3[0];+      for (let O = 0; O < i.length - 1; O++)+        for (let F = O + 1; F < i.length; F++)+          if (O != F) {+            i[F].position.subtractToRef(i[O].position, N), M.x = N.x, M.y = N.y;+            const ne = y;+            let $ = M.lengthSquared() - g;+            const Q = Math.min($, g);+            $ -= Q, $ < Math.pow(ne, 2) && (M.normalize(), N.scaleInPlace((ne - Math.sqrt($)) * 0.5), i[F].position.addInPlace(N), i[O].position.subtractInPlace(N));+          }+    }+  }+}+const P4 = "mrdlSliderBarPixelShader", fF = `uniform vec3 cameraPosition;varying vec3 vPosition;varying vec3 vNormal;varying vec2 vUV;varying vec3 vTangent;varying vec3 vBinormal;varying vec4 vColor;varying vec4 vExtra1;varying vec4 vExtra2;varying vec4 vExtra3;uniform float _Radius_;uniform float _Bevel_Front_;uniform float _Bevel_Front_Stretch_;uniform float _Bevel_Back_;uniform float _Bevel_Back_Stretch_;uniform float _Radius_Top_Left_;uniform float _Radius_Top_Right_;uniform float _Radius_Bottom_Left_;uniform float _Radius_Bottom_Right_;uniform bool _Bulge_Enabled_;uniform float _Bulge_Height_;uniform float _Bulge_Radius_;uniform float _Sun_Intensity_;uniform float _Sun_Theta_;uniform float _Sun_Phi_;uniform float _Indirect_Diffuse_;uniform vec4 _Albedo_;uniform float _Specular_;uniform float _Shininess_;uniform float _Sharpness_;uniform float _Subsurface_;uniform vec4 _Left_Color_;uniform vec4 _Right_Color_;uniform float _Reflection_;uniform float _Front_Reflect_;uniform float _Edge_Reflect_;uniform float _Power_;uniform vec4 _Sky_Color_;uniform vec4 _Horizon_Color_;uniform vec4 _Ground_Color_;uniform float _Horizon_Power_;uniform sampler2D _Reflection_Map_;uniform sampler2D _Indirect_Environment_;uniform float _Width_;uniform float _Fuzz_;uniform float _Min_Fuzz_;uniform float _Clip_Fade_;uniform float _Hue_Shift_;uniform float _Saturation_Shift_;uniform float _Value_Shift_;uniform vec3 _Blob_Position_;uniform float _Blob_Intensity_;uniform float _Blob_Near_Size_;uniform float _Blob_Far_Size_;uniform float _Blob_Near_Distance_;uniform float _Blob_Far_Distance_;uniform float _Blob_Fade_Length_;uniform float _Blob_Pulse_;uniform float _Blob_Fade_;uniform sampler2D _Blob_Texture_;uniform vec3 _Blob_Position_2_;uniform float _Blob_Near_Size_2_;uniform float _Blob_Pulse_2_;uniform float _Blob_Fade_2_;uniform vec3 _Left_Index_Pos_;uniform vec3 _Right_Index_Pos_;uniform vec3 _Left_Index_Middle_Pos_;uniform vec3 _Right_Index_Middle_Pos_;uniform sampler2D _Decal_;uniform vec2 _Decal_Scale_XY_;uniform bool _Decal_Front_Only_;uniform float _Rim_Intensity_;uniform sampler2D _Rim_Texture_;uniform float _Rim_Hue_Shift_;uniform float _Rim_Saturation_Shift_;uniform float _Rim_Value_Shift_;uniform float _Iridescence_Intensity_;uniform sampler2D _Iridescence_Texture_;uniform bool Use_Global_Left_Index;uniform bool Use_Global_Right_Index;uniform vec4 Global_Left_Index_Tip_Position;uniform vec4 Global_Right_Index_Tip_Position;uniform vec4 Global_Left_Thumb_Tip_Position;uniform vec4 Global_Right_Thumb_Tip_Position;uniform vec4 Global_Left_Index_Middle_Position;uniform vec4 Global_Right_Index_Middle_Position;uniform float Global_Left_Index_Tip_Proximity;uniform float Global_Right_Index_Tip_Proximity;void Blob_Fragment_B30(+sampler2D Blob_Texture,+vec4 Blob_Info1,+vec4 Blob_Info2,+out vec4 Blob_Color)+{float k1=dot(Blob_Info1.xy,Blob_Info1.xy);float k2=dot(Blob_Info2.xy,Blob_Info2.xy);vec3 closer=k1<k2 ? vec3(k1,Blob_Info1.z,Blob_Info1.w) : vec3(k2,Blob_Info2.z,Blob_Info2.w);Blob_Color=closer.z*texture(Blob_Texture,vec2(vec2(sqrt(closer.x),closer.y).x,1.0-vec2(sqrt(closer.x),closer.y).y))*clamp(1.0-closer.x,0.0,1.0);}+void FastLinearTosRGB_B42(+vec4 Linear,+out vec4 sRGB)+{sRGB.rgb=sqrt(clamp(Linear.rgb,0.0,1.0));sRGB.a=Linear.a;}+void Scale_RGB_B59(+vec4 Color,+float Scalar,+out vec4 Result)+{Result=vec4(Scalar,Scalar,Scalar,1)*Color;}+void Fragment_Main_B121(+float Sun_Intensity,+float Sun_Theta,+float Sun_Phi,+vec3 Normal,+vec4 Albedo,+float Fresnel_Reflect,+float Shininess,+vec3 Incident,+vec4 Horizon_Color,+vec4 Sky_Color,+vec4 Ground_Color,+float Indirect_Diffuse,+float Specular,+float Horizon_Power,+float Reflection,+vec4 Reflection_Sample,+vec4 Indirect_Sample,+float Sharpness,+float SSS,+float Subsurface,+vec4 Translucence,+vec4 Rim_Light,+vec4 Iridescence,+out vec4 Result)+{float theta=Sun_Theta*2.0*3.14159;float phi=Sun_Phi*3.14159;vec3 lightDir= vec3(cos(phi)*cos(theta),sin(phi),cos(phi)*sin(theta));float NdotL=max(dot(lightDir,Normal),0.0);vec3 R=reflect(Incident,Normal);float RdotL=max(0.0,dot(R,lightDir));float specular=pow(RdotL,Shininess);specular=mix(specular,smoothstep(0.495*Sharpness,1.0-0.495*Sharpness,specular),Sharpness);vec4 gi=mix(Ground_Color,Sky_Color,Normal.y*0.5+0.5);Result=((Sun_Intensity*NdotL+Indirect_Sample*Indirect_Diffuse+Translucence)*(1.0+SSS*Subsurface))*Albedo*(1.0-Fresnel_Reflect)+(Sun_Intensity*specular*Specular+Fresnel_Reflect*Reflection*Reflection_Sample)+Fresnel_Reflect*Rim_Light+Iridescence;}+void Bulge_B79(+bool Enabled,+vec3 Normal,+vec3 Tangent,+float Bulge_Height,+vec4 UV,+float Bulge_Radius,+vec3 ButtonN,+out vec3 New_Normal)+{vec2 xy=clamp(UV.xy*2.0,vec2(-1,-1),vec2(1,1));vec3 B=(cross(Normal,Tangent));float k=-clamp(1.0-length(xy)/Bulge_Radius,0.0,1.0)*Bulge_Height;k=sin(k*3.14159*0.5);k*=smoothstep(0.9998,0.9999,abs(dot(ButtonN,Normal)));New_Normal=Normal*sqrt(1.0-k*k)+(xy.x*Tangent+xy.y*B)*k;New_Normal=Enabled ? New_Normal : Normal;}+void SSS_B77(+vec3 ButtonN,+vec3 Normal,+vec3 Incident,+out float Result)+{float NdotI=abs(dot(Normal,Incident));float BdotI=abs(dot(ButtonN,Incident));Result=(abs(NdotI-BdotI)); }+void FingerOcclusion_B67(+float Width,+float DistToCenter,+float Fuzz,+float Min_Fuzz,+vec3 Position,+vec3 Forward,+vec3 Nearest,+float Fade_Out,+out float NotInShadow)+{float d=dot((Nearest-Position),Forward);float sh=smoothstep(Width*0.5,Width*0.5+Fuzz*max(d,0.0)+Min_Fuzz,DistToCenter);NotInShadow=1.0-(1.0-sh)*smoothstep(-Fade_Out,0.0,d);}+void FingerOcclusion_B68(+float Width,+float DistToCenter,+float Fuzz,+float Min_Fuzz,+vec3 Position,+vec3 Forward,+vec3 Nearest,+float Fade_Out,+out float NotInShadow)+{float d=dot((Nearest-Position),Forward);float sh=smoothstep(Width*0.5,Width*0.5+Fuzz*max(d,0.0)+Min_Fuzz,DistToCenter);NotInShadow=1.0-(1.0-sh)*smoothstep(-Fade_Out,0.0,d);}+void Scale_Color_B91(+vec4 Color,+float Scalar,+out vec4 Result)+{Result=Scalar*Color;}+void From_HSV_B73(+float Hue,+float Saturation,+float Value,+float Alpha,+out vec4 Color)+{vec4 K=vec4(1.0,2.0/3.0,1.0/3.0,3.0);vec3 p=abs(fract(vec3(Hue,Hue,Hue)+K.xyz)*6.0-K.www);Color.rgb=Value*mix(K.xxx,clamp(p-K.xxx,0.0,1.0),Saturation);Color.a=Alpha;}+void Fast_Fresnel_B122(+float Front_Reflect,+float Edge_Reflect,+float Power,+vec3 Normal,+vec3 Incident,+out float Transmit,+out float Reflect)+{float d=max(-dot(Incident,Normal),0.0);Reflect=Front_Reflect+(Edge_Reflect-Front_Reflect)*pow(.01-d,Power);Transmit=1.0-Reflect;}+void Mapped_Environment_B51(+sampler2D Reflected_Environment,+sampler2D Indirect_Environment,+vec3 Dir,+out vec4 Reflected_Color,+out vec4 Indirect_Diffuse)+{Reflected_Color=texture(Reflected_Environment,vec2(atan(Dir.z,Dir.x)/3.14159*0.5,asin(Dir.y)/3.14159+0.5));Indirect_Diffuse=texture(Indirect_Environment,vec2(atan(Dir.z,Dir.x)/3.14159*0.5,asin(Dir.y)/3.14159+0.5));}+vec4 SampleEnv_Bid50(vec3 D,vec4 S,vec4 H,vec4 G,float exponent)+{float k=pow(abs(D.y),exponent);vec4 C;if (D.y>0.0) {C=mix(H,S,k);} else {C=mix(H,G,k); }+return C;}+void Sky_Environment_B50(+vec3 Normal,+vec3 Reflected,+vec4 Sky_Color,+vec4 Horizon_Color,+vec4 Ground_Color,+float Horizon_Power,+out vec4 Reflected_Color,+out vec4 Indirect_Color)+{Reflected_Color=SampleEnv_Bid50(Reflected,Sky_Color,Horizon_Color,Ground_Color,Horizon_Power);Indirect_Color=mix(Ground_Color,Sky_Color,Normal.y*0.5+0.5);}+void Min_Segment_Distance_B65(+vec3 P0,+vec3 P1,+vec3 Q0,+vec3 Q1,+out vec3 NearP,+out vec3 NearQ,+out float Distance)+{vec3 u=P1-P0;vec3 v=Q1-Q0;vec3 w=P0-Q0;float a=dot(u,u);float b=dot(u,v);float c=dot(v,v);float d=dot(u,w);float e=dot(v,w);float D=a*c-b*b;float sD=D;float tD=D;float sc,sN,tc,tN;if (D<0.00001) {sN=0.0;sD=1.0;tN=e;tD=c;} else {sN=(b*e-c*d);tN=(a*e-b*d);if (sN<0.0) {sN=0.0;tN=e;tD=c;} else if (sN>sD) {sN=sD;tN=e+b;tD=c;}}+if (tN<0.0) {tN=0.0;if (-d<0.0) {sN=0.0;} else if (-d>a) {sN=sD;} else {sN=-d;sD=a;}} else if (tN>tD) {tN=tD;if ((-d+b)<0.0) {sN=0.0;} else if ((-d+b)>a) {sN=sD;} else {sN=(-d+b);sD=a;}}+sc=abs(sN)<0.000001 ? 0.0 : sN/sD;tc=abs(tN)<0.000001 ? 0.0 : tN/tD;NearP=P0+sc*u;NearQ=Q0+tc*v;Distance=distance(NearP,NearQ);}+void To_XYZ_B74(+vec3 Vec3,+out float X,+out float Y,+out float Z)+{X=Vec3.x;Y=Vec3.y;Z=Vec3.z;}+void Finger_Positions_B64(+vec3 Left_Index_Pos,+vec3 Right_Index_Pos,+vec3 Left_Index_Middle_Pos,+vec3 Right_Index_Middle_Pos,+out vec3 Left_Index,+out vec3 Right_Index,+out vec3 Left_Index_Middle,+out vec3 Right_Index_Middle)+{Left_Index= (Use_Global_Left_Index ? Global_Left_Index_Tip_Position.xyz : Left_Index_Pos);Right_Index= (Use_Global_Right_Index ? Global_Right_Index_Tip_Position.xyz : Right_Index_Pos);Left_Index_Middle= (Use_Global_Left_Index ? Global_Left_Index_Middle_Position.xyz : Left_Index_Middle_Pos);Right_Index_Middle= (Use_Global_Right_Index ? Global_Right_Index_Middle_Position.xyz : Right_Index_Middle_Pos);}+void VaryHSV_B108(+vec3 HSV_In,+float Hue_Shift,+float Saturation_Shift,+float Value_Shift,+out vec3 HSV_Out)+{HSV_Out=vec3(fract(HSV_In.x+Hue_Shift),clamp(HSV_In.y+Saturation_Shift,0.0,1.0),clamp(HSV_In.z+Value_Shift,0.0,1.0));}+void Remap_Range_B114(+float In_Min,+float In_Max,+float Out_Min,+float Out_Max,+float In,+out float Out)+{Out=mix(Out_Min,Out_Max,clamp((In-In_Min)/(In_Max-In_Min),0.0,1.0));}+void To_HSV_B75(+vec4 Color,+out float Hue,+out float Saturation,+out float Value,+out float Alpha,+out vec3 HSV)+{vec4 K=vec4(0.0,-1.0/3.0,2.0/3.0,-1.0);vec4 p=Color.g<Color.b ? vec4(Color.bg,K.wz) : vec4(Color.gb,K.xy);vec4 q=Color.r<p.x ? vec4(p.xyw,Color.r) : vec4(Color.r,p.yzx);float d=q.x-min(q.w,q.y);float e=1.0e-10;Hue=abs(q.z+(q.w-q.y)/(6.0*d+e));Saturation=d/(q.x+e);Value=q.x;Alpha=Color.a;HSV=vec3(Hue,Saturation,Value);}+void Code_B110(+float X,+out float Result)+{Result=(acos(X)/3.14159-0.5)*2.0;}+void Rim_Light_B132(+vec3 Front,+vec3 Normal,+vec3 Incident,+float Rim_Intensity,+sampler2D Texture,+out vec4 Result)+{vec3 R=reflect(Incident,Normal);float RdotF=dot(R,Front);float RdotL=sqrt(1.0-RdotF*RdotF);vec2 UV=vec2(R.y*0.5+0.5,0.5);vec4 Color=texture(Texture,UV);Result=Color;}+void main()+{vec4 Blob_Color_Q30;+#if BLOB_ENABLE+Blob_Fragment_B30(_Blob_Texture_,vExtra2,vExtra3,Blob_Color_Q30);+#else+Blob_Color_Q30=vec4(0,0,0,0);+#endif+vec3 Incident_Q39=normalize(vPosition-cameraPosition);vec3 Normalized_Q38=normalize(vNormal);vec3 Normalized_Q71=normalize(vTangent);vec4 Color_Q83;+#if DECAL_ENABLE+Color_Q83=texture(_Decal_,vUV);+#else+Color_Q83=vec4(0,0,0,0);+#endif+float X_Q90;float Y_Q90;float Z_Q90;float W_Q90;X_Q90=vExtra1.x;Y_Q90=vExtra1.y;Z_Q90=vExtra1.z;W_Q90=vExtra1.w;vec4 Linear_Q43;Linear_Q43.rgb=clamp(_Sky_Color_.rgb*_Sky_Color_.rgb,0.0,1.0);Linear_Q43.a=_Sky_Color_.a;vec4 Linear_Q44;Linear_Q44.rgb=clamp(_Horizon_Color_.rgb*_Horizon_Color_.rgb,0.0,1.0);Linear_Q44.a=_Horizon_Color_.a;vec4 Linear_Q45;Linear_Q45.rgb=clamp(_Ground_Color_.rgb*_Ground_Color_.rgb,0.0,1.0);Linear_Q45.a=_Ground_Color_.a;vec3 Left_Index_Q64;vec3 Right_Index_Q64;vec3 Left_Index_Middle_Q64;vec3 Right_Index_Middle_Q64;Finger_Positions_B64(_Left_Index_Pos_,_Right_Index_Pos_,_Left_Index_Middle_Pos_,_Right_Index_Middle_Pos_,Left_Index_Q64,Right_Index_Q64,Left_Index_Middle_Q64,Right_Index_Middle_Q64);vec4 Linear_Q46;Linear_Q46.rgb=clamp(_Albedo_.rgb*_Albedo_.rgb,0.0,1.0);Linear_Q46.a=_Albedo_.a;vec3 Normalized_Q107=normalize(vBinormal);vec3 Incident_Q70=normalize(vPosition-cameraPosition);vec3 New_Normal_Q79;Bulge_B79(_Bulge_Enabled_,Normalized_Q38,Normalized_Q71,_Bulge_Height_,vColor,_Bulge_Radius_,vBinormal,New_Normal_Q79);float Result_Q77;SSS_B77(vBinormal,New_Normal_Q79,Incident_Q39,Result_Q77);vec4 Result_Q91;Scale_Color_B91(Color_Q83,X_Q90,Result_Q91);float Transmit_Q122;float Reflect_Q122;Fast_Fresnel_B122(_Front_Reflect_,_Edge_Reflect_,_Power_,New_Normal_Q79,Incident_Q39,Transmit_Q122,Reflect_Q122);float Product_Q125=Y_Q90*Y_Q90;vec3 NearP_Q65;vec3 NearQ_Q65;float Distance_Q65;Min_Segment_Distance_B65(Left_Index_Q64,Left_Index_Middle_Q64,vPosition,cameraPosition,NearP_Q65,NearQ_Q65,Distance_Q65);vec3 NearP_Q63;vec3 NearQ_Q63;float Distance_Q63;Min_Segment_Distance_B65(Right_Index_Q64,Right_Index_Middle_Q64,vPosition,cameraPosition,NearP_Q63,NearQ_Q63,Distance_Q63);vec3 Reflected_Q47=reflect(Incident_Q39,New_Normal_Q79);vec4 Product_Q103=Linear_Q46*vec4(1,1,1,1);vec4 Result_Q132;Rim_Light_B132(Normalized_Q107,Normalized_Q38,Incident_Q70,_Rim_Intensity_,_Rim_Texture_,Result_Q132);float Dot_Q72=dot(Incident_Q70, Normalized_Q71);float MaxAB_Q123=max(Reflect_Q122,Product_Q125);float NotInShadow_Q67;+#if OCCLUSION_ENABLED+FingerOcclusion_B67(_Width_,Distance_Q65,_Fuzz_,_Min_Fuzz_,vPosition,vBinormal,NearP_Q65,_Clip_Fade_,NotInShadow_Q67);+#else+NotInShadow_Q67=1.0;+#endif+float NotInShadow_Q68;+#if OCCLUSION_ENABLED+FingerOcclusion_B68(_Width_,Distance_Q63,_Fuzz_,_Min_Fuzz_,vPosition,vBinormal,NearP_Q63,_Clip_Fade_,NotInShadow_Q68);+#else+NotInShadow_Q68=1.0;+#endif+vec4 Reflected_Color_Q51;vec4 Indirect_Diffuse_Q51;+#if ENV_ENABLE+Mapped_Environment_B51(_Reflection_Map_,_Indirect_Environment_,Reflected_Q47,Reflected_Color_Q51,Indirect_Diffuse_Q51);+#else+Reflected_Color_Q51=vec4(0,0,0,1);Indirect_Diffuse_Q51=vec4(0,0,0,1);+#endif+vec4 Reflected_Color_Q50;vec4 Indirect_Color_Q50;+#if SKY_ENABLED+Sky_Environment_B50(New_Normal_Q79,Reflected_Q47,Linear_Q43,Linear_Q44,Linear_Q45,_Horizon_Power_,Reflected_Color_Q50,Indirect_Color_Q50);+#else+Reflected_Color_Q50=vec4(0,0,0,1);Indirect_Color_Q50=vec4(0,0,0,1);+#endif+float Hue_Q75;float Saturation_Q75;float Value_Q75;float Alpha_Q75;vec3 HSV_Q75;To_HSV_B75(Product_Q103,Hue_Q75,Saturation_Q75,Value_Q75,Alpha_Q75,HSV_Q75);float Hue_Q127;float Saturation_Q127;float Value_Q127;float Alpha_Q127;vec3 HSV_Q127;To_HSV_B75(Result_Q132,Hue_Q127,Saturation_Q127,Value_Q127,Alpha_Q127,HSV_Q127);float Result_Q110;Code_B110(Dot_Q72,Result_Q110);float AbsA_Q76=abs(Result_Q110);float MinAB_Q58=min(NotInShadow_Q67,NotInShadow_Q68);vec4 Sum_Q48=Reflected_Color_Q51+Reflected_Color_Q50;vec4 Sum_Q49=Indirect_Diffuse_Q51+Indirect_Color_Q50;vec3 HSV_Out_Q126;VaryHSV_B108(HSV_Q127,_Rim_Hue_Shift_,_Rim_Saturation_Shift_,_Rim_Value_Shift_,HSV_Out_Q126);float Out_Q114;Remap_Range_B114(-1.0,1.0,0.0,1.0,Result_Q110,Out_Q114);float Product_Q106;Product_Q106=AbsA_Q76*_Hue_Shift_;float X_Q128;float Y_Q128;float Z_Q128;To_XYZ_B74(HSV_Out_Q126,X_Q128,Y_Q128,Z_Q128);vec2 Vec2_Q112=vec2(Out_Q114,0.5);vec3 HSV_Out_Q108;VaryHSV_B108(HSV_Q75,Product_Q106,_Saturation_Shift_,_Value_Shift_,HSV_Out_Q108);vec4 Color_Q129;From_HSV_B73(X_Q128,Y_Q128,Z_Q128,0.0,Color_Q129);vec4 Color_Q111;+#if IRIDESCENCE_ENABLED+Color_Q111=texture(_Iridescence_Texture_,Vec2_Q112);+#else+Color_Q111=vec4(0,0,0,0);+#endif+float X_Q74;float Y_Q74;float Z_Q74;To_XYZ_B74(HSV_Out_Q108,X_Q74,Y_Q74,Z_Q74);vec4 Result_Q131=_Rim_Intensity_*Color_Q129;vec4 Result_Q113=_Iridescence_Intensity_*Color_Q111;vec4 Color_Q73;From_HSV_B73(X_Q74,Y_Q74,Z_Q74,0.0,Color_Q73);vec4 Result_Q84=Result_Q91+(1.0-Result_Q91.a)*Color_Q73;vec4 Result_Q121;Fragment_Main_B121(_Sun_Intensity_,_Sun_Theta_,_Sun_Phi_,New_Normal_Q79,Result_Q84,MaxAB_Q123,_Shininess_,Incident_Q39,_Horizon_Color_,_Sky_Color_,_Ground_Color_,_Indirect_Diffuse_,_Specular_,_Horizon_Power_,_Reflection_,Sum_Q48,Sum_Q49,_Sharpness_,Result_Q77,_Subsurface_,vec4(0,0,0,0),Result_Q131,Result_Q113,Result_Q121);vec4 Result_Q59;Scale_RGB_B59(Result_Q121,MinAB_Q58,Result_Q59);vec4 sRGB_Q42;FastLinearTosRGB_B42(Result_Q59,sRGB_Q42);vec4 Result_Q31=Blob_Color_Q30+(1.0-Blob_Color_Q30.a)*sRGB_Q42;vec4 Result_Q40=Result_Q31; Result_Q40.a=1.0;vec4 Out_Color=Result_Q40;float Clip_Threshold=0.001;bool To_sRGB=false;gl_FragColor=Out_Color;}`;+br.ShadersStore[P4] || (br.ShadersStore[P4] = fF);+const O4 = "mrdlSliderBarVertexShader", hF = `uniform mat4 world;uniform mat4 viewProjection;uniform vec3 cameraPosition;attribute vec3 position;attribute vec3 normal;attribute vec2 uv;+#ifdef TANGENT+attribute vec3 tangent;+#else+const vec3 tangent=vec3(0.);+#endif+uniform float _Radius_;uniform float _Bevel_Front_;uniform float _Bevel_Front_Stretch_;uniform float _Bevel_Back_;uniform float _Bevel_Back_Stretch_;uniform float _Radius_Top_Left_;uniform float _Radius_Top_Right_;uniform float _Radius_Bottom_Left_;uniform float _Radius_Bottom_Right_;uniform bool _Bulge_Enabled_;uniform float _Bulge_Height_;uniform float _Bulge_Radius_;uniform float _Sun_Intensity_;uniform float _Sun_Theta_;uniform float _Sun_Phi_;uniform float _Indirect_Diffuse_;uniform vec4 _Albedo_;uniform float _Specular_;uniform float _Shininess_;uniform float _Sharpness_;uniform float _Subsurface_;uniform vec4 _Left_Color_;uniform vec4 _Right_Color_;uniform float _Reflection_;uniform float _Front_Reflect_;uniform float _Edge_Reflect_;uniform float _Power_;uniform vec4 _Sky_Color_;uniform vec4 _Horizon_Color_;uniform vec4 _Ground_Color_;uniform float _Horizon_Power_;uniform sampler2D _Reflection_Map_;uniform sampler2D _Indirect_Environment_;uniform float _Width_;uniform float _Fuzz_;uniform float _Min_Fuzz_;uniform float _Clip_Fade_;uniform float _Hue_Shift_;uniform float _Saturation_Shift_;uniform float _Value_Shift_;uniform vec3 _Blob_Position_;uniform float _Blob_Intensity_;uniform float _Blob_Near_Size_;uniform float _Blob_Far_Size_;uniform float _Blob_Near_Distance_;uniform float _Blob_Far_Distance_;uniform float _Blob_Fade_Length_;uniform float _Blob_Pulse_;uniform float _Blob_Fade_;uniform sampler2D _Blob_Texture_;uniform vec3 _Blob_Position_2_;uniform float _Blob_Near_Size_2_;uniform float _Blob_Pulse_2_;uniform float _Blob_Fade_2_;uniform vec3 _Left_Index_Pos_;uniform vec3 _Right_Index_Pos_;uniform vec3 _Left_Index_Middle_Pos_;uniform vec3 _Right_Index_Middle_Pos_;uniform sampler2D _Decal_;uniform vec2 _Decal_Scale_XY_;uniform bool _Decal_Front_Only_;uniform float _Rim_Intensity_;uniform sampler2D _Rim_Texture_;uniform float _Rim_Hue_Shift_;uniform float _Rim_Saturation_Shift_;uniform float _Rim_Value_Shift_;uniform float _Iridescence_Intensity_;uniform sampler2D _Iridescence_Texture_;uniform bool Use_Global_Left_Index;uniform bool Use_Global_Right_Index;uniform vec4 Global_Left_Index_Tip_Position;uniform vec4 Global_Right_Index_Tip_Position;uniform vec4 Global_Left_Thumb_Tip_Position;uniform vec4 Global_Right_Thumb_Tip_Position;uniform float Global_Left_Index_Tip_Proximity;uniform float Global_Right_Index_Tip_Proximity;varying vec3 vPosition;varying vec3 vNormal;varying vec2 vUV;varying vec3 vTangent;varying vec3 vBinormal;varying vec4 vColor;varying vec4 vExtra1;varying vec4 vExtra2;varying vec4 vExtra3;void Object_To_World_Pos_B12(+vec3 Pos_Object,+out vec3 Pos_World)+{Pos_World=(world*vec4(Pos_Object,1.0)).xyz;}+void Object_To_World_Normal_B32(+vec3 Nrm_Object,+out vec3 Nrm_World)+{Nrm_World=(vec4(Nrm_Object,0.0)).xyz;}+void Blob_Vertex_B23(+vec3 Position,+vec3 Normal,+vec3 Tangent,+vec3 Bitangent,+vec3 Blob_Position,+float Intensity,+float Blob_Near_Size,+float Blob_Far_Size,+float Blob_Near_Distance,+float Blob_Far_Distance,+float Blob_Fade_Length,+float Blob_Pulse,+float Blob_Fade,+out vec4 Blob_Info)+{vec3 blob= (Use_Global_Left_Index ? Global_Left_Index_Tip_Position.xyz : Blob_Position);vec3 delta=blob-Position;float dist=dot(Normal,delta);float lerpValue=clamp((abs(dist)-Blob_Near_Distance)/(Blob_Far_Distance-Blob_Near_Distance),0.0,1.0);float fadeValue=1.0-clamp((abs(dist)-Blob_Far_Distance)/Blob_Fade_Length,0.0,1.0);float size=Blob_Near_Size+(Blob_Far_Size-Blob_Near_Size)*lerpValue;vec2 blobXY=vec2(dot(delta,Tangent),dot(delta,Bitangent))/(0.0001+size);float Fade=fadeValue*Intensity*Blob_Fade;float Distance=(lerpValue*0.5+0.5)*(1.0-Blob_Pulse);Blob_Info=vec4(blobXY.x,blobXY.y,Distance,Fade);}+void Blob_Vertex_B24(+vec3 Position,+vec3 Normal,+vec3 Tangent,+vec3 Bitangent,+vec3 Blob_Position,+float Intensity,+float Blob_Near_Size,+float Blob_Far_Size,+float Blob_Near_Distance,+float Blob_Far_Distance,+float Blob_Fade_Length,+float Blob_Pulse,+float Blob_Fade,+out vec4 Blob_Info)+{vec3 blob= (Use_Global_Right_Index ? Global_Right_Index_Tip_Position.xyz : Blob_Position);vec3 delta=blob-Position;float dist=dot(Normal,delta);float lerpValue=clamp((abs(dist)-Blob_Near_Distance)/(Blob_Far_Distance-Blob_Near_Distance),0.0,1.0);float fadeValue=1.0-clamp((abs(dist)-Blob_Far_Distance)/Blob_Fade_Length,0.0,1.0);float size=Blob_Near_Size+(Blob_Far_Size-Blob_Near_Size)*lerpValue;vec2 blobXY=vec2(dot(delta,Tangent),dot(delta,Bitangent))/(0.0001+size);float Fade=fadeValue*Intensity*Blob_Fade;float Distance=(lerpValue*0.5+0.5)*(1.0-Blob_Pulse);Blob_Info=vec4(blobXY.x,blobXY.y,Distance,Fade);}+void Move_Verts_B130(+float Anisotropy,+vec3 P,+float Radius,+float Bevel,+vec3 Normal_Object,+float ScaleZ,+float Stretch,+out vec3 New_P,+out vec2 New_UV,+out float Radial_Gradient,+out vec3 Radial_Dir,+out vec3 New_Normal)+{vec2 UV=P.xy*2.0+0.5;vec2 center=clamp(UV,0.0,1.0);vec2 delta=UV-center;float deltad=(length(delta)*2.0);float f=(Bevel+(Radius-Bevel)*Stretch)/Radius;float innerd=clamp(deltad*2.0,0.0,1.0);float outerd=clamp(deltad*2.0-1.0,0.0,1.0);float bevelAngle=outerd*3.14159*0.5;float sinb=sin(bevelAngle);float cosb=cos(bevelAngle);float beveld=(1.0-f)*innerd+f*sinb;float br=outerd;vec2 r2=2.0*vec2(Radius/Anisotropy,Radius);float dir=P.z<0.0001 ? 1.0 : -1.0;New_UV=center+r2*((0.5-center)+normalize(delta+vec2(0.0,0.000001))*beveld*0.5);New_P=vec3(New_UV-0.5,P.z+dir*(1.0-cosb)*Bevel*ScaleZ);Radial_Gradient=clamp((deltad-0.5)*2.0,0.0,1.0);Radial_Dir=vec3(delta*r2,0.0);vec3 beveledNormal=cosb*Normal_Object+sinb*vec3(delta.x,delta.y,0.0);New_Normal=Normal_Object.z==0.0 ? Normal_Object : beveledNormal;}+void Object_To_World_Dir_B60(+vec3 Dir_Object,+out vec3 Normal_World,+out vec3 Normal_World_N,+out float Normal_Length)+{Normal_World=(world*vec4(Dir_Object,0.0)).xyz;Normal_Length=length(Normal_World);Normal_World_N=Normal_World/Normal_Length;}+void To_XYZ_B78(+vec3 Vec3,+out float X,+out float Y,+out float Z)+{X=Vec3.x;Y=Vec3.y;Z=Vec3.z;}+void Conditional_Float_B93(+bool Which,+float If_True,+float If_False,+out float Result)+{Result=Which ? If_True : If_False;}+void Object_To_World_Dir_B28(+vec3 Dir_Object,+out vec3 Binormal_World,+out vec3 Binormal_World_N,+out float Binormal_Length)+{Binormal_World=(world*vec4(Dir_Object,0.0)).xyz;Binormal_Length=length(Binormal_World);Binormal_World_N=Binormal_World/Binormal_Length;}+void Pick_Radius_B69(+float Radius,+float Radius_Top_Left,+float Radius_Top_Right,+float Radius_Bottom_Left,+float Radius_Bottom_Right,+vec3 Position,+out float Result)+{bool whichY=Position.y>0.0;Result=Position.x<0.0 ? (whichY ? Radius_Top_Left : Radius_Bottom_Left) : (whichY ? Radius_Top_Right : Radius_Bottom_Right);Result*=Radius;}+void Conditional_Float_B36(+bool Which,+float If_True,+float If_False,+out float Result)+{Result=Which ? If_True : If_False;}+void Greater_Than_B37(+float Left,+float Right,+out bool Not_Greater_Than,+out bool Greater_Than)+{Greater_Than=Left>Right;Not_Greater_Than=!Greater_Than;}+void Remap_Range_B105(+float In_Min,+float In_Max,+float Out_Min,+float Out_Max,+float In,+out float Out)+{Out=mix(Out_Min,Out_Max,clamp((In-In_Min)/(In_Max-In_Min),0.0,1.0));}+void main()+{vec2 XY_Q85;XY_Q85=(uv-vec2(0.5,0.5))*_Decal_Scale_XY_+vec2(0.5,0.5);vec3 Tangent_World_Q27;vec3 Tangent_World_N_Q27;float Tangent_Length_Q27;Tangent_World_Q27=(world*vec4(vec3(1,0,0),0.0)).xyz;Tangent_Length_Q27=length(Tangent_World_Q27);Tangent_World_N_Q27=Tangent_World_Q27/Tangent_Length_Q27;vec3 Normal_World_Q60;vec3 Normal_World_N_Q60;float Normal_Length_Q60;Object_To_World_Dir_B60(vec3(0,0,1),Normal_World_Q60,Normal_World_N_Q60,Normal_Length_Q60);float X_Q78;float Y_Q78;float Z_Q78;To_XYZ_B78(position,X_Q78,Y_Q78,Z_Q78);vec3 Nrm_World_Q26;Nrm_World_Q26=normalize((world*vec4(normal,0.0)).xyz);vec3 Binormal_World_Q28;vec3 Binormal_World_N_Q28;float Binormal_Length_Q28;Object_To_World_Dir_B28(vec3(0,1,0),Binormal_World_Q28,Binormal_World_N_Q28,Binormal_Length_Q28);float Anisotropy_Q29=Tangent_Length_Q27/Binormal_Length_Q28;float Result_Q69;Pick_Radius_B69(_Radius_,_Radius_Top_Left_,_Radius_Top_Right_,_Radius_Bottom_Left_,_Radius_Bottom_Right_,position,Result_Q69);float Anisotropy_Q53=Binormal_Length_Q28/Normal_Length_Q60;bool Not_Greater_Than_Q37;bool Greater_Than_Q37;Greater_Than_B37(Z_Q78,0.0,Not_Greater_Than_Q37,Greater_Than_Q37);vec4 Linear_Q101;Linear_Q101.rgb=clamp(_Left_Color_.rgb*_Left_Color_.rgb,0.0,1.0);Linear_Q101.a=_Left_Color_.a;vec4 Linear_Q102;Linear_Q102.rgb=clamp(_Right_Color_.rgb*_Right_Color_.rgb,0.0,1.0);Linear_Q102.a=_Right_Color_.a;vec3 Difference_Q61=vec3(0,0,0)-Normal_World_N_Q60;vec4 Out_Color_Q34=vec4(X_Q78,Y_Q78,Z_Q78,1);float Result_Q36;Conditional_Float_B36(Greater_Than_Q37,_Bevel_Back_,_Bevel_Front_,Result_Q36);float Result_Q94;Conditional_Float_B36(Greater_Than_Q37,_Bevel_Back_Stretch_,_Bevel_Front_Stretch_,Result_Q94);vec3 New_P_Q130;vec2 New_UV_Q130;float Radial_Gradient_Q130;vec3 Radial_Dir_Q130;vec3 New_Normal_Q130;Move_Verts_B130(Anisotropy_Q29,position,Result_Q69,Result_Q36,normal,Anisotropy_Q53,Result_Q94,New_P_Q130,New_UV_Q130,Radial_Gradient_Q130,Radial_Dir_Q130,New_Normal_Q130);float X_Q98;float Y_Q98;X_Q98=New_UV_Q130.x;Y_Q98=New_UV_Q130.y;vec3 Pos_World_Q12;Object_To_World_Pos_B12(New_P_Q130,Pos_World_Q12);vec3 Nrm_World_Q32;Object_To_World_Normal_B32(New_Normal_Q130,Nrm_World_Q32);vec4 Blob_Info_Q23;+#if BLOB_ENABLE+Blob_Vertex_B23(Pos_World_Q12,Nrm_World_Q26,Tangent_World_N_Q27,Binormal_World_N_Q28,_Blob_Position_,_Blob_Intensity_,_Blob_Near_Size_,_Blob_Far_Size_,_Blob_Near_Distance_,_Blob_Far_Distance_,_Blob_Fade_Length_,_Blob_Pulse_,_Blob_Fade_,Blob_Info_Q23);+#else+Blob_Info_Q23=vec4(0,0,0,0);+#endif+vec4 Blob_Info_Q24;+#if BLOB_ENABLE_2+Blob_Vertex_B24(Pos_World_Q12,Nrm_World_Q26,Tangent_World_N_Q27,Binormal_World_N_Q28,_Blob_Position_2_,_Blob_Intensity_,_Blob_Near_Size_2_,_Blob_Far_Size_,_Blob_Near_Distance_,_Blob_Far_Distance_,_Blob_Fade_Length_,_Blob_Pulse_2_,_Blob_Fade_2_,Blob_Info_Q24);+#else+Blob_Info_Q24=vec4(0,0,0,0);+#endif+float Out_Q105;Remap_Range_B105(0.0,1.0,0.0,1.0,X_Q98,Out_Q105);float X_Q86;float Y_Q86;float Z_Q86;To_XYZ_B78(Nrm_World_Q32,X_Q86,Y_Q86,Z_Q86);vec4 Color_At_T_Q97=mix(Linear_Q101,Linear_Q102,Out_Q105);float Minus_F_Q87=-Z_Q86;float R_Q99;float G_Q99;float B_Q99;float A_Q99;R_Q99=Color_At_T_Q97.r; G_Q99=Color_At_T_Q97.g; B_Q99=Color_At_T_Q97.b; A_Q99=Color_At_T_Q97.a;float ClampF_Q88=clamp(0.0,Minus_F_Q87,1.0);float Result_Q93;Conditional_Float_B93(_Decal_Front_Only_,ClampF_Q88,1.0,Result_Q93);vec4 Vec4_Q89=vec4(Result_Q93,Radial_Gradient_Q130,G_Q99,B_Q99);vec3 Position=Pos_World_Q12;vec3 Normal=Nrm_World_Q32;vec2 UV=XY_Q85;vec3 Tangent=Tangent_World_N_Q27;vec3 Binormal=Difference_Q61;vec4 Color=Out_Color_Q34;vec4 Extra1=Vec4_Q89;vec4 Extra2=Blob_Info_Q23;vec4 Extra3=Blob_Info_Q24;gl_Position=viewProjection*vec4(Position,1);vPosition=Position;vNormal=Normal;vUV=UV;vTangent=Tangent;vBinormal=Binormal;vColor=Color;vExtra1=Extra1;vExtra2=Extra2;vExtra3=Extra3;}`;+br.ShadersStore[O4] || (br.ShadersStore[O4] = hF);+class pF extends hc {+  constructor() {+    super(), this.SKY_ENABLED = !0, this.BLOB_ENABLE_2 = !0, this.IRIDESCENCE_ENABLED = !0, this._needNormals = !0, this._needUVs = !0, this.rebuild();+  }+}+class At extends uc {+  constructor(i, d) {+    super(i, d), this.radius = 0.6, this.bevelFront = 0.6, this.bevelFrontStretch = 0.077, this.bevelBack = 0, this.bevelBackStretch = 0, this.radiusTopLeft = 1, this.radiusTopRight = 1, this.radiusBottomLeft = 1, this.radiusBottomRight = 1, this.bulgeEnabled = !1, this.bulgeHeight = -0.323, this.bulgeRadius = 0.73, this.sunIntensity = 1.102, this.sunTheta = 0.76, this.sunPhi = 0.526, this.indirectDiffuse = 0.658, this.albedo = new Gr(0.0117647, 0.505882, 0.996078, 1), this.specular = 0, this.shininess = 10, this.sharpness = 0, this.subsurface = 0, this.leftGradientColor = new Gr(0.0117647, 0.505882, 0.996078, 1), this.rightGradientColor = new Gr(0.0117647, 0.505882, 0.996078, 1), this.reflection = 0.749, this.frontReflect = 0, this.edgeReflect = 0.09, this.power = 8.13, this.skyColor = new Gr(0.0117647, 0.964706, 0.996078, 1), this.horizonColor = new Gr(0.0117647, 0.333333, 0.996078, 1), this.groundColor = new Gr(0, 0.254902, 0.996078, 1), this.horizonPower = 1, this.width = 0.02, this.fuzz = 0.5, this.minFuzz = 1e-3, this.clipFade = 0.01, this.hueShift = 0, this.saturationShift = 0, this.valueShift = 0, this.blobPosition = new Se(0, 0, 0.1), this.blobIntensity = 0.5, this.blobNearSize = 0.01, this.blobFarSize = 0.03, this.blobNearDistance = 0, this.blobFarDistance = 0.08, this.blobFadeLength = 0.576, this.blobPulse = 0, this.blobFade = 1, this.blobPosition2 = new Se(0.2, 0, 0.1), this.blobNearSize2 = 0.01, this.blobPulse2 = 0, this.blobFade2 = 1, this.blobTexture = new Wr("", this.getScene()), this.leftIndexPosition = new Se(0, 0, 1), this.rightIndexPosition = new Se(-1, -1, -1), this.leftIndexMiddlePosition = new Se(0, 0, 0), this.rightIndexMiddlePosition = new Se(0, 0, 0), this.decalScaleXY = new mo(1.5, 1.5), this.decalFrontOnly = !0, this.rimIntensity = 0.287, this.rimHueShift = 0, this.rimSaturationShift = 0, this.rimValueShift = -1, this.iridescenceIntensity = 0, this.useGlobalLeftIndex = 1, this.useGlobalRightIndex = 1, this.globalLeftIndexTipProximity = 0, this.globalRightIndexTipProximity = 0, this.globalLeftIndexTipPosition = new fi(0.5, 0, -0.55, 1), this.globaRightIndexTipPosition = new fi(0, 0, 0, 1), this.globalLeftThumbTipPosition = new fi(0.5, 0, -0.55, 1), this.globalRightThumbTipPosition = new fi(0, 0, 0, 1), this.globalLeftIndexMiddlePosition = new fi(0.5, 0, -0.55, 1), this.globalRightIndexMiddlePosition = new fi(0, 0, 0, 1), this.alphaMode = Is.ALPHA_DISABLE, this.backFaceCulling = !1;+    const g = Lr.GetAssetUrl(At.BLUE_GRADIENT_TEXTURE_URL);+    this._blueGradientTexture = new Wr(g, this.getScene(), !0, !1, Wr.NEAREST_SAMPLINGMODE), this._decalTexture = new Wr("", this.getScene()), this._reflectionMapTexture = new Wr("", this.getScene()), this._indirectEnvTexture = new Wr("", this.getScene());+  }+  needAlphaBlending() {+    return !1;+  }+  needAlphaTesting() {+    return !1;+  }+  getAlphaTestTexture() {+    return null;+  }+  // Methods+  isReadyForSubMesh(i, d) {+    const g = d._drawWrapper;+    if (this.isFrozen && g.effect && g._wasPreviouslyReady)+      return !0;+    d.materialDefines || (d.materialDefines = new pF());+    const y = d.materialDefines, M = this.getScene();+    if (!this._blueGradientTexture.isReady())+      return !1;+    if (this._isReadyForSubMesh(d))+      return !0;+    const N = M.getEngine();+    if (vd(i, y, !1, !1), y.isDirty) {+      y.markAsProcessed(), M.resetCachedMaterial();+      const O = new _d();+      y.FOG && O.addFallback(1, "FOG"), wd(y, O), y.IMAGEPROCESSINGPOSTPROCESS = M.imageProcessingConfiguration.applyByPostProcess;+      const F = [Yt.PositionKind];+      y.NORMAL && F.push(Yt.NormalKind), y.UV1 && F.push(Yt.UVKind), y.UV2 && F.push(Yt.UV2Kind), y.VERTEXCOLOR && F.push(Yt.ColorKind), y.TANGENT && F.push(Yt.TangentKind), yd(F, y);+      const ne = "mrdlSliderBar", $ = y.toString(), Q = [+        "world",+        "viewProjection",+        "cameraPosition",+        "_Radius_",+        "_Bevel_Front_",+        "_Bevel_Front_Stretch_",+        "_Bevel_Back_",+        "_Bevel_Back_Stretch_",+        "_Radius_Top_Left_",+        "_Radius_Top_Right_",+        "_Radius_Bottom_Left_",+        "_Radius_Bottom_Right_",+        "_Bulge_Enabled_",+        "_Bulge_Height_",+        "_Bulge_Radius_",+        "_Sun_Intensity_",+        "_Sun_Theta_",+        "_Sun_Phi_",+        "_Indirect_Diffuse_",+        "_Albedo_",+        "_Specular_",+        "_Shininess_",+        "_Sharpness_",+        "_Subsurface_",+        "_Left_Color_",+        "_Right_Color_",+        "_Reflection_",+        "_Front_Reflect_",+        "_Edge_Reflect_",+        "_Power_",+        "_Sky_Color_",+        "_Horizon_Color_",+        "_Ground_Color_",+        "_Horizon_Power_",+        "_Reflection_Map_",+        "_Indirect_Environment_",+        "_Width_",+        "_Fuzz_",+        "_Min_Fuzz_",+        "_Clip_Fade_",+        "_Hue_Shift_",+        "_Saturation_Shift_",+        "_Value_Shift_",+        "_Blob_Position_",+        "_Blob_Intensity_",+        "_Blob_Near_Size_",+        "_Blob_Far_Size_",+        "_Blob_Near_Distance_",+        "_Blob_Far_Distance_",+        "_Blob_Fade_Length_",+        "_Blob_Pulse_",+        "_Blob_Fade_",+        "_Blob_Texture_",+        "_Blob_Position_2_",+        "_Blob_Near_Size_2_",+        "_Blob_Pulse_2_",+        "_Blob_Fade_2_",+        "_Left_Index_Pos_",+        "_Right_Index_Pos_",+        "_Left_Index_Middle_Pos_",+        "_Right_Index_Middle_Pos_",+        "_Decal_",+        "_Decal_Scale_XY_",+        "_Decal_Front_Only_",+        "_Rim_Intensity_",+        "_Rim_Texture_",+        "_Rim_Hue_Shift_",+        "_Rim_Saturation_Shift_",+        "_Rim_Value_Shift_",+        "_Iridescence_Intensity_",+        "_Iridescence_Texture_",+        "Use_Global_Left_Index",+        "Use_Global_Right_Index",+        "Global_Left_Index_Tip_Position",+        "Global_Right_Index_Tip_Position",+        "Global_Left_Thumb_Tip_Position",+        "Global_Right_Thumb_Tip_Position",+        "Global_Left_Index_Middle_Position;",+        "Global_Right_Index_Middle_Position",+        "Global_Left_Index_Tip_Proximity",+        "Global_Right_Index_Tip_Proximity"+      ], X = ["_Rim_Texture_", "_Iridescence_Texture_"], he = [];+      fc({+        uniformsNames: Q,+        uniformBuffersNames: he,+        samplers: X,+        defines: y,+        maxSimultaneousLights: 4+      }), d.setEffect(M.getEngine().createEffect(ne, {+        attributes: F,+        uniformsNames: Q,+        uniformBuffersNames: he,+        samplers: X,+        defines: $,+        fallbacks: O,+        onCompiled: this.onCompiled,+        onError: this.onError,+        indexParameters: { maxSimultaneousLights: 4 }+      }, N), y, this._materialContext);+    }+    return !d.effect || !d.effect.isReady() ? !1 : (y._renderId = M.getRenderId(), g._wasPreviouslyReady = !0, !0);+  }+  bindForSubMesh(i, d, g) {+    if (!g.materialDefines)+      return;+    const M = g.effect;+    M && (this._activeEffect = M, this.bindOnlyWorldMatrix(i), this._activeEffect.setMatrix("viewProjection", this.getScene().getTransformMatrix()), this._activeEffect.setVector3("cameraPosition", this.getScene().activeCamera.position), this._activeEffect.setFloat("_Radius_", this.radius), this._activeEffect.setFloat("_Bevel_Front_", this.bevelFront), this._activeEffect.setFloat("_Bevel_Front_Stretch_", this.bevelFrontStretch), this._activeEffect.setFloat("_Bevel_Back_", this.bevelBack), this._activeEffect.setFloat("_Bevel_Back_Stretch_", this.bevelBackStretch), this._activeEffect.setFloat("_Radius_Top_Left_", this.radiusTopLeft), this._activeEffect.setFloat("_Radius_Top_Right_", this.radiusTopRight), this._activeEffect.setFloat("_Radius_Bottom_Left_", this.radiusBottomLeft), this._activeEffect.setFloat("_Radius_Bottom_Right_", this.radiusBottomRight), this._activeEffect.setFloat("_Bulge_Enabled_", this.bulgeEnabled ? 1 : 0), this._activeEffect.setFloat("_Bulge_Height_", this.bulgeHeight), this._activeEffect.setFloat("_Bulge_Radius_", this.bulgeRadius), this._activeEffect.setFloat("_Sun_Intensity_", this.sunIntensity), this._activeEffect.setFloat("_Sun_Theta_", this.sunTheta), this._activeEffect.setFloat("_Sun_Phi_", this.sunPhi), this._activeEffect.setFloat("_Indirect_Diffuse_", this.indirectDiffuse), this._activeEffect.setDirectColor4("_Albedo_", this.albedo), this._activeEffect.setFloat("_Specular_", this.specular), this._activeEffect.setFloat("_Shininess_", this.shininess), this._activeEffect.setFloat("_Sharpness_", this.sharpness), this._activeEffect.setFloat("_Subsurface_", this.subsurface), this._activeEffect.setDirectColor4("_Left_Color_", this.leftGradientColor), this._activeEffect.setDirectColor4("_Right_Color_", this.rightGradientColor), this._activeEffect.setFloat("_Reflection_", this.reflection), this._activeEffect.setFloat("_Front_Reflect_", this.frontReflect), this._activeEffect.setFloat("_Edge_Reflect_", this.edgeReflect), this._activeEffect.setFloat("_Power_", this.power), this._activeEffect.setDirectColor4("_Sky_Color_", this.skyColor), this._activeEffect.setDirectColor4("_Horizon_Color_", this.horizonColor), this._activeEffect.setDirectColor4("_Ground_Color_", this.groundColor), this._activeEffect.setFloat("_Horizon_Power_", this.horizonPower), this._activeEffect.setTexture("_Reflection_Map_", this._reflectionMapTexture), this._activeEffect.setTexture("_Indirect_Environment_", this._indirectEnvTexture), this._activeEffect.setFloat("_Width_", this.width), this._activeEffect.setFloat("_Fuzz_", this.fuzz), this._activeEffect.setFloat("_Min_Fuzz_", this.minFuzz), this._activeEffect.setFloat("_Clip_Fade_", this.clipFade), this._activeEffect.setFloat("_Hue_Shift_", this.hueShift), this._activeEffect.setFloat("_Saturation_Shift_", this.saturationShift), this._activeEffect.setFloat("_Value_Shift_", this.valueShift), this._activeEffect.setVector3("_Blob_Position_", this.blobPosition), this._activeEffect.setFloat("_Blob_Intensity_", this.blobIntensity), this._activeEffect.setFloat("_Blob_Near_Size_", this.blobNearSize), this._activeEffect.setFloat("_Blob_Far_Size_", this.blobFarSize), this._activeEffect.setFloat("_Blob_Near_Distance_", this.blobNearDistance), this._activeEffect.setFloat("_Blob_Far_Distance_", this.blobFarDistance), this._activeEffect.setFloat("_Blob_Fade_Length_", this.blobFadeLength), this._activeEffect.setFloat("_Blob_Pulse_", this.blobPulse), this._activeEffect.setFloat("_Blob_Fade_", this.blobFade), this._activeEffect.setTexture("_Blob_Texture_", this.blobTexture), this._activeEffect.setVector3("_Blob_Position_2_", this.blobPosition2), this._activeEffect.setFloat("_Blob_Near_Size_2_", this.blobNearSize2), this._activeEffect.setFloat("_Blob_Pulse_2_", this.blobPulse2), this._activeEffect.setFloat("_Blob_Fade_2_", this.blobFade2), this._activeEffect.setVector3("_Left_Index_Pos_", this.leftIndexPosition), this._activeEffect.setVector3("_Right_Index_Pos_", this.rightIndexPosition), this._activeEffect.setVector3("_Left_Index_Middle_Pos_", this.leftIndexMiddlePosition), this._activeEffect.setVector3("_Right_Index_Middle_Pos_", this.rightIndexMiddlePosition), this._activeEffect.setTexture("_Decal_", this._decalTexture), this._activeEffect.setVector2("_Decal_Scale_XY_", this.decalScaleXY), this._activeEffect.setFloat("_Decal_Front_Only_", this.decalFrontOnly ? 1 : 0), this._activeEffect.setFloat("_Rim_Intensity_", this.rimIntensity), this._activeEffect.setTexture("_Rim_Texture_", this._blueGradientTexture), this._activeEffect.setFloat("_Rim_Hue_Shift_", this.rimHueShift), this._activeEffect.setFloat("_Rim_Saturation_Shift_", this.rimSaturationShift), this._activeEffect.setFloat("_Rim_Value_Shift_", this.rimValueShift), this._activeEffect.setFloat("_Iridescence_Intensity_", this.iridescenceIntensity), this._activeEffect.setTexture("_Iridescence_Texture_", this._blueGradientTexture), this._activeEffect.setFloat("Use_Global_Left_Index", this.useGlobalLeftIndex), this._activeEffect.setFloat("Use_Global_Right_Index", this.useGlobalRightIndex), this._activeEffect.setVector4("Global_Left_Index_Tip_Position", this.globalLeftIndexTipPosition), this._activeEffect.setVector4("Global_Right_Index_Tip_Position", this.globaRightIndexTipPosition), this._activeEffect.setVector4("Global_Left_Thumb_Tip_Position", this.globalLeftThumbTipPosition), this._activeEffect.setVector4("Global_Right_Thumb_Tip_Position", this.globalRightThumbTipPosition), this._activeEffect.setVector4("Global_Left_Index_Middle_Position", this.globalLeftIndexMiddlePosition), this._activeEffect.setVector4("Global_Right_Index_Middle_Position", this.globalRightIndexMiddlePosition), this._activeEffect.setFloat("Global_Left_Index_Tip_Proximity", this.globalLeftIndexTipProximity), this._activeEffect.setFloat("Global_Right_Index_Tip_Proximity", this.globalRightIndexTipProximity), this._afterBind(d, this._activeEffect, g));+  }+  /**+   * Get the list of animatables in the material.+   * @returns the list of animatables object used in the material+   */+  getAnimatables() {+    return [];+  }+  dispose(i) {+    super.dispose(i), this._reflectionMapTexture.dispose(), this._indirectEnvTexture.dispose(), this._blueGradientTexture.dispose(), this._decalTexture.dispose();+  }+  clone(i) {+    return Eo.Clone(() => new At(i, this.getScene()), this);+  }+  serialize() {+    const i = super.serialize();+    return i.customType = "BABYLON.MRDLSliderBarMaterial", i;+  }+  getClassName() {+    return "MRDLSliderBarMaterial";+  }+  // Statics+  static Parse(i, d, g) {+    return Eo.Parse(() => new At(i.name, d), i, d, g);+  }+}+At.BLUE_GRADIENT_TEXTURE_URL = "https://assets.babylonjs.com/core/MRTK/MRDL/mrtk-mrdl-blue-gradient.png";+q([+  H()+], At.prototype, "radius", void 0);+q([+  H()+], At.prototype, "bevelFront", void 0);+q([+  H()+], At.prototype, "bevelFrontStretch", void 0);+q([+  H()+], At.prototype, "bevelBack", void 0);+q([+  H()+], At.prototype, "bevelBackStretch", void 0);+q([+  H()+], At.prototype, "radiusTopLeft", void 0);+q([+  H()+], At.prototype, "radiusTopRight", void 0);+q([+  H()+], At.prototype, "radiusBottomLeft", void 0);+q([+  H()+], At.prototype, "radiusBottomRight", void 0);+q([+  H()+], At.prototype, "bulgeEnabled", void 0);+q([+  H()+], At.prototype, "bulgeHeight", void 0);+q([+  H()+], At.prototype, "bulgeRadius", void 0);+q([+  H()+], At.prototype, "sunIntensity", void 0);+q([+  H()+], At.prototype, "sunTheta", void 0);+q([+  H()+], At.prototype, "sunPhi", void 0);+q([+  H()+], At.prototype, "indirectDiffuse", void 0);+q([+  H()+], At.prototype, "albedo", void 0);+q([+  H()+], At.prototype, "specular", void 0);+q([+  H()+], At.prototype, "shininess", void 0);+q([+  H()+], At.prototype, "sharpness", void 0);+q([+  H()+], At.prototype, "subsurface", void 0);+q([+  H()+], At.prototype, "leftGradientColor", void 0);+q([+  H()+], At.prototype, "rightGradientColor", void 0);+q([+  H()+], At.prototype, "reflection", void 0);+q([+  H()+], At.prototype, "frontReflect", void 0);+q([+  H()+], At.prototype, "edgeReflect", void 0);+q([+  H()+], At.prototype, "power", void 0);+q([+  H()+], At.prototype, "skyColor", void 0);+q([+  H()+], At.prototype, "horizonColor", void 0);+q([+  H()+], At.prototype, "groundColor", void 0);+q([+  H()+], At.prototype, "horizonPower", void 0);+q([+  H()+], At.prototype, "width", void 0);+q([+  H()+], At.prototype, "fuzz", void 0);+q([+  H()+], At.prototype, "minFuzz", void 0);+q([+  H()+], At.prototype, "clipFade", void 0);+q([+  H()+], At.prototype, "hueShift", void 0);+q([+  H()+], At.prototype, "saturationShift", void 0);+q([+  H()+], At.prototype, "valueShift", void 0);+q([+  H()+], At.prototype, "blobPosition", void 0);+q([+  H()+], At.prototype, "blobIntensity", void 0);+q([+  H()+], At.prototype, "blobNearSize", void 0);+q([+  H()+], At.prototype, "blobFarSize", void 0);+q([+  H()+], At.prototype, "blobNearDistance", void 0);+q([+  H()+], At.prototype, "blobFarDistance", void 0);+q([+  H()+], At.prototype, "blobFadeLength", void 0);+q([+  H()+], At.prototype, "blobPulse", void 0);+q([+  H()+], At.prototype, "blobFade", void 0);+q([+  H()+], At.prototype, "blobPosition2", void 0);+q([+  H()+], At.prototype, "blobNearSize2", void 0);+q([+  H()+], At.prototype, "blobPulse2", void 0);+q([+  H()+], At.prototype, "blobFade2", void 0);+q([+  H()+], At.prototype, "blobTexture", void 0);+q([+  H()+], At.prototype, "leftIndexPosition", void 0);+q([+  H()+], At.prototype, "rightIndexPosition", void 0);+q([+  H()+], At.prototype, "leftIndexMiddlePosition", void 0);+q([+  H()+], At.prototype, "rightIndexMiddlePosition", void 0);+q([+  H()+], At.prototype, "decalScaleXY", void 0);+q([+  H()+], At.prototype, "decalFrontOnly", void 0);+q([+  H()+], At.prototype, "rimIntensity", void 0);+q([+  H()+], At.prototype, "rimHueShift", void 0);+q([+  H()+], At.prototype, "rimSaturationShift", void 0);+q([+  H()+], At.prototype, "rimValueShift", void 0);+q([+  H()+], At.prototype, "iridescenceIntensity", void 0);+kr("BABYLON.GUI.MRDLSliderBarMaterial", At);+const R4 = "mrdlSliderThumbPixelShader", gF = `uniform vec3 cameraPosition;varying vec3 vPosition;varying vec3 vNormal;varying vec2 vUV;varying vec3 vTangent;varying vec3 vBinormal;varying vec4 vColor;varying vec4 vExtra1;varying vec4 vExtra2;varying vec4 vExtra3;uniform float _Radius_;uniform float _Bevel_Front_;uniform float _Bevel_Front_Stretch_;uniform float _Bevel_Back_;uniform float _Bevel_Back_Stretch_;uniform float _Radius_Top_Left_;uniform float _Radius_Top_Right_;uniform float _Radius_Bottom_Left_;uniform float _Radius_Bottom_Right_;uniform bool _Bulge_Enabled_;uniform float _Bulge_Height_;uniform float _Bulge_Radius_;uniform float _Sun_Intensity_;uniform float _Sun_Theta_;uniform float _Sun_Phi_;uniform float _Indirect_Diffuse_;uniform vec4 _Albedo_;uniform float _Specular_;uniform float _Shininess_;uniform float _Sharpness_;uniform float _Subsurface_;uniform vec4 _Left_Color_;uniform vec4 _Right_Color_;uniform float _Reflection_;uniform float _Front_Reflect_;uniform float _Edge_Reflect_;uniform float _Power_;uniform vec4 _Sky_Color_;uniform vec4 _Horizon_Color_;uniform vec4 _Ground_Color_;uniform float _Horizon_Power_;uniform sampler2D _Reflection_Map_;uniform sampler2D _Indirect_Environment_;uniform float _Width_;uniform float _Fuzz_;uniform float _Min_Fuzz_;uniform float _Clip_Fade_;uniform float _Hue_Shift_;uniform float _Saturation_Shift_;uniform float _Value_Shift_;uniform vec3 _Blob_Position_;uniform float _Blob_Intensity_;uniform float _Blob_Near_Size_;uniform float _Blob_Far_Size_;uniform float _Blob_Near_Distance_;uniform float _Blob_Far_Distance_;uniform float _Blob_Fade_Length_;uniform float _Blob_Pulse_;uniform float _Blob_Fade_;uniform sampler2D _Blob_Texture_;uniform vec3 _Blob_Position_2_;uniform float _Blob_Near_Size_2_;uniform float _Blob_Pulse_2_;uniform float _Blob_Fade_2_;uniform vec3 _Left_Index_Pos_;uniform vec3 _Right_Index_Pos_;uniform vec3 _Left_Index_Middle_Pos_;uniform vec3 _Right_Index_Middle_Pos_;uniform sampler2D _Decal_;uniform vec2 _Decal_Scale_XY_;uniform bool _Decal_Front_Only_;uniform float _Rim_Intensity_;uniform sampler2D _Rim_Texture_;uniform float _Rim_Hue_Shift_;uniform float _Rim_Saturation_Shift_;uniform float _Rim_Value_Shift_;uniform float _Iridescence_Intensity_;uniform sampler2D _Iridescence_Texture_;uniform bool Use_Global_Left_Index;uniform bool Use_Global_Right_Index;uniform vec4 Global_Left_Index_Tip_Position;uniform vec4 Global_Right_Index_Tip_Position;uniform vec4 Global_Left_Thumb_Tip_Position;uniform vec4 Global_Right_Thumb_Tip_Position;uniform vec4 Global_Left_Index_Middle_Position;uniform vec4 Global_Right_Index_Middle_Position;uniform float Global_Left_Index_Tip_Proximity;uniform float Global_Right_Index_Tip_Proximity;void Blob_Fragment_B180(+sampler2D Blob_Texture,+vec4 Blob_Info1,+vec4 Blob_Info2,+out vec4 Blob_Color)+{float k1=dot(Blob_Info1.xy,Blob_Info1.xy);float k2=dot(Blob_Info2.xy,Blob_Info2.xy);vec3 closer=k1<k2 ? vec3(k1,Blob_Info1.z,Blob_Info1.w) : vec3(k2,Blob_Info2.z,Blob_Info2.w);Blob_Color=closer.z*texture(Blob_Texture,vec2(vec2(sqrt(closer.x),closer.y).x,1.0-vec2(sqrt(closer.x),closer.y).y))*clamp(1.0-closer.x,0.0,1.0);}+void FastLinearTosRGB_B192(+vec4 Linear,+out vec4 sRGB)+{sRGB.rgb=sqrt(clamp(Linear.rgb,0.0,1.0));sRGB.a=Linear.a;}+void Scale_RGB_B209(+vec4 Color,+float Scalar,+out vec4 Result)+{Result=vec4(Scalar,Scalar,Scalar,1)*Color;}+void Fragment_Main_B271(+float Sun_Intensity,+float Sun_Theta,+float Sun_Phi,+vec3 Normal,+vec4 Albedo,+float Fresnel_Reflect,+float Shininess,+vec3 Incident,+vec4 Horizon_Color,+vec4 Sky_Color,+vec4 Ground_Color,+float Indirect_Diffuse,+float Specular,+float Horizon_Power,+float Reflection,+vec4 Reflection_Sample,+vec4 Indirect_Sample,+float Sharpness,+float SSS,+float Subsurface,+vec4 Translucence,+vec4 Rim_Light,+vec4 Iridescence,+out vec4 Result)+{float theta=Sun_Theta*2.0*3.14159;float phi=Sun_Phi*3.14159;vec3 lightDir= vec3(cos(phi)*cos(theta),sin(phi),cos(phi)*sin(theta));float NdotL=max(dot(lightDir,Normal),0.0);vec3 R=reflect(Incident,Normal);float RdotL=max(0.0,dot(R,lightDir));float specular=pow(RdotL,Shininess);specular=mix(specular,smoothstep(0.495*Sharpness,1.0-0.495*Sharpness,specular),Sharpness);vec4 gi=mix(Ground_Color,Sky_Color,Normal.y*0.5+0.5);Result=((Sun_Intensity*NdotL+Indirect_Sample*Indirect_Diffuse+Translucence)*(1.0+SSS*Subsurface))*Albedo*(1.0-Fresnel_Reflect)+(Sun_Intensity*specular*Specular+Fresnel_Reflect*Reflection*Reflection_Sample)+Fresnel_Reflect*Rim_Light+Iridescence;}+void Bulge_B229(+bool Enabled,+vec3 Normal,+vec3 Tangent,+float Bulge_Height,+vec4 UV,+float Bulge_Radius,+vec3 ButtonN,+out vec3 New_Normal)+{vec2 xy=clamp(UV.xy*2.0,vec2(-1,-1),vec2(1,1));vec3 B=(cross(Normal,Tangent));float k=-clamp(1.0-length(xy)/Bulge_Radius,0.0,1.0)*Bulge_Height;k=sin(k*3.14159*0.5);k*=smoothstep(0.9998,0.9999,abs(dot(ButtonN,Normal)));New_Normal=Normal*sqrt(1.0-k*k)+(xy.x*Tangent+xy.y*B)*k;New_Normal=Enabled ? New_Normal : Normal;}+void SSS_B227(+vec3 ButtonN,+vec3 Normal,+vec3 Incident,+out float Result)+{float NdotI=abs(dot(Normal,Incident));float BdotI=abs(dot(ButtonN,Incident));Result=(abs(NdotI-BdotI)); }+void FingerOcclusion_B217(+float Width,+float DistToCenter,+float Fuzz,+float Min_Fuzz,+vec3 Position,+vec3 Forward,+vec3 Nearest,+float Fade_Out,+out float NotInShadow)+{float d=dot((Nearest-Position),Forward);float sh=smoothstep(Width*0.5,Width*0.5+Fuzz*max(d,0.0)+Min_Fuzz,DistToCenter);NotInShadow=1.0-(1.0-sh)*smoothstep(-Fade_Out,0.0,d);}+void FingerOcclusion_B218(+float Width,+float DistToCenter,+float Fuzz,+float Min_Fuzz,+vec3 Position,+vec3 Forward,+vec3 Nearest,+float Fade_Out,+out float NotInShadow)+{float d=dot((Nearest-Position),Forward);float sh=smoothstep(Width*0.5,Width*0.5+Fuzz*max(d,0.0)+Min_Fuzz,DistToCenter);NotInShadow=1.0-(1.0-sh)*smoothstep(-Fade_Out,0.0,d);}+void Scale_Color_B241(+vec4 Color,+float Scalar,+out vec4 Result)+{Result=Scalar*Color;}+void From_HSV_B223(+float Hue,+float Saturation,+float Value,+float Alpha,+out vec4 Color)+{vec4 K=vec4(1.0,2.0/3.0,1.0/3.0,3.0);vec3 p=abs(fract(vec3(Hue,Hue,Hue)+K.xyz)*6.0-K.www);Color.rgb=Value*mix(K.xxx,clamp(p-K.xxx,0.0,1.0),Saturation);Color.a=Alpha;}+void Fast_Fresnel_B272(+float Front_Reflect,+float Edge_Reflect,+float Power,+vec3 Normal,+vec3 Incident,+out float Transmit,+out float Reflect)+{float d=max(-dot(Incident,Normal),0.0);Reflect=Front_Reflect+(Edge_Reflect-Front_Reflect)*pow(1.0-d,Power);Transmit=1.0-Reflect;}+void Mapped_Environment_B201(+sampler2D Reflected_Environment,+sampler2D Indirect_Environment,+vec3 Dir,+out vec4 Reflected_Color,+out vec4 Indirect_Diffuse)+{Reflected_Color=texture(Reflected_Environment,vec2(atan(Dir.z,Dir.x)/3.14159*0.5,asin(Dir.y)/3.14159+0.5));Indirect_Diffuse=texture(Indirect_Environment,vec2(atan(Dir.z,Dir.x)/3.14159*0.5,asin(Dir.y)/3.14159+0.5));}+vec4 SampleEnv_Bid200(vec3 D,vec4 S,vec4 H,vec4 G,float exponent)+{float k=pow(abs(D.y),exponent);vec4 C;if (D.y>0.0) {C=mix(H,S,k);} else {C=mix(H,G,k); }+return C;}+void Sky_Environment_B200(+vec3 Normal,+vec3 Reflected,+vec4 Sky_Color,+vec4 Horizon_Color,+vec4 Ground_Color,+float Horizon_Power,+out vec4 Reflected_Color,+out vec4 Indirect_Color)+{Reflected_Color=SampleEnv_Bid200(Reflected,Sky_Color,Horizon_Color,Ground_Color,Horizon_Power);Indirect_Color=mix(Ground_Color,Sky_Color,Normal.y*0.5+0.5);}+void Min_Segment_Distance_B215(+vec3 P0,+vec3 P1,+vec3 Q0,+vec3 Q1,+out vec3 NearP,+out vec3 NearQ,+out float Distance)+{vec3 u=P1-P0;vec3 v=Q1-Q0;vec3 w=P0-Q0;float a=dot(u,u);float b=dot(u,v);float c=dot(v,v);float d=dot(u,w);float e=dot(v,w);float D=a*c-b*b;float sD=D;float tD=D;float sc,sN,tc,tN;if (D<0.00001) {sN=0.0;sD=1.0;tN=e;tD=c;} else {sN=(b*e-c*d);tN=(a*e-b*d);if (sN<0.0) {sN=0.0;tN=e;tD=c;} else if (sN>sD) {sN=sD;tN=e+b;tD=c;}}+if (tN<0.0) {tN=0.0;if (-d<0.0) {sN=0.0;} else if (-d>a) {sN=sD;} else {sN=-d;sD=a;}} else if (tN>tD) {tN=tD;if ((-d+b)<0.0) {sN=0.0;} else if ((-d+b)>a) {sN=sD;} else {sN=(-d+b);sD=a;}}+sc=abs(sN)<0.000001 ? 0.0 : sN/sD;tc=abs(tN)<0.000001 ? 0.0 : tN/tD;NearP=P0+sc*u;NearQ=Q0+tc*v;Distance=distance(NearP,NearQ);}+void To_XYZ_B224(+vec3 Vec3,+out float X,+out float Y,+out float Z)+{X=Vec3.x;Y=Vec3.y;Z=Vec3.z;}+void Finger_Positions_B214(+vec3 Left_Index_Pos,+vec3 Right_Index_Pos,+vec3 Left_Index_Middle_Pos,+vec3 Right_Index_Middle_Pos,+out vec3 Left_Index,+out vec3 Right_Index,+out vec3 Left_Index_Middle,+out vec3 Right_Index_Middle)+{Left_Index= (Use_Global_Left_Index ? Global_Left_Index_Tip_Position.xyz : Left_Index_Pos);Right_Index= (Use_Global_Right_Index ? Global_Right_Index_Tip_Position.xyz : Right_Index_Pos);Left_Index_Middle= (Use_Global_Left_Index ? Global_Left_Index_Middle_Position.xyz : Left_Index_Middle_Pos);Right_Index_Middle= (Use_Global_Right_Index ? Global_Right_Index_Middle_Position.xyz : Right_Index_Middle_Pos);}+void VaryHSV_B258(+vec3 HSV_In,+float Hue_Shift,+float Saturation_Shift,+float Value_Shift,+out vec3 HSV_Out)+{HSV_Out=vec3(fract(HSV_In.x+Hue_Shift),clamp(HSV_In.y+Saturation_Shift,0.0,1.0),clamp(HSV_In.z+Value_Shift,0.0,1.0));}+void Remap_Range_B264(+float In_Min,+float In_Max,+float Out_Min,+float Out_Max,+float In,+out float Out)+{Out=mix(Out_Min,Out_Max,clamp((In-In_Min)/(In_Max-In_Min),0.0,1.0));}+void To_HSV_B225(+vec4 Color,+out float Hue,+out float Saturation,+out float Value,+out float Alpha,+out vec3 HSV)+{vec4 K=vec4(0.0,-1.0/3.0,2.0/3.0,-1.0);vec4 p=Color.g<Color.b ? vec4(Color.bg,K.wz) : vec4(Color.gb,K.xy);vec4 q=Color.r<p.x ? vec4(p.xyw,Color.r) : vec4(Color.r,p.yzx);float d=q.x-min(q.w,q.y);float e=1.0e-10;Hue=abs(q.z+(q.w-q.y)/(6.0*d+e));Saturation=d/(q.x+e);Value=q.x;Alpha=Color.a;HSV=vec3(Hue,Saturation,Value);}+void Code_B260(+float X,+out float Result)+{Result=(acos(X)/3.14159-0.5)*2.0;}+void Rim_Light_B282(+vec3 Front,+vec3 Normal,+vec3 Incident,+float Rim_Intensity,+sampler2D Texture,+out vec4 Result)+{vec3 R=reflect(Incident,Normal);float RdotF=dot(R,Front);float RdotL=sqrt(1.0-RdotF*RdotF);vec2 UV=vec2(R.y*0.5+0.5,0.5);vec4 Color=texture(Texture,UV);Result=Color;}+void main()+{vec4 Blob_Color_Q180;+#if BLOB_ENABLE+Blob_Fragment_B180(_Blob_Texture_,vExtra2,vExtra3,Blob_Color_Q180);+#else+Blob_Color_Q180=vec4(0,0,0,0);+#endif+vec3 Incident_Q189=normalize(vPosition-cameraPosition);vec3 Normalized_Q188=normalize(vNormal);vec3 Normalized_Q221=normalize(vTangent);vec4 Color_Q233;+#if DECAL_ENABLE+Color_Q233=texture(_Decal_,vUV);+#else+Color_Q233=vec4(0,0,0,0);+#endif+float X_Q240;float Y_Q240;float Z_Q240;float W_Q240;X_Q240=vExtra1.x;Y_Q240=vExtra1.y;Z_Q240=vExtra1.z;W_Q240=vExtra1.w;vec4 Linear_Q193;Linear_Q193.rgb=clamp(_Sky_Color_.rgb*_Sky_Color_.rgb,0.0,1.0);Linear_Q193.a=_Sky_Color_.a;vec4 Linear_Q194;Linear_Q194.rgb=clamp(_Horizon_Color_.rgb*_Horizon_Color_.rgb,0.0,1.0);Linear_Q194.a=_Horizon_Color_.a;vec4 Linear_Q195;Linear_Q195.rgb=clamp(_Ground_Color_.rgb*_Ground_Color_.rgb,0.0,1.0);Linear_Q195.a=_Ground_Color_.a;vec3 Left_Index_Q214;vec3 Right_Index_Q214;vec3 Left_Index_Middle_Q214;vec3 Right_Index_Middle_Q214;Finger_Positions_B214(_Left_Index_Pos_,_Right_Index_Pos_,_Left_Index_Middle_Pos_,_Right_Index_Middle_Pos_,Left_Index_Q214,Right_Index_Q214,Left_Index_Middle_Q214,Right_Index_Middle_Q214);vec4 Linear_Q196;Linear_Q196.rgb=clamp(_Albedo_.rgb*_Albedo_.rgb,0.0,1.0);Linear_Q196.a=_Albedo_.a;vec3 Normalized_Q257=normalize(vBinormal);vec3 Incident_Q220=normalize(vPosition-cameraPosition);vec3 New_Normal_Q229;Bulge_B229(_Bulge_Enabled_,Normalized_Q188,Normalized_Q221,_Bulge_Height_,vColor,_Bulge_Radius_,vBinormal,New_Normal_Q229);float Result_Q227;SSS_B227(vBinormal,New_Normal_Q229,Incident_Q189,Result_Q227);vec4 Result_Q241;Scale_Color_B241(Color_Q233,X_Q240,Result_Q241);float Transmit_Q272;float Reflect_Q272;Fast_Fresnel_B272(_Front_Reflect_,_Edge_Reflect_,_Power_,New_Normal_Q229,Incident_Q189,Transmit_Q272,Reflect_Q272);float Product_Q275=Y_Q240*Y_Q240;vec3 NearP_Q215;vec3 NearQ_Q215;float Distance_Q215;Min_Segment_Distance_B215(Left_Index_Q214,Left_Index_Middle_Q214,vPosition,cameraPosition,NearP_Q215,NearQ_Q215,Distance_Q215);vec3 NearP_Q213;vec3 NearQ_Q213;float Distance_Q213;Min_Segment_Distance_B215(Right_Index_Q214,Right_Index_Middle_Q214,vPosition,cameraPosition,NearP_Q213,NearQ_Q213,Distance_Q213);vec3 Reflected_Q197=reflect(Incident_Q189,New_Normal_Q229);vec4 Product_Q253=Linear_Q196*vec4(1,1,1,1);vec4 Result_Q282;Rim_Light_B282(Normalized_Q257,Normalized_Q188,Incident_Q220,_Rim_Intensity_,_Rim_Texture_,Result_Q282);float Dot_Q222=dot(Incident_Q220, Normalized_Q221);float MaxAB_Q273=max(Reflect_Q272,Product_Q275);float NotInShadow_Q217;+#if OCCLUSION_ENABLED+FingerOcclusion_B217(_Width_,Distance_Q215,_Fuzz_,_Min_Fuzz_,vPosition,vBinormal,NearP_Q215,_Clip_Fade_,NotInShadow_Q217);+#else+NotInShadow_Q217=1.0;+#endif+float NotInShadow_Q218;+#if OCCLUSION_ENABLED+FingerOcclusion_B218(_Width_,Distance_Q213,_Fuzz_,_Min_Fuzz_,vPosition,vBinormal,NearP_Q213,_Clip_Fade_,NotInShadow_Q218);+#else+NotInShadow_Q218=1.0;+#endif+vec4 Reflected_Color_Q201;vec4 Indirect_Diffuse_Q201;+#if ENV_ENABLE+Mapped_Environment_B201(_Reflection_Map_,_Indirect_Environment_,Reflected_Q197,Reflected_Color_Q201,Indirect_Diffuse_Q201);+#else+Reflected_Color_Q201=vec4(0,0,0,1);Indirect_Diffuse_Q201=vec4(0,0,0,1);+#endif+vec4 Reflected_Color_Q200;vec4 Indirect_Color_Q200;+#if SKY_ENABLED+Sky_Environment_B200(New_Normal_Q229,Reflected_Q197,Linear_Q193,Linear_Q194,Linear_Q195,_Horizon_Power_,Reflected_Color_Q200,Indirect_Color_Q200);+#else+Reflected_Color_Q200=vec4(0,0,0,1);Indirect_Color_Q200=vec4(0,0,0,1);+#endif+float Hue_Q225;float Saturation_Q225;float Value_Q225;float Alpha_Q225;vec3 HSV_Q225;To_HSV_B225(Product_Q253,Hue_Q225,Saturation_Q225,Value_Q225,Alpha_Q225,HSV_Q225);float Hue_Q277;float Saturation_Q277;float Value_Q277;float Alpha_Q277;vec3 HSV_Q277;To_HSV_B225(Result_Q282,Hue_Q277,Saturation_Q277,Value_Q277,Alpha_Q277,HSV_Q277);float Result_Q260;Code_B260(Dot_Q222,Result_Q260);float AbsA_Q226=abs(Result_Q260);float MinAB_Q208=min(NotInShadow_Q217,NotInShadow_Q218);vec4 Sum_Q198=Reflected_Color_Q201+Reflected_Color_Q200;vec4 Sum_Q199=Indirect_Diffuse_Q201+Indirect_Color_Q200;vec3 HSV_Out_Q276;VaryHSV_B258(HSV_Q277,_Rim_Hue_Shift_,_Rim_Saturation_Shift_,_Rim_Value_Shift_,HSV_Out_Q276);float Out_Q264;Remap_Range_B264(-1.0,1.0,0.0,1.0,Result_Q260,Out_Q264);float Product_Q256;Product_Q256=AbsA_Q226*_Hue_Shift_;float X_Q278;float Y_Q278;float Z_Q278;To_XYZ_B224(HSV_Out_Q276,X_Q278,Y_Q278,Z_Q278);vec2 Vec2_Q262=vec2(Out_Q264,0.5);vec3 HSV_Out_Q258;VaryHSV_B258(HSV_Q225,Product_Q256,_Saturation_Shift_,_Value_Shift_,HSV_Out_Q258);vec4 Color_Q279;From_HSV_B223(X_Q278,Y_Q278,Z_Q278,0.0,Color_Q279);vec4 Color_Q261;+#if IRIDESCENCE_ENABLED+Color_Q261=texture(_Iridescence_Texture_,Vec2_Q262);+#else+Color_Q261=vec4(0,0,0,0);+#endif+float X_Q224;float Y_Q224;float Z_Q224;To_XYZ_B224(HSV_Out_Q258,X_Q224,Y_Q224,Z_Q224);vec4 Result_Q281=_Rim_Intensity_*Color_Q279;vec4 Result_Q263=_Iridescence_Intensity_*Color_Q261;vec4 Color_Q223;From_HSV_B223(X_Q224,Y_Q224,Z_Q224,0.0,Color_Q223);vec4 Result_Q234=Result_Q241+(1.0-Result_Q241.a)*Color_Q223;vec4 Result_Q271;Fragment_Main_B271(_Sun_Intensity_,_Sun_Theta_,_Sun_Phi_,New_Normal_Q229,Result_Q234,MaxAB_Q273,_Shininess_,Incident_Q189,_Horizon_Color_,_Sky_Color_,_Ground_Color_,_Indirect_Diffuse_,_Specular_,_Horizon_Power_,_Reflection_,Sum_Q198,Sum_Q199,_Sharpness_,Result_Q227,_Subsurface_,vec4(0,0,0,0),Result_Q281,Result_Q263,Result_Q271);vec4 Result_Q209;Scale_RGB_B209(Result_Q271,MinAB_Q208,Result_Q209);vec4 sRGB_Q192;FastLinearTosRGB_B192(Result_Q209,sRGB_Q192);vec4 Result_Q181=Blob_Color_Q180+(1.0-Blob_Color_Q180.a)*sRGB_Q192;vec4 Result_Q190=Result_Q181; Result_Q190.a=1.0;vec4 Out_Color=Result_Q190;float Clip_Threshold=0.001;bool To_sRGB=false;gl_FragColor=Out_Color;}`;+br.ShadersStore[R4] || (br.ShadersStore[R4] = gF);+const F4 = "mrdlSliderThumbVertexShader", mF = `uniform mat4 world;uniform mat4 viewProjection;uniform vec3 cameraPosition;attribute vec3 position;attribute vec3 normal;attribute vec2 uv;+#ifdef TANGENT+attribute vec3 tangent;+#else+const vec3 tangent=vec3(0.);+#endif+uniform float _Radius_;uniform float _Bevel_Front_;uniform float _Bevel_Front_Stretch_;uniform float _Bevel_Back_;uniform float _Bevel_Back_Stretch_;uniform float _Radius_Top_Left_;uniform float _Radius_Top_Right_;uniform float _Radius_Bottom_Left_;uniform float _Radius_Bottom_Right_;uniform bool _Bulge_Enabled_;uniform float _Bulge_Height_;uniform float _Bulge_Radius_;uniform float _Sun_Intensity_;uniform float _Sun_Theta_;uniform float _Sun_Phi_;uniform float _Indirect_Diffuse_;uniform vec4 _Albedo_;uniform float _Specular_;uniform float _Shininess_;uniform float _Sharpness_;uniform float _Subsurface_;uniform vec4 _Left_Color_;uniform vec4 _Right_Color_;uniform float _Reflection_;uniform float _Front_Reflect_;uniform float _Edge_Reflect_;uniform float _Power_;uniform vec4 _Sky_Color_;uniform vec4 _Horizon_Color_;uniform vec4 _Ground_Color_;uniform float _Horizon_Power_;uniform sampler2D _Reflection_Map_;uniform sampler2D _Indirect_Environment_;uniform float _Width_;uniform float _Fuzz_;uniform float _Min_Fuzz_;uniform float _Clip_Fade_;uniform float _Hue_Shift_;uniform float _Saturation_Shift_;uniform float _Value_Shift_;uniform vec3 _Blob_Position_;uniform float _Blob_Intensity_;uniform float _Blob_Near_Size_;uniform float _Blob_Far_Size_;uniform float _Blob_Near_Distance_;uniform float _Blob_Far_Distance_;uniform float _Blob_Fade_Length_;uniform float _Blob_Pulse_;uniform float _Blob_Fade_;uniform sampler2D _Blob_Texture_;uniform vec3 _Blob_Position_2_;uniform float _Blob_Near_Size_2_;uniform float _Blob_Pulse_2_;uniform float _Blob_Fade_2_;uniform vec3 _Left_Index_Pos_;uniform vec3 _Right_Index_Pos_;uniform vec3 _Left_Index_Middle_Pos_;uniform vec3 _Right_Index_Middle_Pos_;uniform sampler2D _Decal_;uniform vec2 _Decal_Scale_XY_;uniform bool _Decal_Front_Only_;uniform float _Rim_Intensity_;uniform sampler2D _Rim_Texture_;uniform float _Rim_Hue_Shift_;uniform float _Rim_Saturation_Shift_;uniform float _Rim_Value_Shift_;uniform float _Iridescence_Intensity_;uniform sampler2D _Iridescence_Texture_;uniform bool Use_Global_Left_Index;uniform bool Use_Global_Right_Index;uniform vec4 Global_Left_Index_Tip_Position;uniform vec4 Global_Right_Index_Tip_Position;uniform vec4 Global_Left_Thumb_Tip_Position;uniform vec4 Global_Right_Thumb_Tip_Position;uniform float Global_Left_Index_Tip_Proximity;uniform float Global_Right_Index_Tip_Proximity;varying vec3 vPosition;varying vec3 vNormal;varying vec2 vUV;varying vec3 vTangent;varying vec3 vBinormal;varying vec4 vColor;varying vec4 vExtra1;varying vec4 vExtra2;varying vec4 vExtra3;void Object_To_World_Pos_B162(+vec3 Pos_Object,+out vec3 Pos_World)+{Pos_World=(world*vec4(Pos_Object,1.0)).xyz;}+void Object_To_World_Normal_B182(+vec3 Nrm_Object,+out vec3 Nrm_World)+{Nrm_World=(vec4(Nrm_Object,0.0)).xyz;}+void Blob_Vertex_B173(+vec3 Position,+vec3 Normal,+vec3 Tangent,+vec3 Bitangent,+vec3 Blob_Position,+float Intensity,+float Blob_Near_Size,+float Blob_Far_Size,+float Blob_Near_Distance,+float Blob_Far_Distance,+float Blob_Fade_Length,+float Blob_Pulse,+float Blob_Fade,+out vec4 Blob_Info)+{vec3 blob= (Use_Global_Left_Index ? Global_Left_Index_Tip_Position.xyz : Blob_Position);vec3 delta=blob-Position;float dist=dot(Normal,delta);float lerpValue=clamp((abs(dist)-Blob_Near_Distance)/(Blob_Far_Distance-Blob_Near_Distance),0.0,1.0);float fadeValue=1.0-clamp((abs(dist)-Blob_Far_Distance)/Blob_Fade_Length,0.0,1.0);float size=Blob_Near_Size+(Blob_Far_Size-Blob_Near_Size)*lerpValue;vec2 blobXY=vec2(dot(delta,Tangent),dot(delta,Bitangent))/(0.0001+size);float Fade=fadeValue*Intensity*Blob_Fade;float Distance=(lerpValue*0.5+0.5)*(1.0-Blob_Pulse);Blob_Info=vec4(blobXY.x,blobXY.y,Distance,Fade);}+void Blob_Vertex_B174(+vec3 Position,+vec3 Normal,+vec3 Tangent,+vec3 Bitangent,+vec3 Blob_Position,+float Intensity,+float Blob_Near_Size,+float Blob_Far_Size,+float Blob_Near_Distance,+float Blob_Far_Distance,+float Blob_Fade_Length,+float Blob_Pulse,+float Blob_Fade,+out vec4 Blob_Info)+{vec3 blob= (Use_Global_Right_Index ? Global_Right_Index_Tip_Position.xyz : Blob_Position);vec3 delta=blob-Position;float dist=dot(Normal,delta);float lerpValue=clamp((abs(dist)-Blob_Near_Distance)/(Blob_Far_Distance-Blob_Near_Distance),0.0,1.0);float fadeValue=1.0-clamp((abs(dist)-Blob_Far_Distance)/Blob_Fade_Length,0.0,1.0);float size=Blob_Near_Size+(Blob_Far_Size-Blob_Near_Size)*lerpValue;vec2 blobXY=vec2(dot(delta,Tangent),dot(delta,Bitangent))/(0.0001+size);float Fade=fadeValue*Intensity*Blob_Fade;float Distance=(lerpValue*0.5+0.5)*(1.0-Blob_Pulse);Blob_Info=vec4(blobXY.x,blobXY.y,Distance,Fade);}+void Move_Verts_B280(+float Anisotropy,+vec3 P,+float Radius,+float Bevel,+vec3 Normal_Object,+float ScaleZ,+float Stretch,+out vec3 New_P,+out vec2 New_UV,+out float Radial_Gradient,+out vec3 Radial_Dir,+out vec3 New_Normal)+{vec2 UV=P.xy*2.0+0.5;vec2 center=clamp(UV,0.0,1.0);vec2 delta=UV-center;float deltad=(length(delta)*2.0);float f=(Bevel+(Radius-Bevel)*Stretch)/Radius;float innerd=clamp(deltad*2.0,0.0,1.0);float outerd=clamp(deltad*2.0-1.0,0.0,1.0);float bevelAngle=outerd*3.14159*0.5;float sinb=sin(bevelAngle);float cosb=cos(bevelAngle);float beveld=(1.0-f)*innerd+f*sinb;float br=outerd;vec2 r2=2.0*vec2(Radius/Anisotropy,Radius);float dir=P.z<0.0001 ? 1.0 : -1.0;New_UV=center+r2*((0.5-center)+normalize(delta+vec2(0.0,0.000001))*beveld*0.5);New_P=vec3(New_UV-0.5,P.z+dir*(1.0-cosb)*Bevel*ScaleZ);Radial_Gradient=clamp((deltad-0.5)*2.0,0.0,1.0);Radial_Dir=vec3(delta*r2,0.0);vec3 beveledNormal=cosb*Normal_Object+sinb*vec3(delta.x,delta.y,0.0);New_Normal=Normal_Object.z==0.0 ? Normal_Object : beveledNormal;}+void Object_To_World_Dir_B210(+vec3 Dir_Object,+out vec3 Normal_World,+out vec3 Normal_World_N,+out float Normal_Length)+{Normal_World=(world*vec4(Dir_Object,0.0)).xyz;Normal_Length=length(Normal_World);Normal_World_N=Normal_World/Normal_Length;}+void To_XYZ_B228(+vec3 Vec3,+out float X,+out float Y,+out float Z)+{X=Vec3.x;Y=Vec3.y;Z=Vec3.z;}+void Conditional_Float_B243(+bool Which,+float If_True,+float If_False,+out float Result)+{Result=Which ? If_True : If_False;}+void Object_To_World_Dir_B178(+vec3 Dir_Object,+out vec3 Binormal_World,+out vec3 Binormal_World_N,+out float Binormal_Length)+{Binormal_World=(world*vec4(Dir_Object,0.0)).xyz;Binormal_Length=length(Binormal_World);Binormal_World_N=Binormal_World/Binormal_Length;}+void Pick_Radius_B219(+float Radius,+float Radius_Top_Left,+float Radius_Top_Right,+float Radius_Bottom_Left,+float Radius_Bottom_Right,+vec3 Position,+out float Result)+{bool whichY=Position.y>0.0;Result=Position.x<0.0 ? (whichY ? Radius_Top_Left : Radius_Bottom_Left) : (whichY ? Radius_Top_Right : Radius_Bottom_Right);Result*=Radius;}+void Conditional_Float_B186(+bool Which,+float If_True,+float If_False,+out float Result)+{Result=Which ? If_True : If_False;}+void Greater_Than_B187(+float Left,+float Right,+out bool Not_Greater_Than,+out bool Greater_Than)+{Greater_Than=Left>Right;Not_Greater_Than=!Greater_Than;}+void Remap_Range_B255(+float In_Min,+float In_Max,+float Out_Min,+float Out_Max,+float In,+out float Out)+{Out=mix(Out_Min,Out_Max,clamp((In-In_Min)/(In_Max-In_Min),0.0,1.0));}+void main()+{vec2 XY_Q235;XY_Q235=(uv-vec2(0.5,0.5))*_Decal_Scale_XY_+vec2(0.5,0.5);vec3 Tangent_World_Q177;vec3 Tangent_World_N_Q177;float Tangent_Length_Q177;Tangent_World_Q177=(world*vec4(vec3(1,0,0),0.0)).xyz;Tangent_Length_Q177=length(Tangent_World_Q177);Tangent_World_N_Q177=Tangent_World_Q177/Tangent_Length_Q177;vec3 Normal_World_Q210;vec3 Normal_World_N_Q210;float Normal_Length_Q210;Object_To_World_Dir_B210(vec3(0,0,1),Normal_World_Q210,Normal_World_N_Q210,Normal_Length_Q210);float X_Q228;float Y_Q228;float Z_Q228;To_XYZ_B228(position,X_Q228,Y_Q228,Z_Q228);vec3 Nrm_World_Q176;Nrm_World_Q176=normalize((world*vec4(normal,0.0)).xyz);vec3 Binormal_World_Q178;vec3 Binormal_World_N_Q178;float Binormal_Length_Q178;Object_To_World_Dir_B178(vec3(0,1,0),Binormal_World_Q178,Binormal_World_N_Q178,Binormal_Length_Q178);float Anisotropy_Q179=Tangent_Length_Q177/Binormal_Length_Q178;float Result_Q219;Pick_Radius_B219(_Radius_,_Radius_Top_Left_,_Radius_Top_Right_,_Radius_Bottom_Left_,_Radius_Bottom_Right_,position,Result_Q219);float Anisotropy_Q203=Binormal_Length_Q178/Normal_Length_Q210;bool Not_Greater_Than_Q187;bool Greater_Than_Q187;Greater_Than_B187(Z_Q228,0.0,Not_Greater_Than_Q187,Greater_Than_Q187);vec4 Linear_Q251;Linear_Q251.rgb=clamp(_Left_Color_.rgb*_Left_Color_.rgb,0.0,1.0);Linear_Q251.a=_Left_Color_.a;vec4 Linear_Q252;Linear_Q252.rgb=clamp(_Right_Color_.rgb*_Right_Color_.rgb,0.0,1.0);Linear_Q252.a=_Right_Color_.a;vec3 Difference_Q211=vec3(0,0,0)-Normal_World_N_Q210;vec4 Out_Color_Q184=vec4(X_Q228,Y_Q228,Z_Q228,1);float Result_Q186;Conditional_Float_B186(Greater_Than_Q187,_Bevel_Back_,_Bevel_Front_,Result_Q186);float Result_Q244;Conditional_Float_B186(Greater_Than_Q187,_Bevel_Back_Stretch_,_Bevel_Front_Stretch_,Result_Q244);vec3 New_P_Q280;vec2 New_UV_Q280;float Radial_Gradient_Q280;vec3 Radial_Dir_Q280;vec3 New_Normal_Q280;Move_Verts_B280(Anisotropy_Q179,position,Result_Q219,Result_Q186,normal,Anisotropy_Q203,Result_Q244,New_P_Q280,New_UV_Q280,Radial_Gradient_Q280,Radial_Dir_Q280,New_Normal_Q280);float X_Q248;float Y_Q248;X_Q248=New_UV_Q280.x;Y_Q248=New_UV_Q280.y;vec3 Pos_World_Q162;Object_To_World_Pos_B162(New_P_Q280,Pos_World_Q162);vec3 Nrm_World_Q182;Object_To_World_Normal_B182(New_Normal_Q280,Nrm_World_Q182);vec4 Blob_Info_Q173;+#if BLOB_ENABLE+Blob_Vertex_B173(Pos_World_Q162,Nrm_World_Q176,Tangent_World_N_Q177,Binormal_World_N_Q178,_Blob_Position_,_Blob_Intensity_,_Blob_Near_Size_,_Blob_Far_Size_,_Blob_Near_Distance_,_Blob_Far_Distance_,_Blob_Fade_Length_,_Blob_Pulse_,_Blob_Fade_,Blob_Info_Q173);+#else+Blob_Info_Q173=vec4(0,0,0,0);+#endif+vec4 Blob_Info_Q174;+#if BLOB_ENABLE_2+Blob_Vertex_B174(Pos_World_Q162,Nrm_World_Q176,Tangent_World_N_Q177,Binormal_World_N_Q178,_Blob_Position_2_,_Blob_Intensity_,_Blob_Near_Size_2_,_Blob_Far_Size_,_Blob_Near_Distance_,_Blob_Far_Distance_,_Blob_Fade_Length_,_Blob_Pulse_2_,_Blob_Fade_2_,Blob_Info_Q174);+#else+Blob_Info_Q174=vec4(0,0,0,0);+#endif+float Out_Q255;Remap_Range_B255(0.0,1.0,0.0,1.0,X_Q248,Out_Q255);float X_Q236;float Y_Q236;float Z_Q236;To_XYZ_B228(Nrm_World_Q182,X_Q236,Y_Q236,Z_Q236);vec4 Color_At_T_Q247=mix(Linear_Q251,Linear_Q252,Out_Q255);float Minus_F_Q237=-Z_Q236;float R_Q249;float G_Q249;float B_Q249;float A_Q249;R_Q249=Color_At_T_Q247.r; G_Q249=Color_At_T_Q247.g; B_Q249=Color_At_T_Q247.b; A_Q249=Color_At_T_Q247.a;float ClampF_Q238=clamp(0.0,Minus_F_Q237,1.0);float Result_Q243;Conditional_Float_B243(_Decal_Front_Only_,ClampF_Q238,1.0,Result_Q243);vec4 Vec4_Q239=vec4(Result_Q243,Radial_Gradient_Q280,G_Q249,B_Q249);vec3 Position=Pos_World_Q162;vec3 Normal=Nrm_World_Q182;vec2 UV=XY_Q235;vec3 Tangent=Tangent_World_N_Q177;vec3 Binormal=Difference_Q211;vec4 Color=Out_Color_Q184;vec4 Extra1=Vec4_Q239;vec4 Extra2=Blob_Info_Q173;vec4 Extra3=Blob_Info_Q174;gl_Position=viewProjection*vec4(Position,1);vPosition=Position;vNormal=Normal;vUV=UV;vTangent=Tangent;vBinormal=Binormal;vColor=Color;vExtra1=Extra1;vExtra2=Extra2;vExtra3=Extra3;}`;+br.ShadersStore[F4] || (br.ShadersStore[F4] = mF);+class bF extends hc {+  constructor() {+    super(), this.SKY_ENABLED = !0, this.BLOB_ENABLE_2 = !0, this.IRIDESCENCE_ENABLED = !0, this._needNormals = !0, this._needUVs = !0, this.rebuild();+  }+}+class Ct extends uc {+  constructor(i, d) {+    super(i, d), this.radius = 0.157, this.bevelFront = 0.065, this.bevelFrontStretch = 0.077, this.bevelBack = 0.031, this.bevelBackStretch = 0, this.radiusTopLeft = 1, this.radiusTopRight = 1, this.radiusBottomLeft = 1, this.radiusBottomRight = 1, this.bulgeEnabled = !1, this.bulgeHeight = -0.323, this.bulgeRadius = 0.73, this.sunIntensity = 2, this.sunTheta = 0.937, this.sunPhi = 0.555, this.indirectDiffuse = 1, this.albedo = new Gr(0.0117647, 0.505882, 0.996078, 1), this.specular = 0, this.shininess = 10, this.sharpness = 0, this.subsurface = 0.31, this.leftGradientColor = new Gr(0.0117647, 0.505882, 0.996078, 1), this.rightGradientColor = new Gr(0.0117647, 0.505882, 0.996078, 1), this.reflection = 0.749, this.frontReflect = 0, this.edgeReflect = 0.09, this.power = 8.1, this.skyColor = new Gr(0.0117647, 0.960784, 0.996078, 1), this.horizonColor = new Gr(0.0117647, 0.333333, 0.996078, 1), this.groundColor = new Gr(0, 0.254902, 0.996078, 1), this.horizonPower = 1, this.width = 0.02, this.fuzz = 0.5, this.minFuzz = 1e-3, this.clipFade = 0.01, this.hueShift = 0, this.saturationShift = 0, this.valueShift = 0, this.blobPosition = new Se(0, 0, 0.1), this.blobIntensity = 0.5, this.blobNearSize = 0.01, this.blobFarSize = 0.03, this.blobNearDistance = 0, this.blobFarDistance = 0.08, this.blobFadeLength = 0.576, this.blobPulse = 0, this.blobFade = 1, this.blobPosition2 = new Se(0.2, 0, 0.1), this.blobNearSize2 = 0.01, this.blobPulse2 = 0, this.blobFade2 = 1, this.blobTexture = new Wr("", this.getScene()), this.leftIndexPosition = new Se(0, 0, 1), this.rightIndexPosition = new Se(-1, -1, -1), this.leftIndexMiddlePosition = new Se(0, 0, 0), this.rightIndexMiddlePosition = new Se(0, 0, 0), this.decalScaleXY = new mo(1.5, 1.5), this.decalFrontOnly = !0, this.rimIntensity = 0.287, this.rimHueShift = 0, this.rimSaturationShift = 0, this.rimValueShift = -1, this.iridescenceIntensity = 0, this.useGlobalLeftIndex = 1, this.useGlobalRightIndex = 1, this.globalLeftIndexTipProximity = 0, this.globalRightIndexTipProximity = 0, this.globalLeftIndexTipPosition = new fi(0.5, 0, -0.55, 1), this.globaRightIndexTipPosition = new fi(0, 0, 0, 1), this.globalLeftThumbTipPosition = new fi(0.5, 0, -0.55, 1), this.globalRightThumbTipPosition = new fi(0, 0, 0, 1), this.globalLeftIndexMiddlePosition = new fi(0.5, 0, -0.55, 1), this.globalRightIndexMiddlePosition = new fi(0, 0, 0, 1), this.alphaMode = Is.ALPHA_DISABLE, this.backFaceCulling = !1;+    const g = Lr.GetAssetUrl(Ct.BLUE_GRADIENT_TEXTURE_URL);+    this._blueGradientTexture = new Wr(g, d, !0, !1, Wr.NEAREST_SAMPLINGMODE), this._decalTexture = new Wr("", this.getScene()), this._reflectionMapTexture = new Wr("", this.getScene()), this._indirectEnvTexture = new Wr("", this.getScene());+  }+  needAlphaBlending() {+    return !1;+  }+  needAlphaTesting() {+    return !1;+  }+  getAlphaTestTexture() {+    return null;+  }+  // Methods+  isReadyForSubMesh(i, d) {+    const g = d._drawWrapper;+    if (this.isFrozen && g.effect && g._wasPreviouslyReady)+      return !0;+    d.materialDefines || (d.materialDefines = new bF());+    const y = d.materialDefines, M = this.getScene();+    if (!this._blueGradientTexture.isReady())+      return !1;+    if (this._isReadyForSubMesh(d))+      return !0;+    const N = M.getEngine();+    if (vd(i, y, !1, !1), y.isDirty) {+      y.markAsProcessed(), M.resetCachedMaterial();+      const O = new _d();+      y.FOG && O.addFallback(1, "FOG"), wd(y, O), y.IMAGEPROCESSINGPOSTPROCESS = M.imageProcessingConfiguration.applyByPostProcess;+      const F = [Yt.PositionKind];+      y.NORMAL && F.push(Yt.NormalKind), y.UV1 && F.push(Yt.UVKind), y.UV2 && F.push(Yt.UV2Kind), y.VERTEXCOLOR && F.push(Yt.ColorKind), y.TANGENT && F.push(Yt.TangentKind), yd(F, y);+      const ne = "mrdlSliderThumb", $ = y.toString(), Q = [+        "world",+        "viewProjection",+        "cameraPosition",+        "_Radius_",+        "_Bevel_Front_",+        "_Bevel_Front_Stretch_",+        "_Bevel_Back_",+        "_Bevel_Back_Stretch_",+        "_Radius_Top_Left_",+        "_Radius_Top_Right_",+        "_Radius_Bottom_Left_",+        "_Radius_Bottom_Right_",+        "_Bulge_Enabled_",+        "_Bulge_Height_",+        "_Bulge_Radius_",+        "_Sun_Intensity_",+        "_Sun_Theta_",+        "_Sun_Phi_",+        "_Indirect_Diffuse_",+        "_Albedo_",+        "_Specular_",+        "_Shininess_",+        "_Sharpness_",+        "_Subsurface_",+        "_Left_Color_",+        "_Right_Color_",+        "_Reflection_",+        "_Front_Reflect_",+        "_Edge_Reflect_",+        "_Power_",+        "_Sky_Color_",+        "_Horizon_Color_",+        "_Ground_Color_",+        "_Horizon_Power_",+        "_Reflection_Map_",+        "_Indirect_Environment_",+        "_Width_",+        "_Fuzz_",+        "_Min_Fuzz_",+        "_Clip_Fade_",+        "_Hue_Shift_",+        "_Saturation_Shift_",+        "_Value_Shift_",+        "_Blob_Position_",+        "_Blob_Intensity_",+        "_Blob_Near_Size_",+        "_Blob_Far_Size_",+        "_Blob_Near_Distance_",+        "_Blob_Far_Distance_",+        "_Blob_Fade_Length_",+        "_Blob_Pulse_",+        "_Blob_Fade_",+        "_Blob_Texture_",+        "_Blob_Position_2_",+        "_Blob_Near_Size_2_",+        "_Blob_Pulse_2_",+        "_Blob_Fade_2_",+        "_Left_Index_Pos_",+        "_Right_Index_Pos_",+        "_Left_Index_Middle_Pos_",+        "_Right_Index_Middle_Pos_",+        "_Decal_",+        "_Decal_Scale_XY_",+        "_Decal_Front_Only_",+        "_Rim_Intensity_",+        "_Rim_Texture_",+        "_Rim_Hue_Shift_",+        "_Rim_Saturation_Shift_",+        "_Rim_Value_Shift_",+        "_Iridescence_Intensity_",+        "_Iridescence_Texture_",+        "Use_Global_Left_Index",+        "Use_Global_Right_Index",+        "Global_Left_Index_Tip_Position",+        "Global_Right_Index_Tip_Position",+        "Global_Left_Thumb_Tip_Position",+        "Global_Right_Thumb_Tip_Position",+        "Global_Left_Index_Middle_Position;",+        "Global_Right_Index_Middle_Position",+        "Global_Left_Index_Tip_Proximity",+        "Global_Right_Index_Tip_Proximity"+      ], X = ["_Rim_Texture_", "_Iridescence_Texture_"], he = [];+      fc({+        uniformsNames: Q,+        uniformBuffersNames: he,+        samplers: X,+        defines: y,+        maxSimultaneousLights: 4+      }), d.setEffect(M.getEngine().createEffect(ne, {+        attributes: F,+        uniformsNames: Q,+        uniformBuffersNames: he,+        samplers: X,+        defines: $,+        fallbacks: O,+        onCompiled: this.onCompiled,+        onError: this.onError,+        indexParameters: { maxSimultaneousLights: 4 }+      }, N), y);+    }+    return !d.effect || !d.effect.isReady() ? !1 : (y._renderId = M.getRenderId(), g._wasPreviouslyReady = !0, !0);+  }+  bindForSubMesh(i, d, g) {+    if (!g.materialDefines)+      return;+    const M = g.effect;+    M && (this._activeEffect = M, this.bindOnlyWorldMatrix(i), this._activeEffect.setMatrix("viewProjection", this.getScene().getTransformMatrix()), this._activeEffect.setVector3("cameraPosition", this.getScene().activeCamera.position), this._activeEffect.setFloat("_Radius_", this.radius), this._activeEffect.setFloat("_Bevel_Front_", this.bevelFront), this._activeEffect.setFloat("_Bevel_Front_Stretch_", this.bevelFrontStretch), this._activeEffect.setFloat("_Bevel_Back_", this.bevelBack), this._activeEffect.setFloat("_Bevel_Back_Stretch_", this.bevelBackStretch), this._activeEffect.setFloat("_Radius_Top_Left_", this.radiusTopLeft), this._activeEffect.setFloat("_Radius_Top_Right_", this.radiusTopRight), this._activeEffect.setFloat("_Radius_Bottom_Left_", this.radiusBottomLeft), this._activeEffect.setFloat("_Radius_Bottom_Right_", this.radiusBottomRight), this._activeEffect.setFloat("_Bulge_Enabled_", this.bulgeEnabled ? 1 : 0), this._activeEffect.setFloat("_Bulge_Height_", this.bulgeHeight), this._activeEffect.setFloat("_Bulge_Radius_", this.bulgeRadius), this._activeEffect.setFloat("_Sun_Intensity_", this.sunIntensity), this._activeEffect.setFloat("_Sun_Theta_", this.sunTheta), this._activeEffect.setFloat("_Sun_Phi_", this.sunPhi), this._activeEffect.setFloat("_Indirect_Diffuse_", this.indirectDiffuse), this._activeEffect.setDirectColor4("_Albedo_", this.albedo), this._activeEffect.setFloat("_Specular_", this.specular), this._activeEffect.setFloat("_Shininess_", this.shininess), this._activeEffect.setFloat("_Sharpness_", this.sharpness), this._activeEffect.setFloat("_Subsurface_", this.subsurface), this._activeEffect.setDirectColor4("_Left_Color_", this.leftGradientColor), this._activeEffect.setDirectColor4("_Right_Color_", this.rightGradientColor), this._activeEffect.setFloat("_Reflection_", this.reflection), this._activeEffect.setFloat("_Front_Reflect_", this.frontReflect), this._activeEffect.setFloat("_Edge_Reflect_", this.edgeReflect), this._activeEffect.setFloat("_Power_", this.power), this._activeEffect.setDirectColor4("_Sky_Color_", this.skyColor), this._activeEffect.setDirectColor4("_Horizon_Color_", this.horizonColor), this._activeEffect.setDirectColor4("_Ground_Color_", this.groundColor), this._activeEffect.setFloat("_Horizon_Power_", this.horizonPower), this._activeEffect.setTexture("_Reflection_Map_", this._reflectionMapTexture), this._activeEffect.setTexture("_Indirect_Environment_", this._indirectEnvTexture), this._activeEffect.setFloat("_Width_", this.width), this._activeEffect.setFloat("_Fuzz_", this.fuzz), this._activeEffect.setFloat("_Min_Fuzz_", this.minFuzz), this._activeEffect.setFloat("_Clip_Fade_", this.clipFade), this._activeEffect.setFloat("_Hue_Shift_", this.hueShift), this._activeEffect.setFloat("_Saturation_Shift_", this.saturationShift), this._activeEffect.setFloat("_Value_Shift_", this.valueShift), this._activeEffect.setVector3("_Blob_Position_", this.blobPosition), this._activeEffect.setFloat("_Blob_Intensity_", this.blobIntensity), this._activeEffect.setFloat("_Blob_Near_Size_", this.blobNearSize), this._activeEffect.setFloat("_Blob_Far_Size_", this.blobFarSize), this._activeEffect.setFloat("_Blob_Near_Distance_", this.blobNearDistance), this._activeEffect.setFloat("_Blob_Far_Distance_", this.blobFarDistance), this._activeEffect.setFloat("_Blob_Fade_Length_", this.blobFadeLength), this._activeEffect.setFloat("_Blob_Pulse_", this.blobPulse), this._activeEffect.setFloat("_Blob_Fade_", this.blobFade), this._activeEffect.setTexture("_Blob_Texture_", this.blobTexture), this._activeEffect.setVector3("_Blob_Position_2_", this.blobPosition2), this._activeEffect.setFloat("_Blob_Near_Size_2_", this.blobNearSize2), this._activeEffect.setFloat("_Blob_Pulse_2_", this.blobPulse2), this._activeEffect.setFloat("_Blob_Fade_2_", this.blobFade2), this._activeEffect.setVector3("_Left_Index_Pos_", this.leftIndexPosition), this._activeEffect.setVector3("_Right_Index_Pos_", this.rightIndexPosition), this._activeEffect.setVector3("_Left_Index_Middle_Pos_", this.leftIndexMiddlePosition), this._activeEffect.setVector3("_Right_Index_Middle_Pos_", this.rightIndexMiddlePosition), this._activeEffect.setTexture("_Decal_", this._decalTexture), this._activeEffect.setVector2("_Decal_Scale_XY_", this.decalScaleXY), this._activeEffect.setFloat("_Decal_Front_Only_", this.decalFrontOnly ? 1 : 0), this._activeEffect.setFloat("_Rim_Intensity_", this.rimIntensity), this._activeEffect.setTexture("_Rim_Texture_", this._blueGradientTexture), this._activeEffect.setFloat("_Rim_Hue_Shift_", this.rimHueShift), this._activeEffect.setFloat("_Rim_Saturation_Shift_", this.rimSaturationShift), this._activeEffect.setFloat("_Rim_Value_Shift_", this.rimValueShift), this._activeEffect.setFloat("_Iridescence_Intensity_", this.iridescenceIntensity), this._activeEffect.setTexture("_Iridescence_Texture_", this._blueGradientTexture), this._activeEffect.setFloat("Use_Global_Left_Index", this.useGlobalLeftIndex), this._activeEffect.setFloat("Use_Global_Right_Index", this.useGlobalRightIndex), this._activeEffect.setVector4("Global_Left_Index_Tip_Position", this.globalLeftIndexTipPosition), this._activeEffect.setVector4("Global_Right_Index_Tip_Position", this.globaRightIndexTipPosition), this._activeEffect.setVector4("Global_Left_Thumb_Tip_Position", this.globalLeftThumbTipPosition), this._activeEffect.setVector4("Global_Right_Thumb_Tip_Position", this.globalRightThumbTipPosition), this._activeEffect.setVector4("Global_Left_Index_Middle_Position", this.globalLeftIndexMiddlePosition), this._activeEffect.setVector4("Global_Right_Index_Middle_Position", this.globalRightIndexMiddlePosition), this._activeEffect.setFloat("Global_Left_Index_Tip_Proximity", this.globalLeftIndexTipProximity), this._activeEffect.setFloat("Global_Right_Index_Tip_Proximity", this.globalRightIndexTipProximity), this._afterBind(d, this._activeEffect, g));+  }+  /**+   * Get the list of animatables in the material.+   * @returns the list of animatables object used in the material+   */+  getAnimatables() {+    return [];+  }+  dispose(i) {+    super.dispose(i), this._reflectionMapTexture.dispose(), this._indirectEnvTexture.dispose(), this._blueGradientTexture.dispose(), this._decalTexture.dispose();+  }+  clone(i) {+    return Eo.Clone(() => new Ct(i, this.getScene()), this);+  }+  serialize() {+    const i = super.serialize();+    return i.customType = "BABYLON.MRDLSliderThumbMaterial", i;+  }+  getClassName() {+    return "MRDLSliderThumbMaterial";+  }+  // Statics+  static Parse(i, d, g) {+    return Eo.Parse(() => new Ct(i.name, d), i, d, g);+  }+}+Ct.BLUE_GRADIENT_TEXTURE_URL = "https://assets.babylonjs.com/core/MRTK/MRDL/mrtk-mrdl-blue-gradient.png";+q([+  H()+], Ct.prototype, "radius", void 0);+q([+  H()+], Ct.prototype, "bevelFront", void 0);+q([+  H()+], Ct.prototype, "bevelFrontStretch", void 0);+q([+  H()+], Ct.prototype, "bevelBack", void 0);+q([+  H()+], Ct.prototype, "bevelBackStretch", void 0);+q([+  H()+], Ct.prototype, "radiusTopLeft", void 0);+q([+  H()+], Ct.prototype, "radiusTopRight", void 0);+q([+  H()+], Ct.prototype, "radiusBottomLeft", void 0);+q([+  H()+], Ct.prototype, "radiusBottomRight", void 0);+q([+  H()+], Ct.prototype, "bulgeEnabled", void 0);+q([+  H()+], Ct.prototype, "bulgeHeight", void 0);+q([+  H()+], Ct.prototype, "bulgeRadius", void 0);+q([+  H()+], Ct.prototype, "sunIntensity", void 0);+q([+  H()+], Ct.prototype, "sunTheta", void 0);+q([+  H()+], Ct.prototype, "sunPhi", void 0);+q([+  H()+], Ct.prototype, "indirectDiffuse", void 0);+q([+  H()+], Ct.prototype, "albedo", void 0);+q([+  H()+], Ct.prototype, "specular", void 0);+q([+  H()+], Ct.prototype, "shininess", void 0);+q([+  H()+], Ct.prototype, "sharpness", void 0);+q([+  H()+], Ct.prototype, "subsurface", void 0);+q([+  H()+], Ct.prototype, "leftGradientColor", void 0);+q([+  H()+], Ct.prototype, "rightGradientColor", void 0);+q([+  H()+], Ct.prototype, "reflection", void 0);+q([+  H()+], Ct.prototype, "frontReflect", void 0);+q([+  H()+], Ct.prototype, "edgeReflect", void 0);+q([+  H()+], Ct.prototype, "power", void 0);+q([+  H()+], Ct.prototype, "skyColor", void 0);+q([+  H()+], Ct.prototype, "horizonColor", void 0);+q([+  H()+], Ct.prototype, "groundColor", void 0);+q([+  H()+], Ct.prototype, "horizonPower", void 0);+q([+  H()+], Ct.prototype, "width", void 0);+q([+  H()+], Ct.prototype, "fuzz", void 0);+q([+  H()+], Ct.prototype, "minFuzz", void 0);+q([+  H()+], Ct.prototype, "clipFade", void 0);+q([+  H()+], Ct.prototype, "hueShift", void 0);+q([+  H()+], Ct.prototype, "saturationShift", void 0);+q([+  H()+], Ct.prototype, "valueShift", void 0);+q([+  H()+], Ct.prototype, "blobPosition", void 0);+q([+  H()+], Ct.prototype, "blobIntensity", void 0);+q([+  H()+], Ct.prototype, "blobNearSize", void 0);+q([+  H()+], Ct.prototype, "blobFarSize", void 0);+q([+  H()+], Ct.prototype, "blobNearDistance", void 0);+q([+  H()+], Ct.prototype, "blobFarDistance", void 0);+q([+  H()+], Ct.prototype, "blobFadeLength", void 0);+q([+  H()+], Ct.prototype, "blobPulse", void 0);+q([+  H()+], Ct.prototype, "blobFade", void 0);+q([+  H()+], Ct.prototype, "blobPosition2", void 0);+q([+  H()+], Ct.prototype, "blobNearSize2", void 0);+q([+  H()+], Ct.prototype, "blobPulse2", void 0);+q([+  H()+], Ct.prototype, "blobFade2", void 0);+q([+  H()+], Ct.prototype, "blobTexture", void 0);+q([+  H()+], Ct.prototype, "leftIndexPosition", void 0);+q([+  H()+], Ct.prototype, "rightIndexPosition", void 0);+q([+  H()+], Ct.prototype, "leftIndexMiddlePosition", void 0);+q([+  H()+], Ct.prototype, "rightIndexMiddlePosition", void 0);+q([+  H()+], Ct.prototype, "decalScaleXY", void 0);+q([+  H()+], Ct.prototype, "decalFrontOnly", void 0);+q([+  H()+], Ct.prototype, "rimIntensity", void 0);+q([+  H()+], Ct.prototype, "rimHueShift", void 0);+q([+  H()+], Ct.prototype, "rimSaturationShift", void 0);+q([+  H()+], Ct.prototype, "rimValueShift", void 0);+q([+  H()+], Ct.prototype, "iridescenceIntensity", void 0);+kr("BABYLON.GUI.MRDLSliderThumbMaterial", Ct);+const q4 = "mrdlBackplatePixelShader", vF = `uniform vec3 cameraPosition;varying vec3 vPosition;varying vec3 vNormal;varying vec2 vUV;varying vec3 vTangent;varying vec3 vBinormal;varying vec4 vExtra1;varying vec4 vExtra2;uniform float _Radius_;uniform float _Line_Width_;uniform bool _Absolute_Sizes_;uniform float _Filter_Width_;uniform vec4 _Base_Color_;uniform vec4 _Line_Color_;uniform float _Radius_Top_Left_;uniform float _Radius_Top_Right_;uniform float _Radius_Bottom_Left_;uniform float _Radius_Bottom_Right_;uniform float _Rate_;uniform vec4 _Highlight_Color_;uniform float _Highlight_Width_;uniform vec4 _Highlight_Transform_;uniform float _Highlight_;uniform float _Iridescence_Intensity_;uniform float _Iridescence_Edge_Intensity_;uniform vec4 _Iridescence_Tint_;uniform sampler2D _Iridescent_Map_;uniform float _Angle_;uniform bool _Reflected_;uniform float _Frequency_;uniform float _Vertical_Offset_;uniform vec4 _Gradient_Color_;uniform vec4 _Top_Left_;uniform vec4 _Top_Right_;uniform vec4 _Bottom_Left_;uniform vec4 _Bottom_Right_;uniform float _Edge_Width_;uniform float _Edge_Power_;uniform float _Line_Gradient_Blend_;uniform float _Fade_Out_;void FastLinearTosRGB_B353(+vec4 Linear,+out vec4 sRGB)+{sRGB.rgb=sqrt(clamp(Linear.rgb,0.0,1.0));sRGB.a=Linear.a;}+void Round_Rect_Fragment_B332(+float Radius,+float Line_Width,+vec4 Line_Color,+float Filter_Width,+vec2 UV,+float Line_Visibility,+vec4 Rect_Parms,+vec4 Fill_Color,+out vec4 Color)+{float d=length(max(abs(UV)-Rect_Parms.xy,0.0));float dx=max(fwidth(d)*Filter_Width,0.00001);float g=min(Rect_Parms.z,Rect_Parms.w);float dgrad=max(fwidth(g)*Filter_Width,0.00001);float Inside_Rect=clamp(g/dgrad,0.0,1.0);float inner=clamp((d+dx*0.5-max(Radius-Line_Width,d-dx*0.5))/dx,0.0,1.0);Color=clamp(mix(Fill_Color,Line_Color,inner),0.0,1.0)*Inside_Rect;}+void Iridescence_B343(+vec3 Position,+vec3 Normal,+vec2 UV,+vec3 Axis,+vec3 Eye,+vec4 Tint,+sampler2D Texture,+bool Reflected,+float Frequency,+float Vertical_Offset,+out vec4 Color)+{vec3 i=normalize(Position-Eye);vec3 r=reflect(i,Normal);float idota=dot(i,Axis);float idotr=dot(i,r);float x=Reflected ? idotr : idota;vec2 xy;xy.x=fract((x*Frequency+1.0)*0.5+UV.y*Vertical_Offset);xy.y=0.5;Color=texture(Texture,xy);Color.rgb*=Tint.rgb;}+void Scale_RGB_B346(+vec4 Color,+float Scalar,+out vec4 Result)+{Result=vec4(Scalar,Scalar,Scalar,1)*Color;}+void Scale_RGB_B344(+float Scalar,+vec4 Color,+out vec4 Result)+{Result=vec4(Scalar,Scalar,Scalar,1)*Color;}+void Line_Fragment_B362(+vec4 Base_Color,+vec4 Highlight_Color,+float Highlight_Width,+vec3 Line_Vertex,+float Highlight,+out vec4 Line_Color)