@xsolla/xui-status 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 +249 -16
  2. package/package.json +3 -3
package/README.md CHANGED
@@ -1,34 +1,267 @@
1
- # @xsolla/xui-status
1
+ # Status
2
2
 
3
- An accessible status indicator with a coloured dot and optional label for representing availability or system states.
3
+ A cross-platform React status indicator component that displays a colored dot with an optional text label to indicate state or condition.
4
4
 
5
5
  ## Installation
6
6
 
7
7
  ```bash
8
+ npm install @xsolla/xui-status
9
+ # or
8
10
  yarn add @xsolla/xui-status
9
11
  ```
10
12
 
11
- ## Usage
13
+ ## Demo
14
+
15
+ ### Basic Status
16
+
17
+ ```tsx
18
+ import * as React from 'react';
19
+ import { Status } from '@xsolla/xui-status';
20
+
21
+ export default function BasicStatus() {
22
+ return (
23
+ <div style={{ display: 'flex', gap: 24 }}>
24
+ <Status palette="success">Active</Status>
25
+ <Status palette="warning">Pending</Status>
26
+ <Status palette="alert">Error</Status>
27
+ <Status palette="neutral">Inactive</Status>
28
+ </div>
29
+ );
30
+ }
31
+ ```
32
+
33
+ ### Dot Only
34
+
35
+ ```tsx
36
+ import * as React from 'react';
37
+ import { Status } from '@xsolla/xui-status';
38
+
39
+ export default function DotOnly() {
40
+ return (
41
+ <div style={{ display: 'flex', gap: 16 }}>
42
+ <Status palette="success" />
43
+ <Status palette="warning" />
44
+ <Status palette="alert" />
45
+ <Status palette="neutral" />
46
+ </div>
47
+ );
48
+ }
49
+ ```
50
+
51
+ ### Different Sizes
52
+
53
+ ```tsx
54
+ import * as React from 'react';
55
+ import { Status } from '@xsolla/xui-status';
56
+
57
+ export default function Sizes() {
58
+ return (
59
+ <div style={{ display: 'flex', alignItems: 'center', gap: 24 }}>
60
+ <Status size="sm" palette="success">Small</Status>
61
+ <Status size="md" palette="success">Medium</Status>
62
+ <Status size="lg" palette="success">Large</Status>
63
+ </div>
64
+ );
65
+ }
66
+ ```
67
+
68
+ ## Anatomy
69
+
70
+ ```jsx
71
+ import { Status } from '@xsolla/xui-status';
72
+
73
+ <Status
74
+ palette="success" // success, warning, alert, neutral, default
75
+ size="md" // s, m, l
76
+ labelType="primary" // primary or dot-color
77
+ uppercase={true} // Uppercase text
78
+ >
79
+ Label text
80
+ </Status>
81
+ ```
82
+
83
+ ## Examples
84
+
85
+ ### Order Status
86
+
87
+ ```tsx
88
+ import * as React from 'react';
89
+ import { Status } from '@xsolla/xui-status';
90
+
91
+ export default function OrderStatus() {
92
+ const orders = [
93
+ { id: '001', status: 'Completed', palette: 'success' as const },
94
+ { id: '002', status: 'Processing', palette: 'warning' as const },
95
+ { id: '003', status: 'Failed', palette: 'alert' as const },
96
+ { id: '004', status: 'Cancelled', palette: 'neutral' as const },
97
+ ];
98
+
99
+ return (
100
+ <table style={{ width: '100%', borderCollapse: 'collapse' }}>
101
+ <thead>
102
+ <tr>
103
+ <th style={{ textAlign: 'left', padding: 8 }}>Order ID</th>
104
+ <th style={{ textAlign: 'left', padding: 8 }}>Status</th>
105
+ </tr>
106
+ </thead>
107
+ <tbody>
108
+ {orders.map(({ id, status, palette }) => (
109
+ <tr key={id}>
110
+ <td style={{ padding: 8 }}>{id}</td>
111
+ <td style={{ padding: 8 }}>
112
+ <Status palette={palette}>{status}</Status>
113
+ </td>
114
+ </tr>
115
+ ))}
116
+ </tbody>
117
+ </table>
118
+ );
119
+ }
120
+ ```
121
+
122
+ ### Service Health
123
+
124
+ ```tsx
125
+ import * as React from 'react';
126
+ import { Status } from '@xsolla/xui-status';
127
+
128
+ export default function ServiceHealth() {
129
+ const services = [
130
+ { name: 'API', status: 'operational', palette: 'success' as const },
131
+ { name: 'Database', status: 'degraded', palette: 'warning' as const },
132
+ { name: 'CDN', status: 'operational', palette: 'success' as const },
133
+ { name: 'Auth', status: 'outage', palette: 'alert' as const },
134
+ ];
135
+
136
+ return (
137
+ <div style={{ display: 'flex', flexDirection: 'column', gap: 12 }}>
138
+ {services.map(({ name, status, palette }) => (
139
+ <div
140
+ key={name}
141
+ style={{
142
+ display: 'flex',
143
+ justifyContent: 'space-between',
144
+ padding: 12,
145
+ border: '1px solid #e0e0e0',
146
+ borderRadius: 8,
147
+ }}
148
+ >
149
+ <span>{name}</span>
150
+ <Status palette={palette}>{status}</Status>
151
+ </div>
152
+ ))}
153
+ </div>
154
+ );
155
+ }
156
+ ```
157
+
158
+ ### User Online Status
159
+
160
+ ```tsx
161
+ import * as React from 'react';
162
+ import { Status } from '@xsolla/xui-status';
163
+ import { Avatar } from '@xsolla/xui-avatar';
164
+
165
+ export default function UserOnlineStatus() {
166
+ const users = [
167
+ { name: 'John Doe', online: true },
168
+ { name: 'Jane Smith', online: true },
169
+ { name: 'Bob Wilson', online: false },
170
+ ];
171
+
172
+ return (
173
+ <div style={{ display: 'flex', flexDirection: 'column', gap: 12 }}>
174
+ {users.map(({ name, online }) => (
175
+ <div key={name} style={{ display: 'flex', alignItems: 'center', gap: 12 }}>
176
+ <Avatar size="md" text={name.split(' ').map(n => n[0]).join('')} />
177
+ <span style={{ flex: 1 }}>{name}</span>
178
+ <Status
179
+ palette={online ? 'success' : 'neutral'}
180
+ size="sm"
181
+ >
182
+ {online ? 'Online' : 'Offline'}
183
+ </Status>
184
+ </div>
185
+ ))}
186
+ </div>
187
+ );
188
+ }
189
+ ```
190
+
191
+ ### Colored Label
12
192
 
13
193
  ```tsx
14
- import { Status } from "@xsolla/xui-status";
194
+ import * as React from 'react';
195
+ import { Status } from '@xsolla/xui-status';
15
196
 
16
- <Status palette="success">Online</Status>
17
- <Status palette="warning">Away</Status>
18
- <Status palette="alert">Error</Status>
197
+ export default function ColoredLabel() {
198
+ return (
199
+ <div style={{ display: 'flex', gap: 24 }}>
200
+ <Status palette="success" labelType="primary">Primary Label</Status>
201
+ <Status palette="success" labelType="dot-color">Colored Label</Status>
202
+ </div>
203
+ );
204
+ }
205
+ ```
206
+
207
+ ### Lowercase Status
208
+
209
+ ```tsx
210
+ import * as React from 'react';
211
+ import { Status } from '@xsolla/xui-status';
19
212
 
20
- {/* Dot-only */}
21
- <Status palette="neutral" />
213
+ export default function LowercaseStatus() {
214
+ return (
215
+ <div style={{ display: 'flex', gap: 24 }}>
216
+ <Status palette="success" uppercase>UPPERCASE</Status>
217
+ <Status palette="success" uppercase={false}>Sentence case</Status>
218
+ </div>
219
+ );
220
+ }
22
221
  ```
23
222
 
24
- ## Props
223
+ ## API Reference
25
224
 
26
225
  ### Status
27
226
 
227
+ **StatusProps:**
228
+
28
229
  | Prop | Type | Default | Description |
29
- |------|------|---------|-------------|
30
- | `palette` | `"default" \| "success" \| "warning" \| "alert" \| "neutral"` | `"default"` | Dot colour |
31
- | `size` | `"sm" \| "md" \| "lg"` | `"md"` | Size of the dot and label text |
32
- | `labelType` | `"primary" \| "dot-color"` | `"primary"` | Label colour; `"dot-color"` matches the dot colour |
33
- | `aria-label` | `string` | | Explicit accessible label; auto-generated for string children |
34
- | `aria-live` | `"polite" \| "assertive" \| "off"` | | Live region behaviour for dynamic updates |
230
+ | :--- | :--- | :------ | :---------- |
231
+ | children | `ReactNode` | - | Label text (optional). |
232
+ | palette | `"success" \| "warning" \| "alert" \| "neutral" \| "default"` | `"default"` | Status color palette. |
233
+ | size | `"sm" \| "md" \| "lg"` | `"md"` | Component size. |
234
+ | labelType | `"primary" \| "dot-color"` | `"primary"` | Label color mode. |
235
+ | uppercase | `boolean` | `true` | Transform text to uppercase. |
236
+
237
+ ## Size Specifications
238
+
239
+ | Size | Dot Size | Gap | Font Size | Line Height |
240
+ | :--- | :------- | :-- | :-------- | :---------- |
241
+ | `sm` | 4px | 4px | 12px | 16px |
242
+ | `md` | 6px | 6px | 14px | 20px |
243
+ | `lg` | 8px | 8px | 16px | 24px |
244
+
245
+ ## Color Palettes
246
+
247
+ | Palette | Use Case |
248
+ | :------ | :------- |
249
+ | `success` | Active, completed, operational |
250
+ | `warning` | Pending, degraded, attention needed |
251
+ | `alert` | Error, failed, critical |
252
+ | `neutral` | Inactive, offline, cancelled |
253
+ | `default` | Generic/disabled state |
254
+
255
+ ## Label Types
256
+
257
+ | Type | Description |
258
+ | :--- | :---------- |
259
+ | `primary` | Uses theme's primary text color |
260
+ | `dot-color` | Uses the same color as the dot |
261
+
262
+ ## Accessibility
263
+
264
+ - Status information should not rely solely on color
265
+ - Text labels provide context for screen readers
266
+ - Consider using `aria-live` for dynamic status updates
267
+ - Ensure sufficient color contrast for all palettes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xsolla/xui-status",
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",
@@ -10,8 +10,8 @@
10
10
  "build:native": "PLATFORM=native tsup"
11
11
  },
12
12
  "dependencies": {
13
- "@xsolla/xui-core": "0.99.0",
14
- "@xsolla/xui-primitives-core": "0.99.0"
13
+ "@xsolla/xui-core": "0.101.0",
14
+ "@xsolla/xui-primitives-core": "0.101.0"
15
15
  },
16
16
  "peerDependencies": {
17
17
  "react": ">=16.8.0",