@sfgrp/encase
Version:
Encase is a viz library for managing containers (things with things in them).
1,636 lines (1,635 loc) • 554 kB
JavaScript
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;
}