Buckets:
20.9 GB
673,093 files
Updated 2 months ago
Ctrl+K
| Name | Size | Uploaded | Xet hash |
|---|---|---|---|
| .changeset | |||
| .github | |||
| dist | |||
| node_modules | |||
| src | |||
| test | |||
| .editorconfig | 181 Bytes xet | 1542a4b6 | |
| .eslintrc.json | 2.54 kB xet | 1e1ef9c2 | |
| .prettierrc | 107 Bytes xet | 27a0f69b | |
| CHANGELOG.md | 220 Bytes xet | 2d5de668 | |
| LICENSE | 1.07 kB xet | 2fbc59bb | |
| README.md | 3.2 kB xet | 52f8316a | |
| jest.config.js | 296 Bytes xet | c5a94078 | |
| package.json | 2.57 kB xet | d59cfb77 | |
| rollup.config.js | 1.49 kB xet | 113e1637 | |
| tsconfig.json | 403 Bytes xet | 02e5ecae |
Tunnel Rat
- Digs tunnels for React elements to go in and appear somewhere else!
- Works across separate renderers – use it to easily render HTML elements from within your @react-three/fiber application!
- Squeak! 🐀
Examples & Sandboxes
Usage
Create a tunnel:
import tunnel from 'tunnel-rat'
const t = tunnel()
Use the tunnel's In component to send one or more elements into the tunnel:
<t.In>
<h1>Very cool!</h1>
<p>These will appear somewhere else!</p>
</t.In>
Somewhere else, use the tunnel's Out component to render them:
<t.Out />
Examples
This example describes a simple React app that has both a HTML UI as well as a @react-three/fiber 3D scene. Each of these is rendered using separate React renderers, which traditionally makes emitting HTML from within the Canvas a bit of a pain; but thanks to tunnel-rat, this is now super easy!
import { Canvas } from '@react-three/fiber'
import tunnel from 'tunnel-rat'
/* Create a tunnel. */
const ui = tunnel()
const App = () => (
<div>
<div id="ui">
{/* Anything that goes into the tunnel, we want to render here. */}
<ui.Out />
</div>
{/* Here we're entering the part of the app that is driven by
@react-three/fiber, where all children of the <Canvas> component
are rendered by an entirely separate React renderer, which would
typically not allow the use of HTML tags. */}
<Canvas>
{/* Let's send something into the tunnel! */}
<ui.In>
<p>Hi, I'm a cube!</p>
</ui.In>
<mesh>
<boxGeometry />
<meshBasicMaterial />
</mesh>
{/* You can send multiple things through the tunnel, and
they will all show up in the order that you've defined them in! */}
<ui.In>
<p>And I'm a sphere!</p>
</ui.In>
<mesh>
<sphereGeometry />
<meshBasicMaterial />
</mesh>
</Canvas>
</div>
)
Of course, the whole thing also works the other way around:
import { Canvas } from '@react-three/fiber'
import tunnel from 'tunnel-rat'
/* Create a tunnel. */
const three = tunnel()
const App = () => (
<div>
<div id="ui">
{/* Let's beam something into the R3F Canvas! */}
<three.In>
<mesh>
<sphereGeometry />
<meshBasicMaterial />
</mesh>
</three.In>
</div>
<Canvas>
{/* Render anything sent through the tunnel! */}
<three.Out />
</Canvas>
</div>
)
- Total size
- 20.9 GB
- Files
- 673,093
- Last updated
- Mar 19
- Pre-warmed CDN
- US EU US EU