diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml index f62542afc..34207cf67 100644 --- a/.github/FUNDING.yml +++ b/.github/FUNDING.yml @@ -1,2 +1 @@ -patreon: vanruesc github: [vanruesc] diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 5cee92bc3..bfabe156f 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -11,9 +11,9 @@ assignees: '' A clear and concise description of what the bug is. -### To Reproduce +### To reproduce -Describe the steps to reproduce the behavior and provide a minimal example that demonstrates the issue. You can use the demo sandbox as a starting point: https://codesandbox.io/s/postprocessing-25rts +Describe the steps to reproduce the behavior and provide a minimal example that demonstrates the issue. You can use the demo sandbox as a starting point: https://stackblitz.com/edit/postprocessing-v6 ### Expected behavior diff --git a/.github/workflows/cd.yml b/.github/workflows/cd.yml index 420397e1c..d94d37389 100644 --- a/.github/workflows/cd.yml +++ b/.github/workflows/cd.yml @@ -4,7 +4,11 @@ on: workflow_dispatch: push: tags: - - "*" + - "v*" + +permissions: + id-token: write + contents: write jobs: deploy: @@ -12,30 +16,25 @@ jobs: runs-on: ubuntu-latest steps: - name: Git checkout - uses: actions/checkout@v3 + uses: actions/checkout@v5 - name: Install PNPM - uses: pnpm/action-setup@v2 + uses: pnpm/action-setup@v4 with: - version: 8 + version: 10 - name: Install Node - uses: actions/setup-node@v3 + uses: actions/setup-node@v6 with: + node-version: 24 + registry-url: "https://registry.npmjs.org" cache: "pnpm" - - name: Install dependencies - run: pnpm install --frozen-lockfile + - name: Install dependencies and test + run: pnpm install-test --frozen-lockfile - name: Publish - id: publish - uses: JS-DevTools/npm-publish@v2 + uses: JS-DevTools/npm-publish@v4 with: - token: ${{ secrets.NPM_TOKEN }} - ignore-scripts: false - - if: ${{ steps.publish.outputs.type }} - run: | - echo "Version changed: ${{ steps.publish.outputs.old-version }} → ${{ steps.publish.outputs.version }}" - - if: ${{ !steps.publish.outputs.type }} - run: | - pnpm run prepublishOnly - - name: Deploy + provenance: true + ignore-scripts: true + - name: Pages run: pnpm run deploy - uses: JamesIves/github-pages-deploy-action@v4 with: diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 187bcbb29..3e4a203e8 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,6 +1,10 @@ name: CI -on: push +on: + pull_request: + push: + branches: + - "*" jobs: test: @@ -8,14 +12,15 @@ jobs: runs-on: ubuntu-latest steps: - name: Git checkout - uses: actions/checkout@v3 + uses: actions/checkout@v5 - name: Install PNPM - uses: pnpm/action-setup@v2 + uses: pnpm/action-setup@v4 with: - version: 8 + version: 10 - name: Install Node - uses: actions/setup-node@v3 + uses: actions/setup-node@v6 with: + node-version: 24 cache: "pnpm" - name: Install and test run: pnpm install-test --frozen-lockfile diff --git a/.gitignore b/.gitignore index 8d49adb7f..e1ff6c229 100644 --- a/.gitignore +++ b/.gitignore @@ -25,7 +25,6 @@ Temporary Items # IDE settings .project .idea -.vscore # Node node_modules @@ -35,8 +34,9 @@ package-lock.json dist/ build/ public/ -tmp/ +temp/ resources/ +pagefind/ *.lock *.log *.tmp diff --git a/README.md b/README.md index 0f5224279..ad632035c 100644 --- a/README.md +++ b/README.md @@ -3,9 +3,9 @@ [![CI](https://github.com/pmndrs/postprocessing/actions/workflows/ci.yml/badge.svg)](https://github.com/pmndrs/postprocessing/actions/workflows/ci.yml) [![Version](https://badgen.net/npm/v/postprocessing?color=green)](https://www.npmjs.com/package/postprocessing) -A post processing library that provides the means to implement image filter effects for [three.js](https://threejs.org/). +A post processing library for [three.js](https://threejs.org/). -*[Demo](https://pmndrs.github.io/postprocessing/public/demo) · [Sandbox](https://codesandbox.io/s/postprocessing-25rts) · [Documentation](https://pmndrs.github.io/postprocessing/public/docs) · [Wiki](https://github.com/pmndrs/postprocessing/wiki)* +*[Demo](https://pmndrs.github.io/postprocessing/public/demo) · [Sandbox](https://stackblitz.com/edit/postprocessing-v6) · [Documentation](https://pmndrs.github.io/postprocessing/public/docs) · [Wiki](https://github.com/pmndrs/postprocessing/wiki)* ## Installation diff --git a/demo/README.md b/demo/README.md new file mode 100644 index 000000000..5d1e1ef3a --- /dev/null +++ b/demo/README.md @@ -0,0 +1,3 @@ +# Post Processing Demo (Legacy) + +This directory contains the source files of the old demos. For up-to-date examples, please refer to the [manual demos](https://github.com/pmndrs/postprocessing/tree/main/manual/assets/js/src/demos). diff --git a/demo/src/demos/DepthOfFieldDemo.js b/demo/src/demos/DepthOfFieldDemo.js index 1c9493766..956e8c40a 100644 --- a/demo/src/demos/DepthOfFieldDemo.js +++ b/demo/src/demos/DepthOfFieldDemo.js @@ -183,9 +183,9 @@ export class DepthOfFieldDemo extends PostProcessingDemo { smaaEffect.edgeDetectionMaterial.setEdgeDetectionThreshold(0.01); const depthOfFieldEffect = new DepthOfFieldEffect(camera, { - focusDistance: 0.0, - focalLength: 0.048, - bokehScale: 2.0, + focusDistance: 0.4, + focusRange: 2.2, + bokehScale: 2.3, height: 480 }); @@ -250,7 +250,7 @@ export class DepthOfFieldDemo extends PostProcessingDemo { "coc": { "edge blur kernel": depthOfFieldEffect.blurPass.kernelSize, "focus": cocMaterial.uniforms.focusDistance.value, - "focal length": cocMaterial.uniforms.focalLength.value + "focus range": cocMaterial.uniforms.focalLength.value }, "vignette": { "enabled": true, @@ -303,16 +303,16 @@ export class DepthOfFieldDemo extends PostProcessingDemo { }); - folder.add(params.coc, "focus", 0.0, 1.0, 0.001).onChange((value) => { + folder.add(params.coc, "focus", 0.0, 15.0, 0.1).onChange((value) => { cocMaterial.uniforms.focusDistance.value = value; }); - folder.add(params.coc, "focal length", 0.0, 1.0, 0.0001) + folder.add(params.coc, "focus range", 0.0, 5.0, 0.01) .onChange((value) => { - cocMaterial.uniforms.focalLength.value = value; + cocMaterial.uniforms.focusRange.value = value; }); diff --git a/demo/src/demos/SSAODemo.js b/demo/src/demos/SSAODemo.js index 6900e84c6..61c5e9453 100644 --- a/demo/src/demos/SSAODemo.js +++ b/demo/src/demos/SSAODemo.js @@ -182,8 +182,8 @@ export class SSAODemo extends PostProcessingDemo { rings: 7, distanceThreshold: 0.02, // Render up to a distance of ~20 world units distanceFalloff: 0.0025, // with an additional ~2.5 units of falloff. - rangeThreshold: 0.0003, // Occlusion proximity of ~0.3 world units - rangeFalloff: 0.0001, // with ~0.1 units of falloff. + rangeThreshold: 0.0003, // Occlusion proximity of ~0.3 world units + rangeFalloff: 0.0001, // with ~0.1 units of falloff. luminanceInfluence: 0.7, minRadiusScale: 0.33, radius: 0.1, diff --git a/demo/src/demos/ShockWaveDemo.js b/demo/src/demos/ShockWaveDemo.js index 119fdb0f5..e03dbeebb 100644 --- a/demo/src/demos/ShockWaveDemo.js +++ b/demo/src/demos/ShockWaveDemo.js @@ -105,7 +105,24 @@ export class ShockWaveDemo extends PostProcessingDemo { ndc.x = (event.clientX / window.innerWidth) * 2.0 - 1.0; ndc.y = -(event.clientY / window.innerHeight) * 2.0 + 1.0; - ndc.z = await this.depthPickingPass.readDepth(ndc); + const renderer = this.composer.getRenderer(); + let depth = await this.depthPickingPass.readDepth(ndc); + + if(renderer.capabilities.reversedDepthBuffer) { + + depth = 1.0 - depth; + + } else if(renderer.capabilities.logarithmicDepthBuffer) { + + const camera = this.camera; + const d = Math.pow(2.0, depth * Math.log2(camera.far + 1.0)) - 1.0; + const a = camera.far / (camera.far - camera.near); + const b = camera.far * camera.near / (camera.near - camera.far); + depth = a + b / d; + + } + + ndc.z = depth; ndc.z = ndc.z * 2.0 - 1.0; // Convert from NDC to world position. diff --git a/demo/src/demos/objects/ObjectCloud.js b/demo/src/demos/objects/ObjectCloud.js index a95a9fc08..1eed6c949 100644 --- a/demo/src/demos/objects/ObjectCloud.js +++ b/demo/src/demos/objects/ObjectCloud.js @@ -28,7 +28,7 @@ export function create(amount = 30, range = 10.0) { new SphereGeometry(1, 16, 16) ]; - for(let i = 0, j = 0, l = geometries.length; i < amount; ++i, j = ++j % l) { + for(let i = 0, j = 0, l = geometries.length; i < amount; ++i, j = (j + 1) % l) { const material = new MeshPhongMaterial({ color: 0xffffff * Math.random() diff --git a/demo/src/demos/objects/Sponza.js b/demo/src/demos/objects/Sponza.js index 12186fa46..265a295f5 100644 --- a/demo/src/demos/objects/Sponza.js +++ b/demo/src/demos/objects/Sponza.js @@ -25,8 +25,6 @@ export function createLights(shadowCameraHelper = false) { directionalLight.castShadow = true; directionalLight.shadow.mapSize.width = 2048; directionalLight.shadow.mapSize.height = 2048; - directionalLight.shadow.bias = 0.001; - directionalLight.shadow.normalBias = 0.02; directionalLight.shadow.camera.top = 20; directionalLight.shadow.camera.right = 20; directionalLight.shadow.camera.bottom = -20; @@ -37,13 +35,11 @@ export function createLights(shadowCameraHelper = false) { directionalLight.shadow.mapSize.width = 512; directionalLight.shadow.mapSize.height = 512; - directionalLight.shadow.normalBias = 0.1; } else if(window.innerWidth < 1280) { directionalLight.shadow.mapSize.width = 1024; directionalLight.shadow.mapSize.height = 1024; - directionalLight.shadow.normalBias = 0.033; } diff --git a/demo/src/index.js b/demo/src/index.js index aa847766d..a8673947d 100644 --- a/demo/src/index.js +++ b/demo/src/index.js @@ -1,6 +1,6 @@ import { HalfFloatType, - PCFSoftShadowMap, + PCFShadowMap, SRGBColorSpace, Vector3, WebGLRenderer @@ -45,7 +45,7 @@ window.addEventListener("load", (event) => { renderer.debug.checkShaderErrors = debug; renderer.setSize(viewport.clientWidth, viewport.clientHeight); renderer.setClearColor(0x000000, 0.0); - renderer.shadowMap.type = PCFSoftShadowMap; + renderer.shadowMap.type = PCFShadowMap; renderer.shadowMap.autoUpdate = false; renderer.shadowMap.needsUpdate = true; renderer.shadowMap.enabled = true; diff --git a/esbuild.js b/esbuild.js index 3eedc0a3d..2e3d1b494 100644 --- a/esbuild.js +++ b/esbuild.js @@ -21,7 +21,7 @@ const banner = `/** const workers = { entryPoints: await glob("./src/**/worker.js"), outExtension: { ".js": ".txt" }, - outdir: "./tmp", + outdir: "./temp", target: "es2019", logLevel: "info", format: "iife", diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 000000000..0ac8fe42e --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,2 @@ +import aether from "eslint-config-aether"; +export default [...aether]; diff --git a/manual/assets/css/src/index.scss b/manual/assets/css/src/index.scss index d2f2a7453..9c3bb7e4c 100644 --- a/manual/assets/css/src/index.scss +++ b/manual/assets/css/src/index.scss @@ -1,3 +1,4 @@ +@use "sass:meta"; @use "breakpoints"; @use "fonts"; @use "keyframes"; @@ -5,13 +6,13 @@ @use "screen/default"; @media (min-width: breakpoints.$small) { - @import "screen/small"; + @include meta.load-css("screen/small"); } @media (min-width: breakpoints.$medium) { - @import "screen/medium"; + @include meta.load-css("screen/medium"); } @media (min-width: breakpoints.$large) { - @import "screen/large"; + @include meta.load-css("screen/large"); } diff --git a/manual/assets/css/src/screen/default/layout/_main.scss b/manual/assets/css/src/screen/default/layout/_main.scss index e899fc17a..4e9a47ec6 100644 --- a/manual/assets/css/src/screen/default/layout/_main.scss +++ b/manual/assets/css/src/screen/default/layout/_main.scss @@ -5,8 +5,7 @@ main { flex-grow: 1; height: 100vh; outline: none; - overflow-x: hidden; - overflow-y: scroll; + overflow: hidden scroll; } .content { diff --git a/manual/assets/css/src/themes/_tweakpane-dark.scss b/manual/assets/css/src/themes/_tweakpane-dark.scss index af020d98a..14b026475 100644 --- a/manual/assets/css/src/themes/_tweakpane-dark.scss +++ b/manual/assets/css/src/themes/_tweakpane-dark.scss @@ -1,23 +1,23 @@ .dark { - --tp-base-background-color: hsla(0deg, 0%, 10%, 80%); - --tp-base-shadow-color: hsla(0deg, 0%, 0%, 20%); - --tp-button-background-color: hsla(0deg, 0%, 80%, 100%); - --tp-button-background-color-active: hsla(0deg, 0%, 100%, 100%); - --tp-button-background-color-focus: hsla(0deg, 0%, 95%, 100%); - --tp-button-background-color-hover: hsla(0deg, 0%, 85%, 100%); - --tp-button-foreground-color: hsla(0deg, 0%, 0%, 80%); - --tp-container-background-color: hsla(0deg, 0%, 0%, 30%); - --tp-container-background-color-active: hsla(0deg, 0%, 0%, 60%); - --tp-container-background-color-focus: hsla(0deg, 0%, 0%, 50%); - --tp-container-background-color-hover: hsla(0deg, 0%, 0%, 40%); - --tp-container-foreground-color: hsla(0deg, 0%, 100%, 50%); - --tp-groove-foreground-color: hsla(0deg, 0%, 0%, 20%); - --tp-input-background-color: hsla(0deg, 0%, 0%, 30%); - --tp-input-background-color-active: hsla(0deg, 0%, 0%, 60%); - --tp-input-background-color-focus: hsla(0deg, 0%, 0%, 50%); - --tp-input-background-color-hover: hsla(0deg, 0%, 0%, 40%); - --tp-input-foreground-color: hsla(0deg, 0%, 100%, 50%); - --tp-label-foreground-color: hsla(0deg, 0%, 100%, 50%); - --tp-monitor-background-color: hsla(0deg, 0%, 0%, 30%); - --tp-monitor-foreground-color: hsla(0deg, 0%, 100%, 30%); + --tp-base-background-color: hsl(0deg, 0%, 10%, 80%); + --tp-base-shadow-color: hsl(0deg, 0%, 0%, 20%); + --tp-button-background-color: hsl(0deg, 0%, 80%, 100%); + --tp-button-background-color-active: hsl(0deg, 0%, 100%, 100%); + --tp-button-background-color-focus: hsl(0deg, 0%, 95%, 100%); + --tp-button-background-color-hover: hsl(0deg, 0%, 85%, 100%); + --tp-button-foreground-color: hsl(0deg, 0%, 0%, 80%); + --tp-container-background-color: hsl(0deg, 0%, 0%, 30%); + --tp-container-background-color-active: hsl(0deg, 0%, 0%, 60%); + --tp-container-background-color-focus: hsl(0deg, 0%, 0%, 50%); + --tp-container-background-color-hover: hsl(0deg, 0%, 0%, 40%); + --tp-container-foreground-color: hsl(0deg, 0%, 100%, 50%); + --tp-groove-foreground-color: hsl(0deg, 0%, 0%, 20%); + --tp-input-background-color: hsl(0deg, 0%, 0%, 30%); + --tp-input-background-color-active: hsl(0deg, 0%, 0%, 60%); + --tp-input-background-color-focus: hsl(0deg, 0%, 0%, 50%); + --tp-input-background-color-hover: hsl(0deg, 0%, 0%, 40%); + --tp-input-foreground-color: hsl(0deg, 0%, 100%, 50%); + --tp-label-foreground-color: hsl(0deg, 0%, 100%, 50%); + --tp-monitor-background-color: hsl(0deg, 0%, 0%, 30%); + --tp-monitor-foreground-color: hsl(0deg, 0%, 100%, 30%); } diff --git a/manual/assets/css/src/themes/_tweakpane-light.scss b/manual/assets/css/src/themes/_tweakpane-light.scss index 0f2c11303..1bc13f8b8 100644 --- a/manual/assets/css/src/themes/_tweakpane-light.scss +++ b/manual/assets/css/src/themes/_tweakpane-light.scss @@ -1,24 +1,24 @@ html { --tp-base-border-radius: 3px; - --tp-base-background-color: hsla(230deg, 5%, 90%, 100%); - --tp-base-shadow-color: hsla(0deg, 0%, 0%, 10%); - --tp-button-background-color: hsla(230deg, 7%, 75%, 100%); - --tp-button-background-color-active: hsla(230deg, 7%, 60%, 100%); - --tp-button-background-color-focus: hsla(230deg, 7%, 65%, 100%); - --tp-button-background-color-hover: hsla(230deg, 7%, 70%, 100%); - --tp-button-foreground-color: hsla(230deg, 10%, 30%, 100%); - --tp-container-background-color: hsla(230deg, 15%, 30%, 20%); - --tp-container-background-color-active: hsla(230deg, 15%, 30%, 32%); - --tp-container-background-color-focus: hsla(230deg, 15%, 30%, 28%); - --tp-container-background-color-hover: hsla(230deg, 15%, 30%, 24%); - --tp-container-foreground-color: hsla(230deg, 10%, 30%, 100%); - --tp-groove-foreground-color: hsla(230deg, 15%, 30%, 10%); - --tp-input-background-color: hsla(230deg, 15%, 30%, 10%); - --tp-input-background-color-active: hsla(230deg, 15%, 30%, 22%); - --tp-input-background-color-focus: hsla(230deg, 15%, 30%, 18%); - --tp-input-background-color-hover: hsla(230deg, 15%, 30%, 14%); - --tp-input-foreground-color: hsla(230deg, 10%, 30%, 100%); - --tp-label-foreground-color: hsla(230deg, 10%, 30%, 70%); - --tp-monitor-background-color: hsla(230deg, 15%, 30%, 10%); - --tp-monitor-foreground-color: hsla(230deg, 10%, 30%, 50%); + --tp-base-background-color: hsl(230deg, 5%, 90%, 100%); + --tp-base-shadow-color: hsl(0deg, 0%, 0%, 10%); + --tp-button-background-color: hsl(230deg, 7%, 75%, 100%); + --tp-button-background-color-active: hsl(230deg, 7%, 60%, 100%); + --tp-button-background-color-focus: hsl(230deg, 7%, 65%, 100%); + --tp-button-background-color-hover: hsl(230deg, 7%, 70%, 100%); + --tp-button-foreground-color: hsl(230deg, 10%, 30%, 100%); + --tp-container-background-color: hsl(230deg, 15%, 30%, 20%); + --tp-container-background-color-active: hsl(230deg, 15%, 30%, 32%); + --tp-container-background-color-focus: hsl(230deg, 15%, 30%, 28%); + --tp-container-background-color-hover: hsl(230deg, 15%, 30%, 24%); + --tp-container-foreground-color: hsl(230deg, 10%, 30%, 100%); + --tp-groove-foreground-color: hsl(230deg, 15%, 30%, 10%); + --tp-input-background-color: hsl(230deg, 15%, 30%, 10%); + --tp-input-background-color-active: hsl(230deg, 15%, 30%, 22%); + --tp-input-background-color-focus: hsl(230deg, 15%, 30%, 18%); + --tp-input-background-color-hover: hsl(230deg, 15%, 30%, 14%); + --tp-input-foreground-color: hsl(230deg, 10%, 30%, 100%); + --tp-label-foreground-color: hsl(230deg, 10%, 30%, 70%); + --tp-monitor-background-color: hsl(230deg, 15%, 30%, 10%); + --tp-monitor-foreground-color: hsl(230deg, 10%, 30%, 50%); } diff --git a/manual/assets/js/src/demos/ascii.js b/manual/assets/js/src/demos/ascii.js new file mode 100644 index 000000000..2104268bb --- /dev/null +++ b/manual/assets/js/src/demos/ascii.js @@ -0,0 +1,156 @@ +import { + CubeTextureLoader, + FogExp2, + LoadingManager, + PerspectiveCamera, + Scene, + SRGBColorSpace, + WebGLRenderer +} from "three"; + +import { + ASCIIEffect, + ASCIITexture, + BlendFunction, + EffectComposer, + EffectPass, + RenderPass +} from "postprocessing"; + +import { Pane } from "tweakpane"; +import { SpatialControls } from "spatial-controls"; +import { calculateVerticalFoV, FPSMeter } from "../utils"; +import * as Domain from "../objects/Domain"; + +function load() { + + const assets = new Map(); + const loadingManager = new LoadingManager(); + const cubeTextureLoader = new CubeTextureLoader(loadingManager); + + const path = document.baseURI + "img/textures/skies/sunset/"; + const format = ".png"; + const urls = [ + path + "px" + format, path + "nx" + format, + path + "py" + format, path + "ny" + format, + path + "pz" + format, path + "nz" + format + ]; + + return new Promise((resolve, reject) => { + + loadingManager.onLoad = () => resolve(assets); + loadingManager.onError = (url) => reject(new Error(`Failed to load ${url}`)); + + cubeTextureLoader.load(urls, (t) => { + + t.colorSpace = SRGBColorSpace; + assets.set("sky", t); + + }); + + }); + +} + +window.addEventListener("load", () => load().then((assets) => { + + // Renderer + + const renderer = new WebGLRenderer({ + powerPreference: "high-performance", + antialias: false, + stencil: false, + depth: false + }); + + renderer.debug.checkShaderErrors = (window.location.hostname === "localhost"); + const container = document.querySelector(".viewport"); + container.prepend(renderer.domElement); + + // Camera & Controls + + const camera = new PerspectiveCamera(); + const controls = new SpatialControls(camera.position, camera.quaternion, renderer.domElement); + const settings = controls.settings; + settings.rotation.sensitivity = 2.2; + settings.rotation.damping = 0.05; + settings.translation.damping = 0.1; + controls.position.set(0, 10, 1); + controls.lookAt(0, 10, -1); + + // Scene, Lights, Objects + + const scene = new Scene(); + scene.fog = new FogExp2(0x373134, 0.06); + scene.background = assets.get("sky"); + scene.environment = assets.get("sky"); + scene.add(Domain.createLights()); + scene.add(Domain.createEnvironment()); + scene.add(Domain.createActors()); + + // Post Processing + + const composer = new EffectComposer(renderer, { + multisampling: Math.min(4, renderer.capabilities.maxSamples) + }); + + const effect = new ASCIIEffect({ + asciiTexture: new ASCIITexture({ + characters: " .:,'-^=*+?!|0#X%WM@", + font: "Arial", + fontSize: 54, + size: 1024, + maxCharsPerRow: 16 + }), + cellSize: 12, + inverted: false + }); + + composer.addPass(new RenderPass(scene, camera)); + composer.addPass(new EffectPass(camera, effect)); + + // Settings + + const params = { useSceneColor: true }; + + const fpsMeter = new FPSMeter(); + const pane = new Pane({ container: container.querySelector(".tp") }); + pane.addBinding(fpsMeter, "fps", { readonly: true, label: "FPS" }); + + const folder = pane.addFolder({ title: "Settings" }); + folder.addBinding(effect, "inverted"); + folder.addBinding(effect, "cellSize", { min: 2, max: 24, step: 2 }); + folder.addBinding(effect, "color", { color: { type: "float" } }); + folder.addBinding(params, "useSceneColor").on("change", + (e) => void (effect.color = e.value ? null : effect.color.getHex())); + + folder.addBinding(effect.blendMode.opacity, "value", { label: "opacity", min: 0, max: 1, step: 0.01 }); + folder.addBinding(effect.blendMode, "blendFunction", { options: BlendFunction }); + + // Resize Handler + + function onResize() { + + const width = container.clientWidth, height = container.clientHeight; + camera.aspect = width / height; + camera.fov = calculateVerticalFoV(90, Math.max(camera.aspect, 16 / 9)); + camera.updateProjectionMatrix(); + composer.setSize(width, height); + + } + + window.addEventListener("resize", onResize); + onResize(); + + // Render Loop + + requestAnimationFrame(function render(timestamp) { + + fpsMeter.update(timestamp); + controls.update(timestamp); + composer.render(); + requestAnimationFrame(render); + + }); + +})); diff --git a/manual/assets/js/src/demos/bloom.js b/manual/assets/js/src/demos/bloom.js index 3436a104f..5af4f5419 100644 --- a/manual/assets/js/src/demos/bloom.js +++ b/manual/assets/js/src/demos/bloom.js @@ -88,9 +88,10 @@ window.addEventListener("load", () => load().then((assets) => { const scene = new Scene(); scene.fog = new FogExp2(0x373134, 0.06); scene.background = assets.get("sky"); + scene.environment = assets.get("sky"); scene.add(Domain.createLights()); - scene.add(Domain.createEnvironment(scene.background)); - scene.add(Domain.createActors(scene.background)); + scene.add(Domain.createEnvironment()); + scene.add(Domain.createActors()); const orbs = new Group(); diff --git a/manual/assets/js/src/demos/blur.js b/manual/assets/js/src/demos/blur.js index 1234d2463..796167fc8 100644 --- a/manual/assets/js/src/demos/blur.js +++ b/manual/assets/js/src/demos/blur.js @@ -4,7 +4,6 @@ import { PerspectiveCamera, Scene, SRGBColorSpace, - VSMShadowMap, WebGLRenderer } from "three"; @@ -63,7 +62,6 @@ window.addEventListener("load", () => load().then((assets) => { }); renderer.debug.checkShaderErrors = (window.location.hostname === "localhost"); - renderer.shadowMap.type = VSMShadowMap; renderer.shadowMap.autoUpdate = false; renderer.shadowMap.needsUpdate = true; renderer.shadowMap.enabled = true; @@ -87,6 +85,8 @@ window.addEventListener("load", () => load().then((assets) => { const scene = new Scene(); scene.background = assets.get("sky"); + scene.environment = assets.get("sky"); + scene.environmentIntensity = 0.33; scene.add(CornellBox.createLights()); scene.add(CornellBox.createEnvironment()); scene.add(CornellBox.createActors()); diff --git a/manual/assets/js/src/demos/chromatic-aberration.js b/manual/assets/js/src/demos/chromatic-aberration.js index e9e0dfadd..9eb4600e0 100644 --- a/manual/assets/js/src/demos/chromatic-aberration.js +++ b/manual/assets/js/src/demos/chromatic-aberration.js @@ -82,9 +82,10 @@ window.addEventListener("load", () => load().then((assets) => { const scene = new Scene(); scene.fog = new FogExp2(0x373134, 0.06); scene.background = assets.get("sky"); + scene.environment = assets.get("sky"); scene.add(Domain.createLights()); - scene.add(Domain.createEnvironment(scene.background)); - scene.add(Domain.createActors(scene.background)); + scene.add(Domain.createEnvironment()); + scene.add(Domain.createActors()); // Post Processing diff --git a/manual/assets/js/src/demos/color-depth.js b/manual/assets/js/src/demos/color-depth.js index eea88004d..6826ef963 100644 --- a/manual/assets/js/src/demos/color-depth.js +++ b/manual/assets/js/src/demos/color-depth.js @@ -82,9 +82,10 @@ window.addEventListener("load", () => load().then((assets) => { const scene = new Scene(); scene.fog = new FogExp2(0x373134, 0.06); scene.background = assets.get("sky"); + scene.environment = assets.get("sky"); scene.add(Domain.createLights()); - scene.add(Domain.createEnvironment(scene.background)); - scene.add(Domain.createActors(scene.background)); + scene.add(Domain.createEnvironment()); + scene.add(Domain.createActors()); // Post Processing diff --git a/manual/assets/js/src/demos/depth-of-field.js b/manual/assets/js/src/demos/depth-of-field.js index 9cde59d9e..f60771a3d 100644 --- a/manual/assets/js/src/demos/depth-of-field.js +++ b/manual/assets/js/src/demos/depth-of-field.js @@ -84,9 +84,10 @@ window.addEventListener("load", () => load().then((assets) => { const scene = new Scene(); scene.fog = new FogExp2(0x373134, 0.06); scene.background = assets.get("sky"); + scene.environment = assets.get("sky"); scene.add(Domain.createLights()); - scene.add(Domain.createEnvironment(scene.background)); - scene.add(Domain.createActors(scene.background)); + scene.add(Domain.createEnvironment()); + scene.add(Domain.createActors()); // Post Processing diff --git a/manual/assets/js/src/demos/depth-picking.js b/manual/assets/js/src/demos/depth-picking.js index d42a1e2be..05472b216 100644 --- a/manual/assets/js/src/demos/depth-picking.js +++ b/manual/assets/js/src/demos/depth-picking.js @@ -8,7 +8,6 @@ import { SphereGeometry, SRGBColorSpace, Vector3, - VSMShadowMap, WebGLRenderer } from "three"; @@ -66,7 +65,6 @@ window.addEventListener("load", () => load().then((assets) => { }); renderer.debug.checkShaderErrors = (window.location.hostname === "localhost"); - renderer.shadowMap.type = VSMShadowMap; renderer.shadowMap.autoUpdate = false; renderer.shadowMap.needsUpdate = true; renderer.shadowMap.enabled = true; @@ -90,6 +88,8 @@ window.addEventListener("load", () => load().then((assets) => { const scene = new Scene(); scene.background = assets.get("sky"); + scene.environment = assets.get("sky"); + scene.environmentIntensity = 0.33; scene.add(CornellBox.createLights()); scene.add(CornellBox.createEnvironment()); scene.add(CornellBox.createActors()); diff --git a/manual/assets/js/src/demos/dot-screen.js b/manual/assets/js/src/demos/dot-screen.js index 03c947826..a62e2dc49 100644 --- a/manual/assets/js/src/demos/dot-screen.js +++ b/manual/assets/js/src/demos/dot-screen.js @@ -82,9 +82,10 @@ window.addEventListener("load", () => load().then((assets) => { const scene = new Scene(); scene.fog = new FogExp2(0xffffff, 0.06); scene.background = assets.get("sky"); + scene.environment = assets.get("sky"); scene.add(Domain.createLights()); - scene.add(Domain.createEnvironment(scene.background)); - scene.add(Domain.createActors(scene.background)); + scene.add(Domain.createEnvironment()); + scene.add(Domain.createActors()); // Post Processing diff --git a/manual/assets/js/src/demos/fxaa.js b/manual/assets/js/src/demos/fxaa.js index 3e5f0c2b2..8307a440d 100644 --- a/manual/assets/js/src/demos/fxaa.js +++ b/manual/assets/js/src/demos/fxaa.js @@ -4,7 +4,6 @@ import { PerspectiveCamera, Scene, SRGBColorSpace, - VSMShadowMap, WebGLRenderer } from "three"; @@ -63,7 +62,6 @@ window.addEventListener("load", () => load().then((assets) => { }); renderer.debug.checkShaderErrors = (window.location.hostname === "localhost"); - renderer.shadowMap.type = VSMShadowMap; renderer.shadowMap.autoUpdate = false; renderer.shadowMap.needsUpdate = true; renderer.shadowMap.enabled = true; @@ -87,6 +85,8 @@ window.addEventListener("load", () => load().then((assets) => { const scene = new Scene(); scene.background = assets.get("sky"); + scene.environment = assets.get("sky"); + scene.environmentIntensity = 0.33; scene.add(CornellBox.createLights()); scene.add(CornellBox.createEnvironment()); scene.add(CornellBox.createActors()); diff --git a/manual/assets/js/src/demos/glitch.js b/manual/assets/js/src/demos/glitch.js index 773fb763b..f5685e8cd 100644 --- a/manual/assets/js/src/demos/glitch.js +++ b/manual/assets/js/src/demos/glitch.js @@ -94,9 +94,10 @@ window.addEventListener("load", () => load().then((assets) => { const scene = new Scene(); scene.fog = new FogExp2(0x373134, 0.06); scene.background = assets.get("sky"); + scene.environment = assets.get("sky"); scene.add(Domain.createLights()); - scene.add(Domain.createEnvironment(scene.background)); - scene.add(Domain.createActors(scene.background)); + scene.add(Domain.createEnvironment()); + scene.add(Domain.createActors()); // Post Processing diff --git a/manual/assets/js/src/demos/god-rays.js b/manual/assets/js/src/demos/god-rays.js index 884a92a54..811ca3ff8 100644 --- a/manual/assets/js/src/demos/god-rays.js +++ b/manual/assets/js/src/demos/god-rays.js @@ -87,9 +87,10 @@ window.addEventListener("load", () => load().then((assets) => { const scene = new Scene(); scene.fog = new FogExp2(0x373134, 0.06); scene.background = assets.get("sky"); + scene.environment = assets.get("sky"); scene.add(Domain.createLights()); - scene.add(Domain.createEnvironment(scene.background)); - scene.add(Domain.createActors(scene.background)); + scene.add(Domain.createEnvironment()); + scene.add(Domain.createActors()); const sun = new Mesh( new IcosahedronGeometry(1, 3), diff --git a/manual/assets/js/src/demos/grid.js b/manual/assets/js/src/demos/grid.js index 87320a582..62757ad41 100644 --- a/manual/assets/js/src/demos/grid.js +++ b/manual/assets/js/src/demos/grid.js @@ -82,9 +82,10 @@ window.addEventListener("load", () => load().then((assets) => { const scene = new Scene(); scene.fog = new FogExp2(0x373134, 0.06); scene.background = assets.get("sky"); + scene.environment = assets.get("sky"); scene.add(Domain.createLights()); - scene.add(Domain.createEnvironment(scene.background)); - scene.add(Domain.createActors(scene.background)); + scene.add(Domain.createEnvironment()); + scene.add(Domain.createActors()); // Post Processing diff --git a/manual/assets/js/src/demos/msaa.js b/manual/assets/js/src/demos/msaa.js index 816542a46..42ee62691 100644 --- a/manual/assets/js/src/demos/msaa.js +++ b/manual/assets/js/src/demos/msaa.js @@ -4,7 +4,6 @@ import { PerspectiveCamera, Scene, SRGBColorSpace, - VSMShadowMap, WebGLRenderer } from "three"; @@ -56,7 +55,6 @@ window.addEventListener("load", () => load().then((assets) => { }); renderer.debug.checkShaderErrors = (window.location.hostname === "localhost"); - renderer.shadowMap.type = VSMShadowMap; renderer.shadowMap.autoUpdate = false; renderer.shadowMap.needsUpdate = true; renderer.shadowMap.enabled = true; @@ -80,6 +78,8 @@ window.addEventListener("load", () => load().then((assets) => { const scene = new Scene(); scene.background = assets.get("sky"); + scene.environment = assets.get("sky"); + scene.environmentIntensity = 0.33; scene.add(CornellBox.createLights()); scene.add(CornellBox.createEnvironment()); scene.add(CornellBox.createActors()); diff --git a/manual/assets/js/src/demos/outline.js b/manual/assets/js/src/demos/outline.js index c574ac433..50ca25526 100644 --- a/manual/assets/js/src/demos/outline.js +++ b/manual/assets/js/src/demos/outline.js @@ -10,7 +10,6 @@ import { SRGBColorSpace, TextureLoader, Vector2, - VSMShadowMap, WebGLRenderer } from "three"; @@ -96,7 +95,6 @@ window.addEventListener("load", () => load().then((assets) => { }); renderer.debug.checkShaderErrors = (window.location.hostname === "localhost"); - renderer.shadowMap.type = VSMShadowMap; renderer.shadowMap.autoUpdate = false; renderer.shadowMap.needsUpdate = true; renderer.shadowMap.enabled = true; @@ -120,6 +118,8 @@ window.addEventListener("load", () => load().then((assets) => { const scene = new Scene(); scene.background = assets.get("sky"); + scene.environment = assets.get("sky"); + scene.environmentIntensity = 0.33; scene.add(Shapes.createLights()); const actors = Shapes.createActors(); scene.add(actors); diff --git a/manual/assets/js/src/demos/pixelation.js b/manual/assets/js/src/demos/pixelation.js index 2637d0031..062aa2a04 100644 --- a/manual/assets/js/src/demos/pixelation.js +++ b/manual/assets/js/src/demos/pixelation.js @@ -81,9 +81,10 @@ window.addEventListener("load", () => load().then((assets) => { const scene = new Scene(); scene.fog = new FogExp2(0x373134, 0.06); scene.background = assets.get("sky"); + scene.environment = assets.get("sky"); scene.add(Domain.createLights()); - scene.add(Domain.createEnvironment(scene.background)); - scene.add(Domain.createActors(scene.background)); + scene.add(Domain.createEnvironment()); + scene.add(Domain.createActors()); // Post Processing diff --git a/manual/assets/js/src/demos/scanlines.js b/manual/assets/js/src/demos/scanlines.js index 513273773..d43973eb7 100644 --- a/manual/assets/js/src/demos/scanlines.js +++ b/manual/assets/js/src/demos/scanlines.js @@ -82,9 +82,10 @@ window.addEventListener("load", () => load().then((assets) => { const scene = new Scene(); scene.fog = new FogExp2(0x373134, 0.06); scene.background = assets.get("sky"); + scene.environment = assets.get("sky"); scene.add(Domain.createLights()); - scene.add(Domain.createEnvironment(scene.background)); - scene.add(Domain.createActors(scene.background)); + scene.add(Domain.createEnvironment()); + scene.add(Domain.createActors()); // Post Processing diff --git a/manual/assets/js/src/demos/smaa.js b/manual/assets/js/src/demos/smaa.js index c9e5c0d34..f42cf73c9 100644 --- a/manual/assets/js/src/demos/smaa.js +++ b/manual/assets/js/src/demos/smaa.js @@ -4,7 +4,6 @@ import { PerspectiveCamera, Scene, SRGBColorSpace, - VSMShadowMap, WebGLRenderer } from "three"; @@ -67,7 +66,6 @@ window.addEventListener("load", () => load().then((assets) => { }); renderer.debug.checkShaderErrors = (window.location.hostname === "localhost"); - renderer.shadowMap.type = VSMShadowMap; renderer.shadowMap.autoUpdate = false; renderer.shadowMap.needsUpdate = true; renderer.shadowMap.enabled = true; @@ -91,6 +89,8 @@ window.addEventListener("load", () => load().then((assets) => { const scene = new Scene(); scene.background = assets.get("sky"); + scene.environment = assets.get("sky"); + scene.environmentIntensity = 0.33; scene.add(CornellBox.createLights()); scene.add(CornellBox.createEnvironment()); scene.add(CornellBox.createActors()); @@ -164,7 +164,7 @@ window.addEventListener("load", () => load().then((assets) => { }); - let subfolder = folder.addFolder({ title: "Edge Detection", expanded: false }); + const subfolder = folder.addFolder({ title: "Edge Detection", expanded: false }); subfolder.addBinding(edgeDetectionMaterial, "edgeDetectionMode", { options: EdgeDetectionMode }); subfolder.addBinding(edgeDetectionMaterial, "edgeDetectionThreshold", { min: 0.01, max: 0.3, step: 1e-4 }); subfolder.addBinding(edgeDetectionMaterial, "predicationMode", { options: PredicationMode }); diff --git a/manual/assets/js/src/demos/ssao.js b/manual/assets/js/src/demos/ssao.js index 99c303d44..4ad65cbd5 100644 --- a/manual/assets/js/src/demos/ssao.js +++ b/manual/assets/js/src/demos/ssao.js @@ -5,7 +5,6 @@ import { PerspectiveCamera, Scene, SRGBColorSpace, - VSMShadowMap, WebGLRenderer } from "three"; @@ -13,6 +12,7 @@ import { BlendFunction, EffectComposer, EffectPass, + FXAAEffect, NormalPass, RenderPass, SSAOEffect @@ -65,7 +65,6 @@ window.addEventListener("load", () => load().then((assets) => { }); renderer.debug.checkShaderErrors = (window.location.hostname === "localhost"); - renderer.shadowMap.type = VSMShadowMap; renderer.shadowMap.autoUpdate = false; renderer.shadowMap.needsUpdate = true; renderer.shadowMap.enabled = true; @@ -89,6 +88,8 @@ window.addEventListener("load", () => load().then((assets) => { const scene = new Scene(); scene.background = assets.get("sky"); + scene.environment = assets.get("sky"); + scene.environmentIntensity = 0.33; scene.add(CornellBox.createLights()); scene.add(CornellBox.createEnvironment()); scene.add(CornellBox.createActors()); @@ -114,6 +115,7 @@ window.addEventListener("load", () => load().then((assets) => { composer.addPass(new RenderPass(scene, camera)); composer.addPass(normalPass); composer.addPass(effectPass); + composer.addPass(new EffectPass(camera, new FXAAEffect())); // Settings diff --git a/manual/assets/js/src/demos/texture.js b/manual/assets/js/src/demos/texture.js index 0968b0b79..793763040 100644 --- a/manual/assets/js/src/demos/texture.js +++ b/manual/assets/js/src/demos/texture.js @@ -6,7 +6,6 @@ import { Scene, SRGBColorSpace, TextureLoader, - VSMShadowMap, WebGLRenderer } from "three"; @@ -74,7 +73,6 @@ window.addEventListener("load", () => load().then((assets) => { }); renderer.debug.checkShaderErrors = (window.location.hostname === "localhost"); - renderer.shadowMap.type = VSMShadowMap; renderer.shadowMap.autoUpdate = false; renderer.shadowMap.needsUpdate = true; renderer.shadowMap.enabled = true; @@ -98,6 +96,8 @@ window.addEventListener("load", () => load().then((assets) => { const scene = new Scene(); scene.background = assets.get("sky"); + scene.environment = assets.get("sky"); + scene.environmentIntensity = 0.33; scene.add(CornellBox.createLights()); scene.add(CornellBox.createEnvironment()); scene.add(CornellBox.createActors()); diff --git a/manual/assets/js/src/demos/tone-mapping.js b/manual/assets/js/src/demos/tone-mapping.js index 27dc563f4..ab1f8a0f0 100644 --- a/manual/assets/js/src/demos/tone-mapping.js +++ b/manual/assets/js/src/demos/tone-mapping.js @@ -84,9 +84,10 @@ window.addEventListener("load", () => load().then((assets) => { const scene = new Scene(); scene.fog = new FogExp2(0x373134, 0.06); scene.background = assets.get("sky"); + scene.environment = assets.get("sky"); scene.add(Domain.createLights()); - scene.add(Domain.createEnvironment(scene.background)); - scene.add(Domain.createActors(scene.background)); + scene.add(Domain.createEnvironment()); + scene.add(Domain.createActors()); // Post Processing diff --git a/manual/assets/js/src/demos/vignette.js b/manual/assets/js/src/demos/vignette.js index b26c4fd01..eb2f1b9f0 100644 --- a/manual/assets/js/src/demos/vignette.js +++ b/manual/assets/js/src/demos/vignette.js @@ -83,9 +83,10 @@ window.addEventListener("load", () => load().then((assets) => { const scene = new Scene(); scene.fog = new FogExp2(0x373134, 0.06); scene.background = assets.get("sky"); + scene.environment = assets.get("sky"); scene.add(Domain.createLights()); - scene.add(Domain.createEnvironment(scene.background)); - scene.add(Domain.createActors(scene.background)); + scene.add(Domain.createEnvironment()); + scene.add(Domain.createActors()); // Post Processing diff --git a/manual/assets/js/src/objects/CornellBox.js b/manual/assets/js/src/objects/CornellBox.js index 49616714c..a069d8285 100644 --- a/manual/assets/js/src/objects/CornellBox.js +++ b/manual/assets/js/src/objects/CornellBox.js @@ -1,43 +1,53 @@ import { - AmbientLight, BoxGeometry, - DirectionalLight, + Color, + Euler, Group, + InstancedMesh, + LightProbe, + Matrix4, Mesh, MeshStandardMaterial, PlaneGeometry, PointLight, - SphereGeometry + Quaternion, + SphereGeometry, + Vector3 } from "three"; /** * Creates lights. * - * @return {Group} The lights. + * @return The lights. */ export function createLights() { - const ambientLight = new AmbientLight(0x523f1c); - - const lightCeiling = new PointLight(0xfee2b0, 1, 3); - lightCeiling.position.set(0, 0.93, 0); + // Generated by rendering the environment with an ambient light value of 0x523f1c. + const shCoefficients = [ + [0.12324091787538365, 0.09064047524231066, 0.05263591868309067], + [0.07505564151881193, 0.07505564221782213, 0.07505564728562912], + [-1.2738801795225628e-18, -1.3862720782180785e-18, 7.2901209466271645e-19], + [-0.022844675139794938, 0.013457944286841193, -2.555398129446308e-20], + [-6.378735628644095e-19, 3.723254872321192e-19, -4.827259490682807e-20], + [-7.1448287739362375e-19, -1.307481902513501e-18, -9.613106193675661e-19], + [-0.037415948039784014, -0.041434962772114364, -0.044504851419885576], + [3.0317816726499583e-20, -4.584564755673668e-20, 4.745534065260507e-21], + [-0.09868906531272167, -0.09172794146160522, -0.0864107588144471] + ]; + + const lightProbe = new LightProbe(); + lightProbe.sh.coefficients = shCoefficients.map(x => new Vector3(x[0], x[1], x[2])); + + const lightCeiling = new PointLight(0xd9a859, 1, 10); + lightCeiling.position.set(0, 0.84, 0); lightCeiling.castShadow = true; - lightCeiling.shadow.bias = -0.035; lightCeiling.shadow.mapSize.width = 1024; lightCeiling.shadow.mapSize.height = 1024; - lightCeiling.shadow.radius = 4; - - const lightRed = new DirectionalLight(0xff0000, 0.05); - lightRed.position.set(-1, 0, 0); - lightRed.target.position.set(0, 0, 0); - - const lightGreen = new DirectionalLight(0x00ff00, 0.05); - lightGreen.position.set(1, 0, 0); - lightGreen.target.position.set(0, 0, 0); + lightCeiling.shadow.camera.near = 0.1; const lights = new Group(); - lights.add(lightCeiling, lightRed, lightGreen, ambientLight); + lights.add(lightProbe, lightCeiling); return lights; @@ -46,60 +56,37 @@ export function createLights() { /** * Creates the environment. * - * @return {Group} The environment. + * @return The environment. */ export function createEnvironment() { const planeGeometry = new PlaneGeometry(); - const planeMaterial = new MeshStandardMaterial({ - color: 0xffffff - }); - - const plane00 = new Mesh(planeGeometry, planeMaterial); - const plane01 = new Mesh(planeGeometry, planeMaterial); - const plane02 = new Mesh(planeGeometry, planeMaterial); - const plane03 = new Mesh(planeGeometry, planeMaterial); - const plane04 = new Mesh(planeGeometry, planeMaterial); - - plane00.position.y = -1; - plane00.rotation.x = Math.PI * 0.5; - plane00.scale.set(2, 2, 1); - - plane01.position.y = -1; - plane01.rotation.x = Math.PI * -0.5; - plane01.scale.set(2, 2, 1); - plane01.receiveShadow = true; - - plane02.position.y = 1; - plane02.rotation.x = Math.PI * 0.5; - plane02.scale.set(2, 2, 1); - plane02.receiveShadow = true; - - plane03.position.z = -1; - plane03.scale.set(2, 2, 1); - plane03.receiveShadow = true; - - plane04.position.z = 1; - plane04.rotation.y = Math.PI; - plane04.scale.set(2, 2, 1); - plane04.receiveShadow = true; - - const plane05 = new Mesh( - planeGeometry, - new MeshStandardMaterial({ - color: 0xff0000 - }) - ); + const planeMaterial = new MeshStandardMaterial({ color: 0xffffff }); - const plane06 = new Mesh( - planeGeometry, - new MeshStandardMaterial({ - color: 0x00ff00 - }) - ); + const mesh = new InstancedMesh(planeGeometry, planeMaterial, 7); + mesh.receiveShadow = true; + + const p = new Vector3(); + const q = new Quaternion(); + const e = new Euler(); + const s = new Vector3(); + const m = new Matrix4(); + const c = new Color(); - const plane07 = new Mesh( + mesh.setMatrixAt(0, m.compose(p.set(0, -1, 0), q.setFromEuler(e.set(Math.PI * 0.5, 0, 0)), s.set(2, 2, 1))); + mesh.setMatrixAt(1, m.compose(p.set(0, -1, 0), q.setFromEuler(e.set(Math.PI * -0.5, 0, 0)), s.set(2, 2, 1))); + mesh.setMatrixAt(2, m.compose(p.set(0, 1, 0), q.setFromEuler(e.set(Math.PI * 0.5, 0, 0)), s.set(2, 2, 1))); + mesh.setMatrixAt(3, m.compose(p.set(0, 0, -1), q.identity(), s.set(2, 2, 1))); + mesh.setMatrixAt(4, m.compose(p.set(0, 0, 1), q.setFromEuler(e.set(0, Math.PI, 0)), s.set(2, 2, 1))); + + mesh.setMatrixAt(5, m.compose(p.set(-1, 0, 0), q.setFromEuler(e.set(0, Math.PI * 0.5, 0)), s.set(2, 2, 1))); + mesh.setMatrixAt(6, m.compose(p.set(1, 0, 0), q.setFromEuler(e.set(0, Math.PI * -0.5, 0)), s.set(2, 2, 1))); + + mesh.setColorAt(5, c.setHex(0xff0000)); + mesh.setColorAt(6, c.setHex(0x00ff00)); + + const ceilingLightMesh = new Mesh( planeGeometry, new MeshStandardMaterial({ color: 0xffffff, @@ -107,25 +94,12 @@ export function createEnvironment() { }) ); - plane05.position.x = -1; - plane05.rotation.y = Math.PI * 0.5; - plane05.scale.set(2, 2, 1); - plane05.receiveShadow = true; - - plane06.position.x = 1; - plane06.rotation.y = Math.PI * -0.5; - plane06.scale.set(2, 2, 1); - plane06.receiveShadow = true; - - plane07.position.y = 1 - 1e-3; - plane07.rotation.x = Math.PI * 0.5; - plane07.scale.set(0.4, 0.4, 1); + ceilingLightMesh.position.y = 1 - 0.004; + ceilingLightMesh.rotation.x = Math.PI * 0.5; + ceilingLightMesh.scale.set(0.4, 0.4, 1); const environment = new Group(); - environment.add( - plane00, plane01, plane02, plane03, - plane04, plane05, plane06, plane07 - ); + environment.add(mesh, ceilingLightMesh); return environment; @@ -134,35 +108,55 @@ export function createEnvironment() { /** * Creates the scene actors. * - * @return {Group} The actors. + * @return The actors. */ export function createActors() { - const actorMaterial = new MeshStandardMaterial({ - color: 0xffffff - }); + const actor01 = new Mesh( + new BoxGeometry(1, 1, 1), + new MeshStandardMaterial({ + color: 0xffffff, + roughness: 0.5, + metalness: 0 + }) + ); + + const actor02 = new Mesh( + new BoxGeometry(1, 1, 1), + new MeshStandardMaterial({ + color: 0xffffff, + roughness: 1, + metalness: 0 + }) + ); + + const actor03 = new Mesh( + new SphereGeometry(1, 32, 32), new MeshStandardMaterial({ + color: 0xffffff, + roughness: 0.25, + metalness: 0.25 + }) + ); - const box01 = new Mesh(new BoxGeometry(1, 1, 1), actorMaterial); - const box02 = new Mesh(new BoxGeometry(1, 1, 1), actorMaterial); - const sphere01 = new Mesh(new SphereGeometry(1, 32, 32), actorMaterial); + const zFightingBias = 1e-4; - box01.position.set(-0.35, -0.4, -0.3); - box01.rotation.y = Math.PI * 0.1; - box01.scale.set(0.6, 1.2, 0.6); - box01.castShadow = true; + actor01.position.set(-0.35, -0.4 + zFightingBias, -0.3); + actor01.rotation.y = Math.PI * 0.1; + actor01.scale.set(0.6, 1.2, 0.6); + actor01.castShadow = true; - box02.position.set(0.35, -0.7, 0.3); - box02.rotation.y = Math.PI * -0.1; - box02.scale.set(0.6, 0.6, 0.6); - box02.castShadow = true; + actor02.position.set(0.35, -0.7 + zFightingBias, 0.3); + actor02.rotation.y = Math.PI * -0.1; + actor02.scale.set(0.6, 0.6, 0.6); + actor02.castShadow = true; - sphere01.position.set(-0.5, -0.7, 0.6); - sphere01.scale.set(0.3, 0.3, 0.3); - sphere01.castShadow = true; + actor03.position.set(-0.5, -0.7 + zFightingBias, 0.6); + actor03.scale.set(0.3, 0.3, 0.3); + actor03.castShadow = true; const actors = new Group(); - actors.add(box01, box02, sphere01); + actors.add(actor01, actor02, actor03); return actors; diff --git a/manual/assets/js/src/objects/Domain.js b/manual/assets/js/src/objects/Domain.js index 7f6a90378..181a808a8 100644 --- a/manual/assets/js/src/objects/Domain.js +++ b/manual/assets/js/src/objects/Domain.js @@ -26,18 +26,16 @@ export function createLights() { /** * Creates the environment. * - * @param {Texture} envMap - An environment map. * @return {Group} The environment. */ -export function createEnvironment(envMap) { +export function createEnvironment() { const environment = new Group(); const material = new MeshStandardMaterial({ color: 0xc1c1c1, roughness: 0.0, - metalness: 1.0, - envMap + metalness: 1.0 }); const m = new Matrix4(); @@ -105,11 +103,10 @@ export function createEnvironment(envMap) { /** * Creates the scene actors. * - * @param {Texture} envMap - An environment map. * @return {Group} The actors. */ -export function createActors(envMap) { +export function createActors() { const actors = new Group(); return actors; diff --git a/manual/config/_default/privacy.json b/manual/config/_default/privacy.json index 818e8e9cd..c7c7fdfc7 100644 --- a/manual/config/_default/privacy.json +++ b/manual/config/_default/privacy.json @@ -8,7 +8,7 @@ "instagram": { "disable": true }, - "twitter": { + "x": { "disable": true }, "vimeo": { diff --git a/manual/content/demos/anti-aliasing/_index.en.md b/manual/content/demos/anti-aliasing/_index.en.md index 92e3ded58..46fe89b80 100644 --- a/manual/content/demos/anti-aliasing/_index.en.md +++ b/manual/content/demos/anti-aliasing/_index.en.md @@ -2,7 +2,6 @@ layout: section collection: sections title: Anti-Aliasing -headless: true draft: false menu: demos: diff --git a/manual/content/demos/special-effects/ascii.en.md b/manual/content/demos/special-effects/ascii.en.md new file mode 100644 index 000000000..5755d809a --- /dev/null +++ b/manual/content/demos/special-effects/ascii.en.md @@ -0,0 +1,15 @@ +--- +layout: single +collection: sections +title: ASCII +draft: false +menu: + demos: + parent: special-effects + weight: 9 +script: ascii +--- + +# ASCII + +### External Resources diff --git a/manual/layouts/partials/menu.html b/manual/layouts/partials/menu.html index 848951316..0bfbfe74f 100644 --- a/manual/layouts/partials/menu.html +++ b/manual/layouts/partials/menu.html @@ -6,7 +6,7 @@ {{ range .menu }} {{ if .HasChildren }} - {{ $class := slice (path.Base .Page.RelPermalink) }} + {{ $class := slice (path.Base .URL) }} {{ if $currentPage.HasMenuCurrent $menuName . }} {{ $class = $class | append "active" }} {{ end }} diff --git a/package.json b/package.json index d1aa75050..1c8696749 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "postprocessing", - "version": "6.34.1", + "version": "6.39.0", "description": "A post processing library for three.js.", "homepage": "https://github.com/pmndrs/postprocessing", "license": "Zlib", @@ -49,81 +49,82 @@ "files": [ "./build" ], - "engines": { - "node": ">= 0.13.2" - }, "ava": { "failFast": true, "files": [ "./test/**/*" ] }, - "eslintConfig": { - "extends": "aether" + "pnpm": { + "onlyBuiltDependencies": [ + "@parcel/watcher", + "core-js", + "esbuild", + "hugo-bin" + ] }, "scripts": { "ava": "ava", + "build": "npm run clean && run-p build:css build:js:min build:dts", "build:css": "sass --no-source-map -I manual/assets/css/src/values manual/assets/css/src:manual/assets/css/dist", "build:js": "node esbuild", "build:js:min": "node esbuild -m", "build:dts": "cpy \"types/*\" build/types && cpy \"types/*\" build/types --rename=index.d.cts", - "clean": "del-cli build tmp manual/resources \"manual/assets/**/dist\" public", + "clean": "del-cli build temp manual/resources \"manual/assets/**/dist\" public", "copy": "cpy \"demo/static/**/*\" public/demo", "deploy": "run-s copy postcss hugo gzip", "doc": "esdoc", - "gzip": "gzipper c public", + "gzip": "gzipper c \"public\"", "hugo": "hugo -s manual --minify", - "lint": "run-s lint:*", + "lint": "run-p lint:*", "lint:css": "stylelint --fix manual/assets/css/src", - "lint:js": "eslint --ext .js --fix src demo/src manual/assets/js/src", + "lint:js": "eslint --fix src demo/src manual/assets/js/src", + "lint:dts": "tsc --project tsconfig.types.json", "postcss": "postcss manual/assets/css/dist/index.css -o manual/assets/css/dist/index.css -c manual", - "prepublishOnly": "run-s test doc", + "prepublishOnly": "npm test", "prewatch": "run-s clean copy build:css build:js", - "test": "run-s clean lint build:css build:js:min build:dts ava", + "test": "run-s lint build ava doc", "start": "hugo server -s manual -e development", "watch": "run-p watch:* start", "watch:css": "sass --no-source-map -I manual/assets/css/src/values manual/assets/css/src:manual/assets/css/dist -w", - "watch:eslint": "esw -w --ext .js --color src demo/src manual/assets/js/src", "watch:js": "node esbuild -w" }, "peerDependencies": { - "three": ">= 0.138.0 < 0.161.0" + "three": ">= 0.168.0 < 0.184.0" }, "devDependencies": { "@tweakpane/core": "2.x.x", + "@types/node": "25.x.x", "@types/three": "0.x.x", - "@typescript-eslint/eslint-plugin": "6.x.x", - "@typescript-eslint/parser": "6.x.x", "autoprefixer": "10.x.x", - "ava": "6.x.x", - "cpy-cli": "5.x.x", - "cssnano": "6.x.x", + "ava": "7.x.x", + "cpy-cli": "7.x.x", + "cssnano": "7.x.x", "dat.gui": "0.x.x", - "del-cli": "5.x.x", - "esbuild": "0.19.x", + "del-cli": "7.x.x", + "esbuild": "0.27.x", "esbuild-plugin-glsl": "1.x.x", "esdoc": "1.x.x", "esdoc-importpath-plugin": "1.x.x", "esdoc-standard-plugin": "1.x.x", - "eslint": "8.x.x", - "eslint-config-aether": "1.x.x", - "eslint-watch": "8.x.x", - "gzipper": "7.x.x", + "eslint": "10.x.x", + "eslint-config-aether": "3.x.x", + "gzipper": "8.x.x", "hugo-bin": "0.x.x", "npm-run-all": "4.x.x", "postcss": "8.x.x", "postcss-cli": "11.x.x", - "postcss-preset-env": "9.x.x", + "postcss-preset-env": "11.x.x", "sass": "1.x.x", "spatial-controls": "6.x.x", - "stylelint": "15.x.x", - "stylelint-config-standard-scss": "11.x.x", - "stylelint-order": "6.x.x", + "stylelint": "17.x.x", + "stylelint-config-standard-scss": "17.x.x", + "stylelint-order": "7.x.x", "three": "0.x.x", "three-demo": "5.x.x", "tiny-glob": "0.x.x", "tslib": "2.x.x", "tweakpane": "4.x.x", - "typescript": "5.x.x" + "typescript": "5.9.x" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d8e9994f9..5dea48d16 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,1534 +1,5194 @@ -lockfileVersion: '6.0' +lockfileVersion: '9.0' settings: autoInstallPeers: true excludeLinksFromLockfile: false -devDependencies: - '@tweakpane/core': - specifier: 2.x.x - version: 2.0.3 - '@types/three': - specifier: 0.x.x - version: 0.160.0 - '@typescript-eslint/eslint-plugin': - specifier: 6.x.x - version: 6.15.0(@typescript-eslint/parser@6.15.0)(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/parser': - specifier: 6.x.x - version: 6.15.0(eslint@8.56.0)(typescript@5.3.3) - autoprefixer: - specifier: 10.x.x - version: 10.4.16(postcss@8.4.32) - ava: - specifier: 6.x.x - version: 6.0.1 - cpy-cli: - specifier: 5.x.x - version: 5.0.0 - cssnano: - specifier: 6.x.x - version: 6.0.2(postcss@8.4.32) - dat.gui: - specifier: 0.x.x - version: 0.7.9 - del-cli: - specifier: 5.x.x - version: 5.1.0 - esbuild: - specifier: 0.19.x - version: 0.19.10 - esbuild-plugin-glsl: - specifier: 1.x.x - version: 1.2.2(esbuild@0.19.10) - esdoc: - specifier: 1.x.x - version: 1.1.0 - esdoc-importpath-plugin: - specifier: 1.x.x - version: 1.0.2 - esdoc-standard-plugin: - specifier: 1.x.x - version: 1.0.0 - eslint: - specifier: 8.x.x - version: 8.56.0 - eslint-config-aether: - specifier: 1.x.x - version: 1.5.2 - eslint-watch: - specifier: 8.x.x - version: 8.0.0(eslint@8.56.0) - gzipper: - specifier: 7.x.x - version: 7.2.0 - hugo-bin: - specifier: 0.x.x - version: 0.118.0 - npm-run-all: - specifier: 4.x.x - version: 4.1.5 - postcss: - specifier: 8.x.x - version: 8.4.32 - postcss-cli: - specifier: 11.x.x - version: 11.0.0(postcss@8.4.32) - postcss-preset-env: - specifier: 9.x.x - version: 9.3.0(postcss@8.4.32) - sass: - specifier: 1.x.x - version: 1.69.5 - spatial-controls: - specifier: 6.x.x - version: 6.1.1(three@0.160.0) - stylelint: - specifier: 15.x.x - version: 15.11.0(typescript@5.3.3) - stylelint-config-standard-scss: - specifier: 11.x.x - version: 11.1.0(postcss@8.4.32)(stylelint@15.11.0) - stylelint-order: - specifier: 6.x.x - version: 6.0.4(stylelint@15.11.0) - three: - specifier: 0.x.x - version: 0.160.0 - three-demo: - specifier: 5.x.x - version: 5.1.3(dat.gui@0.7.9)(three@0.160.0) - tiny-glob: - specifier: 0.x.x - version: 0.2.9 - tslib: - specifier: 2.x.x - version: 2.6.2 - tweakpane: - specifier: 4.x.x - version: 4.0.3 - typescript: - specifier: 5.x.x - version: 5.3.3 +importers: + + .: + devDependencies: + '@tweakpane/core': + specifier: 2.x.x + version: 2.0.5 + '@types/node': + specifier: 25.x.x + version: 25.5.0 + '@types/three': + specifier: 0.x.x + version: 0.183.1 + autoprefixer: + specifier: 10.x.x + version: 10.4.27(postcss@8.5.8) + ava: + specifier: 7.x.x + version: 7.0.0 + cpy-cli: + specifier: 7.x.x + version: 7.0.0 + cssnano: + specifier: 7.x.x + version: 7.1.3(postcss@8.5.8) + dat.gui: + specifier: 0.x.x + version: 0.7.9 + del-cli: + specifier: 7.x.x + version: 7.0.0 + esbuild: + specifier: 0.27.x + version: 0.27.4 + esbuild-plugin-glsl: + specifier: 1.x.x + version: 1.4.1(esbuild@0.27.4) + esdoc: + specifier: 1.x.x + version: 1.1.0 + esdoc-importpath-plugin: + specifier: 1.x.x + version: 1.0.2 + esdoc-standard-plugin: + specifier: 1.x.x + version: 1.0.0 + eslint: + specifier: 10.x.x + version: 10.1.0 + eslint-config-aether: + specifier: 3.x.x + version: 3.0.0(eslint@10.1.0)(typescript@5.9.3) + gzipper: + specifier: 8.x.x + version: 8.2.1 + hugo-bin: + specifier: 0.x.x + version: 0.149.2 + npm-run-all: + specifier: 4.x.x + version: 4.1.5 + postcss: + specifier: 8.x.x + version: 8.5.8 + postcss-cli: + specifier: 11.x.x + version: 11.0.1(postcss@8.5.8) + postcss-preset-env: + specifier: 11.x.x + version: 11.2.0(postcss@8.5.8) + sass: + specifier: 1.x.x + version: 1.98.0 + spatial-controls: + specifier: 6.x.x + version: 6.3.0(three@0.183.2) + stylelint: + specifier: 17.x.x + version: 17.5.0(typescript@5.9.3) + stylelint-config-standard-scss: + specifier: 17.x.x + version: 17.0.0(postcss@8.5.8)(stylelint@17.5.0(typescript@5.9.3)) + stylelint-order: + specifier: 7.x.x + version: 7.0.1(stylelint@17.5.0(typescript@5.9.3)) + three: + specifier: 0.x.x + version: 0.183.2 + three-demo: + specifier: 5.x.x + version: 5.1.3(dat.gui@0.7.9)(three@0.183.2) + tiny-glob: + specifier: 0.x.x + version: 0.2.9 + tslib: + specifier: 2.x.x + version: 2.8.1 + tweakpane: + specifier: 4.x.x + version: 4.0.5 + typescript: + specifier: 5.9.x + version: 5.9.3 packages: - /@aashutoshrathi/word-wrap@1.2.6: - resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} - engines: {node: '>=0.10.0'} - dev: true - - /@babel/code-frame@7.23.5: - resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} + '@babel/code-frame@7.29.0': + resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/highlight': 7.23.4 - chalk: 2.4.2 - dev: true - /@babel/helper-validator-identifier@7.22.20: - resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} + '@babel/helper-validator-identifier@7.28.5': + resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} engines: {node: '>=6.9.0'} - dev: true - /@babel/highlight@7.23.4: - resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-validator-identifier': 7.22.20 - chalk: 2.4.2 - js-tokens: 4.0.0 - dev: true + '@borewit/text-codec@0.2.2': + resolution: {integrity: sha512-DDaRehssg1aNrH4+2hnj1B7vnUGEjU6OIlyRdkMd0aUdIUvKXrJfXsy8LVtXAy7DRvYVluWbMspsRhz2lcW0mQ==} - /@csstools/cascade-layer-name-parser@1.0.6(@csstools/css-parser-algorithms@2.4.0)(@csstools/css-tokenizer@2.2.2): - resolution: {integrity: sha512-HkxRNs6ZIV0VjLFw6k5G8K35vd9r+O8B1Vr+QVD8M5Y44eQxyHtc42BdF74FQatXACPnitOR1+sRx2oWdnKTQw==} - engines: {node: ^14 || ^16 || >=18} + '@cacheable/memory@2.0.8': + resolution: {integrity: sha512-FvEb29x5wVwu/Kf93IWwsOOEuhHh6dYCJF3vcKLzXc0KXIW181AOzv6ceT4ZpBHDvAfG60eqb+ekmrnLHIy+jw==} + + '@cacheable/utils@2.4.0': + resolution: {integrity: sha512-PeMMsqjVq+bF0WBsxFBxr/WozBJiZKY0rUojuaCoIaKnEl3Ju1wfEwS+SV1DU/cSe8fqHIPiYJFif8T3MVt4cQ==} + + '@csstools/cascade-layer-name-parser@3.0.0': + resolution: {integrity: sha512-/3iksyevwRfSJx5yH0RkcrcYXwuhMQx3Juqf40t97PeEy2/Mz2TItZ/z/216qpe4GgOyFBP8MKIwVvytzHmfIQ==} + engines: {node: '>=20.19.0'} peerDependencies: - '@csstools/css-parser-algorithms': ^2.4.0 - '@csstools/css-tokenizer': ^2.2.2 - dependencies: - '@csstools/css-parser-algorithms': 2.4.0(@csstools/css-tokenizer@2.2.2) - '@csstools/css-tokenizer': 2.2.2 - dev: true + '@csstools/css-parser-algorithms': ^4.0.0 + '@csstools/css-tokenizer': ^4.0.0 - /@csstools/color-helpers@4.0.0: - resolution: {integrity: sha512-wjyXB22/h2OvxAr3jldPB7R7kjTUEzopvjitS8jWtyd8fN6xJ8vy1HnHu0ZNfEkqpBJgQ76Q+sBDshWcMvTa/w==} - engines: {node: ^14 || ^16 || >=18} - dev: true + '@csstools/color-helpers@6.0.2': + resolution: {integrity: sha512-LMGQLS9EuADloEFkcTBR3BwV/CGHV7zyDxVRtVDTwdI2Ca4it0CCVTT9wCkxSgokjE5Ho41hEPgb8OEUwoXr6Q==} + engines: {node: '>=20.19.0'} - /@csstools/css-calc@1.1.5(@csstools/css-parser-algorithms@2.4.0)(@csstools/css-tokenizer@2.2.2): - resolution: {integrity: sha512-UhI5oSRAUtTHY3MyGahqn0ZzQOHVoPpfvUcOmYipAZ1rILAvCBoyiLSsa/clv1Xxct0SMKIq93KO5Bfl1cb6tQ==} - engines: {node: ^14 || ^16 || >=18} + '@csstools/css-calc@3.1.1': + resolution: {integrity: sha512-HJ26Z/vmsZQqs/o3a6bgKslXGFAungXGbinULZO3eMsOyNJHeBBZfup5FiZInOghgoM4Hwnmw+OgbJCNg1wwUQ==} + engines: {node: '>=20.19.0'} peerDependencies: - '@csstools/css-parser-algorithms': ^2.4.0 - '@csstools/css-tokenizer': ^2.2.2 - dependencies: - '@csstools/css-parser-algorithms': 2.4.0(@csstools/css-tokenizer@2.2.2) - '@csstools/css-tokenizer': 2.2.2 - dev: true + '@csstools/css-parser-algorithms': ^4.0.0 + '@csstools/css-tokenizer': ^4.0.0 - /@csstools/css-color-parser@1.5.0(@csstools/css-parser-algorithms@2.4.0)(@csstools/css-tokenizer@2.2.2): - resolution: {integrity: sha512-PUhSg1MgU2sjYhA6moOmxYesqVqYTJwcVw12boTNbDX7Af+VK02MkgvmBBY2Z2qU6UN5HOQ+wrF0qQJGsTFY7w==} - engines: {node: ^14 || ^16 || >=18} + '@csstools/css-color-parser@4.0.2': + resolution: {integrity: sha512-0GEfbBLmTFf0dJlpsNU7zwxRIH0/BGEMuXLTCvFYxuL1tNhqzTbtnFICyJLTNK4a+RechKP75e7w42ClXSnJQw==} + engines: {node: '>=20.19.0'} peerDependencies: - '@csstools/css-parser-algorithms': ^2.4.0 - '@csstools/css-tokenizer': ^2.2.2 - dependencies: - '@csstools/color-helpers': 4.0.0 - '@csstools/css-calc': 1.1.5(@csstools/css-parser-algorithms@2.4.0)(@csstools/css-tokenizer@2.2.2) - '@csstools/css-parser-algorithms': 2.4.0(@csstools/css-tokenizer@2.2.2) - '@csstools/css-tokenizer': 2.2.2 - dev: true + '@csstools/css-parser-algorithms': ^4.0.0 + '@csstools/css-tokenizer': ^4.0.0 - /@csstools/css-parser-algorithms@2.4.0(@csstools/css-tokenizer@2.2.2): - resolution: {integrity: sha512-/PPLr2g5PAUCKAPEbfyk6/baZA+WJHQtUhPkoCQMpyRE8I0lXrG1QFRN8e5s3ZYxM8d/g5BZc6lH3s8Op7/VEg==} - engines: {node: ^14 || ^16 || >=18} + '@csstools/css-parser-algorithms@4.0.0': + resolution: {integrity: sha512-+B87qS7fIG3L5h3qwJ/IFbjoVoOe/bpOdh9hAjXbvx0o8ImEmUsGXN0inFOnk2ChCFgqkkGFQ+TpM5rbhkKe4w==} + engines: {node: '>=20.19.0'} peerDependencies: - '@csstools/css-tokenizer': ^2.2.2 - dependencies: - '@csstools/css-tokenizer': 2.2.2 - dev: true + '@csstools/css-tokenizer': ^4.0.0 - /@csstools/css-tokenizer@2.2.2: - resolution: {integrity: sha512-wCDUe/MAw7npAHFLyW3QjSyLA66S5QFaV1jIXlNQvdJ8RzXDSgALa49eWcUO6P55ARQaz0TsDdAgdRgkXFYY8g==} - engines: {node: ^14 || ^16 || >=18} - dev: true + '@csstools/css-syntax-patches-for-csstree@1.1.1': + resolution: {integrity: sha512-BvqN0AMWNAnLk9G8jnUT77D+mUbY/H2b3uDTvg2isJkHaOufUE2R3AOwxWo7VBQKT1lOdwdvorddo2B/lk64+w==} + peerDependencies: + css-tree: ^3.2.1 + peerDependenciesMeta: + css-tree: + optional: true - /@csstools/media-query-list-parser@2.1.6(@csstools/css-parser-algorithms@2.4.0)(@csstools/css-tokenizer@2.2.2): - resolution: {integrity: sha512-R6AKl9vaU0It7D7TR2lQn0pre5aQfdeqHRePlaRCY8rHL3l9eVlNRpsEVDKFi/zAjzv68CxH2M5kqbhPFPKjvw==} - engines: {node: ^14 || ^16 || >=18} + '@csstools/css-tokenizer@4.0.0': + resolution: {integrity: sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA==} + engines: {node: '>=20.19.0'} + + '@csstools/media-query-list-parser@5.0.0': + resolution: {integrity: sha512-T9lXmZOfnam3eMERPsszjY5NK0jX8RmThmmm99FZ8b7z8yMaFZWKwLWGZuTwdO3ddRY5fy13GmmEYZXB4I98Eg==} + engines: {node: '>=20.19.0'} peerDependencies: - '@csstools/css-parser-algorithms': ^2.4.0 - '@csstools/css-tokenizer': ^2.2.2 - dependencies: - '@csstools/css-parser-algorithms': 2.4.0(@csstools/css-tokenizer@2.2.2) - '@csstools/css-tokenizer': 2.2.2 - dev: true + '@csstools/css-parser-algorithms': ^4.0.0 + '@csstools/css-tokenizer': ^4.0.0 - /@csstools/postcss-cascade-layers@4.0.2(postcss@8.4.32): - resolution: {integrity: sha512-PqM+jvg5T2tB4FHX+akrMGNWAygLupD4FNUjcv4PSvtVuWZ6ISxuo37m4jFGU7Jg3rCfloGzKd0+xfr5Ec3vZQ==} - engines: {node: ^14 || ^16 || >=18} + '@csstools/postcss-alpha-function@2.0.3': + resolution: {integrity: sha512-8GqzD3JnfpKJSVxPIC0KadyAfB5VRzPZdv7XQ4zvK1q0ku+uHVUAS2N/IDavQkW40gkuUci64O0ea6QB/zgCSw==} + engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 - dependencies: - '@csstools/selector-specificity': 3.0.1(postcss-selector-parser@6.0.13) - postcss: 8.4.32 - postcss-selector-parser: 6.0.13 - dev: true - /@csstools/postcss-color-function@3.0.8(postcss@8.4.32): - resolution: {integrity: sha512-jvbF7eCRbIcxWqby0kk2Mt85QtGzRRpFFYdlJCJ80Tuiv43PY+auS/nBl8pDQQ4Ndm4vsm4IC/wCZDcJUmpJmg==} - engines: {node: ^14 || ^16 || >=18} + '@csstools/postcss-cascade-layers@6.0.0': + resolution: {integrity: sha512-WhsECqmrEZQGqaPlBA7JkmF/CJ2/+wetL4fkL9sOPccKd32PQ1qToFM6gqSI5rkpmYqubvbxjEJhyMTHYK0vZQ==} + engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 - dependencies: - '@csstools/css-color-parser': 1.5.0(@csstools/css-parser-algorithms@2.4.0)(@csstools/css-tokenizer@2.2.2) - '@csstools/css-parser-algorithms': 2.4.0(@csstools/css-tokenizer@2.2.2) - '@csstools/css-tokenizer': 2.2.2 - '@csstools/postcss-progressive-custom-properties': 3.0.3(postcss@8.4.32) - postcss: 8.4.32 - dev: true - /@csstools/postcss-color-mix-function@2.0.8(postcss@8.4.32): - resolution: {integrity: sha512-sGhk+TdZ2TeXspc6LSYSYC8WgzLlxoknUaObKgB0mk+dNjRQgSSIeCU+qrCwvHmwM+uTNKtiS8mntDzyQLHTTA==} - engines: {node: ^14 || ^16 || >=18} + '@csstools/postcss-color-function-display-p3-linear@2.0.2': + resolution: {integrity: sha512-TWUwSe1+2KdYGGWTx5LR4JQN07vKHAeSho+bGYRgow+9cs3dqgOqS1f/a1odiX30ESmZvwIudJ86wzeiDR6UGg==} + engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 - dependencies: - '@csstools/css-color-parser': 1.5.0(@csstools/css-parser-algorithms@2.4.0)(@csstools/css-tokenizer@2.2.2) - '@csstools/css-parser-algorithms': 2.4.0(@csstools/css-tokenizer@2.2.2) - '@csstools/css-tokenizer': 2.2.2 - '@csstools/postcss-progressive-custom-properties': 3.0.3(postcss@8.4.32) - postcss: 8.4.32 - dev: true - /@csstools/postcss-exponential-functions@1.0.2(postcss@8.4.32): - resolution: {integrity: sha512-VRIYrwNCkZRqzsGB4jGT+XcNXsoiwyqy0Vf7C3I/5OPcf7WcWK3G1sBYFqqgWLGtpwc7m1m8TcorGY1xdh5abg==} - engines: {node: ^14 || ^16 || >=18} + '@csstools/postcss-color-function@5.0.2': + resolution: {integrity: sha512-CjBdFemUFcAh3087MEJhZcO+QT1b8S75agysa1rU9TEC1YecznzwV+jpMxUc0JRBEV4ET2PjLssqmndR9IygeA==} + engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 - dependencies: - '@csstools/css-calc': 1.1.5(@csstools/css-parser-algorithms@2.4.0)(@csstools/css-tokenizer@2.2.2) - '@csstools/css-parser-algorithms': 2.4.0(@csstools/css-tokenizer@2.2.2) - '@csstools/css-tokenizer': 2.2.2 - postcss: 8.4.32 - dev: true - /@csstools/postcss-font-format-keywords@3.0.1(postcss@8.4.32): - resolution: {integrity: sha512-D1lcG2sfotTq6yBEOMV3myFxJLT10F3DLYZJMbiny5YToqzHWodZen8WId3UTimm0mEHitXqAUNL5jdd6RzVdA==} - engines: {node: ^14 || ^16 || >=18} + '@csstools/postcss-color-mix-function@4.0.2': + resolution: {integrity: sha512-PFKQKswFqZrYKpajZsP4lhqjU/6+J5PTOWq1rKiFnniKsf4LgpGXrgHS/C6nn5Rc51LX0n4dWOWqY5ZN2i5IjA==} + engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 - dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: true - /@csstools/postcss-gamut-mapping@1.0.1(postcss@8.4.32): - resolution: {integrity: sha512-GDVzfNbnc7x3GusFklvt0mYXIWVzxEtEtTFEW664NgZh/5V7Z89hZKBMl9piOAHXuxijfHtE+kul/ShfeLUvcA==} - engines: {node: ^14 || ^16 || >=18} + '@csstools/postcss-color-mix-variadic-function-arguments@2.0.2': + resolution: {integrity: sha512-zEchsghpDH/6SytyjKu9TIPm4hiiWcur102cENl54cyIwTZsa+2MBJl/vtyALZ+uQ17h27L4waD+0Ow96sgZow==} + engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 - dependencies: - '@csstools/css-color-parser': 1.5.0(@csstools/css-parser-algorithms@2.4.0)(@csstools/css-tokenizer@2.2.2) - '@csstools/css-parser-algorithms': 2.4.0(@csstools/css-tokenizer@2.2.2) - '@csstools/css-tokenizer': 2.2.2 - postcss: 8.4.32 - dev: true - /@csstools/postcss-gradients-interpolation-method@4.0.8(postcss@8.4.32): - resolution: {integrity: sha512-bmvCNzuUvWPPdgASh0T14ffTay/FdzXsXfp0wXT1pYoUPmkH9M6yyxwPEkHq5djjzSb2jiLl4Ta3XM1uOREQ2w==} - engines: {node: ^14 || ^16 || >=18} + '@csstools/postcss-content-alt-text@3.0.0': + resolution: {integrity: sha512-OHa+4aCcrJtHpPWB3zptScHwpS1TUbeLR4uO0ntIz0Su/zw9SoWkVu+tDMSySSAsNtNSI3kut4fTliFwIsrHxA==} + engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 - dependencies: - '@csstools/css-color-parser': 1.5.0(@csstools/css-parser-algorithms@2.4.0)(@csstools/css-tokenizer@2.2.2) - '@csstools/css-parser-algorithms': 2.4.0(@csstools/css-tokenizer@2.2.2) - '@csstools/css-tokenizer': 2.2.2 - '@csstools/postcss-progressive-custom-properties': 3.0.3(postcss@8.4.32) - postcss: 8.4.32 - dev: true - /@csstools/postcss-hwb-function@3.0.7(postcss@8.4.32): - resolution: {integrity: sha512-iXs1gxKtev8YNP5bOF26TAsnMfcxnCRLpKItQ067RphYECKEK/xWm4Z0r4ChmV1U1eq+lbdH5ZIb2cju4o5akA==} - engines: {node: ^14 || ^16 || >=18} + '@csstools/postcss-contrast-color-function@3.0.2': + resolution: {integrity: sha512-fwOz/m+ytFPz4aIph2foQS9nEDOdOjYcN5bgwbGR2jGUV8mYaeD/EaTVMHTRb/zqB65y2qNwmcFcE6VQty69Pw==} + engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 - dependencies: - '@csstools/css-color-parser': 1.5.0(@csstools/css-parser-algorithms@2.4.0)(@csstools/css-tokenizer@2.2.2) - '@csstools/css-parser-algorithms': 2.4.0(@csstools/css-tokenizer@2.2.2) - '@csstools/css-tokenizer': 2.2.2 - postcss: 8.4.32 - dev: true - /@csstools/postcss-ic-unit@3.0.3(postcss@8.4.32): - resolution: {integrity: sha512-MpcmIL0/uMm/cFWh5V/9nbKKJ7jRr2qTYW5Q6zoE6HZ6uzOBJr2KRERv5/x8xzEBQ1MthDT7iP1EBp9luSQy7g==} - engines: {node: ^14 || ^16 || >=18} + '@csstools/postcss-exponential-functions@3.0.1': + resolution: {integrity: sha512-WHJ52Uk0AVUIICEYRY9xFHJZAuq0ZVg0f8xzqUN2zRFrZvGgRPpFwxK7h9FWvqKIOueOwN6hnJD23A8FwsUiVw==} + engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 - dependencies: - '@csstools/postcss-progressive-custom-properties': 3.0.3(postcss@8.4.32) - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: true - /@csstools/postcss-initial@1.0.1(postcss@8.4.32): - resolution: {integrity: sha512-wtb+IbUIrIf8CrN6MLQuFR7nlU5C7PwuebfeEXfjthUha1+XZj2RVi+5k/lukToA24sZkYAiSJfHM8uG/UZIdg==} - engines: {node: ^14 || ^16 || >=18} + '@csstools/postcss-font-format-keywords@5.0.0': + resolution: {integrity: sha512-M1EjCe/J3u8fFhOZgRci74cQhJ7R0UFBX6T+WqoEvjrr8hVfMiV+HTYrzxLY5OW8YllvXYr5Q5t5OvJbsUSeDg==} + engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 - dependencies: - postcss: 8.4.32 - dev: true - /@csstools/postcss-is-pseudo-class@4.0.4(postcss@8.4.32): - resolution: {integrity: sha512-vTVO/uZixpTVAOQt3qZRUFJ/K1L03OfNkeJ8sFNDVNdVy/zW0h1L5WT7HIPMDUkvSrxQkFaCCybTZkUP7UESlQ==} - engines: {node: ^14 || ^16 || >=18} + '@csstools/postcss-font-width-property@1.0.0': + resolution: {integrity: sha512-AvmySApdijbjYQuXXh95tb7iVnqZBbJrv3oajO927ksE/mDmJBiszm+psW8orL2lRGR8j6ZU5Uv9/ou2Z5KRKA==} + engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 - dependencies: - '@csstools/selector-specificity': 3.0.1(postcss-selector-parser@6.0.13) - postcss: 8.4.32 - postcss-selector-parser: 6.0.13 - dev: true - /@csstools/postcss-logical-float-and-clear@2.0.1(postcss@8.4.32): - resolution: {integrity: sha512-SsrWUNaXKr+e/Uo4R/uIsqJYt3DaggIh/jyZdhy/q8fECoJSKsSMr7nObSLdvoULB69Zb6Bs+sefEIoMG/YfOA==} - engines: {node: ^14 || ^16 || >=18} + '@csstools/postcss-gamut-mapping@3.0.2': + resolution: {integrity: sha512-IrXAW3KQ3Sxm29C3/4mYQ/iA0Q5OH9YFOPQ2w24iIlXpD06A9MHvmQapP2vAGtQI3tlp2Xw5LIdm9F8khARfOA==} + engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 - dependencies: - postcss: 8.4.32 - dev: true - /@csstools/postcss-logical-overflow@1.0.1(postcss@8.4.32): - resolution: {integrity: sha512-Kl4lAbMg0iyztEzDhZuQw8Sj9r2uqFDcU1IPl+AAt2nue8K/f1i7ElvKtXkjhIAmKiy5h2EY8Gt/Cqg0pYFDCw==} - engines: {node: ^14 || ^16 || >=18} + '@csstools/postcss-gradients-interpolation-method@6.0.2': + resolution: {integrity: sha512-saQHvD1PD/zCdn+kxCWCcQOdXZBljr8L6BKlCLs0w8GXYfo3SHdWL1HZQ+I1hVCPlU+MJPJJbZJjG/jHRJSlAw==} + engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 - dependencies: - postcss: 8.4.32 - dev: true - /@csstools/postcss-logical-overscroll-behavior@1.0.1(postcss@8.4.32): - resolution: {integrity: sha512-+kHamNxAnX8ojPCtV8WPcUP3XcqMFBSDuBuvT6MHgq7oX4IQxLIXKx64t7g9LiuJzE7vd06Q9qUYR6bh4YnGpQ==} - engines: {node: ^14 || ^16 || >=18} + '@csstools/postcss-hwb-function@5.0.2': + resolution: {integrity: sha512-ChR0+pKc/2cs900jakiv8dLrb69aez5P3T+g+wfJx1j6mreAe8orKTiMrVBk+DZvCRqpdOA2m8VoFms64A3Dew==} + engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 - dependencies: - postcss: 8.4.32 - dev: true - /@csstools/postcss-logical-resize@2.0.1(postcss@8.4.32): - resolution: {integrity: sha512-W5Gtwz7oIuFcKa5SmBjQ2uxr8ZoL7M2bkoIf0T1WeNqljMkBrfw1DDA8/J83k57NQ1kcweJEjkJ04pUkmyee3A==} - engines: {node: ^14 || ^16 || >=18} + '@csstools/postcss-ic-unit@5.0.0': + resolution: {integrity: sha512-/ws5d6c4uKqfM9zIL3ugcGI+3fvZEOOkJHNzAyTAGJIdZ+aSL9BVPNlHGV4QzmL0vqBSCOdU3+rhcMEj3+KzYw==} + engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 - dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: true - /@csstools/postcss-logical-viewport-units@2.0.4(postcss@8.4.32): - resolution: {integrity: sha512-jetp/ArGAniWbjWBh5UQ07ztawfSbqCFd0QelX4R4pVIxrXahUEhz5VZHebMPVCg02J8GsQn0br6fdRpY6t7lw==} - engines: {node: ^14 || ^16 || >=18} + '@csstools/postcss-initial@3.0.0': + resolution: {integrity: sha512-UVUrFmrTQyLomVepnjWlbBg7GoscLmXLwYFyjbcEnmpeGW7wde6lNpx5eM3eVwZI2M+7hCE3ykYnAsEPLcLa+Q==} + engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 - dependencies: - '@csstools/css-tokenizer': 2.2.2 - postcss: 8.4.32 - dev: true - /@csstools/postcss-media-minmax@1.1.1(postcss@8.4.32): - resolution: {integrity: sha512-mBY46/Hr+A8cDjoX0OoPRBOVrkANym9540dSB9rN3dllPZdM1E112i/tVxWsrR1s1yE9gfF0pk+7lf9l+qSeHA==} - engines: {node: ^14 || ^16 || >=18} + '@csstools/postcss-is-pseudo-class@6.0.0': + resolution: {integrity: sha512-1Hdy/ykg9RDo8vU8RiM2o+RaXO39WpFPaIkHxlAEJFofle/lc33tdQMKhBk3jR/Fe+uZNLOs3HlowFafyFptVw==} + engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 - dependencies: - '@csstools/css-calc': 1.1.5(@csstools/css-parser-algorithms@2.4.0)(@csstools/css-tokenizer@2.2.2) - '@csstools/css-parser-algorithms': 2.4.0(@csstools/css-tokenizer@2.2.2) - '@csstools/css-tokenizer': 2.2.2 - '@csstools/media-query-list-parser': 2.1.6(@csstools/css-parser-algorithms@2.4.0)(@csstools/css-tokenizer@2.2.2) - postcss: 8.4.32 - dev: true - /@csstools/postcss-media-queries-aspect-ratio-number-values@2.0.4(postcss@8.4.32): - resolution: {integrity: sha512-IaIZZhH0Qy9UDn7u+N3cuwwPG0Po3ZKOdDh+ClR7xvisSqniG+PuVrOEWYJrFKOt2//UHLhd7KHDqr2u9LKS9Q==} - engines: {node: ^14 || ^16 || >=18} + '@csstools/postcss-light-dark-function@3.0.0': + resolution: {integrity: sha512-s++V5/hYazeRUCYIn2lsBVzUsxdeC46gtwpgW6lu5U/GlPOS5UTDT14kkEyPgXmFbCvaWLREqV7YTMJq1K3G6w==} + engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 - dependencies: - '@csstools/css-parser-algorithms': 2.4.0(@csstools/css-tokenizer@2.2.2) - '@csstools/css-tokenizer': 2.2.2 - '@csstools/media-query-list-parser': 2.1.6(@csstools/css-parser-algorithms@2.4.0)(@csstools/css-tokenizer@2.2.2) - postcss: 8.4.32 - dev: true - /@csstools/postcss-nested-calc@3.0.1(postcss@8.4.32): - resolution: {integrity: sha512-bwwababZpWRm0ByHaWBxTsDGTMhZKmtUNl3Wt0Eom8AY7ORgXx5qF9SSk1vEFrCi+HOfJT6M6W5KPgzXuQNRwQ==} - engines: {node: ^14 || ^16 || >=18} + '@csstools/postcss-logical-float-and-clear@4.0.0': + resolution: {integrity: sha512-NGzdIRVj/VxOa/TjVdkHeyiJoDihONV0+uB0csUdgWbFFr8xndtfqK8iIGP9IKJzco+w0hvBF2SSk2sDSTAnOQ==} + engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 - dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: true - /@csstools/postcss-normalize-display-values@3.0.2(postcss@8.4.32): - resolution: {integrity: sha512-fCapyyT/dUdyPtrelQSIV+d5HqtTgnNP/BEG9IuhgXHt93Wc4CfC1bQ55GzKAjWrZbgakMQ7MLfCXEf3rlZJOw==} - engines: {node: ^14 || ^16 || >=18} + '@csstools/postcss-logical-overflow@3.0.0': + resolution: {integrity: sha512-5cRg93QXVskM0MNepHpPcL0WLSf5Hncky0DrFDQY/4ozbH5lH7SX5ejayVpNTGSX7IpOvu7ykQDLOdMMGYzwpA==} + engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 - dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: true - /@csstools/postcss-oklab-function@3.0.8(postcss@8.4.32): - resolution: {integrity: sha512-L4xrwbgg+k08v+a88LDxJeIM6+kqaBJlYb/QgmEMfQpUbrfXTp87DuRc7utcRdDvY+qWK5vqz3h1xUtceB5LJQ==} - engines: {node: ^14 || ^16 || >=18} + '@csstools/postcss-logical-overscroll-behavior@3.0.0': + resolution: {integrity: sha512-82Jnl/5Wi5jb19nQE1XlBHrZcNL3PzOgcj268cDkfwf+xi10HBqufGo1Unwf5n8bbbEFhEKgyQW+vFsc9iY1jw==} + engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 - dependencies: - '@csstools/css-color-parser': 1.5.0(@csstools/css-parser-algorithms@2.4.0)(@csstools/css-tokenizer@2.2.2) - '@csstools/css-parser-algorithms': 2.4.0(@csstools/css-tokenizer@2.2.2) - '@csstools/css-tokenizer': 2.2.2 - '@csstools/postcss-progressive-custom-properties': 3.0.3(postcss@8.4.32) - postcss: 8.4.32 - dev: true - /@csstools/postcss-progressive-custom-properties@3.0.3(postcss@8.4.32): - resolution: {integrity: sha512-WipTVh6JTMQfeIrzDV4wEPsV9NTzMK2jwXxyH6CGBktuWdivHnkioP/smp1x/0QDPQyx7NTS14RB+GV3zZZYEw==} - engines: {node: ^14 || ^16 || >=18} + '@csstools/postcss-logical-resize@4.0.0': + resolution: {integrity: sha512-L0T3q0gei/tGetCGZU0c7VN77VTivRpz1YZRNxjXYmW+85PKeI6U9YnSvDqLU2vBT2uN4kLEzfgZ0ThIZpN18A==} + engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 - dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: true - /@csstools/postcss-relative-color-syntax@2.0.8(postcss@8.4.32): - resolution: {integrity: sha512-wu/Oh7QKINpRXnmLMUbObVNlqwr843PSF4a3x3fMC0I+vUeoGqMfZuSPFtT+NnYYxfzUjEZ091GURPxee22VLQ==} - engines: {node: ^14 || ^16 || >=18} + '@csstools/postcss-logical-viewport-units@4.0.0': + resolution: {integrity: sha512-TA3AqVN/1IH3dKRC2UUWvprvwyOs2IeD7FDZk5Hz20w4q33yIuSg0i0gjyTUkcn90g8A4n7QpyZ2AgBrnYPnnA==} + engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 - dependencies: - '@csstools/css-color-parser': 1.5.0(@csstools/css-parser-algorithms@2.4.0)(@csstools/css-tokenizer@2.2.2) - '@csstools/css-parser-algorithms': 2.4.0(@csstools/css-tokenizer@2.2.2) - '@csstools/css-tokenizer': 2.2.2 - '@csstools/postcss-progressive-custom-properties': 3.0.3(postcss@8.4.32) - postcss: 8.4.32 - dev: true - /@csstools/postcss-scope-pseudo-class@3.0.1(postcss@8.4.32): - resolution: {integrity: sha512-3ZFonK2gfgqg29gUJ2w7xVw2wFJ1eNWVDONjbzGkm73gJHVCYK5fnCqlLr+N+KbEfv2XbWAO0AaOJCFB6Fer6A==} - engines: {node: ^14 || ^16 || >=18} + '@csstools/postcss-media-minmax@3.0.1': + resolution: {integrity: sha512-I+CrmZt23fyejMItpLQFOg9gPXkDBBDjTqRT0UxCTZlYZfGrzZn4z+2kbXLRwDfR59OK8zaf26M4kwYwG0e1MA==} + engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 - dependencies: - postcss: 8.4.32 - postcss-selector-parser: 6.0.13 - dev: true - /@csstools/postcss-stepped-value-functions@3.0.3(postcss@8.4.32): - resolution: {integrity: sha512-hzo9Wr3u7JJiM65/EyHgE/gJpBzhDwBSGOobFs2YQ0ZNTywUliYQoYJud1KKlByMRuhqvDLh9V95eIkLf/fZTQ==} - engines: {node: ^14 || ^16 || >=18} + '@csstools/postcss-media-queries-aspect-ratio-number-values@4.0.0': + resolution: {integrity: sha512-FDdC3lbrj8Vr0SkGIcSLTcRB7ApG6nlJFxOxkEF2C5hIZC1jtgjISFSGn/WjFdVkn8Dqe+Vx9QXI3axS2w1XHw==} + engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 - dependencies: - '@csstools/css-calc': 1.1.5(@csstools/css-parser-algorithms@2.4.0)(@csstools/css-tokenizer@2.2.2) - '@csstools/css-parser-algorithms': 2.4.0(@csstools/css-tokenizer@2.2.2) - '@csstools/css-tokenizer': 2.2.2 - postcss: 8.4.32 - dev: true - /@csstools/postcss-text-decoration-shorthand@3.0.4(postcss@8.4.32): - resolution: {integrity: sha512-yUZmbnUemgQmja7SpOZeU45+P49wNEgQguRdyTktFkZsHf7Gof+ZIYfvF6Cm+LsU1PwSupy4yUeEKKjX5+k6cQ==} - engines: {node: ^14 || ^16 || >=18} + '@csstools/postcss-mixins@1.0.0': + resolution: {integrity: sha512-rz6qjT2w9L3k65jGc2dX+3oGiSrYQ70EZPDrINSmSVoVys7lLBFH0tvEa8DW2sr9cbRVD/W+1sy8+7bfu0JUfg==} + engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 - dependencies: - '@csstools/color-helpers': 4.0.0 - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: true - /@csstools/postcss-trigonometric-functions@3.0.3(postcss@8.4.32): - resolution: {integrity: sha512-T/npTbDuMZ3vktEMuA05p1oeVd12Sy47qZP1vFhzNMUOdXGCK9vlm0tUSIlV5DdlbTJqKqq9FhGitZH9VTKrfQ==} - engines: {node: ^14 || ^16 || >=18} + '@csstools/postcss-nested-calc@5.0.0': + resolution: {integrity: sha512-aPSw8P60e/i9BEfugauhikBqgjiwXcw3I9o4vXs+hktl4NSTgZRI0QHimxk9mst8N01A2TKDBxOln3mssRxiHQ==} + engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 - dependencies: - '@csstools/css-calc': 1.1.5(@csstools/css-parser-algorithms@2.4.0)(@csstools/css-tokenizer@2.2.2) - '@csstools/css-parser-algorithms': 2.4.0(@csstools/css-tokenizer@2.2.2) - '@csstools/css-tokenizer': 2.2.2 - postcss: 8.4.32 - dev: true - /@csstools/postcss-unset-value@3.0.1(postcss@8.4.32): - resolution: {integrity: sha512-dbDnZ2ja2U8mbPP0Hvmt2RMEGBiF1H7oY6HYSpjteXJGihYwgxgTr6KRbbJ/V6c+4wd51M+9980qG4gKVn5ttg==} - engines: {node: ^14 || ^16 || >=18} + '@csstools/postcss-normalize-display-values@5.0.1': + resolution: {integrity: sha512-FcbEmoxDEGYvm2W3rQzVzcuo66+dDJjzzVDs+QwRmZLHYofGmMGwIKPqzF86/YW+euMDa7sh1xjWDvz/fzByZQ==} + engines: {node: '>=20.19.0'} peerDependencies: postcss: ^8.4 - dependencies: - postcss: 8.4.32 - dev: true - /@csstools/selector-specificity@3.0.1(postcss-selector-parser@6.0.13): - resolution: {integrity: sha512-NPljRHkq4a14YzZ3YD406uaxh7s0g6eAq3L9aLOWywoqe8PkYamAvtsh7KNX6c++ihDrJ0RiU+/z7rGnhlZ5ww==} - engines: {node: ^14 || ^16 || >=18} + '@csstools/postcss-oklab-function@5.0.2': + resolution: {integrity: sha512-3d/Wcnp2uW6Io0Tajl0croeUo46gwOVQI9N32PjA/HVQo6z1iL7yp19Gp+6e5E5CDKGpW7U822MsDVo2XK1z0Q==} + engines: {node: '>=20.19.0'} peerDependencies: - postcss-selector-parser: ^6.0.13 - dependencies: - postcss-selector-parser: 6.0.13 - dev: true + postcss: ^8.4 - /@esbuild/aix-ppc64@0.19.10: - resolution: {integrity: sha512-Q+mk96KJ+FZ30h9fsJl+67IjNJm3x2eX+GBWGmocAKgzp27cowCOOqSdscX80s0SpdFXZnIv/+1xD1EctFx96Q==} - engines: {node: '>=12'} + '@csstools/postcss-position-area-property@2.0.0': + resolution: {integrity: sha512-TeEfzsJGB23Syv7yCm8AHCD2XTFujdjr9YYu9ebH64vnfCEvY4BG319jXAYSlNlf3Yc9PNJ6WnkDkUF5XVgSKQ==} + engines: {node: '>=20.19.0'} + peerDependencies: + postcss: ^8.4 + + '@csstools/postcss-progressive-custom-properties@5.0.0': + resolution: {integrity: sha512-NsJoZ89rxmDrUsITf8QIk5w+lQZQ8Xw5K6cLFG+cfiffsLYHb3zcbOOrHLetGl1WIhjWWQ4Cr8MMrg46Q+oACg==} + engines: {node: '>=20.19.0'} + peerDependencies: + postcss: ^8.4 + + '@csstools/postcss-property-rule-prelude-list@2.0.0': + resolution: {integrity: sha512-qcMAkc9AhpzHgmQCD8hoJgGYifcOAxd1exXjjxilMM6euwRE619xDa4UsKBCv/v4g+sS63sd6c29LPM8s2ylSQ==} + engines: {node: '>=20.19.0'} + peerDependencies: + postcss: ^8.4 + + '@csstools/postcss-random-function@3.0.1': + resolution: {integrity: sha512-SvKGfmj+WHfn4bWHaBYlkXDyU3SlA3fL8aaYZ8Op6M8tunNf3iV9uZyZZGWMCbDw0sGeoTmYZW9nmKN8Qi/ctg==} + engines: {node: '>=20.19.0'} + peerDependencies: + postcss: ^8.4 + + '@csstools/postcss-relative-color-syntax@4.0.2': + resolution: {integrity: sha512-HaMN+qMURinllszbps2AhXKaLeibg/2VW6FriYDrqE58ji82+z2S3/eLloywVOY8BQCJ9lZMdy6TcRQNbn9u3w==} + engines: {node: '>=20.19.0'} + peerDependencies: + postcss: ^8.4 + + '@csstools/postcss-scope-pseudo-class@5.0.0': + resolution: {integrity: sha512-kBrBFJcAji3MSHS4qQIihPvJfJC5xCabXLbejqDMiQi+86HD4eMBiTayAo46Urg7tlEmZZQFymFiJt+GH6nvXw==} + engines: {node: '>=20.19.0'} + peerDependencies: + postcss: ^8.4 + + '@csstools/postcss-sign-functions@2.0.1': + resolution: {integrity: sha512-C3br0qcHJkQ0qSGUBnDJHXQdO8XObnCpGwai5m1L2tv2nCjt0vRHG6A9aVCQHvh08OqHNM2ty1dYDNNXV99YAQ==} + engines: {node: '>=20.19.0'} + peerDependencies: + postcss: ^8.4 + + '@csstools/postcss-stepped-value-functions@5.0.1': + resolution: {integrity: sha512-vZf7zPzRb7xIi2o5Z9q6wyeEAjoRCg74O2QvYxmQgxYO5V5cdBv4phgJDyOAOP3JHy4abQlm2YaEUS3gtGQo0g==} + engines: {node: '>=20.19.0'} + peerDependencies: + postcss: ^8.4 + + '@csstools/postcss-syntax-descriptor-syntax-production@2.0.0': + resolution: {integrity: sha512-elYcbdiBXAkPqvojB9kIBRuHY6htUhjSITtFQ+XiXnt6SvZCbNGxQmaaw6uZ7SPHu/+i/XVjzIt09/1k3SIerQ==} + engines: {node: '>=20.19.0'} + peerDependencies: + postcss: ^8.4 + + '@csstools/postcss-system-ui-font-family@2.0.0': + resolution: {integrity: sha512-FyGZCgchFImFyiHS2x3rD5trAqatf/x23veBLTIgbaqyFfna6RNBD+Qf8HRSjt6HGMXOLhAjxJ3OoZg0bbn7Qw==} + engines: {node: '>=20.19.0'} + peerDependencies: + postcss: ^8.4 + + '@csstools/postcss-text-decoration-shorthand@5.0.3': + resolution: {integrity: sha512-62fjggvIM1YYfDJPcErMUDkEZB6CByG8neTJqexnZe1hRBgCjD4dnXDLoCSSurjs1LzjBq6irFDpDaOvDZfrlw==} + engines: {node: '>=20.19.0'} + peerDependencies: + postcss: ^8.4 + + '@csstools/postcss-trigonometric-functions@5.0.1': + resolution: {integrity: sha512-e8me32Mhl8JeBnxVJgsQUYpV4Md4KiyvpILpQlaY/eK1Gwdb04kasiTTswPQ5q7Z8+FppJZ2Z4d8HRfn6rjD3w==} + engines: {node: '>=20.19.0'} + peerDependencies: + postcss: ^8.4 + + '@csstools/postcss-unset-value@5.0.0': + resolution: {integrity: sha512-EoO54sS2KCIfesvHyFYAW99RtzwHdgaJzhl7cqKZSaMYKZv3fXSOehDjAQx8WZBKn1JrMd7xJJI1T1BxPF7/jA==} + engines: {node: '>=20.19.0'} + peerDependencies: + postcss: ^8.4 + + '@csstools/selector-resolve-nested@4.0.0': + resolution: {integrity: sha512-9vAPxmp+Dx3wQBIUwc1v7Mdisw1kbbaGqXUM8QLTgWg7SoPGYtXBsMXvsFs/0Bn5yoFhcktzxNZGNaUt0VjgjA==} + engines: {node: '>=20.19.0'} + peerDependencies: + postcss-selector-parser: ^7.1.1 + + '@csstools/selector-specificity@6.0.0': + resolution: {integrity: sha512-4sSgl78OtOXEX/2d++8A83zHNTgwCJMaR24FvsYL7Uf/VS8HZk9PTwR51elTbGqMuwH3szLvvOXEaVnqn0Z3zA==} + engines: {node: '>=20.19.0'} + peerDependencies: + postcss-selector-parser: ^7.1.1 + + '@csstools/utilities@3.0.0': + resolution: {integrity: sha512-etDqA/4jYvOGBM6yfKCOsEXfH96BKztZdgGmGqKi2xHnDe0ILIBraRspwgYatJH9JsCZ5HCGoCst8w18EKOAdg==} + engines: {node: '>=20.19.0'} + peerDependencies: + postcss: ^8.4 + + '@dimforge/rapier3d-compat@0.12.0': + resolution: {integrity: sha512-uekIGetywIgopfD97oDL5PfeezkFpNhwlzlaEYNOA0N6ghdsOvh/HYjSMek5Q2O1PYvRSDFcqFVJl4r4ZBwOow==} + + '@esbuild/aix-ppc64@0.27.4': + resolution: {integrity: sha512-cQPwL2mp2nSmHHJlCyoXgHGhbEPMrEEU5xhkcy3Hs/O7nGZqEpZ2sUtLaL9MORLtDfRvVl2/3PAuEkYZH0Ty8Q==} + engines: {node: '>=18'} cpu: [ppc64] os: [aix] - requiresBuild: true - dev: true - optional: true - /@esbuild/android-arm64@0.19.10: - resolution: {integrity: sha512-1X4CClKhDgC3by7k8aOWZeBXQX8dHT5QAMCAQDArCLaYfkppoARvh0fit3X2Qs+MXDngKcHv6XXyQCpY0hkK1Q==} - engines: {node: '>=12'} + '@esbuild/android-arm64@0.27.4': + resolution: {integrity: sha512-gdLscB7v75wRfu7QSm/zg6Rx29VLdy9eTr2t44sfTW7CxwAtQghZ4ZnqHk3/ogz7xao0QAgrkradbBzcqFPasw==} + engines: {node: '>=18'} cpu: [arm64] os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/android-arm@0.19.10: - resolution: {integrity: sha512-7W0bK7qfkw1fc2viBfrtAEkDKHatYfHzr/jKAHNr9BvkYDXPcC6bodtm8AyLJNNuqClLNaeTLuwURt4PRT9d7w==} - engines: {node: '>=12'} + '@esbuild/android-arm@0.27.4': + resolution: {integrity: sha512-X9bUgvxiC8CHAGKYufLIHGXPJWnr0OCdR0anD2e21vdvgCI8lIfqFbnoeOz7lBjdrAGUhqLZLcQo6MLhTO2DKQ==} + engines: {node: '>=18'} cpu: [arm] os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/android-x64@0.19.10: - resolution: {integrity: sha512-O/nO/g+/7NlitUxETkUv/IvADKuZXyH4BHf/g/7laqKC4i/7whLpB0gvpPc2zpF0q9Q6FXS3TS75QHac9MvVWw==} - engines: {node: '>=12'} + '@esbuild/android-x64@0.27.4': + resolution: {integrity: sha512-PzPFnBNVF292sfpfhiyiXCGSn9HZg5BcAz+ivBuSsl6Rk4ga1oEXAamhOXRFyMcjwr2DVtm40G65N3GLeH1Lvw==} + engines: {node: '>=18'} cpu: [x64] os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/darwin-arm64@0.19.10: - resolution: {integrity: sha512-YSRRs2zOpwypck+6GL3wGXx2gNP7DXzetmo5pHXLrY/VIMsS59yKfjPizQ4lLt5vEI80M41gjm2BxrGZ5U+VMA==} - engines: {node: '>=12'} + '@esbuild/darwin-arm64@0.27.4': + resolution: {integrity: sha512-b7xaGIwdJlht8ZFCvMkpDN6uiSmnxxK56N2GDTMYPr2/gzvfdQN8rTfBsvVKmIVY/X7EM+/hJKEIbbHs9oA4tQ==} + engines: {node: '>=18'} cpu: [arm64] os: [darwin] - requiresBuild: true - dev: true - optional: true - /@esbuild/darwin-x64@0.19.10: - resolution: {integrity: sha512-alfGtT+IEICKtNE54hbvPg13xGBe4GkVxyGWtzr+yHO7HIiRJppPDhOKq3zstTcVf8msXb/t4eavW3jCDpMSmA==} - engines: {node: '>=12'} + '@esbuild/darwin-x64@0.27.4': + resolution: {integrity: sha512-sR+OiKLwd15nmCdqpXMnuJ9W2kpy0KigzqScqHI3Hqwr7IXxBp3Yva+yJwoqh7rE8V77tdoheRYataNKL4QrPw==} + engines: {node: '>=18'} cpu: [x64] os: [darwin] - requiresBuild: true - dev: true - optional: true - /@esbuild/freebsd-arm64@0.19.10: - resolution: {integrity: sha512-dMtk1wc7FSH8CCkE854GyGuNKCewlh+7heYP/sclpOG6Cectzk14qdUIY5CrKDbkA/OczXq9WesqnPl09mj5dg==} - engines: {node: '>=12'} + '@esbuild/freebsd-arm64@0.27.4': + resolution: {integrity: sha512-jnfpKe+p79tCnm4GVav68A7tUFeKQwQyLgESwEAUzyxk/TJr4QdGog9sqWNcUbr/bZt/O/HXouspuQDd9JxFSw==} + engines: {node: '>=18'} cpu: [arm64] os: [freebsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/freebsd-x64@0.19.10: - resolution: {integrity: sha512-G5UPPspryHu1T3uX8WiOEUa6q6OlQh6gNl4CO4Iw5PS+Kg5bVggVFehzXBJY6X6RSOMS8iXDv2330VzaObm4Ag==} - engines: {node: '>=12'} + '@esbuild/freebsd-x64@0.27.4': + resolution: {integrity: sha512-2kb4ceA/CpfUrIcTUl1wrP/9ad9Atrp5J94Lq69w7UwOMolPIGrfLSvAKJp0RTvkPPyn6CIWrNy13kyLikZRZQ==} + engines: {node: '>=18'} cpu: [x64] os: [freebsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-arm64@0.19.10: - resolution: {integrity: sha512-QxaouHWZ+2KWEj7cGJmvTIHVALfhpGxo3WLmlYfJ+dA5fJB6lDEIg+oe/0//FuyVHuS3l79/wyBxbHr0NgtxJQ==} - engines: {node: '>=12'} + '@esbuild/linux-arm64@0.27.4': + resolution: {integrity: sha512-7nQOttdzVGth1iz57kxg9uCz57dxQLHWxopL6mYuYthohPKEK0vU0C3O21CcBK6KDlkYVcnDXY099HcCDXd9dA==} + engines: {node: '>=18'} cpu: [arm64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-arm@0.19.10: - resolution: {integrity: sha512-j6gUW5aAaPgD416Hk9FHxn27On28H4eVI9rJ4az7oCGTFW48+LcgNDBN+9f8rKZz7EEowo889CPKyeaD0iw9Kg==} - engines: {node: '>=12'} + '@esbuild/linux-arm@0.27.4': + resolution: {integrity: sha512-aBYgcIxX/wd5n2ys0yESGeYMGF+pv6g0DhZr3G1ZG4jMfruU9Tl1i2Z+Wnj9/KjGz1lTLCcorqE2viePZqj4Eg==} + engines: {node: '>=18'} cpu: [arm] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-ia32@0.19.10: - resolution: {integrity: sha512-4ub1YwXxYjj9h1UIZs2hYbnTZBtenPw5NfXCRgEkGb0b6OJ2gpkMvDqRDYIDRjRdWSe/TBiZltm3Y3Q8SN1xNg==} - engines: {node: '>=12'} + '@esbuild/linux-ia32@0.27.4': + resolution: {integrity: sha512-oPtixtAIzgvzYcKBQM/qZ3R+9TEUd1aNJQu0HhGyqtx6oS7qTpvjheIWBbes4+qu1bNlo2V4cbkISr8q6gRBFA==} + engines: {node: '>=18'} cpu: [ia32] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-loong64@0.19.10: - resolution: {integrity: sha512-lo3I9k+mbEKoxtoIbM0yC/MZ1i2wM0cIeOejlVdZ3D86LAcFXFRdeuZmh91QJvUTW51bOK5W2BznGNIl4+mDaA==} - engines: {node: '>=12'} + '@esbuild/linux-loong64@0.27.4': + resolution: {integrity: sha512-8mL/vh8qeCoRcFH2nM8wm5uJP+ZcVYGGayMavi8GmRJjuI3g1v6Z7Ni0JJKAJW+m0EtUuARb6Lmp4hMjzCBWzA==} + engines: {node: '>=18'} cpu: [loong64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-mips64el@0.19.10: - resolution: {integrity: sha512-J4gH3zhHNbdZN0Bcr1QUGVNkHTdpijgx5VMxeetSk6ntdt+vR1DqGmHxQYHRmNb77tP6GVvD+K0NyO4xjd7y4A==} - engines: {node: '>=12'} + '@esbuild/linux-mips64el@0.27.4': + resolution: {integrity: sha512-1RdrWFFiiLIW7LQq9Q2NES+HiD4NyT8Itj9AUeCl0IVCA459WnPhREKgwrpaIfTOe+/2rdntisegiPWn/r/aAw==} + engines: {node: '>=18'} cpu: [mips64el] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-ppc64@0.19.10: - resolution: {integrity: sha512-tgT/7u+QhV6ge8wFMzaklOY7KqiyitgT1AUHMApau32ZlvTB/+efeCtMk4eXS+uEymYK249JsoiklZN64xt6oQ==} - engines: {node: '>=12'} + '@esbuild/linux-ppc64@0.27.4': + resolution: {integrity: sha512-tLCwNG47l3sd9lpfyx9LAGEGItCUeRCWeAx6x2Jmbav65nAwoPXfewtAdtbtit/pJFLUWOhpv0FpS6GQAmPrHA==} + engines: {node: '>=18'} cpu: [ppc64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-riscv64@0.19.10: - resolution: {integrity: sha512-0f/spw0PfBMZBNqtKe5FLzBDGo0SKZKvMl5PHYQr3+eiSscfJ96XEknCe+JoOayybWUFQbcJTrk946i3j9uYZA==} - engines: {node: '>=12'} + '@esbuild/linux-riscv64@0.27.4': + resolution: {integrity: sha512-BnASypppbUWyqjd1KIpU4AUBiIhVr6YlHx/cnPgqEkNoVOhHg+YiSVxM1RLfiy4t9cAulbRGTNCKOcqHrEQLIw==} + engines: {node: '>=18'} cpu: [riscv64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-s390x@0.19.10: - resolution: {integrity: sha512-pZFe0OeskMHzHa9U38g+z8Yx5FNCLFtUnJtQMpwhS+r4S566aK2ci3t4NCP4tjt6d5j5uo4h7tExZMjeKoehAA==} - engines: {node: '>=12'} + '@esbuild/linux-s390x@0.27.4': + resolution: {integrity: sha512-+eUqgb/Z7vxVLezG8bVB9SfBie89gMueS+I0xYh2tJdw3vqA/0ImZJ2ROeWwVJN59ihBeZ7Tu92dF/5dy5FttA==} + engines: {node: '>=18'} cpu: [s390x] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-x64@0.19.10: - resolution: {integrity: sha512-SpYNEqg/6pZYoc+1zLCjVOYvxfZVZj6w0KROZ3Fje/QrM3nfvT2llI+wmKSrWuX6wmZeTapbarvuNNK/qepSgA==} - engines: {node: '>=12'} + '@esbuild/linux-x64@0.27.4': + resolution: {integrity: sha512-S5qOXrKV8BQEzJPVxAwnryi2+Iq5pB40gTEIT69BQONqR7JH1EPIcQ/Uiv9mCnn05jff9umq/5nqzxlqTOg9NA==} + engines: {node: '>=18'} cpu: [x64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/netbsd-x64@0.19.10: - resolution: {integrity: sha512-ACbZ0vXy9zksNArWlk2c38NdKg25+L9pr/mVaj9SUq6lHZu/35nx2xnQVRGLrC1KKQqJKRIB0q8GspiHI3J80Q==} - engines: {node: '>=12'} + '@esbuild/netbsd-arm64@0.27.4': + resolution: {integrity: sha512-xHT8X4sb0GS8qTqiwzHqpY00C95DPAq7nAwX35Ie/s+LO9830hrMd3oX0ZMKLvy7vsonee73x0lmcdOVXFzd6Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.27.4': + resolution: {integrity: sha512-RugOvOdXfdyi5Tyv40kgQnI0byv66BFgAqjdgtAKqHoZTbTF2QqfQrFwa7cHEORJf6X2ht+l9ABLMP0dnKYsgg==} + engines: {node: '>=18'} cpu: [x64] os: [netbsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/openbsd-x64@0.19.10: - resolution: {integrity: sha512-PxcgvjdSjtgPMiPQrM3pwSaG4kGphP+bLSb+cihuP0LYdZv1epbAIecHVl5sD3npkfYBZ0ZnOjR878I7MdJDFg==} - engines: {node: '>=12'} + '@esbuild/openbsd-arm64@0.27.4': + resolution: {integrity: sha512-2MyL3IAaTX+1/qP0O1SwskwcwCoOI4kV2IBX1xYnDDqthmq5ArrW94qSIKCAuRraMgPOmG0RDTA74mzYNQA9ow==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.27.4': + resolution: {integrity: sha512-u8fg/jQ5aQDfsnIV6+KwLOf1CmJnfu1ShpwqdwC0uA7ZPwFws55Ngc12vBdeUdnuWoQYx/SOQLGDcdlfXhYmXQ==} + engines: {node: '>=18'} cpu: [x64] os: [openbsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/sunos-x64@0.19.10: - resolution: {integrity: sha512-ZkIOtrRL8SEJjr+VHjmW0znkPs+oJXhlJbNwfI37rvgeMtk3sxOQevXPXjmAPZPigVTncvFqLMd+uV0IBSEzqA==} - engines: {node: '>=12'} + '@esbuild/openharmony-arm64@0.27.4': + resolution: {integrity: sha512-JkTZrl6VbyO8lDQO3yv26nNr2RM2yZzNrNHEsj9bm6dOwwu9OYN28CjzZkH57bh4w0I2F7IodpQvUAEd1mbWXg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + + '@esbuild/sunos-x64@0.27.4': + resolution: {integrity: sha512-/gOzgaewZJfeJTlsWhvUEmUG4tWEY2Spp5M20INYRg2ZKl9QPO3QEEgPeRtLjEWSW8FilRNacPOg8R1uaYkA6g==} + engines: {node: '>=18'} cpu: [x64] os: [sunos] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-arm64@0.19.10: - resolution: {integrity: sha512-+Sa4oTDbpBfGpl3Hn3XiUe4f8TU2JF7aX8cOfqFYMMjXp6ma6NJDztl5FDG8Ezx0OjwGikIHw+iA54YLDNNVfw==} - engines: {node: '>=12'} + '@esbuild/win32-arm64@0.27.4': + resolution: {integrity: sha512-Z9SExBg2y32smoDQdf1HRwHRt6vAHLXcxD2uGgO/v2jK7Y718Ix4ndsbNMU/+1Qiem9OiOdaqitioZwxivhXYg==} + engines: {node: '>=18'} cpu: [arm64] os: [win32] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-ia32@0.19.10: - resolution: {integrity: sha512-EOGVLK1oWMBXgfttJdPHDTiivYSjX6jDNaATeNOaCOFEVcfMjtbx7WVQwPSE1eIfCp/CaSF2nSrDtzc4I9f8TQ==} - engines: {node: '>=12'} + '@esbuild/win32-ia32@0.27.4': + resolution: {integrity: sha512-DAyGLS0Jz5G5iixEbMHi5KdiApqHBWMGzTtMiJ72ZOLhbu/bzxgAe8Ue8CTS3n3HbIUHQz/L51yMdGMeoxXNJw==} + engines: {node: '>=18'} cpu: [ia32] os: [win32] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-x64@0.19.10: - resolution: {integrity: sha512-whqLG6Sc70AbU73fFYvuYzaE4MNMBIlR1Y/IrUeOXFrWHxBEjjbZaQ3IXIQS8wJdAzue2GwYZCjOrgrU1oUHoA==} - engines: {node: '>=12'} + '@esbuild/win32-x64@0.27.4': + resolution: {integrity: sha512-+knoa0BDoeXgkNvvV1vvbZX4+hizelrkwmGJBdT17t8FNPwG2lKemmuMZlmaNQ3ws3DKKCxpb4zRZEIp3UxFCg==} + engines: {node: '>=18'} cpu: [x64] os: [win32] - requiresBuild: true - dev: true - optional: true - /@eslint-community/eslint-utils@4.4.0(eslint@8.56.0): - resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + '@eslint-community/eslint-utils@4.9.1': + resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - dependencies: - eslint: 8.56.0 - eslint-visitor-keys: 3.4.3 - dev: true - /@eslint-community/regexpp@4.10.0: - resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} + '@eslint-community/regexpp@4.12.2': + resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - dev: true - /@eslint/eslintrc@2.1.4: - resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - ajv: 6.12.6 - debug: 4.3.4 - espree: 9.6.1 - globals: 13.24.0 - ignore: 5.3.0 - import-fresh: 3.3.0 - js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color - dev: true + '@eslint/config-array@0.23.3': + resolution: {integrity: sha512-j+eEWmB6YYLwcNOdlwQ6L2OsptI/LO6lNBuLIqe5R7RetD658HLoF+Mn7LzYmAWWNNzdC6cqP+L6r8ujeYXWLw==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} - /@eslint/js@8.56.0: - resolution: {integrity: sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true + '@eslint/config-helpers@0.5.3': + resolution: {integrity: sha512-lzGN0onllOZCGroKJmRwY6QcEHxbjBw1gwB8SgRSqK8YbbtEXMvKynsXc3553ckIEBxsbMBU7oOZXKIPGZNeZw==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + '@eslint/core@1.1.1': + resolution: {integrity: sha512-QUPblTtE51/7/Zhfv8BDwO0qkkzQL7P/aWWbqcf4xWLEYn1oKjdO0gglQBB4GAsu7u6wjijbCmzsUTy6mnk6oQ==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + '@eslint/js@10.0.1': + resolution: {integrity: sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + peerDependencies: + eslint: ^10.0.0 + peerDependenciesMeta: + eslint: + optional: true + + '@eslint/object-schema@3.0.3': + resolution: {integrity: sha512-iM869Pugn9Nsxbh/YHRqYiqd23AmIbxJOcpUMOuWCVNdoQJ5ZtwL6h3t0bcZzJUlC3Dq9jCFCESBZnX0GTv7iQ==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} - /@gfx/zopfli@1.0.15: + '@eslint/plugin-kit@0.6.1': + resolution: {integrity: sha512-iH1B076HoAshH1mLpHMgwdGeTs0CYwL0SPMkGuSebZrwBp16v415e9NZXg2jtrqPVQjf6IANe2Vtlr5KswtcZQ==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + '@gfx/zopfli@1.0.15': resolution: {integrity: sha512-7mBgpi7UD82fsff5ThQKet0uBTl4BYerQuc+/qA1ELTwWEiIedRTcD3JgiUu9wwZ2kytW8JOb165rSdAt8PfcQ==} engines: {node: '>= 8'} - dependencies: - base64-js: 1.5.1 - dev: true - /@humanwhocodes/config-array@0.11.13: - resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==} - engines: {node: '>=10.10.0'} - dependencies: - '@humanwhocodes/object-schema': 2.0.1 - debug: 4.3.4 - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color - dev: true + '@humanfs/core@0.19.1': + resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} + engines: {node: '>=18.18.0'} - /@humanwhocodes/module-importer@1.0.1: + '@humanfs/node@0.16.7': + resolution: {integrity: sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==} + engines: {node: '>=18.18.0'} + + '@humanwhocodes/module-importer@1.0.1': resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} - dev: true - /@humanwhocodes/object-schema@2.0.1: - resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==} - dev: true + '@humanwhocodes/retry@0.4.3': + resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} + engines: {node: '>=18.18'} + + '@isaacs/fs-minipass@4.0.1': + resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} + engines: {node: '>=18.0.0'} + + '@keyv/bigmap@1.3.1': + resolution: {integrity: sha512-WbzE9sdmQtKy8vrNPa9BRnwZh5UF4s1KTmSK0KUVLo3eff5BlQNNWDnFOouNpKfPKDnms9xynJjsMYjMaT/aFQ==} + engines: {node: '>= 18'} + peerDependencies: + keyv: ^5.6.0 + + '@keyv/serialize@1.1.1': + resolution: {integrity: sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA==} - /@mapbox/node-pre-gyp@1.0.11: - resolution: {integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==} + '@mapbox/node-pre-gyp@2.0.3': + resolution: {integrity: sha512-uwPAhccfFJlsfCxMYTwOdVfOz3xqyj8xYL3zJj8f0pb30tLohnnFPhLuqp4/qoEz8sNxe4SESZedcBojRefIzg==} + engines: {node: '>=18'} hasBin: true - dependencies: - detect-libc: 2.0.2 - https-proxy-agent: 5.0.1 - make-dir: 3.1.0 - node-fetch: 2.7.0 - nopt: 5.0.0 - npmlog: 5.0.1 - rimraf: 3.0.2 - semver: 7.5.4 - tar: 6.2.0 - transitivePeerDependencies: - - encoding - - supports-color - dev: true - /@nodelib/fs.scandir@2.1.5: + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} - dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 - dev: true - /@nodelib/fs.stat@2.0.5: + '@nodelib/fs.stat@2.0.5': resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} engines: {node: '>= 8'} - dev: true - /@nodelib/fs.walk@1.2.8: - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@parcel/watcher-android-arm64@2.5.6': + resolution: {integrity: sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [android] + + '@parcel/watcher-darwin-arm64@2.5.6': + resolution: {integrity: sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [darwin] + + '@parcel/watcher-darwin-x64@2.5.6': + resolution: {integrity: sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [darwin] + + '@parcel/watcher-freebsd-x64@2.5.6': + resolution: {integrity: sha512-vJVi8yd/qzJxEKHkeemh7w3YAn6RJCtYlE4HPMoVnCpIXEzSrxErBW5SJBgKLbXU3WdIpkjBTeUNtyBVn8TRng==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [freebsd] + + '@parcel/watcher-linux-arm-glibc@2.5.6': + resolution: {integrity: sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ==} + engines: {node: '>= 10.0.0'} + cpu: [arm] + os: [linux] + + '@parcel/watcher-linux-arm-musl@2.5.6': + resolution: {integrity: sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==} + engines: {node: '>= 10.0.0'} + cpu: [arm] + os: [linux] + + '@parcel/watcher-linux-arm64-glibc@2.5.6': + resolution: {integrity: sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + + '@parcel/watcher-linux-arm64-musl@2.5.6': + resolution: {integrity: sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + + '@parcel/watcher-linux-x64-glibc@2.5.6': + resolution: {integrity: sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + + '@parcel/watcher-linux-x64-musl@2.5.6': + resolution: {integrity: sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + + '@parcel/watcher-win32-arm64@2.5.6': + resolution: {integrity: sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [win32] + + '@parcel/watcher-win32-ia32@2.5.6': + resolution: {integrity: sha512-k35yLp1ZMwwee3Ez/pxBi5cf4AoBKYXj00CZ80jUz5h8prpiaQsiRPKQMxoLstNuqe2vR4RNPEAEcjEFzhEz/g==} + engines: {node: '>= 10.0.0'} + cpu: [ia32] + os: [win32] + + '@parcel/watcher-win32-x64@2.5.6': + resolution: {integrity: sha512-hbQlYcCq5dlAX9Qx+kFb0FHue6vbjlf0FrNzSKdYK2APUf7tGfGxQCk2ihEREmbR6ZMc0MVAD5RIX/41gpUzTw==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [win32] + + '@parcel/watcher@2.5.6': + resolution: {integrity: sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==} + engines: {node: '>= 10.0.0'} + + '@rollup/pluginutils@5.3.0': + resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + '@sindresorhus/is@5.6.0': + resolution: {integrity: sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==} + engines: {node: '>=14.16'} + + '@sindresorhus/merge-streams@2.3.0': + resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} + engines: {node: '>=18'} + + '@sindresorhus/merge-streams@4.0.0': + resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} + engines: {node: '>=18'} + + '@stylistic/eslint-plugin@5.10.0': + resolution: {integrity: sha512-nPK52ZHvot8Ju/0A4ucSX1dcPV2/1clx0kLcH5wDmrE4naKso7TUC/voUyU1O9OTKTrR6MYip6LP0ogEMQ9jPQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^9.0.0 || ^10.0.0 + + '@szmarczak/http-timer@5.0.1': + resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==} + engines: {node: '>=14.16'} + + '@tokenizer/inflate@0.2.7': + resolution: {integrity: sha512-MADQgmZT1eKjp06jpI2yozxaU9uVs4GzzgSL+uEq7bVcJ9V1ZXQkeGNql1fsSI0gMy1vhvNTNbUqrx+pZfJVmg==} + engines: {node: '>=18'} + + '@tokenizer/token@0.3.0': + resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} + + '@tweakpane/core@2.0.5': + resolution: {integrity: sha512-punBgD5rKCF5vcNo6BsSOXiDR/NSs9VM7SG65QSLJIxfRaGgj54ree9zQW6bO3pNFf3AogiGgaNODUVQRk9YqQ==} + + '@tweenjs/tween.js@23.1.3': + resolution: {integrity: sha512-vJmvvwFxYuGnF2axRtPYocag6Clbb5YS7kLL+SO/TeVFzHqDIWrNKYtcsPMibjDx9O+bu+psAy9NKfWklassUA==} + + '@types/esrecurse@4.3.1': + resolution: {integrity: sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==} + + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + + '@types/http-cache-semantics@4.2.0': + resolution: {integrity: sha512-L3LgimLHXtGkWikKnsPg0/VFx9OGZaC+eN1u4r+OB1XRqH3meBIAVC2zr1WdMH+RHmnRkqliQAOHNJ/E0j/e0Q==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/node@25.5.0': + resolution: {integrity: sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw==} + + '@types/stats.js@0.17.4': + resolution: {integrity: sha512-jIBvWWShCvlBqBNIZt0KAshWpvSjhkwkEu4ZUcASoAvhmrgAUI2t1dXrjSL4xXVLB4FznPrIsX3nKXFl/Dt4vA==} + + '@types/three@0.183.1': + resolution: {integrity: sha512-f2Pu5Hrepfgavttdye3PsH5RWyY/AvdZQwIVhrc4uNtvF7nOWJacQKcoVJn0S4f0yYbmAE6AR+ve7xDcuYtMGw==} + + '@types/webxr@0.5.24': + resolution: {integrity: sha512-h8fgEd/DpoS9CBrjEQXR+dIDraopAEfu4wYVNY2tEPwk60stPWhvZMf4Foo5FakuQ7HFZoa8WceaWFervK2Ovg==} + + '@typescript-eslint/eslint-plugin@8.57.1': + resolution: {integrity: sha512-Gn3aqnvNl4NGc6x3/Bqk1AOn0thyTU9bqDRhiRnUWezgvr2OnhYCWCgC8zXXRVqBsIL1pSDt7T9nJUe0oM0kDQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.57.1 + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/parser@8.57.1': + resolution: {integrity: sha512-k4eNDan0EIMTT/dUKc/g+rsJ6wcHYhNPdY19VoX/EOtaAG8DLtKCykhrUnuHPYvinn5jhAPgD2Qw9hXBwrahsw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/project-service@8.57.1': + resolution: {integrity: sha512-vx1F37BRO1OftsYlmG9xay1TqnjNVlqALymwWVuYTdo18XuKxtBpCj1QlzNIEHlvlB27osvXFWptYiEWsVdYsg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/scope-manager@8.57.1': + resolution: {integrity: sha512-hs/QcpCwlwT2L5S+3fT6gp0PabyGk4Q0Rv2doJXA0435/OpnSR3VRgvrp8Xdoc3UAYSg9cyUjTeFXZEPg/3OKg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/tsconfig-utils@8.57.1': + resolution: {integrity: sha512-0lgOZB8cl19fHO4eI46YUx2EceQqhgkPSuCGLlGi79L2jwYY1cxeYc1Nae8Aw1xjgW3PKVDLlr3YJ6Bxx8HkWg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/type-utils@8.57.1': + resolution: {integrity: sha512-+Bwwm0ScukFdyoJsh2u6pp4S9ktegF98pYUU0hkphOOqdMB+1sNQhIz8y5E9+4pOioZijrkfNO/HUJVAFFfPKA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/types@8.57.1': + resolution: {integrity: sha512-S29BOBPJSFUiblEl6RzPPjJt6w25A6XsBqRVDt53tA/tlL8q7ceQNZHTjPeONt/3S7KRI4quk+yP9jK2WjBiPQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/typescript-estree@8.57.1': + resolution: {integrity: sha512-ybe2hS9G6pXpqGtPli9Gx9quNV0TWLOmh58ADlmZe9DguLq0tiAKVjirSbtM1szG6+QH6rVXyU6GTLQbWnMY+g==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/utils@8.57.1': + resolution: {integrity: sha512-XUNSJ/lEVFttPMMoDVA2r2bwrl8/oPx8cURtczkSEswY5T3AeLmCy+EKWQNdL4u0MmAHOjcWrqJp2cdvgjn8dQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/visitor-keys@8.57.1': + resolution: {integrity: sha512-YWnmJkXbofiz9KbnbbwuA2rpGkFPLbAIetcCNO6mJ8gdhdZ/v7WDXsoGFAJuM6ikUFKTlSQnjWnVO4ux+UzS6A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@vercel/nft@1.4.0': + resolution: {integrity: sha512-rr7JVnI7YGjA4lngucrWjZ7eCOJZZQaDHB+5NRGOuNc+k4PU2Lb9PmYm8uBmW8qichF7WkR2RmwmhXHBhx6wzw==} + engines: {node: '>=20'} + hasBin: true + + '@webgpu/types@0.1.69': + resolution: {integrity: sha512-RPmm6kgRbI8e98zSD3RVACvnuktIja5+yLgDAkTmxLr90BEwdTXRQWNLF3ETTTyH/8mKhznZuN5AveXYFEsMGQ==} + + '@xhmikosr/archive-type@7.1.0': + resolution: {integrity: sha512-xZEpnGplg1sNPyEgFh0zbHxqlw5dtYg6viplmWSxUj12+QjU9SKu3U/2G73a15pEjLaOqTefNSZ1fOPUOT4Xgg==} + engines: {node: '>=18'} + + '@xhmikosr/bin-check@7.1.0': + resolution: {integrity: sha512-y1O95J4mnl+6MpVmKfMYXec17hMEwE/yeCglFNdx+QvLLtP0yN4rSYcbkXnth+lElBuKKek2NbvOfOGPpUXCvw==} + engines: {node: '>=18'} + + '@xhmikosr/bin-wrapper@13.2.0': + resolution: {integrity: sha512-t9U9X0sDPRGDk5TGx4dv5xiOvniVJpXnfTuynVKwHgtib95NYEw4MkZdJqhoSiz820D9m0o6PCqOPMXz0N9fIw==} + engines: {node: '>=18'} + + '@xhmikosr/decompress-tar@8.1.0': + resolution: {integrity: sha512-m0q8x6lwxenh1CrsTby0Jrjq4vzW/QU1OLhTHMQLEdHpmjR1lgahGz++seZI0bXF3XcZw3U3xHfqZSz+JPP2Gg==} + engines: {node: '>=18'} + + '@xhmikosr/decompress-tarbz2@8.1.0': + resolution: {integrity: sha512-aCLfr3A/FWZnOu5eqnJfme1Z1aumai/WRw55pCvBP+hCGnTFrcpsuiaVN5zmWTR53a8umxncY2JuYsD42QQEbw==} + engines: {node: '>=18'} + + '@xhmikosr/decompress-targz@8.1.0': + resolution: {integrity: sha512-fhClQ2wTmzxzdz2OhSQNo9ExefrAagw93qaG1YggoIz/QpI7atSRa7eOHv4JZkpHWs91XNn8Hry3CwUlBQhfPA==} + engines: {node: '>=18'} + + '@xhmikosr/decompress-unzip@7.1.0': + resolution: {integrity: sha512-oqTYAcObqTlg8owulxFTqiaJkfv2SHsxxxz9Wg4krJAHVzGWlZsU8tAB30R6ow+aHrfv4Kub6WQ8u04NWVPUpA==} + engines: {node: '>=18'} + + '@xhmikosr/decompress@10.2.0': + resolution: {integrity: sha512-MmDBvu0+GmADyQWHolcZuIWffgfnuTo4xpr2I/Qw5Ox0gt+e1Be7oYqJM4te5ylL6mzlcoicnHVDvP27zft8tg==} + engines: {node: '>=18'} + + '@xhmikosr/downloader@15.2.0': + resolution: {integrity: sha512-lAqbig3uRGTt0sHNIM4vUG9HoM+mRl8K28WuYxyXLCUT6pyzl4Y4i0LZ3jMEsCYZ6zjPZbO9XkG91OSTd4si7g==} + engines: {node: '>=18'} + + '@xhmikosr/os-filter-obj@3.0.0': + resolution: {integrity: sha512-siPY6BD5dQ2SZPl3I0OZBHL27ZqZvLEosObsZRQ1NUB8qcxegwt0T9eKtV96JMFQpIz1elhkzqOg4c/Ri6Dp9A==} + engines: {node: ^14.14.0 || >=16.0.0} + + abab@1.0.4: + resolution: {integrity: sha512-I+Wi+qiE2kUXyrRhNsWv6XsjUTBJjSoVSctKNBfLG5zG/Xe7Rjbxf13+vqYHNTwHaFU+FtSlVxOCTiMEVtPv0A==} + deprecated: Use your platform's native atob() and btoa() methods instead + + abbrev@3.0.1: + resolution: {integrity: sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==} + engines: {node: ^18.17.0 || >=20.5.0} + + acorn-globals@1.0.9: + resolution: {integrity: sha512-j3/4pkfih8W4NK22gxVSXcEonTpAHOHh0hu5BoZrKcOsW/4oBPxTi4Yk3SAj+FhC1f3+bRTkXdm4019gw1vg9g==} + + acorn-import-attributes@1.9.5: + resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==} + peerDependencies: + acorn: ^8 + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn-walk@8.3.5: + resolution: {integrity: sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw==} + engines: {node: '>=0.4.0'} + + acorn@2.7.0: + resolution: {integrity: sha512-pXK8ez/pVjqFdAgBkF1YPVRacuLQ9EXBKaKWaeh58WNfMkCmZhOZzu+NtKSPD5PHmCCHheQ5cD29qM1K4QTxIg==} + engines: {node: '>=0.4.0'} + hasBin: true + + acorn@8.16.0: + resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==} + engines: {node: '>=0.4.0'} + hasBin: true + + agent-base@7.1.4: + resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} + engines: {node: '>= 14'} + + ajv@6.14.0: + resolution: {integrity: sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==} + + ajv@8.18.0: + resolution: {integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==} + + ansi-regex@2.1.1: + resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==} + engines: {node: '>=0.10.0'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.2.2: + resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} + engines: {node: '>=12'} + + ansi-styles@2.2.1: + resolution: {integrity: sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==} + engines: {node: '>=0.10.0'} + + ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@6.2.3: + resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} + engines: {node: '>=12'} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + arch@3.0.0: + resolution: {integrity: sha512-AmIAC+Wtm2AU8lGfTtHsw0Y9Qtftx2YXEEtiBP10xFUtMOA+sHHx6OAddyL52mUKh1vsXQ6/w1mVDptZCyUt4Q==} + + argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + array-buffer-byte-length@1.0.2: + resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} + engines: {node: '>= 0.4'} + + array-find-index@1.0.2: + resolution: {integrity: sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==} + engines: {node: '>=0.10.0'} + + arraybuffer.prototype.slice@1.0.4: + resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} + engines: {node: '>= 0.4'} + + arrgv@1.0.2: + resolution: {integrity: sha512-a4eg4yhp7mmruZDQFqVMlxNRFGi/i1r87pt8SDHy0/I8PqSXoUTlWZRdAZo0VXgvEARcujbtTk8kiZRi1uDGRw==} + engines: {node: '>=8.0.0'} + + arrify@3.0.0: + resolution: {integrity: sha512-tLkvA81vQG/XqE2mjDkGQHoOINtMHtysSnemrmoGe6PydDPMRbVugqyk4A6V/WDWEfm3l+0d8anA9r8cv/5Jaw==} + engines: {node: '>=12'} + + asn1@0.2.6: + resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==} + + assert-plus@1.0.0: + resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==} + engines: {node: '>=0.8'} + + astral-regex@2.0.0: + resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} + engines: {node: '>=8'} + + async-function@1.0.0: + resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} + engines: {node: '>= 0.4'} + + async-sema@3.1.1: + resolution: {integrity: sha512-tLRNUXati5MFePdAk8dw7Qt7DpxPB60ofAgn8WRhW6a2rcimZnYBP9oxHiv0OHy+Wz7kPMG+t4LGdt31+4EmGg==} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + autoprefixer@10.4.27: + resolution: {integrity: sha512-NP9APE+tO+LuJGn7/9+cohklunJsXWiaWEfV3si4Gi/XHDwVNgkwr1J3RQYFIvPy76GmJ9/bW8vyoU1LcxwKHA==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + + ava@7.0.0: + resolution: {integrity: sha512-4sRJO/gehlfAgSbuH02mClDDiyymnuFmirE3KqPXl2pic1FaFTZaAACKqr85WT4o08iLjViMR9gmMkxzbZ3AgA==} + engines: {node: ^20.19 || ^22.20 || ^24.12 || >=25} + hasBin: true + peerDependencies: + '@ava/typescript': '*' + peerDependenciesMeta: + '@ava/typescript': + optional: true + + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + + aws-sign2@0.7.0: + resolution: {integrity: sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==} + + aws4@1.13.2: + resolution: {integrity: sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==} + + b4a@1.8.0: + resolution: {integrity: sha512-qRuSmNSkGQaHwNbM7J78Wwy+ghLEYF1zNrSeMxj4Kgw6y33O3mXcQ6Ie9fRvfU/YnxWkOchPXbaLb73TkIsfdg==} + peerDependencies: + react-native-b4a: '*' + peerDependenciesMeta: + react-native-b4a: + optional: true + + babel-code-frame@6.26.0: + resolution: {integrity: sha512-XqYMR2dfdGMW+hd0IUZ2PwK+fGeFkOxZJ0wY+JaQAHzt1Zx8LcvpiZD2NiGkEG8qx0CfkAOr5xt76d1e8vG90g==} + + babel-generator@6.11.4: + resolution: {integrity: sha512-JFBWXdE89s4V3E8kZroEEsnQF2A4/+55IzciGjnAATXj7HTMSum3SrW7QRYGSDLWTTQF+hhD3BmC2UFGgtM0Yw==} + + babel-generator@6.26.1: + resolution: {integrity: sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==} + + babel-messages@6.23.0: + resolution: {integrity: sha512-Bl3ZiA+LjqaMtNYopA9TYE9HP1tQ+E5dLxE0XrAzcIJeK2UqF0/EaqXwBn9esd4UmTfEab+P+UYQ1GnioFIb/w==} + + babel-runtime@6.26.0: + resolution: {integrity: sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==} + + babel-traverse@6.26.0: + resolution: {integrity: sha512-iSxeXx7apsjCHe9c7n8VtRXGzI2Bk1rBSOJgCCjfyXb6v1aCqE1KSEpq/8SXuVN8Ka/Rh1WDTF0MDzkvTA4MIA==} + + babel-types@6.26.0: + resolution: {integrity: sha512-zhe3V/26rCWsEZK8kZN+HaQj5yQ1CilTObixFzKW1UWjqG7618Twz6YEsCnjfg5gBcJh02DrpCkS9h98ZqDY+g==} + + babylon@6.18.0: + resolution: {integrity: sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==} + hasBin: true + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + balanced-match@4.0.4: + resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} + engines: {node: 18 || 20 || >=22} + + bare-events@2.8.2: + resolution: {integrity: sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==} + peerDependencies: + bare-abort-controller: '*' + peerDependenciesMeta: + bare-abort-controller: + optional: true + + bare-fs@4.5.6: + resolution: {integrity: sha512-1QovqDrR80Pmt5HPAsMsXTCFcDYr+NSUKW6nd6WO5v0JBmnItc/irNRzm2KOQ5oZ69P37y+AMujNyNtG+1Rggw==} + engines: {bare: '>=1.16.0'} + peerDependencies: + bare-buffer: '*' + peerDependenciesMeta: + bare-buffer: + optional: true + + bare-os@3.8.0: + resolution: {integrity: sha512-Dc9/SlwfxkXIGYhvMQNUtKaXCaGkZYGcd1vuNUUADVqzu4/vQfvnMkYYOUnt2VwQ2AqKr/8qAVFRtwETljgeFg==} + engines: {bare: '>=1.14.0'} + + bare-path@3.0.0: + resolution: {integrity: sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==} + + bare-stream@2.10.0: + resolution: {integrity: sha512-DOPZF/DDcDruKDA43cOw6e9Quq5daua7ygcAwJE/pKJsRWhgSSemi7qVNGE5kyDIxIeN1533G/zfbvWX7Wcb9w==} + peerDependencies: + bare-buffer: '*' + bare-events: '*' + peerDependenciesMeta: + bare-buffer: + optional: true + bare-events: + optional: true + + bare-url@2.4.0: + resolution: {integrity: sha512-NSTU5WN+fy/L0DDenfE8SXQna4voXuW0FHM7wH8i3/q9khUSchfPbPezO4zSFMnDGIf9YE+mt/RWhZgNRKRIXA==} + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + baseline-browser-mapping@2.10.9: + resolution: {integrity: sha512-OZd0e2mU11ClX8+IdXe3r0dbqMEznRiT4TfbhYIbcRPZkqJ7Qwer8ij3GZAmLsRKa+II9V1v5czCkvmHH3XZBg==} + engines: {node: '>=6.0.0'} + hasBin: true + + bcrypt-pbkdf@1.0.2: + resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==} + + bin-version-check@5.1.0: + resolution: {integrity: sha512-bYsvMqJ8yNGILLz1KP9zKLzQ6YpljV3ln1gqhuLkUtyfGi3qXKGuK2p+U4NAvjVFzDFiBBtOpCOSFNuYYEGZ5g==} + engines: {node: '>=12'} + + bin-version@6.0.0: + resolution: {integrity: sha512-nk5wEsP4RiKjG+vF+uG8lFsEn4d7Y6FVDamzzftSunXOoOcOOkzcWdKVlGgFFwlUQCj63SgnUkLLGF8v7lufhw==} + engines: {node: '>=12'} + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + bindings@1.5.0: + resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} + + blueimp-md5@2.19.0: + resolution: {integrity: sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w==} + + boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + + brace-expansion@1.1.12: + resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} + + brace-expansion@5.0.4: + resolution: {integrity: sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==} + engines: {node: 18 || 20 || >=22} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + browserslist@4.28.1: + resolution: {integrity: sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + buffer-crc32@0.2.13: + resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + + cacheable-lookup@7.0.0: + resolution: {integrity: sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==} + engines: {node: '>=14.16'} + + cacheable-request@10.2.14: + resolution: {integrity: sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==} + engines: {node: '>=14.16'} + + cacheable@2.3.4: + resolution: {integrity: sha512-djgxybDbw9fL/ZWMI3+CE8ZilNxcwFkVtDc1gJ+IlOSSWkSMPQabhV/XCHTQ6pwwN6aivXPZ43omTooZiX06Ew==} + + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} + + call-bind@1.0.8: + resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} + engines: {node: '>= 0.4'} + + call-bound@1.0.4: + resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} + engines: {node: '>= 0.4'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + callsites@4.2.0: + resolution: {integrity: sha512-kfzR4zzQtAE9PC7CzZsjl3aBNbXWuXiSeOCdLcPpBfGW8YuCqQHcRPFDbr/BPVmd3EEPVpuFzLyuT/cUhPr4OQ==} + engines: {node: '>=12.20'} + + caniuse-api@3.0.0: + resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} + + caniuse-lite@1.0.30001780: + resolution: {integrity: sha512-llngX0E7nQci5BPJDqoZSbuZ5Bcs9F5db7EtgfwBerX9XGtkkiO4NwfDDIRzHTTwcYC8vC7bmeUEPGrKlR/TkQ==} + + caseless@0.12.0: + resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} + + cbor@10.0.12: + resolution: {integrity: sha512-exQDevYd7ZQLP4moMQcZkKCVZsXLAtUSflObr3xTh4xzFIv/xBCdvCd6L259kQOUP2kcTC0jvC6PpZIf/WmRXA==} + engines: {node: '>=20'} + + chalk@1.1.3: + resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} + engines: {node: '>=0.10.0'} + + chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + + chalk@5.6.2: + resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + cheerio@0.20.0: + resolution: {integrity: sha512-e5jCTzJc28MWkrLLjB1mu3ks7rDQJLC5y/JMdQkOAEX/dmJk62rC6Xae1yvOO4xyCxLpzcth3jIZ7nypmjQ/0w==} + engines: {node: '>= 0.6'} + + cheerio@0.22.0: + resolution: {integrity: sha512-8/MzidM6G/TgRelkzDG13y3Y9LxBjCb+8yOEZ9+wwq5gVF2w2pV0wmHvjfT0RvuxGyR7UEuK36r+yYMbT4uKgA==} + engines: {node: '>= 0.6'} + + cheerio@1.0.0-rc.2: + resolution: {integrity: sha512-9LDHQy1jHc/eXMzPN6/oah9Qba4CjdKECC7YYEE/2zge/tsGwt19NQp5NFdfd5Lx6TZlyC5SXNQkG41P9r6XDg==} + engines: {node: '>= 0.6'} + + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + + chokidar@4.0.3: + resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} + engines: {node: '>= 14.16.0'} + + chownr@3.0.0: + resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} + engines: {node: '>=18'} + + chunkd@2.0.1: + resolution: {integrity: sha512-7d58XsFmOq0j6el67Ug9mHf9ELUXsQXYJBkyxhH/k+6Ke0qXRnv0kbemx+Twc6fRJ07C49lcbdgm9FL1Ei/6SQ==} + + ci-info@4.4.0: + resolution: {integrity: sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==} + engines: {node: '>=8'} + + ci-parallel-vars@1.0.1: + resolution: {integrity: sha512-uvzpYrpmidaoxvIQHM+rKSrigjOe9feHYbw4uOI2gdfe1C3xIlxO+kVXq83WQWNniTf8bAxVpy+cQeFQsMERKg==} + + cli-truncate@5.2.0: + resolution: {integrity: sha512-xRwvIOMGrfOAnM1JYtqQImuaNtDEv9v6oIYAs4LIHwTiKee8uwvIi363igssOC0O5U04i4AlENs79LQLu9tEMw==} + engines: {node: '>=20'} + + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + + cliui@9.0.1: + resolution: {integrity: sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==} + engines: {node: '>=20'} + + code-excerpt@4.0.0: + resolution: {integrity: sha512-xxodCmBen3iy2i0WtAK8FlFNrRzjUqjRsMfho58xT/wvZU1YTM3fCnRjcy1gJPMepaRlgm/0e6w8SpWHpn3/cA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-logger@0.0.3: + resolution: {integrity: sha512-s4oriek7VTdSmDbS5chJhNui3uUzlk/mU39V4HnOUv0KphRXpIj73lq4wY5f8l/x+WtHUhiV+FCzsrNO1w6REA==} + + color-logger@0.0.6: + resolution: {integrity: sha512-0iBj3eHRYnor8EJi3oQ1kixbr7B2Sbw1InxjsYZxS+q2H+Ii69m3ARYSJeYIqmf/QRtFhWnR1v97wp8N7ABubw==} + + color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + colord@2.9.3: + resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + commander@11.1.0: + resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==} + engines: {node: '>=16'} + + commander@12.1.0: + resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} + engines: {node: '>=18'} + + commander@6.2.1: + resolution: {integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==} + engines: {node: '>= 6'} + + common-path-prefix@3.0.0: + resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + concordance@5.0.4: + resolution: {integrity: sha512-OAcsnTEYu1ARJqWVGwf4zh4JDfHZEaSNlNccFmt8YjB2l/n19/PF2viLINHc57vO4FKIAFl2FWASIGZZWZ2Kxw==} + engines: {node: '>=10.18.0 <11 || >=12.14.0 <13 || >=14'} + + consola@3.4.2: + resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} + engines: {node: ^14.18.0 || >=16.10.0} + + content-disposition@0.5.4: + resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} + engines: {node: '>= 0.6'} + + convert-to-spaces@2.0.1: + resolution: {integrity: sha512-rcQ1bsQO9799wq24uE5AM2tAILy4gXGIK/njFWcVQkGNZ96edlpY+A7bjwvzjYvLDyzmG1MmMLZhpcsb+klNMQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + copy-file@11.1.0: + resolution: {integrity: sha512-X8XDzyvYaA6msMyAM575CUoygY5b44QzLcGRKsK3MFmXcOvQa518dNPLsKYwkYsn72g3EiW+LE0ytd/FlqWmyw==} + engines: {node: '>=18'} + + core-js@2.6.12: + resolution: {integrity: sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==} + deprecated: core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js. + + core-util-is@1.0.2: + resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} + + core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + + cosmiconfig@9.0.1: + resolution: {integrity: sha512-hr4ihw+DBqcvrsEDioRO31Z17x71pUYoNe/4h6Z0wB72p7MU7/9gH8Q3s12NFhHPfYBBOV3qyfUxmr/Yn3shnQ==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true + + cpy-cli@7.0.0: + resolution: {integrity: sha512-uGCdhIxGfZcPXidCuT8w1jBknVXFx0un7NLjzqBZcdnkIWtLUnWMPk5TC37ceoVjwASLSNsRtTXXNTuFIyE2ng==} + engines: {node: '>=20'} + hasBin: true + + cpy@13.2.1: + resolution: {integrity: sha512-/H2B3WW9gccZJKjKoDZsIrDU3MkkHlxgheT82hUbInC5fEdi4+54zyYpFueZT9pLfr5ObrtgN4MsYYrmTmHzeg==} + engines: {node: '>=20'} + + cross-spawn@6.0.6: + resolution: {integrity: sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==} + engines: {node: '>=4.8'} + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + css-blank-pseudo@8.0.1: + resolution: {integrity: sha512-C5B2e5hCM4llrQkUms+KnWEMVW8K1n2XvX9G7ppfMZJQ7KAS/4rNnkP1Cs+HhWriOz1mWWTMFD4j1J7s31Dgug==} + engines: {node: '>=20.19.0'} + peerDependencies: + postcss: ^8.4 + + css-declaration-sorter@7.3.1: + resolution: {integrity: sha512-gz6x+KkgNCjxq3Var03pRYLhyNfwhkKF1g/yoLgDNtFvVu0/fOLV9C8fFEZRjACp/XQLumjAYo7JVjzH3wLbxA==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.0.9 + + css-functions-list@3.3.3: + resolution: {integrity: sha512-8HFEBPKhOpJPEPu70wJJetjKta86Gw9+CCyCnB3sui2qQfOvRyqBy4IKLKKAwdMpWb2lHXWk9Wb4Z6AmaUT1Pg==} + engines: {node: '>=12'} + + css-has-pseudo@8.0.0: + resolution: {integrity: sha512-Uz/bsHRbOeir/5Oeuz85tq/yLJLxX+3dpoRdjNTshs6jjqwUg8XaEZGDd0ci3fw7l53Srw0EkJ8mYan0eW5uGQ==} + engines: {node: '>=20.19.0'} + peerDependencies: + postcss: ^8.4 + + css-prefers-color-scheme@11.0.0: + resolution: {integrity: sha512-fv0mgtwUhh2m9iio3Kxc2CkrogjIaRdMFaaqyzSFdii17JF4cfPyMNX72B15ZW2Nrr/NZUpxI4dec1VMHYJvdw==} + engines: {node: '>=20.19.0'} + peerDependencies: + postcss: ^8.4 + + css-select@1.2.0: + resolution: {integrity: sha512-dUQOBoqdR7QwV90WysXPLXG5LO7nhYBgiWVfxF80DKPF8zx1t/pUd2FYy73emg3zrjtM6dzmYgbHKfV2rxiHQA==} + + css-select@5.2.2: + resolution: {integrity: sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==} + + css-tree@2.2.1: + resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + + css-tree@3.2.1: + resolution: {integrity: sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + + css-what@2.1.3: + resolution: {integrity: sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==} + + css-what@6.2.2: + resolution: {integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==} + engines: {node: '>= 6'} + + cssdb@8.8.0: + resolution: {integrity: sha512-QbLeyz2Bgso1iRlh7IpWk6OKa3lLNGXsujVjDMPl9rOZpxKeiG69icLpbLCFxeURwmcdIfZqQyhlooKJYM4f8Q==} + + cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + + cssnano-preset-default@7.0.11: + resolution: {integrity: sha512-waWlAMuCakP7//UCY+JPrQS1z0OSLeOXk2sKWJximKWGupVxre50bzPlvpbUwZIDylhf/ptf0Pk+Yf7C+hoa3g==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + cssnano-utils@5.0.1: + resolution: {integrity: sha512-ZIP71eQgG9JwjVZsTPSqhc6GHgEr53uJ7tK5///VfyWj6Xp2DBmixWHqJgPno+PqATzn48pL42ww9x5SSGmhZg==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + cssnano@7.1.3: + resolution: {integrity: sha512-mLFHQAzyapMVFLiJIn7Ef4C2UCEvtlTlbyILR6B5ZsUAV3D/Pa761R5uC1YPhyBkRd3eqaDm2ncaNrD7R4mTRg==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + csso@5.0.5: + resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + + cssom@0.3.8: + resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==} + + cssstyle@0.2.37: + resolution: {integrity: sha512-FUpKc+1FNBsHUr9IsfSGCovr8VuGOiiuzlgCyppKBjJi2jYTOFLN3oiiNRMIvYqbFzF38mqKj4BgcevzU5/kIA==} + + currently-unhandled@0.4.1: + resolution: {integrity: sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==} + engines: {node: '>=0.10.0'} + + dashdash@1.14.1: + resolution: {integrity: sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==} + engines: {node: '>=0.10'} + + dat.gui@0.7.9: + resolution: {integrity: sha512-sCNc1OHobc+Erc1HqiswYgHdVNpSJUlk/Hz8vzOCsER7rl+oF/4+v8GXFUyCgtXpoCX6+bnmg07DedLvBLwYKQ==} + + data-view-buffer@1.0.2: + resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} + engines: {node: '>= 0.4'} + + data-view-byte-length@1.0.2: + resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} + engines: {node: '>= 0.4'} + + data-view-byte-offset@1.0.1: + resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} + engines: {node: '>= 0.4'} + + date-time@3.1.0: + resolution: {integrity: sha512-uqCUKXE5q1PNBXjPqvwhwJf9SwMoAHBgWJ6DcrnS5o+W2JOiIILl0JEdVD8SGujrNS02GGxgwAg2PN2zONgtjg==} + engines: {node: '>=6'} + + debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decompress-response@6.0.0: + resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} + engines: {node: '>=10'} + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + defaults@2.0.2: + resolution: {integrity: sha512-cuIw0PImdp76AOfgkjbW4VhQODRmNNcKR73vdCH5cLd/ifj7aamfoXvYgfGkEAjNJZ3ozMIy9Gu2LutUkGEPbA==} + engines: {node: '>=16'} + + defer-to-connect@2.0.1: + resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} + engines: {node: '>=10'} + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + + del-cli@7.0.0: + resolution: {integrity: sha512-fRl4pWJYu9WFQH8jXdQUYvcD0IMtij9WEc7qmB7xOyJEweNJNuE7iKmqNeoOT1DbBUjtRjxlw8Y63qKBI/NQ1g==} + engines: {node: '>=18'} + hasBin: true + + del@8.0.1: + resolution: {integrity: sha512-gPqh0mKTPvaUZGAuHbrBUYKZWBNAeHG7TU3QH5EhVwPMyKvmfJaNXhcD2jTcXsJRRcffuho4vaYweu80dRrMGA==} + engines: {node: '>=18'} + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + dependency-graph@1.0.0: + resolution: {integrity: sha512-cW3gggJ28HZ/LExwxP2B++aiKxhJXMSIt9K48FOXQkm+vuG5gyatXnLsONRJdzO/7VfjDIiaOOa/bs4l464Lwg==} + engines: {node: '>=4'} + + detect-indent@3.0.1: + resolution: {integrity: sha512-xo3WP66SNbr1Eim85s/qyH0ZL8PQUwp86HWm0S1l8WnJ/zjT6T3w1nwNA0yOZeuvOemupEYvpvF6BIdYRuERJQ==} + engines: {node: '>=0.10.0'} + hasBin: true + + detect-indent@4.0.0: + resolution: {integrity: sha512-BDKtmHlOzwI7iRuEkhzsnPoi5ypEhWAJB5RvHWe1kMr06js3uK5B3734i3ui5Yd+wOJV1cpE4JnivPD283GU/A==} + engines: {node: '>=0.10.0'} + + detect-libc@2.1.2: + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} + engines: {node: '>=8'} + + dom-serializer@0.1.1: + resolution: {integrity: sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==} + + dom-serializer@2.0.0: + resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} + + domelementtype@1.3.1: + resolution: {integrity: sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==} + + domelementtype@2.3.0: + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + + domhandler@2.3.0: + resolution: {integrity: sha512-q9bUwjfp7Eif8jWxxxPSykdRZAb6GkguBGSgvvCrhI9wB71W2K/Kvv4E61CF/mcCfnVJDeDWx/Vb/uAqbDj6UQ==} + + domhandler@2.4.2: + resolution: {integrity: sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==} + + domhandler@5.0.3: + resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} + engines: {node: '>= 4'} + + domutils@1.5.1: + resolution: {integrity: sha512-gSu5Oi/I+3wDENBsOWBiRK1eoGxcywYSqg3rR960/+EfY0CF4EX1VPkgHOZ3WiS/Jg2DtliF6BhWcHlfpYUcGw==} + + domutils@1.7.0: + resolution: {integrity: sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==} + + domutils@3.2.2: + resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} + + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + + duplex-maker@1.0.0: + resolution: {integrity: sha512-KoHuzggxg7f+vvjqOHfXxaQYI1POzBm+ah0eec7YDssZmbt6QFBI8d1nl5GQwAgR2f+VQCPvyvZtmWWqWuFtlA==} + + duplexify@3.7.1: + resolution: {integrity: sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==} + + ecc-jsbn@0.1.2: + resolution: {integrity: sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==} + + electron-to-chromium@1.5.321: + resolution: {integrity: sha512-L2C7Q279W2D/J4PLZLk7sebOILDSWos7bMsMNN06rK482umHUrh/3lM8G7IlHFOYip2oAg5nha1rCMxr/rs6ZQ==} + + emittery@1.2.1: + resolution: {integrity: sha512-sFz64DCRjirhwHLxofFqxYQm6DCp6o0Ix7jwKQvuCHPn4GMRZNuBZyLPu9Ccmk/QSCAMZt6FOUqA8JZCQvA9fw==} + engines: {node: '>=14.16'} + + emoji-regex@10.6.0: + resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + end-of-stream@1.4.5: + resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==} + + entities@1.0.0: + resolution: {integrity: sha512-LbLqfXgJMmy81t+7c14mnulFHJ170cM6E+0vMXR9k/ZiZwgX8i5pNgjTCX3SO4VeUsFLV+8InixoretwU+MjBQ==} + + entities@1.1.2: + resolution: {integrity: sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==} + + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + + env-paths@2.2.1: + resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} + engines: {node: '>=6'} + + error-ex@1.3.4: + resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} + + es-abstract@1.24.1: + resolution: {integrity: sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw==} + engines: {node: '>= 0.4'} + + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-object-atoms@1.1.1: + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} + engines: {node: '>= 0.4'} + + es-to-primitive@1.3.0: + resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} + engines: {node: '>= 0.4'} + + esbuild-plugin-glsl@1.4.1: + resolution: {integrity: sha512-rpL7wD0tv4puwlg4InVwhYZhHNBxrSlawiXYER0p/nSilcRmcGs9RDR+LvklHHPTCWcFsWHEKCxN3NNw5ZIFQw==} + engines: {node: '>= 18'} + peerDependencies: + esbuild: 0.x.x + + esbuild@0.27.4: + resolution: {integrity: sha512-Rq4vbHnYkK5fws5NF7MYTU68FPRE1ajX7heQ/8QXXWqNgqqJ/GkmmyxIzUnf2Sr/bakf8l54716CcMGHYhMrrQ==} + engines: {node: '>=18'} + hasBin: true + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + + escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + + escape-string-regexp@2.0.0: + resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} + engines: {node: '>=8'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + escape-string-regexp@5.0.0: + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} + + escodegen@1.14.3: + resolution: {integrity: sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==} + engines: {node: '>=4.0'} + hasBin: true + + esdoc-accessor-plugin@1.0.0: + resolution: {integrity: sha512-s9mNmdHGOyQOaOUXNHPz38Y8clm6dR8/fa9DPGzuRYmIN+Lv0NVnpPAcHb5XrfC23/Mz3IUwD8h798f5Ai4rbA==} + engines: {node: '>= 6.0.0'} + + esdoc-brand-plugin@1.0.1: + resolution: {integrity: sha512-Yv9j3M7qk5PSLmSeD6MbPsfIsEf8K43EdH8qZpE/GZwnJCRVmDPrZJ1cLDj/fPu6P35YqgcEaJK4E2NL/CKA7g==} + engines: {node: '>= 6.0.0'} + + esdoc-coverage-plugin@1.1.0: + resolution: {integrity: sha512-M+94/Y+eoM08V3teiJIYpJ5HF13jH4cC9LQZrjmA91mlAqCHtNzelHF9ZdWofoOFYFRNpllFsXTFsJgwVa000A==} + engines: {node: '>= 6.0.0'} + + esdoc-external-ecmascript-plugin@1.0.0: + resolution: {integrity: sha512-ASj7lhfZpzI01xd4XqB4HN+zNKwnhdaN/OIp/CTnUiLIErMOeUqzV9z/dcnUUeDY3NSwPCH1pUNATVwznspmHw==} + engines: {node: '>= 6.0.0'} + + esdoc-importpath-plugin@1.0.2: + resolution: {integrity: sha512-o9/EIk8YyufjzDBrTZu7/6he2No515b51Nnd8QGzXvdTM+rekQjZ7wxVjcqTUQ68bbYLFKqaxZBNltYUbD5aUQ==} + engines: {node: '>= 6.0.0'} + + esdoc-integrate-manual-plugin@1.0.0: + resolution: {integrity: sha512-+XcW8xRtuFVFadoVLIOj6kzX4uqtAEB5UoR7AA5g46StxLghZZ6RLrRQSERUTIc3VX9v47lOMKEaQvQfanv3+A==} + engines: {node: '>= 6.0.0'} + + esdoc-integrate-test-plugin@1.0.0: + resolution: {integrity: sha512-WRbkbnbWnzF4RdmcoJLYZvhod7jLVUYWU2ZAojYjK+GiqSgy2yjGi7PxckeGF0LtpCuqqKat3PRdUNEMo6Nf3A==} + engines: {node: '>= 6.0.0'} + + esdoc-lint-plugin@1.0.2: + resolution: {integrity: sha512-24AYqD2WbZI9We02I7/6dzAa7yUliRTFUaJCZAcYJMQicJT5gUrNFVaI8XmWEN/mhF3szIn1uZBNWeLul4CmNw==} + engines: {node: '>= 6.0.0'} + + esdoc-publish-html-plugin@1.1.2: + resolution: {integrity: sha512-hG1fZmTcEp3P/Hv/qKiMdG1qSp8MjnVZMMkxL5P5ry7I2sX0HQ4P9lt2lms+90Lt0r340HHhSuVx107UL7dphg==} + engines: {node: '>= 6.0.0'} + + esdoc-standard-plugin@1.0.0: + resolution: {integrity: sha512-IDEG9NV/MF5Bi2TdKPqQ3GHfDkgqYhk2iyvBNX+XcNKYmXm9zxtXVS459WAmiTZuYpDLtDGbulQdJ1t4ud57mw==} + engines: {node: '>= 6.0.0'} + + esdoc-type-inference-plugin@1.0.2: + resolution: {integrity: sha512-tMIcEHNe1uhUGA7lT1UTWc9hs2dzthnTgmqXpmeUhurk7fL2tinvoH+IVvG/sLROzwOGZQS9zW/F9KWnpMzLIQ==} + engines: {node: '>= 6.0.0'} + + esdoc-undocumented-identifier-plugin@1.0.0: + resolution: {integrity: sha512-T0hQc0ec1+pUJPDBoJ2SxEv7uX9VD7Q9+7UAGnDZ5R2l2JYa3WY7cawyqfbMHVtLgvqH0eMBpxdfRsQvAWzj4Q==} + engines: {node: '>= 6.0.0'} + + esdoc-unexported-identifier-plugin@1.0.0: + resolution: {integrity: sha512-PRdMLWHWdy9PwxzYDG2clhta9H7yHDpGCBIHxSw9R7TFK6ZYuPK1fUbURIzIxcdQhzt1PX9Cn6Cak2824K0+Ng==} + engines: {node: '>= 6.0.0'} + + esdoc@1.1.0: + resolution: {integrity: sha512-vsUcp52XJkOWg9m1vDYplGZN2iDzvmjDL5M/Mp8qkoDG3p2s0yIQCIjKR5wfPBaM3eV14a6zhQNYiNTCVzPnxA==} + engines: {node: '>= 6.0.0'} + hasBin: true + + eslint-config-aether@3.0.0: + resolution: {integrity: sha512-cx70AXSeFBrjZTlyQiaIIVzeQq8lSfYrT814uJzO8Prq5DkhYT1X95qHA3O/RAUAXkU5izli+V3wno2HLgrVVQ==} + peerDependencies: + eslint: 10.x.x + + eslint-scope@9.1.2: + resolution: {integrity: sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@4.2.1: + resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint-visitor-keys@5.0.1: + resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + eslint@10.1.0: + resolution: {integrity: sha512-S9jlY/ELKEUwwQnqWDO+f+m6sercqOPSqXM5Go94l7DOmxHVDgmSFGWEzeE/gwgTAr0W103BWt0QLe/7mabIvA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true + + espree@10.4.0: + resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + espree@11.2.0: + resolution: {integrity: sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + + esquery@1.7.0: + resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + events-universal@1.0.1: + resolution: {integrity: sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==} + + execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + + ext-list@2.2.2: + resolution: {integrity: sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==} + engines: {node: '>=0.10.0'} + + ext-name@5.0.0: + resolution: {integrity: sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==} + engines: {node: '>=4'} + + extend@3.0.2: + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + + extsprintf@1.3.0: + resolution: {integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==} + engines: {'0': node >=0.6.0} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-diff@1.3.0: + resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} + + fast-fifo@1.3.2: + resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} + + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + engines: {node: '>=8.6.0'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fast-uri@3.1.0: + resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} + + fastest-levenshtein@1.0.16: + resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} + engines: {node: '>= 4.9.1'} + + fastq@1.20.1: + resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} + + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + fflate@0.8.2: + resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==} + + figures@6.1.0: + resolution: {integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==} + engines: {node: '>=18'} + + file-entry-cache@11.1.2: + resolution: {integrity: sha512-N2WFfK12gmrK1c1GXOqiAJ1tc5YE+R53zvQ+t5P8S5XhnmKYVB5eZEiLNZKDSmoG8wqqbF9EXYBBW/nef19log==} + + file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} + + file-type@20.5.0: + resolution: {integrity: sha512-BfHZtG/l9iMm4Ecianu7P8HRD2tBHLtjXinm4X62XBOYzi7CYA7jyqfJzOvXHqzVrVPYqBo2/GvbARMaaJkKVg==} + engines: {node: '>=18'} + + file-uri-to-path@1.0.0: + resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} + + filename-reserved-regex@3.0.0: + resolution: {integrity: sha512-hn4cQfU6GOT/7cFHXBqeBg2TbrMBgdD0kcjLhvSQYYwm3s4B6cjvBfb7nBALJLAXqmU5xajSa7X2NnUud/VCdw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + filenamify@6.0.0: + resolution: {integrity: sha512-vqIlNogKeyD3yzrm0yhRMQg8hOVwYcYRfjEoODd49iCprMn4HL85gK3HcykQE53EPIpX3HcAbGA5ELQv216dAQ==} + engines: {node: '>=16'} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-up-simple@1.0.1: + resolution: {integrity: sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==} + engines: {node: '>=18'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + find-versions@5.1.0: + resolution: {integrity: sha512-+iwzCJ7C5v5KgcBuueqVoNiHVoQpwiUK5XFLjf0affFTep+Wcw93tPvmb8tqujDNmzhBDPddnWV/qgWSXgq+Hg==} + engines: {node: '>=12'} + + flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} + + flat-cache@6.1.21: + resolution: {integrity: sha512-2u7cJfSf7Th7NxEk/VzQjnPoglok2YCsevS7TSbJjcDQWJPbqUUnSYtriHSvtnq+fRZHy1s0ugk4ApnQyhPGoQ==} + + flatted@3.4.2: + resolution: {integrity: sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==} + + for-each@0.3.5: + resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} + engines: {node: '>= 0.4'} + + forever-agent@0.6.1: + resolution: {integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==} + + form-data-encoder@2.1.4: + resolution: {integrity: sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==} + engines: {node: '>= 14.17'} + + form-data@2.3.3: + resolution: {integrity: sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==} + engines: {node: '>= 0.12'} + + fraction.js@5.3.4: + resolution: {integrity: sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==} + + fs-extra@1.0.0: + resolution: {integrity: sha512-VerQV6vEKuhDWD2HGOybV6v5I73syoc/cXAbKlgTC7M/oFVEtklWlp9QH2Ijw3IaWDOQcMkldSPa7zXy79Z/UQ==} + + fs-extra@11.3.4: + resolution: {integrity: sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA==} + engines: {node: '>=14.14'} + + fs-extra@5.0.0: + resolution: {integrity: sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + function.prototype.name@1.1.8: + resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} + engines: {node: '>= 0.4'} + + functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + + generator-function@2.0.1: + resolution: {integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==} + engines: {node: '>= 0.4'} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-east-asian-width@1.5.0: + resolution: {integrity: sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==} + engines: {node: '>=18'} + + get-intrinsic@1.3.0: + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} + engines: {node: '>= 0.4'} + + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + + get-stdin@4.0.1: + resolution: {integrity: sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw==} + engines: {node: '>=0.10.0'} + + get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + + get-symbol-description@1.1.0: + resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} + engines: {node: '>= 0.4'} + + getpass@0.1.7: + resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + glob@13.0.6: + resolution: {integrity: sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==} + engines: {node: 18 || 20 || >=22} + + global-modules@2.0.0: + resolution: {integrity: sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==} + engines: {node: '>=6'} + + global-prefix@3.0.0: + resolution: {integrity: sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==} + engines: {node: '>=6'} + + globals@17.4.0: + resolution: {integrity: sha512-hjrNztw/VajQwOLsMNT1cbJiH2muO3OROCHnbehc8eY5JyD2gqz4AcMHPqgaOR59DjgUjYAYLeH699g/eWi2jw==} + engines: {node: '>=18'} + + globals@9.18.0: + resolution: {integrity: sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==} + engines: {node: '>=0.10.0'} + + globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} + engines: {node: '>= 0.4'} + + globalyzer@0.1.0: + resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==} + + globby@14.1.0: + resolution: {integrity: sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==} + engines: {node: '>=18'} + + globby@16.1.1: + resolution: {integrity: sha512-dW7vl+yiAJSp6aCekaVnVJxurRv7DCOLyXqEG3RYMYUg7AuJ2jCqPkZTA8ooqC2vtnkaMcV5WfFBMuEnTu1OQg==} + engines: {node: '>=20'} + + globjoin@0.1.4: + resolution: {integrity: sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==} + + globrex@0.1.2: + resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} + + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + + got@13.0.0: + resolution: {integrity: sha512-XfBk1CxOOScDcMr9O1yKkNaQyy865NbYs+F7dr4H0LZMVgCj2Le59k6PqbNHoL5ToeaEQUYh6c6yMfVcc6SJxA==} + engines: {node: '>=16'} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + gzipper@8.2.1: + resolution: {integrity: sha512-Vp2vDpwU4xKtWxTaLPfNTR4euqHJamB6aKCfSEbSd/CrgqihwNxrjihJcWJG1+3Ku1ROsfF6fPXRoytTFLhFlw==} + engines: {node: '>=20.11.0'} + hasBin: true + + har-schema@2.0.0: + resolution: {integrity: sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==} + engines: {node: '>=4'} + + har-validator@5.1.5: + resolution: {integrity: sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==} + engines: {node: '>=6'} + deprecated: this library is no longer supported + + has-ansi@2.0.0: + resolution: {integrity: sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==} + engines: {node: '>=0.10.0'} + + has-bigints@1.1.0: + resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} + engines: {node: '>= 0.4'} + + has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + + has-flag@5.0.1: + resolution: {integrity: sha512-CsNUt5x9LUdx6hnk/E2SZLsDyvfqANZSUq4+D3D8RzDJ2M+HDTIkF60ibS1vHaK55vzgiZw1bEPFG9yH7l33wA==} + engines: {node: '>=12'} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-proto@1.2.0: + resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} + engines: {node: '>= 0.4'} + + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hashery@1.5.0: + resolution: {integrity: sha512-nhQ6ExaOIqti2FDWoEMWARUqIKyjr2VcZzXShrI+A3zpeiuPWzx6iPftt44LhP74E5sW36B75N6VHbvRtpvO6Q==} + engines: {node: '>=20'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + hookified@1.15.1: + resolution: {integrity: sha512-MvG/clsADq1GPM2KGo2nyfaWVyn9naPiXrqIe4jYjXNZQt238kWyOGrsyc/DmRAQ+Re6yeo6yX/yoNCG5KAEVg==} + + hookified@2.1.0: + resolution: {integrity: sha512-ootKng4eaxNxa7rx6FJv2YKef3DuhqbEj3l70oGXwddPQEEnISm50TEZQclqiLTAtilT2nu7TErtCO523hHkyg==} + + hosted-git-info@2.8.9: + resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} + + html-tags@5.1.0: + resolution: {integrity: sha512-n6l5uca7/y5joxZ3LUePhzmBFUJ+U2YWzhMa8XUTecSeSlQiZdF5XAd/Q3/WUl0VsXgUwWi8I7CNIwdI5WN1SQ==} + engines: {node: '>=20.10'} + + htmlparser2@3.10.1: + resolution: {integrity: sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==} + + htmlparser2@3.8.3: + resolution: {integrity: sha512-hBxEg3CYXe+rPIua8ETe7tmG3XDn9B0edOE/e9wH2nLczxzgdu0m0aNHY+5wFZiviLWLdANPJTssa92dMcXQ5Q==} + + http-cache-semantics@4.2.0: + resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==} + + http-signature@1.2.0: + resolution: {integrity: sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==} + engines: {node: '>=0.8', npm: '>=1.3.7'} + + http2-wrapper@2.2.1: + resolution: {integrity: sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==} + engines: {node: '>=10.19.0'} + + https-proxy-agent@7.0.6: + resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} + engines: {node: '>= 14'} + + hugo-bin@0.149.2: + resolution: {integrity: sha512-juLVVFGyGP0j817ND9OCNLSO/wV9CrfSbHBmXMInQR1NnL8OTGdJYnXbrDx14Uyz06Z7PUtL3bobNcFhNVynpg==} + engines: {node: '>=18'} + hasBin: true + + human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + + ice-cap@0.0.4: + resolution: {integrity: sha512-39ZblYEKlqj7LHgLkUcVk7zcJp772lOVQAUhN6QyY88w8/4bn5SgDeU2020yzHosf+uKPuCFK1UQ36gyBNiraw==} + + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + ignore-by-default@2.1.0: + resolution: {integrity: sha512-yiWd4GVmJp0Q6ghmM2B/V3oZGRmjrKLXvHR3TE1nfoXsmoggllfZUQe74EN0fJdPFZu2NIvNdrMMLm3OsV7Ohw==} + engines: {node: '>=10 <11 || >=12 <13 || >=14'} + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + ignore@7.0.5: + resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} + engines: {node: '>= 4'} + + immutable@5.1.5: + resolution: {integrity: sha512-t7xcm2siw+hlUM68I+UEOK+z84RzmN59as9DZ7P1l0994DKUWV7UXBMQZVxaoMSRQ+PBZbHCOoBt7a2wxOMt+A==} + + import-fresh@3.3.1: + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} + engines: {node: '>=6'} + + import-meta-resolve@4.2.0: + resolution: {integrity: sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==} + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + indent-string@5.0.0: + resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==} + engines: {node: '>=12'} + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + ini@1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + + inspect-with-kind@1.0.5: + resolution: {integrity: sha512-MAQUJuIo7Xqk8EVNP+6d3CKq9c80hi4tjIbIAT6lmGW9W6WzlHiu9PS8uSuUYU+Do+j1baiFp3H25XEVxDIG2g==} + + internal-slot@1.1.0: + resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} + engines: {node: '>= 0.4'} + + invariant@2.2.4: + resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} + + irregular-plurals@4.2.0: + resolution: {integrity: sha512-bW9UXHL7bnUcNtTo+9ccSngbxc+V40H32IgvdVin0Xs8gbo+AVYD5g/72ce/54Kjfhq66vcZr8H8TKEvsifeOw==} + engines: {node: '>=18.20'} + + is-array-buffer@3.0.5: + resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} + engines: {node: '>= 0.4'} + + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + + is-async-function@2.1.1: + resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} + engines: {node: '>= 0.4'} + + is-bigint@1.1.0: + resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} + engines: {node: '>= 0.4'} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-boolean-object@1.2.2: + resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} + engines: {node: '>= 0.4'} + + is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + + is-core-module@2.16.1: + resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} + engines: {node: '>= 0.4'} + + is-data-view@1.0.2: + resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} + engines: {node: '>= 0.4'} + + is-date-object@1.1.0: + resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} + engines: {node: '>= 0.4'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-finalizationregistry@1.1.1: + resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} + engines: {node: '>= 0.4'} + + is-finite@1.1.0: + resolution: {integrity: sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-fullwidth-code-point@5.1.0: + resolution: {integrity: sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==} + engines: {node: '>=18'} + + is-generator-function@1.1.2: + resolution: {integrity: sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==} + engines: {node: '>= 0.4'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-map@2.0.3: + resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} + engines: {node: '>= 0.4'} + + is-negative-zero@2.0.3: + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} + engines: {node: '>= 0.4'} + + is-number-object@1.1.1: + resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} + engines: {node: '>= 0.4'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-path-cwd@3.0.0: + resolution: {integrity: sha512-kyiNFFLU0Ampr6SDZitD/DwUo4Zs1nSdnygUBqsu3LooL00Qvb5j+UnvApUn/TTj1J3OuE6BTdQ5rudKmU2ZaA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + is-path-inside@4.0.0: + resolution: {integrity: sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==} + engines: {node: '>=12'} + + is-plain-obj@1.1.0: + resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} + engines: {node: '>=0.10.0'} + + is-plain-object@5.0.0: + resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} + engines: {node: '>=0.10.0'} + + is-promise@4.0.0: + resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} + + is-regex@1.2.1: + resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} + engines: {node: '>= 0.4'} + + is-set@2.0.3: + resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} + engines: {node: '>= 0.4'} + + is-shared-array-buffer@1.0.4: + resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} + engines: {node: '>= 0.4'} + + is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + + is-string@1.1.1: + resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} + engines: {node: '>= 0.4'} + + is-symbol@1.1.1: + resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} + engines: {node: '>= 0.4'} + + is-typed-array@1.1.15: + resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} + engines: {node: '>= 0.4'} + + is-typedarray@1.0.0: + resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} + + is-unicode-supported@2.1.0: + resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==} + engines: {node: '>=18'} + + is-weakmap@2.0.2: + resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} + engines: {node: '>= 0.4'} + + is-weakref@1.1.1: + resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==} + engines: {node: '>= 0.4'} + + is-weakset@2.0.4: + resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} + engines: {node: '>= 0.4'} + + is-zst@1.0.0: + resolution: {integrity: sha512-ZA5lvshKAl8z30dX7saXLpVhpsq3d2EHK9uf7qtUjnOtdw4XBpAoWb2RvZ5kyoaebdoidnGI0g2hn9Z7ObPbww==} + + isarray@0.0.1: + resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==} + + isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + + isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + isstream@0.1.2: + resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==} + + js-string-escape@1.0.1: + resolution: {integrity: sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg==} + engines: {node: '>= 0.8'} + + js-tokens@3.0.2: + resolution: {integrity: sha512-RjTcuD4xjtthQkaWH7dFlH85L+QaVtSoOyGdZ3g6HFhS9dFNDfLyqgm2NFe2X6cQpeFmt0452FJjFG5UameExg==} + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@3.14.2: + resolution: {integrity: sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==} + hasBin: true + + js-yaml@4.1.1: + resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} + hasBin: true + + jsbn@0.1.1: + resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==} + + jsdom@7.2.2: + resolution: {integrity: sha512-kYeYuos/pYp0V/V8VAoGnUc0va0UZjTjwCsldBFZNBrOi9Q5kUXrvsw6W5/lQllB7hKXBARC4HRk1Sfk4dPFtA==} + + jsesc@1.3.0: + resolution: {integrity: sha512-Mke0DA0QjUWuJlhsE0ZPPhYiJkRap642SmI/4ztCFaUs6V2AiH1sfecc+57NgaryfAA2VR3v6O+CSjC1jZJKOA==} + hasBin: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-parse-better-errors@1.0.2: + resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} + + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + + json-schema@0.4.0: + resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + json-stringify-safe@5.0.1: + resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + + jsonfile@2.4.0: + resolution: {integrity: sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==} + + jsonfile@4.0.0: + resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} + + jsonfile@6.2.0: + resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==} + + jsprim@1.4.2: + resolution: {integrity: sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==} + engines: {node: '>=0.6.0'} + + junk@4.0.1: + resolution: {integrity: sha512-Qush0uP+G8ZScpGMZvHUiRfI0YBWuB3gVBYlI0v0vvOJt5FLicco+IkP0a50LqTTQhmts/m6tP5SWE+USyIvcQ==} + engines: {node: '>=12.20'} + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + keyv@5.6.0: + resolution: {integrity: sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw==} + + kind-of@6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + + klaw@1.3.1: + resolution: {integrity: sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==} + + known-css-properties@0.37.0: + resolution: {integrity: sha512-JCDrsP4Z1Sb9JwG0aJ8Eo2r7k4Ou5MwmThS/6lcIe1ICyb7UBJKGRIUUdqc2ASdE/42lgz6zFUnzAIhtXnBVrQ==} + + levn@0.3.0: + resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==} + engines: {node: '>= 0.8.0'} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + lilconfig@3.1.3: + resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} + engines: {node: '>=14'} + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + load-json-file@4.0.0: + resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==} + engines: {node: '>=4'} + + load-json-file@7.0.1: + resolution: {integrity: sha512-Gnxj3ev3mB5TkVBGad0JM6dmLiQL+o0t23JPBZ9sd+yvSLk05mFoqKBw5N8gbbkU4TNXyqCgIrl/VM17OgUIgQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lodash.assignin@4.2.0: + resolution: {integrity: sha512-yX/rx6d/UTVh7sSVWVSIMjfnz95evAgDFdb1ZozC35I9mSFCkmzptOzevxjgbQUsc78NR44LVHWjsoMQXy9FDg==} + + lodash.bind@4.2.1: + resolution: {integrity: sha512-lxdsn7xxlCymgLYo1gGvVrfHmkjDiyqVv62FAeF2i5ta72BipE1SLxw8hPEPLhD4/247Ijw07UQH7Hq/chT5LA==} + + lodash.defaults@4.2.0: + resolution: {integrity: sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==} + + lodash.filter@4.6.0: + resolution: {integrity: sha512-pXYUy7PR8BCLwX5mgJ/aNtyOvuJTdZAo9EQFUvMIYugqmJxnrYaANvTbgndOzHSCSR0wnlBBfRXJL5SbWxo3FQ==} + + lodash.flatten@4.4.0: + resolution: {integrity: sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==} + + lodash.foreach@4.5.0: + resolution: {integrity: sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ==} + + lodash.map@4.6.0: + resolution: {integrity: sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q==} + + lodash.memoize@4.1.2: + resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + lodash.pick@4.4.0: + resolution: {integrity: sha512-hXt6Ul/5yWjfklSGvLQl8vM//l3FtyHZeuelpzK6mm99pNvN9yTDruNZPEJZD1oWrqo+izBmB7oUfWgcCX7s4Q==} + deprecated: This package is deprecated. Use destructuring assignment syntax instead. + + lodash.reduce@4.6.0: + resolution: {integrity: sha512-6raRe2vxCYBhpBu+B+TtNGUzah+hQjVdu3E17wfusjyrXBka2nBS8OH/gjVZ5PvHOhWmIZTYri09Z6n/QfnNMw==} + + lodash.reject@4.6.0: + resolution: {integrity: sha512-qkTuvgEzYdyhiJBx42YPzPo71R1aEr0z79kAv7Ixg8wPFEjgRgJdUsGMG3Hf3OYSF/kHI79XhNlt+5Ar6OzwxQ==} + + lodash.some@4.6.0: + resolution: {integrity: sha512-j7MJE+TuT51q9ggt4fSgVqro163BEFjAt3u97IqU+JA2DkWl80nFTrowzLpZ/BnpN7rrl0JA/593NAdd8p/scQ==} + + lodash.truncate@4.4.2: + resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==} + + lodash.uniq@4.5.0: + resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} + + lodash@4.17.23: + resolution: {integrity: sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==} + + loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + + lowercase-keys@3.0.0: + resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + lru-cache@11.2.7: + resolution: {integrity: sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==} + engines: {node: 20 || >=22} + + marked@0.3.19: + resolution: {integrity: sha512-ea2eGWOqNxPcXv8dyERdSr/6FmzvWwzjMxpfGB/sbMccXoct+xY+YukPD+QTUZwyvK7BZwcr4m21WBOW41pAkg==} + engines: {node: '>=0.10.0'} + hasBin: true + + matcher@6.0.0: + resolution: {integrity: sha512-TzDerdcNtI79w7Av4GT57bLdElPA/VAkjqdMZv8yhuc8geU2z0ljW9anXbX/55aHEMTpYypZb1lxsA/46r9oOQ==} + engines: {node: '>=20'} + + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + + mathml-tag-names@4.0.0: + resolution: {integrity: sha512-aa6AU2Pcx0VP/XWnh8IGL0SYSgQHDT6Ucror2j2mXeFAlN3ahaNs8EZtG1YiticMkSLj3Gt6VPFfZogt7G5iFQ==} + + md5-hex@3.0.1: + resolution: {integrity: sha512-BUiRtTtV39LIJwinWBjqVsU9xhdnz7/i889V859IBFpuqGAj6LuOvHv5XLbgZ2R7ptJoJaEcxkv88/h25T7Ciw==} + engines: {node: '>=8'} + + mdn-data@2.0.28: + resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==} + + mdn-data@2.27.1: + resolution: {integrity: sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==} + + memoize@10.2.0: + resolution: {integrity: sha512-DeC6b7QBrZsRs3Y02A6A7lQyzFbsQbqgjI6UW0GigGWV+u1s25TycMr0XHZE4cJce7rY/vyw2ctMQqfDkIhUEA==} + engines: {node: '>=18'} + + memorystream@0.3.1: + resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==} + engines: {node: '>= 0.10.0'} + + meow@14.1.0: + resolution: {integrity: sha512-EDYo6VlmtnumlcBCbh1gLJ//9jvM/ndXHfVXIFrZVr6fGcwTUyCTFNTLCKuY3ffbK8L/+3Mzqnd58RojiZqHVw==} + engines: {node: '>=20'} + + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + meshoptimizer@1.0.1: + resolution: {integrity: sha512-Vix+QlA1YYT3FwmBBZ+49cE5y/b+pRrcXKqGpS5ouh33d3lSp2PoTpCw19E0cKDFWalembrHnIaZetf27a+W2g==} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-db@1.54.0: + resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + + mimic-function@5.0.1: + resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} + engines: {node: '>=18'} + + mimic-response@3.1.0: + resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} + engines: {node: '>=10'} + + mimic-response@4.0.0: + resolution: {integrity: sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + minimatch@10.2.4: + resolution: {integrity: sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==} + engines: {node: 18 || 20 || >=22} + + minimatch@3.1.5: + resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==} + + minimist@1.2.0: + resolution: {integrity: sha512-7Wl+Jz+IGWuSdgsQEJ4JunV0si/iMhg42MnQQG6h1R6TNeVenp4U9x5CC5v/gYqz/fENLQITAWXidNtVL0NNbw==} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + minipass@7.1.3: + resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==} + engines: {node: '>=16 || 14 >=14.17'} + + minizlib@3.1.0: + resolution: {integrity: sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==} + engines: {node: '>= 18'} + + ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + nanoid@3.3.11: + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + nice-try@1.0.5: + resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} + + node-addon-api@7.1.1: + resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} + + node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + + node-gyp-build@4.8.4: + resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==} + hasBin: true + + node-releases@2.0.36: + resolution: {integrity: sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA==} + + nofilter@3.1.0: + resolution: {integrity: sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==} + engines: {node: '>=12.19'} + + nopt@8.1.0: + resolution: {integrity: sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==} + engines: {node: ^18.17.0 || >=20.5.0} + hasBin: true + + normalize-package-data@2.5.0: + resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + normalize-url@8.1.1: + resolution: {integrity: sha512-JYc0DPlpGWB40kH5g07gGTrYuMqV653k3uBKY6uITPWds3M0ov3GaWGp9lbE3Bzngx8+XkfzgvASb9vk9JDFXQ==} + engines: {node: '>=14.16'} + + npm-run-all@4.1.5: + resolution: {integrity: sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==} + engines: {node: '>= 4'} + hasBin: true + + npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + + nth-check@1.0.2: + resolution: {integrity: sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==} + + nth-check@2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + + nwmatcher@1.4.4: + resolution: {integrity: sha512-3iuY4N5dhgMpCUrOVnuAdGrgxVqV2cJpM+XNccjR2DKOB1RUP0aA+wGXEiNziG/UKboFyGBIoKOaNlJxx8bciQ==} + + oauth-sign@0.9.0: + resolution: {integrity: sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==} + + object-inspect@1.13.4: + resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} + engines: {node: '>= 0.4'} + + object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + + object.assign@4.1.7: + resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} + engines: {node: '>= 0.4'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + + optionator@0.8.3: + resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} + engines: {node: '>= 0.8.0'} + + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + + own-keys@1.0.1: + resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} + engines: {node: '>= 0.4'} + + p-cancelable@3.0.0: + resolution: {integrity: sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==} + engines: {node: '>=12.20'} + + p-event@6.0.1: + resolution: {integrity: sha512-Q6Bekk5wpzW5qIyUP4gdMEujObYstZl6DMMOSenwBvV0BlE5LkDwkjs5yHbZmdCEq2o4RJx4tE1vwxFVf2FG1w==} + engines: {node: '>=16.17'} + + p-filter@4.1.0: + resolution: {integrity: sha512-37/tPdZ3oJwHaS3gNJdenCDB3Tz26i9sjhnguBtvN0vYlRIiDNnvTWkuh+0hETV9rLPdJ3rlL3yVOYPIAnM8rw==} + engines: {node: '>=18'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + p-map@7.0.4: + resolution: {integrity: sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ==} + engines: {node: '>=18'} + + p-timeout@6.1.4: + resolution: {integrity: sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==} + engines: {node: '>=14.16'} + + package-config@5.0.0: + resolution: {integrity: sha512-GYTTew2slBcYdvRHqjhwaaydVMvn/qrGC323+nKclYioNSLTDUM/lGgtGTgyHVtYcozb+XkE8CNhwcraOmZ9Mg==} + engines: {node: '>=18'} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + parse-json@4.0.0: + resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} + engines: {node: '>=4'} + + parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + + parse-ms@4.0.0: + resolution: {integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==} + engines: {node: '>=18'} + + parse5@1.5.1: + resolution: {integrity: sha512-w2jx/0tJzvgKwZa58sj2vAYq/S/K1QJfIB3cWYea/Iu1scFPDQQ3IQiVZTHWtRBwAjv2Yd7S/xeZf3XqLDb3bA==} + + parse5@3.0.3: + resolution: {integrity: sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-key@2.0.1: + resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} + engines: {node: '>=4'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + path-scurry@2.0.2: + resolution: {integrity: sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==} + engines: {node: 18 || 20 || >=22} + + path-type@3.0.0: + resolution: {integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==} + engines: {node: '>=4'} + + path-type@6.0.0: + resolution: {integrity: sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==} + engines: {node: '>=18'} + + peek-stream@1.1.3: + resolution: {integrity: sha512-FhJ+YbOSBb9/rIl2ZeE/QHEsWn7PqNYt8ARAY3kIgNGOk13g9FGyIY6JIl/xB/3TFRVoTv5as0l11weORrTekA==} + + pend@1.2.0: + resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} + + performance-now@2.1.0: + resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + picomatch@4.0.3: + resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} + engines: {node: '>=12'} + + pidtree@0.3.1: + resolution: {integrity: sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==} + engines: {node: '>=0.10'} + hasBin: true + + pify@2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + + pify@3.0.0: + resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} + engines: {node: '>=4'} + + plur@6.0.0: + resolution: {integrity: sha512-Y9wXQivjRX0REtwpA9+n0bYYypWESn3cWtW2vazymw711qn+AQXxzZjRqhANYGBLIMC1UzVdpwe/1hHQwHfwng==} + engines: {node: '>=20'} + + possible-typed-array-names@1.1.0: + resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} + engines: {node: '>= 0.4'} + + postcss-attribute-case-insensitive@8.0.0: + resolution: {integrity: sha512-fovIPEV35c2JzVXdmP+sp2xirbBMt54J+upU8u6TSj410kUU5+axgEzvBBSAX8KCybze8CFCelzFAw/FfWg2TA==} + engines: {node: '>=20.19.0'} + peerDependencies: + postcss: ^8.4 + + postcss-calc@10.1.1: + resolution: {integrity: sha512-NYEsLHh8DgG/PRH2+G9BTuUdtf9ViS+vdoQ0YA5OQdGsfN4ztiwtDWNtBl9EKeqNMFnIu8IKZ0cLxEQ5r5KVMw==} + engines: {node: ^18.12 || ^20.9 || >=22.0} + peerDependencies: + postcss: ^8.4.38 + + postcss-clamp@4.1.0: + resolution: {integrity: sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==} + engines: {node: '>=7.6.0'} + peerDependencies: + postcss: ^8.4.6 + + postcss-cli@11.0.1: + resolution: {integrity: sha512-0UnkNPSayHKRe/tc2YGW6XnSqqOA9eqpiRMgRlV1S6HdGi16vwJBx7lviARzbV1HpQHqLLRH3o8vTcB0cLc+5g==} + engines: {node: '>=18'} + hasBin: true + peerDependencies: + postcss: ^8.0.0 + + postcss-color-functional-notation@8.0.2: + resolution: {integrity: sha512-tbmkk6teYpJzFcGwPIhN1gkvxqGHvNx2PMb8Y3S5Ktyn7xOlvD98XzQ99MFY5mAyvXWclDG+BgoJKYJXFJOp5Q==} + engines: {node: '>=20.19.0'} + peerDependencies: + postcss: ^8.4 + + postcss-color-hex-alpha@11.0.0: + resolution: {integrity: sha512-NCGa6vjIyrjosz9GqRxVKbONBklz5TeipYqTJp3IqbnBWlBq5e5EMtG6MaX4vqk9LzocPfMQkuRK9tfk+OQuKg==} + engines: {node: '>=20.19.0'} + peerDependencies: + postcss: ^8.4 + + postcss-color-rebeccapurple@11.0.0: + resolution: {integrity: sha512-g9561mx7cbdqx7XeO/L+lJzVlzu7bICyXr72efBVKZGxIhvBBJf9fGXn3Cb6U4Bwh3LbzQO2e9NWBLVYdX5Eag==} + engines: {node: '>=20.19.0'} + peerDependencies: + postcss: ^8.4 + + postcss-colormin@7.0.6: + resolution: {integrity: sha512-oXM2mdx6IBTRm39797QguYzVEWzbdlFiMNfq88fCCN1Wepw3CYmJ/1/Ifa/KjWo+j5ZURDl2NTldLJIw51IeNQ==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + postcss-convert-values@7.0.9: + resolution: {integrity: sha512-l6uATQATZaCa0bckHV+r6dLXfWtUBKXxO3jK+AtxxJJtgMPD+VhhPCCx51I4/5w8U5uHV67g3w7PXj+V3wlMlg==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + postcss-custom-media@12.0.1: + resolution: {integrity: sha512-66syE14+VeqkUf0rRX0bvbTCbNRJF132jD+ceo8th1dap2YJEAqpdh5uG98CE3IbgHT7m9XM0GIlOazNWqQdeA==} + engines: {node: '>=20.19.0'} + peerDependencies: + postcss: ^8.4 + + postcss-custom-properties@15.0.1: + resolution: {integrity: sha512-cuyq8sd8dLY0GLbelz1KB8IMIoDECo6RVXMeHeXY2Uw3Q05k/d1GVITdaKLsheqrHbnxlwxzSRZQQ5u+rNtbMg==} + engines: {node: '>=20.19.0'} + peerDependencies: + postcss: ^8.4 + + postcss-custom-selectors@9.0.1: + resolution: {integrity: sha512-2XBELy4DmdVKimChfaZ2id9u9CSGYQhiJ53SvlfBvMTzLMW2VxuMb9rHsMSQw9kRq/zSbhT5x13EaK8JSmK8KQ==} + engines: {node: '>=20.19.0'} + peerDependencies: + postcss: ^8.4 + + postcss-dir-pseudo-class@10.0.0: + resolution: {integrity: sha512-DmtIzULpyC8XaH4b5AaUgt4Jic4QmrECqidNCdR7u7naQFdnxX80YI06u238a+ZVRXwURDxVzy0s/UQnWmpVeg==} + engines: {node: '>=20.19.0'} + peerDependencies: + postcss: ^8.4 + + postcss-discard-comments@7.0.6: + resolution: {integrity: sha512-Sq+Fzj1Eg5/CPf1ERb0wS1Im5cvE2gDXCE+si4HCn1sf+jpQZxDI4DXEp8t77B/ImzDceWE2ebJQFXdqZ6GRJw==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + postcss-discard-duplicates@7.0.2: + resolution: {integrity: sha512-eTonaQvPZ/3i1ASDHOKkYwAybiM45zFIc7KXils4mQmHLqIswXD9XNOKEVxtTFnsmwYzF66u4LMgSr0abDlh5w==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + postcss-discard-empty@7.0.1: + resolution: {integrity: sha512-cFrJKZvcg/uxB6Ijr4l6qmn3pXQBna9zyrPC+sK0zjbkDUZew+6xDltSF7OeB7rAtzaaMVYSdbod+sZOCWnMOg==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + postcss-discard-overridden@7.0.1: + resolution: {integrity: sha512-7c3MMjjSZ/qYrx3uc1940GSOzN1Iqjtlqe8uoSg+qdVPYyRb0TILSqqmtlSFuE4mTDECwsm397Ya7iXGzfF7lg==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + postcss-double-position-gradients@7.0.0: + resolution: {integrity: sha512-Msr/dxj8Os7KLJE5Hdhvprwm3K5Zrh1KTY0eFN3ngPKNkej/Usy4BM9JQmqE6CLAkDpHoQVsi4snbL72CPt6qg==} + engines: {node: '>=20.19.0'} + peerDependencies: + postcss: ^8.4 + + postcss-focus-visible@11.0.0: + resolution: {integrity: sha512-VG1a9kBKizUBWS66t5xyB4uLONBnvZLCmZXxT40FALu8EF0QgVZBYy5ApC0KhmpHsv+pvHMJHB3agKHwmocWjw==} + engines: {node: '>=20.19.0'} + peerDependencies: + postcss: ^8.4 + + postcss-focus-within@10.0.0: + resolution: {integrity: sha512-dvql0fzUTG+gcJYp+KTbag5vAjuo94LDYZHkqDV1rnf5gPGer1v/SrmIZBdvKU8moep3HbcbujqGjzSb3DL53Q==} + engines: {node: '>=20.19.0'} + peerDependencies: + postcss: ^8.4 + + postcss-font-variant@5.0.0: + resolution: {integrity: sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==} + peerDependencies: + postcss: ^8.1.0 + + postcss-gap-properties@7.0.0: + resolution: {integrity: sha512-PSDF2QoZMRUbsINvXObQgxx4HExRP85QTT8qS/YN9fBsCPWCqUuwqAD6E6PNp0BqL/jU1eyWUBORaOK/J/9LDA==} + engines: {node: '>=20.19.0'} + peerDependencies: + postcss: ^8.4 + + postcss-image-set-function@8.0.0: + resolution: {integrity: sha512-rEGNkOkNusf4+IuMmfEoIdLuVmvbExGbmG+MIsyV6jR5UaWSoyPcAYHV/PxzVDCmudyF+2Nh/o6Ub2saqUdnuA==} + engines: {node: '>=20.19.0'} + peerDependencies: + postcss: ^8.4 + + postcss-lab-function@8.0.2: + resolution: {integrity: sha512-1ZIAh8ODhZdnAb09Aq2BTenePKS1G/kUR0FwvzkQDfFtSOV64Ycv27YvV11fDycEvhIcEmgYkLABXKRiWcXRuA==} + engines: {node: '>=20.19.0'} + peerDependencies: + postcss: ^8.4 + + postcss-load-config@5.1.0: + resolution: {integrity: sha512-G5AJ+IX0aD0dygOE0yFZQ/huFFMSNneyfp0e3/bT05a8OfPC5FUoZRPfGijUdGOJNMewJiwzcHJXFafFzeKFVA==} + engines: {node: '>= 18'} + peerDependencies: + jiti: '>=1.21.0' + postcss: '>=8.0.9' + tsx: ^4.8.1 + peerDependenciesMeta: + jiti: + optional: true + postcss: + optional: true + tsx: + optional: true + + postcss-logical@9.0.0: + resolution: {integrity: sha512-A4LNd9dk3q/juEUA9Gd8ALhBO3TeOeYurnyHLlf2aAToD94VHR8c5Uv7KNmf8YVRhTxvWsyug4c5fKtARzyIRQ==} + engines: {node: '>=20.19.0'} + peerDependencies: + postcss: ^8.4 + + postcss-media-query-parser@0.2.3: + resolution: {integrity: sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==} + + postcss-merge-longhand@7.0.5: + resolution: {integrity: sha512-Kpu5v4Ys6QI59FxmxtNB/iHUVDn9Y9sYw66D6+SZoIk4QTz1prC4aYkhIESu+ieG1iylod1f8MILMs1Em3mmIw==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + postcss-merge-rules@7.0.8: + resolution: {integrity: sha512-BOR1iAM8jnr7zoQSlpeBmCsWV5Uudi/+5j7k05D0O/WP3+OFMPD86c1j/20xiuRtyt45bhxw/7hnhZNhW2mNFA==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + postcss-minify-font-values@7.0.1: + resolution: {integrity: sha512-2m1uiuJeTplll+tq4ENOQSzB8LRnSUChBv7oSyFLsJRtUgAAJGP6LLz0/8lkinTgxrmJSPOEhgY1bMXOQ4ZXhQ==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + postcss-minify-gradients@7.0.1: + resolution: {integrity: sha512-X9JjaysZJwlqNkJbUDgOclyG3jZEpAMOfof6PUZjPnPrePnPG62pS17CjdM32uT1Uq1jFvNSff9l7kNbmMSL2A==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + postcss-minify-params@7.0.6: + resolution: {integrity: sha512-YOn02gC68JijlaXVuKvFSCvQOhTpblkcfDre2hb/Aaa58r2BIaK4AtE/cyZf2wV7YKAG+UlP9DT+By0ry1E4VQ==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + postcss-minify-selectors@7.0.6: + resolution: {integrity: sha512-lIbC0jy3AAwDxEgciZlBullDiMBeBCT+fz5G8RcA9MWqh/hfUkpOI3vNDUNEZHgokaoiv0juB9Y8fGcON7rU/A==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + postcss-nesting@14.0.0: + resolution: {integrity: sha512-YGFOfVrjxYfeGTS5XctP1WCI5hu8Lr9SmntjfRC+iX5hCihEO+QZl9Ra+pkjqkgoVdDKvb2JccpElcowhZtzpw==} + engines: {node: '>=20.19.0'} + peerDependencies: + postcss: ^8.4 + + postcss-normalize-charset@7.0.1: + resolution: {integrity: sha512-sn413ofhSQHlZFae//m9FTOfkmiZ+YQXsbosqOWRiVQncU2BA3daX3n0VF3cG6rGLSFVc5Di/yns0dFfh8NFgQ==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + postcss-normalize-display-values@7.0.1: + resolution: {integrity: sha512-E5nnB26XjSYz/mGITm6JgiDpAbVuAkzXwLzRZtts19jHDUBFxZ0BkXAehy0uimrOjYJbocby4FVswA/5noOxrQ==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + postcss-normalize-positions@7.0.1: + resolution: {integrity: sha512-pB/SzrIP2l50ZIYu+yQZyMNmnAcwyYb9R1fVWPRxm4zcUFCY2ign7rcntGFuMXDdd9L2pPNUgoODDk91PzRZuQ==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + postcss-normalize-repeat-style@7.0.1: + resolution: {integrity: sha512-NsSQJ8zj8TIDiF0ig44Byo3Jk9e4gNt9x2VIlJudnQQ5DhWAHJPF4Tr1ITwyHio2BUi/I6Iv0HRO7beHYOloYQ==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + postcss-normalize-string@7.0.1: + resolution: {integrity: sha512-QByrI7hAhsoze992kpbMlJSbZ8FuCEc1OT9EFbZ6HldXNpsdpZr+YXC5di3UEv0+jeZlHbZcoCADgb7a+lPmmQ==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + postcss-normalize-timing-functions@7.0.1: + resolution: {integrity: sha512-bHifyuuSNdKKsnNJ0s8fmfLMlvsQwYVxIoUBnowIVl2ZAdrkYQNGVB4RxjfpvkMjipqvbz0u7feBZybkl/6NJg==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + postcss-normalize-unicode@7.0.6: + resolution: {integrity: sha512-z6bwTV84YW6ZvvNoaNLuzRW4/uWxDKYI1iIDrzk6D2YTL7hICApy+Q1LP6vBEsljX8FM7YSuV9qI79XESd4ddQ==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + postcss-normalize-url@7.0.1: + resolution: {integrity: sha512-sUcD2cWtyK1AOL/82Fwy1aIVm/wwj5SdZkgZ3QiUzSzQQofrbq15jWJ3BA7Z+yVRwamCjJgZJN0I9IS7c6tgeQ==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + postcss-normalize-whitespace@7.0.1: + resolution: {integrity: sha512-vsbgFHMFQrJBJKrUFJNZ2pgBeBkC2IvvoHjz1to0/0Xk7sII24T0qFOiJzG6Fu3zJoq/0yI4rKWi7WhApW+EFA==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + postcss-opacity-percentage@3.0.0: + resolution: {integrity: sha512-K6HGVzyxUxd/VgZdX04DCtdwWJ4NGLG212US4/LA1TLAbHgmAsTWVR86o+gGIbFtnTkfOpb9sCRBx8K7HO66qQ==} + engines: {node: '>=18'} + peerDependencies: + postcss: ^8.4 + + postcss-ordered-values@7.0.2: + resolution: {integrity: sha512-AMJjt1ECBffF7CEON/Y0rekRLS6KsePU6PRP08UqYW4UGFRnTXNrByUzYK1h8AC7UWTZdQ9O3Oq9kFIhm0SFEw==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + postcss-overflow-shorthand@7.0.0: + resolution: {integrity: sha512-9SLpjoUdGRoRrzoOdX66HbUs0+uDwfIAiXsRa7piKGOqPd6F4ZlON9oaDSP5r1Qpgmzw5L9Ht0undIK6igJPMA==} + engines: {node: '>=20.19.0'} + peerDependencies: + postcss: ^8.4 + + postcss-page-break@3.0.4: + resolution: {integrity: sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==} + peerDependencies: + postcss: ^8 + + postcss-place@11.0.0: + resolution: {integrity: sha512-fAifpyjQ+fuDRp2nmF95WbotqbpjdazebedahXdfBxy5sHembOLpBQ1cHveZD9ZmjK26tYM8tikeNaUlp/KfHA==} + engines: {node: '>=20.19.0'} + peerDependencies: + postcss: ^8.4 + + postcss-preset-env@11.2.0: + resolution: {integrity: sha512-eNYpuj68cjGjvZMoSAbHilaCt3yIyzBL1cVuSGJfvJewsaBW/U6dI2bqCJl3iuZsL+yvBobcy4zJFA/3I68IHQ==} + engines: {node: '>=20.19.0'} + peerDependencies: + postcss: ^8.4 + + postcss-pseudo-class-any-link@11.0.0: + resolution: {integrity: sha512-DNFZ4GMa3C3pU5dM+UCTG1CEeLtS1ZqV5DKSqCTJQMn1G5jnd/30fS8+A7H4o5bSD3MOcnx+VgI+xPE9Z5Wvig==} + engines: {node: '>=20.19.0'} + peerDependencies: + postcss: ^8.4 + + postcss-reduce-initial@7.0.6: + resolution: {integrity: sha512-G6ZyK68AmrPdMB6wyeA37ejnnRG2S8xinJrZJnOv+IaRKf6koPAVbQsiC7MfkmXaGmF1UO+QCijb27wfpxuRNg==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + postcss-reduce-transforms@7.0.1: + resolution: {integrity: sha512-MhyEbfrm+Mlp/36hvZ9mT9DaO7dbncU0CvWI8V93LRkY6IYlu38OPg3FObnuKTUxJ4qA8HpurdQOo5CyqqO76g==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + postcss-replace-overflow-wrap@4.0.0: + resolution: {integrity: sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==} + peerDependencies: + postcss: ^8.0.3 + + postcss-reporter@7.1.0: + resolution: {integrity: sha512-/eoEylGWyy6/DOiMP5lmFRdmDKThqgn7D6hP2dXKJI/0rJSO1ADFNngZfDzxL0YAxFvws+Rtpuji1YIHj4mySA==} + engines: {node: '>=10'} + peerDependencies: + postcss: ^8.1.0 + + postcss-resolve-nested-selector@0.1.6: + resolution: {integrity: sha512-0sglIs9Wmkzbr8lQwEyIzlDOOC9bGmfVKcJTaxv3vMmd3uo4o4DerC3En0bnmgceeql9BfC8hRkp7cg0fjdVqw==} + + postcss-safe-parser@7.0.1: + resolution: {integrity: sha512-0AioNCJZ2DPYz5ABT6bddIqlhgwhpHZ/l65YAYo0BCIn0xiDpsnTHz0gnoTGk0OXZW0JRs+cDwL8u/teRdz+8A==} + engines: {node: '>=18.0'} + peerDependencies: + postcss: ^8.4.31 + + postcss-scss@4.0.9: + resolution: {integrity: sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.4.29 + + postcss-selector-not@9.0.0: + resolution: {integrity: sha512-xhAtTdHnVU2M/CrpYOPyRUvg3njhVlKmn2GNYXDaRJV9Ygx4d5OkSkc7NINzjUqnbDFtaKXlISOBeyMXU/zyFQ==} + engines: {node: '>=20.19.0'} + peerDependencies: + postcss: ^8.4 + + postcss-selector-parser@7.1.1: + resolution: {integrity: sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==} + engines: {node: '>=4'} + + postcss-sorting@9.1.0: + resolution: {integrity: sha512-Mn8KJ45HNNG6JBpBizXcyf6LqY/qyqetGcou/nprDnFwBFBLGj0j/sNKV2lj2KMOVOwdXu14aEzqJv8CIV6e8g==} + peerDependencies: + postcss: ^8.4.20 + + postcss-svgo@7.1.1: + resolution: {integrity: sha512-zU9H9oEDrUFKa0JB7w+IYL7Qs9ey1mZyjhbf0KLxwJDdDRtoPvCmaEfknzqfHj44QS9VD6c5sJnBAVYTLRg/Sg==} + engines: {node: ^18.12.0 || ^20.9.0 || >= 18} + peerDependencies: + postcss: ^8.4.32 + + postcss-unique-selectors@7.0.5: + resolution: {integrity: sha512-3QoYmEt4qg/rUWDn6Tc8+ZVPmbp4G1hXDtCNWDx0st8SjtCbRcxRXDDM1QrEiXGG3A45zscSJFb4QH90LViyxg==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + + postcss@8.5.8: + resolution: {integrity: sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==} + engines: {node: ^10 || ^12 || >=14} + + prelude-ls@1.1.2: + resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} + engines: {node: '>= 0.8.0'} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + presentable-error@0.0.1: + resolution: {integrity: sha512-E6rsNU1QNJgB3sjj7OANinGncFKuK+164sLXw1/CqBjj/EkXSoSdHCtWQGBNlREIGLnL7IEUEGa08YFVUbrhVg==} + engines: {node: '>=16'} + + pretty-hrtime@1.0.3: + resolution: {integrity: sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==} + engines: {node: '>= 0.8'} + + pretty-ms@9.3.0: + resolution: {integrity: sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ==} + engines: {node: '>=18'} + + process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + + process-streams@1.0.3: + resolution: {integrity: sha512-xkIaM5vYnyekB88WyET78YEqXiaJRy0xcvIdE22n+myhvBT7LlLmX6iAtq7jDvVH8CUx2rqQsd32JdRyJMV3NA==} + + psl@1.15.0: + resolution: {integrity: sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + qified@0.9.0: + resolution: {integrity: sha512-4q61YgkHbY6gmwkqm0BsxyLDO3UYdrdiJTJ7JiaZb3xpW1duxn135SB7KqUEkCiuu5O4W+TtwEWP2VjmSRanvA==} + engines: {node: '>=20'} + + qs@6.5.5: + resolution: {integrity: sha512-mzR4sElr1bfCaPJe7m8ilJ6ZXdDaGoObcYR0ZHSsktM/Lt21MVHj5De30GQH2eiZ1qGRTO7LCAzQsUeXTNexWQ==} + engines: {node: '>=0.6'} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + quick-lru@5.1.1: + resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} + engines: {node: '>=10'} + + read-cache@1.0.0: + resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} + + read-pkg@3.0.0: + resolution: {integrity: sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==} + engines: {node: '>=4'} + + readable-stream@1.1.14: + resolution: {integrity: sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==} + + readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + + readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + readdirp@4.1.2: + resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} + engines: {node: '>= 14.18.0'} + + reflect.getprototypeof@1.0.10: + resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} + engines: {node: '>= 0.4'} + + regenerator-runtime@0.11.1: + resolution: {integrity: sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==} + + regexp.prototype.flags@1.5.4: + resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} + engines: {node: '>= 0.4'} + + repeating@1.1.3: + resolution: {integrity: sha512-Nh30JLeMHdoI+AsQ5eblhZ7YlTsM9wiJQe/AHIunlK3KWzvXhXb36IJ7K1IOeRjIOtzMjdUHjwXUFxKJoPTSOg==} + engines: {node: '>=0.10.0'} + hasBin: true + + repeating@2.0.1: + resolution: {integrity: sha512-ZqtSMuVybkISo2OWvqvm7iHSWngvdaW3IpsT9/uP8v4gMi591LY6h35wdOfvQdWCKFWZWm2Y1Opp4kV7vQKT6A==} + engines: {node: '>=0.10.0'} + + request@2.88.2: + resolution: {integrity: sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==} + engines: {node: '>= 6'} + deprecated: request has been deprecated, see https://github.com/request/request/issues/3142 + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + + resolve-alpn@1.2.1: + resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} + + resolve-cwd@3.0.0: + resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} + engines: {node: '>=8'} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + + resolve@1.22.11: + resolution: {integrity: sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==} + engines: {node: '>= 0.4'} + hasBin: true + + responselike@3.0.0: + resolution: {integrity: sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==} + engines: {node: '>=14.16'} + + reusify@1.1.0: + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + safe-array-concat@1.1.3: + resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} + engines: {node: '>=0.4'} + + safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safe-push-apply@1.0.0: + resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} + engines: {node: '>= 0.4'} + + safe-regex-test@1.1.0: + resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} + engines: {node: '>= 0.4'} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + sass@1.98.0: + resolution: {integrity: sha512-+4N/u9dZ4PrgzGgPlKnaaRQx64RO0JBKs9sDhQ2pLgN6JQZ25uPQZKQYaBJU48Kd5BxgXoJ4e09Dq7nMcOUW3A==} + engines: {node: '>=14.0.0'} + hasBin: true + + sax@1.6.0: + resolution: {integrity: sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==} + engines: {node: '>=11.0.0'} + + seek-bzip@2.0.0: + resolution: {integrity: sha512-SMguiTnYrhpLdk3PwfzHeotrcwi8bNV4iemL9tx9poR/yeaMYwB9VzR1w7b57DuWpuqR8n6oZboi0hj3AxZxQg==} + hasBin: true + + semver-regex@4.0.5: + resolution: {integrity: sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw==} + engines: {node: '>=12'} + + semver-truncate@3.0.0: + resolution: {integrity: sha512-LJWA9kSvMolR51oDE6PN3kALBNaUdkxzAGcexw8gjMA8xr5zUqK0JiR3CgARSqanYF3Z1YHvsErb1KDgh+v7Rg==} + engines: {node: '>=12'} + + semver@5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} + hasBin: true + + semver@7.7.4: + resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==} + engines: {node: '>=10'} + hasBin: true + + serialize-error@7.0.1: + resolution: {integrity: sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==} + engines: {node: '>=10'} + + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} + engines: {node: '>= 0.4'} + + set-proto@1.0.0: + resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} + engines: {node: '>= 0.4'} + + shebang-command@1.2.0: + resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} + engines: {node: '>=0.10.0'} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@1.0.0: + resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} + engines: {node: '>=0.10.0'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + shell-quote@1.8.3: + resolution: {integrity: sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==} + engines: {node: '>= 0.4'} + + side-channel-list@1.0.0: + resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} + engines: {node: '>= 0.4'} + + side-channel-map@1.0.1: + resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} + engines: {node: '>= 0.4'} + + side-channel-weakmap@1.0.2: + resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} + engines: {node: '>= 0.4'} + + side-channel@1.1.0: + resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} + engines: {node: '>= 0.4'} + + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + simple-zstd@1.4.2: + resolution: {integrity: sha512-kGYEvT33M5XfyQvvW4wxl3eKcWbdbCc1V7OZzuElnaXft0qbVzoIIXHXiCm3JCUki+MZKKmvjl8p2VGLJc5Y/A==} + + slash@5.1.0: + resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} + engines: {node: '>=14.16'} + + slice-ansi@4.0.0: + resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} + engines: {node: '>=10'} + + slice-ansi@8.0.0: + resolution: {integrity: sha512-stxByr12oeeOyY2BlviTNQlYV5xOj47GirPr4yA1hE9JCtxfQN0+tVbkxwCtYDQWhEKWFHsEK48ORg5jrouCAg==} + engines: {node: '>=20'} + + sort-keys-length@1.0.1: + resolution: {integrity: sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw==} + engines: {node: '>=0.10.0'} + + sort-keys@1.1.2: + resolution: {integrity: sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==} + engines: {node: '>=0.10.0'} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + source-map@0.5.7: + resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} + engines: {node: '>=0.10.0'} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + spatial-controls@6.3.0: + resolution: {integrity: sha512-4MDCPWVWF5r59hKGcz/aC5ykFqC/b487T3bjdyHHt1yklHgMsVQXmvB0OBxZTnCGIGyyU0eEk5yJouSkUevBIg==} + peerDependencies: + three: 0.x.x + + spdx-correct@3.2.0: + resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} + + spdx-exceptions@2.5.0: + resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} + + spdx-expression-parse@3.0.1: + resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + + spdx-license-ids@3.0.23: + resolution: {integrity: sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw==} + + sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + + sshpk@1.18.0: + resolution: {integrity: sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==} + engines: {node: '>=0.10.0'} + hasBin: true + + stack-utils@2.0.6: + resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} + engines: {node: '>=10'} + + stop-iteration-iterator@1.1.0: + resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} + engines: {node: '>= 0.4'} + + stream-shift@1.0.3: + resolution: {integrity: sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==} + + streamx@2.25.0: + resolution: {integrity: sha512-0nQuG6jf1w+wddNEEXCF4nTg3LtufWINB5eFEN+5TNZW7KWJp6x87+JFL43vaAUPyCfH1wID+mNVyW6OHtFamg==} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@7.2.0: + resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} + engines: {node: '>=18'} + + string-width@8.2.0: + resolution: {integrity: sha512-6hJPQ8N0V0P3SNmP6h2J99RLuzrWz2gvT7VnK5tKvrNqJoyS9W4/Fb8mo31UiPvy00z7DQXkP2hnKBVav76thw==} + engines: {node: '>=20'} + + string.prototype.padend@3.1.6: + resolution: {integrity: sha512-XZpspuSB7vJWhvJc9DLSlrXl1mcA2BdoY5jjnS135ydXqLoqhs96JjDtCkjJEQHvfqZIp9hBuBMgI589peyx9Q==} + engines: {node: '>= 0.4'} + + string.prototype.trim@1.2.10: + resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} + engines: {node: '>= 0.4'} + + string.prototype.trimend@1.0.9: + resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==} + engines: {node: '>= 0.4'} + + string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} + + string_decoder@0.10.31: + resolution: {integrity: sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==} + + string_decoder@1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + + strip-ansi@3.0.1: + resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==} + engines: {node: '>=0.10.0'} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.2.0: + resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==} + engines: {node: '>=12'} + + strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + + strip-dirs@3.0.0: + resolution: {integrity: sha512-I0sdgcFTfKQlUPZyAqPJmSG3HLO9rWDFnxonnIbskYNM3DwFOeTNB5KzVq3dA1GdRAc/25b5Y7UO2TQfKWw4aQ==} + + strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + + strtok3@10.3.4: + resolution: {integrity: sha512-KIy5nylvC5le1OdaaoCJ07L+8iQzJHGH6pWDuzS+d07Cu7n1MZ2x26P8ZKIWfbK02+XIL8Mp4RkWeqdUCrDMfg==} + engines: {node: '>=18'} + + stylehacks@7.0.8: + resolution: {integrity: sha512-I3f053GBLIiS5Fg6OMFhq/c+yW+5Hc2+1fgq7gElDMMSqwlRb3tBf2ef6ucLStYRpId4q//bQO1FjcyNyy4yDQ==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.32 + + stylelint-config-recommended-scss@17.0.0: + resolution: {integrity: sha512-VkVD9r7jfUT/dq3mA3/I1WXXk2U71rO5wvU2yIil9PW5o1g3UM7Xc82vHmuVJHV7Y8ok5K137fmW5u3HbhtTOA==} + engines: {node: '>=20'} + peerDependencies: + postcss: ^8.3.3 + stylelint: ^17.0.0 + peerDependenciesMeta: + postcss: + optional: true + + stylelint-config-recommended@18.0.0: + resolution: {integrity: sha512-mxgT2XY6YZ3HWWe3Di8umG6aBmWmHTblTgu/f10rqFXnyWxjKWwNdjSWkgkwCtxIKnqjSJzvFmPT5yabVIRxZg==} + engines: {node: '>=20.19.0'} + peerDependencies: + stylelint: ^17.0.0 + + stylelint-config-standard-scss@17.0.0: + resolution: {integrity: sha512-uLJS6xgOCBw5EMsDW7Ukji8l28qRoMnkRch15s0qwZpskXvWt9oPzMmcYM307m9GN4MxuWLsQh4I6hU9yI53cQ==} + engines: {node: '>=20'} + peerDependencies: + postcss: ^8.3.3 + stylelint: ^17.0.0 + peerDependenciesMeta: + postcss: + optional: true + + stylelint-config-standard@40.0.0: + resolution: {integrity: sha512-EznGJxOUhtWck2r6dJpbgAdPATIzvpLdK9+i5qPd4Lx70es66TkBPljSg4wN3Qnc6c4h2n+WbUrUynQ3fanjHw==} + engines: {node: '>=20.19.0'} + peerDependencies: + stylelint: ^17.0.0 + + stylelint-order@7.0.1: + resolution: {integrity: sha512-GWPei1zBVDDjxM+/BmcSCiOcHNd8rSqW6FUZtqQGlTRpD0Z5nSzspzWD8rtKif5KPdzUG68DApKEV/y/I9VbTw==} + engines: {node: '>=20.19.0'} + peerDependencies: + stylelint: ^16.18.0 || ^17.0.0 + + stylelint-scss@7.0.0: + resolution: {integrity: sha512-H88kCC+6Vtzj76NsC8rv6x/LW8slBzIbyeSjsKVlS+4qaEJoDrcJR4L+8JdrR2ORdTscrBzYWiiT2jq6leYR1Q==} + engines: {node: '>=20.19.0'} + peerDependencies: + stylelint: ^16.8.2 || ^17.0.0 + + stylelint@17.5.0: + resolution: {integrity: sha512-o/NS6zhsPZFmgUm5tXX4pVNg1XDOZSlucLdf2qow/lVn4JIyzZIQ5b3kad1ugqUj3GSIgr2u5lQw7X8rjqw33g==} + engines: {node: '>=20.19.0'} + hasBin: true + + supertap@3.0.1: + resolution: {integrity: sha512-u1ZpIBCawJnO+0QePsEiOknOfCRq0yERxiAchT0i4li0WHNUJbf0evXXSXOcCAR4M8iMDoajXYmstm/qO81Isw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + supports-color@10.2.2: + resolution: {integrity: sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==} + engines: {node: '>=18'} + + supports-color@2.0.0: + resolution: {integrity: sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==} + engines: {node: '>=0.8.0'} + + supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + + supports-hyperlinks@4.4.0: + resolution: {integrity: sha512-UKbpT93hN5Nr9go5UY7bopIB9YQlMz9nm/ct4IXt/irb5YRkn9WaqrOBJGZ5Pwvsd5FQzSVeYlGdXoCAPQZrPg==} + engines: {node: '>=20'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + svg-tags@1.0.0: + resolution: {integrity: sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==} + + svgo@4.0.1: + resolution: {integrity: sha512-XDpWUOPC6FEibaLzjfe0ucaV0YrOjYotGJO1WpF0Zd+n6ZGEQUsSugaoLq9QkEZtAfQIxT42UChcssDVPP3+/w==} + engines: {node: '>=16'} + hasBin: true + + symbol-tree@3.2.4: + resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} + + table@6.9.0: + resolution: {integrity: sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==} + engines: {node: '>=10.0.0'} + + taffydb@2.7.2: + resolution: {integrity: sha512-R6es6/C/m1xXZckrSam4j07YKbd74437mRJ/R944S1hLG7mIl2/EQW7tQPI4XiX7jTduFzz31g7466a2BcsglQ==} + + taffydb@2.7.3: + resolution: {integrity: sha512-GQ3gtYFSOAxSMN/apGtDKKkbJf+8izz5YfbGqIsUc7AMiQOapARZ76dhilRY2h39cynYxBFdafQo5HUL5vgkrg==} + + tar-stream@3.1.8: + resolution: {integrity: sha512-U6QpVRyCGHva435KoNWy9PRoi2IFYCgtEhq9nmrPPpbRacPs9IH4aJ3gbrFC8dPcXvdSZ4XXfXT5Fshbp2MtlQ==} + + tar@7.5.12: + resolution: {integrity: sha512-9TsuLcdhOn4XztcQqhNyq1KOwOOED/3k58JAvtULiYqbO8B/0IBAAIE1hj0Svmm58k27TmcigyDI0deMlgG3uw==} + engines: {node: '>=18'} + + teex@1.0.1: + resolution: {integrity: sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==} + + temp-dir@3.0.0: + resolution: {integrity: sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw==} + engines: {node: '>=14.16'} + + text-decoder@1.2.7: + resolution: {integrity: sha512-vlLytXkeP4xvEq2otHeJfSQIRyWxo/oZGEbXrtEEF9Hnmrdly59sUbzZ/QgyWuLYHctCHxFF4tRQZNQ9k60ExQ==} + + thenby@1.3.4: + resolution: {integrity: sha512-89Gi5raiWA3QZ4b2ePcEwswC3me9JIg+ToSgtE0JWeCynLnLxNr/f9G+xfo9K+Oj4AFdom8YNJjibIARTJmapQ==} + + three-demo@5.1.3: + resolution: {integrity: sha512-bItONudb5cDlE2PMcAAEZbImsluwuGUKdm+ymC726Ew0vnYz5m+/bn0C37AdDBLpqmwixrgtmhEBXQzyrmTimg==} + engines: {node: '>= 0.14.0'} + peerDependencies: + dat.gui: 0.x.x + three: 0.x.x + + three@0.183.2: + resolution: {integrity: sha512-di3BsL2FEQ1PA7Hcvn4fyJOlxRRgFYBpMTcyOgkwJIaDOdJMebEFPA+t98EvjuljDx4hNulAGwF6KIjtwI5jgQ==} + + through2@2.0.5: + resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} + + through2@4.0.2: + resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==} + + through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + + time-zone@1.0.0: + resolution: {integrity: sha512-TIsDdtKo6+XrPtiTm1ssmMngN1sAhyKnTO2kunQWqNPWIVvCm15Wmw4SWInwTVgJ5u/Tr04+8Ei9TNcw4x4ONA==} + engines: {node: '>=4'} + + tiny-glob@0.2.9: + resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==} + + tinyglobby@0.2.15: + resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} + engines: {node: '>=12.0.0'} + + to-fast-properties@1.0.3: + resolution: {integrity: sha512-lxrWP8ejsq+7E3nNjwYmUBMAgjMTZoTI+sdBOpvNyijeDLa29LUn9QaoXAHv4+Z578hbmHHJKZknzxVtvo77og==} + engines: {node: '>=0.10.0'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + token-types@6.1.2: + resolution: {integrity: sha512-dRXchy+C0IgK8WPC6xvCHFRIWYUbqqdEIKPaKo/AcTUNzwLTK6AH7RjdLWsEZcAN/TBdtfUw3PYEgPr5VPr6ww==} + engines: {node: '>=14.16'} + + tough-cookie@2.5.0: + resolution: {integrity: sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==} + engines: {node: '>=0.8'} + + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + + trim-right@1.0.1: + resolution: {integrity: sha512-WZGXGstmCWgeevgTL54hrCuw1dyMQIzWy7ZfqRJfSmJZBwklI15egmQytFP6bPidmw3M8d5yEowl1niq4vmqZw==} + engines: {node: '>=0.10.0'} + + ts-api-utils@2.5.0: + resolution: {integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==} + engines: {node: '>=18.12'} + peerDependencies: + typescript: '>=4.8.4' + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + tunnel-agent@0.6.0: + resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} + + tweakpane@4.0.5: + resolution: {integrity: sha512-rxEXdSI+ArlG1RyO6FghC4ZUX8JkEfz8F3v1JuteXSV0pEtHJzyo07fcDG+NsJfN5L39kSbCYbB9cBGHyuI/tQ==} + + tweetnacl@0.14.5: + resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==} + + type-check@0.3.2: + resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==} + engines: {node: '>= 0.8.0'} + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + type-fest@0.13.1: + resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} + engines: {node: '>=10'} + + typed-array-buffer@1.0.3: + resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} + engines: {node: '>= 0.4'} + + typed-array-byte-length@1.0.3: + resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} + engines: {node: '>= 0.4'} + + typed-array-byte-offset@1.0.4: + resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} + engines: {node: '>= 0.4'} + + typed-array-length@1.0.7: + resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} + engines: {node: '>= 0.4'} + + typescript-eslint@8.57.1: + resolution: {integrity: sha512-fLvZWf+cAGw3tqMCYzGIU6yR8K+Y9NT2z23RwOjlNFF2HwSB3KhdEFI5lSBv8tNmFkkBShSjsCjzx1vahZfISA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.0.0' + + typescript@5.9.3: + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} + engines: {node: '>=14.17'} + hasBin: true + + uint8array-extras@1.5.0: + resolution: {integrity: sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A==} + engines: {node: '>=18'} + + unbox-primitive@1.1.0: + resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} + engines: {node: '>= 0.4'} + + unbzip2-stream@1.4.3: + resolution: {integrity: sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==} + + undici-types@7.18.2: + resolution: {integrity: sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==} + + unicorn-magic@0.3.0: + resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} + engines: {node: '>=18'} + + unicorn-magic@0.4.0: + resolution: {integrity: sha512-wH590V9VNgYH9g3lH9wWjTrUoKsjLF6sGLjhR4sH1LWpLmCOH0Zf7PukhDA8BiS7KHe4oPNkcTHqYkj7SOGUOw==} + engines: {node: '>=20'} + + universalify@0.1.2: + resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} + engines: {node: '>= 4.0.0'} + + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + + update-browserslist-db@1.2.3: + resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + uuid@3.4.0: + resolution: {integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==} + deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. + hasBin: true + + validate-npm-package-license@3.0.4: + resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + + verror@1.10.0: + resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==} + engines: {'0': node >=0.6.0} + + webidl-conversions@2.0.1: + resolution: {integrity: sha512-OZ7I/f0sM+T28T2/OXinNGfmvjm3KKptdyQy8NPRZyLfYBn+9vt72Bfr+uQaE9OvWyxJjQ5kHFygH2wOTUb76g==} + + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + well-known-symbols@2.0.0: + resolution: {integrity: sha512-ZMjC3ho+KXo0BfJb7JgtQ5IBuvnShdlACNkKkdsqBmYw3bPAaJfPeYUo6tLUaT5tG/Gkh7xkpBhKRQ9e7pyg9Q==} + engines: {node: '>=6'} + + whatwg-url-compat@0.6.5: + resolution: {integrity: sha512-vbg5+JVNwGtHRI3GheZGWrcUlxF9BXHbA80dLa+2XqJjlV/BK6upoi2j8dIRW9FGPUUyaMm7Hf1pTexHnsk85g==} + + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + + which-boxed-primitive@1.1.1: + resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} + engines: {node: '>= 0.4'} + + which-builtin-type@1.2.1: + resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} + engines: {node: '>= 0.4'} + + which-collection@1.0.2: + resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} + engines: {node: '>= 0.4'} + + which-typed-array@1.1.20: + resolution: {integrity: sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==} + engines: {node: '>= 0.4'} + + which@1.3.1: + resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} + hasBin: true + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@9.0.2: + resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==} + engines: {node: '>=18'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + write-file-atomic@7.0.1: + resolution: {integrity: sha512-OTIk8iR8/aCRWBqvxrzxR0hgxWpnYBblY1S5hDWBQfk/VFmJwzmJgQFN3WsoUKHISv2eAwe+PpbUzyL1CKTLXg==} + engines: {node: ^20.17.0 || >=22.9.0} + + xml-name-validator@2.0.1: + resolution: {integrity: sha512-jRKe/iQYMyVJpzPH+3HL97Lgu5HrCfii+qSo+TfjKHtOnvbnvdVfMYrn9Q34YV81M2e5sviJlI6Ko9y+nByzvA==} + + xtend@4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yallist@5.0.0: + resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==} + engines: {node: '>=18'} + + yaml@2.8.2: + resolution: {integrity: sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==} + engines: {node: '>= 14.6'} + hasBin: true + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs-parser@22.0.0: + resolution: {integrity: sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==} + engines: {node: ^20.19.0 || ^22.12.0 || >=23} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + + yargs@18.0.0: + resolution: {integrity: sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==} + engines: {node: ^20.19.0 || ^22.12.0 || >=23} + + yauzl@3.2.1: + resolution: {integrity: sha512-k1isifdbpNSFEHFJ1ZY4YDewv0IH9FR61lDetaRMD3j2ae3bIXGV+7c+LHCqtQGofSd8PIyV4X6+dHMAnSr60A==} + engines: {node: '>=12'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + +snapshots: + + '@babel/code-frame@7.29.0': + dependencies: + '@babel/helper-validator-identifier': 7.28.5 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/helper-validator-identifier@7.28.5': {} + + '@borewit/text-codec@0.2.2': {} + + '@cacheable/memory@2.0.8': + dependencies: + '@cacheable/utils': 2.4.0 + '@keyv/bigmap': 1.3.1(keyv@5.6.0) + hookified: 1.15.1 + keyv: 5.6.0 + + '@cacheable/utils@2.4.0': + dependencies: + hashery: 1.5.0 + keyv: 5.6.0 + + '@csstools/cascade-layer-name-parser@3.0.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': + dependencies: + '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) + '@csstools/css-tokenizer': 4.0.0 + + '@csstools/color-helpers@6.0.2': {} + + '@csstools/css-calc@3.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': + dependencies: + '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) + '@csstools/css-tokenizer': 4.0.0 + + '@csstools/css-color-parser@4.0.2(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': + dependencies: + '@csstools/color-helpers': 6.0.2 + '@csstools/css-calc': 3.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) + '@csstools/css-tokenizer': 4.0.0 + + '@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0)': + dependencies: + '@csstools/css-tokenizer': 4.0.0 + + '@csstools/css-syntax-patches-for-csstree@1.1.1(css-tree@3.2.1)': + optionalDependencies: + css-tree: 3.2.1 + + '@csstools/css-tokenizer@4.0.0': {} + + '@csstools/media-query-list-parser@5.0.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': + dependencies: + '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) + '@csstools/css-tokenizer': 4.0.0 + + '@csstools/postcss-alpha-function@2.0.3(postcss@8.5.8)': + dependencies: + '@csstools/css-color-parser': 4.0.2(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) + '@csstools/css-tokenizer': 4.0.0 + '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.8) + '@csstools/utilities': 3.0.0(postcss@8.5.8) + postcss: 8.5.8 + + '@csstools/postcss-cascade-layers@6.0.0(postcss@8.5.8)': + dependencies: + '@csstools/selector-specificity': 6.0.0(postcss-selector-parser@7.1.1) + postcss: 8.5.8 + postcss-selector-parser: 7.1.1 + + '@csstools/postcss-color-function-display-p3-linear@2.0.2(postcss@8.5.8)': + dependencies: + '@csstools/css-color-parser': 4.0.2(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) + '@csstools/css-tokenizer': 4.0.0 + '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.8) + '@csstools/utilities': 3.0.0(postcss@8.5.8) + postcss: 8.5.8 + + '@csstools/postcss-color-function@5.0.2(postcss@8.5.8)': + dependencies: + '@csstools/css-color-parser': 4.0.2(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) + '@csstools/css-tokenizer': 4.0.0 + '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.8) + '@csstools/utilities': 3.0.0(postcss@8.5.8) + postcss: 8.5.8 + + '@csstools/postcss-color-mix-function@4.0.2(postcss@8.5.8)': + dependencies: + '@csstools/css-color-parser': 4.0.2(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) + '@csstools/css-tokenizer': 4.0.0 + '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.8) + '@csstools/utilities': 3.0.0(postcss@8.5.8) + postcss: 8.5.8 + + '@csstools/postcss-color-mix-variadic-function-arguments@2.0.2(postcss@8.5.8)': + dependencies: + '@csstools/css-color-parser': 4.0.2(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) + '@csstools/css-tokenizer': 4.0.0 + '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.8) + '@csstools/utilities': 3.0.0(postcss@8.5.8) + postcss: 8.5.8 + + '@csstools/postcss-content-alt-text@3.0.0(postcss@8.5.8)': + dependencies: + '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) + '@csstools/css-tokenizer': 4.0.0 + '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.8) + '@csstools/utilities': 3.0.0(postcss@8.5.8) + postcss: 8.5.8 + + '@csstools/postcss-contrast-color-function@3.0.2(postcss@8.5.8)': + dependencies: + '@csstools/css-color-parser': 4.0.2(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) + '@csstools/css-tokenizer': 4.0.0 + '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.8) + '@csstools/utilities': 3.0.0(postcss@8.5.8) + postcss: 8.5.8 + + '@csstools/postcss-exponential-functions@3.0.1(postcss@8.5.8)': + dependencies: + '@csstools/css-calc': 3.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) + '@csstools/css-tokenizer': 4.0.0 + postcss: 8.5.8 + + '@csstools/postcss-font-format-keywords@5.0.0(postcss@8.5.8)': + dependencies: + '@csstools/utilities': 3.0.0(postcss@8.5.8) + postcss: 8.5.8 + postcss-value-parser: 4.2.0 + + '@csstools/postcss-font-width-property@1.0.0(postcss@8.5.8)': + dependencies: + '@csstools/utilities': 3.0.0(postcss@8.5.8) + postcss: 8.5.8 + + '@csstools/postcss-gamut-mapping@3.0.2(postcss@8.5.8)': + dependencies: + '@csstools/css-color-parser': 4.0.2(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) + '@csstools/css-tokenizer': 4.0.0 + postcss: 8.5.8 + + '@csstools/postcss-gradients-interpolation-method@6.0.2(postcss@8.5.8)': + dependencies: + '@csstools/css-color-parser': 4.0.2(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) + '@csstools/css-tokenizer': 4.0.0 + '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.8) + '@csstools/utilities': 3.0.0(postcss@8.5.8) + postcss: 8.5.8 + + '@csstools/postcss-hwb-function@5.0.2(postcss@8.5.8)': + dependencies: + '@csstools/css-color-parser': 4.0.2(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) + '@csstools/css-tokenizer': 4.0.0 + '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.8) + '@csstools/utilities': 3.0.0(postcss@8.5.8) + postcss: 8.5.8 + + '@csstools/postcss-ic-unit@5.0.0(postcss@8.5.8)': + dependencies: + '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.8) + '@csstools/utilities': 3.0.0(postcss@8.5.8) + postcss: 8.5.8 + postcss-value-parser: 4.2.0 + + '@csstools/postcss-initial@3.0.0(postcss@8.5.8)': + dependencies: + postcss: 8.5.8 + + '@csstools/postcss-is-pseudo-class@6.0.0(postcss@8.5.8)': + dependencies: + '@csstools/selector-specificity': 6.0.0(postcss-selector-parser@7.1.1) + postcss: 8.5.8 + postcss-selector-parser: 7.1.1 + + '@csstools/postcss-light-dark-function@3.0.0(postcss@8.5.8)': + dependencies: + '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) + '@csstools/css-tokenizer': 4.0.0 + '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.8) + '@csstools/utilities': 3.0.0(postcss@8.5.8) + postcss: 8.5.8 + + '@csstools/postcss-logical-float-and-clear@4.0.0(postcss@8.5.8)': + dependencies: + postcss: 8.5.8 + + '@csstools/postcss-logical-overflow@3.0.0(postcss@8.5.8)': + dependencies: + postcss: 8.5.8 + + '@csstools/postcss-logical-overscroll-behavior@3.0.0(postcss@8.5.8)': + dependencies: + postcss: 8.5.8 + + '@csstools/postcss-logical-resize@4.0.0(postcss@8.5.8)': + dependencies: + postcss: 8.5.8 + postcss-value-parser: 4.2.0 + + '@csstools/postcss-logical-viewport-units@4.0.0(postcss@8.5.8)': + dependencies: + '@csstools/css-tokenizer': 4.0.0 + '@csstools/utilities': 3.0.0(postcss@8.5.8) + postcss: 8.5.8 + + '@csstools/postcss-media-minmax@3.0.1(postcss@8.5.8)': + dependencies: + '@csstools/css-calc': 3.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) + '@csstools/css-tokenizer': 4.0.0 + '@csstools/media-query-list-parser': 5.0.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + postcss: 8.5.8 + + '@csstools/postcss-media-queries-aspect-ratio-number-values@4.0.0(postcss@8.5.8)': + dependencies: + '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) + '@csstools/css-tokenizer': 4.0.0 + '@csstools/media-query-list-parser': 5.0.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + postcss: 8.5.8 + + '@csstools/postcss-mixins@1.0.0(postcss@8.5.8)': + dependencies: + '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) + '@csstools/css-tokenizer': 4.0.0 + postcss: 8.5.8 + + '@csstools/postcss-nested-calc@5.0.0(postcss@8.5.8)': + dependencies: + '@csstools/utilities': 3.0.0(postcss@8.5.8) + postcss: 8.5.8 + postcss-value-parser: 4.2.0 + + '@csstools/postcss-normalize-display-values@5.0.1(postcss@8.5.8)': + dependencies: + postcss: 8.5.8 + postcss-value-parser: 4.2.0 + + '@csstools/postcss-oklab-function@5.0.2(postcss@8.5.8)': + dependencies: + '@csstools/css-color-parser': 4.0.2(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) + '@csstools/css-tokenizer': 4.0.0 + '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.8) + '@csstools/utilities': 3.0.0(postcss@8.5.8) + postcss: 8.5.8 + + '@csstools/postcss-position-area-property@2.0.0(postcss@8.5.8)': + dependencies: + postcss: 8.5.8 + + '@csstools/postcss-progressive-custom-properties@5.0.0(postcss@8.5.8)': + dependencies: + postcss: 8.5.8 + postcss-value-parser: 4.2.0 + + '@csstools/postcss-property-rule-prelude-list@2.0.0(postcss@8.5.8)': + dependencies: + '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) + '@csstools/css-tokenizer': 4.0.0 + postcss: 8.5.8 + + '@csstools/postcss-random-function@3.0.1(postcss@8.5.8)': + dependencies: + '@csstools/css-calc': 3.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) + '@csstools/css-tokenizer': 4.0.0 + postcss: 8.5.8 + + '@csstools/postcss-relative-color-syntax@4.0.2(postcss@8.5.8)': + dependencies: + '@csstools/css-color-parser': 4.0.2(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) + '@csstools/css-tokenizer': 4.0.0 + '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.8) + '@csstools/utilities': 3.0.0(postcss@8.5.8) + postcss: 8.5.8 + + '@csstools/postcss-scope-pseudo-class@5.0.0(postcss@8.5.8)': + dependencies: + postcss: 8.5.8 + postcss-selector-parser: 7.1.1 + + '@csstools/postcss-sign-functions@2.0.1(postcss@8.5.8)': + dependencies: + '@csstools/css-calc': 3.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) + '@csstools/css-tokenizer': 4.0.0 + postcss: 8.5.8 + + '@csstools/postcss-stepped-value-functions@5.0.1(postcss@8.5.8)': + dependencies: + '@csstools/css-calc': 3.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) + '@csstools/css-tokenizer': 4.0.0 + postcss: 8.5.8 + + '@csstools/postcss-syntax-descriptor-syntax-production@2.0.0(postcss@8.5.8)': + dependencies: + '@csstools/css-tokenizer': 4.0.0 + postcss: 8.5.8 + + '@csstools/postcss-system-ui-font-family@2.0.0(postcss@8.5.8)': + dependencies: + '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) + '@csstools/css-tokenizer': 4.0.0 + postcss: 8.5.8 + + '@csstools/postcss-text-decoration-shorthand@5.0.3(postcss@8.5.8)': + dependencies: + '@csstools/color-helpers': 6.0.2 + postcss: 8.5.8 + postcss-value-parser: 4.2.0 + + '@csstools/postcss-trigonometric-functions@5.0.1(postcss@8.5.8)': + dependencies: + '@csstools/css-calc': 3.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) + '@csstools/css-tokenizer': 4.0.0 + postcss: 8.5.8 + + '@csstools/postcss-unset-value@5.0.0(postcss@8.5.8)': + dependencies: + postcss: 8.5.8 + + '@csstools/selector-resolve-nested@4.0.0(postcss-selector-parser@7.1.1)': + dependencies: + postcss-selector-parser: 7.1.1 + + '@csstools/selector-specificity@6.0.0(postcss-selector-parser@7.1.1)': + dependencies: + postcss-selector-parser: 7.1.1 + + '@csstools/utilities@3.0.0(postcss@8.5.8)': + dependencies: + postcss: 8.5.8 + + '@dimforge/rapier3d-compat@0.12.0': {} + + '@esbuild/aix-ppc64@0.27.4': + optional: true + + '@esbuild/android-arm64@0.27.4': + optional: true + + '@esbuild/android-arm@0.27.4': + optional: true + + '@esbuild/android-x64@0.27.4': + optional: true + + '@esbuild/darwin-arm64@0.27.4': + optional: true + + '@esbuild/darwin-x64@0.27.4': + optional: true + + '@esbuild/freebsd-arm64@0.27.4': + optional: true + + '@esbuild/freebsd-x64@0.27.4': + optional: true + + '@esbuild/linux-arm64@0.27.4': + optional: true + + '@esbuild/linux-arm@0.27.4': + optional: true + + '@esbuild/linux-ia32@0.27.4': + optional: true + + '@esbuild/linux-loong64@0.27.4': + optional: true + + '@esbuild/linux-mips64el@0.27.4': + optional: true + + '@esbuild/linux-ppc64@0.27.4': + optional: true + + '@esbuild/linux-riscv64@0.27.4': + optional: true + + '@esbuild/linux-s390x@0.27.4': + optional: true + + '@esbuild/linux-x64@0.27.4': + optional: true + + '@esbuild/netbsd-arm64@0.27.4': + optional: true + + '@esbuild/netbsd-x64@0.27.4': + optional: true + + '@esbuild/openbsd-arm64@0.27.4': + optional: true + + '@esbuild/openbsd-x64@0.27.4': + optional: true + + '@esbuild/openharmony-arm64@0.27.4': + optional: true + + '@esbuild/sunos-x64@0.27.4': + optional: true + + '@esbuild/win32-arm64@0.27.4': + optional: true + + '@esbuild/win32-ia32@0.27.4': + optional: true + + '@esbuild/win32-x64@0.27.4': + optional: true + + '@eslint-community/eslint-utils@4.9.1(eslint@10.1.0)': + dependencies: + eslint: 10.1.0 + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.12.2': {} + + '@eslint/config-array@0.23.3': + dependencies: + '@eslint/object-schema': 3.0.3 + debug: 4.4.3 + minimatch: 10.2.4 + transitivePeerDependencies: + - supports-color + + '@eslint/config-helpers@0.5.3': + dependencies: + '@eslint/core': 1.1.1 + + '@eslint/core@1.1.1': + dependencies: + '@types/json-schema': 7.0.15 + + '@eslint/js@10.0.1(eslint@10.1.0)': + optionalDependencies: + eslint: 10.1.0 + + '@eslint/object-schema@3.0.3': {} + + '@eslint/plugin-kit@0.6.1': + dependencies: + '@eslint/core': 1.1.1 + levn: 0.4.1 + + '@gfx/zopfli@1.0.15': + dependencies: + base64-js: 1.5.1 + + '@humanfs/core@0.19.1': {} + + '@humanfs/node@0.16.7': + dependencies: + '@humanfs/core': 0.19.1 + '@humanwhocodes/retry': 0.4.3 + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/retry@0.4.3': {} + + '@isaacs/fs-minipass@4.0.1': + dependencies: + minipass: 7.1.3 + + '@keyv/bigmap@1.3.1(keyv@5.6.0)': + dependencies: + hashery: 1.5.0 + hookified: 1.15.1 + keyv: 5.6.0 + + '@keyv/serialize@1.1.1': {} + + '@mapbox/node-pre-gyp@2.0.3': + dependencies: + consola: 3.4.2 + detect-libc: 2.1.2 + https-proxy-agent: 7.0.6 + node-fetch: 2.7.0 + nopt: 8.1.0 + semver: 7.7.4 + tar: 7.5.12 + transitivePeerDependencies: + - encoding + - supports-color + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.20.1 + + '@parcel/watcher-android-arm64@2.5.6': + optional: true + + '@parcel/watcher-darwin-arm64@2.5.6': + optional: true + + '@parcel/watcher-darwin-x64@2.5.6': + optional: true + + '@parcel/watcher-freebsd-x64@2.5.6': + optional: true + + '@parcel/watcher-linux-arm-glibc@2.5.6': + optional: true + + '@parcel/watcher-linux-arm-musl@2.5.6': + optional: true + + '@parcel/watcher-linux-arm64-glibc@2.5.6': + optional: true + + '@parcel/watcher-linux-arm64-musl@2.5.6': + optional: true + + '@parcel/watcher-linux-x64-glibc@2.5.6': + optional: true + + '@parcel/watcher-linux-x64-musl@2.5.6': + optional: true + + '@parcel/watcher-win32-arm64@2.5.6': + optional: true + + '@parcel/watcher-win32-ia32@2.5.6': + optional: true + + '@parcel/watcher-win32-x64@2.5.6': + optional: true + + '@parcel/watcher@2.5.6': dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.16.0 - dev: true + detect-libc: 2.1.2 + is-glob: 4.0.3 + node-addon-api: 7.1.1 + picomatch: 4.0.3 + optionalDependencies: + '@parcel/watcher-android-arm64': 2.5.6 + '@parcel/watcher-darwin-arm64': 2.5.6 + '@parcel/watcher-darwin-x64': 2.5.6 + '@parcel/watcher-freebsd-x64': 2.5.6 + '@parcel/watcher-linux-arm-glibc': 2.5.6 + '@parcel/watcher-linux-arm-musl': 2.5.6 + '@parcel/watcher-linux-arm64-glibc': 2.5.6 + '@parcel/watcher-linux-arm64-musl': 2.5.6 + '@parcel/watcher-linux-x64-glibc': 2.5.6 + '@parcel/watcher-linux-x64-musl': 2.5.6 + '@parcel/watcher-win32-arm64': 2.5.6 + '@parcel/watcher-win32-ia32': 2.5.6 + '@parcel/watcher-win32-x64': 2.5.6 + optional: true - /@rollup/pluginutils@4.2.1: - resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==} - engines: {node: '>= 8.0.0'} + '@rollup/pluginutils@5.3.0': dependencies: + '@types/estree': 1.0.8 estree-walker: 2.0.2 - picomatch: 2.3.1 - dev: true + picomatch: 4.0.3 - /@sindresorhus/is@5.6.0: - resolution: {integrity: sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==} - engines: {node: '>=14.16'} - dev: true + '@sindresorhus/is@5.6.0': {} - /@sindresorhus/merge-streams@1.0.0: - resolution: {integrity: sha512-rUV5WyJrJLoloD4NDN1V1+LDMDWOa4OTsT4yYJwQNpTU6FWxkxHpL7eu4w+DmiH8x/EAM1otkPE1+LaspIbplw==} - engines: {node: '>=18'} - dev: true + '@sindresorhus/merge-streams@2.3.0': {} - /@szmarczak/http-timer@5.0.1: - resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==} - engines: {node: '>=14.16'} + '@sindresorhus/merge-streams@4.0.0': {} + + '@stylistic/eslint-plugin@5.10.0(eslint@10.1.0)': + dependencies: + '@eslint-community/eslint-utils': 4.9.1(eslint@10.1.0) + '@typescript-eslint/types': 8.57.1 + eslint: 10.1.0 + eslint-visitor-keys: 4.2.1 + espree: 10.4.0 + estraverse: 5.3.0 + picomatch: 4.0.3 + + '@szmarczak/http-timer@5.0.1': dependencies: defer-to-connect: 2.0.1 - dev: true - /@tokenizer/token@0.3.0: - resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} - dev: true + '@tokenizer/inflate@0.2.7': + dependencies: + debug: 4.4.3 + fflate: 0.8.2 + token-types: 6.1.2 + transitivePeerDependencies: + - supports-color - /@trysound/sax@0.2.0: - resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} - engines: {node: '>=10.13.0'} - dev: true + '@tokenizer/token@0.3.0': {} - /@tweakpane/core@2.0.3: - resolution: {integrity: sha512-qHci4XA1Wngpwy8IzsLh5JEdscz8aDti/9YhyOaq01si+cgNDaZfwzTtXdn1+xTxSnCM+pW4Zb2/4eqn+K1ATw==} - dev: true + '@tweakpane/core@2.0.5': {} - /@types/http-cache-semantics@4.0.4: - resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==} - dev: true + '@tweenjs/tween.js@23.1.3': {} - /@types/json-schema@7.0.15: - resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - dev: true + '@types/esrecurse@4.3.1': {} - /@types/minimist@1.2.5: - resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==} - dev: true + '@types/estree@1.0.8': {} - /@types/node@20.10.5: - resolution: {integrity: sha512-nNPsNE65wjMxEKI93yOP+NPGGBJz/PoN3kZsVLee0XMiJolxSekEVD8wRwBUBqkwc7UWop0edW50yrCQW4CyRw==} - dependencies: - undici-types: 5.26.5 - dev: true + '@types/http-cache-semantics@4.2.0': {} - /@types/normalize-package-data@2.4.4: - resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} - dev: true + '@types/json-schema@7.0.15': {} - /@types/semver@7.5.6: - resolution: {integrity: sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==} - dev: true + '@types/node@25.5.0': + dependencies: + undici-types: 7.18.2 - /@types/stats.js@0.17.3: - resolution: {integrity: sha512-pXNfAD3KHOdif9EQXZ9deK82HVNaXP5ZIF5RP2QG6OQFNTaY2YIetfrE9t528vEreGQvEPRDDc8muaoYeK0SxQ==} - dev: true + '@types/stats.js@0.17.4': {} - /@types/three@0.160.0: - resolution: {integrity: sha512-jWlbUBovicUKaOYxzgkLlhkiEQJkhCVvg4W2IYD2trqD2om3VK4DGLpHH5zQHNr7RweZK/5re/4IVhbhvxbV9w==} + '@types/three@0.183.1': dependencies: - '@types/stats.js': 0.17.3 - '@types/webxr': 0.5.10 - fflate: 0.6.10 - meshoptimizer: 0.18.1 - dev: true + '@dimforge/rapier3d-compat': 0.12.0 + '@tweenjs/tween.js': 23.1.3 + '@types/stats.js': 0.17.4 + '@types/webxr': 0.5.24 + '@webgpu/types': 0.1.69 + fflate: 0.8.2 + meshoptimizer: 1.0.1 - /@types/webxr@0.5.10: - resolution: {integrity: sha512-n3u5sqXQJhf1CS68mw3Wf16FQ4cRPNBBwdYLFzq3UddiADOim1Pn3Y6PBdDilz1vOJF3ybLxJ8ZEDlLIzrOQZg==} - dev: true + '@types/webxr@0.5.24': {} - /@typescript-eslint/eslint-plugin@6.15.0(@typescript-eslint/parser@6.15.0)(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-j5qoikQqPccq9QoBAupOP+CBu8BaJ8BLjaXSioDISeTZkVO3ig7oSIKh3H+rEpee7xCXtWwSB4KIL5l6hWZzpg==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/eslint-plugin@8.57.1(@typescript-eslint/parser@8.57.1(eslint@10.1.0)(typescript@5.9.3))(eslint@10.1.0)(typescript@5.9.3)': dependencies: - '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 6.15.0(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/scope-manager': 6.15.0 - '@typescript-eslint/type-utils': 6.15.0(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/utils': 6.15.0(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/visitor-keys': 6.15.0 - debug: 4.3.4 - eslint: 8.56.0 - graphemer: 1.4.0 - ignore: 5.3.0 + '@eslint-community/regexpp': 4.12.2 + '@typescript-eslint/parser': 8.57.1(eslint@10.1.0)(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.57.1 + '@typescript-eslint/type-utils': 8.57.1(eslint@10.1.0)(typescript@5.9.3) + '@typescript-eslint/utils': 8.57.1(eslint@10.1.0)(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.57.1 + eslint: 10.1.0 + ignore: 7.0.5 natural-compare: 1.4.0 - semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@5.3.3) - typescript: 5.3.3 + ts-api-utils: 2.5.0(typescript@5.9.3) + typescript: 5.9.3 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/parser@6.15.0(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-MkgKNnsjC6QwcMdlNAel24jjkEO/0hQaMDLqP4S9zq5HBAUJNQB6y+3DwLjX7b3l2b37eNAxMPLwb3/kh8VKdA==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/parser@8.57.1(eslint@10.1.0)(typescript@5.9.3)': dependencies: - '@typescript-eslint/scope-manager': 6.15.0 - '@typescript-eslint/types': 6.15.0 - '@typescript-eslint/typescript-estree': 6.15.0(typescript@5.3.3) - '@typescript-eslint/visitor-keys': 6.15.0 - debug: 4.3.4 - eslint: 8.56.0 - typescript: 5.3.3 + '@typescript-eslint/scope-manager': 8.57.1 + '@typescript-eslint/types': 8.57.1 + '@typescript-eslint/typescript-estree': 8.57.1(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.57.1 + debug: 4.4.3 + eslint: 10.1.0 + typescript: 5.9.3 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/scope-manager@6.15.0: - resolution: {integrity: sha512-+BdvxYBltqrmgCNu4Li+fGDIkW9n//NrruzG9X1vBzaNK+ExVXPoGB71kneaVw/Jp+4rH/vaMAGC6JfMbHstVg==} - engines: {node: ^16.0.0 || >=18.0.0} + '@typescript-eslint/project-service@8.57.1(typescript@5.9.3)': dependencies: - '@typescript-eslint/types': 6.15.0 - '@typescript-eslint/visitor-keys': 6.15.0 - dev: true + '@typescript-eslint/tsconfig-utils': 8.57.1(typescript@5.9.3) + '@typescript-eslint/types': 8.57.1 + debug: 4.4.3 + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color - /@typescript-eslint/type-utils@6.15.0(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-CnmHKTfX6450Bo49hPg2OkIm/D/TVYV7jO1MCfPYGwf6x3GO0VU8YMO5AYMn+u3X05lRRxA4fWCz87GFQV6yVQ==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/scope-manager@8.57.1': dependencies: - '@typescript-eslint/typescript-estree': 6.15.0(typescript@5.3.3) - '@typescript-eslint/utils': 6.15.0(eslint@8.56.0)(typescript@5.3.3) - debug: 4.3.4 - eslint: 8.56.0 - ts-api-utils: 1.0.3(typescript@5.3.3) - typescript: 5.3.3 + '@typescript-eslint/types': 8.57.1 + '@typescript-eslint/visitor-keys': 8.57.1 + + '@typescript-eslint/tsconfig-utils@8.57.1(typescript@5.9.3)': + dependencies: + typescript: 5.9.3 + + '@typescript-eslint/type-utils@8.57.1(eslint@10.1.0)(typescript@5.9.3)': + dependencies: + '@typescript-eslint/types': 8.57.1 + '@typescript-eslint/typescript-estree': 8.57.1(typescript@5.9.3) + '@typescript-eslint/utils': 8.57.1(eslint@10.1.0)(typescript@5.9.3) + debug: 4.4.3 + eslint: 10.1.0 + ts-api-utils: 2.5.0(typescript@5.9.3) + typescript: 5.9.3 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/types@6.15.0: - resolution: {integrity: sha512-yXjbt//E4T/ee8Ia1b5mGlbNj9fB9lJP4jqLbZualwpP2BCQ5is6BcWwxpIsY4XKAhmdv3hrW92GdtJbatC6dQ==} - engines: {node: ^16.0.0 || >=18.0.0} - dev: true + '@typescript-eslint/types@8.57.1': {} - /@typescript-eslint/typescript-estree@6.15.0(typescript@5.3.3): - resolution: {integrity: sha512-7mVZJN7Hd15OmGuWrp2T9UvqR2Ecg+1j/Bp1jXUEY2GZKV6FXlOIoqVDmLpBiEiq3katvj/2n2mR0SDwtloCew==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/typescript-estree@8.57.1(typescript@5.9.3)': dependencies: - '@typescript-eslint/types': 6.15.0 - '@typescript-eslint/visitor-keys': 6.15.0 - debug: 4.3.4 - globby: 11.1.0 - is-glob: 4.0.3 - semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@5.3.3) - typescript: 5.3.3 + '@typescript-eslint/project-service': 8.57.1(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.57.1(typescript@5.9.3) + '@typescript-eslint/types': 8.57.1 + '@typescript-eslint/visitor-keys': 8.57.1 + debug: 4.4.3 + minimatch: 10.2.4 + semver: 7.7.4 + tinyglobby: 0.2.15 + ts-api-utils: 2.5.0(typescript@5.9.3) + typescript: 5.9.3 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/utils@6.15.0(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-eF82p0Wrrlt8fQSRL0bGXzK5nWPRV2dYQZdajcfzOD9+cQz9O7ugifrJxclB+xVOvWvagXfqS4Es7vpLP4augw==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 + '@typescript-eslint/utils@8.57.1(eslint@10.1.0)(typescript@5.9.3)': dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) - '@types/json-schema': 7.0.15 - '@types/semver': 7.5.6 - '@typescript-eslint/scope-manager': 6.15.0 - '@typescript-eslint/types': 6.15.0 - '@typescript-eslint/typescript-estree': 6.15.0(typescript@5.3.3) - eslint: 8.56.0 - semver: 7.5.4 + '@eslint-community/eslint-utils': 4.9.1(eslint@10.1.0) + '@typescript-eslint/scope-manager': 8.57.1 + '@typescript-eslint/types': 8.57.1 + '@typescript-eslint/typescript-estree': 8.57.1(typescript@5.9.3) + eslint: 10.1.0 + typescript: 5.9.3 transitivePeerDependencies: - supports-color - - typescript - dev: true - /@typescript-eslint/visitor-keys@6.15.0: - resolution: {integrity: sha512-1zvtdC1a9h5Tb5jU9x3ADNXO9yjP8rXlaoChu0DQX40vf5ACVpYIVIZhIMZ6d5sDXH7vq4dsZBT1fEGj8D2n2w==} - engines: {node: ^16.0.0 || >=18.0.0} + '@typescript-eslint/visitor-keys@8.57.1': dependencies: - '@typescript-eslint/types': 6.15.0 - eslint-visitor-keys: 3.4.3 - dev: true - - /@ungap/structured-clone@1.2.0: - resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - dev: true + '@typescript-eslint/types': 8.57.1 + eslint-visitor-keys: 5.0.1 - /@vercel/nft@0.24.4: - resolution: {integrity: sha512-KjYAZty7boH5fi5udp6p+lNu6nawgs++pHW+3koErMgbRkkHuToGX/FwjN5clV1FcaM3udfd4zW/sUapkMgpZw==} - engines: {node: '>=16'} - hasBin: true + '@vercel/nft@1.4.0': dependencies: - '@mapbox/node-pre-gyp': 1.0.11 - '@rollup/pluginutils': 4.2.1 - acorn: 8.11.2 + '@mapbox/node-pre-gyp': 2.0.3 + '@rollup/pluginutils': 5.3.0 + acorn: 8.16.0 + acorn-import-attributes: 1.9.5(acorn@8.16.0) async-sema: 3.1.1 bindings: 1.5.0 estree-walker: 2.0.2 - glob: 7.2.3 + glob: 13.0.6 graceful-fs: 4.2.11 - micromatch: 4.0.5 - node-gyp-build: 4.7.1 + node-gyp-build: 4.8.4 + picomatch: 4.0.3 resolve-from: 5.0.0 transitivePeerDependencies: - encoding + - rollup - supports-color - dev: true - /@xhmikosr/archive-type@6.0.1: - resolution: {integrity: sha512-PB3NeJL8xARZt52yDBupK0dNPn8uIVQDe15qNehUpoeeLWCZyAOam4vGXnoZGz2N9D1VXtjievJuCsXam2TmbQ==} - engines: {node: ^14.14.0 || >=16.0.0} + '@webgpu/types@0.1.69': {} + + '@xhmikosr/archive-type@7.1.0': dependencies: - file-type: 18.7.0 - dev: true + file-type: 20.5.0 + transitivePeerDependencies: + - supports-color - /@xhmikosr/bin-check@6.0.0: - resolution: {integrity: sha512-ZUICVP4EchT0Dmz4/Xo7l3wuNF4Zo3ua8l00I/gkgF/59+1c/0+dijfokkIxN+4HScsAnGN9ej53mhnPcsdDYg==} - engines: {node: ^14.14.0 || >=16.0.0} + '@xhmikosr/bin-check@7.1.0': dependencies: execa: 5.1.1 isexe: 2.0.0 - dev: true - /@xhmikosr/bin-wrapper@12.0.0: - resolution: {integrity: sha512-QMsHQ+ZIzzp4bSfytxRN33XMVEIljmU0M4MuEQ0zgk7agmZLYSGX4/OEFYpg4Xq08VwlhCCJ+8p+dMKL8WTa8g==} - engines: {node: '>=16'} + '@xhmikosr/bin-wrapper@13.2.0': dependencies: - '@xhmikosr/bin-check': 6.0.0 - '@xhmikosr/downloader': 14.0.0 + '@xhmikosr/bin-check': 7.1.0 + '@xhmikosr/downloader': 15.2.0 + '@xhmikosr/os-filter-obj': 3.0.0 bin-version-check: 5.1.0 - os-filter-obj: 2.0.0 - dev: true + transitivePeerDependencies: + - bare-abort-controller + - bare-buffer + - react-native-b4a + - supports-color - /@xhmikosr/decompress-tar@7.0.0: - resolution: {integrity: sha512-kyWf2hybtQVbWtB+FdRyOT+jyR5jxCNZPLqvQGB7djZj75lrpLUPEmRbyo86AtJ5OEtivpYaNWjCkqSJ8xtRWw==} - engines: {node: ^14.14.0 || >=16.0.0} + '@xhmikosr/decompress-tar@8.1.0': dependencies: - file-type: 18.7.0 - is-stream: 3.0.0 - tar-stream: 3.1.6 - dev: true + file-type: 20.5.0 + is-stream: 2.0.1 + tar-stream: 3.1.8 + transitivePeerDependencies: + - bare-abort-controller + - bare-buffer + - react-native-b4a + - supports-color - /@xhmikosr/decompress-tarbz2@7.0.0: - resolution: {integrity: sha512-3QnjipYkRgh3Dee1MWDgKmANWxOQBVN4e1IwiGNe2fHYfMYTeSkVvWREt87UIoSucKUh3E95v8uGFttgTknZcA==} - engines: {node: ^14.14.0 || >=16.0.0} + '@xhmikosr/decompress-tarbz2@8.1.0': dependencies: - '@xhmikosr/decompress-tar': 7.0.0 - file-type: 18.7.0 - is-stream: 3.0.0 - seek-bzip: 1.0.6 + '@xhmikosr/decompress-tar': 8.1.0 + file-type: 20.5.0 + is-stream: 2.0.1 + seek-bzip: 2.0.0 unbzip2-stream: 1.4.3 - dev: true + transitivePeerDependencies: + - bare-abort-controller + - bare-buffer + - react-native-b4a + - supports-color - /@xhmikosr/decompress-targz@7.0.0: - resolution: {integrity: sha512-7BNHJl92g9OLhw89zqcFS67V1LAtm4Ex02j6OiQzuE8P7Yy9lQcyBuEL3x6v436grLdL+BcFjgbmhWxnem4GHw==} - engines: {node: ^14.14.0 || >=16.0.0} + '@xhmikosr/decompress-targz@8.1.0': dependencies: - '@xhmikosr/decompress-tar': 7.0.0 - file-type: 18.7.0 - is-stream: 3.0.0 - dev: true + '@xhmikosr/decompress-tar': 8.1.0 + file-type: 20.5.0 + is-stream: 2.0.1 + transitivePeerDependencies: + - bare-abort-controller + - bare-buffer + - react-native-b4a + - supports-color - /@xhmikosr/decompress-unzip@6.0.0: - resolution: {integrity: sha512-R1HAkjXLS7RAL74YFLxYY9zYflCcYGssld9KKFDu87PnJ4h4btdhzXfSC8J5i5A2njH3oYIoCzx03RIGTH07Sg==} - engines: {node: ^14.14.0 || >=16.0.0} + '@xhmikosr/decompress-unzip@7.1.0': dependencies: - file-type: 18.7.0 + file-type: 20.5.0 get-stream: 6.0.1 - yauzl: 2.10.0 - dev: true + yauzl: 3.2.1 + transitivePeerDependencies: + - supports-color - /@xhmikosr/decompress@9.0.1: - resolution: {integrity: sha512-9Lvlt6Qdpo9SaRQyRIXCo3lgU++eMZ68lzgjcTwtuKDrlwT635+5zsHZ1yrSx/Blc5IDuVLlPkBPj5CZkx+2+Q==} - engines: {node: ^14.14.0 || >=16.0.0} + '@xhmikosr/decompress@10.2.0': dependencies: - '@xhmikosr/decompress-tar': 7.0.0 - '@xhmikosr/decompress-tarbz2': 7.0.0 - '@xhmikosr/decompress-targz': 7.0.0 - '@xhmikosr/decompress-unzip': 6.0.0 + '@xhmikosr/decompress-tar': 8.1.0 + '@xhmikosr/decompress-tarbz2': 8.1.0 + '@xhmikosr/decompress-targz': 8.1.0 + '@xhmikosr/decompress-unzip': 7.1.0 graceful-fs: 4.2.11 - make-dir: 4.0.0 strip-dirs: 3.0.0 - dev: true + transitivePeerDependencies: + - bare-abort-controller + - bare-buffer + - react-native-b4a + - supports-color - /@xhmikosr/downloader@14.0.0: - resolution: {integrity: sha512-qoKPKzGyoSZ7HxkKaMSFOA9dNnmow6nMNlOqoRvKkDvFhDVNjma6CBr/5o/oXtlQk+mEHxZWeHSNHHpWte4ApQ==} - engines: {node: '>=16'} + '@xhmikosr/downloader@15.2.0': dependencies: - '@xhmikosr/archive-type': 6.0.1 - '@xhmikosr/decompress': 9.0.1 + '@xhmikosr/archive-type': 7.1.0 + '@xhmikosr/decompress': 10.2.0 content-disposition: 0.5.4 defaults: 2.0.2 ext-name: 5.0.0 - file-type: 18.7.0 + file-type: 20.5.0 filenamify: 6.0.0 get-stream: 6.0.1 got: 13.0.0 - dev: true + transitivePeerDependencies: + - bare-abort-controller + - bare-buffer + - react-native-b4a + - supports-color - /abab@1.0.4: - resolution: {integrity: sha512-I+Wi+qiE2kUXyrRhNsWv6XsjUTBJjSoVSctKNBfLG5zG/Xe7Rjbxf13+vqYHNTwHaFU+FtSlVxOCTiMEVtPv0A==} - deprecated: Use your platform's native atob() and btoa() methods instead - requiresBuild: true - dev: true + '@xhmikosr/os-filter-obj@3.0.0': + dependencies: + arch: 3.0.0 + + abab@1.0.4: optional: true - /abbrev@1.1.1: - resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} - dev: true + abbrev@3.0.1: {} - /acorn-globals@1.0.9: - resolution: {integrity: sha512-j3/4pkfih8W4NK22gxVSXcEonTpAHOHh0hu5BoZrKcOsW/4oBPxTi4Yk3SAj+FhC1f3+bRTkXdm4019gw1vg9g==} - requiresBuild: true + acorn-globals@1.0.9: dependencies: acorn: 2.7.0 - dev: true optional: true - /acorn-jsx@5.3.2(acorn@8.11.2): - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + acorn-import-attributes@1.9.5(acorn@8.16.0): dependencies: - acorn: 8.11.2 - dev: true + acorn: 8.16.0 - /acorn-walk@8.3.1: - resolution: {integrity: sha512-TgUZgYvqZprrl7YldZNoa9OciCAyZR+Ejm9eXzKCmjsF5IKp/wgQ7Z/ZpjpGTIUPwrHQIcYeI8qDh4PsEwxMbw==} - engines: {node: '>=0.4.0'} - dev: true + acorn-jsx@5.3.2(acorn@8.16.0): + dependencies: + acorn: 8.16.0 - /acorn@2.7.0: - resolution: {integrity: sha512-pXK8ez/pVjqFdAgBkF1YPVRacuLQ9EXBKaKWaeh58WNfMkCmZhOZzu+NtKSPD5PHmCCHheQ5cD29qM1K4QTxIg==} - engines: {node: '>=0.4.0'} - hasBin: true - requiresBuild: true - dev: true - optional: true + acorn-walk@8.3.5: + dependencies: + acorn: 8.16.0 - /acorn@8.11.2: - resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==} - engines: {node: '>=0.4.0'} - hasBin: true - dev: true + acorn@2.7.0: + optional: true - /agent-base@6.0.2: - resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} - engines: {node: '>= 6.0.0'} - dependencies: - debug: 4.3.4 - transitivePeerDependencies: - - supports-color - dev: true + acorn@8.16.0: {} - /aggregate-error@4.0.1: - resolution: {integrity: sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==} - engines: {node: '>=12'} - dependencies: - clean-stack: 4.2.0 - indent-string: 5.0.0 - dev: true + agent-base@7.1.4: {} - /ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + ajv@6.14.0: dependencies: fast-deep-equal: 3.1.3 fast-json-stable-stringify: 2.1.0 json-schema-traverse: 0.4.1 uri-js: 4.4.1 - dev: true - /ajv@8.12.0: - resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} + ajv@8.18.0: dependencies: fast-deep-equal: 3.1.3 + fast-uri: 3.1.0 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 - uri-js: 4.4.1 - dev: true - /ansi-regex@2.1.1: - resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==} - engines: {node: '>=0.10.0'} - dev: true + ansi-regex@2.1.1: {} - /ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - dev: true + ansi-regex@5.0.1: {} - /ansi-regex@6.0.1: - resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} - engines: {node: '>=12'} - dev: true + ansi-regex@6.2.2: {} - /ansi-styles@2.2.1: - resolution: {integrity: sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==} - engines: {node: '>=0.10.0'} - dev: true + ansi-styles@2.2.1: {} - /ansi-styles@3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} + ansi-styles@3.2.1: dependencies: color-convert: 1.9.3 - dev: true - /ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} + ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 - dev: true - /ansi-styles@6.2.1: - resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} - engines: {node: '>=12'} - dev: true + ansi-styles@6.2.3: {} - /anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} + anymatch@3.1.3: dependencies: normalize-path: 3.0.0 picomatch: 2.3.1 - dev: true - - /aproba@2.0.0: - resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==} - dev: true - /arch@2.2.0: - resolution: {integrity: sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==} - dev: true - - /are-we-there-yet@2.0.0: - resolution: {integrity: sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==} - engines: {node: '>=10'} - dependencies: - delegates: 1.0.0 - readable-stream: 3.6.2 - dev: true + arch@3.0.0: {} - /argparse@1.0.10: - resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + argparse@1.0.10: dependencies: sprintf-js: 1.0.3 - dev: true - /argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - dev: true + argparse@2.0.1: {} - /array-buffer-byte-length@1.0.0: - resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} + array-buffer-byte-length@1.0.2: dependencies: - call-bind: 1.0.5 - is-array-buffer: 3.0.2 - dev: true + call-bound: 1.0.4 + is-array-buffer: 3.0.5 - /array-find-index@1.0.2: - resolution: {integrity: sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==} - engines: {node: '>=0.10.0'} - dev: true - - /array-union@2.1.0: - resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} - engines: {node: '>=8'} - dev: true + array-find-index@1.0.2: {} - /arraybuffer.prototype.slice@1.0.2: - resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==} - engines: {node: '>= 0.4'} + arraybuffer.prototype.slice@1.0.4: dependencies: - array-buffer-byte-length: 1.0.0 - call-bind: 1.0.5 + array-buffer-byte-length: 1.0.2 + call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.22.3 - get-intrinsic: 1.2.2 - is-array-buffer: 3.0.2 - is-shared-array-buffer: 1.0.2 - dev: true - - /arrgv@1.0.2: - resolution: {integrity: sha512-a4eg4yhp7mmruZDQFqVMlxNRFGi/i1r87pt8SDHy0/I8PqSXoUTlWZRdAZo0VXgvEARcujbtTk8kiZRi1uDGRw==} - engines: {node: '>=8.0.0'} - dev: true + es-abstract: 1.24.1 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + is-array-buffer: 3.0.5 - /arrify@1.0.1: - resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} - engines: {node: '>=0.10.0'} - dev: true + arrgv@1.0.2: {} - /arrify@3.0.0: - resolution: {integrity: sha512-tLkvA81vQG/XqE2mjDkGQHoOINtMHtysSnemrmoGe6PydDPMRbVugqyk4A6V/WDWEfm3l+0d8anA9r8cv/5Jaw==} - engines: {node: '>=12'} - dev: true + arrify@3.0.0: {} - /asn1@0.2.6: - resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==} - requiresBuild: true + asn1@0.2.6: dependencies: safer-buffer: 2.1.2 - dev: true optional: true - /assert-plus@1.0.0: - resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==} - engines: {node: '>=0.8'} - requiresBuild: true - dev: true + assert-plus@1.0.0: optional: true - /astral-regex@2.0.0: - resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} - engines: {node: '>=8'} - dev: true + astral-regex@2.0.0: {} - /async-sema@3.1.1: - resolution: {integrity: sha512-tLRNUXati5MFePdAk8dw7Qt7DpxPB60ofAgn8WRhW6a2rcimZnYBP9oxHiv0OHy+Wz7kPMG+t4LGdt31+4EmGg==} - dev: true + async-function@1.0.0: {} - /asynckit@0.4.0: - resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - requiresBuild: true - dev: true + async-sema@3.1.1: {} + + asynckit@0.4.0: optional: true - /autoprefixer@10.4.16(postcss@8.4.32): - resolution: {integrity: sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==} - engines: {node: ^10 || ^12 || >=14} - hasBin: true - peerDependencies: - postcss: ^8.1.0 + autoprefixer@10.4.27(postcss@8.5.8): dependencies: - browserslist: 4.22.2 - caniuse-lite: 1.0.30001571 - fraction.js: 4.3.7 - normalize-range: 0.1.2 - picocolors: 1.0.0 - postcss: 8.4.32 + browserslist: 4.28.1 + caniuse-lite: 1.0.30001780 + fraction.js: 5.3.4 + picocolors: 1.1.1 + postcss: 8.5.8 postcss-value-parser: 4.2.0 - dev: true - /ava@6.0.1: - resolution: {integrity: sha512-9zR0wOwlcJdOWwHOKnpi0GrPRLTlxDFapGalP4rGD0oQRKxDVoucBBWvxVQ/2cPv10Hx1PkDXLJH5iUzhPn0/g==} - engines: {node: ^18.18 || ^20.8 || ^21} - hasBin: true - peerDependencies: - '@ava/typescript': '*' - peerDependenciesMeta: - '@ava/typescript': - optional: true + ava@7.0.0: dependencies: - '@vercel/nft': 0.24.4 - acorn: 8.11.2 - acorn-walk: 8.3.1 - ansi-styles: 6.2.1 + '@vercel/nft': 1.4.0 + acorn: 8.16.0 + acorn-walk: 8.3.5 + ansi-styles: 6.2.3 arrgv: 1.0.2 arrify: 3.0.0 - callsites: 4.1.0 - cbor: 9.0.1 - chalk: 5.3.0 + callsites: 4.2.0 + cbor: 10.0.12 + chalk: 5.6.2 chunkd: 2.0.1 - ci-info: 4.0.0 + ci-info: 4.4.0 ci-parallel-vars: 1.0.1 - cli-truncate: 4.0.0 + cli-truncate: 5.2.0 code-excerpt: 4.0.0 common-path-prefix: 3.0.0 concordance: 5.0.4 currently-unhandled: 0.4.1 - debug: 4.3.4 - emittery: 1.0.1 - figures: 6.0.1 - globby: 14.0.0 + debug: 4.4.3 + emittery: 1.2.1 + figures: 6.1.0 + globby: 16.1.1 ignore-by-default: 2.1.0 indent-string: 5.0.0 is-plain-object: 5.0.0 is-promise: 4.0.0 - matcher: 5.0.0 - memoize: 10.0.0 + matcher: 6.0.0 + memoize: 10.2.0 ms: 2.1.3 - p-map: 6.0.0 + p-map: 7.0.4 package-config: 5.0.0 - picomatch: 3.0.1 - plur: 5.1.0 - pretty-ms: 8.0.0 + picomatch: 4.0.3 + plur: 6.0.0 + pretty-ms: 9.3.0 resolve-cwd: 3.0.0 stack-utils: 2.0.6 - strip-ansi: 7.1.0 supertap: 3.0.1 temp-dir: 3.0.0 - write-file-atomic: 5.0.1 - yargs: 17.7.2 + write-file-atomic: 7.0.1 + yargs: 18.0.0 transitivePeerDependencies: - encoding + - rollup - supports-color - dev: true - /available-typed-arrays@1.0.5: - resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} - engines: {node: '>= 0.4'} - dev: true + available-typed-arrays@1.0.7: + dependencies: + possible-typed-array-names: 1.1.0 - /aws-sign2@0.7.0: - resolution: {integrity: sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==} - requiresBuild: true - dev: true + aws-sign2@0.7.0: optional: true - /aws4@1.12.0: - resolution: {integrity: sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==} - requiresBuild: true - dev: true + aws4@1.13.2: optional: true - /b4a@1.6.4: - resolution: {integrity: sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw==} - dev: true + b4a@1.8.0: {} - /babel-code-frame@6.26.0: - resolution: {integrity: sha512-XqYMR2dfdGMW+hd0IUZ2PwK+fGeFkOxZJ0wY+JaQAHzt1Zx8LcvpiZD2NiGkEG8qx0CfkAOr5xt76d1e8vG90g==} + babel-code-frame@6.26.0: dependencies: chalk: 1.1.3 esutils: 2.0.3 js-tokens: 3.0.2 - dev: true - /babel-generator@6.11.4: - resolution: {integrity: sha512-JFBWXdE89s4V3E8kZroEEsnQF2A4/+55IzciGjnAATXj7HTMSum3SrW7QRYGSDLWTTQF+hhD3BmC2UFGgtM0Yw==} + babel-generator@6.11.4: dependencies: babel-messages: 6.23.0 babel-runtime: 6.26.0 babel-types: 6.26.0 detect-indent: 3.0.1 - lodash: 4.17.21 + lodash: 4.17.23 source-map: 0.5.7 - dev: true - /babel-generator@6.26.1: - resolution: {integrity: sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==} + babel-generator@6.26.1: dependencies: babel-messages: 6.23.0 babel-runtime: 6.26.0 babel-types: 6.26.0 detect-indent: 4.0.0 jsesc: 1.3.0 - lodash: 4.17.21 + lodash: 4.17.23 source-map: 0.5.7 trim-right: 1.0.1 - dev: true - /babel-messages@6.23.0: - resolution: {integrity: sha512-Bl3ZiA+LjqaMtNYopA9TYE9HP1tQ+E5dLxE0XrAzcIJeK2UqF0/EaqXwBn9esd4UmTfEab+P+UYQ1GnioFIb/w==} + babel-messages@6.23.0: dependencies: babel-runtime: 6.26.0 - dev: true - /babel-runtime@6.26.0: - resolution: {integrity: sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==} + babel-runtime@6.26.0: dependencies: core-js: 2.6.12 regenerator-runtime: 0.11.1 - dev: true - /babel-traverse@6.26.0: - resolution: {integrity: sha512-iSxeXx7apsjCHe9c7n8VtRXGzI2Bk1rBSOJgCCjfyXb6v1aCqE1KSEpq/8SXuVN8Ka/Rh1WDTF0MDzkvTA4MIA==} + babel-traverse@6.26.0: dependencies: babel-code-frame: 6.26.0 babel-messages: 6.23.0 @@ -1538,247 +5198,200 @@ packages: debug: 2.6.9 globals: 9.18.0 invariant: 2.2.4 - lodash: 4.17.21 + lodash: 4.17.23 transitivePeerDependencies: - supports-color - dev: true - /babel-types@6.26.0: - resolution: {integrity: sha512-zhe3V/26rCWsEZK8kZN+HaQj5yQ1CilTObixFzKW1UWjqG7618Twz6YEsCnjfg5gBcJh02DrpCkS9h98ZqDY+g==} + babel-types@6.26.0: dependencies: babel-runtime: 6.26.0 esutils: 2.0.3 - lodash: 4.17.21 + lodash: 4.17.23 to-fast-properties: 1.0.3 - dev: true - /babylon@6.18.0: - resolution: {integrity: sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==} - hasBin: true - dev: true + babylon@6.18.0: {} - /balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - dev: true + balanced-match@1.0.2: {} - /balanced-match@2.0.0: - resolution: {integrity: sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==} - dev: true + balanced-match@4.0.4: {} - /base64-js@1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - dev: true + bare-events@2.8.2: {} - /bcrypt-pbkdf@1.0.2: - resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==} - requiresBuild: true + bare-fs@4.5.6: + dependencies: + bare-events: 2.8.2 + bare-path: 3.0.0 + bare-stream: 2.10.0(bare-events@2.8.2) + bare-url: 2.4.0 + fast-fifo: 1.3.2 + transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a + + bare-os@3.8.0: {} + + bare-path@3.0.0: + dependencies: + bare-os: 3.8.0 + + bare-stream@2.10.0(bare-events@2.8.2): + dependencies: + streamx: 2.25.0 + teex: 1.0.1 + optionalDependencies: + bare-events: 2.8.2 + transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a + + bare-url@2.4.0: + dependencies: + bare-path: 3.0.0 + + base64-js@1.5.1: {} + + baseline-browser-mapping@2.10.9: {} + + bcrypt-pbkdf@1.0.2: dependencies: tweetnacl: 0.14.5 - dev: true optional: true - /bin-version-check@5.1.0: - resolution: {integrity: sha512-bYsvMqJ8yNGILLz1KP9zKLzQ6YpljV3ln1gqhuLkUtyfGi3qXKGuK2p+U4NAvjVFzDFiBBtOpCOSFNuYYEGZ5g==} - engines: {node: '>=12'} + bin-version-check@5.1.0: dependencies: bin-version: 6.0.0 - semver: 7.5.4 + semver: 7.7.4 semver-truncate: 3.0.0 - dev: true - /bin-version@6.0.0: - resolution: {integrity: sha512-nk5wEsP4RiKjG+vF+uG8lFsEn4d7Y6FVDamzzftSunXOoOcOOkzcWdKVlGgFFwlUQCj63SgnUkLLGF8v7lufhw==} - engines: {node: '>=12'} + bin-version@6.0.0: dependencies: execa: 5.1.1 find-versions: 5.1.0 - dev: true - /binary-extensions@2.2.0: - resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} - engines: {node: '>=8'} - dev: true + binary-extensions@2.3.0: {} - /bindings@1.5.0: - resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} + bindings@1.5.0: dependencies: file-uri-to-path: 1.0.0 - dev: true - /blueimp-md5@2.19.0: - resolution: {integrity: sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w==} - dev: true + blueimp-md5@2.19.0: {} - /boolbase@1.0.0: - resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} - dev: true + boolbase@1.0.0: {} - /brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + brace-expansion@1.1.12: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - dev: true - /braces@3.0.2: - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} - engines: {node: '>=8'} + brace-expansion@5.0.4: dependencies: - fill-range: 7.0.1 - dev: true + balanced-match: 4.0.4 - /browserslist@4.22.2: - resolution: {integrity: sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true + braces@3.0.3: dependencies: - caniuse-lite: 1.0.30001571 - electron-to-chromium: 1.4.616 - node-releases: 2.0.14 - update-browserslist-db: 1.0.13(browserslist@4.22.2) - dev: true + fill-range: 7.1.1 - /buffer-crc32@0.2.13: - resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} - dev: true + browserslist@4.28.1: + dependencies: + baseline-browser-mapping: 2.10.9 + caniuse-lite: 1.0.30001780 + electron-to-chromium: 1.5.321 + node-releases: 2.0.36 + update-browserslist-db: 1.2.3(browserslist@4.28.1) - /buffer-from@1.1.2: - resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - dev: true + buffer-crc32@0.2.13: {} - /buffer@5.7.1: - resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + buffer-from@1.1.2: {} + + buffer@5.7.1: dependencies: base64-js: 1.5.1 ieee754: 1.2.1 - dev: true - /cacheable-lookup@7.0.0: - resolution: {integrity: sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==} - engines: {node: '>=14.16'} - dev: true + cacheable-lookup@7.0.0: {} - /cacheable-request@10.2.14: - resolution: {integrity: sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==} - engines: {node: '>=14.16'} + cacheable-request@10.2.14: dependencies: - '@types/http-cache-semantics': 4.0.4 + '@types/http-cache-semantics': 4.2.0 get-stream: 6.0.1 - http-cache-semantics: 4.1.1 + http-cache-semantics: 4.2.0 keyv: 4.5.4 mimic-response: 4.0.0 - normalize-url: 8.0.0 + normalize-url: 8.1.1 responselike: 3.0.0 - dev: true - /call-bind@1.0.5: - resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==} + cacheable@2.3.4: dependencies: - function-bind: 1.1.2 - get-intrinsic: 1.2.2 - set-function-length: 1.1.1 - dev: true + '@cacheable/memory': 2.0.8 + '@cacheable/utils': 2.4.0 + hookified: 1.15.1 + keyv: 5.6.0 + qified: 0.9.0 - /callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} - dev: true + call-bind-apply-helpers@1.0.2: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 - /callsites@4.1.0: - resolution: {integrity: sha512-aBMbD1Xxay75ViYezwT40aQONfr+pSXTHwNKvIXhXD6+LY3F1dLIcceoC5OZKBVHbXcysz1hL9D2w0JJIMXpUw==} - engines: {node: '>=12.20'} - dev: true + call-bind@1.0.8: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + get-intrinsic: 1.3.0 + set-function-length: 1.2.2 - /camelcase-keys@7.0.2: - resolution: {integrity: sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg==} - engines: {node: '>=12'} + call-bound@1.0.4: dependencies: - camelcase: 6.3.0 - map-obj: 4.3.0 - quick-lru: 5.1.1 - type-fest: 1.4.0 - dev: true + call-bind-apply-helpers: 1.0.2 + get-intrinsic: 1.3.0 - /camelcase@6.3.0: - resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} - engines: {node: '>=10'} - dev: true + callsites@3.1.0: {} - /caniuse-api@3.0.0: - resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} + callsites@4.2.0: {} + + caniuse-api@3.0.0: dependencies: - browserslist: 4.22.2 - caniuse-lite: 1.0.30001571 + browserslist: 4.28.1 + caniuse-lite: 1.0.30001780 lodash.memoize: 4.1.2 lodash.uniq: 4.5.0 - dev: true - /caniuse-lite@1.0.30001571: - resolution: {integrity: sha512-tYq/6MoXhdezDLFZuCO/TKboTzuQ/xR5cFdgXPfDtM7/kchBO3b4VWghE/OAi/DV7tTdhmLjZiZBZi1fA/GheQ==} - dev: true + caniuse-lite@1.0.30001780: {} - /caseless@0.12.0: - resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} - requiresBuild: true - dev: true + caseless@0.12.0: optional: true - /cbor@9.0.1: - resolution: {integrity: sha512-/TQOWyamDxvVIv+DY9cOLNuABkoyz8K/F3QE56539pGVYohx0+MEA1f4lChFTX79dBTBS7R1PF6ovH7G+VtBfQ==} - engines: {node: '>=16'} + cbor@10.0.12: dependencies: nofilter: 3.1.0 - dev: true - /chalk@1.1.3: - resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} - engines: {node: '>=0.10.0'} + chalk@1.1.3: dependencies: ansi-styles: 2.2.1 escape-string-regexp: 1.0.5 has-ansi: 2.0.0 strip-ansi: 3.0.1 supports-color: 2.0.0 - dev: true - /chalk@2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} - engines: {node: '>=4'} + chalk@2.4.2: dependencies: ansi-styles: 3.2.1 escape-string-regexp: 1.0.5 supports-color: 5.5.0 - dev: true - - /chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - dev: true - /chalk@5.3.0: - resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - dev: true + chalk@5.6.2: {} - /cheerio@0.20.0: - resolution: {integrity: sha512-e5jCTzJc28MWkrLLjB1mu3ks7rDQJLC5y/JMdQkOAEX/dmJk62rC6Xae1yvOO4xyCxLpzcth3jIZ7nypmjQ/0w==} - engines: {node: '>= 0.6'} + cheerio@0.20.0: dependencies: css-select: 1.2.0 dom-serializer: 0.1.1 entities: 1.1.2 htmlparser2: 3.8.3 - lodash: 4.17.21 + lodash: 4.17.23 optionalDependencies: jsdom: 7.2.2 - dev: true - /cheerio@0.22.0: - resolution: {integrity: sha512-8/MzidM6G/TgRelkzDG13y3Y9LxBjCb+8yOEZ9+wwq5gVF2w2pV0wmHvjfT0RvuxGyR7UEuK36r+yYMbT4uKgA==} - engines: {node: '>= 0.6'} + cheerio@0.22.0: dependencies: css-select: 1.2.0 dom-serializer: 0.1.1 @@ -1796,26 +5409,20 @@ packages: lodash.reduce: 4.6.0 lodash.reject: 4.6.0 lodash.some: 4.6.0 - dev: true - /cheerio@1.0.0-rc.2: - resolution: {integrity: sha512-9LDHQy1jHc/eXMzPN6/oah9Qba4CjdKECC7YYEE/2zge/tsGwt19NQp5NFdfd5Lx6TZlyC5SXNQkG41P9r6XDg==} - engines: {node: '>= 0.6'} + cheerio@1.0.0-rc.2: dependencies: css-select: 1.2.0 dom-serializer: 0.1.1 entities: 1.1.2 htmlparser2: 3.10.1 - lodash: 4.17.21 + lodash: 4.17.23 parse5: 3.0.3 - dev: true - /chokidar@3.5.3: - resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} - engines: {node: '>= 8.10.0'} + chokidar@3.6.0: dependencies: anymatch: 3.1.3 - braces: 3.0.2 + braces: 3.0.3 glob-parent: 5.1.2 is-binary-path: 2.1.0 is-glob: 4.0.3 @@ -1823,898 +5430,561 @@ packages: readdirp: 3.6.0 optionalDependencies: fsevents: 2.3.3 - dev: true - /chownr@2.0.0: - resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} - engines: {node: '>=10'} - dev: true + chokidar@4.0.3: + dependencies: + readdirp: 4.1.2 - /chunkd@2.0.1: - resolution: {integrity: sha512-7d58XsFmOq0j6el67Ug9mHf9ELUXsQXYJBkyxhH/k+6Ke0qXRnv0kbemx+Twc6fRJ07C49lcbdgm9FL1Ei/6SQ==} - dev: true + chownr@3.0.0: {} - /ci-info@4.0.0: - resolution: {integrity: sha512-TdHqgGf9odd8SXNuxtUBVx8Nv+qZOejE6qyqiy5NtbYYQOeFa6zmHkxlPzmaLxWWHsU6nJmB7AETdVPi+2NBUg==} - engines: {node: '>=8'} - dev: true + chunkd@2.0.1: {} - /ci-parallel-vars@1.0.1: - resolution: {integrity: sha512-uvzpYrpmidaoxvIQHM+rKSrigjOe9feHYbw4uOI2gdfe1C3xIlxO+kVXq83WQWNniTf8bAxVpy+cQeFQsMERKg==} - dev: true + ci-info@4.4.0: {} - /clean-stack@4.2.0: - resolution: {integrity: sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==} - engines: {node: '>=12'} - dependencies: - escape-string-regexp: 5.0.0 - dev: true + ci-parallel-vars@1.0.1: {} - /cli-truncate@4.0.0: - resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} - engines: {node: '>=18'} + cli-truncate@5.2.0: dependencies: - slice-ansi: 5.0.0 - string-width: 7.0.0 - dev: true + slice-ansi: 8.0.0 + string-width: 8.2.0 - /cliui@8.0.1: - resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} - engines: {node: '>=12'} + cliui@8.0.1: dependencies: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 7.0.0 - dev: true - /code-excerpt@4.0.0: - resolution: {integrity: sha512-xxodCmBen3iy2i0WtAK8FlFNrRzjUqjRsMfho58xT/wvZU1YTM3fCnRjcy1gJPMepaRlgm/0e6w8SpWHpn3/cA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + cliui@9.0.1: + dependencies: + string-width: 7.2.0 + strip-ansi: 7.2.0 + wrap-ansi: 9.0.2 + + code-excerpt@4.0.0: dependencies: convert-to-spaces: 2.0.1 - dev: true - /color-convert@1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + color-convert@1.9.3: dependencies: color-name: 1.1.3 - dev: true - /color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} + color-convert@2.0.1: dependencies: color-name: 1.1.4 - dev: true - /color-logger@0.0.3: - resolution: {integrity: sha512-s4oriek7VTdSmDbS5chJhNui3uUzlk/mU39V4HnOUv0KphRXpIj73lq4wY5f8l/x+WtHUhiV+FCzsrNO1w6REA==} - dev: true - - /color-logger@0.0.6: - resolution: {integrity: sha512-0iBj3eHRYnor8EJi3oQ1kixbr7B2Sbw1InxjsYZxS+q2H+Ii69m3ARYSJeYIqmf/QRtFhWnR1v97wp8N7ABubw==} - dev: true + color-logger@0.0.3: {} - /color-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - dev: true + color-logger@0.0.6: {} - /color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - dev: true + color-name@1.1.3: {} - /color-support@1.1.3: - resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} - hasBin: true - dev: true + color-name@1.1.4: {} - /colord@2.9.3: - resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} - dev: true + colord@2.9.3: {} - /combined-stream@1.0.8: - resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} - engines: {node: '>= 0.8'} - requiresBuild: true + combined-stream@1.0.8: dependencies: delayed-stream: 1.0.0 - dev: true optional: true - /commander@2.20.3: - resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} - dev: true + commander@11.1.0: {} - /commander@7.2.0: - resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} - engines: {node: '>= 10'} - dev: true + commander@12.1.0: {} - /common-path-prefix@3.0.0: - resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==} - dev: true + commander@6.2.1: {} - /concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - dev: true + common-path-prefix@3.0.0: {} - /concordance@5.0.4: - resolution: {integrity: sha512-OAcsnTEYu1ARJqWVGwf4zh4JDfHZEaSNlNccFmt8YjB2l/n19/PF2viLINHc57vO4FKIAFl2FWASIGZZWZ2Kxw==} - engines: {node: '>=10.18.0 <11 || >=12.14.0 <13 || >=14'} + concat-map@0.0.1: {} + + concordance@5.0.4: dependencies: date-time: 3.1.0 esutils: 2.0.3 fast-diff: 1.3.0 js-string-escape: 1.0.1 - lodash: 4.17.21 + lodash: 4.17.23 md5-hex: 3.0.1 - semver: 7.5.4 + semver: 7.7.4 well-known-symbols: 2.0.0 - dev: true - /console-control-strings@1.1.0: - resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} - dev: true + consola@3.4.2: {} - /content-disposition@0.5.4: - resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} - engines: {node: '>= 0.6'} + content-disposition@0.5.4: dependencies: safe-buffer: 5.2.1 - dev: true - /convert-to-spaces@2.0.1: - resolution: {integrity: sha512-rcQ1bsQO9799wq24uE5AM2tAILy4gXGIK/njFWcVQkGNZ96edlpY+A7bjwvzjYvLDyzmG1MmMLZhpcsb+klNMQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: true + convert-to-spaces@2.0.1: {} - /core-js@2.6.12: - resolution: {integrity: sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==} - deprecated: core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js. - requiresBuild: true - dev: true + copy-file@11.1.0: + dependencies: + graceful-fs: 4.2.11 + p-event: 6.0.1 - /core-util-is@1.0.2: - resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} - requiresBuild: true - dev: true + core-js@2.6.12: {} + + core-util-is@1.0.2: optional: true - /core-util-is@1.0.3: - resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} - dev: true + core-util-is@1.0.3: {} - /cosmiconfig@8.3.6(typescript@5.3.3): - resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} - engines: {node: '>=14'} - peerDependencies: - typescript: '>=4.9.5' - peerDependenciesMeta: - typescript: - optional: true + cosmiconfig@9.0.1(typescript@5.9.3): dependencies: - import-fresh: 3.3.0 - js-yaml: 4.1.0 + env-paths: 2.2.1 + import-fresh: 3.3.1 + js-yaml: 4.1.1 parse-json: 5.2.0 - path-type: 4.0.0 - typescript: 5.3.3 - dev: true - - /cp-file@10.0.0: - resolution: {integrity: sha512-vy2Vi1r2epK5WqxOLnskeKeZkdZvTKfFZQCplE3XWsP+SUJyd5XAUFC9lFgTjjXJF2GMne/UML14iEmkAaDfFg==} - engines: {node: '>=14.16'} - dependencies: - graceful-fs: 4.2.11 - nested-error-stacks: 2.1.1 - p-event: 5.0.1 - dev: true + optionalDependencies: + typescript: 5.9.3 - /cpy-cli@5.0.0: - resolution: {integrity: sha512-fb+DZYbL9KHc0BC4NYqGRrDIJZPXUmjjtqdw4XRRg8iV8dIfghUX/WiL+q4/B/KFTy3sK6jsbUhBaz0/Hxg7IQ==} - engines: {node: '>=16'} - hasBin: true + cpy-cli@7.0.0: dependencies: - cpy: 10.1.0 - meow: 12.1.1 - dev: true + cpy: 13.2.1 + globby: 16.1.1 + meow: 14.1.0 - /cpy@10.1.0: - resolution: {integrity: sha512-VC2Gs20JcTyeQob6UViBLnyP0bYHkBh6EiKzot9vi2DmeGlFT9Wd7VG3NBrkNx/jYvFBeyDOMMHdHQhbtKLgHQ==} - engines: {node: '>=16'} + cpy@13.2.1: dependencies: - arrify: 3.0.0 - cp-file: 10.0.0 - globby: 13.2.2 + copy-file: 11.1.0 + globby: 16.1.1 junk: 4.0.1 - micromatch: 4.0.5 - nested-error-stacks: 2.1.1 - p-filter: 3.0.0 - p-map: 6.0.0 - dev: true - - /cross-spawn@6.0.5: - resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} - engines: {node: '>=4.8'} + micromatch: 4.0.8 + p-filter: 4.1.0 + p-map: 7.0.4 + + cross-spawn@6.0.6: dependencies: nice-try: 1.0.5 path-key: 2.0.1 semver: 5.7.2 shebang-command: 1.2.0 which: 1.3.1 - dev: true - /cross-spawn@7.0.3: - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} - engines: {node: '>= 8'} + cross-spawn@7.0.6: dependencies: path-key: 3.1.1 shebang-command: 2.0.0 which: 2.0.2 - dev: true - /css-blank-pseudo@6.0.1(postcss@8.4.32): - resolution: {integrity: sha512-goSnEITByxTzU4Oh5oJZrEWudxTqk7L6IXj1UW69pO6Hv0UdX+Vsrt02FFu5DweRh2bLu6WpX/+zsQCu5O1gKw==} - engines: {node: ^14 || ^16 || >=18} - peerDependencies: - postcss: ^8.4 + css-blank-pseudo@8.0.1(postcss@8.5.8): dependencies: - postcss: 8.4.32 - postcss-selector-parser: 6.0.13 - dev: true + postcss: 8.5.8 + postcss-selector-parser: 7.1.1 - /css-declaration-sorter@7.1.1(postcss@8.4.32): - resolution: {integrity: sha512-dZ3bVTEEc1vxr3Bek9vGwfB5Z6ESPULhcRvO472mfjVnj8jRcTnKO8/JTczlvxM10Myb+wBM++1MtdO76eWcaQ==} - engines: {node: ^14 || ^16 || >=18} - peerDependencies: - postcss: ^8.0.9 + css-declaration-sorter@7.3.1(postcss@8.5.8): dependencies: - postcss: 8.4.32 - dev: true + postcss: 8.5.8 - /css-functions-list@3.2.1: - resolution: {integrity: sha512-Nj5YcaGgBtuUmn1D7oHqPW0c9iui7xsTsj5lIX8ZgevdfhmjFfKB3r8moHJtNJnctnYXJyYX5I1pp90HM4TPgQ==} - engines: {node: '>=12 || >=16'} - dev: true + css-functions-list@3.3.3: {} - /css-has-pseudo@6.0.1(postcss@8.4.32): - resolution: {integrity: sha512-WwoVKqNxApfEI7dWFyaHoeFCcUPD+lPyjL6lNpRUNX7IyIUuVpawOTwwA5D0ZR6V2xQZonNPVj8kEcxzEaAQfQ==} - engines: {node: ^14 || ^16 || >=18} - peerDependencies: - postcss: ^8.4 + css-has-pseudo@8.0.0(postcss@8.5.8): dependencies: - '@csstools/selector-specificity': 3.0.1(postcss-selector-parser@6.0.13) - postcss: 8.4.32 - postcss-selector-parser: 6.0.13 + '@csstools/selector-specificity': 6.0.0(postcss-selector-parser@7.1.1) + postcss: 8.5.8 + postcss-selector-parser: 7.1.1 postcss-value-parser: 4.2.0 - dev: true - /css-prefers-color-scheme@9.0.1(postcss@8.4.32): - resolution: {integrity: sha512-iFit06ochwCKPRiWagbTa1OAWCvWWVdEnIFd8BaRrgO8YrrNh4RAWUQTFcYX5tdFZgFl1DJ3iiULchZyEbnF4g==} - engines: {node: ^14 || ^16 || >=18} - peerDependencies: - postcss: ^8.4 + css-prefers-color-scheme@11.0.0(postcss@8.5.8): dependencies: - postcss: 8.4.32 - dev: true + postcss: 8.5.8 - /css-select@1.2.0: - resolution: {integrity: sha512-dUQOBoqdR7QwV90WysXPLXG5LO7nhYBgiWVfxF80DKPF8zx1t/pUd2FYy73emg3zrjtM6dzmYgbHKfV2rxiHQA==} + css-select@1.2.0: dependencies: boolbase: 1.0.0 css-what: 2.1.3 domutils: 1.5.1 nth-check: 1.0.2 - dev: true - /css-select@5.1.0: - resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} + css-select@5.2.2: dependencies: boolbase: 1.0.0 - css-what: 6.1.0 + css-what: 6.2.2 domhandler: 5.0.3 - domutils: 3.1.0 + domutils: 3.2.2 nth-check: 2.1.1 - dev: true - /css-tree@2.2.1: - resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==} - engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + css-tree@2.2.1: dependencies: mdn-data: 2.0.28 - source-map-js: 1.0.2 - dev: true - - /css-tree@2.3.1: - resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} - engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} - dependencies: - mdn-data: 2.0.30 - source-map-js: 1.0.2 - dev: true - - /css-what@2.1.3: - resolution: {integrity: sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==} - dev: true - - /css-what@6.1.0: - resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} - engines: {node: '>= 6'} - dev: true - - /cssdb@7.9.1: - resolution: {integrity: sha512-fqy6ZnNfpb8qAvTT0qijWyTsUmYThsDX2F2ctMG4ceI7mI4DtsMILSiMBiuuDnVIYTyWvCctdp9Nb08p/6m2SQ==} - dev: true - - /cssesc@3.0.0: - resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} - engines: {node: '>=4'} - hasBin: true - dev: true - - /cssnano-preset-default@6.0.2(postcss@8.4.32): - resolution: {integrity: sha512-VnZybFeZ63AiVqIUNlxqMxpj9VU8B5j0oKgP7WyVt/7mkyf97KsYkNzsPTV/RVmy54Pg7cBhOK4WATbdCB44gw==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 - dependencies: - css-declaration-sorter: 7.1.1(postcss@8.4.32) - cssnano-utils: 4.0.1(postcss@8.4.32) - postcss: 8.4.32 - postcss-calc: 9.0.1(postcss@8.4.32) - postcss-colormin: 6.0.1(postcss@8.4.32) - postcss-convert-values: 6.0.1(postcss@8.4.32) - postcss-discard-comments: 6.0.1(postcss@8.4.32) - postcss-discard-duplicates: 6.0.1(postcss@8.4.32) - postcss-discard-empty: 6.0.1(postcss@8.4.32) - postcss-discard-overridden: 6.0.1(postcss@8.4.32) - postcss-merge-longhand: 6.0.1(postcss@8.4.32) - postcss-merge-rules: 6.0.2(postcss@8.4.32) - postcss-minify-font-values: 6.0.1(postcss@8.4.32) - postcss-minify-gradients: 6.0.1(postcss@8.4.32) - postcss-minify-params: 6.0.1(postcss@8.4.32) - postcss-minify-selectors: 6.0.1(postcss@8.4.32) - postcss-normalize-charset: 6.0.1(postcss@8.4.32) - postcss-normalize-display-values: 6.0.1(postcss@8.4.32) - postcss-normalize-positions: 6.0.1(postcss@8.4.32) - postcss-normalize-repeat-style: 6.0.1(postcss@8.4.32) - postcss-normalize-string: 6.0.1(postcss@8.4.32) - postcss-normalize-timing-functions: 6.0.1(postcss@8.4.32) - postcss-normalize-unicode: 6.0.1(postcss@8.4.32) - postcss-normalize-url: 6.0.1(postcss@8.4.32) - postcss-normalize-whitespace: 6.0.1(postcss@8.4.32) - postcss-ordered-values: 6.0.1(postcss@8.4.32) - postcss-reduce-initial: 6.0.1(postcss@8.4.32) - postcss-reduce-transforms: 6.0.1(postcss@8.4.32) - postcss-svgo: 6.0.1(postcss@8.4.32) - postcss-unique-selectors: 6.0.1(postcss@8.4.32) - dev: true - - /cssnano-utils@4.0.1(postcss@8.4.32): - resolution: {integrity: sha512-6qQuYDqsGoiXssZ3zct6dcMxiqfT6epy7x4R0TQJadd4LWO3sPR6JH6ZByOvVLoZ6EdwPGgd7+DR1EmX3tiXQQ==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 - dependencies: - postcss: 8.4.32 - dev: true - - /cssnano@6.0.2(postcss@8.4.32): - resolution: {integrity: sha512-Tu9wv8UdN6CoiQnIVkCNvi+0rw/BwFWOJBlg2bVfEyKaadSuE3Gq/DD8tniVvggTJGwK88UjqZp7zL5sv6t1aA==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 - dependencies: - cssnano-preset-default: 6.0.2(postcss@8.4.32) - lilconfig: 3.0.0 - postcss: 8.4.32 - dev: true - - /csso@5.0.5: - resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==} - engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + source-map-js: 1.2.1 + + css-tree@3.2.1: + dependencies: + mdn-data: 2.27.1 + source-map-js: 1.2.1 + + css-what@2.1.3: {} + + css-what@6.2.2: {} + + cssdb@8.8.0: {} + + cssesc@3.0.0: {} + + cssnano-preset-default@7.0.11(postcss@8.5.8): + dependencies: + browserslist: 4.28.1 + css-declaration-sorter: 7.3.1(postcss@8.5.8) + cssnano-utils: 5.0.1(postcss@8.5.8) + postcss: 8.5.8 + postcss-calc: 10.1.1(postcss@8.5.8) + postcss-colormin: 7.0.6(postcss@8.5.8) + postcss-convert-values: 7.0.9(postcss@8.5.8) + postcss-discard-comments: 7.0.6(postcss@8.5.8) + postcss-discard-duplicates: 7.0.2(postcss@8.5.8) + postcss-discard-empty: 7.0.1(postcss@8.5.8) + postcss-discard-overridden: 7.0.1(postcss@8.5.8) + postcss-merge-longhand: 7.0.5(postcss@8.5.8) + postcss-merge-rules: 7.0.8(postcss@8.5.8) + postcss-minify-font-values: 7.0.1(postcss@8.5.8) + postcss-minify-gradients: 7.0.1(postcss@8.5.8) + postcss-minify-params: 7.0.6(postcss@8.5.8) + postcss-minify-selectors: 7.0.6(postcss@8.5.8) + postcss-normalize-charset: 7.0.1(postcss@8.5.8) + postcss-normalize-display-values: 7.0.1(postcss@8.5.8) + postcss-normalize-positions: 7.0.1(postcss@8.5.8) + postcss-normalize-repeat-style: 7.0.1(postcss@8.5.8) + postcss-normalize-string: 7.0.1(postcss@8.5.8) + postcss-normalize-timing-functions: 7.0.1(postcss@8.5.8) + postcss-normalize-unicode: 7.0.6(postcss@8.5.8) + postcss-normalize-url: 7.0.1(postcss@8.5.8) + postcss-normalize-whitespace: 7.0.1(postcss@8.5.8) + postcss-ordered-values: 7.0.2(postcss@8.5.8) + postcss-reduce-initial: 7.0.6(postcss@8.5.8) + postcss-reduce-transforms: 7.0.1(postcss@8.5.8) + postcss-svgo: 7.1.1(postcss@8.5.8) + postcss-unique-selectors: 7.0.5(postcss@8.5.8) + + cssnano-utils@5.0.1(postcss@8.5.8): + dependencies: + postcss: 8.5.8 + + cssnano@7.1.3(postcss@8.5.8): + dependencies: + cssnano-preset-default: 7.0.11(postcss@8.5.8) + lilconfig: 3.1.3 + postcss: 8.5.8 + + csso@5.0.5: dependencies: css-tree: 2.2.1 - dev: true - /cssom@0.3.8: - resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==} - requiresBuild: true - dev: true + cssom@0.3.8: optional: true - /cssstyle@0.2.37: - resolution: {integrity: sha512-FUpKc+1FNBsHUr9IsfSGCovr8VuGOiiuzlgCyppKBjJi2jYTOFLN3oiiNRMIvYqbFzF38mqKj4BgcevzU5/kIA==} - requiresBuild: true + cssstyle@0.2.37: dependencies: cssom: 0.3.8 - dev: true optional: true - /currently-unhandled@0.4.1: - resolution: {integrity: sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==} - engines: {node: '>=0.10.0'} + currently-unhandled@0.4.1: dependencies: array-find-index: 1.0.2 - dev: true - /dashdash@1.14.1: - resolution: {integrity: sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==} - engines: {node: '>=0.10'} - requiresBuild: true + dashdash@1.14.1: dependencies: assert-plus: 1.0.0 - dev: true optional: true - /dat.gui@0.7.9: - resolution: {integrity: sha512-sCNc1OHobc+Erc1HqiswYgHdVNpSJUlk/Hz8vzOCsER7rl+oF/4+v8GXFUyCgtXpoCX6+bnmg07DedLvBLwYKQ==} - dev: true + dat.gui@0.7.9: {} - /date-time@3.1.0: - resolution: {integrity: sha512-uqCUKXE5q1PNBXjPqvwhwJf9SwMoAHBgWJ6DcrnS5o+W2JOiIILl0JEdVD8SGujrNS02GGxgwAg2PN2zONgtjg==} - engines: {node: '>=6'} + data-view-buffer@1.0.2: dependencies: - time-zone: 1.0.0 - dev: true + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 - /debug@2.6.9: - resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true + data-view-byte-length@1.0.2: dependencies: - ms: 2.0.0 - dev: true + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 - /debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true + data-view-byte-offset@1.0.1: dependencies: - ms: 2.1.2 - dev: true + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 - /decamelize-keys@1.1.1: - resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} - engines: {node: '>=0.10.0'} + date-time@3.1.0: dependencies: - decamelize: 1.2.0 - map-obj: 1.0.1 - dev: true + time-zone: 1.0.0 - /decamelize@1.2.0: - resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} - engines: {node: '>=0.10.0'} - dev: true + debug@2.6.9: + dependencies: + ms: 2.0.0 - /decamelize@5.0.1: - resolution: {integrity: sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==} - engines: {node: '>=10'} - dev: true + debug@4.4.3: + dependencies: + ms: 2.1.3 - /decompress-response@6.0.0: - resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} - engines: {node: '>=10'} + decompress-response@6.0.0: dependencies: mimic-response: 3.1.0 - dev: true - /deep-equal@2.2.3: - resolution: {integrity: sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==} - engines: {node: '>= 0.4'} - dependencies: - array-buffer-byte-length: 1.0.0 - call-bind: 1.0.5 - es-get-iterator: 1.1.3 - get-intrinsic: 1.2.2 - is-arguments: 1.1.1 - is-array-buffer: 3.0.2 - is-date-object: 1.0.5 - is-regex: 1.1.4 - is-shared-array-buffer: 1.0.2 - isarray: 2.0.5 - object-is: 1.1.5 - object-keys: 1.1.1 - object.assign: 4.1.5 - regexp.prototype.flags: 1.5.1 - side-channel: 1.0.4 - which-boxed-primitive: 1.0.2 - which-collection: 1.0.1 - which-typed-array: 1.1.13 - dev: true - - /deep-is@0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - dev: true + deep-is@0.1.4: {} - /defaults@2.0.2: - resolution: {integrity: sha512-cuIw0PImdp76AOfgkjbW4VhQODRmNNcKR73vdCH5cLd/ifj7aamfoXvYgfGkEAjNJZ3ozMIy9Gu2LutUkGEPbA==} - engines: {node: '>=16'} - dev: true + defaults@2.0.2: {} - /defer-to-connect@2.0.1: - resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} - engines: {node: '>=10'} - dev: true + defer-to-connect@2.0.1: {} - /define-data-property@1.1.1: - resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} - engines: {node: '>= 0.4'} + define-data-property@1.1.4: dependencies: - get-intrinsic: 1.2.2 - gopd: 1.0.1 - has-property-descriptors: 1.0.1 - dev: true + es-define-property: 1.0.1 + es-errors: 1.3.0 + gopd: 1.2.0 - /define-properties@1.2.1: - resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} - engines: {node: '>= 0.4'} + define-properties@1.2.1: dependencies: - define-data-property: 1.1.1 - has-property-descriptors: 1.0.1 + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 object-keys: 1.1.1 - dev: true - /del-cli@5.1.0: - resolution: {integrity: sha512-xwMeh2acluWeccsfzE7VLsG3yTr7nWikbfw+xhMnpRrF15pGSkw+3/vJZWlGoE4I86UiLRNHicmKt4tkIX9Jtg==} - engines: {node: '>=14.16'} - hasBin: true + del-cli@7.0.0: dependencies: - del: 7.1.0 - meow: 10.1.5 - dev: true + del: 8.0.1 + meow: 14.1.0 + presentable-error: 0.0.1 - /del@7.1.0: - resolution: {integrity: sha512-v2KyNk7efxhlyHpjEvfyxaAihKKK0nWCuf6ZtqZcFFpQRG0bJ12Qsr0RpvsICMjAAZ8DOVCxrlqpxISlMHC4Kg==} - engines: {node: '>=14.16'} + del@8.0.1: dependencies: - globby: 13.2.2 - graceful-fs: 4.2.11 + globby: 14.1.0 is-glob: 4.0.3 is-path-cwd: 3.0.0 is-path-inside: 4.0.0 - p-map: 5.5.0 - rimraf: 3.0.2 - slash: 4.0.0 - dev: true + p-map: 7.0.4 + presentable-error: 0.0.1 + slash: 5.1.0 - /delayed-stream@1.0.0: - resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} - engines: {node: '>=0.4.0'} - requiresBuild: true - dev: true + delayed-stream@1.0.0: optional: true - /delegates@1.0.0: - resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} - dev: true + dependency-graph@1.0.0: {} - /dependency-graph@0.11.0: - resolution: {integrity: sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==} - engines: {node: '>= 0.6.0'} - dev: true - - /detect-indent@3.0.1: - resolution: {integrity: sha512-xo3WP66SNbr1Eim85s/qyH0ZL8PQUwp86HWm0S1l8WnJ/zjT6T3w1nwNA0yOZeuvOemupEYvpvF6BIdYRuERJQ==} - engines: {node: '>=0.10.0'} - hasBin: true + detect-indent@3.0.1: dependencies: get-stdin: 4.0.1 minimist: 1.2.8 repeating: 1.1.3 - dev: true - /detect-indent@4.0.0: - resolution: {integrity: sha512-BDKtmHlOzwI7iRuEkhzsnPoi5ypEhWAJB5RvHWe1kMr06js3uK5B3734i3ui5Yd+wOJV1cpE4JnivPD283GU/A==} - engines: {node: '>=0.10.0'} + detect-indent@4.0.0: dependencies: repeating: 2.0.1 - dev: true - - /detect-libc@2.0.2: - resolution: {integrity: sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==} - engines: {node: '>=8'} - dev: true - /dir-glob@3.0.1: - resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} - engines: {node: '>=8'} - dependencies: - path-type: 4.0.0 - dev: true - - /doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} - dependencies: - esutils: 2.0.3 - dev: true + detect-libc@2.1.2: {} - /dom-serializer@0.1.1: - resolution: {integrity: sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==} + dom-serializer@0.1.1: dependencies: domelementtype: 1.3.1 entities: 1.1.2 - dev: true - /dom-serializer@2.0.0: - resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} + dom-serializer@2.0.0: dependencies: domelementtype: 2.3.0 domhandler: 5.0.3 entities: 4.5.0 - dev: true - /domelementtype@1.3.1: - resolution: {integrity: sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==} - dev: true + domelementtype@1.3.1: {} - /domelementtype@2.3.0: - resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} - dev: true + domelementtype@2.3.0: {} - /domhandler@2.3.0: - resolution: {integrity: sha512-q9bUwjfp7Eif8jWxxxPSykdRZAb6GkguBGSgvvCrhI9wB71W2K/Kvv4E61CF/mcCfnVJDeDWx/Vb/uAqbDj6UQ==} + domhandler@2.3.0: dependencies: domelementtype: 1.3.1 - dev: true - /domhandler@2.4.2: - resolution: {integrity: sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==} + domhandler@2.4.2: dependencies: domelementtype: 1.3.1 - dev: true - /domhandler@5.0.3: - resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} - engines: {node: '>= 4'} + domhandler@5.0.3: dependencies: domelementtype: 2.3.0 - dev: true - /domutils@1.5.1: - resolution: {integrity: sha512-gSu5Oi/I+3wDENBsOWBiRK1eoGxcywYSqg3rR960/+EfY0CF4EX1VPkgHOZ3WiS/Jg2DtliF6BhWcHlfpYUcGw==} + domutils@1.5.1: dependencies: dom-serializer: 0.1.1 domelementtype: 1.3.1 - dev: true - /domutils@1.7.0: - resolution: {integrity: sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==} + domutils@1.7.0: dependencies: dom-serializer: 0.1.1 domelementtype: 1.3.1 - dev: true - /domutils@3.1.0: - resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==} + domutils@3.2.2: dependencies: dom-serializer: 2.0.0 domelementtype: 2.3.0 domhandler: 5.0.3 - dev: true - /duplex-maker@1.0.0: - resolution: {integrity: sha512-KoHuzggxg7f+vvjqOHfXxaQYI1POzBm+ah0eec7YDssZmbt6QFBI8d1nl5GQwAgR2f+VQCPvyvZtmWWqWuFtlA==} - dev: true + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 - /duplexify@3.7.1: - resolution: {integrity: sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==} + duplex-maker@1.0.0: {} + + duplexify@3.7.1: dependencies: - end-of-stream: 1.4.4 + end-of-stream: 1.4.5 inherits: 2.0.4 readable-stream: 2.3.8 - stream-shift: 1.0.1 - dev: true + stream-shift: 1.0.3 - /ecc-jsbn@0.1.2: - resolution: {integrity: sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==} - requiresBuild: true + ecc-jsbn@0.1.2: dependencies: jsbn: 0.1.1 safer-buffer: 2.1.2 - dev: true optional: true - /electron-to-chromium@1.4.616: - resolution: {integrity: sha512-1n7zWYh8eS0L9Uy+GskE0lkBUNK83cXTVJI0pU3mGprFsbfSdAc15VTFbo+A+Bq4pwstmL30AVcEU3Fo463lNg==} - dev: true + electron-to-chromium@1.5.321: {} - /emittery@1.0.1: - resolution: {integrity: sha512-2ID6FdrMD9KDLldGesP6317G78K7km/kMcwItRtVFva7I/cSEOIaLpewaUb+YLXVwdAp3Ctfxh/V5zIl1sj7dQ==} - engines: {node: '>=14.16'} - dev: true + emittery@1.2.1: {} - /emoji-regex@10.3.0: - resolution: {integrity: sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==} - dev: true + emoji-regex@10.6.0: {} - /emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - dev: true + emoji-regex@8.0.0: {} - /end-of-stream@1.4.4: - resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + end-of-stream@1.4.5: dependencies: once: 1.4.0 - dev: true - /entities@1.0.0: - resolution: {integrity: sha512-LbLqfXgJMmy81t+7c14mnulFHJ170cM6E+0vMXR9k/ZiZwgX8i5pNgjTCX3SO4VeUsFLV+8InixoretwU+MjBQ==} - dev: true + entities@1.0.0: {} - /entities@1.1.2: - resolution: {integrity: sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==} - dev: true + entities@1.1.2: {} - /entities@4.5.0: - resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} - engines: {node: '>=0.12'} - dev: true + entities@4.5.0: {} + + env-paths@2.2.1: {} - /error-ex@1.3.2: - resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + error-ex@1.3.4: dependencies: is-arrayish: 0.2.1 - dev: true - /es-abstract@1.22.3: - resolution: {integrity: sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==} - engines: {node: '>= 0.4'} - dependencies: - array-buffer-byte-length: 1.0.0 - arraybuffer.prototype.slice: 1.0.2 - available-typed-arrays: 1.0.5 - call-bind: 1.0.5 - es-set-tostringtag: 2.0.2 - es-to-primitive: 1.2.1 - function.prototype.name: 1.1.6 - get-intrinsic: 1.2.2 - get-symbol-description: 1.0.0 - globalthis: 1.0.3 - gopd: 1.0.1 - has-property-descriptors: 1.0.1 - has-proto: 1.0.1 - has-symbols: 1.0.3 - hasown: 2.0.0 - internal-slot: 1.0.6 - is-array-buffer: 3.0.2 + es-abstract@1.24.1: + dependencies: + array-buffer-byte-length: 1.0.2 + arraybuffer.prototype.slice: 1.0.4 + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.4 + data-view-buffer: 1.0.2 + data-view-byte-length: 1.0.2 + data-view-byte-offset: 1.0.1 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + es-set-tostringtag: 2.1.0 + es-to-primitive: 1.3.0 + function.prototype.name: 1.1.8 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + get-symbol-description: 1.1.0 + globalthis: 1.0.4 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + has-proto: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + internal-slot: 1.1.0 + is-array-buffer: 3.0.5 is-callable: 1.2.7 - is-negative-zero: 2.0.2 - is-regex: 1.1.4 - is-shared-array-buffer: 1.0.2 - is-string: 1.0.7 - is-typed-array: 1.1.12 - is-weakref: 1.0.2 - object-inspect: 1.13.1 + is-data-view: 1.0.2 + is-negative-zero: 2.0.3 + is-regex: 1.2.1 + is-set: 2.0.3 + is-shared-array-buffer: 1.0.4 + is-string: 1.1.1 + is-typed-array: 1.1.15 + is-weakref: 1.1.1 + math-intrinsics: 1.1.0 + object-inspect: 1.13.4 object-keys: 1.1.1 - object.assign: 4.1.5 - regexp.prototype.flags: 1.5.1 - safe-array-concat: 1.0.1 - safe-regex-test: 1.0.0 - string.prototype.trim: 1.2.8 - string.prototype.trimend: 1.0.7 - string.prototype.trimstart: 1.0.7 - typed-array-buffer: 1.0.0 - typed-array-byte-length: 1.0.0 - typed-array-byte-offset: 1.0.0 - typed-array-length: 1.0.4 - unbox-primitive: 1.0.2 - which-typed-array: 1.1.13 - dev: true - - /es-get-iterator@1.1.3: - resolution: {integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==} - dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - has-symbols: 1.0.3 - is-arguments: 1.1.1 - is-map: 2.0.2 - is-set: 2.0.2 - is-string: 1.0.7 - isarray: 2.0.5 - stop-iteration-iterator: 1.0.0 - dev: true + object.assign: 4.1.7 + own-keys: 1.0.1 + regexp.prototype.flags: 1.5.4 + safe-array-concat: 1.1.3 + safe-push-apply: 1.0.0 + safe-regex-test: 1.1.0 + set-proto: 1.0.0 + stop-iteration-iterator: 1.1.0 + string.prototype.trim: 1.2.10 + string.prototype.trimend: 1.0.9 + string.prototype.trimstart: 1.0.8 + typed-array-buffer: 1.0.3 + typed-array-byte-length: 1.0.3 + typed-array-byte-offset: 1.0.4 + typed-array-length: 1.0.7 + unbox-primitive: 1.1.0 + which-typed-array: 1.1.20 - /es-set-tostringtag@2.0.2: - resolution: {integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==} - engines: {node: '>= 0.4'} + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} + + es-object-atoms@1.1.1: dependencies: - get-intrinsic: 1.2.2 - has-tostringtag: 1.0.0 - hasown: 2.0.0 - dev: true + es-errors: 1.3.0 - /es-to-primitive@1.2.1: - resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} - engines: {node: '>= 0.4'} + es-set-tostringtag@2.1.0: + dependencies: + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + es-to-primitive@1.3.0: dependencies: is-callable: 1.2.7 - is-date-object: 1.0.5 - is-symbol: 1.0.4 - dev: true + is-date-object: 1.1.0 + is-symbol: 1.1.1 - /esbuild-plugin-glsl@1.2.2(esbuild@0.19.10): - resolution: {integrity: sha512-HqRe6qf+9q3U4ugce7EXnXf+c+bRGZZWNkUSiJBYCKRLkA5ThhklNxlc1Z/rcBM8DIAKAdZGk+j6nTBaA5SV6A==} - engines: {node: '>= 0.10.18'} - peerDependencies: - esbuild: 0.x.x + esbuild-plugin-glsl@1.4.1(esbuild@0.27.4): dependencies: - esbuild: 0.19.10 - dev: true + esbuild: 0.27.4 - /esbuild@0.19.10: - resolution: {integrity: sha512-S1Y27QGt/snkNYrRcswgRFqZjaTG5a5xM3EQo97uNBnH505pdzSNe/HLBq1v0RO7iK/ngdbhJB6mDAp0OK+iUA==} - engines: {node: '>=12'} - hasBin: true - requiresBuild: true + esbuild@0.27.4: optionalDependencies: - '@esbuild/aix-ppc64': 0.19.10 - '@esbuild/android-arm': 0.19.10 - '@esbuild/android-arm64': 0.19.10 - '@esbuild/android-x64': 0.19.10 - '@esbuild/darwin-arm64': 0.19.10 - '@esbuild/darwin-x64': 0.19.10 - '@esbuild/freebsd-arm64': 0.19.10 - '@esbuild/freebsd-x64': 0.19.10 - '@esbuild/linux-arm': 0.19.10 - '@esbuild/linux-arm64': 0.19.10 - '@esbuild/linux-ia32': 0.19.10 - '@esbuild/linux-loong64': 0.19.10 - '@esbuild/linux-mips64el': 0.19.10 - '@esbuild/linux-ppc64': 0.19.10 - '@esbuild/linux-riscv64': 0.19.10 - '@esbuild/linux-s390x': 0.19.10 - '@esbuild/linux-x64': 0.19.10 - '@esbuild/netbsd-x64': 0.19.10 - '@esbuild/openbsd-x64': 0.19.10 - '@esbuild/sunos-x64': 0.19.10 - '@esbuild/win32-arm64': 0.19.10 - '@esbuild/win32-ia32': 0.19.10 - '@esbuild/win32-x64': 0.19.10 - dev: true - - /escalade@3.1.1: - resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} - engines: {node: '>=6'} - dev: true - - /escape-html@1.0.3: - resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} - dev: true - - /escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} - dev: true - - /escape-string-regexp@2.0.0: - resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} - engines: {node: '>=8'} - dev: true - - /escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - dev: true - - /escape-string-regexp@5.0.0: - resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} - engines: {node: '>=12'} - dev: true - - /escodegen@1.14.3: - resolution: {integrity: sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==} - engines: {node: '>=4.0'} - hasBin: true - requiresBuild: true + '@esbuild/aix-ppc64': 0.27.4 + '@esbuild/android-arm': 0.27.4 + '@esbuild/android-arm64': 0.27.4 + '@esbuild/android-x64': 0.27.4 + '@esbuild/darwin-arm64': 0.27.4 + '@esbuild/darwin-x64': 0.27.4 + '@esbuild/freebsd-arm64': 0.27.4 + '@esbuild/freebsd-x64': 0.27.4 + '@esbuild/linux-arm': 0.27.4 + '@esbuild/linux-arm64': 0.27.4 + '@esbuild/linux-ia32': 0.27.4 + '@esbuild/linux-loong64': 0.27.4 + '@esbuild/linux-mips64el': 0.27.4 + '@esbuild/linux-ppc64': 0.27.4 + '@esbuild/linux-riscv64': 0.27.4 + '@esbuild/linux-s390x': 0.27.4 + '@esbuild/linux-x64': 0.27.4 + '@esbuild/netbsd-arm64': 0.27.4 + '@esbuild/netbsd-x64': 0.27.4 + '@esbuild/openbsd-arm64': 0.27.4 + '@esbuild/openbsd-x64': 0.27.4 + '@esbuild/openharmony-arm64': 0.27.4 + '@esbuild/sunos-x64': 0.27.4 + '@esbuild/win32-arm64': 0.27.4 + '@esbuild/win32-ia32': 0.27.4 + '@esbuild/win32-x64': 0.27.4 + + escalade@3.2.0: {} + + escape-html@1.0.3: {} + + escape-string-regexp@1.0.5: {} + + escape-string-regexp@2.0.0: {} + + escape-string-regexp@4.0.0: {} + + escape-string-regexp@5.0.0: {} + + escodegen@1.14.3: dependencies: esprima: 4.0.1 estraverse: 4.3.0 @@ -2722,56 +5992,29 @@ packages: optionator: 0.8.3 optionalDependencies: source-map: 0.6.1 - dev: true optional: true - /esdoc-accessor-plugin@1.0.0: - resolution: {integrity: sha512-s9mNmdHGOyQOaOUXNHPz38Y8clm6dR8/fa9DPGzuRYmIN+Lv0NVnpPAcHb5XrfC23/Mz3IUwD8h798f5Ai4rbA==} - engines: {node: '>= 6.0.0'} - dev: true + esdoc-accessor-plugin@1.0.0: {} - /esdoc-brand-plugin@1.0.1: - resolution: {integrity: sha512-Yv9j3M7qk5PSLmSeD6MbPsfIsEf8K43EdH8qZpE/GZwnJCRVmDPrZJ1cLDj/fPu6P35YqgcEaJK4E2NL/CKA7g==} - engines: {node: '>= 6.0.0'} + esdoc-brand-plugin@1.0.1: dependencies: cheerio: 0.22.0 - dev: true - /esdoc-coverage-plugin@1.1.0: - resolution: {integrity: sha512-M+94/Y+eoM08V3teiJIYpJ5HF13jH4cC9LQZrjmA91mlAqCHtNzelHF9ZdWofoOFYFRNpllFsXTFsJgwVa000A==} - engines: {node: '>= 6.0.0'} - dev: true + esdoc-coverage-plugin@1.1.0: {} - /esdoc-external-ecmascript-plugin@1.0.0: - resolution: {integrity: sha512-ASj7lhfZpzI01xd4XqB4HN+zNKwnhdaN/OIp/CTnUiLIErMOeUqzV9z/dcnUUeDY3NSwPCH1pUNATVwznspmHw==} - engines: {node: '>= 6.0.0'} + esdoc-external-ecmascript-plugin@1.0.0: dependencies: fs-extra: 1.0.0 - dev: true - /esdoc-importpath-plugin@1.0.2: - resolution: {integrity: sha512-o9/EIk8YyufjzDBrTZu7/6he2No515b51Nnd8QGzXvdTM+rekQjZ7wxVjcqTUQ68bbYLFKqaxZBNltYUbD5aUQ==} - engines: {node: '>= 6.0.0'} - dev: true + esdoc-importpath-plugin@1.0.2: {} - /esdoc-integrate-manual-plugin@1.0.0: - resolution: {integrity: sha512-+XcW8xRtuFVFadoVLIOj6kzX4uqtAEB5UoR7AA5g46StxLghZZ6RLrRQSERUTIc3VX9v47lOMKEaQvQfanv3+A==} - engines: {node: '>= 6.0.0'} - dev: true + esdoc-integrate-manual-plugin@1.0.0: {} - /esdoc-integrate-test-plugin@1.0.0: - resolution: {integrity: sha512-WRbkbnbWnzF4RdmcoJLYZvhod7jLVUYWU2ZAojYjK+GiqSgy2yjGi7PxckeGF0LtpCuqqKat3PRdUNEMo6Nf3A==} - engines: {node: '>= 6.0.0'} - dev: true + esdoc-integrate-test-plugin@1.0.0: {} - /esdoc-lint-plugin@1.0.2: - resolution: {integrity: sha512-24AYqD2WbZI9We02I7/6dzAa7yUliRTFUaJCZAcYJMQicJT5gUrNFVaI8XmWEN/mhF3szIn1uZBNWeLul4CmNw==} - engines: {node: '>= 6.0.0'} - dev: true + esdoc-lint-plugin@1.0.2: {} - /esdoc-publish-html-plugin@1.1.2: - resolution: {integrity: sha512-hG1fZmTcEp3P/Hv/qKiMdG1qSp8MjnVZMMkxL5P5ry7I2sX0HQ4P9lt2lms+90Lt0r340HHhSuVx107UL7dphg==} - engines: {node: '>= 6.0.0'} + esdoc-publish-html-plugin@1.1.2: dependencies: babel-generator: 6.11.4 cheerio: 0.22.0 @@ -2780,11 +6023,8 @@ packages: ice-cap: 0.0.4 marked: 0.3.19 taffydb: 2.7.2 - dev: true - /esdoc-standard-plugin@1.0.0: - resolution: {integrity: sha512-IDEG9NV/MF5Bi2TdKPqQ3GHfDkgqYhk2iyvBNX+XcNKYmXm9zxtXVS459WAmiTZuYpDLtDGbulQdJ1t4ud57mw==} - engines: {node: '>= 6.0.0'} + esdoc-standard-plugin@1.0.0: dependencies: esdoc-accessor-plugin: 1.0.0 esdoc-brand-plugin: 1.0.1 @@ -2797,27 +6037,14 @@ packages: esdoc-type-inference-plugin: 1.0.2 esdoc-undocumented-identifier-plugin: 1.0.0 esdoc-unexported-identifier-plugin: 1.0.0 - dev: true - /esdoc-type-inference-plugin@1.0.2: - resolution: {integrity: sha512-tMIcEHNe1uhUGA7lT1UTWc9hs2dzthnTgmqXpmeUhurk7fL2tinvoH+IVvG/sLROzwOGZQS9zW/F9KWnpMzLIQ==} - engines: {node: '>= 6.0.0'} - dev: true + esdoc-type-inference-plugin@1.0.2: {} - /esdoc-undocumented-identifier-plugin@1.0.0: - resolution: {integrity: sha512-T0hQc0ec1+pUJPDBoJ2SxEv7uX9VD7Q9+7UAGnDZ5R2l2JYa3WY7cawyqfbMHVtLgvqH0eMBpxdfRsQvAWzj4Q==} - engines: {node: '>= 6.0.0'} - dev: true + esdoc-undocumented-identifier-plugin@1.0.0: {} - /esdoc-unexported-identifier-plugin@1.0.0: - resolution: {integrity: sha512-PRdMLWHWdy9PwxzYDG2clhta9H7yHDpGCBIHxSw9R7TFK6ZYuPK1fUbURIzIxcdQhzt1PX9Cn6Cak2824K0+Ng==} - engines: {node: '>= 6.0.0'} - dev: true + esdoc-unexported-identifier-plugin@1.0.0: {} - /esdoc@1.1.0: - resolution: {integrity: sha512-vsUcp52XJkOWg9m1vDYplGZN2iDzvmjDL5M/Mp8qkoDG3p2s0yIQCIjKR5wfPBaM3eV14a6zhQNYiNTCVzPnxA==} - engines: {node: '>= 6.0.0'} - hasBin: true + esdoc@1.1.0: dependencies: babel-generator: 6.26.1 babel-traverse: 6.26.0 @@ -2832,149 +6059,107 @@ packages: taffydb: 2.7.3 transitivePeerDependencies: - supports-color - dev: true - /eslint-config-aether@1.5.2: - resolution: {integrity: sha512-HGvtgwt/t2itg+hIvZKPSYZHbVxJvY1TFynzOP2EGyrZZvDA3Vgq37+4vnDyW8/Lg2QbAEUC1N3wXGGZJQoEIQ==} - dev: true + eslint-config-aether@3.0.0(eslint@10.1.0)(typescript@5.9.3): + dependencies: + '@eslint/core': 1.1.1 + '@eslint/js': 10.0.1(eslint@10.1.0) + '@stylistic/eslint-plugin': 5.10.0(eslint@10.1.0) + eslint: 10.1.0 + globals: 17.4.0 + typescript-eslint: 8.57.1(eslint@10.1.0)(typescript@5.9.3) + transitivePeerDependencies: + - supports-color + - typescript - /eslint-scope@7.2.2: - resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + eslint-scope@9.1.2: dependencies: + '@types/esrecurse': 4.3.1 + '@types/estree': 1.0.8 esrecurse: 4.3.0 estraverse: 5.3.0 - dev: true - /eslint-visitor-keys@3.4.3: - resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true + eslint-visitor-keys@3.4.3: {} - /eslint-watch@8.0.0(eslint@8.56.0): - resolution: {integrity: sha512-piws/uE4gkZdz1pwkaEFx+kSWvoGnVX8IegFRrE1NUvlXjtU0rg7KhT1QDj/NzhAwbiLEfdRHWz5q738R4zDKA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - hasBin: true - peerDependencies: - eslint: '>=8 <9.0.0' - dependencies: - chokidar: 3.5.3 - debug: 4.3.4 - eslint: 8.56.0 - execa: 5.1.1 - keypress: 0.2.1 - lodash.debounce: 4.0.8 - lodash.isempty: 4.4.0 - lodash.isequal: 4.5.0 - lodash.kebabcase: 4.1.1 - lodash.unionwith: 4.6.0 - optionator: 0.9.3 - transitivePeerDependencies: - - supports-color - dev: true + eslint-visitor-keys@4.2.1: {} - /eslint@8.56.0: - resolution: {integrity: sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - hasBin: true + eslint-visitor-keys@5.0.1: {} + + eslint@10.1.0: dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) - '@eslint-community/regexpp': 4.10.0 - '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.56.0 - '@humanwhocodes/config-array': 0.11.13 + '@eslint-community/eslint-utils': 4.9.1(eslint@10.1.0) + '@eslint-community/regexpp': 4.12.2 + '@eslint/config-array': 0.23.3 + '@eslint/config-helpers': 0.5.3 + '@eslint/core': 1.1.1 + '@eslint/plugin-kit': 0.6.1 + '@humanfs/node': 0.16.7 '@humanwhocodes/module-importer': 1.0.1 - '@nodelib/fs.walk': 1.2.8 - '@ungap/structured-clone': 1.2.0 - ajv: 6.12.6 - chalk: 4.1.2 - cross-spawn: 7.0.3 - debug: 4.3.4 - doctrine: 3.0.0 + '@humanwhocodes/retry': 0.4.3 + '@types/estree': 1.0.8 + ajv: 6.14.0 + cross-spawn: 7.0.6 + debug: 4.4.3 escape-string-regexp: 4.0.0 - eslint-scope: 7.2.2 - eslint-visitor-keys: 3.4.3 - espree: 9.6.1 - esquery: 1.5.0 + eslint-scope: 9.1.2 + eslint-visitor-keys: 5.0.1 + espree: 11.2.0 + esquery: 1.7.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 + file-entry-cache: 8.0.0 find-up: 5.0.0 glob-parent: 6.0.2 - globals: 13.24.0 - graphemer: 1.4.0 - ignore: 5.3.0 + ignore: 5.3.2 imurmurhash: 0.1.4 is-glob: 4.0.3 - is-path-inside: 3.0.3 - js-yaml: 4.1.0 json-stable-stringify-without-jsonify: 1.0.1 - levn: 0.4.1 - lodash.merge: 4.6.2 - minimatch: 3.1.2 + minimatch: 10.2.4 natural-compare: 1.4.0 - optionator: 0.9.3 - strip-ansi: 6.0.1 - text-table: 0.2.0 + optionator: 0.9.4 transitivePeerDependencies: - supports-color - dev: true - /espree@9.6.1: - resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + espree@10.4.0: dependencies: - acorn: 8.11.2 - acorn-jsx: 5.3.2(acorn@8.11.2) - eslint-visitor-keys: 3.4.3 - dev: true + acorn: 8.16.0 + acorn-jsx: 5.3.2(acorn@8.16.0) + eslint-visitor-keys: 4.2.1 - /esprima@4.0.1: - resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} - engines: {node: '>=4'} - hasBin: true - dev: true + espree@11.2.0: + dependencies: + acorn: 8.16.0 + acorn-jsx: 5.3.2(acorn@8.16.0) + eslint-visitor-keys: 5.0.1 - /esquery@1.5.0: - resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} - engines: {node: '>=0.10'} + esprima@4.0.1: {} + + esquery@1.7.0: dependencies: estraverse: 5.3.0 - dev: true - /esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} + esrecurse@4.3.0: dependencies: estraverse: 5.3.0 - dev: true - /estraverse@4.3.0: - resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} - engines: {node: '>=4.0'} - requiresBuild: true - dev: true + estraverse@4.3.0: optional: true - /estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} - dev: true + estraverse@5.3.0: {} - /estree-walker@2.0.2: - resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} - dev: true + estree-walker@2.0.2: {} - /esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} - dev: true + esutils@2.0.3: {} - /execa@5.1.1: - resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} - engines: {node: '>=10'} + events-universal@1.0.1: + dependencies: + bare-events: 2.8.2 + transitivePeerDependencies: + - bare-abort-controller + + execa@5.1.1: dependencies: - cross-spawn: 7.0.3 + cross-spawn: 7.0.6 get-stream: 6.0.1 human-signals: 2.1.0 is-stream: 2.0.1 @@ -2983,457 +6168,262 @@ packages: onetime: 5.1.2 signal-exit: 3.0.7 strip-final-newline: 2.0.0 - dev: true - /ext-list@2.2.2: - resolution: {integrity: sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==} - engines: {node: '>=0.10.0'} + ext-list@2.2.2: dependencies: - mime-db: 1.52.0 - dev: true + mime-db: 1.54.0 - /ext-name@5.0.0: - resolution: {integrity: sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==} - engines: {node: '>=4'} + ext-name@5.0.0: dependencies: ext-list: 2.2.2 sort-keys-length: 1.0.1 - dev: true - /extend@3.0.2: - resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} - requiresBuild: true - dev: true + extend@3.0.2: optional: true - /extsprintf@1.3.0: - resolution: {integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==} - engines: {'0': node >=0.6.0} - requiresBuild: true - dev: true + extsprintf@1.3.0: optional: true - /fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - dev: true + fast-deep-equal@3.1.3: {} - /fast-diff@1.3.0: - resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} - dev: true + fast-diff@1.3.0: {} - /fast-fifo@1.3.2: - resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} - dev: true + fast-fifo@1.3.2: {} - /fast-glob@3.3.2: - resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} - engines: {node: '>=8.6.0'} + fast-glob@3.3.3: dependencies: '@nodelib/fs.stat': 2.0.5 '@nodelib/fs.walk': 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 - micromatch: 4.0.5 - dev: true + micromatch: 4.0.8 - /fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - dev: true + fast-json-stable-stringify@2.1.0: {} - /fast-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - dev: true + fast-levenshtein@2.0.6: {} - /fastest-levenshtein@1.0.16: - resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} - engines: {node: '>= 4.9.1'} - dev: true + fast-uri@3.1.0: {} - /fastq@1.16.0: - resolution: {integrity: sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==} - dependencies: - reusify: 1.0.4 - dev: true + fastest-levenshtein@1.0.16: {} - /fd-slicer@1.1.0: - resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} + fastq@1.20.1: dependencies: - pend: 1.2.0 - dev: true + reusify: 1.1.0 + + fdir@6.5.0(picomatch@4.0.3): + optionalDependencies: + picomatch: 4.0.3 - /fflate@0.6.10: - resolution: {integrity: sha512-IQrh3lEPM93wVCEczc9SaAOvkmcoQn/G8Bo1e8ZPlY3X3bnAxWaBdvTdvM1hP62iZp0BXWDy4vTAy4fF0+Dlpg==} - dev: true + fflate@0.8.2: {} - /figures@6.0.1: - resolution: {integrity: sha512-0oY/olScYD4IhQ8u//gCPA4F3mlTn2dacYmiDm/mbDQvpmLjV4uH+zhsQ5IyXRyvqkvtUkXkNdGvg5OFJTCsuQ==} - engines: {node: '>=18'} + figures@6.1.0: dependencies: - is-unicode-supported: 2.0.0 - dev: true + is-unicode-supported: 2.1.0 - /file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} + file-entry-cache@11.1.2: dependencies: - flat-cache: 3.2.0 - dev: true + flat-cache: 6.1.21 - /file-entry-cache@7.0.2: - resolution: {integrity: sha512-TfW7/1iI4Cy7Y8L6iqNdZQVvdXn0f8B4QcIXmkIbtTIe/Okm/nSlHb4IwGzRVOd3WfSieCgvf5cMzEfySAIl0g==} - engines: {node: '>=12.0.0'} + file-entry-cache@8.0.0: dependencies: - flat-cache: 3.2.0 - dev: true + flat-cache: 4.0.1 - /file-type@18.7.0: - resolution: {integrity: sha512-ihHtXRzXEziMrQ56VSgU7wkxh55iNchFkosu7Y9/S+tXHdKyrGjVK0ujbqNnsxzea+78MaLhN6PGmfYSAv1ACw==} - engines: {node: '>=14.16'} + file-type@20.5.0: dependencies: - readable-web-to-node-stream: 3.0.2 - strtok3: 7.0.0 - token-types: 5.0.1 - dev: true + '@tokenizer/inflate': 0.2.7 + strtok3: 10.3.4 + token-types: 6.1.2 + uint8array-extras: 1.5.0 + transitivePeerDependencies: + - supports-color - /file-uri-to-path@1.0.0: - resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} - dev: true + file-uri-to-path@1.0.0: {} - /filename-reserved-regex@3.0.0: - resolution: {integrity: sha512-hn4cQfU6GOT/7cFHXBqeBg2TbrMBgdD0kcjLhvSQYYwm3s4B6cjvBfb7nBALJLAXqmU5xajSa7X2NnUud/VCdw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: true + filename-reserved-regex@3.0.0: {} - /filenamify@6.0.0: - resolution: {integrity: sha512-vqIlNogKeyD3yzrm0yhRMQg8hOVwYcYRfjEoODd49iCprMn4HL85gK3HcykQE53EPIpX3HcAbGA5ELQv216dAQ==} - engines: {node: '>=16'} + filenamify@6.0.0: dependencies: filename-reserved-regex: 3.0.0 - dev: true - /fill-range@7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} - engines: {node: '>=8'} + fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 - dev: true - /find-up-simple@1.0.0: - resolution: {integrity: sha512-q7Us7kcjj2VMePAa02hDAF6d+MzsdsAWEwYyOpwUtlerRBkOEPBCRZrAV4XfcSN8fHAgaD0hP7miwoay6DCprw==} - engines: {node: '>=18'} - dev: true + find-up-simple@1.0.1: {} - /find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} + find-up@5.0.0: dependencies: locate-path: 6.0.0 path-exists: 4.0.0 - dev: true - - /find-up@6.3.0: - resolution: {integrity: sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - locate-path: 7.2.0 - path-exists: 5.0.0 - dev: true - /find-versions@5.1.0: - resolution: {integrity: sha512-+iwzCJ7C5v5KgcBuueqVoNiHVoQpwiUK5XFLjf0affFTep+Wcw93tPvmb8tqujDNmzhBDPddnWV/qgWSXgq+Hg==} - engines: {node: '>=12'} + find-versions@5.1.0: dependencies: semver-regex: 4.0.5 - dev: true - /flat-cache@3.2.0: - resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} - engines: {node: ^10.12.0 || >=12.0.0} + flat-cache@4.0.1: dependencies: - flatted: 3.2.9 + flatted: 3.4.2 keyv: 4.5.4 - rimraf: 3.0.2 - dev: true - /flatted@3.2.9: - resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} - dev: true + flat-cache@6.1.21: + dependencies: + cacheable: 2.3.4 + flatted: 3.4.2 + hookified: 1.15.1 + + flatted@3.4.2: {} - /for-each@0.3.3: - resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + for-each@0.3.5: dependencies: is-callable: 1.2.7 - dev: true - /forever-agent@0.6.1: - resolution: {integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==} - requiresBuild: true - dev: true + forever-agent@0.6.1: optional: true - /form-data-encoder@2.1.4: - resolution: {integrity: sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==} - engines: {node: '>= 14.17'} - dev: true + form-data-encoder@2.1.4: {} - /form-data@2.3.3: - resolution: {integrity: sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==} - engines: {node: '>= 0.12'} - requiresBuild: true + form-data@2.3.3: dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 mime-types: 2.1.35 - dev: true optional: true - /fraction.js@4.3.7: - resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} - dev: true + fraction.js@5.3.4: {} - /fs-extra@1.0.0: - resolution: {integrity: sha512-VerQV6vEKuhDWD2HGOybV6v5I73syoc/cXAbKlgTC7M/oFVEtklWlp9QH2Ijw3IaWDOQcMkldSPa7zXy79Z/UQ==} + fs-extra@1.0.0: dependencies: graceful-fs: 4.2.11 jsonfile: 2.4.0 klaw: 1.3.1 - dev: true - /fs-extra@11.2.0: - resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} - engines: {node: '>=14.14'} + fs-extra@11.3.4: dependencies: graceful-fs: 4.2.11 - jsonfile: 6.1.0 + jsonfile: 6.2.0 universalify: 2.0.1 - dev: true - /fs-extra@5.0.0: - resolution: {integrity: sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==} + fs-extra@5.0.0: dependencies: graceful-fs: 4.2.11 jsonfile: 4.0.0 universalify: 0.1.2 - dev: true - - /fs-minipass@2.1.0: - resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} - engines: {node: '>= 8'} - dependencies: - minipass: 3.3.6 - dev: true - - /fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - dev: true - /fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - requiresBuild: true - dev: true + fsevents@2.3.3: optional: true - /function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - dev: true + function-bind@1.1.2: {} - /function.prototype.name@1.1.6: - resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} - engines: {node: '>= 0.4'} + function.prototype.name@1.1.8: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.8 + call-bound: 1.0.4 define-properties: 1.2.1 - es-abstract: 1.22.3 functions-have-names: 1.2.3 - dev: true + hasown: 2.0.2 + is-callable: 1.2.7 - /functions-have-names@1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - dev: true + functions-have-names@1.2.3: {} - /gauge@3.0.2: - resolution: {integrity: sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==} - engines: {node: '>=10'} - dependencies: - aproba: 2.0.0 - color-support: 1.1.3 - console-control-strings: 1.1.0 - has-unicode: 2.0.1 - object-assign: 4.1.1 - signal-exit: 3.0.7 - string-width: 4.2.3 - strip-ansi: 6.0.1 - wide-align: 1.1.5 - dev: true + generator-function@2.0.1: {} - /get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} - dev: true + get-caller-file@2.0.5: {} - /get-east-asian-width@1.2.0: - resolution: {integrity: sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==} - engines: {node: '>=18'} - dev: true + get-east-asian-width@1.5.0: {} - /get-intrinsic@1.2.2: - resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==} + get-intrinsic@1.3.0: dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 function-bind: 1.1.2 - has-proto: 1.0.1 - has-symbols: 1.0.3 - hasown: 2.0.0 - dev: true + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + math-intrinsics: 1.1.0 - /get-stdin@4.0.1: - resolution: {integrity: sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw==} - engines: {node: '>=0.10.0'} - dev: true + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.1 - /get-stdin@9.0.0: - resolution: {integrity: sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==} - engines: {node: '>=12'} - dev: true + get-stdin@4.0.1: {} - /get-stream@6.0.1: - resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} - engines: {node: '>=10'} - dev: true + get-stream@6.0.1: {} - /get-symbol-description@1.0.0: - resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} - engines: {node: '>= 0.4'} + get-symbol-description@1.1.0: dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - dev: true + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 - /getpass@0.1.7: - resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==} - requiresBuild: true + getpass@0.1.7: dependencies: assert-plus: 1.0.0 - dev: true optional: true - /glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} + glob-parent@5.1.2: dependencies: is-glob: 4.0.3 - dev: true - /glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} + glob-parent@6.0.2: dependencies: is-glob: 4.0.3 - dev: true - /glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + glob@13.0.6: dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - dev: true + minimatch: 10.2.4 + minipass: 7.1.3 + path-scurry: 2.0.2 - /global-modules@2.0.0: - resolution: {integrity: sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==} - engines: {node: '>=6'} + global-modules@2.0.0: dependencies: global-prefix: 3.0.0 - dev: true - /global-prefix@3.0.0: - resolution: {integrity: sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==} - engines: {node: '>=6'} + global-prefix@3.0.0: dependencies: ini: 1.3.8 kind-of: 6.0.3 which: 1.3.1 - dev: true - /globals@13.24.0: - resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} - engines: {node: '>=8'} - dependencies: - type-fest: 0.20.2 - dev: true + globals@17.4.0: {} - /globals@9.18.0: - resolution: {integrity: sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==} - engines: {node: '>=0.10.0'} - dev: true + globals@9.18.0: {} - /globalthis@1.0.3: - resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} - engines: {node: '>= 0.4'} + globalthis@1.0.4: dependencies: define-properties: 1.2.1 - dev: true + gopd: 1.2.0 - /globalyzer@0.1.0: - resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==} - dev: true - - /globby@11.1.0: - resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} - engines: {node: '>=10'} - dependencies: - array-union: 2.1.0 - dir-glob: 3.0.1 - fast-glob: 3.3.2 - ignore: 5.3.0 - merge2: 1.4.1 - slash: 3.0.0 - dev: true + globalyzer@0.1.0: {} - /globby@13.2.2: - resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + globby@14.1.0: dependencies: - dir-glob: 3.0.1 - fast-glob: 3.3.2 - ignore: 5.3.0 - merge2: 1.4.1 - slash: 4.0.0 - dev: true + '@sindresorhus/merge-streams': 2.3.0 + fast-glob: 3.3.3 + ignore: 7.0.5 + path-type: 6.0.0 + slash: 5.1.0 + unicorn-magic: 0.3.0 - /globby@14.0.0: - resolution: {integrity: sha512-/1WM/LNHRAOH9lZta77uGbq0dAEQM+XjNesWwhlERDVenqothRbnzTrL3/LrIoEPPjeUHC3vrS6TwoyxeHs7MQ==} - engines: {node: '>=18'} + globby@16.1.1: dependencies: - '@sindresorhus/merge-streams': 1.0.0 - fast-glob: 3.3.2 - ignore: 5.3.0 - path-type: 5.0.0 + '@sindresorhus/merge-streams': 4.0.0 + fast-glob: 3.3.3 + ignore: 7.0.5 + is-path-inside: 4.0.0 slash: 5.1.0 - unicorn-magic: 0.1.0 - dev: true + unicorn-magic: 0.4.0 - /globjoin@0.1.4: - resolution: {integrity: sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==} - dev: true + globjoin@0.1.4: {} - /globrex@0.1.2: - resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} - dev: true + globrex@0.1.2: {} - /gopd@1.0.1: - resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} - dependencies: - get-intrinsic: 1.2.2 - dev: true + gopd@1.2.0: {} - /got@13.0.0: - resolution: {integrity: sha512-XfBk1CxOOScDcMr9O1yKkNaQyy865NbYs+F7dr4H0LZMVgCj2Le59k6PqbNHoL5ToeaEQUYh6c6yMfVcc6SJxA==} - engines: {node: '>=16'} + got@13.0.0: dependencies: '@sindresorhus/is': 5.6.0 '@szmarczak/http-timer': 5.0.1 @@ -3446,124 +6436,65 @@ packages: lowercase-keys: 3.0.0 p-cancelable: 3.0.0 responselike: 3.0.0 - dev: true - - /graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - dev: true - /graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - dev: true + graceful-fs@4.2.11: {} - /gzipper@7.2.0: - resolution: {integrity: sha512-qwYQr7GWBXIm9Cdzud+tyM/s9N+QFzGDZoF9YR8RYJbDKOYowzjMDPEinFtm78EQeeYMC/FJW2FXY0bHkyUgsA==} - engines: {node: '>=14'} - hasBin: true + gzipper@8.2.1: dependencies: '@gfx/zopfli': 1.0.15 - commander: 7.2.0 - deep-equal: 2.2.3 + commander: 12.1.0 simple-zstd: 1.4.2 - uuid: 8.3.2 - dev: true - /har-schema@2.0.0: - resolution: {integrity: sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==} - engines: {node: '>=4'} - requiresBuild: true - dev: true + har-schema@2.0.0: optional: true - /har-validator@5.1.5: - resolution: {integrity: sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==} - engines: {node: '>=6'} - deprecated: this library is no longer supported - requiresBuild: true + har-validator@5.1.5: dependencies: - ajv: 6.12.6 + ajv: 6.14.0 har-schema: 2.0.0 - dev: true optional: true - /hard-rejection@2.1.0: - resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} - engines: {node: '>=6'} - dev: true - - /has-ansi@2.0.0: - resolution: {integrity: sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==} - engines: {node: '>=0.10.0'} + has-ansi@2.0.0: dependencies: ansi-regex: 2.1.1 - dev: true - /has-bigints@1.0.2: - resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} - dev: true + has-bigints@1.1.0: {} - /has-flag@3.0.0: - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} - engines: {node: '>=4'} - dev: true + has-flag@3.0.0: {} - /has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - dev: true + has-flag@5.0.1: {} - /has-property-descriptors@1.0.1: - resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==} + has-property-descriptors@1.0.2: dependencies: - get-intrinsic: 1.2.2 - dev: true + es-define-property: 1.0.1 - /has-proto@1.0.1: - resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} - engines: {node: '>= 0.4'} - dev: true + has-proto@1.2.0: + dependencies: + dunder-proto: 1.0.1 - /has-symbols@1.0.3: - resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} - engines: {node: '>= 0.4'} - dev: true + has-symbols@1.1.0: {} - /has-tostringtag@1.0.0: - resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} - engines: {node: '>= 0.4'} + has-tostringtag@1.0.2: dependencies: - has-symbols: 1.0.3 - dev: true + has-symbols: 1.1.0 - /has-unicode@2.0.1: - resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} - dev: true + hashery@1.5.0: + dependencies: + hookified: 1.15.1 - /hasown@2.0.0: - resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} - engines: {node: '>= 0.4'} + hasown@2.0.2: dependencies: function-bind: 1.1.2 - dev: true - /hosted-git-info@2.8.9: - resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} - dev: true + hookified@1.15.1: {} - /hosted-git-info@4.1.0: - resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} - engines: {node: '>=10'} - dependencies: - lru-cache: 6.0.0 - dev: true + hookified@2.1.0: {} - /html-tags@3.3.1: - resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==} - engines: {node: '>=8'} - dev: true + hosted-git-info@2.8.9: {} - /htmlparser2@3.10.1: - resolution: {integrity: sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==} + html-tags@5.1.0: {} + + htmlparser2@3.10.1: dependencies: domelementtype: 1.3.1 domhandler: 2.4.2 @@ -3571,431 +6502,265 @@ packages: entities: 1.1.2 inherits: 2.0.4 readable-stream: 3.6.2 - dev: true - /htmlparser2@3.8.3: - resolution: {integrity: sha512-hBxEg3CYXe+rPIua8ETe7tmG3XDn9B0edOE/e9wH2nLczxzgdu0m0aNHY+5wFZiviLWLdANPJTssa92dMcXQ5Q==} + htmlparser2@3.8.3: dependencies: domelementtype: 1.3.1 domhandler: 2.3.0 domutils: 1.5.1 entities: 1.0.0 readable-stream: 1.1.14 - dev: true - /http-cache-semantics@4.1.1: - resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} - dev: true + http-cache-semantics@4.2.0: {} - /http-signature@1.2.0: - resolution: {integrity: sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==} - engines: {node: '>=0.8', npm: '>=1.3.7'} - requiresBuild: true + http-signature@1.2.0: dependencies: assert-plus: 1.0.0 jsprim: 1.4.2 sshpk: 1.18.0 - dev: true optional: true - /http2-wrapper@2.2.1: - resolution: {integrity: sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==} - engines: {node: '>=10.19.0'} + http2-wrapper@2.2.1: dependencies: quick-lru: 5.1.1 resolve-alpn: 1.2.1 - dev: true - /https-proxy-agent@5.0.1: - resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} - engines: {node: '>= 6'} + https-proxy-agent@7.0.6: dependencies: - agent-base: 6.0.2 - debug: 4.3.4 + agent-base: 7.1.4 + debug: 4.4.3 transitivePeerDependencies: - supports-color - dev: true - /hugo-bin@0.118.0: - resolution: {integrity: sha512-YVmmJIhoN9wJtHOR+FfVP2OFDymJF1Nop2MKSFmIKqOSu9B7ZfAn+yVCwernWNelepacjSYSoAebt+vFSsF5+g==} - engines: {node: '>=16'} - hasBin: true - requiresBuild: true + hugo-bin@0.149.2: dependencies: - '@xhmikosr/bin-wrapper': 12.0.0 - pkg-conf: 4.0.0 - dev: true + '@xhmikosr/bin-wrapper': 13.2.0 + package-config: 5.0.0 + transitivePeerDependencies: + - bare-abort-controller + - bare-buffer + - react-native-b4a + - supports-color - /human-signals@2.1.0: - resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} - engines: {node: '>=10.17.0'} - dev: true + human-signals@2.1.0: {} - /ice-cap@0.0.4: - resolution: {integrity: sha512-39ZblYEKlqj7LHgLkUcVk7zcJp772lOVQAUhN6QyY88w8/4bn5SgDeU2020yzHosf+uKPuCFK1UQ36gyBNiraw==} + ice-cap@0.0.4: dependencies: cheerio: 0.20.0 color-logger: 0.0.3 - dev: true - /ieee754@1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - dev: true + ieee754@1.2.1: {} - /ignore-by-default@2.1.0: - resolution: {integrity: sha512-yiWd4GVmJp0Q6ghmM2B/V3oZGRmjrKLXvHR3TE1nfoXsmoggllfZUQe74EN0fJdPFZu2NIvNdrMMLm3OsV7Ohw==} - engines: {node: '>=10 <11 || >=12 <13 || >=14'} - dev: true + ignore-by-default@2.1.0: {} - /ignore@5.3.0: - resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==} - engines: {node: '>= 4'} - dev: true + ignore@5.3.2: {} - /immutable@4.3.4: - resolution: {integrity: sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==} - dev: true + ignore@7.0.5: {} - /import-fresh@3.3.0: - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} - engines: {node: '>=6'} + immutable@5.1.5: {} + + import-fresh@3.3.1: dependencies: parent-module: 1.0.1 resolve-from: 4.0.0 - dev: true - - /import-lazy@4.0.0: - resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==} - engines: {node: '>=8'} - dev: true - /imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} - dev: true + import-meta-resolve@4.2.0: {} - /indent-string@5.0.0: - resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==} - engines: {node: '>=12'} - dev: true + imurmurhash@0.1.4: {} - /inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - dev: true + indent-string@5.0.0: {} - /inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - dev: true + inherits@2.0.4: {} - /ini@1.3.8: - resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} - dev: true + ini@1.3.8: {} - /inspect-with-kind@1.0.5: - resolution: {integrity: sha512-MAQUJuIo7Xqk8EVNP+6d3CKq9c80hi4tjIbIAT6lmGW9W6WzlHiu9PS8uSuUYU+Do+j1baiFp3H25XEVxDIG2g==} + inspect-with-kind@1.0.5: dependencies: kind-of: 6.0.3 - dev: true - /internal-slot@1.0.6: - resolution: {integrity: sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==} - engines: {node: '>= 0.4'} + internal-slot@1.1.0: dependencies: - get-intrinsic: 1.2.2 - hasown: 2.0.0 - side-channel: 1.0.4 - dev: true + es-errors: 1.3.0 + hasown: 2.0.2 + side-channel: 1.1.0 - /invariant@2.2.4: - resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} + invariant@2.2.4: dependencies: loose-envify: 1.4.0 - dev: true - /irregular-plurals@3.5.0: - resolution: {integrity: sha512-1ANGLZ+Nkv1ptFb2pa8oG8Lem4krflKuX/gINiHJHjJUKaJHk/SXk5x6K3J+39/p0h1RQ2saROclJJ+QLvETCQ==} - engines: {node: '>=8'} - dev: true + irregular-plurals@4.2.0: {} - /is-arguments@1.1.1: - resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} - engines: {node: '>= 0.4'} + is-array-buffer@3.0.5: dependencies: - call-bind: 1.0.5 - has-tostringtag: 1.0.0 - dev: true + call-bind: 1.0.8 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + + is-arrayish@0.2.1: {} - /is-array-buffer@3.0.2: - resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} + is-async-function@2.1.1: dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - is-typed-array: 1.1.12 - dev: true + async-function: 1.0.0 + call-bound: 1.0.4 + get-proto: 1.0.1 + has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 - /is-arrayish@0.2.1: - resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - dev: true + is-bigint@1.1.0: + dependencies: + has-bigints: 1.1.0 - /is-bigint@1.0.4: - resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + is-binary-path@2.1.0: dependencies: - has-bigints: 1.0.2 - dev: true + binary-extensions: 2.3.0 - /is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} + is-boolean-object@1.2.2: dependencies: - binary-extensions: 2.2.0 - dev: true + call-bound: 1.0.4 + has-tostringtag: 1.0.2 - /is-boolean-object@1.1.2: - resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} - engines: {node: '>= 0.4'} + is-callable@1.2.7: {} + + is-core-module@2.16.1: dependencies: - call-bind: 1.0.5 - has-tostringtag: 1.0.0 - dev: true + hasown: 2.0.2 - /is-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} - dev: true + is-data-view@1.0.2: + dependencies: + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + is-typed-array: 1.1.15 - /is-core-module@2.13.1: - resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + is-date-object@1.1.0: dependencies: - hasown: 2.0.0 - dev: true + call-bound: 1.0.4 + has-tostringtag: 1.0.2 - /is-date-object@1.0.5: - resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} - engines: {node: '>= 0.4'} + is-extglob@2.1.1: {} + + is-finalizationregistry@1.1.1: dependencies: - has-tostringtag: 1.0.0 - dev: true + call-bound: 1.0.4 - /is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - dev: true + is-finite@1.1.0: {} - /is-finite@1.1.0: - resolution: {integrity: sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==} - engines: {node: '>=0.10.0'} - dev: true + is-fullwidth-code-point@3.0.0: {} - /is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - dev: true + is-fullwidth-code-point@5.1.0: + dependencies: + get-east-asian-width: 1.5.0 - /is-fullwidth-code-point@4.0.0: - resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} - engines: {node: '>=12'} - dev: true + is-generator-function@1.1.2: + dependencies: + call-bound: 1.0.4 + generator-function: 2.0.1 + get-proto: 1.0.1 + has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 - /is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} + is-glob@4.0.3: dependencies: is-extglob: 2.1.1 - dev: true - /is-map@2.0.2: - resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==} - dev: true + is-map@2.0.3: {} - /is-negative-zero@2.0.2: - resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} - engines: {node: '>= 0.4'} - dev: true + is-negative-zero@2.0.3: {} - /is-number-object@1.0.7: - resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} - engines: {node: '>= 0.4'} + is-number-object@1.1.1: dependencies: - has-tostringtag: 1.0.0 - dev: true + call-bound: 1.0.4 + has-tostringtag: 1.0.2 - /is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - dev: true - - /is-path-cwd@3.0.0: - resolution: {integrity: sha512-kyiNFFLU0Ampr6SDZitD/DwUo4Zs1nSdnygUBqsu3LooL00Qvb5j+UnvApUn/TTj1J3OuE6BTdQ5rudKmU2ZaA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: true + is-number@7.0.0: {} - /is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} - dev: true + is-path-cwd@3.0.0: {} - /is-path-inside@4.0.0: - resolution: {integrity: sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==} - engines: {node: '>=12'} - dev: true + is-path-inside@4.0.0: {} - /is-plain-obj@1.1.0: - resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} - engines: {node: '>=0.10.0'} - dev: true + is-plain-obj@1.1.0: {} - /is-plain-object@5.0.0: - resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} - engines: {node: '>=0.10.0'} - dev: true + is-plain-object@5.0.0: {} - /is-promise@4.0.0: - resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} - dev: true + is-promise@4.0.0: {} - /is-regex@1.1.4: - resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} - engines: {node: '>= 0.4'} + is-regex@1.2.1: dependencies: - call-bind: 1.0.5 - has-tostringtag: 1.0.0 - dev: true + call-bound: 1.0.4 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 - /is-set@2.0.2: - resolution: {integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==} - dev: true + is-set@2.0.3: {} - /is-shared-array-buffer@1.0.2: - resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} + is-shared-array-buffer@1.0.4: dependencies: - call-bind: 1.0.5 - dev: true - - /is-stream@2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} - dev: true + call-bound: 1.0.4 - /is-stream@3.0.0: - resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: true + is-stream@2.0.1: {} - /is-string@1.0.7: - resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} - engines: {node: '>= 0.4'} + is-string@1.1.1: dependencies: - has-tostringtag: 1.0.0 - dev: true + call-bound: 1.0.4 + has-tostringtag: 1.0.2 - /is-symbol@1.0.4: - resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} - engines: {node: '>= 0.4'} + is-symbol@1.1.1: dependencies: - has-symbols: 1.0.3 - dev: true + call-bound: 1.0.4 + has-symbols: 1.1.0 + safe-regex-test: 1.1.0 - /is-typed-array@1.1.12: - resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} - engines: {node: '>= 0.4'} + is-typed-array@1.1.15: dependencies: - which-typed-array: 1.1.13 - dev: true + which-typed-array: 1.1.20 - /is-typedarray@1.0.0: - resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} - requiresBuild: true - dev: true + is-typedarray@1.0.0: optional: true - /is-unicode-supported@2.0.0: - resolution: {integrity: sha512-FRdAyx5lusK1iHG0TWpVtk9+1i+GjrzRffhDg4ovQ7mcidMQ6mj+MhKPmvh7Xwyv5gIS06ns49CA7Sqg7lC22Q==} - engines: {node: '>=18'} - dev: true + is-unicode-supported@2.1.0: {} - /is-weakmap@2.0.1: - resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==} - dev: true + is-weakmap@2.0.2: {} - /is-weakref@1.0.2: - resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + is-weakref@1.1.1: dependencies: - call-bind: 1.0.5 - dev: true + call-bound: 1.0.4 - /is-weakset@2.0.2: - resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==} + is-weakset@2.0.4: dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - dev: true + call-bound: 1.0.4 + get-intrinsic: 1.3.0 - /is-zst@1.0.0: - resolution: {integrity: sha512-ZA5lvshKAl8z30dX7saXLpVhpsq3d2EHK9uf7qtUjnOtdw4XBpAoWb2RvZ5kyoaebdoidnGI0g2hn9Z7ObPbww==} - dev: true + is-zst@1.0.0: {} - /isarray@0.0.1: - resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==} - dev: true + isarray@0.0.1: {} - /isarray@1.0.0: - resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} - dev: true + isarray@1.0.0: {} - /isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - dev: true + isarray@2.0.5: {} - /isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - dev: true + isexe@2.0.0: {} - /isstream@0.1.2: - resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==} - requiresBuild: true - dev: true + isstream@0.1.2: optional: true - /js-string-escape@1.0.1: - resolution: {integrity: sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg==} - engines: {node: '>= 0.8'} - dev: true + js-string-escape@1.0.1: {} - /js-tokens@3.0.2: - resolution: {integrity: sha512-RjTcuD4xjtthQkaWH7dFlH85L+QaVtSoOyGdZ3g6HFhS9dFNDfLyqgm2NFe2X6cQpeFmt0452FJjFG5UameExg==} - dev: true + js-tokens@3.0.2: {} - /js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - dev: true + js-tokens@4.0.0: {} - /js-yaml@3.14.1: - resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} - hasBin: true + js-yaml@3.14.2: dependencies: argparse: 1.0.10 esprima: 4.0.1 - dev: true - /js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true + js-yaml@4.1.1: dependencies: argparse: 2.0.1 - dev: true - /jsbn@0.1.1: - resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==} - requiresBuild: true - dev: true + jsbn@0.1.1: optional: true - /jsdom@7.2.2: - resolution: {integrity: sha512-kYeYuos/pYp0V/V8VAoGnUc0va0UZjTjwCsldBFZNBrOi9Q5kUXrvsw6W5/lQllB7hKXBARC4HRk1Sfk4dPFtA==} - requiresBuild: true + jsdom@7.2.2: dependencies: abab: 1.0.4 acorn: 2.7.0 @@ -4006,680 +6771,305 @@ packages: nwmatcher: 1.4.4 parse5: 1.5.1 request: 2.88.2 - sax: 1.3.0 + sax: 1.6.0 symbol-tree: 3.2.4 tough-cookie: 2.5.0 webidl-conversions: 2.0.1 whatwg-url-compat: 0.6.5 xml-name-validator: 2.0.1 - dev: true optional: true - /jsesc@1.3.0: - resolution: {integrity: sha512-Mke0DA0QjUWuJlhsE0ZPPhYiJkRap642SmI/4ztCFaUs6V2AiH1sfecc+57NgaryfAA2VR3v6O+CSjC1jZJKOA==} - hasBin: true - dev: true + jsesc@1.3.0: {} - /json-buffer@3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - dev: true + json-buffer@3.0.1: {} - /json-parse-better-errors@1.0.2: - resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} - dev: true + json-parse-better-errors@1.0.2: {} - /json-parse-even-better-errors@2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - dev: true + json-parse-even-better-errors@2.3.1: {} - /json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - dev: true + json-schema-traverse@0.4.1: {} - /json-schema-traverse@1.0.0: - resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} - dev: true + json-schema-traverse@1.0.0: {} - /json-schema@0.4.0: - resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} - requiresBuild: true - dev: true + json-schema@0.4.0: optional: true - /json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - dev: true + json-stable-stringify-without-jsonify@1.0.1: {} - /json-stringify-safe@5.0.1: - resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} - requiresBuild: true - dev: true + json-stringify-safe@5.0.1: optional: true - /jsonfile@2.4.0: - resolution: {integrity: sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==} + jsonfile@2.4.0: optionalDependencies: graceful-fs: 4.2.11 - dev: true - /jsonfile@4.0.0: - resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} + jsonfile@4.0.0: optionalDependencies: graceful-fs: 4.2.11 - dev: true - /jsonfile@6.1.0: - resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + jsonfile@6.2.0: dependencies: universalify: 2.0.1 optionalDependencies: graceful-fs: 4.2.11 - dev: true - /jsprim@1.4.2: - resolution: {integrity: sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==} - engines: {node: '>=0.6.0'} - requiresBuild: true + jsprim@1.4.2: dependencies: assert-plus: 1.0.0 extsprintf: 1.3.0 json-schema: 0.4.0 verror: 1.10.0 - dev: true optional: true - /junk@4.0.1: - resolution: {integrity: sha512-Qush0uP+G8ZScpGMZvHUiRfI0YBWuB3gVBYlI0v0vvOJt5FLicco+IkP0a50LqTTQhmts/m6tP5SWE+USyIvcQ==} - engines: {node: '>=12.20'} - dev: true - - /keypress@0.2.1: - resolution: {integrity: sha512-HjorDJFNhnM4SicvaUXac0X77NiskggxJdesG72+O5zBKpSqKFCrqmndKVqpu3pFqkla0St6uGk8Ju0sCurrmg==} - dev: true + junk@4.0.1: {} - /keyv@4.5.4: - resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + keyv@4.5.4: dependencies: json-buffer: 3.0.1 - dev: true - /kind-of@6.0.3: - resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} - engines: {node: '>=0.10.0'} - dev: true + keyv@5.6.0: + dependencies: + '@keyv/serialize': 1.1.1 - /klaw@1.3.1: - resolution: {integrity: sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==} + kind-of@6.0.3: {} + + klaw@1.3.1: optionalDependencies: graceful-fs: 4.2.11 - dev: true - /known-css-properties@0.29.0: - resolution: {integrity: sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ==} - dev: true + known-css-properties@0.37.0: {} - /levn@0.3.0: - resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==} - engines: {node: '>= 0.8.0'} - requiresBuild: true + levn@0.3.0: dependencies: prelude-ls: 1.1.2 type-check: 0.3.2 - dev: true optional: true - /levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} + levn@0.4.1: dependencies: prelude-ls: 1.2.1 type-check: 0.4.0 - dev: true - /lilconfig@3.0.0: - resolution: {integrity: sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==} - engines: {node: '>=14'} - dev: true + lilconfig@3.1.3: {} - /lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - dev: true + lines-and-columns@1.2.4: {} - /load-json-file@4.0.0: - resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==} - engines: {node: '>=4'} + load-json-file@4.0.0: dependencies: graceful-fs: 4.2.11 parse-json: 4.0.0 pify: 3.0.0 strip-bom: 3.0.0 - dev: true - /load-json-file@7.0.1: - resolution: {integrity: sha512-Gnxj3ev3mB5TkVBGad0JM6dmLiQL+o0t23JPBZ9sd+yvSLk05mFoqKBw5N8gbbkU4TNXyqCgIrl/VM17OgUIgQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: true + load-json-file@7.0.1: {} - /locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} + locate-path@6.0.0: dependencies: p-locate: 5.0.0 - dev: true - - /locate-path@7.2.0: - resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - p-locate: 6.0.0 - dev: true - - /lodash.assignin@4.2.0: - resolution: {integrity: sha512-yX/rx6d/UTVh7sSVWVSIMjfnz95evAgDFdb1ZozC35I9mSFCkmzptOzevxjgbQUsc78NR44LVHWjsoMQXy9FDg==} - dev: true - - /lodash.bind@4.2.1: - resolution: {integrity: sha512-lxdsn7xxlCymgLYo1gGvVrfHmkjDiyqVv62FAeF2i5ta72BipE1SLxw8hPEPLhD4/247Ijw07UQH7Hq/chT5LA==} - dev: true - - /lodash.debounce@4.0.8: - resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} - dev: true - - /lodash.defaults@4.2.0: - resolution: {integrity: sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==} - dev: true - - /lodash.filter@4.6.0: - resolution: {integrity: sha512-pXYUy7PR8BCLwX5mgJ/aNtyOvuJTdZAo9EQFUvMIYugqmJxnrYaANvTbgndOzHSCSR0wnlBBfRXJL5SbWxo3FQ==} - dev: true - /lodash.flatten@4.4.0: - resolution: {integrity: sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==} - dev: true + lodash.assignin@4.2.0: {} - /lodash.foreach@4.5.0: - resolution: {integrity: sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ==} - dev: true + lodash.bind@4.2.1: {} - /lodash.isempty@4.4.0: - resolution: {integrity: sha512-oKMuF3xEeqDltrGMfDxAPGIVMSSRv8tbRSODbrs4KGsRRLEhrW8N8Rd4DRgB2+621hY8A8XwwrTVhXWpxFvMzg==} - dev: true + lodash.defaults@4.2.0: {} - /lodash.isequal@4.5.0: - resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} - dev: true + lodash.filter@4.6.0: {} - /lodash.kebabcase@4.1.1: - resolution: {integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==} - dev: true + lodash.flatten@4.4.0: {} - /lodash.map@4.6.0: - resolution: {integrity: sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q==} - dev: true + lodash.foreach@4.5.0: {} - /lodash.memoize@4.1.2: - resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} - dev: true + lodash.map@4.6.0: {} - /lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - dev: true + lodash.memoize@4.1.2: {} - /lodash.pick@4.4.0: - resolution: {integrity: sha512-hXt6Ul/5yWjfklSGvLQl8vM//l3FtyHZeuelpzK6mm99pNvN9yTDruNZPEJZD1oWrqo+izBmB7oUfWgcCX7s4Q==} - dev: true + lodash.merge@4.6.2: {} - /lodash.reduce@4.6.0: - resolution: {integrity: sha512-6raRe2vxCYBhpBu+B+TtNGUzah+hQjVdu3E17wfusjyrXBka2nBS8OH/gjVZ5PvHOhWmIZTYri09Z6n/QfnNMw==} - dev: true + lodash.pick@4.4.0: {} - /lodash.reject@4.6.0: - resolution: {integrity: sha512-qkTuvgEzYdyhiJBx42YPzPo71R1aEr0z79kAv7Ixg8wPFEjgRgJdUsGMG3Hf3OYSF/kHI79XhNlt+5Ar6OzwxQ==} - dev: true + lodash.reduce@4.6.0: {} - /lodash.some@4.6.0: - resolution: {integrity: sha512-j7MJE+TuT51q9ggt4fSgVqro163BEFjAt3u97IqU+JA2DkWl80nFTrowzLpZ/BnpN7rrl0JA/593NAdd8p/scQ==} - dev: true + lodash.reject@4.6.0: {} - /lodash.truncate@4.4.2: - resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==} - dev: true + lodash.some@4.6.0: {} - /lodash.unionwith@4.6.0: - resolution: {integrity: sha512-Hk8otPCkVM4UxRoft3E5dAREwExyXci6iVPCibHIEiG7neb9KAdWHYS75MYpVTvxDrnpp7WCJNZ84vAk7j7tVA==} - dev: true + lodash.truncate@4.4.2: {} - /lodash.uniq@4.5.0: - resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} - dev: true + lodash.uniq@4.5.0: {} - /lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - dev: true + lodash@4.17.23: {} - /loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true + loose-envify@1.4.0: dependencies: js-tokens: 4.0.0 - dev: true - - /lowercase-keys@3.0.0: - resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: true - /lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} - dependencies: - yallist: 4.0.0 - dev: true - - /make-dir@3.1.0: - resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} - engines: {node: '>=8'} - dependencies: - semver: 6.3.1 - dev: true - - /make-dir@4.0.0: - resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} - engines: {node: '>=10'} - dependencies: - semver: 7.5.4 - dev: true + lowercase-keys@3.0.0: {} - /map-obj@1.0.1: - resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} - engines: {node: '>=0.10.0'} - dev: true - - /map-obj@4.3.0: - resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} - engines: {node: '>=8'} - dev: true + lru-cache@11.2.7: {} - /marked@0.3.19: - resolution: {integrity: sha512-ea2eGWOqNxPcXv8dyERdSr/6FmzvWwzjMxpfGB/sbMccXoct+xY+YukPD+QTUZwyvK7BZwcr4m21WBOW41pAkg==} - engines: {node: '>=0.10.0'} - hasBin: true - dev: true + marked@0.3.19: {} - /matcher@5.0.0: - resolution: {integrity: sha512-s2EMBOWtXFc8dgqvoAzKJXxNHibcdJMV0gwqKUaw9E2JBJuGUK7DrNKrA6g/i+v72TT16+6sVm5mS3thaMLQUw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + matcher@6.0.0: dependencies: escape-string-regexp: 5.0.0 - dev: true - /mathml-tag-names@2.1.3: - resolution: {integrity: sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==} - dev: true + math-intrinsics@1.1.0: {} - /md5-hex@3.0.1: - resolution: {integrity: sha512-BUiRtTtV39LIJwinWBjqVsU9xhdnz7/i889V859IBFpuqGAj6LuOvHv5XLbgZ2R7ptJoJaEcxkv88/h25T7Ciw==} - engines: {node: '>=8'} + mathml-tag-names@4.0.0: {} + + md5-hex@3.0.1: dependencies: blueimp-md5: 2.19.0 - dev: true - /mdn-data@2.0.28: - resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==} - dev: true + mdn-data@2.0.28: {} - /mdn-data@2.0.30: - resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} - dev: true + mdn-data@2.27.1: {} - /memoize@10.0.0: - resolution: {integrity: sha512-H6cBLgsi6vMWOcCpvVCdFFnl3kerEXbrYh9q+lY6VXvQSmM6CkmV08VOwT+WE2tzIEqRPFfAq3fm4v/UIW6mSA==} - engines: {node: '>=18'} + memoize@10.2.0: dependencies: - mimic-function: 5.0.0 - dev: true + mimic-function: 5.0.1 - /memorystream@0.3.1: - resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==} - engines: {node: '>= 0.10.0'} - dev: true + memorystream@0.3.1: {} - /meow@10.1.5: - resolution: {integrity: sha512-/d+PQ4GKmGvM9Bee/DPa8z3mXs/pkvJE2KEThngVNOqtmljC6K7NMPxtc2JeZYTmpWb9k/TmxjeL18ez3h7vCw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - '@types/minimist': 1.2.5 - camelcase-keys: 7.0.2 - decamelize: 5.0.1 - decamelize-keys: 1.1.1 - hard-rejection: 2.1.0 - minimist-options: 4.1.0 - normalize-package-data: 3.0.3 - read-pkg-up: 8.0.0 - redent: 4.0.0 - trim-newlines: 4.1.1 - type-fest: 1.4.0 - yargs-parser: 20.2.9 - dev: true - - /meow@12.1.1: - resolution: {integrity: sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==} - engines: {node: '>=16.10'} - dev: true - - /merge-stream@2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - dev: true + meow@14.1.0: {} - /merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - dev: true + merge-stream@2.0.0: {} - /meshoptimizer@0.18.1: - resolution: {integrity: sha512-ZhoIoL7TNV4s5B6+rx5mC//fw8/POGyNxS/DZyCJeiZ12ScLfVwRE/GfsxwiTkMYYD5DmK2/JXnEVXqL4rF+Sw==} - dev: true + merge2@1.4.1: {} - /micromatch@4.0.5: - resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} - engines: {node: '>=8.6'} + meshoptimizer@1.0.1: {} + + micromatch@4.0.8: dependencies: - braces: 3.0.2 + braces: 3.0.3 picomatch: 2.3.1 - dev: true - /mime-db@1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} - engines: {node: '>= 0.6'} - dev: true + mime-db@1.52.0: + optional: true - /mime-types@2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} - engines: {node: '>= 0.6'} - requiresBuild: true + mime-db@1.54.0: {} + + mime-types@2.1.35: dependencies: mime-db: 1.52.0 - dev: true optional: true - /mimic-fn@2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} - dev: true - - /mimic-function@5.0.0: - resolution: {integrity: sha512-RBfQ+9X9DpXdEoK7Bu+KeEU6vFhumEIiXKWECPzRBmDserEq4uR2b/VCm0LwpMSosoq2k+Zuxj/GzOr0Fn6h/g==} - engines: {node: '>=18'} - dev: true + mimic-fn@2.1.0: {} - /mimic-response@3.1.0: - resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} - engines: {node: '>=10'} - dev: true + mimic-function@5.0.1: {} - /mimic-response@4.0.0: - resolution: {integrity: sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: true + mimic-response@3.1.0: {} - /min-indent@1.0.1: - resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} - engines: {node: '>=4'} - dev: true + mimic-response@4.0.0: {} - /minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + minimatch@10.2.4: dependencies: - brace-expansion: 1.1.11 - dev: true + brace-expansion: 5.0.4 - /minimist-options@4.1.0: - resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} - engines: {node: '>= 6'} + minimatch@3.1.5: dependencies: - arrify: 1.0.1 - is-plain-obj: 1.1.0 - kind-of: 6.0.3 - dev: true - - /minimist@1.2.0: - resolution: {integrity: sha512-7Wl+Jz+IGWuSdgsQEJ4JunV0si/iMhg42MnQQG6h1R6TNeVenp4U9x5CC5v/gYqz/fENLQITAWXidNtVL0NNbw==} - dev: true + brace-expansion: 1.1.12 - /minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - dev: true + minimist@1.2.0: {} - /minipass@3.3.6: - resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} - engines: {node: '>=8'} - dependencies: - yallist: 4.0.0 - dev: true + minimist@1.2.8: {} - /minipass@5.0.0: - resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} - engines: {node: '>=8'} - dev: true + minipass@7.1.3: {} - /minizlib@2.1.2: - resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} - engines: {node: '>= 8'} + minizlib@3.1.0: dependencies: - minipass: 3.3.6 - yallist: 4.0.0 - dev: true - - /mkdirp@1.0.4: - resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} - engines: {node: '>=10'} - hasBin: true - dev: true - - /ms@2.0.0: - resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} - dev: true + minipass: 7.1.3 - /ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - dev: true + ms@2.0.0: {} - /ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - dev: true + ms@2.1.3: {} - /nanoid@3.3.7: - resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - dev: true + nanoid@3.3.11: {} - /natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - dev: true + natural-compare@1.4.0: {} - /nested-error-stacks@2.1.1: - resolution: {integrity: sha512-9iN1ka/9zmX1ZvLV9ewJYEk9h7RyRRtqdK0woXcqohu8EWIerfPUjYJPg0ULy0UqP7cslmdGc8xKDJcojlKiaw==} - dev: true + nice-try@1.0.5: {} - /nice-try@1.0.5: - resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} - dev: true + node-addon-api@7.1.1: + optional: true - /node-fetch@2.7.0: - resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} - engines: {node: 4.x || >=6.0.0} - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true + node-fetch@2.7.0: dependencies: whatwg-url: 5.0.0 - dev: true - /node-gyp-build@4.7.1: - resolution: {integrity: sha512-wTSrZ+8lsRRa3I3H8Xr65dLWSgCvY2l4AOnaeKdPA9TB/WYMPaTcrzf3rXvFoVvjKNVnu0CcWSx54qq9GKRUYg==} - hasBin: true - dev: true + node-gyp-build@4.8.4: {} - /node-releases@2.0.14: - resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} - dev: true + node-releases@2.0.36: {} - /nofilter@3.1.0: - resolution: {integrity: sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==} - engines: {node: '>=12.19'} - dev: true + nofilter@3.1.0: {} - /nopt@5.0.0: - resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==} - engines: {node: '>=6'} - hasBin: true + nopt@8.1.0: dependencies: - abbrev: 1.1.1 - dev: true + abbrev: 3.0.1 - /normalize-package-data@2.5.0: - resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} + normalize-package-data@2.5.0: dependencies: hosted-git-info: 2.8.9 - resolve: 1.22.8 + resolve: 1.22.11 semver: 5.7.2 validate-npm-package-license: 3.0.4 - dev: true - - /normalize-package-data@3.0.3: - resolution: {integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==} - engines: {node: '>=10'} - dependencies: - hosted-git-info: 4.1.0 - is-core-module: 2.13.1 - semver: 7.5.4 - validate-npm-package-license: 3.0.4 - dev: true - - /normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - dev: true - /normalize-range@0.1.2: - resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} - engines: {node: '>=0.10.0'} - dev: true + normalize-path@3.0.0: {} - /normalize-url@8.0.0: - resolution: {integrity: sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==} - engines: {node: '>=14.16'} - dev: true + normalize-url@8.1.1: {} - /npm-run-all@4.1.5: - resolution: {integrity: sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==} - engines: {node: '>= 4'} - hasBin: true + npm-run-all@4.1.5: dependencies: ansi-styles: 3.2.1 chalk: 2.4.2 - cross-spawn: 6.0.5 + cross-spawn: 6.0.6 memorystream: 0.3.1 - minimatch: 3.1.2 + minimatch: 3.1.5 pidtree: 0.3.1 read-pkg: 3.0.0 - shell-quote: 1.8.1 - string.prototype.padend: 3.1.5 - dev: true + shell-quote: 1.8.3 + string.prototype.padend: 3.1.6 - /npm-run-path@4.0.1: - resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} - engines: {node: '>=8'} + npm-run-path@4.0.1: dependencies: path-key: 3.1.1 - dev: true - /npmlog@5.0.1: - resolution: {integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==} - dependencies: - are-we-there-yet: 2.0.0 - console-control-strings: 1.1.0 - gauge: 3.0.2 - set-blocking: 2.0.0 - dev: true - - /nth-check@1.0.2: - resolution: {integrity: sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==} + nth-check@1.0.2: dependencies: boolbase: 1.0.0 - dev: true - /nth-check@2.1.1: - resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + nth-check@2.1.1: dependencies: boolbase: 1.0.0 - dev: true - /nwmatcher@1.4.4: - resolution: {integrity: sha512-3iuY4N5dhgMpCUrOVnuAdGrgxVqV2cJpM+XNccjR2DKOB1RUP0aA+wGXEiNziG/UKboFyGBIoKOaNlJxx8bciQ==} - requiresBuild: true - dev: true + nwmatcher@1.4.4: optional: true - /oauth-sign@0.9.0: - resolution: {integrity: sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==} - requiresBuild: true - dev: true + oauth-sign@0.9.0: optional: true - /object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} - dev: true - - /object-inspect@1.13.1: - resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} - dev: true - - /object-is@1.1.5: - resolution: {integrity: sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - dev: true + object-inspect@1.13.4: {} - /object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} - dev: true + object-keys@1.1.1: {} - /object.assign@4.1.5: - resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} - engines: {node: '>= 0.4'} + object.assign@4.1.7: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.8 + call-bound: 1.0.4 define-properties: 1.2.1 - has-symbols: 1.0.3 + es-object-atoms: 1.1.1 + has-symbols: 1.1.0 object-keys: 1.1.1 - dev: true - /once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + once@1.4.0: dependencies: wrappy: 1.0.2 - dev: true - /onetime@5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} + onetime@5.1.2: dependencies: mimic-fn: 2.1.0 - dev: true - /optionator@0.8.3: - resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} - engines: {node: '>= 0.8.0'} - requiresBuild: true + optionator@0.8.3: dependencies: deep-is: 0.1.4 fast-levenshtein: 2.0.6 @@ -4687,1094 +7077,609 @@ packages: prelude-ls: 1.1.2 type-check: 0.3.2 word-wrap: 1.2.5 - dev: true optional: true - /optionator@0.9.3: - resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} - engines: {node: '>= 0.8.0'} + optionator@0.9.4: dependencies: - '@aashutoshrathi/word-wrap': 1.2.6 deep-is: 0.1.4 fast-levenshtein: 2.0.6 levn: 0.4.1 prelude-ls: 1.2.1 type-check: 0.4.0 - dev: true + word-wrap: 1.2.5 - /os-filter-obj@2.0.0: - resolution: {integrity: sha512-uksVLsqG3pVdzzPvmAHpBK0wKxYItuzZr7SziusRPoz67tGV8rL1szZ6IdeUrbqLjGDwApBtN29eEE3IqGHOjg==} - engines: {node: '>=4'} + own-keys@1.0.1: dependencies: - arch: 2.2.0 - dev: true - - /os-tmpdir@1.0.2: - resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} - engines: {node: '>=0.10.0'} - dev: true + get-intrinsic: 1.3.0 + object-keys: 1.1.1 + safe-push-apply: 1.0.0 - /p-cancelable@3.0.0: - resolution: {integrity: sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==} - engines: {node: '>=12.20'} - dev: true + p-cancelable@3.0.0: {} - /p-event@5.0.1: - resolution: {integrity: sha512-dd589iCQ7m1L0bmC5NLlVYfy3TbBEsMUfWx9PyAgPeIcFZ/E2yaTZ4Rz4MiBmmJShviiftHVXOqfnfzJ6kyMrQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + p-event@6.0.1: dependencies: - p-timeout: 5.1.0 - dev: true + p-timeout: 6.1.4 - /p-filter@3.0.0: - resolution: {integrity: sha512-QtoWLjXAW++uTX67HZQz1dbTpqBfiidsB6VtQUC9iR85S120+s0T5sO6s+B5MLzFcZkrEd/DGMmCjR+f2Qpxwg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + p-filter@4.1.0: dependencies: - p-map: 5.5.0 - dev: true + p-map: 7.0.4 - /p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} + p-limit@3.1.0: dependencies: yocto-queue: 0.1.0 - dev: true - /p-limit@4.0.0: - resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - yocto-queue: 1.0.0 - dev: true - - /p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} + p-locate@5.0.0: dependencies: p-limit: 3.1.0 - dev: true - - /p-locate@6.0.0: - resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - p-limit: 4.0.0 - dev: true - /p-map@5.5.0: - resolution: {integrity: sha512-VFqfGDHlx87K66yZrNdI4YGtD70IRyd+zSvgks6mzHPRNkoKy+9EKP4SFC77/vTTQYmRmti7dvqC+m5jBrBAcg==} - engines: {node: '>=12'} - dependencies: - aggregate-error: 4.0.1 - dev: true - - /p-map@6.0.0: - resolution: {integrity: sha512-T8BatKGY+k5rU+Q/GTYgrEf2r4xRMevAN5mtXc2aPc4rS1j3s+vWTaO2Wag94neXuCAUAs8cxBL9EeB5EA6diw==} - engines: {node: '>=16'} - dev: true + p-map@7.0.4: {} - /p-timeout@5.1.0: - resolution: {integrity: sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew==} - engines: {node: '>=12'} - dev: true + p-timeout@6.1.4: {} - /package-config@5.0.0: - resolution: {integrity: sha512-GYTTew2slBcYdvRHqjhwaaydVMvn/qrGC323+nKclYioNSLTDUM/lGgtGTgyHVtYcozb+XkE8CNhwcraOmZ9Mg==} - engines: {node: '>=18'} + package-config@5.0.0: dependencies: - find-up-simple: 1.0.0 + find-up-simple: 1.0.1 load-json-file: 7.0.1 - dev: true - /parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} + parent-module@1.0.1: dependencies: callsites: 3.1.0 - dev: true - /parse-json@4.0.0: - resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} - engines: {node: '>=4'} + parse-json@4.0.0: dependencies: - error-ex: 1.3.2 + error-ex: 1.3.4 json-parse-better-errors: 1.0.2 - dev: true - /parse-json@5.2.0: - resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} - engines: {node: '>=8'} + parse-json@5.2.0: dependencies: - '@babel/code-frame': 7.23.5 - error-ex: 1.3.2 + '@babel/code-frame': 7.29.0 + error-ex: 1.3.4 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 - dev: true - /parse-ms@3.0.0: - resolution: {integrity: sha512-Tpb8Z7r7XbbtBTrM9UhpkzzaMrqA2VXMT3YChzYltwV3P3pM6t8wl7TvpMnSTosz1aQAdVib7kdoys7vYOPerw==} - engines: {node: '>=12'} - dev: true + parse-ms@4.0.0: {} - /parse5@1.5.1: - resolution: {integrity: sha512-w2jx/0tJzvgKwZa58sj2vAYq/S/K1QJfIB3cWYea/Iu1scFPDQQ3IQiVZTHWtRBwAjv2Yd7S/xeZf3XqLDb3bA==} - requiresBuild: true - dev: true + parse5@1.5.1: optional: true - /parse5@3.0.3: - resolution: {integrity: sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==} + parse5@3.0.3: dependencies: - '@types/node': 20.10.5 - dev: true + '@types/node': 25.5.0 - /path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} - dev: true - - /path-exists@5.0.0: - resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: true + path-exists@4.0.0: {} - /path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - dev: true + path-key@2.0.1: {} - /path-key@2.0.1: - resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} - engines: {node: '>=4'} - dev: true + path-key@3.1.1: {} - /path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} - dev: true + path-parse@1.0.7: {} - /path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - dev: true + path-scurry@2.0.2: + dependencies: + lru-cache: 11.2.7 + minipass: 7.1.3 - /path-type@3.0.0: - resolution: {integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==} - engines: {node: '>=4'} + path-type@3.0.0: dependencies: pify: 3.0.0 - dev: true - - /path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} - dev: true - - /path-type@5.0.0: - resolution: {integrity: sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==} - engines: {node: '>=12'} - dev: true - /peek-readable@5.0.0: - resolution: {integrity: sha512-YtCKvLUOvwtMGmrniQPdO7MwPjgkFBtFIrmfSbYmYuq3tKDV/mcfAhBth1+C3ru7uXIZasc/pHnb+YDYNkkj4A==} - engines: {node: '>=14.16'} - dev: true + path-type@6.0.0: {} - /peek-stream@1.1.3: - resolution: {integrity: sha512-FhJ+YbOSBb9/rIl2ZeE/QHEsWn7PqNYt8ARAY3kIgNGOk13g9FGyIY6JIl/xB/3TFRVoTv5as0l11weORrTekA==} + peek-stream@1.1.3: dependencies: buffer-from: 1.1.2 duplexify: 3.7.1 through2: 2.0.5 - dev: true - /pend@1.2.0: - resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} - dev: true + pend@1.2.0: {} - /performance-now@2.1.0: - resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} - requiresBuild: true - dev: true + performance-now@2.1.0: optional: true - /picocolors@1.0.0: - resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} - dev: true + picocolors@1.1.1: {} - /picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - dev: true + picomatch@2.3.1: {} - /picomatch@3.0.1: - resolution: {integrity: sha512-I3EurrIQMlRc9IaAZnqRR044Phh2DXY+55o7uJ0V+hYZAcQYSuFWsc9q5PvyDHUSCe1Qxn/iBz+78s86zWnGag==} - engines: {node: '>=10'} - dev: true + picomatch@4.0.3: {} - /pidtree@0.3.1: - resolution: {integrity: sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==} - engines: {node: '>=0.10'} - hasBin: true - dev: true + pidtree@0.3.1: {} - /pify@2.3.0: - resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} - engines: {node: '>=0.10.0'} - dev: true + pify@2.3.0: {} - /pify@3.0.0: - resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} - engines: {node: '>=4'} - dev: true + pify@3.0.0: {} - /pkg-conf@4.0.0: - resolution: {integrity: sha512-7dmgi4UY4qk+4mj5Cd8v/GExPo0K+SlY+hulOSdfZ/T6jVH6//y7NtzZo5WrfhDBxuQ0jCa7fLZmNaNh7EWL/w==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + plur@6.0.0: dependencies: - find-up: 6.3.0 - load-json-file: 7.0.1 - dev: true + irregular-plurals: 4.2.0 - /plur@5.1.0: - resolution: {integrity: sha512-VP/72JeXqak2KiOzjgKtQen5y3IZHn+9GOuLDafPv0eXa47xq0At93XahYBs26MsifCQ4enGKwbjBTKgb9QJXg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - irregular-plurals: 3.5.0 - dev: true + possible-typed-array-names@1.1.0: {} - /postcss-attribute-case-insensitive@6.0.2(postcss@8.4.32): - resolution: {integrity: sha512-IRuCwwAAQbgaLhxQdQcIIK0dCVXg3XDUnzgKD8iwdiYdwU4rMWRWyl/W9/0nA4ihVpq5pyALiHB2veBJ0292pw==} - engines: {node: ^14 || ^16 || >=18} - peerDependencies: - postcss: ^8.4 + postcss-attribute-case-insensitive@8.0.0(postcss@8.5.8): dependencies: - postcss: 8.4.32 - postcss-selector-parser: 6.0.13 - dev: true + postcss: 8.5.8 + postcss-selector-parser: 7.1.1 - /postcss-calc@9.0.1(postcss@8.4.32): - resolution: {integrity: sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.2.2 + postcss-calc@10.1.1(postcss@8.5.8): dependencies: - postcss: 8.4.32 - postcss-selector-parser: 6.0.13 + postcss: 8.5.8 + postcss-selector-parser: 7.1.1 postcss-value-parser: 4.2.0 - dev: true - - /postcss-clamp@4.1.0(postcss@8.4.32): - resolution: {integrity: sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==} - engines: {node: '>=7.6.0'} - peerDependencies: - postcss: ^8.4.6 + + postcss-clamp@4.1.0(postcss@8.5.8): dependencies: - postcss: 8.4.32 + postcss: 8.5.8 postcss-value-parser: 4.2.0 - dev: true - /postcss-cli@11.0.0(postcss@8.4.32): - resolution: {integrity: sha512-xMITAI7M0u1yolVcXJ9XTZiO9aO49mcoKQy6pCDFdMh9kGqhzLVpWxeD/32M/QBmkhcGypZFFOLNLmIW4Pg4RA==} - engines: {node: '>=18'} - hasBin: true - peerDependencies: - postcss: ^8.0.0 + postcss-cli@11.0.1(postcss@8.5.8): dependencies: - chokidar: 3.5.3 - dependency-graph: 0.11.0 - fs-extra: 11.2.0 - get-stdin: 9.0.0 - globby: 14.0.0 - picocolors: 1.0.0 - postcss: 8.4.32 - postcss-load-config: 5.0.2(postcss@8.4.32) - postcss-reporter: 7.0.5(postcss@8.4.32) + chokidar: 3.6.0 + dependency-graph: 1.0.0 + fs-extra: 11.3.4 + picocolors: 1.1.1 + postcss: 8.5.8 + postcss-load-config: 5.1.0(postcss@8.5.8) + postcss-reporter: 7.1.0(postcss@8.5.8) pretty-hrtime: 1.0.3 read-cache: 1.0.0 slash: 5.1.0 + tinyglobby: 0.2.15 yargs: 17.7.2 transitivePeerDependencies: - jiti - dev: true + - tsx - /postcss-color-functional-notation@6.0.3(postcss@8.4.32): - resolution: {integrity: sha512-2jBr3H0sk3qGh/3BkmLsOKcYyVfSlM1K2QQYVU7eW5mkg7ZOQ4aU/Rtbh7vJ9FxAfgf8iHRwXBsQkHqUxzTkXw==} - engines: {node: ^14 || ^16 || >=18} - peerDependencies: - postcss: ^8.4 + postcss-color-functional-notation@8.0.2(postcss@8.5.8): dependencies: - '@csstools/css-color-parser': 1.5.0(@csstools/css-parser-algorithms@2.4.0)(@csstools/css-tokenizer@2.2.2) - '@csstools/css-parser-algorithms': 2.4.0(@csstools/css-tokenizer@2.2.2) - '@csstools/css-tokenizer': 2.2.2 - '@csstools/postcss-progressive-custom-properties': 3.0.3(postcss@8.4.32) - postcss: 8.4.32 - dev: true + '@csstools/css-color-parser': 4.0.2(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) + '@csstools/css-tokenizer': 4.0.0 + '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.8) + '@csstools/utilities': 3.0.0(postcss@8.5.8) + postcss: 8.5.8 - /postcss-color-hex-alpha@9.0.3(postcss@8.4.32): - resolution: {integrity: sha512-7sEHU4tAS6htlxun8AB9LDrCXoljxaC34tFVRlYKcvO+18r5fvGiXgv5bQzN40+4gXLCyWSMRK5FK31244WcCA==} - engines: {node: ^14 || ^16 || >=18} - peerDependencies: - postcss: ^8.4 + postcss-color-hex-alpha@11.0.0(postcss@8.5.8): dependencies: - postcss: 8.4.32 + '@csstools/utilities': 3.0.0(postcss@8.5.8) + postcss: 8.5.8 postcss-value-parser: 4.2.0 - dev: true - /postcss-color-rebeccapurple@9.0.2(postcss@8.4.32): - resolution: {integrity: sha512-f+RDEAPW2m8UbJWkSpRfV+QxhSaQhDMihI75DVGJJh4oRIoegjheeRtINFJum9D8BqGJcvD4GLjggTvCwZ4zuA==} - engines: {node: ^14 || ^16 || >=18} - peerDependencies: - postcss: ^8.4 + postcss-color-rebeccapurple@11.0.0(postcss@8.5.8): dependencies: - postcss: 8.4.32 + '@csstools/utilities': 3.0.0(postcss@8.5.8) + postcss: 8.5.8 postcss-value-parser: 4.2.0 - dev: true - /postcss-colormin@6.0.1(postcss@8.4.32): - resolution: {integrity: sha512-Tb9aR2wCJCzKuNjIeMzVNd0nXjQy25HDgFmmaRsHnP0eP/k8uQWE4S8voX5S2coO5CeKrp+USFs1Ayv9Tpxx6w==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 + postcss-colormin@7.0.6(postcss@8.5.8): dependencies: - browserslist: 4.22.2 + browserslist: 4.28.1 caniuse-api: 3.0.0 colord: 2.9.3 - postcss: 8.4.32 + postcss: 8.5.8 postcss-value-parser: 4.2.0 - dev: true - /postcss-convert-values@6.0.1(postcss@8.4.32): - resolution: {integrity: sha512-zTd4Vh0HxGkhg5aHtfCogcRHzGkvblfdWlQ53lIh1cJhYcGyIxh2hgtKoVh40AMktRERet+JKdB04nNG19kjmA==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 + postcss-convert-values@7.0.9(postcss@8.5.8): dependencies: - browserslist: 4.22.2 - postcss: 8.4.32 + browserslist: 4.28.1 + postcss: 8.5.8 postcss-value-parser: 4.2.0 - dev: true - /postcss-custom-media@10.0.2(postcss@8.4.32): - resolution: {integrity: sha512-zcEFNRmDm2fZvTPdI1pIW3W//UruMcLosmMiCdpQnrCsTRzWlKQPYMa1ud9auL0BmrryKK1+JjIGn19K0UjO/w==} - engines: {node: ^14 || ^16 || >=18} - peerDependencies: - postcss: ^8.4 + postcss-custom-media@12.0.1(postcss@8.5.8): dependencies: - '@csstools/cascade-layer-name-parser': 1.0.6(@csstools/css-parser-algorithms@2.4.0)(@csstools/css-tokenizer@2.2.2) - '@csstools/css-parser-algorithms': 2.4.0(@csstools/css-tokenizer@2.2.2) - '@csstools/css-tokenizer': 2.2.2 - '@csstools/media-query-list-parser': 2.1.6(@csstools/css-parser-algorithms@2.4.0)(@csstools/css-tokenizer@2.2.2) - postcss: 8.4.32 - dev: true + '@csstools/cascade-layer-name-parser': 3.0.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) + '@csstools/css-tokenizer': 4.0.0 + '@csstools/media-query-list-parser': 5.0.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + postcss: 8.5.8 - /postcss-custom-properties@13.3.3(postcss@8.4.32): - resolution: {integrity: sha512-xLmILb2R83aG4X++iVFg8TWadOlc45xiyFHRZD6Yhhu2igrTHXL6C75AEWqx6k9lxrr9sK5rcfUI9JvTCxBTvA==} - engines: {node: ^14 || ^16 || >=18} - peerDependencies: - postcss: ^8.4 + postcss-custom-properties@15.0.1(postcss@8.5.8): dependencies: - '@csstools/cascade-layer-name-parser': 1.0.6(@csstools/css-parser-algorithms@2.4.0)(@csstools/css-tokenizer@2.2.2) - '@csstools/css-parser-algorithms': 2.4.0(@csstools/css-tokenizer@2.2.2) - '@csstools/css-tokenizer': 2.2.2 - postcss: 8.4.32 + '@csstools/cascade-layer-name-parser': 3.0.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) + '@csstools/css-tokenizer': 4.0.0 + '@csstools/utilities': 3.0.0(postcss@8.5.8) + postcss: 8.5.8 postcss-value-parser: 4.2.0 - dev: true - /postcss-custom-selectors@7.1.6(postcss@8.4.32): - resolution: {integrity: sha512-svsjWRaxqL3vAzv71dV0/65P24/FB8TbPX+lWyyf9SZ7aZm4S4NhCn7N3Bg+Z5sZunG3FS8xQ80LrCU9hb37cw==} - engines: {node: ^14 || ^16 || >=18} - peerDependencies: - postcss: ^8.4 + postcss-custom-selectors@9.0.1(postcss@8.5.8): dependencies: - '@csstools/cascade-layer-name-parser': 1.0.6(@csstools/css-parser-algorithms@2.4.0)(@csstools/css-tokenizer@2.2.2) - '@csstools/css-parser-algorithms': 2.4.0(@csstools/css-tokenizer@2.2.2) - '@csstools/css-tokenizer': 2.2.2 - postcss: 8.4.32 - postcss-selector-parser: 6.0.13 - dev: true + '@csstools/cascade-layer-name-parser': 3.0.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) + '@csstools/css-tokenizer': 4.0.0 + postcss: 8.5.8 + postcss-selector-parser: 7.1.1 - /postcss-dir-pseudo-class@8.0.1(postcss@8.4.32): - resolution: {integrity: sha512-uULohfWBBVoFiZXgsQA24JV6FdKIidQ+ZqxOouhWwdE+qJlALbkS5ScB43ZTjPK+xUZZhlaO/NjfCt5h4IKUfw==} - engines: {node: ^14 || ^16 || >=18} - peerDependencies: - postcss: ^8.4 + postcss-dir-pseudo-class@10.0.0(postcss@8.5.8): dependencies: - postcss: 8.4.32 - postcss-selector-parser: 6.0.13 - dev: true + postcss: 8.5.8 + postcss-selector-parser: 7.1.1 - /postcss-discard-comments@6.0.1(postcss@8.4.32): - resolution: {integrity: sha512-f1KYNPtqYLUeZGCHQPKzzFtsHaRuECe6jLakf/RjSRqvF5XHLZnM2+fXLhb8Qh/HBFHs3M4cSLb1k3B899RYIg==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 + postcss-discard-comments@7.0.6(postcss@8.5.8): dependencies: - postcss: 8.4.32 - dev: true + postcss: 8.5.8 + postcss-selector-parser: 7.1.1 - /postcss-discard-duplicates@6.0.1(postcss@8.4.32): - resolution: {integrity: sha512-1hvUs76HLYR8zkScbwyJ8oJEugfPV+WchpnA+26fpJ7Smzs51CzGBHC32RS03psuX/2l0l0UKh2StzNxOrKCYg==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 + postcss-discard-duplicates@7.0.2(postcss@8.5.8): dependencies: - postcss: 8.4.32 - dev: true + postcss: 8.5.8 - /postcss-discard-empty@6.0.1(postcss@8.4.32): - resolution: {integrity: sha512-yitcmKwmVWtNsrrRqGJ7/C0YRy53i0mjexBDQ9zYxDwTWVBgbU4+C9jIZLmQlTDT9zhml+u0OMFJh8+31krmOg==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 + postcss-discard-empty@7.0.1(postcss@8.5.8): dependencies: - postcss: 8.4.32 - dev: true + postcss: 8.5.8 - /postcss-discard-overridden@6.0.1(postcss@8.4.32): - resolution: {integrity: sha512-qs0ehZMMZpSESbRkw1+inkf51kak6OOzNRaoLd/U7Fatp0aN2HQ1rxGOrJvYcRAN9VpX8kUF13R2ofn8OlvFVA==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 + postcss-discard-overridden@7.0.1(postcss@8.5.8): dependencies: - postcss: 8.4.32 - dev: true + postcss: 8.5.8 - /postcss-double-position-gradients@5.0.3(postcss@8.4.32): - resolution: {integrity: sha512-QKYpwmaSm6HcdS0ndAuWSNNMv78R1oSySoh3mYBmctHWr2KWcwPJVakdOyU4lvFVW0GRu9wfIQwGeM4p3xU9ow==} - engines: {node: ^14 || ^16 || >=18} - peerDependencies: - postcss: ^8.4 + postcss-double-position-gradients@7.0.0(postcss@8.5.8): dependencies: - '@csstools/postcss-progressive-custom-properties': 3.0.3(postcss@8.4.32) - postcss: 8.4.32 + '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.8) + '@csstools/utilities': 3.0.0(postcss@8.5.8) + postcss: 8.5.8 postcss-value-parser: 4.2.0 - dev: true - /postcss-focus-visible@9.0.1(postcss@8.4.32): - resolution: {integrity: sha512-N2VQ5uPz3Z9ZcqI5tmeholn4d+1H14fKXszpjogZIrFbhaq0zNAtq8sAnw6VLiqGbL8YBzsnu7K9bBkTqaRimQ==} - engines: {node: ^14 || ^16 || >=18} - peerDependencies: - postcss: ^8.4 + postcss-focus-visible@11.0.0(postcss@8.5.8): dependencies: - postcss: 8.4.32 - postcss-selector-parser: 6.0.13 - dev: true + postcss: 8.5.8 + postcss-selector-parser: 7.1.1 - /postcss-focus-within@8.0.1(postcss@8.4.32): - resolution: {integrity: sha512-NFU3xcY/xwNaapVb+1uJ4n23XImoC86JNwkY/uduytSl2s9Ekc2EpzmRR63+ExitnW3Mab3Fba/wRPCT5oDILA==} - engines: {node: ^14 || ^16 || >=18} - peerDependencies: - postcss: ^8.4 + postcss-focus-within@10.0.0(postcss@8.5.8): dependencies: - postcss: 8.4.32 - postcss-selector-parser: 6.0.13 - dev: true + postcss: 8.5.8 + postcss-selector-parser: 7.1.1 - /postcss-font-variant@5.0.0(postcss@8.4.32): - resolution: {integrity: sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==} - peerDependencies: - postcss: ^8.1.0 + postcss-font-variant@5.0.0(postcss@8.5.8): dependencies: - postcss: 8.4.32 - dev: true + postcss: 8.5.8 - /postcss-gap-properties@5.0.1(postcss@8.4.32): - resolution: {integrity: sha512-k2z9Cnngc24c0KF4MtMuDdToROYqGMMUQGcE6V0odwjHyOHtaDBlLeRBV70y9/vF7KIbShrTRZ70JjsI1BZyWw==} - engines: {node: ^14 || ^16 || >=18} - peerDependencies: - postcss: ^8.4 + postcss-gap-properties@7.0.0(postcss@8.5.8): dependencies: - postcss: 8.4.32 - dev: true + postcss: 8.5.8 - /postcss-image-set-function@6.0.2(postcss@8.4.32): - resolution: {integrity: sha512-/O1xwqpJiz/apxGQi7UUfv1xUcorvkHZfvCYHPpRxxZj2WvjD0rg0+/+c+u5/Do5CpUg3XvfYxMrhcnjW1ArDQ==} - engines: {node: ^14 || ^16 || >=18} - peerDependencies: - postcss: ^8.4 + postcss-image-set-function@8.0.0(postcss@8.5.8): dependencies: - postcss: 8.4.32 + '@csstools/utilities': 3.0.0(postcss@8.5.8) + postcss: 8.5.8 postcss-value-parser: 4.2.0 - dev: true - /postcss-lab-function@6.0.8(postcss@8.4.32): - resolution: {integrity: sha512-agYs7R9Z5gnX837fCkH8TEQIHdhyDsMPPnpuuENt/dxoDVAykBaqbdxIN4DagOj+ZQo20iRNNJeY3MsFcdI6Sg==} - engines: {node: ^14 || ^16 || >=18} - peerDependencies: - postcss: ^8.4 + postcss-lab-function@8.0.2(postcss@8.5.8): dependencies: - '@csstools/css-color-parser': 1.5.0(@csstools/css-parser-algorithms@2.4.0)(@csstools/css-tokenizer@2.2.2) - '@csstools/css-parser-algorithms': 2.4.0(@csstools/css-tokenizer@2.2.2) - '@csstools/css-tokenizer': 2.2.2 - '@csstools/postcss-progressive-custom-properties': 3.0.3(postcss@8.4.32) - postcss: 8.4.32 - dev: true + '@csstools/css-color-parser': 4.0.2(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) + '@csstools/css-tokenizer': 4.0.0 + '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.8) + '@csstools/utilities': 3.0.0(postcss@8.5.8) + postcss: 8.5.8 - /postcss-load-config@5.0.2(postcss@8.4.32): - resolution: {integrity: sha512-Q8QR3FYbqOKa0bnC1UQ2bFq9/ulHX5Bi34muzitMr8aDtUelO5xKeJEYC/5smE0jNE9zdB/NBnOwXKexELbRlw==} - engines: {node: '>= 18'} - peerDependencies: - jiti: '>=1.21.0' - postcss: '>=8.0.9' - peerDependenciesMeta: - jiti: - optional: true - postcss: - optional: true + postcss-load-config@5.1.0(postcss@8.5.8): dependencies: - lilconfig: 3.0.0 - postcss: 8.4.32 - yaml: 2.3.4 - dev: true + lilconfig: 3.1.3 + yaml: 2.8.2 + optionalDependencies: + postcss: 8.5.8 - /postcss-logical@7.0.1(postcss@8.4.32): - resolution: {integrity: sha512-8GwUQZE0ri0K0HJHkDv87XOLC8DE0msc+HoWLeKdtjDZEwpZ5xuK3QdV6FhmHSQW40LPkg43QzvATRAI3LsRkg==} - engines: {node: ^14 || ^16 || >=18} - peerDependencies: - postcss: ^8.4 + postcss-logical@9.0.0(postcss@8.5.8): dependencies: - postcss: 8.4.32 + postcss: 8.5.8 postcss-value-parser: 4.2.0 - dev: true - /postcss-media-query-parser@0.2.3: - resolution: {integrity: sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==} - dev: true + postcss-media-query-parser@0.2.3: {} - /postcss-merge-longhand@6.0.1(postcss@8.4.32): - resolution: {integrity: sha512-vmr/HZQzaPXc45FRvSctqFTF05UaDnTn5ABX+UtQPJznDWT/QaFbVc/pJ5C2YPxx2J2XcfmWowlKwtCDwiQ5hA==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 + postcss-merge-longhand@7.0.5(postcss@8.5.8): dependencies: - postcss: 8.4.32 + postcss: 8.5.8 postcss-value-parser: 4.2.0 - stylehacks: 6.0.1(postcss@8.4.32) - dev: true + stylehacks: 7.0.8(postcss@8.5.8) - /postcss-merge-rules@6.0.2(postcss@8.4.32): - resolution: {integrity: sha512-6lm8bl0UfriSfxI+F/cezrebqqP8w702UC6SjZlUlBYwuRVNbmgcJuQU7yePIvD4MNT53r/acQCUAyulrpgmeQ==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 + postcss-merge-rules@7.0.8(postcss@8.5.8): dependencies: - browserslist: 4.22.2 + browserslist: 4.28.1 caniuse-api: 3.0.0 - cssnano-utils: 4.0.1(postcss@8.4.32) - postcss: 8.4.32 - postcss-selector-parser: 6.0.13 - dev: true + cssnano-utils: 5.0.1(postcss@8.5.8) + postcss: 8.5.8 + postcss-selector-parser: 7.1.1 - /postcss-minify-font-values@6.0.1(postcss@8.4.32): - resolution: {integrity: sha512-tIwmF1zUPoN6xOtA/2FgVk1ZKrLcCvE0dpZLtzyyte0j9zUeB8RTbCqrHZGjJlxOvNWKMYtunLrrl7HPOiR46w==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 + postcss-minify-font-values@7.0.1(postcss@8.5.8): dependencies: - postcss: 8.4.32 + postcss: 8.5.8 postcss-value-parser: 4.2.0 - dev: true - /postcss-minify-gradients@6.0.1(postcss@8.4.32): - resolution: {integrity: sha512-M1RJWVjd6IOLPl1hYiOd5HQHgpp6cvJVLrieQYS9y07Yo8itAr6jaekzJphaJFR0tcg4kRewCk3kna9uHBxn/w==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 + postcss-minify-gradients@7.0.1(postcss@8.5.8): dependencies: colord: 2.9.3 - cssnano-utils: 4.0.1(postcss@8.4.32) - postcss: 8.4.32 + cssnano-utils: 5.0.1(postcss@8.5.8) + postcss: 8.5.8 postcss-value-parser: 4.2.0 - dev: true - /postcss-minify-params@6.0.1(postcss@8.4.32): - resolution: {integrity: sha512-eFvGWArqh4khPIgPDu6SZNcaLctx97nO7c59OXnRtGntAp5/VS4gjMhhW9qUFsK6mQ27pEZGt2kR+mPizI+Z9g==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 + postcss-minify-params@7.0.6(postcss@8.5.8): dependencies: - browserslist: 4.22.2 - cssnano-utils: 4.0.1(postcss@8.4.32) - postcss: 8.4.32 + browserslist: 4.28.1 + cssnano-utils: 5.0.1(postcss@8.5.8) + postcss: 8.5.8 postcss-value-parser: 4.2.0 - dev: true - /postcss-minify-selectors@6.0.1(postcss@8.4.32): - resolution: {integrity: sha512-mfReq5wrS6vkunxvJp6GDuOk+Ak6JV7134gp8L+ANRnV9VwqzTvBtX6lpohooVU750AR0D3pVx2Zn6uCCwOAfQ==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 + postcss-minify-selectors@7.0.6(postcss@8.5.8): dependencies: - postcss: 8.4.32 - postcss-selector-parser: 6.0.13 - dev: true + cssesc: 3.0.0 + postcss: 8.5.8 + postcss-selector-parser: 7.1.1 - /postcss-nesting@12.0.2(postcss@8.4.32): - resolution: {integrity: sha512-63PpJHSeNs93S3ZUIyi+7kKx4JqOIEJ6QYtG3x+0qA4J03+4n0iwsyA1GAHyWxsHYljQS4/4ZK1o2sMi70b5wQ==} - engines: {node: ^14 || ^16 || >=18} - peerDependencies: - postcss: ^8.4 + postcss-nesting@14.0.0(postcss@8.5.8): dependencies: - '@csstools/selector-specificity': 3.0.1(postcss-selector-parser@6.0.13) - postcss: 8.4.32 - postcss-selector-parser: 6.0.13 - dev: true + '@csstools/selector-resolve-nested': 4.0.0(postcss-selector-parser@7.1.1) + '@csstools/selector-specificity': 6.0.0(postcss-selector-parser@7.1.1) + postcss: 8.5.8 + postcss-selector-parser: 7.1.1 - /postcss-normalize-charset@6.0.1(postcss@8.4.32): - resolution: {integrity: sha512-aW5LbMNRZ+oDV57PF9K+WI1Z8MPnF+A8qbajg/T8PP126YrGX1f9IQx21GI2OlGz7XFJi/fNi0GTbY948XJtXg==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 + postcss-normalize-charset@7.0.1(postcss@8.5.8): dependencies: - postcss: 8.4.32 - dev: true + postcss: 8.5.8 - /postcss-normalize-display-values@6.0.1(postcss@8.4.32): - resolution: {integrity: sha512-mc3vxp2bEuCb4LgCcmG1y6lKJu1Co8T+rKHrcbShJwUmKJiEl761qb/QQCfFwlrvSeET3jksolCR/RZuMURudw==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 + postcss-normalize-display-values@7.0.1(postcss@8.5.8): dependencies: - postcss: 8.4.32 + postcss: 8.5.8 postcss-value-parser: 4.2.0 - dev: true - /postcss-normalize-positions@6.0.1(postcss@8.4.32): - resolution: {integrity: sha512-HRsq8u/0unKNvm0cvwxcOUEcakFXqZ41fv3FOdPn916XFUrympjr+03oaLkuZENz3HE9RrQE9yU0Xv43ThWjQg==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 + postcss-normalize-positions@7.0.1(postcss@8.5.8): dependencies: - postcss: 8.4.32 + postcss: 8.5.8 postcss-value-parser: 4.2.0 - dev: true - /postcss-normalize-repeat-style@6.0.1(postcss@8.4.32): - resolution: {integrity: sha512-Gbb2nmCy6tTiA7Sh2MBs3fj9W8swonk6lw+dFFeQT68B0Pzwp1kvisJQkdV6rbbMSd9brMlS8I8ts52tAGWmGQ==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 + postcss-normalize-repeat-style@7.0.1(postcss@8.5.8): dependencies: - postcss: 8.4.32 + postcss: 8.5.8 postcss-value-parser: 4.2.0 - dev: true - /postcss-normalize-string@6.0.1(postcss@8.4.32): - resolution: {integrity: sha512-5Fhx/+xzALJD9EI26Aq23hXwmv97Zfy2VFrt5PLT8lAhnBIZvmaT5pQk+NuJ/GWj/QWaKSKbnoKDGLbV6qnhXg==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 + postcss-normalize-string@7.0.1(postcss@8.5.8): dependencies: - postcss: 8.4.32 + postcss: 8.5.8 postcss-value-parser: 4.2.0 - dev: true - /postcss-normalize-timing-functions@6.0.1(postcss@8.4.32): - resolution: {integrity: sha512-4zcczzHqmCU7L5dqTB9rzeqPWRMc0K2HoR+Bfl+FSMbqGBUcP5LRfgcH4BdRtLuzVQK1/FHdFoGT3F7rkEnY+g==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 + postcss-normalize-timing-functions@7.0.1(postcss@8.5.8): dependencies: - postcss: 8.4.32 + postcss: 8.5.8 postcss-value-parser: 4.2.0 - dev: true - /postcss-normalize-unicode@6.0.1(postcss@8.4.32): - resolution: {integrity: sha512-ok9DsI94nEF79MkvmLfHfn8ddnKXA7w+8YuUoz5m7b6TOdoaRCpvu/QMHXQs9+DwUbvp+ytzz04J55CPy77PuQ==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 + postcss-normalize-unicode@7.0.6(postcss@8.5.8): dependencies: - browserslist: 4.22.2 - postcss: 8.4.32 + browserslist: 4.28.1 + postcss: 8.5.8 postcss-value-parser: 4.2.0 - dev: true - /postcss-normalize-url@6.0.1(postcss@8.4.32): - resolution: {integrity: sha512-jEXL15tXSvbjm0yzUV7FBiEXwhIa9H88JOXDGQzmcWoB4mSjZIsmtto066s2iW9FYuIrIF4k04HA2BKAOpbsaQ==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 + postcss-normalize-url@7.0.1(postcss@8.5.8): dependencies: - postcss: 8.4.32 + postcss: 8.5.8 postcss-value-parser: 4.2.0 - dev: true - /postcss-normalize-whitespace@6.0.1(postcss@8.4.32): - resolution: {integrity: sha512-76i3NpWf6bB8UHlVuLRxG4zW2YykF9CTEcq/9LGAiz2qBuX5cBStadkk0jSkg9a9TCIXbMQz7yzrygKoCW9JuA==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 + postcss-normalize-whitespace@7.0.1(postcss@8.5.8): dependencies: - postcss: 8.4.32 + postcss: 8.5.8 postcss-value-parser: 4.2.0 - dev: true - /postcss-opacity-percentage@2.0.0(postcss@8.4.32): - resolution: {integrity: sha512-lyDrCOtntq5Y1JZpBFzIWm2wG9kbEdujpNt4NLannF+J9c8CgFIzPa80YQfdza+Y+yFfzbYj/rfoOsYsooUWTQ==} - engines: {node: ^14 || ^16 || >=18} - peerDependencies: - postcss: ^8.2 + postcss-opacity-percentage@3.0.0(postcss@8.5.8): dependencies: - postcss: 8.4.32 - dev: true + postcss: 8.5.8 - /postcss-ordered-values@6.0.1(postcss@8.4.32): - resolution: {integrity: sha512-XXbb1O/MW9HdEhnBxitZpPFbIvDgbo9NK4c/5bOfiKpnIGZDoL2xd7/e6jW5DYLsWxBbs+1nZEnVgnjnlFViaA==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 + postcss-ordered-values@7.0.2(postcss@8.5.8): dependencies: - cssnano-utils: 4.0.1(postcss@8.4.32) - postcss: 8.4.32 + cssnano-utils: 5.0.1(postcss@8.5.8) + postcss: 8.5.8 postcss-value-parser: 4.2.0 - dev: true - /postcss-overflow-shorthand@5.0.1(postcss@8.4.32): - resolution: {integrity: sha512-XzjBYKLd1t6vHsaokMV9URBt2EwC9a7nDhpQpjoPk2HRTSQfokPfyAS/Q7AOrzUu6q+vp/GnrDBGuj/FCaRqrQ==} - engines: {node: ^14 || ^16 || >=18} - peerDependencies: - postcss: ^8.4 + postcss-overflow-shorthand@7.0.0(postcss@8.5.8): dependencies: - postcss: 8.4.32 + postcss: 8.5.8 postcss-value-parser: 4.2.0 - dev: true - - /postcss-page-break@3.0.4(postcss@8.4.32): - resolution: {integrity: sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==} - peerDependencies: - postcss: ^8 - dependencies: - postcss: 8.4.32 - dev: true - /postcss-place@9.0.1(postcss@8.4.32): - resolution: {integrity: sha512-JfL+paQOgRQRMoYFc2f73pGuG/Aw3tt4vYMR6UA3cWVMxivviPTnMFnFTczUJOA4K2Zga6xgQVE+PcLs64WC8Q==} - engines: {node: ^14 || ^16 || >=18} - peerDependencies: - postcss: ^8.4 + postcss-page-break@3.0.4(postcss@8.5.8): dependencies: - postcss: 8.4.32 - postcss-value-parser: 4.2.0 - dev: true + postcss: 8.5.8 - /postcss-preset-env@9.3.0(postcss@8.4.32): - resolution: {integrity: sha512-ycw6doPrqV6QxDCtgiyGDef61bEfiSc59HGM4gOw/wxQxmKnhuEery61oOC/5ViENz/ycpRsuhTexs1kUBTvVw==} - engines: {node: ^14 || ^16 || >=18} - peerDependencies: - postcss: ^8.4 + postcss-place@11.0.0(postcss@8.5.8): dependencies: - '@csstools/postcss-cascade-layers': 4.0.2(postcss@8.4.32) - '@csstools/postcss-color-function': 3.0.8(postcss@8.4.32) - '@csstools/postcss-color-mix-function': 2.0.8(postcss@8.4.32) - '@csstools/postcss-exponential-functions': 1.0.2(postcss@8.4.32) - '@csstools/postcss-font-format-keywords': 3.0.1(postcss@8.4.32) - '@csstools/postcss-gamut-mapping': 1.0.1(postcss@8.4.32) - '@csstools/postcss-gradients-interpolation-method': 4.0.8(postcss@8.4.32) - '@csstools/postcss-hwb-function': 3.0.7(postcss@8.4.32) - '@csstools/postcss-ic-unit': 3.0.3(postcss@8.4.32) - '@csstools/postcss-initial': 1.0.1(postcss@8.4.32) - '@csstools/postcss-is-pseudo-class': 4.0.4(postcss@8.4.32) - '@csstools/postcss-logical-float-and-clear': 2.0.1(postcss@8.4.32) - '@csstools/postcss-logical-overflow': 1.0.1(postcss@8.4.32) - '@csstools/postcss-logical-overscroll-behavior': 1.0.1(postcss@8.4.32) - '@csstools/postcss-logical-resize': 2.0.1(postcss@8.4.32) - '@csstools/postcss-logical-viewport-units': 2.0.4(postcss@8.4.32) - '@csstools/postcss-media-minmax': 1.1.1(postcss@8.4.32) - '@csstools/postcss-media-queries-aspect-ratio-number-values': 2.0.4(postcss@8.4.32) - '@csstools/postcss-nested-calc': 3.0.1(postcss@8.4.32) - '@csstools/postcss-normalize-display-values': 3.0.2(postcss@8.4.32) - '@csstools/postcss-oklab-function': 3.0.8(postcss@8.4.32) - '@csstools/postcss-progressive-custom-properties': 3.0.3(postcss@8.4.32) - '@csstools/postcss-relative-color-syntax': 2.0.8(postcss@8.4.32) - '@csstools/postcss-scope-pseudo-class': 3.0.1(postcss@8.4.32) - '@csstools/postcss-stepped-value-functions': 3.0.3(postcss@8.4.32) - '@csstools/postcss-text-decoration-shorthand': 3.0.4(postcss@8.4.32) - '@csstools/postcss-trigonometric-functions': 3.0.3(postcss@8.4.32) - '@csstools/postcss-unset-value': 3.0.1(postcss@8.4.32) - autoprefixer: 10.4.16(postcss@8.4.32) - browserslist: 4.22.2 - css-blank-pseudo: 6.0.1(postcss@8.4.32) - css-has-pseudo: 6.0.1(postcss@8.4.32) - css-prefers-color-scheme: 9.0.1(postcss@8.4.32) - cssdb: 7.9.1 - postcss: 8.4.32 - postcss-attribute-case-insensitive: 6.0.2(postcss@8.4.32) - postcss-clamp: 4.1.0(postcss@8.4.32) - postcss-color-functional-notation: 6.0.3(postcss@8.4.32) - postcss-color-hex-alpha: 9.0.3(postcss@8.4.32) - postcss-color-rebeccapurple: 9.0.2(postcss@8.4.32) - postcss-custom-media: 10.0.2(postcss@8.4.32) - postcss-custom-properties: 13.3.3(postcss@8.4.32) - postcss-custom-selectors: 7.1.6(postcss@8.4.32) - postcss-dir-pseudo-class: 8.0.1(postcss@8.4.32) - postcss-double-position-gradients: 5.0.3(postcss@8.4.32) - postcss-focus-visible: 9.0.1(postcss@8.4.32) - postcss-focus-within: 8.0.1(postcss@8.4.32) - postcss-font-variant: 5.0.0(postcss@8.4.32) - postcss-gap-properties: 5.0.1(postcss@8.4.32) - postcss-image-set-function: 6.0.2(postcss@8.4.32) - postcss-lab-function: 6.0.8(postcss@8.4.32) - postcss-logical: 7.0.1(postcss@8.4.32) - postcss-nesting: 12.0.2(postcss@8.4.32) - postcss-opacity-percentage: 2.0.0(postcss@8.4.32) - postcss-overflow-shorthand: 5.0.1(postcss@8.4.32) - postcss-page-break: 3.0.4(postcss@8.4.32) - postcss-place: 9.0.1(postcss@8.4.32) - postcss-pseudo-class-any-link: 9.0.1(postcss@8.4.32) - postcss-replace-overflow-wrap: 4.0.0(postcss@8.4.32) - postcss-selector-not: 7.0.1(postcss@8.4.32) + postcss: 8.5.8 postcss-value-parser: 4.2.0 - dev: true - - /postcss-pseudo-class-any-link@9.0.1(postcss@8.4.32): - resolution: {integrity: sha512-cKYGGZ9yzUZi+dZd7XT2M8iSDfo+T2Ctbpiizf89uBTBfIpZpjvTavzIJXpCReMVXSKROqzpxClNu6fz4DHM0Q==} - engines: {node: ^14 || ^16 || >=18} - peerDependencies: - postcss: ^8.4 - dependencies: - postcss: 8.4.32 - postcss-selector-parser: 6.0.13 - dev: true - /postcss-reduce-initial@6.0.1(postcss@8.4.32): - resolution: {integrity: sha512-cgzsI2ThG1PMSdSyM9A+bVxiiVgPIVz9f5c6H+TqEv0CA89iCOO81mwLWRWLgOKFtQkKob9nNpnkxG/1RlgFcA==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 - dependencies: - browserslist: 4.22.2 + postcss-preset-env@11.2.0(postcss@8.5.8): + dependencies: + '@csstools/postcss-alpha-function': 2.0.3(postcss@8.5.8) + '@csstools/postcss-cascade-layers': 6.0.0(postcss@8.5.8) + '@csstools/postcss-color-function': 5.0.2(postcss@8.5.8) + '@csstools/postcss-color-function-display-p3-linear': 2.0.2(postcss@8.5.8) + '@csstools/postcss-color-mix-function': 4.0.2(postcss@8.5.8) + '@csstools/postcss-color-mix-variadic-function-arguments': 2.0.2(postcss@8.5.8) + '@csstools/postcss-content-alt-text': 3.0.0(postcss@8.5.8) + '@csstools/postcss-contrast-color-function': 3.0.2(postcss@8.5.8) + '@csstools/postcss-exponential-functions': 3.0.1(postcss@8.5.8) + '@csstools/postcss-font-format-keywords': 5.0.0(postcss@8.5.8) + '@csstools/postcss-font-width-property': 1.0.0(postcss@8.5.8) + '@csstools/postcss-gamut-mapping': 3.0.2(postcss@8.5.8) + '@csstools/postcss-gradients-interpolation-method': 6.0.2(postcss@8.5.8) + '@csstools/postcss-hwb-function': 5.0.2(postcss@8.5.8) + '@csstools/postcss-ic-unit': 5.0.0(postcss@8.5.8) + '@csstools/postcss-initial': 3.0.0(postcss@8.5.8) + '@csstools/postcss-is-pseudo-class': 6.0.0(postcss@8.5.8) + '@csstools/postcss-light-dark-function': 3.0.0(postcss@8.5.8) + '@csstools/postcss-logical-float-and-clear': 4.0.0(postcss@8.5.8) + '@csstools/postcss-logical-overflow': 3.0.0(postcss@8.5.8) + '@csstools/postcss-logical-overscroll-behavior': 3.0.0(postcss@8.5.8) + '@csstools/postcss-logical-resize': 4.0.0(postcss@8.5.8) + '@csstools/postcss-logical-viewport-units': 4.0.0(postcss@8.5.8) + '@csstools/postcss-media-minmax': 3.0.1(postcss@8.5.8) + '@csstools/postcss-media-queries-aspect-ratio-number-values': 4.0.0(postcss@8.5.8) + '@csstools/postcss-mixins': 1.0.0(postcss@8.5.8) + '@csstools/postcss-nested-calc': 5.0.0(postcss@8.5.8) + '@csstools/postcss-normalize-display-values': 5.0.1(postcss@8.5.8) + '@csstools/postcss-oklab-function': 5.0.2(postcss@8.5.8) + '@csstools/postcss-position-area-property': 2.0.0(postcss@8.5.8) + '@csstools/postcss-progressive-custom-properties': 5.0.0(postcss@8.5.8) + '@csstools/postcss-property-rule-prelude-list': 2.0.0(postcss@8.5.8) + '@csstools/postcss-random-function': 3.0.1(postcss@8.5.8) + '@csstools/postcss-relative-color-syntax': 4.0.2(postcss@8.5.8) + '@csstools/postcss-scope-pseudo-class': 5.0.0(postcss@8.5.8) + '@csstools/postcss-sign-functions': 2.0.1(postcss@8.5.8) + '@csstools/postcss-stepped-value-functions': 5.0.1(postcss@8.5.8) + '@csstools/postcss-syntax-descriptor-syntax-production': 2.0.0(postcss@8.5.8) + '@csstools/postcss-system-ui-font-family': 2.0.0(postcss@8.5.8) + '@csstools/postcss-text-decoration-shorthand': 5.0.3(postcss@8.5.8) + '@csstools/postcss-trigonometric-functions': 5.0.1(postcss@8.5.8) + '@csstools/postcss-unset-value': 5.0.0(postcss@8.5.8) + autoprefixer: 10.4.27(postcss@8.5.8) + browserslist: 4.28.1 + css-blank-pseudo: 8.0.1(postcss@8.5.8) + css-has-pseudo: 8.0.0(postcss@8.5.8) + css-prefers-color-scheme: 11.0.0(postcss@8.5.8) + cssdb: 8.8.0 + postcss: 8.5.8 + postcss-attribute-case-insensitive: 8.0.0(postcss@8.5.8) + postcss-clamp: 4.1.0(postcss@8.5.8) + postcss-color-functional-notation: 8.0.2(postcss@8.5.8) + postcss-color-hex-alpha: 11.0.0(postcss@8.5.8) + postcss-color-rebeccapurple: 11.0.0(postcss@8.5.8) + postcss-custom-media: 12.0.1(postcss@8.5.8) + postcss-custom-properties: 15.0.1(postcss@8.5.8) + postcss-custom-selectors: 9.0.1(postcss@8.5.8) + postcss-dir-pseudo-class: 10.0.0(postcss@8.5.8) + postcss-double-position-gradients: 7.0.0(postcss@8.5.8) + postcss-focus-visible: 11.0.0(postcss@8.5.8) + postcss-focus-within: 10.0.0(postcss@8.5.8) + postcss-font-variant: 5.0.0(postcss@8.5.8) + postcss-gap-properties: 7.0.0(postcss@8.5.8) + postcss-image-set-function: 8.0.0(postcss@8.5.8) + postcss-lab-function: 8.0.2(postcss@8.5.8) + postcss-logical: 9.0.0(postcss@8.5.8) + postcss-nesting: 14.0.0(postcss@8.5.8) + postcss-opacity-percentage: 3.0.0(postcss@8.5.8) + postcss-overflow-shorthand: 7.0.0(postcss@8.5.8) + postcss-page-break: 3.0.4(postcss@8.5.8) + postcss-place: 11.0.0(postcss@8.5.8) + postcss-pseudo-class-any-link: 11.0.0(postcss@8.5.8) + postcss-replace-overflow-wrap: 4.0.0(postcss@8.5.8) + postcss-selector-not: 9.0.0(postcss@8.5.8) + + postcss-pseudo-class-any-link@11.0.0(postcss@8.5.8): + dependencies: + postcss: 8.5.8 + postcss-selector-parser: 7.1.1 + + postcss-reduce-initial@7.0.6(postcss@8.5.8): + dependencies: + browserslist: 4.28.1 caniuse-api: 3.0.0 - postcss: 8.4.32 - dev: true + postcss: 8.5.8 - /postcss-reduce-transforms@6.0.1(postcss@8.4.32): - resolution: {integrity: sha512-fUbV81OkUe75JM+VYO1gr/IoA2b/dRiH6HvMwhrIBSUrxq3jNZQZitSnugcTLDi1KkQh1eR/zi+iyxviUNBkcQ==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 + postcss-reduce-transforms@7.0.1(postcss@8.5.8): dependencies: - postcss: 8.4.32 + postcss: 8.5.8 postcss-value-parser: 4.2.0 - dev: true - /postcss-replace-overflow-wrap@4.0.0(postcss@8.4.32): - resolution: {integrity: sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==} - peerDependencies: - postcss: ^8.0.3 + postcss-replace-overflow-wrap@4.0.0(postcss@8.5.8): dependencies: - postcss: 8.4.32 - dev: true + postcss: 8.5.8 - /postcss-reporter@7.0.5(postcss@8.4.32): - resolution: {integrity: sha512-glWg7VZBilooZGOFPhN9msJ3FQs19Hie7l5a/eE6WglzYqVeH3ong3ShFcp9kDWJT1g2Y/wd59cocf9XxBtkWA==} - engines: {node: '>=10'} - peerDependencies: - postcss: ^8.1.0 + postcss-reporter@7.1.0(postcss@8.5.8): dependencies: - picocolors: 1.0.0 - postcss: 8.4.32 + picocolors: 1.1.1 + postcss: 8.5.8 thenby: 1.3.4 - dev: true - /postcss-resolve-nested-selector@0.1.1: - resolution: {integrity: sha512-HvExULSwLqHLgUy1rl3ANIqCsvMS0WHss2UOsXhXnQaZ9VCc2oBvIpXrl00IUFT5ZDITME0o6oiXeiHr2SAIfw==} - dev: true + postcss-resolve-nested-selector@0.1.6: {} - /postcss-safe-parser@6.0.0(postcss@8.4.32): - resolution: {integrity: sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==} - engines: {node: '>=12.0'} - peerDependencies: - postcss: ^8.3.3 + postcss-safe-parser@7.0.1(postcss@8.5.8): dependencies: - postcss: 8.4.32 - dev: true + postcss: 8.5.8 - /postcss-scss@4.0.9(postcss@8.4.32): - resolution: {integrity: sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==} - engines: {node: '>=12.0'} - peerDependencies: - postcss: ^8.4.29 + postcss-scss@4.0.9(postcss@8.5.8): dependencies: - postcss: 8.4.32 - dev: true + postcss: 8.5.8 - /postcss-selector-not@7.0.1(postcss@8.4.32): - resolution: {integrity: sha512-1zT5C27b/zeJhchN7fP0kBr16Cc61mu7Si9uWWLoA3Px/D9tIJPKchJCkUH3tPO5D0pCFmGeApAv8XpXBQJ8SQ==} - engines: {node: ^14 || ^16 || >=18} - peerDependencies: - postcss: ^8.4 + postcss-selector-not@9.0.0(postcss@8.5.8): dependencies: - postcss: 8.4.32 - postcss-selector-parser: 6.0.13 - dev: true + postcss: 8.5.8 + postcss-selector-parser: 7.1.1 - /postcss-selector-parser@6.0.13: - resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==} - engines: {node: '>=4'} + postcss-selector-parser@7.1.1: dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 - dev: true - /postcss-sorting@8.0.2(postcss@8.4.32): - resolution: {integrity: sha512-M9dkSrmU00t/jK7rF6BZSZauA5MAaBW4i5EnJXspMwt4iqTh/L9j6fgMnbElEOfyRyfLfVbIHj/R52zHzAPe1Q==} - peerDependencies: - postcss: ^8.4.20 + postcss-sorting@9.1.0(postcss@8.5.8): dependencies: - postcss: 8.4.32 - dev: true + postcss: 8.5.8 - /postcss-svgo@6.0.1(postcss@8.4.32): - resolution: {integrity: sha512-eWV4Rrqa06LzTgqirOv5Ln6WTGyU7Pbeqj9WEyKo9tpnWixNATVJMeaEcOHOW1ZYyjcG8wSJwX/28DvU3oy3HA==} - engines: {node: ^14 || ^16 || >= 18} - peerDependencies: - postcss: ^8.4.31 + postcss-svgo@7.1.1(postcss@8.5.8): dependencies: - postcss: 8.4.32 + postcss: 8.5.8 postcss-value-parser: 4.2.0 - svgo: 3.1.0 - dev: true + svgo: 4.0.1 - /postcss-unique-selectors@6.0.1(postcss@8.4.32): - resolution: {integrity: sha512-/KCCEpNNR7oXVJ38/Id7GC9Nt0zxO1T3zVbhVaq6F6LSG+3gU3B7+QuTHfD0v8NPEHlzewAout29S0InmB78EQ==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 + postcss-unique-selectors@7.0.5(postcss@8.5.8): dependencies: - postcss: 8.4.32 - postcss-selector-parser: 6.0.13 - dev: true + postcss: 8.5.8 + postcss-selector-parser: 7.1.1 - /postcss-value-parser@4.2.0: - resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - dev: true + postcss-value-parser@4.2.0: {} - /postcss@8.4.32: - resolution: {integrity: sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==} - engines: {node: ^10 || ^12 || >=14} + postcss@8.5.8: dependencies: - nanoid: 3.3.7 - picocolors: 1.0.0 - source-map-js: 1.0.2 - dev: true + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 - /prelude-ls@1.1.2: - resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} - engines: {node: '>= 0.8.0'} - requiresBuild: true - dev: true + prelude-ls@1.1.2: optional: true - /prelude-ls@1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} - dev: true + prelude-ls@1.2.1: {} - /pretty-hrtime@1.0.3: - resolution: {integrity: sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==} - engines: {node: '>= 0.8'} - dev: true + presentable-error@0.0.1: {} - /pretty-ms@8.0.0: - resolution: {integrity: sha512-ASJqOugUF1bbzI35STMBUpZqdfYKlJugy6JBziGi2EE+AL5JPJGSzvpeVXojxrr0ViUYoToUjb5kjSEGf7Y83Q==} - engines: {node: '>=14.16'} + pretty-hrtime@1.0.3: {} + + pretty-ms@9.3.0: dependencies: - parse-ms: 3.0.0 - dev: true + parse-ms: 4.0.0 - /process-nextick-args@2.0.1: - resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} - dev: true + process-nextick-args@2.0.1: {} - /process-streams@1.0.1: - resolution: {integrity: sha512-Z+FHhxiBhiQ4t/xTY3Bo2SxZG/CehflyckFsQirAXFRf/BfVnDePzpo58eq9JI4XfFu1RnX5C5EAE6V4sce1+g==} + process-streams@1.0.3: dependencies: duplex-maker: 1.0.0 - quotemeta: 0.0.0 - tempfile: 1.1.1 - dev: true - - /psl@1.9.0: - resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} - requiresBuild: true - dev: true - optional: true - - /punycode@2.3.1: - resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} - engines: {node: '>=6'} - dev: true - /qs@6.5.3: - resolution: {integrity: sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==} - engines: {node: '>=0.6'} - requiresBuild: true - dev: true + psl@1.15.0: + dependencies: + punycode: 2.3.1 optional: true - /queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - dev: true + punycode@2.3.1: {} - /queue-tick@1.0.1: - resolution: {integrity: sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==} - dev: true + qified@0.9.0: + dependencies: + hookified: 2.1.0 - /quick-lru@5.1.1: - resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} - engines: {node: '>=10'} - dev: true + qs@6.5.5: + optional: true - /quotemeta@0.0.0: - resolution: {integrity: sha512-1XGObUh7RN5b58vKuAsrlfqT+Rc4vmw8N4pP9gFCq1GFlTdV0Ex/D2Ro1Drvrqj++HPi3ig0Np17XPslELeMRA==} - dev: true + queue-microtask@1.2.3: {} - /read-cache@1.0.0: - resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} - dependencies: - pify: 2.3.0 - dev: true + quick-lru@5.1.1: {} - /read-pkg-up@8.0.0: - resolution: {integrity: sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==} - engines: {node: '>=12'} + read-cache@1.0.0: dependencies: - find-up: 5.0.0 - read-pkg: 6.0.0 - type-fest: 1.4.0 - dev: true + pify: 2.3.0 - /read-pkg@3.0.0: - resolution: {integrity: sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==} - engines: {node: '>=4'} + read-pkg@3.0.0: dependencies: load-json-file: 4.0.0 normalize-package-data: 2.5.0 path-type: 3.0.0 - dev: true - - /read-pkg@6.0.0: - resolution: {integrity: sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==} - engines: {node: '>=12'} - dependencies: - '@types/normalize-package-data': 2.4.4 - normalize-package-data: 3.0.3 - parse-json: 5.2.0 - type-fest: 1.4.0 - dev: true - /readable-stream@1.1.14: - resolution: {integrity: sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==} + readable-stream@1.1.14: dependencies: core-util-is: 1.0.3 inherits: 2.0.4 isarray: 0.0.1 string_decoder: 0.10.31 - dev: true - /readable-stream@2.3.8: - resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + readable-stream@2.3.8: dependencies: core-util-is: 1.0.3 inherits: 2.0.4 @@ -5783,75 +7688,53 @@ packages: safe-buffer: 5.1.2 string_decoder: 1.1.1 util-deprecate: 1.0.2 - dev: true - /readable-stream@3.6.2: - resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} - engines: {node: '>= 6'} + readable-stream@3.6.2: dependencies: inherits: 2.0.4 string_decoder: 1.3.0 util-deprecate: 1.0.2 - dev: true - - /readable-web-to-node-stream@3.0.2: - resolution: {integrity: sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==} - engines: {node: '>=8'} - dependencies: - readable-stream: 3.6.2 - dev: true - /readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} + readdirp@3.6.0: dependencies: picomatch: 2.3.1 - dev: true - /redent@4.0.0: - resolution: {integrity: sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==} - engines: {node: '>=12'} + readdirp@4.1.2: {} + + reflect.getprototypeof@1.0.10: dependencies: - indent-string: 5.0.0 - strip-indent: 4.0.0 - dev: true + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + which-builtin-type: 1.2.1 - /regenerator-runtime@0.11.1: - resolution: {integrity: sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==} - dev: true + regenerator-runtime@0.11.1: {} - /regexp.prototype.flags@1.5.1: - resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==} - engines: {node: '>= 0.4'} + regexp.prototype.flags@1.5.4: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.8 define-properties: 1.2.1 - set-function-name: 2.0.1 - dev: true + es-errors: 1.3.0 + get-proto: 1.0.1 + gopd: 1.2.0 + set-function-name: 2.0.2 - /repeating@1.1.3: - resolution: {integrity: sha512-Nh30JLeMHdoI+AsQ5eblhZ7YlTsM9wiJQe/AHIunlK3KWzvXhXb36IJ7K1IOeRjIOtzMjdUHjwXUFxKJoPTSOg==} - engines: {node: '>=0.10.0'} - hasBin: true + repeating@1.1.3: dependencies: is-finite: 1.1.0 - dev: true - /repeating@2.0.1: - resolution: {integrity: sha512-ZqtSMuVybkISo2OWvqvm7iHSWngvdaW3IpsT9/uP8v4gMi591LY6h35wdOfvQdWCKFWZWm2Y1Opp4kV7vQKT6A==} - engines: {node: '>=0.10.0'} + repeating@2.0.1: dependencies: is-finite: 1.1.0 - dev: true - /request@2.88.2: - resolution: {integrity: sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==} - engines: {node: '>= 6'} - deprecated: request has been deprecated, see https://github.com/request/request/issues/3142 - requiresBuild: true + request@2.88.2: dependencies: aws-sign2: 0.7.0 - aws4: 1.12.0 + aws4: 1.13.2 caseless: 0.12.0 combined-stream: 1.0.8 extend: 3.0.2 @@ -5865,351 +7748,221 @@ packages: mime-types: 2.1.35 oauth-sign: 0.9.0 performance-now: 2.1.0 - qs: 6.5.3 + qs: 6.5.5 safe-buffer: 5.2.1 tough-cookie: 2.5.0 tunnel-agent: 0.6.0 uuid: 3.4.0 - dev: true optional: true - /require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} - dev: true + require-directory@2.1.1: {} - /require-from-string@2.0.2: - resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} - engines: {node: '>=0.10.0'} - dev: true + require-from-string@2.0.2: {} - /resolve-alpn@1.2.1: - resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} - dev: true + resolve-alpn@1.2.1: {} - /resolve-cwd@3.0.0: - resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} - engines: {node: '>=8'} + resolve-cwd@3.0.0: dependencies: resolve-from: 5.0.0 - dev: true - /resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - dev: true + resolve-from@4.0.0: {} - /resolve-from@5.0.0: - resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} - engines: {node: '>=8'} - dev: true + resolve-from@5.0.0: {} - /resolve@1.22.8: - resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} - hasBin: true + resolve@1.22.11: dependencies: - is-core-module: 2.13.1 + is-core-module: 2.16.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - dev: true - /responselike@3.0.0: - resolution: {integrity: sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==} - engines: {node: '>=14.16'} + responselike@3.0.0: dependencies: lowercase-keys: 3.0.0 - dev: true - /reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - dev: true - - /rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - hasBin: true - dependencies: - glob: 7.2.3 - dev: true + reusify@1.1.0: {} - /run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 - dev: true - /safe-array-concat@1.0.1: - resolution: {integrity: sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==} - engines: {node: '>=0.4'} + safe-array-concat@1.1.3: dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - has-symbols: 1.0.3 + call-bind: 1.0.8 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + has-symbols: 1.1.0 isarray: 2.0.5 - dev: true - /safe-buffer@5.1.2: - resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} - dev: true + safe-buffer@5.1.2: {} - /safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - dev: true + safe-buffer@5.2.1: {} - /safe-regex-test@1.0.0: - resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} + safe-push-apply@1.0.0: dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - is-regex: 1.1.4 - dev: true - - /safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - requiresBuild: true - dev: true - optional: true + es-errors: 1.3.0 + isarray: 2.0.5 - /sass@1.69.5: - resolution: {integrity: sha512-qg2+UCJibLr2LCVOt3OlPhr/dqVHWOa9XtZf2OjbLs/T4VPSJ00udtgJxH3neXZm+QqX8B+3cU7RaLqp1iVfcQ==} - engines: {node: '>=14.0.0'} - hasBin: true + safe-regex-test@1.1.0: dependencies: - chokidar: 3.5.3 - immutable: 4.3.4 - source-map-js: 1.0.2 - dev: true + call-bound: 1.0.4 + es-errors: 1.3.0 + is-regex: 1.2.1 - /sax@1.3.0: - resolution: {integrity: sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==} - requiresBuild: true - dev: true + safer-buffer@2.1.2: optional: true - /seek-bzip@1.0.6: - resolution: {integrity: sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==} - hasBin: true + sass@1.98.0: dependencies: - commander: 2.20.3 - dev: true - - /semver-regex@4.0.5: - resolution: {integrity: sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw==} - engines: {node: '>=12'} - dev: true + chokidar: 4.0.3 + immutable: 5.1.5 + source-map-js: 1.2.1 + optionalDependencies: + '@parcel/watcher': 2.5.6 - /semver-truncate@3.0.0: - resolution: {integrity: sha512-LJWA9kSvMolR51oDE6PN3kALBNaUdkxzAGcexw8gjMA8xr5zUqK0JiR3CgARSqanYF3Z1YHvsErb1KDgh+v7Rg==} - engines: {node: '>=12'} - dependencies: - semver: 7.5.4 - dev: true + sax@1.6.0: {} - /semver@5.7.2: - resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} - hasBin: true - dev: true + seek-bzip@2.0.0: + dependencies: + commander: 6.2.1 - /semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true - dev: true + semver-regex@4.0.5: {} - /semver@7.5.4: - resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} - engines: {node: '>=10'} - hasBin: true + semver-truncate@3.0.0: dependencies: - lru-cache: 6.0.0 - dev: true + semver: 7.7.4 - /serialize-error@7.0.1: - resolution: {integrity: sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==} - engines: {node: '>=10'} + semver@5.7.2: {} + + semver@7.7.4: {} + + serialize-error@7.0.1: dependencies: type-fest: 0.13.1 - dev: true - /set-blocking@2.0.0: - resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} - dev: true - - /set-function-length@1.1.1: - resolution: {integrity: sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==} - engines: {node: '>= 0.4'} + set-function-length@1.2.2: dependencies: - define-data-property: 1.1.1 - get-intrinsic: 1.2.2 - gopd: 1.0.1 - has-property-descriptors: 1.0.1 - dev: true + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.3.0 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 - /set-function-name@2.0.1: - resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} - engines: {node: '>= 0.4'} + set-function-name@2.0.2: dependencies: - define-data-property: 1.1.1 + define-data-property: 1.1.4 + es-errors: 1.3.0 functions-have-names: 1.2.3 - has-property-descriptors: 1.0.1 - dev: true + has-property-descriptors: 1.0.2 - /shebang-command@1.2.0: - resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} - engines: {node: '>=0.10.0'} + set-proto@1.0.0: + dependencies: + dunder-proto: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + + shebang-command@1.2.0: dependencies: shebang-regex: 1.0.0 - dev: true - /shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} + shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 - dev: true - /shebang-regex@1.0.0: - resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} - engines: {node: '>=0.10.0'} - dev: true + shebang-regex@1.0.0: {} - /shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} - dev: true + shebang-regex@3.0.0: {} - /shell-quote@1.8.1: - resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} - dev: true + shell-quote@1.8.3: {} - /side-channel@1.0.4: - resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} + side-channel-list@1.0.0: dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - object-inspect: 1.13.1 - dev: true + es-errors: 1.3.0 + object-inspect: 1.13.4 - /signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - dev: true + side-channel-map@1.0.1: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 - /signal-exit@4.1.0: - resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} - engines: {node: '>=14'} - dev: true + side-channel-weakmap@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + side-channel-map: 1.0.1 - /simple-zstd@1.4.2: - resolution: {integrity: sha512-kGYEvT33M5XfyQvvW4wxl3eKcWbdbCc1V7OZzuElnaXft0qbVzoIIXHXiCm3JCUki+MZKKmvjl8p2VGLJc5Y/A==} + side-channel@1.1.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + side-channel-list: 1.0.0 + side-channel-map: 1.0.1 + side-channel-weakmap: 1.0.2 + + signal-exit@3.0.7: {} + + signal-exit@4.1.0: {} + + simple-zstd@1.4.2: dependencies: is-zst: 1.0.0 peek-stream: 1.1.3 - process-streams: 1.0.1 + process-streams: 1.0.3 through2: 4.0.2 - dev: true - /slash@3.0.0: - resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} - engines: {node: '>=8'} - dev: true - - /slash@4.0.0: - resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} - engines: {node: '>=12'} - dev: true - - /slash@5.1.0: - resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} - engines: {node: '>=14.16'} - dev: true + slash@5.1.0: {} - /slice-ansi@4.0.0: - resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} - engines: {node: '>=10'} + slice-ansi@4.0.0: dependencies: ansi-styles: 4.3.0 astral-regex: 2.0.0 is-fullwidth-code-point: 3.0.0 - dev: true - /slice-ansi@5.0.0: - resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} - engines: {node: '>=12'} + slice-ansi@8.0.0: dependencies: - ansi-styles: 6.2.1 - is-fullwidth-code-point: 4.0.0 - dev: true + ansi-styles: 6.2.3 + is-fullwidth-code-point: 5.1.0 - /sort-keys-length@1.0.1: - resolution: {integrity: sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw==} - engines: {node: '>=0.10.0'} + sort-keys-length@1.0.1: dependencies: sort-keys: 1.1.2 - dev: true - /sort-keys@1.1.2: - resolution: {integrity: sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==} - engines: {node: '>=0.10.0'} + sort-keys@1.1.2: dependencies: is-plain-obj: 1.1.0 - dev: true - /source-map-js@1.0.2: - resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} - engines: {node: '>=0.10.0'} - dev: true + source-map-js@1.2.1: {} - /source-map@0.5.7: - resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} - engines: {node: '>=0.10.0'} - dev: true + source-map@0.5.7: {} - /source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} - requiresBuild: true - dev: true + source-map@0.6.1: optional: true - /spatial-controls@6.1.1(three@0.160.0): - resolution: {integrity: sha512-ajuftYnjyLdQ6G4bTh9lme57nzxQpODeZyG8bWNhet5fGpPCUKAosT/wSMCwKXn3LSwYq1b3AxzpHK/EjiTWvA==} - engines: {node: '>= 0.16.0'} - peerDependencies: - three: 0.x.x + spatial-controls@6.3.0(three@0.183.2): dependencies: - three: 0.160.0 - dev: true + three: 0.183.2 - /spdx-correct@3.2.0: - resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} + spdx-correct@3.2.0: dependencies: spdx-expression-parse: 3.0.1 - spdx-license-ids: 3.0.16 - dev: true + spdx-license-ids: 3.0.23 - /spdx-exceptions@2.3.0: - resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==} - dev: true + spdx-exceptions@2.5.0: {} - /spdx-expression-parse@3.0.1: - resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + spdx-expression-parse@3.0.1: dependencies: - spdx-exceptions: 2.3.0 - spdx-license-ids: 3.0.16 - dev: true + spdx-exceptions: 2.5.0 + spdx-license-ids: 3.0.23 - /spdx-license-ids@3.0.16: - resolution: {integrity: sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==} - dev: true + spdx-license-ids@3.0.23: {} - /sprintf-js@1.0.3: - resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - dev: true + sprintf-js@1.0.3: {} - /sshpk@1.18.0: - resolution: {integrity: sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==} - engines: {node: '>=0.10.0'} - hasBin: true - requiresBuild: true + sshpk@1.18.0: dependencies: asn1: 0.2.6 assert-plus: 1.0.0 @@ -6220,881 +7973,587 @@ packages: jsbn: 0.1.1 safer-buffer: 2.1.2 tweetnacl: 0.14.5 - dev: true optional: true - /stack-utils@2.0.6: - resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} - engines: {node: '>=10'} + stack-utils@2.0.6: dependencies: escape-string-regexp: 2.0.0 - dev: true - /stop-iteration-iterator@1.0.0: - resolution: {integrity: sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==} - engines: {node: '>= 0.4'} + stop-iteration-iterator@1.1.0: dependencies: - internal-slot: 1.0.6 - dev: true + es-errors: 1.3.0 + internal-slot: 1.1.0 - /stream-shift@1.0.1: - resolution: {integrity: sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==} - dev: true + stream-shift@1.0.3: {} - /streamx@2.15.6: - resolution: {integrity: sha512-q+vQL4AAz+FdfT137VF69Cc/APqUbxy+MDOImRrMvchJpigHj9GksgDU2LYbO9rx7RX6osWgxJB2WxhYv4SZAw==} + streamx@2.25.0: dependencies: + events-universal: 1.0.1 fast-fifo: 1.3.2 - queue-tick: 1.0.1 - dev: true + text-decoder: 1.2.7 + transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a - /string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} + string-width@4.2.3: dependencies: emoji-regex: 8.0.0 is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 - dev: true - /string-width@7.0.0: - resolution: {integrity: sha512-GPQHj7row82Hjo9hKZieKcHIhaAIKOJvFSIZXuCU9OASVZrMNUaZuz++SPVrBjnLsnk4k+z9f2EIypgxf2vNFw==} - engines: {node: '>=18'} + string-width@7.2.0: dependencies: - emoji-regex: 10.3.0 - get-east-asian-width: 1.2.0 - strip-ansi: 7.1.0 - dev: true + emoji-regex: 10.6.0 + get-east-asian-width: 1.5.0 + strip-ansi: 7.2.0 - /string.prototype.padend@3.1.5: - resolution: {integrity: sha512-DOB27b/2UTTD+4myKUFh+/fXWcu/UDyASIXfg+7VzoCNNGOfWvoyU/x5pvVHr++ztyt/oSYI1BcWBBG/hmlNjA==} - engines: {node: '>= 0.4'} + string-width@8.2.0: + dependencies: + get-east-asian-width: 1.5.0 + strip-ansi: 7.2.0 + + string.prototype.padend@3.1.6: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.22.3 - dev: true + es-abstract: 1.24.1 + es-object-atoms: 1.1.1 - /string.prototype.trim@1.2.8: - resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} - engines: {node: '>= 0.4'} + string.prototype.trim@1.2.10: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.8 + call-bound: 1.0.4 + define-data-property: 1.1.4 define-properties: 1.2.1 - es-abstract: 1.22.3 - dev: true + es-abstract: 1.24.1 + es-object-atoms: 1.1.1 + has-property-descriptors: 1.0.2 - /string.prototype.trimend@1.0.7: - resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} + string.prototype.trimend@1.0.9: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.8 + call-bound: 1.0.4 define-properties: 1.2.1 - es-abstract: 1.22.3 - dev: true + es-object-atoms: 1.1.1 - /string.prototype.trimstart@1.0.7: - resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} + string.prototype.trimstart@1.0.8: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.22.3 - dev: true + es-object-atoms: 1.1.1 - /string_decoder@0.10.31: - resolution: {integrity: sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==} - dev: true + string_decoder@0.10.31: {} - /string_decoder@1.1.1: - resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + string_decoder@1.1.1: dependencies: safe-buffer: 5.1.2 - dev: true - /string_decoder@1.3.0: - resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + string_decoder@1.3.0: dependencies: safe-buffer: 5.2.1 - dev: true - /strip-ansi@3.0.1: - resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==} - engines: {node: '>=0.10.0'} + strip-ansi@3.0.1: dependencies: ansi-regex: 2.1.1 - dev: true - /strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} + strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 - dev: true - /strip-ansi@7.1.0: - resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} - engines: {node: '>=12'} + strip-ansi@7.2.0: dependencies: - ansi-regex: 6.0.1 - dev: true + ansi-regex: 6.2.2 - /strip-bom@3.0.0: - resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} - engines: {node: '>=4'} - dev: true + strip-bom@3.0.0: {} - /strip-dirs@3.0.0: - resolution: {integrity: sha512-I0sdgcFTfKQlUPZyAqPJmSG3HLO9rWDFnxonnIbskYNM3DwFOeTNB5KzVq3dA1GdRAc/25b5Y7UO2TQfKWw4aQ==} + strip-dirs@3.0.0: dependencies: inspect-with-kind: 1.0.5 is-plain-obj: 1.1.0 - dev: true - /strip-final-newline@2.0.0: - resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} - engines: {node: '>=6'} - dev: true - - /strip-indent@4.0.0: - resolution: {integrity: sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==} - engines: {node: '>=12'} - dependencies: - min-indent: 1.0.1 - dev: true - - /strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} - dev: true + strip-final-newline@2.0.0: {} - /strtok3@7.0.0: - resolution: {integrity: sha512-pQ+V+nYQdC5H3Q7qBZAz/MO6lwGhoC2gOAjuouGf/VO0m7vQRh8QNMl2Uf6SwAtzZ9bOw3UIeBukEGNJl5dtXQ==} - engines: {node: '>=14.16'} + strtok3@10.3.4: dependencies: '@tokenizer/token': 0.3.0 - peek-readable: 5.0.0 - dev: true - /style-search@0.1.0: - resolution: {integrity: sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==} - dev: true - - /stylehacks@6.0.1(postcss@8.4.32): - resolution: {integrity: sha512-jTqG2aIoX2fYg0YsGvqE4ooE/e75WmaEjnNiP6Ag7irLtHxML8NJRxRxS0HyDpde8DRGuEXTFVHVfR5Tmbxqzg==} - engines: {node: ^14 || ^16 || >=18.0} - peerDependencies: - postcss: ^8.4.31 + stylehacks@7.0.8(postcss@8.5.8): dependencies: - browserslist: 4.22.2 - postcss: 8.4.32 - postcss-selector-parser: 6.0.13 - dev: true + browserslist: 4.28.1 + postcss: 8.5.8 + postcss-selector-parser: 7.1.1 - /stylelint-config-recommended-scss@13.1.0(postcss@8.4.32)(stylelint@15.11.0): - resolution: {integrity: sha512-8L5nDfd+YH6AOoBGKmhH8pLWF1dpfY816JtGMePcBqqSsLU+Ysawx44fQSlMOJ2xTfI9yTGpup5JU77c17w1Ww==} - peerDependencies: - postcss: ^8.3.3 - stylelint: ^15.10.0 - peerDependenciesMeta: - postcss: - optional: true + stylelint-config-recommended-scss@17.0.0(postcss@8.5.8)(stylelint@17.5.0(typescript@5.9.3)): dependencies: - postcss: 8.4.32 - postcss-scss: 4.0.9(postcss@8.4.32) - stylelint: 15.11.0(typescript@5.3.3) - stylelint-config-recommended: 13.0.0(stylelint@15.11.0) - stylelint-scss: 5.3.2(stylelint@15.11.0) - dev: true + postcss-scss: 4.0.9(postcss@8.5.8) + stylelint: 17.5.0(typescript@5.9.3) + stylelint-config-recommended: 18.0.0(stylelint@17.5.0(typescript@5.9.3)) + stylelint-scss: 7.0.0(stylelint@17.5.0(typescript@5.9.3)) + optionalDependencies: + postcss: 8.5.8 - /stylelint-config-recommended@13.0.0(stylelint@15.11.0): - resolution: {integrity: sha512-EH+yRj6h3GAe/fRiyaoO2F9l9Tgg50AOFhaszyfov9v6ayXJ1IkSHwTxd7lB48FmOeSGDPLjatjO11fJpmarkQ==} - engines: {node: ^14.13.1 || >=16.0.0} - peerDependencies: - stylelint: ^15.10.0 + stylelint-config-recommended@18.0.0(stylelint@17.5.0(typescript@5.9.3)): dependencies: - stylelint: 15.11.0(typescript@5.3.3) - dev: true + stylelint: 17.5.0(typescript@5.9.3) - /stylelint-config-standard-scss@11.1.0(postcss@8.4.32)(stylelint@15.11.0): - resolution: {integrity: sha512-5gnBgeNTgRVdchMwiFQPuBOtj9QefYtfXiddrOMJA2pI22zxt6ddI2s+e5Oh7/6QYl7QLJujGnaUR5YyGq72ow==} - peerDependencies: - postcss: ^8.3.3 - stylelint: ^15.10.0 - peerDependenciesMeta: - postcss: - optional: true + stylelint-config-standard-scss@17.0.0(postcss@8.5.8)(stylelint@17.5.0(typescript@5.9.3)): dependencies: - postcss: 8.4.32 - stylelint: 15.11.0(typescript@5.3.3) - stylelint-config-recommended-scss: 13.1.0(postcss@8.4.32)(stylelint@15.11.0) - stylelint-config-standard: 34.0.0(stylelint@15.11.0) - dev: true + stylelint: 17.5.0(typescript@5.9.3) + stylelint-config-recommended-scss: 17.0.0(postcss@8.5.8)(stylelint@17.5.0(typescript@5.9.3)) + stylelint-config-standard: 40.0.0(stylelint@17.5.0(typescript@5.9.3)) + optionalDependencies: + postcss: 8.5.8 - /stylelint-config-standard@34.0.0(stylelint@15.11.0): - resolution: {integrity: sha512-u0VSZnVyW9VSryBG2LSO+OQTjN7zF9XJaAJRX/4EwkmU0R2jYwmBSN10acqZisDitS0CLiEiGjX7+Hrq8TAhfQ==} - engines: {node: ^14.13.1 || >=16.0.0} - peerDependencies: - stylelint: ^15.10.0 + stylelint-config-standard@40.0.0(stylelint@17.5.0(typescript@5.9.3)): dependencies: - stylelint: 15.11.0(typescript@5.3.3) - stylelint-config-recommended: 13.0.0(stylelint@15.11.0) - dev: true + stylelint: 17.5.0(typescript@5.9.3) + stylelint-config-recommended: 18.0.0(stylelint@17.5.0(typescript@5.9.3)) - /stylelint-order@6.0.4(stylelint@15.11.0): - resolution: {integrity: sha512-0UuKo4+s1hgQ/uAxlYU4h0o0HS4NiQDud0NAUNI0aa8FJdmYHA5ZZTFHiV5FpmE3071e9pZx5j0QpVJW5zOCUA==} - peerDependencies: - stylelint: ^14.0.0 || ^15.0.0 || ^16.0.1 + stylelint-order@7.0.1(stylelint@17.5.0(typescript@5.9.3)): dependencies: - postcss: 8.4.32 - postcss-sorting: 8.0.2(postcss@8.4.32) - stylelint: 15.11.0(typescript@5.3.3) - dev: true + postcss: 8.5.8 + postcss-sorting: 9.1.0(postcss@8.5.8) + stylelint: 17.5.0(typescript@5.9.3) - /stylelint-scss@5.3.2(stylelint@15.11.0): - resolution: {integrity: sha512-4LzLaayFhFyneJwLo0IUa8knuIvj+zF0vBFueQs4e3tEaAMIQX8q5th8ziKkgOavr6y/y9yoBe+RXN/edwLzsQ==} - peerDependencies: - stylelint: ^14.5.1 || ^15.0.0 + stylelint-scss@7.0.0(stylelint@17.5.0(typescript@5.9.3)): dependencies: - known-css-properties: 0.29.0 + css-tree: 3.2.1 + is-plain-object: 5.0.0 + known-css-properties: 0.37.0 + mdn-data: 2.27.1 postcss-media-query-parser: 0.2.3 - postcss-resolve-nested-selector: 0.1.1 - postcss-selector-parser: 6.0.13 + postcss-resolve-nested-selector: 0.1.6 + postcss-selector-parser: 7.1.1 postcss-value-parser: 4.2.0 - stylelint: 15.11.0(typescript@5.3.3) - dev: true + stylelint: 17.5.0(typescript@5.9.3) - /stylelint@15.11.0(typescript@5.3.3): - resolution: {integrity: sha512-78O4c6IswZ9TzpcIiQJIN49K3qNoXTM8zEJzhaTE/xRTCZswaovSEVIa/uwbOltZrk16X4jAxjaOhzz/hTm1Kw==} - engines: {node: ^14.13.1 || >=16.0.0} - hasBin: true + stylelint@17.5.0(typescript@5.9.3): dependencies: - '@csstools/css-parser-algorithms': 2.4.0(@csstools/css-tokenizer@2.2.2) - '@csstools/css-tokenizer': 2.2.2 - '@csstools/media-query-list-parser': 2.1.6(@csstools/css-parser-algorithms@2.4.0)(@csstools/css-tokenizer@2.2.2) - '@csstools/selector-specificity': 3.0.1(postcss-selector-parser@6.0.13) - balanced-match: 2.0.0 + '@csstools/css-calc': 3.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) + '@csstools/css-syntax-patches-for-csstree': 1.1.1(css-tree@3.2.1) + '@csstools/css-tokenizer': 4.0.0 + '@csstools/media-query-list-parser': 5.0.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/selector-resolve-nested': 4.0.0(postcss-selector-parser@7.1.1) + '@csstools/selector-specificity': 6.0.0(postcss-selector-parser@7.1.1) colord: 2.9.3 - cosmiconfig: 8.3.6(typescript@5.3.3) - css-functions-list: 3.2.1 - css-tree: 2.3.1 - debug: 4.3.4 - fast-glob: 3.3.2 + cosmiconfig: 9.0.1(typescript@5.9.3) + css-functions-list: 3.3.3 + css-tree: 3.2.1 + debug: 4.4.3 + fast-glob: 3.3.3 fastest-levenshtein: 1.0.16 - file-entry-cache: 7.0.2 + file-entry-cache: 11.1.2 global-modules: 2.0.0 - globby: 11.1.0 + globby: 16.1.1 globjoin: 0.1.4 - html-tags: 3.3.1 - ignore: 5.3.0 - import-lazy: 4.0.0 + html-tags: 5.1.0 + ignore: 7.0.5 + import-meta-resolve: 4.2.0 imurmurhash: 0.1.4 is-plain-object: 5.0.0 - known-css-properties: 0.29.0 - mathml-tag-names: 2.1.3 - meow: 10.1.5 - micromatch: 4.0.5 + mathml-tag-names: 4.0.0 + meow: 14.1.0 + micromatch: 4.0.8 normalize-path: 3.0.0 - picocolors: 1.0.0 - postcss: 8.4.32 - postcss-resolve-nested-selector: 0.1.1 - postcss-safe-parser: 6.0.0(postcss@8.4.32) - postcss-selector-parser: 6.0.13 + picocolors: 1.1.1 + postcss: 8.5.8 + postcss-safe-parser: 7.0.1(postcss@8.5.8) + postcss-selector-parser: 7.1.1 postcss-value-parser: 4.2.0 - resolve-from: 5.0.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - style-search: 0.1.0 - supports-hyperlinks: 3.0.0 + string-width: 8.2.0 + supports-hyperlinks: 4.4.0 svg-tags: 1.0.0 - table: 6.8.1 - write-file-atomic: 5.0.1 + table: 6.9.0 + write-file-atomic: 7.0.1 transitivePeerDependencies: - supports-color - typescript - dev: true - /supertap@3.0.1: - resolution: {integrity: sha512-u1ZpIBCawJnO+0QePsEiOknOfCRq0yERxiAchT0i4li0WHNUJbf0evXXSXOcCAR4M8iMDoajXYmstm/qO81Isw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + supertap@3.0.1: dependencies: indent-string: 5.0.0 - js-yaml: 3.14.1 + js-yaml: 3.14.2 serialize-error: 7.0.1 - strip-ansi: 7.1.0 - dev: true + strip-ansi: 7.2.0 - /supports-color@2.0.0: - resolution: {integrity: sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==} - engines: {node: '>=0.8.0'} - dev: true + supports-color@10.2.2: {} - /supports-color@5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} - engines: {node: '>=4'} - dependencies: - has-flag: 3.0.0 - dev: true + supports-color@2.0.0: {} - /supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} + supports-color@5.5.0: dependencies: - has-flag: 4.0.0 - dev: true + has-flag: 3.0.0 - /supports-hyperlinks@3.0.0: - resolution: {integrity: sha512-QBDPHyPQDRTy9ku4URNGY5Lah8PAaXs6tAAwp55sL5WCsSW7GIfdf6W5ixfziW+t7wh3GVvHyHHyQ1ESsoRvaA==} - engines: {node: '>=14.18'} + supports-hyperlinks@4.4.0: dependencies: - has-flag: 4.0.0 - supports-color: 7.2.0 - dev: true + has-flag: 5.0.1 + supports-color: 10.2.2 - /supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - dev: true + supports-preserve-symlinks-flag@1.0.0: {} - /svg-tags@1.0.0: - resolution: {integrity: sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==} - dev: true + svg-tags@1.0.0: {} - /svgo@3.1.0: - resolution: {integrity: sha512-R5SnNA89w1dYgNv570591F66v34b3eQShpIBcQtZtM5trJwm1VvxbIoMpRYY3ybTAutcKTLEmTsdnaknOHbiQA==} - engines: {node: '>=14.0.0'} - hasBin: true + svgo@4.0.1: dependencies: - '@trysound/sax': 0.2.0 - commander: 7.2.0 - css-select: 5.1.0 - css-tree: 2.3.1 - css-what: 6.1.0 + commander: 11.1.0 + css-select: 5.2.2 + css-tree: 3.2.1 + css-what: 6.2.2 csso: 5.0.5 - picocolors: 1.0.0 - dev: true + picocolors: 1.1.1 + sax: 1.6.0 - /symbol-tree@3.2.4: - resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} - requiresBuild: true - dev: true + symbol-tree@3.2.4: optional: true - /table@6.8.1: - resolution: {integrity: sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==} - engines: {node: '>=10.0.0'} + table@6.9.0: dependencies: - ajv: 8.12.0 + ajv: 8.18.0 lodash.truncate: 4.4.2 slice-ansi: 4.0.0 string-width: 4.2.3 strip-ansi: 6.0.1 - dev: true - /taffydb@2.7.2: - resolution: {integrity: sha512-R6es6/C/m1xXZckrSam4j07YKbd74437mRJ/R944S1hLG7mIl2/EQW7tQPI4XiX7jTduFzz31g7466a2BcsglQ==} - dev: true + taffydb@2.7.2: {} - /taffydb@2.7.3: - resolution: {integrity: sha512-GQ3gtYFSOAxSMN/apGtDKKkbJf+8izz5YfbGqIsUc7AMiQOapARZ76dhilRY2h39cynYxBFdafQo5HUL5vgkrg==} - dev: true + taffydb@2.7.3: {} - /tar-stream@3.1.6: - resolution: {integrity: sha512-B/UyjYwPpMBv+PaFSWAmtYjwdrlEaZQEhMIBFNC5oEG8lpiW8XjcSdmEaClj28ArfKScKHs2nshz3k2le6crsg==} + tar-stream@3.1.8: dependencies: - b4a: 1.6.4 + b4a: 1.8.0 + bare-fs: 4.5.6 fast-fifo: 1.3.2 - streamx: 2.15.6 - dev: true + streamx: 2.25.0 + transitivePeerDependencies: + - bare-abort-controller + - bare-buffer + - react-native-b4a - /tar@6.2.0: - resolution: {integrity: sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==} - engines: {node: '>=10'} + tar@7.5.12: dependencies: - chownr: 2.0.0 - fs-minipass: 2.1.0 - minipass: 5.0.0 - minizlib: 2.1.2 - mkdirp: 1.0.4 - yallist: 4.0.0 - dev: true - - /temp-dir@3.0.0: - resolution: {integrity: sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw==} - engines: {node: '>=14.16'} - dev: true + '@isaacs/fs-minipass': 4.0.1 + chownr: 3.0.0 + minipass: 7.1.3 + minizlib: 3.1.0 + yallist: 5.0.0 - /tempfile@1.1.1: - resolution: {integrity: sha512-NjT12fW6pSEKz1eVcADgaKfeM+XZ4+zSaqVz46XH7+CiEwcelnwtGWRRjF1p+xyW2PVgKKKS2UUw1LzRelntxg==} - engines: {node: '>=0.10.0'} + teex@1.0.1: dependencies: - os-tmpdir: 1.0.2 - uuid: 2.0.3 - dev: true + streamx: 2.25.0 + transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a - /text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - dev: true + temp-dir@3.0.0: {} - /thenby@1.3.4: - resolution: {integrity: sha512-89Gi5raiWA3QZ4b2ePcEwswC3me9JIg+ToSgtE0JWeCynLnLxNr/f9G+xfo9K+Oj4AFdom8YNJjibIARTJmapQ==} - dev: true + text-decoder@1.2.7: + dependencies: + b4a: 1.8.0 + transitivePeerDependencies: + - react-native-b4a - /three-demo@5.1.3(dat.gui@0.7.9)(three@0.160.0): - resolution: {integrity: sha512-bItONudb5cDlE2PMcAAEZbImsluwuGUKdm+ymC726Ew0vnYz5m+/bn0C37AdDBLpqmwixrgtmhEBXQzyrmTimg==} - engines: {node: '>= 0.14.0'} - peerDependencies: - dat.gui: 0.x.x - three: 0.x.x + thenby@1.3.4: {} + + three-demo@5.1.3(dat.gui@0.7.9)(three@0.183.2): dependencies: dat.gui: 0.7.9 - three: 0.160.0 - dev: true + three: 0.183.2 - /three@0.160.0: - resolution: {integrity: sha512-DLU8lc0zNIPkM7rH5/e1Ks1Z8tWCGRq6g8mPowdDJpw1CFBJMU7UoJjC6PefXW7z//SSl0b2+GCw14LB+uDhng==} - dev: true + three@0.183.2: {} - /through2@2.0.5: - resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} + through2@2.0.5: dependencies: readable-stream: 2.3.8 xtend: 4.0.2 - dev: true - /through2@4.0.2: - resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==} + through2@4.0.2: dependencies: readable-stream: 3.6.2 - dev: true - /through@2.3.8: - resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - dev: true + through@2.3.8: {} - /time-zone@1.0.0: - resolution: {integrity: sha512-TIsDdtKo6+XrPtiTm1ssmMngN1sAhyKnTO2kunQWqNPWIVvCm15Wmw4SWInwTVgJ5u/Tr04+8Ei9TNcw4x4ONA==} - engines: {node: '>=4'} - dev: true + time-zone@1.0.0: {} - /tiny-glob@0.2.9: - resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==} + tiny-glob@0.2.9: dependencies: globalyzer: 0.1.0 globrex: 0.1.2 - dev: true - /to-fast-properties@1.0.3: - resolution: {integrity: sha512-lxrWP8ejsq+7E3nNjwYmUBMAgjMTZoTI+sdBOpvNyijeDLa29LUn9QaoXAHv4+Z578hbmHHJKZknzxVtvo77og==} - engines: {node: '>=0.10.0'} - dev: true + tinyglobby@0.2.15: + dependencies: + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 - /to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} + to-fast-properties@1.0.3: {} + + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 - dev: true - /token-types@5.0.1: - resolution: {integrity: sha512-Y2fmSnZjQdDb9W4w4r1tswlMHylzWIeOKpx0aZH9BgGtACHhrk3OkT52AzwcuqTRBZtvvnTjDBh8eynMulu8Vg==} - engines: {node: '>=14.16'} + token-types@6.1.2: dependencies: + '@borewit/text-codec': 0.2.2 '@tokenizer/token': 0.3.0 ieee754: 1.2.1 - dev: true - /tough-cookie@2.5.0: - resolution: {integrity: sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==} - engines: {node: '>=0.8'} - requiresBuild: true + tough-cookie@2.5.0: dependencies: - psl: 1.9.0 + psl: 1.15.0 punycode: 2.3.1 - dev: true optional: true - /tr46@0.0.3: - resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - requiresBuild: true - dev: true - - /trim-newlines@4.1.1: - resolution: {integrity: sha512-jRKj0n0jXWo6kh62nA5TEh3+4igKDXLvzBJcPpiizP7oOolUrYIxmVBG9TOtHYFHoddUk6YvAkGeGoSVTXfQXQ==} - engines: {node: '>=12'} - dev: true + tr46@0.0.3: {} - /trim-right@1.0.1: - resolution: {integrity: sha512-WZGXGstmCWgeevgTL54hrCuw1dyMQIzWy7ZfqRJfSmJZBwklI15egmQytFP6bPidmw3M8d5yEowl1niq4vmqZw==} - engines: {node: '>=0.10.0'} - dev: true + trim-right@1.0.1: {} - /ts-api-utils@1.0.3(typescript@5.3.3): - resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} - engines: {node: '>=16.13.0'} - peerDependencies: - typescript: '>=4.2.0' + ts-api-utils@2.5.0(typescript@5.9.3): dependencies: - typescript: 5.3.3 - dev: true + typescript: 5.9.3 - /tslib@2.6.2: - resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - dev: true + tslib@2.8.1: {} - /tunnel-agent@0.6.0: - resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} - requiresBuild: true + tunnel-agent@0.6.0: dependencies: safe-buffer: 5.2.1 - dev: true optional: true - /tweakpane@4.0.3: - resolution: {integrity: sha512-BlcWOAe8oe4c+k9pmLBARGdWB6MVZMszayekkixQXTgkxTaYoTUpHpwVEp+3HkoamZkomodpbBf0CkguIHTgLg==} - dev: true + tweakpane@4.0.5: {} - /tweetnacl@0.14.5: - resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==} - requiresBuild: true - dev: true + tweetnacl@0.14.5: optional: true - /type-check@0.3.2: - resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==} - engines: {node: '>= 0.8.0'} - requiresBuild: true + type-check@0.3.2: dependencies: prelude-ls: 1.1.2 - dev: true optional: true - /type-check@0.4.0: - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} - engines: {node: '>= 0.8.0'} + type-check@0.4.0: dependencies: prelude-ls: 1.2.1 - dev: true - - /type-fest@0.13.1: - resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} - engines: {node: '>=10'} - dev: true - /type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} - dev: true + type-fest@0.13.1: {} - /type-fest@1.4.0: - resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} - engines: {node: '>=10'} - dev: true + typed-array-buffer@1.0.3: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-typed-array: 1.1.15 - /typed-array-buffer@1.0.0: - resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} - engines: {node: '>= 0.4'} + typed-array-byte-length@1.0.3: dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - is-typed-array: 1.1.12 - dev: true + call-bind: 1.0.8 + for-each: 0.3.5 + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.15 - /typed-array-byte-length@1.0.0: - resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} - engines: {node: '>= 0.4'} + typed-array-byte-offset@1.0.4: dependencies: - call-bind: 1.0.5 - for-each: 0.3.3 - has-proto: 1.0.1 - is-typed-array: 1.1.12 - dev: true + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + for-each: 0.3.5 + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.15 + reflect.getprototypeof: 1.0.10 - /typed-array-byte-offset@1.0.0: - resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} - engines: {node: '>= 0.4'} + typed-array-length@1.0.7: dependencies: - available-typed-arrays: 1.0.5 - call-bind: 1.0.5 - for-each: 0.3.3 - has-proto: 1.0.1 - is-typed-array: 1.1.12 - dev: true + call-bind: 1.0.8 + for-each: 0.3.5 + gopd: 1.2.0 + is-typed-array: 1.1.15 + possible-typed-array-names: 1.1.0 + reflect.getprototypeof: 1.0.10 - /typed-array-length@1.0.4: - resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} + typescript-eslint@8.57.1(eslint@10.1.0)(typescript@5.9.3): dependencies: - call-bind: 1.0.5 - for-each: 0.3.3 - is-typed-array: 1.1.12 - dev: true + '@typescript-eslint/eslint-plugin': 8.57.1(@typescript-eslint/parser@8.57.1(eslint@10.1.0)(typescript@5.9.3))(eslint@10.1.0)(typescript@5.9.3) + '@typescript-eslint/parser': 8.57.1(eslint@10.1.0)(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.57.1(typescript@5.9.3) + '@typescript-eslint/utils': 8.57.1(eslint@10.1.0)(typescript@5.9.3) + eslint: 10.1.0 + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color - /typescript@5.3.3: - resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} - engines: {node: '>=14.17'} - hasBin: true - dev: true + typescript@5.9.3: {} + + uint8array-extras@1.5.0: {} - /unbox-primitive@1.0.2: - resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + unbox-primitive@1.1.0: dependencies: - call-bind: 1.0.5 - has-bigints: 1.0.2 - has-symbols: 1.0.3 - which-boxed-primitive: 1.0.2 - dev: true + call-bound: 1.0.4 + has-bigints: 1.1.0 + has-symbols: 1.1.0 + which-boxed-primitive: 1.1.1 - /unbzip2-stream@1.4.3: - resolution: {integrity: sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==} + unbzip2-stream@1.4.3: dependencies: buffer: 5.7.1 through: 2.3.8 - dev: true - /undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - dev: true + undici-types@7.18.2: {} - /unicorn-magic@0.1.0: - resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} - engines: {node: '>=18'} - dev: true + unicorn-magic@0.3.0: {} - /universalify@0.1.2: - resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} - engines: {node: '>= 4.0.0'} - dev: true + unicorn-magic@0.4.0: {} - /universalify@2.0.1: - resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} - engines: {node: '>= 10.0.0'} - dev: true + universalify@0.1.2: {} - /update-browserslist-db@1.0.13(browserslist@4.22.2): - resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' + universalify@2.0.1: {} + + update-browserslist-db@1.2.3(browserslist@4.28.1): dependencies: - browserslist: 4.22.2 - escalade: 3.1.1 - picocolors: 1.0.0 - dev: true + browserslist: 4.28.1 + escalade: 3.2.0 + picocolors: 1.1.1 - /uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + uri-js@4.4.1: dependencies: punycode: 2.3.1 - dev: true - - /util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - dev: true - /uuid@2.0.3: - resolution: {integrity: sha512-FULf7fayPdpASncVy4DLh3xydlXEJJpvIELjYjNeQWYUZ9pclcpvCZSr2gkmN2FrrGcI7G/cJsIEwk5/8vfXpg==} - deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. - dev: true + util-deprecate@1.0.2: {} - /uuid@3.4.0: - resolution: {integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==} - deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. - hasBin: true - requiresBuild: true - dev: true + uuid@3.4.0: optional: true - /uuid@8.3.2: - resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} - hasBin: true - dev: true - - /validate-npm-package-license@3.0.4: - resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + validate-npm-package-license@3.0.4: dependencies: spdx-correct: 3.2.0 spdx-expression-parse: 3.0.1 - dev: true - /verror@1.10.0: - resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==} - engines: {'0': node >=0.6.0} - requiresBuild: true + verror@1.10.0: dependencies: assert-plus: 1.0.0 core-util-is: 1.0.2 extsprintf: 1.3.0 - dev: true optional: true - /webidl-conversions@2.0.1: - resolution: {integrity: sha512-OZ7I/f0sM+T28T2/OXinNGfmvjm3KKptdyQy8NPRZyLfYBn+9vt72Bfr+uQaE9OvWyxJjQ5kHFygH2wOTUb76g==} - requiresBuild: true - dev: true + webidl-conversions@2.0.1: optional: true - /webidl-conversions@3.0.1: - resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - dev: true + webidl-conversions@3.0.1: {} - /well-known-symbols@2.0.0: - resolution: {integrity: sha512-ZMjC3ho+KXo0BfJb7JgtQ5IBuvnShdlACNkKkdsqBmYw3bPAaJfPeYUo6tLUaT5tG/Gkh7xkpBhKRQ9e7pyg9Q==} - engines: {node: '>=6'} - dev: true + well-known-symbols@2.0.0: {} - /whatwg-url-compat@0.6.5: - resolution: {integrity: sha512-vbg5+JVNwGtHRI3GheZGWrcUlxF9BXHbA80dLa+2XqJjlV/BK6upoi2j8dIRW9FGPUUyaMm7Hf1pTexHnsk85g==} - requiresBuild: true + whatwg-url-compat@0.6.5: dependencies: tr46: 0.0.3 - dev: true optional: true - /whatwg-url@5.0.0: - resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + whatwg-url@5.0.0: dependencies: tr46: 0.0.3 webidl-conversions: 3.0.1 - dev: true - /which-boxed-primitive@1.0.2: - resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} - dependencies: - is-bigint: 1.0.4 - is-boolean-object: 1.1.2 - is-number-object: 1.0.7 - is-string: 1.0.7 - is-symbol: 1.0.4 - dev: true + which-boxed-primitive@1.1.1: + dependencies: + is-bigint: 1.1.0 + is-boolean-object: 1.2.2 + is-number-object: 1.1.1 + is-string: 1.1.1 + is-symbol: 1.1.1 + + which-builtin-type@1.2.1: + dependencies: + call-bound: 1.0.4 + function.prototype.name: 1.1.8 + has-tostringtag: 1.0.2 + is-async-function: 2.1.1 + is-date-object: 1.1.0 + is-finalizationregistry: 1.1.1 + is-generator-function: 1.1.2 + is-regex: 1.2.1 + is-weakref: 1.1.1 + isarray: 2.0.5 + which-boxed-primitive: 1.1.1 + which-collection: 1.0.2 + which-typed-array: 1.1.20 - /which-collection@1.0.1: - resolution: {integrity: sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==} + which-collection@1.0.2: dependencies: - is-map: 2.0.2 - is-set: 2.0.2 - is-weakmap: 2.0.1 - is-weakset: 2.0.2 - dev: true + is-map: 2.0.3 + is-set: 2.0.3 + is-weakmap: 2.0.2 + is-weakset: 2.0.4 - /which-typed-array@1.1.13: - resolution: {integrity: sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==} - engines: {node: '>= 0.4'} + which-typed-array@1.1.20: dependencies: - available-typed-arrays: 1.0.5 - call-bind: 1.0.5 - for-each: 0.3.3 - gopd: 1.0.1 - has-tostringtag: 1.0.0 - dev: true + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.4 + for-each: 0.3.5 + get-proto: 1.0.1 + gopd: 1.2.0 + has-tostringtag: 1.0.2 - /which@1.3.1: - resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} - hasBin: true + which@1.3.1: dependencies: isexe: 2.0.0 - dev: true - /which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true + which@2.0.2: dependencies: isexe: 2.0.0 - dev: true - /wide-align@1.1.5: - resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} - dependencies: - string-width: 4.2.3 - dev: true - - /word-wrap@1.2.5: - resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} - engines: {node: '>=0.10.0'} - requiresBuild: true - dev: true - optional: true + word-wrap@1.2.5: {} - /wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} + wrap-ansi@7.0.0: dependencies: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 - dev: true - /wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - dev: true + wrap-ansi@9.0.2: + dependencies: + ansi-styles: 6.2.3 + string-width: 7.2.0 + strip-ansi: 7.2.0 - /write-file-atomic@5.0.1: - resolution: {integrity: sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + wrappy@1.0.2: {} + + write-file-atomic@7.0.1: dependencies: - imurmurhash: 0.1.4 signal-exit: 4.1.0 - dev: true - /xml-name-validator@2.0.1: - resolution: {integrity: sha512-jRKe/iQYMyVJpzPH+3HL97Lgu5HrCfii+qSo+TfjKHtOnvbnvdVfMYrn9Q34YV81M2e5sviJlI6Ko9y+nByzvA==} - requiresBuild: true - dev: true + xml-name-validator@2.0.1: optional: true - /xtend@4.0.2: - resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} - engines: {node: '>=0.4'} - dev: true + xtend@4.0.2: {} - /y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} - dev: true + y18n@5.0.8: {} - /yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - dev: true + yallist@5.0.0: {} - /yaml@2.3.4: - resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==} - engines: {node: '>= 14'} - dev: true + yaml@2.8.2: {} - /yargs-parser@20.2.9: - resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} - engines: {node: '>=10'} - dev: true + yargs-parser@21.1.1: {} - /yargs-parser@21.1.1: - resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} - engines: {node: '>=12'} - dev: true + yargs-parser@22.0.0: {} - /yargs@17.7.2: - resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} - engines: {node: '>=12'} + yargs@17.7.2: dependencies: cliui: 8.0.1 - escalade: 3.1.1 + escalade: 3.2.0 get-caller-file: 2.0.5 require-directory: 2.1.1 string-width: 4.2.3 y18n: 5.0.8 yargs-parser: 21.1.1 - dev: true - /yauzl@2.10.0: - resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} + yargs@18.0.0: dependencies: - buffer-crc32: 0.2.13 - fd-slicer: 1.1.0 - dev: true + cliui: 9.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + string-width: 7.2.0 + y18n: 5.0.8 + yargs-parser: 22.0.0 - /yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - dev: true + yauzl@3.2.1: + dependencies: + buffer-crc32: 0.2.13 + pend: 1.2.0 - /yocto-queue@1.0.0: - resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} - engines: {node: '>=12.20'} - dev: true + yocto-queue@0.1.0: {} diff --git a/src/core/EffectComposer.js b/src/core/EffectComposer.js index e739d12f1..d34e94eba 100644 --- a/src/core/EffectComposer.js +++ b/src/core/EffectComposer.js @@ -1,18 +1,20 @@ import { DepthStencilFormat, DepthTexture, + FloatType, LinearFilter, + SRGBColorSpace, UnsignedByteType, - UnsignedIntType, UnsignedInt248Type, Vector2, WebGLRenderTarget } from "three"; -import { ClearMaskPass, CopyPass, MaskPass } from "../passes/index.js"; -import { SRGBColorSpace } from "../enums/ColorSpace.js"; -import { getOutputColorSpace, setTextureColorSpace } from "../utils/BackCompat.js"; -import { Timer } from "./Timer.js"; +import { ClearMaskPass } from "../passes/ClearMaskPass.js"; +import { CopyPass } from "../passes/CopyPass.js"; +import { MaskPass } from "../passes/MaskPass.js"; +import { Pass } from "../passes/Pass.js"; +import { Timer } from "./Timer.js"; // TODO Replace with Timer from three, requires r179. /** * The EffectComposer may be used in place of a normal WebGLRenderer. @@ -35,7 +37,6 @@ export class EffectComposer { * @param {Object} [options] - The options. * @param {Boolean} [options.depthBuffer=true] - Whether the main render targets should have a depth buffer. * @param {Boolean} [options.stencilBuffer=false] - Whether the main render targets should have a stencil buffer. - * @param {Boolean} [options.alpha] - Deprecated. Buffers are always RGBA since three r137. * @param {Number} [options.multisampling=0] - The number of samples used for multisample antialiasing. Requires WebGL 2. * @param {Number} [options.frameBufferType] - The type of the internal frame buffers. It's recommended to use HalfFloatType if possible. */ @@ -94,6 +95,18 @@ export class EffectComposer { this.depthTexture = null; + /** + * A render target that holds a stable copy of the scene depth. + * + * The scene depth needs to be copied to avoid feedback loops and undefined behavior that can happen when the same + * depth attachment is used on both the input and output buffers. + * + * @type {WebGLRenderTarget} + * @private + */ + + this.depthRenderTarget = null; + /** * The passes. * @@ -132,8 +145,7 @@ export class EffectComposer { get multisampling() { - // TODO Raise min three version to 138 and remove || 0. - return this.inputBuffer.samples || 0; + return this.inputBuffer.samples; } @@ -170,7 +182,6 @@ export class EffectComposer { value ); - this.inputBuffer.depthTexture = this.depthTexture; this.outputBuffer = this.inputBuffer.clone(); } @@ -217,10 +228,10 @@ export class EffectComposer { const alpha = renderer.getContext().getContextAttributes().alpha; const frameBufferType = this.inputBuffer.texture.type; - if(frameBufferType === UnsignedByteType && getOutputColorSpace(renderer) === SRGBColorSpace) { + if(frameBufferType === UnsignedByteType && renderer.outputColorSpace === SRGBColorSpace) { - setTextureColorSpace(this.inputBuffer.texture, SRGBColorSpace); - setTextureColorSpace(this.outputBuffer.texture, SRGBColorSpace); + this.inputBuffer.texture.colorSpace = SRGBColorSpace; + this.outputBuffer.texture.colorSpace = SRGBColorSpace; this.inputBuffer.dispose(); this.outputBuffer.dispose(); @@ -276,33 +287,83 @@ export class EffectComposer { /** * Creates a depth texture attachment that will be provided to all passes. * - * Note: When a shader reads from a depth texture and writes to a render target that uses the same depth texture - * attachment, the depth information will be lost. This happens even if `depthWrite` is disabled. + * To prevent errors or incorrect behavior when the same depth buffer is attached to the input and output buffers, + * a separate stable depth target is created alongside the ping-pong buffers. All passes receive the stable target's + * depth texture, which is never used as a render output and therefore cannot create a feedback loop. The stable + * texture is populated each frame via blitFramebuffer immediately before the first buffer swap. * * @private - * @return {DepthTexture} The depth texture. + * @return {DepthTexture} The stable depth texture distributed to passes. */ createDepthTexture() { - const depthTexture = this.depthTexture = new DepthTexture(); - - // Hack: Make sure the input buffer uses the depth texture. - this.inputBuffer.depthTexture = depthTexture; - this.inputBuffer.dispose(); + const inputBuffer = this.inputBuffer; + const depthTexture = new DepthTexture(); + this.depthTexture = depthTexture; - if(this.inputBuffer.stencilBuffer) { + if(inputBuffer.stencilBuffer) { depthTexture.format = DepthStencilFormat; depthTexture.type = UnsignedInt248Type; } else { - depthTexture.type = UnsignedIntType; + depthTexture.type = FloatType; } - return depthTexture; + const stableDepthTexture = depthTexture.clone(); + stableDepthTexture.name = "EffectComposer.StableDepth"; + + this.depthRenderTarget = new WebGLRenderTarget(inputBuffer.width, inputBuffer.height, { + depthBuffer: true, + stencilBuffer: inputBuffer.stencilBuffer, + depthTexture: stableDepthTexture + }); + + return stableDepthTexture; + + } + + /** + * Copies the depth buffer from the src render target into the stable depth target. + * + * @private + * @param {WebGLRenderTarget} renderTarget - The render target whose depth buffer should be copied. + */ + + blitDepthBuffer(renderTarget) { + + const renderer = this.renderer; + const depthRenderTarget = this.depthRenderTarget; + const props = renderer.properties; + const gl = renderer.getContext(); + + renderer.setRenderTarget(depthRenderTarget); + + // eslint-disable-next-line no-underscore-dangle + const srcFBO = props.get(renderTarget).__webglFramebuffer; + // eslint-disable-next-line no-underscore-dangle + const dstFBO = props.get(depthRenderTarget).__webglFramebuffer; + + const blitMask = renderTarget.stencilBuffer ? + (gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT) : + gl.DEPTH_BUFFER_BIT; + + gl.bindFramebuffer(gl.READ_FRAMEBUFFER, srcFBO); + gl.bindFramebuffer(gl.DRAW_FRAMEBUFFER, dstFBO); + + gl.blitFramebuffer( + 0, 0, renderTarget.width, renderTarget.height, + 0, 0, depthRenderTarget.width, depthRenderTarget.height, + blitMask, gl.NEAREST + ); + + gl.bindFramebuffer(gl.READ_FRAMEBUFFER, null); + gl.bindFramebuffer(gl.DRAW_FRAMEBUFFER, null); + + renderer.setRenderTarget(null); } @@ -318,10 +379,11 @@ export class EffectComposer { this.depthTexture.dispose(); this.depthTexture = null; + this.depthRenderTarget.dispose(); + this.depthRenderTarget = null; - // Update the input buffer. this.inputBuffer.depthTexture = null; - this.inputBuffer.dispose(); + this.outputBuffer.depthTexture = null; for(const pass of this.passes) { @@ -336,7 +398,7 @@ export class EffectComposer { /** * Creates a new render target. * - * @deprecated Create buffers manually via WebGLRenderTarget instead. + * @private * @param {Boolean} depthBuffer - Whether the render target should have a depth buffer. * @param {Boolean} stencilBuffer - Whether the render target should have a stencil buffer. * @param {Number} type - The frame buffer type. @@ -361,14 +423,13 @@ export class EffectComposer { if(multisampling > 0) { - renderTarget.ignoreDepthForMultisampleCopy = false; renderTarget.samples = multisampling; } - if(type === UnsignedByteType && getOutputColorSpace(renderer) === SRGBColorSpace) { + if(type === UnsignedByteType && renderer !== null && renderer.outputColorSpace === SRGBColorSpace) { - setTextureColorSpace(renderTarget.texture, SRGBColorSpace); + renderTarget.texture.colorSpace = SRGBColorSpace; } @@ -427,7 +488,7 @@ export class EffectComposer { const alpha = renderer.getContext().getContextAttributes().alpha; const frameBufferType = this.inputBuffer.texture.type; - pass.setRenderer(renderer); + pass.renderer = renderer; pass.setSize(drawingBufferSize.width, drawingBufferSize.height); pass.initialize(renderer, alpha, frameBufferType); @@ -467,17 +528,18 @@ export class EffectComposer { if(this.depthTexture === null) { - const depthTexture = this.createDepthTexture(); + const stableDepthTexture = this.createDepthTexture(); for(pass of passes) { - pass.setDepthTexture(depthTexture); + pass.setDepthTexture(stableDepthTexture); } } else { - pass.setDepthTexture(this.depthTexture); + const stableDepthTexture = this.depthRenderTarget.depthTexture; + pass.setDepthTexture(stableDepthTexture); } @@ -508,7 +570,10 @@ export class EffectComposer { if(!depthTextureRequired) { - if(pass.getDepthTexture() === this.depthTexture) { + const stableDepthTexture = this.depthRenderTarget.depthTexture; + + // Don't remove foreign depth textures. + if(pass.getDepthTexture() === stableDepthTexture) { pass.setDepthTexture(null); @@ -578,54 +643,71 @@ export class EffectComposer { let inputBuffer = this.inputBuffer; let outputBuffer = this.outputBuffer; + let buffer; let stencilTest = false; - let context, stencil, buffer; if(deltaTime === undefined) { this.timer.update(); - deltaTime = this.timer.delta; + deltaTime = this.timer.getDelta(); } for(const pass of this.passes) { - if(pass.enabled) { + if(!pass.enabled) { - pass.render(renderer, inputBuffer, outputBuffer, deltaTime, stencilTest); + continue; - if(pass.needsSwap) { + } - if(stencilTest) { + // Setup the depth texture (RenderPass renders into the inputBuffer). + inputBuffer.depthTexture = this.depthTexture; + outputBuffer.depthTexture = null; - copyPass.renderToScreen = pass.renderToScreen; - context = renderer.getContext(); - stencil = renderer.state.buffers.stencil; + pass.render(renderer, inputBuffer, outputBuffer, deltaTime, stencilTest); - // Preserve the unaffected pixels. - stencil.setFunc(context.NOTEQUAL, 1, 0xffffffff); - copyPass.render(renderer, inputBuffer, outputBuffer, deltaTime, stencilTest); - stencil.setFunc(context.EQUAL, 1, 0xffffffff); + if(pass.needsDepthBlit) { - } + // Copy depth to the stable depth texture. + if(this.depthRenderTarget !== null) { - buffer = inputBuffer; - inputBuffer = outputBuffer; - outputBuffer = buffer; + this.blitDepthBuffer(inputBuffer); } - if(pass instanceof MaskPass) { + } + + if(pass.needsSwap) { - stencilTest = true; + if(stencilTest) { - } else if(pass instanceof ClearMaskPass) { + copyPass.renderToScreen = pass.renderToScreen; + const context = renderer.getContext(); + const stencil = renderer.state.buffers.stencil; - stencilTest = false; + // Preserve the unaffected pixels. + stencil.setFunc(context.NOTEQUAL, 1, 0xffffffff); + copyPass.render(renderer, inputBuffer, outputBuffer, deltaTime, stencilTest); + stencil.setFunc(context.EQUAL, 1, 0xffffffff); } + buffer = inputBuffer; + inputBuffer = outputBuffer; + outputBuffer = buffer; + + } + + if(pass instanceof MaskPass) { + + stencilTest = true; + + } else if(pass instanceof ClearMaskPass) { + + stencilTest = false; + } } @@ -664,6 +746,12 @@ export class EffectComposer { this.inputBuffer.setSize(drawingBufferSize.width, drawingBufferSize.height); this.outputBuffer.setSize(drawingBufferSize.width, drawingBufferSize.height); + if(this.depthRenderTarget !== null) { + + this.depthRenderTarget.setSize(drawingBufferSize.width, drawingBufferSize.height); + + } + for(const pass of this.passes) { pass.setSize(drawingBufferSize.width, drawingBufferSize.height); @@ -678,10 +766,8 @@ export class EffectComposer { reset() { - const autoReset = this.timer.autoReset; this.dispose(); this.autoRenderToScreen = true; - this.timer.autoReset = autoReset; } @@ -715,6 +801,8 @@ export class EffectComposer { this.copyPass.dispose(); this.timer.dispose(); + Pass.fullscreenGeometry.dispose(); + } } diff --git a/src/core/EffectShaderData.js b/src/core/EffectShaderData.js index d7eec8dc0..f2df54392 100644 --- a/src/core/EffectShaderData.js +++ b/src/core/EffectShaderData.js @@ -1,4 +1,6 @@ -import { EffectAttribute, EffectShaderSection as Section, LinearSRGBColorSpace } from "../enums/index.js"; +import { LinearSRGBColorSpace } from "three"; +import { EffectAttribute } from "../enums/EffectAttribute.js"; +import { EffectShaderSection as Section } from "../enums/EffectShaderSection.js"; /** * A collection of shader data. diff --git a/src/core/ImmutableTimer.js b/src/core/ImmutableTimer.js index c5cf5f258..bd492677f 100644 --- a/src/core/ImmutableTimer.js +++ b/src/core/ImmutableTimer.js @@ -12,15 +12,7 @@ export class ImmutableTimer { * @type {Number} */ - get delta() { return NaN; } - - /** - * The fixed delta time in seconds. - * - * @type {Number} - */ - - get fixedDelta() { return NaN; } + getDelta() { return NaN; } /** * The elapsed time in seconds. @@ -28,6 +20,6 @@ export class ImmutableTimer { * @type {Number} */ - get elapsed() { return NaN; } + getElapsed() { return NaN; } } diff --git a/src/core/Selection.js b/src/core/Selection.js index 61834b48d..0cb6f0fd5 100644 --- a/src/core/Selection.js +++ b/src/core/Selection.js @@ -1,3 +1,7 @@ +import { IdManager } from "../utils/IdManager.js"; + +const idManager = /* @__PURE__ */ new IdManager(2); + /** * An object selection. * @@ -10,13 +14,19 @@ export class Selection extends Set { * Constructs a new selection. * * @param {Iterable} [iterable] - A collection of objects that should be added to this selection. - * @param {Number} [layer=10] - A dedicated render layer for selected objects. + * @param {Number} [layer] - A dedicated render layer for selected objects. Range is `[2, 31]`. Starts at 2 if omitted. */ - constructor(iterable, layer = 10) { + constructor(iterable, layer = idManager.getNextId()) { super(); + /** + * Controls whether objects that are added to this selection should be removed from all other layers. + */ + + this.exclusive = false; + /** * The current render layer for selected objects. * @@ -24,15 +34,15 @@ export class Selection extends Set { * @private */ - this.l = layer; + this._layer = layer; - /** - * Controls whether objects that are added to this selection should be removed from all other layers. - * - * @type {Boolean} - */ + if(this._layer < 1 || this._layer > 31) { - this.exclusive = false; + console.warn("Layer out of range, resetting to 2"); + idManager.reset(2); + this._layer = idManager.getNextId(); + + } if(iterable !== undefined) { @@ -50,13 +60,13 @@ export class Selection extends Set { get layer() { - return this.l; + return this._layer; } set layer(value) { - const currentLayer = this.l; + const currentLayer = this._layer; for(const object of this) { @@ -65,14 +75,14 @@ export class Selection extends Set { } - this.l = value; + this._layer = value; } /** * Returns the current render layer for selected objects. * - * The default layer is 10. If this collides with your own custom layers, please change it before rendering! + * The default layer is 2. If this collides with your own custom layers, please change it before rendering! * * @deprecated Use layer instead. * @return {Number} The layer. diff --git a/src/core/Timer.js b/src/core/Timer.js index 95cb9fc9b..f149c13b3 100644 --- a/src/core/Timer.js +++ b/src/core/Timer.js @@ -6,7 +6,7 @@ const SECONDS_TO_MILLISECONDS = 1e3; * * Original implementation by Michael Herzog (Mugen87). * - * @experimental Temporary substitute for {@link https://github.com/mrdoob/three.js/pull/17912} + * @deprecated Use `three/addons/misc/Timer.js` instead. * @implements {ImmutableTimer} * @implements {EventListenerObject} * @implements {Disposable} @@ -200,6 +200,18 @@ export class Timer { } + getDelta() { + + return this.delta; + + } + + getElapsed() { + + return this.elapsed; + + } + handleEvent(e) { if(!document.hidden) { diff --git a/src/effects/ASCIIEffect.js b/src/effects/ASCIIEffect.js new file mode 100644 index 000000000..7d1a91424 --- /dev/null +++ b/src/effects/ASCIIEffect.js @@ -0,0 +1,238 @@ +import { Color, Uniform, Vector2, Vector4 } from "three"; +import { ASCIITexture } from "../textures/ASCIITexture.js"; +import { Effect } from "./Effect.js"; + +import fragmentShader from "./glsl/ascii.frag"; + +/** + * An ASCII effect. + * + * Warning: This effect cannot be merged with convolution effects. + */ + +export class ASCIIEffect extends Effect { + + /** + * Constructs a new ASCII effect. + * + * @param {Object} [options] - The options. + * @param {ASCIITexture} [options.asciiTexture] - An ASCII character lookup texture. + * @param {Number} [options.cellSize=16] - The cell size. It's recommended to use even numbers. + * @param {Number} [options.color=null] - A color to use instead of the scene colors. + * @param {Boolean} [options.inverted=false] - Inverts the effect. + */ + + constructor({ + asciiTexture = new ASCIITexture(), + cellSize = 16, + color = null, + inverted = false + } = {}) { + + super("ASCIIEffect", fragmentShader, { + uniforms: new Map([ + ["asciiTexture", new Uniform(null)], + ["cellCount", new Uniform(new Vector4())], + ["color", new Uniform(new Color())] + ]) + }); + + /** + * @see {@link cellSize} + * @type {Number} + * @private + */ + + this._cellSize = -1; + + /** + * The current resolution. + * + * @type {Vector2} + * @private + */ + + this.resolution = new Vector2(); + + this.asciiTexture = asciiTexture; + this.cellSize = cellSize; + this.color = color; + this.inverted = inverted; + + } + + /** + * The current ASCII lookup texture. + * + * @type {ASCIITexture} + */ + + get asciiTexture() { + + return this.uniforms.get("asciiTexture").value; + + } + + set asciiTexture(value) { + + const currentTexture = this.uniforms.get("asciiTexture").value; + this.uniforms.get("asciiTexture").value = value; + + if(currentTexture !== null && currentTexture !== value) { + + currentTexture.dispose(); + + } + + if(value !== null) { + + const cellCount = value.cellCount; + + this.defines.set("CHAR_COUNT_MINUS_ONE", (value.characterCount - 1).toFixed(1)); + this.defines.set("TEX_CELL_COUNT", cellCount.toFixed(1)); + this.defines.set("INV_TEX_CELL_COUNT", (1.0 / cellCount).toFixed(9)); + + this.setChanged(); + + } + + } + + /** + * A color that overrides the scene colors. + * + * @type {Color | String | Number | null} + */ + + get color() { + + return this.uniforms.get("color").value; + + } + + set color(value) { + + if(value !== null) { + + this.uniforms.get("color").value.set(value); + + } + + if(this.defines.has("USE_COLOR") && value === null) { + + this.defines.delete("USE_COLOR"); + this.setChanged(); + + } else if(!this.defines.has("USE_COLOR") && value !== null) { + + this.defines.set("USE_COLOR", "1"); + this.setChanged(); + + } + + } + + /** + * Controls whether the effect should be inverted. + * + * @type {Boolean} + */ + + get inverted() { + + return this.defines.has("INVERTED"); + + } + + set inverted(value) { + + if(this.inverted !== value) { + + if(value) { + + this.defines.set("INVERTED", "1"); + + } else { + + this.defines.delete("INVERTED"); + + } + + this.setChanged(); + + } + + } + + /** + * The cell size. + * + * @type {Number} + */ + + get cellSize() { + + return this._cellSize; + + } + + set cellSize(value) { + + if(this._cellSize !== value) { + + this._cellSize = value; + this.updateCellCount(); + + } + + } + + /** + * Updates the cell count uniform. + * + * @private + */ + + updateCellCount() { + + const cellCount = this.uniforms.get("cellCount").value; + const resolution = this.resolution; + + cellCount.x = resolution.width / this.cellSize; + cellCount.y = resolution.height / this.cellSize; + cellCount.z = 1.0 / cellCount.x; + cellCount.w = 1.0 / cellCount.y; + + } + + /** + * Updates the size of this pass. + * + * @param {Number} width - The width. + * @param {Number} height - The height. + */ + + setSize(width, height) { + + this.resolution.set(width, height); + this.updateCellCount(); + + } + + /** + * Deletes internal render targets and textures. + */ + + dispose() { + + if(this.asciiTexture !== null) { + + this.asciiTexture.dispose(); + + } + + super.dispose(); + + } + +} diff --git a/src/effects/BloomEffect.js b/src/effects/BloomEffect.js index 55e429d44..44b246292 100644 --- a/src/effects/BloomEffect.js +++ b/src/effects/BloomEffect.js @@ -1,8 +1,10 @@ -import { Uniform, WebGLRenderTarget } from "three"; -import { Resolution } from "../core/index.js"; -import { BlendFunction, KernelSize, SRGBColorSpace } from "../enums/index.js"; -import { KawaseBlurPass, LuminancePass, MipmapBlurPass } from "../passes/index.js"; -import { getOutputColorSpace, setTextureColorSpace } from "../utils/index.js"; +import { SRGBColorSpace, Uniform, WebGLRenderTarget } from "three"; +import { Resolution } from "../core/Resolution.js"; +import { BlendFunction } from "../enums/BlendFunction.js"; +import { KernelSize } from "../enums/KernelSize.js"; +import { KawaseBlurPass } from "../passes/KawaseBlurPass.js"; +import { LuminancePass } from "../passes/LuminancePass.js"; +import { MipmapBlurPass } from "../passes/MipmapBlurPass.js"; import { Effect } from "./Effect.js"; import fragmentShader from "./glsl/bloom.frag"; @@ -21,9 +23,9 @@ export class BloomEffect extends Effect { * * @param {Object} [options] - The options. * @param {BlendFunction} [options.blendFunction=BlendFunction.SCREEN] - The blend function of this effect. - * @param {Number} [options.luminanceThreshold=0.9] - The luminance threshold. Raise this value to mask out darker elements in the scene. - * @param {Number} [options.luminanceSmoothing=0.025] - Controls the smoothness of the luminance threshold. - * @param {Boolean} [options.mipmapBlur=false] - Enables or disables mipmap blur. + * @param {Number} [options.luminanceThreshold=1.0] - The luminance threshold. Raise this value to mask out darker elements in the scene. + * @param {Number} [options.luminanceSmoothing=0.03] - Controls the smoothness of the luminance threshold. + * @param {Boolean} [options.mipmapBlur=true] - Enables or disables mipmap blur. * @param {Number} [options.intensity=1.0] - The bloom intensity. * @param {Number} [options.radius=0.85] - The blur radius. Only applies to mipmap blur. * @param {Number} [options.levels=8] - The amount of MIP levels. Only applies to mipmap blur. @@ -37,9 +39,9 @@ export class BloomEffect extends Effect { constructor({ blendFunction = BlendFunction.SCREEN, - luminanceThreshold = 0.9, - luminanceSmoothing = 0.025, - mipmapBlur = false, + luminanceThreshold = 1.0, + luminanceSmoothing = 0.03, + mipmapBlur = true, intensity = 1.0, radius = 0.85, levels = 8, @@ -74,6 +76,7 @@ export class BloomEffect extends Effect { * * @type {KawaseBlurPass} * @readonly + * @deprecated Use mipmapBlurPass instead. */ this.blurPass = new KawaseBlurPass({ kernelSize }); @@ -95,7 +98,7 @@ export class BloomEffect extends Effect { * A mipmap blur pass. * * @type {MipmapBlurPass} - * @private + * @readonly */ this.mipmapBlurPass = new MipmapBlurPass(); @@ -110,7 +113,6 @@ export class BloomEffect extends Effect { * * @type {Resolution} * @readonly - * @deprecated */ const resolution = this.resolution = new Resolution(this, resolutionX, resolutionY, resolutionScale); @@ -452,9 +454,9 @@ export class BloomEffect extends Effect { this.renderTarget.texture.type = frameBufferType; - if(getOutputColorSpace(renderer) === SRGBColorSpace) { + if(renderer !== null && renderer.outputColorSpace === SRGBColorSpace) { - setTextureColorSpace(this.renderTarget.texture, SRGBColorSpace); + this.renderTarget.texture.colorSpace = SRGBColorSpace; } diff --git a/src/effects/BokehEffect.js b/src/effects/BokehEffect.js index da1f7d7dd..9ea5aa555 100644 --- a/src/effects/BokehEffect.js +++ b/src/effects/BokehEffect.js @@ -1,5 +1,5 @@ import { Uniform } from "three"; -import { EffectAttribute } from "../enums/index.js"; +import { EffectAttribute } from "../enums/EffectAttribute.js"; import { Effect } from "./Effect.js"; import fragmentShader from "./glsl/bokeh.frag"; diff --git a/src/effects/BrightnessContrastEffect.js b/src/effects/BrightnessContrastEffect.js index 096bd396b..12f0b33d7 100644 --- a/src/effects/BrightnessContrastEffect.js +++ b/src/effects/BrightnessContrastEffect.js @@ -1,5 +1,5 @@ -import { Uniform } from "three"; -import { BlendFunction, SRGBColorSpace } from "../enums/index.js"; +import { SRGBColorSpace, Uniform } from "three"; +import { BlendFunction } from "../enums/BlendFunction.js"; import { Effect } from "./Effect.js"; import fragmentShader from "./glsl/brightness-contrast.frag"; diff --git a/src/effects/ChromaticAberrationEffect.js b/src/effects/ChromaticAberrationEffect.js index 4c19a07dd..3c64c6dde 100644 --- a/src/effects/ChromaticAberrationEffect.js +++ b/src/effects/ChromaticAberrationEffect.js @@ -1,5 +1,5 @@ import { Uniform, Vector2 } from "three"; -import { EffectAttribute } from "../enums/index.js"; +import { EffectAttribute } from "../enums/EffectAttribute.js"; import { Effect } from "./Effect.js"; import fragmentShader from "./glsl/chromatic-aberration.frag"; diff --git a/src/effects/DepthEffect.js b/src/effects/DepthEffect.js index 2f1041a97..6a0c7bc7e 100644 --- a/src/effects/DepthEffect.js +++ b/src/effects/DepthEffect.js @@ -1,4 +1,5 @@ -import { BlendFunction, EffectAttribute } from "../enums/index.js"; +import { BlendFunction } from "../enums/BlendFunction.js"; +import { EffectAttribute } from "../enums/EffectAttribute.js"; import { Effect } from "./Effect.js"; import fragmentShader from "./glsl/depth.frag"; diff --git a/src/effects/DepthOfFieldEffect.js b/src/effects/DepthOfFieldEffect.js index 6532e9d35..ff6a6ee84 100644 --- a/src/effects/DepthOfFieldEffect.js +++ b/src/effects/DepthOfFieldEffect.js @@ -1,13 +1,20 @@ -import { BasicDepthPacking, Uniform, UnsignedByteType, WebGLRenderTarget } from "three"; -import { Resolution } from "../core/index.js"; -import { ColorChannel, EffectAttribute, KernelSize, MaskFunction, SRGBColorSpace } from "../enums/index.js"; -import { BokehMaterial, CircleOfConfusionMaterial, MaskMaterial } from "../materials/index.js"; -import { KawaseBlurPass, ShaderPass } from "../passes/index.js"; -import { getOutputColorSpace, setTextureColorSpace, viewZToOrthographicDepth } from "../utils/index.js"; +import { BasicDepthPacking, SRGBColorSpace, Uniform, UnsignedByteType, Vector3, WebGLRenderTarget } from "three"; +import { Resolution } from "../core/Resolution.js"; +import { ColorChannel } from "../enums/ColorChannel.js"; +import { EffectAttribute } from "../enums/EffectAttribute.js"; +import { KernelSize } from "../enums/KernelSize.js"; +import { MaskFunction } from "../enums/MaskFunction.js"; +import { BokehMaterial } from "../materials/BokehMaterial.js"; +import { CircleOfConfusionMaterial } from "../materials/CircleOfConfusionMaterial.js"; +import { MaskMaterial } from "../materials/MaskMaterial.js"; +import { KawaseBlurPass } from "../passes/KawaseBlurPass.js"; +import { ShaderPass } from "../passes/ShaderPass.js"; import { Effect } from "./Effect.js"; import fragmentShader from "./glsl/depth-of-field.frag"; +const v = /* @__PURE__ */ new Vector3(); + /** * A depth of field effect. * @@ -24,11 +31,11 @@ export class DepthOfFieldEffect extends Effect { * @param {Camera} camera - The main camera. * @param {Object} [options] - The options. * @param {BlendFunction} [options.blendFunction] - The blend function of this effect. - * @param {Number} [options.worldFocusDistance] - The focus distance in world units. - * @param {Number} [options.worldFocusRange] - The focus distance in world units. - * @param {Number} [options.focusDistance=0.0] - The normalized focus distance. Range is [0.0, 1.0]. - * @param {Number} [options.focusRange=0.1] - The focus range. Range is [0.0, 1.0]. - * @param {Number} [options.focalLength=0.1] - Deprecated. + * @param {Number} [options.worldFocusDistance] - Deprecated. Use focusRange instead. + * @param {Number} [options.worldFocusRange] - Deprecated. Use focusRange instead. + * @param {Number} [options.focusDistance=3.0] - The focus distance in world units. + * @param {Number} [options.focusRange=2.0] - The focus range in world units. + * @param {Number} [options.focalLength] - Deprecated. Use focusRange instead. * @param {Number} [options.bokehScale=1.0] - The scale of the bokeh blur. * @param {Number} [options.resolutionScale=0.5] - The resolution scale. * @param {Number} [options.resolutionX=Resolution.AUTO_SIZE] - The horizontal resolution. @@ -41,15 +48,15 @@ export class DepthOfFieldEffect extends Effect { blendFunction, worldFocusDistance, worldFocusRange, - focusDistance = 0.0, - focalLength = 0.1, - focusRange = focalLength, + focalLength, + focusDistance = worldFocusDistance || 3.0, + focusRange = worldFocusRange || focalLength || 2.0, bokehScale = 1.0, - resolutionScale = 1.0, - width = Resolution.AUTO_SIZE, - height = Resolution.AUTO_SIZE, - resolutionX = width, - resolutionY = height + resolutionScale = 0.5, + width, + height, + resolutionX = width || Resolution.AUTO_SIZE, + resolutionY = height || Resolution.AUTO_SIZE } = {}) { super("DepthOfFieldEffect", fragmentShader, { @@ -152,18 +159,6 @@ export class DepthOfFieldEffect extends Effect { cocMaterial.focusDistance = focusDistance; cocMaterial.focusRange = focusRange; - if(worldFocusDistance !== undefined) { - - cocMaterial.worldFocusDistance = worldFocusDistance; - - } - - if(worldFocusRange !== undefined) { - - cocMaterial.worldFocusRange = worldFocusRange; - - } - /** * This pass blurs the foreground CoC buffer to soften edges. * @@ -433,14 +428,12 @@ export class DepthOfFieldEffect extends Effect { * Calculates the focus distance from the camera to the given position. * * @param {Vector3} target - The target. - * @return {Number} The normalized focus distance. + * @return {Number} The focus distance in world units. */ calculateFocusDistance(target) { - const camera = this.camera; - const distance = camera.position.distanceTo(target); - return viewZToOrthographicDepth(-distance, camera.near, camera.far); + return this.camera.getWorldPosition(v).distanceTo(target); } @@ -565,12 +558,12 @@ export class DepthOfFieldEffect extends Effect { this.renderTargetFar.texture.type = frameBufferType; this.renderTargetMasked.texture.type = frameBufferType; - if(getOutputColorSpace(renderer) === SRGBColorSpace) { + if(renderer !== null && renderer.outputColorSpace === SRGBColorSpace) { - setTextureColorSpace(this.renderTarget.texture, SRGBColorSpace); - setTextureColorSpace(this.renderTargetNear.texture, SRGBColorSpace); - setTextureColorSpace(this.renderTargetFar.texture, SRGBColorSpace); - setTextureColorSpace(this.renderTargetMasked.texture, SRGBColorSpace); + this.renderTarget.texture.colorSpace = SRGBColorSpace; + this.renderTargetNear.texture.colorSpace = SRGBColorSpace; + this.renderTargetFar.texture.colorSpace = SRGBColorSpace; + this.renderTargetMasked.texture.colorSpace = SRGBColorSpace; } diff --git a/src/effects/Effect.js b/src/effects/Effect.js index f0b1bd20b..f133f07b9 100644 --- a/src/effects/Effect.js +++ b/src/effects/Effect.js @@ -1,7 +1,17 @@ -import { BasicDepthPacking, EventDispatcher, Material, Texture, WebGLRenderTarget } from "three"; -import { BlendFunction, EffectAttribute, LinearSRGBColorSpace, NoColorSpace } from "../enums/index.js"; -import { Pass } from "../passes/index.js"; -import { BlendMode } from "./blending/index.js"; +import { + BasicDepthPacking, + EventDispatcher, + LinearSRGBColorSpace, + Material, + NoColorSpace, + Texture, + WebGLRenderTarget +} from "three"; + +import { BlendFunction } from "../enums/BlendFunction.js"; +import { EffectAttribute } from "../enums/EffectAttribute.js"; +import { Pass } from "../passes/Pass.js"; +import { BlendMode } from "./blending/BlendMode.js"; /** * An abstract effect. diff --git a/src/effects/FXAAEffect.js b/src/effects/FXAAEffect.js index e936994fa..7c434634c 100644 --- a/src/effects/FXAAEffect.js +++ b/src/effects/FXAAEffect.js @@ -1,4 +1,4 @@ -import { BlendFunction } from "../enums/index.js"; +import { BlendFunction } from "../enums/BlendFunction.js"; import { Effect } from "./Effect.js"; import fragmentShader from "./glsl/fxaa.frag"; diff --git a/src/effects/GammaCorrectionEffect.js b/src/effects/GammaCorrectionEffect.js index acaded899..4fc09b995 100644 --- a/src/effects/GammaCorrectionEffect.js +++ b/src/effects/GammaCorrectionEffect.js @@ -1,5 +1,5 @@ import { Uniform } from "three"; -import { BlendFunction } from "../enums/index.js"; +import { BlendFunction } from "../enums/BlendFunction.js"; import { Effect } from "./Effect.js"; import fragmentShader from "./glsl/gamma-correction.frag"; diff --git a/src/effects/GlitchEffect.js b/src/effects/GlitchEffect.js index 7fbd4636c..40846f6cb 100644 --- a/src/effects/GlitchEffect.js +++ b/src/effects/GlitchEffect.js @@ -1,6 +1,6 @@ import { NearestFilter, RepeatWrapping, RGBAFormat, Uniform, Vector2 } from "three"; -import { GlitchMode } from "../enums/index.js"; -import { NoiseTexture } from "../textures/index.js"; +import { GlitchMode } from "../enums/GlitchMode.js"; +import { NoiseTexture } from "../textures/NoiseTexture.js"; import { Effect } from "./Effect.js"; import fragmentShader from "./glsl/glitch.frag"; diff --git a/src/effects/GodRaysEffect.js b/src/effects/GodRaysEffect.js index b71c3865a..ab05820d5 100644 --- a/src/effects/GodRaysEffect.js +++ b/src/effects/GodRaysEffect.js @@ -1,20 +1,25 @@ import { BasicDepthPacking, - Color, DepthTexture, Matrix4, Scene, + SRGBColorSpace, Uniform, Vector2, Vector3, + Vector4, WebGLRenderTarget } from "three"; -import { Resolution } from "../core/index.js"; -import { BlendFunction, EffectAttribute, KernelSize, SRGBColorSpace } from "../enums/index.js"; -import { DepthMaskMaterial, GodRaysMaterial } from "../materials/index.js"; -import { KawaseBlurPass, ClearPass, RenderPass, ShaderPass } from "../passes/index.js"; -import { getOutputColorSpace, setTextureColorSpace } from "../utils/index.js"; +import { Resolution } from "../core/Resolution.js"; +import { BlendFunction } from "../enums/BlendFunction.js"; +import { EffectAttribute } from "../enums/EffectAttribute.js"; +import { KernelSize } from "../enums/KernelSize.js"; +import { GodRaysMaterial } from "../materials/GodRaysMaterial.js"; +import { CopyPass } from "../passes/CopyPass.js"; +import { KawaseBlurPass } from "../passes/KawaseBlurPass.js"; +import { RenderPass } from "../passes/RenderPass.js"; +import { ShaderPass } from "../passes/ShaderPass.js"; import { Effect } from "./Effect.js"; import fragmentShader from "./glsl/god-rays.frag"; @@ -152,17 +157,7 @@ export class GodRaysEffect extends Effect { */ this.renderPassLight = new RenderPass(this.lightScene, camera); - this.renderPassLight.clearPass.overrideClearColor = new Color(0x000000); - - /** - * A clear pass. - * - * @type {ClearPass} - * @private - */ - - this.clearPass = new ClearPass(true, false, false); - this.clearPass.overrideClearColor = new Color(0x000000); + this.renderPassLight.clearPass.enabled = false; /** * A blur pass that reduces aliasing artifacts to make the light softer. @@ -177,16 +172,14 @@ export class GodRaysEffect extends Effect { this.blurPass.enabled = blur; /** - * A depth mask pass. + * A copy pass. * - * @type {ShaderPass} + * @type {CopyPass} * @private */ - this.depthMaskPass = new ShaderPass(new DepthMaskMaterial()); - const depthMaskMaterial = this.depthMaskMaterial; - depthMaskMaterial.depthBuffer1 = this.renderTargetLight.depthTexture; - depthMaskMaterial.copyCameraSettings(camera); + this.copyPass = new CopyPass(this.renderTargetLight); + this.copyPass.fullscreenMaterial.channelWeights = new Vector4(0.0, 0.0, 0.0, 1.0); /** * A god rays blur pass. @@ -220,7 +213,6 @@ export class GodRaysEffect extends Effect { this.camera = value; this.renderPassLight.mainCamera = value; - this.depthMaskMaterial.copyCameraSettings(value); } @@ -287,19 +279,6 @@ export class GodRaysEffect extends Effect { } - /** - * The depth mask material. - * - * @type {DepthMaskMaterial} - * @private - */ - - get depthMaskMaterial() { - - return this.depthMaskPass.fullscreenMaterial; - - } - /** * The internal god rays material. * @@ -496,8 +475,8 @@ export class GodRaysEffect extends Effect { setDepthTexture(depthTexture, depthPacking = BasicDepthPacking) { - this.depthMaskPass.fullscreenMaterial.depthBuffer0 = depthTexture; - this.depthMaskPass.fullscreenMaterial.depthPacking0 = depthPacking; + this.copyPass.fullscreenMaterial.depthBuffer = depthTexture; + this.copyPass.fullscreenMaterial.depthPacking = depthPacking; } @@ -541,9 +520,8 @@ export class GodRaysEffect extends Effect { // Render the light source and mask it based on depth. this.lightScene.add(lightSource); + this.copyPass.render(renderer, inputBuffer); this.renderPassLight.render(renderer, renderTargetLight); - this.clearPass.render(renderer, renderTargetA); - this.depthMaskPass.render(renderer, renderTargetLight, renderTargetA); // Restore the original values. lightSource.material.depthWrite = false; @@ -570,15 +548,18 @@ export class GodRaysEffect extends Effect { Math.min(Math.max((v.y + 1.0) * 0.5, -1.0), 2.0) ); + let renderTarget = renderTargetLight; + if(this.blurPass.enabled) { // Blur the masked scene to reduce artifacts. - this.blurPass.render(renderer, renderTargetA, renderTargetA); + this.blurPass.render(renderer, renderTarget, renderTargetA); + renderTarget = renderTargetA; } // Blur the masked scene along radial lines towards the light source. - this.godRaysPass.render(renderer, renderTargetA, this.renderTargetB); + this.godRaysPass.render(renderer, renderTarget, this.renderTargetB); } @@ -595,9 +576,9 @@ export class GodRaysEffect extends Effect { resolution.setBaseSize(width, height); const w = resolution.width, h = resolution.height; + this.renderTargetLight.setSize(width, height); this.renderTargetA.setSize(w, h); this.renderTargetB.setSize(w, h); - this.renderTargetLight.setSize(w, h); this.blurPass.resolution.copy(resolution); } @@ -614,7 +595,7 @@ export class GodRaysEffect extends Effect { this.blurPass.initialize(renderer, alpha, frameBufferType); this.renderPassLight.initialize(renderer, alpha, frameBufferType); - this.depthMaskPass.initialize(renderer, alpha, frameBufferType); + this.copyPass.initialize(renderer, alpha, frameBufferType); this.godRaysPass.initialize(renderer, alpha, frameBufferType); if(frameBufferType !== undefined) { @@ -623,11 +604,11 @@ export class GodRaysEffect extends Effect { this.renderTargetB.texture.type = frameBufferType; this.renderTargetLight.texture.type = frameBufferType; - if(getOutputColorSpace(renderer) === SRGBColorSpace) { + if(renderer !== null && renderer.outputColorSpace === SRGBColorSpace) { - setTextureColorSpace(this.renderTargetA.texture, SRGBColorSpace); - setTextureColorSpace(this.renderTargetB.texture, SRGBColorSpace); - setTextureColorSpace(this.renderTargetLight.texture, SRGBColorSpace); + this.renderTargetA.texture.colorSpace = SRGBColorSpace; + this.renderTargetB.texture.colorSpace = SRGBColorSpace; + this.renderTargetLight.texture.colorSpace = SRGBColorSpace; } diff --git a/src/effects/GridEffect.js b/src/effects/GridEffect.js index b017200d7..63e0e74a6 100644 --- a/src/effects/GridEffect.js +++ b/src/effects/GridEffect.js @@ -1,5 +1,5 @@ import { Uniform, Vector2 } from "three"; -import { BlendFunction } from "../enums/index.js"; +import { BlendFunction } from "../enums/BlendFunction.js"; import { Effect } from "./Effect.js"; import fragmentShader from "./glsl/grid.frag"; diff --git a/src/effects/HueSaturationEffect.js b/src/effects/HueSaturationEffect.js index 7f19dcc4a..b0954f993 100644 --- a/src/effects/HueSaturationEffect.js +++ b/src/effects/HueSaturationEffect.js @@ -1,5 +1,5 @@ import { Uniform, Vector3 } from "three"; -import { BlendFunction } from "../enums/index.js"; +import { BlendFunction } from "../enums/BlendFunction.js"; import { Effect } from "./Effect.js"; import fragmentShader from "./glsl/hue-saturation.frag"; diff --git a/src/effects/LUT1DEffect.js b/src/effects/LUT1DEffect.js index 9853d5f98..2ca131ab5 100644 --- a/src/effects/LUT1DEffect.js +++ b/src/effects/LUT1DEffect.js @@ -1,5 +1,5 @@ import { FloatType, HalfFloatType, Uniform } from "three"; -import { BlendFunction } from "../enums/index.js"; +import { BlendFunction } from "../enums/BlendFunction.js"; import { Effect } from "./Effect.js"; import fragmentShader from "./glsl/lut-1d.frag"; diff --git a/src/effects/LUT3DEffect.js b/src/effects/LUT3DEffect.js index 4063e7394..853205742 100644 --- a/src/effects/LUT3DEffect.js +++ b/src/effects/LUT3DEffect.js @@ -4,14 +4,13 @@ import { HalfFloatType, LinearFilter, NearestFilter, - sRGBEncoding, + SRGBColorSpace, Uniform, Vector3 } from "three"; -import { BlendFunction } from "../enums/index.js"; -import { LookupTexture } from "../textures/index.js"; -import { encodingToColorSpace } from "../utils/index.js"; +import { BlendFunction } from "../enums/BlendFunction.js"; +import { LookupTexture } from "../textures/lut/LookupTexture.js"; import { Effect } from "./Effect.js"; import fragmentShader from "./glsl/lut-3d.frag"; @@ -41,15 +40,13 @@ export class LUT3DEffect extends Effect { * @param {Object} [options] - The options. * @param {BlendFunction} [options.blendFunction=BlendFunction.SRC] - The blend function of this effect. * @param {Boolean} [options.tetrahedralInterpolation=false] - Enables or disables tetrahedral interpolation. - * @param {TextureEncoding} [options.inputEncoding=sRGBEncoding] - Deprecated. * @param {ColorSpace} [options.inputColorSpace=SRGBColorSpace] - The input color space. */ constructor(lut, { blendFunction = BlendFunction.SRC, tetrahedralInterpolation = false, - inputEncoding = sRGBEncoding, - inputColorSpace + inputColorSpace = SRGBColorSpace } = {}) { super("LUT3DEffect", fragmentShader, { @@ -64,71 +61,11 @@ export class LUT3DEffect extends Effect { }); this.tetrahedralInterpolation = tetrahedralInterpolation; - this.inputColorSpace = inputColorSpace || encodingToColorSpace.get(inputEncoding); + this.inputColorSpace = inputColorSpace; this.lut = lut; } - /** - * The input encoding. Default is `sRGBEncoding`. - * - * Set this to `LinearEncoding` if your LUT expects linear color input. - * - * @deprecated Use inputColorSpace instead. - * @type {TextureEncoding} - */ - - get inputEncoding() { - - return this.inputColorSpace; - - } - - set inputEncoding(value) { - - this.inputColorSpace = value; - - } - - /** - * Returns the input encoding. - * - * @deprecated Use inputColorSpace instead. - * @return {TextureEncoding} The encoding. - */ - - getInputEncoding() { - - return this.inputColorSpace; - - } - - /** - * Sets the input encoding. - * - * @deprecated Use inputColorSpace instead. - * @param {TextureEncoding} value - The encoding. - */ - - setInputEncoding(value) { - - this.inputColorSpace = value; - - } - - /** - * Returns the output encoding. - * - * @deprecated Use outputColorSpace instead. - * @return {TextureEncoding} The encoding. - */ - - getOutputEncoding() { - - return this.outputColorSpace; - - } - /** * The LUT. * @@ -314,12 +251,7 @@ export class LUT3DEffect extends Effect { } - // TODO Added for compatibility with r138. Remove later. - if(lut.source === undefined) { - - lut.needsUpdate = true; - - } + lut.needsUpdate = true; } diff --git a/src/effects/OutlineEffect.js b/src/effects/OutlineEffect.js index a226dd101..a7fb667c4 100644 --- a/src/effects/OutlineEffect.js +++ b/src/effects/OutlineEffect.js @@ -1,8 +1,15 @@ import { Color, RepeatWrapping, Uniform, UnsignedByteType, WebGLRenderTarget } from "three"; -import { Resolution, Selection } from "../core/index.js"; -import { BlendFunction, KernelSize } from "../enums/index.js"; -import { DepthComparisonMaterial, OutlineMaterial } from "../materials/index.js"; -import { KawaseBlurPass, ClearPass, DepthPass, RenderPass, ShaderPass } from "../passes/index.js"; +import { Resolution } from "../core/Resolution.js"; +import { Selection } from "../core/Selection.js"; +import { BlendFunction } from "../enums/BlendFunction.js"; +import { KernelSize } from "../enums/KernelSize.js"; +import { DepthComparisonMaterial } from "../materials/DepthComparisonMaterial.js"; +import { OutlineMaterial } from "../materials/OutlineMaterial.js"; +import { KawaseBlurPass } from "../passes/KawaseBlurPass.js"; +import { ClearPass } from "../passes/ClearPass.js"; +import { DepthPass } from "../passes/DepthPass.js"; +import { RenderPass } from "../passes/RenderPass.js"; +import { ShaderPass } from "../passes/ShaderPass.js"; import { Effect } from "./Effect.js"; import fragmentShader from "./glsl/outline.frag"; @@ -207,13 +214,10 @@ export class OutlineEffect extends Effect { /** * A selection of objects that will be outlined. * - * The default layer of this selection is 10. - * * @type {Selection} */ this.selection = new Selection(); - this.selection.layer = 10; /** * The pulse speed. Set to 0 to disable. diff --git a/src/effects/RealisticBokehEffect.js b/src/effects/RealisticBokehEffect.js index 17eb3cb02..04b16b7ca 100644 --- a/src/effects/RealisticBokehEffect.js +++ b/src/effects/RealisticBokehEffect.js @@ -1,5 +1,5 @@ import { Uniform, Vector4 } from "three"; -import { EffectAttribute } from "../enums/index.js"; +import { EffectAttribute } from "../enums/EffectAttribute.js"; import { Effect } from "./Effect.js"; import fragmentShader from "./glsl/realistic-bokeh.frag"; diff --git a/src/effects/SMAAEffect.js b/src/effects/SMAAEffect.js index 3c518903b..1567d6f42 100644 --- a/src/effects/SMAAEffect.js +++ b/src/effects/SMAAEffect.js @@ -9,9 +9,15 @@ import { WebGLRenderTarget } from "three"; -import { BlendFunction, EdgeDetectionMode, EffectAttribute, PredicationMode, SMAAPreset } from "../enums/index.js"; -import { EdgeDetectionMaterial, SMAAWeightsMaterial } from "../materials/index.js"; -import { ClearPass, ShaderPass } from "../passes/index.js"; +import { BlendFunction } from "../enums/BlendFunction.js"; +import { EdgeDetectionMode } from "../enums/EdgeDetectionMode.js"; +import { EffectAttribute } from "../enums/EffectAttribute.js"; +import { PredicationMode } from "../enums/PredicationMode.js"; +import { SMAAPreset } from "../enums/SMAAPreset.js"; +import { EdgeDetectionMaterial } from "../materials/EdgeDetectionMaterial.js"; +import { SMAAWeightsMaterial } from "../materials/SMAAWeightsMaterial.js"; +import { ClearPass } from "../passes/ClearPass.js"; +import { ShaderPass } from "../passes/ShaderPass.js"; import { Effect } from "./Effect.js"; import searchImageDataURL from "../textures/smaa/searchImageDataURL.js"; diff --git a/src/effects/SSAOEffect.js b/src/effects/SSAOEffect.js index 5006cbbd2..b50a27282 100644 --- a/src/effects/SSAOEffect.js +++ b/src/effects/SSAOEffect.js @@ -1,9 +1,11 @@ import { BasicDepthPacking, Color, RepeatWrapping, RGBAFormat, Uniform, WebGLRenderTarget } from "three"; -import { Resolution } from "../core/index.js"; -import { BlendFunction, EffectAttribute } from "../enums/index.js"; -import { NoiseTexture } from "../textures/index.js"; -import { SSAOMaterial } from "../materials/index.js"; -import { DepthDownsamplingPass, ShaderPass } from "../passes/index.js"; +import { Resolution } from "../core/Resolution.js"; +import { BlendFunction } from "../enums/BlendFunction.js"; +import { EffectAttribute } from "../enums/EffectAttribute.js"; +import { NoiseTexture } from "../textures/NoiseTexture.js"; +import { SSAOMaterial } from "../materials/SSAOMaterial.js"; +import { DepthDownsamplingPass } from "../passes/DepthDownsamplingPass.js"; +import { ShaderPass } from "../passes/ShaderPass.js"; import { Effect } from "./Effect.js"; import fragmentShader from "./glsl/ssao.frag"; diff --git a/src/effects/ScanlineEffect.js b/src/effects/ScanlineEffect.js index 133745664..e1b25f4c5 100644 --- a/src/effects/ScanlineEffect.js +++ b/src/effects/ScanlineEffect.js @@ -1,5 +1,5 @@ import { Uniform, Vector2 } from "three"; -import { BlendFunction } from "../enums/index.js"; +import { BlendFunction } from "../enums/BlendFunction.js"; import { Effect } from "./Effect.js"; import fragmentShader from "./glsl/scanlines.frag"; @@ -33,7 +33,7 @@ export class ScanlineEffect extends Effect { }); /** - * The original resolution. + * The current resolution. * * @type {Vector2} * @private diff --git a/src/effects/SelectiveBloomEffect.js b/src/effects/SelectiveBloomEffect.js index 02d46e4bc..4597418b3 100644 --- a/src/effects/SelectiveBloomEffect.js +++ b/src/effects/SelectiveBloomEffect.js @@ -4,14 +4,17 @@ import { NotEqualDepth, EqualDepth, RGBADepthPacking, + SRGBColorSpace, WebGLRenderTarget } from "three"; -import { Selection } from "../core/index.js"; -import { DepthTestStrategy, EffectAttribute, SRGBColorSpace } from "../enums/index.js"; -import { DepthMaskMaterial } from "../materials/index.js"; -import { ClearPass, DepthPass, ShaderPass } from "../passes/index.js"; -import { getOutputColorSpace, setTextureColorSpace } from "../utils/index.js"; +import { Selection } from "../core/Selection.js"; +import { DepthTestStrategy } from "../enums/DepthTestStrategy.js"; +import { EffectAttribute } from "../enums/EffectAttribute.js"; +import { DepthMaskMaterial } from "../materials/DepthMaskMaterial.js"; +import { ClearPass } from "../passes/ClearPass.js"; +import { DepthPass } from "../passes/DepthPass.js"; +import { ShaderPass } from "../passes/ShaderPass.js"; import { BloomEffect } from "./BloomEffect.js"; /** @@ -92,14 +95,11 @@ export class SelectiveBloomEffect extends BloomEffect { /** * A selection of objects. * - * The default layer of this selection is 11. - * * @type {Selection} * @readonly */ this.selection = new Selection(); - this.selection.layer = 11; /** * Backing data for {@link inverted}. @@ -333,7 +333,7 @@ export class SelectiveBloomEffect extends BloomEffect { this.depthPass.initialize(renderer, alpha, frameBufferType); this.depthMaskPass.initialize(renderer, alpha, frameBufferType); - if(renderer.capabilities.logarithmicDepthBuffer) { + if(renderer !== null && renderer.capabilities.logarithmicDepthBuffer) { this.depthMaskPass.fullscreenMaterial.defines.LOG_DEPTH = "1"; @@ -343,9 +343,9 @@ export class SelectiveBloomEffect extends BloomEffect { this.renderTargetMasked.texture.type = frameBufferType; - if(getOutputColorSpace(renderer) === SRGBColorSpace) { + if(renderer !== null && renderer.outputColorSpace === SRGBColorSpace) { - setTextureColorSpace(this.renderTargetMasked.texture, SRGBColorSpace); + this.renderTargetMasked.texture.colorSpace = SRGBColorSpace; } diff --git a/src/effects/TextureEffect.js b/src/effects/TextureEffect.js index 8e4be57db..b3860aa89 100644 --- a/src/effects/TextureEffect.js +++ b/src/effects/TextureEffect.js @@ -1,5 +1,5 @@ import { Uniform, UnsignedByteType } from "three"; -import { ColorChannel } from "../enums/index.js"; +import { ColorChannel } from "../enums/ColorChannel.js"; import { Effect } from "./Effect.js"; import fragmentShader from "./glsl/texture.frag"; diff --git a/src/effects/TiltShiftEffect.js b/src/effects/TiltShiftEffect.js index f22d15336..748babd35 100644 --- a/src/effects/TiltShiftEffect.js +++ b/src/effects/TiltShiftEffect.js @@ -1,8 +1,7 @@ -import { Uniform, Vector2, WebGLRenderTarget } from "three"; -import { Resolution } from "../core/index.js"; -import { KernelSize, SRGBColorSpace } from "../enums/index.js"; -import { TiltShiftBlurPass } from "../passes/index.js"; -import { getOutputColorSpace, setTextureColorSpace } from "../utils/index.js"; +import { SRGBColorSpace, Uniform, Vector2, WebGLRenderTarget } from "three"; +import { Resolution } from "../core/Resolution.js"; +import { KernelSize } from "../enums/KernelSize.js"; +import { TiltShiftBlurPass } from "../passes/TiltShiftBlurPass.js"; import { Effect } from "./Effect.js"; import fragmentShader from "./glsl/tilt-shift.frag"; @@ -270,9 +269,9 @@ export class TiltShiftEffect extends Effect { this.renderTarget.texture.type = frameBufferType; - if(getOutputColorSpace(renderer) === SRGBColorSpace) { + if(renderer !== null && renderer.outputColorSpace === SRGBColorSpace) { - setTextureColorSpace(this.renderTarget.texture, SRGBColorSpace); + this.renderTarget.texture.colorSpace = SRGBColorSpace; } diff --git a/src/effects/ToneMappingEffect.js b/src/effects/ToneMappingEffect.js index 17ec4c6f3..f27903c5c 100644 --- a/src/effects/ToneMappingEffect.js +++ b/src/effects/ToneMappingEffect.js @@ -1,7 +1,8 @@ -import { LinearMipmapLinearFilter, Uniform, WebGLRenderTarget } from "three"; -import { AdaptiveLuminancePass, LuminancePass } from "../passes/index.js"; -import { BlendFunction, ToneMappingMode } from "../enums/index.js"; -import { validateToneMappingMode } from "../utils/index.js"; +import { LinearMipmapLinearFilter, REVISION, Uniform, WebGLRenderTarget } from "three"; +import { AdaptiveLuminancePass } from "../passes/AdaptiveLuminancePass.js"; +import { LuminancePass } from "../passes/LuminancePass.js"; +import { BlendFunction } from "../enums/BlendFunction.js"; +import { ToneMappingMode } from "../enums/ToneMappingMode.js"; import { Effect } from "./Effect.js"; import fragmentShader from "./glsl/tone-mapping.frag"; @@ -119,43 +120,55 @@ export class ToneMappingEffect extends Effect { set mode(value) { - if(this.mode !== value) { + if(this.mode === value) { - this.defines.clear(); - this.defines.set("TONE_MAPPING_MODE", value.toFixed(0)); + return; - value = validateToneMappingMode(value); + } + + const revision = REVISION.replace(/\D+/g, ""); + const cineonToneMapping = (revision >= 168) ? "CineonToneMapping(texel)" : "OptimizedCineonToneMapping(texel)"; - // Use one of the built-in tone mapping operators. - switch(value) { + this.defines.clear(); + this.defines.set("TONE_MAPPING_MODE", value.toFixed(0)); - case ToneMappingMode.REINHARD: - this.defines.set("toneMapping(texel)", "ReinhardToneMapping(texel)"); - break; + // Use one of the built-in tone mapping operators. + switch(value) { - case ToneMappingMode.OPTIMIZED_CINEON: - this.defines.set("toneMapping(texel)", "OptimizedCineonToneMapping(texel)"); - break; + case ToneMappingMode.LINEAR: + this.defines.set("toneMapping(texel)", "LinearToneMapping(texel)"); + break; - case ToneMappingMode.ACES_FILMIC: - this.defines.set("toneMapping(texel)", "ACESFilmicToneMapping(texel)"); - break; + case ToneMappingMode.REINHARD: + this.defines.set("toneMapping(texel)", "ReinhardToneMapping(texel)"); + break; - case ToneMappingMode.AGX: - this.defines.set("toneMapping(texel)", "AgXToneMapping(texel)"); - break; + case ToneMappingMode.CINEON: + case ToneMappingMode.OPTIMIZED_CINEON: + this.defines.set("toneMapping(texel)", cineonToneMapping); + break; - default: - this.defines.set("toneMapping(texel)", "texel"); - break; + case ToneMappingMode.ACES_FILMIC: + this.defines.set("toneMapping(texel)", "ACESFilmicToneMapping(texel)"); + break; - } + case ToneMappingMode.AGX: + this.defines.set("toneMapping(texel)", "AgXToneMapping(texel)"); + break; - this.adaptiveLuminancePass.enabled = (value === ToneMappingMode.REINHARD2_ADAPTIVE); - this.setChanged(); + case ToneMappingMode.NEUTRAL: + this.defines.set("toneMapping(texel)", "NeutralToneMapping(texel)"); + break; + + default: + this.defines.set("toneMapping(texel)", "texel"); + break; } + this.adaptiveLuminancePass.enabled = (value === ToneMappingMode.REINHARD2_ADAPTIVE); + this.setChanged(); + } /** diff --git a/src/effects/VignetteEffect.js b/src/effects/VignetteEffect.js index ec173aac2..006bc9439 100644 --- a/src/effects/VignetteEffect.js +++ b/src/effects/VignetteEffect.js @@ -1,5 +1,5 @@ import { Uniform } from "three"; -import { VignetteTechnique } from "../enums/index.js"; +import { VignetteTechnique } from "../enums/VignetteTechnique.js"; import { Effect } from "./Effect.js"; import fragmentShader from "./glsl/vignette.frag"; @@ -23,8 +23,8 @@ export class VignetteEffect extends Effect { constructor({ blendFunction, - technique = VignetteTechnique.DEFAULT, eskil = false, + technique = eskil ? VignetteTechnique.ESKIL : VignetteTechnique.DEFAULT, offset = 0.5, darkness = 0.5 } = {}) { diff --git a/src/effects/blending/BlendMode.js b/src/effects/blending/BlendMode.js index 26c0e9c17..f132f04d5 100644 --- a/src/effects/blending/BlendMode.js +++ b/src/effects/blending/BlendMode.js @@ -1,5 +1,5 @@ import { EventDispatcher, Uniform } from "three"; -import { BlendFunction } from "../../enums/index.js"; +import { BlendFunction } from "../../enums/BlendFunction.js"; import add from "./glsl/add.frag"; import alpha from "./glsl/alpha.frag"; diff --git a/src/effects/blending/glsl/add.frag b/src/effects/blending/glsl/add.frag index 7337f0ce9..937db3393 100644 --- a/src/effects/blending/glsl/add.frag +++ b/src/effects/blending/glsl/add.frag @@ -1,5 +1,6 @@ -vec4 blend(const in vec4 x, const in vec4 y, const in float opacity) { +vec4 blend(const in vec4 dst, const in vec4 src, const in float opacity) { - return mix(x, x + y, opacity); + vec3 c = dst.rgb + src.rgb; + return mix(dst, vec4(c, max(dst.a, src.a)), opacity); } diff --git a/src/effects/blending/glsl/alpha.frag b/src/effects/blending/glsl/alpha.frag index 6c2658a8a..b9e1572f1 100644 --- a/src/effects/blending/glsl/alpha.frag +++ b/src/effects/blending/glsl/alpha.frag @@ -1,5 +1,5 @@ -vec4 blend(const in vec4 x, const in vec4 y, const in float opacity) { +vec4 blend(const in vec4 dst, const in vec4 src, const in float opacity) { - return mix(x, y, min(y.a, opacity)); + return mix(dst, src, src.a * opacity); } diff --git a/src/effects/blending/glsl/average.frag b/src/effects/blending/glsl/average.frag index 7b0c917ad..739ea8b75 100644 --- a/src/effects/blending/glsl/average.frag +++ b/src/effects/blending/glsl/average.frag @@ -1,5 +1,6 @@ -vec4 blend(const in vec4 x, const in vec4 y, const in float opacity) { +vec4 blend(const in vec4 dst, const in vec4 src, const in float opacity) { - return mix(x, (x + y) * 0.5, opacity); + vec3 c = (dst.rgb + src.rgb) * 0.5; + return mix(dst, vec4(c, max(dst.a, src.a)), opacity); } diff --git a/src/effects/blending/glsl/color-burn.frag b/src/effects/blending/glsl/color-burn.frag index b55e15e90..280998b9c 100644 --- a/src/effects/blending/glsl/color-burn.frag +++ b/src/effects/blending/glsl/color-burn.frag @@ -1,6 +1,7 @@ -vec4 blend(const in vec4 x, const in vec4 y, const in float opacity) { +vec4 blend(const in vec4 dst, const in vec4 src, const in float opacity) { - vec4 z = mix(step(0.0, y) * (1.0 - min(vec4(1.0), (1.0 - x) / y)), vec4(1.0), step(1.0, x)); - return mix(x, z, opacity); + vec3 a = dst.rgb, b = src.rgb; + vec3 c = mix(step(0.0, b) * (1.0 - min(vec3(1.0), (1.0 - a) / max(b, 1e-9))), vec3(1.0), step(1.0, a)); + return mix(dst, vec4(c, max(dst.a, src.a)), opacity); } diff --git a/src/effects/blending/glsl/color-dodge.frag b/src/effects/blending/glsl/color-dodge.frag index ea5b35b30..c118f9ffe 100644 --- a/src/effects/blending/glsl/color-dodge.frag +++ b/src/effects/blending/glsl/color-dodge.frag @@ -1,6 +1,7 @@ -vec4 blend(const in vec4 x, const in vec4 y, const in float opacity) { +vec4 blend(const in vec4 dst, const in vec4 src, const in float opacity) { - vec4 z = step(0.0, x) * mix(min(vec4(1.0), x / max(1.0 - y, 1e-9)), vec4(1.0), step(1.0, y)); - return mix(x, z, opacity); + vec3 a = dst.rgb, b = src.rgb; + vec3 c = step(0.0, a) * mix(min(vec3(1.0), a / max(1.0 - b, 1e-9)), vec3(1.0), step(1.0, b)); + return mix(dst, vec4(c, max(dst.a, src.a)), opacity); } diff --git a/src/effects/blending/glsl/color.frag b/src/effects/blending/glsl/color.frag index 8dc392a14..86b28f6ce 100644 --- a/src/effects/blending/glsl/color.frag +++ b/src/effects/blending/glsl/color.frag @@ -1,8 +1,8 @@ -vec4 blend(const in vec4 x, const in vec4 y, const in float opacity) { +vec4 blend(const in vec4 dst, const in vec4 src, const in float opacity) { - vec3 xHSL = RGBToHSL(x.rgb); - vec3 yHSL = RGBToHSL(y.rgb); - vec3 z = HSLToRGB(vec3(yHSL.rg, xHSL.b)); - return vec4(mix(x.rgb, z, opacity), y.a); + vec3 a = RGBToHSL(dst.rgb); + vec3 b = RGBToHSL(src.rgb); + vec3 c = HSLToRGB(vec3(b.xy, a.z)); + return mix(dst, vec4(c, max(dst.a, src.a)), opacity); } diff --git a/src/effects/blending/glsl/darken.frag b/src/effects/blending/glsl/darken.frag index 58a0a4949..ec4a55d96 100644 --- a/src/effects/blending/glsl/darken.frag +++ b/src/effects/blending/glsl/darken.frag @@ -1,5 +1,6 @@ -vec4 blend(const in vec4 x, const in vec4 y, const in float opacity) { +vec4 blend(const in vec4 dst, const in vec4 src, const in float opacity) { - return mix(x, min(x, y), opacity); + vec3 c = min(dst.rgb, src.rgb); + return mix(dst, vec4(c, max(dst.a, src.a)), opacity); } diff --git a/src/effects/blending/glsl/difference.frag b/src/effects/blending/glsl/difference.frag index 3733b3d3c..9421c2867 100644 --- a/src/effects/blending/glsl/difference.frag +++ b/src/effects/blending/glsl/difference.frag @@ -1,5 +1,6 @@ -vec4 blend(const in vec4 x, const in vec4 y, const in float opacity) { +vec4 blend(const in vec4 dst, const in vec4 src, const in float opacity) { - return mix(x, abs(x - y), opacity); + vec3 c = abs(dst.rgb - src.rgb); + return mix(dst, vec4(c, max(dst.a, src.a)), opacity); } diff --git a/src/effects/blending/glsl/divide.frag b/src/effects/blending/glsl/divide.frag index 6ee24861a..214918286 100644 --- a/src/effects/blending/glsl/divide.frag +++ b/src/effects/blending/glsl/divide.frag @@ -1,5 +1,6 @@ -vec4 blend(const in vec4 x, const in vec4 y, const in float opacity) { +vec4 blend(const in vec4 dst, const in vec4 src, const in float opacity) { - return mix(x, x / max(y, 1e-12), opacity); + vec3 c = dst.rgb / max(src.rgb, 1e-9); + return mix(dst, vec4(c, max(dst.a, src.a)), opacity); } diff --git a/src/effects/blending/glsl/exclusion.frag b/src/effects/blending/glsl/exclusion.frag index 8f11782fa..53a0e56e4 100644 --- a/src/effects/blending/glsl/exclusion.frag +++ b/src/effects/blending/glsl/exclusion.frag @@ -1,5 +1,6 @@ -vec4 blend(const in vec4 x, const in vec4 y, const in float opacity) { +vec4 blend(const in vec4 dst, const in vec4 src, const in float opacity) { - return mix(x, (x + y - 2.0 * x * y), opacity); + vec3 c = dst.rgb + src.rgb - 2.0 * dst.rgb * src.rgb; + return mix(dst, vec4(c, max(dst.a, src.a)), opacity); } diff --git a/src/effects/blending/glsl/hard-light.frag b/src/effects/blending/glsl/hard-light.frag index 8bbe48920..a6fed58c8 100644 --- a/src/effects/blending/glsl/hard-light.frag +++ b/src/effects/blending/glsl/hard-light.frag @@ -1,7 +1,8 @@ -vec4 blend(const in vec4 x, const in vec4 y, const in float opacity) { +vec4 blend(const in vec4 dst, const in vec4 src, const in float opacity) { - vec4 a = min(x, 1.0), b = min(y, 1.0); - vec4 z = mix(2.0 * a * b, 1.0 - 2.0 * (1.0 - a) * (1.0 - b), step(0.5, y)); - return mix(x, z, opacity); + vec3 a = min(dst.rgb, 1.0); + vec3 b = min(src.rgb, 1.0); + vec3 c = mix(2.0 * a * b, 1.0 - 2.0 * (1.0 - a) * (1.0 - b), step(0.5, b)); + return mix(dst, vec4(c, max(dst.a, src.a)), opacity); } diff --git a/src/effects/blending/glsl/hard-mix.frag b/src/effects/blending/glsl/hard-mix.frag index ea496c58b..fad88927c 100644 --- a/src/effects/blending/glsl/hard-mix.frag +++ b/src/effects/blending/glsl/hard-mix.frag @@ -1,5 +1,6 @@ -vec4 blend(const in vec4 x, const in vec4 y, const in float opacity) { +vec4 blend(const in vec4 dst, const in vec4 src, const in float opacity) { - return mix(x, step(1.0, x + y), opacity); + vec3 c = step(1.0, dst.rgb + src.rgb); + return mix(dst, vec4(c, max(dst.a, src.a)), opacity); } diff --git a/src/effects/blending/glsl/hue.frag b/src/effects/blending/glsl/hue.frag index 73b0dadd7..f67f4b551 100644 --- a/src/effects/blending/glsl/hue.frag +++ b/src/effects/blending/glsl/hue.frag @@ -1,8 +1,8 @@ -vec4 blend(const in vec4 x, const in vec4 y, const in float opacity) { +vec4 blend(const in vec4 dst, const in vec4 src, const in float opacity) { - vec3 xHSL = RGBToHSL(x.rgb); - vec3 yHSL = RGBToHSL(y.rgb); - vec3 z = HSLToRGB(vec3(yHSL.r, xHSL.gb)); - return vec4(mix(x.rgb, z, opacity), y.a); + vec3 a = RGBToHSL(dst.rgb); + vec3 b = RGBToHSL(src.rgb); + vec3 c = HSLToRGB(vec3(b.x, a.yz)); + return mix(dst, vec4(c, max(dst.a, src.a)), opacity); } diff --git a/src/effects/blending/glsl/invert-rgb.frag b/src/effects/blending/glsl/invert-rgb.frag index d5733bea2..620b83e17 100644 --- a/src/effects/blending/glsl/invert-rgb.frag +++ b/src/effects/blending/glsl/invert-rgb.frag @@ -1,5 +1,6 @@ -vec4 blend(const in vec4 x, const in vec4 y, const in float opacity) { +vec4 blend(const in vec4 dst, const in vec4 src, const in float opacity) { - return mix(x, y * (1.0 - x), opacity); + vec3 c = src.rgb * max(1.0 - dst.rgb, 0.0); + return mix(dst, vec4(c, max(dst.a, src.a)), opacity); } diff --git a/src/effects/blending/glsl/invert.frag b/src/effects/blending/glsl/invert.frag index 233505176..069b99222 100644 --- a/src/effects/blending/glsl/invert.frag +++ b/src/effects/blending/glsl/invert.frag @@ -1,5 +1,6 @@ -vec4 blend(const in vec4 x, const in vec4 y, const in float opacity) { +vec4 blend(const in vec4 dst, const in vec4 src, const in float opacity) { - return mix(x, 1.0 - y, opacity); + vec3 c = max(1.0 - src.rgb, 0.0); + return mix(dst, vec4(c, max(dst.a, src.a)), opacity); } diff --git a/src/effects/blending/glsl/lighten.frag b/src/effects/blending/glsl/lighten.frag index b63a91e00..d49384de0 100644 --- a/src/effects/blending/glsl/lighten.frag +++ b/src/effects/blending/glsl/lighten.frag @@ -1,5 +1,6 @@ -vec4 blend(const in vec4 x, const in vec4 y, const in float opacity) { +vec4 blend(const in vec4 dst, const in vec4 src, const in float opacity) { - return mix(x, max(x, y), opacity); + vec3 c = max(dst.rgb, src.rgb); + return mix(dst, vec4(c, max(dst.a, src.a)), opacity); } diff --git a/src/effects/blending/glsl/linear-burn.frag b/src/effects/blending/glsl/linear-burn.frag index e2555ca71..6c0028df3 100644 --- a/src/effects/blending/glsl/linear-burn.frag +++ b/src/effects/blending/glsl/linear-burn.frag @@ -1,5 +1,6 @@ -vec4 blend(const in vec4 x, const in vec4 y, const in float opacity) { +vec4 blend(const in vec4 dst, const in vec4 src, const in float opacity) { - return mix(x, clamp(y + x - 1.0, 0.0, 1.0), opacity); + vec3 c = clamp(src.rgb + dst.rgb - 1.0, 0.0, 1.0); + return mix(dst, vec4(c, max(dst.a, src.a)), opacity); } diff --git a/src/effects/blending/glsl/linear-dodge.frag b/src/effects/blending/glsl/linear-dodge.frag index 86bbc644c..cccc1b3c6 100644 --- a/src/effects/blending/glsl/linear-dodge.frag +++ b/src/effects/blending/glsl/linear-dodge.frag @@ -1,5 +1,6 @@ -vec4 blend(const in vec4 x, const in vec4 y, const in float opacity) { +vec4 blend(const in vec4 dst, const in vec4 src, const in float opacity) { - return mix(x, min(x + y, 1.0), opacity); + vec3 c = min(dst.rgb + src.rgb, 1.0); + return mix(dst, vec4(c, max(dst.a, src.a)), opacity); } diff --git a/src/effects/blending/glsl/linear-light.frag b/src/effects/blending/glsl/linear-light.frag index a7a982934..0f623832f 100644 --- a/src/effects/blending/glsl/linear-light.frag +++ b/src/effects/blending/glsl/linear-light.frag @@ -1,5 +1,6 @@ -vec4 blend(const in vec4 x, const in vec4 y, const in float opacity) { +vec4 blend(const in vec4 dst, const in vec4 src, const in float opacity) { - return mix(x, clamp(2.0 * y + x - 1.0, 0.0, 1.0), opacity); + vec3 c = clamp(2.0 * src.rgb + dst.rgb - 1.0, 0.0, 1.0); + return mix(dst, vec4(c, max(dst.a, src.a)), opacity); } diff --git a/src/effects/blending/glsl/luminosity.frag b/src/effects/blending/glsl/luminosity.frag index 34ded8051..9c0161194 100644 --- a/src/effects/blending/glsl/luminosity.frag +++ b/src/effects/blending/glsl/luminosity.frag @@ -1,8 +1,8 @@ -vec4 blend(const in vec4 x, const in vec4 y, const in float opacity) { +vec4 blend(const in vec4 dst, const in vec4 src, const in float opacity) { - vec3 xHSL = RGBToHSL(x.rgb); - vec3 yHSL = RGBToHSL(y.rgb); - vec3 z = HSLToRGB(vec3(xHSL.rg, yHSL.b)); - return vec4(mix(x.rgb, z, opacity), y.a); + vec3 a = RGBToHSL(dst.rgb); + vec3 b = RGBToHSL(src.rgb); + vec3 c = HSLToRGB(vec3(a.xy, b.z)); + return mix(dst, vec4(c, max(dst.a, src.a)), opacity); } diff --git a/src/effects/blending/glsl/multiply.frag b/src/effects/blending/glsl/multiply.frag index 25638ac44..909de68ef 100644 --- a/src/effects/blending/glsl/multiply.frag +++ b/src/effects/blending/glsl/multiply.frag @@ -1,5 +1,6 @@ -vec4 blend(const in vec4 x, const in vec4 y, const in float opacity) { +vec4 blend(const in vec4 dst, const in vec4 src, const in float opacity) { - return mix(x, x * y, opacity); + vec3 c = dst.rgb * src.rgb; + return mix(dst, vec4(c, max(dst.a, src.a)), opacity); } diff --git a/src/effects/blending/glsl/negation.frag b/src/effects/blending/glsl/negation.frag index d0f93c199..cdfbdbc58 100644 --- a/src/effects/blending/glsl/negation.frag +++ b/src/effects/blending/glsl/negation.frag @@ -1,5 +1,6 @@ -vec4 blend(const in vec4 x, const in vec4 y, const in float opacity) { +vec4 blend(const in vec4 dst, const in vec4 src, const in float opacity) { - return mix(x, 1.0 - abs(1.0 - x - y), opacity); + vec3 c = max(1.0 - abs(1.0 - dst.rgb - src.rgb), 0.0); + return mix(dst, vec4(c, max(dst.a, src.a)), opacity); } diff --git a/src/effects/blending/glsl/normal.frag b/src/effects/blending/glsl/normal.frag index ca018a852..6d8b240de 100644 --- a/src/effects/blending/glsl/normal.frag +++ b/src/effects/blending/glsl/normal.frag @@ -1,5 +1,5 @@ -vec4 blend(const in vec4 x, const in vec4 y, const in float opacity) { +vec4 blend(const in vec4 dst, const in vec4 src, const in float opacity) { - return mix(x, y, opacity); + return mix(dst, src, opacity); } diff --git a/src/effects/blending/glsl/overlay.frag b/src/effects/blending/glsl/overlay.frag index f953ac361..e8c7f55cd 100644 --- a/src/effects/blending/glsl/overlay.frag +++ b/src/effects/blending/glsl/overlay.frag @@ -1,6 +1,8 @@ -vec4 blend(const in vec4 x, const in vec4 y, const in float opacity) { +vec4 blend(const in vec4 dst, const in vec4 src, const in float opacity) { - vec4 z = mix(2.0 * y * x, 1.0 - 2.0 * (1.0 - y) * (1.0 - x), step(0.5, x)); - return mix(x, z, opacity); + vec3 a = 2.0 * src.rgb * dst.rgb; + vec3 b = 1.0 - 2.0 * (1.0 - src.rgb) * (1.0 - dst.rgb); + vec3 c = mix(a, b, step(0.5, dst.rgb)); + return mix(dst, vec4(c, max(dst.a, src.a)), opacity); } diff --git a/src/effects/blending/glsl/pin-light.frag b/src/effects/blending/glsl/pin-light.frag index 343b71c25..574c349d3 100644 --- a/src/effects/blending/glsl/pin-light.frag +++ b/src/effects/blending/glsl/pin-light.frag @@ -1,13 +1,13 @@ -vec4 blend(const in vec4 x, const in vec4 y, const in float opacity) { +vec4 blend(const in vec4 dst, const in vec4 src, const in float opacity) { - vec4 y2 = 2.0 * y; + vec3 src2 = 2.0 * src.rgb; - vec4 z = mix( - mix(y2, x, step(0.5 * x, y)), - max(vec4(0.0), y2 - 1.0), - step(x, (y2 - 1.0)) + vec3 c = mix( + mix(src2, dst.rgb, step(0.5 * dst.rgb, src.rgb)), + max(src2 - 1.0, vec3(0.0)), + step(dst.rgb, src2 - 1.0) ); - return mix(x, z, opacity); + return mix(dst, vec4(c, max(dst.a, src.a)), opacity); } diff --git a/src/effects/blending/glsl/reflect.frag b/src/effects/blending/glsl/reflect.frag index 9f89cf272..8d7aeaafd 100644 --- a/src/effects/blending/glsl/reflect.frag +++ b/src/effects/blending/glsl/reflect.frag @@ -1,6 +1,7 @@ -vec4 blend(const in vec4 x, const in vec4 y, const in float opacity) { +vec4 blend(const in vec4 dst, const in vec4 src, const in float opacity) { - vec4 z = mix(min(x * x / max(1.0 - y, 1e-12), 1.0), y, step(1.0, y)); - return mix(x, z, opacity); + vec3 a = min(dst.rgb * dst.rgb / max(1.0 - src.rgb, 1e-9), 1.0); + vec3 c = mix(a, src.rgb, step(1.0, src.rgb)); + return mix(dst, vec4(c, max(dst.a, src.a)), opacity); } diff --git a/src/effects/blending/glsl/saturation.frag b/src/effects/blending/glsl/saturation.frag index 1277dfee4..de13649e9 100644 --- a/src/effects/blending/glsl/saturation.frag +++ b/src/effects/blending/glsl/saturation.frag @@ -1,8 +1,8 @@ -vec4 blend(const in vec4 x, const in vec4 y, const in float opacity) { +vec4 blend(const in vec4 dst, const in vec4 src, const in float opacity) { - vec3 xHSL = RGBToHSL(x.rgb); - vec3 yHSL = RGBToHSL(y.rgb); - vec3 z = HSLToRGB(vec3(xHSL.r, yHSL.g, xHSL.b)); - return vec4(mix(x.rgb, z, opacity), y.a); + vec3 a = RGBToHSL(dst.rgb); + vec3 b = RGBToHSL(src.rgb); + vec3 c = HSLToRGB(vec3(a.x, b.y, a.z)); + return mix(dst, vec4(c, max(dst.a, src.a)), opacity); } diff --git a/src/effects/blending/glsl/screen.frag b/src/effects/blending/glsl/screen.frag index cec831da6..27e69fcfc 100644 --- a/src/effects/blending/glsl/screen.frag +++ b/src/effects/blending/glsl/screen.frag @@ -1,5 +1,6 @@ -vec4 blend(const in vec4 x, const in vec4 y, const in float opacity) { +vec4 blend(const in vec4 dst, const in vec4 src, const in float opacity) { - return mix(x, x + y - min(x * y, 1.0), opacity); + vec3 c = dst.rgb + src.rgb - min(dst.rgb * src.rgb, 1.0); + return mix(dst, vec4(c, max(dst.a, src.a)), opacity); } diff --git a/src/effects/blending/glsl/soft-light.frag b/src/effects/blending/glsl/soft-light.frag index fdc4b6f06..b0ce2d84c 100644 --- a/src/effects/blending/glsl/soft-light.frag +++ b/src/effects/blending/glsl/soft-light.frag @@ -1,18 +1,17 @@ -vec4 blend(const in vec4 x, const in vec4 y, const in float opacity) { +vec4 blend(const in vec4 dst, const in vec4 src, const in float opacity) { - vec4 y2 = 2.0 * y; - vec4 w = step(0.5, y); + vec3 src2 = 2.0 * src.rgb; + vec3 d = dst.rgb + (src2 - 1.0); + vec3 w = step(0.5, src.rgb); + vec3 a = dst.rgb - (1.0 - src2) * dst.rgb * (1.0 - dst.rgb); - vec4 z = mix( - x - (1.0 - y2) * x * (1.0 - x), - mix( - x + (y2 - 1.0) * (sqrt(x) - x), - x + (y2 - 1.0) * x * ((16.0 * x - 12.0) * x + 3.0), - w * (1.0 - step(0.25, x)) - ), - w + vec3 b = mix( + d * (sqrt(dst.rgb) - dst.rgb), + d * dst.rgb * ((16.0 * dst.rgb - 12.0) * dst.rgb + 3.0), + w * (1.0 - step(0.25, dst.rgb)) ); - return mix(x, z, opacity); + vec3 c = mix(a, b, w); + return mix(dst, vec4(c, max(dst.a, src.a)), opacity); } diff --git a/src/effects/blending/glsl/src.frag b/src/effects/blending/glsl/src.frag index 2da087bf5..91bd4c316 100644 --- a/src/effects/blending/glsl/src.frag +++ b/src/effects/blending/glsl/src.frag @@ -1,5 +1,5 @@ -vec4 blend(const in vec4 x, const in vec4 y, const in float opacity) { +vec4 blend(const in vec4 dst, const in vec4 src, const in float opacity) { - return y; + return src; } diff --git a/src/effects/blending/glsl/subtract.frag b/src/effects/blending/glsl/subtract.frag index 086f5248e..141a71736 100644 --- a/src/effects/blending/glsl/subtract.frag +++ b/src/effects/blending/glsl/subtract.frag @@ -1,5 +1,6 @@ -vec4 blend(const in vec4 x, const in vec4 y, const in float opacity) { +vec4 blend(const in vec4 dst, const in vec4 src, const in float opacity) { - return mix(x, max(x + y - 1.0, 0.0), opacity); + vec3 c = max(dst.rgb - src.rgb, 0.0); + return mix(dst, vec4(c, max(dst.a, src.a)), opacity); } diff --git a/src/effects/blending/glsl/vivid-light.frag b/src/effects/blending/glsl/vivid-light.frag index 97e381717..bfb6f5270 100644 --- a/src/effects/blending/glsl/vivid-light.frag +++ b/src/effects/blending/glsl/vivid-light.frag @@ -1,11 +1,11 @@ -vec4 blend(const in vec4 x, const in vec4 y, const in float opacity) { +vec4 blend(const in vec4 dst, const in vec4 src, const in float opacity) { - vec4 z = mix( - max(1.0 - min((1.0 - x) / (2.0 * y), 1.0), 0.0), - min(x / (2.0 * (1.0 - y)), 1.0), - step(0.5, y) + vec3 c = mix( + max(1.0 - min((1.0 - dst.rgb) / (2.0 * src.rgb), 1.0), 0.0), + min(dst.rgb / (2.0 * (1.0 - src.rgb)), 1.0), + step(0.5, src.rgb) ); - return mix(x, z, opacity); + return mix(dst, vec4(c, max(dst.a, src.a)), opacity); } diff --git a/src/effects/glsl/ascii.frag b/src/effects/glsl/ascii.frag new file mode 100644 index 000000000..fa3174931 --- /dev/null +++ b/src/effects/glsl/ascii.frag @@ -0,0 +1,41 @@ +uniform sampler2D asciiTexture; +uniform vec4 cellCount; // XY = cell count, ZW = inv cell count + +#ifdef USE_COLOR + + uniform vec3 color; + +#endif + +void mainImage(const in vec4 inputColor, const in vec2 uv, out vec4 outputColor) { + + vec2 pixelizedUv = cellCount.zw * (0.5 + floor(uv * cellCount.xy)); + vec4 texel = texture(inputBuffer, pixelizedUv); + + // Use the luminance of the cell as a factor from 0 to 1 to index the character. + float lum = min(luminance(texel.rgb), 1.0); + + #ifdef INVERTED + + lum = 1.0 - lum; + + #endif + + float characterIndex = floor(CHAR_COUNT_MINUS_ONE * lum); + vec2 characterPosition = vec2(mod(characterIndex, TEX_CELL_COUNT), floor(characterIndex * INV_TEX_CELL_COUNT)); + vec2 offset = vec2(characterPosition.x, -characterPosition.y) * INV_TEX_CELL_COUNT; + vec2 characterUv = mod(uv * (cellCount.xy * INV_TEX_CELL_COUNT), INV_TEX_CELL_COUNT); + characterUv = characterUv - vec2(0.0, INV_TEX_CELL_COUNT) + offset; + float asciiCharacter = texture(asciiTexture, characterUv).r; + + #ifdef USE_COLOR + + outputColor = vec4(color * asciiCharacter, inputColor.a); + + #else + + outputColor = vec4(texel.rgb * asciiCharacter, inputColor.a); + + #endif + +} \ No newline at end of file diff --git a/src/effects/glsl/bloom.frag b/src/effects/glsl/bloom.frag index b3f5cb9f6..71fdbfd93 100644 --- a/src/effects/glsl/bloom.frag +++ b/src/effects/glsl/bloom.frag @@ -12,7 +12,6 @@ uniform float intensity; void mainImage(const in vec4 inputColor, const in vec2 uv, out vec4 outputColor) { - vec4 texel = texture2D(map, uv); - outputColor = vec4(texel.rgb * intensity, texel.a); + outputColor = texture2D(map, uv) * intensity; } diff --git a/src/effects/glsl/depth-of-field.frag b/src/effects/glsl/depth-of-field.frag index baea7a4e8..b9801ce44 100644 --- a/src/effects/glsl/depth-of-field.frag +++ b/src/effects/glsl/depth-of-field.frag @@ -10,16 +10,21 @@ #endif +#if MASK_FUNCTION != 1 && MASK_FUNCTION != 2 + + uniform lowp sampler2D farCoCBuffer; + +#endif + uniform lowp sampler2D nearCoCBuffer; -uniform lowp sampler2D farCoCBuffer; uniform float scale; -void mainImage(const in vec4 inputColor, const in vec2 uv, const in float depth, out vec4 outputColor) { +void mainImage(const in vec4 inputColor, const in vec2 uv, out vec4 outputColor) { vec4 colorNear = texture2D(nearColorBuffer, uv); vec4 colorFar = texture2D(farColorBuffer, uv); - #if MASK_FUNCTION == 1 + #if MASK_FUNCTION == 1 || MASK_FUNCTION == 2 // Use the CoC from the far color buffer's alpha channel. vec2 cocNearFar = vec2(texture2D(nearCoCBuffer, uv).r, colorFar.a); @@ -30,9 +35,12 @@ void mainImage(const in vec4 inputColor, const in vec2 uv, const in float depth, vec2 cocNearFar = vec2(texture2D(nearCoCBuffer, uv).r, texture2D(farCoCBuffer, uv).g); cocNearFar = min(cocNearFar * scale, 1.0); + // Modulate the alpha value for the subsequent manual mix. + colorFar.a *= cocNearFar.y; + #endif - // The far color buffer has been premultiplied with the CoC buffer. + // Mix manually because the far color buffer has been premultiplied with the CoC buffer. vec4 result = inputColor * (1.0 - cocNearFar.y) + colorFar; result = mix(result, colorNear, cocNearFar.x); diff --git a/src/effects/glsl/fxaa.frag b/src/effects/glsl/fxaa.frag index 1389a271b..e7c090e0a 100644 --- a/src/effects/glsl/fxaa.frag +++ b/src/effects/glsl/fxaa.frag @@ -11,12 +11,6 @@ * THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. */ -#if THREE_REVISION < 143 - - #define luminance(v) linearToRelativeLuminance(v) - -#endif - #define QUALITY(q) ((q) < 5 ? 1.0 : ((q) > 5 ? ((q) < 10 ? 2.0 : ((q) < 11 ? 4.0 : 8.0)) : 1.5)) #define ONE_OVER_TWELVE 0.08333333333333333 diff --git a/src/effects/glsl/ssao.frag b/src/effects/glsl/ssao.frag index 72d2c4fa2..01d9323e2 100644 --- a/src/effects/glsl/ssao.frag +++ b/src/effects/glsl/ssao.frag @@ -2,12 +2,6 @@ uniform lowp sampler2D aoBuffer; uniform float luminanceInfluence; uniform float intensity; -#if THREE_REVISION < 143 - - #define luminance(v) linearToRelativeLuminance(v) - -#endif - #if defined(DEPTH_AWARE_UPSAMPLING) && defined(NORMAL_DEPTH) #ifdef GL_FRAGMENT_PRECISION_HIGH diff --git a/src/effects/glsl/texture.frag b/src/effects/glsl/texture.frag index 0878ff231..777a13c63 100644 --- a/src/effects/glsl/texture.frag +++ b/src/effects/glsl/texture.frag @@ -23,5 +23,6 @@ void mainImage(const in vec4 inputColor, const in vec2 uv, out vec4 outputColor) #endif outputColor = TEXEL; + outputColor.a = max(inputColor.a, outputColor.a); } diff --git a/src/effects/glsl/tone-mapping.frag b/src/effects/glsl/tone-mapping.frag index 040a3dd71..946fb8dce 100644 --- a/src/effects/glsl/tone-mapping.frag +++ b/src/effects/glsl/tone-mapping.frag @@ -1,20 +1,14 @@ #include -#if THREE_REVISION < 143 - - #define luminance(v) linearToRelativeLuminance(v) - -#endif - uniform float whitePoint; -#if TONE_MAPPING_MODE == 1 || TONE_MAPPING_MODE == 2 +#if TONE_MAPPING_MODE == 2 || TONE_MAPPING_MODE == 3 // Reinhard 2 uniform float middleGrey; - #if TONE_MAPPING_MODE == 2 + #if TONE_MAPPING_MODE == 3 uniform lowp sampler2D luminanceBuffer; @@ -31,7 +25,7 @@ uniform float whitePoint; // Calculate the luminance of the current pixel. float l = luminance(color); - #if TONE_MAPPING_MODE == 2 + #if TONE_MAPPING_MODE == 3 // Get the average luminance from the adaptive 1x1 buffer. float lumAvg = unpackRGBAToFloat(texture2D(luminanceBuffer, vec2(0.5))); @@ -50,7 +44,7 @@ uniform float whitePoint; } -#elif TONE_MAPPING_MODE == 3 +#elif TONE_MAPPING_MODE == 4 // Uncharted 2: http://filmicworlds.com/blog/filmic-tonemapping-operators @@ -78,11 +72,11 @@ uniform float whitePoint; void mainImage(const in vec4 inputColor, const in vec2 uv, out vec4 outputColor) { - #if TONE_MAPPING_MODE == 1 || TONE_MAPPING_MODE == 2 + #if TONE_MAPPING_MODE == 2 || TONE_MAPPING_MODE == 3 outputColor = vec4(Reinhard2ToneMapping(inputColor.rgb), inputColor.a); - #elif TONE_MAPPING_MODE == 3 + #elif TONE_MAPPING_MODE == 4 outputColor = vec4(Uncharted2ToneMapping(inputColor.rgb), inputColor.a); diff --git a/src/effects/index.js b/src/effects/index.js index b0807bcde..aceebb1a5 100644 --- a/src/effects/index.js +++ b/src/effects/index.js @@ -1,5 +1,6 @@ export * from "./blending/index.js"; +export * from "./ASCIIEffect.js"; export * from "./BloomEffect.js"; export * from "./BokehEffect.js"; export * from "./BrightnessContrastEffect.js"; diff --git a/src/enums/BlendFunction.js b/src/enums/BlendFunction.js index f006bbbfd..90472ad18 100644 --- a/src/enums/BlendFunction.js +++ b/src/enums/BlendFunction.js @@ -11,7 +11,7 @@ * @property {Number} SKIP - Deprecated. Use DST instead. Warning: This blend function does NOT fully disable the effect. * @property {Number} SET - Deprecated. Use SRC instead. * @property {Number} ADD - Additive blending. Supports HDR. - * @property {Number} ALPHA - Alpha blending. Blends based on the alpha value of the new color. Supports HDR. + * @property {Number} ALPHA - Blends based on alpha. * @property {Number} AVERAGE - Calculates the avarage of the new color and the base color. Supports HDR. * @property {Number} COLOR - Converts the colors to HSL and blends based on color. * @property {Number} COLOR_BURN - Color burn. diff --git a/src/enums/ColorSpace.js b/src/enums/ColorSpace.js deleted file mode 100644 index f8350e694..000000000 --- a/src/enums/ColorSpace.js +++ /dev/null @@ -1,11 +0,0 @@ -/** - * Added for backward-compatibility. - * - * @todo Remove when minimum peer dependency version of three is >= 152. - * @ignore - */ - -export const NoColorSpace = ""; -export const SRGBColorSpace = "srgb"; -export const LinearSRGBColorSpace = "srgb-linear"; -export const DisplayP3ColorSpace = "display-p3"; diff --git a/src/enums/ToneMappingMode.js b/src/enums/ToneMappingMode.js index 88bf56ef7..1d587aec0 100644 --- a/src/enums/ToneMappingMode.js +++ b/src/enums/ToneMappingMode.js @@ -2,21 +2,27 @@ * A tone mapping mode enumeration. * * @type {Object} + * @property {Number} LINEAR - No tone mapping, only exposure. * @property {Number} REINHARD - Simple Reinhard tone mapping. * @property {Number} REINHARD2 - Modified Reinhard tone mapping. * @property {Number} REINHARD2_ADAPTIVE - Simulates the optic nerve responding to the amount of light it is receiving. - * @property {Number} OPTIMIZED_CINEON - Optimized filmic operator by Jim Hejl and Richard Burgess-Dawson. * @property {Number} UNCHARTED2 - Uncharted 2 tone mapping. http://filmicworlds.com/blog/filmic-tonemapping-operators. + * @property {Number} OPTIMIZED_CINEON - Deprecated. Use `CINEON` instead. + * @property {Number} CINEON - Optimized filmic operator by Jim Hejl and Richard Burgess-Dawson. Requires three r168 or higher. * @property {Number} ACES_FILMIC - ACES tone mapping with a scale of 1.0/0.6. * @property {Number} AGX - Filmic tone mapping. Requires three r160 or higher. https://github.com/EaryChow/AgX. + * @property {Number} NEUTRAL - Neutral tone mapping by Khronos. Requires three r162 or higher. https://modelviewer.dev/examples/tone-mapping. */ export const ToneMappingMode = { - REINHARD: 0, - REINHARD2: 1, - REINHARD2_ADAPTIVE: 2, - UNCHARTED2: 3, - OPTIMIZED_CINEON: 4, - ACES_FILMIC: 5, - AGX: 6 + LINEAR: 0, + REINHARD: 1, + REINHARD2: 2, + REINHARD2_ADAPTIVE: 3, + UNCHARTED2: 4, + OPTIMIZED_CINEON: 5, + CINEON: 5, + ACES_FILMIC: 6, + AGX: 7, + NEUTRAL: 8 }; diff --git a/src/enums/index.js b/src/enums/index.js index 8887076a9..c8c7ae2f4 100644 --- a/src/enums/index.js +++ b/src/enums/index.js @@ -1,6 +1,5 @@ export * from "./BlendFunction.js"; export * from "./ColorChannel.js"; -export * from "./ColorSpace.js"; export * from "./DepthCopyMode.js"; export * from "./DepthTestStrategy.js"; export * from "./EdgeDetectionMode.js"; diff --git a/src/loaders/LUT3dlLoader.js b/src/loaders/LUT3dlLoader.js index 5b2fbef09..b944b0100 100644 --- a/src/loaders/LUT3dlLoader.js +++ b/src/loaders/LUT3dlLoader.js @@ -1,5 +1,5 @@ import { FileLoader, Loader, LoadingManager } from "three"; -import { LookupTexture } from "../textures/index.js"; +import { LookupTexture } from "../textures/lut/LookupTexture.js"; /** * A 3D LUT loader that supports the .3dl file format. @@ -9,6 +9,8 @@ import { LookupTexture } from "../textures/index.js"; * * For more details see: * http://download.autodesk.com/us/systemdocs/help/2011/lustre/index.html?url=./files/WSc4e151a45a3b785a24c3d9a411df9298473-7ffd.htm,topicNumber=d0e9492 + * + * @deprecated Use `three/addons/loaders/LUT3dlLoader.js` instead. */ export class LUT3dlLoader extends Loader { @@ -20,7 +22,6 @@ export class LUT3dlLoader extends Loader { * @param {Function} [onLoad] - A callback that receives the loaded lookup texture. * @param {Function} [onProgress] - A progress callback that receives the XMLHttpRequest instance. * @param {Function} [onError] - An error callback that receives the URL of the file that failed to load. - * @return {Promise} A promise that returns the lookup texture. */ load(url, onLoad = () => {}, onProgress = () => {}, onError = null) { @@ -31,45 +32,50 @@ export class LUT3dlLoader extends Loader { const loader = new FileLoader(internalManager); loader.setPath(this.path); loader.setResponseType("text"); + externalManager.itemStart(url); - return new Promise((resolve, reject) => { - - internalManager.onError = (url) => { + loader.load(url, (data) => { - externalManager.itemError(url); + try { - if(onError !== null) { + const result = this.parse(data); + externalManager.itemEnd(url); + onLoad(result); - onError(`Failed to load ${url}`); - resolve(); + } catch(e) { - } else { + internalManager.onError(url); + onError(e); - reject(`Failed to load ${url}`); + } - } + }, onProgress); - }; + } - externalManager.itemStart(url); + /** + * Loads a LUT. + * + * @param {String} url - The URL of the 3dl-file. + * @param {Function} [onProgress] - A progress callback that receives the XMLHttpRequest instance. + * @return {Promise} A promise that returns the lookup texture. + */ - loader.load(url, (data) => { + loadAsync(url, onProgress = () => {}) { - try { + const externalManager = this.manager; + const internalManager = new LoadingManager(); - const result = this.parse(data); - externalManager.itemEnd(url); - onLoad(result); - resolve(result); + return new Promise((resolve, reject) => { - } catch(e) { + internalManager.onError = (url) => { - console.error(e); - internalManager.onError(url); + externalManager.itemError(url); + reject(`Failed to load ${url}`); - } + }; - }, onProgress); + this.load(url, resolve, onProgress); }); diff --git a/src/loaders/LUTCubeLoader.js b/src/loaders/LUTCubeLoader.js index 7d3797754..bd081098b 100644 --- a/src/loaders/LUTCubeLoader.js +++ b/src/loaders/LUTCubeLoader.js @@ -1,5 +1,5 @@ import { FileLoader, Loader, LoadingManager, Vector3 } from "three"; -import { LookupTexture } from "../textures/index.js"; +import { LookupTexture } from "../textures/lut/LookupTexture.js"; /** * A 3D LUT loader that supports the .cube file format. @@ -9,6 +9,8 @@ import { LookupTexture } from "../textures/index.js"; * * For more details see: * https://wwwimages2.adobe.com/content/dam/acom/en/products/speedgrade/cc/pdfs/cube-lut-specification-1.0.pdf + * + * @deprecated Use `three/addons/loaders/LUTCubeLoader.js` instead. */ export class LUTCubeLoader extends Loader { @@ -20,7 +22,6 @@ export class LUTCubeLoader extends Loader { * @param {Function} [onLoad] - A callback that receives the loaded lookup texture. * @param {Function} [onProgress] - A progress callback that receives the XMLHttpRequest instance. * @param {Function} [onError] - An error callback that receives the URL of the file that failed to load. - * @return {Promise} A promise that returns the lookup texture. */ load(url, onLoad = () => {}, onProgress = () => {}, onError = null) { @@ -32,44 +33,48 @@ export class LUTCubeLoader extends Loader { loader.setPath(this.path); loader.setResponseType("text"); - return new Promise((resolve, reject) => { - - internalManager.onError = (url) => { + loader.load(url, (data) => { - externalManager.itemError(url); + try { - if(onError !== null) { + const result = this.parse(data); + externalManager.itemEnd(url); + onLoad(result); - onError(`Failed to load ${url}`); - resolve(); + } catch(e) { - } else { + internalManager.onError(url); + onError(e); - reject(`Failed to load ${url}`); + } - } + }, onProgress); - }; + } - externalManager.itemStart(url); + /** + * Loads a LUT asynchronously. + * + * @param {String} url - The URL of the CUBE-file. + * @param {Function} [onProgress] - A progress callback that receives the XMLHttpRequest instance. + * @return {Promise} A promise that returns the lookup texture. + */ - loader.load(url, (data) => { + loadAsync(url, onProgress = () => {}) { - try { + const externalManager = this.manager; + const internalManager = new LoadingManager(); - const result = this.parse(data); - externalManager.itemEnd(url); - onLoad(result); - resolve(result); + return new Promise((resolve, reject) => { - } catch(e) { + internalManager.onError = (url) => { - console.error(e); - internalManager.onError(url); + externalManager.itemError(url); + reject(`Failed to load ${url}`); - } + }; - }, onProgress); + this.load(url, resolve, onProgress); }); diff --git a/src/loaders/SMAAImageLoader.js b/src/loaders/SMAAImageLoader.js index 498613728..75dd629ec 100644 --- a/src/loaders/SMAAImageLoader.js +++ b/src/loaders/SMAAImageLoader.js @@ -7,7 +7,6 @@ import areaImageDataURL from "../textures/smaa/areaImageDataURL.js"; * An SMAA image loader. * * @deprecated Preloading the SMAA lookup textures is no longer required. - * @experimental Added for testing, API might change in patch or minor releases. Requires three >= r108. */ export class SMAAImageLoader extends Loader { diff --git a/src/materials/BoxBlurMaterial.js b/src/materials/BoxBlurMaterial.js index 452a3345c..3c65f940d 100644 --- a/src/materials/BoxBlurMaterial.js +++ b/src/materials/BoxBlurMaterial.js @@ -1,5 +1,6 @@ import { NoBlending, PerspectiveCamera, ShaderMaterial, Uniform, Vector2 } from "three"; -import { orthographicDepthToViewZ, viewZToOrthographicDepth } from "../utils/index.js"; +import { orthographicDepthToViewZ } from "../utils/orthographicDepthToViewZ.js"; +import { viewZToOrthographicDepth } from "../utils/viewZToOrthographicDepth.js"; import fragmentShader from "./glsl/convolution.box.frag"; import vertexShader from "./glsl/convolution.box.vert"; diff --git a/src/materials/CircleOfConfusionMaterial.js b/src/materials/CircleOfConfusionMaterial.js index 911d98256..c985f794d 100644 --- a/src/materials/CircleOfConfusionMaterial.js +++ b/src/materials/CircleOfConfusionMaterial.js @@ -1,5 +1,4 @@ import { BasicDepthPacking, NoBlending, PerspectiveCamera, ShaderMaterial, Uniform } from "three"; -import { orthographicDepthToViewZ, viewZToOrthographicDepth } from "../utils/index.js"; import fragmentShader from "./glsl/circle-of-confusion.frag"; import vertexShader from "./glsl/common.vert"; @@ -16,7 +15,7 @@ export class CircleOfConfusionMaterial extends ShaderMaterial { * @param {Camera} camera - A camera. */ - constructor(camera) { + constructor(camera = null) { super({ name: "CircleOfConfusionMaterial", @@ -25,10 +24,12 @@ export class CircleOfConfusionMaterial extends ShaderMaterial { }, uniforms: { depthBuffer: new Uniform(null), - focusDistance: new Uniform(0.0), - focusRange: new Uniform(0.0), + projectionMatrix: new Uniform(null), + projectionMatrixInverse: new Uniform(null), cameraNear: new Uniform(0.3), - cameraFar: new Uniform(1000) + cameraFar: new Uniform(1000), + focusDistance: new Uniform(0.0), + focusRange: new Uniform(0.0) }, blending: NoBlending, toneMapped: false, @@ -41,33 +42,11 @@ export class CircleOfConfusionMaterial extends ShaderMaterial { // TODO Added for backward-compatibility. this.uniforms.focalLength = this.uniforms.focusRange; - this.copyCameraSettings(camera); - - } - - /** - * The current near plane setting. - * - * @type {Number} - * @private - */ - - get near() { + if(camera !== null) { - return this.uniforms.cameraNear.value; + this.copyCameraSettings(camera); - } - - /** - * The current far plane setting. - * - * @type {Number} - * @private - */ - - get far() { - - return this.uniforms.cameraFar.value; + } } @@ -112,7 +91,7 @@ export class CircleOfConfusionMaterial extends ShaderMaterial { } /** - * The focus distance. Range: [0.0, 1.0]. + * The focus distance in world units. * * @type {Number} */ @@ -132,18 +111,19 @@ export class CircleOfConfusionMaterial extends ShaderMaterial { /** * The focus distance in world units. * + * @deprecated Use focusDistance instead. * @type {Number} */ get worldFocusDistance() { - return -orthographicDepthToViewZ(this.focusDistance, this.near, this.far); + return this.focusDistance; } set worldFocusDistance(value) { - this.focusDistance = viewZToOrthographicDepth(-value, this.near, this.far); + this.focusDistance = value; } @@ -176,7 +156,7 @@ export class CircleOfConfusionMaterial extends ShaderMaterial { /** * The focal length. * - * @deprecated Renamed to focusRange. + * @deprecated Use focusRange instead. * @type {Number} */ @@ -213,18 +193,19 @@ export class CircleOfConfusionMaterial extends ShaderMaterial { /** * The focus range in world units. * + * @deprecated Use focusRange instead. * @type {Number} */ get worldFocusRange() { - return -orthographicDepthToViewZ(this.focusRange, this.near, this.far); + return this.focusRange; } set worldFocusRange(value) { - this.focusRange = viewZToOrthographicDepth(-value, this.near, this.far); + this.focusRange = value; } @@ -275,21 +256,26 @@ export class CircleOfConfusionMaterial extends ShaderMaterial { copyCameraSettings(camera) { - if(camera) { + this.uniforms.projectionMatrix.value = camera.projectionMatrix; + this.uniforms.projectionMatrixInverse.value = camera.projectionMatrixInverse; - this.uniforms.cameraNear.value = camera.near; - this.uniforms.cameraFar.value = camera.far; + this.uniforms.cameraNear.value = camera.near; + this.uniforms.cameraFar.value = camera.far; - if(camera instanceof PerspectiveCamera) { + const perspectiveCameraDefined = (this.defines.PERSPECTIVE_CAMERA !== undefined); - this.defines.PERSPECTIVE_CAMERA = "1"; + if(camera instanceof PerspectiveCamera) { - } else { + if(!perspectiveCameraDefined) { - delete this.defines.PERSPECTIVE_CAMERA; + this.defines.PERSPECTIVE_CAMERA = true; + this.needsUpdate = true; } + } else if(perspectiveCameraDefined) { + + delete this.defines.PERSPECTIVE_CAMERA; this.needsUpdate = true; } diff --git a/src/materials/CopyMaterial.js b/src/materials/CopyMaterial.js index 88a6c9e75..979ed0ba4 100644 --- a/src/materials/CopyMaterial.js +++ b/src/materials/CopyMaterial.js @@ -1,5 +1,4 @@ -import { NoBlending, ShaderMaterial, Uniform } from "three"; -import { updateFragmentShader } from "../utils/index.js"; +import { AlwaysDepth, NoBlending, ShaderMaterial, Uniform } from "three"; import fragmentShader from "./glsl/copy.frag"; import vertexShader from "./glsl/common.vert"; @@ -18,8 +17,15 @@ export class CopyMaterial extends ShaderMaterial { super({ name: "CopyMaterial", + defines: { + COLOR_SPACE_CONVERSION: "1", + DEPTH_PACKING: "0", + COLOR_WRITE: "1" + }, uniforms: { inputBuffer: new Uniform(null), + depthBuffer: new Uniform(null), + channelWeights: new Uniform(null), opacity: new Uniform(1.0) }, blending: NoBlending, @@ -30,7 +36,7 @@ export class CopyMaterial extends ShaderMaterial { vertexShader }); - this.fragmentShader = updateFragmentShader(this.fragmentShader); + this.depthFunc = AlwaysDepth; } @@ -40,12 +46,151 @@ export class CopyMaterial extends ShaderMaterial { * @type {Texture} */ + get inputBuffer() { + + return this.uniforms.inputBuffer.value; + + } + set inputBuffer(value) { + const colorWrite = value !== null; + + if(this.colorWrite !== colorWrite) { + + if(colorWrite) { + + this.defines.COLOR_WRITE = true; + + } else { + + delete this.defines.COLOR_WRITE; + + } + + this.colorWrite = colorWrite; + this.needsUpdate = true; + + } + this.uniforms.inputBuffer.value = value; } + /** + * A depth buffer. + * + * @type {Texture} + */ + + get depthBuffer() { + + return this.uniforms.depthBuffer.value; + + } + + set depthBuffer(value) { + + const depthWrite = value !== null; + + if(this.depthWrite !== depthWrite) { + + if(depthWrite) { + + this.defines.DEPTH_WRITE = true; + + } else { + + delete this.defines.DEPTH_WRITE; + + } + + this.depthTest = depthWrite; + this.depthWrite = depthWrite; + this.needsUpdate = true; + + } + + this.uniforms.depthBuffer.value = value; + + } + + /** + * The depth packing strategy of the depth buffer. + * + * @type {DepthPackingStrategies} + */ + + set depthPacking(value) { + + this.defines.DEPTH_PACKING = value.toFixed(0); + this.needsUpdate = true; + + } + + /** + * Indicates whether output color space conversion is enabled. + * + * @type {Boolean} + */ + + get colorSpaceConversion() { + + return (this.defines.COLOR_SPACE_CONVERSION !== undefined); + + } + + set colorSpaceConversion(value) { + + if(this.colorSpaceConversion !== value) { + + if(value) { + + this.defines.COLOR_SPACE_CONVERSION = true; + + } else { + + delete this.defines.COLOR_SPACE_CONVERSION; + + } + + this.needsUpdate = true; + + } + + } + + /** + * Color channel weights that modulate texels from the input buffer. + * + * Set to `null` to disable. + * + * @type {Vector4 | null} + */ + + get channelWeights() { + + return this.uniforms.channelWeights.value; + + } + + set channelWeights(value) { + + if(value !== null) { + + this.defines.USE_WEIGHTS = "1"; + this.uniforms.channelWeights.value = value; + + } else { + + delete this.defines.USE_WEIGHTS; + + } + + this.needsUpdate = true; + + } + /** * Sets the input buffer. * diff --git a/src/materials/DepthCopyMaterial.js b/src/materials/DepthCopyMaterial.js index bea811273..a4ce0b30b 100644 --- a/src/materials/DepthCopyMaterial.js +++ b/src/materials/DepthCopyMaterial.js @@ -1,5 +1,5 @@ import { BasicDepthPacking, NoBlending, ShaderMaterial, Uniform, Vector2 } from "three"; -import { DepthCopyMode } from "../enums/index.js"; +import { DepthCopyMode } from "../enums/DepthCopyMode.js"; import fragmentShader from "./glsl/depth-copy.frag"; import vertexShader from "./glsl/depth-copy.vert"; diff --git a/src/materials/DepthMaskMaterial.js b/src/materials/DepthMaskMaterial.js index 021fd10fc..e6171b705 100644 --- a/src/materials/DepthMaskMaterial.js +++ b/src/materials/DepthMaskMaterial.js @@ -15,7 +15,7 @@ import { Vector2 } from "three"; -import { DepthTestStrategy } from "../enums/index.js"; +import { DepthTestStrategy } from "../enums/DepthTestStrategy.js"; import fragmentShader from "./glsl/depth-mask.frag"; import vertexShader from "./glsl/common.vert"; diff --git a/src/materials/DownsamplingMaterial.js b/src/materials/DownsamplingMaterial.js index 35abc6deb..fe5de8328 100644 --- a/src/materials/DownsamplingMaterial.js +++ b/src/materials/DownsamplingMaterial.js @@ -1,5 +1,4 @@ import { NoBlending, ShaderMaterial, Uniform, Vector2 } from "three"; -import { updateFragmentShader } from "../utils/index.js"; import fragmentShader from "./glsl/convolution.downsampling.frag"; import vertexShader from "./glsl/convolution.downsampling.vert"; @@ -35,8 +34,6 @@ export class DownsamplingMaterial extends ShaderMaterial { vertexShader }); - this.fragmentShader = updateFragmentShader(this.fragmentShader); - } /** diff --git a/src/materials/EdgeDetectionMaterial.js b/src/materials/EdgeDetectionMaterial.js index 814cc2568..6a26592dd 100644 --- a/src/materials/EdgeDetectionMaterial.js +++ b/src/materials/EdgeDetectionMaterial.js @@ -1,5 +1,5 @@ import { BasicDepthPacking, NoBlending, REVISION, ShaderMaterial, Uniform, Vector2 } from "three"; -import { EdgeDetectionMode } from "../enums/index.js"; +import { EdgeDetectionMode } from "../enums/EdgeDetectionMode.js"; import fragmentShader from "./glsl/edge-detection.frag"; import vertexShader from "./glsl/edge-detection.vert"; diff --git a/src/materials/EffectMaterial.js b/src/materials/EffectMaterial.js index 81f07fff5..c742fdef5 100644 --- a/src/materials/EffectMaterial.js +++ b/src/materials/EffectMaterial.js @@ -1,6 +1,14 @@ -import { BasicDepthPacking, NoBlending, PerspectiveCamera, REVISION, ShaderMaterial, Uniform, Vector2 } from "three"; -import { updateFragmentShader } from "../utils/index.js"; -import { EffectShaderSection as Section } from "../enums/index.js"; +import { + BasicDepthPacking, + NoBlending, + PerspectiveCamera, + REVISION, + ShaderMaterial, + Uniform, + Vector2 +} from "three"; + +import { EffectShaderSection as Section } from "../enums/EffectShaderSection.js"; import fragmentTemplate from "./glsl/effect.frag"; import vertexTemplate from "./glsl/effect.vert"; @@ -183,8 +191,6 @@ export class EffectMaterial extends ShaderMaterial { .replace(Section.VERTEX_HEAD, shaderParts.get(Section.VERTEX_HEAD) || "") .replace(Section.VERTEX_MAIN_SUPPORT, shaderParts.get(Section.VERTEX_MAIN_SUPPORT) || ""); - this.fragmentShader = updateFragmentShader(this.fragmentShader); - this.needsUpdate = true; return this; diff --git a/src/materials/GaussianBlurMaterial.js b/src/materials/GaussianBlurMaterial.js index 7dfa1ac7f..5e7830706 100644 --- a/src/materials/GaussianBlurMaterial.js +++ b/src/materials/GaussianBlurMaterial.js @@ -1,6 +1,5 @@ import { NoBlending, ShaderMaterial, Uniform, Vector2 } from "three"; -import { GaussKernel } from "../core/index.js"; -import { updateFragmentShader } from "../utils/index.js"; +import { GaussKernel } from "../core/GaussKernel.js"; import fragmentShader from "./glsl/convolution.gaussian.frag"; import vertexShader from "./glsl/convolution.gaussian.vert"; @@ -44,8 +43,6 @@ export class GaussianBlurMaterial extends ShaderMaterial { vertexShader }); - this.fragmentShader = updateFragmentShader(this.fragmentShader); - /** * @see {@link kernelSize} * @type {Number} diff --git a/src/materials/KawaseBlurMaterial.js b/src/materials/KawaseBlurMaterial.js index d6be508b8..f13891a1c 100644 --- a/src/materials/KawaseBlurMaterial.js +++ b/src/materials/KawaseBlurMaterial.js @@ -1,6 +1,5 @@ import { NoBlending, ShaderMaterial, Uniform, Vector4 } from "three"; -import { KernelSize } from "../enums/index.js"; -import { updateFragmentShader } from "../utils/index.js"; +import { KernelSize } from "../enums/KernelSize.js"; import fragmentShader from "./glsl/convolution.kawase.frag"; import vertexShader from "./glsl/convolution.kawase.vert"; @@ -55,8 +54,6 @@ export class KawaseBlurMaterial extends ShaderMaterial { vertexShader }); - this.fragmentShader = updateFragmentShader(this.fragmentShader); - this.setTexelSize(texelSize.x, texelSize.y); /** diff --git a/src/materials/LuminanceMaterial.js b/src/materials/LuminanceMaterial.js index c57e31712..32724bd41 100644 --- a/src/materials/LuminanceMaterial.js +++ b/src/materials/LuminanceMaterial.js @@ -10,8 +10,6 @@ import vertexShader from "./glsl/common.vert"; * also be configured to output colors that are scaled with their respective luminance value. Additionally, a range may * be provided to mask out undesired texels. * - * The alpha channel always contains the luminance value. - * * On luminance coefficients: * http://www.poynton.com/notes/colour_and_gamma/ColorFAQ.html#RTFToC9 * diff --git a/src/materials/MaskMaterial.js b/src/materials/MaskMaterial.js index d669863c4..281b809c5 100644 --- a/src/materials/MaskMaterial.js +++ b/src/materials/MaskMaterial.js @@ -1,5 +1,6 @@ import { NoBlending, ShaderMaterial, Uniform, UnsignedByteType } from "three"; -import { ColorChannel, MaskFunction } from "../enums/index.js"; +import { ColorChannel } from "../enums/ColorChannel.js"; +import { MaskFunction } from "../enums/MaskFunction.js"; import fragmentShader from "./glsl/mask.frag"; import vertexShader from "./glsl/common.vert"; diff --git a/src/materials/SSAOMaterial.js b/src/materials/SSAOMaterial.js index 68470b4aa..39340af21 100644 --- a/src/materials/SSAOMaterial.js +++ b/src/materials/SSAOMaterial.js @@ -1,5 +1,6 @@ import { BasicDepthPacking, Matrix4, NoBlending, PerspectiveCamera, ShaderMaterial, Uniform, Vector2 } from "three"; -import { orthographicDepthToViewZ, viewZToOrthographicDepth } from "../utils/index.js"; +import { orthographicDepthToViewZ } from "../utils/orthographicDepthToViewZ.js"; +import { viewZToOrthographicDepth } from "../utils/viewZToOrthographicDepth.js"; import fragmentShader from "./glsl/ssao.frag"; import vertexShader from "./glsl/ssao.vert"; diff --git a/src/materials/TiltShiftBlurMaterial.js b/src/materials/TiltShiftBlurMaterial.js index 9eb563001..c4acbe120 100644 --- a/src/materials/TiltShiftBlurMaterial.js +++ b/src/materials/TiltShiftBlurMaterial.js @@ -1,6 +1,5 @@ import { Uniform, Vector2, Vector4 } from "three"; -import { KernelSize } from "../enums/index.js"; -import { updateFragmentShader } from "../utils/index.js"; +import { KernelSize } from "../enums/KernelSize.js"; import { KawaseBlurMaterial } from "./KawaseBlurMaterial.js"; import fragmentShader from "./glsl/convolution.tilt-shift.frag"; @@ -36,8 +35,6 @@ export class TiltShiftBlurMaterial extends KawaseBlurMaterial { this.vertexShader = vertexShader; this.kernelSize = kernelSize; - this.fragmentShader = updateFragmentShader(this.fragmentShader); - this.uniforms.aspect = new Uniform(1.0); this.uniforms.rotation = new Uniform(new Vector2()); this.uniforms.maskParams = new Uniform(new Vector4()); diff --git a/src/materials/UpsamplingMaterial.js b/src/materials/UpsamplingMaterial.js index 17e2f60c3..c05a6872c 100644 --- a/src/materials/UpsamplingMaterial.js +++ b/src/materials/UpsamplingMaterial.js @@ -1,5 +1,4 @@ import { NoBlending, ShaderMaterial, Uniform, Vector2 } from "three"; -import { updateFragmentShader } from "../utils/index.js"; import fragmentShader from "./glsl/convolution.upsampling.frag"; import vertexShader from "./glsl/convolution.upsampling.vert"; @@ -37,8 +36,6 @@ export class UpsamplingMaterial extends ShaderMaterial { vertexShader }); - this.fragmentShader = updateFragmentShader(this.fragmentShader); - } /** diff --git a/src/materials/glsl/circle-of-confusion.frag b/src/materials/glsl/circle-of-confusion.frag index fc4e526b4..abf88266b 100644 --- a/src/materials/glsl/circle-of-confusion.frag +++ b/src/materials/glsl/circle-of-confusion.frag @@ -11,11 +11,14 @@ #endif -uniform float focusDistance; -uniform float focusRange; +uniform mat4 projectionMatrix; +uniform mat4 projectionMatrixInverse; uniform float cameraNear; uniform float cameraFar; +uniform float focusDistance; +uniform float focusRange; + varying vec2 vUv; float readDepth(const in vec2 uv) { @@ -30,35 +33,58 @@ float readDepth(const in vec2 uv) { #endif - #ifdef LOG_DEPTH + #if defined(USE_LOGARITHMIC_DEPTH_BUFFER) || defined(LOG_DEPTH) float d = pow(2.0, depth * log2(cameraFar + 1.0)) - 1.0; float a = cameraFar / (cameraFar - cameraNear); float b = cameraFar * cameraNear / (cameraNear - cameraFar); depth = a + b / d; + #elif defined(USE_REVERSED_DEPTH_BUFFER) + + depth = 1.0 - depth; + #endif return depth; } -void main() { +#ifdef PERSPECTIVE_CAMERA - float depth = readDepth(vUv); + #define getViewZ(depth) perspectiveDepthToViewZ(depth, cameraNear, cameraFar) - #ifdef PERSPECTIVE_CAMERA +#else - float viewZ = perspectiveDepthToViewZ(depth, cameraNear, cameraFar); - float linearDepth = viewZToOrthographicDepth(viewZ, cameraNear, cameraFar); + #define getViewZ(depth) orthographicDepthToViewZ(depth, cameraNear, cameraFar) - #else +#endif - float linearDepth = depth; +vec3 getViewPosition(const in vec2 screenPosition, const in float depth, const in float viewZ) { - #endif + vec4 clipPosition = vec4(vec3(screenPosition, depth) * 2.0 - 1.0, 1.0); + float clipW = projectionMatrix[2][3] * viewZ + projectionMatrix[3][3]; + clipPosition *= clipW; // Unproject. + + return (projectionMatrixInverse * clipPosition).xyz; + +} + +vec3 getViewPosition(const in vec2 screenPosition, const in float depth) { + + return getViewPosition(screenPosition, depth, getViewZ(depth)); + +} + +#define getDistance(viewPosition) length(viewPosition) + +void main() { + + float depth = readDepth(vUv); + vec3 viewPosition = getViewPosition(vUv, depth); + float distance = getDistance(viewPosition); - float signedDistance = linearDepth - focusDistance; + float signedDistance = distance - focusDistance; float magnitude = smoothstep(0.0, focusRange, abs(signedDistance)); gl_FragColor.rg = magnitude * vec2( diff --git a/src/materials/glsl/convolution.box.frag b/src/materials/glsl/convolution.box.frag index 5aaf8c9ce..60ed78237 100644 --- a/src/materials/glsl/convolution.box.frag +++ b/src/materials/glsl/convolution.box.frag @@ -13,6 +13,8 @@ #include uniform vec2 cameraNearFar; + #define cameraNear cameraNearFar.x + #define cameraFar cameraNearFar.y #ifdef NORMAL_DEPTH @@ -28,7 +30,22 @@ float readDepth(const in vec2 uv) { - return texture2D(normalDepthBuffer, uv).a; + float depth = texture2D(normalDepthBuffer, uv).a; + + #if defined(USE_LOGARITHMIC_DEPTH_BUFFER) || defined(LOG_DEPTH) + + float d = pow(2.0, depth * log2(cameraFar + 1.0)) - 1.0; + float a = cameraFar / (cameraFar - cameraNear); + float b = cameraFar * cameraNear / (cameraNear - cameraFar); + depth = a + b / d; + + #elif defined(USE_REVERSED_DEPTH_BUFFER) + + depth = 1.0 - depth; + + #endif + + return depth; } @@ -52,14 +69,29 @@ #if DEPTH_PACKING == 3201 - return unpackRGBAToDepth(texture2D(depthBuffer, uv)); + float depth = unpackRGBAToDepth(texture2D(depthBuffer, uv)); #else - return texture2D(depthBuffer, uv).r; + float depth = texture2D(depthBuffer, uv).r; #endif + #if defined(USE_LOGARITHMIC_DEPTH_BUFFER) || defined(LOG_DEPTH) + + float d = pow(2.0, depth * log2(cameraFar + 1.0)) - 1.0; + float a = cameraFar / (cameraFar - cameraNear); + float b = cameraFar * cameraNear / (cameraNear - cameraFar); + depth = a + b / d; + + #elif defined(USE_REVERSED_DEPTH_BUFFER) + + depth = 1.0 - depth; + + #endif + + return depth; + } #endif diff --git a/src/materials/glsl/convolution.downsampling.frag b/src/materials/glsl/convolution.downsampling.frag index e71d8ab91..a25f67f05 100644 --- a/src/materials/glsl/convolution.downsampling.frag +++ b/src/materials/glsl/convolution.downsampling.frag @@ -10,8 +10,8 @@ // (1 / 4) * 0.5 = 0.125 #define WEIGHT_INNER 0.125 -// (1 / 9) * 0.5 = 0.0555555 -#define WEIGHT_OUTER 0.0555555 +// (1 / 9) * 0.5 ≈ 0.05556 +#define WEIGHT_OUTER 0.05556 varying vec2 vUv; varying vec2 vUv00; diff --git a/src/materials/glsl/copy.frag b/src/materials/glsl/copy.frag index e8853812d..813337d53 100644 --- a/src/materials/glsl/copy.frag +++ b/src/materials/glsl/copy.frag @@ -1,13 +1,53 @@ -#include -#include +#ifdef COLOR_WRITE -#ifdef FRAMEBUFFER_PRECISION_HIGH + #include + #include - uniform mediump sampler2D inputBuffer; + #ifdef FRAMEBUFFER_PRECISION_HIGH -#else + uniform mediump sampler2D inputBuffer; - uniform lowp sampler2D inputBuffer; + #else + + uniform lowp sampler2D inputBuffer; + + #endif + +#endif + +#ifdef DEPTH_WRITE + + #include + + #ifdef GL_FRAGMENT_PRECISION_HIGH + + uniform highp sampler2D depthBuffer; + + #else + + uniform mediump sampler2D depthBuffer; + + #endif + + float readDepth(const in vec2 uv) { + + #if DEPTH_PACKING == 3201 + + return unpackRGBAToDepth(texture2D(depthBuffer, uv)); + + #else + + return texture2D(depthBuffer, uv).r; + + #endif + + } + +#endif + +#ifdef USE_WEIGHTS + + uniform vec4 channelWeights; #endif @@ -17,10 +57,36 @@ varying vec2 vUv; void main() { - vec4 texel = texture2D(inputBuffer, vUv); - gl_FragColor = opacity * texel; + #ifdef COLOR_WRITE + + vec4 texel = texture2D(inputBuffer, vUv); + + #ifdef USE_WEIGHTS + + texel *= channelWeights; + + #endif + + gl_FragColor = opacity * texel; + + #ifdef COLOR_SPACE_CONVERSION + + #include + + #endif + + #include + + #else + + gl_FragColor = vec4(0.0); + + #endif + + #ifdef DEPTH_WRITE + + gl_FragDepth = readDepth(vUv); - #include - #include + #endif } diff --git a/src/materials/glsl/depth-comparison.frag b/src/materials/glsl/depth-comparison.frag index 5780f7293..28e1e3ba5 100644 --- a/src/materials/glsl/depth-comparison.frag +++ b/src/materials/glsl/depth-comparison.frag @@ -23,25 +23,37 @@ void main() { // Transform into Cartesian coordinates (not mirrored). vec2 projTexCoord = (vProjTexCoord.xy / vProjTexCoord.w) * 0.5 + 0.5; - projTexCoord = clamp(projTexCoord, 0.002, 0.998); #if DEPTH_PACKING == 3201 - float fragCoordZ = unpackRGBAToDepth(texture2D(depthBuffer, projTexCoord)); + float depth = unpackRGBAToDepth(texture2D(depthBuffer, projTexCoord)); #else - float fragCoordZ = texture2D(depthBuffer, projTexCoord).r; + float depth = texture2D(depthBuffer, projTexCoord).r; + + #endif + + #if defined(USE_LOGARITHMIC_DEPTH_BUFFER) || defined(LOG_DEPTH) + + float d = pow(2.0, depth * log2(cameraFar + 1.0)) - 1.0; + float a = cameraFar / (cameraFar - cameraNear); + float b = cameraFar * cameraNear / (cameraNear - cameraFar); + depth = a + b / d; + + #elif defined(USE_REVERSED_DEPTH_BUFFER) + + depth = 1.0 - depth; #endif #ifdef PERSPECTIVE_CAMERA - float viewZ = perspectiveDepthToViewZ(fragCoordZ, cameraNear, cameraFar); + float viewZ = perspectiveDepthToViewZ(depth, cameraNear, cameraFar); #else - float viewZ = orthographicDepthToViewZ(fragCoordZ, cameraNear, cameraFar); + float viewZ = orthographicDepthToViewZ(depth, cameraNear, cameraFar); #endif diff --git a/src/materials/glsl/depth-mask.frag b/src/materials/glsl/depth-mask.frag index 4c18d7c2e..2f9244ecf 100644 --- a/src/materials/glsl/depth-mask.frag +++ b/src/materials/glsl/depth-mask.frag @@ -44,15 +44,6 @@ void main() { depth.x = texture2D(depthBuffer0, vUv).r; - #ifdef LOG_DEPTH - - float d = pow(2.0, depth.x * log2(cameraNearFar.y + 1.0)) - 1.0; - float a = cameraNearFar.y / (cameraNearFar.y - cameraNearFar.x); - float b = cameraNearFar.y * cameraNearFar.x / (cameraNearFar.x - cameraNearFar.y); - depth.x = a + b / d; - - #endif - #endif #if DEPTH_PACKING_1 == 3201 @@ -63,14 +54,23 @@ void main() { depth.y = texture2D(depthBuffer1, vUv).r; - #ifdef LOG_DEPTH + #endif + + #if defined(USE_LOGARITHMIC_DEPTH_BUFFER) || defined(LOG_DEPTH) + + float a = cameraNearFar.y / (cameraNearFar.y - cameraNearFar.x); + float b = cameraNearFar.y * cameraNearFar.x / (cameraNearFar.x - cameraNearFar.y); + float c = log2(cameraNearFar.y + 1.0); + float d = pow(2.0, depth.x * c) - 1.0; + depth.x = a + b / d; + + d = pow(2.0, depth.y * c) - 1.0; + depth.y = a + b / d; - float d = pow(2.0, depth.y * log2(cameraNearFar.y + 1.0)) - 1.0; - float a = cameraNearFar.y / (cameraNearFar.y - cameraNearFar.x); - float b = cameraNearFar.y * cameraNearFar.x / (cameraNearFar.x - cameraNearFar.y); - depth.y = a + b / d; + #elif defined(USE_REVERSED_DEPTH_BUFFER) - #endif + depth.x = 1.0 - depth.x; + depth.y = 1.0 - depth.y; #endif diff --git a/src/materials/glsl/edge-detection.frag b/src/materials/glsl/edge-detection.frag index d6f789680..22f56ee17 100644 --- a/src/materials/glsl/edge-detection.frag +++ b/src/materials/glsl/edge-detection.frag @@ -2,12 +2,6 @@ varying vec2 vUv; varying vec2 vUv0; varying vec2 vUv1; -#if THREE_REVISION < 143 - - #define luminance(v) linearToRelativeLuminance(v) - -#endif - #if EDGE_DETECTION_MODE != 0 varying vec2 vUv2; diff --git a/src/materials/glsl/effect.frag b/src/materials/glsl/effect.frag index 51f0528b3..511108fd6 100644 --- a/src/materials/glsl/effect.frag +++ b/src/materials/glsl/effect.frag @@ -39,38 +39,43 @@ uniform float time; varying vec2 vUv; -#if THREE_REVISION < 143 +vec4 sRGBToLinear(const in vec4 value) { - #define luminance(v) linearToRelativeLuminance(v) + return vec4(mix( + pow(value.rgb * 0.9478672986 + vec3(0.0521327014), vec3(2.4)), + value.rgb * 0.0773993808, + vec3(lessThanEqual(value.rgb, vec3(0.04045))) + ), value.a); -#endif +} -#if THREE_REVISION >= 137 +float readDepth(const in vec2 uv) { - vec4 sRGBToLinear(const in vec4 value) { + #if DEPTH_PACKING == 3201 - return vec4(mix( - pow(value.rgb * 0.9478672986 + vec3(0.0521327014), vec3(2.4)), - value.rgb * 0.0773993808, - vec3(lessThanEqual(value.rgb, vec3(0.04045))) - ), value.a); + float depth = unpackRGBAToDepth(texture2D(depthBuffer, uv)); - } + #else -#endif + float depth = texture2D(depthBuffer, uv).r; -float readDepth(const in vec2 uv) { + #endif - #if DEPTH_PACKING == 3201 + #if defined(USE_LOGARITHMIC_DEPTH_BUFFER) || defined(LOG_DEPTH) - return unpackRGBAToDepth(texture2D(depthBuffer, uv)); + float d = pow(2.0, depth * log2(cameraFar + 1.0)) - 1.0; + float a = cameraFar / (cameraFar - cameraNear); + float b = cameraFar * cameraNear / (cameraNear - cameraFar); + depth = a + b / d; - #else + #elif defined(USE_REVERSED_DEPTH_BUFFER) - return texture2D(depthBuffer, uv).r; + depth = 1.0 - depth; #endif + return depth; + } float getViewZ(const in float depth) { diff --git a/src/materials/glsl/luminance.frag b/src/materials/glsl/luminance.frag index 82e91cc41..e7350a5b4 100644 --- a/src/materials/glsl/luminance.frag +++ b/src/materials/glsl/luminance.frag @@ -1,11 +1,5 @@ #include -#if THREE_REVISION < 143 - - #define luminance(v) linearToRelativeLuminance(v) - -#endif - #ifdef FRAMEBUFFER_PRECISION_HIGH uniform mediump sampler2D inputBuffer; @@ -33,28 +27,29 @@ void main() { vec4 texel = texture2D(inputBuffer, vUv); float l = luminance(texel.rgb); + float mask = 1.0; #ifdef RANGE // Apply a luminance range mask. float low = step(range.x, l); float high = step(l, range.y); - - l *= low * high; + mask = low * high; #elif defined(THRESHOLD) - l = smoothstep(threshold, threshold + smoothing, l); + // Apply a high pass filter. + mask = smoothstep(threshold, threshold + smoothing, l); #endif #ifdef COLOR - gl_FragColor = vec4(texel.rgb * l, l); + gl_FragColor = texel * mask; #else - gl_FragColor = vec4(l); + gl_FragColor = vec4(l * mask); #endif diff --git a/src/materials/glsl/mask.frag b/src/materials/glsl/mask.frag index 2c5091240..fc584764e 100644 --- a/src/materials/glsl/mask.frag +++ b/src/materials/glsl/mask.frag @@ -50,13 +50,11 @@ void main() { #ifdef INVERTED - // (mask > 0.0) ? 0.0 : 1.0; - mask = step(mask, 0.0); + mask = (mask > 0.0) ? 0.0 : 1.0; #else - // (mask > 0.0) ? 1.0 : 0.0; - mask = 1.0 - step(mask, 0.0); + mask = (mask > 0.0) ? 1.0 : 0.0; #endif diff --git a/src/materials/glsl/ssao.frag b/src/materials/glsl/ssao.frag index 4920735c0..aa7876e4e 100644 --- a/src/materials/glsl/ssao.frag +++ b/src/materials/glsl/ssao.frag @@ -1,6 +1,10 @@ #include #include +uniform vec2 cameraNearFar; +#define cameraNear cameraNearFar.x +#define cameraFar cameraNearFar.y + #ifdef NORMAL_DEPTH #ifdef GL_FRAGMENT_PRECISION_HIGH @@ -15,7 +19,18 @@ float readDepth(const in vec2 uv) { - return texture2D(normalDepthBuffer, uv).a; + float depth = texture2D(normalDepthBuffer, uv).a; + + #if defined(USE_LOGARITHMIC_DEPTH_BUFFER) || defined(LOG_DEPTH) + + float d = pow(2.0, depth * log2(cameraFar + 1.0)) - 1.0; + float a = cameraFar / (cameraFar - cameraNear); + float b = cameraFar * cameraNear / (cameraNear - cameraFar); + depth = a + b / d; + + #endif + + return depth; } @@ -41,14 +56,25 @@ #if DEPTH_PACKING == 3201 - return unpackRGBAToDepth(texture2D(depthBuffer, uv)); + float depth = unpackRGBAToDepth(texture2D(depthBuffer, uv)); #else - return texture2D(depthBuffer, uv).r; + float depth = texture2D(depthBuffer, uv).r; #endif + #if defined(USE_LOGARITHMIC_DEPTH_BUFFER) || defined(LOG_DEPTH) + + float d = pow(2.0, depth * log2(cameraFar + 1.0)) - 1.0; + float a = cameraFar / (cameraFar - cameraNear); + float b = cameraFar * cameraNear / (cameraNear - cameraFar); + depth = a + b / d; + + #endif + + return depth; + } #endif @@ -58,7 +84,6 @@ uniform lowp sampler2D noiseTexture; uniform mat4 inverseProjectionMatrix; uniform mat4 projectionMatrix; uniform vec2 texelSize; -uniform vec2 cameraNearFar; uniform float intensity; uniform float minRadiusScale; @@ -75,11 +100,11 @@ float getViewZ(const in float depth) { #ifdef PERSPECTIVE_CAMERA - return perspectiveDepthToViewZ(depth, cameraNearFar.x, cameraNearFar.y); + return perspectiveDepthToViewZ(depth, cameraNear, cameraFar); #else - return orthographicDepthToViewZ(depth, cameraNearFar.x, cameraNearFar.y); + return orthographicDepthToViewZ(depth, cameraNear, cameraFar); #endif @@ -135,7 +160,7 @@ float getAmbientOcclusion(const in vec3 p, const in vec3 n, const in float depth #ifdef PERSPECTIVE_CAMERA - float linearSampleDepth = viewZToOrthographicDepth(viewZ, cameraNearFar.x, cameraNearFar.y); + float linearSampleDepth = viewZToOrthographicDepth(viewZ, cameraNear, cameraFar); #else @@ -174,6 +199,15 @@ void main() { vec4 normalDepth = texture2D(normalDepthBuffer, vUv); + #if defined(USE_LOGARITHMIC_DEPTH_BUFFER) || defined(LOG_DEPTH) + + float d = pow(2.0, normalDepth.a * log2(cameraFar + 1.0)) - 1.0; + float a = cameraFar / (cameraFar - cameraNear); + float b = cameraFar * cameraNear / (cameraNear - cameraFar); + normalDepth.a = a + b / d; + + #endif + #else vec4 normalDepth = vec4(texture2D(normalBuffer, vUv).xyz, readDepth(vUv)); @@ -186,7 +220,7 @@ void main() { #ifdef PERSPECTIVE_CAMERA - float linearDepth = viewZToOrthographicDepth(viewZ, cameraNearFar.x, cameraNearFar.y); + float linearDepth = viewZToOrthographicDepth(viewZ, cameraNear, cameraFar); #else diff --git a/src/passes/AdaptiveLuminancePass.js b/src/passes/AdaptiveLuminancePass.js index 91077b2cb..6ff27da30 100644 --- a/src/passes/AdaptiveLuminancePass.js +++ b/src/passes/AdaptiveLuminancePass.js @@ -1,5 +1,5 @@ import { NearestFilter, WebGLRenderTarget } from "three"; -import { AdaptiveLuminanceMaterial } from "../materials/index.js"; +import { AdaptiveLuminanceMaterial } from "../materials/AdaptiveLuminanceMaterial.js"; import { CopyPass } from "./CopyPass.js"; import { Pass } from "./Pass.js"; diff --git a/src/passes/BoxBlurPass.js b/src/passes/BoxBlurPass.js index 38f9b2cf7..11f7d210f 100644 --- a/src/passes/BoxBlurPass.js +++ b/src/passes/BoxBlurPass.js @@ -1,8 +1,7 @@ -import { BasicDepthPacking, UnsignedByteType, WebGLRenderTarget } from "three"; -import { Resolution } from "../core/index.js"; -import { SRGBColorSpace } from "../enums/index.js"; -import { CopyMaterial, BoxBlurMaterial } from "../materials/index.js"; -import { getOutputColorSpace, setTextureColorSpace } from "../utils/index.js"; +import { BasicDepthPacking, SRGBColorSpace, UnsignedByteType, WebGLRenderTarget } from "three"; +import { Resolution } from "../core/Resolution.js"; +import { CopyMaterial } from "../materials/CopyMaterial.js"; +import { BoxBlurMaterial } from "../materials/BoxBlurMaterial.js"; import { Pass } from "./Pass.js"; /** @@ -183,7 +182,11 @@ export class BoxBlurPass extends Pass { initialize(renderer, alpha, frameBufferType) { - this.blurMaterial.maxVaryingVectors = renderer.capabilities.maxVaryings; + if(renderer !== null) { + + this.blurMaterial.maxVaryingVectors = renderer.capabilities.maxVaryings; + + } if(frameBufferType !== undefined) { @@ -194,10 +197,10 @@ export class BoxBlurPass extends Pass { this.fullscreenMaterial.defines.FRAMEBUFFER_PRECISION_HIGH = "1"; - } else if(getOutputColorSpace(renderer) === SRGBColorSpace) { + } else if(renderer !== null && renderer.outputColorSpace === SRGBColorSpace) { - setTextureColorSpace(this.renderTargetA.texture, SRGBColorSpace); - setTextureColorSpace(this.renderTargetB.texture, SRGBColorSpace); + this.renderTargetA.texture.colorSpace = SRGBColorSpace; + this.renderTargetB.texture.colorSpace = SRGBColorSpace; } diff --git a/src/passes/CopyPass.js b/src/passes/CopyPass.js index 5407ccb34..98dd41991 100644 --- a/src/passes/CopyPass.js +++ b/src/passes/CopyPass.js @@ -1,7 +1,5 @@ -import { LinearFilter, UnsignedByteType, WebGLRenderTarget } from "three"; -import { SRGBColorSpace } from "../enums/index.js"; -import { CopyMaterial } from "../materials/index.js"; -import { getOutputColorSpace, setTextureColorSpace } from "../utils/index.js"; +import { LinearFilter, SRGBColorSpace, UnsignedByteType, WebGLRenderTarget } from "three"; +import { CopyMaterial } from "../materials/CopyMaterial.js"; import { Pass } from "./Pass.js"; /** @@ -166,9 +164,9 @@ export class CopyPass extends Pass { this.fullscreenMaterial.defines.FRAMEBUFFER_PRECISION_HIGH = "1"; - } else if(getOutputColorSpace(renderer) === SRGBColorSpace) { + } else if(renderer !== null && renderer.outputColorSpace === SRGBColorSpace) { - setTextureColorSpace(this.renderTarget.texture, SRGBColorSpace); + this.renderTarget.texture.colorSpace = SRGBColorSpace; } diff --git a/src/passes/DepthCopyPass.js b/src/passes/DepthCopyPass.js index c408d941b..3b85dd131 100644 --- a/src/passes/DepthCopyPass.js +++ b/src/passes/DepthCopyPass.js @@ -7,7 +7,7 @@ import { WebGLRenderTarget } from "three"; -import { DepthCopyMaterial } from "../materials/index.js"; +import { DepthCopyMaterial } from "../materials/DepthCopyMaterial.js"; import { Pass } from "./Pass.js"; /** diff --git a/src/passes/DepthDownsamplingPass.js b/src/passes/DepthDownsamplingPass.js index 3ef821f42..f2f162924 100644 --- a/src/passes/DepthDownsamplingPass.js +++ b/src/passes/DepthDownsamplingPass.js @@ -1,6 +1,6 @@ import { BasicDepthPacking, FloatType, NearestFilter, WebGLRenderTarget } from "three"; -import { Resolution } from "../core/index.js"; -import { DepthDownsamplingMaterial } from "../materials/index.js"; +import { Resolution } from "../core/Resolution.js"; +import { DepthDownsamplingMaterial } from "../materials/DepthDownsamplingMaterial.js"; import { Pass } from "./Pass.js"; /** diff --git a/src/passes/DepthPass.js b/src/passes/DepthPass.js index f57bb82f1..cb7eaf4e3 100644 --- a/src/passes/DepthPass.js +++ b/src/passes/DepthPass.js @@ -1,5 +1,5 @@ import { Color, MeshDepthMaterial, NearestFilter, RGBADepthPacking, WebGLRenderTarget } from "three"; -import { Resolution } from "../core/index.js"; +import { Resolution } from "../core/Resolution.js"; import { Pass } from "./Pass.js"; import { RenderPass } from "./RenderPass.js"; @@ -51,10 +51,6 @@ export class DepthPass extends Pass { renderPass.skipShadowMapUpdate = true; renderPass.ignoreBackground = true; - const clearPass = renderPass.clearPass; - clearPass.overrideClearColor = new Color(0xffffff); - clearPass.overrideClearAlpha = 1; - /** * A render target that contains the scene depth. * @@ -194,4 +190,21 @@ export class DepthPass extends Pass { } + /** + * Performs initialization tasks. + * + * @param {WebGLRenderer} renderer - The renderer. + * @param {Boolean} alpha - Whether the renderer uses the alpha channel or not. + * @param {Number} frameBufferType - The type of the main frame buffers. + */ + + initialize(renderer, alpha, frameBufferType) { + + const clearColor = renderer.capabilities.reversedDepthBuffer ? 0x000000 : 0xffffff; + const clearPass = this.renderPass.clearPass; + clearPass.overrideClearColor = new Color(clearColor); + clearPass.overrideClearAlpha = 1; + + } + } diff --git a/src/passes/DepthPickingPass.js b/src/passes/DepthPickingPass.js index e54c397c7..6f796a288 100644 --- a/src/passes/DepthPickingPass.js +++ b/src/passes/DepthPickingPass.js @@ -1,12 +1,22 @@ -import { FloatType, RGBADepthPacking } from "three"; -import { DepthCopyMode } from "../enums/index.js"; +import { BasicDepthPacking, FloatType, REVISION, RGBADepthPacking } from "three"; +import { DepthCopyMode } from "../enums/DepthCopyMode.js"; import { DepthCopyPass } from "./DepthCopyPass.js"; +const threeRevision = Number(REVISION.replace(/\D+/g, "")); +const unpackDownscale = 255 / 256; // 0..1 -> fraction (excluding 1) + +const unpackFactorsLegacy = new Float32Array([ + unpackDownscale / (256 ** 3), + unpackDownscale / (256 ** 2), + unpackDownscale / 256, + unpackDownscale +]); + const unpackFactors = new Float32Array([ - (255 / 256) / (256 ** 3), - (255 / 256) / (256 ** 2), - (255 / 256) / 256, - (255 / 256) + unpackDownscale, + unpackDownscale / 256, + unpackDownscale / (256 ** 2), + 1 / (256 ** 3) ]); /** @@ -19,11 +29,14 @@ const unpackFactors = new Float32Array([ function unpackRGBAToDepth(packedDepth) { + // Packing was changed in r167. + const f = (threeRevision >= 167) ? unpackFactors : unpackFactorsLegacy; + return ( - packedDepth[0] * unpackFactors[0] + - packedDepth[1] * unpackFactors[1] + - packedDepth[2] * unpackFactors[2] + - packedDepth[3] * unpackFactors[3] + packedDepth[0] * f[0] + + packedDepth[1] * f[1] + + packedDepth[2] * f[2] + + packedDepth[3] * f[3] ) / 255; } @@ -44,6 +57,12 @@ export class DepthPickingPass extends DepthCopyPass { constructor({ depthPacking = RGBADepthPacking, mode = DepthCopyMode.SINGLE } = {}) { + if(depthPacking !== RGBADepthPacking && depthPacking !== BasicDepthPacking) { + + throw new Error(`Unsupported depth packing: ${depthPacking}`); + + } + super({ depthPacking }); this.name = "DepthPickingPass"; diff --git a/src/passes/EffectPass.js b/src/passes/EffectPass.js index 70f45639b..e538f4b98 100644 --- a/src/passes/EffectPass.js +++ b/src/passes/EffectPass.js @@ -1,15 +1,10 @@ -import { BasicDepthPacking, UnsignedByteType } from "three"; -import { EffectShaderData } from "../core/index.js"; - -import { - BlendFunction, - EffectAttribute, - EffectShaderSection as Section, - NoColorSpace, - SRGBColorSpace -} from "../enums/index.js"; - -import { EffectMaterial } from "../materials/index.js"; +import { BasicDepthPacking, NoColorSpace, SRGBColorSpace, UnsignedByteType } from "three"; +import { EffectShaderData } from "../core/EffectShaderData.js"; +import { BlendFunction } from "../enums/BlendFunction.js"; +import { EffectAttribute } from "../enums/EffectAttribute.js"; +import { EffectShaderSection as Section } from "../enums/EffectShaderSection.js"; + +import { EffectMaterial } from "../materials/EffectMaterial.js"; import { Pass } from "./Pass.js"; /** @@ -169,7 +164,7 @@ function integrateEffect(prefix, effect, data) { if(effect.inputColorSpace !== null && effect.inputColorSpace !== data.colorSpace) { fragmentMainImage += (effect.inputColorSpace === SRGBColorSpace) ? - "color0 = LinearTosRGB(color0);\n\t" : + "color0 = sRGBTransferOETF(color0);\n\t" : "color0 = sRGBToLinear(color0);\n\t"; } diff --git a/src/passes/GaussianBlurPass.js b/src/passes/GaussianBlurPass.js index 8bccdf6e8..44aeceb70 100644 --- a/src/passes/GaussianBlurPass.js +++ b/src/passes/GaussianBlurPass.js @@ -1,8 +1,7 @@ -import { UnsignedByteType, WebGLRenderTarget } from "three"; -import { Resolution } from "../core/index.js"; -import { SRGBColorSpace } from "../enums/index.js"; -import { CopyMaterial, GaussianBlurMaterial } from "../materials/index.js"; -import { getOutputColorSpace, setTextureColorSpace } from "../utils/index.js"; +import { SRGBColorSpace, UnsignedByteType, WebGLRenderTarget } from "three"; +import { Resolution } from "../core/Resolution.js"; +import { CopyMaterial } from "../materials/CopyMaterial.js"; +import { GaussianBlurMaterial } from "../materials/GaussianBlurMaterial.js"; import { Pass } from "./Pass.js"; /** @@ -182,10 +181,10 @@ export class GaussianBlurPass extends Pass { this.blurMaterial.defines.FRAMEBUFFER_PRECISION_HIGH = "1"; this.copyMaterial.defines.FRAMEBUFFER_PRECISION_HIGH = "1"; - } else if(getOutputColorSpace(renderer) === SRGBColorSpace) { + } else if(renderer !== null && renderer.outputColorSpace === SRGBColorSpace) { - setTextureColorSpace(this.renderTargetA.texture, SRGBColorSpace); - setTextureColorSpace(this.renderTargetB.texture, SRGBColorSpace); + this.renderTargetA.texture.colorSpace = SRGBColorSpace; + this.renderTargetB.texture.colorSpace = SRGBColorSpace; } diff --git a/src/passes/KawaseBlurPass.js b/src/passes/KawaseBlurPass.js index 18f21f0eb..6e17b4e8a 100644 --- a/src/passes/KawaseBlurPass.js +++ b/src/passes/KawaseBlurPass.js @@ -1,8 +1,8 @@ -import { UnsignedByteType, WebGLRenderTarget } from "three"; -import { Resolution } from "../core/index.js"; -import { KernelSize, SRGBColorSpace } from "../enums/index.js"; -import { CopyMaterial, KawaseBlurMaterial } from "../materials/index.js"; -import { getOutputColorSpace, setTextureColorSpace } from "../utils/index.js"; +import { SRGBColorSpace, UnsignedByteType, WebGLRenderTarget } from "three"; +import { Resolution } from "../core/Resolution.js"; +import { KernelSize } from "../enums/KernelSize.js"; +import { CopyMaterial } from "../materials/CopyMaterial.js"; +import { KawaseBlurMaterial } from "../materials/KawaseBlurMaterial.js"; import { Pass } from "./Pass.js"; /** @@ -397,10 +397,10 @@ export class KawaseBlurPass extends Pass { this.blurMaterial.defines.FRAMEBUFFER_PRECISION_HIGH = "1"; this.copyMaterial.defines.FRAMEBUFFER_PRECISION_HIGH = "1"; - } else if(getOutputColorSpace(renderer) === SRGBColorSpace) { + } else if(renderer !== null && renderer.outputColorSpace === SRGBColorSpace) { - setTextureColorSpace(this.renderTargetA.texture, SRGBColorSpace); - setTextureColorSpace(this.renderTargetB.texture, SRGBColorSpace); + this.renderTargetA.texture.colorSpace = SRGBColorSpace; + this.renderTargetB.texture.colorSpace = SRGBColorSpace; } diff --git a/src/passes/LuminancePass.js b/src/passes/LuminancePass.js index 7e6a22597..506a711f1 100644 --- a/src/passes/LuminancePass.js +++ b/src/passes/LuminancePass.js @@ -1,6 +1,6 @@ import { UnsignedByteType, WebGLRenderTarget } from "three"; -import { Resolution } from "../core/index.js"; -import { LuminanceMaterial } from "../materials/index.js"; +import { Resolution } from "../core/Resolution.js"; +import { LuminanceMaterial } from "../materials/LuminanceMaterial.js"; import { Pass } from "./Pass.js"; /** diff --git a/src/passes/MipmapBlurPass.js b/src/passes/MipmapBlurPass.js index 39566b7c1..9a0d5065d 100644 --- a/src/passes/MipmapBlurPass.js +++ b/src/passes/MipmapBlurPass.js @@ -1,7 +1,6 @@ -import { UnsignedByteType, Vector2, WebGLRenderTarget } from "three"; -import { SRGBColorSpace } from "../enums/index.js"; -import { DownsamplingMaterial, UpsamplingMaterial } from "../materials/index.js"; -import { getOutputColorSpace, setTextureColorSpace } from "../utils/index.js"; +import { SRGBColorSpace, UnsignedByteType, Vector2, WebGLRenderTarget } from "three"; +import { DownsamplingMaterial } from "../materials/DownsamplingMaterial.js"; +import { UpsamplingMaterial } from "../materials/UpsamplingMaterial.js"; import { Pass } from "./Pass.js"; /** @@ -39,6 +38,7 @@ export class MipmapBlurPass extends Pass { * The mipmaps used for downsampling. * * @type {WebGLRenderTarget[]} + * @private * @readonly */ @@ -48,6 +48,7 @@ export class MipmapBlurPass extends Pass { * The mipmaps used for upsampling. * * @type {WebGLRenderTarget[]} + * @private * @readonly */ @@ -264,11 +265,11 @@ export class MipmapBlurPass extends Pass { this.downsamplingMaterial.defines.FRAMEBUFFER_PRECISION_HIGH = "1"; this.upsamplingMaterial.defines.FRAMEBUFFER_PRECISION_HIGH = "1"; - } else if(getOutputColorSpace(renderer) === SRGBColorSpace) { + } else if(renderer !== null && renderer.outputColorSpace === SRGBColorSpace) { for(const mipmap of mipmaps) { - setTextureColorSpace(mipmap.texture, SRGBColorSpace); + mipmap.texture.colorSpace = SRGBColorSpace; } diff --git a/src/passes/NormalPass.js b/src/passes/NormalPass.js index 421f435e0..2e2ebdfe7 100644 --- a/src/passes/NormalPass.js +++ b/src/passes/NormalPass.js @@ -1,5 +1,5 @@ import { Color, MeshNormalMaterial, NearestFilter, WebGLRenderTarget } from "three"; -import { Resolution } from "../core/index.js"; +import { Resolution } from "../core/Resolution.js"; import { RenderPass } from "./RenderPass.js"; import { Pass } from "./Pass.js"; diff --git a/src/passes/Pass.js b/src/passes/Pass.js index 5039c9373..ebf741eca 100644 --- a/src/passes/Pass.js +++ b/src/passes/Pass.js @@ -2,52 +2,24 @@ import { BasicDepthPacking, BufferAttribute, BufferGeometry, - Camera, Material, Mesh, + OrthographicCamera, Scene, Texture, WebGLRenderTarget } from "three"; -const dummyCamera = /* @__PURE__ */ new Camera(); -let geometry = null; - -/** - * Returns a shared fullscreen triangle. - * - * The screen size is 2x2 units (NDC). A triangle needs to be 4x4 units to fill the screen. - * - * @private - * @return {BufferGeometry} The fullscreen geometry. - */ - -function getFullscreenTriangle() { - - if(geometry === null) { - - const vertices = new Float32Array([-1, -1, 0, 3, -1, 0, -1, 3, 0]); - const uvs = new Float32Array([0, 0, 2, 0, 0, 2]); - geometry = new BufferGeometry(); - - // Added for backward compatibility (setAttribute was added in three r110). - if(geometry.setAttribute !== undefined) { - - geometry.setAttribute("position", new BufferAttribute(vertices, 3)); - geometry.setAttribute("uv", new BufferAttribute(uvs, 2)); - - } else { - - geometry.addAttribute("position", new BufferAttribute(vertices, 3)); - geometry.addAttribute("uv", new BufferAttribute(uvs, 2)); - - } - - } +const fullscreenGeometry = /* @__PURE__ */ (() => { + const vertices = new Float32Array([-1, -1, 0, 3, -1, 0, -1, 3, 0]); + const uvs = new Float32Array([0, 0, 2, 0, 0, 2]); + const geometry = new BufferGeometry(); + geometry.setAttribute("position", new BufferAttribute(vertices, 3)); + geometry.setAttribute("uv", new BufferAttribute(uvs, 2)); return geometry; -} +})(); /** * An abstract pass. @@ -62,6 +34,21 @@ function getFullscreenTriangle() { export class Pass { + /** + * A shared fullscreen triangle. + * + * The screen size is 2x2 units (NDC). A triangle needs to be 4x4 units to fill the screen. + * @see https://michaldrobot.com/2014/04/01/gcn-execution-patterns-in-full-screen-passes/ + * @type {BufferGeometry} + * @internal + */ + + static get fullscreenGeometry() { + + return fullscreenGeometry; + + } + /** * Constructs a new pass. * @@ -70,7 +57,7 @@ export class Pass { * @param {Camera} [camera] - A camera. Fullscreen effect passes don't require a camera. */ - constructor(name = "Pass", scene = new Scene(), camera = dummyCamera) { + constructor(name = "Pass", scene = new Scene(), camera = new OrthographicCamera()) { /** * The name of this pass. @@ -129,9 +116,9 @@ export class Pass { /** * Only relevant for subclassing. * - * Indicates whether the {@link EffectComposer} should swap the frame buffers after this pass has finished - * rendering. Set this to `false` if this pass doesn't render to the output buffer or the screen. Otherwise, the - * contents of the input buffer will be lost. + * Controls whether the {@link EffectComposer} should swap the frame buffers after this pass has finished rendering. + * Set this to `false` if this pass doesn't render to the output buffer or the screen. Otherwise, the contents of + * the input buffer will be lost. * * @type {Boolean} */ @@ -141,7 +128,18 @@ export class Pass { /** * Only relevant for subclassing. * - * Indicates whether the {@link EffectComposer} should prepare a depth texture for this pass. + * Controls whether the {@link EffectComposer} should copy the depth buffer after this pass has finished rendering. + * Default is `false`. + * + * @type {Boolean} + */ + + this.needsDepthBlit = false; + + /** + * Only relevant for subclassing. + * + * Controls whether the {@link EffectComposer} should prepare a depth texture for this pass. * Set this to `true` if this pass relies on depth information from a preceding {@link RenderPass}. * * @type {Boolean} @@ -268,7 +266,7 @@ export class Pass { } else { - screen = new Mesh(getFullscreenTriangle(), value); + screen = new Mesh(Pass.fullscreenGeometry, value); screen.frustumCulled = false; if(this.scene === null) { @@ -406,6 +404,12 @@ export class Pass { } + if(this.fullscreenMaterial !== null) { + + this.fullscreenMaterial.dispose(); + + } + } } diff --git a/src/passes/RenderPass.js b/src/passes/RenderPass.js index 9ea05a517..0ca833126 100644 --- a/src/passes/RenderPass.js +++ b/src/passes/RenderPass.js @@ -1,4 +1,4 @@ -import { OverrideMaterialManager } from "../core/index.js"; +import { OverrideMaterialManager } from "../core/OverrideMaterialManager.js"; import { ClearPass } from "./ClearPass.js"; import { Pass } from "./Pass.js"; @@ -23,6 +23,7 @@ export class RenderPass extends Pass { super("RenderPass", scene, camera); this.needsSwap = false; + this.needsDepthBlit = true; /** * A clear pass. diff --git a/src/passes/TiltShiftBlurPass.js b/src/passes/TiltShiftBlurPass.js index 1bdd9d38e..381fe2353 100644 --- a/src/passes/TiltShiftBlurPass.js +++ b/src/passes/TiltShiftBlurPass.js @@ -1,6 +1,6 @@ -import { Resolution } from "../core/index.js"; -import { KernelSize } from "../enums/index.js"; -import { TiltShiftBlurMaterial } from "../materials/index.js"; +import { Resolution } from "../core/Resolution.js"; +import { KernelSize } from "../enums/KernelSize.js"; +import { TiltShiftBlurMaterial } from "../materials/TiltShiftBlurMaterial.js"; import { KawaseBlurPass } from "./KawaseBlurPass.js"; /** diff --git a/src/textures/ASCIITexture.js b/src/textures/ASCIITexture.js new file mode 100644 index 000000000..1b85a4ad0 --- /dev/null +++ b/src/textures/ASCIITexture.js @@ -0,0 +1,75 @@ +import { CanvasTexture, RepeatWrapping } from "three"; + +/** + * An ASCII character lookup texture. + */ + +export class ASCIITexture extends CanvasTexture { + + /** + * Constructs a new ASCII texture. + * + * @param {Object} [options] - The options. + * @param {String} [options.characters] - The character set to render. Defaults to a common ASCII art charset. + * @param {String} [options.font="Arial"] - The font. + * @param {Number} [options.fontSize=54] - The font size in pixels. + * @param {Number} [options.size=1024] - The texture size. + * @param {Number} [options.cellCount=16] - The cell count along each side of the texture. + */ + + constructor({ + characters = " .:,'-^=*+?!|0#X%WM@", + font = "Arial", + fontSize = 54, + size = 1024, + cellCount = 16 + } = {}) { + + super( + document.createElement("canvas"), + undefined, + RepeatWrapping, + RepeatWrapping + ); + + const canvas = this.image; + canvas.width = canvas.height = size; + + const context = canvas.getContext("2d"); + const cellSize = size / cellCount; + context.font = `${fontSize}px ${font}`; + context.textAlign = "center"; + context.textBaseline = "middle"; + context.fillStyle = "#ffffff"; + + for(let i = 0, l = characters.length; i < l; ++i) { + + const char = characters[i]; + const x = i % cellCount; + const y = Math.floor(i / cellCount); + + context.fillText(char, x * cellSize + cellSize / 2, y * cellSize + cellSize / 2); + + } + + /** + * The amount of characters in this texture. + * + * @type {Number} + * @readonly + */ + + this.characterCount = characters.length; + + /** + * The cell count along each side of the texture. + * + * @type {Number} + * @readonly + */ + + this.cellCount = cellCount; + + } + +} diff --git a/src/textures/NoiseTexture.js b/src/textures/NoiseTexture.js index b8c9ce4bb..c538ca109 100644 --- a/src/textures/NoiseTexture.js +++ b/src/textures/NoiseTexture.js @@ -1,6 +1,5 @@ import { DataTexture, - LuminanceFormat, RedFormat, RGFormat, RGBAFormat, @@ -20,7 +19,6 @@ import { function getNoise(size, format, type) { const channels = new Map([ - [LuminanceFormat, 1], [RedFormat, 1], [RGFormat, 2], [RGBAFormat, 4] @@ -69,16 +67,15 @@ export class NoiseTexture extends DataTexture { /** * Constructs a new noise texture. * - * The texture format can be either `LuminanceFormat` or `RGBAFormat`. Additionally, the formats `RedFormat` and - * `RGFormat` can be used in a WebGL 2 context. + * Supported formats are `RGBAFormat`, `RedFormat` and `RGFormat`. * * @param {Number} width - The width. * @param {Number} height - The height. - * @param {Number} [format=LuminanceFormat] - The texture format. + * @param {Number} [format=RedFormat] - The texture format. * @param {Number} [type=UnsignedByteType] - The texture type. */ - constructor(width, height, format = LuminanceFormat, type = UnsignedByteType) { + constructor(width, height, format = RedFormat, type = UnsignedByteType) { super(getNoise(width * height, format, type), width, height, format, type); this.needsUpdate = true; diff --git a/src/textures/RawImageData.js b/src/textures/RawImageData.js index 51500baa8..753f56b71 100644 --- a/src/textures/RawImageData.js +++ b/src/textures/RawImageData.js @@ -4,7 +4,7 @@ * @private * @param {Number} width - The image width. * @param {Number} height - The image height. - * @param {Uint8ClampedArray|Image} data - The image data. + * @param {Uint8ClampedArray|Image} data - The image data. * @return {Canvas} The canvas. */ @@ -45,7 +45,7 @@ export class RawImageData { * * @param {Number} [width=0] - The width of the image. * @param {Number} [height=0] - The height of the image. - * @param {Uint8ClampedArray} [data=null] - The image data. + * @param {Uint8ClampedArray} [data=null] - The image data. */ constructor(width = 0, height = 0, data = null) { @@ -69,7 +69,7 @@ export class RawImageData { /** * The RGBA image data. * - * @type {Uint8ClampedArray} + * @type {Uint8ClampedArray} */ this.data = data; diff --git a/src/textures/index.js b/src/textures/index.js index 87a14a2f4..82e38459a 100644 --- a/src/textures/index.js +++ b/src/textures/index.js @@ -1,5 +1,6 @@ export * from "./lut/index.js"; export * from "./smaa/index.js"; +export * from "./ASCIITexture.js"; export * from "./NoiseTexture.js"; export * from "./RawImageData.js"; diff --git a/src/textures/lut/LookupTexture.js b/src/textures/lut/LookupTexture.js index 546bf0878..2a53edcde 100644 --- a/src/textures/lut/LookupTexture.js +++ b/src/textures/lut/LookupTexture.js @@ -5,15 +5,16 @@ import { Data3DTexture, FloatType, LinearFilter, + LinearSRGBColorSpace, RGBAFormat, + SRGBColorSpace, UnsignedByteType, Vector3 } from "three"; -import { LinearSRGBColorSpace, LUTOperation, SRGBColorSpace } from "../../enums/index.js"; -import { copyTextureColorSpace, setTextureColorSpace } from "../../utils/index.js"; +import { LUTOperation } from "../../enums/LUTOperation.js"; import { RawImageData } from "../RawImageData.js"; -import workerProgram from "../../../tmp/lut/worker.txt"; +import workerProgram from "../../../temp/lut/worker.txt"; const c = /* @__PURE__ */ new Color(); @@ -46,7 +47,7 @@ export class LookupTexture extends Data3DTexture { this.unpackAlignment = 1; this.needsUpdate = true; - setTextureColorSpace(this, LinearSRGBColorSpace); + this.colorSpace = LinearSRGBColorSpace; /** * The lower bounds of the input domain. @@ -109,7 +110,7 @@ export class LookupTexture extends Data3DTexture { worker.addEventListener("message", (event) => { const lut = new LookupTexture(event.data, size); - copyTextureColorSpace(this, lut); + this.colorSpace = lut.colorSpace; lut.type = this.type; lut.name = this.name; @@ -283,7 +284,7 @@ export class LookupTexture extends Data3DTexture { } - setTextureColorSpace(this, SRGBColorSpace); + this.colorSpace = SRGBColorSpace; this.needsUpdate = true; } else { @@ -314,7 +315,7 @@ export class LookupTexture extends Data3DTexture { } - setTextureColorSpace(this, LinearSRGBColorSpace); + this.colorSpace = LinearSRGBColorSpace; this.needsUpdate = true; } else { @@ -351,7 +352,7 @@ export class LookupTexture extends Data3DTexture { texture.generateMipmaps = false; texture.needsUpdate = true; - copyTextureColorSpace(this, texture); + this.colorSpace = texture.colorSpace; return texture; @@ -426,7 +427,7 @@ export class LookupTexture extends Data3DTexture { lut.type = texture.type; lut.name = texture.name; - copyTextureColorSpace(texture, lut); + texture.colorSpace = lut.colorSpace; return lut; diff --git a/src/textures/lut/worker.js b/src/textures/lut/worker.js index 55d23122d..dcf4737b4 100644 --- a/src/textures/lut/worker.js +++ b/src/textures/lut/worker.js @@ -1,4 +1,4 @@ -import { LUTOperation } from "../../enums/index.js"; +import { LUTOperation } from "../../enums/LUTOperation.js"; import { TetrahedralUpscaler } from "./TetrahedralUpscaler.js"; /** diff --git a/src/textures/smaa/SMAAImageGenerator.js b/src/textures/smaa/SMAAImageGenerator.js index 7b453f0f7..23a9a2e43 100644 --- a/src/textures/smaa/SMAAImageGenerator.js +++ b/src/textures/smaa/SMAAImageGenerator.js @@ -1,6 +1,6 @@ import { LoadingManager } from "three"; import { RawImageData } from "../RawImageData.js"; -import workerProgram from "../../../tmp/smaa/worker.txt"; +import workerProgram from "../../../temp/smaa/worker.txt"; /** * Generates the SMAA data images. diff --git a/src/textures/smaa/areaImageDataURL.js b/src/textures/smaa/areaImageDataURL.js index 65db07c48..cc3ebf438 100644 --- a/src/textures/smaa/areaImageDataURL.js +++ b/src/textures/smaa/areaImageDataURL.js @@ -1,3 +1,3 @@ // Generated with SMAAAreaImageData.generate().toCanvas().toDataURL(). -/* eslint-disable max-len */ +/* eslint-disable @stylistic/max-len */ export default "data:image/png;base64,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"; diff --git a/src/textures/smaa/searchImageDataURL.js b/src/textures/smaa/searchImageDataURL.js index b104b9c2a..58255522e 100644 --- a/src/textures/smaa/searchImageDataURL.js +++ b/src/textures/smaa/searchImageDataURL.js @@ -1,3 +1,3 @@ // Generated with SMAASearchImageData.generate().toCanvas().toDataURL(), cropped, high dynamic range. -/* eslint-disable max-len */ +/* eslint-disable @stylistic/max-len */ export default "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAQCAYAAACm53kpAAAAeElEQVRYR+2XSwqAMAxEJ168ePEqwRSKhIIiuHjJqiU0gWE+1CQdApcVAMUAuARaMGCX1MIL/Ow13++9lW2s3mW9MWvsnWc/2fvGygwPAN4E8QzAA4CXAB6AHjG4JTHYI1ey3pcx6FHnEfhLDOIBKAmUBK6/ANUDTlROXAHd9EC1AAAAAElFTkSuQmCC"; diff --git a/src/utils/BackCompat.js b/src/utils/BackCompat.js deleted file mode 100644 index e411db91f..000000000 --- a/src/utils/BackCompat.js +++ /dev/null @@ -1,151 +0,0 @@ -import { LinearEncoding, REVISION, sRGBEncoding } from "three"; -import { LinearSRGBColorSpace, SRGBColorSpace, ToneMappingMode } from "../enums/index.js"; - -const revision = Number(REVISION.replace(/\D+/g, "")); -const useColorSpace = revision >= 152; - -/** - * @ignore - */ - -const encodingToColorSpace = new Map([ - [LinearEncoding, LinearSRGBColorSpace], - [sRGBEncoding, SRGBColorSpace] -]); - -/** - * @ignore - */ - -const colorSpaceToEncoding = new Map([ - [LinearSRGBColorSpace, LinearEncoding], - [SRGBColorSpace, sRGBEncoding] -]); - -export { encodingToColorSpace, colorSpaceToEncoding }; - -/** - * Returns the output color space of the given renderer. - * - * @param {WebGLRenderer} renderer - A renderer. - * @return {ColorSpace} The output color space, or null if the renderer is null. - * @ignore - */ - -export function getOutputColorSpace(renderer) { - - return renderer === null ? null : useColorSpace ? - renderer.outputColorSpace : encodingToColorSpace.get(renderer.outputEncoding); - -} - -/** - * Sets the color space of a given texture. - * - * @param {Texture} texture - A texture. - * @param {ColorSpace} colorSpace - The color space. - * @ignore - */ - -export function setTextureColorSpace(texture, colorSpace) { - - if(texture === null) { - - return; - - } - - if(useColorSpace) { - - texture.colorSpace = colorSpace; - - } else { - - texture.encoding = colorSpaceToEncoding.get(colorSpace); - - } - -} - -/** - * Copies the color space of a source texture to a destination texture. - * - * @param {Texture} src - The source texture. - * @param {Texture} dest - The destination texture. - * @ignore - */ - -export function copyTextureColorSpace(src, dest) { - - if(src === null || dest === null) { - - return; - - } - - if(useColorSpace) { - - dest.colorSpace = src.colorSpace; - - } else { - - dest.encoding = src.encoding; - - } - -} - -/** - * Updates the given fragment shader for the current version of three. - * - * @param {String} fragmentShader - A fragment shader. - * @return {String} The modified fragment shader. - * @ignore - */ - -export function updateFragmentShader(fragmentShader) { - - if(revision < 154) { - - return fragmentShader.replace("colorspace_fragment", "encodings_fragment"); - - } - - return fragmentShader; - -} - -/** - * Updates the given vertex shader for the current version of three. - * - * @param {String} vertexShader - A vertex shader. - * @return {String} The modified vertex shader. - * @ignore - */ - -export function updateVertexShader(vertexShader) { - - return vertexShader; - -} - -/** - * Validates the given tone mapping mode against the current version of three. - * - * @param {ToneMappingMode} mode - A tone mapping mode. - * @return {ToneMappingMode} The validated tone mapping mode. - * @ignore - */ - -export function validateToneMappingMode(mode) { - - if(revision < 160 && mode === ToneMappingMode.AGX) { - - console.warn("AgX requires three r160 or higher, falling back to ACES filmic"); - mode = ToneMappingMode.ACES_FILMIC; - - } - - return mode; - -} diff --git a/src/utils/IdManager.js b/src/utils/IdManager.js new file mode 100644 index 000000000..c164cebd3 --- /dev/null +++ b/src/utils/IdManager.js @@ -0,0 +1,49 @@ +/** + * An ID manager. + */ + +export class IdManager { + + /** + * Constructs a new ID manager. + * + * @param initialId - The first ID. + */ + + constructor(initialId = 0) { + + /** + * The next ID. + */ + + this.nextId = initialId; + + } + + /** + * Returns the next unique ID. + * + * @return The ID. + */ + + getNextId() { + + return this.nextId++; + + } + + /** + * Resets the ID counter. + * + * @param initialId - The first ID. + * @return This manager. + */ + + reset(initialId = 0) { + + this.nextId = initialId; + return this; + + } + +} diff --git a/src/utils/index.js b/src/utils/index.js index ad929705d..049274526 100644 --- a/src/utils/index.js +++ b/src/utils/index.js @@ -1,3 +1,4 @@ -export * from "./BackCompat.js"; export * from "./orthographicDepthToViewZ.js"; export * from "./viewZToOrthographicDepth.js"; + +export * from "./IdManager.js"; diff --git a/test/core/Timer.js b/test/core/Timer.js index 857d6a899..115e9130a 100644 --- a/test/core/Timer.js +++ b/test/core/Timer.js @@ -1,36 +1,8 @@ import test from "ava"; import { Timer } from "postprocessing"; -const SECONDS_TO_MILLISECONDS = 1e3; - -function sleep(ms = 0) { - - return new Promise(resolve => setTimeout(resolve, ms)); - -} - test("can be instantiated", t => { t.truthy(new Timer()); }); - -test("tracks time correctly", async t => { - - const timer1 = new Timer(); - t.is(timer1.elapsed, 0); - timer1.update(); - t.is(Math.round(timer1.elapsed * SECONDS_TO_MILLISECONDS), 0); - await sleep(1); - timer1.update(); - t.true(Math.round(timer1.elapsed * SECONDS_TO_MILLISECONDS) > 0); - - const timer2 = new Timer(); - t.is(timer2.elapsed, 0); - timer2.update(); - t.is(Math.round(timer2.elapsed * SECONDS_TO_MILLISECONDS), 0); - await sleep(1); - timer2.update(); - t.true(Math.round(timer2.elapsed * SECONDS_TO_MILLISECONDS) > 0); - -}); diff --git a/test/effects/ASCIIEffect.js b/test/effects/ASCIIEffect.js new file mode 100644 index 000000000..399ffac3e --- /dev/null +++ b/test/effects/ASCIIEffect.js @@ -0,0 +1,11 @@ +import test from "ava"; +import { ASCIIEffect } from "postprocessing"; + +test("can be created and destroyed", t => { + + const object = new ASCIIEffect({ asciiTexture: null }); + object.dispose(); + + t.pass(); + +}); diff --git a/test/effects/DepthOfFieldEffect.js b/test/effects/DepthOfFieldEffect.js index 1aa73ce7b..3c89abfda 100644 --- a/test/effects/DepthOfFieldEffect.js +++ b/test/effects/DepthOfFieldEffect.js @@ -1,9 +1,10 @@ import test from "ava"; +import { PerspectiveCamera } from "three"; import { DepthOfFieldEffect } from "postprocessing"; test("can be created and destroyed", t => { - const object = new DepthOfFieldEffect(null); + const object = new DepthOfFieldEffect(new PerspectiveCamera()); object.dispose(); t.pass(); diff --git a/tsconfig.json b/tsconfig.json index b25ef9c4d..29cb9e195 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,21 +1,25 @@ { - "include": ["./src", "./demo/src", "./manual/js"], + "include": [ + "./src", + "./demo/src", + "./manual/js", + "./types" + ], "compilerOptions": { "baseUrl": ".", "outDir": "./build", - "paths": { - "postprocessing": ["./src/index.js"] - }, - "moduleResolution": "node", - "module": "ESNext", - "target": "ESNext", + "moduleResolution": "bundler", + "module": "es2022", + "target": "es2022", "strict": true, "allowJs": true, "sourceMap": false, "skipLibCheck": true, - "importHelpers": true, - "downlevelIteration": true, + "resolveJsonModule": true, "noImplicitOverride": true, - "allowSyntheticDefaultImports": true + "paths": { + "postprocessing": ["./src/index.js"], + "temp": ["./temp"] + } } } diff --git a/tsconfig.types.json b/tsconfig.types.json new file mode 100644 index 000000000..de68b4811 --- /dev/null +++ b/tsconfig.types.json @@ -0,0 +1,7 @@ +{ + "extends": "./tsconfig.json", + "include": ["./types/index.d.ts"], + "compilerOptions": { + "noEmit": true + } +} diff --git a/types/index.d.ts b/types/index.d.ts index 2f44e0c96..7aafba1d7 100644 --- a/types/index.d.ts +++ b/types/index.d.ts @@ -1,9210 +1,9370 @@ -declare module "postprocessing" { - import { - Vector2, - WebGLRenderer, - Camera, - PerspectiveCamera, - Texture, - Material, - WebGLRenderTarget, - Scene, - Uniform, - Object3D, - Vector3, - ShaderMaterial, - DataTexture, - Mesh, - Points, - Loader, - DepthPackingStrategies, - DepthModes, - EventDispatcher, - Color, - ColorSpace, - TextureEncoding, - Data3DTexture - } from "three"; - - /** - * A color channel enumeration. +import { + Vector2, + WebGLRenderer, + Camera, + PerspectiveCamera, + Texture, + Material, + WebGLRenderTarget, + Scene, + Uniform, + Object3D, + Vector3, + ShaderMaterial, + DataTexture, + Mesh, + Points, + Loader, + DepthPackingStrategies, + DepthModes, + EventDispatcher, + Color, + ColorSpace, + Data3DTexture, + BaseEvent, + CanvasTexture, + Vector4 +} from "three"; + +/** + * Common events. + */ + +export interface BaseEventMap { + + change: BaseEvent; + +} + +/** + * A color channel enumeration. + * + * @type {Object} + * @property {Number} RED - Red. + * @property {Number} GREEN - Green. + * @property {Number} BLUE - Blue. + * @property {Number} ALPHA - Alpha. + */ +export enum ColorChannel { + RED, + GREEN, + BLUE, + ALPHA +} + +/** + * The Disposable contract. + * + * Implemented by objects that can free internal resources. + * + * @interface + */ +export interface Disposable { + + /** + * Frees internal resources. + */ + dispose(): void; + +} + +/** + * The initializable contract. + * + * Implemented by objects that can be initialized. + * + * @interface + */ +export interface Initializable { + + /** + * Performs initialization tasks. + * + * @param {WebGLRenderer} renderer - A renderer. + * @param {Boolean} alpha - Whether the renderer uses the alpha channel. + * @param {Number} frameBufferType - The type of the main frame buffers. + */ + initialize( + renderer: WebGLRenderer, + alpha: boolean, + frameBufferType: number + ): void; + +} + +/** + * A Gauss kernel. + * + * Based on https://github.com/Jam3/glsl-fast-gaussian-blur. + */ +export class GaussKernel { + + /** + * Constructs a new Gauss kernel. + * + * @param kernelSize - The kernel size. Should be an odd number in the range [3, 1020]. + * @param [edgeBias=2] - Determines how many edge coefficients should be cut off for increased accuracy. + */ + constructor(kernelSize: number, edgeBias: number); + +} +/** + * An adaptive luminance shader material. + */ +export class AdaptiveLuminanceMaterial extends ShaderMaterial { + + /** + * Constructs a new adaptive luminance material. + */ + constructor(); + /** + * The primary luminance buffer that contains the downsampled average luminance. + * + * @type {Texture} + */ + set luminanceBuffer0(arg: Texture); + /** + * Sets the primary luminance buffer that contains the downsampled average luminance. + * + * @deprecated Use luminanceBuffer0 instead. + * @param {Texture} value - The buffer. + */ + setLuminanceBuffer0(value: Texture): void; + /** + * The secondary luminance buffer. + * + * @type {Texture} + */ + set luminanceBuffer1(arg: Texture); + /** + * Sets the secondary luminance buffer. + * + * @deprecated Use luminanceBuffer1 instead. + * @param {Texture} value - The buffer. + */ + setLuminanceBuffer1(value: Texture): void; + /** + * The 1x1 mipmap level. + * + * This level is used to identify the smallest mipmap of the primary luminance buffer. + * + * @type {Number} + */ + set mipLevel1x1(arg: number); + /** + * Sets the 1x1 mipmap level. + * + * @deprecated Use mipLevel1x1 instead. + * @param {Number} value - The level. + */ + setMipLevel1x1(value: number): void; + /** + * The delta time. + * + * @type {Number} + */ + set deltaTime(arg: number); + /** + * Sets the delta time. + * + * @deprecated Use deltaTime instead. + * @param {Number} value - The delta time. + */ + setDeltaTime(value: number): void; + set minLuminance(arg: number); + /** + * The lowest possible luminance value. + * + * @type {Number} + */ + get minLuminance(): number; + /** + * Returns the lowest possible luminance value. + * + * @deprecated Use minLuminance instead. + * @return {Number} The minimum luminance. + */ + getMinLuminance(): number; + /** + * Sets the minimum luminance. + * + * @deprecated Use minLuminance instead. + * @param {Number} value - The minimum luminance. + */ + setMinLuminance(value: number): void; + set adaptationRate(arg: number); + /** + * The luminance adaptation rate. + * + * @type {Number} + */ + get adaptationRate(): number; + /** + * Returns the luminance adaptation rate. + * + * @deprecated Use adaptationRate instead. + * @return {Number} The adaptation rate. + */ + getAdaptationRate(): number; + /** + * Sets the luminance adaptation rate. + * + * @deprecated Use adaptationRate instead. + * @param {Number} value - The adaptation rate. + */ + setAdaptationRate(value: number): void; + +} + +/** + * A bokeh disc blur material. + * + * This material should be applied twice in a row, with `fill` mode enabled for the second pass. Enabling the + * `foreground` option causes the shader to combine the near and far CoC values around foreground objects. + * + * @implements {Resizable} + */ +export class BokehMaterial extends ShaderMaterial implements Resizable { + + /** + * Constructs a new bokeh material. + * + * @param {Boolean} [fill=false] - Enables or disables the bokeh highlight fill mode. + * @param {Boolean} [foreground=false] - Determines whether this material will be applied to foreground colors. + */ + constructor(fill?: boolean, foreground?: boolean); + /** + * The input buffer. + * + * @type {Texture} + */ + set inputBuffer(arg: Texture); + /** + * Sets the input buffer. + * + * @deprecated Use inputBuffer instead. + * @param {Texture} value - The buffer. + */ + setInputBuffer(value: Texture): void; + /** + * The circle of confusion buffer. + * + * @type {Texture} + */ + set cocBuffer(arg: Texture); + /** + * Sets the circle of confusion buffer. + * + * @deprecated Use cocBuffer instead. + * @param {Texture} value - The buffer. + */ + setCoCBuffer(value: Texture): void; + set scale(arg: number); + /** + * The blur scale. + * + * @type {Number} + */ + get scale(): number; + /** + * Returns the blur scale. + * + * @deprecated Use scale instead. + * @return {Number} The scale. + */ + getScale(value: number): number; + /** + * Sets the blur scale. + * + * @deprecated Use scale instead. + * @param {Number} value - The scale. + */ + setScale(value: number): void; + /** + * Sets the texel size. + * + * @deprecated Use setSize() instead. + * @param {Number} x - The texel width. + * @param {Number} y - The texel height. + */ + setTexelSize(x: number, y: number): void; + /** + * Sets the size of this object. + * + * @param {Number} width - The width. + * @param {Number} height - The height. + */ + setSize(width: number, height: number): void; + +} + +/** + * A Circle of Confusion shader material. + */ +export class CircleOfConfusionMaterial extends ShaderMaterial { + + /** + * Constructs a new CoC material. + * + * @param {Camera} camera - A camera. + */ + constructor(camera: Camera); + /** + * The depth buffer. + * + * @type {Texture} + */ + set depthBuffer(arg: Texture); + /** + * The depth packing strategy. + * + * @type {DepthPackingStrategies} + */ + set depthPacking(arg: DepthPackingStrategies); + /** + * Sets the depth buffer. + * + * @deprecated Use depthBuffer and depthPacking instead. + * @param {Texture} buffer - The depth texture. + * @param {DepthPackingStrategies} [depthPacking=BasicDepthPacking] - The depth packing strategy. + */ + setDepthBuffer( + buffer: Texture, + depthPacking?: DepthPackingStrategies + ): void; + /** + * The focus distance in world units. + * + * @type {Number} + */ + get focusDistance(): number; + set focusDistance(arg: number); + /** + * Returns the focus distance. + * + * @deprecated Use focusDistance instead. + * @return {Number} The focus distance. + */ + getFocusDistance(value: number): number; + /** + * Sets the focus distance. + * + * @deprecated Use focusDistance instead. + * @param {Number} value - The focus distance. + */ + setFocusDistance(value: number): void; + /** + * The focal length. + * + * @deprecated Use focusRange instead. + * @type {Number} + */ + get focalLength(): number; + set focalLength(arg: number); + /** + * Returns the focal length. + * + * @deprecated Use focusRange instead. + * @return {Number} The focal length. + */ + getFocalLength(value: number): number; + /** + * Sets the focal length. + * + * @deprecated Use focusRange instead. + * @param {Number} value - The focal length. + */ + setFocalLength(value: number): void; + /** + * Adopts the settings of the given camera. + * + * @param {Camera} camera - A camera. + */ + adoptCameraSettings(camera: Camera): void; + /** + * The focus distance in world units. + * + * @deprecated Use focusDistance instead. + * @type {Number} + */ + get worldFocusDistance(): number; + set worldFocusDistance(value: number); + /** + * The focus range in world units. + * + * @type {Number} + */ + get focusRange(): number; + set focusRange(value: number); + /** + * The focus range in world units. + * + * @deprecated Use focusRange instead. + * @type {Number} + */ + get worldFocusRange(): number; + set worldFocusRange(value: number); +} + +/** + * A blur kernel size enumeration. + * + * @type {Object} + * @property {Number} VERY_SMALL - A very small kernel that matches a 7x7 Gaussian blur kernel. + * @property {Number} SMALL - A small kernel that matches a 15x15 Gaussian blur kernel. + * @property {Number} MEDIUM - A medium sized kernel that matches a 23x23 Gaussian blur kernel. + * @property {Number} LARGE - A large kernel that matches a 35x35 Gaussian blur kernel. + * @property {Number} VERY_LARGE - A very large kernel that matches a 63x63 Gaussian blur kernel. + * @property {Number} HUGE - A huge kernel that matches a 127x127 Gaussian blur kernel. + */ +export enum KernelSize { + VERY_SMALL, + SMALL, + MEDIUM, + LARGE, + VERY_LARGE, + HUGE +} + +/** + * A simple copy shader material. + */ +export class CopyMaterial extends ShaderMaterial { + + /** + * Constructs a new copy material. + */ + constructor(); + /** + * The input buffer. + * + * @type {Texture} + */ + get inputBuffer(): Texture; + set inputBuffer(arg: Texture); + /** + * A depth buffer. + * + * @type {Texture} + */ + get depthBuffer(): Texture; + set depthBuffer(arg: Texture); + /** + * The depth packing strategy of the depth buffer. + * + * @type {DepthPackingStrategies} + */ + set depthPacking(arg: DepthPackingStrategies); + /** + * Indicates whether output color space conversion is enabled. + * + * @type {Boolean} + */ + get colorSpaceConversion(): boolean; + set colorSpaceConversion(value: boolean); + /** + * Color channel weights that modulate texels from the input buffer. + * + * Set to `null` to disable. + * + * @type {Vector4 | null} + */ + get channelWeights(): Vector4 | null; + set channelWeights(arg: Vector4 | null); + /** + * Sets the input buffer. + * + * @deprecated Use inputBuffer instead. + * @param {Number} value - The buffer. + */ + setInputBuffer(value: number): void; + /** + * Returns the opacity. + * + * @deprecated Use opacity instead. + * @return {Number} The opacity. + */ + getOpacity(): number; + /** + * Sets the opacity. + * + * @deprecated Use opacity instead. + * @param {Number} value - The opacity. + */ + setOpacity(value: number): void; + +} + +/** + * A depth comparison shader material. + */ +export class DepthComparisonMaterial extends ShaderMaterial { + + /** + * Constructs a new depth comparison material. + * + * @param {Texture} [depthTexture=null] - A depth texture. + * @param {PerspectiveCamera} [camera] - A camera. + */ + constructor(depthTexture?: Texture, camera?: PerspectiveCamera); + /** + * The depth buffer. + * + * @type {Texture} + */ + set depthBuffer(arg: Texture); + /** + * The depth packing strategy. + * + * @type {DepthPackingStrategies} + */ + set depthPacking(arg: DepthPackingStrategies); + /** + * Sets the depth buffer. + * + * @deprecated Use depthBuffer and depthPacking instead. + * @param {Texture} buffer - The depth texture. + * @param {DepthPackingStrategies} [depthPacking=RGBADepthPacking] - The depth packing strategy. + */ + setDepthBuffer( + buffer: Texture, + depthPacking?: DepthPackingStrategies + ): void; + + /** + * Adopts the settings of the given camera. + * + * @param {Camera} camera - A camera. + */ + adoptCameraSettings(camera: Camera): void; + +} + +/** + * An enumeration of depth copy modes. + * + * @type {Object} + * @property {Number} FULL - Copies the full depth texture every frame. + * @property {Number} SINGLE - Copies a single texel from the depth texture on demand. + */ +export enum DepthCopyMode { + FULL, + SINGLE +} + +/** + * A depth copy shader material. + */ +export class DepthCopyMaterial extends ShaderMaterial { + + /** + * Constructs a new depth copy material. + */ + constructor(); + /** + * The input depth buffer. + * + * @type {Texture} + */ + set depthBuffer(arg: Texture); + /** + * The input depth packing strategy. + * + * @type {DepthPackingStrategies} + */ + set inputDepthPacking(arg: DepthPackingStrategies); + set outputDepthPacking(arg: DepthPackingStrategies); + /** + * The output depth packing strategy. + * + * @type {DepthPackingStrategies} + */ + get outputDepthPacking(): DepthPackingStrategies; + /** + * Sets the input depth buffer. + * + * @deprecated Use depthBuffer and inputDepthPacking instead. + * @param {Texture} buffer - The depth texture. + * @param {DepthPackingStrategies} [depthPacking=BasicDepthPacking] - The depth packing strategy. + */ + setDepthBuffer( + buffer: Texture, + depthPacking?: DepthPackingStrategies + ): void; + + /** + * Returns the current input depth packing strategy. + * + * @deprecated + * @return {DepthPackingStrategies} The input depth packing strategy. + */ + getInputDepthPacking(): DepthPackingStrategies; + /** + * Sets the input depth packing strategy. + * + * @deprecated Use inputDepthPacking instead. + * @param {DepthPackingStrategies} value - The new input depth packing strategy. + */ + setInputDepthPacking(value: DepthPackingStrategies): void; + /** + * Returns the current output depth packing strategy. + * + * @deprecated Use outputDepthPacking instead. + * @return {DepthPackingStrategies} The output depth packing strategy. + */ + getOutputDepthPacking(): DepthPackingStrategies; + /** + * Sets the output depth packing strategy. + * + * @deprecated Use outputDepthPacking instead. + * @param {DepthPackingStrategies} value - The new output depth packing strategy. + */ + setOutputDepthPacking(value: DepthPackingStrategies): void; + /** + * The screen space position used for single-texel copy operations. + * + * @type {Vector2} + */ + get texelPosition(): Vector2; + /** + * Returns the screen space position used for single-texel copy operations. + * + * @deprecated Use texelPosition instead. + * @return {Vector2} The position. + */ + getTexelPosition(): Vector2; + /** + * Sets the screen space position used for single-texel copy operations. + * + * @deprecated + * @param {Vector2} value - The position. + */ + setTexelPosition(value: Vector2): void; + set mode(arg: DepthCopyMode); + /** + * The depth copy mode. + * + * @type {DepthCopyMode} + */ + get mode(): DepthCopyMode; + /** + * Returns the depth copy mode. + * + * @deprecated Use mode instead. + * @return {DepthCopyMode} The depth copy mode. + */ + getMode(): DepthCopyMode; + /** + * Sets the depth copy mode. + * + * @deprecated Use mode instead. + * @param {DepthCopyMode} value - The new mode. + */ + setMode(value: DepthCopyMode): void; + +} + +/** + * A depth downsampling shader material. + * + * Based on an article by Eleni Maria Stea: + * https://eleni.mutantstargoat.com/hikiko/depth-aware-upsampling-6 + * + * @implements {Resizable} + */ +export class DepthDownsamplingMaterial + extends ShaderMaterial + implements Resizable { + + /** + * Constructs a new depth downsampling material. + */ + constructor(); + /** + * The depth buffer. + * + * @type {Texture} + */ + set depthBuffer(arg: Texture); + /** + * The depth packing strategy. + * + * @type {DepthPackingStrategies} + */ + set depthPacking(arg: DepthPackingStrategies); + /** + * Sets the depth buffer. + * + * @deprecated Use depthBuffer and depthPacking instead. + * @param {Texture} buffer - The depth texture. + * @param {DepthPackingStrategies} [depthPacking=BasicDepthPacking] - The depth packing strategy. + */ + setDepthBuffer( + buffer: Texture, + depthPacking?: DepthPackingStrategies + ): void; + + /** + * The normal buffer. + * + * @type {Texture} + */ + set normalBuffer(arg: Texture); + /** + * Sets the normal buffer. + * + * @deprecated Use normalBuffer instead. + * @param {Texture} value - The normal buffer. + */ + setNormalBuffer(value: Texture): void; + /** + * Sets the texel size. + * + * @deprecated Use setSize() instead. + * @param {Number} x - The texel width. + * @param {Number} y - The texel height. + */ + setTexelSize(x: number, y: number): void; + /** + * Sets the size of this object. + * + * @param {Number} width - The width. + * @param {Number} height - The height. + */ + setSize(width: number, height: number): void; + +} + +/** + * An enumeration of depth test strategies. + * + * @type {Object} + * @property {Number} DEFAULT - Perform depth test only. + * @property {Number} KEEP_MAX_DEPTH - Always keep max depth. + * @property {Number} DISCARD_MAX_DEPTH - Always discard max depth. + */ +export enum DepthTestStrategy { + DEFAULT, + KEEP_MAX_DEPTH, + DISCARD_MAX_DEPTH +} + +/** + * A depth mask shader material. + * + * This material masks a color buffer by comparing two depth textures. + */ +export class DepthMaskMaterial extends ShaderMaterial { + + /** + * Constructs a new depth mask material. + */ + constructor(); + set depthMode(arg: DepthModes); + /** + * The depth mode. + * + * @see https://threejs.org/docs/#api/en/constants/Materials + * @type {DepthModes} + */ + get depthMode(): DepthModes; + /** + * The primary depth buffer. + * + * @type {Texture} + */ + set depthBuffer0(arg: Texture); + /** + * The primary depth packing strategy. + * + * @type {DepthPackingStrategies} + */ + set depthPacking0(arg: DepthPackingStrategies); + /** + * Sets the base depth buffer. + * + * @deprecated Use depthBuffer0 and depthPacking0 instead. + * @param {Texture} buffer - The depth texture. + * @param {DepthPackingStrategies} [depthPacking=BasicDepthPacking] - The depth packing strategy. + */ + setDepthBuffer0( + buffer: Texture, + depthPacking?: DepthPackingStrategies + ): void; + + /** + * The secondary depth buffer. + * + * @type {Texture} + */ + set depthBuffer1(arg: Texture); + /** + * The secondary depth packing strategy. + * + * @type {DepthPackingStrategies} + */ + set depthPacking1(arg: DepthPackingStrategies); + /** + * Sets the depth buffer that will be compared with the base depth buffer. + * + * @deprecated Use depthBuffer1 and depthPacking1 instead. + * @param {Texture} buffer - The depth texture. + * @param {DepthPackingStrategies} [depthPacking=BasicDepthPacking] - The depth packing strategy. + */ + setDepthBuffer1( + buffer: Texture, + depthPacking?: DepthPackingStrategies + ): void; + + set maxDepthStrategy(arg: DepthTestStrategy); + /** + * The strategy for handling maximum depth. + * + * @type {DepthTestStrategy} + */ + get maxDepthStrategy(): DepthTestStrategy; + set keepFar(arg: boolean); + /** + * Indicates whether maximum depth values should be preserved. + * + * @type {Boolean} + * @deprecated Use maxDepthStrategy instead. + */ + get keepFar(): boolean; + /** + * Returns the strategy for dealing with maximum depth values. + * + * @deprecated Use maxDepthStrategy instead. + * @return {DepthTestStrategy} The strategy. + */ + getMaxDepthStrategy(): DepthTestStrategy; + /** + * Sets the strategy for dealing with maximum depth values. + * + * @deprecated Use maxDepthStrategy instead. + * @param {DepthTestStrategy} value - The strategy. + */ + setMaxDepthStrategy(value: DepthTestStrategy): void; + set epsilon(arg: number); + /** + * A small error threshold that is used for `EqualDepth` and `NotEqualDepth` tests. Default is `1e-5`. + * + * @type {Number} + */ + get epsilon(): number; + /** + * Returns the current error threshold for depth comparisons. Default is `1e-5`. + * + * @deprecated Use epsilon instead. + * @return {Number} The error threshold. + */ + getEpsilon(): number; + /** + * Sets the depth comparison error threshold. + * + * @deprecated Use epsilon instead. + * @param {Number} value - The new error threshold. + */ + setEpsilon(value: number): void; + /** + * Returns the current depth mode. + * + * @deprecated Use depthMode instead. + * @return {DepthModes} The depth mode. Default is `LessDepth`. + */ + getDepthMode(): DepthModes; + /** + * Sets the depth mode. + * + * @deprecated Use depthMode instead. + * @param {DepthModes} mode - The depth mode. + */ + setDepthMode(mode: DepthModes): void; + +} + +/** + * An enumeration of edge detection modes. + * + * @type {Object} + * @property {Number} DEPTH - Depth-based edge detection. + * @property {Number} LUMA - Luminance-based edge detection. + * @property {Number} COLOR - Chroma-based edge detection. + */ +export enum EdgeDetectionMode { + DEPTH, + LUMA, + COLOR +} + +/** + * An enumeration of predication modes. + * + * @type {Object} + * @property {Number} DISABLED - No predicated thresholding. + * @property {Number} DEPTH - Depth-based predicated thresholding. + * @property {Number} CUSTOM - Predicated thresholding using a custom buffer. + */ +export enum PredicationMode { + DISABLED, + DEPTH, + CUSTOM +} +/** + * An edge detection material. + * + * Mainly used for Subpixel Morphological Anti-Aliasing. + * + * @implements {Resizable} + */ +export class EdgeDetectionMaterial + extends ShaderMaterial + implements Resizable { + + /** + * Constructs a new edge detection material. + * + * TODO Remove parameters. + * @param {Vector2} [texelSize] - The screen texel size. + * @param {EdgeDetectionMode} [mode=EdgeDetectionMode.COLOR] - The edge detection mode. + */ + constructor(texelSize?: Vector2, mode?: EdgeDetectionMode); + set edgeDetectionMode(arg: EdgeDetectionMode); + /** + * The edge detection mode. + * + * @type {EdgeDetectionMode} + */ + get edgeDetectionMode(): EdgeDetectionMode; + /** + * The depth buffer. + * + * @type {Texture} + */ + set depthBuffer(arg: Texture); + /** + * The depth packing strategy. + * + * @type {DepthPackingStrategies} + */ + set depthPacking(arg: DepthPackingStrategies); + /** + * Sets the depth buffer. + * + * @deprecated Use depthBuffer and depthPacking instead. + * @param {Texture} buffer - The depth texture. + * @param {DepthPackingStrategies} [depthPacking=BasicDepthPacking] - The depth packing strategy. + */ + setDepthBuffer( + buffer: Texture, + depthPacking?: DepthPackingStrategies + ): void; + + /** + * Returns the edge detection mode. + * + * @deprecated Use edgeDetectionMode instead. + * @return {EdgeDetectionMode} The mode. + */ + getEdgeDetectionMode(): EdgeDetectionMode; + /** + * Sets the edge detection mode. + * + * @deprecated Use edgeDetectionMode instead. + * @param {EdgeDetectionMode} value - The edge detection mode. + */ + setEdgeDetectionMode(value: EdgeDetectionMode): void; + set localContrastAdaptationFactor(arg: number); + /** + * The local contrast adaptation factor. Has no effect if the edge detection mode is set to DEPTH. Default is 2.0. + * + * If a neighbor edge has _factor_ times bigger contrast than the current edge, the edge will be discarded. + * + * This allows to eliminate spurious crossing edges and is based on the fact that if there is too much contrast in a + * direction, the perceptual contrast in the other neighbors will be hidden. + * + * @type {Number} + */ + get localContrastAdaptationFactor(): number; + /** + * Returns the local contrast adaptation factor. + * + * @deprecated Use localContrastAdaptationFactor instead. + * @return {Number} The factor. + */ + getLocalContrastAdaptationFactor(): number; + /** + * Sets the local contrast adaptation factor. Has no effect if the edge detection mode is set to DEPTH. + * + * @deprecated Use localContrastAdaptationFactor instead. + * @param {Number} value - The local contrast adaptation factor. Default is 2.0. + */ + setLocalContrastAdaptationFactor(value: number): void; + set edgeDetectionThreshold(arg: number); + /** + * The edge detection threshold. Range: [0.0, 0.5]. + * + * A lower value results in more edges being detected at the expense of performance. + * + * For luma- and chroma-based edge detection, 0.1 is a reasonable value and allows to catch most visible edges. 0.05 + * is a rather overkill value that allows to catch 'em all. Darker scenes may require an even lower threshold. + * + * If depth-based edge detection is used, the threshold will depend on the scene depth. + * + * @type {Number} + */ + get edgeDetectionThreshold(): number; + /** + * Returns the edge detection threshold. + * + * @deprecated Use edgeDetectionThreshold instead. + * @return {Number} The threshold. + */ + getEdgeDetectionThreshold(): number; + /** + * Sets the edge detection threshold. + * + * @deprecated Use edgeDetectionThreshold instead. + * @param {Number} value - The edge detection threshold. Range: [0.0, 0.5]. + */ + setEdgeDetectionThreshold(value: number): void; + set predicationMode(arg: PredicationMode); + /** + * The predication mode. + * + * Predicated thresholding allows to better preserve texture details and to improve edge detection using an additional + * buffer such as a light accumulation or depth buffer. + * + * @type {PredicationMode} + */ + get predicationMode(): PredicationMode; + /** + * Returns the predication mode. + * + * @deprecated Use predicationMode instead. + * @return {PredicationMode} The mode. + */ + getPredicationMode(): PredicationMode; + /** + * Sets the predication mode. + * + * @deprecated Use predicationMode instead. + * @param {PredicationMode} value - The predication mode. + */ + setPredicationMode(value: PredicationMode): void; + /** + * The predication buffer. + * + * @type {Texture} + */ + set predicationBuffer(arg: Texture); + /** + * Sets a custom predication buffer. + * + * @deprecated Use predicationBuffer instead. + * @param {Texture} value - The predication buffer. + */ + setPredicationBuffer(value: Texture): void; + set predicationThreshold(arg: number); + /** + * The predication threshold. + * + * @type {Number} + */ + get predicationThreshold(): number; + /** + * Returns the predication threshold. + * + * @deprecated Use predicationThreshold instead. + * @return {Number} The threshold. + */ + getPredicationThreshold(): number; + /** + * Sets the predication threshold. + * + * @deprecated Use predicationThreshold instead. + * @param {Number} value - The threshold. + */ + setPredicationThreshold(value: number): void; + set predicationScale(arg: number); + /** + * The predication scale. Range: [1.0, 5.0]. + * + * Determines how much the edge detection threshold should be scaled when using predication. + * + * @type {Number} + */ + get predicationScale(): number; + /** + * Returns the predication scale. + * + * @deprecated Use predicationScale instead. + * @return {Number} The scale. + */ + getPredicationScale(): number; + /** + * Sets the predication scale. + * + * @deprecated Use predicationScale instead. + * @param {Number} value - The scale. Range: [1.0, 5.0]. + */ + setPredicationScale(value: number): void; + set predicationStrength(arg: number); + /** + * The predication strength. Range: [0.0, 1.0]. + * + * Determines how much the edge detection threshold should be decreased locally when using predication. + * + * @type {Number} + */ + get predicationStrength(): number; + /** + * Returns the predication strength. + * + * @deprecated Use predicationStrength instead. + * @return {Number} The strength. + */ + getPredicationStrength(): number; + /** + * Sets the predication strength. + * + * @deprecated Use predicationStrength instead. + * @param {Number} value - The strength. Range: [0.0, 1.0]. + */ + setPredicationStrength(value: number): void; + /** + * Sets the size of this object. + * + * @param {Number} width - The width. + * @param {Number} height - The height. + */ + setSize(width: number, height: number): void; + +} + +export type ColorEdgesMaterial = EdgeDetectionMaterial; + +/** + * An effect material for compound shaders. Supports dithering. + * + * @implements {Resizable} + */ +export class EffectMaterial extends ShaderMaterial implements Resizable { + + /** + * An enumeration of shader code section placeholders used by the {@link EffectPass}. + * + * @type {Object} + * @property {String} FRAGMENT_HEAD - A placeholder for function and variable declarations inside the fragment shader. + * @property {String} FRAGMENT_MAIN_UV - A placeholder for UV transformations inside the fragment shader. + * @property {String} FRAGMENT_MAIN_IMAGE - A placeholder for color calculations inside the fragment shader. + * @property {String} VERTEX_HEAD - A placeholder for function and variable declarations inside the vertex shader. + * @property {String} VERTEX_MAIN_SUPPORT - A placeholder for supporting calculations inside the vertex shader. + */ + static get Section(): { + FRAGMENT_HEAD: string; + FRAGMENT_MAIN_UV: string; + FRAGMENT_MAIN_IMAGE: string; + VERTEX_HEAD: string; + VERTEX_MAIN_SUPPORT: string; + }; + + /** + * Constructs a new effect material. + * + * @param {Map} [shaderParts] - A collection of shader snippets. See {@link Section}. + * @param {Map} [defines] - A collection of preprocessor macro definitions. + * @param {Map} [uniforms] - A collection of uniforms. + * @param {Camera} [camera] - A camera. + * @param {Boolean} [dithering=false] - Whether dithering should be enabled. + */ + constructor( + shaderParts?: Map, + defines?: Map, + uniforms?: Map, + camera?: Camera, + dithering?: boolean + ); + + /** + * The input buffer. + * + * @type {Texture} + */ + set inputBuffer(arg: Texture); + /** + * Sets the input buffer. + * + * @deprecated Use inputBuffer instead. + * @param {Texture} value - The input buffer. + */ + setInputBuffer(value: Texture): void; + set depthBuffer(arg: Texture); + /** + * The depth buffer. + * + * @type {Texture} + */ + get depthBuffer(): Texture; + set depthPacking(arg: DepthPackingStrategies); + /** + * The depth packing strategy. + * + * @type {DepthPackingStrategies} + */ + get depthPacking(): DepthPackingStrategies; + /** + * Sets the depth buffer. + * + * @deprecated Use depthBuffer and depthPacking instead. + * @param {Texture} buffer - The depth texture. + * @param {DepthPackingStrategies} [depthPacking=BasicDepthPacking] - The depth packing strategy. + */ + setDepthBuffer( + buffer: Texture, + depthPacking?: DepthPackingStrategies + ): void; + + /** + * Sets the shader parts. + * + * @param {Map} shaderParts - A collection of shader snippets. See {@link Section}. + * @return {EffectMaterial} This material. + */ + setShaderParts(shaderParts: Map): EffectMaterial; + /** + * Sets the shader macros. + * + * @param {Map} defines - A collection of preprocessor macro definitions. + * @return {EffectMaterial} This material. + */ + setDefines(defines: Map): EffectMaterial; + /** + * Sets the shader uniforms. + * + * @param {Map} uniforms - A collection of uniforms. + * @return {EffectMaterial} This material. + */ + setUniforms(uniforms: Map): EffectMaterial; + /** + * Sets the required shader extensions. + * + * @param {Set} extensions - A collection of extensions. + * @return {EffectMaterial} This material. + */ + setExtensions(extensions: Set): EffectMaterial; + set encodeOutput(arg: boolean); + /** + * Indicates whether output encoding is enabled. + * + * @type {Boolean} + */ + get encodeOutput(): boolean; + /** + * Indicates whether output encoding is enabled. + * + * @deprecated Use encodeOutput instead. + * @return {Boolean} Whether output encoding is enabled. + */ + isOutputEncodingEnabled(): boolean; + /** + * Enables or disables output encoding. + * + * @deprecated Use encodeOutput instead. + * @param {Boolean} value - Whether output encoding should be enabled. + */ + setOutputEncodingEnabled(value: boolean): void; + set time(arg: number); + /** + * The time in seconds. + * + * @type {Number} + */ + get time(): number; + /** + * Sets the delta time. + * + * @deprecated Use time instead. + * @param {Number} value - The delta time in seconds. + */ + setDeltaTime(value: number): void; + /** + * Adopts the settings of the given camera. + * + * @param {Camera} camera - A camera. + */ + adoptCameraSettings(camera: Camera): void; + /** + * Sets the resolution. + * + * @param {Number} width - The width. + * @param {Number} height - The height. + */ + setSize(width: number, height: number): void; + +} + +/** + * An enumeration of shader code placeholders used by the {@link EffectPass}. + * @property FRAGMENT_HEAD - A placeholder for function and variable declarations inside the fragment shader. + * @property FRAGMENT_MAIN_UV - A placeholder for UV transformations inside the fragment shader. + * @property FRAGMENT_MAIN_IMAGE - A placeholder for color calculations inside the fragment shader. + * @property VERTEX_HEAD - A placeholder for function and variable declarations inside the vertex shader. + * @property VERTEX_MAIN_SUPPORT - A placeholder for supporting calculations inside the vertex shader. + * @deprecated Use EffectMaterial.Section instead. + */ +export const Section: { + FRAGMENT_HEAD: string; + FRAGMENT_MAIN_UV: string; + FRAGMENT_MAIN_IMAGE: string; + VERTEX_HEAD: string; + VERTEX_MAIN_SUPPORT: string; +}; + +/** + * A crepuscular rays shader material. + * + * References: + * + * Thibaut Despoulain, 2012: + * [(WebGL) Volumetric Light Approximation in Three.js]( + * http://bkcore.com/blog/3d/webgl-three-js-volumetric-light-godrays.html) + * + * Nvidia, GPU Gems 3, 2008: + * [Chapter 13. Volumetric Light Scattering as a Post-Process]( + * https://developer.nvidia.com/gpugems/GPUGems3/gpugems3_ch13.html) + * + * @todo Remove dithering code from fragment shader. + */ +export class GodRaysMaterial extends ShaderMaterial { + + /** + * Constructs a new god rays material. + * + * TODO Remove lightPosition param. + * @param {Vector2} lightPosition - Deprecated. + */ + constructor(lightPosition: Vector2); + /** + * The input buffer. + * + * @type {Texture} + */ + set inputBuffer(arg: Texture); + /** + * Sets the input buffer. + * + * @deprecated Use inputBuffer instead. + * @param {Texture} value - The input buffer. + */ + setInputBuffer(value: Texture): void; + /** + * The screen space position of the light source. + * + * @type {Vector2} + */ + get lightPosition(): Vector2; + /** + * Returns the screen space position of the light source. + * + * @deprecated Use lightPosition instead. + * @return {Vector2} The position. + */ + getLightPosition(): Vector2; + /** + * Sets the screen space position of the light source. + * + * @deprecated Use lightPosition instead. + * @param {Vector2} value - The position. + */ + setLightPosition(value: Vector2): void; + set density(arg: number); + /** + * The density. + * + * @type {Number} + */ + get density(): number; + /** + * Returns the density. + * + * @deprecated Use density instead. + * @return {Number} The density. + */ + getDensity(): number; + /** + * Sets the density. + * + * @deprecated Use density instead. + * @param {Number} value - The density. + */ + setDensity(value: number): void; + set decay(arg: number); + /** + * The decay. + * + * @type {Number} + */ + get decay(): number; + /** + * Returns the decay. + * + * @deprecated Use decay instead. + * @return {Number} The decay. + */ + getDecay(): number; + /** + * Sets the decay. + * + * @deprecated Use decay instead. + * @param {Number} value - The decay. + */ + setDecay(value: number): void; + set weight(arg: number); + /** + * The weight. + * + * @type {Number} + */ + get weight(): number; + /** + * Returns the weight. + * + * @deprecated Use weight instead. + * @return {Number} The weight. + */ + getWeight(): number; + /** + * Sets the weight. + * + * @deprecated Use weight instead. + * @param {Number} value - The weight. + */ + setWeight(value: number): void; + set exposure(arg: number); + /** + * The exposure. + * + * @type {Number} + */ + get exposure(): number; + /** + * Returns the exposure. + * + * @deprecated Use exposure instead. + * @return {Number} The exposure. + */ + getExposure(): number; + /** + * Sets the exposure. + * + * @deprecated Use exposure instead. + * @param {Number} value - The exposure. + */ + setExposure(value: number): void; + set maxIntensity(arg: number); + /** + * The maximum light intensity. + * + * @type {Number} + */ + get maxIntensity(): number; + /** + * Returns the maximum light intensity. + * + * @deprecated Use maxIntensity instead. + * @return {Number} The maximum light intensity. + */ + getMaxIntensity(): number; + /** + * Sets the maximum light intensity. + * + * @deprecated Use maxIntensity instead. + * @param {Number} value - The maximum light intensity. + */ + setMaxIntensity(value: number): void; + set samples(arg: number); + /** + * The amount of samples per pixel. + * + * @type {Number} + */ + get samples(): number; + /** + * Returns the amount of samples per pixel. + * + * @deprecated Use samples instead. + * @return {Number} The sample count. + */ + getSamples(): number; + /** + * Sets the amount of samples per pixel. + * + * @deprecated Use samples instead. + * @param {Number} value - The sample count. + */ + setSamples(value: number): void; + +} + +/** + * A box blur material. + * + * @implements {Resizable} + */ + +export class BoxBlurMaterial extends ShaderMaterial {} + +/** + * A box blur pass. + */ + +export class BoxBlurPass extends Pass { + + /** + * Constructs a new box blur pass. + * + * @param {Object} [options] - The options. + * @param {Number} [options.kernelSize=5] - The kernel size. + * @param {Number} [options.iterations=1] - The amount of times the blur should be applied. + * @param {Number} [options.bilateral=false] - Enables or disables bilateral blurring. + * @param {Number} [options.resolutionScale=1.0] - The resolution scale. + * @param {Number} [options.resolutionX=Resolution.AUTO_SIZE] - The horizontal resolution. + * @param {Number} [options.resolutionY=Resolution.AUTO_SIZE] - The vertical resolution. + */ + + constructor( + { + kernelSize, + iterations, + bilateral, + resolutionScale, + resolutionX, + resolutionY + }?: { + kernelSize?: number; + iterations?: number; + bilateral?: boolean; + resolutionScale?: number; + resolutionX?: number; + resolutionY?: number; + } + ); + +} + +/** + * An optimized Gaussian convolution shader material. + * + * References: + * + * Filip Strugar, Intel, 2014: [An investigation of fast real-time GPU-based image blur algorithms]( + * https://www.intel.com/content/www/us/en/developer/articles/technical/an-investigation-of-fast-real-time-gpu-based-image-blur-algorithms.html) + * + * @implements {Resizable} + */ + +export class GaussianBlurMaterial extends ShaderMaterial { + + /** + * Constructs a new convolution material. + * + * @param {Object} [options] - The options. + * @param {Number} [options.kernelSize=35] - The kernel size. + */ + constructor( + { + kernelSize + }?: { + kernelSize?: number; + } + ); + +} + +/** + * A Gaussian blur pass. + */ + +export class GaussianBlurPass extends Pass { + + /** + * Constructs a new Gaussian blur pass. + * + * @param {Object} [options] - The options. + * @param {Number} [options.kernelSize=35] - The kernel size. Should be an odd number in the range [3, 1020]. + * @param {Number} [options.iterations=1] - The amount of times the blur should be applied. + * @param {Number} [options.resolutionScale=1.0] - The resolution scale. + * @param {Number} [options.resolutionX=Resolution.AUTO_SIZE] - The horizontal resolution. + * @param {Number} [options.resolutionY=Resolution.AUTO_SIZE] - The vertical resolution. + */ + + constructor( + { + kernelSize, + iterations, + resolutionScale, + resolutionX, + resolutionY + }?: { + kernelSize?: number; + iterations?: number; + resolutionScale?: number; + resolutionX?: number; + resolutionY?: number; + } + ); + +} + +/** + * An optimised convolution shader material. + * + * Based on the GDC2003 Presentation by Masaki Kawase, Bunkasha Games: + * Frame Buffer Postprocessing Effects in DOUBLE-S.T.E.A.L (Wreckless) + * and an article by Filip Strugar, Intel: + * An investigation of fast real-time GPU-based image blur algorithms + * + * Further modified according to Apple's [Best Practices for Shaders](https://goo.gl/lmRoM5). + * + * @todo Remove dithering code from fragment shader. + * @implements {Resizable} + */ +export class KawaseBlurMaterial extends ShaderMaterial implements Resizable { + + /** + * Constructs a new convolution material. + * + * TODO Remove texelSize param. + * @param {Vector2} [texelSize] - Deprecated. + */ + constructor(texelSize?: Vector2); + /** + * The input buffer. + * + * @type {Texture} + */ + set inputBuffer(arg: Texture); + /** + * Sets the input buffer. + * + * @deprecated Use inputBuffer instead. + * @param {Texture} value - The input buffer. + */ + setInputBuffer(value: Texture): void; + set scale(arg: number); + /** + * The blur scale. + * + * @type {Number} + */ + get scale(): number; + /** + * Returns the blur scale. + * + * @deprecated Use scale instead. + * @return {Number} The scale. + */ + getScale(): number; + /** + * Sets the blur scale. + * + * @deprecated Use scale instead. + * @param {Number} value - The scale. + */ + setScale(value: number): void; + /** + * Returns the kernel. + * + * @return {Float32Array} The kernel. + * @deprecated Implementation detail, removed with no replacement. + */ + getKernel(): Float32Array; + set kernel(arg: number); + /** + * The current kernel. + * + * @type {Number} + */ + get kernel(): number; + /** + * Sets the current kernel. + * + * @deprecated Use kernel instead. + * @param {Number} value - The kernel. + */ + setKernel(value: number): void; + /** + * Sets the texel size. + * + * @deprecated Use setSize() instead. + * @param {Number} x - The texel width. + * @param {Number} y - The texel height. + */ + setTexelSize(x: number, y: number): void; + /** + * Sets the size of this object. + * + * @param {Number} width - The width. + * @param {Number} height - The height. + */ + setSize(width: number, height: number): void; + +} + +export type ConvolutionMaterial = KawaseBlurMaterial; + +/** + * A luminance shader material. + * + * This shader produces a greyscale luminance map that describes the absolute amount of light emitted by a scene. It can + * also be configured to output colors that are scaled with their respective luminance value. Additionally, a range may + * be provided to mask out undesired texels. + * + * The alpha channel always contains the luminance value. + * + * On luminance coefficients: + * http://www.poynton.com/notes/colour_and_gamma/ColorFAQ.html#RTFToC9 + * + * Coefficients for different color spaces: + * https://hsto.org/getpro/habr/post_images/2ab/69d/084/2ab69d084f9a597e032624bcd74d57a7.png + * + * Luminance range reference: + * https://cycling74.com/2007/05/23/your-first-shader/#.Vty9FfkrL4Z + */ +export class LuminanceMaterial extends ShaderMaterial { + + /** + * Constructs a new luminance material. + * + * @param {Boolean} [colorOutput=false] - Defines whether the shader should output colors scaled with their luminance value. + * @param {Vector2} [luminanceRange] - If provided, the shader will mask out texels that aren't in the specified luminance range. + */ + constructor(colorOutput?: boolean, luminanceRange?: Vector2); + set colorOutput(arg: boolean); + /** + * Indicates whether color output is enabled. + * + * @type {Boolean} + */ + get colorOutput(): boolean; + set luminanceRange(arg: boolean); + /** + * The luminance range. Set to null to disable. + * + * @type {Boolean} + */ + get luminanceRange(): boolean; + /** + * The input buffer. + * + * @type {Texture} + */ + set inputBuffer(arg: Texture); + /** + * Sets the input buffer. + * + * @deprecated Use inputBuffer instead. + * @param {Texture} value - The input buffer. + */ + setInputBuffer(value: Texture): void; + set threshold(arg: number); + /** + * The luminance threshold. + * + * @type {Number} + */ + get threshold(): number; + /** + * Returns the luminance threshold. + * + * @deprecated Use threshold instead. + * @return {Number} The threshold. + */ + getThreshold(): number; + /** + * Sets the luminance threshold. + * + * @deprecated Use threshold instead. + * @param {Number} value - The threshold. + */ + setThreshold(value: number): void; + set smoothing(arg: number); + /** + * The luminance threshold smoothing. + * + * @type {Number} + */ + get smoothing(): number; + /** + * Returns the luminance threshold smoothing factor. + * + * @deprecated Use smoothing instead. + * @return {Number} The smoothing factor. + */ + getSmoothingFactor(): number; + /** + * Sets the luminance threshold smoothing factor. + * + * @deprecated Use smoothing instead. + * @param {Number} value - The smoothing factor. + */ + setSmoothingFactor(value: number): void; + set useThreshold(arg: boolean); + /** + * Indicates whether the luminance threshold is enabled. + * + * @type {Boolean} + * @deprecated Adjust the threshold or smoothing factor instead. + */ + get useThreshold(): boolean; + /** + * Indicates whether color output is enabled. + * + * @deprecated Use colorOutput instead. + * @return {Boolean} Whether color output is enabled. + */ + isColorOutputEnabled(): boolean; + /** + * Enables or disables color output. + * + * @deprecated Use colorOutput instead. + * @param {Boolean} value - Whether color output should be enabled. + */ + setColorOutputEnabled(value: boolean): void; + set useRange(arg: boolean); + /** + * Indicates whether luminance masking is enabled. + * + * @type {Boolean} + * @deprecated + */ + get useRange(): boolean; + /** + * Returns the current luminance range. + * + * @deprecated Use luminanceRange instead. + * @return {Vector2} The luminance range. + */ + getLuminanceRange(): Vector2; + /** + * Sets a luminance range. Set to null to disable. + * + * @deprecated Use luminanceRange instead. + * @param {Vector2} value - The luminance range. + */ + setLuminanceRange(value: Vector2): void; + +} + +/** + * A mask function enumeration. + * + * @type {Object} + * @property {Number} DISCARD - Discards elements when the respective mask value is zero. + * @property {Number} MULTIPLY - Multiplies the input buffer with the mask texture. + * @property {Number} MULTIPLY_RGB_SET_ALPHA - Multiplies the input RGB values with the mask and sets alpha to the mask value. + * @property {Number} MULTIPLY_RGB - Multiplies the input RGB values with the mask and keeps the original alpha. + */ +export enum MaskFunction { + DISCARD, + MULTIPLY, + MULTIPLY_RGB_SET_ALPHA, + MULTIPLY_RGB +} + +/** + * A mask shader material. + * + * This material applies a mask texture to a buffer. + */ +export class MaskMaterial extends ShaderMaterial { + + /** + * Constructs a new mask material. + * + * @param {Texture} [maskTexture] - The mask texture. + */ + constructor(maskTexture?: Texture); + /** + * The input buffer. + * + * @type {Texture} + */ + set inputBuffer(arg: Texture); + /** + * Sets the input buffer. + * + * @deprecated Use inputBuffer instead. + * @param {Texture} value - The input buffer. + */ + setInputBuffer(value: Texture): void; + /** + * The mask texture. + * + * @type {Texture} + */ + set maskTexture(arg: Texture); + /** + * Sets the mask texture. + * + * @deprecated Use maskTexture instead. + * @param {Texture} value - The texture. + */ + setMaskTexture(value: Texture): void; + /** + * Sets the color channel to use for masking. Default is `ColorChannel.RED`. + * + * @type {ColorChannel} + */ + set colorChannel(arg: ColorChannel); + /** + * Sets the color channel to use for masking. Default is `ColorChannel.RED`. + * + * @deprecated Use colorChannel instead. + * @param {ColorChannel} value - The channel. + */ + setColorChannel(value: ColorChannel): void; + /** + * The masking technique. Default is `MaskFunction.DISCARD`. + * + * @type {MaskFunction} + */ + set maskFunction(arg: MaskFunction); + /** + * Sets the masking technique. Default is `MaskFunction.DISCARD`. + * + * @deprecated Use maskFunction instead. + * @param {MaskFunction} value - The function. + */ + setMaskFunction(value: MaskFunction): void; + set inverted(arg: boolean); + /** + * Indicates whether the masking is inverted. + * + * @type {Boolean} + */ + get inverted(): boolean; + /** + * Indicates whether the masking is inverted. + * + * @deprecated Use inverted instead. + * @return {Boolean} Whether the masking is inverted. + */ + isInverted(): boolean; + /** + * Determines whether the masking should be inverted. + * + * @deprecated Use inverted instead. + * @param {Boolean} value - Whether the masking should be inverted. + */ + setInverted(value: boolean): void; + set strength(arg: number); + /** + * The current mask strength. + * + * Individual mask values will be clamped to [0.0, 1.0]. Has no effect when the mask function is set to `DISCARD`. + * + * @type {Number} + */ + get strength(): number; + /** + * Returns the current mask strength. + * + * @deprecated Use strength instead. + * @return {Number} The mask strength. + */ + getStrength(): number; + /** + * Sets the mask strength. + * + * Has no effect when the mask function is set to `DISCARD`. + * + * @deprecated Use strength instead. + * @param {Number} value - The mask strength. + */ + setStrength(value: number): void; + +} + +/** + * An outline shader material. + * + * @implements {Resizable} + */ +export class OutlineMaterial extends ShaderMaterial implements Resizable { + + /** + * Constructs a new outline material. + * + * TODO Remove texelSize param. + * @param {Vector2} [texelSize] - The screen texel size. + */ + constructor(texelSize?: Vector2); + /** + * The input buffer. + * + * @param {Texture} arg - The input buffer. + */ + set inputBuffer(arg: Texture); + /** + * Sets the input buffer. + * + * @deprecated Use inputBuffer instead. + * @param {Texture} value - The input buffer. + */ + setInputBuffer(value: Texture): void; + /** + * Sets the texel size. + * + * @deprecated Use setSize() instead. + * @param {Number} x - The texel width. + * @param {Number} y - The texel height. + */ + setTexelSize(x: number, y: number): void; + /** + * Sets the size of this object. + * + * @param {Number} width - The width. + * @param {Number} height - The height. + */ + setSize(width: number, height: number): void; + +} + +/** + * An outline shader material. + */ +export type OutlineEdgesMaterial = OutlineMaterial; + +/** + * Subpixel Morphological Antialiasing. + * + * This material computes weights for detected edges. + * + * @implements {Resizable} + */ +export class SMAAWeightsMaterial extends ShaderMaterial implements Resizable { + + /** + * Constructs a new SMAA weights material. + * + * @param {Vector2} [texelSize] - The absolute screen texel size. + * @param {Vector2} [resolution] - The resolution. + */ + constructor(texelSize?: Vector2, resolution?: Vector2); + /** + * The input buffer. + * + * @param {Texture} arg - The input buffer. + */ + set inputBuffer(arg: Texture); + /** + * Sets the input buffer. + * + * @deprecated Use inputBuffer instead. + * @param {Texture} value - The input buffer. + */ + setInputBuffer(value: Texture): void; + set searchTexture(arg: Texture); + /** + * The search lookup texture. + * + * @type {Texture} + */ + get searchTexture(): Texture; + set areaTexture(arg: Texture); + /** + * The area lookup texture. + * + * @type {Texture} + */ + get areaTexture(): Texture; + /** + * Sets the search and area lookup textures. + * + * @deprecated Use searchTexture and areaTexture instead. + * @param {Texture} search - The search lookup texture. + * @param {Texture} area - The area lookup texture. + */ + setLookupTextures(search: Texture, area: Texture): void; + set orthogonalSearchSteps(arg: number); + /** + * The maximum amount of steps performed in the horizontal/vertical pattern searches, at each side of the pixel. + * Range: [0, 112]. + * + * In number of pixels, it's actually the double. So the maximum line length perfectly handled by, for example 16, is + * 64 (perfectly means that longer lines won't look as good, but are still antialiased). + * + * @type {Number} + */ + get orthogonalSearchSteps(): number; + /** + * Sets the maximum amount of steps performed in the horizontal/vertical pattern searches, at each side of the pixel. + * + * @deprecated Use orthogonalSearchSteps instead. + * @param {Number} value - The search steps. Range: [0, 112]. + */ + setOrthogonalSearchSteps(value: number): void; + set diagonalSearchSteps(arg: number); + /** + * The maximum steps performed in the diagonal pattern searches, at each side of the pixel. This search + * jumps one pixel at a time. Range: [0, 20]. + * + * On high-end machines this search is cheap (between 0.8x and 0.9x slower for 16 steps), but it can have a + * significant impact on older machines. + * + * @type {Number} + */ + get diagonalSearchSteps(): number; + /** + * Specifies the maximum steps performed in the diagonal pattern searches, at each side of the pixel. + * + * @deprecated Use diagonalSearchSteps instead. + * @param {Number} value - The search steps. Range: [0, 20]. + */ + setDiagonalSearchSteps(value: number): void; + set diagonalDetection(arg: boolean); + /** + * Indicates whether diagonal pattern detection is enabled. + * + * @type {Boolean} + */ + get diagonalDetection(): boolean; + /** + * Indicates whether diagonal pattern detection is enabled. + * + * @deprecated Use diagonalDetection instead. + * @return {Boolean} Whether diagonal pattern detection is enabled. + */ + isDiagonalDetectionEnabled(): boolean; + /** + * Enables or disables diagonal pattern detection. + * + * @deprecated Use diagonalDetection instead. + * @param {Boolean} value - Whether diagonal pattern detection should be enabled. + */ + setDiagonalDetectionEnabled(value: boolean): void; + set cornerRounding(arg: number); + /** + * Specifies how much sharp corners will be rounded. Range: [0, 100]. + * + * @type {Number} + */ + get cornerRounding(): number; + /** + * Specifies how much sharp corners will be rounded. + * + * @deprecated Use cornerRounding instead. + * @param {Number} value - The corner rounding amount. Range: [0, 100]. + */ + setCornerRounding(value: number): void; + set cornerDetection(arg: number); + /** + * Indicates whether corner detection is enabled. + * + * @type {Number} + */ + get cornerDetection(): number; + /** + * Indicates whether corner rounding is enabled. + * + * @deprecated Use cornerDetection instead. + * @return {Boolean} Whether corner rounding is enabled. + */ + isCornerRoundingEnabled(): boolean; + /** + * Enables or disables corner rounding. + * + * @deprecated Use cornerDetection instead. + * @param {Boolean} value - Whether corner rounding should be enabled. + */ + setCornerRoundingEnabled(value: boolean): void; + /** + * Sets the size of this object. + * + * @param {Number} width - The width. + * @param {Number} height - The height. + */ + setSize(width: number, height: number): void; + +} + +/** + * A Screen Space Ambient Occlusion (SSAO) shader material. + * + * @implements {Resizable} + */ +export class SSAOMaterial extends ShaderMaterial implements Resizable { + + /** + * Constructs a new SSAO material. + * + * @param {Camera} camera - A camera. + */ + constructor(camera: Camera); + /** + * The combined normal-depth buffer. + * + * @param {Texture} arg - The buffer. + */ + set normalDepthBuffer(arg: Texture); + /** + * Sets the combined normal-depth buffer. + * + * @deprecated Use normalDepthBuffer instead. + * @param {Texture} value - The buffer. + */ + setNormalDepthBuffer(value: Texture): void; + /** + * The normal buffer. + * + * @param {Texture} arg - The buffer. + */ + set normalBuffer(arg: Texture); + /** + * Sets the normal buffer. + * + * @deprecated Use normalBuffer instead. + * @param {Texture} value - The buffer. + */ + setNormalBuffer(value: Texture): void; + /** + * The depth buffer. + * + * @param {Texture} arg - The buffer. + */ + set depthBuffer(arg: Texture); + /** + * The depth packing strategy. + * + * @param {DepthPackingStrategies} arg - The depth packing strategy. + */ + set depthPacking(arg: DepthPackingStrategies); + /** + * Sets the depth buffer. + * + * @deprecated Use depthBuffer and depthPacking instead. + * @param {Texture} buffer - The depth texture. + * @param {DepthPackingStrategies} [depthPacking=BasicDepthPacking] - The depth packing strategy. + */ + setDepthBuffer( + buffer: Texture, + depthPacking?: DepthPackingStrategies + ): void; + + /** + * The noise texture. + * + * @param {Texture} arg - The texture. + */ + set noiseTexture(arg: Texture); + /** + * Sets the noise texture. + * + * @deprecated Use noiseTexture instead. + * @param {Texture} value - The texture. + */ + setNoiseTexture(value: Texture): void; + set samples(arg: number); + /** + * The sample count. + * + * @type {Number} + */ + get samples(): number; + /** + * Returns the amount of occlusion samples per pixel. + * + * @deprecated Use samples instead. + * @return {Number} The sample count. + */ + getSamples(): number; + /** + * Sets the amount of occlusion samples per pixel. + * + * @deprecated Use samples instead. + * @param {Number} value - The sample count. + */ + setSamples(value: number): void; + set rings(arg: number); + /** + * The sampling spiral ring count. + * + * @type {Number} + */ + get rings(): number; + /** + * Returns the amount of spiral turns in the occlusion sampling pattern. + * + * @deprecated Use rings instead. + * @return {Number} The radius. + */ + getRings(): number; + /** + * Sets the amount of spiral turns in the occlusion sampling pattern. + * + * @deprecated Use rings instead. + * @param {Number} value - The radius. + */ + setRings(value: number): void; + /** + * The intensity. + * + * @type {Number} + * @deprecated Use SSAOEffect.intensity instead. + */ + get intensity(): number; + set intensity(arg: number); + /** + * Returns the intensity. + * + * @deprecated Use intensity instead. + * @return {Number} The intensity. + */ + getIntensity(): number; + /** + * Sets the intensity. + * + * @deprecated Use intensity instead. + * @param {Number} value - The intensity. + */ + setIntensity(value: number): void; + set fade(arg: number); + /** + * The depth fade factor. + * + * @type {Number} + */ + get fade(): number; + /** + * Returns the depth fade factor. + * + * @deprecated Use fade instead. + * @return {Number} The fade factor. + */ + getFade(): number; + /** + * Sets the depth fade factor. + * + * @deprecated Use fade instead. + * @param {Number} value - The fade factor. + */ + setFade(value: number): void; + set bias(arg: number); + /** + * The depth bias. Range: [0.0, 1.0]. + * + * @type {Number} + */ + get bias(): number; + /** + * Returns the depth bias. + * + * @deprecated Use bias instead. + * @return {Number} The bias. + */ + getBias(): number; + /** + * Sets the depth bias. + * + * @deprecated Use bias instead. + * @param {Number} value - The bias. + */ + setBias(value: number): void; + set minRadiusScale(arg: number); + /** + * The minimum radius scale for distance scaling. Range: [0.0, 1.0]. + * + * @type {Number} + */ + get minRadiusScale(): number; + /** + * Returns the minimum radius scale for distance scaling. + * + * @deprecated Use minRadiusScale instead. + * @return {Number} The minimum radius scale. + */ + getMinRadiusScale(): number; + /** + * Sets the minimum radius scale for distance scaling. + * + * @deprecated Use minRadiusScale instead. + * @param {Number} value - The minimum radius scale. + */ + setMinRadiusScale(value: number): void; + set radius(arg: number); + /** + * The occlusion sampling radius. Range: [0.0, 1.0]. + * + * @type {Number} + */ + get radius(): number; + /** + * Returns the occlusion sampling radius. + * + * @deprecated Use radius instead. + * @return {Number} The radius. + */ + getRadius(): number; + /** + * Sets the occlusion sampling radius. + * + * @deprecated Use radius instead. + * @param {Number} value - The radius. Range [1e-6, 1.0]. + */ + setRadius(value: number): void; + set distanceScaling(arg: boolean); + /** + * Indicates whether distance-based radius scaling is enabled. + * + * @type {Boolean} + */ + get distanceScaling(): boolean; + /** + * Indicates whether distance-based radius scaling is enabled. + * + * @deprecated Use distanceScaling instead. + * @return {Boolean} Whether distance scaling is enabled. + */ + isDistanceScalingEnabled(): boolean; + /** + * Enables or disables distance-based radius scaling. + * + * @deprecated Use distanceScaling instead. + * @param {Boolean} value - Whether distance scaling should be enabled. + */ + setDistanceScalingEnabled(value: boolean): void; + set distanceThreshold(arg: number); + /** + * The occlusion distance threshold. Range: [0.0, 1.0]. + * + * @type {Number} + */ + get distanceThreshold(): number; + + /** + * The occlusion distance falloff. + * The occlusion distance threshold in world units. + * + * @type {Number} + */ + + get worldDistanceThreshold(): number; + set worldDistanceThreshold(value: number); + + set distanceFalloff(arg: number); + /** + * The occlusion distance falloff. Range: [0.0, 1.0]. + * + * @type {Number} + */ + get distanceFalloff(): number; + + /** + * The occlusion distance falloff in world units. + * + * @type {Number} + */ + + get worldDistanceFalloff(): number; + set worldDistanceFalloff(value: number); + + /** + * Sets the occlusion distance cutoff. + * + * @deprecated Use distanceThreshold and distanceFalloff instead. + * @param {Number} threshold - The distance threshold. Range [0.0, 1.0]. + * @param {Number} falloff - The falloff. Range [0.0, 1.0]. + */ + setDistanceCutoff(threshold: number, falloff: number): void; + set proximityThreshold(arg: number); + /** + * The occlusion proximity threshold. Range: [0.0, 1.0]. + * + * @type {Number} + */ + get proximityThreshold(): number; + /** + * The occlusion proximity threshold in world units. + * + * @type {Number} + */ + get worldProximityThreshold(): number; + set worldProximityThreshold(value: number); + + set proximityFalloff(arg: number); + /** + * The occlusion proximity falloff. Range: [0.0, 1.0]. + * + * @type {Number} + */ + get proximityFalloff(): number; + + /** + * The occlusion proximity falloff in world units. + * + * @type {Number} + */ + + get worldProximityFalloff(): number; + set worldProximityFalloff(value: number); + + /** + * Sets the occlusion proximity cutoff. + * + * @deprecated Use proximityThreshold and proximityFalloff instead. + * @param {Number} threshold - The range threshold. Range [0.0, 1.0]. + * @param {Number} falloff - The falloff. Range [0.0, 1.0]. + */ + setProximityCutoff(threshold: number, falloff: number): void; + /** + * Sets the texel size. + * + * @deprecated Use setSize() instead. + * @param {Number} x - The texel width. + * @param {Number} y - The texel height. + */ + setTexelSize(x: number, y: number): void; + /** + * Adopts the settings of the given camera. + * + * @param {Camera} camera - A camera. + */ + adoptCameraSettings(camera: Camera): void; + /** + * Sets the size of this object. + * + * @param {Number} width - The width. + * @param {Number} height - The height. + */ + setSize(width: number, height: number): void; + +} + +/** + * A resolution. + */ +export class Resolution extends EventDispatcher { + + /** + * An auto sizing constant. + * + * Can be used to automatically calculate the width or height based on the original aspect ratio. + * + * @type {Number} + */ + static get AUTO_SIZE(): number; + /** + * Constructs a new resolution. + * + * TODO Remove resizable param. + * @param {Resizable} resizable - A resizable object. + * @param {Number} [width=Resolution.AUTO_SIZE] - The preferred width. + * @param {Number} [height=Resolution.AUTO_SIZE] - The preferred height. + * @param {Number} [scale=1.0] - A resolution scale. + */ + constructor( + resizable: Resizable, + width?: number, + height?: number, + scale?: number + ); + + /** + * A resizable object. + * + * @type {Resizable} + * @deprecated Use an event listener for "change" events instead. + */ + resizable: Resizable; + /** + * The preferred resolution. + * + * @type {Vector2} + * @deprecated Added for backward-compatibility. + */ + target: Vector2; + set width(arg: number); + /** + * The effective width. + * + * If the preferred width and height are set to {@link Resizer.AUTO_SIZE}, the base width will be returned. + * + * @type {Number} + */ + get width(): number; + set preferredWidth(arg: number); + /** + * The preferred width. + * + * @type {Number} + */ + get preferredWidth(): number; + set height(arg: number); + /** + * The effective height. + * + * If the preferred width and height are set to {@link Resizer.AUTO_SIZE}, the base height will be returned. + * + * @type {Number} + */ + get height(): number; + set preferredHeight(arg: number); + /** + * The preferred height. + * + * @type {Number} + */ + get preferredHeight(): number; + /** + * Returns the effective width. + * + * If the preferred width and height are set to {@link Resizer.AUTO_SIZE}, the base width will be returned. + * + * @deprecated Use width instead. + * @return {Number} The effective width. + */ + getWidth(): number; + /** + * Returns the effective height. + * + * If the preferred width and height are set to {@link Resizer.AUTO_SIZE}, the base height will be returned. + * + * @deprecated Use height instead. + * @return {Number} The effective height. + */ + getHeight(): number; + set scale(arg: number); + /** + * The resolution scale. + * + * @type {Number} + */ + get scale(): number; + /** + * Returns the current resolution scale. + * + * @deprecated Use scale instead. + * @return {Number} The scale. + */ + getScale(): number; + /** + * Sets the resolution scale. + * + * Also sets the preferred resolution to {@link Resizer.AUTO_SIZE}. + * + * @deprecated Use scale instead. + * @param {Number} value - The scale. + */ + setScale(value: number): void; + set baseWidth(arg: number); + /** + * The base width. + * + * @type {Number} + */ + get baseWidth(): number; + /** + * Returns the base width. + * + * @deprecated Use baseWidth instead. + * @return {Number} The base width. + */ + getBaseWidth(): number; + /** + * Sets the base width. + * + * @deprecated Use baseWidth instead. + * @param {Number} value - The width. + */ + setBaseWidth(value: number): void; + set baseHeight(arg: number); + /** + * The base height. + * + * @type {Number} + */ + get baseHeight(): number; + /** + * Returns the base height. + * + * @deprecated Use baseHeight instead. + * @return {Number} The base height. + */ + getBaseHeight(): number; + /** + * Sets the base height. + * + * @deprecated Use baseHeight instead. + * @param {Number} value - The height. + */ + setBaseHeight(value: number): void; + /** + * Sets the base size. + * + * @param {Number} width - The width. + * @param {Number} height - The height. + */ + setBaseSize(width: number, height: number): void; + /** + * Returns the preferred width. + * + * @deprecated Use preferredWidth instead. + * @return {Number} The preferred width. + */ + getPreferredWidth(): number; + /** + * Sets the preferred width. + * + * Use {@link Resizer.AUTO_SIZE} to automatically calculate the width based on the height and aspect ratio. + * + * @deprecated Use preferredWidth instead. + * @param {Number} value - The width. + */ + setPreferredWidth(value: number): void; + /** + * Returns the preferred height. + * + * @deprecated Use preferredHeight instead. + * @return {Number} The preferred height. + */ + getPreferredHeight(): number; + /** + * Sets the preferred height. + * + * Use {@link Resizer.AUTO_SIZE} to automatically calculate the height based on the width and aspect ratio. + * + * @deprecated Use preferredHeight instead. + * @param {Number} value - The height. + */ + setPreferredHeight(value: number): void; + /** + * Sets the preferred size. + * + * @param {Number} width - The width. + * @param {Number} height - The height. + */ + setPreferredSize(width: number, height: number): void; + /** + * Copies the given resolution. + * + * @param {Resolution} resolution - The resolution. + */ + copy(resolution: Resolution): void; + +} + +export type Resizer = Resolution; + +/** + * An abstract pass. + * + * Fullscreen passes use a shared fullscreen triangle: + * https://michaldrobot.com/2014/04/01/gcn-execution-patterns-in-full-screen-passes/ + * + * @implements {Initializable} + * @implements {Resizable} + * @implements {Disposable} + */ +export class Pass implements Initializable, Resizable, Disposable { + + /** + * Constructs a new pass. + * + * @param {String} [name] - The name of this pass. Does not have to be unique. + * @param {Scene} [scene] - The scene to render. The default scene contains a single mesh that fills the screen. + * @param {Camera} [camera] - A camera. Fullscreen effect passes don't require a camera. + */ + constructor(name?: string, scene?: Scene, camera?: Camera); + /** + * The name of this pass. + * + * @type {String} + */ + name: string; + /** + * The renderer. + * + * @deprecated + * @type {WebGLRenderer} + * @protected + */ + protected renderer: WebGLRenderer; + /** + * The scene to render. + * + * @type {Scene} + * @protected + */ + protected scene: Scene; + /** + * The camera. + * + * @type {Camera} + * @protected + */ + protected camera: Camera; + /** + * Only relevant for subclassing. + * + * Indicates whether the {@link EffectComposer} should swap the frame buffers after this pass has finished + * rendering. Set this to `false` if this pass doesn't render to the output buffer or the screen. Otherwise, the + * contents of the input buffer will be lost. + * + * @type {Boolean} + */ + needsSwap: boolean; + /** + * Only relevant for subclassing. + * + * Controls whether the {@link EffectComposer} should copy the depth buffer after this pass has finished rendering. + * Default is `false`. + * + * @type {Boolean} + */ + needsDepthBlit: boolean; + /** + * Only relevant for subclassing. + * + * Indicates whether the {@link EffectComposer} should prepare a depth texture for this pass. + * Set this to `true` if this pass relies on depth information from a preceding {@link RenderPass}. + * + * @type {Boolean} + */ + needsDepthTexture: boolean; + /** + * Indicates whether this pass is enabled. + * + * @type {Boolean} + */ + enabled: boolean; + /** + * Sets the render to screen flag. + * + * If this flag is changed, the fullscreen material will be updated as well. + * + * @type {Boolean} + */ + set renderToScreen(arg: boolean); + /** + * Indicates whether this pass should render to screen. + * + * @type {Boolean} + */ + get renderToScreen(): boolean; + /** + * Sets the main scene. + * + * @type {Scene} + */ + set mainScene(arg: Scene); + /** + * Sets the main camera. + * + * @type {Camera} + */ + set mainCamera(arg: Camera); + /** + * Sets the renderer + * + * @deprecated + * @param {WebGLRenderer} renderer - The renderer. + */ + setRenderer(renderer: WebGLRenderer): void; + /** + * Indicates whether this pass is enabled. + * + * @deprecated Use enabled instead. + * @return {Boolean} Whether this pass is enabled. + */ + isEnabled(): boolean; + /** + * Enables or disables this pass. + * + * @deprecated Use enabled instead. + * @param {Boolean} value - Whether the pass should be enabled. + */ + setEnabled(value: boolean): void; + set fullscreenMaterial(arg: Material); + /** + * The fullscreen material. + * + * @type {Material} + */ + get fullscreenMaterial(): Material; + /** + * Returns the current fullscreen material. + * + * @deprecated Use fullscreenMaterial instead. + * @return {Material} The current fullscreen material, or null if there is none. + */ + getFullscreenMaterial(): Material; + /** + * Sets the fullscreen material. + * + * @deprecated Use fullscreenMaterial instead. + * @protected + * @param {Material} value - A fullscreen material. + */ + protected setFullscreenMaterial(value: Material): void; + /** + * Returns the current depth texture. + * + * @return {Texture} The current depth texture, or null if there is none. + */ + getDepthTexture(): Texture; + /** + * Sets the depth texture. + * + * This method will be called automatically by the {@link EffectComposer}. + * You may override this method if your pass relies on the depth information of a preceding {@link RenderPass}. + * + * @param {Texture} depthTexture - A depth texture. + * @param {DepthPackingStrategies} [depthPacking=BasicDepthPacking] - The depth packing. + */ + setDepthTexture( + depthTexture: Texture, + depthPacking?: DepthPackingStrategies + ): void; + + /** + * Renders this pass. + * + * This is an abstract method that must be overridden. + * + * @abstract + * @throws {Error} An error is thrown if the method is not overridden. + * @param {WebGLRenderer} renderer - The renderer. + * @param {WebGLRenderTarget} inputBuffer - A frame buffer that contains the result of the previous pass. + * @param {WebGLRenderTarget} outputBuffer - A frame buffer that serves as the output render target unless this pass renders to screen. + * @param {Number} [deltaTime] - The time between the last frame and the current one in seconds. + * @param {Boolean} [stencilTest] - Indicates whether a stencil mask is active. + */ + render( + renderer: WebGLRenderer, + inputBuffer: WebGLRenderTarget | null, + outputBuffer: WebGLRenderTarget | null, + deltaTime?: number, + stencilTest?: boolean + ): void; + + /** + * Sets the size. + * + * You may override this method if you want to be informed about the size of the backbuffer/canvas. + * This method is called before {@link initialize} and every time the size of the {@link EffectComposer} changes. + * + * @param {Number} width - The width. + * @param {Number} height - The height. + */ + setSize(width: number, height: number): void; + /** + * Performs initialization tasks. + * + * This method is called when this pass is added to an {@link EffectComposer}. + * + * @param {WebGLRenderer} renderer - The renderer. + * @param {Boolean} alpha - Whether the renderer uses the alpha channel or not. + * @param {Number} frameBufferType - The type of the main frame buffers. + */ + initialize( + renderer: WebGLRenderer, + alpha: boolean, + frameBufferType: number + ): void; + + /** + * Performs a shallow search for disposable properties and deletes them. + * + * The {@link EffectComposer} calls this method when it is being destroyed. You can use it independently to free + * memory when you're certain that you don't need this pass anymore. + */ + dispose(): void; + +} + +/** + * A pass that renders an adaptive luminance map. + */ +export class AdaptiveLuminancePass extends Pass { + + /** + * Constructs a new adaptive luminance pass. + * + * @param {Texture} luminanceBuffer - A buffer that contains the current scene luminance. + * @param {Object} [options] - The options. + * @param {Number} [options.minLuminance=0.01] - The minimum luminance. + * @param {Number} [options.adaptationRate=1.0] - The luminance adaptation rate. + */ + constructor( + luminanceBuffer: Texture, + { + minLuminance, + adaptationRate + }?: { + minLuminance?: number; + adaptationRate?: number; + } + ); + + /** + * The adaptive luminance texture. + * + * @type {Texture} + */ + get texture(): Texture; + /** + * Returns the adaptive 1x1 luminance texture. + * + * @deprecated Use texture instead. + * @return {Texture} The texture. + */ + getTexture(): Texture; + /** + * Sets the 1x1 mipmap level. + * + * This level is used to identify the smallest mipmap of the main luminance texture which contains the downsampled + * average scene luminance. + * + * @type {Number} + * @deprecated Use fullscreenMaterial.mipLevel1x1 instead. + */ + set mipLevel1x1(arg: number); + /** + * @type {Number} + * @deprecated Use fullscreenMaterial.adaptationRate instead. + */ + set adaptationRate(arg: number); + /** + * The luminance adaptation rate. + * + * @type {Number} + * @deprecated Use fullscreenMaterial.adaptationRate instead. + */ + get adaptationRate(): number; + /** + * Renders the scene normals. + * + * @param {WebGLRenderer} renderer - The renderer. + * @param {WebGLRenderTarget} inputBuffer - A frame buffer that contains the result of the previous pass. + * @param {WebGLRenderTarget} outputBuffer - A frame buffer that serves as the output render target unless this pass renders to screen. + * @param {Number} [deltaTime] - The time between the last frame and the current one in seconds. + * @param {Boolean} [stencilTest] - Indicates whether a stencil mask is active. + */ + render( + renderer: WebGLRenderer, + inputBuffer: WebGLRenderTarget | null, + outputBuffer: WebGLRenderTarget | null, + deltaTime?: number, + stencilTest?: boolean + ): void; + +} + +/** + * A Kawase blur pass. + */ +export class KawaseBlurPass extends Pass { + + /** + * An auto sizing flag. + * + * @type {Number} + * @deprecated Use {@link Resolution.AUTO_SIZE} instead. + */ + static get AUTO_SIZE(): number; + /** + * Constructs a new Kawase blur pass. + * + * @param {Object} [options] - The options. + * @param {Number} [options.resolutionScale=0.5] - The resolution scale. + * @param {Number} [options.resolutionX=Resolution.AUTO_SIZE] - The horizontal resolution. + * @param {Number} [options.resolutionY=Resolution.AUTO_SIZE] - The vertical resolution. + * @param {Number} [options.width=Resolution.AUTO_SIZE] - Deprecated. Use resolutionX instead. + * @param {Number} [options.height=Resolution.AUTO_SIZE] - Deprecated. Use resolutionY instead. + * @param {KernelSize} [options.kernelSize=KernelSize.MEDIUM] - The blur kernel size. + */ + constructor({ + resolutionScale, + resolutionX, + resolutionY, + width, + height, + kernelSize + }?: { + resolutionScale?: number; + resolutionX?: number; + resolutionY?: number; + width?: number; + height?: number; + kernelSize?: KernelSize; + }); + + resolution: Resolution; + /** + * The blur material. + * + * @type {KawaseBlurMaterial} + */ + blurMaterial: KawaseBlurMaterial; + /** + * Indicates whether dithering is enabled. + * + * @type {Boolean} + * @deprecated + */ + dithering: boolean; + /** + * The kernel size. + * + * @type {KernelSize} + */ + kernelSize: KernelSize; + /** + * Returns the resolution settings. + * + * @deprecated Use resolution instead. + * @return {Resolution} The resolution. + */ + getResolution(): Resolution; + /** + * Sets the render width. + * + * @type {Number} + * @deprecated Use resolution.preferredWidth instead. + */ + set width(arg: number); + /** + * The current width of the internal render targets. + * + * @type {Number} + * @deprecated Use resolution.width instead. + */ + get width(): number; + /** + * Sets the render height. + * + * @type {Number} + * @deprecated Use resolution.preferredHeight instead. + */ + set height(arg: number); + /** + * The current height of the internal render targets. + * + * @type {Number} + * @deprecated Use resolution.height instead. + */ + get height(): number; + set scale(arg: number); + /** + * The current blur scale. + * + * @type {Number} + * @deprecated Use blurMaterial.scale instead. + */ + get scale(): number; + /** + * Returns the current blur scale. + * + * @deprecated Use blurMaterial.scale instead. + * @return {Number} The scale. + */ + getScale(): number; + /** + * Sets the blur scale. + * + * This value influences the overall blur strength and should not be greater than 1. For larger blurs please increase + * the kernel size via {@link setKernelSize}! + * + * Note that the blur strength is closely tied to the resolution. For a smooth transition from no blur to full blur, + * set the width or the height to a high enough value. + * + * @deprecated Use blurMaterial.scale instead. + * @param {Number} value - The scale. + */ + setScale(value: number): void; + /** + * Returns the kernel size. + * + * @deprecated Use kernelSize instead. + * @return {KernelSize} The kernel size. + */ + getKernelSize(): KernelSize; + /** + * Sets the kernel size. + * + * Larger kernels require more processing power but scale well with larger render resolutions. + * + * @deprecated Use kernelSize instead. + * @param {KernelSize} value - The kernel size. + */ + setKernelSize(value: KernelSize): void; + /** + * Returns the current resolution scale. + * + * @return {Number} The resolution scale. + * @deprecated Use resolution instead. + */ + getResolutionScale(): number; + /** + * Sets the resolution scale. + * + * @param {Number} scale - The new resolution scale. + * @deprecated Use resolution instead. + */ + setResolutionScale(scale: number): void; + /** + * Blurs the input buffer and writes the result to the output buffer. The input buffer remains intact, unless it's + * also used as the output buffer. + * + * @param {WebGLRenderer} renderer - The renderer. + * @param {WebGLRenderTarget} inputBuffer - A frame buffer that contains the result of the previous pass. + * @param {WebGLRenderTarget} outputBuffer - A frame buffer that serves as the output render target unless this pass renders to screen. + * @param {Number} [deltaTime] - The time between the last frame and the current one in seconds. + * @param {Boolean} [stencilTest] - Indicates whether a stencil mask is active. + */ + render( + renderer: WebGLRenderer, + inputBuffer: WebGLRenderTarget | null, + outputBuffer: WebGLRenderTarget | null, + deltaTime?: number, + stencilTest?: boolean + ): void; + +} + +export type BlurPass = KawaseBlurPass; + +/** + * A blur pass that produces a wide blur by downsampling and upsampling the input over multiple MIP levels. + * + * Based on an article by Fabrice Piquet: + * https://www.froyok.fr/blog/2021-12-ue4-custom-bloom/ + */ +export class MipmapBlurPass extends Pass { + + /** + * A texture that contains the blurred result. + * + * @type {Texture} + */ + get texture(): Texture; + /** + * The MIP levels. Default is 8. + * + * @type {Number} + */ + get levels(): number; + set levels(value: number); + /** + * The blur radius. Default is 0.85. + * + * @type {Number} + */ + get radius(): number; + set radius(value: number); + +} + +/** + * A pass that disables the stencil test. + */ +export class ClearMaskPass extends Pass { + + /** + * Constructs a new clear mask pass. + */ + constructor(); + + /** + * Disables the global stencil test. + * @param renderer - The renderer. + * @param inputBuffer - A frame buffer that contains the result of the previous pass. + * @param outputBuffer - A frame buffer that serves as the output render target unless this pass renders to screen. + * @param [deltaTime] - The time between the last frame and the current one in seconds. + * @param [stencilTest] - Indicates whether a stencil mask is active. + */ + render( + renderer: WebGLRenderer, + inputBuffer: WebGLRenderTarget | null, + outputBuffer: WebGLRenderTarget | null, + deltaTime?: number, + stencilTest?: boolean + ): void; + +} + +/** + * A pass that clears the input buffer or the screen. + */ +export class ClearPass extends Pass { + + /** + * Constructs a new clear pass. + * + * @param {Boolean} [color=true] - Determines whether the color buffer should be cleared. + * @param {Boolean} [depth=true] - Determines whether the depth buffer should be cleared. + * @param {Boolean} [stencil=false] - Determines whether the stencil buffer should be cleared. + */ + constructor(color?: boolean, depth?: boolean, stencil?: boolean); + /** + * Indicates whether the color buffer should be cleared. + * + * @type {Boolean} + * @deprecated Use setClearFlags() instead. + */ + color: boolean; + /** + * Indicates whether the depth buffer should be cleared. + * + * @type {Boolean} + * @deprecated Use setClearFlags() instead. + */ + depth: boolean; + /** + * Indicates whether the stencil buffer should be cleared. + * + * @type {Boolean} + * @deprecated Use setClearFlags() instead. + */ + stencil: boolean; + /** + * An override clear color. Default is null. + * + * @type {Color} + */ + overrideClearColor: Color; + /** + * An override clear alpha. Default is -1. + * + * @type {Number} + */ + overrideClearAlpha: number; + /** + * Sets the clear flags. + * + * @param {Boolean} color - Whether the color buffer should be cleared. + * @param {Boolean} depth - Whether the depth buffer should be cleared. + * @param {Boolean} stencil - Whether the stencil buffer should be cleared. + */ + setClearFlags(color: boolean, depth: boolean, stencil: boolean): void; + /** + * Returns the override clear color. Default is null. + * + * @deprecated Use overrideClearColor instead. + * @return {Color} The clear color. + */ + getOverrideClearColor(): Color; + /** + * Sets the override clear color. + * + * @deprecated Use overrideClearColor instead. + * @param {Color} value - The clear color. + */ + setOverrideClearColor(value: Color): void; + /** + * Returns the override clear alpha. Default is -1. + * + * @deprecated Use overrideClearAlpha instead. + * @return {Number} The clear alpha. + */ + getOverrideClearAlpha(): number; + /** + * Sets the override clear alpha. + * + * @deprecated Use overrideClearAlpha instead. + * @param {Number} value - The clear alpha. + */ + setOverrideClearAlpha(value: number): void; + /** + * Clears the input buffer or the screen. + * @param renderer - The renderer. + * @param inputBuffer - A frame buffer that contains the result of the previous pass. + * @param outputBuffer - A frame buffer that serves as the output render target unless this pass renders to screen. + * @param [deltaTime] - The time between the last frame and the current one in seconds. + * @param [stencilTest] - Indicates whether a stencil mask is active. + */ + render( + renderer: WebGLRenderer, + inputBuffer: WebGLRenderTarget | null, + outputBuffer: WebGLRenderTarget | null, + deltaTime?: number, + stencilTest?: boolean + ): void; + +} + +/** + * A pass that copies the contents of an input buffer to another render target. + */ +export class CopyPass extends Pass { + + /** + * Constructs a new save pass. + * + * @param {WebGLRenderTarget} [renderTarget] - A render target. + * @param {Boolean} [autoResize=true] - Whether the render target size should be updated automatically. + */ + constructor(renderTarget?: WebGLRenderTarget, autoResize?: boolean); + /** + * Enables or disables auto resizing of the render target. + * + * @type {Boolean} + */ + autoResize: boolean; + set resize(arg: boolean); + /** + * Enables or disables auto resizing of the render target. + * + * @deprecated Use autoResize instead. + * @type {Boolean} + */ + get resize(): boolean; + /** + * The output texture. + * + * @type {Texture} + */ + get texture(): Texture; + /** + * Returns the output texture. + * + * @deprecated Use texture instead. + * @return {Texture} The texture. + */ + getTexture(): Texture; + /** + * Enables or disables auto resizing of the render target. + * + * @deprecated Use autoResize instead. + * @param {Boolean} value - Whether the render target size should be updated automatically. + */ + setAutoResizeEnabled(value: boolean): void; + /** + * Saves the input buffer. + * + * @param {WebGLRenderer} renderer - The renderer. + * @param {WebGLRenderTarget} inputBuffer - A frame buffer that contains the result of the previous pass. + * @param {WebGLRenderTarget} outputBuffer - A frame buffer that serves as the output render target unless this pass renders to screen. + * @param {Number} [deltaTime] - The time between the last frame and the current one in seconds. + * @param {Boolean} [stencilTest] - Indicates whether a stencil mask is active. + */ + render( + renderer: WebGLRenderer, + inputBuffer: WebGLRenderTarget | null, + outputBuffer: WebGLRenderTarget | null, + deltaTime?: number, + stencilTest?: boolean + ): void; + +} + +export type SavePass = CopyPass; + +/** + * A pass that copies depth into a render target. + */ +export class DepthCopyPass extends Pass { + + /** + * Constructs a new depth save pass. + * + * @param {Object} [options] - The options. + * @param {DepthPackingStrategies} [options.depthPacking=RGBADepthPacking] - The output depth packing. + */ + constructor({ depthPacking }?: { depthPacking?: DepthPackingStrategies }); + /** + * The output depth texture. + * + * @type {Texture} + */ + get texture(): Texture; + /** + * Returns the output depth texture. + * + * @deprecated Use texture instead. + * @return {Texture} The texture. + */ + getTexture(): Texture; + /** + * The output depth packing. + * + * @type {DepthPackingStrategies} + */ + get depthPacking(): DepthPackingStrategies; + /** + * Returns the output depth packing. + * + * @deprecated Use depthPacking instead. + * @return {DepthPackingStrategies} The depth packing. + */ + getDepthPacking(): DepthPackingStrategies; + /** + * Copies depth from a depth texture. + * + * @param {WebGLRenderer} renderer - The renderer. + * @param {WebGLRenderTarget} inputBuffer - A frame buffer that contains the result of the previous pass. + * @param {WebGLRenderTarget} outputBuffer - A frame buffer that serves as the output render target unless this pass renders to screen. + * @param {Number} [deltaTime] - The time between the last frame and the current one in seconds. + * @param {Boolean} [stencilTest] - Indicates whether a stencil mask is active. + */ + render( + renderer: WebGLRenderer, + inputBuffer: WebGLRenderTarget | null, + outputBuffer: WebGLRenderTarget | null, + deltaTime?: number, + stencilTest?: boolean + ): void; + +} + +/** + * A pass that downsamples the scene depth by picking the most representative depth in 2x2 texel neighborhoods. If a + * normal buffer is provided, the corresponding normals will be stored as well. + * + * This pass requires WebGL 2. + */ +export class DepthDownsamplingPass extends Pass { + + /** + * Constructs a new depth downsampling pass. + * + * @param {Object} [options] - The options. + * @param {Texture} [options.normalBuffer=null] - A texture that contains view space normals. See {@link NormalPass}. + * @param {Number} [options.resolutionScale=0.5] - The resolution scale. + * @param {Number} [options.width=Resolution.AUTO_SIZE] - The render width. + * @param {Number} [options.height=Resolution.AUTO_SIZE] - The render height. + */ + constructor({ + normalBuffer, + resolutionScale, + width, + height + }?: { + normalBuffer?: Texture; + resolutionScale?: number; + width?: number; + height?: number; + }); + + resolution: Resolution; + /** + * The normal(RGB) + depth(A) texture. + * + * @type {Texture} + */ + get texture(): Texture; + /** + * Returns the normal(RGB) + depth(A) texture. + * + * @deprecated Use texture instead. + * @return {Texture} The texture. + */ + getTexture(): Texture; + /** + * Returns the resolution settings. + * + * @deprecated Use resolution instead. + * @return {Resolution} The resolution. + */ + getResolution(): Resolution; + /** + * Downsamples depth and scene normals. + * + * @param {WebGLRenderer} renderer - The renderer. + * @param {WebGLRenderTarget} inputBuffer - A frame buffer that contains the result of the previous pass. + * @param {WebGLRenderTarget} outputBuffer - A frame buffer that serves as the output render target unless this pass renders to screen. + * @param {Number} [deltaTime] - The time between the last frame and the current one in seconds. + * @param {Boolean} [stencilTest] - Indicates whether a stencil mask is active. + */ + render( + renderer: WebGLRenderer, + inputBuffer: WebGLRenderTarget | null, + outputBuffer: WebGLRenderTarget | null, + deltaTime?: number, + stencilTest?: boolean + ): void; + +} + +/** + * A pass that renders a given scene into the input buffer or to screen. + * + * This pass uses a {@link ClearPass} to clear the target buffer. + */ +export class RenderPass extends Pass { + + /** + * Constructs a new render pass. + * + * @param {Scene} scene - The scene to render. + * @param {Camera} camera - The camera to use to render the scene. + * @param {Material} [overrideMaterial=null] - An override material. + */ + constructor(scene?: Scene, camera?: Camera, overrideMaterial?: Material); + /** + * A clear pass. + * + * @type {ClearPass} + */ + clearPass: ClearPass; + /** + * Indicates whether the scene background should be ignored. + * + * @type {Boolean} + */ + ignoreBackground: boolean; + /** + * Indicates whether the shadow map auto update should be skipped. + * + * @type {Boolean} + */ + skipShadowMapUpdate: boolean; + /** + * A selection of objects to render. + * + * @type {Selection} + */ + selection: Selection; + set overrideMaterial(arg: Material); + /** + * The current override material. + * + * @type {Material} + */ + get overrideMaterial(): Material; + /** + * Returns the current override material. + * + * @deprecated Use overrideMaterial instead. + * @return {Material} The material. + */ + getOverrideMaterial(): Material; + /** + * Sets the override material. + * + * @deprecated Use overrideMaterial instead. + * @param {Material} value - The material. + */ + setOverrideMaterial(value: Material): void; + set clear(arg: boolean); + /** + * Indicates whether the target buffer should be cleared before rendering. + * + * @type {Boolean} + * @deprecated Use clearPass.enabled instead. + */ + get clear(): boolean; + /** + * Returns the selection. Default is `null` (no restriction). + * + * @deprecated Use selection instead. + * @return {Selection} The selection. + */ + getSelection(): Selection; + /** + * Sets the selection. Set to `null` to disable. + * + * @deprecated Use selection instead. + * @param {Selection} value - The selection. + */ + setSelection(value: Selection): void; + /** + * Indicates whether the scene background is disabled. + * + * @deprecated Use ignoreBackground instead. + * @return {Boolean} Whether the scene background is disabled. + */ + isBackgroundDisabled(): boolean; + /** + * Enables or disables the scene background. + * + * @deprecated Use ignoreBackground instead. + * @param {Boolean} value - Whether the scene background should be disabled. + */ + setBackgroundDisabled(value: boolean): void; + /** + * Indicates whether the shadow map auto update is disabled. + * + * @deprecated Use skipShadowMapUpdate instead. + * @return {Boolean} Whether the shadow map update is disabled. + */ + isShadowMapDisabled(): boolean; + /** + * Enables or disables the shadow map auto update. + * + * @deprecated Use skipShadowMapUpdate instead. + * @param {Boolean} value - Whether the shadow map auto update should be disabled. + */ + setShadowMapDisabled(value: boolean): void; + /** + * Returns the clear pass. + * + * @deprecated Use clearPass.enabled instead. + * @return {ClearPass} The clear pass. + */ + getClearPass(): ClearPass; + /** + * Renders the scene. + * @param renderer - The renderer. + * @param inputBuffer - A frame buffer that contains the result of the previous pass. + * @param outputBuffer - A frame buffer that serves as the output render target unless this pass renders to screen. + * @param [deltaTime] - The time between the last frame and the current one in seconds. + * @param [stencilTest] - Indicates whether a stencil mask is active. + */ + render( + renderer: WebGLRenderer, + inputBuffer: WebGLRenderTarget | null, + outputBuffer: WebGLRenderTarget | null, + deltaTime?: number, + stencilTest?: boolean + ): void; + +} + +/** + * A pass that renders depth into an RGBA buffer. + */ +export class DepthPass extends Pass { + + /** + * Constructs a new depth pass. + * + * @param {Scene} scene - The scene to render. + * @param {Camera} camera - The camera to use to render the scene. + * @param {Object} [options] - The options. + * @param {Number} [options.resolutionScale=1.0] - The resolution scale. + * @param {Number} [options.resolutionX=Resolution.AUTO_SIZE] - The horizontal resolution. + * @param {Number} [options.resolutionY=Resolution.AUTO_SIZE] - The vertical resolution. + * @param {Number} [options.width=Resolution.AUTO_SIZE] - Deprecated. Use resolutionX instead. + * @param {Number} [options.height=Resolution.AUTO_SIZE] - Deprecated. Use resolutionY instead. + * @param {WebGLRenderTarget} [options.renderTarget] - A custom render target. + */ + constructor( + scene?: Scene, + camera?: Camera, + { + resolutionScale, + resolutionX, + resolutionY, + width, + height, + renderTarget + }?: { + resolutionScale?: number; + resolutionX?: number; + resolutionY?: number; + width?: number; + height?: number; + renderTarget?: WebGLRenderTarget; + } + ); + + resolution: Resolution; + /** + * The depth texture. + * + * @type {Texture} + */ + get texture(): Texture; + /** + * Returns the depth texture. + * + * @deprecated Use texture instead. + * @return {Texture} The texture. + */ + getTexture(): Texture; + /** + * Returns the resolution settings. + * + * @deprecated Use resolution instead. + * @return {Resolution} The resolution. + */ + getResolution(): Resolution; + /** + * Returns the current resolution scale. + * + * @return {Number} The resolution scale. + * @deprecated Use resolution instead. + */ + getResolutionScale(): number; + /** + * Sets the resolution scale. + * + * @param {Number} scale - The new resolution scale. + * @deprecated Use resolution instead. + */ + setResolutionScale(scale: number): void; + /** + * Renders the scene depth. + * + * @param {WebGLRenderer} renderer - The renderer. + * @param {WebGLRenderTarget} inputBuffer - A frame buffer that contains the result of the previous pass. + * @param {WebGLRenderTarget} outputBuffer - A frame buffer that serves as the output render target unless this pass renders to screen. + * @param {Number} [deltaTime] - The time between the last frame and the current one in seconds. + * @param {Boolean} [stencilTest] - Indicates whether a stencil mask is active. + */ + render( + renderer: WebGLRenderer, + inputBuffer: WebGLRenderTarget | null, + outputBuffer: WebGLRenderTarget | null, + deltaTime?: number, + stencilTest?: boolean + ): void; + +} + +/** + * A depth picking pass. + */ +export class DepthPickingPass extends DepthCopyPass { + + /** + * Constructs a new depth picking pass. + * + * @param {Object} [options] - The options. + * @param {DepthPackingStrategies} [options.depthPacking=RGBADepthPacking] - The depth packing. + * @param {Number} [options.mode=DepthCopyMode.SINGLE] - The depth copy mode. + */ + constructor({ + depthPacking, + mode + }?: { + depthPacking?: DepthPackingStrategies; + mode?: number; + }); + + /** + * Reads depth at a specific screen position. + * + * Only one depth value can be picked per frame. Calling this method multiple times per frame will overwrite the + * picking coordinates. Unresolved promises will be abandoned. + * + * @example + * const ndc = new Vector3(); + * const clientRect = myViewport.getBoundingClientRect(); + * const clientX = pointerEvent.clientX - clientRect.left; + * const clientY = pointerEvent.clientY - clientRect.top; + * ndc.x = (clientX / myViewport.clientWidth) * 2.0 - 1.0; + * ndc.y = -(clientY / myViewport.clientHeight) * 2.0 + 1.0; + * const depth = await depthPickingPass.readDepth(ndc); + * ndc.z = depth * 2.0 - 1.0; + * + * const worldPosition = ndc.unproject(camera); + * + * @param {Vector2|Vector3} ndc - Normalized device coordinates. Only X and Y are relevant. + * @return {Promise} A promise that returns the depth on the next frame. + */ + readDepth(ndc: Vector2 | Vector3): Promise; + /** + * Copies depth and resolves depth picking promises. + * + * @param {WebGLRenderer} renderer - The renderer. + * @param {WebGLRenderTarget} inputBuffer - A frame buffer that contains the result of the previous pass. + * @param {WebGLRenderTarget} outputBuffer - A frame buffer that serves as the output render target unless this pass renders to screen. + * @param {Number} [deltaTime] - The time between the last frame and the current one in seconds. + * @param {Boolean} [stencilTest] - Indicates whether a stencil mask is active. + */ + render( + renderer: WebGLRenderer, + inputBuffer: WebGLRenderTarget | null, + outputBuffer: WebGLRenderTarget | null, + deltaTime?: number, + stencilTest?: boolean + ): void; + +} + +/** + * A blend function enumeration. + * + * Important: Do not use `BlendFunction.SKIP` to disable effects. See + * [Enabling and Disabling Effects](https://github.com/vanruesc/postprocessing/wiki/Enabling-and-Disabling-Effects) + * for more information. + * + * Based on https://www.khronos.org/registry/OpenGL/extensions/NV/NV_blend_equation_advanced.txt + * + * @type {Object} + * @property {Number} SKIP - Deprecated. Use DST instead. Warning: This blend function does NOT fully disable the effect. + * @property {Number} SET - Deprecated. Use SRC instead. + * @property {Number} ADD - Additive blending. Fast, but may produce washed out results. + * @property {Number} ALPHA - Alpha blending. Blends based on the alpha value of the new color. + * @property {Number} AVERAGE - Calculates the avarage of the new color and the base color. + * @property {Number} COLOR - Converts the colors to HSL and blends based on color. + * @property {Number} COLOR_BURN - Color burn. + * @property {Number} COLOR_DODGE - Color dodge. + * @property {Number} DARKEN - Prioritize darker colors. + * @property {Number} DIFFERENCE - Color difference. + * @property {Number} DIVIDE - Color division. + * @property {Number} DST - Overwrites the new color with the base color. Ignores opacity. + * @property {Number} EXCLUSION - Color exclusion. + * @property {Number} HARD_LIGHT - Hard light. + * @property {Number} HARD_MIX - Hard mix. + * @property {Number} HUE - Converts the colors to HSL and blends based on hue. + * @property {Number} INVERT - Overwrites the base color with the inverted new color. + * @property {Number} INVERT_RGB - Multiplies the new color with the inverted base color. + * @property {Number} LIGHTEN - Prioritize lighter colors. + * @property {Number} LINEAR_BURN - Linear burn. + * @property {Number} LINEAR_DODGE - Same as ADD but limits the result to 1. + * @property {Number} LINEAR_LIGHT - Linear light. + * @property {Number} LUMINOSITY - Converts the colors to HSL and blends based on luminosity. + * @property {Number} MULTIPLY - Color multiplication. + * @property {Number} NEGATION - Negates the base color using the new color. + * @property {Number} NORMAL - Overwrites the base color with the new one. + * @property {Number} OVERLAY - Color overlay. + * @property {Number} PIN_LIGHT - Pin light. + * @property {Number} REFLECT - Color reflection. + * @property {Number} SCREEN - Screen blending. The two colors are effectively projected on a white screen simultaneously. + * @property {Number} SRC - Overwrites the base color with the new one. Ignores opacity. + * @property {Number} SATURATION - Converts the colors to HSL and blends based on saturation. + * @property {Number} SOFT_LIGHT - Soft light. + * @property {Number} SUBTRACT - Subtracts the new color from the base color. + * @property {Number} VIVID_LIGHT - Vivid light. + */ +export enum BlendFunction { + SKIP, + SET, + ADD, + ALPHA, + AVERAGE, + COLOR, + COLOR_BURN, + COLOR_DODGE, + DARKEN, + DIFFERENCE, + DIVIDE, + DST, + EXCLUSION, + HARD_LIGHT, + HARD_MIX, + HUE, + INVERT, + INVERT_RGB, + LIGHTEN, + LINEAR_BURN, + LINEAR_DODGE, + LINEAR_LIGHT, + LUMINOSITY, + MULTIPLY, + NEGATION, + NORMAL, + OVERLAY, + PIN_LIGHT, + REFLECT, + SATURATION, + SCREEN, + SOFT_LIGHT, + SRC, + SUBTRACT, + VIVID_LIGHT +} + +/** + * A blend mode. + */ +export class BlendMode extends EventDispatcher { + + /** + * Constructs a new blend mode. + * + * @param {BlendFunction} blendFunction - The blend function. + * @param {Number} opacity - The opacity of the color that will be blended with the base color. + */ + constructor(blendFunction: BlendFunction, opacity?: number); + /** + * A uniform that controls the opacity of this blend mode. + * + * TODO Add opacity accessors for uniform value. + * @type {Uniform} + */ + opacity: Uniform; + /** + * Returns the opacity. + * + * @return {Number} The opacity. + */ + getOpacity(): number; + /** + * Sets the opacity. + * + * @param {Number} value - The opacity. + */ + setOpacity(value: number): void; + /** + * Returns the blend function. + * + * @deprecated Use blendFunction instead. + * @return {BlendFunction} The blend function. + */ + getBlendFunction(): BlendFunction; + /** + * Sets the blend function. + * + * @deprecated Use blendFunction instead. + * @param {BlendFunction} value - The blend function. + */ + setBlendFunction(value: BlendFunction): void; + /** + * Returns the blend function shader code. + * + * @return {String} The blend function shader code. + */ + getShaderCode(): string; + /** + * The blend function. + * + * @type {BlendFunction} + */ + get blendFunction(): BlendFunction; + set blendFunction(value: BlendFunction); + +} + +/** + * An abstract effect. + * + * Effects can be combined using the {@link EffectPass}. + * + * @implements {Initializable} + * @implements {Resizable} + * @implements {Disposable} + */ +export class Effect + extends EventDispatcher + implements Initializable, Resizable, Disposable { + + /** + * Constructs a new effect. + * + * @param {String} name - The name of this effect. Doesn't have to be unique. + * @param {String} fragmentShader - The fragment shader. This shader is required. + * @param {Object} [options] - Additional options. + * @param {EffectAttribute} [options.attributes=EffectAttribute.NONE] - The effect attributes that determine the execution priority and resource requirements. + * @param {BlendFunction} [options.blendFunction=BlendFunction.SCREEN] - The blend function of this effect. + * @param {Map} [options.defines] - Custom preprocessor macro definitions. Keys are names and values are code. + * @param {Map} [options.uniforms] - Custom shader uniforms. Keys are names and values are uniforms. + * @param {Set} [options.extensions] - WebGL extensions. + * @param {String} [options.vertexShader=null] - The vertex shader. Most effects don't need one. + */ + constructor( + name: string, + fragmentShader: string, + { + attributes, + blendFunction, + defines, + uniforms, + extensions, + vertexShader + }?: { + attributes?: EffectAttribute; + blendFunction?: BlendFunction; + defines?: Map; + uniforms?: Map; + extensions?: Set; + vertexShader?: string; + } + ); + + /** + * The name of this effect. + * + * @type {String} + */ + name: string; + /** + * The renderer. + * + * @type {WebGLRenderer} + * @protected + * @deprecated + */ + protected renderer: WebGLRenderer; + /** + * Preprocessor macro definitions. + * + * Call {@link Effect.setChanged} after changing macro definitions. + * + * @type {Map} + */ + readonly defines: Map; + /** + * Shader uniforms. + * + * Call {@link Effect.setChanged} after adding or removing uniforms. + * + * @type {Map} + */ + readonly uniforms: Map; + /** + * WebGL extensions that are required by this effect. + * + * Call {@link Effect.setChanged} after adding or removing extensions. + * + * @type {Set} + */ + readonly extensions: Set; + /** + * The blend mode of this effect. + * + * @type {BlendMode} + */ + readonly blendMode: BlendMode; + /** + * The input color space. + * + * @type {ColorSpace} + * @experimental + */ + get inputColorSpace(): ColorSpace; + /** + * @type {ColorSpace} + * @protected + * @experimental + */ + protected set inputColorSpace(arg: ColorSpace); + /** + * The output color space. + * + * Should only be changed if this effect converts the input colors to a different color space. + * + * @type {ColorSpace} + * @experimental + */ + get outputColorSpace(): ColorSpace; + /** + * @type {ColorSpace} + * @protected + * @experimental + */ + protected set outputColorSpace(arg: ColorSpace); + /** + * Sets the main scene. + * + * @type {Scene} + */ + set mainScene(arg: Scene); + /** + * Sets the main camera. + * + * @type {Camera} + */ + set mainCamera(arg: Camera); + /** + * Returns the name of this effect. + * + * @deprecated Use name instead. + * @return {String} The name. + */ + getName(): string; + /** + * Sets the renderer. + * + * @deprecated + * @param {WebGLRenderer} renderer - The renderer. + */ + setRenderer(renderer: WebGLRenderer): void; + /** + * Returns the preprocessor macro definitions. + * + * @deprecated Use defines instead. + * @return {Map} The extensions. + */ + getDefines(): Map; + /** + * Returns the uniforms of this effect. + * + * @deprecated Use uniforms instead. + * @return {Map} The extensions. + */ + getUniforms(): Map; + /** + * Returns the WebGL extensions that are required by this effect. + * + * @deprecated Use extensions instead. + * @return {Set} The extensions. + */ + getExtensions(): Set; + /** + * Returns the blend mode. + * + * The result of this effect will be blended with the result of the previous effect using this blend mode. + * + * @deprecated Use blendMode instead. + * @return {BlendMode} The blend mode. + */ + getBlendMode(): BlendMode; + /** + * Returns the effect attributes. + * + * @return {EffectAttribute} The attributes. + */ + getAttributes(): EffectAttribute; + /** + * Sets the effect attributes. + * + * Effects that have the same attributes will be executed in the order in which they were registered. Some attributes + * imply a higher priority. + * + * @protected + * @param {EffectAttribute} attributes - The attributes. + */ + protected setAttributes(attributes: EffectAttribute): void; + /** + * Returns the fragment shader. + * + * @return {String} The fragment shader. + */ + getFragmentShader(): string; + /** + * Sets the fragment shader. + * + * @protected + * @param {String} fragmentShader - The fragment shader. + */ + protected setFragmentShader(fragmentShader: string): void; + /** + * Returns the vertex shader. + * + * @return {String} The vertex shader. + */ + getVertexShader(): string; + /** + * Sets the vertex shader. + * + * @protected + * @param {String} vertexShader - The vertex shader. + */ + protected setVertexShader(vertexShader: string): void; + /** + * Informs the associated {@link EffectPass} that this effect requires a shader recompilation. + * + * Should be called after changing macros or extensions and after adding/removing uniforms. + * + * @protected + */ + protected setChanged(): void; + /** + * Sets the depth texture. + * + * You may override this method if your effect requires direct access to the depth texture that is bound to the + * associated {@link EffectPass}. + * + * @param {Texture} depthTexture - A depth texture. + * @param {DepthPackingStrategies} [depthPacking=BasicDepthPacking] - The depth packing. + */ + setDepthTexture( + depthTexture: Texture, + depthPacking?: DepthPackingStrategies + ): void; + + /** + * Updates this effect by performing supporting operations. + * + * This method is called by the {@link EffectPass} right before the main fullscreen render operation, even if the + * blend function is set to `SKIP`. + * + * You may override this method if you need to update custom uniforms or render additional off-screen textures. + * + * @param {WebGLRenderer} renderer - The renderer. + * @param {WebGLRenderTarget} inputBuffer - A frame buffer that contains the result of the previous pass. + * @param {Number} [deltaTime] - The time between the last frame and the current one in seconds. + */ + update( + renderer: WebGLRenderer, + inputBuffer: WebGLRenderTarget, + deltaTime?: number + ): void; + + /** + * Updates the size of this effect. + * + * You may override this method if you want to be informed about the size of the backbuffer/canvas. + * This method is called before {@link initialize} and every time the size of the {@link EffectComposer} changes. + * + * @param {Number} width - The width. + * @param {Number} height - The height. + */ + setSize(width: number, height: number): void; + /** + * Performs initialization tasks. + * + * This method is called when the associated {@link EffectPass} is added to an {@link EffectComposer}. + * + * @param {WebGLRenderer} renderer - The renderer. + * @param {Boolean} alpha - Whether the renderer uses the alpha channel or not. + * @param {Number} frameBufferType - The type of the main frame buffers. + * @example if(!alpha && frameBufferType === UnsignedByteType) { this.myRenderTarget.texture.format = RGBFormat; } + */ + initialize( + renderer: WebGLRenderer, + alpha: boolean, + frameBufferType: number + ): void; + + /** + * Performs a shallow search for properties that define a dispose method and deletes them. + * + * The {@link EffectComposer} calls this method when it is being destroyed. + */ + dispose(): void; + +} + +/** + * An enumeration of effect attributes. + * + * Attributes can be concatenated using the bitwise OR operator. + * + * @type {Object} + * @property {Number} NONE - No attributes. Most effects don't need to specify any attributes. + * @property {Number} DEPTH - Describes effects that require a depth texture. + * @property {Number} CONVOLUTION - Describes effects that fetch additional samples from the input buffer. There cannot be more than one effect with this attribute per {@link EffectPass}. + * @example const attributes = EffectAttribute.CONVOLUTION | EffectAttribute.DEPTH; + */ +export enum EffectAttribute { + CONVOLUTION, + DEPTH, + NONE +} + +/** + * An enumeration of WebGL extensions. + * + * @type {Object} + * @property {String} DERIVATIVES - Enables derivatives by adding the functions dFdx, dFdy and fwidth. + * @property {String} FRAG_DEPTH - Enables gl_FragDepthEXT to set a depth value of a fragment from within the fragment shader. + * @property {String} DRAW_BUFFERS - Enables multiple render targets (MRT) support. + * @property {String} SHADER_TEXTURE_LOD - Enables explicit control of texture LOD. + */ +export enum WebGLExtension { + DERIVATIVES = "derivatives", + FRAG_DEPTH = "fragDepth", + DRAW_BUFFERS = "drawBuffers", + SHADER_TEXTURE_LOD = "shaderTextureLOD" +} + +/** + * An effect pass. + * + * Use this pass to combine {@link Effect} instances. + */ +export class EffectPass extends Pass { + + /** + * Constructs a new effect pass. + * + * @param {Camera} camera - The main camera. + * @param {...Effect} effects - The effects that will be rendered by this pass. + */ + constructor(camera?: Camera, ...effects: Effect[]); + /** + * The effects. + * + * Use `updateMaterial` or `recompile` after changing the effects and consider calling `dispose` to free resources + * of unused effects. + * + * @type {Effect[]} + * @protected + */ + private effects: Effect[]; + /** + * A time offset. + * + * Elapsed time will start at this value. + * + * @type {Number} + * @deprecated + */ + minTime: number; + /** + * The maximum time. + * + * If the elapsed time exceeds this value, it will be reset. + * + * @type {Number} + * @deprecated + */ + maxTime: number; + set encodeOutput(arg: boolean); + /** + * Indicates whether this pass encodes its output when rendering to screen. + * + * @type {Boolean} + * @deprecated Use fullscreenMaterial.encodeOutput instead. + */ + get encodeOutput(): boolean; + set dithering(arg: boolean); + /** + * Indicates whether dithering is enabled. + * + * @type {Boolean} + */ + get dithering(): boolean; + /** + * Updates the compound shader material. + */ + protected updateMaterial(): void; + /** + * Rebuilds the shader material. + */ + recompile(): void; + /** + * Sets the effects. + * + * @param effects - The effects. + */ + protected setEffects(effects: Effect[]): void; + /** + * Returns the current depth texture. + * @returns The current depth texture, or null if there is none. + */ + getDepthTexture(): Texture; + /** + * Sets the depth texture. + * @param depthTexture - A depth texture. + * @param [depthPacking = 0] - The depth packing. + */ + setDepthTexture(depthTexture: Texture, depthPacking?: number): void; + /** + * Renders the effect. + * @param renderer - The renderer. + * @param inputBuffer - A frame buffer that contains the result of the previous pass. + * @param outputBuffer - A frame buffer that serves as the output render target unless this pass renders to screen. + * @param [deltaTime] - The time between the last frame and the current one in seconds. + * @param [stencilTest] - Indicates whether a stencil mask is active. + */ + render( + renderer: WebGLRenderer, + inputBuffer: WebGLRenderTarget | null, + outputBuffer: WebGLRenderTarget | null, + deltaTime?: number, + stencilTest?: boolean + ): void; + + /** + * Updates the size of this pass. + * @param width - The width. + * @param height - The height. + */ + setSize(width: number, height: number): void; + /** + * Performs initialization tasks. + * @param renderer - The renderer. + * @param alpha - Whether the renderer uses the alpha channel or not. + * @param frameBufferType - The type of the main frame buffers. + */ + initialize( + renderer: WebGLRenderer, + alpha: boolean, + frameBufferType: number + ): void; + + /** + * Deletes disposable objects. + * This pass will be inoperative after this method was called! + */ + dispose(): void; + /** + * Handles events. + * + * @param {Event} event - An event. + */ + handleEvent(event: Event): void; + +} + +/** + * A pass that executes a given function. + */ +export class LambdaPass extends Pass { + + /** + * Constructs a new lambda pass. + * + * @param {Function} f - A function. + */ + constructor(f: () => void); + +} + +/** + * A pass that renders luminance. + */ +export class LuminancePass extends Pass { + + /** + * Constructs a new luminance pass. + * + * @param {Object} [options] - The options. See {@link LuminanceMaterial} for additional options. + * @param {Number} [options.resolutionScale=1.0] - The resolution scale. + * @param {Number} [options.resolutionX=Resolution.AUTO_SIZE] - The horizontal resolution. + * @param {Number} [options.resolutionY=Resolution.AUTO_SIZE] - The vertical resolution. + * @param {Number} [options.width=Resolution.AUTO_SIZE] - Deprecated. Use resolutionX instead. + * @param {Number} [options.height=Resolution.AUTO_SIZE] - Deprecated. Use resolutionY instead. + * @param {WebGLRenderTarget} [options.renderTarget] - A custom render target. + */ + constructor({ + resolutionScale, + resolutionX, + resolutionY, + width, + height, + renderTarget + }?: { + resolutionScale?: number; + resolutionX?: number; + resolutionY?: number; + width?: number; + height?: number; + renderTarget?: WebGLRenderTarget; + }); + + resolution: Resolution; + /** + * The luminance texture. + * + * @type {Texture} + */ + get texture(): Texture; + /** + * Returns the luminance texture. + * + * @deprecated Use texture instead. + * @return {Texture} The texture. + */ + getTexture(): Texture; + /** + * Returns the resolution settings. + * + * @deprecated Use resolution instead. + * @return {Resolution} The resolution. + */ + getResolution(): Resolution; + /** + * Renders the luminance. + * + * @param {WebGLRenderer} renderer - The renderer. + * @param {WebGLRenderTarget} inputBuffer - A frame buffer that contains the result of the previous pass. + * @param {WebGLRenderTarget} outputBuffer - A frame buffer that serves as the output render target unless this pass renders to screen. + * @param {Number} [deltaTime] - The time between the last frame and the current one in seconds. + * @param {Boolean} [stencilTest] - Indicates whether a stencil mask is active. + */ + render( + renderer: WebGLRenderer, + inputBuffer: WebGLRenderTarget | null, + outputBuffer: WebGLRenderTarget | null, + deltaTime?: number, + stencilTest?: boolean + ): void; + +} + +/** + * A stencil mask pass. + * + * This pass requires that the input and output buffers have a stencil buffer. You can enable the stencil buffer via the + * {@link EffectComposer} constructor. + */ +export class MaskPass extends Pass { + + /** + * Constructs a new mask pass. + * + * @param {Scene} scene - The scene to render. + * @param {Camera} camera - The camera to use. + */ + constructor(scene?: Scene, camera?: Camera); + /** + * A clear pass. + * + * @type {ClearPass} + */ + clearPass: ClearPass; + /** + * Inverse flag. + * + * @type {Boolean} + * @deprecated Use inverted instead. + */ + inverse: boolean; + set inverted(arg: boolean); + /** + * Indicates whether the mask should be inverted. + * + * @type {Boolean} + */ + get inverted(): boolean; + set clear(arg: boolean); + /** + * Indicates whether this pass should clear the stencil buffer. + * + * @type {Boolean} + * @deprecated Use clearPass.enabled instead. + */ + get clear(): boolean; + /** + * Returns the internal clear pass. + * + * @deprecated Use clearPass.enabled instead. + * @return {ClearPass} The clear pass. + */ + getClearPass(): ClearPass; + /** + * Indicates whether the mask is inverted. + * + * @deprecated Use inverted instead. + * @return {Boolean} Whether the mask is inverted. + */ + isInverted(): boolean; + /** + * Enables or disable mask inversion. + * + * @deprecated Use inverted instead. + * @param {Boolean} value - Whether the mask should be inverted. + */ + setInverted(value: boolean): void; + /** + * Renders the effect. + * @param renderer - The renderer. + * @param inputBuffer - A frame buffer that contains the result of the previous pass. + * @param outputBuffer - A frame buffer that serves as the output render target unless this pass renders to screen. + * @param [deltaTime] - The time between the last frame and the current one in seconds. + * @param [stencilTest] - Indicates whether a stencil mask is active. + */ + render( + renderer: WebGLRenderer, + inputBuffer: WebGLRenderTarget | null, + outputBuffer: WebGLRenderTarget | null, + deltaTime?: number, + stencilTest?: boolean + ): void; + +} + +/** + * A pass that renders the normals of a given scene. + */ +export class NormalPass extends Pass { + + /** + * Constructs a new normal pass. + * + * @param {Scene} scene - The scene to render. + * @param {Camera} camera - The camera to use to render the scene. + * @param {Object} [options] - The options. + * @param {Number} [options.resolutionScale=1.0] - The resolution scale. + * @param {Number} [options.resolutionX=Resolution.AUTO_SIZE] - The horizontal resolution. + * @param {Number} [options.resolutionY=Resolution.AUTO_SIZE] - The vertical resolution. + * @param {Number} [options.width=Resolution.AUTO_SIZE] - Deprecated. Use resolutionX instead. + * @param {Number} [options.height=Resolution.AUTO_SIZE] - Deprecated. Use resolutionY instead. + * @param {WebGLRenderTarget} [options.renderTarget] - A custom render target. + */ + constructor( + scene?: Scene, + camera?: Camera, + { + resolutionScale, + resolutionX, + resolutionY, + width, + height, + renderTarget + }?: { + resolutionScale?: number; + resolutionX?: number; + resolutionY?: number; + width?: number; + height?: number; + renderTarget?: WebGLRenderTarget; + } + ); + + resolution: Resolution; + /** + * The normal texture. + * + * @type {Texture} + */ + get texture(): Texture; + /** + * The normal texture. + * + * @deprecated Use texture instead. + * @return {Texture} The texture. + */ + getTexture(): Texture; + /** + * Returns the resolution settings. + * + * @deprecated Use resolution instead. + * @return {Resolution} The resolution. + */ + getResolution(): Resolution; + /** + * Returns the current resolution scale. + * + * @return {Number} The resolution scale. + * @deprecated Use resolution.preferredWidth or resolution.preferredHeight instead. + */ + getResolutionScale(): number; + /** + * Sets the resolution scale. + * + * @param {Number} scale - The new resolution scale. + * @deprecated Use resolution.preferredWidth or resolution.preferredHeight instead. + */ + setResolutionScale(scale: number): void; + /** + * Renders the scene normals. + * + * @param {WebGLRenderer} renderer - The renderer. + * @param {WebGLRenderTarget} inputBuffer - A frame buffer that contains the result of the previous pass. + * @param {WebGLRenderTarget} outputBuffer - A frame buffer that serves as the output render target unless this pass renders to screen. + * @param {Number} [deltaTime] - The time between the last frame and the current one in seconds. + * @param {Boolean} [stencilTest] - Indicates whether a stencil mask is active. + */ + render( + renderer: WebGLRenderer, + inputBuffer: WebGLRenderTarget | null, + outputBuffer: WebGLRenderTarget | null, + deltaTime?: number, + stencilTest?: boolean + ): void; + +} + +/** + * A shader pass. + * + * Renders any shader material as a fullscreen effect. This pass should not be used to create multiple chained effects. + * For a more efficient solution, please refer to the {@link EffectPass}. + */ +export class ShaderPass extends Pass { + + /** + * Constructs a new shader pass. + * + * @param {ShaderMaterial} material - A shader material. + * @param {String} [input="inputBuffer"] - The name of the input buffer uniform. + */ + constructor(material: ShaderMaterial, input?: string); + /** + * Sets the name of the input buffer uniform. + * + * Most fullscreen materials modify texels from an input texture. This pass automatically assigns the main input + * buffer to the uniform identified by the given name. + * + * @param {String} input - The name of the input buffer uniform. + */ + setInput(input: string): void; + /** + * Renders the effect. + * @param renderer - The renderer. + * @param inputBuffer - A frame buffer that contains the result of the previous pass. + * @param outputBuffer - A frame buffer that serves as the output render target unless this pass renders to screen. + * @param [deltaTime] - The time between the last frame and the current one in seconds. + * @param [stencilTest] - Indicates whether a stencil mask is active. + */ + render( + renderer: WebGLRenderer, + inputBuffer: WebGLRenderTarget | null, + outputBuffer: WebGLRenderTarget | null, + deltaTime?: number, + stencilTest?: boolean + ): void; + +} + +/** + * The EffectComposer may be used in place of a normal WebGLRenderer. + * + * The auto clear behaviour of the provided renderer will be disabled to prevent unnecessary clear operations. + * + * It is common practice to use a {@link RenderPass} as the first pass to automatically clear the buffers and render a + * scene for further processing. + * + * @implements {Resizable} + * @implements {Disposable} + */ +export class EffectComposer implements Resizable, Disposable { + + /** + * Constructs a new effect composer. + * + * @param {WebGLRenderer} renderer - The renderer that should be used. + * @param {Object} [options] - The options. + * @param {Boolean} [options.depthBuffer=true] - Whether the main render targets should have a depth buffer. + * @param {Boolean} [options.stencilBuffer=false] - Whether the main render targets should have a stencil buffer. + * @param {Boolean} [options.alpha] - Deprecated. Buffers are always RGBA since three r137. + * @param {Number} [options.multisampling=0] - The number of samples used for multisample antialiasing. Requires WebGL 2. + * @param {Number} [options.frameBufferType] - The type of the internal frame buffers. It's recommended to use HalfFloatType if possible. + */ + constructor( + renderer?: WebGLRenderer, + { + depthBuffer, + stencilBuffer, + multisampling, + frameBufferType + }?: { + depthBuffer?: boolean; + stencilBuffer?: boolean; + alpha?: boolean; + multisampling?: number; + frameBufferType?: number; + } + ); + + /** + * The input buffer. + * + * Two identical buffers are used to avoid reading from and writing to the same render target. + * + * @type {WebGLRenderTarget} + */ + inputBuffer: WebGLRenderTarget; + /** + * The output buffer. + * + * @type {WebGLRenderTarget} + */ + outputBuffer: WebGLRenderTarget; + /** + * The passes. + * + * @type {Pass[]} + */ + passes: Pass[]; + /** + * Determines whether the last pass automatically renders to screen. + * + * @type {Boolean} + */ + autoRenderToScreen: boolean; + /** + * Sets the amount of MSAA samples. + * + * Requires WebGL 2. Set to zero to disable multisampling. + * + * @type {Number} + */ + set multisampling(arg: number); + /** + * The current amount of samples used for multisample anti-aliasing. + * + * @type {Number} + */ + get multisampling(): number; + /** + * Returns the internal timer. + * + * @return {Timer} The timer. + */ + getTimer(): Timer; + /** + * Returns the renderer. + * + * @return {WebGLRenderer} The renderer. + */ + getRenderer(): WebGLRenderer; + /** + * Sets the renderer. + * + * @param {WebGLRenderer} renderer - The renderer. + */ + setRenderer(renderer: WebGLRenderer): void; + /** + * Replaces the current renderer with the given one. + * + * The auto clear mechanism of the provided renderer will be disabled. If the new render size differs from the + * previous one, all passes will be updated. + * + * By default, the DOM element of the current renderer will automatically be removed from its parent node and the DOM + * element of the new renderer will take its place. + * + * @deprecated Use setRenderer instead. + * @param {WebGLRenderer} renderer - The new renderer. + * @param {Boolean} updateDOM - Indicates whether the old canvas should be replaced by the new one in the DOM. + * @return {WebGLRenderer} The old renderer. + */ + replaceRenderer( + renderer: WebGLRenderer, + updateDOM?: boolean + ): WebGLRenderer; + /** + * Can be used to change the main scene for all registered passes and effects. + * + * @param {Scene} scene - The scene. + */ + setMainScene(scene: Scene): void; + /** + * Can be used to change the main camera for all registered passes and effects. + * + * @param {Camera} camera - The camera. + */ + setMainCamera(camera: Camera): void; + /** + * Adds a pass, optionally at a specific index. + * + * @param {Pass} pass - A new pass. + * @param {Number} [index] - An index at which the pass should be inserted. + */ + addPass(pass: Pass, index?: number): void; + /** + * Removes a pass. + * + * @param {Pass} pass - The pass. + */ + removePass(pass: Pass): void; + /** + * Removes all passes. + */ + removeAllPasses(): void; + /** + * Renders all enabled passes in the order in which they were added. + * + * @param {Number} [deltaTime] - The time since the last frame in seconds. + */ + render(deltaTime?: number): void; + /** + * Sets the size of the buffers, passes and the renderer. + * + * @param {Number} width - The width. + * @param {Number} height - The height. + * @param {Boolean} [updateStyle] - Determines whether the style of the canvas should be updated. + */ + setSize(width: number, height: number, updateStyle?: boolean): void; + /** + * Resets this composer by deleting all passes and creating new buffers. + */ + reset(): void; + /** + * Disposes this composer and all passes. + */ + dispose(): void; + +} + +/** + * An override material manager. + * + * Includes a workaround that fixes override materials for skinned meshes and instancing. Doesn't fix uniforms such as + * normal maps and displacement maps. Using the workaround may have a negative impact on performance if the scene + * contains a lot of meshes. + * + * @implements {Disposable} + */ +export class OverrideMaterialManager implements Disposable { + + /** + * Enables or disables the override material workaround globally. + * + * This only affects post processing passes and effects. + * + * @type {Boolean} + */ + static set workaroundEnabled(arg: boolean); + /** + * Indicates whether the override material workaround is enabled. + * + * @type {Boolean} + */ + static get workaroundEnabled(): boolean; + /** + * Constructs a new override material manager. + * + * @param {Material} [material=null] - An override material. + */ + constructor(material?: Material); + /** + * Sets the override material. + * + * @param {Material} material - The material. + */ + setMaterial(material: Material): void; + /** + * Performs cleanup tasks. + */ + dispose(): void; + +} + +/** + * The Resizable contract. + * + * Implemented by objects that can be resized. + * + * @interface + */ +export interface Resizable { + + /** + * Sets the size of this object. + * + * @param {number} width - The width. + * @param {number} height - The height. + */ + setSize(width: number, height: number): void; + +} + +/** + * A timer that provides read access to time data. + * + * @interface + */ +export interface ImmutableTimer { + + /** + * The current delta time in seconds. + * + * @type {Number} + */ + getDelta(): number; + /** + * The elapsed time in seconds. + * + * @type {Number} + */ + getElapsed(): number; + +} + +/** + * An object selection. + * + * Object selections use render layers to facilitate quick and efficient visibility changes. + */ +export class Selection extends Set { + + /** + * Constructs a new selection. + * + * @param {Iterable} [iterable] - A collection of objects that should be added to this selection. + * @param {Number} [layer=10] - A dedicated render layer for selected objects. + */ + constructor(iterable?: Iterable, layer?: number); + /** + * Controls whether objects that are added to this selection should be removed from all other layers. + * + * @type {Boolean} + */ + exclusive: boolean; + set layer(arg: number); + /** + * The render layer for selected objects. + * + * @type {Number} + */ + get layer(): number; + /** + * Returns the current render layer for selected objects. + * + * The default layer is 10. If this collides with your own custom layers, please change it before rendering! + * + * @deprecated Use layer instead. + * @return {Number} The layer. + */ + getLayer(): number; + /** + * Sets the render layer for selected objects. + * + * The current selection will be updated accordingly. + * + * @deprecated Use layer instead. + * @param {Number} value - The layer. Range is [0, 31]. + */ + setLayer(value: number): void; + /** + * Indicates whether objects that are added to this selection will be removed from all other layers. + * + * @deprecated Use exclusive instead. + * @return {Number} Whether this selection is exclusive. Default is false. + */ + isExclusive(): number; + /** + * Controls whether objects that are added to this selection should be removed from all other layers. + * + * @deprecated Use exclusive instead. + * @param {Number} value - Whether this selection should be exclusive. + */ + setExclusive(value: number): void; + /** + * Clears this selection. + * + * @return {Selection} This selection. + */ + clear(): this; + /** + * Clears this selection and adds the given objects. + * + * @param {Iterable} objects - The objects that should be selected. + * @return {Selection} This selection. + */ + set(objects: Iterable): this; + /** + * An alias for {@link has}. + * + * @param {Object3D} object - An object. + * @return {Number} Returns 0 if the given object is currently selected, or -1 otherwise. + * @deprecated Added for backward-compatibility. + */ + indexOf(object: Object3D): number; + /** + * Adds an object to this selection. + * + * If {@link exclusive} is set to `true`, the object will also be removed from all other layers. + * + * @param {Object3D} object - The object that should be selected. + * @return {Selection} This selection. + */ + add(object: Object3D): this; + /** + * Removes an existing object from the selection. If the object doesn't exist it's added instead. + * + * @param {Object3D} object - The object. + * @return {Boolean} Returns true if the object is added, false otherwise. + */ + toggle(object: Object3D): boolean; + /** + * Sets the visibility of all selected objects. + * + * This method enables or disables render layer 0 of all selected objects. + * + * @param {Boolean} visible - Whether the selected objects should be visible. + * @return {Selection} This selection. + */ + setVisible(visible: boolean): this; + +} + +/** + * A timer. + * + * Original implementation by Michael Herzog (Mugen87). + * + * @deprecated Use `three/addons/misc/Timer.js` instead. + * @implements {ImmutableTimer} + * @implements {Disposable} + * @implements {EventListenerObject} + */ +export class Timer implements Disposable, ImmutableTimer, EventListenerObject { + + handleEvent(object: Event): void; + /** + * The current delta time in seconds. + */ + get delta(): number; + /** + * The fixed delta time in seconds. + */ + get fixedDelta(): number; + set fixedDelta(value: number); + /** + * The elapsed time in seconds. + */ + get elapsed(): number; + /** + * Determines whether this timer should use a fixed time step. + */ + useFixedDelta: boolean; + /** + * The timescale. + */ + timescale: number; + /** + * Enables or disables auto reset based on page visibility. + * + * If enabled, the timer will be reset when the page becomes visible. This effectively pauses the timer when the page + * is hidden. Has no effect if the API is not supported. + * + * @see https://developer.mozilla.org/en-US/docs/Web/API/Page_Visibility_API + */ + get autoReset(): boolean; + set autoReset(value: boolean); + + getDelta(): number; + getElapsed(): number; + /** + * Updates this timer. + * + * @param {Number} [timestamp] - The current time in milliseconds. + */ + update(timestamp?: number): void; + /** + * Resets this timer. + * + * @return {Timer} This timer. + */ + reset(): Timer; + /** + * Disposes this timer. + */ + dispose(): void; + +} + +/** + * An ASCII effect. + * + * Warning: This effect cannot be merged with convolution effects. + */ +export class ASCIIEffect extends Effect { + + /** + * Constructs a new ASCII effect. + * + * @param {Object} [options] - The options. + * @param {ASCIITexture} [options.asciiTexture] - An ASCII character lookup texture. + * @param {Number} [options.cellSize=16] - The cell size. It's recommended to use even numbers. + * @param {Number} [options.color=null] - A color to use instead of the scene colors. + * @param {Boolean} [options.inverted=false] - Inverts the effect. + */ + constructor({ + asciiTexture, + cellSize, + color, + inverted + }?: { + asciiTexture?: ASCIITexture | null; + cellSize?: number; + color?: Color | string | number | null; + inverted?: boolean; + }); + + /** + * The current ASCII lookup texture. + * + * @type {ASCIITexture} + */ + get asciiTexture(): ASCIITexture | null; + set asciiTexture(value: ASCIITexture | null); + /** + * A color that overrides the scene colors. + * + * @type {Color | string | number | null} + */ + get color(): Color; + set color(value: Color | string | number | null); + /** + * Controls whether the effect should be inverted. + * + * @type {Boolean} + */ + get inverted(): boolean; + set inverted(value: boolean); + /** + * The cell size. + * + * @type {Number} + */ + get cellSize(): number; + set cellSize(value: number); + +} + +export interface BloomEffectOptions { + blendFunction?: BlendFunction; + luminanceThreshold?: number; + luminanceSmoothing?: number; + mipmapBlur?: boolean; + intensity?: number; + radius?: number; + levels?: number; + kernelSize?: KernelSize; + resolutionScale?: number; + width?: number; + height?: number; + resolutionX?: number; + resolutionY?: number; +} + +/** + * A bloom effect. + */ +export class BloomEffect extends Effect { + + /** + * Constructs a new bloom effect. + * + * @param {Object} [options] - The options. + * @param {BlendFunction} [options.blendFunction=BlendFunction.SCREEN] - The blend function of this effect. + * @param {Number} [options.luminanceThreshold=1.0] - The luminance threshold. Raise this value to mask out darker elements in the scene. + * @param {Number} [options.luminanceSmoothing=0.03] - Controls the smoothness of the luminance threshold. + * @param {Boolean} [options.mipmapBlur=true] - Enables or disables mipmap blur. + * @param {Number} [options.intensity=1.0] - The bloom intensity. + * @param {Number} [options.radius=0.85] - The blur radius. Only applies to mipmap blur. + * @param {Number} [options.levels=8] - The amount of MIP levels. Only applies to mipmap blur. + * @param {KernelSize} [options.kernelSize=KernelSize.LARGE] - Deprecated. Use mipmapBlur instead. + * @param {Number} [options.resolutionScale=0.5] - Deprecated. Use mipmapBlur instead. + * @param {Number} [options.resolutionX=Resolution.AUTO_SIZE] - Deprecated. Use mipmapBlur instead. + * @param {Number} [options.resolutionY=Resolution.AUTO_SIZE] - Deprecated. Use mipmapBlur instead. + * @param {Number} [options.width=Resolution.AUTO_SIZE] - Deprecated. Use mipmapBlur instead. + * @param {Number} [options.height=Resolution.AUTO_SIZE] - Deprecated. Use mipmapBlur instead. + */ + constructor({ + blendFunction, + luminanceThreshold, + luminanceSmoothing, + mipmapBlur, + intensity, + radius, + levels, + kernelSize, + resolutionScale, + width, + height, + resolutionX, + resolutionY + }?: BloomEffectOptions); + + /** + * A luminance shader pass. + * + * This pass can be disabled to skip luminance filtering. + * + * @type {LuminancePass} + * @readonly + */ + readonly luminancePass: LuminancePass; + /** + * A blur pass. + * + * @type {KawaseBlurPass} + * @readonly + * @deprecated Use mipmapBlurPass instead. + */ + readonly blurPass: KawaseBlurPass; + /** + * A mipmap blur pass. + * + * @type {MipmapBlurPass} + * @readonly + */ + readonly mipmapBlurPass: MipmapBlurPass; + /** + * A texture that contains the intermediate result of this effect. + * + * @type {Texture} + */ + get texture(): Texture; + /** + * Returns the generated bloom texture. + * + * @deprecated Use texture instead. + * @return {Texture} The texture. + */ + getTexture(): Texture; + /** + * The resolution of this effect. + * + * @type {Resolution} + */ + get resolution(): Resolution; + /** + * Returns the resolution settings. + * + * @deprecated Use resolution instead. + * @return {Resolution} The resolution. + */ + getResolution(): Resolution; + /** + * Returns the blur pass. + * + * @deprecated Use blurPass instead. + * @return {KawaseBlurPass} The blur pass. + */ + getBlurPass(): KawaseBlurPass; + /** + * Returns the luminance pass. + * + * @deprecated Use luminancePass instead. + * @return {LuminancePass} The luminance pass. + */ + getLuminancePass(): LuminancePass; + /** + * The luminance material. + * + * @type {LuminanceMaterial} + */ + get luminanceMaterial(): LuminanceMaterial; + /** + * Returns the luminance material. + * + * @deprecated Use luminanceMaterial instead. + * @return {LuminanceMaterial} The material. + */ + getLuminanceMaterial(): LuminanceMaterial; + set width(arg: number); + /** + * The current width of the internal render targets. + * + * @type {Number} + * @deprecated Use resolution.width instead. + */ + get width(): number; + set height(arg: number); + /** + * The current height of the internal render targets. + * + * @type {Number} + * @deprecated Use resolution.height instead. + */ + get height(): number; + set dithering(arg: boolean); + /** + * Indicates whether dithering is enabled. + * + * @type {Boolean} + * @deprecated Use EffectPass.fullscreenMaterial.dithering instead. + */ + get dithering(): boolean; + set kernelSize(arg: KernelSize); + /** + * The blur kernel size. + * + * @type {KernelSize} + * @deprecated Use blurPass.kernelSize instead. + */ + get kernelSize(): KernelSize; + set distinction(arg: number); + /** + * @type {Number} + * @deprecated Use luminanceMaterial instead. + */ + get distinction(): number; + set intensity(arg: number); + /** + * The bloom intensity. + * + * @type {Number} + */ + get intensity(): number; + /** + * The bloom intensity. + * + * @deprecated Use intensity instead. + * @return {Number} The intensity. + */ + getIntensity(): number; + /** + * Sets the bloom intensity. + * + * @deprecated Use intensity instead. + * @param {Number} value - The intensity. + */ + setIntensity(value: number): void; + /** + * Returns the current resolution scale. + * + * @return {Number} The resolution scale. + * @deprecated Use resolution instead. + */ + getResolutionScale(): number; + /** + * Sets the resolution scale. + * + * @param {Number} scale - The new resolution scale. + * @deprecated Use resolution instead. + */ + setResolutionScale(scale: number): void; + /** + * Updates this effect. + * + * @param {WebGLRenderer} renderer - The renderer. + * @param {WebGLRenderTarget} inputBuffer - A frame buffer that contains the result of the previous pass. + * @param {Number} [deltaTime] - The time between the last frame and the current one in seconds. + */ + update( + renderer: WebGLRenderer, + inputBuffer: WebGLRenderTarget, + deltaTime?: number + ): void; + + /** + * Updates the size of internal render targets. + * + * @param {Number} width - The width. + * @param {Number} height - The height. + */ + setSize(width: number, height: number): void; + /** + * Performs initialization tasks. + * + * @param {WebGLRenderer} renderer - The renderer. + * @param {Boolean} alpha - Whether the renderer uses the alpha channel or not. + * @param {Number} frameBufferType - The type of the main frame buffers. + */ + initialize( + renderer: WebGLRenderer, + alpha: boolean, + frameBufferType: number + ): void; + +} + +/** + * A depth of field (bokeh) effect. + * + * Original shader code by Martins Upitis: + * http://artmartinsh.blogspot.com/2010/02/glsl-lens-blur-filter-with-bokeh.html + * + * @deprecated Use DepthOfFieldEffect instead. + */ +export class BokehEffect extends Effect { + + /** + * Constructs a new bokeh effect. + * + * @param {Object} [options] - The options. + * @param {BlendFunction} [options.blendFunction=BlendFunction.NORMAL] - The blend function of this effect. + * @param {Number} [options.focus=0.5] - The focus distance ratio, ranging from 0.0 to 1.0. + * @param {Number} [options.dof=0.02] - Depth of field. An area in front of and behind the focal point that still appears sharp. + * @param {Number} [options.aperture=0.015] - Camera aperture scale. Bigger values for stronger blur and shallower depth of field. + * @param {Number} [options.maxBlur=1.0] - The maximum blur strength. + */ + constructor({ + blendFunction, + focus, + dof, + aperture, + maxBlur + }?: { + blendFunction?: BlendFunction; + focus?: number; + dof?: number; + aperture?: number; + maxBlur?: number; + }); + +} + +/** + * A brightness/contrast effect. + * + * Reference: https://github.com/evanw/glfx.js + */ +export class BrightnessContrastEffect extends Effect { + + /** + * Constructs a new brightness/contrast effect. + * + * @param {Object} [options] - The options. + * @param {BlendFunction} [options.blendFunction=BlendFunction.NORMAL] - The blend function of this effect. + * @param {Number} [options.brightness=0.0] - The brightness factor, ranging from -1 to 1, where 0 means no change. + * @param {Number} [options.contrast=0.0] - The contrast factor, ranging from -1 to 1, where 0 means no change. + */ + constructor({ + blendFunction, + brightness, + contrast + }?: { + blendFunction?: BlendFunction; + brightness?: number; + contrast?: number; + }); + + set brightness(arg: number); + /** + * The brightness. + * + * @type {Number} + */ + get brightness(): number; + /** + * Returns the brightness. + * + * @deprecated Use brightness instead. + * @return {Number} The brightness. + */ + getBrightness(): number; + /** + * Sets the brightness. + * + * @deprecated Use brightness instead. + * @param {Number} value - The brightness. + */ + setBrightness(value: number): void; + set contrast(arg: number); + /** + * The contrast. + * + * @type {Number} + */ + get contrast(): number; + /** + * Returns the contrast. + * + * @deprecated Use contrast instead. + * @return {Number} The contrast. + */ + getContrast(): number; + /** + * Sets the contrast. + * + * @deprecated Use contrast instead. + * @param {Number} value - The contrast. + */ + setContrast(value: number): void; + +} + +/** + * A chromatic aberration effect. + */ +export class ChromaticAberrationEffect extends Effect { + + /** + * Constructs a new chromatic aberration effect. + * + * @param {Object} [options] - The options. + * @param {BlendFunction} [options.blendFunction=BlendFunction.NORMAL] - The blend function of this effect. + * @param {Vector2} [options.offset] - The color offset. + * @param {Boolean} [options.radialModulation=false] - Whether the effect should be modulated with a radial gradient. + * @param {Number} [options.modulationOffset=0.15] - The modulation offset. Only applies if `radialModulation` is enabled. + */ + constructor({ + blendFunction, + offset, + radialModulation, + modulationOffset + }?: { + blendFunction?: BlendFunction; + offset?: Vector2; + radialModulation: boolean, + modulationOffset: number + }); + + set offset(arg: Vector2); + /** + * The color offset. + * + * @type {Vector2} + */ + get offset(): Vector2; + /** + * Indicates whether radial modulation is enabled. + * + * When enabled, the effect will be weaker in the middle and stronger towards the screen edges. + * + * @type {Boolean} + */ + get radialModulation(): boolean; + set radialModulation(arg: boolean); + /** + * The modulation offset. + * + * @type {Number} + */ + get modulationOffset(): number; + set modulationOffset(arg: number); + /** + * Returns the color offset vector. + * + * @deprecated Use offset instead. + * @return {Vector2} The offset. + */ + getOffset(): Vector2; + /** + * Sets the color offset vector. + * + * @deprecated Use offset instead. + * @param {Vector2} value - The offset. + */ + setOffset(value: Vector2): void; + +} + +/** + * A fast greyscale effect. + */ +export class ColorAverageEffect extends Effect { + + /** + * Constructs a new color average effect. + * + * @param {BlendFunction} [blendFunction=BlendFunction.NORMAL] - The blend function of this effect. + */ + constructor(blendFunction?: BlendFunction); + +} + +/** + * A color depth effect. + * + * Simulates a hardware limitation to achieve a retro feel. The real color depth will not be altered by this effect. + */ +export class ColorDepthEffect extends Effect { + + /** + * Constructs a new color depth effect. + * + * @param {Object} [options] - The options. + * @param {BlendFunction} [options.blendFunction=BlendFunction.NORMAL] - The blend function of this effect. + * @param {Number} [options.bits=16] - The color bit depth. + */ + constructor({ + blendFunction, + bits + }?: { + blendFunction?: BlendFunction; + bits?: number; + }); + + set bitDepth(arg: number); + /** + * The virtual amount of color bits. + * + * Each color channel effectively uses a fourth of the total amount of bits. Alpha remains unaffected. + * + * @type {Number} + */ + get bitDepth(): number; + /** + * Returns the current color bit depth. + * + * @return {Number} The bit depth. + */ + getBitDepth(): number; + /** + * Sets the virtual amount of color bits. + * + * @param {Number} value - The bit depth. + */ + setBitDepth(value: number): void; + +} + +/** + * A depth visualization effect. + * + * Useful for debugging. + */ +export class DepthEffect extends Effect { + + /** + * Constructs a new depth effect. + * + * @param {Object} [options] - The options. + * @param {BlendFunction} [options.blendFunction=BlendFunction.NORMAL] - The blend function of this effect. + * @param {Boolean} [options.inverted=false] - Whether the depth should be inverted. + */ + constructor({ + blendFunction, + inverted + }?: { + blendFunction?: BlendFunction; + inverted?: boolean; + }); + + set inverted(arg: boolean); + /** + * Indicates whether depth should be inverted. + * + * @type {Boolean} + */ + get inverted(): boolean; + /** + * Indicates whether the rendered depth is inverted. + * + * @deprecated Use inverted instead. + * @return {Boolean} Whether the rendered depth is inverted. + */ + isInverted(): boolean; + /** + * Enables or disables depth inversion. + * + * @deprecated Use inverted instead. + * @param {Boolean} value - Whether depth should be inverted. + */ + setInverted(value: boolean): void; + +} + +/** + * A depth of field effect. + * + * Based on a graphics study by Adrian Courrèges and an article by Steve Avery: + * https://www.adriancourreges.com/blog/2016/09/09/doom-2016-graphics-study/ + * https://pixelmischiefblog.wordpress.com/2016/11/25/bokeh-depth-of-field/ + */ +export class DepthOfFieldEffect extends Effect { + + /** + * Constructs a new depth of field effect. + * + * @param {Camera} camera - The main camera. + * @param {Object} [options] - The options. + * @param {BlendFunction} [options.blendFunction] - The blend function of this effect. + * @param {Number} [options.worldFocusDistance] - Deprecated. Use focusRange instead. + * @param {Number} [options.worldFocusRange] - Deprecated. Use focusRange instead. + * @param {Number} [options.focusDistance=3.0] - The focus distance in world units. + * @param {Number} [options.focusRange=2.0] - The focus range in world units. + * @param {Number} [options.focalLength] - Deprecated. Use focusRange instead. + * @param {Number} [options.bokehScale=1.0] - The scale of the bokeh blur. + * @param {Number} [options.resolutionScale=0.5] - The resolution scale. + * @param {Number} [options.resolutionX=Resolution.AUTO_SIZE] - The horizontal resolution. + * @param {Number} [options.resolutionY=Resolution.AUTO_SIZE] - The vertical resolution. + * @param {Number} [options.width=Resolution.AUTO_SIZE] - Deprecated. Use resolutionX instead. + * @param {Number} [options.height=Resolution.AUTO_SIZE] - Deprecated. Use resolutionY instead. + */ + constructor( + camera?: Camera, + { + blendFunction, + worldFocusDistance, + worldFocusRange, + focalLength, + focusDistance, + focusRange, + bokehScale, + resolutionScale, + resolutionX, + resolutionY, + width, + height + }?: { + blendFunction?: BlendFunction; + worldFocusDistance?: number; + worldFocusRange?: number; + focalLength?: number; + focusDistance?: number; + focusRange?: number; + bokehScale?: number; + resolutionScale?: number; + resolutionX?: number; + resolutionY?: number; + width?: number; + height?: number; + } + ); + + /** + * This pass blurs the foreground CoC buffer to soften edges. + * + * @type {KawaseBlurPass} + */ + readonly blurPass: KawaseBlurPass; + /** + * A target position that should be kept in focus. Set to `null` to disable auto focus. + * + * @type {Vector3 | null} + */ + target: Vector3 | null; + /** + * The bokeh scale. + * + * @type {Number} + */ + get bokehScale(): number; + set bokehScale(arg: number); + /** + * The circle of confusion texture. + * + * @type {Texture} + */ + get cocTexture(): Texture; + /** + * The mask function. Default is `MULTIPLY_RGB`. + * + * @type {MaskFunction} + */ + get maskFunction(): MaskFunction; + set maskFunction(arg: MaskFunction); + /** + * The circle of confusion material. + * + * @type {CircleOfConfusionMaterial} + */ + get cocMaterial(): CircleOfConfusionMaterial; + /** + * The circle of confusion material. + * + * @deprecated Use cocMaterial instead. + * @type {CircleOfConfusionMaterial} + */ + get circleOfConfusionMaterial(): CircleOfConfusionMaterial; + /** + * Returns the circle of confusion material. + * + * @deprecated Use cocMaterial instead. + * @return {CircleOfConfusionMaterial} The material. + */ + getCircleOfConfusionMaterial(): CircleOfConfusionMaterial; + /** + * Returns the pass that blurs the foreground CoC buffer to soften edges. + * + * @deprecated Use blurPass instead. + * @return {KawaseBlurPass} The blur pass. + */ + getBlurPass(): KawaseBlurPass; + /** + * The resolution of this effect. + * + * @type {Resolution} + */ + get resolution(): Resolution; + /** + * Returns the resolution settings. + * + * @deprecated Use resolution instead. + * @return {Resolution} The resolution. + */ + getResolution(): Resolution; + /** + * Returns the current bokeh scale. + * + * @deprecated Use bokehScale instead. + * @return {Number} The scale. + */ + getBokehScale(): number; + /** + * Sets the bokeh scale. + * + * @deprecated Use bokehScale instead. + * @param {Number} value - The scale. + */ + setBokehScale(value: number): void; + /** + * Returns the current auto focus target. + * + * @deprecated Use target instead. + * @return {Vector3} The target. + */ + getTarget(): Vector3; + /** + * Sets the auto focus target. + * + * @deprecated Use target instead. + * @param {Vector3} value - The target. + */ + setTarget(value: Vector3): void; + /** + * Calculates the focus distance from the camera to the given position. + * + * @param {Vector3} target - The target. + * @return {Number} The focus distance in world units. + */ + calculateFocusDistance(target: Vector3): number; + /** + * Updates this effect. + * + * @param {WebGLRenderer} renderer - The renderer. + * @param {WebGLRenderTarget} inputBuffer - A frame buffer that contains the result of the previous pass. + * @param {Number} [deltaTime] - The time between the last frame and the current one in seconds. + */ + update( + renderer: WebGLRenderer, + inputBuffer: WebGLRenderTarget, + deltaTime?: number + ): void; + + /** + * Updates the size of internal render targets. + * + * @param {Number} width - The width. + * @param {Number} height - The height. + */ + setSize(width: number, height: number): void; + /** + * Performs initialization tasks. + * + * @param {WebGLRenderer} renderer - The renderer. + * @param {Boolean} alpha - Whether the renderer uses the alpha channel or not. + * @param {Number} frameBufferType - The type of the main frame buffers. + */ + initialize( + renderer: WebGLRenderer, + alpha: boolean, + frameBufferType: number + ): void; + +} + +/** + * A dot screen effect. + */ +export class DotScreenEffect extends Effect { + + /** + * Constructs a new dot screen effect. + * + * @param {Object} [options] - The options. + * @param {BlendFunction} [options.blendFunction=BlendFunction.NORMAL] - The blend function of this effect. + * @param {Number} [options.angle=1.57] - The angle of the dot pattern. + * @param {Number} [options.scale=1.0] - The scale of the dot pattern. + */ + constructor({ + blendFunction, + angle, + scale + }?: { + blendFunction?: BlendFunction; + angle?: number; + scale?: number; + }); + + set angle(arg: number); + /** + * The angle. + * + * @type {Number} + */ + get angle(): number; + /** + * Returns the pattern angle. + * + * @deprecated Use angle instead. + * @return {Number} The angle in radians. + */ + getAngle(): number; + /** + * Sets the pattern angle. + * + * @deprecated Use angle instead. + * @param {Number} value - The angle in radians. + */ + setAngle(value: number): void; + set scale(arg: number); + /** + * The scale. + * + * @type {Number} + */ + get scale(): number; + +} + +/** + * A gamma correction effect. + * + * @deprecated Set WebGLRenderer.outputEncoding to sRGBEncoding instead. + */ +export class GammaCorrectionEffect extends Effect { + + /** + * Constructs a new gamma correction effect. + * + * @param {Object} [options] - The options. + * @param {BlendFunction} [options.blendFunction=BlendFunction.NORMAL] - The blend function of this effect. + * @param {Number} [options.gamma=2.0] - The gamma factor. + */ + constructor({ + blendFunction, + gamma + }?: { + blendFunction?: BlendFunction; + gamma?: number; + }); + +} + +/** + * A tilt shift effect. + */ +export class TiltShiftEffect extends Effect { + + /** + * Constructs a new tilt shift Effect + * + * @param {Object} [options] - The options. + * @param {BlendFunction} [options.blendFunction] - The blend function of this effect. + * @param {Number} [options.offset=0.0] - The relative offset of the focus area. + * @param {Number} [options.rotation=0.0] - The rotation of the focus area in radians. + * @param {Number} [options.focusArea=0.4] - The relative size of the focus area. + * @param {Number} [options.feather=0.3] - The softness of the focus area edges. + * @param {Number} [options.bias=0.06] - Deprecated. + * @param {KernelSize} [options.kernelSize=KernelSize.MEDIUM] - The blur kernel size. + * @param {Number} [options.resolutionScale=0.5] - The resolution scale. + * @param {Number} [options.resolutionX=Resolution.AUTO_SIZE] - The horizontal resolution. + * @param {Number} [options.resolutionY=Resolution.AUTO_SIZE] - The vertical resolution. + */ + constructor({ + blendFunction, + offset, + rotation, + focusArea, + feather, + bias, + kernelSize, + resolutionScale, + resolutionX, + resolutionY + }?: { + blendFunction?: BlendFunction, + offset?: number, + rotation?: number, + focusArea?: number, + feather?: number, + bias?: number, + kernelSize?: KernelSize, + resolutionScale?: number, + resolutionX?: number, + resolutionY?: number + }); + + /** + * A blur pass. + * + * @type {KawaseBlurPass} + */ + readonly blurPass: KawaseBlurPass; + /** + * The resolution. + * + * @type {Resolution} + * @readonly + */ + get resolution(): Resolution; + /** + * The rotation of the focus area in radians. + * + * @type {Number} + */ + get rotation(): number; + set rotation(arg: number); + /** + * The relative offset of the focus area. + * + * @type {Number} + */ + get offset(): number; + set offset(arg: number); + /** + * The relative size of the focus area. + * + * @type {Number} + */ + + get focusArea(): number; + set focusArea(arg: number); + /** + * The softness of the focus area edges. + * + * @type {Number} + */ + get feather(): number; + set feather(arg: number); + /** + * A blend bias. + * + * @type {Number} + * @deprecated + */ + get bias(): number; + set bias(arg: number); + +} + +/** + * A glitch effect. + * + * This effect can be used in conjunction with the {@link ChromaticAberrationEffect}. + * + * Reference: https://github.com/staffantan/unityglitch + */ +export class GlitchEffect extends Effect { + + /** + * Constructs a new glitch effect. + * + * TODO Change ratio to 0.15. + * @param {Object} [options] - The options. + * @param {BlendFunction} [options.blendFunction=BlendFunction.NORMAL] - The blend function of this effect. + * @param {Vector2} [options.chromaticAberrationOffset] - A chromatic aberration offset. If provided, the glitch effect will influence this offset. + * @param {Vector2} [options.delay] - The minimum and maximum delay between glitch activations in seconds. + * @param {Vector2} [options.duration] - The minimum and maximum duration of a glitch in seconds. + * @param {Vector2} [options.strength] - The strength of weak and strong glitches. + * @param {Texture} [options.perturbationMap] - A perturbation map. If none is provided, a noise texture will be created. + * @param {Number} [options.dtSize=64] - The size of the generated noise map. Will be ignored if a perturbation map is provided. + * @param {Number} [options.columns=0.05] - The scale of the blocky glitch columns. + * @param {Number} [options.ratio=0.85] - The threshold for strong glitches. + */ + constructor({ + blendFunction, + chromaticAberrationOffset, + delay, + duration, + strength, + columns, + ratio, + perturbationMap, + dtSize + }?: { + blendFunction?: BlendFunction; + chromaticAberrationOffset?: Vector2; + delay?: Vector2; + duration?: Vector2; + strength?: Vector2; + perturbationMap?: Texture; + dtSize?: number; + columns?: number; + ratio?: number; + }); + + set perturbationMap(arg: Texture); + /** + * The perturbation map. + * + * @type {Texture} + */ + get perturbationMap(): Texture; + /** + * The minimum and maximum delay between glitch activations in seconds. + * + * @type {Vector2} + * @deprecated Use minDelay and maxDelay instead. + */ + delay: Vector2; + /** + * The minimum and maximum duration of a glitch in seconds. + * + * @type {Vector2} + * @deprecated Use minDuration and maxDuration instead. + */ + duration: Vector2; + /** + * The strength of weak and strong glitches. + * + * @type {Vector2} + * @deprecated Use minStrength and maxStrength instead. + */ + strength: Vector2; + /** + * The effect mode. + * + * @type {GlitchMode} + */ + mode: GlitchMode; + /** + * The ratio between weak (0.0) and strong (1.0) glitches. Range is [0.0, 1.0]. + * + * This value is currently being treated as a threshold for strong glitches, i.e. it's inverted. + * + * TODO Resolve inversion. + * @type {Number} + */ + ratio: number; + /** + * The chromatic aberration offset. + * + * @type {Vector2} + */ + chromaticAberrationOffset: Vector2; + /** + * Indicates whether the glitch effect is currently active. + * + * @type {Boolean} + */ + get active(): boolean; + /** + * Indicates whether the glitch effect is currently active. + * + * @deprecated Use active instead. + * @return {Boolean} Whether the glitch effect is active. + */ + isActive(): boolean; + set minDelay(arg: number); + /** + * The minimum delay between glitch activations. + * + * @type {Number} + */ + get minDelay(): number; + /** + * Returns the minimum delay between glitch activations. + * + * @deprecated Use minDelay instead. + * @return {Number} The minimum delay in seconds. + */ + getMinDelay(): number; + /** + * Sets the minimum delay between glitch activations. + * + * @deprecated Use minDelay instead. + * @param {Number} value - The minimum delay in seconds. + */ + setMinDelay(value: number): void; + set maxDelay(arg: number); + /** + * The maximum delay between glitch activations. + * + * @type {Number} + */ + get maxDelay(): number; + /** + * Returns the maximum delay between glitch activations. + * + * @deprecated Use maxDelay instead. + * @return {Number} The maximum delay in seconds. + */ + getMaxDelay(): number; + /** + * Sets the maximum delay between glitch activations. + * + * @deprecated Use maxDelay instead. + * @param {Number} value - The maximum delay in seconds. + */ + setMaxDelay(value: number): void; + set minDuration(arg: number); + /** + * The minimum duration of sporadic glitches. + * + * @type {Number} + */ + get minDuration(): number; + /** + * Returns the minimum duration of sporadic glitches. + * + * @deprecated Use minDuration instead. + * @return {Number} The minimum duration in seconds. + */ + getMinDuration(): number; + /** + * Sets the minimum duration of sporadic glitches. + * + * @deprecated Use minDuration instead. + * @param {Number} value - The minimum duration in seconds. + */ + setMinDuration(value: number): void; + set maxDuration(arg: number); + /** + * The maximum duration of sporadic glitches. + * + * @type {Number} + */ + get maxDuration(): number; + /** + * Returns the maximum duration of sporadic glitches. + * + * @deprecated Use maxDuration instead. + * @return {Number} The maximum duration in seconds. + */ + getMaxDuration(): number; + /** + * Sets the maximum duration of sporadic glitches. + * + * @deprecated Use maxDuration instead. + * @param {Number} value - The maximum duration in seconds. + */ + setMaxDuration(value: number): void; + set minStrength(arg: number); + /** + * The strength of weak glitches. + * + * @type {Number} + */ + get minStrength(): number; + /** + * Returns the strength of weak glitches. + * + * @deprecated Use minStrength instead. + * @return {Number} The strength. + */ + getMinStrength(): number; + /** + * Sets the strength of weak glitches. + * + * @deprecated Use minStrength instead. + * @param {Number} value - The strength. + */ + setMinStrength(value: number): void; + set maxStrength(arg: number); + /** + * The strength of strong glitches. + * + * @type {Number} + */ + get maxStrength(): number; + /** + * Returns the strength of strong glitches. + * + * @deprecated Use maxStrength instead. + * @return {Number} The strength. + */ + getMaxStrength(): number; + /** + * Sets the strength of strong glitches. + * + * @deprecated Use maxStrength instead. + * @param {Number} value - The strength. + */ + setMaxStrength(value: number): void; + /** + * Returns the current glitch mode. + * + * @deprecated Use mode instead. + * @return {GlitchMode} The mode. + */ + getMode(): GlitchMode; + /** + * Sets the current glitch mode. + * + * @deprecated Use mode instead. + * @param {GlitchMode} value - The mode. + */ + setMode(value: GlitchMode): void; + /** + * Returns the glitch ratio. + * + * @deprecated Use ratio instead. + * @return {Number} The ratio. + */ + getGlitchRatio(): number; + /** + * Sets the ratio of weak (0.0) and strong (1.0) glitches. + * + * @deprecated Use ratio instead. + * @param {Number} value - The ratio. Range is [0.0, 1.0]. + */ + setGlitchRatio(value: number): void; + set columns(arg: number); + /** + * The glitch column size. + * + * @type {Number} + */ + get columns(): number; + /** + * Returns the glitch column size. + * + * @deprecated Use columns instead. + * @return {Number} The glitch column size. + */ + getGlitchColumns(): number; + /** + * Sets the glitch column size. + * + * @deprecated Use columns instead. + * @param {Number} value - The glitch column size. + */ + setGlitchColumns(value: number): void; + /** + * Returns the chromatic aberration offset. + * + * @deprecated Use chromaticAberrationOffset instead. + * @return {Vector2} The offset. + */ + getChromaticAberrationOffset(): Vector2; + /** + * Sets the chromatic aberration offset. + * + * @deprecated Use chromaticAberrationOffset instead. + * @param {Vector2} value - The offset. + */ + setChromaticAberrationOffset(value: Vector2): void; + /** + * Returns the current perturbation map. + * + * @deprecated Use perturbationMap instead. + * @return {Texture} The current perturbation map. + */ + getPerturbationMap(): Texture; + /** + * Replaces the current perturbation map with the given one. + * + * The current map will be disposed if it was generated by this effect. + * + * @deprecated Use perturbationMap instead. + * @param {Texture} value - The new perturbation map. + */ + setPerturbationMap(value: Texture): void; + /** + * Generates a perturbation map. + * + * @deprecated Use NoiseTexture instead. + * @param {Number} [value=64] - The texture size. + * @return {DataTexture} The perturbation map. + */ + generatePerturbationMap(value?: number): DataTexture; + /** + * Updates this effect. + * + * @param {WebGLRenderer} renderer - The renderer. + * @param {WebGLRenderTarget} inputBuffer - A frame buffer that contains the result of the previous pass. + * @param {Number} [deltaTime] - The time between the last frame and the current one in seconds. + */ + update( + renderer: WebGLRenderer, + inputBuffer: WebGLRenderTarget, + deltaTime?: number + ): void; + + /** + * Deletes generated resources. + */ + dispose(): void; + +} + +/** + * A glitch mode enumeration. + * + * @type {Object} + * @property {Number} DISABLED - No glitches. + * @property {Number} SPORADIC - Sporadic glitches. + * @property {Number} CONSTANT_MILD - Constant mild glitches. + * @property {Number} CONSTANT_WILD - Constant wild glitches. + */ +export enum GlitchMode { + DISABLED, + SPORADIC, + CONSTANT_MILD, + CONSTANT_WILD +} + +/** + * A god rays effect. + */ +export class GodRaysEffect extends Effect { + + /** + * Constructs a new god rays effect. + * + * @param {Camera} [camera] - The main camera. + * @param {Mesh|Points} [lightSource] - The light source. Must not write depth and has to be flagged as transparent. + * @param {Object} [options] - The options. + * @param {BlendFunction} [options.blendFunction=BlendFunction.SCREEN] - The blend function of this effect. + * @param {Number} [options.samples=60.0] - The number of samples per pixel. + * @param {Number} [options.density=0.96] - The density of the light rays. + * @param {Number} [options.decay=0.9] - An illumination decay factor. + * @param {Number} [options.weight=0.4] - A light ray weight factor. + * @param {Number} [options.exposure=0.6] - A constant attenuation coefficient. + * @param {Number} [options.clampMax=1.0] - An upper bound for the saturation of the overall effect. + * @param {Number} [options.resolutionScale=0.5] - The resolution scale. + * @param {Number} [options.resolutionX=Resolution.AUTO_SIZE] - The horizontal resolution. + * @param {Number} [options.resolutionY=Resolution.AUTO_SIZE] - The vertical resolution. + * @param {Number} [options.width=Resolution.AUTO_SIZE] - Deprecated. Use resolutionX instead. + * @param {Number} [options.height=Resolution.AUTO_SIZE] - Deprecated. Use resolutionY instead. + * @param {KernelSize} [options.kernelSize=KernelSize.SMALL] - The blur kernel size. Has no effect if blur is disabled. + * @param {Boolean} [options.blur=true] - Whether the god rays should be blurred to reduce artifacts. + */ + constructor( + camera?: Camera, + lightSource?: Mesh | Points, + { + blendFunction, + samples, + density, + decay, + weight, + exposure, + clampMax, + resolutionScale, + resolutionX, + resolutionY, + width, + height, + kernelSize, + blur + }?: { + blendFunction?: BlendFunction; + samples?: number; + density?: number; + decay?: number; + weight?: number; + exposure?: number; + clampMax?: number; + resolutionScale?: number; + resolutionX?: number; + resolutionY?: number; + width?: number; + height?: number; + kernelSize?: KernelSize; + blur?: boolean; + } + ); + + /** + * A blur pass that reduces aliasing artifacts and makes the light softer. + * + * This pass can be disabled to improve performance. + * + * @type {KawaseBlurPass} + */ + blurPass: KawaseBlurPass; + /** + * Returns the blur pass that reduces aliasing artifacts and makes the light softer. + * + * @deprecated Use blurPass instead. + * @return {KawaseBlurPass} The blur pass. + */ + getBlurPass(): KawaseBlurPass; + /** + * Sets the light source. + * + * @type {Mesh|Points} + */ + get lightSource(): Mesh | Points | null; + set lightSource(value: Mesh | Points | null); + /** + * A texture that contains the intermediate result of this effect. + * + * @type {Texture} + */ + get texture(): Texture; + /** + * The depth mask material. + * + * @type {DepthMaskMaterial} + */ + get depthMaskMaterial(): DepthMaskMaterial; + /** + * Returns the god rays texture. + * + * @deprecated Use texture instead. + * @return {Texture} The texture. + */ + getTexture(): Texture; + /** + * The internal god rays material. + * + * @type {GodRaysMaterial} + */ + get godRaysMaterial(): GodRaysMaterial; + /** + * Returns the god rays material. + * + * @deprecated Use godRaysMaterial instead. + * @return {GodRaysMaterial} The material. + */ + getGodRaysMaterial(): GodRaysMaterial; + /** + * The resolution of this effect. + * + * @type {Resolution} + */ + get resolution(): Resolution; + /** + * Returns the resolution of this effect. + * + * @deprecated Use resolution instead. + * @return {GodRaysMaterial} The material. + */ + getResolution(): GodRaysMaterial; + set width(arg: number); + /** + * The current width of the internal render targets. + * + * @type {Number} + * @deprecated Use resolution.width instead. + */ + get width(): number; + set height(arg: number); + /** + * The current height of the internal render targets. + * + * @type {Number} + * @deprecated Use resolution.height instead. + */ + get height(): number; + set dithering(arg: boolean); + /** + * Indicates whether dithering is enabled. + * + * @type {Boolean} + * @deprecated + */ + get dithering(): boolean; + set blur(arg: boolean); + /** + * Indicates whether the god rays should be blurred to reduce artifacts. + * + * @type {Boolean} + * @deprecated Use blurPass.enabled instead. + */ + get blur(): boolean; + set kernelSize(arg: KernelSize); + /** + * The blur kernel size. + * + * @type {KernelSize} + * @deprecated Use blurPass.kernelSize instead. + */ + get kernelSize(): KernelSize; + /** + * Returns the current resolution scale. + * + * @return {Number} The resolution scale. + * @deprecated Use resolution instead. + */ + getResolutionScale(): number; + /** + * Sets the resolution scale. + * + * @param {Number} scale - The new resolution scale. + * @deprecated Use resolution instead. + */ + setResolutionScale(scale: number): void; + /** + * A higher sample count improves quality at the cost of performance. + * + * @type {Number} + * @deprecated Use godRaysMaterial.samples instead. + */ + set samples(arg: number); + /** + * The number of samples per pixel. + * + * @type {Number} + * @deprecated Use godRaysMaterial.samples instead. + */ + get samples(): number; + /** + * Sets the depth texture. + * + * @param {Texture} depthTexture - A depth texture. + * @param {Number} [depthPacking=BasicDepthPacking] - The depth packing. + */ + setDepthTexture(depthTexture: Texture, depthPacking?: number): void; + /** + * Updates this effect. + * + * @param {WebGLRenderer} renderer - The renderer. + * @param {WebGLRenderTarget} inputBuffer - A frame buffer that contains the result of the previous pass. + * @param {Number} [deltaTime] - The time between the last frame and the current one in seconds. + */ + update( + renderer: WebGLRenderer, + inputBuffer: WebGLRenderTarget, + deltaTime?: number + ): void; + + /** + * Updates the size of internal render targets. + * + * @param {Number} width - The width. + * @param {Number} height - The height. + */ + setSize(width: number, height: number): void; + /** + * Performs initialization tasks. + * + * @param {WebGLRenderer} renderer - The renderer. + * @param {Boolean} alpha - Whether the renderer uses the alpha channel or not. + * @param {Number} frameBufferType - The type of the main frame buffers. + */ + initialize( + renderer: WebGLRenderer, + alpha: boolean, + frameBufferType: number + ): void; + +} + +/** + * A grid effect. + */ +export class GridEffect extends Effect { + + /** + * Constructs a new grid effect. + * + * @param {Object} [options] - The options. + * @param {BlendFunction} [options.blendFunction=BlendFunction.OVERLAY] - The blend function of this effect. + * @param {Number} [options.scale=1.0] - The scale of the grid pattern. + * @param {Number} [options.lineWidth=0.0] - The line width of the grid pattern. + */ + constructor({ + blendFunction, + scale, + lineWidth + }?: { + blendFunction?: BlendFunction; + scale?: number; + lineWidth?: number; + }); + + set scale(arg: number); + /** + * The scale. + * + * @type {Number} + */ + get scale(): number; + set lineWidth(arg: number); + /** + * The line width. + * + * @type {Number} + */ + get lineWidth(): number; + /** + * Returns the current grid scale. + * + * @deprecated Use scale instead. + * @return {Number} The grid scale. + */ + getScale(): number; + /** + * Sets the grid scale. + * + * @deprecated Use scale instead. + * @param {Number} value - The new grid scale. + */ + setScale(value: number): void; + /** + * Returns the current grid line width. + * + * @deprecated Use lineWidth instead. + * @return {Number} The grid line width. + */ + getLineWidth(): number; + /** + * Sets the grid line width. + * + * @deprecated Use lineWidth instead. + * @param {Number} value - The new grid line width. + */ + setLineWidth(value: number): void; + /** + * Updates the size of this pass. + * + * @param {Number} width - The width. + * @param {Number} height - The height. + */ + setSize(width: number, height: number): void; + +} + +/** + * A hue/saturation effect. + * + * Reference: https://github.com/evanw/glfx.js + */ +export class HueSaturationEffect extends Effect { + + /** + * Constructs a new hue/saturation effect. + * + * @param {Object} [options] - The options. + * @param {BlendFunction} [options.blendFunction=BlendFunction.NORMAL] - The blend function of this effect. + * @param {Number} [options.hue=0.0] - The hue in radians. + * @param {Number} [options.saturation=0.0] - The saturation factor, ranging from -1 to 1, where 0 means no change. + */ + constructor({ + blendFunction, + hue, + saturation + }?: { + blendFunction?: BlendFunction; + hue?: number; + saturation?: number; + }); + + set hue(arg: number); + /** + * The hue. + * + * @type {Number} + */ + get hue(): number; + set saturation(arg: number); + /** + * The saturation. + * + * @type {Number} + */ + get saturation(): number; + /** + * Returns the saturation. + * + * @deprecated Use saturation instead. + * @return {Number} The saturation. + */ + getSaturation(): number; + /** + * Sets the saturation. + * + * @deprecated Use saturation instead. + * @param {Number} value - The saturation. + */ + setSaturation(value: number): void; + /** + * Returns the hue. + * + * @deprecated Use hue instead. + * @return {Number} The hue in radians. + */ + getHue(): number; + /** + * Sets the hue. + * + * @deprecated Use hue instead. + * @param {Number} value - The hue in radians. + */ + setHue(value: number): void; + +} + +/** + * A 1D LUT effect. + */ + +export class LUT1DEffect extends Effect { + + /** + * Constructs a new color grading effect. + * + * @param {Texture} lut - The lookup texture. + * @param {Object} [options] - The options. + * @param {BlendFunction} [options.blendFunction=BlendFunction.SET] - The blend function of this effect. + */ + constructor( + lut: Texture, + { + blendFunction + }?: { + blendFunction?: BlendFunction; + } + ); + +} +/** + * A LUT effect. + * + * The tetrahedral interpolation algorithm was inspired by an implementation from OpenColorIO which is licensed under + * the BSD 3-Clause License. + * + * The manual trilinear interpolation algorithm is based on an implementation by Garret Johnson which is licensed under + * the MIT License. + * + * References: + * https://developer.nvidia.com/gpugems/gpugems2/part-iii-high-quality-rendering/chapter-24-using-lookup-tables-accelerate-color + * https://www.nvidia.com/content/GTC/posters/2010/V01-Real-Time-Color-Space-Conversion-for-High-Resolution-Video.pdf + * https://github.com/AcademySoftwareFoundation/OpenColorIO/blob/master/src/OpenColorIO/ops/lut3d/ + * https://github.com/gkjohnson/threejs-sandbox/tree/master/3d-lut + */ +export class LUT3DEffect extends Effect { + + /** + * Constructs a new color grading effect. + * + * @param {Texture} lut - The lookup texture. + * @param {Object} [options] - The options. + * @param {BlendFunction} [options.blendFunction=BlendFunction.SET] - The blend function of this effect. + * @param {Boolean} [options.tetrahedralInterpolation=false] - Enables or disables tetrahedral interpolation. + * @param {ColorSpace} [options.inputColorSpace=SRGBColorSpace] - The input color space. + */ + constructor( + lut: Texture, + { + blendFunction, + tetrahedralInterpolation, + inputColorSpace + }?: { + blendFunction?: BlendFunction; + tetrahedralInterpolation?: boolean; + inputColorSpace?: ColorSpace; + } + ); + + /** + * Indicates whether tetrahedral interpolation is enabled. Requires a 3D LUT, disabled by default. + * + * Tetrahedral interpolation produces highly accurate results but is slower than hardware interpolation. + * + * @type {Boolean} + */ + get tetrahedralInterpolation(): boolean; + set tetrahedralInterpolation(arg: boolean); + /** + * The LUT. + * + * @type {Texture} + */ + get lut(): Texture; + set lut(arg: Texture); + /** + * Returns the current LUT. + * + * @deprecated Use lut instead. + * @return {Texture} The LUT. + */ + getLUT(): Texture; + /** + * Sets the LUT. + * + * @deprecated Use lut instead. + * @param {Texture} value - The LUT. + */ + setLUT(value: Texture): void; + /** + * Enables or disables tetrahedral interpolation. + * + * @deprecated Use tetrahedralInterpolation instead. + * @param {Boolean} value - Whether tetrahedral interpolation should be enabled. + */ + setTetrahedralInterpolationEnabled(value: boolean): void; + +} + +/** + * A noise effect. + */ +export class NoiseEffect extends Effect { + + /** + * Constructs a new noise effect. + * + * @param {Object} [options] - The options. + * @param {BlendFunction} [options.blendFunction=BlendFunction.SCREEN] - The blend function of this effect. + * @param {Boolean} [options.premultiply=false] - Whether the noise should be multiplied with the input colors prior to blending. + */ + constructor({ + blendFunction, + premultiply + }?: { + blendFunction?: BlendFunction; + premultiply?: boolean; + }); + + set premultiply(arg: boolean); + /** + * Indicates whether noise will be multiplied with the input colors prior to blending. + * + * @type {Boolean} + */ + get premultiply(): boolean; + /** + * Indicates whether noise will be multiplied with the input colors prior to blending. + * + * @deprecated Use premultiply instead. + * @return {Boolean} Whether noise is premultiplied. + */ + isPremultiplied(): boolean; + /** + * Controls whether noise should be multiplied with the input colors prior to blending. + * + * @deprecated Use premultiply instead. + * @param {Boolean} value - Whether noise should be premultiplied. + */ + setPremultiplied(value: boolean): void; + +} + +/** + * An outline effect. + */ +export class OutlineEffect extends Effect { + + /** + * Constructs a new outline effect. + * + * @param {Scene} scene - The main scene. + * @param {Camera} camera - The main camera. + * @param {Object} [options] - The options. + * @param {BlendFunction} [options.blendFunction=BlendFunction.SCREEN] - The blend function. Use `BlendFunction.ALPHA` for dark outlines. + * @param {Texture} [options.patternTexture=null] - A pattern texture. + * @param {Number} [options.patternScale=1.0] - The pattern scale. + * @param {Number} [options.edgeStrength=1.0] - The edge strength. + * @param {Number} [options.pulseSpeed=0.0] - The pulse speed. A value of zero disables the pulse effect. + * @param {Number} [options.visibleEdgeColor=0xffffff] - The color of visible edges. + * @param {Number} [options.hiddenEdgeColor=0x22090a] - The color of hidden edges. + * @param {KernelSize} [options.kernelSize=KernelSize.VERY_SMALL] - The blur kernel size. + * @param {Boolean} [options.blur=false] - Whether the outline should be blurred. + * @param {Boolean} [options.xRay=true] - Whether occluded parts of selected objects should be visible. + * @param {Number} [options.multisampling=0] - The number of samples used for multisample antialiasing. Requires WebGL 2. + * @param {Number} [options.resolutionScale=0.5] - The resolution scale. + * @param {Number} [options.resolutionX=Resolution.AUTO_SIZE] - The horizontal resolution. + * @param {Number} [options.resolutionY=Resolution.AUTO_SIZE] - The vertical resolution. + * @param {Number} [options.width=Resolution.AUTO_SIZE] - Deprecated. Use resolutionX instead. + * @param {Number} [options.height=Resolution.AUTO_SIZE] - Deprecated. Use resolutionY instead. + */ + constructor( + scene?: Scene, + camera?: Camera, + { + blendFunction, + patternTexture, + patternScale, + edgeStrength, + pulseSpeed, + visibleEdgeColor, + hiddenEdgeColor, + multisampling, + resolutionScale, + resolutionX, + resolutionY, + width, + height, + kernelSize, + blur, + xRay + }?: { + blendFunction?: BlendFunction; + patternTexture?: Texture; + patternScale?: number; + edgeStrength?: number; + pulseSpeed?: number; + visibleEdgeColor?: number; + hiddenEdgeColor?: number; + multisampling?: number; + resolutionScale?: number; + resolutionX?: number; + resolutionY?: number; + width?: number; + height?: number; + kernelSize?: KernelSize; + blur?: boolean; + xRay?: boolean; + } + ); + + set patternTexture(arg: Texture); + /** + * The pattern texture. Set to `null` to disable. + * + * @type {Texture} + */ + get patternTexture(): Texture; + set xRay(arg: boolean); + /** + * Indicates whether X-ray mode is enabled. + * + * @type {Boolean} + */ + get xRay(): boolean; + /** + * A blur pass. + * + * @type {KawaseBlurPass} + */ + blurPass: KawaseBlurPass; + /** + * A selection of objects that will be outlined. + * + * The default layer of this selection is 10. + * + * @type {Selection} + */ + selection: Selection; + /** + * The pulse speed. Set to 0 to disable. + * + * @type {Number} + */ + pulseSpeed: number; + /** + * The resolution of this effect. + * + * @type {Resolution} + */ + get resolution(): Resolution; + /** + * Returns the resolution. + * + * @return {Resizer} The resolution. + */ + getResolution(): Resizer; + set patternScale(arg: number); + /** + * The pattern scale. + * + * @type {Number} + */ + get patternScale(): number; + set edgeStrength(arg: number); + /** + * The edge strength. + * + * @type {Number} + */ + get edgeStrength(): number; + set visibleEdgeColor(arg: Color); + /** + * The visible edge color. + * + * @type {Color} + */ + get visibleEdgeColor(): Color; + set hiddenEdgeColor(arg: Color); + /** + * The hidden edge color. + * + * @type {Color} + */ + get hiddenEdgeColor(): Color; + /** + * The amount of MSAA samples. + * + * Requires WebGL 2. Set to zero to disable multisampling. + * + * @experimental Requires three >= r138. + * @type {Number} + */ + get multisampling(): number; + set multisampling(arg: number); + /** + * Returns the blur pass. + * + * @deprecated Use blurPass instead. + * @return {KawaseBlurPass} The blur pass. + */ + getBlurPass(): KawaseBlurPass; + /** + * Returns the selection. + * + * @deprecated Use selection instead. + * @return {Selection} The selection. + */ + getSelection(): Selection; + /** + * Returns the pulse speed. + * + * @deprecated Use pulseSpeed instead. + * @return {Number} The speed. + */ + getPulseSpeed(): number; + /** + * Sets the pulse speed. Set to zero to disable. + * + * @deprecated Use pulseSpeed instead. + * @param {Number} value - The speed. + */ + setPulseSpeed(value: number): void; + set width(arg: number); + /** + * The current width of the internal render targets. + * + * @type {Number} + * @deprecated Use resolution.width instead. + */ + get width(): number; + set height(arg: number); + /** + * The current height of the internal render targets. + * + * @type {Number} + * @deprecated Use resolution.height instead. + */ + get height(): number; + set selectionLayer(arg: number); + /** + * The selection layer. + * + * @type {Number} + * @deprecated Use selection.layer instead. + */ + get selectionLayer(): number; + set dithering(arg: boolean); + /** + * Indicates whether dithering is enabled. + * + * @type {Boolean} + * @deprecated + */ + get dithering(): boolean; + set kernelSize(arg: KernelSize); + /** + * The blur kernel size. + * + * @type {KernelSize} + * @deprecated Use blurPass.kernelSize instead. + */ + get kernelSize(): KernelSize; + set blur(arg: boolean); + /** + * Indicates whether the outlines should be blurred. + * + * @type {Boolean} + * @deprecated Use blurPass.enabled instead. + */ + get blur(): boolean; + /** + * Indicates whether X-ray mode is enabled. + * + * @deprecated Use xRay instead. + * @return {Boolean} Whether X-ray mode is enabled. + */ + isXRayEnabled(): boolean; + /** + * Enables or disables X-ray outlines. + * + * @deprecated Use xRay instead. + * @param {Boolean} value - Whether X-ray should be enabled. + */ + setXRayEnabled(value: boolean): void; + /** + * Sets the pattern texture. + * + * @deprecated Use patternTexture instead. + * @param {Texture} value - The new texture. + */ + setPatternTexture(value: Texture): void; + /** + * Returns the current resolution scale. + * + * @return {Number} The resolution scale. + * @deprecated Use resolution instead. + */ + getResolutionScale(): number; + /** + * Sets the resolution scale. + * + * @param {Number} scale - The new resolution scale. + * @deprecated Use resolution instead. + */ + setResolutionScale(scale: number): void; + /** + * Clears the current selection and selects a list of objects. + * + * @param {Object3D[]} objects - The objects that should be outlined. This array will be copied. + * @return {OutlineEffect} This pass. + * @deprecated Use selection.set() instead. + */ + setSelection(objects: Object3D[]): OutlineEffect; + /** + * Clears the list of selected objects. + * + * @return {OutlineEffect} This pass. + * @deprecated Use selection.clear() instead. + */ + clearSelection(): OutlineEffect; + /** + * Selects an object. + * + * @param {Object3D} object - The object that should be outlined. + * @return {OutlineEffect} This pass. + * @deprecated Use selection.add() instead. + */ + selectObject(object: Object3D): OutlineEffect; + /** + * Deselects an object. + * + * @param {Object3D} object - The object that should no longer be outlined. + * @return {OutlineEffect} This pass. + * @deprecated Use selection.delete() instead. + */ + deselectObject(object: Object3D): OutlineEffect; + /** + * Updates this effect. + * + * @param {WebGLRenderer} renderer - The renderer. + * @param {WebGLRenderTarget} inputBuffer - A frame buffer that contains the result of the previous pass. + * @param {Number} [deltaTime] - The time between the last frame and the current one in seconds. + */ + update( + renderer: WebGLRenderer, + inputBuffer: WebGLRenderTarget, + deltaTime?: number + ): void; + + /** + * Updates the size of internal render targets. + * + * @param {Number} width - The width. + * @param {Number} height - The height. + */ + setSize(width: number, height: number): void; + /** + * Performs initialization tasks. + * + * @param {WebGLRenderer} renderer - The renderer. + * @param {Boolean} alpha - Whether the renderer uses the alpha channel or not. + * @param {Number} frameBufferType - The type of the main frame buffers. + */ + initialize( + renderer: WebGLRenderer, + alpha: boolean, + frameBufferType: number + ): void; + +} + +/** + * A pixelation effect. + * + * Warning: This effect cannot be merged with convolution effects. + */ +export class PixelationEffect extends Effect { + + /** + * Constructs a new pixelation effect. + * + * @param {Number} [granularity=30.0] - The pixel granularity. + */ + constructor(granularity?: number); + set granularity(arg: number); + /** + * The pixel granularity. + * + * A higher value yields coarser visuals. + * + * @type {Number} + */ + get granularity(): number; + /** + * Returns the pixel granularity. + * + * @deprecated Use granularity instead. + * @return {Number} The granularity. + */ + getGranularity(): number; + /** + * Sets the pixel granularity. + * + * @deprecated Use granularity instead. + * @param {Number} value - The new granularity. + */ + setGranularity(value: number): void; + /** + * Updates the granularity. + * + * @param {Number} width - The width. + * @param {Number} height - The height. + */ + setSize(width: number, height: number): void; + +} + +/** + * Depth of Field shader v2.4. + * + * Yields more realistic results but is also more demanding. + * + * Original shader code by Martins Upitis: + * http://blenderartists.org/forum/showthread.php?237488-GLSL-depth-of-field-with-bokeh-v2-4-(update) + * + * @deprecated Use DepthOfFieldEffect instead. + */ +export class RealisticBokehEffect extends Effect { + + /** + * Constructs a new bokeh effect. + * + * @param {Object} [options] - The options. + * @param {BlendFunction} [options.blendFunction=BlendFunction.NORMAL] - The blend function of this effect. + * @param {Number} [options.focus=1.0] - The focus distance in world units. + * @param {Number} [options.focalLength=24.0] - The focal length of the main camera. + * @param {Number} [options.fStop=0.9] - The ratio of the lens focal length to the diameter of the entrance pupil (aperture). + * @param {Number} [options.luminanceThreshold=0.5] - A luminance threshold. + * @param {Number} [options.luminanceGain=2.0] - A luminance gain factor. + * @param {Number} [options.bias=0.5] - A blur bias. + * @param {Number} [options.fringe=0.7] - A blur offset. + * @param {Number} [options.maxBlur=1.0] - The maximum blur strength. + * @param {Boolean} [options.rings=3] - The number of blur iterations. + * @param {Boolean} [options.samples=2] - The amount of samples taken per ring. + * @param {Boolean} [options.showFocus=false] - Whether the focal point should be highlighted. Useful for debugging. + * @param {Boolean} [options.manualDoF=false] - Enables manual control over the depth of field. + * @param {Boolean} [options.pentagon=false] - Enables pentagonal blur shapes. Requires a high number of rings and samples. + */ + constructor({ + blendFunction, + focus, + focalLength, + fStop, + luminanceThreshold, + luminanceGain, + bias, + fringe, + maxBlur, + rings, + samples, + showFocus, + manualDoF, + pentagon + }?: { + blendFunction?: BlendFunction; + focus?: number; + focalLength?: number; + fStop?: number; + luminanceThreshold?: number; + luminanceGain?: number; + bias?: number; + fringe?: number; + maxBlur?: number; + rings?: boolean; + samples?: boolean; + showFocus?: boolean; + manualDoF?: boolean; + pentagon?: boolean; + }); + + set rings(arg: number); + /** + * The amount of blur iterations. + * + * @type {Number} + */ + get rings(): number; + set samples(arg: number); + /** + * The amount of blur samples per ring. + * + * @type {Number} + */ + get samples(): number; + set showFocus(arg: boolean); + /** + * Indicates whether the focal point will be highlighted. + * + * @type {Boolean} + */ + get showFocus(): boolean; + set manualDoF(arg: boolean); + /** + * Indicates whether the Depth of Field should be calculated manually. + * + * If enabled, the Depth of Field can be adjusted via the `dof` uniform. + * + * @type {Boolean} + */ + get manualDoF(): boolean; + set pentagon(arg: boolean); + /** + * Indicates whether the blur shape should be pentagonal. + * + * @type {Boolean} + */ + get pentagon(): boolean; + +} + +/** + * A scanline effect. + * + * Based on an implementation by Georg 'Leviathan' Steinrohder (CC BY 3.0): + * http://www.truevision3d.com/forums/showcase/staticnoise_colorblackwhite_scanline_shaders-t18698.0.html + */ +export class ScanlineEffect extends Effect { + + /** + * Constructs a new scanline effect. + * + * @param {Object} [options] - The options. + * @param {BlendFunction} [options.blendFunction=BlendFunction.OVERLAY] - The blend function of this effect. + * @param {Number} [options.density=1.25] - The scanline density. + */ + constructor({ + blendFunction, + density + }?: { + blendFunction?: BlendFunction; + density?: number; + }); + + set density(arg: number); + /** + * The scanline density. + * + * @type {Number} + */ + get density(): number; + /** + * Returns the current scanline density. + * + * @deprecated Use density instead. + * @return {Number} The scanline density. + */ + getDensity(): number; + /** + * Sets the scanline density. + * + * @deprecated Use density instead. + * @param {Number} value - The new scanline density. + */ + setDensity(value: number): void; + /** + * Updates the size of this pass. + * + * @param {Number} width - The width. + * @param {Number} height - The height. + */ + setSize(width: number, height: number): void; + /** + * The scanline scroll speed. Default is 0 (disabled). + * + * @type {Number} + */ + get scrollSpeed(): number; + set scrollSpeed(value: number); + +} + +/** + * A selective bloom effect. + * + * This effect applies bloom to selected objects only. + */ +export class SelectiveBloomEffect extends BloomEffect { + + /** + * Constructs a new selective bloom effect. + * + * @param {Scene} scene - The main scene. + * @param {Camera} camera - The main camera. + * @param {BloomEffectOptions} [options] - The options. See {@link BloomEffect} for details. + */ + constructor(scene?: Scene, camera?: Camera, options?: BloomEffectOptions); + /** + * A selection of objects. + * + * The default layer of this selection is 11. + * + * @type {Selection} + */ + selection: Selection; + /** + * Returns the selection. + * + * @deprecated Use selection instead. + * @return {Selection} The selection. + */ + getSelection(): Selection; + set inverted(arg: boolean); + /** + * Indicates whether the selection should be considered inverted. + * + * @type {Boolean} + */ + get inverted(): boolean; + /** + * Indicates whether the mask is inverted. + * + * @deprecated Use inverted instead. + * @return {Boolean} Whether the mask is inverted. + */ + isInverted(): boolean; + /** + * Enables or disable mask inversion. + * + * @deprecated Use inverted instead. + * @param {Boolean} value - Whether the mask should be inverted. + */ + setInverted(value: boolean): void; + set ignoreBackground(arg: boolean); + /** + * Indicates whether the background colors will be ignored. + * + * @type {Boolean} + */ + get ignoreBackground(): boolean; + /** + * Indicates whether the background is disabled. + * + * @deprecated Use ignoreBackground instead. + * @return {Boolean} Whether the background is disabled. + */ + isBackgroundDisabled(): boolean; + /** + * Enables or disables the background. + * + * @deprecated Use ignoreBackground instead. + * @param {Boolean} value - Whether the background should be disabled. + */ + setBackgroundDisabled(value: boolean): void; + /** + * Sets the depth texture. + * + * @param {Texture} depthTexture - A depth texture. + * @param {DepthPackingStrategies} [depthPacking=BasicDepthPacking] - The depth packing. + */ + setDepthTexture( + depthTexture: Texture, + depthPacking?: DepthPackingStrategies + ): void; + + /** + * Updates this effect. + * + * @param {WebGLRenderer} renderer - The renderer. + * @param {WebGLRenderTarget} inputBuffer - A frame buffer that contains the result of the previous pass. + * @param {Number} [deltaTime] - The time between the last frame and the current one in seconds. + */ + update( + renderer: WebGLRenderer, + inputBuffer: WebGLRenderTarget, + deltaTime: number + ): void; + + /** + * Updates the size of internal render targets. + * + * @param {Number} width - The width. + * @param {Number} height - The height. + */ + setSize(width: number, height: number): void; + + /** + * Performs initialization tasks. + * + * @param {WebGLRenderer} renderer - The renderer. + * @param {Boolean} alpha - Whether the renderer uses the alpha channel. + * @param {Number} frameBufferType - The type of the main frame buffers. + */ + initialize( + renderer: WebGLRenderer, + alpha: boolean, + frameBufferType: number + ): void; + +} + +/** + * A sepia effect. + */ +export class SepiaEffect extends Effect { + + /** + * Constructs a new sepia effect. + * + * @param {Object} [options] - The options. + * @param {BlendFunction} [options.blendFunction=BlendFunction.NORMAL] - The blend function of this effect. + * @param {Number} [options.intensity=1.0] - The intensity of the effect. + */ + constructor({ + blendFunction, + intensity + }?: { + blendFunction?: BlendFunction; + intensity?: number; + }); + + set intensity(arg: number); + /** + * The intensity. + * + * @deprecated Use blendMode.opacity instead. + * @type {Number} + */ + get intensity(): number; + /** + * Returns the current sepia intensity. + * + * @deprecated Use blendMode.opacity instead. + * @return {Number} The intensity. + */ + getIntensity(): number; + /** + * Sets the sepia intensity. + * + * @deprecated Use blendMode.opacity instead. + * @param {Number} value - The intensity. + */ + setIntensity(value: number): void; + +} + +/** + * A shock wave effect. + * + * Based on a Gist by Jean-Philippe Sarda: + * https://gist.github.com/jpsarda/33cea67a9f2ecb0a0eda + */ +export class ShockWaveEffect extends Effect { + + /** + * Constructs a new shock wave effect. + * + * @param {Camera} camera - The main camera. + * @param {Vector3} [position] - The world position of the shock wave. + * @param {Object} [options] - The options. + * @param {Number} [options.speed=2.0] - The animation speed. + * @param {Number} [options.maxRadius=1.0] - The extent of the shock wave. + * @param {Number} [options.waveSize=0.2] - The wave size. + * @param {Number} [options.amplitude=0.05] - The distortion amplitude. + */ + constructor( + camera?: Camera, + position?: Vector3, + { + speed, + maxRadius, + waveSize, + amplitude + }?: { + speed?: number; + maxRadius?: number; + waveSize?: number; + amplitude?: number; + } + ); + + /** + * The position of the shock wave. + * + * @type {Vector3} + */ + position: Vector3; + /** + * The speed of the shock wave animation. + * + * @type {Number} + */ + speed: number; + set amplitude(arg: number); + /** + * The amplitude. + * + * @type {Number} + */ + get amplitude(): number; + set waveSize(arg: number); + /** + * The wave size. + * + * @type {Number} + */ + get waveSize(): number; + set maxRadius(arg: number); + /** + * The maximum radius. + * + * @type {Number} + */ + get maxRadius(): number; + set epicenter(arg: Vector3); + /** + * The position of the shock wave. + * + * @type {Vector3} + * @deprecated Use position instead. + */ + get epicenter(): Vector3; + /** + * Returns the position of the shock wave. + * + * @deprecated Use position instead. + * @return {Vector3} The position. + */ + getPosition(): Vector3; + /** + * Sets the position of the shock wave. + * + * @deprecated Use position instead. + * @param {Vector3} value - The position. + */ + setPosition(value: Vector3): void; + /** + * Returns the speed of the shock wave. + * + * @deprecated Use speed instead. + * @return {Number} The speed. + */ + getSpeed(): number; + /** + * Sets the speed of the shock wave. + * + * @deprecated Use speed instead. + * @param {Number} value - The speed. + */ + setSpeed(value: number): void; + /** + * Emits the shock wave. + */ + explode(): void; + /** + * Updates this effect. + * + * @param {WebGLRenderer} renderer - The renderer. + * @param {WebGLRenderTarget} inputBuffer - A frame buffer that contains the result of the previous pass. + * @param {Number} [delta] - The time between the last frame and the current one in seconds. + */ + + update( + renderer: WebGLRenderer, + inputBuffer: WebGLRenderTarget, + delta: number + ): void; + +} + +/** + * NVIDIA FXAA 3.11 by Timothy Lottes: + * https://developer.download.nvidia.com/assets/gamedev/files/sdk/11/FXAA_WhitePaper.pdf + * + * Based on an implementation by Simon Rodriguez: + * https://github.com/kosua20/Rendu/blob/master/resources/common/shaders/screens/fxaa.frag + */ +export class FXAAEffect extends Effect { + + /** + * Constructs a new FXAA effect. + * + * @param {Object} [options] - The options. + * @param {BlendFunction} [options.blendFunction=BlendFunction.SRC] - The blend function of this effect. + */ + constructor({ + blendFunction + }?: { + blendFunction?: BlendFunction + }); + + /** + * The minimum edge detection threshold. Range is [0.0, 1.0]. + * + * @type {Number} + */ + get minEdgeThreshold(): number; + set minEdgeThreshold(arg: number); + + /** + * The maximum edge detection threshold. Range is [0.0, 1.0]. + * + * @type {Number} + */ + get maxEdgeThreshold(): number; + set maxEdgeThreshold(arg: number); + + /** + * The subpixel blend quality. Range is [0.0, 1.0]. + * + * @type {Number} + */ + get subpixelQuality(): number; + set subpixelQuality(arg: number); + + /** + * The maximum amount of edge detection samples. + * + * @type {Number} + */ + get samples(): number; + set samples(arg: number); + +} + +/** + * Subpixel Morphological Antialiasing (SMAA). + * + * https://github.com/iryoku/smaa/releases/tag/v2.8 + */ +export class SMAAEffect extends Effect { + + /** + * The SMAA search image, encoded as a base64 data URL. + * + * @type {String} + * @deprecated + */ + static get searchImageDataURL(): string; + /** + * The SMAA area image, encoded as a base64 data URL. + * + * @type {String} + * @deprecated + */ + static get areaImageDataURL(): string; + /** + * Constructs a new SMAA effect. + * + * @param {Object} [options] - The options. + * @param {SMAAPreset} [options.preset=SMAAPreset.MEDIUM] - The quality preset. + * @param {EdgeDetectionMode} [options.edgeDetectionMode=EdgeDetectionMode.COLOR] - The edge detection mode. + * @param {PredicationMode} [options.predicationMode=PredicationMode.DISABLED] - The predication mode. + */ + constructor({ + preset, + edgeDetectionMode, + predicationMode + }?: { + preset?: SMAAPreset; + edgeDetectionMode?: EdgeDetectionMode; + predicationMode?: PredicationMode; + }); + + /** + * The edges texture. + * + * @type {Texture} + */ + get edgesTexture(): Texture; + /** + * Returns the edges texture. + * + * @deprecated Use edgesTexture instead. + * @return {Texture} The texture. + */ + getEdgesTexture(): Texture; + /** + * The edge weights texture. + * + * @type {Texture} + */ + get weightsTexture(): Texture; + /** + * Returns the edge weights texture. + * + * @deprecated Use weightsTexture instead. + * @return {Texture} The texture. + */ + getWeightsTexture(): Texture; + /** + * The edge detection material. + * + * @type {EdgeDetectionMaterial} + */ + get edgeDetectionMaterial(): EdgeDetectionMaterial; + /** + * The edge detection material. + * + * @type {EdgeDetectionMaterial} + * @deprecated Use edgeDetectionMaterial instead. + */ + get colorEdgesMaterial(): EdgeDetectionMaterial; + /** + * Returns the edge detection material. + * + * @deprecated Use edgeDetectionMaterial instead. + * @return {EdgeDetectionMaterial} The material. + */ + getEdgeDetectionMaterial(): EdgeDetectionMaterial; + /** + * The edge weights material. + * + * @type {SMAAWeightsMaterial} + */ + get weightsMaterial(): SMAAWeightsMaterial; + /** + * Returns the edge weights material. + * + * @deprecated Use weightsMaterial instead. + * @return {SMAAWeightsMaterial} The material. + */ + getWeightsMaterial(): SMAAWeightsMaterial; + /** + * Sets the edge detection sensitivity. + * + * See {@link EdgeDetectionMaterial#setEdgeDetectionThreshold} for more details. + * + * @deprecated Use edgeDetectionMaterial instead. + * @param {Number} threshold - The edge detection sensitivity. Range: [0.05, 0.5]. + */ + setEdgeDetectionThreshold(threshold: number): void; + /** + * Sets the maximum amount of horizontal/vertical search steps. + * + * See {@link SMAAWeightsMaterial#setOrthogonalSearchSteps} for more details. + * + * @deprecated Use weightsMaterial instead. + * @param {Number} steps - The search steps. Range: [0, 112]. + */ + setOrthogonalSearchSteps(steps: number): void; + /** + * Applies the given quality preset. + * + * @param {SMAAPreset} preset - The preset. + */ + applyPreset(preset: SMAAPreset): void; + /** + * Sets the depth texture. + * + * @param {Texture} depthTexture - A depth texture. + * @param {DepthPackingStrategies} [depthPacking=BasicDepthPacking] - The depth packing. + */ + setDepthTexture( + depthTexture: Texture, + depthPacking?: DepthPackingStrategies + ): void; + + /** + * Updates this effect. + * + * @param {WebGLRenderer} renderer - The renderer. + * @param {WebGLRenderTarget} inputBuffer - A frame buffer that contains the result of the previous pass. + * @param {Number} [deltaTime] - The time between the last frame and the current one in seconds. + */ + update( + renderer: WebGLRenderer, + inputBuffer: WebGLRenderTarget, + deltaTime?: number + ): void; + + /** + * Updates the size of internal render targets. + * + * @param {Number} width - The width. + * @param {Number} height - The height. + */ + setSize(width: number, height: number): void; + /** + * Deletes internal render targets and textures. + */ + dispose(): void; + +} + +/** + * An enumeration of SMAA presets. + * + * @type {Object} + * @property {Number} LOW - Results in around 60% of the maximum quality. + * @property {Number} MEDIUM - Results in around 80% of the maximum quality. + * @property {Number} HIGH - Results in around 95% of the maximum quality. + * @property {Number} ULTRA - Results in around 99% of the maximum quality. + */ +export enum SMAAPreset { + LOW, + MEDIUM, + HIGH, + ULTRA +} + +/** + * A Screen Space Ambient Occlusion (SSAO) effect. + * + * For high quality visuals use two SSAO effect instances in a row with different radii, one for rough AO and one for + * fine details. + * + * This effect supports depth-aware upsampling and should be rendered at a lower resolution. The resolution should match + * that of the downsampled normals and depth. If you intend to render SSAO at full resolution, do not provide a + * downsampled `normalDepthBuffer`. + * + * It's recommended to specify a relative render resolution using the `resolutionScale` constructor parameter to avoid + * undesired sampling patterns. + * + * Based on "Scalable Ambient Obscurance" by Morgan McGuire et al. and "Depth-aware upsampling experiments" by Eleni + * Maria Stea: + * https://research.nvidia.com/publication/scalable-ambient-obscurance + * https://eleni.mutantstargoat.com/hikiko/on-depth-aware-upsampling + * + * The view position calculation is based on a shader by Norbert Nopper: + * https://github.com/McNopper/OpenGL/blob/master/Example28/shader/ssao.frag.glsl + */ +export class SSAOEffect extends Effect { + + /** + * Constructs a new SSAO effect. + * + * @todo Move normalBuffer to options. + * @param {Camera} [camera] - The main camera. + * @param {Texture} [normalBuffer] - A texture that contains the scene normals. + * @param {Object} [options] - The options. + * @param {BlendFunction} [options.blendFunction=BlendFunction.MULTIPLY] - The blend function of this effect. + * @param {Boolean} [options.distanceScaling=true] - Deprecated. + * @param {Boolean} [options.depthAwareUpsampling=true] - Enables or disables depth-aware upsampling. Has no effect if WebGL 2 is not supported. + * @param {Texture} [options.normalDepthBuffer=null] - Deprecated. + * @param {Number} [options.samples=9] - The amount of samples per pixel. Should not be a multiple of the ring count. + * @param {Number} [options.rings=7] - The amount of spiral turns in the occlusion sampling pattern. Should be a prime number. + * @param {Number} [options.worldDistanceThreshold] - The world distance threshold at which the occlusion effect starts to fade out. + * @param {Number} [options.worldDistanceFalloff] - The world distance falloff. Influences the smoothness of the occlusion cutoff. + * @param {Number} [options.worldProximityThreshold] - The world proximity threshold at which the occlusion starts to fade out. + * @param {Number} [options.worldProximityFalloff] - The world proximity falloff. Influences the smoothness of the proximity cutoff. + * @param {Number} [options.distanceThreshold=0.97] - Deprecated. + * @param {Number} [options.distanceFalloff=0.03] - Deprecated. + * @param {Number} [options.rangeThreshold=0.0005] - Deprecated. + * @param {Number} [options.rangeFalloff=0.001] - Deprecated. + * @param {Number} [options.minRadiusScale=0.1] - The minimum radius scale. + * @param {Number} [options.luminanceInfluence=0.7] - Determines how much the luminance of the scene influences the ambient occlusion. + * @param {Number} [options.radius=0.1825] - The occlusion sampling radius, expressed as a scale relative to the resolution. Range [1e-6, 1.0]. + * @param {Number} [options.intensity=1.0] - The intensity of the ambient occlusion. + * @param {Number} [options.bias=0.025] - An occlusion bias. Eliminates artifacts caused by depth discontinuities. + * @param {Number} [options.fade=0.01] - Influences the smoothness of the shadows. A lower value results in higher contrast. + * @param {Color} [options.color=null] - The color of the ambient occlusion. + * @param {Number} [options.resolutionScale=1.0] - The resolution scale. + * @param {Number} [options.resolutionX=Resolution.AUTO_SIZE] - The horizontal resolution. + * @param {Number} [options.resolutionY=Resolution.AUTO_SIZE] - The vertical resolution. + * @param {Number} [options.width=Resolution.AUTO_SIZE] - Deprecated. Use resolutionX instead. + * @param {Number} [options.height=Resolution.AUTO_SIZE] - Deprecated. Use resolutionY instead. + */ + constructor( + camera?: Camera, + normalBuffer?: Texture, + { + blendFunction, + distanceScaling, + depthAwareUpsampling, + normalDepthBuffer, + samples, + rings, + worldDistanceThreshold, + worldDistanceFalloff, + worldProximityThreshold, + worldProximityFalloff, + distanceThreshold, + distanceFalloff, + rangeThreshold, + rangeFalloff, + minRadiusScale, + luminanceInfluence, + radius, + intensity, + bias, + fade, + color, + resolutionScale, + resolutionX, + resolutionY, + width, + height + }?: { + blendFunction?: BlendFunction; + distanceScaling?: boolean; + depthAwareUpsampling?: boolean; + normalDepthBuffer?: Texture; + samples?: number; + rings?: number; + worldDistanceThreshold?: number; + worldDistanceFalloff?: number; + worldProximityThreshold?: number; + worldProximityFalloff?: number; + distanceThreshold?: number; + distanceFalloff?: number; + rangeThreshold?: number; + rangeFalloff?: number; + minRadiusScale?: number; + luminanceInfluence?: number; + radius?: number; + intensity?: number; + bias?: number; + fade?: number; + color?: Color; + resolutionScale?: number; + resolutionX?: number; + resolutionY?: number; + width?: number; + height?: number; + } + ); + + resolution: Resolution; + /** + * Sets the normal buffer. + * + * @type {Texture} + */ + get normalBuffer(): Texture | null; + set normalBuffer(value: Texture | null); + /** + * Indicates whether depth-aware upsampling is enabled. + * + * @type {Boolean} + */ + get depthAwareUpsampling(): boolean; + set depthAwareUpsampling(arg: boolean); + /** + * The color of the ambient occlusion. Set to `null` to disable. + * + * @type {Color} + */ + get color(): Color; + set color(arg: Color); + /** + * Returns the resolution settings. + * + * @deprecated Use resolution instead. + * @return {Resolution} The resolution. + */ + getResolution(): Resolution; + /** + * The SSAO material. + * + * @type {SSAOMaterial} + */ + get ssaoMaterial(): SSAOMaterial; + /** + * Returns the SSAO material. + * + * @deprecated Use ssaoMaterial instead. + * @return {SSAOMaterial} The material. + */ + getSSAOMaterial(): SSAOMaterial; + /** + * The amount of occlusion samples per pixel. + * + * @type {Number} + * @deprecated Use ssaoMaterial.samples instead. + */ + get samples(): number; + set samples(arg: number); + /** + * The amount of spiral turns in the occlusion sampling pattern. + * + * @type {Number} + * @deprecated Use ssaoMaterial.rings instead. + */ + get rings(): number; + set rings(arg: number); + /** + * The occlusion sampling radius. + * + * @type {Number} + * @deprecated Use ssaoMaterial.radius instead. + */ + get radius(): number; + set radius(arg: number); + /** + * The intensity. + * + * @type {Number} + */ + get intensity(): number; + set intensity(arg: number); + /** + * Indicates whether depth-aware upsampling is enabled. + * + * @deprecated Use depthAwareUpsampling instead. + * @return {Boolean} Whether depth-aware upsampling is enabled. + */ + isDepthAwareUpsamplingEnabled(): boolean; + /** + * Enables or disables depth-aware upsampling. + * + * @deprecated Use depthAwareUpsampling instead. + * @param {Boolean} value - Whether depth-aware upsampling should be enabled. + */ + setDepthAwareUpsamplingEnabled(value: boolean): void; + /** + * Indicates whether distance-based radius scaling is enabled. + * + * @type {Boolean} + * @deprecated Use ssaoMaterial.distanceScaling instead. + */ + get distanceScaling(): boolean; + set distanceScaling(arg: boolean); + /** + * Returns the color of the ambient occlusion. + * + * @deprecated Use color instead. + * @return {Color} The color. + */ + getColor(): Color; + /** + * Sets the color of the ambient occlusion. Set to `null` to disable colorization. + * + * @deprecated Use color instead. + * @param {Color} value - The color. + */ + setColor(value: Color): void; + /** + * Sets the occlusion distance cutoff. + * + * @deprecated Use ssaoMaterial instead. + * @param {Number} threshold - The distance threshold. Range [0.0, 1.0]. + * @param {Number} falloff - The falloff. Range [0.0, 1.0]. + */ + setDistanceCutoff(threshold: number, falloff: number): void; + /** + * Sets the occlusion proximity cutoff. + * + * @deprecated Use ssaoMaterial instead. + * @param {Number} threshold - The proximity threshold. Range [0.0, 1.0]. + * @param {Number} falloff - The falloff. Range [0.0, 1.0]. + */ + setProximityCutoff(threshold: number, falloff: number): void; + /** + * Updates this effect. + * + * @param {WebGLRenderer} renderer - The renderer. + * @param {WebGLRenderTarget} inputBuffer - A frame buffer that contains the result of the previous pass. + * @param {Number} [deltaTime] - The time between the last frame and the current one in seconds. + */ + update( + renderer: WebGLRenderer, + inputBuffer: WebGLRenderTarget, + deltaTime?: number + ): void; + /** + * Sets the size. + * + * @param {Number} width - The width. + * @param {Number} height - The height. + */ + setSize(width: number, height: number): void; + /** + * The luminance influence factor. Range: [0.0, 1.0]. + * + * @type {Boolean} + */ + get luminanceInfluence(): boolean; + set luminanceInfluence(value: boolean); + +} + +/** + * A texture effect. + */ +export class TextureEffect extends Effect { + + /** + * Constructs a new texture effect. + * + * @param {Object} [options] - The options. + * @param {BlendFunction} [options.blendFunction=BlendFunction.NORMAL] - The blend function of this effect. + * @param {Texture} [options.texture] - A texture. + * @param {Boolean} [options.aspectCorrection=false] - Deprecated. Adjust the texture's offset, repeat and center instead. + */ + constructor({ + blendFunction, + texture, + aspectCorrection + }?: { + blendFunction?: BlendFunction; + texture?: Texture; + aspectCorrection?: boolean; + }); + + set texture(arg: Texture); + /** + * The texture. + * + * @type {Texture} + */ + get texture(): Texture; + set aspectCorrection(arg: number); + /** + * Indicates whether aspect correction is enabled. + * + * @type {Number} + * @deprecated Adjust the texture's offset, repeat, rotation and center instead. + */ + get aspectCorrection(): number; + /** + * Returns the texture. + * + * @deprecated Use texture instead. + * @return {Texture} The texture. + */ + getTexture(): Texture; + /** + * Sets the texture. + * + * @deprecated Use texture instead. + * @param {Texture} value - The texture. + */ + setTexture(value: Texture): void; + set uvTransform(arg: boolean); + /** + * Indicates whether the texture UV coordinates will be transformed using the transformation matrix of the texture. + * + * @type {Boolean} + * @deprecated Use texture.matrixAutoUpdate instead. + */ + get uvTransform(): boolean; + /** + * Sets the swizzles that will be applied to the components of a texel before it is written to the output color. + * + * @param {ColorChannel} r - The swizzle for the `r` component. + * @param {ColorChannel} [g=r] - The swizzle for the `g` component. + * @param {ColorChannel} [b=r] - The swizzle for the `b` component. + * @param {ColorChannel} [a=r] - The swizzle for the `a` component. + */ + setTextureSwizzleRGBA( + r: ColorChannel, + g?: ColorChannel, + b?: ColorChannel, + a?: ColorChannel + ): void; + + /** + * Updates this effect. + * + * @param {WebGLRenderer} renderer - The renderer. + * @param {WebGLRenderTarget} inputBuffer - A frame buffer that contains the result of the previous pass. + * @param {Number} [deltaTime] - The time between the last frame and the current one in seconds. + */ + + update( + renderer: WebGLRenderer, + inputBuffer: WebGLRenderTarget, + deltaTime: number + ): void; + + /** + * Performs initialization tasks. + * + * @param {WebGLRenderer} renderer - The renderer. + * @param {Boolean} alpha - Whether the renderer uses the alpha channel or not. + * @param {Number} frameBufferType - The type of the main frame buffers. + */ + + initialize( + renderer: WebGLRenderer, + alpha: boolean, + frameBufferType: number + ): void; + +} + +/** + * A tone mapping mode enumeration. + * + * @type {Object} + * @property {Number} LINEAR - No tone mapping, only exposure. + * @property {Number} REINHARD - Simple Reinhard tone mapping. + * @property {Number} REINHARD2 - Modified Reinhard tone mapping. + * @property {Number} REINHARD2_ADAPTIVE - Simulates the optic nerve responding to the amount of light it is receiving. + * @property {Number} UNCHARTED2 - Uncharted 2 tone mapping. http://filmicworlds.com/blog/filmic-tonemapping-operators. + * @property {Number} OPTIMIZED_CINEON - Deprecated. Use CINEON instead. + * @property {Number} CINEON - Optimized filmic operator by Jim Hejl and Richard Burgess-Dawson. + * @property {Number} ACES_FILMIC - ACES tone mapping with a scale of 1.0/0.6. + * @property {Number} AGX - Filmic tone mapping. Requires three r160 or higher. https://github.com/EaryChow/AgX. + * @property {Number} NEUTRAL - Neutral tone mapping by Khronos. Requires three r162 or higher. https://modelviewer.dev/examples/tone-mapping. + */ +export enum ToneMappingMode { + LINEAR, + REINHARD, + REINHARD2, + REINHARD2_ADAPTIVE, + UNCHARTED2, + OPTIMIZED_CINEON, + CINEON, + ACES_FILMIC, + AGX, + NEUTRAL +} + +/** + * A tone mapping effect. + * + * Note: `ToneMappingMode.REINHARD2_ADAPTIVE` requires support for `EXT_shader_texture_lod`. + * + * Reference: + * GDC2007 - Wolfgang Engel, Post-Processing Pipeline + * http://perso.univ-lyon1.fr/jean-claude.iehl/Public/educ/GAMA/2007/gdc07/Post-Processing_Pipeline.pdf + */ +export class ToneMappingEffect extends Effect { + + /** + * Constructs a new tone mapping effect. + * + * The additional parameters only affect the Reinhard2 operator. + * + * @param {Object} [options] - The options. + * @param {BlendFunction} [options.blendFunction=BlendFunction.NORMAL] - The blend function of this effect. + * @param {Boolean} [options.adaptive=false] - Deprecated. Use mode instead. + * @param {ToneMappingMode} [options.mode=ToneMappingMode.ACES_FILMIC] - The tone mapping mode. + * @param {Number} [options.resolution=256] - The resolution of the luminance texture. Must be a power of two. + * @param {Number} [options.maxLuminance=4.0] - Deprecated. Same as whitePoint. + * @param {Number} [options.whitePoint=4.0] - The white point. + * @param {Number} [options.middleGrey=0.6] - The middle grey factor. + * @param {Number} [options.minLuminance=0.01] - The minimum luminance. Prevents very high exposure in dark scenes. + * @param {Number} [options.averageLuminance=1.0] - The average luminance. Used for the non-adaptive Reinhard operator. + * @param {Number} [options.adaptationRate=1.0] - The luminance adaptation rate. + */ + constructor({ + blendFunction, + adaptive, + mode, + resolution, + maxLuminance, + whitePoint, + middleGrey, + minLuminance, + averageLuminance, + adaptationRate + }?: { + blendFunction?: BlendFunction; + adaptive?: boolean; + mode?: ToneMappingMode; + resolution?: number; + maxLuminance?: number; + whitePoint?: number; + middleGrey?: number; + minLuminance?: number; + averageLuminance?: number; + adaptationRate?: number; + }); + + set resolution(arg: number); + /** + * The resolution of the luminance texture. Must be a power of two. + * + * @type {Number} + */ + get resolution(): number; + set mode(arg: ToneMappingMode); + /** + * The tone mapping mode. + * + * @type {ToneMappingMode} + */ + get mode(): ToneMappingMode; + /** + * The white point. Default is `16.0`. + * + * Only applies to Reinhard2 (Modified & Adaptive). + * + * @type {Number} + */ + get whitePoint(): number; + /** + * The middle grey factor. Default is `0.6`. + * + * Only applies to Reinhard2 (Modified & Adaptive). + * + * @type {Number} + */ + get middleGrey(): number; + /** + * The average luminance. + * + * Only applies to Reinhard2 (Modified). + * + * @type {Number} + */ + get averageLuminance(): number; + /** + * Returns the current tone mapping mode. + * + * @deprecated Use mode instead. + * @return {ToneMappingMode} The tone mapping mode. + */ + getMode(): ToneMappingMode; + /** + * Sets the tone mapping mode. + * + * @deprecated Use mode instead. + * @param {ToneMappingMode} value - The tone mapping mode. + */ + setMode(value: ToneMappingMode): void; + /** + * The adaptive luminance material. + * + * @type {AdaptiveLuminanceMaterial} + */ + get adaptiveLuminanceMaterial(): AdaptiveLuminanceMaterial; + /** + * Returns the adaptive luminance material. + * + * @deprecated Use adaptiveLuminanceMaterial instead. + * @return {AdaptiveLuminanceMaterial} The material. + */ + getAdaptiveLuminanceMaterial(): AdaptiveLuminanceMaterial; + /** + * Returns the resolution of the luminance texture. + * + * @deprecated Use resolution instead. + * @return {Number} The resolution. + */ + getResolution(): number; + /** + * Sets the resolution of the luminance texture. Must be a power of two. + * + * @deprecated Use resolution instead. + * @param {Number} value - The resolution. + */ + setResolution(value: number): void; + set adaptive(arg: boolean); + /** + * Indicates whether this pass uses adaptive luminance. + * + * @type {Boolean} + * @deprecated Use mode instead. + */ + get adaptive(): boolean; + set adaptationRate(arg: number); + /** + * The luminance adaptation rate. + * + * @type {Number} + * @deprecated Use adaptiveLuminanceMaterial.adaptationRate instead. + */ + get adaptationRate(): number; + set distinction(arg: number); + /** + * @type {Number} + * @deprecated + */ + get distinction(): number; + /** + * Updates this effect. + * + * @param {WebGLRenderer} renderer - The renderer. + * @param {WebGLRenderTarget} inputBuffer - A frame buffer that contains the result of the previous pass. + * @param {Number} [deltaTime] - The time between the last frame and the current one in seconds. + */ + update( + renderer: WebGLRenderer, + inputBuffer: WebGLRenderTarget, + deltaTime?: number + ): void; + + /** + * Performs initialization tasks. + * + * @param {WebGLRenderer} renderer - The renderer. + * @param {Boolean} alpha - Whether the renderer uses the alpha channel or not. + * @param {Number} frameBufferType - The type of the main frame buffers. + */ + initialize( + renderer: WebGLRenderer, + alpha: boolean, + frameBufferType: number + ): void; + +} + +/** + * An enumeration of Vignette techniques. + * + * @type {Object} + * @property {Number} DEFAULT - Produces a dusty look. + * @property {Number} ESKIL - Produces a burned look. + */ +export enum VignetteTechnique { + DEFAULT, + ESKIL +} +/** + * A Vignette effect. + */ +export class VignetteEffect extends Effect { + + /** + * Constructs a new Vignette effect. + * + * @param {Object} [options] - The options. + * @param {BlendFunction} [options.blendFunction=BlendFunction.NORMAL] - The blend function of this effect. + * @param {VignetteTechnique} [options.technique=VignetteTechnique.DEFAULT] - The Vignette technique. + * @param {Boolean} [options.eskil=false] - Deprecated. Use technique instead. + * @param {Number} [options.offset=0.5] - The Vignette offset. + * @param {Number} [options.darkness=0.5] - The Vignette darkness. + */ + constructor({ + blendFunction, + technique, + eskil, + offset, + darkness + }?: { + blendFunction?: BlendFunction; + technique?: VignetteTechnique; + eskil?: boolean; + offset?: number; + darkness?: number; + }); + + set technique(arg: VignetteTechnique); + /** + * The Vignette technique. + * + * @type {VignetteTechnique} + */ + get technique(): VignetteTechnique; + /** + * Indicates whether Eskil's Vignette technique is enabled. + * + * @type {Boolean} + * @deprecated Use technique instead. + */ + set eskil(arg: boolean); + /** + * Indicates whether Eskil's Vignette technique is enabled. + * + * @type {Boolean} + * @deprecated Use technique instead. + */ + get eskil(): boolean; + /** + * Returns the Vignette technique. + * + * @deprecated Use technique instead. + * @return {VignetteTechnique} The technique. + */ + getTechnique(): VignetteTechnique; + /** + * Sets the Vignette technique. + * + * @deprecated Use technique instead. + * @param {VignetteTechnique} value - The technique. + */ + setTechnique(value: VignetteTechnique): void; + set offset(arg: number); + /** + * The Vignette offset. + * + * @type {Number} + */ + get offset(): number; + /** + * Returns the Vignette offset. + * + * @deprecated Use offset instead. + * @return {Number} The offset. + */ + getOffset(): number; + /** + * Sets the Vignette offset. + * + * @deprecated Use offset instead. + * @param {Number} value - The offset. + */ + setOffset(value: number): void; + set darkness(arg: number); + /** + * The Vignette darkness. + * + * @type {Number} + */ + get darkness(): number; + /** + * Returns the Vignette darkness. + * + * @deprecated Use darkness instead. + * @return {Number} The darkness. + */ + getDarkness(): number; + /** + * Sets the Vignette darkness. + * + * @deprecated Use darkness instead. + * @param {Number} value - The darkness. + */ + setDarkness(value: number): void; + +} + +/** + * An enumeration of LUT worker operations. + * + * @type {Object} + * @property {String} SCALE_UP - Tetrahedral upscale operation. + */ +export enum LUTOperation { + SCALE_UP = "lut.scaleup" +} + +/** + * A tetrahedral upscaler that can be used to augment 3D LUTs. + * + * Based on an implementation by Garrett Johnson: + * https://github.com/gkjohnson/threejs-sandbox/blob/master/3d-lut/src/TetrahedralUpscaler.js + */ +export class TetrahedralUpscaler { + + /** + * Expands the given data to the target size. + * + * @param {ArrayBufferView} data - The input RGBA data. Assumed to be cubic. + * @param {Number} size - The target size. + * @return {ArrayBufferView} The new data. + */ + static expand(data: ArrayBufferView, size: number): ArrayBufferView; + +} + +/** + * SMAA area image data. + * + * This texture allows to obtain the area for a certain pattern and distances to the left and right of identified lines. + * + * Based on the official python scripts: + * https://github.com/iryoku/smaa/tree/master/Scripts + */ +export class SMAAAreaImageData { + + /** + * Creates a new area image. + * + * @return {RawImageData} The generated image data. + */ + static generate(): RawImageData; + +} + +/** + * An SMAA image generator. + * + * This class uses a worker thread to generate the search and area images. The generated data URLs will be cached using + * localStorage, if available. To disable caching use {@link SMAAImageGenerator.setCacheEnabled}. + */ +export class SMAAImageGenerator { + + /** + * Indicates whether data image caching is disabled. + * + * @type {Boolean} + * @deprecated Use setCacheEnabled() instead. + */ + disableCache: boolean; + /** + * Enables or disables caching via localStorage. + * + * @param {Boolean} value - Whether the cache should be enabled. + */ + setCacheEnabled(value: boolean): void; + /** + * Generates the SMAA data images. + * + * @example + * SMAAImageGenerator.generate().then(([search, area]) => { + * const smaaEffect = new SMAAEffect(search, area); + * }); + * @return {Promise} A promise that returns the search image and area image as a pair. + */ + generate(): Promise<(new (width?: number, height?: number) => HTMLImageElement)[]>; + +} + +/** + * SMAA search image data. + * + * This image stores information about how many pixels the line search algorithm must advance in the last step. + * + * Based on the official python scripts: + * https://github.com/iryoku/smaa/tree/master/Scripts + */ +export class SMAASearchImageData { + + /** + * Creates a new search image. + * + * @return {RawImageData} The generated image data. + */ + static generate(): RawImageData; + +} + +/** + * A 3D lookup texture (LUT). + * + * This texture can be used as-is in a WebGL 2 context. It can also be converted into a 2D texture. + */ +export class LookupTexture extends Data3DTexture { + + /** + * Creates a new 3D LUT by copying a given LUT. * - * @type {Object} - * @property {Number} RED - Red. - * @property {Number} GREEN - Green. - * @property {Number} BLUE - Blue. - * @property {Number} ALPHA - Alpha. - */ - export enum ColorChannel { - RED, - GREEN, - BLUE, - ALPHA, - } - - /** - * The Disposable contract. - * - * Implemented by objects that can free internal resources. - * - * @interface - */ - export interface Disposable { - - /** - * Frees internal resources. - */ - dispose(): void; - - } - - /** - * The initializable contract. - * - * Implemented by objects that can be initialized. - * - * @interface - */ - export interface Initializable { - - /** - * Performs initialization tasks. - * - * @param {WebGLRenderer} renderer - A renderer. - * @param {Boolean} alpha - Whether the renderer uses the alpha channel. - * @param {Number} frameBufferType - The type of the main frame buffers. - */ - initialize( - renderer: WebGLRenderer, - alpha: boolean, - frameBufferType: number - ): void; - - } - - /** - * A Gauss kernel. - * - * Based on https://github.com/Jam3/glsl-fast-gaussian-blur. - */ - export class GaussKernel { - - /** - * Constructs a new Gauss kernel. - * - * @param kernelSize - The kernel size. Should be an odd number in the range [3, 1020]. - * @param [edgeBias=2] - Determines how many edge coefficients should be cut off for increased accuracy. - */ - constructor(kernelSize: number, edgeBias: number); - - } - /** - * An adaptive luminance shader material. - */ - export class AdaptiveLuminanceMaterial extends ShaderMaterial { - - /** - * Constructs a new adaptive luminance material. - */ - constructor(); - /** - * The primary luminance buffer that contains the downsampled average luminance. - * - * @type {Texture} - */ - set luminanceBuffer0(arg: Texture); - /** - * Sets the primary luminance buffer that contains the downsampled average luminance. - * - * @deprecated Use luminanceBuffer0 instead. - * @param {Texture} value - The buffer. - */ - setLuminanceBuffer0(value: Texture): void; - /** - * The secondary luminance buffer. - * - * @type {Texture} - */ - set luminanceBuffer1(arg: Texture); - /** - * Sets the secondary luminance buffer. - * - * @deprecated Use luminanceBuffer1 instead. - * @param {Texture} value - The buffer. - */ - setLuminanceBuffer1(value: Texture): void; - /** - * The 1x1 mipmap level. - * - * This level is used to identify the smallest mipmap of the primary luminance buffer. - * - * @type {Number} - */ - set mipLevel1x1(arg: number); - /** - * Sets the 1x1 mipmap level. - * - * @deprecated Use mipLevel1x1 instead. - * @param {Number} value - The level. - */ - setMipLevel1x1(value: number): void; - /** - * The delta time. - * - * @type {Number} - */ - set deltaTime(arg: number); - /** - * Sets the delta time. - * - * @deprecated Use deltaTime instead. - * @param {Number} value - The delta time. - */ - setDeltaTime(value: number): void; - set minLuminance(arg: number); - /** - * The lowest possible luminance value. - * - * @type {Number} - */ - get minLuminance(): number; - /** - * Returns the lowest possible luminance value. - * - * @deprecated Use minLuminance instead. - * @return {Number} The minimum luminance. - */ - getMinLuminance(): number; - /** - * Sets the minimum luminance. - * - * @deprecated Use minLuminance instead. - * @param {Number} value - The minimum luminance. - */ - setMinLuminance(value: number): void; - set adaptationRate(arg: number); - /** - * The luminance adaptation rate. - * - * @type {Number} - */ - get adaptationRate(): number; - /** - * Returns the luminance adaptation rate. - * - * @deprecated Use adaptationRate instead. - * @return {Number} The adaptation rate. - */ - getAdaptationRate(): number; - /** - * Sets the luminance adaptation rate. - * - * @deprecated Use adaptationRate instead. - * @param {Number} value - The adaptation rate. - */ - setAdaptationRate(value: number): void; - - } - - /** - * A bokeh disc blur material. - * - * This material should be applied twice in a row, with `fill` mode enabled for the second pass. Enabling the - * `foreground` option causes the shader to combine the near and far CoC values around foreground objects. - * - * @implements {Resizable} - */ - export class BokehMaterial extends ShaderMaterial implements Resizable { - - /** - * Constructs a new bokeh material. - * - * @param {Boolean} [fill=false] - Enables or disables the bokeh highlight fill mode. - * @param {Boolean} [foreground=false] - Determines whether this material will be applied to foreground colors. - */ - constructor(fill?: boolean, foreground?: boolean); - /** - * The input buffer. - * - * @type {Texture} - */ - set inputBuffer(arg: Texture); - /** - * Sets the input buffer. - * - * @deprecated Use inputBuffer instead. - * @param {Texture} value - The buffer. - */ - setInputBuffer(value: Texture): void; - /** - * The circle of confusion buffer. - * - * @type {Texture} - */ - set cocBuffer(arg: Texture); - /** - * Sets the circle of confusion buffer. - * - * @deprecated Use cocBuffer instead. - * @param {Texture} value - The buffer. - */ - setCoCBuffer(value: Texture): void; - set scale(arg: number); - /** - * The blur scale. - * - * @type {Number} - */ - get scale(): number; - /** - * Returns the blur scale. - * - * @deprecated Use scale instead. - * @return {Number} The scale. - */ - getScale(value: number): number; - /** - * Sets the blur scale. - * - * @deprecated Use scale instead. - * @param {Number} value - The scale. - */ - setScale(value: number): void; - /** - * Sets the texel size. - * - * @deprecated Use setSize() instead. - * @param {Number} x - The texel width. - * @param {Number} y - The texel height. - */ - setTexelSize(x: number, y: number): void; - /** - * Sets the size of this object. - * - * @param {Number} width - The width. - * @param {Number} height - The height. - */ - setSize(width: number, height: number): void; - - } - - /** - * A Circle of Confusion shader material. - */ - export class CircleOfConfusionMaterial extends ShaderMaterial { - - /** - * Constructs a new CoC material. - * - * @param {Camera} camera - A camera. - */ - constructor(camera: Camera); - /** - * The depth buffer. - * - * @type {Texture} - */ - set depthBuffer(arg: Texture); - /** - * The depth packing strategy. - * - * @type {DepthPackingStrategies} - */ - set depthPacking(arg: DepthPackingStrategies); - /** - * Sets the depth buffer. - * - * @deprecated Use depthBuffer and depthPacking instead. - * @param {Texture} buffer - The depth texture. - * @param {DepthPackingStrategies} [depthPacking=BasicDepthPacking] - The depth packing strategy. - */ - setDepthBuffer( - buffer: Texture, - depthPacking?: DepthPackingStrategies - ): void; - - set focusDistance(arg: number); - /** - * The focus distance. Range: [0.0, 1.0]. - * - * @type {Number} - */ - get focusDistance(): number; - /** - * Returns the focus distance. - * - * @deprecated Use focusDistance instead. - * @return {Number} The focus distance. - */ - getFocusDistance(value: number): number; - /** - * Sets the focus distance. - * - * @deprecated Use focusDistance instead. - * @param {Number} value - The focus distance. - */ - setFocusDistance(value: number): void; - set focalLength(arg: number); - /** - * The focal length. - * - * @deprecated Renamed to focusRange. - * @type {Number} - */ - get focalLength(): number; - /** - * Returns the focal length. - * - * @deprecated Use focusRange instead. - * @return {Number} The focal length. - */ - getFocalLength(value: number): number; - /** - * Sets the focal length. - * - * @deprecated Use focusRange instead. - * @param {Number} value - The focal length. - */ - setFocalLength(value: number): void; - /** - * Adopts the settings of the given camera. - * - * @param {Camera} camera - A camera. - */ - adoptCameraSettings(camera: Camera): void; - - /** - * The focus distance in world units. - * - * @type {Number} - */ - get worldFocusDistance(): number; - set worldFocusDistance(value: number); - - /** - * The focus range. Range: [0.0, 1.0]. - * - * @type {Number} - */ - get focusRange(): number; - set focusRange(value: number); - - /** - * The focus range in world units. - * - * @type {Number} - */ - get worldFocusRange(): number; - set worldFocusRange(value: number); - - } - - /** - * A blur kernel size enumeration. + * Common image-based textures will be converted into 3D data textures. * - * @type {Object} - * @property {Number} VERY_SMALL - A very small kernel that matches a 7x7 Gaussian blur kernel. - * @property {Number} SMALL - A small kernel that matches a 15x15 Gaussian blur kernel. - * @property {Number} MEDIUM - A medium sized kernel that matches a 23x23 Gaussian blur kernel. - * @property {Number} LARGE - A large kernel that matches a 35x35 Gaussian blur kernel. - * @property {Number} VERY_LARGE - A very large kernel that matches a 63x63 Gaussian blur kernel. - * @property {Number} HUGE - A huge kernel that matches a 127x127 Gaussian blur kernel. - */ - export enum KernelSize { - VERY_SMALL, - SMALL, - MEDIUM, - LARGE, - VERY_LARGE, - HUGE, - } - - /** - * A simple copy shader material. - */ - export class CopyMaterial extends ShaderMaterial { - - /** - * Constructs a new copy material. - */ - constructor(); - /** - * The input buffer. - * - * @type {Texture} - */ - set inputBuffer(arg: Texture); - /** - * Sets the input buffer. - * - * @deprecated Use inputBuffer instead. - * @param {Number} value - The buffer. - */ - setInputBuffer(value: number): void; - /** - * Returns the opacity. - * - * @deprecated Use opacity instead. - * @return {Number} The opacity. - */ - getOpacity(): number; - /** - * Sets the opacity. - * - * @deprecated Use opacity instead. - * @param {Number} value - The opacity. - */ - setOpacity(value: number): void; - - } - - /** - * A depth comparison shader material. - */ - export class DepthComparisonMaterial extends ShaderMaterial { - - /** - * Constructs a new depth comparison material. - * - * @param {Texture} [depthTexture=null] - A depth texture. - * @param {PerspectiveCamera} [camera] - A camera. - */ - constructor(depthTexture?: Texture, camera?: PerspectiveCamera); - /** - * The depth buffer. - * - * @type {Texture} - */ - set depthBuffer(arg: Texture); - /** - * The depth packing strategy. - * - * @type {DepthPackingStrategies} - */ - set depthPacking(arg: DepthPackingStrategies); - /** - * Sets the depth buffer. - * - * @deprecated Use depthBuffer and depthPacking instead. - * @param {Texture} buffer - The depth texture. - * @param {DepthPackingStrategies} [depthPacking=RGBADepthPacking] - The depth packing strategy. - */ - setDepthBuffer( - buffer: Texture, - depthPacking?: DepthPackingStrategies - ): void; - - /** - * Adopts the settings of the given camera. - * - * @param {Camera} camera - A camera. - */ - adoptCameraSettings(camera: Camera): void; - - } - - /** - * An enumeration of depth copy modes. + * @param {Texture} texture - The LUT. Assumed to be cubic. + * @return {LookupTexture} A new 3D LUT. + */ + static from(texture: Texture): LookupTexture; + /** + * Creates a neutral 3D LUT. * - * @type {Object} - * @property {Number} FULL - Copies the full depth texture every frame. - * @property {Number} SINGLE - Copies a single texel from the depth texture on demand. - */ - export enum DepthCopyMode { - FULL, - SINGLE, - } - - /** - * A depth copy shader material. - */ - export class DepthCopyMaterial extends ShaderMaterial { - - /** - * Constructs a new depth copy material. - */ - constructor(); - /** - * The input depth buffer. - * - * @type {Texture} - */ - set depthBuffer(arg: Texture); - /** - * The input depth packing strategy. - * - * @type {DepthPackingStrategies} - */ - set inputDepthPacking(arg: DepthPackingStrategies); - set outputDepthPacking(arg: DepthPackingStrategies); - /** - * The output depth packing strategy. - * - * @type {DepthPackingStrategies} - */ - get outputDepthPacking(): DepthPackingStrategies; - /** - * Sets the input depth buffer. - * - * @deprecated Use depthBuffer and inputDepthPacking instead. - * @param {Texture} buffer - The depth texture. - * @param {DepthPackingStrategies} [depthPacking=BasicDepthPacking] - The depth packing strategy. - */ - setDepthBuffer( - buffer: Texture, - depthPacking?: DepthPackingStrategies - ): void; - - /** - * Returns the current input depth packing strategy. - * - * @deprecated - * @return {DepthPackingStrategies} The input depth packing strategy. - */ - getInputDepthPacking(): DepthPackingStrategies; - /** - * Sets the input depth packing strategy. - * - * @deprecated Use inputDepthPacking instead. - * @param {DepthPackingStrategies} value - The new input depth packing strategy. - */ - setInputDepthPacking(value: DepthPackingStrategies): void; - /** - * Returns the current output depth packing strategy. - * - * @deprecated Use outputDepthPacking instead. - * @return {DepthPackingStrategies} The output depth packing strategy. - */ - getOutputDepthPacking(): DepthPackingStrategies; - /** - * Sets the output depth packing strategy. - * - * @deprecated Use outputDepthPacking instead. - * @param {DepthPackingStrategies} value - The new output depth packing strategy. - */ - setOutputDepthPacking(value: DepthPackingStrategies): void; - /** - * The screen space position used for single-texel copy operations. - * - * @type {Vector2} - */ - get texelPosition(): Vector2; - /** - * Returns the screen space position used for single-texel copy operations. - * - * @deprecated Use texelPosition instead. - * @return {Vector2} The position. - */ - getTexelPosition(): Vector2; - /** - * Sets the screen space position used for single-texel copy operations. - * - * @deprecated - * @param {Vector2} value - The position. - */ - setTexelPosition(value: Vector2): void; - set mode(arg: DepthCopyMode); - /** - * The depth copy mode. - * - * @type {DepthCopyMode} - */ - get mode(): DepthCopyMode; - /** - * Returns the depth copy mode. - * - * @deprecated Use mode instead. - * @return {DepthCopyMode} The depth copy mode. - */ - getMode(): DepthCopyMode; - /** - * Sets the depth copy mode. - * - * @deprecated Use mode instead. - * @param {DepthCopyMode} value - The new mode. - */ - setMode(value: DepthCopyMode): void; - - } - - /** - * A depth downsampling shader material. - * - * Based on an article by Eleni Maria Stea: - * https://eleni.mutantstargoat.com/hikiko/depth-aware-upsampling-6 - * - * @implements {Resizable} - */ - export class DepthDownsamplingMaterial - extends ShaderMaterial - implements Resizable { - - /** - * Constructs a new depth downsampling material. - */ - constructor(); - /** - * The depth buffer. - * - * @type {Texture} - */ - set depthBuffer(arg: Texture); - /** - * The depth packing strategy. - * - * @type {DepthPackingStrategies} - */ - set depthPacking(arg: DepthPackingStrategies); - /** - * Sets the depth buffer. - * - * @deprecated Use depthBuffer and depthPacking instead. - * @param {Texture} buffer - The depth texture. - * @param {DepthPackingStrategies} [depthPacking=BasicDepthPacking] - The depth packing strategy. - */ - setDepthBuffer( - buffer: Texture, - depthPacking?: DepthPackingStrategies - ): void; - - /** - * The normal buffer. - * - * @type {Texture} - */ - set normalBuffer(arg: Texture); - /** - * Sets the normal buffer. - * - * @deprecated Use normalBuffer instead. - * @param {Texture} value - The normal buffer. - */ - setNormalBuffer(value: Texture): void; - /** - * Sets the texel size. - * - * @deprecated Use setSize() instead. - * @param {Number} x - The texel width. - * @param {Number} y - The texel height. - */ - setTexelSize(x: number, y: number): void; - /** - * Sets the size of this object. - * - * @param {Number} width - The width. - * @param {Number} height - The height. - */ - setSize(width: number, height: number): void; - - } - - /** - * An enumeration of depth test strategies. + * @param {Number} size - The sidelength. + * @return {LookupTexture} A neutral 3D LUT. + */ + static createNeutral(size: number): LookupTexture; + /** + * Constructs a cubic 3D lookup texture. * - * @type {Object} - * @property {Number} DEFAULT - Perform depth test only. - * @property {Number} KEEP_MAX_DEPTH - Always keep max depth. - * @property {Number} DISCARD_MAX_DEPTH - Always discard max depth. - */ - export enum DepthTestStrategy { - DEFAULT, - KEEP_MAX_DEPTH, - DISCARD_MAX_DEPTH, - } - - /** - * A depth mask shader material. - * - * This material masks a color buffer by comparing two depth textures. - */ - export class DepthMaskMaterial extends ShaderMaterial { - - /** - * Constructs a new depth mask material. - */ - constructor(); - set depthMode(arg: DepthModes); - /** - * The depth mode. - * - * @see https://threejs.org/docs/#api/en/constants/Materials - * @type {DepthModes} - */ - get depthMode(): DepthModes; - /** - * The primary depth buffer. - * - * @type {Texture} - */ - set depthBuffer0(arg: Texture); - /** - * The primary depth packing strategy. - * - * @type {DepthPackingStrategies} - */ - set depthPacking0(arg: DepthPackingStrategies); - /** - * Sets the base depth buffer. - * - * @deprecated Use depthBuffer0 and depthPacking0 instead. - * @param {Texture} buffer - The depth texture. - * @param {DepthPackingStrategies} [depthPacking=BasicDepthPacking] - The depth packing strategy. - */ - setDepthBuffer0( - buffer: Texture, - depthPacking?: DepthPackingStrategies - ): void; - - /** - * The secondary depth buffer. - * - * @type {Texture} - */ - set depthBuffer1(arg: Texture); - /** - * The secondary depth packing strategy. - * - * @type {DepthPackingStrategies} - */ - set depthPacking1(arg: DepthPackingStrategies); - /** - * Sets the depth buffer that will be compared with the base depth buffer. - * - * @deprecated Use depthBuffer1 and depthPacking1 instead. - * @param {Texture} buffer - The depth texture. - * @param {DepthPackingStrategies} [depthPacking=BasicDepthPacking] - The depth packing strategy. - */ - setDepthBuffer1( - buffer: Texture, - depthPacking?: DepthPackingStrategies - ): void; - - set maxDepthStrategy(arg: DepthTestStrategy); - /** - * The strategy for handling maximum depth. - * - * @type {DepthTestStrategy} - */ - get maxDepthStrategy(): DepthTestStrategy; - set keepFar(arg: boolean); - /** - * Indicates whether maximum depth values should be preserved. - * - * @type {Boolean} - * @deprecated Use maxDepthStrategy instead. - */ - get keepFar(): boolean; - /** - * Returns the strategy for dealing with maximum depth values. - * - * @deprecated Use maxDepthStrategy instead. - * @return {DepthTestStrategy} The strategy. - */ - getMaxDepthStrategy(): DepthTestStrategy; - /** - * Sets the strategy for dealing with maximum depth values. - * - * @deprecated Use maxDepthStrategy instead. - * @param {DepthTestStrategy} value - The strategy. - */ - setMaxDepthStrategy(value: DepthTestStrategy): void; - set epsilon(arg: number); - /** - * A small error threshold that is used for `EqualDepth` and `NotEqualDepth` tests. Default is `1e-5`. - * - * @type {Number} - */ - get epsilon(): number; - /** - * Returns the current error threshold for depth comparisons. Default is `1e-5`. - * - * @deprecated Use epsilon instead. - * @return {Number} The error threshold. - */ - getEpsilon(): number; - /** - * Sets the depth comparison error threshold. - * - * @deprecated Use epsilon instead. - * @param {Number} value - The new error threshold. - */ - setEpsilon(value: number): void; - /** - * Returns the current depth mode. - * - * @deprecated Use depthMode instead. - * @return {DepthModes} The depth mode. Default is `LessDepth`. - */ - getDepthMode(): DepthModes; - /** - * Sets the depth mode. - * - * @deprecated Use depthMode instead. - * @param {DepthModes} mode - The depth mode. - */ - setDepthMode(mode: DepthModes): void; - - } - - /** - * An enumeration of edge detection modes. + * @param {TypedArray} data - The pixel data. The default format is RGBA. + * @param {Number} size - The sidelength. + */ + constructor(data: ArrayBufferView, size: number); + /** + * The lower bounds of the input domain. * - * @type {Object} - * @property {Number} DEPTH - Depth-based edge detection. - * @property {Number} LUMA - Luminance-based edge detection. - * @property {Number} COLOR - Chroma-based edge detection. + * @type {Vector3} */ - export enum EdgeDetectionMode { - DEPTH, - LUMA, - COLOR, - } - + domainMin: Vector3; /** - * An enumeration of predication modes. + * The upper bounds of the input domain. * - * @type {Object} - * @property {Number} DISABLED - No predicated thresholding. - * @property {Number} DEPTH - Depth-based predicated thresholding. - * @property {Number} CUSTOM - Predicated thresholding using a custom buffer. - */ - export enum PredicationMode { - DISABLED, - DEPTH, - CUSTOM, - } - /** - * An edge detection material. - * - * Mainly used for Subpixel Morphological Anti-Aliasing. - * - * @implements {Resizable} - */ - export class EdgeDetectionMaterial - extends ShaderMaterial - implements Resizable { - - /** - * Constructs a new edge detection material. - * - * TODO Remove parameters. - * @param {Vector2} [texelSize] - The screen texel size. - * @param {EdgeDetectionMode} [mode=EdgeDetectionMode.COLOR] - The edge detection mode. - */ - constructor(texelSize?: Vector2, mode?: EdgeDetectionMode); - set edgeDetectionMode(arg: EdgeDetectionMode); - /** - * The edge detection mode. - * - * @type {EdgeDetectionMode} - */ - get edgeDetectionMode(): EdgeDetectionMode; - /** - * The depth buffer. - * - * @type {Texture} - */ - set depthBuffer(arg: Texture); - /** - * The depth packing strategy. - * - * @type {DepthPackingStrategies} - */ - set depthPacking(arg: DepthPackingStrategies); - /** - * Sets the depth buffer. - * - * @deprecated Use depthBuffer and depthPacking instead. - * @param {Texture} buffer - The depth texture. - * @param {DepthPackingStrategies} [depthPacking=BasicDepthPacking] - The depth packing strategy. - */ - setDepthBuffer( - buffer: Texture, - depthPacking?: DepthPackingStrategies - ): void; - - /** - * Returns the edge detection mode. - * - * @deprecated Use edgeDetectionMode instead. - * @return {EdgeDetectionMode} The mode. - */ - getEdgeDetectionMode(): EdgeDetectionMode; - /** - * Sets the edge detection mode. - * - * @deprecated Use edgeDetectionMode instead. - * @param {EdgeDetectionMode} value - The edge detection mode. - */ - setEdgeDetectionMode(value: EdgeDetectionMode): void; - set localContrastAdaptationFactor(arg: number); - /** - * The local contrast adaptation factor. Has no effect if the edge detection mode is set to DEPTH. Default is 2.0. - * - * If a neighbor edge has _factor_ times bigger contrast than the current edge, the edge will be discarded. - * - * This allows to eliminate spurious crossing edges and is based on the fact that if there is too much contrast in a - * direction, the perceptual contrast in the other neighbors will be hidden. - * - * @type {Number} - */ - get localContrastAdaptationFactor(): number; - /** - * Returns the local contrast adaptation factor. - * - * @deprecated Use localContrastAdaptationFactor instead. - * @return {Number} The factor. - */ - getLocalContrastAdaptationFactor(): number; - /** - * Sets the local contrast adaptation factor. Has no effect if the edge detection mode is set to DEPTH. - * - * @deprecated Use localContrastAdaptationFactor instead. - * @param {Number} value - The local contrast adaptation factor. Default is 2.0. - */ - setLocalContrastAdaptationFactor(value: number): void; - set edgeDetectionThreshold(arg: number); - /** - * The edge detection threshold. Range: [0.0, 0.5]. - * - * A lower value results in more edges being detected at the expense of performance. - * - * For luma- and chroma-based edge detection, 0.1 is a reasonable value and allows to catch most visible edges. 0.05 - * is a rather overkill value that allows to catch 'em all. Darker scenes may require an even lower threshold. - * - * If depth-based edge detection is used, the threshold will depend on the scene depth. - * - * @type {Number} - */ - get edgeDetectionThreshold(): number; - /** - * Returns the edge detection threshold. - * - * @deprecated Use edgeDetectionThreshold instead. - * @return {Number} The threshold. - */ - getEdgeDetectionThreshold(): number; - /** - * Sets the edge detection threshold. - * - * @deprecated Use edgeDetectionThreshold instead. - * @param {Number} value - The edge detection threshold. Range: [0.0, 0.5]. - */ - setEdgeDetectionThreshold(value: number): void; - set predicationMode(arg: PredicationMode); - /** - * The predication mode. - * - * Predicated thresholding allows to better preserve texture details and to improve edge detection using an additional - * buffer such as a light accumulation or depth buffer. - * - * @type {PredicationMode} - */ - get predicationMode(): PredicationMode; - /** - * Returns the predication mode. - * - * @deprecated Use predicationMode instead. - * @return {PredicationMode} The mode. - */ - getPredicationMode(): PredicationMode; - /** - * Sets the predication mode. - * - * @deprecated Use predicationMode instead. - * @param {PredicationMode} value - The predication mode. - */ - setPredicationMode(value: PredicationMode): void; - /** - * The predication buffer. - * - * @type {Texture} - */ - set predicationBuffer(arg: Texture); - /** - * Sets a custom predication buffer. - * - * @deprecated Use predicationBuffer instead. - * @param {Texture} value - The predication buffer. - */ - setPredicationBuffer(value: Texture): void; - set predicationThreshold(arg: number); - /** - * The predication threshold. - * - * @type {Number} - */ - get predicationThreshold(): number; - /** - * Returns the predication threshold. - * - * @deprecated Use predicationThreshold instead. - * @return {Number} The threshold. - */ - getPredicationThreshold(): number; - /** - * Sets the predication threshold. - * - * @deprecated Use predicationThreshold instead. - * @param {Number} value - The threshold. - */ - setPredicationThreshold(value: number): void; - set predicationScale(arg: number); - /** - * The predication scale. Range: [1.0, 5.0]. - * - * Determines how much the edge detection threshold should be scaled when using predication. - * - * @type {Number} - */ - get predicationScale(): number; - /** - * Returns the predication scale. - * - * @deprecated Use predicationScale instead. - * @return {Number} The scale. - */ - getPredicationScale(): number; - /** - * Sets the predication scale. - * - * @deprecated Use predicationScale instead. - * @param {Number} value - The scale. Range: [1.0, 5.0]. - */ - setPredicationScale(value: number): void; - set predicationStrength(arg: number); - /** - * The predication strength. Range: [0.0, 1.0]. - * - * Determines how much the edge detection threshold should be decreased locally when using predication. - * - * @type {Number} - */ - get predicationStrength(): number; - /** - * Returns the predication strength. - * - * @deprecated Use predicationStrength instead. - * @return {Number} The strength. - */ - getPredicationStrength(): number; - /** - * Sets the predication strength. - * - * @deprecated Use predicationStrength instead. - * @param {Number} value - The strength. Range: [0.0, 1.0]. - */ - setPredicationStrength(value: number): void; - /** - * Sets the size of this object. - * - * @param {Number} width - The width. - * @param {Number} height - The height. - */ - setSize(width: number, height: number): void; - - } - - export type ColorEdgesMaterial = EdgeDetectionMaterial; - - /** - * An effect material for compound shaders. Supports dithering. - * - * @implements {Resizable} - */ - export class EffectMaterial extends ShaderMaterial implements Resizable { - - /** - * An enumeration of shader code section placeholders used by the {@link EffectPass}. - * - * @type {Object} - * @property {String} FRAGMENT_HEAD - A placeholder for function and variable declarations inside the fragment shader. - * @property {String} FRAGMENT_MAIN_UV - A placeholder for UV transformations inside the fragment shader. - * @property {String} FRAGMENT_MAIN_IMAGE - A placeholder for color calculations inside the fragment shader. - * @property {String} VERTEX_HEAD - A placeholder for function and variable declarations inside the vertex shader. - * @property {String} VERTEX_MAIN_SUPPORT - A placeholder for supporting calculations inside the vertex shader. - */ - static get Section(): { - FRAGMENT_HEAD: string; - FRAGMENT_MAIN_UV: string; - FRAGMENT_MAIN_IMAGE: string; - VERTEX_HEAD: string; - VERTEX_MAIN_SUPPORT: string; - }; - - /** - * Constructs a new effect material. - * - * @param {Map} [shaderParts] - A collection of shader snippets. See {@link Section}. - * @param {Map} [defines] - A collection of preprocessor macro definitions. - * @param {Map} [uniforms] - A collection of uniforms. - * @param {Camera} [camera] - A camera. - * @param {Boolean} [dithering=false] - Whether dithering should be enabled. - */ - constructor( - shaderParts?: Map, - defines?: Map, - uniforms?: Map, - camera?: Camera, - dithering?: boolean - ); - - /** - * The input buffer. - * - * @type {Texture} - */ - set inputBuffer(arg: Texture); - /** - * Sets the input buffer. - * - * @deprecated Use inputBuffer instead. - * @param {Texture} value - The input buffer. - */ - setInputBuffer(value: Texture): void; - set depthBuffer(arg: Texture); - /** - * The depth buffer. - * - * @type {Texture} - */ - get depthBuffer(): Texture; - set depthPacking(arg: DepthPackingStrategies); - /** - * The depth packing strategy. - * - * @type {DepthPackingStrategies} - */ - get depthPacking(): DepthPackingStrategies; - /** - * Sets the depth buffer. - * - * @deprecated Use depthBuffer and depthPacking instead. - * @param {Texture} buffer - The depth texture. - * @param {DepthPackingStrategies} [depthPacking=BasicDepthPacking] - The depth packing strategy. - */ - setDepthBuffer( - buffer: Texture, - depthPacking?: DepthPackingStrategies - ): void; - - /** - * Sets the shader parts. - * - * @param {Map} shaderParts - A collection of shader snippets. See {@link Section}. - * @return {EffectMaterial} This material. - */ - setShaderParts(shaderParts: Map): EffectMaterial; - /** - * Sets the shader macros. - * - * @param {Map} defines - A collection of preprocessor macro definitions. - * @return {EffectMaterial} This material. - */ - setDefines(defines: Map): EffectMaterial; - /** - * Sets the shader uniforms. - * - * @param {Map} uniforms - A collection of uniforms. - * @return {EffectMaterial} This material. - */ - setUniforms(uniforms: Map): EffectMaterial; - /** - * Sets the required shader extensions. - * - * @param {Set} extensions - A collection of extensions. - * @return {EffectMaterial} This material. - */ - setExtensions(extensions: Set): EffectMaterial; - set encodeOutput(arg: boolean); - /** - * Indicates whether output encoding is enabled. - * - * @type {Boolean} - */ - get encodeOutput(): boolean; - /** - * Indicates whether output encoding is enabled. - * - * @deprecated Use encodeOutput instead. - * @return {Boolean} Whether output encoding is enabled. - */ - isOutputEncodingEnabled(): boolean; - /** - * Enables or disables output encoding. - * - * @deprecated Use encodeOutput instead. - * @param {Boolean} value - Whether output encoding should be enabled. - */ - setOutputEncodingEnabled(value: boolean): void; - set time(arg: number); - /** - * The time in seconds. - * - * @type {Number} - */ - get time(): number; - /** - * Sets the delta time. - * - * @deprecated Use time instead. - * @param {Number} value - The delta time in seconds. - */ - setDeltaTime(value: number): void; - /** - * Adopts the settings of the given camera. - * - * @param {Camera} camera - A camera. - */ - adoptCameraSettings(camera: Camera): void; - /** - * Sets the resolution. - * - * @param {Number} width - The width. - * @param {Number} height - The height. - */ - setSize(width: number, height: number): void; - - } - - /** - * An enumeration of shader code placeholders used by the {@link EffectPass}. - * @property FRAGMENT_HEAD - A placeholder for function and variable declarations inside the fragment shader. - * @property FRAGMENT_MAIN_UV - A placeholder for UV transformations inside the fragment shader. - * @property FRAGMENT_MAIN_IMAGE - A placeholder for color calculations inside the fragment shader. - * @property VERTEX_HEAD - A placeholder for function and variable declarations inside the vertex shader. - * @property VERTEX_MAIN_SUPPORT - A placeholder for supporting calculations inside the vertex shader. - * @deprecated Use EffectMaterial.Section instead. - */ - export const Section: { - FRAGMENT_HEAD: string; - FRAGMENT_MAIN_UV: string; - FRAGMENT_MAIN_IMAGE: string; - VERTEX_HEAD: string; - VERTEX_MAIN_SUPPORT: string; - }; - + * @type {Vector3} + */ + domainMax: Vector3; /** - * A crepuscular rays shader material. - * - * References: - * - * Thibaut Despoulain, 2012: - * [(WebGL) Volumetric Light Approximation in Three.js]( - * http://bkcore.com/blog/3d/webgl-three-js-volumetric-light-godrays.html) - * - * Nvidia, GPU Gems 3, 2008: - * [Chapter 13. Volumetric Light Scattering as a Post-Process]( - * https://developer.nvidia.com/gpugems/GPUGems3/gpugems3_ch13.html) - * - * @todo Remove dithering code from fragment shader. - */ - export class GodRaysMaterial extends ShaderMaterial { - - /** - * Constructs a new god rays material. - * - * TODO Remove lightPosition param. - * @param {Vector2} lightPosition - Deprecated. - */ - constructor(lightPosition: Vector2); - /** - * The input buffer. - * - * @type {Texture} - */ - set inputBuffer(arg: Texture); - /** - * Sets the input buffer. - * - * @deprecated Use inputBuffer instead. - * @param {Texture} value - The input buffer. - */ - setInputBuffer(value: Texture): void; - /** - * The screen space position of the light source. - * - * @type {Vector2} - */ - get lightPosition(): Vector2; - /** - * Returns the screen space position of the light source. - * - * @deprecated Use lightPosition instead. - * @return {Vector2} The position. - */ - getLightPosition(): Vector2; - /** - * Sets the screen space position of the light source. - * - * @deprecated Use lightPosition instead. - * @param {Vector2} value - The position. - */ - setLightPosition(value: Vector2): void; - set density(arg: number); - /** - * The density. - * - * @type {Number} - */ - get density(): number; - /** - * Returns the density. - * - * @deprecated Use density instead. - * @return {Number} The density. - */ - getDensity(): number; - /** - * Sets the density. - * - * @deprecated Use density instead. - * @param {Number} value - The density. - */ - setDensity(value: number): void; - set decay(arg: number); - /** - * The decay. - * - * @type {Number} - */ - get decay(): number; - /** - * Returns the decay. - * - * @deprecated Use decay instead. - * @return {Number} The decay. - */ - getDecay(): number; - /** - * Sets the decay. - * - * @deprecated Use decay instead. - * @param {Number} value - The decay. - */ - setDecay(value: number): void; - set weight(arg: number); - /** - * The weight. - * - * @type {Number} - */ - get weight(): number; - /** - * Returns the weight. - * - * @deprecated Use weight instead. - * @return {Number} The weight. - */ - getWeight(): number; - /** - * Sets the weight. - * - * @deprecated Use weight instead. - * @param {Number} value - The weight. - */ - setWeight(value: number): void; - set exposure(arg: number); - /** - * The exposure. - * - * @type {Number} - */ - get exposure(): number; - /** - * Returns the exposure. - * - * @deprecated Use exposure instead. - * @return {Number} The exposure. - */ - getExposure(): number; - /** - * Sets the exposure. - * - * @deprecated Use exposure instead. - * @param {Number} value - The exposure. - */ - setExposure(value: number): void; - set maxIntensity(arg: number); - /** - * The maximum light intensity. - * - * @type {Number} - */ - get maxIntensity(): number; - /** - * Returns the maximum light intensity. - * - * @deprecated Use maxIntensity instead. - * @return {Number} The maximum light intensity. - */ - getMaxIntensity(): number; - /** - * Sets the maximum light intensity. - * - * @deprecated Use maxIntensity instead. - * @param {Number} value - The maximum light intensity. - */ - setMaxIntensity(value: number): void; - set samples(arg: number); - /** - * The amount of samples per pixel. - * - * @type {Number} - */ - get samples(): number; - /** - * Returns the amount of samples per pixel. - * - * @deprecated Use samples instead. - * @return {Number} The sample count. - */ - getSamples(): number; - /** - * Sets the amount of samples per pixel. - * - * @deprecated Use samples instead. - * @param {Number} value - The sample count. - */ - setSamples(value: number): void; - - } - - /** - * A box blur material. - * - * @implements {Resizable} - */ - - export class BoxBlurMaterial extends ShaderMaterial {} - - /** - * A box blur pass. - */ - - export class BoxBlurPass extends Pass { - - /** - * Constructs a new box blur pass. - * - * @param {Object} [options] - The options. - * @param {Number} [options.kernelSize=5] - The kernel size. - * @param {Number} [options.iterations=1] - The amount of times the blur should be applied. - * @param {Number} [options.bilateral=false] - Enables or disables bilateral blurring. - * @param {Number} [options.resolutionScale=1.0] - The resolution scale. - * @param {Number} [options.resolutionX=Resolution.AUTO_SIZE] - The horizontal resolution. - * @param {Number} [options.resolutionY=Resolution.AUTO_SIZE] - The vertical resolution. - */ - - constructor( - { - kernelSize, - iterations, - bilateral, - resolutionScale, - resolutionX, - resolutionY - }?: { - kernelSize?: number; - iterations?: number; - bilateral?: boolean; - resolutionScale?: number; - resolutionX?: number; - resolutionY?: number; - } - ); - - } - - /** - * An optimized Gaussian convolution shader material. - * - * References: - * - * Filip Strugar, Intel, 2014: [An investigation of fast real-time GPU-based image blur algorithms]( - * https://www.intel.com/content/www/us/en/developer/articles/technical/an-investigation-of-fast-real-time-gpu-based-image-blur-algorithms.html) - * - * @implements {Resizable} - */ - - export class GaussianBlurMaterial extends ShaderMaterial { - - /** - * Constructs a new convolution material. - * - * @param {Object} [options] - The options. - * @param {Number} [options.kernelSize=35] - The kernel size. - */ - constructor( - { - kernelSize - }?: { - kernelSize?: number; - } - ); - - } - - /** - * A Gaussian blur pass. - */ - - export class GaussianBlurPass extends Pass { - - /** - * Constructs a new Gaussian blur pass. - * - * @param {Object} [options] - The options. - * @param {Number} [options.kernelSize=35] - The kernel size. Should be an odd number in the range [3, 1020]. - * @param {Number} [options.iterations=1] - The amount of times the blur should be applied. - * @param {Number} [options.resolutionScale=1.0] - The resolution scale. - * @param {Number} [options.resolutionX=Resolution.AUTO_SIZE] - The horizontal resolution. - * @param {Number} [options.resolutionY=Resolution.AUTO_SIZE] - The vertical resolution. - */ - - constructor( - { - kernelSize, - iterations, - resolutionScale, - resolutionX, - resolutionY - }?: { - kernelSize?: number; - iterations?: number; - resolutionScale?: number; - resolutionX?: number; - resolutionY?: number; - } - ); - - } - - /** - * An optimised convolution shader material. - * - * Based on the GDC2003 Presentation by Masaki Kawase, Bunkasha Games: - * Frame Buffer Postprocessing Effects in DOUBLE-S.T.E.A.L (Wreckless) - * and an article by Filip Strugar, Intel: - * An investigation of fast real-time GPU-based image blur algorithms - * - * Further modified according to Apple's [Best Practices for Shaders](https://goo.gl/lmRoM5). - * - * @todo Remove dithering code from fragment shader. - * @implements {Resizable} - */ - export class KawaseBlurMaterial extends ShaderMaterial implements Resizable { - - /** - * Constructs a new convolution material. - * - * TODO Remove texelSize param. - * @param {Vector2} [texelSize] - Deprecated. - */ - constructor(texelSize?: Vector2); - /** - * The input buffer. - * - * @type {Texture} - */ - set inputBuffer(arg: Texture); - /** - * Sets the input buffer. - * - * @deprecated Use inputBuffer instead. - * @param {Texture} value - The input buffer. - */ - setInputBuffer(value: Texture): void; - set scale(arg: number); - /** - * The blur scale. - * - * @type {Number} - */ - get scale(): number; - /** - * Returns the blur scale. - * - * @deprecated Use scale instead. - * @return {Number} The scale. - */ - getScale(): number; - /** - * Sets the blur scale. - * - * @deprecated Use scale instead. - * @param {Number} value - The scale. - */ - setScale(value: number): void; - /** - * Returns the kernel. - * - * @return {Float32Array} The kernel. - * @deprecated Implementation detail, removed with no replacement. - */ - getKernel(): Float32Array; - set kernel(arg: number); - /** - * The current kernel. - * - * @type {Number} - */ - get kernel(): number; - /** - * Sets the current kernel. - * - * @deprecated Use kernel instead. - * @param {Number} value - The kernel. - */ - setKernel(value: number): void; - /** - * Sets the texel size. - * - * @deprecated Use setSize() instead. - * @param {Number} x - The texel width. - * @param {Number} y - The texel height. - */ - setTexelSize(x: number, y: number): void; - /** - * Sets the size of this object. - * - * @param {Number} width - The width. - * @param {Number} height - The height. - */ - setSize(width: number, height: number): void; - - } - - export type ConvolutionMaterial = KawaseBlurMaterial; - - /** - * A luminance shader material. - * - * This shader produces a greyscale luminance map that describes the absolute amount of light emitted by a scene. It can - * also be configured to output colors that are scaled with their respective luminance value. Additionally, a range may - * be provided to mask out undesired texels. - * - * The alpha channel always contains the luminance value. - * - * On luminance coefficients: - * http://www.poynton.com/notes/colour_and_gamma/ColorFAQ.html#RTFToC9 - * - * Coefficients for different color spaces: - * https://hsto.org/getpro/habr/post_images/2ab/69d/084/2ab69d084f9a597e032624bcd74d57a7.png - * - * Luminance range reference: - * https://cycling74.com/2007/05/23/your-first-shader/#.Vty9FfkrL4Z - */ - export class LuminanceMaterial extends ShaderMaterial { - - /** - * Constructs a new luminance material. - * - * @param {Boolean} [colorOutput=false] - Defines whether the shader should output colors scaled with their luminance value. - * @param {Vector2} [luminanceRange] - If provided, the shader will mask out texels that aren't in the specified luminance range. - */ - constructor(colorOutput?: boolean, luminanceRange?: Vector2); - set colorOutput(arg: boolean); - /** - * Indicates whether color output is enabled. - * - * @type {Boolean} - */ - get colorOutput(): boolean; - set luminanceRange(arg: boolean); - /** - * The luminance range. Set to null to disable. - * - * @type {Boolean} - */ - get luminanceRange(): boolean; - /** - * The input buffer. - * - * @type {Texture} - */ - set inputBuffer(arg: Texture); - /** - * Sets the input buffer. - * - * @deprecated Use inputBuffer instead. - * @param {Texture} value - The input buffer. - */ - setInputBuffer(value: Texture): void; - set threshold(arg: number); - /** - * The luminance threshold. - * - * @type {Number} - */ - get threshold(): number; - /** - * Returns the luminance threshold. - * - * @deprecated Use threshold instead. - * @return {Number} The threshold. - */ - getThreshold(): number; - /** - * Sets the luminance threshold. - * - * @deprecated Use threshold instead. - * @param {Number} value - The threshold. - */ - setThreshold(value: number): void; - set smoothing(arg: number); - /** - * The luminance threshold smoothing. - * - * @type {Number} - */ - get smoothing(): number; - /** - * Returns the luminance threshold smoothing factor. - * - * @deprecated Use smoothing instead. - * @return {Number} The smoothing factor. - */ - getSmoothingFactor(): number; - /** - * Sets the luminance threshold smoothing factor. - * - * @deprecated Use smoothing instead. - * @param {Number} value - The smoothing factor. - */ - setSmoothingFactor(value: number): void; - set useThreshold(arg: boolean); - /** - * Indicates whether the luminance threshold is enabled. - * - * @type {Boolean} - * @deprecated Adjust the threshold or smoothing factor instead. - */ - get useThreshold(): boolean; - /** - * Indicates whether color output is enabled. - * - * @deprecated Use colorOutput instead. - * @return {Boolean} Whether color output is enabled. - */ - isColorOutputEnabled(): boolean; - /** - * Enables or disables color output. - * - * @deprecated Use colorOutput instead. - * @param {Boolean} value - Whether color output should be enabled. - */ - setColorOutputEnabled(value: boolean): void; - set useRange(arg: boolean); - /** - * Indicates whether luminance masking is enabled. - * - * @type {Boolean} - * @deprecated - */ - get useRange(): boolean; - /** - * Returns the current luminance range. - * - * @deprecated Use luminanceRange instead. - * @return {Vector2} The luminance range. - */ - getLuminanceRange(): Vector2; - /** - * Sets a luminance range. Set to null to disable. - * - * @deprecated Use luminanceRange instead. - * @param {Vector2} value - The luminance range. - */ - setLuminanceRange(value: Vector2): void; - - } - - /** - * A mask function enumeration. + * Indicates that this is an instance of LookupTexture3D. * - * @type {Object} - * @property {Number} DISCARD - Discards elements when the respective mask value is zero. - * @property {Number} MULTIPLY - Multiplies the input buffer with the mask texture. - * @property {Number} MULTIPLY_RGB_SET_ALPHA - Multiplies the input RGB values with the mask and sets alpha to the mask value. - * @property {Number} MULTIPLY_RGB - Multiplies the input RGB values with the mask and keeps the original alpha. - */ - export enum MaskFunction { - DISCARD, - MULTIPLY, - MULTIPLY_RGB_SET_ALPHA, - MULTIPLY_RGB - } - - /** - * A mask shader material. - * - * This material applies a mask texture to a buffer. - */ - export class MaskMaterial extends ShaderMaterial { - - /** - * Constructs a new mask material. - * - * @param {Texture} [maskTexture] - The mask texture. - */ - constructor(maskTexture?: Texture); - /** - * The input buffer. - * - * @type {Texture} - */ - set inputBuffer(arg: Texture); - /** - * Sets the input buffer. - * - * @deprecated Use inputBuffer instead. - * @param {Texture} value - The input buffer. - */ - setInputBuffer(value: Texture): void; - /** - * The mask texture. - * - * @type {Texture} - */ - set maskTexture(arg: Texture); - /** - * Sets the mask texture. - * - * @deprecated Use maskTexture instead. - * @param {Texture} value - The texture. - */ - setMaskTexture(value: Texture): void; - /** - * Sets the color channel to use for masking. Default is `ColorChannel.RED`. - * - * @type {ColorChannel} - */ - set colorChannel(arg: ColorChannel); - /** - * Sets the color channel to use for masking. Default is `ColorChannel.RED`. - * - * @deprecated Use colorChannel instead. - * @param {ColorChannel} value - The channel. - */ - setColorChannel(value: ColorChannel): void; - /** - * The masking technique. Default is `MaskFunction.DISCARD`. - * - * @type {MaskFunction} - */ - set maskFunction(arg: MaskFunction); - /** - * Sets the masking technique. Default is `MaskFunction.DISCARD`. - * - * @deprecated Use maskFunction instead. - * @param {MaskFunction} value - The function. - */ - setMaskFunction(value: MaskFunction): void; - set inverted(arg: boolean); - /** - * Indicates whether the masking is inverted. - * - * @type {Boolean} - */ - get inverted(): boolean; - /** - * Indicates whether the masking is inverted. - * - * @deprecated Use inverted instead. - * @return {Boolean} Whether the masking is inverted. - */ - isInverted(): boolean; - /** - * Determines whether the masking should be inverted. - * - * @deprecated Use inverted instead. - * @param {Boolean} value - Whether the masking should be inverted. - */ - setInverted(value: boolean): void; - set strength(arg: number); - /** - * The current mask strength. - * - * Individual mask values will be clamped to [0.0, 1.0]. Has no effect when the mask function is set to `DISCARD`. - * - * @type {Number} - */ - get strength(): number; - /** - * Returns the current mask strength. - * - * @deprecated Use strength instead. - * @return {Number} The mask strength. - */ - getStrength(): number; - /** - * Sets the mask strength. - * - * Has no effect when the mask function is set to `DISCARD`. - * - * @deprecated Use strength instead. - * @param {Number} value - The mask strength. - */ - setStrength(value: number): void; - - } - - /** - * An outline shader material. - * - * @implements {Resizable} - */ - export class OutlineMaterial extends ShaderMaterial implements Resizable { - - /** - * Constructs a new outline material. - * - * TODO Remove texelSize param. - * @param {Vector2} [texelSize] - The screen texel size. - */ - constructor(texelSize?: Vector2); - /** - * The input buffer. - * - * @param {Texture} arg - The input buffer. - */ - set inputBuffer(arg: Texture); - /** - * Sets the input buffer. - * - * @deprecated Use inputBuffer instead. - * @param {Texture} value - The input buffer. - */ - setInputBuffer(value: Texture): void; - /** - * Sets the texel size. - * - * @deprecated Use setSize() instead. - * @param {Number} x - The texel width. - * @param {Number} y - The texel height. - */ - setTexelSize(x: number, y: number): void; - /** - * Sets the size of this object. - * - * @param {Number} width - The width. - * @param {Number} height - The height. - */ - setSize(width: number, height: number): void; - - } - - /** - * An outline shader material. - */ - export type OutlineEdgesMaterial = OutlineMaterial; - - /** - * Subpixel Morphological Antialiasing. - * - * This material computes weights for detected edges. - * - * @implements {Resizable} - */ - export class SMAAWeightsMaterial extends ShaderMaterial implements Resizable { - - /** - * Constructs a new SMAA weights material. - * - * @param {Vector2} [texelSize] - The absolute screen texel size. - * @param {Vector2} [resolution] - The resolution. - */ - constructor(texelSize?: Vector2, resolution?: Vector2); - /** - * The input buffer. - * - * @param {Texture} arg - The input buffer. - */ - set inputBuffer(arg: Texture); - /** - * Sets the input buffer. - * - * @deprecated Use inputBuffer instead. - * @param {Texture} value - The input buffer. - */ - setInputBuffer(value: Texture): void; - set searchTexture(arg: Texture); - /** - * The search lookup texture. - * - * @type {Texture} - */ - get searchTexture(): Texture; - set areaTexture(arg: Texture); - /** - * The area lookup texture. - * - * @type {Texture} - */ - get areaTexture(): Texture; - /** - * Sets the search and area lookup textures. - * - * @deprecated Use searchTexture and areaTexture instead. - * @param {Texture} search - The search lookup texture. - * @param {Texture} area - The area lookup texture. - */ - setLookupTextures(search: Texture, area: Texture): void; - set orthogonalSearchSteps(arg: number); - /** - * The maximum amount of steps performed in the horizontal/vertical pattern searches, at each side of the pixel. - * Range: [0, 112]. - * - * In number of pixels, it's actually the double. So the maximum line length perfectly handled by, for example 16, is - * 64 (perfectly means that longer lines won't look as good, but are still antialiased). - * - * @type {Number} - */ - get orthogonalSearchSteps(): number; - /** - * Sets the maximum amount of steps performed in the horizontal/vertical pattern searches, at each side of the pixel. - * - * @deprecated Use orthogonalSearchSteps instead. - * @param {Number} value - The search steps. Range: [0, 112]. - */ - setOrthogonalSearchSteps(value: number): void; - set diagonalSearchSteps(arg: number); - /** - * The maximum steps performed in the diagonal pattern searches, at each side of the pixel. This search - * jumps one pixel at a time. Range: [0, 20]. - * - * On high-end machines this search is cheap (between 0.8x and 0.9x slower for 16 steps), but it can have a - * significant impact on older machines. - * - * @type {Number} - */ - get diagonalSearchSteps(): number; - /** - * Specifies the maximum steps performed in the diagonal pattern searches, at each side of the pixel. - * - * @deprecated Use diagonalSearchSteps instead. - * @param {Number} value - The search steps. Range: [0, 20]. - */ - setDiagonalSearchSteps(value: number): void; - set diagonalDetection(arg: boolean); - /** - * Indicates whether diagonal pattern detection is enabled. - * - * @type {Boolean} - */ - get diagonalDetection(): boolean; - /** - * Indicates whether diagonal pattern detection is enabled. - * - * @deprecated Use diagonalDetection instead. - * @return {Boolean} Whether diagonal pattern detection is enabled. - */ - isDiagonalDetectionEnabled(): boolean; - /** - * Enables or disables diagonal pattern detection. - * - * @deprecated Use diagonalDetection instead. - * @param {Boolean} value - Whether diagonal pattern detection should be enabled. - */ - setDiagonalDetectionEnabled(value: boolean): void; - set cornerRounding(arg: number); - /** - * Specifies how much sharp corners will be rounded. Range: [0, 100]. - * - * @type {Number} - */ - get cornerRounding(): number; - /** - * Specifies how much sharp corners will be rounded. - * - * @deprecated Use cornerRounding instead. - * @param {Number} value - The corner rounding amount. Range: [0, 100]. - */ - setCornerRounding(value: number): void; - set cornerDetection(arg: number); - /** - * Indicates whether corner detection is enabled. - * - * @type {Number} - */ - get cornerDetection(): number; - /** - * Indicates whether corner rounding is enabled. - * - * @deprecated Use cornerDetection instead. - * @return {Boolean} Whether corner rounding is enabled. - */ - isCornerRoundingEnabled(): boolean; - /** - * Enables or disables corner rounding. - * - * @deprecated Use cornerDetection instead. - * @param {Boolean} value - Whether corner rounding should be enabled. - */ - setCornerRoundingEnabled(value: boolean): void; - /** - * Sets the size of this object. - * - * @param {Number} width - The width. - * @param {Number} height - The height. - */ - setSize(width: number, height: number): void; - - } - - /** - * A Screen Space Ambient Occlusion (SSAO) shader material. - * - * @implements {Resizable} - */ - export class SSAOMaterial extends ShaderMaterial implements Resizable { - - /** - * Constructs a new SSAO material. - * - * @param {Camera} camera - A camera. - */ - constructor(camera: Camera); - /** - * The combined normal-depth buffer. - * - * @param {Texture} arg - The buffer. - */ - set normalDepthBuffer(arg: Texture); - /** - * Sets the combined normal-depth buffer. - * - * @deprecated Use normalDepthBuffer instead. - * @param {Texture} value - The buffer. - */ - setNormalDepthBuffer(value: Texture): void; - /** - * The normal buffer. - * - * @param {Texture} arg - The buffer. - */ - set normalBuffer(arg: Texture); - /** - * Sets the normal buffer. - * - * @deprecated Use normalBuffer instead. - * @param {Texture} value - The buffer. - */ - setNormalBuffer(value: Texture): void; - /** - * The depth buffer. - * - * @param {Texture} arg - The buffer. - */ - set depthBuffer(arg: Texture); - /** - * The depth packing strategy. - * - * @param {DepthPackingStrategies} arg - The depth packing strategy. - */ - set depthPacking(arg: DepthPackingStrategies); - /** - * Sets the depth buffer. - * - * @deprecated Use depthBuffer and depthPacking instead. - * @param {Texture} buffer - The depth texture. - * @param {DepthPackingStrategies} [depthPacking=BasicDepthPacking] - The depth packing strategy. - */ - setDepthBuffer( - buffer: Texture, - depthPacking?: DepthPackingStrategies - ): void; - - /** - * The noise texture. - * - * @param {Texture} arg - The texture. - */ - set noiseTexture(arg: Texture); - /** - * Sets the noise texture. - * - * @deprecated Use noiseTexture instead. - * @param {Texture} value - The texture. - */ - setNoiseTexture(value: Texture): void; - set samples(arg: number); - /** - * The sample count. - * - * @type {Number} - */ - get samples(): number; - /** - * Returns the amount of occlusion samples per pixel. - * - * @deprecated Use samples instead. - * @return {Number} The sample count. - */ - getSamples(): number; - /** - * Sets the amount of occlusion samples per pixel. - * - * @deprecated Use samples instead. - * @param {Number} value - The sample count. - */ - setSamples(value: number): void; - set rings(arg: number); - /** - * The sampling spiral ring count. - * - * @type {Number} - */ - get rings(): number; - /** - * Returns the amount of spiral turns in the occlusion sampling pattern. - * - * @deprecated Use rings instead. - * @return {Number} The radius. - */ - getRings(): number; - /** - * Sets the amount of spiral turns in the occlusion sampling pattern. - * - * @deprecated Use rings instead. - * @param {Number} value - The radius. - */ - setRings(value: number): void; - /** - * The intensity. - * - * @type {Number} - * @deprecated Use SSAOEffect.intensity instead. - */ - get intensity(): number; - set intensity(arg: number); - /** - * Returns the intensity. - * - * @deprecated Use intensity instead. - * @return {Number} The intensity. - */ - getIntensity(): number; - /** - * Sets the intensity. - * - * @deprecated Use intensity instead. - * @param {Number} value - The intensity. - */ - setIntensity(value: number): void; - set fade(arg: number); - /** - * The depth fade factor. - * - * @type {Number} - */ - get fade(): number; - /** - * Returns the depth fade factor. - * - * @deprecated Use fade instead. - * @return {Number} The fade factor. - */ - getFade(): number; - /** - * Sets the depth fade factor. - * - * @deprecated Use fade instead. - * @param {Number} value - The fade factor. - */ - setFade(value: number): void; - set bias(arg: number); - /** - * The depth bias. Range: [0.0, 1.0]. - * - * @type {Number} - */ - get bias(): number; - /** - * Returns the depth bias. - * - * @deprecated Use bias instead. - * @return {Number} The bias. - */ - getBias(): number; - /** - * Sets the depth bias. - * - * @deprecated Use bias instead. - * @param {Number} value - The bias. - */ - setBias(value: number): void; - set minRadiusScale(arg: number); - /** - * The minimum radius scale for distance scaling. Range: [0.0, 1.0]. - * - * @type {Number} - */ - get minRadiusScale(): number; - /** - * Returns the minimum radius scale for distance scaling. - * - * @deprecated Use minRadiusScale instead. - * @return {Number} The minimum radius scale. - */ - getMinRadiusScale(): number; - /** - * Sets the minimum radius scale for distance scaling. - * - * @deprecated Use minRadiusScale instead. - * @param {Number} value - The minimum radius scale. - */ - setMinRadiusScale(value: number): void; - set radius(arg: number); - /** - * The occlusion sampling radius. Range: [0.0, 1.0]. - * - * @type {Number} - */ - get radius(): number; - /** - * Returns the occlusion sampling radius. - * - * @deprecated Use radius instead. - * @return {Number} The radius. - */ - getRadius(): number; - /** - * Sets the occlusion sampling radius. - * - * @deprecated Use radius instead. - * @param {Number} value - The radius. Range [1e-6, 1.0]. - */ - setRadius(value: number): void; - set distanceScaling(arg: boolean); - /** - * Indicates whether distance-based radius scaling is enabled. - * - * @type {Boolean} - */ - get distanceScaling(): boolean; - /** - * Indicates whether distance-based radius scaling is enabled. - * - * @deprecated Use distanceScaling instead. - * @return {Boolean} Whether distance scaling is enabled. - */ - isDistanceScalingEnabled(): boolean; - /** - * Enables or disables distance-based radius scaling. - * - * @deprecated Use distanceScaling instead. - * @param {Boolean} value - Whether distance scaling should be enabled. - */ - setDistanceScalingEnabled(value: boolean): void; - set distanceThreshold(arg: number); - /** - * The occlusion distance threshold. Range: [0.0, 1.0]. - * - * @type {Number} - */ - get distanceThreshold(): number; - - /** - * The occlusion distance falloff. - * The occlusion distance threshold in world units. - * - * @type {Number} - */ - - get worldDistanceThreshold(): number; - set worldDistanceThreshold(value: number); - - set distanceFalloff(arg: number); - /** - * The occlusion distance falloff. Range: [0.0, 1.0]. - * - * @type {Number} - */ - get distanceFalloff(): number; - - /** - * The occlusion distance falloff in world units. - * - * @type {Number} - */ - - get worldDistanceFalloff(): number; - set worldDistanceFalloff(value: number); - - /** - * Sets the occlusion distance cutoff. - * - * @deprecated Use distanceThreshold and distanceFalloff instead. - * @param {Number} threshold - The distance threshold. Range [0.0, 1.0]. - * @param {Number} falloff - The falloff. Range [0.0, 1.0]. - */ - setDistanceCutoff(threshold: number, falloff: number): void; - set proximityThreshold(arg: number); - /** - * The occlusion proximity threshold. Range: [0.0, 1.0]. - * - * @type {Number} - */ - get proximityThreshold(): number; - /** - * The occlusion proximity threshold in world units. - * - * @type {Number} - */ - get worldProximityThreshold(): number; - set worldProximityThreshold(value: number); - - set proximityFalloff(arg: number); - /** - * The occlusion proximity falloff. Range: [0.0, 1.0]. - * - * @type {Number} - */ - get proximityFalloff(): number; - - /** - * The occlusion proximity falloff in world units. - * - * @type {Number} - */ - - get worldProximityFalloff(): number; - set worldProximityFalloff(value: number); - - /** - * Sets the occlusion proximity cutoff. - * - * @deprecated Use proximityThreshold and proximityFalloff instead. - * @param {Number} threshold - The range threshold. Range [0.0, 1.0]. - * @param {Number} falloff - The falloff. Range [0.0, 1.0]. - */ - setProximityCutoff(threshold: number, falloff: number): void; - /** - * Sets the texel size. - * - * @deprecated Use setSize() instead. - * @param {Number} x - The texel width. - * @param {Number} y - The texel height. - */ - setTexelSize(x: number, y: number): void; - /** - * Adopts the settings of the given camera. - * - * @param {Camera} camera - A camera. - */ - adoptCameraSettings(camera: Camera): void; - /** - * Sets the size of this object. - * - * @param {Number} width - The width. - * @param {Number} height - The height. - */ - setSize(width: number, height: number): void; - - } - - /** - * A resolution. - */ - export class Resolution extends EventDispatcher { - - /** - * An auto sizing constant. - * - * Can be used to automatically calculate the width or height based on the original aspect ratio. - * - * @type {Number} - */ - static get AUTO_SIZE(): number; - /** - * Constructs a new resolution. - * - * TODO Remove resizable param. - * @param {Resizable} resizable - A resizable object. - * @param {Number} [width=Resolution.AUTO_SIZE] - The preferred width. - * @param {Number} [height=Resolution.AUTO_SIZE] - The preferred height. - * @param {Number} [scale=1.0] - A resolution scale. - */ - constructor( - resizable: Resizable, - width?: number, - height?: number, - scale?: number - ); - - /** - * A resizable object. - * - * @type {Resizable} - * @deprecated Use an event listener for "change" events instead. - */ - resizable: Resizable; - /** - * The preferred resolution. - * - * @type {Vector2} - * @deprecated Added for backward-compatibility. - */ - target: Vector2; - set width(arg: number); - /** - * The effective width. - * - * If the preferred width and height are set to {@link Resizer.AUTO_SIZE}, the base width will be returned. - * - * @type {Number} - */ - get width(): number; - set preferredWidth(arg: number); - /** - * The preferred width. - * - * @type {Number} - */ - get preferredWidth(): number; - set height(arg: number); - /** - * The effective height. - * - * If the preferred width and height are set to {@link Resizer.AUTO_SIZE}, the base height will be returned. - * - * @type {Number} - */ - get height(): number; - set preferredHeight(arg: number); - /** - * The preferred height. - * - * @type {Number} - */ - get preferredHeight(): number; - /** - * Returns the effective width. - * - * If the preferred width and height are set to {@link Resizer.AUTO_SIZE}, the base width will be returned. - * - * @deprecated Use width instead. - * @return {Number} The effective width. - */ - getWidth(): number; - /** - * Returns the effective height. - * - * If the preferred width and height are set to {@link Resizer.AUTO_SIZE}, the base height will be returned. - * - * @deprecated Use height instead. - * @return {Number} The effective height. - */ - getHeight(): number; - set scale(arg: number); - /** - * The resolution scale. - * - * @type {Number} - */ - get scale(): number; - /** - * Returns the current resolution scale. - * - * @deprecated Use scale instead. - * @return {Number} The scale. - */ - getScale(): number; - /** - * Sets the resolution scale. - * - * Also sets the preferred resolution to {@link Resizer.AUTO_SIZE}. - * - * @deprecated Use scale instead. - * @param {Number} value - The scale. - */ - setScale(value: number): void; - set baseWidth(arg: number); - /** - * The base width. - * - * @type {Number} - */ - get baseWidth(): number; - /** - * Returns the base width. - * - * @deprecated Use baseWidth instead. - * @return {Number} The base width. - */ - getBaseWidth(): number; - /** - * Sets the base width. - * - * @deprecated Use baseWidth instead. - * @param {Number} value - The width. - */ - setBaseWidth(value: number): void; - set baseHeight(arg: number); - /** - * The base height. - * - * @type {Number} - */ - get baseHeight(): number; - /** - * Returns the base height. - * - * @deprecated Use baseHeight instead. - * @return {Number} The base height. - */ - getBaseHeight(): number; - /** - * Sets the base height. - * - * @deprecated Use baseHeight instead. - * @param {Number} value - The height. - */ - setBaseHeight(value: number): void; - /** - * Sets the base size. - * - * @param {Number} width - The width. - * @param {Number} height - The height. - */ - setBaseSize(width: number, height: number): void; - /** - * Returns the preferred width. - * - * @deprecated Use preferredWidth instead. - * @return {Number} The preferred width. - */ - getPreferredWidth(): number; - /** - * Sets the preferred width. - * - * Use {@link Resizer.AUTO_SIZE} to automatically calculate the width based on the height and aspect ratio. - * - * @deprecated Use preferredWidth instead. - * @param {Number} value - The width. - */ - setPreferredWidth(value: number): void; - /** - * Returns the preferred height. - * - * @deprecated Use preferredHeight instead. - * @return {Number} The preferred height. - */ - getPreferredHeight(): number; - /** - * Sets the preferred height. - * - * Use {@link Resizer.AUTO_SIZE} to automatically calculate the height based on the width and aspect ratio. - * - * @deprecated Use preferredHeight instead. - * @param {Number} value - The height. - */ - setPreferredHeight(value: number): void; - /** - * Sets the preferred size. - * - * @param {Number} width - The width. - * @param {Number} height - The height. - */ - setPreferredSize(width: number, height: number): void; - /** - * Copies the given resolution. - * - * @param {Resolution} resolution - The resolution. - */ - copy(resolution: Resolution): void; - - } - - export type Resizer = Resolution; - - /** - * An abstract pass. - * - * Fullscreen passes use a shared fullscreen triangle: - * https://michaldrobot.com/2014/04/01/gcn-execution-patterns-in-full-screen-passes/ - * - * @implements {Initializable} - * @implements {Resizable} - * @implements {Disposable} - */ - export class Pass implements Initializable, Resizable, Disposable { - - /** - * Constructs a new pass. - * - * @param {String} [name] - The name of this pass. Does not have to be unique. - * @param {Scene} [scene] - The scene to render. The default scene contains a single mesh that fills the screen. - * @param {Camera} [camera] - A camera. Fullscreen effect passes don't require a camera. - */ - constructor(name?: string, scene?: Scene, camera?: Camera); - /** - * The name of this pass. - * - * @type {String} - */ - name: string; - /** - * The renderer. - * - * @deprecated - * @type {WebGLRenderer} - * @protected - */ - protected renderer: WebGLRenderer; - /** - * The scene to render. - * - * @type {Scene} - * @protected - */ - protected scene: Scene; - /** - * The camera. - * - * @type {Camera} - * @protected - */ - protected camera: Camera; - /** - * Only relevant for subclassing. - * - * Indicates whether the {@link EffectComposer} should swap the frame buffers after this pass has finished - * rendering. Set this to `false` if this pass doesn't render to the output buffer or the screen. Otherwise, the - * contents of the input buffer will be lost. - * - * @type {Boolean} - */ - needsSwap: boolean; - /** - * Only relevant for subclassing. - * - * Indicates whether the {@link EffectComposer} should prepare a depth texture for this pass. - * Set this to `true` if this pass relies on depth information from a preceding {@link RenderPass}. - * - * @type {Boolean} - */ - needsDepthTexture: boolean; - /** - * Indicates whether this pass is enabled. - * - * @type {Boolean} - */ - enabled: boolean; - /** - * Sets the render to screen flag. - * - * If this flag is changed, the fullscreen material will be updated as well. - * - * @type {Boolean} - */ - set renderToScreen(arg: boolean); - /** - * Indicates whether this pass should render to screen. - * - * @type {Boolean} - */ - get renderToScreen(): boolean; - /** - * Sets the main scene. - * - * @type {Scene} - */ - set mainScene(arg: Scene); - /** - * Sets the main camera. - * - * @type {Camera} - */ - set mainCamera(arg: Camera); - /** - * Sets the renderer - * - * @deprecated - * @param {WebGLRenderer} renderer - The renderer. - */ - setRenderer(renderer: WebGLRenderer): void; - /** - * Indicates whether this pass is enabled. - * - * @deprecated Use enabled instead. - * @return {Boolean} Whether this pass is enabled. - */ - isEnabled(): boolean; - /** - * Enables or disables this pass. - * - * @deprecated Use enabled instead. - * @param {Boolean} value - Whether the pass should be enabled. - */ - setEnabled(value: boolean): void; - set fullscreenMaterial(arg: Material); - /** - * The fullscreen material. - * - * @type {Material} - */ - get fullscreenMaterial(): Material; - /** - * Returns the current fullscreen material. - * - * @deprecated Use fullscreenMaterial instead. - * @return {Material} The current fullscreen material, or null if there is none. - */ - getFullscreenMaterial(): Material; - /** - * Sets the fullscreen material. - * - * @deprecated Use fullscreenMaterial instead. - * @protected - * @param {Material} value - A fullscreen material. - */ - protected setFullscreenMaterial(value: Material): void; - /** - * Returns the current depth texture. - * - * @return {Texture} The current depth texture, or null if there is none. - */ - getDepthTexture(): Texture; - /** - * Sets the depth texture. - * - * This method will be called automatically by the {@link EffectComposer}. - * You may override this method if your pass relies on the depth information of a preceding {@link RenderPass}. - * - * @param {Texture} depthTexture - A depth texture. - * @param {DepthPackingStrategies} [depthPacking=BasicDepthPacking] - The depth packing. - */ - setDepthTexture( - depthTexture: Texture, - depthPacking?: DepthPackingStrategies - ): void; - - /** - * Renders this pass. - * - * This is an abstract method that must be overridden. - * - * @abstract - * @throws {Error} An error is thrown if the method is not overridden. - * @param {WebGLRenderer} renderer - The renderer. - * @param {WebGLRenderTarget} inputBuffer - A frame buffer that contains the result of the previous pass. - * @param {WebGLRenderTarget} outputBuffer - A frame buffer that serves as the output render target unless this pass renders to screen. - * @param {Number} [deltaTime] - The time between the last frame and the current one in seconds. - * @param {Boolean} [stencilTest] - Indicates whether a stencil mask is active. - */ - render( - renderer: WebGLRenderer, - inputBuffer: WebGLRenderTarget | null, - outputBuffer: WebGLRenderTarget | null, - deltaTime?: number, - stencilTest?: boolean - ): void; - - /** - * Sets the size. - * - * You may override this method if you want to be informed about the size of the backbuffer/canvas. - * This method is called before {@link initialize} and every time the size of the {@link EffectComposer} changes. - * - * @param {Number} width - The width. - * @param {Number} height - The height. - */ - setSize(width: number, height: number): void; - /** - * Performs initialization tasks. - * - * This method is called when this pass is added to an {@link EffectComposer}. - * - * @param {WebGLRenderer} renderer - The renderer. - * @param {Boolean} alpha - Whether the renderer uses the alpha channel or not. - * @param {Number} frameBufferType - The type of the main frame buffers. - */ - initialize( - renderer: WebGLRenderer, - alpha: boolean, - frameBufferType: number - ): void; - - /** - * Performs a shallow search for disposable properties and deletes them. - * - * The {@link EffectComposer} calls this method when it is being destroyed. You can use it independently to free - * memory when you're certain that you don't need this pass anymore. - */ - dispose(): void; - - } - - /** - * A pass that renders an adaptive luminance map. - */ - export class AdaptiveLuminancePass extends Pass { - - /** - * Constructs a new adaptive luminance pass. - * - * @param {Texture} luminanceBuffer - A buffer that contains the current scene luminance. - * @param {Object} [options] - The options. - * @param {Number} [options.minLuminance=0.01] - The minimum luminance. - * @param {Number} [options.adaptationRate=1.0] - The luminance adaptation rate. - */ - constructor( - luminanceBuffer: Texture, - { - minLuminance, - adaptationRate - }?: { - minLuminance?: number; - adaptationRate?: number; - } - ); - - /** - * The adaptive luminance texture. - * - * @type {Texture} - */ - get texture(): Texture; - /** - * Returns the adaptive 1x1 luminance texture. - * - * @deprecated Use texture instead. - * @return {Texture} The texture. - */ - getTexture(): Texture; - /** - * Sets the 1x1 mipmap level. - * - * This level is used to identify the smallest mipmap of the main luminance texture which contains the downsampled - * average scene luminance. - * - * @type {Number} - * @deprecated Use fullscreenMaterial.mipLevel1x1 instead. - */ - set mipLevel1x1(arg: number); - /** - * @type {Number} - * @deprecated Use fullscreenMaterial.adaptationRate instead. - */ - set adaptationRate(arg: number); - /** - * The luminance adaptation rate. - * - * @type {Number} - * @deprecated Use fullscreenMaterial.adaptationRate instead. - */ - get adaptationRate(): number; - /** - * Renders the scene normals. - * - * @param {WebGLRenderer} renderer - The renderer. - * @param {WebGLRenderTarget} inputBuffer - A frame buffer that contains the result of the previous pass. - * @param {WebGLRenderTarget} outputBuffer - A frame buffer that serves as the output render target unless this pass renders to screen. - * @param {Number} [deltaTime] - The time between the last frame and the current one in seconds. - * @param {Boolean} [stencilTest] - Indicates whether a stencil mask is active. - */ - render( - renderer: WebGLRenderer, - inputBuffer: WebGLRenderTarget | null, - outputBuffer: WebGLRenderTarget | null, - deltaTime?: number, - stencilTest?: boolean - ): void; - - } - - /** - * A Kawase blur pass. - */ - export class KawaseBlurPass extends Pass { - - /** - * An auto sizing flag. - * - * @type {Number} - * @deprecated Use {@link Resolution.AUTO_SIZE} instead. - */ - static get AUTO_SIZE(): number; - /** - * Constructs a new Kawase blur pass. - * - * @param {Object} [options] - The options. - * @param {Number} [options.resolutionScale=0.5] - The resolution scale. - * @param {Number} [options.resolutionX=Resolution.AUTO_SIZE] - The horizontal resolution. - * @param {Number} [options.resolutionY=Resolution.AUTO_SIZE] - The vertical resolution. - * @param {Number} [options.width=Resolution.AUTO_SIZE] - Deprecated. Use resolutionX instead. - * @param {Number} [options.height=Resolution.AUTO_SIZE] - Deprecated. Use resolutionY instead. - * @param {KernelSize} [options.kernelSize=KernelSize.MEDIUM] - The blur kernel size. - */ - constructor({ - resolutionScale, - resolutionX, - resolutionY, - width, - height, - kernelSize - }?: { - resolutionScale?: number; - resolutionX?: number; - resolutionY?: number; - width?: number; - height?: number; - kernelSize?: KernelSize; - }); - - resolution: Resolution; - /** - * The blur material. - * - * @type {KawaseBlurMaterial} - */ - blurMaterial: KawaseBlurMaterial; - /** - * Indicates whether dithering is enabled. - * - * @type {Boolean} - * @deprecated - */ - dithering: boolean; - /** - * The kernel size. - * - * @type {KernelSize} - */ - kernelSize: KernelSize; - /** - * Returns the resolution settings. - * - * @deprecated Use resolution instead. - * @return {Resolution} The resolution. - */ - getResolution(): Resolution; - /** - * Sets the render width. - * - * @type {Number} - * @deprecated Use resolution.preferredWidth instead. - */ - set width(arg: number); - /** - * The current width of the internal render targets. - * - * @type {Number} - * @deprecated Use resolution.width instead. - */ - get width(): number; - /** - * Sets the render height. - * - * @type {Number} - * @deprecated Use resolution.preferredHeight instead. - */ - set height(arg: number); - /** - * The current height of the internal render targets. - * - * @type {Number} - * @deprecated Use resolution.height instead. - */ - get height(): number; - set scale(arg: number); - /** - * The current blur scale. - * - * @type {Number} - * @deprecated Use blurMaterial.scale instead. - */ - get scale(): number; - /** - * Returns the current blur scale. - * - * @deprecated Use blurMaterial.scale instead. - * @return {Number} The scale. - */ - getScale(): number; - /** - * Sets the blur scale. - * - * This value influences the overall blur strength and should not be greater than 1. For larger blurs please increase - * the kernel size via {@link setKernelSize}! - * - * Note that the blur strength is closely tied to the resolution. For a smooth transition from no blur to full blur, - * set the width or the height to a high enough value. - * - * @deprecated Use blurMaterial.scale instead. - * @param {Number} value - The scale. - */ - setScale(value: number): void; - /** - * Returns the kernel size. - * - * @deprecated Use kernelSize instead. - * @return {KernelSize} The kernel size. - */ - getKernelSize(): KernelSize; - /** - * Sets the kernel size. - * - * Larger kernels require more processing power but scale well with larger render resolutions. - * - * @deprecated Use kernelSize instead. - * @param {KernelSize} value - The kernel size. - */ - setKernelSize(value: KernelSize): void; - /** - * Returns the current resolution scale. - * - * @return {Number} The resolution scale. - * @deprecated Use resolution instead. - */ - getResolutionScale(): number; - /** - * Sets the resolution scale. - * - * @param {Number} scale - The new resolution scale. - * @deprecated Use resolution instead. - */ - setResolutionScale(scale: number): void; - /** - * Blurs the input buffer and writes the result to the output buffer. The input buffer remains intact, unless it's - * also used as the output buffer. - * - * @param {WebGLRenderer} renderer - The renderer. - * @param {WebGLRenderTarget} inputBuffer - A frame buffer that contains the result of the previous pass. - * @param {WebGLRenderTarget} outputBuffer - A frame buffer that serves as the output render target unless this pass renders to screen. - * @param {Number} [deltaTime] - The time between the last frame and the current one in seconds. - * @param {Boolean} [stencilTest] - Indicates whether a stencil mask is active. - */ - render( - renderer: WebGLRenderer, - inputBuffer: WebGLRenderTarget | null, - outputBuffer: WebGLRenderTarget | null, - deltaTime?: number, - stencilTest?: boolean - ): void; - - } - - export type BlurPass = KawaseBlurPass; - - /** - * A pass that disables the stencil test. - */ - export class ClearMaskPass extends Pass { - - /** - * Constructs a new clear mask pass. - */ - constructor(); - - /** - * Disables the global stencil test. - * @param renderer - The renderer. - * @param inputBuffer - A frame buffer that contains the result of the previous pass. - * @param outputBuffer - A frame buffer that serves as the output render target unless this pass renders to screen. - * @param [deltaTime] - The time between the last frame and the current one in seconds. - * @param [stencilTest] - Indicates whether a stencil mask is active. - */ - render( - renderer: WebGLRenderer, - inputBuffer: WebGLRenderTarget | null, - outputBuffer: WebGLRenderTarget | null, - deltaTime?: number, - stencilTest?: boolean - ): void; - - } - - /** - * A pass that clears the input buffer or the screen. - */ - export class ClearPass extends Pass { - - /** - * Constructs a new clear pass. - * - * @param {Boolean} [color=true] - Determines whether the color buffer should be cleared. - * @param {Boolean} [depth=true] - Determines whether the depth buffer should be cleared. - * @param {Boolean} [stencil=false] - Determines whether the stencil buffer should be cleared. - */ - constructor(color?: boolean, depth?: boolean, stencil?: boolean); - /** - * Indicates whether the color buffer should be cleared. - * - * @type {Boolean} - * @deprecated Use setClearFlags() instead. - */ - color: boolean; - /** - * Indicates whether the depth buffer should be cleared. - * - * @type {Boolean} - * @deprecated Use setClearFlags() instead. - */ - depth: boolean; - /** - * Indicates whether the stencil buffer should be cleared. - * - * @type {Boolean} - * @deprecated Use setClearFlags() instead. - */ - stencil: boolean; - /** - * An override clear color. Default is null. - * - * @type {Color} - */ - overrideClearColor: Color; - /** - * An override clear alpha. Default is -1. - * - * @type {Number} - */ - overrideClearAlpha: number; - /** - * Sets the clear flags. - * - * @param {Boolean} color - Whether the color buffer should be cleared. - * @param {Boolean} depth - Whether the depth buffer should be cleared. - * @param {Boolean} stencil - Whether the stencil buffer should be cleared. - */ - setClearFlags(color: boolean, depth: boolean, stencil: boolean): void; - /** - * Returns the override clear color. Default is null. - * - * @deprecated Use overrideClearColor instead. - * @return {Color} The clear color. - */ - getOverrideClearColor(): Color; - /** - * Sets the override clear color. - * - * @deprecated Use overrideClearColor instead. - * @param {Color} value - The clear color. - */ - setOverrideClearColor(value: Color): void; - /** - * Returns the override clear alpha. Default is -1. - * - * @deprecated Use overrideClearAlpha instead. - * @return {Number} The clear alpha. - */ - getOverrideClearAlpha(): number; - /** - * Sets the override clear alpha. - * - * @deprecated Use overrideClearAlpha instead. - * @param {Number} value - The clear alpha. - */ - setOverrideClearAlpha(value: number): void; - /** - * Clears the input buffer or the screen. - * @param renderer - The renderer. - * @param inputBuffer - A frame buffer that contains the result of the previous pass. - * @param outputBuffer - A frame buffer that serves as the output render target unless this pass renders to screen. - * @param [deltaTime] - The time between the last frame and the current one in seconds. - * @param [stencilTest] - Indicates whether a stencil mask is active. - */ - render( - renderer: WebGLRenderer, - inputBuffer: WebGLRenderTarget | null, - outputBuffer: WebGLRenderTarget | null, - deltaTime?: number, - stencilTest?: boolean - ): void; - - } - - /** - * A pass that copies the contents of an input buffer to another render target. - */ - export class CopyPass extends Pass { - - /** - * Constructs a new save pass. - * - * @param {WebGLRenderTarget} [renderTarget] - A render target. - * @param {Boolean} [autoResize=true] - Whether the render target size should be updated automatically. - */ - constructor(renderTarget?: WebGLRenderTarget, autoResize?: boolean); - /** - * Enables or disables auto resizing of the render target. - * - * @type {Boolean} - */ - autoResize: boolean; - set resize(arg: boolean); - /** - * Enables or disables auto resizing of the render target. - * - * @deprecated Use autoResize instead. - * @type {Boolean} - */ - get resize(): boolean; - /** - * The output texture. - * - * @type {Texture} - */ - get texture(): Texture; - /** - * Returns the output texture. - * - * @deprecated Use texture instead. - * @return {Texture} The texture. - */ - getTexture(): Texture; - /** - * Enables or disables auto resizing of the render target. - * - * @deprecated Use autoResize instead. - * @param {Boolean} value - Whether the render target size should be updated automatically. - */ - setAutoResizeEnabled(value: boolean): void; - /** - * Saves the input buffer. - * - * @param {WebGLRenderer} renderer - The renderer. - * @param {WebGLRenderTarget} inputBuffer - A frame buffer that contains the result of the previous pass. - * @param {WebGLRenderTarget} outputBuffer - A frame buffer that serves as the output render target unless this pass renders to screen. - * @param {Number} [deltaTime] - The time between the last frame and the current one in seconds. - * @param {Boolean} [stencilTest] - Indicates whether a stencil mask is active. - */ - render( - renderer: WebGLRenderer, - inputBuffer: WebGLRenderTarget | null, - outputBuffer: WebGLRenderTarget | null, - deltaTime?: number, - stencilTest?: boolean - ): void; - - } - - export type SavePass = CopyPass; - - /** - * A pass that copies depth into a render target. - */ - export class DepthCopyPass extends Pass { - - /** - * Constructs a new depth save pass. - * - * @param {Object} [options] - The options. - * @param {DepthPackingStrategies} [options.depthPacking=RGBADepthPacking] - The output depth packing. - */ - constructor({ depthPacking }?: { depthPacking?: DepthPackingStrategies }); - /** - * The output depth texture. - * - * @type {Texture} - */ - get texture(): Texture; - /** - * Returns the output depth texture. - * - * @deprecated Use texture instead. - * @return {Texture} The texture. - */ - getTexture(): Texture; - /** - * The output depth packing. - * - * @type {DepthPackingStrategies} - */ - get depthPacking(): DepthPackingStrategies; - /** - * Returns the output depth packing. - * - * @deprecated Use depthPacking instead. - * @return {DepthPackingStrategies} The depth packing. - */ - getDepthPacking(): DepthPackingStrategies; - /** - * Copies depth from a depth texture. - * - * @param {WebGLRenderer} renderer - The renderer. - * @param {WebGLRenderTarget} inputBuffer - A frame buffer that contains the result of the previous pass. - * @param {WebGLRenderTarget} outputBuffer - A frame buffer that serves as the output render target unless this pass renders to screen. - * @param {Number} [deltaTime] - The time between the last frame and the current one in seconds. - * @param {Boolean} [stencilTest] - Indicates whether a stencil mask is active. - */ - render( - renderer: WebGLRenderer, - inputBuffer: WebGLRenderTarget | null, - outputBuffer: WebGLRenderTarget | null, - deltaTime?: number, - stencilTest?: boolean - ): void; - - } - - /** - * A pass that downsamples the scene depth by picking the most representative depth in 2x2 texel neighborhoods. If a - * normal buffer is provided, the corresponding normals will be stored as well. - * - * This pass requires WebGL 2. - */ - export class DepthDownsamplingPass extends Pass { - - /** - * Constructs a new depth downsampling pass. - * - * @param {Object} [options] - The options. - * @param {Texture} [options.normalBuffer=null] - A texture that contains view space normals. See {@link NormalPass}. - * @param {Number} [options.resolutionScale=0.5] - The resolution scale. - * @param {Number} [options.width=Resolution.AUTO_SIZE] - The render width. - * @param {Number} [options.height=Resolution.AUTO_SIZE] - The render height. - */ - constructor({ - normalBuffer, - resolutionScale, - width, - height - }?: { - normalBuffer?: Texture; - resolutionScale?: number; - width?: number; - height?: number; - }); - - resolution: Resolution; - /** - * The normal(RGB) + depth(A) texture. - * - * @type {Texture} - */ - get texture(): Texture; - /** - * Returns the normal(RGB) + depth(A) texture. - * - * @deprecated Use texture instead. - * @return {Texture} The texture. - */ - getTexture(): Texture; - /** - * Returns the resolution settings. - * - * @deprecated Use resolution instead. - * @return {Resolution} The resolution. - */ - getResolution(): Resolution; - /** - * Downsamples depth and scene normals. - * - * @param {WebGLRenderer} renderer - The renderer. - * @param {WebGLRenderTarget} inputBuffer - A frame buffer that contains the result of the previous pass. - * @param {WebGLRenderTarget} outputBuffer - A frame buffer that serves as the output render target unless this pass renders to screen. - * @param {Number} [deltaTime] - The time between the last frame and the current one in seconds. - * @param {Boolean} [stencilTest] - Indicates whether a stencil mask is active. - */ - render( - renderer: WebGLRenderer, - inputBuffer: WebGLRenderTarget | null, - outputBuffer: WebGLRenderTarget | null, - deltaTime?: number, - stencilTest?: boolean - ): void; - - } - - /** - * A pass that renders a given scene into the input buffer or to screen. - * - * This pass uses a {@link ClearPass} to clear the target buffer. - */ - export class RenderPass extends Pass { - - /** - * Constructs a new render pass. - * - * @param {Scene} scene - The scene to render. - * @param {Camera} camera - The camera to use to render the scene. - * @param {Material} [overrideMaterial=null] - An override material. - */ - constructor(scene?: Scene, camera?: Camera, overrideMaterial?: Material); - /** - * A clear pass. - * - * @type {ClearPass} - */ - clearPass: ClearPass; - /** - * Indicates whether the scene background should be ignored. - * - * @type {Boolean} - */ - ignoreBackground: boolean; - /** - * Indicates whether the shadow map auto update should be skipped. - * - * @type {Boolean} - */ - skipShadowMapUpdate: boolean; - /** - * A selection of objects to render. - * - * @type {Selection} - */ - selection: Selection; - set overrideMaterial(arg: Material); - /** - * The current override material. - * - * @type {Material} - */ - get overrideMaterial(): Material; - /** - * Returns the current override material. - * - * @deprecated Use overrideMaterial instead. - * @return {Material} The material. - */ - getOverrideMaterial(): Material; - /** - * Sets the override material. - * - * @deprecated Use overrideMaterial instead. - * @param {Material} value - The material. - */ - setOverrideMaterial(value: Material): void; - set clear(arg: boolean); - /** - * Indicates whether the target buffer should be cleared before rendering. - * - * @type {Boolean} - * @deprecated Use clearPass.enabled instead. - */ - get clear(): boolean; - /** - * Returns the selection. Default is `null` (no restriction). - * - * @deprecated Use selection instead. - * @return {Selection} The selection. - */ - getSelection(): Selection; - /** - * Sets the selection. Set to `null` to disable. - * - * @deprecated Use selection instead. - * @param {Selection} value - The selection. - */ - setSelection(value: Selection): void; - /** - * Indicates whether the scene background is disabled. - * - * @deprecated Use ignoreBackground instead. - * @return {Boolean} Whether the scene background is disabled. - */ - isBackgroundDisabled(): boolean; - /** - * Enables or disables the scene background. - * - * @deprecated Use ignoreBackground instead. - * @param {Boolean} value - Whether the scene background should be disabled. - */ - setBackgroundDisabled(value: boolean): void; - /** - * Indicates whether the shadow map auto update is disabled. - * - * @deprecated Use skipShadowMapUpdate instead. - * @return {Boolean} Whether the shadow map update is disabled. - */ - isShadowMapDisabled(): boolean; - /** - * Enables or disables the shadow map auto update. - * - * @deprecated Use skipShadowMapUpdate instead. - * @param {Boolean} value - Whether the shadow map auto update should be disabled. - */ - setShadowMapDisabled(value: boolean): void; - /** - * Returns the clear pass. - * - * @deprecated Use clearPass.enabled instead. - * @return {ClearPass} The clear pass. - */ - getClearPass(): ClearPass; - /** - * Renders the scene. - * @param renderer - The renderer. - * @param inputBuffer - A frame buffer that contains the result of the previous pass. - * @param outputBuffer - A frame buffer that serves as the output render target unless this pass renders to screen. - * @param [deltaTime] - The time between the last frame and the current one in seconds. - * @param [stencilTest] - Indicates whether a stencil mask is active. - */ - render( - renderer: WebGLRenderer, - inputBuffer: WebGLRenderTarget | null, - outputBuffer: WebGLRenderTarget | null, - deltaTime?: number, - stencilTest?: boolean - ): void; - - } - - /** - * A pass that renders depth into an RGBA buffer. - */ - export class DepthPass extends Pass { - - /** - * Constructs a new depth pass. - * - * @param {Scene} scene - The scene to render. - * @param {Camera} camera - The camera to use to render the scene. - * @param {Object} [options] - The options. - * @param {Number} [options.resolutionScale=1.0] - The resolution scale. - * @param {Number} [options.resolutionX=Resolution.AUTO_SIZE] - The horizontal resolution. - * @param {Number} [options.resolutionY=Resolution.AUTO_SIZE] - The vertical resolution. - * @param {Number} [options.width=Resolution.AUTO_SIZE] - Deprecated. Use resolutionX instead. - * @param {Number} [options.height=Resolution.AUTO_SIZE] - Deprecated. Use resolutionY instead. - * @param {WebGLRenderTarget} [options.renderTarget] - A custom render target. - */ - constructor( - scene?: Scene, - camera?: Camera, - { - resolutionScale, - resolutionX, - resolutionY, - width, - height, - renderTarget - }?: { - resolutionScale?: number; - resolutionX?: number; - resolutionY?: number; - width?: number; - height?: number; - renderTarget?: WebGLRenderTarget; - } - ); - - resolution: Resolution; - /** - * The depth texture. - * - * @type {Texture} - */ - get texture(): Texture; - /** - * Returns the depth texture. - * - * @deprecated Use texture instead. - * @return {Texture} The texture. - */ - getTexture(): Texture; - /** - * Returns the resolution settings. - * - * @deprecated Use resolution instead. - * @return {Resolution} The resolution. - */ - getResolution(): Resolution; - /** - * Returns the current resolution scale. - * - * @return {Number} The resolution scale. - * @deprecated Use resolution instead. - */ - getResolutionScale(): number; - /** - * Sets the resolution scale. - * - * @param {Number} scale - The new resolution scale. - * @deprecated Use resolution instead. - */ - setResolutionScale(scale: number): void; - /** - * Renders the scene depth. - * - * @param {WebGLRenderer} renderer - The renderer. - * @param {WebGLRenderTarget} inputBuffer - A frame buffer that contains the result of the previous pass. - * @param {WebGLRenderTarget} outputBuffer - A frame buffer that serves as the output render target unless this pass renders to screen. - * @param {Number} [deltaTime] - The time between the last frame and the current one in seconds. - * @param {Boolean} [stencilTest] - Indicates whether a stencil mask is active. - */ - render( - renderer: WebGLRenderer, - inputBuffer: WebGLRenderTarget | null, - outputBuffer: WebGLRenderTarget | null, - deltaTime?: number, - stencilTest?: boolean - ): void; - - } - - /** - * A depth picking pass. - */ - export class DepthPickingPass extends DepthCopyPass { - - /** - * Constructs a new depth picking pass. - * - * @param {Object} [options] - The options. - * @param {DepthPackingStrategies} [options.depthPacking=RGBADepthPacking] - The depth packing. - * @param {Number} [options.mode=DepthCopyMode.SINGLE] - The depth copy mode. - */ - constructor({ - depthPacking, - mode - }?: { - depthPacking?: DepthPackingStrategies; - mode?: number; - }); - - /** - * Reads depth at a specific screen position. - * - * Only one depth value can be picked per frame. Calling this method multiple times per frame will overwrite the - * picking coordinates. Unresolved promises will be abandoned. - * - * @example - * const ndc = new Vector3(); - * const clientRect = myViewport.getBoundingClientRect(); - * const clientX = pointerEvent.clientX - clientRect.left; - * const clientY = pointerEvent.clientY - clientRect.top; - * ndc.x = (clientX / myViewport.clientWidth) * 2.0 - 1.0; - * ndc.y = -(clientY / myViewport.clientHeight) * 2.0 + 1.0; - * const depth = await depthPickingPass.readDepth(ndc); - * ndc.z = depth * 2.0 - 1.0; - * - * const worldPosition = ndc.unproject(camera); - * - * @param {Vector2|Vector3} ndc - Normalized device coordinates. Only X and Y are relevant. - * @return {Promise} A promise that returns the depth on the next frame. - */ - readDepth(ndc: Vector2 | Vector3): Promise; - /** - * Copies depth and resolves depth picking promises. - * - * @param {WebGLRenderer} renderer - The renderer. - * @param {WebGLRenderTarget} inputBuffer - A frame buffer that contains the result of the previous pass. - * @param {WebGLRenderTarget} outputBuffer - A frame buffer that serves as the output render target unless this pass renders to screen. - * @param {Number} [deltaTime] - The time between the last frame and the current one in seconds. - * @param {Boolean} [stencilTest] - Indicates whether a stencil mask is active. - */ - render( - renderer: WebGLRenderer, - inputBuffer: WebGLRenderTarget | null, - outputBuffer: WebGLRenderTarget | null, - deltaTime?: number, - stencilTest?: boolean - ): void; - - } - - /** - * A blend function enumeration. - * - * Important: Do not use `BlendFunction.SKIP` to disable effects. See - * [Enabling and Disabling Effects](https://github.com/vanruesc/postprocessing/wiki/Enabling-and-Disabling-Effects) - * for more information. - * - * Based on https://www.khronos.org/registry/OpenGL/extensions/NV/NV_blend_equation_advanced.txt + * @type {Boolean} + * @deprecated + */ + get isLookupTexture3D(): boolean; + /** + * Scales this LUT up to a given target size using tetrahedral interpolation. * - * @type {Object} - * @property {Number} SKIP - Deprecated. Use DST instead. Warning: This blend function does NOT fully disable the effect. - * @property {Number} SET - Deprecated. Use SRC instead. - * @property {Number} ADD - Additive blending. Fast, but may produce washed out results. - * @property {Number} ALPHA - Alpha blending. Blends based on the alpha value of the new color. - * @property {Number} AVERAGE - Calculates the avarage of the new color and the base color. - * @property {Number} COLOR - Converts the colors to HSL and blends based on color. - * @property {Number} COLOR_BURN - Color burn. - * @property {Number} COLOR_DODGE - Color dodge. - * @property {Number} DARKEN - Prioritize darker colors. - * @property {Number} DIFFERENCE - Color difference. - * @property {Number} DIVIDE - Color division. - * @property {Number} DST - Overwrites the new color with the base color. Ignores opacity. - * @property {Number} EXCLUSION - Color exclusion. - * @property {Number} HARD_LIGHT - Hard light. - * @property {Number} HARD_MIX - Hard mix. - * @property {Number} HUE - Converts the colors to HSL and blends based on hue. - * @property {Number} INVERT - Overwrites the base color with the inverted new color. - * @property {Number} INVERT_RGB - Multiplies the new color with the inverted base color. - * @property {Number} LIGHTEN - Prioritize lighter colors. - * @property {Number} LINEAR_BURN - Linear burn. - * @property {Number} LINEAR_DODGE - Same as ADD but limits the result to 1. - * @property {Number} LINEAR_LIGHT - Linear light. - * @property {Number} LUMINOSITY - Converts the colors to HSL and blends based on luminosity. - * @property {Number} MULTIPLY - Color multiplication. - * @property {Number} NEGATION - Negates the base color using the new color. - * @property {Number} NORMAL - Overwrites the base color with the new one. - * @property {Number} OVERLAY - Color overlay. - * @property {Number} PIN_LIGHT - Pin light. - * @property {Number} REFLECT - Color reflection. - * @property {Number} SCREEN - Screen blending. The two colors are effectively projected on a white screen simultaneously. - * @property {Number} SRC - Overwrites the base color with the new one. Ignores opacity. - * @property {Number} SATURATION - Converts the colors to HSL and blends based on saturation. - * @property {Number} SOFT_LIGHT - Soft light. - * @property {Number} SUBTRACT - Subtracts the new color from the base color. - * @property {Number} VIVID_LIGHT - Vivid light. - */ - export enum BlendFunction { - SKIP, - SET, - ADD, - ALPHA, - AVERAGE, - COLOR, - COLOR_BURN, - COLOR_DODGE, - DARKEN, - DIFFERENCE, - DIVIDE, - DST, - EXCLUSION, - HARD_LIGHT, - HARD_MIX, - HUE, - INVERT, - INVERT_RGB, - LIGHTEN, - LINEAR_BURN, - LINEAR_DODGE, - LINEAR_LIGHT, - LUMINOSITY, - MULTIPLY, - NEGATION, - NORMAL, - OVERLAY, - PIN_LIGHT, - REFLECT, - SATURATION, - SCREEN, - SOFT_LIGHT, - SRC, - SUBTRACT, - VIVID_LIGHT - } - - /** - * A blend mode. - */ - export class BlendMode extends EventDispatcher { - - /** - * Constructs a new blend mode. - * - * @param {BlendFunction} blendFunction - The blend function. - * @param {Number} opacity - The opacity of the color that will be blended with the base color. - */ - constructor(blendFunction: BlendFunction, opacity?: number); - /** - * A uniform that controls the opacity of this blend mode. - * - * TODO Add opacity accessors for uniform value. - * @type {Uniform} - */ - opacity: Uniform; - /** - * Returns the opacity. - * - * @return {Number} The opacity. - */ - getOpacity(): number; - /** - * Sets the opacity. - * - * @param {Number} value - The opacity. - */ - setOpacity(value: number): void; - /** - * Returns the blend function. - * - * @deprecated Use blendFunction instead. - * @return {BlendFunction} The blend function. - */ - getBlendFunction(): BlendFunction; - /** - * Sets the blend function. - * - * @deprecated Use blendFunction instead. - * @param {BlendFunction} value - The blend function. - */ - setBlendFunction(value: BlendFunction): void; - /** - * Returns the blend function shader code. - * - * @return {String} The blend function shader code. - */ - getShaderCode(): string; - /** - * The blend function. - * - * @type {BlendFunction} - */ - get blendFunction(): BlendFunction; - set blendFunction(value: BlendFunction); - - } - - /** - * An abstract effect. - * - * Effects can be combined using the {@link EffectPass}. - * - * @implements {Initializable} - * @implements {Resizable} - * @implements {Disposable} - */ - export class Effect - extends EventDispatcher - implements Initializable, Resizable, Disposable { - - /** - * Constructs a new effect. - * - * @param {String} name - The name of this effect. Doesn't have to be unique. - * @param {String} fragmentShader - The fragment shader. This shader is required. - * @param {Object} [options] - Additional options. - * @param {EffectAttribute} [options.attributes=EffectAttribute.NONE] - The effect attributes that determine the execution priority and resource requirements. - * @param {BlendFunction} [options.blendFunction=BlendFunction.SCREEN] - The blend function of this effect. - * @param {Map} [options.defines] - Custom preprocessor macro definitions. Keys are names and values are code. - * @param {Map} [options.uniforms] - Custom shader uniforms. Keys are names and values are uniforms. - * @param {Set} [options.extensions] - WebGL extensions. - * @param {String} [options.vertexShader=null] - The vertex shader. Most effects don't need one. - */ - constructor( - name: string, - fragmentShader: string, - { - attributes, - blendFunction, - defines, - uniforms, - extensions, - vertexShader - }?: { - attributes?: EffectAttribute; - blendFunction?: BlendFunction; - defines?: Map; - uniforms?: Map; - extensions?: Set; - vertexShader?: string; - } - ); - - /** - * The name of this effect. - * - * @type {String} - */ - name: string; - /** - * The renderer. - * - * @type {WebGLRenderer} - * @protected - * @deprecated - */ - protected renderer: WebGLRenderer; - /** - * Preprocessor macro definitions. - * - * Call {@link Effect.setChanged} after changing macro definitions. - * - * @type {Map} - */ - readonly defines: Map; - /** - * Shader uniforms. - * - * Call {@link Effect.setChanged} after adding or removing uniforms. - * - * @type {Map} - */ - readonly uniforms: Map; - /** - * WebGL extensions that are required by this effect. - * - * Call {@link Effect.setChanged} after adding or removing extensions. - * - * @type {Set} - */ - readonly extensions: Set; - /** - * The blend mode of this effect. - * - * @type {BlendMode} - */ - readonly blendMode: BlendMode; - /** - * The input color space. - * - * @type {ColorSpace} - * @experimental - */ - get inputColorSpace(): ColorSpace; - /** - * @type {ColorSpace} - * @protected - * @experimental - */ - protected set inputColorSpace(arg: ColorSpace); - /** - * The output color space. - * - * Should only be changed if this effect converts the input colors to a different color space. - * - * @type {ColorSpace} - * @experimental - */ - get outputColorSpace(): ColorSpace; - /** - * @type {ColorSpace} - * @protected - * @experimental - */ - protected set outputColorSpace(arg: ColorSpace); - /** - * Sets the main scene. - * - * @type {Scene} - */ - set mainScene(arg: Scene); - /** - * Sets the main camera. - * - * @type {Camera} - */ - set mainCamera(arg: Camera); - /** - * Returns the name of this effect. - * - * @deprecated Use name instead. - * @return {String} The name. - */ - getName(): string; - /** - * Sets the renderer. - * - * @deprecated - * @param {WebGLRenderer} renderer - The renderer. - */ - setRenderer(renderer: WebGLRenderer): void; - /** - * Returns the preprocessor macro definitions. - * - * @deprecated Use defines instead. - * @return {Map} The extensions. - */ - getDefines(): Map; - /** - * Returns the uniforms of this effect. - * - * @deprecated Use uniforms instead. - * @return {Map} The extensions. - */ - getUniforms(): Map; - /** - * Returns the WebGL extensions that are required by this effect. - * - * @deprecated Use extensions instead. - * @return {Set} The extensions. - */ - getExtensions(): Set; - /** - * Returns the blend mode. - * - * The result of this effect will be blended with the result of the previous effect using this blend mode. - * - * @deprecated Use blendMode instead. - * @return {BlendMode} The blend mode. - */ - getBlendMode(): BlendMode; - /** - * Returns the effect attributes. - * - * @return {EffectAttribute} The attributes. - */ - getAttributes(): EffectAttribute; - /** - * Sets the effect attributes. - * - * Effects that have the same attributes will be executed in the order in which they were registered. Some attributes - * imply a higher priority. - * - * @protected - * @param {EffectAttribute} attributes - The attributes. - */ - protected setAttributes(attributes: EffectAttribute): void; - /** - * Returns the fragment shader. - * - * @return {String} The fragment shader. - */ - getFragmentShader(): string; - /** - * Sets the fragment shader. - * - * @protected - * @param {String} fragmentShader - The fragment shader. - */ - protected setFragmentShader(fragmentShader: string): void; - /** - * Returns the vertex shader. - * - * @return {String} The vertex shader. - */ - getVertexShader(): string; - /** - * Sets the vertex shader. - * - * @protected - * @param {String} vertexShader - The vertex shader. - */ - protected setVertexShader(vertexShader: string): void; - /** - * Informs the associated {@link EffectPass} that this effect requires a shader recompilation. - * - * Should be called after changing macros or extensions and after adding/removing uniforms. - * - * @protected - */ - protected setChanged(): void; - /** - * Sets the depth texture. - * - * You may override this method if your effect requires direct access to the depth texture that is bound to the - * associated {@link EffectPass}. - * - * @param {Texture} depthTexture - A depth texture. - * @param {DepthPackingStrategies} [depthPacking=BasicDepthPacking] - The depth packing. - */ - setDepthTexture( - depthTexture: Texture, - depthPacking?: DepthPackingStrategies - ): void; - - /** - * Updates this effect by performing supporting operations. - * - * This method is called by the {@link EffectPass} right before the main fullscreen render operation, even if the - * blend function is set to `SKIP`. - * - * You may override this method if you need to update custom uniforms or render additional off-screen textures. - * - * @param {WebGLRenderer} renderer - The renderer. - * @param {WebGLRenderTarget} inputBuffer - A frame buffer that contains the result of the previous pass. - * @param {Number} [deltaTime] - The time between the last frame and the current one in seconds. - */ - update( - renderer: WebGLRenderer, - inputBuffer: WebGLRenderTarget, - deltaTime?: number - ): void; - - /** - * Updates the size of this effect. - * - * You may override this method if you want to be informed about the size of the backbuffer/canvas. - * This method is called before {@link initialize} and every time the size of the {@link EffectComposer} changes. - * - * @param {Number} width - The width. - * @param {Number} height - The height. - */ - setSize(width: number, height: number): void; - /** - * Performs initialization tasks. - * - * This method is called when the associated {@link EffectPass} is added to an {@link EffectComposer}. - * - * @param {WebGLRenderer} renderer - The renderer. - * @param {Boolean} alpha - Whether the renderer uses the alpha channel or not. - * @param {Number} frameBufferType - The type of the main frame buffers. - * @example if(!alpha && frameBufferType === UnsignedByteType) { this.myRenderTarget.texture.format = RGBFormat; } - */ - initialize( - renderer: WebGLRenderer, - alpha: boolean, - frameBufferType: number - ): void; - - /** - * Performs a shallow search for properties that define a dispose method and deletes them. - * - * The {@link EffectComposer} calls this method when it is being destroyed. - */ - dispose(): void; - - } - - /** - * An enumeration of effect attributes. - * - * Attributes can be concatenated using the bitwise OR operator. + * @param {Number} size - The target sidelength. + * @param {Boolean} [transferData=true] - Extra fast mode. Set to false to keep the original data intact. + * @return {Promise} A promise that resolves with a new LUT upon completion. + */ + scaleUp(size: number, transferData?: boolean): Promise; + /** + * Applies the given LUT to this one. * - * @type {Object} - * @property {Number} NONE - No attributes. Most effects don't need to specify any attributes. - * @property {Number} DEPTH - Describes effects that require a depth texture. - * @property {Number} CONVOLUTION - Describes effects that fetch additional samples from the input buffer. There cannot be more than one effect with this attribute per {@link EffectPass}. - * @example const attributes = EffectAttribute.CONVOLUTION | EffectAttribute.DEPTH; + * @param {LookupTexture} lut - A LUT. Must have the same dimensions, type and format as this LUT. + * @return {LookupTexture} This texture. + */ + applyLUT(lut: LookupTexture): LookupTexture; + /** + * Converts the LUT data into unsigned byte data. + * + * This is a lossy operation which should only be performed after all other transformations have been applied. + * + * @return {LookupTexture} This texture. + */ + convertToUint8(): LookupTexture; + /** + * Converts the LUT data into float data. + * + * @return {LookupTexture} This texture. + */ + convertToFloat(): LookupTexture; + /** + * Converts this LUT into RGBA data. + * + * @deprecated LUTs are RGBA by default since three r137. + * @return {LookupTexture} This texture. */ - export enum EffectAttribute { - CONVOLUTION, - DEPTH, - NONE, - } + convertToRGBA(): LookupTexture; + /** + * Converts the output of this LUT into sRGB color space. + * + * @return {LookupTexture} This texture. + */ + convertLinearToSRGB(): LookupTexture; + /** + * Converts the output of this LUT into linear color space. + * + * @return {LookupTexture} This texture. + */ + convertSRGBToLinear(): LookupTexture; + /** + * Converts this LUT into a 2D data texture. + * + * Please note that custom input domains are not carried over to 2D textures. + * + * @return {DataTexture} The texture. + */ + toDataTexture(): DataTexture; + +} + +export type LookupTexture3D = LookupTexture; + +/** + * A simple noise texture. + */ +export class NoiseTexture extends DataTexture { /** - * An enumeration of WebGL extensions. + * Constructs a new noise texture. * - * @type {Object} - * @property {String} DERIVATIVES - Enables derivatives by adding the functions dFdx, dFdy and fwidth. - * @property {String} FRAG_DEPTH - Enables gl_FragDepthEXT to set a depth value of a fragment from within the fragment shader. - * @property {String} DRAW_BUFFERS - Enables multiple render targets (MRT) support. - * @property {String} SHADER_TEXTURE_LOD - Enables explicit control of texture LOD. - */ - export enum WebGLExtension { - DERIVATIVES = "derivatives", - FRAG_DEPTH = "fragDepth", - DRAW_BUFFERS = "drawBuffers", - SHADER_TEXTURE_LOD = "shaderTextureLOD", - } - - /** - * An effect pass. - * - * Use this pass to combine {@link Effect} instances. - */ - export class EffectPass extends Pass { - - /** - * Constructs a new effect pass. - * - * @param {Camera} camera - The main camera. - * @param {...Effect} effects - The effects that will be rendered by this pass. - */ - constructor(camera?: Camera, ...effects: Effect[]); - /** - * The effects. - * - * Use `updateMaterial` or `recompile` after changing the effects and consider calling `dispose` to free resources - * of unused effects. - * - * @type {Effect[]} - * @protected - */ - private effects: Effect[]; - /** - * A time offset. - * - * Elapsed time will start at this value. - * - * @type {Number} - * @deprecated - */ - minTime: number; - /** - * The maximum time. - * - * If the elapsed time exceeds this value, it will be reset. - * - * @type {Number} - * @deprecated - */ - maxTime: number; - set encodeOutput(arg: boolean); - /** - * Indicates whether this pass encodes its output when rendering to screen. - * - * @type {Boolean} - * @deprecated Use fullscreenMaterial.encodeOutput instead. - */ - get encodeOutput(): boolean; - set dithering(arg: boolean); - /** - * Indicates whether dithering is enabled. - * - * @type {Boolean} - */ - get dithering(): boolean; - /** - * Updates the compound shader material. - */ - protected updateMaterial(): void; - /** - * Rebuilds the shader material. - */ - recompile(): void; - /** - * Sets the effects. - * - * @param effects - The effects. - */ - protected setEffects(effects: Effect[]): void; - /** - * Returns the current depth texture. - * @returns The current depth texture, or null if there is none. - */ - getDepthTexture(): Texture; - /** - * Sets the depth texture. - * @param depthTexture - A depth texture. - * @param [depthPacking = 0] - The depth packing. - */ - setDepthTexture(depthTexture: Texture, depthPacking?: number): void; - /** - * Renders the effect. - * @param renderer - The renderer. - * @param inputBuffer - A frame buffer that contains the result of the previous pass. - * @param outputBuffer - A frame buffer that serves as the output render target unless this pass renders to screen. - * @param [deltaTime] - The time between the last frame and the current one in seconds. - * @param [stencilTest] - Indicates whether a stencil mask is active. - */ - render( - renderer: WebGLRenderer, - inputBuffer: WebGLRenderTarget | null, - outputBuffer: WebGLRenderTarget | null, - deltaTime?: number, - stencilTest?: boolean - ): void; - - /** - * Updates the size of this pass. - * @param width - The width. - * @param height - The height. - */ - setSize(width: number, height: number): void; - /** - * Performs initialization tasks. - * @param renderer - The renderer. - * @param alpha - Whether the renderer uses the alpha channel or not. - * @param frameBufferType - The type of the main frame buffers. - */ - initialize( - renderer: WebGLRenderer, - alpha: boolean, - frameBufferType: number - ): void; - - /** - * Deletes disposable objects. - * This pass will be inoperative after this method was called! - */ - dispose(): void; - /** - * Handles events. - * - * @param {Event} event - An event. - */ - handleEvent(event: Event): void; - - } - - /** - * A pass that executes a given function. - */ - export class LambdaPass extends Pass { - - /** - * Constructs a new lambda pass. - * - * @param {Function} f - A function. - */ - constructor(f: Function); - - } - - /** - * A pass that renders luminance. - */ - export class LuminancePass extends Pass { - - /** - * Constructs a new luminance pass. - * - * @param {Object} [options] - The options. See {@link LuminanceMaterial} for additional options. - * @param {Number} [options.resolutionScale=1.0] - The resolution scale. - * @param {Number} [options.resolutionX=Resolution.AUTO_SIZE] - The horizontal resolution. - * @param {Number} [options.resolutionY=Resolution.AUTO_SIZE] - The vertical resolution. - * @param {Number} [options.width=Resolution.AUTO_SIZE] - Deprecated. Use resolutionX instead. - * @param {Number} [options.height=Resolution.AUTO_SIZE] - Deprecated. Use resolutionY instead. - * @param {WebGLRenderTarget} [options.renderTarget] - A custom render target. - */ - constructor({ - resolutionScale, - resolutionX, - resolutionY, - width, - height, - renderTarget - }?: { - resolutionScale?: number; - resolutionX?: number; - resolutionY?: number; - width?: number; - height?: number; - renderTarget?: WebGLRenderTarget; - }); - - resolution: Resolution; - /** - * The luminance texture. - * - * @type {Texture} - */ - get texture(): Texture; - /** - * Returns the luminance texture. - * - * @deprecated Use texture instead. - * @return {Texture} The texture. - */ - getTexture(): Texture; - /** - * Returns the resolution settings. - * - * @deprecated Use resolution instead. - * @return {Resolution} The resolution. - */ - getResolution(): Resolution; - /** - * Renders the luminance. - * - * @param {WebGLRenderer} renderer - The renderer. - * @param {WebGLRenderTarget} inputBuffer - A frame buffer that contains the result of the previous pass. - * @param {WebGLRenderTarget} outputBuffer - A frame buffer that serves as the output render target unless this pass renders to screen. - * @param {Number} [deltaTime] - The time between the last frame and the current one in seconds. - * @param {Boolean} [stencilTest] - Indicates whether a stencil mask is active. - */ - render( - renderer: WebGLRenderer, - inputBuffer: WebGLRenderTarget | null, - outputBuffer: WebGLRenderTarget | null, - deltaTime?: number, - stencilTest?: boolean - ): void; - - } - - /** - * A stencil mask pass. - * - * This pass requires that the input and output buffers have a stencil buffer. You can enable the stencil buffer via the - * {@link EffectComposer} constructor. - */ - export class MaskPass extends Pass { - - /** - * Constructs a new mask pass. - * - * @param {Scene} scene - The scene to render. - * @param {Camera} camera - The camera to use. - */ - constructor(scene?: Scene, camera?: Camera); - /** - * A clear pass. - * - * @type {ClearPass} - */ - clearPass: ClearPass; - /** - * Inverse flag. - * - * @type {Boolean} - * @deprecated Use inverted instead. - */ - inverse: boolean; - set inverted(arg: boolean); - /** - * Indicates whether the mask should be inverted. - * - * @type {Boolean} - */ - get inverted(): boolean; - set clear(arg: boolean); - /** - * Indicates whether this pass should clear the stencil buffer. - * - * @type {Boolean} - * @deprecated Use clearPass.enabled instead. - */ - get clear(): boolean; - /** - * Returns the internal clear pass. - * - * @deprecated Use clearPass.enabled instead. - * @return {ClearPass} The clear pass. - */ - getClearPass(): ClearPass; - /** - * Indicates whether the mask is inverted. - * - * @deprecated Use inverted instead. - * @return {Boolean} Whether the mask is inverted. - */ - isInverted(): boolean; - /** - * Enables or disable mask inversion. - * - * @deprecated Use inverted instead. - * @param {Boolean} value - Whether the mask should be inverted. - */ - setInverted(value: boolean): void; - /** - * Renders the effect. - * @param renderer - The renderer. - * @param inputBuffer - A frame buffer that contains the result of the previous pass. - * @param outputBuffer - A frame buffer that serves as the output render target unless this pass renders to screen. - * @param [deltaTime] - The time between the last frame and the current one in seconds. - * @param [stencilTest] - Indicates whether a stencil mask is active. - */ - render( - renderer: WebGLRenderer, - inputBuffer: WebGLRenderTarget | null, - outputBuffer: WebGLRenderTarget | null, - deltaTime?: number, - stencilTest?: boolean - ): void; - - } - - /** - * A pass that renders the normals of a given scene. - */ - export class NormalPass extends Pass { - - /** - * Constructs a new normal pass. - * - * @param {Scene} scene - The scene to render. - * @param {Camera} camera - The camera to use to render the scene. - * @param {Object} [options] - The options. - * @param {Number} [options.resolutionScale=1.0] - The resolution scale. - * @param {Number} [options.resolutionX=Resolution.AUTO_SIZE] - The horizontal resolution. - * @param {Number} [options.resolutionY=Resolution.AUTO_SIZE] - The vertical resolution. - * @param {Number} [options.width=Resolution.AUTO_SIZE] - Deprecated. Use resolutionX instead. - * @param {Number} [options.height=Resolution.AUTO_SIZE] - Deprecated. Use resolutionY instead. - * @param {WebGLRenderTarget} [options.renderTarget] - A custom render target. - */ - constructor( - scene?: Scene, - camera?: Camera, - { - resolutionScale, - resolutionX, - resolutionY, - width, - height, - renderTarget - }?: { - resolutionScale?: number; - resolutionX?: number; - resolutionY?: number; - width?: number; - height?: number; - renderTarget?: WebGLRenderTarget; - } - ); - - resolution: Resolution; - /** - * The normal texture. - * - * @type {Texture} - */ - get texture(): Texture; - /** - * The normal texture. - * - * @deprecated Use texture instead. - * @return {Texture} The texture. - */ - getTexture(): Texture; - /** - * Returns the resolution settings. - * - * @deprecated Use resolution instead. - * @return {Resolution} The resolution. - */ - getResolution(): Resolution; - /** - * Returns the current resolution scale. - * - * @return {Number} The resolution scale. - * @deprecated Use resolution.preferredWidth or resolution.preferredHeight instead. - */ - getResolutionScale(): number; - /** - * Sets the resolution scale. - * - * @param {Number} scale - The new resolution scale. - * @deprecated Use resolution.preferredWidth or resolution.preferredHeight instead. - */ - setResolutionScale(scale: number): void; - /** - * Renders the scene normals. - * - * @param {WebGLRenderer} renderer - The renderer. - * @param {WebGLRenderTarget} inputBuffer - A frame buffer that contains the result of the previous pass. - * @param {WebGLRenderTarget} outputBuffer - A frame buffer that serves as the output render target unless this pass renders to screen. - * @param {Number} [deltaTime] - The time between the last frame and the current one in seconds. - * @param {Boolean} [stencilTest] - Indicates whether a stencil mask is active. - */ - render( - renderer: WebGLRenderer, - inputBuffer: WebGLRenderTarget | null, - outputBuffer: WebGLRenderTarget | null, - deltaTime?: number, - stencilTest?: boolean - ): void; - - } - - /** - * A shader pass. - * - * Renders any shader material as a fullscreen effect. This pass should not be used to create multiple chained effects. - * For a more efficient solution, please refer to the {@link EffectPass}. - */ - export class ShaderPass extends Pass { - - /** - * Constructs a new shader pass. - * - * @param {ShaderMaterial} material - A shader material. - * @param {String} [input="inputBuffer"] - The name of the input buffer uniform. - */ - constructor(material: ShaderMaterial, input?: string); - /** - * Sets the name of the input buffer uniform. - * - * Most fullscreen materials modify texels from an input texture. This pass automatically assigns the main input - * buffer to the uniform identified by the given name. - * - * @param {String} input - The name of the input buffer uniform. - */ - setInput(input: string): void; - /** - * Renders the effect. - * @param renderer - The renderer. - * @param inputBuffer - A frame buffer that contains the result of the previous pass. - * @param outputBuffer - A frame buffer that serves as the output render target unless this pass renders to screen. - * @param [deltaTime] - The time between the last frame and the current one in seconds. - * @param [stencilTest] - Indicates whether a stencil mask is active. - */ - render( - renderer: WebGLRenderer, - inputBuffer: WebGLRenderTarget | null, - outputBuffer: WebGLRenderTarget | null, - deltaTime?: number, - stencilTest?: boolean - ): void; - - } - - /** - * The EffectComposer may be used in place of a normal WebGLRenderer. - * - * The auto clear behaviour of the provided renderer will be disabled to prevent unnecessary clear operations. - * - * It is common practice to use a {@link RenderPass} as the first pass to automatically clear the buffers and render a - * scene for further processing. - * - * @implements {Resizable} - * @implements {Disposable} - */ - export class EffectComposer implements Resizable, Disposable { - - /** - * Constructs a new effect composer. - * - * @param {WebGLRenderer} renderer - The renderer that should be used. - * @param {Object} [options] - The options. - * @param {Boolean} [options.depthBuffer=true] - Whether the main render targets should have a depth buffer. - * @param {Boolean} [options.stencilBuffer=false] - Whether the main render targets should have a stencil buffer. - * @param {Boolean} [options.alpha] - Deprecated. Buffers are always RGBA since three r137. - * @param {Number} [options.multisampling=0] - The number of samples used for multisample antialiasing. Requires WebGL 2. - * @param {Number} [options.frameBufferType] - The type of the internal frame buffers. It's recommended to use HalfFloatType if possible. - */ - constructor( - renderer?: WebGLRenderer, - { - depthBuffer, - stencilBuffer, - multisampling, - frameBufferType - }?: { - depthBuffer?: boolean; - stencilBuffer?: boolean; - alpha?: boolean; - multisampling?: number; - frameBufferType?: number; - } - ); - - /** - * The input buffer. - * - * Two identical buffers are used to avoid reading from and writing to the same render target. - * - * @type {WebGLRenderTarget} - */ - inputBuffer: WebGLRenderTarget; - /** - * The output buffer. - * - * @type {WebGLRenderTarget} - */ - outputBuffer: WebGLRenderTarget; - /** - * The passes. - * - * @type {Pass[]} - */ - passes: Pass[]; - /** - * Determines whether the last pass automatically renders to screen. - * - * @type {Boolean} - */ - autoRenderToScreen: boolean; - /** - * Sets the amount of MSAA samples. - * - * Requires WebGL 2. Set to zero to disable multisampling. - * - * @type {Number} - */ - set multisampling(arg: number); - /** - * The current amount of samples used for multisample anti-aliasing. - * - * @type {Number} - */ - get multisampling(): number; - /** - * Returns the internal timer. - * - * @return {Timer} The timer. - */ - getTimer(): Timer; - /** - * Returns the renderer. - * - * @return {WebGLRenderer} The renderer. - */ - getRenderer(): WebGLRenderer; - /** - * Sets the renderer. - * - * @param {WebGLRenderer} renderer - The renderer. - */ - setRenderer(renderer: WebGLRenderer): void; - /** - * Replaces the current renderer with the given one. - * - * The auto clear mechanism of the provided renderer will be disabled. If the new render size differs from the - * previous one, all passes will be updated. - * - * By default, the DOM element of the current renderer will automatically be removed from its parent node and the DOM - * element of the new renderer will take its place. - * - * @deprecated Use setRenderer instead. - * @param {WebGLRenderer} renderer - The new renderer. - * @param {Boolean} updateDOM - Indicates whether the old canvas should be replaced by the new one in the DOM. - * @return {WebGLRenderer} The old renderer. - */ - replaceRenderer( - renderer: WebGLRenderer, - updateDOM?: boolean - ): WebGLRenderer; - /** - * Creates a new render target. - * - * @deprecated Create buffers manually via WebGLRenderTarget instead. - * @param {Boolean} depthBuffer - Whether the render target should have a depth buffer. - * @param {Boolean} stencilBuffer - Whether the render target should have a stencil buffer. - * @param {Number} type - The frame buffer type. - * @param {Number} multisampling - The number of samples to use for antialiasing. - * @return {WebGLRenderTarget} A new render target that equals the renderer's canvas. - */ - createBuffer( - depthBuffer: boolean, - stencilBuffer: boolean, - type: number, - multisampling: number - ): WebGLRenderTarget; - /** - * Can be used to change the main scene for all registered passes and effects. - * - * @param {Scene} scene - The scene. - */ - setMainScene(scene: Scene): void; - /** - * Can be used to change the main camera for all registered passes and effects. - * - * @param {Camera} camera - The camera. - */ - setMainCamera(camera: Camera): void; - /** - * Adds a pass, optionally at a specific index. - * - * @param {Pass} pass - A new pass. - * @param {Number} [index] - An index at which the pass should be inserted. - */ - addPass(pass: Pass, index?: number): void; - /** - * Removes a pass. - * - * @param {Pass} pass - The pass. - */ - removePass(pass: Pass): void; - /** - * Removes all passes. - */ - removeAllPasses(): void; - /** - * Renders all enabled passes in the order in which they were added. - * - * @param {Number} [deltaTime] - The time since the last frame in seconds. - */ - render(deltaTime?: number): void; - /** - * Sets the size of the buffers, passes and the renderer. - * - * @param {Number} width - The width. - * @param {Number} height - The height. - * @param {Boolean} [updateStyle] - Determines whether the style of the canvas should be updated. - */ - setSize(width: number, height: number, updateStyle?: boolean): void; - /** - * Resets this composer by deleting all passes and creating new buffers. - */ - reset(): void; - /** - * Disposes this composer and all passes. - */ - dispose(): void; - - } - - /** - * An override material manager. - * - * Includes a workaround that fixes override materials for skinned meshes and instancing. Doesn't fix uniforms such as - * normal maps and displacement maps. Using the workaround may have a negative impact on performance if the scene - * contains a lot of meshes. - * - * @implements {Disposable} - */ - export class OverrideMaterialManager implements Disposable { - - /** - * Enables or disables the override material workaround globally. - * - * This only affects post processing passes and effects. - * - * @type {Boolean} - */ - static set workaroundEnabled(arg: boolean); - /** - * Indicates whether the override material workaround is enabled. - * - * @type {Boolean} - */ - static get workaroundEnabled(): boolean; - /** - * Constructs a new override material manager. - * - * @param {Material} [material=null] - An override material. - */ - constructor(material?: Material); - /** - * Sets the override material. - * - * @param {Material} material - The material. - */ - setMaterial(material: Material): void; - /** - * Performs cleanup tasks. - */ - dispose(): void; - - } - - /** - * The Resizable contract. - * - * Implemented by objects that can be resized. - * - * @interface - */ - export interface Resizable { - - /** - * Sets the size of this object. - * - * @param {number} width - The width. - * @param {number} height - The height. - */ - setSize(width: number, height: number): void; - - } - - /** - * A timer that provides read access to time data. - * - * @interface - */ - export interface ImmutableTimer { - - /** - * The current delta time in seconds. - * - * @type {Number} - */ - get delta(): number; - /** - * The fixed delta time in seconds. - * - * @type {Number} - */ - get fixedDelta(): number; - /** - * The elapsed time in seconds. - * - * @type {Number} - */ - get elapsed(): number; - - } - - /** - * An object selection. - * - * Object selections use render layers to facilitate quick and efficient visibility changes. - */ - export class Selection extends Set { - - /** - * Constructs a new selection. - * - * @param {Iterable} [iterable] - A collection of objects that should be added to this selection. - * @param {Number} [layer=10] - A dedicated render layer for selected objects. - */ - constructor(iterable?: Iterable, layer?: number); - /** - * Controls whether objects that are added to this selection should be removed from all other layers. - * - * @type {Boolean} - */ - exclusive: boolean; - set layer(arg: number); - /** - * The render layer for selected objects. - * - * @type {Number} - */ - get layer(): number; - /** - * Returns the current render layer for selected objects. - * - * The default layer is 10. If this collides with your own custom layers, please change it before rendering! - * - * @deprecated Use layer instead. - * @return {Number} The layer. - */ - getLayer(): number; - /** - * Sets the render layer for selected objects. - * - * The current selection will be updated accordingly. - * - * @deprecated Use layer instead. - * @param {Number} value - The layer. Range is [0, 31]. - */ - setLayer(value: number): void; - /** - * Indicates whether objects that are added to this selection will be removed from all other layers. - * - * @deprecated Use exclusive instead. - * @return {Number} Whether this selection is exclusive. Default is false. - */ - isExclusive(): number; - /** - * Controls whether objects that are added to this selection should be removed from all other layers. - * - * @deprecated Use exclusive instead. - * @param {Number} value - Whether this selection should be exclusive. - */ - setExclusive(value: number): void; - /** - * Clears this selection. - * - * @return {Selection} This selection. - */ - clear(): this; - /** - * Clears this selection and adds the given objects. - * - * @param {Iterable} objects - The objects that should be selected. - * @return {Selection} This selection. - */ - set(objects: Iterable): this; - /** - * An alias for {@link has}. - * - * @param {Object3D} object - An object. - * @return {Number} Returns 0 if the given object is currently selected, or -1 otherwise. - * @deprecated Added for backward-compatibility. - */ - indexOf(object: Object3D): number; - /** - * Adds an object to this selection. - * - * If {@link exclusive} is set to `true`, the object will also be removed from all other layers. - * - * @param {Object3D} object - The object that should be selected. - * @return {Selection} This selection. - */ - add(object: Object3D): this; - /** - * Removes an existing object from the selection. If the object doesn't exist it's added instead. - * - * @param {Object3D} object - The object. - * @return {Boolean} Returns true if the object is added, false otherwise. - */ - toggle(object: Object3D): boolean; - /** - * Sets the visibility of all selected objects. - * - * This method enables or disables render layer 0 of all selected objects. - * - * @param {Boolean} visible - Whether the selected objects should be visible. - * @return {Selection} This selection. - */ - setVisible(visible: boolean): this; - - } - - /** - * A timer. - * - * Original implementation by Michael Herzog (Mugen87). - * - * @experimental Temporary substitute for {@link https://github.com/mrdoob/three.js/pull/17912} - * @implements {Disposable} - * @implements {EventListenerObject} - */ - export class Timer implements ImmutableTimer, Disposable, EventListenerObject { - handleEvent(object: Event): void; - - /** - * The current delta time in seconds. - */ - get delta(): number; - /** - * The fixed delta time in seconds. - */ - get fixedDelta(): number; - set fixedDelta(value: number); - /** - * The elapsed time in seconds. - */ - get elapsed(): number; - /** - * Determines whether this timer should use a fixed time step. - */ - useFixedDelta: boolean; - /** - * The timescale. - */ - timescale: number; - /** - * Enables or disables auto reset based on page visibility. - * - * If enabled, the timer will be reset when the page becomes visible. This effectively pauses the timer when the page - * is hidden. Has no effect if the API is not supported. - * - * @see https://developer.mozilla.org/en-US/docs/Web/API/Page_Visibility_API - */ - get autoReset(): boolean; - set autoReset(value: boolean); - /** - * Updates this timer. - * - * @param {Number} [timestamp] - The current time in milliseconds. - */ - update(timestamp?: number): void; - /** - * Resets this timer. - * - * @return {Timer} This timer. - */ - reset(): Timer; - /** - * Disposes this timer. - */ - dispose(): void; - - } - - export type BloomEffectOptions = { - blendFunction?: BlendFunction; - luminanceThreshold?: number; - luminanceSmoothing?: number; - mipmapBlur?: boolean; - intensity?: number; - radius?: number; - levels?: number; - kernelSize?: KernelSize; - resolutionScale?: number; - width?: number; - height?: number; - resolutionX?: number; - resolutionY?: number; - }; + * Supported formats are `RGBAFormat`, `RedFormat` and `RGFormat`. + * + * @param {Number} width - The width. + * @param {Number} height - The height. + * @param {Number} [format=RedFormat] - The texture format. + * @param {Number} [type=UnsignedByteType] - The texture type. + */ + constructor(width: number, height: number, format?: number, type?: number); + +} + +/** + * An ASCII character lookup texture. + */ +export class ASCIITexture extends CanvasTexture { /** - * A bloom effect. - */ - export class BloomEffect extends Effect { - - /** - * Constructs a new bloom effect. - * - * @param {Object} [options] - The options. - * @param {BlendFunction} [options.blendFunction=BlendFunction.SCREEN] - The blend function of this effect. - * @param {Number} [options.luminanceThreshold=0.9] - The luminance threshold. Raise this value to mask out darker elements in the scene. - * @param {Number} [options.luminanceSmoothing=0.025] - Controls the smoothness of the luminance threshold. - * @param {Boolean} [options.mipmapBlur=false] - Enables or disables mipmap blur. - * @param {Number} [options.intensity=1.0] - The bloom intensity. - * @param {Number} [options.radius=0.85] - The blur radius. Only applies to mipmap blur. - * @param {Number} [options.levels=8] - The amount of MIP levels. Only applies to mipmap blur. - * @param {KernelSize} [options.kernelSize=KernelSize.LARGE] - Deprecated. Use mipmapBlur instead. - * @param {Number} [options.resolutionScale=0.5] - Deprecated. Use mipmapBlur instead. - * @param {Number} [options.resolutionX=Resolution.AUTO_SIZE] - Deprecated. Use mipmapBlur instead. - * @param {Number} [options.resolutionY=Resolution.AUTO_SIZE] - Deprecated. Use mipmapBlur instead. - * @param {Number} [options.width=Resolution.AUTO_SIZE] - Deprecated. Use mipmapBlur instead. - * @param {Number} [options.height=Resolution.AUTO_SIZE] - Deprecated. Use mipmapBlur instead. - */ - constructor({ - blendFunction, - luminanceThreshold, - luminanceSmoothing, - mipmapBlur, - intensity, - radius, - levels, - kernelSize, - resolutionScale, - width, - height, - resolutionX, - resolutionY - }?: BloomEffectOptions); - - /** - * A luminance shader pass. - * - * This pass can be disabled to skip luminance filtering. - * - * @type {LuminancePass} - */ - luminancePass: LuminancePass; - /** - * A blur pass. - * - * @type {KawaseBlurPass} - */ - blurPass: KawaseBlurPass; - /** - * A texture that contains the intermediate result of this effect. - * - * @type {Texture} - */ - get texture(): Texture; - /** - * Returns the generated bloom texture. - * - * @deprecated Use texture instead. - * @return {Texture} The texture. - */ - getTexture(): Texture; - /** - * The resolution of this effect. - * - * @type {Resolution} - */ - get resolution(): Resolution; - /** - * Returns the resolution settings. - * - * @deprecated Use resolution instead. - * @return {Resolution} The resolution. - */ - getResolution(): Resolution; - /** - * Returns the blur pass. - * - * @deprecated Use blurPass instead. - * @return {KawaseBlurPass} The blur pass. - */ - getBlurPass(): KawaseBlurPass; - /** - * Returns the luminance pass. - * - * @deprecated Use luminancePass instead. - * @return {LuminancePass} The luminance pass. - */ - getLuminancePass(): LuminancePass; - /** - * The luminance material. - * - * @type {LuminanceMaterial} - */ - get luminanceMaterial(): LuminanceMaterial; - /** - * Returns the luminance material. - * - * @deprecated Use luminanceMaterial instead. - * @return {LuminanceMaterial} The material. - */ - getLuminanceMaterial(): LuminanceMaterial; - set width(arg: number); - /** - * The current width of the internal render targets. - * - * @type {Number} - * @deprecated Use resolution.width instead. - */ - get width(): number; - set height(arg: number); - /** - * The current height of the internal render targets. - * - * @type {Number} - * @deprecated Use resolution.height instead. - */ - get height(): number; - set dithering(arg: boolean); - /** - * Indicates whether dithering is enabled. - * - * @type {Boolean} - * @deprecated Use EffectPass.fullscreenMaterial.dithering instead. - */ - get dithering(): boolean; - set kernelSize(arg: KernelSize); - /** - * The blur kernel size. - * - * @type {KernelSize} - * @deprecated Use blurPass.kernelSize instead. - */ - get kernelSize(): KernelSize; - set distinction(arg: number); - /** - * @type {Number} - * @deprecated Use luminanceMaterial instead. - */ - get distinction(): number; - set intensity(arg: number); - /** - * The bloom intensity. - * - * @type {Number} - */ - get intensity(): number; - /** - * The bloom intensity. - * - * @deprecated Use intensity instead. - * @return {Number} The intensity. - */ - getIntensity(): number; - /** - * Sets the bloom intensity. - * - * @deprecated Use intensity instead. - * @param {Number} value - The intensity. - */ - setIntensity(value: number): void; - /** - * Returns the current resolution scale. - * - * @return {Number} The resolution scale. - * @deprecated Use resolution instead. - */ - getResolutionScale(): number; - /** - * Sets the resolution scale. - * - * @param {Number} scale - The new resolution scale. - * @deprecated Use resolution instead. - */ - setResolutionScale(scale: number): void; - /** - * Updates this effect. - * - * @param {WebGLRenderer} renderer - The renderer. - * @param {WebGLRenderTarget} inputBuffer - A frame buffer that contains the result of the previous pass. - * @param {Number} [deltaTime] - The time between the last frame and the current one in seconds. - */ - update( - renderer: WebGLRenderer, - inputBuffer: WebGLRenderTarget, - deltaTime?: number - ): void; - - /** - * Updates the size of internal render targets. - * - * @param {Number} width - The width. - * @param {Number} height - The height. - */ - setSize(width: number, height: number): void; - /** - * Performs initialization tasks. - * - * @param {WebGLRenderer} renderer - The renderer. - * @param {Boolean} alpha - Whether the renderer uses the alpha channel or not. - * @param {Number} frameBufferType - The type of the main frame buffers. - */ - initialize( - renderer: WebGLRenderer, - alpha: boolean, - frameBufferType: number - ): void; - - } - - /** - * A depth of field (bokeh) effect. - * - * Original shader code by Martins Upitis: - * http://artmartinsh.blogspot.com/2010/02/glsl-lens-blur-filter-with-bokeh.html - * - * @deprecated Use DepthOfFieldEffect instead. - */ - export class BokehEffect extends Effect { - - /** - * Constructs a new bokeh effect. - * - * @param {Object} [options] - The options. - * @param {BlendFunction} [options.blendFunction=BlendFunction.NORMAL] - The blend function of this effect. - * @param {Number} [options.focus=0.5] - The focus distance ratio, ranging from 0.0 to 1.0. - * @param {Number} [options.dof=0.02] - Depth of field. An area in front of and behind the focal point that still appears sharp. - * @param {Number} [options.aperture=0.015] - Camera aperture scale. Bigger values for stronger blur and shallower depth of field. - * @param {Number} [options.maxBlur=1.0] - The maximum blur strength. - */ - constructor({ - blendFunction, - focus, - dof, - aperture, - maxBlur - }?: { - blendFunction?: BlendFunction; - focus?: number; - dof?: number; - aperture?: number; - maxBlur?: number; - }); + * Constructs a new ASCII texture. + * + * @param {Object} [options] - The options. + * @param {String} [options.characters] - The character set to render. Defaults to a common ASCII art charset. + * @param {String} [options.font="Arial"] - The font. + * @param {Number} [options.fontSize=54] - The font size in pixels. + * @param {Number} [options.size=1024] - The texture size. + * @param {Number} [options.cellCount=16] - The cell count along each side of the texture. + */ + constructor({ + characters, + font, + fontSize, + size, + cellCount + }?: { + characters?: string; + font?: string; + fontSize?: number; + size?: number; + cellCount?: number; + }); + + /** + * The amount of characters in this texture. + * + * @type {Number} + * @readonly + */ + readonly characterCount: number; + /** + * The cell count along each side of the texture. + * + * @type {Number} + * @readonly + */ + readonly cellCount: number; - } +} + +/** + * A container for raw RGBA image data. + * + * @implements {ImageData} + */ +export class RawImageData implements ImageData { /** - * A brightness/contrast effect. + * Creates a new image data container. * - * Reference: https://github.com/evanw/glfx.js + * @param {ImageData|Image} image - An image or plain image data. + * @return {RawImageData} The image data. */ - export class BrightnessContrastEffect extends Effect { + static from( + image: + | ImageData + | (new (width?: number, height?: number) => HTMLImageElement) + ): RawImageData; - /** - * Constructs a new brightness/contrast effect. - * - * @param {Object} [options] - The options. - * @param {BlendFunction} [options.blendFunction=BlendFunction.NORMAL] - The blend function of this effect. - * @param {Number} [options.brightness=0.0] - The brightness factor, ranging from -1 to 1, where 0 means no change. - * @param {Number} [options.contrast=0.0] - The contrast factor, ranging from -1 to 1, where 0 means no change. - */ - constructor({ - blendFunction, - brightness, - contrast - }?: { - blendFunction?: BlendFunction; - brightness?: number; - contrast?: number; - }); - - set brightness(arg: number); - /** - * The brightness. - * - * @type {Number} - */ - get brightness(): number; - /** - * Returns the brightness. - * - * @deprecated Use brightness instead. - * @return {Number} The brightness. - */ - getBrightness(): number; - /** - * Sets the brightness. - * - * @deprecated Use brightness instead. - * @param {Number} value - The brightness. - */ - setBrightness(value: number): void; - set contrast(arg: number); - /** - * The contrast. - * - * @type {Number} - */ - get contrast(): number; - /** - * Returns the contrast. - * - * @deprecated Use contrast instead. - * @return {Number} The contrast. - */ - getContrast(): number; - /** - * Sets the contrast. - * - * @deprecated Use contrast instead. - * @param {Number} value - The contrast. - */ - setContrast(value: number): void; - - } - - /** - * A chromatic aberration effect. - */ - export class ChromaticAberrationEffect extends Effect { - - /** - * Constructs a new chromatic aberration effect. - * - * @param {Object} [options] - The options. - * @param {BlendFunction} [options.blendFunction=BlendFunction.NORMAL] - The blend function of this effect. - * @param {Vector2} [options.offset] - The color offset. - * @param {Boolean} [options.radialModulation=false] - Whether the effect should be modulated with a radial gradient. - * @param {Number} [options.modulationOffset=0.15] - The modulation offset. Only applies if `radialModulation` is enabled. - */ - constructor({ - blendFunction, - offset, - radialModulation, - modulationOffset - }?: { - blendFunction?: BlendFunction; - offset?: Vector2; - radialModulation: boolean, - modulationOffset: number - }); - - set offset(arg: Vector2); - /** - * The color offset. - * - * @type {Vector2} - */ - get offset(): Vector2; - /** - * Indicates whether radial modulation is enabled. - * - * When enabled, the effect will be weaker in the middle and stronger towards the screen edges. - * - * @type {Boolean} - */ - get radialModulation(): boolean; - set radialModulation(arg: boolean); - /** - * The modulation offset. - * - * @type {Number} - */ - get modulationOffset(): number; - set modulationOffset(arg: number); - /** - * Returns the color offset vector. - * - * @deprecated Use offset instead. - * @return {Vector2} The offset. - */ - getOffset(): Vector2; - /** - * Sets the color offset vector. - * - * @deprecated Use offset instead. - * @param {Vector2} value - The offset. - */ - setOffset(value: Vector2): void; - - } - - /** - * A fast greyscale effect. - */ - export class ColorAverageEffect extends Effect { - - /** - * Constructs a new color average effect. - * - * @param {BlendFunction} [blendFunction=BlendFunction.NORMAL] - The blend function of this effect. - */ - constructor(blendFunction?: BlendFunction); - - } - - /** - * A color depth effect. - * - * Simulates a hardware limitation to achieve a retro feel. The real color depth will not be altered by this effect. - */ - export class ColorDepthEffect extends Effect { - - /** - * Constructs a new color depth effect. - * - * @param {Object} [options] - The options. - * @param {BlendFunction} [options.blendFunction=BlendFunction.NORMAL] - The blend function of this effect. - * @param {Number} [options.bits=16] - The color bit depth. - */ - constructor({ - blendFunction, - bits - }?: { - blendFunction?: BlendFunction; - bits?: number; - }); - - set bitDepth(arg: number); - /** - * The virtual amount of color bits. - * - * Each color channel effectively uses a fourth of the total amount of bits. Alpha remains unaffected. - * - * @type {Number} - */ - get bitDepth(): number; - /** - * Returns the current color bit depth. - * - * @return {Number} The bit depth. - */ - getBitDepth(): number; - /** - * Sets the virtual amount of color bits. - * - * @param {Number} value - The bit depth. - */ - setBitDepth(value: number): void; - - } - - /** - * A depth visualization effect. - * - * Useful for debugging. - */ - export class DepthEffect extends Effect { - - /** - * Constructs a new depth effect. - * - * @param {Object} [options] - The options. - * @param {BlendFunction} [options.blendFunction=BlendFunction.NORMAL] - The blend function of this effect. - * @param {Boolean} [options.inverted=false] - Whether the depth should be inverted. - */ - constructor({ - blendFunction, - inverted - }?: { - blendFunction?: BlendFunction; - inverted?: boolean; - }); - - set inverted(arg: boolean); - /** - * Indicates whether depth should be inverted. - * - * @type {Boolean} - */ - get inverted(): boolean; - /** - * Indicates whether the rendered depth is inverted. - * - * @deprecated Use inverted instead. - * @return {Boolean} Whether the rendered depth is inverted. - */ - isInverted(): boolean; - /** - * Enables or disables depth inversion. - * - * @deprecated Use inverted instead. - * @param {Boolean} value - Whether depth should be inverted. - */ - setInverted(value: boolean): void; - - } - - /** - * A depth of field effect. - * - * Based on a graphics study by Adrian Courrèges and an article by Steve Avery: - * https://www.adriancourreges.com/blog/2016/09/09/doom-2016-graphics-study/ - * https://pixelmischiefblog.wordpress.com/2016/11/25/bokeh-depth-of-field/ - */ - export class DepthOfFieldEffect extends Effect { - - /** - * Constructs a new depth of field effect. - * - * @param {Camera} camera - The main camera. - * @param {Object} [options] - The options. - * @param {BlendFunction} [options.blendFunction=BlendFunction.NORMAL] - The blend function of this effect. - * @param {Number} [options.worldFocusDistance] - The focus distance in world units. - * @param {Number} [options.worldFocusRange] - The focus distance in world units. - * @param {Number} [options.focusDistance=0.0] - The normalized focus distance. Range is [0.0, 1.0]. - * @param {Number} [options.focalLength=0.1] - The focal length. Range is [0.0, 1.0]. - * @param {Number} [options.focusRange=0.1] - The focus range. Range is [0.0, 1.0]. - * @param {Number} [options.focalLength=0.1] - Deprecated. - * @param {Number} [options.bokehScale=1.0] - The scale of the bokeh blur. - * @param {Number} [options.resolutionScale=1.0] - The resolution scale. - * @param {Number} [options.resolutionX=Resolution.AUTO_SIZE] - The horizontal resolution. - * @param {Number} [options.resolutionY=Resolution.AUTO_SIZE] - The vertical resolution. - * @param {Number} [options.width=Resolution.AUTO_SIZE] - Deprecated. Use resolutionX instead. - * @param {Number} [options.height=Resolution.AUTO_SIZE] - Deprecated. Use resolutionY instead. - */ - constructor( - camera?: Camera, - { - blendFunction, - worldFocusDistance, - worldFocusRange, - focusDistance, - focalLength, - focusRange, - bokehScale, - resolutionScale, - resolutionX, - resolutionY, - width, - height - }?: { - blendFunction?: BlendFunction; - worldFocusDistance?: number; - worldFocusRange?: number; - focusDistance?: number; - focalLength?: number; - focusRange?: number; - bokehScale?: number; - resolutionScale?: number; - resolutionX?: number; - resolutionY?: number; - width?: number; - height?: number; - } - ); - - /** - * This pass blurs the foreground CoC buffer to soften edges. - * - * @type {KawaseBlurPass} - */ - readonly blurPass: KawaseBlurPass; - /** - * A target position that should be kept in focus. Set to `null` to disable auto focus. - * - * @type {Vector3} - */ - target: Vector3; - set bokehScale(arg: number); - /** - * The current bokeh scale. - * - * @type {Number} - */ - get bokehScale(): number; - /** - * The circle of confusion texture. - * - * @type {Texture} - */ - get cocTexture(): Texture; - /** - * The mask function. Default is `MULTIPLY_RGB`. - * - * @type {MaskFunction} - */ - get maskFunction(): MaskFunction; - set maskFunction(arg: MaskFunction); - /** - * The circle of confusion material. - * - * @type {CircleOfConfusionMaterial} - */ - get cocMaterial(): CircleOfConfusionMaterial; - /** - * The circle of confusion material. - * - * @deprecated Use cocMaterial instead. - * @type {CircleOfConfusionMaterial} - */ - get circleOfConfusionMaterial(): CircleOfConfusionMaterial; - /** - * Returns the circle of confusion material. - * - * @deprecated Use cocMaterial instead. - * @return {CircleOfConfusionMaterial} The material. - */ - getCircleOfConfusionMaterial(): CircleOfConfusionMaterial; - /** - * Returns the pass that blurs the foreground CoC buffer to soften edges. - * - * @deprecated Use blurPass instead. - * @return {KawaseBlurPass} The blur pass. - */ - getBlurPass(): KawaseBlurPass; - /** - * The resolution of this effect. - * - * @type {Resolution} - */ - get resolution(): Resolution; - /** - * Returns the resolution settings. - * - * @deprecated Use resolution instead. - * @return {Resolution} The resolution. - */ - getResolution(): Resolution; - /** - * Returns the current bokeh scale. - * - * @deprecated Use bokehScale instead. - * @return {Number} The scale. - */ - getBokehScale(): number; - /** - * Sets the bokeh scale. - * - * @deprecated Use bokehScale instead. - * @param {Number} value - The scale. - */ - setBokehScale(value: number): void; - /** - * Returns the current auto focus target. - * - * @deprecated Use target instead. - * @return {Vector3} The target. - */ - getTarget(): Vector3; - /** - * Sets the auto focus target. - * - * @deprecated Use target instead. - * @param {Vector3} value - The target. - */ - setTarget(value: Vector3): void; - /** - * Calculates the focus distance from the camera to the given position. - * - * @param {Vector3} target - The target. - * @return {Number} The normalized focus distance. - */ - calculateFocusDistance(target: Vector3): number; - /** - * Updates this effect. - * - * @param {WebGLRenderer} renderer - The renderer. - * @param {WebGLRenderTarget} inputBuffer - A frame buffer that contains the result of the previous pass. - * @param {Number} [deltaTime] - The time between the last frame and the current one in seconds. - */ - update( - renderer: WebGLRenderer, - inputBuffer: WebGLRenderTarget, - deltaTime?: number - ): void; - - /** - * Updates the size of internal render targets. - * - * @param {Number} width - The width. - * @param {Number} height - The height. - */ - setSize(width: number, height: number): void; - /** - * Performs initialization tasks. - * - * @param {WebGLRenderer} renderer - The renderer. - * @param {Boolean} alpha - Whether the renderer uses the alpha channel or not. - * @param {Number} frameBufferType - The type of the main frame buffers. - */ - initialize( - renderer: WebGLRenderer, - alpha: boolean, - frameBufferType: number - ): void; - - } - - /** - * A dot screen effect. - */ - export class DotScreenEffect extends Effect { - - /** - * Constructs a new dot screen effect. - * - * @param {Object} [options] - The options. - * @param {BlendFunction} [options.blendFunction=BlendFunction.NORMAL] - The blend function of this effect. - * @param {Number} [options.angle=1.57] - The angle of the dot pattern. - * @param {Number} [options.scale=1.0] - The scale of the dot pattern. - */ - constructor({ - blendFunction, - angle, - scale - }?: { - blendFunction?: BlendFunction; - angle?: number; - scale?: number; - }); - - set angle(arg: number); - /** - * The angle. - * - * @type {Number} - */ - get angle(): number; - /** - * Returns the pattern angle. - * - * @deprecated Use angle instead. - * @return {Number} The angle in radians. - */ - getAngle(): number; - /** - * Sets the pattern angle. - * - * @deprecated Use angle instead. - * @param {Number} value - The angle in radians. - */ - setAngle(value: number): void; - set scale(arg: number); - /** - * The scale. - * - * @type {Number} - */ - get scale(): number; - - } - - /** - * A gamma correction effect. - * - * @deprecated Set WebGLRenderer.outputEncoding to sRGBEncoding instead. - */ - export class GammaCorrectionEffect extends Effect { - - /** - * Constructs a new gamma correction effect. - * - * @param {Object} [options] - The options. - * @param {BlendFunction} [options.blendFunction=BlendFunction.NORMAL] - The blend function of this effect. - * @param {Number} [options.gamma=2.0] - The gamma factor. - */ - constructor({ - blendFunction, - gamma - }?: { - blendFunction?: BlendFunction; - gamma?: number; - }); - - } - - /** - * A tilt shift effect. - */ - export class TiltShiftEffect extends Effect { - - /** - * Constructs a new tilt shift Effect - * - * @param {Object} [options] - The options. - * @param {BlendFunction} [options.blendFunction] - The blend function of this effect. - * @param {Number} [options.offset=0.0] - The relative offset of the focus area. - * @param {Number} [options.rotation=0.0] - The rotation of the focus area in radians. - * @param {Number} [options.focusArea=0.4] - The relative size of the focus area. - * @param {Number} [options.feather=0.3] - The softness of the focus area edges. - * @param {Number} [options.bias=0.06] - Deprecated. - * @param {KernelSize} [options.kernelSize=KernelSize.MEDIUM] - The blur kernel size. - * @param {Number} [options.resolutionScale=0.5] - The resolution scale. - * @param {Number} [options.resolutionX=Resolution.AUTO_SIZE] - The horizontal resolution. - * @param {Number} [options.resolutionY=Resolution.AUTO_SIZE] - The vertical resolution. - */ - constructor({ - blendFunction, - offset, - rotation, - focusArea, - feather, - bias, - kernelSize, - resolutionScale, - resolutionX, - resolutionY - }?: { - blendFunction?: BlendFunction, - offset?: number, - rotation?: number, - focusArea?: number, - feather?: number, - bias?: number, - kernelSize?: KernelSize, - resolutionScale?: number, - resolutionX?: number, - resolutionY?: number - }); - - /** - * A blur pass. - * - * @type {KawaseBlurPass} - */ - readonly blurPass: KawaseBlurPass; - /** - * The resolution. - * - * @type {Resolution} - * @readonly - */ - get resolution(): Resolution; - /** - * The rotation of the focus area in radians. - * - * @type {Number} - */ - get rotation(): number; - set rotation(arg: number); - /** - * The relative offset of the focus area. - * - * @type {Number} - */ - get offset(): number; - set offset(arg: number); - /** - * The relative size of the focus area. - * - * @type {Number} - */ - - get focusArea(): number; - set focusArea(arg: number); - /** - * The softness of the focus area edges. - * - * @type {Number} - */ - get feather(): number; - set feather(arg: number); - /** - * A blend bias. - * - * @type {Number} - * @deprecated - */ - get bias(): number; - set bias(arg: number); - } - - /** - * A glitch effect. - * - * This effect can be used in conjunction with the {@link ChromaticAberrationEffect}. - * - * Reference: https://github.com/staffantan/unityglitch - */ - export class GlitchEffect extends Effect { - - /** - * Constructs a new glitch effect. - * - * TODO Change ratio to 0.15. - * @param {Object} [options] - The options. - * @param {BlendFunction} [options.blendFunction=BlendFunction.NORMAL] - The blend function of this effect. - * @param {Vector2} [options.chromaticAberrationOffset] - A chromatic aberration offset. If provided, the glitch effect will influence this offset. - * @param {Vector2} [options.delay] - The minimum and maximum delay between glitch activations in seconds. - * @param {Vector2} [options.duration] - The minimum and maximum duration of a glitch in seconds. - * @param {Vector2} [options.strength] - The strength of weak and strong glitches. - * @param {Texture} [options.perturbationMap] - A perturbation map. If none is provided, a noise texture will be created. - * @param {Number} [options.dtSize=64] - The size of the generated noise map. Will be ignored if a perturbation map is provided. - * @param {Number} [options.columns=0.05] - The scale of the blocky glitch columns. - * @param {Number} [options.ratio=0.85] - The threshold for strong glitches. - */ - constructor({ - blendFunction, - chromaticAberrationOffset, - delay, - duration, - strength, - columns, - ratio, - perturbationMap, - dtSize - }?: { - blendFunction?: BlendFunction; - chromaticAberrationOffset?: Vector2; - delay?: Vector2; - duration?: Vector2; - strength?: Vector2; - perturbationMap?: Texture; - dtSize?: number; - columns?: number; - ratio?: number; - }); - - set perturbationMap(arg: Texture); - /** - * The perturbation map. - * - * @type {Texture} - */ - get perturbationMap(): Texture; - /** - * The minimum and maximum delay between glitch activations in seconds. - * - * @type {Vector2} - * @deprecated Use minDelay and maxDelay instead. - */ - delay: Vector2; - /** - * The minimum and maximum duration of a glitch in seconds. - * - * @type {Vector2} - * @deprecated Use minDuration and maxDuration instead. - */ - duration: Vector2; - /** - * The strength of weak and strong glitches. - * - * @type {Vector2} - * @deprecated Use minStrength and maxStrength instead. - */ - strength: Vector2; - /** - * The effect mode. - * - * @type {GlitchMode} - */ - mode: GlitchMode; - /** - * The ratio between weak (0.0) and strong (1.0) glitches. Range is [0.0, 1.0]. - * - * This value is currently being treated as a threshold for strong glitches, i.e. it's inverted. - * - * TODO Resolve inversion. - * @type {Number} - */ - ratio: number; - /** - * The chromatic aberration offset. - * - * @type {Vector2} - */ - chromaticAberrationOffset: Vector2; - /** - * Indicates whether the glitch effect is currently active. - * - * @type {Boolean} - */ - get active(): boolean; - /** - * Indicates whether the glitch effect is currently active. - * - * @deprecated Use active instead. - * @return {Boolean} Whether the glitch effect is active. - */ - isActive(): boolean; - set minDelay(arg: number); - /** - * The minimum delay between glitch activations. - * - * @type {Number} - */ - get minDelay(): number; - /** - * Returns the minimum delay between glitch activations. - * - * @deprecated Use minDelay instead. - * @return {Number} The minimum delay in seconds. - */ - getMinDelay(): number; - /** - * Sets the minimum delay between glitch activations. - * - * @deprecated Use minDelay instead. - * @param {Number} value - The minimum delay in seconds. - */ - setMinDelay(value: number): void; - set maxDelay(arg: number); - /** - * The maximum delay between glitch activations. - * - * @type {Number} - */ - get maxDelay(): number; - /** - * Returns the maximum delay between glitch activations. - * - * @deprecated Use maxDelay instead. - * @return {Number} The maximum delay in seconds. - */ - getMaxDelay(): number; - /** - * Sets the maximum delay between glitch activations. - * - * @deprecated Use maxDelay instead. - * @param {Number} value - The maximum delay in seconds. - */ - setMaxDelay(value: number): void; - set minDuration(arg: number); - /** - * The minimum duration of sporadic glitches. - * - * @type {Number} - */ - get minDuration(): number; - /** - * Returns the minimum duration of sporadic glitches. - * - * @deprecated Use minDuration instead. - * @return {Number} The minimum duration in seconds. - */ - getMinDuration(): number; - /** - * Sets the minimum duration of sporadic glitches. - * - * @deprecated Use minDuration instead. - * @param {Number} value - The minimum duration in seconds. - */ - setMinDuration(value: number): void; - set maxDuration(arg: number); - /** - * The maximum duration of sporadic glitches. - * - * @type {Number} - */ - get maxDuration(): number; - /** - * Returns the maximum duration of sporadic glitches. - * - * @deprecated Use maxDuration instead. - * @return {Number} The maximum duration in seconds. - */ - getMaxDuration(): number; - /** - * Sets the maximum duration of sporadic glitches. - * - * @deprecated Use maxDuration instead. - * @param {Number} value - The maximum duration in seconds. - */ - setMaxDuration(value: number): void; - set minStrength(arg: number); - /** - * The strength of weak glitches. - * - * @type {Number} - */ - get minStrength(): number; - /** - * Returns the strength of weak glitches. - * - * @deprecated Use minStrength instead. - * @return {Number} The strength. - */ - getMinStrength(): number; - /** - * Sets the strength of weak glitches. - * - * @deprecated Use minStrength instead. - * @param {Number} value - The strength. - */ - setMinStrength(value: number): void; - set maxStrength(arg: number); - /** - * The strength of strong glitches. - * - * @type {Number} - */ - get maxStrength(): number; - /** - * Returns the strength of strong glitches. - * - * @deprecated Use maxStrength instead. - * @return {Number} The strength. - */ - getMaxStrength(): number; - /** - * Sets the strength of strong glitches. - * - * @deprecated Use maxStrength instead. - * @param {Number} value - The strength. - */ - setMaxStrength(value: number): void; - /** - * Returns the current glitch mode. - * - * @deprecated Use mode instead. - * @return {GlitchMode} The mode. - */ - getMode(): GlitchMode; - /** - * Sets the current glitch mode. - * - * @deprecated Use mode instead. - * @param {GlitchMode} value - The mode. - */ - setMode(value: GlitchMode): void; - /** - * Returns the glitch ratio. - * - * @deprecated Use ratio instead. - * @return {Number} The ratio. - */ - getGlitchRatio(): number; - /** - * Sets the ratio of weak (0.0) and strong (1.0) glitches. - * - * @deprecated Use ratio instead. - * @param {Number} value - The ratio. Range is [0.0, 1.0]. - */ - setGlitchRatio(value: number): void; - set columns(arg: number); - /** - * The glitch column size. - * - * @type {Number} - */ - get columns(): number; - /** - * Returns the glitch column size. - * - * @deprecated Use columns instead. - * @return {Number} The glitch column size. - */ - getGlitchColumns(): number; - /** - * Sets the glitch column size. - * - * @deprecated Use columns instead. - * @param {Number} value - The glitch column size. - */ - setGlitchColumns(value: number): void; - /** - * Returns the chromatic aberration offset. - * - * @deprecated Use chromaticAberrationOffset instead. - * @return {Vector2} The offset. - */ - getChromaticAberrationOffset(): Vector2; - /** - * Sets the chromatic aberration offset. - * - * @deprecated Use chromaticAberrationOffset instead. - * @param {Vector2} value - The offset. - */ - setChromaticAberrationOffset(value: Vector2): void; - /** - * Returns the current perturbation map. - * - * @deprecated Use perturbationMap instead. - * @return {Texture} The current perturbation map. - */ - getPerturbationMap(): Texture; - /** - * Replaces the current perturbation map with the given one. - * - * The current map will be disposed if it was generated by this effect. - * - * @deprecated Use perturbationMap instead. - * @param {Texture} value - The new perturbation map. - */ - setPerturbationMap(value: Texture): void; - /** - * Generates a perturbation map. - * - * @deprecated Use NoiseTexture instead. - * @param {Number} [value=64] - The texture size. - * @return {DataTexture} The perturbation map. - */ - generatePerturbationMap(value?: number): DataTexture; - /** - * Updates this effect. - * - * @param {WebGLRenderer} renderer - The renderer. - * @param {WebGLRenderTarget} inputBuffer - A frame buffer that contains the result of the previous pass. - * @param {Number} [deltaTime] - The time between the last frame and the current one in seconds. - */ - update( - renderer: WebGLRenderer, - inputBuffer: WebGLRenderTarget, - deltaTime?: number - ): void; - - /** - * Deletes generated resources. - */ - dispose(): void; - - } - - /** - * A glitch mode enumeration. + /** + * Constructs a new image data container. * - * @type {Object} - * @property {Number} DISABLED - No glitches. - * @property {Number} SPORADIC - Sporadic glitches. - * @property {Number} CONSTANT_MILD - Constant mild glitches. - * @property {Number} CONSTANT_WILD - Constant wild glitches. - */ - export enum GlitchMode { - DISABLED, - SPORADIC, - CONSTANT_MILD, - CONSTANT_WILD, - } - - /** - * A god rays effect. - */ - export class GodRaysEffect extends Effect { - - /** - * Constructs a new god rays effect. - * - * @param {Camera} [camera] - The main camera. - * @param {Mesh|Points} [lightSource] - The light source. Must not write depth and has to be flagged as transparent. - * @param {Object} [options] - The options. - * @param {BlendFunction} [options.blendFunction=BlendFunction.SCREEN] - The blend function of this effect. - * @param {Number} [options.samples=60.0] - The number of samples per pixel. - * @param {Number} [options.density=0.96] - The density of the light rays. - * @param {Number} [options.decay=0.9] - An illumination decay factor. - * @param {Number} [options.weight=0.4] - A light ray weight factor. - * @param {Number} [options.exposure=0.6] - A constant attenuation coefficient. - * @param {Number} [options.clampMax=1.0] - An upper bound for the saturation of the overall effect. - * @param {Number} [options.resolutionScale=0.5] - The resolution scale. - * @param {Number} [options.resolutionX=Resolution.AUTO_SIZE] - The horizontal resolution. - * @param {Number} [options.resolutionY=Resolution.AUTO_SIZE] - The vertical resolution. - * @param {Number} [options.width=Resolution.AUTO_SIZE] - Deprecated. Use resolutionX instead. - * @param {Number} [options.height=Resolution.AUTO_SIZE] - Deprecated. Use resolutionY instead. - * @param {KernelSize} [options.kernelSize=KernelSize.SMALL] - The blur kernel size. Has no effect if blur is disabled. - * @param {Boolean} [options.blur=true] - Whether the god rays should be blurred to reduce artifacts. - */ - constructor( - camera?: Camera, - lightSource?: Mesh | Points, - { - blendFunction, - samples, - density, - decay, - weight, - exposure, - clampMax, - resolutionScale, - resolutionX, - resolutionY, - width, - height, - kernelSize, - blur - }?: { - blendFunction?: BlendFunction; - samples?: number; - density?: number; - decay?: number; - weight?: number; - exposure?: number; - clampMax?: number; - resolutionScale?: number; - resolutionX?: number; - resolutionY?: number; - width?: number; - height?: number; - kernelSize?: KernelSize; - blur?: boolean; - } - ); - - /** - * A blur pass that reduces aliasing artifacts and makes the light softer. - * - * This pass can be disabled to improve performance. - * - * @type {KawaseBlurPass} - */ - blurPass: KawaseBlurPass; - /** - * Returns the blur pass that reduces aliasing artifacts and makes the light softer. - * - * @deprecated Use blurPass instead. - * @return {KawaseBlurPass} The blur pass. - */ - getBlurPass(): KawaseBlurPass; - /** - * Sets the light source. - * - * @type {Mesh|Points} - */ - get lightSource(): Mesh | Points | null; - set lightSource(value: Mesh | Points | null); - /** - * A texture that contains the intermediate result of this effect. - * - * @type {Texture} - */ - get texture(): Texture; - /** - * The depth mask material. - * - * @type {DepthMaskMaterial} - */ - get depthMaskMaterial(): DepthMaskMaterial; - /** - * Returns the god rays texture. - * - * @deprecated Use texture instead. - * @return {Texture} The texture. - */ - getTexture(): Texture; - /** - * The internal god rays material. - * - * @type {GodRaysMaterial} - */ - get godRaysMaterial(): GodRaysMaterial; - /** - * Returns the god rays material. - * - * @deprecated Use godRaysMaterial instead. - * @return {GodRaysMaterial} The material. - */ - getGodRaysMaterial(): GodRaysMaterial; - /** - * The resolution of this effect. - * - * @type {Resolution} - */ - get resolution(): Resolution; - /** - * Returns the resolution of this effect. - * - * @deprecated Use resolution instead. - * @return {GodRaysMaterial} The material. - */ - getResolution(): GodRaysMaterial; - set width(arg: number); - /** - * The current width of the internal render targets. - * - * @type {Number} - * @deprecated Use resolution.width instead. - */ - get width(): number; - set height(arg: number); - /** - * The current height of the internal render targets. - * - * @type {Number} - * @deprecated Use resolution.height instead. - */ - get height(): number; - set dithering(arg: boolean); - /** - * Indicates whether dithering is enabled. - * - * @type {Boolean} - * @deprecated - */ - get dithering(): boolean; - set blur(arg: boolean); - /** - * Indicates whether the god rays should be blurred to reduce artifacts. - * - * @type {Boolean} - * @deprecated Use blurPass.enabled instead. - */ - get blur(): boolean; - set kernelSize(arg: KernelSize); - /** - * The blur kernel size. - * - * @type {KernelSize} - * @deprecated Use blurPass.kernelSize instead. - */ - get kernelSize(): KernelSize; - /** - * Returns the current resolution scale. - * - * @return {Number} The resolution scale. - * @deprecated Use resolution instead. - */ - getResolutionScale(): number; - /** - * Sets the resolution scale. - * - * @param {Number} scale - The new resolution scale. - * @deprecated Use resolution instead. - */ - setResolutionScale(scale: number): void; - /** - * A higher sample count improves quality at the cost of performance. - * - * @type {Number} - * @deprecated Use godRaysMaterial.samples instead. - */ - set samples(arg: number); - /** - * The number of samples per pixel. - * - * @type {Number} - * @deprecated Use godRaysMaterial.samples instead. - */ - get samples(): number; - /** - * Sets the depth texture. - * - * @param {Texture} depthTexture - A depth texture. - * @param {Number} [depthPacking=BasicDepthPacking] - The depth packing. - */ - setDepthTexture(depthTexture: Texture, depthPacking?: number): void; - /** - * Updates this effect. - * - * @param {WebGLRenderer} renderer - The renderer. - * @param {WebGLRenderTarget} inputBuffer - A frame buffer that contains the result of the previous pass. - * @param {Number} [deltaTime] - The time between the last frame and the current one in seconds. - */ - update( - renderer: WebGLRenderer, - inputBuffer: WebGLRenderTarget, - deltaTime?: number - ): void; - - /** - * Updates the size of internal render targets. - * - * @param {Number} width - The width. - * @param {Number} height - The height. - */ - setSize(width: number, height: number): void; - /** - * Performs initialization tasks. - * - * @param {WebGLRenderer} renderer - The renderer. - * @param {Boolean} alpha - Whether the renderer uses the alpha channel or not. - * @param {Number} frameBufferType - The type of the main frame buffers. - */ - initialize( - renderer: WebGLRenderer, - alpha: boolean, - frameBufferType: number - ): void; - - } - - /** - * A grid effect. - */ - export class GridEffect extends Effect { - - /** - * Constructs a new grid effect. - * - * @param {Object} [options] - The options. - * @param {BlendFunction} [options.blendFunction=BlendFunction.OVERLAY] - The blend function of this effect. - * @param {Number} [options.scale=1.0] - The scale of the grid pattern. - * @param {Number} [options.lineWidth=0.0] - The line width of the grid pattern. - */ - constructor({ - blendFunction, - scale, - lineWidth - }?: { - blendFunction?: BlendFunction; - scale?: number; - lineWidth?: number; - }); - - set scale(arg: number); - /** - * The scale. - * - * @type {Number} - */ - get scale(): number; - set lineWidth(arg: number); - /** - * The line width. - * - * @type {Number} - */ - get lineWidth(): number; - /** - * Returns the current grid scale. - * - * @deprecated Use scale instead. - * @return {Number} The grid scale. - */ - getScale(): number; - /** - * Sets the grid scale. - * - * @deprecated Use scale instead. - * @param {Number} value - The new grid scale. - */ - setScale(value: number): void; - /** - * Returns the current grid line width. - * - * @deprecated Use lineWidth instead. - * @return {Number} The grid line width. - */ - getLineWidth(): number; - /** - * Sets the grid line width. - * - * @deprecated Use lineWidth instead. - * @param {Number} value - The new grid line width. - */ - setLineWidth(value: number): void; - /** - * Updates the size of this pass. - * - * @param {Number} width - The width. - * @param {Number} height - The height. - */ - setSize(width: number, height: number): void; - - } - - /** - * A hue/saturation effect. - * - * Reference: https://github.com/evanw/glfx.js - */ - export class HueSaturationEffect extends Effect { - - /** - * Constructs a new hue/saturation effect. - * - * @param {Object} [options] - The options. - * @param {BlendFunction} [options.blendFunction=BlendFunction.NORMAL] - The blend function of this effect. - * @param {Number} [options.hue=0.0] - The hue in radians. - * @param {Number} [options.saturation=0.0] - The saturation factor, ranging from -1 to 1, where 0 means no change. - */ - constructor({ - blendFunction, - hue, - saturation - }?: { - blendFunction?: BlendFunction; - hue?: number; - saturation?: number; - }); - - set hue(arg: number); - /** - * The hue. - * - * @type {Number} - */ - get hue(): number; - set saturation(arg: number); - /** - * The saturation. - * - * @type {Number} - */ - get saturation(): number; - /** - * Returns the saturation. - * - * @deprecated Use saturation instead. - * @return {Number} The saturation. - */ - getSaturation(): number; - /** - * Sets the saturation. - * - * @deprecated Use saturation instead. - * @param {Number} value - The saturation. - */ - setSaturation(value: number): void; - /** - * Returns the hue. - * - * @deprecated Use hue instead. - * @return {Number} The hue in radians. - */ - getHue(): number; - /** - * Sets the hue. - * - * @deprecated Use hue instead. - * @param {Number} value - The hue in radians. - */ - setHue(value: number): void; - - } - - /** - * A 1D LUT effect. - */ - - export class LUT1DEffect extends Effect { - - /** - * Constructs a new color grading effect. - * - * @param {Texture} lut - The lookup texture. - * @param {Object} [options] - The options. - * @param {BlendFunction} [options.blendFunction=BlendFunction.SET] - The blend function of this effect. - */ - constructor( - lut: Texture, - { - blendFunction - }?: { - blendFunction?: BlendFunction; - } - ); - - } - /** - * A LUT effect. - * - * The tetrahedral interpolation algorithm was inspired by an implementation from OpenColorIO which is licensed under - * the BSD 3-Clause License. - * - * The manual trilinear interpolation algorithm is based on an implementation by Garret Johnson which is licensed under - * the MIT License. - * - * References: - * https://developer.nvidia.com/gpugems/gpugems2/part-iii-high-quality-rendering/chapter-24-using-lookup-tables-accelerate-color - * https://www.nvidia.com/content/GTC/posters/2010/V01-Real-Time-Color-Space-Conversion-for-High-Resolution-Video.pdf - * https://github.com/AcademySoftwareFoundation/OpenColorIO/blob/master/src/OpenColorIO/ops/lut3d/ - * https://github.com/gkjohnson/threejs-sandbox/tree/master/3d-lut - */ - export class LUT3DEffect extends Effect { - - /** - * Constructs a new color grading effect. - * - * @param {Texture} lut - The lookup texture. - * @param {Object} [options] - The options. - * @param {BlendFunction} [options.blendFunction=BlendFunction.SET] - The blend function of this effect. - * @param {Boolean} [options.tetrahedralInterpolation=false] - Enables or disables tetrahedral interpolation. - * @param {TextureEncoding} [options.inputEncoding=sRGBEncoding] - Deprecated. - * @param {ColorSpace} [options.inputColorSpace=SRGBColorSpace] - The input color space. - */ - constructor( - lut: Texture, - { - blendFunction, - tetrahedralInterpolation, - inputEncoding, - inputColorSpace - }?: { - blendFunction?: BlendFunction; - tetrahedralInterpolation?: boolean; - inputEncoding?: TextureEncoding; - inputColorSpace?: ColorSpace; - } - ); - - /** - * Indicates whether tetrahedral interpolation is enabled. Requires a 3D LUT, disabled by default. - * - * Tetrahedral interpolation produces highly accurate results but is slower than hardware interpolation. - * - * @type {Boolean} - */ - get tetrahedralInterpolation(): boolean; - set tetrahedralInterpolation(arg: boolean); - /** - * The input encoding. Default is `sRGBEncoding`. - * - * Set this to `LinearEncoding` if your LUT expects linear color input. - * - * @deprecated Use inputColorSpace instead. - * @type {TextureEncoding} - */ - get inputEncoding(): TextureEncoding; - set inputEncoding(arg: TextureEncoding); - /** - * The LUT. - * - * @type {Texture} - */ - get lut(): Texture; - set lut(arg: Texture); - /** - * Returns the output encoding. - * - * @deprecated - * @return {TextureEncoding} The encoding. - */ - getOutputEncoding(): TextureEncoding; - /** - * Returns the input encoding. - * - * @deprecated Use inputEncoding instead. - * @return {TextureEncoding} The encoding. - */ - getInputEncoding(): TextureEncoding; - /** - * Sets the input encoding. - * - * @deprecated Use inputEncoding instead. - * @param {TextureEncoding} value - The encoding. - */ - setInputEncoding(value: TextureEncoding): void; - /** - * Returns the current LUT. - * - * @deprecated Use lut instead. - * @return {Texture} The LUT. - */ - getLUT(): Texture; - /** - * Sets the LUT. - * - * @deprecated Use lut instead. - * @param {Texture} value - The LUT. - */ - setLUT(value: Texture): void; - /** - * Enables or disables tetrahedral interpolation. - * - * @deprecated Use tetrahedralInterpolation instead. - * @param {Boolean} value - Whether tetrahedral interpolation should be enabled. - */ - setTetrahedralInterpolationEnabled(value: boolean): void; - - } - - /** - * A noise effect. - */ - export class NoiseEffect extends Effect { - - /** - * Constructs a new noise effect. - * - * @param {Object} [options] - The options. - * @param {BlendFunction} [options.blendFunction=BlendFunction.SCREEN] - The blend function of this effect. - * @param {Boolean} [options.premultiply=false] - Whether the noise should be multiplied with the input colors prior to blending. - */ - constructor({ - blendFunction, - premultiply - }?: { - blendFunction?: BlendFunction; - premultiply?: boolean; - }); - - set premultiply(arg: boolean); - /** - * Indicates whether noise will be multiplied with the input colors prior to blending. - * - * @type {Boolean} - */ - get premultiply(): boolean; - /** - * Indicates whether noise will be multiplied with the input colors prior to blending. - * - * @deprecated Use premultiply instead. - * @return {Boolean} Whether noise is premultiplied. - */ - isPremultiplied(): boolean; - /** - * Controls whether noise should be multiplied with the input colors prior to blending. - * - * @deprecated Use premultiply instead. - * @param {Boolean} value - Whether noise should be premultiplied. - */ - setPremultiplied(value: boolean): void; - - } - - /** - * An outline effect. - */ - export class OutlineEffect extends Effect { - - /** - * Constructs a new outline effect. - * - * @param {Scene} scene - The main scene. - * @param {Camera} camera - The main camera. - * @param {Object} [options] - The options. - * @param {BlendFunction} [options.blendFunction=BlendFunction.SCREEN] - The blend function. Use `BlendFunction.ALPHA` for dark outlines. - * @param {Texture} [options.patternTexture=null] - A pattern texture. - * @param {Number} [options.patternScale=1.0] - The pattern scale. - * @param {Number} [options.edgeStrength=1.0] - The edge strength. - * @param {Number} [options.pulseSpeed=0.0] - The pulse speed. A value of zero disables the pulse effect. - * @param {Number} [options.visibleEdgeColor=0xffffff] - The color of visible edges. - * @param {Number} [options.hiddenEdgeColor=0x22090a] - The color of hidden edges. - * @param {KernelSize} [options.kernelSize=KernelSize.VERY_SMALL] - The blur kernel size. - * @param {Boolean} [options.blur=false] - Whether the outline should be blurred. - * @param {Boolean} [options.xRay=true] - Whether occluded parts of selected objects should be visible. - * @param {Number} [options.multisampling=0] - The number of samples used for multisample antialiasing. Requires WebGL 2. - * @param {Number} [options.resolutionScale=0.5] - The resolution scale. - * @param {Number} [options.resolutionX=Resolution.AUTO_SIZE] - The horizontal resolution. - * @param {Number} [options.resolutionY=Resolution.AUTO_SIZE] - The vertical resolution. - * @param {Number} [options.width=Resolution.AUTO_SIZE] - Deprecated. Use resolutionX instead. - * @param {Number} [options.height=Resolution.AUTO_SIZE] - Deprecated. Use resolutionY instead. - */ - constructor( - scene?: Scene, - camera?: Camera, - { - blendFunction, - patternTexture, - patternScale, - edgeStrength, - pulseSpeed, - visibleEdgeColor, - hiddenEdgeColor, - multisampling, - resolutionScale, - resolutionX, - resolutionY, - width, - height, - kernelSize, - blur, - xRay - }?: { - blendFunction?: BlendFunction; - patternTexture?: Texture; - patternScale?: number; - edgeStrength?: number; - pulseSpeed?: number; - visibleEdgeColor?: number; - hiddenEdgeColor?: number; - multisampling?: number; - resolutionScale?: number; - resolutionX?: number; - resolutionY?: number; - width?: number; - height?: number; - kernelSize?: KernelSize; - blur?: boolean; - xRay?: boolean; - } - ); - - set patternTexture(arg: Texture); - /** - * The pattern texture. Set to `null` to disable. - * - * @type {Texture} - */ - get patternTexture(): Texture; - set xRay(arg: boolean); - /** - * Indicates whether X-ray mode is enabled. - * - * @type {Boolean} - */ - get xRay(): boolean; - /** - * A blur pass. - * - * @type {KawaseBlurPass} - */ - blurPass: KawaseBlurPass; - /** - * A selection of objects that will be outlined. - * - * The default layer of this selection is 10. - * - * @type {Selection} - */ - selection: Selection; - /** - * The pulse speed. Set to 0 to disable. - * - * @type {Number} - */ - pulseSpeed: number; - /** - * The resolution of this effect. - * - * @type {Resolution} - */ - get resolution(): Resolution; - /** - * Returns the resolution. - * - * @return {Resizer} The resolution. - */ - getResolution(): Resizer; - set patternScale(arg: number); - /** - * The pattern scale. - * - * @type {Number} - */ - get patternScale(): number; - set edgeStrength(arg: number); - /** - * The edge strength. - * - * @type {Number} - */ - get edgeStrength(): number; - set visibleEdgeColor(arg: Color); - /** - * The visible edge color. - * - * @type {Color} - */ - get visibleEdgeColor(): Color; - set hiddenEdgeColor(arg: Color); - /** - * The hidden edge color. - * - * @type {Color} - */ - get hiddenEdgeColor(): Color; - /** - * The amount of MSAA samples. - * - * Requires WebGL 2. Set to zero to disable multisampling. - * - * @experimental Requires three >= r138. - * @type {Number} - */ - get multisampling(): number; - set multisampling(arg: number); - /** - * Returns the blur pass. - * - * @deprecated Use blurPass instead. - * @return {KawaseBlurPass} The blur pass. - */ - getBlurPass(): KawaseBlurPass; - /** - * Returns the selection. - * - * @deprecated Use selection instead. - * @return {Selection} The selection. - */ - getSelection(): Selection; - /** - * Returns the pulse speed. - * - * @deprecated Use pulseSpeed instead. - * @return {Number} The speed. - */ - getPulseSpeed(): number; - /** - * Sets the pulse speed. Set to zero to disable. - * - * @deprecated Use pulseSpeed instead. - * @param {Number} value - The speed. - */ - setPulseSpeed(value: number): void; - set width(arg: number); - /** - * The current width of the internal render targets. - * - * @type {Number} - * @deprecated Use resolution.width instead. - */ - get width(): number; - set height(arg: number); - /** - * The current height of the internal render targets. - * - * @type {Number} - * @deprecated Use resolution.height instead. - */ - get height(): number; - set selectionLayer(arg: number); - /** - * The selection layer. - * - * @type {Number} - * @deprecated Use selection.layer instead. - */ - get selectionLayer(): number; - set dithering(arg: boolean); - /** - * Indicates whether dithering is enabled. - * - * @type {Boolean} - * @deprecated - */ - get dithering(): boolean; - set kernelSize(arg: KernelSize); - /** - * The blur kernel size. - * - * @type {KernelSize} - * @deprecated Use blurPass.kernelSize instead. - */ - get kernelSize(): KernelSize; - set blur(arg: boolean); - /** - * Indicates whether the outlines should be blurred. - * - * @type {Boolean} - * @deprecated Use blurPass.enabled instead. - */ - get blur(): boolean; - /** - * Indicates whether X-ray mode is enabled. - * - * @deprecated Use xRay instead. - * @return {Boolean} Whether X-ray mode is enabled. - */ - isXRayEnabled(): boolean; - /** - * Enables or disables X-ray outlines. - * - * @deprecated Use xRay instead. - * @param {Boolean} value - Whether X-ray should be enabled. - */ - setXRayEnabled(value: boolean): void; - /** - * Sets the pattern texture. - * - * @deprecated Use patternTexture instead. - * @param {Texture} value - The new texture. - */ - setPatternTexture(value: Texture): void; - /** - * Returns the current resolution scale. - * - * @return {Number} The resolution scale. - * @deprecated Use resolution instead. - */ - getResolutionScale(): number; - /** - * Sets the resolution scale. - * - * @param {Number} scale - The new resolution scale. - * @deprecated Use resolution instead. - */ - setResolutionScale(scale: number): void; - /** - * Clears the current selection and selects a list of objects. - * - * @param {Object3D[]} objects - The objects that should be outlined. This array will be copied. - * @return {OutlineEffect} This pass. - * @deprecated Use selection.set() instead. - */ - setSelection(objects: Object3D[]): OutlineEffect; - /** - * Clears the list of selected objects. - * - * @return {OutlineEffect} This pass. - * @deprecated Use selection.clear() instead. - */ - clearSelection(): OutlineEffect; - /** - * Selects an object. - * - * @param {Object3D} object - The object that should be outlined. - * @return {OutlineEffect} This pass. - * @deprecated Use selection.add() instead. - */ - selectObject(object: Object3D): OutlineEffect; - /** - * Deselects an object. - * - * @param {Object3D} object - The object that should no longer be outlined. - * @return {OutlineEffect} This pass. - * @deprecated Use selection.delete() instead. - */ - deselectObject(object: Object3D): OutlineEffect; - /** - * Updates this effect. - * - * @param {WebGLRenderer} renderer - The renderer. - * @param {WebGLRenderTarget} inputBuffer - A frame buffer that contains the result of the previous pass. - * @param {Number} [deltaTime] - The time between the last frame and the current one in seconds. - */ - update( - renderer: WebGLRenderer, - inputBuffer: WebGLRenderTarget, - deltaTime?: number - ): void; - - /** - * Updates the size of internal render targets. - * - * @param {Number} width - The width. - * @param {Number} height - The height. - */ - setSize(width: number, height: number): void; - /** - * Performs initialization tasks. - * - * @param {WebGLRenderer} renderer - The renderer. - * @param {Boolean} alpha - Whether the renderer uses the alpha channel or not. - * @param {Number} frameBufferType - The type of the main frame buffers. - */ - initialize( - renderer: WebGLRenderer, - alpha: boolean, - frameBufferType: number - ): void; - - } - - /** - * A pixelation effect. - * - * Warning: This effect cannot be merged with convolution effects. - */ - export class PixelationEffect extends Effect { - - /** - * Constructs a new pixelation effect. - * - * @param {Number} [granularity=30.0] - The pixel granularity. - */ - constructor(granularity?: number); - set granularity(arg: number); - /** - * The pixel granularity. - * - * A higher value yields coarser visuals. - * - * @type {Number} - */ - get granularity(): number; - /** - * Returns the pixel granularity. - * - * @deprecated Use granularity instead. - * @return {Number} The granularity. - */ - getGranularity(): number; - /** - * Sets the pixel granularity. - * - * @deprecated Use granularity instead. - * @param {Number} value - The new granularity. - */ - setGranularity(value: number): void; - /** - * Updates the granularity. - * - * @param {Number} width - The width. - * @param {Number} height - The height. - */ - setSize(width: number, height: number): void; - - } - - /** - * Depth of Field shader v2.4. - * - * Yields more realistic results but is also more demanding. - * - * Original shader code by Martins Upitis: - * http://blenderartists.org/forum/showthread.php?237488-GLSL-depth-of-field-with-bokeh-v2-4-(update) - * - * @deprecated Use DepthOfFieldEffect instead. - */ - export class RealisticBokehEffect extends Effect { - - /** - * Constructs a new bokeh effect. - * - * @param {Object} [options] - The options. - * @param {BlendFunction} [options.blendFunction=BlendFunction.NORMAL] - The blend function of this effect. - * @param {Number} [options.focus=1.0] - The focus distance in world units. - * @param {Number} [options.focalLength=24.0] - The focal length of the main camera. - * @param {Number} [options.fStop=0.9] - The ratio of the lens focal length to the diameter of the entrance pupil (aperture). - * @param {Number} [options.luminanceThreshold=0.5] - A luminance threshold. - * @param {Number} [options.luminanceGain=2.0] - A luminance gain factor. - * @param {Number} [options.bias=0.5] - A blur bias. - * @param {Number} [options.fringe=0.7] - A blur offset. - * @param {Number} [options.maxBlur=1.0] - The maximum blur strength. - * @param {Boolean} [options.rings=3] - The number of blur iterations. - * @param {Boolean} [options.samples=2] - The amount of samples taken per ring. - * @param {Boolean} [options.showFocus=false] - Whether the focal point should be highlighted. Useful for debugging. - * @param {Boolean} [options.manualDoF=false] - Enables manual control over the depth of field. - * @param {Boolean} [options.pentagon=false] - Enables pentagonal blur shapes. Requires a high number of rings and samples. - */ - constructor({ - blendFunction, - focus, - focalLength, - fStop, - luminanceThreshold, - luminanceGain, - bias, - fringe, - maxBlur, - rings, - samples, - showFocus, - manualDoF, - pentagon - }?: { - blendFunction?: BlendFunction; - focus?: number; - focalLength?: number; - fStop?: number; - luminanceThreshold?: number; - luminanceGain?: number; - bias?: number; - fringe?: number; - maxBlur?: number; - rings?: boolean; - samples?: boolean; - showFocus?: boolean; - manualDoF?: boolean; - pentagon?: boolean; - }); - - set rings(arg: number); - /** - * The amount of blur iterations. - * - * @type {Number} - */ - get rings(): number; - set samples(arg: number); - /** - * The amount of blur samples per ring. - * - * @type {Number} - */ - get samples(): number; - set showFocus(arg: boolean); - /** - * Indicates whether the focal point will be highlighted. - * - * @type {Boolean} - */ - get showFocus(): boolean; - set manualDoF(arg: boolean); - /** - * Indicates whether the Depth of Field should be calculated manually. - * - * If enabled, the Depth of Field can be adjusted via the `dof` uniform. - * - * @type {Boolean} - */ - get manualDoF(): boolean; - set pentagon(arg: boolean); - /** - * Indicates whether the blur shape should be pentagonal. - * - * @type {Boolean} - */ - get pentagon(): boolean; - - } - - /** - * A scanline effect. - * - * Based on an implementation by Georg 'Leviathan' Steinrohder (CC BY 3.0): - * http://www.truevision3d.com/forums/showcase/staticnoise_colorblackwhite_scanline_shaders-t18698.0.html - */ - export class ScanlineEffect extends Effect { - - /** - * Constructs a new scanline effect. - * - * @param {Object} [options] - The options. - * @param {BlendFunction} [options.blendFunction=BlendFunction.OVERLAY] - The blend function of this effect. - * @param {Number} [options.density=1.25] - The scanline density. - */ - constructor({ - blendFunction, - density - }?: { - blendFunction?: BlendFunction; - density?: number; - }); - - set density(arg: number); - /** - * The scanline density. - * - * @type {Number} - */ - get density(): number; - /** - * Returns the current scanline density. - * - * @deprecated Use density instead. - * @return {Number} The scanline density. - */ - getDensity(): number; - /** - * Sets the scanline density. - * - * @deprecated Use density instead. - * @param {Number} value - The new scanline density. - */ - setDensity(value: number): void; - /** - * Updates the size of this pass. - * - * @param {Number} width - The width. - * @param {Number} height - The height. - */ - setSize(width: number, height: number): void; - /** - * The scanline scroll speed. Default is 0 (disabled). - * - * @type {Number} - */ - get scrollSpeed(): number; - set scrollSpeed(value: number); - - } - - /** - * A selective bloom effect. - * - * This effect applies bloom to selected objects only. - */ - export class SelectiveBloomEffect extends BloomEffect { - - /** - * Constructs a new selective bloom effect. - * - * @param {Scene} scene - The main scene. - * @param {Camera} camera - The main camera. - * @param {BloomEffectOptions} [options] - The options. See {@link BloomEffect} for details. - */ - constructor(scene?: Scene, camera?: Camera, options?: BloomEffectOptions); - /** - * A selection of objects. - * - * The default layer of this selection is 11. - * - * @type {Selection} - */ - selection: Selection; - /** - * Returns the selection. - * - * @deprecated Use selection instead. - * @return {Selection} The selection. - */ - getSelection(): Selection; - set inverted(arg: boolean); - /** - * Indicates whether the selection should be considered inverted. - * - * @type {Boolean} - */ - get inverted(): boolean; - /** - * Indicates whether the mask is inverted. - * - * @deprecated Use inverted instead. - * @return {Boolean} Whether the mask is inverted. - */ - isInverted(): boolean; - /** - * Enables or disable mask inversion. - * - * @deprecated Use inverted instead. - * @param {Boolean} value - Whether the mask should be inverted. - */ - setInverted(value: boolean): void; - set ignoreBackground(arg: boolean); - /** - * Indicates whether the background colors will be ignored. - * - * @type {Boolean} - */ - get ignoreBackground(): boolean; - /** - * Indicates whether the background is disabled. - * - * @deprecated Use ignoreBackground instead. - * @return {Boolean} Whether the background is disabled. - */ - isBackgroundDisabled(): boolean; - /** - * Enables or disables the background. - * - * @deprecated Use ignoreBackground instead. - * @param {Boolean} value - Whether the background should be disabled. - */ - setBackgroundDisabled(value: boolean): void; - /** - * Sets the depth texture. - * - * @param {Texture} depthTexture - A depth texture. - * @param {DepthPackingStrategies} [depthPacking=BasicDepthPacking] - The depth packing. - */ - setDepthTexture( - depthTexture: Texture, - depthPacking?: DepthPackingStrategies - ): void; - - /** - * Updates this effect. - * - * @param {WebGLRenderer} renderer - The renderer. - * @param {WebGLRenderTarget} inputBuffer - A frame buffer that contains the result of the previous pass. - * @param {Number} [deltaTime] - The time between the last frame and the current one in seconds. - */ - update( - renderer: WebGLRenderer, - inputBuffer: WebGLRenderTarget, - deltaTime: number - ): void; - - /** - * Updates the size of internal render targets. - * - * @param {Number} width - The width. - * @param {Number} height - The height. - */ - setSize(width: number, height: number): void; - - /** - * Performs initialization tasks. - * - * @param {WebGLRenderer} renderer - The renderer. - * @param {Boolean} alpha - Whether the renderer uses the alpha channel. - * @param {Number} frameBufferType - The type of the main frame buffers. - */ - initialize( - renderer: WebGLRenderer, - alpha: boolean, - frameBufferType: number - ): void; - - } - - /** - * A sepia effect. - */ - export class SepiaEffect extends Effect { - - /** - * Constructs a new sepia effect. - * - * @param {Object} [options] - The options. - * @param {BlendFunction} [options.blendFunction=BlendFunction.NORMAL] - The blend function of this effect. - * @param {Number} [options.intensity=1.0] - The intensity of the effect. - */ - constructor({ - blendFunction, - intensity - }?: { - blendFunction?: BlendFunction; - intensity?: number; - }); - - set intensity(arg: number); - /** - * The intensity. - * - * @deprecated Use blendMode.opacity instead. - * @type {Number} - */ - get intensity(): number; - /** - * Returns the current sepia intensity. - * - * @deprecated Use blendMode.opacity instead. - * @return {Number} The intensity. - */ - getIntensity(): number; - /** - * Sets the sepia intensity. - * - * @deprecated Use blendMode.opacity instead. - * @param {Number} value - The intensity. - */ - setIntensity(value: number): void; - - } - - /** - * A shock wave effect. - * - * Based on a Gist by Jean-Philippe Sarda: - * https://gist.github.com/jpsarda/33cea67a9f2ecb0a0eda - */ - export class ShockWaveEffect extends Effect { - - /** - * Constructs a new shock wave effect. - * - * @param {Camera} camera - The main camera. - * @param {Vector3} [position] - The world position of the shock wave. - * @param {Object} [options] - The options. - * @param {Number} [options.speed=2.0] - The animation speed. - * @param {Number} [options.maxRadius=1.0] - The extent of the shock wave. - * @param {Number} [options.waveSize=0.2] - The wave size. - * @param {Number} [options.amplitude=0.05] - The distortion amplitude. - */ - constructor( - camera?: Camera, - position?: Vector3, - { - speed, - maxRadius, - waveSize, - amplitude - }?: { - speed?: number; - maxRadius?: number; - waveSize?: number; - amplitude?: number; - } - ); - - /** - * The position of the shock wave. - * - * @type {Vector3} - */ - position: Vector3; - /** - * The speed of the shock wave animation. - * - * @type {Number} - */ - speed: number; - set amplitude(arg: number); - /** - * The amplitude. - * - * @type {Number} - */ - get amplitude(): number; - set waveSize(arg: number); - /** - * The wave size. - * - * @type {Number} - */ - get waveSize(): number; - set maxRadius(arg: number); - /** - * The maximum radius. - * - * @type {Number} - */ - get maxRadius(): number; - set epicenter(arg: Vector3); - /** - * The position of the shock wave. - * - * @type {Vector3} - * @deprecated Use position instead. - */ - get epicenter(): Vector3; - /** - * Returns the position of the shock wave. - * - * @deprecated Use position instead. - * @return {Vector3} The position. - */ - getPosition(): Vector3; - /** - * Sets the position of the shock wave. - * - * @deprecated Use position instead. - * @param {Vector3} value - The position. - */ - setPosition(value: Vector3): void; - /** - * Returns the speed of the shock wave. - * - * @deprecated Use speed instead. - * @return {Number} The speed. - */ - getSpeed(): number; - /** - * Sets the speed of the shock wave. - * - * @deprecated Use speed instead. - * @param {Number} value - The speed. - */ - setSpeed(value: number): void; - /** - * Emits the shock wave. - */ - explode(): void; - /** - * Updates this effect. - * - * @param {WebGLRenderer} renderer - The renderer. - * @param {WebGLRenderTarget} inputBuffer - A frame buffer that contains the result of the previous pass. - * @param {Number} [delta] - The time between the last frame and the current one in seconds. - */ - - update( - renderer: WebGLRenderer, - inputBuffer: WebGLRenderTarget, - delta: number - ): void; - - } - - /** - * NVIDIA FXAA 3.11 by Timothy Lottes: - * https://developer.download.nvidia.com/assets/gamedev/files/sdk/11/FXAA_WhitePaper.pdf - * - * Based on an implementation by Simon Rodriguez: - * https://github.com/kosua20/Rendu/blob/master/resources/common/shaders/screens/fxaa.frag - */ - export class FXAAEffect extends Effect { - - /** - * Constructs a new FXAA effect. - * - * @param {Object} [options] - The options. - * @param {BlendFunction} [options.blendFunction=BlendFunction.SRC] - The blend function of this effect. - */ - constructor({ - blendFunction - }?: { - blendFunction?: BlendFunction - }); - - /** - * The minimum edge detection threshold. Range is [0.0, 1.0]. - * - * @type {Number} - */ - get minEdgeThreshold(): number; - set minEdgeThreshold(arg: number); - - /** - * The maximum edge detection threshold. Range is [0.0, 1.0]. - * - * @type {Number} - */ - get maxEdgeThreshold(): number; - set maxEdgeThreshold(arg: number); - - /** - * The subpixel blend quality. Range is [0.0, 1.0]. - * - * @type {Number} - */ - get subpixelQuality(): number; - set subpixelQuality(arg: number); - - /** - * The maximum amount of edge detection samples. - * - * @type {Number} - */ - get samples(): number; - set samples(arg: number); - - } - - /** - * Subpixel Morphological Antialiasing (SMAA). - * - * https://github.com/iryoku/smaa/releases/tag/v2.8 - */ - export class SMAAEffect extends Effect { - - /** - * The SMAA search image, encoded as a base64 data URL. - * - * @type {String} - * @deprecated - */ - static get searchImageDataURL(): string; - /** - * The SMAA area image, encoded as a base64 data URL. - * - * @type {String} - * @deprecated - */ - static get areaImageDataURL(): string; - /** - * Constructs a new SMAA effect. - * - * @param {Object} [options] - The options. - * @param {SMAAPreset} [options.preset=SMAAPreset.MEDIUM] - The quality preset. - * @param {EdgeDetectionMode} [options.edgeDetectionMode=EdgeDetectionMode.COLOR] - The edge detection mode. - * @param {PredicationMode} [options.predicationMode=PredicationMode.DISABLED] - The predication mode. - */ - constructor({ - preset, - edgeDetectionMode, - predicationMode - }?: { - preset?: SMAAPreset; - edgeDetectionMode?: EdgeDetectionMode; - predicationMode?: PredicationMode; - }); - - /** - * The edges texture. - * - * @type {Texture} - */ - get edgesTexture(): Texture; - /** - * Returns the edges texture. - * - * @deprecated Use edgesTexture instead. - * @return {Texture} The texture. - */ - getEdgesTexture(): Texture; - /** - * The edge weights texture. - * - * @type {Texture} - */ - get weightsTexture(): Texture; - /** - * Returns the edge weights texture. - * - * @deprecated Use weightsTexture instead. - * @return {Texture} The texture. - */ - getWeightsTexture(): Texture; - /** - * The edge detection material. - * - * @type {EdgeDetectionMaterial} - */ - get edgeDetectionMaterial(): EdgeDetectionMaterial; - /** - * The edge detection material. - * - * @type {EdgeDetectionMaterial} - * @deprecated Use edgeDetectionMaterial instead. - */ - get colorEdgesMaterial(): EdgeDetectionMaterial; - /** - * Returns the edge detection material. - * - * @deprecated Use edgeDetectionMaterial instead. - * @return {EdgeDetectionMaterial} The material. - */ - getEdgeDetectionMaterial(): EdgeDetectionMaterial; - /** - * The edge weights material. - * - * @type {SMAAWeightsMaterial} - */ - get weightsMaterial(): SMAAWeightsMaterial; - /** - * Returns the edge weights material. - * - * @deprecated Use weightsMaterial instead. - * @return {SMAAWeightsMaterial} The material. - */ - getWeightsMaterial(): SMAAWeightsMaterial; - /** - * Sets the edge detection sensitivity. - * - * See {@link EdgeDetectionMaterial#setEdgeDetectionThreshold} for more details. - * - * @deprecated Use edgeDetectionMaterial instead. - * @param {Number} threshold - The edge detection sensitivity. Range: [0.05, 0.5]. - */ - setEdgeDetectionThreshold(threshold: number): void; - /** - * Sets the maximum amount of horizontal/vertical search steps. - * - * See {@link SMAAWeightsMaterial#setOrthogonalSearchSteps} for more details. - * - * @deprecated Use weightsMaterial instead. - * @param {Number} steps - The search steps. Range: [0, 112]. - */ - setOrthogonalSearchSteps(steps: number): void; - /** - * Applies the given quality preset. - * - * @param {SMAAPreset} preset - The preset. - */ - applyPreset(preset: SMAAPreset): void; - /** - * Sets the depth texture. - * - * @param {Texture} depthTexture - A depth texture. - * @param {DepthPackingStrategies} [depthPacking=BasicDepthPacking] - The depth packing. - */ - setDepthTexture( - depthTexture: Texture, - depthPacking?: DepthPackingStrategies - ): void; - - /** - * Updates this effect. - * - * @param {WebGLRenderer} renderer - The renderer. - * @param {WebGLRenderTarget} inputBuffer - A frame buffer that contains the result of the previous pass. - * @param {Number} [deltaTime] - The time between the last frame and the current one in seconds. - */ - update( - renderer: WebGLRenderer, - inputBuffer: WebGLRenderTarget, - deltaTime?: number - ): void; - - /** - * Updates the size of internal render targets. - * - * @param {Number} width - The width. - * @param {Number} height - The height. - */ - setSize(width: number, height: number): void; - /** - * Deletes internal render targets and textures. - */ - dispose(): void; - - } - - /** - * An enumeration of SMAA presets. + * @param {Number} [width=0] - The width of the image. + * @param {Number} [height=0] - The height of the image. + * @param {Uint8ClampedArray} [data=null] - The image data. + */ + constructor(width?: number, height?: number, data?: Uint8ClampedArray); + + colorSpace: PredefinedColorSpace; + /** + * The width of the image. * - * @type {Object} - * @property {Number} LOW - Results in around 60% of the maximum quality. - * @property {Number} MEDIUM - Results in around 80% of the maximum quality. - * @property {Number} HIGH - Results in around 95% of the maximum quality. - * @property {Number} ULTRA - Results in around 99% of the maximum quality. - */ - export enum SMAAPreset { - LOW, - MEDIUM, - HIGH, - ULTRA, - } - - /** - * A Screen Space Ambient Occlusion (SSAO) effect. - * - * For high quality visuals use two SSAO effect instances in a row with different radii, one for rough AO and one for - * fine details. - * - * This effect supports depth-aware upsampling and should be rendered at a lower resolution. The resolution should match - * that of the downsampled normals and depth. If you intend to render SSAO at full resolution, do not provide a - * downsampled `normalDepthBuffer`. - * - * It's recommended to specify a relative render resolution using the `resolutionScale` constructor parameter to avoid - * undesired sampling patterns. - * - * Based on "Scalable Ambient Obscurance" by Morgan McGuire et al. and "Depth-aware upsampling experiments" by Eleni - * Maria Stea: - * https://research.nvidia.com/publication/scalable-ambient-obscurance - * https://eleni.mutantstargoat.com/hikiko/on-depth-aware-upsampling - * - * The view position calculation is based on a shader by Norbert Nopper: - * https://github.com/McNopper/OpenGL/blob/master/Example28/shader/ssao.frag.glsl - */ - export class SSAOEffect extends Effect { - - /** - * Constructs a new SSAO effect. - * - * @todo Move normalBuffer to options. - * @param {Camera} [camera] - The main camera. - * @param {Texture} [normalBuffer] - A texture that contains the scene normals. - * @param {Object} [options] - The options. - * @param {BlendFunction} [options.blendFunction=BlendFunction.MULTIPLY] - The blend function of this effect. - * @param {Boolean} [options.distanceScaling=true] - Deprecated. - * @param {Boolean} [options.depthAwareUpsampling=true] - Enables or disables depth-aware upsampling. Has no effect if WebGL 2 is not supported. - * @param {Texture} [options.normalDepthBuffer=null] - Deprecated. - * @param {Number} [options.samples=9] - The amount of samples per pixel. Should not be a multiple of the ring count. - * @param {Number} [options.rings=7] - The amount of spiral turns in the occlusion sampling pattern. Should be a prime number. - * @param {Number} [options.worldDistanceThreshold] - The world distance threshold at which the occlusion effect starts to fade out. - * @param {Number} [options.worldDistanceFalloff] - The world distance falloff. Influences the smoothness of the occlusion cutoff. - * @param {Number} [options.worldProximityThreshold] - The world proximity threshold at which the occlusion starts to fade out. - * @param {Number} [options.worldProximityFalloff] - The world proximity falloff. Influences the smoothness of the proximity cutoff. - * @param {Number} [options.distanceThreshold=0.97] - Deprecated. - * @param {Number} [options.distanceFalloff=0.03] - Deprecated. - * @param {Number} [options.rangeThreshold=0.0005] - Deprecated. - * @param {Number} [options.rangeFalloff=0.001] - Deprecated. - * @param {Number} [options.minRadiusScale=0.1] - The minimum radius scale. - * @param {Number} [options.luminanceInfluence=0.7] - Determines how much the luminance of the scene influences the ambient occlusion. - * @param {Number} [options.radius=0.1825] - The occlusion sampling radius, expressed as a scale relative to the resolution. Range [1e-6, 1.0]. - * @param {Number} [options.intensity=1.0] - The intensity of the ambient occlusion. - * @param {Number} [options.bias=0.025] - An occlusion bias. Eliminates artifacts caused by depth discontinuities. - * @param {Number} [options.fade=0.01] - Influences the smoothness of the shadows. A lower value results in higher contrast. - * @param {Color} [options.color=null] - The color of the ambient occlusion. - * @param {Number} [options.resolutionScale=1.0] - The resolution scale. - * @param {Number} [options.resolutionX=Resolution.AUTO_SIZE] - The horizontal resolution. - * @param {Number} [options.resolutionY=Resolution.AUTO_SIZE] - The vertical resolution. - * @param {Number} [options.width=Resolution.AUTO_SIZE] - Deprecated. Use resolutionX instead. - * @param {Number} [options.height=Resolution.AUTO_SIZE] - Deprecated. Use resolutionY instead. - */ - constructor( - camera?: Camera, - normalBuffer?: Texture, - { - blendFunction, - distanceScaling, - depthAwareUpsampling, - normalDepthBuffer, - samples, - rings, - worldDistanceThreshold, - worldDistanceFalloff, - worldProximityThreshold, - worldProximityFalloff, - distanceThreshold, - distanceFalloff, - rangeThreshold, - rangeFalloff, - minRadiusScale, - luminanceInfluence, - radius, - intensity, - bias, - fade, - color, - resolutionScale, - resolutionX, - resolutionY, - width, - height - }?: { - blendFunction?: BlendFunction; - distanceScaling?: boolean; - depthAwareUpsampling?: boolean; - normalDepthBuffer?: Texture; - samples?: number; - rings?: number; - worldDistanceThreshold: number; - worldDistanceFalloff: number; - worldProximityThreshold: number; - worldProximityFalloff: number; - distanceThreshold?: number; - distanceFalloff?: number; - rangeThreshold?: number; - rangeFalloff?: number; - minRadiusScale?: number; - luminanceInfluence?: number; - radius?: number; - intensity?: number; - bias?: number; - fade?: number; - color?: Color; - resolutionScale?: number; - resolutionX?: number; - resolutionY?: number; - width?: number; - height?: number; - } - ); - - resolution: Resolution; - /** - * Sets the normal buffer. - * - * @type {Texture} - */ - get normalBuffer(): Texture | null; - set normalBuffer(value: Texture | null); - /** - * Indicates whether depth-aware upsampling is enabled. - * - * @type {Boolean} - */ - get depthAwareUpsampling(): boolean; - set depthAwareUpsampling(arg: boolean); - /** - * The color of the ambient occlusion. Set to `null` to disable. - * - * @type {Color} - */ - get color(): Color; - set color(arg: Color); - /** - * Returns the resolution settings. - * - * @deprecated Use resolution instead. - * @return {Resolution} The resolution. - */ - getResolution(): Resolution; - /** - * The SSAO material. - * - * @type {SSAOMaterial} - */ - get ssaoMaterial(): SSAOMaterial; - /** - * Returns the SSAO material. - * - * @deprecated Use ssaoMaterial instead. - * @return {SSAOMaterial} The material. - */ - getSSAOMaterial(): SSAOMaterial; - /** - * The amount of occlusion samples per pixel. - * - * @type {Number} - * @deprecated Use ssaoMaterial.samples instead. - */ - get samples(): number; - set samples(arg: number); - /** - * The amount of spiral turns in the occlusion sampling pattern. - * - * @type {Number} - * @deprecated Use ssaoMaterial.rings instead. - */ - get rings(): number; - set rings(arg: number); - /** - * The occlusion sampling radius. - * - * @type {Number} - * @deprecated Use ssaoMaterial.radius instead. - */ - get radius(): number; - set radius(arg: number); - /** - * The intensity. - * - * @type {Number} - */ - get intensity(): number; - set intensity(arg: number); - /** - * Indicates whether depth-aware upsampling is enabled. - * - * @deprecated Use depthAwareUpsampling instead. - * @return {Boolean} Whether depth-aware upsampling is enabled. - */ - isDepthAwareUpsamplingEnabled(): boolean; - /** - * Enables or disables depth-aware upsampling. - * - * @deprecated Use depthAwareUpsampling instead. - * @param {Boolean} value - Whether depth-aware upsampling should be enabled. - */ - setDepthAwareUpsamplingEnabled(value: boolean): void; - /** - * Indicates whether distance-based radius scaling is enabled. - * - * @type {Boolean} - * @deprecated Use ssaoMaterial.distanceScaling instead. - */ - get distanceScaling(): boolean; - set distanceScaling(arg: boolean); - /** - * Returns the color of the ambient occlusion. - * - * @deprecated Use color instead. - * @return {Color} The color. - */ - getColor(): Color; - /** - * Sets the color of the ambient occlusion. Set to `null` to disable colorization. - * - * @deprecated Use color instead. - * @param {Color} value - The color. - */ - setColor(value: Color): void; - /** - * Sets the occlusion distance cutoff. - * - * @deprecated Use ssaoMaterial instead. - * @param {Number} threshold - The distance threshold. Range [0.0, 1.0]. - * @param {Number} falloff - The falloff. Range [0.0, 1.0]. - */ - setDistanceCutoff(threshold: number, falloff: number): void; - /** - * Sets the occlusion proximity cutoff. - * - * @deprecated Use ssaoMaterial instead. - * @param {Number} threshold - The proximity threshold. Range [0.0, 1.0]. - * @param {Number} falloff - The falloff. Range [0.0, 1.0]. - */ - setProximityCutoff(threshold: number, falloff: number): void; - /** - * Updates this effect. - * - * @param {WebGLRenderer} renderer - The renderer. - * @param {WebGLRenderTarget} inputBuffer - A frame buffer that contains the result of the previous pass. - * @param {Number} [deltaTime] - The time between the last frame and the current one in seconds. - */ - update( - renderer: WebGLRenderer, - inputBuffer: WebGLRenderTarget, - deltaTime?: number - ): void; - /** - * Sets the size. - * - * @param {Number} width - The width. - * @param {Number} height - The height. - */ - setSize(width: number, height: number): void; - /** - * The luminance influence factor. Range: [0.0, 1.0]. - * - * @type {Boolean} - */ - get luminanceInfluence(): boolean; - set luminanceInfluence(value: boolean); - - } - - /** - * A texture effect. - */ - export class TextureEffect extends Effect { - - /** - * Constructs a new texture effect. - * - * @param {Object} [options] - The options. - * @param {BlendFunction} [options.blendFunction=BlendFunction.NORMAL] - The blend function of this effect. - * @param {Texture} [options.texture] - A texture. - * @param {Boolean} [options.aspectCorrection=false] - Deprecated. Adjust the texture's offset, repeat and center instead. - */ - constructor({ - blendFunction, - texture, - aspectCorrection - }?: { - blendFunction?: BlendFunction; - texture?: Texture; - aspectCorrection?: boolean; - }); - - set texture(arg: Texture); - /** - * The texture. - * - * @type {Texture} - */ - get texture(): Texture; - set aspectCorrection(arg: number); - /** - * Indicates whether aspect correction is enabled. - * - * @type {Number} - * @deprecated Adjust the texture's offset, repeat, rotation and center instead. - */ - get aspectCorrection(): number; - /** - * Returns the texture. - * - * @deprecated Use texture instead. - * @return {Texture} The texture. - */ - getTexture(): Texture; - /** - * Sets the texture. - * - * @deprecated Use texture instead. - * @param {Texture} value - The texture. - */ - setTexture(value: Texture): void; - set uvTransform(arg: boolean); - /** - * Indicates whether the texture UV coordinates will be transformed using the transformation matrix of the texture. - * - * @type {Boolean} - * @deprecated Use texture.matrixAutoUpdate instead. - */ - get uvTransform(): boolean; - /** - * Sets the swizzles that will be applied to the components of a texel before it is written to the output color. - * - * @param {ColorChannel} r - The swizzle for the `r` component. - * @param {ColorChannel} [g=r] - The swizzle for the `g` component. - * @param {ColorChannel} [b=r] - The swizzle for the `b` component. - * @param {ColorChannel} [a=r] - The swizzle for the `a` component. - */ - setTextureSwizzleRGBA( - r: ColorChannel, - g?: ColorChannel, - b?: ColorChannel, - a?: ColorChannel - ): void; - - /** - * Updates this effect. - * - * @param {WebGLRenderer} renderer - The renderer. - * @param {WebGLRenderTarget} inputBuffer - A frame buffer that contains the result of the previous pass. - * @param {Number} [deltaTime] - The time between the last frame and the current one in seconds. - */ - - update( - renderer: WebGLRenderer, - inputBuffer: WebGLRenderTarget, - deltaTime: number - ): void; - - /** - * Performs initialization tasks. - * - * @param {WebGLRenderer} renderer - The renderer. - * @param {Boolean} alpha - Whether the renderer uses the alpha channel or not. - * @param {Number} frameBufferType - The type of the main frame buffers. - */ - - initialize( - renderer: WebGLRenderer, - alpha: boolean, - frameBufferType: number - ): void; - - } - - /** - * A tone mapping mode enumeration. + * @type {Number} + */ + width: number; + /** + * The height of the image. * - * @type {Object} - * @property {Number} REINHARD - Simple Reinhard tone mapping. - * @property {Number} REINHARD2 - Modified Reinhard tone mapping. - * @property {Number} REINHARD2_ADAPTIVE - Simulates the optic nerve responding to the amount of light it is receiving. - * @property {Number} UNCHARTED2 - Uncharted 2 tone mapping. http://filmicworlds.com/blog/filmic-tonemapping-operators. - * @property {Number} OPTIMIZED_CINEON - Optimized filmic operator by Jim Hejl and Richard Burgess-Dawson. - * @property {Number} ACES_FILMIC - ACES tone mapping with a scale of 1.0/0.6. - * @property {Number} AGX - Filmic tone mapping. Requires three r160 or higher. https://github.com/EaryChow/AgX. - */ - export enum ToneMappingMode { - REINHARD, - REINHARD2, - REINHARD2_ADAPTIVE, - UNCHARTED2, - OPTIMIZED_CINEON, - ACES_FILMIC, - AGX, - } - - /** - * A tone mapping effect. - * - * Note: `ToneMappingMode.REINHARD2_ADAPTIVE` requires support for `EXT_shader_texture_lod`. - * - * Reference: - * GDC2007 - Wolfgang Engel, Post-Processing Pipeline - * http://perso.univ-lyon1.fr/jean-claude.iehl/Public/educ/GAMA/2007/gdc07/Post-Processing_Pipeline.pdf - */ - export class ToneMappingEffect extends Effect { - - /** - * Constructs a new tone mapping effect. - * - * The additional parameters only affect the Reinhard2 operator. - * - * @param {Object} [options] - The options. - * @param {BlendFunction} [options.blendFunction=BlendFunction.NORMAL] - The blend function of this effect. - * @param {Boolean} [options.adaptive=false] - Deprecated. Use mode instead. - * @param {ToneMappingMode} [options.mode=ToneMappingMode.ACES_FILMIC] - The tone mapping mode. - * @param {Number} [options.resolution=256] - The resolution of the luminance texture. Must be a power of two. - * @param {Number} [options.maxLuminance=4.0] - Deprecated. Same as whitePoint. - * @param {Number} [options.whitePoint=4.0] - The white point. - * @param {Number} [options.middleGrey=0.6] - The middle grey factor. - * @param {Number} [options.minLuminance=0.01] - The minimum luminance. Prevents very high exposure in dark scenes. - * @param {Number} [options.averageLuminance=1.0] - The average luminance. Used for the non-adaptive Reinhard operator. - * @param {Number} [options.adaptationRate=1.0] - The luminance adaptation rate. - */ - constructor({ - blendFunction, - adaptive, - mode, - resolution, - maxLuminance, - whitePoint, - middleGrey, - minLuminance, - averageLuminance, - adaptationRate - }?: { - blendFunction?: BlendFunction; - adaptive?: boolean; - mode?: ToneMappingMode; - resolution?: number; - maxLuminance?: number; - whitePoint?: number; - middleGrey?: number; - minLuminance?: number; - averageLuminance?: number; - adaptationRate?: number; - }); - - set resolution(arg: number); - /** - * The resolution of the luminance texture. Must be a power of two. - * - * @type {Number} - */ - get resolution(): number; - set mode(arg: ToneMappingMode); - /** - * The tone mapping mode. - * - * @type {ToneMappingMode} - */ - get mode(): ToneMappingMode; - /** - * The white point. Default is `16.0`. - * - * Only applies to Reinhard2 (Modified & Adaptive). - * - * @type {Number} - */ - get whitePoint(): number; - /** - * The middle grey factor. Default is `0.6`. - * - * Only applies to Reinhard2 (Modified & Adaptive). - * - * @type {Number} - */ - get middleGrey(): number; - /** - * The average luminance. - * - * Only applies to Reinhard2 (Modified). - * - * @type {Number} - */ - get averageLuminance(): number; - /** - * Returns the current tone mapping mode. - * - * @deprecated Use mode instead. - * @return {ToneMappingMode} The tone mapping mode. - */ - getMode(): ToneMappingMode; - /** - * Sets the tone mapping mode. - * - * @deprecated Use mode instead. - * @param {ToneMappingMode} value - The tone mapping mode. - */ - setMode(value: ToneMappingMode): void; - /** - * The adaptive luminance material. - * - * @type {AdaptiveLuminanceMaterial} - */ - get adaptiveLuminanceMaterial(): AdaptiveLuminanceMaterial; - /** - * Returns the adaptive luminance material. - * - * @deprecated Use adaptiveLuminanceMaterial instead. - * @return {AdaptiveLuminanceMaterial} The material. - */ - getAdaptiveLuminanceMaterial(): AdaptiveLuminanceMaterial; - /** - * Returns the resolution of the luminance texture. - * - * @deprecated Use resolution instead. - * @return {Number} The resolution. - */ - getResolution(): number; - /** - * Sets the resolution of the luminance texture. Must be a power of two. - * - * @deprecated Use resolution instead. - * @param {Number} value - The resolution. - */ - setResolution(value: number): void; - set adaptive(arg: boolean); - /** - * Indicates whether this pass uses adaptive luminance. - * - * @type {Boolean} - * @deprecated Use mode instead. - */ - get adaptive(): boolean; - set adaptationRate(arg: number); - /** - * The luminance adaptation rate. - * - * @type {Number} - * @deprecated Use adaptiveLuminanceMaterial.adaptationRate instead. - */ - get adaptationRate(): number; - set distinction(arg: number); - /** - * @type {Number} - * @deprecated - */ - get distinction(): number; - /** - * Updates this effect. - * - * @param {WebGLRenderer} renderer - The renderer. - * @param {WebGLRenderTarget} inputBuffer - A frame buffer that contains the result of the previous pass. - * @param {Number} [deltaTime] - The time between the last frame and the current one in seconds. - */ - update( - renderer: WebGLRenderer, - inputBuffer: WebGLRenderTarget, - deltaTime?: number - ): void; - - /** - * Performs initialization tasks. - * - * @param {WebGLRenderer} renderer - The renderer. - * @param {Boolean} alpha - Whether the renderer uses the alpha channel or not. - * @param {Number} frameBufferType - The type of the main frame buffers. - */ - initialize( - renderer: WebGLRenderer, - alpha: boolean, - frameBufferType: number - ): void; - - } - - /** - * An enumeration of Vignette techniques. + * @type {Number} + */ + height: number; + /** + * The RGBA image data. * - * @type {Object} - * @property {Number} DEFAULT - Produces a dusty look. - * @property {Number} ESKIL - Produces a burned look. - */ - export enum VignetteTechnique { - DEFAULT, - ESKIL, - } - /** - * A Vignette effect. - */ - export class VignetteEffect extends Effect { - - /** - * Constructs a new Vignette effect. - * - * @param {Object} [options] - The options. - * @param {BlendFunction} [options.blendFunction=BlendFunction.NORMAL] - The blend function of this effect. - * @param {VignetteTechnique} [options.technique=VignetteTechnique.DEFAULT] - The Vignette technique. - * @param {Boolean} [options.eskil=false] - Deprecated. Use technique instead. - * @param {Number} [options.offset=0.5] - The Vignette offset. - * @param {Number} [options.darkness=0.5] - The Vignette darkness. - */ - constructor({ - blendFunction, - technique, - eskil, - offset, - darkness - }?: { - blendFunction?: BlendFunction; - technique?: VignetteTechnique; - eskil?: boolean; - offset?: number; - darkness?: number; - }); - - set technique(arg: VignetteTechnique); - /** - * The Vignette technique. - * - * @type {VignetteTechnique} - */ - get technique(): VignetteTechnique; - /** - * Indicates whether Eskil's Vignette technique is enabled. - * - * @type {Boolean} - * @deprecated Use technique instead. - */ - set eskil(arg: boolean); - /** - * Indicates whether Eskil's Vignette technique is enabled. - * - * @type {Boolean} - * @deprecated Use technique instead. - */ - get eskil(): boolean; - /** - * Returns the Vignette technique. - * - * @deprecated Use technique instead. - * @return {VignetteTechnique} The technique. - */ - getTechnique(): VignetteTechnique; - /** - * Sets the Vignette technique. - * - * @deprecated Use technique instead. - * @param {VignetteTechnique} value - The technique. - */ - setTechnique(value: VignetteTechnique): void; - set offset(arg: number); - /** - * The Vignette offset. - * - * @type {Number} - */ - get offset(): number; - /** - * Returns the Vignette offset. - * - * @deprecated Use offset instead. - * @return {Number} The offset. - */ - getOffset(): number; - /** - * Sets the Vignette offset. - * - * @deprecated Use offset instead. - * @param {Number} value - The offset. - */ - setOffset(value: number): void; - set darkness(arg: number); - /** - * The Vignette darkness. - * - * @type {Number} - */ - get darkness(): number; - /** - * Returns the Vignette darkness. - * - * @deprecated Use darkness instead. - * @return {Number} The darkness. - */ - getDarkness(): number; - /** - * Sets the Vignette darkness. - * - * @deprecated Use darkness instead. - * @param {Number} value - The darkness. - */ - setDarkness(value: number): void; - - } - - /** - * An enumeration of LUT worker operations. + * @type {Uint8ClampedArray} + */ + data: Uint8ClampedArray; + /** + * Creates a canvas from this image data. * - * @type {Object} - * @property {String} SCALE_UP - Tetrahedral upscale operation. + * @return {HTMLCanvasElement} The canvas, or null if it couldn't be created. */ - export enum LUTOperation { - SCALE_UP = "lut.scaleup", - } + toCanvas(): HTMLCanvasElement; + +} + +/** + * An SMAA image loader. + * + * @deprecated Preloading the SMAA lookup textures is no longer required. + */ +export class SMAAImageLoader extends Loader { /** - * A tetrahedral upscaler that can be used to augment 3D LUTs. + * Loads the SMAA data images. * - * Based on an implementation by Garrett Johnson: - * https://github.com/gkjohnson/threejs-sandbox/blob/master/3d-lut/src/TetrahedralUpscaler.js + * @param {Function} [onLoad] - A callback that receives the search image and area image as a pair. + * @param {Function} [onError] - An error callback that receives the URL of the image that failed to load. + * @return {Promise} A promise that returns the search image and area image as a pair. */ - export class TetrahedralUpscaler { + load( + url?: string | null, + onLoad?: (data: HTMLImageElement[]) => void, + onProgress?: (event: ProgressEvent) => void, + onError?: (err: unknown) => void, + ): void; + +} - /** - * Expands the given data to the target size. - * - * @param {ArrayBufferView} data - The input RGBA data. Assumed to be cubic. - * @param {Number} size - The target size. - * @return {ArrayBufferView} The new data. - */ - static expand(data: ArrayBufferView, size: number): ArrayBufferView; +/** + * A 3D LUT loader that supports the .cube file format. + * + * Based on an implementation by Garrett Johnson: + * https://github.com/gkjohnson/threejs-sandbox/tree/master/3d-lut + * + * For more details see: + * https://wwwimages2.adobe.com/content/dam/acom/en/products/speedgrade/cc/pdfs/cube-lut-specification-1.0.pdf + * + * @deprecated Use `three/addons/loaders/LUTCubeLoader.js` instead. + */ +export class LUTCubeLoader extends Loader { + + /** + * Loads a LUT. + * + * @param {String} url - The URL of the CUBE-file. + * @param {Function} [onLoad] - A callback that receives the loaded lookup texture. + * @param {Function} [onProgress] - A progress callback that receives the XMLHttpRequest instance. + * @param {Function} [onError] - An error callback that receives the URL of the file that failed to load. + */ + override load( + url: string, + onLoad: (data: LookupTexture) => void, + onProgress?: (event: ProgressEvent) => void, + onError?: (err: unknown) => void, + ): void; - } + /** + * Loads a LUT asynchronously. + * + * @param {String} url - The URL of the CUBE-file. + * @param {Function} [onProgress] - A progress callback that receives the XMLHttpRequest instance. + * @return {Promise} A promise that returns the lookup texture. + */ + loadAsync( + url: string, + onProgress?: (event: ProgressEvent) => void, + ): Promise; /** - * SMAA area image data. + * Parses the given data. * - * This texture allows to obtain the area for a certain pattern and distances to the left and right of identified lines. + * @param {String} input - The LUT data. + * @return {LookupTexture} The lookup texture. + * @throws {Error} Fails if the data is invalid. + */ + parse(input: string): LookupTexture; + +} + +/** + * A 3D LUT loader that supports the .3dl file format. + * + * Based on an implementation by Garrett Johnson: + * https://github.com/gkjohnson/threejs-sandbox/tree/master/3d-lut + * + * For more details see: + * http://download.autodesk.com/us/systemdocs/help/2011/lustre/index.html?url=./files/WSc4e151a45a3b785a24c3d9a411df9298473-7ffd.htm,topicNumber=d0e9492 + * + * @deprecated Use `three/addons/loaders/LUT3dlLoader.js` instead. + */ +export class LUT3dlLoader extends Loader { + + /** + * Loads a LUT. * - * Based on the official python scripts: - * https://github.com/iryoku/smaa/tree/master/Scripts - */ - export class SMAAAreaImageData { - - /** - * Creates a new area image. - * - * @return {RawImageData} The generated image data. - */ - static generate(): RawImageData; - - } - - /** - * An SMAA image generator. - * - * This class uses a worker thread to generate the search and area images. The generated data URLs will be cached using - * localStorage, if available. To disable caching use {@link SMAAImageGenerator.setCacheEnabled}. - */ - export class SMAAImageGenerator { - - /** - * Indicates whether data image caching is disabled. - * - * @type {Boolean} - * @deprecated Use setCacheEnabled() instead. - */ - disableCache: boolean; - /** - * Enables or disables caching via localStorage. - * - * @param {Boolean} value - Whether the cache should be enabled. - */ - setCacheEnabled(value: boolean): void; - /** - * Generates the SMAA data images. - * - * @example - * SMAAImageGenerator.generate().then(([search, area]) => { - * const smaaEffect = new SMAAEffect(search, area); - * }); - * @return {Promise} A promise that returns the search image and area image as a pair. - */ - generate(): Promise< - (new (width?: number, height?: number) => HTMLImageElement)[] - >; - - } - - /** - * SMAA search image data. - * - * This image stores information about how many pixels the line search algorithm must advance in the last step. - * - * Based on the official python scripts: - * https://github.com/iryoku/smaa/tree/master/Scripts - */ - export class SMAASearchImageData { - - /** - * Creates a new search image. - * - * @return {RawImageData} The generated image data. - */ - static generate(): RawImageData; - - } - - /** - * A 3D lookup texture (LUT). - * - * This texture can be used as-is in a WebGL 2 context. It can also be converted into a 2D texture. - */ - export class LookupTexture extends Data3DTexture { - - /** - * Creates a new 3D LUT by copying a given LUT. - * - * Common image-based textures will be converted into 3D data textures. - * - * @param {Texture} texture - The LUT. Assumed to be cubic. - * @return {LookupTexture} A new 3D LUT. - */ - static from(texture: Texture): LookupTexture; - /** - * Creates a neutral 3D LUT. - * - * @param {Number} size - The sidelength. - * @return {LookupTexture} A neutral 3D LUT. - */ - static createNeutral(size: number): LookupTexture; - /** - * Constructs a cubic 3D lookup texture. - * - * @param {TypedArray} data - The pixel data. The default format is RGBA. - * @param {Number} size - The sidelength. - */ - constructor(data: ArrayBufferView, size: number); - /** - * The lower bounds of the input domain. - * - * @type {Vector3} - */ - domainMin: Vector3; - /** - * The upper bounds of the input domain. - * - * @type {Vector3} - */ - domainMax: Vector3; - /** - * Indicates that this is an instance of LookupTexture3D. - * - * @type {Boolean} - * @deprecated - */ - get isLookupTexture3D(): boolean; - /** - * Scales this LUT up to a given target size using tetrahedral interpolation. - * - * @param {Number} size - The target sidelength. - * @param {Boolean} [transferData=true] - Extra fast mode. Set to false to keep the original data intact. - * @return {Promise} A promise that resolves with a new LUT upon completion. - */ - scaleUp(size: number, transferData?: boolean): Promise; - /** - * Applies the given LUT to this one. - * - * @param {LookupTexture} lut - A LUT. Must have the same dimensions, type and format as this LUT. - * @return {LookupTexture} This texture. - */ - applyLUT(lut: LookupTexture): LookupTexture; - /** - * Converts the LUT data into unsigned byte data. - * - * This is a lossy operation which should only be performed after all other transformations have been applied. - * - * @return {LookupTexture} This texture. - */ - convertToUint8(): LookupTexture; - /** - * Converts the LUT data into float data. - * - * @return {LookupTexture} This texture. - */ - convertToFloat(): LookupTexture; - /** - * Converts this LUT into RGBA data. - * - * @deprecated LUTs are RGBA by default since three r137. - * @return {LookupTexture} This texture. - */ - convertToRGBA(): LookupTexture; - /** - * Converts the output of this LUT into sRGB color space. - * - * @return {LookupTexture} This texture. - */ - convertLinearToSRGB(): LookupTexture; - /** - * Converts the output of this LUT into linear color space. - * - * @return {LookupTexture} This texture. - */ - convertSRGBToLinear(): LookupTexture; - /** - * Converts this LUT into a 2D data texture. - * - * Please note that custom input domains are not carried over to 2D textures. - * - * @return {DataTexture} The texture. - */ - toDataTexture(): DataTexture; - - } - - export type LookupTexture3D = LookupTexture; - - /** - * A simple noise texture. - */ - export class NoiseTexture extends DataTexture { - - /** - * Constructs a new noise texture. - * - * The texture format can be either `LuminanceFormat` or `RGBAFormat`. Additionally, the formats `RedFormat` and - * `RGFormat` can be used in a WebGL 2 context. - * - * @param {Number} width - The width. - * @param {Number} height - The height. - * @param {Number} [format=LuminanceFormat] - The texture format. - * @param {Number} [type=UnsignedByteType] - The texture type. - */ - constructor(width: number, height: number, format?: number, type?: number); - - } - - /** - * A container for raw RGBA image data. - * - * @implements {ImageData} - */ - export class RawImageData implements ImageData { - - /** - * Creates a new image data container. - * - * @param {ImageData|Image} image - An image or plain image data. - * @return {RawImageData} The image data. - */ - static from( - image: - | ImageData - | (new (width?: number, height?: number) => HTMLImageElement) - ): RawImageData; - - /** - * Constructs a new image data container. - * - * @param {Number} [width=0] - The width of the image. - * @param {Number} [height=0] - The height of the image. - * @param {Uint8ClampedArray} [data=null] - The image data. - */ - constructor(width?: number, height?: number, data?: Uint8ClampedArray); - colorSpace: PredefinedColorSpace; - /** - * The width of the image. - * - * @type {Number} - */ - width: number; - /** - * The height of the image. - * - * @type {Number} - */ - height: number; - /** - * The RGBA image data. - * - * @type {Uint8ClampedArray} - */ - data: Uint8ClampedArray; - /** - * Creates a canvas from this image data. - * - * @return {HTMLCanvasElement} The canvas, or null if it couldn't be created. - */ - toCanvas(): HTMLCanvasElement; - - } - - /** - * An SMAA image loader. - * - * @deprecated Preloading the SMAA lookup textures is no longer required. - * @experimental Added for testing, API might change in patch or minor releases. Requires three >= r108. - */ - export class SMAAImageLoader extends Loader { - - /** - * Loads the SMAA data images. - * - * @param {Function} [onLoad] - A callback that receives the search image and area image as a pair. - * @param {Function} [onError] - An error callback that receives the URL of the image that failed to load. - * @return {Promise} A promise that returns the search image and area image as a pair. - */ - load( - url?: string | null, - onLoad?: Function, - onError?: Function - ): Promise<(new (width?: number, height?: number) => HTMLImageElement)[]>; - - } - - /** - * A 3D LUT loader that supports the .cube file format. - * - * Based on an implementation by Garrett Johnson: - * https://github.com/gkjohnson/threejs-sandbox/tree/master/3d-lut - * - * For more details see: - * https://wwwimages2.adobe.com/content/dam/acom/en/products/speedgrade/cc/pdfs/cube-lut-specification-1.0.pdf - */ - export class LUTCubeLoader extends Loader { - - /** - * Loads a LUT. - * - * @param {String} url - The URL of the CUBE-file. - * @param {Function} [onLoad] - A callback that receives the loaded lookup texture. - * @param {Function} [onProgress] - A progress callback that receives the XMLHttpRequest instance. - * @param {Function} [onError] - An error callback that receives the URL of the file that failed to load. - * @return {Promise} A promise that returns the lookup texture. - */ - load( - url: string, - onLoad?: Function, - onProgress?: Function, - onError?: Function - ): Promise; - - /** - * Parses the given data. - * - * @param {String} input - The LUT data. - * @return {LookupTexture} The lookup texture. - * @throws {Error} Fails if the data is invalid. - */ - parse(input: string): LookupTexture; - - } - - /** - * A 3D LUT loader that supports the .3dl file format. - * - * Based on an implementation by Garrett Johnson: - * https://github.com/gkjohnson/threejs-sandbox/tree/master/3d-lut - * - * For more details see: - * http://download.autodesk.com/us/systemdocs/help/2011/lustre/index.html?url=./files/WSc4e151a45a3b785a24c3d9a411df9298473-7ffd.htm,topicNumber=d0e9492 - */ - export class LUT3dlLoader extends Loader { - - /** - * Loads a LUT. - * - * @param {String} url - The URL of the 3dl-file. - * @param {Function} [onLoad] - A callback that receives the loaded lookup texture. - * @param {Function} [onProgress] - A progress callback that receives the XMLHttpRequest instance. - * @param {Function} [onError] - An error callback that receives the URL of the file that failed to load. - * @return {Promise} A promise that returns the lookup texture. - */ - load( - url: string, - onLoad?: Function, - onProgress?: Function, - onError?: Function - ): Promise; - - /** - * Parses the given data. - * - * @param {String} input - The LUT data. - * @return {LookupTexture} The lookup texture. - * @throws {Error} Fails if the data is invalid. - */ - parse(input: string): LookupTexture; + * @param {String} url - The URL of the 3dl-file. + * @param {Function} [onLoad] - A callback that receives the loaded lookup texture. + * @param {Function} [onProgress] - A progress callback that receives the XMLHttpRequest instance. + * @param {Function} [onError] - An error callback that receives the URL of the file that failed to load. + */ + load( + url: string, + onLoad: (data: LookupTexture) => void, + onProgress?: (event: ProgressEvent) => void, + onError?: (err: unknown) => void, + ): void; - } + /** + * Loads a LUT asynchronously. + * + * @param {String} url - The URL of the 3dl-file. + * @param {Function} [onProgress] - A progress callback that receives the XMLHttpRequest instance. + * @return {Promise} A promise that returns the lookup texture. + */ + loadAsync( + url: string, + onProgress?: (event: ProgressEvent) => void, + ): Promise; /** - * Determines the texture inline decoding. - * - * @param {Texture} texture - A texture. - * @param {Boolean} isWebGL2 - Whether the context is WebGL 2. - * @return {String} The decoding. - * @ignore - */ - export function getTextureDecoding( - texture: Texture, - isWebGL2: boolean - ): string; - - /** - * Converts orthographic depth to view Z. - * - * @see https://github.com/mrdoob/three.js/blob/0de4e75ee65c3238957318b88ef91b6597e23c1e/src/renderers/shaders/ShaderChunk/packing.glsl.js#L42 - * @param {Number} depth - The linear clip Z. - * @param {Number} near - The camera near plane. - * @param {Number} far - The camera far plane. - * @return {Number} The view Z. - * @ignore - */ - export function orthographicDepthToViewZ( - depth: number, - near: number, - far: number - ): number; - - /** - * Converts view Z to orthographic depth. - * - * @see https://github.com/mrdoob/three.js/blob/0de4e75ee65c3238957318b88ef91b6597e23c1e/src/renderers/shaders/ShaderChunk/packing.glsl.js#L39 - * @param {Number} viewZ - The view Z. Expected to be negative. - * @param {Number} near - The camera near plane. - * @param {Number} far - The camera far plane. - * @return {Number} The depth. - * @ignore - */ - export function viewZToOrthographicDepth( - viewZ: number, - near: number, - far: number - ): number; - - /** - * A lens distortion effect. + * Parses the given data. * - * Original shader ported from https://github.com/ycw/three-lens-distortion + * @param {String} input - The LUT data. + * @return {LookupTexture} The lookup texture. + * @throws {Error} Fails if the data is invalid. */ + parse(input: string): LookupTexture; - export class LensDistortionEffect extends Effect { +} - /** - * Constructs a new lens distortion effect. - * - * @param {Object} [options] - The options. - * @param {Vector2} [options.distortion] - The distortion value. - * @param {Vector2} [options.principalPoint] - The center point. - * @param {Vector2} [options.focalLength] - The focal length. - * @param {Number} [options.skew=0] - The skew value. - */ +/** + * Determines the texture inline decoding. + * + * @param {Texture} texture - A texture. + * @param {Boolean} isWebGL2 - Whether the context is WebGL 2. + * @return {String} The decoding. + * @ignore + */ +export function getTextureDecoding( + texture: Texture, + isWebGL2: boolean +): string; + +/** + * Converts orthographic depth to view Z. + * + * @see https://github.com/mrdoob/three.js/blob/0de4e75ee65c3238957318b88ef91b6597e23c1e/src/renderers/shaders/ShaderChunk/packing.glsl.js#L42 + * @param {Number} depth - The linear clip Z. + * @param {Number} near - The camera near plane. + * @param {Number} far - The camera far plane. + * @return {Number} The view Z. + * @ignore + */ +export function orthographicDepthToViewZ( + depth: number, + near: number, + far: number +): number; + +/** + * Converts view Z to orthographic depth. + * + * @see https://github.com/mrdoob/three.js/blob/0de4e75ee65c3238957318b88ef91b6597e23c1e/src/renderers/shaders/ShaderChunk/packing.glsl.js#L39 + * @param {Number} viewZ - The view Z. Expected to be negative. + * @param {Number} near - The camera near plane. + * @param {Number} far - The camera far plane. + * @return {Number} The depth. + * @ignore + */ +export function viewZToOrthographicDepth( + viewZ: number, + near: number, + far: number +): number; + +/** + * A lens distortion effect. + * + * Original shader ported from https://github.com/ycw/three-lens-distortion + */ +export class LensDistortionEffect extends Effect { - constructor({ - distortion, - principalPoint, - focalLength, - skew - }?: { - distortion: Vector2; - principalPoint: Vector2; - focalLength: Vector2; - skew?: number; - }); - - /** - * The radial distortion coefficients. Default is (0, 0). - * - * @type {Vector2} - */ - - get distortion(): Vector2; - set distortion(value: Vector2); - - /** - * The principal point. Default is (0, 0). - * - * @type {Vector2} - */ - - get principalPoint(): Vector2; - set principalPoint(value: Vector2); - - /** - * The focal length. Default is (1, 1). - * - * @type {Vector2} - */ - - get focalLength(): Vector2; - set focalLength(value: Vector2); - - /** - * The skew factor in radians. - * - * @type {Number} - */ - - get skew(): number; - set skew(value: number); - - } + /** + * Constructs a new lens distortion effect. + * + * @param {Object} [options] - The options. + * @param {Vector2} [options.distortion] - The distortion value. + * @param {Vector2} [options.principalPoint] - The center point. + * @param {Vector2} [options.focalLength] - The focal length. + * @param {Number} [options.skew=0] - The skew value. + */ + constructor({ + distortion, + principalPoint, + focalLength, + skew + }?: { + distortion: Vector2; + principalPoint: Vector2; + focalLength: Vector2; + skew?: number; + }); + + /** + * The radial distortion coefficients. Default is (0, 0). + * + * @type {Vector2} + */ + get distortion(): Vector2; + set distortion(value: Vector2); + /** + * The principal point. Default is (0, 0). + * + * @type {Vector2} + */ + get principalPoint(): Vector2; + set principalPoint(value: Vector2); + /** + * The focal length. Default is (1, 1). + * + * @type {Vector2} + */ + get focalLength(): Vector2; + set focalLength(value: Vector2); + /** + * The skew factor in radians. + * + * @type {Number} + */ + get skew(): number; + set skew(value: number); }