@umituz/react-native-design-system 2.6.94 → 2.6.96
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/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/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/navigation/components/NavigationHeader.tsx +77 -0
- package/src/molecules/navigation/index.ts +1 -0
- package/src/molecules/splash/README.md +76 -80
- package/src/molecules/swipe-actions/README.md +376 -588
|
@@ -1,487 +1,387 @@
|
|
|
1
1
|
# StepHeader
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
A header component for step-by-step workflows (onboarding, registration, wizard) with step indicator, title, and subtitle.
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## Import & Usage
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
- 🎯 **Hizalama**: Sol, orta, sağ hizalama seçenekleri
|
|
10
|
-
- 🎨 **Özelleştirilebilir**: Font boyutu, boşluk ayarları
|
|
11
|
-
- 🎭 **Tema Bilinci**: Design token uyumlu
|
|
12
|
-
- ♿ **Erişilebilir**: Screen reader desteği
|
|
13
|
-
|
|
14
|
-
## Kurulum
|
|
15
|
-
|
|
16
|
-
```tsx
|
|
17
|
-
import { StepHeader } from 'react-native-design-system';
|
|
7
|
+
```typescript
|
|
8
|
+
import { StepHeader } from 'react-native-design-system/src/molecules/StepHeader';
|
|
18
9
|
```
|
|
19
10
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
```tsx
|
|
23
|
-
import React from 'react';
|
|
24
|
-
import { View } from 'react-native';
|
|
25
|
-
import { StepHeader } from 'react-native-design-system';
|
|
26
|
-
|
|
27
|
-
export const BasicExample = () => {
|
|
28
|
-
return (
|
|
29
|
-
<View>
|
|
30
|
-
<StepHeader
|
|
31
|
-
title="Hoş Geldiniz"
|
|
32
|
-
subtitle="Hesabınızı oluşturmak için birkaç adım"
|
|
33
|
-
/>
|
|
34
|
-
</View>
|
|
35
|
-
);
|
|
36
|
-
};
|
|
37
|
-
```
|
|
11
|
+
**Location:** `src/molecules/StepHeader/StepHeader.tsx`
|
|
38
12
|
|
|
39
|
-
##
|
|
13
|
+
## Basic Usage
|
|
40
14
|
|
|
41
15
|
```tsx
|
|
42
16
|
<StepHeader
|
|
43
|
-
title="
|
|
44
|
-
subtitle="
|
|
17
|
+
title="Welcome"
|
|
18
|
+
subtitle="A few steps to create your account"
|
|
45
19
|
config={{
|
|
46
20
|
showStepIndicator: true,
|
|
47
|
-
currentStep:
|
|
21
|
+
currentStep: 1,
|
|
48
22
|
totalSteps: 4,
|
|
49
23
|
}}
|
|
50
24
|
/>
|
|
51
25
|
```
|
|
52
26
|
|
|
53
|
-
##
|
|
27
|
+
## Strategy
|
|
54
28
|
|
|
55
|
-
|
|
56
|
-
<View>
|
|
57
|
-
{/* 1. Adım */}
|
|
58
|
-
<StepHeader
|
|
59
|
-
title="Adım 1"
|
|
60
|
-
config={{
|
|
61
|
-
showStepIndicator: true,
|
|
62
|
-
currentStep: 1,
|
|
63
|
-
totalSteps: 3,
|
|
64
|
-
}}
|
|
65
|
-
/>
|
|
66
|
-
|
|
67
|
-
{/* 2. Adım */}
|
|
68
|
-
<StepHeader
|
|
69
|
-
title="Adım 2"
|
|
70
|
-
config={{
|
|
71
|
-
showStepIndicator: true,
|
|
72
|
-
currentStep: 2,
|
|
73
|
-
totalSteps: 3,
|
|
74
|
-
}}
|
|
75
|
-
/>
|
|
76
|
-
|
|
77
|
-
{/* 3. Adım */}
|
|
78
|
-
<StepHeader
|
|
79
|
-
title="Adım 3"
|
|
80
|
-
config={{
|
|
81
|
-
showStepIndicator: true,
|
|
82
|
-
currentStep: 3,
|
|
83
|
-
totalSteps: 3,
|
|
84
|
-
}}
|
|
85
|
-
/>
|
|
86
|
-
</View>
|
|
87
|
-
```
|
|
29
|
+
**Purpose**: Provide clear visual hierarchy and progress indication for multi-step workflows.
|
|
88
30
|
|
|
89
|
-
|
|
31
|
+
**When to Use**:
|
|
32
|
+
- Onboarding flows (3-5 steps)
|
|
33
|
+
- Registration forms (multi-step)
|
|
34
|
+
- Checkout wizards
|
|
35
|
+
- Setup assistants
|
|
36
|
+
- Questionnaires/surveys
|
|
37
|
+
- Profile completion flows
|
|
90
38
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
{/* Sağ hizalı */}
|
|
112
|
-
<StepHeader
|
|
113
|
-
title="Sağ Hizalı"
|
|
114
|
-
subtitle="Sağa hizalı başlık"
|
|
115
|
-
config={{
|
|
116
|
-
titleAlignment: 'right',
|
|
117
|
-
}}
|
|
118
|
-
/>
|
|
119
|
-
</View>
|
|
120
|
-
```
|
|
39
|
+
**When NOT to Use**:
|
|
40
|
+
- For single-step forms (use simple headers)
|
|
41
|
+
- For long workflows (>7 steps, break into sections)
|
|
42
|
+
- For non-sequential tasks
|
|
43
|
+
- For simple pages (use PageHeader instead)
|
|
44
|
+
|
|
45
|
+
## Rules
|
|
46
|
+
|
|
47
|
+
### Required
|
|
48
|
+
|
|
49
|
+
1. **MUST** provide a `title` prop
|
|
50
|
+
2. **SHOULD** provide `subtitle` for context
|
|
51
|
+
3. **MUST** keep title concise (1-2 lines max)
|
|
52
|
+
4. **ALWAYS** show step indicator for multi-step workflows
|
|
53
|
+
5. **SHOULD** use appropriate alignment (left for forms, center for onboarding)
|
|
54
|
+
6. **MUST** have currentStep and totalSteps when showing indicator
|
|
55
|
+
7. **NEVER** use too many steps (>7 is too many)
|
|
56
|
+
|
|
57
|
+
### Step Indicator
|
|
121
58
|
|
|
122
|
-
|
|
59
|
+
1. **Show when**: 3+ steps in workflow
|
|
60
|
+
2. **Position**: Above title, centered or aligned
|
|
61
|
+
3. **Format**: Dot system (filled for completed, outlined for current)
|
|
62
|
+
4. **Visibility**: Always visible, don't hide on last step
|
|
63
|
+
|
|
64
|
+
### Content Guidelines
|
|
65
|
+
|
|
66
|
+
1. **Title**: Clear, action-oriented (e.g., "Create Account" not "Step 1")
|
|
67
|
+
2. **Subtitle**: Additional context, max 1 line
|
|
68
|
+
3. **Number of steps**: Ideal 3-5, max 7
|
|
69
|
+
4. **Alignment**: Left for forms, center for onboarding
|
|
70
|
+
|
|
71
|
+
### Spacing & Layout
|
|
72
|
+
|
|
73
|
+
1. **Margin bottom**: 32px default
|
|
74
|
+
2. **Padding horizontal**: 24px default
|
|
75
|
+
3. **Font size**: Title 28px, subtitle 16px default
|
|
76
|
+
4. **Responsive**: Adjust sizing for different screens
|
|
77
|
+
|
|
78
|
+
## Forbidden
|
|
79
|
+
|
|
80
|
+
❌ **NEVER** do these:
|
|
123
81
|
|
|
124
82
|
```tsx
|
|
83
|
+
// ❌ No title
|
|
84
|
+
<StepHeader
|
|
85
|
+
// Missing title
|
|
86
|
+
subtitle="This has no title"
|
|
87
|
+
/>
|
|
88
|
+
|
|
89
|
+
// ❌ Too many steps
|
|
125
90
|
<StepHeader
|
|
126
|
-
title="
|
|
127
|
-
subtitle="Alt başlık"
|
|
91
|
+
title="Step 1"
|
|
128
92
|
config={{
|
|
129
|
-
|
|
130
|
-
|
|
93
|
+
showStepIndicator: true,
|
|
94
|
+
currentStep: 1,
|
|
95
|
+
totalSteps: 15, // ❌ Too many steps
|
|
131
96
|
}}
|
|
132
97
|
/>
|
|
133
|
-
```
|
|
134
98
|
|
|
135
|
-
|
|
99
|
+
// ❌ Title too long
|
|
100
|
+
<StepHeader
|
|
101
|
+
title="Please enter your personal profile information including your name email address phone number and physical address" // ❌ Too long
|
|
102
|
+
subtitle="Required information"
|
|
103
|
+
/>
|
|
136
104
|
|
|
137
|
-
|
|
105
|
+
// ❌ Step indicator without totalSteps
|
|
138
106
|
<StepHeader
|
|
139
|
-
title="
|
|
140
|
-
subtitle="Özel padding ve margin"
|
|
107
|
+
title="Step 1"
|
|
141
108
|
config={{
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
109
|
+
showStepIndicator: true,
|
|
110
|
+
currentStep: 1,
|
|
111
|
+
// Missing totalSteps
|
|
112
|
+
}}
|
|
113
|
+
/>
|
|
114
|
+
|
|
115
|
+
// ❌ Wrong alignment for RTL
|
|
116
|
+
<StepHeader
|
|
117
|
+
title="مرحبا" // Arabic text
|
|
118
|
+
config={{
|
|
119
|
+
titleAlignment: 'left', // ❌ Should be right for RTL
|
|
120
|
+
}}
|
|
121
|
+
/>
|
|
122
|
+
|
|
123
|
+
// ❌ Generic titles
|
|
124
|
+
<StepHeader
|
|
125
|
+
title="Step 1" // ❌ Not descriptive
|
|
126
|
+
config={{
|
|
127
|
+
showStepIndicator: true,
|
|
128
|
+
currentStep: 1,
|
|
129
|
+
totalSteps: 3,
|
|
146
130
|
}}
|
|
147
131
|
/>
|
|
148
132
|
```
|
|
149
133
|
|
|
150
|
-
##
|
|
134
|
+
## Best Practices
|
|
151
135
|
|
|
152
136
|
### Onboarding Flow
|
|
153
137
|
|
|
138
|
+
✅ **DO**:
|
|
154
139
|
```tsx
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
},
|
|
166
|
-
{
|
|
167
|
-
title: 'İlgi Alanları',
|
|
168
|
-
subtitle: 'İlgi alanlarınızı seçin',
|
|
169
|
-
},
|
|
170
|
-
{
|
|
171
|
-
title: 'Hazır! 🎉',
|
|
172
|
-
subtitle: 'Uygulamayı kullanmaya başlayın',
|
|
173
|
-
},
|
|
174
|
-
];
|
|
175
|
-
|
|
176
|
-
const currentStepData = steps[currentStep - 1];
|
|
177
|
-
|
|
178
|
-
return (
|
|
179
|
-
<ScreenLayout>
|
|
180
|
-
<StepHeader
|
|
181
|
-
title={currentStepData.title}
|
|
182
|
-
subtitle={currentStepData.subtitle}
|
|
183
|
-
config={{
|
|
184
|
-
showStepIndicator: true,
|
|
185
|
-
currentStep,
|
|
186
|
-
totalSteps: steps.length,
|
|
187
|
-
titleAlignment: 'center',
|
|
188
|
-
}}
|
|
189
|
-
/>
|
|
190
|
-
|
|
191
|
-
{/* Step content */}
|
|
192
|
-
|
|
193
|
-
<View style={{ flexDirection: 'row', justifyContent: 'space-between' }}>
|
|
194
|
-
<Button
|
|
195
|
-
title="Geri"
|
|
196
|
-
disabled={currentStep === 1}
|
|
197
|
-
onPress={() => setCurrentStep(currentStep - 1)}
|
|
198
|
-
/>
|
|
199
|
-
<Button
|
|
200
|
-
title={currentStep === steps.length ? 'Bitir' : 'İleri'}
|
|
201
|
-
onPress={() => {
|
|
202
|
-
if (currentStep < steps.length) {
|
|
203
|
-
setCurrentStep(currentStep + 1);
|
|
204
|
-
} else {
|
|
205
|
-
// Finish onboarding
|
|
206
|
-
}
|
|
207
|
-
}}
|
|
208
|
-
/>
|
|
209
|
-
</View>
|
|
210
|
-
</ScreenLayout>
|
|
211
|
-
);
|
|
212
|
-
};
|
|
140
|
+
<StepHeader
|
|
141
|
+
title="Welcome 👋"
|
|
142
|
+
subtitle="Let's get you set up"
|
|
143
|
+
config={{
|
|
144
|
+
showStepIndicator: true,
|
|
145
|
+
currentStep: 1,
|
|
146
|
+
totalSteps: 4,
|
|
147
|
+
titleAlignment: 'center',
|
|
148
|
+
}}
|
|
149
|
+
/>
|
|
213
150
|
```
|
|
214
151
|
|
|
215
|
-
|
|
216
|
-
|
|
152
|
+
❌ **DON'T**:
|
|
217
153
|
```tsx
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
subtitle="E-posta adresiniz ve şifreniz ile başlayın"
|
|
228
|
-
config={{
|
|
229
|
-
showStepIndicator: true,
|
|
230
|
-
currentStep: 1,
|
|
231
|
-
totalSteps: 3,
|
|
232
|
-
}}
|
|
233
|
-
/>
|
|
234
|
-
{/* Email & password fields */}
|
|
235
|
-
</>
|
|
236
|
-
)}
|
|
237
|
-
|
|
238
|
-
{step === 2 && (
|
|
239
|
-
<>
|
|
240
|
-
<StepHeader
|
|
241
|
-
title="Profil Bilgileri"
|
|
242
|
-
subtitle="Adınızı ve profil fotoğrafınızı ekleyin"
|
|
243
|
-
config={{
|
|
244
|
-
showStepIndicator: true,
|
|
245
|
-
currentStep: 2,
|
|
246
|
-
totalSteps: 3,
|
|
247
|
-
}}
|
|
248
|
-
/>
|
|
249
|
-
{/* Profile fields */}
|
|
250
|
-
</>
|
|
251
|
-
)}
|
|
252
|
-
|
|
253
|
-
{step === 3 && (
|
|
254
|
-
<>
|
|
255
|
-
<StepHeader
|
|
256
|
-
title="Onayla"
|
|
257
|
-
subtitle="Bilgilerinizi kontrol edin"
|
|
258
|
-
config={{
|
|
259
|
-
showStepIndicator: true,
|
|
260
|
-
currentStep: 3,
|
|
261
|
-
totalSteps: 3,
|
|
262
|
-
}}
|
|
263
|
-
/>
|
|
264
|
-
{/* Confirmation */}
|
|
265
|
-
</>
|
|
266
|
-
)}
|
|
267
|
-
</ScreenLayout>
|
|
268
|
-
);
|
|
269
|
-
};
|
|
154
|
+
// ❌ Generic step title
|
|
155
|
+
<StepHeader
|
|
156
|
+
title="Step 1"
|
|
157
|
+
config={{
|
|
158
|
+
showStepIndicator: true,
|
|
159
|
+
currentStep: 1,
|
|
160
|
+
totalSteps: 4,
|
|
161
|
+
}}
|
|
162
|
+
/>
|
|
270
163
|
```
|
|
271
164
|
|
|
272
|
-
###
|
|
165
|
+
### Registration Form
|
|
273
166
|
|
|
167
|
+
✅ **DO**:
|
|
274
168
|
```tsx
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
<ScreenLayout>
|
|
286
|
-
<StepHeader
|
|
287
|
-
title={steps[currentStep - 1].title}
|
|
288
|
-
subtitle={steps[currentStep - 1].subtitle}
|
|
289
|
-
config={{
|
|
290
|
-
showStepIndicator: true,
|
|
291
|
-
currentStep,
|
|
292
|
-
totalSteps: steps.length,
|
|
293
|
-
}}
|
|
294
|
-
/>
|
|
295
|
-
|
|
296
|
-
{/* Step content */}
|
|
297
|
-
</ScreenLayout>
|
|
298
|
-
);
|
|
299
|
-
};
|
|
169
|
+
<StepHeader
|
|
170
|
+
title="Create Account"
|
|
171
|
+
subtitle="Start with your email and password"
|
|
172
|
+
config={{
|
|
173
|
+
showStepIndicator: true,
|
|
174
|
+
currentStep: 1,
|
|
175
|
+
totalSteps: 3,
|
|
176
|
+
titleAlignment: 'left',
|
|
177
|
+
}}
|
|
178
|
+
/>
|
|
300
179
|
```
|
|
301
180
|
|
|
302
|
-
###
|
|
181
|
+
### Number of Steps
|
|
303
182
|
|
|
183
|
+
✅ **DO**:
|
|
304
184
|
```tsx
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
const currentStep = Math.ceil((completionPercentage / 100) * totalSteps);
|
|
308
|
-
|
|
309
|
-
return (
|
|
310
|
-
<View>
|
|
311
|
-
<StepHeader
|
|
312
|
-
title="Profilinizi Tamamlayın"
|
|
313
|
-
subtitle={`${completionPercentage}% tamamlandı`}
|
|
314
|
-
config={{
|
|
315
|
-
showStepIndicator: true,
|
|
316
|
-
currentStep,
|
|
317
|
-
totalSteps,
|
|
318
|
-
titleAlignment: 'center',
|
|
319
|
-
}}
|
|
320
|
-
/>
|
|
321
|
-
</View>
|
|
322
|
-
);
|
|
323
|
-
};
|
|
185
|
+
// ✅ Good: 3-5 steps
|
|
186
|
+
totalSteps: 4
|
|
324
187
|
```
|
|
325
188
|
|
|
326
|
-
|
|
327
|
-
|
|
189
|
+
❌ **DON'T**:
|
|
328
190
|
```tsx
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
{ title: 'Bildirimler', subtitle: 'Bildirim tercihlerinizi ayarlayın' },
|
|
335
|
-
{ title: 'Gizlilik', subtitle: 'Gizlilik ayarlarınızı yapılandırın' },
|
|
336
|
-
{ title: 'Tema', subtitle: 'Uygulama temasını özelleştirin' },
|
|
337
|
-
];
|
|
338
|
-
|
|
339
|
-
return (
|
|
340
|
-
<ScreenLayout>
|
|
341
|
-
<StepHeader
|
|
342
|
-
title={setupSteps[setupStep - 1].title}
|
|
343
|
-
subtitle={setupSteps[setupStep - 1].subtitle}
|
|
344
|
-
config={{
|
|
345
|
-
showStepIndicator: true,
|
|
346
|
-
currentStep: setupStep,
|
|
347
|
-
totalSteps: setupSteps.length,
|
|
348
|
-
titleFontSize: 24,
|
|
349
|
-
subtitleFontSize: 14,
|
|
350
|
-
}}
|
|
351
|
-
/>
|
|
352
|
-
|
|
353
|
-
{/* Setup content */}
|
|
354
|
-
</ScreenLayout>
|
|
355
|
-
);
|
|
356
|
-
};
|
|
191
|
+
// ❌ Bad: Too many steps
|
|
192
|
+
totalSteps: 10
|
|
193
|
+
|
|
194
|
+
// ❌ Bad: Too few for indicator
|
|
195
|
+
totalSteps: 2
|
|
357
196
|
```
|
|
358
197
|
|
|
359
|
-
###
|
|
198
|
+
### Title Length
|
|
360
199
|
|
|
200
|
+
✅ **DO**:
|
|
361
201
|
```tsx
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
{ title: 'Soru 2', subtitle: 'Mesleğiniz nedir?' },
|
|
367
|
-
{ title: 'Soru 3', subtitle: 'İlgi alanlarınız nelerdir?' },
|
|
368
|
-
];
|
|
369
|
-
|
|
370
|
-
return (
|
|
371
|
-
<View>
|
|
372
|
-
<StepHeader
|
|
373
|
-
title={questions[questionIndex].title}
|
|
374
|
-
subtitle={questions[questionIndex].subtitle}
|
|
375
|
-
config={{
|
|
376
|
-
showStepIndicator: true,
|
|
377
|
-
currentStep: questionIndex + 1,
|
|
378
|
-
totalSteps: questions.length,
|
|
379
|
-
titleAlignment: 'center',
|
|
380
|
-
spacing: {
|
|
381
|
-
marginBottom: 24,
|
|
382
|
-
paddingHorizontal: 16,
|
|
383
|
-
},
|
|
384
|
-
}}
|
|
385
|
-
/>
|
|
386
|
-
|
|
387
|
-
{/* Question content */}
|
|
388
|
-
</View>
|
|
389
|
-
);
|
|
390
|
-
};
|
|
202
|
+
// ✅ Good: Concise and clear
|
|
203
|
+
title="Create Profile"
|
|
204
|
+
title="Enter Your Details"
|
|
205
|
+
title="Almost Done!"
|
|
391
206
|
```
|
|
392
207
|
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
### StepHeaderProps
|
|
396
|
-
|
|
397
|
-
| Prop | Tip | Varsayılan | Açıklama |
|
|
398
|
-
|------|-----|------------|----------|
|
|
399
|
-
| `title` | `string` | - **(Zorunlu)** | Ana başlık |
|
|
400
|
-
| `subtitle` | `string` | - | Alt başlık |
|
|
401
|
-
| `config` | `StepHeaderConfig` | `{}` | Konfigürasyon |
|
|
402
|
-
| `style` | `ViewStyle` | - | Özel stil |
|
|
403
|
-
|
|
404
|
-
### StepHeaderConfig
|
|
405
|
-
|
|
406
|
-
| Prop | Tip | Varsayılan | Açıklama |
|
|
407
|
-
|------|-----|------------|----------|
|
|
408
|
-
| `showStepIndicator` | `boolean` | `false` | Adım göstergesi göster |
|
|
409
|
-
| `currentStep` | `number` | - | Mevcut adım |
|
|
410
|
-
| `totalSteps` | `number` | - | Toplam adım sayısı |
|
|
411
|
-
| `titleAlignment` | `'left' \| 'center' \| 'right'` | `'left'` | Başlık hizalaması |
|
|
412
|
-
| `titleFontSize` | `number` | `28` | Başlık font boyutu |
|
|
413
|
-
| `subtitleFontSize` | `number` | `16` | Alt başlık font boyutu |
|
|
414
|
-
| `spacing` | `object` | - | Boşluk ayarları |
|
|
415
|
-
| `spacing.marginBottom` | `number` | `32` | Alt boşluk |
|
|
416
|
-
| `spacing.paddingHorizontal` | `number` | `24` | Yatay boşluk |
|
|
417
|
-
|
|
418
|
-
## Best Practices
|
|
419
|
-
|
|
420
|
-
### 1. Step Indicator Kullanımı
|
|
421
|
-
|
|
208
|
+
❌ **DON'T**:
|
|
422
209
|
```tsx
|
|
423
|
-
//
|
|
424
|
-
|
|
425
|
-
showStepIndicator: true,
|
|
426
|
-
currentStep: 2,
|
|
427
|
-
totalSteps: 5,
|
|
428
|
-
}}
|
|
210
|
+
// ❌ Bad: Too long
|
|
211
|
+
title="Please Enter Your Personal Profile Information Here"
|
|
429
212
|
```
|
|
430
213
|
|
|
431
|
-
|
|
432
|
-
|
|
214
|
+
## AI Coding Guidelines
|
|
215
|
+
|
|
216
|
+
### For AI Agents
|
|
217
|
+
|
|
218
|
+
When generating StepHeader components, follow these rules:
|
|
219
|
+
|
|
220
|
+
1. **Always import from correct path**:
|
|
221
|
+
```typescript
|
|
222
|
+
import { StepHeader } from 'react-native-design-system/src/molecules/StepHeader';
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
2. **Always provide a title**:
|
|
226
|
+
```tsx
|
|
227
|
+
// ✅ Good
|
|
228
|
+
<StepHeader
|
|
229
|
+
title="创建账户"
|
|
230
|
+
subtitle="输入您的电子邮件和密码"
|
|
231
|
+
config={{
|
|
232
|
+
showStepIndicator: true,
|
|
233
|
+
currentStep: step,
|
|
234
|
+
totalSteps: totalSteps,
|
|
235
|
+
}}
|
|
236
|
+
/>
|
|
237
|
+
|
|
238
|
+
// ❌ Bad - no title
|
|
239
|
+
<StepHeader
|
|
240
|
+
subtitle="No title provided"
|
|
241
|
+
/>
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
3. **Always use descriptive titles, not step numbers**:
|
|
245
|
+
```tsx
|
|
246
|
+
// ✅ Good - descriptive
|
|
247
|
+
title="Create Account"
|
|
248
|
+
title="Enter Profile Information"
|
|
249
|
+
title="Review and Confirm"
|
|
250
|
+
|
|
251
|
+
// ❌ Bad - generic
|
|
252
|
+
title="Step 1"
|
|
253
|
+
title="Step 2"
|
|
254
|
+
title="Step 3"
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
4. **Always show step indicator for multi-step workflows**:
|
|
258
|
+
```tsx
|
|
259
|
+
// ✅ Good - with indicator
|
|
260
|
+
<StepHeader
|
|
261
|
+
title="Profile Information"
|
|
262
|
+
config={{
|
|
263
|
+
showStepIndicator: true,
|
|
264
|
+
currentStep: 2,
|
|
265
|
+
totalSteps: 4,
|
|
266
|
+
}}
|
|
267
|
+
/>
|
|
268
|
+
|
|
269
|
+
// ❌ Bad - no indicator in multi-step flow
|
|
270
|
+
<StepHeader
|
|
271
|
+
title="Profile Information"
|
|
272
|
+
// Missing step indicator
|
|
273
|
+
/>
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
5. **Always choose appropriate alignment**:
|
|
277
|
+
```tsx
|
|
278
|
+
// ✅ Good - left for forms
|
|
279
|
+
config={{
|
|
280
|
+
titleAlignment: 'left',
|
|
281
|
+
}}
|
|
282
|
+
|
|
283
|
+
// ✅ Good - center for onboarding
|
|
284
|
+
config={{
|
|
285
|
+
titleAlignment: 'center',
|
|
286
|
+
}}
|
|
287
|
+
|
|
288
|
+
// ✅ Good - right for RTL languages
|
|
289
|
+
config={{
|
|
290
|
+
titleAlignment: 'right',
|
|
291
|
+
}}
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
### Common Patterns
|
|
295
|
+
|
|
296
|
+
#### Onboarding Step Header
|
|
433
297
|
```tsx
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
titleAlignment: '
|
|
298
|
+
<StepHeader
|
|
299
|
+
title="Welcome 👋"
|
|
300
|
+
subtitle="Let's get you set up in a few steps"
|
|
301
|
+
config={{
|
|
302
|
+
showStepIndicator: true,
|
|
303
|
+
currentStep: 1,
|
|
304
|
+
totalSteps: 4,
|
|
305
|
+
titleAlignment: 'center',
|
|
306
|
+
spacing: {
|
|
307
|
+
marginBottom: 48,
|
|
308
|
+
},
|
|
309
|
+
}}
|
|
310
|
+
/>
|
|
442
311
|
```
|
|
443
312
|
|
|
444
|
-
|
|
445
|
-
|
|
313
|
+
#### Registration Form Step Header
|
|
446
314
|
```tsx
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
315
|
+
<StepHeader
|
|
316
|
+
title="Personal Information"
|
|
317
|
+
subtitle="Tell us a bit about yourself"
|
|
318
|
+
config={{
|
|
319
|
+
showStepIndicator: true,
|
|
320
|
+
currentStep: 2,
|
|
321
|
+
totalSteps: 3,
|
|
322
|
+
titleAlignment: 'left',
|
|
323
|
+
}}
|
|
324
|
+
/>
|
|
452
325
|
```
|
|
453
326
|
|
|
454
|
-
|
|
455
|
-
|
|
327
|
+
#### Checkout Step Header
|
|
456
328
|
```tsx
|
|
457
|
-
|
|
458
|
-
title="
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
329
|
+
<StepHeader
|
|
330
|
+
title="Payment Method"
|
|
331
|
+
subtitle="Choose how you want to pay"
|
|
332
|
+
config={{
|
|
333
|
+
showStepIndicator: true,
|
|
334
|
+
currentStep: 3,
|
|
335
|
+
totalSteps: 4,
|
|
336
|
+
}}
|
|
337
|
+
/>
|
|
462
338
|
```
|
|
463
339
|
|
|
464
|
-
##
|
|
465
|
-
|
|
466
|
-
StepHeader, tam erişilebilirlik desteği sunar:
|
|
467
|
-
|
|
468
|
-
- ✅ Screen reader desteği
|
|
469
|
-
- ✅ Semantic heading yapısı
|
|
470
|
-
- ✅ Focus management
|
|
471
|
-
- ✅ Yeterli dokunma alanı
|
|
340
|
+
## Props Reference
|
|
472
341
|
|
|
473
|
-
|
|
342
|
+
| Prop | Type | Required | Default | Description |
|
|
343
|
+
|------|------|----------|---------|-------------|
|
|
344
|
+
| `title` | `string` | **Yes** | - | Main title |
|
|
345
|
+
| `subtitle` | `string` | No | - | Subtitle text |
|
|
346
|
+
| `config` | `StepHeaderConfig` | No | `{}` | Configuration options |
|
|
347
|
+
| `style` | `ViewStyle` | No | - | Custom container style |
|
|
474
348
|
|
|
475
|
-
|
|
476
|
-
2. **Optimized Re-renders**: Sadece gerekli olduğunda güncelleyin
|
|
477
|
-
3. **Minimal Props**: Gereksiz props'tan kaçının
|
|
478
|
-
|
|
479
|
-
## İlgili Bileşenler
|
|
480
|
-
|
|
481
|
-
- [`AtomicText`](../../atoms/AtomicText/README.md) - Metin bileşeni
|
|
482
|
-
- [`BaseModal`](../BaseModal/README.md) - Modal bileşeni
|
|
483
|
-
- [`FormField`](../FormField/README.md) - Form alanı
|
|
349
|
+
### StepHeaderConfig
|
|
484
350
|
|
|
485
|
-
|
|
351
|
+
| Prop | Type | Default | Description |
|
|
352
|
+
|------|------|---------|-------------|
|
|
353
|
+
| `showStepIndicator` | `boolean` | `false` | Show step indicator |
|
|
354
|
+
| `currentStep` | `number` | - | Current step (1-based) |
|
|
355
|
+
| `totalSteps` | `number` | - | Total number of steps |
|
|
356
|
+
| `titleAlignment` | `'left' \| 'center' \| 'right'` | `'left'` | Title alignment |
|
|
357
|
+
| `titleFontSize` | `number` | `28` | Title font size |
|
|
358
|
+
| `subtitleFontSize` | `number` | `16` | Subtitle font size |
|
|
359
|
+
| `spacing` | `object` | - | Spacing settings |
|
|
360
|
+
| `spacing.marginBottom` | `number` | `32` | Bottom margin |
|
|
361
|
+
| `spacing.paddingHorizontal` | `number` | `24` | Horizontal padding |
|
|
362
|
+
|
|
363
|
+
## Accessibility
|
|
364
|
+
|
|
365
|
+
- ✅ Screen reader announces title and subtitle
|
|
366
|
+
- ✅ Semantic heading structure (h1/h2)
|
|
367
|
+
- ✅ Step progress announced
|
|
368
|
+
- ✅ Focus management for keyboard navigation
|
|
369
|
+
- ✅ Sufficient color contrast
|
|
370
|
+
|
|
371
|
+
## Performance Tips
|
|
372
|
+
|
|
373
|
+
1. **Memoization**: Memo step header to prevent re-renders
|
|
374
|
+
2. **Minimal props**: Only update when step changes
|
|
375
|
+
3. **Avoid inline objects**: Define config outside render
|
|
376
|
+
4. **Optimize text**: Keep titles short and concise
|
|
377
|
+
|
|
378
|
+
## Related Components
|
|
379
|
+
|
|
380
|
+
- [`StepProgress`](../StepProgress/README.md) - Step progress bar
|
|
381
|
+
- [`BaseModal`](../BaseModal/README.md) - Modal for step flows
|
|
382
|
+
- [`FormField`](../FormField/README.md) - Form field component
|
|
383
|
+
- [`AtomicText`](../../atoms/AtomicText/README.md) - Text component
|
|
384
|
+
|
|
385
|
+
## License
|
|
486
386
|
|
|
487
387
|
MIT
|