@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.
Files changed (2) hide show
  1. package/README.md +215 -16
  2. package/package.json +3 -3
package/README.md CHANGED
@@ -1,36 +1,235 @@
1
- # @xsolla/xui-quest-card
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
- Compact card for displaying a quest with icon, title, progress, status, and trailing reward.
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
- ## Usage
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="Complete 10 matches"
18
- subtitle="0/10 matches"
19
- status="default"
20
- onPress={() => console.log('quest pressed')}
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
- ## Props
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
- | `title` | `string` | | Quest title text |
31
- | `subtitle` | `string` | | Progress or description (e.g. `"0/12 hours"`) |
32
- | `icon` | `ReactNode` | | Icon displayed in the icon container |
33
- | `status` | `"default" \| "alert" \| "warning" \| "success"` | | Status indicator colour |
34
- | `statusIcon` | `ReactNode` | | Custom status icon; overrides default dot |
35
- | `trailing` | `ReactNode` | | Reward tag or custom trailing content |
36
- | `onPress` | `() => void` | | Card press handler |
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.99.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.99.0",
18
- "@xsolla/xui-primitives-core": "0.99.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",