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

@kaliber/use-fullscreen-video

v1.2.0

Published

Fullscreen videos, without all the hassle.

Downloads

21

Readme

useFullscreenVideo

Simplified cross-browser fullscreen video behavior.

Motivation

This React hook simplifies the process of managing fullscreen video playback across different browsers, handling the complexities of vendor-specific APIs for you. It also handles the fallback scenario, in case the browser (e.g. iOS Safari) does not support setting a HTMLDivElement to fullscreen (but does allow HTMLVideoElement to do so).

Installation

yarn add @kaliber/use-fullscreen-video

Usage

import { useFullscreenVideo } from '@kaliber/use-fullscreen-video'

function Component() {
  const { refs, request, exit } = useFullscreenVideo({
    onChange: console.debug,
    onError: console.error
  })

  return (
    <main>
      <div ref={refs.setContainer}>
        <video ref={refs.setVideo} src={neverGonnaGiveYouUp} />
        <button onClick={exit}>
          Exit fullscreen
        </button>
      </div>

      <button onClick={request}>
        Request fullscreen
      </button>
    </main>
  )
}

Third party players

Implementations between third party players may vary. Make sure you have access to the internal video element for the broadest cross-browser support.

using ReactPlayer

import { useFullscreenVideo } from '@kaliber/use-fullscreen-video'
import ReactPlayer from 'react-player'

function Component() {
  const videoRef = React.useRef(null)
  const { refs, request, exit } = useFullscreenVideo({
    onChange: console.debug,
    onError: console.error
  })

  return (
    <main>
      <div ref={refs.setContainer}>
        <ReactPlayer 
          ref={videoRef} 
          // Make sure you add a `src` that uses ReactPlayer's `FilePlayer`:
          url={neverGonnaGiveYouUp} 
          onReady={() => {
            // Video ref is only available when video is ready:
            const videoPlayerElement = videoRef.current.getInternalPlayer()
            refs.setVideo(videoPlayerElement)
          }}
        />
        <button onClick={exit}>
          Exit fullscreen
        </button>
      </div>

      <button onClick={request}>
        Request fullscreen
      </button>
    </main>
  )
}

Hook Options

The useFullscreenVideo hook accepts an options object:

  • options: Configure wether you would like to open the element or the container through the useVideoElement option in this object.
  • onChange({ state, event }): A callback function that is triggered whenever the fullscreen state changes. The isFullscreen argument will be both the state of the fullscreen functionality, and the original Event in an object.
  • onError(error): A callback function invoked if an error occurs during fullscreen transitions. The error argument will contain the error details.

Returned Values

The hook returns an object containing the following:

Values

  • refs: An object with setContainer and setVideo setters for assigning references to the container element and video element, respectively.

Methods

  • request(options): Initiates a fullscreen request on either the designated container or the video element itself, depending on browser implementation. The options argument allows for potential browser-specific configuration.
  • getElement(): The DOM element that is currently in fullscreen mode (if any).
  • isFullscreen(): A boolean value indicating whether the video is in fullscreen mode.
  • isEnabled(): A boolean value indicating whether fullscreen functionality is supported by the browser.
  • exit(): Exits the fullscreen mode.

Disclaimer

This library is intended for internal use, we provide no support, use at your own risk. It does not import React, but expects it to be provided, which @kaliber/build can handle for you.

This library is not transpiled.