@pocketprep/ui-kit 3.4.56 → 3.4.58
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/@pocketprep/ui-kit.js +2277 -2220
- package/dist/@pocketprep/ui-kit.js.map +1 -1
- package/dist/@pocketprep/ui-kit.umd.cjs +8 -8
- package/dist/@pocketprep/ui-kit.umd.cjs.map +1 -1
- package/dist/style.css +1 -1
- package/lib/components/Buttons/Button.vue +45 -2
- package/lib/components/Forms/Radio.vue +2 -59
- package/lib/components/Quiz/Question/ChoicesContainer.vue +4 -1
- package/lib/components/Quiz/Question/DropdownExplanation.vue +1 -0
- package/lib/components/Quiz/Question/Explanation.vue +2 -1
- package/lib/components/Quiz/Question/MatrixChoicesContainer.vue +73 -12
- package/lib/components/Quiz/Question/MobileMatrixChoicesContainer.vue +38 -19
- package/lib/components/Quiz/Question/Summary.vue +16 -0
- package/lib/components/Quiz/Question.vue +22 -2
- package/package.json +1 -1
|
@@ -45,7 +45,7 @@ import { dark } from '../../directives'
|
|
|
45
45
|
|
|
46
46
|
type TButtonType = 'primary' | 'primary-yellow' | 'primary-red' | 'secondary'
|
|
47
47
|
| 'secondary-yellow-dark' | 'tertiary' | 'tertiary-red' | 'tertiary-small' | 'tertiary-red-small' | 'icon'
|
|
48
|
-
| 'icon-yellow'
|
|
48
|
+
| 'icon-yellow' | 'outline'
|
|
49
49
|
|
|
50
50
|
@Component({
|
|
51
51
|
components: {
|
|
@@ -115,6 +115,7 @@ export default class Button extends Vue {
|
|
|
115
115
|
&--primary,
|
|
116
116
|
&--primary-yellow,
|
|
117
117
|
&--primary-red,
|
|
118
|
+
&--outline,
|
|
118
119
|
&--secondary,
|
|
119
120
|
&--secondary-yellow-dark {
|
|
120
121
|
font-size: 15px;
|
|
@@ -142,7 +143,7 @@ export default class Button extends Vue {
|
|
|
142
143
|
}
|
|
143
144
|
|
|
144
145
|
&--dark:enabled:focus::before {
|
|
145
|
-
border-color: $
|
|
146
|
+
border-color: $banana-bread;
|
|
146
147
|
}
|
|
147
148
|
}
|
|
148
149
|
|
|
@@ -233,6 +234,48 @@ export default class Button extends Vue {
|
|
|
233
234
|
}
|
|
234
235
|
}
|
|
235
236
|
|
|
237
|
+
&--outline {
|
|
238
|
+
background-color: $white;
|
|
239
|
+
color: $brand-blue;
|
|
240
|
+
font-size: 15px;
|
|
241
|
+
font-weight: 600;
|
|
242
|
+
border: 1px solid $brand-blue;
|
|
243
|
+
|
|
244
|
+
&:enabled {
|
|
245
|
+
&:hover,
|
|
246
|
+
&:active {
|
|
247
|
+
background-color: $pearl;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
&:focus::before {
|
|
251
|
+
content: '';
|
|
252
|
+
position: absolute;
|
|
253
|
+
top: -3px;
|
|
254
|
+
bottom: -3px;
|
|
255
|
+
left: -3px;
|
|
256
|
+
right: -3px;
|
|
257
|
+
border-radius: 6px;
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
&:disabled {
|
|
262
|
+
opacity: 0.4;
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
&--dark {
|
|
266
|
+
background-color: $charcoal;
|
|
267
|
+
color: $banana-bread;
|
|
268
|
+
border-color: $banana-bread;
|
|
269
|
+
|
|
270
|
+
&:enabled {
|
|
271
|
+
&:hover,
|
|
272
|
+
&:active {
|
|
273
|
+
background-color: $mariner;
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
|
|
236
279
|
&--secondary {
|
|
237
280
|
background-color: transparent;
|
|
238
281
|
color: $brand-blue;
|
|
@@ -43,6 +43,7 @@
|
|
|
43
43
|
>
|
|
44
44
|
<slot name="radioItem" :item="item">
|
|
45
45
|
<RadioButton
|
|
46
|
+
class="uikit-radio__item-btn"
|
|
46
47
|
:selected="!!(modelValue && item.value === modelValue.value)"
|
|
47
48
|
:disabled="!!(disabled || item.disabled)"
|
|
48
49
|
:isDarkMode="isDarkMode"
|
|
@@ -248,66 +249,8 @@ export default class Radio extends Vue {
|
|
|
248
249
|
}
|
|
249
250
|
|
|
250
251
|
&__item-btn {
|
|
251
|
-
width: 18px;
|
|
252
|
-
height: 18px;
|
|
252
|
+
min-width: 18px;
|
|
253
253
|
margin-right: 12px;
|
|
254
|
-
border: 1px solid $steel;
|
|
255
|
-
background: $white;
|
|
256
|
-
border-radius: 18px;
|
|
257
|
-
position: relative;
|
|
258
|
-
box-sizing: border-box;
|
|
259
|
-
|
|
260
|
-
&::before {
|
|
261
|
-
content: '';
|
|
262
|
-
position: absolute;
|
|
263
|
-
left: 50%;
|
|
264
|
-
top: 50%;
|
|
265
|
-
transform: translate(-50%, -50%);
|
|
266
|
-
width: 12px;
|
|
267
|
-
height: 12px;
|
|
268
|
-
border-radius: 12px;
|
|
269
|
-
background: $brand-blue;
|
|
270
|
-
display: none;
|
|
271
|
-
}
|
|
272
|
-
|
|
273
|
-
&--dark {
|
|
274
|
-
background-color: transparent;
|
|
275
|
-
border-color: $pewter;
|
|
276
|
-
|
|
277
|
-
&::before {
|
|
278
|
-
background: $banana-bread;
|
|
279
|
-
}
|
|
280
|
-
}
|
|
281
|
-
|
|
282
|
-
&--disabled {
|
|
283
|
-
background-color: $fog;
|
|
284
|
-
opacity: 0.6;
|
|
285
|
-
border-color: rgba($steel, 0.6);
|
|
286
|
-
|
|
287
|
-
&--dark {
|
|
288
|
-
background-color: $moonlit-ocean;
|
|
289
|
-
border-color: $slate;
|
|
290
|
-
opacity: 1;
|
|
291
|
-
}
|
|
292
|
-
}
|
|
293
|
-
|
|
294
|
-
&--selected {
|
|
295
|
-
border-color: $brand-blue;
|
|
296
|
-
background: transparent;
|
|
297
|
-
|
|
298
|
-
&--dark {
|
|
299
|
-
border-color: $banana-bread;
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
&--disabled {
|
|
303
|
-
opacity: 0.4;
|
|
304
|
-
|
|
305
|
-
}
|
|
306
|
-
|
|
307
|
-
&::before {
|
|
308
|
-
display: block;
|
|
309
|
-
}
|
|
310
|
-
}
|
|
311
254
|
}
|
|
312
255
|
}
|
|
313
256
|
</style>
|
|
@@ -171,7 +171,10 @@
|
|
|
171
171
|
@click="handleClick"
|
|
172
172
|
>
|
|
173
173
|
<template #explanationTopExperiment>
|
|
174
|
-
<slot name="explanationTopExperiment"
|
|
174
|
+
<slot name="explanationTopExperiment" />
|
|
175
|
+
</template>
|
|
176
|
+
<template #explanationBottomExperiment>
|
|
177
|
+
<slot name="explanationBottomExperiment" />
|
|
175
178
|
</template>
|
|
176
179
|
</DropdownExplanation>
|
|
177
180
|
</div>
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
>
|
|
14
14
|
Explanation Details
|
|
15
15
|
</div>
|
|
16
|
-
<slot name="explanationTopExperiment"
|
|
16
|
+
<slot name="explanationTopExperiment" />
|
|
17
17
|
<div
|
|
18
18
|
v-dark="isDarkMode"
|
|
19
19
|
v-breakpoint:questionEl="breakpoints"
|
|
@@ -70,6 +70,7 @@
|
|
|
70
70
|
<span class="uikit-question-explanation__reference-label">Reference: </span>
|
|
71
71
|
<div v-html="reference" />
|
|
72
72
|
</div>
|
|
73
|
+
<slot name="explanationBottomExperiment" />
|
|
73
74
|
<div
|
|
74
75
|
v-if="!reviewMode"
|
|
75
76
|
v-dark="isDarkMode"
|
|
@@ -49,7 +49,7 @@
|
|
|
49
49
|
class="uikit-question-matrix-choices-container__choices"
|
|
50
50
|
:class="{
|
|
51
51
|
'uikit-question-matrix-choices-container__choices--two-columns':
|
|
52
|
-
numberOfMatrixColumnLabels === 2
|
|
52
|
+
numberOfMatrixColumnLabels === 2
|
|
53
53
|
}"
|
|
54
54
|
v-dark="isDarkMode"
|
|
55
55
|
v-breakpoint:questionEl="breakpoints"
|
|
@@ -60,7 +60,7 @@
|
|
|
60
60
|
class="uikit-question-matrix-choices-container__choice-text"
|
|
61
61
|
:class="{
|
|
62
62
|
'uikit-question-matrix-choices-container__choice-text--two-columns':
|
|
63
|
-
numberOfMatrixColumnLabels === 2
|
|
63
|
+
numberOfMatrixColumnLabels === 2
|
|
64
64
|
}"
|
|
65
65
|
v-dark="isDarkMode"
|
|
66
66
|
v-breakpoint:questionEl="breakpoints"
|
|
@@ -90,20 +90,33 @@
|
|
|
90
90
|
:is-dark-mode="isDarkMode"
|
|
91
91
|
:disabled="showMatrixAnswers || reviewMode"
|
|
92
92
|
:checkbox-check-styles="checkboxCheckStyling(rowIndex, columnIndex)"
|
|
93
|
-
/>
|
|
94
|
-
<Checkbox
|
|
95
|
-
v-else
|
|
96
|
-
v-model="matrixCheckboxGrid[rowIndex][columnIndex]"
|
|
97
|
-
:is-dark-mode="isDarkMode"
|
|
98
|
-
:disabled="showMatrixAnswers || reviewMode"
|
|
99
93
|
:checkbox-styles="checkboxContainerStyling(rowIndex, columnIndex)"
|
|
100
94
|
/>
|
|
95
|
+
<div
|
|
96
|
+
v-else
|
|
97
|
+
class="uikit-question-matrix-choices-container__clickable-checkbox"
|
|
98
|
+
:class="{
|
|
99
|
+
'uikit-question-matrix-choices-container__clickable-checkbox--review':
|
|
100
|
+
showMatrixAnswers || reviewMode
|
|
101
|
+
}"
|
|
102
|
+
@click="!(showMatrixAnswers || reviewMode) && checkboxClicked(rowIndex, columnIndex)"
|
|
103
|
+
@keypress.enter="!(showMatrixAnswers || reviewMode) &&
|
|
104
|
+
checkboxClicked(rowIndex, columnIndex)"
|
|
105
|
+
>
|
|
106
|
+
<Checkbox
|
|
107
|
+
:model-value="matrixCheckboxGrid[rowIndex][columnIndex]"
|
|
108
|
+
:is-dark-mode="isDarkMode"
|
|
109
|
+
:disabled="showMatrixAnswers || reviewMode"
|
|
110
|
+
:checkbox-styles="checkboxContainerStyling(rowIndex, columnIndex)"
|
|
111
|
+
/>
|
|
112
|
+
</div>
|
|
101
113
|
<Icon
|
|
102
114
|
v-if="
|
|
103
115
|
(showMatrixAnswers || reviewMode) &&
|
|
104
116
|
(incorrectlySelectedChoice(rowIndex, columnIndex) ||
|
|
105
117
|
correctAnswerButNotSelected(rowIndex, columnIndex))"
|
|
106
118
|
class="uikit-question-matrix-choices-container__incorrect-answer-icon"
|
|
119
|
+
v-dark="isDarkMode"
|
|
107
120
|
type="incorrect"
|
|
108
121
|
/>
|
|
109
122
|
</div>
|
|
@@ -130,11 +143,13 @@
|
|
|
130
143
|
<template v-if="optionIcon.isVisible">
|
|
131
144
|
<Icon
|
|
132
145
|
v-if="optionIcon.isCorrect"
|
|
146
|
+
v-dark="isDarkMode"
|
|
133
147
|
type="correct"
|
|
134
148
|
class="uikit-question-matrix-choices-container__correct-answer-icon"
|
|
135
149
|
/>
|
|
136
150
|
<Icon
|
|
137
151
|
v-else
|
|
152
|
+
v-dark="isDarkMode"
|
|
138
153
|
type="incorrect"
|
|
139
154
|
class="uikit-question-matrix-choices-container__incorrect-answer-icon"
|
|
140
155
|
/>
|
|
@@ -333,6 +348,13 @@ export default class MatrixChoicesContainer extends Vue {
|
|
|
333
348
|
border: `1px solid ${this.brandColors.steel} !important`,
|
|
334
349
|
}
|
|
335
350
|
}
|
|
351
|
+
|
|
352
|
+
if (isReviewMode && this.correctAnswerButNotSelected(rowIndex, columnIndex)) {
|
|
353
|
+
return {
|
|
354
|
+
background: 'transparent !important',
|
|
355
|
+
border: `1px solid ${this.brandColors.slate} !important`,
|
|
356
|
+
}
|
|
357
|
+
}
|
|
336
358
|
}
|
|
337
359
|
|
|
338
360
|
checkboxCheckStyling (rowIndex: number, columnIndex: number) {
|
|
@@ -345,6 +367,12 @@ export default class MatrixChoicesContainer extends Vue {
|
|
|
345
367
|
}
|
|
346
368
|
}
|
|
347
369
|
|
|
370
|
+
checkboxClicked (rowIndex: number, columnIndex: number) {
|
|
371
|
+
if (this.matrixCheckboxGrid && this.matrixCheckboxGrid[rowIndex]) {
|
|
372
|
+
this.matrixCheckboxGrid[rowIndex][columnIndex] = !this.matrixCheckboxGrid[rowIndex][columnIndex]
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
|
|
348
376
|
@Emit('emitSelectedMatrixChoice')
|
|
349
377
|
emitSelectedMatrixChoice (matrixChoiceKeys: TMatrixChoiceKey[]) {
|
|
350
378
|
return matrixChoiceKeys
|
|
@@ -426,7 +454,7 @@ export default class MatrixChoicesContainer extends Vue {
|
|
|
426
454
|
&__columns {
|
|
427
455
|
display: flex;
|
|
428
456
|
padding: 0px 1px 0px 14px;
|
|
429
|
-
align-items:
|
|
457
|
+
align-items: flex-end;
|
|
430
458
|
width: 100%;
|
|
431
459
|
height: 32px;
|
|
432
460
|
margin-bottom: 16px;
|
|
@@ -464,7 +492,7 @@ export default class MatrixChoicesContainer extends Vue {
|
|
|
464
492
|
hyphens: auto;
|
|
465
493
|
|
|
466
494
|
&:not(:last-child) {
|
|
467
|
-
margin-right:
|
|
495
|
+
margin-right: 11px;
|
|
468
496
|
}
|
|
469
497
|
|
|
470
498
|
&--tablet-landscape {
|
|
@@ -473,6 +501,12 @@ export default class MatrixChoicesContainer extends Vue {
|
|
|
473
501
|
}
|
|
474
502
|
}
|
|
475
503
|
|
|
504
|
+
&--tablet-portrait {
|
|
505
|
+
&:not(:last-child) {
|
|
506
|
+
margin-right: 14px;
|
|
507
|
+
}
|
|
508
|
+
}
|
|
509
|
+
|
|
476
510
|
&--two-columns {
|
|
477
511
|
&:not(:last-child) {
|
|
478
512
|
margin-right: 24px;
|
|
@@ -533,7 +567,7 @@ export default class MatrixChoicesContainer extends Vue {
|
|
|
533
567
|
padding: 12px 10px 12px 14px;
|
|
534
568
|
position: relative;
|
|
535
569
|
transition: 0.1s padding ease;
|
|
536
|
-
align-items:
|
|
570
|
+
align-items: flex-start;
|
|
537
571
|
gap: 16px;
|
|
538
572
|
margin-bottom: 9px;
|
|
539
573
|
|
|
@@ -586,7 +620,6 @@ export default class MatrixChoicesContainer extends Vue {
|
|
|
586
620
|
&__checkbox {
|
|
587
621
|
width: 56px;
|
|
588
622
|
display: flex;
|
|
589
|
-
align-items: center;
|
|
590
623
|
|
|
591
624
|
&--two-columns {
|
|
592
625
|
width: 80px;
|
|
@@ -597,18 +630,46 @@ export default class MatrixChoicesContainer extends Vue {
|
|
|
597
630
|
}
|
|
598
631
|
}
|
|
599
632
|
|
|
633
|
+
&__clickable-checkbox {
|
|
634
|
+
width: 36px;
|
|
635
|
+
height: 36px;
|
|
636
|
+
cursor: pointer;
|
|
637
|
+
display: flex;
|
|
638
|
+
align-items: center;
|
|
639
|
+
justify-content: center;
|
|
640
|
+
margin-top: -8px;
|
|
641
|
+
margin-left: -8px;
|
|
642
|
+
|
|
643
|
+
&--review {
|
|
644
|
+
cursor: default;
|
|
645
|
+
display: block;
|
|
646
|
+
margin-top: 0;
|
|
647
|
+
margin-left: 0;
|
|
648
|
+
width: 20px;
|
|
649
|
+
}
|
|
650
|
+
}
|
|
651
|
+
|
|
600
652
|
&__correct-answer-icon {
|
|
601
653
|
margin-left: 6px;
|
|
602
654
|
width: 21px;
|
|
603
655
|
height: 22px;
|
|
604
656
|
color: $cadaverous;
|
|
657
|
+
|
|
658
|
+
&--dark {
|
|
659
|
+
color: $jungle-green;
|
|
660
|
+
}
|
|
605
661
|
}
|
|
606
662
|
|
|
607
663
|
&__incorrect-answer-icon {
|
|
608
664
|
margin-left: 6px;
|
|
665
|
+
margin-top: -2px;
|
|
609
666
|
width: 21px;
|
|
610
667
|
height: 22px;
|
|
611
668
|
color: $pepper;
|
|
669
|
+
|
|
670
|
+
&--dark {
|
|
671
|
+
color: $rosa;
|
|
672
|
+
}
|
|
612
673
|
}
|
|
613
674
|
}
|
|
614
675
|
</style>
|
|
@@ -34,11 +34,13 @@
|
|
|
34
34
|
>
|
|
35
35
|
<Icon
|
|
36
36
|
v-if="(showMatrixAnswers || reviewMode) && correctRow(rowIndex)"
|
|
37
|
+
v-dark="isDarkMode"
|
|
37
38
|
class="uikit-question-mobile-matrix-choices-container__row-label-correct-icon"
|
|
38
39
|
type="check"
|
|
39
40
|
/>
|
|
40
41
|
<Icon
|
|
41
42
|
v-if="(showMatrixAnswers || reviewMode) && !correctRow(rowIndex)"
|
|
43
|
+
v-dark="isDarkMode"
|
|
42
44
|
class="uikit-question-mobile-matrix-choices-container__row-label-incorrect-icon"
|
|
43
45
|
type="incorrect"
|
|
44
46
|
/>
|
|
@@ -80,7 +82,6 @@
|
|
|
80
82
|
stripText(selectedColumnHeaders[rowIndex][colHeaderIndex]) :
|
|
81
83
|
`${stripText(selectedColumnHeaders[rowIndex][colHeaderIndex])},`
|
|
82
84
|
}}
|
|
83
|
-
|
|
84
85
|
</div>
|
|
85
86
|
</template>
|
|
86
87
|
</div>
|
|
@@ -98,6 +99,8 @@
|
|
|
98
99
|
v-dark="isDarkMode"
|
|
99
100
|
v-for="(column, columnIndex) in matrixColumnLabels"
|
|
100
101
|
:key="columnIndex"
|
|
102
|
+
@click="checkboxRowClicked(rowIndex, columnIndex)"
|
|
103
|
+
@keypress.enter="checkboxRowClicked(rowIndex, columnIndex)"
|
|
101
104
|
>
|
|
102
105
|
<Checkbox
|
|
103
106
|
v-if="(showMatrixAnswers || reviewMode) &&
|
|
@@ -106,10 +109,11 @@
|
|
|
106
109
|
:is-dark-mode="isDarkMode"
|
|
107
110
|
:disabled="showMatrixAnswers || reviewMode"
|
|
108
111
|
:checkbox-check-styles="checkboxCheckStyling(rowIndex, columnIndex)"
|
|
112
|
+
:checkbox-styles="checkboxContainerStyling(rowIndex, columnIndex)"
|
|
109
113
|
/>
|
|
110
114
|
<Checkbox
|
|
111
115
|
v-else
|
|
112
|
-
|
|
116
|
+
:model-value="matrixCheckboxGrid[rowIndex][columnIndex]"
|
|
113
117
|
:is-dark-mode="isDarkMode"
|
|
114
118
|
:disabled="showMatrixAnswers || reviewMode"
|
|
115
119
|
:checkbox-styles="checkboxContainerStyling(rowIndex, columnIndex)"
|
|
@@ -251,9 +255,9 @@ export default class MobileMatrixChoicesContainer extends Vue {
|
|
|
251
255
|
}
|
|
252
256
|
}
|
|
253
257
|
|
|
254
|
-
selectedChoiceKey (rowIndex: number,
|
|
258
|
+
selectedChoiceKey (rowIndex: number, columnIndex: number) {
|
|
255
259
|
const row = rowIndex += 1
|
|
256
|
-
const column =
|
|
260
|
+
const column = columnIndex += 1
|
|
257
261
|
if (this.selectedMatrixChoices.length && this.matrixAnswerKeys.length) {
|
|
258
262
|
const matrixSelectedChoiceKey = this.selectedMatrixChoices.find((choice) => {
|
|
259
263
|
const substring = choice.substring(1)
|
|
@@ -289,9 +293,9 @@ export default class MobileMatrixChoicesContainer extends Vue {
|
|
|
289
293
|
}
|
|
290
294
|
}
|
|
291
295
|
|
|
292
|
-
correctlySelectedChoice (rowIndex: number,
|
|
296
|
+
correctlySelectedChoice (rowIndex: number, columnIndex: number) {
|
|
293
297
|
if (this.selectedMatrixChoices && this.matrixAnswerKeys) {
|
|
294
|
-
const selectedChoice = this.selectedChoiceKey(rowIndex,
|
|
298
|
+
const selectedChoice = this.selectedChoiceKey(rowIndex, columnIndex)
|
|
295
299
|
if (selectedChoice && selectedChoice.startsWith('a') && this.matrixAnswerKeys.includes(selectedChoice)) {
|
|
296
300
|
return true
|
|
297
301
|
}
|
|
@@ -299,9 +303,9 @@ export default class MobileMatrixChoicesContainer extends Vue {
|
|
|
299
303
|
return false
|
|
300
304
|
}
|
|
301
305
|
|
|
302
|
-
incorrectlySelectedChoice (rowIndex: number,
|
|
306
|
+
incorrectlySelectedChoice (rowIndex: number, columnIndex: number) {
|
|
303
307
|
if (this.selectedMatrixChoices && this.matrixAnswerKeys) {
|
|
304
|
-
const selectedChoice = this.selectedChoiceKey(rowIndex,
|
|
308
|
+
const selectedChoice = this.selectedChoiceKey(rowIndex, columnIndex)
|
|
305
309
|
if (selectedChoice && selectedChoice.startsWith('d')) {
|
|
306
310
|
return true
|
|
307
311
|
}
|
|
@@ -309,9 +313,9 @@ export default class MobileMatrixChoicesContainer extends Vue {
|
|
|
309
313
|
return false
|
|
310
314
|
}
|
|
311
315
|
|
|
312
|
-
correctAnswerButNotSelected (rowIndex: number,
|
|
313
|
-
const selectedChoice = this.selectedChoiceKey(rowIndex,
|
|
314
|
-
const answerKey = this.matrixAnswerKeys.find(choice => choice === `a${rowIndex + 1}_${
|
|
316
|
+
correctAnswerButNotSelected (rowIndex: number, columnIndex: number) {
|
|
317
|
+
const selectedChoice = this.selectedChoiceKey(rowIndex, columnIndex)
|
|
318
|
+
const answerKey = this.matrixAnswerKeys.find(choice => choice === `a${rowIndex + 1}_${columnIndex + 1}`)
|
|
315
319
|
return answerKey && !selectedChoice
|
|
316
320
|
}
|
|
317
321
|
|
|
@@ -334,6 +338,13 @@ export default class MobileMatrixChoicesContainer extends Vue {
|
|
|
334
338
|
border: `1px solid ${this.brandColors.steel} !important`,
|
|
335
339
|
}
|
|
336
340
|
}
|
|
341
|
+
|
|
342
|
+
if (isReviewMode && this.correctAnswerButNotSelected(rowIndex, columnIndex)) {
|
|
343
|
+
return {
|
|
344
|
+
background: 'transparent !important',
|
|
345
|
+
border: `1px solid ${this.brandColors.slate} !important`,
|
|
346
|
+
}
|
|
347
|
+
}
|
|
337
348
|
}
|
|
338
349
|
|
|
339
350
|
checkboxCheckStyling (rowIndex: number, columnIndex: number) {
|
|
@@ -386,11 +397,11 @@ export default class MobileMatrixChoicesContainer extends Vue {
|
|
|
386
397
|
const checkboxGrid = this.defaultCheckboxGrid
|
|
387
398
|
this.selectedMatrixChoices.forEach(choice => {
|
|
388
399
|
const rowIndex = Number(choice.substring(1, choice.indexOf('_'))) - 1
|
|
389
|
-
const
|
|
400
|
+
const columnIndex = Number(choice.split('_').pop()) - 1
|
|
390
401
|
if (checkboxGrid && checkboxGrid[rowIndex]) {
|
|
391
|
-
checkboxGrid[rowIndex][
|
|
392
|
-
if (this.selectedColumnHeaders[rowIndex] && this.question.matrixLabels?.columns[
|
|
393
|
-
const columnHeader = this.question.matrixLabels?.columns[
|
|
402
|
+
checkboxGrid[rowIndex][columnIndex] = true
|
|
403
|
+
if (this.selectedColumnHeaders[rowIndex] && this.question.matrixLabels?.columns[columnIndex]) {
|
|
404
|
+
const columnHeader = this.question.matrixLabels?.columns[columnIndex]
|
|
394
405
|
this.selectedColumnHeaders[rowIndex].push(columnHeader)
|
|
395
406
|
}
|
|
396
407
|
}
|
|
@@ -402,9 +413,9 @@ export default class MobileMatrixChoicesContainer extends Vue {
|
|
|
402
413
|
const radioBtnGrid = this.matrixRadioGrid
|
|
403
414
|
this.selectedMatrixChoices.forEach(choice => {
|
|
404
415
|
const rowIndex = Number(choice.substring(1, choice.indexOf('_'))) - 1
|
|
405
|
-
const
|
|
406
|
-
if (this.selectedColumnHeaders[rowIndex] && this.question.matrixLabels?.columns[
|
|
407
|
-
const columnHeader = this.question.matrixLabels?.columns[
|
|
416
|
+
const columnIndex = Number(choice.split('_').pop()) - 1
|
|
417
|
+
if (this.selectedColumnHeaders[rowIndex] && this.question.matrixLabels?.columns[columnIndex]) {
|
|
418
|
+
const columnHeader = this.question.matrixLabels?.columns[columnIndex]
|
|
408
419
|
this.selectedColumnHeaders[rowIndex].push(columnHeader)
|
|
409
420
|
}
|
|
410
421
|
if (radioBtnGrid && radioBtnGrid[rowIndex]) {
|
|
@@ -414,6 +425,12 @@ export default class MobileMatrixChoicesContainer extends Vue {
|
|
|
414
425
|
return radioBtnGrid
|
|
415
426
|
}
|
|
416
427
|
|
|
428
|
+
checkboxRowClicked (rowIndex: number, columnIndex: number) {
|
|
429
|
+
if (this.matrixCheckboxGrid && this.matrixCheckboxGrid[rowIndex]) {
|
|
430
|
+
this.matrixCheckboxGrid[rowIndex][columnIndex] = !this.matrixCheckboxGrid[rowIndex][columnIndex]
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
|
|
417
434
|
@Emit('emitSelectedMatrixChoice')
|
|
418
435
|
emitSelectedMatrixChoice (matrixChoiceKeys: TMatrixChoiceKey[]) {
|
|
419
436
|
return matrixChoiceKeys
|
|
@@ -529,7 +546,7 @@ export default class MobileMatrixChoicesContainer extends Vue {
|
|
|
529
546
|
}
|
|
530
547
|
|
|
531
548
|
&__choices-container {
|
|
532
|
-
cursor:
|
|
549
|
+
cursor: pointer;
|
|
533
550
|
position: relative;
|
|
534
551
|
outline: none;
|
|
535
552
|
transition: 0.1s width ease;
|
|
@@ -604,6 +621,8 @@ export default class MobileMatrixChoicesContainer extends Vue {
|
|
|
604
621
|
|
|
605
622
|
&__row-label-correct-icon,
|
|
606
623
|
&__row-label-incorrect-icon {
|
|
624
|
+
width: 21px;
|
|
625
|
+
height: 22px;
|
|
607
626
|
position: absolute;
|
|
608
627
|
right: 0;
|
|
609
628
|
margin-right: 12px;
|
|
@@ -4,6 +4,9 @@
|
|
|
4
4
|
v-breakpoint:questionEl="breakpoints"
|
|
5
5
|
ref="uikit-question-summary"
|
|
6
6
|
class="uikit-question-summary"
|
|
7
|
+
:class="{
|
|
8
|
+
'uikit-question-summary--matrix-question-review-mode': isMatrixQuestion && reviewMode,
|
|
9
|
+
}"
|
|
7
10
|
>
|
|
8
11
|
<div class="uikit-question-summary__summary-title">
|
|
9
12
|
{{ isQuestionCorrect ? 'Correct': isUnanswered ? 'Unanswered' : 'Incorrect' }}
|
|
@@ -37,6 +40,10 @@
|
|
|
37
40
|
v-breakpoint:questionEl="breakpoints"
|
|
38
41
|
ref="uikit-question-summary__summary-dropdown-explanation"
|
|
39
42
|
class="uikit-question-summary__summary-dropdown-explanation"
|
|
43
|
+
:class="{
|
|
44
|
+
'uikit-question-summary__summary-dropdown-explanation--matrix-question-review-mode':
|
|
45
|
+
isMatrixQuestion && reviewMode,
|
|
46
|
+
}"
|
|
40
47
|
>
|
|
41
48
|
<slot name="explanationTopExperiment"></slot>
|
|
42
49
|
<div
|
|
@@ -96,6 +103,7 @@
|
|
|
96
103
|
<span class="uikit-question-summary__summary-dropdown-reference-label">Reference: </span>
|
|
97
104
|
<div v-html="reference" />
|
|
98
105
|
</div>
|
|
106
|
+
<slot name="explanationBottomExperiment" />
|
|
99
107
|
</div>
|
|
100
108
|
<Icon
|
|
101
109
|
v-if="isQuestionCorrect"
|
|
@@ -200,6 +208,10 @@ export default class Summary extends Vue {
|
|
|
200
208
|
box-shadow: 0 1px 4px 0 rgba($jet, 0.3);
|
|
201
209
|
}
|
|
202
210
|
|
|
211
|
+
&--matrix-question-review-mode#{&}--tablet-landscape {
|
|
212
|
+
display: inline-block;
|
|
213
|
+
}
|
|
214
|
+
|
|
203
215
|
&--tablet-portrait {
|
|
204
216
|
display: inline-block;
|
|
205
217
|
}
|
|
@@ -289,6 +301,10 @@ export default class Summary extends Vue {
|
|
|
289
301
|
&__summary-dropdown-explanation {
|
|
290
302
|
display: none;
|
|
291
303
|
|
|
304
|
+
&--matrix-question-review-mode#{&}--tablet-landscape {
|
|
305
|
+
display: inline-block;
|
|
306
|
+
}
|
|
307
|
+
|
|
292
308
|
&--tablet-portrait {
|
|
293
309
|
display: block;
|
|
294
310
|
}
|
|
@@ -31,6 +31,7 @@
|
|
|
31
31
|
'uikit-question__main--show-side': (showExplanation && !showPaywall) || showPassageAndImage,
|
|
32
32
|
'uikit-question__main--unanswered': showAnswers && !isMCR && isUnanswered && !isCorrect,
|
|
33
33
|
'uikit-question__main--mcr': isMCR,
|
|
34
|
+
'uikit-question__main--matrix-question-review-mode': isMatrixQuestion && reviewMode,
|
|
34
35
|
}"
|
|
35
36
|
>
|
|
36
37
|
<slot name="context">
|
|
@@ -230,6 +231,9 @@
|
|
|
230
231
|
:choiceKey="choiceKey"
|
|
231
232
|
/>
|
|
232
233
|
</template>
|
|
234
|
+
<template #explanationBottomExperiment>
|
|
235
|
+
<slot name="explanationBottomExperiment" />
|
|
236
|
+
</template>
|
|
233
237
|
</ChoicesContainer>
|
|
234
238
|
<MatrixChoicesContainer
|
|
235
239
|
v-if="question.type === 'Matrix Checkbox' || question.type === 'Matrix Radio Button'"
|
|
@@ -339,6 +343,9 @@
|
|
|
339
343
|
<template #explanationTopExperiment>
|
|
340
344
|
<slot name="explanationTopExperiment"></slot>
|
|
341
345
|
</template>
|
|
346
|
+
<template #explanationBottomExperiment>
|
|
347
|
+
<slot name="explanationBottomExperiment" />
|
|
348
|
+
</template>
|
|
342
349
|
</Summary>
|
|
343
350
|
<slot name="metricsTiles">
|
|
344
351
|
<StatsSummary
|
|
@@ -388,8 +395,8 @@
|
|
|
388
395
|
Check Answer
|
|
389
396
|
</PocketButton>
|
|
390
397
|
<PocketButton
|
|
391
|
-
v-if="!showMatrixAnswers && !hideAnswer
|
|
392
|
-
:disabled="!
|
|
398
|
+
v-else-if="isMatrixQuestion && !showMatrixAnswers && !hideAnswer"
|
|
399
|
+
:disabled="!allMatrixRowsAreAnswered"
|
|
393
400
|
:is-dark-mode="isDarkMode"
|
|
394
401
|
@click="clickCheckMatrixAnswer"
|
|
395
402
|
>
|
|
@@ -426,6 +433,7 @@
|
|
|
426
433
|
class="uikit-question__right-side"
|
|
427
434
|
:class="{
|
|
428
435
|
'uikit-question__right-side--explanation': showExplanation && !showPaywall,
|
|
436
|
+
'uikit-question__right-side--matrix-question-review-mode': isMatrixQuestion && reviewMode,
|
|
429
437
|
}"
|
|
430
438
|
>
|
|
431
439
|
<PassageAndImage
|
|
@@ -469,6 +477,9 @@
|
|
|
469
477
|
<template #explanationTopExperiment>
|
|
470
478
|
<slot name="explanationTopExperiment"></slot>
|
|
471
479
|
</template>
|
|
480
|
+
<template #explanationBottomExperiment>
|
|
481
|
+
<slot name="explanationBottomExperiment" />
|
|
482
|
+
</template>
|
|
472
483
|
</Explanation>
|
|
473
484
|
</div>
|
|
474
485
|
</div>
|
|
@@ -1552,6 +1563,11 @@ export default class Question extends Vue {
|
|
|
1552
1563
|
overflow-y: visible;
|
|
1553
1564
|
padding: 0 17px;
|
|
1554
1565
|
}
|
|
1566
|
+
|
|
1567
|
+
&--matrix-question-review-mode#{&}--tablet-landscape:not(&--tablet-portrait) {
|
|
1568
|
+
width: 100%;
|
|
1569
|
+
padding-right: 0;
|
|
1570
|
+
}
|
|
1555
1571
|
}
|
|
1556
1572
|
|
|
1557
1573
|
&__right-side {
|
|
@@ -1567,6 +1583,10 @@ export default class Question extends Vue {
|
|
|
1567
1583
|
display: none;
|
|
1568
1584
|
}
|
|
1569
1585
|
|
|
1586
|
+
&--matrix-question-review-mode#{&}--tablet-landscape {
|
|
1587
|
+
display: none;
|
|
1588
|
+
}
|
|
1589
|
+
|
|
1570
1590
|
&--explanation {
|
|
1571
1591
|
padding-top: 58px;
|
|
1572
1592
|
padding-right: 11px;
|