INIT: initial commit
This commit is contained in:
parent
bdcf50ca0b
commit
78e0ff6ac9
10 changed files with 217 additions and 8 deletions
6
app.vue
6
app.vue
|
@ -1,6 +0,0 @@
|
||||||
<template>
|
|
||||||
<div>
|
|
||||||
<NuxtRouteAnnouncer />
|
|
||||||
<NuxtWelcome />
|
|
||||||
</div>
|
|
||||||
</template>
|
|
3
app/app.vue
Normal file
3
app/app.vue
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
<template>
|
||||||
|
<NuxtPage />
|
||||||
|
</template>
|
19
app/assets/css/currentMood.css
Normal file
19
app/assets/css/currentMood.css
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
.CurrentMood {
|
||||||
|
background: var(--clr-current-light);
|
||||||
|
color: var(--clr-current-dark);
|
||||||
|
height: 60dvh;
|
||||||
|
padding: 2rem .5rem;
|
||||||
|
font-family: 'Delius', sans-serif;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
|
||||||
|
& .icon {
|
||||||
|
font-size: 14rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
& h1 {
|
||||||
|
font-size: 1.5rem;
|
||||||
|
}
|
||||||
|
}
|
34
app/assets/css/general.css
Normal file
34
app/assets/css/general.css
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
* {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
:root {
|
||||||
|
--clr-happy-dark: #009933;
|
||||||
|
--clr-happy-light: #d1ffe8;
|
||||||
|
|
||||||
|
--clr-sad-dark: #252ed5;
|
||||||
|
--clr-sad-light: #e5ecfc;
|
||||||
|
|
||||||
|
--clr-disappointed-dark: #ab6b0e;
|
||||||
|
--clr-disappointed-light: #fffbd8;
|
||||||
|
|
||||||
|
--clr-angry-dark: #851919;
|
||||||
|
--clr-angry-light: #ffe5e5;
|
||||||
|
|
||||||
|
--clr-empty-dark: #595959;
|
||||||
|
--clr-empty-light: #f1f1f1;
|
||||||
|
|
||||||
|
--clr-dead-dark: #ffffff;
|
||||||
|
--clr-dead-light: #000000;
|
||||||
|
|
||||||
|
--clr-sick-dark: #87ad00;
|
||||||
|
--clr-sick-light: #edffd8;
|
||||||
|
|
||||||
|
--clr-pissed-dark: #7853ff;
|
||||||
|
--clr-pissed-light: #f1efff;
|
||||||
|
|
||||||
|
--clr-current-dark: var(--clr-happy-dark);
|
||||||
|
--clr-current-light: var(--clr-happy-light);
|
||||||
|
}
|
27
app/assets/css/moodDropdown.css
Normal file
27
app/assets/css/moodDropdown.css
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
.MoodDropdown {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(4, 1fr);
|
||||||
|
grid-auto-rows: 4rem;
|
||||||
|
|
||||||
|
& > button {
|
||||||
|
all: unset;
|
||||||
|
--background: var(--clr-empty-light);
|
||||||
|
--color: var(--clr-empty-dark);
|
||||||
|
|
||||||
|
font-family: 'Delius', sans-serif;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
background: var(--background);
|
||||||
|
color: var(--color);
|
||||||
|
|
||||||
|
& span {
|
||||||
|
font-size: .8rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
& .icon {
|
||||||
|
font-size: 2rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
28
app/components/MoodDropdown.vue
Normal file
28
app/components/MoodDropdown.vue
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
<template>
|
||||||
|
<aside class="MoodDropdown">
|
||||||
|
<button
|
||||||
|
v-for="[moodName, mood] in availableMoods"
|
||||||
|
:key="mood.label"
|
||||||
|
:style="{
|
||||||
|
'--background': `var(--clr-${mood.color}-light)`,
|
||||||
|
'--color': `var(--clr-${mood.color}-dark)`,
|
||||||
|
}"
|
||||||
|
@click="changeMood(moodName)"
|
||||||
|
>
|
||||||
|
<Icon class="icon" :name="`mingcute:${mood.icon}`" mode="svg" />
|
||||||
|
<span>{{ mood.label }}</span>
|
||||||
|
</button>
|
||||||
|
</aside>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import { type Mood, moods, type PossibleMood } from '../../shared/moods'
|
||||||
|
|
||||||
|
const availableMoods = computed<[PossibleMood, Mood][]>(() => Object.entries(moods))
|
||||||
|
|
||||||
|
const emit = defineEmits(['changeMood'])
|
||||||
|
|
||||||
|
const changeMood = (newMood : PossibleMood) => {
|
||||||
|
emit('changeMood', newMood)
|
||||||
|
}
|
||||||
|
</script>
|
25
app/components/Sections/CurrentMood.vue
Normal file
25
app/components/Sections/CurrentMood.vue
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
<template>
|
||||||
|
<section class="CurrentMood">
|
||||||
|
<h1>Du bist derzeit</h1>
|
||||||
|
<span>{{ moods[currentMood].label }}</span>
|
||||||
|
<Icon class="icon" :name="`mingcute:${moods[currentMood].icon}`" mode="svg" />
|
||||||
|
</section>
|
||||||
|
<MoodDropdown
|
||||||
|
@change-mood="changeMood"
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import { moods, type PossibleMood } from '../../../shared/moods'
|
||||||
|
|
||||||
|
const currentMood = ref<PossibleMood>('happy')
|
||||||
|
const changeMood = (newMood : PossibleMood) => {
|
||||||
|
currentMood.value = newMood
|
||||||
|
document.body.style.setProperty('--clr-current-dark', `var(--clr-${newMood}-dark)`)
|
||||||
|
document.body.style.setProperty('--clr-current-light', `var(--clr-${newMood}-light)`)
|
||||||
|
}
|
||||||
|
|
||||||
|
useSeoMeta({
|
||||||
|
title: () => `Du bist derzeit ${moods[currentMood.value].label}`
|
||||||
|
})
|
||||||
|
</script>
|
7
app/pages/index.vue
Normal file
7
app/pages/index.vue
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
<template>
|
||||||
|
<SectionsCurrentMood />
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
|
||||||
|
</script>
|
|
@ -1,6 +1,12 @@
|
||||||
// https://nuxt.com/docs/api/configuration/nuxt-config
|
// https://nuxt.com/docs/api/configuration/nuxt-config
|
||||||
export default defineNuxtConfig({
|
export default defineNuxtConfig({
|
||||||
compatibilityDate: '2025-05-15',
|
compatibilityDate: '2025-05-15',
|
||||||
devtools: { enabled: true },
|
devtools: { enabled: false },
|
||||||
modules: ['@nuxt/eslint', '@nuxt/fonts', '@nuxt/icon']
|
future: { compatibilityVersion : 4 },
|
||||||
|
modules: ['@nuxt/eslint', '@nuxt/fonts', '@nuxt/icon'],
|
||||||
|
css: [
|
||||||
|
'@/assets/css/general.css',
|
||||||
|
'@/assets/css/currentMood.css',
|
||||||
|
'@/assets/css/moodDropdown.css',
|
||||||
|
]
|
||||||
})
|
})
|
66
shared/moods.ts
Normal file
66
shared/moods.ts
Normal file
|
@ -0,0 +1,66 @@
|
||||||
|
export type Mood = {
|
||||||
|
label: string,
|
||||||
|
color: string,
|
||||||
|
icon: string,
|
||||||
|
}
|
||||||
|
|
||||||
|
export type PossibleMood = 'happy' | 'sad' | 'angry' | 'disappointed' | 'empty' | 'sick' | 'dead' | 'pissed'
|
||||||
|
|
||||||
|
const happy = {
|
||||||
|
label: 'Glücklich',
|
||||||
|
color: 'happy',
|
||||||
|
icon: 'happy-line',
|
||||||
|
}
|
||||||
|
|
||||||
|
const sad = {
|
||||||
|
label: 'Traurig',
|
||||||
|
color: 'sad',
|
||||||
|
icon: 'unhappy-line',
|
||||||
|
}
|
||||||
|
|
||||||
|
const angry = {
|
||||||
|
label: 'Wütend',
|
||||||
|
color: 'angry',
|
||||||
|
icon: 'angry-line',
|
||||||
|
}
|
||||||
|
|
||||||
|
const disappointed = {
|
||||||
|
label: 'Enttäuscht',
|
||||||
|
color: 'disappointed',
|
||||||
|
icon: 'confused-line',
|
||||||
|
}
|
||||||
|
|
||||||
|
const empty = {
|
||||||
|
label: 'Leer',
|
||||||
|
color: 'empty',
|
||||||
|
icon: 'look-down-line',
|
||||||
|
}
|
||||||
|
|
||||||
|
const sick = {
|
||||||
|
label: 'Krank',
|
||||||
|
color: 'sick',
|
||||||
|
icon: 'sick-line',
|
||||||
|
}
|
||||||
|
|
||||||
|
const dead = {
|
||||||
|
label: 'Tot',
|
||||||
|
color: 'dead',
|
||||||
|
icon: 'skull-line',
|
||||||
|
}
|
||||||
|
|
||||||
|
const pissed = {
|
||||||
|
label: 'Genervt',
|
||||||
|
color: 'pissed',
|
||||||
|
icon: 'sweats-line',
|
||||||
|
}
|
||||||
|
|
||||||
|
export const moods : Record<PossibleMood, Mood> = {
|
||||||
|
happy,
|
||||||
|
sad,
|
||||||
|
angry,
|
||||||
|
disappointed,
|
||||||
|
empty,
|
||||||
|
sick,
|
||||||
|
dead,
|
||||||
|
pissed,
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue