v1.0.4
Typography component renames Text, refined soft-foreground theme tokens with optional vibrant palette, iOS native modal offset guidance, Expo 56 / React Native 0.85 example upgrade
HeroUI Native v1.0.4 renames the Text typography primitive to Typography to free up React Native's Text name and align with semantic typography usage, while keeping the existing Text exports as deprecated aliases for a seamless upgrade. This release also refines soft-foreground color tokens across Alert, Avatar, Button, Chip, and Toast for better contrast on soft backgrounds, ships a new optional heroui-native/styles/vibrant palette, documents the iOS native-modal offset workaround for Menu, Popover, and Select, and upgrades the example app to Expo 56 / React Native 0.85.
Installation
Update to the latest version:
npm i heroui-nativepnpm add heroui-nativeyarn add heroui-nativebun add heroui-nativeUsing AI assistants? Simply prompt "Hey Cursor, update HeroUI Native to the latest version" and your AI assistant will automatically compare versions and apply the necessary changes. Learn more about the HeroUI Native MCP Server.
Try It on Your Device
What's New
Typography Component (Renamed from Text)
The library's typography primitive has been renamed from Text to Typography to avoid clashing with React Native's built-in Text and to better describe its purpose as a semantic typography system. The component's API, variants, and behavior are unchanged — only the public name moves.
import { Typography } from "heroui-native";
import { View } from "react-native";
export function Example() {
return (
<View className="flex-1 justify-center px-5 gap-4">
<Typography.Heading type="h1">Welcome</Typography.Heading>
<Typography.Heading type="h3">Getting Started</Typography.Heading>
<Typography.Paragraph>
This is a body paragraph rendered with the Typography component.
</Typography.Paragraph>
<Typography.Paragraph color="muted" type="body-sm">
Smaller supporting text for captions or footnotes.
</Typography.Paragraph>
<Typography.Code>npm install heroui-native</Typography.Code>
</View>
);
}What changed:
- Primary export is now
Typography, with sub-componentsTypography.Heading,Typography.Paragraph, andTypography.Code - New
typographyClassNamesstyle API andTypography*type aliases replace the priorText*naming - The existing
Text,textClassNames, andText*types are kept as deprecated re-exports for backward compatibility - Example screen renamed from
texttotypographyin the component catalog - JSDoc and component docs updated to reference Typography and the new docs URL
No migration required. Existing import { Text } from "heroui-native" continues to work via deprecated re-exports. Migrate to Typography at your convenience before a future major release removes the deprecated aliases.
Related PR: #417
Vibrant Theme Palette (Optional)
A new optional heroui-native/styles/vibrant stylesheet is available for apps that prefer more saturated brand colors on soft variants. It keeps the readability improvements from the refined soft-foreground tokens while preserving high color saturation for icons and text on soft backgrounds.
Usage:
// Default refined soft-foreground palette
import "heroui-native/styles";
// Or, opt into the vibrant palette
import "heroui-native/styles";
import "heroui-native/styles/vibrant";Import heroui-native/styles/vibrant after the base styles to override soft-foreground tokens with the more saturated values. No component code changes are required to opt in.
Related PR: #420
Component Improvements
Refined Soft-Foreground Colors Across Components
The Alert, Avatar, Button, Chip, and Toast components now use the new *-soft-foreground theme tokens for labels and icons on soft backgrounds, producing better contrast and a more cohesive look across light and dark themes.
Improvements:
- Soft foreground tokens (
accent-soft-foreground,success-soft-foreground,warning-soft-foreground,danger-soft-foreground,default-soft-foreground) are computed viacolor-mixintheme.cssfor improved readability on soft backgrounds - Alert, Avatar, Button, Chip, and Toast styles (and their internal hooks) consume the new soft-foreground tokens instead of raw semantic colors like
text-accentortext-success - A new optional
heroui-native/styles/vibrantexport preserves saturated brand colors on soft variants for apps that want a more vivid look - Example app demos for Alert, Avatar, Button, Chip, and Toast were updated to match the refined color usage
Component props and public APIs are unchanged — only the color values applied to soft variants. Apps relying on the default theme will see softer, more legible icon and label colors on soft variants out of the box.
Related PR: #420
TextArea Vertical Padding Fix
The TextArea component now applies proper inner vertical padding so multiline content no longer hugs the top edge of the field.
Improvements:
TextAreanow usesh-32 py-2for consistent inner spacing- No API changes — the fix is a styling-only update inside the component
Related PR: #421
API Enhancements
useThemeColor Token Updates
The useThemeColor hook now exposes additional surface and soft tokens, and renames the overlay backdrop token for clarity.
New Capability:
import { useThemeColor } from "heroui-native";
const colors = useThemeColor([
"default-soft",
"default-soft-foreground",
"surface-foreground",
"backdrop",
]);Changes:
- Added
default-softanddefault-soft-foregroundtokens - Added surface foreground tokens (e.g.
surface-foreground) for explicit access to surface text colors - Renamed
overlay-backdroptobackdropfor consistency with the underlying CSS variable name
Apps using removed useThemeColor keys (on-surface-*) or the previous overlay-backdrop key should migrate to the updated token names. Component props and visual defaults are unchanged.
Related PR: #420
Dependencies
@gorhom/bottom-sheet Peer Range Updated
The peer dependency range for @gorhom/bottom-sheet has been bumped from ^5.2.8 to ^5.2.9. Apps that use HeroUI Native's BottomSheet component (or any of Menu / Popover / Select with presentation="bottom-sheet") should ensure they are on a compatible version:
npm i @gorhom/bottom-sheet@^5.2.9This is the only peer-dep change affecting consumers. The library's react (>=19.0.0) and react-native (>=0.81.0) peer ranges are unchanged.
Related PR: #421
Example App Upgraded to Expo 56 / React Native 0.85
The example app shipped in the repository has been upgraded to the latest Expo and React Native toolchain. This does not affect consumers of the library directly, but contributors running the example will benefit from the upgrades:
- Expo
56 - React Native
0.85.3 - React
19.2.3 - React Native Reanimated
4.3.1 react-native-worklets0.8.3- Uniwind
^1.6.3
Additional housekeeping included in this upgrade:
metro.config.jsrewritten to pin peer-dep resolution to the example'snode_modules, fixing Hermes "Maximum call stack size exceeded" crashes whenuniwindorreactresolved to two copies from the workspace root- Replaced deprecated
StyleSheet.absoluteFillObjectwithStyleSheet.absoluteFillin input-otp and showcases - Migrated
useFocusEffect/useHeaderHeightimports toexpo-router - Removed unused
example/src/components/safe-area-view.tsx,eas.json, and stalenewArchEnabled/edgeToEdgeEnabledflags - Example app slug/bundle renamed to
heroui-native-oss; AndroidWithStateTogglepadding adjusted
Related PR: #421
Documentation
iOS Native Modal Offset Guidance for Menu, Popover, and Select
The Menu, Popover, and Select documentation now includes a Native Modal (iOS) section that explains why overlay content can render shifted upward when a trigger lives inside a screen presented as a native modal (presentation: "modal" | "formSheet" | "pageSheet"), and how to compensate.
Improvements:
- Each component's docs now describe the Fabric /
FullWindowOverlaycoordinate mismatch: trigger coordinates are modal-relative while the overlay is window-anchored - Documents the recommended
offset={insets.top}workaround usinguseSafeAreaInsetsfromreact-native-safe-area-context - Links to the example app files (
popover-native-modal.tsx,select-native-modal.tsx) for full usage patterns
Usage example:
import { useSafeAreaInsets } from "react-native-safe-area-context";
import { Popover } from "heroui-native";
const insets = useSafeAreaInsets();
<Popover.Content presentation="popover" offset={insets.top + 20}>
{/* ... */}
</Popover.Content>;This is a documentation-only change — no API or runtime behavior was modified.
Related PR: #419
Bug Fixes
This release includes fixes for the following issues:
- Issue #405: Documented the workaround for
Menurendering misaligned when opened inside a React Navigation native modal. The new Native Modal (iOS) section in the Menu docs explains the Fabric /FullWindowOverlaycoordinate mismatch and shows how to compensate viaoffset={insets.top}withuseSafeAreaInsets. - Issue #418: Resolved Hermes crashes ("Maximum call stack size exceeded") and the invisible
BottomSheetcontent seen after upgrading the example app to Expo 56. The example'smetro.config.jsnow pins peer-dep resolution (react,react-native,uniwind, etc.) to the example's localnode_modules, preventing duplicate copies from being loaded from the workspace root.
Related PRs:
Deprecations
Text Typography Exports
The Text component and related exports are now deprecated in favor of Typography. Existing imports continue to work and will not produce runtime errors — only TypeScript / IDE deprecation hints are emitted. Plan to migrate before a future major release removes the deprecated aliases.
Deprecated → Recommended:
// Deprecated (still works)
import { Text, textClassNames, type TextProps } from "heroui-native";
<Text.Heading type="h1">Welcome</Text.Heading>;
// Recommended
import {
Typography,
typographyClassNames,
type TypographyProps,
} from "heroui-native";
<Typography.Heading type="h1">Welcome</Typography.Heading>;Related PR: #417
Updated Documentation
The following documentation pages have been updated to reflect the changes in this release:
- Typography - Component renamed from Text; full API, anatomy, and usage reference updated
- Menu - Added Native Modal (iOS) section with
offset={insets.top}workaround - Popover - Added Native Modal (iOS) section with
offset={insets.top}workaround - Select - Added Native Modal (iOS) section with
offset={insets.top}workaround - Quick Start - Updated
@gorhom/bottom-sheetoptional peer dependency to^5.2.9
Links
Contributors
Thanks to everyone who contributed to this release!