react-achievements 4.1.1 → 4.2.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 CHANGED
@@ -150,7 +150,7 @@ const {
150
150
  } = useSimpleAchievements();
151
151
  ```
152
152
 
153
- Deprecated aliases from v3, including `unlocked`, remain available until `4.2`.
153
+ Deprecated aliases from v3, including `unlocked` and `all`, remain available until 5.0.
154
154
 
155
155
  ## Event-Based Tracking
156
156
 
@@ -239,7 +239,7 @@ React Native UI components are not included in the web package; use `achievement
239
239
  - `AchievementsWidget` replaces the legacy manual `BadgesButtonWithModal` setup.
240
240
  - `useSimpleAchievements()` now returns `unlockedIds`, `unlockedAchievements`, and `allAchievements`.
241
241
  - External UI peer dependencies are no longer required.
242
- - Deprecated v3 component names remain as compatibility wrappers until `4.2`.
242
+ - Deprecated v3 component names remain as compatibility wrappers until 5.0.
243
243
 
244
244
  ## License
245
245
 
package/dist/headless.cjs CHANGED
@@ -30,15 +30,12 @@ function warnDeprecation(message) {
30
30
  }
31
31
 
32
32
  const AchievementContext = React.createContext(undefined);
33
- const getAllAchievementRecord = (engine) => {
34
- return Object.fromEntries(engine.getAllAchievements().map((achievement) => [
35
- achievement.achievementId,
36
- achievement,
37
- ]));
33
+ const getAllAchievementRecord = (achievements) => {
34
+ return Object.fromEntries(achievements.map((achievement) => [achievement.achievementId, achievement]));
38
35
  };
39
36
  const AchievementProvider = ({ achievements: achievementsConfig, storage = 'local', children, onError, useBuiltInUI, restApiConfig, engine: externalEngine, eventMapping, icons = {}, }) => {
40
37
  if (useBuiltInUI !== undefined) {
41
- warnDeprecation('`useBuiltInUI` is deprecated and is now a no-op because built-in UI is the default. It will be removed in 4.2.');
38
+ warnDeprecation('`useBuiltInUI` is deprecated and is now a no-op because built-in UI is the default. It will be removed in 5.0.');
42
39
  }
43
40
  if (achievementsConfig && externalEngine) {
44
41
  throw new Error('Cannot provide both "achievements" and "engine" props to AchievementProvider.\n\n' +
@@ -64,15 +61,9 @@ const AchievementProvider = ({ achievements: achievementsConfig, storage = 'loca
64
61
  eventMapping,
65
62
  });
66
63
  });
67
- const [achievementState, setAchievementState] = React.useState(() => ({
68
- unlocked: [...engine.getUnlocked()],
69
- all: getAllAchievementRecord(engine),
70
- }));
71
- const syncAchievementState = React.useCallback(() => {
72
- setAchievementState({
73
- unlocked: [...engine.getUnlocked()],
74
- all: getAllAchievementRecord(engine),
75
- });
64
+ const [achievementSnapshot, setAchievementSnapshot] = React.useState(() => engine.getSnapshot());
65
+ const syncAchievementState = React.useCallback((snapshot) => {
66
+ setAchievementSnapshot(snapshot || engine.getSnapshot());
76
67
  }, [engine]);
77
68
  React.useEffect(() => {
78
69
  return () => {
@@ -82,10 +73,17 @@ const AchievementProvider = ({ achievements: achievementsConfig, storage = 'loca
82
73
  };
83
74
  }, [engine, externalEngine]);
84
75
  React.useEffect(() => {
85
- const unsubscribeUnlocked = engine.on('achievement:unlocked', syncAchievementState);
86
- const unsubscribeStateChanged = engine.on('state:changed', syncAchievementState);
76
+ let isMounted = true;
77
+ const unsubscribeStateChanged = engine.on('state:changed', (event) => {
78
+ syncAchievementState(event);
79
+ });
80
+ engine.ready().then(() => {
81
+ if (isMounted) {
82
+ syncAchievementState();
83
+ }
84
+ });
87
85
  return () => {
88
- unsubscribeUnlocked();
86
+ isMounted = false;
89
87
  unsubscribeStateChanged();
90
88
  };
91
89
  }, [engine, syncAchievementState]);
@@ -94,18 +92,12 @@ const AchievementProvider = ({ achievements: achievementsConfig, storage = 'loca
94
92
  };
95
93
  const reset = () => {
96
94
  engine.reset();
97
- syncAchievementState();
98
95
  };
99
96
  const getState = () => {
100
- const metrics = engine.getMetrics();
101
- const unlocked = engine.getUnlocked();
102
- const metricsInArrayFormat = {};
103
- Object.entries(metrics).forEach(([key, value]) => {
104
- metricsInArrayFormat[key] = Array.isArray(value) ? value : [value];
105
- });
97
+ const snapshot = engine.getSnapshot();
106
98
  return {
107
- metrics: metricsInArrayFormat,
108
- unlocked: [...unlocked],
99
+ metrics: snapshot.metrics,
100
+ unlocked: snapshot.unlockedIds,
109
101
  };
110
102
  };
111
103
  const exportData = () => {
@@ -117,11 +109,16 @@ const AchievementProvider = ({ achievements: achievementsConfig, storage = 'loca
117
109
  return result;
118
110
  };
119
111
  const getAllAchievements = () => {
120
- return engine.getAllAchievements();
112
+ return engine.getSnapshot().allAchievements;
113
+ };
114
+ const achievements = {
115
+ unlocked: achievementSnapshot.unlockedIds,
116
+ all: getAllAchievementRecord(achievementSnapshot.allAchievements),
121
117
  };
122
118
  return (React.createElement(AchievementContext.Provider, { value: {
123
119
  update,
124
- achievements: achievementState,
120
+ achievements,
121
+ snapshot: achievementSnapshot,
125
122
  reset,
126
123
  getState,
127
124
  exportData,
@@ -142,18 +139,14 @@ const useAchievements = () => {
142
139
  };
143
140
 
144
141
  const useAchievementState = () => {
145
- const { achievements, getAllAchievements, getState } = useAchievements();
146
- const allAchievements = getAllAchievements();
147
- const unlockedIds = achievements.unlocked;
148
- const unlockedAchievementSet = new Set(unlockedIds);
149
- const unlockedAchievements = allAchievements.filter((achievement) => unlockedAchievementSet.has(achievement.achievementId));
142
+ const { snapshot } = useAchievements();
150
143
  return {
151
- unlockedIds,
152
- unlockedAchievements,
153
- allAchievements,
154
- unlockedCount: unlockedIds.length,
155
- totalCount: allAchievements.length,
156
- metrics: getState().metrics,
144
+ unlockedIds: snapshot.unlockedIds,
145
+ unlockedAchievements: snapshot.unlockedAchievements,
146
+ allAchievements: snapshot.allAchievements,
147
+ unlockedCount: snapshot.unlockedCount,
148
+ totalCount: snapshot.totalCount,
149
+ metrics: snapshot.metrics,
157
150
  };
158
151
  };
159
152
 
@@ -162,17 +155,11 @@ const useAchievementState = () => {
162
155
  * Provides the v4 happy path for direct metric updates plus explicit state names.
163
156
  */
164
157
  const useSimpleAchievements = () => {
165
- const { update, reset, getState, exportData, importData } = useAchievements();
158
+ const { update, reset, getState, exportData, importData, engine } = useAchievements();
166
159
  const achievementState = useAchievementState();
167
160
  const track = (metric, value) => update({ [metric]: value });
168
161
  const increment = (metric, amount = 1) => {
169
- const currentState = getState();
170
- const currentMetricArray = currentState.metrics[metric] || [0];
171
- const currentValue = Array.isArray(currentMetricArray)
172
- ? currentMetricArray[0]
173
- : currentMetricArray;
174
- const newValue = (typeof currentValue === 'number' ? currentValue : 0) + amount;
175
- update({ [metric]: newValue });
162
+ return engine.increment(metric, amount);
176
163
  };
177
164
  const trackMultiple = (metrics) => update(metrics);
178
165
  return {
@@ -191,11 +178,11 @@ const useSimpleAchievements = () => {
191
178
  importData,
192
179
  getAllAchievements: () => achievementState.allAchievements,
193
180
  /**
194
- * @deprecated Use `unlockedIds` instead. This alias will be removed in 4.2.
181
+ * @deprecated Use `unlockedIds` instead. This alias will be removed in 5.0.
195
182
  */
196
183
  unlocked: achievementState.unlockedIds,
197
184
  /**
198
- * @deprecated Use `allAchievements` instead. This alias will be removed in 4.2.
185
+ * @deprecated Use `allAchievements` instead. This alias will be removed in 5.0.
199
186
  */
200
187
  all: achievementState.allAchievements,
201
188
  };
@@ -1 +1 @@
1
- {"version":3,"file":"headless.cjs","sources":["../src/core/types.ts","../src/core/utils/deprecation.ts","../src/providers/AchievementProvider.tsx","../src/hooks/useAchievements.ts","../src/hooks/useAchievementState.ts","../src/hooks/useSimpleAchievements.ts","../src/hooks/useAchievementEngine.ts"],"sourcesContent":[null,null,null,null,null,null,null],"names":["createContext","useState","AchievementEngine","useCallback","useEffect","useContext"],"mappings":"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"}
1
+ {"version":3,"file":"headless.cjs","sources":["../src/core/types.ts","../src/core/utils/deprecation.ts","../src/providers/AchievementProvider.tsx","../src/hooks/useAchievements.ts","../src/hooks/useAchievementState.ts","../src/hooks/useSimpleAchievements.ts","../src/hooks/useAchievementEngine.ts"],"sourcesContent":[null,null,null,null,null,null,null],"names":["createContext","useState","AchievementEngine","useCallback","useEffect","useContext"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import * as achievements_engine from 'achievements-engine';
3
- import { AchievementWithStatus as AchievementWithStatus$1, ImportOptions, ImportResult, AchievementEngine, AchievementConfigurationType as AchievementConfigurationType$1, AchievementStorage as AchievementStorage$1, AsyncAchievementStorage as AsyncAchievementStorage$1, StorageType, RestApiStorageConfig, EventMapping, AchievementError } from 'achievements-engine';
4
- export { AchievementBuilder, AchievementEngine, AchievementEngineApi, AchievementError, AchievementUnlockedEvent, AsyncStorageAdapter, AwardDetails, ConfigurationError, EngineConfig, EngineEvent, ErrorEvent, EventMapping, ExportedData, ImportOptions, ImportResult, ImportValidationError, IndexedDBStorage, LocalStorage, MemoryStorage, MetricUpdatedEvent, MetricUpdater, OfflineQueueStorage, RestApiStorage, RestApiStorageConfig, StateChangedEvent, StorageError, StorageQuotaError, StorageType, SyncError, UnsubscribeFn, createConfigHash, exportAchievementData, importAchievementData, isAchievementError, isRecoverableError, isSimpleConfig, normalizeAchievements } from 'achievements-engine';
3
+ import { AchievementWithStatus as AchievementWithStatus$1, AchievementSnapshot, ImportOptions, ImportResult, AchievementEngine, AchievementConfigurationType as AchievementConfigurationType$1, AchievementStorage as AchievementStorage$1, AsyncAchievementStorage as AsyncAchievementStorage$1, StorageType, RestApiStorageConfig, EventMapping, AchievementError } from 'achievements-engine';
4
+ export { AchievementBuilder, AchievementEngine, AchievementEngineApi, AchievementError, AchievementSnapshot, AchievementUnlockedEvent, AchievementUpdateResult, AsyncStorageAdapter, AwardDetails, ConfigurationError, EngineConfig, EngineEvent, ErrorEvent, EventMapping, ExportedData, ImportOptions, ImportResult, ImportValidationError, IndexedDBStorage, LocalStorage, MemoryStorage, MetricUpdatedEvent, MetricUpdater, OfflineQueueStorage, RestApiStorage, RestApiStorageConfig, StateChangedEvent, StorageError, StorageQuotaError, StorageType, SyncError, UnsubscribeFn, createConfigHash, exportAchievementData, importAchievementData, isAchievementError, isRecoverableError, isSimpleConfig, normalizeAchievements } from 'achievements-engine';
5
5
 
6
6
  type AchievementMetricValue = number | string | boolean | Date | null | undefined;
7
7
  type AchievementMetricArrayValue = AchievementMetricValue | AchievementMetricValue[];
@@ -62,7 +62,7 @@ interface AsyncAchievementStorage {
62
62
  type AnyAchievementStorage = AchievementStorage | AsyncAchievementStorage;
63
63
  declare function isAsyncStorage(storage: AnyAchievementStorage): storage is AsyncAchievementStorage;
64
64
  /**
65
- * @deprecated This type is outdated and will be removed in 4.2.
65
+ * @deprecated This type is outdated and will be removed in 5.0.
66
66
  * Use AchievementContextType from 'react-achievements' instead.
67
67
  *
68
68
  * This legacy interface does not include the 'engine' property.
@@ -88,6 +88,7 @@ interface AchievementContextType {
88
88
  unlocked: string[];
89
89
  all: Record<string, AchievementWithStatus$1>;
90
90
  };
91
+ snapshot: AchievementSnapshot;
91
92
  reset: () => void;
92
93
  getState: () => {
93
94
  metrics: Record<string, any>;
@@ -100,7 +101,7 @@ interface AchievementContextType {
100
101
  icons: Record<string, string>;
101
102
  /**
102
103
  * @deprecated Use provider props or the presence of an injected engine directly.
103
- * This compatibility flag will be removed in 4.2.
104
+ * This compatibility flag will be removed in 5.0.
104
105
  */
105
106
  _isLegacyPattern: boolean;
106
107
  }
@@ -116,7 +117,7 @@ interface AchievementProviderProps {
116
117
  onError?: (error: AchievementError) => void;
117
118
  /**
118
119
  * @deprecated Built-in UI is the default in the web provider. This prop is a
119
- * no-op and will be removed in 4.2.
120
+ * no-op and will be removed in 5.0.
120
121
  */
121
122
  useBuiltInUI?: boolean;
122
123
  }
@@ -130,14 +131,14 @@ declare const useAchievements: () => AchievementContextType;
130
131
  */
131
132
  declare const useSimpleAchievements: () => {
132
133
  track: (metric: string, value: any) => void;
133
- increment: (metric: string, amount?: number) => void;
134
+ increment: (metric: string, amount?: number) => achievements_engine.AchievementUpdateResult;
134
135
  trackMultiple: (metrics: Record<string, any>) => void;
135
136
  unlockedIds: string[];
136
137
  unlockedAchievements: achievements_engine.AchievementWithStatus[];
137
138
  allAchievements: achievements_engine.AchievementWithStatus[];
138
139
  unlockedCount: number;
139
140
  totalCount: number;
140
- metrics: Record<string, any>;
141
+ metrics: achievements_engine.AchievementMetrics;
141
142
  reset: () => void;
142
143
  getState: () => {
143
144
  metrics: Record<string, any>;
@@ -147,11 +148,11 @@ declare const useSimpleAchievements: () => {
147
148
  importData: (jsonString: string, options?: achievements_engine.ImportOptions) => achievements_engine.ImportResult;
148
149
  getAllAchievements: () => achievements_engine.AchievementWithStatus[];
149
150
  /**
150
- * @deprecated Use `unlockedIds` instead. This alias will be removed in 4.2.
151
+ * @deprecated Use `unlockedIds` instead. This alias will be removed in 5.0.
151
152
  */
152
153
  unlocked: string[];
153
154
  /**
154
- * @deprecated Use `allAchievements` instead. This alias will be removed in 4.2.
155
+ * @deprecated Use `allAchievements` instead. This alias will be removed in 5.0.
155
156
  */
156
157
  all: achievements_engine.AchievementWithStatus[];
157
158
  };
@@ -162,7 +163,7 @@ declare const useAchievementState: () => {
162
163
  allAchievements: achievements_engine.AchievementWithStatus[];
163
164
  unlockedCount: number;
164
165
  totalCount: number;
165
- metrics: Record<string, any>;
166
+ metrics: achievements_engine.AchievementMetrics;
166
167
  };
167
168
 
168
169
  /**
@@ -29,15 +29,12 @@ function warnDeprecation(message) {
29
29
  }
30
30
 
31
31
  const AchievementContext = createContext(undefined);
32
- const getAllAchievementRecord = (engine) => {
33
- return Object.fromEntries(engine.getAllAchievements().map((achievement) => [
34
- achievement.achievementId,
35
- achievement,
36
- ]));
32
+ const getAllAchievementRecord = (achievements) => {
33
+ return Object.fromEntries(achievements.map((achievement) => [achievement.achievementId, achievement]));
37
34
  };
38
35
  const AchievementProvider = ({ achievements: achievementsConfig, storage = 'local', children, onError, useBuiltInUI, restApiConfig, engine: externalEngine, eventMapping, icons = {}, }) => {
39
36
  if (useBuiltInUI !== undefined) {
40
- warnDeprecation('`useBuiltInUI` is deprecated and is now a no-op because built-in UI is the default. It will be removed in 4.2.');
37
+ warnDeprecation('`useBuiltInUI` is deprecated and is now a no-op because built-in UI is the default. It will be removed in 5.0.');
41
38
  }
42
39
  if (achievementsConfig && externalEngine) {
43
40
  throw new Error('Cannot provide both "achievements" and "engine" props to AchievementProvider.\n\n' +
@@ -63,15 +60,9 @@ const AchievementProvider = ({ achievements: achievementsConfig, storage = 'loca
63
60
  eventMapping,
64
61
  });
65
62
  });
66
- const [achievementState, setAchievementState] = useState(() => ({
67
- unlocked: [...engine.getUnlocked()],
68
- all: getAllAchievementRecord(engine),
69
- }));
70
- const syncAchievementState = useCallback(() => {
71
- setAchievementState({
72
- unlocked: [...engine.getUnlocked()],
73
- all: getAllAchievementRecord(engine),
74
- });
63
+ const [achievementSnapshot, setAchievementSnapshot] = useState(() => engine.getSnapshot());
64
+ const syncAchievementState = useCallback((snapshot) => {
65
+ setAchievementSnapshot(snapshot || engine.getSnapshot());
75
66
  }, [engine]);
76
67
  useEffect(() => {
77
68
  return () => {
@@ -81,10 +72,17 @@ const AchievementProvider = ({ achievements: achievementsConfig, storage = 'loca
81
72
  };
82
73
  }, [engine, externalEngine]);
83
74
  useEffect(() => {
84
- const unsubscribeUnlocked = engine.on('achievement:unlocked', syncAchievementState);
85
- const unsubscribeStateChanged = engine.on('state:changed', syncAchievementState);
75
+ let isMounted = true;
76
+ const unsubscribeStateChanged = engine.on('state:changed', (event) => {
77
+ syncAchievementState(event);
78
+ });
79
+ engine.ready().then(() => {
80
+ if (isMounted) {
81
+ syncAchievementState();
82
+ }
83
+ });
86
84
  return () => {
87
- unsubscribeUnlocked();
85
+ isMounted = false;
88
86
  unsubscribeStateChanged();
89
87
  };
90
88
  }, [engine, syncAchievementState]);
@@ -93,18 +91,12 @@ const AchievementProvider = ({ achievements: achievementsConfig, storage = 'loca
93
91
  };
94
92
  const reset = () => {
95
93
  engine.reset();
96
- syncAchievementState();
97
94
  };
98
95
  const getState = () => {
99
- const metrics = engine.getMetrics();
100
- const unlocked = engine.getUnlocked();
101
- const metricsInArrayFormat = {};
102
- Object.entries(metrics).forEach(([key, value]) => {
103
- metricsInArrayFormat[key] = Array.isArray(value) ? value : [value];
104
- });
96
+ const snapshot = engine.getSnapshot();
105
97
  return {
106
- metrics: metricsInArrayFormat,
107
- unlocked: [...unlocked],
98
+ metrics: snapshot.metrics,
99
+ unlocked: snapshot.unlockedIds,
108
100
  };
109
101
  };
110
102
  const exportData = () => {
@@ -116,11 +108,16 @@ const AchievementProvider = ({ achievements: achievementsConfig, storage = 'loca
116
108
  return result;
117
109
  };
118
110
  const getAllAchievements = () => {
119
- return engine.getAllAchievements();
111
+ return engine.getSnapshot().allAchievements;
112
+ };
113
+ const achievements = {
114
+ unlocked: achievementSnapshot.unlockedIds,
115
+ all: getAllAchievementRecord(achievementSnapshot.allAchievements),
120
116
  };
121
117
  return (React.createElement(AchievementContext.Provider, { value: {
122
118
  update,
123
- achievements: achievementState,
119
+ achievements,
120
+ snapshot: achievementSnapshot,
124
121
  reset,
125
122
  getState,
126
123
  exportData,
@@ -141,18 +138,14 @@ const useAchievements = () => {
141
138
  };
142
139
 
143
140
  const useAchievementState = () => {
144
- const { achievements, getAllAchievements, getState } = useAchievements();
145
- const allAchievements = getAllAchievements();
146
- const unlockedIds = achievements.unlocked;
147
- const unlockedAchievementSet = new Set(unlockedIds);
148
- const unlockedAchievements = allAchievements.filter((achievement) => unlockedAchievementSet.has(achievement.achievementId));
141
+ const { snapshot } = useAchievements();
149
142
  return {
150
- unlockedIds,
151
- unlockedAchievements,
152
- allAchievements,
153
- unlockedCount: unlockedIds.length,
154
- totalCount: allAchievements.length,
155
- metrics: getState().metrics,
143
+ unlockedIds: snapshot.unlockedIds,
144
+ unlockedAchievements: snapshot.unlockedAchievements,
145
+ allAchievements: snapshot.allAchievements,
146
+ unlockedCount: snapshot.unlockedCount,
147
+ totalCount: snapshot.totalCount,
148
+ metrics: snapshot.metrics,
156
149
  };
157
150
  };
158
151
 
@@ -161,17 +154,11 @@ const useAchievementState = () => {
161
154
  * Provides the v4 happy path for direct metric updates plus explicit state names.
162
155
  */
163
156
  const useSimpleAchievements = () => {
164
- const { update, reset, getState, exportData, importData } = useAchievements();
157
+ const { update, reset, getState, exportData, importData, engine } = useAchievements();
165
158
  const achievementState = useAchievementState();
166
159
  const track = (metric, value) => update({ [metric]: value });
167
160
  const increment = (metric, amount = 1) => {
168
- const currentState = getState();
169
- const currentMetricArray = currentState.metrics[metric] || [0];
170
- const currentValue = Array.isArray(currentMetricArray)
171
- ? currentMetricArray[0]
172
- : currentMetricArray;
173
- const newValue = (typeof currentValue === 'number' ? currentValue : 0) + amount;
174
- update({ [metric]: newValue });
161
+ return engine.increment(metric, amount);
175
162
  };
176
163
  const trackMultiple = (metrics) => update(metrics);
177
164
  return {
@@ -190,11 +177,11 @@ const useSimpleAchievements = () => {
190
177
  importData,
191
178
  getAllAchievements: () => achievementState.allAchievements,
192
179
  /**
193
- * @deprecated Use `unlockedIds` instead. This alias will be removed in 4.2.
180
+ * @deprecated Use `unlockedIds` instead. This alias will be removed in 5.0.
194
181
  */
195
182
  unlocked: achievementState.unlockedIds,
196
183
  /**
197
- * @deprecated Use `allAchievements` instead. This alias will be removed in 4.2.
184
+ * @deprecated Use `allAchievements` instead. This alias will be removed in 5.0.
198
185
  */
199
186
  all: achievementState.allAchievements,
200
187
  };
@@ -1 +1 @@
1
- {"version":3,"file":"headless.esm.js","sources":["../src/core/types.ts","../src/core/utils/deprecation.ts","../src/providers/AchievementProvider.tsx","../src/hooks/useAchievements.ts","../src/hooks/useAchievementState.ts","../src/hooks/useSimpleAchievements.ts","../src/hooks/useAchievementEngine.ts"],"sourcesContent":[null,null,null,null,null,null,null],"names":[],"mappings":";;;;AAgFA;AACM,SAAU,cAAc,CAAC,OAA8B,EAAA;;AAEzD,IAAA,MAAM,UAAU,GAAI,OAAe,CAAC,UAAU,EAAE,CAAC;IACjD,OAAO,UAAU,IAAI,OAAO,UAAU,CAAC,IAAI,KAAK,UAAU,CAAC;AAC/D,CAAC;AA6DD,IAAY,WAKX,CAAA;AALD,CAAA,UAAY,WAAW,EAAA;AACnB,IAAA,WAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACf,IAAA,WAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB,IAAA,WAAA,CAAA,WAAA,CAAA,GAAA,WAAuB,CAAA;IACvB,WAAmB,CAAA,SAAA,CAAA,GAAA,SAAA,CAAA;AACvB,CAAC,EALW,WAAW,KAAX,WAAW,GAKtB,EAAA,CAAA,CAAA;;ACvJD,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;AAEnC,SAAU,eAAe,CAAC,OAAe,EAAA;;AAC7C,IAAA,MAAM,YAAY,GAChB,OAAO,UAAU,KAAK,WAAW;QACjC,CAAA,CAAA,EAAA,GAAA,CAAC,EAAA,GAAA,UAAkB,CAAC,OAAO,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,GAAG,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,QAAQ,MAAK,YAAY,CAAC;IAE9D,IAAI,YAAY,IAAI,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;QAC/C,OAAO;KACR;AAED,IAAA,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAC5B,IAAA,OAAO,CAAC,IAAI,CAAC,wBAAwB,OAAO,CAAA,CAAE,CAAC,CAAC;AAClD;;MCyBa,kBAAkB,GAAG,aAAa,CAAqC,SAAS,EAAE;AAkB/F,MAAM,uBAAuB,GAAG,CAC9B,MAAyB,KACgB;AACzC,IAAA,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,kBAAkB,EAAE,CAAC,GAAG,CAAC,CAAC,WAAW,KAAK;AAC/C,QAAA,WAAW,CAAC,aAAa;QACzB,WAAW;AACZ,KAAA,CAAC,CACH,CAAC;AACJ,CAAC,CAAC;AAEK,MAAM,mBAAmB,GAAuC,CAAC,EACtE,YAAY,EAAE,kBAAkB,EAChC,OAAO,GAAG,OAAO,EACjB,QAAQ,EACR,OAAO,EACP,YAAY,EACZ,aAAa,EACb,MAAM,EAAE,cAAc,EACtB,YAAY,EACZ,KAAK,GAAG,EAAE,GACX,KAAI;AACH,IAAA,IAAI,YAAY,KAAK,SAAS,EAAE;QAC9B,eAAe,CACb,gHAAgH,CACjH,CAAC;KACH;AAED,IAAA,IAAI,kBAAkB,IAAI,cAAc,EAAE;QACxC,MAAM,IAAI,KAAK,CACb,mFAAmF;YACjF,uBAAuB;YACvB,0EAA0E;AAC1E,YAAA,kEAAkE,CACrE,CAAC;KACH;AAED,IAAA,MAAM,uBAAuB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;AAE5D,IAAA,MAAM,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAoB,MAAK;QAChD,IAAI,cAAc,EAAE;AAClB,YAAA,OAAO,cAAc,CAAC;SACvB;QAED,IAAI,CAAC,kBAAkB,EAAE;YACvB,MAAM,IAAI,KAAK,CACb,0EAA0E;gBACxE,0EAA0E;AAC1E,gBAAA,kEAAkE,CACrE,CAAC;SACH;QAED,OAAO,IAAI,iBAAiB,CAAC;AAC3B,YAAA,YAAY,EAAE,kBAAkB;AAChC,YAAA,OAAO,EAAE,OAAc;YACvB,aAAa;AACb,YAAA,OAAO,EAAE,OAA+C;YACxD,YAAY;AACb,SAAA,CAAC,CAAC;AACL,KAAC,CAAC,CAAC;IAEH,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,QAAQ,CAGrD,OAAO;AACR,QAAA,QAAQ,EAAE,CAAC,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;AACnC,QAAA,GAAG,EAAE,uBAAuB,CAAC,MAAM,CAAC;AACrC,KAAA,CAAC,CAAC,CAAC;AAEJ,IAAA,MAAM,oBAAoB,GAAG,WAAW,CAAC,MAAK;AAC5C,QAAA,mBAAmB,CAAC;AAClB,YAAA,QAAQ,EAAE,CAAC,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;AACnC,YAAA,GAAG,EAAE,uBAAuB,CAAC,MAAM,CAAC;AACrC,SAAA,CAAC,CAAC;AACL,KAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEb,SAAS,CAAC,MAAK;AACb,QAAA,OAAO,MAAK;YACV,IAAI,CAAC,cAAc,EAAE;gBACnB,MAAM,CAAC,OAAO,EAAE,CAAC;aAClB;AACH,SAAC,CAAC;AACJ,KAAC,EAAE,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC;IAE7B,SAAS,CAAC,MAAK;QACb,MAAM,mBAAmB,GAAG,MAAM,CAAC,EAAE,CAAC,sBAAsB,EAAE,oBAAoB,CAAC,CAAC;QACpF,MAAM,uBAAuB,GAAG,MAAM,CAAC,EAAE,CAAC,eAAe,EAAE,oBAAoB,CAAC,CAAC;AAEjF,QAAA,OAAO,MAAK;AACV,YAAA,mBAAmB,EAAE,CAAC;AACtB,YAAA,uBAAuB,EAAE,CAAC;AAC5B,SAAC,CAAC;AACJ,KAAC,EAAE,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC,CAAC;AAEnC,IAAA,MAAM,MAAM,GAAG,CAAC,UAA+B,KAAI;AACjD,QAAA,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AAC5B,KAAC,CAAC;IAEF,MAAM,KAAK,GAAG,MAAK;QACjB,MAAM,CAAC,KAAK,EAAE,CAAC;AACf,QAAA,oBAAoB,EAAE,CAAC;AACzB,KAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,MAAK;AACpB,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;AACpC,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;QACtC,MAAM,oBAAoB,GAAwB,EAAE,CAAC;AAErD,QAAA,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAI;YAC/C,oBAAoB,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC;AACrE,SAAC,CAAC,CAAC;QAEH,OAAO;AACL,YAAA,OAAO,EAAE,oBAAoB;AAC7B,YAAA,QAAQ,EAAE,CAAC,GAAG,QAAQ,CAAC;SACxB,CAAC;AACJ,KAAC,CAAC;IAEF,MAAM,UAAU,GAAG,MAAa;AAC9B,QAAA,OAAO,MAAM,CAAC,MAAM,EAAE,CAAC;AACzB,KAAC,CAAC;AAEF,IAAA,MAAM,UAAU,GAAG,CAAC,UAAkB,EAAE,OAAuB,KAAkB;QAC/E,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AAClD,QAAA,oBAAoB,EAAE,CAAC;AACvB,QAAA,OAAO,MAAM,CAAC;AAChB,KAAC,CAAC;IAEF,MAAM,kBAAkB,GAAG,MAA8B;AACvD,QAAA,OAAO,MAAM,CAAC,kBAAkB,EAAE,CAAC;AACrC,KAAC,CAAC;AAEF,IAAA,QACE,KAAC,CAAA,aAAA,CAAA,kBAAkB,CAAC,QAAQ,EAAA,EAC1B,KAAK,EAAE;YACL,MAAM;AACN,YAAA,YAAY,EAAE,gBAAgB;YAC9B,KAAK;YACL,QAAQ;YACR,UAAU;YACV,UAAU;YACV,kBAAkB;YAClB,MAAM;YACN,KAAK;AACL,YAAA,gBAAgB,EAAE,uBAAuB;SAC1C,EAEA,EAAA,QAAQ,CACmB,EAC9B;AACJ;;AC3MO,MAAM,eAAe,GAAG,MAAK;AAClC,IAAA,MAAM,OAAO,GAAG,UAAU,CAAC,kBAAkB,CAAC,CAAC;IAE/C,IAAI,CAAC,OAAO,EAAE;AACZ,QAAA,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;KAC/E;AAED,IAAA,OAAO,OAAO,CAAC;AACjB;;ACTO,MAAM,mBAAmB,GAAG,MAAK;IACtC,MAAM,EAAE,YAAY,EAAE,kBAAkB,EAAE,QAAQ,EAAE,GAAG,eAAe,EAAE,CAAC;AACzE,IAAA,MAAM,eAAe,GAAG,kBAAkB,EAAE,CAAC;AAC7C,IAAA,MAAM,WAAW,GAAG,YAAY,CAAC,QAAQ,CAAC;AAC1C,IAAA,MAAM,sBAAsB,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC;IACpD,MAAM,oBAAoB,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,WAAW,KAC9D,sBAAsB,CAAC,GAAG,CAAC,WAAW,CAAC,aAAa,CAAC,CACtD,CAAC;IAEF,OAAO;QACL,WAAW;QACX,oBAAoB;QACpB,eAAe;QACf,aAAa,EAAE,WAAW,CAAC,MAAM;QACjC,UAAU,EAAE,eAAe,CAAC,MAAM;AAClC,QAAA,OAAO,EAAE,QAAQ,EAAE,CAAC,OAAO;KAC5B,CAAC;AACJ;;AChBA;;;AAGG;AACI,MAAM,qBAAqB,GAAG,MAAK;AACxC,IAAA,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,eAAe,EAAE,CAAC;AAC9E,IAAA,MAAM,gBAAgB,GAAG,mBAAmB,EAAE,CAAC;AAE/C,IAAA,MAAM,KAAK,GAAG,CAAC,MAAc,EAAE,KAAU,KAAK,MAAM,CAAC,EAAE,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC,CAAC;IAE1E,MAAM,SAAS,GAAG,CAAC,MAAc,EAAE,MAAiB,GAAA,CAAC,KAAI;AACvD,QAAA,MAAM,YAAY,GAAG,QAAQ,EAAE,CAAC;AAChC,QAAA,MAAM,kBAAkB,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC/D,QAAA,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,kBAAkB,CAAC;AACpD,cAAE,kBAAkB,CAAC,CAAC,CAAC;cACrB,kBAAkB,CAAC;AACvB,QAAA,MAAM,QAAQ,GAAG,CAAC,OAAO,YAAY,KAAK,QAAQ,GAAG,YAAY,GAAG,CAAC,IAAI,MAAM,CAAC;QAChF,MAAM,CAAC,EAAE,CAAC,MAAM,GAAG,QAAQ,EAAE,CAAC,CAAC;AACjC,KAAC,CAAC;IAEF,MAAM,aAAa,GAAG,CAAC,OAA4B,KAAK,MAAM,CAAC,OAAO,CAAC,CAAC;IAExE,OAAO;QACL,KAAK;QACL,SAAS;QACT,aAAa;QACb,WAAW,EAAE,gBAAgB,CAAC,WAAW;QACzC,oBAAoB,EAAE,gBAAgB,CAAC,oBAAoB;QAC3D,eAAe,EAAE,gBAAgB,CAAC,eAAe;QACjD,aAAa,EAAE,gBAAgB,CAAC,aAAa;QAC7C,UAAU,EAAE,gBAAgB,CAAC,UAAU;QACvC,OAAO,EAAE,gBAAgB,CAAC,OAAO;QACjC,KAAK;QACL,QAAQ;QACR,UAAU;QACV,UAAU;AACV,QAAA,kBAAkB,EAAE,MAAM,gBAAgB,CAAC,eAAe;AAC1D;;AAEG;QACH,QAAQ,EAAE,gBAAgB,CAAC,WAAW;AACtC;;AAEG;QACH,GAAG,EAAE,gBAAgB,CAAC,eAAe;KACtC,CAAC;AACJ;;AC7CA;;;;;AAKG;AACI,MAAM,oBAAoB,GAAG,MAAwB;AAC1D,IAAA,MAAM,OAAO,GAAG,UAAU,CAAC,kBAAkB,CAAC,CAAC;IAE/C,IAAI,CAAC,OAAO,EAAE;QACZ,MAAM,IAAI,KAAK,CACb,sEAAsE;YACpE,6BAA6B;YAC7B,qDAAqD;YACrD,uBAAuB;AACvB,YAAA,wBAAwB,CAC3B,CAAC;KACH;IAED,OAAO,OAAO,CAAC,MAAM,CAAC;AACxB;;;;"}
1
+ {"version":3,"file":"headless.esm.js","sources":["../src/core/types.ts","../src/core/utils/deprecation.ts","../src/providers/AchievementProvider.tsx","../src/hooks/useAchievements.ts","../src/hooks/useAchievementState.ts","../src/hooks/useSimpleAchievements.ts","../src/hooks/useAchievementEngine.ts"],"sourcesContent":[null,null,null,null,null,null,null],"names":[],"mappings":"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"}