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

xrextras

v0.0.4

Published

This library provides modules that extend the [Camera Pipeline Module framework](https://docs.8thwall.com/web/#camerapipelinemodule) in [8th Wall XR](https://8thwall.com/products-web.html) to handle common application needs.

Downloads

8

Readme

XR Extras

This library provides modules that extend the Camera Pipeline Module framework in 8th Wall XR to handle common application needs.

The library is served at //cdn.8thwall.com/web/xrextras/xrextras.js, or can be built from this repository by running

$ npm install
$ npm run build

Hello World

Native JS

index.html:

<html>
  <head>
    <title>XRExtras: Camera Pipeline</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">

    <!-- XR Extras - provides utilities like load screen, almost there, and error handling.
         See https://github.com/8thwall/web/tree/master/xrextras/ -->
    <script src="//cdn.8thwall.com/web/xrextras/xrextras.js"></script>

    <!-- 8thWall Web - Replace the app key here with your own app key -->
    <script async src="//apps.8thwall.com/xrweb?appKey=XXXXXXXX"></script>

    <script src="index.js"></script>
  </head>
  <body>
    <canvas id="camerafeed"></canvas>
  </body>
</html>

index.js:

const onxrloaded = () => {
  XR.addCameraPipelineModules([  // Add camera pipeline modules.
    // Existing pipeline modules.
    XR.GlTextureRenderer.pipelineModule(),       // Draws the camera feed.
    XRExtras.AlmostThere.pipelineModule(),       // Detects unsupported browsers and gives hints.
    XRExtras.FullWindowCanvas.pipelineModule(),  // Modifies the canvas to fill the window.
    XRExtras.Loading.pipelineModule(),           // Manages the loading screen on startup.
    XRExtras.RuntimeError.pipelineModule(),      // Shows an error image on runtime error.
  ])

  XR.run({canvas: document.getElementById('camerafeed')})   // Request permissions and run camera.
}

// Show loading screen before the full XR library has been loaded.
const load = () => { XRExtras.Loading.showLoading({onxrloaded}) }
window.onload = () => { window.XRExtras ? load() : window.addEventListener('xrextrasloaded', load) }

AFrame

index.html:

<html>
  <head>
    <title>XRExtras: A-FRAME</title>

    <!-- We've included a slightly modified version of A-Frame, which fixes some polish concerns -->
    <script src="//cdn.8thwall.com/web/aframe/8frame-0.8.2.min.js"></script>

    <!-- XR Extras - provides utilities like load screen, almost there, and error handling.
         See https://github.com/8thwall/web/tree/master/xrextras/ -->
    <script src="//cdn.8thwall.com/web/xrextras/xrextras.js"></script>

    <!-- 8thWall Web - Replace the app key here with your own app key -->
    <script async src="//apps.8thwall.com/xrweb?appKey=XXXXXXXX"></script>
  </head>

  <body>
    <!-- Add the 'xrweb' attribute to your scene to make it an 8th Wall Web A-FRAME scene. -->
    <a-scene
      xrweb
      xrextras-almost-there
      xrextras-loading
      xrextras-runtime-error
      xrextras-tap-recenter>

      <a-camera position="0 8 8"></a-camera>

      <a-entity
        light="type: directional; castShadow: true; intensity: 0.8; shadowCameraTop: 7;
               shadowMapHeight: 1024; shadowMapWidth: 1024;"
        position="1 4.3 2.5">
      </a-entity>

      <a-entity
        light="type: directional; castShadow: false; intensity: 0.5;" position="-0.8 3 1.85">
      </a-entity>

      <a-light type="ambient" intensity="1"></a-light>

      <a-box
        position="-1.7 0.5 -2" rotation="0 45 0" shadow
        material="roughness: 0.8; metalness: 0.2; color: #00EDAF;">
      </a-box>

      <a-sphere
        position="-1.175 1.25 -5.2" radius="1.25" shadow
        material="roughness: 0.8; metalness: 0.2; color: #DD0065;">
      </a-sphere>

      <a-cylinder
        position="2 0.75 -1.85" radius="0.5" height="1.5" shadow
        material="roughness: 0.8; metalness: 0.2; color: #FCEE21;">
      </a-cylinder>

      <a-circle position="0 0 -4" rotation="-90 0 0" radius="4" shadow
        material="roughness: 0.8; metalness: 0.5; color: #AD50FF">
      </a-circle>
    </a-scene>
  </body>
</html>

API

Pipeline Modules

Quick Reference:

  XR.addCameraPipelineModules([  // Add camera pipeline modules.
    // Existing pipeline modules.
    XR.GlTextureRenderer.pipelineModule(),       // Draws the camera feed.
    XRExtras.AlmostThere.pipelineModule(),       // Detects unsupported browsers and gives hints.
    XRExtras.FullWindowCanvas.pipelineModule(),  // Modifies the canvas to fill the window.
    XRExtras.Loading.pipelineModule(),           // Manages the loading screen on startup.
    XRExtras.RuntimeError.pipelineModule(),      // Shows an error image on runtime error.
  ])

Pipeline Modules:

  • AlmostThere.pipelineModule(): Detects if the user is not on a supported device or browser, and provides helpful information for how to view the XR experience.
  • FullWindowCanvas.pipelineModule(): Makes sure that the camera display canvas fills the full browser window across device orientation changes, etc.
  • Loading.pipelineModule(): Displays a loading overlay and camera permissions prompt while libraries are loading, and while the camera is starting up.
  • RuntimeError.pipelineModule(): Shows an error image when an error occurs at runtime.

AFrame Components

Quick Reference:

    <a-scene
      xrweb
      xrextras-almost-there
      xrextras-loading
      xrextras-runtime-error
      xrextras-tap-recenter>

Javascript Functions:

  • XRExtras.AFrame.registerXrExtrasComponents(): Registers the XR Extras AFrame components if they aren't already registered. If AFrame is loaded befor XR Extras, then there is no need to call this method. In the case that AFrame is loaded late and you need to explicitly register the components, you can call this method.

AFrame Components:

  • xrextras-almost-there: Detects if the user is not on a supported device or browser, and provides helpful information for how to view the XR experience.
  • xrextras-loading: Displays a loading overlay and camera permissions prompt while the scene and libraries are loading, and while the camera is starting up.
  • xrextras-runtime-error: Hides the scene and shows an error image when an error occurs at runtime.
  • xrextras-tap-recenter: Calls 'XR.recenter()' when the AFrame scene is tapped.

Other

Fonts: Provides common .css for fonts used by various modules.

DebugWebViews: Provides utilities for debugging javascript while it runs in browsers embedded in applications.

Quick Reference:

    <script src="//cdn.8thwall.com/web/xrextras/xrextras.js"></script>
    <script>
      const screenlog = () => {
        window.XRExtras.DebugWebViews.enableLogToScreen()
        console.log('screenlog enabled')
      }
      window.XRExtras ? screenlog() : window.addEventListener('xrextrasloaded', screenlog)
    </script>