@threepipe/plugin-gaussian-splatting 0.2.3 → 0.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +20 -0
- package/README.md +12 -0
- package/dist/assets/worker-CZa3bSRr.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/dist/three-gaussian-splat/ThreeGaussianSplatPlugin.d.ts +3 -4
- package/dist/three-gaussian-splat/ThreeGaussianSplatPlugin.d.ts.map +1 -1
- package/dist/three-gaussian-splat/cpp-sorter/SortWorkerManager.d.ts.map +1 -1
- package/dist/three-gaussian-splat/geometry/GaussianSplatGeometry.d.ts +1 -1
- package/dist/three-gaussian-splat/geometry/GaussianSplatGeometry.d.ts.map +1 -1
- package/dist/three-gaussian-splat/loaders/SplatLoader.d.ts.map +1 -1
- package/dist/three-gaussian-splat/materials/GaussianSplatMaterialExtension.d.ts +1 -1
- package/dist/three-gaussian-splat/materials/GaussianSplatMaterialExtension.d.ts.map +1 -1
- package/dist/three-gaussian-splat/materials/util.d.ts.map +1 -1
- package/docs/.nojekyll +1 -0
- package/docs/assets/hierarchy.js +1 -0
- package/docs/assets/highlight.css +43 -0
- package/docs/assets/icons.js +18 -0
- package/docs/assets/icons.svg +1 -0
- package/docs/assets/main.js +60 -0
- package/docs/assets/navigation.js +1 -0
- package/docs/assets/search.js +1 -0
- package/docs/assets/style.css +1633 -0
- package/docs/classes/GaussianSplattingPlugin.html +27 -0
- package/docs/classes/threeGaussianSplat.GaussianSplatGeometry.html +19 -0
- package/docs/classes/threeGaussianSplat.GaussianSplatMaterialExtension.html +17 -0
- package/docs/classes/threeGaussianSplat.GaussianSplatMaterialPhysical.html +86 -0
- package/docs/classes/threeGaussianSplat.GaussianSplatMaterialRaw.html +51 -0
- package/docs/classes/threeGaussianSplat.GaussianSplatMaterialUnlit.html +60 -0
- package/docs/classes/threeGaussianSplat.GaussianSplatMesh.html +72 -0
- package/docs/classes/threeGaussianSplat.SplatLoader.html +7 -0
- package/docs/classes/threeGaussianSplat.ThreeGaussianSplatPlugin.html +27 -0
- package/docs/functions/threeGaussianSplat.computeFocalLengths.html +1 -0
- package/docs/hierarchy.html +1 -0
- package/docs/index.html +1 -0
- package/docs/modules/threeGaussianSplat.html +1 -0
- package/docs/variables/threeGaussianSplat.gaussianSplatShaders.html +1 -0
- package/package.json +8 -5
- package/src/gaussian-splats-3d/GaussianSplatsPlugin.ts +1 -1
- package/src/three-gaussian-splat/ThreeGaussianSplatPlugin.ts +13 -4
- package/src/three-gaussian-splat/materials/GaussianSplatMaterialExtension.ts +1 -1
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../src/three-gaussian-splat/materials/util.ts","../src/three-gaussian-splat/shaders/gsplat.pars.frag.glsl","../src/three-gaussian-splat/shaders/gsplat.pars.vert.glsl","../src/three-gaussian-splat/shaders/gsplat.main.vert.glsl","../src/three-gaussian-splat/shaders/gsplat.main.frag.glsl","../src/three-gaussian-splat/shaders/index.ts","../src/three-gaussian-splat/materials/GaussianSplatMaterialExtension.ts","../src/three-gaussian-splat/materials/GaussianSplatMaterialPhysical.ts","../src/three-gaussian-splat/materials/GaussianSplatMaterialRaw.ts","../src/three-gaussian-splat/materials/GaussianSplatMaterialUnlit.ts","../node_modules/comlink/dist/esm/comlink.mjs","../src/three-gaussian-splat/geometry/GaussianSplatGeometry.ts","../src/three-gaussian-splat/mesh/GaussianSplatMesh.ts","../src/three-gaussian-splat/cpp-sorter/SortWorkerManager.ts","../src/three-gaussian-splat/loaders/SplatLoader.ts","../src/three-gaussian-splat/ThreeGaussianSplatPlugin.ts","../src/three-gaussian-splat/index.ts","../src/index.ts"],"sourcesContent":["import {MathUtils, Vector2} from 'threepipe'\n\nexport const computeFocalLengths = (width: number, height: number, fov: number, aspect: number, dpr: number) => {\n const fovRad = MathUtils.degToRad(fov)\n const fovXRad = 2 * Math.atan(Math.tan(fovRad / 2) * aspect)\n const fy = dpr * height / (2 * Math.tan(fovRad / 2))\n const fx = dpr * width / (2 * Math.tan(fovXRad / 2))\n return new Vector2(fx, fy)\n}\n","// https://github.com/vincent-lecrubier-skydio/react-three-fiber-gaussian-splat\nprecision mediump float;\n\nvarying vec4 vColor;\nvarying vec3 vConic;\nvarying vec2 vCenter;\n\nuniform vec2 viewport;\nuniform vec2 focal;\nuniform float minAlpha;\n","// https://github.com/vincent-lecrubier-skydio/react-three-fiber-gaussian-splat\nprecision mediump float;\n\n#ifndef SHADER_NAME // isRawShaderMaterial\nattribute vec3 position;\nuniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nmat3 transpose(mat3 m) { return mat3(m[0][0], m[1][0], m[2][0], m[0][1], m[1][1], m[2][1], m[0][2], m[1][2], m[2][2]); }\n#endif\n\nattribute vec4 color;\nattribute vec4 quat;\nattribute vec3 scale;\nattribute vec3 center;\n\nuniform vec2 focal;\nuniform vec2 viewport;\n//uniform vec3 sphereCenter;\n//uniform vec3 planeNormal;\n//uniform float planeDistance;\n\nvarying vec4 vColor;\nvarying vec3 vConic;\nvarying vec2 vCenter;\nvarying vec2 vPosition;\n//varying float vDistance;\n//varying float vPlaneSide;\n\nmat3 compute_cov3d(vec3 scale, vec4 rot) {\n mat3 S = mat3(\n scale.x, 0.0, 0.0,\n 0.0, scale.y, 0.0,\n 0.0, 0.0, scale.z\n );\n mat3 R = mat3(\n 1.0 - 2.0 * (rot.z * rot.z + rot.w * rot.w), 2.0 * (rot.y * rot.z - rot.x * rot.w), 2.0 * (rot.y * rot.w + rot.x * rot.z),\n 2.0 * (rot.y * rot.z + rot.x * rot.w), 1.0 - 2.0 * (rot.y * rot.y + rot.w * rot.w), 2.0 * (rot.z * rot.w - rot.x * rot.y),\n 2.0 * (rot.y * rot.w - rot.x * rot.z), 2.0 * (rot.z * rot.w + rot.x * rot.y), 1.0 - 2.0 * (rot.y * rot.y + rot.z * rot.z)\n );\n mat3 M = S * R;\n return transpose(M) * M;\n}\n\nvec3 compute_cov2d(vec3 center, vec3 scale, vec4 rot){\n mat3 Vrk = compute_cov3d(scale, rot);\n vec4 t = modelViewMatrix * vec4(center, 1.0);\n vec2 lims = 1.3 * 0.5 * viewport / focal;\n t.xy = min(lims, max(-lims, t.xy / t.z)) * t.z;\n mat3 J = mat3(\n focal.x / t.z, 0., -(focal.x * t.x) / (t.z * t.z),\n 0., focal.y / t.z, -(focal.y * t.y) / (t.z * t.z),\n 0., 0., 0.\n );\n mat3 W = transpose(mat3(modelViewMatrix));\n mat3 T = W * J;\n mat3 cov = transpose(T) * transpose(Vrk) * T;\n return vec3(cov[0][0] + 0.3, cov[0][1], cov[1][1] + 0.3);\n}\n","vec3 cov2d = compute_cov2d(center, scale, quat);\nfloat det = cov2d.x * cov2d.z - cov2d.y * cov2d.y;\nvec3 conic = vec3(cov2d.z, cov2d.y, cov2d.x) / det;\nfloat mid = 0.5 * (cov2d.x + cov2d.z);\nfloat lambda1 = mid + sqrt(max(0.1, mid * mid - det));\nfloat lambda2 = mid - sqrt(max(0.1, mid * mid - det));\nvec2 v1 = 7.0 * sqrt(lambda1) * normalize(vec2(cov2d.y, lambda1 - cov2d.x));\nvec2 v2 = 7.0 * sqrt(lambda2) * normalize(vec2(-(lambda1 - cov2d.x),cov2d.y));\n\nvColor = color;\nvConic = conic;\nvCenter = vec2(gl_Position) / gl_Position.w;\n\nvPosition = vec2(vCenter + position.x * (position.y < 0.0 ? v1 : v2) / viewport);\ngl_Position = vec4(vPosition, gl_Position.z / gl_Position.w, 1);\n","vec2 d = (vCenter - 2.0 * (gl_FragCoord.xy/viewport - vec2(0.5, 0.5))) * viewport * 0.5;\n\nfloat power = -0.5 * (vConic.x * d.x * d.x + vConic.z * d.y * d.y) + vConic.y * d.x * d.y;\n\nif (power > 0.0) discard;\nfloat alpha = min(0.99, vColor.a * exp(power));\nif(alpha < minAlpha) discard;\n\ngl_FragColor = vec4(vColor.rgb, alpha);\n//vec2 d = (vCenter - 2.0 * (gl_FragCoord.xy/viewport - vec2(0.5, 0.5))) * viewport * 0.5;\n//\n//float power = -0.5 * (vConic.x * d.x * d.x + vConic.z * d.y * d.y) + vConic.y * d.x * d.y;\n//\n//if (power > 0.0) discard;\n//float alpha = min(0.99, vColor.a * exp(power));\n//if(alpha < minAlpha) discard;\n//\n//diffuseColor *= vec4(vColor.rgb, alpha);\n","import fragmentParsShaderSource from '../shaders/gsplat.pars.frag.glsl'\nimport vertexParsShaderSource from '../shaders/gsplat.pars.vert.glsl'\nimport vertexShaderSource from '../shaders/gsplat.main.vert.glsl'\nimport fragmentShaderSource from '../shaders/gsplat.main.frag.glsl'\n\nexport const gaussianSplatShaders = {\n main_frag: '\\n' + fragmentShaderSource + '\\n',\n main_vert: '\\n' + vertexShaderSource + '\\n',\n pars_frag: fragmentParsShaderSource,\n pars_vert: vertexParsShaderSource,\n}\n","import {\n Camera,\n IMaterial,\n MaterialExtension,\n PerspectiveCamera,\n Shader,\n shaderReplaceString,\n Vector2,\n WebGLRenderer,\n} from 'threepipe'\nimport {computeFocalLengths} from './util'\nimport {gaussianSplatShaders} from '../shaders'\n\nexport class GaussianSplatMaterialExtension implements MaterialExtension {\n readonly isGaussianSplatMaterialExtension = true\n extraUniforms = {\n viewport: {value: new Vector2()},\n focal: {value: new Vector2()},\n minAlpha: {value: 0.02},\n }\n parsFragmentSnippet = gaussianSplatShaders.pars_frag\n parsVertexSnippet = gaussianSplatShaders.pars_vert\n shaderExtender = (shader: Shader, material: IMaterial) => {\n shader.vertexShader = shaderReplaceString(shader.vertexShader,\n '#include <begin_vertex>',\n 'vec3 transformed = vec3( center );')\n if (shader.vertexShader.includes('#include <beginnormal_vertex>')) {\n // todo: get correct normal by rendering to depth and then sampling the normal\n shader.vertexShader = shaderReplaceString(shader.vertexShader,\n '#include <beginnormal_vertex>',\n '\\nobjectNormal = vec3(1,0,0);\\n', {append: true})\n }\n shader.vertexShader = shaderReplaceString(shader.vertexShader,\n '#include <project_vertex>',\n gaussianSplatShaders.main_vert, {append: true})\n\n if (!material.isGBufferMaterial && !material.userData.isGBufferMaterial) {\n shader.fragmentShader = shaderReplaceString(shader.fragmentShader,\n '#include <map_fragment>',\n shaderReplaceString(\n gaussianSplatShaders.main_frag,\n /gl_FragColor\\s*=/, // because of minification\n 'diffuseColor*='\n ), {prepend: true})\n }\n // eslint-disable-next-line no-constant-condition\n if (0)\n shader.fragmentShader = shaderReplaceString(shader.fragmentShader,\n '#include <output_fragment>',\n '\\ngl_FragColor=diffuseColor;',\n // '\\ngl_FragColor=vec4(reflectedLight.directDiffuse, 1.);',\n // '\\ngl_FragColor=vec4(geometryNormal, 1.);',\n {append: true})\n return shader\n }\n isCompatible = (material: IMaterial) =>\n !!material.isPhysicalMaterial ||\n !!material.isUnlitMaterial ||\n !!material.isGBufferMaterial ||\n !!material.userData.isGBufferMaterial\n\n setDirty?: () => void\n\n private _currentCamera?: PerspectiveCamera | Camera\n private _renderer?: WebGLRenderer\n\n public set minAlpha(value: number) {\n this.extraUniforms.minAlpha.value = value\n this.setDirty && this.setDirty()\n }\n\n\n constructor() {\n window.addEventListener('resize', this._refresh)\n }\n\n dispose() {\n // todo: add again on added to mesh?\n window.removeEventListener('resize', this._refresh)\n }\n\n update(camera: PerspectiveCamera | Camera, renderer: WebGLRenderer): void {\n if (this._currentCamera === camera && this._renderer === renderer) return\n this._renderer = renderer\n this._currentCamera = camera\n this._refresh()\n }\n\n private _refresh = (): void => {\n if (!this._currentCamera) return\n const size = new Vector2()\n this._renderer?.getSize(size)\n const dpr = this._renderer?.getPixelRatio() || 1\n let fov = 75\n let aspect = size.x / size.y\n\n if (this._currentCamera instanceof PerspectiveCamera) {\n fov = this._currentCamera.fov\n aspect = this._currentCamera.aspect\n }\n\n this.extraUniforms.focal.value = computeFocalLengths(size.x, size.y, fov, aspect, dpr)\n this.extraUniforms.viewport.value = new Vector2(size.x * dpr, size.y * dpr)\n }\n}\n","import {PhysicalMaterial} from 'threepipe'\nimport {GaussianSplatMaterialExtension} from './GaussianSplatMaterialExtension'\n\nexport class GaussianSplatMaterialPhysical extends PhysicalMaterial {\n readonly isGaussianSplatMaterialPhysical = true\n\n gsplatExtension = new GaussianSplatMaterialExtension()\n\n constructor() {\n super({\n depthTest: true,\n depthWrite: false,\n transparent: true,\n vertexColors: false,\n })\n // this.userData.renderToGBuffer = true\n // this.userData.renderToDepth = true\n this.registerMaterialExtensions([this.gsplatExtension])\n }\n\n dispose() {\n this.gsplatExtension.dispose()\n return super.dispose()\n }\n}\n","import {Camera, PerspectiveCamera, ShaderMaterial2, Vector2, WebGLRenderer} from 'threepipe'\nimport {computeFocalLengths} from './util'\nimport {gaussianSplatShaders} from '../shaders'\n\nexport class GaussianSplatMaterialRaw extends ShaderMaterial2 {\n private _currentCamera?: PerspectiveCamera | Camera\n private _renderer?: WebGLRenderer\n\n readonly isGaussianSplatMaterialRaw = true\n\n public set minAlpha(value: number) {\n this.uniforms.minAlpha.value = value\n this.needsUpdate = true\n }\n\n constructor() {\n super({\n uniforms: {\n viewport: {value: new Vector2()},\n focal: {value: new Vector2()},\n minAlpha: {value: 0.02},\n },\n fragmentShader: `${gaussianSplatShaders.pars_frag}\nvoid main () {\n${gaussianSplatShaders.main_frag}\n}`,\n vertexShader: `${gaussianSplatShaders.pars_vert}\nvoid main () {\n gl_Position = projectionMatrix * modelViewMatrix * vec4(center, 1);\n ${gaussianSplatShaders.main_vert}\n}`,\n depthTest: true,\n depthWrite: false,\n transparent: true,\n }, true)\n\n window.addEventListener('resize', this._refresh)\n }\n\n private _refresh = (): void => {\n if (!this._currentCamera) return\n\n const size = new Vector2()\n this._renderer?.getSize(size)\n const width = size.x\n const height = size.y\n\n const dpr = this._renderer?.getPixelRatio() || 1\n\n let fov = 75\n let aspect = width / height\n\n if (this._currentCamera instanceof PerspectiveCamera) {\n fov = this._currentCamera.fov\n aspect = this._currentCamera.aspect\n }\n\n this.uniforms.focal.value = computeFocalLengths(width, height, fov, aspect, dpr)\n this.uniforms.viewport.value = new Vector2(width * dpr, height * dpr)\n }\n\n dispose() {\n // todo: add again on added to mesh?\n window.removeEventListener('resize', this._refresh)\n return super.dispose()\n }\n\n update(camera: PerspectiveCamera | Camera, renderer: WebGLRenderer): void {\n this._renderer = renderer\n this._currentCamera = camera\n this._refresh()\n }\n}\n","import {UnlitMaterial} from 'threepipe'\n\nimport {GaussianSplatMaterialExtension} from './GaussianSplatMaterialExtension'\n\nexport class GaussianSplatMaterialUnlit extends UnlitMaterial {\n readonly isGaussianSplatMaterialUnlit = true\n gsplatExtension = new GaussianSplatMaterialExtension()\n\n constructor() {\n super({\n depthTest: true,\n depthWrite: false,\n transparent: true,\n vertexColors: false,\n })\n // this.userData.renderToGBuffer = true\n // this.userData.renderToDepth = true\n this.registerMaterialExtensions([this.gsplatExtension])\n }\n\n dispose() {\n this.gsplatExtension.dispose()\n return super.dispose()\n }\n}\n\n","/**\n * @license\n * Copyright 2019 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\nconst proxyMarker = Symbol(\"Comlink.proxy\");\nconst createEndpoint = Symbol(\"Comlink.endpoint\");\nconst releaseProxy = Symbol(\"Comlink.releaseProxy\");\nconst finalizer = Symbol(\"Comlink.finalizer\");\nconst throwMarker = Symbol(\"Comlink.thrown\");\nconst isObject = (val) => (typeof val === \"object\" && val !== null) || typeof val === \"function\";\n/**\n * Internal transfer handle to handle objects marked to proxy.\n */\nconst proxyTransferHandler = {\n canHandle: (val) => isObject(val) && val[proxyMarker],\n serialize(obj) {\n const { port1, port2 } = new MessageChannel();\n expose(obj, port1);\n return [port2, [port2]];\n },\n deserialize(port) {\n port.start();\n return wrap(port);\n },\n};\n/**\n * Internal transfer handler to handle thrown exceptions.\n */\nconst throwTransferHandler = {\n canHandle: (value) => isObject(value) && throwMarker in value,\n serialize({ value }) {\n let serialized;\n if (value instanceof Error) {\n serialized = {\n isError: true,\n value: {\n message: value.message,\n name: value.name,\n stack: value.stack,\n },\n };\n }\n else {\n serialized = { isError: false, value };\n }\n return [serialized, []];\n },\n deserialize(serialized) {\n if (serialized.isError) {\n throw Object.assign(new Error(serialized.value.message), serialized.value);\n }\n throw serialized.value;\n },\n};\n/**\n * Allows customizing the serialization of certain values.\n */\nconst transferHandlers = new Map([\n [\"proxy\", proxyTransferHandler],\n [\"throw\", throwTransferHandler],\n]);\nfunction isAllowedOrigin(allowedOrigins, origin) {\n for (const allowedOrigin of allowedOrigins) {\n if (origin === allowedOrigin || allowedOrigin === \"*\") {\n return true;\n }\n if (allowedOrigin instanceof RegExp && allowedOrigin.test(origin)) {\n return true;\n }\n }\n return false;\n}\nfunction expose(obj, ep = globalThis, allowedOrigins = [\"*\"]) {\n ep.addEventListener(\"message\", function callback(ev) {\n if (!ev || !ev.data) {\n return;\n }\n if (!isAllowedOrigin(allowedOrigins, ev.origin)) {\n console.warn(`Invalid origin '${ev.origin}' for comlink proxy`);\n return;\n }\n const { id, type, path } = Object.assign({ path: [] }, ev.data);\n const argumentList = (ev.data.argumentList || []).map(fromWireValue);\n let returnValue;\n try {\n const parent = path.slice(0, -1).reduce((obj, prop) => obj[prop], obj);\n const rawValue = path.reduce((obj, prop) => obj[prop], obj);\n switch (type) {\n case \"GET\" /* MessageType.GET */:\n {\n returnValue = rawValue;\n }\n break;\n case \"SET\" /* MessageType.SET */:\n {\n parent[path.slice(-1)[0]] = fromWireValue(ev.data.value);\n returnValue = true;\n }\n break;\n case \"APPLY\" /* MessageType.APPLY */:\n {\n returnValue = rawValue.apply(parent, argumentList);\n }\n break;\n case \"CONSTRUCT\" /* MessageType.CONSTRUCT */:\n {\n const value = new rawValue(...argumentList);\n returnValue = proxy(value);\n }\n break;\n case \"ENDPOINT\" /* MessageType.ENDPOINT */:\n {\n const { port1, port2 } = new MessageChannel();\n expose(obj, port2);\n returnValue = transfer(port1, [port1]);\n }\n break;\n case \"RELEASE\" /* MessageType.RELEASE */:\n {\n returnValue = undefined;\n }\n break;\n default:\n return;\n }\n }\n catch (value) {\n returnValue = { value, [throwMarker]: 0 };\n }\n Promise.resolve(returnValue)\n .catch((value) => {\n return { value, [throwMarker]: 0 };\n })\n .then((returnValue) => {\n const [wireValue, transferables] = toWireValue(returnValue);\n ep.postMessage(Object.assign(Object.assign({}, wireValue), { id }), transferables);\n if (type === \"RELEASE\" /* MessageType.RELEASE */) {\n // detach and deactive after sending release response above.\n ep.removeEventListener(\"message\", callback);\n closeEndPoint(ep);\n if (finalizer in obj && typeof obj[finalizer] === \"function\") {\n obj[finalizer]();\n }\n }\n })\n .catch((error) => {\n // Send Serialization Error To Caller\n const [wireValue, transferables] = toWireValue({\n value: new TypeError(\"Unserializable return value\"),\n [throwMarker]: 0,\n });\n ep.postMessage(Object.assign(Object.assign({}, wireValue), { id }), transferables);\n });\n });\n if (ep.start) {\n ep.start();\n }\n}\nfunction isMessagePort(endpoint) {\n return endpoint.constructor.name === \"MessagePort\";\n}\nfunction closeEndPoint(endpoint) {\n if (isMessagePort(endpoint))\n endpoint.close();\n}\nfunction wrap(ep, target) {\n return createProxy(ep, [], target);\n}\nfunction throwIfProxyReleased(isReleased) {\n if (isReleased) {\n throw new Error(\"Proxy has been released and is not useable\");\n }\n}\nfunction releaseEndpoint(ep) {\n return requestResponseMessage(ep, {\n type: \"RELEASE\" /* MessageType.RELEASE */,\n }).then(() => {\n closeEndPoint(ep);\n });\n}\nconst proxyCounter = new WeakMap();\nconst proxyFinalizers = \"FinalizationRegistry\" in globalThis &&\n new FinalizationRegistry((ep) => {\n const newCount = (proxyCounter.get(ep) || 0) - 1;\n proxyCounter.set(ep, newCount);\n if (newCount === 0) {\n releaseEndpoint(ep);\n }\n });\nfunction registerProxy(proxy, ep) {\n const newCount = (proxyCounter.get(ep) || 0) + 1;\n proxyCounter.set(ep, newCount);\n if (proxyFinalizers) {\n proxyFinalizers.register(proxy, ep, proxy);\n }\n}\nfunction unregisterProxy(proxy) {\n if (proxyFinalizers) {\n proxyFinalizers.unregister(proxy);\n }\n}\nfunction createProxy(ep, path = [], target = function () { }) {\n let isProxyReleased = false;\n const proxy = new Proxy(target, {\n get(_target, prop) {\n throwIfProxyReleased(isProxyReleased);\n if (prop === releaseProxy) {\n return () => {\n unregisterProxy(proxy);\n releaseEndpoint(ep);\n isProxyReleased = true;\n };\n }\n if (prop === \"then\") {\n if (path.length === 0) {\n return { then: () => proxy };\n }\n const r = requestResponseMessage(ep, {\n type: \"GET\" /* MessageType.GET */,\n path: path.map((p) => p.toString()),\n }).then(fromWireValue);\n return r.then.bind(r);\n }\n return createProxy(ep, [...path, prop]);\n },\n set(_target, prop, rawValue) {\n throwIfProxyReleased(isProxyReleased);\n // FIXME: ES6 Proxy Handler `set` methods are supposed to return a\n // boolean. To show good will, we return true asynchronously ¯\\_(ツ)_/¯\n const [value, transferables] = toWireValue(rawValue);\n return requestResponseMessage(ep, {\n type: \"SET\" /* MessageType.SET */,\n path: [...path, prop].map((p) => p.toString()),\n value,\n }, transferables).then(fromWireValue);\n },\n apply(_target, _thisArg, rawArgumentList) {\n throwIfProxyReleased(isProxyReleased);\n const last = path[path.length - 1];\n if (last === createEndpoint) {\n return requestResponseMessage(ep, {\n type: \"ENDPOINT\" /* MessageType.ENDPOINT */,\n }).then(fromWireValue);\n }\n // We just pretend that `bind()` didn’t happen.\n if (last === \"bind\") {\n return createProxy(ep, path.slice(0, -1));\n }\n const [argumentList, transferables] = processArguments(rawArgumentList);\n return requestResponseMessage(ep, {\n type: \"APPLY\" /* MessageType.APPLY */,\n path: path.map((p) => p.toString()),\n argumentList,\n }, transferables).then(fromWireValue);\n },\n construct(_target, rawArgumentList) {\n throwIfProxyReleased(isProxyReleased);\n const [argumentList, transferables] = processArguments(rawArgumentList);\n return requestResponseMessage(ep, {\n type: \"CONSTRUCT\" /* MessageType.CONSTRUCT */,\n path: path.map((p) => p.toString()),\n argumentList,\n }, transferables).then(fromWireValue);\n },\n });\n registerProxy(proxy, ep);\n return proxy;\n}\nfunction myFlat(arr) {\n return Array.prototype.concat.apply([], arr);\n}\nfunction processArguments(argumentList) {\n const processed = argumentList.map(toWireValue);\n return [processed.map((v) => v[0]), myFlat(processed.map((v) => v[1]))];\n}\nconst transferCache = new WeakMap();\nfunction transfer(obj, transfers) {\n transferCache.set(obj, transfers);\n return obj;\n}\nfunction proxy(obj) {\n return Object.assign(obj, { [proxyMarker]: true });\n}\nfunction windowEndpoint(w, context = globalThis, targetOrigin = \"*\") {\n return {\n postMessage: (msg, transferables) => w.postMessage(msg, targetOrigin, transferables),\n addEventListener: context.addEventListener.bind(context),\n removeEventListener: context.removeEventListener.bind(context),\n };\n}\nfunction toWireValue(value) {\n for (const [name, handler] of transferHandlers) {\n if (handler.canHandle(value)) {\n const [serializedValue, transferables] = handler.serialize(value);\n return [\n {\n type: \"HANDLER\" /* WireValueType.HANDLER */,\n name,\n value: serializedValue,\n },\n transferables,\n ];\n }\n }\n return [\n {\n type: \"RAW\" /* WireValueType.RAW */,\n value,\n },\n transferCache.get(value) || [],\n ];\n}\nfunction fromWireValue(value) {\n switch (value.type) {\n case \"HANDLER\" /* WireValueType.HANDLER */:\n return transferHandlers.get(value.name).deserialize(value.value);\n case \"RAW\" /* WireValueType.RAW */:\n return value.value;\n }\n}\nfunction requestResponseMessage(ep, msg, transfers) {\n return new Promise((resolve) => {\n const id = generateUUID();\n ep.addEventListener(\"message\", function l(ev) {\n if (!ev.data || !ev.data.id || ev.data.id !== id) {\n return;\n }\n ep.removeEventListener(\"message\", l);\n resolve(ev.data);\n });\n if (ep.start) {\n ep.start();\n }\n ep.postMessage(Object.assign({ id }, msg), transfers);\n });\n}\nfunction generateUUID() {\n return new Array(4)\n .fill(0)\n .map(() => Math.floor(Math.random() * Number.MAX_SAFE_INTEGER).toString(16))\n .join(\"-\");\n}\n\nexport { createEndpoint, expose, finalizer, proxy, proxyMarker, releaseProxy, transfer, transferHandlers, windowEndpoint, wrap };\n//# sourceMappingURL=comlink.mjs.map\n","import type {WasmSorter} from '../cpp-sorter/worker'\nimport {Remote, transfer} from 'comlink'\nimport {\n Box3,\n BufferAttribute,\n Camera,\n IGeometry,\n iGeometryCommons,\n InstancedBufferAttribute,\n InstancedBufferGeometry,\n type IObject3D,\n Matrix4,\n PerspectiveCamera,\n Sphere,\n Vector3,\n} from 'threepipe'\n\nexport class GaussianSplatGeometry extends InstancedBufferGeometry implements IGeometry {\n constructor(\n private _worker: Remote<WasmSorter>,\n private _vertexCount: number,\n private _maxSplats: number,\n private _onLoad?: (geometry: GaussianSplatGeometry) => void,\n ) {\n super()\n iGeometryCommons.upgradeGeometry.call(this)\n this.initAttributes()\n }\n\n readonly isGaussianSplatGeometry = true\n\n assetType: 'geometry' // dont set the value here since its checked in upgradeGeometry\n center2 = iGeometryCommons.center2\n setDirty = iGeometryCommons.setDirty\n refreshUi = iGeometryCommons.refreshUi\n appliedMeshes = new Set<IObject3D>()\n\n private _viewProj: number[] = []\n private _sortRunning = false\n\n private _initialized = false\n\n private _centersBuffer: Float32Array = new Float32Array(0)\n\n public async update(camera: PerspectiveCamera | Camera, meshMatrixWorld: Matrix4) {\n if (this._sortRunning || !this._initialized || !this._worker) {\n return\n }\n\n camera.updateMatrixWorld(true)\n\n this._viewProj = new Matrix4().multiply(camera.projectionMatrix).multiply(camera.matrixWorldInverse).multiply(meshMatrixWorld).elements\n\n this._sortRunning = true\n const viewProj = new Float32Array(this._viewProj)\n const result = await this._worker.runSort(viewProj)\n\n const {quat, scale, center, color} = this._extractViews(result)\n\n if (this._centersBuffer.length !== center.length) this._centersBuffer = new Float32Array(center)\n else this._centersBuffer.set(center)\n\n ;(this.attributes.color as InstancedBufferAttribute).array = color;\n (this.attributes.quat as InstancedBufferAttribute).array = quat;\n (this.attributes.scale as InstancedBufferAttribute).array = scale;\n (this.attributes.center as InstancedBufferAttribute).array = this._centersBuffer\n // (this.attributes.center as InstancedBufferAttribute).array = center\n\n const pms = Promise.all([\n new Promise<void>(resolve => (this.attributes.color as InstancedBufferAttribute).onUpload(resolve)),\n new Promise<void>(resolve => (this.attributes.quat as InstancedBufferAttribute).onUpload(resolve)),\n new Promise<void>(resolve => (this.attributes.scale as InstancedBufferAttribute).onUpload(resolve)),\n // new Promise<void>(resolve => (this.attributes.center as InstancedBufferAttribute).onUpload(resolve)),\n ])\n\n this.attributes.color.needsUpdate = true\n this.attributes.quat.needsUpdate = true\n this.attributes.scale.needsUpdate = true\n this.attributes.center.needsUpdate = true\n\n this.setDirty()\n\n await pms\n\n await this._worker.returnBuffer(transfer(result, [result]))\n\n this._sortRunning = false\n }\n\n async initAttributes() {\n const viewProj = new Float32Array(this._viewProj)\n const result = await this._worker.runSort(viewProj)\n const {quat, scale, center, color} = this._extractViews(result)\n\n this.setAttribute('color', new InstancedBufferAttribute(color, 4, true))\n this.setAttribute('quat', new InstancedBufferAttribute(quat, 4, true))\n this.setAttribute('scale', new InstancedBufferAttribute(scale, 3, true))\n this.setAttribute('center', new InstancedBufferAttribute(center, 3, true))\n this.setAttribute('position', new BufferAttribute(new Float32Array([1, -1, 0, 1, 1, 0, -1, -1, 0, -1, 1, 0]), 3, true))\n\n this.attributes.position.needsUpdate = true\n this.setIndex(new BufferAttribute(new Uint16Array([0, 1, 2, 2, 3, 0]), 1, true))\n this.instanceCount = Math.min(quat.length / 4, this._maxSplats)\n this.computeBoundingBox()\n this.computeBoundingSphere()\n\n this._initialized = true\n this.setDirty()\n this._onLoad && this._onLoad(this)\n }\n\n private _extractViews(receivedBuffer: ArrayBuffer): {quat: Float32Array; scale: Float32Array; center: Float32Array; color: Float32Array} {\n const combined = new Float32Array(receivedBuffer)\n\n const quatLength = 4 * this._vertexCount\n const scaleLength = 3 * this._vertexCount\n const centerLength = 3 * this._vertexCount\n const colorLength = 4 * this._vertexCount\n\n const quatOffset = 0\n const scaleOffset = quatOffset + quatLength\n const centerOffset = scaleOffset + scaleLength\n const colorOffset = centerOffset + centerLength\n\n const quat = combined.subarray(quatOffset, quatOffset + quatLength)\n const scale = combined.subarray(scaleOffset, scaleOffset + scaleLength)\n const center = combined.subarray(centerOffset, centerOffset + centerLength)\n const color = combined.subarray(colorOffset, colorOffset + colorLength)\n\n return {quat, scale, center, color}\n }\n\n computeBoundingBox() {\n if (!this.getAttribute('center')) return super.computeBoundingBox()\n\n const box = this.boundingBox ?? (this.boundingBox = new Box3())\n box.setFromBufferAttribute(this.getAttribute('center') as InstancedBufferAttribute)\n\n if (isNaN(this.boundingBox!.min.x) || isNaN(this.boundingBox!.min.y) || isNaN(this.boundingBox!.min.z)) {\n console.error('GaussianSplatGeometry.computeBoundingBox(): Computed min/max have NaN values. The \"position\" attribute is likely to have NaN values.', this)\n }\n }\n\n computeBoundingSphere() {\n\n if (this.boundingSphere === null) this.boundingSphere = new Sphere()\n\n const position = this.attributes.center\n\n if (position && (position as any).isGLBufferAttribute) {\n console.error('THREE.BufferGeometry.computeBoundingSphere(): GLBufferAttribute requires a manual bounding sphere. Alternatively set \"mesh.frustumCulled\" to \"false\".', this)\n this.boundingSphere.set(new Vector3(), Infinity)\n return\n }\n\n if (position) {\n // first, find the center of the bounding sphere\n const center = this.boundingSphere.center\n if (!this.boundingBox) this.computeBoundingBox()\n this.boundingBox!.getCenter(center)\n\n // second, try to find a boundingSphere with a radius smaller than the\n // boundingSphere of the boundingBox: sqrt(3) smaller in the best case\n\n let maxRadiusSq = 0\n const vector = new Vector3()\n\n for (let i = 0, il = position.count; i < il; i++) {\n vector.fromBufferAttribute(position, i)\n maxRadiusSq = Math.max(maxRadiusSq, center.distanceToSquared(vector))\n }\n\n this.boundingSphere.radius = Math.sqrt(maxRadiusSq)\n\n if (isNaN(this.boundingSphere.radius)) {\n console.error('THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The \"position\" attribute is likely to have NaN values.', this)\n }\n\n }\n\n }\n\n}\n","import {GaussianSplatGeometry} from '../geometry/GaussianSplatGeometry'\nimport {Camera, IMaterial, Mesh2, PerspectiveCamera, WebGLRenderer} from 'threepipe'\nimport type {GaussianSplatMaterialRaw} from '../materials/GaussianSplatMaterialRaw'\nimport {GaussianSplatMaterialUnlit} from '../materials/GaussianSplatMaterialUnlit'\nimport {Matrix4, Ray, Raycaster, Sphere, Vector3} from 'three'\nimport {GaussianSplatMaterialExtension} from '../materials/GaussianSplatMaterialExtension'\n\nexport class GaussianSplatMesh extends Mesh2<GaussianSplatGeometry, IMaterial> {\n readonly isGaussianSplatMesh = true\n\n constructor(geometry: GaussianSplatGeometry, material: IMaterial) {\n super(geometry, material)\n this.frustumCulled = false\n }\n\n public async update(camera: PerspectiveCamera | Camera, renderer: WebGLRenderer) {\n if ((this.material as any as GaussianSplatMaterialRaw)?.isGaussianSplatMaterialRaw) {\n (this.material as any as GaussianSplatMaterialRaw).update(camera, renderer)\n } else if (this.material) {\n const ext =\n (this.material as GaussianSplatMaterialUnlit).gsplatExtension ??\n this.material.materialExtensions.find(e=>\n (e as GaussianSplatMaterialExtension).isGaussianSplatMaterialExtension) as GaussianSplatMaterialExtension\n ext && ext.update(camera, renderer)\n }\n this.updateMatrixWorld(true)\n return this.geometry.update(camera, this.matrixWorld)\n }\n\n raycast(raycaster: Raycaster, intersects: any[]) {\n\n const geometry = this.geometry\n const matrixWorld = this.matrixWorld\n // const threshold = raycaster.params.Points?.threshold ?? .01\n const threshold = .02\n\n // Checking boundingSphere distance to ray\n\n if (geometry.boundingSphere === null) geometry.computeBoundingSphere()\n\n const sphere = new Sphere()\n sphere.copy(geometry.boundingSphere!)\n sphere.applyMatrix4(matrixWorld)\n sphere.radius += threshold\n\n if (!raycaster.ray.intersectsSphere(sphere)) return\n\n //\n\n const inverseMatrix = new Matrix4()\n const ray = new Ray()\n\n inverseMatrix.copy(matrixWorld).invert()\n ray.copy(raycaster.ray).applyMatrix4(inverseMatrix)\n\n const localThreshold = threshold / ((this.scale.x + this.scale.y + this.scale.z) / 3)\n const localThresholdSq = localThreshold * localThreshold\n\n const attributes = geometry.attributes\n const positionAttribute = attributes.center\n\n const position = new Vector3()\n for (let i = 0, l = positionAttribute.count; i < l; i++) {\n\n position.fromBufferAttribute(positionAttribute, i)\n\n const rayPointDistanceSq = ray.distanceSqToPoint(position)\n\n if (rayPointDistanceSq < localThresholdSq) {\n\n const intersectPoint = new Vector3()\n\n ray.closestPointToPoint(position, intersectPoint)\n intersectPoint.applyMatrix4(matrixWorld)\n\n const distance = raycaster.ray.origin.distanceTo(intersectPoint)\n\n if (distance < raycaster.near || distance > raycaster.far) return\n\n intersects.push({\n\n distance: distance,\n distanceToRay: Math.sqrt(rayPointDistanceSq),\n point: intersectPoint,\n face: null,\n object: this,\n\n })\n\n\n }\n }\n\n }\n\n}\n","import {Remote, transfer, wrap} from 'comlink'\n// @ts-expect-error query param\nimport WasmSorterWorker from './worker?worker&inline'\nimport type {WasmSorter} from './worker'\n\nexport const SPLAT_ROW_LENGTH = 3 * 4 + 3 * 4 + 4 + 4\n\nfunction trimBuffer(_buffer: Uint8Array, _maxSplats: number, _vertexCount: number): {buffer: Uint8Array; vertexCount: number} {\n const actualVertexCount = Math.min(_vertexCount, _maxSplats)\n const actualBufferSize = SPLAT_ROW_LENGTH * actualVertexCount\n const buffer = _buffer.slice(0, actualBufferSize)\n return {buffer, vertexCount: actualVertexCount}\n}\n\nexport class SortWorkerManager {\n private _workers: Remote<WasmSorter>[] = []\n private _maxWorkers = 8\n\n private _workerCtor: new (vertexCount: number, globalBuffer: Uint8Array) => Remote<WasmSorter>\n\n onError = (e: any) => {\n console.error(e)\n console.error(\n 'ERROR: Line ', e.lineno, ' in ', e.filename, ': ', e.message\n )\n }\n\n constructor() {\n const worker = new WasmSorterWorker()\n worker.addEventListener('error', this.onError, false)\n this._workerCtor = wrap(worker) as any\n }\n\n async createWorker(data: Uint8Array, maxSplats = 1000000) {\n if (this._workers.length < this._maxWorkers) {\n const vertexCount = Math.floor(data.length / SPLAT_ROW_LENGTH)\n const bufferInfo = trimBuffer(data, maxSplats, vertexCount)\n const globalBuffer = transfer(bufferInfo.buffer, [bufferInfo.buffer.buffer])\n const worker = await new this._workerCtor(vertexCount, globalBuffer)\n await worker.load()\n this._workers.push(worker)\n return worker\n }\n console.error('Max workers reached')\n throw new Error('Max workers reached')\n }\n\n async disposeWorker(worker: Remote<WasmSorter>) {\n const index = this._workers.indexOf(worker)\n if (index !== -1) {\n this._workers.splice(index, 1)\n await worker.dispose()\n }\n }\n}\n","import {FileLoader, ILoader, IMaterial, Loader, LoadingManager} from 'threepipe'\nimport {SortWorkerManager, SPLAT_ROW_LENGTH} from '../cpp-sorter/SortWorkerManager'\nimport {GaussianSplatGeometry} from '../geometry/GaussianSplatGeometry'\nimport {GaussianSplatMesh} from '../mesh/GaussianSplatMesh'\nimport {GaussianSplatMaterialUnlit} from '../materials/GaussianSplatMaterialUnlit'\n\nexport class SplatLoader extends Loader implements ILoader {\n sortWorkerManager: SortWorkerManager\n\n materialConstructor = (_: GaussianSplatGeometry): IMaterial|undefined => new GaussianSplatMaterialUnlit()\n\n constructor(manager?: LoadingManager) {\n super(manager)\n }\n\n onGeometryLoad = (_: GaussianSplatGeometry)=>{\n return\n }\n\n public load(url: string, onLoad?: (data: GaussianSplatMesh) => void, onProgress?: (event: ProgressEvent) => void, onError?: (event: ErrorEvent) => void): void {\n // const path = ( scope.path === '' ) ? LoaderUtils.extractUrlBase( url ) : scope.path;\n const loader = new FileLoader(this.manager)\n loader.setPath(this.path)\n loader.setResponseType('arraybuffer')\n loader.setRequestHeader(this.requestHeader)\n loader.setWithCredentials(this.withCredentials)\n loader.load(url, async(buffer) => {\n try {\n const data = new Uint8Array(buffer as ArrayBuffer)\n const maxSplats = 1000000\n const vertexCount = Math.floor(data.length / SPLAT_ROW_LENGTH)\n const worker = await this.sortWorkerManager.createWorker(data, maxSplats)\n const geometry = new GaussianSplatGeometry(worker, vertexCount, maxSplats, this.onGeometryLoad)\n const mesh = new GaussianSplatMesh(geometry, this.materialConstructor(geometry) as any)\n // const mesh = new GaussianSplatMesh(geometry, new UnlitMaterial() as any)\n mesh.rotation.x = Math.PI\n if (!url.startsWith('blob:') && !url.startsWith('data:'))\n mesh.name = url.split('/').pop()!.split('?')[0]\n onLoad && onLoad(mesh)\n } catch (e) {\n if (onError) onError(e)\n else console.error(e)\n this.manager.itemError(url)\n }\n }, onProgress, onError)\n }\n\n public async loadAsync(url: string, onProgress?: (event: ProgressEvent) => void): Promise<GaussianSplatMesh> {\n return new Promise((resolve, reject) => this.load(url, resolve, onProgress, reject))\n }\n}\n","import {AViewerPluginSync, createStyles, IGeometryEvent, ILoader, Importer, ThreeViewer} from 'threepipe'\nimport styles from './ThreeGaussianSplatPlugin.css?inline'\nimport {GaussianSplatMesh} from './index'\nimport {AnyOptions} from 'ts-browser-helpers'\nimport {SplatLoader} from './loaders/SplatLoader'\nimport {SortWorkerManager} from './cpp-sorter/SortWorkerManager'\nimport {GaussianSplatGeometry} from './geometry/GaussianSplatGeometry'\n\nexport class ThreeGaussianSplatPlugin extends AViewerPluginSync<string> {\n public static readonly PluginType: string = 'ThreeGaussianSplatPlugin'\n enabled = true\n dependencies = []\n toJSON: any = null\n\n constructor() {\n super()\n }\n\n splats: GaussianSplatMesh[] = []\n private _ready = false\n onAdded(viewer: ThreeViewer) {\n super.onAdded(viewer)\n createStyles(styles, viewer.container)\n viewer.assetManager.importer.addImporter(this._importer)\n viewer.scene.addEventListener('mainCameraUpdate', this._activeCameraUpdate)\n viewer.scene.addEventListener('geometryUpdate', this._geometryUpdate)\n this._ready = true\n }\n\n onRemove(viewer: ThreeViewer) {\n viewer.assetManager.importer.removeImporter(this._importer)\n }\n\n private _activeCameraUpdate = () => {\n if (!this._ready || this.isDisabled()) return\n this.splats.forEach(async splat=>splat.update(this._viewer!.scene.mainCamera, this._viewer!.renderManager.webglRenderer))\n }\n\n private _geometryUpdate = (event: IGeometryEvent) => {\n if (!this._ready || this.isDisabled() || !(event.geometry as GaussianSplatGeometry)?.isGaussianSplatGeometry) return\n event.geometry!.appliedMeshes.forEach(async(splat: GaussianSplatMesh)=>splat.update ? splat.update(this._viewer!.scene.mainCamera, this._viewer!.renderManager.webglRenderer) : undefined)\n }\n\n private _sortWorkerManager = new SortWorkerManager() // todo: dispose?\n protected _importer = new Importer(class extends SplatLoader implements ILoader {\n onDispose: (mesh: GaussianSplatMesh)=>void = ()=>{return}\n onCreate: (mesh: GaussianSplatMesh)=>void = ()=>{return}\n transform(res: GaussianSplatMesh, _: AnyOptions): any {\n res.addEventListener('dispose', ()=>this.onDispose(res))\n this.onCreate(res)\n return res\n }\n }, ['splat'], [], true, (l)=>{\n if (!l) return l\n l.sortWorkerManager = this._sortWorkerManager\n l.onDispose = (mesh: GaussianSplatMesh)=>{ // todo: dispose should only remove from GPU?\n this.splats = this.splats.filter(splat=>splat !== mesh)\n }\n l.onCreate = (mesh: GaussianSplatMesh)=>{\n this.splats.push(mesh)\n }\n l.onGeometryLoad = (_)=>{\n // console.log('geometry loaded')\n // console.log(geometry.boundingBox)\n this._viewer?.setDirty()\n }\n return l\n })\n\n // protected _viewerListeners = {\n // preRender: (_: IViewerEvent) => {\n // },\n // }\n}\n","/**\n * ThreeGaussianSplatPlugin: Threejs utilities and threepipe plugin and material extension for Gaussian Splatting\n *\n * @license\n * A port of -\n * https://github.com/zappar-xr/three-gaussian-splat\n * MIT License (c) 2023 Zappar Limited\n * Which is based on -\n * gsplat.js, MIT License (c) 2023 Dylan Ebert\n * antimatter15/splat, MIT License (c) 2023 Kevin Kwok\n */\n\nexport {GaussianSplatMaterialExtension} from './materials/GaussianSplatMaterialExtension'\nexport {GaussianSplatMaterialPhysical} from './materials/GaussianSplatMaterialPhysical'\nexport {GaussianSplatMaterialRaw} from './materials/GaussianSplatMaterialRaw'\nexport {GaussianSplatMaterialUnlit} from './materials/GaussianSplatMaterialUnlit'\nexport {computeFocalLengths} from './materials/util'\nexport {GaussianSplatGeometry} from './geometry/GaussianSplatGeometry'\nexport {GaussianSplatMesh} from './mesh/GaussianSplatMesh'\nexport {ThreeGaussianSplatPlugin} from './ThreeGaussianSplatPlugin'\nexport {SplatLoader} from './loaders/SplatLoader'\nexport {gaussianSplatShaders} from './shaders'\n","import {ThreeGaussianSplatPlugin} from './three-gaussian-splat'\n\nexport class GaussianSplattingPlugin extends ThreeGaussianSplatPlugin {}\n\nexport * as threeGaussianSplat from './three-gaussian-splat'\n"],"names":["obj","returnValue","proxy","Sphere","Matrix4","Vector3","WasmSorterWorker","index"],"mappings":"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","x_google_ignoreList":[10]}
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../src/three-gaussian-splat/materials/util.ts","../src/three-gaussian-splat/shaders/gsplat.pars.frag.glsl","../src/three-gaussian-splat/shaders/gsplat.pars.vert.glsl","../src/three-gaussian-splat/shaders/gsplat.main.vert.glsl","../src/three-gaussian-splat/shaders/gsplat.main.frag.glsl","../src/three-gaussian-splat/shaders/index.ts","../src/three-gaussian-splat/materials/GaussianSplatMaterialExtension.ts","../src/three-gaussian-splat/materials/GaussianSplatMaterialPhysical.ts","../src/three-gaussian-splat/materials/GaussianSplatMaterialRaw.ts","../src/three-gaussian-splat/materials/GaussianSplatMaterialUnlit.ts","../node_modules/comlink/dist/esm/comlink.mjs","../src/three-gaussian-splat/geometry/GaussianSplatGeometry.ts","../src/three-gaussian-splat/mesh/GaussianSplatMesh.ts","../src/three-gaussian-splat/cpp-sorter/SortWorkerManager.ts","../src/three-gaussian-splat/loaders/SplatLoader.ts","../src/three-gaussian-splat/ThreeGaussianSplatPlugin.ts","../src/three-gaussian-splat/index.ts","../src/index.ts"],"sourcesContent":["import {MathUtils, Vector2} from 'threepipe'\n\nexport const computeFocalLengths = (width: number, height: number, fov: number, aspect: number, dpr: number) => {\n const fovRad = MathUtils.degToRad(fov)\n const fovXRad = 2 * Math.atan(Math.tan(fovRad / 2) * aspect)\n const fy = dpr * height / (2 * Math.tan(fovRad / 2))\n const fx = dpr * width / (2 * Math.tan(fovXRad / 2))\n return new Vector2(fx, fy)\n}\n","// https://github.com/vincent-lecrubier-skydio/react-three-fiber-gaussian-splat\nprecision mediump float;\n\nvarying vec4 vColor;\nvarying vec3 vConic;\nvarying vec2 vCenter;\n\nuniform vec2 viewport;\nuniform vec2 focal;\nuniform float minAlpha;\n","// https://github.com/vincent-lecrubier-skydio/react-three-fiber-gaussian-splat\nprecision mediump float;\n\n#ifndef SHADER_NAME // isRawShaderMaterial\nattribute vec3 position;\nuniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nmat3 transpose(mat3 m) { return mat3(m[0][0], m[1][0], m[2][0], m[0][1], m[1][1], m[2][1], m[0][2], m[1][2], m[2][2]); }\n#endif\n\nattribute vec4 color;\nattribute vec4 quat;\nattribute vec3 scale;\nattribute vec3 center;\n\nuniform vec2 focal;\nuniform vec2 viewport;\n//uniform vec3 sphereCenter;\n//uniform vec3 planeNormal;\n//uniform float planeDistance;\n\nvarying vec4 vColor;\nvarying vec3 vConic;\nvarying vec2 vCenter;\nvarying vec2 vPosition;\n//varying float vDistance;\n//varying float vPlaneSide;\n\nmat3 compute_cov3d(vec3 scale, vec4 rot) {\n mat3 S = mat3(\n scale.x, 0.0, 0.0,\n 0.0, scale.y, 0.0,\n 0.0, 0.0, scale.z\n );\n mat3 R = mat3(\n 1.0 - 2.0 * (rot.z * rot.z + rot.w * rot.w), 2.0 * (rot.y * rot.z - rot.x * rot.w), 2.0 * (rot.y * rot.w + rot.x * rot.z),\n 2.0 * (rot.y * rot.z + rot.x * rot.w), 1.0 - 2.0 * (rot.y * rot.y + rot.w * rot.w), 2.0 * (rot.z * rot.w - rot.x * rot.y),\n 2.0 * (rot.y * rot.w - rot.x * rot.z), 2.0 * (rot.z * rot.w + rot.x * rot.y), 1.0 - 2.0 * (rot.y * rot.y + rot.z * rot.z)\n );\n mat3 M = S * R;\n return transpose(M) * M;\n}\n\nvec3 compute_cov2d(vec3 center, vec3 scale, vec4 rot){\n mat3 Vrk = compute_cov3d(scale, rot);\n vec4 t = modelViewMatrix * vec4(center, 1.0);\n vec2 lims = 1.3 * 0.5 * viewport / focal;\n t.xy = min(lims, max(-lims, t.xy / t.z)) * t.z;\n mat3 J = mat3(\n focal.x / t.z, 0., -(focal.x * t.x) / (t.z * t.z),\n 0., focal.y / t.z, -(focal.y * t.y) / (t.z * t.z),\n 0., 0., 0.\n );\n mat3 W = transpose(mat3(modelViewMatrix));\n mat3 T = W * J;\n mat3 cov = transpose(T) * transpose(Vrk) * T;\n return vec3(cov[0][0] + 0.3, cov[0][1], cov[1][1] + 0.3);\n}\n","vec3 cov2d = compute_cov2d(center, scale, quat);\nfloat det = cov2d.x * cov2d.z - cov2d.y * cov2d.y;\nvec3 conic = vec3(cov2d.z, cov2d.y, cov2d.x) / det;\nfloat mid = 0.5 * (cov2d.x + cov2d.z);\nfloat lambda1 = mid + sqrt(max(0.1, mid * mid - det));\nfloat lambda2 = mid - sqrt(max(0.1, mid * mid - det));\nvec2 v1 = 7.0 * sqrt(lambda1) * normalize(vec2(cov2d.y, lambda1 - cov2d.x));\nvec2 v2 = 7.0 * sqrt(lambda2) * normalize(vec2(-(lambda1 - cov2d.x),cov2d.y));\n\nvColor = color;\nvConic = conic;\nvCenter = vec2(gl_Position) / gl_Position.w;\n\nvPosition = vec2(vCenter + position.x * (position.y < 0.0 ? v1 : v2) / viewport);\ngl_Position = vec4(vPosition, gl_Position.z / gl_Position.w, 1);\n","vec2 d = (vCenter - 2.0 * (gl_FragCoord.xy/viewport - vec2(0.5, 0.5))) * viewport * 0.5;\n\nfloat power = -0.5 * (vConic.x * d.x * d.x + vConic.z * d.y * d.y) + vConic.y * d.x * d.y;\n\nif (power > 0.0) discard;\nfloat alpha = min(0.99, vColor.a * exp(power));\nif(alpha < minAlpha) discard;\n\ngl_FragColor = vec4(vColor.rgb, alpha);\n//vec2 d = (vCenter - 2.0 * (gl_FragCoord.xy/viewport - vec2(0.5, 0.5))) * viewport * 0.5;\n//\n//float power = -0.5 * (vConic.x * d.x * d.x + vConic.z * d.y * d.y) + vConic.y * d.x * d.y;\n//\n//if (power > 0.0) discard;\n//float alpha = min(0.99, vColor.a * exp(power));\n//if(alpha < minAlpha) discard;\n//\n//diffuseColor *= vec4(vColor.rgb, alpha);\n","import fragmentParsShaderSource from '../shaders/gsplat.pars.frag.glsl'\nimport vertexParsShaderSource from '../shaders/gsplat.pars.vert.glsl'\nimport vertexShaderSource from '../shaders/gsplat.main.vert.glsl'\nimport fragmentShaderSource from '../shaders/gsplat.main.frag.glsl'\n\nexport const gaussianSplatShaders = {\n main_frag: '\\n' + fragmentShaderSource + '\\n',\n main_vert: '\\n' + vertexShaderSource + '\\n',\n pars_frag: fragmentParsShaderSource,\n pars_vert: vertexParsShaderSource,\n}\n","import {\n Camera,\n IMaterial,\n MaterialExtension,\n PerspectiveCamera,\n Shader,\n shaderReplaceString,\n Vector2,\n WebGLRenderer,\n} from 'threepipe'\nimport {computeFocalLengths} from './util'\nimport {gaussianSplatShaders} from '../shaders'\n\nexport class GaussianSplatMaterialExtension implements MaterialExtension {\n readonly isGaussianSplatMaterialExtension = true\n extraUniforms = {\n viewport: {value: new Vector2()},\n focal: {value: new Vector2()},\n minAlpha: {value: 0.02},\n }\n parsFragmentSnippet = gaussianSplatShaders.pars_frag\n parsVertexSnippet = gaussianSplatShaders.pars_vert\n shaderExtender = (shader: Shader, material: IMaterial) => {\n shader.vertexShader = shaderReplaceString(shader.vertexShader,\n '#include <begin_vertex>',\n 'vec3 transformed = vec3( center );')\n if (shader.vertexShader.includes('#include <beginnormal_vertex>')) {\n // todo: get correct normal by rendering to depth and then sampling the normal\n shader.vertexShader = shaderReplaceString(shader.vertexShader,\n '#include <beginnormal_vertex>',\n '\\nobjectNormal = vec3(1,0,0);\\n', {append: true})\n }\n shader.vertexShader = shaderReplaceString(shader.vertexShader,\n '#include <project_vertex>',\n gaussianSplatShaders.main_vert, {append: true})\n\n if (!material.isGBufferMaterial && !material.userData.isGBufferMaterial) {\n shader.fragmentShader = shaderReplaceString(shader.fragmentShader,\n '#include <map_fragment>',\n shaderReplaceString(\n gaussianSplatShaders.main_frag,\n /gl_FragColor\\s*=/, // because of minification\n 'diffuseColor*='\n ), {prepend: true})\n }\n // eslint-disable-next-line no-constant-condition\n if (0)\n shader.fragmentShader = shaderReplaceString(shader.fragmentShader,\n '#include <opaque_fragment>',\n '\\ngl_FragColor=diffuseColor;',\n // '\\ngl_FragColor=vec4(reflectedLight.directDiffuse, 1.);',\n // '\\ngl_FragColor=vec4(geometryNormal, 1.);',\n {append: true})\n return shader\n }\n isCompatible = (material: IMaterial) =>\n !!material.isPhysicalMaterial ||\n !!material.isUnlitMaterial ||\n !!material.isGBufferMaterial ||\n !!material.userData.isGBufferMaterial\n\n setDirty?: () => void\n\n private _currentCamera?: PerspectiveCamera | Camera\n private _renderer?: WebGLRenderer\n\n public set minAlpha(value: number) {\n this.extraUniforms.minAlpha.value = value\n this.setDirty && this.setDirty()\n }\n\n\n constructor() {\n window.addEventListener('resize', this._refresh)\n }\n\n dispose() {\n // todo: add again on added to mesh?\n window.removeEventListener('resize', this._refresh)\n }\n\n update(camera: PerspectiveCamera | Camera, renderer: WebGLRenderer): void {\n if (this._currentCamera === camera && this._renderer === renderer) return\n this._renderer = renderer\n this._currentCamera = camera\n this._refresh()\n }\n\n private _refresh = (): void => {\n if (!this._currentCamera) return\n const size = new Vector2()\n this._renderer?.getSize(size)\n const dpr = this._renderer?.getPixelRatio() || 1\n let fov = 75\n let aspect = size.x / size.y\n\n if (this._currentCamera instanceof PerspectiveCamera) {\n fov = this._currentCamera.fov\n aspect = this._currentCamera.aspect\n }\n\n this.extraUniforms.focal.value = computeFocalLengths(size.x, size.y, fov, aspect, dpr)\n this.extraUniforms.viewport.value = new Vector2(size.x * dpr, size.y * dpr)\n }\n}\n","import {PhysicalMaterial} from 'threepipe'\nimport {GaussianSplatMaterialExtension} from './GaussianSplatMaterialExtension'\n\nexport class GaussianSplatMaterialPhysical extends PhysicalMaterial {\n readonly isGaussianSplatMaterialPhysical = true\n\n gsplatExtension = new GaussianSplatMaterialExtension()\n\n constructor() {\n super({\n depthTest: true,\n depthWrite: false,\n transparent: true,\n vertexColors: false,\n })\n // this.userData.renderToGBuffer = true\n // this.userData.renderToDepth = true\n this.registerMaterialExtensions([this.gsplatExtension])\n }\n\n dispose() {\n this.gsplatExtension.dispose()\n return super.dispose()\n }\n}\n","import {Camera, PerspectiveCamera, ShaderMaterial2, Vector2, WebGLRenderer} from 'threepipe'\nimport {computeFocalLengths} from './util'\nimport {gaussianSplatShaders} from '../shaders'\n\nexport class GaussianSplatMaterialRaw extends ShaderMaterial2 {\n private _currentCamera?: PerspectiveCamera | Camera\n private _renderer?: WebGLRenderer\n\n readonly isGaussianSplatMaterialRaw = true\n\n public set minAlpha(value: number) {\n this.uniforms.minAlpha.value = value\n this.needsUpdate = true\n }\n\n constructor() {\n super({\n uniforms: {\n viewport: {value: new Vector2()},\n focal: {value: new Vector2()},\n minAlpha: {value: 0.02},\n },\n fragmentShader: `${gaussianSplatShaders.pars_frag}\nvoid main () {\n${gaussianSplatShaders.main_frag}\n}`,\n vertexShader: `${gaussianSplatShaders.pars_vert}\nvoid main () {\n gl_Position = projectionMatrix * modelViewMatrix * vec4(center, 1);\n ${gaussianSplatShaders.main_vert}\n}`,\n depthTest: true,\n depthWrite: false,\n transparent: true,\n }, true)\n\n window.addEventListener('resize', this._refresh)\n }\n\n private _refresh = (): void => {\n if (!this._currentCamera) return\n\n const size = new Vector2()\n this._renderer?.getSize(size)\n const width = size.x\n const height = size.y\n\n const dpr = this._renderer?.getPixelRatio() || 1\n\n let fov = 75\n let aspect = width / height\n\n if (this._currentCamera instanceof PerspectiveCamera) {\n fov = this._currentCamera.fov\n aspect = this._currentCamera.aspect\n }\n\n this.uniforms.focal.value = computeFocalLengths(width, height, fov, aspect, dpr)\n this.uniforms.viewport.value = new Vector2(width * dpr, height * dpr)\n }\n\n dispose() {\n // todo: add again on added to mesh?\n window.removeEventListener('resize', this._refresh)\n return super.dispose()\n }\n\n update(camera: PerspectiveCamera | Camera, renderer: WebGLRenderer): void {\n this._renderer = renderer\n this._currentCamera = camera\n this._refresh()\n }\n}\n","import {UnlitMaterial} from 'threepipe'\n\nimport {GaussianSplatMaterialExtension} from './GaussianSplatMaterialExtension'\n\nexport class GaussianSplatMaterialUnlit extends UnlitMaterial {\n readonly isGaussianSplatMaterialUnlit = true\n gsplatExtension = new GaussianSplatMaterialExtension()\n\n constructor() {\n super({\n depthTest: true,\n depthWrite: false,\n transparent: true,\n vertexColors: false,\n })\n // this.userData.renderToGBuffer = true\n // this.userData.renderToDepth = true\n this.registerMaterialExtensions([this.gsplatExtension])\n }\n\n dispose() {\n this.gsplatExtension.dispose()\n return super.dispose()\n }\n}\n\n","/**\n * @license\n * Copyright 2019 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\nconst proxyMarker = Symbol(\"Comlink.proxy\");\nconst createEndpoint = Symbol(\"Comlink.endpoint\");\nconst releaseProxy = Symbol(\"Comlink.releaseProxy\");\nconst finalizer = Symbol(\"Comlink.finalizer\");\nconst throwMarker = Symbol(\"Comlink.thrown\");\nconst isObject = (val) => (typeof val === \"object\" && val !== null) || typeof val === \"function\";\n/**\n * Internal transfer handle to handle objects marked to proxy.\n */\nconst proxyTransferHandler = {\n canHandle: (val) => isObject(val) && val[proxyMarker],\n serialize(obj) {\n const { port1, port2 } = new MessageChannel();\n expose(obj, port1);\n return [port2, [port2]];\n },\n deserialize(port) {\n port.start();\n return wrap(port);\n },\n};\n/**\n * Internal transfer handler to handle thrown exceptions.\n */\nconst throwTransferHandler = {\n canHandle: (value) => isObject(value) && throwMarker in value,\n serialize({ value }) {\n let serialized;\n if (value instanceof Error) {\n serialized = {\n isError: true,\n value: {\n message: value.message,\n name: value.name,\n stack: value.stack,\n },\n };\n }\n else {\n serialized = { isError: false, value };\n }\n return [serialized, []];\n },\n deserialize(serialized) {\n if (serialized.isError) {\n throw Object.assign(new Error(serialized.value.message), serialized.value);\n }\n throw serialized.value;\n },\n};\n/**\n * Allows customizing the serialization of certain values.\n */\nconst transferHandlers = new Map([\n [\"proxy\", proxyTransferHandler],\n [\"throw\", throwTransferHandler],\n]);\nfunction isAllowedOrigin(allowedOrigins, origin) {\n for (const allowedOrigin of allowedOrigins) {\n if (origin === allowedOrigin || allowedOrigin === \"*\") {\n return true;\n }\n if (allowedOrigin instanceof RegExp && allowedOrigin.test(origin)) {\n return true;\n }\n }\n return false;\n}\nfunction expose(obj, ep = globalThis, allowedOrigins = [\"*\"]) {\n ep.addEventListener(\"message\", function callback(ev) {\n if (!ev || !ev.data) {\n return;\n }\n if (!isAllowedOrigin(allowedOrigins, ev.origin)) {\n console.warn(`Invalid origin '${ev.origin}' for comlink proxy`);\n return;\n }\n const { id, type, path } = Object.assign({ path: [] }, ev.data);\n const argumentList = (ev.data.argumentList || []).map(fromWireValue);\n let returnValue;\n try {\n const parent = path.slice(0, -1).reduce((obj, prop) => obj[prop], obj);\n const rawValue = path.reduce((obj, prop) => obj[prop], obj);\n switch (type) {\n case \"GET\" /* MessageType.GET */:\n {\n returnValue = rawValue;\n }\n break;\n case \"SET\" /* MessageType.SET */:\n {\n parent[path.slice(-1)[0]] = fromWireValue(ev.data.value);\n returnValue = true;\n }\n break;\n case \"APPLY\" /* MessageType.APPLY */:\n {\n returnValue = rawValue.apply(parent, argumentList);\n }\n break;\n case \"CONSTRUCT\" /* MessageType.CONSTRUCT */:\n {\n const value = new rawValue(...argumentList);\n returnValue = proxy(value);\n }\n break;\n case \"ENDPOINT\" /* MessageType.ENDPOINT */:\n {\n const { port1, port2 } = new MessageChannel();\n expose(obj, port2);\n returnValue = transfer(port1, [port1]);\n }\n break;\n case \"RELEASE\" /* MessageType.RELEASE */:\n {\n returnValue = undefined;\n }\n break;\n default:\n return;\n }\n }\n catch (value) {\n returnValue = { value, [throwMarker]: 0 };\n }\n Promise.resolve(returnValue)\n .catch((value) => {\n return { value, [throwMarker]: 0 };\n })\n .then((returnValue) => {\n const [wireValue, transferables] = toWireValue(returnValue);\n ep.postMessage(Object.assign(Object.assign({}, wireValue), { id }), transferables);\n if (type === \"RELEASE\" /* MessageType.RELEASE */) {\n // detach and deactive after sending release response above.\n ep.removeEventListener(\"message\", callback);\n closeEndPoint(ep);\n if (finalizer in obj && typeof obj[finalizer] === \"function\") {\n obj[finalizer]();\n }\n }\n })\n .catch((error) => {\n // Send Serialization Error To Caller\n const [wireValue, transferables] = toWireValue({\n value: new TypeError(\"Unserializable return value\"),\n [throwMarker]: 0,\n });\n ep.postMessage(Object.assign(Object.assign({}, wireValue), { id }), transferables);\n });\n });\n if (ep.start) {\n ep.start();\n }\n}\nfunction isMessagePort(endpoint) {\n return endpoint.constructor.name === \"MessagePort\";\n}\nfunction closeEndPoint(endpoint) {\n if (isMessagePort(endpoint))\n endpoint.close();\n}\nfunction wrap(ep, target) {\n return createProxy(ep, [], target);\n}\nfunction throwIfProxyReleased(isReleased) {\n if (isReleased) {\n throw new Error(\"Proxy has been released and is not useable\");\n }\n}\nfunction releaseEndpoint(ep) {\n return requestResponseMessage(ep, {\n type: \"RELEASE\" /* MessageType.RELEASE */,\n }).then(() => {\n closeEndPoint(ep);\n });\n}\nconst proxyCounter = new WeakMap();\nconst proxyFinalizers = \"FinalizationRegistry\" in globalThis &&\n new FinalizationRegistry((ep) => {\n const newCount = (proxyCounter.get(ep) || 0) - 1;\n proxyCounter.set(ep, newCount);\n if (newCount === 0) {\n releaseEndpoint(ep);\n }\n });\nfunction registerProxy(proxy, ep) {\n const newCount = (proxyCounter.get(ep) || 0) + 1;\n proxyCounter.set(ep, newCount);\n if (proxyFinalizers) {\n proxyFinalizers.register(proxy, ep, proxy);\n }\n}\nfunction unregisterProxy(proxy) {\n if (proxyFinalizers) {\n proxyFinalizers.unregister(proxy);\n }\n}\nfunction createProxy(ep, path = [], target = function () { }) {\n let isProxyReleased = false;\n const proxy = new Proxy(target, {\n get(_target, prop) {\n throwIfProxyReleased(isProxyReleased);\n if (prop === releaseProxy) {\n return () => {\n unregisterProxy(proxy);\n releaseEndpoint(ep);\n isProxyReleased = true;\n };\n }\n if (prop === \"then\") {\n if (path.length === 0) {\n return { then: () => proxy };\n }\n const r = requestResponseMessage(ep, {\n type: \"GET\" /* MessageType.GET */,\n path: path.map((p) => p.toString()),\n }).then(fromWireValue);\n return r.then.bind(r);\n }\n return createProxy(ep, [...path, prop]);\n },\n set(_target, prop, rawValue) {\n throwIfProxyReleased(isProxyReleased);\n // FIXME: ES6 Proxy Handler `set` methods are supposed to return a\n // boolean. To show good will, we return true asynchronously ¯\\_(ツ)_/¯\n const [value, transferables] = toWireValue(rawValue);\n return requestResponseMessage(ep, {\n type: \"SET\" /* MessageType.SET */,\n path: [...path, prop].map((p) => p.toString()),\n value,\n }, transferables).then(fromWireValue);\n },\n apply(_target, _thisArg, rawArgumentList) {\n throwIfProxyReleased(isProxyReleased);\n const last = path[path.length - 1];\n if (last === createEndpoint) {\n return requestResponseMessage(ep, {\n type: \"ENDPOINT\" /* MessageType.ENDPOINT */,\n }).then(fromWireValue);\n }\n // We just pretend that `bind()` didn’t happen.\n if (last === \"bind\") {\n return createProxy(ep, path.slice(0, -1));\n }\n const [argumentList, transferables] = processArguments(rawArgumentList);\n return requestResponseMessage(ep, {\n type: \"APPLY\" /* MessageType.APPLY */,\n path: path.map((p) => p.toString()),\n argumentList,\n }, transferables).then(fromWireValue);\n },\n construct(_target, rawArgumentList) {\n throwIfProxyReleased(isProxyReleased);\n const [argumentList, transferables] = processArguments(rawArgumentList);\n return requestResponseMessage(ep, {\n type: \"CONSTRUCT\" /* MessageType.CONSTRUCT */,\n path: path.map((p) => p.toString()),\n argumentList,\n }, transferables).then(fromWireValue);\n },\n });\n registerProxy(proxy, ep);\n return proxy;\n}\nfunction myFlat(arr) {\n return Array.prototype.concat.apply([], arr);\n}\nfunction processArguments(argumentList) {\n const processed = argumentList.map(toWireValue);\n return [processed.map((v) => v[0]), myFlat(processed.map((v) => v[1]))];\n}\nconst transferCache = new WeakMap();\nfunction transfer(obj, transfers) {\n transferCache.set(obj, transfers);\n return obj;\n}\nfunction proxy(obj) {\n return Object.assign(obj, { [proxyMarker]: true });\n}\nfunction windowEndpoint(w, context = globalThis, targetOrigin = \"*\") {\n return {\n postMessage: (msg, transferables) => w.postMessage(msg, targetOrigin, transferables),\n addEventListener: context.addEventListener.bind(context),\n removeEventListener: context.removeEventListener.bind(context),\n };\n}\nfunction toWireValue(value) {\n for (const [name, handler] of transferHandlers) {\n if (handler.canHandle(value)) {\n const [serializedValue, transferables] = handler.serialize(value);\n return [\n {\n type: \"HANDLER\" /* WireValueType.HANDLER */,\n name,\n value: serializedValue,\n },\n transferables,\n ];\n }\n }\n return [\n {\n type: \"RAW\" /* WireValueType.RAW */,\n value,\n },\n transferCache.get(value) || [],\n ];\n}\nfunction fromWireValue(value) {\n switch (value.type) {\n case \"HANDLER\" /* WireValueType.HANDLER */:\n return transferHandlers.get(value.name).deserialize(value.value);\n case \"RAW\" /* WireValueType.RAW */:\n return value.value;\n }\n}\nfunction requestResponseMessage(ep, msg, transfers) {\n return new Promise((resolve) => {\n const id = generateUUID();\n ep.addEventListener(\"message\", function l(ev) {\n if (!ev.data || !ev.data.id || ev.data.id !== id) {\n return;\n }\n ep.removeEventListener(\"message\", l);\n resolve(ev.data);\n });\n if (ep.start) {\n ep.start();\n }\n ep.postMessage(Object.assign({ id }, msg), transfers);\n });\n}\nfunction generateUUID() {\n return new Array(4)\n .fill(0)\n .map(() => Math.floor(Math.random() * Number.MAX_SAFE_INTEGER).toString(16))\n .join(\"-\");\n}\n\nexport { createEndpoint, expose, finalizer, proxy, proxyMarker, releaseProxy, transfer, transferHandlers, windowEndpoint, wrap };\n//# sourceMappingURL=comlink.mjs.map\n","import type {WasmSorter} from '../cpp-sorter/worker'\nimport {Remote, transfer} from 'comlink'\nimport {\n Box3,\n BufferAttribute,\n Camera,\n IGeometry,\n iGeometryCommons,\n InstancedBufferAttribute,\n InstancedBufferGeometry,\n type IObject3D,\n Matrix4,\n PerspectiveCamera,\n Sphere,\n Vector3,\n} from 'threepipe'\n\nexport class GaussianSplatGeometry extends InstancedBufferGeometry implements IGeometry {\n constructor(\n private _worker: Remote<WasmSorter>,\n private _vertexCount: number,\n private _maxSplats: number,\n private _onLoad?: (geometry: GaussianSplatGeometry) => void,\n ) {\n super()\n iGeometryCommons.upgradeGeometry.call(this)\n this.initAttributes()\n }\n\n readonly isGaussianSplatGeometry = true\n\n assetType: 'geometry' // dont set the value here since its checked in upgradeGeometry\n center2 = iGeometryCommons.center2\n setDirty = iGeometryCommons.setDirty\n refreshUi = iGeometryCommons.refreshUi\n appliedMeshes = new Set<IObject3D>()\n\n private _viewProj: number[] = []\n private _sortRunning = false\n\n private _initialized = false\n\n private _centersBuffer: Float32Array = new Float32Array(0)\n\n public async update(camera: PerspectiveCamera | Camera, meshMatrixWorld: Matrix4) {\n if (this._sortRunning || !this._initialized || !this._worker) {\n return\n }\n\n camera.updateMatrixWorld(true)\n\n this._viewProj = new Matrix4().multiply(camera.projectionMatrix).multiply(camera.matrixWorldInverse).multiply(meshMatrixWorld).elements\n\n this._sortRunning = true\n const viewProj = new Float32Array(this._viewProj)\n const result = await this._worker.runSort(viewProj)\n\n const {quat, scale, center, color} = this._extractViews(result)\n\n if (this._centersBuffer.length !== center.length) this._centersBuffer = new Float32Array(center)\n else this._centersBuffer.set(center)\n\n ;(this.attributes.color as InstancedBufferAttribute).array = color;\n (this.attributes.quat as InstancedBufferAttribute).array = quat;\n (this.attributes.scale as InstancedBufferAttribute).array = scale;\n (this.attributes.center as InstancedBufferAttribute).array = this._centersBuffer\n // (this.attributes.center as InstancedBufferAttribute).array = center\n\n const pms = Promise.all([\n new Promise<void>(resolve => (this.attributes.color as InstancedBufferAttribute).onUpload(resolve)),\n new Promise<void>(resolve => (this.attributes.quat as InstancedBufferAttribute).onUpload(resolve)),\n new Promise<void>(resolve => (this.attributes.scale as InstancedBufferAttribute).onUpload(resolve)),\n // new Promise<void>(resolve => (this.attributes.center as InstancedBufferAttribute).onUpload(resolve)),\n ])\n\n this.attributes.color.needsUpdate = true\n this.attributes.quat.needsUpdate = true\n this.attributes.scale.needsUpdate = true\n this.attributes.center.needsUpdate = true\n\n this.setDirty()\n\n await pms\n\n await this._worker.returnBuffer(transfer(result, [result]))\n\n this._sortRunning = false\n }\n\n async initAttributes() {\n const viewProj = new Float32Array(this._viewProj)\n const result = await this._worker.runSort(viewProj)\n const {quat, scale, center, color} = this._extractViews(result)\n\n this.setAttribute('color', new InstancedBufferAttribute(color, 4, true))\n this.setAttribute('quat', new InstancedBufferAttribute(quat, 4, true))\n this.setAttribute('scale', new InstancedBufferAttribute(scale, 3, true))\n this.setAttribute('center', new InstancedBufferAttribute(center, 3, true))\n this.setAttribute('position', new BufferAttribute(new Float32Array([1, -1, 0, 1, 1, 0, -1, -1, 0, -1, 1, 0]), 3, true))\n\n this.attributes.position.needsUpdate = true\n this.setIndex(new BufferAttribute(new Uint16Array([0, 1, 2, 2, 3, 0]), 1, true))\n this.instanceCount = Math.min(quat.length / 4, this._maxSplats)\n this.computeBoundingBox()\n this.computeBoundingSphere()\n\n this._initialized = true\n this.setDirty()\n this._onLoad && this._onLoad(this)\n }\n\n private _extractViews(receivedBuffer: ArrayBuffer): {quat: Float32Array; scale: Float32Array; center: Float32Array; color: Float32Array} {\n const combined = new Float32Array(receivedBuffer)\n\n const quatLength = 4 * this._vertexCount\n const scaleLength = 3 * this._vertexCount\n const centerLength = 3 * this._vertexCount\n const colorLength = 4 * this._vertexCount\n\n const quatOffset = 0\n const scaleOffset = quatOffset + quatLength\n const centerOffset = scaleOffset + scaleLength\n const colorOffset = centerOffset + centerLength\n\n const quat = combined.subarray(quatOffset, quatOffset + quatLength)\n const scale = combined.subarray(scaleOffset, scaleOffset + scaleLength)\n const center = combined.subarray(centerOffset, centerOffset + centerLength)\n const color = combined.subarray(colorOffset, colorOffset + colorLength)\n\n return {quat, scale, center, color}\n }\n\n computeBoundingBox() {\n if (!this.getAttribute('center')) return super.computeBoundingBox()\n\n const box = this.boundingBox ?? (this.boundingBox = new Box3())\n box.setFromBufferAttribute(this.getAttribute('center') as InstancedBufferAttribute)\n\n if (isNaN(this.boundingBox!.min.x) || isNaN(this.boundingBox!.min.y) || isNaN(this.boundingBox!.min.z)) {\n console.error('GaussianSplatGeometry.computeBoundingBox(): Computed min/max have NaN values. The \"position\" attribute is likely to have NaN values.', this)\n }\n }\n\n computeBoundingSphere() {\n\n if (this.boundingSphere === null) this.boundingSphere = new Sphere()\n\n const position = this.attributes.center\n\n if (position && (position as any).isGLBufferAttribute) {\n console.error('THREE.BufferGeometry.computeBoundingSphere(): GLBufferAttribute requires a manual bounding sphere. Alternatively set \"mesh.frustumCulled\" to \"false\".', this)\n this.boundingSphere.set(new Vector3(), Infinity)\n return\n }\n\n if (position) {\n // first, find the center of the bounding sphere\n const center = this.boundingSphere.center\n if (!this.boundingBox) this.computeBoundingBox()\n this.boundingBox!.getCenter(center)\n\n // second, try to find a boundingSphere with a radius smaller than the\n // boundingSphere of the boundingBox: sqrt(3) smaller in the best case\n\n let maxRadiusSq = 0\n const vector = new Vector3()\n\n for (let i = 0, il = position.count; i < il; i++) {\n vector.fromBufferAttribute(position, i)\n maxRadiusSq = Math.max(maxRadiusSq, center.distanceToSquared(vector))\n }\n\n this.boundingSphere.radius = Math.sqrt(maxRadiusSq)\n\n if (isNaN(this.boundingSphere.radius)) {\n console.error('THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The \"position\" attribute is likely to have NaN values.', this)\n }\n\n }\n\n }\n\n}\n","import {GaussianSplatGeometry} from '../geometry/GaussianSplatGeometry'\nimport {Camera, IMaterial, Mesh2, PerspectiveCamera, WebGLRenderer} from 'threepipe'\nimport type {GaussianSplatMaterialRaw} from '../materials/GaussianSplatMaterialRaw'\nimport {GaussianSplatMaterialUnlit} from '../materials/GaussianSplatMaterialUnlit'\nimport {Matrix4, Ray, Raycaster, Sphere, Vector3} from 'three'\nimport {GaussianSplatMaterialExtension} from '../materials/GaussianSplatMaterialExtension'\n\nexport class GaussianSplatMesh extends Mesh2<GaussianSplatGeometry, IMaterial> {\n readonly isGaussianSplatMesh = true\n\n constructor(geometry: GaussianSplatGeometry, material: IMaterial) {\n super(geometry, material)\n this.frustumCulled = false\n }\n\n public async update(camera: PerspectiveCamera | Camera, renderer: WebGLRenderer) {\n if ((this.material as any as GaussianSplatMaterialRaw)?.isGaussianSplatMaterialRaw) {\n (this.material as any as GaussianSplatMaterialRaw).update(camera, renderer)\n } else if (this.material) {\n const ext =\n (this.material as GaussianSplatMaterialUnlit).gsplatExtension ??\n this.material.materialExtensions.find(e=>\n (e as GaussianSplatMaterialExtension).isGaussianSplatMaterialExtension) as GaussianSplatMaterialExtension\n ext && ext.update(camera, renderer)\n }\n this.updateMatrixWorld(true)\n return this.geometry.update(camera, this.matrixWorld)\n }\n\n raycast(raycaster: Raycaster, intersects: any[]) {\n\n const geometry = this.geometry\n const matrixWorld = this.matrixWorld\n // const threshold = raycaster.params.Points?.threshold ?? .01\n const threshold = .02\n\n // Checking boundingSphere distance to ray\n\n if (geometry.boundingSphere === null) geometry.computeBoundingSphere()\n\n const sphere = new Sphere()\n sphere.copy(geometry.boundingSphere!)\n sphere.applyMatrix4(matrixWorld)\n sphere.radius += threshold\n\n if (!raycaster.ray.intersectsSphere(sphere)) return\n\n //\n\n const inverseMatrix = new Matrix4()\n const ray = new Ray()\n\n inverseMatrix.copy(matrixWorld).invert()\n ray.copy(raycaster.ray).applyMatrix4(inverseMatrix)\n\n const localThreshold = threshold / ((this.scale.x + this.scale.y + this.scale.z) / 3)\n const localThresholdSq = localThreshold * localThreshold\n\n const attributes = geometry.attributes\n const positionAttribute = attributes.center\n\n const position = new Vector3()\n for (let i = 0, l = positionAttribute.count; i < l; i++) {\n\n position.fromBufferAttribute(positionAttribute, i)\n\n const rayPointDistanceSq = ray.distanceSqToPoint(position)\n\n if (rayPointDistanceSq < localThresholdSq) {\n\n const intersectPoint = new Vector3()\n\n ray.closestPointToPoint(position, intersectPoint)\n intersectPoint.applyMatrix4(matrixWorld)\n\n const distance = raycaster.ray.origin.distanceTo(intersectPoint)\n\n if (distance < raycaster.near || distance > raycaster.far) return\n\n intersects.push({\n\n distance: distance,\n distanceToRay: Math.sqrt(rayPointDistanceSq),\n point: intersectPoint,\n face: null,\n object: this,\n\n })\n\n\n }\n }\n\n }\n\n}\n","import {Remote, transfer, wrap} from 'comlink'\n// @ts-expect-error query param\nimport WasmSorterWorker from './worker?worker&inline'\nimport type {WasmSorter} from './worker'\n\nexport const SPLAT_ROW_LENGTH = 3 * 4 + 3 * 4 + 4 + 4\n\nfunction trimBuffer(_buffer: Uint8Array, _maxSplats: number, _vertexCount: number): {buffer: Uint8Array; vertexCount: number} {\n const actualVertexCount = Math.min(_vertexCount, _maxSplats)\n const actualBufferSize = SPLAT_ROW_LENGTH * actualVertexCount\n const buffer = _buffer.slice(0, actualBufferSize)\n return {buffer, vertexCount: actualVertexCount}\n}\n\nexport class SortWorkerManager {\n private _workers: Remote<WasmSorter>[] = []\n private _maxWorkers = 8\n\n private _workerCtor: new (vertexCount: number, globalBuffer: Uint8Array) => Remote<WasmSorter>\n\n onError = (e: any) => {\n console.error(e)\n console.error(\n 'ERROR: Line ', e.lineno, ' in ', e.filename, ': ', e.message\n )\n }\n\n constructor() {\n const worker = new WasmSorterWorker()\n worker.addEventListener('error', this.onError, false)\n this._workerCtor = wrap(worker) as any\n }\n\n async createWorker(data: Uint8Array, maxSplats = 1000000) {\n if (this._workers.length < this._maxWorkers) {\n const vertexCount = Math.floor(data.length / SPLAT_ROW_LENGTH)\n const bufferInfo = trimBuffer(data, maxSplats, vertexCount)\n const globalBuffer = transfer(bufferInfo.buffer, [bufferInfo.buffer.buffer])\n const worker = await new this._workerCtor(vertexCount, globalBuffer)\n await worker.load()\n this._workers.push(worker)\n return worker\n }\n console.error('Max workers reached')\n throw new Error('Max workers reached')\n }\n\n async disposeWorker(worker: Remote<WasmSorter>) {\n const index = this._workers.indexOf(worker)\n if (index !== -1) {\n this._workers.splice(index, 1)\n await worker.dispose()\n }\n }\n}\n","import {FileLoader, ILoader, IMaterial, Loader, LoadingManager} from 'threepipe'\nimport {SortWorkerManager, SPLAT_ROW_LENGTH} from '../cpp-sorter/SortWorkerManager'\nimport {GaussianSplatGeometry} from '../geometry/GaussianSplatGeometry'\nimport {GaussianSplatMesh} from '../mesh/GaussianSplatMesh'\nimport {GaussianSplatMaterialUnlit} from '../materials/GaussianSplatMaterialUnlit'\n\nexport class SplatLoader extends Loader implements ILoader {\n sortWorkerManager: SortWorkerManager\n\n materialConstructor = (_: GaussianSplatGeometry): IMaterial|undefined => new GaussianSplatMaterialUnlit()\n\n constructor(manager?: LoadingManager) {\n super(manager)\n }\n\n onGeometryLoad = (_: GaussianSplatGeometry)=>{\n return\n }\n\n public load(url: string, onLoad?: (data: GaussianSplatMesh) => void, onProgress?: (event: ProgressEvent) => void, onError?: (event: ErrorEvent) => void): void {\n // const path = ( scope.path === '' ) ? LoaderUtils.extractUrlBase( url ) : scope.path;\n const loader = new FileLoader(this.manager)\n loader.setPath(this.path)\n loader.setResponseType('arraybuffer')\n loader.setRequestHeader(this.requestHeader)\n loader.setWithCredentials(this.withCredentials)\n loader.load(url, async(buffer) => {\n try {\n const data = new Uint8Array(buffer as ArrayBuffer)\n const maxSplats = 1000000\n const vertexCount = Math.floor(data.length / SPLAT_ROW_LENGTH)\n const worker = await this.sortWorkerManager.createWorker(data, maxSplats)\n const geometry = new GaussianSplatGeometry(worker, vertexCount, maxSplats, this.onGeometryLoad)\n const mesh = new GaussianSplatMesh(geometry, this.materialConstructor(geometry) as any)\n // const mesh = new GaussianSplatMesh(geometry, new UnlitMaterial() as any)\n mesh.rotation.x = Math.PI\n if (!url.startsWith('blob:') && !url.startsWith('data:'))\n mesh.name = url.split('/').pop()!.split('?')[0]\n onLoad && onLoad(mesh)\n } catch (e) {\n if (onError) onError(e)\n else console.error(e)\n this.manager.itemError(url)\n }\n }, onProgress, onError)\n }\n\n public async loadAsync(url: string, onProgress?: (event: ProgressEvent) => void): Promise<GaussianSplatMesh> {\n return new Promise((resolve, reject) => this.load(url, resolve, onProgress, reject))\n }\n}\n","import {\n AnyOptions,\n AViewerPluginSync,\n createStyles,\n EventListener2,\n ILoader,\n Importer,\n ISceneEventMap,\n Scene,\n ThreeViewer,\n} from 'threepipe'\nimport styles from './ThreeGaussianSplatPlugin.css?inline'\nimport {GaussianSplatMesh} from './index'\nimport {SplatLoader} from './loaders/SplatLoader'\nimport {SortWorkerManager} from './cpp-sorter/SortWorkerManager'\nimport {GaussianSplatGeometry} from './geometry/GaussianSplatGeometry'\n\nexport class ThreeGaussianSplatPlugin extends AViewerPluginSync {\n public static readonly PluginType: string = 'ThreeGaussianSplatPlugin'\n enabled = true\n dependencies = []\n toJSON: any = null\n\n constructor() {\n super()\n }\n\n splats: GaussianSplatMesh[] = []\n private _ready = false\n onAdded(viewer: ThreeViewer) {\n super.onAdded(viewer)\n createStyles(styles, viewer.container)\n viewer.assetManager.importer.addImporter(this._importer)\n viewer.scene.addEventListener('mainCameraUpdate', this._activeCameraUpdate)\n viewer.scene.addEventListener('geometryUpdate', this._geometryUpdate)\n this._ready = true\n }\n\n onRemove(viewer: ThreeViewer) {\n viewer.assetManager.importer.removeImporter(this._importer)\n }\n\n private _activeCameraUpdate = () => {\n if (!this._ready || this.isDisabled()) return\n this.splats.forEach(async splat=>splat.update(this._viewer!.scene.mainCamera, this._viewer!.renderManager.webglRenderer))\n }\n\n private _geometryUpdate: EventListener2<'geometryUpdate', ISceneEventMap, Scene> = (event) => {\n if (!this._ready || this.isDisabled() || !(event.geometry as GaussianSplatGeometry)?.isGaussianSplatGeometry) return\n event.geometry!.appliedMeshes.forEach(async(splat: GaussianSplatMesh)=>splat.update ? splat.update(this._viewer!.scene.mainCamera, this._viewer!.renderManager.webglRenderer) : undefined)\n }\n\n private _sortWorkerManager = new SortWorkerManager() // todo: dispose?\n protected _importer = new Importer(class extends SplatLoader implements ILoader {\n onDispose: (mesh: GaussianSplatMesh)=>void = ()=>{return}\n onCreate: (mesh: GaussianSplatMesh)=>void = ()=>{return}\n transform(res: GaussianSplatMesh, _: AnyOptions): any {\n res.addEventListener('dispose', ()=>this.onDispose(res))\n this.onCreate(res)\n return res\n }\n }, ['splat'], [], true, (l)=>{\n if (!l) return l\n l.sortWorkerManager = this._sortWorkerManager\n l.onDispose = (mesh: GaussianSplatMesh)=>{ // todo: dispose should only remove from GPU?\n this.splats = this.splats.filter(splat=>splat !== mesh)\n }\n l.onCreate = (mesh: GaussianSplatMesh)=>{\n this.splats.push(mesh)\n }\n l.onGeometryLoad = (_)=>{\n // console.log('geometry loaded')\n // console.log(geometry.boundingBox)\n this._viewer?.setDirty()\n }\n return l\n })\n\n // protected _viewerListeners = {\n // preRender: (_: IViewerEvent) => {\n // },\n // }\n}\n","/**\n * ThreeGaussianSplatPlugin: Threejs utilities and threepipe plugin and material extension for Gaussian Splatting\n *\n * @license\n * A port of -\n * https://github.com/zappar-xr/three-gaussian-splat\n * MIT License (c) 2023 Zappar Limited\n * Which is based on -\n * gsplat.js, MIT License (c) 2023 Dylan Ebert\n * antimatter15/splat, MIT License (c) 2023 Kevin Kwok\n */\n\nexport {GaussianSplatMaterialExtension} from './materials/GaussianSplatMaterialExtension'\nexport {GaussianSplatMaterialPhysical} from './materials/GaussianSplatMaterialPhysical'\nexport {GaussianSplatMaterialRaw} from './materials/GaussianSplatMaterialRaw'\nexport {GaussianSplatMaterialUnlit} from './materials/GaussianSplatMaterialUnlit'\nexport {computeFocalLengths} from './materials/util'\nexport {GaussianSplatGeometry} from './geometry/GaussianSplatGeometry'\nexport {GaussianSplatMesh} from './mesh/GaussianSplatMesh'\nexport {ThreeGaussianSplatPlugin} from './ThreeGaussianSplatPlugin'\nexport {SplatLoader} from './loaders/SplatLoader'\nexport {gaussianSplatShaders} from './shaders'\n","import {ThreeGaussianSplatPlugin} from './three-gaussian-splat'\n\nexport class GaussianSplattingPlugin extends ThreeGaussianSplatPlugin {}\n\nexport * as threeGaussianSplat from './three-gaussian-splat'\n"],"names":["obj","returnValue","proxy","Sphere","Matrix4","Vector3","WasmSorterWorker","index"],"mappings":"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","x_google_ignoreList":[10]}
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import { AViewerPluginSync, Importer, ThreeViewer } from 'threepipe';
|
|
1
|
+
import { AnyOptions, AViewerPluginSync, Importer, ThreeViewer } from 'threepipe';
|
|
2
2
|
import { GaussianSplatMesh } from './index';
|
|
3
|
-
import { AnyOptions } from 'ts-browser-helpers';
|
|
4
3
|
import { SortWorkerManager } from './cpp-sorter/SortWorkerManager';
|
|
5
4
|
import { GaussianSplatGeometry } from './geometry/GaussianSplatGeometry';
|
|
6
|
-
export declare class ThreeGaussianSplatPlugin extends AViewerPluginSync
|
|
5
|
+
export declare class ThreeGaussianSplatPlugin extends AViewerPluginSync {
|
|
7
6
|
static readonly PluginType: string;
|
|
8
7
|
enabled: boolean;
|
|
9
8
|
dependencies: never[];
|
|
@@ -29,7 +28,7 @@ export declare class ThreeGaussianSplatPlugin extends AViewerPluginSync<string>
|
|
|
29
28
|
withCredentials: boolean;
|
|
30
29
|
path: string;
|
|
31
30
|
resourcePath: string;
|
|
32
|
-
manager: import('
|
|
31
|
+
manager: import('three').LoadingManager;
|
|
33
32
|
requestHeader: {
|
|
34
33
|
[header: string]: string;
|
|
35
34
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ThreeGaussianSplatPlugin.d.ts","sourceRoot":"","sources":["../../src/three-gaussian-splat/ThreeGaussianSplatPlugin.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"ThreeGaussianSplatPlugin.d.ts","sourceRoot":"","sources":["../../src/three-gaussian-splat/ThreeGaussianSplatPlugin.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,UAAU,EACV,iBAAiB,EAIjB,QAAQ,EAGR,WAAW,EACd,MAAM,WAAW,CAAA;AAElB,OAAO,EAAC,iBAAiB,EAAC,MAAM,SAAS,CAAA;AAEzC,OAAO,EAAC,iBAAiB,EAAC,MAAM,gCAAgC,CAAA;AAChE,OAAO,EAAC,qBAAqB,EAAC,MAAM,kCAAkC,CAAA;AAEtE,qBAAa,wBAAyB,SAAQ,iBAAiB;IAC3D,gBAAuB,UAAU,EAAE,MAAM,CAA6B;IACtE,OAAO,UAAO;IACd,YAAY,UAAK;IACjB,MAAM,EAAE,GAAG,CAAO;;IAMlB,MAAM,EAAE,iBAAiB,EAAE,CAAK;IAChC,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,MAAM,EAAE,WAAW;IAS3B,QAAQ,CAAC,MAAM,EAAE,WAAW;IAI5B,OAAO,CAAC,mBAAmB,CAG1B;IAED,OAAO,CAAC,eAAe,CAGtB;IAED,OAAO,CAAC,kBAAkB,CAA0B;IACpD,SAAS,CAAC,SAAS;mBACJ,CAAC,IAAI,EAAE,iBAAiB,KAAG,IAAI;kBAChC,CAAC,IAAI,EAAE,iBAAiB,KAAG,IAAI;uBAC1B,iBAAiB,KAAK,UAAU,GAAG,GAAG;;8BAvClB,wBAC1C;yBAKiB,wBAEb;;;;;;;;;;;;;;;;;;OAmDC;CAML"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SortWorkerManager.d.ts","sourceRoot":"","sources":["../../../src/three-gaussian-splat/cpp-sorter/SortWorkerManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAiB,MAAM,SAAS,CAAA;AAG9C,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,UAAU,CAAA;AAExC,eAAO,MAAM,gBAAgB,QAAwB,CAAA;AASrD,qBAAa,iBAAiB;IAC1B,OAAO,CAAC,QAAQ,CAA2B;IAC3C,OAAO,CAAC,WAAW,CAAI;IAEvB,OAAO,CAAC,WAAW,CAA2E;IAE9F,OAAO,
|
|
1
|
+
{"version":3,"file":"SortWorkerManager.d.ts","sourceRoot":"","sources":["../../../src/three-gaussian-splat/cpp-sorter/SortWorkerManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAiB,MAAM,SAAS,CAAA;AAG9C,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,UAAU,CAAA;AAExC,eAAO,MAAM,gBAAgB,QAAwB,CAAA;AASrD,qBAAa,iBAAiB;IAC1B,OAAO,CAAC,QAAQ,CAA2B;IAC3C,OAAO,CAAC,WAAW,CAAI;IAEvB,OAAO,CAAC,WAAW,CAA2E;IAE9F,OAAO,GAAI,GAAG,GAAG,UAKhB;;IAQK,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,SAAU;IAclD,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,CAAC;CAOjD"}
|
|
@@ -12,7 +12,7 @@ export declare class GaussianSplatGeometry extends InstancedBufferGeometry imple
|
|
|
12
12
|
center2: (this: IGeometry, offset?: Vector3, keepWorldPosition?: boolean, setDirty?: boolean) => () => void;
|
|
13
13
|
setDirty: (this: IGeometry, options?: import('threepipe').IGeometrySetDirtyOptions) => void;
|
|
14
14
|
refreshUi: (this: IGeometry) => void;
|
|
15
|
-
appliedMeshes: Set<IObject3D<import('threepipe').
|
|
15
|
+
appliedMeshes: Set<IObject3D<import('threepipe').IObject3DEventMap, IGeometry<import('three').NormalBufferAttributes, import('three').BufferGeometryEventMap> | undefined, import('threepipe').IMaterial<import('threepipe').IMaterialEventMap> | import('threepipe').IMaterial<import('threepipe').IMaterialEventMap>[] | undefined>>;
|
|
16
16
|
private _viewProj;
|
|
17
17
|
private _sortRunning;
|
|
18
18
|
private _initialized;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GaussianSplatGeometry.d.ts","sourceRoot":"","sources":["../../../src/three-gaussian-splat/geometry/GaussianSplatGeometry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAC,MAAM,EAAW,MAAM,SAAS,CAAA;AACxC,OAAO,EAGH,MAAM,EACN,SAAS,EAGT,uBAAuB,EACvB,KAAK,SAAS,EACd,OAAO,EACP,iBAAiB,EAEjB,OAAO,EACV,MAAM,WAAW,CAAA;AAElB,qBAAa,qBAAsB,SAAQ,uBAAwB,YAAW,SAAS;IAE/E,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,OAAO,CAAC;gBAHR,OAAO,EAAE,MAAM,CAAC,UAAU,CAAC,EAC3B,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,GAAE,CAAC,QAAQ,EAAE,qBAAqB,KAAK,IAAI,aAAA;IAO/D,QAAQ,CAAC,uBAAuB,QAAO;IAEvC,SAAS,EAAE,UAAU,CAAA;IACrB,OAAO,qGAA2B;IAClC,QAAQ,oFAA4B;IACpC,SAAS,4BAA6B;IACtC,aAAa,
|
|
1
|
+
{"version":3,"file":"GaussianSplatGeometry.d.ts","sourceRoot":"","sources":["../../../src/three-gaussian-splat/geometry/GaussianSplatGeometry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAC,MAAM,EAAW,MAAM,SAAS,CAAA;AACxC,OAAO,EAGH,MAAM,EACN,SAAS,EAGT,uBAAuB,EACvB,KAAK,SAAS,EACd,OAAO,EACP,iBAAiB,EAEjB,OAAO,EACV,MAAM,WAAW,CAAA;AAElB,qBAAa,qBAAsB,SAAQ,uBAAwB,YAAW,SAAS;IAE/E,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,OAAO,CAAC;gBAHR,OAAO,EAAE,MAAM,CAAC,UAAU,CAAC,EAC3B,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,GAAE,CAAC,QAAQ,EAAE,qBAAqB,KAAK,IAAI,aAAA;IAO/D,QAAQ,CAAC,uBAAuB,QAAO;IAEvC,SAAS,EAAE,UAAU,CAAA;IACrB,OAAO,qGAA2B;IAClC,QAAQ,oFAA4B;IACpC,SAAS,4BAA6B;IACtC,aAAa,0TAAuB;IAEpC,OAAO,CAAC,SAAS,CAAe;IAChC,OAAO,CAAC,YAAY,CAAQ;IAE5B,OAAO,CAAC,YAAY,CAAQ;IAE5B,OAAO,CAAC,cAAc,CAAoC;IAE7C,MAAM,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,EAAE,eAAe,EAAE,OAAO;IA6C1E,cAAc;IAsBpB,OAAO,CAAC,aAAa;IAqBrB,kBAAkB;IAWlB,qBAAqB;CAuCxB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SplatLoader.d.ts","sourceRoot":"","sources":["../../../src/three-gaussian-splat/loaders/SplatLoader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,EAAC,MAAM,WAAW,CAAA;AAChF,OAAO,EAAC,iBAAiB,EAAmB,MAAM,iCAAiC,CAAA;AACnF,OAAO,EAAC,qBAAqB,EAAC,MAAM,mCAAmC,CAAA;AACvE,OAAO,EAAC,iBAAiB,EAAC,MAAM,2BAA2B,CAAA;AAG3D,qBAAa,WAAY,SAAQ,MAAO,YAAW,OAAO;IACtD,iBAAiB,EAAE,iBAAiB,CAAA;IAEpC,mBAAmB,
|
|
1
|
+
{"version":3,"file":"SplatLoader.d.ts","sourceRoot":"","sources":["../../../src/three-gaussian-splat/loaders/SplatLoader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,EAAC,MAAM,WAAW,CAAA;AAChF,OAAO,EAAC,iBAAiB,EAAmB,MAAM,iCAAiC,CAAA;AACnF,OAAO,EAAC,qBAAqB,EAAC,MAAM,mCAAmC,CAAA;AACvE,OAAO,EAAC,iBAAiB,EAAC,MAAM,2BAA2B,CAAA;AAG3D,qBAAa,WAAY,SAAQ,MAAO,YAAW,OAAO;IACtD,iBAAiB,EAAE,iBAAiB,CAAA;IAEpC,mBAAmB,GAAI,GAAG,qBAAqB,KAAG,SAAS,GAAC,SAAS,CAAoC;gBAE7F,OAAO,CAAC,EAAE,cAAc;IAIpC,cAAc,GAAI,GAAG,qBAAqB,UAEzC;IAEM,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,iBAAiB,KAAK,IAAI,EAAE,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,GAAG,IAAI;IA4BjJ,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,GAAG,OAAO,CAAC,iBAAiB,CAAC;CAG/G"}
|
|
@@ -14,7 +14,7 @@ export declare class GaussianSplatMaterialExtension implements MaterialExtension
|
|
|
14
14
|
};
|
|
15
15
|
parsFragmentSnippet: string;
|
|
16
16
|
parsVertexSnippet: string;
|
|
17
|
-
shaderExtender: (shader: Shader, material: IMaterial) =>
|
|
17
|
+
shaderExtender: (shader: Shader, material: IMaterial) => import('three').WebGLProgramParametersWithUniforms;
|
|
18
18
|
isCompatible: (material: IMaterial) => boolean;
|
|
19
19
|
setDirty?: () => void;
|
|
20
20
|
private _currentCamera?;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GaussianSplatMaterialExtension.d.ts","sourceRoot":"","sources":["../../../src/three-gaussian-splat/materials/GaussianSplatMaterialExtension.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,MAAM,EACN,SAAS,EACT,iBAAiB,EACjB,iBAAiB,EACjB,MAAM,EAEN,OAAO,EACP,aAAa,EAChB,MAAM,WAAW,CAAA;AAIlB,qBAAa,8BAA+B,YAAW,iBAAiB;IACpE,QAAQ,CAAC,gCAAgC,QAAO;IAChD,aAAa;;;;;;;;;;MAIZ;IACD,mBAAmB,SAAiC;IACpD,iBAAiB,SAAiC;IAClD,cAAc,
|
|
1
|
+
{"version":3,"file":"GaussianSplatMaterialExtension.d.ts","sourceRoot":"","sources":["../../../src/three-gaussian-splat/materials/GaussianSplatMaterialExtension.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,MAAM,EACN,SAAS,EACT,iBAAiB,EACjB,iBAAiB,EACjB,MAAM,EAEN,OAAO,EACP,aAAa,EAChB,MAAM,WAAW,CAAA;AAIlB,qBAAa,8BAA+B,YAAW,iBAAiB;IACpE,QAAQ,CAAC,gCAAgC,QAAO;IAChD,aAAa;;;;;;;;;;MAIZ;IACD,mBAAmB,SAAiC;IACpD,iBAAiB,SAAiC;IAClD,cAAc,GAAI,QAAQ,MAAM,EAAE,UAAU,SAAS,wDAgCpD;IACD,YAAY,GAAI,UAAU,SAAS,aAIM;IAEzC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;IAErB,OAAO,CAAC,cAAc,CAAC,CAA4B;IACnD,OAAO,CAAC,SAAS,CAAC,CAAe;IAEjC,IAAW,QAAQ,CAAC,KAAK,EAAE,MAAM,EAGhC;;IAOD,OAAO;IAKP,MAAM,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI;IAOzE,OAAO,CAAC,QAAQ,CAef;CACJ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../src/three-gaussian-splat/materials/util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,OAAO,EAAC,MAAM,WAAW,CAAA;AAE5C,eAAO,MAAM,mBAAmB,
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../src/three-gaussian-splat/materials/util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,OAAO,EAAC,MAAM,WAAW,CAAA;AAE5C,eAAO,MAAM,mBAAmB,GAAI,OAAO,MAAM,EAAE,QAAQ,MAAM,EAAE,KAAK,MAAM,EAAE,QAAQ,MAAM,EAAE,KAAK,MAAM,YAM1G,CAAA"}
|
package/docs/.nojekyll
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
TypeDoc added this file to prevent GitHub Pages from using Jekyll. You can turn off this behavior by setting the `githubPages` option to false.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
window.hierarchyData = "eJyFjrEKgzAYhN/l5mhJQaj/C3QttJs4BE01NP6W/MkkefciLi1FXG447r67BWGeo4CaWletQrBPb7voZhbQAr0Km8mCcDVJxBm+v72J0fFw82lwDIWX4x6kzxeFFDwInTciVk47lXKMk4faYiBE6YuVUWxGVqh19bX8GIO1P6zj6fjXKfcwB3cUutH5PlgGNbrNOX8AS2Frgg=="
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
:root {
|
|
2
|
+
--light-hl-0: #0000FF;
|
|
3
|
+
--dark-hl-0: #569CD6;
|
|
4
|
+
--light-hl-1: #000000;
|
|
5
|
+
--dark-hl-1: #D4D4D4;
|
|
6
|
+
--light-hl-2: #A31515;
|
|
7
|
+
--dark-hl-2: #CE9178;
|
|
8
|
+
--light-code-background: #FFFFFF;
|
|
9
|
+
--dark-code-background: #1E1E1E;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
@media (prefers-color-scheme: light) { :root {
|
|
13
|
+
--hl-0: var(--light-hl-0);
|
|
14
|
+
--hl-1: var(--light-hl-1);
|
|
15
|
+
--hl-2: var(--light-hl-2);
|
|
16
|
+
--code-background: var(--light-code-background);
|
|
17
|
+
} }
|
|
18
|
+
|
|
19
|
+
@media (prefers-color-scheme: dark) { :root {
|
|
20
|
+
--hl-0: var(--dark-hl-0);
|
|
21
|
+
--hl-1: var(--dark-hl-1);
|
|
22
|
+
--hl-2: var(--dark-hl-2);
|
|
23
|
+
--code-background: var(--dark-code-background);
|
|
24
|
+
} }
|
|
25
|
+
|
|
26
|
+
:root[data-theme='light'] {
|
|
27
|
+
--hl-0: var(--light-hl-0);
|
|
28
|
+
--hl-1: var(--light-hl-1);
|
|
29
|
+
--hl-2: var(--light-hl-2);
|
|
30
|
+
--code-background: var(--light-code-background);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
:root[data-theme='dark'] {
|
|
34
|
+
--hl-0: var(--dark-hl-0);
|
|
35
|
+
--hl-1: var(--dark-hl-1);
|
|
36
|
+
--hl-2: var(--dark-hl-2);
|
|
37
|
+
--code-background: var(--dark-code-background);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.hl-0 { color: var(--hl-0); }
|
|
41
|
+
.hl-1 { color: var(--hl-1); }
|
|
42
|
+
.hl-2 { color: var(--hl-2); }
|
|
43
|
+
pre, code { background: var(--code-background); }
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
(function() {
|
|
2
|
+
addIcons();
|
|
3
|
+
function addIcons() {
|
|
4
|
+
if (document.readyState === "loading") return document.addEventListener("DOMContentLoaded", addIcons);
|
|
5
|
+
const svg = document.body.appendChild(document.createElementNS("http://www.w3.org/2000/svg", "svg"));
|
|
6
|
+
svg.innerHTML = `<g id="icon-1" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-module)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dominant-baseline="central" text-anchor="middle">M</text></g><g id="icon-2" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-module)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dominant-baseline="central" text-anchor="middle">M</text></g><g id="icon-4" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-namespace)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dominant-baseline="central" text-anchor="middle">N</text></g><g id="icon-8" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-enum)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dominant-baseline="central" text-anchor="middle">E</text></g><g id="icon-16" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-property)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="12"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dominant-baseline="central" text-anchor="middle">P</text></g><g id="icon-32" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-variable)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dominant-baseline="central" text-anchor="middle">V</text></g><g id="icon-64" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-function)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dominant-baseline="central" text-anchor="middle">F</text></g><g id="icon-128" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-class)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dominant-baseline="central" text-anchor="middle">C</text></g><g id="icon-256" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-interface)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dominant-baseline="central" text-anchor="middle">I</text></g><g id="icon-512" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-constructor)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="12"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dominant-baseline="central" text-anchor="middle">C</text></g><g id="icon-1024" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-property)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="12"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dominant-baseline="central" text-anchor="middle">P</text></g><g id="icon-2048" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-method)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="12"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dominant-baseline="central" text-anchor="middle">M</text></g><g id="icon-4096" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-function)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dominant-baseline="central" text-anchor="middle">F</text></g><g id="icon-8192" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-property)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="12"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dominant-baseline="central" text-anchor="middle">P</text></g><g id="icon-16384" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-constructor)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="12"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dominant-baseline="central" text-anchor="middle">C</text></g><g id="icon-32768" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-property)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="12"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dominant-baseline="central" text-anchor="middle">P</text></g><g id="icon-65536" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-type-alias)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dominant-baseline="central" text-anchor="middle">T</text></g><g id="icon-131072" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-type-alias)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dominant-baseline="central" text-anchor="middle">T</text></g><g id="icon-262144" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-accessor)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="12"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dominant-baseline="central" text-anchor="middle">A</text></g><g id="icon-524288" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-accessor)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="12"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dominant-baseline="central" text-anchor="middle">A</text></g><g id="icon-1048576" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-accessor)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="12"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dominant-baseline="central" text-anchor="middle">A</text></g><g id="icon-2097152" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-type-alias)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dominant-baseline="central" text-anchor="middle">T</text></g><g id="icon-4194304" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-reference)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="12"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dominant-baseline="central" text-anchor="middle">R</text></g><g id="icon-8388608" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-document)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><g stroke="var(--color-icon-text)" fill="none" stroke-width="1.5"><polygon points="6,5 6,19 18,19, 18,10 13,5"></polygon><line x1="9" y1="9" x2="13" y2="9"></line><line x1="9" y1="12" x2="15" y2="12"></line><line x1="9" y1="15" x2="15" y2="15"></line></g></g><g id="icon-folder" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-document)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><g stroke="var(--color-icon-text)" fill="none" stroke-width="1.5"><polygon points="5,5 10,5 12,8 19,8 19,18 5,18"></polygon></g></g><g id="icon-chevronDown" class="tsd-no-select"><path d="M4.93896 8.531L12 15.591L19.061 8.531L16.939 6.409L12 11.349L7.06098 6.409L4.93896 8.531Z" fill="var(--color-icon-text)"></path></g><g id="icon-chevronSmall" class="tsd-no-select"><path d="M1.5 5.50969L8 11.6609L14.5 5.50969L12.5466 3.66086L8 7.96494L3.45341 3.66086L1.5 5.50969Z" fill="var(--color-icon-text)"></path></g><g id="icon-checkbox" class="tsd-no-select"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></g><g id="icon-menu" class="tsd-no-select"><rect x="1" y="3" width="14" height="2" fill="var(--color-icon-text)"></rect><rect x="1" y="7" width="14" height="2" fill="var(--color-icon-text)"></rect><rect x="1" y="11" width="14" height="2" fill="var(--color-icon-text)"></rect></g><g id="icon-search" class="tsd-no-select"><path d="M15.7824 13.833L12.6666 10.7177C12.5259 10.5771 12.3353 10.499 12.1353 10.499H11.6259C12.4884 9.39596 13.001 8.00859 13.001 6.49937C13.001 2.90909 10.0914 0 6.50048 0C2.90959 0 0 2.90909 0 6.49937C0 10.0896 2.90959 12.9987 6.50048 12.9987C8.00996 12.9987 9.39756 12.4863 10.5008 11.6239V12.1332C10.5008 12.3332 10.5789 12.5238 10.7195 12.6644L13.8354 15.7797C14.1292 16.0734 14.6042 16.0734 14.8948 15.7797L15.7793 14.8954C16.0731 14.6017 16.0731 14.1267 15.7824 13.833ZM6.50048 10.499C4.29094 10.499 2.50018 8.71165 2.50018 6.49937C2.50018 4.29021 4.28781 2.49976 6.50048 2.49976C8.71001 2.49976 10.5008 4.28708 10.5008 6.49937C10.5008 8.70852 8.71314 10.499 6.50048 10.499Z" fill="var(--color-icon-text)"></path></g><g id="icon-anchor" class="tsd-no-select"><g stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"></path><path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path><path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></g></g><g id="icon-alertNote" class="tsd-no-select"><path fill="var(--color-alert-note)" d="M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path></g><g id="icon-alertTip" class="tsd-no-select"><path fill="var(--color-alert-tip)" d="M8 1.5c-2.363 0-4 1.69-4 3.75 0 .984.424 1.625.984 2.304l.214.253c.223.264.47.556.673.848.284.411.537.896.621 1.49a.75.75 0 0 1-1.484.211c-.04-.282-.163-.547-.37-.847a8.456 8.456 0 0 0-.542-.68c-.084-.1-.173-.205-.268-.32C3.201 7.75 2.5 6.766 2.5 5.25 2.5 2.31 4.863 0 8 0s5.5 2.31 5.5 5.25c0 1.516-.701 2.5-1.328 3.259-.095.115-.184.22-.268.319-.207.245-.383.453-.541.681-.208.3-.33.565-.37.847a.751.751 0 0 1-1.485-.212c.084-.593.337-1.078.621-1.489.203-.292.45-.584.673-.848.075-.088.147-.173.213-.253.561-.679.985-1.32.985-2.304 0-2.06-1.637-3.75-4-3.75ZM5.75 12h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1 0-1.5ZM6 15.25a.75.75 0 0 1 .75-.75h2.5a.75.75 0 0 1 0 1.5h-2.5a.75.75 0 0 1-.75-.75Z"></path></g><g id="icon-alertImportant" class="tsd-no-select"><path fill="var(--color-alert-important)" d="M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v9.5A1.75 1.75 0 0 1 14.25 13H8.06l-2.573 2.573A1.458 1.458 0 0 1 3 14.543V13H1.75A1.75 1.75 0 0 1 0 11.25Zm1.75-.25a.25.25 0 0 0-.25.25v9.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h6.5a.25.25 0 0 0 .25-.25v-9.5a.25.25 0 0 0-.25-.25Zm7 2.25v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 9a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path></g><g id="icon-alertWarning" class="tsd-no-select"><path fill="var(--color-alert-warning)" d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path></g><g id="icon-alertCaution" class="tsd-no-select"><path fill="var(--color-alert-caution)" d="M4.47.22A.749.749 0 0 1 5 0h6c.199 0 .389.079.53.22l4.25 4.25c.141.14.22.331.22.53v6a.749.749 0 0 1-.22.53l-4.25 4.25A.749.749 0 0 1 11 16H5a.749.749 0 0 1-.53-.22L.22 11.53A.749.749 0 0 1 0 11V5c0-.199.079-.389.22-.53Zm.84 1.28L1.5 5.31v5.38l3.81 3.81h5.38l3.81-3.81V5.31L10.69 1.5ZM8 4a.75.75 0 0 1 .75.75v3.5a.75.75 0 0 1-1.5 0v-3.5A.75.75 0 0 1 8 4Zm0 8a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path></g>`;
|
|
7
|
+
svg.style.display = "none";
|
|
8
|
+
if (location.protocol === "file:") updateUseElements();
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
function updateUseElements() {
|
|
12
|
+
document.querySelectorAll("use").forEach(el => {
|
|
13
|
+
if (el.getAttribute("href").includes("#icon-")) {
|
|
14
|
+
el.setAttribute("href", el.getAttribute("href").replace(/.*#/, "#"));
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
})()
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg"><g id="icon-1" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-module)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dominant-baseline="central" text-anchor="middle">M</text></g><g id="icon-2" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-module)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dominant-baseline="central" text-anchor="middle">M</text></g><g id="icon-4" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-namespace)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dominant-baseline="central" text-anchor="middle">N</text></g><g id="icon-8" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-enum)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dominant-baseline="central" text-anchor="middle">E</text></g><g id="icon-16" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-property)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="12"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dominant-baseline="central" text-anchor="middle">P</text></g><g id="icon-32" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-variable)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dominant-baseline="central" text-anchor="middle">V</text></g><g id="icon-64" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-function)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dominant-baseline="central" text-anchor="middle">F</text></g><g id="icon-128" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-class)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dominant-baseline="central" text-anchor="middle">C</text></g><g id="icon-256" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-interface)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dominant-baseline="central" text-anchor="middle">I</text></g><g id="icon-512" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-constructor)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="12"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dominant-baseline="central" text-anchor="middle">C</text></g><g id="icon-1024" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-property)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="12"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dominant-baseline="central" text-anchor="middle">P</text></g><g id="icon-2048" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-method)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="12"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dominant-baseline="central" text-anchor="middle">M</text></g><g id="icon-4096" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-function)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dominant-baseline="central" text-anchor="middle">F</text></g><g id="icon-8192" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-property)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="12"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dominant-baseline="central" text-anchor="middle">P</text></g><g id="icon-16384" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-constructor)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="12"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dominant-baseline="central" text-anchor="middle">C</text></g><g id="icon-32768" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-property)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="12"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dominant-baseline="central" text-anchor="middle">P</text></g><g id="icon-65536" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-type-alias)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dominant-baseline="central" text-anchor="middle">T</text></g><g id="icon-131072" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-type-alias)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dominant-baseline="central" text-anchor="middle">T</text></g><g id="icon-262144" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-accessor)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="12"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dominant-baseline="central" text-anchor="middle">A</text></g><g id="icon-524288" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-accessor)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="12"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dominant-baseline="central" text-anchor="middle">A</text></g><g id="icon-1048576" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-accessor)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="12"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dominant-baseline="central" text-anchor="middle">A</text></g><g id="icon-2097152" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-type-alias)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dominant-baseline="central" text-anchor="middle">T</text></g><g id="icon-4194304" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-reference)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="12"></rect><text fill="var(--color-icon-text)" x="50%" y="50%" dominant-baseline="central" text-anchor="middle">R</text></g><g id="icon-8388608" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-document)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><g stroke="var(--color-icon-text)" fill="none" stroke-width="1.5"><polygon points="6,5 6,19 18,19, 18,10 13,5"></polygon><line x1="9" y1="9" x2="13" y2="9"></line><line x1="9" y1="12" x2="15" y2="12"></line><line x1="9" y1="15" x2="15" y2="15"></line></g></g><g id="icon-folder" class="tsd-no-select"><rect fill="var(--color-icon-background)" stroke="var(--color-document)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><g stroke="var(--color-icon-text)" fill="none" stroke-width="1.5"><polygon points="5,5 10,5 12,8 19,8 19,18 5,18"></polygon></g></g><g id="icon-chevronDown" class="tsd-no-select"><path d="M4.93896 8.531L12 15.591L19.061 8.531L16.939 6.409L12 11.349L7.06098 6.409L4.93896 8.531Z" fill="var(--color-icon-text)"></path></g><g id="icon-chevronSmall" class="tsd-no-select"><path d="M1.5 5.50969L8 11.6609L14.5 5.50969L12.5466 3.66086L8 7.96494L3.45341 3.66086L1.5 5.50969Z" fill="var(--color-icon-text)"></path></g><g id="icon-checkbox" class="tsd-no-select"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></g><g id="icon-menu" class="tsd-no-select"><rect x="1" y="3" width="14" height="2" fill="var(--color-icon-text)"></rect><rect x="1" y="7" width="14" height="2" fill="var(--color-icon-text)"></rect><rect x="1" y="11" width="14" height="2" fill="var(--color-icon-text)"></rect></g><g id="icon-search" class="tsd-no-select"><path d="M15.7824 13.833L12.6666 10.7177C12.5259 10.5771 12.3353 10.499 12.1353 10.499H11.6259C12.4884 9.39596 13.001 8.00859 13.001 6.49937C13.001 2.90909 10.0914 0 6.50048 0C2.90959 0 0 2.90909 0 6.49937C0 10.0896 2.90959 12.9987 6.50048 12.9987C8.00996 12.9987 9.39756 12.4863 10.5008 11.6239V12.1332C10.5008 12.3332 10.5789 12.5238 10.7195 12.6644L13.8354 15.7797C14.1292 16.0734 14.6042 16.0734 14.8948 15.7797L15.7793 14.8954C16.0731 14.6017 16.0731 14.1267 15.7824 13.833ZM6.50048 10.499C4.29094 10.499 2.50018 8.71165 2.50018 6.49937C2.50018 4.29021 4.28781 2.49976 6.50048 2.49976C8.71001 2.49976 10.5008 4.28708 10.5008 6.49937C10.5008 8.70852 8.71314 10.499 6.50048 10.499Z" fill="var(--color-icon-text)"></path></g><g id="icon-anchor" class="tsd-no-select"><g stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"></path><path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path><path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></g></g><g id="icon-alertNote" class="tsd-no-select"><path fill="var(--color-alert-note)" d="M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path></g><g id="icon-alertTip" class="tsd-no-select"><path fill="var(--color-alert-tip)" d="M8 1.5c-2.363 0-4 1.69-4 3.75 0 .984.424 1.625.984 2.304l.214.253c.223.264.47.556.673.848.284.411.537.896.621 1.49a.75.75 0 0 1-1.484.211c-.04-.282-.163-.547-.37-.847a8.456 8.456 0 0 0-.542-.68c-.084-.1-.173-.205-.268-.32C3.201 7.75 2.5 6.766 2.5 5.25 2.5 2.31 4.863 0 8 0s5.5 2.31 5.5 5.25c0 1.516-.701 2.5-1.328 3.259-.095.115-.184.22-.268.319-.207.245-.383.453-.541.681-.208.3-.33.565-.37.847a.751.751 0 0 1-1.485-.212c.084-.593.337-1.078.621-1.489.203-.292.45-.584.673-.848.075-.088.147-.173.213-.253.561-.679.985-1.32.985-2.304 0-2.06-1.637-3.75-4-3.75ZM5.75 12h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1 0-1.5ZM6 15.25a.75.75 0 0 1 .75-.75h2.5a.75.75 0 0 1 0 1.5h-2.5a.75.75 0 0 1-.75-.75Z"></path></g><g id="icon-alertImportant" class="tsd-no-select"><path fill="var(--color-alert-important)" d="M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v9.5A1.75 1.75 0 0 1 14.25 13H8.06l-2.573 2.573A1.458 1.458 0 0 1 3 14.543V13H1.75A1.75 1.75 0 0 1 0 11.25Zm1.75-.25a.25.25 0 0 0-.25.25v9.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h6.5a.25.25 0 0 0 .25-.25v-9.5a.25.25 0 0 0-.25-.25Zm7 2.25v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 9a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path></g><g id="icon-alertWarning" class="tsd-no-select"><path fill="var(--color-alert-warning)" d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path></g><g id="icon-alertCaution" class="tsd-no-select"><path fill="var(--color-alert-caution)" d="M4.47.22A.749.749 0 0 1 5 0h6c.199 0 .389.079.53.22l4.25 4.25c.141.14.22.331.22.53v6a.749.749 0 0 1-.22.53l-4.25 4.25A.749.749 0 0 1 11 16H5a.749.749 0 0 1-.53-.22L.22 11.53A.749.749 0 0 1 0 11V5c0-.199.079-.389.22-.53Zm.84 1.28L1.5 5.31v5.38l3.81 3.81h5.38l3.81-3.81V5.31L10.69 1.5ZM8 4a.75.75 0 0 1 .75.75v3.5a.75.75 0 0 1-1.5 0v-3.5A.75.75 0 0 1 8 4Zm0 8a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path></g></svg>
|