Showing
30 changed files
with
2330 additions
and
101 deletions
| 1 | ------- Dispo à la prochaine release ------------ | 1 | +------ Dispo à la prochaine release ------------ |
| 2 | +- Installation vuelidate et vuelidate/validator. | ||
| 3 | +- Ajout composant SkeletonMovieDetailLoader. | ||
| 4 | +- Ajout Model + Interface credit. | ||
| 5 | +- Ajout composant ScoreAndVote. | ||
| 6 | +- Ajout composant MovieGender. | ||
| 7 | +- Ajout composant Poster. | ||
| 8 | +- Ajout composant BackdropImage. | ||
| 9 | +- Ajout composant MovieCommentForm. | ||
| 10 | +- Ajout model + interface MovieComment. | ||
| 11 | +- Ajout composant MovieCommentForm. | ||
| 12 | +- Ajout composant MovieCommentList. | ||
| 13 | +- Ajout dépendance TinyMCE. | ||
| 14 | +- Ajout composant TinyMceFieldEditor. | ||
| 15 | +- Ajout composant Loader. | ||
| 16 | +- Ajout composant MovieCard. |
components/MovieCard.vue
0 → 100644
| 1 | +<script lang="ts" setup> | ||
| 2 | +//#region --Props--. | ||
| 3 | +import { useDateFormat } from "@vueuse/core"; | ||
| 4 | +import { FilmIcon } from "lucide-vue-next"; | ||
| 5 | +//#endregion | ||
| 6 | + | ||
| 7 | +//#region --Props--. | ||
| 8 | +defineProps({ | ||
| 9 | + movie: { | ||
| 10 | + type: Object, | ||
| 11 | + required: true, | ||
| 12 | + nullable: false, | ||
| 13 | + }, | ||
| 14 | +}); | ||
| 15 | +//#endregion | ||
| 16 | +</script> | ||
| 17 | + | ||
| 18 | +<template> | ||
| 19 | + <section | ||
| 20 | + class="bg-gray-800 rounded-lg overflow-hidden shadow-lg transition-transform duration-300 hover:scale-105 cursor-pointer" | ||
| 21 | + @click="navigateTo(`/movies/${movie.id}`)" | ||
| 22 | + > | ||
| 23 | + <div class="relative pb-[150%]"> | ||
| 24 | + <img | ||
| 25 | + v-if="movie.poster_path" | ||
| 26 | + :alt="movie.title" | ||
| 27 | + :src="`https://image.tmdb.org/t/p/w500${movie.poster_path}`" | ||
| 28 | + class="absolute inset-0 w-full h-full object-cover" | ||
| 29 | + /> | ||
| 30 | + <div v-else class="absolute inset-0 w-full h-full bg-gray-700 flex items-center justify-center"> | ||
| 31 | + <FilmIcon :size="48" class="text-gray-500" /> | ||
| 32 | + </div> | ||
| 33 | + <div | ||
| 34 | + class="absolute top-2 right-2 bg-primary text-white rounded-full w-10 h-10 flex items-center justify-center font-bold" | ||
| 35 | + > | ||
| 36 | + {{ movie.vote_average.toFixed(1) }} | ||
| 37 | + </div> | ||
| 38 | + </div> | ||
| 39 | + <div class="p-4"> | ||
| 40 | + <h2 class="text-lg font-bold mb-1 line-clamp-1">{{ movie.title }}</h2> | ||
| 41 | + <p class="text-sm text-gray-400">{{ useDateFormat(movie.release_date, "DD-MM-YYYY") }}</p> | ||
| 42 | + </div> | ||
| 43 | + </section> | ||
| 44 | +</template> | ||
| 45 | + | ||
| 46 | +<style scoped></style> |
components/MovieCommentList.vue
0 → 100644
| 1 | +<script lang="ts" setup> | ||
| 2 | +//#region --Import--. | ||
| 3 | +import type { MovieCommentInterface } from "~/interfaces/movieComment"; | ||
| 4 | +import { MessageSquareIcon } from "lucide-vue-next"; | ||
| 5 | +//#endregion | ||
| 6 | + | ||
| 7 | +//#region --Props--. | ||
| 8 | +const props = defineProps({ | ||
| 9 | + comments: { | ||
| 10 | + type: Array<MovieCommentInterface>, | ||
| 11 | + required: true, | ||
| 12 | + nullable: false, | ||
| 13 | + }, | ||
| 14 | +}); | ||
| 15 | +//#endregion | ||
| 16 | + | ||
| 17 | +//#region --Watch--. | ||
| 18 | +watch( | ||
| 19 | + () => props.comments, | ||
| 20 | + (comments) => { | ||
| 21 | + nextTick(() => { | ||
| 22 | + if (comments.length) { | ||
| 23 | + comments.forEach((comment, index) => { | ||
| 24 | + const element = document.getElementById(`message${index}`) as HTMLParagraphElement; | ||
| 25 | + element.innerHTML = comment.message; | ||
| 26 | + }); | ||
| 27 | + } | ||
| 28 | + }); | ||
| 29 | + }, { immediate: true } | ||
| 30 | +); | ||
| 31 | +//#endregion | ||
| 32 | +</script> | ||
| 33 | + | ||
| 34 | +<template> | ||
| 35 | + <section> | ||
| 36 | + <!-- Liste des commentaires --> | ||
| 37 | + <section v-if="comments.length > 0" class="mt-10"> | ||
| 38 | + <h2>Commentaires publiés</h2> | ||
| 39 | + <div v-for="(comment, index) in comments" :key="index" class="bg-gray-800 rounded-lg p-6 mb-4"> | ||
| 40 | + <div class="flex justify-between items-start mb-2"> | ||
| 41 | + <section> | ||
| 42 | + <h4 class="font-bold text-lg">Par {{ comment.username }}</h4> | ||
| 43 | + <p class="text-sm text-gray-400">Le {{ useDateFormat(comment.createdAt, "DD-MM-YYYY") }}</p> | ||
| 44 | + </section> | ||
| 45 | + <section class="bg-primary text-white rounded-full w-10 h-10 flex items-center justify-center font-bold"> | ||
| 46 | + {{ comment.rating }} | ||
| 47 | + </section> | ||
| 48 | + </div> | ||
| 49 | + <p :id="`message${index}`" class="text-gray-300">{{ comment.message }}</p> | ||
| 50 | + </div> | ||
| 51 | + </section> | ||
| 52 | + <!-- Si aucun commentaire --> | ||
| 53 | + <section v-else class="text-center py-8 bg-gray-800 rounded-lg mt-10"> | ||
| 54 | + <MessageSquareIcon :size="48" class="mx-auto mb-3 text-gray-600" /> | ||
| 55 | + <p class="text-gray-400">Aucun commentaire pour le moment. Soyez le premier à donner votre avis !</p> | ||
| 56 | + </section> | ||
| 57 | + </section> | ||
| 58 | +</template> | ||
| 59 | + | ||
| 60 | +<style scoped></style> |
| 1 | <script lang="ts" setup> | 1 | <script lang="ts" setup> |
| 2 | //#region --import--. | 2 | //#region --import--. |
| 3 | -import SearchBar from "~/components/SearchBar.vue"; | ||
| 4 | import { onBeforeUnmount, ref } from "vue"; | 3 | import { onBeforeUnmount, ref } from "vue"; |
| 5 | import { useTMDB } from "~/composables/tMDB"; | 4 | import { useTMDB } from "~/composables/tMDB"; |
| 6 | import { Movie } from "~/models/movie"; | 5 | import { Movie } from "~/models/movie"; |
| 7 | -import { FilmIcon, SearchXIcon } from "lucide-vue-next"; | 6 | +import { SearchXIcon } from "lucide-vue-next"; |
| 8 | import type { MovieInterface } from "~/interfaces/movie"; | 7 | import type { MovieInterface } from "~/interfaces/movie"; |
| 9 | -import { useDateFormat } from "@vueuse/core"; | ||
| 10 | //#endregion | 8 | //#endregion |
| 11 | 9 | ||
| 12 | //#region --Declaration--. | 10 | //#region --Declaration--. |
| @@ -100,7 +98,7 @@ function createIntersectionObserver() { | @@ -100,7 +98,7 @@ function createIntersectionObserver() { | ||
| 100 | if (entry.isIntersecting && !isLoadingMore.value && currentPage.value < totalPages.value) { | 98 | if (entry.isIntersecting && !isLoadingMore.value && currentPage.value < totalPages.value) { |
| 101 | if (searchQuery.value) { | 99 | if (searchQuery.value) { |
| 102 | // Continue searching query if already active. | 100 | // Continue searching query if already active. |
| 103 | - search(searchQuery.value, currentPage.value + 1) | 101 | + search(searchQuery.value, currentPage.value + 1); |
| 104 | } else { | 102 | } else { |
| 105 | // Continue fetching popular movies. | 103 | // Continue fetching popular movies. |
| 106 | fetchMovies(currentPage.value + 1); | 104 | fetchMovies(currentPage.value + 1); |
| @@ -118,7 +116,7 @@ function handleSearchEvent(event: string) { | @@ -118,7 +116,7 @@ function handleSearchEvent(event: string) { | ||
| 118 | } | 116 | } |
| 119 | 117 | ||
| 120 | function handleClearSearchEvent() { | 118 | function handleClearSearchEvent() { |
| 121 | - searchQuery.value = ''; | 119 | + searchQuery.value = ""; |
| 122 | currentPage.value = 1; | 120 | currentPage.value = 1; |
| 123 | // Fetch popular movies after clear. | 121 | // Fetch popular movies after clear. |
| 124 | fetchMovies(1); | 122 | fetchMovies(1); |
| @@ -155,41 +153,23 @@ onBeforeUnmount(() => { | @@ -155,41 +153,23 @@ onBeforeUnmount(() => { | ||
| 155 | <section> | 153 | <section> |
| 156 | <h1 class="text-4xl font-bold mb-8 text-center">Découvrez les films populaires</h1> | 154 | <h1 class="text-4xl font-bold mb-8 text-center">Découvrez les films populaires</h1> |
| 157 | <!-- Barre de recherche --> | 155 | <!-- Barre de recherche --> |
| 158 | - <search-bar | 156 | + <ui-components-search-bar |
| 159 | placeholder="Rechercher un film..." | 157 | placeholder="Rechercher un film..." |
| 160 | @event:search="handleSearchEvent" | 158 | @event:search="handleSearchEvent" |
| 161 | @event:clear_search="handleClearSearchEvent" | 159 | @event:clear_search="handleClearSearchEvent" |
| 162 | /> | 160 | /> |
| 161 | + | ||
| 163 | <!-- Loading Skeleton --> | 162 | <!-- Loading Skeleton --> |
| 164 | - <skeleton-movies-loader v-if="isInitialLoading" :is-initial-loading="isInitialLoading" :skeleton-number="20" /> | 163 | + <ui-components-skeleton-movies-loader |
| 164 | + v-if="isInitialLoading" | ||
| 165 | + :is-initial-loading="isInitialLoading" | ||
| 166 | + :skeleton-number="20" | ||
| 167 | + /> | ||
| 168 | + | ||
| 165 | <!-- Liste des films --> | 169 | <!-- Liste des films --> |
| 166 | <div v-else-if="movies.length > 0" class="grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-6"> | 170 | <div v-else-if="movies.length > 0" class="grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-6"> |
| 167 | - <div | 171 | + <div v-for="movie in movies" :key="movie.id"> |
| 168 | - v-for="movie in movies" | 172 | + <movie-card :movie="movie" /> |
| 169 | - :key="movie.id" | ||
| 170 | - class="bg-gray-800 rounded-lg overflow-hidden shadow-lg transition-transform duration-300 hover:scale-105 cursor-pointer" | ||
| 171 | - @click="navigateTo(`/movies/${movie.id}`)" | ||
| 172 | - > | ||
| 173 | - <div class="relative pb-[150%]"> | ||
| 174 | - <img | ||
| 175 | - v-if="movie.poster_path" | ||
| 176 | - :alt="movie.title" | ||
| 177 | - :src="`https://image.tmdb.org/t/p/w500${movie.poster_path}`" | ||
| 178 | - class="absolute inset-0 w-full h-full object-cover" | ||
| 179 | - /> | ||
| 180 | - <div v-else class="absolute inset-0 w-full h-full bg-gray-700 flex items-center justify-center"> | ||
| 181 | - <FilmIcon :size="48" class="text-gray-500" /> | ||
| 182 | - </div> | ||
| 183 | - <div | ||
| 184 | - class="absolute top-2 right-2 bg-primary text-white rounded-full w-10 h-10 flex items-center justify-center font-bold" | ||
| 185 | - > | ||
| 186 | - {{ movie.vote_average.toFixed(1) }} | ||
| 187 | - </div> | ||
| 188 | - </div> | ||
| 189 | - <div class="p-4"> | ||
| 190 | - <h2 class="text-lg font-bold mb-1 line-clamp-1">{{ movie.title }}</h2> | ||
| 191 | - <p class="text-sm text-gray-400">{{ useDateFormat(movie.release_date, "DD-MM-YYYY") }}</p> | ||
| 192 | - </div> | ||
| 193 | </div> | 173 | </div> |
| 194 | </div> | 174 | </div> |
| 195 | 175 | ||
| @@ -201,9 +181,7 @@ onBeforeUnmount(() => { | @@ -201,9 +181,7 @@ onBeforeUnmount(() => { | ||
| 201 | </section> | 181 | </section> |
| 202 | 182 | ||
| 203 | <!-- Loader pour le chargement de plus de films --> | 183 | <!-- Loader pour le chargement de plus de films --> |
| 204 | - <section v-if="isLoadingMore && !isInitialLoading" class="flex justify-center mt-8"> | 184 | + <ui-components-loader :is-initial-loading="isInitialLoading" :is-loading="isLoadingMore" /> |
| 205 | - <div class="w-10 h-10 border-4 border-primary border-t-transparent rounded-full animate-spin" /> | ||
| 206 | - </section> | ||
| 207 | 185 | ||
| 208 | <!-- Élément observé pour le défilement infini --> | 186 | <!-- Élément observé pour le défilement infini --> |
| 209 | <div ref="loadMoreTrigger" class="h-10 mt-4" /> | 187 | <div ref="loadMoreTrigger" class="h-10 mt-4" /> |
components/details/MovieGender.vue
0 → 100644
| 1 | +<script lang="ts" setup> | ||
| 2 | +//#region --Import--. | ||
| 3 | +import type { Genre } from "~/interfaces/movie"; | ||
| 4 | +//#endregion | ||
| 5 | + | ||
| 6 | +//#region --Props--. | ||
| 7 | +defineProps({ | ||
| 8 | + genres: { | ||
| 9 | + type: Array<Genre>, | ||
| 10 | + required: true, | ||
| 11 | + nullable: false, | ||
| 12 | + }, | ||
| 13 | +}); | ||
| 14 | +//#endregion | ||
| 15 | +</script> | ||
| 16 | + | ||
| 17 | +<template> | ||
| 18 | + <section class="mb-6"> | ||
| 19 | + <div class="flex flex-wrap gap-2"> | ||
| 20 | + <span v-for="genre in genres" :key="genre.id" class="px-3 py-1 bg-gray-800 rounded-full text-sm"> | ||
| 21 | + {{ genre.name }} | ||
| 22 | + </span> | ||
| 23 | + </div> | ||
| 24 | + </section> | ||
| 25 | +</template> | ||
| 26 | + | ||
| 27 | +<style scoped></style> |
components/details/ScoreAndVote.vue
0 → 100644
| 1 | +<script lang="ts" setup> | ||
| 2 | +//#region --Props--. | ||
| 3 | +const props = defineProps({ | ||
| 4 | + score: { | ||
| 5 | + type: Number, | ||
| 6 | + required: true, | ||
| 7 | + nullable: false, | ||
| 8 | + }, | ||
| 9 | + nbVote: { | ||
| 10 | + type: Number, | ||
| 11 | + required: true, | ||
| 12 | + nullable: false, | ||
| 13 | + }, | ||
| 14 | +}); | ||
| 15 | +//#endregion | ||
| 16 | + | ||
| 17 | +//#region --Function--. | ||
| 18 | +/** | ||
| 19 | + * Format vote count if > 1000. | ||
| 20 | + * @param count | ||
| 21 | + */ | ||
| 22 | +const formatVoteCount = (count: number) => { | ||
| 23 | + if (count >= 1000) { | ||
| 24 | + return `${(count / 1000).toFixed(1)}k votes`; | ||
| 25 | + } | ||
| 26 | + return `${count} votes`; | ||
| 27 | +}; | ||
| 28 | +//#endregion | ||
| 29 | +</script> | ||
| 30 | + | ||
| 31 | +<template> | ||
| 32 | + <section class="flex items-center mb-6"> | ||
| 33 | + <section class="bg-primary text-white rounded-full w-12 h-12 flex items-center justify-center font-bold mr-3"> | ||
| 34 | + {{ score.toFixed(1) }} | ||
| 35 | + </section> | ||
| 36 | + <section> | ||
| 37 | + <p class="font-semibold">Note TMDB</p> | ||
| 38 | + <div class="text-sm text-gray-400">{{ formatVoteCount(nbVote) }}</div> | ||
| 39 | + </section> | ||
| 40 | + </section> | ||
| 41 | +</template> | ||
| 42 | + | ||
| 43 | +<style scoped></style> |
components/form/MovieCommentForm.vue
0 → 100644
| 1 | +<script lang="ts" setup> | ||
| 2 | +//#region --Import--. | ||
| 3 | +import { useVuelidate } from "@vuelidate/core"; | ||
| 4 | +import { helpers, maxLength, maxValue, minLength, minValue, required } from "@vuelidate/validators"; | ||
| 5 | +import type { Comment } from "~/type/commentForm"; | ||
| 6 | +//#endregion | ||
| 7 | + | ||
| 8 | +//#region --Emit--. | ||
| 9 | +const emit = defineEmits(["event:submit"]); | ||
| 10 | +//#endregion | ||
| 11 | + | ||
| 12 | +//#region --Props--. | ||
| 13 | +defineProps({ | ||
| 14 | + isSubmitting: { | ||
| 15 | + type: Boolean, | ||
| 16 | + required: false, | ||
| 17 | + nullable: false, | ||
| 18 | + default: false, | ||
| 19 | + }, | ||
| 20 | +}); | ||
| 21 | +//#endregion | ||
| 22 | + | ||
| 23 | +//#region --Data/ref--. | ||
| 24 | +const initialState: Comment = { | ||
| 25 | + username: "", | ||
| 26 | + message: "", | ||
| 27 | + rating: 5, | ||
| 28 | +}; | ||
| 29 | + | ||
| 30 | +// Validation rules | ||
| 31 | +const rules = { | ||
| 32 | + username: { | ||
| 33 | + required: helpers.withMessage("Le nom d'utilisateur est requis", required), | ||
| 34 | + minLength: helpers.withMessage("Le nom d'utilisateur doit contenir au moins 3 caractères", minLength(3)), | ||
| 35 | + maxLength: helpers.withMessage("Le nom d'utilisateur ne peut pas dépasser 50 caractères", maxLength(50)), | ||
| 36 | + alpha: helpers.withMessage( | ||
| 37 | + "Le nom d'utilisateur ne peut contenir que des lettres", | ||
| 38 | + helpers.regex(/^[a-zA-ZÀ-ÿ\s]+$/), | ||
| 39 | + ), | ||
| 40 | + }, | ||
| 41 | + message: { | ||
| 42 | + required: helpers.withMessage("Le message est requis", required), | ||
| 43 | + minLength: helpers.withMessage("Le message doit contenir au moins 3 caractères", minLength(3)), | ||
| 44 | + maxLength: helpers.withMessage("Le message ne peut pas dépasser 500 caractères", maxLength(500)), | ||
| 45 | + }, | ||
| 46 | + rating: { | ||
| 47 | + required: helpers.withMessage("La notation est requise", required), | ||
| 48 | + minValue: helpers.withMessage("Le message ne être inférieure à 0", minValue(0)), | ||
| 49 | + maxValue: helpers.withMessage("Le message ne être suppérieur à 10", maxValue(10)), | ||
| 50 | + }, | ||
| 51 | +}; | ||
| 52 | + | ||
| 53 | +const formData = reactive({ | ||
| 54 | + ...initialState, | ||
| 55 | +}); | ||
| 56 | +const v$ = useVuelidate(rules, formData); | ||
| 57 | +//#endregion | ||
| 58 | + | ||
| 59 | +const errormessages = computed(() => { | ||
| 60 | + return v$.value.message.$errors.map((e) => e.$message); | ||
| 61 | +}); | ||
| 62 | + | ||
| 63 | +//#region --Function--. | ||
| 64 | +async function submitComment() { | ||
| 65 | + emit("event:submit", formData); | ||
| 66 | +} | ||
| 67 | + | ||
| 68 | +function clear() { | ||
| 69 | + v$.value.$reset(); | ||
| 70 | + formData.username = initialState.username; | ||
| 71 | + formData.message = initialState.message; | ||
| 72 | + formData.rating = initialState.rating; | ||
| 73 | +} | ||
| 74 | + | ||
| 75 | +function handleMessageEvent(event: string) { | ||
| 76 | + formData.message = event; | ||
| 77 | + // todo : revoir ici la validation manquante (dû au retour de TinyMCE). | ||
| 78 | + v$.value.message.$touch(); | ||
| 79 | + // console.log(formData.message.replace(/<[^>]*>/g, '')); | ||
| 80 | + // console.log(formData.message.replace(/(<([^>]+)>)/ig, '')); | ||
| 81 | +} | ||
| 82 | + | ||
| 83 | +//#endregion | ||
| 84 | +</script> | ||
| 85 | + | ||
| 86 | +<template> | ||
| 87 | + <section> | ||
| 88 | + <VForm> | ||
| 89 | + <v-text-field | ||
| 90 | + v-model="formData.username" | ||
| 91 | + :error-messages="v$.username.$errors.map((e) => e.$message) as readonly string[]" | ||
| 92 | + label="nom d'utilisateur" | ||
| 93 | + placeholder="nom d'utilisateur" | ||
| 94 | + required | ||
| 95 | + @blur="v$.username.$touch()" | ||
| 96 | + @input="v$.username.$touch()" | ||
| 97 | + /> | ||
| 98 | + <v-text-field | ||
| 99 | + v-model="formData.rating" | ||
| 100 | + :error-messages="v$.rating.$errors.map((e) => e.$message) as readonly string[]" | ||
| 101 | + label="Note (1-10)" | ||
| 102 | + placeholder="" | ||
| 103 | + required | ||
| 104 | + type="number" | ||
| 105 | + @blur="v$.rating.$touch" | ||
| 106 | + @input="v$.rating.$touch" | ||
| 107 | + /> | ||
| 108 | +<!-- <pre>{{ errormessages }}</pre>--> | ||
| 109 | + <ui-components-tiny-mce-field-editor | ||
| 110 | + :error-message="v$?.message?.$errors[0]?.$message ? (v$.message.$errors[0].$message as string) : ''" | ||
| 111 | + :model-value="formData.message" | ||
| 112 | + @update:model-value="handleMessageEvent" | ||
| 113 | + /> | ||
| 114 | + <v-btn | ||
| 115 | + class="mt-6 mr-4" | ||
| 116 | + color="primary" | ||
| 117 | + @click=" | ||
| 118 | + async () => { | ||
| 119 | + const validForm = await v$.$validate(); | ||
| 120 | + if (validForm) { | ||
| 121 | + submitComment(); | ||
| 122 | + } | ||
| 123 | + } | ||
| 124 | + " | ||
| 125 | + > | ||
| 126 | + <span v-if="isSubmitting" class="flex items-center justify-center"> | ||
| 127 | + <span class="w-5 h-5 border-2 border-white border-t-transparent rounded-full animate-spin mr-2" /> | ||
| 128 | + Envoi en cours... | ||
| 129 | + </span> | ||
| 130 | + <span v-else>Publier le commentaire</span> | ||
| 131 | + </v-btn> | ||
| 132 | + <v-btn class="mt-6 mr-4" color="primary" @click="clear"> effacer</v-btn> | ||
| 133 | + </VForm> | ||
| 134 | + </section> | ||
| 135 | +</template> | ||
| 136 | + | ||
| 137 | +<style scoped></style> |
components/test/HelloWorld.spec.ts
0 → 100644
| 1 | +import { describe, it, expect } from 'vitest' | ||
| 2 | +import { mount } from '@vue/test-utils' | ||
| 3 | + | ||
| 4 | +import HelloWorld from './HelloWorld.vue' | ||
| 5 | + | ||
| 6 | +describe('HelloWorld', () => { | ||
| 7 | + it('component renders Hello world properly', () => { | ||
| 8 | + const wrapper = mount(HelloWorld) | ||
| 9 | + expect(wrapper.text()).toContain('Hello world') | ||
| 10 | + }) | ||
| 11 | +}) |
components/test/HelloWorld.vue
0 → 100644
components/ui-components/BackdropImage.vue
0 → 100644
| 1 | +<script lang="ts" setup> | ||
| 2 | +//#region --Props--. | ||
| 3 | +defineProps({ | ||
| 4 | + src: { | ||
| 5 | + type: String, | ||
| 6 | + required: true, | ||
| 7 | + nullable: false, | ||
| 8 | + }, | ||
| 9 | + title: { | ||
| 10 | + type: String, | ||
| 11 | + required: true, | ||
| 12 | + nullable: false, | ||
| 13 | + }, | ||
| 14 | +}); | ||
| 15 | +//#endregion | ||
| 16 | + | ||
| 17 | +//#region --Declaration--. | ||
| 18 | +const w: Window = window; | ||
| 19 | +//#endregion | ||
| 20 | +</script> | ||
| 21 | + | ||
| 22 | +<template> | ||
| 23 | + <section class="absolute inset-0 h-[500px] overflow-hidden z-0"> | ||
| 24 | + <v-img | ||
| 25 | + v-if="src" | ||
| 26 | + :alt="title" | ||
| 27 | + :src="`https://image.tmdb.org/t/p/original${src}`" | ||
| 28 | + :width="w.screen.width" | ||
| 29 | + aspect-ratio="16/9" | ||
| 30 | + class="w-full h-full object-cover opacity-30" | ||
| 31 | + cover | ||
| 32 | + max-height="500" | ||
| 33 | + /> | ||
| 34 | + </section> | ||
| 35 | +</template> | ||
| 36 | + | ||
| 37 | +<style scoped></style> |
components/ui-components/Loader.vue
0 → 100644
| 1 | +<script lang="ts" setup> | ||
| 2 | +//#region --Props--. | ||
| 3 | +defineProps({ | ||
| 4 | + isLoading: { | ||
| 5 | + type: Boolean, | ||
| 6 | + required: true, | ||
| 7 | + nullable: false, | ||
| 8 | + }, | ||
| 9 | + isInitialLoading: { | ||
| 10 | + type: Boolean, | ||
| 11 | + required: false, | ||
| 12 | + nullable: false, | ||
| 13 | + default: false, | ||
| 14 | + }, | ||
| 15 | +}); | ||
| 16 | +//#endregion | ||
| 17 | +</script> | ||
| 18 | + | ||
| 19 | +<template> | ||
| 20 | + <section v-if="isLoading && !isInitialLoading" class="flex justify-center mt-8"> | ||
| 21 | + <div class="w-10 h-10 border-4 border-primary border-t-transparent rounded-full animate-spin" /> | ||
| 22 | + </section> | ||
| 23 | +</template> | ||
| 24 | + | ||
| 25 | +<style scoped></style> |
components/ui-components/Poster.vue
0 → 100644
| 1 | +<script setup lang="ts"> | ||
| 2 | +//#region --Props--. | ||
| 3 | +import { FilmIcon } from "lucide-vue-next"; | ||
| 4 | + | ||
| 5 | +defineProps({ | ||
| 6 | + src: { | ||
| 7 | + type: String, | ||
| 8 | + required: true, | ||
| 9 | + nullable: false, | ||
| 10 | + }, | ||
| 11 | + title: { | ||
| 12 | + type: String, | ||
| 13 | + required: true, | ||
| 14 | + nullable: false, | ||
| 15 | + }, | ||
| 16 | +}); | ||
| 17 | +//#endregion | ||
| 18 | +</script> | ||
| 19 | + | ||
| 20 | +<template> | ||
| 21 | + <section class="w-full md:w-1/3 lg:w-1/4"> | ||
| 22 | + <div class="rounded-lg overflow-hidden shadow-lg bg-gray-800"> | ||
| 23 | + <v-img | ||
| 24 | + v-if="src" | ||
| 25 | + :alt="title" | ||
| 26 | + :src="`https://image.tmdb.org/t/p/w500${src}`" | ||
| 27 | + class="w-full h-auto" | ||
| 28 | + /> | ||
| 29 | + <div v-else class="aspect-[2/3] bg-gray-700 flex items-center justify-center"> | ||
| 30 | + <FilmIcon :size="64" class="text-gray-500" /> | ||
| 31 | + </div> | ||
| 32 | + </div> | ||
| 33 | + </section> | ||
| 34 | +</template> | ||
| 35 | + | ||
| 36 | +<style scoped> | ||
| 37 | + | ||
| 38 | +</style> |
| 1 | +<script lang="ts" setup> | ||
| 2 | +//#region --Import--. | ||
| 3 | +import Editor from "@tinymce/tinymce-vue"; | ||
| 4 | +import { ref, watch } from "vue"; | ||
| 5 | +//#endregion | ||
| 6 | + | ||
| 7 | +//#region --Declaration--. | ||
| 8 | +const runtimeConfig = useRuntimeConfig(); | ||
| 9 | +//#endregion | ||
| 10 | + | ||
| 11 | +//#region --Emit--. | ||
| 12 | +const emit = defineEmits<{ | ||
| 13 | + (e: "update:modelValue", value: string): void; | ||
| 14 | +}>(); | ||
| 15 | +//#endregion | ||
| 16 | + | ||
| 17 | +//#region --Props--. | ||
| 18 | +const props = defineProps<{ | ||
| 19 | + modelValue: string; | ||
| 20 | + errorMessage: string; | ||
| 21 | +}>(); | ||
| 22 | +//#endregion | ||
| 23 | + | ||
| 24 | +//#region --Data/ref--. | ||
| 25 | +const content = ref(props.modelValue); | ||
| 26 | +const init = { | ||
| 27 | + height: 300, | ||
| 28 | + menubar: false, | ||
| 29 | + plugins: [ | ||
| 30 | + // Core editing features | ||
| 31 | + "advlist", | ||
| 32 | + "autolink", | ||
| 33 | + "lists", | ||
| 34 | + "link", | ||
| 35 | + "image", | ||
| 36 | + "charmap", | ||
| 37 | + "preview", | ||
| 38 | + "anchor", | ||
| 39 | + "searchreplace", | ||
| 40 | + "visualblocks", | ||
| 41 | + "code", | ||
| 42 | + "fullscreen", | ||
| 43 | + "insertdatetime", | ||
| 44 | + "media", | ||
| 45 | + "table", | ||
| 46 | + "code", | ||
| 47 | + "help", | ||
| 48 | + "wordcount", | ||
| 49 | + ], | ||
| 50 | + toolbar: | ||
| 51 | + "undo redo | blocks | bold italic underline strikethrough |" + | ||
| 52 | + "bold italic forecolor | alignleft aligncenter " + | ||
| 53 | + "alignright alignjustify | bullist numlist outdent indent | " + | ||
| 54 | + "removeformat | help", | ||
| 55 | + content_style: "body { font-family:Helvetica,Arial,sans-serif; font-size:14px }", | ||
| 56 | + skin: "oxide-dark", | ||
| 57 | + content_css: "dark", | ||
| 58 | + // forced_root_block: false, | ||
| 59 | + // valid_elements: [], | ||
| 60 | + // entity_encoding : "raw", | ||
| 61 | +}; | ||
| 62 | +//#endregion | ||
| 63 | + | ||
| 64 | +//#region --Watch--. | ||
| 65 | +watch(content, (newValue) => { | ||
| 66 | + emit("update:modelValue", newValue); | ||
| 67 | +}); | ||
| 68 | + | ||
| 69 | +watch( | ||
| 70 | + () => props.modelValue, | ||
| 71 | + (newValue) => { | ||
| 72 | + if (newValue !== content.value) { | ||
| 73 | + content.value = newValue; | ||
| 74 | + } | ||
| 75 | + }, | ||
| 76 | +); | ||
| 77 | +//#endregion | ||
| 78 | +</script> | ||
| 79 | + | ||
| 80 | +<template> | ||
| 81 | + <div> | ||
| 82 | + <editor v-model="content" :api-key="runtimeConfig.public.apiTinyMceSecret" :init="init" /> | ||
| 83 | + </div> | ||
| 84 | + <div v-if="errorMessage" class="text-red-500 text-sm mt-1"> | ||
| 85 | + {{ errorMessage }} | ||
| 86 | + </div> | ||
| 87 | +</template> | ||
| 88 | + | ||
| 89 | +<style scoped></style> |
| 1 | +<script setup lang="ts"> | ||
| 2 | + | ||
| 3 | +</script> | ||
| 4 | + | ||
| 5 | +<template> | ||
| 6 | + <v-container class="bg-gray-900"> | ||
| 7 | + <v-row class="bg-gray-900" > | ||
| 8 | + <v-col cols="12" sm="4"> | ||
| 9 | + <v-skeleton-loader | ||
| 10 | + class="mx-auto border bg-gray-800" | ||
| 11 | + color="#1f2937" | ||
| 12 | + width="auto" | ||
| 13 | + height="600px" | ||
| 14 | + type="paragraph, image" | ||
| 15 | + /> | ||
| 16 | + </v-col> | ||
| 17 | + <v-col cols="12" sm="8"> | ||
| 18 | + <v-skeleton-loader | ||
| 19 | + class="mx-auto mt-10" | ||
| 20 | + color="#1f2937" | ||
| 21 | + elevation="12" | ||
| 22 | + min-height="400px" | ||
| 23 | + type="table-heading, list-item-two-line, article, actions, table-tfoot" | ||
| 24 | + /> | ||
| 25 | + </v-col> | ||
| 26 | + </v-row> | ||
| 27 | + </v-container> | ||
| 28 | +</template> | ||
| 29 | + | ||
| 30 | +<style scoped> | ||
| 31 | + | ||
| 32 | +</style> |
| 1 | import type { RuntimeConfig } from "nuxt/schema"; | 1 | import type { RuntimeConfig } from "nuxt/schema"; |
| 2 | 2 | ||
| 3 | -export const useTMDB = function() { | 3 | +export const useTMDB = function () { |
| 4 | const runtimeconfig: RuntimeConfig = useRuntimeConfig(); | 4 | const runtimeconfig: RuntimeConfig = useRuntimeConfig(); |
| 5 | const apiUrl = runtimeconfig.public.apiTMDBUrl; | 5 | const apiUrl = runtimeconfig.public.apiTMDBUrl; |
| 6 | const apiKey = runtimeconfig.public.apiTMDBSecret; | 6 | const apiKey = runtimeconfig.public.apiTMDBSecret; |
| @@ -11,9 +11,7 @@ export const useTMDB = function() { | @@ -11,9 +11,7 @@ export const useTMDB = function() { | ||
| 11 | */ | 11 | */ |
| 12 | const fetchPopularMovies = async (page: number) => { | 12 | const fetchPopularMovies = async (page: number) => { |
| 13 | try { | 13 | try { |
| 14 | - const response = await fetch( | 14 | + const response = await fetch(`${apiUrl}/movie/popular?api_key=${apiKey}&language=fr-FR&page=${page}`); |
| 15 | - `${apiUrl}/movie/popular?api_key=${apiKey}&language=fr-FR&page=${page}`, | ||
| 16 | - ); | ||
| 17 | if (!response.ok) { | 15 | if (!response.ok) { |
| 18 | console.error("An error occurred when fetching popular movies:"); | 16 | console.error("An error occurred when fetching popular movies:"); |
| 19 | } else { | 17 | } else { |
| @@ -44,5 +42,38 @@ export const useTMDB = function() { | @@ -44,5 +42,38 @@ export const useTMDB = function() { | ||
| 44 | } | 42 | } |
| 45 | }; | 43 | }; |
| 46 | 44 | ||
| 47 | - return { fetchPopularMovies, searchMovies } | 45 | + /** |
| 48 | -} | 46 | + * Fetch movie details by id. |
| 47 | + * @param id | ||
| 48 | + */ | ||
| 49 | + const fetchMovieDetails = async (id: number | string) => { | ||
| 50 | + try { | ||
| 51 | + const response = await fetch(`${apiUrl}/movie/${id}?api_key=${apiKey}&language=fr-FR`); | ||
| 52 | + if (!response.ok) { | ||
| 53 | + console.error("An error occurred when fetching movie details:"); | ||
| 54 | + } else { | ||
| 55 | + return await response.json(); | ||
| 56 | + } | ||
| 57 | + } catch (error) { | ||
| 58 | + console.error("Error fetching details:", error); | ||
| 59 | + } | ||
| 60 | + }; | ||
| 61 | + | ||
| 62 | + /** | ||
| 63 | + * Fetch movie credits | ||
| 64 | + */ | ||
| 65 | + const fetchMovieCredits = async (id: number | string) => { | ||
| 66 | + try { | ||
| 67 | + const response = await fetch(`${apiUrl}/movie/${id}/credits?api_key=${apiKey}&language=fr-FR`); | ||
| 68 | + if (!response.ok) { | ||
| 69 | + console.error("An error occurred when fetching movie credits:"); | ||
| 70 | + } else { | ||
| 71 | + return await response.json(); | ||
| 72 | + } | ||
| 73 | + } catch (error) { | ||
| 74 | + console.error("Error fetching movie credits:", error); | ||
| 75 | + } | ||
| 76 | + }; | ||
| 77 | + | ||
| 78 | + return { fetchPopularMovies, searchMovies, fetchMovieDetails, fetchMovieCredits }; | ||
| 79 | +}; |
interfaces/credit.ts
0 → 100644
| 1 | +import type { MovieInterface } from "~/interfaces/movie"; | ||
| 2 | + | ||
| 3 | +export interface CreditInterface { | ||
| 4 | + id: number; | ||
| 5 | + name: string; | ||
| 6 | + job?: string; | ||
| 7 | + character?: string; | ||
| 8 | +} | ||
| 9 | + | ||
| 10 | +export type CreditsResponse = { | ||
| 11 | + id: number; | ||
| 12 | + cast: CreditInterface[], | ||
| 13 | + crew: CreditInterface[], | ||
| 14 | + movie_id: unknown; | ||
| 15 | + movie: MovieInterface; | ||
| 16 | +} |
| 1 | +import type { CreditInterface, CreditsResponse } from "~/interfaces/credit"; | ||
| 2 | + | ||
| 1 | export interface MovieInterface { | 3 | export interface MovieInterface { |
| 2 | id: number; | 4 | id: number; |
| 3 | - title: string; | 5 | + adult: boolean; |
| 6 | + backdrop_path: string; | ||
| 7 | + genre_ids: number[]; | ||
| 8 | + genres: Genre[]; | ||
| 9 | + original_language: string; | ||
| 10 | + original_title: string; | ||
| 11 | + overview: string; | ||
| 12 | + popularity: number; | ||
| 4 | poster_path: string | null; | 13 | poster_path: string | null; |
| 5 | - vote_average: number; | ||
| 6 | release_date: string; | 14 | release_date: string; |
| 15 | + runtime: number | ||
| 16 | + title: string; | ||
| 17 | + video: boolean; | ||
| 18 | + vote_average: number; | ||
| 19 | + vote_count: number; | ||
| 20 | + credit: CreditsResponse; | ||
| 21 | +} | ||
| 22 | + | ||
| 23 | +export type Genre = { | ||
| 24 | + id: number, | ||
| 25 | + name: string, | ||
| 7 | } | 26 | } |
interfaces/movieComment.ts
0 → 100644
models/credit.ts
0 → 100644
| 1 | +import { Model } from "pinia-orm"; | ||
| 2 | +import { Movie } from "~/models/movie"; | ||
| 3 | + | ||
| 4 | +export class Credit extends Model { | ||
| 5 | + /** | ||
| 6 | + * | ||
| 7 | + * @return {string} | ||
| 8 | + */ | ||
| 9 | + static get entity() { | ||
| 10 | + return "Credit"; | ||
| 11 | + } | ||
| 12 | + | ||
| 13 | + /** | ||
| 14 | + * | ||
| 15 | + * @return {string} | ||
| 16 | + */ | ||
| 17 | + static get primaryKey() { | ||
| 18 | + return "id"; | ||
| 19 | + } | ||
| 20 | + | ||
| 21 | + static fields() { | ||
| 22 | + return { | ||
| 23 | + // Attributs. | ||
| 24 | + id: this.number(null), | ||
| 25 | + cast: this.attr([]), | ||
| 26 | + crew: this.attr([]), | ||
| 27 | + // Relations. | ||
| 28 | + movie_id: this.attr(null), | ||
| 29 | + movie: this.belongsTo(Movie, "movie_id", "id"), | ||
| 30 | + }; | ||
| 31 | + } | ||
| 32 | + | ||
| 33 | + static piniaOptions = { | ||
| 34 | + persist: true, | ||
| 35 | + }; | ||
| 36 | +} |
| 1 | import { Model } from "pinia-orm"; | 1 | import { Model } from "pinia-orm"; |
| 2 | +import { Credit } from "~/models/credit"; | ||
| 2 | 3 | ||
| 3 | export class Movie extends Model { | 4 | export class Movie extends Model { |
| 4 | /** | 5 | /** |
| @@ -22,24 +23,37 @@ export class Movie extends Model { | @@ -22,24 +23,37 @@ export class Movie extends Model { | ||
| 22 | // Attributs. | 23 | // Attributs. |
| 23 | id: this.number(null), | 24 | id: this.number(null), |
| 24 | adult: this.boolean(false), | 25 | adult: this.boolean(false), |
| 25 | - backdrop_pat: this.string(null), | 26 | + backdrop_path: this.string(null), |
| 27 | + belongs_to_collection: this.attr(null), | ||
| 28 | + budget: this.number(null), | ||
| 26 | genre_ids: this.attr([]), | 29 | genre_ids: this.attr([]), |
| 30 | + genres: this.attr([]), | ||
| 31 | + homepage: this.string(null), | ||
| 32 | + imdb_id: this.string(null), | ||
| 33 | + origin_country: this.attr([]), | ||
| 27 | original_language: this.string(null), | 34 | original_language: this.string(null), |
| 28 | original_title: this.string(null), | 35 | original_title: this.string(null), |
| 29 | overview: this.string(null), | 36 | overview: this.string(null), |
| 30 | popularity: this.number(null), | 37 | popularity: this.number(null), |
| 31 | poster_path: this.string(null), | 38 | poster_path: this.string(null), |
| 39 | + production_companies: this.attr([]), | ||
| 40 | + production_cuntries: this.attr([]), | ||
| 32 | release_date: this.string(null), | 41 | release_date: this.string(null), |
| 42 | + revenue: this.number(null), | ||
| 43 | + runtime: this.number(null), | ||
| 44 | + spoken_languages: this.attr([]), | ||
| 45 | + status: this.string(null), | ||
| 46 | + tagline: this.string(null), | ||
| 33 | title: this.string(null), | 47 | title: this.string(null), |
| 34 | video: this.boolean(false), | 48 | video: this.boolean(false), |
| 35 | vote_average: this.number(null), | 49 | vote_average: this.number(null), |
| 36 | vote_count: this.number(null), | 50 | vote_count: this.number(null), |
| 37 | // Relations. | 51 | // Relations. |
| 52 | + credit: this.hasOne(Credit, "movie_id", "id"), | ||
| 38 | }; | 53 | }; |
| 39 | } | 54 | } |
| 40 | 55 | ||
| 41 | static piniaOptions = { | 56 | static piniaOptions = { |
| 42 | persist: true, | 57 | persist: true, |
| 43 | }; | 58 | }; |
| 44 | - | 59 | +} |
| 45 | -} |
models/movieComment.ts
0 → 100644
| 1 | +import { Model } from "pinia-orm"; | ||
| 2 | +import { Movie } from "~/models/movie"; | ||
| 3 | + | ||
| 4 | +export class MovieComment extends Model { | ||
| 5 | + /** | ||
| 6 | + * | ||
| 7 | + * @return {string} | ||
| 8 | + */ | ||
| 9 | + static get entity() { | ||
| 10 | + return "MovieComment"; | ||
| 11 | + } | ||
| 12 | + | ||
| 13 | + /** | ||
| 14 | + * | ||
| 15 | + * @return {string} | ||
| 16 | + */ | ||
| 17 | + static get primaryKey() { | ||
| 18 | + return "id"; | ||
| 19 | + } | ||
| 20 | + | ||
| 21 | + static fields() { | ||
| 22 | + return { | ||
| 23 | + // Attributs. | ||
| 24 | + id: this.uid(), | ||
| 25 | + createdAt: this.string(''), | ||
| 26 | + username: this.string(''), | ||
| 27 | + message: this.string(''), | ||
| 28 | + rating: this.string(''), | ||
| 29 | + // Relations. | ||
| 30 | + movie_id: this.attr(null), | ||
| 31 | + movie: this.belongsTo(Movie, "movie_id", "id"), | ||
| 32 | + }; | ||
| 33 | + } | ||
| 34 | + | ||
| 35 | + static piniaOptions = { | ||
| 36 | + persist: true, | ||
| 37 | + }; | ||
| 38 | +} |
| @@ -25,6 +25,7 @@ export default defineNuxtConfig({ | @@ -25,6 +25,7 @@ export default defineNuxtConfig({ | ||
| 25 | "@nuxt/eslint", | 25 | "@nuxt/eslint", |
| 26 | "@nuxt/icon", | 26 | "@nuxt/icon", |
| 27 | "@nuxt/image", | 27 | "@nuxt/image", |
| 28 | + "@nuxt/test-utils/module", | ||
| 28 | [ | 29 | [ |
| 29 | "@pinia/nuxt", | 30 | "@pinia/nuxt", |
| 30 | { | 31 | { |
| @@ -68,8 +69,8 @@ export default defineNuxtConfig({ | @@ -68,8 +69,8 @@ export default defineNuxtConfig({ | ||
| 68 | // Keys within public are also exposed client-side. | 69 | // Keys within public are also exposed client-side. |
| 69 | public: { | 70 | public: { |
| 70 | apiTMDBSecret: process.env.NUXT_ENV_TMDB_API_KEY, | 71 | apiTMDBSecret: process.env.NUXT_ENV_TMDB_API_KEY, |
| 71 | - apiTMDBBearer: process.env.NUXT_ENV_TMDB_BEARER, | ||
| 72 | apiTMDBUrl: process.env.NUXT_ENV_TMDB_URL, | 72 | apiTMDBUrl: process.env.NUXT_ENV_TMDB_URL, |
| 73 | + apiTinyMceSecret: process.env.NUXT_ENV_TINY_MCE_API_KEY, | ||
| 73 | }, | 74 | }, |
| 74 | }, | 75 | }, |
| 75 | 76 |
| @@ -13,11 +13,15 @@ | @@ -13,11 +13,15 @@ | ||
| 13 | "@nuxt/icon": "^1.12.0", | 13 | "@nuxt/icon": "^1.12.0", |
| 14 | "@nuxt/image": "^1.10.0", | 14 | "@nuxt/image": "^1.10.0", |
| 15 | "@nuxt/scripts": "^0.11.6", | 15 | "@nuxt/scripts": "^0.11.6", |
| 16 | - "@nuxt/test-utils": "^3.17.2", | ||
| 17 | "@nuxt/ui": "^2.22.0", | 16 | "@nuxt/ui": "^2.22.0", |
| 18 | "@pinia-orm/nuxt": "^1.10.2", | 17 | "@pinia-orm/nuxt": "^1.10.2", |
| 19 | "@pinia/nuxt": "^0.9.0", | 18 | "@pinia/nuxt": "^0.9.0", |
| 19 | + "@tinymce/tinymce-vue": "^5.1.1", | ||
| 20 | + "@types/vuelidate": "^0.7.22", | ||
| 20 | "@unhead/vue": "^2.0.8", | 21 | "@unhead/vue": "^2.0.8", |
| 22 | + "@vitejs/plugin-vue": "^5.2.3", | ||
| 23 | + "@vuelidate/core": "^2.0.3", | ||
| 24 | + "@vuelidate/validators": "^2.0.4", | ||
| 21 | "@vueuse/core": "^13.1.0", | 25 | "@vueuse/core": "^13.1.0", |
| 22 | "@vueuse/nuxt": "^13.1.0", | 26 | "@vueuse/nuxt": "^13.1.0", |
| 23 | "eslint": "^9.25.1", | 27 | "eslint": "^9.25.1", |
| @@ -30,10 +34,16 @@ | @@ -30,10 +34,16 @@ | ||
| 30 | "vuetify-nuxt-module": "^0.18.6" | 34 | "vuetify-nuxt-module": "^0.18.6" |
| 31 | }, | 35 | }, |
| 32 | "devDependencies": { | 36 | "devDependencies": { |
| 37 | + "@nuxt/test-utils": "^3.17.2", | ||
| 33 | "@nuxtjs/tailwindcss": "^6.13.2", | 38 | "@nuxtjs/tailwindcss": "^6.13.2", |
| 39 | + "@vue/test-utils": "^2.4.6", | ||
| 34 | "eslint-config-prettier": "^10.1.2", | 40 | "eslint-config-prettier": "^10.1.2", |
| 35 | "eslint-plugin-prettier": "^5.2.6", | 41 | "eslint-plugin-prettier": "^5.2.6", |
| 36 | - "prettier": "^3.5.3" | 42 | + "happy-dom": "^17.4.4", |
| 43 | + "jsdom": "^26.1.0", | ||
| 44 | + "playwright-core": "^1.52.0", | ||
| 45 | + "prettier": "^3.5.3", | ||
| 46 | + "vitest": "^3.1.2" | ||
| 37 | } | 47 | } |
| 38 | }, | 48 | }, |
| 39 | "node_modules/@alloc/quick-lru": { | 49 | "node_modules/@alloc/quick-lru": { |
| @@ -115,6 +125,27 @@ | @@ -115,6 +125,27 @@ | ||
| 115 | "url": "https://github.com/sponsors/philsturgeon" | 125 | "url": "https://github.com/sponsors/philsturgeon" |
| 116 | } | 126 | } |
| 117 | }, | 127 | }, |
| 128 | + "node_modules/@asamuzakjp/css-color": { | ||
| 129 | + "version": "3.1.5", | ||
| 130 | + "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-3.1.5.tgz", | ||
| 131 | + "integrity": "sha512-w7AmVyTTiU41fNLsFDf+gA2Dwtbx2EJtn2pbJNAGSRAg50loXy1uLXA3hEpD8+eydcomTurw09tq5/AyceCaGg==", | ||
| 132 | + "dev": true, | ||
| 133 | + "license": "MIT", | ||
| 134 | + "dependencies": { | ||
| 135 | + "@csstools/css-calc": "^2.1.3", | ||
| 136 | + "@csstools/css-color-parser": "^3.0.9", | ||
| 137 | + "@csstools/css-parser-algorithms": "^3.0.4", | ||
| 138 | + "@csstools/css-tokenizer": "^3.0.3", | ||
| 139 | + "lru-cache": "^10.4.3" | ||
| 140 | + } | ||
| 141 | + }, | ||
| 142 | + "node_modules/@asamuzakjp/css-color/node_modules/lru-cache": { | ||
| 143 | + "version": "10.4.3", | ||
| 144 | + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", | ||
| 145 | + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", | ||
| 146 | + "dev": true, | ||
| 147 | + "license": "ISC" | ||
| 148 | + }, | ||
| 118 | "node_modules/@babel/code-frame": { | 149 | "node_modules/@babel/code-frame": { |
| 119 | "version": "7.26.2", | 150 | "version": "7.26.2", |
| 120 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", | 151 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", |
| @@ -557,6 +588,121 @@ | @@ -557,6 +588,121 @@ | ||
| 557 | "node": ">=0.1.90" | 588 | "node": ">=0.1.90" |
| 558 | } | 589 | } |
| 559 | }, | 590 | }, |
| 591 | + "node_modules/@csstools/color-helpers": { | ||
| 592 | + "version": "5.0.2", | ||
| 593 | + "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.0.2.tgz", | ||
| 594 | + "integrity": "sha512-JqWH1vsgdGcw2RR6VliXXdA0/59LttzlU8UlRT/iUUsEeWfYq8I+K0yhihEUTTHLRm1EXvpsCx3083EU15ecsA==", | ||
| 595 | + "dev": true, | ||
| 596 | + "funding": [ | ||
| 597 | + { | ||
| 598 | + "type": "github", | ||
| 599 | + "url": "https://github.com/sponsors/csstools" | ||
| 600 | + }, | ||
| 601 | + { | ||
| 602 | + "type": "opencollective", | ||
| 603 | + "url": "https://opencollective.com/csstools" | ||
| 604 | + } | ||
| 605 | + ], | ||
| 606 | + "license": "MIT-0", | ||
| 607 | + "engines": { | ||
| 608 | + "node": ">=18" | ||
| 609 | + } | ||
| 610 | + }, | ||
| 611 | + "node_modules/@csstools/css-calc": { | ||
| 612 | + "version": "2.1.3", | ||
| 613 | + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.3.tgz", | ||
| 614 | + "integrity": "sha512-XBG3talrhid44BY1x3MHzUx/aTG8+x/Zi57M4aTKK9RFB4aLlF3TTSzfzn8nWVHWL3FgAXAxmupmDd6VWww+pw==", | ||
| 615 | + "dev": true, | ||
| 616 | + "funding": [ | ||
| 617 | + { | ||
| 618 | + "type": "github", | ||
| 619 | + "url": "https://github.com/sponsors/csstools" | ||
| 620 | + }, | ||
| 621 | + { | ||
| 622 | + "type": "opencollective", | ||
| 623 | + "url": "https://opencollective.com/csstools" | ||
| 624 | + } | ||
| 625 | + ], | ||
| 626 | + "license": "MIT", | ||
| 627 | + "engines": { | ||
| 628 | + "node": ">=18" | ||
| 629 | + }, | ||
| 630 | + "peerDependencies": { | ||
| 631 | + "@csstools/css-parser-algorithms": "^3.0.4", | ||
| 632 | + "@csstools/css-tokenizer": "^3.0.3" | ||
| 633 | + } | ||
| 634 | + }, | ||
| 635 | + "node_modules/@csstools/css-color-parser": { | ||
| 636 | + "version": "3.0.9", | ||
| 637 | + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.0.9.tgz", | ||
| 638 | + "integrity": "sha512-wILs5Zk7BU86UArYBJTPy/FMPPKVKHMj1ycCEyf3VUptol0JNRLFU/BZsJ4aiIHJEbSLiizzRrw8Pc1uAEDrXw==", | ||
| 639 | + "dev": true, | ||
| 640 | + "funding": [ | ||
| 641 | + { | ||
| 642 | + "type": "github", | ||
| 643 | + "url": "https://github.com/sponsors/csstools" | ||
| 644 | + }, | ||
| 645 | + { | ||
| 646 | + "type": "opencollective", | ||
| 647 | + "url": "https://opencollective.com/csstools" | ||
| 648 | + } | ||
| 649 | + ], | ||
| 650 | + "license": "MIT", | ||
| 651 | + "dependencies": { | ||
| 652 | + "@csstools/color-helpers": "^5.0.2", | ||
| 653 | + "@csstools/css-calc": "^2.1.3" | ||
| 654 | + }, | ||
| 655 | + "engines": { | ||
| 656 | + "node": ">=18" | ||
| 657 | + }, | ||
| 658 | + "peerDependencies": { | ||
| 659 | + "@csstools/css-parser-algorithms": "^3.0.4", | ||
| 660 | + "@csstools/css-tokenizer": "^3.0.3" | ||
| 661 | + } | ||
| 662 | + }, | ||
| 663 | + "node_modules/@csstools/css-parser-algorithms": { | ||
| 664 | + "version": "3.0.4", | ||
| 665 | + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.4.tgz", | ||
| 666 | + "integrity": "sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A==", | ||
| 667 | + "dev": true, | ||
| 668 | + "funding": [ | ||
| 669 | + { | ||
| 670 | + "type": "github", | ||
| 671 | + "url": "https://github.com/sponsors/csstools" | ||
| 672 | + }, | ||
| 673 | + { | ||
| 674 | + "type": "opencollective", | ||
| 675 | + "url": "https://opencollective.com/csstools" | ||
| 676 | + } | ||
| 677 | + ], | ||
| 678 | + "license": "MIT", | ||
| 679 | + "engines": { | ||
| 680 | + "node": ">=18" | ||
| 681 | + }, | ||
| 682 | + "peerDependencies": { | ||
| 683 | + "@csstools/css-tokenizer": "^3.0.3" | ||
| 684 | + } | ||
| 685 | + }, | ||
| 686 | + "node_modules/@csstools/css-tokenizer": { | ||
| 687 | + "version": "3.0.3", | ||
| 688 | + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.3.tgz", | ||
| 689 | + "integrity": "sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==", | ||
| 690 | + "dev": true, | ||
| 691 | + "funding": [ | ||
| 692 | + { | ||
| 693 | + "type": "github", | ||
| 694 | + "url": "https://github.com/sponsors/csstools" | ||
| 695 | + }, | ||
| 696 | + { | ||
| 697 | + "type": "opencollective", | ||
| 698 | + "url": "https://opencollective.com/csstools" | ||
| 699 | + } | ||
| 700 | + ], | ||
| 701 | + "license": "MIT", | ||
| 702 | + "engines": { | ||
| 703 | + "node": ">=18" | ||
| 704 | + } | ||
| 705 | + }, | ||
| 560 | "node_modules/@csstools/selector-resolve-nested": { | 706 | "node_modules/@csstools/selector-resolve-nested": { |
| 561 | "version": "3.0.0", | 707 | "version": "3.0.0", |
| 562 | "resolved": "https://registry.npmjs.org/@csstools/selector-resolve-nested/-/selector-resolve-nested-3.0.0.tgz", | 708 | "resolved": "https://registry.npmjs.org/@csstools/selector-resolve-nested/-/selector-resolve-nested-3.0.0.tgz", |
| @@ -3073,6 +3219,7 @@ | @@ -3073,6 +3219,7 @@ | ||
| 3073 | "version": "3.17.2", | 3219 | "version": "3.17.2", |
| 3074 | "resolved": "https://registry.npmjs.org/@nuxt/test-utils/-/test-utils-3.17.2.tgz", | 3220 | "resolved": "https://registry.npmjs.org/@nuxt/test-utils/-/test-utils-3.17.2.tgz", |
| 3075 | "integrity": "sha512-i1NiWsJx8sv8Zg8z3WD7ITehMi9s8DaR6ArgmDHaKkQ6RJSaVhrPKyGBTv3gzdoF8CHUKa3MNhdX62JWblvLMg==", | 3221 | "integrity": "sha512-i1NiWsJx8sv8Zg8z3WD7ITehMi9s8DaR6ArgmDHaKkQ6RJSaVhrPKyGBTv3gzdoF8CHUKa3MNhdX62JWblvLMg==", |
| 3222 | + "dev": true, | ||
| 3076 | "license": "MIT", | 3223 | "license": "MIT", |
| 3077 | "dependencies": { | 3224 | "dependencies": { |
| 3078 | "@nuxt/kit": "^3.16.0", | 3225 | "@nuxt/kit": "^3.16.0", |
| @@ -3153,6 +3300,7 @@ | @@ -3153,6 +3300,7 @@ | ||
| 3153 | "version": "0.3.2", | 3300 | "version": "0.3.2", |
| 3154 | "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", | 3301 | "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", |
| 3155 | "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", | 3302 | "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", |
| 3303 | + "dev": true, | ||
| 3156 | "license": "MIT" | 3304 | "license": "MIT" |
| 3157 | }, | 3305 | }, |
| 3158 | "node_modules/@nuxt/ui": { | 3306 | "node_modules/@nuxt/ui": { |
| @@ -3319,6 +3467,13 @@ | @@ -3319,6 +3467,13 @@ | ||
| 3319 | "unctx": "^2.4.1" | 3467 | "unctx": "^2.4.1" |
| 3320 | } | 3468 | } |
| 3321 | }, | 3469 | }, |
| 3470 | + "node_modules/@one-ini/wasm": { | ||
| 3471 | + "version": "0.1.1", | ||
| 3472 | + "resolved": "https://registry.npmjs.org/@one-ini/wasm/-/wasm-0.1.1.tgz", | ||
| 3473 | + "integrity": "sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==", | ||
| 3474 | + "dev": true, | ||
| 3475 | + "license": "MIT" | ||
| 3476 | + }, | ||
| 3322 | "node_modules/@oxc-parser/binding-darwin-arm64": { | 3477 | "node_modules/@oxc-parser/binding-darwin-arm64": { |
| 3323 | "version": "0.56.5", | 3478 | "version": "0.56.5", |
| 3324 | "resolved": "https://registry.npmjs.org/@oxc-parser/binding-darwin-arm64/-/binding-darwin-arm64-0.56.5.tgz", | 3479 | "resolved": "https://registry.npmjs.org/@oxc-parser/binding-darwin-arm64/-/binding-darwin-arm64-0.56.5.tgz", |
| @@ -4563,6 +4718,18 @@ | @@ -4563,6 +4718,18 @@ | ||
| 4563 | "vue": "^2.7.0 || ^3.0.0" | 4718 | "vue": "^2.7.0 || ^3.0.0" |
| 4564 | } | 4719 | } |
| 4565 | }, | 4720 | }, |
| 4721 | + "node_modules/@tinymce/tinymce-vue": { | ||
| 4722 | + "version": "5.1.1", | ||
| 4723 | + "resolved": "https://registry.npmjs.org/@tinymce/tinymce-vue/-/tinymce-vue-5.1.1.tgz", | ||
| 4724 | + "integrity": "sha512-iO57HOWesFOhsaqjA5Ea6sDvQBmJJH3/dq00Uvg7metlct2kLF+ctRgoDsetLt6gmeZ7COPftr814/XzqnJ/dg==", | ||
| 4725 | + "license": "MIT", | ||
| 4726 | + "dependencies": { | ||
| 4727 | + "tinymce": "^6.0.0 || ^5.5.1" | ||
| 4728 | + }, | ||
| 4729 | + "peerDependencies": { | ||
| 4730 | + "vue": "^3.0.0" | ||
| 4731 | + } | ||
| 4732 | + }, | ||
| 4566 | "node_modules/@trysound/sax": { | 4733 | "node_modules/@trysound/sax": { |
| 4567 | "version": "0.2.0", | 4734 | "version": "0.2.0", |
| 4568 | "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", | 4735 | "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", |
| @@ -4634,6 +4801,64 @@ | @@ -4634,6 +4801,64 @@ | ||
| 4634 | "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==", | 4801 | "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==", |
| 4635 | "license": "MIT" | 4802 | "license": "MIT" |
| 4636 | }, | 4803 | }, |
| 4804 | + "node_modules/@types/vuelidate": { | ||
| 4805 | + "version": "0.7.22", | ||
| 4806 | + "resolved": "https://registry.npmjs.org/@types/vuelidate/-/vuelidate-0.7.22.tgz", | ||
| 4807 | + "integrity": "sha512-bD3pP9FgL3pxMVQ9NJ3d8BbV8Ij6xsrDKdCO4l1Wq/AksXxRRmQ9lmYjRJwn/hLMcgWO/k0QdULfZWpRz13adw==", | ||
| 4808 | + "license": "MIT", | ||
| 4809 | + "dependencies": { | ||
| 4810 | + "vue": "^2.7.15" | ||
| 4811 | + } | ||
| 4812 | + }, | ||
| 4813 | + "node_modules/@types/vuelidate/node_modules/@vue/compiler-sfc": { | ||
| 4814 | + "version": "2.7.16", | ||
| 4815 | + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-2.7.16.tgz", | ||
| 4816 | + "integrity": "sha512-KWhJ9k5nXuNtygPU7+t1rX6baZeqOYLEforUPjgNDBnLicfHCoi48H87Q8XyLZOrNNsmhuwKqtpDQWjEFe6Ekg==", | ||
| 4817 | + "dependencies": { | ||
| 4818 | + "@babel/parser": "^7.23.5", | ||
| 4819 | + "postcss": "^8.4.14", | ||
| 4820 | + "source-map": "^0.6.1" | ||
| 4821 | + }, | ||
| 4822 | + "optionalDependencies": { | ||
| 4823 | + "prettier": "^1.18.2 || ^2.0.0" | ||
| 4824 | + } | ||
| 4825 | + }, | ||
| 4826 | + "node_modules/@types/vuelidate/node_modules/prettier": { | ||
| 4827 | + "version": "2.8.8", | ||
| 4828 | + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", | ||
| 4829 | + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", | ||
| 4830 | + "license": "MIT", | ||
| 4831 | + "optional": true, | ||
| 4832 | + "bin": { | ||
| 4833 | + "prettier": "bin-prettier.js" | ||
| 4834 | + }, | ||
| 4835 | + "engines": { | ||
| 4836 | + "node": ">=10.13.0" | ||
| 4837 | + }, | ||
| 4838 | + "funding": { | ||
| 4839 | + "url": "https://github.com/prettier/prettier?sponsor=1" | ||
| 4840 | + } | ||
| 4841 | + }, | ||
| 4842 | + "node_modules/@types/vuelidate/node_modules/source-map": { | ||
| 4843 | + "version": "0.6.1", | ||
| 4844 | + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", | ||
| 4845 | + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", | ||
| 4846 | + "license": "BSD-3-Clause", | ||
| 4847 | + "engines": { | ||
| 4848 | + "node": ">=0.10.0" | ||
| 4849 | + } | ||
| 4850 | + }, | ||
| 4851 | + "node_modules/@types/vuelidate/node_modules/vue": { | ||
| 4852 | + "version": "2.7.16", | ||
| 4853 | + "resolved": "https://registry.npmjs.org/vue/-/vue-2.7.16.tgz", | ||
| 4854 | + "integrity": "sha512-4gCtFXaAA3zYZdTp5s4Hl2sozuySsgz4jy1EnpBHNfpMa9dK1ZCG7viqBPCwXtmgc8nHqUsAu3G4gtmXkkY3Sw==", | ||
| 4855 | + "deprecated": "Vue 2 has reached EOL and is no longer actively maintained. See https://v2.vuejs.org/eol/ for more details.", | ||
| 4856 | + "license": "MIT", | ||
| 4857 | + "dependencies": { | ||
| 4858 | + "@vue/compiler-sfc": "2.7.16", | ||
| 4859 | + "csstype": "^3.1.0" | ||
| 4860 | + } | ||
| 4861 | + }, | ||
| 4637 | "node_modules/@types/web-bluetooth": { | 4862 | "node_modules/@types/web-bluetooth": { |
| 4638 | "version": "0.0.21", | 4863 | "version": "0.0.21", |
| 4639 | "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.21.tgz", | 4864 | "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.21.tgz", |
| @@ -5468,6 +5693,119 @@ | @@ -5468,6 +5693,119 @@ | ||
| 5468 | "vue": "^3.0.0" | 5693 | "vue": "^3.0.0" |
| 5469 | } | 5694 | } |
| 5470 | }, | 5695 | }, |
| 5696 | + "node_modules/@vitest/expect": { | ||
| 5697 | + "version": "3.1.2", | ||
| 5698 | + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.1.2.tgz", | ||
| 5699 | + "integrity": "sha512-O8hJgr+zREopCAqWl3uCVaOdqJwZ9qaDwUP7vy3Xigad0phZe9APxKhPcDNqYYi0rX5oMvwJMSCAXY2afqeTSA==", | ||
| 5700 | + "dev": true, | ||
| 5701 | + "license": "MIT", | ||
| 5702 | + "dependencies": { | ||
| 5703 | + "@vitest/spy": "3.1.2", | ||
| 5704 | + "@vitest/utils": "3.1.2", | ||
| 5705 | + "chai": "^5.2.0", | ||
| 5706 | + "tinyrainbow": "^2.0.0" | ||
| 5707 | + }, | ||
| 5708 | + "funding": { | ||
| 5709 | + "url": "https://opencollective.com/vitest" | ||
| 5710 | + } | ||
| 5711 | + }, | ||
| 5712 | + "node_modules/@vitest/mocker": { | ||
| 5713 | + "version": "3.1.2", | ||
| 5714 | + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.1.2.tgz", | ||
| 5715 | + "integrity": "sha512-kOtd6K2lc7SQ0mBqYv/wdGedlqPdM/B38paPY+OwJ1XiNi44w3Fpog82UfOibmHaV9Wod18A09I9SCKLyDMqgw==", | ||
| 5716 | + "dev": true, | ||
| 5717 | + "license": "MIT", | ||
| 5718 | + "dependencies": { | ||
| 5719 | + "@vitest/spy": "3.1.2", | ||
| 5720 | + "estree-walker": "^3.0.3", | ||
| 5721 | + "magic-string": "^0.30.17" | ||
| 5722 | + }, | ||
| 5723 | + "funding": { | ||
| 5724 | + "url": "https://opencollective.com/vitest" | ||
| 5725 | + }, | ||
| 5726 | + "peerDependencies": { | ||
| 5727 | + "msw": "^2.4.9", | ||
| 5728 | + "vite": "^5.0.0 || ^6.0.0" | ||
| 5729 | + }, | ||
| 5730 | + "peerDependenciesMeta": { | ||
| 5731 | + "msw": { | ||
| 5732 | + "optional": true | ||
| 5733 | + }, | ||
| 5734 | + "vite": { | ||
| 5735 | + "optional": true | ||
| 5736 | + } | ||
| 5737 | + } | ||
| 5738 | + }, | ||
| 5739 | + "node_modules/@vitest/pretty-format": { | ||
| 5740 | + "version": "3.1.2", | ||
| 5741 | + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.1.2.tgz", | ||
| 5742 | + "integrity": "sha512-R0xAiHuWeDjTSB3kQ3OQpT8Rx3yhdOAIm/JM4axXxnG7Q/fS8XUwggv/A4xzbQA+drYRjzkMnpYnOGAc4oeq8w==", | ||
| 5743 | + "dev": true, | ||
| 5744 | + "license": "MIT", | ||
| 5745 | + "dependencies": { | ||
| 5746 | + "tinyrainbow": "^2.0.0" | ||
| 5747 | + }, | ||
| 5748 | + "funding": { | ||
| 5749 | + "url": "https://opencollective.com/vitest" | ||
| 5750 | + } | ||
| 5751 | + }, | ||
| 5752 | + "node_modules/@vitest/runner": { | ||
| 5753 | + "version": "3.1.2", | ||
| 5754 | + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.1.2.tgz", | ||
| 5755 | + "integrity": "sha512-bhLib9l4xb4sUMPXnThbnhX2Yi8OutBMA8Yahxa7yavQsFDtwY/jrUZwpKp2XH9DhRFJIeytlyGpXCqZ65nR+g==", | ||
| 5756 | + "dev": true, | ||
| 5757 | + "license": "MIT", | ||
| 5758 | + "dependencies": { | ||
| 5759 | + "@vitest/utils": "3.1.2", | ||
| 5760 | + "pathe": "^2.0.3" | ||
| 5761 | + }, | ||
| 5762 | + "funding": { | ||
| 5763 | + "url": "https://opencollective.com/vitest" | ||
| 5764 | + } | ||
| 5765 | + }, | ||
| 5766 | + "node_modules/@vitest/snapshot": { | ||
| 5767 | + "version": "3.1.2", | ||
| 5768 | + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.1.2.tgz", | ||
| 5769 | + "integrity": "sha512-Q1qkpazSF/p4ApZg1vfZSQ5Yw6OCQxVMVrLjslbLFA1hMDrT2uxtqMaw8Tc/jy5DLka1sNs1Y7rBcftMiaSH/Q==", | ||
| 5770 | + "dev": true, | ||
| 5771 | + "license": "MIT", | ||
| 5772 | + "dependencies": { | ||
| 5773 | + "@vitest/pretty-format": "3.1.2", | ||
| 5774 | + "magic-string": "^0.30.17", | ||
| 5775 | + "pathe": "^2.0.3" | ||
| 5776 | + }, | ||
| 5777 | + "funding": { | ||
| 5778 | + "url": "https://opencollective.com/vitest" | ||
| 5779 | + } | ||
| 5780 | + }, | ||
| 5781 | + "node_modules/@vitest/spy": { | ||
| 5782 | + "version": "3.1.2", | ||
| 5783 | + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.1.2.tgz", | ||
| 5784 | + "integrity": "sha512-OEc5fSXMws6sHVe4kOFyDSj/+4MSwst0ib4un0DlcYgQvRuYQ0+M2HyqGaauUMnjq87tmUaMNDxKQx7wNfVqPA==", | ||
| 5785 | + "dev": true, | ||
| 5786 | + "license": "MIT", | ||
| 5787 | + "dependencies": { | ||
| 5788 | + "tinyspy": "^3.0.2" | ||
| 5789 | + }, | ||
| 5790 | + "funding": { | ||
| 5791 | + "url": "https://opencollective.com/vitest" | ||
| 5792 | + } | ||
| 5793 | + }, | ||
| 5794 | + "node_modules/@vitest/utils": { | ||
| 5795 | + "version": "3.1.2", | ||
| 5796 | + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.1.2.tgz", | ||
| 5797 | + "integrity": "sha512-5GGd0ytZ7BH3H6JTj9Kw7Prn1Nbg0wZVrIvou+UWxm54d+WoXXgAgjFJ8wn3LdagWLFSEfpPeyYrByZaGEZHLg==", | ||
| 5798 | + "dev": true, | ||
| 5799 | + "license": "MIT", | ||
| 5800 | + "dependencies": { | ||
| 5801 | + "@vitest/pretty-format": "3.1.2", | ||
| 5802 | + "loupe": "^3.1.3", | ||
| 5803 | + "tinyrainbow": "^2.0.0" | ||
| 5804 | + }, | ||
| 5805 | + "funding": { | ||
| 5806 | + "url": "https://opencollective.com/vitest" | ||
| 5807 | + } | ||
| 5808 | + }, | ||
| 5471 | "node_modules/@vue-macros/common": { | 5809 | "node_modules/@vue-macros/common": { |
| 5472 | "version": "1.16.1", | 5810 | "version": "1.16.1", |
| 5473 | "resolved": "https://registry.npmjs.org/@vue-macros/common/-/common-1.16.1.tgz", | 5811 | "resolved": "https://registry.npmjs.org/@vue-macros/common/-/common-1.16.1.tgz", |
| @@ -5702,39 +6040,138 @@ | @@ -5702,39 +6040,138 @@ | ||
| 5702 | "integrity": "sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==", | 6040 | "integrity": "sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==", |
| 5703 | "license": "MIT" | 6041 | "license": "MIT" |
| 5704 | }, | 6042 | }, |
| 5705 | - "node_modules/@vuetify/loader-shared": { | 6043 | + "node_modules/@vue/test-utils": { |
| 5706 | - "version": "2.1.0", | 6044 | + "version": "2.4.6", |
| 5707 | - "resolved": "https://registry.npmjs.org/@vuetify/loader-shared/-/loader-shared-2.1.0.tgz", | 6045 | + "resolved": "https://registry.npmjs.org/@vue/test-utils/-/test-utils-2.4.6.tgz", |
| 5708 | - "integrity": "sha512-dNE6Ceym9ijFsmJKB7YGW0cxs7xbYV8+1LjU6jd4P14xOt/ji4Igtgzt0rJFbxu+ZhAzqz853lhB0z8V9Dy9cQ==", | 6046 | + "integrity": "sha512-FMxEjOpYNYiFe0GkaHsnJPXFHxQ6m4t8vI/ElPGpMWxZKpmRvQ33OIrvRXemy6yha03RxhOlQuy+gZMC3CQSow==", |
| 6047 | + "dev": true, | ||
| 5709 | "license": "MIT", | 6048 | "license": "MIT", |
| 5710 | "dependencies": { | 6049 | "dependencies": { |
| 5711 | - "upath": "^2.0.1" | 6050 | + "js-beautify": "^1.14.9", |
| 5712 | - }, | 6051 | + "vue-component-type-helpers": "^2.0.0" |
| 5713 | - "peerDependencies": { | ||
| 5714 | - "vue": "^3.0.0", | ||
| 5715 | - "vuetify": "^3.0.0" | ||
| 5716 | } | 6052 | } |
| 5717 | }, | 6053 | }, |
| 5718 | - "node_modules/@vueuse/core": { | 6054 | + "node_modules/@vuelidate/core": { |
| 5719 | - "version": "13.1.0", | 6055 | + "version": "2.0.3", |
| 5720 | - "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-13.1.0.tgz", | 6056 | + "resolved": "https://registry.npmjs.org/@vuelidate/core/-/core-2.0.3.tgz", |
| 5721 | - "integrity": "sha512-PAauvdRXZvTWXtGLg8cPUFjiZEddTqmogdwYpnn60t08AA5a8Q4hZokBnpTOnVNqySlFlTcRYIC8OqreV4hv3Q==", | 6057 | + "integrity": "sha512-AN6l7KF7+mEfyWG0doT96z+47ljwPpZfi9/JrNMkOGLFv27XVZvKzRLXlmDPQjPl/wOB1GNnHuc54jlCLRNqGA==", |
| 5722 | "license": "MIT", | 6058 | "license": "MIT", |
| 5723 | "dependencies": { | 6059 | "dependencies": { |
| 5724 | - "@types/web-bluetooth": "^0.0.21", | 6060 | + "vue-demi": "^0.13.11" |
| 5725 | - "@vueuse/metadata": "13.1.0", | ||
| 5726 | - "@vueuse/shared": "13.1.0" | ||
| 5727 | - }, | ||
| 5728 | - "funding": { | ||
| 5729 | - "url": "https://github.com/sponsors/antfu" | ||
| 5730 | }, | 6061 | }, |
| 5731 | "peerDependencies": { | 6062 | "peerDependencies": { |
| 5732 | - "vue": "^3.5.0" | 6063 | + "@vue/composition-api": "^1.0.0-rc.1", |
| 5733 | - } | 6064 | + "vue": "^2.0.0 || >=3.0.0" |
| 5734 | - }, | 6065 | + }, |
| 5735 | - "node_modules/@vueuse/integrations": { | 6066 | + "peerDependenciesMeta": { |
| 5736 | - "version": "13.1.0", | 6067 | + "@vue/composition-api": { |
| 5737 | - "resolved": "https://registry.npmjs.org/@vueuse/integrations/-/integrations-13.1.0.tgz", | 6068 | + "optional": true |
| 6069 | + } | ||
| 6070 | + } | ||
| 6071 | + }, | ||
| 6072 | + "node_modules/@vuelidate/core/node_modules/vue-demi": { | ||
| 6073 | + "version": "0.13.11", | ||
| 6074 | + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.13.11.tgz", | ||
| 6075 | + "integrity": "sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==", | ||
| 6076 | + "hasInstallScript": true, | ||
| 6077 | + "license": "MIT", | ||
| 6078 | + "bin": { | ||
| 6079 | + "vue-demi-fix": "bin/vue-demi-fix.js", | ||
| 6080 | + "vue-demi-switch": "bin/vue-demi-switch.js" | ||
| 6081 | + }, | ||
| 6082 | + "engines": { | ||
| 6083 | + "node": ">=12" | ||
| 6084 | + }, | ||
| 6085 | + "funding": { | ||
| 6086 | + "url": "https://github.com/sponsors/antfu" | ||
| 6087 | + }, | ||
| 6088 | + "peerDependencies": { | ||
| 6089 | + "@vue/composition-api": "^1.0.0-rc.1", | ||
| 6090 | + "vue": "^3.0.0-0 || ^2.6.0" | ||
| 6091 | + }, | ||
| 6092 | + "peerDependenciesMeta": { | ||
| 6093 | + "@vue/composition-api": { | ||
| 6094 | + "optional": true | ||
| 6095 | + } | ||
| 6096 | + } | ||
| 6097 | + }, | ||
| 6098 | + "node_modules/@vuelidate/validators": { | ||
| 6099 | + "version": "2.0.4", | ||
| 6100 | + "resolved": "https://registry.npmjs.org/@vuelidate/validators/-/validators-2.0.4.tgz", | ||
| 6101 | + "integrity": "sha512-odTxtUZ2JpwwiQ10t0QWYJkkYrfd0SyFYhdHH44QQ1jDatlZgTh/KRzrWVmn/ib9Gq7H4hFD4e8ahoo5YlUlDw==", | ||
| 6102 | + "license": "MIT", | ||
| 6103 | + "dependencies": { | ||
| 6104 | + "vue-demi": "^0.13.11" | ||
| 6105 | + }, | ||
| 6106 | + "peerDependencies": { | ||
| 6107 | + "@vue/composition-api": "^1.0.0-rc.1", | ||
| 6108 | + "vue": "^2.0.0 || >=3.0.0" | ||
| 6109 | + }, | ||
| 6110 | + "peerDependenciesMeta": { | ||
| 6111 | + "@vue/composition-api": { | ||
| 6112 | + "optional": true | ||
| 6113 | + } | ||
| 6114 | + } | ||
| 6115 | + }, | ||
| 6116 | + "node_modules/@vuelidate/validators/node_modules/vue-demi": { | ||
| 6117 | + "version": "0.13.11", | ||
| 6118 | + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.13.11.tgz", | ||
| 6119 | + "integrity": "sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==", | ||
| 6120 | + "hasInstallScript": true, | ||
| 6121 | + "license": "MIT", | ||
| 6122 | + "bin": { | ||
| 6123 | + "vue-demi-fix": "bin/vue-demi-fix.js", | ||
| 6124 | + "vue-demi-switch": "bin/vue-demi-switch.js" | ||
| 6125 | + }, | ||
| 6126 | + "engines": { | ||
| 6127 | + "node": ">=12" | ||
| 6128 | + }, | ||
| 6129 | + "funding": { | ||
| 6130 | + "url": "https://github.com/sponsors/antfu" | ||
| 6131 | + }, | ||
| 6132 | + "peerDependencies": { | ||
| 6133 | + "@vue/composition-api": "^1.0.0-rc.1", | ||
| 6134 | + "vue": "^3.0.0-0 || ^2.6.0" | ||
| 6135 | + }, | ||
| 6136 | + "peerDependenciesMeta": { | ||
| 6137 | + "@vue/composition-api": { | ||
| 6138 | + "optional": true | ||
| 6139 | + } | ||
| 6140 | + } | ||
| 6141 | + }, | ||
| 6142 | + "node_modules/@vuetify/loader-shared": { | ||
| 6143 | + "version": "2.1.0", | ||
| 6144 | + "resolved": "https://registry.npmjs.org/@vuetify/loader-shared/-/loader-shared-2.1.0.tgz", | ||
| 6145 | + "integrity": "sha512-dNE6Ceym9ijFsmJKB7YGW0cxs7xbYV8+1LjU6jd4P14xOt/ji4Igtgzt0rJFbxu+ZhAzqz853lhB0z8V9Dy9cQ==", | ||
| 6146 | + "license": "MIT", | ||
| 6147 | + "dependencies": { | ||
| 6148 | + "upath": "^2.0.1" | ||
| 6149 | + }, | ||
| 6150 | + "peerDependencies": { | ||
| 6151 | + "vue": "^3.0.0", | ||
| 6152 | + "vuetify": "^3.0.0" | ||
| 6153 | + } | ||
| 6154 | + }, | ||
| 6155 | + "node_modules/@vueuse/core": { | ||
| 6156 | + "version": "13.1.0", | ||
| 6157 | + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-13.1.0.tgz", | ||
| 6158 | + "integrity": "sha512-PAauvdRXZvTWXtGLg8cPUFjiZEddTqmogdwYpnn60t08AA5a8Q4hZokBnpTOnVNqySlFlTcRYIC8OqreV4hv3Q==", | ||
| 6159 | + "license": "MIT", | ||
| 6160 | + "dependencies": { | ||
| 6161 | + "@types/web-bluetooth": "^0.0.21", | ||
| 6162 | + "@vueuse/metadata": "13.1.0", | ||
| 6163 | + "@vueuse/shared": "13.1.0" | ||
| 6164 | + }, | ||
| 6165 | + "funding": { | ||
| 6166 | + "url": "https://github.com/sponsors/antfu" | ||
| 6167 | + }, | ||
| 6168 | + "peerDependencies": { | ||
| 6169 | + "vue": "^3.5.0" | ||
| 6170 | + } | ||
| 6171 | + }, | ||
| 6172 | + "node_modules/@vueuse/integrations": { | ||
| 6173 | + "version": "13.1.0", | ||
| 6174 | + "resolved": "https://registry.npmjs.org/@vueuse/integrations/-/integrations-13.1.0.tgz", | ||
| 5738 | "integrity": "sha512-wJ6aANdUs4SOpVabChQK+uLIwxRTUAEmn1DJnflGG7Wq6yaipiRmp6as/Md201FjJnquQt8MecIPbFv8HSBeDA==", | 6175 | "integrity": "sha512-wJ6aANdUs4SOpVabChQK+uLIwxRTUAEmn1DJnflGG7Wq6yaipiRmp6as/Md201FjJnquQt8MecIPbFv8HSBeDA==", |
| 5739 | "license": "MIT", | 6176 | "license": "MIT", |
| 5740 | "dependencies": { | 6177 | "dependencies": { |
| @@ -6248,6 +6685,16 @@ | @@ -6248,6 +6685,16 @@ | ||
| 6248 | "node": ">=8" | 6685 | "node": ">=8" |
| 6249 | } | 6686 | } |
| 6250 | }, | 6687 | }, |
| 6688 | + "node_modules/assertion-error": { | ||
| 6689 | + "version": "2.0.1", | ||
| 6690 | + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", | ||
| 6691 | + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", | ||
| 6692 | + "dev": true, | ||
| 6693 | + "license": "MIT", | ||
| 6694 | + "engines": { | ||
| 6695 | + "node": ">=12" | ||
| 6696 | + } | ||
| 6697 | + }, | ||
| 6251 | "node_modules/ast-kit": { | 6698 | "node_modules/ast-kit": { |
| 6252 | "version": "1.4.2", | 6699 | "version": "1.4.2", |
| 6253 | "resolved": "https://registry.npmjs.org/ast-kit/-/ast-kit-1.4.2.tgz", | 6700 | "resolved": "https://registry.npmjs.org/ast-kit/-/ast-kit-1.4.2.tgz", |
| @@ -6828,6 +7275,23 @@ | @@ -6828,6 +7275,23 @@ | ||
| 6828 | ], | 7275 | ], |
| 6829 | "license": "CC-BY-4.0" | 7276 | "license": "CC-BY-4.0" |
| 6830 | }, | 7277 | }, |
| 7278 | + "node_modules/chai": { | ||
| 7279 | + "version": "5.2.0", | ||
| 7280 | + "resolved": "https://registry.npmjs.org/chai/-/chai-5.2.0.tgz", | ||
| 7281 | + "integrity": "sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==", | ||
| 7282 | + "dev": true, | ||
| 7283 | + "license": "MIT", | ||
| 7284 | + "dependencies": { | ||
| 7285 | + "assertion-error": "^2.0.1", | ||
| 7286 | + "check-error": "^2.1.1", | ||
| 7287 | + "deep-eql": "^5.0.1", | ||
| 7288 | + "loupe": "^3.1.0", | ||
| 7289 | + "pathval": "^2.0.0" | ||
| 7290 | + }, | ||
| 7291 | + "engines": { | ||
| 7292 | + "node": ">=12" | ||
| 7293 | + } | ||
| 7294 | + }, | ||
| 6831 | "node_modules/chalk": { | 7295 | "node_modules/chalk": { |
| 6832 | "version": "4.1.2", | 7296 | "version": "4.1.2", |
| 6833 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", | 7297 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", |
| @@ -6856,6 +7320,16 @@ | @@ -6856,6 +7320,16 @@ | ||
| 6856 | "node": ">=8" | 7320 | "node": ">=8" |
| 6857 | } | 7321 | } |
| 6858 | }, | 7322 | }, |
| 7323 | + "node_modules/check-error": { | ||
| 7324 | + "version": "2.1.1", | ||
| 7325 | + "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", | ||
| 7326 | + "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", | ||
| 7327 | + "dev": true, | ||
| 7328 | + "license": "MIT", | ||
| 7329 | + "engines": { | ||
| 7330 | + "node": ">= 16" | ||
| 7331 | + } | ||
| 7332 | + }, | ||
| 6859 | "node_modules/chokidar": { | 7333 | "node_modules/chokidar": { |
| 6860 | "version": "4.0.3", | 7334 | "version": "4.0.3", |
| 6861 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", | 7335 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", |
| @@ -7138,6 +7612,24 @@ | @@ -7138,6 +7612,24 @@ | ||
| 7138 | "integrity": "sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==", | 7612 | "integrity": "sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==", |
| 7139 | "license": "MIT" | 7613 | "license": "MIT" |
| 7140 | }, | 7614 | }, |
| 7615 | + "node_modules/config-chain": { | ||
| 7616 | + "version": "1.1.13", | ||
| 7617 | + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", | ||
| 7618 | + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", | ||
| 7619 | + "dev": true, | ||
| 7620 | + "license": "MIT", | ||
| 7621 | + "dependencies": { | ||
| 7622 | + "ini": "^1.3.4", | ||
| 7623 | + "proto-list": "~1.2.1" | ||
| 7624 | + } | ||
| 7625 | + }, | ||
| 7626 | + "node_modules/config-chain/node_modules/ini": { | ||
| 7627 | + "version": "1.3.8", | ||
| 7628 | + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", | ||
| 7629 | + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", | ||
| 7630 | + "dev": true, | ||
| 7631 | + "license": "ISC" | ||
| 7632 | + }, | ||
| 7141 | "node_modules/consola": { | 7633 | "node_modules/consola": { |
| 7142 | "version": "3.4.2", | 7634 | "version": "3.4.2", |
| 7143 | "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz", | 7635 | "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz", |
| @@ -7530,6 +8022,20 @@ | @@ -7530,6 +8022,20 @@ | ||
| 7530 | "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", | 8022 | "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", |
| 7531 | "license": "CC0-1.0" | 8023 | "license": "CC0-1.0" |
| 7532 | }, | 8024 | }, |
| 8025 | + "node_modules/cssstyle": { | ||
| 8026 | + "version": "4.3.1", | ||
| 8027 | + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.3.1.tgz", | ||
| 8028 | + "integrity": "sha512-ZgW+Jgdd7i52AaLYCriF8Mxqft0gD/R9i9wi6RWBhs1pqdPEzPjym7rvRKi397WmQFf3SlyUsszhw+VVCbx79Q==", | ||
| 8029 | + "dev": true, | ||
| 8030 | + "license": "MIT", | ||
| 8031 | + "dependencies": { | ||
| 8032 | + "@asamuzakjp/css-color": "^3.1.2", | ||
| 8033 | + "rrweb-cssom": "^0.8.0" | ||
| 8034 | + }, | ||
| 8035 | + "engines": { | ||
| 8036 | + "node": ">=18" | ||
| 8037 | + } | ||
| 8038 | + }, | ||
| 7533 | "node_modules/csstype": { | 8039 | "node_modules/csstype": { |
| 7534 | "version": "3.1.3", | 8040 | "version": "3.1.3", |
| 7535 | "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", | 8041 | "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", |
| @@ -7545,6 +8051,67 @@ | @@ -7545,6 +8051,67 @@ | ||
| 7545 | "node": ">= 12" | 8051 | "node": ">= 12" |
| 7546 | } | 8052 | } |
| 7547 | }, | 8053 | }, |
| 8054 | + "node_modules/data-urls": { | ||
| 8055 | + "version": "5.0.0", | ||
| 8056 | + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz", | ||
| 8057 | + "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==", | ||
| 8058 | + "dev": true, | ||
| 8059 | + "license": "MIT", | ||
| 8060 | + "dependencies": { | ||
| 8061 | + "whatwg-mimetype": "^4.0.0", | ||
| 8062 | + "whatwg-url": "^14.0.0" | ||
| 8063 | + }, | ||
| 8064 | + "engines": { | ||
| 8065 | + "node": ">=18" | ||
| 8066 | + } | ||
| 8067 | + }, | ||
| 8068 | + "node_modules/data-urls/node_modules/tr46": { | ||
| 8069 | + "version": "5.1.1", | ||
| 8070 | + "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.1.1.tgz", | ||
| 8071 | + "integrity": "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==", | ||
| 8072 | + "dev": true, | ||
| 8073 | + "license": "MIT", | ||
| 8074 | + "dependencies": { | ||
| 8075 | + "punycode": "^2.3.1" | ||
| 8076 | + }, | ||
| 8077 | + "engines": { | ||
| 8078 | + "node": ">=18" | ||
| 8079 | + } | ||
| 8080 | + }, | ||
| 8081 | + "node_modules/data-urls/node_modules/webidl-conversions": { | ||
| 8082 | + "version": "7.0.0", | ||
| 8083 | + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", | ||
| 8084 | + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", | ||
| 8085 | + "dev": true, | ||
| 8086 | + "license": "BSD-2-Clause", | ||
| 8087 | + "engines": { | ||
| 8088 | + "node": ">=12" | ||
| 8089 | + } | ||
| 8090 | + }, | ||
| 8091 | + "node_modules/data-urls/node_modules/whatwg-mimetype": { | ||
| 8092 | + "version": "4.0.0", | ||
| 8093 | + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", | ||
| 8094 | + "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", | ||
| 8095 | + "dev": true, | ||
| 8096 | + "license": "MIT", | ||
| 8097 | + "engines": { | ||
| 8098 | + "node": ">=18" | ||
| 8099 | + } | ||
| 8100 | + }, | ||
| 8101 | + "node_modules/data-urls/node_modules/whatwg-url": { | ||
| 8102 | + "version": "14.2.0", | ||
| 8103 | + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz", | ||
| 8104 | + "integrity": "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==", | ||
| 8105 | + "dev": true, | ||
| 8106 | + "license": "MIT", | ||
| 8107 | + "dependencies": { | ||
| 8108 | + "tr46": "^5.1.0", | ||
| 8109 | + "webidl-conversions": "^7.0.0" | ||
| 8110 | + }, | ||
| 8111 | + "engines": { | ||
| 8112 | + "node": ">=18" | ||
| 8113 | + } | ||
| 8114 | + }, | ||
| 7548 | "node_modules/db0": { | 8115 | "node_modules/db0": { |
| 7549 | "version": "0.3.2", | 8116 | "version": "0.3.2", |
| 7550 | "resolved": "https://registry.npmjs.org/db0/-/db0-0.3.2.tgz", | 8117 | "resolved": "https://registry.npmjs.org/db0/-/db0-0.3.2.tgz", |
| @@ -7605,6 +8172,13 @@ | @@ -7605,6 +8172,13 @@ | ||
| 7605 | "callsite": "^1.0.0" | 8172 | "callsite": "^1.0.0" |
| 7606 | } | 8173 | } |
| 7607 | }, | 8174 | }, |
| 8175 | + "node_modules/decimal.js": { | ||
| 8176 | + "version": "10.5.0", | ||
| 8177 | + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.5.0.tgz", | ||
| 8178 | + "integrity": "sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==", | ||
| 8179 | + "dev": true, | ||
| 8180 | + "license": "MIT" | ||
| 8181 | + }, | ||
| 7608 | "node_modules/decompress-response": { | 8182 | "node_modules/decompress-response": { |
| 7609 | "version": "6.0.0", | 8183 | "version": "6.0.0", |
| 7610 | "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", | 8184 | "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", |
| @@ -7621,6 +8195,16 @@ | @@ -7621,6 +8195,16 @@ | ||
| 7621 | "url": "https://github.com/sponsors/sindresorhus" | 8195 | "url": "https://github.com/sponsors/sindresorhus" |
| 7622 | } | 8196 | } |
| 7623 | }, | 8197 | }, |
| 8198 | + "node_modules/deep-eql": { | ||
| 8199 | + "version": "5.0.2", | ||
| 8200 | + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", | ||
| 8201 | + "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", | ||
| 8202 | + "dev": true, | ||
| 8203 | + "license": "MIT", | ||
| 8204 | + "engines": { | ||
| 8205 | + "node": ">=6" | ||
| 8206 | + } | ||
| 8207 | + }, | ||
| 7624 | "node_modules/deep-equal": { | 8208 | "node_modules/deep-equal": { |
| 7625 | "version": "1.0.1", | 8209 | "version": "1.0.1", |
| 7626 | "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", | 8210 | "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", |
| @@ -8028,6 +8612,41 @@ | @@ -8028,6 +8612,41 @@ | ||
| 8028 | "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", | 8612 | "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", |
| 8029 | "license": "MIT" | 8613 | "license": "MIT" |
| 8030 | }, | 8614 | }, |
| 8615 | + "node_modules/editorconfig": { | ||
| 8616 | + "version": "1.0.4", | ||
| 8617 | + "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-1.0.4.tgz", | ||
| 8618 | + "integrity": "sha512-L9Qe08KWTlqYMVvMcTIvMAdl1cDUubzRNYL+WfA4bLDMHe4nemKkpmYzkznE1FwLKu0EEmy6obgQKzMJrg4x9Q==", | ||
| 8619 | + "dev": true, | ||
| 8620 | + "license": "MIT", | ||
| 8621 | + "dependencies": { | ||
| 8622 | + "@one-ini/wasm": "0.1.1", | ||
| 8623 | + "commander": "^10.0.0", | ||
| 8624 | + "minimatch": "9.0.1", | ||
| 8625 | + "semver": "^7.5.3" | ||
| 8626 | + }, | ||
| 8627 | + "bin": { | ||
| 8628 | + "editorconfig": "bin/editorconfig" | ||
| 8629 | + }, | ||
| 8630 | + "engines": { | ||
| 8631 | + "node": ">=14" | ||
| 8632 | + } | ||
| 8633 | + }, | ||
| 8634 | + "node_modules/editorconfig/node_modules/minimatch": { | ||
| 8635 | + "version": "9.0.1", | ||
| 8636 | + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", | ||
| 8637 | + "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", | ||
| 8638 | + "dev": true, | ||
| 8639 | + "license": "ISC", | ||
| 8640 | + "dependencies": { | ||
| 8641 | + "brace-expansion": "^2.0.1" | ||
| 8642 | + }, | ||
| 8643 | + "engines": { | ||
| 8644 | + "node": ">=16 || 14 >=14.17" | ||
| 8645 | + }, | ||
| 8646 | + "funding": { | ||
| 8647 | + "url": "https://github.com/sponsors/isaacs" | ||
| 8648 | + } | ||
| 8649 | + }, | ||
| 8031 | "node_modules/ee-first": { | 8650 | "node_modules/ee-first": { |
| 8032 | "version": "1.1.1", | 8651 | "version": "1.1.1", |
| 8033 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", | 8652 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", |
| @@ -9020,6 +9639,16 @@ | @@ -9020,6 +9639,16 @@ | ||
| 9020 | "node": ">=6" | 9639 | "node": ">=6" |
| 9021 | } | 9640 | } |
| 9022 | }, | 9641 | }, |
| 9642 | + "node_modules/expect-type": { | ||
| 9643 | + "version": "1.2.1", | ||
| 9644 | + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.2.1.tgz", | ||
| 9645 | + "integrity": "sha512-/kP8CAwxzLVEeFrMm4kMmy4CCDlpipyA7MYLVrdJIkV0fYF0UaigQHRsxHiuY/GEea+bh4KSv3TIlgr+2UL6bw==", | ||
| 9646 | + "dev": true, | ||
| 9647 | + "license": "Apache-2.0", | ||
| 9648 | + "engines": { | ||
| 9649 | + "node": ">=12.0.0" | ||
| 9650 | + } | ||
| 9651 | + }, | ||
| 9023 | "node_modules/exsolve": { | 9652 | "node_modules/exsolve": { |
| 9024 | "version": "1.0.5", | 9653 | "version": "1.0.5", |
| 9025 | "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.0.5.tgz", | 9654 | "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.0.5.tgz", |
| @@ -9083,6 +9712,7 @@ | @@ -9083,6 +9712,7 @@ | ||
| 9083 | "version": "6.0.0", | 9712 | "version": "6.0.0", |
| 9084 | "resolved": "https://registry.npmjs.org/fake-indexeddb/-/fake-indexeddb-6.0.0.tgz", | 9713 | "resolved": "https://registry.npmjs.org/fake-indexeddb/-/fake-indexeddb-6.0.0.tgz", |
| 9085 | "integrity": "sha512-YEboHE5VfopUclOck7LncgIqskAqnv4q0EWbYCaxKKjAvO93c+TJIaBuGy8CBFdbg9nKdpN3AuPRwVBJ4k7NrQ==", | 9714 | "integrity": "sha512-YEboHE5VfopUclOck7LncgIqskAqnv4q0EWbYCaxKKjAvO93c+TJIaBuGy8CBFdbg9nKdpN3AuPRwVBJ4k7NrQ==", |
| 9715 | + "dev": true, | ||
| 9086 | "license": "Apache-2.0", | 9716 | "license": "Apache-2.0", |
| 9087 | "engines": { | 9717 | "engines": { |
| 9088 | "node": ">=18" | 9718 | "node": ">=18" |
| @@ -9807,6 +10437,30 @@ | @@ -9807,6 +10437,30 @@ | ||
| 9807 | "integrity": "sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg==", | 10437 | "integrity": "sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg==", |
| 9808 | "license": "MIT" | 10438 | "license": "MIT" |
| 9809 | }, | 10439 | }, |
| 10440 | + "node_modules/happy-dom": { | ||
| 10441 | + "version": "17.4.4", | ||
| 10442 | + "resolved": "https://registry.npmjs.org/happy-dom/-/happy-dom-17.4.4.tgz", | ||
| 10443 | + "integrity": "sha512-/Pb0ctk3HTZ5xEL3BZ0hK1AqDSAUuRQitOmROPHhfUYEWpmTImwfD8vFDGADmMAX0JYgbcgxWoLFKtsWhcpuVA==", | ||
| 10444 | + "dev": true, | ||
| 10445 | + "license": "MIT", | ||
| 10446 | + "dependencies": { | ||
| 10447 | + "webidl-conversions": "^7.0.0", | ||
| 10448 | + "whatwg-mimetype": "^3.0.0" | ||
| 10449 | + }, | ||
| 10450 | + "engines": { | ||
| 10451 | + "node": ">=18.0.0" | ||
| 10452 | + } | ||
| 10453 | + }, | ||
| 10454 | + "node_modules/happy-dom/node_modules/webidl-conversions": { | ||
| 10455 | + "version": "7.0.0", | ||
| 10456 | + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", | ||
| 10457 | + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", | ||
| 10458 | + "dev": true, | ||
| 10459 | + "license": "BSD-2-Clause", | ||
| 10460 | + "engines": { | ||
| 10461 | + "node": ">=12" | ||
| 10462 | + } | ||
| 10463 | + }, | ||
| 9810 | "node_modules/has-flag": { | 10464 | "node_modules/has-flag": { |
| 9811 | "version": "4.0.0", | 10465 | "version": "4.0.0", |
| 9812 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", | 10466 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", |
| @@ -9885,6 +10539,19 @@ | @@ -9885,6 +10539,19 @@ | ||
| 9885 | "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", | 10539 | "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", |
| 9886 | "license": "ISC" | 10540 | "license": "ISC" |
| 9887 | }, | 10541 | }, |
| 10542 | + "node_modules/html-encoding-sniffer": { | ||
| 10543 | + "version": "4.0.0", | ||
| 10544 | + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", | ||
| 10545 | + "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==", | ||
| 10546 | + "dev": true, | ||
| 10547 | + "license": "MIT", | ||
| 10548 | + "dependencies": { | ||
| 10549 | + "whatwg-encoding": "^3.1.1" | ||
| 10550 | + }, | ||
| 10551 | + "engines": { | ||
| 10552 | + "node": ">=18" | ||
| 10553 | + } | ||
| 10554 | + }, | ||
| 9888 | "node_modules/http-assert": { | 10555 | "node_modules/http-assert": { |
| 9889 | "version": "1.5.0", | 10556 | "version": "1.5.0", |
| 9890 | "resolved": "https://registry.npmjs.org/http-assert/-/http-assert-1.5.0.tgz", | 10557 | "resolved": "https://registry.npmjs.org/http-assert/-/http-assert-1.5.0.tgz", |
| @@ -9948,6 +10615,20 @@ | @@ -9948,6 +10615,20 @@ | ||
| 9948 | "node": ">= 0.8" | 10615 | "node": ">= 0.8" |
| 9949 | } | 10616 | } |
| 9950 | }, | 10617 | }, |
| 10618 | + "node_modules/http-proxy-agent": { | ||
| 10619 | + "version": "7.0.2", | ||
| 10620 | + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", | ||
| 10621 | + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", | ||
| 10622 | + "dev": true, | ||
| 10623 | + "license": "MIT", | ||
| 10624 | + "dependencies": { | ||
| 10625 | + "agent-base": "^7.1.0", | ||
| 10626 | + "debug": "^4.3.4" | ||
| 10627 | + }, | ||
| 10628 | + "engines": { | ||
| 10629 | + "node": ">= 14" | ||
| 10630 | + } | ||
| 10631 | + }, | ||
| 9951 | "node_modules/http-shutdown": { | 10632 | "node_modules/http-shutdown": { |
| 9952 | "version": "1.2.2", | 10633 | "version": "1.2.2", |
| 9953 | "resolved": "https://registry.npmjs.org/http-shutdown/-/http-shutdown-1.2.2.tgz", | 10634 | "resolved": "https://registry.npmjs.org/http-shutdown/-/http-shutdown-1.2.2.tgz", |
| @@ -9986,6 +10667,19 @@ | @@ -9986,6 +10667,19 @@ | ||
| 9986 | "node": ">=16.17.0" | 10667 | "node": ">=16.17.0" |
| 9987 | } | 10668 | } |
| 9988 | }, | 10669 | }, |
| 10670 | + "node_modules/iconv-lite": { | ||
| 10671 | + "version": "0.6.3", | ||
| 10672 | + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", | ||
| 10673 | + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", | ||
| 10674 | + "dev": true, | ||
| 10675 | + "license": "MIT", | ||
| 10676 | + "dependencies": { | ||
| 10677 | + "safer-buffer": ">= 2.1.2 < 3.0.0" | ||
| 10678 | + }, | ||
| 10679 | + "engines": { | ||
| 10680 | + "node": ">=0.10.0" | ||
| 10681 | + } | ||
| 10682 | + }, | ||
| 9989 | "node_modules/ieee754": { | 10683 | "node_modules/ieee754": { |
| 9990 | "version": "1.2.1", | 10684 | "version": "1.2.1", |
| 9991 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", | 10685 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", |
| @@ -10823,6 +11517,13 @@ | @@ -10823,6 +11517,13 @@ | ||
| 10823 | "node": ">=8" | 11517 | "node": ">=8" |
| 10824 | } | 11518 | } |
| 10825 | }, | 11519 | }, |
| 11520 | + "node_modules/is-potential-custom-element-name": { | ||
| 11521 | + "version": "1.0.1", | ||
| 11522 | + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", | ||
| 11523 | + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", | ||
| 11524 | + "dev": true, | ||
| 11525 | + "license": "MIT" | ||
| 11526 | + }, | ||
| 10826 | "node_modules/is-reference": { | 11527 | "node_modules/is-reference": { |
| 10827 | "version": "1.2.1", | 11528 | "version": "1.2.1", |
| 10828 | "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", | 11529 | "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", |
| @@ -10980,31 +11681,207 @@ | @@ -10980,31 +11681,207 @@ | ||
| 10980 | "jiti": "bin/jiti.js" | 11681 | "jiti": "bin/jiti.js" |
| 10981 | } | 11682 | } |
| 10982 | }, | 11683 | }, |
| 10983 | - "node_modules/js-tokens": { | 11684 | + "node_modules/js-beautify": { |
| 11685 | + "version": "1.15.4", | ||
| 11686 | + "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.15.4.tgz", | ||
| 11687 | + "integrity": "sha512-9/KXeZUKKJwqCXUdBxFJ3vPh467OCckSBmYDwSK/EtV090K+iMJ7zx2S3HLVDIWFQdqMIsZWbnaGiba18aWhaA==", | ||
| 11688 | + "dev": true, | ||
| 11689 | + "license": "MIT", | ||
| 11690 | + "dependencies": { | ||
| 11691 | + "config-chain": "^1.1.13", | ||
| 11692 | + "editorconfig": "^1.0.4", | ||
| 11693 | + "glob": "^10.4.2", | ||
| 11694 | + "js-cookie": "^3.0.5", | ||
| 11695 | + "nopt": "^7.2.1" | ||
| 11696 | + }, | ||
| 11697 | + "bin": { | ||
| 11698 | + "css-beautify": "js/bin/css-beautify.js", | ||
| 11699 | + "html-beautify": "js/bin/html-beautify.js", | ||
| 11700 | + "js-beautify": "js/bin/js-beautify.js" | ||
| 11701 | + }, | ||
| 11702 | + "engines": { | ||
| 11703 | + "node": ">=14" | ||
| 11704 | + } | ||
| 11705 | + }, | ||
| 11706 | + "node_modules/js-beautify/node_modules/abbrev": { | ||
| 11707 | + "version": "2.0.0", | ||
| 11708 | + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", | ||
| 11709 | + "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", | ||
| 11710 | + "dev": true, | ||
| 11711 | + "license": "ISC", | ||
| 11712 | + "engines": { | ||
| 11713 | + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" | ||
| 11714 | + } | ||
| 11715 | + }, | ||
| 11716 | + "node_modules/js-beautify/node_modules/glob": { | ||
| 11717 | + "version": "10.4.5", | ||
| 11718 | + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", | ||
| 11719 | + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", | ||
| 11720 | + "dev": true, | ||
| 11721 | + "license": "ISC", | ||
| 11722 | + "dependencies": { | ||
| 11723 | + "foreground-child": "^3.1.0", | ||
| 11724 | + "jackspeak": "^3.1.2", | ||
| 11725 | + "minimatch": "^9.0.4", | ||
| 11726 | + "minipass": "^7.1.2", | ||
| 11727 | + "package-json-from-dist": "^1.0.0", | ||
| 11728 | + "path-scurry": "^1.11.1" | ||
| 11729 | + }, | ||
| 11730 | + "bin": { | ||
| 11731 | + "glob": "dist/esm/bin.mjs" | ||
| 11732 | + }, | ||
| 11733 | + "funding": { | ||
| 11734 | + "url": "https://github.com/sponsors/isaacs" | ||
| 11735 | + } | ||
| 11736 | + }, | ||
| 11737 | + "node_modules/js-beautify/node_modules/nopt": { | ||
| 11738 | + "version": "7.2.1", | ||
| 11739 | + "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz", | ||
| 11740 | + "integrity": "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==", | ||
| 11741 | + "dev": true, | ||
| 11742 | + "license": "ISC", | ||
| 11743 | + "dependencies": { | ||
| 11744 | + "abbrev": "^2.0.0" | ||
| 11745 | + }, | ||
| 11746 | + "bin": { | ||
| 11747 | + "nopt": "bin/nopt.js" | ||
| 11748 | + }, | ||
| 11749 | + "engines": { | ||
| 11750 | + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" | ||
| 11751 | + } | ||
| 11752 | + }, | ||
| 11753 | + "node_modules/js-cookie": { | ||
| 11754 | + "version": "3.0.5", | ||
| 11755 | + "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.5.tgz", | ||
| 11756 | + "integrity": "sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==", | ||
| 11757 | + "dev": true, | ||
| 11758 | + "license": "MIT", | ||
| 11759 | + "engines": { | ||
| 11760 | + "node": ">=14" | ||
| 11761 | + } | ||
| 11762 | + }, | ||
| 11763 | + "node_modules/js-tokens": { | ||
| 11764 | + "version": "4.0.0", | ||
| 11765 | + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", | ||
| 11766 | + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", | ||
| 11767 | + "license": "MIT" | ||
| 11768 | + }, | ||
| 11769 | + "node_modules/js-yaml": { | ||
| 11770 | + "version": "4.1.0", | ||
| 11771 | + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", | ||
| 11772 | + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", | ||
| 11773 | + "license": "MIT", | ||
| 11774 | + "dependencies": { | ||
| 11775 | + "argparse": "^2.0.1" | ||
| 11776 | + }, | ||
| 11777 | + "bin": { | ||
| 11778 | + "js-yaml": "bin/js-yaml.js" | ||
| 11779 | + } | ||
| 11780 | + }, | ||
| 11781 | + "node_modules/jsdoc-type-pratt-parser": { | ||
| 11782 | + "version": "4.1.0", | ||
| 11783 | + "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.1.0.tgz", | ||
| 11784 | + "integrity": "sha512-Hicd6JK5Njt2QB6XYFS7ok9e37O8AYk3jTcppG4YVQnYjOemymvTcmc7OWsmq/Qqj5TdRFO5/x/tIPmBeRtGHg==", | ||
| 11785 | + "license": "MIT", | ||
| 11786 | + "engines": { | ||
| 11787 | + "node": ">=12.0.0" | ||
| 11788 | + } | ||
| 11789 | + }, | ||
| 11790 | + "node_modules/jsdom": { | ||
| 11791 | + "version": "26.1.0", | ||
| 11792 | + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-26.1.0.tgz", | ||
| 11793 | + "integrity": "sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==", | ||
| 11794 | + "dev": true, | ||
| 11795 | + "license": "MIT", | ||
| 11796 | + "dependencies": { | ||
| 11797 | + "cssstyle": "^4.2.1", | ||
| 11798 | + "data-urls": "^5.0.0", | ||
| 11799 | + "decimal.js": "^10.5.0", | ||
| 11800 | + "html-encoding-sniffer": "^4.0.0", | ||
| 11801 | + "http-proxy-agent": "^7.0.2", | ||
| 11802 | + "https-proxy-agent": "^7.0.6", | ||
| 11803 | + "is-potential-custom-element-name": "^1.0.1", | ||
| 11804 | + "nwsapi": "^2.2.16", | ||
| 11805 | + "parse5": "^7.2.1", | ||
| 11806 | + "rrweb-cssom": "^0.8.0", | ||
| 11807 | + "saxes": "^6.0.0", | ||
| 11808 | + "symbol-tree": "^3.2.4", | ||
| 11809 | + "tough-cookie": "^5.1.1", | ||
| 11810 | + "w3c-xmlserializer": "^5.0.0", | ||
| 11811 | + "webidl-conversions": "^7.0.0", | ||
| 11812 | + "whatwg-encoding": "^3.1.1", | ||
| 11813 | + "whatwg-mimetype": "^4.0.0", | ||
| 11814 | + "whatwg-url": "^14.1.1", | ||
| 11815 | + "ws": "^8.18.0", | ||
| 11816 | + "xml-name-validator": "^5.0.0" | ||
| 11817 | + }, | ||
| 11818 | + "engines": { | ||
| 11819 | + "node": ">=18" | ||
| 11820 | + }, | ||
| 11821 | + "peerDependencies": { | ||
| 11822 | + "canvas": "^3.0.0" | ||
| 11823 | + }, | ||
| 11824 | + "peerDependenciesMeta": { | ||
| 11825 | + "canvas": { | ||
| 11826 | + "optional": true | ||
| 11827 | + } | ||
| 11828 | + } | ||
| 11829 | + }, | ||
| 11830 | + "node_modules/jsdom/node_modules/tr46": { | ||
| 11831 | + "version": "5.1.1", | ||
| 11832 | + "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.1.1.tgz", | ||
| 11833 | + "integrity": "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==", | ||
| 11834 | + "dev": true, | ||
| 11835 | + "license": "MIT", | ||
| 11836 | + "dependencies": { | ||
| 11837 | + "punycode": "^2.3.1" | ||
| 11838 | + }, | ||
| 11839 | + "engines": { | ||
| 11840 | + "node": ">=18" | ||
| 11841 | + } | ||
| 11842 | + }, | ||
| 11843 | + "node_modules/jsdom/node_modules/webidl-conversions": { | ||
| 11844 | + "version": "7.0.0", | ||
| 11845 | + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", | ||
| 11846 | + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", | ||
| 11847 | + "dev": true, | ||
| 11848 | + "license": "BSD-2-Clause", | ||
| 11849 | + "engines": { | ||
| 11850 | + "node": ">=12" | ||
| 11851 | + } | ||
| 11852 | + }, | ||
| 11853 | + "node_modules/jsdom/node_modules/whatwg-mimetype": { | ||
| 10984 | "version": "4.0.0", | 11854 | "version": "4.0.0", |
| 10985 | - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", | 11855 | + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", |
| 10986 | - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", | 11856 | + "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", |
| 10987 | - "license": "MIT" | 11857 | + "dev": true, |
| 11858 | + "license": "MIT", | ||
| 11859 | + "engines": { | ||
| 11860 | + "node": ">=18" | ||
| 11861 | + } | ||
| 10988 | }, | 11862 | }, |
| 10989 | - "node_modules/js-yaml": { | 11863 | + "node_modules/jsdom/node_modules/whatwg-url": { |
| 10990 | - "version": "4.1.0", | 11864 | + "version": "14.2.0", |
| 10991 | - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", | 11865 | + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz", |
| 10992 | - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", | 11866 | + "integrity": "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==", |
| 11867 | + "dev": true, | ||
| 10993 | "license": "MIT", | 11868 | "license": "MIT", |
| 10994 | "dependencies": { | 11869 | "dependencies": { |
| 10995 | - "argparse": "^2.0.1" | 11870 | + "tr46": "^5.1.0", |
| 11871 | + "webidl-conversions": "^7.0.0" | ||
| 10996 | }, | 11872 | }, |
| 10997 | - "bin": { | 11873 | + "engines": { |
| 10998 | - "js-yaml": "bin/js-yaml.js" | 11874 | + "node": ">=18" |
| 10999 | } | 11875 | } |
| 11000 | }, | 11876 | }, |
| 11001 | - "node_modules/jsdoc-type-pratt-parser": { | 11877 | + "node_modules/jsdom/node_modules/xml-name-validator": { |
| 11002 | - "version": "4.1.0", | 11878 | + "version": "5.0.0", |
| 11003 | - "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.1.0.tgz", | 11879 | + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", |
| 11004 | - "integrity": "sha512-Hicd6JK5Njt2QB6XYFS7ok9e37O8AYk3jTcppG4YVQnYjOemymvTcmc7OWsmq/Qqj5TdRFO5/x/tIPmBeRtGHg==", | 11880 | + "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", |
| 11005 | - "license": "MIT", | 11881 | + "dev": true, |
| 11882 | + "license": "Apache-2.0", | ||
| 11006 | "engines": { | 11883 | "engines": { |
| 11007 | - "node": ">=12.0.0" | 11884 | + "node": ">=18" |
| 11008 | } | 11885 | } |
| 11009 | }, | 11886 | }, |
| 11010 | "node_modules/jsesc": { | 11887 | "node_modules/jsesc": { |
| @@ -11578,6 +12455,13 @@ | @@ -11578,6 +12455,13 @@ | ||
| 11578 | "node": ">= 12.0.0" | 12455 | "node": ">= 12.0.0" |
| 11579 | } | 12456 | } |
| 11580 | }, | 12457 | }, |
| 12458 | + "node_modules/loupe": { | ||
| 12459 | + "version": "3.1.3", | ||
| 12460 | + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.3.tgz", | ||
| 12461 | + "integrity": "sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==", | ||
| 12462 | + "dev": true, | ||
| 12463 | + "license": "MIT" | ||
| 12464 | + }, | ||
| 11581 | "node_modules/lru-cache": { | 12465 | "node_modules/lru-cache": { |
| 11582 | "version": "5.1.1", | 12466 | "version": "5.1.1", |
| 11583 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", | 12467 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", |
| @@ -12509,6 +13393,13 @@ | @@ -12509,6 +13393,13 @@ | ||
| 12509 | } | 13393 | } |
| 12510 | } | 13394 | } |
| 12511 | }, | 13395 | }, |
| 13396 | + "node_modules/nwsapi": { | ||
| 13397 | + "version": "2.2.20", | ||
| 13398 | + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.20.tgz", | ||
| 13399 | + "integrity": "sha512-/ieB+mDe4MrrKMT8z+mQL8klXydZWGR5Dowt4RAGKbJ3kIGEx3X4ljUo+6V73IXtUPWgfOlU5B9MlGxFO5T+cA==", | ||
| 13400 | + "dev": true, | ||
| 13401 | + "license": "MIT" | ||
| 13402 | + }, | ||
| 12512 | "node_modules/nypm": { | 13403 | "node_modules/nypm": { |
| 12513 | "version": "0.6.0", | 13404 | "version": "0.6.0", |
| 12514 | "resolved": "https://registry.npmjs.org/nypm/-/nypm-0.6.0.tgz", | 13405 | "resolved": "https://registry.npmjs.org/nypm/-/nypm-0.6.0.tgz", |
| @@ -12912,6 +13803,32 @@ | @@ -12912,6 +13803,32 @@ | ||
| 12912 | "node": ">=14.13.0" | 13803 | "node": ">=14.13.0" |
| 12913 | } | 13804 | } |
| 12914 | }, | 13805 | }, |
| 13806 | + "node_modules/parse5": { | ||
| 13807 | + "version": "7.3.0", | ||
| 13808 | + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", | ||
| 13809 | + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", | ||
| 13810 | + "dev": true, | ||
| 13811 | + "license": "MIT", | ||
| 13812 | + "dependencies": { | ||
| 13813 | + "entities": "^6.0.0" | ||
| 13814 | + }, | ||
| 13815 | + "funding": { | ||
| 13816 | + "url": "https://github.com/inikulin/parse5?sponsor=1" | ||
| 13817 | + } | ||
| 13818 | + }, | ||
| 13819 | + "node_modules/parse5/node_modules/entities": { | ||
| 13820 | + "version": "6.0.0", | ||
| 13821 | + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.0.tgz", | ||
| 13822 | + "integrity": "sha512-aKstq2TDOndCn4diEyp9Uq/Flu2i1GlLkc6XIDQSDMuaFE3OPW5OphLCyQ5SpSJZTb4reN+kTcYru5yIfXoRPw==", | ||
| 13823 | + "dev": true, | ||
| 13824 | + "license": "BSD-2-Clause", | ||
| 13825 | + "engines": { | ||
| 13826 | + "node": ">=0.12" | ||
| 13827 | + }, | ||
| 13828 | + "funding": { | ||
| 13829 | + "url": "https://github.com/fb55/entities?sponsor=1" | ||
| 13830 | + } | ||
| 13831 | + }, | ||
| 12915 | "node_modules/parseurl": { | 13832 | "node_modules/parseurl": { |
| 12916 | "version": "1.3.3", | 13833 | "version": "1.3.3", |
| 12917 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", | 13834 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", |
| @@ -13000,6 +13917,16 @@ | @@ -13000,6 +13917,16 @@ | ||
| 13000 | "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", | 13917 | "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", |
| 13001 | "license": "MIT" | 13918 | "license": "MIT" |
| 13002 | }, | 13919 | }, |
| 13920 | + "node_modules/pathval": { | ||
| 13921 | + "version": "2.0.0", | ||
| 13922 | + "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz", | ||
| 13923 | + "integrity": "sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==", | ||
| 13924 | + "dev": true, | ||
| 13925 | + "license": "MIT", | ||
| 13926 | + "engines": { | ||
| 13927 | + "node": ">= 14.16" | ||
| 13928 | + } | ||
| 13929 | + }, | ||
| 13003 | "node_modules/pend": { | 13930 | "node_modules/pend": { |
| 13004 | "version": "1.2.0", | 13931 | "version": "1.2.0", |
| 13005 | "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", | 13932 | "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", |
| @@ -13121,6 +14048,19 @@ | @@ -13121,6 +14048,19 @@ | ||
| 13121 | "pathe": "^2.0.3" | 14048 | "pathe": "^2.0.3" |
| 13122 | } | 14049 | } |
| 13123 | }, | 14050 | }, |
| 14051 | + "node_modules/playwright-core": { | ||
| 14052 | + "version": "1.52.0", | ||
| 14053 | + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.52.0.tgz", | ||
| 14054 | + "integrity": "sha512-l2osTgLXSMeuLZOML9qYODUQoPPnUsKsb5/P6LJ2e6uPKXUdPK5WYhN4z03G+YNbWmGDY4YENauNu4ZKczreHg==", | ||
| 14055 | + "dev": true, | ||
| 14056 | + "license": "Apache-2.0", | ||
| 14057 | + "bin": { | ||
| 14058 | + "playwright-core": "cli.js" | ||
| 14059 | + }, | ||
| 14060 | + "engines": { | ||
| 14061 | + "node": ">=18" | ||
| 14062 | + } | ||
| 14063 | + }, | ||
| 13124 | "node_modules/pluralize": { | 14064 | "node_modules/pluralize": { |
| 13125 | "version": "8.0.0", | 14065 | "version": "8.0.0", |
| 13126 | "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", | 14066 | "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", |
| @@ -14037,6 +14977,13 @@ | @@ -14037,6 +14977,13 @@ | ||
| 14037 | "node": ">= 6" | 14977 | "node": ">= 6" |
| 14038 | } | 14978 | } |
| 14039 | }, | 14979 | }, |
| 14980 | + "node_modules/proto-list": { | ||
| 14981 | + "version": "1.2.4", | ||
| 14982 | + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", | ||
| 14983 | + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", | ||
| 14984 | + "dev": true, | ||
| 14985 | + "license": "ISC" | ||
| 14986 | + }, | ||
| 14040 | "node_modules/protocols": { | 14987 | "node_modules/protocols": { |
| 14041 | "version": "2.0.2", | 14988 | "version": "2.0.2", |
| 14042 | "resolved": "https://registry.npmjs.org/protocols/-/protocols-2.0.2.tgz", | 14989 | "resolved": "https://registry.npmjs.org/protocols/-/protocols-2.0.2.tgz", |
| @@ -14690,6 +15637,13 @@ | @@ -14690,6 +15637,13 @@ | ||
| 14690 | } | 15637 | } |
| 14691 | } | 15638 | } |
| 14692 | }, | 15639 | }, |
| 15640 | + "node_modules/rrweb-cssom": { | ||
| 15641 | + "version": "0.8.0", | ||
| 15642 | + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz", | ||
| 15643 | + "integrity": "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==", | ||
| 15644 | + "dev": true, | ||
| 15645 | + "license": "MIT" | ||
| 15646 | + }, | ||
| 14693 | "node_modules/run-applescript": { | 15647 | "node_modules/run-applescript": { |
| 14694 | "version": "7.0.0", | 15648 | "version": "7.0.0", |
| 14695 | "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz", | 15649 | "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz", |
| @@ -14771,6 +15725,26 @@ | @@ -14771,6 +15725,26 @@ | ||
| 14771 | "node": ">=10" | 15725 | "node": ">=10" |
| 14772 | } | 15726 | } |
| 14773 | }, | 15727 | }, |
| 15728 | + "node_modules/safer-buffer": { | ||
| 15729 | + "version": "2.1.2", | ||
| 15730 | + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", | ||
| 15731 | + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", | ||
| 15732 | + "dev": true, | ||
| 15733 | + "license": "MIT" | ||
| 15734 | + }, | ||
| 15735 | + "node_modules/saxes": { | ||
| 15736 | + "version": "6.0.0", | ||
| 15737 | + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", | ||
| 15738 | + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", | ||
| 15739 | + "dev": true, | ||
| 15740 | + "license": "ISC", | ||
| 15741 | + "dependencies": { | ||
| 15742 | + "xmlchars": "^2.2.0" | ||
| 15743 | + }, | ||
| 15744 | + "engines": { | ||
| 15745 | + "node": ">=v12.22.7" | ||
| 15746 | + } | ||
| 15747 | + }, | ||
| 14774 | "node_modules/scslre": { | 15748 | "node_modules/scslre": { |
| 14775 | "version": "0.3.0", | 15749 | "version": "0.3.0", |
| 14776 | "resolved": "https://registry.npmjs.org/scslre/-/scslre-0.3.0.tgz", | 15750 | "resolved": "https://registry.npmjs.org/scslre/-/scslre-0.3.0.tgz", |
| @@ -15043,6 +16017,13 @@ | @@ -15043,6 +16017,13 @@ | ||
| 15043 | "url": "https://github.com/sponsors/ljharb" | 16017 | "url": "https://github.com/sponsors/ljharb" |
| 15044 | } | 16018 | } |
| 15045 | }, | 16019 | }, |
| 16020 | + "node_modules/siginfo": { | ||
| 16021 | + "version": "2.0.0", | ||
| 16022 | + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", | ||
| 16023 | + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", | ||
| 16024 | + "dev": true, | ||
| 16025 | + "license": "ISC" | ||
| 16026 | + }, | ||
| 15046 | "node_modules/signal-exit": { | 16027 | "node_modules/signal-exit": { |
| 15047 | "version": "4.1.0", | 16028 | "version": "4.1.0", |
| 15048 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", | 16029 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", |
| @@ -15263,6 +16244,13 @@ | @@ -15263,6 +16244,13 @@ | ||
| 15263 | "node": "*" | 16244 | "node": "*" |
| 15264 | } | 16245 | } |
| 15265 | }, | 16246 | }, |
| 16247 | + "node_modules/stackback": { | ||
| 16248 | + "version": "0.0.2", | ||
| 16249 | + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", | ||
| 16250 | + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", | ||
| 16251 | + "dev": true, | ||
| 16252 | + "license": "MIT" | ||
| 16253 | + }, | ||
| 15266 | "node_modules/standard-as-callback": { | 16254 | "node_modules/standard-as-callback": { |
| 15267 | "version": "2.1.0", | 16255 | "version": "2.1.0", |
| 15268 | "resolved": "https://registry.npmjs.org/standard-as-callback/-/standard-as-callback-2.1.0.tgz", | 16256 | "resolved": "https://registry.npmjs.org/standard-as-callback/-/standard-as-callback-2.1.0.tgz", |
| @@ -15627,6 +16615,13 @@ | @@ -15627,6 +16615,13 @@ | ||
| 15627 | "node": ">= 10" | 16615 | "node": ">= 10" |
| 15628 | } | 16616 | } |
| 15629 | }, | 16617 | }, |
| 16618 | + "node_modules/symbol-tree": { | ||
| 16619 | + "version": "3.2.4", | ||
| 16620 | + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", | ||
| 16621 | + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", | ||
| 16622 | + "dev": true, | ||
| 16623 | + "license": "MIT" | ||
| 16624 | + }, | ||
| 15630 | "node_modules/synckit": { | 16625 | "node_modules/synckit": { |
| 15631 | "version": "0.9.2", | 16626 | "version": "0.9.2", |
| 15632 | "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.2.tgz", | 16627 | "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.2.tgz", |
| @@ -16033,6 +17028,13 @@ | @@ -16033,6 +17028,13 @@ | ||
| 16033 | "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", | 17028 | "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", |
| 16034 | "license": "MIT" | 17029 | "license": "MIT" |
| 16035 | }, | 17030 | }, |
| 17031 | + "node_modules/tinybench": { | ||
| 17032 | + "version": "2.9.0", | ||
| 17033 | + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", | ||
| 17034 | + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", | ||
| 17035 | + "dev": true, | ||
| 17036 | + "license": "MIT" | ||
| 17037 | + }, | ||
| 16036 | "node_modules/tinyexec": { | 17038 | "node_modules/tinyexec": { |
| 16037 | "version": "1.0.1", | 17039 | "version": "1.0.1", |
| 16038 | "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.1.tgz", | 17040 | "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.1.tgz", |
| @@ -16055,6 +17057,62 @@ | @@ -16055,6 +17057,62 @@ | ||
| 16055 | "url": "https://github.com/sponsors/SuperchupuDev" | 17057 | "url": "https://github.com/sponsors/SuperchupuDev" |
| 16056 | } | 17058 | } |
| 16057 | }, | 17059 | }, |
| 17060 | + "node_modules/tinymce": { | ||
| 17061 | + "version": "6.8.5", | ||
| 17062 | + "resolved": "https://registry.npmjs.org/tinymce/-/tinymce-6.8.5.tgz", | ||
| 17063 | + "integrity": "sha512-qAL/FxL7cwZHj4BfaF818zeJJizK9jU5IQzTcSLL4Rj5MaJdiVblEj7aDr80VCV1w9h4Lak9hlnALhq/kVtN1g==", | ||
| 17064 | + "license": "MIT" | ||
| 17065 | + }, | ||
| 17066 | + "node_modules/tinypool": { | ||
| 17067 | + "version": "1.0.2", | ||
| 17068 | + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.0.2.tgz", | ||
| 17069 | + "integrity": "sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==", | ||
| 17070 | + "dev": true, | ||
| 17071 | + "license": "MIT", | ||
| 17072 | + "engines": { | ||
| 17073 | + "node": "^18.0.0 || >=20.0.0" | ||
| 17074 | + } | ||
| 17075 | + }, | ||
| 17076 | + "node_modules/tinyrainbow": { | ||
| 17077 | + "version": "2.0.0", | ||
| 17078 | + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-2.0.0.tgz", | ||
| 17079 | + "integrity": "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==", | ||
| 17080 | + "dev": true, | ||
| 17081 | + "license": "MIT", | ||
| 17082 | + "engines": { | ||
| 17083 | + "node": ">=14.0.0" | ||
| 17084 | + } | ||
| 17085 | + }, | ||
| 17086 | + "node_modules/tinyspy": { | ||
| 17087 | + "version": "3.0.2", | ||
| 17088 | + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.2.tgz", | ||
| 17089 | + "integrity": "sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==", | ||
| 17090 | + "dev": true, | ||
| 17091 | + "license": "MIT", | ||
| 17092 | + "engines": { | ||
| 17093 | + "node": ">=14.0.0" | ||
| 17094 | + } | ||
| 17095 | + }, | ||
| 17096 | + "node_modules/tldts": { | ||
| 17097 | + "version": "6.1.86", | ||
| 17098 | + "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.86.tgz", | ||
| 17099 | + "integrity": "sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==", | ||
| 17100 | + "dev": true, | ||
| 17101 | + "license": "MIT", | ||
| 17102 | + "dependencies": { | ||
| 17103 | + "tldts-core": "^6.1.86" | ||
| 17104 | + }, | ||
| 17105 | + "bin": { | ||
| 17106 | + "tldts": "bin/cli.js" | ||
| 17107 | + } | ||
| 17108 | + }, | ||
| 17109 | + "node_modules/tldts-core": { | ||
| 17110 | + "version": "6.1.86", | ||
| 17111 | + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.86.tgz", | ||
| 17112 | + "integrity": "sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==", | ||
| 17113 | + "dev": true, | ||
| 17114 | + "license": "MIT" | ||
| 17115 | + }, | ||
| 16058 | "node_modules/tmp": { | 17116 | "node_modules/tmp": { |
| 16059 | "version": "0.2.3", | 17117 | "version": "0.2.3", |
| 16060 | "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", | 17118 | "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", |
| @@ -16109,6 +17167,19 @@ | @@ -16109,6 +17167,19 @@ | ||
| 16109 | "node": ">=6" | 17167 | "node": ">=6" |
| 16110 | } | 17168 | } |
| 16111 | }, | 17169 | }, |
| 17170 | + "node_modules/tough-cookie": { | ||
| 17171 | + "version": "5.1.2", | ||
| 17172 | + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.2.tgz", | ||
| 17173 | + "integrity": "sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==", | ||
| 17174 | + "dev": true, | ||
| 17175 | + "license": "BSD-3-Clause", | ||
| 17176 | + "dependencies": { | ||
| 17177 | + "tldts": "^6.1.32" | ||
| 17178 | + }, | ||
| 17179 | + "engines": { | ||
| 17180 | + "node": ">=16" | ||
| 17181 | + } | ||
| 17182 | + }, | ||
| 16112 | "node_modules/tr46": { | 17183 | "node_modules/tr46": { |
| 16113 | "version": "0.0.3", | 17184 | "version": "0.0.3", |
| 16114 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", | 17185 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", |
| @@ -17144,15 +18215,111 @@ | @@ -17144,15 +18215,111 @@ | ||
| 17144 | "vuetify": "^3.0.0" | 18215 | "vuetify": "^3.0.0" |
| 17145 | } | 18216 | } |
| 17146 | }, | 18217 | }, |
| 18218 | + "node_modules/vitest": { | ||
| 18219 | + "version": "3.1.2", | ||
| 18220 | + "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.1.2.tgz", | ||
| 18221 | + "integrity": "sha512-WaxpJe092ID1C0mr+LH9MmNrhfzi8I65EX/NRU/Ld016KqQNRgxSOlGNP1hHN+a/F8L15Mh8klwaF77zR3GeDQ==", | ||
| 18222 | + "dev": true, | ||
| 18223 | + "license": "MIT", | ||
| 18224 | + "dependencies": { | ||
| 18225 | + "@vitest/expect": "3.1.2", | ||
| 18226 | + "@vitest/mocker": "3.1.2", | ||
| 18227 | + "@vitest/pretty-format": "^3.1.2", | ||
| 18228 | + "@vitest/runner": "3.1.2", | ||
| 18229 | + "@vitest/snapshot": "3.1.2", | ||
| 18230 | + "@vitest/spy": "3.1.2", | ||
| 18231 | + "@vitest/utils": "3.1.2", | ||
| 18232 | + "chai": "^5.2.0", | ||
| 18233 | + "debug": "^4.4.0", | ||
| 18234 | + "expect-type": "^1.2.1", | ||
| 18235 | + "magic-string": "^0.30.17", | ||
| 18236 | + "pathe": "^2.0.3", | ||
| 18237 | + "std-env": "^3.9.0", | ||
| 18238 | + "tinybench": "^2.9.0", | ||
| 18239 | + "tinyexec": "^0.3.2", | ||
| 18240 | + "tinyglobby": "^0.2.13", | ||
| 18241 | + "tinypool": "^1.0.2", | ||
| 18242 | + "tinyrainbow": "^2.0.0", | ||
| 18243 | + "vite": "^5.0.0 || ^6.0.0", | ||
| 18244 | + "vite-node": "3.1.2", | ||
| 18245 | + "why-is-node-running": "^2.3.0" | ||
| 18246 | + }, | ||
| 18247 | + "bin": { | ||
| 18248 | + "vitest": "vitest.mjs" | ||
| 18249 | + }, | ||
| 18250 | + "engines": { | ||
| 18251 | + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" | ||
| 18252 | + }, | ||
| 18253 | + "funding": { | ||
| 18254 | + "url": "https://opencollective.com/vitest" | ||
| 18255 | + }, | ||
| 18256 | + "peerDependencies": { | ||
| 18257 | + "@edge-runtime/vm": "*", | ||
| 18258 | + "@types/debug": "^4.1.12", | ||
| 18259 | + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", | ||
| 18260 | + "@vitest/browser": "3.1.2", | ||
| 18261 | + "@vitest/ui": "3.1.2", | ||
| 18262 | + "happy-dom": "*", | ||
| 18263 | + "jsdom": "*" | ||
| 18264 | + }, | ||
| 18265 | + "peerDependenciesMeta": { | ||
| 18266 | + "@edge-runtime/vm": { | ||
| 18267 | + "optional": true | ||
| 18268 | + }, | ||
| 18269 | + "@types/debug": { | ||
| 18270 | + "optional": true | ||
| 18271 | + }, | ||
| 18272 | + "@types/node": { | ||
| 18273 | + "optional": true | ||
| 18274 | + }, | ||
| 18275 | + "@vitest/browser": { | ||
| 18276 | + "optional": true | ||
| 18277 | + }, | ||
| 18278 | + "@vitest/ui": { | ||
| 18279 | + "optional": true | ||
| 18280 | + }, | ||
| 18281 | + "happy-dom": { | ||
| 18282 | + "optional": true | ||
| 18283 | + }, | ||
| 18284 | + "jsdom": { | ||
| 18285 | + "optional": true | ||
| 18286 | + } | ||
| 18287 | + } | ||
| 18288 | + }, | ||
| 17147 | "node_modules/vitest-environment-nuxt": { | 18289 | "node_modules/vitest-environment-nuxt": { |
| 17148 | "version": "1.0.1", | 18290 | "version": "1.0.1", |
| 17149 | "resolved": "https://registry.npmjs.org/vitest-environment-nuxt/-/vitest-environment-nuxt-1.0.1.tgz", | 18291 | "resolved": "https://registry.npmjs.org/vitest-environment-nuxt/-/vitest-environment-nuxt-1.0.1.tgz", |
| 17150 | "integrity": "sha512-eBCwtIQriXW5/M49FjqNKfnlJYlG2LWMSNFsRVKomc8CaMqmhQPBS5LZ9DlgYL9T8xIVsiA6RZn2lk7vxov3Ow==", | 18292 | "integrity": "sha512-eBCwtIQriXW5/M49FjqNKfnlJYlG2LWMSNFsRVKomc8CaMqmhQPBS5LZ9DlgYL9T8xIVsiA6RZn2lk7vxov3Ow==", |
| 18293 | + "dev": true, | ||
| 17151 | "license": "MIT", | 18294 | "license": "MIT", |
| 17152 | "dependencies": { | 18295 | "dependencies": { |
| 17153 | "@nuxt/test-utils": ">=3.13.1" | 18296 | "@nuxt/test-utils": ">=3.13.1" |
| 17154 | } | 18297 | } |
| 17155 | }, | 18298 | }, |
| 18299 | + "node_modules/vitest/node_modules/tinyexec": { | ||
| 18300 | + "version": "0.3.2", | ||
| 18301 | + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", | ||
| 18302 | + "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", | ||
| 18303 | + "dev": true, | ||
| 18304 | + "license": "MIT" | ||
| 18305 | + }, | ||
| 18306 | + "node_modules/vitest/node_modules/tinyglobby": { | ||
| 18307 | + "version": "0.2.13", | ||
| 18308 | + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.13.tgz", | ||
| 18309 | + "integrity": "sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==", | ||
| 18310 | + "dev": true, | ||
| 18311 | + "license": "MIT", | ||
| 18312 | + "dependencies": { | ||
| 18313 | + "fdir": "^6.4.4", | ||
| 18314 | + "picomatch": "^4.0.2" | ||
| 18315 | + }, | ||
| 18316 | + "engines": { | ||
| 18317 | + "node": ">=12.0.0" | ||
| 18318 | + }, | ||
| 18319 | + "funding": { | ||
| 18320 | + "url": "https://github.com/sponsors/SuperchupuDev" | ||
| 18321 | + } | ||
| 18322 | + }, | ||
| 17156 | "node_modules/vscode-uri": { | 18323 | "node_modules/vscode-uri": { |
| 17157 | "version": "3.1.0", | 18324 | "version": "3.1.0", |
| 17158 | "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.1.0.tgz", | 18325 | "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.1.0.tgz", |
| @@ -17189,6 +18356,13 @@ | @@ -17189,6 +18356,13 @@ | ||
| 17189 | "ufo": "^1.5.4" | 18356 | "ufo": "^1.5.4" |
| 17190 | } | 18357 | } |
| 17191 | }, | 18358 | }, |
| 18359 | + "node_modules/vue-component-type-helpers": { | ||
| 18360 | + "version": "2.2.10", | ||
| 18361 | + "resolved": "https://registry.npmjs.org/vue-component-type-helpers/-/vue-component-type-helpers-2.2.10.tgz", | ||
| 18362 | + "integrity": "sha512-iDUO7uQK+Sab2tYuiP9D1oLujCWlhHELHMgV/cB13cuGbG4qwkLHvtfWb6FzvxrIOPDnU0oHsz2MlQjhYDeaHA==", | ||
| 18363 | + "dev": true, | ||
| 18364 | + "license": "MIT" | ||
| 18365 | + }, | ||
| 17192 | "node_modules/vue-demi": { | 18366 | "node_modules/vue-demi": { |
| 17193 | "version": "0.14.10", | 18367 | "version": "0.14.10", |
| 17194 | "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz", | 18368 | "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz", |
| @@ -17366,6 +18540,29 @@ | @@ -17366,6 +18540,29 @@ | ||
| 17366 | "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", | 18540 | "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", |
| 17367 | "license": "MIT" | 18541 | "license": "MIT" |
| 17368 | }, | 18542 | }, |
| 18543 | + "node_modules/w3c-xmlserializer": { | ||
| 18544 | + "version": "5.0.0", | ||
| 18545 | + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", | ||
| 18546 | + "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", | ||
| 18547 | + "dev": true, | ||
| 18548 | + "license": "MIT", | ||
| 18549 | + "dependencies": { | ||
| 18550 | + "xml-name-validator": "^5.0.0" | ||
| 18551 | + }, | ||
| 18552 | + "engines": { | ||
| 18553 | + "node": ">=18" | ||
| 18554 | + } | ||
| 18555 | + }, | ||
| 18556 | + "node_modules/w3c-xmlserializer/node_modules/xml-name-validator": { | ||
| 18557 | + "version": "5.0.0", | ||
| 18558 | + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", | ||
| 18559 | + "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", | ||
| 18560 | + "dev": true, | ||
| 18561 | + "license": "Apache-2.0", | ||
| 18562 | + "engines": { | ||
| 18563 | + "node": ">=18" | ||
| 18564 | + } | ||
| 18565 | + }, | ||
| 17369 | "node_modules/web-streams-polyfill": { | 18566 | "node_modules/web-streams-polyfill": { |
| 17370 | "version": "3.3.3", | 18567 | "version": "3.3.3", |
| 17371 | "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", | 18568 | "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", |
| @@ -17387,6 +18584,29 @@ | @@ -17387,6 +18584,29 @@ | ||
| 17387 | "integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==", | 18584 | "integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==", |
| 17388 | "license": "MIT" | 18585 | "license": "MIT" |
| 17389 | }, | 18586 | }, |
| 18587 | + "node_modules/whatwg-encoding": { | ||
| 18588 | + "version": "3.1.1", | ||
| 18589 | + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", | ||
| 18590 | + "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", | ||
| 18591 | + "dev": true, | ||
| 18592 | + "license": "MIT", | ||
| 18593 | + "dependencies": { | ||
| 18594 | + "iconv-lite": "0.6.3" | ||
| 18595 | + }, | ||
| 18596 | + "engines": { | ||
| 18597 | + "node": ">=18" | ||
| 18598 | + } | ||
| 18599 | + }, | ||
| 18600 | + "node_modules/whatwg-mimetype": { | ||
| 18601 | + "version": "3.0.0", | ||
| 18602 | + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", | ||
| 18603 | + "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", | ||
| 18604 | + "dev": true, | ||
| 18605 | + "license": "MIT", | ||
| 18606 | + "engines": { | ||
| 18607 | + "node": ">=12" | ||
| 18608 | + } | ||
| 18609 | + }, | ||
| 17390 | "node_modules/whatwg-url": { | 18610 | "node_modules/whatwg-url": { |
| 17391 | "version": "5.0.0", | 18611 | "version": "5.0.0", |
| 17392 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", | 18612 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", |
| @@ -17412,6 +18632,23 @@ | @@ -17412,6 +18632,23 @@ | ||
| 17412 | "node": "^18.17.0 || >=20.5.0" | 18632 | "node": "^18.17.0 || >=20.5.0" |
| 17413 | } | 18633 | } |
| 17414 | }, | 18634 | }, |
| 18635 | + "node_modules/why-is-node-running": { | ||
| 18636 | + "version": "2.3.0", | ||
| 18637 | + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", | ||
| 18638 | + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", | ||
| 18639 | + "dev": true, | ||
| 18640 | + "license": "MIT", | ||
| 18641 | + "dependencies": { | ||
| 18642 | + "siginfo": "^2.0.0", | ||
| 18643 | + "stackback": "0.0.2" | ||
| 18644 | + }, | ||
| 18645 | + "bin": { | ||
| 18646 | + "why-is-node-running": "cli.js" | ||
| 18647 | + }, | ||
| 18648 | + "engines": { | ||
| 18649 | + "node": ">=8" | ||
| 18650 | + } | ||
| 18651 | + }, | ||
| 17415 | "node_modules/wide-align": { | 18652 | "node_modules/wide-align": { |
| 17416 | "version": "1.1.5", | 18653 | "version": "1.1.5", |
| 17417 | "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", | 18654 | "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", |
| @@ -17632,6 +18869,13 @@ | @@ -17632,6 +18869,13 @@ | ||
| 17632 | "node": ">=12" | 18869 | "node": ">=12" |
| 17633 | } | 18870 | } |
| 17634 | }, | 18871 | }, |
| 18872 | + "node_modules/xmlchars": { | ||
| 18873 | + "version": "2.2.0", | ||
| 18874 | + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", | ||
| 18875 | + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", | ||
| 18876 | + "dev": true, | ||
| 18877 | + "license": "MIT" | ||
| 18878 | + }, | ||
| 17635 | "node_modules/xss": { | 18879 | "node_modules/xss": { |
| 17636 | "version": "1.0.15", | 18880 | "version": "1.0.15", |
| 17637 | "resolved": "https://registry.npmjs.org/xss/-/xss-1.0.15.tgz", | 18881 | "resolved": "https://registry.npmjs.org/xss/-/xss-1.0.15.tgz", |
| @@ -12,18 +12,23 @@ | @@ -12,18 +12,23 @@ | ||
| 12 | "lint:js": "eslint --ext \".ts,.vue\" .", | 12 | "lint:js": "eslint --ext \".ts,.vue\" .", |
| 13 | "lint:prettier": "prettier --write .", | 13 | "lint:prettier": "prettier --write .", |
| 14 | "lint": "npm run lint:js && npm run lint:prettier", | 14 | "lint": "npm run lint:js && npm run lint:prettier", |
| 15 | - "format": "prettier --write \"{components,pages,plugins,middleware,layouts,composables,assets}/**/*.{js,jsx,ts,tsx,vue,html,css,scss,json,md}\"" | 15 | + "format": "prettier --write \"{components,pages,plugins,middleware,layouts,composables,assets}/**/*.{js,jsx,ts,tsx,vue,html,css,scss,json,md}\"", |
| 16 | + "test": "vitest" | ||
| 16 | }, | 17 | }, |
| 17 | "dependencies": { | 18 | "dependencies": { |
| 18 | "@nuxt/eslint": "^1.3.0", | 19 | "@nuxt/eslint": "^1.3.0", |
| 19 | "@nuxt/icon": "^1.12.0", | 20 | "@nuxt/icon": "^1.12.0", |
| 20 | "@nuxt/image": "^1.10.0", | 21 | "@nuxt/image": "^1.10.0", |
| 21 | "@nuxt/scripts": "^0.11.6", | 22 | "@nuxt/scripts": "^0.11.6", |
| 22 | - "@nuxt/test-utils": "^3.17.2", | ||
| 23 | "@nuxt/ui": "^2.22.0", | 23 | "@nuxt/ui": "^2.22.0", |
| 24 | "@pinia-orm/nuxt": "^1.10.2", | 24 | "@pinia-orm/nuxt": "^1.10.2", |
| 25 | "@pinia/nuxt": "^0.9.0", | 25 | "@pinia/nuxt": "^0.9.0", |
| 26 | + "@tinymce/tinymce-vue": "^5.1.1", | ||
| 27 | + "@types/vuelidate": "^0.7.22", | ||
| 26 | "@unhead/vue": "^2.0.8", | 28 | "@unhead/vue": "^2.0.8", |
| 29 | + "@vitejs/plugin-vue": "^5.2.3", | ||
| 30 | + "@vuelidate/core": "^2.0.3", | ||
| 31 | + "@vuelidate/validators": "^2.0.4", | ||
| 27 | "@vueuse/core": "^13.1.0", | 32 | "@vueuse/core": "^13.1.0", |
| 28 | "@vueuse/nuxt": "^13.1.0", | 33 | "@vueuse/nuxt": "^13.1.0", |
| 29 | "eslint": "^9.25.1", | 34 | "eslint": "^9.25.1", |
| @@ -36,9 +41,15 @@ | @@ -36,9 +41,15 @@ | ||
| 36 | "vuetify-nuxt-module": "^0.18.6" | 41 | "vuetify-nuxt-module": "^0.18.6" |
| 37 | }, | 42 | }, |
| 38 | "devDependencies": { | 43 | "devDependencies": { |
| 44 | + "@nuxt/test-utils": "^3.17.2", | ||
| 39 | "@nuxtjs/tailwindcss": "^6.13.2", | 45 | "@nuxtjs/tailwindcss": "^6.13.2", |
| 46 | + "@vue/test-utils": "^2.4.6", | ||
| 40 | "eslint-config-prettier": "^10.1.2", | 47 | "eslint-config-prettier": "^10.1.2", |
| 41 | "eslint-plugin-prettier": "^5.2.6", | 48 | "eslint-plugin-prettier": "^5.2.6", |
| 42 | - "prettier": "^3.5.3" | 49 | + "happy-dom": "^17.4.4", |
| 50 | + "jsdom": "^26.1.0", | ||
| 51 | + "playwright-core": "^1.52.0", | ||
| 52 | + "prettier": "^3.5.3", | ||
| 53 | + "vitest": "^3.1.2" | ||
| 43 | } | 54 | } |
| 44 | } | 55 | } |
| 1 | -<script setup lang="ts"> | 1 | +<script lang="ts" setup> |
| 2 | +//#region --import--. | ||
| 3 | +import { AlertTriangleIcon, ArrowLeftIcon } from "lucide-vue-next"; | ||
| 4 | +import { useTMDB } from "~/composables/tMDB"; | ||
| 5 | +import { computed, onMounted, ref } from "vue"; | ||
| 6 | +import { Movie } from "~/models/movie"; | ||
| 7 | +import type { MovieInterface } from "~/interfaces/movie"; | ||
| 8 | +import { Credit } from "~/models/credit"; | ||
| 9 | +import type { CreditsResponse } from "~/interfaces/credit"; | ||
| 10 | +import type { MovieCommentInterface } from "~/interfaces/movieComment"; | ||
| 11 | +import { MovieComment } from "~/models/movieComment"; | ||
| 12 | +import type { WhereSecondaryClosure } from "pinia-orm"; | ||
| 13 | +//#endregion | ||
| 2 | 14 | ||
| 15 | +//#region --Declaration--. | ||
| 16 | +const { fetchMovieDetails, fetchMovieCredits } = useTMDB(); | ||
| 17 | +//#endregion | ||
| 18 | + | ||
| 19 | +//#region --Declaration--. | ||
| 20 | +const { currentRoute } = useRouter(); | ||
| 21 | +//#endregion | ||
| 22 | + | ||
| 23 | +//#region --Data/ref--. | ||
| 24 | +const isLoading = ref(true); | ||
| 25 | +const isSubmitting = ref(false); | ||
| 26 | +//#endregion | ||
| 27 | + | ||
| 28 | +//#region --Computed--. | ||
| 29 | +const movieId = computed(() => { | ||
| 30 | + if (currentRoute.value.params.id) { | ||
| 31 | + if (typeof currentRoute.value.params.id === "string") { | ||
| 32 | + if (typeof Number(+currentRoute.value.params.id) === "number") { | ||
| 33 | + return +currentRoute.value.params.id as number; | ||
| 34 | + } else { | ||
| 35 | + return currentRoute.value.params.id as string; | ||
| 36 | + } | ||
| 37 | + } else { | ||
| 38 | + return null; | ||
| 39 | + } | ||
| 40 | + } else { | ||
| 41 | + return null; | ||
| 42 | + } | ||
| 43 | +}); | ||
| 44 | + | ||
| 45 | +const movie = computed(() => { | ||
| 46 | + if (unref(movieId)) { | ||
| 47 | + return useRepo(Movie) | ||
| 48 | + .query() | ||
| 49 | + .where("id", movieId.value as WhereSecondaryClosure<never> | null | undefined) | ||
| 50 | + .withAll() | ||
| 51 | + .first() as unknown as MovieInterface; | ||
| 52 | + } else { | ||
| 53 | + return null; | ||
| 54 | + } | ||
| 55 | +}); | ||
| 56 | + | ||
| 57 | +/** | ||
| 58 | + * Computed property for director | ||
| 59 | + */ | ||
| 60 | +const director = computed(() => { | ||
| 61 | + if (unref(movie)?.credit?.crew) { | ||
| 62 | + return movie.value?.credit.crew.find((person) => person.job === "Director"); | ||
| 63 | + } else { | ||
| 64 | + return null; | ||
| 65 | + } | ||
| 66 | +}); | ||
| 67 | + | ||
| 68 | +/** | ||
| 69 | + * Retourne les commentaires liés au film, du plus récent au plus ancien. | ||
| 70 | + */ | ||
| 71 | +const comments = computed(() => { | ||
| 72 | + return useRepo(MovieComment) | ||
| 73 | + .query() | ||
| 74 | + .where((comment) => { | ||
| 75 | + const searched = comment as unknown as MovieCommentInterface; | ||
| 76 | + return searched.movie_id === unref(movieId); | ||
| 77 | + }) | ||
| 78 | + .orderBy("createdAt", "desc") | ||
| 79 | + .get(); | ||
| 80 | +}); | ||
| 81 | +//#endregion | ||
| 82 | + | ||
| 83 | +//#region --Function--. | ||
| 84 | +/** | ||
| 85 | + * Fetch movie details | ||
| 86 | + */ | ||
| 87 | +const fetchDetails = async (id: number | string) => { | ||
| 88 | + try { | ||
| 89 | + isLoading.value = true; | ||
| 90 | + | ||
| 91 | + const data = await fetchMovieDetails(id); | ||
| 92 | + // Add to store collection. | ||
| 93 | + useRepo(Movie).save(data); | ||
| 94 | + } catch (error) { | ||
| 95 | + console.error("Error fetching movie details:", error); | ||
| 96 | + } finally { | ||
| 97 | + isLoading.value = false; | ||
| 98 | + } | ||
| 99 | +}; | ||
| 100 | + | ||
| 101 | +/** | ||
| 102 | + * Format runtime | ||
| 103 | + * @param minutes | ||
| 104 | + */ | ||
| 105 | +const formatRuntime = (minutes: number) => { | ||
| 106 | + if (!minutes) return "Durée inconnue"; | ||
| 107 | + // Find nb hours. | ||
| 108 | + const hours = Math.floor(minutes / 60); | ||
| 109 | + // Find last minutes. | ||
| 110 | + const mins = minutes % 60; | ||
| 111 | + | ||
| 112 | + return `${hours}h ${mins}min`; | ||
| 113 | +}; | ||
| 114 | + | ||
| 115 | +async function fetchCredits(id: number | string) { | ||
| 116 | + try { | ||
| 117 | + const data = (await fetchMovieCredits(id)) as CreditsResponse; | ||
| 118 | + data.movie_id = id; | ||
| 119 | + // Add to store collection. | ||
| 120 | + useRepo(Credit).save(data); | ||
| 121 | + } catch (error) { | ||
| 122 | + console.error("Error fetching movie credits:", error); | ||
| 123 | + } | ||
| 124 | +} | ||
| 125 | + | ||
| 126 | +//Ce n'est pas le film du siècle cependant, il est suffisamment intéressant pour passer une bonne soirée ! | ||
| 127 | +function handleSubmitEvent(event: MovieCommentInterface) { | ||
| 128 | + isSubmitting.value = true; | ||
| 129 | + event.movie_id = unref(movieId); | ||
| 130 | + event.createdAt = `${new Date(Date.now())}`; | ||
| 131 | + useRepo(MovieComment).save(event); | ||
| 132 | + isSubmitting.value = false; | ||
| 133 | +} | ||
| 134 | + | ||
| 135 | +//#endregion | ||
| 136 | + | ||
| 137 | +//#region --Global event--. | ||
| 138 | +onMounted(() => { | ||
| 139 | + // Fetch data on component mount. | ||
| 140 | + if (unref(movieId)) { | ||
| 141 | + const id = unref(movieId) as string | number; | ||
| 142 | + fetchDetails(id); | ||
| 143 | + fetchCredits(id); | ||
| 144 | + } | ||
| 145 | + // loadComments() | ||
| 146 | +}); | ||
| 147 | +//#endregion | ||
| 3 | </script> | 148 | </script> |
| 4 | 149 | ||
| 5 | <template> | 150 | <template> |
| 6 | <section> | 151 | <section> |
| 7 | - composant détail d'un film. | 152 | + <!-- Skeleton loader pendant le chargement --> |
| 153 | + <ui-components-skeleton-movie-detail-loader v-if="isLoading" /> | ||
| 154 | + | ||
| 155 | + <!-- Contenu du film --> | ||
| 156 | + <div v-else-if="movie" class="relative"> | ||
| 157 | + <!-- Backdrop image --> | ||
| 158 | + <ui-components-backdrop-image v-if="movie.backdrop_path" :src="movie.backdrop_path" :title="movie.title" /> | ||
| 159 | + | ||
| 160 | + <!-- Contenu principal --> | ||
| 161 | + <div class="container mx-auto px-4 py-8 relative z-10 pt-20"> | ||
| 162 | + <button | ||
| 163 | + class="flex items-center text-gray-400 hover:text-white mb-8 transition-colors" | ||
| 164 | + @click="navigateTo('/')" | ||
| 165 | + > | ||
| 166 | + <ArrowLeftIcon :size="20" class="mr-2" /> | ||
| 167 | + Retour | ||
| 168 | + </button> | ||
| 169 | + | ||
| 170 | + <div class="flex flex-col md:flex-row gap-8"> | ||
| 171 | + <!-- Poster --> | ||
| 172 | + <ui-components-poster v-if="movie.poster_path" :src="movie.poster_path" :title="movie.title" /> | ||
| 173 | + | ||
| 174 | + <!-- Informations du film --> | ||
| 175 | + <section class="w-full md:w-2/3 lg:w-3/4"> | ||
| 176 | + <h1 class="text-3xl md:text-4xl font-bold mb-2">{{ movie.title }}</h1> | ||
| 177 | + <p v-if="movie.release_date" class="text-gray-400 mb-4"> | ||
| 178 | + {{ useDateFormat(movie.release_date, "DD-MM-YYYY") }} • {{ formatRuntime(movie.runtime) }} | ||
| 179 | + </p> | ||
| 180 | + | ||
| 181 | + <!-- Note et votes --> | ||
| 182 | + <details-score-and-vote :nb-vote="movie.vote_count" :score="movie.vote_average" /> | ||
| 183 | + | ||
| 184 | + <!-- Genres --> | ||
| 185 | + <details-movie-gender :genres="movie.genres" /> | ||
| 186 | + | ||
| 187 | + <!-- Synopsis --> | ||
| 188 | + <div class="mb-6"> | ||
| 189 | + <h2 class="text-xl font-bold mb-2">Synopsis</h2> | ||
| 190 | + <p class="text-gray-300">{{ movie.overview || "Aucun synopsis disponible." }}</p> | ||
| 191 | + </div> | ||
| 192 | + | ||
| 193 | + <!-- Réalisateur et têtes d'affiche --> | ||
| 194 | + <div v-if="movie.credit" class="mb-6"> | ||
| 195 | + <h2 class="text-xl font-bold mb-2">Équipe</h2> | ||
| 196 | + <div v-if="director" class="mb-2"> | ||
| 197 | + <span class="font-semibold">Réalisateur:</span> {{ director.name }} | ||
| 198 | + </div> | ||
| 199 | + <div v-if="movie.credit.cast.length > 0"> | ||
| 200 | + <span class="font-semibold">Têtes d'affiche:</span> | ||
| 201 | + {{ | ||
| 202 | + movie.credit.cast | ||
| 203 | + .slice(0, 15) | ||
| 204 | + .map((person) => person.name) | ||
| 205 | + .join(", ") | ||
| 206 | + }} | ||
| 207 | + <span v-if="movie.credit.cast.length > 15">..</span> | ||
| 208 | + </div> | ||
| 209 | + </div> | ||
| 210 | + <!-- Comments form. --> | ||
| 211 | + <h3 class="text-xl font-bold mt-8 mb-4">Ajouter un commentaire</h3> | ||
| 212 | + <form-movie-comment-form @event:submit="handleSubmitEvent" /> | ||
| 213 | + | ||
| 214 | + <!-- Liste des commentaires --> | ||
| 215 | + <movie-comment-list :comments="comments as unknown as MovieCommentInterface[]" /> | ||
| 216 | + </section> | ||
| 217 | + </div> | ||
| 218 | + </div> | ||
| 219 | + </div> | ||
| 220 | + | ||
| 221 | + <!-- Erreur --> | ||
| 222 | + <section v-else class="container mx-auto px-4 py-16 text-center"> | ||
| 223 | + <AlertTriangleIcon :size="64" class="mx-auto mb-4 text-red-500" /> | ||
| 224 | + <h2 class="text-2xl font-bold mb-2">Film non trouvé</h2> | ||
| 225 | + <p class="text-gray-400 mb-6">Nous n'avons pas pu trouver le film que vous cherchez.</p> | ||
| 226 | + <button | ||
| 227 | + class="px-6 py-2 bg-primary text-white font-bold rounded-md hover:bg-primary-dark transition-colors" | ||
| 228 | + @click="navigateTo('/')" | ||
| 229 | + > | ||
| 230 | + Retour à l'accueil | ||
| 231 | + </button> | ||
| 232 | + </section> | ||
| 8 | </section> | 233 | </section> |
| 9 | </template> | 234 | </template> |
| 10 | 235 | ||
| 11 | -<style scoped> | 236 | +<style scoped></style> |
| 12 | - | ||
| 13 | -</style> |
type/commentForm.ts
0 → 100644
vite.config.ts
0 → 100644
vitest.config.m.ts
0 → 100644
| 1 | +import { defineVitestConfig } from '@nuxt/test-utils/config' | ||
| 2 | + | ||
| 3 | +export default defineVitestConfig({ | ||
| 4 | + /** | ||
| 5 | + * Documentation here : https://nuxt.com/docs/getting-started/testing | ||
| 6 | + * any custom Vitest config you require | ||
| 7 | + */ | ||
| 8 | + test: { | ||
| 9 | + environment: 'nuxt', | ||
| 10 | + // you can optionally set Nuxt-specific environment options | ||
| 11 | + // environmentOptions: { | ||
| 12 | + // nuxt: { | ||
| 13 | + // rootDir: fileURLToPath(new URL('./playground', import.meta.url)), | ||
| 14 | + // domEnvironment: 'happy-dom', // 'happy-dom' (default) or 'jsdom' | ||
| 15 | + // overrides: { | ||
| 16 | + // // other Nuxt config you want to pass | ||
| 17 | + // } | ||
| 18 | + // } | ||
| 19 | + // } | ||
| 20 | + } | ||
| 21 | +}) |
-
Please register or login to post a comment