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

@life-hack-tools/splash

v1.1.3

Published

Composable Expo React Native splash sequence manager with injectable brand and app splash components.

Downloads

1,116

Readme

@life-hack-tools/splash

Composable 2-stage splash screen manager for Expo React Native apps.

  • Stage 1 (Brand): injectable brand splash component
  • Stage 2 (App): injectable app-specific splash component
  • Includes a default BrandSplash, but apps can provide their own brand and app splash components.

Installation

npm install @life-hack-tools/splash

Peer dependencies

Ensure these are installed in your Expo project:

  • expo-linear-gradient
  • expo-splash-screen
  • expo-status-bar
  • react-native-reanimated

Usage

Basic (SplashManager)

Wrap your app content with SplashManager in the root layout:

import { BrandSplash, SplashManager } from '@life-hack-tools/splash';
import { MyAppSplash } from '@/components/MyAppSplash';

export default function RootLayout() {
  const [appLoaded, setAppLoaded] = useState(false);

  useEffect(() => {
    // Load fonts, auth, etc.
    loadResources().then(() => setAppLoaded(true));
  }, []);

  return (
    <SplashManager
      appLoaded={appLoaded}
      BrandSplash={BrandSplash}
      AppSplash={MyAppSplash}
      brandSplashProps={{
        letters: ['L', 'H', 'T'],
        colors: ['#a51c1c', '#6b0a0a', '#1a0000'],
      }}
      appSplashProps={{
        title: 'My App',
      }}
      brandDuration={1500}
      appSplashDuration={2000}
      onPrepare={async () => {
        // Run startup work while splash screens are visible.
        await loadResources();
      }}
      onReady={() => console.log('Splash done')}
      onMount={() => {
        // Optional app-level setup, e.g. system bar configuration.
      }}
    >
      <Stack screenOptions={{ headerShown: false }}>
        <Stack.Screen name="(tabs)" />
      </Stack>
    </SplashManager>
  );
}

BrandSplash standalone

Use BrandSplash directly if you want full control over transitions:

import { BrandSplash } from '@life-hack-tools/splash';

// Default LHTz letters + red gradient
<BrandSplash />

// Custom letters and colors
<BrandSplash
  letters={['M', 'u', 'g', 'g']}
  colors={['#1a1a1a', '#2a2a2a', '#0c0c0c']}
  locations={[0, 0.5, 1]}
/>

// No animation
<BrandSplash animated={false} />

API

SplashManager

| Prop | Type | Default | Description | |------|------|---------|-------------| | brandDuration | number | 1500 | Brand splash duration (ms) | | appSplashDuration | number | 2000 | App splash duration (ms) | | BrandSplash | React.ComponentType | bundled BrandSplash | Stage 1 component. Pass your own component to fully control the brand splash. | | brandSplashProps | object | — | Props forwarded to the brand splash component. | | AppSplash | React.ComponentType | — | Stage 2 component. If omitted, skips to content. | | appSplashProps | object | — | Props forwarded to the app splash component. | | onReady | () => void | — | Called when splash sequence finishes | | onMount | () => void | — | Optional setup hook for app-level side effects | | onPrepare | () => void \| Promise<void> | — | Startup work to run while splash screens are visible. The splash sequence waits for it before advancing. | | appLoaded | boolean | true | Set to false while loading resources (fonts, auth). Splash stays until true. | | children | ReactNode | — | App content shown after splash |

BrandSplash

| Prop | Type | Default | Description | |------|------|---------|-------------| | letters | string[] | ['L','H','T','z'] | Letters to animate | | colors | string[] | LHTz red gradient | Gradient background colors | | locations | number[] | [0, 0.25, 0.5, 0.75, 1] | Gradient stops | | animated | boolean | true | Animate letter entrances |

Splash flow

Native splash (static) → Brand splash (animated) → App splash (custom) → App content

The native splash screen is hidden as soon as appLoaded becomes true. The brand splash then runs for brandDuration ms, followed by the app splash for appSplashDuration ms.

Publish

npm version patch
npm publish --access public