@cuemath/leap 3.4.4 → 3.4.5-aa0
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 +1 -1
- package/dist/features/auth/pla-signup/pla-analytics-events.js.map +1 -1
- package/dist/features/auth/pla-signup/signup-options/signup-options.js +46 -37
- package/dist/features/auth/pla-signup/signup-options/signup-options.js.map +1 -1
- package/dist/features/av/av-preview/hooks/use-get-troubleshooting-steps.js.map +1 -1
- package/dist/features/av/av-preview/hooks/use-media-devices.js +61 -127
- package/dist/features/av/av-preview/hooks/use-media-devices.js.map +1 -1
- package/dist/features/cue-canvas/cue-canvas-core.js +39 -40
- package/dist/features/cue-canvas/cue-canvas-core.js.map +1 -1
- package/dist/features/milestone/create/milestone-create-helpers.js +6 -2
- package/dist/features/milestone/create/milestone-create-helpers.js.map +1 -1
- package/dist/index.d.ts +42 -3
- package/dist/index.js +271 -264
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/dist/features/av/av-preview/helper.js +0 -40
- package/dist/features/av/av-preview/helper.js.map +0 -1
- package/dist/features/hooks/use-cancellable-promise.js +0 -22
- package/dist/features/hooks/use-cancellable-promise.js.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
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.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 = "signup_successful", e.STUDENT_SIGNUP_FAILED = "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.TUTOR_CHANGE_REASON_SELECTED = "tutor_change_reason_selected", e.SUBSCRIPTION_CANCELLATION_FAILED = "subscription_cancellation_failed", e.SUBSCRIPTION_CANCELLATION_SUCCESSFUL = "subscription_cancellation_successful", 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 || {});
|
|
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 = "signup_successful", e.STUDENT_SIGNUP_FAILED = "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.TUTOR_CHANGE_REASON_SELECTED = "tutor_change_reason_selected", e.SUBSCRIPTION_CANCELLATION_FAILED = "subscription_cancellation_failed", e.SUBSCRIPTION_CANCELLATION_SUCCESSFUL = "subscription_cancellation_successful", 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
3
|
const n = {
|
|
4
4
|
start_signup_cta_clicked: [_.MIXPANEL],
|
|
5
5
|
ecna_step_viewed: [_.MIXPANEL],
|
|
@@ -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 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 = 'signup_successful',\n STUDENT_SIGNUP_FAILED = '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 TUTOR_CHANGE_REASON_SELECTED = 'tutor_change_reason_selected',\n SUBSCRIPTION_CANCELLATION_FAILED = 'subscription_cancellation_failed',\n SUBSCRIPTION_CANCELLATION_SUCCESSFUL = 'subscription_cancellation_successful',\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.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};\n"],"names":["PLA_ANALYTICS_EVENTS","PLA_ANALYTICS_WHITELIST_EVENTS","PLUGINS"],"mappings":";AAEY,IAAAA,sBAAAA,OACVA,EAAA,2BAA2B,4BAC3BA,EAAA,mBAAmB,oBACnBA,EAAA,+BAA+B,gCAC/BA,EAAA,4BAA4B,6BAC5BA,EAAA,2BAA2B,4BAC3BA,EAAA,uBAAuB,wBACvBA,EAAA,4BAA4B,qBAC5BA,EAAA,wBAAwB,iBACxBA,EAAA,qBAAqB,sBACrBA,EAAA,sBAAsB,uBACtBA,EAAA,oBAAoB,qBACpBA,EAAA,cAAc,eACdA,EAAA,qBAAqB,sBACrBA,EAAA,qBAAqB,sBACrBA,EAAA,+BAA+B,gCAC/BA,EAAA,mCAAmC,oCACnCA,EAAA,uCAAuC,wCACvCA,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,
|
|
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 = 'signup_successful',\n STUDENT_SIGNUP_FAILED = '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 TUTOR_CHANGE_REASON_SELECTED = 'tutor_change_reason_selected',\n SUBSCRIPTION_CANCELLATION_FAILED = 'subscription_cancellation_failed',\n SUBSCRIPTION_CANCELLATION_SUCCESSFUL = 'subscription_cancellation_successful',\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.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};\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,qBAC5BA,EAAA,wBAAwB,iBACxBA,EAAA,qBAAqB,sBACrBA,EAAA,sBAAsB,uBACtBA,EAAA,oBAAoB,qBACpBA,EAAA,cAAc,eACdA,EAAA,qBAAqB,sBACrBA,EAAA,qBAAqB,sBACrBA,EAAA,+BAA+B,gCAC/BA,EAAA,mCAAmC,oCACnCA,EAAA,uCAAuC,wCACvCA,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,uCA1B5BA,IAAAA,KAAA,CAAA,CAAA;AA6BL,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,mBAAiD,CAACA,EAAQ,QAAQ;AAAA,EAClE,eAA6C,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,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;AACtE;"}
|
|
@@ -1,29 +1,29 @@
|
|
|
1
|
-
import { jsxs as
|
|
2
|
-
import { memo as
|
|
3
|
-
import { useTheme as
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
import
|
|
1
|
+
import { jsxs as l, jsx as e } from "react/jsx-runtime";
|
|
2
|
+
import { memo as C } from "react";
|
|
3
|
+
import { useTheme as b } from "styled-components";
|
|
4
|
+
import f from "../../../../assets/line-icons/icons/apple-icon-white.js";
|
|
5
|
+
import g from "../../../../assets/line-icons/icons/google-icon.js";
|
|
6
|
+
import r from "../../../ui/buttons/button/button.js";
|
|
7
7
|
import u from "../../../ui/buttons/text-button/text-button.js";
|
|
8
|
-
import
|
|
9
|
-
import
|
|
10
|
-
import
|
|
11
|
-
import { EDeviceType as
|
|
12
|
-
import { PLA_ANALYTICS_EVENTS as
|
|
13
|
-
const
|
|
8
|
+
import t from "../../../ui/layout/flex-view.js";
|
|
9
|
+
import c from "../../../ui/separator/separator.js";
|
|
10
|
+
import p from "../../../ui/text/text.js";
|
|
11
|
+
import { EDeviceType as L } from "../../../ui/theme/constants.js";
|
|
12
|
+
import { PLA_ANALYTICS_EVENTS as i } from "../pla-analytics-events.js";
|
|
13
|
+
const _ = ({
|
|
14
14
|
onEmailSignup: m,
|
|
15
15
|
onAppleSignup: d,
|
|
16
16
|
onGoogleSignup: h,
|
|
17
|
-
loadingProvider:
|
|
18
|
-
onGoToLogin:
|
|
19
|
-
title:
|
|
17
|
+
loadingProvider: a,
|
|
18
|
+
onGoToLogin: T,
|
|
19
|
+
title: A
|
|
20
20
|
}) => {
|
|
21
|
-
const { device:
|
|
22
|
-
return /* @__PURE__ */
|
|
23
|
-
/* @__PURE__ */ e(
|
|
24
|
-
/* @__PURE__ */ e(
|
|
25
|
-
/* @__PURE__ */
|
|
26
|
-
|
|
21
|
+
const { device: I } = b(), o = I <= L.TABLET, n = a === "google", s = a === "apple";
|
|
22
|
+
return /* @__PURE__ */ l(t, { $alignItems: "flex-start", children: [
|
|
23
|
+
/* @__PURE__ */ e(p, { $renderAs: "ah3-bold", $renderOnMobileAs: "ah4-bold", $color: "WHITE", $whiteSpace: "pre-line", children: A }),
|
|
24
|
+
/* @__PURE__ */ e(c, { heightX: o ? 1.5 : 2.5 }),
|
|
25
|
+
/* @__PURE__ */ l(
|
|
26
|
+
t,
|
|
27
27
|
{
|
|
28
28
|
$flexGapX: 1,
|
|
29
29
|
$flex: 1,
|
|
@@ -32,59 +32,68 @@ const S = ({
|
|
|
32
32
|
$width: "100%",
|
|
33
33
|
children: [
|
|
34
34
|
/* @__PURE__ */ e(
|
|
35
|
-
|
|
35
|
+
r,
|
|
36
36
|
{
|
|
37
37
|
renderAs: "black-dark",
|
|
38
|
-
Icon:
|
|
38
|
+
Icon: g,
|
|
39
39
|
width: o ? "100%" : 320,
|
|
40
40
|
label: "Signup with Google",
|
|
41
41
|
onClick: h,
|
|
42
42
|
size: "small",
|
|
43
|
-
busy:
|
|
44
|
-
disabled:
|
|
45
|
-
analyticsLabel:
|
|
43
|
+
busy: n,
|
|
44
|
+
disabled: n,
|
|
45
|
+
analyticsLabel: i.START_SIGNUP_CTA_CLICKED,
|
|
46
46
|
analyticsProps: { provider: "google" }
|
|
47
47
|
}
|
|
48
48
|
),
|
|
49
49
|
/* @__PURE__ */ e(
|
|
50
|
-
|
|
50
|
+
r,
|
|
51
51
|
{
|
|
52
52
|
renderAs: "black-dark",
|
|
53
53
|
size: "small",
|
|
54
54
|
width: o ? "100%" : 320,
|
|
55
|
-
Icon:
|
|
55
|
+
Icon: f,
|
|
56
56
|
label: "Signup with Apple",
|
|
57
57
|
onClick: d,
|
|
58
58
|
busy: s,
|
|
59
59
|
disabled: s,
|
|
60
|
-
analyticsLabel:
|
|
60
|
+
analyticsLabel: i.START_SIGNUP_CTA_CLICKED,
|
|
61
61
|
analyticsProps: { provider: "apple" }
|
|
62
62
|
}
|
|
63
63
|
),
|
|
64
64
|
/* @__PURE__ */ e(
|
|
65
|
-
|
|
65
|
+
r,
|
|
66
66
|
{
|
|
67
67
|
renderAs: "black-dark",
|
|
68
68
|
size: "small",
|
|
69
69
|
width: o ? "100%" : 320,
|
|
70
70
|
label: "Continue with Email",
|
|
71
71
|
onClick: m,
|
|
72
|
-
analyticsLabel:
|
|
72
|
+
analyticsLabel: i.START_SIGNUP_CTA_CLICKED,
|
|
73
73
|
analyticsProps: { provider: "email" }
|
|
74
74
|
}
|
|
75
75
|
)
|
|
76
76
|
]
|
|
77
77
|
}
|
|
78
78
|
),
|
|
79
|
-
/* @__PURE__ */ e(
|
|
80
|
-
/* @__PURE__ */
|
|
81
|
-
/* @__PURE__ */ e(
|
|
79
|
+
/* @__PURE__ */ e(c, { heightX: 1.5 }),
|
|
80
|
+
/* @__PURE__ */ l(t, { $flexDirection: "row", $alignItems: "center", children: [
|
|
81
|
+
/* @__PURE__ */ e(p, { $renderAs: "ub3", $color: "WHITE", children: "Already have an account?" }),
|
|
82
82
|
" ",
|
|
83
|
-
/* @__PURE__ */ e(
|
|
83
|
+
/* @__PURE__ */ e(
|
|
84
|
+
u,
|
|
85
|
+
{
|
|
86
|
+
analyticsLabel: i.SIGNUP_TO_LOGIN_CTA_CLICKED,
|
|
87
|
+
size: "small",
|
|
88
|
+
label: "Log In",
|
|
89
|
+
color: "WHITE",
|
|
90
|
+
onClick: T
|
|
91
|
+
}
|
|
92
|
+
)
|
|
84
93
|
] })
|
|
85
94
|
] });
|
|
86
|
-
},
|
|
95
|
+
}, O = C(_);
|
|
87
96
|
export {
|
|
88
|
-
|
|
97
|
+
O as default
|
|
89
98
|
};
|
|
90
99
|
//# sourceMappingURL=signup-options.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signup-options.js","sources":["../../../../../src/features/auth/pla-signup/signup-options/signup-options.tsx"],"sourcesContent":["import { memo, type FC } from 'react';\nimport { useTheme } from 'styled-components';\n\nimport AppleIcon from '../../../../assets/line-icons/icons/apple-icon-white';\nimport GoogleIcon from '../../../../assets/line-icons/icons/google-icon';\nimport Button from '../../../ui/buttons/button/button';\nimport TextButton from '../../../ui/buttons/text-button/text-button';\nimport FlexView from '../../../ui/layout/flex-view';\nimport Separator from '../../../ui/separator/separator';\nimport Text from '../../../ui/text/text';\nimport { EDeviceType } from '../../../ui/theme/constants';\nimport { PLA_ANALYTICS_EVENTS } from '../pla-analytics-events';\nimport type { ISignupOptionsProps } from './signup-options-types';\n\nconst SignupOptions: FC<ISignupOptionsProps> = ({\n onEmailSignup,\n onAppleSignup,\n onGoogleSignup,\n loadingProvider,\n onGoToLogin,\n title,\n}) => {\n const { device } = useTheme();\n const isCompact = device <= EDeviceType.TABLET;\n const isLoadingGoogle = loadingProvider === 'google';\n const isLoadingApple = loadingProvider === 'apple';\n\n return (\n <FlexView $alignItems=\"flex-start\">\n <Text $renderAs=\"ah3-bold\" $renderOnMobileAs=\"ah4-bold\" $color=\"WHITE\" $whiteSpace=\"pre-line\">\n {title}\n </Text>\n <Separator heightX={isCompact ? 1.5 : 2.5} />\n <FlexView\n $flexGapX={1}\n $flex={1}\n $justifyContent=\"center\"\n $alignItems=\"flex-start\"\n $width=\"100%\"\n >\n <Button\n renderAs=\"black-dark\"\n Icon={GoogleIcon}\n width={isCompact ? '100%' : 320}\n label=\"Signup with Google\"\n onClick={onGoogleSignup}\n size=\"small\"\n busy={isLoadingGoogle}\n disabled={isLoadingGoogle}\n analyticsLabel={PLA_ANALYTICS_EVENTS.START_SIGNUP_CTA_CLICKED}\n analyticsProps={{ provider: 'google' }}\n />\n <Button\n renderAs=\"black-dark\"\n size=\"small\"\n width={isCompact ? '100%' : 320}\n Icon={AppleIcon}\n label=\"Signup with Apple\"\n onClick={onAppleSignup}\n busy={isLoadingApple}\n disabled={isLoadingApple}\n analyticsLabel={PLA_ANALYTICS_EVENTS.START_SIGNUP_CTA_CLICKED}\n analyticsProps={{ provider: 'apple' }}\n />\n <Button\n renderAs=\"black-dark\"\n size=\"small\"\n width={isCompact ? '100%' : 320}\n label=\"Continue with Email\"\n onClick={onEmailSignup}\n analyticsLabel={PLA_ANALYTICS_EVENTS.START_SIGNUP_CTA_CLICKED}\n analyticsProps={{ provider: 'email' }}\n />\n </FlexView>\n <Separator heightX={1.5} />\n <FlexView $flexDirection=\"row\" $alignItems=\"center\">\n <Text $renderAs=\"ub3\" $color=\"WHITE\">\n Already have an account?\n </Text>\n \n <TextButton
|
|
1
|
+
{"version":3,"file":"signup-options.js","sources":["../../../../../src/features/auth/pla-signup/signup-options/signup-options.tsx"],"sourcesContent":["import { memo, type FC } from 'react';\nimport { useTheme } from 'styled-components';\n\nimport AppleIcon from '../../../../assets/line-icons/icons/apple-icon-white';\nimport GoogleIcon from '../../../../assets/line-icons/icons/google-icon';\nimport Button from '../../../ui/buttons/button/button';\nimport TextButton from '../../../ui/buttons/text-button/text-button';\nimport FlexView from '../../../ui/layout/flex-view';\nimport Separator from '../../../ui/separator/separator';\nimport Text from '../../../ui/text/text';\nimport { EDeviceType } from '../../../ui/theme/constants';\nimport { PLA_ANALYTICS_EVENTS } from '../pla-analytics-events';\nimport type { ISignupOptionsProps } from './signup-options-types';\n\nconst SignupOptions: FC<ISignupOptionsProps> = ({\n onEmailSignup,\n onAppleSignup,\n onGoogleSignup,\n loadingProvider,\n onGoToLogin,\n title,\n}) => {\n const { device } = useTheme();\n const isCompact = device <= EDeviceType.TABLET;\n const isLoadingGoogle = loadingProvider === 'google';\n const isLoadingApple = loadingProvider === 'apple';\n\n return (\n <FlexView $alignItems=\"flex-start\">\n <Text $renderAs=\"ah3-bold\" $renderOnMobileAs=\"ah4-bold\" $color=\"WHITE\" $whiteSpace=\"pre-line\">\n {title}\n </Text>\n <Separator heightX={isCompact ? 1.5 : 2.5} />\n <FlexView\n $flexGapX={1}\n $flex={1}\n $justifyContent=\"center\"\n $alignItems=\"flex-start\"\n $width=\"100%\"\n >\n <Button\n renderAs=\"black-dark\"\n Icon={GoogleIcon}\n width={isCompact ? '100%' : 320}\n label=\"Signup with Google\"\n onClick={onGoogleSignup}\n size=\"small\"\n busy={isLoadingGoogle}\n disabled={isLoadingGoogle}\n analyticsLabel={PLA_ANALYTICS_EVENTS.START_SIGNUP_CTA_CLICKED}\n analyticsProps={{ provider: 'google' }}\n />\n <Button\n renderAs=\"black-dark\"\n size=\"small\"\n width={isCompact ? '100%' : 320}\n Icon={AppleIcon}\n label=\"Signup with Apple\"\n onClick={onAppleSignup}\n busy={isLoadingApple}\n disabled={isLoadingApple}\n analyticsLabel={PLA_ANALYTICS_EVENTS.START_SIGNUP_CTA_CLICKED}\n analyticsProps={{ provider: 'apple' }}\n />\n <Button\n renderAs=\"black-dark\"\n size=\"small\"\n width={isCompact ? '100%' : 320}\n label=\"Continue with Email\"\n onClick={onEmailSignup}\n analyticsLabel={PLA_ANALYTICS_EVENTS.START_SIGNUP_CTA_CLICKED}\n analyticsProps={{ provider: 'email' }}\n />\n </FlexView>\n <Separator heightX={1.5} />\n <FlexView $flexDirection=\"row\" $alignItems=\"center\">\n <Text $renderAs=\"ub3\" $color=\"WHITE\">\n Already have an account?\n </Text>\n \n <TextButton\n analyticsLabel={PLA_ANALYTICS_EVENTS.SIGNUP_TO_LOGIN_CTA_CLICKED}\n size=\"small\"\n label=\"Log In\"\n color=\"WHITE\"\n onClick={onGoToLogin}\n />\n </FlexView>\n </FlexView>\n );\n};\n\nexport default memo(SignupOptions);\n"],"names":["SignupOptions","onEmailSignup","onAppleSignup","onGoogleSignup","loadingProvider","onGoToLogin","title","device","useTheme","isCompact","EDeviceType","isLoadingGoogle","isLoadingApple","jsxs","FlexView","jsx","Text","Separator","Button","GoogleIcon","PLA_ANALYTICS_EVENTS","AppleIcon","TextButton","signupOptions","memo"],"mappings":";;;;;;;;;;;;AAcA,MAAMA,IAAyC,CAAC;AAAA,EAC9C,eAAAC;AAAA,EACA,eAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,aAAAC;AAAA,EACA,OAAAC;AACF,MAAM;AACE,QAAA,EAAE,QAAAC,MAAWC,KACbC,IAAYF,KAAUG,EAAY,QAClCC,IAAkBP,MAAoB,UACtCQ,IAAiBR,MAAoB;AAGzC,SAAA,gBAAAS,EAACC,GAAS,EAAA,aAAY,cACpB,UAAA;AAAA,IAAC,gBAAAC,EAAAC,GAAA,EAAK,WAAU,YAAW,mBAAkB,YAAW,QAAO,SAAQ,aAAY,YAChF,UACHV,EAAA,CAAA;AAAA,IACC,gBAAAS,EAAAE,GAAA,EAAU,SAASR,IAAY,MAAM,KAAK;AAAA,IAC3C,gBAAAI;AAAA,MAACC;AAAA,MAAA;AAAA,QACC,WAAW;AAAA,QACX,OAAO;AAAA,QACP,iBAAgB;AAAA,QAChB,aAAY;AAAA,QACZ,QAAO;AAAA,QAEP,UAAA;AAAA,UAAA,gBAAAC;AAAA,YAACG;AAAA,YAAA;AAAA,cACC,UAAS;AAAA,cACT,MAAMC;AAAA,cACN,OAAOV,IAAY,SAAS;AAAA,cAC5B,OAAM;AAAA,cACN,SAASN;AAAA,cACT,MAAK;AAAA,cACL,MAAMQ;AAAA,cACN,UAAUA;AAAA,cACV,gBAAgBS,EAAqB;AAAA,cACrC,gBAAgB,EAAE,UAAU,SAAS;AAAA,YAAA;AAAA,UACvC;AAAA,UACA,gBAAAL;AAAA,YAACG;AAAA,YAAA;AAAA,cACC,UAAS;AAAA,cACT,MAAK;AAAA,cACL,OAAOT,IAAY,SAAS;AAAA,cAC5B,MAAMY;AAAAA,cACN,OAAM;AAAA,cACN,SAASnB;AAAA,cACT,MAAMU;AAAA,cACN,UAAUA;AAAA,cACV,gBAAgBQ,EAAqB;AAAA,cACrC,gBAAgB,EAAE,UAAU,QAAQ;AAAA,YAAA;AAAA,UACtC;AAAA,UACA,gBAAAL;AAAA,YAACG;AAAA,YAAA;AAAA,cACC,UAAS;AAAA,cACT,MAAK;AAAA,cACL,OAAOT,IAAY,SAAS;AAAA,cAC5B,OAAM;AAAA,cACN,SAASR;AAAA,cACT,gBAAgBmB,EAAqB;AAAA,cACrC,gBAAgB,EAAE,UAAU,QAAQ;AAAA,YAAA;AAAA,UACtC;AAAA,QAAA;AAAA,MAAA;AAAA,IACF;AAAA,IACA,gBAAAL,EAACE,GAAU,EAAA,SAAS,IAAK,CAAA;AAAA,IACxB,gBAAAJ,EAAAC,GAAA,EAAS,gBAAe,OAAM,aAAY,UACzC,UAAA;AAAA,MAAA,gBAAAC,EAACC,GAAK,EAAA,WAAU,OAAM,QAAO,SAAQ,UAErC,4BAAA;AAAA,MAAO;AAAA,MAEP,gBAAAD;AAAA,QAACO;AAAA,QAAA;AAAA,UACC,gBAAgBF,EAAqB;AAAA,UACrC,MAAK;AAAA,UACL,OAAM;AAAA,UACN,OAAM;AAAA,UACN,SAASf;AAAA,QAAA;AAAA,MACX;AAAA,IAAA,GACF;AAAA,EACF,EAAA,CAAA;AAEJ,GAEekB,IAAAC,EAAKxB,CAAa;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-get-troubleshooting-steps.js","sources":["../../../../../src/features/av/av-preview/hooks/use-get-troubleshooting-steps.ts"],"sourcesContent":["import type
|
|
1
|
+
{"version":3,"file":"use-get-troubleshooting-steps.js","sources":["../../../../../src/features/av/av-preview/hooks/use-get-troubleshooting-steps.ts"],"sourcesContent":["import { type TDeviceError } from '@cuemath/av/dist/types';\n\ninterface IUseGetTroubleshootingInfo {\n (\n audioDeviceError?: TDeviceError,\n videoDeviceError?: TDeviceError,\n ):\n | {\n heading: string;\n steps: string[];\n imageElement?: React.ReactNode;\n }\n | undefined;\n}\n\n// window.location='x-apple.systempreferences:com.apple.preference.security?Privacy_Camera'\n// window.location='x-apple.systempreferences:com.apple.preference.security?Privacy_Microphone'\n\nconst useGetTroubleshootingInfo: IUseGetTroubleshootingInfo = (\n audioDeviceError,\n videoDeviceError,\n) => {\n switch (videoDeviceError) {\n case 'permissionDeniedBySystem':\n return {\n heading: 'Please allow your browser to access your camera from your system setting.',\n steps: [\n 'Open your system settings.',\n 'Navigate to Privacy & Security.',\n 'Find Camera permissions and ensure the browser is allowed access.',\n ],\n };\n case 'permissionDenied':\n return {\n heading: 'Please allow your browser to access your camera.',\n steps: [\n 'Click on the lock icon in the address bar.',\n 'Select \"Site settings\".',\n 'Find Camera permissions and ensure it is set to \"Allow\".',\n ],\n };\n case 'deviceNotFound':\n return {\n heading: 'No camera found',\n steps: [\n 'Ensure your camera is connected and turned on.',\n 'If you are using an external camera, check the connection.',\n 'Try refreshing the page or restarting your browser.',\n ],\n };\n case 'thirdPartyApps':\n return {\n heading: 'Camera is being used by another application',\n steps: [\n 'Close any other applications that might be using the camera.',\n 'Try refreshing the page or restarting your browser.',\n ],\n };\n case 'other':\n return {\n heading: 'An unknown error occurred with the camera',\n steps: [\n 'Try refreshing the page or restarting your browser.',\n 'Check if your camera is working in other applications.',\n 'If the issue persists, try using a different browser or device.',\n ],\n };\n }\n\n switch (audioDeviceError) {\n case 'permissionDeniedBySystem':\n return {\n heading: 'Please allow your browser to access your microphone from your system setting.',\n steps: [\n 'Open your system settings.',\n 'Navigate to Privacy & Security.',\n 'Find Microphone permissions and ensure the browser is allowed access.',\n ],\n };\n case 'permissionDenied':\n return {\n heading: 'Please allow your browser to access your microphone.',\n steps: [\n 'Click on the lock icon in the address bar.',\n 'Select \"Site settings\".',\n 'Find Microphone permissions and ensure it is set to \"Allow\".',\n ],\n };\n case 'deviceNotFound':\n return {\n heading: 'No microphone found',\n steps: [\n 'Ensure your microphone is connected and turned on.',\n 'If you are using an external microphone, check the connection.',\n 'Try refreshing the page or restarting your browser.',\n ],\n };\n case 'thirdPartyApps':\n return {\n heading: 'Microphone is being used by another application',\n steps: [\n 'Close any other applications that might be using the microphone.',\n 'Try refreshing the page or restarting your browser.',\n ],\n };\n case 'other':\n return {\n heading: 'An unknown error occurred with the microphone',\n steps: ['Try refreshing the page or restarting your browser.'],\n };\n }\n};\n\nexport default useGetTroubleshootingInfo;\n"],"names":["useGetTroubleshootingInfo","audioDeviceError","videoDeviceError"],"mappings":"AAkBM,MAAAA,IAAwD,CAC5DC,GACAC,MACG;AACH,UAAQA,GAAkB;AAAA,IACxB,KAAK;AACI,aAAA;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,UACL;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MAAA;AAAA,IAEJ,KAAK;AACI,aAAA;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,UACL;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MAAA;AAAA,IAEJ,KAAK;AACI,aAAA;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,UACL;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MAAA;AAAA,IAEJ,KAAK;AACI,aAAA;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,UACL;AAAA,UACA;AAAA,QACF;AAAA,MAAA;AAAA,IAEJ,KAAK;AACI,aAAA;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,UACL;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MAAA;AAAA,EAEN;AAEA,UAAQD,GAAkB;AAAA,IACxB,KAAK;AACI,aAAA;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,UACL;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MAAA;AAAA,IAEJ,KAAK;AACI,aAAA;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,UACL;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MAAA;AAAA,IAEJ,KAAK;AACI,aAAA;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,UACL;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MAAA;AAAA,IAEJ,KAAK;AACI,aAAA;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,UACL;AAAA,UACA;AAAA,QACF;AAAA,MAAA;AAAA,IAEJ,KAAK;AACI,aAAA;AAAA,QACL,SAAS;AAAA,QACT,OAAO,CAAC,qDAAqD;AAAA,MAAA;AAAA,EAEnE;AACF;"}
|
|
@@ -1,144 +1,78 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
const
|
|
5
|
-
const [l, f] = v("PROCESSING"), [w, m] = v("PROCESSING"), [I, R] = v(), [Y, g] = v(), [M, T] = v(), a = b(void 0), [u, h] = v({
|
|
1
|
+
import { useMediaManager as w } from "@cuemath/av";
|
|
2
|
+
import { useState as a, useCallback as n, useEffect as v } from "react";
|
|
3
|
+
const E = (c, o) => {
|
|
4
|
+
const [u, A] = a(), [d, _] = a(), [g, D] = a(), [S, m] = a(), [h, l] = a({
|
|
6
5
|
audio: [],
|
|
7
6
|
video: [],
|
|
8
7
|
audioOutput: []
|
|
9
|
-
}), [
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
8
|
+
}), [M, O] = a(), i = w(), p = n(
|
|
9
|
+
(e, t) => {
|
|
10
|
+
o("av_preview_error", { error: e }), t === "microphone" ? A(e) : t === "camera" && _(e);
|
|
11
|
+
},
|
|
12
|
+
[o]
|
|
13
|
+
), f = n(() => {
|
|
14
|
+
const { audioDeviceId: e, videoDeviceId: t } = i.getSelectedDeviceDetails();
|
|
15
|
+
D(e), m(t);
|
|
16
|
+
}, [i]), r = n(
|
|
17
|
+
(e) => {
|
|
18
|
+
l(e || i.getAvailableDevices()), f();
|
|
19
|
+
},
|
|
20
|
+
[f, i]
|
|
21
|
+
);
|
|
22
|
+
v(() => (i.addDevicesChangeListener(r), () => {
|
|
23
|
+
i.addDevicesChangeListener(void 0);
|
|
24
|
+
}), [i, r]), v(() => {
|
|
25
|
+
!u && !d && c.current;
|
|
26
|
+
}), v(() => {
|
|
27
|
+
async function e() {
|
|
28
|
+
if (!u || !d) {
|
|
29
|
+
const t = await i.initializeUserMedia({
|
|
30
|
+
onError: p,
|
|
31
|
+
constraints: { audio: !0, video: !0 }
|
|
32
|
+
});
|
|
33
|
+
r(), c.current && t && (c.current.srcObject = t);
|
|
23
34
|
}
|
|
35
|
+
}
|
|
36
|
+
e();
|
|
37
|
+
}, [
|
|
38
|
+
u,
|
|
39
|
+
i,
|
|
40
|
+
p,
|
|
41
|
+
r,
|
|
42
|
+
d,
|
|
43
|
+
c
|
|
44
|
+
]);
|
|
45
|
+
const b = n(
|
|
46
|
+
async (e, t) => {
|
|
47
|
+
!i || !e || (i.changeSelectedDevice(e, t), t === "video" ? m(e) : t === "audio" && D(e));
|
|
24
48
|
},
|
|
25
|
-
[
|
|
26
|
-
),
|
|
49
|
+
[i]
|
|
50
|
+
), k = n(
|
|
27
51
|
(e) => {
|
|
28
|
-
|
|
29
|
-
const
|
|
30
|
-
|
|
31
|
-
|
|
52
|
+
i.setAudioOutputDevice(e), O(e);
|
|
53
|
+
const t = c.current;
|
|
54
|
+
t && "setSinkId" in t && t.setSinkId(e).catch((s) => {
|
|
55
|
+
o("av_preview_set_audio_output_device_error", {
|
|
32
56
|
deviceId: e,
|
|
33
|
-
error_name:
|
|
34
|
-
error_message:
|
|
57
|
+
error_name: s == null ? void 0 : s.name,
|
|
58
|
+
error_message: s == null ? void 0 : s.message
|
|
35
59
|
});
|
|
36
60
|
});
|
|
37
61
|
},
|
|
38
|
-
[
|
|
62
|
+
[c, i, o]
|
|
39
63
|
);
|
|
40
|
-
return
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
);
|
|
47
|
-
a.current = i, f("READY"), m("READY");
|
|
48
|
-
const n = C(i, "audio"), t = C(i, "video");
|
|
49
|
-
n && (n.addEventListener("ended", () => {
|
|
50
|
-
const c = n.getSettings().deviceId;
|
|
51
|
-
c && s(c, "audio");
|
|
52
|
-
}), O(n.getSettings().deviceId)), t && (t.addEventListener("ended", () => {
|
|
53
|
-
const c = t.getSettings().deviceId;
|
|
54
|
-
c && s(c, "video");
|
|
55
|
-
}), A(t.getSettings().deviceId));
|
|
56
|
-
try {
|
|
57
|
-
const c = await d(p());
|
|
58
|
-
h(c);
|
|
59
|
-
} catch {
|
|
60
|
-
r("av_preview_get_connected_devices_error");
|
|
61
|
-
}
|
|
62
|
-
} catch (i) {
|
|
63
|
-
const n = i instanceof Error ? i.message : "other";
|
|
64
|
-
try {
|
|
65
|
-
const t = await d(p());
|
|
66
|
-
t.audio.length + t.video.length === 0 ? (f("ERROR"), m("ERROR"), R(n), g(n)) : t.video.length === 0 ? (m("ERROR"), g(n)) : t.audio.length === 0 && (f("ERROR"), R(n)), t.audio.length > 0 && s(void 0, "audio"), t.video.length > 0 && s(void 0, "video"), h(t);
|
|
67
|
-
} catch {
|
|
68
|
-
r("av_preview_get_connected_devices_error");
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
try {
|
|
72
|
-
const i = await navigator.permissions.query({
|
|
73
|
-
name: "camera"
|
|
74
|
-
}), n = await navigator.permissions.query({
|
|
75
|
-
name: "microphone"
|
|
76
|
-
}), t = async () => {
|
|
77
|
-
try {
|
|
78
|
-
const E = await d(p());
|
|
79
|
-
h(E);
|
|
80
|
-
} catch {
|
|
81
|
-
r("av_preview_get_connected_devices_error");
|
|
82
|
-
}
|
|
83
|
-
i.state === "granted" && s(void 0, "video");
|
|
84
|
-
}, c = async () => {
|
|
85
|
-
try {
|
|
86
|
-
const E = await d(p());
|
|
87
|
-
h(E);
|
|
88
|
-
} catch {
|
|
89
|
-
r("av_preview_get_connected_devices_error");
|
|
90
|
-
}
|
|
91
|
-
n.state === "granted" && s(void 0, "audio");
|
|
92
|
-
};
|
|
93
|
-
i.addEventListener("change", t), n.addEventListener("change", c), e = () => {
|
|
94
|
-
i.removeEventListener("change", t), n.removeEventListener("change", c);
|
|
95
|
-
};
|
|
96
|
-
} catch {
|
|
97
|
-
r("av_preview_permissions_query_error");
|
|
98
|
-
}
|
|
99
|
-
})(), () => {
|
|
100
|
-
e && e();
|
|
101
|
-
};
|
|
102
|
-
}, [d, s, r]), D(() => {
|
|
103
|
-
const e = async () => {
|
|
104
|
-
try {
|
|
105
|
-
const o = await p();
|
|
106
|
-
h(o);
|
|
107
|
-
} catch {
|
|
108
|
-
r("av_preview_get_connected_devices_error");
|
|
109
|
-
}
|
|
110
|
-
};
|
|
111
|
-
return navigator.mediaDevices.addEventListener("devicechange", e), () => {
|
|
112
|
-
navigator.mediaDevices.removeEventListener("devicechange", e);
|
|
113
|
-
};
|
|
114
|
-
}, [r]), D(() => {
|
|
115
|
-
if (l === "READY" && S && !u.audio.find((e) => e.id === S)) {
|
|
116
|
-
const e = u.audio[0];
|
|
117
|
-
e && s(e.id, "audio");
|
|
118
|
-
}
|
|
119
|
-
}, [l, s, u.audio, S]), D(() => {
|
|
120
|
-
if (w === "READY" && y && !u.video.find((e) => e.id === y)) {
|
|
121
|
-
const e = u.video[0];
|
|
122
|
-
e && s(e.id, "video");
|
|
123
|
-
}
|
|
124
|
-
}, [w, s, u.video, y]), D(() => {
|
|
125
|
-
a.current && _.current && (_.current.srcObject = a.current);
|
|
126
|
-
}, [a.current, _]), D(() => () => {
|
|
127
|
-
a.current && k(a.current);
|
|
128
|
-
}, []), {
|
|
129
|
-
audioDeviceStatus: l,
|
|
130
|
-
audioDeviceError: I,
|
|
131
|
-
videoDeviceStatus: w,
|
|
132
|
-
videoDeviceError: Y,
|
|
133
|
-
devices: u,
|
|
134
|
-
selectedVideoDevice: y,
|
|
135
|
-
selectedAudioDevice: S,
|
|
64
|
+
return {
|
|
65
|
+
audioDeviceError: u,
|
|
66
|
+
videoDeviceError: d,
|
|
67
|
+
devices: h,
|
|
68
|
+
selectedVideoDevice: S,
|
|
69
|
+
selectedAudioDevice: g,
|
|
136
70
|
selectedAudioOutputDevice: M,
|
|
137
|
-
changeDevice:
|
|
138
|
-
changeAudioOutputDevice:
|
|
71
|
+
changeDevice: b,
|
|
72
|
+
changeAudioOutputDevice: k
|
|
139
73
|
};
|
|
140
74
|
};
|
|
141
75
|
export {
|
|
142
|
-
|
|
76
|
+
E as default
|
|
143
77
|
};
|
|
144
78
|
//# sourceMappingURL=use-media-devices.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-media-devices.js","sources":["../../../../../src/features/av/av-preview/hooks/use-media-devices.ts"],"sourcesContent":["import type { RefObject } from 'react';\nimport { useCallback, useEffect, useRef, useState } from 'react';\n\nimport useCancellablePromise from '../../../hooks/use-cancellable-promise';\nimport type {\n IDevicesMap,\n ILogger,\n TDeviceError,\n TDeviceStatus,\n TMediaKind,\n} from '../av-preview-types';\nimport { getConnectedDevices, getTrack, openMediaDevices, removeTracksFromStream } from '../helper';\n\ninterface IChangeDevice {\n (deviceId: string | undefined, kind: TMediaKind): void;\n}\n\ninterface IUseMediaDevices {\n (\n videoElRef: RefObject<HTMLVideoElement | null>,\n logger: ILogger,\n ): {\n audioDeviceStatus: TDeviceStatus;\n audioDeviceError?: TDeviceError;\n videoDeviceStatus: TDeviceStatus;\n videoDeviceError?: TDeviceError;\n devices: IDevicesMap;\n selectedAudioDevice?: string;\n selectedVideoDevice?: string;\n selectedAudioOutputDevice?: string;\n changeDevice: IChangeDevice;\n changeAudioOutputDevice: (deviceId: string) => void;\n };\n}\n\nconst useMediaDevices: IUseMediaDevices = (videoElRef, logger) => {\n const [audioDeviceStatus, setAudioDeviceStatus] = useState<TDeviceStatus>('PROCESSING');\n const [videoDeviceStatus, setVideoDeviceStatus] = useState<TDeviceStatus>('PROCESSING');\n const [audioDeviceError, setAudioDeviceError] = useState<TDeviceError>();\n const [videoDeviceError, setVideoDeviceError] = useState<TDeviceError>();\n const [selectedAudioOutputDevice, setSelectedAudioOutputDevice] = useState<string>();\n\n const avStreamRef = useRef<MediaStream>(undefined);\n const [devices, setDevices] = useState<IDevicesMap>({\n audio: [],\n video: [],\n audioOutput: [],\n });\n const [selectedAudioDevice, setAudioDevice] = useState<string>();\n const [selectedVideoDevice, setVideoDevice] = useState<string>();\n const cancellablePromise = useCancellablePromise();\n\n const changeDevice = useCallback<IChangeDevice>(\n async (deviceId, deviceKind) => {\n if (avStreamRef.current) {\n removeTracksFromStream(avStreamRef.current, deviceKind);\n }\n\n const constraints: MediaStreamConstraints =\n deviceKind === 'audio'\n ? { audio: deviceId ? { deviceId } : true }\n : { video: deviceId ? { deviceId } : true };\n\n if (deviceKind === 'audio') {\n setAudioDevice(deviceId);\n setAudioDeviceStatus('PROCESSING');\n setAudioDeviceError(undefined);\n } else if (deviceKind === 'video') {\n setVideoDevice(deviceId);\n setVideoDeviceStatus('PROCESSING');\n setVideoDeviceError(undefined);\n }\n\n try {\n const stream = await cancellablePromise(openMediaDevices(constraints, logger));\n const track = getTrack(stream, deviceKind);\n\n if (track) {\n if (avStreamRef.current) {\n avStreamRef.current?.addTrack(track);\n } else {\n avStreamRef.current = stream;\n }\n\n track.addEventListener('ended', () => {\n if (deviceKind === 'audio') {\n changeDevice(undefined, 'audio');\n } else if (deviceKind === 'video') {\n changeDevice(undefined, 'video');\n }\n });\n\n if (deviceKind === 'audio') {\n setAudioDevice(track.getSettings().deviceId);\n setAudioDeviceStatus('READY');\n } else if (deviceKind === 'video') {\n setVideoDevice(track.getSettings().deviceId);\n setVideoDeviceStatus('READY');\n }\n }\n } catch (error) {\n const errorMessage: TDeviceError =\n error instanceof Error ? (error.message as TDeviceError) : 'other';\n\n if (deviceKind === 'audio') {\n setAudioDeviceStatus('ERROR');\n setAudioDeviceError(errorMessage);\n } else if (deviceKind === 'video') {\n setVideoDeviceStatus('ERROR');\n setVideoDeviceError(errorMessage);\n }\n }\n },\n [cancellablePromise, logger],\n );\n\n const changeAudioOutputDevice = useCallback(\n (deviceId: string) => {\n setSelectedAudioOutputDevice(deviceId);\n const videoEl = videoElRef.current;\n\n if (videoEl && 'setSinkId' in videoEl) {\n videoEl.setSinkId(deviceId).catch(error => {\n logger('av_preview_set_audio_output_device_error', {\n deviceId,\n error_name: error?.name,\n error_message: error?.message,\n });\n });\n }\n },\n [videoElRef, logger],\n );\n\n useEffect(() => {\n let permissionCleanup: (() => void) | undefined;\n const asyncEffect = async () => {\n try {\n const stream = await cancellablePromise(\n openMediaDevices({ video: true, audio: true }, logger),\n );\n\n avStreamRef.current = stream;\n setAudioDeviceStatus('READY');\n setVideoDeviceStatus('READY');\n const audioTrack = getTrack(stream, 'audio');\n const videoTrack = getTrack(stream, 'video');\n\n if (audioTrack) {\n audioTrack.addEventListener('ended', () => {\n const audioDeviceId = audioTrack.getSettings().deviceId;\n\n if (audioDeviceId) {\n changeDevice(audioDeviceId, 'audio');\n }\n });\n setAudioDevice(audioTrack.getSettings().deviceId);\n }\n\n if (videoTrack) {\n videoTrack.addEventListener('ended', () => {\n const videoDeviceId = videoTrack.getSettings().deviceId;\n\n if (videoDeviceId) {\n changeDevice(videoDeviceId, 'video');\n }\n });\n setVideoDevice(videoTrack.getSettings().deviceId);\n }\n\n try {\n const connectedDevices = await cancellablePromise(getConnectedDevices());\n\n setDevices(connectedDevices);\n } catch (error) {\n logger('av_preview_get_connected_devices_error');\n }\n } catch (error) {\n const errorMessage: TDeviceError =\n error instanceof Error ? (error.message as TDeviceError) : 'other';\n\n try {\n const connectedDevices = await cancellablePromise(getConnectedDevices());\n\n // Permission denied for\n if (connectedDevices.audio.length + connectedDevices.video.length === 0) {\n setAudioDeviceStatus('ERROR');\n setVideoDeviceStatus('ERROR');\n setAudioDeviceError(errorMessage);\n setVideoDeviceError(errorMessage);\n } else if (connectedDevices.video.length === 0) {\n setVideoDeviceStatus('ERROR');\n setVideoDeviceError(errorMessage);\n } else if (connectedDevices.audio.length === 0) {\n setAudioDeviceStatus('ERROR');\n setAudioDeviceError(errorMessage);\n }\n\n if (connectedDevices.audio.length > 0) {\n changeDevice(undefined, 'audio');\n }\n\n if (connectedDevices.video.length > 0) {\n changeDevice(undefined, 'video');\n }\n\n setDevices(connectedDevices);\n } catch (err) {\n logger('av_preview_get_connected_devices_error');\n }\n }\n\n try {\n const cameraPermission = await navigator.permissions.query({\n name: 'camera' as PermissionName,\n });\n const microphonePermission = await navigator.permissions.query({\n name: 'microphone' as PermissionName,\n });\n const handleCameraPermissionChange = async () => {\n try {\n const connectedDevices = await cancellablePromise(getConnectedDevices());\n\n setDevices(connectedDevices);\n } catch (error) {\n logger('av_preview_get_connected_devices_error');\n }\n\n if (cameraPermission.state === 'granted') {\n changeDevice(undefined, 'video'); // Reset video device on permission change\n }\n };\n const handleMicrophonePermissionChange = async () => {\n try {\n const connectedDevices = await cancellablePromise(getConnectedDevices());\n\n setDevices(connectedDevices);\n } catch (error) {\n logger('av_preview_get_connected_devices_error');\n }\n\n if (microphonePermission.state === 'granted') {\n changeDevice(undefined, 'audio'); // Reset audio device on permission change\n }\n };\n\n cameraPermission.addEventListener('change', handleCameraPermissionChange);\n microphonePermission.addEventListener('change', handleMicrophonePermissionChange);\n\n permissionCleanup = () => {\n cameraPermission.removeEventListener('change', handleCameraPermissionChange);\n microphonePermission.removeEventListener('change', handleMicrophonePermissionChange);\n };\n } catch (error) {\n logger('av_preview_permissions_query_error');\n }\n };\n\n asyncEffect();\n\n return () => {\n if (permissionCleanup) {\n permissionCleanup();\n }\n };\n }, [cancellablePromise, changeDevice, logger]);\n\n /**\n * Effect to handle media device changes\n * It listens for device changes and updates the list of connected devices.\n */\n useEffect(() => {\n const handleDeviceChange = async () => {\n try {\n const updatedDevices = await getConnectedDevices();\n\n setDevices(updatedDevices);\n } catch (error) {\n logger('av_preview_get_connected_devices_error');\n }\n };\n\n navigator.mediaDevices.addEventListener('devicechange', handleDeviceChange);\n\n return () => {\n navigator.mediaDevices.removeEventListener('devicechange', handleDeviceChange);\n };\n }, [logger]);\n\n /**\n * If the audio device is ready and the selected audio device is not in the list of available devices,\n * switch to the first available audio device.\n */\n useEffect(() => {\n if (\n audioDeviceStatus === 'READY' &&\n selectedAudioDevice &&\n !devices.audio.find(d => d.id === selectedAudioDevice)\n ) {\n const firstAudioDevice = devices.audio[0];\n\n if (firstAudioDevice) {\n changeDevice(firstAudioDevice.id, 'audio');\n }\n }\n }, [audioDeviceStatus, changeDevice, devices.audio, selectedAudioDevice]);\n\n /**\n * If the video device is ready and the selected video device is not in the list of available devices,\n * switch to the first available video device.\n */\n useEffect(() => {\n if (\n videoDeviceStatus === 'READY' &&\n selectedVideoDevice &&\n !devices.video.find(d => d.id === selectedVideoDevice)\n ) {\n const firstVideoDevice = devices.video[0];\n\n if (firstVideoDevice) {\n changeDevice(firstVideoDevice.id, 'video');\n }\n }\n }, [videoDeviceStatus, changeDevice, devices.video, selectedVideoDevice]);\n\n // Set the video element's srcObject to the MediaStream when available\n useEffect(() => {\n if (avStreamRef.current && videoElRef.current) {\n videoElRef.current.srcObject = avStreamRef.current;\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [avStreamRef.current, videoElRef]);\n\n useEffect(() => {\n return () => {\n if (avStreamRef.current) {\n removeTracksFromStream(avStreamRef.current);\n }\n };\n }, []);\n\n return {\n audioDeviceStatus,\n audioDeviceError,\n videoDeviceStatus,\n videoDeviceError,\n devices,\n selectedVideoDevice,\n selectedAudioDevice,\n selectedAudioOutputDevice,\n changeDevice,\n changeAudioOutputDevice,\n };\n};\n\nexport default useMediaDevices;\n"],"names":["useMediaDevices","videoElRef","logger","audioDeviceStatus","setAudioDeviceStatus","useState","videoDeviceStatus","setVideoDeviceStatus","audioDeviceError","setAudioDeviceError","videoDeviceError","setVideoDeviceError","selectedAudioOutputDevice","setSelectedAudioOutputDevice","avStreamRef","useRef","devices","setDevices","selectedAudioDevice","setAudioDevice","selectedVideoDevice","setVideoDevice","cancellablePromise","useCancellablePromise","changeDevice","useCallback","deviceId","deviceKind","removeTracksFromStream","constraints","stream","openMediaDevices","track","getTrack","_a","error","errorMessage","changeAudioOutputDevice","videoEl","useEffect","permissionCleanup","audioTrack","videoTrack","audioDeviceId","videoDeviceId","connectedDevices","getConnectedDevices","cameraPermission","microphonePermission","handleCameraPermissionChange","handleMicrophonePermissionChange","handleDeviceChange","updatedDevices","d","firstAudioDevice","firstVideoDevice"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"use-media-devices.js","sources":["../../../../../src/features/av/av-preview/hooks/use-media-devices.ts"],"sourcesContent":["import { useMediaManager } from '@cuemath/av';\nimport {\n type IDevicesMap,\n type TDeviceError,\n type TDisplayDeviceError,\n} from '@cuemath/av/dist/types';\nimport type { RefObject } from 'react';\nimport { useCallback, useEffect, useState } from 'react';\n\nimport type { ILogger, TMediaKind } from '../av-preview-types';\n\ninterface IChangeDevice {\n (deviceId: string | undefined, kind: TMediaKind): void;\n}\n\ninterface IUseMediaDevices {\n (\n videoElRef: RefObject<HTMLVideoElement | null>,\n logger: ILogger,\n ): {\n audioDeviceError?: TDeviceError;\n videoDeviceError?: TDeviceError;\n devices: IDevicesMap;\n selectedAudioDevice?: string;\n selectedVideoDevice?: string;\n selectedAudioOutputDevice?: string;\n changeDevice: IChangeDevice;\n changeAudioOutputDevice: (deviceId: string) => void;\n };\n}\n\nconst useMediaDevices: IUseMediaDevices = (videoElRef, logger) => {\n const [audioDeviceError, setAudioDeviceError] = useState<TDeviceError>();\n const [videoDeviceError, setVideoDeviceError] = useState<TDeviceError>();\n const [selectedAudioDevice, setAudioDevice] = useState<string>();\n const [selectedVideoDevice, setVideoDevice] = useState<string>();\n const [devices, setDevices] = useState<IDevicesMap>({\n audio: [],\n video: [],\n audioOutput: [],\n });\n const [selectedAudioOutputDevice, setSelectedAudioOutputDevice] = useState<string>();\n\n const mediaManager = useMediaManager();\n\n const onError = useCallback(\n (\n error: TDeviceError | TDisplayDeviceError | undefined,\n type: 'camera' | 'microphone' | 'screen',\n ) => {\n logger('av_preview_error', { error });\n if (type === 'microphone') {\n setAudioDeviceError(error as TDeviceError);\n } else if (type === 'camera') {\n setVideoDeviceError(error as TDeviceError);\n }\n },\n [logger],\n );\n const getAndUpdateSelectedDevices = useCallback(() => {\n const { audioDeviceId, videoDeviceId } = mediaManager.getSelectedDeviceDetails();\n\n setAudioDevice(audioDeviceId);\n setVideoDevice(videoDeviceId);\n }, [mediaManager]);\n\n const updateAvailableDevices = useCallback(\n (updatedDevices?: IDevicesMap) => {\n if (updatedDevices) {\n setDevices(updatedDevices);\n } else {\n setDevices(mediaManager.getAvailableDevices());\n }\n getAndUpdateSelectedDevices();\n },\n [getAndUpdateSelectedDevices, mediaManager],\n );\n\n useEffect(() => {\n mediaManager.addDevicesChangeListener(updateAvailableDevices);\n\n return () => {\n mediaManager.addDevicesChangeListener(undefined);\n };\n }, [mediaManager, updateAvailableDevices]);\n\n useEffect(() => {\n if (!audioDeviceError && !videoDeviceError && videoElRef.current) {\n }\n });\n\n useEffect(() => {\n async function getStreamFromMediaManager() {\n if (!audioDeviceError || !videoDeviceError) {\n const stream = await mediaManager.initializeUserMedia({\n onError,\n constraints: { audio: true, video: true },\n });\n\n updateAvailableDevices();\n\n if (videoElRef.current && stream) {\n videoElRef.current.srcObject = stream;\n }\n }\n }\n getStreamFromMediaManager();\n }, [\n audioDeviceError,\n mediaManager,\n onError,\n updateAvailableDevices,\n videoDeviceError,\n videoElRef,\n ]);\n\n const changeDevice = useCallback<IChangeDevice>(\n async (deviceId, deviceKind) => {\n if (!mediaManager || !deviceId) return;\n\n mediaManager.changeSelectedDevice(deviceId, deviceKind);\n if (deviceKind === 'video') {\n setVideoDevice(deviceId);\n } else if (deviceKind === 'audio') {\n setAudioDevice(deviceId);\n }\n },\n [mediaManager],\n );\n\n const changeAudioOutputDevice = useCallback(\n (deviceId: string) => {\n mediaManager.setAudioOutputDevice(deviceId);\n\n setSelectedAudioOutputDevice(deviceId);\n const videoEl = videoElRef.current;\n\n if (videoEl && 'setSinkId' in videoEl) {\n videoEl.setSinkId(deviceId).catch(error => {\n logger('av_preview_set_audio_output_device_error', {\n deviceId,\n error_name: error?.name,\n error_message: error?.message,\n });\n });\n }\n },\n [videoElRef, mediaManager, logger],\n );\n\n return {\n audioDeviceError,\n videoDeviceError,\n devices,\n selectedVideoDevice,\n selectedAudioDevice,\n selectedAudioOutputDevice,\n changeDevice,\n changeAudioOutputDevice,\n };\n};\n\nexport default useMediaDevices;\n"],"names":["useMediaDevices","videoElRef","logger","audioDeviceError","setAudioDeviceError","useState","videoDeviceError","setVideoDeviceError","selectedAudioDevice","setAudioDevice","selectedVideoDevice","setVideoDevice","devices","setDevices","selectedAudioOutputDevice","setSelectedAudioOutputDevice","mediaManager","useMediaManager","onError","useCallback","error","type","getAndUpdateSelectedDevices","audioDeviceId","videoDeviceId","updateAvailableDevices","updatedDevices","useEffect","getStreamFromMediaManager","stream","changeDevice","deviceId","deviceKind","changeAudioOutputDevice","videoEl"],"mappings":";;AA+BM,MAAAA,IAAoC,CAACC,GAAYC,MAAW;AAChE,QAAM,CAACC,GAAkBC,CAAmB,IAAIC,EAAuB,GACjE,CAACC,GAAkBC,CAAmB,IAAIF,EAAuB,GACjE,CAACG,GAAqBC,CAAc,IAAIJ,EAAiB,GACzD,CAACK,GAAqBC,CAAc,IAAIN,EAAiB,GACzD,CAACO,GAASC,CAAU,IAAIR,EAAsB;AAAA,IAClD,OAAO,CAAC;AAAA,IACR,OAAO,CAAC;AAAA,IACR,aAAa,CAAC;AAAA,EAAA,CACf,GACK,CAACS,GAA2BC,CAA4B,IAAIV,EAAiB,GAE7EW,IAAeC,KAEfC,IAAUC;AAAA,IACd,CACEC,GACAC,MACG;AACI,MAAAnB,EAAA,oBAAoB,EAAE,OAAAkB,EAAA,CAAO,GAChCC,MAAS,eACXjB,EAAoBgB,CAAqB,IAChCC,MAAS,YAClBd,EAAoBa,CAAqB;AAAA,IAE7C;AAAA,IACA,CAAClB,CAAM;AAAA,EAAA,GAEHoB,IAA8BH,EAAY,MAAM;AACpD,UAAM,EAAE,eAAAI,GAAe,eAAAC,EAAc,IAAIR,EAAa,yBAAyB;AAE/E,IAAAP,EAAec,CAAa,GAC5BZ,EAAea,CAAa;AAAA,EAAA,GAC3B,CAACR,CAAY,CAAC,GAEXS,IAAyBN;AAAA,IAC7B,CAACO,MAAiC;AAChC,MACEb,EADEa,KAGSV,EAAa,qBAFC,GAICM;IAC9B;AAAA,IACA,CAACA,GAA6BN,CAAY;AAAA,EAAA;AAG5C,EAAAW,EAAU,OACRX,EAAa,yBAAyBS,CAAsB,GAErD,MAAM;AACX,IAAAT,EAAa,yBAAyB,MAAS;AAAA,EAAA,IAEhD,CAACA,GAAcS,CAAsB,CAAC,GAEzCE,EAAU,MAAM;AACd,IAAI,CAACxB,KAAoB,CAACG,KAAoBL,EAAW;AAAA,EACzD,CACD,GAED0B,EAAU,MAAM;AACd,mBAAeC,IAA4B;AACrC,UAAA,CAACzB,KAAoB,CAACG,GAAkB;AACpC,cAAAuB,IAAS,MAAMb,EAAa,oBAAoB;AAAA,UACpD,SAAAE;AAAA,UACA,aAAa,EAAE,OAAO,IAAM,OAAO,GAAK;AAAA,QAAA,CACzC;AAEsB,QAAAO,KAEnBxB,EAAW,WAAW4B,MACxB5B,EAAW,QAAQ,YAAY4B;AAAA,MAEnC;AAAA,IACF;AAC0B,IAAAD;EAAA,GACzB;AAAA,IACDzB;AAAA,IACAa;AAAA,IACAE;AAAA,IACAO;AAAA,IACAnB;AAAA,IACAL;AAAA,EAAA,CACD;AAED,QAAM6B,IAAeX;AAAA,IACnB,OAAOY,GAAUC,MAAe;AAC1B,MAAA,CAAChB,KAAgB,CAACe,MAETf,EAAA,qBAAqBe,GAAUC,CAAU,GAClDA,MAAe,UACjBrB,EAAeoB,CAAQ,IACdC,MAAe,WACxBvB,EAAesB,CAAQ;AAAA,IAE3B;AAAA,IACA,CAACf,CAAY;AAAA,EAAA,GAGTiB,IAA0Bd;AAAA,IAC9B,CAACY,MAAqB;AACpB,MAAAf,EAAa,qBAAqBe,CAAQ,GAE1ChB,EAA6BgB,CAAQ;AACrC,YAAMG,IAAUjC,EAAW;AAEvB,MAAAiC,KAAW,eAAeA,KAC5BA,EAAQ,UAAUH,CAAQ,EAAE,MAAM,CAASX,MAAA;AACzC,QAAAlB,EAAO,4CAA4C;AAAA,UACjD,UAAA6B;AAAA,UACA,YAAYX,KAAA,gBAAAA,EAAO;AAAA,UACnB,eAAeA,KAAA,gBAAAA,EAAO;AAAA,QAAA,CACvB;AAAA,MAAA,CACF;AAAA,IAEL;AAAA,IACA,CAACnB,GAAYe,GAAcd,CAAM;AAAA,EAAA;AAG5B,SAAA;AAAA,IACL,kBAAAC;AAAA,IACA,kBAAAG;AAAA,IACA,SAAAM;AAAA,IACA,qBAAAF;AAAA,IACA,qBAAAF;AAAA,IACA,2BAAAM;AAAA,IACA,cAAAgB;AAAA,IACA,yBAAAG;AAAA,EAAA;AAEJ;"}
|