diff --git a/apps/website/package.json b/apps/website/package.json index 06230d50..b9e69095 100644 --- a/apps/website/package.json +++ b/apps/website/package.json @@ -153,6 +153,7 @@ "@demo/threejs-journey-portal": "workspace:*", "@demo/thunder-clouds": "workspace:*", "@demo/trails": "workspace:*", + "@demo/trails-r3f-9.7.0": "workspace:*", "@demo/transformcontrols-and-makedefault": "workspace:*", "@demo/transparent-aesop-bottles": "workspace:*", "@demo/trigger-meshes": "workspace:*", diff --git a/demos/trails-r3f-9.7.0/.prettierrc b/demos/trails-r3f-9.7.0/.prettierrc new file mode 100755 index 00000000..6043ce2c --- /dev/null +++ b/demos/trails-r3f-9.7.0/.prettierrc @@ -0,0 +1,10 @@ +{ + "printWidth": 160, + "tabWidth": 2, + "useTabs": false, + "semi": false, + "singleQuote": true, + "trailingComma": "none", + "bracketSpacing": true, + "jsxBracketSameLine": true +} \ No newline at end of file diff --git a/demos/trails-r3f-9.7.0/README.md b/demos/trails-r3f-9.7.0/README.md new file mode 100644 index 00000000..704030e0 --- /dev/null +++ b/demos/trails-r3f-9.7.0/README.md @@ -0,0 +1,9 @@ +[![Static](https://img.shields.io/badge/demo-%23646CFF.svg?logo=html5&logoColor=white)](https://pmndrs.github.io/examples/trails-r3f-9.7.0) +[![CodeSandbox](https://img.shields.io/badge/codesandbox-040404?logo=codesandbox&logoColor=DBDBDB)](https://codesandbox.io/s/github/pmndrs/examples/tree/main/demos/trails-r3f-9.7.0) +[![Stackblitz](https://img.shields.io/badge/stackblitz-fff?logo=Stackblitz&logoColor=1389FD)](https://stackblitz.com/github/pmndrs/examples/tree/main/demos/trails-r3f-9.7.0) + +```sh +$ npx degit pmndrs/examples/demos/trails-r3f-9.7.0 +``` + +![](thumbnail.webp) diff --git a/demos/trails-r3f-9.7.0/index.html b/demos/trails-r3f-9.7.0/index.html new file mode 100644 index 00000000..31ae1683 --- /dev/null +++ b/demos/trails-r3f-9.7.0/index.html @@ -0,0 +1,13 @@ + + + + + + + React Three Fiber v9.7.0 + + +
+ + + diff --git a/demos/trails-r3f-9.7.0/package.json b/demos/trails-r3f-9.7.0/package.json new file mode 100644 index 00000000..77c5e545 --- /dev/null +++ b/demos/trails-r3f-9.7.0/package.json @@ -0,0 +1,40 @@ +{ + "name": "@demo/trails-r3f-9.7.0", + "version": "1.0.0", + "dependencies": { + "@pmndrs/branding": "^0.0.8", + "@react-three/cannon": "^6.6.0", + "@react-three/drei": "10.7.7", + "@react-three/fiber": "9.7.0", + "lamina": "1.2.2", + "react": "19.2.8", + "react-dom": "19.2.8", + "three": "0.165.0" + }, + "devDependencies": { + "@types/react": "19.2.17", + "@types/react-dom": "19.2.3", + "@types/three": "^0.165.0", + "@vitejs/plugin-react": "^6.0.4", + "typescript": "^7.0.2", + "vite": "^8.1.5" + }, + "scripts": { + "dev": "vite --host", + "dev3": "e2e-dev $npm_package_name", + "build": "tsc && vite build", + "build2": "tsc && e2e-build $npm_package_name", + "preview": "vite preview" + }, + "browserslist": [ + "> 1%", + "not dead", + "not ie 11", + "not op_mini all" + ], + "type": "module", + "repository": { + "type": "git", + "url": "https://github.com/pmndrs/examples/tree/main/demos/trails-r3f-9.7.0" + } +} diff --git a/demos/trails-r3f-9.7.0/pmndrs.json b/demos/trails-r3f-9.7.0/pmndrs.json new file mode 100644 index 00000000..c874fe02 --- /dev/null +++ b/demos/trails-r3f-9.7.0/pmndrs.json @@ -0,0 +1,11 @@ +{ + "$schema": "../../schemas/pmndrs.schema.json", + "title": "Trails with React Three Fiber 9.7.0", + "description": "A v9.7.0 release riff on the trails demo: a swarm of physics-driven extruded version numbers orbits an immovable 9.7.0, and clicking detonates them in a burst of pmndrs logos.", + "tags": ["trail", "meshline", "physics", "gradient", "text3d", "release"], + "authors": ["Faraz Shaikh", "Kris Baumgartner"], + "publishedAt": "2026-07-31", + "source": "https://github.com/pmndrs/examples/tree/main/demos/trails", + "libraries": ["@react-three/cannon", "@react-three/drei", "@react-three/fiber", "lamina"], + "assets": [] +} diff --git a/demos/trails-r3f-9.7.0/public/vite.svg b/demos/trails-r3f-9.7.0/public/vite.svg new file mode 100644 index 00000000..ee9fadaf --- /dev/null +++ b/demos/trails-r3f-9.7.0/public/vite.svg @@ -0,0 +1 @@ + diff --git a/demos/trails-r3f-9.7.0/src/App.jsx b/demos/trails-r3f-9.7.0/src/App.jsx new file mode 100644 index 00000000..c3b19851 --- /dev/null +++ b/demos/trails-r3f-9.7.0/src/App.jsx @@ -0,0 +1,196 @@ +import { useEffect, useMemo, useRef, useState } from 'react' +import * as THREE from 'three' +import { Canvas, useThree, useFrame } from '@react-three/fiber' +import { useGLTF, Edges, Trail } from '@react-three/drei' +import { Physics, useCompoundBody } from '@react-three/cannon' +import { LayerMaterial, Depth, Fresnel } from 'lamina' +import { FontLoader, TextGeometry } from 'three-stdlib' + +import boldFont from 'three/examples/fonts/helvetiker_bold.typeface.json' +import pmndrsModel from './pmndrs.glb?url' +import cursorModel from './cursor.glb?url' + +// One centered, extruded "9.7.0" shared by every block in the scene +const font = new FontLoader().parse(boldFont) +const text = new TextGeometry('9.7.0', { font, size: 0.7, height: 0.35, curveSegments: 16, letterSpacing: 0.02 }) +text.center() + +const vec = new THREE.Vector3() +const dir = new THREE.Vector3() +// The swarm gathers slightly behind the hero so it frames it instead of covering it +const attractor = new THREE.Vector3(0, 0, -1) +// Live registry of swarm bodies so the cursor can blast them apart on click +const blocks = new Set() +// Set by ; the cursor calls it on click to spawn logo shrapnel at its position +let burst = () => {} +const white = new THREE.MeshBasicMaterial({ color: '#fefefe', toneMapped: false }) +const pink = new THREE.MeshBasicMaterial({ color: '#ff0080', toneMapped: false }) +// Accent blocks cycle through the cursor-gradient palette +const accents = ['#ff0080', '#f7b955', '#5786f5'].map((color) => new THREE.MeshBasicMaterial({ color, toneMapped: false })) + +export const App = ({ amount = 11 }) => ( + + + + {Array.from({ length: amount }, (_, i) => ( + + ))} + + + + +) + +function Bursts() { + const { nodes } = useGLTF(pmndrsModel) + // The glb logo pivot is off-center; recenter a clone so shrapnel spins around itself + const logo = useMemo(() => { + const geometry = nodes.logo.geometry.clone() + geometry.center() + return geometry + }, [nodes]) + const [bursts, setBursts] = useState([]) + const id = useRef(0) + useEffect(() => { + burst = (origin) => setBursts((all) => [...all, { id: ++id.current, origin }]) + return () => (burst = () => {}) + }, []) + return bursts.map(({ id, origin }) => ( + setBursts((all) => all.filter((b) => b.id !== id))} /> + )) +} + +// Purely visual logo shrapnel: flies outward, tumbles, shrinks away — no physics cost +function Burst({ geometry, origin, onDone, count = 16, life = 1.5 }) { + const group = useRef() + const age = useRef(0) + const particles = useMemo( + () => + Array.from({ length: count }, (_, i) => ({ + // random sphere, biased towards the camera so debris whooshes past the viewer + dir: new THREE.Vector3().randomDirection().add(vec.set(0, 0, 0.5)).normalize(), + speed: 5 + Math.random() * 7, + rotation: [Math.random() * Math.PI * 2, Math.random() * Math.PI * 2, Math.random() * Math.PI * 2], + spin: [(Math.random() - 0.5) * 12, (Math.random() - 0.5) * 12, (Math.random() - 0.5) * 12], + size: 0.4 + Math.random() * 0.8, + material: Math.random() < 0.45 ? accents[i % accents.length] : white + })), + [count] + ) + useFrame((_, delta) => { + age.current += delta + const k = age.current / life + if (k >= 1) return onDone() + // pop in fast, decelerate, shrink to nothing + const envelope = Math.min(k * 10, 1) * (1 - k) + group.current.children.forEach((child, i) => { + const p = particles[i] + child.position.addScaledVector(p.dir, p.speed * (1 - 0.7 * k) * delta) + child.rotation.x += p.spin[0] * delta + child.rotation.y += p.spin[1] * delta + child.rotation.z += p.spin[2] * delta + child.scale.set(0.188, 0.188, 0.97).multiplyScalar(p.size * envelope) + }) + }) + return ( + + {particles.map((p, i) => ( + + + + ))} + + ) +} + +function Block({ scale = 1, material = white, edge = 'black', ...props }) { + return ( + + + + + + ) +} + +// One box approximating the extruded "9.7.0" word, baked to the visual scale +const wordBox = (scale) => [{ type: 'Box', args: [2.2 * scale, 0.55 * scale, 0.35 * scale], position: [0, 0, 0] }] + +// Immovable billboard version number the swarm and cursor bounce off +function Hero({ scale = 1.2 }) { + const [ref] = useCompoundBody(() => ({ mass: 0, position: [0, 0, 1.5], shapes: wordBox(scale) })) + return +} + +function Version({ scale = 1, material = white, ...props }) { + const [ref, api] = useCompoundBody(() => ({ mass: 4 * scale, ...props, shapes: wordBox(scale) })) + useEffect(() => { + const entry = { ref, api, scale } + blocks.add(entry) + return () => blocks.delete(entry) + }, [ref, api, scale]) + // Pull every block back towards the gather point behind the hero + useFrame(() => api.applyForce(vec.setFromMatrixPosition(ref.current.matrix).sub(attractor).normalize().multiplyScalar(-40 * scale).toArray(), [0, 0, 0])) + return +} + +function Cursor({ speed = 10, gradient = 0.7, ...props }) { + const { nodes } = useGLTF(cursorModel) + const viewport = useThree((state) => state.viewport) + // follows this object3d, parented to the cursor body so the ribbon trails its tip + const trail = useRef() + const [ref, api] = useCompoundBody(() => ({ + ...props, + shapes: [ + { type: 'Cylinder', args: [0.6, 0.6, 0.5, 3], position: [0, 0.2, 0], rotation: [Math.PI / 2, Math.PI, 0] }, + { type: 'Box', args: [0.25, 1, 0.3], position: [0, -0.45, 0] } + ] + })) + useFrame((state) => { + vec.setFromMatrixPosition(ref.current.matrix) + // Chase the pointer, diving to the swarm's gather depth so it plows through the clump + api.velocity.set(((state.mouse.x * viewport.width) / 2 - vec.x) * speed, ((state.mouse.y * viewport.height) / 2 - vec.y) * speed, (attractor.z - vec.z) * 2) + }) + useEffect(() => { + // Click detonates: every block gets a distance-falloff impulse away from the cursor, + // applied slightly off-center so they tumble. The attractor then reels them back in. + const explode = () => { + vec.setFromMatrixPosition(ref.current.matrix) + burst(vec.toArray()) + for (const block of blocks) { + dir.setFromMatrixPosition(block.ref.current.matrix).sub(vec) + const falloff = Math.max(dir.length(), 1) + dir.normalize().multiplyScalar((42 * block.scale) / falloff) + block.api.applyImpulse(dir.toArray(), [(Math.random() - 0.5) * 0.4, (Math.random() - 0.5) * 0.4, (Math.random() - 0.5) * 0.4]) + } + } + window.addEventListener('pointerdown', explode) + return () => window.removeEventListener('pointerdown', explode) + }, []) + return ( + <> + w * 2} /> + + + + + + + + + + + + + + + ) +} diff --git a/demos/trails-r3f-9.7.0/src/cursor.glb b/demos/trails-r3f-9.7.0/src/cursor.glb new file mode 100755 index 00000000..c87ded4b Binary files /dev/null and b/demos/trails-r3f-9.7.0/src/cursor.glb differ diff --git a/demos/trails-r3f-9.7.0/src/index.jsx b/demos/trails-r3f-9.7.0/src/index.jsx new file mode 100644 index 00000000..e3121f25 --- /dev/null +++ b/demos/trails-r3f-9.7.0/src/index.jsx @@ -0,0 +1,45 @@ +import { createRoot } from 'react-dom/client' +import { Suspense } from 'react' +import { Logo } from '@pmndrs/branding' +import './styles.css' +import { App } from './App' + +createRoot(document.getElementById('root')).render( + <> +
@react-three/fiber v9.7.0 —
+
+ +
+ pmnd.rs +
+ dev collective +
31/07/2026
+
+
+ + + + +) diff --git a/demos/trails-r3f-9.7.0/src/pmndrs.glb b/demos/trails-r3f-9.7.0/src/pmndrs.glb new file mode 100755 index 00000000..ce5c278d Binary files /dev/null and b/demos/trails-r3f-9.7.0/src/pmndrs.glb differ diff --git a/demos/trails-r3f-9.7.0/src/styles.css b/demos/trails-r3f-9.7.0/src/styles.css new file mode 100644 index 00000000..274411a7 --- /dev/null +++ b/demos/trails-r3f-9.7.0/src/styles.css @@ -0,0 +1,48 @@ +@import url('https://rsms.me/inter/inter.css'); + +* { + box-sizing: border-box; +} + +html, +body, +#root { + width: 100%; + height: 100%; + margin: 0; + padding: 0; +} + +body { + font-family: inter; + font-size: 13px; + color: #fefefe; + background: black; + cursor: none; +} + +@keyframes fade-in { + from { + opacity: 0; + } + to { + opacity: 1; + } +} + +canvas { + opacity: 0; + touch-action: none; + animation: fade-in 2s ease 0.3s forwards; + animation-delay: 0s; +} + +svg { + fill: #fefefe; +} + +a { + pointer-events: all; + color: white; + text-decoration: none; +} diff --git a/demos/trails-r3f-9.7.0/src/vite-env.d.ts b/demos/trails-r3f-9.7.0/src/vite-env.d.ts new file mode 100644 index 00000000..11f02fe2 --- /dev/null +++ b/demos/trails-r3f-9.7.0/src/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/demos/trails-r3f-9.7.0/thumbnail.webp b/demos/trails-r3f-9.7.0/thumbnail.webp new file mode 100644 index 00000000..09bf1e69 Binary files /dev/null and b/demos/trails-r3f-9.7.0/thumbnail.webp differ diff --git a/demos/trails-r3f-9.7.0/tsconfig.json b/demos/trails-r3f-9.7.0/tsconfig.json new file mode 100644 index 00000000..2bb228a4 --- /dev/null +++ b/demos/trails-r3f-9.7.0/tsconfig.json @@ -0,0 +1,20 @@ +{ + "compilerOptions": { + "target": "ESNext", + "useDefineForClassFields": true, + "lib": ["DOM", "DOM.Iterable", "ESNext"], + "allowJs": false, + "skipLibCheck": true, + "allowSyntheticDefaultImports": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "module": "ESNext", + "moduleResolution": "Bundler", + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react-jsx" + }, + "include": ["src"], + "references": [{ "path": "./tsconfig.node.json" }] +} diff --git a/demos/trails-r3f-9.7.0/tsconfig.node.json b/demos/trails-r3f-9.7.0/tsconfig.node.json new file mode 100644 index 00000000..16dfedc6 --- /dev/null +++ b/demos/trails-r3f-9.7.0/tsconfig.node.json @@ -0,0 +1,9 @@ +{ + "compilerOptions": { + "composite": true, + "module": "ESNext", + "moduleResolution": "Bundler", + "allowSyntheticDefaultImports": true + }, + "include": ["vite.config.ts"] +} diff --git a/demos/trails-r3f-9.7.0/vite.config.ts b/demos/trails-r3f-9.7.0/vite.config.ts new file mode 100644 index 00000000..eca6e2f3 --- /dev/null +++ b/demos/trails-r3f-9.7.0/vite.config.ts @@ -0,0 +1,6 @@ +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' + +export default defineConfig({ + plugins: [react()] +}) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0ff3af0d..f95eb194 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -467,6 +467,9 @@ importers: '@demo/trails': specifier: workspace:* version: link:../../demos/trails + '@demo/trails-r3f-9.7.0': + specifier: workspace:* + version: link:../../demos/trails-r3f-9.7.0 '@demo/transformcontrols-and-makedefault': specifier: workspace:* version: link:../../demos/transformcontrols-and-makedefault @@ -6617,6 +6620,52 @@ importers: specifier: ^8.1.5 version: 8.1.5(@types/node@20.19.39)(jiti@2.7.0)(yaml@2.9.0) + demos/trails-r3f-9.7.0: + dependencies: + '@pmndrs/branding': + specifier: ^0.0.8 + version: 0.0.8(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + '@react-three/cannon': + specifier: ^6.6.0 + version: 6.6.0(@react-three/fiber@9.7.0(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(three@0.165.0))(react@19.2.8)(three@0.165.0)(typescript@7.0.2) + '@react-three/drei': + specifier: 10.7.7 + version: 10.7.7(@react-three/fiber@9.7.0(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(three@0.165.0))(@types/react@19.2.17)(@types/three@0.165.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(three@0.165.0) + '@react-three/fiber': + specifier: 9.7.0 + version: 9.7.0(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(three@0.165.0) + lamina: + specifier: 1.2.2 + version: 1.2.2(@react-three/fiber@9.7.0(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(three@0.165.0))(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(three@0.165.0) + react: + specifier: 19.2.8 + version: 19.2.8 + react-dom: + specifier: 19.2.8 + version: 19.2.8(react@19.2.8) + three: + specifier: 0.165.0 + version: 0.165.0 + devDependencies: + '@types/react': + specifier: 19.2.17 + version: 19.2.17 + '@types/react-dom': + specifier: 19.2.3 + version: 19.2.3(@types/react@19.2.17) + '@types/three': + specifier: ^0.165.0 + version: 0.165.0 + '@vitejs/plugin-react': + specifier: ^6.0.4 + version: 6.0.4(vite@8.1.5(@types/node@20.19.39)(jiti@2.7.0)(yaml@2.9.0)) + typescript: + specifier: ^7.0.2 + version: 7.0.2 + vite: + specifier: ^8.1.5 + version: 8.1.5(@types/node@20.19.39)(jiti@2.7.0)(yaml@2.9.0) + demos/transformcontrols-and-makedefault: dependencies: '@react-three/drei': @@ -7505,18 +7554,12 @@ packages: '@emnapi/core@1.11.1': resolution: {integrity: sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==} - '@emnapi/core@1.9.2': - resolution: {integrity: sha512-UC+ZhH3XtczQYfOlu3lNEkdW/p4dsJ1r/bP7H8+rhao3TTTMO1ATq/4DdIi23XuGoFY+Cz0JmCbdVl0hz9jZcA==} - '@emnapi/runtime@1.11.1': resolution: {integrity: sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==} '@emnapi/runtime@1.9.2': resolution: {integrity: sha512-3U4+MIWHImeyu1wnmVygh5WlgfYDtyf0k8AbLhMFxOipihf6nrWC4syIm/SwEeec0mNSafiiNnMJwbza/Is6Lw==} - '@emnapi/wasi-threads@1.2.1': - resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==} - '@emnapi/wasi-threads@1.2.2': resolution: {integrity: sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==} @@ -9224,6 +9267,31 @@ packages: react-native: optional: true + '@react-three/fiber@9.7.0': + resolution: {integrity: sha512-EWm9FwcaOZQu/ExFW5rggoCMM1NJet5YbxVxKaOE+KSncrjU0Wx7017qSyGFvupviK89nMYGCWU3BIK4dI1clw==} + peerDependencies: + expo: '>=43.0' + expo-asset: '>=8.4' + expo-file-system: '>=11.0' + expo-gl: '>=11.0' + react: '>=19 <19.3' + react-dom: '>=19 <19.3' + react-native: '>=0.78' + three: '>=0.156' + peerDependenciesMeta: + expo: + optional: true + expo-asset: + optional: true + expo-file-system: + optional: true + expo-gl: + optional: true + react-dom: + optional: true + react-native: + optional: true + '@react-three/flex@1.0.1': resolution: {integrity: sha512-m1zcuE0BWyUP6ASX09SGYZWHkyMS9GVcP4WGXjdSdxWi228D0p8hti9nHlnv+fpZvQO8v+Qz4EXmrf302mEzXQ==} peerDependencies: @@ -13231,10 +13299,6 @@ packages: resolution: {integrity: sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg==} engines: {node: '>=18'} - tinyglobby@0.2.15: - resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} - engines: {node: '>=12.0.0'} - tinyglobby@0.2.17: resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} engines: {node: '>=12.0.0'} @@ -14010,12 +14074,6 @@ snapshots: tslib: 2.8.1 optional: true - '@emnapi/core@1.9.2': - dependencies: - '@emnapi/wasi-threads': 1.2.1 - tslib: 2.8.1 - optional: true - '@emnapi/runtime@1.11.1': dependencies: tslib: 2.8.1 @@ -14026,11 +14084,6 @@ snapshots: tslib: 2.8.1 optional: true - '@emnapi/wasi-threads@1.2.1': - dependencies: - tslib: 2.8.1 - optional: true - '@emnapi/wasi-threads@1.2.2': dependencies: tslib: 2.8.1 @@ -14391,8 +14444,8 @@ snapshots: '@napi-rs/wasm-runtime@0.2.12': dependencies: - '@emnapi/core': 1.9.2 - '@emnapi/runtime': 1.9.2 + '@emnapi/core': 1.11.1 + '@emnapi/runtime': 1.11.1 '@tybys/wasm-util': 0.10.1 optional: true @@ -14466,13 +14519,13 @@ snapshots: '@radix-ui/number@1.0.0': dependencies: - '@babel/runtime': 7.29.2 + '@babel/runtime': 7.29.7 '@radix-ui/number@1.1.3': {} '@radix-ui/primitive@1.0.0': dependencies: - '@babel/runtime': 7.29.2 + '@babel/runtime': 7.29.7 '@radix-ui/primitive@1.1.3': {} @@ -14610,7 +14663,7 @@ snapshots: '@radix-ui/react-compose-refs@1.0.0(react@19.2.8)': dependencies: - '@babel/runtime': 7.29.2 + '@babel/runtime': 7.29.7 react: 19.2.8 '@radix-ui/react-compose-refs@1.1.2(@types/react@19.2.17)(react@19.2.8)': @@ -14640,7 +14693,7 @@ snapshots: '@radix-ui/react-context@1.0.0(react@19.2.8)': dependencies: - '@babel/runtime': 7.29.2 + '@babel/runtime': 7.29.7 react: 19.2.8 '@radix-ui/react-context@1.1.2(@types/react@19.2.17)(react@19.2.8)': @@ -14680,7 +14733,7 @@ snapshots: '@radix-ui/react-direction@1.0.0(react@19.2.8)': dependencies: - '@babel/runtime': 7.29.2 + '@babel/runtime': 7.29.7 react: 19.2.8 '@radix-ui/react-direction@1.1.4(@types/react@19.2.17)(react@19.2.8)': @@ -15003,7 +15056,7 @@ snapshots: '@radix-ui/react-portal@1.0.2(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': dependencies: - '@babel/runtime': 7.29.2 + '@babel/runtime': 7.29.7 '@radix-ui/react-primitive': 1.0.2(react-dom@19.2.8(react@19.2.8))(react@19.2.8) react: 19.2.8 react-dom: 19.2.8(react@19.2.8) @@ -15040,7 +15093,7 @@ snapshots: '@radix-ui/react-presence@1.0.0(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': dependencies: - '@babel/runtime': 7.29.2 + '@babel/runtime': 7.29.7 '@radix-ui/react-compose-refs': 1.0.0(react@19.2.8) '@radix-ui/react-use-layout-effect': 1.0.0(react@19.2.8) react: 19.2.8 @@ -15067,7 +15120,7 @@ snapshots: '@radix-ui/react-primitive@1.0.1(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': dependencies: - '@babel/runtime': 7.29.2 + '@babel/runtime': 7.29.7 '@radix-ui/react-slot': 1.0.1(react@19.2.8) react: 19.2.8 react-dom: 19.2.8(react@19.2.8) @@ -15362,7 +15415,7 @@ snapshots: '@radix-ui/react-tooltip@1.0.5(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': dependencies: - '@babel/runtime': 7.29.2 + '@babel/runtime': 7.29.7 '@radix-ui/primitive': 1.0.0 '@radix-ui/react-compose-refs': 1.0.0(react@19.2.8) '@radix-ui/react-context': 1.0.0(react@19.2.8) @@ -15423,7 +15476,7 @@ snapshots: '@radix-ui/react-use-callback-ref@1.0.0(react@19.2.8)': dependencies: - '@babel/runtime': 7.29.2 + '@babel/runtime': 7.29.7 react: 19.2.8 '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.2.17)(react@19.2.8)': @@ -15503,7 +15556,7 @@ snapshots: '@radix-ui/react-use-layout-effect@1.0.0(react@19.2.8)': dependencies: - '@babel/runtime': 7.29.2 + '@babel/runtime': 7.29.7 react: 19.2.8 '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.2.17)(react@19.2.8)': @@ -15599,7 +15652,7 @@ snapshots: '@rc-component/async-validator@5.1.0': dependencies: - '@babel/runtime': 7.29.2 + '@babel/runtime': 7.29.7 '@rc-component/color-picker@2.0.1(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': dependencies: @@ -15612,14 +15665,14 @@ snapshots: '@rc-component/context@1.4.0(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': dependencies: - '@babel/runtime': 7.29.2 + '@babel/runtime': 7.29.7 rc-util: 5.44.4(react-dom@19.2.8(react@19.2.8))(react@19.2.8) react: 19.2.8 react-dom: 19.2.8(react@19.2.8) '@rc-component/mini-decimal@1.1.3': dependencies: - '@babel/runtime': 7.29.2 + '@babel/runtime': 7.29.7 '@rc-component/mutate-observer@1.1.0(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': dependencies: @@ -15631,7 +15684,7 @@ snapshots: '@rc-component/portal@1.1.2(react-dom@19.2.8(react@19.2.8))(react@19.2.8)': dependencies: - '@babel/runtime': 7.29.2 + '@babel/runtime': 7.29.7 classnames: 2.5.1 rc-util: 5.44.4(react-dom@19.2.8(react@19.2.8))(react@19.2.8) react: 19.2.8 @@ -15755,6 +15808,17 @@ snapshots: transitivePeerDependencies: - typescript + '@react-three/cannon@6.6.0(@react-three/fiber@9.7.0(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(three@0.165.0))(react@19.2.8)(three@0.165.0)(typescript@7.0.2)': + dependencies: + '@pmndrs/cannon-worker-api': 2.4.0(three@0.165.0) + '@react-three/fiber': 9.7.0(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(three@0.165.0) + cannon-es: 0.20.0 + cannon-es-debugger: 1.0.0(cannon-es@0.20.0)(three@0.165.0)(typescript@7.0.2) + react: 19.2.8 + three: 0.165.0 + transitivePeerDependencies: + - typescript + '@react-three/csg@4.0.0(three@0.165.0)': dependencies: three-bvh-csg: 0.0.16(three-mesh-bvh@0.6.8(three@0.165.0))(three@0.165.0) @@ -15764,7 +15828,7 @@ snapshots: '@react-three/drei@10.7.7(@react-three/fiber@9.6.1(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(three@0.165.0))(@types/react@19.2.17)(@types/three@0.165.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(three@0.165.0)': dependencies: - '@babel/runtime': 7.29.2 + '@babel/runtime': 7.29.7 '@mediapipe/tasks-vision': 0.10.17 '@monogrid/gainmap-js': 3.4.0(three@0.165.0) '@react-three/fiber': 9.6.1(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(three@0.165.0) @@ -15795,6 +15859,39 @@ snapshots: - '@types/three' - immer + '@react-three/drei@10.7.7(@react-three/fiber@9.7.0(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(three@0.165.0))(@types/react@19.2.17)(@types/three@0.165.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(three@0.165.0)': + dependencies: + '@babel/runtime': 7.29.7 + '@mediapipe/tasks-vision': 0.10.17 + '@monogrid/gainmap-js': 3.4.0(three@0.165.0) + '@react-three/fiber': 9.7.0(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(three@0.165.0) + '@use-gesture/react': 10.3.1(react@19.2.8) + camera-controls: 3.1.2(three@0.165.0) + cross-env: 7.0.3 + detect-gpu: 5.0.70 + glsl-noise: 0.0.0 + hls.js: 1.6.15 + maath: 0.10.8(@types/three@0.165.0)(three@0.165.0) + meshline: 3.3.1(three@0.165.0) + react: 19.2.8 + stats-gl: 2.4.2(@types/three@0.165.0)(three@0.165.0) + stats.js: 0.17.0 + suspend-react: 0.1.3(react@19.2.8) + three: 0.165.0 + three-mesh-bvh: 0.8.3(three@0.165.0) + three-stdlib: 2.36.1(three@0.165.0) + troika-three-text: 0.52.4(three@0.165.0) + tunnel-rat: 0.1.2(@types/react@19.2.17)(react@19.2.8) + use-sync-external-store: 1.6.0(react@19.2.8) + utility-types: 3.11.0 + zustand: 5.0.14(@types/react@19.2.17)(react@19.2.8)(use-sync-external-store@1.6.0(react@19.2.8)) + optionalDependencies: + react-dom: 19.2.8(react@19.2.8) + transitivePeerDependencies: + - '@types/react' + - '@types/three' + - immer + '@react-three/drei@9.122.0(@react-three/fiber@9.6.1(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(three@0.165.0))(@types/react@19.2.17)(@types/three@0.165.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(three@0.165.0)(use-sync-external-store@1.6.0(react@19.2.8))': dependencies: '@babel/runtime': 7.29.2 @@ -15850,6 +15947,26 @@ snapshots: - '@types/react' - immer + '@react-three/fiber@9.7.0(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(three@0.165.0)': + dependencies: + '@babel/runtime': 7.29.7 + '@types/webxr': 0.5.24 + base64-js: 1.5.1 + buffer: 6.0.3 + its-fine: 2.0.0(@types/react@19.2.17)(react@19.2.8) + react: 19.2.8 + react-use-measure: 2.1.7(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + scheduler: 0.27.0 + suspend-react: 0.1.3(react@19.2.8) + three: 0.165.0 + use-sync-external-store: 1.6.0(react@19.2.8) + zustand: 5.0.14(@types/react@19.2.17)(react@19.2.8)(use-sync-external-store@1.6.0(react@19.2.8)) + optionalDependencies: + react-dom: 19.2.8(react@19.2.8) + transitivePeerDependencies: + - '@types/react' + - immer + '@react-three/flex@1.0.1(@react-three/fiber@9.6.1(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(three@0.165.0))(react@19.2.8)(three@0.165.0)': dependencies: '@react-pdf/yoga': 2.0.4 @@ -16236,7 +16353,7 @@ snapshots: debug: 4.4.3(supports-color@7.2.0) minimatch: 10.2.6 semver: 7.7.4 - tinyglobby: 0.2.15 + tinyglobby: 0.2.17 ts-api-utils: 2.5.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: @@ -16424,7 +16541,7 @@ snapshots: '@vue/shared': 3.5.32 estree-walker: 2.0.2 magic-string: 0.30.21 - postcss: 8.5.8 + postcss: 8.5.25 source-map-js: 1.2.1 '@vue/compiler-ssr@3.5.32': @@ -17272,7 +17389,7 @@ snapshots: get-tsconfig: 4.13.7 is-bun-module: 2.0.0 stable-hash: 0.0.5 - tinyglobby: 0.2.15 + tinyglobby: 0.2.17 unrs-resolver: 1.11.1 optionalDependencies: eslint-plugin-import: 2.32.0(@typescript-eslint/parser@7.2.0(eslint@8.57.1(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.1(supports-color@7.2.0))(supports-color@7.2.0) @@ -17563,10 +17680,6 @@ snapshots: dependencies: reusify: 1.1.0 - fdir@6.5.0(picomatch@4.0.4): - optionalDependencies: - picomatch: 4.0.4 - fdir@6.5.0(picomatch@4.0.5): optionalDependencies: picomatch: 4.0.5 @@ -18215,6 +18328,23 @@ snapshots: - '@types/react' - '@types/react-dom' + lamina@1.2.2(@react-three/fiber@9.7.0(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(three@0.165.0))(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(three@0.165.0): + dependencies: + glsl-token-descope: 1.0.2 + glsl-token-functions: 1.0.1 + glsl-token-string: 1.0.1 + glsl-tokenizer: 2.1.5 + leva: 0.10.1(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + three: 0.165.0 + three-custom-shader-material: 6.4.0(@react-three/fiber@9.7.0(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(three@0.165.0))(react@19.2.8)(three@0.165.0) + optionalDependencies: + '@react-three/fiber': 9.7.0(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(three@0.165.0) + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + transitivePeerDependencies: + - '@types/react' + - '@types/react-dom' + language-subtag-registry@0.3.23: {} language-tags@1.0.9: @@ -19129,7 +19259,7 @@ snapshots: rc-overflow@1.5.0(react-dom@19.2.8(react@19.2.8))(react@19.2.8): dependencies: - '@babel/runtime': 7.29.2 + '@babel/runtime': 7.29.7 classnames: 2.5.1 rc-resize-observer: 1.4.3(react-dom@19.2.8(react@19.2.8))(react@19.2.8) rc-util: 5.44.4(react-dom@19.2.8(react@19.2.8))(react@19.2.8) @@ -19306,7 +19436,7 @@ snapshots: rc-virtual-list@3.19.2(react-dom@19.2.8(react@19.2.8))(react@19.2.8): dependencies: - '@babel/runtime': 7.29.2 + '@babel/runtime': 7.29.7 classnames: 2.5.1 rc-resize-observer: 1.4.3(react-dom@19.2.8(react@19.2.8))(react@19.2.8) rc-util: 5.44.4(react-dom@19.2.8(react@19.2.8))(react@19.2.8) @@ -20035,6 +20165,13 @@ snapshots: '@react-three/fiber': 9.6.1(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(three@0.165.0) react: 19.2.8 + three-custom-shader-material@6.4.0(@react-three/fiber@9.7.0(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(three@0.165.0))(react@19.2.8)(three@0.165.0): + dependencies: + three: 0.165.0 + optionalDependencies: + '@react-three/fiber': 9.7.0(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(three@0.165.0) + react: 19.2.8 + three-mesh-bvh@0.6.8(three@0.165.0): dependencies: three: 0.165.0 @@ -20074,15 +20211,10 @@ snapshots: tinyexec@1.2.4: {} - tinyglobby@0.2.15: - dependencies: - fdir: 6.5.0(picomatch@4.0.4) - picomatch: 4.0.4 - tinyglobby@0.2.17: dependencies: - fdir: 6.5.0(picomatch@4.0.4) - picomatch: 4.0.4 + fdir: 6.5.0(picomatch@4.0.5) + picomatch: 4.0.5 to-readable-stream@1.0.0: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index ed92b422..858a0c49 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -23,3 +23,4 @@ patchedDependencies: minimumReleaseAgeExclude: - material-theme-builder@3.0.0 + - '@react-three/fiber@9.7.0'