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

@core_super_app/ui

v0.0.20

Published

Define common components for project

Readme

@core_super_app/ui

Shared UI component library for React Native applications in the Super App ecosystem.

Components

  • BaseView — page layout wrapper with header and loading overlay
  • Header — header bar with back button, title/subtitle, and right view slot
  • LoadingOverlay — full-screen loading overlay
  • TextWrapperText wrapper with default styles and accessibility support
  • BasicButton — gradient button with disabled state
  • BasicInput — animated label input with clear button, char counter, and imperative ref
  • RadioButton — radio button with selected/unselected state
  • BottomSheet — bottom sheet powered by @lodev09/react-native-true-sheet
  • SelectListBottomSheet — bottom sheet with a selectable list and optional radio buttons
  • EmptyComponent — empty state placeholder

Installation

yarn add @core_super_app/ui

or

npm install @core_super_app/ui

Requirements

  • Node.js v22.20.0 (see .nvmrc)
  • React Native 0.84.x
  • Peer dependencies:
    • react-native-reanimated >= 4.3.0
    • react-native-linear-gradient >= 2.8.3
    • react-native-worklets >= 0.8.1
    • react-native-safe-area-context
    • @react-navigation/native
    • @core_super_app/utils

Usage

Import

import {
  BaseView,
  Header,
  LoadingOverlay,
  TextWrapper,
  BasicButton,
  BasicInput,
  RadioButton,
  BottomSheet,
  SelectListBottomSheet,
  ImageSrc,
} from '@core_super_app/ui';

BasicButton

<BasicButton onPress={() => console.log('pressed')}>
  Login
</BasicButton>

BasicInput with imperative ref

import { useRef } from 'react';
import { BasicInput } from '@core_super_app/ui';

type InputRef = {
  focus: () => void;
  blur: () => void;
};

const inputRef = useRef<InputRef>(null);

<BasicInput
  ref={inputRef}
  label="Phone number"
  value={phone}
  onChange={setPhone}
  showClearButton
/>;

BaseView

<BaseView isLoading={loading} back title="Profile">
  {/* Screen content */}
</BaseView>

BottomSheet

import { useRef } from 'react';
import { TrueSheet } from '@lodev09/react-native-true-sheet';
import { BottomSheet } from '@core_super_app/ui';

const sheetRef = useRef<TrueSheet>(null);

<BottomSheet ref={sheetRef} detents={['auto', '50%']}>
  {/* Sheet content */}
</BottomSheet>

SelectListBottomSheet

<SelectListBottomSheet
  ref={sheetRef}
  data={[
    { label: 'Option A', value: 'a' },
    { label: 'Option B', value: 'b' },
  ]}
  currentSelected={selected}
  onSelect={(value) => setSelected(value)}
  showRadioButton
/>

API

BaseView

| Prop | Type | Description | |------|------|-------------| | background | ColorValue | Background color | | isLoading | boolean | Show loading overlay | | ...HeaderProps | | All Header props |

Header

| Prop | Type | Description | |------|------|-------------| | back | boolean | Show back button | | leftIcon | ReactNode | Custom left icon | | onPressLeftIcon | () => void | Left icon press handler | | title | string | Title text | | subTitle | string | Subtitle text | | titleStyle | TextStyle | Title text style | | titleMaxLines | number | Max lines for title | | rightView | ReactNode | Right slot content | | disabledBackHandler | boolean | Disable hardware back |

BasicInput

| Prop | Type | Description | |------|------|-------------| | label | string | Animated floating label | | value | string | Input value | | onChange | (text: string) => void | Change handler | | showClearButton | boolean | Show clear (×) button | | showLimitCount | boolean | Show character counter | | maxLength | number | Max character count | | isError | boolean | Error border state | | required | boolean | Show required mark (*) | | readOnly | boolean | Read-only mode | | disabled | boolean | Disabled state | | replaceRegex | RegExp | Regex to strip from input | | renderLeftIcon | JSX.Element | Left icon slot | | renderRightIcon | JSX.Element | Right icon slot |

Imperative ref methods: focus(), blur()

BottomSheet

| Prop | Type | Description | |------|------|-------------| | name | string | Sheet identifier for imperative control | | ref | RefObject<TrueSheet> | Ref for programmatic show/dismiss | | detents | SheetDetent[] | Size stops, default ['auto'] | | dimmed | boolean | Show backdrop dim, default true | | scrollable | boolean | Enable scroll inside sheet | | header | JSX.Element | Header slot | | footer | ReactNode | Footer slot (auto safe-area padded) | | backgroundColor | ColorValue | Sheet background color | | stackBehavior | StackBehavior | Behavior when stacking sheets | | onShow | (e) => void | Called when sheet presents | | onBlur | (e) => void | Called when sheet loses focus | | onFocus | (e) => void | Called when sheet gains focus |

SelectListBottomSheet

Extends all BottomSheet props, plus:

| Prop | Type | Description | |------|------|-------------| | data | { label: string; value: any }[] | List items | | onSelect | (value: any) => void | Selection handler | | currentSelected | any | Currently selected value | | showRadioButton | boolean | Show radio buttons | | showSeparator | boolean | Show item separators, default true | | showEmptyComponent | boolean | Show empty state, default false | | itemContainerStyle | ViewStyle | Style for each item row |

RadioButton

| Prop | Type | Description | |------|------|-------------| | isSelected | boolean | Selected state | | onSelect | () => void | Selection callback | | disabled | boolean | Disable interaction | | containerStyle | ViewStyle | Outer container style |

Scripts

| Command | Description | |---------|-------------| | yarn clean | Remove build artifacts | | yarn prepare | Build the package via react-native-builder-bob | | yarn typecheck | Run TypeScript type check | | yarn lint | Lint source files | | yarn test | Run Jest tests | | yarn release | Bump version and publish via release-it |

CI

GitHub Actions (.github/workflows/ci.yml) runs:

  • Lint + type check
  • Unit tests with coverage
  • Library build
  • Android example build (with Turbo cache)
  • iOS example build (with Turbo cache)

Publishing

The package is published publicly to npm (publishConfig.access = public).

yarn release

Release flow uses release-it + conventional changelog + git tag v<version>.

Contributing

Commit messages follow the Conventional Commits specification.

License

MIT