UNPKG

@sfgrp/encase

Version:

Encase is a viz library for managing containers (things with things in them).

1,636 lines (1,635 loc) 554 kB
import { getCurrentScope as EM, onScopeDispose as xM, unref as d, ref as b, watch as X, isRef as Ig, onMounted as cI, nextTick as yM, getCurrentInstance as rI, toRefs as Lg, customRef as iM, readonly as LI, computed as J, watchEffect as UI, inject as SM, reactive as lg, defineComponent as AI, useSlots as ug, shallowRef as q, onUnmounted as NI, openBlock as m, createElementBlock as F, normalizeClass as cM, normalizeStyle as Jg, provide as FI, createRenderer as jM, h as xg, Fragment as OI, onBeforeUnmount as fg, withAsyncContext as wM, toValue as MI, createElementVNode as Z, renderSlot as sM, createCommentVNode as xI, createBlock as HI, Suspense as tM, withCtx as pg, createVNode as XI, normalizeProps as QM, guardReactiveProps as BM, mergeModels as yg, useModel as eM, mergeProps as YM, renderList as fI } from "vue"; import * as mg from "three"; import { Clock as dg, REVISION as UM, Scene as vg, Raycaster as kM, PerspectiveCamera as _I, WebGLRenderer as pI, ACESFilmicToneMapping as Wg, Color as QI, MathUtils as gg, Camera as bM, SRGBColorSpace as Fg, PCFSoftShadowMap as oM, NoToneMapping as Xg, BufferAttribute as nM, Object3D as GM, Vector2 as W, MeshBasicMaterial as HM, DoubleSide as aM, Vector3 as _, ExtrudeGeometry as hM, Loader as rM, FileLoader as LM, ShapePath as lM, Box3 as uM, Ray as JM, Plane as fM, Controls as pM, MOUSE as yI, TOUCH as EI, Quaternion as ig, Spherical as Sg, BasicShadowMap as mM } from "three"; function V(g) { return EM() ? (xM(g), !0) : !1; } function P() { const g = /* @__PURE__ */ new Set(), I = (A) => { g.delete(A); }; return { on: (A) => { g.add(A); const N = () => I(A); return V(N), { off: N }; }, off: I, trigger: (...A) => Promise.all(Array.from(g).map((N) => N(...A))) }; } function h(g) { return typeof g == "function" ? g() : d(g); } const PI = typeof window < "u" && typeof document < "u"; typeof WorkerGlobalScope < "u" && globalThis instanceof WorkerGlobalScope; const dM = (g) => g != null, vM = Object.prototype.toString, WM = (g) => vM.call(g) === "[object Object]", RI = () => { }; function FM(g, I) { function M(...D) { return new Promise((A, N) => { Promise.resolve(g(() => I.apply(this, D), { fn: I, thisArg: this, args: D })).then(A).catch(N); }); } return M; } function XM(g, I = {}) { let M, D, A = RI; const N = (z) => { clearTimeout(z), A(), A = RI; }; return (z) => { const O = h(g), C = h(I.maxWait); return M && N(M), O <= 0 || C !== void 0 && C <= 0 ? (D && (N(D), D = null), Promise.resolve(z())) : new Promise((E, S) => { A = I.rejectOnCancel ? S : E, C && !D && (D = setTimeout(() => { M && N(M), D = null, E(z()); }, C)), M = setTimeout(() => { D && N(D), D = null, E(z()); }, O); }); }; } function _M(g, I, M = !1) { return I.reduce((D, A) => (A in g && (!M || g[A] !== void 0) && (D[A] = g[A]), D), {}); } function PM(g) { return rI(); } function RM(g, I = 200, M = {}) { return FM( XM(I, M), g ); } function cg(g, I = 200, M = {}) { const D = b(g.value), A = RM(() => { D.value = g.value; }, I, M); return X(g, () => A()), D; } function KM(g, I = {}) { if (!Ig(g)) return Lg(g); const M = Array.isArray(g.value) ? Array.from({ length: g.value.length }) : {}; for (const D in g.value) M[D] = iM(() => ({ get() { return g.value[D]; }, set(A) { var N; if ((N = h(I.replaceRef)) != null ? N : !0) if (Array.isArray(g.value)) { const z = [...g.value]; z[D] = A, g.value = z; } else { const z = { ...g.value, [D]: A }; Object.setPrototypeOf(z, Object.getPrototypeOf(g.value)), g.value = z; } else g.value[D] = A; } })); return M; } function Mg(g, I = !0, M) { PM() ? cI(g, M) : I ? g() : yM(g); } function ZM(g, I = 1e3, M = {}) { const { immediate: D = !0, immediateCallback: A = !1 } = M; let N = null; const T = b(!1); function z() { N && (clearInterval(N), N = null); } function O() { T.value = !1, z(); } function C() { const E = h(I); E <= 0 || (T.value = !0, A && g(), z(), N = setInterval(g, E)); } if (D && PI && C(), Ig(I) || typeof I == "function") { const E = X(I, () => { T.value && PI && C(); }); V(E); } return V(O), { isActive: T, pause: O, resume: C }; } function R(g) { var I; const M = h(g); return (I = M == null ? void 0 : M.$el) != null ? I : M; } const II = PI ? window : void 0; function YI(...g) { let I, M, D, A; if (typeof g[0] == "string" || Array.isArray(g[0]) ? ([M, D, A] = g, I = II) : [I, M, D, A] = g, !I) return RI; Array.isArray(M) || (M = [M]), Array.isArray(D) || (D = [D]); const N = [], T = () => { N.forEach((E) => E()), N.length = 0; }, z = (E, S, y, c) => (E.addEventListener(S, y, c), () => E.removeEventListener(S, y, c)), O = X( () => [R(I), h(A)], ([E, S]) => { if (T(), !E) return; const y = WM(S) ? { ...S } : S; N.push( ...M.flatMap((c) => D.map((s) => z(E, c, s, y))) ); }, { immediate: !0, flush: "post" } ), C = () => { O(), T(); }; return V(C), C; } function qM() { const g = b(!1), I = rI(); return I && cI(() => { g.value = !0; }, I), g; } function uI(g) { const I = qM(); return J(() => (I.value, !!g())); } function VM(g, I, M = {}) { const { window: D = II, ...A } = M; let N; const T = uI(() => D && "MutationObserver" in D), z = () => { N && (N.disconnect(), N = void 0); }, O = J(() => { const y = h(g), c = (Array.isArray(y) ? y : [y]).map(R).filter(dM); return new Set(c); }), C = X( () => O.value, (y) => { z(), T.value && y.size && (N = new MutationObserver(I), y.forEach((c) => N.observe(c, A))); }, { immediate: !0, flush: "post" } ), E = () => N == null ? void 0 : N.takeRecords(), S = () => { z(), C(); }; return V(S), { isSupported: T, stop: S, takeRecords: E }; } function Dg(g, I = {}) { const { immediate: M = !0, fpsLimit: D = void 0, window: A = II } = I, N = b(!1), T = D ? 1e3 / D : null; let z = 0, O = null; function C(y) { if (!N.value || !A) return; z || (z = y); const c = y - z; if (T && c < T) { O = A.requestAnimationFrame(C); return; } z = y, g({ delta: c, timestamp: y }), O = A.requestAnimationFrame(C); } function E() { !N.value && A && (N.value = !0, z = 0, O = A.requestAnimationFrame(C)); } function S() { N.value = !1, O != null && A && (A.cancelAnimationFrame(O), O = null); } return M && E(), V(S), { isActive: LI(N), pause: S, resume: E }; } function $M(g, I = {}) { const { window: M = II } = I, D = uI(() => M && "matchMedia" in M && typeof M.matchMedia == "function"); let A; const N = b(!1), T = (C) => { N.value = C.matches; }, z = () => { A && ("removeEventListener" in A ? A.removeEventListener("change", T) : A.removeListener(T)); }, O = UI(() => { D.value && (z(), A = M.matchMedia(h(g)), "addEventListener" in A ? A.addEventListener("change", T) : A.addListener(T), N.value = A.matches); }); return V(() => { O(), z(), A = void 0; }), N; } function ID(g = {}) { const { window: I = II } = g, M = b(1); if (I) { let D = function() { M.value = I.devicePixelRatio, A(), N = I.matchMedia(`(resolution: ${M.value}dppx)`), N.addEventListener("change", D, { once: !0 }); }, A = function() { N == null || N.removeEventListener("change", D); }, N; D(), V(A); } return { pixelRatio: M }; } function _g(g, I, M = {}) { const { window: D = II, ...A } = M; let N; const T = uI(() => D && "ResizeObserver" in D), z = () => { N && (N.disconnect(), N = void 0); }, O = J(() => Array.isArray(g) ? g.map((S) => R(S)) : [R(g)]), C = X( O, (S) => { if (z(), T.value && D) { N = new ResizeObserver(I); for (const y of S) y && N.observe(y, A); } }, { immediate: !0, flush: "post" } ), E = () => { z(), C(); }; return V(E), { isSupported: T, stop: E }; } function gD(g, I = {}) { const { reset: M = !0, windowResize: D = !0, windowScroll: A = !0, immediate: N = !0 } = I, T = b(0), z = b(0), O = b(0), C = b(0), E = b(0), S = b(0), y = b(0), c = b(0); function s() { const i = R(g); if (!i) { M && (T.value = 0, z.value = 0, O.value = 0, C.value = 0, E.value = 0, S.value = 0, y.value = 0, c.value = 0); return; } const t = i.getBoundingClientRect(); T.value = t.height, z.value = t.bottom, O.value = t.left, C.value = t.right, E.value = t.top, S.value = t.width, y.value = t.x, c.value = t.y; } return _g(g, s), X(() => R(g), (i) => !i && s()), VM(g, s, { attributeFilter: ["style", "class"] }), A && YI("scroll", s, { capture: !0, passive: !0 }), D && YI("resize", s, { passive: !0 }), Mg(() => { N && s(); }), { height: T, bottom: z, left: O, right: C, top: E, width: S, x: y, y: c, update: s }; } function MD(g, I = { width: 0, height: 0 }, M = {}) { const { window: D = II, box: A = "content-box" } = M, N = J(() => { var S, y; return (y = (S = R(g)) == null ? void 0 : S.namespaceURI) == null ? void 0 : y.includes("svg"); }), T = b(I.width), z = b(I.height), { stop: O } = _g( g, ([S]) => { const y = A === "border-box" ? S.borderBoxSize : A === "content-box" ? S.contentBoxSize : S.devicePixelContentBoxSize; if (D && N.value) { const c = R(g); if (c) { const s = c.getBoundingClientRect(); T.value = s.width, z.value = s.height; } } else if (y) { const c = Array.isArray(y) ? y : [y]; T.value = c.reduce((s, { inlineSize: i }) => s + i, 0), z.value = c.reduce((s, { blockSize: i }) => s + i, 0); } else T.value = S.contentRect.width, z.value = S.contentRect.height; }, M ); Mg(() => { const S = R(g); S && (T.value = "offsetWidth" in S ? S.offsetWidth : I.width, z.value = "offsetHeight" in S ? S.offsetHeight : I.height); }); const C = X( () => R(g), (S) => { T.value = S ? I.width : 0, z.value = S ? I.height : 0; } ); function E() { O(), C(); } return { width: T, height: z, stop: E }; } function DD(g) { var I; const M = b(0); if (typeof performance > "u") return M; const D = (I = g == null ? void 0 : g.every) != null ? I : 10; let A = performance.now(), N = 0; return Dg(() => { if (N += 1, N >= D) { const T = performance.now(), z = T - A; M.value = Math.round(1e3 / (z / N)), A = T, N = 0; } }), M; } function AD(g = {}) { const I = b(), M = uI(() => typeof performance < "u" && "memory" in performance); if (M.value) { const { interval: D = 1e3 } = g; ZM(() => { I.value = performance.memory; }, D, { immediate: g.immediate, immediateCallback: g.immediateCallback }); } return { isSupported: M, memory: I }; } const Pg = { x: 0, y: 0, pointerId: 0, pressure: 0, tiltX: 0, tiltY: 0, width: 0, height: 0, twist: 0, pointerType: null }, ND = /* @__PURE__ */ Object.keys(Pg); function TD(g = {}) { const { target: I = II } = g, M = b(!1), D = b(g.initialValue || {}); Object.assign(D.value, Pg, D.value); const A = (N) => { M.value = !0, !(g.pointerTypes && !g.pointerTypes.includes(N.pointerType)) && (D.value = _M(N, ND, !1)); }; if (I) { const N = { passive: !0 }; YI(I, ["pointerdown", "pointermove", "pointerup"], A, N), YI(I, "pointerleave", () => M.value = !1, N); } return { ...KM(D), isInside: M }; } function zD(g = {}) { const { window: I = II, initialWidth: M = Number.POSITIVE_INFINITY, initialHeight: D = Number.POSITIVE_INFINITY, listenOrientation: A = !0, includeScrollbar: N = !0 } = g, T = b(M), z = b(D), O = () => { I && (N ? (T.value = I.innerWidth, z.value = I.innerHeight) : (T.value = I.document.documentElement.clientWidth, z.value = I.document.documentElement.clientHeight)); }; if (O(), Mg(O), YI("resize", O, { passive: !0 }), A) { const C = $M("(orientation: portrait)"); X(C, () => O()); } return { width: T, height: z }; } var CD = Object.defineProperty, OD = (g, I, M) => I in g ? CD(g, I, { enumerable: !0, configurable: !0, writable: !0, value: M }) : g[I] = M, jg = (g, I, M) => OD(g, typeof I != "symbol" ? I + "" : I, M); const ED = "@tresjs/core", xD = "module", yD = "4.2.9", iD = "pnpm@9.1.4", SD = "Declarative ThreeJS using Vue Components", cD = "Alvaro Saburido <hola@alvarosaburido.dev> (https://github.com/alvarosabu/)", jD = "MIT", wD = { type: "git", url: "git+https://github.com/Tresjs/tres.git" }, sD = [ "vue", "3d", "threejs", "three", "threejs-vue" ], tD = !1, QD = { ".": { types: "./dist/index.d.ts", import: "./dist/tres.js", require: "./dist/tres.umd.cjs" }, "./components": { types: "./dist/src/components/index.d.ts" }, "./composables": { types: "./dist/src/composables/index.d.ts" }, "./types": { types: "./dist/src/types/index.d.ts" }, "./utils": { types: "./dist/src/utils/index.d.ts" }, "./*": "./*" }, BD = "./dist/tres.js", eD = "./dist/tres.js", YD = "./dist/index.d.ts", UD = [ "*.d.ts", "dist" ], kD = { access: "public" }, bD = { dev: "cd playground/vue && npm run dev", "dev:nuxt": "cd playground/nuxt && npm run dev", build: "vite build", test: "vitest", "test:ci": "vitest run", "test:ui": "vitest --ui --coverage.enabled=true", release: "release-it", coverage: "vitest run --coverage", lint: "eslint .", "lint:fix": "eslint . --fix", "docs:dev": "vitepress dev docs", "docs:build": "vitepress build docs", "docs:serve": "vitepress serve docs", "docs:preview": "vitepress preview docs", "docs:contributors": "esno scripts/update-contributors.ts", prepare: "node .husky/install.mjs" }, oD = { three: ">=0.133", vue: ">=3.4" }, nD = { "@alvarosabu/utils": "^3.2.0", "@vue/devtools-api": "^6.6.3", "@vueuse/core": "^10.11.0" }, GD = { "@release-it/conventional-changelog": "^8.0.1", "@stackblitz/sdk": "^1.11.0", "@tresjs/cientos": "3.9.0", "@tresjs/eslint-config": "^1.1.0", "@types/three": "^0.166.0", "@typescript-eslint/eslint-plugin": "^7.16.0", "@typescript-eslint/parser": "^7.16.0", "@vitejs/plugin-vue": "^5.0.5", "@vitest/coverage-c8": "^0.33.0", "@vitest/coverage-v8": "^2.0.2", "@vitest/ui": "^2.0.2", "@vue/test-utils": "^2.4.6", eslint: "^9.6.0", "eslint-plugin-vue": "^9.27.0", esno: "^4.7.0", gsap: "^3.12.5", husky: "^9.0.11", jsdom: "^24.1.0", kolorist: "^1.8.0", ohmyfetch: "^0.4.21", pathe: "^1.1.2", "release-it": "^17.5.0", "rollup-plugin-analyzer": "^4.0.0", "rollup-plugin-copy": "^3.5.0", "rollup-plugin-visualizer": "^5.12.0", sponsorkit: "^0.14.6", three: "^0.166.1", unocss: "^0.61.3", unplugin: "^1.11.0", "unplugin-vue-components": "^0.27.2", vite: "^5.3.3", "vite-plugin-banner": "^0.7.1", "vite-plugin-dts": "3.9.1", "vite-plugin-inspect": "^0.8.4", "vite-plugin-require-transform": "^1.0.21", "vite-svg-loader": "^5.1.0", vitepress: "1.3.0", vitest: "^2.0.2", vue: "^3.4.31", "vue-demi": "^0.14.8" }, HD = { name: ED, type: xD, version: yD, packageManager: iD, description: SD, author: cD, license: jD, repository: wD, keywords: sD, sideEffects: tD, exports: QD, main: BD, module: eD, types: YD, files: UD, publishConfig: kD, scripts: bD, peerDependencies: oD, dependencies: nD, devDependencies: GD }; function KI(g) { return typeof g > "u"; } function lI(g) { return Array.isArray(g); } function aD(g) { return typeof g == "number"; } function Rg(g) { return typeof g == "string"; } function CI(g) { return typeof g == "function"; } function gI(g) { return g === Object(g) && !lI(g) && !CI(g); } function DI(g) { return gI(g) && "isObject3D" in g && !!g.isObject3D; } function wg(g) { return gI(g) && "isCamera" in g && !!g.isCamera; } function hD(g) { return gI(g) && "isBufferGeometry" in g && !!g.isBufferGeometry; } function rD(g) { return gI(g) && "isMaterial" in g && !!g.isMaterial; } function LD(g) { return gI(g) && "isLight" in g && !!g.isLight; } function lD(g) { return gI(g) && "isFog" in g && !!g.isFog; } function uD(g) { return gI(g) && "isScene" in g && !!g.isScene; } function kI(g) { return DI(g) || hD(g) || rD(g) || lD(g); } function JD(g) { return gI(g) && !!g.isPrimitive; } const fD = ({ sizes: g }) => { const I = b([]), M = J( () => I.value[0] ), D = (T) => { const z = T instanceof bM ? T : I.value.find((C) => C.uuid === T); if (!z) return; const O = I.value.filter(({ uuid: C }) => C !== z.uuid); I.value = [z, ...O]; }, A = (T, z = !1) => { if (wg(T)) { const O = T; if (I.value.some(({ uuid: C }) => C === O.uuid)) return; z ? D(O) : I.value.push(O); } }, N = (T) => { if (wg(T)) { const z = T; I.value = I.value.filter(({ uuid: O }) => O !== z.uuid); } }; return UI(() => { g.aspectRatio.value && I.value.forEach((T) => { !T.manual && (T instanceof _I || pD(T)) && (T instanceof _I ? T.aspect = g.aspectRatio.value : (T.left = g.width.value * -0.5, T.right = g.width.value * 0.5, T.top = g.height.value * 0.5, T.bottom = g.height.value * -0.5), T.updateProjectionMatrix()); }); }), NI(() => { I.value = []; }), { camera: M, cameras: I, registerCamera: A, deregisterCamera: N, setCameraActive: D }; }; function pD(g) { return g.hasOwnProperty("isOrthographicCamera") && g.isOrthographicCamera; } const Kg = P(), Zg = P(), Ag = P(), BI = new dg(); let aI = 0, hI = 0; const { pause: mD, resume: sg, isActive: dD } = Dg( () => { Kg.trigger({ delta: aI, elapsed: hI, clock: BI }), Zg.trigger({ delta: aI, elapsed: hI, clock: BI }), Ag.trigger({ delta: aI, elapsed: hI, clock: BI }); }, { immediate: !1 } ); Ag.on(() => { aI = BI.getDelta(), hI = BI.getElapsedTime(); }); let tg = !1; const qg = () => (tg || (tg = !0, sg()), { onBeforeLoop: Kg.on, onLoop: Zg.on, onAfterLoop: Ag.on, pause: mD, resume: sg, isActive: dD }), bI = "[TresJS ▲ ■ ●] "; function JI() { function g(...D) { typeof D[0] == "string" ? D[0] = bI + D[0] : D.unshift(bI), console.error(...D); } function I(...D) { typeof D[0] == "string" ? D[0] = bI + D[0] : D.unshift(bI), console.warn(...D); } function M(D, A) { } return { logError: g, logWarning: I, logMessage: M }; } function vD(g) { return g instanceof QI ? g : Array.isArray(g) ? new QI(...g) : new QI(g); } class WD extends mg.Mesh { constructor(...I) { super(...I), jg(this, "type", "HightlightMesh"), jg(this, "createTime"), this.createTime = Date.now(); } onBeforeRender() { const I = (Date.now() - this.createTime) / 1e3, M = 1 + 0.07 * Math.sin(2.5 * I); this.scale.set(M, M, M); } } const Vg = (g, I) => { for (const M of Object.keys(I)) I[M] instanceof Object && Object.assign(I[M], Vg(g[M], I[M])); return Object.assign(g || {}, I), g; }, FD = "html,body,base,head,link,meta,style,title,address,article,aside,footer,header,hgroup,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,summary,template,blockquote,iframe,tfoot", XD = /* @__PURE__ */ RD(FD); function Qg(g) { return g && g.nodeType === 1; } function oI(g) { return g.replace(/-([a-z])/g, (I, M) => M.toUpperCase()); } const _D = /\B([A-Z])/g; function PD(g) { return g.replace(_D, "-$1").toLowerCase(); } function RD(g, I) { const M = /* @__PURE__ */ Object.create(null), D = g.split(","); for (let A = 0; A < D.length; A++) M[D[A]] = !0; return (A) => !!M[A]; } const Bg = (g, I) => { if (!I) return; const M = Array.isArray(I) ? I : I.match(/([^[.\]])+/g); return M == null ? void 0 : M.reduce((D, A) => D && D[A], g); }, KD = (g, I, M) => { const D = Array.isArray(I) ? I : I.match(/([^[.\]])+/g); D && D.reduce((A, N, T) => (A[N] === void 0 && (A[N] = {}), T === D.length - 1 && (A[N] = M), A[N]), g); }; function $g(g, I) { if (Qg(g) && Qg(I)) { const A = g.attributes, N = I.attributes; return A.length !== N.length ? !1 : Array.from(A).every(({ name: T, value: z }) => I.getAttribute(T) === z); } if (g === I) return !0; if (g === null || typeof g != "object" || I === null || typeof I != "object") return !1; const M = Object.keys(g), D = Object.keys(I); if (M.length !== D.length) return !1; for (const A of M) if (!D.includes(A) || !$g(g[A], I[A])) return !1; return !0; } function ZD(g, I) { if (!Array.isArray(g) || !Array.isArray(I) || g.length !== I.length) return !1; for (let M = 0; M < g.length; M++) if (!$g(g[M], I[M])) return !1; return !0; } function qD(g, I, M, D) { const A = (O) => { if (O.uuid === I) return O; for (const C of O.children) { const E = A(C); if (E) return E; } }, N = A(g); if (!N) { console.warn("Object with UUID not found in the scene."); return; } let T = N; for (let O = 0; O < M.length - 1; O++) if (T[M[O]] !== void 0) T = T[M[O]]; else { console.warn(`Property path is not valid: ${M.join(".")}`); return; } const z = M[M.length - 1]; T[z] !== void 0 ? T[z] = D : console.warn(`Property path is not valid: ${M.join(".")}`); } function VD(g) { const I = new HM({ color: 11003607, // Highlight color, e.g., yellow transparent: !0, opacity: 0.2, depthTest: !1, // So the highlight is always visible side: aM // To e }); return new WD(g.geometry.clone(), I); } function $D(g) { return "map" in g; } function eg(g) { $D(g) && g.map && g.map.dispose(), g.dispose(); } function IM(g) { var I, M; if (g.parent && ((I = g.removeFromParent) == null || I.call(g)), delete g.__tres, [...g.children].forEach((D) => IM(D)), !(g instanceof vg)) { const D = g; g && ((M = g.dispose) == null || M.call(g)), D.geometry && (D.geometry.dispose(), delete D.geometry), Array.isArray(D.material) ? (D.material.forEach((A) => eg(A)), delete D.material) : D.material && (eg(D.material), delete D.material); } } function IA(g, I) { let M = 0; for (let D = 0; D < g.length; D++) I(g[D], D) && (g[M] = g[D], M++); return g.length = M, g; } function ZI(g, I) { let M = g; if (I.includes("-")) { const D = I.split("-"); let A = D.shift(); for (; M && D.length; ) A in M ? (M = M[A], A = D.shift()) : A = Yg(A, D.shift()); return { target: M, key: Yg(A, ...D) }; } else return { target: M, key: I }; } function Yg(...g) { return g.map((I, M) => M === 0 ? I : I.charAt(0).toUpperCase() + I.slice(1)).join(""); } const Ug = /-\d+$/; function gA(g, I, M) { if (Rg(M)) { if (Ug.test(M)) { const N = M.replace(Ug, ""), { target: T, key: z } = ZI(g, N); if (!Array.isArray(T[z])) { const O = T[z], C = []; C.__tresDetach = () => { C.every((E) => KI(E)) && (T[z] = O); }, T[z] = C; } } const { target: D, key: A } = ZI(g, M); I.__tres.previousAttach = D[A], D[A] = SI(I); } else I.__tres.previousAttach = M(g, I); } function MA(g, I, M) { var D, A, N; if (Rg(M)) { const { target: T, key: z } = ZI(g, M), O = I.__tres.previousAttach; O === void 0 ? delete T[z] : T[z] = O, "__tresDetach" in T && T.__tresDetach(); } else (A = (D = I.__tres) == null ? void 0 : D.previousAttach) == null || A.call(D, g, I); (N = I.__tres) == null || delete N.previousAttach; } function zI(g, I, M) { const D = g; return D.__tres = { type: "unknown", eventCount: 0, root: M, handlers: {}, memoizedProps: {}, objects: [], parent: null, previousAttach: null, ...I }, D.__tres.attach || (D.isMaterial ? D.__tres.attach = "material" : D.isBufferGeometry ? D.__tres.attach = "geometry" : D.isFog && (D.__tres.attach = "fog")), D; } function gM(g) { var I; const M = (I = g == null ? void 0 : g.__tres) == null ? void 0 : I.root; M && M.render && M.render.canBeInvalidated.value && M.invalidate(); } function DA(g, I, M) { var D; if (!CI(g.setPixelRatio)) return; let A = 0; if (lI(M) && M.length >= 2) { const [N, T] = M; A = gg.clamp(I, N, T); } else aD(M) ? A = M : A = I; A !== ((D = g.getPixelRatio) == null ? void 0 : D.call(g)) && g.setPixelRatio(A); } function AA(g, I, M, D, A) { const N = [...I.__tres.objects], T = SI(I); if (g = SI(g), T === g) return !0; const z = zI(g, I.__tres ?? {}, A), O = I.parent ?? I.__tres.parent ?? null, C = { ...I.__tres.memoizedProps }; delete C.object; for (const E of N) MM(E, A), DM(E, A); T.__tres.objects = [], D.remove(I); for (const [E, S] of Object.entries(C)) D.patchProp(z, E, z[E], S); M(g), D.insert(I, O); for (const E of N) D.insert(E, I); return !0; } function SI(g) { return JD(g) ? (g.object.__tres = g.__tres, g.object) : g; } function MM(g, I) { var M, D, A, N; const T = ((M = g.__tres) == null ? void 0 : M.parent) || I.scene.value; g.__tres && (g.__tres.parent = null), T && T.__tres && "objects" in T.__tres && IA(T.__tres.objects, (z) => z !== g), (D = g.__tres) != null && D.attach ? MA(T, g, g.__tres.attach) : ((N = (A = g.parent) == null ? void 0 : A.remove) == null || N.call(A, SI(g)), g.parent = null); } function DM(g, I) { var M; (M = g.traverse) == null || M.call(g, (D) => { var A; I.deregisterCamera(D), (A = I.eventManager) == null || A.deregisterPointerMissedObject(D); }), I.deregisterCamera(g), gM(g); } const NA = Number.parseInt(UM.replace("dev", "")), nI = { realistic: { shadows: !0, physicallyCorrectLights: !0, outputColorSpace: Fg, toneMapping: Wg, toneMappingExposure: 3, shadowMap: { enabled: !0, type: oM } }, flat: { toneMapping: Xg, toneMappingExposure: 1 } }; function TA({ canvas: g, options: I, contextParts: { sizes: M, render: D, invalidate: A, advance: N } }) { const T = J(() => ({ alpha: h(I.alpha) ?? !0, depth: h(I.depth), canvas: R(g), context: h(I.context), stencil: h(I.stencil), antialias: h(I.antialias) ?? !0, precision: h(I.precision), powerPreference: h(I.powerPreference), premultipliedAlpha: h(I.premultipliedAlpha), preserveDrawingBuffer: h(I.preserveDrawingBuffer), logarithmicDepthBuffer: h(I.logarithmicDepthBuffer), failIfMajorPerformanceCaveat: h(I.failIfMajorPerformanceCaveat) })), z = q(new pI(T.value)); function O() { I.renderMode === "on-demand" && A(); } X(T, () => { z.value.dispose(), z.value = new pI(T.value), O(); }), X([M.width, M.height], () => { z.value.setSize(M.width.value, M.height.value), O(); }, { immediate: !0 }), X(() => I.clearColor, O); const { pixelRatio: C } = ID(), { logError: E } = JI(), S = (() => { const c = new pI(), s = { shadowMap: { enabled: c.shadowMap.enabled, type: c.shadowMap.type }, toneMapping: c.toneMapping, toneMappingExposure: c.toneMappingExposure, outputColorSpace: c.outputColorSpace }; return c.dispose(), s; })(), y = h(I.renderMode); return y === "on-demand" && A(), y === "manual" && setTimeout(() => { N(); }, 100), UI(() => { const c = h(I.preset); c && (c in nI || E(`Renderer Preset must be one of these: ${Object.keys(nI).join(", ")}`), Vg(z.value, nI[c])), DA(z.value, C.value, h(I.dpr)), y === "always" && (D.frames.value = Math.max(1, D.frames.value)); const s = (w, e) => { const Y = h(w), k = () => { if (c) return Bg(nI[c], e); }; if (Y !== void 0) return Y; const o = k(); return o !== void 0 ? o : Bg(S, e); }, i = (w, e) => KD(z.value, e, s(w, e)); i(I.shadows, "shadowMap.enabled"), i(I.toneMapping ?? Wg, "toneMapping"), i(I.shadowMapType, "shadowMap.type"), NA < 150 && i(!I.useLegacyLights, "physicallyCorrectLights"), i(I.outputColorSpace, "outputColorSpace"), i(I.toneMappingExposure, "toneMappingExposure"); const t = s(I.clearColor, "clearColor"); t && z.value.setClearColor( t ? vD(t) : new QI(0) // default clear color is not easily/efficiently retrievable from three ); }), NI(() => { z.value.dispose(), z.value.forceContextLoss(); }), { renderer: z }; } const zA = (g, I) => { const M = J(() => I.renderer.value.domElement), D = q([]), { x: A, y: N } = TD({ target: M }); let T = 0; const { width: z, height: O, top: C, left: E } = gD(M), S = ({ x: B, y: u }) => { if (M.value) return { x: (B - E.value) / z.value * 2 - 1, y: -((u - C.value) / O.value) * 2 + 1 }; }, y = ({ x: B, y: u }) => { if (I.camera.value) return I.raycaster.value.setFromCamera(new W(B, u), I.camera.value), D.value = I.raycaster.value.intersectObjects(g.value, !0), D.value; }, c = (B) => { const u = S({ x: (B == null ? void 0 : B.clientX) ?? A.value, y: (B == null ? void 0 : B.clientY) ?? N.value }); return u ? y(u) || [] : []; }, s = P(), i = P(), t = P(), w = P(), e = P(), Y = P(), k = P(), o = P(); function n(B) { const u = {}; for (const $ in B) typeof $ != "function" && (u[$] = B[$]); return u; } const Q = (B, u) => { var $, wI, Eg; const CM = n(u), OM = new _(u == null ? void 0 : u.clientX, u == null ? void 0 : u.clientY, 0).unproject(($ = I.camera) == null ? void 0 : $.value); B.trigger({ ...CM, intersections: D.value, // The unprojectedPoint is wrong, math needs to be fixed unprojectedPoint: OM, ray: (wI = I.raycaster) == null ? void 0 : wI.value.ray, camera: (Eg = I.camera) == null ? void 0 : Eg.value, sourceEvent: u, delta: T, stopPropagating: !1 }); }; let G; const l = (B) => { c(B), Q(t, B), G = B; }, x = () => { G && l(G); }; let j, U, r; const a = (B) => { var u; j = (u = D.value[0]) == null ? void 0 : u.object, T = 0, U = new W( (B == null ? void 0 : B.clientX) ?? A.value, (B == null ? void 0 : B.clientY) ?? N.value ), Q(e, B); }; let f, L = !1; const jI = (B) => { var u, $, wI; B instanceof PointerEvent && (D.value.length === 0 && Q(Y, B), j === ((u = D.value[0]) == null ? void 0 : u.object) && (r = new W( (B == null ? void 0 : B.clientX) ?? A.value, (B == null ? void 0 : B.clientY) ?? N.value ), T = U == null ? void 0 : U.distanceTo(r), B.button === 0 ? (Q(s, B), f === (($ = D.value[0]) == null ? void 0 : $.object) ? L = !0 : (f = (wI = D.value[0]) == null ? void 0 : wI.object, L = !1)) : B.button === 2 && Q(k, B)), Q(w, B)); }, TI = (B) => { L && (Q(i, B), f = void 0, L = !1); }, Cg = (B) => Q(t, B), Og = (B) => Q(o, B); return M.value.addEventListener("pointerup", jI), M.value.addEventListener("pointerdown", a), M.value.addEventListener("pointermove", l), M.value.addEventListener("pointerleave", Cg), M.value.addEventListener("dblclick", TI), M.value.addEventListener("wheel", Og), NI(() => { M != null && M.value && (M.value.removeEventListener("pointerup", jI), M.value.removeEventListener("pointerdown", a), M.value.removeEventListener("pointermove", l), M.value.removeEventListener("pointerleave", Cg), M.value.removeEventListener("dblclick", TI), M.value.removeEventListener("wheel", Og)); }), { intersects: D, onClick: (B) => s.on(B).off, onDblClick: (B) => i.on(B).off, onContextMenu: (B) => k.on(B).off, onPointerMove: (B) => t.on(B).off, onPointerUp: (B) => w.on(B).off, onPointerDown: (B) => e.on(B).off, onPointerMissed: (B) => Y.on(B).off, onWheel: (B) => o.on(B).off, forceUpdate: x }; }; function CA() { const { logWarning: g } = JI(); function I(N, T, z) { let O = null; return N.traverse((C) => { C[T] === z && (O = C); }), O || g(`Child with ${T} '${z}' not found.`), O; } function M(N, T, z) { const O = []; return N.traverse((C) => { C[T].includes(z) && O.push(C); }), O.length || g(`Children with ${T} '${z}' not found.`), O; } function D(N, T) { return I(N, "name", T); } function A(N, T) { return M(N, "name", T); } return { seek: I, seekByName: D, seekAll: M, seekAllByName: A }; } function Ng(g) { let I = 0; return g.traverse((M) => { if (M.isMesh && M.geometry && M.type !== "HightlightMesh") { const D = M.geometry, A = D.attributes.position.count * 3 * Float32Array.BYTES_PER_ELEMENT, N = D.index ? D.index.count * Uint32Array.BYTES_PER_ELEMENT : 0, T = D.attributes.normal ? D.attributes.normal.count * 3 * Float32Array.BYTES_PER_ELEMENT : 0, z = D.attributes.uv ? D.attributes.uv.count * 2 * Float32Array.BYTES_PER_ELEMENT : 0, O = A + N + T + z; I += O; } }), I; } function OA(g) { return (g / 1024).toFixed(2); } const qI = b({}), VI = (g) => Object.assign(qI.value, g); function EA(g, I, M) { var D; const A = q(), N = q(); g && (A.value = g), I && (N.value = I); const T = (x) => { var j; return ((j = x.__tres) == null ? void 0 : j.eventCount) > 0; }, z = (x) => { var j; return ((j = x.children) == null ? void 0 : j.some((U) => z(U))) || T(x); }, O = q(((D = A.value) == null ? void 0 : D.children).filter(z) || []); function C(x, j) { if (Array.isArray(x)) for (const U of x) U(j); typeof x == "function" && x(j); } function E(x, j) { const U = [], r = () => j.stopPropagating = !0; j.stopPropagation = r; for (const a of j == null ? void 0 : j.intersections) { if (j.stopPropagating) return; j = { ...j, ...a }; const { object: f } = a; j.eventObject = f, C(f[x], j), U.push(f); let L = f.parent; for (; L !== null && !j.stopPropagating && !U.includes(L); ) j.eventObject = L, C(L[x], j), U.push(L), L = L.parent; const jI = PD(x.slice(2)); M(jI, { intersection: a, event: j }); } } const { onClick: S, onDblClick: y, onContextMenu: c, onPointerMove: s, onPointerDown: i, onPointerUp: t, onPointerMissed: w, onWheel: e, forceUpdate: Y } = zA(O, I); t((x) => E("onPointerUp", x)), i((x) => E("onPointerDown", x)), S((x) => E("onClick", x)), y((x) => E("onDoubleClick", x)), c((x) => E("onContextMenu", x)), e((x) => E("onWheel", x)); let k = []; s((x) => { const j = x.intersections.map(({ object: r }) => r), U = x.intersections; k.forEach(({ object: r }) => { j.includes(r) || (x.intersections = k, E("onPointerLeave", x), E("onPointerOut", x)); }), x.intersections = U, x.intersections.forEach(({ object: r }) => { k.includes(r) || (E("onPointerEnter", x), E("onPointerOver", x)); }), E("onPointerMove", x), k = x.intersections; }); const o = []; w((x) => { const j = () => x.stopPropagating = !0; x.stopPropagation = j, o.forEach((U) => { x.stopPropagating || (x.eventObject = U, C(U.onPointerMissed, x)); }), M("pointer-missed", { event: x }); }); function n(x) { kI(x) && DI(x) && O.value.push(x); } function Q(x) { if (kI(x) && DI(x)) { const j = O.value.indexOf(x); j > -1 && O.value.splice(j, 1); } } function G(x) { kI(x) && DI(x) && x.onPointerMissed && o.push(x); } function l(x) { if (kI(x) && DI(x)) { const j = o.indexOf(x); j > -1 && o.splice(j, 1); } } return I.eventManager = { forceUpdate: Y, registerObject: n, deregisterObject: Q, registerPointerMissedObject: G, deregisterPointerMissedObject: l }, { forceUpdate: Y, registerObject: n, deregisterObject: Q, registerPointerMissedObject: G, deregisterPointerMissedObject: l }; } function xA(g, I, M = 10) { const D = h(g) ? zD() : MD(J(() => h(I).parentElement)), A = LI(cg(D.width, M)), N = LI(cg(D.height, M)), T = J(() => A.value / N.value); return { height: N, width: A, aspectRatio: T }; } function mI() { const g = /* @__PURE__ */ new Map(), I = /* @__PURE__ */ new Set(); let M = 0, D = !1; const A = () => { const T = Array.from(g.entries()).sort((z, O) => { const C = z[1].priority - O[1].priority; return C === 0 ? z[1].addI - O[1].addI : C; }); I.clear(), T.forEach((z) => I.add(z[0])); }, N = (T) => { g.delete(T), I.delete(T); }; return { on: (T, z = 0) => { g.set(T, { priority: z, addI: M++ }); const O = () => N(T); return V(O), D = !0, { off: O }; }, off: N, trigger: (...T) => { D && (A(), D = !1), I.forEach((z) => z(...T)); }, dispose: () => { g.clear(), I.clear(); }, get count() { return g.size; } }; } function yA() { let g = !0, I = !0, M = !1; const D = new dg(!1), A = b(D.running), N = b(!1); let T; const z = gg.generateUUID(); let O = null; const C = mI(), E = mI(), S = mI(); n(); let y = {}; function c(Q) { y = Q; } function s(Q, G, l = 0) { switch (G) { case "before": return C.on(Q, l); case "render": return O || (O = Q), E.dispose(), E.on(Q); case "after": return S.on(Q, l); } } function i() { I && (I = !1, n(), o()); } function t() { I = !0, n(), cancelAnimationFrame(T); } function w() { M = !1, n(); } function e() { M = !0, n(); } function Y() { N.value = !0; } function k() { N.value = !1; } function o() { if (!g) { T = requestAnimationFrame(o); return; } const Q = D.getDelta(), G = D.getElapsedTime(), l = { camera: d(y.camera), scene: d(y.scene), renderer: d(y.renderer), raycaster: d(y.raycaster), controls: d(y.controls), invalidate: y.invalidate, advance: y.advance }, x = { delta: Q, elapsed: G, clock: D, ...l }; A.value && C.trigger(x), N.value || (E.count ? E.trigger(x) : O && O(x)), A.value && S.trigger(x), T = requestAnimationFrame(o); } function n() { const Q = !I && !M; D.running !== Q && (D.running ? D.stop() : D.start()), A.value = D.running; } return { loopId: z, register: (Q, G, l) => s(Q, G, l), start: i, stop: t, pause: e, resume: w, pauseRender: Y, resumeRender: k, isRenderPaused: N, isActive: A, setContext: c, setReady: (Q) => g = Q }; } function iA(g, I, M = 100) { M = M <= 0 ? 100 : M; const D = P(), A = /* @__PURE__ */ new Set(); let N = !1, T = !1, z = null; function O() { z && clearTimeout(z), !T && !N && g() ? (D.trigger(I), A.forEach((S) => S()), A.clear(), N = !0) : !T && !N && (z = setTimeout(O, M)); } function C() { T = !0, z && clearTimeout(z); } O(); const E = (S, ...y) => { S(...y); }; return { on: (S) => { if (N) return E(S, I), { off: () => { } }; { const y = D.on(S); return A.add(y.off), D.on(S); } }, off: D.off, trigger: D.trigger, cancel: C }; } const dI = /* @__PURE__ */ new WeakMap(); function SA(g) { if (g = g || Tg(), dI.has(g)) return dI.get(g); const I = 100, M = Date.now(), D = iA(() => { if (Date.now() - M >= I) return !0; { const A = g.renderer.value, N = (A == null ? void 0 : A.domElement) || { width: 0, height: 0 }; return !!(A && N.width > 0 && N.height > 0); } }, g); return dI.set(g, D), D; } function cA({ scene: g, canvas: I, windowSize: M, disableRender: D, rendererOptions: A, emit: N }) { const T = q(g), z = xA(M, I), { camera: O, cameras: C, registerCamera: E, deregisterCamera: S, setCameraActive: y } = fD({ sizes: z, scene: g }), c = { mode: b(A.renderMode || "always"), priority: b(0), frames: b(0), maxFrames: 60, canBeInvalidated: J(() => c.mode.value === "on-demand" && c.frames.value === 0) }; function s(a = 1) { A.renderMode === "on-demand" && (c.frames.value = Math.min(c.maxFrames, c.frames.value + a)); } function i() { A.renderMode === "manual" && (c.frames.value = 1); } const { renderer: t } = TA( { scene: g, canvas: I, options: A, emit: N, // TODO: replace contextParts with full ctx at https://github.com/Tresjs/tres/issues/516 contextParts: { sizes: z, camera: O, render: c, invalidate: s, advance: i }, disableRender: D } ), w = { sizes: z, scene: T, camera: O, cameras: LI(C), renderer: t, raycaster: q(new kM()), controls: b(null), perf: { maxFrames: 160, fps: { value: 0, accumulator: [] }, memory: { currentMem: 0, allocatedMem: 0, accumulator: [] } }, render: c, advance: i, extend: VI, invalidate: s, registerCamera: E, setCameraActive: y, deregisterCamera: S, loop: yA() }; FI("useTres", w), w.scene.value.__tres = { root: w }, w.loop.register(() => { O.value && c.frames.value > 0 && (t.value.render(g, O.value), N("render", w.renderer.value)), c.priority.value = 0, c.mode.value === "always" ? c.frames.value = 1 : c.frames.value = Math.max(0, c.frames.value - 1); }, "render"); const { on: e, cancel: Y } = SA(w); w.loop.setReady(!1), w.loop.start(), e(() => { N("ready", w), w.loop.setReady(!0), EA(g, w, N); }), NI(() => { Y(), w.loop.stop(); }); const k = 100, o = DD({ every: k }), { isSupported: n, memory: Q } = AD({ interval: k }), G = 160; let l = performance.now(); const x = ({ timestamp: a }) => { w.scene.value && (w.perf.memory.allocatedMem = Ng(w.scene.value)), a - l >= k && (l = a, w.perf.fps.accumulator.push(o.value), w.perf.fps.accumulator.length > G && w.perf.fps.accumulator.shift(), w.perf.fps.value = o.value, n.value && Q.value && (w.perf.memory.accumulator.push(Q.value.usedJSHeapSize / 1024 / 1024), w.perf.memory.accumulator.length > G && w.perf.memory.accumulator.shift(), w.perf.memory.currentMem = w.perf.memory.accumulator.reduce((f, L) => f + L, 0) / w.perf.memory.accumulator.length)); }; let j = 0; const U = 1, { pause: r } = Dg(({ delta: a }) => { window.__TRES__DEVTOOLS__ && (x({ timestamp: performance.now() }), j += a, j >= U && (window.__TRES__DEVTOOLS__.cb(w), j = 0)); }, { immediate: !0 }); return NI(() => { r(); }), w; } function Tg() { const g = SM("useTres"); if (!g) throw new Error("useTresContext must be used together with useTresContextProvider"); return g; } function jA(g, I = {}, M = {}) { let D = g; const A = (z) => { D = z; }; let N = new Proxy({}, {}); const T = { has(z, O) { return O in I || O in D; }, get(z, O, C) { return O in I ? I[O](D) : D[O]; }, set(z, O, C) { return M[O] ? M[O](C, D, N, A) : D[O] = C, !0; } }; return N = new Proxy({}, T), N; } const { logError: kg } = JI(), bg = [ "onClick", "onContextMenu", "onPointerMove", "onPointerEnter", "onPointerLeave", "onPointerOver", "onPointerOut", "onDoubleClick", "onPointerDown", "onPointerUp", "onPointerCancel", "onPointerMissed", "onLostPointerCapture", "onWheel" ], wA = (g) => { const I = g.scene.value; function M(C, E, S, y) { if (y || (y = {}), y.args || (y.args = []), C === "template" || XD(C)) return null; let c = C.replace("Tres", ""), s; if (C === "primitive") { (!gI(y.object) || Ig(y.object)) && kg( "Tres primitives need an 'object' prop, whose value is an object or shallowRef<object>" ), c = y.object.type; const i = {}; s = jA( y.object, { object: (t) => t, isPrimitive: () => !0, __tres: () => i }, { object: (t, w, e, Y) => { AA(t, e, Y, { patchProp: N, remove: A, insert: D }, g); }, __tres: (t) => { Object.assign(i, t); } } ); } else { const i = qI.value[c]; i || kg( `${c} is not defined on the THREE namespace. Use extend to add it to the catalog.` ), s = new i(...y.args); } return s ? (s.isCamera && (y != null && y.position || s.position.set(3, 3, 3), y != null && y.lookAt || s.lookAt(0, 0, 0)), s = zI(s, { ...s.__tres, type: c, memoizedProps: y, eventCount: 0, primitive: C === "primitive", attach: y.attach }, g), s) : null; } function D(C, E) { var S, y, c; if (!C) return; E = E || I; const s = C.__tres ? C : zI(C, {}, g), i = E.__tres ? E : zI(E, {}, g); C = SI(s), E = SI(i), C.__tres && ((S = C.__tres) == null ? void 0 : S.eventCount) > 0 && ((y = g.eventManager) == null || y.registerObject(C)), g.registerCamera(C), (c = g.eventManager) == null || c.registerPointerMissedObject(C), s.__tres.attach ? gA(i, s, s.__tres.attach) : DI(C) && DI(i) && (i.add(C), C.dispatchEvent({ type: "added" })), s.__tres.parent = i, i.__tres.objects && !i.__tres.objects.includes(s) && i.__tres.objects.push(s); } function A(C, E) { var S, y, c, s; if (!C) return; C != null && C.__tres && ((S = C.__tres) == null ? void 0 : S.eventCount) > 0 && ((y = g.eventManager) == null || y.deregisterObject(C)), E = KI(E) ? "default" : E; const i = (c = C.__tres) == null ? void 0 : c.dispose; KI(i) || (i === null ? E = !1 : E = i); const t = (s = C.__tres) == null ? void 0 : s.primitive, w = E === "default" ? !t : !!E; if (C.__tres && "objects" in C.__tres && [...C.__tres.objects].forEach((e) => A(e, E)), w && C.children && [...C.children].forEach((e) => A(e, E)), MM(C, g), DM(C, g), w && !uD(C)) { if (CI(E)) E(C); else if (CI(C.dispose)) try { C.dispose(); } catch { } } "__tres" in C && delete C.__tres; } function N(C, E, S, y) { var c, s; if (!C) return; let i = C, t = E; if (C.__tres && (C.__tres.memoizedProps[E] = y), E === "attach") { const k = ((c = C.__tres) == null ? void 0 : c.parent) || C.parent; A(C), zI(C, { attach: y }, g), k && D(C, k); return; } if (E === "dispose") { C.__tres || (C = zI(C, {}, g)), C.__tres.dispose = y; return; } if (DI(C) && t === "blocks-pointer-events") { y || y === "" ? C[t] = y : delete C[t]; return; } bg.includes(E) && C.__tres && (C.__tres.eventCount += 1); let w = oI(t), e = i == null ? void 0 : i[w]; if (t === "args") { const k = C, o = S ?? [], n = y ?? [], Q = ((s = C.__tres) == null ? void 0 : s.type) || C.type; Q && o.length && !ZD(o, n) && (i = Object.assign( k, new qI.value[Q](...y) )); return; } if (i.type === "BufferGeometry") { if (t === "args") return; i.setAttribute( oI(t), new nM(...y) ); return; } if (t.includes("-") && e === void 0) { const k = t.split("-"); e = k.reduce((o, n) => o[oI(n)], i), t = k.pop(), w = t, e != null && e.set || (i = k.reduce((o, n) => o[oI(n)], i)); } let Y = y; if (Y === "" && (Y = !0), CI(e)) { bg.includes(E) || (lI(Y) ? C[w](...Y) : C[w](Y)), w.startsWith("on") && CI(Y) && (i[w] = Y); return; } !(e != null && e.set) && !CI(e) ? i[w] = Y : e.constructor === Y.constructor && e != null && e.copy ? e == null || e.copy(Y) : lI(Y) ? e.set(...Y) : !e.isColor && e.setScalar ? e.setScalar(Y) : e.set(Y), gM(C); } function T(C) { var E; return ((E = C == null ? void 0 : C.__tres) == null ? void 0 : E.parent) || null; } function z(C) { const E = zI(new GM(), { type: "Comment" }, g); return E.name = C, E; } function O(C) { var E; const S = T(C), y = ((E = S == null ? void 0 : S.__tres) == null ? void 0 : E.objects) || [], c = y.indexOf(C); return c < 0 || c >= y.length - 1 ? null : y[c + 1]; } return { insert: D, remove: A, createElement: M, patchProp: N, parentNode: T, createText: () => { }, createComment: z, setText: () => { }, setElementText: () => { }, nextSibling: O, querySelector: () => { }, setScopeId: () => { }, cloneNode: () => { }, insertStaticContent: () => { } }; }; function sA() { return AM().__VUE_DEVTOOLS_GLOBAL_HOOK__; } function AM() { return typeof navigator < "u" && typeof window < "u" ? window : typeof globalThis < "u" ? globalThis : {}; } const tA = typeof Proxy == "function", QA = "devtools-plugin:setup", BA = "plugin:settings:set"; let sI, $I; function eA() { var g; return sI !== void 0 || (typeof window < "u" && window.performance ? (sI = !0, $I = window.performance) : typeof globalThis < "u" && !((g = globalThis.perf_hooks) === null || g === void 0) && g.performance ? (sI = !0, $I = globalThis.perf_hooks.performance) : sI = !1), sI; } function YA() { return eA() ? $I.now() : Date.now(); } class UA { constructor(I, M) { this.target = null, this.targetQueue = [], this.onQueue = [], this.plugin = I, this.hook = M; const D = {}; if (I.settings) for (const T in I.settings) { const z = I.settings[T]; D[T] = z.defaultValue; }