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 🙏

© 2026 – Pkg Stats / Ryan Hefner

@acertijosapps/react-native-fold

v1.0.1

Published

Foldable detection (tabletop/book) for React Native on Android and iOS

Readme

@acertijosapps/react-native-fold

Foldable detection (tabletop/book) for React Native. Android reads folding posture from androidx.window; iOS reads hinge state from UIHingeInteraction (iOS 27.1+).

[!WARNING] iOS detection requires building your app with Xcode 27.1 or later (iOS 27.1 SDK). With an older Xcode the library still compiles, but the hinge APIs are left out and useFold() is always null on iOS, even on an iPhone Duo.

Screenshots

The example app on a half-opened device. The dark bar prints what useFold() returns.

| | Book posture · FoldBookPane | Tabletop posture · FoldPane | |---|---|---| | iOS · iPhone Duo | | | | Android · Pixel 10 Pro Fold | | |

Requirements

  • React Native 0.80 or later with the New Architecture (this is a Turbo Module).
  • React 19.1 or later.

Installation

yarn add @acertijosapps/react-native-fold

or with npm:

npm install @acertijosapps/react-native-fold

Usage

import { FoldBookPane, FoldPane, FoldProvider } from '@acertijosapps/react-native-fold';

function App() {
  return (
    <FoldProvider>
      <FoldBookPane
        start={<Left />}
        end={<Right />}
        fallback={
          <FoldPane
            primary={<Top />}
            secondary={<Bottom />}
            fallback={<Single />}
          />
        }
      />
    </FoldProvider>
  );
}

useFold() returns:

type FoldState = {
  isSeparating: boolean;
  isHalfOpened: boolean;
  orientation: 'horizontal' | 'vertical';
  bounds: { x: number; y: number; width: number; height: number };
} | null;

bounds is always in dp: Android divides by density in Kotlin; iOS points are already density-independent.

FoldPane splits only when isSeparating && isHalfOpened && orientation === 'horizontal', and falls back when the hinge is not strictly inside the pane. It measures its own position in the window, so panels line up with the hinge even below a header; the spacer takes the hinge height and it never splits 50/50.

FoldBookPane is the book-posture counterpart: it splits start | end side by side only when isSeparating && isHalfOpened && orientation === 'vertical', measures its own x offset in the window and reserves bounds.width between both panels (the fold plus its margins on iOS, the fold line on Android). Nest FoldPane as its fallback to cover both postures.

Platform support

  • Android: WindowInfoTrackerCallbackAdapter + FoldingFeature (androidx.window 1.5.1).
  • iOS 27.1+: UIHingeInteraction for the hinge status plus UIViewReservedRegion (divisionRegionKind) for the geometry. bounds is the division region frame, including the margins iOS reserves around the fold for interactive content. orientation comes from the region's aspect, isSeparating from the region being active and isHalfOpened from PartiallyOpen. On the cover display there is no division region and useFold() is null; below iOS 27.1 it is always null.

License

MIT