Merge pull request #151 from SELab-2/dependabot/npm_and_yarn/vite-6.1.2
chore(deps-dev): bump vite from 6.1.1 to 6.1.2 Co-authored-by: Gabriellvl <vanlangenhovefga@gmail.com>
This commit is contained in:
		
						commit
						910ac05b21
					
				
					 13 changed files with 1477 additions and 670 deletions
				
			
		|  | @ -42,7 +42,7 @@ | ||||||
|         "jsdom": "^26.0.0", |         "jsdom": "^26.0.0", | ||||||
|         "npm-run-all2": "^7.0.2", |         "npm-run-all2": "^7.0.2", | ||||||
|         "typescript": "~5.7.3", |         "typescript": "~5.7.3", | ||||||
|         "vite": "^6.1.0", |         "vite": "^6.1.2", | ||||||
|         "vite-plugin-vue-devtools": "^7.7.2", |         "vite-plugin-vue-devtools": "^7.7.2", | ||||||
|         "vitest": "^3.0.5", |         "vitest": "^3.0.5", | ||||||
|         "vue-tsc": "^2.2.2" |         "vue-tsc": "^2.2.2" | ||||||
|  |  | ||||||
|  | @ -1,47 +1,56 @@ | ||||||
| <script setup lang="ts"> | <script setup lang="ts"> | ||||||
| import ThemeCard from "@/components/ThemeCard.vue"; |     import ThemeCard from "@/components/ThemeCard.vue"; | ||||||
| import { ref, watchEffect, computed } from "vue"; |     import { ref, watchEffect, computed } from "vue"; | ||||||
| import { useI18n } from "vue-i18n"; |     import { useI18n } from "vue-i18n"; | ||||||
| import { AGE_TO_THEMES, THEMESITEMS } from "@/utils/constants.ts"; |     import { AGE_TO_THEMES, THEMESITEMS } from "@/utils/constants.ts"; | ||||||
| import { useThemeQuery } from "@/queries/themes.ts"; |     import { useThemeQuery } from "@/queries/themes.ts"; | ||||||
| 
 | 
 | ||||||
| const props = defineProps({ |     const props = defineProps({ | ||||||
|         selectedTheme: { type: String, required: true }, |         selectedTheme: { type: String, required: true }, | ||||||
|     selectedAge: { type: String, required: true } |         selectedAge: { type: String, required: true }, | ||||||
| }); |     }); | ||||||
| 
 | 
 | ||||||
| const { locale } = useI18n(); |     const { locale } = useI18n(); | ||||||
| const language = computed(() => locale.value); |     const language = computed(() => locale.value); | ||||||
| 
 | 
 | ||||||
| const { data: allThemes, isLoading, error } = useThemeQuery(language); |     const { data: allThemes, isLoading, error } = useThemeQuery(language); | ||||||
| 
 | 
 | ||||||
| const allCards = ref([]); |     const allCards = ref([]); | ||||||
| const cards = ref([]); |     const cards = ref([]); | ||||||
| 
 | 
 | ||||||
| watchEffect(() => { |     watchEffect(() => { | ||||||
|         const themes = allThemes.value ?? []; |         const themes = allThemes.value ?? []; | ||||||
|         allCards.value = themes; |         allCards.value = themes; | ||||||
| 
 | 
 | ||||||
|         if (props.selectedTheme) { |         if (props.selectedTheme) { | ||||||
|         cards.value = themes.filter((theme) => |             cards.value = themes.filter( | ||||||
|  |                 (theme) => | ||||||
|                     THEMESITEMS[props.selectedTheme]?.includes(theme.key) && |                     THEMESITEMS[props.selectedTheme]?.includes(theme.key) && | ||||||
|             AGE_TO_THEMES[props.selectedAge]?.includes(theme.key) |                     AGE_TO_THEMES[props.selectedAge]?.includes(theme.key), | ||||||
|             ); |             ); | ||||||
|         } else { |         } else { | ||||||
|             cards.value = themes; |             cards.value = themes; | ||||||
|         } |         } | ||||||
| }); |     }); | ||||||
| </script> | </script> | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
| <template> | <template> | ||||||
|     <v-container> |     <v-container> | ||||||
|         <div v-if="isLoading" class="text-center py-10"> |         <div | ||||||
|             <v-progress-circular indeterminate color="primary" /> |             v-if="isLoading" | ||||||
|  |             class="text-center py-10" | ||||||
|  |         > | ||||||
|  |             <v-progress-circular | ||||||
|  |                 indeterminate | ||||||
|  |                 color="primary" | ||||||
|  |             /> | ||||||
|             <p>Loading...</p> |             <p>Loading...</p> | ||||||
|         </div> |         </div> | ||||||
| 
 | 
 | ||||||
|         <div v-else-if="error" class="text-center py-10 text-error"> |         <div | ||||||
|  |             v-else-if="error" | ||||||
|  |             class="text-center py-10 text-error" | ||||||
|  |         > | ||||||
|             <v-icon large>mdi-alert-circle</v-icon> |             <v-icon large>mdi-alert-circle</v-icon> | ||||||
|             <p>Error loading: {{ error.message }}</p> |             <p>Error loading: {{ error.message }}</p> | ||||||
|         </div> |         </div> | ||||||
|  |  | ||||||
|  | @ -22,7 +22,7 @@ | ||||||
|         { name: "English", code: "en" }, |         { name: "English", code: "en" }, | ||||||
|         { name: "Nederlands", code: "nl" }, |         { name: "Nederlands", code: "nl" }, | ||||||
|         { name: "Français", code: "fr" }, |         { name: "Français", code: "fr" }, | ||||||
|         { name: "Deutsch", code: "de" } |         { name: "Deutsch", code: "de" }, | ||||||
|     ]); |     ]); | ||||||
| 
 | 
 | ||||||
|     // Logic to change the language of the website to the selected language |     // Logic to change the language of the website to the selected language | ||||||
|  |  | ||||||
|  | @ -1,14 +1,14 @@ | ||||||
| <script setup lang="ts"> | <script setup lang="ts"> | ||||||
| import { useI18n } from "vue-i18n"; |     import { useI18n } from "vue-i18n"; | ||||||
| 
 | 
 | ||||||
| const { t } = useI18n(); |     const { t } = useI18n(); | ||||||
| 
 | 
 | ||||||
| defineProps<{ |     defineProps<{ | ||||||
|         path: string; |         path: string; | ||||||
|         title: string; |         title: string; | ||||||
|         description: string; |         description: string; | ||||||
|         image: string; |         image: string; | ||||||
| }>(); |     }>(); | ||||||
| </script> | </script> | ||||||
| 
 | 
 | ||||||
| <template> | <template> | ||||||
|  | @ -31,7 +31,10 @@ defineProps<{ | ||||||
|         </v-card-title> |         </v-card-title> | ||||||
|         <v-card-text class="description flex-grow-1">{{ description }}</v-card-text> |         <v-card-text class="description flex-grow-1">{{ description }}</v-card-text> | ||||||
|         <v-card-actions> |         <v-card-actions> | ||||||
|             <v-btn :to="`theme/${path}`" variant="text"> |             <v-btn | ||||||
|  |                 :to="`theme/${path}`" | ||||||
|  |                 variant="text" | ||||||
|  |             > | ||||||
|                 {{ t("read-more") }} |                 {{ t("read-more") }} | ||||||
|             </v-btn> |             </v-btn> | ||||||
|         </v-card-actions> |         </v-card-actions> | ||||||
|  | @ -39,36 +42,36 @@ defineProps<{ | ||||||
| </template> | </template> | ||||||
| 
 | 
 | ||||||
| <style scoped> | <style scoped> | ||||||
| .theme-card { |     .theme-card { | ||||||
|         display: flex; |         display: flex; | ||||||
|         flex-direction: column; |         flex-direction: column; | ||||||
|         height: 100%; |         height: 100%; | ||||||
|         padding: 1rem; |         padding: 1rem; | ||||||
|         cursor: pointer; |         cursor: pointer; | ||||||
| } |     } | ||||||
| 
 | 
 | ||||||
| .theme-card:hover { |     .theme-card:hover { | ||||||
|         background-color: rgba(0, 0, 0, 0.03); |         background-color: rgba(0, 0, 0, 0.03); | ||||||
| } |     } | ||||||
| 
 | 
 | ||||||
| .title-container { |     .title-container { | ||||||
|         display: flex; |         display: flex; | ||||||
|         align-items: center; |         align-items: center; | ||||||
|         gap: 10px; |         gap: 10px; | ||||||
|         text-align: left; |         text-align: left; | ||||||
|         justify-content: flex-start; |         justify-content: flex-start; | ||||||
| } |     } | ||||||
| 
 | 
 | ||||||
| .title-image { |     .title-image { | ||||||
|         flex-shrink: 0; |         flex-shrink: 0; | ||||||
|         border-radius: 5px; |         border-radius: 5px; | ||||||
|         margin-left: 0; |         margin-left: 0; | ||||||
| } |     } | ||||||
| 
 | 
 | ||||||
| .title { |     .title { | ||||||
|         flex-grow: 1; |         flex-grow: 1; | ||||||
|         white-space: normal; |         white-space: normal; | ||||||
|         overflow-wrap: break-word; |         overflow-wrap: break-word; | ||||||
|         word-break: break-word; |         word-break: break-word; | ||||||
| } |     } | ||||||
| </style> | </style> | ||||||
|  |  | ||||||
|  | @ -1,4 +1,4 @@ | ||||||
| import {apiConfig} from "@/config.ts"; | import { apiConfig } from "@/config.ts"; | ||||||
| 
 | 
 | ||||||
| export class BaseController { | export class BaseController { | ||||||
|     protected baseUrl: string; |     protected baseUrl: string; | ||||||
|  |  | ||||||
|  | @ -1,4 +1,4 @@ | ||||||
| import {ThemeController} from "@/controllers/themes.ts"; | import { ThemeController } from "@/controllers/themes.ts"; | ||||||
| 
 | 
 | ||||||
| export function controllerGetter<T>(Factory: new () => T): () => T { | export function controllerGetter<T>(Factory: new () => T): () => T { | ||||||
|     let instance: T | undefined; |     let instance: T | undefined; | ||||||
|  |  | ||||||
|  | @ -1,4 +1,4 @@ | ||||||
| import {BaseController} from "@/controllers/base-controller.ts"; | import { BaseController } from "@/controllers/base-controller.ts"; | ||||||
| 
 | 
 | ||||||
| export class ThemeController extends BaseController { | export class ThemeController extends BaseController { | ||||||
|     constructor() { |     constructor() { | ||||||
|  |  | ||||||
|  | @ -10,7 +10,7 @@ import i18n from "./i18n/i18n.ts"; | ||||||
| // Components
 | // Components
 | ||||||
| import App from "./App.vue"; | import App from "./App.vue"; | ||||||
| import router from "./router"; | import router from "./router"; | ||||||
| import { VueQueryPlugin, QueryClient } from '@tanstack/vue-query'; | import { VueQueryPlugin, QueryClient } from "@tanstack/vue-query"; | ||||||
| 
 | 
 | ||||||
| const app = createApp(App); | const app = createApp(App); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -1,25 +1,22 @@ | ||||||
| import { useQuery } from '@tanstack/vue-query'; | import { useQuery } from "@tanstack/vue-query"; | ||||||
| import { getThemeController } from '@/controllers/controllers'; | import { getThemeController } from "@/controllers/controllers"; | ||||||
| import {type MaybeRefOrGetter, toValue} from "vue"; | import { type MaybeRefOrGetter, toValue } from "vue"; | ||||||
| 
 | 
 | ||||||
| const themeController = getThemeController(); | const themeController = getThemeController(); | ||||||
| 
 | 
 | ||||||
| export const useThemeQuery = (language: MaybeRefOrGetter<string>) => { | export const useThemeQuery = (language: MaybeRefOrGetter<string>) => | ||||||
|     return useQuery({ |     useQuery({ | ||||||
|         queryKey: ['themes', language], |         queryKey: ["themes", language], | ||||||
|         queryFn: () => { |         queryFn: () => { | ||||||
|             const lang = toValue(language); |             const lang = toValue(language); | ||||||
|             return themeController.getAll(lang); |             return themeController.getAll(lang); | ||||||
|         }, |         }, | ||||||
|         enabled: () => !!toValue(language), |         enabled: () => Boolean(toValue(language)), | ||||||
|     }); |     }); | ||||||
| }; |  | ||||||
| 
 | 
 | ||||||
| export const useThemeHruidsQuery = (themeKey: string | null) => { | export const useThemeHruidsQuery = (themeKey: string | null) => | ||||||
|     return useQuery({ |     useQuery({ | ||||||
|         queryKey: ['theme-hruids', themeKey], |         queryKey: ["theme-hruids", themeKey], | ||||||
|         queryFn: () => themeController.getHruidsByKey(themeKey!), |         queryFn: () => themeController.getHruidsByKey(themeKey!), | ||||||
|         enabled: !!themeKey, |         enabled: Boolean(themeKey), | ||||||
|     }); |     }); | ||||||
| }; |  | ||||||
| 
 |  | ||||||
|  |  | ||||||
|  | @ -1,37 +1,64 @@ | ||||||
| export const THEMES_KEYS = [ | export const THEMES_KEYS = [ | ||||||
|     "kiks", "art", "socialrobot", "agriculture", "wegostem", |     "kiks", | ||||||
|     "computational_thinking", "math_with_python", "python_programming", |     "art", | ||||||
|     "stem", "care", "chatbot", "physical_computing", "algorithms", "basics_ai" |     "socialrobot", | ||||||
|  |     "agriculture", | ||||||
|  |     "wegostem", | ||||||
|  |     "computational_thinking", | ||||||
|  |     "math_with_python", | ||||||
|  |     "python_programming", | ||||||
|  |     "stem", | ||||||
|  |     "care", | ||||||
|  |     "chatbot", | ||||||
|  |     "physical_computing", | ||||||
|  |     "algorithms", | ||||||
|  |     "basics_ai", | ||||||
| ]; | ]; | ||||||
| 
 | 
 | ||||||
| export const THEMESITEMS: Record<string, string[]> = { | export const THEMESITEMS: Record<string, string[]> = { | ||||||
|     "all": THEMES_KEYS, |     all: THEMES_KEYS, | ||||||
|     "culture": ["art", "wegostem", "chatbot"], |     culture: ["art", "wegostem", "chatbot"], | ||||||
|     "electricity-and-mechanics": ["socialrobot", "wegostem", "stem", "physical_computing"], |     "electricity-and-mechanics": ["socialrobot", "wegostem", "stem", "physical_computing"], | ||||||
|     "nature-and-climate": ["kiks", "agriculture"], |     "nature-and-climate": ["kiks", "agriculture"], | ||||||
|     "agriculture": ["agriculture"], |     agriculture: ["agriculture"], | ||||||
|     "society": ["kiks", "socialrobot", "care", "chatbot"], |     society: ["kiks", "socialrobot", "care", "chatbot"], | ||||||
|     "math": ["kiks", "math_with_python", "python_programming", "stem", "care", "basics_ai"], |     math: ["kiks", "math_with_python", "python_programming", "stem", "care", "basics_ai"], | ||||||
|     "technology": ["socialrobot", "wegostem", "computational_thinking", "stem", "physical_computing", "basics_ai"], |     technology: ["socialrobot", "wegostem", "computational_thinking", "stem", "physical_computing", "basics_ai"], | ||||||
|     "algorithms": ["math_with_python", "python_programming", "stem", "algorithms", "basics_ai"], |     algorithms: ["math_with_python", "python_programming", "stem", "algorithms", "basics_ai"], | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| export const AGEITEMS = [ | export const AGEITEMS = ["all", "primary-school", "lower-secondary", "upper-secondary", "high-school", "older"]; | ||||||
|     "all", "primary-school", "lower-secondary", "upper-secondary", "high-school", "older" |  | ||||||
| ]; |  | ||||||
| 
 | 
 | ||||||
| export const AGE_TO_THEMES: Record<string, string[]> = { | export const AGE_TO_THEMES: Record<string, string[]> = { | ||||||
|     "all": THEMES_KEYS, |     all: THEMES_KEYS, | ||||||
|     "primary-school": ["wegostem", "computational_thinking", "physical_computing"], |     "primary-school": ["wegostem", "computational_thinking", "physical_computing"], | ||||||
|     "lower-secondary": ["socialrobot", "art", "wegostem", "computational_thinking", "physical_computing"], |     "lower-secondary": ["socialrobot", "art", "wegostem", "computational_thinking", "physical_computing"], | ||||||
|     "upper-secondary": ["kiks", "art", "socialrobot", "agriculture", |     "upper-secondary": [ | ||||||
|         "computational_thinking", "math_with_python", "python_programming", |         "kiks", | ||||||
|         "stem", "care", "chatbot", "algorithms", "basics_ai"], |         "art", | ||||||
|     "high-school": [ |         "socialrobot", | ||||||
|         "kiks", "art", "agriculture", "computational_thinking", "math_with_python", "python_programming", |         "agriculture", | ||||||
|         "stem", "care", "chatbot", "algorithms", "basics_ai" |         "computational_thinking", | ||||||
|  |         "math_with_python", | ||||||
|  |         "python_programming", | ||||||
|  |         "stem", | ||||||
|  |         "care", | ||||||
|  |         "chatbot", | ||||||
|  |         "algorithms", | ||||||
|  |         "basics_ai", | ||||||
|     ], |     ], | ||||||
|     "older": [ |     "high-school": [ | ||||||
|         "kiks", "computational_thinking", "algorithms", "basics_ai" |         "kiks", | ||||||
|     ] |         "art", | ||||||
|  |         "agriculture", | ||||||
|  |         "computational_thinking", | ||||||
|  |         "math_with_python", | ||||||
|  |         "python_programming", | ||||||
|  |         "stem", | ||||||
|  |         "care", | ||||||
|  |         "chatbot", | ||||||
|  |         "algorithms", | ||||||
|  |         "basics_ai", | ||||||
|  |     ], | ||||||
|  |     older: ["kiks", "computational_thinking", "algorithms", "basics_ai"], | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  | @ -1,11 +1,7 @@ | ||||||
| <script setup lang="ts"> | <script setup lang="ts"></script> | ||||||
| 
 |  | ||||||
| </script> |  | ||||||
| 
 | 
 | ||||||
| <template> | <template> | ||||||
| <main></main> |     <main></main> | ||||||
| </template> | </template> | ||||||
| 
 | 
 | ||||||
| <style scoped> | <style scoped></style> | ||||||
| 
 |  | ||||||
| </style> |  | ||||||
|  |  | ||||||
|  | @ -1,13 +1,13 @@ | ||||||
| <script setup lang="ts"> | <script setup lang="ts"> | ||||||
| import {ref, watch} from "vue"; |     import { ref, watch } from "vue"; | ||||||
|     import {useI18n} from "vue-i18n"; |     import { useI18n } from "vue-i18n"; | ||||||
|     import {THEMESITEMS, AGE_TO_THEMES} from "@/utils/constants.ts"; |     import { THEMESITEMS, AGE_TO_THEMES } from "@/utils/constants.ts"; | ||||||
|     import BrowseThemes from "@/components/BrowseThemes.vue"; |     import BrowseThemes from "@/components/BrowseThemes.vue"; | ||||||
| 
 | 
 | ||||||
|     const {t, locale} = useI18n(); |     const { t, locale } = useI18n(); | ||||||
| 
 | 
 | ||||||
|     const selectedThemeKey = ref<string>('all'); |     const selectedThemeKey = ref<string>("all"); | ||||||
|     const selectedAgeKey = ref<string>('all'); |     const selectedAgeKey = ref<string>("all"); | ||||||
| 
 | 
 | ||||||
|     const allThemes = ref(Object.keys(THEMESITEMS)); |     const allThemes = ref(Object.keys(THEMESITEMS)); | ||||||
|     const availableThemes = ref([...allThemes.value]); |     const availableThemes = ref([...allThemes.value]); | ||||||
|  | @ -17,18 +17,17 @@ import {ref, watch} from "vue"; | ||||||
| 
 | 
 | ||||||
|     // Reset selection when language changes |     // Reset selection when language changes | ||||||
|     watch(locale, () => { |     watch(locale, () => { | ||||||
|         selectedThemeKey.value = 'all'; |         selectedThemeKey.value = "all"; | ||||||
|         selectedAgeKey.value = 'all'; |         selectedAgeKey.value = "all"; | ||||||
|     }); |     }); | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
|     watch(selectedThemeKey, () => { |     watch(selectedThemeKey, () => { | ||||||
|         if (selectedThemeKey.value === "all") { |         if (selectedThemeKey.value === "all") { | ||||||
|             availableAges.value = [...allAges.value]; // Reset to all ages |             availableAges.value = [...allAges.value]; // Reset to all ages | ||||||
|         } else { |         } else { | ||||||
|             const themes = THEMESITEMS[selectedThemeKey.value]; |             const themes = THEMESITEMS[selectedThemeKey.value]; | ||||||
|             availableAges.value = allAges.value.filter(age => |             availableAges.value = allAges.value.filter((age) => | ||||||
|                 AGE_TO_THEMES[age]?.some(theme => themes.includes(theme)) |                 AGE_TO_THEMES[age]?.some((theme) => themes.includes(theme)), | ||||||
|             ); |             ); | ||||||
|         } |         } | ||||||
|     }); |     }); | ||||||
|  | @ -38,32 +37,31 @@ import {ref, watch} from "vue"; | ||||||
|             availableThemes.value = [...allThemes.value]; // Reset to all themes |             availableThemes.value = [...allThemes.value]; // Reset to all themes | ||||||
|         } else { |         } else { | ||||||
|             const themes = AGE_TO_THEMES[selectedAgeKey.value]; |             const themes = AGE_TO_THEMES[selectedAgeKey.value]; | ||||||
|             availableThemes.value = allThemes.value.filter(theme => |             availableThemes.value = allThemes.value.filter((theme) => | ||||||
|                 THEMESITEMS[theme]?.some(theme => themes.includes(theme)) |                 THEMESITEMS[theme]?.some((theme) => themes.includes(theme)), | ||||||
|             ); |             ); | ||||||
|         } |         } | ||||||
|     }); |     }); | ||||||
| 
 |  | ||||||
| </script> | </script> | ||||||
| 
 | 
 | ||||||
| <template> | <template> | ||||||
|     <div class="main-container"> |     <div class="main-container"> | ||||||
|         <h1 class="title">{{ t("themes") }}</h1> |         <h1 class="title">{{ t("themes") }}</h1> | ||||||
|         <v-container class="dropdowns"> |         <v-container class="dropdowns"> | ||||||
|             <v-select class="v-select" |             <v-select | ||||||
|  |                 class="v-select" | ||||||
|                 :label="t('choose-theme')" |                 :label="t('choose-theme')" | ||||||
|                       :items="availableThemes.map(theme => ({ title: t(`theme-options.${theme}`), value: theme }))" |                 :items="availableThemes.map((theme) => ({ title: t(`theme-options.${theme}`), value: theme }))" | ||||||
|                 v-model="selectedThemeKey" |                 v-model="selectedThemeKey" | ||||||
|                 item-title="title" |                 item-title="title" | ||||||
|                 item-value="value" |                 item-value="value" | ||||||
|                 variant="outlined" |                 variant="outlined" | ||||||
|             /> |             /> | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
|             <v-select |             <v-select | ||||||
|                 class="v-select" |                 class="v-select" | ||||||
|                 :label="t('choose-age')" |                 :label="t('choose-age')" | ||||||
|                 :items="availableAges.map(age => ({ key: age, label: t(`age-options.${age}`), value: age }))" |                 :items="availableAges.map((age) => ({ key: age, label: t(`age-options.${age}`), value: age }))" | ||||||
|                 v-model="selectedAgeKey" |                 v-model="selectedAgeKey" | ||||||
|                 item-title="label" |                 item-title="label" | ||||||
|                 item-value="key" |                 item-value="key" | ||||||
|  | @ -71,55 +69,55 @@ import {ref, watch} from "vue"; | ||||||
|             ></v-select> |             ></v-select> | ||||||
|         </v-container> |         </v-container> | ||||||
| 
 | 
 | ||||||
|         <BrowseThemes :selectedTheme="selectedThemeKey ?? ''" :selectedAge="selectedAgeKey ?? ''"/> |         <BrowseThemes | ||||||
|  |             :selectedTheme="selectedThemeKey ?? ''" | ||||||
|  |             :selectedAge="selectedAgeKey ?? ''" | ||||||
|  |         /> | ||||||
|     </div> |     </div> | ||||||
| </template> | </template> | ||||||
| 
 | 
 | ||||||
| <style scoped> | <style scoped> | ||||||
| .main-container { |     .main-container { | ||||||
|         min-height: 100vh; |         min-height: 100vh; | ||||||
|         min-width: 100vw; |         min-width: 100vw; | ||||||
|         display: flex; |         display: flex; | ||||||
|         flex-direction: column; |         flex-direction: column; | ||||||
|         align-items: flex-start; |         align-items: flex-start; | ||||||
|         justify-content: flex-start; |         justify-content: flex-start; | ||||||
| } |     } | ||||||
| 
 | 
 | ||||||
| .title { |     .title { | ||||||
|         max-width: 50rem; |         max-width: 50rem; | ||||||
|         margin-left: 1rem; |         margin-left: 1rem; | ||||||
|         margin-top: 1rem; |         margin-top: 1rem; | ||||||
|         text-align: center; |         text-align: center; | ||||||
|         display: flex; |         display: flex; | ||||||
|         justify-content: center; |         justify-content: center; | ||||||
| } |     } | ||||||
| 
 | 
 | ||||||
| 
 |     .dropdowns { | ||||||
| .dropdowns { |  | ||||||
|         display: flex; |         display: flex; | ||||||
|         justify-content: space-between; |         justify-content: space-between; | ||||||
|         gap: 5rem; |         gap: 5rem; | ||||||
|         width: 80%; |         width: 80%; | ||||||
| } |     } | ||||||
| 
 | 
 | ||||||
| .v-select { |     .v-select { | ||||||
|         flex: 1; |         flex: 1; | ||||||
|         min-width: 100px; |         min-width: 100px; | ||||||
| } |     } | ||||||
| 
 | 
 | ||||||
| 
 |     @media (max-width: 768px) { | ||||||
| @media (max-width: 768px) { |  | ||||||
|         .main-container { |         .main-container { | ||||||
|             padding: 1rem; |             padding: 1rem; | ||||||
|         } |         } | ||||||
| } |     } | ||||||
| 
 | 
 | ||||||
| @media (max-width: 700px) { |     @media (max-width: 700px) { | ||||||
|         .dropdowns { |         .dropdowns { | ||||||
|             flex-direction: column; |             flex-direction: column; | ||||||
|             gap: 1rem; |             gap: 1rem; | ||||||
|             width: 80%; |             width: 80%; | ||||||
|         } |         } | ||||||
| } |     } | ||||||
| 
 |  | ||||||
| </style> | </style> | ||||||
|  |  | ||||||
							
								
								
									
										1753
									
								
								package-lock.json
									
										
									
										generated
									
									
									
								
							
							
						
						
									
										1753
									
								
								package-lock.json
									
										
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
		Reference in a new issue
	
	 GitHub
							GitHub