react-achievements 2.2.2 → 3.0.1

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 (77) hide show
  1. package/README.md +377 -401
  2. package/dist/index.d.ts +222 -8
  3. package/dist/index.js +631 -0
  4. package/dist/index.js.map +1 -0
  5. package/dist/stories/Button.d.ts +28 -0
  6. package/dist/stories/Button.stories.d.ts +23 -0
  7. package/dist/stories/Header.d.ts +13 -0
  8. package/dist/stories/Header.stories.d.ts +18 -0
  9. package/dist/stories/Page.d.ts +3 -0
  10. package/dist/stories/Page.stories.d.ts +12 -0
  11. package/dist/types/__mocks__/confetti-wrapper.d.ts +5 -0
  12. package/dist/types/__mocks__/react-confetti.d.ts +3 -0
  13. package/dist/types/__mocks__/react-toastify.d.ts +13 -0
  14. package/dist/types/core/components/BadgesButton.d.ts +10 -0
  15. package/dist/types/core/components/BadgesModal.d.ts +11 -0
  16. package/dist/types/core/components/ConfettiWrapper.d.ts +6 -0
  17. package/dist/types/core/context/AchievementContext.d.ts +5 -0
  18. package/dist/types/core/icons/defaultIcons.d.ts +81 -0
  19. package/dist/types/core/storage/LocalStorage.d.ts +16 -0
  20. package/dist/types/core/storage/MemoryStorage.d.ts +11 -0
  21. package/dist/types/core/styles/defaultStyles.d.ts +2 -0
  22. package/dist/types/core/types.d.ts +74 -0
  23. package/dist/types/hooks/useAchievements.d.ts +1 -0
  24. package/dist/types/index.d.ts +10 -0
  25. package/dist/types/providers/AchievementProvider.d.ts +24 -0
  26. package/dist/types/setupTests.d.ts +1 -0
  27. package/dist/types/stories/Button.d.ts +16 -0
  28. package/dist/types/stories/Button.stories.d.ts +23 -0
  29. package/dist/types/stories/Header.d.ts +13 -0
  30. package/dist/types/stories/Header.stories.d.ts +18 -0
  31. package/dist/types/stories/Page.d.ts +3 -0
  32. package/dist/types/stories/Page.stories.d.ts +12 -0
  33. package/package.json +73 -54
  34. package/.idea/jsLibraryMappings.xml +0 -6
  35. package/.idea/modules.xml +0 -8
  36. package/.idea/react-achievements.iml +0 -12
  37. package/.idea/vcs.xml +0 -6
  38. package/coverage/clover.xml +0 -131
  39. package/coverage/coverage-final.json +0 -9
  40. package/coverage/lcov-report/base.css +0 -224
  41. package/coverage/lcov-report/block-navigation.js +0 -87
  42. package/coverage/lcov-report/favicon.png +0 -0
  43. package/coverage/lcov-report/index.html +0 -146
  44. package/coverage/lcov-report/prettify.css +0 -1
  45. package/coverage/lcov-report/prettify.js +0 -2
  46. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  47. package/coverage/lcov-report/sorter.js +0 -196
  48. package/coverage/lcov-report/src/components/AchievementModal.tsx.html +0 -229
  49. package/coverage/lcov-report/src/components/BadgesButton.tsx.html +0 -169
  50. package/coverage/lcov-report/src/components/BadgesModal.tsx.html +0 -253
  51. package/coverage/lcov-report/src/components/ConfettiWrapper.tsx.html +0 -157
  52. package/coverage/lcov-report/src/components/index.html +0 -161
  53. package/coverage/lcov-report/src/context/AchievementContext.tsx.html +0 -505
  54. package/coverage/lcov-report/src/context/index.html +0 -116
  55. package/coverage/lcov-report/src/index.html +0 -146
  56. package/coverage/lcov-report/src/index.ts.html +0 -121
  57. package/coverage/lcov-report/src/react-confetti.d.ts.html +0 -139
  58. package/coverage/lcov-report/src/react-use.d.ts.html +0 -94
  59. package/coverage/lcov.info +0 -240
  60. package/demo/src/AchievementConfig.ts +0 -0
  61. package/public/badges/icon1.svg +0 -1
  62. package/rollup.config.mjs +0 -34
  63. package/src/assets/defaultIcons.ts +0 -100
  64. package/src/components/BadgesButton.tsx +0 -49
  65. package/src/components/BadgesModal.tsx +0 -47
  66. package/src/components/ConfettiWrapper.tsx +0 -17
  67. package/src/defaultStyles.ts +0 -86
  68. package/src/hooks/useAchievement.ts +0 -17
  69. package/src/index.ts +0 -25
  70. package/src/providers/AchievementProvider.tsx +0 -202
  71. package/src/react-confetti.d.ts +0 -19
  72. package/src/react-use.d.ts +0 -4
  73. package/src/redux/achievementSlice.ts +0 -116
  74. package/src/redux/notificationSlice.ts +0 -26
  75. package/src/redux/store.ts +0 -16
  76. package/src/types.ts +0 -39
  77. package/tsconfig.json +0 -113
package/dist/index.js ADDED
@@ -0,0 +1,631 @@
1
+ import React, { createContext, useState, useRef, useEffect, useContext } from 'react';
2
+ import Modal from 'react-modal';
3
+ import Confetti from 'react-confetti';
4
+ import { useWindowSize } from 'react-use';
5
+ import { toast, ToastContainer } from 'react-toastify';
6
+ import 'react-toastify/dist/ReactToastify.css';
7
+
8
+ const isDate = (value) => {
9
+ return value instanceof Date;
10
+ };
11
+ var StorageType;
12
+ (function (StorageType) {
13
+ StorageType["Local"] = "local";
14
+ StorageType["Memory"] = "memory";
15
+ })(StorageType || (StorageType = {}));
16
+
17
+ class LocalStorage {
18
+ constructor(storageKey) {
19
+ this.storageKey = storageKey;
20
+ }
21
+ serializeValue(value) {
22
+ if (isDate(value)) {
23
+ return { __type: 'Date', value: value.toISOString() };
24
+ }
25
+ return value;
26
+ }
27
+ deserializeValue(value) {
28
+ if (value && typeof value === 'object' && value.__type === 'Date') {
29
+ return new Date(value.value);
30
+ }
31
+ return value;
32
+ }
33
+ serializeMetrics(metrics) {
34
+ const serialized = {};
35
+ for (const [key, values] of Object.entries(metrics)) {
36
+ serialized[key] = values.map(this.serializeValue);
37
+ }
38
+ return serialized;
39
+ }
40
+ deserializeMetrics(metrics) {
41
+ if (!metrics)
42
+ return {};
43
+ const deserialized = {};
44
+ for (const [key, values] of Object.entries(metrics)) {
45
+ deserialized[key] = values.map(this.deserializeValue);
46
+ }
47
+ return deserialized;
48
+ }
49
+ getStorageData() {
50
+ const data = localStorage.getItem(this.storageKey);
51
+ if (!data)
52
+ return { metrics: {}, unlockedAchievements: [] };
53
+ try {
54
+ const parsed = JSON.parse(data);
55
+ return {
56
+ metrics: this.deserializeMetrics(parsed.metrics || {}),
57
+ unlockedAchievements: parsed.unlockedAchievements || []
58
+ };
59
+ }
60
+ catch (e) {
61
+ return { metrics: {}, unlockedAchievements: [] };
62
+ }
63
+ }
64
+ setStorageData(data) {
65
+ try {
66
+ const serialized = {
67
+ metrics: this.serializeMetrics(data.metrics),
68
+ unlockedAchievements: data.unlockedAchievements
69
+ };
70
+ localStorage.setItem(this.storageKey, JSON.stringify(serialized));
71
+ }
72
+ catch (error) {
73
+ // Silently fail on quota exceeded errors
74
+ if (error instanceof Error &&
75
+ (error.name === 'QuotaExceededError' ||
76
+ error.name === 'NS_ERROR_DOM_QUOTA_REACHED' ||
77
+ error.message.includes('QuotaExceeded'))) {
78
+ return;
79
+ }
80
+ throw error;
81
+ }
82
+ }
83
+ getMetrics() {
84
+ return this.getStorageData().metrics;
85
+ }
86
+ setMetrics(metrics) {
87
+ const data = this.getStorageData();
88
+ this.setStorageData(Object.assign(Object.assign({}, data), { metrics }));
89
+ }
90
+ getUnlockedAchievements() {
91
+ return this.getStorageData().unlockedAchievements;
92
+ }
93
+ setUnlockedAchievements(achievements) {
94
+ const data = this.getStorageData();
95
+ this.setStorageData(Object.assign(Object.assign({}, data), { unlockedAchievements: achievements }));
96
+ }
97
+ clear() {
98
+ localStorage.removeItem(this.storageKey);
99
+ }
100
+ }
101
+
102
+ const getPositionStyles = (position) => {
103
+ const base = {
104
+ position: 'fixed',
105
+ margin: '20px',
106
+ zIndex: 1000,
107
+ };
108
+ switch (position) {
109
+ case 'top-left':
110
+ return Object.assign(Object.assign({}, base), { top: 0, left: 0 });
111
+ case 'top-right':
112
+ return Object.assign(Object.assign({}, base), { top: 0, right: 0 });
113
+ case 'bottom-left':
114
+ return Object.assign(Object.assign({}, base), { bottom: 0, left: 0 });
115
+ case 'bottom-right':
116
+ return Object.assign(Object.assign({}, base), { bottom: 0, right: 0 });
117
+ }
118
+ };
119
+ const BadgesButton = ({ onClick, position, styles = {}, unlockedAchievements }) => {
120
+ const baseStyles = Object.assign(Object.assign({ backgroundColor: '#4CAF50', color: 'white', padding: '10px 20px', border: 'none', borderRadius: '20px', cursor: 'pointer', display: 'flex', alignItems: 'center', gap: '8px', fontSize: '16px', boxShadow: '0 2px 5px rgba(0,0,0,0.2)', transition: 'transform 0.2s ease-in-out' }, getPositionStyles(position)), styles);
121
+ return (React.createElement("button", { onClick: onClick, style: baseStyles, onMouseEnter: (e) => {
122
+ e.target.style.transform = 'scale(1.05)';
123
+ }, onMouseLeave: (e) => {
124
+ e.target.style.transform = 'scale(1)';
125
+ } },
126
+ "\uD83C\uDFC6 Achievements (",
127
+ unlockedAchievements.length,
128
+ ")"));
129
+ };
130
+
131
+ const defaultAchievementIcons = {
132
+ // General Progress & Milestones
133
+ levelUp: '🏆',
134
+ questComplete: '📜',
135
+ monsterDefeated: '⚔️',
136
+ itemCollected: '📦',
137
+ challengeCompleted: '🏁',
138
+ milestoneReached: '🏅',
139
+ firstStep: '👣',
140
+ newBeginnings: '🌱',
141
+ breakthrough: '💡',
142
+ growth: '📈',
143
+ // Social & Engagement
144
+ shared: '🔗',
145
+ liked: '❤️',
146
+ commented: '💬',
147
+ followed: '👥',
148
+ invited: '🤝',
149
+ communityMember: '🏘️',
150
+ supporter: '🌟',
151
+ connected: '🌐',
152
+ participant: '🙋',
153
+ influencer: '📣',
154
+ // Time & Activity
155
+ activeDay: '☀️',
156
+ activeWeek: '📅',
157
+ activeMonth: '🗓️',
158
+ earlyBird: '⏰',
159
+ nightOwl: '🌙',
160
+ streak: '🔥',
161
+ dedicated: '⏳',
162
+ punctual: '⏱️',
163
+ consistent: '🔄',
164
+ marathon: '🏃',
165
+ // Creativity & Skill
166
+ artist: '🎨',
167
+ writer: '✍️',
168
+ innovator: '🔬',
169
+ creator: '🛠️',
170
+ expert: '🎓',
171
+ master: '👑',
172
+ pioneer: '🚀',
173
+ performer: '🎭',
174
+ thinker: '🧠',
175
+ explorer: '🗺️',
176
+ // Achievement Types
177
+ bronze: '🥉',
178
+ silver: '🥈',
179
+ gold: '🥇',
180
+ diamond: '💎',
181
+ legendary: '✨',
182
+ epic: '💥',
183
+ rare: '🔮',
184
+ common: '🔘',
185
+ special: '🎁',
186
+ hidden: '❓',
187
+ // Numbers & Counters
188
+ one: '1️⃣',
189
+ ten: '🔟',
190
+ hundred: '💯',
191
+ thousand: '🔢',
192
+ // Actions & Interactions
193
+ clicked: '🖱️',
194
+ used: '🔑',
195
+ found: '🔍',
196
+ built: '🧱',
197
+ solved: '🧩',
198
+ discovered: '🔭',
199
+ unlocked: '🔓',
200
+ upgraded: '⬆️',
201
+ repaired: '🔧',
202
+ defended: '🛡️',
203
+ // Placeholders
204
+ default: '⭐', // A fallback icon
205
+ loading: '⏳',
206
+ error: '⚠️',
207
+ success: '✅',
208
+ failure: '❌',
209
+ // Miscellaneous
210
+ trophy: '🏆',
211
+ star: '⭐',
212
+ flag: '🚩',
213
+ puzzle: '🧩',
214
+ gem: '💎',
215
+ crown: '👑',
216
+ medal: '🏅',
217
+ ribbon: '🎗️',
218
+ badge: '🎖️',
219
+ shield: '🛡️',
220
+ };
221
+
222
+ const BadgesModal = ({ isOpen, onClose, achievements, styles = {}, icons = {} }) => {
223
+ // Merge custom icons with default icons, with custom icons taking precedence
224
+ const mergedIcons = Object.assign(Object.assign({}, defaultAchievementIcons), icons);
225
+ const defaultOverlayStyle = {
226
+ position: 'fixed',
227
+ top: 0,
228
+ left: 0,
229
+ right: 0,
230
+ bottom: 0,
231
+ backgroundColor: 'rgba(0, 0, 0, 0.75)',
232
+ display: 'flex',
233
+ alignItems: 'center',
234
+ justifyContent: 'center',
235
+ zIndex: 1000,
236
+ };
237
+ const defaultContentStyle = {
238
+ position: 'relative',
239
+ background: '#fff',
240
+ borderRadius: '8px',
241
+ padding: '20px',
242
+ maxWidth: '500px',
243
+ width: '90%',
244
+ maxHeight: '80vh',
245
+ overflow: 'auto',
246
+ };
247
+ const defaultHeaderStyle = {
248
+ display: 'flex',
249
+ justifyContent: 'space-between',
250
+ alignItems: 'center',
251
+ marginBottom: '20px',
252
+ };
253
+ const defaultCloseButtonStyle = {
254
+ background: 'none',
255
+ border: 'none',
256
+ fontSize: '24px',
257
+ cursor: 'pointer',
258
+ padding: '0',
259
+ };
260
+ const defaultAchievementListStyle = {
261
+ display: 'flex',
262
+ flexDirection: 'column',
263
+ gap: '16px',
264
+ };
265
+ const defaultAchievementItemStyle = {
266
+ display: 'flex',
267
+ gap: '16px',
268
+ padding: '16px',
269
+ borderRadius: '8px',
270
+ backgroundColor: '#f5f5f5',
271
+ alignItems: 'center',
272
+ };
273
+ const defaultAchievementTitleStyle = {
274
+ margin: '0',
275
+ fontSize: '18px',
276
+ fontWeight: 'bold',
277
+ };
278
+ const defaultAchievementDescriptionStyle = {
279
+ margin: '4px 0 0 0',
280
+ color: '#666',
281
+ };
282
+ const defaultAchievementIconStyle = {
283
+ fontSize: '32px',
284
+ display: 'flex',
285
+ alignItems: 'center',
286
+ justifyContent: 'center',
287
+ };
288
+ return (React.createElement(Modal, { isOpen: isOpen, onRequestClose: onClose, style: {
289
+ overlay: Object.assign(Object.assign({}, defaultOverlayStyle), styles === null || styles === void 0 ? void 0 : styles.overlay),
290
+ content: Object.assign(Object.assign({}, defaultContentStyle), styles === null || styles === void 0 ? void 0 : styles.content)
291
+ }, contentLabel: "Achievements" },
292
+ React.createElement("div", { style: Object.assign(Object.assign({}, defaultHeaderStyle), styles === null || styles === void 0 ? void 0 : styles.header) },
293
+ React.createElement("h2", { style: { margin: 0 } }, "\uD83C\uDFC6 Achievements"),
294
+ React.createElement("button", { onClick: onClose, style: Object.assign(Object.assign({}, defaultCloseButtonStyle), styles === null || styles === void 0 ? void 0 : styles.closeButton), "aria-label": "Close" }, "\u00D7")),
295
+ React.createElement("div", { style: Object.assign(Object.assign({}, defaultAchievementListStyle), styles === null || styles === void 0 ? void 0 : styles.achievementList) },
296
+ achievements.map((achievement) => (React.createElement("div", { key: achievement.achievementId, style: Object.assign(Object.assign({}, defaultAchievementItemStyle), styles === null || styles === void 0 ? void 0 : styles.achievementItem) },
297
+ achievement.achievementIconKey && (React.createElement("div", { style: Object.assign(Object.assign({}, defaultAchievementIconStyle), styles === null || styles === void 0 ? void 0 : styles.achievementIcon) }, achievement.achievementIconKey in mergedIcons
298
+ ? mergedIcons[achievement.achievementIconKey]
299
+ : mergedIcons.default || '⭐')),
300
+ React.createElement("div", null,
301
+ React.createElement("h3", { style: Object.assign(Object.assign({}, defaultAchievementTitleStyle), styles === null || styles === void 0 ? void 0 : styles.achievementTitle) }, achievement.achievementTitle),
302
+ React.createElement("p", { style: Object.assign(Object.assign({}, defaultAchievementDescriptionStyle), styles === null || styles === void 0 ? void 0 : styles.achievementDescription) }, achievement.achievementDescription))))),
303
+ achievements.length === 0 && (React.createElement("p", { style: { textAlign: 'center', color: '#666' } }, "No achievements unlocked yet. Keep going!")))));
304
+ };
305
+
306
+ const ConfettiWrapper = ({ show }) => {
307
+ const { width, height } = useWindowSize();
308
+ if (!show)
309
+ return null;
310
+ return (React.createElement(Confetti, { width: width, height: height, numberOfPieces: 200, recycle: false, style: {
311
+ position: 'fixed',
312
+ top: 0,
313
+ left: 0,
314
+ zIndex: 1001,
315
+ pointerEvents: 'none',
316
+ } }));
317
+ };
318
+
319
+ class MemoryStorage {
320
+ constructor() {
321
+ this.metrics = {};
322
+ this.unlockedAchievements = [];
323
+ }
324
+ getMetrics() {
325
+ return this.metrics;
326
+ }
327
+ setMetrics(metrics) {
328
+ this.metrics = metrics;
329
+ }
330
+ getUnlockedAchievements() {
331
+ return this.unlockedAchievements;
332
+ }
333
+ setUnlockedAchievements(achievements) {
334
+ this.unlockedAchievements = achievements;
335
+ }
336
+ clear() {
337
+ this.metrics = {};
338
+ this.unlockedAchievements = [];
339
+ }
340
+ }
341
+
342
+ const AchievementContext = createContext(undefined);
343
+ const AchievementProvider = ({ achievements, storage = StorageType.Local, children, icons = {}, }) => {
344
+ const [achievementState, setAchievementState] = useState({
345
+ unlocked: [],
346
+ all: achievements,
347
+ });
348
+ const [metrics, setMetrics] = useState({});
349
+ const seenAchievementsRef = useRef(new Set());
350
+ const initialLoadRef = useRef(false);
351
+ const storageRef = useRef(null);
352
+ const metricsUpdatedRef = useRef(false);
353
+ const [showConfetti, setShowConfetti] = useState(false);
354
+ const [currentAchievement, setCurrentAchievement] = useState(null);
355
+ if (!storageRef.current) {
356
+ if (typeof storage === 'string') {
357
+ if (storage === StorageType.Local) {
358
+ storageRef.current = new LocalStorage('achievements');
359
+ }
360
+ else if (storage === StorageType.Memory) {
361
+ storageRef.current = new MemoryStorage();
362
+ }
363
+ else {
364
+ throw new Error(`Unsupported storage type: ${storage}`);
365
+ }
366
+ }
367
+ else {
368
+ storageRef.current = storage;
369
+ }
370
+ }
371
+ const storageImpl = storageRef.current;
372
+ const getNotifiedAchievementsKey = () => {
373
+ return 'notifiedAchievements';
374
+ };
375
+ const loadNotifiedAchievements = () => {
376
+ var _a, _b;
377
+ try {
378
+ if (storageImpl instanceof LocalStorage) {
379
+ const data = localStorage.getItem(`achievements_${getNotifiedAchievementsKey()}`);
380
+ if (data) {
381
+ const notifiedAchievements = JSON.parse(data);
382
+ return new Set(notifiedAchievements);
383
+ }
384
+ }
385
+ else {
386
+ const data = (_b = (_a = storageImpl).getItem) === null || _b === void 0 ? void 0 : _b.call(_a, getNotifiedAchievementsKey());
387
+ if (data) {
388
+ return new Set(JSON.parse(data));
389
+ }
390
+ }
391
+ }
392
+ catch (e) {
393
+ console.error('Error loading notified achievements', e);
394
+ }
395
+ return new Set();
396
+ };
397
+ const saveNotifiedAchievements = (achievements) => {
398
+ var _a, _b;
399
+ try {
400
+ const achievementsArray = Array.from(achievements);
401
+ if (storageImpl instanceof LocalStorage) {
402
+ localStorage.setItem(`achievements_${getNotifiedAchievementsKey()}`, JSON.stringify(achievementsArray));
403
+ }
404
+ else {
405
+ (_b = (_a = storageImpl).setItem) === null || _b === void 0 ? void 0 : _b.call(_a, getNotifiedAchievementsKey(), JSON.stringify(achievementsArray));
406
+ }
407
+ }
408
+ catch (e) {
409
+ console.error('Error saving notified achievements', e);
410
+ }
411
+ };
412
+ useEffect(() => {
413
+ if (!initialLoadRef.current) {
414
+ const savedUnlocked = storageImpl.getUnlockedAchievements() || [];
415
+ const savedMetrics = storageImpl.getMetrics() || {};
416
+ seenAchievementsRef.current = loadNotifiedAchievements();
417
+ if (savedUnlocked.length > 0 || Object.keys(savedMetrics).length > 0) {
418
+ setAchievementState(prev => (Object.assign(Object.assign({}, prev), { unlocked: savedUnlocked })));
419
+ setMetrics(savedMetrics);
420
+ savedUnlocked.forEach(id => {
421
+ seenAchievementsRef.current.add(id);
422
+ });
423
+ saveNotifiedAchievements(seenAchievementsRef.current);
424
+ }
425
+ initialLoadRef.current = true;
426
+ }
427
+ }, []);
428
+ useEffect(() => {
429
+ if (Object.keys(metrics).length === 0 || !metricsUpdatedRef.current)
430
+ return;
431
+ metricsUpdatedRef.current = false;
432
+ let newlyUnlockedAchievements = [];
433
+ let achievementToShow = null;
434
+ Object.entries(achievements).forEach(([metricName, metricAchievements]) => {
435
+ const currentValue = metrics[metricName];
436
+ if (currentValue !== undefined) {
437
+ metricAchievements.forEach((achievement) => {
438
+ const state = { metrics, unlockedAchievements: achievementState.unlocked };
439
+ const valueToCheck = currentValue;
440
+ const achievementId = achievement.achievementDetails.achievementId;
441
+ if (achievement.isConditionMet(valueToCheck, state)) {
442
+ if (!achievementState.unlocked.includes(achievementId) &&
443
+ !newlyUnlockedAchievements.includes(achievementId)) {
444
+ newlyUnlockedAchievements.push(achievementId);
445
+ if (!seenAchievementsRef.current.has(achievementId)) {
446
+ achievementToShow = achievement.achievementDetails;
447
+ }
448
+ }
449
+ }
450
+ });
451
+ }
452
+ });
453
+ if (newlyUnlockedAchievements.length > 0) {
454
+ const allUnlocked = [...achievementState.unlocked, ...newlyUnlockedAchievements];
455
+ setAchievementState(prev => (Object.assign(Object.assign({}, prev), { unlocked: allUnlocked })));
456
+ storageImpl.setUnlockedAchievements(allUnlocked);
457
+ if (achievementToShow) {
458
+ const achievement = achievementToShow;
459
+ // Show toast notification
460
+ let iconToDisplay = '🏆';
461
+ if (achievement.achievementIconKey && achievement.achievementIconKey in icons) {
462
+ iconToDisplay = icons[achievement.achievementIconKey];
463
+ }
464
+ const toastId = achievement.achievementId
465
+ ? `achievement-${achievement.achievementId}`
466
+ : `achievement-${Date.now()}`;
467
+ toast.success(React.createElement("div", { style: { display: 'flex', alignItems: 'center' } },
468
+ React.createElement("span", { style: { fontSize: '2em', marginRight: '10px' } }, iconToDisplay),
469
+ React.createElement("div", null,
470
+ React.createElement("h4", { style: { margin: '0 0 8px 0' } }, "Achievement Unlocked! \uD83C\uDF89"),
471
+ React.createElement("div", { style: { fontWeight: 'bold' } }, achievement.achievementTitle),
472
+ React.createElement("div", { style: { color: '#666' } }, achievement.achievementDescription))), {
473
+ position: "top-right",
474
+ autoClose: 5000,
475
+ hideProgressBar: false,
476
+ closeOnClick: true,
477
+ pauseOnHover: true,
478
+ draggable: true,
479
+ progress: undefined,
480
+ toastId
481
+ });
482
+ // Update seen achievements
483
+ if (achievement.achievementId) {
484
+ seenAchievementsRef.current.add(achievement.achievementId);
485
+ saveNotifiedAchievements(seenAchievementsRef.current);
486
+ }
487
+ // Show confetti
488
+ setCurrentAchievement(achievement);
489
+ setShowConfetti(true);
490
+ // Hide confetti after 5 seconds
491
+ const timer = setTimeout(() => {
492
+ setShowConfetti(false);
493
+ setCurrentAchievement(null);
494
+ }, 5000);
495
+ return () => clearTimeout(timer);
496
+ }
497
+ }
498
+ }, [metrics, achievementState.unlocked, achievements, icons]);
499
+ const update = (newMetrics) => {
500
+ metricsUpdatedRef.current = true;
501
+ const updatedMetrics = Object.assign({}, metrics);
502
+ Object.entries(newMetrics).forEach(([key, value]) => {
503
+ updatedMetrics[key] = value;
504
+ });
505
+ setMetrics(updatedMetrics);
506
+ const storageMetrics = Object.entries(updatedMetrics).reduce((acc, [key, value]) => (Object.assign(Object.assign({}, acc), { [key]: Array.isArray(value) ? value : [value] })), {});
507
+ storageImpl.setMetrics(storageMetrics);
508
+ };
509
+ const reset = () => {
510
+ var _a, _b;
511
+ storageImpl.clear();
512
+ if (storageImpl instanceof LocalStorage) {
513
+ localStorage.removeItem(`achievements_${getNotifiedAchievementsKey()}`);
514
+ }
515
+ else {
516
+ (_b = (_a = storageImpl).removeItem) === null || _b === void 0 ? void 0 : _b.call(_a, getNotifiedAchievementsKey());
517
+ }
518
+ setAchievementState({
519
+ unlocked: [],
520
+ all: achievements,
521
+ });
522
+ setMetrics({});
523
+ seenAchievementsRef.current.clear();
524
+ setShowConfetti(false);
525
+ setCurrentAchievement(null);
526
+ };
527
+ const getState = () => {
528
+ const metricsInArrayFormat = Object.entries(metrics).reduce((acc, [key, value]) => (Object.assign(Object.assign({}, acc), { [key]: Array.isArray(value) ? value : [value] })), {});
529
+ return {
530
+ metrics: metricsInArrayFormat,
531
+ unlocked: achievementState.unlocked,
532
+ };
533
+ };
534
+ return (React.createElement(AchievementContext.Provider, { value: {
535
+ update,
536
+ achievements: achievementState,
537
+ reset,
538
+ getState,
539
+ } },
540
+ children,
541
+ React.createElement(ToastContainer, { position: "top-right", autoClose: 5000, hideProgressBar: false, newestOnTop: true, closeOnClick: true, rtl: false, pauseOnFocusLoss: true, draggable: true, pauseOnHover: true, theme: "light" }),
542
+ React.createElement(ConfettiWrapper, { show: showConfetti })));
543
+ };
544
+
545
+ const useAchievements = () => {
546
+ const context = useContext(AchievementContext);
547
+ if (!context) {
548
+ throw new Error('useAchievements must be used within an AchievementProvider');
549
+ }
550
+ return context;
551
+ };
552
+
553
+ const defaultStyles = {
554
+ badgesButton: {
555
+ backgroundColor: '#4CAF50',
556
+ color: 'white',
557
+ padding: '10px 20px',
558
+ border: 'none',
559
+ borderRadius: '20px',
560
+ cursor: 'pointer',
561
+ display: 'flex',
562
+ alignItems: 'center',
563
+ gap: '8px',
564
+ fontSize: '16px',
565
+ boxShadow: '0 2px 5px rgba(0,0,0,0.2)',
566
+ transition: 'transform 0.2s ease-in-out',
567
+ },
568
+ badgesModal: {
569
+ overlay: {
570
+ backgroundColor: 'rgba(0, 0, 0, 0.75)',
571
+ display: 'flex',
572
+ alignItems: 'center',
573
+ justifyContent: 'center',
574
+ zIndex: 1000,
575
+ },
576
+ content: {
577
+ position: 'relative',
578
+ background: '#fff',
579
+ borderRadius: '8px',
580
+ padding: '20px',
581
+ maxWidth: '500px',
582
+ width: '90%',
583
+ maxHeight: '80vh',
584
+ overflow: 'auto',
585
+ },
586
+ header: {
587
+ display: 'flex',
588
+ justifyContent: 'space-between',
589
+ alignItems: 'center',
590
+ marginBottom: '20px',
591
+ },
592
+ closeButton: {
593
+ background: 'none',
594
+ border: 'none',
595
+ fontSize: '24px',
596
+ cursor: 'pointer',
597
+ padding: '0',
598
+ },
599
+ achievementList: {
600
+ display: 'flex',
601
+ flexDirection: 'column',
602
+ gap: '16px',
603
+ },
604
+ achievementItem: {
605
+ display: 'flex',
606
+ gap: '16px',
607
+ padding: '16px',
608
+ borderRadius: '8px',
609
+ backgroundColor: '#f5f5f5',
610
+ alignItems: 'center',
611
+ },
612
+ achievementTitle: {
613
+ margin: '0',
614
+ fontSize: '18px',
615
+ fontWeight: 'bold',
616
+ },
617
+ achievementDescription: {
618
+ margin: '4px 0 0 0',
619
+ color: '#666',
620
+ },
621
+ achievementIcon: {
622
+ fontSize: '32px',
623
+ display: 'flex',
624
+ alignItems: 'center',
625
+ justifyContent: 'center',
626
+ },
627
+ },
628
+ };
629
+
630
+ export { AchievementContext, AchievementProvider, BadgesButton, BadgesModal, ConfettiWrapper, LocalStorage, StorageType, defaultAchievementIcons, defaultStyles, useAchievements };
631
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../src/core/types.ts","../src/core/storage/LocalStorage.ts","../src/core/components/BadgesButton.tsx","../src/core/icons/defaultIcons.ts","../src/core/components/BadgesModal.tsx","../src/core/components/ConfettiWrapper.tsx","../src/core/storage/MemoryStorage.ts","../src/providers/AchievementProvider.tsx","../src/hooks/useAchievements.ts","../src/core/styles/defaultStyles.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null],"names":[],"mappings":"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"}