mirror of
https://github.com/ArthurDanjou/artchat.git
synced 2026-01-14 15:54:03 +01:00
Add multilingual support with English, Spanish, and French translations; update Nuxt configuration and package dependencies
This commit is contained in:
@@ -6,14 +6,9 @@ const searchTerm = ref('')
|
||||
const openMessageModal = ref(false)
|
||||
const openClearModal = ref(false)
|
||||
|
||||
const { t } = useI18n({ useScope: 'local' })
|
||||
const { t, locale, locales, setLocale } = useI18n()
|
||||
|
||||
const { isDark, toggleDark } = useTheme()
|
||||
defineShortcuts({
|
||||
t: () => toggleDark({ clientX: window.innerWidth, clientY: 0 }),
|
||||
})
|
||||
|
||||
const { messages, submitMessage } = useChat(t)
|
||||
const { messages, submitMessage } = useChat()
|
||||
const { clearMessages, messages: storeMessages } = useChatStore()
|
||||
const loading = computed(() => storeMessages.some(msg => msg.state === ChatState.LOADING))
|
||||
|
||||
@@ -28,6 +23,13 @@ function onSelect(item: CommandPaletteItem) {
|
||||
submitMessage(item.type, item.prompt, item.fetchStates ?? [])
|
||||
}
|
||||
|
||||
const currentLocale = computed(() => locales.value.filter(l => l.code === locale.value)[0])
|
||||
|
||||
async function changeLocale() {
|
||||
await setLocale(currentLocale.value!.code === 'en' ? 'fr' : currentLocale.value!.code === 'fr' ? 'es' : 'en')
|
||||
}
|
||||
|
||||
const { isDark, toggleDark } = useTheme()
|
||||
defineShortcuts({
|
||||
meta_enter: () => {
|
||||
openMessageModal.value = !openMessageModal.value
|
||||
@@ -35,6 +37,8 @@ defineShortcuts({
|
||||
meta_d: () => {
|
||||
openClearModal.value = !openClearModal.value
|
||||
},
|
||||
l: () => changeLocale(),
|
||||
t: () => toggleDark({ clientX: window.innerWidth, clientY: 0 }),
|
||||
})
|
||||
|
||||
const modalUi = {
|
||||
@@ -55,8 +59,8 @@ const commandPaletteUi = {
|
||||
<UFieldGroup>
|
||||
<UModal v-model:open="openMessageModal" :ui="modalUi" title="Hey" description="Hey">
|
||||
<UButton
|
||||
:label="loading ? t('cmd.sending') : t('cmd.send')"
|
||||
variant="outline"
|
||||
:label="loading ? t('palette.cmd.sending') : t('palette.cmd.send')"
|
||||
variant="solid"
|
||||
color="neutral"
|
||||
size="xl"
|
||||
icon="i-ph-paper-plane-tilt-duotone"
|
||||
@@ -83,11 +87,11 @@ const commandPaletteUi = {
|
||||
<div class="flex items-center gap-2.5">
|
||||
<div class="flex items-center gap-2.5">
|
||||
<UIcon :name="item.icon!" size="20" />
|
||||
<span>{{ item.label }}</span>
|
||||
<span>{{ t(item.label) }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<span class="text-muted text-xs font-medium">
|
||||
{{ item.prompt }}
|
||||
{{ t(item.prompt) }}
|
||||
</span>
|
||||
</div>
|
||||
</template>
|
||||
@@ -95,7 +99,7 @@ const commandPaletteUi = {
|
||||
<div class="flex items-center justify-between gap-2">
|
||||
<UIcon name="i-simple-icons-nuxtdotjs" class="size-5 text-dimmed ml-1" />
|
||||
<div class="flex items-center gap-1">
|
||||
<UButton color="neutral" variant="ghost" :label="t('cmd.send')" class="text-dimmed" size="xs">
|
||||
<UButton color="neutral" variant="ghost" :label="t('palette.cmd.send')" class="text-dimmed" size="xs">
|
||||
<template #trailing>
|
||||
<UKbd value="enter" />
|
||||
</template>
|
||||
@@ -108,11 +112,10 @@ const commandPaletteUi = {
|
||||
</UModal>
|
||||
<UModal
|
||||
v-model:open="openClearModal"
|
||||
:title="t('clear.title')"
|
||||
:description="t('clear.description')"
|
||||
:title="t('palette.clear.title')"
|
||||
:description="t('palette.clear.description')"
|
||||
>
|
||||
<UButton
|
||||
:label="t('clear.button')"
|
||||
variant="subtle"
|
||||
color="error"
|
||||
leading-icon="i-ph-trash-duotone"
|
||||
@@ -120,291 +123,34 @@ const commandPaletteUi = {
|
||||
class="rounded-lg"
|
||||
:class="storeMessages.length !== 0 ? 'cursor-pointer' : 'cursor-default'"
|
||||
:disabled="storeMessages.length === 0"
|
||||
>
|
||||
<template #trailing>
|
||||
<UKbd value="meta" color="error" />
|
||||
<UKbd value="D" color="error" />
|
||||
</template>
|
||||
</UButton>
|
||||
/>
|
||||
|
||||
<template #footer="{ close }">
|
||||
<UFieldGroup>
|
||||
<UButton :label="t('clear.cancel')" color="neutral" variant="outline" @click="close" />
|
||||
<UButton :label="t('clear.submit')" color="error" @click.prevent="handleDelete()" />
|
||||
<UButton :label="t('palette.clear.cancel')" color="neutral" variant="outline" @click="close" />
|
||||
<UButton :label="t('palette.clear.submit')" color="error" @click.prevent="handleDelete()" />
|
||||
</UFieldGroup>
|
||||
</template>
|
||||
</UModal>
|
||||
</UFieldGroup>
|
||||
<UButton
|
||||
:icon="isDark ? 'i-ph-moon-duotone' : 'i-ph-sun-duotone'"
|
||||
color="neutral"
|
||||
variant="solid"
|
||||
size="xl"
|
||||
@click.prevent="toggleDark"
|
||||
/>
|
||||
<ClientOnly>
|
||||
<UFieldGroup>
|
||||
<UButton
|
||||
:icon="isDark ? 'i-ph-moon-duotone' : 'i-ph-sun-duotone'"
|
||||
color="neutral"
|
||||
variant="outline"
|
||||
size="xl"
|
||||
@click.prevent="toggleDark"
|
||||
/>
|
||||
<UButton
|
||||
icon="i-ph-translate-duotone"
|
||||
color="neutral"
|
||||
variant="outline"
|
||||
size="xl"
|
||||
@click.prevent="changeLocale"
|
||||
/>
|
||||
</UFieldGroup>
|
||||
</ClientOnly>
|
||||
</UCard>
|
||||
</nav>
|
||||
</template>
|
||||
|
||||
<i18n lang="json">
|
||||
{
|
||||
"en": {
|
||||
"clear": {
|
||||
"button": "Clear",
|
||||
"cancel": "Cancel",
|
||||
"submit": "Delete",
|
||||
"title": "Are you sure you want to delete this conversation?",
|
||||
"description": "This action cannot be undone."
|
||||
},
|
||||
"cmd": {
|
||||
"send": "Send message",
|
||||
"sending": "Sending..."
|
||||
},
|
||||
"chat": {
|
||||
"actions": "Components",
|
||||
"arthur": "More about Arthur",
|
||||
"interface": "Change the interface",
|
||||
"theme": {
|
||||
"label": "Change theme",
|
||||
"prompt": "How can I change the theme?"
|
||||
},
|
||||
"uses": {
|
||||
"label": "View setup",
|
||||
"prompt": "How can I view the setup of Arthur?"
|
||||
},
|
||||
"stats": {
|
||||
"label": "View statistics",
|
||||
"prompt": "How can I view the statistics concerning Arthur?"
|
||||
},
|
||||
"weather": {
|
||||
"label": "View weather",
|
||||
"prompt": "How can I view the weather conditions near Arthur?"
|
||||
},
|
||||
"location": {
|
||||
"label": "View location",
|
||||
"prompt": "How can I view the location of Arthur?"
|
||||
},
|
||||
"language": {
|
||||
"label": "Change language",
|
||||
"prompt": "How can I change the chat language?"
|
||||
},
|
||||
"activity": {
|
||||
"label": "Activity",
|
||||
"prompt": "What are you currently doing?"
|
||||
},
|
||||
"about": {
|
||||
"label": "About Arthur",
|
||||
"prompt": "I want you to tell me about yourself."
|
||||
},
|
||||
"projects": {
|
||||
"label": "Projects",
|
||||
"prompt": "Tell me about your projects."
|
||||
},
|
||||
"writings": {
|
||||
"label": "Writings",
|
||||
"prompt": "What are your latest articles?"
|
||||
},
|
||||
"experiences": {
|
||||
"label": "Experiences",
|
||||
"prompt": "What experiences do you have in your career?"
|
||||
},
|
||||
"skills": {
|
||||
"label": "Skills",
|
||||
"prompt": "What are your skills?"
|
||||
},
|
||||
"status": {
|
||||
"label": "Homelab status",
|
||||
"prompt": "I saw you have a homelab, is it currently working?"
|
||||
},
|
||||
"resume": {
|
||||
"label": "Resume",
|
||||
"prompt": "Can you send me your resume?"
|
||||
},
|
||||
"contact": {
|
||||
"label": "Contact",
|
||||
"prompt": "How can I contact you?"
|
||||
},
|
||||
"hobbies": {
|
||||
"label": "Hobbies and passions",
|
||||
"prompt": "What are your hobbies? Your passions? Your interests?"
|
||||
},
|
||||
"credits": {
|
||||
"label": "Credits",
|
||||
"prompt": "How is this chat made?"
|
||||
}
|
||||
}
|
||||
},
|
||||
"fr": {
|
||||
"clear": {
|
||||
"button": "Effacer",
|
||||
"cancel": "Annuler",
|
||||
"submit": "Supprimer",
|
||||
"title": "Êtes-vous sûr de vouloir supprimer cette conversation ?",
|
||||
"description": "Cette action ne peut pas être annulée."
|
||||
},
|
||||
"cmd": {
|
||||
"send": "Envoyer le message",
|
||||
"sending": "Envoi..."
|
||||
},
|
||||
"chat": {
|
||||
"actions": "Composants",
|
||||
"arthur": "En savoir plus sur Arthur",
|
||||
"interface": "Changer l'interface",
|
||||
"theme": {
|
||||
"label": "Changer de thème",
|
||||
"prompt": "Comment puis-je changer le thème ?"
|
||||
},
|
||||
"uses": {
|
||||
"label": "Voir la configuration",
|
||||
"prompt": "Comment puis-je voir la configuration d'Arthur ?"
|
||||
},
|
||||
"stats": {
|
||||
"label": "Voir les statistiques",
|
||||
"prompt": "Comment puis-je voir les statistiques concernant Arthur ?"
|
||||
},
|
||||
"weather": {
|
||||
"label": "Voir la météo",
|
||||
"prompt": "Comment puis-je voir les conditions météorologiques près d'Arthur ?"
|
||||
},
|
||||
"location": {
|
||||
"label": "Voir la localisation",
|
||||
"prompt": "Comment puis-je voir la localisation d'Arthur ?"
|
||||
},
|
||||
"language": {
|
||||
"label": "Changer de langue",
|
||||
"prompt": "Comment puis-je changer la langue du chat ?"
|
||||
},
|
||||
"activity": {
|
||||
"label": "Activité",
|
||||
"prompt": "Que fais-tu actuellement ?"
|
||||
},
|
||||
"about": {
|
||||
"label": "A propos d'Arthur",
|
||||
"prompt": "Je veux que tu me parles de toi."
|
||||
},
|
||||
"projects": {
|
||||
"label": "Projets",
|
||||
"prompt": "Je veux que tu me parles de tes projets."
|
||||
},
|
||||
"writings": {
|
||||
"label": "Écrits",
|
||||
"prompt": "Quels sont tes derniers articles ?"
|
||||
},
|
||||
"experiences": {
|
||||
"label": "Expériences",
|
||||
"prompt": "Quelles expériences as-tu lors de ta carrière ?"
|
||||
},
|
||||
"skills": {
|
||||
"label": "Compétences",
|
||||
"prompt": "Quelles sont tes compétences ?"
|
||||
},
|
||||
"status": {
|
||||
"label": "Statut du homelab",
|
||||
"prompt": "J'ai vu que tu avais un homelab, est-il actuellement fonctionnel ?"
|
||||
},
|
||||
"resume": {
|
||||
"label": "CV",
|
||||
"prompt": "Peux-tu m'envoyer ton CV ?"
|
||||
},
|
||||
"contact": {
|
||||
"label": "Contact",
|
||||
"prompt": "Comment puis-je te contacter ?"
|
||||
},
|
||||
"hobbies": {
|
||||
"label": "Loisirs et passions",
|
||||
"prompt": "Quels sont tes loisirs ? Tes passions ? Tes intérêts ?"
|
||||
},
|
||||
"credits": {
|
||||
"label": "Crédits",
|
||||
"prompt": "Comment est réalisé ce chat ?"
|
||||
}
|
||||
}
|
||||
},
|
||||
"es": {
|
||||
"clear": {
|
||||
"button": "Borrar",
|
||||
"cancel": "Cancelar",
|
||||
"submit": "Eliminar",
|
||||
"title": "¿Estás seguro de que deseas eliminar esta conversación?",
|
||||
"description": "Esta acción no se puede deshacer."
|
||||
},
|
||||
"cmd": {
|
||||
"send": "Enviar el mensaje",
|
||||
"sending": "Enviando..."
|
||||
},
|
||||
"chat": {
|
||||
"actions": "Componentes",
|
||||
"arthur": "Más sobre Arthur",
|
||||
"interface": "Cambiar la interfaz",
|
||||
"theme": {
|
||||
"label": "Cambiar tema",
|
||||
"prompt": "¿Cómo puedo cambiar el tema?"
|
||||
},
|
||||
"uses": {
|
||||
"label": "Ver la configuración",
|
||||
"prompt": "¿Cómo puedo ver la configuración de Arthur?"
|
||||
},
|
||||
"stats": {
|
||||
"label": "Ver estadísticas",
|
||||
"prompt": "¿Cómo puedo ver las estadísticas sobre Arthur?"
|
||||
},
|
||||
"weather": {
|
||||
"label": "Ver el clima",
|
||||
"prompt": "¿Cómo puedo ver las condiciones climáticas cerca de Arthur?"
|
||||
},
|
||||
"location": {
|
||||
"label": "Ver ubicación",
|
||||
"prompt": "¿Cómo puedo ver la ubicación de Arthur?"
|
||||
},
|
||||
"language": {
|
||||
"label": "Cambiar idioma",
|
||||
"prompt": "¿Cómo puedo cambiar el idioma del chat?"
|
||||
},
|
||||
"activity": {
|
||||
"label": "Actividad",
|
||||
"prompt": "¿Qué estás haciendo actualmente?"
|
||||
},
|
||||
"about": {
|
||||
"label": "Sobre Arthur",
|
||||
"prompt": "Quiero que me hables de ti."
|
||||
},
|
||||
"projects": {
|
||||
"label": "Proyectos",
|
||||
"prompt": "Háblame de tus proyectos."
|
||||
},
|
||||
"writings": {
|
||||
"label": "Escritos",
|
||||
"prompt": "¿Cuáles son tus últimos artículos?"
|
||||
},
|
||||
"experiences": {
|
||||
"label": "Experiencias",
|
||||
"prompt": "¿Qué experiencias tienes en tu carrera?"
|
||||
},
|
||||
"skills": {
|
||||
"label": "Habilidades",
|
||||
"prompt": "¿Cuáles son tus habilidades?"
|
||||
},
|
||||
"status": {
|
||||
"label": "Estado del homelab",
|
||||
"prompt": "Vi que tienes un homelab, ¿está funcionando actualmente?"
|
||||
},
|
||||
"resume": {
|
||||
"label": "CV",
|
||||
"prompt": "¿Puedes enviarme tu CV?"
|
||||
},
|
||||
"contact": {
|
||||
"label": "Contacto",
|
||||
"prompt": "¿Cómo puedo contactarte?"
|
||||
},
|
||||
"hobbies": {
|
||||
"label": "Pasatiempos y pasiones",
|
||||
"prompt": "¿Cuáles son tus pasatiempos? ¿Tus pasiones? ¿Tus intereses?"
|
||||
},
|
||||
"credits": {
|
||||
"label": "Créditos",
|
||||
"prompt": "¿Cómo se ha hecho este chat?"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</i18n>
|
||||
|
||||
@@ -3,10 +3,9 @@ import type { ChatFetchState } from '~~/types'
|
||||
import { ChatState } from '~~/types'
|
||||
|
||||
const props = defineProps<{ messageId: number, fetchStates: ChatFetchState[] }>()
|
||||
|
||||
const currentState = ref<ChatFetchState | undefined>(props.fetchStates[0] ?? undefined)
|
||||
|
||||
const { setLoadingState } = useChatStore()
|
||||
const { t } = useI18n()
|
||||
|
||||
onMounted(() => {
|
||||
let index = 0
|
||||
@@ -38,7 +37,7 @@ onMounted(() => {
|
||||
<span
|
||||
class="relative inline-block overflow-hidden animate-shine italic bg-[linear-gradient(110deg,#bfbfbf,35%,#000,50%,#bfbfbf,75%,#bfbfbf)] dark:bg-[linear-gradient(110deg,#404040,35%,#fff,50%,#404040,75%,#404040)] bg-[length:200%_100%] bg-clip-text text-transparent"
|
||||
>
|
||||
<slot>{{ currentState }}</slot>
|
||||
<slot>{{ t(currentState || '') }}</slot>
|
||||
</span>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -8,9 +8,7 @@ const props = defineProps<{
|
||||
|
||||
const isArthur = computed(() => props.message.sender === ChatSender.ARTHUR)
|
||||
|
||||
const { locale, locales } = useI18n({
|
||||
useScope: 'local',
|
||||
})
|
||||
const { t, locale, locales } = useI18n()
|
||||
const currentLocale = computed(() => locales.value.find((l: { code: string }) => l.code === locale.value))
|
||||
const formatted = computed(() => useDateFormat(useNow(), 'D MMMM YYYY, HH:mm', { locales: currentLocale.value?.code ?? 'en' }).value)
|
||||
</script>
|
||||
@@ -23,7 +21,7 @@ const formatted = computed(() => useDateFormat(useNow(), 'D MMMM YYYY, HH:mm', {
|
||||
class="rounded-xl mt-1 bg-sky-500 md:max-w-3/4 text-white font-medium"
|
||||
:ui="{ body: 'sm:p-2', header: 'sm:p-2', footer: 'sm:p-2' }"
|
||||
>
|
||||
{{ message.content }}
|
||||
{{ t(message.content || '') }}
|
||||
</UCard>
|
||||
</div>
|
||||
<div class="opacity-0 group-hover:opacity-80 duration-500 flex text-sm italic justify-end">
|
||||
@@ -47,7 +45,7 @@ const formatted = computed(() => useDateFormat(useNow(), 'D MMMM YYYY, HH:mm', {
|
||||
:ui="{ body: 'p-0 sm:p-0', header: 'p-0 sm:p-0', footer: 'p-0 sm:p-0' }"
|
||||
>
|
||||
<div v-if="message.type === ChatType.INIT">
|
||||
{{ message.content }}
|
||||
{{ t(message.content || '') }}
|
||||
</div>
|
||||
<div v-else-if="message.type === ChatType.DUPLICATED">
|
||||
<ToolDuplicated />
|
||||
|
||||
@@ -3,10 +3,7 @@ import type { UseTimeAgoMessages } from '@vueuse/core'
|
||||
import type { Activity } from '~~/types'
|
||||
import { activityMessages, IDEs } from '~~/types'
|
||||
|
||||
const { locale, locales, t } = useI18n({
|
||||
useScope: 'local',
|
||||
})
|
||||
|
||||
const { locale, locales, t } = useI18n()
|
||||
const { data: activity, refresh } = await useAsyncData<Activity>('activity', () => $fetch<Activity>('/api/activity'))
|
||||
|
||||
useIntervalFn(async () => await refresh(), 5000)
|
||||
@@ -50,7 +47,7 @@ const getActivity = computed(() => {
|
||||
.trim()
|
||||
: ''
|
||||
|
||||
const stateWord = state && state.split(' ').length >= 2 ? state.split(' ')[1] : t('secret')
|
||||
const stateWord = state && state.split(' ').length >= 2 ? state.split(' ')[1] : t('tool.activity.secret')
|
||||
const ago = useTimeAgo(timestamps.start, {
|
||||
messages: activityMessages[locale.value as keyof typeof activityMessages] as UseTimeAgoMessages,
|
||||
}).value
|
||||
@@ -74,16 +71,16 @@ const getActivity = computed(() => {
|
||||
<template>
|
||||
<section>
|
||||
<div class="prose dark:prose-invert">
|
||||
<p>{{ t('response') }}</p>
|
||||
<p>{{ t('tool.activity.response') }}</p>
|
||||
</div>
|
||||
<div v-if="getActivity" class="space-y-4">
|
||||
<div v-if="getActivity" class="prose dark:prose-invert flex items-center gap-2">
|
||||
<div>
|
||||
{{ isActive ? t('working') : t('idling', {
|
||||
{{ isActive ? t('tool.activity.working') : t('tool.activity.idling', {
|
||||
editor: getActivity.name,
|
||||
}) }}
|
||||
</div>
|
||||
<UTooltip :text="isActive ? t('tooltip.online') : t('tooltip.idling')">
|
||||
<UTooltip :text="isActive ? t('tool.activity.tooltip.online') : t('tool.activity.tooltip.idling')">
|
||||
<div class="relative flex h-3 w-3">
|
||||
<div
|
||||
v-if="isActive"
|
||||
@@ -117,7 +114,7 @@ const getActivity = computed(() => {
|
||||
|
||||
<template #footer>
|
||||
<div class="flex justify-end text-sm">
|
||||
<i18n-t keypath="started" tag="p">
|
||||
<i18n-t keypath="tool.activity.started" tag="p">
|
||||
<template #date>
|
||||
{{ getActivity.start.formated.date }}
|
||||
</template>
|
||||
@@ -132,7 +129,7 @@ const getActivity = computed(() => {
|
||||
</div>
|
||||
<div v-else class="flex md:items-start gap-2">
|
||||
<i18n-t
|
||||
keypath="offline"
|
||||
keypath="tool.activity.offline"
|
||||
tag="p"
|
||||
class="not-prose"
|
||||
>
|
||||
@@ -140,7 +137,7 @@ const getActivity = computed(() => {
|
||||
<i>{{ t('maths') }}</i>
|
||||
</template>
|
||||
</i18n-t>
|
||||
<UTooltip :text="t('tooltip.offline')">
|
||||
<UTooltip :text="t('tool.activity.tooltip.offline')">
|
||||
<div class="relative flex h-3 w-3 mt-2">
|
||||
<div
|
||||
class="relative inline-flex rounded-full h-3 w-3 bg-red-500"
|
||||
@@ -150,50 +147,3 @@ const getActivity = computed(() => {
|
||||
</div>
|
||||
</section>
|
||||
</template>
|
||||
|
||||
<i18n lang="json">
|
||||
{
|
||||
"en": {
|
||||
"offline": "I'm currently offline. Come back later to see what I'm working on. {maths}",
|
||||
"working": "I'm actually online! Check what I'm working on just below.",
|
||||
"idling": "I'm idling on my computer with {editor} running in background.",
|
||||
"maths": "I am probably doing some maths or sleeping.",
|
||||
"response": "The statistics are powered and saved by WakaTime.",
|
||||
"tooltip": {
|
||||
"online": "I'm online 👋",
|
||||
"offline": "I'm offline 🫥",
|
||||
"idling": "I'm sleeping 😴"
|
||||
},
|
||||
"started": "Started the {date} at {hour}",
|
||||
"secret": "Secret Project"
|
||||
},
|
||||
"fr": {
|
||||
"offline": "Je suis actuellement hors ligne. Revenez plus tard pour voir sur quoi je travaille. {maths}",
|
||||
"working": "Je suis actuellement en ligne ! Découvrez ce sur quoi je travaille juste en dessous.",
|
||||
"idling": "Je suis en veille sur mon ordinateur avec {editor} en arrière-plan.",
|
||||
"maths": "Je suis probablement en train de faire des maths ou en train de dormir.",
|
||||
"response": "Les statistiques sont propulsées et enregistrées par WakaTime.",
|
||||
"tooltip": {
|
||||
"online": "Je suis connecté 👋",
|
||||
"offline": "Je suis déconnecté 🫥",
|
||||
"idling": "Je dors 😴"
|
||||
},
|
||||
"started": "Commencé le {date} à {hour}",
|
||||
"secret": "Projet Secret"
|
||||
},
|
||||
"es": {
|
||||
"offline": "Ahora mismo estoy desconectado. Vuelve más tarde para ver en lo que estoy trabajando. {maths}",
|
||||
"working": "Estoy trabajando en línea. ¡Mira lo que estoy haciendo justo debajo!",
|
||||
"idling": "Estoy en reposo en mi ordenador con {editor} en segundo plano.",
|
||||
"maths": "Estoy probablemente haciendo matemáticas o durmiendo.",
|
||||
"response": "Las estadísticas son propulsadas y registradas por WakaTime.",
|
||||
"tooltip": {
|
||||
"online": "Estoy conectado 👋",
|
||||
"offline": "Estoy desconectado 🫥",
|
||||
"idling": "Estoy durmiendo 😴"
|
||||
},
|
||||
"started": "Comenzado el {date} a {hour}",
|
||||
"secret": "Proyecto Secreto"
|
||||
}
|
||||
}
|
||||
</i18n>
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
<script lang="ts" setup>
|
||||
import { socials } from '~~/types'
|
||||
|
||||
const { t } = useI18n({ useScope: 'local' })
|
||||
const { t } = useI18n()
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<section>
|
||||
<div>
|
||||
<p class="prose dark:prose-invert">
|
||||
{{ t('contact') }}
|
||||
{{ t('tool.contact') }}
|
||||
</p>
|
||||
<div class="flex gap-2 flex-wrap my-2">
|
||||
<UButton
|
||||
@@ -27,17 +27,3 @@ const { t } = useI18n({ useScope: 'local' })
|
||||
</div>
|
||||
</section>
|
||||
</template>
|
||||
|
||||
<i18n lang="json">
|
||||
{
|
||||
"en": {
|
||||
"contact": "There are different ways to contact me. Here is a list:"
|
||||
},
|
||||
"fr": {
|
||||
"contact": "Il existe différents façons de me contacter. Voici une liste :"
|
||||
},
|
||||
"es": {
|
||||
"contact": "Existen diferentes formas de contactarme. Aquí hay una lista:"
|
||||
}
|
||||
}
|
||||
</i18n>
|
||||
|
||||
@@ -1,33 +1,10 @@
|
||||
<script lang="ts" setup>
|
||||
const { t } = useI18n({ useScope: 'local' })
|
||||
const { t } = useI18n()
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<section class="prose dark:prose-invert">
|
||||
<h3>{{ t('duplicated.title') }}</h3>
|
||||
<p>{{ t('duplicated.description') }}</p>
|
||||
<h3>{{ t('tool.duplicated.title') }}</h3>
|
||||
<p>{{ t('tool.duplicated.description') }}</p>
|
||||
</section>
|
||||
</template>
|
||||
|
||||
<i18n lang="json">
|
||||
{
|
||||
"en": {
|
||||
"duplicated": {
|
||||
"title": "⚠️ I detected duplicated messages",
|
||||
"description": "I have therefore removed the older duplicated messages to lighten the application."
|
||||
}
|
||||
},
|
||||
"fr": {
|
||||
"duplicated": {
|
||||
"title": "⚠️ J'ai détecté des messages dupliqués",
|
||||
"description": "J'ai donc supprimé les anciens messages dupliqués pour alléger l'application."
|
||||
}
|
||||
},
|
||||
"es": {
|
||||
"duplicated": {
|
||||
"title": "⚠️ He detectado mensajes duplicados",
|
||||
"description": "Por lo tanto, eliminé los mensajes duplicados más antiguos para aligerar la aplicación."
|
||||
}
|
||||
}
|
||||
}
|
||||
</i18n>
|
||||
|
||||
@@ -1,33 +1,20 @@
|
||||
<script lang="ts" setup>
|
||||
import { en, es, fr } from '@nuxt/ui/locale'
|
||||
|
||||
const { locale, setLocale, locales, t } = useI18n({ useScope: 'local' })
|
||||
const currentLocale = computed(() => locales.value.filter(l => l.code === locale.value)[0])
|
||||
watch(locale, () => changeLocale(locale.value))
|
||||
|
||||
async function changeLocale(newLocale: string | undefined) {
|
||||
document.body.style.animation = 'switch-on .2s'
|
||||
await new Promise(resolve => setTimeout(resolve, 200))
|
||||
const { locale, setLocale, t } = useI18n()
|
||||
|
||||
async function changeLocale(newLocale: string) {
|
||||
await setLocale(newLocale as 'en' | 'fr' | 'es')
|
||||
document.body.style.animation = 'switch-off .5s'
|
||||
|
||||
await new Promise(resolve => setTimeout(resolve, 200))
|
||||
document.body.style.animation = ''
|
||||
}
|
||||
|
||||
defineShortcuts({
|
||||
l: () => locale.value = currentLocale.value!.code === 'en' ? 'fr' : currentLocale.value!.code === 'fr' ? 'es' : 'en',
|
||||
})
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<section class="space-y-4">
|
||||
<div class="prose dark:prose-invert">
|
||||
<p>{{ t('response.control') }}</p>
|
||||
<p>{{ t('tool.language.response.control') }}</p>
|
||||
<ul>
|
||||
<li>{{ t('response.choose') }}</li>
|
||||
<i18n-t keypath="response.kbd" tag="li">
|
||||
<li>{{ t('tool.language.response.choose') }}</li>
|
||||
<i18n-t keypath="tool.language.response.kbd" tag="li">
|
||||
<template #kbd>
|
||||
<UKbd>L</UKbd>
|
||||
</template>
|
||||
@@ -37,39 +24,10 @@ defineShortcuts({
|
||||
<ClientOnly>
|
||||
<UCard variant="outline" class="md:max-w-1/2 m-1 shadow-sm" :ui="{ body: 'flex justify-between items-center gap-2' }">
|
||||
<p class="block">
|
||||
{{ t('change') }}
|
||||
{{ t('tool.language.change') }}
|
||||
</p>
|
||||
<ULocaleSelect v-model="locale" :locales="[en, es, fr]" @update:model-value="changeLocale" />
|
||||
</UCard>
|
||||
</ClientOnly>
|
||||
</section>
|
||||
</template>
|
||||
|
||||
<i18n lang="json">
|
||||
{
|
||||
"en": {
|
||||
"change": "Change language",
|
||||
"response": {
|
||||
"control": "I added the language switch control above so you can switch directly.",
|
||||
"choose": "Choose English, French, or Spanish",
|
||||
"kbd": "Press {kbd} on your keyboard"
|
||||
}
|
||||
},
|
||||
"fr": {
|
||||
"change": "Changer de langue",
|
||||
"response": {
|
||||
"control": "J'ai ajouté le contrôle de changement de langue ci-dessus pour que vous puissiez changer directement.",
|
||||
"choose": "Choisissez Anglais, Français ou Espagnol",
|
||||
"kbd": "Appuyez sur {kbd} de votre clavier"
|
||||
}
|
||||
},
|
||||
"es": {
|
||||
"change": "Cambiar idioma",
|
||||
"response": {
|
||||
"control": "He añadido el control de cambio de idioma arriba para que puedas cambiar directamente.",
|
||||
"choose": "Elige Inglés, Francés o Español",
|
||||
"kbd": "Presiona {kbd} en tu teclado"
|
||||
}
|
||||
}
|
||||
}
|
||||
</i18n>
|
||||
|
||||
@@ -1,11 +1,7 @@
|
||||
<script lang="ts" setup>
|
||||
useI18n({ useScope: 'local' })
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<section>
|
||||
<div class="prose dark:prose-invert mb-4">
|
||||
<i18n-t keypath="location" tag="p">
|
||||
<i18n-t keypath="tool.location" tag="p">
|
||||
<template #location>
|
||||
<strong>Paris, France 🇫🇷</strong>
|
||||
</template>
|
||||
@@ -19,17 +15,3 @@ useI18n({ useScope: 'local' })
|
||||
</div>
|
||||
</section>
|
||||
</template>
|
||||
|
||||
<i18n lang="json">
|
||||
{
|
||||
"en": {
|
||||
"location": "I'm currently based in {location}. See below for more details."
|
||||
},
|
||||
"fr": {
|
||||
"location": "Je suis actuellement basé à {location}. Voir ci-dessous pour plus de détails."
|
||||
},
|
||||
"es": {
|
||||
"location": "Actualmente estoy basado en {location}. Consulta más detalles a continuación."
|
||||
}
|
||||
}
|
||||
</i18n>
|
||||
|
||||
@@ -3,9 +3,7 @@ import type { Stats } from '~~/types'
|
||||
|
||||
const { data: stats } = await useAsyncData<Stats>('stats', () => $fetch('/api/stats'))
|
||||
|
||||
const { locale, locales, t } = useI18n({
|
||||
useScope: 'local',
|
||||
})
|
||||
const { locale, locales, t } = useI18n()
|
||||
const currentLocale = computed(() => locales.value.find(l => l.code === locale.value))
|
||||
|
||||
const time = useTimeAgo(new Date(stats.value!.coding.data.range.start) ?? new Date()).value.split(' ')[0]
|
||||
@@ -17,7 +15,7 @@ const hours = usePrecision(stats.value!.coding.data.grand_total.total_seconds_in
|
||||
<section v-if="stats && stats.coding && stats.editors && stats.os && stats.languages && time && date && hours">
|
||||
<div class="prose dark:prose-invert">
|
||||
<i18n-t
|
||||
keypath="stats"
|
||||
keypath="tool.stats.main"
|
||||
tag="p"
|
||||
>
|
||||
<template #time>
|
||||
@@ -25,28 +23,28 @@ const hours = usePrecision(stats.value!.coding.data.grand_total.total_seconds_in
|
||||
</template>
|
||||
<template #date>
|
||||
<HoverText
|
||||
:hover="t('tooltip.date')"
|
||||
:hover="t('tool.stats.tooltip.date')"
|
||||
:text="date"
|
||||
/>
|
||||
</template>
|
||||
<template #hours>
|
||||
<HoverText
|
||||
:hover="t('tooltip.hours')"
|
||||
:hover="t('tool.stats.tooltip.hours')"
|
||||
:text="hours"
|
||||
/>
|
||||
</template>
|
||||
</i18n-t>
|
||||
<ul>
|
||||
<i18n-t
|
||||
keypath="editors"
|
||||
keypath="tool.stats.editors"
|
||||
tag="li"
|
||||
>
|
||||
<template #editors>
|
||||
{{ stats.editors.data.slice(0, 2).map(editor => `${editor.name} (${editor.percent}%)`).join(t('separator')) }}
|
||||
{{ stats.editors.data.slice(0, 2).map(editor => `${editor.name} (${editor.percent}%)`).join(t('tool.stats.separator')) }}
|
||||
</template>
|
||||
</i18n-t>
|
||||
<i18n-t
|
||||
keypath="os"
|
||||
keypath="tool.stats.os"
|
||||
tag="li"
|
||||
>
|
||||
<template
|
||||
@@ -57,52 +55,14 @@ const hours = usePrecision(stats.value!.coding.data.grand_total.total_seconds_in
|
||||
</template>
|
||||
</i18n-t>
|
||||
<i18n-t
|
||||
keypath="languages"
|
||||
keypath="tool.stats.languages"
|
||||
tag="li"
|
||||
>
|
||||
<template #languages>
|
||||
{{ stats.languages.data.slice(0, 2).map(language => `${language.name} (${language.percent}%)`).join(t('separator')) }}
|
||||
{{ stats.languages.data.slice(0, 2).map(language => `${language.name} (${language.percent}%)`).join(t('tool.stats.separator')) }}
|
||||
</template>
|
||||
</i18n-t>
|
||||
</ul>
|
||||
</div>
|
||||
</section>
|
||||
</template>
|
||||
|
||||
<i18n lang="json">
|
||||
{
|
||||
"en": {
|
||||
"stats": "I collect some data for {time} years, started the {date}. I've coded for a total of {hours} hours.",
|
||||
"editors": "My top editors are {editors}",
|
||||
"os": "My best OS is {os}",
|
||||
"languages": "My favorite languages are {languages}",
|
||||
"separator": " and ",
|
||||
"tooltip": {
|
||||
"date": "That was so long ago 🫣",
|
||||
"hours": "That's a lot 😮"
|
||||
}
|
||||
},
|
||||
"fr": {
|
||||
"stats": "Je collecte des données depuis {time} ans, commencé le {date}. J'ai codé un total de {hours} heures.",
|
||||
"editors": "Mes meilleurs éditeurs sont {editors}",
|
||||
"os": "Mon meilleur OS est {os}",
|
||||
"languages": "Mes langages préférés sont {languages}",
|
||||
"separator": " et ",
|
||||
"tooltip": {
|
||||
"date": "C'était il y a si longtemps 🫣",
|
||||
"hours": "C'est beaucoup 😮"
|
||||
}
|
||||
},
|
||||
"es": {
|
||||
"stats": "Recopilo datos desde hace {time} años, empecé el {date}. He programado durante un total de {hours} horas.",
|
||||
"editors": "Mis mejores editores son {editors}.",
|
||||
"os": "Mi mejor OS es {os}.",
|
||||
"languages": "Mis lenguajes favoritos son {languages}.",
|
||||
"separator": " y ",
|
||||
"tooltip": {
|
||||
"date": "hace tato tiempo…🫣",
|
||||
"hours": "es mucho 😮"
|
||||
}
|
||||
}
|
||||
}
|
||||
</i18n>
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
<script lang="ts" setup>
|
||||
const { t } = useI18n({ useScope: 'local' })
|
||||
const { t } = useI18n()
|
||||
const { dark, toggleDark } = useTheme()
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<section class="space-y-4">
|
||||
<div class="prose dark:prose-invert">
|
||||
<p>{{ t('response.control') }}</p>
|
||||
<p>{{ t('tool.theme.response.control') }}</p>
|
||||
<ul>
|
||||
<li>{{ t('response.choose') }}</li>
|
||||
<i18n-t keypath="response.kbd" tag="li">
|
||||
<li>{{ t('tool.theme.response.choose') }}</li>
|
||||
<i18n-t keypath="tool.theme.response.kbd" tag="li">
|
||||
<template #kbd>
|
||||
<UKbd>T</UKbd>
|
||||
</template>
|
||||
@@ -21,10 +21,10 @@ const { dark, toggleDark } = useTheme()
|
||||
<div class="flex items-center gap-2">
|
||||
<UIcon v-if="dark" name="i-ph-moon-duotone" size="24" />
|
||||
<UIcon v-else name="i-ph-sun-duotone" size="24" />
|
||||
<span>{{ t('switch') }}</span>
|
||||
<span>{{ t('tool.theme.switch') }}</span>
|
||||
</div>
|
||||
<div class="flex items-center gap-2">
|
||||
<span class="text-xs text-muted">{{ t('light') }}</span>
|
||||
<span class="text-xs text-muted">{{ t('tool.theme.light') }}</span>
|
||||
<USwitch
|
||||
v-model="dark"
|
||||
color="neutral"
|
||||
@@ -32,48 +32,13 @@ const { dark, toggleDark } = useTheme()
|
||||
aria-label="switch theme"
|
||||
@click.prevent="toggleDark"
|
||||
/>
|
||||
<span class="text-xs text-muted">{{ t('dark') }}</span>
|
||||
<span class="text-xs text-muted">{{ t('tool.theme.dark') }}</span>
|
||||
</div>
|
||||
</UCard>
|
||||
</ClientOnly>
|
||||
</section>
|
||||
</template>
|
||||
|
||||
<i18n lang="json">
|
||||
{
|
||||
"en": {
|
||||
"switch": "Switch theme",
|
||||
"light": "Light",
|
||||
"dark": "Dark",
|
||||
"response": {
|
||||
"control": "I added the theme toggle control above so you can switch directly.",
|
||||
"choose": "Choose Light (sun icon) or Dark (moon icon)",
|
||||
"kbd": "Press {kbd} on your keyboard"
|
||||
}
|
||||
},
|
||||
"fr": {
|
||||
"switch": "Changer de thème",
|
||||
"light": "Clair",
|
||||
"dark": "Sombre",
|
||||
"response": {
|
||||
"control": "J'ai ajouté le contrôle de basculement de thème ci-dessus afin que vous puissiez basculer directement.",
|
||||
"choose": "Choisissez Clair (icône de soleil) ou Sombre (icône de lune)",
|
||||
"kbd": "Appuyez sur {kbd} sur votre clavier"
|
||||
}
|
||||
},
|
||||
"es": {
|
||||
"switch": "Cambiar tema",
|
||||
"light": "Claro",
|
||||
"dark": "Oscuro",
|
||||
"response": {
|
||||
"control": "He añadido el control de alternancia de tema arriba para que puedas cambiar directamente.",
|
||||
"choose": "Elige Claro (icono de sol) u Oscuro (icono de luna)",
|
||||
"kbd": "Presiona {kbd} en tu teclado"
|
||||
}
|
||||
}
|
||||
}
|
||||
</i18n>
|
||||
|
||||
<style scoped>
|
||||
::view-transition-old(root),
|
||||
::view-transition-new(root) {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<script lang="ts" setup>
|
||||
const { t } = useI18n({ useScope: 'local' })
|
||||
const { t } = useI18n()
|
||||
|
||||
const { data: items } = await useAsyncData('uses', async () => await queryCollection('uses').all())
|
||||
const { data: categories } = await useAsyncData('categories', async () => await queryCollection('usesCategories').all())
|
||||
@@ -8,7 +8,7 @@ const { data: categories } = await useAsyncData('categories', async () => await
|
||||
<template>
|
||||
<section>
|
||||
<div class="prose dark:prose-invert">
|
||||
<p>{{ t('description') }}</p>
|
||||
<p>{{ t('uses') }}</p>
|
||||
</div>
|
||||
<div v-if="items" class="space-y-12 mt-4">
|
||||
<UsesList v-for="category in categories" :key="category.id" :title="category.name">
|
||||
@@ -21,17 +21,3 @@ const { data: categories } = await useAsyncData('categories', async () => await
|
||||
</div>
|
||||
</section>
|
||||
</template>
|
||||
|
||||
<i18n lang="json">
|
||||
{
|
||||
"en": {
|
||||
"description": "Here is a comprehensive list of all the software I use, gadgets I love, and other things I recommend."
|
||||
},
|
||||
"fr": {
|
||||
"description": "Voici une grande liste de tous mes logiciels que j'utilise, gadgets que j'adore et autres choses que je recommande."
|
||||
},
|
||||
"es": {
|
||||
"description": "Aquí hay una gran lista de todo el software que uso, gadgets que amo y otras cosas que recomiendo."
|
||||
}
|
||||
}
|
||||
</i18n>
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
<script setup lang="ts">
|
||||
import type { Weather } from '~~/types'
|
||||
|
||||
const { t } = useI18n({ useScope: 'local' })
|
||||
|
||||
const { t } = useI18n()
|
||||
const { data: weather } = await useAsyncData<Weather>('weather', () =>
|
||||
$fetch('/api/weather'))
|
||||
</script>
|
||||
@@ -13,7 +12,7 @@ const { data: weather } = await useAsyncData<Weather>('weather', () =>
|
||||
<div class="flex gap-4 items-center">
|
||||
<UIcon name="i-ph-cloud-duotone" size="24" />
|
||||
<h3 class="text-lg font-semibold">
|
||||
{{ t('weather') }}
|
||||
{{ t('tool.weather.main') }}
|
||||
</h3>
|
||||
</div>
|
||||
</template>
|
||||
@@ -30,7 +29,7 @@ const { data: weather } = await useAsyncData<Weather>('weather', () =>
|
||||
<div class="grid grid-cols-3 gap-2 mt-4">
|
||||
<div class="bg-zinc-200 dark:bg-zinc-800 rounded-md p-2 text-center">
|
||||
<p class="text-sm text-zinc-800 dark:text-zinc-400">
|
||||
{{ t('high') }}
|
||||
{{ t('tool.weather.high') }}
|
||||
</p>
|
||||
<p class="font-semibold">
|
||||
{{ weather.temp_max }}°C
|
||||
@@ -38,7 +37,7 @@ const { data: weather } = await useAsyncData<Weather>('weather', () =>
|
||||
</div>
|
||||
<div class="bg-zinc-200 dark:bg-zinc-800 rounded-md p-2 text-center">
|
||||
<p class="text-sm text-zinc-800 dark:text-zinc-400">
|
||||
{{ t('low') }}
|
||||
{{ t('tool.weather.low') }}
|
||||
</p>
|
||||
<p class="font-semibold">
|
||||
{{ weather.temp_min }}°C
|
||||
@@ -46,7 +45,7 @@ const { data: weather } = await useAsyncData<Weather>('weather', () =>
|
||||
</div>
|
||||
<div class="bg-zinc-200 dark:bg-zinc-800 rounded-md p-2 text-center">
|
||||
<p class="text-sm text-zinc-800 dark:text-zinc-400">
|
||||
{{ t('humidity') }}
|
||||
{{ t('tool.weather.humidity') }}
|
||||
</p>
|
||||
<p class="font-semibold">
|
||||
{{ weather.humidity }}%
|
||||
@@ -58,41 +57,12 @@ const { data: weather } = await useAsyncData<Weather>('weather', () =>
|
||||
<template #footer>
|
||||
<div class="flex items-center justify-between">
|
||||
<p class="text-sm text-zinc-600 dark:text-zinc-400">
|
||||
{{ t('wind') }}: {{ weather.wind }} km/h
|
||||
{{ t('tool.weather.wind') }}: {{ weather.wind }} km/h
|
||||
</p>
|
||||
<p class="text-sm text-zinc-600 dark:text-zinc-400">
|
||||
{{ t('powered_by') }}
|
||||
{{ t('tool.weather.powered_by') }}
|
||||
</p>
|
||||
</div>
|
||||
</template>
|
||||
</UCard>
|
||||
</template>
|
||||
|
||||
<i18n lang="json">
|
||||
{
|
||||
"en": {
|
||||
"weather": "Weather",
|
||||
"powered_by": "Powered by OpenWeatherMap",
|
||||
"low": "Low",
|
||||
"high": "High",
|
||||
"humidity": "Humidity",
|
||||
"wind": "Wind"
|
||||
},
|
||||
"fr": {
|
||||
"weather": "Météo",
|
||||
"powered_by": "Alimenté par OpenWeatherMap",
|
||||
"low": "Bas",
|
||||
"high": "Haut",
|
||||
"humidity": "Humidité",
|
||||
"wind": "Vent"
|
||||
},
|
||||
"es": {
|
||||
"weather": "Tiempo",
|
||||
"powered_by": "Impulsado por OpenWeatherMap",
|
||||
"low": "Bajo",
|
||||
"high": "Alto",
|
||||
"humidity": "Humedad",
|
||||
"wind": "Viento"
|
||||
}
|
||||
}
|
||||
</i18n>
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
import { ChatFetchState, ChatMessages, ChatSender, ChatType } from '~~/types/chat'
|
||||
|
||||
export function useChat(t: any) {
|
||||
const messages = computed(() => ChatMessages(t))
|
||||
|
||||
export function useChat() {
|
||||
const { addMessage, checkForDuplicateMessages, deleteMessage, cleanDuplicatedMessages } = useChatStore()
|
||||
|
||||
async function submitMessage(type: ChatType, prompt: string, fetchStates: ChatFetchState[]) {
|
||||
@@ -34,7 +32,7 @@ export function useChat(t: any) {
|
||||
}
|
||||
|
||||
return {
|
||||
messages,
|
||||
messages: ChatMessages,
|
||||
submitMessage,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,8 +7,6 @@ useSeoMeta({
|
||||
})
|
||||
|
||||
const { messages } = useChatStore()
|
||||
const { t } = useI18n({ useScope: 'local' })
|
||||
|
||||
const parents = useTemplateRef('parents')
|
||||
const { height } = useElementBounding(parents)
|
||||
|
||||
@@ -27,7 +25,7 @@ watch(
|
||||
<div ref="parents" class="space-y-8 my-32">
|
||||
<ChatMessageContainer
|
||||
:message="{
|
||||
content: t('init'),
|
||||
content: 'main.init',
|
||||
id: 0,
|
||||
sender: ChatSender.ARTHUR,
|
||||
state: ChatState.SENT,
|
||||
@@ -37,7 +35,7 @@ watch(
|
||||
<ChatMessageContainer
|
||||
:message="{
|
||||
id: 0,
|
||||
content: t('question'),
|
||||
content: 'main.question',
|
||||
sender: ChatSender.USER,
|
||||
state: ChatState.SENT,
|
||||
type: ChatType.INIT,
|
||||
@@ -45,7 +43,7 @@ watch(
|
||||
/>
|
||||
<ChatMessageContainer
|
||||
:message="{
|
||||
content: t('about'),
|
||||
content: 'main.about',
|
||||
id: 0,
|
||||
sender: ChatSender.ARTHUR,
|
||||
state: ChatState.SENT,
|
||||
@@ -60,24 +58,3 @@ watch(
|
||||
</div>
|
||||
</main>
|
||||
</template>
|
||||
|
||||
<i18n lang="json">
|
||||
{
|
||||
"en": {
|
||||
"init": "Hey, welcome to ArtChat. I'm an AI assistant that knows everything about Arthur Danjou. Ask me anything and I'll answer as if I were him!",
|
||||
"question": "Awesome! Tell me a bit more about you.",
|
||||
"about": "I'm a student in Mathematics and Statistics at Université Paris-Dauphine in France. With a deep understanding of emerging technologies, I'm at the heart of a rapidly expanding field. My background in mathematics gives me an edge in understanding the concepts and theories behind these technologies and designing them effectively."
|
||||
},
|
||||
"fr": {
|
||||
|
||||
"init": "Salut, bienvenue sur ArtChat. Je suis un assistant IA connaissant tout sur Arthur Danjou. Pose moi des questions et j'y répondrai comme si j'étais lui.",
|
||||
"question": "Génial ! Parle moi un peu plus de toi.",
|
||||
"about": "Je suis étudiant en Mathématiques et en Statistiques à l'Université Paris-Dauphine en France. Avec une compréhension approfondie des technologies émergentes, je suis au cœur d'un domaine en pleine expansion. Mon parcours en mathématiques me donne un avantage pour comprendre les concepts et les théories derrière ces technologies et pour les concevoir efficacement."
|
||||
},
|
||||
"es": {
|
||||
"init": "Hola, bienvenido a ArtChat. Soy un asistente de IA que sabe todo sobre Arthur Danjou. Hazme preguntas y responderé como si fuera él.",
|
||||
"question": "¡Genial! Háblame un poco más sobre ti.",
|
||||
"about": "Soy estudiante de Matemáticas y Estadísticas en la Universidad Paris-Dauphine en Francia. Con una comprensión profunda de las tecnologías emergentes, estoy en el corazón de un campo en rápida expansión. Mi formación en matemáticas me da una ventaja para comprender los conceptos y teorías detrás de estas tecnologías y para diseñarlas de manera efectiva."
|
||||
}
|
||||
}
|
||||
</i18n>
|
||||
|
||||
124
bun.lock
124
bun.lock
@@ -21,7 +21,7 @@
|
||||
"@tailwindcss/typography": "^0.5.16",
|
||||
"better-sqlite3": "^12.2.0",
|
||||
"eslint": "^9.0.0",
|
||||
"nuxt": "^4.0.3",
|
||||
"nuxt": "4.1.0",
|
||||
"rehype-katex": "^7.0.1",
|
||||
"remark-math": "^6.0.0",
|
||||
"remark-parse": "^11.0.0",
|
||||
@@ -339,7 +339,7 @@
|
||||
|
||||
"@nuxt/ui": ["@nuxt/ui@4.0.0-alpha.1", "", { "dependencies": { "@ai-sdk/vue": "^2.0.29", "@iconify/vue": "^5.0.0", "@internationalized/date": "^3.9.0", "@internationalized/number": "^3.6.5", "@nuxt/fonts": "^0.11.4", "@nuxt/icon": "^2.0.0", "@nuxt/kit": "^4.0.3", "@nuxt/schema": "^4.0.3", "@nuxtjs/color-mode": "^3.5.2", "@standard-schema/spec": "^1.0.0", "@tailwindcss/postcss": "^4.1.12", "@tailwindcss/vite": "^4.1.12", "@tanstack/vue-table": "^8.21.3", "@unhead/vue": "^2.0.14", "@vueuse/core": "^13.8.0", "@vueuse/integrations": "^13.8.0", "colortranslator": "^5.0.0", "consola": "^3.4.2", "defu": "^6.1.4", "embla-carousel-auto-height": "^8.6.0", "embla-carousel-auto-scroll": "^8.6.0", "embla-carousel-autoplay": "^8.6.0", "embla-carousel-class-names": "^8.6.0", "embla-carousel-fade": "^8.6.0", "embla-carousel-vue": "^8.6.0", "embla-carousel-wheel-gestures": "^8.1.0", "fuse.js": "^7.1.0", "hookable": "^5.5.3", "knitwork": "^1.2.0", "magic-string": "^0.30.18", "mlly": "^1.8.0", "motion-v": "^1.7.0", "ohash": "^2.0.11", "pathe": "^2.0.3", "reka-ui": "2.5.0", "scule": "^1.3.0", "tailwind-merge": "^3.3.1", "tailwind-variants": "^3.1.0", "tailwindcss": "^4.1.12", "tinyglobby": "^0.2.14", "unplugin": "^2.3.10", "unplugin-auto-import": "^20.0.0", "unplugin-vue-components": "^29.0.0", "vaul-vue": "0.4.1", "vue-component-type-helpers": "^3.0.6" }, "peerDependencies": { "@inertiajs/vue3": "^2.0.7", "joi": "^17.13.0", "superstruct": "^2.0.0", "typescript": "^5.6.3", "valibot": "^1.0.0", "vue-router": "^4.5.0", "yup": "^1.6.0", "zod": "^3.24.0 || ^4.0.0" }, "optionalPeers": ["@inertiajs/vue3", "joi", "superstruct", "valibot", "vue-router", "yup", "zod"], "bin": { "nuxt-ui": "cli/index.mjs" } }, "sha512-kjCtWrkDr79nAPR6aMz4ot1Je+K4vnGzSszjGaXBsZyBz56a2Z7NFfkiAwe5UzdHmdIBJJk/ser8Xzz2+TY1ug=="],
|
||||
|
||||
"@nuxt/vite-builder": ["@nuxt/vite-builder@4.0.3", "", { "dependencies": { "@nuxt/kit": "4.0.3", "@rollup/plugin-replace": "^6.0.2", "@vitejs/plugin-vue": "^6.0.1", "@vitejs/plugin-vue-jsx": "^5.0.1", "autoprefixer": "^10.4.21", "consola": "^3.4.2", "cssnano": "^7.1.0", "defu": "^6.1.4", "esbuild": "^0.25.8", "escape-string-regexp": "^5.0.0", "exsolve": "^1.0.7", "get-port-please": "^3.2.0", "h3": "^1.15.4", "jiti": "^2.5.1", "knitwork": "^1.2.0", "magic-string": "^0.30.17", "mlly": "^1.7.4", "mocked-exports": "^0.1.1", "pathe": "^2.0.3", "pkg-types": "^2.2.0", "postcss": "^8.5.6", "rollup-plugin-visualizer": "^6.0.3", "std-env": "^3.9.0", "ufo": "^1.6.1", "unenv": "^2.0.0-rc.19", "vite": "^7.0.6", "vite-node": "^3.2.4", "vite-plugin-checker": "^0.10.2", "vue-bundle-renderer": "^2.1.2" }, "peerDependencies": { "vue": "^3.3.4" } }, "sha512-1eKm51V3Ine4DjxLUDnPIKewuIZwJjGh1oMvY3sAJ5RtdSngRonqkaoGV4EWtLH7cO+oTBbbdVg5O95chYYcLQ=="],
|
||||
"@nuxt/vite-builder": ["@nuxt/vite-builder@4.1.0", "", { "dependencies": { "@nuxt/kit": "4.1.0", "@rollup/plugin-replace": "^6.0.2", "@vitejs/plugin-vue": "^6.0.1", "@vitejs/plugin-vue-jsx": "^5.1.1", "autoprefixer": "^10.4.21", "consola": "^3.4.2", "cssnano": "^7.1.1", "defu": "^6.1.4", "esbuild": "^0.25.9", "escape-string-regexp": "^5.0.0", "exsolve": "^1.0.7", "get-port-please": "^3.2.0", "h3": "^1.15.4", "jiti": "^2.5.1", "knitwork": "^1.2.0", "magic-string": "^0.30.18", "mlly": "^1.8.0", "mocked-exports": "^0.1.1", "pathe": "^2.0.3", "pkg-types": "^2.3.0", "postcss": "^8.5.6", "rollup-plugin-visualizer": "^6.0.3", "std-env": "^3.9.0", "ufo": "^1.6.1", "unenv": "^2.0.0-rc.19", "vite": "^7.1.4", "vite-node": "^3.2.4", "vite-plugin-checker": "^0.10.3", "vue-bundle-renderer": "^2.1.2" }, "peerDependencies": { "vue": "^3.3.4" } }, "sha512-eya04QZ+j6n+Ru3zyYDGrXGKuBdgBro2FrDiQl5faKK9fK4dqNYuBGeYNKmBHNZg6fOnUUEaGrZmK/EfrLBmcw=="],
|
||||
|
||||
"@nuxtjs/color-mode": ["@nuxtjs/color-mode@3.5.2", "", { "dependencies": { "@nuxt/kit": "^3.13.2", "pathe": "^1.1.2", "pkg-types": "^1.2.1", "semver": "^7.6.3" } }, "sha512-cC6RfgZh3guHBMLLjrBB2Uti5eUoGM9KyauOaYS9ETmxNWBMTvpgjvSiSJp1OFljIXPIqVTJ3xtJpSNZiO3ZaA=="],
|
||||
|
||||
@@ -351,35 +351,35 @@
|
||||
|
||||
"@opentelemetry/api": ["@opentelemetry/api@1.9.0", "", {}, "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg=="],
|
||||
|
||||
"@oxc-minify/binding-android-arm64": ["@oxc-minify/binding-android-arm64@0.80.0", "", { "os": "android", "cpu": "arm64" }, "sha512-OLelUqrLkSJwNyjLZHgpKy9n0+zHQiMX8A0GFovJIwhgfPxjT/mt2JMnGkSoDlTnf9cw6nvALFzCsJZLTyl8gg=="],
|
||||
"@oxc-minify/binding-android-arm64": ["@oxc-minify/binding-android-arm64@0.86.0", "", { "os": "android", "cpu": "arm64" }, "sha512-jOgbDgp6A1ax9sxHPRHBxUpxIzp2VTgbZ/6HPKIVUJ7IQqKVsELKFXIOEbCDlb1rUhZZtGf53MFypXf72kR5eQ=="],
|
||||
|
||||
"@oxc-minify/binding-darwin-arm64": ["@oxc-minify/binding-darwin-arm64@0.80.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-7vJjhKHGfFVit3PCerbnrXQI0XgmmgV5HTNxlNsvxcmjPRIoYVkuwwRkiBsxO4RiBwvRRkAFPop3fY/gpuflJA=="],
|
||||
"@oxc-minify/binding-darwin-arm64": ["@oxc-minify/binding-darwin-arm64@0.86.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-LQkjIHhIzxVYnxfC2QV7MMe4hgqIbwK07j+zzEsNWWfdmWABw11Aa6FP0uIvERmoxstzsDT77F8c/+xhxswKiw=="],
|
||||
|
||||
"@oxc-minify/binding-darwin-x64": ["@oxc-minify/binding-darwin-x64@0.80.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-jKnRVtwVhspd8djNSQMICOZe6gQBwXTcfHylZ2Azw4ZXvqTyxDqgcEGgx0WyaqvUTLHdX42nJCHRHHy6MOVPOg=="],
|
||||
"@oxc-minify/binding-darwin-x64": ["@oxc-minify/binding-darwin-x64@0.86.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-AuLkeXIvJ535qOhFzZfHBkcEZA59SN1vKUblW2oN+6ClZfIMru0I2wr0cCHA9QDxIVDkI7swDu29qcn2AqKdrg=="],
|
||||
|
||||
"@oxc-minify/binding-freebsd-x64": ["@oxc-minify/binding-freebsd-x64@0.80.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-iO7KjJsFpDtG5w8T6twTxLsvffn8PsjBbBUwjzVPfSD4YlsHDd0GjIVYcP+1TXzLRlV4zWmd67SOBnNyreSGBg=="],
|
||||
"@oxc-minify/binding-freebsd-x64": ["@oxc-minify/binding-freebsd-x64@0.86.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-UcXLcM8+iHW1EL+peHHV1HDBFUVdoxFMJC7HBc2U83q9oiF/K73TnAEgW/xteR+IvbV/9HD+cQsH+DX6oBXoQg=="],
|
||||
|
||||
"@oxc-minify/binding-linux-arm-gnueabihf": ["@oxc-minify/binding-linux-arm-gnueabihf@0.80.0", "", { "os": "linux", "cpu": "arm" }, "sha512-uwBdietv8USofOUAOcxyta14VbcJiFizQUMuCB9sLkK+Nh/CV5U2SVjsph5HlARGVu8V2DF+FXROD6sTl9DLiA=="],
|
||||
"@oxc-minify/binding-linux-arm-gnueabihf": ["@oxc-minify/binding-linux-arm-gnueabihf@0.86.0", "", { "os": "linux", "cpu": "arm" }, "sha512-UtSplQY10Idp//cLS5i2rFaunS71padZFavHLHygNAxJBt+37DPKDl/4kddpV6Kv2Mr6bhw2KpXGAVs0C3dIOw=="],
|
||||
|
||||
"@oxc-minify/binding-linux-arm-musleabihf": ["@oxc-minify/binding-linux-arm-musleabihf@0.80.0", "", { "os": "linux", "cpu": "arm" }, "sha512-6QAWCjH9in7JvpHRxX8M1IEkf+Eot82Q02xmikcACyJag26196XdVq2T9ITcwFtliozYxYP6yPQ5OzLoeeqdmg=="],
|
||||
"@oxc-minify/binding-linux-arm-musleabihf": ["@oxc-minify/binding-linux-arm-musleabihf@0.86.0", "", { "os": "linux", "cpu": "arm" }, "sha512-P5efCOl9QiwqqJHrw1Q+4ssexvOz+MAmgTmBorbdEM3WJdIHR1CWGDj4GqcvKBlwpBqt4XilOuoN0QD8dfl85A=="],
|
||||
|
||||
"@oxc-minify/binding-linux-arm64-gnu": ["@oxc-minify/binding-linux-arm64-gnu@0.80.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-1PxO983GNFSyvY6lpYpH3uA/5NHuei7CHExe+NSB+ZgQ1T/iBMjXxRml1Woedvi8odSSpZlivZxBiEojIcnfqw=="],
|
||||
"@oxc-minify/binding-linux-arm64-gnu": ["@oxc-minify/binding-linux-arm64-gnu@0.86.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-hwHahfs//g9iZLQmKldjQPmnpzq76eyHvfkmdnXXmPtwTHnwXL1hPlNbTIqakUirAsroBeQwXqzHm3I040R+mg=="],
|
||||
|
||||
"@oxc-minify/binding-linux-arm64-musl": ["@oxc-minify/binding-linux-arm64-musl@0.80.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-D2j5L9Z4OO42We0Lo2GkXT/AaNikzZJ8KZ9V2VVwu7kofI4RsO8kSu8ydWlqRlRdiAprmUpRZU/pNW0ZA7A68w=="],
|
||||
"@oxc-minify/binding-linux-arm64-musl": ["@oxc-minify/binding-linux-arm64-musl@0.86.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-S2dL24nxWqDCwrq48xlZBvhSIBcEWOu3aDOiaccP4q73PiTLrf6rm1M11J7vQNSRiH6ao9UKr7ZMsepCZcOyfA=="],
|
||||
|
||||
"@oxc-minify/binding-linux-riscv64-gnu": ["@oxc-minify/binding-linux-riscv64-gnu@0.80.0", "", { "os": "linux", "cpu": "none" }, "sha512-2AztlLcio5OGil70wjRLbxbjlfS1yCTzO+CYan49vfUOCXpwSWwwLD2WDzFokhEXAzf8epbbu7pruYk8qorRRg=="],
|
||||
"@oxc-minify/binding-linux-riscv64-gnu": ["@oxc-minify/binding-linux-riscv64-gnu@0.86.0", "", { "os": "linux", "cpu": "none" }, "sha512-itZ24A1a5NOw0ibbt6EYOHdBojfV4vbiC209d06Dwv5WLXtntHCjc8P4yfrCsC22uDmMPNkVa+UL+OM4mkUrwg=="],
|
||||
|
||||
"@oxc-minify/binding-linux-s390x-gnu": ["@oxc-minify/binding-linux-s390x-gnu@0.80.0", "", { "os": "linux", "cpu": "s390x" }, "sha512-5GMKARe4gYHhA7utM8qOgv3WM7KAXGZGG3Jhvk4UQSRBp0v6PKFmHmz8Q93+Ep8w1m4NqRL30Zk9CZHMH/qi5g=="],
|
||||
"@oxc-minify/binding-linux-s390x-gnu": ["@oxc-minify/binding-linux-s390x-gnu@0.86.0", "", { "os": "linux", "cpu": "s390x" }, "sha512-/nJAwS/uit19qXNpaOybf7GYJI7modbXYVZ8q1pIFdxs6HkhZLxS1ZvcIzY3W75+37u+uKeZ4MbygawAN8kQpQ=="],
|
||||
|
||||
"@oxc-minify/binding-linux-x64-gnu": ["@oxc-minify/binding-linux-x64-gnu@0.80.0", "", { "os": "linux", "cpu": "x64" }, "sha512-iw45N+OVnPioRQXLHfrsqEcTpydcGSHLphilS3aSpc4uVKnOqCybskKnbEnxsIJqHWbzDZeJgzuRuQa7EhNcqg=="],
|
||||
"@oxc-minify/binding-linux-x64-gnu": ["@oxc-minify/binding-linux-x64-gnu@0.86.0", "", { "os": "linux", "cpu": "x64" }, "sha512-3qnWZB2cOj5Em/uEJqJ1qP/8lxtoi/Rf1U8fmdLzPW5zIaiTRUr/LklB4aJ+Vc/GU5g3HX5nFPQG3ZnEV3Ktzg=="],
|
||||
|
||||
"@oxc-minify/binding-linux-x64-musl": ["@oxc-minify/binding-linux-x64-musl@0.80.0", "", { "os": "linux", "cpu": "x64" }, "sha512-4+dhYznVM+L9Jh855JBbqVyDjwi3p8rpL7RfgN+Ee1oQMaZl2ZPy2shS1Kj56Xr5haTTVGdRKcIqTU8SuF37UQ=="],
|
||||
"@oxc-minify/binding-linux-x64-musl": ["@oxc-minify/binding-linux-x64-musl@0.86.0", "", { "os": "linux", "cpu": "x64" }, "sha512-+ZqYG8IQSRq9dR2djrnyzGHlmwGRKdueVjHYbEOwngb/4h/+FxAOaNUbsoUsCthAfXTrZHVXiQMTKJ32r7j2Bg=="],
|
||||
|
||||
"@oxc-minify/binding-wasm32-wasi": ["@oxc-minify/binding-wasm32-wasi@0.80.0", "", { "dependencies": { "@napi-rs/wasm-runtime": "^1.0.1" }, "cpu": "none" }, "sha512-flADFeNwC1/XsBBsESAigsJZyONEBloQO86Z38ZNzLSuMmpGRdwB9gUwlPCQgDRND/aB+tvR29hKTSuQoS3yrg=="],
|
||||
"@oxc-minify/binding-wasm32-wasi": ["@oxc-minify/binding-wasm32-wasi@0.86.0", "", { "dependencies": { "@napi-rs/wasm-runtime": "^1.0.3" }, "cpu": "none" }, "sha512-ixeSZW7jzd3g9fh8MoR9AzGLQxMCo//Q2mVpO2S/4NmcPtMaJEog85KzHULgUvbs70RqxTHEUqtVgpnc/5lMWA=="],
|
||||
|
||||
"@oxc-minify/binding-win32-arm64-msvc": ["@oxc-minify/binding-win32-arm64-msvc@0.80.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-wFjaEHzczIG9GqnL4c4C3PoThzf1640weQ1eEjh96TnHVdZmiNT5lpGoziJhO/c+g9+6sNrTdz9sqsiVgKwdOg=="],
|
||||
"@oxc-minify/binding-win32-arm64-msvc": ["@oxc-minify/binding-win32-arm64-msvc@0.86.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-cN309CnFVG8jeSRd+lQGnoMpZAVmz4bzH4fgqJM0NsMXVnFPGFceG/XiToLoBA1FigGQvkV0PJ7MQKWxBHPoUA=="],
|
||||
|
||||
"@oxc-minify/binding-win32-x64-msvc": ["@oxc-minify/binding-win32-x64-msvc@0.80.0", "", { "os": "win32", "cpu": "x64" }, "sha512-PjMi5B3MvOmfZk5LTie6g3RHhhujFwgR4VbCrWUNNwSzdxzy3dULPT4PWGVbpTas/QLJzXs/CXlQfnaMeJZHKQ=="],
|
||||
"@oxc-minify/binding-win32-x64-msvc": ["@oxc-minify/binding-win32-x64-msvc@0.86.0", "", { "os": "win32", "cpu": "x64" }, "sha512-YAqCKtZ9KKhSW73d/Oa9Uut0myYnCEUL2D0buMjJ4p0PuK1PQsMCJsmX4ku0PgK31snanZneRwtEjjNFYNdX2A=="],
|
||||
|
||||
"@oxc-parser/binding-android-arm64": ["@oxc-parser/binding-android-arm64@0.81.0", "", { "os": "android", "cpu": "arm64" }, "sha512-nGcfHGLkpy2R4Dm1TcpDDifVIZ0q50pvFkHgcbqLpdtbyM9NDlQp1SIgRdGtKPUXAVJz3LDV8hLYvCss8Bb5wg=="],
|
||||
|
||||
@@ -1737,7 +1737,7 @@
|
||||
|
||||
"nth-check": ["nth-check@2.1.1", "", { "dependencies": { "boolbase": "^1.0.0" } }, "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w=="],
|
||||
|
||||
"nuxt": ["nuxt@4.0.3", "", { "dependencies": { "@nuxt/cli": "^3.27.0", "@nuxt/devalue": "^2.0.2", "@nuxt/devtools": "^2.6.2", "@nuxt/kit": "4.0.3", "@nuxt/schema": "4.0.3", "@nuxt/telemetry": "^2.6.6", "@nuxt/vite-builder": "4.0.3", "@unhead/vue": "^2.0.13", "@vue/shared": "^3.5.18", "c12": "^3.2.0", "chokidar": "^4.0.3", "compatx": "^0.2.0", "consola": "^3.4.2", "cookie-es": "^2.0.0", "defu": "^6.1.4", "destr": "^2.0.5", "devalue": "^5.1.1", "errx": "^0.1.0", "esbuild": "^0.25.8", "escape-string-regexp": "^5.0.0", "estree-walker": "^3.0.3", "exsolve": "^1.0.7", "h3": "^1.15.4", "hookable": "^5.5.3", "ignore": "^7.0.5", "impound": "^1.0.0", "jiti": "^2.5.1", "klona": "^2.0.6", "knitwork": "^1.2.0", "magic-string": "^0.30.17", "mlly": "^1.7.4", "mocked-exports": "^0.1.1", "nanotar": "^0.2.0", "nitropack": "^2.12.4", "nypm": "^0.6.1", "ofetch": "^1.4.1", "ohash": "^2.0.11", "on-change": "^5.0.1", "oxc-minify": "^0.80.0", "oxc-parser": "^0.80.0", "oxc-transform": "^0.80.0", "oxc-walker": "^0.4.0", "pathe": "^2.0.3", "perfect-debounce": "^1.0.0", "pkg-types": "^2.2.0", "radix3": "^1.1.2", "scule": "^1.3.0", "semver": "^7.7.2", "std-env": "^3.9.0", "strip-literal": "^3.0.0", "tinyglobby": "0.2.14", "ufo": "^1.6.1", "ultrahtml": "^1.6.0", "uncrypto": "^0.1.3", "unctx": "^2.4.1", "unimport": "^5.2.0", "unplugin": "^2.3.5", "unplugin-vue-router": "^0.15.0", "unstorage": "^1.16.1", "untyped": "^2.0.0", "vue": "^3.5.18", "vue-bundle-renderer": "^2.1.2", "vue-devtools-stub": "^0.1.0", "vue-router": "^4.5.1" }, "peerDependencies": { "@parcel/watcher": "^2.1.0", "@types/node": ">=18.12.0" }, "optionalPeers": ["@parcel/watcher", "@types/node"], "bin": { "nuxi": "bin/nuxt.mjs", "nuxt": "bin/nuxt.mjs" } }, "sha512-skRFoxY/1nphk+viF5ZEDLNEMJse0J/U5+wAYtJfYQ86EcEpLMm9v78FwdCc5IioKpgmSda6ZlLxY1DgK+6SDw=="],
|
||||
"nuxt": ["nuxt@4.1.0", "", { "dependencies": { "@nuxt/cli": "^3.28.0", "@nuxt/devalue": "^2.0.2", "@nuxt/devtools": "^2.6.3", "@nuxt/kit": "4.1.0", "@nuxt/schema": "4.1.0", "@nuxt/telemetry": "^2.6.6", "@nuxt/vite-builder": "4.1.0", "@unhead/vue": "^2.0.14", "@vue/shared": "^3.5.20", "c12": "^3.2.0", "chokidar": "^4.0.3", "compatx": "^0.2.0", "consola": "^3.4.2", "cookie-es": "^2.0.0", "defu": "^6.1.4", "destr": "^2.0.5", "devalue": "^5.3.2", "errx": "^0.1.0", "esbuild": "^0.25.9", "escape-string-regexp": "^5.0.0", "estree-walker": "^3.0.3", "exsolve": "^1.0.7", "h3": "^1.15.4", "hookable": "^5.5.3", "ignore": "^7.0.5", "impound": "^1.0.0", "jiti": "^2.5.1", "klona": "^2.0.6", "knitwork": "^1.2.0", "magic-string": "^0.30.18", "mlly": "^1.8.0", "mocked-exports": "^0.1.1", "nanotar": "^0.2.0", "nitropack": "^2.12.4", "nypm": "^0.6.1", "ofetch": "^1.4.1", "ohash": "^2.0.11", "on-change": "^5.0.1", "oxc-minify": "^0.86.0", "oxc-parser": "^0.86.0", "oxc-transform": "^0.86.0", "oxc-walker": "^0.4.0", "pathe": "^2.0.3", "perfect-debounce": "^2.0.0", "pkg-types": "^2.3.0", "radix3": "^1.1.2", "scule": "^1.3.0", "semver": "^7.7.2", "std-env": "^3.9.0", "strip-literal": "^3.0.0", "tinyglobby": "0.2.14", "ufo": "^1.6.1", "ultrahtml": "^1.6.0", "uncrypto": "^0.1.3", "unctx": "^2.4.1", "unimport": "^5.2.0", "unplugin": "^2.3.10", "unplugin-vue-router": "^0.15.0", "unstorage": "^1.17.0", "untyped": "^2.0.0", "vue": "^3.5.20", "vue-bundle-renderer": "^2.1.2", "vue-devtools-stub": "^0.1.0", "vue-router": "^4.5.1" }, "peerDependencies": { "@parcel/watcher": "^2.1.0", "@types/node": ">=18.12.0" }, "optionalPeers": ["@parcel/watcher", "@types/node"], "bin": { "nuxi": "bin/nuxt.mjs", "nuxt": "bin/nuxt.mjs" } }, "sha512-bnHWcztOrxjBMcoiqO51cVR0kzycohTazrdEVgL2I6U5gCX3R63XWP+PQ2itO/DCdZPP5i9ZF9HsJGXYbc5w/g=="],
|
||||
|
||||
"nuxt-component-meta": ["nuxt-component-meta@0.12.2", "", { "dependencies": { "@nuxt/kit": "^4.0.1", "citty": "^0.1.6", "json-schema-to-zod": "^2.6.1", "mlly": "^1.7.4", "ohash": "^2.0.11", "scule": "^1.3.0", "typescript": "^5.8.3", "ufo": "^1.6.1", "vue-component-meta": "^3.0.3" }, "bin": { "nuxt-component-meta": "bin/nuxt-component-meta.mjs" } }, "sha512-cosF2jUd47TnN7Y8PsRfzdsVomHpVxVjZZIDgyaPqe+wnl2Ys5LXMUt+K3CpXrJrGRFlDRP6ux47Ukevf9juVQ=="],
|
||||
|
||||
@@ -1765,7 +1765,7 @@
|
||||
|
||||
"optionator": ["optionator@0.9.4", "", { "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", "type-check": "^0.4.0", "word-wrap": "^1.2.5" } }, "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g=="],
|
||||
|
||||
"oxc-minify": ["oxc-minify@0.80.0", "", { "optionalDependencies": { "@oxc-minify/binding-android-arm64": "0.80.0", "@oxc-minify/binding-darwin-arm64": "0.80.0", "@oxc-minify/binding-darwin-x64": "0.80.0", "@oxc-minify/binding-freebsd-x64": "0.80.0", "@oxc-minify/binding-linux-arm-gnueabihf": "0.80.0", "@oxc-minify/binding-linux-arm-musleabihf": "0.80.0", "@oxc-minify/binding-linux-arm64-gnu": "0.80.0", "@oxc-minify/binding-linux-arm64-musl": "0.80.0", "@oxc-minify/binding-linux-riscv64-gnu": "0.80.0", "@oxc-minify/binding-linux-s390x-gnu": "0.80.0", "@oxc-minify/binding-linux-x64-gnu": "0.80.0", "@oxc-minify/binding-linux-x64-musl": "0.80.0", "@oxc-minify/binding-wasm32-wasi": "0.80.0", "@oxc-minify/binding-win32-arm64-msvc": "0.80.0", "@oxc-minify/binding-win32-x64-msvc": "0.80.0" } }, "sha512-kMMb3dC8KlQ+Bzf/UhepYsq1ukorCOJu038rSxF7kTbsCLx1Ojet9Hc9gKqKR/Wpih5GWnOA2DvLe20ZtxbJ2Q=="],
|
||||
"oxc-minify": ["oxc-minify@0.86.0", "", { "optionalDependencies": { "@oxc-minify/binding-android-arm64": "0.86.0", "@oxc-minify/binding-darwin-arm64": "0.86.0", "@oxc-minify/binding-darwin-x64": "0.86.0", "@oxc-minify/binding-freebsd-x64": "0.86.0", "@oxc-minify/binding-linux-arm-gnueabihf": "0.86.0", "@oxc-minify/binding-linux-arm-musleabihf": "0.86.0", "@oxc-minify/binding-linux-arm64-gnu": "0.86.0", "@oxc-minify/binding-linux-arm64-musl": "0.86.0", "@oxc-minify/binding-linux-riscv64-gnu": "0.86.0", "@oxc-minify/binding-linux-s390x-gnu": "0.86.0", "@oxc-minify/binding-linux-x64-gnu": "0.86.0", "@oxc-minify/binding-linux-x64-musl": "0.86.0", "@oxc-minify/binding-wasm32-wasi": "0.86.0", "@oxc-minify/binding-win32-arm64-msvc": "0.86.0", "@oxc-minify/binding-win32-x64-msvc": "0.86.0" } }, "sha512-pjtM94KElw/RxF3R1ls1ADcBUyZcrCgn0qeL4nD8cOotfzeVFa0xXwQQeCkk+5GPiOqdRApNFuJvK//lQgpqJw=="],
|
||||
|
||||
"oxc-parser": ["oxc-parser@0.81.0", "", { "dependencies": { "@oxc-project/types": "^0.81.0" }, "optionalDependencies": { "@oxc-parser/binding-android-arm64": "0.81.0", "@oxc-parser/binding-darwin-arm64": "0.81.0", "@oxc-parser/binding-darwin-x64": "0.81.0", "@oxc-parser/binding-freebsd-x64": "0.81.0", "@oxc-parser/binding-linux-arm-gnueabihf": "0.81.0", "@oxc-parser/binding-linux-arm-musleabihf": "0.81.0", "@oxc-parser/binding-linux-arm64-gnu": "0.81.0", "@oxc-parser/binding-linux-arm64-musl": "0.81.0", "@oxc-parser/binding-linux-riscv64-gnu": "0.81.0", "@oxc-parser/binding-linux-s390x-gnu": "0.81.0", "@oxc-parser/binding-linux-x64-gnu": "0.81.0", "@oxc-parser/binding-linux-x64-musl": "0.81.0", "@oxc-parser/binding-wasm32-wasi": "0.81.0", "@oxc-parser/binding-win32-arm64-msvc": "0.81.0", "@oxc-parser/binding-win32-x64-msvc": "0.81.0" } }, "sha512-iceu9s70mZyjKs6V2QX7TURkJj1crnKi9csGByWvOWwrR5rwq0U0f49yIlRAzMP4t7K2gRC1MnyMZggMhiwAVg=="],
|
||||
|
||||
@@ -1815,7 +1815,7 @@
|
||||
|
||||
"pathe": ["pathe@2.0.3", "", {}, "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w=="],
|
||||
|
||||
"perfect-debounce": ["perfect-debounce@1.0.0", "", {}, "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA=="],
|
||||
"perfect-debounce": ["perfect-debounce@2.0.0", "", {}, "sha512-fkEH/OBiKrqqI/yIgjR92lMfs2K8105zt/VT6+7eTjNwisrsh47CeIED9z58zI7DfKdH3uHAn25ziRZn3kgAow=="],
|
||||
|
||||
"picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="],
|
||||
|
||||
@@ -2397,6 +2397,10 @@
|
||||
|
||||
"@nodelib/fs.scandir/@nodelib/fs.stat": ["@nodelib/fs.stat@4.0.0", "", {}, "sha512-ctr6bByzksKRCV0bavi8WoQevU6plSp2IkllIsEqaiKe2mwNNnaluhnRhcsgGZHrrHk57B3lf95MkLMO3STYcg=="],
|
||||
|
||||
"@nuxt/cli/perfect-debounce": ["perfect-debounce@1.0.0", "", {}, "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA=="],
|
||||
|
||||
"@nuxt/devtools/perfect-debounce": ["perfect-debounce@1.0.0", "", {}, "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA=="],
|
||||
|
||||
"@nuxt/devtools/which": ["which@5.0.0", "", { "dependencies": { "isexe": "^3.1.1" }, "bin": { "node-which": "bin/which.js" } }, "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ=="],
|
||||
|
||||
"@nuxt/eslint/@nuxt/kit": ["@nuxt/kit@4.0.3", "", { "dependencies": { "c12": "^3.2.0", "consola": "^3.4.2", "defu": "^6.1.4", "destr": "^2.0.5", "errx": "^0.1.0", "exsolve": "^1.0.7", "ignore": "^7.0.5", "jiti": "^2.5.1", "klona": "^2.0.6", "mlly": "^1.7.4", "ohash": "^2.0.11", "pathe": "^2.0.3", "pkg-types": "^2.2.0", "scule": "^1.3.0", "semver": "^7.7.2", "std-env": "^3.9.0", "tinyglobby": "^0.2.14", "ufo": "^1.6.1", "unctx": "^2.4.1", "unimport": "^5.2.0", "untyped": "^2.0.0" } }, "sha512-9+lwvP4n8KhO91azoebO0o39smESGzEV4HU6nef9HIFyt04YwlVMY37Pk63GgZn0WhWVjyPWcQWs0rUdZUYcPw=="],
|
||||
@@ -2411,7 +2415,7 @@
|
||||
|
||||
"@nuxt/ui/@nuxt/kit": ["@nuxt/kit@4.0.3", "", { "dependencies": { "c12": "^3.2.0", "consola": "^3.4.2", "defu": "^6.1.4", "destr": "^2.0.5", "errx": "^0.1.0", "exsolve": "^1.0.7", "ignore": "^7.0.5", "jiti": "^2.5.1", "klona": "^2.0.6", "mlly": "^1.7.4", "ohash": "^2.0.11", "pathe": "^2.0.3", "pkg-types": "^2.2.0", "scule": "^1.3.0", "semver": "^7.7.2", "std-env": "^3.9.0", "tinyglobby": "^0.2.14", "ufo": "^1.6.1", "unctx": "^2.4.1", "unimport": "^5.2.0", "untyped": "^2.0.0" } }, "sha512-9+lwvP4n8KhO91azoebO0o39smESGzEV4HU6nef9HIFyt04YwlVMY37Pk63GgZn0WhWVjyPWcQWs0rUdZUYcPw=="],
|
||||
|
||||
"@nuxt/vite-builder/@nuxt/kit": ["@nuxt/kit@4.0.3", "", { "dependencies": { "c12": "^3.2.0", "consola": "^3.4.2", "defu": "^6.1.4", "destr": "^2.0.5", "errx": "^0.1.0", "exsolve": "^1.0.7", "ignore": "^7.0.5", "jiti": "^2.5.1", "klona": "^2.0.6", "mlly": "^1.7.4", "ohash": "^2.0.11", "pathe": "^2.0.3", "pkg-types": "^2.2.0", "scule": "^1.3.0", "semver": "^7.7.2", "std-env": "^3.9.0", "tinyglobby": "^0.2.14", "ufo": "^1.6.1", "unctx": "^2.4.1", "unimport": "^5.2.0", "untyped": "^2.0.0" } }, "sha512-9+lwvP4n8KhO91azoebO0o39smESGzEV4HU6nef9HIFyt04YwlVMY37Pk63GgZn0WhWVjyPWcQWs0rUdZUYcPw=="],
|
||||
"@nuxt/vite-builder/@nuxt/kit": ["@nuxt/kit@4.1.0", "", { "dependencies": { "c12": "^3.2.0", "consola": "^3.4.2", "defu": "^6.1.4", "destr": "^2.0.5", "errx": "^0.1.0", "exsolve": "^1.0.7", "ignore": "^7.0.5", "jiti": "^2.5.1", "klona": "^2.0.6", "mlly": "^1.8.0", "ohash": "^2.0.11", "pathe": "^2.0.3", "pkg-types": "^2.3.0", "rc9": "^2.1.2", "scule": "^1.3.0", "semver": "^7.7.2", "std-env": "^3.9.0", "tinyglobby": "^0.2.14", "ufo": "^1.6.1", "unctx": "^2.4.1", "unimport": "^5.2.0", "untyped": "^2.0.0" } }, "sha512-QY6wgano7szNP5hLUKNeZTLdx009F2n+a8L9M4Wzk1jhubvENc81jLWHAnaJOogRpqMeEqZcjHRfqTx+J1/lfQ=="],
|
||||
|
||||
"@nuxt/vite-builder/escape-string-regexp": ["escape-string-regexp@5.0.0", "", {}, "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw=="],
|
||||
|
||||
@@ -2469,6 +2473,8 @@
|
||||
|
||||
"@vue/devtools-core/nanoid": ["nanoid@5.1.5", "", { "bin": { "nanoid": "bin/nanoid.js" } }, "sha512-Ir/+ZpE9fDsNH0hQ3C68uyThDXzYcim2EqcZ8zn8Chtt1iylPT9xXJB0kPCnqzgcEGikO9RxSrh63MsmVCU7Fw=="],
|
||||
|
||||
"@vue/devtools-kit/perfect-debounce": ["perfect-debounce@1.0.0", "", {}, "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA=="],
|
||||
|
||||
"@vueuse/core/@vueuse/shared": ["@vueuse/shared@13.9.0", "", { "peerDependencies": { "vue": "^3.5.0" } }, "sha512-e89uuTLMh0U5cZ9iDpEI2senqPGfbPRTHM/0AaQkcxnpqjkZqDYP8rpfm7edOz8s+pOCOROEy1PIveSW8+fL5g=="],
|
||||
|
||||
"@vueuse/integrations/@vueuse/shared": ["@vueuse/shared@13.9.0", "", { "peerDependencies": { "vue": "^3.5.0" } }, "sha512-e89uuTLMh0U5cZ9iDpEI2senqPGfbPRTHM/0AaQkcxnpqjkZqDYP8rpfm7edOz8s+pOCOROEy1PIveSW8+fL5g=="],
|
||||
@@ -2483,6 +2489,8 @@
|
||||
|
||||
"bl/readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="],
|
||||
|
||||
"c12/perfect-debounce": ["perfect-debounce@1.0.0", "", {}, "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA=="],
|
||||
|
||||
"clean-regexp/escape-string-regexp": ["escape-string-regexp@1.0.5", "", {}, "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg=="],
|
||||
|
||||
"cliui/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="],
|
||||
@@ -2549,23 +2557,23 @@
|
||||
|
||||
"nitropack/escape-string-regexp": ["escape-string-regexp@5.0.0", "", {}, "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw=="],
|
||||
|
||||
"nitropack/perfect-debounce": ["perfect-debounce@2.0.0", "", {}, "sha512-fkEH/OBiKrqqI/yIgjR92lMfs2K8105zt/VT6+7eTjNwisrsh47CeIED9z58zI7DfKdH3uHAn25ziRZn3kgAow=="],
|
||||
|
||||
"nitropack/unplugin-utils": ["unplugin-utils@0.3.0", "", { "dependencies": { "pathe": "^2.0.3", "picomatch": "^4.0.3" } }, "sha512-JLoggz+PvLVMJo+jZt97hdIIIZ2yTzGgft9e9q8iMrC4ewufl62ekeW7mixBghonn2gVb/ICjyvlmOCUBnJLQg=="],
|
||||
|
||||
"nitropack/youch": ["youch@4.1.0-beta.8", "", { "dependencies": { "@poppinss/colors": "^4.1.4", "@poppinss/dumper": "^0.6.3", "@speed-highlight/core": "^1.2.7", "cookie": "^1.0.2", "youch-core": "^0.3.1" } }, "sha512-rY2A2lSF7zC+l7HH9Mq+83D1dLlsPnEvy8jTouzaptDZM6geqZ3aJe/b7ULCwRURPtWV3vbDjA2DDMdoBol0HQ=="],
|
||||
|
||||
"npm-run-path/path-key": ["path-key@4.0.0", "", {}, "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ=="],
|
||||
|
||||
"nuxt/@nuxt/kit": ["@nuxt/kit@4.0.3", "", { "dependencies": { "c12": "^3.2.0", "consola": "^3.4.2", "defu": "^6.1.4", "destr": "^2.0.5", "errx": "^0.1.0", "exsolve": "^1.0.7", "ignore": "^7.0.5", "jiti": "^2.5.1", "klona": "^2.0.6", "mlly": "^1.7.4", "ohash": "^2.0.11", "pathe": "^2.0.3", "pkg-types": "^2.2.0", "scule": "^1.3.0", "semver": "^7.7.2", "std-env": "^3.9.0", "tinyglobby": "^0.2.14", "ufo": "^1.6.1", "unctx": "^2.4.1", "unimport": "^5.2.0", "untyped": "^2.0.0" } }, "sha512-9+lwvP4n8KhO91azoebO0o39smESGzEV4HU6nef9HIFyt04YwlVMY37Pk63GgZn0WhWVjyPWcQWs0rUdZUYcPw=="],
|
||||
"nuxt/@nuxt/kit": ["@nuxt/kit@4.1.0", "", { "dependencies": { "c12": "^3.2.0", "consola": "^3.4.2", "defu": "^6.1.4", "destr": "^2.0.5", "errx": "^0.1.0", "exsolve": "^1.0.7", "ignore": "^7.0.5", "jiti": "^2.5.1", "klona": "^2.0.6", "mlly": "^1.8.0", "ohash": "^2.0.11", "pathe": "^2.0.3", "pkg-types": "^2.3.0", "rc9": "^2.1.2", "scule": "^1.3.0", "semver": "^7.7.2", "std-env": "^3.9.0", "tinyglobby": "^0.2.14", "ufo": "^1.6.1", "unctx": "^2.4.1", "unimport": "^5.2.0", "untyped": "^2.0.0" } }, "sha512-QY6wgano7szNP5hLUKNeZTLdx009F2n+a8L9M4Wzk1jhubvENc81jLWHAnaJOogRpqMeEqZcjHRfqTx+J1/lfQ=="],
|
||||
|
||||
"nuxt/@nuxt/schema": ["@nuxt/schema@4.1.0", "", { "dependencies": { "@vue/shared": "^3.5.20", "consola": "^3.4.2", "defu": "^6.1.4", "pathe": "^2.0.3", "std-env": "^3.9.0", "ufo": "1.6.1" } }, "sha512-LvcsO7XIYD+rqjxsjaBHUyOgN2Vw8MCF4rvuF09P/UqEogbck94zrwzSTYk6FVU7K6eQO/egvefanGMj/nPkMg=="],
|
||||
|
||||
"nuxt/escape-string-regexp": ["escape-string-regexp@5.0.0", "", {}, "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw=="],
|
||||
|
||||
"nuxt/ignore": ["ignore@7.0.5", "", {}, "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg=="],
|
||||
|
||||
"nuxt/oxc-parser": ["oxc-parser@0.80.0", "", { "dependencies": { "@oxc-project/types": "^0.80.0" }, "optionalDependencies": { "@oxc-parser/binding-android-arm64": "0.80.0", "@oxc-parser/binding-darwin-arm64": "0.80.0", "@oxc-parser/binding-darwin-x64": "0.80.0", "@oxc-parser/binding-freebsd-x64": "0.80.0", "@oxc-parser/binding-linux-arm-gnueabihf": "0.80.0", "@oxc-parser/binding-linux-arm-musleabihf": "0.80.0", "@oxc-parser/binding-linux-arm64-gnu": "0.80.0", "@oxc-parser/binding-linux-arm64-musl": "0.80.0", "@oxc-parser/binding-linux-riscv64-gnu": "0.80.0", "@oxc-parser/binding-linux-s390x-gnu": "0.80.0", "@oxc-parser/binding-linux-x64-gnu": "0.80.0", "@oxc-parser/binding-linux-x64-musl": "0.80.0", "@oxc-parser/binding-wasm32-wasi": "0.80.0", "@oxc-parser/binding-win32-arm64-msvc": "0.80.0", "@oxc-parser/binding-win32-x64-msvc": "0.80.0" } }, "sha512-lTEUQs+WBOXPUzMR/tWY4yT9D7xXwnENtRR7Epw/QcuYpV4fRveEA+zq8IGUwyyuWecl8jHrddCCuadw+kZOSA=="],
|
||||
"nuxt/oxc-parser": ["oxc-parser@0.86.0", "", { "dependencies": { "@oxc-project/types": "^0.86.0" }, "optionalDependencies": { "@oxc-parser/binding-android-arm64": "0.86.0", "@oxc-parser/binding-darwin-arm64": "0.86.0", "@oxc-parser/binding-darwin-x64": "0.86.0", "@oxc-parser/binding-freebsd-x64": "0.86.0", "@oxc-parser/binding-linux-arm-gnueabihf": "0.86.0", "@oxc-parser/binding-linux-arm-musleabihf": "0.86.0", "@oxc-parser/binding-linux-arm64-gnu": "0.86.0", "@oxc-parser/binding-linux-arm64-musl": "0.86.0", "@oxc-parser/binding-linux-riscv64-gnu": "0.86.0", "@oxc-parser/binding-linux-s390x-gnu": "0.86.0", "@oxc-parser/binding-linux-x64-gnu": "0.86.0", "@oxc-parser/binding-linux-x64-musl": "0.86.0", "@oxc-parser/binding-wasm32-wasi": "0.86.0", "@oxc-parser/binding-win32-arm64-msvc": "0.86.0", "@oxc-parser/binding-win32-x64-msvc": "0.86.0" } }, "sha512-v9+uomgqyLSxlq3qlaMqJJtXg2+rUsa368p/zkmgi5OMGmcZAtZt5GIeSVFF84iNET+08Hdx/rUtd/FyIdfNFQ=="],
|
||||
|
||||
"nuxt/oxc-transform": ["oxc-transform@0.80.0", "", { "optionalDependencies": { "@oxc-transform/binding-android-arm64": "0.80.0", "@oxc-transform/binding-darwin-arm64": "0.80.0", "@oxc-transform/binding-darwin-x64": "0.80.0", "@oxc-transform/binding-freebsd-x64": "0.80.0", "@oxc-transform/binding-linux-arm-gnueabihf": "0.80.0", "@oxc-transform/binding-linux-arm-musleabihf": "0.80.0", "@oxc-transform/binding-linux-arm64-gnu": "0.80.0", "@oxc-transform/binding-linux-arm64-musl": "0.80.0", "@oxc-transform/binding-linux-riscv64-gnu": "0.80.0", "@oxc-transform/binding-linux-s390x-gnu": "0.80.0", "@oxc-transform/binding-linux-x64-gnu": "0.80.0", "@oxc-transform/binding-linux-x64-musl": "0.80.0", "@oxc-transform/binding-wasm32-wasi": "0.80.0", "@oxc-transform/binding-win32-arm64-msvc": "0.80.0", "@oxc-transform/binding-win32-x64-msvc": "0.80.0" } }, "sha512-hWusSpynsn4MZP1KJa7e254xyVmowTUshvttpk7JfTt055YEJ+ad6memMJ9GJqPeeyydfnwwKkLy6eiwDn12xA=="],
|
||||
"nuxt/oxc-transform": ["oxc-transform@0.86.0", "", { "optionalDependencies": { "@oxc-transform/binding-android-arm64": "0.86.0", "@oxc-transform/binding-darwin-arm64": "0.86.0", "@oxc-transform/binding-darwin-x64": "0.86.0", "@oxc-transform/binding-freebsd-x64": "0.86.0", "@oxc-transform/binding-linux-arm-gnueabihf": "0.86.0", "@oxc-transform/binding-linux-arm-musleabihf": "0.86.0", "@oxc-transform/binding-linux-arm64-gnu": "0.86.0", "@oxc-transform/binding-linux-arm64-musl": "0.86.0", "@oxc-transform/binding-linux-riscv64-gnu": "0.86.0", "@oxc-transform/binding-linux-s390x-gnu": "0.86.0", "@oxc-transform/binding-linux-x64-gnu": "0.86.0", "@oxc-transform/binding-linux-x64-musl": "0.86.0", "@oxc-transform/binding-wasm32-wasi": "0.86.0", "@oxc-transform/binding-win32-arm64-msvc": "0.86.0", "@oxc-transform/binding-win32-x64-msvc": "0.86.0" } }, "sha512-Ghgm/zzjPXROMpljLy4HYBcko/25sixWi2yJQJ6rDu/ltgFB1nEQ4JYCYV5F+ENt0McsJkcgmX5I4dRfDViyDA=="],
|
||||
|
||||
"nuxt/unplugin-vue-router": ["unplugin-vue-router@0.15.0", "", { "dependencies": { "@vue-macros/common": "3.0.0-beta.16", "@vue/language-core": "^3.0.1", "ast-walker-scope": "^0.8.1", "chokidar": "^4.0.3", "json5": "^2.2.3", "local-pkg": "^1.1.1", "magic-string": "^0.30.17", "mlly": "^1.7.4", "muggle-string": "^0.4.1", "pathe": "^2.0.3", "picomatch": "^4.0.3", "scule": "^1.3.0", "tinyglobby": "^0.2.14", "unplugin": "^2.3.5", "unplugin-utils": "^0.2.4", "yaml": "^2.8.0" }, "peerDependencies": { "@vue/compiler-sfc": "^3.5.17", "vue-router": "^4.5.1" }, "optionalPeers": ["vue-router"] }, "sha512-PyGehCjd9Ny9h+Uer4McbBjjib3lHihcyUEILa7pHKl6+rh8N7sFyw4ZkV+N30Oq2zmIUG7iKs3qpL0r+gXAaQ=="],
|
||||
|
||||
@@ -2645,8 +2653,6 @@
|
||||
|
||||
"vite-plugin-checker/npm-run-path": ["npm-run-path@6.0.0", "", { "dependencies": { "path-key": "^4.0.0", "unicorn-magic": "^0.3.0" } }, "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA=="],
|
||||
|
||||
"vite-plugin-inspect/perfect-debounce": ["perfect-debounce@2.0.0", "", {}, "sha512-fkEH/OBiKrqqI/yIgjR92lMfs2K8105zt/VT6+7eTjNwisrsh47CeIED9z58zI7DfKdH3uHAn25ziRZn3kgAow=="],
|
||||
|
||||
"vite-plugin-inspect/unplugin-utils": ["unplugin-utils@0.3.0", "", { "dependencies": { "pathe": "^2.0.3", "picomatch": "^4.0.3" } }, "sha512-JLoggz+PvLVMJo+jZt97hdIIIZ2yTzGgft9e9q8iMrC4ewufl62ekeW7mixBghonn2gVb/ICjyvlmOCUBnJLQg=="],
|
||||
|
||||
"wrap-ansi/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="],
|
||||
@@ -2707,67 +2713,67 @@
|
||||
|
||||
"nuxt-component-meta/@nuxt/kit/ignore": ["ignore@7.0.5", "", {}, "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg=="],
|
||||
|
||||
"nuxt/oxc-parser/@oxc-parser/binding-android-arm64": ["@oxc-parser/binding-android-arm64@0.80.0", "", { "os": "android", "cpu": "arm64" }, "sha512-H0S4QTRFhct1uO1ZOnzGQAoHSJVHCyZa+oivovHkbqA0z271ppRkXmJuLfjW+9CBW0577JNAhjTflKUDpCO4lg=="],
|
||||
"nuxt/oxc-parser/@oxc-parser/binding-android-arm64": ["@oxc-parser/binding-android-arm64@0.86.0", "", { "os": "android", "cpu": "arm64" }, "sha512-BfNFEWpRo4gqLHKvRuQmhbPGeJqB1Ka/hsPhKf1imAojwUcf/Dr/yRkZBuEi2yc1LWBjApKYJEqpsBUmtqSY1Q=="],
|
||||
|
||||
"nuxt/oxc-parser/@oxc-parser/binding-darwin-arm64": ["@oxc-parser/binding-darwin-arm64@0.80.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-cVGI6NeGs1u1Ev8yO7I+zXPQuduCwwhYXd/K64uygx+OFp7fC7zSIlkGpoxFRUuSxqyipC813foAfUOwM1Y0PA=="],
|
||||
"nuxt/oxc-parser/@oxc-parser/binding-darwin-arm64": ["@oxc-parser/binding-darwin-arm64@0.86.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-gRSnEHcyNEfLdNj6v8XKcuHUaZnRpH2lOZFztuGEi23ENydPOQVEtiZYexuHOTeaLGgzw+93TgB4n/YkjYodug=="],
|
||||
|
||||
"nuxt/oxc-parser/@oxc-parser/binding-darwin-x64": ["@oxc-parser/binding-darwin-x64@0.80.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-h7wRo10ywI2vLz9VljFeIaUh9u7l2l3kvF6FAteY3cPqbCA6JYUZGJaykhMqTxJoG6wrzf35sMA2ubvq67iAMA=="],
|
||||
"nuxt/oxc-parser/@oxc-parser/binding-darwin-x64": ["@oxc-parser/binding-darwin-x64@0.86.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-6mdymm8i+VpLTJP19D3PSFumMmAyfhhhIRWcRHsc0bL7CSZjCWbvRb00ActKrGKWtsol/A/KKgqglJwpvjlzOA=="],
|
||||
|
||||
"nuxt/oxc-parser/@oxc-parser/binding-freebsd-x64": ["@oxc-parser/binding-freebsd-x64@0.80.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-KcJ+8w/wVwd/XfDmgA9QZJAWML3vPu2O2Y8XRkf3U9VsN5n8cZ5PXMbH4NBSb3O7ctdDSvwnnuApLOz3sTHsUw=="],
|
||||
"nuxt/oxc-parser/@oxc-parser/binding-freebsd-x64": ["@oxc-parser/binding-freebsd-x64@0.86.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-mc2xYRPxhzFg4NX1iqfIWP+8ORtXiNpAkaomNDepegQFlIFUmrESa3IJrKJ/4vg77Tbti7omHbraOqwdTk849g=="],
|
||||
|
||||
"nuxt/oxc-parser/@oxc-parser/binding-linux-arm-gnueabihf": ["@oxc-parser/binding-linux-arm-gnueabihf@0.80.0", "", { "os": "linux", "cpu": "arm" }, "sha512-5OCRxV5fX5RkVqsag55m4EFeudSZ0nSMYXgdtfR/5JZSiYmIYyPycafNNa52liqC2gx27vzrDRE4FdlG+5fhww=="],
|
||||
"nuxt/oxc-parser/@oxc-parser/binding-linux-arm-gnueabihf": ["@oxc-parser/binding-linux-arm-gnueabihf@0.86.0", "", { "os": "linux", "cpu": "arm" }, "sha512-LZzapjFhwGQMKefcFsn3lJc/mTY37fBlm0jjEvETgNCyd5pH4gDwOcrp/wZHAz2qw5uLWOHaa69I6ci5lBjJgA=="],
|
||||
|
||||
"nuxt/oxc-parser/@oxc-parser/binding-linux-arm-musleabihf": ["@oxc-parser/binding-linux-arm-musleabihf@0.80.0", "", { "os": "linux", "cpu": "arm" }, "sha512-kMa2PeA2GHMhvV617WdFzDAWCo2A00knPEe6rxFUO/Gr8TTLv1/LlEY6UqGseWrRfkkhFiAO496nRPW/6B5DCg=="],
|
||||
"nuxt/oxc-parser/@oxc-parser/binding-linux-arm-musleabihf": ["@oxc-parser/binding-linux-arm-musleabihf@0.86.0", "", { "os": "linux", "cpu": "arm" }, "sha512-/rhJMpng7/Qgn8hE4sigxTRb04+zdO0K1kfAMZ3nONphk5r2Yk2RjyEpLLz17adysCyQw/KndaMHNv8GR8VMNg=="],
|
||||
|
||||
"nuxt/oxc-parser/@oxc-parser/binding-linux-arm64-gnu": ["@oxc-parser/binding-linux-arm64-gnu@0.80.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-y2NEhbFfKPdOkf3ZR/3xwJFJVji6IKxwXKHUN4bEdqpcO0tkXSCiP0MzTxjEY6ql2/MXdkqK0Ym92dYsRsgsyg=="],
|
||||
"nuxt/oxc-parser/@oxc-parser/binding-linux-arm64-gnu": ["@oxc-parser/binding-linux-arm64-gnu@0.86.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-IXEZnk6O0zJg5gDn1Zvt5Qx62Z3E+ewrKwPgMfExqnNCLq+Ix2g7hQypevm/S6qxVgyz5HbiW+a/5ziMFXTCJQ=="],
|
||||
|
||||
"nuxt/oxc-parser/@oxc-parser/binding-linux-arm64-musl": ["@oxc-parser/binding-linux-arm64-musl@0.80.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-j3tKausSXwHS/Ej6ct2dmKJtw0UIME2XJmj6QfPT6LyUSNTndj4yXRXuMSrCOrX9/0qH9GhmqeL9ouU27dQRFw=="],
|
||||
"nuxt/oxc-parser/@oxc-parser/binding-linux-arm64-musl": ["@oxc-parser/binding-linux-arm64-musl@0.86.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-QG7DUVZ/AtBaUGMhgToB4glOdq0MGAEYU1MJQpNB5HqiEcOpteF9Pd+oPfscj2zrGPd47KNyljtJRBKJr6Ut0w=="],
|
||||
|
||||
"nuxt/oxc-parser/@oxc-parser/binding-linux-riscv64-gnu": ["@oxc-parser/binding-linux-riscv64-gnu@0.80.0", "", { "os": "linux", "cpu": "none" }, "sha512-h+uPvyTcpTFd946fGPU57sZeec2qHPUYQRZeXHB2uuZjps+9pxQ5zIz0EBM/JgBtnwdtoR93RAu1YNAVbqY5Zw=="],
|
||||
"nuxt/oxc-parser/@oxc-parser/binding-linux-riscv64-gnu": ["@oxc-parser/binding-linux-riscv64-gnu@0.86.0", "", { "os": "linux", "cpu": "none" }, "sha512-smz+J6riX2du2lp0IKeZSaOBIhhoE2N/L1IQdOLCpzB0ikjCDBoyNKdDM7te8ZDq3KDnRmJChmhQGd8P1/LGBQ=="],
|
||||
|
||||
"nuxt/oxc-parser/@oxc-parser/binding-linux-s390x-gnu": ["@oxc-parser/binding-linux-s390x-gnu@0.80.0", "", { "os": "linux", "cpu": "s390x" }, "sha512-+u74hV+WwCPL4UBNOJaIGRozTCfZ7pM5JCEe8zAlMkKexftUzbtvW02314bVD9bqoRAL3Gg6jcZrjNjwDX2FwQ=="],
|
||||
"nuxt/oxc-parser/@oxc-parser/binding-linux-s390x-gnu": ["@oxc-parser/binding-linux-s390x-gnu@0.86.0", "", { "os": "linux", "cpu": "s390x" }, "sha512-vas1BOMWVdicuimmi5Y+xPj3csaYQquVA45Im9a/DtVsypVeh8RWYXBMO1qJNM5Fg5HD0QvYNqxvftx3c+f5pg=="],
|
||||
|
||||
"nuxt/oxc-parser/@oxc-parser/binding-linux-x64-gnu": ["@oxc-parser/binding-linux-x64-gnu@0.80.0", "", { "os": "linux", "cpu": "x64" }, "sha512-N9UGnWVWMlOJH+6550tqyBxd9qkMd0f4m+YRA0gly6efJTuLbPQpjkJm7pJbMu+GULcvSJ/Y0bkMAIQTtwP0vQ=="],
|
||||
"nuxt/oxc-parser/@oxc-parser/binding-linux-x64-gnu": ["@oxc-parser/binding-linux-x64-gnu@0.86.0", "", { "os": "linux", "cpu": "x64" }, "sha512-3Fsi+JA3NwdZdrpC6AieOP48cuBrq0q59JgnR0mfoWfr9wHrbn2lt8EEubrj6EXpBUmu1Zii7S9NNRC6fl/d+w=="],
|
||||
|
||||
"nuxt/oxc-parser/@oxc-parser/binding-linux-x64-musl": ["@oxc-parser/binding-linux-x64-musl@0.80.0", "", { "os": "linux", "cpu": "x64" }, "sha512-l2N/GlFEri27QBMi0e53V/SlpQotIvHbz+rZZG/EO+vn58ZEr0eTG+PjJoOY/T8+TQb8nrCtRe4S/zNDpV6zSQ=="],
|
||||
"nuxt/oxc-parser/@oxc-parser/binding-linux-x64-musl": ["@oxc-parser/binding-linux-x64-musl@0.86.0", "", { "os": "linux", "cpu": "x64" }, "sha512-89/d43EW76wJagz8u5zcKW8itB2rnS/uN7un5APb8Ebme8TePBwDyxo64J6oY5rcJYkfJ6lEszSF/ovicsNVPw=="],
|
||||
|
||||
"nuxt/oxc-parser/@oxc-parser/binding-wasm32-wasi": ["@oxc-parser/binding-wasm32-wasi@0.80.0", "", { "dependencies": { "@napi-rs/wasm-runtime": "^1.0.1" }, "cpu": "none" }, "sha512-5iEwQqMXU1HiRlWuD3f+8N2O3qWhS+nOFEAWgE3sjMUnTtILPJETYhaGBPqqPWg1iRO3+hE1lEBCdI91GS1CUQ=="],
|
||||
"nuxt/oxc-parser/@oxc-parser/binding-wasm32-wasi": ["@oxc-parser/binding-wasm32-wasi@0.86.0", "", { "dependencies": { "@napi-rs/wasm-runtime": "^1.0.3" }, "cpu": "none" }, "sha512-gRrGmE2L27stNMeiAucy/ffHF9VjYr84MizuJzSYnnKmd5WXf3HelNdd0UYSJnpb7APBuyFSN2Oato+Qb6yAFw=="],
|
||||
|
||||
"nuxt/oxc-parser/@oxc-parser/binding-win32-arm64-msvc": ["@oxc-parser/binding-win32-arm64-msvc@0.80.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-HedSH/Db7OFR2SugTbuawaV1vjgUjCXzxPquow/1FLtpRT2wASbMaRRbyD/h2n4DJ8V2zGqnV8Q+vic+VNvnKg=="],
|
||||
"nuxt/oxc-parser/@oxc-parser/binding-win32-arm64-msvc": ["@oxc-parser/binding-win32-arm64-msvc@0.86.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-parTnpNviJYR3JIFLseDGip1KkYbhWLeuZG9OMek62gr6Omflddoytvb17s+qODoZqFAVjvuOmVipDdjTl9q3Q=="],
|
||||
|
||||
"nuxt/oxc-parser/@oxc-parser/binding-win32-x64-msvc": ["@oxc-parser/binding-win32-x64-msvc@0.80.0", "", { "os": "win32", "cpu": "x64" }, "sha512-SSiM0m7jG5yxVf0ivy1rF8OuTJo8ITgp1ccp2aqPZG6Qyl5QiVpf8HI1X5AvPFxts2B4Bv8U3Dip+FobqBkwcw=="],
|
||||
"nuxt/oxc-parser/@oxc-parser/binding-win32-x64-msvc": ["@oxc-parser/binding-win32-x64-msvc@0.86.0", "", { "os": "win32", "cpu": "x64" }, "sha512-FTso24eQh3vPTe/SOTf0/RXfjJ13tsk5fw728fm+z5y6Rb+mmEBfyVT6XxyGhEwtdfnRSZawheX74/9caI1etw=="],
|
||||
|
||||
"nuxt/oxc-parser/@oxc-project/types": ["@oxc-project/types@0.80.0", "", {}, "sha512-xxHQm8wfCv2e8EmtaDwpMeAHOWqgQDAYg+BJouLXSQt5oTKu9TIXrgNMGSrM2fLvKmECsRd9uUFAAD+hPyootA=="],
|
||||
"nuxt/oxc-parser/@oxc-project/types": ["@oxc-project/types@0.86.0", "", {}, "sha512-bJ57vWNQnOnUe5ZxUkrWpLyExxqb0BoyQ+IRmI/V1uxHbBNBzFGMIjKIf5ECFsgS0KgUUl8TM3a4xpeAtAnvIA=="],
|
||||
|
||||
"nuxt/oxc-transform/@oxc-transform/binding-android-arm64": ["@oxc-transform/binding-android-arm64@0.80.0", "", { "os": "android", "cpu": "arm64" }, "sha512-HAK6zIUOteptOsSRqoGu41cez7kj/OPJqBGdgdP6FFh2RFcRfh0vqefjgF69af7TjzsRxVF8itiWvFsJHrIFoA=="],
|
||||
"nuxt/oxc-transform/@oxc-transform/binding-android-arm64": ["@oxc-transform/binding-android-arm64@0.86.0", "", { "os": "android", "cpu": "arm64" }, "sha512-025JJoCWi04alNef6WvLnGCbx2MH9Ld2xvr0168bpOcpBjxt8sOZawu0MPrZQhnNWWiX8rrwrhuUDasWCWHxFw=="],
|
||||
|
||||
"nuxt/oxc-transform/@oxc-transform/binding-darwin-arm64": ["@oxc-transform/binding-darwin-arm64@0.80.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-sVcK4tjXbCfexlhquKVcwoKQrekQWDzRXtDwOWxm3CV1k5qGUm/rl5RAQLnXYtZVgu0U2dGEct9tNms+dzbACA=="],
|
||||
"nuxt/oxc-transform/@oxc-transform/binding-darwin-arm64": ["@oxc-transform/binding-darwin-arm64@0.86.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-dJls3eCO1Y2dc4zAdA+fiRbQwlvFFDmfRHRpGOllwS1FtvKQ7dMkRFKsHODEdxWakxISLvyabUmkGOhcJ47Dog=="],
|
||||
|
||||
"nuxt/oxc-transform/@oxc-transform/binding-darwin-x64": ["@oxc-transform/binding-darwin-x64@0.80.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-MWmDTJszdO3X2LvbvIZocdfJnb/wjr3zhU99IlruwxsFfVNHbl03091bXi1ABsV5dyU+47V/A5jG3xOtg5X0vQ=="],
|
||||
"nuxt/oxc-transform/@oxc-transform/binding-darwin-x64": ["@oxc-transform/binding-darwin-x64@0.86.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-udMZFZn6FEy36tVMs/yrczEqWyCJc+l/lqIMS4xYWsm/6qVafUWDSAZJLgcPilng16IdMnHINkc8NSz7Pp1EVw=="],
|
||||
|
||||
"nuxt/oxc-transform/@oxc-transform/binding-freebsd-x64": ["@oxc-transform/binding-freebsd-x64@0.80.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-fKuwj/iBfjfGePjcR9+j2TQ/7RlrUIT4ir/OAcHWYJ/kvxp4XY/juKYXo4lks/MW/dwe+UR1Lp6xiCQBuxpyIg=="],
|
||||
"nuxt/oxc-transform/@oxc-transform/binding-freebsd-x64": ["@oxc-transform/binding-freebsd-x64@0.86.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-41J5qSlypbE0HCOd+4poFD96+ZKoR8sfDn5qdaU0Hc5bT5Drwat/wv06s9Y5Lu86uXYTwPPj6kbbxHHsiV2irw=="],
|
||||
|
||||
"nuxt/oxc-transform/@oxc-transform/binding-linux-arm-gnueabihf": ["@oxc-transform/binding-linux-arm-gnueabihf@0.80.0", "", { "os": "linux", "cpu": "arm" }, "sha512-R0QdfKiV+ZFiM28UnyylOEtTBFjAb4XuHvQltUSUpylXXIbGd+0Z1WF5lY3Z776Vy00HWhYj/Vo03rhvjdVDTA=="],
|
||||
"nuxt/oxc-transform/@oxc-transform/binding-linux-arm-gnueabihf": ["@oxc-transform/binding-linux-arm-gnueabihf@0.86.0", "", { "os": "linux", "cpu": "arm" }, "sha512-mrI+nKgwRsr4FYjb0pECrNTVnNvHAflukS3SFqFHI8n+3LJgrCYDcnbrFD/4VWKp2EUrkIZ//RhwgGsTiSXbng=="],
|
||||
|
||||
"nuxt/oxc-transform/@oxc-transform/binding-linux-arm-musleabihf": ["@oxc-transform/binding-linux-arm-musleabihf@0.80.0", "", { "os": "linux", "cpu": "arm" }, "sha512-hIfp4LwyQMRhsY9ptx4UleffoY9wZofTmnHFhZTMdb/hoE97Vuqw7Ub2cLcWMu0FYHIX8zXCMd1CJjs2MV1X3w=="],
|
||||
"nuxt/oxc-transform/@oxc-transform/binding-linux-arm-musleabihf": ["@oxc-transform/binding-linux-arm-musleabihf@0.86.0", "", { "os": "linux", "cpu": "arm" }, "sha512-FXWyvpxiEXBewA3L6HGFtEribqFjGOiounD8ke/4C1F5134+rH5rNrgK6vY116P4MtWKfZolMRdvlzaD3TaX0A=="],
|
||||
|
||||
"nuxt/oxc-transform/@oxc-transform/binding-linux-arm64-gnu": ["@oxc-transform/binding-linux-arm64-gnu@0.80.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-mOYGji1m55BD2vV5m1qnrXbdqyPp/AU9p1Rn+0hM2zkE3pVkETCPvLevSvt4rHQZBZFIWeRGo47QNsNQyaZBsg=="],
|
||||
"nuxt/oxc-transform/@oxc-transform/binding-linux-arm64-gnu": ["@oxc-transform/binding-linux-arm64-gnu@0.86.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-gktU/9WLAc0d2hAq8yRi3K92xwkWoDt1gJmokMOfb1FU4fyDbzbt13jdZEd6KVn2xLaiQeaFTTfFTghFsJUM3A=="],
|
||||
|
||||
"nuxt/oxc-transform/@oxc-transform/binding-linux-arm64-musl": ["@oxc-transform/binding-linux-arm64-musl@0.80.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-kBBCQwr1GCkr/b0iXH+ijsg+CSPCAMSV2tu4LmG2PFaxBnZilMYfUyWHCAiskbbUADikecUfwX6hHIaQoMaixg=="],
|
||||
"nuxt/oxc-transform/@oxc-transform/binding-linux-arm64-musl": ["@oxc-transform/binding-linux-arm64-musl@0.86.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-2w5e5qiTBYQ0xc1aSY1GNyAOP9BQFEjN43FI3OhrRWZXHOj3inqcVSlptO/hHGK3Q2bG26kWLfSNFOEylTX39A=="],
|
||||
|
||||
"nuxt/oxc-transform/@oxc-transform/binding-linux-riscv64-gnu": ["@oxc-transform/binding-linux-riscv64-gnu@0.80.0", "", { "os": "linux", "cpu": "none" }, "sha512-8CGJhHoD2Ttw8HtCNd/IWnGtL0Nsn448L2hZJtbDDGVUZUF4bbZFdXPnRt0QrEbupywoH6InN6q2imLous6xnw=="],
|
||||
"nuxt/oxc-transform/@oxc-transform/binding-linux-riscv64-gnu": ["@oxc-transform/binding-linux-riscv64-gnu@0.86.0", "", { "os": "linux", "cpu": "none" }, "sha512-PfnTYm+vQ9X5VNXqs0Z3S67Xp2FoZj5RteYKUNwL+j/sxGi05eps+EWLVrcGsuN9x2GHFpTiqBz3lzERCn2USg=="],
|
||||
|
||||
"nuxt/oxc-transform/@oxc-transform/binding-linux-s390x-gnu": ["@oxc-transform/binding-linux-s390x-gnu@0.80.0", "", { "os": "linux", "cpu": "s390x" }, "sha512-V/Lb6m5loWzvdB/qo6eYvVXidQku/PA706JbeE/PPCup8At+BwOXnZjktv7LDxrpuqnO32tZDHUUc9Y3bzOEBw=="],
|
||||
"nuxt/oxc-transform/@oxc-transform/binding-linux-s390x-gnu": ["@oxc-transform/binding-linux-s390x-gnu@0.86.0", "", { "os": "linux", "cpu": "s390x" }, "sha512-uHgGN0rFfqDcdkLUITshqrpV34PRKAiRwsw6Jgkg7CRcRGIU8rOJc568EU0jfhTZ1zO5MJKt/S8D6cgIFJwe0A=="],
|
||||
|
||||
"nuxt/oxc-transform/@oxc-transform/binding-linux-x64-gnu": ["@oxc-transform/binding-linux-x64-gnu@0.80.0", "", { "os": "linux", "cpu": "x64" }, "sha512-03hHW04MQNb+ak27xo79nUkMjVu6146TNgeSapcDRATH4R0YMmXB2oPQK1K2nuBJzVZjBjH7Bus/I7tR3JasAg=="],
|
||||
"nuxt/oxc-transform/@oxc-transform/binding-linux-x64-gnu": ["@oxc-transform/binding-linux-x64-gnu@0.86.0", "", { "os": "linux", "cpu": "x64" }, "sha512-MtrvfU2RkSD+oTnzG4Xle3jK8FXJPQa1MhYQm0ivcAMf0tUQDojTaqBtM/9E0iFr/4l1xZODJOHCGjLktdpykg=="],
|
||||
|
||||
"nuxt/oxc-transform/@oxc-transform/binding-linux-x64-musl": ["@oxc-transform/binding-linux-x64-musl@0.80.0", "", { "os": "linux", "cpu": "x64" }, "sha512-BkXniuuHpo9cR2S3JDKIvmUrNvmm335owGW4rfp07HjVUsbq9e7bSnvOnyA3gXGdrPR2IgCWGi5nnXk2NN5Q0A=="],
|
||||
"nuxt/oxc-transform/@oxc-transform/binding-linux-x64-musl": ["@oxc-transform/binding-linux-x64-musl@0.86.0", "", { "os": "linux", "cpu": "x64" }, "sha512-wTTTIPcnoS04SRJ7HuOL/VxIu1QzUtv2n6Mx0wPIEQobj2qPGum0qYGnFEMU0Njltp+8FAUg5EfX6u3udRQBbQ=="],
|
||||
|
||||
"nuxt/oxc-transform/@oxc-transform/binding-wasm32-wasi": ["@oxc-transform/binding-wasm32-wasi@0.80.0", "", { "dependencies": { "@napi-rs/wasm-runtime": "^1.0.1" }, "cpu": "none" }, "sha512-jfRRXLtfSgTeJXBHj6qb+HHUd6hmYcyUNMBcTY8/k+JVsx0ThfrmCIufNlSJTt1zB+ugnMVMuQGeB0oF+aa86w=="],
|
||||
"nuxt/oxc-transform/@oxc-transform/binding-wasm32-wasi": ["@oxc-transform/binding-wasm32-wasi@0.86.0", "", { "dependencies": { "@napi-rs/wasm-runtime": "^1.0.3" }, "cpu": "none" }, "sha512-g+0bf+ZA2DvBHQ+0u8TvEY8ERo86Brqvdghfv06Wph2qGTlhzSmrE0c0Zurr7yhtqI5yZjMaBr2HbqwW1kHFng=="],
|
||||
|
||||
"nuxt/oxc-transform/@oxc-transform/binding-win32-arm64-msvc": ["@oxc-transform/binding-win32-arm64-msvc@0.80.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-bofcVhlAV1AKzbE0TgDH+h813pbwWwwRhN6tv/hD4qEuWh/qEjv8Xb3Ar15xfBfyLI53FoJascuaJAFzX+IN9A=="],
|
||||
"nuxt/oxc-transform/@oxc-transform/binding-win32-arm64-msvc": ["@oxc-transform/binding-win32-arm64-msvc@0.86.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-dgBeU4qBEag0rhW3OT9YHgj4cvW51KZzrxhDQ1gAVX2fqgl+CeJnu0a9q+DMhefHrO3c8Yxwbt7NxUDmWGkEtg=="],
|
||||
|
||||
"nuxt/oxc-transform/@oxc-transform/binding-win32-x64-msvc": ["@oxc-transform/binding-win32-x64-msvc@0.80.0", "", { "os": "win32", "cpu": "x64" }, "sha512-MT6hQo9Kw/VuQUfX0fc0OpUdZesQruT0UNY9hxIcqcli7pbxMrvFBjkXo7oUb2151s/n+F4fyQOWvaR6zwxtDA=="],
|
||||
"nuxt/oxc-transform/@oxc-transform/binding-win32-x64-msvc": ["@oxc-transform/binding-win32-x64-msvc@0.86.0", "", { "os": "win32", "cpu": "x64" }, "sha512-M1eCl8xz7MmEatuqWdr+VdvNCUJ+d4ECF+HND39PqRCVkaH+Vl1rcyP5pLILb2CB/wTb2DMvZmb9RCt5+8S5TQ=="],
|
||||
|
||||
"nuxt/unplugin-vue-router/@vue-macros/common": ["@vue-macros/common@3.0.0-beta.16", "", { "dependencies": { "@vue/compiler-sfc": "^3.5.17", "ast-kit": "^2.1.1", "local-pkg": "^1.1.1", "magic-string-ast": "^1.0.0", "unplugin-utils": "^0.2.4" }, "peerDependencies": { "vue": "^2.7.0 || ^3.2.25" }, "optionalPeers": ["vue"] }, "sha512-8O2gWxWFiaoNkk7PGi0+p7NPGe/f8xJ3/INUufvje/RZOs7sJvlI1jnR4lydtRFa/mU0ylMXUXXjSK0fHDEYTA=="],
|
||||
|
||||
|
||||
160
locales/en.json
Normal file
160
locales/en.json
Normal file
@@ -0,0 +1,160 @@
|
||||
{
|
||||
"main": {
|
||||
"init": "Hey, welcome to ArtChat. I'm an AI assistant that knows everything about Arthur Danjou. Ask me anything and I'll answer as if I were him!",
|
||||
"question": "Awesome! Tell me a bit more about you.",
|
||||
"about": "I'm a student in Mathematics and Statistics at Université Paris-Dauphine in France. With a deep understanding of emerging technologies, I'm at the heart of a rapidly expanding field. My background in mathematics gives me an edge in understanding the concepts and theories behind these technologies and designing them effectively."
|
||||
},
|
||||
"palette": {
|
||||
"clear": {
|
||||
"cancel": "Cancel",
|
||||
"submit": "Delete",
|
||||
"title": "Are you sure you want to delete this conversation?",
|
||||
"description": "This action cannot be undone."
|
||||
},
|
||||
"cmd": {
|
||||
"send": "Send message",
|
||||
"sending": "Sending..."
|
||||
}
|
||||
},
|
||||
"command": {
|
||||
"actions": "Components",
|
||||
"arthur": "More about Arthur",
|
||||
"interface": "Change the interface",
|
||||
"theme": {
|
||||
"label": "Change theme",
|
||||
"prompt": "How can I change the theme?"
|
||||
},
|
||||
"uses": {
|
||||
"label": "View setup",
|
||||
"prompt": "How can I view the setup of Arthur?"
|
||||
},
|
||||
"stats": {
|
||||
"label": "View statistics",
|
||||
"prompt": "How can I view the statistics concerning Arthur?"
|
||||
},
|
||||
"weather": {
|
||||
"label": "View weather",
|
||||
"prompt": "How can I view the weather conditions near Arthur?"
|
||||
},
|
||||
"location": {
|
||||
"label": "View location",
|
||||
"prompt": "How can I view the location of Arthur?"
|
||||
},
|
||||
"language": {
|
||||
"label": "Change language",
|
||||
"prompt": "How can I change the chat language?"
|
||||
},
|
||||
"activity": {
|
||||
"label": "Activity",
|
||||
"prompt": "What are you currently doing?"
|
||||
},
|
||||
"about": {
|
||||
"label": "About Arthur",
|
||||
"prompt": "I want you to tell me about yourself."
|
||||
},
|
||||
"projects": {
|
||||
"label": "Projects",
|
||||
"prompt": "Tell me about your projects."
|
||||
},
|
||||
"writings": {
|
||||
"label": "Writings",
|
||||
"prompt": "What are your latest articles?"
|
||||
},
|
||||
"experiences": {
|
||||
"label": "Experiences",
|
||||
"prompt": "What experiences do you have in your career?"
|
||||
},
|
||||
"skills": {
|
||||
"label": "Skills",
|
||||
"prompt": "What are your skills?"
|
||||
},
|
||||
"status": {
|
||||
"label": "Homelab status",
|
||||
"prompt": "I saw you have a homelab, is it currently working?"
|
||||
},
|
||||
"resume": {
|
||||
"label": "Resume",
|
||||
"prompt": "Can you send me your resume?"
|
||||
},
|
||||
"contact": {
|
||||
"label": "Contact",
|
||||
"prompt": "How can I contact you?"
|
||||
},
|
||||
"hobbies": {
|
||||
"label": "Hobbies and passions",
|
||||
"prompt": "What are your hobbies? Your passions? Your interests?"
|
||||
},
|
||||
"credits": {
|
||||
"label": "Credits",
|
||||
"prompt": "How is this chat made?"
|
||||
}
|
||||
},
|
||||
"chat": {
|
||||
"state": {
|
||||
"thinking": "Thinking...",
|
||||
"fetching": "Fetching the data...",
|
||||
"generating": "Generating the component...",
|
||||
"done": "Done!"
|
||||
}
|
||||
},
|
||||
"tool": {
|
||||
"language": {
|
||||
"change": "Change language",
|
||||
"response": {
|
||||
"control": "I added the language switch control above so you can switch directly.",
|
||||
"choose": "Choose English, French, or Spanish",
|
||||
"kbd": "Press {kbd} on your keyboard"
|
||||
}
|
||||
},
|
||||
"activity": {
|
||||
"offline": "I'm currently offline. Come back later to see what I'm working on. {maths}",
|
||||
"working": "I'm actually online! Check what I'm working on just below.",
|
||||
"idling": "I'm idling on my computer with {editor} running in background.",
|
||||
"maths": "I am probably doing some maths or sleeping.",
|
||||
"response": "The statistics are powered and saved by WakaTime.",
|
||||
"tooltip": {
|
||||
"online": "I'm online 👋",
|
||||
"offline": "I'm offline 🫥",
|
||||
"idling": "I'm sleeping 😴"
|
||||
},
|
||||
"started": "Started the {date} at {hour}",
|
||||
"secret": "Secret Project"
|
||||
},
|
||||
"location": "I'm currently based in {location}. See below for more details.",
|
||||
"uses": "Here is a comprehensive list of all the software I use, gadgets I love, and other things I recommend.",
|
||||
"contact": "There are different ways to contact me. Here is a list:",
|
||||
"duplicated": {
|
||||
"title": "⚠️ I detected duplicated messages",
|
||||
"description": "I have therefore removed the older duplicated messages to lighten the application."
|
||||
},
|
||||
"stats": {
|
||||
"main": "I collect some data for {time} years, started the {date}. I've coded for a total of {hours} hours.",
|
||||
"editors": "My top editors are {editors}",
|
||||
"os": "My best OS is {os}",
|
||||
"languages": "My favorite languages are {languages}",
|
||||
"separator": " and ",
|
||||
"tooltip": {
|
||||
"date": "That was so long ago 🫣",
|
||||
"hours": "That's a lot 😮"
|
||||
}
|
||||
},
|
||||
"theme": {
|
||||
"switch": "Switch theme",
|
||||
"light": "Light",
|
||||
"dark": "Dark",
|
||||
"response": {
|
||||
"control": "I added the theme toggle control above so you can switch directly.",
|
||||
"choose": "Choose Light (sun icon) or Dark (moon icon)",
|
||||
"kbd": "Press {kbd} on your keyboard"
|
||||
}
|
||||
},
|
||||
"weather": {
|
||||
"main": "Weather",
|
||||
"powered_by": "Powered by OpenWeatherMap",
|
||||
"low": "Low",
|
||||
"high": "High",
|
||||
"humidity": "Humidity",
|
||||
"wind": "Wind"
|
||||
}
|
||||
}
|
||||
}
|
||||
160
locales/es.json
Normal file
160
locales/es.json
Normal file
@@ -0,0 +1,160 @@
|
||||
{
|
||||
"main": {
|
||||
"init": "Hola, bienvenido a ArtChat. Soy un asistente de IA que sabe todo sobre Arthur Danjou. Hazme preguntas y responderé como si fuera él.",
|
||||
"question": "¡Genial! Háblame un poco más sobre ti.",
|
||||
"about": "Soy estudiante de Matemáticas y Estadísticas en la Universidad Paris-Dauphine en Francia. Con una comprensión profunda de las tecnologías emergentes, estoy en el corazón de un campo en rápida expansión. Mi formación en matemáticas me da una ventaja para comprender los conceptos y teorías detrás de estas tecnologías y para diseñarlas de manera efectiva."
|
||||
},
|
||||
"palette": {
|
||||
"clear": {
|
||||
"cancel": "Cancelar",
|
||||
"submit": "Eliminar",
|
||||
"title": "¿Estás seguro de que deseas eliminar esta conversación?",
|
||||
"description": "Esta acción no se puede deshacer."
|
||||
},
|
||||
"cmd": {
|
||||
"send": "Enviar el mensaje",
|
||||
"sending": "Enviando..."
|
||||
}
|
||||
},
|
||||
"command": {
|
||||
"actions": "Componentes",
|
||||
"arthur": "Más sobre Arthur",
|
||||
"interface": "Cambiar la interfaz",
|
||||
"theme": {
|
||||
"label": "Cambiar tema",
|
||||
"prompt": "¿Cómo puedo cambiar el tema?"
|
||||
},
|
||||
"uses": {
|
||||
"label": "Ver la configuración",
|
||||
"prompt": "¿Cómo puedo ver la configuración de Arthur?"
|
||||
},
|
||||
"stats": {
|
||||
"label": "Ver estadísticas",
|
||||
"prompt": "¿Cómo puedo ver las estadísticas sobre Arthur?"
|
||||
},
|
||||
"weather": {
|
||||
"label": "Ver el clima",
|
||||
"prompt": "¿Cómo puedo ver las condiciones climáticas cerca de Arthur?"
|
||||
},
|
||||
"location": {
|
||||
"label": "Ver ubicación",
|
||||
"prompt": "¿Cómo puedo ver la ubicación de Arthur?"
|
||||
},
|
||||
"language": {
|
||||
"label": "Cambiar idioma",
|
||||
"prompt": "¿Cómo puedo cambiar el idioma del chat?"
|
||||
},
|
||||
"activity": {
|
||||
"label": "Actividad",
|
||||
"prompt": "¿Qué estás haciendo actualmente?"
|
||||
},
|
||||
"about": {
|
||||
"label": "Sobre Arthur",
|
||||
"prompt": "Quiero que me hables de ti."
|
||||
},
|
||||
"projects": {
|
||||
"label": "Proyectos",
|
||||
"prompt": "Háblame de tus proyectos."
|
||||
},
|
||||
"writings": {
|
||||
"label": "Escritos",
|
||||
"prompt": "¿Cuáles son tus últimos artículos?"
|
||||
},
|
||||
"experiences": {
|
||||
"label": "Experiencias",
|
||||
"prompt": "¿Qué experiencias tienes en tu carrera?"
|
||||
},
|
||||
"skills": {
|
||||
"label": "Habilidades",
|
||||
"prompt": "¿Cuáles son tus habilidades?"
|
||||
},
|
||||
"status": {
|
||||
"label": "Estado del homelab",
|
||||
"prompt": "Vi que tienes un homelab, ¿está funcionando actualmente?"
|
||||
},
|
||||
"resume": {
|
||||
"label": "CV",
|
||||
"prompt": "¿Puedes enviarme tu CV?"
|
||||
},
|
||||
"contact": {
|
||||
"label": "Contacto",
|
||||
"prompt": "¿Cómo puedo contactarte?"
|
||||
},
|
||||
"hobbies": {
|
||||
"label": "Pasatiempos y pasiones",
|
||||
"prompt": "¿Cuáles son tus pasatiempos? ¿Tus pasiones? ¿Tus intereses?"
|
||||
},
|
||||
"credits": {
|
||||
"label": "Créditos",
|
||||
"prompt": "¿Cómo se ha hecho este chat?"
|
||||
}
|
||||
},
|
||||
"chat": {
|
||||
"state": {
|
||||
"thinking": "Pensando...",
|
||||
"fetching": "Obteniendo los datos...",
|
||||
"generating": "Generando el componente...",
|
||||
"done": "¡Hecho!"
|
||||
}
|
||||
},
|
||||
"tool": {
|
||||
"language": {
|
||||
"change": "Cambiar idioma",
|
||||
"response": {
|
||||
"control": "He añadido el control de cambio de idioma arriba para que puedas cambiar directamente.",
|
||||
"choose": "Elige Inglés, Francés o Español",
|
||||
"kbd": "Presiona {kbd} en tu teclado"
|
||||
}
|
||||
},
|
||||
"activity": {
|
||||
"offline": "Ahora mismo estoy desconectado. Vuelve más tarde para ver en lo que estoy trabajando. {maths}",
|
||||
"working": "Estoy trabajando en línea. ¡Mira lo que estoy haciendo justo debajo!",
|
||||
"idling": "Estoy en reposo en mi ordenador con {editor} en segundo plano.",
|
||||
"maths": "Estoy probablemente haciendo matemáticas o durmiendo.",
|
||||
"response": "Las estadísticas son propulsadas y registradas por WakaTime.",
|
||||
"tooltip": {
|
||||
"online": "Estoy conectado 👋",
|
||||
"offline": "Estoy desconectado 🫥",
|
||||
"idling": "Estoy durmiendo 😴"
|
||||
},
|
||||
"started": "Comenzado el {date} a {hour}",
|
||||
"secret": "Proyecto Secreto"
|
||||
},
|
||||
"location": "Actualmente estoy basado en {location}. Consulta más detalles a continuación.",
|
||||
"uses": "Aquí hay una gran lista de todo el software que uso, gadgets que amo y otras cosas que recomiendo.",
|
||||
"contact": "Existen diferentes formas de contactarme. Aquí hay una lista:",
|
||||
"duplicated": {
|
||||
"title": "⚠️ He detectado mensajes duplicados",
|
||||
"description": "Por lo tanto, eliminé los mensajes duplicados más antiguos para aligerar la aplicación."
|
||||
},
|
||||
"stats": {
|
||||
"main": "Recopilo datos desde hace {time} años, empecé el {date}. He programado durante un total de {hours} horas.",
|
||||
"editors": "Mis mejores editores son {editors}.",
|
||||
"os": "Mi mejor OS es {os}.",
|
||||
"languages": "Mis lenguajes favoritos son {languages}.",
|
||||
"separator": " y ",
|
||||
"tooltip": {
|
||||
"date": "hace tato tiempo…🫣",
|
||||
"hours": "es mucho 😮"
|
||||
}
|
||||
},
|
||||
"theme": {
|
||||
"switch": "Cambiar tema",
|
||||
"light": "Claro",
|
||||
"dark": "Oscuro",
|
||||
"response": {
|
||||
"control": "He añadido el control de alternancia de tema arriba para que puedas cambiar directamente.",
|
||||
"choose": "Elige Claro (icono de sol) u Oscuro (icono de luna)",
|
||||
"kbd": "Presiona {kbd} en tu teclado"
|
||||
}
|
||||
},
|
||||
"weather": {
|
||||
"main": "Tiempo",
|
||||
"powered_by": "Impulsado por OpenWeatherMap",
|
||||
"low": "Bajo",
|
||||
"high": "Alto",
|
||||
"humidity": "Humedad",
|
||||
"wind": "Viento"
|
||||
}
|
||||
}
|
||||
}
|
||||
160
locales/fr.json
Normal file
160
locales/fr.json
Normal file
@@ -0,0 +1,160 @@
|
||||
{
|
||||
"main": {
|
||||
"init": "Salut, bienvenue sur ArtChat. Je suis un assistant IA connaissant tout sur Arthur Danjou. Pose moi des questions et j'y répondrai comme si j'étais lui.",
|
||||
"question": "Génial ! Parle moi un peu plus de toi.",
|
||||
"about": "Je suis étudiant en Mathématiques et en Statistiques à l'Université Paris-Dauphine en France. Avec une compréhension approfondie des technologies émergentes, je suis au cœur d'un domaine en pleine expansion. Mon parcours en mathématiques me donne un avantage pour comprendre les concepts et les théories derrière ces technologies et pour les concevoir efficacement."
|
||||
},
|
||||
"palette": {
|
||||
"clear": {
|
||||
"cancel": "Annuler",
|
||||
"submit": "Supprimer",
|
||||
"title": "Êtes-vous sûr de vouloir supprimer cette conversation ?",
|
||||
"description": "Cette action ne peut pas être annulée."
|
||||
},
|
||||
"cmd": {
|
||||
"send": "Envoyer le message",
|
||||
"sending": "Envoi..."
|
||||
}
|
||||
},
|
||||
"command": {
|
||||
"actions": "Composants",
|
||||
"arthur": "En savoir plus sur Arthur",
|
||||
"interface": "Changer l'interface",
|
||||
"theme": {
|
||||
"label": "Changer de thème",
|
||||
"prompt": "Comment puis-je changer le thème ?"
|
||||
},
|
||||
"uses": {
|
||||
"label": "Voir la configuration",
|
||||
"prompt": "Comment puis-je voir la configuration d'Arthur ?"
|
||||
},
|
||||
"stats": {
|
||||
"label": "Voir les statistiques",
|
||||
"prompt": "Comment puis-je voir les statistiques concernant Arthur ?"
|
||||
},
|
||||
"weather": {
|
||||
"label": "Voir la météo",
|
||||
"prompt": "Comment puis-je voir les conditions météorologiques près d'Arthur ?"
|
||||
},
|
||||
"location": {
|
||||
"label": "Voir la localisation",
|
||||
"prompt": "Comment puis-je voir la localisation d'Arthur ?"
|
||||
},
|
||||
"language": {
|
||||
"label": "Changer de langue",
|
||||
"prompt": "Comment puis-je changer la langue du chat ?"
|
||||
},
|
||||
"activity": {
|
||||
"label": "Activité",
|
||||
"prompt": "Que fais-tu actuellement ?"
|
||||
},
|
||||
"about": {
|
||||
"label": "A propos d'Arthur",
|
||||
"prompt": "Je veux que tu me parles de toi."
|
||||
},
|
||||
"projects": {
|
||||
"label": "Projets",
|
||||
"prompt": "Je veux que tu me parles de tes projets."
|
||||
},
|
||||
"writings": {
|
||||
"label": "Écrits",
|
||||
"prompt": "Quels sont tes derniers articles ?"
|
||||
},
|
||||
"experiences": {
|
||||
"label": "Expériences",
|
||||
"prompt": "Quelles expériences as-tu lors de ta carrière ?"
|
||||
},
|
||||
"skills": {
|
||||
"label": "Compétences",
|
||||
"prompt": "Quelles sont tes compétences ?"
|
||||
},
|
||||
"status": {
|
||||
"label": "Statut du homelab",
|
||||
"prompt": "J'ai vu que tu avais un homelab, est-il actuellement fonctionnel ?"
|
||||
},
|
||||
"resume": {
|
||||
"label": "CV",
|
||||
"prompt": "Peux-tu m'envoyer ton CV ?"
|
||||
},
|
||||
"contact": {
|
||||
"label": "Contact",
|
||||
"prompt": "Comment puis-je te contacter ?"
|
||||
},
|
||||
"hobbies": {
|
||||
"label": "Loisirs et passions",
|
||||
"prompt": "Quels sont tes loisirs ? Tes passions ? Tes intérêts ?"
|
||||
},
|
||||
"credits": {
|
||||
"label": "Crédits",
|
||||
"prompt": "Comment est réalisé ce chat ?"
|
||||
}
|
||||
},
|
||||
"chat": {
|
||||
"state": {
|
||||
"thinking": "En train de réfléchir...",
|
||||
"fetching": "Récupération des données...",
|
||||
"generating": "Génération du composant...",
|
||||
"done": "Terminé !"
|
||||
}
|
||||
},
|
||||
"tool": {
|
||||
"language": {
|
||||
"change": "Changer de langue",
|
||||
"response": {
|
||||
"control": "J'ai ajouté le contrôle de changement de langue ci-dessus pour que vous puissiez changer directement.",
|
||||
"choose": "Choisissez Anglais, Français ou Espagnol",
|
||||
"kbd": "Appuyez sur {kbd} de votre clavier"
|
||||
}
|
||||
},
|
||||
"activity": {
|
||||
"offline": "Je suis actuellement hors ligne. Revenez plus tard pour voir sur quoi je travaille. {maths}",
|
||||
"working": "Je suis actuellement en ligne ! Découvrez ce sur quoi je travaille juste en dessous.",
|
||||
"idling": "Je suis en veille sur mon ordinateur avec {editor} en arrière-plan.",
|
||||
"maths": "Je suis probablement en train de faire des maths ou en train de dormir.",
|
||||
"response": "Les statistiques sont propulsées et enregistrées par WakaTime.",
|
||||
"tooltip": {
|
||||
"online": "Je suis connecté 👋",
|
||||
"offline": "Je suis déconnecté 🫥",
|
||||
"idling": "Je dors 😴"
|
||||
},
|
||||
"started": "Commencé le {date} à {hour}",
|
||||
"secret": "Projet Secret"
|
||||
},
|
||||
"location": "Je suis actuellement basé à {location}. Voir ci-dessous pour plus de détails.",
|
||||
"uses": "Voici une grande liste de tous mes logiciels que j'utilise, gadgets que j'adore et autres choses que je recommande.",
|
||||
"contact": "Il existe différentes façons de me contacter. Voici une liste :",
|
||||
"duplicated": {
|
||||
"title": "⚠️ J'ai détecté des messages dupliqués",
|
||||
"description": "J'ai donc supprimé les anciens messages dupliqués pour alléger l'application."
|
||||
},
|
||||
"stats": {
|
||||
"main": "Je collecte des données depuis {time} ans, commencé le {date}. J'ai codé un total de {hours} heures.",
|
||||
"editors": "Mes meilleurs éditeurs sont {editors}",
|
||||
"os": "Mon meilleur OS est {os}",
|
||||
"languages": "Mes langages préférés sont {languages}",
|
||||
"separator": " et ",
|
||||
"tooltip": {
|
||||
"date": "C'était il y a si longtemps 🫣",
|
||||
"hours": "C'est beaucoup 😮"
|
||||
}
|
||||
},
|
||||
"theme": {
|
||||
"switch": "Changer de thème",
|
||||
"light": "Clair",
|
||||
"dark": "Sombre",
|
||||
"response": {
|
||||
"control": "J'ai ajouté le contrôle de basculement de thème ci-dessus afin que vous puissiez basculer directement.",
|
||||
"choose": "Choisissez Clair (icône de soleil) ou Sombre (icône de lune)",
|
||||
"kbd": "Appuyez sur {kbd} sur votre clavier"
|
||||
}
|
||||
},
|
||||
"weather": {
|
||||
"main": "Météo",
|
||||
"powered_by": "Alimenté par OpenWeatherMap",
|
||||
"low": "Bas",
|
||||
"high": "Haut",
|
||||
"humidity": "Humidité",
|
||||
"wind": "Vent"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -72,21 +72,26 @@ export default defineNuxtConfig({
|
||||
code: 'en',
|
||||
language: 'en-EN',
|
||||
icon: 'i-twemoji-flag-united-kingdom',
|
||||
file: 'en.json',
|
||||
},
|
||||
{
|
||||
label: 'Français',
|
||||
code: 'fr',
|
||||
language: 'fr-FR',
|
||||
icon: 'i-twemoji-flag-france',
|
||||
file: 'fr.json',
|
||||
},
|
||||
{
|
||||
label: 'Español',
|
||||
code: 'es',
|
||||
language: 'es-ES',
|
||||
icon: 'i-twemoji-flag-spain',
|
||||
file: 'es.json',
|
||||
},
|
||||
],
|
||||
defaultLocale: 'en',
|
||||
langDir: 'locales',
|
||||
restructureDir: '',
|
||||
},
|
||||
|
||||
// Nuxt Google Fonts
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
"@tailwindcss/typography": "^0.5.16",
|
||||
"better-sqlite3": "^12.2.0",
|
||||
"eslint": "^9.0.0",
|
||||
"nuxt": "^4.0.3",
|
||||
"nuxt": "4.1.0",
|
||||
"rehype-katex": "^7.0.1",
|
||||
"remark-math": "^6.0.0",
|
||||
"remark-parse": "^11.0.0",
|
||||
|
||||
274
types/chat.ts
274
types/chat.ts
@@ -31,10 +31,10 @@ export enum ChatSender {
|
||||
}
|
||||
|
||||
export enum ChatFetchState {
|
||||
THINKING = 'Thinking...',
|
||||
FETCHING = 'Fetching the data...',
|
||||
GENERATING = 'Generating the component...',
|
||||
DONE = 'Done!',
|
||||
THINKING = 'chat.state.thinking',
|
||||
FETCHING = 'chat.state.fetching',
|
||||
GENERATING = 'chat.state.generating',
|
||||
DONE = 'chat.state.done',
|
||||
}
|
||||
|
||||
export interface ChatMessage {
|
||||
@@ -46,137 +46,135 @@ export interface ChatMessage {
|
||||
fetchStates?: ChatFetchState[]
|
||||
}
|
||||
|
||||
export function ChatMessages(t: any) {
|
||||
return [
|
||||
{
|
||||
id: 'interface',
|
||||
label: t('chat.interface'),
|
||||
items: [
|
||||
{
|
||||
label: t('chat.theme.label'),
|
||||
icon: 'i-ph-lightbulb-filament-duotone',
|
||||
prompt: t('chat.theme.prompt'),
|
||||
type: ChatType.THEME,
|
||||
fetchStates: [ChatFetchState.THINKING, ChatFetchState.GENERATING],
|
||||
},
|
||||
{
|
||||
label: t('chat.language.label'),
|
||||
icon: 'i-ph-translate-duotone',
|
||||
prompt: t('chat.language.prompt'),
|
||||
type: ChatType.LANGUAGE,
|
||||
fetchStates: [ChatFetchState.THINKING, ChatFetchState.GENERATING],
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'actions',
|
||||
label: t('chat.actions'),
|
||||
items: [
|
||||
{
|
||||
label: t('chat.location.label'),
|
||||
icon: 'i-ph-map-pin-area-duotone',
|
||||
prompt: t('chat.location.prompt'),
|
||||
type: ChatType.LOCATION,
|
||||
fetchStates: [ChatFetchState.FETCHING, ChatFetchState.GENERATING],
|
||||
},
|
||||
{
|
||||
label: t('chat.stats.label'),
|
||||
icon: 'i-ph-projector-screen-chart-duotone',
|
||||
prompt: t('chat.stats.prompt'),
|
||||
type: ChatType.STATS,
|
||||
fetchStates: [ChatFetchState.FETCHING, ChatFetchState.GENERATING],
|
||||
},
|
||||
{
|
||||
label: t('chat.weather.label'),
|
||||
icon: 'i-ph-cloud-rain-duotone',
|
||||
prompt: t('chat.weather.prompt'),
|
||||
type: ChatType.WEATHER,
|
||||
fetchStates: [ChatFetchState.FETCHING, ChatFetchState.GENERATING],
|
||||
},
|
||||
{
|
||||
label: t('chat.activity.label'),
|
||||
icon: 'i-ph-activity',
|
||||
prompt: t('chat.activity.prompt'),
|
||||
type: ChatType.ACTIVITY,
|
||||
fetchStates: [ChatFetchState.FETCHING, ChatFetchState.GENERATING],
|
||||
},
|
||||
{
|
||||
label: t('chat.status.label'),
|
||||
icon: 'i-ph-warning-duotone',
|
||||
prompt: t('chat.status.prompt'),
|
||||
type: ChatType.STATUS,
|
||||
fetchStates: [ChatFetchState.FETCHING],
|
||||
},
|
||||
].sort((a, b) => a.label.localeCompare(b.label)),
|
||||
},
|
||||
{
|
||||
id: 'arthur',
|
||||
label: t('chat.arthur'),
|
||||
items: [
|
||||
{
|
||||
label: t('chat.credits.label'),
|
||||
icon: 'i-ph-star-duotone',
|
||||
prompt: t('chat.credits.prompt'),
|
||||
type: ChatType.CREDITS,
|
||||
},
|
||||
{
|
||||
label: t('chat.about.label'),
|
||||
icon: 'i-ph-person-arms-spread-duotone',
|
||||
prompt: t('chat.about.prompt'),
|
||||
type: ChatType.ABOUT,
|
||||
},
|
||||
{
|
||||
label: t('chat.projects.label'),
|
||||
icon: 'i-ph-code-duotone',
|
||||
prompt: t('chat.projects.prompt'),
|
||||
type: ChatType.PROJECTS,
|
||||
fetchStates: [ChatFetchState.FETCHING, ChatFetchState.GENERATING],
|
||||
},
|
||||
{
|
||||
label: t('chat.writings.label'),
|
||||
icon: 'i-ph-books-duotone',
|
||||
prompt: t('chat.writings.prompt'),
|
||||
type: ChatType.WRITINGS,
|
||||
fetchStates: [ChatFetchState.FETCHING, ChatFetchState.GENERATING],
|
||||
},
|
||||
{
|
||||
label: t('chat.experiences.label'),
|
||||
icon: 'i-ph-briefcase-duotone',
|
||||
prompt: t('chat.experiences.prompt'),
|
||||
type: ChatType.EXPERIENCES,
|
||||
},
|
||||
{
|
||||
label: t('chat.skills.label'),
|
||||
icon: 'i-ph-rocket-duotone',
|
||||
prompt: t('chat.skills.prompt'),
|
||||
type: ChatType.SKILLS,
|
||||
},
|
||||
{
|
||||
label: t('chat.resume.label'),
|
||||
icon: 'i-ph-address-book-duotone',
|
||||
prompt: t('chat.resume.prompt'),
|
||||
type: ChatType.RESUME,
|
||||
},
|
||||
{
|
||||
label: t('chat.contact.label'),
|
||||
icon: 'i-ph-envelope-duotone',
|
||||
prompt: t('chat.contact.prompt'),
|
||||
type: ChatType.CONTACT,
|
||||
},
|
||||
{
|
||||
label: t('chat.hobbies.label'),
|
||||
icon: 'i-ph-heart-duotone',
|
||||
prompt: t('chat.hobbies.prompt'),
|
||||
type: ChatType.HOBBIES,
|
||||
},
|
||||
{
|
||||
label: t('chat.uses.label'),
|
||||
icon: 'i-ph-chalkboard-simple-duotone',
|
||||
prompt: t('chat.uses.prompt'),
|
||||
type: ChatType.USES,
|
||||
fetchStates: [ChatFetchState.FETCHING, ChatFetchState.GENERATING],
|
||||
},
|
||||
].sort((a, b) => a.label.localeCompare(b.label)),
|
||||
},
|
||||
]
|
||||
}
|
||||
export const ChatMessages = [
|
||||
{
|
||||
id: 'interface',
|
||||
label: 'command.interface',
|
||||
items: [
|
||||
{
|
||||
label: 'command.theme.label',
|
||||
icon: 'i-ph-lightbulb-filament-duotone',
|
||||
prompt: 'command.theme.prompt',
|
||||
type: ChatType.THEME,
|
||||
fetchStates: [ChatFetchState.THINKING, ChatFetchState.GENERATING],
|
||||
},
|
||||
{
|
||||
label: 'command.language.label',
|
||||
icon: 'i-ph-translate-duotone',
|
||||
prompt: 'command.language.prompt',
|
||||
type: ChatType.LANGUAGE,
|
||||
fetchStates: [ChatFetchState.THINKING, ChatFetchState.GENERATING],
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'actions',
|
||||
label: 'command.actions',
|
||||
items: [
|
||||
{
|
||||
label: 'command.location.label',
|
||||
icon: 'i-ph-map-pin-area-duotone',
|
||||
prompt: 'command.location.prompt',
|
||||
type: ChatType.LOCATION,
|
||||
fetchStates: [ChatFetchState.FETCHING, ChatFetchState.GENERATING],
|
||||
},
|
||||
{
|
||||
label: 'command.stats.label',
|
||||
icon: 'i-ph-projector-screen-chart-duotone',
|
||||
prompt: 'command.stats.prompt',
|
||||
type: ChatType.STATS,
|
||||
fetchStates: [ChatFetchState.FETCHING, ChatFetchState.GENERATING],
|
||||
},
|
||||
{
|
||||
label: 'command.weather.label',
|
||||
icon: 'i-ph-cloud-rain-duotone',
|
||||
prompt: 'command.weather.prompt',
|
||||
type: ChatType.WEATHER,
|
||||
fetchStates: [ChatFetchState.FETCHING, ChatFetchState.GENERATING],
|
||||
},
|
||||
{
|
||||
label: 'command.activity.label',
|
||||
icon: 'i-ph-activity',
|
||||
prompt: 'command.activity.prompt',
|
||||
type: ChatType.ACTIVITY,
|
||||
fetchStates: [ChatFetchState.FETCHING, ChatFetchState.GENERATING],
|
||||
},
|
||||
{
|
||||
label: 'command.status.label',
|
||||
icon: 'i-ph-warning-duotone',
|
||||
prompt: 'command.status.prompt',
|
||||
type: ChatType.STATUS,
|
||||
fetchStates: [ChatFetchState.FETCHING],
|
||||
},
|
||||
].sort((a, b) => a.label.localeCompare(b.label)),
|
||||
},
|
||||
{
|
||||
id: 'arthur',
|
||||
label: 'command.arthur',
|
||||
items: [
|
||||
{
|
||||
label: 'command.credits.label',
|
||||
icon: 'i-ph-star-duotone',
|
||||
prompt: 'command.credits.prompt',
|
||||
type: ChatType.CREDITS,
|
||||
},
|
||||
{
|
||||
label: 'command.about.label',
|
||||
icon: 'i-ph-person-arms-spread-duotone',
|
||||
prompt: 'command.about.prompt',
|
||||
type: ChatType.ABOUT,
|
||||
},
|
||||
{
|
||||
label: 'command.projects.label',
|
||||
icon: 'i-ph-code-duotone',
|
||||
prompt: 'command.projects.prompt',
|
||||
type: ChatType.PROJECTS,
|
||||
fetchStates: [ChatFetchState.FETCHING, ChatFetchState.GENERATING],
|
||||
},
|
||||
{
|
||||
label: 'command.writings.label',
|
||||
icon: 'i-ph-books-duotone',
|
||||
prompt: 'command.writings.prompt',
|
||||
type: ChatType.WRITINGS,
|
||||
fetchStates: [ChatFetchState.FETCHING, ChatFetchState.GENERATING],
|
||||
},
|
||||
{
|
||||
label: 'command.experiences.label',
|
||||
icon: 'i-ph-briefcase-duotone',
|
||||
prompt: 'command.experiences.prompt',
|
||||
type: ChatType.EXPERIENCES,
|
||||
},
|
||||
{
|
||||
label: 'command.skills.label',
|
||||
icon: 'i-ph-rocket-duotone',
|
||||
prompt: 'command.skills.prompt',
|
||||
type: ChatType.SKILLS,
|
||||
},
|
||||
{
|
||||
label: 'command.resume.label',
|
||||
icon: 'i-ph-address-book-duotone',
|
||||
prompt: 'command.resume.prompt',
|
||||
type: ChatType.RESUME,
|
||||
},
|
||||
{
|
||||
label: 'command.contact.label',
|
||||
icon: 'i-ph-envelope-duotone',
|
||||
prompt: 'command.contact.prompt',
|
||||
type: ChatType.CONTACT,
|
||||
},
|
||||
{
|
||||
label: 'command.hobbies.label',
|
||||
icon: 'i-ph-heart-duotone',
|
||||
prompt: 'command.hobbies.prompt',
|
||||
type: ChatType.HOBBIES,
|
||||
},
|
||||
{
|
||||
label: 'command.uses.label',
|
||||
icon: 'i-ph-chalkboard-simple-duotone',
|
||||
prompt: 'command.uses.prompt',
|
||||
type: ChatType.USES,
|
||||
fetchStates: [ChatFetchState.FETCHING, ChatFetchState.GENERATING],
|
||||
},
|
||||
].sort((a, b) => a.label.localeCompare(b.label)),
|
||||
},
|
||||
]
|
||||
|
||||
Reference in New Issue
Block a user