@pocketprep/ui-kit 3.9.5 → 3.9.7

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.
@@ -44,7 +44,7 @@ import { dark as vDark } from '../../directives'
44
44
 
45
45
  type TButtonType = 'primary' | 'primary-yellow' | 'primary-red' | 'secondary'
46
46
  | 'secondary-yellow-dark' | 'tertiary' | 'tertiary-red' | 'tertiary-small' | 'tertiary-red-small' | 'icon'
47
- | 'icon-yellow' | 'outline' | 'oval-dark'
47
+ | 'icon-yellow' | 'outline' | 'outline-grey' | 'oval-dark'
48
48
 
49
49
  const {
50
50
  type = 'primary',
@@ -570,6 +570,40 @@ const buttonClicked = (event: Event) => {
570
570
  }
571
571
  }
572
572
 
573
+ &--outline-grey {
574
+ user-select: none;
575
+ outline: none;
576
+ color: $brand-black;
577
+ background-color: $gray-background;
578
+ font-weight: 500;
579
+ font-size: 14px;
580
+ line-height: 19px;
581
+ height: 32px;
582
+ padding: 6px 8px;
583
+ display: inline-flex;
584
+ align-items: center;
585
+ border-radius: 6px;
586
+ border: 1px solid rgba($pewter, 0.30);
587
+
588
+ &:hover,
589
+ &:focus {
590
+ border: 1px solid rgba($brand-blue, 0.40);
591
+ background: $barely-blue;
592
+ }
593
+
594
+ &--dark {
595
+ color: $barely-background;
596
+ background: $moonlit-ocean;
597
+ border: 1px solid $ash;
598
+
599
+ &:hover,
600
+ &:focus {
601
+ border: 1px solid rgba($banana-bread, 0.40);
602
+ background: rgba($banana-bread, 0.20);
603
+ }
604
+ }
605
+ }
606
+
573
607
  &:disabled {
574
608
  opacity: 0.4;
575
609
  cursor: auto;
@@ -75,6 +75,8 @@ import IconReadiness from './IconReadiness.vue'
75
75
  import IconConcept from './IconConcept.vue'
76
76
  import IconStar from './IconStar.vue'
77
77
  import IconRecommendedFilter from './IconRecommendedFilter.vue'
78
+ import IconTutorChat from './IconTutorChat.vue'
79
+ import IconMinimize from './IconMinimize.vue'
78
80
 
79
81
  withDefaults(defineProps<{
80
82
  type?: TIconType
@@ -175,4 +177,6 @@ withDefaults(defineProps<{
175
177
  <IconConcept v-else-if="type === 'concept'" :title="title" />
176
178
  <IconStar v-else-if="type === 'star'" :title="title" />
177
179
  <IconRecommendedFilter v-else-if="type === 'recommendedFilter'" :title="title" />
180
+ <IconTutorChat v-else-if="type === 'tutorChat'" :title="title" />
181
+ <IconMinimize v-else-if="type === 'minimize'" :title="title" />
178
182
  </template>
@@ -0,0 +1,15 @@
1
+ <script setup lang="ts">
2
+
3
+ const { title } = defineProps<{
4
+ title: string
5
+ }>()
6
+ </script>
7
+
8
+ <template>
9
+ <!-- eslint-disable -->
10
+ <svg xmlns="http://www.w3.org/2000/svg" width="18" height="2" viewBox="0 0 18 2" fill="none">
11
+ <title>{{ title }}</title>
12
+ <rect width="18" height="2" rx="1" fill="currentColor"/>
13
+ </svg>
14
+ <!-- eslint-enable -->
15
+ </template>
@@ -0,0 +1,16 @@
1
+ <script setup lang="ts">
2
+
3
+ const { title } = defineProps<{
4
+ title: string
5
+ }>()
6
+ </script>
7
+
8
+ <template>
9
+ <!-- eslint-disable -->
10
+ <svg width="29" height="27" viewBox="0 0 29 27" fill="none" xmlns="http://www.w3.org/2000/svg">
11
+ <title>{{ title }}</title>
12
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M2.12891 5.12988C2.04554 5.40534 2 5.69733 2 6V17C2 18.6569 3.34315 20 5 20H7V22L9.5 20H16.7695L19.3535 22H10L5 27V22C2.23858 22 1.12748e-07 19.7614 0 17V8C0 6.64624 0.89708 5.50326 2.12891 5.12988Z" fill="currentColor"/>
13
+ <path d="M26 1H8C6.89543 1 6 1.89543 6 3V14C6 15.1046 6.89543 16 8 16H17.3203L17.5811 16.1865L23 20.0566V16H26C27.1046 16 28 15.1046 28 14V3C28 1.89543 27.1046 1 26 1Z" stroke="currentColor" stroke-width="2"/>
14
+ </svg>
15
+ <!-- eslint-enable -->
16
+ </template>
@@ -74,3 +74,5 @@ export type TIconType =
74
74
  | 'concept'
75
75
  | 'star'
76
76
  | 'recommendedFilter'
77
+ | 'tutorChat'
78
+ | 'minimize'
@@ -132,7 +132,10 @@
132
132
  v-breakpoint="breakpointsWithEl"
133
133
  type="tertiary-small"
134
134
  class="uikit-question-choices-container__toggle-explanation"
135
- :class="{ 'uikit-question-choices-container__toggle-explanation--review-mode': reviewMode }"
135
+ :class="{
136
+ 'uikit-question-choices-container__toggle-explanation--review-mode': reviewMode,
137
+ 'uikit-question-choices-container__toggle-explanation--right-side-bar-open': showRightSideBar,
138
+ }"
136
139
  :is-dark-mode="isDarkMode"
137
140
  :aria-expanded="showExplanation ? 'true' : 'false'"
138
141
  @click.stop="toggleChoiceExplanation"
@@ -317,6 +320,7 @@ const {
317
320
  passageImageUrl,
318
321
  isCorrect,
319
322
  breakpointsWithEl,
323
+ showRightSideBar,
320
324
  } = useQuestionContext()
321
325
 
322
326
  const emitChoiceFocusIn = (choiceKey: TChoiceKey) => {
@@ -725,6 +729,10 @@ const handleClick = (event: MouseEvent) => {
725
729
  &--mobile {
726
730
  display: block;
727
731
  }
732
+
733
+ &--tablet-landscape#{&}--right-side-bar-open {
734
+ display: block;
735
+ }
728
736
  }
729
737
 
730
738
  &__toggle-explanation-text {
@@ -739,6 +747,10 @@ const handleClick = (event: MouseEvent) => {
739
747
  display: initial;
740
748
  }
741
749
 
750
+ &--tablet-landscape#{&}--right-side-bar-open {
751
+ display: initial;
752
+ }
753
+
742
754
  &--up {
743
755
  transform: rotate(180deg);
744
756
  }
@@ -4,7 +4,8 @@
4
4
  ref="uikit-question-dropdown-explanation"
5
5
  class="uikit-question-dropdown-explanation__dropdown-explanation"
6
6
  :class="{
7
- 'uikit-question-dropdown-explanation__dropdown-explanation--show-stats': globalMetrics
7
+ 'uikit-question-dropdown-explanation__dropdown-explanation--show-stats': globalMetrics,
8
+ 'uikit-question-dropdown-explanation__dropdown-explanation--right-side-bar-open': showRightSideBar,
8
9
  }"
9
10
  >
10
11
  <slot name="explanationTopExperiment"></slot>
@@ -96,6 +97,7 @@ const {
96
97
  isDarkMode,
97
98
  breakpointsWithEl,
98
99
  keywordDefinitions,
100
+ showRightSideBar,
99
101
  } = useQuestionContext()
100
102
 
101
103
  const explanation = computed(() => {
@@ -124,6 +126,10 @@ const toggleDropdownExplanationImageLongAlt = () => {
124
126
  display: block;
125
127
  }
126
128
 
129
+ &--tablet-landscape#{&}--right-side-bar-open {
130
+ display: block;
131
+ }
132
+
127
133
  &--show-stats {
128
134
  padding-bottom: 23px;
129
135
  padding-right: 66px;
@@ -62,6 +62,13 @@
62
62
  tabindex="-1"
63
63
  v-html="explanationImageLongAlt"
64
64
  />
65
+ <div
66
+ v-if="showTutorChatExplanationPrompts"
67
+ v-dark="isDarkMode"
68
+ class="uikit-question-explanation__tutor-chat-prompts"
69
+ >
70
+ <slot name="tutorChatExplanationPrompts" />
71
+ </div>
65
72
  <div
66
73
  v-if="reference && !hideReferences"
67
74
  v-dark="isDarkMode"
@@ -117,6 +124,7 @@ const {
117
124
  reviewMode,
118
125
  breakpointsWithEl,
119
126
  keywordDefinitions,
127
+ showTutorChatExplanationPrompts,
120
128
  } = useQuestionContext()
121
129
 
122
130
  const explanation = computed(() => {
@@ -147,7 +155,7 @@ const toggleExplanation = () => {
147
155
  border: 1px solid rgba($pewter, 0.85);
148
156
  border-bottom: 0;
149
157
  border-radius: 6px 6px 0 0;
150
- padding: 42px 60px 72px;
158
+ padding: 44px 34px 72px;
151
159
  box-sizing: border-box;
152
160
  max-width: 565px;
153
161
  min-height: 100%;
@@ -85,5 +85,7 @@ export const useQuestionContext = () => {
85
85
  selectedMPMCChoices: inject(InjectionKeys.selectedMPMCChoicesKey, ref([])),
86
86
  selectedBuildListChoiceOrder: inject(InjectionKeys.selectedBuildListChoiceOrderKey, ref([])),
87
87
  isTeachGroupReview: inject(InjectionKeys.isTeachGroupReviewKey, ref(false)),
88
+ showRightSideBar: inject(InjectionKeys.showRightSideBarKey, ref(false)),
89
+ showTutorChatExplanationPrompts: inject(InjectionKeys.showTutorChatExplanationPromptsKey, ref(false)),
88
90
  }
89
91
  }
@@ -84,3 +84,5 @@ export const selectedMatrixChoicesKey = Symbol('selectedMatrixChoices') as Injec
84
84
  export const selectedMPMCChoicesKey = Symbol('selectedMPMCChoices') as InjectionKey<Ref<TChoiceKey[]>>
85
85
  export const selectedBuildListChoiceOrderKey = Symbol('selectedBuildListChoiceOrder') as InjectionKey<Ref<TBuildListChoiceKey[]>>
86
86
  export const isTeachGroupReviewKey = Symbol('isTeachGroupReview') as InjectionKey<Ref<boolean>>
87
+ export const showRightSideBarKey = Symbol('showRightSideBar') as InjectionKey<Ref<boolean>>
88
+ export const showTutorChatExplanationPromptsKey = Symbol('showTutorChatExplanationPrompt') as InjectionKey<Ref<boolean>>
@@ -35,6 +35,7 @@
35
35
  'uikit-question__main--matrix-question-review-mode': isMatrixQuestion && reviewMode,
36
36
  'uikit-question__main--mpmc-question-review-mode': isMPMCQuestion && reviewMode,
37
37
  'uikit-question__main--build-list-question-review-mode': isBuildListQuestion && reviewMode,
38
+ 'uikit-question__main--right-side-bar-open': showRightSideBar,
38
39
  }"
39
40
  >
40
41
  <div v-if="!showPassageAndImage && !showExplanation && !showPaywall">
@@ -421,6 +422,7 @@
421
422
  'uikit-question__right-side--explanation': showExplanation && !showPaywall,
422
423
  'uikit-question__right-side--matrix-question-review-mode': isMatrixQuestion && reviewMode,
423
424
  'uikit-question__right-side--mpmc-question-review-mode': isMPMCQuestion && reviewMode,
425
+ 'uikit-question__right-side--right-side-bar-open': showRightSideBar,
424
426
  }"
425
427
  >
426
428
  <PassageAndImage
@@ -443,6 +445,9 @@
443
445
  <template #explanationBottomExperiment>
444
446
  <slot name="explanationBottomExperiment" />
445
447
  </template>
448
+ <template #tutorChatExplanationPrompts>
449
+ <slot name="tutorChatExplanationPrompts" />
450
+ </template>
446
451
  </Explanation>
447
452
  </div>
448
453
  </div>
@@ -513,6 +518,8 @@ const props = withDefaults(defineProps<{
513
518
  isTeachReview?: boolean
514
519
  isTeachGroupReview?: boolean
515
520
  keywordDefinitions?: { keyword: string; definition: string }[]
521
+ showRightSideBar?: boolean
522
+ showTutorChatExplanationPrompts?: boolean
516
523
  }>(), {
517
524
  questionNumber: undefined,
518
525
  quizLength: undefined,
@@ -541,6 +548,8 @@ const props = withDefaults(defineProps<{
541
548
  isTeachReview: false,
542
549
  isTeachGroupReview: false,
543
550
  keywordDefinitions: () => [],
551
+ showRightSideBar: false,
552
+ showTutorChatExplanationPrompts: false,
544
553
  })
545
554
 
546
555
  const emit = defineEmits<{
@@ -575,6 +584,8 @@ const hideReferences = computed(() => props.hideReferences)
575
584
  const keywordDefinitions = computed(() => props.keywordDefinitions)
576
585
  const showPaywall = computed(() => props.showPaywall)
577
586
  const isTeachGroupReview = computed(() => props.isTeachGroupReview)
587
+ const showRightSideBar = computed(() => props.showRightSideBar)
588
+ const showTutorChatExplanationPrompts = computed(() => props.showTutorChatExplanationPrompts)
578
589
  const hoverChoiceKey = ref<TChoiceKey | null>(null)
579
590
  const focusChoiceKey = ref<TChoiceKey | null>(null)
580
591
  const choiceStrikes = ref<TChoiceKey[]>([])
@@ -1746,6 +1757,8 @@ provide(InjectionKeys.buildListChoiceScoresKey, buildListChoiceScores)
1746
1757
  provide(InjectionKeys.isBuildListOrderCorrectKey, isBuildListOrderCorrect)
1747
1758
  provide(InjectionKeys.selectedBuildListChoiceOrderKey, selectedBuildListChoiceOrder)
1748
1759
  provide(InjectionKeys.isTeachGroupReviewKey, isTeachGroupReview)
1760
+ provide(InjectionKeys.showRightSideBarKey, showRightSideBar)
1761
+ provide(InjectionKeys.showTutorChatExplanationPromptsKey, showTutorChatExplanationPrompts)
1749
1762
  </script>
1750
1763
 
1751
1764
  <style lang="scss">
@@ -1810,11 +1823,15 @@ provide(InjectionKeys.isTeachGroupReviewKey, isTeachGroupReview)
1810
1823
  width: 51%;
1811
1824
  }
1812
1825
 
1813
- &--show-side#{&}--tablet-landscape:not(&--tablet-portrait) {
1826
+ &--show-side#{&}--tablet-landscape:not(&--tablet-portrait):not(&--right-side-bar-open) {
1814
1827
  width: 50%;
1815
1828
  padding-right: 36px;
1816
1829
  }
1817
1830
 
1831
+ &--right-side-bar-open#{&}--tablet-landscape:not(&--tablet-portrait) {
1832
+ width: 100%
1833
+ }
1834
+
1818
1835
  &--unanswered#{&}--mobile,
1819
1836
  &--mcr#{&}--mobile {
1820
1837
  display: inline-block;
@@ -1858,6 +1875,10 @@ provide(InjectionKeys.isTeachGroupReviewKey, isTeachGroupReview)
1858
1875
  display: none;
1859
1876
  }
1860
1877
 
1878
+ &--tablet-landscape#{&}--right-side-bar-open {
1879
+ display: none;
1880
+ }
1881
+
1861
1882
  &--matrix-question-review-mode#{&}--tablet-landscape,
1862
1883
  &--mpmc-question-review-mode#{&}--tablet-landscape {
1863
1884
  display: none;
@@ -14,7 +14,11 @@
14
14
  >
15
15
  <slot name="header" />
16
16
  </div>
17
- <div class="uikit-quiz-container__main" :style="customMainStyles">
17
+ <div
18
+ class="uikit-quiz-container__main"
19
+ :class="{ 'uikit-quiz-container__main--right-side-bar-open': showRightSideBar }"
20
+ :style="customMainStyles"
21
+ >
18
22
  <div
19
23
  v-if="showSide"
20
24
  v-breakpoint="{ containerEl: quizContainerEl }"
@@ -24,6 +28,14 @@
24
28
  <slot name="definition"></slot>
25
29
  <slot name="side" />
26
30
  </div>
31
+ <div
32
+ v-if="showRightSideBar"
33
+ v-breakpoint="{ containerEl: quizContainerEl }"
34
+ v-dark="isDarkMode"
35
+ class="uikit-quiz-container__right-side"
36
+ >
37
+ <slot name="rightSide" />
38
+ </div>
27
39
  <div
28
40
  v-breakpoint="{ containerEl: quizContainerEl }"
29
41
  class="uikit-quiz-container__question"
@@ -53,12 +65,14 @@ import { dark as vDark, breakpoint as vBreakpoint } from '../../directives'
53
65
 
54
66
  withDefaults(defineProps<{
55
67
  showSide?: boolean
68
+ showRightSideBar?: boolean
56
69
  isDarkMode?: boolean
57
70
  customHeaderStyles?: Record<string, string>
58
71
  customMainStyles?: Record<string, string>
59
72
  customFooterStyles?: Record<string, string>
60
73
  }>(), {
61
74
  showSide: false,
75
+ showRightSideBar: false,
62
76
  isDarkMode: false,
63
77
  customHeaderStyles: () => ({}),
64
78
  customMainStyles: () => ({}),
@@ -90,14 +104,14 @@ onMounted(() => {
90
104
  flex-direction: column;
91
105
  height: 100%;
92
106
  background-color: $brand-black;
93
- padding: 0 65px;
107
+ padding: 0 34px;
94
108
 
95
109
  &--desktop {
96
- padding: 0 22px 0 23px;
110
+ padding: 0 18px;
97
111
  }
98
112
 
99
113
  &--tablet-portrait {
100
- padding: 0 19px;
114
+ padding: 0 18px;
101
115
  }
102
116
 
103
117
  &--mobile {
@@ -141,6 +155,14 @@ onMounted(() => {
141
155
  }
142
156
  }
143
157
 
158
+ &--mobile &__main--right-side-bar-open {
159
+ flex-direction: column;
160
+
161
+ .uikit-quiz-container__question {
162
+ display: none;
163
+ }
164
+ }
165
+
144
166
  &__side {
145
167
  background-color: $black-feather;
146
168
  color: $white;
@@ -167,6 +189,31 @@ onMounted(() => {
167
189
  }
168
190
  }
169
191
 
192
+ &__right-side {
193
+ background-color: $black-feather;
194
+ color: $white;
195
+ width: 350px;
196
+ height: 100%;
197
+ margin-left: 18px;
198
+ border-radius: 6px;
199
+ order: 1;
200
+
201
+ &--dark {
202
+ background-color: $evening;
203
+ }
204
+
205
+ &--tablet-portrait {
206
+ width: 290px;
207
+ }
208
+
209
+ &--mobile {
210
+ width: 100%;
211
+ margin-left: 0;
212
+ flex: 1;
213
+ min-width: 0;
214
+ }
215
+ }
216
+
170
217
  &__question {
171
218
  position: relative;
172
219
  background-color: $gray-background;
@@ -174,6 +221,7 @@ onMounted(() => {
174
221
  box-shadow: 0 -2px 8px 0 rgba($brand-black, 0.15);
175
222
  flex: 1;
176
223
  height: 100%;
224
+ order: 0;
177
225
 
178
226
  &--show-side#{&}--tablet-landscape {
179
227
  border-radius: 0 6px 6px 0;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pocketprep/ui-kit",
3
- "version": "3.9.5",
3
+ "version": "3.9.7",
4
4
  "description": "Pocket Prep UI Kit",
5
5
  "author": "pocketprep",
6
6
  "scripts": {