@xsolla/xui-quest-card 0.99.0 → 0.100.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.
- package/README.md +215 -16
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -1,36 +1,235 @@
|
|
|
1
|
-
|
|
1
|
+
---
|
|
2
|
+
title: QuestCard
|
|
3
|
+
subtitle: A card component for quest/mission items.
|
|
4
|
+
description: A cross-platform React card component for displaying quest or mission items with progress tracking, status indicators, and reward tags.
|
|
5
|
+
---
|
|
2
6
|
|
|
3
|
-
|
|
7
|
+
# QuestCard
|
|
8
|
+
|
|
9
|
+
A cross-platform React card component for displaying quest or mission items with progress tracking, status indicators, and reward tags. Perfect for gamification systems, daily challenges, and achievement displays.
|
|
4
10
|
|
|
5
11
|
## Installation
|
|
6
12
|
|
|
7
13
|
```bash
|
|
14
|
+
npm install @xsolla/xui-quest-card
|
|
15
|
+
# or
|
|
8
16
|
yarn add @xsolla/xui-quest-card
|
|
9
17
|
```
|
|
10
18
|
|
|
11
|
-
##
|
|
19
|
+
## Demo
|
|
20
|
+
|
|
21
|
+
### Basic QuestCard
|
|
22
|
+
|
|
23
|
+
```tsx
|
|
24
|
+
import * as React from 'react';
|
|
25
|
+
import { QuestCard } from '@xsolla/xui-quest-card';
|
|
26
|
+
import { Flag } from '@xsolla/xui-icons-base';
|
|
27
|
+
|
|
28
|
+
export default function BasicQuestCard() {
|
|
29
|
+
return (
|
|
30
|
+
<QuestCard
|
|
31
|
+
title="Play any game"
|
|
32
|
+
subtitle="0/12 hours"
|
|
33
|
+
icon={<Flag />}
|
|
34
|
+
/>
|
|
35
|
+
);
|
|
36
|
+
}
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### QuestCard with Status and Rewards
|
|
40
|
+
|
|
41
|
+
```tsx
|
|
42
|
+
import * as React from 'react';
|
|
43
|
+
import { QuestCard } from '@xsolla/xui-quest-card';
|
|
44
|
+
import { Tag } from '@xsolla/xui-tag';
|
|
45
|
+
import { AlertCircle } from '@xsolla/xui-icons';
|
|
46
|
+
import { Flag, CheckCr, Clock } from '@xsolla/xui-icons-base';
|
|
47
|
+
import { XsollaPoint } from '@xsolla/xui-icons-currency';
|
|
48
|
+
|
|
49
|
+
export default function QuestCardWithStatus() {
|
|
50
|
+
return (
|
|
51
|
+
<QuestCard
|
|
52
|
+
title="Play any game (with Play Time Rewards On)"
|
|
53
|
+
subtitle="0/12 hours"
|
|
54
|
+
icon={<Flag />}
|
|
55
|
+
status="alert"
|
|
56
|
+
statusIcon={<AlertCircle />}
|
|
57
|
+
trailing={
|
|
58
|
+
<Tag size="sm" tone="secondary" icon={<XsollaPoint />}>
|
|
59
|
+
5x
|
|
60
|
+
</Tag>
|
|
61
|
+
}
|
|
62
|
+
/>
|
|
63
|
+
);
|
|
64
|
+
}
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### QuestCard Status Variants
|
|
68
|
+
|
|
69
|
+
```tsx
|
|
70
|
+
import * as React from 'react';
|
|
71
|
+
import { QuestCard } from '@xsolla/xui-quest-card';
|
|
72
|
+
import { Tag } from '@xsolla/xui-tag';
|
|
73
|
+
import { AlertCircle } from '@xsolla/xui-icons';
|
|
74
|
+
import { Flag, CheckCr, Clock } from '@xsolla/xui-icons-base';
|
|
75
|
+
import { XsollaPoint, XsollaTicket } from '@xsolla/xui-icons-currency';
|
|
76
|
+
|
|
77
|
+
export default function QuestCardStatuses() {
|
|
78
|
+
return (
|
|
79
|
+
<div style={{ display: 'flex', flexDirection: 'column', gap: 8 }}>
|
|
80
|
+
{/* Alert Status */}
|
|
81
|
+
<QuestCard
|
|
82
|
+
title="Urgent quest"
|
|
83
|
+
subtitle="Expires in 1 hour"
|
|
84
|
+
icon={<Flag />}
|
|
85
|
+
status="alert"
|
|
86
|
+
statusIcon={<AlertCircle />}
|
|
87
|
+
trailing={<Tag size="sm" tone="alert">Urgent</Tag>}
|
|
88
|
+
/>
|
|
89
|
+
|
|
90
|
+
{/* Warning Status */}
|
|
91
|
+
<QuestCard
|
|
92
|
+
title="Expiring soon"
|
|
93
|
+
subtitle="2 hours left"
|
|
94
|
+
icon={<Clock />}
|
|
95
|
+
status="warning"
|
|
96
|
+
statusIcon={<AlertCircle />}
|
|
97
|
+
trailing={<Tag size="sm" tone="warning">Soon</Tag>}
|
|
98
|
+
/>
|
|
99
|
+
|
|
100
|
+
{/* Success Status */}
|
|
101
|
+
<QuestCard
|
|
102
|
+
title="Completed quest"
|
|
103
|
+
subtitle="1/1 done"
|
|
104
|
+
icon={<CheckCr />}
|
|
105
|
+
status="success"
|
|
106
|
+
statusIcon={<CheckCr />}
|
|
107
|
+
trailing={<Tag size="sm" tone="success">Done</Tag>}
|
|
108
|
+
/>
|
|
109
|
+
</div>
|
|
110
|
+
);
|
|
111
|
+
}
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
### Quest List
|
|
12
115
|
|
|
13
116
|
```tsx
|
|
117
|
+
import * as React from 'react';
|
|
118
|
+
import { QuestCard } from '@xsolla/xui-quest-card';
|
|
119
|
+
import { Tag } from '@xsolla/xui-tag';
|
|
120
|
+
import { AlertCircle } from '@xsolla/xui-icons';
|
|
121
|
+
import { Flag, CheckCr } from '@xsolla/xui-icons-base';
|
|
122
|
+
import { XsollaPoint, XsollaTicket } from '@xsolla/xui-icons-currency';
|
|
123
|
+
|
|
124
|
+
export default function QuestList() {
|
|
125
|
+
return (
|
|
126
|
+
<div style={{ display: 'flex', flexDirection: 'column', gap: 8 }}>
|
|
127
|
+
<QuestCard
|
|
128
|
+
title="Play any game"
|
|
129
|
+
subtitle="0/12 hours"
|
|
130
|
+
icon={<Flag />}
|
|
131
|
+
status="alert"
|
|
132
|
+
statusIcon={<AlertCircle />}
|
|
133
|
+
trailing={<Tag size="sm" tone="secondary" icon={<XsollaPoint />}>5x</Tag>}
|
|
134
|
+
onPress={() => console.log('Quest 1 clicked')}
|
|
135
|
+
/>
|
|
136
|
+
<QuestCard
|
|
137
|
+
title="Complete daily login"
|
|
138
|
+
subtitle="1/1 completed"
|
|
139
|
+
icon={<CheckCr />}
|
|
140
|
+
status="success"
|
|
141
|
+
statusIcon={<CheckCr />}
|
|
142
|
+
trailing={<Tag size="sm" tone="success">Done</Tag>}
|
|
143
|
+
/>
|
|
144
|
+
<QuestCard
|
|
145
|
+
title="Invite 3 friends"
|
|
146
|
+
subtitle="1/3 invited"
|
|
147
|
+
icon={<Flag />}
|
|
148
|
+
trailing={<Tag size="sm" tone="brand" icon={<XsollaTicket />}>500</Tag>}
|
|
149
|
+
onPress={() => console.log('Quest 3 clicked')}
|
|
150
|
+
/>
|
|
151
|
+
<QuestCard
|
|
152
|
+
title="Reach level 10"
|
|
153
|
+
subtitle="Level 7/10"
|
|
154
|
+
icon={<Flag />}
|
|
155
|
+
trailing={
|
|
156
|
+
<div style={{ display: 'flex', gap: 4 }}>
|
|
157
|
+
<Tag size="sm" tone="brand" icon={<XsollaPoint />}>100</Tag>
|
|
158
|
+
<Tag size="sm" tone="secondary">2x</Tag>
|
|
159
|
+
</div>
|
|
160
|
+
}
|
|
161
|
+
/>
|
|
162
|
+
</div>
|
|
163
|
+
);
|
|
164
|
+
}
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
## Anatomy
|
|
168
|
+
|
|
169
|
+
Import the component and use it directly:
|
|
170
|
+
|
|
171
|
+
```jsx
|
|
14
172
|
import { QuestCard } from '@xsolla/xui-quest-card';
|
|
15
173
|
|
|
16
174
|
<QuestCard
|
|
17
|
-
title="
|
|
18
|
-
subtitle="0/10
|
|
19
|
-
|
|
20
|
-
|
|
175
|
+
title="Quest Title" // Required: Quest name
|
|
176
|
+
subtitle="0/10 progress" // Optional: Progress text
|
|
177
|
+
icon={<Flag />} // Optional: Quest icon
|
|
178
|
+
status="alert" // Optional: Status indicator
|
|
179
|
+
statusIcon={<AlertCircle />} // Optional: Custom status icon
|
|
180
|
+
trailing={<Tag />} // Optional: Reward/action content
|
|
181
|
+
onPress={() => {}} // Optional: Card press handler
|
|
21
182
|
/>
|
|
22
183
|
```
|
|
23
184
|
|
|
24
|
-
##
|
|
185
|
+
## API Reference
|
|
25
186
|
|
|
26
187
|
### QuestCard
|
|
27
188
|
|
|
189
|
+
A card component for displaying quest or mission items.
|
|
190
|
+
|
|
191
|
+
**QuestCard Props:**
|
|
192
|
+
|
|
28
193
|
| Prop | Type | Default | Description |
|
|
29
|
-
|
|
30
|
-
|
|
|
31
|
-
|
|
|
32
|
-
|
|
|
33
|
-
|
|
|
34
|
-
|
|
|
35
|
-
|
|
|
36
|
-
|
|
|
194
|
+
| :--- | :--- | :------ | :---------- |
|
|
195
|
+
| title | `string` | required | Quest title text. |
|
|
196
|
+
| subtitle | `string` | - | Quest progress or description (e.g., "0/12 hours"). |
|
|
197
|
+
| icon | `ReactNode` | - | Icon to display in the icon container. |
|
|
198
|
+
| status | `"default" \| "alert" \| "warning" \| "success"` | - | Status indicator type. |
|
|
199
|
+
| statusIcon | `ReactNode` | - | Custom status icon (overrides default status indicator). |
|
|
200
|
+
| trailing | `ReactNode` | - | Reward tag or custom trailing content. |
|
|
201
|
+
| onPress | `() => void` | - | Card press handler. |
|
|
202
|
+
| className | `string` | - | Custom className for the container. |
|
|
203
|
+
| testID | `string` | - | Test ID for testing. |
|
|
204
|
+
|
|
205
|
+
**Status Types:**
|
|
206
|
+
|
|
207
|
+
| Status | Description |
|
|
208
|
+
| :----- | :---------- |
|
|
209
|
+
| default | No special status styling |
|
|
210
|
+
| alert | Red/alert color for urgent quests |
|
|
211
|
+
| warning | Yellow/warning color for expiring quests |
|
|
212
|
+
| success | Green/success color for completed quests |
|
|
213
|
+
|
|
214
|
+
## Theming
|
|
215
|
+
|
|
216
|
+
QuestCard uses the design system theme for colors:
|
|
217
|
+
|
|
218
|
+
```typescript
|
|
219
|
+
// Colors accessed via theme
|
|
220
|
+
theme.colors.background.primary // Card background
|
|
221
|
+
theme.colors.content.primary // Title text
|
|
222
|
+
theme.colors.content.tertiary // Subtitle text
|
|
223
|
+
theme.colors.content.alert // Alert status color
|
|
224
|
+
theme.colors.content.warning // Warning status color
|
|
225
|
+
theme.colors.content.success // Success status color
|
|
226
|
+
theme.colors.overlay.mono // Icon container background
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
## Accessibility
|
|
230
|
+
|
|
231
|
+
- Uses semantic HTML structure
|
|
232
|
+
- Interactive cards support keyboard navigation
|
|
233
|
+
- Status icons provide visual feedback
|
|
234
|
+
- Supports custom `onPress` for full card interaction
|
|
235
|
+
- Includes `testID` prop for testing
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xsolla/xui-quest-card",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.100.0",
|
|
4
4
|
"main": "./web/index.js",
|
|
5
5
|
"module": "./web/index.mjs",
|
|
6
6
|
"types": "./web/index.d.ts",
|
|
@@ -14,8 +14,8 @@
|
|
|
14
14
|
"test:coverage": "vitest run --coverage"
|
|
15
15
|
},
|
|
16
16
|
"dependencies": {
|
|
17
|
-
"@xsolla/xui-core": "0.
|
|
18
|
-
"@xsolla/xui-primitives-core": "0.
|
|
17
|
+
"@xsolla/xui-core": "0.100.0",
|
|
18
|
+
"@xsolla/xui-primitives-core": "0.100.0"
|
|
19
19
|
},
|
|
20
20
|
"peerDependencies": {
|
|
21
21
|
"react": ">=16.8.0",
|