@cuemath/leap 2.8.36-hg3 → 2.8.36-link.1

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.
Files changed (81) hide show
  1. package/dist/assets/illustrations/illustrations.js +2 -0
  2. package/dist/assets/illustrations/illustrations.js.map +1 -1
  3. package/dist/assets/lottie/lottie.js +0 -6
  4. package/dist/assets/lottie/lottie.js.map +1 -1
  5. package/dist/assets/sounds/sounds.js +7 -0
  6. package/dist/assets/sounds/sounds.js.map +1 -0
  7. package/dist/features/circle-games/game-launcher/comps/segmented-game-card/constants.js +6 -6
  8. package/dist/features/circle-games/game-launcher/comps/segmented-game-card/constants.js.map +1 -1
  9. package/dist/features/circle-games/game-launcher/comps/segmented-game-card/segmented-game-card-styled.js +73 -29
  10. package/dist/features/circle-games/game-launcher/comps/segmented-game-card/segmented-game-card-styled.js.map +1 -1
  11. package/dist/features/circle-games/game-launcher/comps/segmented-game-card/segmented-game-card.js +85 -87
  12. package/dist/features/circle-games/game-launcher/comps/segmented-game-card/segmented-game-card.js.map +1 -1
  13. package/dist/features/circle-games/game-launcher/dal/use-get-circle-home-details-dal/use-get-circle-home-details-dal.js +15 -25
  14. package/dist/features/circle-games/game-launcher/dal/use-get-circle-home-details-dal/use-get-circle-home-details-dal.js.map +1 -1
  15. package/dist/features/circle-games/game-launcher/game-launcher.js +65 -108
  16. package/dist/features/circle-games/game-launcher/game-launcher.js.map +1 -1
  17. package/dist/features/circle-games/games/web-view/enums/project-ids-enum.js +14 -0
  18. package/dist/features/circle-games/games/web-view/enums/project-ids-enum.js.map +1 -0
  19. package/dist/features/circle-games/games/web-view/enums/project-type-enum.js +1 -1
  20. package/dist/features/circle-games/games/web-view/enums/project-type-enum.js.map +1 -1
  21. package/dist/features/circle-games/games/web-view/web-view-types.js.map +1 -1
  22. package/dist/features/circle-games/games/web-view/web-view.js +82 -69
  23. package/dist/features/circle-games/games/web-view/web-view.js.map +1 -1
  24. package/dist/features/post-game-stats/accuracy/accuracy-styled.js +16 -17
  25. package/dist/features/post-game-stats/accuracy/accuracy-styled.js.map +1 -1
  26. package/dist/features/post-game-stats/clock/clock-styled.js +10 -11
  27. package/dist/features/post-game-stats/clock/clock-styled.js.map +1 -1
  28. package/dist/features/post-game-stats/points/points.js +24 -25
  29. package/dist/features/post-game-stats/points/points.js.map +1 -1
  30. package/dist/features/post-game-stats/post-game-stats-styled.js +1 -1
  31. package/dist/features/post-game-stats/post-game-stats-styled.js.map +1 -1
  32. package/dist/features/post-game-stats/streak/streak-styled.js +17 -18
  33. package/dist/features/post-game-stats/streak/streak-styled.js.map +1 -1
  34. package/dist/features/talk-meter/helper.js +11 -0
  35. package/dist/features/talk-meter/helper.js.map +1 -0
  36. package/dist/features/talk-meter/hooks/use-talk-meter.js +112 -0
  37. package/dist/features/talk-meter/hooks/use-talk-meter.js.map +1 -0
  38. package/dist/features/talk-meter/ripple/index.js +62 -0
  39. package/dist/features/talk-meter/ripple/index.js.map +1 -0
  40. package/dist/features/talk-meter/talk-meter-styled.js +89 -0
  41. package/dist/features/talk-meter/talk-meter-styled.js.map +1 -0
  42. package/dist/features/talk-meter/talk-meter-view/talk-meter-view-styled.js +22 -0
  43. package/dist/features/talk-meter/talk-meter-view/talk-meter-view-styled.js.map +1 -0
  44. package/dist/features/talk-meter/talk-meter-view/talk-meter-view.js +101 -0
  45. package/dist/features/talk-meter/talk-meter-view/talk-meter-view.js.map +1 -0
  46. package/dist/features/talk-meter/talk-meter.js +73 -0
  47. package/dist/features/talk-meter/talk-meter.js.map +1 -0
  48. package/dist/features/trial-session/comps/trial-circle-game/constants.js.map +1 -1
  49. package/dist/features/trial-session/comps/trial-circle-game/trial-circle-game.js.map +1 -1
  50. package/dist/index.d.ts +141 -78
  51. package/dist/index.js +201 -194
  52. package/dist/index.js.map +1 -1
  53. package/dist/static/female-avatar.b8cd1012.svg +1 -0
  54. package/dist/static/male-avatar.2febc9eb.svg +1 -0
  55. package/package.json +2 -3
  56. package/dist/features/circle-games/game-launcher/comps/card-container/card-container-styled.js +0 -53
  57. package/dist/features/circle-games/game-launcher/comps/card-container/card-container-styled.js.map +0 -1
  58. package/dist/features/circle-games/game-launcher/comps/card-container/card-container.js +0 -24
  59. package/dist/features/circle-games/game-launcher/comps/card-container/card-container.js.map +0 -1
  60. package/dist/features/circle-games/game-launcher/comps/card-container/constants.js +0 -7
  61. package/dist/features/circle-games/game-launcher/comps/card-container/constants.js.map +0 -1
  62. package/dist/features/circle-games/game-launcher/comps/tables-card/constants.js +0 -20
  63. package/dist/features/circle-games/game-launcher/comps/tables-card/constants.js.map +0 -1
  64. package/dist/features/circle-games/game-launcher/comps/tables-card/table-mode/table-mode-styled.js +0 -24
  65. package/dist/features/circle-games/game-launcher/comps/tables-card/table-mode/table-mode-styled.js.map +0 -1
  66. package/dist/features/circle-games/game-launcher/comps/tables-card/table-mode/table-mode.js +0 -54
  67. package/dist/features/circle-games/game-launcher/comps/tables-card/table-mode/table-mode.js.map +0 -1
  68. package/dist/features/circle-games/game-launcher/comps/tables-card/table-star/table-star-styled.js +0 -11
  69. package/dist/features/circle-games/game-launcher/comps/tables-card/table-star/table-star-styled.js.map +0 -1
  70. package/dist/features/circle-games/game-launcher/comps/tables-card/table-star/table-star.js +0 -16
  71. package/dist/features/circle-games/game-launcher/comps/tables-card/table-star/table-star.js.map +0 -1
  72. package/dist/features/circle-games/game-launcher/comps/tables-card/tables-card-styled.js +0 -161
  73. package/dist/features/circle-games/game-launcher/comps/tables-card/tables-card-styled.js.map +0 -1
  74. package/dist/features/circle-games/game-launcher/comps/tables-card/tables-card.js +0 -225
  75. package/dist/features/circle-games/game-launcher/comps/tables-card/tables-card.js.map +0 -1
  76. package/dist/static/advance-mode-segment-lottie.51ff6707.json +0 -1
  77. package/dist/static/infinite-button-bg.5909225e.json +0 -1
  78. package/dist/static/infinite-button-symbol.aa31350c.json +0 -1
  79. package/dist/static/random-mode-segment-lottie.79cf1c07.json +0 -1
  80. package/dist/static/sequence-mode-segment-lottie.11ac49e9.json +0 -1
  81. package/dist/static/table-mode-reveal.b44a82c3.json +0 -1
@@ -0,0 +1,11 @@
1
+ const e = (T) => {
2
+ const E = {
3
+ STUDENT: "RED",
4
+ TEACHER: "ORANGE_2"
5
+ };
6
+ return T >= 50 ? (E.STUDENT = "GREEN_4", E.TEACHER = "GREEN_2") : T >= 25 && (E.STUDENT = "YELLOW_4", E.TEACHER = "YELLOW_2"), E;
7
+ };
8
+ export {
9
+ e as getMeterColor
10
+ };
11
+ //# sourceMappingURL=helper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helper.js","sources":["../../../src/features/talk-meter/helper.ts"],"sourcesContent":["import type { TColorNames, TUserTypes } from '../ui/types';\n\nconst getMeterColor = (stdRatio: number) => {\n const COLOR_MAP: Record<TUserTypes, TColorNames> = {\n STUDENT: 'RED',\n TEACHER: 'ORANGE_2',\n };\n\n if (stdRatio >= 50) {\n COLOR_MAP.STUDENT = 'GREEN_4';\n COLOR_MAP.TEACHER = 'GREEN_2';\n } else if (stdRatio >= 25) {\n COLOR_MAP.STUDENT = 'YELLOW_4';\n COLOR_MAP.TEACHER = 'YELLOW_2';\n }\n\n return COLOR_MAP;\n};\n\nexport { getMeterColor };\n"],"names":["getMeterColor","stdRatio","COLOR_MAP"],"mappings":"AAEM,MAAAA,IAAgB,CAACC,MAAqB;AAC1C,QAAMC,IAA6C;AAAA,IACjD,SAAS;AAAA,IACT,SAAS;AAAA,EAAA;AAGX,SAAID,KAAY,MACdC,EAAU,UAAU,WACpBA,EAAU,UAAU,aACXD,KAAY,OACrBC,EAAU,UAAU,YACpBA,EAAU,UAAU,aAGfA;AACT;"}
@@ -0,0 +1,112 @@
1
+ import { useAVActions as z, useRemotePeers as G, useAVMessage as J } from "@cuemath/av";
2
+ import { useState as F, useRef as B, useMemo as Q, useCallback as I, useEffect as D } from "react";
3
+ import { useUIContext as X } from "../../ui/context/context.js";
4
+ const N = 1e3 * 60, S = 20, v = 40, W = (p, i) => {
5
+ const _ = Date.now(), E = p.getTime(), a = Math.abs(_ - E), t = Math.floor(a / 1e3 / 60), f = (i === 0 || i === 1) && t >= S - 2 && t <= S, T = (i === 1 || i === 2) && t >= v - 2 && t <= v, l = t >= 50;
6
+ let s = 0, u = !1;
7
+ return l ? s = 0 : T ? (s = 2, u = t >= v) : f && (s = 1, u = t >= S), {
8
+ lastMinutesLeft: l,
9
+ canSendBatch: f || T,
10
+ batchNoToSend: s,
11
+ minutes: t,
12
+ canDisplay: u
13
+ };
14
+ }, te = (p) => {
15
+ var V, w;
16
+ const {
17
+ userType: i,
18
+ studentId: _,
19
+ teacherId: E,
20
+ classStartTime: a,
21
+ avPackageEnabled: t,
22
+ teacherClassroomId: f,
23
+ teacherTalkTime: T,
24
+ studentTalkTime: l,
25
+ lastBatchReceivedNo: s,
26
+ canDisplayBatch: u,
27
+ onMessageReceive: C,
28
+ onDismissMeter: P
29
+ } = p, [r, U] = F(!1), [Y, k] = F(!1), { onEvent: y } = X(), { sendMessage: L } = z(), g = G(), H = (V = g.find((e) => e.userId === _)) == null ? void 0 : V.id, b = (w = g.find((e) => e.userType === "teacher")) == null ? void 0 : w.id, n = i === "TEACHER", d = B(T), o = B(l), K = B(0), O = o.current + d.current, j = Math.ceil(o.current * 100 / O) || 0, q = Math.floor(d.current * 100 / O) || 0, m = Q(
30
+ () => ({
31
+ teacher_classroom_id: f,
32
+ teacher_id: E,
33
+ studentId: _
34
+ }),
35
+ [_, f, E]
36
+ ), R = I(() => {
37
+ k(!0), U(!1), P();
38
+ }, [P]), A = I(
39
+ (e, c = {}) => {
40
+ y(e, { ...m, ...c });
41
+ },
42
+ [y, m]
43
+ ), h = I(
44
+ (e) => {
45
+ const c = n ? "TEACHER_TALK_TIME_UPDATED" : "STUDENT_TALK_TIME_UPDATED", M = n ? { teacher_speech_time: d.current } : { student_speech_time: o.current };
46
+ A("TALK_METER_BATCH_SENT", {
47
+ batch_no: e,
48
+ ...M
49
+ }), t && L(
50
+ c,
51
+ {
52
+ ...m,
53
+ ...M,
54
+ batch_no: e
55
+ },
56
+ n ? H : b
57
+ ), K.current = o.current;
58
+ },
59
+ [t, n, m, L, H, b, A]
60
+ );
61
+ return J({
62
+ type: n ? "STUDENT_TALK_TIME_UPDATED" : "TEACHER_TALK_TIME_UPDATED",
63
+ onMessage: I(
64
+ (e, c) => {
65
+ C(), n && h(c.batch_no);
66
+ },
67
+ [n, C, h]
68
+ )
69
+ }), D(() => {
70
+ r || (d.current = T, o.current = l);
71
+ }, [T, l, r]), D(() => {
72
+ let e;
73
+ return r && (e = setTimeout(() => {
74
+ R();
75
+ }, N)), () => {
76
+ e && clearTimeout(e);
77
+ };
78
+ }, [r, R]), D(() => {
79
+ let e;
80
+ return a && u && !r && (e = setInterval(() => {
81
+ const { canDisplay: c } = W(a, s);
82
+ c && (A("TALK_METER_BATCH_DISPLAYED", {
83
+ student_speech_time: o.current,
84
+ teacher_speech_time: d.current,
85
+ batch_no: s
86
+ }), U(!0), k(!1));
87
+ }, N / 30)), () => {
88
+ e && clearInterval(e);
89
+ };
90
+ }, [r, u, a, s, A]), D(() => {
91
+ let e;
92
+ return a && !n && (e = setInterval(() => {
93
+ const { lastMinutesLeft: c, canSendBatch: M, batchNoToSend: x } = W(
94
+ a,
95
+ s
96
+ );
97
+ c ? K.current !== o.current && h(x) : M && h(x);
98
+ }, N / 6)), () => {
99
+ e && clearInterval(e);
100
+ };
101
+ }, [a, n, s, h]), {
102
+ canAnimateIn: r,
103
+ canAnimateOut: Y,
104
+ stdRatio: j,
105
+ tchRatio: q,
106
+ handleDismiss: R
107
+ };
108
+ };
109
+ export {
110
+ te as useTalkMeter
111
+ };
112
+ //# sourceMappingURL=use-talk-meter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-talk-meter.js","sources":["../../../../src/features/talk-meter/hooks/use-talk-meter.ts"],"sourcesContent":["import type { ITalkMeterHook } from '../talk-meter-types';\n\nimport { useAVActions, useAVMessage, useRemotePeers } from '@cuemath/av';\nimport { useRef, useMemo, useCallback, useState, useEffect } from 'react';\n\nimport { useUIContext } from '../../ui/context/context';\n\nconst ONE_MINUTE = 1000 * 60;\nconst BATCH_ONE_MINUTE = 20;\nconst BATCH_TWO_MINUTE = 40;\n\nconst getBatchToSendInfo = (classStartTime: Date, batchSeen: number) => {\n const now = Date.now();\n const classTS = classStartTime.getTime();\n const diff = Math.abs(now - classTS);\n const minutes = Math.floor(diff / 1000 / 60);\n const canSendFirstBatch =\n (batchSeen === 0 || batchSeen === 1) &&\n minutes >= BATCH_ONE_MINUTE - 2 &&\n minutes <= BATCH_ONE_MINUTE;\n const canSendSecondBatch =\n (batchSeen === 1 || batchSeen === 2) &&\n minutes >= BATCH_TWO_MINUTE - 2 &&\n minutes <= BATCH_TWO_MINUTE;\n\n const lastMinutesLeft = minutes >= 50;\n\n let batchNo = 0;\n let canDisplayBatch = false;\n\n if (lastMinutesLeft) {\n batchNo = 0;\n } else if (canSendSecondBatch) {\n batchNo = 2;\n canDisplayBatch = minutes >= BATCH_TWO_MINUTE;\n } else if (canSendFirstBatch) {\n batchNo = 1;\n canDisplayBatch = minutes >= BATCH_ONE_MINUTE;\n }\n\n return {\n lastMinutesLeft,\n canSendBatch: canSendFirstBatch || canSendSecondBatch,\n batchNoToSend: batchNo,\n minutes,\n canDisplay: canDisplayBatch,\n };\n};\n\nexport const useTalkMeter = (props: ITalkMeterHook) => {\n const {\n userType,\n studentId,\n teacherId,\n classStartTime,\n avPackageEnabled,\n teacherClassroomId,\n teacherTalkTime,\n studentTalkTime,\n lastBatchReceivedNo,\n canDisplayBatch,\n onMessageReceive,\n onDismissMeter,\n } = props;\n const [canAnimateIn, setCanAnimateIn] = useState(false);\n const [canAnimateOut, setCanAnimateOut] = useState(false);\n\n const { onEvent } = useUIContext();\n const { sendMessage } = useAVActions();\n\n const remotePeers = useRemotePeers();\n const studentPeerId = remotePeers.find(peer => peer.userId === studentId)?.id;\n const teacherPeerId = remotePeers.find(p => p.userType === 'teacher')?.id;\n\n const isTeacher = userType === 'TEACHER';\n\n const teacherTalkRef = useRef(teacherTalkTime);\n const studentTalkRef = useRef(studentTalkTime);\n const prevSentRef = useRef(0);\n\n const totalTalkTime = studentTalkRef.current + teacherTalkRef.current;\n const stdRatio = Math.ceil((studentTalkRef.current * 100) / totalTalkTime) || 0;\n const tchRatio = Math.floor((teacherTalkRef.current * 100) / totalTalkTime) || 0;\n\n const payload = useMemo(\n () => ({\n teacher_classroom_id: teacherClassroomId,\n teacher_id: teacherId,\n studentId: studentId,\n }),\n [studentId, teacherClassroomId, teacherId],\n );\n\n const handleDismiss = useCallback(() => {\n setCanAnimateOut(true);\n setCanAnimateIn(false);\n onDismissMeter();\n }, [onDismissMeter]);\n\n const trackEvent = useCallback(\n (eventName: string, data = {}) => {\n onEvent(eventName, { ...payload, ...data });\n },\n [onEvent, payload],\n );\n\n const sendBatch = useCallback(\n (batchNo: number) => {\n const EVENT_NAME = isTeacher ? 'TEACHER_TALK_TIME_UPDATED' : 'STUDENT_TALK_TIME_UPDATED';\n const speechTimePayload = isTeacher\n ? { teacher_speech_time: teacherTalkRef.current }\n : { student_speech_time: studentTalkRef.current };\n\n trackEvent('TALK_METER_BATCH_SENT', {\n batch_no: batchNo,\n ...speechTimePayload,\n });\n if (avPackageEnabled) {\n sendMessage(\n EVENT_NAME,\n {\n ...payload,\n ...speechTimePayload,\n batch_no: batchNo,\n },\n isTeacher ? studentPeerId : teacherPeerId,\n );\n }\n\n prevSentRef.current = studentTalkRef.current;\n },\n [avPackageEnabled, isTeacher, payload, sendMessage, studentPeerId, teacherPeerId, trackEvent],\n );\n\n useAVMessage<{\n teacher_classroom_id: string;\n student_classroom_id: string;\n student_speech_time: number;\n batch_no: 0 | 1 | 2;\n }>({\n type: isTeacher ? 'STUDENT_TALK_TIME_UPDATED' : 'TEACHER_TALK_TIME_UPDATED',\n onMessage: useCallback(\n (_, data) => {\n onMessageReceive();\n if (isTeacher) sendBatch(data.batch_no);\n },\n [isTeacher, onMessageReceive, sendBatch],\n ),\n });\n\n useEffect(() => {\n if (!canAnimateIn) {\n teacherTalkRef.current = teacherTalkTime;\n studentTalkRef.current = studentTalkTime;\n }\n }, [teacherTalkTime, studentTalkTime, canAnimateIn]);\n\n useEffect(() => {\n let dismissTimer: NodeJS.Timeout | undefined;\n\n if (canAnimateIn) {\n dismissTimer = setTimeout(() => {\n handleDismiss();\n }, ONE_MINUTE);\n }\n\n return () => {\n if (dismissTimer) clearTimeout(dismissTimer);\n };\n }, [canAnimateIn, handleDismiss]);\n\n useEffect(() => {\n let interval: NodeJS.Timeout | undefined;\n\n if (classStartTime && canDisplayBatch && !canAnimateIn) {\n interval = setInterval(() => {\n const { canDisplay } = getBatchToSendInfo(classStartTime, lastBatchReceivedNo);\n\n if (canDisplay) {\n trackEvent('TALK_METER_BATCH_DISPLAYED', {\n student_speech_time: studentTalkRef.current,\n teacher_speech_time: teacherTalkRef.current,\n batch_no: lastBatchReceivedNo,\n });\n setCanAnimateIn(true);\n setCanAnimateOut(false);\n }\n }, ONE_MINUTE / 30);\n }\n\n return () => {\n if (interval) {\n clearInterval(interval);\n }\n };\n }, [canAnimateIn, canDisplayBatch, classStartTime, lastBatchReceivedNo, trackEvent]);\n\n useEffect(() => {\n let interval: NodeJS.Timeout | undefined;\n\n if (classStartTime && !isTeacher) {\n interval = setInterval(() => {\n const { lastMinutesLeft, canSendBatch, batchNoToSend } = getBatchToSendInfo(\n classStartTime,\n lastBatchReceivedNo,\n );\n\n if (lastMinutesLeft) {\n if (prevSentRef.current !== studentTalkRef.current) {\n sendBatch(batchNoToSend);\n }\n } else if (canSendBatch) {\n sendBatch(batchNoToSend);\n }\n }, ONE_MINUTE / 6);\n }\n\n return () => {\n if (interval) {\n clearInterval(interval);\n }\n };\n }, [classStartTime, isTeacher, lastBatchReceivedNo, sendBatch]);\n\n return {\n canAnimateIn,\n canAnimateOut,\n stdRatio,\n tchRatio,\n handleDismiss,\n };\n};\n"],"names":["ONE_MINUTE","BATCH_ONE_MINUTE","BATCH_TWO_MINUTE","getBatchToSendInfo","classStartTime","batchSeen","now","classTS","diff","minutes","canSendFirstBatch","canSendSecondBatch","lastMinutesLeft","batchNo","canDisplayBatch","useTalkMeter","props","userType","studentId","teacherId","avPackageEnabled","teacherClassroomId","teacherTalkTime","studentTalkTime","lastBatchReceivedNo","onMessageReceive","onDismissMeter","canAnimateIn","setCanAnimateIn","useState","canAnimateOut","setCanAnimateOut","onEvent","useUIContext","sendMessage","useAVActions","remotePeers","useRemotePeers","studentPeerId","_a","peer","teacherPeerId","_b","p","isTeacher","teacherTalkRef","useRef","studentTalkRef","prevSentRef","totalTalkTime","stdRatio","tchRatio","payload","useMemo","handleDismiss","useCallback","trackEvent","eventName","data","sendBatch","EVENT_NAME","speechTimePayload","useAVMessage","_","useEffect","dismissTimer","interval","canDisplay","canSendBatch","batchNoToSend"],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ import { jsx as c } from "react/jsx-runtime";
2
+ import { useRef as l, useCallback as u, useEffect as p } from "react";
3
+ import f, { keyframes as d, css as n } from "styled-components";
4
+ import { SOUNDS as y } from "../../../assets/sounds/sounds.js";
5
+ import { useUIContext as g } from "../../ui/context/context.js";
6
+ import x from "../../ui/layout/flex-view.js";
7
+ const A = d`
8
+ 0% {
9
+ opacity: 1;
10
+ transform: scale(1);
11
+ }
12
+ 50% {
13
+ opacity: 0;
14
+ transform: scale(1.10) scaleY(1.15);
15
+ }
16
+ 100% {
17
+ opacity: 0;
18
+ transform: scale(1.10) scaleY(1.15);
19
+ }
20
+ `, h = f(x)(
21
+ ({ $delay: i }) => n`
22
+ height: 104px;
23
+ width: calc(100% - 24px);
24
+ position: absolute;
25
+ border-radius: 12px;
26
+ z-index: 0;
27
+ left: 0;
28
+ right: 0;
29
+ margin-left: auto;
30
+ margin-right: auto;
31
+ ${i > 0 && n`
32
+ animation-name: ${A};
33
+ animation-delay: ${i || 0}ms;
34
+ animation-duration: 1000ms;
35
+ animation-iteration-count: infinite;
36
+ animation-timing-function: ease-in;
37
+ `};
38
+ `
39
+ ), L = (i) => {
40
+ const { delay: o, color: s, withAudio: e = !0 } = i, { onEvent: r } = g(), m = l(new Audio(y.ALERT)), a = u(() => {
41
+ try {
42
+ m.current.play();
43
+ } catch (t) {
44
+ r("debug_log", {
45
+ type: "UNABLE TO PLAY SOUND IN TALK METER",
46
+ error: JSON.stringify(t)
47
+ });
48
+ }
49
+ }, [r]);
50
+ return p(() => {
51
+ let t = null;
52
+ return e && (t = setTimeout(() => {
53
+ a();
54
+ }, o)), () => {
55
+ t && clearTimeout(t);
56
+ };
57
+ }, [e, o, a]), /* @__PURE__ */ c(h, { $delay: o, $borderColor: s });
58
+ };
59
+ export {
60
+ L as default
61
+ };
62
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../../src/features/talk-meter/ripple/index.tsx"],"sourcesContent":["import type { TColorNames } from '../../ui/types';\nimport type { FC } from 'react';\n\nimport { useEffect, useRef, useCallback } from 'react';\nimport styled, { css, keyframes } from 'styled-components';\n\nimport { SOUNDS } from '../../../assets/sounds/sounds';\nimport { useUIContext } from '../../ui/context/context';\nimport FlexView from '../../ui/layout/flex-view';\n\nconst rippleAnimation = keyframes`\n0% {\n opacity: 1;\n transform: scale(1);\n}\n50% {\n opacity: 0;\n transform: scale(1.10) scaleY(1.15);\n}\n100% {\n opacity: 0;\n transform: scale(1.10) scaleY(1.15);\n}\n`;\n\nconst RippleView = styled(FlexView)<{ $delay: number }>(\n ({ $delay }) => css`\n height: 104px;\n width: calc(100% - 24px);\n position: absolute;\n border-radius: 12px;\n z-index: 0;\n left: 0;\n right: 0;\n margin-left: auto;\n margin-right: auto;\n ${$delay > 0 &&\n css`\n animation-name: ${rippleAnimation};\n animation-delay: ${$delay || 0}ms;\n animation-duration: 1000ms;\n animation-iteration-count: infinite;\n animation-timing-function: ease-in;\n `};\n `,\n);\n\ninterface IRipple {\n delay: number;\n color: TColorNames;\n withAudio?: boolean;\n}\n\nconst Ripple: FC<IRipple> = props => {\n const { delay, color, withAudio = true } = props;\n const { onEvent: trackEvent } = useUIContext();\n const audioRef = useRef(new Audio(SOUNDS.ALERT));\n\n const playAudio = useCallback(() => {\n try {\n audioRef.current.play();\n } catch (err) {\n trackEvent('debug_log', {\n type: 'UNABLE TO PLAY SOUND IN TALK METER',\n error: JSON.stringify(err),\n });\n }\n }, [trackEvent]);\n\n useEffect(() => {\n let audioTimer: NodeJS.Timeout | null = null;\n\n if (withAudio) {\n audioTimer = setTimeout(() => {\n playAudio();\n }, delay);\n }\n\n return () => {\n if (audioTimer) clearTimeout(audioTimer);\n };\n }, [withAudio, delay, playAudio]);\n\n return <RippleView $delay={delay} $borderColor={color} />;\n};\n\nexport default Ripple;\n"],"names":["rippleAnimation","keyframes","RippleView","styled","FlexView","$delay","css","Ripple","props","delay","color","withAudio","trackEvent","useUIContext","audioRef","useRef","SOUNDS","playAudio","useCallback","err","useEffect","audioTimer","jsx"],"mappings":";;;;;;AAUA,MAAMA,IAAkBC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAelBC,IAAaC,EAAOC,CAAQ;AAAA,EAChC,CAAC,EAAE,QAAAC,EAAa,MAAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUZD,IAAS,KACXC;AAAA,wBACoBN,CAAe;AAAA,yBACdK,KAAU,CAAC;AAAA;AAAA;AAAA;AAAA,KAI/B;AAAA;AAEL,GAQME,IAAsB,CAASC,MAAA;AACnC,QAAM,EAAE,OAAAC,GAAO,OAAAC,GAAO,WAAAC,IAAY,OAASH,GACrC,EAAE,SAASI,EAAW,IAAIC,EAAa,GACvCC,IAAWC,EAAO,IAAI,MAAMC,EAAO,KAAK,CAAC,GAEzCC,IAAYC,EAAY,MAAM;AAC9B,QAAA;AACF,MAAAJ,EAAS,QAAQ;aACVK,GAAK;AACZ,MAAAP,EAAW,aAAa;AAAA,QACtB,MAAM;AAAA,QACN,OAAO,KAAK,UAAUO,CAAG;AAAA,MAAA,CAC1B;AAAA,IACH;AAAA,EAAA,GACC,CAACP,CAAU,CAAC;AAEf,SAAAQ,EAAU,MAAM;AACd,QAAIC,IAAoC;AAExC,WAAIV,MACFU,IAAa,WAAW,MAAM;AAClB,MAAAJ;OACTR,CAAK,IAGH,MAAM;AACP,MAAAY,kBAAyBA,CAAU;AAAA,IAAA;AAAA,EAExC,GAAA,CAACV,GAAWF,GAAOQ,CAAS,CAAC,GAExB,gBAAAK,EAAApB,GAAA,EAAW,QAAQO,GAAO,cAAcC,EAAO,CAAA;AACzD;"}
@@ -0,0 +1,89 @@
1
+ import o, { keyframes as a, css as t } from "styled-components";
2
+ import s from "../../assets/line-icons/icons/cross.js";
3
+ import r from "../ui/layout/flex-view.js";
4
+ const l = a`
5
+ 0% {
6
+ opacity: 0;
7
+ transform: translate(0%, -100%) scale(0);
8
+ height: 0px;
9
+ }
10
+ 50% {
11
+ opacity: 1;
12
+ }
13
+ 100% {
14
+ opacity: 1;
15
+ transform: translate(0%, 0%) scale(1);
16
+ height: 128px;
17
+ }
18
+ `, c = a`
19
+ 0% {
20
+ opacity: 1;
21
+ transform: translate(0%, 0%) scale(1);
22
+ }
23
+ 100% {
24
+ opacity: 0;
25
+ transform: translate(0%, -100%) scale(1);
26
+ height: 0px;
27
+ }
28
+ `, y = o(s)`
29
+ position: absolute;
30
+ top: 15px;
31
+ right: 20px;
32
+ color: black;
33
+ width: 20px;
34
+ height: 20px;
35
+ z-index: 2;
36
+ `, f = o(r)(
37
+ ({ $isTeacher: n, $animated: i, $canAnimateIn: e, $canAnimateOut: p }) => t`
38
+ width: 100%;
39
+ max-width: 336px;
40
+
41
+ ${i ? `
42
+ height: 0;
43
+ opacity: 0;
44
+ display: none;
45
+ ` : `
46
+ height: 100%;
47
+ opacity: 1;
48
+ display: flex;
49
+ `}
50
+
51
+ ${n ? null : `
52
+ ${i ? `
53
+ top: 70px;
54
+ right: 10px;
55
+ position: fixed;
56
+ ` : `
57
+ top: 0;
58
+ right: 0px;
59
+ position: relative;
60
+ `}
61
+ z-index: 100;
62
+ `}
63
+
64
+ ${e ? t`
65
+ animation-name: ${l};
66
+ animation-duration: 800ms;
67
+ animation-iteration-count: 1;
68
+ animation-timing-function: ease-out;
69
+ opacity: 1;
70
+ display: flex;
71
+ height: 128px;
72
+ ` : null}
73
+
74
+ ${p ? t`
75
+ animation-name: ${c};
76
+ animation-duration: 400ms;
77
+ animation-iteration-count: 1;
78
+ animation-timing-function: ease-out;
79
+ opacity: 0;
80
+ display: none;
81
+ height: 0px;
82
+ ` : null}
83
+ `
84
+ );
85
+ export {
86
+ y as CloseIcon,
87
+ f as Wrapper
88
+ };
89
+ //# sourceMappingURL=talk-meter-styled.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"talk-meter-styled.js","sources":["../../../src/features/talk-meter/talk-meter-styled.tsx"],"sourcesContent":["import styled, { css, keyframes } from 'styled-components';\n\nimport CrossIcon from '../../assets/line-icons/icons/cross';\nimport FlexView from '../ui/layout/flex-view';\n\nconst scaleInAnim = keyframes`\n 0% {\n opacity: 0;\n transform: translate(0%, -100%) scale(0);\n height: 0px;\n }\n 50% {\n opacity: 1;\n }\n 100% {\n opacity: 1;\n transform: translate(0%, 0%) scale(1);\n height: 128px;\n }\n`;\n\nconst scaleOutAnim = keyframes`\n 0% {\n opacity: 1;\n transform: translate(0%, 0%) scale(1);\n }\n 100% {\n opacity: 0;\n transform: translate(0%, -100%) scale(1);\n height: 0px;\n }\n`;\n\nconst CloseIcon = styled(CrossIcon)`\n position: absolute;\n top: 15px;\n right: 20px;\n color: black;\n width: 20px;\n height: 20px;\n z-index: 2;\n`;\n\nconst Wrapper = styled(FlexView)<{\n $isTeacher: boolean;\n $animated: boolean;\n $canAnimateIn: boolean;\n $canAnimateOut: boolean;\n}>(\n ({ $isTeacher, $animated, $canAnimateIn, $canAnimateOut }) => css`\n width: 100%;\n max-width: 336px;\n\n ${$animated\n ? `\n height: 0;\n opacity: 0;\n display: none;\n `\n : `\n height: 100%;\n opacity: 1;\n display: flex;\n `}\n\n ${!$isTeacher\n ? `\n ${\n $animated\n ? `\n top: 70px;\n right: 10px;\n position: fixed;\n `\n : `\n top: 0;\n right: 0px;\n position: relative;\n `\n }\n z-index: 100;\n `\n : null}\n \n ${$canAnimateIn\n ? css`\n animation-name: ${scaleInAnim};\n animation-duration: 800ms;\n animation-iteration-count: 1;\n animation-timing-function: ease-out;\n opacity: 1;\n display: flex;\n height: 128px;\n `\n : null}\n\n ${$canAnimateOut\n ? css`\n animation-name: ${scaleOutAnim};\n animation-duration: 400ms;\n animation-iteration-count: 1;\n animation-timing-function: ease-out;\n opacity: 0;\n display: none;\n height: 0px;\n `\n : null}\n `,\n);\n\nexport { Wrapper, CloseIcon };\n"],"names":["scaleInAnim","keyframes","scaleOutAnim","CloseIcon","styled","CrossIcon","Wrapper","FlexView","$isTeacher","$animated","$canAnimateIn","$canAnimateOut","css"],"mappings":";;;AAKA,MAAMA,IAAcC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAgBdC,IAAeD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAYfE,IAAYC,EAAOC,CAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAU5BC,IAAUF,EAAOG,CAAQ;AAAA,EAM7B,CAAC,EAAE,YAAAC,GAAY,WAAAC,GAAW,eAAAC,GAAe,gBAAAC,QAAqBC;AAAA;AAAA;AAAA;AAAA,MAI1DH,IACE;AAAA;AAAA;AAAA;AAAA,cAKA;AAAA;AAAA;AAAA;AAAA,WAIG;AAAA;AAAA,MAEJD,IAiBC,OAhBA;AAAA,cAEMC,IACI;AAAA;AAAA;AAAA;AAAA,oBAKA;AAAA;AAAA;AAAA;AAAA,iBAKN;AAAA;AAAA,WAGA;AAAA;AAAA,MAENC,IACEE;AAAA,4BACoBZ,CAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAQ/B,IAAI;AAAA;AAAA,MAENW,IACEC;AAAA,4BACoBV,CAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAQhC,IAAI;AAAA;AAEZ;"}
@@ -0,0 +1,22 @@
1
+ import e from "styled-components";
2
+ import i from "../../ui/layout/flex-view.js";
3
+ const p = e(i)`
4
+ height: 104px;
5
+ transition: height 300ms ease-in-out;
6
+ z-index: 1;
7
+ `;
8
+ e.div(
9
+ ({ $avatarUrl: r }) => `
10
+ width: 20px;
11
+ height: 20px;
12
+ border-radius: 50%;
13
+ background: url(${r});
14
+ background-size: cover;
15
+ background-repeat: no-repeat;
16
+ position: relative;
17
+ `
18
+ );
19
+ export {
20
+ p as MeterWrapper
21
+ };
22
+ //# sourceMappingURL=talk-meter-view-styled.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"talk-meter-view-styled.js","sources":["../../../../src/features/talk-meter/talk-meter-view/talk-meter-view-styled.tsx"],"sourcesContent":["import styled from 'styled-components';\n\nimport FlexView from '../../ui/layout/flex-view';\n\nconst MeterWrapper = styled(FlexView)`\n height: 104px;\n transition: height 300ms ease-in-out;\n z-index: 1;\n`;\n\nconst Avatar = styled.div<{ $avatarUrl: string }>(\n ({ $avatarUrl }) => `\n width: 20px;\n height: 20px;\n border-radius: 50%;\n background: url(${$avatarUrl});\n background-size: cover;\n background-repeat: no-repeat;\n position: relative;\n`,\n);\n\nexport { MeterWrapper, Avatar };\n"],"names":["MeterWrapper","styled","FlexView","$avatarUrl"],"mappings":";;AAIM,MAAAA,IAAeC,EAAOC,CAAQ;AAAA;AAAA;AAAA;AAAA;AAMrBD,EAAO;AAAA,EACpB,CAAC,EAAE,YAAAE,EAAA,MAAiB;AAAA;AAAA;AAAA;AAAA,oBAIFA,CAAU;AAAA;AAAA;AAAA;AAAA;AAK9B;"}
@@ -0,0 +1,101 @@
1
+ import { jsx as e, jsxs as r } from "react/jsx-runtime";
2
+ import { memo as b } from "react";
3
+ import { ILLUSTRATIONS as d } from "../../../assets/illustrations/illustrations.js";
4
+ import $ from "../../ui/image/image.js";
5
+ import t from "../../ui/layout/flex-view.js";
6
+ import T from "../../ui/separator/separator.js";
7
+ import o from "../../ui/text/text.js";
8
+ import { getMeterColor as g } from "../helper.js";
9
+ import { MeterWrapper as l } from "./talk-meter-view-styled.js";
10
+ const p = {
11
+ MALE: "MALE",
12
+ FEMALE: "FEMALE",
13
+ OTHER: "OTHER"
14
+ }, j = b((s) => {
15
+ const {
16
+ stdName: h = "Student",
17
+ tchName: u = "Teacher",
18
+ stdRatio: i,
19
+ tchRatio: n,
20
+ tchGender: E,
21
+ userType: m
22
+ } = s, c = g(i), A = Math.abs(n - i), f = n > 0 && i > 0 && A < 95, a = m === "TEACHER";
23
+ return f ? /* @__PURE__ */ r(
24
+ l,
25
+ {
26
+ $gap: 12,
27
+ $gutter: 12,
28
+ $background: "WHITE",
29
+ $borderColor: "GREY_2",
30
+ $borderRadius: 12,
31
+ children: [
32
+ /* @__PURE__ */ e(o, { $renderAs: "ub3-bold", $align: "center", children: "50:50 TALK METER" }),
33
+ /* @__PURE__ */ e(T, { height: 8 }),
34
+ /* @__PURE__ */ r(t, { $flexDirection: "row", $alignItems: "center", $justifyContent: "space-between", children: [
35
+ /* @__PURE__ */ r(t, { $flexDirection: "row", $justifyContent: "center", $alignItems: "center", $flexGap: 4, children: [
36
+ /* @__PURE__ */ e($, { src: d.ALIEN_4, width: 20, height: 20, withLoader: !0 }),
37
+ /* @__PURE__ */ e(o, { $renderAs: "ub3-bold", $color: "BLACK", children: a ? h : "You" })
38
+ ] }),
39
+ /* @__PURE__ */ r(t, { $flexDirection: "row", $justifyContent: "center", $alignItems: "center", $flexGap: 4, children: [
40
+ /* @__PURE__ */ e(o, { $renderAs: "ub3-bold", $color: "BLACK", children: a ? "You" : u }),
41
+ /* @__PURE__ */ e(
42
+ $,
43
+ {
44
+ src: E === p.MALE ? d.MALE_AVATAR : d.FEMALE_AVATAR,
45
+ width: 20,
46
+ height: 20,
47
+ withLoader: !0
48
+ }
49
+ )
50
+ ] })
51
+ ] }),
52
+ /* @__PURE__ */ r(t, { $flexDirection: "row", $gap: 4, children: [
53
+ /* @__PURE__ */ e(
54
+ t,
55
+ {
56
+ $height: 8,
57
+ $width: `${i}%`,
58
+ $borderRadius: 4,
59
+ $background: c.STUDENT
60
+ }
61
+ ),
62
+ /* @__PURE__ */ e(
63
+ t,
64
+ {
65
+ $height: 8,
66
+ $width: `${n}%`,
67
+ $borderRadius: 4,
68
+ $background: c.TEACHER
69
+ }
70
+ )
71
+ ] }),
72
+ /* @__PURE__ */ r(t, { $flexDirection: "row", $alignItems: "center", $justifyContent: "space-between", children: [
73
+ /* @__PURE__ */ r(o, { $renderAs: "ab2-black", $color: c.STUDENT, children: [
74
+ i,
75
+ " %"
76
+ ] }),
77
+ /* @__PURE__ */ r(o, { $renderAs: "ab2-black", $color: c.TEACHER, children: [
78
+ n,
79
+ " %"
80
+ ] })
81
+ ] })
82
+ ]
83
+ }
84
+ ) : /* @__PURE__ */ e(
85
+ l,
86
+ {
87
+ $gap: 12,
88
+ $gutter: 12,
89
+ $borderRadius: 12,
90
+ $background: "WHITE",
91
+ $borderColor: "GREY_2",
92
+ $alignItems: "center",
93
+ $justifyContent: "center",
94
+ children: /* @__PURE__ */ e(o, { $renderAs: "ub3-bold", $color: "BLACK", children: "Oops! There was insufficient data to calculate your Talk Ratio." })
95
+ }
96
+ );
97
+ });
98
+ export {
99
+ j as default
100
+ };
101
+ //# sourceMappingURL=talk-meter-view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"talk-meter-view.js","sources":["../../../../src/features/talk-meter/talk-meter-view/talk-meter-view.tsx"],"sourcesContent":["import type { TUserTypes } from '../../ui/types';\nimport type { FC } from 'react';\n\nimport { memo } from 'react';\n\nimport { ILLUSTRATIONS } from '../../../assets/illustrations/illustrations';\nimport Image from '../../ui/image/image';\nimport FlexView from '../../ui/layout/flex-view';\nimport Separator from '../../ui/separator/separator';\nimport Text from '../../ui/text/text';\nimport { getMeterColor } from '../helper';\nimport * as Styled from './talk-meter-view-styled';\n\nconst GENDER = {\n MALE: 'MALE',\n FEMALE: 'FEMALE',\n OTHER: 'OTHER',\n};\n\ninterface ITalkMeterView {\n stdName?: string;\n tchName?: string;\n stdRatio: number;\n tchRatio: number;\n tchGender: keyof typeof GENDER;\n userType: TUserTypes;\n}\n\nconst TalkMeterView: FC<ITalkMeterView> = memo(props => {\n const {\n stdName = 'Student',\n tchName = 'Teacher',\n stdRatio,\n tchRatio,\n tchGender,\n userType,\n } = props;\n const colors = getMeterColor(stdRatio);\n const diff = Math.abs(tchRatio - stdRatio);\n const isValid = tchRatio > 0 && stdRatio > 0 && diff < 95;\n const isTeacher = userType === 'TEACHER';\n\n if (!isValid) {\n return (\n <Styled.MeterWrapper\n $gap={12}\n $gutter={12}\n $borderRadius={12}\n $background=\"WHITE\"\n $borderColor=\"GREY_2\"\n $alignItems=\"center\"\n $justifyContent=\"center\"\n >\n <Text $renderAs=\"ub3-bold\" $color=\"BLACK\">\n Oops! There was insufficient data to calculate your Talk Ratio.\n </Text>\n </Styled.MeterWrapper>\n );\n }\n\n return (\n <Styled.MeterWrapper\n $gap={12}\n $gutter={12}\n $background=\"WHITE\"\n $borderColor=\"GREY_2\"\n $borderRadius={12}\n >\n <Text $renderAs=\"ub3-bold\" $align=\"center\">\n 50:50 TALK METER\n </Text>\n\n <Separator height={8} />\n <FlexView $flexDirection=\"row\" $alignItems=\"center\" $justifyContent=\"space-between\">\n <FlexView $flexDirection=\"row\" $justifyContent=\"center\" $alignItems=\"center\" $flexGap={4}>\n <Image src={ILLUSTRATIONS.ALIEN_4} width={20} height={20} withLoader />\n <Text $renderAs=\"ub3-bold\" $color=\"BLACK\">\n {isTeacher ? stdName : 'You'}\n </Text>\n </FlexView>\n <FlexView $flexDirection=\"row\" $justifyContent=\"center\" $alignItems=\"center\" $flexGap={4}>\n <Text $renderAs=\"ub3-bold\" $color=\"BLACK\">\n {isTeacher ? 'You' : tchName}\n </Text>\n <Image\n src={\n tchGender === GENDER.MALE ? ILLUSTRATIONS.MALE_AVATAR : ILLUSTRATIONS.FEMALE_AVATAR\n }\n width={20}\n height={20}\n withLoader\n />\n </FlexView>\n </FlexView>\n <FlexView $flexDirection=\"row\" $gap={4}>\n <FlexView\n $height={8}\n $width={`${stdRatio}%`}\n $borderRadius={4}\n $background={colors.STUDENT}\n />\n <FlexView\n $height={8}\n $width={`${tchRatio}%`}\n $borderRadius={4}\n $background={colors.TEACHER}\n />\n </FlexView>\n <FlexView $flexDirection=\"row\" $alignItems=\"center\" $justifyContent=\"space-between\">\n <Text $renderAs=\"ab2-black\" $color={colors.STUDENT}>\n {stdRatio} %\n </Text>\n <Text $renderAs=\"ab2-black\" $color={colors.TEACHER}>\n {tchRatio} %\n </Text>\n </FlexView>\n </Styled.MeterWrapper>\n );\n});\n\nexport default TalkMeterView;\n"],"names":["GENDER","TalkMeterView","memo","props","stdName","tchName","stdRatio","tchRatio","tchGender","userType","colors","getMeterColor","diff","isValid","isTeacher","jsxs","Styled.MeterWrapper","jsx","Text","Separator","FlexView","Image","ILLUSTRATIONS"],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ import { jsxs as c, Fragment as E, jsx as e } from "react/jsx-runtime";
2
+ import { memo as y } from "react";
3
+ import { getMeterColor as v } from "./helper.js";
4
+ import { useTalkMeter as w } from "./hooks/use-talk-meter.js";
5
+ import n from "./ripple/index.js";
6
+ import { Wrapper as x, CloseIcon as S } from "./talk-meter-styled.js";
7
+ import j from "./talk-meter-view/talk-meter-view.js";
8
+ const B = y((m) => {
9
+ const {
10
+ animated: t = !0,
11
+ userType: a,
12
+ teacherId: l,
13
+ studentId: d,
14
+ studentName: h,
15
+ teacherName: T,
16
+ teacherGender: p,
17
+ classStartTime: u,
18
+ canDisplayBatch: f,
19
+ teacherTalkTime: k,
20
+ studentTalkTime: A,
21
+ avPackageEnabled: M,
22
+ teacherClassroomId: N,
23
+ lastBatchReceivedNo: $,
24
+ onDismissMeter: g,
25
+ onMessageReceive: I
26
+ } = m, { canAnimateOut: R, canAnimateIn: r, stdRatio: o, tchRatio: C, handleDismiss: D } = w({
27
+ userType: a,
28
+ studentId: d,
29
+ teacherId: l,
30
+ classStartTime: u,
31
+ avPackageEnabled: M,
32
+ teacherClassroomId: N,
33
+ teacherTalkTime: k,
34
+ studentTalkTime: A,
35
+ lastBatchReceivedNo: $,
36
+ canDisplayBatch: f,
37
+ onMessageReceive: I,
38
+ onDismissMeter: g
39
+ }), i = v(o), s = a === "TEACHER";
40
+ return /* @__PURE__ */ c(
41
+ x,
42
+ {
43
+ $gutter: 12,
44
+ $gap: 12,
45
+ $isTeacher: s,
46
+ $animated: t,
47
+ $canAnimateIn: r,
48
+ $canAnimateOut: R,
49
+ children: [
50
+ t && r && /* @__PURE__ */ c(E, { children: [
51
+ /* @__PURE__ */ e(n, { delay: 800, withAudio: !0, color: i.STUDENT }),
52
+ /* @__PURE__ */ e(n, { delay: 1050, withAudio: !1, color: i.STUDENT })
53
+ ] }),
54
+ /* @__PURE__ */ e(
55
+ j,
56
+ {
57
+ userType: a,
58
+ tchName: T,
59
+ stdName: h,
60
+ tchRatio: C,
61
+ stdRatio: o,
62
+ tchGender: p
63
+ }
64
+ ),
65
+ t && !s && /* @__PURE__ */ e(S, { onClick: D })
66
+ ]
67
+ }
68
+ );
69
+ }), V = B;
70
+ export {
71
+ V as default
72
+ };
73
+ //# sourceMappingURL=talk-meter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"talk-meter.js","sources":["../../../src/features/talk-meter/talk-meter.tsx"],"sourcesContent":["import type { ITalkMeterProps } from './talk-meter-types';\nimport type { FC } from 'react';\n\nimport { memo } from 'react';\n\nimport { getMeterColor } from './helper';\nimport { useTalkMeter } from './hooks/use-talk-meter';\nimport Ripple from './ripple';\nimport * as Styled from './talk-meter-styled';\nimport TalkMeterView from './talk-meter-view/talk-meter-view';\n\nconst TalkMeter: FC<ITalkMeterProps> = memo(props => {\n const {\n animated = true,\n userType,\n teacherId,\n studentId,\n studentName,\n teacherName,\n teacherGender,\n classStartTime,\n canDisplayBatch,\n teacherTalkTime,\n studentTalkTime,\n avPackageEnabled,\n teacherClassroomId,\n lastBatchReceivedNo,\n onDismissMeter,\n onMessageReceive,\n } = props;\n\n const { canAnimateOut, canAnimateIn, stdRatio, tchRatio, handleDismiss } = useTalkMeter({\n userType,\n studentId,\n teacherId,\n classStartTime,\n avPackageEnabled,\n teacherClassroomId,\n teacherTalkTime,\n studentTalkTime,\n lastBatchReceivedNo,\n canDisplayBatch,\n onMessageReceive,\n onDismissMeter,\n });\n\n const colors = getMeterColor(stdRatio);\n const isTeacher = userType === 'TEACHER';\n\n return (\n <Styled.Wrapper\n $gutter={12}\n $gap={12}\n $isTeacher={isTeacher}\n $animated={animated}\n $canAnimateIn={canAnimateIn}\n $canAnimateOut={canAnimateOut}\n >\n {animated && canAnimateIn && (\n <>\n <Ripple delay={800} withAudio color={colors.STUDENT} />\n <Ripple delay={1050} withAudio={false} color={colors.STUDENT} />\n </>\n )}\n <TalkMeterView\n userType={userType}\n tchName={teacherName}\n stdName={studentName}\n tchRatio={tchRatio}\n stdRatio={stdRatio}\n tchGender={teacherGender}\n />\n {animated && !isTeacher && <Styled.CloseIcon onClick={handleDismiss} />}\n </Styled.Wrapper>\n );\n});\n\nexport default TalkMeter;\n"],"names":["TalkMeter","memo","props","animated","userType","teacherId","studentId","studentName","teacherName","teacherGender","classStartTime","canDisplayBatch","teacherTalkTime","studentTalkTime","avPackageEnabled","teacherClassroomId","lastBatchReceivedNo","onDismissMeter","onMessageReceive","canAnimateOut","canAnimateIn","stdRatio","tchRatio","handleDismiss","useTalkMeter","colors","getMeterColor","isTeacher","jsxs","Styled.Wrapper","Fragment","jsx","Ripple","TalkMeterView","Styled.CloseIcon","TalkMeter$1"],"mappings":";;;;;;;AAWA,MAAMA,IAAiCC,EAAK,CAASC,MAAA;AAC7C,QAAA;AAAA,IACJ,UAAAC,IAAW;AAAA,IACX,UAAAC;AAAA,IACA,WAAAC;AAAA,IACA,WAAAC;AAAA,IACA,aAAAC;AAAA,IACA,aAAAC;AAAA,IACA,eAAAC;AAAA,IACA,gBAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,kBAAAC;AAAA,IACA,oBAAAC;AAAA,IACA,qBAAAC;AAAA,IACA,gBAAAC;AAAA,IACA,kBAAAC;AAAA,EACE,IAAAhB,GAEE,EAAE,eAAAiB,GAAe,cAAAC,GAAc,UAAAC,GAAU,UAAAC,GAAU,eAAAC,MAAkBC,EAAa;AAAA,IACtF,UAAApB;AAAA,IACA,WAAAE;AAAA,IACA,WAAAD;AAAA,IACA,gBAAAK;AAAA,IACA,kBAAAI;AAAA,IACA,oBAAAC;AAAA,IACA,iBAAAH;AAAA,IACA,iBAAAC;AAAA,IACA,qBAAAG;AAAA,IACA,iBAAAL;AAAA,IACA,kBAAAO;AAAA,IACA,gBAAAD;AAAA,EAAA,CACD,GAEKQ,IAASC,EAAcL,CAAQ,GAC/BM,IAAYvB,MAAa;AAG7B,SAAA,gBAAAwB;AAAA,IAACC;AAAAA,IAAA;AAAA,MACC,SAAS;AAAA,MACT,MAAM;AAAA,MACN,YAAYF;AAAA,MACZ,WAAWxB;AAAA,MACX,eAAeiB;AAAA,MACf,gBAAgBD;AAAA,MAEf,UAAA;AAAA,QAAAhB,KAAYiB,KAET,gBAAAQ,EAAAE,GAAA,EAAA,UAAA;AAAA,UAAA,gBAAAC,EAACC,KAAO,OAAO,KAAK,WAAS,IAAC,OAAOP,EAAO,SAAS;AAAA,UACrD,gBAAAM,EAACC,KAAO,OAAO,MAAM,WAAW,IAAO,OAAOP,EAAO,SAAS;AAAA,QAAA,GAChE;AAAA,QAEF,gBAAAM;AAAA,UAACE;AAAA,UAAA;AAAA,YACC,UAAA7B;AAAA,YACA,SAASI;AAAA,YACT,SAASD;AAAA,YACT,UAAAe;AAAA,YACA,UAAAD;AAAA,YACA,WAAWZ;AAAA,UAAA;AAAA,QACb;AAAA,QACCN,KAAY,CAACwB,KAAa,gBAAAI,EAACG,GAAA,EAAiB,SAASX,GAAe;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAG3E,CAAC,GAEDY,IAAenC;"}
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sources":["../../../../../src/features/trial-session/comps/trial-circle-game/constants.ts"],"sourcesContent":["import { ProjectType } from '../../../circle-games/games/web-view/enums';\n\nexport const GAME_CONTAINER_HEIGHT = 530;\nexport const GAME_CONTAINER_WIDTH = 336;\n\nexport const label: Omit<Record<ProjectType, string>, 'table'> = {\n [ProjectType.GAME]: 'Game Time!',\n [ProjectType.PUZZLE]: 'Puzzle Time!',\n [ProjectType.LESSON]: 'Mental Math',\n};\n"],"names":["GAME_CONTAINER_HEIGHT","GAME_CONTAINER_WIDTH","ProjectType"],"mappings":";AAEO,MAAMA,IAAwB,KACxBC,IAAuB;AAGjCC,EAAY,OAAZ,IACAA,EAAY,SAAZ,IACAA,EAAY,SAAZ;"}
1
+ {"version":3,"file":"constants.js","sources":["../../../../../src/features/trial-session/comps/trial-circle-game/constants.ts"],"sourcesContent":["import { ProjectType } from '../../../circle-games/games/web-view/enums';\n\nexport const GAME_CONTAINER_HEIGHT = 530;\nexport const GAME_CONTAINER_WIDTH = 336;\n\nexport const label: Record<ProjectType, string> = {\n [ProjectType.GAME]: 'Game Time!',\n [ProjectType.PUZZLE]: 'Puzzle Time!',\n [ProjectType.LESSON]: 'Mental Math',\n};\n"],"names":["GAME_CONTAINER_HEIGHT","GAME_CONTAINER_WIDTH","ProjectType"],"mappings":";AAEO,MAAMA,IAAwB,KACxBC,IAAuB;AAGjCC,EAAY,OAAZ,IACAA,EAAY,SAAZ,IACAA,EAAY,SAAZ;"}
@@ -1 +1 @@
1
- {"version":3,"file":"trial-circle-game.js","sources":["../../../../../src/features/trial-session/comps/trial-circle-game/trial-circle-game.tsx"],"sourcesContent":["import type {\n ILessonWebGameProps,\n IMultiplayerWebGameProps,\n IPlayer,\n IPlayerStats,\n IPuzzleWebGameProps,\n} from '../../../circle-games/games/web-view/web-view-types';\n\nimport { memo, useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { v4 as uuidv4 } from 'uuid';\n\nimport { getTimeStrInFormatHMS } from '../../../../helpers/date-time';\nimport { ProjectType } from '../../../circle-games/games/web-view/enums';\nimport { useWebViewGames } from '../../../circle-games/games/web-view/hooks/use-webview-games';\nimport { WebView } from '../../../circle-games/games/web-view/web-view';\nimport FlexView from '../../../ui/layout/flex-view';\nimport Separator from '../../../ui/separator/separator';\nimport Text from '../../../ui/text/text';\nimport { useTrialSessionContext } from '../../context/use-trial-session-context';\nimport { TrialPageId } from '../../trial-session-constants';\nimport { TrialCircleGameLaunchScreen } from './trial-circle-game-launch-screen/trial-circle-game-launch-screen';\nimport * as Styled from './trial-circle-game-styled';\n\nconst PROJECT_TYPE_MAP: Partial<Record<TrialPageId, Omit<ProjectType, ProjectType.TABLE>>> = {\n [TrialPageId.CIRCLE_GAME]: ProjectType.GAME,\n [TrialPageId.CIRCLE_PUZZLE]: ProjectType.PUZZLE,\n [TrialPageId.CIRCLE_SKILL]: ProjectType.LESSON,\n};\n\nconst TrialCircleGame = memo(() => {\n const { slideConfig, trialGameUrl, circleGames, formData, handleInfoMessage, updateSlideConfig } =\n useTrialSessionContext();\n const {\n showCircleGameScreen = true,\n isCircleGamePlayed = false,\n isCirclePuzzleSolved = false,\n isCircleSkillCompleted = false,\n accuracyStr = '',\n totalTimeTaken = 0,\n matchmakingId,\n } = formData || {};\n const webViewRef = useRef<HTMLIFrameElement>(null);\n const { playGame } = useWebViewGames({ webViewRef });\n const [isLoading, setIsLoading] = useState(true);\n\n const { header, id } = slideConfig;\n const projectType = PROJECT_TYPE_MAP[id];\n const { circleConfig, playerDetails } = circleGames;\n const { games, puzzles, lessons } = circleConfig ?? {};\n\n const isPlayed = useMemo(() => {\n const playedStats = {\n [ProjectType.GAME]: isCircleGamePlayed,\n [ProjectType.PUZZLE]: isCirclePuzzleSolved,\n [ProjectType.LESSON]: isCircleSkillCompleted,\n };\n\n return playedStats;\n }, [isCircleGamePlayed, isCirclePuzzleSolved, isCircleSkillCompleted]);\n\n const assetUrl = useMemo(() => {\n const url: Omit<Record<ProjectType, string>, ProjectType.TABLE> = {\n [ProjectType.GAME]: isCircleGamePlayed ? games.game_card : games.tutorial,\n [ProjectType.PUZZLE]: isCirclePuzzleSolved ? puzzles.game_card : puzzles.tutorial,\n [ProjectType.LESSON]: isCircleSkillCompleted ? lessons.game_card : lessons.tutorial,\n };\n\n return projectType\n ? url[projectType as keyof Omit<Record<ProjectType, string>, ProjectType.TABLE>]\n : '';\n }, [\n projectType,\n games.game_card,\n games.tutorial,\n puzzles.game_card,\n puzzles.tutorial,\n lessons.game_card,\n lessons.tutorial,\n isCircleGamePlayed,\n isCirclePuzzleSolved,\n isCircleSkillCompleted,\n ]);\n\n const descriptionHeader = useMemo(() => {\n if (projectType === ProjectType.PUZZLE && isCirclePuzzleSolved) {\n return \"You've solved it!\";\n }\n\n return '';\n }, [projectType, isCirclePuzzleSolved]);\n\n const { circle_username, userId, grade, user_avatar, playerType } = playerDetails ?? {};\n\n const playerData: IPlayer = {\n id: userId,\n username: circle_username,\n grade: grade,\n avatar: user_avatar,\n playerType,\n };\n\n const projectDetails = useMemo(() => {\n const commonConfig = {\n joinByRoomId: matchmakingId,\n enableCloseButton: false,\n enablePlayerTurnIndicators: true,\n enableSync: true,\n };\n\n if (projectType === ProjectType.GAME) {\n return {\n ...commonConfig,\n projectId: games.project_id,\n variant: games.variant,\n projectType: ProjectType.GAME,\n } as IMultiplayerWebGameProps;\n }\n\n if (projectType === ProjectType.PUZZLE) {\n return {\n ...commonConfig,\n projectId: puzzles.project_id,\n variant: puzzles.variant,\n question: puzzles.question,\n askHintPermission: false,\n projectType: ProjectType.PUZZLE,\n } as IPuzzleWebGameProps;\n }\n\n return {\n ...commonConfig,\n projectId: lessons.project_id,\n variant: lessons.variant,\n miniGameIdentifier: lessons.mini_game_identifier,\n sessionId: lessons.session_id,\n targetQuestions: lessons.target_questions,\n projectType: ProjectType.LESSON,\n } as ILessonWebGameProps;\n\n // return commonConfig;\n }, [games, puzzles, lessons, projectType, matchmakingId]);\n\n const onGameLoad = useCallback(() => {\n setIsLoading(false);\n }, []);\n\n const handleBack = useCallback(() => {\n setIsLoading(true);\n if (\n projectType === ProjectType.GAME ||\n projectType === ProjectType.PUZZLE ||\n projectType === ProjectType.LESSON\n ) {\n updateSlideConfig({ showCircleGameScreen: true, matchmakingId: uuidv4() });\n }\n }, [projectType, updateSlideConfig]);\n\n const onPlay = useCallback(() => {\n updateSlideConfig({ showCircleGameScreen: false, accuracyStr: '', totalTimeTaken: 0 });\n }, [updateSlideConfig]);\n\n const handleGameFinish = useCallback(\n (playerStats: IPlayerStats) => {\n setIsLoading(true);\n if (projectType === ProjectType.LESSON) {\n updateSlideConfig({\n accuracyStr: playerStats.value,\n totalTimeTaken: playerStats.timeSpent,\n isCircleSkillCompleted: true,\n showCircleGameScreen: true,\n matchmakingId: uuidv4(),\n });\n } else if (projectType === ProjectType.GAME) {\n updateSlideConfig({\n isCircleGamePlayed: true,\n showCircleGameScreen: true,\n matchmakingId: uuidv4(),\n });\n } else if (projectType === ProjectType.PUZZLE) {\n updateSlideConfig({\n isCirclePuzzleSolved: true,\n showCircleGameScreen: true,\n matchmakingId: uuidv4(),\n });\n }\n },\n [updateSlideConfig, projectType],\n );\n\n const getCustEle = useCallback(() => {\n if (accuracyStr && totalTimeTaken) {\n return (\n <>\n <FlexView $flexDirection=\"row\">\n <Text $renderAs=\"ab2\" $color=\"WHITE\">\n Finished in\n </Text>\n <Separator width={5} />\n <Text $renderAs=\"ab2-bold\" $color=\"WHITE\">\n {getTimeStrInFormatHMS(totalTimeTaken)}\n </Text>\n </FlexView>\n <Separator height={20} />\n <FlexView $flexDirection=\"row\">\n <Text $renderAs=\"ab2\" $color=\"WHITE\">\n Accuracy:\n </Text>\n <Separator width={5} />\n <Text $renderAs=\"ab2-bold\" $color=\"WHITE\">\n {accuracyStr}\n </Text>\n </FlexView>\n </>\n );\n }\n\n return null;\n }, [accuracyStr, totalTimeTaken]);\n\n useEffect(() => {\n if (!isLoading && !showCircleGameScreen) {\n playGame();\n }\n }, [showCircleGameScreen, playGame, isLoading]);\n\n return (\n <Styled.GameContainer>\n <Separator height={16} />\n <Text $renderAs=\"ah3-bold\" $color=\"WHITE_T_87\" $align=\"center\" $marginBottom={16}>\n {header}\n </Text>\n <Styled.GameWrapper>\n {showCircleGameScreen && (\n <Styled.GameLaunchOverlay>\n <TrialCircleGameLaunchScreen\n assetUrl={assetUrl}\n assetUrlType={assetUrl.endsWith('mp4') ? 'video' : 'lottie'}\n descriptionHeader={descriptionHeader}\n playerType={playerType}\n isLoading={isLoading}\n isGamePlayed={\n (projectType &&\n isPlayed[\n projectType as keyof Omit<Record<ProjectType, string>, ProjectType.TABLE>\n ]) ??\n false\n }\n onPlay={onPlay}\n custEle={projectType === ProjectType.LESSON ? getCustEle() : undefined}\n celebrationText={\n projectType &&\n isPlayed[projectType as keyof Omit<Record<ProjectType, string>, ProjectType.TABLE>]\n ? 'WELL DONE!'\n : ''\n }\n />\n </Styled.GameLaunchOverlay>\n )}\n {matchmakingId && (\n <WebView\n key={matchmakingId}\n ref={webViewRef}\n height=\"100%\"\n width=\"100%\"\n baseUrl={trialGameUrl}\n playerDetails={playerData}\n projectDetails={projectDetails}\n onGameLoad={onGameLoad}\n onBack={handleBack}\n handleInfoMessage={handleInfoMessage}\n onGamePlayFinish={handleGameFinish}\n parentDomain={window.location.origin}\n />\n )}\n </Styled.GameWrapper>\n </Styled.GameContainer>\n );\n});\n\nexport default TrialCircleGame;\n"],"names":["PROJECT_TYPE_MAP","TrialPageId","ProjectType","TrialCircleGame","memo","slideConfig","trialGameUrl","circleGames","formData","handleInfoMessage","updateSlideConfig","useTrialSessionContext","showCircleGameScreen","isCircleGamePlayed","isCirclePuzzleSolved","isCircleSkillCompleted","accuracyStr","totalTimeTaken","matchmakingId","webViewRef","useRef","playGame","useWebViewGames","isLoading","setIsLoading","useState","header","id","projectType","circleConfig","playerDetails","games","puzzles","lessons","isPlayed","useMemo","assetUrl","url","descriptionHeader","circle_username","userId","grade","user_avatar","playerType","playerData","projectDetails","commonConfig","onGameLoad","useCallback","handleBack","uuidv4","onPlay","handleGameFinish","playerStats","getCustEle","jsxs","Fragment","FlexView","jsx","Text","Separator","getTimeStrInFormatHMS","useEffect","Styled.GameContainer","Styled.GameWrapper","Styled.GameLaunchOverlay","TrialCircleGameLaunchScreen","WebView"],"mappings":"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"}
1
+ {"version":3,"file":"trial-circle-game.js","sources":["../../../../../src/features/trial-session/comps/trial-circle-game/trial-circle-game.tsx"],"sourcesContent":["import type { GameId, LessonId, PuzzleId } from '../../../circle-games/games/web-view/enums';\nimport type {\n ILessonWebGameProps,\n IMultiplayerWebGameProps,\n IPlayer,\n IPlayerStats,\n IPuzzleWebGameProps,\n} from '../../../circle-games/games/web-view/web-view-types';\n\nimport { memo, useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { v4 as uuidv4 } from 'uuid';\n\nimport { getTimeStrInFormatHMS } from '../../../../helpers/date-time';\nimport { ProjectType } from '../../../circle-games/games/web-view/enums';\nimport { useWebViewGames } from '../../../circle-games/games/web-view/hooks/use-webview-games';\nimport { WebView } from '../../../circle-games/games/web-view/web-view';\nimport FlexView from '../../../ui/layout/flex-view';\nimport Separator from '../../../ui/separator/separator';\nimport Text from '../../../ui/text/text';\nimport { useTrialSessionContext } from '../../context/use-trial-session-context';\nimport { TrialPageId } from '../../trial-session-constants';\nimport { TrialCircleGameLaunchScreen } from './trial-circle-game-launch-screen/trial-circle-game-launch-screen';\nimport * as Styled from './trial-circle-game-styled';\n\nconst PROJECT_TYPE_MAP: Partial<Record<TrialPageId, ProjectType>> = {\n [TrialPageId.CIRCLE_GAME]: ProjectType.GAME,\n [TrialPageId.CIRCLE_PUZZLE]: ProjectType.PUZZLE,\n [TrialPageId.CIRCLE_SKILL]: ProjectType.LESSON,\n};\n\nconst TrialCircleGame = memo(() => {\n const { slideConfig, trialGameUrl, circleGames, formData, handleInfoMessage, updateSlideConfig } =\n useTrialSessionContext();\n const {\n showCircleGameScreen = true,\n isCircleGamePlayed = false,\n isCirclePuzzleSolved = false,\n isCircleSkillCompleted = false,\n accuracyStr = '',\n totalTimeTaken = 0,\n matchmakingId,\n } = formData || {};\n const webViewRef = useRef<HTMLIFrameElement>(null);\n const { playGame } = useWebViewGames({ webViewRef });\n const [isLoading, setIsLoading] = useState(true);\n\n const { header, id } = slideConfig;\n const projectType = PROJECT_TYPE_MAP[id];\n const { circleConfig, playerDetails } = circleGames;\n const { games, puzzles, lessons } = circleConfig ?? {};\n\n const isPlayed = useMemo(() => {\n const playedStats: Record<ProjectType, boolean> = {\n [ProjectType.GAME]: isCircleGamePlayed,\n [ProjectType.PUZZLE]: isCirclePuzzleSolved,\n [ProjectType.LESSON]: isCircleSkillCompleted,\n };\n\n return playedStats;\n }, [isCircleGamePlayed, isCirclePuzzleSolved, isCircleSkillCompleted]);\n\n const assetUrl = useMemo(() => {\n const url: Record<ProjectType, string> = {\n [ProjectType.GAME]: isCircleGamePlayed ? games.game_card : games.tutorial,\n [ProjectType.PUZZLE]: isCirclePuzzleSolved ? puzzles.game_card : puzzles.tutorial,\n [ProjectType.LESSON]: isCircleSkillCompleted ? lessons.game_card : lessons.tutorial,\n };\n\n return projectType ? url[projectType] : '';\n }, [\n projectType,\n games.game_card,\n games.tutorial,\n puzzles.game_card,\n puzzles.tutorial,\n lessons.game_card,\n lessons.tutorial,\n isCircleGamePlayed,\n isCirclePuzzleSolved,\n isCircleSkillCompleted,\n ]);\n\n const descriptionHeader = useMemo(() => {\n if (projectType === ProjectType.PUZZLE && isCirclePuzzleSolved) {\n return \"You've solved it!\";\n }\n\n return '';\n }, [projectType, isCirclePuzzleSolved]);\n\n const { circle_username, userId, grade, user_avatar, playerType } = playerDetails ?? {};\n\n const playerData: IPlayer = {\n id: userId,\n username: circle_username,\n grade: grade,\n avatar: user_avatar,\n playerType,\n };\n\n const projectDetails = useMemo(() => {\n const commonConfig = {\n joinByRoomId: matchmakingId,\n enableCloseButton: false,\n enablePlayerTurnIndicators: true,\n enableSync: true,\n };\n\n if (projectType === ProjectType.GAME) {\n return {\n ...commonConfig,\n projectId: games.project_id as GameId,\n variant: games.variant,\n projectType: ProjectType.GAME,\n } as IMultiplayerWebGameProps;\n }\n\n if (projectType === ProjectType.PUZZLE) {\n return {\n ...commonConfig,\n projectId: puzzles.project_id as PuzzleId,\n variant: puzzles.variant,\n question: puzzles.question,\n askHintPermission: false,\n projectType: ProjectType.PUZZLE,\n } as IPuzzleWebGameProps;\n }\n\n return {\n ...commonConfig,\n projectId: lessons.project_id as LessonId,\n variant: lessons.variant,\n miniGameIdentifier: lessons.mini_game_identifier,\n sessionId: lessons.session_id,\n targetQuestions: lessons.target_questions,\n projectType: ProjectType.LESSON,\n } as ILessonWebGameProps;\n\n // return commonConfig;\n }, [games, puzzles, lessons, projectType, matchmakingId]);\n\n const onGameLoad = useCallback(() => {\n setIsLoading(false);\n }, []);\n\n const handleBack = useCallback(() => {\n setIsLoading(true);\n if (\n projectType === ProjectType.GAME ||\n projectType === ProjectType.PUZZLE ||\n projectType === ProjectType.LESSON\n ) {\n updateSlideConfig({ showCircleGameScreen: true, matchmakingId: uuidv4() });\n }\n }, [projectType, updateSlideConfig]);\n\n const onPlay = useCallback(() => {\n updateSlideConfig({ showCircleGameScreen: false, accuracyStr: '', totalTimeTaken: 0 });\n }, [updateSlideConfig]);\n\n const handleGameFinish = useCallback(\n (playerStats: IPlayerStats) => {\n setIsLoading(true);\n if (projectType === ProjectType.LESSON) {\n updateSlideConfig({\n accuracyStr: playerStats.value,\n totalTimeTaken: playerStats.timeSpent,\n isCircleSkillCompleted: true,\n showCircleGameScreen: true,\n matchmakingId: uuidv4(),\n });\n } else if (projectType === ProjectType.GAME) {\n updateSlideConfig({\n isCircleGamePlayed: true,\n showCircleGameScreen: true,\n matchmakingId: uuidv4(),\n });\n } else if (projectType === ProjectType.PUZZLE) {\n updateSlideConfig({\n isCirclePuzzleSolved: true,\n showCircleGameScreen: true,\n matchmakingId: uuidv4(),\n });\n }\n },\n [updateSlideConfig, projectType],\n );\n\n const getCustEle = useCallback(() => {\n if (accuracyStr && totalTimeTaken) {\n return (\n <>\n <FlexView $flexDirection=\"row\">\n <Text $renderAs=\"ab2\" $color=\"WHITE\">\n Finished in\n </Text>\n <Separator width={5} />\n <Text $renderAs=\"ab2-bold\" $color=\"WHITE\">\n {getTimeStrInFormatHMS(totalTimeTaken)}\n </Text>\n </FlexView>\n <Separator height={20} />\n <FlexView $flexDirection=\"row\">\n <Text $renderAs=\"ab2\" $color=\"WHITE\">\n Accuracy:\n </Text>\n <Separator width={5} />\n <Text $renderAs=\"ab2-bold\" $color=\"WHITE\">\n {accuracyStr}\n </Text>\n </FlexView>\n </>\n );\n }\n\n return null;\n }, [accuracyStr, totalTimeTaken]);\n\n useEffect(() => {\n if (!isLoading && !showCircleGameScreen) {\n playGame();\n }\n }, [showCircleGameScreen, playGame, isLoading]);\n\n return (\n <Styled.GameContainer>\n <Separator height={16} />\n <Text $renderAs=\"ah3-bold\" $color=\"WHITE_T_87\" $align=\"center\" $marginBottom={16}>\n {header}\n </Text>\n <Styled.GameWrapper>\n {showCircleGameScreen && (\n <Styled.GameLaunchOverlay>\n <TrialCircleGameLaunchScreen\n assetUrl={assetUrl}\n assetUrlType={assetUrl.endsWith('mp4') ? 'video' : 'lottie'}\n descriptionHeader={descriptionHeader}\n playerType={playerType}\n isLoading={isLoading}\n isGamePlayed={(projectType && isPlayed[projectType]) ?? false}\n onPlay={onPlay}\n custEle={projectType === ProjectType.LESSON ? getCustEle() : undefined}\n celebrationText={projectType && isPlayed[projectType] ? 'WELL DONE!' : ''}\n />\n </Styled.GameLaunchOverlay>\n )}\n {matchmakingId && (\n <WebView\n key={matchmakingId}\n ref={webViewRef}\n height=\"100%\"\n width=\"100%\"\n baseUrl={trialGameUrl}\n playerDetails={playerData}\n projectDetails={projectDetails}\n onGameLoad={onGameLoad}\n onBack={handleBack}\n handleInfoMessage={handleInfoMessage}\n onGamePlayFinish={handleGameFinish}\n parentDomain={window.location.origin}\n />\n )}\n </Styled.GameWrapper>\n </Styled.GameContainer>\n );\n});\n\nexport default TrialCircleGame;\n"],"names":["PROJECT_TYPE_MAP","TrialPageId","ProjectType","TrialCircleGame","memo","slideConfig","trialGameUrl","circleGames","formData","handleInfoMessage","updateSlideConfig","useTrialSessionContext","showCircleGameScreen","isCircleGamePlayed","isCirclePuzzleSolved","isCircleSkillCompleted","accuracyStr","totalTimeTaken","matchmakingId","webViewRef","useRef","playGame","useWebViewGames","isLoading","setIsLoading","useState","header","id","projectType","circleConfig","playerDetails","games","puzzles","lessons","isPlayed","useMemo","assetUrl","url","descriptionHeader","circle_username","userId","grade","user_avatar","playerType","playerData","projectDetails","commonConfig","onGameLoad","useCallback","handleBack","uuidv4","onPlay","handleGameFinish","playerStats","getCustEle","jsxs","Fragment","FlexView","jsx","Text","Separator","getTimeStrInFormatHMS","useEffect","Styled.GameContainer","Styled.GameWrapper","Styled.GameLaunchOverlay","TrialCircleGameLaunchScreen","WebView"],"mappings":"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"}