@playbasis-ai/qwikcard-sdk 2.3.4

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 (106) hide show
  1. package/CHANGELOG.md +142 -0
  2. package/LICENSE +21 -0
  3. package/README.md +267 -0
  4. package/SDK_HANDOVER_GUIDE.md +129 -0
  5. package/dist/PlaybasisProvider.d.ts +19 -0
  6. package/dist/PlaybasisProvider.d.ts.map +1 -0
  7. package/dist/PlaybasisProvider.js +24 -0
  8. package/dist/QwikCardApp.d.ts +9 -0
  9. package/dist/QwikCardApp.d.ts.map +1 -0
  10. package/dist/QwikCardApp.js +210 -0
  11. package/dist/api/client.d.ts +66 -0
  12. package/dist/api/client.d.ts.map +1 -0
  13. package/dist/api/client.js +196 -0
  14. package/dist/components/Badge.d.ts +8 -0
  15. package/dist/components/Badge.d.ts.map +1 -0
  16. package/dist/components/Badge.js +34 -0
  17. package/dist/components/BadgeIcon.d.ts +10 -0
  18. package/dist/components/BadgeIcon.d.ts.map +1 -0
  19. package/dist/components/BadgeIcon.js +51 -0
  20. package/dist/components/Button.d.ts +10 -0
  21. package/dist/components/Button.d.ts.map +1 -0
  22. package/dist/components/Button.js +40 -0
  23. package/dist/components/GradientCard.d.ts +9 -0
  24. package/dist/components/GradientCard.d.ts.map +1 -0
  25. package/dist/components/GradientCard.js +28 -0
  26. package/dist/components/PointsBalance.d.ts +8 -0
  27. package/dist/components/PointsBalance.d.ts.map +1 -0
  28. package/dist/components/PointsBalance.js +85 -0
  29. package/dist/components/ProgressBar.d.ts +8 -0
  30. package/dist/components/ProgressBar.d.ts.map +1 -0
  31. package/dist/components/ProgressBar.js +41 -0
  32. package/dist/components/QuestProgress.d.ts +10 -0
  33. package/dist/components/QuestProgress.d.ts.map +1 -0
  34. package/dist/components/QuestProgress.js +94 -0
  35. package/dist/components/RadialGauge.d.ts +8 -0
  36. package/dist/components/RadialGauge.d.ts.map +1 -0
  37. package/dist/components/RadialGauge.js +53 -0
  38. package/dist/components/RewardCard.d.ts +10 -0
  39. package/dist/components/RewardCard.d.ts.map +1 -0
  40. package/dist/components/RewardCard.js +64 -0
  41. package/dist/components/RulesModal.d.ts +7 -0
  42. package/dist/components/RulesModal.d.ts.map +1 -0
  43. package/dist/components/RulesModal.js +106 -0
  44. package/dist/hooks/useBadges.d.ts +12 -0
  45. package/dist/hooks/useBadges.d.ts.map +1 -0
  46. package/dist/hooks/useBadges.js +42 -0
  47. package/dist/hooks/usePoints.d.ts +13 -0
  48. package/dist/hooks/usePoints.d.ts.map +1 -0
  49. package/dist/hooks/usePoints.js +70 -0
  50. package/dist/hooks/useQuests.d.ts +12 -0
  51. package/dist/hooks/useQuests.d.ts.map +1 -0
  52. package/dist/hooks/useQuests.js +41 -0
  53. package/dist/hooks/useQwikApp.d.ts +16 -0
  54. package/dist/hooks/useQwikApp.d.ts.map +1 -0
  55. package/dist/hooks/useQwikApp.js +42 -0
  56. package/dist/hooks/useRewards.d.ts +12 -0
  57. package/dist/hooks/useRewards.d.ts.map +1 -0
  58. package/dist/hooks/useRewards.js +56 -0
  59. package/dist/index.d.ts +27 -0
  60. package/dist/index.d.ts.map +1 -0
  61. package/dist/index.js +29 -0
  62. package/dist/theme/context.d.ts +8 -0
  63. package/dist/theme/context.d.ts.map +1 -0
  64. package/dist/theme/context.js +8 -0
  65. package/dist/theme/tokens.d.ts +35 -0
  66. package/dist/theme/tokens.d.ts.map +1 -0
  67. package/dist/theme/tokens.js +33 -0
  68. package/dist/types/index.d.ts +119 -0
  69. package/dist/types/index.d.ts.map +1 -0
  70. package/dist/types/index.js +4 -0
  71. package/dist/web/widgetAssets.d.ts +4 -0
  72. package/dist/web/widgetAssets.d.ts.map +1 -0
  73. package/dist/web/widgetAssets.js +5 -0
  74. package/dist/web/widgetHtml.d.ts +2 -0
  75. package/dist/web/widgetHtml.d.ts.map +1 -0
  76. package/dist/web/widgetHtml.js +299 -0
  77. package/dist/web/widgetTypes.d.ts +128 -0
  78. package/dist/web/widgetTypes.d.ts.map +1 -0
  79. package/dist/web/widgetTypes.js +1 -0
  80. package/package.json +86 -0
  81. package/src/PlaybasisProvider.tsx +72 -0
  82. package/src/QwikCardApp.tsx +302 -0
  83. package/src/api/client.ts +307 -0
  84. package/src/components/Badge.tsx +51 -0
  85. package/src/components/BadgeIcon.tsx +97 -0
  86. package/src/components/Button.tsx +70 -0
  87. package/src/components/GradientCard.tsx +49 -0
  88. package/src/components/PointsBalance.tsx +122 -0
  89. package/src/components/ProgressBar.tsx +65 -0
  90. package/src/components/QuestProgress.tsx +153 -0
  91. package/src/components/RadialGauge.tsx +101 -0
  92. package/src/components/RewardCard.tsx +123 -0
  93. package/src/components/RulesModal.tsx +171 -0
  94. package/src/hooks/useBadges.ts +59 -0
  95. package/src/hooks/usePoints.ts +91 -0
  96. package/src/hooks/useQuests.ts +60 -0
  97. package/src/hooks/useQwikApp.ts +49 -0
  98. package/src/hooks/useRewards.ts +74 -0
  99. package/src/index.ts +34 -0
  100. package/src/theme/context.tsx +17 -0
  101. package/src/theme/tokens.ts +68 -0
  102. package/src/types/index.ts +176 -0
  103. package/src/web/widgetAssets.d.ts +3 -0
  104. package/src/web/widgetAssets.ts +6 -0
  105. package/src/web/widgetHtml.ts +302 -0
  106. package/src/web/widgetTypes.ts +146 -0
@@ -0,0 +1,70 @@
1
+ import { useState, useEffect, useCallback } from 'react';
2
+ import { usePlaybasis } from '../PlaybasisProvider';
3
+ export function usePoints() {
4
+ const { client, playerId } = usePlaybasis();
5
+ const [balances, setBalances] = useState([]);
6
+ const [loading, setLoading] = useState(true);
7
+ const [error, setError] = useState(null);
8
+ const fetchBalances = useCallback(async () => {
9
+ if (!playerId) {
10
+ setBalances([]);
11
+ setLoading(false);
12
+ return;
13
+ }
14
+ setLoading(true);
15
+ setError(null);
16
+ try {
17
+ const playerBalances = await client.getBalances(playerId);
18
+ setBalances(playerBalances);
19
+ }
20
+ catch (err) {
21
+ setError(err instanceof Error ? err : new Error('Failed to fetch balances'));
22
+ }
23
+ finally {
24
+ setLoading(false);
25
+ }
26
+ }, [client, playerId]);
27
+ useEffect(() => {
28
+ fetchBalances();
29
+ }, [fetchBalances]);
30
+ const earn = useCallback(async (currency, amount, reason) => {
31
+ if (!playerId)
32
+ return null;
33
+ try {
34
+ const balance = await client.earnPoints({
35
+ playerId,
36
+ currency,
37
+ amount,
38
+ reason,
39
+ });
40
+ // Update local state
41
+ setBalances((prev) => {
42
+ const idx = prev.findIndex((b) => b.currency === currency);
43
+ if (idx >= 0) {
44
+ const updated = [...prev];
45
+ updated[idx] = balance;
46
+ return updated;
47
+ }
48
+ return [...prev, balance];
49
+ });
50
+ return balance;
51
+ }
52
+ catch (err) {
53
+ setError(err instanceof Error ? err : new Error('Failed to earn points'));
54
+ return null;
55
+ }
56
+ }, [client, playerId]);
57
+ // Helper getters for common currencies
58
+ const xp = balances.find((b) => b.currency === 'xp')?.balance ?? 0;
59
+ const qwikCoins = balances.find((b) => b.currency === 'coins')?.balance ?? 0;
60
+ return {
61
+ balances,
62
+ xp,
63
+ qwikCoins,
64
+ loading,
65
+ error,
66
+ refresh: fetchBalances,
67
+ earn,
68
+ };
69
+ }
70
+ export default usePoints;
@@ -0,0 +1,12 @@
1
+ import type { Quest } from '../types';
2
+ interface UseQuestsReturn {
3
+ quests: Quest[];
4
+ completedQuests: Quest[];
5
+ activeQuests: Quest[];
6
+ loading: boolean;
7
+ error: Error | null;
8
+ refresh: () => Promise<void>;
9
+ }
10
+ export declare function useQuests(): UseQuestsReturn;
11
+ export default useQuests;
12
+ //# sourceMappingURL=useQuests.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useQuests.d.ts","sourceRoot":"","sources":["../../src/hooks/useQuests.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEtC,UAAU,eAAe;IACvB,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,eAAe,EAAE,KAAK,EAAE,CAAC;IACzB,YAAY,EAAE,KAAK,EAAE,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B;AAED,wBAAgB,SAAS,IAAI,eAAe,CA2C3C;AAED,eAAe,SAAS,CAAC"}
@@ -0,0 +1,41 @@
1
+ import { useState, useEffect, useCallback } from 'react';
2
+ import { usePlaybasis } from '../PlaybasisProvider';
3
+ export function useQuests() {
4
+ const { client, playerId } = usePlaybasis();
5
+ const [quests, setQuests] = useState([]);
6
+ const [loading, setLoading] = useState(true);
7
+ const [error, setError] = useState(null);
8
+ const fetchQuests = useCallback(async () => {
9
+ if (!playerId) {
10
+ setQuests([]);
11
+ setLoading(false);
12
+ return;
13
+ }
14
+ setLoading(true);
15
+ setError(null);
16
+ try {
17
+ const playerQuests = await client.getPlayerQuests(playerId);
18
+ setQuests(playerQuests);
19
+ }
20
+ catch (err) {
21
+ setError(err instanceof Error ? err : new Error('Failed to fetch quests'));
22
+ }
23
+ finally {
24
+ setLoading(false);
25
+ }
26
+ }, [client, playerId]);
27
+ useEffect(() => {
28
+ fetchQuests();
29
+ }, [fetchQuests]);
30
+ const activeQuests = quests.filter((q) => q.status === 'in_progress' || q.status === 'not_started');
31
+ const completedQuests = quests.filter((q) => q.status === 'completed');
32
+ return {
33
+ quests,
34
+ activeQuests,
35
+ completedQuests,
36
+ loading,
37
+ error,
38
+ refresh: fetchQuests,
39
+ };
40
+ }
41
+ export default useQuests;
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Validates and aggregates all SDK data hooks.
3
+ * Use this to ensure the "App" has all necessary data loaded.
4
+ */
5
+ export declare function useQwikApp(): {
6
+ isReady: boolean;
7
+ isLoading: boolean;
8
+ refreshAll: () => Promise<void>;
9
+ data: {
10
+ balances: import("..").PointBalance[];
11
+ quests: import("..").Quest[];
12
+ rewards: import("..").Reward[];
13
+ badges: import("..").Badge[];
14
+ };
15
+ };
16
+ //# sourceMappingURL=useQwikApp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useQwikApp.d.ts","sourceRoot":"","sources":["../../src/hooks/useQwikApp.ts"],"names":[],"mappings":"AAQA;;;GAGG;AACH,wBAAgB,UAAU;;;;;;;;;;EAoCzB"}
@@ -0,0 +1,42 @@
1
+ import { useEffect, useState } from 'react';
2
+ import { usePlaybasis } from '../PlaybasisProvider';
3
+ import { usePoints } from './usePoints';
4
+ import { useQuests } from './useQuests';
5
+ import { useRewards } from './useRewards';
6
+ import { useBadges } from './useBadges';
7
+ /**
8
+ * Validates and aggregates all SDK data hooks.
9
+ * Use this to ensure the "App" has all necessary data loaded.
10
+ */
11
+ export function useQwikApp() {
12
+ const { client, playerId } = usePlaybasis();
13
+ const { balances, refresh: refreshPoints, loading: loadingPoints } = usePoints();
14
+ const { quests, loading: loadingQuests } = useQuests();
15
+ const { rewards, loading: loadingRewards } = useRewards();
16
+ const { badges, loading: loadingBadges } = useBadges();
17
+ const [isReady, setIsReady] = useState(false);
18
+ // Check if critical data is loaded
19
+ const isLoading = loadingPoints || loadingQuests || loadingRewards || loadingBadges;
20
+ useEffect(() => {
21
+ if (!isLoading && playerId) {
22
+ setIsReady(true);
23
+ }
24
+ }, [isLoading, playerId]);
25
+ const refreshAll = async () => {
26
+ await Promise.all([
27
+ refreshPoints(),
28
+ // Add other refresh methods if exposed by hooks
29
+ ]);
30
+ };
31
+ return {
32
+ isReady,
33
+ isLoading,
34
+ refreshAll,
35
+ data: {
36
+ balances,
37
+ quests,
38
+ rewards,
39
+ badges,
40
+ },
41
+ };
42
+ }
@@ -0,0 +1,12 @@
1
+ import type { Reward, RedemptionResult } from '../types';
2
+ interface UseRewardsReturn {
3
+ rewards: Reward[];
4
+ loading: boolean;
5
+ error: Error | null;
6
+ refresh: () => Promise<void>;
7
+ redeem: (rewardId: string) => Promise<RedemptionResult>;
8
+ redeeming: boolean;
9
+ }
10
+ export declare function useRewards(): UseRewardsReturn;
11
+ export default useRewards;
12
+ //# sourceMappingURL=useRewards.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useRewards.d.ts","sourceRoot":"","sources":["../../src/hooks/useRewards.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAEzD,UAAU,gBAAgB;IACxB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,MAAM,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACxD,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,UAAU,IAAI,gBAAgB,CAyD7C;AAED,eAAe,UAAU,CAAC"}
@@ -0,0 +1,56 @@
1
+ import { useState, useEffect, useCallback } from 'react';
2
+ import { usePlaybasis } from '../PlaybasisProvider';
3
+ export function useRewards() {
4
+ const { client, playerId } = usePlaybasis();
5
+ const [rewards, setRewards] = useState([]);
6
+ const [loading, setLoading] = useState(true);
7
+ const [redeeming, setRedeeming] = useState(false);
8
+ const [error, setError] = useState(null);
9
+ const fetchRewards = useCallback(async () => {
10
+ setLoading(true);
11
+ setError(null);
12
+ try {
13
+ const allRewards = await client.getRewards();
14
+ setRewards(allRewards);
15
+ }
16
+ catch (err) {
17
+ setError(err instanceof Error ? err : new Error('Failed to fetch rewards'));
18
+ }
19
+ finally {
20
+ setLoading(false);
21
+ }
22
+ }, [client]);
23
+ useEffect(() => {
24
+ fetchRewards();
25
+ }, [fetchRewards]);
26
+ const redeem = useCallback(async (rewardId) => {
27
+ if (!playerId) {
28
+ return { success: false, message: 'No player ID set' };
29
+ }
30
+ setRedeeming(true);
31
+ try {
32
+ const result = await client.redeemReward(playerId, rewardId);
33
+ // Refresh rewards after redemption
34
+ await fetchRewards();
35
+ return result;
36
+ }
37
+ catch (err) {
38
+ return {
39
+ success: false,
40
+ message: err instanceof Error ? err.message : 'Redemption failed',
41
+ };
42
+ }
43
+ finally {
44
+ setRedeeming(false);
45
+ }
46
+ }, [client, playerId, fetchRewards]);
47
+ return {
48
+ rewards,
49
+ loading,
50
+ error,
51
+ refresh: fetchRewards,
52
+ redeem,
53
+ redeeming,
54
+ };
55
+ }
56
+ export default useRewards;
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Playbasis SDK for QwikCard College Rewards
3
+ *
4
+ * @packageDocumentation
5
+ */
6
+ export { PlaybasisProvider, usePlaybasis } from './PlaybasisProvider';
7
+ export { PlaybasisClient } from './api/client';
8
+ export { useQuests } from './hooks/useQuests';
9
+ export { useRewards } from './hooks/useRewards';
10
+ export { useBadges } from './hooks/useBadges';
11
+ export { usePoints } from './hooks/usePoints';
12
+ export { QuestProgress } from './components/QuestProgress';
13
+ export { RewardCard } from './components/RewardCard';
14
+ export { BadgeIcon } from './components/BadgeIcon';
15
+ export { PointsBalance } from './components/PointsBalance';
16
+ export * from './theme/context';
17
+ export * from './theme/tokens';
18
+ export * from './components/GradientCard';
19
+ export * from './components/Badge';
20
+ export * from './components/Button';
21
+ export * from './components/ProgressBar';
22
+ export * from './components/RadialGauge';
23
+ export * from './components/RulesModal';
24
+ export { QwikCardApp } from './QwikCardApp';
25
+ export { useQwikApp } from './hooks/useQwikApp';
26
+ export * from './types';
27
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAG3D,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAG/B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AAGxC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,cAAc,SAAS,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Playbasis SDK for QwikCard College Rewards
3
+ *
4
+ * @packageDocumentation
5
+ */
6
+ export { PlaybasisProvider, usePlaybasis } from './PlaybasisProvider';
7
+ export { PlaybasisClient } from './api/client';
8
+ export { useQuests } from './hooks/useQuests';
9
+ export { useRewards } from './hooks/useRewards';
10
+ export { useBadges } from './hooks/useBadges';
11
+ export { usePoints } from './hooks/usePoints';
12
+ export { QuestProgress } from './components/QuestProgress';
13
+ export { RewardCard } from './components/RewardCard';
14
+ export { BadgeIcon } from './components/BadgeIcon';
15
+ export { PointsBalance } from './components/PointsBalance';
16
+ // Theme
17
+ export * from './theme/context';
18
+ export * from './theme/tokens';
19
+ // New Components
20
+ export * from './components/GradientCard';
21
+ export * from './components/Badge'; // Exports StatBadge
22
+ export * from './components/Button';
23
+ export * from './components/ProgressBar';
24
+ export * from './components/RadialGauge';
25
+ export * from './components/RulesModal';
26
+ // App
27
+ export { QwikCardApp } from './QwikCardApp';
28
+ export { useQwikApp } from './hooks/useQwikApp';
29
+ export * from './types';
@@ -0,0 +1,8 @@
1
+ import { ReactNode } from 'react';
2
+ import { QwikTheme } from './tokens';
3
+ export declare const ThemeProvider: ({ children, theme, }: {
4
+ children: ReactNode;
5
+ theme?: QwikTheme;
6
+ }) => import("react/jsx-runtime").JSX.Element;
7
+ export declare const useTheme: () => QwikTheme;
8
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/theme/context.tsx"],"names":[],"mappings":"AAAA,OAAc,EAA6B,SAAS,EAAE,MAAM,OAAO,CAAC;AAEpE,OAAO,EAAE,SAAS,EAAa,MAAM,UAAU,CAAC;AAIhD,eAAO,MAAM,aAAa,GAAI,sBAG3B;IACD,QAAQ,EAAE,SAAS,CAAC;IACpB,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB,4CAEA,CAAC;AAEF,eAAO,MAAM,QAAQ,iBAAiC,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { createContext, useContext } from 'react';
3
+ import { qwikTheme } from './tokens';
4
+ const ThemeContext = createContext(qwikTheme);
5
+ export const ThemeProvider = ({ children, theme = qwikTheme, }) => {
6
+ return _jsx(ThemeContext.Provider, { value: theme, children: children });
7
+ };
8
+ export const useTheme = () => useContext(ThemeContext);
@@ -0,0 +1,35 @@
1
+ export interface ColorTokens {
2
+ primary: string;
3
+ secondary: string;
4
+ background: string;
5
+ surface: string;
6
+ text: {
7
+ primary: string;
8
+ secondary: string;
9
+ onPrimary: string;
10
+ };
11
+ gradients: {
12
+ sunset: [string, string, string, string];
13
+ card: [string, string, string];
14
+ button: [string, string];
15
+ glass: [string, string];
16
+ };
17
+ }
18
+ export interface QwikTheme {
19
+ colors: ColorTokens;
20
+ spacing: {
21
+ xs: number;
22
+ s: number;
23
+ m: number;
24
+ l: number;
25
+ xl: number;
26
+ };
27
+ borderRadius: {
28
+ s: number;
29
+ m: number;
30
+ l: number;
31
+ xl: number;
32
+ };
33
+ }
34
+ export declare const qwikTheme: QwikTheme;
35
+ //# sourceMappingURL=tokens.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../../src/theme/tokens.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE;QACJ,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,SAAS,EAAE;QACT,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QACzC,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAC/B,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACzB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACzB,CAAC;CACH;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,EAAE;QACP,EAAE,EAAE,MAAM,CAAC;QACX,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;QACV,EAAE,EAAE,MAAM,CAAC;KACZ,CAAC;IACF,YAAY,EAAE;QACZ,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;QACV,EAAE,EAAE,MAAM,CAAC;KACZ,CAAC;CACH;AAED,eAAO,MAAM,SAAS,EAAE,SAgCvB,CAAC"}
@@ -0,0 +1,33 @@
1
+ export const qwikTheme = {
2
+ colors: {
3
+ primary: '#FF4500', // OrangeRed
4
+ secondary: '#FFD4C8', // Pale Coral
5
+ background: '#0F1419', // Deep dark
6
+ surface: 'rgba(255, 255, 255, 0.08)',
7
+ text: {
8
+ primary: '#FFFFFF',
9
+ secondary: '#94A3B8',
10
+ onPrimary: '#FFFFFF',
11
+ },
12
+ gradients: {
13
+ // Smoother sunset: Pink -> Orange -> Gold -> Purple
14
+ sunset: ['#FF69B4', '#FF8C00', '#FFD700', '#DA70D6'],
15
+ card: ['rgba(255, 255, 255, 0.1)', 'rgba(255, 255, 255, 0.05)', 'rgba(255, 255, 255, 0)'],
16
+ button: ['#FF4500', '#FF69B4'],
17
+ glass: ['rgba(255, 255, 255, 0.15)', 'rgba(255, 255, 255, 0.05)'],
18
+ },
19
+ },
20
+ spacing: {
21
+ xs: 4,
22
+ s: 8,
23
+ m: 16,
24
+ l: 24,
25
+ xl: 32,
26
+ },
27
+ borderRadius: {
28
+ s: 8,
29
+ m: 12,
30
+ l: 16,
31
+ xl: 24,
32
+ },
33
+ };
@@ -0,0 +1,119 @@
1
+ /**
2
+ * TypeScript types for QwikCard SDK
3
+ */
4
+ export interface Player {
5
+ id: string;
6
+ displayName: string;
7
+ email?: string;
8
+ metadata?: PlayerMetadata;
9
+ createdAt: string;
10
+ updatedAt: string;
11
+ }
12
+ export interface PlayerMetadata {
13
+ externalId?: string;
14
+ qwikTag?: string;
15
+ collegeName?: string;
16
+ qwikGoals?: string[];
17
+ workStatus?: string;
18
+ [key: string]: unknown;
19
+ }
20
+ export interface PointBalance {
21
+ currency: string;
22
+ balance: number;
23
+ updatedAt: string;
24
+ }
25
+ export type Currency = 'xp' | 'coins';
26
+ export interface Quest {
27
+ id: string;
28
+ name: string;
29
+ description: string;
30
+ status: QuestStatus;
31
+ progress: number;
32
+ target: number;
33
+ rewards: QuestReward[];
34
+ expiresAt?: string;
35
+ completedAt?: string;
36
+ }
37
+ export type QuestStatus = 'not_started' | 'in_progress' | 'completed' | 'expired';
38
+ export interface QuestReward {
39
+ type: 'points' | 'badge' | 'reward';
40
+ currency?: string;
41
+ amount?: number;
42
+ badgeId?: string;
43
+ rewardId?: string;
44
+ }
45
+ export interface Badge {
46
+ id: string;
47
+ name: string;
48
+ description: string;
49
+ imageUrl?: string;
50
+ earnedAt?: string;
51
+ isEarned: boolean;
52
+ }
53
+ export interface Reward {
54
+ id: string;
55
+ name: string;
56
+ description: string;
57
+ imageUrl?: string;
58
+ cost: number;
59
+ currency: string;
60
+ available: boolean;
61
+ expiresAt?: string;
62
+ }
63
+ export interface RedemptionResult {
64
+ success: boolean;
65
+ redemptionId?: string;
66
+ code?: string;
67
+ message?: string;
68
+ }
69
+ export interface LeaderboardEntry {
70
+ playerId: string;
71
+ displayName: string;
72
+ rank: number;
73
+ score: number;
74
+ metadata?: PlayerMetadata;
75
+ }
76
+ export interface PlayerRank {
77
+ playerId: string;
78
+ rank: number;
79
+ score: number;
80
+ above: LeaderboardEntry[];
81
+ below: LeaderboardEntry[];
82
+ }
83
+ export type QwikCardEventType = 'card.purchase' | 'card.deposit' | 'card.atm' | 'qwikit.sent' | 'qwikit.received' | 'referral.signup' | 'profile.complete';
84
+ export interface TrackEventInput {
85
+ type: QwikCardEventType;
86
+ playerId: string;
87
+ referenceId?: string;
88
+ data?: Record<string, unknown>;
89
+ }
90
+ export interface CardPurchaseData {
91
+ i2cTransId: string;
92
+ amount: number;
93
+ mcc?: string;
94
+ category?: string;
95
+ merchant?: string;
96
+ }
97
+ export interface QwikItData {
98
+ recipientPlayerId: string;
99
+ amount: number;
100
+ senderQwikTag?: string;
101
+ recipientQwikTag?: string;
102
+ }
103
+ export interface ApiResponse<T> {
104
+ success: boolean;
105
+ data?: T;
106
+ error?: ApiError;
107
+ }
108
+ export interface ApiError {
109
+ code: string;
110
+ message: string;
111
+ details?: Record<string, unknown>;
112
+ }
113
+ export interface PaginatedResponse<T> {
114
+ items: T[];
115
+ total: number;
116
+ cursor?: string;
117
+ hasMore: boolean;
118
+ }
119
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ /**
2
+ * TypeScript types for QwikCard SDK
3
+ */
4
+ export {};