Major feature migration from dt-shopify-storefront into the design system: - Card system: per-card color modes (normal/emphasis/warning/success/other), progress bars, full-bleed card body (card-body-flush), image bevel clip-paths, and visible structural borders at bevel corners - Badge system: dt-card-badge with position-aware offsets for cards vs media frames - Media frames: dt-bevel-media with inner surface fill, image clipping, and "MISSING MEDIA" placeholder for empty containers - Interactive bevel buttons: dt-btn with hover/selected states and pulse animation - Menu items: dt-menu-item with active states and level indentation - Animations: scale-in, fade-in, slide-up, pulse, ping, spin keyframes - Feature legend: CSS grid for product feature icons with state colors - Scrollbar styling for DT brand - New @dangerousthings/react package wrapping web CSS components - New @dangerousthings/tailwind-preset package - New @dangerousthings/hex-background package - Desktop showcase rewritten in React with Tailwind CSS - Mobile showcase updated with new screens (animations, filters, advanced cards) - Tokens: added mode color tokens, RGB variants, and selected-state tokens Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
171 lines
4.1 KiB
Markdown
171 lines
4.1 KiB
Markdown
# @dangerousthings/react-native
|
|
|
|
React Native components for the Dangerous Things design system — 22 themed components built on React Native Paper with cyberpunk beveled aesthetics.
|
|
|
|
## Install
|
|
|
|
```bash
|
|
npm install @dangerousthings/react-native
|
|
```
|
|
|
|
### Peer Dependencies
|
|
|
|
```bash
|
|
npm install react-native-paper react-native-safe-area-context react-native-svg
|
|
```
|
|
|
|
Optional for custom fonts:
|
|
|
|
```bash
|
|
npx expo install expo-font
|
|
```
|
|
|
|
## Setup
|
|
|
|
Wrap your app with `DTThemeProvider`:
|
|
|
|
```tsx
|
|
import { DTThemeProvider } from "@dangerousthings/react-native";
|
|
|
|
export default function App() {
|
|
return (
|
|
<DTThemeProvider>
|
|
{/* your app */}
|
|
</DTThemeProvider>
|
|
);
|
|
}
|
|
```
|
|
|
|
Options:
|
|
|
|
```tsx
|
|
<DTThemeProvider
|
|
includeSafeArea={true} // wraps in SafeAreaProvider (default: true)
|
|
/>
|
|
```
|
|
|
|
## Components
|
|
|
|
### Basic
|
|
|
|
| Component | Description |
|
|
|-----------|-------------|
|
|
| `DTButton` | Beveled button with variant colors (normal, emphasis, warning, success, other) |
|
|
| `DTCard` | Beveled card with optional header and title |
|
|
| `DTChip` | Compact labeled element (MD3 chip style) |
|
|
| `DTLabel` | Top-right beveled label with status colors |
|
|
|
|
### Forms
|
|
|
|
| Component | Description |
|
|
|-----------|-------------|
|
|
| `DTTextInput` | Sharp-cornered input with focus glow |
|
|
| `DTCheckbox` | Beveled checkbox with opposing corner cuts |
|
|
| `DTSwitch` | Angular toggle switch |
|
|
| `DTRadioGroup` | Hexagonal radio buttons |
|
|
| `DTQuantityStepper` | Beveled +/- increment buttons |
|
|
| `DTSearchInput` | Search-styled text input |
|
|
|
|
### Layout & Display
|
|
|
|
| Component | Description |
|
|
|-----------|-------------|
|
|
| `DTProgressBar` | Angular progress bar with optional label |
|
|
| `DTMediaFrame` | Diagonal beveled frame for images |
|
|
| `DTAccordion` | Collapsible sections with accent border |
|
|
| `DTHexagon` | Decorative hexagon SVG shape |
|
|
| `DTBadgeOverlay` | Absolute-positioned badge wrapper (top-left, top-right, bottom-left, bottom-right) |
|
|
| `DTStaggerContainer` | Staggered scale-in entrance animation for child elements |
|
|
| `DTFeatureLegend` | Product feature grid with icons and rotated labels |
|
|
|
|
### Interactive
|
|
|
|
| Component | Description |
|
|
|-----------|-------------|
|
|
| `DTModal` | Modal dialog with beveled corners |
|
|
| `DTDrawer` | Side drawer with edge bevels |
|
|
| `DTGallery` | Image gallery |
|
|
| `DTMenu` | Dropdown menu with item variants |
|
|
| `DTMobileFilterOverlay` | Full-screen slide-up filter overlay with backdrop |
|
|
|
|
### Animation Hooks
|
|
|
|
| Hook | Description |
|
|
|------|-------------|
|
|
| `useScaleIn` | Scale 0→1 entrance animation |
|
|
| `usePulse` | Looping opacity pulse animation |
|
|
|
|
## Usage Examples
|
|
|
|
```tsx
|
|
import { DTButton, DTCard, DTTextInput } from "@dangerousthings/react-native";
|
|
|
|
// Button with variant
|
|
<DTButton variant="normal" onPress={handlePress}>
|
|
Scan NFC
|
|
</DTButton>
|
|
|
|
// Card with title
|
|
<DTCard title="Scan Results" mode="normal">
|
|
<Text>Chip detected</Text>
|
|
</DTCard>
|
|
|
|
// Card with selected state and progress bar
|
|
<DTCard title="PRODUCT" mode="emphasis" selected progress={0.6}>
|
|
<Text>Selected with 60% progress</Text>
|
|
</DTCard>
|
|
|
|
// Text input with error state
|
|
<DTTextInput
|
|
variant="normal"
|
|
label="Username"
|
|
error={true}
|
|
errorMessage="Required"
|
|
/>
|
|
```
|
|
|
|
## Theme Utilities
|
|
|
|
```tsx
|
|
import { useDTTheme, getColor, getVariantColor } from "@dangerousthings/react-native";
|
|
|
|
// Access the full theme in a component
|
|
const theme = useDTTheme();
|
|
theme.colors.primary; // "#00FFFF"
|
|
|
|
// Get a color with optional opacity
|
|
getColor("modeNormal", 0.5); // "rgba(0, 255, 255, 0.5)"
|
|
|
|
// Resolve a variant name to its color
|
|
getVariantColor("emphasis"); // "#FFFF00"
|
|
```
|
|
|
|
## Bevel Utilities
|
|
|
|
Build SVG paths for custom beveled shapes:
|
|
|
|
```tsx
|
|
import {
|
|
buildBeveledRectPath,
|
|
buildButtonBevelPath,
|
|
buildCardBevelPath,
|
|
} from "@dangerousthings/react-native";
|
|
|
|
// Custom bevel
|
|
const path = buildBeveledRectPath(200, 48, { bottomRight: 12 });
|
|
|
|
// Preset bevel paths
|
|
const buttonPath = buildButtonBevelPath(200, 48);
|
|
const cardPath = buildCardBevelPath(300, 200);
|
|
```
|
|
|
|
## Re-exported Paper Components
|
|
|
|
For convenience, these React Native Paper components are re-exported:
|
|
|
|
`Text`, `Surface`, `IconButton`, `ActivityIndicator`, `Divider`, `List`, `Portal`, `Modal`, `Snackbar`, `TextInput`
|
|
|
|
## License
|
|
|
|
[MIT](LICENSE)
|