@cuemath/leap 2.8.63-akm-7 → 2.8.63-akm-8

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.
@@ -1,7 +1,7 @@
1
- import { useCallback as a, useRef as p, useEffect as A } from "react";
2
- import { CircleSoundKeyMapper as T, SWIPE_SOUND_ORDER as E } from "./constants.js";
1
+ import { useCallback as i, useRef as C, useEffect as A } from "react";
2
+ import { CircleSoundKeyMapper as O, SWIPE_SOUND_ORDER as E } from "./constants.js";
3
3
  import { CircleSoundKey as n } from "./use-circle-sounds-enums.js";
4
- let f = 0;
4
+ let d = 0;
5
5
  const u = {
6
6
  [n.BACKGROUND]: null,
7
7
  [n.BACKGROUND_RUSHHOUR]: null,
@@ -26,93 +26,91 @@ const u = {
26
26
  [n.TIME_INTRO]: null,
27
27
  [n.TIME_TARGET]: null,
28
28
  [n.METER_FILL]: null
29
- }, I = {}, G = () => {
30
- const s = a((e) => {
31
- if (!u[e]) {
32
- const l = new Audio(T[e]);
33
- u[e] = l;
29
+ }, I = {}, D = () => {
30
+ const r = i((l) => {
31
+ if (!u[l]) {
32
+ const e = new Audio(O[l]);
33
+ u[l] = e;
34
34
  }
35
- }, []), C = p({}), S = p({}), v = p(/* @__PURE__ */ new Set()), i = a(() => {
36
- document.visibilityState === "hidden" ? Object.keys(u).forEach((e) => {
37
- const l = u[e];
38
- l && !l.paused && (l.pause(), v.current.add(e));
39
- }) : document.visibilityState === "visible" && (v.current.forEach((e) => {
40
- const l = u[e];
41
- l == null || l.play();
42
- }), v.current.clear());
35
+ }, []), f = C(/* @__PURE__ */ new Set()), p = C({}), v = i(() => {
36
+ document.visibilityState === "hidden" ? Object.keys(u).forEach((l) => {
37
+ const e = u[l];
38
+ e && !e.paused && (e.pause(), f.current.add(l));
39
+ }) : document.visibilityState === "visible" && (f.current.forEach((l) => {
40
+ const e = u[l];
41
+ e == null || e.play();
42
+ }), f.current.clear());
43
43
  }, []);
44
44
  A(() => {
45
- document.addEventListener("visibilitychange", i);
46
- const e = C.current, l = S.current;
45
+ document.addEventListener("visibilitychange", v);
46
+ const l = p.current;
47
47
  return () => {
48
- document.removeEventListener("visibilitychange", i);
49
- for (const t of Object.values(e))
50
- t != null && clearInterval(t);
51
- for (const t of Object.values(l))
52
- t != null && clearInterval(t);
48
+ document.removeEventListener("visibilitychange", v);
49
+ for (const e of Object.values(l))
50
+ e != null && clearInterval(e);
53
51
  };
54
- }, [i]);
55
- const O = a(() => {
56
- var l;
57
- E.forEach((t) => {
58
- s(t);
52
+ }, [v]);
53
+ const S = i(() => {
54
+ var e;
55
+ E.forEach((o) => {
56
+ r(o);
59
57
  });
60
- const e = E[f] || n.SWIPE_01;
61
- f < E.length - 1 ? f++ : f = 0, (l = u[e]) == null || l.play();
62
- }, [s]), R = a(() => {
63
- var l;
64
- return s(n.TOGGLE), (l = u[n.TOGGLE]) == null ? void 0 : l.play();
65
- }, [s]), _ = a(
66
- (e, l = !0, t = !1) => {
67
- s(e);
68
- const o = u[e];
69
- if (!o) return;
70
- if (o.loop = t, l) {
71
- o.volume = 1;
72
- const d = o.play();
73
- I[e] = d;
58
+ const l = E[d] || n.SWIPE_01;
59
+ d < E.length - 1 ? d++ : d = 0, (e = u[l]) == null || e.play();
60
+ }, [r]), m = i(() => {
61
+ var e;
62
+ return r(n.TOGGLE), (e = u[n.TOGGLE]) == null ? void 0 : e.play();
63
+ }, [r]), _ = i(
64
+ (l, e = !0, o = !1) => {
65
+ r(l);
66
+ const t = u[l];
67
+ if (!t) return;
68
+ if (t.loop = o, e) {
69
+ t.volume = 1;
70
+ const a = t.play();
71
+ I[l] = a;
74
72
  return;
75
73
  }
76
- o.volume = 0;
77
- const r = o.play();
78
- I[e] = r;
74
+ t.volume = 0;
75
+ const s = t.play();
76
+ I[l] = s;
79
77
  const c = setInterval(() => {
80
- if (!o) {
78
+ if (!t) {
81
79
  clearInterval(c);
82
80
  return;
83
81
  }
84
- const d = o.volume || 0;
85
- d < 1 ? o.volume = Math.min(d + 0.1, 1) : clearInterval(c);
82
+ const a = t.volume || 0;
83
+ a < 1 ? t.volume = Math.min(a + 0.1, 1) : clearInterval(c);
86
84
  }, 100);
87
- return C.current[e] = c, o;
85
+ return p.current[l] = c, t;
88
86
  },
89
- [s]
90
- ), m = a((e, l = !0) => {
91
- var o;
92
- const t = u[e];
93
- I[e] !== void 0 && ((o = I[e]) == null || o.then(() => {
94
- if (!t) return;
95
- if (l) {
96
- t.pause();
87
+ [r]
88
+ ), R = i((l, e = !0) => {
89
+ var t;
90
+ const o = u[l];
91
+ I[l] !== void 0 && ((t = I[l]) == null || t.then(() => {
92
+ if (!o) return;
93
+ if (e) {
94
+ o.pause();
97
95
  return;
98
96
  }
99
- const r = setInterval(() => {
100
- if (!t) {
101
- clearInterval(r);
97
+ const s = setInterval(() => {
98
+ if (!o) {
99
+ clearInterval(s);
102
100
  return;
103
101
  }
104
- const c = t.volume || 0;
105
- c - 0.1 <= 0 ? (t.volume = 0, t.pause(), clearInterval(r)) : t.volume = c - 0.1;
102
+ const c = o.volume || 0;
103
+ c - 0.1 <= 0 ? (o.volume = 0, o.pause(), clearInterval(s)) : o.volume = c - 0.1;
106
104
  }, 100);
107
- S.current[e] = r;
108
- }).catch((r) => {
109
- console.log("sound not playing", r);
105
+ p.current[l] = s;
106
+ }).catch((s) => {
107
+ console.log("sound not playing", s);
110
108
  }));
111
109
  }, []);
112
- return { playSwipSound: O, play: _, stop: m, playButtonSound: R, handleVisibilityChange: i };
110
+ return { playSwipSound: S, play: _, stop: R, playButtonSound: m };
113
111
  };
114
112
  export {
115
113
  u as soundMapper,
116
- G as useCircleSounds
114
+ D as useCircleSounds
117
115
  };
118
116
  //# sourceMappingURL=use-circle-sounds.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-circle-sounds.js","sources":["../../../../../src/features/circle-games/hooks/use-circle-sounds/use-circle-sounds.ts"],"sourcesContent":["import { useCallback, useEffect, useRef } from 'react';\n\nimport { CircleSoundKeyMapper, SWIPE_SOUND_ORDER } from './constants';\nimport { CircleSoundKey } from './use-circle-sounds-enums';\n\nlet swipeSoundIndex = 0;\n\nexport const soundMapper: Record<keyof typeof CircleSoundKeyMapper, null | HTMLAudioElement> = {\n [CircleSoundKey.BACKGROUND]: null,\n [CircleSoundKey.BACKGROUND_RUSHHOUR]: null,\n [CircleSoundKey.TUTORIAL]: null,\n [CircleSoundKey.SWIPE_01]: null,\n [CircleSoundKey.SWIPE_02]: null,\n [CircleSoundKey.SWIPE_03]: null,\n [CircleSoundKey.SWIPE_04]: null,\n [CircleSoundKey.SWIPE_DOWN]: null,\n [CircleSoundKey.TOGGLE]: null,\n [CircleSoundKey.POINTS_AWARDED]: null,\n [CircleSoundKey.POINTS_ADDED]: null,\n [CircleSoundKey.GAME_CARD_CLICK]: null,\n [CircleSoundKey.CLOCK_IN]: null,\n [CircleSoundKey.CLOCK_OUT]: null,\n [CircleSoundKey.ACCURACY_IN]: null,\n [CircleSoundKey.ACCURACY_OUT]: null,\n [CircleSoundKey.STREAK_IN]: null,\n [CircleSoundKey.STREAK_OUT]: null,\n [CircleSoundKey.ACCURACY_INTRO]: null,\n [CircleSoundKey.ACCURACY_TARGET]: null,\n [CircleSoundKey.TIME_INTRO]: null,\n [CircleSoundKey.TIME_TARGET]: null,\n [CircleSoundKey.METER_FILL]: null,\n};\n\nconst soundInstancePromise: Partial<Record<keyof typeof CircleSoundKeyMapper, Promise<void>>> = {};\n\nexport const useCircleSounds = () => {\n const loadSound = useCallback((key: CircleSoundKey) => {\n if (!soundMapper[key]) {\n const loadedSound = new Audio(CircleSoundKeyMapper[key]);\n\n soundMapper[key] = loadedSound;\n }\n }, []);\n\n const fadeInRefs = useRef<Partial<Record<CircleSoundKey, ReturnType<typeof setInterval>>>>({});\n const fadeOutRefs = useRef<Partial<Record<CircleSoundKey, ReturnType<typeof setInterval>>>>({});\n const pausedSoundsRef = useRef<Set<CircleSoundKey>>(new Set());\n\n const handleVisibilityChange = useCallback(() => {\n if (document.visibilityState === 'hidden') {\n (Object.keys(soundMapper) as CircleSoundKey[]).forEach(key => {\n const sound = soundMapper[key];\n\n if (sound && !sound.paused) {\n sound.pause();\n pausedSoundsRef.current.add(key);\n }\n });\n } else if (document.visibilityState === 'visible') {\n pausedSoundsRef.current.forEach(key => {\n const sound = soundMapper[key];\n\n sound?.play();\n });\n pausedSoundsRef.current.clear();\n }\n }, []);\n\n useEffect(() => {\n document.addEventListener('visibilitychange', handleVisibilityChange);\n\n const fadeInMap = fadeInRefs.current;\n const fadeOutMap = fadeOutRefs.current;\n\n return () => {\n document.removeEventListener('visibilitychange', handleVisibilityChange);\n\n // Clear all fade-in intervals\n for (const intervalId of Object.values(fadeInMap)) {\n if (intervalId != null) clearInterval(intervalId);\n }\n\n // Clear all fade-out intervals\n for (const intervalId of Object.values(fadeOutMap)) {\n if (intervalId != null) clearInterval(intervalId);\n }\n };\n }, [handleVisibilityChange]);\n\n const playSwipSound = useCallback(() => {\n SWIPE_SOUND_ORDER.forEach(key => {\n loadSound(key);\n });\n\n const key = SWIPE_SOUND_ORDER[swipeSoundIndex] || CircleSoundKey.SWIPE_01;\n\n if (swipeSoundIndex < SWIPE_SOUND_ORDER.length - 1) {\n swipeSoundIndex++;\n } else {\n swipeSoundIndex = 0;\n }\n soundMapper[key]?.play();\n }, [loadSound]);\n\n const playButtonSound = useCallback(() => {\n loadSound(CircleSoundKey.TOGGLE);\n const sound = soundMapper[CircleSoundKey.TOGGLE]?.play();\n\n return sound;\n }, [loadSound]);\n\n const play = useCallback(\n (key: CircleSoundKey, immediately: boolean = true, loop = false) => {\n loadSound(key);\n const soundInstance = soundMapper[key];\n\n if (!soundInstance) return;\n\n soundInstance.loop = loop;\n if (immediately) {\n soundInstance.volume = 1;\n const promise = soundInstance.play();\n\n soundInstancePromise[key] = promise;\n\n return;\n }\n\n soundInstance.volume = 0;\n const promise = soundInstance.play();\n\n soundInstancePromise[key] = promise;\n\n const intervalId = setInterval(() => {\n if (!soundInstance) {\n clearInterval(intervalId);\n\n return;\n }\n\n const vol = soundInstance.volume || 0;\n\n if (vol < 1) {\n soundInstance.volume = Math.min(vol + 0.1, 1);\n } else {\n clearInterval(intervalId);\n }\n }, 100);\n\n fadeInRefs.current[key] = intervalId;\n\n return soundInstance;\n },\n [loadSound],\n );\n\n const stop = useCallback((key: CircleSoundKey, immediately: boolean = true) => {\n const soundInstance = soundMapper[key];\n\n if (soundInstancePromise[key] !== undefined) {\n soundInstancePromise[key]\n ?.then(() => {\n if (!soundInstance) return;\n\n if (immediately) {\n soundInstance.pause();\n\n return;\n }\n\n const intervalId = setInterval(() => {\n if (!soundInstance) {\n clearInterval(intervalId);\n\n return;\n }\n\n const vol = soundInstance.volume || 0;\n\n if (vol - 0.1 <= 0) {\n soundInstance.volume = 0;\n soundInstance.pause();\n clearInterval(intervalId);\n } else {\n soundInstance.volume = vol - 0.1;\n }\n }, 100);\n\n fadeOutRefs.current[key] = intervalId;\n })\n .catch(err => {\n // eslint-disable-next-line no-console\n console.log('sound not playing', err);\n });\n }\n }, []);\n\n return { playSwipSound, play, stop, playButtonSound, handleVisibilityChange };\n};\n"],"names":["swipeSoundIndex","soundMapper","CircleSoundKey","soundInstancePromise","useCircleSounds","loadSound","useCallback","key","loadedSound","CircleSoundKeyMapper","fadeInRefs","useRef","fadeOutRefs","pausedSoundsRef","handleVisibilityChange","sound","useEffect","fadeInMap","fadeOutMap","intervalId","playSwipSound","SWIPE_SOUND_ORDER","_a","playButtonSound","play","immediately","loop","soundInstance","promise","vol","stop","err"],"mappings":"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"}
1
+ {"version":3,"file":"use-circle-sounds.js","sources":["../../../../../src/features/circle-games/hooks/use-circle-sounds/use-circle-sounds.ts"],"sourcesContent":["import { useCallback, useEffect, useRef } from 'react';\n\nimport { CircleSoundKeyMapper, SWIPE_SOUND_ORDER } from './constants';\nimport { CircleSoundKey } from './use-circle-sounds-enums';\n\nlet swipeSoundIndex = 0;\n\nexport const soundMapper: Record<keyof typeof CircleSoundKeyMapper, null | HTMLAudioElement> = {\n [CircleSoundKey.BACKGROUND]: null,\n [CircleSoundKey.BACKGROUND_RUSHHOUR]: null,\n [CircleSoundKey.TUTORIAL]: null,\n [CircleSoundKey.SWIPE_01]: null,\n [CircleSoundKey.SWIPE_02]: null,\n [CircleSoundKey.SWIPE_03]: null,\n [CircleSoundKey.SWIPE_04]: null,\n [CircleSoundKey.SWIPE_DOWN]: null,\n [CircleSoundKey.TOGGLE]: null,\n [CircleSoundKey.POINTS_AWARDED]: null,\n [CircleSoundKey.POINTS_ADDED]: null,\n [CircleSoundKey.GAME_CARD_CLICK]: null,\n [CircleSoundKey.CLOCK_IN]: null,\n [CircleSoundKey.CLOCK_OUT]: null,\n [CircleSoundKey.ACCURACY_IN]: null,\n [CircleSoundKey.ACCURACY_OUT]: null,\n [CircleSoundKey.STREAK_IN]: null,\n [CircleSoundKey.STREAK_OUT]: null,\n [CircleSoundKey.ACCURACY_INTRO]: null,\n [CircleSoundKey.ACCURACY_TARGET]: null,\n [CircleSoundKey.TIME_INTRO]: null,\n [CircleSoundKey.TIME_TARGET]: null,\n [CircleSoundKey.METER_FILL]: null,\n};\n\nconst soundInstancePromise: Partial<Record<keyof typeof CircleSoundKeyMapper, Promise<void>>> = {};\n\ntype TimeoutMap = Partial<Record<CircleSoundKey, ReturnType<typeof setInterval>>>;\n\nexport const useCircleSounds = () => {\n const loadSound = useCallback((key: CircleSoundKey) => {\n if (!soundMapper[key]) {\n const loadedSound = new Audio(CircleSoundKeyMapper[key]);\n\n soundMapper[key] = loadedSound;\n }\n }, []);\n\n const pausedSoundsRef = useRef<Set<CircleSoundKey>>(new Set());\n const timeoutRefs = useRef<TimeoutMap>({});\n\n const handleVisibilityChange = useCallback(() => {\n if (document.visibilityState === 'hidden') {\n (Object.keys(soundMapper) as CircleSoundKey[]).forEach(key => {\n const sound = soundMapper[key];\n\n if (sound && !sound.paused) {\n sound.pause();\n pausedSoundsRef.current.add(key);\n }\n });\n } else if (document.visibilityState === 'visible') {\n pausedSoundsRef.current.forEach(key => {\n const sound = soundMapper[key];\n\n sound?.play();\n });\n pausedSoundsRef.current.clear();\n }\n }, []);\n\n useEffect(() => {\n document.addEventListener('visibilitychange', handleVisibilityChange);\n const timeouts = timeoutRefs.current;\n\n return () => {\n document.removeEventListener('visibilitychange', handleVisibilityChange);\n for (const id of Object.values(timeouts)) {\n if (id != null) clearInterval(id);\n }\n };\n }, [handleVisibilityChange]);\n\n const playSwipSound = useCallback(() => {\n SWIPE_SOUND_ORDER.forEach(key => {\n loadSound(key);\n });\n\n const key = SWIPE_SOUND_ORDER[swipeSoundIndex] || CircleSoundKey.SWIPE_01;\n\n if (swipeSoundIndex < SWIPE_SOUND_ORDER.length - 1) {\n swipeSoundIndex++;\n } else {\n swipeSoundIndex = 0;\n }\n soundMapper[key]?.play();\n }, [loadSound]);\n\n const playButtonSound = useCallback(() => {\n loadSound(CircleSoundKey.TOGGLE);\n const sound = soundMapper[CircleSoundKey.TOGGLE]?.play();\n\n return sound;\n }, [loadSound]);\n\n const play = useCallback(\n (key: CircleSoundKey, immediately: boolean = true, loop = false) => {\n loadSound(key);\n const soundInstance = soundMapper[key];\n\n if (!soundInstance) return;\n\n soundInstance.loop = loop;\n if (immediately) {\n soundInstance.volume = 1;\n const promise = soundInstance.play();\n\n soundInstancePromise[key] = promise;\n\n return;\n }\n\n soundInstance.volume = 0;\n const promise = soundInstance.play();\n\n soundInstancePromise[key] = promise;\n\n const intervalId = setInterval(() => {\n if (!soundInstance) {\n clearInterval(intervalId);\n\n return;\n }\n\n const vol = soundInstance.volume || 0;\n\n if (vol < 1) {\n soundInstance.volume = Math.min(vol + 0.1, 1);\n } else {\n clearInterval(intervalId);\n }\n }, 100);\n\n timeoutRefs.current[key] = intervalId;\n\n return soundInstance;\n },\n [loadSound],\n );\n\n const stop = useCallback((key: CircleSoundKey, immediately: boolean = true) => {\n const soundInstance = soundMapper[key];\n\n if (soundInstancePromise[key] !== undefined) {\n soundInstancePromise[key]\n ?.then(() => {\n if (!soundInstance) return;\n\n if (immediately) {\n soundInstance.pause();\n\n return;\n }\n\n const intervalId = setInterval(() => {\n if (!soundInstance) {\n clearInterval(intervalId);\n\n return;\n }\n\n const vol = soundInstance.volume || 0;\n\n if (vol - 0.1 <= 0) {\n soundInstance.volume = 0;\n soundInstance.pause();\n clearInterval(intervalId);\n } else {\n soundInstance.volume = vol - 0.1;\n }\n }, 100);\n\n timeoutRefs.current[key] = intervalId;\n })\n .catch(err => {\n // eslint-disable-next-line no-console\n console.log('sound not playing', err);\n });\n }\n }, []);\n\n return { playSwipSound, play, stop, playButtonSound };\n};\n"],"names":["swipeSoundIndex","soundMapper","CircleSoundKey","soundInstancePromise","useCircleSounds","loadSound","useCallback","key","loadedSound","CircleSoundKeyMapper","pausedSoundsRef","useRef","timeoutRefs","handleVisibilityChange","sound","useEffect","timeouts","id","playSwipSound","SWIPE_SOUND_ORDER","_a","playButtonSound","play","immediately","loop","soundInstance","promise","intervalId","vol","stop","err"],"mappings":";;;AAKA,IAAIA,IAAkB;AAEf,MAAMC,IAAkF;AAAA,EAC7F,CAACC,EAAe,UAAU,GAAG;AAAA,EAC7B,CAACA,EAAe,mBAAmB,GAAG;AAAA,EACtC,CAACA,EAAe,QAAQ,GAAG;AAAA,EAC3B,CAACA,EAAe,QAAQ,GAAG;AAAA,EAC3B,CAACA,EAAe,QAAQ,GAAG;AAAA,EAC3B,CAACA,EAAe,QAAQ,GAAG;AAAA,EAC3B,CAACA,EAAe,QAAQ,GAAG;AAAA,EAC3B,CAACA,EAAe,UAAU,GAAG;AAAA,EAC7B,CAACA,EAAe,MAAM,GAAG;AAAA,EACzB,CAACA,EAAe,cAAc,GAAG;AAAA,EACjC,CAACA,EAAe,YAAY,GAAG;AAAA,EAC/B,CAACA,EAAe,eAAe,GAAG;AAAA,EAClC,CAACA,EAAe,QAAQ,GAAG;AAAA,EAC3B,CAACA,EAAe,SAAS,GAAG;AAAA,EAC5B,CAACA,EAAe,WAAW,GAAG;AAAA,EAC9B,CAACA,EAAe,YAAY,GAAG;AAAA,EAC/B,CAACA,EAAe,SAAS,GAAG;AAAA,EAC5B,CAACA,EAAe,UAAU,GAAG;AAAA,EAC7B,CAACA,EAAe,cAAc,GAAG;AAAA,EACjC,CAACA,EAAe,eAAe,GAAG;AAAA,EAClC,CAACA,EAAe,UAAU,GAAG;AAAA,EAC7B,CAACA,EAAe,WAAW,GAAG;AAAA,EAC9B,CAACA,EAAe,UAAU,GAAG;AAC/B,GAEMC,IAA0F,CAAA,GAInFC,IAAkB,MAAM;AAC7B,QAAAC,IAAYC,EAAY,CAACC,MAAwB;AACjD,QAAA,CAACN,EAAYM,CAAG,GAAG;AACrB,YAAMC,IAAc,IAAI,MAAMC,EAAqBF,CAAG,CAAC;AAEvD,MAAAN,EAAYM,CAAG,IAAIC;AAAA,IACrB;AAAA,EACF,GAAG,CAAE,CAAA,GAECE,IAAkBC,EAAgC,oBAAA,IAAK,CAAA,GACvDC,IAAcD,EAAmB,CAAA,CAAE,GAEnCE,IAAyBP,EAAY,MAAM;AAC3C,IAAA,SAAS,oBAAoB,WAC9B,OAAO,KAAKL,CAAW,EAAuB,QAAQ,CAAOM,MAAA;AACtD,YAAAO,IAAQb,EAAYM,CAAG;AAEzB,MAAAO,KAAS,CAACA,EAAM,WAClBA,EAAM,MAAM,GACIJ,EAAA,QAAQ,IAAIH,CAAG;AAAA,IACjC,CACD,IACQ,SAAS,oBAAoB,cACtBG,EAAA,QAAQ,QAAQ,CAAOH,MAAA;AAC/B,YAAAO,IAAQb,EAAYM,CAAG;AAE7B,MAAAO,KAAA,QAAAA,EAAO;AAAA,IAAK,CACb,GACDJ,EAAgB,QAAQ;EAE5B,GAAG,CAAE,CAAA;AAEL,EAAAK,EAAU,MAAM;AACL,aAAA,iBAAiB,oBAAoBF,CAAsB;AACpE,UAAMG,IAAWJ,EAAY;AAE7B,WAAO,MAAM;AACF,eAAA,oBAAoB,oBAAoBC,CAAsB;AACvE,iBAAWI,KAAM,OAAO,OAAOD,CAAQ;AACjC,QAAAC,KAAM,QAAM,cAAcA,CAAE;AAAA,IAClC;AAAA,EACF,GACC,CAACJ,CAAsB,CAAC;AAErB,QAAAK,IAAgBZ,EAAY,MAAM;;AACpB,IAAAa,EAAA,QAAQ,CAAAZ,MAAO;AAC/B,MAAAF,EAAUE,CAAG;AAAA,IAAA,CACd;AAED,UAAMA,IAAMY,EAAkBnB,CAAe,KAAKE,EAAe;AAE7D,IAAAF,IAAkBmB,EAAkB,SAAS,IAC/CnB,MAEkBA,IAAA,IAERoB,IAAAnB,EAAAM,CAAG,MAAH,QAAAa,EAAM;AAAA,EAAK,GACtB,CAACf,CAAS,CAAC,GAERgB,IAAkBf,EAAY,MAAM;;AACxC,WAAAD,EAAUH,EAAe,MAAM,IACjBkB,IAAAnB,EAAYC,EAAe,MAAM,MAAjC,gBAAAkB,EAAoC;AAAA,EAE3C,GACN,CAACf,CAAS,CAAC,GAERiB,IAAOhB;AAAA,IACX,CAACC,GAAqBgB,IAAuB,IAAMC,IAAO,OAAU;AAClE,MAAAnB,EAAUE,CAAG;AACP,YAAAkB,IAAgBxB,EAAYM,CAAG;AAErC,UAAI,CAACkB,EAAe;AAGpB,UADAA,EAAc,OAAOD,GACjBD,GAAa;AACf,QAAAE,EAAc,SAAS;AACjBC,cAAAA,IAAUD,EAAc;AAE9B,QAAAtB,EAAqBI,CAAG,IAAImB;AAE5B;AAAA,MACF;AAEA,MAAAD,EAAc,SAAS;AACjB,YAAAC,IAAUD,EAAc;AAE9B,MAAAtB,EAAqBI,CAAG,IAAImB;AAEtB,YAAAC,IAAa,YAAY,MAAM;AACnC,YAAI,CAACF,GAAe;AAClB,wBAAcE,CAAU;AAExB;AAAA,QACF;AAEM,cAAAC,IAAMH,EAAc,UAAU;AAEpC,QAAIG,IAAM,IACRH,EAAc,SAAS,KAAK,IAAIG,IAAM,KAAK,CAAC,IAE5C,cAAcD,CAAU;AAAA,SAEzB,GAAG;AAEM,aAAAf,EAAA,QAAQL,CAAG,IAAIoB,GAEpBF;AAAA,IACT;AAAA,IACA,CAACpB,CAAS;AAAA,EAAA,GAGNwB,IAAOvB,EAAY,CAACC,GAAqBgB,IAAuB,OAAS;;AACvE,UAAAE,IAAgBxB,EAAYM,CAAG;AAEjC,IAAAJ,EAAqBI,CAAG,MAAM,YACXa,IAAAjB,EAAAI,CAAG,MAAH,QAAAa,EACjB,KAAK,MAAM;AACX,UAAI,CAACK,EAAe;AAEpB,UAAIF,GAAa;AACf,QAAAE,EAAc,MAAM;AAEpB;AAAA,MACF;AAEM,YAAAE,IAAa,YAAY,MAAM;AACnC,YAAI,CAACF,GAAe;AAClB,wBAAcE,CAAU;AAExB;AAAA,QACF;AAEM,cAAAC,IAAMH,EAAc,UAAU;AAEhC,QAAAG,IAAM,OAAO,KACfH,EAAc,SAAS,GACvBA,EAAc,MAAM,GACpB,cAAcE,CAAU,KAExBF,EAAc,SAASG,IAAM;AAAA,SAE9B,GAAG;AAEM,MAAAhB,EAAA,QAAQL,CAAG,IAAIoB;AAAA,IAAA,GAE5B,MAAM,CAAOG,MAAA;AAEJ,cAAA,IAAI,qBAAqBA,CAAG;AAAA,IAAA;AAAA,EAG5C,GAAG,CAAE,CAAA;AAEL,SAAO,EAAE,eAAAZ,GAAe,MAAAI,GAAM,MAAAO,GAAM,iBAAAR,EAAgB;AACtD;"}
package/dist/index.d.ts CHANGED
@@ -4977,7 +4977,6 @@ export declare const useCircleSounds: () => {
4977
4977
  play: (key: CircleSoundKey, immediately?: boolean, loop?: boolean) => HTMLAudioElement | undefined;
4978
4978
  stop: (key: CircleSoundKey, immediately?: boolean) => void;
4979
4979
  playButtonSound: () => Promise<void> | undefined;
4980
- handleVisibilityChange: () => void;
4981
4980
  };
4982
4981
 
4983
4982
  export declare const useClassTimeAlerts: ({ alertLevel, classStartedOn, classDuration, onUpdateClassTimeAlertConfig, }: IUseClassTimeAlerts) => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cuemath/leap",
3
- "version": "2.8.63-akm-7",
3
+ "version": "2.8.63-akm-8",
4
4
  "type": "module",
5
5
  "files": [
6
6
  "dist"