@cuemath/leap 3.3.14-ass1 → 3.3.14-m
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/dist/features/circle-games/hooks/use-circle-sounds/constants.js +5 -7
- package/dist/features/circle-games/hooks/use-circle-sounds/constants.js.map +1 -1
- package/dist/features/circle-games/hooks/use-circle-sounds/use-circle-sounds.js +81 -103
- package/dist/features/circle-games/hooks/use-circle-sounds/use-circle-sounds.js.map +1 -1
- package/dist/features/wins-dashboard/belts-elements-stickers/elements.js +54 -54
- package/dist/features/wins-dashboard/belts-elements-stickers/elements.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/package.json +1 -1
- package/dist/features/circle-games/hooks/use-circle-sounds/helper.js +0 -19
- package/dist/features/circle-games/hooks/use-circle-sounds/helper.js.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { CircleSoundKey as c } from "./use-circle-sounds-enums.js";
|
|
2
|
-
const e = "https://cuemath-circle.s3.ap-southeast-1.amazonaws.com/assets/sounds/production", r = "https://static.cuemath.com/static/sounds",
|
|
2
|
+
const e = "https://cuemath-circle.s3.ap-southeast-1.amazonaws.com/assets/sounds/production", r = "https://static.cuemath.com/static/sounds", i = {
|
|
3
3
|
[c.BACKGROUND]: `${e}/bg-sound.mp3`,
|
|
4
4
|
[c.BACKGROUND_RUSHHOUR]: `${e}/circle-background-rushhour.mp3`,
|
|
5
5
|
[c.TUTORIAL]: `${e}/bg-sound-tutorials.mp3`,
|
|
@@ -28,16 +28,14 @@ const e = "https://cuemath-circle.s3.ap-southeast-1.amazonaws.com/assets/sounds/
|
|
|
28
28
|
[c.ALL_DONE]: `${e}/all-done.mp3`,
|
|
29
29
|
[c.DOING_GREAT]: `${e}/doing-great.mp3`,
|
|
30
30
|
[c.KEEP_IT_UP]: `${e}/keep-it-up.mp3`
|
|
31
|
-
},
|
|
31
|
+
}, t = [
|
|
32
32
|
c.SWIPE_04,
|
|
33
33
|
c.SWIPE_02,
|
|
34
34
|
c.SWIPE_03,
|
|
35
35
|
c.SWIPE_01
|
|
36
|
-
]
|
|
36
|
+
];
|
|
37
37
|
export {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
_ as VOLUME_FADE_DURATION,
|
|
41
|
-
s as VOLUME_TO_CHANGE
|
|
38
|
+
i as CircleSoundKeyMapper,
|
|
39
|
+
t as SWIPE_SOUND_ORDER
|
|
42
40
|
};
|
|
43
41
|
//# sourceMappingURL=constants.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sources":["../../../../../src/features/circle-games/hooks/use-circle-sounds/constants.ts"],"sourcesContent":["import { CircleSoundKey } from './use-circle-sounds-enums';\n\nconst BASE_URL = 'https://cuemath-circle.s3.ap-southeast-1.amazonaws.com/assets/sounds/production';\n\nconst STATIC_BASE_URL = 'https://static.cuemath.com/static/sounds';\n\nexport const CircleSoundKeyMapper = {\n [CircleSoundKey.BACKGROUND]: `${BASE_URL}/bg-sound.mp3`,\n [CircleSoundKey.BACKGROUND_RUSHHOUR]: `${BASE_URL}/circle-background-rushhour.mp3`,\n [CircleSoundKey.TUTORIAL]: `${BASE_URL}/bg-sound-tutorials.mp3`,\n [CircleSoundKey.SWIPE_01]: `${BASE_URL}/circle-swipe-1.wav`,\n [CircleSoundKey.SWIPE_02]: `${BASE_URL}/circle-swipe-2.wav`,\n [CircleSoundKey.SWIPE_03]: `${BASE_URL}/circle-swipe-3.wav`,\n [CircleSoundKey.SWIPE_04]: `${BASE_URL}/circle-swipe-4.wav`,\n [CircleSoundKey.SWIPE_DOWN]: `${BASE_URL}/circle-swipe-down-1.wav`,\n [CircleSoundKey.TOGGLE]: `${BASE_URL}/circle-button-v3.wav`,\n [CircleSoundKey.POINTS_AWARDED]: `${BASE_URL}/circle-points-v1.wav`,\n [CircleSoundKey.POINTS_ADDED]: `${BASE_URL}/circle-points-add-v1.wav`,\n [CircleSoundKey.GAME_CARD_CLICK]: `${BASE_URL}/circle-gamecard-button-v1.wav`,\n [CircleSoundKey.CLOCK_IN]: `${BASE_URL}/circle-meter-v1.wav`,\n [CircleSoundKey.CLOCK_OUT]: `${BASE_URL}/circle-disappear-v1.wav`,\n [CircleSoundKey.ACCURACY_IN]: `${BASE_URL}/circle-meter-v1.wav`,\n [CircleSoundKey.ACCURACY_OUT]: `${BASE_URL}/circle-disappear-v1.wav`,\n [CircleSoundKey.STREAK_IN]: `${BASE_URL}/circle-streak-v1.wav`,\n [CircleSoundKey.STREAK_OUT]: `${BASE_URL}/circle-disappear-v1.wav`,\n [CircleSoundKey.ACCURACY_INTRO]: `${STATIC_BASE_URL}/accuracy-intro.mp3`,\n [CircleSoundKey.ACCURACY_TARGET]: `${STATIC_BASE_URL}/accuracy-target.mp3`,\n [CircleSoundKey.TIME_INTRO]: `${STATIC_BASE_URL}/timer-intro.mp3`,\n [CircleSoundKey.TIME_TARGET]: `${STATIC_BASE_URL}/timer-target.mp3`,\n [CircleSoundKey.METER_FILL]: `${STATIC_BASE_URL}/meter-fill.mp3`,\n [CircleSoundKey.YOUR_SCORE]: `${BASE_URL}/your-score.mp3`,\n [CircleSoundKey.HIGH_SCORE]: `${BASE_URL}/high-score.mp3`,\n [CircleSoundKey.ALL_DONE]: `${BASE_URL}/all-done.mp3`,\n [CircleSoundKey.DOING_GREAT]: `${BASE_URL}/doing-great.mp3`,\n [CircleSoundKey.KEEP_IT_UP]: `${BASE_URL}/keep-it-up.mp3`,\n};\n\nexport const SWIPE_SOUND_ORDER = [\n CircleSoundKey.SWIPE_04,\n CircleSoundKey.SWIPE_02,\n CircleSoundKey.SWIPE_03,\n CircleSoundKey.SWIPE_01,\n];\n\nexport const VOLUME_FADE_DURATION = 100; // in milliseconds\nexport const VOLUME_TO_CHANGE = 0.1; // volume change per fade step\n"],"names":["BASE_URL","STATIC_BASE_URL","CircleSoundKeyMapper","CircleSoundKey","SWIPE_SOUND_ORDER"
|
|
1
|
+
{"version":3,"file":"constants.js","sources":["../../../../../src/features/circle-games/hooks/use-circle-sounds/constants.ts"],"sourcesContent":["import { CircleSoundKey } from './use-circle-sounds-enums';\n\nconst BASE_URL = 'https://cuemath-circle.s3.ap-southeast-1.amazonaws.com/assets/sounds/production';\n\nconst STATIC_BASE_URL = 'https://static.cuemath.com/static/sounds';\n\nexport const CircleSoundKeyMapper = {\n [CircleSoundKey.BACKGROUND]: `${BASE_URL}/bg-sound.mp3`,\n [CircleSoundKey.BACKGROUND_RUSHHOUR]: `${BASE_URL}/circle-background-rushhour.mp3`,\n [CircleSoundKey.TUTORIAL]: `${BASE_URL}/bg-sound-tutorials.mp3`,\n [CircleSoundKey.SWIPE_01]: `${BASE_URL}/circle-swipe-1.wav`,\n [CircleSoundKey.SWIPE_02]: `${BASE_URL}/circle-swipe-2.wav`,\n [CircleSoundKey.SWIPE_03]: `${BASE_URL}/circle-swipe-3.wav`,\n [CircleSoundKey.SWIPE_04]: `${BASE_URL}/circle-swipe-4.wav`,\n [CircleSoundKey.SWIPE_DOWN]: `${BASE_URL}/circle-swipe-down-1.wav`,\n [CircleSoundKey.TOGGLE]: `${BASE_URL}/circle-button-v3.wav`,\n [CircleSoundKey.POINTS_AWARDED]: `${BASE_URL}/circle-points-v1.wav`,\n [CircleSoundKey.POINTS_ADDED]: `${BASE_URL}/circle-points-add-v1.wav`,\n [CircleSoundKey.GAME_CARD_CLICK]: `${BASE_URL}/circle-gamecard-button-v1.wav`,\n [CircleSoundKey.CLOCK_IN]: `${BASE_URL}/circle-meter-v1.wav`,\n [CircleSoundKey.CLOCK_OUT]: `${BASE_URL}/circle-disappear-v1.wav`,\n [CircleSoundKey.ACCURACY_IN]: `${BASE_URL}/circle-meter-v1.wav`,\n [CircleSoundKey.ACCURACY_OUT]: `${BASE_URL}/circle-disappear-v1.wav`,\n [CircleSoundKey.STREAK_IN]: `${BASE_URL}/circle-streak-v1.wav`,\n [CircleSoundKey.STREAK_OUT]: `${BASE_URL}/circle-disappear-v1.wav`,\n [CircleSoundKey.ACCURACY_INTRO]: `${STATIC_BASE_URL}/accuracy-intro.mp3`,\n [CircleSoundKey.ACCURACY_TARGET]: `${STATIC_BASE_URL}/accuracy-target.mp3`,\n [CircleSoundKey.TIME_INTRO]: `${STATIC_BASE_URL}/timer-intro.mp3`,\n [CircleSoundKey.TIME_TARGET]: `${STATIC_BASE_URL}/timer-target.mp3`,\n [CircleSoundKey.METER_FILL]: `${STATIC_BASE_URL}/meter-fill.mp3`,\n [CircleSoundKey.YOUR_SCORE]: `${BASE_URL}/your-score.mp3`,\n [CircleSoundKey.HIGH_SCORE]: `${BASE_URL}/high-score.mp3`,\n [CircleSoundKey.ALL_DONE]: `${BASE_URL}/all-done.mp3`,\n [CircleSoundKey.DOING_GREAT]: `${BASE_URL}/doing-great.mp3`,\n [CircleSoundKey.KEEP_IT_UP]: `${BASE_URL}/keep-it-up.mp3`,\n};\n\nexport const SWIPE_SOUND_ORDER = [\n CircleSoundKey.SWIPE_04,\n CircleSoundKey.SWIPE_02,\n CircleSoundKey.SWIPE_03,\n CircleSoundKey.SWIPE_01,\n];\n\nexport const VOLUME_FADE_DURATION = 100; // in milliseconds\nexport const VOLUME_TO_CHANGE = 0.1; // volume change per fade step\n"],"names":["BASE_URL","STATIC_BASE_URL","CircleSoundKeyMapper","CircleSoundKey","SWIPE_SOUND_ORDER"],"mappings":";AAEA,MAAMA,IAAW,mFAEXC,IAAkB,4CAEXC,IAAuB;AAAA,EAClC,CAACC,EAAe,UAAU,GAAG,GAAGH,CAAQ;AAAA,EACxC,CAACG,EAAe,mBAAmB,GAAG,GAAGH,CAAQ;AAAA,EACjD,CAACG,EAAe,QAAQ,GAAG,GAAGH,CAAQ;AAAA,EACtC,CAACG,EAAe,QAAQ,GAAG,GAAGH,CAAQ;AAAA,EACtC,CAACG,EAAe,QAAQ,GAAG,GAAGH,CAAQ;AAAA,EACtC,CAACG,EAAe,QAAQ,GAAG,GAAGH,CAAQ;AAAA,EACtC,CAACG,EAAe,QAAQ,GAAG,GAAGH,CAAQ;AAAA,EACtC,CAACG,EAAe,UAAU,GAAG,GAAGH,CAAQ;AAAA,EACxC,CAACG,EAAe,MAAM,GAAG,GAAGH,CAAQ;AAAA,EACpC,CAACG,EAAe,cAAc,GAAG,GAAGH,CAAQ;AAAA,EAC5C,CAACG,EAAe,YAAY,GAAG,GAAGH,CAAQ;AAAA,EAC1C,CAACG,EAAe,eAAe,GAAG,GAAGH,CAAQ;AAAA,EAC7C,CAACG,EAAe,QAAQ,GAAG,GAAGH,CAAQ;AAAA,EACtC,CAACG,EAAe,SAAS,GAAG,GAAGH,CAAQ;AAAA,EACvC,CAACG,EAAe,WAAW,GAAG,GAAGH,CAAQ;AAAA,EACzC,CAACG,EAAe,YAAY,GAAG,GAAGH,CAAQ;AAAA,EAC1C,CAACG,EAAe,SAAS,GAAG,GAAGH,CAAQ;AAAA,EACvC,CAACG,EAAe,UAAU,GAAG,GAAGH,CAAQ;AAAA,EACxC,CAACG,EAAe,cAAc,GAAG,GAAGF,CAAe;AAAA,EACnD,CAACE,EAAe,eAAe,GAAG,GAAGF,CAAe;AAAA,EACpD,CAACE,EAAe,UAAU,GAAG,GAAGF,CAAe;AAAA,EAC/C,CAACE,EAAe,WAAW,GAAG,GAAGF,CAAe;AAAA,EAChD,CAACE,EAAe,UAAU,GAAG,GAAGF,CAAe;AAAA,EAC/C,CAACE,EAAe,UAAU,GAAG,GAAGH,CAAQ;AAAA,EACxC,CAACG,EAAe,UAAU,GAAG,GAAGH,CAAQ;AAAA,EACxC,CAACG,EAAe,QAAQ,GAAG,GAAGH,CAAQ;AAAA,EACtC,CAACG,EAAe,WAAW,GAAG,GAAGH,CAAQ;AAAA,EACzC,CAACG,EAAe,UAAU,GAAG,GAAGH,CAAQ;AAC1C,GAEaI,IAAoB;AAAA,EAC/BD,EAAe;AAAA,EACfA,EAAe;AAAA,EACfA,EAAe;AAAA,EACfA,EAAe;AACjB;"}
|
|
@@ -1,113 +1,91 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { useAutoPlayPermission as
|
|
3
|
-
import { CircleSoundKeyMapper as
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
[
|
|
9
|
-
[
|
|
10
|
-
[
|
|
11
|
-
[
|
|
12
|
-
[
|
|
13
|
-
[
|
|
14
|
-
[
|
|
15
|
-
[
|
|
16
|
-
[
|
|
17
|
-
[
|
|
18
|
-
[
|
|
19
|
-
[
|
|
20
|
-
[
|
|
21
|
-
[
|
|
22
|
-
[
|
|
23
|
-
[
|
|
24
|
-
[
|
|
25
|
-
[
|
|
26
|
-
[
|
|
27
|
-
[
|
|
28
|
-
[
|
|
29
|
-
[
|
|
30
|
-
[
|
|
31
|
-
[
|
|
32
|
-
[
|
|
33
|
-
[
|
|
34
|
-
[
|
|
35
|
-
|
|
36
|
-
},
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
c[t] = l;
|
|
1
|
+
import { useRef as O, useCallback as s, useEffect as D } from "react";
|
|
2
|
+
import { useAutoPlayPermission as N } from "../../../hooks/use-auto-play-permission/use-auto-play-permission.js";
|
|
3
|
+
import { CircleSoundKeyMapper as b, SWIPE_SOUND_ORDER as I } from "./constants.js";
|
|
4
|
+
import { CircleSoundKey as e } from "./use-circle-sounds-enums.js";
|
|
5
|
+
let A = 0;
|
|
6
|
+
const u = new (window.AudioContext || window.webkitAudioContext)(), E = {
|
|
7
|
+
[e.BACKGROUND]: null,
|
|
8
|
+
[e.BACKGROUND_RUSHHOUR]: null,
|
|
9
|
+
[e.TUTORIAL]: null,
|
|
10
|
+
[e.SWIPE_01]: null,
|
|
11
|
+
[e.SWIPE_02]: null,
|
|
12
|
+
[e.SWIPE_03]: null,
|
|
13
|
+
[e.SWIPE_04]: null,
|
|
14
|
+
[e.SWIPE_DOWN]: null,
|
|
15
|
+
[e.TOGGLE]: null,
|
|
16
|
+
[e.POINTS_AWARDED]: null,
|
|
17
|
+
[e.POINTS_ADDED]: null,
|
|
18
|
+
[e.GAME_CARD_CLICK]: null,
|
|
19
|
+
[e.CLOCK_IN]: null,
|
|
20
|
+
[e.CLOCK_OUT]: null,
|
|
21
|
+
[e.ACCURACY_IN]: null,
|
|
22
|
+
[e.ACCURACY_OUT]: null,
|
|
23
|
+
[e.STREAK_IN]: null,
|
|
24
|
+
[e.STREAK_OUT]: null,
|
|
25
|
+
[e.ACCURACY_INTRO]: null,
|
|
26
|
+
[e.ACCURACY_TARGET]: null,
|
|
27
|
+
[e.TIME_INTRO]: null,
|
|
28
|
+
[e.TIME_TARGET]: null,
|
|
29
|
+
[e.METER_FILL]: null,
|
|
30
|
+
[e.YOUR_SCORE]: null,
|
|
31
|
+
[e.HIGH_SCORE]: null,
|
|
32
|
+
[e.KEEP_IT_UP]: null,
|
|
33
|
+
[e.DOING_GREAT]: null,
|
|
34
|
+
[e.ALL_DONE]: null
|
|
35
|
+
}, o = {}, v = () => {
|
|
36
|
+
const { canAutoPlayAudio: C } = N(), d = O(/* @__PURE__ */ new Set()), m = O({}), _ = s(async (n) => {
|
|
37
|
+
if (!E[n]) {
|
|
38
|
+
const l = await (await fetch(b[n])).arrayBuffer(), r = await u.decodeAudioData(l);
|
|
39
|
+
E[n] = r;
|
|
41
40
|
}
|
|
42
|
-
}, []),
|
|
43
|
-
(
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
const I = p(u);
|
|
60
|
-
o.current[t] = I;
|
|
61
|
-
}
|
|
62
|
-
return u;
|
|
63
|
-
},
|
|
64
|
-
[C, _]
|
|
65
|
-
), a = s((t, l) => {
|
|
66
|
-
const e = c[t];
|
|
67
|
-
if (!e) return;
|
|
68
|
-
if (o.current[t] && clearInterval(o.current[t]), l) {
|
|
69
|
-
e.pause();
|
|
70
|
-
return;
|
|
71
|
-
}
|
|
72
|
-
const u = D(e);
|
|
73
|
-
o.current[t] = u;
|
|
74
|
-
}, []), d = s(
|
|
75
|
-
(t, l = !0) => {
|
|
76
|
-
var e;
|
|
77
|
-
if (f[t] !== void 0) {
|
|
78
|
-
(e = f[t]) == null || e.then(() => {
|
|
79
|
-
a(t, l);
|
|
80
|
-
}).catch((u) => {
|
|
81
|
-
console.log("sound not playing", u);
|
|
82
|
-
});
|
|
41
|
+
}, []), R = (n) => {
|
|
42
|
+
n.gain.setValueAtTime(0, u.currentTime), n.gain.linearRampToValueAtTime(1, u.currentTime + 0.5);
|
|
43
|
+
}, p = (n, t) => {
|
|
44
|
+
n.gain.setValueAtTime(n.gain.value, u.currentTime), n.gain.linearRampToValueAtTime(0, u.currentTime + 0.5);
|
|
45
|
+
const l = setTimeout(() => {
|
|
46
|
+
var r;
|
|
47
|
+
(r = o[t]) == null || r.source.stop(), delete o[t];
|
|
48
|
+
}, 500);
|
|
49
|
+
m.current[t] = l;
|
|
50
|
+
}, i = s(
|
|
51
|
+
async (n, t = !0, l = !1) => {
|
|
52
|
+
await _(n);
|
|
53
|
+
const r = E[n];
|
|
54
|
+
if (!r || !C) return;
|
|
55
|
+
if (o[n]) {
|
|
56
|
+
const { gainNode: S } = o[n];
|
|
57
|
+
t ? S.gain.setValueAtTime(1, u.currentTime) : R(S);
|
|
83
58
|
return;
|
|
84
59
|
}
|
|
85
|
-
|
|
60
|
+
const c = u.createBufferSource(), a = u.createGain();
|
|
61
|
+
c.buffer = r, c.loop = l, c.connect(a).connect(u.destination), t ? a.gain.setValueAtTime(1, u.currentTime) : R(a), c.start(), o[n] = { source: c, gainNode: a };
|
|
86
62
|
},
|
|
87
|
-
[
|
|
88
|
-
), T = s(() => {
|
|
89
|
-
const
|
|
90
|
-
|
|
91
|
-
}, [
|
|
92
|
-
const
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
63
|
+
[C, _]
|
|
64
|
+
), T = s(async (n, t = !0) => {
|
|
65
|
+
const l = o[n];
|
|
66
|
+
l && (t ? (l.source.stop(), delete o[n]) : p(l.gainNode, n));
|
|
67
|
+
}, []), P = s(() => {
|
|
68
|
+
const n = I[A] || e.SWIPE_01;
|
|
69
|
+
A = (A + 1) % I.length, i(n);
|
|
70
|
+
}, [i]), U = s(() => {
|
|
71
|
+
i(e.TOGGLE);
|
|
72
|
+
}, [i]), f = s(() => {
|
|
73
|
+
const n = document.visibilityState;
|
|
74
|
+
n === "hidden" && Object.keys(o).forEach((t) => {
|
|
75
|
+
T(t, !0), d.current.add(t);
|
|
76
|
+
}), n === "visible" && (d.current.forEach((t) => {
|
|
77
|
+
i(t);
|
|
78
|
+
}), d.current.clear());
|
|
79
|
+
}, [i, T]);
|
|
80
|
+
return D(() => {
|
|
81
|
+
document.addEventListener("visibilitychange", f);
|
|
82
|
+
const n = m.current;
|
|
102
83
|
return () => {
|
|
103
|
-
document.removeEventListener("visibilitychange",
|
|
104
|
-
l && clearInterval(l);
|
|
105
|
-
});
|
|
84
|
+
document.removeEventListener("visibilitychange", f), Object.values(n).forEach((t) => clearTimeout(t));
|
|
106
85
|
};
|
|
107
|
-
}, [
|
|
86
|
+
}, [f]), { playSwipeSound: P, play: i, stop: T, playButtonSound: U };
|
|
108
87
|
};
|
|
109
88
|
export {
|
|
110
|
-
|
|
111
|
-
b as useCircleSounds
|
|
89
|
+
v as useCircleSounds
|
|
112
90
|
};
|
|
113
91
|
//# 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 type { TimeoutMap } from './use-circle-sound-types';\n\nimport { useCallback, useEffect, useRef } from 'react';\n\nimport { useAutoPlayPermission } from '../../../hooks/use-auto-play-permission/use-auto-play-permission';\nimport { CircleSoundKeyMapper, SWIPE_SOUND_ORDER } from './constants';\nimport { fadeInSound, fadeOutSound } from './helper';\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 [CircleSoundKey.YOUR_SCORE]: null,\n [CircleSoundKey.HIGH_SCORE]: null,\n [CircleSoundKey.KEEP_IT_UP]: null,\n [CircleSoundKey.DOING_GREAT]: null,\n [CircleSoundKey.ALL_DONE]: null,\n};\n\nconst soundInstancePromise: Partial<Record<keyof typeof CircleSoundKeyMapper, Promise<void>>> = {};\n\nexport const useCircleSounds = () => {\n const { canAutoPlayAudio: canPlayAudio } = useAutoPlayPermission();\n\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 play = useCallback(\n (key: CircleSoundKey, immediately: boolean = true, loop = false) => {\n loadSound(key);\n const soundInstance = soundMapper[key];\n\n if (!soundInstance || !canPlayAudio) return;\n\n // this makes sure that it keeps the default loop value at the time it was requested to be loaded\n // helps in visibility change where we only want to resume\n if (loop) {\n soundInstance.loop = loop;\n }\n\n if (timeoutRefs.current[key]) {\n clearInterval(timeoutRefs.current[key]);\n }\n\n // resume sound\n if (!soundInstance.paused && soundInstance.currentTime > 0 && !soundInstance.ended) {\n if (!immediately) {\n const intervalId = fadeInSound(soundInstance);\n\n timeoutRefs.current[key] = intervalId;\n } else {\n soundInstance.volume = 1;\n }\n\n return soundInstance;\n }\n\n // play sound\n soundInstance.volume = immediately ? 1 : 0;\n const promise = soundInstance.play();\n\n if (promise) {\n soundInstancePromise[key] = promise;\n }\n\n if (!immediately) {\n const intervalId = fadeInSound(soundInstance);\n\n timeoutRefs.current[key] = intervalId;\n }\n\n return soundInstance;\n },\n [loadSound, canPlayAudio],\n );\n\n const handleSoundStop = useCallback((key: CircleSoundKey, immediately: boolean) => {\n const soundInstance = soundMapper[key];\n\n if (!soundInstance) return;\n\n if (timeoutRefs.current[key]) {\n clearInterval(timeoutRefs.current[key]);\n }\n\n if (immediately) {\n soundInstance.pause();\n\n return;\n }\n\n const intervalId = fadeOutSound(soundInstance);\n\n timeoutRefs.current[key] = intervalId;\n }, []);\n\n const stop = useCallback(\n (key: CircleSoundKey, immediately: boolean = true) => {\n // if play returned a promise\n if (soundInstancePromise[key] !== undefined) {\n soundInstancePromise[key]\n ?.then(() => {\n handleSoundStop(key, immediately);\n })\n .catch(err => {\n // eslint-disable-next-line no-console\n console.log('sound not playing', err);\n });\n\n return;\n }\n\n handleSoundStop(key, immediately);\n },\n [handleSoundStop],\n );\n\n const playSwipeSound = useCallback(() => {\n const key = SWIPE_SOUND_ORDER[swipeSoundIndex] || CircleSoundKey.SWIPE_01;\n\n swipeSoundIndex = (swipeSoundIndex + 1) % SWIPE_SOUND_ORDER.length;\n\n play(key);\n }, [play]);\n\n const playButtonSound = useCallback(() => {\n const sound = play(CircleSoundKey.TOGGLE);\n\n return sound;\n }, [play]);\n\n const handleVisibilityChange = useCallback(() => {\n const visibilityState = document.visibilityState;\n\n if (visibilityState === 'hidden') {\n Object.entries(soundMapper).forEach(([key, sound]) => {\n if (sound && !sound.paused) {\n stop(key as CircleSoundKey, true);\n pausedSoundsRef.current.add(key as CircleSoundKey);\n }\n });\n }\n\n if (visibilityState === 'visible') {\n pausedSoundsRef.current.forEach(key => {\n play(key);\n });\n pausedSoundsRef.current.clear();\n }\n }, [play, stop]);\n\n useEffect(() => {\n document.addEventListener('visibilitychange', handleVisibilityChange);\n const timeouts = timeoutRefs.current;\n\n return () => {\n document.removeEventListener('visibilitychange', handleVisibilityChange);\n Object.values(timeouts).forEach(id => {\n id && clearInterval(id);\n });\n };\n }, [handleVisibilityChange]);\n\n return { playSwipeSound, play, stop, playButtonSound };\n};\n"],"names":["swipeSoundIndex","soundMapper","CircleSoundKey","soundInstancePromise","useCircleSounds","canPlayAudio","useAutoPlayPermission","loadSound","useCallback","key","loadedSound","CircleSoundKeyMapper","pausedSoundsRef","useRef","timeoutRefs","play","immediately","loop","soundInstance","intervalId","fadeInSound","promise","handleSoundStop","fadeOutSound","stop","_a","err","playSwipeSound","SWIPE_SOUND_ORDER","playButtonSound","handleVisibilityChange","visibilityState","sound","useEffect","timeouts","id"],"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 type { TimeoutMap } from './use-circle-sound-types';\n\nimport { useCallback, useEffect, useRef } from 'react';\n\nimport { useAutoPlayPermission } from '../../../hooks/use-auto-play-permission/use-auto-play-permission';\nimport { CircleSoundKeyMapper, SWIPE_SOUND_ORDER } from './constants';\nimport { CircleSoundKey } from './use-circle-sounds-enums';\n\nlet swipeSoundIndex = 0;\n\nconst audioContext = new (window.AudioContext || window.webkitAudioContext)();\n\nconst bufferMapper: Record<CircleSoundKey, AudioBuffer | null> = {\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 [CircleSoundKey.YOUR_SCORE]: null,\n [CircleSoundKey.HIGH_SCORE]: null,\n [CircleSoundKey.KEEP_IT_UP]: null,\n [CircleSoundKey.DOING_GREAT]: null,\n [CircleSoundKey.ALL_DONE]: null,\n};\n\ntype ActiveSound = {\n source: AudioBufferSourceNode;\n gainNode: GainNode;\n};\n\nconst activeSounds: Partial<Record<CircleSoundKey, ActiveSound>> = {};\n\nexport const useCircleSounds = () => {\n const { canAutoPlayAudio: canPlayAudio } = useAutoPlayPermission();\n\n const pausedSoundsRef = useRef<Set<CircleSoundKey>>(new Set());\n const timeoutRefs = useRef<TimeoutMap>({});\n\n const loadSound = useCallback(async (key: CircleSoundKey) => {\n if (!bufferMapper[key]) {\n const response = await fetch(CircleSoundKeyMapper[key]);\n const arrayBuffer = await response.arrayBuffer();\n const decoded = await audioContext.decodeAudioData(arrayBuffer);\n\n bufferMapper[key] = decoded;\n }\n }, []);\n\n const fadeIn = (gainNode: GainNode) => {\n gainNode.gain.setValueAtTime(0, audioContext.currentTime);\n gainNode.gain.linearRampToValueAtTime(1, audioContext.currentTime + 0.5);\n };\n\n const fadeOut = (gainNode: GainNode, key: CircleSoundKey) => {\n gainNode.gain.setValueAtTime(gainNode.gain.value, audioContext.currentTime);\n gainNode.gain.linearRampToValueAtTime(0, audioContext.currentTime + 0.5);\n const timeout = setTimeout(() => {\n activeSounds[key]?.source.stop();\n delete activeSounds[key];\n }, 500);\n\n timeoutRefs.current[key] = timeout as unknown as number;\n };\n\n const play = useCallback(\n async (key: CircleSoundKey, immediately = true, loop = false) => {\n await loadSound(key);\n const buffer = bufferMapper[key];\n\n if (!buffer || !canPlayAudio) return;\n\n if (activeSounds[key]) {\n const { gainNode } = activeSounds[key]!;\n\n if (!immediately) fadeIn(gainNode);\n else gainNode.gain.setValueAtTime(1, audioContext.currentTime);\n\n return;\n }\n\n const source = audioContext.createBufferSource();\n const gainNode = audioContext.createGain();\n\n source.buffer = buffer;\n source.loop = loop;\n source.connect(gainNode).connect(audioContext.destination);\n if (immediately) gainNode.gain.setValueAtTime(1, audioContext.currentTime);\n else fadeIn(gainNode);\n source.start();\n activeSounds[key] = { source, gainNode };\n },\n [canPlayAudio, loadSound],\n );\n\n const stop = useCallback(async (key: CircleSoundKey, immediately = true) => {\n const sound = activeSounds[key];\n\n if (!sound) return;\n\n if (immediately) {\n sound.source.stop();\n delete activeSounds[key];\n } else {\n fadeOut(sound.gainNode, key);\n }\n }, []);\n\n const playSwipeSound = useCallback(() => {\n const key = SWIPE_SOUND_ORDER[swipeSoundIndex] || CircleSoundKey.SWIPE_01;\n\n swipeSoundIndex = (swipeSoundIndex + 1) % SWIPE_SOUND_ORDER.length;\n play(key);\n }, [play]);\n\n const playButtonSound = useCallback(() => {\n play(CircleSoundKey.TOGGLE);\n }, [play]);\n\n const handleVisibilityChange = useCallback(() => {\n const visibilityState = document.visibilityState;\n\n if (visibilityState === 'hidden') {\n Object.keys(activeSounds).forEach(key => {\n stop(key as CircleSoundKey, true);\n pausedSoundsRef.current.add(key as CircleSoundKey);\n });\n }\n\n if (visibilityState === 'visible') {\n pausedSoundsRef.current.forEach(key => {\n play(key);\n });\n pausedSoundsRef.current.clear();\n }\n }, [play, stop]);\n\n useEffect(() => {\n document.addEventListener('visibilitychange', handleVisibilityChange);\n\n const timeouts = timeoutRefs.current;\n\n return () => {\n document.removeEventListener('visibilitychange', handleVisibilityChange);\n Object.values(timeouts).forEach(id => clearTimeout(id));\n };\n }, [handleVisibilityChange]);\n\n return { playSwipeSound, play, stop, playButtonSound };\n};\n"],"names":["swipeSoundIndex","audioContext","bufferMapper","CircleSoundKey","activeSounds","useCircleSounds","canPlayAudio","useAutoPlayPermission","pausedSoundsRef","useRef","timeoutRefs","loadSound","useCallback","key","arrayBuffer","CircleSoundKeyMapper","decoded","fadeIn","gainNode","fadeOut","timeout","_a","play","immediately","loop","buffer","source","stop","sound","playSwipeSound","SWIPE_SOUND_ORDER","playButtonSound","handleVisibilityChange","visibilityState","useEffect","timeouts","id"],"mappings":"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"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { jsxs as
|
|
2
|
-
import { memo as
|
|
3
|
-
import r, { css as
|
|
1
|
+
import { jsxs as u, jsx as o } from "react/jsx-runtime";
|
|
2
|
+
import w, { memo as S, useCallback as f } from "react";
|
|
3
|
+
import r, { css as c } from "styled-components";
|
|
4
4
|
import d from "../../ui/layout/flex-view.js";
|
|
5
|
-
import
|
|
5
|
+
import R from "../../ui/lottie-animation/lottie-animation.js";
|
|
6
6
|
import D from "../../ui/separator/separator.js";
|
|
7
|
-
import
|
|
8
|
-
import { SCREEN_SIZES as
|
|
9
|
-
const
|
|
7
|
+
import C from "../../ui/text/text.js";
|
|
8
|
+
import { SCREEN_SIZES as g, getRewardElement as W, elementColors as y } from "../constants.js";
|
|
9
|
+
const H = {
|
|
10
10
|
TETRA: 0.5,
|
|
11
11
|
COSA: 0.3,
|
|
12
12
|
DODA: 0.3,
|
|
@@ -23,7 +23,7 @@ const P = {
|
|
|
23
23
|
WOW: 0.6,
|
|
24
24
|
CHEER: 0.6,
|
|
25
25
|
"ROCK-ON": 0.6
|
|
26
|
-
},
|
|
26
|
+
}, K = {
|
|
27
27
|
ASHTA: "Ashta",
|
|
28
28
|
CHATVA: "Chatva",
|
|
29
29
|
COSA: "Cosa",
|
|
@@ -40,51 +40,51 @@ const P = {
|
|
|
40
40
|
GREAT: "Great",
|
|
41
41
|
WOW: "Wow",
|
|
42
42
|
AWESOME: "Awesome"
|
|
43
|
-
},
|
|
43
|
+
}, V = (t, e) => {
|
|
44
44
|
let i = null, a = "-4px", n = null;
|
|
45
45
|
return t ? n = "-4px" : (i = `${e ? "-2px" : "2px"}`, a = `${e ? "-4px" : "2px"}`), `
|
|
46
46
|
bottom: ${i};
|
|
47
47
|
top: ${n};
|
|
48
48
|
right: ${a};
|
|
49
49
|
`;
|
|
50
|
-
},
|
|
50
|
+
}, P = r(d)`
|
|
51
51
|
align-items: center;
|
|
52
52
|
gap: 4px;
|
|
53
|
-
`,
|
|
53
|
+
`, G = r(d)`
|
|
54
54
|
position: absolute;
|
|
55
55
|
top: -3px;
|
|
56
56
|
align-items: center;
|
|
57
57
|
justify-content: center;
|
|
58
58
|
width: 62px;
|
|
59
59
|
height: 62px;
|
|
60
|
-
`,
|
|
60
|
+
`, j = r.div`
|
|
61
61
|
position: relative;
|
|
62
62
|
width: 62px;
|
|
63
63
|
height: 62px;
|
|
64
64
|
`, I = r.div`
|
|
65
65
|
position: relative;
|
|
66
|
-
`,
|
|
66
|
+
`, M = r.img`
|
|
67
67
|
width: 56px;
|
|
68
68
|
height: 56px;
|
|
69
|
-
${({ $disabled: t, $disabledVal: e }) => t &&
|
|
69
|
+
${({ $disabled: t, $disabledVal: e }) => t && c`
|
|
70
70
|
filter: saturate(0);
|
|
71
71
|
opacity: ${e};
|
|
72
72
|
`}
|
|
73
|
-
`,
|
|
73
|
+
`, _ = r.div`
|
|
74
74
|
border: 1px solid ${({ theme: t }) => t.colors.GREY_2};
|
|
75
75
|
border-radius: 8px;
|
|
76
|
-
`,
|
|
76
|
+
`, Z = r(d)`
|
|
77
77
|
width: 62px;
|
|
78
78
|
height: 62px;
|
|
79
79
|
align-items: center;
|
|
80
80
|
justify-content: center;
|
|
81
|
-
${({ $disabled: t, $disabledVal: e }) => t &&
|
|
81
|
+
${({ $disabled: t, $disabledVal: e }) => t && c`
|
|
82
82
|
filter: saturate(0);
|
|
83
83
|
opacity: ${e};
|
|
84
84
|
`}
|
|
85
|
-
`,
|
|
85
|
+
`, v = r(d)`
|
|
86
86
|
position: absolute;
|
|
87
|
-
${({ $isSticker: t, $isCoddingType: e }) =>
|
|
87
|
+
${({ $isSticker: t, $isCoddingType: e }) => V(t, e)};
|
|
88
88
|
background-color: ${({ theme: t }) => t.colors.GREY_2};
|
|
89
89
|
border-radius: ${({ $borderRadius: t }) => t};
|
|
90
90
|
border: ${({ $borderColor: t }) => `1px solid ${t}`};
|
|
@@ -92,80 +92,80 @@ const P = {
|
|
|
92
92
|
height: 16px;
|
|
93
93
|
align-items: center;
|
|
94
94
|
justify-content: center;
|
|
95
|
-
${({ $currentScreenWidth: t, $width: e }) => t <
|
|
95
|
+
${({ $currentScreenWidth: t, $width: e }) => t < g.LAPTOP && c`
|
|
96
96
|
width: ${e + 6}px;
|
|
97
97
|
height: 22px;
|
|
98
98
|
`}
|
|
99
|
-
`, B = r(
|
|
99
|
+
`, B = r(C)`
|
|
100
100
|
font-size: 9px;
|
|
101
101
|
line-height: 14px;
|
|
102
|
-
${({ $currentScreenWidth: t }) => t <
|
|
102
|
+
${({ $currentScreenWidth: t }) => t < g.LAPTOP && c`
|
|
103
103
|
font-size: 12px;
|
|
104
104
|
line-height: 14px;
|
|
105
105
|
`}
|
|
106
|
-
`, N = r(
|
|
106
|
+
`, N = r(C)`
|
|
107
107
|
color: ${({ theme: t }) => t.colors.BLACK};
|
|
108
108
|
opacity: ${({ $disabled: t }) => t ? 1 : 0.5};
|
|
109
|
-
`,
|
|
109
|
+
`, k = ({
|
|
110
110
|
isAchieved: t = !1,
|
|
111
111
|
count: e = 0,
|
|
112
112
|
elementType: i,
|
|
113
113
|
isCoddingType: a = !1,
|
|
114
114
|
isSticker: n = !1,
|
|
115
|
-
lotties:
|
|
116
|
-
currentScreenWidth:
|
|
115
|
+
lotties: A = {},
|
|
116
|
+
currentScreenWidth: $
|
|
117
117
|
}) => {
|
|
118
|
-
const
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
118
|
+
const h = e >= 100, O = K[i], x = H[i] || 1, { height: E, width: b, lottieSrc: s } = A[i] || {}, p = w.useRef(null), L = f(() => {
|
|
119
|
+
var l, m;
|
|
120
|
+
t && s && ((l = p.current) == null || l.play(), (m = p.current) == null || m.setLoop(!0));
|
|
121
|
+
}, [t, s]), T = f(() => {
|
|
122
|
+
var l;
|
|
123
|
+
s && ((l = p.current) == null || l.setLoop(!1));
|
|
122
124
|
}, [s]);
|
|
123
|
-
return /* @__PURE__ */
|
|
124
|
-
/* @__PURE__ */ o(
|
|
125
|
+
return /* @__PURE__ */ u(P, { children: [
|
|
126
|
+
/* @__PURE__ */ o(j, { children: /* @__PURE__ */ o(G, { $flexDirection: "row", children: /* @__PURE__ */ u(I, { children: [
|
|
125
127
|
!n && /* @__PURE__ */ o(
|
|
126
|
-
|
|
128
|
+
M,
|
|
127
129
|
{
|
|
128
130
|
$disabled: !t,
|
|
129
|
-
$disabledVal:
|
|
131
|
+
$disabledVal: x,
|
|
130
132
|
src: W(i),
|
|
131
133
|
alt: "reward"
|
|
132
134
|
}
|
|
133
135
|
),
|
|
134
|
-
n && s && /* @__PURE__ */ o(
|
|
135
|
-
|
|
136
|
+
n && s && /* @__PURE__ */ o(_, { $disabled: !t, children: /* @__PURE__ */ o(
|
|
137
|
+
Z,
|
|
136
138
|
{
|
|
137
139
|
$disabled: !t,
|
|
138
|
-
$disabledVal:
|
|
139
|
-
onMouseEnter:
|
|
140
|
-
onMouseLeave:
|
|
140
|
+
$disabledVal: x,
|
|
141
|
+
onMouseEnter: L,
|
|
142
|
+
onMouseLeave: T,
|
|
141
143
|
children: /* @__PURE__ */ o(
|
|
142
|
-
|
|
144
|
+
R,
|
|
143
145
|
{
|
|
144
146
|
src: s,
|
|
145
|
-
width:
|
|
146
|
-
height:
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
autoplay: !g && t
|
|
150
|
-
}
|
|
147
|
+
width: b,
|
|
148
|
+
height: E,
|
|
149
|
+
ref: p,
|
|
150
|
+
settings: { autoplay: !1, loop: !1 }
|
|
151
151
|
}
|
|
152
152
|
)
|
|
153
153
|
}
|
|
154
154
|
) }),
|
|
155
155
|
t && /* @__PURE__ */ o(
|
|
156
|
-
|
|
156
|
+
v,
|
|
157
157
|
{
|
|
158
158
|
$isSticker: n,
|
|
159
|
-
$borderColor:
|
|
160
|
-
$width:
|
|
161
|
-
$borderRadius:
|
|
159
|
+
$borderColor: y[i] || "#000",
|
|
160
|
+
$width: h ? 28 : 16,
|
|
161
|
+
$borderRadius: h ? "26px" : "50%",
|
|
162
162
|
$isCoddingType: a,
|
|
163
|
-
$currentScreenWidth:
|
|
163
|
+
$currentScreenWidth: $,
|
|
164
164
|
$flexDirection: "row",
|
|
165
165
|
children: /* @__PURE__ */ o(
|
|
166
166
|
B,
|
|
167
167
|
{
|
|
168
|
-
$currentScreenWidth:
|
|
168
|
+
$currentScreenWidth: $,
|
|
169
169
|
$renderAs: "body3",
|
|
170
170
|
$color: "BLACK",
|
|
171
171
|
children: e
|
|
@@ -177,8 +177,8 @@ const P = {
|
|
|
177
177
|
/* @__PURE__ */ o(D, { height: 4 }),
|
|
178
178
|
/* @__PURE__ */ o(N, { $renderAs: "body3", $disabled: t, children: O })
|
|
179
179
|
] });
|
|
180
|
-
},
|
|
180
|
+
}, tt = S(k);
|
|
181
181
|
export {
|
|
182
|
-
|
|
182
|
+
tt as default
|
|
183
183
|
};
|
|
184
184
|
//# sourceMappingURL=elements.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"elements.js","sources":["../../../../src/features/wins-dashboard/belts-elements-stickers/elements.tsx"],"sourcesContent":["import React, { memo, useCallback, useState } from 'react';\nimport styled, { css } from 'styled-components';\n\nimport FlexView from '../../ui/layout/flex-view';\nimport LottieAnimation from '../../ui/lottie-animation/lottie-animation';\nimport Separator from '../../ui/separator/separator';\nimport Text from '../../ui/text/text';\nimport { elementColors, getRewardElement, SCREEN_SIZES } from '../constants';\n\nconst disablePercentages: Record<string, number> = {\n 'TETRA': 0.5,\n 'COSA': 0.3,\n 'DODA': 0.3,\n 'HEXO': 0.5,\n 'OCTO': 0.5,\n 'EKA': 0.5,\n 'DVI': 0.3,\n 'CHATVA': 0.3,\n 'ASHTA': 0.5,\n 'ZODASA': 0.4,\n 'CLAP': 0.6,\n 'COOL': 0.6,\n 'LIKE': 0.6,\n 'WOW': 0.6,\n 'CHEER': 0.6,\n 'ROCK-ON': 0.6,\n};\n\nconst elementTitles: Record<string, string> = {\n ASHTA: 'Ashta',\n CHATVA: 'Chatva',\n COSA: 'Cosa',\n DODA: 'Doca',\n DVI: 'Dvi',\n EKA: 'Eka',\n HEXO: 'Hexo',\n OCTO: 'Octo',\n TETRA: `T'tro`,\n ZODASA: 'Zodasa',\n CONGRATS: 'Congrats',\n COOL: 'Cool',\n KUDOS: 'Kudos',\n GREAT: 'Great',\n WOW: 'Wow',\n AWESOME: 'Awesome',\n};\n\nconst getPositionStyles = (isSticker: boolean, isCoddingType: boolean): string => {\n let bottom: string | null = null;\n let right = '-4px';\n let top: string | null = null;\n\n if (!isSticker) {\n bottom = `${isCoddingType ? '-2px' : '2px'}`;\n right = `${isCoddingType ? '-4px' : '2px'}`;\n } else {\n top = '-4px';\n }\n\n return `\n bottom: ${bottom};\n top: ${top};\n right: ${right};\n `;\n};\n\nconst ElementContainer = styled(FlexView)`\n align-items: center;\n gap: 4px;\n`;\n\nconst Wrapper = styled(FlexView)`\n position: absolute;\n top: -3px;\n align-items: center;\n justify-content: center;\n width: 62px;\n height: 62px;\n`;\n\nconst BgWrapper = styled.div`\n position: relative;\n width: 62px;\n height: 62px;\n`;\n\nconst GemContainer = styled.div`\n position: relative;\n`;\n\ninterface ImageWrapperProps {\n $disabled: boolean;\n $disabledVal: number;\n}\n\nconst ImageWrapper = styled.img<ImageWrapperProps>`\n width: 56px;\n height: 56px;\n ${({ $disabled, $disabledVal }) =>\n $disabled &&\n css`\n filter: saturate(0);\n opacity: ${$disabledVal};\n `}\n`;\n\ninterface LottieContainerProps {\n $disabled: boolean;\n}\n\nconst LottieContainer = styled.div<LottieContainerProps>`\n border: 1px solid ${({ theme }) => theme.colors.GREY_2};\n border-radius: 8px;\n`;\n\ninterface LottieWrapperProps {\n $disabled: boolean;\n $disabledVal: number;\n}\n\nconst LottieWrapper = styled(FlexView)<LottieWrapperProps>`\n width: 62px;\n height: 62px;\n align-items: center;\n justify-content: center;\n ${({ $disabled, $disabledVal }) =>\n $disabled &&\n css`\n filter: saturate(0);\n opacity: ${$disabledVal};\n `}\n`;\n\ninterface CountWrapperProps {\n $isSticker: boolean;\n $isCoddingType: boolean;\n $borderColor: string;\n $width: number;\n $borderRadius: string;\n $currentScreenWidth: number;\n}\n\nconst CountWrapper = styled(FlexView)<CountWrapperProps>`\n position: absolute;\n ${({ $isSticker, $isCoddingType }) => getPositionStyles($isSticker, $isCoddingType)};\n background-color: ${({ theme }) => theme.colors.GREY_2};\n border-radius: ${({ $borderRadius }) => $borderRadius};\n border: ${({ $borderColor }) => `1px solid ${$borderColor}`};\n width: ${({ $width }) => $width}px;\n height: 16px;\n align-items: center;\n justify-content: center;\n ${({ $currentScreenWidth, $width }) =>\n $currentScreenWidth < SCREEN_SIZES.LAPTOP &&\n css`\n width: ${$width + 6}px;\n height: 22px;\n `}\n`;\n\ninterface CountTextProps {\n $currentScreenWidth: number;\n}\n\nconst CountText = styled(Text)<CountTextProps>`\n font-size: 9px;\n line-height: 14px;\n ${({ $currentScreenWidth }) =>\n $currentScreenWidth < SCREEN_SIZES.LAPTOP &&\n css`\n font-size: 12px;\n line-height: 14px;\n `}\n`;\n\ninterface ElementTextProps {\n $disabled: boolean;\n}\n\nconst ElementText = styled(Text)<ElementTextProps>`\n color: ${({ theme }) => theme.colors.BLACK};\n opacity: ${({ $disabled }) => ($disabled ? 1 : 0.5)};\n`;\n\ninterface LottieData {\n height: number;\n width: number;\n lottieSrc: string;\n}\n\ninterface ElementProps {\n isAchieved?: boolean;\n count?: number;\n elementType: string;\n isCoddingType?: boolean;\n isSticker?: boolean;\n lotties?: Record<string, LottieData>;\n currentScreenWidth: number;\n}\n\nconst Element: React.FC<ElementProps> = ({\n isAchieved = false,\n count = 0,\n elementType,\n isCoddingType = false,\n isSticker = false,\n lotties = {},\n currentScreenWidth,\n}) => {\n const [isPaused, setIsPaused] = useState(true);\n const isLargeCount = count >= 100;\n const elementTitle = elementTitles[elementType];\n const disabledVal = disablePercentages[elementType] || 1;\n const { height, width, lottieSrc } = lotties[elementType] || {};\n\n const handleMouseEnter = useCallback(() => {\n if (lottieSrc) {\n setIsPaused(false);\n }\n }, [lottieSrc]);\n\n const handleMouseLeave = useCallback(() => {\n if (lottieSrc) {\n setIsPaused(true);\n }\n }, [lottieSrc]);\n\n return (\n <ElementContainer>\n <BgWrapper>\n <Wrapper $flexDirection=\"row\">\n <GemContainer>\n {!isSticker && (\n <ImageWrapper\n $disabled={!isAchieved}\n $disabledVal={disabledVal}\n src={getRewardElement(elementType)}\n alt=\"reward\"\n />\n )}\n {isSticker && lottieSrc && (\n <LottieContainer $disabled={!isAchieved}>\n <LottieWrapper\n $disabled={!isAchieved}\n $disabledVal={disabledVal}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n >\n <LottieAnimation\n src={lottieSrc}\n width={width}\n height={height}\n settings={{\n loop: true,\n autoplay: !isPaused && isAchieved,\n }}\n />\n </LottieWrapper>\n </LottieContainer>\n )}\n\n {isAchieved && (\n <CountWrapper\n $isSticker={isSticker}\n $borderColor={elementColors[elementType as keyof typeof elementColors] || '#000'}\n $width={isLargeCount ? 28 : 16}\n $borderRadius={isLargeCount ? '26px' : '50%'}\n $isCoddingType={isCoddingType}\n $currentScreenWidth={currentScreenWidth}\n $flexDirection=\"row\"\n >\n <CountText\n $currentScreenWidth={currentScreenWidth}\n $renderAs=\"body3\"\n $color=\"BLACK\"\n >\n {count}\n </CountText>\n </CountWrapper>\n )}\n </GemContainer>\n </Wrapper>\n </BgWrapper>\n <Separator height={4} />\n <ElementText $renderAs=\"body3\" $disabled={isAchieved}>\n {elementTitle}\n </ElementText>\n </ElementContainer>\n );\n};\n\nexport default memo(Element);\n"],"names":["disablePercentages","elementTitles","getPositionStyles","isSticker","isCoddingType","bottom","right","top","ElementContainer","styled","FlexView","Wrapper","BgWrapper","GemContainer","ImageWrapper","$disabled","$disabledVal","css","LottieContainer","theme","LottieWrapper","CountWrapper","$isSticker","$isCoddingType","$borderRadius","$borderColor","$width","$currentScreenWidth","SCREEN_SIZES","CountText","Text","ElementText","Element","isAchieved","count","elementType","lotties","currentScreenWidth","isPaused","setIsPaused","useState","isLargeCount","elementTitle","disabledVal","height","width","lottieSrc","handleMouseEnter","useCallback","handleMouseLeave","jsx","getRewardElement","LottieAnimation","elementColors","Separator","Element$1","memo"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"elements.js","sources":["../../../../src/features/wins-dashboard/belts-elements-stickers/elements.tsx"],"sourcesContent":["import type { ILottieAnimationRef } from '../../ui/lottie-animation/types';\n\nimport React, { memo, useCallback } from 'react';\nimport styled, { css } from 'styled-components';\n\nimport FlexView from '../../ui/layout/flex-view';\nimport LottieAnimation from '../../ui/lottie-animation/lottie-animation';\nimport Separator from '../../ui/separator/separator';\nimport Text from '../../ui/text/text';\nimport { elementColors, getRewardElement, SCREEN_SIZES } from '../constants';\n\nconst disablePercentages: Record<string, number> = {\n 'TETRA': 0.5,\n 'COSA': 0.3,\n 'DODA': 0.3,\n 'HEXO': 0.5,\n 'OCTO': 0.5,\n 'EKA': 0.5,\n 'DVI': 0.3,\n 'CHATVA': 0.3,\n 'ASHTA': 0.5,\n 'ZODASA': 0.4,\n 'CLAP': 0.6,\n 'COOL': 0.6,\n 'LIKE': 0.6,\n 'WOW': 0.6,\n 'CHEER': 0.6,\n 'ROCK-ON': 0.6,\n};\n\nconst elementTitles: Record<string, string> = {\n ASHTA: 'Ashta',\n CHATVA: 'Chatva',\n COSA: 'Cosa',\n DODA: 'Doca',\n DVI: 'Dvi',\n EKA: 'Eka',\n HEXO: 'Hexo',\n OCTO: 'Octo',\n TETRA: `T'tro`,\n ZODASA: 'Zodasa',\n CONGRATS: 'Congrats',\n COOL: 'Cool',\n KUDOS: 'Kudos',\n GREAT: 'Great',\n WOW: 'Wow',\n AWESOME: 'Awesome',\n};\n\nconst getPositionStyles = (isSticker: boolean, isCoddingType: boolean): string => {\n let bottom: string | null = null;\n let right = '-4px';\n let top: string | null = null;\n\n if (!isSticker) {\n bottom = `${isCoddingType ? '-2px' : '2px'}`;\n right = `${isCoddingType ? '-4px' : '2px'}`;\n } else {\n top = '-4px';\n }\n\n return `\n bottom: ${bottom};\n top: ${top};\n right: ${right};\n `;\n};\n\nconst ElementContainer = styled(FlexView)`\n align-items: center;\n gap: 4px;\n`;\n\nconst Wrapper = styled(FlexView)`\n position: absolute;\n top: -3px;\n align-items: center;\n justify-content: center;\n width: 62px;\n height: 62px;\n`;\n\nconst BgWrapper = styled.div`\n position: relative;\n width: 62px;\n height: 62px;\n`;\n\nconst GemContainer = styled.div`\n position: relative;\n`;\n\ninterface ImageWrapperProps {\n $disabled: boolean;\n $disabledVal: number;\n}\n\nconst ImageWrapper = styled.img<ImageWrapperProps>`\n width: 56px;\n height: 56px;\n ${({ $disabled, $disabledVal }) =>\n $disabled &&\n css`\n filter: saturate(0);\n opacity: ${$disabledVal};\n `}\n`;\n\ninterface LottieContainerProps {\n $disabled: boolean;\n}\n\nconst LottieContainer = styled.div<LottieContainerProps>`\n border: 1px solid ${({ theme }) => theme.colors.GREY_2};\n border-radius: 8px;\n`;\n\ninterface LottieWrapperProps {\n $disabled: boolean;\n $disabledVal: number;\n}\n\nconst LottieWrapper = styled(FlexView)<LottieWrapperProps>`\n width: 62px;\n height: 62px;\n align-items: center;\n justify-content: center;\n ${({ $disabled, $disabledVal }) =>\n $disabled &&\n css`\n filter: saturate(0);\n opacity: ${$disabledVal};\n `}\n`;\n\ninterface CountWrapperProps {\n $isSticker: boolean;\n $isCoddingType: boolean;\n $borderColor: string;\n $width: number;\n $borderRadius: string;\n $currentScreenWidth: number;\n}\n\nconst CountWrapper = styled(FlexView)<CountWrapperProps>`\n position: absolute;\n ${({ $isSticker, $isCoddingType }) => getPositionStyles($isSticker, $isCoddingType)};\n background-color: ${({ theme }) => theme.colors.GREY_2};\n border-radius: ${({ $borderRadius }) => $borderRadius};\n border: ${({ $borderColor }) => `1px solid ${$borderColor}`};\n width: ${({ $width }) => $width}px;\n height: 16px;\n align-items: center;\n justify-content: center;\n ${({ $currentScreenWidth, $width }) =>\n $currentScreenWidth < SCREEN_SIZES.LAPTOP &&\n css`\n width: ${$width + 6}px;\n height: 22px;\n `}\n`;\n\ninterface CountTextProps {\n $currentScreenWidth: number;\n}\n\nconst CountText = styled(Text)<CountTextProps>`\n font-size: 9px;\n line-height: 14px;\n ${({ $currentScreenWidth }) =>\n $currentScreenWidth < SCREEN_SIZES.LAPTOP &&\n css`\n font-size: 12px;\n line-height: 14px;\n `}\n`;\n\ninterface ElementTextProps {\n $disabled: boolean;\n}\n\nconst ElementText = styled(Text)<ElementTextProps>`\n color: ${({ theme }) => theme.colors.BLACK};\n opacity: ${({ $disabled }) => ($disabled ? 1 : 0.5)};\n`;\n\ninterface LottieData {\n height: number;\n width: number;\n lottieSrc: string;\n}\n\ninterface ElementProps {\n isAchieved?: boolean;\n count?: number;\n elementType: string;\n isCoddingType?: boolean;\n isSticker?: boolean;\n lotties?: Record<string, LottieData>;\n currentScreenWidth: number;\n}\n\nconst Element: React.FC<ElementProps> = ({\n isAchieved = false,\n count = 0,\n elementType,\n isCoddingType = false,\n isSticker = false,\n lotties = {},\n currentScreenWidth,\n}) => {\n const isLargeCount = count >= 100;\n const elementTitle = elementTitles[elementType];\n const disabledVal = disablePercentages[elementType] || 1;\n const { height, width, lottieSrc } = lotties[elementType] || {};\n const lottieRef = React.useRef<ILottieAnimationRef | null>(null);\n\n const handleMouseEnter = useCallback(() => {\n if (isAchieved && lottieSrc) {\n lottieRef.current?.play();\n lottieRef.current?.setLoop(true);\n }\n }, [isAchieved, lottieSrc]);\n\n const handleMouseLeave = useCallback(() => {\n if (lottieSrc) {\n lottieRef.current?.setLoop(false);\n }\n }, [lottieSrc]);\n\n return (\n <ElementContainer>\n <BgWrapper>\n <Wrapper $flexDirection=\"row\">\n <GemContainer>\n {!isSticker && (\n <ImageWrapper\n $disabled={!isAchieved}\n $disabledVal={disabledVal}\n src={getRewardElement(elementType)}\n alt=\"reward\"\n />\n )}\n {isSticker && lottieSrc && (\n <LottieContainer $disabled={!isAchieved}>\n <LottieWrapper\n $disabled={!isAchieved}\n $disabledVal={disabledVal}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n >\n <LottieAnimation\n src={lottieSrc}\n width={width}\n height={height}\n ref={lottieRef}\n settings={{ autoplay: false, loop: false }}\n />\n </LottieWrapper>\n </LottieContainer>\n )}\n\n {isAchieved && (\n <CountWrapper\n $isSticker={isSticker}\n $borderColor={elementColors[elementType as keyof typeof elementColors] || '#000'}\n $width={isLargeCount ? 28 : 16}\n $borderRadius={isLargeCount ? '26px' : '50%'}\n $isCoddingType={isCoddingType}\n $currentScreenWidth={currentScreenWidth}\n $flexDirection=\"row\"\n >\n <CountText\n $currentScreenWidth={currentScreenWidth}\n $renderAs=\"body3\"\n $color=\"BLACK\"\n >\n {count}\n </CountText>\n </CountWrapper>\n )}\n </GemContainer>\n </Wrapper>\n </BgWrapper>\n <Separator height={4} />\n <ElementText $renderAs=\"body3\" $disabled={isAchieved}>\n {elementTitle}\n </ElementText>\n </ElementContainer>\n );\n};\n\nexport default memo(Element);\n"],"names":["disablePercentages","elementTitles","getPositionStyles","isSticker","isCoddingType","bottom","right","top","ElementContainer","styled","FlexView","Wrapper","BgWrapper","GemContainer","ImageWrapper","$disabled","$disabledVal","css","LottieContainer","theme","LottieWrapper","CountWrapper","$isSticker","$isCoddingType","$borderRadius","$borderColor","$width","$currentScreenWidth","SCREEN_SIZES","CountText","Text","ElementText","Element","isAchieved","count","elementType","lotties","currentScreenWidth","isLargeCount","elementTitle","disabledVal","height","width","lottieSrc","lottieRef","React","handleMouseEnter","useCallback","_a","_b","handleMouseLeave","jsx","getRewardElement","LottieAnimation","elementColors","Separator","Element$1","memo"],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -6765,9 +6765,9 @@ export declare const useChapterPageJourney: () => {
|
|
|
6765
6765
|
|
|
6766
6766
|
export declare const useCircleSounds: () => {
|
|
6767
6767
|
playSwipeSound: () => void;
|
|
6768
|
-
play: (key: CircleSoundKey, immediately?: boolean, loop?: boolean) =>
|
|
6769
|
-
stop: (key: CircleSoundKey, immediately?: boolean) => void
|
|
6770
|
-
playButtonSound: () =>
|
|
6768
|
+
play: (key: CircleSoundKey, immediately?: boolean, loop?: boolean) => Promise<void>;
|
|
6769
|
+
stop: (key: CircleSoundKey, immediately?: boolean) => Promise<void>;
|
|
6770
|
+
playButtonSound: () => void;
|
|
6771
6771
|
};
|
|
6772
6772
|
|
|
6773
6773
|
export declare const useClassTimeAlerts: ({ alertLevel, classStartedOn, classDuration, onUpdateClassTimeAlertConfig, }: IUseClassTimeAlerts) => {
|
package/package.json
CHANGED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { VOLUME_TO_CHANGE as r, VOLUME_FADE_DURATION as o } from "./constants.js";
|
|
2
|
-
const a = (e) => {
|
|
3
|
-
const l = setInterval(() => {
|
|
4
|
-
const t = e.volume || 0;
|
|
5
|
-
t < 1 ? e.volume = Math.min(t + r, 1) : clearInterval(l);
|
|
6
|
-
}, o);
|
|
7
|
-
return l;
|
|
8
|
-
}, m = (e) => {
|
|
9
|
-
let l = e.volume || 0;
|
|
10
|
-
const t = setInterval(() => {
|
|
11
|
-
l - r <= 0 ? (e.volume = 0, e.pause(), clearInterval(t)) : (l = l - r, e.volume = l);
|
|
12
|
-
}, o);
|
|
13
|
-
return t;
|
|
14
|
-
};
|
|
15
|
-
export {
|
|
16
|
-
a as fadeInSound,
|
|
17
|
-
m as fadeOutSound
|
|
18
|
-
};
|
|
19
|
-
//# sourceMappingURL=helper.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"helper.js","sources":["../../../../../src/features/circle-games/hooks/use-circle-sounds/helper.ts"],"sourcesContent":["import { VOLUME_FADE_DURATION, VOLUME_TO_CHANGE } from './constants';\n\nexport const fadeInSound = (soundInstance: HTMLAudioElement) => {\n const intervalId = setInterval(() => {\n const vol = soundInstance.volume || 0;\n\n if (vol < 1) {\n soundInstance.volume = Math.min(vol + VOLUME_TO_CHANGE, 1);\n } else {\n clearInterval(intervalId);\n }\n }, VOLUME_FADE_DURATION);\n\n return intervalId;\n};\n\nexport const fadeOutSound = (soundInstance: HTMLAudioElement) => {\n let vol = soundInstance.volume || 0;\n const intervalId = setInterval(() => {\n if (vol - VOLUME_TO_CHANGE <= 0) {\n soundInstance.volume = 0;\n soundInstance.pause();\n clearInterval(intervalId);\n } else {\n vol = vol - VOLUME_TO_CHANGE;\n soundInstance.volume = vol;\n }\n }, VOLUME_FADE_DURATION);\n\n return intervalId;\n};\n"],"names":["fadeInSound","soundInstance","intervalId","vol","VOLUME_TO_CHANGE","VOLUME_FADE_DURATION","fadeOutSound"],"mappings":";AAEa,MAAAA,IAAc,CAACC,MAAoC;AACxD,QAAAC,IAAa,YAAY,MAAM;AAC7B,UAAAC,IAAMF,EAAc,UAAU;AAEpC,IAAIE,IAAM,IACRF,EAAc,SAAS,KAAK,IAAIE,IAAMC,GAAkB,CAAC,IAEzD,cAAcF,CAAU;AAAA,KAEzBG,CAAoB;AAEhB,SAAAH;AACT,GAEaI,IAAe,CAACL,MAAoC;AAC3D,MAAAE,IAAMF,EAAc,UAAU;AAC5B,QAAAC,IAAa,YAAY,MAAM;AAC/B,IAAAC,IAAMC,KAAoB,KAC5BH,EAAc,SAAS,GACvBA,EAAc,MAAM,GACpB,cAAcC,CAAU,MAExBC,IAAMA,IAAMC,GACZH,EAAc,SAASE;AAAA,KAExBE,CAAoB;AAEhB,SAAAH;AACT;"}
|