Skip to content

Commit 9a7fd07

Browse files
committed
wip: quiz UI
1 parent 1502759 commit 9a7fd07

File tree

4 files changed

+96
-1
lines changed

4 files changed

+96
-1
lines changed

frontend/app/assets/styles/main.css

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
--color-accent: #ffaedf;
1212
--color-accent-contrast: #5d0045;
1313
--color-on-accent: #5d0045;
14+
--color-accent-positive: #9ed63c;
15+
--color-accent-negative: #e86a4a;
1416
--color-background-default: #efefef;
1517
--color-background-raised: #ffffff;
1618
--color-background-indent: rgb(0 0 0 / 0.05);
@@ -89,6 +91,8 @@
8991
--color-accent: #ffaedf;
9092
--color-accent-contrast: #ffaedf;
9193
--color-on-accent: #5d0045;
94+
--color-accent-positive: #c6ff62;
95+
--color-accent-negative: #e86a4a;
9296
--color-background-default: #222222;
9397
--color-background-raised: #343434;
9498
--color-background-indent: rgb(0 0 0 / 0.25);
File renamed without changes.
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
<script setup lang="ts">
2+
import { cva } from 'cva'
3+
4+
defineProps<{
5+
text: string
6+
highlighted?: boolean
7+
confirmed?: boolean
8+
wrong?: boolean
9+
correct?: boolean
10+
}>()
11+
12+
const classes = cva(
13+
'border-2 relative text-label rounded-list p-medium flex gap-list-section-inset text-center justify-center items-center min-h-22',
14+
{
15+
variants: {
16+
highlighted: {
17+
true: '',
18+
false: '',
19+
},
20+
confirmed: {
21+
true: '',
22+
false: '',
23+
},
24+
wrong: {
25+
true: '',
26+
false: '',
27+
},
28+
correct: {
29+
true: '',
30+
false: '',
31+
},
32+
},
33+
compoundVariants: [
34+
{
35+
highlighted: false,
36+
confirmed: false,
37+
class: 'border-border-default',
38+
},
39+
{
40+
highlighted: true,
41+
confirmed: false,
42+
class: 'border-accent-contrast text-accent-contrast',
43+
},
44+
{
45+
confirmed: true,
46+
wrong: true,
47+
class: 'border-accent-negative',
48+
},
49+
{
50+
confirmed: true,
51+
correct: true,
52+
class: 'border-accent-positive',
53+
},
54+
],
55+
},
56+
)
57+
</script>
58+
59+
<template>
60+
<button :class="classes({ highlighted, confirmed, wrong, correct })">
61+
{{ text }}
62+
63+
<span
64+
v-if="confirmed && wrong"
65+
class="absolute top-0 -translate-y-1/2 left-1/2 -translate-x-1/2 text-label text-on-accent bg-accent-negative rounded-full pl-2 pr-3 py-1 flex gap-1 items-center"
66+
>
67+
<Icon name="lucide:x" class="size-6" />
68+
Feil svar
69+
</span>
70+
<span
71+
v-if="confirmed && correct"
72+
class="absolute top-0 -translate-y-1/2 left-1/2 -translate-x-1/2 text-label text-on-accent bg-accent-positive rounded-full pl-2 pr-3 py-1 flex gap-1 items-center"
73+
>
74+
<Icon name="lucide:check" class="size-6" />
75+
Riktig svar
76+
</span>
77+
</button>
78+
</template>

frontend/app/pages/challenges/[challengeId].vue

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,19 @@ const { data, fetching, error } = useChallengePageQuery({
3636

3737
<LoadingState v-if="fetching" />
3838
<ErrorState v-else-if="error" :error />
39-
<pre v-else-if="data">{{ data.challenge }}</pre>
39+
<div v-else-if="data" class="gap-medium flex flex-col">
40+
<QuizAlternative text="This is an alternative" />
41+
<QuizAlternative text="This is a highlighted alternative" highlighted />
42+
<QuizAlternative
43+
text="This is a confirmed and wrong alternative"
44+
confirmed
45+
wrong
46+
/>
47+
<QuizAlternative
48+
text="This is a confirmed and correct alternative"
49+
confirmed
50+
correct
51+
/>
52+
</div>
4053
</PageLayout>
4154
</template>

0 commit comments

Comments
 (0)