@nualang/nualang-ui-components 0.1.1131 → 0.1.1133

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.
@@ -97,7 +97,7 @@ const PlanButton = (0, _system.styled)(_material.Button)(({
97
97
  bgPrimary
98
98
  }) => ({
99
99
  textTransform: "none",
100
- marginTop: theme.spacing(3),
100
+ marginTop: theme.spacing(1),
101
101
  fontSize: "1rem",
102
102
  lineHeight: "2.5",
103
103
  borderRadius: theme.spacing(),
@@ -288,7 +288,7 @@ function SubscriptionPlan({
288
288
  color: plan.button.buttonColor || "primary",
289
289
  onClick: () => plan.button.onClick(),
290
290
  bgPrimary: plan.bgPrimary
291
- }, plan.button.buttonText), plan.planVersions && displayPlan && billingPeriod && currency && /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(PlanButton, {
291
+ }, plan.button.buttonText), plan.planVersions && displayPlan && billingPeriod && currency && /*#__PURE__*/_react.default.createElement("div", null, displayPlan.subButton && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(PlanButton, {
292
292
  id: "plan-button",
293
293
  fullWidth: true,
294
294
  variant: displayPlan.subButton.buttonVariant,
@@ -341,7 +341,7 @@ function SubscriptionPlan({
341
341
  sx: {
342
342
  fontSize: 15
343
343
  }
344
- })))), /*#__PURE__*/_react.default.createElement(PlanButton, {
344
+ }))))), displayPlan.buyButton && /*#__PURE__*/_react.default.createElement(PlanButton, {
345
345
  id: "buy-now-button",
346
346
  fullWidth: true,
347
347
  variant: displayPlan.buyButton.buttonVariant,
@@ -367,7 +367,6 @@ SubscriptionPlan.propTypes = {
367
367
  };
368
368
  SubscriptionPlan.defaultProps = {
369
369
  t: text => text,
370
- currency: "usd",
371
370
  billingPeriod: "yearly"
372
371
  };
373
372
  var _default = exports.default = SubscriptionPlan;
@@ -16,9 +16,13 @@ var _colors = require("@mui/material/colors");
16
16
  var _Checkbox = _interopRequireDefault(require("@mui/material/Checkbox"));
17
17
  var _reactBeautifulDnd = require("react-beautiful-dnd");
18
18
  var _DragHandle = _interopRequireDefault(require("@mui/icons-material/DragHandle"));
19
+ var _material = require("@mui/material");
20
+ var _iconsMaterial = require("@mui/icons-material");
19
21
  var _ResponsiveDialog = _interopRequireDefault(require("../ResponsiveDialog"));
20
22
  var _InputHelper = _interopRequireDefault(require("../../Forms/InputHelper"));
21
23
  var _debounce = _interopRequireDefault(require("lodash/debounce"));
24
+ var _nualas = _interopRequireDefault(require("../../img/nualas.svg"));
25
+ var _reactRouterDom = require("react-router-dom");
22
26
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
23
27
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
24
28
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
@@ -52,11 +56,16 @@ function CreateQuestion({
52
56
  update,
53
57
  forLangCharacters,
54
58
  learnLangCharacters,
59
+ script,
60
+ makeChatGptApiRequest,
61
+ values,
55
62
  ...otherProps
56
63
  }) {
57
64
  const [question, setQuestion] = (0, _react.useState)(otherProps.question);
58
65
  const [answer, setAnswer] = (0, _react.useState)(initialAnswerState);
59
66
  const [answerList, setAnswerList] = (0, _react.useState)(otherProps.answers);
67
+ const [isMessageGenerating, setIsMessageGenerating] = (0, _react.useState)(false);
68
+ const [errorMessage, setErrorMessage] = (0, _react.useState)(null);
60
69
  const handleAnswerInputChange = event => {
61
70
  const target = event.target;
62
71
  const value = target.type === "checkbox" ? target.checked : target.value;
@@ -131,6 +140,82 @@ function CreateQuestion({
131
140
  handleAddAnswerDebounced();
132
141
  }
133
142
  };
143
+ const extractJsonObject = response => {
144
+ let stack = [];
145
+ let startIndex = -1;
146
+ let endIndex = -1;
147
+ for (let i = 0; i < response.length; i++) {
148
+ if (response[i] === "{") {
149
+ if (stack.length === 0) {
150
+ startIndex = i;
151
+ }
152
+ stack.push("{");
153
+ } else if (response[i] === "}") {
154
+ stack.pop();
155
+ if (stack.length === 0) {
156
+ endIndex = i;
157
+ break;
158
+ }
159
+ }
160
+ }
161
+ if (startIndex !== -1 && endIndex !== -1) {
162
+ return response.substring(startIndex, endIndex + 1);
163
+ }
164
+ return "";
165
+ };
166
+ function validateResponse(response) {
167
+ if (typeof response !== "object" || response === null) {
168
+ return false;
169
+ }
170
+ if (typeof response.question !== "string") {
171
+ return false;
172
+ }
173
+ if (!Array.isArray(response.answers)) {
174
+ return false;
175
+ }
176
+ if (response.answers.length === 0) {
177
+ return false;
178
+ }
179
+ let hasCorrectAnswer = false;
180
+ for (const answer of response.answers) {
181
+ if (typeof answer !== "object" || answer === null) {
182
+ return false;
183
+ }
184
+ if (typeof answer.text !== "string" || typeof answer.correct !== "boolean" || typeof answer.type !== "string") {
185
+ return false;
186
+ }
187
+ if (answer.correct) {
188
+ hasCorrectAnswer = true;
189
+ }
190
+ }
191
+ return hasCorrectAnswer;
192
+ }
193
+ const handleGenerateAnswer = async () => {
194
+ try {
195
+ setIsMessageGenerating(true);
196
+ setErrorMessage(null);
197
+ const prompt = `Here is a script: ${JSON.stringify(script)}. Actor 1 is ${values.actor1} and Actor 2 is ${values.actor2} Please generate a new comprehension question based on the script that is completely unique to any existing questions, and provide it in JSON format with the keys 'question' and 'answers'. The 'question' key has the value of the string contraining the question text. The 'answers' key is an array of objects, where each answer object contains 'text', 'correct', and 'type' keys. The type should always be 'multichoice'. Ensure the new question is answered by the script, as the purpose of the question to the test the reader's understanding of the script.`;
198
+ const chatGptResponse = await makeChatGptApiRequest({
199
+ model: "gpt-3.5-turbo",
200
+ prompt
201
+ });
202
+ const jsonResponse = extractJsonObject(chatGptResponse);
203
+ const newQuestion = JSON.parse(jsonResponse);
204
+ if (!validateResponse(newQuestion)) {
205
+ throw new Error("Invalid response from GPT-3.5");
206
+ }
207
+ onSubmit({
208
+ question: newQuestion.question.trim(),
209
+ answers: newQuestion.answers
210
+ });
211
+ setIsMessageGenerating(false);
212
+ handleClose();
213
+ } catch (error) {
214
+ console.error(error);
215
+ setIsMessageGenerating(false);
216
+ setErrorMessage("There was problem generating the roleplay, please try again.");
217
+ }
218
+ };
134
219
  const title = update ? t("update_question") : t("add_question");
135
220
  const desc = update ? t("update_question_desc") : t("add_question_desc");
136
221
  return /*#__PURE__*/_react.default.createElement(_ResponsiveDialog.default, {
@@ -138,8 +223,57 @@ function CreateQuestion({
138
223
  handleClose: handleClose,
139
224
  handleSubmit: handleSubmit,
140
225
  submitText: title,
141
- dialogTitle: title
142
- }, /*#__PURE__*/_react.default.createElement(_DialogContentText.default, null, desc), /*#__PURE__*/_react.default.createElement(_InputHelper.default, {
226
+ dialogTitle: isMessageGenerating ? t("generating_question") : title,
227
+ isSubmitDisabled: isMessageGenerating
228
+ }, /*#__PURE__*/_react.default.createElement(_Grid.default, {
229
+ item: true,
230
+ xs: 12,
231
+ textAlign: "center",
232
+ sx: {
233
+ ...(!isMessageGenerating && {
234
+ display: "none"
235
+ })
236
+ },
237
+ mx: 2
238
+ }, /*#__PURE__*/_react.default.createElement("img", {
239
+ src: _nualas.default,
240
+ style: {
241
+ maxHeight: 230
242
+ },
243
+ alt: ""
244
+ })), /*#__PURE__*/_react.default.createElement(_Grid.default, {
245
+ item: true,
246
+ xs: 12,
247
+ sx: {
248
+ ...(!isMessageGenerating && {
249
+ display: "none"
250
+ })
251
+ },
252
+ mt: 2
253
+ }, /*#__PURE__*/_react.default.createElement(_material.LinearProgress, null)), !isMessageGenerating && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_Grid.default, {
254
+ item: true,
255
+ xs: 12,
256
+ mb: 2
257
+ }, /*#__PURE__*/_react.default.createElement(_material.Alert, {
258
+ severity: "info"
259
+ }, t("experimental_feature_desc_answer"), " -", " ", /*#__PURE__*/_react.default.createElement(_reactRouterDom.Link, {
260
+ to: "/contact"
261
+ }, t("contact_form"), "."))), /*#__PURE__*/_react.default.createElement(_material.Box, {
262
+ mb: 2
263
+ }, /*#__PURE__*/_react.default.createElement(_material.Button, {
264
+ onClick: handleGenerateAnswer,
265
+ color: "secondary",
266
+ variant: "contained",
267
+ startIcon: /*#__PURE__*/_react.default.createElement(_iconsMaterial.AutoFixHigh, null)
268
+ }, t("generate_question"))), /*#__PURE__*/_react.default.createElement(_DialogContentText.default, null, desc), /*#__PURE__*/_react.default.createElement(_Grid.default, {
269
+ container: true,
270
+ direction: "row",
271
+ justifyContent: "center",
272
+ alignItems: "flex-end"
273
+ }, /*#__PURE__*/_react.default.createElement(_Grid.default, {
274
+ item: true,
275
+ xs: 12
276
+ }, /*#__PURE__*/_react.default.createElement(_InputHelper.default, {
143
277
  t: t,
144
278
  value: question,
145
279
  onChange: e => setQuestion(e.target.value),
@@ -153,12 +287,7 @@ function CreateQuestion({
153
287
  variant: "outlined",
154
288
  multiline: true,
155
289
  characters: learnLangCharacters ? learnLangCharacters : null
156
- }), /*#__PURE__*/_react.default.createElement(_Grid.default, {
157
- container: true,
158
- direction: "row",
159
- justifyContent: "center",
160
- alignItems: "flex-end"
161
- }, /*#__PURE__*/_react.default.createElement(_Grid.default, {
290
+ })), /*#__PURE__*/_react.default.createElement(_Grid.default, {
162
291
  item: true,
163
292
  xs: 12
164
293
  }, /*#__PURE__*/_react.default.createElement(_InputHelper.default, {
@@ -176,7 +305,13 @@ function CreateQuestion({
176
305
  characters: forLangCharacters ? forLangCharacters : null,
177
306
  helperText: answer.text && answer.text.trim() !== "" ? t("answer_helper_text") : "",
178
307
  multiline: true
179
- }))), /*#__PURE__*/_react.default.createElement(_reactBeautifulDnd.DragDropContext, {
308
+ })), errorMessage && /*#__PURE__*/_react.default.createElement(_Grid.default, {
309
+ item: true,
310
+ xs: 12,
311
+ mt: 2
312
+ }, /*#__PURE__*/_react.default.createElement(_material.Alert, {
313
+ severity: "warning"
314
+ }, errorMessage))), /*#__PURE__*/_react.default.createElement(_reactBeautifulDnd.DragDropContext, {
180
315
  onDragEnd: handleOnDragEnd
181
316
  }, /*#__PURE__*/_react.default.createElement(_reactBeautifulDnd.Droppable, {
182
317
  droppableId: "answers"
@@ -237,7 +372,7 @@ function CreateQuestion({
237
372
  name: "correct"
238
373
  }),
239
374
  label: t("correct_answer")
240
- })))))), provided.placeholder))));
375
+ })))))), provided.placeholder)))));
241
376
  }
242
377
  CreateQuestion.defaultProps = {
243
378
  t: text => text,
@@ -53,6 +53,7 @@ function GenerateRoleplayDialog({
53
53
  const [previewMessages, setPreviewMessages] = (0, _react.useState)([]);
54
54
  const [values, setValues] = (0, _react.useState)(initialValues);
55
55
  const [errorMessage, setErrorMessage] = (0, _react.useState)(null);
56
+ const [generateQuestions, setGenerateQuestions] = (0, _react.useState)(false);
56
57
  const difficultyOptions = difficulties.map((d, idx) => {
57
58
  const keyId = `generate-roleplay-difficulty-options-${idx}`;
58
59
  return /*#__PURE__*/_react.default.createElement(_material.MenuItem, {
@@ -108,16 +109,43 @@ function GenerateRoleplayDialog({
108
109
  }
109
110
  }, [generatedRoleplay, generatedRoleplay.script, isGenerateRoleplayDialogOpen]);
110
111
  const removeExtraTextFromChatGptResponse = response => {
111
- let str = response;
112
- str = str.substring(str.indexOf("["));
113
- str = str.substring(0, str.indexOf("]") + "]".length);
114
- return str;
112
+ let stack = [];
113
+ let startIndex = -1;
114
+ let endIndex = -1;
115
+ for (let i = 0; i < response.length; i++) {
116
+ if (response[i] === "[") {
117
+ if (stack.length === 0) {
118
+ startIndex = i;
119
+ }
120
+ stack.push("[");
121
+ } else if (response[i] === "]") {
122
+ stack.pop();
123
+ if (stack.length === 0) {
124
+ endIndex = i;
125
+ break;
126
+ }
127
+ }
128
+ }
129
+ if (startIndex !== -1 && endIndex !== -1) {
130
+ return response.substring(startIndex, endIndex + 1);
131
+ }
132
+ return "";
115
133
  };
134
+ function fixMissingComma(jsonString) {
135
+ const fixedJsonString = jsonString.replace(/}\s*{/g, "},{");
136
+ try {
137
+ const jsonObject = JSON.parse(fixedJsonString);
138
+ return jsonObject;
139
+ } catch (error) {
140
+ console.error("Invalid JSON after attempting to fix:", error);
141
+ return null;
142
+ }
143
+ }
116
144
  const validateScript = script => {
117
145
  if (Array.isArray(script) && script.length > 0) {
118
146
  for (let index = 0; index < script.length; index++) {
119
147
  const scriptLine = script[index];
120
- if (!((scriptLine.actor === 1 || scriptLine.actor === 2) && script[0].text)) {
148
+ if (!((scriptLine.actor === 1 || scriptLine.actor === 2) && script[0].text) && !(scriptLine.question && Array.isArray(scriptLine.answers) && scriptLine.answers.some(answer => answer.correct === true))) {
121
149
  return false;
122
150
  }
123
151
  }
@@ -134,6 +162,7 @@ function GenerateRoleplayDialog({
134
162
  setErrorMessage("");
135
163
  let response;
136
164
  const prompt = usePdfContext ? `Create an informative conversation between 2 people ${values?.actor1?.name && values?.actor2?.name ? `'${values.actor1.name}' and '${values.actor2.name}' ` : ""} about the topic '${values.roleplayTopic}' in the language ${learnLang}.${values.roleplayDifficulty ? ` The conversation should be ${i18nLanguage === "en-US" ? "ACTFL" : "CEFR"} level '${t(values.roleplayDifficulty)}.'` : ""} Return the conversation inside an array, each text in the conversation should be inside an object in the array. Each object should have the keys actor and text. If the text belongs to person 1 then the key actor should equal to 1 else it should equal to 2. The key text should equal to the text in the conversation. Your response should be in JSON.` : `Create a conversation between 2 people ${values?.actor1?.name && values?.actor2?.name ? `'${values.actor1.name}' and '${values.actor2.name}' ` : ""}about the topic '${values.roleplayTopic}' in the language ${learnLang}.${values.roleplayDifficulty ? ` The conversation should be ${i18nLanguage === "en-US" ? "ACTFL" : "CEFR"} level '${t(values.roleplayDifficulty)}.'` : ""} Return the conversation inside an array, each text in the conversation should be inside an object in the array. Each object should have the keys actor and text. If the text belongs to person 1 then the key actor should equal to 1 else it should equal to 2. The key text should equal to the text in the conversation. Your response should be in JSON`;
165
+ const promptWithQuestions = usePdfContext ? `Create an informative conversation between 2 people ${values?.actor1?.name && values?.actor2?.name ? `'${values.actor1.name}' and '${values.actor2.name}' ` : ""} about the topic '${values.roleplayTopic}' in the language ${learnLang}.${values.roleplayDifficulty ? ` The conversation should be ${i18nLanguage === "en-US" ? "ACTFL" : "CEFR"} level '${t(values.roleplayDifficulty)}.'` : ""} The conversation should be returned inside a single array along with three comprehension questions related to the conversation. Each piece of dialogue and each question should be represented as an object in the array. For dialogue, the objects should have the keys 'actor' and 'text'. The 'actor' key should be set to 1 if the dialogue is spoken by the first actor, and 2 if it is spoken by the second actor. The 'text' key should be set to the dialogue text spoken by that actor. For questions, the objects should have the keys 'question' and 'answers'. The 'question' key should be set to the text of the question being asked. The 'answers' key should be an array of three objects, each representing a different answer to the question where only one is correct and two are incorrect. The objects in the 'answers' array should have the keys 'text', 'correct' and 'type'. The 'text' key should contain the answer text, 'correct' should be true for the correct answer and false for incorrect ones, and 'type' should always be equal to 'multichoice'. The entire output must be in a single JSON array without separating the dialogue and questions into different arrays.` : `Create a conversation between 2 people ${values?.actor1?.name && values?.actor2?.name ? `'${values.actor1.name}' and '${values.actor2.name}' ` : ""}about the topic '${values.roleplayTopic}' in the language ${learnLang}.${values.roleplayDifficulty ? ` The conversation should be ${i18nLanguage === "en-US" ? "ACTFL" : "CEFR"} level '${t(values.roleplayDifficulty)}.'` : ""} The conversation should be returned inside a single array along with three comprehension questions related to the conversation. Each piece of dialogue and each question should be represented as an object in the array. For dialogue, the objects should have the keys 'actor' and 'text'. The 'actor' key should be set to 1 if the dialogue is spoken by the first actor, and 2 if it is spoken by the second actor. The 'text' key should be set to the dialogue text spoken by that actor. For questions, the objects should have the keys 'question' and 'answers'. The 'question' key should be set to the text of the question being asked. The 'answers' key should be an array of three objects, each representing a different answer to the question where only one is correct and two are incorrect. The objects in the 'answers' array should have the keys 'text', 'correct' and 'type'. The 'text' key should contain the answer text, 'correct' should be true for the correct answer and false for incorrect ones, and 'type' should always be equal to 'multichoice'. The entire output must be in a single JSON array without separating the dialogue and questions into different arrays.`;
137
166
  const roleplayTemplate = {
138
167
  roleplayId: (0, _utils.randomId)(),
139
168
  roleplayName: values.roleplayTopic,
@@ -144,10 +173,11 @@ function GenerateRoleplayDialog({
144
173
  learnLang: learnLang
145
174
  };
146
175
  const voices = getAllVoices();
176
+ const activePrompt = generateQuestions ? promptWithQuestions : prompt;
147
177
  if (usePdfContext) {
148
178
  const getAiQueryResponse = await makeCandooAIQuery({
149
179
  modelName: "gpt-4",
150
- customString: prompt,
180
+ customString: activePrompt,
151
181
  createdBy: currentUser.Username,
152
182
  email: currentUser.UserAttributes.email,
153
183
  source: "nualang",
@@ -166,12 +196,12 @@ function GenerateRoleplayDialog({
166
196
  } else {
167
197
  const chatGptResponse = await makeChatGptApiRequest({
168
198
  model: "gpt-3.5-turbo",
169
- prompt
199
+ prompt: activePrompt
170
200
  });
171
201
  response = chatGptResponse;
172
202
  }
173
203
  const jsonResponse = removeExtraTextFromChatGptResponse(response);
174
- const roleplayScript = JSON.parse(jsonResponse);
204
+ const roleplayScript = fixMissingComma(jsonResponse);
175
205
  if (validateScript(roleplayScript)) {
176
206
  const generatedRoleplay = {
177
207
  ...roleplayTemplate,
@@ -327,7 +357,16 @@ function GenerateRoleplayDialog({
327
357
  margin: "normal",
328
358
  variant: "outlined",
329
359
  fullWidth: true
330
- }, roleplayLengthOptions)), process.env.REACT_APP_STAGE === "dev" && !isRoleplayGenerating && pdfDetails && pdfVectorStoreCreationStatus === "CREATION_COMPLETE" && /*#__PURE__*/_react.default.createElement(_material.Grid, {
360
+ }, roleplayLengthOptions)), !isRoleplayGenerating && /*#__PURE__*/_react.default.createElement(_material.FormGroup, null, /*#__PURE__*/_react.default.createElement(_material.Grid, {
361
+ item: true,
362
+ xs: 12
363
+ }, /*#__PURE__*/_react.default.createElement(_material.FormControlLabel, {
364
+ control: /*#__PURE__*/_react.default.createElement(_material.Checkbox, {
365
+ checked: generateQuestions,
366
+ onChange: e => setGenerateQuestions(e.target.checked)
367
+ }),
368
+ label: "Generate Questions"
369
+ }))), process.env.REACT_APP_STAGE === "dev" && !isRoleplayGenerating && pdfDetails && pdfVectorStoreCreationStatus === "CREATION_COMPLETE" && /*#__PURE__*/_react.default.createElement(_material.Grid, {
331
370
  item: true,
332
371
  xs: 12
333
372
  }, /*#__PURE__*/_react.default.createElement(_material.Typography, null, /*#__PURE__*/_react.default.createElement(_material.Box, {
@@ -17,7 +17,11 @@ var _googleClassroom = _interopRequireDefault(require("../../img/google-classroo
17
17
  var _nualangLogoPrimary = _interopRequireDefault(require("../../img/nualang-logo-primary.svg"));
18
18
  var _Image = _interopRequireDefault(require("@mui/icons-material/Image"));
19
19
  var _ResponsiveDialog = _interopRequireDefault(require("../ResponsiveDialog"));
20
+ var _DialogTitle = _interopRequireDefault(require("@mui/material/DialogTitle"));
21
+ var _DialogContent = _interopRequireDefault(require("@mui/material/DialogContent"));
20
22
  var _ArrowBack = _interopRequireDefault(require("@mui/icons-material/ArrowBack"));
23
+ var _QrCode = _interopRequireDefault(require("@mui/icons-material/QrCode"));
24
+ var _qrcode = _interopRequireDefault(require("qrcode.react"));
21
25
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
22
26
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
23
27
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
@@ -72,6 +76,7 @@ function InviteDialog({
72
76
  const [inviteLinkState, setInviteLinkState] = (0, _react.useState)(inviteLink);
73
77
  const [classroomEnrolmentKey, setClassroomEnrolmentKey] = (0, _react.useState)(inviteType === "classroom" ? enrolmentKey : null);
74
78
  const [teachClassroomsState, setTeachClassroomsState] = (0, _react.useState)(teachClassrooms);
79
+ const [showQRCode, setShowQRCode] = (0, _react.useState)(false);
75
80
  const shareEventParams = {
76
81
  method: null,
77
82
  content_type: inviteTypeState,
@@ -157,6 +162,9 @@ function InviteDialog({
157
162
  const handleChangeTab = (event, newValue) => {
158
163
  setTabValue(newValue);
159
164
  };
165
+ const toggleQRCodeDisplay = () => {
166
+ setShowQRCode(!showQRCode);
167
+ };
160
168
  const tabs = [{
161
169
  label: t("classrooms")
162
170
  }, {
@@ -300,6 +308,18 @@ function InviteDialog({
300
308
  borderRadius: "20px"
301
309
  }
302
310
  }, /*#__PURE__*/_react.default.createElement(_material.List, null, /*#__PURE__*/_react.default.createElement(_DialogContentText.default, null, t("or_invite_via")), /*#__PURE__*/_react.default.createElement(_material.ListItem, {
311
+ button: true,
312
+ disableGutters: true,
313
+ onClick: toggleQRCodeDisplay
314
+ }, /*#__PURE__*/_react.default.createElement(_material.ListItemAvatar, null, /*#__PURE__*/_react.default.createElement(_material.Avatar, {
315
+ variant: "rounded"
316
+ }, /*#__PURE__*/_react.default.createElement(_QrCode.default, {
317
+ sx: {
318
+ fontSize: "xx-large"
319
+ }
320
+ }))), /*#__PURE__*/_react.default.createElement(_material.ListItemText, {
321
+ primary: "QR Code"
322
+ })), /*#__PURE__*/_react.default.createElement(_material.ListItem, {
303
323
  button: true,
304
324
  disableGutters: true,
305
325
  onClick: () => openWindow(`mailto:?subject=${t("invite_email_subject")} ${inviteTypeState.toLowerCase()}&body=${studentInstructionsEmailBody()}`)
@@ -347,7 +367,28 @@ function InviteDialog({
347
367
  fill: "#fff"
348
368
  }))), /*#__PURE__*/_react.default.createElement(_material.ListItemText, {
349
369
  primary: "Twitter"
350
- }))))) : /*#__PURE__*/_react.default.createElement(_material.List, null, /*#__PURE__*/_react.default.createElement(_DialogContentText.default, null, t("select_a_classroom")), teachClassroomsState.map((c, i) => {
370
+ })), /*#__PURE__*/_react.default.createElement(_ResponsiveDialog.default, {
371
+ open: showQRCode,
372
+ handleClose: toggleQRCodeDisplay,
373
+ maxWidth: "md",
374
+ fullWidth: true,
375
+ sx: {
376
+ "& .MuiDialog-paper": {
377
+ width: "50%",
378
+ maxHeight: "80%"
379
+ }
380
+ }
381
+ }, /*#__PURE__*/_react.default.createElement(_DialogTitle.default, null, "QR Code "), /*#__PURE__*/_react.default.createElement(_DialogContent.default, {
382
+ dividers: true
383
+ }, /*#__PURE__*/_react.default.createElement(_material.Box, {
384
+ display: "flex",
385
+ justifyContent: "center",
386
+ alignItems: "center",
387
+ height: "100%"
388
+ }, /*#__PURE__*/_react.default.createElement(_qrcode.default, {
389
+ value: inviteLinkState,
390
+ size: 384
391
+ }))))))) : /*#__PURE__*/_react.default.createElement(_material.List, null, /*#__PURE__*/_react.default.createElement(_DialogContentText.default, null, t("select_a_classroom")), teachClassroomsState.map((c, i) => {
351
392
  const {
352
393
  classroomId,
353
394
  classroomName,
@@ -445,6 +486,18 @@ function InviteDialog({
445
486
  borderRadius: "20px"
446
487
  }
447
488
  }, /*#__PURE__*/_react.default.createElement(_material.List, null, /*#__PURE__*/_react.default.createElement(_DialogContentText.default, null, t("or_invite_via")), /*#__PURE__*/_react.default.createElement(_material.ListItem, {
489
+ button: true,
490
+ disableGutters: true,
491
+ onClick: toggleQRCodeDisplay
492
+ }, /*#__PURE__*/_react.default.createElement(_material.ListItemAvatar, null, /*#__PURE__*/_react.default.createElement(_material.Avatar, {
493
+ variant: "rounded"
494
+ }, /*#__PURE__*/_react.default.createElement(_QrCode.default, {
495
+ sx: {
496
+ fontSize: "xx-large"
497
+ }
498
+ }))), /*#__PURE__*/_react.default.createElement(_material.ListItemText, {
499
+ primary: "QR Code"
500
+ })), /*#__PURE__*/_react.default.createElement(_material.ListItem, {
448
501
  button: true,
449
502
  disableGutters: true,
450
503
  onClick: () => openWindow(`mailto:?subject=${t("invite_email_subject")} ${inviteTypeState.toLowerCase()}&body=${studentInstructionsEmailBody()}`)
@@ -492,7 +545,28 @@ function InviteDialog({
492
545
  fill: "#fff"
493
546
  }))), /*#__PURE__*/_react.default.createElement(_material.ListItemText, {
494
547
  primary: "Twitter"
495
- }))))) : null));
548
+ })), /*#__PURE__*/_react.default.createElement(_ResponsiveDialog.default, {
549
+ open: showQRCode,
550
+ handleClose: toggleQRCodeDisplay,
551
+ maxWidth: "md",
552
+ fullWidth: true,
553
+ sx: {
554
+ "& .MuiDialog-paper": {
555
+ width: "50%",
556
+ maxHeight: "80%"
557
+ }
558
+ }
559
+ }, /*#__PURE__*/_react.default.createElement(_DialogTitle.default, null, "QR Code "), /*#__PURE__*/_react.default.createElement(_DialogContent.default, {
560
+ dividers: true
561
+ }, /*#__PURE__*/_react.default.createElement(_material.Box, {
562
+ display: "flex",
563
+ justifyContent: "center",
564
+ alignItems: "center",
565
+ height: "100%"
566
+ }, /*#__PURE__*/_react.default.createElement(_qrcode.default, {
567
+ value: inviteLinkState,
568
+ size: 384
569
+ }))))))) : null));
496
570
  }
497
571
  InviteDialog.defaultProps = {
498
572
  t: text => text,
@@ -30,6 +30,9 @@ function VideoViewer({
30
30
  if (open) {
31
31
  setPlaying(true);
32
32
  }
33
+ if (!open) {
34
+ setPlaying(false);
35
+ }
33
36
  }, [open]);
34
37
  return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_ResponsiveDialog.default, {
35
38
  open: open,
@@ -723,7 +723,13 @@ function Roleplay({
723
723
  open: isCreateQuestionOpen,
724
724
  handleClose: handleCloseCreateQuestion,
725
725
  handleTranslate: handleTranslate,
726
- onSubmit: handleAddQuestion
726
+ onSubmit: handleAddQuestion,
727
+ script: roleplay.script,
728
+ makeChatGptApiRequest: makeChatGptApiRequest,
729
+ values: {
730
+ actor1: roleplay.actor1,
731
+ actor2: roleplay.actor2
732
+ }
727
733
  }), isUpdatingQuestion.status && /*#__PURE__*/_react.default.createElement(_CreateQuestion.default, {
728
734
  t: t,
729
735
  learnLang: learnLang,
@@ -427,6 +427,7 @@ function Pronouncer({
427
427
  }
428
428
  }
429
429
  };
430
+ const isListeningIndicatorTextVisible = recognizing && interimTranscript === "" && finalTranscript === "" ? true : false;
430
431
  return /*#__PURE__*/_react.default.createElement(_material.Dialog, {
431
432
  fullScreen: true,
432
433
  open: open,
@@ -626,7 +627,7 @@ function Pronouncer({
626
627
  })))))), /*#__PURE__*/_react.default.createElement(_material.Grid, {
627
628
  item: true,
628
629
  sx: {
629
- margin: 2
630
+ marginTop: 1
630
631
  }
631
632
  }, /*#__PURE__*/_react.default.createElement(_material.Button, {
632
633
  sx: theme => ({
@@ -658,15 +659,19 @@ function Pronouncer({
658
659
  id: "voiceInput",
659
660
  variant: "contained",
660
661
  ref: btnRef
661
- }, recognizing ? t("click_to_stop") : t("click_to_start")), /*#__PURE__*/_react.default.createElement(_material.Typography, {
662
+ }, recognizing ? t("click_to_stop") : t("click_to_start"))), /*#__PURE__*/_react.default.createElement(_material.Grid, {
663
+ item: true
664
+ }, /*#__PURE__*/_react.default.createElement(_material.Typography, {
662
665
  role: "status",
663
- margin: 5,
666
+ sx: {
667
+ mt: isListeningIndicatorTextVisible ? 3 : 0
668
+ },
664
669
  textAlign: "center",
665
670
  fontWeight: "bolder",
666
671
  fontSize: "20px",
667
672
  "aria-label": "Mic is",
668
673
  "aria-live": "polite"
669
- }, recognizing && interimTranscript === "" && finalTranscript === "" ? t("listening_indicator") : "")), finalTranscript || interimTranscript ? /*#__PURE__*/_react.default.createElement(_material.Grid, {
674
+ }, isListeningIndicatorTextVisible ? t("listening_indicator") : "")), finalTranscript || interimTranscript ? /*#__PURE__*/_react.default.createElement(_material.Grid, {
670
675
  item: true,
671
676
  alignItems: "center",
672
677
  className: classes.setWidth
@@ -55,7 +55,8 @@ const props = exports.props = {
55
55
  play: () => {}
56
56
  },
57
57
  handleReportProblem: problemDescription => alert(problemDescription),
58
- voices: _config.default.languages["spanish"].Voices
58
+ voices: _config.default.languages["spanish"].Voices,
59
+ trackRecommendedEvent: () => {}
59
60
  };
60
61
  const story = {
61
62
  title: "Exercises/Pronouncer",
@@ -39,7 +39,8 @@ function Contact({
39
39
  initialValues,
40
40
  disableCheckboxes,
41
41
  id,
42
- isPublisher
42
+ isPublisher,
43
+ freeTrialAvailable
43
44
  }) {
44
45
  const [values, setValues] = (0, _react.useState)({
45
46
  firstName: "",
@@ -136,14 +137,18 @@ function Contact({
136
137
  }, /*#__PURE__*/_react.default.createElement(_material.Grid, {
137
138
  item: true,
138
139
  xs: 12,
139
- md: 6
140
+ md: 12
140
141
  }, /*#__PURE__*/_react.default.createElement(_material.Typography, {
141
142
  fontSize: 14,
142
143
  sx: {
143
144
  opacity: 0.8,
144
145
  marginBottom: 1
145
146
  }
146
- }, t("required_field")), /*#__PURE__*/_react.default.createElement(_material.TextField, {
147
+ }, t("required_field"))), /*#__PURE__*/_react.default.createElement(_material.Grid, {
148
+ item: true,
149
+ xs: 12,
150
+ md: 6
151
+ }, /*#__PURE__*/_react.default.createElement(_material.TextField, {
147
152
  id: `firstName`,
148
153
  name: "firstName",
149
154
  variant: "outlined",
@@ -289,7 +294,7 @@ function Contact({
289
294
  sx: {
290
295
  flexDirection: "row"
291
296
  }
292
- }, /*#__PURE__*/_react.default.createElement(_FormControlLabel.default, {
297
+ }, freeTrialAvailable && /*#__PURE__*/_react.default.createElement(_FormControlLabel.default, {
293
298
  control: /*#__PURE__*/_react.default.createElement(_Checkbox.default, {
294
299
  checked: freeTrial,
295
300
  onChange: handleChange,
@@ -251,6 +251,7 @@ function Game({
251
251
  }
252
252
  };
253
253
  const nextScriptLine = roleplayMessages?.length && selectedRoleplay?.script?.[roleplayMessages.length] ? selectedRoleplay.script[roleplayMessages.length] : "";
254
+ const videoUrl = topicInfo.videoUrl ?? null;
254
255
  return /*#__PURE__*/_react.default.createElement(_material.Dialog, {
255
256
  fullScreen: true,
256
257
  open: open,
@@ -381,7 +382,8 @@ function Game({
381
382
  userImage: userImage,
382
383
  exerciseName: exerciseName,
383
384
  isLiveGameTutorialOpen: isLiveGameTutorialOpen,
384
- setIsLiveGameTutorialOpen: setIsLiveGameTutorialOpen
385
+ setIsLiveGameTutorialOpen: setIsLiveGameTutorialOpen,
386
+ videoUrl: videoUrl
385
387
  }, otherProps)), gameView === GameViewTypes.GameStarting && /*#__PURE__*/_react.default.createElement(_material.Typography, {
386
388
  variant: "h1",
387
389
  component: "h2",
@@ -4,15 +4,16 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = HowToJoin;
7
- var _react = _interopRequireDefault(require("react"));
7
+ var _react = _interopRequireWildcard(require("react"));
8
8
  var _material = require("@mui/material");
9
9
  var _ChevronLeft = _interopRequireDefault(require("@mui/icons-material/ChevronLeft"));
10
10
  var _ChevronRight = _interopRequireDefault(require("@mui/icons-material/ChevronRight"));
11
11
  var _SwipeableDrawer = _interopRequireDefault(require("@mui/material/SwipeableDrawer"));
12
- var _Divider = _interopRequireDefault(require("@mui/material/Divider"));
13
- var _IconButton = _interopRequireDefault(require("@mui/material/IconButton"));
14
12
  var _styles = require("@mui/material/styles");
13
+ var _qrcode = _interopRequireDefault(require("qrcode.react"));
15
14
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
15
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
16
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
16
17
  function HowToJoin({
17
18
  t,
18
19
  classroomName,
@@ -21,6 +22,10 @@ function HowToJoin({
21
22
  handleClose
22
23
  }) {
23
24
  const theme = (0, _styles.useTheme)();
25
+ const [showQRCode, setShowQRCode] = (0, _react.useState)(false);
26
+ const toggleQRCode = () => {
27
+ setShowQRCode(!showQRCode);
28
+ };
24
29
  return /*#__PURE__*/_react.default.createElement(_SwipeableDrawer.default, {
25
30
  open: isOpen,
26
31
  anchor: "right",
@@ -57,11 +62,19 @@ function HowToJoin({
57
62
  primary: /*#__PURE__*/_react.default.createElement(_material.Typography, {
58
63
  component: "span",
59
64
  variant: "body1"
60
- }, "Open the classroom", " ", /*#__PURE__*/_react.default.createElement("a", {
65
+ }, "Open the classroom", " ", /*#__PURE__*/_react.default.createElement(_material.Link, {
61
66
  href: classroomURL,
62
67
  target: "_blank",
63
68
  rel: "noreferrer"
64
- }, classroomName))
69
+ }, classroomName), " ", "or scan its QR Code below", " ")
70
+ })), /*#__PURE__*/_react.default.createElement(_material.Box, {
71
+ sx: {
72
+ pl: 2.5,
73
+ py: 5
74
+ }
75
+ }, /*#__PURE__*/_react.default.createElement(_qrcode.default, {
76
+ value: classroomURL,
77
+ size: 256
65
78
  })), /*#__PURE__*/_react.default.createElement(_material.ListItem, null, /*#__PURE__*/_react.default.createElement(_material.ListItemText, {
66
79
  primary: /*#__PURE__*/_react.default.createElement(_material.Typography, {
67
80
  component: "span",
@@ -74,7 +87,7 @@ function HowToJoin({
74
87
  }, "Get ready to play.")
75
88
  })))), /*#__PURE__*/_react.default.createElement(_material.Box, {
76
89
  flexGrow: 1
77
- }), /*#__PURE__*/_react.default.createElement(_Divider.default, null), /*#__PURE__*/_react.default.createElement(_material.Box, {
90
+ }), /*#__PURE__*/_react.default.createElement(_material.Divider, null), /*#__PURE__*/_react.default.createElement(_material.Box, {
78
91
  sx: theme => ({
79
92
  display: "flex",
80
93
  alignItems: "center",
@@ -82,7 +95,7 @@ function HowToJoin({
82
95
  padding: "0 8px",
83
96
  ...theme.mixins.toolbar
84
97
  })
85
- }, /*#__PURE__*/_react.default.createElement(_IconButton.default, {
98
+ }, /*#__PURE__*/_react.default.createElement(_material.IconButton, {
86
99
  onClick: handleClose
87
100
  }, theme.direction === "ltr" ? /*#__PURE__*/_react.default.createElement(_ChevronRight.default, null) : /*#__PURE__*/_react.default.createElement(_ChevronLeft.default, null))));
88
101
  }
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.props = exports.default = exports.Default = void 0;
7
+ var _react = _interopRequireDefault(require("react"));
8
+ var _HowToJoin = _interopRequireDefault(require("./HowToJoin"));
9
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
10
+ const Template = args => /*#__PURE__*/_react.default.createElement(_HowToJoin.default, args);
11
+ const props = exports.props = {
12
+ t: t => t,
13
+ classroomName: "Classroom Name",
14
+ classroomURL: "https://example.com/classroom",
15
+ isOpen: true,
16
+ handleClose: () => {}
17
+ };
18
+ const story = {
19
+ title: "Live/HowToJoin",
20
+ excludeStories: ["props"],
21
+ component: _HowToJoin.default
22
+ };
23
+ var _default = exports.default = story;
24
+ const Default = exports.Default = Template.bind({});
25
+ Default.args = {
26
+ ...props
27
+ };
28
+ Default.storyName = "default";
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = WaitingRoom;
7
- var _react = _interopRequireDefault(require("react"));
7
+ var _react = _interopRequireWildcard(require("react"));
8
8
  var _material = require("@mui/material");
9
9
  var _index = _interopRequireDefault(require("../../utils/placeholder-images/index"));
10
10
  var _styles = require("@mui/material/styles");
@@ -19,7 +19,11 @@ var _AutoStories = _interopRequireDefault(require("@mui/icons-material/AutoStori
19
19
  var _MedalSelector = _interopRequireDefault(require("../../Misc/MedalSelector/MedalSelector"));
20
20
  var _LiveGameTutorial = _interopRequireDefault(require("../../Dialogs/LiveGameTutorial/LiveGameTutorial"));
21
21
  var _reactHookForm = require("react-hook-form");
22
+ var _OndemandVideo = _interopRequireDefault(require("@mui/icons-material/OndemandVideo"));
23
+ var _VideoViewer = _interopRequireDefault(require("../../Dialogs/VideoViewer/VideoViewer"));
22
24
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
25
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
26
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
23
27
  function WaitingRoom({
24
28
  topicImage,
25
29
  t,
@@ -37,11 +41,16 @@ function WaitingRoom({
37
41
  handleOpenMembersDrawer,
38
42
  exercise,
39
43
  selectedRoleplay,
40
- gameAward
44
+ gameAward,
45
+ videoUrl
41
46
  }) {
42
47
  const theme = (0, _styles.useTheme)();
43
48
  const isLgScreen = (0, _useMediaQuery.default)(theme.breakpoints.up("md"));
44
- return /*#__PURE__*/_react.default.createElement(_material.Box, {
49
+ const [isViewVideoOpen, setIsViewVideoOpen] = (0, _react.useState)(false);
50
+ const handleOpenViewVideo = () => {
51
+ setIsViewVideoOpen(true);
52
+ };
53
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_material.Box, {
45
54
  sx: {
46
55
  margin: 2,
47
56
  width: isLgScreen ? "100%" : "auto",
@@ -138,7 +147,15 @@ function WaitingRoom({
138
147
  component: "p",
139
148
  color: "textSecondary"
140
149
  }, t(exerciseDescription)))
141
- }))), isCreator && /*#__PURE__*/_react.default.createElement(_material.Grid, {
150
+ })), isCreator && videoUrl && /*#__PURE__*/_react.default.createElement(_material.Button, {
151
+ variant: "contained",
152
+ color: "primary",
153
+ startIcon: /*#__PURE__*/_react.default.createElement(_OndemandVideo.default, null),
154
+ onClick: handleOpenViewVideo,
155
+ sx: {
156
+ alignSelf: "flex-start"
157
+ }
158
+ }, t("play_video"))), isCreator && /*#__PURE__*/_react.default.createElement(_material.Grid, {
142
159
  item: true,
143
160
  lg: 2,
144
161
  md: 2,
@@ -337,5 +354,11 @@ function WaitingRoom({
337
354
  sx: {
338
355
  fontWeight: "bold"
339
356
  }
340
- }, username)))));
357
+ }, username))))), /*#__PURE__*/_react.default.createElement(_VideoViewer.default, {
358
+ t: t,
359
+ title: topicName,
360
+ s3Url: videoUrl,
361
+ open: isViewVideoOpen,
362
+ handleClose: () => setIsViewVideoOpen(false)
363
+ }));
341
364
  }
@@ -13,6 +13,7 @@ var _reactFeather = require("react-feather");
13
13
  var _reactCopyToClipboard = require("react-copy-to-clipboard");
14
14
  var _googleClassroom = _interopRequireDefault(require("../../img/google-classroom.svg"));
15
15
  var _UpgradeSubscription = _interopRequireDefault(require("../../Dialogs/UpgradeSubscription/UpgradeSubscription"));
16
+ var _KeyboardArrowDown = _interopRequireDefault(require("@mui/icons-material/KeyboardArrowDown"));
16
17
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
17
18
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
18
19
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
@@ -130,7 +131,18 @@ function ShareDrawer({
130
131
  subheader: /*#__PURE__*/_react.default.createElement(_material.ListSubheader, {
131
132
  component: "div"
132
133
  }, t("share_via"))
133
- }, /*#__PURE__*/_react.default.createElement(_material.ListItem, {
134
+ }, /*#__PURE__*/_react.default.createElement(_material.Tooltip, {
135
+ title: t("close_drawer"),
136
+ placement: "bottom"
137
+ }, /*#__PURE__*/_react.default.createElement(_material.IconButton, {
138
+ onClick: handleClose,
139
+ sx: {
140
+ position: "absolute",
141
+ top: 6,
142
+ right: 10,
143
+ zIndex: 1
144
+ }
145
+ }, /*#__PURE__*/_react.default.createElement(_KeyboardArrowDown.default, null))), /*#__PURE__*/_react.default.createElement(_material.ListItem, {
134
146
  button: true,
135
147
  onClick: () => openWindow(facebookLink)
136
148
  }, /*#__PURE__*/_react.default.createElement(_material.ListItemAvatar, null, /*#__PURE__*/_react.default.createElement(_material.Avatar, {
@@ -20,8 +20,7 @@ var _ResponsiveTabs = _interopRequireDefault(require("../../../Navigation/Respon
20
20
  var _Timeline = _interopRequireDefault(require("@mui/icons-material/Timeline"));
21
21
  var _Courses = _interopRequireDefault(require("../../../Lists/Courses"));
22
22
  var _Members = _interopRequireDefault(require("../../../Lists/Members"));
23
- var _Reviews = _interopRequireDefault(require("../../../Lists/Reviews"));
24
- var _Reviews2 = _interopRequireDefault(require("../../../Dialogs/Reviews"));
23
+ var _Reviews = _interopRequireDefault(require("../../../Dialogs/Reviews"));
25
24
  var _Members2 = _interopRequireDefault(require("../../../Dialogs/Members"));
26
25
  var _InviteDialog = _interopRequireDefault(require("../../../Dialogs/InviteDialog"));
27
26
  var _ShareDrawer = _interopRequireDefault(require("../../../Misc/ShareButton/ShareDrawer"));
@@ -139,7 +138,6 @@ function OverflowMenu({
139
138
  anchorEl,
140
139
  handleClose,
141
140
  handleClickOpenReviews,
142
- handleClickOpenMembers,
143
141
  isCreator,
144
142
  isMember,
145
143
  handleOpenCoursesModal,
@@ -183,9 +181,7 @@ function OverflowMenu({
183
181
  "data-cy": "share-classroom"
184
182
  }, t("share")), /*#__PURE__*/_react.default.createElement(_material.MenuItem, {
185
183
  onClick: handleClickOpenReviews
186
- }, t("reviews")), isCreator && /*#__PURE__*/_react.default.createElement(_material.MenuItem, {
187
- onClick: handleClickOpenMembers
188
- }, t("members")), !isCreator && !isMember && /*#__PURE__*/_react.default.createElement(_material.MenuItem, {
184
+ }, t("reviews")), !isCreator && !isMember && /*#__PURE__*/_react.default.createElement(_material.MenuItem, {
189
185
  onClick: joinClassroom
190
186
  }, t("join_classroom")), !isCreator && isMember && /*#__PURE__*/_react.default.createElement(_material.MenuItem, {
191
187
  onClick: leaveClassroom
@@ -542,8 +538,6 @@ function Classroom({
542
538
  label: t("progress")
543
539
  }, {
544
540
  label: t("members")
545
- }, {
546
- label: t("reviews")
547
541
  }, {
548
542
  label: t("settings"),
549
543
  disabled: true
@@ -561,12 +555,6 @@ function Classroom({
561
555
  }, /*#__PURE__*/_react.default.createElement(_Members.default, {
562
556
  t: t,
563
557
  members: null
564
- })), /*#__PURE__*/_react.default.createElement(_material.Box, {
565
- py: 1
566
- }, /*#__PURE__*/_react.default.createElement(_Reviews.default, {
567
- t: t,
568
- reviews: null,
569
- disabled: true
570
558
  }))));
571
559
  }
572
560
  const {
@@ -794,27 +782,7 @@ function Classroom({
794
782
  isCreator: isCreator,
795
783
  handleDeleteClassroomMember: handleDeleteClassroomMember
796
784
  })))
797
- }] : []), {
798
- label: `${t("reviews")} (${reviews.length})`,
799
- disabled: !(isMember || isCreator) || reviewsEnabled === "disabled",
800
- id: "Reviews",
801
- TabContent: /*#__PURE__*/_react.default.createElement(_material.Box, {
802
- py: 1,
803
- key: `tab-content-reviews`
804
- }, /*#__PURE__*/_react.default.createElement(_Reviews.default, {
805
- t: t,
806
- reviews: Array.isArray(newReviewsList) && newReviewsList.length ? newReviewsList : [],
807
- disableSubheader: true,
808
- hasReviewed: hasReviewed,
809
- handleCreateReview: handleCreateReview,
810
- handleDeleteReview: handleDeleteReview,
811
- updateReview: updateReview,
812
- isCreator: isCreator,
813
- subscription: subscription,
814
- placeholderImageUrl: reviewPlaceholderImageUrl,
815
- mainSiteUrl: mainSiteUrl
816
- }))
817
- }, ...(isCreator ? [{
785
+ }] : []), ...(isCreator ? [{
818
786
  label: t("settings"),
819
787
  id: "Settings",
820
788
  disabled: !isCreator,
@@ -1087,7 +1055,7 @@ function Classroom({
1087
1055
  handleClose: handleCloseUpgradeSubcriptionModal,
1088
1056
  onConfirm: handleSubscriptionPage,
1089
1057
  subscription: subscription
1090
- }), /*#__PURE__*/_react.default.createElement(_Reviews2.default, {
1058
+ }), /*#__PURE__*/_react.default.createElement(_Reviews.default, {
1091
1059
  t: t,
1092
1060
  dialogTitle: classroomName,
1093
1061
  open: isReviewsOpen,
@@ -18,8 +18,7 @@ var _OndemandVideo = _interopRequireDefault(require("@mui/icons-material/Ondeman
18
18
  var _Timeline = _interopRequireDefault(require("@mui/icons-material/Timeline"));
19
19
  var _ResponsiveTabs = _interopRequireDefault(require("../../../Navigation/ResponsiveTabs"));
20
20
  var _Members = _interopRequireDefault(require("../../../Lists/Members"));
21
- var _Reviews = _interopRequireDefault(require("../../../Lists/Reviews"));
22
- var _Reviews2 = _interopRequireDefault(require("../../../Dialogs/Reviews"));
21
+ var _Reviews = _interopRequireDefault(require("../../../Dialogs/Reviews"));
23
22
  var _Members2 = _interopRequireDefault(require("../../../Dialogs/Members"));
24
23
  var _ResponsiveDialog = _interopRequireDefault(require("../../../Dialogs/ResponsiveDialog"));
25
24
  var _CreateSection = _interopRequireDefault(require("../../../Dialogs/CreateSection"));
@@ -108,7 +107,6 @@ function OverflowMenu({
108
107
  anchorEl,
109
108
  handleClose,
110
109
  handleClickOpenReviews,
111
- handleClickOpenMembers,
112
110
  handleClickOpenCreateSection,
113
111
  handleOpenAddToClassroom,
114
112
  isCreator,
@@ -161,9 +159,7 @@ function OverflowMenu({
161
159
  "data-cy": "share-course"
162
160
  }, t("share")), /*#__PURE__*/_react.default.createElement(_material.MenuItem, {
163
161
  onClick: handleClickOpenReviews
164
- }, t("reviews")), isCreator && /*#__PURE__*/_react.default.createElement(_material.MenuItem, {
165
- onClick: handleClickOpenMembers
166
- }, t("members")), !isCreator && !isMember && /*#__PURE__*/_react.default.createElement(_material.MenuItem, {
162
+ }, t("reviews")), !isCreator && !isMember && /*#__PURE__*/_react.default.createElement(_material.MenuItem, {
167
163
  onClick: joinCourse
168
164
  }, t("join_course")), !isCreator && isMember && /*#__PURE__*/_react.default.createElement(_material.MenuItem, {
169
165
  onClick: leaveCourse
@@ -431,9 +427,6 @@ function Course({
431
427
  }, {
432
428
  label: t("members"),
433
429
  id: "Members"
434
- }, {
435
- label: t("reviews"),
436
- id: "Reviews"
437
430
  }];
438
431
  if (!course) {
439
432
  let initialTabValue;
@@ -516,12 +509,6 @@ function Course({
516
509
  py: 1
517
510
  }, /*#__PURE__*/_react.default.createElement(_Members.default, {
518
511
  t: t
519
- })), /*#__PURE__*/_react.default.createElement(_material.Box, {
520
- py: 1
521
- }, /*#__PURE__*/_react.default.createElement(_Reviews.default, {
522
- t: t,
523
- key: "listrev",
524
- disabled: true
525
512
  }))));
526
513
  }
527
514
  const {
@@ -672,27 +659,7 @@ function Course({
672
659
  isCourseMember: true,
673
660
  sections: sections
674
661
  })))
675
- }] : []), {
676
- label: `${t("reviews")} (${reviews.length})`,
677
- disabled: !(isMember || isCreator) || reviewsEnabled === "disabled",
678
- id: "Reviews",
679
- TabContent: /*#__PURE__*/_react.default.createElement(_material.Box, {
680
- py: 1,
681
- key: `tab-content-reviews`
682
- }, /*#__PURE__*/_react.default.createElement(_Reviews.default, {
683
- t: t,
684
- reviews: Array.isArray(newReviewsList) && newReviewsList.length ? newReviewsList : [],
685
- disableSubheader: true,
686
- hasReviewed: hasReviewed,
687
- updateReview: updateReview,
688
- handleCreateReview: handleCreateReview,
689
- handleDeleteReview: handleDeleteReview,
690
- isCreator: isCreator,
691
- subscription: subscription,
692
- placeholderImageUrl: reviewPlaceholderImageUrl,
693
- mainSiteUrl: mainSiteUrl
694
- }))
695
- }, ...(isCreator ? [{
662
+ }] : []), ...(isCreator ? [{
696
663
  label: t("settings"),
697
664
  disabled: isCreator ? false : true,
698
665
  id: "Settings",
@@ -915,7 +882,7 @@ function Course({
915
882
  handleClose: handleCloseUpgradeSubcriptionModal,
916
883
  onConfirm: handleSubscriptionPage,
917
884
  subscription: subscription
918
- }), /*#__PURE__*/_react.default.createElement(_Reviews2.default, {
885
+ }), /*#__PURE__*/_react.default.createElement(_Reviews.default, {
919
886
  t: t,
920
887
  dialogTitle: courseName,
921
888
  open: isReviewsOpen,
@@ -109,16 +109,17 @@ function Pricing({
109
109
  align: "center",
110
110
  color: "textPrimary"
111
111
  }, t("pricing_page_title")), /*#__PURE__*/_react.default.createElement(_Typography.default, {
112
- sx: () => ({
112
+ sx: theme => ({
113
113
  fontWeight: "normal",
114
114
  fontSize: "20px",
115
- lineHeight: "32px"
115
+ lineHeight: "32px",
116
+ marginBottom: theme.spacing(4)
116
117
  }),
117
118
  variant: "h1",
118
119
  component: "h1",
119
120
  align: "center",
120
121
  color: "textSecondary"
121
- }, t("pricing_page_subtitle")), /*#__PURE__*/_react.default.createElement(_Typography.default, {
122
+ }, t("pricing_page_subtitle")), currencies && currencies.length > 1 && /*#__PURE__*/_react.default.createElement(_Typography.default, {
122
123
  component: "div",
123
124
  sx: theme => ({
124
125
  marginTop: theme.spacing(),
@@ -194,19 +195,25 @@ Pricing.defaultProps = {
194
195
  t: text => text,
195
196
  plans: [],
196
197
  initialCurrency: "eur",
197
- currencies: [{
198
- value: "usd",
199
- label: "$ USD"
200
- }, {
201
- value: "eur",
202
- label: "€ EUR"
203
- }, {
204
- value: "gbp",
205
- label: "£ GBP"
206
- }, {
207
- value: "cad",
208
- label: "$ CAD"
209
- }],
198
+ // disable currency selection
199
+ // currencies: [
200
+ // {
201
+ // value: "usd",
202
+ // label: "$ USD",
203
+ // },
204
+ // {
205
+ // value: "eur",
206
+ // label: " EUR",
207
+ // },
208
+ // {
209
+ // value: "gbp",
210
+ // label: "£ GBP",
211
+ // },
212
+ // {
213
+ // value: "cad",
214
+ // label: "$ CAD",
215
+ // },
216
+ // ],
210
217
  freeTrial: {
211
218
  isAvailable: false,
212
219
  title: "Try for Free for 30 days",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nualang/nualang-ui-components",
3
- "version": "0.1.1131",
3
+ "version": "0.1.1133",
4
4
  "main": "dist/index.js",
5
5
  "files": [
6
6
  "dist",
@@ -51,6 +51,7 @@
51
51
  "n2words": "^1.19.1",
52
52
  "pixabay-api": "^1.0.4",
53
53
  "pre-commit": "^1.2.2",
54
+ "qrcode.react": "^3.1.0",
54
55
  "rdndmb-html5-to-touch": "^8.0.0",
55
56
  "react-beautiful-dnd": "^13.1.1",
56
57
  "react-chartjs-2": "^5.2.0",