@elice/material-quiz 1.240709.0 → 1.240711.0

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 (35) hide show
  1. package/cjs/components/material-quiz/MaterialQuiz.js +32 -12
  2. package/cjs/components/material-quiz/MaterialQuizInfo.js +57 -12
  3. package/cjs/components/material-quiz/MaterialQuizSelectMultiple.js +12 -5
  4. package/cjs/components/material-quiz/MaterialQuizSelectMultipleOrder.js +11 -5
  5. package/cjs/components/material-quiz/MaterialQuizSelectOne.js +12 -5
  6. package/cjs/components/material-quiz/MaterialQuizText.js +11 -5
  7. package/cjs/components/material-quiz/context/MaterialQuizContext.d.ts +2 -0
  8. package/cjs/components/material-quiz/context/MaterialQuizContext.js +14 -2
  9. package/cjs/components/material-quiz/locales/en.json.js +1 -1
  10. package/cjs/components/material-quiz/locales/ja.json.js +1 -1
  11. package/cjs/components/material-quiz/locales/ko.json.js +1 -1
  12. package/cjs/components/material-quiz/locales/th.json.js +1 -1
  13. package/cjs/components/material-quiz/material-quiz-group/MaterialQuizGroup.js +23 -30
  14. package/cjs/components/shared/QuestionBox.js +57 -37
  15. package/cjs/components/shared/utils/mergeRefs.d.ts +2 -0
  16. package/cjs/components/shared/utils/mergeRefs.js +11 -0
  17. package/cjs/hooks/useCaculatePassage.js +11 -3
  18. package/es/components/material-quiz/MaterialQuiz.js +32 -12
  19. package/es/components/material-quiz/MaterialQuizInfo.js +58 -13
  20. package/es/components/material-quiz/MaterialQuizSelectMultiple.js +14 -7
  21. package/es/components/material-quiz/MaterialQuizSelectMultipleOrder.js +12 -6
  22. package/es/components/material-quiz/MaterialQuizSelectOne.js +13 -6
  23. package/es/components/material-quiz/MaterialQuizText.js +12 -6
  24. package/es/components/material-quiz/context/MaterialQuizContext.d.ts +2 -0
  25. package/es/components/material-quiz/context/MaterialQuizContext.js +15 -3
  26. package/es/components/material-quiz/locales/en.json.js +1 -1
  27. package/es/components/material-quiz/locales/ja.json.js +1 -1
  28. package/es/components/material-quiz/locales/ko.json.js +1 -1
  29. package/es/components/material-quiz/locales/th.json.js +1 -1
  30. package/es/components/material-quiz/material-quiz-group/MaterialQuizGroup.js +24 -31
  31. package/es/components/shared/QuestionBox.js +57 -37
  32. package/es/components/shared/utils/mergeRefs.d.ts +2 -0
  33. package/es/components/shared/utils/mergeRefs.js +9 -0
  34. package/es/hooks/useCaculatePassage.js +12 -4
  35. package/package.json +5 -4
@@ -6,7 +6,9 @@ var React = require('react');
6
6
  var reactUse = require('react-use');
7
7
  var designTokens = require('@elice/design-tokens');
8
8
  var intl = require('@elice/intl');
9
+ var muiSystem = require('@elice/mui-system');
9
10
  var types = require('@elice/types');
11
+ var material = require('@mui/material');
10
12
  var styled = require('styled-components');
11
13
  var element = require('../../constant/element.js');
12
14
  var MaterialQuizContext = require('./context/MaterialQuizContext.js');
@@ -15,27 +17,39 @@ var ko = require('./locales/ko.json.js');
15
17
  var MaterialQuizShimmer = require('./MaterialQuizShimmer.js');
16
18
  var MaterialQuizInfo = require('./MaterialQuizInfo.js');
17
19
 
20
+ const eliceTheme = muiSystem.createEliceTheme({
21
+ paletteMode: 'dark',
22
+ paletteName: 'purple'
23
+ });
18
24
  const AsyncMaterialQuizSelectMultiple = React.lazy(() => Promise.resolve().then(function () { return require('./MaterialQuizSelectMultiple.js'); }));
19
25
  const AsyncMaterialQuizSelectMultipleOrder = React.lazy(() => Promise.resolve().then(function () { return require('./MaterialQuizSelectMultipleOrder.js'); }));
20
26
  const AsyncMaterialQuizText = React.lazy(() => Promise.resolve().then(function () { return require('./MaterialQuizText.js'); }));
21
27
  const AsyncMaterialQuizSelectOne = React.lazy(() => Promise.resolve().then(function () { return require('./MaterialQuizSelectOne.js'); }));
22
28
  const AsyncMaterialQuizGroup = React.lazy(() => Promise.resolve().then(function () { return require('./material-quiz-group/index.js'); }));
29
+ // 746px
30
+ const MAX_CONTENT_WIDTH = '46.625rem';
23
31
  const StyledMaterialQuizInfo = styled.div.withConfig({
24
32
  componentId: "sc-1eyn8fb-0"
25
33
  })([""]);
26
34
  const StyledMaterialQuizContent = styled.div.withConfig({
27
35
  componentId: "sc-1eyn8fb-1"
28
- })(["min-width:0;margin:", ";height:100%;"], ({
36
+ })(["position:relative;z-index:0;min-width:0;margin:", ";height:100%;"], ({
29
37
  vertical
30
38
  }) => vertical ? 'unset' : 'auto');
31
- const StyledMaterialQuizWrapper = styled.div.withConfig({
39
+ const LoadingContainer = styled.div.withConfig({
32
40
  componentId: "sc-1eyn8fb-2"
33
- })(["-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:flex;width:100%;height:100%;flex-direction:", ";& > *{flex:", ";}gap:1rem;", "{height:", ";overflow-y:", ";& > div{max-height:unset;}}"], ({
41
+ })(["position:absolute;width:100%;height:100%;top:0;left:0;z-index:1;max-width:none !important;background-color:", ";"], designTokens.base.color.navy8);
42
+ const StyledMaterialQuizWrapper = styled.div.withConfig({
43
+ componentId: "sc-1eyn8fb-3"
44
+ })(["-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:flex;width:100%;height:100%;flex-direction:", ";position:relative;& > *{flex:", ";max-width:", ";}gap:1rem;", "{height:", ";overflow-y:", ";& > div{max-height:unset;}}"], ({
34
45
  vertical
35
46
  }) => vertical ? 'column' : 'row', ({
47
+ vertical
48
+ }) => vertical ? 'auto' : '1', ({
36
49
  vertical,
37
- isQuizGroupType
38
- }) => vertical || isQuizGroupType ? 'auto' : '0.5', StyledMaterialQuizInfo, ({
50
+ isQuizGroupType,
51
+ isLongPassage
52
+ }) => !isLongPassage && !vertical && !isQuizGroupType ? `${MAX_CONTENT_WIDTH}` : 'unset', StyledMaterialQuizInfo, ({
39
53
  vertical
40
54
  }) => vertical ? 'auto' : '100%', ({
41
55
  vertical
@@ -45,7 +59,8 @@ const MaterialQuiz = () => {
45
59
  materialQuiz,
46
60
  vertical,
47
61
  course,
48
- isLongPassage
62
+ isLongPassage,
63
+ isInitialLoading
49
64
  } = MaterialQuizContext.useMaterialQuizState();
50
65
  const {
51
66
  setVertical
@@ -54,7 +69,9 @@ const MaterialQuiz = () => {
54
69
  width
55
70
  }] = reactUse.useMeasure();
56
71
  const isQuizGroupType = Boolean((materialQuiz === null || materialQuiz === void 0 ? void 0 : materialQuiz.optionType) === types.enums.QuizOptionType.Group);
57
- const isVisibleSideBySide = !vertical && isLongPassage && !isQuizGroupType;
72
+ const isFetchingData = !materialQuiz || !course;
73
+ const isLoadingLayout = isFetchingData || isInitialLoading;
74
+ const isVisibleSideBySide = !vertical && isLongPassage;
58
75
  const isRenderQuestionWithPassage = (vertical || !isLongPassage || isQuizGroupType) && !!materialQuiz;
59
76
  React.useEffect(() => {
60
77
  if (width > 0) {
@@ -62,8 +79,8 @@ const MaterialQuiz = () => {
62
79
  }
63
80
  }, [width, setVertical]);
64
81
  const renderQuestionOption = () => {
65
- if (!materialQuiz || !course) {
66
- return React.createElement(MaterialQuizShimmer.default, null);
82
+ if (isFetchingData) {
83
+ return null;
67
84
  }
68
85
  switch (materialQuiz.optionType) {
69
86
  case types.enums.QuizOptionType.SelectOne:
@@ -91,8 +108,9 @@ const MaterialQuiz = () => {
91
108
  }, React.createElement(StyledMaterialQuizWrapper, {
92
109
  ref: ref,
93
110
  vertical: vertical,
94
- isQuizGroupType: isQuizGroupType
95
- }, isVisibleSideBySide && React.createElement(StyledMaterialQuizInfo, null, React.createElement(MaterialQuizInfo.default, null)), React.createElement(StyledMaterialQuizContent, {
111
+ isQuizGroupType: isQuizGroupType,
112
+ isLongPassage: isLongPassage
113
+ }, isLoadingLayout && React.createElement(LoadingContainer, null, React.createElement(MaterialQuizShimmer.default, null)), isVisibleSideBySide && React.createElement(StyledMaterialQuizInfo, null, React.createElement(MaterialQuizInfo.default, null)), React.createElement(StyledMaterialQuizContent, {
96
114
  id: element.MATERIAL_QUIZ_CONTAINER_ID,
97
115
  vertical: vertical
98
116
  }, renderQuestionOption())));
@@ -107,13 +125,15 @@ const MaterialQuizContainer = ({
107
125
  }) => {
108
126
  return React.createElement(intl.RawEliceIntlProvider, {
109
127
  value: __intl
128
+ }, React.createElement(material.ThemeProvider, {
129
+ theme: eliceTheme
110
130
  }, React.createElement(MaterialQuizContext.MaterialQuizProvider, {
111
131
  materialQuizId: materialQuizId,
112
132
  userId: userId,
113
133
  onDirty: onDirty,
114
134
  onSubmit: onSubmit,
115
135
  onNext: onNext
116
- }, React.createElement(MaterialQuiz, null)));
136
+ }, React.createElement(MaterialQuiz, null))));
117
137
  };
118
138
  var MaterialQuiz$1 = new intl.IntlComponentBuilder(MaterialQuizContainer).add('en', en.default).add('ko', ko.default).addAsync('th', Promise.resolve().then(function () { return require('./locales/th.json.js'); })).addAsync('ja', Promise.resolve().then(function () { return require('./locales/ja.json.js'); })).build();
119
139
 
@@ -3,15 +3,15 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var React = require('react');
6
+ var reactUse = require('react-use');
6
7
  var blocks = require('@elice/blocks');
7
- var designTokens = require('@elice/design-tokens');
8
8
  var icons = require('@elice/icons');
9
9
  var markdown = require('@elice/markdown');
10
10
  var material = require('@mui/material');
11
11
  var styled = require('styled-components');
12
12
  var QuestionBox = require('../shared/QuestionBox.js');
13
+ var mergeRefs = require('../shared/utils/mergeRefs.js');
13
14
  var MaterialQuizContext = require('./context/MaterialQuizContext.js');
14
- var MaterialQuizAnswerExplanation = require('./MaterialQuizAnswerExplanation.js');
15
15
 
16
16
  //
17
17
  //
@@ -24,23 +24,51 @@ const StyledMarkdownSSR = styled(markdown.MarkdownSSR).withConfig({
24
24
  //
25
25
  const IMAGE_CONTAINER_CLASSNAME = 'markdown-zoomable-image-container';
26
26
  const ZOOM_ICON_CLASSNAME = 'markdown-zoom-icon';
27
- const MarkdownContainer = styled.div.withConfig({
28
- componentId: "sc-1s7jbf9-1"
29
- })([".", "{position:relative;span.", "{cursor:pointer;position:absolute;right:0;top:0;width:2rem;aspect-ratio:1;background-color:", ";margin:0.5rem;border-radius:50%;display:flex;align-items:center;justify-content:center;}}"], IMAGE_CONTAINER_CLASSNAME, ZOOM_ICON_CLASSNAME, designTokens.base.color.tertiary9);
27
+ const MarkdownContainer = material.styled('div')`
28
+ .${IMAGE_CONTAINER_CLASSNAME} {
29
+ position: relative;
30
+
31
+ span.${ZOOM_ICON_CLASSNAME} {
32
+ cursor: pointer;
33
+
34
+ position: absolute;
35
+ top: 0;
36
+ right: ${({
37
+ vertical
38
+ }) => vertical ? '0!important' : '0'};
39
+
40
+ width: 2rem;
41
+ aspect-ratio: 1;
42
+ background-color: ${({
43
+ theme
44
+ }) => theme.palette.inverse.main};
45
+ margin: 0.5rem;
46
+ border-radius: 50%;
47
+
48
+ display: flex;
49
+ align-items: center;
50
+ justify-content: center;
51
+ }
52
+ }
53
+ `;
30
54
  const MaterialQuizInfo = ({
31
55
  renderWithBox = true
32
56
  }) => {
33
57
  const {
34
- materialQuiz
58
+ materialQuiz,
59
+ vertical
35
60
  } = MaterialQuizContext.useMaterialQuizState();
36
61
  const [isRenderFinish, setIsRenderFinish] = React.useState(false);
37
62
  const containerRef = React.useRef(null);
63
+ const [markdownMeasueRef, {
64
+ width
65
+ }] = reactUse.useMeasure();
66
+ const ref = mergeRefs.mergeRefs(containerRef, markdownMeasueRef);
38
67
  const [zoomImageUrl, setZoomImageUrl] = React.useState('');
39
68
  React.useEffect(() => {
40
69
  if (!(materialQuiz === null || materialQuiz === void 0 ? void 0 : materialQuiz.questionDescription) || !isRenderFinish || !containerRef.current) return;
41
- const images = containerRef.current.querySelectorAll('img');
42
70
  // append zoom icon for image html render by MarkdownSSR
43
- images.forEach(img => {
71
+ containerRef.current.querySelectorAll('img').forEach(img => {
44
72
  const parent = img.parentElement;
45
73
  const zoomIconStr = `
46
74
  <svg width="25" height="25" viewBox="0 0 25 25" fill="white" xmlns="http://www.w3.org/2000/svg">
@@ -48,27 +76,44 @@ const MaterialQuizInfo = ({
48
76
  </svg>
49
77
  `;
50
78
  if (parent) {
79
+ const imageRect = img.getBoundingClientRect();
80
+ const parentRect = parent.getBoundingClientRect();
81
+ const zoomIcons = parent.querySelectorAll(`.${ZOOM_ICON_CLASSNAME}`);
82
+ const totalImages = Array.from(parent.querySelectorAll(`img`));
83
+ const idx = totalImages.findIndex(item => item === img);
84
+ // restyle the zoom position when chaging the width instead of recreate it
85
+ if (zoomIcons.length === totalImages.length && idx !== -1) {
86
+ zoomIcons[idx].style.top = `${imageRect.top - parentRect.top}px`;
87
+ zoomIcons[idx].style.right = `${parentRect.right - imageRect.right}px`;
88
+ return;
89
+ }
51
90
  parent.classList.add(IMAGE_CONTAINER_CLASSNAME);
52
91
  parent.style.position = 'relative';
53
92
  const span = document.createElement('span');
54
93
  span.innerHTML = zoomIconStr;
55
94
  span.classList.add(ZOOM_ICON_CLASSNAME);
95
+ span.style.top = `${imageRect.top - parentRect.top}px`;
96
+ span.style.right = `${parentRect.right - imageRect.right}px`;
56
97
  span.onclick = () => {
57
98
  setZoomImageUrl(img.src);
58
99
  };
59
100
  parent.appendChild(span);
60
101
  }
61
102
  });
62
- }, [materialQuiz === null || materialQuiz === void 0 ? void 0 : materialQuiz.questionDescription, isRenderFinish]);
103
+ }, [materialQuiz === null || materialQuiz === void 0 ? void 0 : materialQuiz.questionDescription, isRenderFinish, width]);
63
104
  const onCloseImageModal = () => {
64
105
  setZoomImageUrl('');
65
106
  };
66
107
  const _renderQuiz = () => {
67
108
  return React.createElement(React.Fragment, null, materialQuiz ? React.createElement(MarkdownContainer, {
68
- ref: containerRef
109
+ ref: ref,
110
+ vertical: vertical
69
111
  }, React.createElement(StyledMarkdownSSR, {
70
112
  onRender: () => {
71
- setIsRenderFinish(true);
113
+ // set timeout for waiting time to the image can render
114
+ setTimeout(() => {
115
+ setIsRenderFinish(true);
116
+ }, 300);
72
117
  },
73
118
  children: materialQuiz === null || materialQuiz === void 0 ? void 0 : materialQuiz.questionDescription,
74
119
  dark: true,
@@ -141,7 +186,7 @@ const MaterialQuizInfo = ({
141
186
  top: '-10%'
142
187
  },
143
188
  onClick: onCloseImageModal
144
- }))), React.createElement(MaterialQuizAnswerExplanation.default, null));
189
+ }))));
145
190
  };
146
191
  if (renderWithBox) return React.createElement(QuestionBox.default, null, _renderQuiz());
147
192
  return React.createElement(React.Fragment, null, _renderQuiz());
@@ -4,6 +4,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var React = require('react');
6
6
  var apiClient = require('@elice/api-client');
7
+ var designTokens = require('@elice/design-tokens');
7
8
  var intl = require('@elice/intl');
8
9
  var material = require('@mui/material');
9
10
  var element = require('../../constant/element.js');
@@ -18,6 +19,7 @@ var QuestionCheckboxOption = require('../shared/question-checkbox/QuestionCheckb
18
19
  var QuestionBox = require('../shared/QuestionBox.js');
19
20
  var StyledMarkdown = require('../shared/StyledMarkdown.js');
20
21
  var MaterialQuizContext = require('./context/MaterialQuizContext.js');
22
+ var MaterialQuizAnswerExplanation = require('./MaterialQuizAnswerExplanation.js');
21
23
  var MaterialQuizInfo = require('./MaterialQuizInfo.js');
22
24
  var QuizResultBadge = require('./QuizResultBadge.js');
23
25
  var QuizSubmitStatusText = require('./QuizSubmitStatusText.js');
@@ -38,6 +40,7 @@ const MaterialQuizSelectMultiple = ({
38
40
  refreshOrgMaterialQuiz,
39
41
  onDirty
40
42
  } = MaterialQuizContext.useMaterialQuizDispatch();
43
+ const theme = material.useTheme();
41
44
  // state
42
45
  const intl$1 = intl.useRawEliceIntl();
43
46
  const [selectedAnswer, setSelectedAnswer] = React.useState([]);
@@ -51,6 +54,7 @@ const MaterialQuizSelectMultiple = ({
51
54
  const [isActive, setIsActive] = React.useState(false);
52
55
  const [hasSubmitted, setHasSubmitted] = React.useState(false);
53
56
  const isNextActive = hasSubmitted && typeof onNext === 'function';
57
+ const isDisabled = selectedAnswer.length === 0 || index.checkUserLectureTestEnded(lecture) || !!userId;
54
58
  // answer select handler
55
59
  const handleAnswerSelect = index$1 => {
56
60
  if (index.checkUserLectureTestEnded(lecture) || !!userId) {
@@ -162,16 +166,19 @@ const MaterialQuizSelectMultiple = ({
162
166
  }),
163
167
  bodyContainerRef: containerRef,
164
168
  footerActions: [{
165
- border: true,
166
- disabled: selectedAnswer.length === 0 || index.checkUserLectureTestEnded(lecture) || !!userId,
169
+ border: false,
170
+ disabled: isDisabled,
167
171
  loading: submitStatus === 'pending',
168
172
  tabIndex: 0,
169
173
  transparent: false,
170
- role: isNextActive ? 'secondary' : 'lightpurple',
171
174
  onClick: handleSubmit,
172
175
  children: intl$1.formatMessage({
173
176
  id: isNextActive ? 'materialQuiz.resubmit' : 'materialQuiz.submit'
174
- })
177
+ }),
178
+ customStyles: {
179
+ backgroundColor: isNextActive ? theme.palette.secondary.main : isDisabled ? designTokens.base.color.gray6 : theme.palette.primary.main,
180
+ color: isNextActive ? theme.palette.secondary.contrastText : isDisabled ? designTokens.base.color.gray3 : theme.palette.primary.contrastText
181
+ }
175
182
  }]
176
183
  }, React.createElement(material.Stack, {
177
184
  height: "100%",
@@ -214,7 +221,7 @@ const MaterialQuizSelectMultiple = ({
214
221
  paddingy: 0,
215
222
  dark: true
216
223
  }) : option === null || option === void 0 ? void 0 : option.content);
217
- }) : null))));
224
+ }) : null), React.createElement(MaterialQuizAnswerExplanation.default, null))));
218
225
  };
219
226
 
220
227
  exports.default = MaterialQuizSelectMultiple;
@@ -19,6 +19,7 @@ var QuizDraggbleDroppedOption = require('../shared/QuizDraggbleDroppedOption.js'
19
19
  var QuizDraggbleDummyOption = require('../shared/QuizDraggbleDummyOption.js');
20
20
  var QuizDraggbleOption = require('../shared/QuizDraggbleOption.js');
21
21
  var MaterialQuizContext = require('./context/MaterialQuizContext.js');
22
+ var MaterialQuizAnswerExplanation = require('./MaterialQuizAnswerExplanation.js');
22
23
  var MaterialQuizInfo = require('./MaterialQuizInfo.js');
23
24
  var QuizResultBadge = require('./QuizResultBadge.js');
24
25
  var QuizSubmitStatusText = require('./QuizSubmitStatusText.js');
@@ -76,6 +77,7 @@ const MaterialQuizSelectMultipleOrder = ({
76
77
  refreshOrgMaterialQuiz,
77
78
  onDirty
78
79
  } = MaterialQuizContext.useMaterialQuizDispatch();
80
+ const theme = material.useTheme();
79
81
  // state
80
82
  const intl$1 = intl.useRawEliceIntl();
81
83
  const [materialQuizResponse, setMaterialQuizResponse] = React.useState();
@@ -90,6 +92,7 @@ const MaterialQuizSelectMultipleOrder = ({
90
92
  const [correctAnswerList, setCorrectAnswerList] = React.useState([]);
91
93
  const [hasSubmitted, setHasSubmitted] = React.useState(false);
92
94
  const isNextActive = hasSubmitted && typeof onNext === 'function';
95
+ const isDisabled = (materialQuiz === null || materialQuiz === void 0 ? void 0 : materialQuiz.correctOptionCount) !== answerList.filter(answer => answer.order !== null).length || !!userId;
93
96
  // ref
94
97
  const optionBoxRef = React.useRef(null);
95
98
  // to make jquery touchable
@@ -418,16 +421,19 @@ const MaterialQuizSelectMultipleOrder = ({
418
421
  }),
419
422
  bodyContainerRef: containerRef,
420
423
  footerActions: [{
421
- border: true,
422
- disabled: (materialQuiz === null || materialQuiz === void 0 ? void 0 : materialQuiz.correctOptionCount) !== answerList.filter(answer => answer.order !== null).length || !!userId,
424
+ border: false,
425
+ disabled: isDisabled,
423
426
  loading: submitStatus === 'pending',
424
427
  tabIndex: 0,
425
428
  transparent: false,
426
- role: isNextActive ? 'secondary' : 'lightpurple',
427
429
  onClick: handleSubmit,
428
430
  children: intl$1.formatMessage({
429
431
  id: isNextActive ? 'materialQuiz.resubmit' : 'materialQuiz.submit'
430
- })
432
+ }),
433
+ customStyles: {
434
+ backgroundColor: isNextActive ? theme.palette.secondary.main : isDisabled ? designTokens.base.color.gray6 : theme.palette.primary.main,
435
+ color: isNextActive ? theme.palette.secondary.contrastText : isDisabled ? designTokens.base.color.gray3 : theme.palette.primary.contrastText
436
+ }
431
437
  }]
432
438
  }, React.createElement(material.Stack, {
433
439
  height: "100%",
@@ -472,7 +478,7 @@ const MaterialQuizSelectMultipleOrder = ({
472
478
  indexOrder: index + 1,
473
479
  isMarkdown: !!(course === null || course === void 0 ? void 0 : course.preference.renderMarkdownInQuizOptions)
474
480
  });
475
- }))) : null)));
481
+ }))) : null, React.createElement(MaterialQuizAnswerExplanation.default, null))));
476
482
  };
477
483
 
478
484
  exports.default = MaterialQuizSelectMultipleOrder;
@@ -4,6 +4,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var React = require('react');
6
6
  var apiClient = require('@elice/api-client');
7
+ var designTokens = require('@elice/design-tokens');
7
8
  var intl = require('@elice/intl');
8
9
  var material = require('@mui/material');
9
10
  var element = require('../../constant/element.js');
@@ -18,6 +19,7 @@ require('../shared/question-checkbox/QuestionCheckboxOption.js');
18
19
  var QuestionBox = require('../shared/QuestionBox.js');
19
20
  var StyledMarkdown = require('../shared/StyledMarkdown.js');
20
21
  var MaterialQuizContext = require('./context/MaterialQuizContext.js');
22
+ var MaterialQuizAnswerExplanation = require('./MaterialQuizAnswerExplanation.js');
21
23
  var MaterialQuizInfo = require('./MaterialQuizInfo.js');
22
24
  var QuizResultBadge = require('./QuizResultBadge.js');
23
25
  var QuizSubmitStatusText = require('./QuizSubmitStatusText.js');
@@ -38,6 +40,7 @@ const MaterialQuizSelectOne = ({
38
40
  refreshOrgMaterialQuiz,
39
41
  onDirty
40
42
  } = MaterialQuizContext.useMaterialQuizDispatch();
43
+ const theme = material.useTheme();
41
44
  // state
42
45
  const intl$1 = intl.useRawEliceIntl();
43
46
  const [selectedAnswer, setSelectedAnswer] = React.useState();
@@ -51,6 +54,7 @@ const MaterialQuizSelectOne = ({
51
54
  const [isActive, setIsActive] = React.useState(false);
52
55
  const [hasSubmitted, setHasSubmitted] = React.useState(false);
53
56
  const isNextActive = hasSubmitted && typeof onNext === 'function';
57
+ const isDisabled = selectedAnswer === undefined || index.checkUserLectureTestEnded(lecture) || !!userId;
54
58
  // answer select handler
55
59
  const handleAnswerSelect = index$1 => {
56
60
  if (index.checkUserLectureTestEnded(lecture) || !!userId) {
@@ -153,16 +157,19 @@ const MaterialQuizSelectOne = ({
153
157
  }),
154
158
  bodyContainerRef: containerRef,
155
159
  footerActions: [{
156
- border: true,
157
- disabled: selectedAnswer === undefined || index.checkUserLectureTestEnded(lecture) || !!userId,
160
+ border: false,
161
+ disabled: isDisabled,
158
162
  loading: submitStatus === 'pending',
159
163
  tabIndex: 0,
160
164
  transparent: false,
161
- role: isNextActive ? 'secondary' : 'lightpurple',
162
165
  onClick: handleSubmit,
163
166
  children: intl$1.formatMessage({
164
167
  id: isNextActive ? 'materialQuiz.resubmit' : 'materialQuiz.submit'
165
- })
168
+ }),
169
+ customStyles: {
170
+ backgroundColor: isNextActive ? theme.palette.secondary.main : isDisabled ? designTokens.base.color.gray6 : theme.palette.primary.main,
171
+ color: isNextActive ? theme.palette.secondary.contrastText : isDisabled ? designTokens.base.color.gray3 : theme.palette.primary.contrastText
172
+ }
166
173
  }]
167
174
  }, React.createElement(material.Stack, {
168
175
  height: "100%",
@@ -205,7 +212,7 @@ const MaterialQuizSelectOne = ({
205
212
  paddingy: 0,
206
213
  dark: true
207
214
  }) : option === null || option === void 0 ? void 0 : option.content);
208
- }) : null)) : null));
215
+ }) : null), React.createElement(MaterialQuizAnswerExplanation.default, null)) : null));
209
216
  };
210
217
 
211
218
  exports.default = MaterialQuizSelectOne;
@@ -14,6 +14,7 @@ var index = require('../../helpers/index.js');
14
14
  var useCaculatePassage = require('../../hooks/useCaculatePassage.js');
15
15
  var QuestionBox = require('../shared/QuestionBox.js');
16
16
  var MaterialQuizContext = require('./context/MaterialQuizContext.js');
17
+ var MaterialQuizAnswerExplanation = require('./MaterialQuizAnswerExplanation.js');
17
18
  var MaterialQuizInfo = require('./MaterialQuizInfo.js');
18
19
  var QuizResultBadge = require('./QuizResultBadge.js');
19
20
  var QuizSubmitStatusText = require('./QuizSubmitStatusText.js');
@@ -41,6 +42,7 @@ const MaterialQuizText = ({
41
42
  refreshOrgMaterialQuiz,
42
43
  onDirty
43
44
  } = MaterialQuizContext.useMaterialQuizDispatch();
45
+ const theme = material.useTheme();
44
46
  // state
45
47
  const intl$1 = intl.useRawEliceIntl();
46
48
  const [materialQuizResponse, setMaterialQuizResponse] = React.useState();
@@ -52,6 +54,7 @@ const MaterialQuizText = ({
52
54
  const [answer, setAnswer] = React.useState('');
53
55
  const [hasSubmitted, setHasSubmitted] = React.useState(false);
54
56
  const isNextActive = hasSubmitted && typeof onNext === 'function';
57
+ const isDisabled = answer.length === 0 || index.checkUserLectureTestEnded(lecture) || !!userId;
55
58
  // quiz response fetcher
56
59
  React.useEffect(() => {
57
60
  if (!userId && (materialQuiz === null || materialQuiz === void 0 ? void 0 : materialQuiz.lastQuizResponseId)) {
@@ -155,16 +158,19 @@ const MaterialQuizText = ({
155
158
  isNextActive: isNextActive,
156
159
  bodyContainerRef: containerRef,
157
160
  footerActions: [{
158
- border: true,
161
+ border: false,
159
162
  children: intl$1.formatMessage({
160
163
  id: isNextActive ? 'materialQuiz.resubmit' : 'materialQuiz.submit'
161
164
  }),
162
- disabled: answer.length === 0 || index.checkUserLectureTestEnded(lecture) || !!userId,
165
+ disabled: isDisabled,
163
166
  loading: submitStatus === 'pending',
164
167
  tabIndex: 0,
165
168
  transparent: false,
166
- role: isNextActive ? 'secondary' : 'lightpurple',
167
- onClick: handleSubmit
169
+ onClick: handleSubmit,
170
+ customStyles: {
171
+ backgroundColor: isNextActive ? theme.palette.secondary.main : isDisabled ? designTokens.base.color.gray6 : theme.palette.primary.main,
172
+ color: isNextActive ? theme.palette.secondary.contrastText : isDisabled ? designTokens.base.color.gray3 : theme.palette.primary.contrastText
173
+ }
168
174
  }]
169
175
  }, React.createElement(material.Stack, {
170
176
  height: "100%",
@@ -195,7 +201,7 @@ const MaterialQuizText = ({
195
201
  id: "quiz-text-submitted-answer",
196
202
  disabled: true,
197
203
  value: typeof (materialQuiz === null || materialQuiz === void 0 ? void 0 : materialQuiz.answerInfo) === 'string' ? materialQuiz.answerInfo : ''
198
- })) : null)));
204
+ })) : null), React.createElement(MaterialQuizAnswerExplanation.default, null)));
199
205
  };
200
206
 
201
207
  exports.default = MaterialQuizText;
@@ -9,6 +9,7 @@ export interface State {
9
9
  userId?: number;
10
10
  initStatus: APIStatus;
11
11
  isLongPassage: boolean;
12
+ isInitialLoading: boolean;
12
13
  }
13
14
  export type MaterialQuizProps = {
14
15
  materialQuizId: number;
@@ -28,6 +29,7 @@ interface DispatchContextType {
28
29
  setVertical: React.Dispatch<React.SetStateAction<boolean>>;
29
30
  onNext?: () => void;
30
31
  setIsLongPassage: React.Dispatch<React.SetStateAction<boolean>>;
32
+ setIsInitialLoading: React.Dispatch<React.SetStateAction<boolean>>;
31
33
  }
32
34
  declare function MaterialQuizProvider({ materialQuizId, userId, onSubmit, onDirty, onNext, children, }: MaterialQuizProviderProps): React.JSX.Element;
33
35
  declare function useMaterialQuizState(): State;
@@ -22,7 +22,12 @@ function MaterialQuizProvider({
22
22
  const [initStatus, setInitStatus] = React.useState('idle');
23
23
  const [vertical, setVertical] = React.useState(false);
24
24
  const [isLongPassage, setIsLongPassage] = React.useState(false);
25
+ const [isInitialLoading, setIsInitialLoading] = React.useState(true);
25
26
  const canInit = materialSharedUtils.useMaterialConfigApiClientUpdate(apiClient.config.init);
27
+ const resetLayout = () => {
28
+ setIsInitialLoading(true);
29
+ setIsLongPassage(false);
30
+ };
26
31
  const {
27
32
  materialQuiz,
28
33
  materialLecturePage,
@@ -75,6 +80,11 @@ function MaterialQuizProvider({
75
80
  }
76
81
  return () => controller.abort();
77
82
  }, [materialLecturePage]);
83
+ React.useEffect(() => {
84
+ if (materialQuizId) {
85
+ resetLayout();
86
+ }
87
+ }, [materialQuizId]);
78
88
  React.useEffect(() => {
79
89
  if (canInit && materialLecturePage) {
80
90
  void init();
@@ -88,7 +98,8 @@ function MaterialQuizProvider({
88
98
  userId,
89
99
  vertical,
90
100
  initStatus,
91
- isLongPassage
101
+ isLongPassage,
102
+ isInitialLoading
92
103
  }
93
104
  }, React.createElement(DispatchContext.Provider, {
94
105
  value: {
@@ -97,7 +108,8 @@ function MaterialQuizProvider({
97
108
  onNext,
98
109
  refreshOrgMaterialQuiz,
99
110
  setVertical,
100
- setIsLongPassage
111
+ setIsLongPassage,
112
+ setIsInitialLoading
101
113
  }
102
114
  }, children));
103
115
  }
@@ -2,6 +2,6 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var messageEn = {"materialQuiz.anchorLabel.question":"Fingerprint","materialQuiz.anchorLabel.answer":"Look","materialQuiz.error":"Failed to fetch quiz","materialQuiz.submit":"Submit","materialQuiz.resubmit":"Resubmit","materialQuiz.submittedAnswer":"Submitted Answer","materialQuiz.answer":"Answer","materialQuiz.next":"Next question >","materialQuiz.selectOne.answer.title":"Choose from the views below.","materialQuiz.selectMultiple.answer.title":"Choose from the views below. (Redundant selections available)","materialQuiz.selectMultipleOrder.answer.title":"Drag and drop your answers.","materialQuiz.text.answer.title":"Please fill out the answer.","materialQuiz.empty.title":"Quiz is now preparing.","materialQuiz.empty.description":"Please check again after quiz posting!","materialQuiz.survey.empty.title":"Survey is now preparing.","materialQuiz.survey.empty.description":"Please check again after survey posting!","materialQuiz.submitStatus.success":"Submitted","materialQuiz.submitStatus.failure":"Failed to submit","materialQuiz.resultStatus.correct":"Correct","materialQuiz.resultStatus.wrong":"Wrong","materialQuiz.resultStatus.submitted":"Submitted","materialQuiz.explanation.close":"close quiz explanations","materialQuiz.explanation.show":"show quiz explanations","materialQuiz.explanation.empty":"no explanations","materialQuiz.text.placeholder":"please fill the answer","materialQuiz.text.correct":"that's correct!","materialQuiz.text.wrong":"that's wrong. try it again!","materialQuiz.order.answerEmpty":"You could move the options back here","materialQuiz.bottomSheet.title":"Options","materialQuiz.bottomSheet.optionEmpty":"All views have been placed in the group.","materialQuiz.dropzone.desktop.answerEmpty":"Drag the view into the area.","materialQuiz.dropzone.mobile.answerEmpty":"Click here to add a view.","materialQuiz.dropzone.optionEmpty":"Option","materialQuiz.dropzone.optionReset":"Answer Reset"};
5
+ var messageEn = {"materialQuiz.anchorLabel.question":"Passage","materialQuiz.anchorLabel.answer":"Answer","materialQuiz.error":"Failed to fetch quiz","materialQuiz.submit":"Submit","materialQuiz.resubmit":"Resubmit","materialQuiz.submittedAnswer":"Submitted Answer","materialQuiz.answer":"Answer","materialQuiz.next":"Next question >","materialQuiz.selectOne.answer.title":"Choose from the views below.","materialQuiz.selectMultiple.answer.title":"Choose from the views below. (Redundant selections available)","materialQuiz.selectMultipleOrder.answer.title":"Drag and drop your answers.","materialQuiz.text.answer.title":"Please fill out the answer.","materialQuiz.empty.title":"Quiz is now preparing.","materialQuiz.empty.description":"Please check again after quiz posting!","materialQuiz.survey.empty.title":"Survey is now preparing.","materialQuiz.survey.empty.description":"Please check again after survey posting!","materialQuiz.submitStatus.success":"Submitted","materialQuiz.submitStatus.failure":"Failed to submit","materialQuiz.resultStatus.correct":"Correct","materialQuiz.resultStatus.wrong":"Wrong","materialQuiz.resultStatus.submitted":"Submitted","materialQuiz.explanation.close":"close quiz explanations","materialQuiz.explanation.show":"show quiz explanations","materialQuiz.explanation.empty":"no explanations","materialQuiz.text.placeholder":"please fill the answer","materialQuiz.text.correct":"that's correct!","materialQuiz.text.wrong":"that's wrong. try it again!","materialQuiz.order.answerEmpty":"You could move the options back here","materialQuiz.bottomSheet.title":"Options","materialQuiz.bottomSheet.optionEmpty":"All views have been placed in the group.","materialQuiz.dropzone.desktop.answerEmpty":"Drag the view into the area.","materialQuiz.dropzone.mobile.answerEmpty":"Click here to add a view.","materialQuiz.dropzone.optionEmpty":"Option","materialQuiz.dropzone.optionReset":"Answer Reset"};
6
6
 
7
7
  exports.default = messageEn;
@@ -2,6 +2,6 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var ja = {"materialQuiz.anchorLabel.question":"指紋","materialQuiz.anchorLabel.answer":"見る","materialQuiz.error":"クイズの取得に失敗しました。","materialQuiz.submit":"提出","materialQuiz.resubmit":"再送信","materialQuiz.submittedAnswer":"提出された回答","materialQuiz.answer":"回答","materialQuiz.next":"次の質問 >","materialQuiz.selectOne.answer.title":"以下から選択してください。","materialQuiz.selectMultiple.answer.title":"以下から選択してください。 (冗長な選択肢も利用可能)","materialQuiz.selectMultipleOrder.answer.title":"ドラッグして回答をドロップしてください。","materialQuiz.text.answer.title":"回答を記入してください。","materialQuiz.empty.title":"クイズは今準備中です。","materialQuiz.empty.description":"クイズの投稿後にもう一度確認してください!","materialQuiz.survey.empty.title":"調査は現在準備中です。","materialQuiz.survey.empty.description":"調査投稿後にもう一度ご確認ください!","materialQuiz.submitStatus.success":"提出済","materialQuiz.submitStatus.failure":"提出に失敗しました。","materialQuiz.resultStatus.correct":"正しい","materialQuiz.resultStatus.wrong":"間違った","materialQuiz.resultStatus.submitted":"提出済","materialQuiz.explanation.close":"クイズの説明を閉じる","materialQuiz.explanation.show":"クイズの説明を表示します","materialQuiz.explanation.empty":"いいです。","materialQuiz.text.placeholder":"回答を入力してください","materialQuiz.text.correct":"その通りです!","materialQuiz.text.wrong":"それは間違っています。もう一度やってみてください!","materialQuiz.order.answerEmpty":"オプションをここに戻すことができます。","materialQuiz.bottomSheet.title":"オプション","materialQuiz.bottomSheet.optionEmpty":"すべてのビューがグループに配置されました。","materialQuiz.dropzone.desktop.answerEmpty":"ビューをエリアにドラッグしてください。","materialQuiz.dropzone.mobile.answerEmpty":"ここをクリックしてビューを追加してください。","materialQuiz.dropzone.optionEmpty":"オプション","materialQuiz.dropzone.optionReset":"回答をリセットします"};
5
+ var ja = {"materialQuiz.anchorLabel.question":"文章","materialQuiz.anchorLabel.answer":"回答","materialQuiz.error":"クイズの取得に失敗しました。","materialQuiz.submit":"提出","materialQuiz.resubmit":"再送信","materialQuiz.submittedAnswer":"提出された回答","materialQuiz.answer":"回答","materialQuiz.next":"次の質問 >","materialQuiz.selectOne.answer.title":"以下から選択してください。","materialQuiz.selectMultiple.answer.title":"以下から選択してください。 (冗長な選択肢も利用可能)","materialQuiz.selectMultipleOrder.answer.title":"ドラッグして回答をドロップしてください。","materialQuiz.text.answer.title":"回答を記入してください。","materialQuiz.empty.title":"クイズは今準備中です。","materialQuiz.empty.description":"クイズの投稿後にもう一度確認してください!","materialQuiz.survey.empty.title":"調査は現在準備中です。","materialQuiz.survey.empty.description":"調査投稿後にもう一度ご確認ください!","materialQuiz.submitStatus.success":"提出済","materialQuiz.submitStatus.failure":"提出に失敗しました。","materialQuiz.resultStatus.correct":"正しい","materialQuiz.resultStatus.wrong":"間違った","materialQuiz.resultStatus.submitted":"提出済","materialQuiz.explanation.close":"クイズの説明を閉じる","materialQuiz.explanation.show":"クイズの説明を表示します","materialQuiz.explanation.empty":"いいです。","materialQuiz.text.placeholder":"回答を入力してください","materialQuiz.text.correct":"その通りです!","materialQuiz.text.wrong":"それは間違っています。もう一度やってみてください!","materialQuiz.order.answerEmpty":"オプションをここに戻すことができます。","materialQuiz.bottomSheet.title":"オプション","materialQuiz.bottomSheet.optionEmpty":"すべてのビューがグループに配置されました。","materialQuiz.dropzone.desktop.answerEmpty":"ビューをエリアにドラッグしてください。","materialQuiz.dropzone.mobile.answerEmpty":"ここをクリックしてビューを追加してください。","materialQuiz.dropzone.optionEmpty":"オプション","materialQuiz.dropzone.optionReset":"回答をリセットします"};
6
6
 
7
7
  exports.default = ja;
@@ -2,6 +2,6 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var messageKo = {"materialQuiz.anchorLabel.question":"지문","materialQuiz.anchorLabel.answer":"보기","materialQuiz.error":"퀴즈를 불러오는데 실패했습니다.\n잠시 후 다시 시도해주세요.","materialQuiz.submit":"제출","materialQuiz.resubmit":"다시 제출","materialQuiz.submittedAnswer":"제출한 답","materialQuiz.answer":"정답","materialQuiz.next":"다음 문제로 이동 >","materialQuiz.selectOne.answer.title":"아래 보기에서 골라주세요.","materialQuiz.selectMultiple.answer.title":"아래 보기에서 골라주세요. (중복 선택 가능)","materialQuiz.selectMultipleOrder.answer.title":"답안을 드래그 앤 드롭하세요.","materialQuiz.text.answer.title":"답안을 작성해 주세요.","materialQuiz.empty.title":"퀴즈가 준비 중 입니다.","materialQuiz.empty.description":"퀴즈 게시 후 다시 확인해주세요!","materialQuiz.survey.empty.title":"설문조사 준비 중 입니다.","materialQuiz.survey.empty.description":"설문지 게시 후 다시 확인해주세요!","materialQuiz.submitStatus.success":"제출되었습니다.","materialQuiz.submitStatus.failure":"제출에 실패하였습니다.","materialQuiz.resultStatus.correct":"정답","materialQuiz.resultStatus.wrong":"오답","materialQuiz.resultStatus.submitted":"제출완료","materialQuiz.explanation.close":"퀴즈해설 닫기","materialQuiz.explanation.show":"퀴즈 해설 보기","materialQuiz.explanation.empty":"작성된 해설이 없습니다.","materialQuiz.text.placeholder":"답안을 작성해 주세요.","materialQuiz.text.correct":"정답입니다.","materialQuiz.text.wrong":"오답입니다. 다시 답안을 제출해보세요.","materialQuiz.order.answerEmpty":"항목을 다시 이곳으로 옮길 수 있습니다.","materialQuiz.bottomSheet.title":"보기","materialQuiz.bottomSheet.optionEmpty":"모든 보기를 그룹에 배치하였습니다.","materialQuiz.dropzone.desktop.answerEmpty":"보기를 영역에 끌어 넣어주세요.","materialQuiz.dropzone.mobile.answerEmpty":"이곳을 클릭하여 보기를 넣어주세요.","materialQuiz.dropzone.optionEmpty":"보기","materialQuiz.dropzone.optionReset":"답안 초기화"};
5
+ var messageKo = {"materialQuiz.anchorLabel.question":"지문","materialQuiz.anchorLabel.answer":"답안","materialQuiz.error":"퀴즈를 불러오는데 실패했습니다.\n잠시 후 다시 시도해주세요.","materialQuiz.submit":"제출","materialQuiz.resubmit":"다시 제출","materialQuiz.submittedAnswer":"제출한 답","materialQuiz.answer":"정답","materialQuiz.next":"다음 문제로 이동 >","materialQuiz.selectOne.answer.title":"아래 보기에서 골라주세요.","materialQuiz.selectMultiple.answer.title":"아래 보기에서 골라주세요. (중복 선택 가능)","materialQuiz.selectMultipleOrder.answer.title":"답안을 드래그 앤 드롭하세요.","materialQuiz.text.answer.title":"답안을 작성해 주세요.","materialQuiz.empty.title":"퀴즈가 준비 중 입니다.","materialQuiz.empty.description":"퀴즈 게시 후 다시 확인해주세요!","materialQuiz.survey.empty.title":"설문조사 준비 중 입니다.","materialQuiz.survey.empty.description":"설문지 게시 후 다시 확인해주세요!","materialQuiz.submitStatus.success":"제출되었습니다.","materialQuiz.submitStatus.failure":"제출에 실패하였습니다.","materialQuiz.resultStatus.correct":"정답","materialQuiz.resultStatus.wrong":"오답","materialQuiz.resultStatus.submitted":"제출완료","materialQuiz.explanation.close":"퀴즈해설 닫기","materialQuiz.explanation.show":"퀴즈 해설 보기","materialQuiz.explanation.empty":"작성된 해설이 없습니다.","materialQuiz.text.placeholder":"답안을 작성해 주세요.","materialQuiz.text.correct":"정답입니다.","materialQuiz.text.wrong":"오답입니다. 다시 답안을 제출해보세요.","materialQuiz.order.answerEmpty":"항목을 다시 이곳으로 옮길 수 있습니다.","materialQuiz.bottomSheet.title":"보기","materialQuiz.bottomSheet.optionEmpty":"모든 보기를 그룹에 배치하였습니다.","materialQuiz.dropzone.desktop.answerEmpty":"보기를 영역에 끌어 넣어주세요.","materialQuiz.dropzone.mobile.answerEmpty":"이곳을 클릭하여 보기를 넣어주세요.","materialQuiz.dropzone.optionEmpty":"보기","materialQuiz.dropzone.optionReset":"답안 초기화"};
6
6
 
7
7
  exports.default = messageKo;
@@ -2,6 +2,6 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var th = {"materialQuiz.anchorLabel.question":"ลายนิ้วมือ","materialQuiz.anchorLabel.answer":"ดู","materialQuiz.error":"ไม่สามารถดึงควิซได้","materialQuiz.submit":"ส่งใบสมัคร","materialQuiz.resubmit":"ส่งอีกครั้ง","materialQuiz.submittedAnswer":"ฉันสามารถตอบคำถามเช่นนี้ได้","materialQuiz.answer":"ตอบ","materialQuiz.next":"คำถามถัดไป >","materialQuiz.selectOne.answer.title":"เลือกจากมุมมองด้านล่างนี้","materialQuiz.selectMultiple.answer.title":"เลือกจากรายการด้านล่าง (มีการเลือกที่ซ้ำซ้อน)","materialQuiz.selectMultipleOrder.answer.title":"ลากและวางคำตอบของคุณ","materialQuiz.text.answer.title":"กรุณากรอกคำตอบ","materialQuiz.empty.title":"ควิซกำลังเตรียมอยู่ตอนนี้","materialQuiz.empty.description":"โปรดตรวจสอบอีกครั้งหลังจากโพสต์ควิซ!","materialQuiz.survey.empty.title":"การสำรวจกำลังเตรียมการอยู่ค่ะ","materialQuiz.survey.empty.description":"โปรดตรวจสอบอีกครั้งหลังจากโพสต์แบบสำรวจ!","materialQuiz.submitStatus.success":"เสนอ","materialQuiz.submitStatus.failure":"การส่งล้มเหลว","materialQuiz.resultStatus.correct":"ถูกต้อง","materialQuiz.resultStatus.wrong":"ผิด","materialQuiz.resultStatus.submitted":"เสนอ","materialQuiz.explanation.close":"ปิดคำอธิบายควิซ","materialQuiz.explanation.show":"แสดงคำอธิบายของควิซ","materialQuiz.explanation.empty":"ไม่ให้อธิบาย","materialQuiz.text.placeholder":"กรุณากรอกคำตอบ","materialQuiz.text.correct":"ถูกต้อง!","materialQuiz.text.wrong":"นั่นผิด ลองอีกครั้ง!","materialQuiz.order.answerEmpty":"คุณสามารถย้ายตัวเลือกกลับมาที่นี่ได้","materialQuiz.bottomSheet.title":"ตัวเลือก","materialQuiz.bottomSheet.optionEmpty":"ทุกมุมมองได้ถูกวางไว้ในกลุ่มแล้ว","materialQuiz.dropzone.desktop.answerEmpty":"ลากมุมมองเข้าสู่พื้นที่","materialQuiz.dropzone.mobile.answerEmpty":"คลิกที่นี่เพื่อเพิ่มมุมมอง","materialQuiz.dropzone.optionEmpty":"ตัวเลือก","materialQuiz.dropzone.optionReset":"รีเซ็ตคำตอบ"};
5
+ var th = {"materialQuiz.anchorLabel.question":"ทางเดิน","materialQuiz.anchorLabel.answer":"ดคำตอบ","materialQuiz.error":"ไม่สามารถดึงควิซได้","materialQuiz.submit":"ส่งใบสมัคร","materialQuiz.resubmit":"ส่งอีกครั้ง","materialQuiz.submittedAnswer":"ฉันสามารถตอบคำถามเช่นนี้ได้","materialQuiz.answer":"ตอบ","materialQuiz.next":"คำถามถัดไป >","materialQuiz.selectOne.answer.title":"เลือกจากมุมมองด้านล่างนี้","materialQuiz.selectMultiple.answer.title":"เลือกจากรายการด้านล่าง (มีการเลือกที่ซ้ำซ้อน)","materialQuiz.selectMultipleOrder.answer.title":"ลากและวางคำตอบของคุณ","materialQuiz.text.answer.title":"กรุณากรอกคำตอบ","materialQuiz.empty.title":"ควิซกำลังเตรียมอยู่ตอนนี้","materialQuiz.empty.description":"โปรดตรวจสอบอีกครั้งหลังจากโพสต์ควิซ!","materialQuiz.survey.empty.title":"การสำรวจกำลังเตรียมการอยู่ค่ะ","materialQuiz.survey.empty.description":"โปรดตรวจสอบอีกครั้งหลังจากโพสต์แบบสำรวจ!","materialQuiz.submitStatus.success":"เสนอ","materialQuiz.submitStatus.failure":"การส่งล้มเหลว","materialQuiz.resultStatus.correct":"ถูกต้อง","materialQuiz.resultStatus.wrong":"ผิด","materialQuiz.resultStatus.submitted":"เสนอ","materialQuiz.explanation.close":"ปิดคำอธิบายควิซ","materialQuiz.explanation.show":"แสดงคำอธิบายของควิซ","materialQuiz.explanation.empty":"ไม่ให้อธิบาย","materialQuiz.text.placeholder":"กรุณากรอกคำตอบ","materialQuiz.text.correct":"ถูกต้อง!","materialQuiz.text.wrong":"นั่นผิด ลองอีกครั้ง!","materialQuiz.order.answerEmpty":"คุณสามารถย้ายตัวเลือกกลับมาที่นี่ได้","materialQuiz.bottomSheet.title":"ตัวเลือก","materialQuiz.bottomSheet.optionEmpty":"ทุกมุมมองได้ถูกวางไว้ในกลุ่มแล้ว","materialQuiz.dropzone.desktop.answerEmpty":"ลากมุมมองเข้าสู่พื้นที่","materialQuiz.dropzone.mobile.answerEmpty":"คลิกที่นี่เพื่อเพิ่มมุมมอง","materialQuiz.dropzone.optionEmpty":"ตัวเลือก","materialQuiz.dropzone.optionReset":"รีเซ็ตคำตอบ"};
6
6
 
7
7
  exports.default = th;