ink-component-patterns
/ink-component-patterns
Podaje wzorce komponentów Ink do budowy terminalowych interfejsów w aplikacjach CLI opartych na React.
- Repozytorium
- han ↗
- Licencja
- Apache-2.0
- Ostatnia zmiana repozytorium
- 08.09.2026
Ocena i bezpieczeństwo
- Pliki w paczce
- 1
- Skrypty
- 0
- Komentarze HTML
- 0
- Adresy URL w SKILL.md
- 0
Brak sygnałów. Repozytorium zmienione 08.09.2026, bez odwołań do wycofanych modeli i API.
Apache-2.0, otwarta: można używać i zmieniać, z zachowaniem licencji i informacji o zmianach.
Co robi i kiedy
Podaje wzorce komponentów Ink do budowy terminalowych interfejsów w aplikacjach CLI opartych na React.
Oryginalny opis (EN)
Use when building terminal UIs with Ink component patterns for React-based CLI applications.
Jak działa
- Core Principles
- Component Structure
- Common Patterns
- Best Practices
- Anti-Patterns to Avoid
Podgląd SKILL.md
---
name: ink-component-patterns
user-invocable: false
description: Use when building terminal UIs with Ink component patterns for React-based CLI applications.
allowed-tools: []
---
# Ink Component Patterns
You are an expert in building terminal UIs with Ink, React for the terminal.
## Core Principles
- Use functional components with TypeScript for type safety
- Leverage Ink's built-in components (Box, Text, Newline, Spacer)
- Keep components focused and composable
- Use proper prop types and interfaces
- Handle terminal resizing gracefully
## Component Structure
### Basic Component
```tsx
import { Box, Text } from 'ink';
import React from 'react';
interface MyComponentProps {
title: string;
items: string[];
}
export const MyComponent: React.FC<MyComponentProps> = ({ title, items }) => {
return (
<Box flexDirection="column">
<Text bold color="cyan">
{title}
</Text>
{items.map((item, index) => (
<Box key={index} marginLeft={2}>
<Text>• {item}</Text>
</Box>
))}
</Box>
);
};
```
### Layout Patterns
#### Vertical Stack
```tsx
<Box flexDirection="column">
<Text>First item</Text>
<Text>Second item</Text>
</Box>
```
#### Horizontal Row
```tsx
<Box>
<Text>Left</Text>
<Spacer />
<Text>Right</Text>
</Box>
```
#### Centered Content
```tsx
<Box justifyContent="center" alignItems="center" height={10}>
<Text>Centered content</Text>
</Box>
```
#### Padded Container
```tsx
<Box padding={1} borderStyle="round" borderColor="cyan">
<Text>Content with border and padding</Text>
</Box>
```
## Common Patterns
### List with Icons
```tsx
interface ListItem {
icon: string;
label: string;
value: string;
}
const List: React.FC<{ items: ListItem[] }> = ({ items }) => (
<Box flexDirection="column">
{items.map((item, i) => (
<Box key={i}>
<Text color="yellow">{item.icon} </Text>
<Text bold>{item.label}: </Text>
<Text>{item.value}</Text>
</Box>
))}
</Box>
);
```
### Status Messages
```tsx
const StatusMessage: React.FC<{ type: 'success' | 'error' | 'warning'; message: string }> = ({
type,
message,
}) => {
const config = {
success: { icon: '✅', color: 'green' },
error: { icon: '❌', color: 'red' },
warning: { icon: '⚠️', color: 'yellow' },
};
const { icon, color } = config[type];
return (
<Box>
<Text color={color}>
{icon} {message}
</Text>
</Box>
);
};
```
### Progress Indicator
```tsx
const ProgressIndicator: React.FC<{ current: number; total: number; label: string }> = ({
current,
total,
label,
}) => (
<Box>
<Text color="blue">
{label}: {current}/{total}
</Text>
</Box>
);
```
### Collapsible Section
```tsx
const CollapsibleSection: React.FC<{ title: string; isOpen: boolean; children: React.ReactNode }> = ({
title,
isOpen,
children,
}) => (
<Box flexDirection="column">
<Text bold>
{isOpen ? '▼' : '▶'} {title}
</Text>
{isOpen && <Box marginLeft={2}>{children}</Box>}
</Box>
);
```
## Best Practices
1. **Type Safety**: Always define prop interfaces
2. **Performance**: Use React.memo for expensive renders
3. **Accessibility**: Use semantic structure and clear labels
4. **Error Boundaries**: Wrap components in error boundaries
5. **Testing**: Test components with ink-testing-library
## Anti-Patterns to Avoid
- Don't use DOM-specific APIs (document, window)
- Don't use CSS classes or inline styles (use Ink props)
- Don't mutate terminal state directly
- Don't forget to handle edge cases (empty arrays, null values)
- Don't create deeply nested component trees (keep it flat)
Wersje
W bazie nie ma innych skilli o nazwie ink-component-patterns.
Migawka bazy z 13.11.2026 · wersja paczki 9f2513e2d7f9 (skrót SHA-256 całej paczki)
Pobrania w ostatnich 30 dniach: 0 · ranking
Zgłoś problem z tym skillem: szkodliwa treść, błędny opis albo prośba autora o usunięcie.
Podobne skille
- 100ink-hooks-state
Pomaga zarządzać stanem i efektami ubocznymi w aplikacjach Ink przy użyciu hooków React dla interfejsów terminalowych. - 100ink
Renderuje specyfikacje JSON jako interaktywne interfejsy terminalowe przez Ink i @json-render/ink, w tym katalogi komponentów i specyfikacje generowane przez AI. - 100ink
Renderuje specyfikacje JSON jako interaktywne interfejsy terminalowe za pomocą Ink dla json-render, w tym katalogi komponentów i specyfikacje generowane przez AI. - 100ink-layout-styling
Pomaga tworzyć układy terminalowe w Ink z pozycjonowaniem i stylami opartymi na Flexbox w aplikacjach CLI. - 100terminal-ui
Podaje wytyczne wydajności i UX dla interfejsów terminalowych (TUI) w TypeScript z Ink i Clack: komponenty, prompty CLI, renderowanie i obsługa klawiatury. - 100ink-google
Renderuje specyfikacje JSON, także generowane przez AI, jako interaktywne interfejsy terminalowe ze standardowymi komponentami, wiązaniem danych, regułami widoczności, akcjami i dynamicznymi właściwościami.