Button
Trigger primary and secondary actions across sizes, variants, and loading states.
A token-driven React Native component library for building consistent, expressive, and scalable interfaces across platforms.
npm install @impulse-ui-native/toolkitVersion
2.9.0
License
MIT
Package
Toolkit
Good morning
Alex Rivera
Sessions
248↑ 12.4%Active
36live nowNotifications
Push & email
MIT licensed, public from day one.
Strong types across every component.
Built for iOS, Android, and web.
Primitive, semantic, and component layers.
Built in the open with contributors.
Components
Browse the library by purpose, capability, and package. Native behavior stays in native Storybook, while this catalog gives every component a clear place in the system.
Collect typed text with themed labels, validation, and supporting content.
Collect longer text with character counting and bounded auto-grow behavior.
Toggle checked, unchecked, and indeterminate states with accessible semantics.
Present an accessible single-choice control across shared sizes and variants.
Toggle settings with animated state changes and disabled or loading behavior.
Choose one or many values through a themed control and native flyout.
Compose labels, descriptions, required state, and validation around custom controls.
Select dates with calendar navigation and configurable date constraints.
Select hours and minutes using native-friendly scrolling controls.
Represent people and entities with images, initials, fallbacks, and presence states.
Group related content in compound static or pressable themed surfaces.
Separate content horizontally or vertically with logical insets and semantic colors.
Reveal collapsible sections with single or multiple expansion and keyboard navigation.
Label status and categories with semantic colors and optional dismissal.
Display compact semantic states and metadata with optional leading or trailing content.
Communicate indeterminate work with token-aware sizes and semantic colors.
Show determinate or indeterminate progress with linear and circular variants.
Communicate loading layouts with animated bones, text, and shape presets.
Explain empty, error, and completed states with composable actions.
Show a continuous trend across numeric, date, or categorical values.
Compare multiple series against the same axes, domain, and grid.
Compare categorical values, including positive and negative measurements.
Compare grouped series across categories with configurable spacing.
Communicate proportions as a token-colored pie or donut chart.
Display independently normalized data as concentric proportional rings.
Playground
variant="filled" size="medium"Variant
Size
State
Design tokens
The website consumes the same primitive scale as the native theme instead of maintaining a parallel palette or spacing system.
Semantic roles backed by the native palette.
colors.primary.value#f55d6bcolors.accent.value#FA9EA7colors.secondary.value#FEE7E9colors.surface.primary#f1f3f5colors.surface.elevated#ffffffThe shared layout rhythm in logical pixels.
space.xxs4space.xs8space.mxs12space.sm16space.msm24space.md32Consistent shape from controls to flyouts.
radii.sm4radii.md8radii.lg16radii.xl32radii.round100000Montserrat scales shared by every package.
fontSize.xs12fontSize.xsm14fontSize.sm16fontSize.xl24fontSize.colossal56export const SpaceTokens = {
xxs: 4, xs: 8, mxs: 12,
sm: 16, msm: 24, md: 32,
lg: 48, xl: 64, xxl: 96,
}
export const RadiiTokens = {
sm: 4, md: 8, lg: 16,
xl: 32, xxl: 64, round: 100000,
}Why tokens matter
Theming
Primitive values feed semantic roles, then component factories. The preview below intentionally uses the authoritative light theme because the package does not yet define a distinct dark palette.
Theme preview
LightThemeGood morning
Alex Rivera
Sessions
248↑ 12.4%Active
36live nowNotifications
Push & email
Semantic tokens
7 valuescolors.surface.primary#f1f3f5colors.surface.secondary#ffffffcolors.text.primary#16191dcolors.text.secondary#212529colors.text.disabled#868e96colors.border.subtle#e9ecefcolors.border.focus#f55d6bHow it composes
Architecture
A traceable pipeline from raw values to shipping interfaces. Every layer remains replaceable, testable, and documented.
Layer 1
Raw colors, dimensions, type, and spacing.
#f55d6bspace.smradii.mdLayer 2
Intent-driven roles for surfaces and actions.
surface.primarytext.disabledborder.focusLayer 3
Factories translate the theme into exact anatomy.
button.sizestag.colorscontrol.variantsLayer 4
Composable React Native building blocks.
ButtonInputSelectLayer 5
Your screens remain coherent as the system changes.
OnboardingDashboardSettingscomponents.buttoncomponents.tagcomponents.controlContainercomponents.datetimePickercomponents.skeletonDeveloper experience
Extend, wrap, and recompose components without leaving the token contract.
Use names that describe intent instead of one-off pixel values.
Keep behavior and visual language aligned across supported platforms.
<Button />size"small" | "medium" | "large""medium"variant"filled" | "outlined" | "soft" | "ghost" | "plain""filled"loadingbooleanfalsedisabledbooleanfalseonPressPressableProps['onPress']–shadow"none" | "xs" | "sm" | "md" | "lg" | "xl"–Contribute
ImpulseUI Native is shaped in the open. Explore the source, report issues, suggest improvements, and contribute new ideas.
Start with tokens, compose with components, and shape the system around your product.