@cuemath/leap 3.5.26-mb → 3.5.26
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/auth/pla-signup/pla-analytics-events.js +10 -6
- package/dist/features/auth/pla-signup/pla-analytics-events.js.map +1 -1
- package/dist/features/circle-games/hooks/use-circle-sounds/constants.js +7 -5
- package/dist/features/circle-games/hooks/use-circle-sounds/constants.js.map +1 -1
- package/dist/features/circle-games/hooks/use-circle-sounds/helper.js +19 -0
- package/dist/features/circle-games/hooks/use-circle-sounds/helper.js.map +1 -0
- package/dist/features/circle-games/hooks/use-circle-sounds/use-circle-sounds.js +72 -87
- package/dist/features/circle-games/hooks/use-circle-sounds/use-circle-sounds.js.map +1 -1
- package/dist/index.d.ts +32 -28
- package/package.json +2 -3
|
@@ -1,20 +1,22 @@
|
|
|
1
1
|
import { PLUGINS as _ } from "../../../node_modules/@cuemath/analytics-v2/dist/constants.js";
|
|
2
|
-
var t = /* @__PURE__ */ ((e) => (e.START_SIGNUP_CTA_CLICKED = "start_signup_cta_clicked", e.SIGNUP_TO_LOGIN_CTA_CLICKED = "signup_to_login_cta_clicked", e.ECNA_STEP_VIEWED = "ecna_step_viewed", e.ECNA_RESPONSE_RECORDED_DEBUG = "ecna_response_recorded_debug", e.PARENT_SIGNUP_CTA_CLICKED = "parent_signup_cta_clicked", e.PARENT_SIGNUP_SUCCESSFUL = "parent_signup_successful", e.PARENT_SIGNUP_FAILED = "parent_signup_failed", e.STUDENT_SIGNUP_SUCCESSFUL = "
|
|
3
|
-
const
|
|
2
|
+
var t = /* @__PURE__ */ ((e) => (e.START_SIGNUP_CTA_CLICKED = "start_signup_cta_clicked", e.SIGNUP_TO_LOGIN_CTA_CLICKED = "signup_to_login_cta_clicked", e.ECNA_STEP_VIEWED = "ecna_step_viewed", e.ECNA_RESPONSE_RECORDED_DEBUG = "ecna_response_recorded_debug", e.PARENT_SIGNUP_CTA_CLICKED = "parent_signup_cta_clicked", e.PARENT_SIGNUP_SUCCESSFUL = "parent_signup_successful", e.PARENT_SIGNUP_FAILED = "parent_signup_failed", e.STUDENT_SIGNUP_SUCCESSFUL = "student_signup_successful", e.STUDENT_SIGNUP_FAILED = "student_signup_failed", e.SIGNUP_OTP_ENTERED = "signup_otp_entered", e.SIGNUP_OTP_VERIFIED = "signup_otp_verified", e.SIGNUP_OTP_FAILED = "signup_otp_failed", e.SLOTS_SHOWN = "slots_shown", e.SLOT_DATE_SELECTED = "slot_date_selected", e.SLOT_TIME_SELECTED = "slot_time_selected", e.SLOT_DATE_TIME_SUBMITED = "slot_date_time_submited", e.SLOT_DATE_TIME_SUBMITION_FAILED = "slot_date_time_submition_failed", e.TUTOR_CHANGE_REASON_SELECTED = "tutor_change_reason_selected", e.SUBSCRIPTION_CANCELLATION_FAILED = "subscription_cancellation_failed", e.SUBSCRIPTION_CANCELLATION_SUCCESSFUL = "subscription_cancellation_successful", e.SUBSCRIPTION_BILLING_DETAILS_ADDED = "subscription_billing_details_added", e.SUBSCRIPTION_BILLING_DETAILS_ADDITION_FAILED = "subscription_billing_details_addition_failed", e.STRIPE_INTENT_FAILED_RETRY = "stripe_intent_failed_retry", e.SUBSCRIPTION_INTENT_FAILED = "subscription_intent_failed", e.SUBSCRIPTION_INTENT_CREATED = "subscription_intent_created", e.STRIPE_PAYMENT_ELEMENT_READY = "stripe_payment_element_ready", e.STRIPE_PAYMENT_FAILED = "stripe_payment_failed", e.STRIPE_PAYMENT_SUCCESS = "stripe_payment_success", e.PAYMENT_PLAN_SELECTED = "payment_plan_selected", e.STRIPE_PAYMENT_ELEMENT_MOUNT_FAILED = "stripe_payment_element_mount_failed", e))(t || {});
|
|
3
|
+
const s = {
|
|
4
4
|
start_signup_cta_clicked: [_.MIXPANEL],
|
|
5
5
|
ecna_step_viewed: [_.MIXPANEL],
|
|
6
6
|
ecna_response_recorded_debug: [_.MIXPANEL],
|
|
7
7
|
parent_signup_cta_clicked: [_.MIXPANEL],
|
|
8
8
|
parent_signup_successful: [_.MIXPANEL],
|
|
9
9
|
parent_signup_failed: [_.MIXPANEL],
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
student_signup_successful: [_.MIXPANEL],
|
|
11
|
+
student_signup_failed: [_.MIXPANEL],
|
|
12
12
|
signup_otp_entered: [_.MIXPANEL],
|
|
13
13
|
signup_otp_verified: [_.MIXPANEL],
|
|
14
14
|
signup_otp_failed: [_.MIXPANEL],
|
|
15
15
|
slots_shown: [_.MIXPANEL],
|
|
16
16
|
slot_date_selected: [_.MIXPANEL],
|
|
17
17
|
slot_time_selected: [_.MIXPANEL],
|
|
18
|
+
slot_date_time_submited: [_.MIXPANEL],
|
|
19
|
+
slot_date_time_submition_failed: [_.MIXPANEL],
|
|
18
20
|
tutor_change_reason_selected: [_.MIXPANEL],
|
|
19
21
|
subscription_cancellation_failed: [_.MIXPANEL],
|
|
20
22
|
subscription_cancellation_successful: [_.MIXPANEL],
|
|
@@ -25,10 +27,12 @@ const n = {
|
|
|
25
27
|
stripe_payment_success: [_.MIXPANEL],
|
|
26
28
|
payment_plan_selected: [_.MIXPANEL],
|
|
27
29
|
stripe_payment_element_mount_failed: [_.MIXPANEL],
|
|
28
|
-
stripe_intent_failed_retry: [_.MIXPANEL]
|
|
30
|
+
stripe_intent_failed_retry: [_.MIXPANEL],
|
|
31
|
+
subscription_billing_details_added: [_.MIXPANEL],
|
|
32
|
+
subscription_billing_details_addition_failed: [_.MIXPANEL]
|
|
29
33
|
};
|
|
30
34
|
export {
|
|
31
35
|
t as PLA_ANALYTICS_EVENTS,
|
|
32
|
-
|
|
36
|
+
s as PLA_ANALYTICS_WHITELIST_EVENTS
|
|
33
37
|
};
|
|
34
38
|
//# sourceMappingURL=pla-analytics-events.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pla-analytics-events.js","sources":["../../../../src/features/auth/pla-signup/pla-analytics-events.ts"],"sourcesContent":["import { PLUGINS } from '@cuemath/analytics-v2/dist/constants';\n\nexport enum PLA_ANALYTICS_EVENTS {\n START_SIGNUP_CTA_CLICKED = 'start_signup_cta_clicked',\n SIGNUP_TO_LOGIN_CTA_CLICKED = 'signup_to_login_cta_clicked',\n ECNA_STEP_VIEWED = 'ecna_step_viewed',\n ECNA_RESPONSE_RECORDED_DEBUG = 'ecna_response_recorded_debug',\n PARENT_SIGNUP_CTA_CLICKED = 'parent_signup_cta_clicked',\n PARENT_SIGNUP_SUCCESSFUL = 'parent_signup_successful',\n PARENT_SIGNUP_FAILED = 'parent_signup_failed',\n STUDENT_SIGNUP_SUCCESSFUL = '
|
|
1
|
+
{"version":3,"file":"pla-analytics-events.js","sources":["../../../../src/features/auth/pla-signup/pla-analytics-events.ts"],"sourcesContent":["import { PLUGINS } from '@cuemath/analytics-v2/dist/constants';\n\nexport enum PLA_ANALYTICS_EVENTS {\n START_SIGNUP_CTA_CLICKED = 'start_signup_cta_clicked',\n SIGNUP_TO_LOGIN_CTA_CLICKED = 'signup_to_login_cta_clicked',\n ECNA_STEP_VIEWED = 'ecna_step_viewed',\n ECNA_RESPONSE_RECORDED_DEBUG = 'ecna_response_recorded_debug',\n PARENT_SIGNUP_CTA_CLICKED = 'parent_signup_cta_clicked',\n PARENT_SIGNUP_SUCCESSFUL = 'parent_signup_successful',\n PARENT_SIGNUP_FAILED = 'parent_signup_failed',\n STUDENT_SIGNUP_SUCCESSFUL = 'student_signup_successful',\n STUDENT_SIGNUP_FAILED = 'student_signup_failed',\n SIGNUP_OTP_ENTERED = 'signup_otp_entered',\n SIGNUP_OTP_VERIFIED = 'signup_otp_verified',\n SIGNUP_OTP_FAILED = 'signup_otp_failed',\n SLOTS_SHOWN = 'slots_shown',\n SLOT_DATE_SELECTED = 'slot_date_selected',\n SLOT_TIME_SELECTED = 'slot_time_selected',\n SLOT_DATE_TIME_SUBMITED = 'slot_date_time_submited',\n SLOT_DATE_TIME_SUBMITION_FAILED = 'slot_date_time_submition_failed',\n TUTOR_CHANGE_REASON_SELECTED = 'tutor_change_reason_selected',\n SUBSCRIPTION_CANCELLATION_FAILED = 'subscription_cancellation_failed',\n SUBSCRIPTION_CANCELLATION_SUCCESSFUL = 'subscription_cancellation_successful',\n SUBSCRIPTION_BILLING_DETAILS_ADDED = 'subscription_billing_details_added',\n SUBSCRIPTION_BILLING_DETAILS_ADDITION_FAILED = 'subscription_billing_details_addition_failed',\n STRIPE_INTENT_FAILED_RETRY = 'stripe_intent_failed_retry',\n SUBSCRIPTION_INTENT_FAILED = 'subscription_intent_failed',\n SUBSCRIPTION_INTENT_CREATED = 'subscription_intent_created',\n STRIPE_PAYMENT_ELEMENT_READY = 'stripe_payment_element_ready',\n STRIPE_PAYMENT_FAILED = 'stripe_payment_failed',\n STRIPE_PAYMENT_SUCCESS = 'stripe_payment_success',\n PAYMENT_PLAN_SELECTED = 'payment_plan_selected',\n STRIPE_PAYMENT_ELEMENT_MOUNT_FAILED = 'stripe_payment_element_mount_failed',\n}\n\nexport const PLA_ANALYTICS_WHITELIST_EVENTS = {\n [PLA_ANALYTICS_EVENTS.START_SIGNUP_CTA_CLICKED]: [PLUGINS.MIXPANEL],\n [PLA_ANALYTICS_EVENTS.ECNA_STEP_VIEWED]: [PLUGINS.MIXPANEL],\n [PLA_ANALYTICS_EVENTS.ECNA_RESPONSE_RECORDED_DEBUG]: [PLUGINS.MIXPANEL],\n [PLA_ANALYTICS_EVENTS.PARENT_SIGNUP_CTA_CLICKED]: [PLUGINS.MIXPANEL],\n [PLA_ANALYTICS_EVENTS.PARENT_SIGNUP_SUCCESSFUL]: [PLUGINS.MIXPANEL],\n [PLA_ANALYTICS_EVENTS.PARENT_SIGNUP_FAILED]: [PLUGINS.MIXPANEL],\n [PLA_ANALYTICS_EVENTS.STUDENT_SIGNUP_SUCCESSFUL]: [PLUGINS.MIXPANEL],\n [PLA_ANALYTICS_EVENTS.STUDENT_SIGNUP_FAILED]: [PLUGINS.MIXPANEL],\n [PLA_ANALYTICS_EVENTS.SIGNUP_OTP_ENTERED]: [PLUGINS.MIXPANEL],\n [PLA_ANALYTICS_EVENTS.SIGNUP_OTP_VERIFIED]: [PLUGINS.MIXPANEL],\n [PLA_ANALYTICS_EVENTS.SIGNUP_OTP_FAILED]: [PLUGINS.MIXPANEL],\n [PLA_ANALYTICS_EVENTS.SLOTS_SHOWN]: [PLUGINS.MIXPANEL],\n [PLA_ANALYTICS_EVENTS.SLOT_DATE_SELECTED]: [PLUGINS.MIXPANEL],\n [PLA_ANALYTICS_EVENTS.SLOT_TIME_SELECTED]: [PLUGINS.MIXPANEL],\n [PLA_ANALYTICS_EVENTS.SLOT_DATE_TIME_SUBMITED]: [PLUGINS.MIXPANEL],\n [PLA_ANALYTICS_EVENTS.SLOT_DATE_TIME_SUBMITION_FAILED]: [PLUGINS.MIXPANEL],\n [PLA_ANALYTICS_EVENTS.TUTOR_CHANGE_REASON_SELECTED]: [PLUGINS.MIXPANEL],\n [PLA_ANALYTICS_EVENTS.SUBSCRIPTION_CANCELLATION_FAILED]: [PLUGINS.MIXPANEL],\n [PLA_ANALYTICS_EVENTS.SUBSCRIPTION_CANCELLATION_SUCCESSFUL]: [PLUGINS.MIXPANEL],\n [PLA_ANALYTICS_EVENTS.SUBSCRIPTION_INTENT_FAILED]: [PLUGINS.MIXPANEL],\n [PLA_ANALYTICS_EVENTS.SUBSCRIPTION_INTENT_CREATED]: [PLUGINS.MIXPANEL],\n [PLA_ANALYTICS_EVENTS.STRIPE_PAYMENT_ELEMENT_READY]: [PLUGINS.MIXPANEL],\n [PLA_ANALYTICS_EVENTS.STRIPE_PAYMENT_FAILED]: [PLUGINS.MIXPANEL],\n [PLA_ANALYTICS_EVENTS.STRIPE_PAYMENT_SUCCESS]: [PLUGINS.MIXPANEL],\n [PLA_ANALYTICS_EVENTS.PAYMENT_PLAN_SELECTED]: [PLUGINS.MIXPANEL],\n [PLA_ANALYTICS_EVENTS.STRIPE_PAYMENT_ELEMENT_MOUNT_FAILED]: [PLUGINS.MIXPANEL],\n [PLA_ANALYTICS_EVENTS.STRIPE_INTENT_FAILED_RETRY]: [PLUGINS.MIXPANEL],\n [PLA_ANALYTICS_EVENTS.SUBSCRIPTION_BILLING_DETAILS_ADDED]: [PLUGINS.MIXPANEL],\n [PLA_ANALYTICS_EVENTS.SUBSCRIPTION_BILLING_DETAILS_ADDITION_FAILED]: [PLUGINS.MIXPANEL],\n};\n"],"names":["PLA_ANALYTICS_EVENTS","PLA_ANALYTICS_WHITELIST_EVENTS","PLUGINS"],"mappings":";AAEY,IAAAA,sBAAAA,OACVA,EAAA,2BAA2B,4BAC3BA,EAAA,8BAA8B,+BAC9BA,EAAA,mBAAmB,oBACnBA,EAAA,+BAA+B,gCAC/BA,EAAA,4BAA4B,6BAC5BA,EAAA,2BAA2B,4BAC3BA,EAAA,uBAAuB,wBACvBA,EAAA,4BAA4B,6BAC5BA,EAAA,wBAAwB,yBACxBA,EAAA,qBAAqB,sBACrBA,EAAA,sBAAsB,uBACtBA,EAAA,oBAAoB,qBACpBA,EAAA,cAAc,eACdA,EAAA,qBAAqB,sBACrBA,EAAA,qBAAqB,sBACrBA,EAAA,0BAA0B,2BAC1BA,EAAA,kCAAkC,mCAClCA,EAAA,+BAA+B,gCAC/BA,EAAA,mCAAmC,oCACnCA,EAAA,uCAAuC,wCACvCA,EAAA,qCAAqC,sCACrCA,EAAA,+CAA+C,gDAC/CA,EAAA,6BAA6B,8BAC7BA,EAAA,6BAA6B,8BAC7BA,EAAA,8BAA8B,+BAC9BA,EAAA,+BAA+B,gCAC/BA,EAAA,wBAAwB,yBACxBA,EAAA,yBAAyB,0BACzBA,EAAA,wBAAwB,yBACxBA,EAAA,sCAAsC,uCA9B5BA,IAAAA,KAAA,CAAA,CAAA;AAiCL,MAAMC,IAAiC;AAAA,EAC3C,0BAAgD,CAACC,EAAQ,QAAQ;AAAA,EACjE,kBAAwC,CAACA,EAAQ,QAAQ;AAAA,EACzD,8BAAoD,CAACA,EAAQ,QAAQ;AAAA,EACrE,2BAAiD,CAACA,EAAQ,QAAQ;AAAA,EAClE,0BAAgD,CAACA,EAAQ,QAAQ;AAAA,EACjE,sBAA4C,CAACA,EAAQ,QAAQ;AAAA,EAC7D,2BAAiD,CAACA,EAAQ,QAAQ;AAAA,EAClE,uBAA6C,CAACA,EAAQ,QAAQ;AAAA,EAC9D,oBAA0C,CAACA,EAAQ,QAAQ;AAAA,EAC3D,qBAA2C,CAACA,EAAQ,QAAQ;AAAA,EAC5D,mBAAyC,CAACA,EAAQ,QAAQ;AAAA,EAC1D,aAAmC,CAACA,EAAQ,QAAQ;AAAA,EACpD,oBAA0C,CAACA,EAAQ,QAAQ;AAAA,EAC3D,oBAA0C,CAACA,EAAQ,QAAQ;AAAA,EAC3D,yBAA+C,CAACA,EAAQ,QAAQ;AAAA,EAChE,iCAAuD,CAACA,EAAQ,QAAQ;AAAA,EACxE,8BAAoD,CAACA,EAAQ,QAAQ;AAAA,EACrE,kCAAwD,CAACA,EAAQ,QAAQ;AAAA,EACzE,sCAA4D,CAACA,EAAQ,QAAQ;AAAA,EAC7E,4BAAkD,CAACA,EAAQ,QAAQ;AAAA,EACnE,6BAAmD,CAACA,EAAQ,QAAQ;AAAA,EACpE,8BAAoD,CAACA,EAAQ,QAAQ;AAAA,EACrE,uBAA6C,CAACA,EAAQ,QAAQ;AAAA,EAC9D,wBAA8C,CAACA,EAAQ,QAAQ;AAAA,EAC/D,uBAA6C,CAACA,EAAQ,QAAQ;AAAA,EAC9D,qCAA2D,CAACA,EAAQ,QAAQ;AAAA,EAC5E,4BAAkD,CAACA,EAAQ,QAAQ;AAAA,EACnE,oCAA0D,CAACA,EAAQ,QAAQ;AAAA,EAC3E,8CAAoE,CAACA,EAAQ,QAAQ;AACxF;"}
|
|
@@ -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", a = "https://static.cuemath.com/static/sounds",
|
|
2
|
+
const e = "https://cuemath-circle.s3.ap-southeast-1.amazonaws.com/assets/sounds/production", a = "https://static.cuemath.com/static/sounds", t = {
|
|
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`,
|
|
@@ -30,14 +30,16 @@ const e = "https://cuemath-circle.s3.ap-southeast-1.amazonaws.com/assets/sounds/
|
|
|
30
30
|
[c.ALL_DONE]: `${e}/all-done.mp3`,
|
|
31
31
|
[c.DOING_GREAT]: `${e}/doing-great.mp3`,
|
|
32
32
|
[c.KEEP_IT_UP]: `${e}/keep-it-up.mp3`
|
|
33
|
-
},
|
|
33
|
+
}, i = [
|
|
34
34
|
c.SWIPE_04,
|
|
35
35
|
c.SWIPE_02,
|
|
36
36
|
c.SWIPE_03,
|
|
37
37
|
c.SWIPE_01
|
|
38
|
-
];
|
|
38
|
+
], _ = 100, E = 0.1;
|
|
39
39
|
export {
|
|
40
|
-
|
|
41
|
-
|
|
40
|
+
t as CircleSoundKeyMapper,
|
|
41
|
+
i as SWIPE_SOUND_ORDER,
|
|
42
|
+
_ as VOLUME_FADE_DURATION,
|
|
43
|
+
E as VOLUME_TO_CHANGE
|
|
42
44
|
};
|
|
43
45
|
//# 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-v2.wav`,\n [CircleSoundKey.ACTIVITY_COMPLETE]: `${BASE_URL}/circle-activity-complete.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_ACTIVITIES_COMPLETE]: `${BASE_URL}/circle-all-activities-complete.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,iBAAiB,GAAG,GAAGH,CAAQ;AAAA,EAC/C,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,uBAAuB,GAAG,GAAGH,CAAQ;AAAA,EACrD,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
|
+
{"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-v2.wav`,\n [CircleSoundKey.ACTIVITY_COMPLETE]: `${BASE_URL}/circle-activity-complete.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_ACTIVITIES_COMPLETE]: `${BASE_URL}/circle-all-activities-complete.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","VOLUME_FADE_DURATION","VOLUME_TO_CHANGE"],"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,iBAAiB,GAAG,GAAGH,CAAQ;AAAA,EAC/C,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,uBAAuB,GAAG,GAAGH,CAAQ;AAAA,EACrD,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,GAEaE,IAAuB,KACvBC,IAAmB;"}
|
|
@@ -0,0 +1,19 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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;"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { useAutoPlayPermission as
|
|
3
|
-
import {
|
|
1
|
+
import { useCallback as s, useRef as T, useEffect as P } from "react";
|
|
2
|
+
import { useAutoPlayPermission as m } from "../../../hooks/use-auto-play-permission/use-auto-play-permission.js";
|
|
3
|
+
import { CircleSoundKeyMapper as L, SWIPE_SOUND_ORDER as O } from "./constants.js";
|
|
4
|
+
import { fadeInSound as R, fadeOutSound as U } from "./helper.js";
|
|
4
5
|
import { CircleSoundKey as n } from "./use-circle-sounds-enums.js";
|
|
5
|
-
let
|
|
6
|
-
const
|
|
6
|
+
let S = 0;
|
|
7
|
+
const c = {
|
|
7
8
|
[n.BACKGROUND]: null,
|
|
8
9
|
[n.BACKGROUND_RUSHHOUR]: null,
|
|
9
10
|
[n.TUTORIAL]: null,
|
|
@@ -34,97 +35,81 @@ const u = new (window.AudioContext || window.webkitAudioContext)(), R = {
|
|
|
34
35
|
[n.ALL_DONE]: null,
|
|
35
36
|
[n.ACTIVITY_COMPLETE]: null,
|
|
36
37
|
[n.ALL_ACTIVITIES_COMPLETE]: null
|
|
37
|
-
},
|
|
38
|
-
const { canAutoPlayAudio:
|
|
39
|
-
if (!
|
|
40
|
-
const t =
|
|
41
|
-
|
|
38
|
+
}, _ = {}, b = () => {
|
|
39
|
+
const { canAutoPlayAudio: f } = m(), C = s((l) => {
|
|
40
|
+
if (!c[l]) {
|
|
41
|
+
const t = new Audio(L[l]);
|
|
42
|
+
c[l] = t;
|
|
42
43
|
}
|
|
43
|
-
}, []),
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
44
|
+
}, []), i = T(/* @__PURE__ */ new Set()), o = T({}), r = s(
|
|
45
|
+
(l, t = !0, e = !1) => {
|
|
46
|
+
C(l);
|
|
47
|
+
const u = c[l];
|
|
48
|
+
if (!u || !f) return;
|
|
49
|
+
if (e && (u.loop = e), o.current[l] && clearInterval(o.current[l]), !u.paused && u.currentTime > 0 && !u.ended) {
|
|
50
|
+
if (t)
|
|
51
|
+
u.volume = 1;
|
|
52
|
+
else {
|
|
53
|
+
const I = R(u);
|
|
54
|
+
o.current[l] = I;
|
|
55
|
+
}
|
|
56
|
+
return u;
|
|
49
57
|
}
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
var o;
|
|
56
|
-
(o = i[t]) == null || o.source.stop(), delete i[t];
|
|
57
|
-
}, 500);
|
|
58
|
-
f.current[t] = r;
|
|
59
|
-
}, a = c(
|
|
60
|
-
async (e, t = !0, r = !1) => {
|
|
61
|
-
await A(), await T(e);
|
|
62
|
-
const o = R[e];
|
|
63
|
-
if (!o || !d) {
|
|
64
|
-
console.warn("Cannot play sound", e, { buffer: o, canPlayAudio: d });
|
|
65
|
-
return;
|
|
58
|
+
u.volume = t ? 1 : 0;
|
|
59
|
+
const A = u.play();
|
|
60
|
+
if (A && (_[l] = A), !t) {
|
|
61
|
+
const I = R(u);
|
|
62
|
+
o.current[l] = I;
|
|
66
63
|
}
|
|
67
|
-
|
|
68
|
-
|
|
64
|
+
return u;
|
|
65
|
+
},
|
|
66
|
+
[C, f]
|
|
67
|
+
), a = s((l, t) => {
|
|
68
|
+
const e = c[l];
|
|
69
|
+
if (!e) return;
|
|
70
|
+
if (o.current[l] && clearInterval(o.current[l]), t) {
|
|
71
|
+
e.pause();
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
const u = U(e);
|
|
75
|
+
o.current[l] = u;
|
|
76
|
+
}, []), d = s(
|
|
77
|
+
(l, t = !0) => {
|
|
78
|
+
var e;
|
|
79
|
+
if (_[l] !== void 0) {
|
|
80
|
+
(e = _[l]) == null || e.then(() => {
|
|
81
|
+
a(l, t);
|
|
82
|
+
}).catch((u) => {
|
|
83
|
+
console.log("sound not playing", u);
|
|
84
|
+
});
|
|
69
85
|
return;
|
|
70
86
|
}
|
|
71
|
-
|
|
72
|
-
s.buffer = o, s.loop = r, s.connect(E).connect(u.destination), t ? E.gain.setValueAtTime(1, u.currentTime) : w(E), s.start(), i[e] = { source: s, gainNode: E }, r || (s.onended = () => {
|
|
73
|
-
var S;
|
|
74
|
-
((S = i[e]) == null ? void 0 : S.source) === s && delete i[e];
|
|
75
|
-
});
|
|
87
|
+
a(l, t);
|
|
76
88
|
},
|
|
77
|
-
[
|
|
78
|
-
),
|
|
79
|
-
const
|
|
80
|
-
|
|
81
|
-
}, []),
|
|
82
|
-
const
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
}, [a, C]);
|
|
93
|
-
return h(() => {
|
|
94
|
-
const e = ["pointerdown", "touchstart"], t = () => {
|
|
95
|
-
A();
|
|
96
|
-
};
|
|
97
|
-
document.addEventListener("visibilitychange", m), e.forEach((o) => {
|
|
98
|
-
window.addEventListener(o, t, { once: !0 });
|
|
99
|
-
});
|
|
100
|
-
const r = f.current;
|
|
89
|
+
[a]
|
|
90
|
+
), p = s(() => {
|
|
91
|
+
const l = O[S] || n.SWIPE_01;
|
|
92
|
+
S = (S + 1) % O.length, r(l);
|
|
93
|
+
}, [r]), v = s(() => r(n.TOGGLE), [r]), E = s(() => {
|
|
94
|
+
const l = document.visibilityState;
|
|
95
|
+
l === "hidden" && Object.entries(c).forEach(([t, e]) => {
|
|
96
|
+
e && !e.paused && (d(t, !0), i.current.add(t));
|
|
97
|
+
}), l === "visible" && (i.current.forEach((t) => {
|
|
98
|
+
r(t);
|
|
99
|
+
}), i.current.clear());
|
|
100
|
+
}, [r, d]);
|
|
101
|
+
return P(() => {
|
|
102
|
+
document.addEventListener("visibilitychange", E);
|
|
103
|
+
const l = o.current;
|
|
101
104
|
return () => {
|
|
102
|
-
document.removeEventListener("visibilitychange",
|
|
103
|
-
|
|
104
|
-
})
|
|
105
|
+
document.removeEventListener("visibilitychange", E), Object.values(l).forEach((t) => {
|
|
106
|
+
t && clearInterval(t);
|
|
107
|
+
});
|
|
105
108
|
};
|
|
106
|
-
}, [
|
|
107
|
-
playSwipeSound: L,
|
|
108
|
-
play: a,
|
|
109
|
-
stop: C,
|
|
110
|
-
playButtonSound: P
|
|
111
|
-
};
|
|
112
|
-
}, y = async (d) => {
|
|
113
|
-
try {
|
|
114
|
-
const l = await fetch(d, {
|
|
115
|
-
mode: "cors",
|
|
116
|
-
credentials: "omit"
|
|
117
|
-
});
|
|
118
|
-
if (!l.ok)
|
|
119
|
-
throw new Error(`HTTP error! status: ${l.status}`);
|
|
120
|
-
const f = await l.arrayBuffer();
|
|
121
|
-
return await u.decodeAudioData(f);
|
|
122
|
-
} catch (l) {
|
|
123
|
-
console.error("CORS error loading audio:", l);
|
|
124
|
-
return;
|
|
125
|
-
}
|
|
109
|
+
}, [E]), { playSwipeSound: p, play: r, stop: d, playButtonSound: v };
|
|
126
110
|
};
|
|
127
111
|
export {
|
|
128
|
-
|
|
112
|
+
c as soundMapper,
|
|
113
|
+
b as useCircleSounds
|
|
129
114
|
};
|
|
130
115
|
//# 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 { useAutoPlayPermission } from '../../../hooks/use-auto-play-permission/use-auto-play-permission';\nimport { CircleSoundKeyMapper, SWIPE_SOUND_ORDER } from './constants';\nimport type { TimeoutMap } from './use-circle-sound-types';\nimport { CircleSoundKey } from './use-circle-sounds-enums';\n\nlet swipeSoundIndex = 0;\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 [CircleSoundKey.ACTIVITY_COMPLETE]: null,\n [CircleSoundKey.ALL_ACTIVITIES_COMPLETE]: 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 audioBuffer = await fetchAudio(CircleSoundKeyMapper[key]);\n\n if (audioBuffer) {\n bufferMapper[key] = audioBuffer;\n }\n }\n }, []);\n\n const resumeAudioContext = async () => {\n if (audioContext.state === 'suspended') {\n try {\n await audioContext.resume();\n } catch (err) {\n // eslint-disable-next-line no-console\n console.warn('Failed to resume AudioContext:', err);\n }\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 resumeAudioContext();\n await loadSound(key);\n const buffer = bufferMapper[key];\n\n if (!buffer || !canPlayAudio) {\n // eslint-disable-next-line no-console\n console.warn('Cannot play sound', key, { buffer, canPlayAudio });\n\n return;\n }\n\n if (activeSounds[key] && loop) {\n // eslint-disable-next-line no-console\n console.log('Sound already playing:', key);\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\n if (immediately) {\n gainNode.gain.setValueAtTime(1, audioContext.currentTime);\n } else {\n fadeIn(gainNode);\n }\n\n source.start();\n activeSounds[key] = { source, gainNode };\n\n if (!loop) {\n source.onended = () => {\n if (activeSounds[key]?.source === source) {\n delete activeSounds[key];\n }\n };\n }\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(async () => {\n if (document.visibilityState === 'visible') {\n await resumeAudioContext();\n pausedSoundsRef.current.forEach(key => {\n play(key);\n });\n pausedSoundsRef.current.clear();\n } else {\n Object.keys(activeSounds).forEach(key => {\n stop(key as CircleSoundKey, true);\n pausedSoundsRef.current.add(key as CircleSoundKey);\n });\n }\n }, [play, stop]);\n\n useEffect(() => {\n const interactionEvents = ['pointerdown', 'touchstart'];\n const tryResume = () => {\n resumeAudioContext();\n };\n\n document.addEventListener('visibilitychange', handleVisibilityChange);\n interactionEvents.forEach(event => {\n window.addEventListener(event, tryResume, { once: true });\n });\n\n const timeouts = timeoutRefs.current;\n\n return () => {\n document.removeEventListener('visibilitychange', handleVisibilityChange);\n interactionEvents.forEach(event => {\n window.removeEventListener(event, tryResume);\n });\n Object.values(timeouts).forEach(id => clearTimeout(id));\n };\n }, [handleVisibilityChange]);\n\n return {\n playSwipeSound,\n play,\n stop,\n playButtonSound,\n };\n};\n\nconst fetchAudio = async (url: string): Promise<AudioBuffer | undefined> => {\n try {\n const response: Response = await fetch(url, {\n mode: 'cors',\n credentials: 'omit',\n });\n\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n\n const arrayBuffer: ArrayBuffer = await response.arrayBuffer();\n const decoded: AudioBuffer = await audioContext.decodeAudioData(arrayBuffer);\n\n return decoded;\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error('CORS error loading audio:', error);\n\n return undefined;\n }\n};\n"],"names":["swipeSoundIndex","audioContext","bufferMapper","CircleSoundKey","activeSounds","useCircleSounds","canPlayAudio","useAutoPlayPermission","pausedSoundsRef","useRef","timeoutRefs","loadSound","useCallback","key","audioBuffer","fetchAudio","CircleSoundKeyMapper","resumeAudioContext","err","fadeIn","gainNode","fadeOut","timeout","_a","play","immediately","loop","buffer","source","stop","sound","playSwipeSound","SWIPE_SOUND_ORDER","playButtonSound","handleVisibilityChange","useEffect","interactionEvents","tryResume","event","timeouts","id","url","response","arrayBuffer","error"],"mappings":";;;;AAOA,IAAIA,IAAkB;AACtB,MAAMC,IAAe,KAAK,OAAO,gBAAgB,OAAO,oBAAoB,GAEtEC,IAA2D;AAAA,EAC/D,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;AAAA,EAC7B,CAACA,EAAe,UAAU,GAAG;AAAA,EAC7B,CAACA,EAAe,UAAU,GAAG;AAAA,EAC7B,CAACA,EAAe,UAAU,GAAG;AAAA,EAC7B,CAACA,EAAe,WAAW,GAAG;AAAA,EAC9B,CAACA,EAAe,QAAQ,GAAG;AAAA,EAC3B,CAACA,EAAe,iBAAiB,GAAG;AAAA,EACpC,CAACA,EAAe,uBAAuB,GAAG;AAC5C,GAOMC,IAA6D,CAAA,GAEtDC,IAAkB,MAAM;AACnC,QAAM,EAAE,kBAAkBC,EAAa,IAAIC,EAAsB,GAE3DC,IAAkBC,EAAgC,oBAAA,IAAK,CAAA,GACvDC,IAAcD,EAAmB,CAAA,CAAE,GAEnCE,IAAYC,EAAY,OAAOC,MAAwB;AACvD,QAAA,CAACX,EAAaW,CAAG,GAAG;AACtB,YAAMC,IAAc,MAAMC,EAAWC,EAAqBH,CAAG,CAAC;AAE9D,MAAIC,MACFZ,EAAaW,CAAG,IAAIC;AAAA,IAExB;AAAA,EACF,GAAG,CAAE,CAAA,GAECG,IAAqB,YAAY;AACjC,QAAAhB,EAAa,UAAU;AACrB,UAAA;AACF,cAAMA,EAAa;eACZiB,GAAK;AAEJ,gBAAA,KAAK,kCAAkCA,CAAG;AAAA,MACpD;AAAA,EACF,GAGIC,IAAS,CAACC,MAAuB;AACrC,IAAAA,EAAS,KAAK,eAAe,GAAGnB,EAAa,WAAW,GACxDmB,EAAS,KAAK,wBAAwB,GAAGnB,EAAa,cAAc,GAAG;AAAA,EAAA,GAGnEoB,IAAU,CAACD,GAAoBP,MAAwB;AAC3D,IAAAO,EAAS,KAAK,eAAeA,EAAS,KAAK,OAAOnB,EAAa,WAAW,GAC1EmB,EAAS,KAAK,wBAAwB,GAAGnB,EAAa,cAAc,GAAG;AACjE,UAAAqB,IAAU,WAAW,MAAM;;AAClB,OAAAC,IAAAnB,EAAAS,CAAG,MAAH,QAAAU,EAAM,OAAO,QAC1B,OAAOnB,EAAaS,CAAG;AAAA,OACtB,GAAG;AAEM,IAAAH,EAAA,QAAQG,CAAG,IAAIS;AAAA,EAAA,GAGvBE,IAAOZ;AAAA,IACX,OAAOC,GAAqBY,IAAc,IAAMC,IAAO,OAAU;AAC/D,YAAMT,EAAmB,GACzB,MAAMN,EAAUE,CAAG;AACb,YAAAc,IAASzB,EAAaW,CAAG;AAE3B,UAAA,CAACc,KAAU,CAACrB,GAAc;AAE5B,gBAAQ,KAAK,qBAAqBO,GAAK,EAAE,QAAAc,GAAQ,cAAArB,GAAc;AAE/D;AAAA,MACF;AAEI,UAAAF,EAAaS,CAAG,KAAKa,GAAM;AAErB,gBAAA,IAAI,0BAA0Bb,CAAG;AAEzC;AAAA,MACF;AAEM,YAAAe,IAAS3B,EAAa,sBACtBmB,IAAWnB,EAAa;AAE9B,MAAA2B,EAAO,SAASD,GAChBC,EAAO,OAAOF,GACdE,EAAO,QAAQR,CAAQ,EAAE,QAAQnB,EAAa,WAAW,GAErDwB,IACFL,EAAS,KAAK,eAAe,GAAGnB,EAAa,WAAW,IAExDkB,EAAOC,CAAQ,GAGjBQ,EAAO,MAAM,GACbxB,EAAaS,CAAG,IAAI,EAAE,QAAAe,GAAQ,UAAAR,EAAS,GAElCM,MACHE,EAAO,UAAU,MAAM;;AACrB,UAAIL,IAAAnB,EAAaS,CAAG,MAAhB,gBAAAU,EAAmB,YAAWK,KAChC,OAAOxB,EAAaS,CAAG;AAAA,MACzB;AAAA,IAGN;AAAA,IACA,CAACP,GAAcK,CAAS;AAAA,EAAA,GAGpBkB,IAAOjB,EAAY,OAAOC,GAAqBY,IAAc,OAAS;AACpE,UAAAK,IAAQ1B,EAAaS,CAAG;AAE9B,IAAKiB,MAEDL,KACFK,EAAM,OAAO,QACb,OAAO1B,EAAaS,CAAG,KAEfQ,EAAAS,EAAM,UAAUjB,CAAG;AAAA,EAE/B,GAAG,CAAE,CAAA,GAECkB,IAAiBnB,EAAY,MAAM;AACvC,UAAMC,IAAMmB,EAAkBhC,CAAe,KAAKG,EAAe;AAE9C,IAAAH,KAAAA,IAAkB,KAAKgC,EAAkB,QAC5DR,EAAKX,CAAG;AAAA,EAAA,GACP,CAACW,CAAI,CAAC,GAEHS,IAAkBrB,EAAY,MAAM;AACxC,IAAAY,EAAKrB,EAAe,MAAM;AAAA,EAAA,GACzB,CAACqB,CAAI,CAAC,GAEHU,IAAyBtB,EAAY,YAAY;AACjD,IAAA,SAAS,oBAAoB,aAC/B,MAAMK,EAAmB,GACTT,EAAA,QAAQ,QAAQ,CAAOK,MAAA;AACrC,MAAAW,EAAKX,CAAG;AAAA,IAAA,CACT,GACDL,EAAgB,QAAQ,WAExB,OAAO,KAAKJ,CAAY,EAAE,QAAQ,CAAOS,MAAA;AACvC,MAAAgB,EAAKhB,GAAuB,EAAI,GAChBL,EAAA,QAAQ,IAAIK,CAAqB;AAAA,IAAA,CAClD;AAAA,EACH,GACC,CAACW,GAAMK,CAAI,CAAC;AAEf,SAAAM,EAAU,MAAM;AACR,UAAAC,IAAoB,CAAC,eAAe,YAAY,GAChDC,IAAY,MAAM;AACH,MAAApB;IAAA;AAGZ,aAAA,iBAAiB,oBAAoBiB,CAAsB,GACpEE,EAAkB,QAAQ,CAASE,MAAA;AACjC,aAAO,iBAAiBA,GAAOD,GAAW,EAAE,MAAM,IAAM;AAAA,IAAA,CACzD;AAED,UAAME,IAAW7B,EAAY;AAE7B,WAAO,MAAM;AACF,eAAA,oBAAoB,oBAAoBwB,CAAsB,GACvEE,EAAkB,QAAQ,CAASE,MAAA;AAC1B,eAAA,oBAAoBA,GAAOD,CAAS;AAAA,MAAA,CAC5C,GACD,OAAO,OAAOE,CAAQ,EAAE,QAAQ,CAAMC,MAAA,aAAaA,CAAE,CAAC;AAAA,IAAA;AAAA,EACxD,GACC,CAACN,CAAsB,CAAC,GAEpB;AAAA,IACL,gBAAAH;AAAA,IACA,MAAAP;AAAA,IACA,MAAAK;AAAA,IACA,iBAAAI;AAAA,EAAA;AAEJ,GAEMlB,IAAa,OAAO0B,MAAkD;AACtE,MAAA;AACI,UAAAC,IAAqB,MAAM,MAAMD,GAAK;AAAA,MAC1C,MAAM;AAAA,MACN,aAAa;AAAA,IAAA,CACd;AAEG,QAAA,CAACC,EAAS;AACZ,YAAM,IAAI,MAAM,uBAAuBA,EAAS,MAAM,EAAE;AAGpD,UAAAC,IAA2B,MAAMD,EAAS;AAGzC,WAFsB,MAAMzC,EAAa,gBAAgB0C,CAAW;AAAA,WAGpEC,GAAO;AAEN,YAAA,MAAM,6BAA6BA,CAAK;AAEzC;AAAA,EACT;AACF;"}
|
|
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 { useAutoPlayPermission } from '../../../hooks/use-auto-play-permission/use-auto-play-permission';\nimport { CircleSoundKeyMapper, SWIPE_SOUND_ORDER } from './constants';\nimport { fadeInSound, fadeOutSound } from './helper';\nimport type { TimeoutMap } from './use-circle-sound-types';\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 [CircleSoundKey.ACTIVITY_COMPLETE]: null,\n [CircleSoundKey.ALL_ACTIVITIES_COMPLETE]: 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 if (id) {\n clearInterval(id);\n }\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":";;;;;AAQA,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;AAAA,EAC7B,CAACA,EAAe,UAAU,GAAG;AAAA,EAC7B,CAACA,EAAe,UAAU,GAAG;AAAA,EAC7B,CAACA,EAAe,UAAU,GAAG;AAAA,EAC7B,CAACA,EAAe,WAAW,GAAG;AAAA,EAC9B,CAACA,EAAe,QAAQ,GAAG;AAAA,EAC3B,CAACA,EAAe,iBAAiB,GAAG;AAAA,EACpC,CAACA,EAAe,uBAAuB,GAAG;AAC5C,GAEMC,IAA0F,CAAA,GAEnFC,IAAkB,MAAM;AACnC,QAAM,EAAE,kBAAkBC,EAAa,IAAIC,EAAsB,GAE3DC,IAAYC,EAAY,CAACC,MAAwB;AACjD,QAAA,CAACR,EAAYQ,CAAG,GAAG;AACrB,YAAMC,IAAc,IAAI,MAAMC,EAAqBF,CAAG,CAAC;AAEvD,MAAAR,EAAYQ,CAAG,IAAIC;AAAA,IACrB;AAAA,EACF,GAAG,CAAE,CAAA,GAECE,IAAkBC,EAAgC,oBAAA,IAAK,CAAA,GACvDC,IAAcD,EAAmB,CAAA,CAAE,GAEnCE,IAAOP;AAAA,IACX,CAACC,GAAqBO,IAAuB,IAAMC,IAAO,OAAU;AAClE,MAAAV,EAAUE,CAAG;AACP,YAAAS,IAAgBjB,EAAYQ,CAAG;AAEjC,UAAA,CAACS,KAAiB,CAACb,EAAc;AAajC,UATAY,MACFC,EAAc,OAAOD,IAGnBH,EAAY,QAAQL,CAAG,KACX,cAAAK,EAAY,QAAQL,CAAG,CAAC,GAIpC,CAACS,EAAc,UAAUA,EAAc,cAAc,KAAK,CAACA,EAAc,OAAO;AAClF,YAAKF;AAKH,UAAAE,EAAc,SAAS;AAAA,aALP;AACV,gBAAAC,IAAaC,EAAYF,CAAa;AAEhC,UAAAJ,EAAA,QAAQL,CAAG,IAAIU;AAAA,QAAA;AAKtB,eAAAD;AAAA,MACT;AAGc,MAAAA,EAAA,SAASF,IAAc,IAAI;AACnC,YAAAK,IAAUH,EAAc;AAM9B,UAJIG,MACFlB,EAAqBM,CAAG,IAAIY,IAG1B,CAACL,GAAa;AACV,cAAAG,IAAaC,EAAYF,CAAa;AAEhC,QAAAJ,EAAA,QAAQL,CAAG,IAAIU;AAAA,MAC7B;AAEO,aAAAD;AAAA,IACT;AAAA,IACA,CAACX,GAAWF,CAAY;AAAA,EAAA,GAGpBiB,IAAkBd,EAAY,CAACC,GAAqBO,MAAyB;AAC3E,UAAAE,IAAgBjB,EAAYQ,CAAG;AAErC,QAAI,CAACS,EAAe;AAMpB,QAJIJ,EAAY,QAAQL,CAAG,KACX,cAAAK,EAAY,QAAQL,CAAG,CAAC,GAGpCO,GAAa;AACf,MAAAE,EAAc,MAAM;AAEpB;AAAA,IACF;AAEM,UAAAC,IAAaI,EAAaL,CAAa;AAEjC,IAAAJ,EAAA,QAAQL,CAAG,IAAIU;AAAA,EAC7B,GAAG,CAAE,CAAA,GAECK,IAAOhB;AAAA,IACX,CAACC,GAAqBO,IAAuB,OAAS;;AAEhD,UAAAb,EAAqBM,CAAG,MAAM,QAAW;AACtB,SAAAgB,IAAAtB,EAAAM,CAAG,MAAH,QAAAgB,EACjB,KAAK,MAAM;AACX,UAAAH,EAAgBb,GAAKO,CAAW;AAAA,QAAA,GAEjC,MAAM,CAAOU,MAAA;AAEJ,kBAAA,IAAI,qBAAqBA,CAAG;AAAA,QAAA;AAGxC;AAAA,MACF;AAEA,MAAAJ,EAAgBb,GAAKO,CAAW;AAAA,IAClC;AAAA,IACA,CAACM,CAAe;AAAA,EAAA,GAGZK,IAAiBnB,EAAY,MAAM;AACvC,UAAMC,IAAMmB,EAAkB5B,CAAe,KAAKE,EAAe;AAE9C,IAAAF,KAAAA,IAAkB,KAAK4B,EAAkB,QAE5Db,EAAKN,CAAG;AAAA,EAAA,GACP,CAACM,CAAI,CAAC,GAEHc,IAAkBrB,EAAY,MACpBO,EAAKb,EAAe,MAAM,GAGvC,CAACa,CAAI,CAAC,GAEHe,IAAyBtB,EAAY,MAAM;AAC/C,UAAMuB,IAAkB,SAAS;AAEjC,IAAIA,MAAoB,YACf,OAAA,QAAQ9B,CAAW,EAAE,QAAQ,CAAC,CAACQ,GAAKuB,CAAK,MAAM;AAChD,MAAAA,KAAS,CAACA,EAAM,WAClBR,EAAKf,GAAuB,EAAI,GAChBG,EAAA,QAAQ,IAAIH,CAAqB;AAAA,IACnD,CACD,GAGCsB,MAAoB,cACNnB,EAAA,QAAQ,QAAQ,CAAOH,MAAA;AACrC,MAAAM,EAAKN,CAAG;AAAA,IAAA,CACT,GACDG,EAAgB,QAAQ;EAC1B,GACC,CAACG,GAAMS,CAAI,CAAC;AAEf,SAAAS,EAAU,MAAM;AACL,aAAA,iBAAiB,oBAAoBH,CAAsB;AACpE,UAAMI,IAAWpB,EAAY;AAE7B,WAAO,MAAM;AACF,eAAA,oBAAoB,oBAAoBgB,CAAsB,GACvE,OAAO,OAAOI,CAAQ,EAAE,QAAQ,CAAMC,MAAA;AACpC,QAAIA,KACF,cAAcA,CAAE;AAAA,MAClB,CACD;AAAA,IAAA;AAAA,EACH,GACC,CAACL,CAAsB,CAAC,GAEpB,EAAE,gBAAAH,GAAgB,MAAAZ,GAAM,MAAAS,GAAM,iBAAAK,EAAgB;AACvD;"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,40 +1,40 @@
|
|
|
1
|
-
import { ButtonHTMLAttributes } from 'react';
|
|
2
|
-
import { Channel } from '@cuemath/cue-message-broker';
|
|
1
|
+
import type { ButtonHTMLAttributes } from 'react';
|
|
2
|
+
import type { Channel } from '@cuemath/cue-message-broker';
|
|
3
3
|
import { ChannelStatus } from '@cuemath/cue-message-broker';
|
|
4
4
|
import { ComponentProps } from 'react';
|
|
5
5
|
import { ComponentType } from 'react';
|
|
6
|
-
import { Config } from '@lottiefiles/dotlottie-web';
|
|
6
|
+
import type { Config } from '@lottiefiles/dotlottie-web';
|
|
7
7
|
import { Context } from 'react';
|
|
8
|
-
import { Data } from '@lottiefiles/dotlottie-web';
|
|
9
|
-
import { DefaultTheme } from 'styled-components';
|
|
8
|
+
import type { Data } from '@lottiefiles/dotlottie-web';
|
|
9
|
+
import type { DefaultTheme } from 'styled-components';
|
|
10
10
|
import { DetailedHTMLProps } from 'react';
|
|
11
|
-
import { Dispatch } from 'react';
|
|
12
|
-
import { EventListener as EventListener_2 } from '@lottiefiles/dotlottie-web';
|
|
13
|
-
import { EventType } from '@lottiefiles/dotlottie-web';
|
|
11
|
+
import type { Dispatch } from 'react';
|
|
12
|
+
import type { EventListener as EventListener_2 } from '@lottiefiles/dotlottie-web';
|
|
13
|
+
import type { EventType } from '@lottiefiles/dotlottie-web';
|
|
14
14
|
import { FC } from 'react';
|
|
15
|
-
import { FormEvent } from 'react';
|
|
15
|
+
import type { FormEvent } from 'react';
|
|
16
16
|
import { ForwardRefExoticComponent } from 'react';
|
|
17
17
|
import { HTMLAttributes } from 'react';
|
|
18
|
-
import { HTMLProps } from 'react';
|
|
18
|
+
import type { HTMLProps } from 'react';
|
|
19
19
|
import { IChannelMessage } from '@cuemath/cue-message-broker';
|
|
20
|
-
import { IframeHTMLAttributes } from 'react';
|
|
21
|
-
import { ImgHTMLAttributes } from 'react';
|
|
22
|
-
import { InputHTMLAttributes } from 'react';
|
|
20
|
+
import type { IframeHTMLAttributes } from 'react';
|
|
21
|
+
import type { ImgHTMLAttributes } from 'react';
|
|
22
|
+
import type { InputHTMLAttributes } from 'react';
|
|
23
23
|
import { IProvidedProps } from 'google-maps-react';
|
|
24
24
|
import { IStyledComponent } from 'styled-components';
|
|
25
25
|
import { JSX } from 'react/jsx-runtime';
|
|
26
26
|
import { MemoExoticComponent } from 'react';
|
|
27
|
-
import { MutableRefObject } from 'react';
|
|
27
|
+
import type { MutableRefObject } from 'react';
|
|
28
28
|
import { NamedExoticComponent } from 'react';
|
|
29
29
|
import { Omit as Omit_2 } from 'google-maps-react';
|
|
30
|
-
import { PLUGIN_NAME } from '@cuemath/analytics-v2/dist/constants';
|
|
30
|
+
import type { PLUGIN_NAME } from '@cuemath/analytics-v2/dist/constants';
|
|
31
31
|
import { PropsWithChildren } from 'react';
|
|
32
32
|
import { ReactElement } from 'react';
|
|
33
33
|
import { ReactNode } from 'react';
|
|
34
34
|
import { RefAttributes } from 'react';
|
|
35
35
|
import { RefObject } from 'react';
|
|
36
36
|
import { ResourceModel } from '@cuemath/rest-api';
|
|
37
|
-
import { SetStateAction } from 'react';
|
|
37
|
+
import type { SetStateAction } from 'react';
|
|
38
38
|
import { Substitute } from 'styled-components/dist/types';
|
|
39
39
|
import { SVGProps } from 'react';
|
|
40
40
|
import { VideoHTMLAttributes } from 'react';
|
|
@@ -87,7 +87,7 @@ declare type AnimationSegment = [number, number];
|
|
|
87
87
|
export declare const AppLoader: FC<IAppLoaderProps>;
|
|
88
88
|
|
|
89
89
|
export declare const ArcButton: NamedExoticComponent<IArcButtonProps & {
|
|
90
|
-
children?: ReactNode | undefined;
|
|
90
|
+
children?: ReactNode | undefined;
|
|
91
91
|
} & RefAttributes<HTMLDivElement>>;
|
|
92
92
|
|
|
93
93
|
export declare const ArrowTooltip: NamedExoticComponent<IArrowTooltipProps>;
|
|
@@ -448,7 +448,7 @@ declare interface CueCoinIconProps extends SVGProps<SVGSVGElement> {
|
|
|
448
448
|
variant?: 'gold' | 'silver';
|
|
449
449
|
}
|
|
450
450
|
|
|
451
|
-
export declare const CuemathAppFeatures: NamedExoticComponent<
|
|
451
|
+
export declare const CuemathAppFeatures: NamedExoticComponent<{}>;
|
|
452
452
|
|
|
453
453
|
export declare const CuemathLogo: FC<SVGProps<SVGSVGElement>>;
|
|
454
454
|
|
|
@@ -705,7 +705,7 @@ declare enum GENDER {
|
|
|
705
705
|
OTHER = "OTHER"
|
|
706
706
|
}
|
|
707
707
|
|
|
708
|
-
export declare const getActiveSATSheet: (sheets: TLPARSheetData[]) => TLPARSheetData
|
|
708
|
+
export declare const getActiveSATSheet: (sheets: TLPARSheetData[]) => TLPARSheetData;
|
|
709
709
|
|
|
710
710
|
declare const getArrowTooltipConfig: IGetArrowTooltipConfig;
|
|
711
711
|
|
|
@@ -5337,7 +5337,7 @@ export declare const OTPInput: NamedExoticComponent<IOTPInputProps>;
|
|
|
5337
5337
|
export declare type OutcomeStage = keyof typeof STAGES;
|
|
5338
5338
|
|
|
5339
5339
|
export declare const OverlayLoader: MemoExoticComponent<({ isLoading }: {
|
|
5340
|
-
isLoading?: boolean | undefined;
|
|
5340
|
+
isLoading?: boolean | undefined;
|
|
5341
5341
|
}) => JSX.Element | null>;
|
|
5342
5342
|
|
|
5343
5343
|
export declare const ParentDashboard: NamedExoticComponent<IParentDashboardProps>;
|
|
@@ -5360,17 +5360,21 @@ export declare enum PLA_ANALYTICS_EVENTS {
|
|
|
5360
5360
|
PARENT_SIGNUP_CTA_CLICKED = "parent_signup_cta_clicked",
|
|
5361
5361
|
PARENT_SIGNUP_SUCCESSFUL = "parent_signup_successful",
|
|
5362
5362
|
PARENT_SIGNUP_FAILED = "parent_signup_failed",
|
|
5363
|
-
STUDENT_SIGNUP_SUCCESSFUL = "
|
|
5364
|
-
STUDENT_SIGNUP_FAILED = "
|
|
5363
|
+
STUDENT_SIGNUP_SUCCESSFUL = "student_signup_successful",
|
|
5364
|
+
STUDENT_SIGNUP_FAILED = "student_signup_failed",
|
|
5365
5365
|
SIGNUP_OTP_ENTERED = "signup_otp_entered",
|
|
5366
5366
|
SIGNUP_OTP_VERIFIED = "signup_otp_verified",
|
|
5367
5367
|
SIGNUP_OTP_FAILED = "signup_otp_failed",
|
|
5368
5368
|
SLOTS_SHOWN = "slots_shown",
|
|
5369
5369
|
SLOT_DATE_SELECTED = "slot_date_selected",
|
|
5370
5370
|
SLOT_TIME_SELECTED = "slot_time_selected",
|
|
5371
|
+
SLOT_DATE_TIME_SUBMITED = "slot_date_time_submited",
|
|
5372
|
+
SLOT_DATE_TIME_SUBMITION_FAILED = "slot_date_time_submition_failed",
|
|
5371
5373
|
TUTOR_CHANGE_REASON_SELECTED = "tutor_change_reason_selected",
|
|
5372
5374
|
SUBSCRIPTION_CANCELLATION_FAILED = "subscription_cancellation_failed",
|
|
5373
5375
|
SUBSCRIPTION_CANCELLATION_SUCCESSFUL = "subscription_cancellation_successful",
|
|
5376
|
+
SUBSCRIPTION_BILLING_DETAILS_ADDED = "subscription_billing_details_added",
|
|
5377
|
+
SUBSCRIPTION_BILLING_DETAILS_ADDITION_FAILED = "subscription_billing_details_addition_failed",
|
|
5374
5378
|
STRIPE_INTENT_FAILED_RETRY = "stripe_intent_failed_retry",
|
|
5375
5379
|
SUBSCRIPTION_INTENT_FAILED = "subscription_intent_failed",
|
|
5376
5380
|
SUBSCRIPTION_INTENT_CREATED = "subscription_intent_created",
|
|
@@ -5669,7 +5673,7 @@ export declare const SheetIcon: FC<SVGProps<SVGSVGElement>>;
|
|
|
5669
5673
|
export declare const SheetList: FC<ISheetsListProps>;
|
|
5670
5674
|
|
|
5671
5675
|
export declare const SheetLocked: MemoExoticComponent<({ onHomeClick }: {
|
|
5672
|
-
onHomeClick: () => void;
|
|
5676
|
+
onHomeClick: () => void;
|
|
5673
5677
|
}) => JSX.Element>;
|
|
5674
5678
|
|
|
5675
5679
|
export declare const SignUp: ({ circleOnLeapPremiumDays, circleUsername, countryCode, grade: defaultGrade, state, circleOnLeapPremiumEnabled, studentId, isSignUpProcessing, onCreateUser, onUpdateUser, onSignupStepsComplete, isPLAStudent, }: ISignUpProps) => JSX.Element;
|
|
@@ -7089,9 +7093,9 @@ export declare const useChapterPageJourney: () => {
|
|
|
7089
7093
|
|
|
7090
7094
|
export declare const useCircleSounds: () => {
|
|
7091
7095
|
playSwipeSound: () => void;
|
|
7092
|
-
play: (key: CircleSoundKey, immediately?: boolean, loop?: boolean) =>
|
|
7093
|
-
stop: (key: CircleSoundKey, immediately?: boolean) =>
|
|
7094
|
-
playButtonSound: () =>
|
|
7096
|
+
play: (key: CircleSoundKey, immediately?: boolean, loop?: boolean) => HTMLAudioElement | undefined;
|
|
7097
|
+
stop: (key: CircleSoundKey, immediately?: boolean) => void;
|
|
7098
|
+
playButtonSound: () => HTMLAudioElement | undefined;
|
|
7095
7099
|
};
|
|
7096
7100
|
|
|
7097
7101
|
export declare const useClassTimeAlerts: ({ alertLevel, classStartedOn, classDuration, onUpdateClassTimeAlertConfig, }: IUseClassTimeAlerts) => {
|
|
@@ -7202,8 +7206,8 @@ export declare const useGetMilestoneResources: (initialId?: string, initialQuery
|
|
|
7202
7206
|
|
|
7203
7207
|
export declare const useGetPastMilestoneCount: (initialId?: string, initialQuery?: void | undefined) => {
|
|
7204
7208
|
get: (id: string, query: void, meta: TQuery_2) => Promise<void>;
|
|
7205
|
-
resource: ResourceModel<
|
|
7206
|
-
|
|
7209
|
+
resource: ResourceModel<{
|
|
7210
|
+
user_milestones_count: number;
|
|
7207
7211
|
}> | undefined;
|
|
7208
7212
|
data: {
|
|
7209
7213
|
user_milestones_count: number;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cuemath/leap",
|
|
3
|
-
"version": "3.5.26
|
|
3
|
+
"version": "3.5.26",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"files": [
|
|
6
6
|
"dist"
|
|
@@ -89,6 +89,5 @@
|
|
|
89
89
|
"vite-plugin-dts": "4.5.4",
|
|
90
90
|
"vite-plugin-svgr": "3.2.0",
|
|
91
91
|
"vite-tsconfig-paths": "^4.2.2"
|
|
92
|
-
}
|
|
93
|
-
"packageManager": "yarn@4.9.2"
|
|
92
|
+
}
|
|
94
93
|
}
|