@nualang/nualang-ui-components 0.1.1133 → 0.1.1135
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Dialogs/CreateQuestion/CreateQuestion.js +6 -133
- package/dist/Dialogs/GenerateQuestion/GenerateQuestion.js +198 -0
- package/dist/Dialogs/GenerateQuestion/package.json +6 -0
- package/dist/Dialogs/ResponsiveDialog/ResponsiveDialog.js +9 -4
- package/dist/Editors/Roleplay/Roleplay.js +81 -10
- package/dist/Exercises/Roleplay/Games/FillInTheBlanksGame/FillInTheBlanksGame.js +9 -9
- package/dist/Misc/AnswerResult/AnswerResult.js +1 -1
- package/dist/Misc/Snackbar/Snackbar.js +4 -2
- package/dist/Screens/Classrooms/ViewClassroom/ViewClassroom.js +3 -2
- package/dist/Screens/Courses/ViewCourse/ViewCourse.js +3 -2
- package/dist/Screens/Courses/ViewCourse/ViewTopic/ViewTopic.js +3 -2
- package/package.json +2 -2
|
@@ -16,13 +16,9 @@ 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");
|
|
21
19
|
var _ResponsiveDialog = _interopRequireDefault(require("../ResponsiveDialog"));
|
|
22
20
|
var _InputHelper = _interopRequireDefault(require("../../Forms/InputHelper"));
|
|
23
21
|
var _debounce = _interopRequireDefault(require("lodash/debounce"));
|
|
24
|
-
var _nualas = _interopRequireDefault(require("../../img/nualas.svg"));
|
|
25
|
-
var _reactRouterDom = require("react-router-dom");
|
|
26
22
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
27
23
|
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); }
|
|
28
24
|
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; }
|
|
@@ -59,13 +55,12 @@ function CreateQuestion({
|
|
|
59
55
|
script,
|
|
60
56
|
makeChatGptApiRequest,
|
|
61
57
|
values,
|
|
58
|
+
disableRestoreFocus,
|
|
62
59
|
...otherProps
|
|
63
60
|
}) {
|
|
64
61
|
const [question, setQuestion] = (0, _react.useState)(otherProps.question);
|
|
65
62
|
const [answer, setAnswer] = (0, _react.useState)(initialAnswerState);
|
|
66
63
|
const [answerList, setAnswerList] = (0, _react.useState)(otherProps.answers);
|
|
67
|
-
const [isMessageGenerating, setIsMessageGenerating] = (0, _react.useState)(false);
|
|
68
|
-
const [errorMessage, setErrorMessage] = (0, _react.useState)(null);
|
|
69
64
|
const handleAnswerInputChange = event => {
|
|
70
65
|
const target = event.target;
|
|
71
66
|
const value = target.type === "checkbox" ? target.checked : target.value;
|
|
@@ -140,82 +135,6 @@ function CreateQuestion({
|
|
|
140
135
|
handleAddAnswerDebounced();
|
|
141
136
|
}
|
|
142
137
|
};
|
|
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
|
-
};
|
|
219
138
|
const title = update ? t("update_question") : t("add_question");
|
|
220
139
|
const desc = update ? t("update_question_desc") : t("add_question_desc");
|
|
221
140
|
return /*#__PURE__*/_react.default.createElement(_ResponsiveDialog.default, {
|
|
@@ -223,49 +142,9 @@ function CreateQuestion({
|
|
|
223
142
|
handleClose: handleClose,
|
|
224
143
|
handleSubmit: handleSubmit,
|
|
225
144
|
submitText: title,
|
|
226
|
-
dialogTitle:
|
|
227
|
-
|
|
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, {
|
|
145
|
+
dialogTitle: title,
|
|
146
|
+
disableRestoreFocus: disableRestoreFocus
|
|
147
|
+
}, /*#__PURE__*/_react.default.createElement(_DialogContentText.default, null, desc), /*#__PURE__*/_react.default.createElement(_Grid.default, {
|
|
269
148
|
container: true,
|
|
270
149
|
direction: "row",
|
|
271
150
|
justifyContent: "center",
|
|
@@ -305,13 +184,7 @@ function CreateQuestion({
|
|
|
305
184
|
characters: forLangCharacters ? forLangCharacters : null,
|
|
306
185
|
helperText: answer.text && answer.text.trim() !== "" ? t("answer_helper_text") : "",
|
|
307
186
|
multiline: true
|
|
308
|
-
})),
|
|
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, {
|
|
187
|
+
}))), /*#__PURE__*/_react.default.createElement(_reactBeautifulDnd.DragDropContext, {
|
|
315
188
|
onDragEnd: handleOnDragEnd
|
|
316
189
|
}, /*#__PURE__*/_react.default.createElement(_reactBeautifulDnd.Droppable, {
|
|
317
190
|
droppableId: "answers"
|
|
@@ -372,7 +245,7 @@ function CreateQuestion({
|
|
|
372
245
|
name: "correct"
|
|
373
246
|
}),
|
|
374
247
|
label: t("correct_answer")
|
|
375
|
-
})))))), provided.placeholder))))
|
|
248
|
+
})))))), provided.placeholder))));
|
|
376
249
|
}
|
|
377
250
|
CreateQuestion.defaultProps = {
|
|
378
251
|
t: text => text,
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
8
|
+
var _material = require("@mui/material");
|
|
9
|
+
var _reactRouterDom = require("react-router-dom");
|
|
10
|
+
var _iconsMaterial = require("@mui/icons-material");
|
|
11
|
+
var _ResponsiveDialog = _interopRequireDefault(require("../ResponsiveDialog/ResponsiveDialog"));
|
|
12
|
+
var _nualas = _interopRequireDefault(require("../../img/nualas.svg"));
|
|
13
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
14
|
+
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); }
|
|
15
|
+
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
|
+
// Components
|
|
17
|
+
|
|
18
|
+
function GenerateQuestion({
|
|
19
|
+
t,
|
|
20
|
+
open,
|
|
21
|
+
handleClose,
|
|
22
|
+
script,
|
|
23
|
+
values,
|
|
24
|
+
makeChatGptApiRequest,
|
|
25
|
+
onSubmit,
|
|
26
|
+
learnLang,
|
|
27
|
+
forLang,
|
|
28
|
+
siteLanguage,
|
|
29
|
+
disableRestoreFocus
|
|
30
|
+
}) {
|
|
31
|
+
const finalLearnLang = learnLang.charAt(0).toUpperCase() + learnLang.slice(1);
|
|
32
|
+
const finalForLang = forLang ? forLang.charAt(0).toUpperCase() + forLang.slice(1) : siteLanguage;
|
|
33
|
+
const [isMessageGenerating, setIsMessageGenerating] = (0, _react.useState)(false);
|
|
34
|
+
const [errorMessage, setErrorMessage] = (0, _react.useState)(null);
|
|
35
|
+
const [questionType, setQuestionType] = (0, _react.useState)("factual");
|
|
36
|
+
const [questionLanguage, setQuestionLanguage] = (0, _react.useState)(finalLearnLang);
|
|
37
|
+
const extractJsonObject = response => {
|
|
38
|
+
let stack = [];
|
|
39
|
+
let startIndex = -1;
|
|
40
|
+
let endIndex = -1;
|
|
41
|
+
for (let i = 0; i < response.length; i++) {
|
|
42
|
+
if (response[i] === "{") {
|
|
43
|
+
if (stack.length === 0) {
|
|
44
|
+
startIndex = i;
|
|
45
|
+
}
|
|
46
|
+
stack.push("{");
|
|
47
|
+
} else if (response[i] === "}") {
|
|
48
|
+
stack.pop();
|
|
49
|
+
if (stack.length === 0) {
|
|
50
|
+
endIndex = i;
|
|
51
|
+
break;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
if (startIndex !== -1 && endIndex !== -1) {
|
|
56
|
+
return response.substring(startIndex, endIndex + 1);
|
|
57
|
+
}
|
|
58
|
+
return "";
|
|
59
|
+
};
|
|
60
|
+
function validateResponse(response) {
|
|
61
|
+
if (typeof response !== "object" || response === null) {
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
if (typeof response.question !== "string") {
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
if (!Array.isArray(response.answers)) {
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
if (response.answers.length === 0) {
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
let hasCorrectAnswer = false;
|
|
74
|
+
for (const answer of response.answers) {
|
|
75
|
+
if (typeof answer !== "object" || answer === null) {
|
|
76
|
+
return false;
|
|
77
|
+
}
|
|
78
|
+
if (typeof answer.text !== "string" || typeof answer.correct !== "boolean" || typeof answer.type !== "string") {
|
|
79
|
+
return false;
|
|
80
|
+
}
|
|
81
|
+
if (answer.correct) {
|
|
82
|
+
hasCorrectAnswer = true;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return hasCorrectAnswer;
|
|
86
|
+
}
|
|
87
|
+
const handleGenerateAnswer = async () => {
|
|
88
|
+
try {
|
|
89
|
+
setIsMessageGenerating(true);
|
|
90
|
+
setErrorMessage(null);
|
|
91
|
+
const prompt = `Here is a script: ${JSON.stringify(script)}. Refer to Actor 1 as ${values.actor1.name} and Actor 2 as ${values.actor2.name} in the question and the answers. The purpose of this script is to test the reader's ability to read in ${finalLearnLang}. The reader's native language is ${finalForLang}. Please generate a new comprehension question based on the script that is completely unique to any existing questions, preferably referring to a unique part of the script if possible, 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'. There are four possible question types, 'factual', 'inference', 'truefalse' and 'vocabulary'. For factual questions, ensure the new question is explicitly answered by the script, to test the reader's understanding of the script. For inference questions, ensure the new question requires the reader to make an assumption based on the script. For true/false questions, ensure the new question can be answered with a true or false response. For vocabulary questions, ensure the new question tests the reader's understanding of a specific ${finalLearnLang} word or phrase used in the script, to test whether the reader can understand it. Vocabulary questions do not necessarily have to take the context of the conversation into account, they are merely to test the reader's ${finalLearnLang} vocabulary. The question type for this particular question to generate is ${questionType}. The question and answers should be generated in ${questionLanguage}.`;
|
|
92
|
+
const chatGptResponse = await makeChatGptApiRequest({
|
|
93
|
+
model: "gpt-3.5-turbo",
|
|
94
|
+
prompt
|
|
95
|
+
});
|
|
96
|
+
const jsonResponse = extractJsonObject(chatGptResponse);
|
|
97
|
+
const newQuestion = JSON.parse(jsonResponse);
|
|
98
|
+
if (!validateResponse(newQuestion)) {
|
|
99
|
+
throw new Error("Invalid response from GPT-3.5");
|
|
100
|
+
}
|
|
101
|
+
onSubmit({
|
|
102
|
+
question: newQuestion.question.trim(),
|
|
103
|
+
answers: newQuestion.answers
|
|
104
|
+
});
|
|
105
|
+
setIsMessageGenerating(false);
|
|
106
|
+
handleClose();
|
|
107
|
+
} catch (error) {
|
|
108
|
+
console.error(error);
|
|
109
|
+
setIsMessageGenerating(false);
|
|
110
|
+
setErrorMessage("There was problem generating the roleplay, please try again.");
|
|
111
|
+
}
|
|
112
|
+
};
|
|
113
|
+
return /*#__PURE__*/_react.default.createElement(_ResponsiveDialog.default, {
|
|
114
|
+
open: open,
|
|
115
|
+
handleClose: handleClose,
|
|
116
|
+
handleSubmit: handleGenerateAnswer,
|
|
117
|
+
submitText: t("generate_question"),
|
|
118
|
+
dialogTitle: isMessageGenerating ? t("generating_question") : t("generate_question"),
|
|
119
|
+
isSubmitDisabled: isMessageGenerating || !questionType,
|
|
120
|
+
isExperimentalFeature: true,
|
|
121
|
+
startIcon: /*#__PURE__*/_react.default.createElement(_iconsMaterial.AutoFixHigh, null),
|
|
122
|
+
disableRestoreFocus: disableRestoreFocus
|
|
123
|
+
}, /*#__PURE__*/_react.default.createElement(_material.Grid, {
|
|
124
|
+
item: true,
|
|
125
|
+
xs: 12,
|
|
126
|
+
textAlign: "center",
|
|
127
|
+
sx: {
|
|
128
|
+
...(!isMessageGenerating && {
|
|
129
|
+
display: "none"
|
|
130
|
+
})
|
|
131
|
+
},
|
|
132
|
+
mx: 2
|
|
133
|
+
}, /*#__PURE__*/_react.default.createElement("img", {
|
|
134
|
+
src: _nualas.default,
|
|
135
|
+
style: {
|
|
136
|
+
maxHeight: 230
|
|
137
|
+
},
|
|
138
|
+
alt: ""
|
|
139
|
+
})), /*#__PURE__*/_react.default.createElement(_material.Grid, {
|
|
140
|
+
item: true,
|
|
141
|
+
xs: 12,
|
|
142
|
+
sx: {
|
|
143
|
+
...(!isMessageGenerating && {
|
|
144
|
+
display: "none"
|
|
145
|
+
})
|
|
146
|
+
},
|
|
147
|
+
mt: 2
|
|
148
|
+
}, /*#__PURE__*/_react.default.createElement(_material.LinearProgress, null)), !isMessageGenerating && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_material.Grid, {
|
|
149
|
+
item: true,
|
|
150
|
+
xs: 12,
|
|
151
|
+
mb: 2
|
|
152
|
+
}, /*#__PURE__*/_react.default.createElement(_material.Alert, {
|
|
153
|
+
severity: "info"
|
|
154
|
+
}, t("experimental_feature_desc_answer"), " -", " ", /*#__PURE__*/_react.default.createElement(_reactRouterDom.Link, {
|
|
155
|
+
to: "/contact"
|
|
156
|
+
}, t("contact_form"), "."))), /*#__PURE__*/_react.default.createElement(_material.Grid, {
|
|
157
|
+
item: true,
|
|
158
|
+
xs: 12,
|
|
159
|
+
mb: 2
|
|
160
|
+
}, /*#__PURE__*/_react.default.createElement(_material.TextField, {
|
|
161
|
+
select: true,
|
|
162
|
+
label: t("question_type"),
|
|
163
|
+
value: questionType,
|
|
164
|
+
onChange: e => setQuestionType(e.target.value),
|
|
165
|
+
fullWidth: true,
|
|
166
|
+
variant: "outlined"
|
|
167
|
+
}, /*#__PURE__*/_react.default.createElement(_material.MenuItem, {
|
|
168
|
+
value: "factual"
|
|
169
|
+
}, t("multiple_choice_factual")), /*#__PURE__*/_react.default.createElement(_material.MenuItem, {
|
|
170
|
+
value: "inference"
|
|
171
|
+
}, t("multiple_choice_inference")), /*#__PURE__*/_react.default.createElement(_material.MenuItem, {
|
|
172
|
+
value: "truefalse"
|
|
173
|
+
}, t("true_false")), /*#__PURE__*/_react.default.createElement(_material.MenuItem, {
|
|
174
|
+
value: "vocabulary"
|
|
175
|
+
}, t("vocabulary")))), finalForLang !== finalLearnLang && /*#__PURE__*/_react.default.createElement(_material.Grid, {
|
|
176
|
+
item: true,
|
|
177
|
+
xs: 12,
|
|
178
|
+
mb: 2
|
|
179
|
+
}, /*#__PURE__*/_react.default.createElement(_material.TextField, {
|
|
180
|
+
select: true,
|
|
181
|
+
label: t("language"),
|
|
182
|
+
value: questionLanguage,
|
|
183
|
+
onChange: e => setQuestionLanguage(e.target.value),
|
|
184
|
+
fullWidth: true,
|
|
185
|
+
variant: "outlined"
|
|
186
|
+
}, /*#__PURE__*/_react.default.createElement(_material.MenuItem, {
|
|
187
|
+
value: finalForLang
|
|
188
|
+
}, finalForLang), /*#__PURE__*/_react.default.createElement(_material.MenuItem, {
|
|
189
|
+
value: finalLearnLang
|
|
190
|
+
}, finalLearnLang))), errorMessage && /*#__PURE__*/_react.default.createElement(_material.Grid, {
|
|
191
|
+
item: true,
|
|
192
|
+
xs: 12,
|
|
193
|
+
mt: 2
|
|
194
|
+
}, /*#__PURE__*/_react.default.createElement(_material.Alert, {
|
|
195
|
+
severity: "warning"
|
|
196
|
+
}, errorMessage))));
|
|
197
|
+
}
|
|
198
|
+
var _default = exports.default = GenerateQuestion;
|
|
@@ -50,7 +50,10 @@ function ResponsiveDialog({
|
|
|
50
50
|
TransitionComponent,
|
|
51
51
|
className,
|
|
52
52
|
transitionDuration,
|
|
53
|
-
keepDialogMounted = false
|
|
53
|
+
keepDialogMounted = false,
|
|
54
|
+
isExperimentalFeature = false,
|
|
55
|
+
startIcon,
|
|
56
|
+
disableRestoreFocus
|
|
54
57
|
}) {
|
|
55
58
|
const {
|
|
56
59
|
classes
|
|
@@ -73,7 +76,8 @@ function ResponsiveDialog({
|
|
|
73
76
|
style: {
|
|
74
77
|
...style
|
|
75
78
|
},
|
|
76
|
-
className: className
|
|
79
|
+
className: className,
|
|
80
|
+
disableRestoreFocus: disableRestoreFocus ? disableRestoreFocus : false
|
|
77
81
|
}, dialogTitle && /*#__PURE__*/_react.default.createElement(_DialogTitle.default, null, dialogTitle), /*#__PURE__*/_react.default.createElement(_DialogContent.default, {
|
|
78
82
|
className: dialogContentClassName
|
|
79
83
|
}, children), (handleClose || handleSubmit) && /*#__PURE__*/_react.default.createElement(_DialogActions.default, null, handleClose && /*#__PURE__*/_react.default.createElement(_Button.default, {
|
|
@@ -81,11 +85,12 @@ function ResponsiveDialog({
|
|
|
81
85
|
onClick: handleClose,
|
|
82
86
|
color: "primary"
|
|
83
87
|
}, closeText ? closeText : t("close")), handleSubmit && /*#__PURE__*/_react.default.createElement(_Button.default, {
|
|
84
|
-
color: "primary",
|
|
88
|
+
color: isExperimentalFeature ? "secondary" : "primary",
|
|
85
89
|
variant: "contained",
|
|
86
90
|
"data-cy": "submit-dialog",
|
|
87
91
|
onClick: handleSubmit,
|
|
88
|
-
disabled: isSubmitDisabled
|
|
92
|
+
disabled: isSubmitDisabled,
|
|
93
|
+
startIcon: startIcon ? startIcon : null
|
|
89
94
|
}, submitText ? submitText : "Submit")));
|
|
90
95
|
}
|
|
91
96
|
ResponsiveDialog.defaultProps = {
|
|
@@ -11,7 +11,6 @@ var _mui = require("tss-react/mui");
|
|
|
11
11
|
var _material = require("@mui/material");
|
|
12
12
|
var _Close = _interopRequireDefault(require("@mui/icons-material/Close"));
|
|
13
13
|
var _Person = _interopRequireDefault(require("@mui/icons-material/Person"));
|
|
14
|
-
var _Add = _interopRequireDefault(require("@mui/icons-material/Add"));
|
|
15
14
|
var _ArrowDropDown = _interopRequireDefault(require("@mui/icons-material/ArrowDropDown"));
|
|
16
15
|
var _ArrowDropUp = _interopRequireDefault(require("@mui/icons-material/ArrowDropUp"));
|
|
17
16
|
var _PlayCircleFilled = _interopRequireDefault(require("@mui/icons-material/PlayCircleFilled"));
|
|
@@ -19,7 +18,7 @@ var _Share = _interopRequireDefault(require("@mui/icons-material/Share"));
|
|
|
19
18
|
var _Publish = _interopRequireDefault(require("@mui/icons-material/Publish"));
|
|
20
19
|
var _GetApp = _interopRequireDefault(require("@mui/icons-material/GetApp"));
|
|
21
20
|
var _AutoFixHigh = _interopRequireDefault(require("@mui/icons-material/AutoFixHigh"));
|
|
22
|
-
var
|
|
21
|
+
var _Create = _interopRequireDefault(require("@mui/icons-material/Create"));
|
|
23
22
|
var _Chat = _interopRequireDefault(require("../../Chat"));
|
|
24
23
|
var _UpdateRoleplay = _interopRequireDefault(require("../../Forms/UpdateRoleplay"));
|
|
25
24
|
var _CreateQuestion = _interopRequireDefault(require("../../Dialogs/CreateQuestion"));
|
|
@@ -32,6 +31,8 @@ var _handleScriptDownload = require("../../hooks/handleScriptDownload");
|
|
|
32
31
|
var _utils = require("../../utils");
|
|
33
32
|
var _DefaultColourButton = _interopRequireDefault(require("../../Misc/DefaultColourButton/DefaultColourButton"));
|
|
34
33
|
var _index = require("../../utils/index");
|
|
34
|
+
var _GenerateQuestion = _interopRequireDefault(require("../../Dialogs/GenerateQuestion/GenerateQuestion"));
|
|
35
|
+
var _UploadRoleplayScript = _interopRequireDefault(require("../../Dialogs/UploadRoleplayScript/UploadRoleplayScript"));
|
|
35
36
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
36
37
|
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); }
|
|
37
38
|
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; }
|
|
@@ -102,6 +103,20 @@ const useStyles = (0, _mui.makeStyles)()((theme, {
|
|
|
102
103
|
option2Avatar: {
|
|
103
104
|
color: option === 2 ? theme.palette.primary.main : null,
|
|
104
105
|
boxShadow: option === 2 ? "rgb(255, 255, 255) 0px 0px 0px 2.5px, 0px 0px 0px 4.5px" : "none"
|
|
106
|
+
},
|
|
107
|
+
createQuestion: {
|
|
108
|
+
backgroundColor: theme.palette.primary.main,
|
|
109
|
+
color: theme.palette.mode === "dark" ? "black" : "white",
|
|
110
|
+
"&:hover": {
|
|
111
|
+
backgroundColor: theme.palette.primary.dark
|
|
112
|
+
}
|
|
113
|
+
},
|
|
114
|
+
generateQuestion: {
|
|
115
|
+
backgroundColor: theme.palette.secondary.main,
|
|
116
|
+
color: theme.palette.mode === "dark" ? "black" : "white",
|
|
117
|
+
"&:hover": {
|
|
118
|
+
backgroundColor: theme.palette.secondary.dark
|
|
119
|
+
}
|
|
105
120
|
}
|
|
106
121
|
}));
|
|
107
122
|
function Transition(props) {
|
|
@@ -115,8 +130,29 @@ function CreationOptions({
|
|
|
115
130
|
handleSelectOption,
|
|
116
131
|
roleplay,
|
|
117
132
|
option,
|
|
118
|
-
handleClickOpenCreateQuestion
|
|
133
|
+
handleClickOpenCreateQuestion,
|
|
134
|
+
setIsGenerateQuestionDialogOpen,
|
|
135
|
+
handleClose
|
|
119
136
|
}) {
|
|
137
|
+
const handleClickOpenGenerateQuestion = () => {
|
|
138
|
+
setIsGenerateQuestionDialogOpen(true);
|
|
139
|
+
handleClose();
|
|
140
|
+
};
|
|
141
|
+
const handleClickCreateQuestion = () => {
|
|
142
|
+
handleClickOpenCreateQuestion();
|
|
143
|
+
handleClose();
|
|
144
|
+
};
|
|
145
|
+
const actions = [{
|
|
146
|
+
icon: /*#__PURE__*/_react.default.createElement(_Create.default, null),
|
|
147
|
+
name: "Create Question",
|
|
148
|
+
onClick: handleClickCreateQuestion,
|
|
149
|
+
class: classes.createQuestion
|
|
150
|
+
}, {
|
|
151
|
+
icon: /*#__PURE__*/_react.default.createElement(_AutoFixHigh.default, null),
|
|
152
|
+
name: "Generate Question",
|
|
153
|
+
onClick: handleClickOpenGenerateQuestion,
|
|
154
|
+
class: classes.generateQuestion
|
|
155
|
+
}];
|
|
120
156
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
121
157
|
className: classes.creationOptions,
|
|
122
158
|
id: "creationOptions"
|
|
@@ -172,12 +208,27 @@ function CreationOptions({
|
|
|
172
208
|
number: "2"
|
|
173
209
|
}))), /*#__PURE__*/_react.default.createElement("div", {
|
|
174
210
|
className: `${classes.option}`
|
|
175
|
-
}, /*#__PURE__*/_react.default.createElement(_material.
|
|
211
|
+
}, /*#__PURE__*/_react.default.createElement(_material.SpeedDial, {
|
|
176
212
|
className: `${classes.avatar}`,
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
213
|
+
FabProps: {
|
|
214
|
+
color: "primary",
|
|
215
|
+
sx: {
|
|
216
|
+
minWidth: 60,
|
|
217
|
+
minHeight: 60
|
|
218
|
+
}
|
|
219
|
+
},
|
|
220
|
+
ariaLabel: "Add question",
|
|
221
|
+
icon: /*#__PURE__*/_react.default.createElement(_material.SpeedDialIcon, null)
|
|
222
|
+
}, actions.map(action => /*#__PURE__*/_react.default.createElement(_material.SpeedDialAction, {
|
|
223
|
+
key: action.name,
|
|
224
|
+
icon: action.icon,
|
|
225
|
+
tooltipTitle: action.name,
|
|
226
|
+
onClick: action.onClick,
|
|
227
|
+
classes: {
|
|
228
|
+
fab: action.class
|
|
229
|
+
},
|
|
230
|
+
tooltipPlacement: "right"
|
|
231
|
+
}))), /*#__PURE__*/_react.default.createElement(_material.Typography, {
|
|
181
232
|
variant: "h6",
|
|
182
233
|
color: option === 3 ? "primary" : ""
|
|
183
234
|
}, t("question")))));
|
|
@@ -217,6 +268,7 @@ function Roleplay({
|
|
|
217
268
|
siteLanguage
|
|
218
269
|
}) {
|
|
219
270
|
const [isGenerateRoleplayDialogOpen, setIsGenerateRoleplayDialogOpen] = (0, _react.useState)(false);
|
|
271
|
+
const [isGenerateQuestionDialogOpen, setIsGenerateQuestionDialogOpen] = (0, _react.useState)(false);
|
|
220
272
|
const {
|
|
221
273
|
recognitionState,
|
|
222
274
|
toggleListen,
|
|
@@ -565,7 +617,8 @@ function Roleplay({
|
|
|
565
617
|
roleplay: roleplay,
|
|
566
618
|
handleSelectOption: handleSelectOption,
|
|
567
619
|
option: option,
|
|
568
|
-
handleClickOpenCreateQuestion: handleClickOpenCreateQuestion
|
|
620
|
+
handleClickOpenCreateQuestion: handleClickOpenCreateQuestion,
|
|
621
|
+
setIsGenerateQuestionDialogOpen: setIsGenerateQuestionDialogOpen
|
|
569
622
|
}));
|
|
570
623
|
const tabs = [{
|
|
571
624
|
label: t("editor")
|
|
@@ -729,7 +782,8 @@ function Roleplay({
|
|
|
729
782
|
values: {
|
|
730
783
|
actor1: roleplay.actor1,
|
|
731
784
|
actor2: roleplay.actor2
|
|
732
|
-
}
|
|
785
|
+
},
|
|
786
|
+
disableRestoreFocus: true
|
|
733
787
|
}), isUpdatingQuestion.status && /*#__PURE__*/_react.default.createElement(_CreateQuestion.default, {
|
|
734
788
|
t: t,
|
|
735
789
|
learnLang: learnLang,
|
|
@@ -743,6 +797,23 @@ function Roleplay({
|
|
|
743
797
|
question: roleplay.script[isUpdatingQuestion.index]?.question,
|
|
744
798
|
answers: roleplay.script[isUpdatingQuestion.index].answers,
|
|
745
799
|
update: true
|
|
800
|
+
}), /*#__PURE__*/_react.default.createElement(_GenerateQuestion.default, {
|
|
801
|
+
t: t,
|
|
802
|
+
open: isGenerateQuestionDialogOpen,
|
|
803
|
+
handleClose: () => {
|
|
804
|
+
setIsGenerateQuestionDialogOpen(false);
|
|
805
|
+
},
|
|
806
|
+
script: roleplay.script,
|
|
807
|
+
values: {
|
|
808
|
+
actor1: roleplay.actor1,
|
|
809
|
+
actor2: roleplay.actor2
|
|
810
|
+
},
|
|
811
|
+
makeChatGptApiRequest: makeChatGptApiRequest,
|
|
812
|
+
onSubmit: handleAddQuestion,
|
|
813
|
+
learnLang: learnLang,
|
|
814
|
+
forLang: forLang,
|
|
815
|
+
siteLanguage: siteLanguage,
|
|
816
|
+
disableRestoreFocus: true
|
|
746
817
|
}), isGenerateRoleplayDialogOpen && /*#__PURE__*/_react.default.createElement(_GenerateRoleplay.default, {
|
|
747
818
|
t: t,
|
|
748
819
|
isGenerateRoleplayDialogOpen: isGenerateRoleplayDialogOpen,
|
|
@@ -297,6 +297,15 @@ function RoleplayGame({
|
|
|
297
297
|
formatUnderscores: false,
|
|
298
298
|
hideBottomBar: true,
|
|
299
299
|
muteSound: muteSound
|
|
300
|
+
}), /*#__PURE__*/_react.default.createElement(_InProgressExercise.default, {
|
|
301
|
+
t: t,
|
|
302
|
+
open: isInProgressModalOpen,
|
|
303
|
+
close: closeInProgressModal,
|
|
304
|
+
onClose: closeInProgressModal,
|
|
305
|
+
continueExercise: handleContinueExercise,
|
|
306
|
+
restartExercise: handleRestartExercise,
|
|
307
|
+
goBack: handleCloseExercise,
|
|
308
|
+
inTopic: courseId && sectionId && topicId
|
|
300
309
|
}), /*#__PURE__*/_react.default.createElement(_CompletedExcercise.default, {
|
|
301
310
|
open: isCompletionModalOpen,
|
|
302
311
|
restartExcercise: () => {
|
|
@@ -327,15 +336,6 @@ function RoleplayGame({
|
|
|
327
336
|
goBack: handleCloseExercise,
|
|
328
337
|
inTopic: courseId && sectionId && topicId,
|
|
329
338
|
isFinishExerciseDisabled: true
|
|
330
|
-
}), /*#__PURE__*/_react.default.createElement(_InProgressExercise.default, {
|
|
331
|
-
t: t,
|
|
332
|
-
open: isInProgressModalOpen,
|
|
333
|
-
close: closeInProgressModal,
|
|
334
|
-
onClose: closeInProgressModal,
|
|
335
|
-
continueExercise: handleContinueExercise,
|
|
336
|
-
restartExercise: handleRestartExercise,
|
|
337
|
-
goBack: handleCloseExercise,
|
|
338
|
-
inTopic: courseId && sectionId && topicId
|
|
339
339
|
}));
|
|
340
340
|
}
|
|
341
341
|
RoleplayGame.defaultProps = {
|
|
@@ -460,7 +460,7 @@ function AnswerResult({
|
|
|
460
460
|
onClick: handleNext,
|
|
461
461
|
className: classes.nextButton,
|
|
462
462
|
"data-cy": "answer-result-next-button",
|
|
463
|
-
"aria-label": "
|
|
463
|
+
"aria-label": "Next Button",
|
|
464
464
|
ref: nextBtnRef,
|
|
465
465
|
tabIndex: 1
|
|
466
466
|
}, t("next")), (exercise === "pronunciation" || exercise === "roleplay") && handleTryAgain && /*#__PURE__*/_react.default.createElement(_DefaultColourButton.default, {
|
|
@@ -12,6 +12,7 @@ var _Close = _interopRequireDefault(require("@mui/icons-material/Close"));
|
|
|
12
12
|
var _Error = _interopRequireDefault(require("@mui/icons-material/Error"));
|
|
13
13
|
var _Done = _interopRequireDefault(require("@mui/icons-material/Done"));
|
|
14
14
|
var _Info = _interopRequireDefault(require("@mui/icons-material/Info"));
|
|
15
|
+
var _material = require("@mui/material");
|
|
15
16
|
var _mui = require("tss-react/mui");
|
|
16
17
|
var _colors = require("@mui/material/colors");
|
|
17
18
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
@@ -82,13 +83,14 @@ function Snackbar({
|
|
|
82
83
|
onClose: closeSnackbar,
|
|
83
84
|
message: snackbarMessage,
|
|
84
85
|
"aria-describedby": "client-snackbar-message",
|
|
85
|
-
role: "
|
|
86
|
+
role: "none"
|
|
86
87
|
}, /*#__PURE__*/_react.default.createElement(_SnackbarContent.default, {
|
|
87
88
|
"data-cy": "snackbar",
|
|
88
89
|
className: color,
|
|
89
90
|
message: /*#__PURE__*/_react.default.createElement("span", {
|
|
90
91
|
"aria-label": "client-snackbar-message",
|
|
91
|
-
className: classes.message
|
|
92
|
+
className: classes.message,
|
|
93
|
+
role: "alert"
|
|
92
94
|
}, icon, t(snackbarMessage)),
|
|
93
95
|
action: [/*#__PURE__*/_react.default.createElement(_IconButton.default, {
|
|
94
96
|
key: "close",
|
|
@@ -569,7 +569,8 @@ function Classroom({
|
|
|
569
569
|
userImage,
|
|
570
570
|
verificationStatus,
|
|
571
571
|
gameAward,
|
|
572
|
-
banner
|
|
572
|
+
banner,
|
|
573
|
+
bannerXs
|
|
573
574
|
} = classroom;
|
|
574
575
|
const handleJoin = () => {
|
|
575
576
|
if (authenticated) {
|
|
@@ -854,7 +855,7 @@ function Classroom({
|
|
|
854
855
|
marginBottom: theme.spacing(4)
|
|
855
856
|
}),
|
|
856
857
|
highQualitySrc: (banner ?? picture) || _index.default.classroom,
|
|
857
|
-
lowQualitySrc: pictureXs,
|
|
858
|
+
lowQualitySrc: bannerXs ?? pictureXs,
|
|
858
859
|
title: classroomName
|
|
859
860
|
}), userImage ? /*#__PURE__*/_react.default.createElement(_CardElements.CardAvatar, {
|
|
860
861
|
"aria-label": `Open ${classroomName} creator's profile`,
|
|
@@ -525,7 +525,8 @@ function Course({
|
|
|
525
525
|
verificationStatus,
|
|
526
526
|
createdBy,
|
|
527
527
|
createdByName,
|
|
528
|
-
gameAward
|
|
528
|
+
gameAward,
|
|
529
|
+
bannerXs
|
|
529
530
|
} = course;
|
|
530
531
|
const handleJoin = () => {
|
|
531
532
|
if (creatorSubscription.isPaidUser || course.visibility === "public") {
|
|
@@ -702,7 +703,7 @@ function Course({
|
|
|
702
703
|
marginBottom: theme.spacing(4)
|
|
703
704
|
}),
|
|
704
705
|
highQualitySrc: (banner ?? picture) || _index.default.course,
|
|
705
|
-
lowQualitySrc: pictureXs,
|
|
706
|
+
lowQualitySrc: bannerXs ?? pictureXs,
|
|
706
707
|
title: courseName
|
|
707
708
|
}), userImage ? /*#__PURE__*/_react.default.createElement(_CardElements.CardAvatar, {
|
|
708
709
|
"aria-label": `Open ${courseName} creator's profile`,
|
|
@@ -708,7 +708,8 @@ function Topic({
|
|
|
708
708
|
createdByName,
|
|
709
709
|
banner,
|
|
710
710
|
gameAward,
|
|
711
|
-
isKeyboardHiddenTranslation
|
|
711
|
+
isKeyboardHiddenTranslation,
|
|
712
|
+
bannerXs
|
|
712
713
|
} = topic;
|
|
713
714
|
const handleAddPhrase = async values => {
|
|
714
715
|
try {
|
|
@@ -847,7 +848,7 @@ function Topic({
|
|
|
847
848
|
marginBottom: theme.spacing(4)
|
|
848
849
|
}),
|
|
849
850
|
highQualitySrc: (banner ?? picture) || _index2.default.topic,
|
|
850
|
-
lowQualitySrc: pictureXs,
|
|
851
|
+
lowQualitySrc: bannerXs ?? pictureXs,
|
|
851
852
|
title: topicName
|
|
852
853
|
}), userImage ? /*#__PURE__*/_react.default.createElement(_CardElements.CardAvatar, {
|
|
853
854
|
"aria-label": `${t("go_to")} ${createdByName || `${topicName} ${t("creator")}`} ${t("profile")}`,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nualang/nualang-ui-components",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1135",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"files": [
|
|
6
6
|
"dist",
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"@mui/material": "^5.14.2",
|
|
23
23
|
"@mui/system": "^5.14.1",
|
|
24
24
|
"@mui/x-date-pickers": "^6.10.1",
|
|
25
|
-
"@nualang/videochat-ui-components": "^0.0.
|
|
25
|
+
"@nualang/videochat-ui-components": "^0.0.168",
|
|
26
26
|
"@storybook/theming": "^7.6.17",
|
|
27
27
|
"@stripe/react-stripe-js": "^2.1.1",
|
|
28
28
|
"@stripe/stripe-js": "^1.54.2",
|