diff --git a/.github/workflows/cd.yml b/.github/workflows/cd.yml index df5867042..097a69188 100644 --- a/.github/workflows/cd.yml +++ b/.github/workflows/cd.yml @@ -30,12 +30,9 @@ jobs: run: pnpm install-test --frozen-lockfile - name: Publish uses: JS-DevTools/npm-publish@v4 - id: publish with: provenance: true ignore-scripts: true - - if: ${{ steps.publish.outputs.type }} - run: echo "Version changed!" - name: Pages run: pnpm run deploy - uses: JamesIves/github-pages-deploy-action@v4 diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index eb2a637c4..67523dbdf 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -17,7 +17,7 @@ jobs: with: version: 10 - name: Install Node - uses: actions/setup-node@v4 + uses: actions/setup-node@v6 with: node-version: 24 cache: "pnpm" 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/package.json b/package.json index c8a09cf78..bd5aeb643 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "postprocessing", - "version": "6.38.0", + "version": "6.38.1", "description": "A post processing library for three.js.", "homepage": "https://github.com/pmndrs/postprocessing", "license": "Zlib", @@ -90,11 +90,11 @@ "watch:js": "node esbuild -w" }, "peerDependencies": { - "three": ">= 0.157.0 < 0.182.0" + "three": ">= 0.157.0 < 0.183.0" }, "devDependencies": { "@tweakpane/core": "2.x.x", - "@types/node": "24.x.x", + "@types/node": "25.x.x", "@types/three": "0.x.x", "@typescript-eslint/eslint-plugin": "8.x.x", "@typescript-eslint/parser": "8.x.x", @@ -104,7 +104,7 @@ "cssnano": "7.x.x", "dat.gui": "0.x.x", "del-cli": "7.x.x", - "esbuild": "0.25.x", + "esbuild": "0.27.x", "esbuild-plugin-glsl": "1.x.x", "esdoc": "1.x.x", "esdoc-importpath-plugin": "1.x.x", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ffff28bc9..74c2f55ed 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,20 +12,20 @@ importers: specifier: 2.x.x version: 2.0.5 '@types/node': - specifier: 24.x.x - version: 24.10.0 + specifier: 25.x.x + version: 25.0.2 '@types/three': specifier: 0.x.x - version: 0.181.0 + version: 0.182.0 '@typescript-eslint/eslint-plugin': specifier: 8.x.x - version: 8.46.3(@typescript-eslint/parser@8.46.3(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3) + version: 8.49.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2)(typescript@5.9.3))(eslint@9.39.2)(typescript@5.9.3) '@typescript-eslint/parser': specifier: 8.x.x - version: 8.46.3(eslint@9.39.1)(typescript@5.9.3) + version: 8.49.0(eslint@9.39.2)(typescript@5.9.3) autoprefixer: specifier: 10.x.x - version: 10.4.21(postcss@8.5.6) + version: 10.4.23(postcss@8.5.6) ava: specifier: 6.x.x version: 6.4.1 @@ -42,11 +42,11 @@ importers: specifier: 7.x.x version: 7.0.0 esbuild: - specifier: 0.25.x - version: 0.25.12 + specifier: 0.27.x + version: 0.27.1 esbuild-plugin-glsl: specifier: 1.x.x - version: 1.4.1(esbuild@0.25.12) + version: 1.4.1(esbuild@0.27.1) esdoc: specifier: 1.x.x version: 1.1.0 @@ -58,10 +58,10 @@ importers: version: 1.0.0 eslint: specifier: 9.x.x - version: 9.39.1 + version: 9.39.2 eslint-config-aether: specifier: 2.x.x - version: 2.0.3(eslint@9.39.1)(typescript@5.9.3) + version: 2.0.3(eslint@9.39.2)(typescript@5.9.3) gzipper: specifier: 8.x.x version: 8.2.1 @@ -79,28 +79,28 @@ importers: version: 11.0.1(postcss@8.5.6) postcss-preset-env: specifier: 10.x.x - version: 10.4.0(postcss@8.5.6) + version: 10.5.0(postcss@8.5.6) sass: specifier: 1.x.x - version: 1.93.3 + version: 1.96.0 spatial-controls: specifier: 6.x.x - version: 6.2.1(three@0.181.0) + version: 6.2.1(three@0.182.0) stylelint: specifier: 16.x.x - version: 16.25.0(typescript@5.9.3) + version: 16.26.1(typescript@5.9.3) stylelint-config-standard-scss: specifier: 16.x.x - version: 16.0.0(postcss@8.5.6)(stylelint@16.25.0(typescript@5.9.3)) + version: 16.0.0(postcss@8.5.6)(stylelint@16.26.1(typescript@5.9.3)) stylelint-order: specifier: 7.x.x - version: 7.0.0(stylelint@16.25.0(typescript@5.9.3)) + version: 7.0.0(stylelint@16.26.1(typescript@5.9.3)) three: specifier: 0.x.x - version: 0.181.0 + version: 0.182.0 three-demo: specifier: 5.x.x - version: 5.1.3(dat.gui@0.7.9)(three@0.181.0) + version: 5.1.3(dat.gui@0.7.9)(three@0.182.0) tiny-glob: specifier: 0.x.x version: 0.2.9 @@ -127,14 +127,11 @@ packages: '@borewit/text-codec@0.1.1': resolution: {integrity: sha512-5L/uBxmjaCIX5h8Z+uu+kA9BQLkc/Wl06UGR5ajNRxu+/XjonB5i8JpgFMrPj3LXTCPA0pv8yxUvbUi+QthGGA==} - '@cacheable/memoize@2.0.3': - resolution: {integrity: sha512-hl9wfQgpiydhQEIv7fkjEzTGE+tcosCXLKFDO707wYJ/78FVOlowb36djex5GdbSyeHnG62pomYLMuV/OT8Pbw==} + '@cacheable/memory@2.0.6': + resolution: {integrity: sha512-7e8SScMocHxcAb8YhtkbMhGG+EKLRIficb1F5sjvhSYsWTZGxvg4KIDp8kgxnV2PUJ3ddPe6J9QESjKvBWRDkg==} - '@cacheable/memory@2.0.4': - resolution: {integrity: sha512-cCmJKCKlT1t7hNBI1+gFCwmKFd9I4pS3zqBeNGXTSODnpa0EeDmORHY8oEMTuozfdg3cgsVh8ojLaPYb6eC7Cg==} - - '@cacheable/utils@2.2.0': - resolution: {integrity: sha512-7xaQayO3msdVcxXLYcLU5wDqJBNdQcPPPHr6mdTEIQI7N7TbtSVVTpWOTfjyhg0L6AQwQdq7miKdWtTDBoBldQ==} + '@cacheable/utils@2.3.2': + resolution: {integrity: sha512-8kGE2P+HjfY8FglaOiW+y8qxcaQAfAhVML+i66XJR3YX5FtyDqn6Txctr3K2FrbxLKixRRYYBWMbuGciOhYNDg==} '@csstools/cascade-layer-name-parser@2.0.5': resolution: {integrity: sha512-p1ko5eHgV+MgXFVa4STPKpvPxr6ReS8oS2jzTukjR74i5zJNyWO1ZM1m8YKBXnzDKWfBN1ztLYlHxbVemDD88A==} @@ -167,6 +164,10 @@ packages: peerDependencies: '@csstools/css-tokenizer': ^3.0.4 + '@csstools/css-syntax-patches-for-csstree@1.0.21': + resolution: {integrity: sha512-plP8N8zKfEZ26figX4Nvajx8DuzfuRpLTqglQ5d0chfnt35Qt3X+m6ASZ+rG0D0kxe/upDVNwSIVJP5n4FuNfw==} + engines: {node: '>=18'} + '@csstools/css-tokenizer@3.0.4': resolution: {integrity: sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==} engines: {node: '>=18'} @@ -340,6 +341,12 @@ packages: peerDependencies: postcss: ^8.4 + '@csstools/postcss-position-area-property@1.0.0': + resolution: {integrity: sha512-fUP6KR8qV2NuUZV3Cw8itx0Ep90aRjAZxAEzC3vrl6yjFv+pFsQbR18UuQctEKmA72K9O27CoYiKEgXxkqjg8Q==} + engines: {node: '>=18'} + peerDependencies: + postcss: ^8.4 + '@csstools/postcss-progressive-custom-properties@4.2.1': resolution: {integrity: sha512-uPiiXf7IEKtUQXsxu6uWtOlRMXd2QWWy5fhxHDnPdXKCQckPP3E34ZgDoZ62r2iT+UOgWsSbM4NvHE5m3mAEdw==} engines: {node: '>=18'} @@ -376,6 +383,12 @@ packages: peerDependencies: postcss: ^8.4 + '@csstools/postcss-system-ui-font-family@1.0.0': + resolution: {integrity: sha512-s3xdBvfWYfoPSBsikDXbuorcMG1nN1M6GdU0qBsGfcmNR0A/qhloQZpTxjA3Xsyrk1VJvwb2pOfiOT3at/DuIQ==} + engines: {node: '>=18'} + peerDependencies: + postcss: ^8.4 + '@csstools/postcss-text-decoration-shorthand@4.0.3': resolution: {integrity: sha512-KSkGgZfx0kQjRIYnpsD7X2Om9BUXX/Kii77VBifQW9Ih929hK0KNjVngHDH0bFB9GmfWcR9vJYJJRvw/NQjkrA==} engines: {node: '>=18'} @@ -418,158 +431,158 @@ packages: '@dual-bundle/import-meta-resolve@4.2.1': resolution: {integrity: sha512-id+7YRUgoUX6CgV0DtuhirQWodeeA7Lf4i2x71JS/vtA5pRb/hIGWlw+G6MeXvsM+MXrz0VAydTGElX1rAfgPg==} - '@esbuild/aix-ppc64@0.25.12': - resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} + '@esbuild/aix-ppc64@0.27.1': + resolution: {integrity: sha512-HHB50pdsBX6k47S4u5g/CaLjqS3qwaOVE5ILsq64jyzgMhLuCuZ8rGzM9yhsAjfjkbgUPMzZEPa7DAp7yz6vuA==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.25.12': - resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==} + '@esbuild/android-arm64@0.27.1': + resolution: {integrity: sha512-45fuKmAJpxnQWixOGCrS+ro4Uvb4Re9+UTieUY2f8AEc+t7d4AaZ6eUJ3Hva7dtrxAAWHtlEFsXFMAgNnGU9uQ==} engines: {node: '>=18'} cpu: [arm64] os: [android] - '@esbuild/android-arm@0.25.12': - resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==} + '@esbuild/android-arm@0.27.1': + resolution: {integrity: sha512-kFqa6/UcaTbGm/NncN9kzVOODjhZW8e+FRdSeypWe6j33gzclHtwlANs26JrupOntlcWmB0u8+8HZo8s7thHvg==} engines: {node: '>=18'} cpu: [arm] os: [android] - '@esbuild/android-x64@0.25.12': - resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==} + '@esbuild/android-x64@0.27.1': + resolution: {integrity: sha512-LBEpOz0BsgMEeHgenf5aqmn/lLNTFXVfoWMUox8CtWWYK9X4jmQzWjoGoNb8lmAYml/tQ/Ysvm8q7szu7BoxRQ==} engines: {node: '>=18'} cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.25.12': - resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==} + '@esbuild/darwin-arm64@0.27.1': + resolution: {integrity: sha512-veg7fL8eMSCVKL7IW4pxb54QERtedFDfY/ASrumK/SbFsXnRazxY4YykN/THYqFnFwJ0aVjiUrVG2PwcdAEqQQ==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.25.12': - resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==} + '@esbuild/darwin-x64@0.27.1': + resolution: {integrity: sha512-+3ELd+nTzhfWb07Vol7EZ+5PTbJ/u74nC6iv4/lwIU99Ip5uuY6QoIf0Hn4m2HoV0qcnRivN3KSqc+FyCHjoVQ==} engines: {node: '>=18'} cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.25.12': - resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==} + '@esbuild/freebsd-arm64@0.27.1': + resolution: {integrity: sha512-/8Rfgns4XD9XOSXlzUDepG8PX+AVWHliYlUkFI3K3GB6tqbdjYqdhcb4BKRd7C0BhZSoaCxhv8kTcBrcZWP+xg==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.25.12': - resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==} + '@esbuild/freebsd-x64@0.27.1': + resolution: {integrity: sha512-GITpD8dK9C+r+5yRT/UKVT36h/DQLOHdwGVwwoHidlnA168oD3uxA878XloXebK4Ul3gDBBIvEdL7go9gCUFzQ==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.25.12': - resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==} + '@esbuild/linux-arm64@0.27.1': + resolution: {integrity: sha512-W9//kCrh/6in9rWIBdKaMtuTTzNj6jSeG/haWBADqLLa9P8O5YSRDzgD5y9QBok4AYlzS6ARHifAb75V6G670Q==} engines: {node: '>=18'} cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.25.12': - resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==} + '@esbuild/linux-arm@0.27.1': + resolution: {integrity: sha512-ieMID0JRZY/ZeCrsFQ3Y3NlHNCqIhTprJfDgSB3/lv5jJZ8FX3hqPyXWhe+gvS5ARMBJ242PM+VNz/ctNj//eA==} engines: {node: '>=18'} cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.25.12': - resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==} + '@esbuild/linux-ia32@0.27.1': + resolution: {integrity: sha512-VIUV4z8GD8rtSVMfAj1aXFahsi/+tcoXXNYmXgzISL+KB381vbSTNdeZHHHIYqFyXcoEhu9n5cT+05tRv13rlw==} engines: {node: '>=18'} cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.25.12': - resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==} + '@esbuild/linux-loong64@0.27.1': + resolution: {integrity: sha512-l4rfiiJRN7sTNI//ff65zJ9z8U+k6zcCg0LALU5iEWzY+a1mVZ8iWC1k5EsNKThZ7XCQ6YWtsZ8EWYm7r1UEsg==} engines: {node: '>=18'} cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.25.12': - resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==} + '@esbuild/linux-mips64el@0.27.1': + resolution: {integrity: sha512-U0bEuAOLvO/DWFdygTHWY8C067FXz+UbzKgxYhXC0fDieFa0kDIra1FAhsAARRJbvEyso8aAqvPdNxzWuStBnA==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.25.12': - resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==} + '@esbuild/linux-ppc64@0.27.1': + resolution: {integrity: sha512-NzdQ/Xwu6vPSf/GkdmRNsOfIeSGnh7muundsWItmBsVpMoNPVpM61qNzAVY3pZ1glzzAxLR40UyYM23eaDDbYQ==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.25.12': - resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==} + '@esbuild/linux-riscv64@0.27.1': + resolution: {integrity: sha512-7zlw8p3IApcsN7mFw0O1Z1PyEk6PlKMu18roImfl3iQHTnr/yAfYv6s4hXPidbDoI2Q0pW+5xeoM4eTCC0UdrQ==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.25.12': - resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==} + '@esbuild/linux-s390x@0.27.1': + resolution: {integrity: sha512-cGj5wli+G+nkVQdZo3+7FDKC25Uh4ZVwOAK6A06Hsvgr8WqBBuOy/1s+PUEd/6Je+vjfm6stX0kmib5b/O2Ykw==} engines: {node: '>=18'} cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.25.12': - resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==} + '@esbuild/linux-x64@0.27.1': + resolution: {integrity: sha512-z3H/HYI9MM0HTv3hQZ81f+AKb+yEoCRlUby1F80vbQ5XdzEMyY/9iNlAmhqiBKw4MJXwfgsh7ERGEOhrM1niMA==} engines: {node: '>=18'} cpu: [x64] os: [linux] - '@esbuild/netbsd-arm64@0.25.12': - resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==} + '@esbuild/netbsd-arm64@0.27.1': + resolution: {integrity: sha512-wzC24DxAvk8Em01YmVXyjl96Mr+ecTPyOuADAvjGg+fyBpGmxmcr2E5ttf7Im8D0sXZihpxzO1isus8MdjMCXQ==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-x64@0.25.12': - resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==} + '@esbuild/netbsd-x64@0.27.1': + resolution: {integrity: sha512-1YQ8ybGi2yIXswu6eNzJsrYIGFpnlzEWRl6iR5gMgmsrR0FcNoV1m9k9sc3PuP5rUBLshOZylc9nqSgymI+TYg==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] - '@esbuild/openbsd-arm64@0.25.12': - resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==} + '@esbuild/openbsd-arm64@0.27.1': + resolution: {integrity: sha512-5Z+DzLCrq5wmU7RDaMDe2DVXMRm2tTDvX2KU14JJVBN2CT/qov7XVix85QoJqHltpvAOZUAc3ndU56HSMWrv8g==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-x64@0.25.12': - resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==} + '@esbuild/openbsd-x64@0.27.1': + resolution: {integrity: sha512-Q73ENzIdPF5jap4wqLtsfh8YbYSZ8Q0wnxplOlZUOyZy7B4ZKW8DXGWgTCZmF8VWD7Tciwv5F4NsRf6vYlZtqg==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] - '@esbuild/openharmony-arm64@0.25.12': - resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==} + '@esbuild/openharmony-arm64@0.27.1': + resolution: {integrity: sha512-ajbHrGM/XiK+sXM0JzEbJAen+0E+JMQZ2l4RR4VFwvV9JEERx+oxtgkpoKv1SevhjavK2z2ReHk32pjzktWbGg==} engines: {node: '>=18'} cpu: [arm64] os: [openharmony] - '@esbuild/sunos-x64@0.25.12': - resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==} + '@esbuild/sunos-x64@0.27.1': + resolution: {integrity: sha512-IPUW+y4VIjuDVn+OMzHc5FV4GubIwPnsz6ubkvN8cuhEqH81NovB53IUlrlBkPMEPxvNnf79MGBoz8rZ2iW8HA==} engines: {node: '>=18'} cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.25.12': - resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==} + '@esbuild/win32-arm64@0.27.1': + resolution: {integrity: sha512-RIVRWiljWA6CdVu8zkWcRmGP7iRRIIwvhDKem8UMBjPql2TXM5PkDVvvrzMtj1V+WFPB4K7zkIGM7VzRtFkjdg==} engines: {node: '>=18'} cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.25.12': - resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==} + '@esbuild/win32-ia32@0.27.1': + resolution: {integrity: sha512-2BR5M8CPbptC1AK5JbJT1fWrHLvejwZidKx3UMSF0ecHMa+smhi16drIrCEggkgviBwLYd5nwrFLSl5Kho96RQ==} engines: {node: '>=18'} cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.25.12': - resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==} + '@esbuild/win32-x64@0.27.1': + resolution: {integrity: sha512-d5X6RMYv6taIymSk8JBP+nxv8DQAMY6A51GPgusqLdK9wBz5wWIXy1KjTck6HnjE9hqJzJRdk+1p/t5soSbCtw==} engines: {node: '>=18'} cpu: [x64] os: [win32] @@ -596,12 +609,12 @@ packages: resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/eslintrc@3.3.1': - resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} + '@eslint/eslintrc@3.3.3': + resolution: {integrity: sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.39.1': - resolution: {integrity: sha512-S26Stp4zCy88tH94QbBv3XCuzRQiZ9yXofEILmglYTh/Ug/a9/umqvgFtYBAo3Lp0nsI/5/qH1CCrbdK3AP1Tw==} + '@eslint/js@9.39.2': + resolution: {integrity: sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/object-schema@2.1.7': @@ -640,17 +653,17 @@ packages: resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} engines: {node: '>=18.0.0'} - '@keyv/bigmap@1.1.0': - resolution: {integrity: sha512-MX7XIUNwVRK+hjZcAbNJ0Z8DREo+Weu9vinBOjGU1thEi9F6vPhICzBbk4CCf3eEefKRz7n6TfZXwUFZTSgj8Q==} + '@keyv/bigmap@1.3.0': + resolution: {integrity: sha512-KT01GjzV6AQD5+IYrcpoYLkCu1Jod3nau1Z7EsEuViO3TZGRacSbO9MfHmbJ1WaOXFtWLxPVj169cn2WNKPkIg==} engines: {node: '>= 18'} peerDependencies: - keyv: ^5.5.3 + keyv: ^5.5.4 '@keyv/serialize@1.1.1': resolution: {integrity: sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA==} - '@mapbox/node-pre-gyp@2.0.0': - resolution: {integrity: sha512-llMXd39jtP0HpQLVI37Bf1m2ADlEb35GYSh1SDSLsBhR+5iCxiNGlT31yqbNtVHygHAtMy6dWFERpU2JgufhPg==} + '@mapbox/node-pre-gyp@2.0.3': + resolution: {integrity: sha512-uwPAhccfFJlsfCxMYTwOdVfOz3xqyj8xYL3zJj8f0pb30tLohnnFPhLuqp4/qoEz8sNxe4SESZedcBojRefIzg==} engines: {node: '>=18'} hasBin: true @@ -773,8 +786,8 @@ packages: resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} engines: {node: '>=18'} - '@stylistic/eslint-plugin@5.5.0': - resolution: {integrity: sha512-IeZF+8H0ns6prg4VrkhgL+yrvDXWDH2cKchrbh80ejG9dQgZWp10epHMbgRuQvgchLII/lfh6Xn3lu6+6L86Hw==} + '@stylistic/eslint-plugin@5.6.1': + resolution: {integrity: sha512-JCs+MqoXfXrRPGbGmho/zGS/jMcn3ieKl/A8YImqib76C8kjgZwq5uUFzc30lJkMvcchuRn6/v8IApLxli3Jyw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: '>=9.0.0' @@ -805,75 +818,75 @@ packages: '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - '@types/node@24.10.0': - resolution: {integrity: sha512-qzQZRBqkFsYyaSWXuEHc2WR9c0a0CXwiE5FWUvn7ZM+vdy1uZLfCunD38UzhuB7YN/J11ndbDBcTmOdxJo9Q7A==} + '@types/node@25.0.2': + resolution: {integrity: sha512-gWEkeiyYE4vqjON/+Obqcoeffmk0NF15WSBwSs7zwVA2bAbTaE0SJ7P0WNGoJn8uE7fiaV5a7dKYIJriEqOrmA==} '@types/stats.js@0.17.4': resolution: {integrity: sha512-jIBvWWShCvlBqBNIZt0KAshWpvSjhkwkEu4ZUcASoAvhmrgAUI2t1dXrjSL4xXVLB4FznPrIsX3nKXFl/Dt4vA==} - '@types/three@0.181.0': - resolution: {integrity: sha512-MLF1ks8yRM2k71D7RprFpDb9DOX0p22DbdPqT/uAkc6AtQXjxWCVDjCy23G9t1o8HcQPk7woD2NIyiaWcWPYmA==} + '@types/three@0.182.0': + resolution: {integrity: sha512-WByN9V3Sbwbe2OkWuSGyoqQO8Du6yhYaXtXLoA5FkKTUJorZ+yOHBZ35zUUPQXlAKABZmbYp5oAqpA4RBjtJ/Q==} '@types/webxr@0.5.24': resolution: {integrity: sha512-h8fgEd/DpoS9CBrjEQXR+dIDraopAEfu4wYVNY2tEPwk60stPWhvZMf4Foo5FakuQ7HFZoa8WceaWFervK2Ovg==} - '@typescript-eslint/eslint-plugin@8.46.3': - resolution: {integrity: sha512-sbaQ27XBUopBkRiuY/P9sWGOWUW4rl8fDoHIUmLpZd8uldsTyB4/Zg6bWTegPoTLnKj9Hqgn3QD6cjPNB32Odw==} + '@typescript-eslint/eslint-plugin@8.49.0': + resolution: {integrity: sha512-JXij0vzIaTtCwu6SxTh8qBc66kmf1xs7pI4UOiMDFVct6q86G0Zs7KRcEoJgY3Cav3x5Tq0MF5jwgpgLqgKG3A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.46.3 + '@typescript-eslint/parser': ^8.49.0 eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/parser@8.46.3': - resolution: {integrity: sha512-6m1I5RmHBGTnUGS113G04DMu3CpSdxCAU/UvtjNWL4Nuf3MW9tQhiJqRlHzChIkhy6kZSAQmc+I1bcGjE3yNKg==} + '@typescript-eslint/parser@8.49.0': + resolution: {integrity: sha512-N9lBGA9o9aqb1hVMc9hzySbhKibHmB+N3IpoShyV6HyQYRGIhlrO5rQgttypi+yEeKsKI4idxC8Jw6gXKD4THA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/project-service@8.46.3': - resolution: {integrity: sha512-Fz8yFXsp2wDFeUElO88S9n4w1I4CWDTXDqDr9gYvZgUpwXQqmZBr9+NTTql5R3J7+hrJZPdpiWaB9VNhAKYLuQ==} + '@typescript-eslint/project-service@8.49.0': + resolution: {integrity: sha512-/wJN0/DKkmRUMXjZUXYZpD1NEQzQAAn9QWfGwo+Ai8gnzqH7tvqS7oNVdTjKqOcPyVIdZdyCMoqN66Ia789e7g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/scope-manager@8.46.3': - resolution: {integrity: sha512-FCi7Y1zgrmxp3DfWfr+3m9ansUUFoy8dkEdeQSgA9gbm8DaHYvZCdkFRQrtKiedFf3Ha6VmoqoAaP68+i+22kg==} + '@typescript-eslint/scope-manager@8.49.0': + resolution: {integrity: sha512-npgS3zi+/30KSOkXNs0LQXtsg9ekZ8OISAOLGWA/ZOEn0ZH74Ginfl7foziV8DT+D98WfQ5Kopwqb/PZOaIJGg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.46.3': - resolution: {integrity: sha512-GLupljMniHNIROP0zE7nCcybptolcH8QZfXOpCfhQDAdwJ/ZTlcaBOYebSOZotpti/3HrHSw7D3PZm75gYFsOA==} + '@typescript-eslint/tsconfig-utils@8.49.0': + resolution: {integrity: sha512-8prixNi1/6nawsRYxet4YOhnbW+W9FK/bQPxsGB1D3ZrDzbJ5FXw5XmzxZv82X3B+ZccuSxo/X8q9nQ+mFecWA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/type-utils@8.46.3': - resolution: {integrity: sha512-ZPCADbr+qfz3aiTTYNNkCbUt+cjNwI/5McyANNrFBpVxPt7GqpEYz5ZfdwuFyGUnJ9FdDXbGODUu6iRCI6XRXw==} + '@typescript-eslint/type-utils@8.49.0': + resolution: {integrity: sha512-KTExJfQ+svY8I10P4HdxKzWsvtVnsuCifU5MvXrRwoP2KOlNZ9ADNEWWsQTJgMxLzS5VLQKDjkCT/YzgsnqmZg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/types@8.46.3': - resolution: {integrity: sha512-G7Ok9WN/ggW7e/tOf8TQYMaxgID3Iujn231hfi0Pc7ZheztIJVpO44ekY00b7akqc6nZcvregk0Jpah3kep6hA==} + '@typescript-eslint/types@8.49.0': + resolution: {integrity: sha512-e9k/fneezorUo6WShlQpMxXh8/8wfyc+biu6tnAqA81oWrEic0k21RHzP9uqqpyBBeBKu4T+Bsjy9/b8u7obXQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.46.3': - resolution: {integrity: sha512-f/NvtRjOm80BtNM5OQtlaBdM5BRFUv7gf381j9wygDNL+qOYSNOgtQ/DCndiYi80iIOv76QqaTmp4fa9hwI0OA==} + '@typescript-eslint/typescript-estree@8.49.0': + resolution: {integrity: sha512-jrLdRuAbPfPIdYNppHJ/D0wN+wwNfJ32YTAm10eJVsFmrVpXQnDWBn8niCSMlWjvml8jsce5E/O+86IQtTbJWA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/utils@8.46.3': - resolution: {integrity: sha512-VXw7qmdkucEx9WkmR3ld/u6VhRyKeiF1uxWwCy/iuNfokjJ7VhsgLSOTjsol8BunSw190zABzpwdNsze2Kpo4g==} + '@typescript-eslint/utils@8.49.0': + resolution: {integrity: sha512-N3W7rJw7Rw+z1tRsHZbK395TWSYvufBXumYtEGzypgMUthlg0/hmCImeA8hgO2d2G4pd7ftpxxul2J8OdtdaFA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/visitor-keys@8.46.3': - resolution: {integrity: sha512-uk574k8IU0rOF/AjniX8qbLSGURJVUCeM5e4MIMKBFFi8weeiLrG1fyQejyLXQpRZbU/1BuQasleV/RfHC3hHg==} + '@typescript-eslint/visitor-keys@8.49.0': + resolution: {integrity: sha512-LlKaciDe3GmZFphXIc79THF/YYBugZ7FS1pO581E/edlVVNbZKDy93evqmrfQ9/Y4uN0vVhX4iuchq26mK/iiA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@vercel/nft@0.29.4': @@ -881,8 +894,8 @@ packages: engines: {node: '>=18'} hasBin: true - '@webgpu/types@0.1.66': - resolution: {integrity: sha512-YA2hLrwLpDsRueNDXIMqN9NTzD6bCDkuXbOSe0heS+f8YE8usA6Gbv1prj81pzVHrbaAma7zObnIC+I6/sXJgA==} + '@webgpu/types@0.1.68': + resolution: {integrity: sha512-3ab1B59Ojb6RwjOspYLsTpCzbNB3ZaamIAxBMmvnNkiDoLTZUOBXZ9p5nAYVEkQlDdf6qAZWi1pqj9+ypiqznA==} '@xhmikosr/archive-type@7.1.0': resolution: {integrity: sha512-xZEpnGplg1sNPyEgFh0zbHxqlw5dtYg6viplmWSxUj12+QjU9SKu3U/2G73a15pEjLaOqTefNSZ1fOPUOT4Xgg==} @@ -1055,8 +1068,8 @@ packages: asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - autoprefixer@10.4.21: - resolution: {integrity: sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==} + autoprefixer@10.4.23: + resolution: {integrity: sha512-YYTXSFulfwytnjAPlw8QHncHJmlvFKtczb8InXaAx9Q0LbfDnfEYDE55omerIJKihhmU61Ft+cAOSzQVaBUmeA==} engines: {node: ^10 || ^12 || >=14} hasBin: true peerDependencies: @@ -1132,8 +1145,8 @@ packages: base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - baseline-browser-mapping@2.8.25: - resolution: {integrity: sha512-2NovHVesVF5TXefsGX1yzx1xgr7+m9JQenvz6FQY3qd+YXkKkYiv+vTCc7OriP9mcDZpTC5mAOYN4ocd29+erA==} + baseline-browser-mapping@2.9.7: + resolution: {integrity: sha512-k9xFKplee6KIio3IDbwj+uaCLpqzOwakOgmqzPezM0sFJlFKcg30vk2wOiAJtkTSfx0SSQDSe8q+mWA/fSH5Zg==} hasBin: true bcrypt-pbkdf@1.0.2: @@ -1170,8 +1183,8 @@ packages: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} - browserslist@4.27.0: - resolution: {integrity: sha512-AXVQwdhot1eqLihwasPElhX2tAZiBjWdJ9i/Zcj2S6QYIjkx62OKSfnobkriB81C3l4w0rVy3Nt4jaTBltYEpw==} + browserslist@4.28.1: + resolution: {integrity: sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -1192,8 +1205,8 @@ packages: resolution: {integrity: sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==} engines: {node: '>=14.16'} - cacheable@2.1.1: - resolution: {integrity: sha512-LmF4AXiSNdiRbI2UjH8pAp9NIXxeQsTotpEaegPiDcnN0YPygDJDV3l/Urc0mL72JWdATEorKqIHEx55nDlONg==} + cacheable@2.3.0: + resolution: {integrity: sha512-HHiAvOBmlcR2f3SQ7kdlYD8+AUJG+wlFZ/Ze8tl1Vzvz0MdOh8IYA/EFU4ve8t1/sZ0j4MGi7ST5MoTwHessQA==} call-bind-apply-helpers@1.0.2: resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} @@ -1218,8 +1231,8 @@ packages: caniuse-api@3.0.0: resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} - caniuse-lite@1.0.30001754: - resolution: {integrity: sha512-x6OeBXueoAceOmotzx3PO4Zpt4rzpeIFsSr6AAePTZxSkXiYDUmpypEl7e2+8NCd9bD7bXjqyef8CJYPC1jfxg==} + caniuse-lite@1.0.30001760: + resolution: {integrity: sha512-7AAMPcueWELt1p3mi13HR/LHH0TJLT11cnwDJEs3xA4+CK/PLKeO9Kl1oru24htkyUKtkGCvAx4ohB0Ttry8Dw==} caseless@0.12.0: resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} @@ -1439,8 +1452,8 @@ packages: resolution: {integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==} engines: {node: '>= 6'} - cssdb@8.4.2: - resolution: {integrity: sha512-PzjkRkRUS+IHDJohtxkIczlxPPZqRo0nXplsYXOMBRPjcVRjj1W4DfvRgshUYTVuUigU7ptVYkFJQ7abUB0nyg==} + cssdb@8.5.2: + resolution: {integrity: sha512-Pmoj9RmD8RIoIzA2EQWO4D4RMeDts0tgAH0VXdlNdxjuBGI3a9wMOIcUwaPNmD4r2qtIa06gqkIf7sECl+cBCg==} cssesc@3.0.0: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} @@ -1628,8 +1641,8 @@ packages: ecc-jsbn@0.1.2: resolution: {integrity: sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==} - electron-to-chromium@1.5.249: - resolution: {integrity: sha512-5vcfL3BBe++qZ5kuFhD/p8WOM1N9m3nwvJPULJx+4xf2usSlZFJ0qoNYO2fOX4hi3ocuDcmDobtA+5SFr4OmBg==} + electron-to-chromium@1.5.267: + resolution: {integrity: sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==} emittery@1.2.0: resolution: {integrity: sha512-KxdRyyFcS85pH3dnU8Y5yFUm2YJdaHwcBZWrfG8o89ZY9a13/f9itbN+YG3ELbBo9Pg5zvIozstmuV8bX13q6g==} @@ -1664,8 +1677,8 @@ packages: error-ex@1.3.4: resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} - es-abstract@1.24.0: - resolution: {integrity: sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==} + es-abstract@1.24.1: + resolution: {integrity: sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw==} engines: {node: '>= 0.4'} es-define-property@1.0.1: @@ -1694,8 +1707,8 @@ packages: peerDependencies: esbuild: 0.x.x - esbuild@0.25.12: - resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==} + esbuild@0.27.1: + resolution: {integrity: sha512-yY35KZckJJuVVPXpvjgxiCuVEJT67F6zDeVTv4rizyPrfGBUpZQsvmxnN+C371c2esD/hNMjj4tpBhuueLN7aA==} engines: {node: '>=18'} hasBin: true @@ -1801,8 +1814,8 @@ packages: resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.39.1: - resolution: {integrity: sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==} + eslint@9.39.2: + resolution: {integrity: sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -1910,8 +1923,8 @@ packages: resolution: {integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==} engines: {node: '>=18'} - file-entry-cache@10.1.4: - resolution: {integrity: sha512-5XRUFc0WTtUbjfGzEwXc42tiGxQHBmtbUG1h9L2apu4SulCGN3Hqm//9D6FAolf8MYNL7f/YlJl9vy08pj5JuA==} + file-entry-cache@11.1.1: + resolution: {integrity: sha512-TPVFSDE7q91Dlk1xpFLvFllf8r0HyOMOlnWy7Z2HBku5H3KhIeOGInexrIeg2D64DosVB/JXkrrk6N/7Wriq4A==} file-entry-cache@8.0.0: resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} @@ -1952,8 +1965,8 @@ packages: resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} engines: {node: '>=16'} - flat-cache@6.1.18: - resolution: {integrity: sha512-JUPnFgHMuAVmLmoH9/zoZ6RHOt5n9NlUw/sDXsTbROJ2SFoS2DS4s+swAV6UTeTbGH/CAsZIE6M8TaG/3jVxgQ==} + flat-cache@6.1.19: + resolution: {integrity: sha512-l/K33newPTZMTGAnnzaiqSl6NnH7Namh8jBNjrgjprWxGmZUuxx/sJNIRaijOh3n7q7ESbhNZC+pvVZMFdeU4A==} flatted@3.3.3: resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} @@ -1977,8 +1990,8 @@ packages: resolution: {integrity: sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==} engines: {node: '>= 0.12'} - fraction.js@4.3.7: - resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} + fraction.js@5.3.4: + resolution: {integrity: sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==} fs-extra@1.0.0: resolution: {integrity: sha512-VerQV6vEKuhDWD2HGOybV6v5I73syoc/cXAbKlgTC7M/oFVEtklWlp9QH2Ijw3IaWDOQcMkldSPa7zXy79Z/UQ==} @@ -2048,8 +2061,8 @@ packages: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} - glob@10.4.5: - resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + glob@10.5.0: + resolution: {integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==} hasBin: true global-modules@2.0.0: @@ -2108,9 +2121,6 @@ packages: graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - gzipper@8.2.1: resolution: {integrity: sha512-Vp2vDpwU4xKtWxTaLPfNTR4euqHJamB6aKCfSEbSd/CrgqihwNxrjihJcWJG1+3Ku1ROsfF6fPXRoytTFLhFlw==} engines: {node: '>=20.11.0'} @@ -2156,12 +2166,16 @@ packages: resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} engines: {node: '>= 0.4'} + hashery@1.3.0: + resolution: {integrity: sha512-fWltioiy5zsSAs9ouEnvhsVJeAXRybGCNNv0lvzpzNOSDbULXRy7ivFWwCCv4I5Am6kSo75hmbsCduOoc2/K4w==} + engines: {node: '>=20'} + hasown@2.0.2: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} - hookified@1.12.2: - resolution: {integrity: sha512-aokUX1VdTpI0DUsndvW+OiwmBpKCu/NgRsSSkuSY0zq8PY6Q6a+lmOfAFDXAAOtBqJELvcWY9L1EVtzjbQcMdg==} + hookified@1.14.0: + resolution: {integrity: sha512-pi1ynXIMFx/uIIwpWJ/5CEtOHLGtnUB0WhGeeYT+fKcQ+WCQbm3/rrkAXnpfph++PgepNqPdTC2WTj8A6k6zoQ==} hosted-git-info@2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} @@ -2433,12 +2447,12 @@ packages: js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - js-yaml@3.14.1: - resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + js-yaml@3.14.2: + resolution: {integrity: sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==} hasBin: true - js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + js-yaml@4.1.1: + resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} hasBin: true jsbn@0.1.1: @@ -2495,8 +2509,8 @@ packages: keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} - keyv@5.5.3: - resolution: {integrity: sha512-h0Un1ieD+HUrzBH6dJXhod3ifSghk5Hw/2Y4/KHBziPlZecrFyE9YOTPU6eOs0V9pYl8gOs86fkr/KN8lUX39A==} + keyv@5.5.5: + resolution: {integrity: sha512-FA5LmZVF1VziNc0bIdCSA1IoSVnDCqE8HJIZZv2/W8YmoAM50+tnUgJR/gQZwEeIMleuIOnRnHA/UaZRNeV4iQ==} kind-of@6.0.3: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} @@ -2505,9 +2519,6 @@ packages: klaw@1.3.1: resolution: {integrity: sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==} - known-css-properties@0.36.0: - resolution: {integrity: sha512-A+9jP+IUmuQsNdsLdcg6Yt7voiMF/D4K83ew0OpJtpu+l34ef7LaohWV0Rc6KNvzw6ZDizkqfyB5JznZnzuKQA==} - known-css-properties@0.37.0: resolution: {integrity: sha512-JCDrsP4Z1Sb9JwG0aJ8Eo2r7k4Ou5MwmThS/6lcIe1ICyb7UBJKGRIUUdqc2ASdE/42lgz6zFUnzAIhtXnBVrQ==} @@ -2758,10 +2769,6 @@ packages: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} - normalize-range@0.1.2: - resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} - engines: {node: '>=0.10.0'} - normalize-url@8.1.0: resolution: {integrity: sha512-X06Mfd/5aKsRHc0O0J5CUedwnPmnDtLF2+nq+KN9KSDlJHkPuh0JUviWjEWMe0SW/9TDdSLVPuk7L5gGTIA1/w==} engines: {node: '>=14.16'} @@ -2838,8 +2845,8 @@ packages: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} - p-map@7.0.3: - resolution: {integrity: sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==} + p-map@7.0.4: + resolution: {integrity: sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ==} engines: {node: '>=18'} p-timeout@6.1.4: @@ -3240,8 +3247,8 @@ packages: peerDependencies: postcss: ^8.4 - postcss-preset-env@10.4.0: - resolution: {integrity: sha512-2kqpOthQ6JhxqQq1FSAAZGe9COQv75Aw8WbsOvQVNJ2nSevc9Yx/IKZGuZ7XJ+iOTtVon7LfO7ELRzg8AZ+sdw==} + postcss-preset-env@10.5.0: + resolution: {integrity: sha512-xgxFQPAPxeWmsgy8cR7GM1PGAL/smA5E9qU7K//D4vucS01es3M0fDujhDJn3kY8Ip7/vVYcecbe1yY+vBo3qQ==} engines: {node: '>=18'} peerDependencies: postcss: ^8.4 @@ -3296,8 +3303,8 @@ packages: peerDependencies: postcss: ^8.4 - postcss-selector-parser@7.1.0: - resolution: {integrity: sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==} + postcss-selector-parser@7.1.1: + resolution: {integrity: sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==} engines: {node: '>=4'} postcss-sorting@9.1.0: @@ -3357,8 +3364,8 @@ packages: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} - qified@0.5.1: - resolution: {integrity: sha512-+BtFN3dCP+IaFA6IYNOu/f/uK1B8xD2QWyOeCse0rjtAebBmkzgd2d1OAXi3ikAzJMIBSdzZDNZ3wZKEUDQs5w==} + qified@0.5.3: + resolution: {integrity: sha512-kXuQdQTB6oN3KhI6V4acnBSZx8D2I4xzZvn9+wFLLFCoBNQY/sFnCW6c43OL7pOQ2HvGV4lnWIXNmgfp7cTWhQ==} engines: {node: '>=20'} qs@6.5.3: @@ -3482,8 +3489,8 @@ packages: safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - sass@1.93.3: - resolution: {integrity: sha512-elOcIZRTM76dvxNAjqYrucTSI0teAF/L2Lv0s6f6b7FOwcwIuA357bIE871580AjHJuSvLIRUosgV+lIWx6Rgg==} + sass@1.96.0: + resolution: {integrity: sha512-8u4xqqUeugGNCYwr9ARNtQKTOj4KmYiJAVKXf2CTIivTCR51j96htbMKWDru8H5SaQWpyVgTfOF8Ylyf5pun1Q==} engines: {node: '>=14.0.0'} hasBin: true @@ -3760,14 +3767,14 @@ packages: peerDependencies: stylelint: ^16.18.0 - stylelint-scss@6.12.1: - resolution: {integrity: sha512-UJUfBFIvXfly8WKIgmqfmkGKPilKB4L5j38JfsDd+OCg2GBdU0vGUV08Uw82tsRZzd4TbsUURVVNGeOhJVF7pA==} + stylelint-scss@6.13.0: + resolution: {integrity: sha512-kZPwFUJkfup2gP1enlrS2h9U5+T5wFoqzJ1n/56AlpwSj28kmFe7ww/QFydvPsg5gLjWchAwWWBLtterynZrOw==} engines: {node: '>=18.12.0'} peerDependencies: - stylelint: ^16.0.2 + stylelint: ^16.8.2 - stylelint@16.25.0: - resolution: {integrity: sha512-Li0avYWV4nfv1zPbdnxLYBGq4z8DVZxbRgx4Kn6V+Uftz1rMoF1qiEI3oL4kgWqyYgCgs7gT5maHNZ82Gk03vQ==} + stylelint@16.26.1: + resolution: {integrity: sha512-v20V59/crfc8sVTAtge0mdafI3AdnzQ2KsWe6v523L4OA1bJO02S7MO2oyXDCS6iWb9ckIPnqAFVItqSBQr7jw==} engines: {node: '>=18.12.0'} hasBin: true @@ -3840,8 +3847,8 @@ packages: dat.gui: 0.x.x three: 0.x.x - three@0.181.0: - resolution: {integrity: sha512-KGf6EOCOQGshXeleKxpxhbowQwAXR2dLlD93egHtZ9Qmk07Saf8sXDR+7wJb53Z1ORZiatZ4WGST9UsVxhHEbg==} + three@0.182.0: + resolution: {integrity: sha512-GbHabT+Irv+ihI1/f5kIIsZ+Ef9Sl5A1Y7imvS5RQjWgtTPfPnZ43JmlYI7NtCRDK9zir20lQpfg8/9Yd02OvQ==} through2@2.0.5: resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} @@ -3963,8 +3970,8 @@ packages: resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} engines: {node: '>= 10.0.0'} - update-browserslist-db@1.1.4: - resolution: {integrity: sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==} + update-browserslist-db@1.2.2: + resolution: {integrity: sha512-E85pfNzMQ9jpKkA7+TJAi4TJN+tBCuWh5rUcS/sv6cFi+1q9LYDwDI5dpUL0u/73EElyQ8d3TEaeW4sPedBqYA==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' @@ -4066,8 +4073,8 @@ packages: resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==} engines: {node: '>=18'} - yaml@2.8.1: - resolution: {integrity: sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==} + yaml@2.8.2: + resolution: {integrity: sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==} engines: {node: '>= 14.6'} hasBin: true @@ -4099,20 +4106,17 @@ snapshots: '@borewit/text-codec@0.1.1': {} - '@cacheable/memoize@2.0.3': - dependencies: - '@cacheable/utils': 2.2.0 - - '@cacheable/memory@2.0.4': + '@cacheable/memory@2.0.6': dependencies: - '@cacheable/utils': 2.2.0 - '@keyv/bigmap': 1.1.0(keyv@5.5.3) - hookified: 1.12.2 - keyv: 5.5.3 + '@cacheable/utils': 2.3.2 + '@keyv/bigmap': 1.3.0(keyv@5.5.5) + hookified: 1.14.0 + keyv: 5.5.5 - '@cacheable/utils@2.2.0': + '@cacheable/utils@2.3.2': dependencies: - keyv: 5.5.3 + hashery: 1.3.0 + keyv: 5.5.5 '@csstools/cascade-layer-name-parser@2.0.5(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)': dependencies: @@ -4137,6 +4141,8 @@ snapshots: dependencies: '@csstools/css-tokenizer': 3.0.4 + '@csstools/css-syntax-patches-for-csstree@1.0.21': {} + '@csstools/css-tokenizer@3.0.4': {} '@csstools/media-query-list-parser@4.0.3(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)': @@ -4155,9 +4161,9 @@ snapshots: '@csstools/postcss-cascade-layers@5.0.2(postcss@8.5.6)': dependencies: - '@csstools/selector-specificity': 5.0.0(postcss-selector-parser@7.1.0) + '@csstools/selector-specificity': 5.0.0(postcss-selector-parser@7.1.1) postcss: 8.5.6 - postcss-selector-parser: 7.1.0 + postcss-selector-parser: 7.1.1 '@csstools/postcss-color-function-display-p3-linear@1.0.1(postcss@8.5.6)': dependencies: @@ -4263,9 +4269,9 @@ snapshots: '@csstools/postcss-is-pseudo-class@5.0.3(postcss@8.5.6)': dependencies: - '@csstools/selector-specificity': 5.0.0(postcss-selector-parser@7.1.0) + '@csstools/selector-specificity': 5.0.0(postcss-selector-parser@7.1.1) postcss: 8.5.6 - postcss-selector-parser: 7.1.0 + postcss-selector-parser: 7.1.1 '@csstools/postcss-light-dark-function@2.0.11(postcss@8.5.6)': dependencies: @@ -4333,6 +4339,10 @@ snapshots: '@csstools/utilities': 2.0.0(postcss@8.5.6) postcss: 8.5.6 + '@csstools/postcss-position-area-property@1.0.0(postcss@8.5.6)': + dependencies: + postcss: 8.5.6 + '@csstools/postcss-progressive-custom-properties@4.2.1(postcss@8.5.6)': dependencies: postcss: 8.5.6 @@ -4357,7 +4367,7 @@ snapshots: '@csstools/postcss-scope-pseudo-class@4.0.1(postcss@8.5.6)': dependencies: postcss: 8.5.6 - postcss-selector-parser: 7.1.0 + postcss-selector-parser: 7.1.1 '@csstools/postcss-sign-functions@1.1.4(postcss@8.5.6)': dependencies: @@ -4373,6 +4383,12 @@ snapshots: '@csstools/css-tokenizer': 3.0.4 postcss: 8.5.6 + '@csstools/postcss-system-ui-font-family@1.0.0(postcss@8.5.6)': + dependencies: + '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@csstools/css-tokenizer': 3.0.4 + postcss: 8.5.6 + '@csstools/postcss-text-decoration-shorthand@4.0.3(postcss@8.5.6)': dependencies: '@csstools/color-helpers': 5.1.0 @@ -4390,13 +4406,13 @@ snapshots: dependencies: postcss: 8.5.6 - '@csstools/selector-resolve-nested@3.1.0(postcss-selector-parser@7.1.0)': + '@csstools/selector-resolve-nested@3.1.0(postcss-selector-parser@7.1.1)': dependencies: - postcss-selector-parser: 7.1.0 + postcss-selector-parser: 7.1.1 - '@csstools/selector-specificity@5.0.0(postcss-selector-parser@7.1.0)': + '@csstools/selector-specificity@5.0.0(postcss-selector-parser@7.1.1)': dependencies: - postcss-selector-parser: 7.1.0 + postcss-selector-parser: 7.1.1 '@csstools/utilities@2.0.0(postcss@8.5.6)': dependencies: @@ -4406,87 +4422,87 @@ snapshots: '@dual-bundle/import-meta-resolve@4.2.1': {} - '@esbuild/aix-ppc64@0.25.12': + '@esbuild/aix-ppc64@0.27.1': optional: true - '@esbuild/android-arm64@0.25.12': + '@esbuild/android-arm64@0.27.1': optional: true - '@esbuild/android-arm@0.25.12': + '@esbuild/android-arm@0.27.1': optional: true - '@esbuild/android-x64@0.25.12': + '@esbuild/android-x64@0.27.1': optional: true - '@esbuild/darwin-arm64@0.25.12': + '@esbuild/darwin-arm64@0.27.1': optional: true - '@esbuild/darwin-x64@0.25.12': + '@esbuild/darwin-x64@0.27.1': optional: true - '@esbuild/freebsd-arm64@0.25.12': + '@esbuild/freebsd-arm64@0.27.1': optional: true - '@esbuild/freebsd-x64@0.25.12': + '@esbuild/freebsd-x64@0.27.1': optional: true - '@esbuild/linux-arm64@0.25.12': + '@esbuild/linux-arm64@0.27.1': optional: true - '@esbuild/linux-arm@0.25.12': + '@esbuild/linux-arm@0.27.1': optional: true - '@esbuild/linux-ia32@0.25.12': + '@esbuild/linux-ia32@0.27.1': optional: true - '@esbuild/linux-loong64@0.25.12': + '@esbuild/linux-loong64@0.27.1': optional: true - '@esbuild/linux-mips64el@0.25.12': + '@esbuild/linux-mips64el@0.27.1': optional: true - '@esbuild/linux-ppc64@0.25.12': + '@esbuild/linux-ppc64@0.27.1': optional: true - '@esbuild/linux-riscv64@0.25.12': + '@esbuild/linux-riscv64@0.27.1': optional: true - '@esbuild/linux-s390x@0.25.12': + '@esbuild/linux-s390x@0.27.1': optional: true - '@esbuild/linux-x64@0.25.12': + '@esbuild/linux-x64@0.27.1': optional: true - '@esbuild/netbsd-arm64@0.25.12': + '@esbuild/netbsd-arm64@0.27.1': optional: true - '@esbuild/netbsd-x64@0.25.12': + '@esbuild/netbsd-x64@0.27.1': optional: true - '@esbuild/openbsd-arm64@0.25.12': + '@esbuild/openbsd-arm64@0.27.1': optional: true - '@esbuild/openbsd-x64@0.25.12': + '@esbuild/openbsd-x64@0.27.1': optional: true - '@esbuild/openharmony-arm64@0.25.12': + '@esbuild/openharmony-arm64@0.27.1': optional: true - '@esbuild/sunos-x64@0.25.12': + '@esbuild/sunos-x64@0.27.1': optional: true - '@esbuild/win32-arm64@0.25.12': + '@esbuild/win32-arm64@0.27.1': optional: true - '@esbuild/win32-ia32@0.25.12': + '@esbuild/win32-ia32@0.27.1': optional: true - '@esbuild/win32-x64@0.25.12': + '@esbuild/win32-x64@0.27.1': optional: true - '@eslint-community/eslint-utils@4.9.0(eslint@9.39.1)': + '@eslint-community/eslint-utils@4.9.0(eslint@9.39.2)': dependencies: - eslint: 9.39.1 + eslint: 9.39.2 eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.2': {} @@ -4507,7 +4523,7 @@ snapshots: dependencies: '@types/json-schema': 7.0.15 - '@eslint/eslintrc@3.3.1': + '@eslint/eslintrc@3.3.3': dependencies: ajv: 6.12.6 debug: 4.4.3 @@ -4515,13 +4531,13 @@ snapshots: globals: 14.0.0 ignore: 5.3.2 import-fresh: 3.3.1 - js-yaml: 4.1.0 + js-yaml: 4.1.1 minimatch: 3.1.2 strip-json-comments: 3.1.1 transitivePeerDependencies: - supports-color - '@eslint/js@9.39.1': {} + '@eslint/js@9.39.2': {} '@eslint/object-schema@2.1.7': {} @@ -4558,14 +4574,15 @@ snapshots: dependencies: minipass: 7.1.2 - '@keyv/bigmap@1.1.0(keyv@5.5.3)': + '@keyv/bigmap@1.3.0(keyv@5.5.5)': dependencies: - hookified: 1.12.2 - keyv: 5.5.3 + hashery: 1.3.0 + hookified: 1.14.0 + keyv: 5.5.5 '@keyv/serialize@1.1.1': {} - '@mapbox/node-pre-gyp@2.0.0': + '@mapbox/node-pre-gyp@2.0.3': dependencies: consola: 3.4.2 detect-libc: 2.1.2 @@ -4666,11 +4683,11 @@ snapshots: '@sindresorhus/merge-streams@4.0.0': {} - '@stylistic/eslint-plugin@5.5.0(eslint@9.39.1)': + '@stylistic/eslint-plugin@5.6.1(eslint@9.39.2)': dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1) - '@typescript-eslint/types': 8.46.3 - eslint: 9.39.1 + '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.2) + '@typescript-eslint/types': 8.49.0 + eslint: 9.39.2 eslint-visitor-keys: 4.2.1 espree: 10.4.0 estraverse: 5.3.0 @@ -4700,34 +4717,33 @@ snapshots: '@types/json-schema@7.0.15': {} - '@types/node@24.10.0': + '@types/node@25.0.2': dependencies: undici-types: 7.16.0 '@types/stats.js@0.17.4': {} - '@types/three@0.181.0': + '@types/three@0.182.0': dependencies: '@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.66 + '@webgpu/types': 0.1.68 fflate: 0.8.2 meshoptimizer: 0.22.0 '@types/webxr@0.5.24': {} - '@typescript-eslint/eslint-plugin@8.46.3(@typescript-eslint/parser@8.46.3(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3)': + '@typescript-eslint/eslint-plugin@8.49.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2)(typescript@5.9.3))(eslint@9.39.2)(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.46.3(eslint@9.39.1)(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.46.3 - '@typescript-eslint/type-utils': 8.46.3(eslint@9.39.1)(typescript@5.9.3) - '@typescript-eslint/utils': 8.46.3(eslint@9.39.1)(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.46.3 - eslint: 9.39.1 - graphemer: 1.4.0 + '@typescript-eslint/parser': 8.49.0(eslint@9.39.2)(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.49.0 + '@typescript-eslint/type-utils': 8.49.0(eslint@9.39.2)(typescript@5.9.3) + '@typescript-eslint/utils': 8.49.0(eslint@9.39.2)(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.49.0 + eslint: 9.39.2 ignore: 7.0.5 natural-compare: 1.4.0 ts-api-utils: 2.1.0(typescript@5.9.3) @@ -4735,92 +4751,91 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.46.3(eslint@9.39.1)(typescript@5.9.3)': + '@typescript-eslint/parser@8.49.0(eslint@9.39.2)(typescript@5.9.3)': dependencies: - '@typescript-eslint/scope-manager': 8.46.3 - '@typescript-eslint/types': 8.46.3 - '@typescript-eslint/typescript-estree': 8.46.3(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.46.3 + '@typescript-eslint/scope-manager': 8.49.0 + '@typescript-eslint/types': 8.49.0 + '@typescript-eslint/typescript-estree': 8.49.0(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.49.0 debug: 4.4.3 - eslint: 9.39.1 + eslint: 9.39.2 typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.46.3(typescript@5.9.3)': + '@typescript-eslint/project-service@8.49.0(typescript@5.9.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.46.3(typescript@5.9.3) - '@typescript-eslint/types': 8.46.3 + '@typescript-eslint/tsconfig-utils': 8.49.0(typescript@5.9.3) + '@typescript-eslint/types': 8.49.0 debug: 4.4.3 typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.46.3': + '@typescript-eslint/scope-manager@8.49.0': dependencies: - '@typescript-eslint/types': 8.46.3 - '@typescript-eslint/visitor-keys': 8.46.3 + '@typescript-eslint/types': 8.49.0 + '@typescript-eslint/visitor-keys': 8.49.0 - '@typescript-eslint/tsconfig-utils@8.46.3(typescript@5.9.3)': + '@typescript-eslint/tsconfig-utils@8.49.0(typescript@5.9.3)': dependencies: typescript: 5.9.3 - '@typescript-eslint/type-utils@8.46.3(eslint@9.39.1)(typescript@5.9.3)': + '@typescript-eslint/type-utils@8.49.0(eslint@9.39.2)(typescript@5.9.3)': dependencies: - '@typescript-eslint/types': 8.46.3 - '@typescript-eslint/typescript-estree': 8.46.3(typescript@5.9.3) - '@typescript-eslint/utils': 8.46.3(eslint@9.39.1)(typescript@5.9.3) + '@typescript-eslint/types': 8.49.0 + '@typescript-eslint/typescript-estree': 8.49.0(typescript@5.9.3) + '@typescript-eslint/utils': 8.49.0(eslint@9.39.2)(typescript@5.9.3) debug: 4.4.3 - eslint: 9.39.1 + eslint: 9.39.2 ts-api-utils: 2.1.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.46.3': {} + '@typescript-eslint/types@8.49.0': {} - '@typescript-eslint/typescript-estree@8.46.3(typescript@5.9.3)': + '@typescript-eslint/typescript-estree@8.49.0(typescript@5.9.3)': dependencies: - '@typescript-eslint/project-service': 8.46.3(typescript@5.9.3) - '@typescript-eslint/tsconfig-utils': 8.46.3(typescript@5.9.3) - '@typescript-eslint/types': 8.46.3 - '@typescript-eslint/visitor-keys': 8.46.3 + '@typescript-eslint/project-service': 8.49.0(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.49.0(typescript@5.9.3) + '@typescript-eslint/types': 8.49.0 + '@typescript-eslint/visitor-keys': 8.49.0 debug: 4.4.3 - fast-glob: 3.3.3 - is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.7.3 + tinyglobby: 0.2.15 ts-api-utils: 2.1.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.46.3(eslint@9.39.1)(typescript@5.9.3)': + '@typescript-eslint/utils@8.49.0(eslint@9.39.2)(typescript@5.9.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1) - '@typescript-eslint/scope-manager': 8.46.3 - '@typescript-eslint/types': 8.46.3 - '@typescript-eslint/typescript-estree': 8.46.3(typescript@5.9.3) - eslint: 9.39.1 + '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.2) + '@typescript-eslint/scope-manager': 8.49.0 + '@typescript-eslint/types': 8.49.0 + '@typescript-eslint/typescript-estree': 8.49.0(typescript@5.9.3) + eslint: 9.39.2 typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.46.3': + '@typescript-eslint/visitor-keys@8.49.0': dependencies: - '@typescript-eslint/types': 8.46.3 + '@typescript-eslint/types': 8.49.0 eslint-visitor-keys: 4.2.1 '@vercel/nft@0.29.4': dependencies: - '@mapbox/node-pre-gyp': 2.0.0 + '@mapbox/node-pre-gyp': 2.0.3 '@rollup/pluginutils': 5.3.0 acorn: 8.15.0 acorn-import-attributes: 1.9.5(acorn@8.15.0) async-sema: 3.1.1 bindings: 1.5.0 estree-walker: 2.0.2 - glob: 10.4.5 + glob: 10.5.0 graceful-fs: 4.2.11 node-gyp-build: 4.8.4 picomatch: 4.0.3 @@ -4830,7 +4845,7 @@ snapshots: - rollup - supports-color - '@webgpu/types@0.1.66': {} + '@webgpu/types@0.1.68': {} '@xhmikosr/archive-type@7.1.0': dependencies: @@ -5015,7 +5030,7 @@ snapshots: array-buffer-byte-length: 1.0.2 call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.24.0 + es-abstract: 1.24.1 es-errors: 1.3.0 get-intrinsic: 1.3.0 is-array-buffer: 3.0.5 @@ -5041,12 +5056,11 @@ snapshots: asynckit@0.4.0: optional: true - autoprefixer@10.4.21(postcss@8.5.6): + autoprefixer@10.4.23(postcss@8.5.6): dependencies: - browserslist: 4.27.0 - caniuse-lite: 1.0.30001754 - fraction.js: 4.3.7 - normalize-range: 0.1.2 + browserslist: 4.28.1 + caniuse-lite: 1.0.30001760 + fraction.js: 5.3.4 picocolors: 1.1.1 postcss: 8.5.6 postcss-value-parser: 4.2.0 @@ -5081,7 +5095,7 @@ snapshots: matcher: 5.0.0 memoize: 10.2.0 ms: 2.1.3 - p-map: 7.0.3 + p-map: 7.0.4 package-config: 5.0.0 picomatch: 4.0.3 plur: 5.1.0 @@ -5176,7 +5190,7 @@ snapshots: base64-js@1.5.1: {} - baseline-browser-mapping@2.8.25: {} + baseline-browser-mapping@2.9.7: {} bcrypt-pbkdf@1.0.2: dependencies: @@ -5217,13 +5231,13 @@ snapshots: dependencies: fill-range: 7.1.1 - browserslist@4.27.0: + browserslist@4.28.1: dependencies: - baseline-browser-mapping: 2.8.25 - caniuse-lite: 1.0.30001754 - electron-to-chromium: 1.5.249 + baseline-browser-mapping: 2.9.7 + caniuse-lite: 1.0.30001760 + electron-to-chromium: 1.5.267 node-releases: 2.0.27 - update-browserslist-db: 1.1.4(browserslist@4.27.0) + update-browserslist-db: 1.2.2(browserslist@4.28.1) buffer-crc32@0.2.13: {} @@ -5246,14 +5260,13 @@ snapshots: normalize-url: 8.1.0 responselike: 3.0.0 - cacheable@2.1.1: + cacheable@2.3.0: dependencies: - '@cacheable/memoize': 2.0.3 - '@cacheable/memory': 2.0.4 - '@cacheable/utils': 2.2.0 - hookified: 1.12.2 - keyv: 5.5.3 - qified: 0.5.1 + '@cacheable/memory': 2.0.6 + '@cacheable/utils': 2.3.2 + hookified: 1.14.0 + keyv: 5.5.5 + qified: 0.5.3 call-bind-apply-helpers@1.0.2: dependencies: @@ -5278,12 +5291,12 @@ snapshots: caniuse-api@3.0.0: dependencies: - browserslist: 4.27.0 - caniuse-lite: 1.0.30001754 + browserslist: 4.28.1 + caniuse-lite: 1.0.30001760 lodash.memoize: 4.1.2 lodash.uniq: 4.5.0 - caniuse-lite@1.0.30001754: {} + caniuse-lite@1.0.30001760: {} caseless@0.12.0: optional: true @@ -5458,7 +5471,7 @@ snapshots: dependencies: env-paths: 2.2.1 import-fresh: 3.3.1 - js-yaml: 4.1.0 + js-yaml: 4.1.1 parse-json: 5.2.0 optionalDependencies: typescript: 5.9.3 @@ -5475,7 +5488,7 @@ snapshots: junk: 4.0.1 micromatch: 4.0.8 p-filter: 4.1.0 - p-map: 7.0.3 + p-map: 7.0.4 cross-spawn@6.0.6: dependencies: @@ -5494,7 +5507,7 @@ snapshots: css-blank-pseudo@7.0.1(postcss@8.5.6): dependencies: postcss: 8.5.6 - postcss-selector-parser: 7.1.0 + postcss-selector-parser: 7.1.1 css-declaration-sorter@7.3.0(postcss@8.5.6): dependencies: @@ -5504,9 +5517,9 @@ snapshots: css-has-pseudo@7.0.3(postcss@8.5.6): dependencies: - '@csstools/selector-specificity': 5.0.0(postcss-selector-parser@7.1.0) + '@csstools/selector-specificity': 5.0.0(postcss-selector-parser@7.1.1) postcss: 8.5.6 - postcss-selector-parser: 7.1.0 + postcss-selector-parser: 7.1.1 postcss-value-parser: 4.2.0 css-prefers-color-scheme@10.0.0(postcss@8.5.6): @@ -5542,13 +5555,13 @@ snapshots: css-what@6.2.2: {} - cssdb@8.4.2: {} + cssdb@8.5.2: {} cssesc@3.0.0: {} cssnano-preset-default@7.0.10(postcss@8.5.6): dependencies: - browserslist: 4.27.0 + browserslist: 4.28.1 css-declaration-sorter: 7.3.0(postcss@8.5.6) cssnano-utils: 5.0.1(postcss@8.5.6) postcss: 8.5.6 @@ -5677,7 +5690,7 @@ snapshots: is-glob: 4.0.3 is-path-cwd: 3.0.0 is-path-inside: 4.0.0 - p-map: 7.0.3 + p-map: 7.0.4 presentable-error: 0.0.1 slash: 5.1.0 @@ -5771,7 +5784,7 @@ snapshots: safer-buffer: 2.1.2 optional: true - electron-to-chromium@1.5.249: {} + electron-to-chromium@1.5.267: {} emittery@1.2.0: {} @@ -5797,7 +5810,7 @@ snapshots: dependencies: is-arrayish: 0.2.1 - es-abstract@1.24.0: + es-abstract@1.24.1: dependencies: array-buffer-byte-length: 1.0.2 arraybuffer.prototype.slice: 1.0.4 @@ -5875,38 +5888,38 @@ snapshots: is-date-object: 1.1.0 is-symbol: 1.1.1 - esbuild-plugin-glsl@1.4.1(esbuild@0.25.12): + esbuild-plugin-glsl@1.4.1(esbuild@0.27.1): dependencies: - esbuild: 0.25.12 + esbuild: 0.27.1 - esbuild@0.25.12: + esbuild@0.27.1: optionalDependencies: - '@esbuild/aix-ppc64': 0.25.12 - '@esbuild/android-arm': 0.25.12 - '@esbuild/android-arm64': 0.25.12 - '@esbuild/android-x64': 0.25.12 - '@esbuild/darwin-arm64': 0.25.12 - '@esbuild/darwin-x64': 0.25.12 - '@esbuild/freebsd-arm64': 0.25.12 - '@esbuild/freebsd-x64': 0.25.12 - '@esbuild/linux-arm': 0.25.12 - '@esbuild/linux-arm64': 0.25.12 - '@esbuild/linux-ia32': 0.25.12 - '@esbuild/linux-loong64': 0.25.12 - '@esbuild/linux-mips64el': 0.25.12 - '@esbuild/linux-ppc64': 0.25.12 - '@esbuild/linux-riscv64': 0.25.12 - '@esbuild/linux-s390x': 0.25.12 - '@esbuild/linux-x64': 0.25.12 - '@esbuild/netbsd-arm64': 0.25.12 - '@esbuild/netbsd-x64': 0.25.12 - '@esbuild/openbsd-arm64': 0.25.12 - '@esbuild/openbsd-x64': 0.25.12 - '@esbuild/openharmony-arm64': 0.25.12 - '@esbuild/sunos-x64': 0.25.12 - '@esbuild/win32-arm64': 0.25.12 - '@esbuild/win32-ia32': 0.25.12 - '@esbuild/win32-x64': 0.25.12 + '@esbuild/aix-ppc64': 0.27.1 + '@esbuild/android-arm': 0.27.1 + '@esbuild/android-arm64': 0.27.1 + '@esbuild/android-x64': 0.27.1 + '@esbuild/darwin-arm64': 0.27.1 + '@esbuild/darwin-x64': 0.27.1 + '@esbuild/freebsd-arm64': 0.27.1 + '@esbuild/freebsd-x64': 0.27.1 + '@esbuild/linux-arm': 0.27.1 + '@esbuild/linux-arm64': 0.27.1 + '@esbuild/linux-ia32': 0.27.1 + '@esbuild/linux-loong64': 0.27.1 + '@esbuild/linux-mips64el': 0.27.1 + '@esbuild/linux-ppc64': 0.27.1 + '@esbuild/linux-riscv64': 0.27.1 + '@esbuild/linux-s390x': 0.27.1 + '@esbuild/linux-x64': 0.27.1 + '@esbuild/netbsd-arm64': 0.27.1 + '@esbuild/netbsd-x64': 0.27.1 + '@esbuild/openbsd-arm64': 0.27.1 + '@esbuild/openbsd-x64': 0.27.1 + '@esbuild/openharmony-arm64': 0.27.1 + '@esbuild/sunos-x64': 0.27.1 + '@esbuild/win32-arm64': 0.27.1 + '@esbuild/win32-ia32': 0.27.1 + '@esbuild/win32-x64': 0.27.1 escalade@3.2.0: {} @@ -5996,13 +6009,13 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-config-aether@2.0.3(eslint@9.39.1)(typescript@5.9.3): + eslint-config-aether@2.0.3(eslint@9.39.2)(typescript@5.9.3): dependencies: - '@eslint/js': 9.39.1 - '@stylistic/eslint-plugin': 5.5.0(eslint@9.39.1) - '@typescript-eslint/eslint-plugin': 8.46.3(@typescript-eslint/parser@8.46.3(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3) - '@typescript-eslint/parser': 8.46.3(eslint@9.39.1)(typescript@5.9.3) - eslint: 9.39.1 + '@eslint/js': 9.39.2 + '@stylistic/eslint-plugin': 5.6.1(eslint@9.39.2) + '@typescript-eslint/eslint-plugin': 8.49.0(@typescript-eslint/parser@8.49.0(eslint@9.39.2)(typescript@5.9.3))(eslint@9.39.2)(typescript@5.9.3) + '@typescript-eslint/parser': 8.49.0(eslint@9.39.2)(typescript@5.9.3) + eslint: 9.39.2 globals: 16.5.0 transitivePeerDependencies: - supports-color @@ -6017,15 +6030,15 @@ snapshots: eslint-visitor-keys@4.2.1: {} - eslint@9.39.1: + eslint@9.39.2: dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.2) '@eslint-community/regexpp': 4.12.2 '@eslint/config-array': 0.21.1 '@eslint/config-helpers': 0.4.2 '@eslint/core': 0.17.0 - '@eslint/eslintrc': 3.3.1 - '@eslint/js': 9.39.1 + '@eslint/eslintrc': 3.3.3 + '@eslint/js': 9.39.2 '@eslint/plugin-kit': 0.4.1 '@humanfs/node': 0.16.7 '@humanwhocodes/module-importer': 1.0.1 @@ -6150,9 +6163,9 @@ snapshots: dependencies: is-unicode-supported: 2.1.0 - file-entry-cache@10.1.4: + file-entry-cache@11.1.1: dependencies: - flat-cache: 6.1.18 + flat-cache: 6.1.19 file-entry-cache@8.0.0: dependencies: @@ -6195,11 +6208,11 @@ snapshots: flatted: 3.3.3 keyv: 4.5.4 - flat-cache@6.1.18: + flat-cache@6.1.19: dependencies: - cacheable: 2.1.1 + cacheable: 2.3.0 flatted: 3.3.3 - hookified: 1.12.2 + hookified: 1.14.0 flatted@3.3.3: {} @@ -6224,7 +6237,7 @@ snapshots: mime-types: 2.1.35 optional: true - fraction.js@4.3.7: {} + fraction.js@5.3.4: {} fs-extra@1.0.0: dependencies: @@ -6307,7 +6320,7 @@ snapshots: dependencies: is-glob: 4.0.3 - glob@10.4.5: + glob@10.5.0: dependencies: foreground-child: 3.3.1 jackspeak: 3.4.3 @@ -6388,8 +6401,6 @@ snapshots: graceful-fs@4.2.11: {} - graphemer@1.4.0: {} - gzipper@8.2.1: dependencies: '@gfx/zopfli': 1.0.15 @@ -6429,11 +6440,15 @@ snapshots: dependencies: has-symbols: 1.1.0 + hashery@1.3.0: + dependencies: + hookified: 1.14.0 + hasown@2.0.2: dependencies: function-bind: 1.1.2 - hookified@1.12.2: {} + hookified@1.14.0: {} hosted-git-info@2.8.9: {} @@ -6694,12 +6709,12 @@ snapshots: js-tokens@4.0.0: {} - js-yaml@3.14.1: + js-yaml@3.14.2: dependencies: argparse: 1.0.10 esprima: 4.0.1 - js-yaml@4.1.0: + js-yaml@4.1.1: dependencies: argparse: 2.0.1 @@ -6773,7 +6788,7 @@ snapshots: dependencies: json-buffer: 3.0.1 - keyv@5.5.3: + keyv@5.5.5: dependencies: '@keyv/serialize': 1.1.1 @@ -6783,8 +6798,6 @@ snapshots: optionalDependencies: graceful-fs: 4.2.11 - known-css-properties@0.36.0: {} - known-css-properties@0.37.0: {} levn@0.3.0: @@ -6968,8 +6981,6 @@ snapshots: normalize-path@3.0.0: {} - normalize-range@0.1.2: {} - normalize-url@8.1.0: {} npm-run-all@4.1.5: @@ -7056,7 +7067,7 @@ snapshots: p-filter@4.1.0: dependencies: - p-map: 7.0.3 + p-map: 7.0.4 p-limit@3.1.0: dependencies: @@ -7066,7 +7077,7 @@ snapshots: dependencies: p-limit: 3.1.0 - p-map@7.0.3: {} + p-map@7.0.4: {} p-timeout@6.1.4: {} @@ -7100,7 +7111,7 @@ snapshots: parse5@3.0.3: dependencies: - '@types/node': 24.10.0 + '@types/node': 25.0.2 path-exists@4.0.0: {} @@ -7155,12 +7166,12 @@ snapshots: postcss-attribute-case-insensitive@7.0.1(postcss@8.5.6): dependencies: postcss: 8.5.6 - postcss-selector-parser: 7.1.0 + postcss-selector-parser: 7.1.1 postcss-calc@10.1.1(postcss@8.5.6): dependencies: postcss: 8.5.6 - postcss-selector-parser: 7.1.0 + postcss-selector-parser: 7.1.1 postcss-value-parser: 4.2.0 postcss-clamp@4.1.0(postcss@8.5.6): @@ -7209,7 +7220,7 @@ snapshots: postcss-colormin@7.0.5(postcss@8.5.6): dependencies: - browserslist: 4.27.0 + browserslist: 4.28.1 caniuse-api: 3.0.0 colord: 2.9.3 postcss: 8.5.6 @@ -7217,7 +7228,7 @@ snapshots: postcss-convert-values@7.0.8(postcss@8.5.6): dependencies: - browserslist: 4.27.0 + browserslist: 4.28.1 postcss: 8.5.6 postcss-value-parser: 4.2.0 @@ -7244,17 +7255,17 @@ snapshots: '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) '@csstools/css-tokenizer': 3.0.4 postcss: 8.5.6 - postcss-selector-parser: 7.1.0 + postcss-selector-parser: 7.1.1 postcss-dir-pseudo-class@9.0.1(postcss@8.5.6): dependencies: postcss: 8.5.6 - postcss-selector-parser: 7.1.0 + postcss-selector-parser: 7.1.1 postcss-discard-comments@7.0.5(postcss@8.5.6): dependencies: postcss: 8.5.6 - postcss-selector-parser: 7.1.0 + postcss-selector-parser: 7.1.1 postcss-discard-duplicates@7.0.2(postcss@8.5.6): dependencies: @@ -7278,12 +7289,12 @@ snapshots: postcss-focus-visible@10.0.1(postcss@8.5.6): dependencies: postcss: 8.5.6 - postcss-selector-parser: 7.1.0 + postcss-selector-parser: 7.1.1 postcss-focus-within@9.0.1(postcss@8.5.6): dependencies: postcss: 8.5.6 - postcss-selector-parser: 7.1.0 + postcss-selector-parser: 7.1.1 postcss-font-variant@5.0.0(postcss@8.5.6): dependencies: @@ -7311,7 +7322,7 @@ snapshots: postcss-load-config@5.1.0(postcss@8.5.6): dependencies: lilconfig: 3.1.3 - yaml: 2.8.1 + yaml: 2.8.2 optionalDependencies: postcss: 8.5.6 @@ -7330,11 +7341,11 @@ snapshots: postcss-merge-rules@7.0.7(postcss@8.5.6): dependencies: - browserslist: 4.27.0 + browserslist: 4.28.1 caniuse-api: 3.0.0 cssnano-utils: 5.0.1(postcss@8.5.6) postcss: 8.5.6 - postcss-selector-parser: 7.1.0 + postcss-selector-parser: 7.1.1 postcss-minify-font-values@7.0.1(postcss@8.5.6): dependencies: @@ -7350,7 +7361,7 @@ snapshots: postcss-minify-params@7.0.5(postcss@8.5.6): dependencies: - browserslist: 4.27.0 + browserslist: 4.28.1 cssnano-utils: 5.0.1(postcss@8.5.6) postcss: 8.5.6 postcss-value-parser: 4.2.0 @@ -7359,14 +7370,14 @@ snapshots: dependencies: cssesc: 3.0.0 postcss: 8.5.6 - postcss-selector-parser: 7.1.0 + postcss-selector-parser: 7.1.1 postcss-nesting@13.0.2(postcss@8.5.6): dependencies: - '@csstools/selector-resolve-nested': 3.1.0(postcss-selector-parser@7.1.0) - '@csstools/selector-specificity': 5.0.0(postcss-selector-parser@7.1.0) + '@csstools/selector-resolve-nested': 3.1.0(postcss-selector-parser@7.1.1) + '@csstools/selector-specificity': 5.0.0(postcss-selector-parser@7.1.1) postcss: 8.5.6 - postcss-selector-parser: 7.1.0 + postcss-selector-parser: 7.1.1 postcss-normalize-charset@7.0.1(postcss@8.5.6): dependencies: @@ -7399,7 +7410,7 @@ snapshots: postcss-normalize-unicode@7.0.5(postcss@8.5.6): dependencies: - browserslist: 4.27.0 + browserslist: 4.28.1 postcss: 8.5.6 postcss-value-parser: 4.2.0 @@ -7437,7 +7448,7 @@ snapshots: postcss: 8.5.6 postcss-value-parser: 4.2.0 - postcss-preset-env@10.4.0(postcss@8.5.6): + postcss-preset-env@10.5.0(postcss@8.5.6): dependencies: '@csstools/postcss-alpha-function': 1.0.1(postcss@8.5.6) '@csstools/postcss-cascade-layers': 5.0.2(postcss@8.5.6) @@ -7466,21 +7477,23 @@ snapshots: '@csstools/postcss-nested-calc': 4.0.0(postcss@8.5.6) '@csstools/postcss-normalize-display-values': 4.0.0(postcss@8.5.6) '@csstools/postcss-oklab-function': 4.0.12(postcss@8.5.6) + '@csstools/postcss-position-area-property': 1.0.0(postcss@8.5.6) '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.6) '@csstools/postcss-random-function': 2.0.1(postcss@8.5.6) '@csstools/postcss-relative-color-syntax': 3.0.12(postcss@8.5.6) '@csstools/postcss-scope-pseudo-class': 4.0.1(postcss@8.5.6) '@csstools/postcss-sign-functions': 1.1.4(postcss@8.5.6) '@csstools/postcss-stepped-value-functions': 4.0.9(postcss@8.5.6) + '@csstools/postcss-system-ui-font-family': 1.0.0(postcss@8.5.6) '@csstools/postcss-text-decoration-shorthand': 4.0.3(postcss@8.5.6) '@csstools/postcss-trigonometric-functions': 4.0.9(postcss@8.5.6) '@csstools/postcss-unset-value': 4.0.0(postcss@8.5.6) - autoprefixer: 10.4.21(postcss@8.5.6) - browserslist: 4.27.0 + autoprefixer: 10.4.23(postcss@8.5.6) + browserslist: 4.28.1 css-blank-pseudo: 7.0.1(postcss@8.5.6) css-has-pseudo: 7.0.3(postcss@8.5.6) css-prefers-color-scheme: 10.0.0(postcss@8.5.6) - cssdb: 8.4.2 + cssdb: 8.5.2 postcss: 8.5.6 postcss-attribute-case-insensitive: 7.0.1(postcss@8.5.6) postcss-clamp: 4.1.0(postcss@8.5.6) @@ -7511,11 +7524,11 @@ snapshots: postcss-pseudo-class-any-link@10.0.1(postcss@8.5.6): dependencies: postcss: 8.5.6 - postcss-selector-parser: 7.1.0 + postcss-selector-parser: 7.1.1 postcss-reduce-initial@7.0.5(postcss@8.5.6): dependencies: - browserslist: 4.27.0 + browserslist: 4.28.1 caniuse-api: 3.0.0 postcss: 8.5.6 @@ -7547,9 +7560,9 @@ snapshots: postcss-selector-not@8.0.1(postcss@8.5.6): dependencies: postcss: 8.5.6 - postcss-selector-parser: 7.1.0 + postcss-selector-parser: 7.1.1 - postcss-selector-parser@7.1.0: + postcss-selector-parser@7.1.1: dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 @@ -7567,7 +7580,7 @@ snapshots: postcss-unique-selectors@7.0.4(postcss@8.5.6): dependencies: postcss: 8.5.6 - postcss-selector-parser: 7.1.0 + postcss-selector-parser: 7.1.1 postcss-value-parser@4.2.0: {} @@ -7603,9 +7616,9 @@ snapshots: punycode@2.3.1: {} - qified@0.5.1: + qified@0.5.3: dependencies: - hookified: 1.12.2 + hookified: 1.14.0 qs@6.5.3: optional: true @@ -7657,7 +7670,7 @@ snapshots: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.24.0 + es-abstract: 1.24.1 es-errors: 1.3.0 es-object-atoms: 1.1.1 get-intrinsic: 1.3.0 @@ -7763,7 +7776,7 @@ snapshots: safer-buffer@2.1.2: optional: true - sass@1.93.3: + sass@1.96.0: dependencies: chokidar: 4.0.3 immutable: 5.1.4 @@ -7896,9 +7909,9 @@ snapshots: source-map@0.6.1: optional: true - spatial-controls@6.2.1(three@0.181.0): + spatial-controls@6.2.1(three@0.182.0): dependencies: - three: 0.181.0 + three: 0.182.0 spdx-correct@3.2.0: dependencies: @@ -7971,7 +7984,7 @@ snapshots: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.24.0 + es-abstract: 1.24.1 es-object-atoms: 1.1.1 string.prototype.trim@1.2.10: @@ -7980,7 +7993,7 @@ snapshots: call-bound: 1.0.4 define-data-property: 1.1.4 define-properties: 1.2.1 - es-abstract: 1.24.0 + es-abstract: 1.24.1 es-object-atoms: 1.1.1 has-property-descriptors: 1.0.2 @@ -8036,60 +8049,61 @@ snapshots: stylehacks@7.0.7(postcss@8.5.6): dependencies: - browserslist: 4.27.0 + browserslist: 4.28.1 postcss: 8.5.6 - postcss-selector-parser: 7.1.0 + postcss-selector-parser: 7.1.1 - stylelint-config-recommended-scss@16.0.2(postcss@8.5.6)(stylelint@16.25.0(typescript@5.9.3)): + stylelint-config-recommended-scss@16.0.2(postcss@8.5.6)(stylelint@16.26.1(typescript@5.9.3)): dependencies: postcss-scss: 4.0.9(postcss@8.5.6) - stylelint: 16.25.0(typescript@5.9.3) - stylelint-config-recommended: 17.0.0(stylelint@16.25.0(typescript@5.9.3)) - stylelint-scss: 6.12.1(stylelint@16.25.0(typescript@5.9.3)) + stylelint: 16.26.1(typescript@5.9.3) + stylelint-config-recommended: 17.0.0(stylelint@16.26.1(typescript@5.9.3)) + stylelint-scss: 6.13.0(stylelint@16.26.1(typescript@5.9.3)) optionalDependencies: postcss: 8.5.6 - stylelint-config-recommended@17.0.0(stylelint@16.25.0(typescript@5.9.3)): + stylelint-config-recommended@17.0.0(stylelint@16.26.1(typescript@5.9.3)): dependencies: - stylelint: 16.25.0(typescript@5.9.3) + stylelint: 16.26.1(typescript@5.9.3) - stylelint-config-standard-scss@16.0.0(postcss@8.5.6)(stylelint@16.25.0(typescript@5.9.3)): + stylelint-config-standard-scss@16.0.0(postcss@8.5.6)(stylelint@16.26.1(typescript@5.9.3)): dependencies: - stylelint: 16.25.0(typescript@5.9.3) - stylelint-config-recommended-scss: 16.0.2(postcss@8.5.6)(stylelint@16.25.0(typescript@5.9.3)) - stylelint-config-standard: 39.0.1(stylelint@16.25.0(typescript@5.9.3)) + stylelint: 16.26.1(typescript@5.9.3) + stylelint-config-recommended-scss: 16.0.2(postcss@8.5.6)(stylelint@16.26.1(typescript@5.9.3)) + stylelint-config-standard: 39.0.1(stylelint@16.26.1(typescript@5.9.3)) optionalDependencies: postcss: 8.5.6 - stylelint-config-standard@39.0.1(stylelint@16.25.0(typescript@5.9.3)): + stylelint-config-standard@39.0.1(stylelint@16.26.1(typescript@5.9.3)): dependencies: - stylelint: 16.25.0(typescript@5.9.3) - stylelint-config-recommended: 17.0.0(stylelint@16.25.0(typescript@5.9.3)) + stylelint: 16.26.1(typescript@5.9.3) + stylelint-config-recommended: 17.0.0(stylelint@16.26.1(typescript@5.9.3)) - stylelint-order@7.0.0(stylelint@16.25.0(typescript@5.9.3)): + stylelint-order@7.0.0(stylelint@16.26.1(typescript@5.9.3)): dependencies: postcss: 8.5.6 postcss-sorting: 9.1.0(postcss@8.5.6) - stylelint: 16.25.0(typescript@5.9.3) + stylelint: 16.26.1(typescript@5.9.3) - stylelint-scss@6.12.1(stylelint@16.25.0(typescript@5.9.3)): + stylelint-scss@6.13.0(stylelint@16.26.1(typescript@5.9.3)): dependencies: css-tree: 3.1.0 is-plain-object: 5.0.0 - known-css-properties: 0.36.0 + known-css-properties: 0.37.0 mdn-data: 2.25.0 postcss-media-query-parser: 0.2.3 postcss-resolve-nested-selector: 0.1.6 - postcss-selector-parser: 7.1.0 + postcss-selector-parser: 7.1.1 postcss-value-parser: 4.2.0 - stylelint: 16.25.0(typescript@5.9.3) + stylelint: 16.26.1(typescript@5.9.3) - stylelint@16.25.0(typescript@5.9.3): + stylelint@16.26.1(typescript@5.9.3): dependencies: '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@csstools/css-syntax-patches-for-csstree': 1.0.21 '@csstools/css-tokenizer': 3.0.4 '@csstools/media-query-list-parser': 4.0.3(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) - '@csstools/selector-specificity': 5.0.0(postcss-selector-parser@7.1.0) + '@csstools/selector-specificity': 5.0.0(postcss-selector-parser@7.1.1) '@dual-bundle/import-meta-resolve': 4.2.1 balanced-match: 2.0.0 colord: 2.9.3 @@ -8099,7 +8113,7 @@ snapshots: debug: 4.4.3 fast-glob: 3.3.3 fastest-levenshtein: 1.0.16 - file-entry-cache: 10.1.4 + file-entry-cache: 11.1.1 global-modules: 2.0.0 globby: 11.1.0 globjoin: 0.1.4 @@ -8116,7 +8130,7 @@ snapshots: postcss: 8.5.6 postcss-resolve-nested-selector: 0.1.6 postcss-safe-parser: 7.0.1(postcss@8.5.6) - postcss-selector-parser: 7.1.0 + postcss-selector-parser: 7.1.1 postcss-value-parser: 4.2.0 resolve-from: 5.0.0 string-width: 4.2.3 @@ -8131,7 +8145,7 @@ snapshots: 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.2 @@ -8206,12 +8220,12 @@ snapshots: thenby@1.3.4: {} - three-demo@5.1.3(dat.gui@0.7.9)(three@0.181.0): + three-demo@5.1.3(dat.gui@0.7.9)(three@0.182.0): dependencies: dat.gui: 0.7.9 - three: 0.181.0 + three: 0.182.0 - three@0.181.0: {} + three@0.182.0: {} through2@2.0.5: dependencies: @@ -8342,9 +8356,9 @@ snapshots: universalify@2.0.1: {} - update-browserslist-db@1.1.4(browserslist@4.27.0): + update-browserslist-db@1.2.2(browserslist@4.28.1): dependencies: - browserslist: 4.27.0 + browserslist: 4.28.1 escalade: 3.2.0 picocolors: 1.1.1 @@ -8470,7 +8484,7 @@ snapshots: yallist@5.0.0: {} - yaml@2.8.1: {} + yaml@2.8.2: {} yargs-parser@21.1.1: {} diff --git a/src/effects/blending/BlendMode.js b/src/effects/blending/BlendMode.js index 949bae8c5..f132f04d5 100644 --- a/src/effects/blending/BlendMode.js +++ b/src/effects/blending/BlendMode.js @@ -2,6 +2,7 @@ import { EventDispatcher, Uniform } from "three"; import { BlendFunction } from "../../enums/BlendFunction.js"; import add from "./glsl/add.frag"; +import alpha from "./glsl/alpha.frag"; import average from "./glsl/average.frag"; import color from "./glsl/color.frag"; import colorBurn from "./glsl/color-burn.frag"; @@ -42,6 +43,7 @@ import vividLight from "./glsl/vivid-light.frag"; const blendFunctions = new Map([ [BlendFunction.ADD, add], + [BlendFunction.ALPHA, alpha], [BlendFunction.AVERAGE, average], [BlendFunction.COLOR, color], [BlendFunction.COLOR_BURN, colorBurn], diff --git a/src/effects/blending/glsl/add.frag b/src/effects/blending/glsl/add.frag index a236ddf47..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, vec4(x.rgb + y.rgb, y.a), y.a * 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 new file mode 100644 index 000000000..b9e1572f1 --- /dev/null +++ b/src/effects/blending/glsl/alpha.frag @@ -0,0 +1,5 @@ +vec4 blend(const in vec4 dst, const in vec4 src, const in float 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 765fa8896..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, vec4((x.rgb + y.rgb) * 0.5, y.a), y.a * 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 f46cd3d9e..280998b9c 100644 --- a/src/effects/blending/glsl/color-burn.frag +++ b/src/effects/blending/glsl/color-burn.frag @@ -1,7 +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) { - vec3 a = x.rgb, b = y.rgb; - vec3 z = mix(step(0.0, b) * (1.0 - min(vec3(1.0), (1.0 - a) / b)), vec3(1.0), step(1.0, a)); - return mix(x, vec4(z, y.a), y.a * 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 47d52e46f..c118f9ffe 100644 --- a/src/effects/blending/glsl/color-dodge.frag +++ b/src/effects/blending/glsl/color-dodge.frag @@ -1,7 +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) { - vec3 a = x.rgb, b = y.rgb; - vec3 z = 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(x, vec4(z, y.a), y.a * 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 0c5889d72..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.xy, xHSL.z)); - return mix(x, vec4(z, y.a), y.a * opacity); + 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 f34756eb8..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, vec4(min(x.rgb, y.rgb), y.a), y.a * 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 3cdb42de5..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, vec4(abs(x.rgb - y.rgb), y.a), y.a * 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 a985c0dc2..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, vec4(x.rgb / max(y.rgb, 1e-12), y.a), y.a * 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 9e44b3995..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, vec4((x.rgb + y.rgb - 2.0 * x.rgb * y.rgb), y.a), y.a * 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 96eb208c9..a6fed58c8 100644 --- a/src/effects/blending/glsl/hard-light.frag +++ b/src/effects/blending/glsl/hard-light.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 a = min(x.rgb, 1.0); - vec3 b = min(y.rgb, 1.0); - vec3 z = mix(2.0 * a * b, 1.0 - 2.0 * (1.0 - a) * (1.0 - b), step(0.5, b)); - return mix(x, vec4(z, y.a), y.a * 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 7f7fb979e..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, vec4(step(1.0, x.rgb + y.rgb), y.a), y.a * 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 556c72bf7..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.x, xHSL.yz)); - return mix(x, vec4(z, y.a), y.a * opacity); + 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 d275539ce..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, vec4(y.rgb * (1.0 - x.rgb), y.a), y.a * 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 89512bc00..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, vec4(1.0 - y.rgb, y.a), y.a * 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 e0b9d1a5e..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, vec4(max(x.rgb, y.rgb), y.a), y.a * 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 2590b14c0..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, vec4(clamp(y.rgb + x.rgb - 1.0, 0.0, 1.0), y.a), y.a * 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 fe52978e2..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, vec4(min(x.rgb + y.rgb, 1.0), y.a), y.a * 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 12d99ec60..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, vec4(clamp(2.0 * y.rgb + x.rgb - 1.0, 0.0, 1.0), y.a), y.a * 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 1cb879649..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.xy, yHSL.z)); - return mix(x, vec4(z, y.a), y.a * opacity); + 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 4fdfd6be8..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, vec4(x.rgb * y.rgb, y.a), y.a * 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 d16be670c..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, vec4(1.0 - abs(1.0 - x.rgb - y.rgb), y.a), y.a * 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 7e1d1d5d8..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, y.a * opacity); + return mix(dst, src, opacity); } diff --git a/src/effects/blending/glsl/overlay.frag b/src/effects/blending/glsl/overlay.frag index b73c7737c..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) { - vec3 z = mix(2.0 * y.rgb * x.rgb, 1.0 - 2.0 * (1.0 - y.rgb) * (1.0 - x.rgb), step(0.5, x.rgb)); - return mix(x, vec4(z, y.a), y.a * 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 4a3b7dd72..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) { - vec3 y2 = 2.0 * y.rgb; + vec3 src2 = 2.0 * src.rgb; - vec3 z = mix( - mix(y2, x.rgb, step(0.5 * x.rgb, y.rgb)), - max(y2 - 1.0, vec3(0.0)), - step(x.rgb, 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, vec4(z, y.a), y.a * 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 54093fab2..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) { - vec3 z = mix(min(x.rgb * x.rgb / max(1.0 - y.rgb, 1e-12), 1.0), y.rgb, step(1.0, y.rgb)); - return mix(x, vec4(z, y.a), y.a * 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 3401c74c1..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.x, yHSL.y, xHSL.z)); - return mix(x, vec4(z, y.a), y.a * opacity); + 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 00f61236e..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, vec4(x.rgb + y.rgb - min(x.rgb * y.rgb, 1.0), y.a), y.a * 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 ba06336ea..b0ce2d84c 100644 --- a/src/effects/blending/glsl/soft-light.frag +++ b/src/effects/blending/glsl/soft-light.frag @@ -1,20 +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) { - vec3 a = x.rgb; - vec3 b = y.rgb; + 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); - vec3 y2 = 2.0 * b; - vec3 w = step(0.5, b); - - vec3 c = a - (1.0 - y2) * a * (1.0 - a); - vec3 d = mix( - a + (y2 - 1.0) * (sqrt(a) - a), - a + (y2 - 1.0) * a * ((16.0 * a - 12.0) * a + 3.0), - w * (1.0 - step(0.25, a)) + 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)) ); - vec3 z = mix(c, d, w); - - return mix(x, vec4(z, y.a), y.a * 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 cb369fd95..91bd4c316 100644 --- a/src/effects/blending/glsl/src.frag +++ b/src/effects/blending/glsl/src.frag @@ -1,6 +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) { - // x is the color that is already there (DST), y is the new color (SRC) - return y; + return src; } diff --git a/src/effects/blending/glsl/subtract.frag b/src/effects/blending/glsl/subtract.frag index d6bea65e1..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, vec4(max(x.rgb + y.rgb - 1.0, 0.0), y.a), y.a * 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 535db926c..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) { - vec3 z = mix( - max(1.0 - min((1.0 - x.rgb) / (2.0 * y.rgb), 1.0), 0.0), - min(x.rgb / (2.0 * (1.0 - y.rgb)), 1.0), - step(0.5, y.rgb) + 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, vec4(z, y.a), y.a * opacity); + return mix(dst, vec4(c, max(dst.a, src.a)), opacity); } diff --git a/src/effects/glsl/bloom.frag b/src/effects/glsl/bloom.frag index 5a3aeaa70..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, max(inputColor.a, texel.a)); + outputColor = texture2D(map, uv) * intensity; } diff --git a/src/enums/BlendFunction.js b/src/enums/BlendFunction.js index 47527b531..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 - Deprecated. Use NORMAL instead. + * @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. @@ -49,7 +49,7 @@ export const BlendFunction = { SKIP: 9, SET: 30, ADD: 0, - ALPHA: 23, + ALPHA: 1, AVERAGE: 2, COLOR: 3, COLOR_BURN: 4, diff --git a/src/materials/CopyMaterial.js b/src/materials/CopyMaterial.js index 648e0ba6f..979ed0ba4 100644 --- a/src/materials/CopyMaterial.js +++ b/src/materials/CopyMaterial.js @@ -18,6 +18,7 @@ export class CopyMaterial extends ShaderMaterial { super({ name: "CopyMaterial", defines: { + COLOR_SPACE_CONVERSION: "1", DEPTH_PACKING: "0", COLOR_WRITE: "1" }, @@ -127,6 +128,38 @@ export class CopyMaterial extends ShaderMaterial { } + /** + * 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. * diff --git a/src/materials/EffectMaterial.js b/src/materials/EffectMaterial.js index 1c7817730..058172b9b 100644 --- a/src/materials/EffectMaterial.js +++ b/src/materials/EffectMaterial.js @@ -1,4 +1,13 @@ -import { BasicDepthPacking, NoBlending, PerspectiveCamera, REVISION, ShaderMaterial, Uniform, Vector2 } from "three"; +import { + BasicDepthPacking, + NormalBlending, + PerspectiveCamera, + REVISION, + ShaderMaterial, + Uniform, + Vector2 +} from "three"; + import { EffectShaderSection as Section } from "../enums/EffectShaderSection.js"; import fragmentTemplate from "./glsl/effect.frag"; @@ -41,7 +50,7 @@ export class EffectMaterial extends ShaderMaterial { aspect: new Uniform(1.0), time: new Uniform(0.0) }, - blending: NoBlending, + blending: NormalBlending, toneMapped: false, depthWrite: false, depthTest: false, diff --git a/src/passes/EffectPass.js b/src/passes/EffectPass.js index e538f4b98..fda8af6d7 100644 --- a/src/passes/EffectPass.js +++ b/src/passes/EffectPass.js @@ -381,6 +381,19 @@ export class EffectPass extends Pass { } + /** + * Indicates whether the renderer uses alpha. + * + * @private + * @type {Boolean} + */ + + get alpha() { + + return this.renderer !== null && this.renderer.getContext().getContextAttributes().alpha; + + } + /** * Sets the effects. * @@ -571,6 +584,7 @@ export class EffectPass extends Pass { if(!this.skipRendering || this.renderToScreen) { const material = this.fullscreenMaterial; + material.transparent = this.renderToScreen && this.alpha; material.inputBuffer = inputBuffer.texture; material.time += deltaTime * this.timeScale; diff --git a/types/index.d.ts b/types/index.d.ts index 04a82096d..f37c063f0 100644 --- a/types/index.d.ts +++ b/types/index.d.ts @@ -455,6 +455,13 @@ export class CopyMaterial extends ShaderMaterial { * @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. *