0.1.2 • Published 2 years ago

tunnel-rat v0.1.2

Weekly downloads
-
License
MIT
Repository
github
Last release
2 years ago

Version Downloads Bundle Size

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>
)
guangdaiexcalidraw-hp-test@everything-registry/sub-chunk-2986teaching_component_dsahil_ccsahil_pkgsahil_ugsupernovelhello_excalhello_excaliintelli-quillmixa-novelmtdb1mtmeditormtmviteprojectmtxuilib-oldmtxuilibv2hol-excalidrawglodreimydraw2324mtxuinovelnovelchefr3f-dom-masonrynovel-libraryterminal-rush@alkemio/excalidraw@betternotion/excalidraw@bsmnt/webgl@chaitin_rivers/excalidraw@coinseeker/novel@dcat23/noveltry_excalidraw_whiteboard@dwelle/excalidraw@guangdai/excalidraw@hungnguyen157/excalidraw@fileverse-dev/excalidraw@edwardw483/excali@edwardw483/excaliwhitelist@fujia/novel@infinitebrahmanuniverse/nolb-tun@kristiankostecky/excalidraw@maposia/excalidraw@nicetouch/drei@ninjagl/core@excalidraw/excalidraw@ezcax/editor@mohammadhariszia/drei@react-three/uikit-default@react-three/xr@react-three/drei@react-three/editor@npclown/excalidraw@notud/excalidraw@opentechiz/excalidraw@srinivasprabhu/dreieducatewhiteboard_pkg@tegonhq/ui@thenewvu/excalidraw@tdtdev/excalidraw@treasured/playerexcalidraw-collaborationexcal_inside_checkexcali-customexcalidraw-customexcalidraw-customizationexcalidraw-gdexcalidraw-jbexcalidraw-local-collab-forkexcalidraw_sigmathexcalidraw_vrandaexcalidraw_vranda_mamexcalidrawbasicexcalidraw_inside_checkexcalidraw_karatexcalidraw_master_sahilexcalidraw_master_test1excalidraw_new_test_00excalidraw-zhexcalidraw0990excalidraw_app23@weiwenda/excalidraw@zsviczian/excalidrawadsign-mapfriday_ccconcisedcollabted-excalidrawd_teaching_componentdemotest_excalidemowork_excalidraw
0.1.2

2 years ago

0.1.1

2 years ago

0.1.0

2 years ago

0.0.4

2 years ago

0.0.3

3 years ago

0.0.2

3 years ago

0.0.1

3 years ago

0.0.0

3 years ago