@umituz/react-native-design-system 2.6.93 → 2.6.95
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/atoms/AtomicAvatar.README.md +284 -397
- package/src/atoms/AtomicBadge.README.md +123 -358
- package/src/atoms/AtomicCard.README.md +358 -247
- package/src/atoms/AtomicDatePicker.README.md +127 -332
- package/src/atoms/AtomicFab.README.md +194 -352
- package/src/atoms/AtomicIcon.README.md +241 -274
- package/src/atoms/AtomicProgress.README.md +100 -338
- package/src/atoms/AtomicSpinner.README.md +304 -337
- package/src/atoms/AtomicText.README.md +153 -389
- package/src/atoms/AtomicTextArea.README.md +267 -268
- package/src/atoms/EmptyState.README.md +247 -292
- package/src/atoms/GlassView/README.md +313 -444
- package/src/atoms/button/README.md +186 -297
- package/src/atoms/button/STRATEGY.md +252 -0
- package/src/atoms/chip/README.md +242 -290
- package/src/atoms/input/README.md +296 -290
- package/src/atoms/picker/README.md +278 -309
- package/src/atoms/skeleton/AtomicSkeleton.README.md +394 -252
- package/src/exports/theme.ts +0 -1
- package/src/molecules/BaseModal/README.md +356 -0
- package/src/molecules/BaseModal.README.md +324 -200
- package/src/molecules/ConfirmationModal.README.md +349 -302
- package/src/molecules/Divider/README.md +293 -376
- package/src/molecules/FormField.README.md +321 -534
- package/src/molecules/GlowingCard/GlowingCard.tsx +1 -1
- package/src/molecules/GlowingCard/README.md +230 -372
- package/src/molecules/IconContainer.tsx +1 -1
- package/src/molecules/List/README.md +281 -488
- package/src/molecules/ListItem.README.md +320 -315
- package/src/molecules/SearchBar/README.md +332 -430
- package/src/molecules/StepHeader/README.md +311 -411
- package/src/molecules/StepProgress/README.md +281 -448
- package/src/molecules/alerts/README.md +272 -355
- package/src/molecules/avatar/README.md +295 -356
- package/src/molecules/bottom-sheet/README.md +303 -340
- package/src/molecules/calendar/README.md +301 -265
- package/src/molecules/countdown/README.md +347 -456
- package/src/molecules/emoji/README.md +281 -514
- package/src/molecules/listitem/README.md +307 -399
- package/src/molecules/media-card/MediaCard.tsx +31 -34
- package/src/molecules/media-card/README.md +217 -319
- package/src/molecules/navigation/README.md +263 -284
- package/src/molecules/splash/README.md +76 -92
- package/src/molecules/swipe-actions/README.md +376 -588
package/src/atoms/chip/README.md
CHANGED
|
@@ -1,117 +1,141 @@
|
|
|
1
1
|
# AtomicChip
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Small, tag-like components for displaying categories, statuses, or selectable items in React Native applications.
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## Import & Usage
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
- 🎭 **İkon Desteği**: Leading ve trailing ikonlar
|
|
11
|
-
- 👆 **Clickble**: Tıklanabilir chip'ler
|
|
12
|
-
- ✅ **Selected**: Seçim durumu
|
|
13
|
-
- ♿ **Erişilebilir**: Tam erişilebilirlik desteği
|
|
7
|
+
```typescript
|
|
8
|
+
import { AtomicChip } from 'react-native-design-system/src/atoms/chip';
|
|
9
|
+
```
|
|
14
10
|
|
|
15
|
-
|
|
11
|
+
**Location:** `src/atoms/chip/AtomicChip.tsx`
|
|
12
|
+
|
|
13
|
+
## Basic Usage
|
|
16
14
|
|
|
17
15
|
```tsx
|
|
18
|
-
|
|
16
|
+
<AtomicChip>React Native</AtomicChip>
|
|
19
17
|
```
|
|
20
18
|
|
|
21
|
-
##
|
|
19
|
+
## Strategy
|
|
22
20
|
|
|
23
|
-
|
|
24
|
-
import React from 'react';
|
|
25
|
-
import { View } from 'react-native';
|
|
26
|
-
import { AtomicChip } from 'react-native-design-system';
|
|
27
|
-
|
|
28
|
-
export const BasicExample = () => {
|
|
29
|
-
return (
|
|
30
|
-
<View style={{ padding: 16, flexDirection: 'row', gap: 8 }}>
|
|
31
|
-
<AtomicChip>React Native</AtomicChip>
|
|
32
|
-
<AtomicChip>TypeScript</AtomicChip>
|
|
33
|
-
<AtomicChip>Material Design</AtomicChip>
|
|
34
|
-
</View>
|
|
35
|
-
);
|
|
36
|
-
};
|
|
37
|
-
```
|
|
21
|
+
**Purpose**: Provide visually consistent, interactive tags for filtering, categorization, and status display.
|
|
38
22
|
|
|
39
|
-
|
|
23
|
+
**When to Use**:
|
|
24
|
+
- Category labels (tags, skills, topics)
|
|
25
|
+
- Status indicators (active, pending, completed)
|
|
26
|
+
- Filter chips (selectable options)
|
|
27
|
+
- User attributes (roles, badges)
|
|
28
|
+
- Removable items (tags with delete action)
|
|
40
29
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
30
|
+
**When NOT to Use**:
|
|
31
|
+
- For primary navigation - use Tabs or Navigation components
|
|
32
|
+
- For complex selections - use Checkbox or Radio components
|
|
33
|
+
- For long text content - use Card or List items
|
|
34
|
+
- As standalone buttons - use Button component instead
|
|
45
35
|
|
|
46
|
-
|
|
47
|
-
<AtomicChip variant="outlined">Outlined</AtomicChip>
|
|
36
|
+
## Rules
|
|
48
37
|
|
|
49
|
-
|
|
50
|
-
<AtomicChip variant="ghost">Ghost</AtomicChip>
|
|
51
|
-
</View>
|
|
52
|
-
```
|
|
38
|
+
### Required
|
|
53
39
|
|
|
54
|
-
|
|
40
|
+
1. **ALWAYS** provide `children` content (text or elements)
|
|
41
|
+
2. **MUST** have appropriate color for semantic meaning
|
|
42
|
+
3. **NEVER** use chips for critical actions without confirmation
|
|
43
|
+
4. **ALWAYS** provide accessible label for screen readers
|
|
44
|
+
5. **MUST** have adequate touch target (min 44x44pt) when clickable
|
|
55
45
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
<AtomicChip color="surface">Surface</AtomicChip>
|
|
65
|
-
</View>
|
|
66
|
-
```
|
|
46
|
+
### Clickable Chips
|
|
47
|
+
|
|
48
|
+
1. **MUST** set `clickable` prop if onPress is provided
|
|
49
|
+
2. **ALWAYS** provide visual feedback for selected state
|
|
50
|
+
3. **SHOULD** use `selected` prop for toggle behavior
|
|
51
|
+
4. **MUST** have clear purpose for interaction
|
|
52
|
+
|
|
53
|
+
### Variant Selection
|
|
67
54
|
|
|
68
|
-
|
|
55
|
+
1. **Filled**: Primary categories, emphasized tags
|
|
56
|
+
2. **Outlined**: Secondary categories, list items
|
|
57
|
+
3. **Ghost**: Tertiary tags, background elements
|
|
58
|
+
|
|
59
|
+
### Color Usage
|
|
60
|
+
|
|
61
|
+
1. **Success**: Completed, verified, active states
|
|
62
|
+
2. **Error**: Failed, rejected, inactive states
|
|
63
|
+
3. **Warning**: Pending, attention needed
|
|
64
|
+
4. **Info**: Neutral information
|
|
65
|
+
|
|
66
|
+
## Forbidden
|
|
67
|
+
|
|
68
|
+
❌ **NEVER** do these:
|
|
69
69
|
|
|
70
70
|
```tsx
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
71
|
+
// ❌ Empty chips
|
|
72
|
+
<AtomicChip />
|
|
73
|
+
|
|
74
|
+
// ❌ Chips without content (children)
|
|
75
|
+
<AtomicChip variant="filled" />
|
|
76
|
+
|
|
77
|
+
// ❌ Long text content (breaks layout)
|
|
78
|
+
<AtomicChip>This is a very long text that will break the chip layout and make it look bad</AtomicChip>
|
|
79
|
+
|
|
80
|
+
// ❌ Clickable without clickable prop
|
|
81
|
+
<AtomicChip onPress={handlePress}>Click me</AtomicChip>
|
|
82
|
+
{/* ❌ Add clickable prop */}
|
|
74
83
|
|
|
75
|
-
|
|
76
|
-
|
|
84
|
+
// ❌ Wrong color semantics
|
|
85
|
+
<AtomicChip color="error">Success</AtomicChip>
|
|
86
|
+
{/* ❌ Use color="success" */}
|
|
77
87
|
|
|
78
|
-
|
|
79
|
-
|
|
88
|
+
// ❌ Too many chips in one row
|
|
89
|
+
<View style={{ flexDirection: 'row' }}>
|
|
90
|
+
<AtomicChip>1</AtomicChip>
|
|
91
|
+
<AtomicChip>2</AtomicChip>
|
|
92
|
+
{/* ... 20 more chips */} {/* ❌ Use wrap */}
|
|
80
93
|
</View>
|
|
94
|
+
|
|
95
|
+
// ❌ Hardcoded text (use i18n)
|
|
96
|
+
<AtomicChip>Active</AtomicChip>
|
|
97
|
+
{/* ❌ Use {t('status.active')} */}
|
|
81
98
|
```
|
|
82
99
|
|
|
83
|
-
##
|
|
100
|
+
## Best Practices
|
|
101
|
+
|
|
102
|
+
### Chip Sizing
|
|
103
|
+
|
|
104
|
+
✅ **DO**:
|
|
105
|
+
- Use `sm` for dense content and lists
|
|
106
|
+
- Use `md` (default) for normal usage
|
|
107
|
+
- Use `lg` for emphasis or important tags
|
|
84
108
|
|
|
109
|
+
❌ **DON'T**:
|
|
110
|
+
- Mix sizes inconsistently in same context
|
|
111
|
+
- Use `lg` for long lists (takes too much space)
|
|
112
|
+
|
|
113
|
+
### Color Selection
|
|
114
|
+
|
|
115
|
+
✅ **DO**:
|
|
85
116
|
```tsx
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
117
|
+
// Status indicators
|
|
118
|
+
<AtomicChip color="success">Active</AtomicChip>
|
|
119
|
+
<AtomicChip color="warning">Pending</AtomicChip>
|
|
120
|
+
<AtomicChip color="error">Inactive</AtomicChip>
|
|
121
|
+
|
|
122
|
+
// Categories
|
|
123
|
+
<AtomicChip color="primary">Technology</AtomicChip>
|
|
124
|
+
<AtomicChip color="secondary">Design</AtomicChip>
|
|
125
|
+
```
|
|
94
126
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
>
|
|
100
|
-
İptal
|
|
101
|
-
</AtomicChip>
|
|
127
|
+
❌ **DON'T**:
|
|
128
|
+
```tsx
|
|
129
|
+
// Don't use decorative colors without meaning
|
|
130
|
+
<AtomicChip color="error">Just for fun</AtomicChip>
|
|
102
131
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
leadingIcon="person-outline"
|
|
106
|
-
trailingIcon="chevron-down"
|
|
107
|
-
>
|
|
108
|
-
Kullanıcı
|
|
109
|
-
</AtomicChip>
|
|
110
|
-
</View>
|
|
132
|
+
// Don't mix colors randomly
|
|
133
|
+
<AtomicChip color="success">Error</AtomicChip>
|
|
111
134
|
```
|
|
112
135
|
|
|
113
|
-
|
|
136
|
+
### Interactive Chips
|
|
114
137
|
|
|
138
|
+
✅ **DO**:
|
|
115
139
|
```tsx
|
|
116
140
|
const [selected, setSelected] = useState(false);
|
|
117
141
|
|
|
@@ -120,257 +144,185 @@ const [selected, setSelected] = useState(false);
|
|
|
120
144
|
selected={selected}
|
|
121
145
|
onPress={() => setSelected(!selected)}
|
|
122
146
|
>
|
|
123
|
-
|
|
147
|
+
{t('filter.option')}
|
|
124
148
|
</AtomicChip>
|
|
125
149
|
```
|
|
126
150
|
|
|
127
|
-
|
|
128
|
-
|
|
151
|
+
❌ **DON'T**:
|
|
129
152
|
```tsx
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
backgroundColor="#6366f1"
|
|
133
|
-
textColor="#ffffff"
|
|
134
|
-
borderColor="#6366f1"
|
|
135
|
-
>
|
|
136
|
-
Custom Color
|
|
137
|
-
</AtomicChip>
|
|
138
|
-
```
|
|
153
|
+
// Don't forget clickable prop
|
|
154
|
+
<AtomicChip onPress={handlePress}>Click</AtomicChip>
|
|
139
155
|
|
|
140
|
-
|
|
156
|
+
// Don't use selected without clickable
|
|
157
|
+
<AtomicChip selected>Not clickable</AtomicChip>
|
|
158
|
+
```
|
|
141
159
|
|
|
142
|
-
|
|
160
|
+
## AI Coding Guidelines
|
|
143
161
|
|
|
144
|
-
|
|
145
|
-
<View style={{ flexDirection: 'row', gap: 8, flexWrap: 'wrap' }}>
|
|
146
|
-
<AtomicChip size="sm" variant="outlined">React Native</AtomicChip>
|
|
147
|
-
<AtomicChip size="sm" variant="outlined">TypeScript</AtomicChip>
|
|
148
|
-
<AtomicChip size="sm" variant="outlined">Node.js</AtomicChip>
|
|
149
|
-
<AtomicChip size="sm" variant="outlined">GraphQL</AtomicChip>
|
|
150
|
-
</View>
|
|
151
|
-
```
|
|
162
|
+
### For AI Agents
|
|
152
163
|
|
|
153
|
-
|
|
164
|
+
When generating AtomicChip components, follow these rules:
|
|
154
165
|
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
leadingIcon="checkmark-circle"
|
|
160
|
-
size="sm"
|
|
161
|
-
>
|
|
162
|
-
Aktif
|
|
163
|
-
</AtomicChip>
|
|
166
|
+
1. **Always import from correct path**:
|
|
167
|
+
```typescript
|
|
168
|
+
import { AtomicChip } from 'react-native-design-system/src/atoms/chip';
|
|
169
|
+
```
|
|
164
170
|
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
</AtomicChip>
|
|
171
|
+
2. **Always provide meaningful content**:
|
|
172
|
+
```tsx
|
|
173
|
+
<AtomicChip>
|
|
174
|
+
{t('category.name')}
|
|
175
|
+
</AtomicChip>
|
|
176
|
+
```
|
|
172
177
|
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
>
|
|
178
|
-
İptal
|
|
179
|
-
</AtomicChip>
|
|
180
|
-
</View>
|
|
181
|
-
```
|
|
178
|
+
3. **Always use appropriate variant**:
|
|
179
|
+
```tsx
|
|
180
|
+
// Primary category
|
|
181
|
+
<AtomicChip variant="filled">主要类别</AtomicChip>
|
|
182
182
|
|
|
183
|
-
|
|
183
|
+
// Secondary category
|
|
184
|
+
<AtomicChip variant="outlined">次要类别</AtomicChip>
|
|
184
185
|
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
const filters = ['Tümü', 'Aktif', 'Pasif', 'Beklemede'];
|
|
189
|
-
|
|
190
|
-
<View style={{ flexDirection: 'row', gap: 8 }}>
|
|
191
|
-
{filters.map((filter) => (
|
|
192
|
-
<AtomicChip
|
|
193
|
-
key={filter}
|
|
194
|
-
clickable
|
|
195
|
-
selected={selectedFilters.includes(filter)}
|
|
196
|
-
onPress={() => {
|
|
197
|
-
if (selectedFilters.includes(filter)) {
|
|
198
|
-
setSelectedFilters(selectedFilters.filter(f => f !== filter));
|
|
199
|
-
} else {
|
|
200
|
-
setSelectedFilters([...selectedFilters, filter]);
|
|
201
|
-
}
|
|
202
|
-
}}
|
|
203
|
-
color="primary"
|
|
204
|
-
>
|
|
205
|
-
{filter}
|
|
206
|
-
</AtomicChip>
|
|
207
|
-
))}
|
|
208
|
-
</View>
|
|
209
|
-
```
|
|
186
|
+
// Background tag
|
|
187
|
+
<AtomicChip variant="ghost">背景标签</AtomicChip>
|
|
188
|
+
```
|
|
210
189
|
|
|
211
|
-
|
|
190
|
+
4. **Always use semantic colors**:
|
|
191
|
+
```tsx
|
|
192
|
+
// Success state
|
|
193
|
+
<AtomicChip color="success">成功</AtomicChip>
|
|
212
194
|
|
|
213
|
-
|
|
214
|
-
<
|
|
215
|
-
<AtomicChip
|
|
216
|
-
leadingIcon="code-slash"
|
|
217
|
-
color="info"
|
|
218
|
-
size="sm"
|
|
219
|
-
>
|
|
220
|
-
React
|
|
221
|
-
</AtomicChip>
|
|
195
|
+
// Error state
|
|
196
|
+
<AtomicChip color="error">失败</AtomicChip>
|
|
222
197
|
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
size="sm"
|
|
227
|
-
>
|
|
228
|
-
JavaScript
|
|
229
|
-
</AtomicChip>
|
|
198
|
+
// Warning state
|
|
199
|
+
<AtomicChip color="warning">警告</AtomicChip>
|
|
200
|
+
```
|
|
230
201
|
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
202
|
+
5. **Always enable clickable for interactive chips**:
|
|
203
|
+
```tsx
|
|
204
|
+
<AtomicChip
|
|
205
|
+
clickable
|
|
206
|
+
selected={isSelected}
|
|
207
|
+
onPress={handleToggle}
|
|
208
|
+
>
|
|
209
|
+
可选择的标签
|
|
210
|
+
</AtomicChip>
|
|
211
|
+
```
|
|
240
212
|
|
|
241
|
-
###
|
|
213
|
+
### Common Patterns
|
|
242
214
|
|
|
215
|
+
#### Category Tags
|
|
243
216
|
```tsx
|
|
244
|
-
const [tags, setTags] = useState(['React', 'TypeScript', 'Node.js']);
|
|
245
|
-
|
|
246
217
|
<View style={{ flexDirection: 'row', gap: 8, flexWrap: 'wrap' }}>
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
variant="outlined"
|
|
254
|
-
>
|
|
255
|
-
{tag}
|
|
256
|
-
</AtomicChip>
|
|
257
|
-
))}
|
|
218
|
+
<AtomicChip size="sm" variant="outlined">
|
|
219
|
+
{t('category.react')}
|
|
220
|
+
</AtomicChip>
|
|
221
|
+
<AtomicChip size="sm" variant="outlined">
|
|
222
|
+
{t('category.typescript')}
|
|
223
|
+
</AtomicChip>
|
|
258
224
|
</View>
|
|
259
225
|
```
|
|
260
226
|
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
| `color` | `ChipColor` | `'primary'` | Semantic renk |
|
|
271
|
-
| `backgroundColor` | `string` | - | Custom arka plan rengi |
|
|
272
|
-
| `textColor` | `string` | - | Custom metin rengi |
|
|
273
|
-
| `borderColor` | `string` | - | Custom çerçeve rengi |
|
|
274
|
-
| `leadingIcon` | `string` | - | Sol ikon ismi |
|
|
275
|
-
| `trailingIcon` | `string` | - | Sağ ikon ismi |
|
|
276
|
-
| `clickable` | `boolean` | `false` | Tıklanabilir |
|
|
277
|
-
| `onPress` | `() => void` | - | Tıklama olayı |
|
|
278
|
-
| `selected` | `boolean` | `false` | Seçili durumu |
|
|
279
|
-
| `disabled` | `boolean` | `false` | Devre dışı |
|
|
280
|
-
| `style` | `StyleProp<ViewStyle>` | - | Özel stil |
|
|
281
|
-
| `activeOpacity` | `number` | `0.7` | Tıklama opaklığı |
|
|
282
|
-
| `testID` | `string` | - | Test ID'si |
|
|
283
|
-
|
|
284
|
-
### ChipVariant
|
|
285
|
-
|
|
286
|
-
```typescript
|
|
287
|
-
type ChipVariant =
|
|
288
|
-
| 'filled' // Dolgu (varsayılan)
|
|
289
|
-
| 'outlined' // Çerçeveli
|
|
290
|
-
| 'ghost'; // Hayalet
|
|
291
|
-
```
|
|
292
|
-
|
|
293
|
-
### ChipSize
|
|
294
|
-
|
|
295
|
-
```typescript
|
|
296
|
-
type ChipSize = 'sm' | 'md' | 'lg';
|
|
227
|
+
#### Status Indicators
|
|
228
|
+
```tsx
|
|
229
|
+
<AtomicChip
|
|
230
|
+
size="sm"
|
|
231
|
+
color={status === 'active' ? 'success' : 'error'}
|
|
232
|
+
leadingIcon={status === 'active' ? 'checkmark-circle' : 'close-circle'}
|
|
233
|
+
>
|
|
234
|
+
{t(`status.${status}`)}
|
|
235
|
+
</AtomicChip>
|
|
297
236
|
```
|
|
298
237
|
|
|
299
|
-
|
|
238
|
+
#### Filter Chips
|
|
239
|
+
```tsx
|
|
240
|
+
const [selectedFilters, setSelectedFilters] = useState<string[]>();
|
|
300
241
|
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
242
|
+
{filters.map((filter) => (
|
|
243
|
+
<AtomicChip
|
|
244
|
+
key={filter.value}
|
|
245
|
+
clickable
|
|
246
|
+
selected={selectedFilters.includes(filter.value)}
|
|
247
|
+
onPress={() => toggleFilter(filter.value)}
|
|
248
|
+
variant="outlined"
|
|
249
|
+
>
|
|
250
|
+
{filter.label}
|
|
251
|
+
</AtomicChip>
|
|
252
|
+
))}
|
|
310
253
|
```
|
|
311
254
|
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
### 1. Variant Seçimi
|
|
315
|
-
|
|
255
|
+
#### Removable Tags
|
|
316
256
|
```tsx
|
|
317
|
-
|
|
318
|
-
<AtomicChip
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
257
|
+
{tags.map((tag, index) => (
|
|
258
|
+
<AtomicChip
|
|
259
|
+
key={index}
|
|
260
|
+
trailingIcon="close"
|
|
261
|
+
clickable
|
|
262
|
+
onPress={() => removeTag(index)}
|
|
263
|
+
variant="outlined"
|
|
264
|
+
>
|
|
265
|
+
{tag}
|
|
266
|
+
</AtomicChip>
|
|
267
|
+
))}
|
|
325
268
|
```
|
|
326
269
|
|
|
327
|
-
|
|
328
|
-
|
|
270
|
+
#### Skill Tags
|
|
329
271
|
```tsx
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
<AtomicChip color="warning">Uyarı</AtomicChip>
|
|
272
|
+
<AtomicChip
|
|
273
|
+
leadingIcon="code-slash"
|
|
274
|
+
color="info"
|
|
275
|
+
size="sm"
|
|
276
|
+
>
|
|
277
|
+
React
|
|
278
|
+
</AtomicChip>
|
|
338
279
|
```
|
|
339
280
|
|
|
340
|
-
|
|
281
|
+
## Props Reference
|
|
341
282
|
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
283
|
+
| Prop | Type | Required | Default | Description |
|
|
284
|
+
|------|------|----------|---------|-------------|
|
|
285
|
+
| `children` | `ReactNode` | Yes | - | Chip content |
|
|
286
|
+
| `variant` | `'filled' \| 'outlined' \| 'ghost'` | No | `'filled'` | Visual style |
|
|
287
|
+
| `size` | `'sm' \| 'md' \| 'lg'` | No | `'md'` | Chip size |
|
|
288
|
+
| `color` | `'primary' \| 'secondary' \| 'success' \| 'warning' \| 'error' \| 'info' \| 'surface'` | No | `'primary'` | Semantic color |
|
|
289
|
+
| `leadingIcon` | `string` | No | - | Leading icon name |
|
|
290
|
+
| `trailingIcon` | `string` | No | - | Trailing icon name |
|
|
291
|
+
| `clickable` | `boolean` | No | `false` | Enable click interaction |
|
|
292
|
+
| `onPress` | `() => void` | No | - | Press handler |
|
|
293
|
+
| `selected` | `boolean` | No | `false` | Selected state |
|
|
294
|
+
| `disabled` | `boolean` | No | `false` | Disabled state |
|
|
295
|
+
| `backgroundColor` | `string` | No | - | Custom background color |
|
|
296
|
+
| `textColor` | `string` | No | - | Custom text color |
|
|
297
|
+
| `borderColor` | `string` | No | - | Custom border color |
|
|
348
298
|
|
|
349
|
-
|
|
350
|
-
<AtomicChip size="lg">Large</AtomicChip>
|
|
351
|
-
```
|
|
299
|
+
## Accessibility
|
|
352
300
|
|
|
353
|
-
|
|
301
|
+
- ✅ Screen reader announces chip content
|
|
302
|
+
- ✅ Selected state announced for clickable chips
|
|
303
|
+
- ✅ Touch feedback for interactions
|
|
304
|
+
- ✅ Minimum touch target: 44x44pt (when clickable)
|
|
305
|
+
- ✅ Test ID support for testing
|
|
354
306
|
|
|
355
|
-
|
|
307
|
+
## Performance Tips
|
|
356
308
|
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
309
|
+
1. **Memo chips**: Component is already wrapped in `React.memo`
|
|
310
|
+
2. **Stable callbacks**: Use `useCallback` for onPress handlers
|
|
311
|
+
3. **Key prop**: Always provide key when rendering lists
|
|
312
|
+
4. **Limit count**: Avoid rendering 50+ chips at once
|
|
361
313
|
|
|
362
|
-
##
|
|
314
|
+
## Related Components
|
|
363
315
|
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
316
|
+
- [`AtomicPicker`](./picker/README.md) - Multi-select picker
|
|
317
|
+
- [`AtomicButton`](./button/README.md) - Button component
|
|
318
|
+
- [`FormField`](../../molecules/FormField/README.md) - Form field wrapper
|
|
367
319
|
|
|
368
|
-
##
|
|
320
|
+
## Version History
|
|
369
321
|
|
|
370
|
-
-
|
|
371
|
-
-
|
|
372
|
-
-
|
|
322
|
+
- **2.6.0**: Added clickable and selected states
|
|
323
|
+
- **2.5.0**: Added custom colors support
|
|
324
|
+
- **2.0.0**: Initial release with 3 variants
|
|
373
325
|
|
|
374
|
-
##
|
|
326
|
+
## License
|
|
375
327
|
|
|
376
328
|
MIT
|