@cuemath/leap 2.8.36-link.0 → 2.8.36-link.2

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.
@@ -26,7 +26,7 @@ const N = 1e3 * 60, S = 20, v = 40, W = (p, i) => {
26
26
  canDisplayBatch: u,
27
27
  onMessageReceive: C,
28
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(
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, c = 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
30
  () => ({
31
31
  teacher_classroom_id: f,
32
32
  teacher_id: E,
@@ -36,35 +36,35 @@ const N = 1e3 * 60, S = 20, v = 40, W = (p, i) => {
36
36
  ), R = I(() => {
37
37
  k(!0), U(!1), P();
38
38
  }, [P]), A = I(
39
- (e, c = {}) => {
40
- y(e, { ...m, ...c });
39
+ (e, n = {}) => {
40
+ y(e, { ...m, ...n });
41
41
  },
42
42
  [y, m]
43
43
  ), h = I(
44
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 };
45
+ const n = c ? "TEACHER_TALK_TIME_UPDATED" : "STUDENT_TALK_TIME_UPDATED", M = c ? { teacher_speech_time: d.current } : { student_speech_time: o.current };
46
46
  A("TALK_METER_BATCH_SENT", {
47
47
  batch_no: e,
48
48
  ...M
49
49
  }), t && L(
50
- c,
50
+ n,
51
51
  {
52
52
  ...m,
53
53
  ...M,
54
54
  batch_no: e
55
55
  },
56
- n ? H : b
56
+ c ? H : b
57
57
  ), K.current = o.current;
58
58
  },
59
- [t, n, m, L, H, b, A]
59
+ [t, c, m, L, H, b, A]
60
60
  );
61
61
  return J({
62
- type: n ? "STUDENT_TALK_TIME_UPDATED" : "TEACHER_TALK_TIME_UPDATED",
62
+ type: c ? "STUDENT_TALK_TIME_UPDATED" : "TEACHER_TALK_TIME_UPDATED",
63
63
  onMessage: I(
64
- (e, c) => {
65
- C(), n && h(c.batch_no);
64
+ (e, n) => {
65
+ C(n), c && h(n.batch_no);
66
66
  },
67
- [n, C, h]
67
+ [c, C, h]
68
68
  )
69
69
  }), D(() => {
70
70
  r || (d.current = T, o.current = l);
@@ -77,9 +77,9 @@ const N = 1e3 * 60, S = 20, v = 40, W = (p, i) => {
77
77
  };
78
78
  }, [r, R]), D(() => {
79
79
  let e;
80
- return u && !r && (e = setInterval(() => {
81
- const { canDisplay: c } = W(a, s);
82
- c && (A("TALK_METER_BATCH_DISPLAYED", {
80
+ return a && u && !r && (e = setInterval(() => {
81
+ const { canDisplay: n } = W(a, s);
82
+ n && (A("TALK_METER_BATCH_DISPLAYED", {
83
83
  student_speech_time: o.current,
84
84
  teacher_speech_time: d.current,
85
85
  batch_no: s
@@ -89,16 +89,16 @@ const N = 1e3 * 60, S = 20, v = 40, W = (p, i) => {
89
89
  };
90
90
  }, [r, u, a, s, A]), D(() => {
91
91
  let e;
92
- return a && !n && (e = setInterval(() => {
93
- const { lastMinutesLeft: c, canSendBatch: M, batchNoToSend: x } = W(
92
+ return a && !c && (e = setInterval(() => {
93
+ const { lastMinutesLeft: n, canSendBatch: M, batchNoToSend: x } = W(
94
94
  a,
95
95
  s
96
96
  );
97
- c ? K.current !== o.current && h(x) : M && h(x);
97
+ n ? K.current !== o.current && h(x) : M && h(x);
98
98
  }, N / 6)), () => {
99
99
  e && clearInterval(e);
100
100
  };
101
- }, [a, n, s, h]), {
101
+ }, [a, c, s, h]), {
102
102
  canAnimateIn: r,
103
103
  canAnimateOut: Y,
104
104
  stdRatio: j,
@@ -1 +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; // classDuration / 2.75\nconst BATCH_TWO_MINUTE = 40; // classDuration / 5.5\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 (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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"}
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(data);\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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"}
@@ -1,7 +1,7 @@
1
- import i, { keyframes as o, css as s } from "styled-components";
2
- import p from "../../assets/line-icons/icons/cross.js";
3
- import l from "../ui/layout/flex-view.js";
4
- const r = o`
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
5
  0% {
6
6
  opacity: 0;
7
7
  transform: translate(0%, -100%) scale(0);
@@ -15,7 +15,7 @@ const r = o`
15
15
  transform: translate(0%, 0%) scale(1);
16
16
  height: 128px;
17
17
  }
18
- `, c = o`
18
+ `, c = a`
19
19
  0% {
20
20
  opacity: 1;
21
21
  transform: translate(0%, 0%) scale(1);
@@ -25,7 +25,7 @@ const r = o`
25
25
  transform: translate(0%, -100%) scale(1);
26
26
  height: 0px;
27
27
  }
28
- `, y = i(p)`
28
+ `, y = o(s)`
29
29
  position: absolute;
30
30
  top: 15px;
31
31
  right: 20px;
@@ -33,12 +33,12 @@ const r = o`
33
33
  width: 20px;
34
34
  height: 20px;
35
35
  z-index: 2;
36
- `, f = i(l)(
37
- ({ $isTeacher: n, $animated: t, $canAnimateIn: a, $canAnimateOut: e }) => `
36
+ `, f = o(r)(
37
+ ({ $isTeacher: n, $animated: i, $canAnimateIn: e, $canAnimateOut: p }) => t`
38
38
  width: 100%;
39
39
  max-width: 336px;
40
-
41
- ${t ? `
40
+
41
+ ${i ? `
42
42
  height: 0;
43
43
  opacity: 0;
44
44
  display: none;
@@ -47,34 +47,39 @@ const r = o`
47
47
  opacity: 1;
48
48
  display: flex;
49
49
  `}
50
-
51
- ${n ? null : s`
52
- display: ${t ? "none" : "flex"};
53
- top: ${t ? 70 : 0}px;
54
- right: ${t ? 10 : 0}px;
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
+ `}
55
61
  z-index: 100;
56
- position: ${t ? "fixed" : "relative"};
57
62
  `}
58
63
 
59
- ${a ? `
60
- animation-name: ${r};
61
- animation-duration: 800ms;
62
- animation-iteration-count: 1;
63
- animation-timing-function: ease-out;
64
- opacity: 1;
65
- display: flex;
66
- height: 128px;
67
- ` : null}
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}
68
73
 
69
- ${e ? `
70
- animation-name: ${c};
71
- animation-duration: 400ms;
72
- animation-iteration-count: 1;
73
- animation-timing-function: ease-out;
74
- opacity: 0;
75
- display: none;
76
- height: 0px;
77
- ` : null}
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}
78
83
  `
79
84
  );
80
85
  export {
@@ -1 +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 }) => `\n width: 100%;\n max-width: 336px;\n \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 \n ${\n !$isTeacher\n ? css`\n display: ${$animated ? 'none' : 'flex'};\n top: ${$animated ? 70 : 0}px;\n right: ${$animated ? 10 : 0}px;\n z-index: 100;\n position: ${$animated ? 'fixed' : 'relative'};\n `\n : null\n }\n \n ${\n $canAnimateIn\n ? `\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\n ${\n $canAnimateOut\n ? `\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);\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,EAAqB,MAAA;AAAA;AAAA;AAAA;AAAA,MAK1DF,IACI;AAAA;AAAA;AAAA;AAAA,cAKA;AAAA;AAAA;AAAA;AAAA,WAKN;AAAA;AAAA,MAGGD,IAQG,OAPAI;AAAA,uBACaH,IAAY,SAAS,MAAM;AAAA,mBAC/BA,IAAY,KAAK,CAAC;AAAA,qBAChBA,IAAY,KAAK,CAAC;AAAA;AAAA,wBAEfA,IAAY,UAAU,UAAU;AAAA,WAGpD;AAAA;AAAA,MAGEC,IACI;AAAA,8BACoBV,CAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAQ/B,IACN;AAAA;AAAA,MAGEW,IACI;AAAA,8BACoBT,CAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAQhC,IACN;AAAA;AAEJ;"}
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;"}
@@ -1,27 +1,27 @@
1
1
  import { jsx as e, jsxs as r } from "react/jsx-runtime";
2
- import { memo as T } from "react";
3
- import { ILLUSTRATIONS as a } from "../../../assets/illustrations/illustrations.js";
4
- import l from "../../ui/image/image.js";
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
5
  import t from "../../ui/layout/flex-view.js";
6
- import b from "../../ui/separator/separator.js";
6
+ import T from "../../ui/separator/separator.js";
7
7
  import o from "../../ui/text/text.js";
8
- import { getMeterColor as p } from "../helper.js";
9
- import { MeterWrapper as $ } from "./talk-meter-view-styled.js";
10
- const g = {
8
+ import { getMeterColor as g } from "../helper.js";
9
+ import { MeterWrapper as l } from "./talk-meter-view-styled.js";
10
+ const p = {
11
11
  MALE: "MALE",
12
12
  FEMALE: "FEMALE",
13
13
  OTHER: "OTHER"
14
- }, k = T((s) => {
14
+ }, j = b((s) => {
15
15
  const {
16
16
  stdName: h = "Student",
17
17
  tchName: u = "Teacher",
18
- stdRatio: i = 10,
19
- tchRatio: n = 20,
20
- tchGender: A = "MALE",
18
+ stdRatio: i,
19
+ tchRatio: n,
20
+ tchGender: E,
21
21
  userType: m
22
- } = s, c = p(i), E = Math.abs(n - i), f = n > 0 && i > 0 && E < 95, d = m === "TEACHER";
22
+ } = s, c = g(i), A = Math.abs(n - i), f = n > 0 && i > 0 && A < 95, a = m === "TEACHER";
23
23
  return f ? /* @__PURE__ */ r(
24
- $,
24
+ l,
25
25
  {
26
26
  $gap: 12,
27
27
  $gutter: 12,
@@ -30,18 +30,18 @@ const g = {
30
30
  $borderRadius: 12,
31
31
  children: [
32
32
  /* @__PURE__ */ e(o, { $renderAs: "ub3-bold", $align: "center", children: "50:50 TALK METER" }),
33
- /* @__PURE__ */ e(b, { height: 8 }),
33
+ /* @__PURE__ */ e(T, { height: 8 }),
34
34
  /* @__PURE__ */ r(t, { $flexDirection: "row", $alignItems: "center", $justifyContent: "space-between", children: [
35
35
  /* @__PURE__ */ r(t, { $flexDirection: "row", $justifyContent: "center", $alignItems: "center", $flexGap: 4, children: [
36
- /* @__PURE__ */ e(l, { src: a.ALIEN_4, width: 20, height: 20, withLoader: !0 }),
37
- /* @__PURE__ */ e(o, { $renderAs: "ub3-bold", $color: "BLACK", children: d ? h : "You" })
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
38
  ] }),
39
39
  /* @__PURE__ */ r(t, { $flexDirection: "row", $justifyContent: "center", $alignItems: "center", $flexGap: 4, children: [
40
- /* @__PURE__ */ e(o, { $renderAs: "ub3-bold", $color: "BLACK", children: d ? "You" : u }),
40
+ /* @__PURE__ */ e(o, { $renderAs: "ub3-bold", $color: "BLACK", children: a ? "You" : u }),
41
41
  /* @__PURE__ */ e(
42
- l,
42
+ $,
43
43
  {
44
- src: A === g.MALE ? a.MALE_AVATAR : a.FEMALE_AVATAR,
44
+ src: E === p.MALE ? d.MALE_AVATAR : d.FEMALE_AVATAR,
45
45
  width: 20,
46
46
  height: 20,
47
47
  withLoader: !0
@@ -81,9 +81,21 @@ const g = {
81
81
  ] })
82
82
  ]
83
83
  }
84
- ) : /* @__PURE__ */ e($, { $justifyContent: "center", $alignItems: "center", $gap: 12, $gutter: 12, children: /* @__PURE__ */ e(o, { $renderAs: "ub3-bold", $color: "BLACK", children: "Oops! There was insufficient data to calculate your Talk Ratio." }) });
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
+ );
85
97
  });
86
98
  export {
87
- k as default
99
+ j as default
88
100
  };
89
101
  //# sourceMappingURL=talk-meter-view.js.map
@@ -1 +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 = 10,\n tchRatio = 20,\n tchGender = 'MALE',\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 $justifyContent=\"center\" $alignItems=\"center\" $gap={12} $gutter={12}>\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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"}
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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"}
@@ -1,4 +1,4 @@
1
- import { jsxs as c, Fragment as g, jsx as e } from "react/jsx-runtime";
1
+ import { jsxs as c, Fragment as E, jsx as e } from "react/jsx-runtime";
2
2
  import { memo as y } from "react";
3
3
  import { getMeterColor as v } from "./helper.js";
4
4
  import { useTalkMeter as w } from "./hooks/use-talk-meter.js";
@@ -20,10 +20,10 @@ const B = y((m) => {
20
20
  studentTalkTime: A,
21
21
  avPackageEnabled: M,
22
22
  teacherClassroomId: N,
23
- lastBatchReceivedNo: I,
24
- onDismissMeter: R,
25
- onMessageReceive: C
26
- } = m, { canAnimateOut: D, canAnimateIn: r, stdRatio: o, tchRatio: E, handleDismiss: $ } = w({
23
+ lastBatchReceivedNo: $,
24
+ onDismissMeter: g,
25
+ onMessageReceive: I
26
+ } = m, { canAnimateOut: R, canAnimateIn: r, stdRatio: o, tchRatio: C, handleDismiss: D } = w({
27
27
  userType: a,
28
28
  studentId: d,
29
29
  teacherId: l,
@@ -32,20 +32,22 @@ const B = y((m) => {
32
32
  teacherClassroomId: N,
33
33
  teacherTalkTime: k,
34
34
  studentTalkTime: A,
35
- lastBatchReceivedNo: I,
35
+ lastBatchReceivedNo: $,
36
36
  canDisplayBatch: f,
37
- onMessageReceive: C,
38
- onDismissMeter: R
37
+ onMessageReceive: I,
38
+ onDismissMeter: g
39
39
  }), i = v(o), s = a === "TEACHER";
40
40
  return /* @__PURE__ */ c(
41
41
  x,
42
42
  {
43
+ $gutter: 12,
44
+ $gap: 12,
43
45
  $isTeacher: s,
44
46
  $animated: t,
45
47
  $canAnimateIn: r,
46
- $canAnimateOut: D,
48
+ $canAnimateOut: R,
47
49
  children: [
48
- t && r && /* @__PURE__ */ c(g, { children: [
50
+ t && r && /* @__PURE__ */ c(E, { children: [
49
51
  /* @__PURE__ */ e(n, { delay: 800, withAudio: !0, color: i.STUDENT }),
50
52
  /* @__PURE__ */ e(n, { delay: 1050, withAudio: !1, color: i.STUDENT })
51
53
  ] }),
@@ -55,12 +57,12 @@ const B = y((m) => {
55
57
  userType: a,
56
58
  tchName: T,
57
59
  stdName: h,
58
- tchRatio: E,
60
+ tchRatio: C,
59
61
  stdRatio: o,
60
62
  tchGender: p
61
63
  }
62
64
  ),
63
- t && !s && /* @__PURE__ */ e(S, { onClick: $ })
65
+ t && !s && /* @__PURE__ */ e(S, { onClick: D })
64
66
  ]
65
67
  }
66
68
  );
@@ -1 +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 $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,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
+ {"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;"}
package/dist/index.d.ts CHANGED
@@ -2633,14 +2633,14 @@ declare interface ITalkMeter {
2633
2633
  userType: TUserTypes;
2634
2634
  studentId: string;
2635
2635
  teacherId: string;
2636
- classStartTime: Date;
2637
- avPackageEnabled: boolean;
2636
+ classStartTime?: Date;
2637
+ avPackageEnabled?: boolean;
2638
2638
  teacherClassroomId: string;
2639
2639
  teacherTalkTime: number;
2640
2640
  studentTalkTime: number;
2641
2641
  lastBatchReceivedNo: number;
2642
2642
  canDisplayBatch: boolean;
2643
- onMessageReceive: () => void;
2643
+ onMessageReceive: (data: Record<string, unknown>) => void;
2644
2644
  onDismissMeter: () => void;
2645
2645
  }
2646
2646
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cuemath/leap",
3
- "version": "2.8.36-link.0",
3
+ "version": "2.8.36-link.2",
4
4
  "type": "module",
5
5
  "files": [
6
6
  "dist"