@xsolla/xui-stepper 0.99.0 → 0.101.0

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.
Files changed (2) hide show
  1. package/README.md +222 -32
  2. package/package.json +4 -4
package/README.md CHANGED
@@ -1,54 +1,244 @@
1
- # @xsolla/xui-stepper
1
+ # Stepper
2
2
 
3
- Step-based progress indicator for multi-step flows, with horizontal and vertical layouts.
3
+ A cross-platform React stepper component that displays progress through a sequence of steps, supporting horizontal and vertical layouts with multiple step states.
4
4
 
5
5
  ## Installation
6
6
 
7
7
  ```bash
8
+ npm install @xsolla/xui-stepper
9
+ # or
8
10
  yarn add @xsolla/xui-stepper
9
11
  ```
10
12
 
11
- ## Usage
13
+ ## Demo
14
+
15
+ ### Basic Stepper
16
+
17
+ ```tsx
18
+ import * as React from 'react';
19
+ import { Stepper } from '@xsolla/xui-stepper';
20
+
21
+ export default function BasicStepper() {
22
+ const steps = [
23
+ { title: 'Account', state: 'complete' as const },
24
+ { title: 'Payment', state: 'current' as const },
25
+ { title: 'Review', state: 'incomplete' as const },
26
+ ];
27
+
28
+ return <Stepper steps={steps} />;
29
+ }
30
+ ```
31
+
32
+ ### Vertical Stepper
12
33
 
13
34
  ```tsx
35
+ import * as React from 'react';
36
+ import { Stepper } from '@xsolla/xui-stepper';
37
+
38
+ export default function VerticalStepper() {
39
+ const steps = [
40
+ { title: 'Step 1', description: 'Account details', state: 'complete' as const },
41
+ { title: 'Step 2', description: 'Payment method', state: 'current' as const },
42
+ { title: 'Step 3', description: 'Order review', state: 'incomplete' as const },
43
+ ];
44
+
45
+ return <Stepper steps={steps} direction="vertical" />;
46
+ }
47
+ ```
48
+
49
+ ### With States
50
+
51
+ ```tsx
52
+ import * as React from 'react';
53
+ import { Stepper } from '@xsolla/xui-stepper';
54
+
55
+ export default function StepStates() {
56
+ const steps = [
57
+ { title: 'Complete', state: 'complete' as const },
58
+ { title: 'Warning', state: 'warning' as const },
59
+ { title: 'Alert', state: 'alert' as const },
60
+ { title: 'Loading', state: 'loading' as const },
61
+ { title: 'Current', state: 'current' as const },
62
+ { title: 'Incomplete', state: 'incomplete' as const },
63
+ ];
64
+
65
+ return <Stepper steps={steps} />;
66
+ }
67
+ ```
68
+
69
+ ## Anatomy
70
+
71
+ ```jsx
14
72
  import { Stepper } from '@xsolla/xui-stepper';
15
73
 
16
74
  <Stepper
17
- steps={[
18
- { title: 'Account', state: 'complete' },
19
- { title: 'Payment', state: 'current' },
20
- { title: 'Confirm', state: 'incomplete' },
21
- ]}
22
- direction="horizontal"
23
- onClick={({ number, step }) => console.log(number, step)}
75
+ steps={steps} // Array of step objects
76
+ direction="horizontal" // horizontal or vertical
77
+ size="md" // s or m
78
+ variantUI="current" // current or simple
79
+ palette="brand" // brand or brandSecondary
80
+ tail={false} // Show connecting line (simple variant)
81
+ onClick={handleClick} // Step click handler
82
+ aria-label="Checkout" // Accessible label
24
83
  />
25
84
  ```
26
85
 
27
- ## Components
86
+ ## Examples
87
+
88
+ ### Checkout Flow
89
+
90
+ ```tsx
91
+ import * as React from 'react';
92
+ import { Stepper } from '@xsolla/xui-stepper';
93
+
94
+ export default function CheckoutFlow() {
95
+ const [currentStep, setCurrentStep] = React.useState(1);
96
+
97
+ const steps = [
98
+ { title: 'Cart', state: currentStep > 0 ? 'complete' as const : 'incomplete' as const },
99
+ { title: 'Shipping', state: currentStep === 1 ? 'current' as const : currentStep > 1 ? 'complete' as const : 'incomplete' as const },
100
+ { title: 'Payment', state: currentStep === 2 ? 'current' as const : currentStep > 2 ? 'complete' as const : 'incomplete' as const },
101
+ { title: 'Confirm', state: currentStep === 3 ? 'current' as const : 'incomplete' as const },
102
+ ];
103
+
104
+ return (
105
+ <div>
106
+ <Stepper
107
+ steps={steps}
108
+ onClick={({ number }) => setCurrentStep(number)}
109
+ />
110
+ <div style={{ marginTop: 24 }}>
111
+ <button onClick={() => setCurrentStep(Math.max(0, currentStep - 1))}>Back</button>
112
+ <button onClick={() => setCurrentStep(Math.min(3, currentStep + 1))}>Next</button>
113
+ </div>
114
+ </div>
115
+ );
116
+ }
117
+ ```
118
+
119
+ ### Registration Steps
120
+
121
+ ```tsx
122
+ import * as React from 'react';
123
+ import { Stepper } from '@xsolla/xui-stepper';
124
+
125
+ export default function RegistrationSteps() {
126
+ const steps = [
127
+ { title: 'Email', description: 'Verify your email', state: 'complete' as const },
128
+ { title: 'Profile', description: 'Set up your profile', state: 'current' as const },
129
+ { title: 'Preferences', description: 'Customize settings', state: 'incomplete' as const },
130
+ ];
131
+
132
+ return (
133
+ <Stepper
134
+ steps={steps}
135
+ direction="vertical"
136
+ variantUI="current"
137
+ size="md"
138
+ />
139
+ );
140
+ }
141
+ ```
142
+
143
+ ### Simple Variant with Tail
144
+
145
+ ```tsx
146
+ import * as React from 'react';
147
+ import { Stepper } from '@xsolla/xui-stepper';
148
+
149
+ export default function SimpleStepper() {
150
+ const steps = [
151
+ { title: 'Step 1', state: 'complete' as const },
152
+ { title: 'Step 2', state: 'current' as const },
153
+ { title: 'Step 3', state: 'incomplete' as const },
154
+ ];
155
+
156
+ return <Stepper steps={steps} variantUI="simple" tail />;
157
+ }
158
+ ```
159
+
160
+ ### Order Tracking
28
161
 
29
- - **Stepper** — Full labelled stepper with step states, click handling, and tail connectors.
30
- - **ProgressStep** Compact dot-based progress indicator with optional prev/next arrows.
162
+ ```tsx
163
+ import * as React from 'react';
164
+ import { Stepper } from '@xsolla/xui-stepper';
31
165
 
32
- ## Props
166
+ export default function OrderTracking() {
167
+ const steps = [
168
+ { title: 'Order Placed', description: 'Jan 20, 2024', state: 'complete' as const },
169
+ { title: 'Processing', description: 'Jan 21, 2024', state: 'complete' as const },
170
+ { title: 'Shipped', description: 'In transit', state: 'loading' as const },
171
+ { title: 'Delivered', state: 'incomplete' as const },
172
+ ];
173
+
174
+ return (
175
+ <Stepper
176
+ steps={steps}
177
+ direction="vertical"
178
+ palette="brand"
179
+ />
180
+ );
181
+ }
182
+ ```
183
+
184
+ ## API Reference
33
185
 
34
186
  ### Stepper
35
187
 
188
+ **StepperProps:**
189
+
36
190
  | Prop | Type | Default | Description |
37
- |------|------|---------|-------------|
38
- | `steps` | `StepType[]` | | Array of step definitions (required) |
39
- | `direction` | `'horizontal' \| 'vertical'` | `'horizontal'` | Layout orientation |
40
- | `variantUI` | `'current' \| 'simple'` | `'current'` | Visual style variant |
41
- | `size` | `'sm' \| 'md'` | `'md'` | Step size |
42
- | `palette` | `'brand' \| 'brandSecondary'` | `'brand'` | Colour palette |
43
- | `tail` | `boolean` | `false` | Shows connector lines between steps (simple variant only) |
44
- | `onClick` | `({ number, step }) => void` | | Callback when a step is clicked |
45
-
46
- #### StepType
47
-
48
- | Field | Type | Description |
49
- |-------|------|-------------|
50
- | `title` | `string \| ReactElement` | Step label |
51
- | `state` | `'current' \| 'incomplete' \| 'loading' \| 'complete' \| 'alert' \| 'warning'` | Step state |
52
- | `description` | `string \| ReactElement` | Optional secondary text |
53
- | `disabled` | `boolean` | Prevents click on this step |
54
- | `noClick` | `boolean` | Removes click handler for this step |
191
+ | :--- | :--- | :------ | :---------- |
192
+ | steps | `StepType[]` | - | Array of step definitions. |
193
+ | direction | `"horizontal" \| "vertical"` | `"horizontal"` | Layout direction. |
194
+ | size | `"sm" \| "md"` | `"md"` | Step size. |
195
+ | variantUI | `"current" \| "simple"` | `"current"` | Visual variant. |
196
+ | palette | `"brand" \| "brandSecondary"` | `"brand"` | Color palette. |
197
+ | tail | `boolean` | `false` | Show connecting lines (simple variant). |
198
+ | onClick | `StepClickType` | - | Step click handler. |
199
+ | aria-label | `string` | - | Accessible label for stepper. |
200
+
201
+ **StepType:**
202
+
203
+ ```typescript
204
+ interface StepType {
205
+ title: string | ReactElement;
206
+ description?: string | ReactElement;
207
+ state?: "current" | "incomplete" | "loading" | "complete" | "alert" | "warning";
208
+ disabled?: boolean;
209
+ key?: string;
210
+ noClick?: boolean;
211
+ }
212
+ ```
213
+
214
+ **StepClickType:**
215
+
216
+ ```typescript
217
+ type StepClickType = ({ number, step }: { number: number; step: StepType }) => void;
218
+ ```
219
+
220
+ ## Step States
221
+
222
+ | State | Description |
223
+ | :---- | :---------- |
224
+ | `current` | Active step, highlighted with brand color |
225
+ | `complete` | Finished step with checkmark |
226
+ | `incomplete` | Future step, muted appearance |
227
+ | `loading` | Step in progress with spinner |
228
+ | `alert` | Error state with alert color |
229
+ | `warning` | Warning state with warning color |
230
+
231
+ ## UI Variants
232
+
233
+ | Variant | Description |
234
+ | :------ | :---------- |
235
+ | `current` | Traditional stepper with step indicators and border line |
236
+ | `simple` | Minimalist stepper with optional connecting tail |
237
+
238
+ ## Accessibility
239
+
240
+ - Stepper uses `role="navigation"` for semantic meaning
241
+ - Each step is keyboard accessible when clickable
242
+ - `aria-label` provides context for screen readers
243
+ - Step states are conveyed through visual and accessible means
244
+ - Disabled steps are properly announced
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xsolla/xui-stepper",
3
- "version": "0.99.0",
3
+ "version": "0.101.0",
4
4
  "main": "./web/index.js",
5
5
  "module": "./web/index.mjs",
6
6
  "types": "./web/index.d.ts",
@@ -14,9 +14,9 @@
14
14
  "test:coverage": "vitest run --coverage"
15
15
  },
16
16
  "dependencies": {
17
- "@xsolla/xui-core": "0.99.0",
18
- "@xsolla/xui-icons": "0.99.0",
19
- "@xsolla/xui-primitives-core": "0.99.0"
17
+ "@xsolla/xui-core": "0.101.0",
18
+ "@xsolla/xui-icons": "0.101.0",
19
+ "@xsolla/xui-primitives-core": "0.101.0"
20
20
  },
21
21
  "peerDependencies": {
22
22
  "react": ">=16.8.0",