npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@matterport/r3f

v0.2.7

Published

Matterport SDK utilities for react-three/fiber.

Downloads

3,348

Readme

@matterport/r3f

A MatterportSDK adapter for react-three/fiber.

Why?

Building on top of the @matterport/webcomponent package as a way to run the matterport viewer outside of an iframe. This opens up a lot of possibilities for allowing devs to control their build process in a more 'npm' friendly fashion, and allows them to leverate packages created by the react-three/fiber / three.js ecosystems at large.

Build your scene declaratively with re-usable, self-contained components that react to state, are readily interactive and can participate in React's ecosystem.

# install packages
npm install react-dom react
npm install three @types/three @react-three/fiber
npm install @matterport/webcomponent @matterport/r3f

# Ensure the matterport assets are available on your server
# this path will be the `assetBase` in the component
npx matterport-assets ./public/matterport-assets

What does it look like?

import '@matterport/webcomponent'
import { MatterportViewer, MpSdk, useMatterportSdk } from '@matterport/r3f'
import { createRoot } from 'react-dom/client'
import React, { useRef, useState } from 'react'
import { useFrame } from '@react-three/fiber'

function Box(props) {
  // reference the connected Matterport SDK from within r3f components
  const mpSdk = useMatterportSdk()
  // This reference gives us direct access to the THREE.Mesh object
  const ref = useRef()
  // Hold state for hovered and clicked events
  const [hovered, hover] = useState(false)
  const [clicked, click] = useState(false)
  // Subscribe this component to the render-loop, rotate the mesh every frame
  useFrame((state, delta) => (ref.current.rotation.x += delta))
  // Return the view, these are regular Threejs elements expressed in JSX
  return (
    <mesh
      {...props}
      ref={ref}
      scale={clicked ? 1.5 : 1}
      onClick={(event) => {
        click(!clicked)
      }}
      onPointerOver={(event) => hover(true)}
      onPointerOut={(event) => hover(false)}>
      <boxGeometry args={[1, 1, 1]} />
      <meshStandardMaterial color={hovered ? 'hotpink' : 'orange'} />
    </mesh>
  )
}

createRoot(document.getElementById('root')).render(
  <MatterportViewer
    m="YOUR-PUBLIC-MATTERPORT-MODEL-ID"
    assetBase="matterport-assets/"
    applicationKey="YOUR-MATTERPORT-APPLICATION-KEY"
    onPlaying={(mpSdk) => {
      mpSdk.Camera.rotate(-10, 0)
    }}
  >
    <ambientLight />
    <pointLight position={[10, 10, 10]} />
    <Box position={[-1.2, 0, 0]} />
    <Box position={[1.2, 0, 0]} />
  </MatterportViewer>
)

Components

MatterportViewer

A limited replacement for the react-three/fiber Canvas component which inserts children components into the Matterport 3d view.

MatterportPointer

Allows configuring the pointer reticle, and handling global raycast pointer events. Can only be used within a <MatterportViewer>.

<MatterportPointer
  visible={true}
  textureSrc="/images/custom-cursor.png"
  onClick={handleGlobalClick}
/>

MatterportModel

Allows handling raycast pointer events on the Matterport model mesh. Can only be used within a <MatterportViewer>.

<MatterportModel
  onClick={handleModelClick}
/>

Hooks

useMatterportSdk()

Hook that gives access to the Matterport SDK object within a React component.

import { useMatterportSdk } from '@matterport/r3f';

function ScreenshotTrigger() {
  const sdk = useMatterportSdk();
  return (
    <mesh onClick={() => { sdk.Renderer.takeScreenShot(); }}>
      ...
    </mesh>
  );
}