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

@gtcx/layouts-mobile

v0.1.0

Published

GTCX mobile layout shells — React Native + NativeWind v4

Readme

@gtcx/layouts-mobile

Mobile app shell components for the GTCX ecosystem. 5 layout shells covering the full range of enterprise mobile navigation patterns.

Installation

pnpm add @gtcx/layouts-mobile

Peer dependencies:

pnpm add react-native nativewind @gtcx/ui-mobile

Usage

import { TabShell, StackShell } from '@gtcx/layouts-mobile';

// Bottom tab navigation
function App() {
  return (
    <TabShell
      tabs={[
        { id: 'home', label: 'Home', icon: <HomeIcon /> },
        { id: 'search', label: 'Search', icon: <SearchIcon /> },
      ]}
      activeTabId="home"
      onTabPress={(id) => navigate(id)}
    >
      <HomeScreen />
    </TabShell>
  );
}

// Standard screen with sticky header
function ProfileScreen() {
  return (
    <StackShell title="Profile" onBack={() => router.back()}>
      <ProfileContent />
    </StackShell>
  );
}

Shells

Phase L — Foundation (4)

| Shell | Import | Description | | ---------- | ------------ | ----------------------------------------------------------------- | | ModalShell | ModalShell | Full-screen modal with header, back/close button, optional footer | | SplitShell | SplitShell | Master/detail layout for tablets | | StackShell | StackShell | Standard screen: sticky header + scrollable body + optional back | | TabShell | TabShell | Bottom tab bar with icon, label, badge support |

Phase N-L — Extended (2)

| Shell | Import | Description | | ---------------------- | ------------------------ | ------------------------------------------------------------------------ | | CollapsibleHeaderShell | CollapsibleHeaderShell | Scroll-driven header collapse — large title transitions to compact title | | SearchShell | SearchShell | Full-screen search overlay with recents, results, loading, empty states |

Architecture

NativeWind v4 className API

All shells use the NativeWind v4 className API. No StyleSheet.create, no hardcoded values.

TypeScript shim

This package ships types/react-native.d.ts — a lightweight shim enabling typecheck and DTS generation. It is kept in sync with the source of truth at packages/ui-mobile/types/react-native.d.ts.

When to update the shim: If you add a shell that uses a React Native prop not yet declared, add it to this shim AND to the other two shims in ui-mobile and screens-mobile. Also add the component to tests/__mocks__/react-native.tsx if it's a new export.

Scroll events (CollapsibleHeaderShell)

CollapsibleHeaderShell uses onScroll with scrollEventThrottle — both are declared in the shim's ScrollViewProps. The collapse threshold is 60px (configurable via collapseThreshold prop).

Testing

pnpm --filter @gtcx/layouts-mobile test
pnpm --filter @gtcx/layouts-mobile typecheck
pnpm --filter @gtcx/layouts-mobile lint
pnpm --filter @gtcx/layouts-mobile build

Contributing

  • All shells are zero-business-logic — all state and callbacks via props
  • testID sub-parts follow ${testID}-subpart convention
  • All interactive elements have accessibilityRole and accessibilityLabel