mirror of
https://github.com/ArthurDanjou/artsite.git
synced 2026-01-14 11:54:09 +01:00
fix: corriger la syntaxe et ajouter des retours à la ligne manquants dans plusieurs fichiers
This commit is contained in:
@@ -1,12 +1,12 @@
|
||||
export default defineAppConfig({
|
||||
ui: {
|
||||
container: {
|
||||
base: 'max-w-4xl',
|
||||
base: 'max-w-4xl'
|
||||
},
|
||||
colors: {
|
||||
primary: 'neutral',
|
||||
neutral: 'neutral',
|
||||
red: 'red',
|
||||
},
|
||||
},
|
||||
red: 'red'
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<script lang="ts" setup>
|
||||
useHead({
|
||||
link: [{ rel: 'icon', type: 'image/webp', href: '/favicon.webp' }],
|
||||
link: [{ rel: 'icon', type: 'image/webp', href: '/favicon.webp' }]
|
||||
})
|
||||
</script>
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
import { socials } from '~~/types'
|
||||
|
||||
const { t } = useI18n({
|
||||
useScope: 'local',
|
||||
useScope: 'local'
|
||||
})
|
||||
</script>
|
||||
|
||||
@@ -43,7 +43,7 @@ const { t } = useI18n({
|
||||
<div class="mt-8 w-full flex justify-center text-xs">
|
||||
{{
|
||||
t('copyright', {
|
||||
date: new Date().getFullYear(),
|
||||
date: new Date().getFullYear()
|
||||
})
|
||||
}}
|
||||
</div>
|
||||
|
||||
@@ -7,16 +7,16 @@ const openContactDrawer = ref(false)
|
||||
const router = useRouter()
|
||||
defineShortcuts({
|
||||
c: () => openContactDrawer.value = !openContactDrawer.value,
|
||||
backspace: () => router.back(),
|
||||
backspace: () => router.back()
|
||||
})
|
||||
|
||||
const socialsList = [
|
||||
{
|
||||
label: 'Email',
|
||||
icon: 'i-ph-envelope-duotone',
|
||||
to: 'mailto:arthurdanjou@outlook.fr',
|
||||
to: 'mailto:arthurdanjou@outlook.fr'
|
||||
},
|
||||
...socials,
|
||||
...socials
|
||||
]
|
||||
</script>
|
||||
|
||||
@@ -58,14 +58,17 @@ const socialsList = [
|
||||
variant="ghost"
|
||||
/>
|
||||
</UTooltip>
|
||||
<USeparator orientation="vertical" class="h-6" />
|
||||
<USeparator
|
||||
orientation="vertical"
|
||||
class="h-6"
|
||||
/>
|
||||
<UDropdownMenu
|
||||
v-model:open="openContactDrawer"
|
||||
:items="socialsList"
|
||||
:content="{
|
||||
align: 'center',
|
||||
side: 'bottom',
|
||||
sideOffset: 8,
|
||||
sideOffset: 8
|
||||
}"
|
||||
>
|
||||
<UTooltip
|
||||
@@ -83,7 +86,10 @@ const socialsList = [
|
||||
/>
|
||||
</UTooltip>
|
||||
</UDropdownMenu>
|
||||
<USeparator orientation="vertical" class="h-6" />
|
||||
<USeparator
|
||||
orientation="vertical"
|
||||
class="h-6"
|
||||
/>
|
||||
<LangSwitcher />
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
@@ -2,12 +2,12 @@
|
||||
defineProps({
|
||||
title: {
|
||||
type: String,
|
||||
required: true,
|
||||
required: true
|
||||
},
|
||||
description: {
|
||||
type: String,
|
||||
required: true,
|
||||
},
|
||||
required: true
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@ async function changeLocale(newLocale: string) {
|
||||
}
|
||||
|
||||
defineShortcuts({
|
||||
l: () => lang.value = currentLocale.value!.code === 'en' ? 'fr' : currentLocale.value!.code === 'fr' ? 'es' : 'en',
|
||||
l: () => lang.value = currentLocale.value!.code === 'en' ? 'fr' : currentLocale.value!.code === 'fr' ? 'es' : 'en'
|
||||
})
|
||||
</script>
|
||||
|
||||
@@ -33,7 +33,7 @@ defineShortcuts({
|
||||
:content="{
|
||||
align: 'center',
|
||||
side: 'right',
|
||||
sideOffset: 8,
|
||||
sideOffset: 8
|
||||
}"
|
||||
>
|
||||
<USelect
|
||||
|
||||
@@ -21,7 +21,7 @@ function toggleDark(event: MouseEvent | { clientX: number, clientY: number }) {
|
||||
const y = event.clientY
|
||||
const endRadius = Math.hypot(
|
||||
Math.max(x, innerWidth - x),
|
||||
Math.max(y, innerHeight - y),
|
||||
Math.max(y, innerHeight - y)
|
||||
)
|
||||
const transition = document.startViewTransition(async () => {
|
||||
switchTheme()
|
||||
@@ -31,27 +31,27 @@ function toggleDark(event: MouseEvent | { clientX: number, clientY: number }) {
|
||||
.then(() => {
|
||||
const clipPath = [
|
||||
`circle(0px at ${x}px ${y}px)`,
|
||||
`circle(${endRadius}px at ${x}px ${y}px)`,
|
||||
`circle(${endRadius}px at ${x}px ${y}px)`
|
||||
]
|
||||
document.documentElement.animate(
|
||||
{
|
||||
clipPath: colorMode.value === 'dark'
|
||||
? [...clipPath].reverse()
|
||||
: clipPath,
|
||||
: clipPath
|
||||
},
|
||||
{
|
||||
duration: 400,
|
||||
easing: 'ease-out',
|
||||
pseudoElement: colorMode.value === 'dark'
|
||||
? '::view-transition-old(root)'
|
||||
: '::view-transition-new(root)',
|
||||
},
|
||||
: '::view-transition-new(root)'
|
||||
}
|
||||
)
|
||||
})
|
||||
}
|
||||
|
||||
defineShortcuts({
|
||||
t: () => toggleDark({ clientX: window.innerWidth, clientY: 0 }),
|
||||
t: () => toggleDark({ clientX: window.innerWidth, clientY: 0 })
|
||||
})
|
||||
</script>
|
||||
|
||||
|
||||
@@ -4,16 +4,16 @@ import type { PropType } from 'vue'
|
||||
defineProps({
|
||||
text: {
|
||||
type: [String, Number],
|
||||
required: true,
|
||||
required: true
|
||||
},
|
||||
hover: {
|
||||
type: String,
|
||||
required: true,
|
||||
required: true
|
||||
},
|
||||
position: {
|
||||
type: String as PropType<'top' | 'right' | 'bottom' | 'left'>,
|
||||
default: 'top',
|
||||
},
|
||||
default: 'top'
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
@@ -25,11 +25,11 @@ defineProps({
|
||||
:content="{
|
||||
align: 'center',
|
||||
side: position,
|
||||
sideOffset: 8,
|
||||
sideOffset: 8
|
||||
}"
|
||||
:text="hover"
|
||||
>
|
||||
<strong class="leading-3 cursor-help">{{ text }}</strong>
|
||||
</UTooltip>
|
||||
</ClientOnly>
|
||||
</template>
|
||||
</template>
|
||||
|
||||
@@ -2,12 +2,12 @@
|
||||
defineProps({
|
||||
icon: {
|
||||
type: String,
|
||||
required: true,
|
||||
required: true
|
||||
},
|
||||
color: {
|
||||
type: String,
|
||||
default: 'gray',
|
||||
},
|
||||
default: 'gray'
|
||||
}
|
||||
})
|
||||
|
||||
const colorVariants = {
|
||||
@@ -23,13 +23,16 @@ const colorVariants = {
|
||||
zinc: 'text-zinc-500/80 decoration-zinc-400/40',
|
||||
orange: 'text-orange-500/80 decoration-orange-400/40',
|
||||
amber: 'text-amber-500/80 decoration-amber-400/40',
|
||||
emerald: 'text-emerald-500/80 decoration-emerald-400/40',
|
||||
emerald: 'text-emerald-500/80 decoration-emerald-400/40'
|
||||
}
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<span class="inline-flex items-center transform translate-y-1 gap-1">
|
||||
<UIcon :name="icon" size="16" />
|
||||
<UIcon
|
||||
:name="icon"
|
||||
size="16"
|
||||
/>
|
||||
<span
|
||||
:class="colorVariants[color as keyof typeof colorVariants]"
|
||||
class="sofia font-semibold underline-offset-2 underline"
|
||||
@@ -37,4 +40,4 @@ const colorVariants = {
|
||||
<slot />
|
||||
</span>
|
||||
</span>
|
||||
</template>
|
||||
</template>
|
||||
|
||||
@@ -45,7 +45,7 @@ type FormattedActivity = {
|
||||
state: string
|
||||
start: {
|
||||
ago: string
|
||||
formatted: { date: string; time: string }
|
||||
formatted: { date: string, time: string }
|
||||
}
|
||||
} | null
|
||||
|
||||
@@ -61,7 +61,7 @@ const formattedActivity = computed<FormattedActivity>(() => {
|
||||
|
||||
const stateWord = (state && state.split(' ').length >= 2 ? state.split(' ')[1] : t('secret')) as string
|
||||
const ago = useTimeAgo(timestamps.start, {
|
||||
messages: activityMessages[locale.value as keyof typeof activityMessages] as UseTimeAgoMessages,
|
||||
messages: activityMessages[locale.value as keyof typeof activityMessages] as UseTimeAgoMessages
|
||||
}).value
|
||||
|
||||
const formatDate = (date: number, format: string) =>
|
||||
@@ -75,9 +75,9 @@ const formattedActivity = computed<FormattedActivity>(() => {
|
||||
ago,
|
||||
formatted: {
|
||||
date: formatDate(timestamps.start, 'DD MMM YYYY'),
|
||||
time: formatDate(timestamps.start, 'HH:mm'),
|
||||
},
|
||||
},
|
||||
time: formatDate(timestamps.start, 'HH:mm')
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
@@ -89,15 +89,28 @@ const editorIcon = computed(() => {
|
||||
|
||||
<template>
|
||||
<ClientOnly>
|
||||
<div v-if="formattedActivity" class="flex items-start gap-2 mt-4">
|
||||
<div
|
||||
v-if="formattedActivity"
|
||||
class="flex items-start gap-2 mt-4"
|
||||
>
|
||||
<UTooltip :text="isActive ? t('tooltip.online') : t('tooltip.idling')">
|
||||
<div class="relative flex h-3 w-3 mt-2">
|
||||
<div v-if="isActive" class="animate-ping absolute inline-flex h-full w-full rounded-full bg-green-500 opacity-75" />
|
||||
<div :class="isActive ? 'bg-green-500' : 'bg-amber-500'" class="relative inline-flex rounded-full h-3 w-3" />
|
||||
<div
|
||||
v-if="isActive"
|
||||
class="animate-ping absolute inline-flex h-full w-full rounded-full bg-green-500 opacity-75"
|
||||
/>
|
||||
<div
|
||||
:class="isActive ? 'bg-green-500' : 'bg-amber-500'"
|
||||
class="relative inline-flex rounded-full h-3 w-3"
|
||||
/>
|
||||
</div>
|
||||
</UTooltip>
|
||||
|
||||
<i18n-t v-if="isActive" keypath="working" tag="div">
|
||||
<i18n-t
|
||||
v-if="isActive"
|
||||
keypath="working"
|
||||
tag="div"
|
||||
>
|
||||
<template #state>
|
||||
<strong>{{ formattedActivity.state.split(' ').map(w => w.charAt(0).toUpperCase() + w.slice(1).toLowerCase()).join(' ') }}</strong>
|
||||
</template>
|
||||
@@ -106,7 +119,10 @@ const editorIcon = computed(() => {
|
||||
</template>
|
||||
<template #editor>
|
||||
<span class="space-x-1">
|
||||
<UIcon :name="editorIcon" size="16" />
|
||||
<UIcon
|
||||
:name="editorIcon"
|
||||
size="16"
|
||||
/>
|
||||
<strong>{{ formattedActivity.name }}</strong>
|
||||
</span>
|
||||
</template>
|
||||
@@ -119,24 +135,41 @@ const editorIcon = computed(() => {
|
||||
</template>
|
||||
</i18n-t>
|
||||
|
||||
<i18n-t v-else keypath="idling" tag="div" class="space-x-1">
|
||||
<i18n-t
|
||||
v-else
|
||||
keypath="idling"
|
||||
tag="div"
|
||||
class="space-x-1"
|
||||
>
|
||||
<template #editor>
|
||||
<span class="space-x-1">
|
||||
<UIcon :name="editorIcon" size="16" />
|
||||
<UIcon
|
||||
:name="editorIcon"
|
||||
size="16"
|
||||
/>
|
||||
<strong>{{ formattedActivity.name }}</strong>
|
||||
</span>
|
||||
</template>
|
||||
</i18n-t>
|
||||
</div>
|
||||
|
||||
<div v-else class="my-5 flex md:items-start gap-2">
|
||||
<div
|
||||
v-else
|
||||
class="my-5 flex md:items-start gap-2"
|
||||
>
|
||||
<UTooltip :text="t('tooltip.offline')">
|
||||
<div class="relative flex h-3 w-3 mt-2">
|
||||
<div class="relative cursor-not-allowed inline-flex rounded-full h-3 w-3 bg-red-500" />
|
||||
</div>
|
||||
</UTooltip>
|
||||
<i18n-t keypath="offline" tag="p" class="not-prose">
|
||||
<template #maths><i>{{ t('maths') }}</i></template>
|
||||
<i18n-t
|
||||
keypath="offline"
|
||||
tag="p"
|
||||
class="not-prose"
|
||||
>
|
||||
<template #maths>
|
||||
<i>{{ t('maths') }}</i>
|
||||
</template>
|
||||
</i18n-t>
|
||||
</div>
|
||||
</ClientOnly>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<script lang="ts" setup>
|
||||
const { width } = useWindowSize()
|
||||
const { t } = useI18n({
|
||||
useScope: 'local',
|
||||
useScope: 'local'
|
||||
})
|
||||
</script>
|
||||
|
||||
|
||||
@@ -2,11 +2,11 @@
|
||||
defineProps({
|
||||
label: {
|
||||
type: String,
|
||||
required: true,
|
||||
required: true
|
||||
},
|
||||
href: {
|
||||
type: String,
|
||||
required: true,
|
||||
required: true
|
||||
},
|
||||
icon: {
|
||||
type: String,
|
||||
@@ -14,8 +14,8 @@ defineProps({
|
||||
},
|
||||
blanked: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
default: false
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<script setup lang="ts">
|
||||
const styleVars = {
|
||||
'--animated-speed': '50s',
|
||||
'--animated-speed': '50s'
|
||||
}
|
||||
</script>
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<script lang="ts" setup>
|
||||
const { t } = useI18n({
|
||||
useScope: 'local',
|
||||
useScope: 'local'
|
||||
})
|
||||
</script>
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@ import type { Stats } from '~~/types'
|
||||
import { usePrecision } from '@vueuse/math'
|
||||
|
||||
const { locale, locales, t } = useI18n({
|
||||
useScope: 'local',
|
||||
useScope: 'local'
|
||||
})
|
||||
const currentLocale = computed(() => locales.value.find(l => l.code === locale.value))
|
||||
|
||||
|
||||
@@ -6,7 +6,10 @@
|
||||
</h1>
|
||||
<p class="text-center flex gap-1">
|
||||
I think you're lost, let's go back
|
||||
<HomeLink label="home" href="/" />
|
||||
<HomeLink
|
||||
label="home"
|
||||
href="/"
|
||||
/>
|
||||
</p>
|
||||
</div>
|
||||
</UApp>
|
||||
|
||||
@@ -10,4 +10,4 @@
|
||||
|
||||
<style scoped>
|
||||
|
||||
</style>
|
||||
</style>
|
||||
|
||||
@@ -3,21 +3,25 @@ const { locale } = useI18n()
|
||||
|
||||
useSeoMeta({
|
||||
title: 'Arthur Danjou - AI enjoyer and Maths student',
|
||||
description: 'Developer enjoying Artificial Intelligence and Machine Learning. Mathematics Student at Paris Dauphine-PSL University specialised in Statistics',
|
||||
description: 'Developer enjoying Artificial Intelligence and Machine Learning. Mathematics Student at Paris Dauphine-PSL University specialised in Statistics'
|
||||
})
|
||||
|
||||
const { data: page } = await useAsyncData(`/home/${locale.value}`, () => {
|
||||
return queryCollection('main').path(`/home/${locale.value}`).first()
|
||||
}, {
|
||||
watch: [locale],
|
||||
watch: [locale]
|
||||
})
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<main class="max-w-none! prose dark:prose-invert">
|
||||
<ContentRenderer v-if="page" :value="page" class="mt-8 md:mt-16" />
|
||||
<ContentRenderer
|
||||
v-if="page"
|
||||
:value="page"
|
||||
class="mt-8 md:mt-16"
|
||||
/>
|
||||
<HomeStats />
|
||||
<HomeActivity />
|
||||
<HomeActivity />
|
||||
<HomeQuote />
|
||||
<HomeCatchPhrase />
|
||||
</main>
|
||||
|
||||
@@ -3,6 +3,6 @@ import { defineCollection } from '@nuxt/content'
|
||||
export const collections = {
|
||||
main: defineCollection({
|
||||
type: 'page',
|
||||
source: 'home/*.md',
|
||||
}),
|
||||
source: 'home/*.md'
|
||||
})
|
||||
}
|
||||
|
||||
@@ -2,4 +2,4 @@ import withNuxt from './.nuxt/eslint.config.mjs'
|
||||
|
||||
export default withNuxt(
|
||||
// Your custom configs here
|
||||
)
|
||||
)
|
||||
|
||||
169
nuxt.config.ts
169
nuxt.config.ts
@@ -1,19 +1,4 @@
|
||||
export default defineNuxtConfig({
|
||||
compatibilityDate: '2025-12-13',
|
||||
|
||||
app: {
|
||||
pageTransition: { name: 'page', mode: 'out-in' },
|
||||
head: {
|
||||
templateParams: {
|
||||
separator: '•',
|
||||
},
|
||||
},
|
||||
rootAttrs: {
|
||||
class: 'bg-[var(--ui-bg)]',
|
||||
},
|
||||
},
|
||||
|
||||
css: ['~/assets/css/main.css'],
|
||||
|
||||
modules: [
|
||||
'@nuxt/ui',
|
||||
@@ -25,9 +10,27 @@ export default defineNuxtConfig({
|
||||
'nuxt-studio'
|
||||
],
|
||||
|
||||
hub: {
|
||||
cache: true,
|
||||
db: 'sqlite',
|
||||
devtools: {
|
||||
enabled: true
|
||||
},
|
||||
|
||||
app: {
|
||||
pageTransition: { name: 'page', mode: 'out-in' },
|
||||
head: {
|
||||
templateParams: {
|
||||
separator: '•'
|
||||
}
|
||||
},
|
||||
rootAttrs: {
|
||||
class: 'bg-[var(--ui-bg)]'
|
||||
}
|
||||
},
|
||||
|
||||
css: ['~/assets/css/main.css'],
|
||||
|
||||
colorMode: {
|
||||
preference: 'system',
|
||||
fallback: 'light'
|
||||
},
|
||||
|
||||
ui: {
|
||||
@@ -47,70 +50,8 @@ export default defineNuxtConfig({
|
||||
'blue',
|
||||
'purple',
|
||||
'pink',
|
||||
'neutral',
|
||||
],
|
||||
},
|
||||
},
|
||||
|
||||
studio: {
|
||||
route: '/studio',
|
||||
repository: {
|
||||
provider: 'github',
|
||||
owner: 'ArthurDanjou',
|
||||
repo: 'artsite',
|
||||
branch: 'master'
|
||||
}
|
||||
},
|
||||
|
||||
colorMode: {
|
||||
preference: 'system',
|
||||
fallback: 'light',
|
||||
},
|
||||
|
||||
devtools: {
|
||||
enabled: true,
|
||||
},
|
||||
|
||||
i18n: {
|
||||
strategy: 'no_prefix',
|
||||
locales: [
|
||||
{
|
||||
label: 'English',
|
||||
code: 'en',
|
||||
language: 'en-EN',
|
||||
icon: 'i-twemoji-flag-united-kingdom',
|
||||
},
|
||||
{
|
||||
label: 'Français',
|
||||
code: 'fr',
|
||||
language: 'fr-FR',
|
||||
icon: 'i-twemoji-flag-france',
|
||||
},
|
||||
{
|
||||
label: 'Español',
|
||||
code: 'es',
|
||||
language: 'es-ES',
|
||||
icon: 'i-twemoji-flag-spain',
|
||||
},
|
||||
],
|
||||
defaultLocale: 'en',
|
||||
},
|
||||
|
||||
routeRules: {
|
||||
'/api/activity': {
|
||||
proxy: `${process.env.NUXT_API_URL}/api/activity`
|
||||
},
|
||||
'/api/stats': {
|
||||
proxy: `${process.env.NUXT_API_URL}/api/stats`
|
||||
}
|
||||
},
|
||||
|
||||
nitro: {
|
||||
preset: 'cloudflare_pages',
|
||||
|
||||
prerender: {
|
||||
routes: ['/'],
|
||||
crawlLinks: true,
|
||||
'neutral'
|
||||
]
|
||||
}
|
||||
},
|
||||
|
||||
@@ -120,14 +61,38 @@ export default defineNuxtConfig({
|
||||
},
|
||||
public: {
|
||||
i18n: {
|
||||
baseUrl: '',
|
||||
},
|
||||
baseUrl: ''
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
routeRules: {
|
||||
'/api/activity': {
|
||||
proxy: `${process.env.NUXT_API_URL}/api/activity`
|
||||
},
|
||||
'/api/stats': {
|
||||
proxy: `${process.env.NUXT_API_URL}/api/stats`
|
||||
}
|
||||
},
|
||||
|
||||
experimental: {
|
||||
viewTransition: true
|
||||
},
|
||||
compatibilityDate: '2025-12-13',
|
||||
|
||||
nitro: {
|
||||
preset: 'cloudflare_pages',
|
||||
|
||||
prerender: {
|
||||
routes: ['/'],
|
||||
crawlLinks: true
|
||||
}
|
||||
},
|
||||
|
||||
hub: {
|
||||
cache: true,
|
||||
db: 'sqlite'
|
||||
},
|
||||
|
||||
eslint: {
|
||||
config: {
|
||||
@@ -137,4 +102,38 @@ export default defineNuxtConfig({
|
||||
}
|
||||
}
|
||||
},
|
||||
})
|
||||
|
||||
i18n: {
|
||||
strategy: 'no_prefix',
|
||||
locales: [
|
||||
{
|
||||
label: 'English',
|
||||
code: 'en',
|
||||
language: 'en-EN',
|
||||
icon: 'i-twemoji-flag-united-kingdom'
|
||||
},
|
||||
{
|
||||
label: 'Français',
|
||||
code: 'fr',
|
||||
language: 'fr-FR',
|
||||
icon: 'i-twemoji-flag-france'
|
||||
},
|
||||
{
|
||||
label: 'Español',
|
||||
code: 'es',
|
||||
language: 'es-ES',
|
||||
icon: 'i-twemoji-flag-spain'
|
||||
}
|
||||
],
|
||||
defaultLocale: 'en'
|
||||
},
|
||||
studio: {
|
||||
route: '/studio',
|
||||
repository: {
|
||||
provider: 'github',
|
||||
owner: 'ArthurDanjou',
|
||||
repo: 'artsite',
|
||||
branch: 'master'
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
@@ -48,7 +48,7 @@ export const IDEs = [
|
||||
{ name: 'IntelliJ IDEA Ultimate', icon: 'i-logos:intellij-idea' },
|
||||
{ name: 'WebStorm', icon: 'i-logos:webstorm' },
|
||||
{ name: 'PyCharm Professional', icon: 'i-logos:pycharm' },
|
||||
{ name: 'Cursor', icon: 'i-vscode-icons-file-type-cursorrules' },
|
||||
{ name: 'Cursor', icon: 'i-vscode-icons-file-type-cursorrules' }
|
||||
] as const
|
||||
|
||||
type TimeUnit = (n: number, past?: boolean) => string
|
||||
@@ -93,7 +93,7 @@ export const activityMessages: Record<'en' | 'fr' | 'es', ActivityMessages> = {
|
||||
hour: createSimpleTimeUnit('hour'),
|
||||
minute: createSimpleTimeUnit('minute'),
|
||||
second: createSimpleTimeUnit('second'),
|
||||
invalid: '',
|
||||
invalid: ''
|
||||
},
|
||||
fr: {
|
||||
justNow: 'à l\'instant',
|
||||
@@ -106,7 +106,7 @@ export const activityMessages: Record<'en' | 'fr' | 'es', ActivityMessages> = {
|
||||
hour: createSimpleTimeUnit('heure'),
|
||||
minute: createSimpleTimeUnit('minute'),
|
||||
second: createSimpleTimeUnit('seconde'),
|
||||
invalid: '',
|
||||
invalid: ''
|
||||
},
|
||||
es: {
|
||||
justNow: 'justo ahora',
|
||||
@@ -119,15 +119,15 @@ export const activityMessages: Record<'en' | 'fr' | 'es', ActivityMessages> = {
|
||||
hour: createSimpleTimeUnit('hora'),
|
||||
minute: createSimpleTimeUnit('minuto'),
|
||||
second: createSimpleTimeUnit('segundo'),
|
||||
invalid: '',
|
||||
},
|
||||
invalid: ''
|
||||
}
|
||||
}
|
||||
|
||||
export const socials = [
|
||||
{ icon: 'i-ph-x-logo-duotone', label: 'Twitter', to: 'https://twitter.com/ArthurDanj' },
|
||||
{ icon: 'i-ph-github-logo-duotone', label: 'GitHub', to: 'https://github.com/ArthurDanjou' },
|
||||
{ icon: 'i-ph-linkedin-logo-duotone', label: 'LinkedIn', to: 'https://www.linkedin.com/in/arthurdanjou/' },
|
||||
{ icon: 'i-ph-discord-logo-duotone', label: 'Discord', to: 'https://discordapp.com/users/179635349100691456' },
|
||||
{ icon: 'i-ph-discord-logo-duotone', label: 'Discord', to: 'https://discordapp.com/users/179635349100691456' }
|
||||
] as const
|
||||
|
||||
type Locale = 'en' | 'fr' | 'es'
|
||||
@@ -146,6 +146,6 @@ export const navs: readonly Nav[] = [
|
||||
label: { en: 'resume', fr: 'cv', es: 'currículum' },
|
||||
icon: 'address-book-duotone',
|
||||
to: 'https://api.arthurdanjou.fr/api/resumes/en',
|
||||
target: '_blank',
|
||||
},
|
||||
target: '_blank'
|
||||
}
|
||||
] as const
|
||||
|
||||
Reference in New Issue
Block a user