@tinyweb_dev/oe-exam-sdk 1.0.12 → 1.0.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/dist/components/exams/take/components/question-renderers/MoversTrueFalseRenderer.js +3 -1
  2. package/dist/components/exams/take/components/question-renderers/MoversWriteSentencesRenderer.js +3 -1
  3. package/dist/components/questions/_shared/components/compact/KidCollapsibleBlock.d.ts +8 -0
  4. package/dist/components/questions/_shared/components/compact/KidCollapsibleBlock.js +16 -0
  5. package/dist/components/questions/_shared/components/compact/KidPassage.d.ts +5 -0
  6. package/dist/components/questions/_shared/components/compact/KidPassage.js +21 -0
  7. package/dist/components/questions/_shared/components/compact/KidQuestionCard.js +3 -1
  8. package/dist/components/questions/_shared/components/compact/SpeakingReplyMic.d.ts +7 -0
  9. package/dist/components/questions/_shared/components/compact/SpeakingReplyMic.js +86 -0
  10. package/dist/components/questions/_shared/components/compact/index.d.ts +4 -0
  11. package/dist/components/questions/_shared/components/compact/index.js +4 -0
  12. package/dist/components/questions/_shared/components/compact/reviewItemCard.d.ts +3 -0
  13. package/dist/components/questions/_shared/components/compact/reviewItemCard.js +11 -0
  14. package/dist/components/questions/types/answer-the-question-group/AnswerTheQuestionGroupClient.js +14 -5
  15. package/dist/components/questions/types/answer-the-question-group/map-answer-the-question-group-data.js +2 -2
  16. package/dist/components/questions/types/arrange-letters-into-words/ArrangeLettersIntoWordsClient.js +2 -2
  17. package/dist/components/questions/types/choose-the-correct-answer/ChooseTheCorrectAnswerClient.js +19 -8
  18. package/dist/components/questions/types/choose-the-correct-answer-group/ChooseTheCorrectAnswerGroupClient.js +2 -2
  19. package/dist/components/questions/types/choose-then-answer-group/ChooseThenAnswerGroupClient.js +36 -56
  20. package/dist/components/questions/types/cross-out-word-group/CrossOutWordGroupClient.js +2 -2
  21. package/dist/components/questions/types/crossword-puzzle/CrosswordPuzzleClient.js +53 -50
  22. package/dist/components/questions/types/fill-in-blank/FillInBlankClient.js +2 -2
  23. package/dist/components/questions/types/fill-in-blank-group/FillInBlankAnswerKey.js +8 -2
  24. package/dist/components/questions/types/fill-in-blank-group/FillInBlankGroupClient.js +5 -3
  25. package/dist/components/questions/types/find-words-in-matrix/FindWordsInMatrixClient.js +18 -15
  26. package/dist/components/questions/types/match-columns-to-make-sentences/MatchColumnsToMakeSentencesClient.js +2 -2
  27. package/dist/components/questions/types/match-word-to-picture/MatchWordToPictureGroupClient.js +2 -2
  28. package/dist/components/questions/types/match-word-to-picture-group/MatchWordToPictureGroupClient.js +2 -2
  29. package/dist/components/questions/types/speaking-cue-card/SpeakingCueCardClient.d.ts +4 -1
  30. package/dist/components/questions/types/speaking-cue-card/SpeakingCueCardClient.js +4 -4
  31. package/dist/components/questions/types/spontaneous-qa-group/SpontaneousQaGroupClient.js +17 -82
  32. package/dist/components/questions/types/true-false-correct-group/TrueFalseCorrectGroupClient.js +2 -2
  33. package/dist/components/questions/types/true-false-group/TrueFalseGroupClient.js +2 -2
  34. package/dist/components/questions/types/word-fill-structured-form/WordFillStructuredFormClient.js +18 -23
  35. package/dist/components/questions/types/word-fill-structured-form/WordFillStructuredFormCreator.js +2 -8
  36. package/dist/components/questions/types/word-fill-structured-form/map-wfsf-question-data.js +4 -11
  37. package/dist/components/questions/types/word-fill-structured-form/transform.js +4 -9
  38. package/dist/components/questions/types/word-order-and-match-group/WordOrderAndMatchGroupClient.js +4 -2
  39. package/dist/components/questions/types/word-ordering-group/WordOrderingGroupClient.js +2 -2
  40. package/dist/components/questions/viewer/QuestionViewer.d.ts +3 -1
  41. package/dist/components/questions/viewer/QuestionViewer.js +37 -19
  42. package/dist/components/questions/viewer/SpontaneousQaGroupViewer.js +1 -1
  43. package/dist/shared/index.d.ts +2 -0
  44. package/dist/shared/index.js +1 -0
  45. package/dist/shared/lib/i18n/messages/en/common.d.ts +38 -0
  46. package/dist/shared/lib/i18n/messages/en/common.js +39 -0
  47. package/dist/shared/lib/i18n/messages/en.d.ts +38 -0
  48. package/dist/shared/lib/i18n/messages/vi/common.d.ts +38 -0
  49. package/dist/shared/lib/i18n/messages/vi/common.js +39 -0
  50. package/dist/shared/lib/i18n/messages/vi.d.ts +38 -0
  51. package/dist/shared/lib/utils/media-urls.d.ts +2 -0
  52. package/dist/shared/lib/utils/media-urls.js +23 -0
  53. package/package.json +1 -1
@@ -136,5 +136,44 @@ const common = {
136
136
  'common.badge.source.createdByAdmin': 'Created by admin',
137
137
  'common.badge.source.createdByTeacher': 'Created by teacher',
138
138
  'common.badge.source.createdFromEBM': 'Synced from EBM',
139
+ // Question viewer chrome (homework / examine)
140
+ 'question.viewer.fallbackTitle': 'Question',
141
+ 'question.viewer.points': '{count} pts',
142
+ 'question.viewer.questionN': 'Question {n}',
143
+ 'question.viewer.partN': 'Part {n}',
144
+ 'question.viewer.example': 'Example',
145
+ 'question.viewer.correct': 'Correct',
146
+ 'question.viewer.wrong': 'Incorrect',
147
+ 'question.viewer.readingPassage': 'Reading passage',
148
+ 'question.viewer.placeholder': 'Enter your answer…',
149
+ 'question.viewer.yourAnswer': 'Your answer',
150
+ 'question.viewer.writePlaceholder': 'Write your answer here…',
151
+ 'question.viewer.answerKey': 'Answer key',
152
+ 'question.viewer.noAnswer': 'No answer yet',
153
+ 'question.viewer.notWritten': 'Not written',
154
+ 'question.viewer.sample': 'Sample',
155
+ 'question.viewer.chooseScore': 'Choose {score}',
156
+ 'question.viewer.writeScore': 'Write {score}',
157
+ 'question.viewer.expandPassage': 'Show more',
158
+ 'question.viewer.collapsePassage': 'Show less',
159
+ 'question.viewer.unsupported': 'Unsupported question type: {type}',
160
+ 'question.viewer.missingPrompt': 'Question text is missing',
161
+ 'question.viewer.imageAlt': 'Image {n}',
162
+ 'question.viewer.itemImageAlt': 'Question {n} image {m}',
163
+ 'question.viewer.atqgDefaultInstruction': 'Read the text and answer the questions.',
164
+ 'question.viewer.wfsfDefaultTitle': 'Fill in the structured form',
165
+ 'question.type.ANSWER_THE_QUESTION_GROUP': 'Answer the questions',
166
+ 'question.type.CHOOSE_THEN_ANSWER_GROUP': 'Choose then answer',
167
+ 'question.type.FILL_IN_BLANK': 'Fill in the blank',
168
+ 'question.type.FILL_IN_BLANK_GROUP': 'Fill in the blanks',
169
+ 'question.type.WORD_FILL_STRUCTURED_FORM': 'Structured form',
170
+ 'question.type.WORD_FILL_PARAGRAPH': 'Fill the paragraph',
171
+ 'question.type.MATCHING_WITH_LINES_GROUP': 'Match the columns',
172
+ 'question.type.MATCH_WORD_TO_PICTURE': 'Match words to pictures',
173
+ 'question.type.MATCH_WORD_TO_PICTURE_GROUP': 'Match words to pictures',
174
+ 'question.type.CROSSWORD_PUZZLE': 'Crossword',
175
+ 'question.type.FIND_WORDS_IN_MATRIX': 'Find the words',
176
+ 'question.type.CHOOSE_THE_CORRECT_ANSWER': 'Choose the correct answer',
177
+ 'question.type.CHOOSE_THE_CORRECT_ANSWER_GROUP': 'Choose the correct answers',
139
178
  };
140
179
  export default common;
@@ -2297,5 +2297,43 @@ declare const en: {
2297
2297
  readonly 'common.badge.source.createdByAdmin': "Created by admin";
2298
2298
  readonly 'common.badge.source.createdByTeacher': "Created by teacher";
2299
2299
  readonly 'common.badge.source.createdFromEBM': "Synced from EBM";
2300
+ readonly 'question.viewer.fallbackTitle': "Question";
2301
+ readonly 'question.viewer.points': "{count} pts";
2302
+ readonly 'question.viewer.questionN': "Question {n}";
2303
+ readonly 'question.viewer.partN': "Part {n}";
2304
+ readonly 'question.viewer.example': "Example";
2305
+ readonly 'question.viewer.correct': "Correct";
2306
+ readonly 'question.viewer.wrong': "Incorrect";
2307
+ readonly 'question.viewer.readingPassage': "Reading passage";
2308
+ readonly 'question.viewer.placeholder': "Enter your answer…";
2309
+ readonly 'question.viewer.yourAnswer': "Your answer";
2310
+ readonly 'question.viewer.writePlaceholder': "Write your answer here…";
2311
+ readonly 'question.viewer.answerKey': "Answer key";
2312
+ readonly 'question.viewer.noAnswer': "No answer yet";
2313
+ readonly 'question.viewer.notWritten': "Not written";
2314
+ readonly 'question.viewer.sample': "Sample";
2315
+ readonly 'question.viewer.chooseScore': "Choose {score}";
2316
+ readonly 'question.viewer.writeScore': "Write {score}";
2317
+ readonly 'question.viewer.expandPassage': "Show more";
2318
+ readonly 'question.viewer.collapsePassage': "Show less";
2319
+ readonly 'question.viewer.unsupported': "Unsupported question type: {type}";
2320
+ readonly 'question.viewer.missingPrompt': "Question text is missing";
2321
+ readonly 'question.viewer.imageAlt': "Image {n}";
2322
+ readonly 'question.viewer.itemImageAlt': "Question {n} image {m}";
2323
+ readonly 'question.viewer.atqgDefaultInstruction': "Read the text and answer the questions.";
2324
+ readonly 'question.viewer.wfsfDefaultTitle': "Fill in the structured form";
2325
+ readonly 'question.type.ANSWER_THE_QUESTION_GROUP': "Answer the questions";
2326
+ readonly 'question.type.CHOOSE_THEN_ANSWER_GROUP': "Choose then answer";
2327
+ readonly 'question.type.FILL_IN_BLANK': "Fill in the blank";
2328
+ readonly 'question.type.FILL_IN_BLANK_GROUP': "Fill in the blanks";
2329
+ readonly 'question.type.WORD_FILL_STRUCTURED_FORM': "Structured form";
2330
+ readonly 'question.type.WORD_FILL_PARAGRAPH': "Fill the paragraph";
2331
+ readonly 'question.type.MATCHING_WITH_LINES_GROUP': "Match the columns";
2332
+ readonly 'question.type.MATCH_WORD_TO_PICTURE': "Match words to pictures";
2333
+ readonly 'question.type.MATCH_WORD_TO_PICTURE_GROUP': "Match words to pictures";
2334
+ readonly 'question.type.CROSSWORD_PUZZLE': "Crossword";
2335
+ readonly 'question.type.FIND_WORDS_IN_MATRIX': "Find the words";
2336
+ readonly 'question.type.CHOOSE_THE_CORRECT_ANSWER': "Choose the correct answer";
2337
+ readonly 'question.type.CHOOSE_THE_CORRECT_ANSWER_GROUP': "Choose the correct answers";
2300
2338
  };
2301
2339
  export default en;
@@ -120,5 +120,43 @@ declare const common: {
120
120
  readonly 'common.badge.source.createdByAdmin': "Admin tạo";
121
121
  readonly 'common.badge.source.createdByTeacher': "Giáo viên tạo";
122
122
  readonly 'common.badge.source.createdFromEBM': "Đồng bộ EBM";
123
+ readonly 'question.viewer.fallbackTitle': "Câu hỏi";
124
+ readonly 'question.viewer.points': "{count} điểm";
125
+ readonly 'question.viewer.questionN': "Câu {n}";
126
+ readonly 'question.viewer.partN': "Bài {n}";
127
+ readonly 'question.viewer.example': "Câu ví dụ";
128
+ readonly 'question.viewer.correct': "Đúng";
129
+ readonly 'question.viewer.wrong': "Sai";
130
+ readonly 'question.viewer.readingPassage': "Bài đọc";
131
+ readonly 'question.viewer.placeholder': "Nhập câu trả lời...";
132
+ readonly 'question.viewer.yourAnswer': "Câu trả lời của bạn";
133
+ readonly 'question.viewer.writePlaceholder': "Viết câu trả lời tại đây...";
134
+ readonly 'question.viewer.answerKey': "Đáp án";
135
+ readonly 'question.viewer.noAnswer': "Chưa có đáp án";
136
+ readonly 'question.viewer.notWritten': "Chưa viết";
137
+ readonly 'question.viewer.sample': "Mẫu";
138
+ readonly 'question.viewer.chooseScore': "Chọn {score}";
139
+ readonly 'question.viewer.writeScore': "Viết {score}";
140
+ readonly 'question.viewer.expandPassage': "Xem thêm";
141
+ readonly 'question.viewer.collapsePassage': "Thu gọn";
142
+ readonly 'question.viewer.unsupported': "Loại câu hỏi không được hỗ trợ: {type}";
143
+ readonly 'question.viewer.missingPrompt': "Câu hỏi chưa được nhập";
144
+ readonly 'question.viewer.imageAlt': "Hình ảnh ({n})";
145
+ readonly 'question.viewer.itemImageAlt': "Hình ảnh câu {n} ({m})";
146
+ readonly 'question.viewer.atqgDefaultInstruction': "Đọc đoạn văn và trả lời câu hỏi.";
147
+ readonly 'question.viewer.wfsfDefaultTitle': "Điền từ vào biểu mẫu có cấu trúc";
148
+ readonly 'question.type.ANSWER_THE_QUESTION_GROUP': "Trả lời câu hỏi";
149
+ readonly 'question.type.CHOOSE_THEN_ANSWER_GROUP': "Chọn rồi trả lời";
150
+ readonly 'question.type.FILL_IN_BLANK': "Điền từ";
151
+ readonly 'question.type.FILL_IN_BLANK_GROUP': "Điền từ";
152
+ readonly 'question.type.WORD_FILL_STRUCTURED_FORM': "Điền từ vào biểu mẫu";
153
+ readonly 'question.type.WORD_FILL_PARAGRAPH': "Điền từ vào đoạn";
154
+ readonly 'question.type.MATCHING_WITH_LINES_GROUP': "Nối cột";
155
+ readonly 'question.type.MATCH_WORD_TO_PICTURE': "Nối từ với tranh";
156
+ readonly 'question.type.MATCH_WORD_TO_PICTURE_GROUP': "Nối từ với tranh";
157
+ readonly 'question.type.CROSSWORD_PUZZLE': "Ô chữ";
158
+ readonly 'question.type.FIND_WORDS_IN_MATRIX': "Tìm từ";
159
+ readonly 'question.type.CHOOSE_THE_CORRECT_ANSWER': "Chọn đáp án đúng";
160
+ readonly 'question.type.CHOOSE_THE_CORRECT_ANSWER_GROUP': "Chọn đáp án đúng";
123
161
  };
124
162
  export default common;
@@ -136,5 +136,44 @@ const common = {
136
136
  'common.badge.source.createdByAdmin': 'Admin tạo',
137
137
  'common.badge.source.createdByTeacher': 'Giáo viên tạo',
138
138
  'common.badge.source.createdFromEBM': 'Đồng bộ EBM',
139
+ // Question viewer chrome (homework / examine)
140
+ 'question.viewer.fallbackTitle': 'Câu hỏi',
141
+ 'question.viewer.points': '{count} điểm',
142
+ 'question.viewer.questionN': 'Câu {n}',
143
+ 'question.viewer.partN': 'Bài {n}',
144
+ 'question.viewer.example': 'Câu ví dụ',
145
+ 'question.viewer.correct': 'Đúng',
146
+ 'question.viewer.wrong': 'Sai',
147
+ 'question.viewer.readingPassage': 'Bài đọc',
148
+ 'question.viewer.placeholder': 'Nhập câu trả lời...',
149
+ 'question.viewer.yourAnswer': 'Câu trả lời của bạn',
150
+ 'question.viewer.writePlaceholder': 'Viết câu trả lời tại đây...',
151
+ 'question.viewer.answerKey': 'Đáp án',
152
+ 'question.viewer.noAnswer': 'Chưa có đáp án',
153
+ 'question.viewer.notWritten': 'Chưa viết',
154
+ 'question.viewer.sample': 'Mẫu',
155
+ 'question.viewer.chooseScore': 'Chọn {score}',
156
+ 'question.viewer.writeScore': 'Viết {score}',
157
+ 'question.viewer.expandPassage': 'Xem thêm',
158
+ 'question.viewer.collapsePassage': 'Thu gọn',
159
+ 'question.viewer.unsupported': 'Loại câu hỏi không được hỗ trợ: {type}',
160
+ 'question.viewer.missingPrompt': 'Câu hỏi chưa được nhập',
161
+ 'question.viewer.imageAlt': 'Hình ảnh ({n})',
162
+ 'question.viewer.itemImageAlt': 'Hình ảnh câu {n} ({m})',
163
+ 'question.viewer.atqgDefaultInstruction': 'Đọc đoạn văn và trả lời câu hỏi.',
164
+ 'question.viewer.wfsfDefaultTitle': 'Điền từ vào biểu mẫu có cấu trúc',
165
+ 'question.type.ANSWER_THE_QUESTION_GROUP': 'Trả lời câu hỏi',
166
+ 'question.type.CHOOSE_THEN_ANSWER_GROUP': 'Chọn rồi trả lời',
167
+ 'question.type.FILL_IN_BLANK': 'Điền từ',
168
+ 'question.type.FILL_IN_BLANK_GROUP': 'Điền từ',
169
+ 'question.type.WORD_FILL_STRUCTURED_FORM': 'Điền từ vào biểu mẫu',
170
+ 'question.type.WORD_FILL_PARAGRAPH': 'Điền từ vào đoạn',
171
+ 'question.type.MATCHING_WITH_LINES_GROUP': 'Nối cột',
172
+ 'question.type.MATCH_WORD_TO_PICTURE': 'Nối từ với tranh',
173
+ 'question.type.MATCH_WORD_TO_PICTURE_GROUP': 'Nối từ với tranh',
174
+ 'question.type.CROSSWORD_PUZZLE': 'Ô chữ',
175
+ 'question.type.FIND_WORDS_IN_MATRIX': 'Tìm từ',
176
+ 'question.type.CHOOSE_THE_CORRECT_ANSWER': 'Chọn đáp án đúng',
177
+ 'question.type.CHOOSE_THE_CORRECT_ANSWER_GROUP': 'Chọn đáp án đúng',
139
178
  };
140
179
  export default common;
@@ -2297,5 +2297,43 @@ declare const vi: {
2297
2297
  readonly 'common.badge.source.createdByAdmin': "Admin tạo";
2298
2298
  readonly 'common.badge.source.createdByTeacher': "Giáo viên tạo";
2299
2299
  readonly 'common.badge.source.createdFromEBM': "Đồng bộ EBM";
2300
+ readonly 'question.viewer.fallbackTitle': "Câu hỏi";
2301
+ readonly 'question.viewer.points': "{count} điểm";
2302
+ readonly 'question.viewer.questionN': "Câu {n}";
2303
+ readonly 'question.viewer.partN': "Bài {n}";
2304
+ readonly 'question.viewer.example': "Câu ví dụ";
2305
+ readonly 'question.viewer.correct': "Đúng";
2306
+ readonly 'question.viewer.wrong': "Sai";
2307
+ readonly 'question.viewer.readingPassage': "Bài đọc";
2308
+ readonly 'question.viewer.placeholder': "Nhập câu trả lời...";
2309
+ readonly 'question.viewer.yourAnswer': "Câu trả lời của bạn";
2310
+ readonly 'question.viewer.writePlaceholder': "Viết câu trả lời tại đây...";
2311
+ readonly 'question.viewer.answerKey': "Đáp án";
2312
+ readonly 'question.viewer.noAnswer': "Chưa có đáp án";
2313
+ readonly 'question.viewer.notWritten': "Chưa viết";
2314
+ readonly 'question.viewer.sample': "Mẫu";
2315
+ readonly 'question.viewer.chooseScore': "Chọn {score}";
2316
+ readonly 'question.viewer.writeScore': "Viết {score}";
2317
+ readonly 'question.viewer.expandPassage': "Xem thêm";
2318
+ readonly 'question.viewer.collapsePassage': "Thu gọn";
2319
+ readonly 'question.viewer.unsupported': "Loại câu hỏi không được hỗ trợ: {type}";
2320
+ readonly 'question.viewer.missingPrompt': "Câu hỏi chưa được nhập";
2321
+ readonly 'question.viewer.imageAlt': "Hình ảnh ({n})";
2322
+ readonly 'question.viewer.itemImageAlt': "Hình ảnh câu {n} ({m})";
2323
+ readonly 'question.viewer.atqgDefaultInstruction': "Đọc đoạn văn và trả lời câu hỏi.";
2324
+ readonly 'question.viewer.wfsfDefaultTitle': "Điền từ vào biểu mẫu có cấu trúc";
2325
+ readonly 'question.type.ANSWER_THE_QUESTION_GROUP': "Trả lời câu hỏi";
2326
+ readonly 'question.type.CHOOSE_THEN_ANSWER_GROUP': "Chọn rồi trả lời";
2327
+ readonly 'question.type.FILL_IN_BLANK': "Điền từ";
2328
+ readonly 'question.type.FILL_IN_BLANK_GROUP': "Điền từ";
2329
+ readonly 'question.type.WORD_FILL_STRUCTURED_FORM': "Điền từ vào biểu mẫu";
2330
+ readonly 'question.type.WORD_FILL_PARAGRAPH': "Điền từ vào đoạn";
2331
+ readonly 'question.type.MATCHING_WITH_LINES_GROUP': "Nối cột";
2332
+ readonly 'question.type.MATCH_WORD_TO_PICTURE': "Nối từ với tranh";
2333
+ readonly 'question.type.MATCH_WORD_TO_PICTURE_GROUP': "Nối từ với tranh";
2334
+ readonly 'question.type.CROSSWORD_PUZZLE': "Ô chữ";
2335
+ readonly 'question.type.FIND_WORDS_IN_MATRIX': "Tìm từ";
2336
+ readonly 'question.type.CHOOSE_THE_CORRECT_ANSWER': "Chọn đáp án đúng";
2337
+ readonly 'question.type.CHOOSE_THE_CORRECT_ANSWER_GROUP': "Chọn đáp án đúng";
2300
2338
  };
2301
2339
  export default vi;
@@ -0,0 +1,2 @@
1
+ /** Normalize creator / bank `imageUrl` that may be a string, string[], or Array#toString join. */
2
+ export declare function toMediaUrlList(value: unknown): string[];
@@ -0,0 +1,23 @@
1
+ /** Normalize creator / bank `imageUrl` that may be a string, string[], or Array#toString join. */
2
+ export function toMediaUrlList(value) {
3
+ if (Array.isArray(value)) {
4
+ return value.flatMap((item) => toMediaUrlList(item));
5
+ }
6
+ if (typeof value !== 'string') {
7
+ return [];
8
+ }
9
+ const trimmed = value.trim();
10
+ if (!trimmed) {
11
+ return [];
12
+ }
13
+ if (trimmed.includes(',') && /https?:\/\//i.test(trimmed)) {
14
+ const parts = trimmed
15
+ .split(',')
16
+ .map((part) => part.trim())
17
+ .filter(Boolean);
18
+ if (parts.length > 1 && parts.every((part) => /^https?:\/\//i.test(part) || !part.includes(' '))) {
19
+ return parts;
20
+ }
21
+ }
22
+ return [trimmed];
23
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tinyweb_dev/oe-exam-sdk",
3
- "version": "1.0.12",
3
+ "version": "1.0.14",
4
4
  "description": "Reusable OceanEdu question components.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",