mirror of
https://github.com/ArthurDanjou/artsite.git
synced 2026-01-14 15:54:13 +01:00
Compare commits
7 Commits
e0589826bb
...
466baf1eb8
| Author | SHA1 | Date | |
|---|---|---|---|
| 466baf1eb8 | |||
| 0e70996a3a | |||
| 9e773355b5 | |||
| c942266fa2 | |||
| 6b81bd2854 | |||
| 918528f2b3 | |||
| ae176ecbae |
@@ -1,38 +1,51 @@
|
|||||||
@import "tailwindcss";
|
@import "tailwindcss";
|
||||||
@import "@nuxt/ui";
|
@import "@nuxt/ui";
|
||||||
|
|
||||||
|
@theme {
|
||||||
|
--animate-wave: wave 2.5s infinite;
|
||||||
|
|
||||||
|
@keyframes wave {
|
||||||
|
0% {
|
||||||
|
transform: rotate(0deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
10% {
|
||||||
|
transform: rotate(14deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
20% {
|
||||||
|
transform: rotate(-8deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
30% {
|
||||||
|
transform: rotate(14deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
40% {
|
||||||
|
transform: rotate(-4deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
50% {
|
||||||
|
transform: rotate(10deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
60%,
|
||||||
|
100% {
|
||||||
|
transform: rotate(0deg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
:root {
|
:root {
|
||||||
--animate-wave: wave 3s infinite;
|
|
||||||
|
|
||||||
--ui-bg: #f8f8f8;
|
--ui-bg: #f8f8f8;
|
||||||
|
|
||||||
--ui-font-family: 'DM Sans', sans-serif;
|
--ui-font-family: 'DM Sans', sans-serif;
|
||||||
transition-duration: 0.7s;
|
transition-duration: 0.7s;
|
||||||
}
|
}
|
||||||
|
|
||||||
.dark {
|
.dark {
|
||||||
--animate-wave: wave 3s infinite;
|
|
||||||
|
|
||||||
--ui-bg: #0f0f0f;
|
--ui-bg: #0f0f0f;
|
||||||
|
|
||||||
--ui-font-family: 'DM Sans', sans-serif;
|
|
||||||
transition-duration: 0.7s;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.sofia {
|
.sofia {
|
||||||
--ui-font-family: 'Sofia Sans', sans-serif;
|
--ui-font-family: 'Sofia Sans', sans-serif;
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes wave {
|
|
||||||
|
|
||||||
0%,
|
|
||||||
50%,
|
|
||||||
100% {
|
|
||||||
transform: rotate(-12deg);
|
|
||||||
}
|
|
||||||
|
|
||||||
25%,
|
|
||||||
75% {
|
|
||||||
transform: rotate(3deg) scale(1.5);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@@ -2,154 +2,124 @@
|
|||||||
import type { Activity } from '~~/types'
|
import type { Activity } from '~~/types'
|
||||||
import { IDEs } from '~~/types'
|
import { IDEs } from '~~/types'
|
||||||
|
|
||||||
const { data: activity, refresh } = await useAsyncData<Activity>('activity', () => $fetch('/api/activity'),
|
const { data: activity, refresh } = await useAsyncData<Activity>('activity', () => $fetch('/api/activity'), { lazy: true })
|
||||||
{ lazy: true }
|
useIntervalFn(refresh, 5000)
|
||||||
)
|
|
||||||
|
|
||||||
useIntervalFn(refresh, 1000)
|
const currentSession = computed(() => {
|
||||||
|
|
||||||
const codingActivities = computed(() => {
|
|
||||||
const list = activity.value?.data.activities ?? []
|
const list = activity.value?.data.activities ?? []
|
||||||
return list
|
const ideActivity = list.find(a => IDEs.some(ide => ide.name === a.name))
|
||||||
.filter(a => IDEs.some(ide => ide.name === a.name))
|
|
||||||
.map(a => ({ ...a, name: a.assets?.small_text === 'Cursor' ? 'Cursor' : a.name }))
|
|
||||||
})
|
|
||||||
|
|
||||||
const codingActivity = computed(() => {
|
if (!ideActivity) return null
|
||||||
if (!codingActivities.value.length) return null
|
|
||||||
return codingActivities.value.length > 1
|
|
||||||
? codingActivities.value[Math.floor(Math.random() * codingActivities.value.length)]
|
|
||||||
: codingActivities.value[0]
|
|
||||||
})
|
|
||||||
|
|
||||||
const isActive = computed(() => {
|
const name = ideActivity.assets?.small_text === 'Cursor' ? 'Cursor' : ideActivity.name
|
||||||
const act = codingActivity.value
|
|
||||||
if (!act) return false
|
|
||||||
|
|
||||||
const { name, details = '', state = '' } = act
|
const isIdling = ideActivity.details?.includes('Idling') || (!ideActivity.state?.toLowerCase().includes('editing') && name !== 'Visual Studio Code')
|
||||||
|
|
||||||
if (name === 'Visual Studio Code' || name === 'Cursor')
|
const rawProject = ideActivity.details ? ideActivity.details.replace('Workspace:', '').replace('Editing', '').trim() : 'Unknown Context'
|
||||||
return !details.includes('Idling')
|
const project = rawProject.charAt(0).toUpperCase() + rawProject.slice(1)
|
||||||
|
const file = ideActivity.state?.replace('Editing', '').trim() || 'No active file'
|
||||||
return state.toLowerCase().includes('editing')
|
|
||||||
})
|
|
||||||
|
|
||||||
type FormattedActivity = {
|
|
||||||
name: string
|
|
||||||
project: string
|
|
||||||
state: string
|
|
||||||
start: {
|
|
||||||
ago: string
|
|
||||||
formatted: { date: string, time: string }
|
|
||||||
}
|
|
||||||
} | null
|
|
||||||
|
|
||||||
const formattedActivity = computed<FormattedActivity>(() => {
|
|
||||||
const act = codingActivity.value
|
|
||||||
if (!act) return null
|
|
||||||
|
|
||||||
const { name, details = '', state = '', timestamps } = act
|
|
||||||
|
|
||||||
const project = details
|
|
||||||
? (details.charAt(0).toUpperCase() + details.slice(1).replace('Workspace:', '').trim())
|
|
||||||
: ''
|
|
||||||
|
|
||||||
const stateWord = (state && state.split(' ').length >= 2 ? state.split(' ')[1] : 'Secret project') as string
|
|
||||||
const ago = useTimeAgo(timestamps.start).value
|
|
||||||
|
|
||||||
const formatDate = (date: number, format: string) =>
|
|
||||||
useDateFormat(date, format).value
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
name,
|
name,
|
||||||
project,
|
project,
|
||||||
state: stateWord,
|
file,
|
||||||
start: {
|
isIdling,
|
||||||
ago,
|
startTime: ideActivity.timestamps?.start,
|
||||||
formatted: {
|
icon: IDEs.find(ide => ide.name === name)?.icon ?? 'i-ph-code-duotone'
|
||||||
date: formatDate(timestamps.start, 'DD MMM YYYY'),
|
|
||||||
time: formatDate(timestamps.start, 'HH:mm')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
const editorIcon = computed(() => {
|
const timeAgo = useTimeAgo(computed(() => currentSession.value?.startTime ?? new Date()))
|
||||||
const name = formattedActivity.value?.name ?? codingActivity.value?.name
|
|
||||||
return IDEs.find(ide => ide.name === name)?.icon ?? 'file'
|
const statusColor = computed(() => {
|
||||||
|
if (!currentSession.value) return 'red'
|
||||||
|
return currentSession.value.isIdling ? 'orange' : 'green'
|
||||||
|
})
|
||||||
|
|
||||||
|
const statusLabel = computed(() => {
|
||||||
|
if (!currentSession.value) return 'System Offline'
|
||||||
|
if (currentSession.value.isIdling) return 'System Idling'
|
||||||
|
return 'Active Development'
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<ClientOnly>
|
<ClientOnly>
|
||||||
<div
|
<div class="w-full mb-4">
|
||||||
v-if="formattedActivity"
|
<UCard v-if="activity">
|
||||||
class="flex items-start gap-2 mt-4"
|
<div class="flex items-center justify-between mb-3">
|
||||||
>
|
<div class="flex items-center gap-3">
|
||||||
<UTooltip :text="isActive ? 'I\'m online 👋' : 'I\'m sleeping 😴'">
|
<div class="relative flex h-3 w-3">
|
||||||
<div class="relative flex h-3 w-3 mt-2">
|
<span
|
||||||
<div
|
v-if="statusColor === 'green'"
|
||||||
v-if="isActive"
|
class="animate-ping absolute inline-flex h-full w-full rounded-full opacity-75 bg-green-400"
|
||||||
class="animate-ping absolute inline-flex h-full w-full rounded-full bg-green-500 opacity-75"
|
/>
|
||||||
|
<span
|
||||||
|
class="relative inline-flex rounded-full h-3 w-3 transition-colors duration-300"
|
||||||
|
:class="{
|
||||||
|
'bg-green-500': statusColor === 'green',
|
||||||
|
'bg-orange-500': statusColor === 'orange',
|
||||||
|
'bg-red-500': statusColor === 'red'
|
||||||
|
}"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<span class="text-xs font-bold uppercase tracking-wider text-neutral-500 dark:text-neutral-400">
|
||||||
|
{{ statusLabel }}
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<UIcon
|
||||||
|
v-if="currentSession"
|
||||||
|
:name="currentSession.icon"
|
||||||
|
class="w-5 h-5 opacity-80"
|
||||||
/>
|
/>
|
||||||
<div
|
<UIcon
|
||||||
:class="isActive ? 'bg-green-500' : 'bg-amber-500'"
|
v-else
|
||||||
class="relative inline-flex rounded-full h-3 w-3"
|
name="i-ph-power-duotone"
|
||||||
|
class="w-5 h-5 text-red-400 opacity-80"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</UTooltip>
|
|
||||||
|
|
||||||
<div
|
<div
|
||||||
v-if="isActive"
|
v-if="currentSession"
|
||||||
class="space-x-1"
|
class="space-y-1 pl-6 border-l-2 border-neutral-100 dark:border-neutral-800 ml-1.5"
|
||||||
>
|
>
|
||||||
<span>
|
<div class="flex flex-col sm:flex-row sm:items-center gap-1 sm:gap-2">
|
||||||
I'm actually working on
|
<h3 class="font-semibold text-neutral-900 dark:text-white truncate">
|
||||||
<strong>{{ formattedActivity.state.split(' ').map(w => w.charAt(0).toUpperCase() + w.slice(1).toLowerCase()).join(' ') }}</strong>,
|
{{ currentSession.project }}
|
||||||
editing <i>{{ formattedActivity.project.replace('Editing', '') }}</i>, using
|
</h3>
|
||||||
<span class="space-x-1">
|
<span class="hidden sm:inline text-neutral-400 text-xs">•</span>
|
||||||
|
<span class="text-sm text-neutral-500 dark:text-neutral-400 truncate">
|
||||||
|
{{ currentSession.file }}
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="flex items-center gap-2 text-xs text-neutral-400 mt-1">
|
||||||
<UIcon
|
<UIcon
|
||||||
:name="editorIcon"
|
name="i-ph-timer-duotone"
|
||||||
size="16"
|
class="w-4 h-4"
|
||||||
/>
|
/>
|
||||||
<strong>{{ formattedActivity.name }}</strong>
|
<span>Started {{ timeAgo }}</span>
|
||||||
</span>.
|
</div>
|
||||||
I've started <strong>{{ formattedActivity.start.ago }}</strong>, on
|
|
||||||
<strong>{{ formattedActivity.start.formatted.date }}</strong>
|
|
||||||
at <strong>{{ formattedActivity.start.formatted.time }}</strong>.
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div
|
|
||||||
v-else
|
|
||||||
class="space-x-1"
|
|
||||||
>
|
|
||||||
<span>
|
|
||||||
I'm idling on my computer with
|
|
||||||
<span class="space-x-1">
|
|
||||||
<UIcon
|
|
||||||
:name="editorIcon"
|
|
||||||
size="16"
|
|
||||||
/>
|
|
||||||
<strong>{{ formattedActivity.name }}</strong>
|
|
||||||
</span>
|
|
||||||
running in background.
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div
|
|
||||||
v-else
|
|
||||||
class="my-5 flex md:items-start gap-2"
|
|
||||||
>
|
|
||||||
<UTooltip text="I'm 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>
|
</div>
|
||||||
</UTooltip>
|
|
||||||
<p class="not-prose">
|
<div
|
||||||
I'm currently offline. Come back later to see what I'm working on. <i>I am probably doing some maths or sleeping.</i>
|
v-else
|
||||||
</p>
|
class="text-sm text-neutral-500 dark:text-neutral-400 flex items-center gap-2 pl-6 border-l-2 border-red-100 dark:border-red-900/30 ml-1.5"
|
||||||
|
>
|
||||||
|
<p>Telemetry disconnected. Research in progress.</p>
|
||||||
|
</div>
|
||||||
|
</UCard>
|
||||||
|
|
||||||
|
<UCard v-else>
|
||||||
|
<div class="flex items-center gap-3">
|
||||||
|
<USkeleton class="h-3 w-3 rounded-full" /> <div class="space-y-2 flex-1">
|
||||||
|
<USkeleton class="h-4 w-1/3" />
|
||||||
|
<USkeleton class="h-3 w-2/3" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</UCard>
|
||||||
</div>
|
</div>
|
||||||
</ClientOnly>
|
</ClientOnly>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@@ -1,18 +1,11 @@
|
|||||||
<script lang="ts" setup>
|
|
||||||
const { width } = useWindowSize()
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<ClientOnly>
|
<div class="hidden lg:flex items-center gap-2 mt-6 px-3 py-2 rounded-lg bg-neutral-50 dark:bg-neutral-800/50 border border-neutral-100 dark:border-neutral-800 w-fit transition-opacity hover:opacity-100 opacity-70">
|
||||||
<div
|
<UIcon
|
||||||
v-if="width > 1024"
|
name="i-ph-hand-pointing-duotone"
|
||||||
class="text-[12px] italic flex items-center gap-1 mt-4"
|
class="w-5 h-5 text-primary-500 animate-wave origin-bottom"
|
||||||
>
|
/>
|
||||||
<UIcon
|
<p class="text-xs font-medium text-neutral-500 dark:text-neutral-400">
|
||||||
class="transform -rotate-12 duration-300 animate-wave"
|
Tip: Hover over the <span class="font-bold text-neutral-900 dark:text-neutral-200">bold text</span> to reveal more details.
|
||||||
name="i-ph-hand-pointing-duotone"
|
</p>
|
||||||
/>
|
</div>
|
||||||
<p>Hover the bold texts to find out more about me.</p>
|
|
||||||
</div>
|
|
||||||
</ClientOnly>
|
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@@ -1,19 +1,32 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="mt-4">
|
<UCard>
|
||||||
<div class="float-left flex items-center mr-2 mt-1">
|
<div class="flex items-start sm:items-center gap-4">
|
||||||
<ClientOnly>
|
<ClientOnly>
|
||||||
<UTooltip text="It's me 👋">
|
<UTooltip
|
||||||
|
text="Arthur Danjou • Research & Engineering"
|
||||||
|
:popper="{ placement: 'top' }"
|
||||||
|
>
|
||||||
<UAvatar
|
<UAvatar
|
||||||
alt="Avatar"
|
|
||||||
class="hover:rotate-360 duration-500 transform-gpu rounded-full"
|
|
||||||
size="xl"
|
|
||||||
src="/arthur.webp"
|
src="/arthur.webp"
|
||||||
|
alt="Arthur Danjou"
|
||||||
|
size="xl"
|
||||||
|
class="ring-2 ring-primary-500/20 dark:ring-primary-400/20 transition-transform duration-700 ease-in-out hover:rotate-360 shadow-sm"
|
||||||
/>
|
/>
|
||||||
</UTooltip>
|
</UTooltip>
|
||||||
</ClientOnly>
|
</ClientOnly>
|
||||||
|
|
||||||
|
<div class="space-y-1">
|
||||||
|
<h3 class="font-semibold text-neutral-900 dark:text-white flex items-center gap-2">
|
||||||
|
Let's start a discussion
|
||||||
|
<UIcon
|
||||||
|
name="i-ph-chat-circle-dots-duotone"
|
||||||
|
class="text-primary-500 w-5 h-5"
|
||||||
|
/>
|
||||||
|
</h3>
|
||||||
|
<p class="text-sm text-neutral-600 dark:text-neutral-300 leading-relaxed">
|
||||||
|
Thanks for stopping by my digital garden! Whether you have a question about a theorem, a suggestion for a project, or just want to say hi, I'd love to hear from you.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<p class="not-prose">
|
</UCard>
|
||||||
Hello everyone! Thanks for visiting my portfolio. Please leave whatever you like to say, such as suggestions, appreciations, questions or anything!
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@@ -20,11 +20,13 @@ const { skills } = await useContent()
|
|||||||
:key="skill.id"
|
:key="skill.id"
|
||||||
>
|
>
|
||||||
<div class>
|
<div class>
|
||||||
<h3 class="text-xl md:text-2xl font-semibold tracking-tight mb-4">
|
<h3 class="text-xl md:text-2xl font-semibold tracking-tight">
|
||||||
{{ skill.name }}
|
{{ skill.name }}
|
||||||
</h3>
|
</h3>
|
||||||
|
<p class="text-sm text-neutral-600 dark:text-neutral-400">
|
||||||
<div class="flex flex-wrap gap-2">
|
{{ skill.description }}
|
||||||
|
</p>
|
||||||
|
<div class="flex flex-wrap gap-2 mt-4">
|
||||||
<UBadge
|
<UBadge
|
||||||
v-for="item in skill.items"
|
v-for="item in skill.items"
|
||||||
:key="item.name"
|
:key="item.name"
|
||||||
|
|||||||
@@ -4,38 +4,162 @@ import { usePrecision } from '@vueuse/math'
|
|||||||
|
|
||||||
const { data: stats } = await useAsyncData<Stats>('stats', () => $fetch('/api/stats'))
|
const { data: stats } = await useAsyncData<Stats>('stats', () => $fetch('/api/stats'))
|
||||||
|
|
||||||
const time = useTimeAgo(new Date(stats.value?.coding.range.start ?? 0)).value.split(' ')[0]
|
const startDate = computed(() => stats.value?.coding.range.start ? new Date(stats.value.coding.range.start) : new Date())
|
||||||
const date = useDateFormat(new Date(stats.value?.coding.range.start ?? 0), 'DD MMMM YYYY')
|
const yearsCollected = useTimeAgo(startDate).value
|
||||||
const hours = usePrecision((stats.value?.coding.grand_total.total_seconds_including_other_language ?? 0) / 3600, 0)
|
const formattedDate = useDateFormat(startDate, 'MMM DD, YYYY').value
|
||||||
|
|
||||||
const editors = computed(() => stats.value?.editors.slice(0, 3).map(editor => `${editor.name} (${editor.percent}%)`).join(', '))
|
const totalHours = usePrecision((stats.value?.coding.grand_total.total_seconds_including_other_language ?? 0) / 3600, 0)
|
||||||
const os = computed(() => stats.value?.os.slice(0, 2).map(os => `${os.name} (${os.percent}%)`).join(', '))
|
|
||||||
const languages = computed(() => stats.value?.languages.slice(0, 3).map(language => `${language.name} (${language.percent}%)`).join(', '))
|
const topLanguages = computed(() => stats.value?.languages.slice(0, 4) || [])
|
||||||
|
const topEditors = computed(() => stats.value?.editors.slice(0, 3) || [])
|
||||||
|
const topOS = computed(() => stats.value?.os.slice(0, 2) || [])
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<ClientOnly>
|
<ClientOnly>
|
||||||
<div
|
<div
|
||||||
v-if="time && date && hours && stats"
|
v-if="stats"
|
||||||
class="space-y-1"
|
class="space-y-6"
|
||||||
>
|
>
|
||||||
<p>
|
<div class="grid grid-cols-1 md:grid-cols-2 gap-4">
|
||||||
I collect some data for {{ time }} years, started the
|
<UCard>
|
||||||
<HoverText
|
<div class="flex items-center gap-4">
|
||||||
hover="That was so long ago 🫣"
|
<div class="p-3 bg-primary-50 dark:bg-primary-900/20 rounded-lg text-primary-500">
|
||||||
:text="date"
|
<UIcon
|
||||||
/>.
|
name="i-ph-clock-duotone"
|
||||||
I've coded for a total of
|
class="w-8 h-8"
|
||||||
<HoverText
|
/>
|
||||||
hover="That's a lot 😮"
|
</div>
|
||||||
:text="hours"
|
<div>
|
||||||
/>
|
<p class="text-xs font-medium text-neutral-500 dark:text-neutral-400 uppercase tracking-wider">
|
||||||
hours.
|
Total Coding Time
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<h3 class="text-3xl font-bold font-mono text-neutral-900 dark:text-white">
|
||||||
My best editors are {{ editors || 'N/A' }}. My best OS is {{ os || 'N/A' }}. My top languages are
|
{{ totalHours }} <span class="text-lg text-neutral-500 font-normal">hours</span>
|
||||||
{{ languages || 'N/A' }}.
|
</h3>
|
||||||
</p>
|
</div>
|
||||||
|
</div>
|
||||||
|
</UCard>
|
||||||
|
|
||||||
|
<UCard>
|
||||||
|
<div class="flex items-center gap-4">
|
||||||
|
<div class="p-3 bg-emerald-50 dark:bg-emerald-900/20 rounded-lg text-emerald-500">
|
||||||
|
<UIcon
|
||||||
|
name="i-ph-calendar-check-duotone"
|
||||||
|
class="w-8 h-8"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<p class="text-xs font-medium text-neutral-500 dark:text-neutral-400 uppercase tracking-wider">
|
||||||
|
Data Collected Since
|
||||||
|
</p>
|
||||||
|
<div class="flex items-baseline gap-2">
|
||||||
|
<h3 class="text-xl font-bold text-neutral-900 dark:text-white">
|
||||||
|
{{ formattedDate }}
|
||||||
|
</h3>
|
||||||
|
<UBadge
|
||||||
|
color="neutral"
|
||||||
|
variant="soft"
|
||||||
|
size="xs"
|
||||||
|
>
|
||||||
|
{{ yearsCollected }}
|
||||||
|
</UBadge>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</UCard>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
|
||||||
|
<div class="col-span-1 lg:col-span-1 space-y-4">
|
||||||
|
<h4 class="text-sm font-semibold text-neutral-900 dark:text-white flex items-center gap-2">
|
||||||
|
<UIcon
|
||||||
|
name="i-ph-code-block-duotone"
|
||||||
|
class="text-primary-500 w-5 h-5"
|
||||||
|
/>
|
||||||
|
Top Languages
|
||||||
|
</h4>
|
||||||
|
<div class="space-y-3">
|
||||||
|
<div
|
||||||
|
v-for="lang in topLanguages"
|
||||||
|
:key="lang.name"
|
||||||
|
class="space-y-1"
|
||||||
|
>
|
||||||
|
<div class="flex justify-between text-xs text-neutral-600 dark:text-neutral-300">
|
||||||
|
<span>{{ lang.name }}</span>
|
||||||
|
<span>{{ lang.percent }}%</span>
|
||||||
|
</div>
|
||||||
|
<UMeter
|
||||||
|
:value="lang.percent"
|
||||||
|
color="primary"
|
||||||
|
size="sm"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-span-1 lg:col-span-1 space-y-4">
|
||||||
|
<h4 class="text-sm font-semibold text-neutral-900 dark:text-white flex items-center gap-2">
|
||||||
|
<UIcon
|
||||||
|
name="i-ph-terminal-window-duotone"
|
||||||
|
class="text-orange-500 w-5 h-5"
|
||||||
|
/>
|
||||||
|
Preferred Editors
|
||||||
|
</h4>
|
||||||
|
<div class="space-y-3">
|
||||||
|
<div
|
||||||
|
v-for="editor in topEditors"
|
||||||
|
:key="editor.name"
|
||||||
|
class="space-y-1"
|
||||||
|
>
|
||||||
|
<div class="flex justify-between text-xs text-neutral-600 dark:text-neutral-300">
|
||||||
|
<span>{{ editor.name }}</span>
|
||||||
|
<span>{{ editor.percent }}%</span>
|
||||||
|
</div>
|
||||||
|
<UMeter
|
||||||
|
:value="editor.percent"
|
||||||
|
color="orange"
|
||||||
|
size="sm"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-span-1 lg:col-span-1 space-y-4">
|
||||||
|
<h4 class="text-sm font-semibold text-neutral-900 dark:text-white flex items-center gap-2">
|
||||||
|
<UIcon
|
||||||
|
name="i-ph-desktop-duotone"
|
||||||
|
class="text-blue-500 w-5 h-5"
|
||||||
|
/>
|
||||||
|
Operating Systems
|
||||||
|
</h4>
|
||||||
|
<div class="space-y-3">
|
||||||
|
<div
|
||||||
|
v-for="osItem in topOS"
|
||||||
|
:key="osItem.name"
|
||||||
|
class="space-y-1"
|
||||||
|
>
|
||||||
|
<div class="flex justify-between text-xs text-neutral-600 dark:text-neutral-300">
|
||||||
|
<span>{{ osItem.name }}</span>
|
||||||
|
<span>{{ osItem.percent }}%</span>
|
||||||
|
</div>
|
||||||
|
<UMeter
|
||||||
|
:value="osItem.percent"
|
||||||
|
color="blue"
|
||||||
|
size="sm"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div
|
||||||
|
v-else
|
||||||
|
class="grid grid-cols-1 md:grid-cols-2 gap-4"
|
||||||
|
>
|
||||||
|
<USkeleton class="h-24 w-full" />
|
||||||
|
<USkeleton class="h-24 w-full" />
|
||||||
</div>
|
</div>
|
||||||
</ClientOnly>
|
</ClientOnly>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
64
app/components/home/timeline/Education.vue
Normal file
64
app/components/home/timeline/Education.vue
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
<script lang="ts" setup>
|
||||||
|
import type { TimelineItem } from '@nuxt/ui'
|
||||||
|
|
||||||
|
const { education } = await useContent()
|
||||||
|
const { width } = useWindowSize()
|
||||||
|
|
||||||
|
const orientation = computed<'vertical' | 'horizontal'>(() =>
|
||||||
|
width.value >= 768 ? 'horizontal' : 'vertical'
|
||||||
|
)
|
||||||
|
|
||||||
|
const formatDate = (start?: string, end?: string, duration?: string) => {
|
||||||
|
if (!start) return 'N/A'
|
||||||
|
|
||||||
|
const startYear = new Date(start).getFullYear()
|
||||||
|
const endYear = end ? new Date(end).getFullYear() : 'Present'
|
||||||
|
const durationText = duration ? `(${duration})` : ''
|
||||||
|
|
||||||
|
if (startYear === endYear) {
|
||||||
|
return `${startYear} ${durationText}`
|
||||||
|
}
|
||||||
|
return `${startYear} - ${endYear} ${durationText}`
|
||||||
|
}
|
||||||
|
|
||||||
|
const items = computed<TimelineItem[]>(() => {
|
||||||
|
if (!education) return []
|
||||||
|
|
||||||
|
return [...education]
|
||||||
|
.sort((a, b) => (a.startDate || '').localeCompare(b.startDate || ''))
|
||||||
|
.map(item => ({
|
||||||
|
title: item.title || 'Degree',
|
||||||
|
description: item.institution || '',
|
||||||
|
date: formatDate(item.startDate, item.endDate, item.duration),
|
||||||
|
icon: item.icon || 'i-ph-graduation-cap-duotone' // Context-aware default icon
|
||||||
|
}))
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<ClientOnly>
|
||||||
|
<div class="w-full flex justify-center">
|
||||||
|
<UTimeline
|
||||||
|
:orientation="orientation"
|
||||||
|
:items="items"
|
||||||
|
:default-value="items.length"
|
||||||
|
active-color="primary"
|
||||||
|
color="neutral"
|
||||||
|
class="w-full max-w-5xl"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<template #fallback>
|
||||||
|
<div class="flex flex-col gap-8 w-full max-w-5xl mx-auto pl-4 border-l border-neutral-200 dark:border-neutral-800">
|
||||||
|
<div
|
||||||
|
v-for="i in 3"
|
||||||
|
:key="i"
|
||||||
|
class="space-y-2"
|
||||||
|
>
|
||||||
|
<USkeleton class="h-4 w-1/4" />
|
||||||
|
<USkeleton class="h-4 w-1/2" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</ClientOnly>
|
||||||
|
</template>
|
||||||
64
app/components/home/timeline/Experiences.vue
Normal file
64
app/components/home/timeline/Experiences.vue
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
<script lang="ts" setup>
|
||||||
|
import type { TimelineItem } from '@nuxt/ui'
|
||||||
|
|
||||||
|
const { experiences } = await useContent()
|
||||||
|
const { width } = useWindowSize()
|
||||||
|
|
||||||
|
const orientation = computed<'vertical' | 'horizontal'>(() =>
|
||||||
|
width.value >= 768 ? 'horizontal' : 'vertical'
|
||||||
|
)
|
||||||
|
|
||||||
|
const formatDate = (start?: string, end?: string, duration?: string) => {
|
||||||
|
if (!start) return 'N/A'
|
||||||
|
|
||||||
|
const startYear = new Date(start).getFullYear()
|
||||||
|
const endYear = end ? new Date(end).getFullYear() : 'Present'
|
||||||
|
const durationText = duration ? `(${duration})` : ''
|
||||||
|
|
||||||
|
if (startYear === endYear) {
|
||||||
|
return `${startYear} ${durationText}`
|
||||||
|
}
|
||||||
|
return `${startYear} - ${endYear} ${durationText}`
|
||||||
|
}
|
||||||
|
|
||||||
|
const items = computed<TimelineItem[]>(() => {
|
||||||
|
if (!experiences) return []
|
||||||
|
|
||||||
|
return [...experiences]
|
||||||
|
.sort((a, b) => (a.startDate || '').localeCompare(b.startDate || ''))
|
||||||
|
.map(item => ({
|
||||||
|
title: item.title || 'Role',
|
||||||
|
description: item.company || 'Freelance',
|
||||||
|
date: formatDate(item.startDate, item.endDate, item.duration),
|
||||||
|
icon: item.icon || 'i-ph-briefcase-duotone'
|
||||||
|
}))
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<ClientOnly>
|
||||||
|
<div class="w-full flex justify-center">
|
||||||
|
<UTimeline
|
||||||
|
:orientation="orientation"
|
||||||
|
:items="items"
|
||||||
|
:default-value="items.length"
|
||||||
|
active-color="primary"
|
||||||
|
color="neutral"
|
||||||
|
class="w-full max-w-5xl"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<template #fallback>
|
||||||
|
<div class="flex flex-col gap-8 w-full max-w-5xl mx-auto pl-4 border-l border-neutral-200 dark:border-neutral-800">
|
||||||
|
<div
|
||||||
|
v-for="i in 3"
|
||||||
|
:key="i"
|
||||||
|
class="space-y-2"
|
||||||
|
>
|
||||||
|
<USkeleton class="h-4 w-1/4" />
|
||||||
|
<USkeleton class="h-4 w-1/2" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</ClientOnly>
|
||||||
|
</template>
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
<script lang="ts" setup>
|
|
||||||
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<template>
|
|
||||||
<div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<style scoped>
|
|
||||||
|
|
||||||
</style>
|
|
||||||
@@ -16,12 +16,5 @@ const { data: page } = await useAsyncData('index', () => {
|
|||||||
:value="page"
|
:value="page"
|
||||||
class="mt-8 md:mt-16"
|
class="mt-8 md:mt-16"
|
||||||
/>
|
/>
|
||||||
<HomeSkills />
|
|
||||||
<HomeEducation />
|
|
||||||
<HomeExperiences />
|
|
||||||
<HomeStats />
|
|
||||||
<HomeActivity />
|
|
||||||
<HomeQuote />
|
|
||||||
<HomeCatchPhrase />
|
|
||||||
</main>
|
</main>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@@ -1,13 +0,0 @@
|
|||||||
<script lang="ts" setup>
|
|
||||||
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<template>
|
|
||||||
<div>
|
|
||||||
STATS PAGE
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<style scoped>
|
|
||||||
|
|
||||||
</style>
|
|
||||||
60
bun.lock
60
bun.lock
@@ -10,7 +10,7 @@
|
|||||||
"@nuxt/content": "3.9.0",
|
"@nuxt/content": "3.9.0",
|
||||||
"@nuxt/eslint": "1.12.1",
|
"@nuxt/eslint": "1.12.1",
|
||||||
"@nuxt/ui": "^4.3.0",
|
"@nuxt/ui": "^4.3.0",
|
||||||
"@nuxthub/core": "^0.10.3",
|
"@nuxthub/core": "0.10.4",
|
||||||
"@nuxtjs/mdc": "^0.19.1",
|
"@nuxtjs/mdc": "^0.19.1",
|
||||||
"@vueuse/core": "^14.1.0",
|
"@vueuse/core": "^14.1.0",
|
||||||
"@vueuse/math": "^14.1.0",
|
"@vueuse/math": "^14.1.0",
|
||||||
@@ -23,7 +23,7 @@
|
|||||||
"zod": "^4.2.1",
|
"zod": "^4.2.1",
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@iconify-json/devicon": "1.2.54",
|
"@iconify-json/devicon": "1.2.55",
|
||||||
"@iconify-json/file-icons": "^1.2.2",
|
"@iconify-json/file-icons": "^1.2.2",
|
||||||
"@iconify-json/logos": "^1.2.10",
|
"@iconify-json/logos": "^1.2.10",
|
||||||
"@iconify-json/ph": "^1.2.2",
|
"@iconify-json/ph": "^1.2.2",
|
||||||
@@ -235,7 +235,7 @@
|
|||||||
|
|
||||||
"@humanwhocodes/retry": ["@humanwhocodes/retry@0.4.3", "", {}, "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ=="],
|
"@humanwhocodes/retry": ["@humanwhocodes/retry@0.4.3", "", {}, "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ=="],
|
||||||
|
|
||||||
"@iconify-json/devicon": ["@iconify-json/devicon@1.2.54", "", { "dependencies": { "@iconify/types": "*" } }, "sha512-I188YZ/t+SF2bfZnrRjwmdr/nzUNXuc/S3uvsZF0LG6atOuGtKk7KcmK/NUaTB2JAIeM1hsD+7wieYBObI8O4Q=="],
|
"@iconify-json/devicon": ["@iconify-json/devicon@1.2.55", "", { "dependencies": { "@iconify/types": "*" } }, "sha512-wmRH2ur/JJNWs6A3gVCESqMVO24M8RmdLz4ymzzL7PqIe7Nou1XIVOHBRG7Ttkni+lnbED5m0zGcilvy49JEmA=="],
|
||||||
|
|
||||||
"@iconify-json/file-icons": ["@iconify-json/file-icons@1.2.2", "", { "dependencies": { "@iconify/types": "*" } }, "sha512-ajk44wYGTiu79EAyrfNHNaxZ1/2Z1xuSOAvYUT/pAPWHc+P6n9TUZP/ccnPG18kx0WMBxmkHHQ9/zkm6ENhk+Q=="],
|
"@iconify-json/file-icons": ["@iconify-json/file-icons@1.2.2", "", { "dependencies": { "@iconify/types": "*" } }, "sha512-ajk44wYGTiu79EAyrfNHNaxZ1/2Z1xuSOAvYUT/pAPWHc+P6n9TUZP/ccnPG18kx0WMBxmkHHQ9/zkm6ENhk+Q=="],
|
||||||
|
|
||||||
@@ -403,7 +403,7 @@
|
|||||||
|
|
||||||
"@nuxt/vite-builder": ["@nuxt/vite-builder@4.2.2", "", { "dependencies": { "@nuxt/kit": "4.2.2", "@rollup/plugin-replace": "^6.0.3", "@vitejs/plugin-vue": "^6.0.2", "@vitejs/plugin-vue-jsx": "^5.1.2", "autoprefixer": "^10.4.22", "consola": "^3.4.2", "cssnano": "^7.1.2", "defu": "^6.1.4", "esbuild": "^0.27.1", "escape-string-regexp": "^5.0.0", "exsolve": "^1.0.8", "get-port-please": "^3.2.0", "h3": "^1.15.4", "jiti": "^2.6.1", "knitwork": "^1.3.0", "magic-string": "^0.30.21", "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.5", "seroval": "^1.4.0", "std-env": "^3.10.0", "ufo": "^1.6.1", "unenv": "^2.0.0-rc.24", "vite": "^7.2.7", "vite-node": "^5.2.0", "vite-plugin-checker": "^0.12.0", "vue-bundle-renderer": "^2.2.0" }, "peerDependencies": { "nuxt": "4.2.2", "rolldown": "^1.0.0-beta.38", "vue": "^3.3.4" }, "optionalPeers": ["rolldown"] }, "sha512-Bot8fpJNtHZrM4cS1iSR7bEAZ1mFLAtJvD/JOSQ6kT62F4hSFWfMubMXOwDkLK2tnn3bnAdSqGy1nLNDBCahpQ=="],
|
"@nuxt/vite-builder": ["@nuxt/vite-builder@4.2.2", "", { "dependencies": { "@nuxt/kit": "4.2.2", "@rollup/plugin-replace": "^6.0.3", "@vitejs/plugin-vue": "^6.0.2", "@vitejs/plugin-vue-jsx": "^5.1.2", "autoprefixer": "^10.4.22", "consola": "^3.4.2", "cssnano": "^7.1.2", "defu": "^6.1.4", "esbuild": "^0.27.1", "escape-string-regexp": "^5.0.0", "exsolve": "^1.0.8", "get-port-please": "^3.2.0", "h3": "^1.15.4", "jiti": "^2.6.1", "knitwork": "^1.3.0", "magic-string": "^0.30.21", "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.5", "seroval": "^1.4.0", "std-env": "^3.10.0", "ufo": "^1.6.1", "unenv": "^2.0.0-rc.24", "vite": "^7.2.7", "vite-node": "^5.2.0", "vite-plugin-checker": "^0.12.0", "vue-bundle-renderer": "^2.2.0" }, "peerDependencies": { "nuxt": "4.2.2", "rolldown": "^1.0.0-beta.38", "vue": "^3.3.4" }, "optionalPeers": ["rolldown"] }, "sha512-Bot8fpJNtHZrM4cS1iSR7bEAZ1mFLAtJvD/JOSQ6kT62F4hSFWfMubMXOwDkLK2tnn3bnAdSqGy1nLNDBCahpQ=="],
|
||||||
|
|
||||||
"@nuxthub/core": ["@nuxthub/core@0.10.3", "", { "dependencies": { "@cloudflare/workers-types": "^4.20251216.0", "@nuxt/kit": "^4.2.2", "@uploadthing/mime-types": "^0.3.6", "c12": "^3.3.2", "chokidar": "^5.0.0", "citty": "^0.1.6", "consola": "^3.4.2", "defu": "^6.1.4", "execa": "^9.6.1", "get-port-please": "^3.2.0", "h3": "^1.15.4", "hookable": "6.0.0-rc.1", "mime": "^4.1.0", "nypm": "^0.6.2", "ofetch": "^1.5.1", "pathe": "^2.0.3", "pkg-types": "^2.3.0", "scule": "^1.3.0", "std-env": "^3.10.0", "tinyglobby": "^0.2.15", "tsdown": "^0.18.0", "ufo": "^1.6.1", "uncrypto": "^0.1.3", "unstorage": "^1.17.3", "zod": "^4.2.1" }, "bin": { "nuxt-hub": "cli/bin/nuxthub.mjs", "nuxt-db": "cli/bin/nuxt-db.mjs" } }, "sha512-G0oA1KRItX9u+pT6h0qXKAnP1YpcBJODYg93Tilti9Ym7dZsdY67OAgDBtD9DaBg6+ryLlxGv/sOJiA/0me3MQ=="],
|
"@nuxthub/core": ["@nuxthub/core@0.10.4", "", { "dependencies": { "@cloudflare/workers-types": "^4.20251219.0", "@nuxt/kit": "^4.2.2", "@uploadthing/mime-types": "^0.3.6", "c12": "^3.3.3", "chokidar": "^5.0.0", "citty": "^0.1.6", "consola": "^3.4.2", "defu": "^6.1.4", "execa": "^9.6.1", "get-port-please": "^3.2.0", "h3": "^1.15.4", "hookable": "6.0.1", "mime": "^4.1.0", "nypm": "^0.6.2", "ofetch": "^1.5.1", "pathe": "^2.0.3", "pkg-types": "^2.3.0", "scule": "^1.3.0", "std-env": "^3.10.0", "tinyglobby": "^0.2.15", "tsdown": "^0.18.1", "ufo": "^1.6.1", "uncrypto": "^0.1.3", "unstorage": "^1.17.3", "zod": "^4.2.1" }, "bin": { "nuxt-hub": "cli/bin/nuxthub.mjs", "nuxt-db": "cli/bin/nuxt-db.mjs" } }, "sha512-X/tu4r12KTNimDFK9FICKPqVhX+EFkJ8uOuUq6BkGP8kxIQiahDWQQ6H9zJcTdcks4JeuN0UQP+hVwszrfFOaA=="],
|
||||||
|
|
||||||
"@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=="],
|
"@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=="],
|
||||||
|
|
||||||
@@ -547,33 +547,33 @@
|
|||||||
|
|
||||||
"@remirror/core-constants": ["@remirror/core-constants@3.0.0", "", {}, "sha512-42aWfPrimMfDKDi4YegyS7x+/0tlzaqwPQCULLanv3DMIlu96KTJR0fM5isWX2UViOqlGnX6YFgqWepcX+XMNg=="],
|
"@remirror/core-constants": ["@remirror/core-constants@3.0.0", "", {}, "sha512-42aWfPrimMfDKDi4YegyS7x+/0tlzaqwPQCULLanv3DMIlu96KTJR0fM5isWX2UViOqlGnX6YFgqWepcX+XMNg=="],
|
||||||
|
|
||||||
"@rolldown/binding-android-arm64": ["@rolldown/binding-android-arm64@1.0.0-beta.53", "", { "os": "android", "cpu": "arm64" }, "sha512-Ok9V8o7o6YfSdTTYA/uHH30r3YtOxLD6G3wih/U9DO0ucBBFq8WPt/DslU53OgfteLRHITZny9N/qCUxMf9kjQ=="],
|
"@rolldown/binding-android-arm64": ["@rolldown/binding-android-arm64@1.0.0-beta.55", "", { "os": "android", "cpu": "arm64" }, "sha512-5cPpHdO+zp+klznZnIHRO1bMHDq5hS9cqXodEKAaa/dQTPDjnE91OwAsy3o1gT2x4QaY8NzdBXAvutYdaw0WeA=="],
|
||||||
|
|
||||||
"@rolldown/binding-darwin-arm64": ["@rolldown/binding-darwin-arm64@1.0.0-beta.53", "", { "os": "darwin", "cpu": "arm64" }, "sha512-yIsKqMz0CtRnVa6x3Pa+mzTihr4Ty+Z6HfPbZ7RVbk1Uxnco4+CUn7Qbm/5SBol1JD/7nvY8rphAgyAi7Lj6Vg=="],
|
"@rolldown/binding-darwin-arm64": ["@rolldown/binding-darwin-arm64@1.0.0-beta.55", "", { "os": "darwin", "cpu": "arm64" }, "sha512-l0887CGU2SXZr0UJmeEcXSvtDCOhDTTYXuoWbhrEJ58YQhQk24EVhDhHMTyjJb1PBRniUgNc1G0T51eF8z+TWw=="],
|
||||||
|
|
||||||
"@rolldown/binding-darwin-x64": ["@rolldown/binding-darwin-x64@1.0.0-beta.53", "", { "os": "darwin", "cpu": "x64" }, "sha512-GTXe+mxsCGUnJOFMhfGWmefP7Q9TpYUseHvhAhr21nCTgdS8jPsvirb0tJwM3lN0/u/cg7bpFNa16fQrjKrCjQ=="],
|
"@rolldown/binding-darwin-x64": ["@rolldown/binding-darwin-x64@1.0.0-beta.55", "", { "os": "darwin", "cpu": "x64" }, "sha512-d7qP2AVYzN0tYIP4vJ7nmr26xvmlwdkLD/jWIc9Z9dqh5y0UGPigO3m5eHoHq9BNazmwdD9WzDHbQZyXFZjgtA=="],
|
||||||
|
|
||||||
"@rolldown/binding-freebsd-x64": ["@rolldown/binding-freebsd-x64@1.0.0-beta.53", "", { "os": "freebsd", "cpu": "x64" }, "sha512-9Tmp7bBvKqyDkMcL4e089pH3RsjD3SUungjmqWtyhNOxoQMh0fSmINTyYV8KXtE+JkxYMPWvnEt+/mfpVCkk8w=="],
|
"@rolldown/binding-freebsd-x64": ["@rolldown/binding-freebsd-x64@1.0.0-beta.55", "", { "os": "freebsd", "cpu": "x64" }, "sha512-j311E4NOB0VMmXHoDDZhrWidUf7L/Sa6bu/+i2cskvHKU40zcUNPSYeD2YiO2MX+hhDFa5bJwhliYfs+bTrSZw=="],
|
||||||
|
|
||||||
"@rolldown/binding-linux-arm-gnueabihf": ["@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.53", "", { "os": "linux", "cpu": "arm" }, "sha512-a1y5fiB0iovuzdbjUxa7+Zcvgv+mTmlGGC4XydVIsyl48eoxgaYkA3l9079hyTyhECsPq+mbr0gVQsFU11OJAQ=="],
|
"@rolldown/binding-linux-arm-gnueabihf": ["@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.55", "", { "os": "linux", "cpu": "arm" }, "sha512-lAsaYWhfNTW2A/9O7zCpb5eIJBrFeNEatOS/DDOZ5V/95NHy50g4b/5ViCqchfyFqRb7MKUR18/+xWkIcDkeIw=="],
|
||||||
|
|
||||||
"@rolldown/binding-linux-arm64-gnu": ["@rolldown/binding-linux-arm64-gnu@1.0.0-beta.53", "", { "os": "linux", "cpu": "arm64" }, "sha512-bpIGX+ov9PhJYV+wHNXl9rzq4F0QvILiURn0y0oepbQx+7stmQsKA0DhPGwmhfvF856wq+gbM8L92SAa/CBcLg=="],
|
"@rolldown/binding-linux-arm64-gnu": ["@rolldown/binding-linux-arm64-gnu@1.0.0-beta.55", "", { "os": "linux", "cpu": "arm64" }, "sha512-2x6ffiVLZrQv7Xii9+JdtyT1U3bQhKj59K3eRnYlrXsKyjkjfmiDUVx2n+zSyijisUqD62fcegmx2oLLfeTkCA=="],
|
||||||
|
|
||||||
"@rolldown/binding-linux-arm64-musl": ["@rolldown/binding-linux-arm64-musl@1.0.0-beta.53", "", { "os": "linux", "cpu": "arm64" }, "sha512-bGe5EBB8FVjHBR1mOLOPEFg1Lp3//7geqWkU5NIhxe+yH0W8FVrQ6WRYOap4SUTKdklD/dC4qPLREkMMQ855FA=="],
|
"@rolldown/binding-linux-arm64-musl": ["@rolldown/binding-linux-arm64-musl@1.0.0-beta.55", "", { "os": "linux", "cpu": "arm64" }, "sha512-QbNncvqAXziya5wleI+OJvmceEE15vE4yn4qfbI/hwT/+8ZcqxyfRZOOh62KjisXxp4D0h3JZspycXYejxAU3w=="],
|
||||||
|
|
||||||
"@rolldown/binding-linux-x64-gnu": ["@rolldown/binding-linux-x64-gnu@1.0.0-beta.53", "", { "os": "linux", "cpu": "x64" }, "sha512-qL+63WKVQs1CMvFedlPt0U9PiEKJOAL/bsHMKUDS6Vp2Q+YAv/QLPu8rcvkfIMvQ0FPU2WL0aX4eWwF6e/GAnA=="],
|
"@rolldown/binding-linux-x64-gnu": ["@rolldown/binding-linux-x64-gnu@1.0.0-beta.55", "", { "os": "linux", "cpu": "x64" }, "sha512-YZCTZZM+rujxwVc6A+QZaNMJXVtmabmFYLG2VGQTKaBfYGvBKUgtbMEttnp/oZ88BMi2DzadBVhOmfQV8SuHhw=="],
|
||||||
|
|
||||||
"@rolldown/binding-linux-x64-musl": ["@rolldown/binding-linux-x64-musl@1.0.0-beta.53", "", { "os": "linux", "cpu": "x64" }, "sha512-VGl9JIGjoJh3H8Mb+7xnVqODajBmrdOOb9lxWXdcmxyI+zjB2sux69br0hZJDTyLJfvBoYm439zPACYbCjGRmw=="],
|
"@rolldown/binding-linux-x64-musl": ["@rolldown/binding-linux-x64-musl@1.0.0-beta.55", "", { "os": "linux", "cpu": "x64" }, "sha512-28q9OQ/DDpFh2keS4BVAlc3N65/wiqKbk5K1pgLdu/uWbKa8hgUJofhXxqO+a+Ya2HVTUuYHneWsI2u+eu3N5Q=="],
|
||||||
|
|
||||||
"@rolldown/binding-openharmony-arm64": ["@rolldown/binding-openharmony-arm64@1.0.0-beta.53", "", { "os": "none", "cpu": "arm64" }, "sha512-B4iIserJXuSnNzA5xBLFUIjTfhNy7d9sq4FUMQY3GhQWGVhS2RWWzzDnkSU6MUt7/aHUrep0CdQfXUJI9D3W7A=="],
|
"@rolldown/binding-openharmony-arm64": ["@rolldown/binding-openharmony-arm64@1.0.0-beta.55", "", { "os": "none", "cpu": "arm64" }, "sha512-LiCA4BjCnm49B+j1lFzUtlC+4ZphBv0d0g5VqrEJua/uyv9Ey1v9tiaMql1C8c0TVSNDUmrkfHQ71vuQC7YfpQ=="],
|
||||||
|
|
||||||
"@rolldown/binding-wasm32-wasi": ["@rolldown/binding-wasm32-wasi@1.0.0-beta.53", "", { "dependencies": { "@napi-rs/wasm-runtime": "^1.1.0" }, "cpu": "none" }, "sha512-BUjAEgpABEJXilGq/BPh7jeU3WAJ5o15c1ZEgHaDWSz3LB881LQZnbNJHmUiM4d1JQWMYYyR1Y490IBHi2FPJg=="],
|
"@rolldown/binding-wasm32-wasi": ["@rolldown/binding-wasm32-wasi@1.0.0-beta.55", "", { "dependencies": { "@napi-rs/wasm-runtime": "^1.1.0" }, "cpu": "none" }, "sha512-nZ76tY7T0Oe8vamz5Cv5CBJvrqeQxwj1WaJ2GxX8Msqs0zsQMMcvoyxOf0glnJlxxgKjtoBxAOxaAU8ERbW6Tg=="],
|
||||||
|
|
||||||
"@rolldown/binding-win32-arm64-msvc": ["@rolldown/binding-win32-arm64-msvc@1.0.0-beta.53", "", { "os": "win32", "cpu": "arm64" }, "sha512-s27uU7tpCWSjHBnxyVXHt3rMrQdJq5MHNv3BzsewCIroIw3DJFjMH1dzCPPMUFxnh1r52Nf9IJ/eWp6LDoyGcw=="],
|
"@rolldown/binding-win32-arm64-msvc": ["@rolldown/binding-win32-arm64-msvc@1.0.0-beta.55", "", { "os": "win32", "cpu": "arm64" }, "sha512-TFVVfLfhL1G+pWspYAgPK/FSqjiBtRKYX9hixfs508QVEZPQlubYAepHPA7kEa6lZXYj5ntzF87KC6RNhxo+ew=="],
|
||||||
|
|
||||||
"@rolldown/binding-win32-x64-msvc": ["@rolldown/binding-win32-x64-msvc@1.0.0-beta.53", "", { "os": "win32", "cpu": "x64" }, "sha512-cjWL/USPJ1g0en2htb4ssMjIycc36RvdQAx1WlXnS6DpULswiUTVXPDesTifSKYSyvx24E0YqQkEm0K/M2Z/AA=="],
|
"@rolldown/binding-win32-x64-msvc": ["@rolldown/binding-win32-x64-msvc@1.0.0-beta.55", "", { "os": "win32", "cpu": "x64" }, "sha512-j1WBlk0p+ISgLzMIgl0xHp1aBGXenoK2+qWYc/wil2Vse7kVOdFq9aeQ8ahK6/oxX2teQ5+eDvgjdywqTL+daA=="],
|
||||||
|
|
||||||
"@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.0-beta.53", "", {}, "sha512-vENRlFU4YbrwVqNDZ7fLvy+JR1CRkyr01jhSiDpE1u6py3OMzQfztQU2jxykW3ALNxO4kSlqIDeYyD0Y9RcQeQ=="],
|
"@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.0-beta.55", "", {}, "sha512-vajw/B3qoi7aYnnD4BQ4VoCcXQWnF0roSwE2iynbNxgW4l9mFwtLmLmUhpDdcTBfKyZm1p/T0D13qG94XBLohA=="],
|
||||||
|
|
||||||
"@rollup/plugin-alias": ["@rollup/plugin-alias@5.1.1", "", { "peerDependencies": { "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" }, "optionalPeers": ["rollup"] }, "sha512-PR9zDb+rOzkRb2VD+EuKB7UC41vU5DIwZ5qqCpk0KJudcWAyi8rvYOhS7+L5aZCspw1stTViLgN5v6FF1p5cgQ=="],
|
"@rollup/plugin-alias": ["@rollup/plugin-alias@5.1.1", "", { "peerDependencies": { "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" }, "optionalPeers": ["rollup"] }, "sha512-PR9zDb+rOzkRb2VD+EuKB7UC41vU5DIwZ5qqCpk0KJudcWAyi8rvYOhS7+L5aZCspw1stTViLgN5v6FF1p5cgQ=="],
|
||||||
|
|
||||||
@@ -1561,7 +1561,7 @@
|
|||||||
|
|
||||||
"import-fresh": ["import-fresh@3.3.1", "", { "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" } }, "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ=="],
|
"import-fresh": ["import-fresh@3.3.1", "", { "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" } }, "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ=="],
|
||||||
|
|
||||||
"import-without-cache": ["import-without-cache@0.2.4", "", {}, "sha512-b/Ke0y4n26ffQhkLvgBxV/NVO/QEE6AZlrMj8DYuxBWNAAu4iMQWZTFWzKcCTEmv7VQ0ae0j8KwrlGzSy8sYQQ=="],
|
"import-without-cache": ["import-without-cache@0.2.5", "", {}, "sha512-B6Lc2s6yApwnD2/pMzFh/d5AVjdsDXjgkeJ766FmFuJELIGHNycKRj+l3A39yZPM4CchqNCB4RITEAYB1KUM6A=="],
|
||||||
|
|
||||||
"impound": ["impound@1.0.0", "", { "dependencies": { "exsolve": "^1.0.5", "mocked-exports": "^0.1.1", "pathe": "^2.0.3", "unplugin": "^2.3.2", "unplugin-utils": "^0.2.4" } }, "sha512-8lAJ+1Arw2sMaZ9HE2ZmL5zOcMnt18s6+7Xqgq2aUVy4P1nlzAyPtzCDxsk51KVFwHEEdc6OWvUyqwHwhRYaug=="],
|
"impound": ["impound@1.0.0", "", { "dependencies": { "exsolve": "^1.0.5", "mocked-exports": "^0.1.1", "pathe": "^2.0.3", "unplugin": "^2.3.2", "unplugin-utils": "^0.2.4" } }, "sha512-8lAJ+1Arw2sMaZ9HE2ZmL5zOcMnt18s6+7Xqgq2aUVy4P1nlzAyPtzCDxsk51KVFwHEEdc6OWvUyqwHwhRYaug=="],
|
||||||
|
|
||||||
@@ -2255,9 +2255,9 @@
|
|||||||
|
|
||||||
"rfdc": ["rfdc@1.4.1", "", {}, "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA=="],
|
"rfdc": ["rfdc@1.4.1", "", {}, "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA=="],
|
||||||
|
|
||||||
"rolldown": ["rolldown@1.0.0-beta.53", "", { "dependencies": { "@oxc-project/types": "=0.101.0", "@rolldown/pluginutils": "1.0.0-beta.53" }, "optionalDependencies": { "@rolldown/binding-android-arm64": "1.0.0-beta.53", "@rolldown/binding-darwin-arm64": "1.0.0-beta.53", "@rolldown/binding-darwin-x64": "1.0.0-beta.53", "@rolldown/binding-freebsd-x64": "1.0.0-beta.53", "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-beta.53", "@rolldown/binding-linux-arm64-gnu": "1.0.0-beta.53", "@rolldown/binding-linux-arm64-musl": "1.0.0-beta.53", "@rolldown/binding-linux-x64-gnu": "1.0.0-beta.53", "@rolldown/binding-linux-x64-musl": "1.0.0-beta.53", "@rolldown/binding-openharmony-arm64": "1.0.0-beta.53", "@rolldown/binding-wasm32-wasi": "1.0.0-beta.53", "@rolldown/binding-win32-arm64-msvc": "1.0.0-beta.53", "@rolldown/binding-win32-x64-msvc": "1.0.0-beta.53" }, "bin": { "rolldown": "bin/cli.mjs" } }, "sha512-Qd9c2p0XKZdgT5AYd+KgAMggJ8ZmCs3JnS9PTMWkyUfteKlfmKtxJbWTHkVakxwXs1Ub7jrRYVeFeF7N0sQxyw=="],
|
"rolldown": ["rolldown@1.0.0-beta.55", "", { "dependencies": { "@oxc-project/types": "=0.103.0", "@rolldown/pluginutils": "1.0.0-beta.55" }, "optionalDependencies": { "@rolldown/binding-android-arm64": "1.0.0-beta.55", "@rolldown/binding-darwin-arm64": "1.0.0-beta.55", "@rolldown/binding-darwin-x64": "1.0.0-beta.55", "@rolldown/binding-freebsd-x64": "1.0.0-beta.55", "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-beta.55", "@rolldown/binding-linux-arm64-gnu": "1.0.0-beta.55", "@rolldown/binding-linux-arm64-musl": "1.0.0-beta.55", "@rolldown/binding-linux-x64-gnu": "1.0.0-beta.55", "@rolldown/binding-linux-x64-musl": "1.0.0-beta.55", "@rolldown/binding-openharmony-arm64": "1.0.0-beta.55", "@rolldown/binding-wasm32-wasi": "1.0.0-beta.55", "@rolldown/binding-win32-arm64-msvc": "1.0.0-beta.55", "@rolldown/binding-win32-x64-msvc": "1.0.0-beta.55" }, "bin": { "rolldown": "bin/cli.mjs" } }, "sha512-r8Ws43aYCnfO07ao0SvQRz4TBAtZJjGWNvScRBOHuiNHvjfECOJBIqJv0nUkL1GYcltjvvHswRilDF1ocsC0+g=="],
|
||||||
|
|
||||||
"rolldown-plugin-dts": ["rolldown-plugin-dts@0.18.3", "", { "dependencies": { "@babel/generator": "^7.28.5", "@babel/parser": "^7.28.5", "@babel/types": "^7.28.5", "ast-kit": "^2.2.0", "birpc": "^3.0.0", "dts-resolver": "^2.1.3", "get-tsconfig": "^4.13.0", "magic-string": "^0.30.21", "obug": "^2.1.1" }, "peerDependencies": { "@ts-macro/tsc": "^0.3.6", "@typescript/native-preview": ">=7.0.0-dev.20250601.1", "rolldown": "^1.0.0-beta.51", "typescript": "^5.0.0", "vue-tsc": "~3.1.0" }, "optionalPeers": ["@ts-macro/tsc", "@typescript/native-preview", "typescript", "vue-tsc"] }, "sha512-rd1LZ0Awwfyn89UndUF/HoFF4oH9a5j+2ZeuKSJYM80vmeN/p0gslYMnHTQHBEXPhUlvAlqGA3tVgXB/1qFNDg=="],
|
"rolldown-plugin-dts": ["rolldown-plugin-dts@0.19.2", "", { "dependencies": { "@babel/generator": "^7.28.5", "@babel/parser": "^7.28.5", "@babel/types": "^7.28.5", "ast-kit": "^2.2.0", "birpc": "^4.0.0", "dts-resolver": "^2.1.3", "get-tsconfig": "^4.13.0", "obug": "^2.1.1" }, "peerDependencies": { "@ts-macro/tsc": "^0.3.6", "@typescript/native-preview": ">=7.0.0-dev.20250601.1", "rolldown": "^1.0.0-beta.55", "typescript": "^5.0.0", "vue-tsc": "~3.2.0" }, "optionalPeers": ["@ts-macro/tsc", "@typescript/native-preview", "typescript", "vue-tsc"] }, "sha512-KbP0cnnjD1ubnyklqy6GCahvUsOrPFH4i+RTX6bNpyvh+jUsaxY01e9mLOU2NsGzQkJS/q4hbCbdcQoAmSWIYg=="],
|
||||||
|
|
||||||
"rollup": ["rollup@4.53.2", "", { "dependencies": { "@types/estree": "1.0.8" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.53.2", "@rollup/rollup-android-arm64": "4.53.2", "@rollup/rollup-darwin-arm64": "4.53.2", "@rollup/rollup-darwin-x64": "4.53.2", "@rollup/rollup-freebsd-arm64": "4.53.2", "@rollup/rollup-freebsd-x64": "4.53.2", "@rollup/rollup-linux-arm-gnueabihf": "4.53.2", "@rollup/rollup-linux-arm-musleabihf": "4.53.2", "@rollup/rollup-linux-arm64-gnu": "4.53.2", "@rollup/rollup-linux-arm64-musl": "4.53.2", "@rollup/rollup-linux-loong64-gnu": "4.53.2", "@rollup/rollup-linux-ppc64-gnu": "4.53.2", "@rollup/rollup-linux-riscv64-gnu": "4.53.2", "@rollup/rollup-linux-riscv64-musl": "4.53.2", "@rollup/rollup-linux-s390x-gnu": "4.53.2", "@rollup/rollup-linux-x64-gnu": "4.53.2", "@rollup/rollup-linux-x64-musl": "4.53.2", "@rollup/rollup-openharmony-arm64": "4.53.2", "@rollup/rollup-win32-arm64-msvc": "4.53.2", "@rollup/rollup-win32-ia32-msvc": "4.53.2", "@rollup/rollup-win32-x64-gnu": "4.53.2", "@rollup/rollup-win32-x64-msvc": "4.53.2", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-MHngMYwGJVi6Fmnk6ISmnk7JAHRNF0UkuucA0CUW3N3a4KnONPEZz+vUanQP/ZC/iY1Qkf3bwPWzyY84wEks1g=="],
|
"rollup": ["rollup@4.53.2", "", { "dependencies": { "@types/estree": "1.0.8" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.53.2", "@rollup/rollup-android-arm64": "4.53.2", "@rollup/rollup-darwin-arm64": "4.53.2", "@rollup/rollup-darwin-x64": "4.53.2", "@rollup/rollup-freebsd-arm64": "4.53.2", "@rollup/rollup-freebsd-x64": "4.53.2", "@rollup/rollup-linux-arm-gnueabihf": "4.53.2", "@rollup/rollup-linux-arm-musleabihf": "4.53.2", "@rollup/rollup-linux-arm64-gnu": "4.53.2", "@rollup/rollup-linux-arm64-musl": "4.53.2", "@rollup/rollup-linux-loong64-gnu": "4.53.2", "@rollup/rollup-linux-ppc64-gnu": "4.53.2", "@rollup/rollup-linux-riscv64-gnu": "4.53.2", "@rollup/rollup-linux-riscv64-musl": "4.53.2", "@rollup/rollup-linux-s390x-gnu": "4.53.2", "@rollup/rollup-linux-x64-gnu": "4.53.2", "@rollup/rollup-linux-x64-musl": "4.53.2", "@rollup/rollup-openharmony-arm64": "4.53.2", "@rollup/rollup-win32-arm64-msvc": "4.53.2", "@rollup/rollup-win32-ia32-msvc": "4.53.2", "@rollup/rollup-win32-x64-gnu": "4.53.2", "@rollup/rollup-win32-x64-msvc": "4.53.2", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-MHngMYwGJVi6Fmnk6ISmnk7JAHRNF0UkuucA0CUW3N3a4KnONPEZz+vUanQP/ZC/iY1Qkf3bwPWzyY84wEks1g=="],
|
||||||
|
|
||||||
@@ -2451,7 +2451,7 @@
|
|||||||
|
|
||||||
"ts-api-utils": ["ts-api-utils@2.1.0", "", { "peerDependencies": { "typescript": ">=4.8.4" } }, "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ=="],
|
"ts-api-utils": ["ts-api-utils@2.1.0", "", { "peerDependencies": { "typescript": ">=4.8.4" } }, "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ=="],
|
||||||
|
|
||||||
"tsdown": ["tsdown@0.18.0", "", { "dependencies": { "ansis": "^4.2.0", "cac": "^6.7.14", "defu": "^6.1.4", "empathic": "^2.0.0", "hookable": "^5.5.3", "import-without-cache": "^0.2.3", "obug": "^2.1.1", "rolldown": "1.0.0-beta.53", "rolldown-plugin-dts": "^0.18.3", "semver": "^7.7.3", "tinyexec": "^1.0.2", "tinyglobby": "^0.2.15", "tree-kill": "^1.2.2", "unconfig-core": "^7.4.2", "unrun": "^0.2.19" }, "peerDependencies": { "@arethetypeswrong/core": "^0.18.1", "@vitejs/devtools": "^0.0.0-alpha.19", "publint": "^0.3.0", "typescript": "^5.0.0", "unplugin-lightningcss": "^0.4.0", "unplugin-unused": "^0.5.0" }, "optionalPeers": ["@arethetypeswrong/core", "@vitejs/devtools", "publint", "typescript", "unplugin-lightningcss", "unplugin-unused"], "bin": { "tsdown": "dist/run.mjs" } }, "sha512-Yotdh3NzizysnqR96xfpHFYtEntk1cZvSRHz8A+Pn3ZHNdTQa4fBQxh6HHzWZwfjdQv47xb7GCv6vEWMtxBirw=="],
|
"tsdown": ["tsdown@0.18.2", "", { "dependencies": { "ansis": "^4.2.0", "cac": "^6.7.14", "defu": "^6.1.4", "empathic": "^2.0.0", "hookable": "^6.0.1", "import-without-cache": "^0.2.5", "obug": "^2.1.1", "picomatch": "^4.0.3", "rolldown": "1.0.0-beta.55", "rolldown-plugin-dts": "^0.19.1", "semver": "^7.7.3", "tinyexec": "^1.0.2", "tinyglobby": "^0.2.15", "tree-kill": "^1.2.2", "unconfig-core": "^7.4.2", "unrun": "^0.2.20" }, "peerDependencies": { "@arethetypeswrong/core": "^0.18.1", "@vitejs/devtools": "*", "publint": "^0.3.0", "typescript": "^5.0.0", "unplugin-lightningcss": "^0.4.0", "unplugin-unused": "^0.5.0" }, "optionalPeers": ["@arethetypeswrong/core", "@vitejs/devtools", "publint", "typescript", "unplugin-lightningcss", "unplugin-unused"], "bin": { "tsdown": "dist/run.mjs" } }, "sha512-2o6p/9WjcQrgKnz5/VppOstsqXdTER6G6gPe5yhuP57AueIr2y/NQFKdFPHuqMqZpxRLVjm7MP/dXWG7EJpehg=="],
|
||||||
|
|
||||||
"tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="],
|
"tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="],
|
||||||
|
|
||||||
@@ -2529,7 +2529,7 @@
|
|||||||
|
|
||||||
"unrs-resolver": ["unrs-resolver@1.11.1", "", { "dependencies": { "napi-postinstall": "^0.3.0" }, "optionalDependencies": { "@unrs/resolver-binding-android-arm-eabi": "1.11.1", "@unrs/resolver-binding-android-arm64": "1.11.1", "@unrs/resolver-binding-darwin-arm64": "1.11.1", "@unrs/resolver-binding-darwin-x64": "1.11.1", "@unrs/resolver-binding-freebsd-x64": "1.11.1", "@unrs/resolver-binding-linux-arm-gnueabihf": "1.11.1", "@unrs/resolver-binding-linux-arm-musleabihf": "1.11.1", "@unrs/resolver-binding-linux-arm64-gnu": "1.11.1", "@unrs/resolver-binding-linux-arm64-musl": "1.11.1", "@unrs/resolver-binding-linux-ppc64-gnu": "1.11.1", "@unrs/resolver-binding-linux-riscv64-gnu": "1.11.1", "@unrs/resolver-binding-linux-riscv64-musl": "1.11.1", "@unrs/resolver-binding-linux-s390x-gnu": "1.11.1", "@unrs/resolver-binding-linux-x64-gnu": "1.11.1", "@unrs/resolver-binding-linux-x64-musl": "1.11.1", "@unrs/resolver-binding-wasm32-wasi": "1.11.1", "@unrs/resolver-binding-win32-arm64-msvc": "1.11.1", "@unrs/resolver-binding-win32-ia32-msvc": "1.11.1", "@unrs/resolver-binding-win32-x64-msvc": "1.11.1" } }, "sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg=="],
|
"unrs-resolver": ["unrs-resolver@1.11.1", "", { "dependencies": { "napi-postinstall": "^0.3.0" }, "optionalDependencies": { "@unrs/resolver-binding-android-arm-eabi": "1.11.1", "@unrs/resolver-binding-android-arm64": "1.11.1", "@unrs/resolver-binding-darwin-arm64": "1.11.1", "@unrs/resolver-binding-darwin-x64": "1.11.1", "@unrs/resolver-binding-freebsd-x64": "1.11.1", "@unrs/resolver-binding-linux-arm-gnueabihf": "1.11.1", "@unrs/resolver-binding-linux-arm-musleabihf": "1.11.1", "@unrs/resolver-binding-linux-arm64-gnu": "1.11.1", "@unrs/resolver-binding-linux-arm64-musl": "1.11.1", "@unrs/resolver-binding-linux-ppc64-gnu": "1.11.1", "@unrs/resolver-binding-linux-riscv64-gnu": "1.11.1", "@unrs/resolver-binding-linux-riscv64-musl": "1.11.1", "@unrs/resolver-binding-linux-s390x-gnu": "1.11.1", "@unrs/resolver-binding-linux-x64-gnu": "1.11.1", "@unrs/resolver-binding-linux-x64-musl": "1.11.1", "@unrs/resolver-binding-wasm32-wasi": "1.11.1", "@unrs/resolver-binding-win32-arm64-msvc": "1.11.1", "@unrs/resolver-binding-win32-ia32-msvc": "1.11.1", "@unrs/resolver-binding-win32-x64-msvc": "1.11.1" } }, "sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg=="],
|
||||||
|
|
||||||
"unrun": ["unrun@0.2.19", "", { "dependencies": { "rolldown": "1.0.0-beta.53" }, "peerDependencies": { "synckit": "^0.11.11" }, "optionalPeers": ["synckit"], "bin": { "unrun": "dist/cli.mjs" } }, "sha512-DbwbJ9BvPEb3BeZnIpP9S5tGLO/JIgPQ3JrpMRFIfZMZfMG19f26OlLbC2ml8RRdrI2ZA7z2t+at5tsIHbh6Qw=="],
|
"unrun": ["unrun@0.2.20", "", { "dependencies": { "rolldown": "1.0.0-beta.55" }, "peerDependencies": { "synckit": "^0.11.11" }, "optionalPeers": ["synckit"], "bin": { "unrun": "dist/cli.mjs" } }, "sha512-YhobStTk93HYRN/4iBs3q3/sd7knvju1XrzwwrVVfRujyTG1K88hGONIxCoJN0PWBuO+BX7fFiHH0sVDfE3MWw=="],
|
||||||
|
|
||||||
"unstorage": ["unstorage@1.17.3", "", { "dependencies": { "anymatch": "^3.1.3", "chokidar": "^4.0.3", "destr": "^2.0.5", "h3": "^1.15.4", "lru-cache": "^10.4.3", "node-fetch-native": "^1.6.7", "ofetch": "^1.5.1", "ufo": "^1.6.1" }, "peerDependencies": { "@azure/app-configuration": "^1.8.0", "@azure/cosmos": "^4.2.0", "@azure/data-tables": "^13.3.0", "@azure/identity": "^4.6.0", "@azure/keyvault-secrets": "^4.9.0", "@azure/storage-blob": "^12.26.0", "@capacitor/preferences": "^6.0.3 || ^7.0.0", "@deno/kv": ">=0.9.0", "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0", "@planetscale/database": "^1.19.0", "@upstash/redis": "^1.34.3", "@vercel/blob": ">=0.27.1", "@vercel/functions": "^2.2.12 || ^3.0.0", "@vercel/kv": "^1.0.1", "aws4fetch": "^1.0.20", "db0": ">=0.2.1", "idb-keyval": "^6.2.1", "ioredis": "^5.4.2", "uploadthing": "^7.4.4" }, "optionalPeers": ["@azure/app-configuration", "@azure/cosmos", "@azure/data-tables", "@azure/identity", "@azure/keyvault-secrets", "@azure/storage-blob", "@capacitor/preferences", "@deno/kv", "@netlify/blobs", "@planetscale/database", "@upstash/redis", "@vercel/blob", "@vercel/functions", "@vercel/kv", "aws4fetch", "db0", "idb-keyval", "ioredis", "uploadthing"] }, "sha512-i+JYyy0DoKmQ3FximTHbGadmIYb8JEpq7lxUjnjeB702bCPum0vzo6oy5Mfu0lpqISw7hCyMW2yj4nWC8bqJ3Q=="],
|
"unstorage": ["unstorage@1.17.3", "", { "dependencies": { "anymatch": "^3.1.3", "chokidar": "^4.0.3", "destr": "^2.0.5", "h3": "^1.15.4", "lru-cache": "^10.4.3", "node-fetch-native": "^1.6.7", "ofetch": "^1.5.1", "ufo": "^1.6.1" }, "peerDependencies": { "@azure/app-configuration": "^1.8.0", "@azure/cosmos": "^4.2.0", "@azure/data-tables": "^13.3.0", "@azure/identity": "^4.6.0", "@azure/keyvault-secrets": "^4.9.0", "@azure/storage-blob": "^12.26.0", "@capacitor/preferences": "^6.0.3 || ^7.0.0", "@deno/kv": ">=0.9.0", "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0", "@planetscale/database": "^1.19.0", "@upstash/redis": "^1.34.3", "@vercel/blob": ">=0.27.1", "@vercel/functions": "^2.2.12 || ^3.0.0", "@vercel/kv": "^1.0.1", "aws4fetch": "^1.0.20", "db0": ">=0.2.1", "idb-keyval": "^6.2.1", "ioredis": "^5.4.2", "uploadthing": "^7.4.4" }, "optionalPeers": ["@azure/app-configuration", "@azure/cosmos", "@azure/data-tables", "@azure/identity", "@azure/keyvault-secrets", "@azure/storage-blob", "@capacitor/preferences", "@deno/kv", "@netlify/blobs", "@planetscale/database", "@upstash/redis", "@vercel/blob", "@vercel/functions", "@vercel/kv", "aws4fetch", "db0", "idb-keyval", "ioredis", "uploadthing"] }, "sha512-i+JYyy0DoKmQ3FximTHbGadmIYb8JEpq7lxUjnjeB702bCPum0vzo6oy5Mfu0lpqISw7hCyMW2yj4nWC8bqJ3Q=="],
|
||||||
|
|
||||||
@@ -2753,7 +2753,11 @@
|
|||||||
|
|
||||||
"@nuxt/vite-builder/vite": ["vite@7.3.0", "", { "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0", "picomatch": "^4.0.3", "postcss": "^8.5.6", "rollup": "^4.43.0", "tinyglobby": "^0.2.15" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "jiti": ">=1.21.0", "less": "^4.0.0", "lightningcss": "^1.21.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-dZwN5L1VlUBewiP6H9s2+B3e3Jg96D0vzN+Ry73sOefebhYr9f94wwkMNN/9ouoU8pV1BqA1d1zGk8928cx0rg=="],
|
"@nuxt/vite-builder/vite": ["vite@7.3.0", "", { "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0", "picomatch": "^4.0.3", "postcss": "^8.5.6", "rollup": "^4.43.0", "tinyglobby": "^0.2.15" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "jiti": ">=1.21.0", "less": "^4.0.0", "lightningcss": "^1.21.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-dZwN5L1VlUBewiP6H9s2+B3e3Jg96D0vzN+Ry73sOefebhYr9f94wwkMNN/9ouoU8pV1BqA1d1zGk8928cx0rg=="],
|
||||||
|
|
||||||
"@nuxthub/core/hookable": ["hookable@6.0.0-rc.1", "", {}, "sha512-HTdlk761/7uL1OuzvMicnj5F5pGq+iITNCYuKVXakQGn95zyYl5b8u/t407RrU34Jv0vYMiqtkFXEJKHYSFViQ=="],
|
"@nuxthub/core/@cloudflare/workers-types": ["@cloudflare/workers-types@4.20251223.0", "", {}, "sha512-r7oxkFjbMcmzhIrzjXaiJlGFDmmeu3+GlwkLlZbUxVWrXHTCkvqu+DrWnNmF6xZEf9j+2/PpuKIS21J522xhJA=="],
|
||||||
|
|
||||||
|
"@nuxthub/core/c12": ["c12@3.3.3", "", { "dependencies": { "chokidar": "^5.0.0", "confbox": "^0.2.2", "defu": "^6.1.4", "dotenv": "^17.2.3", "exsolve": "^1.0.8", "giget": "^2.0.0", "jiti": "^2.6.1", "ohash": "^2.0.11", "pathe": "^2.0.3", "perfect-debounce": "^2.0.0", "pkg-types": "^2.3.0", "rc9": "^2.1.2" }, "peerDependencies": { "magicast": "*" }, "optionalPeers": ["magicast"] }, "sha512-750hTRvgBy5kcMNPdh95Qo+XUBeGo8C7nsKSmedDmaQI+E0r82DwHeM6vBewDe4rGFbnxoa4V9pw+sPh5+Iz8Q=="],
|
||||||
|
|
||||||
|
"@nuxthub/core/hookable": ["hookable@6.0.1", "", {}, "sha512-uKGyY8BuzN/a5gvzvA+3FVWo0+wUjgtfSdnmjtrOVwQCZPHpHDH2WRO3VZSOeluYrHoDCiXFffZXs8Dj1ULWtw=="],
|
||||||
|
|
||||||
"@nuxtjs/color-mode/@nuxt/kit": ["@nuxt/kit@3.20.1", "", { "dependencies": { "c12": "^3.3.1", "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.6.1", "klona": "^2.0.6", "knitwork": "^1.2.0", "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.3", "tinyglobby": "^0.2.15", "ufo": "^1.6.1", "unctx": "^2.4.1", "untyped": "^2.0.0" } }, "sha512-TIslaylfI5kd3AxX5qts0qyrIQ9Uq3HAA1bgIIJ+c+zpDfK338YS+YrCWxBBzDMECRCbAS58mqAd2MtJfG1ENA=="],
|
"@nuxtjs/color-mode/@nuxt/kit": ["@nuxt/kit@3.20.1", "", { "dependencies": { "c12": "^3.3.1", "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.6.1", "klona": "^2.0.6", "knitwork": "^1.2.0", "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.3", "tinyglobby": "^0.2.15", "ufo": "^1.6.1", "unctx": "^2.4.1", "untyped": "^2.0.0" } }, "sha512-TIslaylfI5kd3AxX5qts0qyrIQ9Uq3HAA1bgIIJ+c+zpDfK338YS+YrCWxBBzDMECRCbAS58mqAd2MtJfG1ENA=="],
|
||||||
|
|
||||||
@@ -2799,6 +2803,8 @@
|
|||||||
|
|
||||||
"@vercel/nft/resolve-from": ["resolve-from@5.0.0", "", {}, "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw=="],
|
"@vercel/nft/resolve-from": ["resolve-from@5.0.0", "", {}, "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw=="],
|
||||||
|
|
||||||
|
"@vitejs/plugin-vue/@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.0-beta.53", "", {}, "sha512-vENRlFU4YbrwVqNDZ7fLvy+JR1CRkyr01jhSiDpE1u6py3OMzQfztQU2jxykW3ALNxO4kSlqIDeYyD0Y9RcQeQ=="],
|
||||||
|
|
||||||
"@vitejs/plugin-vue-jsx/@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.0-beta.9-commit.d91dfb5", "", {}, "sha512-8sExkWRK+zVybw3+2/kBkYBFeLnEUWz1fT7BLHplpzmtqkOfTbAQ9gkt4pzwGIIZmg4Qn5US5ACjUBenrhezwQ=="],
|
"@vitejs/plugin-vue-jsx/@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.0-beta.9-commit.d91dfb5", "", {}, "sha512-8sExkWRK+zVybw3+2/kBkYBFeLnEUWz1fT7BLHplpzmtqkOfTbAQ9gkt4pzwGIIZmg4Qn5US5ACjUBenrhezwQ=="],
|
||||||
|
|
||||||
"@vue-macros/common/@vue/compiler-sfc": ["@vue/compiler-sfc@3.5.24", "", { "dependencies": { "@babel/parser": "^7.28.5", "@vue/compiler-core": "3.5.24", "@vue/compiler-dom": "3.5.24", "@vue/compiler-ssr": "3.5.24", "@vue/shared": "3.5.24", "estree-walker": "^2.0.2", "magic-string": "^0.30.21", "postcss": "^8.5.6", "source-map-js": "^1.2.1" } }, "sha512-8EG5YPRgmTB+YxYBM3VXy8zHD9SWHUJLIGPhDovo3Z8VOgvP+O7UP5vl0J4BBPWYD9vxtBabzW1EuEZ+Cqs14g=="],
|
"@vue-macros/common/@vue/compiler-sfc": ["@vue/compiler-sfc@3.5.24", "", { "dependencies": { "@babel/parser": "^7.28.5", "@vue/compiler-core": "3.5.24", "@vue/compiler-dom": "3.5.24", "@vue/compiler-ssr": "3.5.24", "@vue/shared": "3.5.24", "estree-walker": "^2.0.2", "magic-string": "^0.30.21", "postcss": "^8.5.6", "source-map-js": "^1.2.1" } }, "sha512-8EG5YPRgmTB+YxYBM3VXy8zHD9SWHUJLIGPhDovo3Z8VOgvP+O7UP5vl0J4BBPWYD9vxtBabzW1EuEZ+Cqs14g=="],
|
||||||
@@ -2971,9 +2977,9 @@
|
|||||||
|
|
||||||
"remark-rehype/mdast-util-to-hast": ["mdast-util-to-hast@13.2.0", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "@ungap/structured-clone": "^1.0.0", "devlop": "^1.0.0", "micromark-util-sanitize-uri": "^2.0.0", "trim-lines": "^3.0.0", "unist-util-position": "^5.0.0", "unist-util-visit": "^5.0.0", "vfile": "^6.0.0" } }, "sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA=="],
|
"remark-rehype/mdast-util-to-hast": ["mdast-util-to-hast@13.2.0", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "@ungap/structured-clone": "^1.0.0", "devlop": "^1.0.0", "micromark-util-sanitize-uri": "^2.0.0", "trim-lines": "^3.0.0", "unist-util-position": "^5.0.0", "unist-util-visit": "^5.0.0", "vfile": "^6.0.0" } }, "sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA=="],
|
||||||
|
|
||||||
"rolldown/@oxc-project/types": ["@oxc-project/types@0.101.0", "", {}, "sha512-nuFhqlUzJX+gVIPPfuE6xurd4lST3mdcWOhyK/rZO0B9XWMKm79SuszIQEnSMmmDhq1DC8WWVYGVd+6F93o1gQ=="],
|
"rolldown/@oxc-project/types": ["@oxc-project/types@0.103.0", "", {}, "sha512-bkiYX5kaXWwUessFRSoXFkGIQTmc6dLGdxuRTrC+h8PSnIdZyuXHHlLAeTmOue5Br/a0/a7dHH0Gca6eXn9MKg=="],
|
||||||
|
|
||||||
"rolldown-plugin-dts/birpc": ["birpc@3.0.0", "", {}, "sha512-by+04pHuxpCEQcucAXqzopqfhyI8TLK5Qg5MST0cB6MP+JhHna9ollrtK9moVh27aq6Q6MEJgebD0cVm//yBkg=="],
|
"rolldown-plugin-dts/birpc": ["birpc@4.0.0", "", {}, "sha512-LShSxJP0KTmd101b6DRyGBj57LZxSDYWKitQNW/mi8GRMvZb078Uf9+pveax1DrVL89vm7mWe+TovdI/UDOuPw=="],
|
||||||
|
|
||||||
"rollup-plugin-visualizer/open": ["open@8.4.2", "", { "dependencies": { "define-lazy-prop": "^2.0.0", "is-docker": "^2.1.1", "is-wsl": "^2.2.0" } }, "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ=="],
|
"rollup-plugin-visualizer/open": ["open@8.4.2", "", { "dependencies": { "define-lazy-prop": "^2.0.0", "is-docker": "^2.1.1", "is-wsl": "^2.2.0" } }, "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ=="],
|
||||||
|
|
||||||
@@ -2993,6 +2999,8 @@
|
|||||||
|
|
||||||
"tar-stream/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=="],
|
"tar-stream/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=="],
|
||||||
|
|
||||||
|
"tsdown/hookable": ["hookable@6.0.1", "", {}, "sha512-uKGyY8BuzN/a5gvzvA+3FVWo0+wUjgtfSdnmjtrOVwQCZPHpHDH2WRO3VZSOeluYrHoDCiXFffZXs8Dj1ULWtw=="],
|
||||||
|
|
||||||
"unconfig-core/quansync": ["quansync@1.0.0", "", {}, "sha512-5xZacEEufv3HSTPQuchrvV6soaiACMFnq1H8wkVioctoH3TRha9Sz66lOxRwPK/qZj7HPiSveih9yAyh98gvqA=="],
|
"unconfig-core/quansync": ["quansync@1.0.0", "", {}, "sha512-5xZacEEufv3HSTPQuchrvV6soaiACMFnq1H8wkVioctoH3TRha9Sz66lOxRwPK/qZj7HPiSveih9yAyh98gvqA=="],
|
||||||
|
|
||||||
"unctx/unplugin": ["unplugin@2.3.10", "", { "dependencies": { "@jridgewell/remapping": "^2.3.5", "acorn": "^8.15.0", "picomatch": "^4.0.3", "webpack-virtual-modules": "^0.6.2" } }, "sha512-6NCPkv1ClwH+/BGE9QeoTIl09nuiAt0gS28nn1PvYXsGKRwM2TCbFA2QiilmehPDTXIe684k4rZI1yl3A1PCUw=="],
|
"unctx/unplugin": ["unplugin@2.3.10", "", { "dependencies": { "@jridgewell/remapping": "^2.3.5", "acorn": "^8.15.0", "picomatch": "^4.0.3", "webpack-virtual-modules": "^0.6.2" } }, "sha512-6NCPkv1ClwH+/BGE9QeoTIl09nuiAt0gS28nn1PvYXsGKRwM2TCbFA2QiilmehPDTXIe684k4rZI1yl3A1PCUw=="],
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ export const collections = {
|
|||||||
cover: z.string().optional(),
|
cover: z.string().optional(),
|
||||||
favorite: z.boolean().optional(),
|
favorite: z.boolean().optional(),
|
||||||
status: z.string().optional(),
|
status: z.string().optional(),
|
||||||
emoji: z.string().optional()
|
icon: z.string()
|
||||||
})
|
})
|
||||||
}),
|
}),
|
||||||
uses: defineCollection({
|
uses: defineCollection({
|
||||||
@@ -55,7 +55,7 @@ export const collections = {
|
|||||||
location: z.string(),
|
location: z.string(),
|
||||||
description: z.string(),
|
description: z.string(),
|
||||||
tags: z.array(z.string()).optional(),
|
tags: z.array(z.string()).optional(),
|
||||||
emoji: z.string().optional()
|
icon: z.string()
|
||||||
})
|
})
|
||||||
}),
|
}),
|
||||||
education: defineCollection({
|
education: defineCollection({
|
||||||
@@ -72,7 +72,7 @@ export const collections = {
|
|||||||
location: z.string(),
|
location: z.string(),
|
||||||
description: z.string().optional(),
|
description: z.string().optional(),
|
||||||
tags: z.array(z.string()).optional(),
|
tags: z.array(z.string()).optional(),
|
||||||
emoji: z.string().optional()
|
icon: z.string()
|
||||||
})
|
})
|
||||||
}),
|
}),
|
||||||
contact: defineCollection({
|
contact: defineCollection({
|
||||||
|
|||||||
@@ -11,5 +11,5 @@ tags:
|
|||||||
- Mathematics
|
- Mathematics
|
||||||
- Physics
|
- Physics
|
||||||
- Computer Science
|
- Computer Science
|
||||||
emoji: 🎓
|
icon: i-ph-math-operations-duotone
|
||||||
---
|
---
|
||||||
@@ -3,8 +3,8 @@ title: Master's Degree in Applied Mathematics (Year 1)
|
|||||||
type: Master
|
type: Master
|
||||||
institution: Paris Dauphine-PSL University
|
institution: Paris Dauphine-PSL University
|
||||||
location: Paris, France
|
location: Paris, France
|
||||||
startDate: 2023-09
|
startDate: 2024-09
|
||||||
endDate: 2024-06
|
endDate: 2025-06
|
||||||
duration: 1 year
|
duration: 1 year
|
||||||
description: First year of specialized study in applied mathematics, combining theoretical knowledge with practical applications in data science, optimization, and machine learning.
|
description: First year of specialized study in applied mathematics, combining theoretical knowledge with practical applications in data science, optimization, and machine learning.
|
||||||
tags:
|
tags:
|
||||||
@@ -12,5 +12,5 @@ tags:
|
|||||||
- Data Science
|
- Data Science
|
||||||
- Machine Learning
|
- Machine Learning
|
||||||
- Optimization
|
- Optimization
|
||||||
emoji: 📚
|
icon: i-ph-number-circle-one-duotone
|
||||||
---
|
---
|
||||||
@@ -3,8 +3,8 @@ title: Master's Degree in Applied Mathematics (Year 2)
|
|||||||
type: Master
|
type: Master
|
||||||
institution: Paris Dauphine-PSL University
|
institution: Paris Dauphine-PSL University
|
||||||
location: Paris, France
|
location: Paris, France
|
||||||
startDate: 2024-09
|
startDate: 2025-09
|
||||||
endDate: 2025-10
|
endDate: 2026-10
|
||||||
duration: 1 year
|
duration: 1 year
|
||||||
description: Second year of advanced study in applied mathematics with focus on specialized topics, research projects, and professional applications in industry and research.
|
description: Second year of advanced study in applied mathematics with focus on specialized topics, research projects, and professional applications in industry and research.
|
||||||
tags:
|
tags:
|
||||||
@@ -12,5 +12,5 @@ tags:
|
|||||||
- Advanced Machine Learning
|
- Advanced Machine Learning
|
||||||
- Data Engineering
|
- Data Engineering
|
||||||
- Research
|
- Research
|
||||||
emoji: 🏆
|
icon: i-ph-number-circle-two-duotone
|
||||||
---
|
---
|
||||||
@@ -14,5 +14,5 @@ tags:
|
|||||||
- HomeLab
|
- HomeLab
|
||||||
- Docker
|
- Docker
|
||||||
- Self-Hosted
|
- Self-Hosted
|
||||||
emoji: 💼
|
icon: i-ph-briefcase-metal-duotone
|
||||||
---
|
---
|
||||||
|
|||||||
@@ -14,5 +14,5 @@ tags:
|
|||||||
- Minecraft
|
- Minecraft
|
||||||
- Backend
|
- Backend
|
||||||
- Game Development
|
- Game Development
|
||||||
emoji: 🎮
|
icon: i-ph-cube-duotone
|
||||||
---
|
---
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
---
|
---
|
||||||
title: Hackathon CND - Machine Learning for Cybersecurity
|
title: Hackathon CND - Machine Learning for Cybersecurity
|
||||||
type: Hackathon
|
type: Hackathon
|
||||||
company: Commissariat au numérique de défense (CND), French Armies ministry
|
company: French Armies ministry
|
||||||
companyUrl: https://www.defense.gouv.fr/cnd
|
companyUrl: https://www.defense.gouv.fr/cnd
|
||||||
location: Fort du Mont-Valérien, Suresnes, France
|
location: Fort du Mont-Valérien, Suresnes, France
|
||||||
startDate: 2025-11
|
startDate: 2025-11
|
||||||
@@ -15,5 +15,5 @@ tags:
|
|||||||
- Cybersecurity
|
- Cybersecurity
|
||||||
- Streamlit
|
- Streamlit
|
||||||
- LLM
|
- LLM
|
||||||
emoji: 🔒
|
icon: i-ph-shield-check-duotone
|
||||||
---
|
---
|
||||||
|
|||||||
@@ -13,5 +13,5 @@ tags:
|
|||||||
- Customer Service
|
- Customer Service
|
||||||
- Retail
|
- Retail
|
||||||
- Team Work
|
- Team Work
|
||||||
emoji: 🛒
|
icon: i-ph-shopping-cart-duotone
|
||||||
---
|
---
|
||||||
@@ -14,5 +14,5 @@ tags:
|
|||||||
- Microsoft Azure
|
- Microsoft Azure
|
||||||
- Data Engineering
|
- Data Engineering
|
||||||
- Data Quality
|
- Data Quality
|
||||||
emoji: 📊
|
icon: i-ph-dog-duotone
|
||||||
---
|
---
|
||||||
@@ -5,31 +5,64 @@ description: I'm Arthur, a Mathematics lover and IA enthusiast. I'm currently
|
|||||||
Computer Science, and Artificial Intelligence.
|
Computer Science, and Artificial Intelligence.
|
||||||
---
|
---
|
||||||
|
|
||||||
Hey, I'm :home-name, a Mathematics student in Statistics at the Paris-Dauphine University in France.
|
Hey, I'm :home-name, a Master 2 student in Statistical & Financial Engineering (Master ISF) at Paris-Dauphine University.
|
||||||
|
|
||||||
With a :hover-text{hover="Technology is evolving far too quickly 🤯" position="top" text="deep understanding"} of emerging technologies, I'm at the heart of a rapidly expanding field. My background in :hover-text{hover="Maths is my main passion ∑" position="right" text="mathematics"} gives me a head start in understanding the concepts and theories behind these :hover-text{hover="My second passion 📱" text="technologies"} and in designing them effectively.
|
I sit at the intersection of :hover-text{hover="Learning Theory, RL & Advanced ML 🧠" position="top" text="theoretical research"} and :hover-text{hover="From MLOps to Production 🚀" position="right" text="software engineering"}. Unlike a pure theorist, I build what I model. Unlike a pure developer, I understand the math behind the code.
|
||||||
|
|
||||||
As a software engineer and mathematics student, my :hover-text{hover="My bag of knowledge 🎒" text="expertise"} covers
|
I am currently pivoting towards :hover-text{hover="Alignment, Robustness & Interpretability 🧭" text="Research in AI Safety"}. I will soon start my Master's Thesis focusing on :hover-text{hover="Robustness & Adversarial Defenses 🛡️" text="Cybersecurity"} and :hover-text{hover="Ensuring AI alignment and stability 🤝" text="Safe Deep Learning"}, exploring how to make AI systems mathematically robust and secure.
|
||||||
:prose-icon[TypeScript]{color="blue" icon="i-logos:typescript-icon"},
|
|
||||||
:prose-icon[Vue]{color="green" icon="i-logos:vue"},
|
To support this research, I leverage
|
||||||
:prose-icon[Nuxt]{color="emerald" icon="i-logos:nuxt-icon"},
|
|
||||||
:prose-icon[Adonis]{color="purple" icon="i-logos:adonisjs-icon"},
|
|
||||||
:prose-icon[Java]{color="red" icon="i-logos:java"},
|
|
||||||
:prose-icon[Python]{color="amber" icon="i-logos:python"},
|
:prose-icon[Python]{color="amber" icon="i-logos:python"},
|
||||||
:prose-icon[R]{color="blue" icon="i-logos:r-lang"}, which enables me to :hover-text{hover="Need to quickly understand the complexity of projects 🏎️" text="understand"} the different needs of mathematical projects and to propose the best solutions.
|
:prose-icon[PyTorch]{color="orange" icon="i-logos:pytorch-icon"} and
|
||||||
I use tools like
|
:prose-icon[R]{color="blue" icon="i-logos:r-lang"} to design robust architectures, using tools like
|
||||||
:prose-icon[scikit-learn]{color="orange" icon="devicon-scikitlearn"} for supervised learning,
|
:prose-icon[Docker]{color="sky" icon="i-logos:docker-icon"} and
|
||||||
:prose-icon[pandas]{color="blue" icon="i-logos:pandas-icon"} for efficient data manipulation,
|
:prose-icon[Linux]{color="zinc" icon="i-logos:linux-tux"} to ensure reproducibility in my :hover-text{hover="I self-host my own GPU cluster 🔌" text="homelab"}.
|
||||||
:prose-icon[NumPy]{color="indigo" icon="i-logos:numpy"} for scientific computation, and
|
|
||||||
:prose-icon[TensorFlow]{color="orange" icon="i-logos:tensorflow"} as well as :prose-icon[PyTorch]{color="orange" icon="i-logos:pytorch-icon"} to build and train deep learning models.
|
|
||||||
I also learned other important technologies, such as
|
|
||||||
:prose-icon[Docker]{color="sky" icon="i-logos:docker-icon"},
|
|
||||||
:prose-icon[Redis]{color="red" icon="i-logos:redis"},
|
|
||||||
:prose-icon[MySQL]{color="zinc" icon="i-logos:mysql-icon"} and
|
|
||||||
:prose-icon[Git]{color="orange" icon="i-logos:git-icon"} to :hover-text{hover="All these technologies complement each other 🔗" text="complete"} my knowledge.
|
|
||||||
|
|
||||||
These tools allow me to go from :hover-text{hover="Exploration, cleaning, reshaping…" text="data preparation"} to :hover-text{hover="Training, evaluation, deployment" text="deployment"} of models in real-world environments, with statistical rigor and performance in mind. I'm passionate about AI and :hover-text{hover="AI is the future of technology 🤖" text="data science"} .
|
When I'm not working on generalization bounds or fixing pipelines, I enjoy :hover-text{hover="Former Team Captain 🏉" text="Rugby"} and :hover-text{hover="Exploring the world 🌍" text="Traveling"}.
|
||||||
|
|
||||||
I'm :hover-text{hover="As tech is always evolving, I need to be up-to-date 🖥️" position="top" text="constantly"} learning new things, from technology to finance and entrepreneurship. I love :hover-text{hover="I love sharing my knowledge and helping others 🫂" text="sharing"} my knowledge and learning new theorems and technologies. I'm a :hover-text{hover="I'm constantly looking to discover new things" text="curious"} person and eager to continue learning and growing throughout my life.
|
---
|
||||||
|
|
||||||
As well as programming, I enjoy :hover-text{hover="Sport allows me to burn off energy 🏋️♂️" text="sport"} and :hover-text{hover="Travelling frees me and gets me away from it all ✈️" text="travelling"} . My passion, commitment and eagerness to learn and progress are the qualities that enable me to succeed in my :hover-text{hover="Career already begun and far from over 😎" text="career"} and :hover-text{hover="Only 2 years of study left 💪" text="studies"} .
|
## 🛠 Scientific & Technical Arsenal
|
||||||
|
|
||||||
|
My research capabilities rely on a **dual expertise**: advanced mathematical modeling for conception, and robust engineering for execution.
|
||||||
|
|
||||||
|
::home-skills
|
||||||
|
::
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 💼 Research & Engineering Path
|
||||||
|
|
||||||
|
Theoretical knowledge is nothing without concrete application. From building distributed systems to designing defensive AI pipelines, my journey reflects a constant shift towards more complex and critical challenges.
|
||||||
|
|
||||||
|
::home-timeline-experiences{class="mb-8"}
|
||||||
|
::
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🎓 Academic Foundation
|
||||||
|
|
||||||
|
Mathematical rigor is the cornerstone of Safe AI. My background in **Statistics, Probability, and Optimization** provides the necessary tools to understand and secure modern Deep Learning architectures.
|
||||||
|
|
||||||
|
::home-timeline-education{class="mb-8"}
|
||||||
|
::
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📊 Continuous Integration
|
||||||
|
|
||||||
|
Research requires discipline. Whether I am fine-tuning a model or maintaining my infrastructure, I believe in consistency and transparency.
|
||||||
|
|
||||||
|
::home-activity
|
||||||
|
::
|
||||||
|
|
||||||
|
::home-stats
|
||||||
|
::
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
::home-quote
|
||||||
|
::
|
||||||
|
|
||||||
|
::home-catch-phrase
|
||||||
|
::
|
||||||
@@ -14,7 +14,7 @@ tags:
|
|||||||
- TypeScript
|
- TypeScript
|
||||||
- Tailwind CSS
|
- Tailwind CSS
|
||||||
- Web
|
- Web
|
||||||
emoji: 🌍
|
icon: i-ph-globe-hemisphere-west-duotone
|
||||||
---
|
---
|
||||||
|
|
||||||
[**ArtChat**](https://go.arthurdanjou.fr/website) is my personal space on the web — a portfolio, a blog, and a digital lab where I showcase my projects, write about topics I care about, and experiment with design and web technologies.
|
[**ArtChat**](https://go.arthurdanjou.fr/website) is my personal space on the web — a portfolio, a blog, and a digital lab where I showcase my projects, write about topics I care about, and experiment with design and web technologies.
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ tags:
|
|||||||
- Vue.js
|
- Vue.js
|
||||||
- Web
|
- Web
|
||||||
- Productivity
|
- Productivity
|
||||||
emoji: 🏡
|
icon: i-ph-house-duotone
|
||||||
---
|
---
|
||||||
|
|
||||||
[ArtHome](https://go.arthurdanjou.fr/arthome) is a customizable browser homepage that lets you organize all your favorite links in one place.
|
[ArtHome](https://go.arthurdanjou.fr/arthome) is a customizable browser homepage that lets you organize all your favorite links in one place.
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ tags:
|
|||||||
- HomeLab
|
- HomeLab
|
||||||
- Self-Hosted
|
- Self-Hosted
|
||||||
- Infrastructure
|
- Infrastructure
|
||||||
emoji: 🏡
|
icon: i-ph-flask-duotone
|
||||||
---
|
---
|
||||||
|
|
||||||
[**ArtLab**](https://go.arthurdanjou.fr/status) is my personal homelab, where I experiment with self-hosting and automation.
|
[**ArtLab**](https://go.arthurdanjou.fr/status) is my personal homelab, where I experiment with self-hosting and automation.
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ tags:
|
|||||||
- Data Science
|
- Data Science
|
||||||
- Machine Learning
|
- Machine Learning
|
||||||
- Mathematics
|
- Mathematics
|
||||||
emoji: 🎓
|
icon: i-ph-book-duotone
|
||||||
---
|
---
|
||||||
|
|
||||||
# ArtStudies
|
# ArtStudies
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ tags:
|
|||||||
- Data Analysis
|
- Data Analysis
|
||||||
- GLM
|
- GLM
|
||||||
- Mathematics
|
- Mathematics
|
||||||
emoji: 🚲
|
icon: i-ph-bicycle-duotone
|
||||||
---
|
---
|
||||||
|
|
||||||
# Generalized Linear Models for Bikes Prediction
|
# Generalized Linear Models for Bikes Prediction
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ tags:
|
|||||||
- Data Science
|
- Data Science
|
||||||
- Classification
|
- Classification
|
||||||
- Healthcare
|
- Healthcare
|
||||||
emoji: 💉
|
icon: i-ph-heart-half-duotone
|
||||||
---
|
---
|
||||||
|
|
||||||
The project was carried out as part of the `Statistical Learning` course at Paris-Dauphine PSL University. Its objective is to identify the most effective model for predicting or explaining the presence of breast cancer based on a set of biological and clinical features.
|
The project was carried out as part of the `Statistical Learning` course at Paris-Dauphine PSL University. Its objective is to identify the most effective model for predicting or explaining the presence of breast cancer based on a set of biological and clinical features.
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ tags:
|
|||||||
- Machine Learning
|
- Machine Learning
|
||||||
- Deep Learning
|
- Deep Learning
|
||||||
- Research
|
- Research
|
||||||
emoji: 🔬
|
icon: i-ph-share-network-duotone
|
||||||
---
|
---
|
||||||
|
|
||||||
📉 [Dropout Reduces Underfitting](https://github.com/arthurdanjou/dropoutreducesunderfitting): Reproduction & Analysis
|
📉 [Dropout Reduces Underfitting](https://github.com/arthurdanjou/dropoutreducesunderfitting): Reproduction & Analysis
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ tags:
|
|||||||
- Classification
|
- Classification
|
||||||
- Data Science
|
- Data Science
|
||||||
- Finance
|
- Finance
|
||||||
emoji: 💰
|
icon: i-ph-money-wavy-duotone
|
||||||
---
|
---
|
||||||
|
|
||||||
# Machine Learning for Loan Prediction
|
# Machine Learning for Loan Prediction
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ tags:
|
|||||||
- Statistics
|
- Statistics
|
||||||
- Monte Carlo
|
- Monte Carlo
|
||||||
- Numerical Methods
|
- Numerical Methods
|
||||||
emoji: 💻
|
icon: i-ph-dice-five-duotone
|
||||||
---
|
---
|
||||||
|
|
||||||
This is the report for the Monte Carlo Methods Project. The project was done as part of the course `Monte Carlo Methods` at the Paris-Dauphine University. The goal was to implement different methods and algorithms using Monte Carlo methods in R.
|
This is the report for the Monte Carlo Methods Project. The project was done as part of the course `Monte Carlo Methods` at the Paris-Dauphine University. The goal was to implement different methods and algorithms using Monte Carlo methods in R.
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ tags:
|
|||||||
- Statistics
|
- Statistics
|
||||||
- Modeling
|
- Modeling
|
||||||
- Mathematics
|
- Mathematics
|
||||||
emoji: 📊
|
icon: i-ph-city-duotone
|
||||||
---
|
---
|
||||||
|
|
||||||
This is the French version of the report for the Schelling Segregation Model project. The project was done as part of the course `Projet Numérique` at the Paris-Saclay University. The goal was to implement the Schelling Segregation Model in Python and analyze the results using statistics and data visualization.
|
This is the French version of the report for the Schelling Segregation Model project. The project was done as part of the course `Projet Numérique` at the Paris-Saclay University. The goal was to implement the Schelling Segregation Model in Python and analyze the results using statistics and data visualization.
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ tags:
|
|||||||
- Data Engineering
|
- Data Engineering
|
||||||
- Azure
|
- Azure
|
||||||
- Big Data
|
- Big Data
|
||||||
emoji: 🐶
|
icon: i-ph-dog-duotone
|
||||||
---
|
---
|
||||||
|
|
||||||
[Sevetys](https://sevetys.fr) is a leading French network of over 200 veterinary clinics, employing more than 1,300 professionals. Founded in 2017, the group provides comprehensive veterinary care for companion animals, exotic pets, and livestock, with services ranging from preventive medicine and surgery to cardiology, dermatology, and 24/7 emergency care.
|
[Sevetys](https://sevetys.fr) is a leading French network of over 200 veterinary clinics, employing more than 1,300 professionals. Founded in 2017, the group provides comprehensive veterinary care for companion animals, exotic pets, and livestock, with services ranging from preventive medicine and surgery to cardiology, dermatology, and 24/7 emergency care.
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
"@nuxt/content": "3.9.0",
|
"@nuxt/content": "3.9.0",
|
||||||
"@nuxt/eslint": "1.12.1",
|
"@nuxt/eslint": "1.12.1",
|
||||||
"@nuxt/ui": "^4.3.0",
|
"@nuxt/ui": "^4.3.0",
|
||||||
"@nuxthub/core": "^0.10.3",
|
"@nuxthub/core": "0.10.4",
|
||||||
"@nuxtjs/mdc": "^0.19.1",
|
"@nuxtjs/mdc": "^0.19.1",
|
||||||
"@vueuse/core": "^14.1.0",
|
"@vueuse/core": "^14.1.0",
|
||||||
"@vueuse/math": "^14.1.0",
|
"@vueuse/math": "^14.1.0",
|
||||||
@@ -29,7 +29,7 @@
|
|||||||
"zod": "^4.2.1"
|
"zod": "^4.2.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@iconify-json/devicon": "1.2.54",
|
"@iconify-json/devicon": "1.2.55",
|
||||||
"@iconify-json/file-icons": "^1.2.2",
|
"@iconify-json/file-icons": "^1.2.2",
|
||||||
"@iconify-json/logos": "^1.2.10",
|
"@iconify-json/logos": "^1.2.10",
|
||||||
"@iconify-json/ph": "^1.2.2",
|
"@iconify-json/ph": "^1.2.2",
|
||||||
|
|||||||
@@ -62,8 +62,6 @@ export const navs: readonly Nav[] = [
|
|||||||
{ label: 'uses', to: '/uses', icon: 'tree-evergreen-duotone' },
|
{ label: 'uses', to: '/uses', icon: 'tree-evergreen-duotone' },
|
||||||
{ label: 'projects', to: '/projects', icon: 'folder-duotone' },
|
{ label: 'projects', to: '/projects', icon: 'folder-duotone' },
|
||||||
{ label: 'hobbies', to: '/hobbies', icon: 'game-controller-duotone' },
|
{ label: 'hobbies', to: '/hobbies', icon: 'game-controller-duotone' },
|
||||||
{ label: 'stats', to: '/stats', icon: 'chart-bar-duotone' },
|
|
||||||
{ label: 'activity', to: '/activity', icon: 'activity-duotone' },
|
|
||||||
{ label: 'ecosystem', to: '/ecosystem', icon: 'graph-duotone' },
|
{ label: 'ecosystem', to: '/ecosystem', icon: 'graph-duotone' },
|
||||||
{
|
{
|
||||||
label: 'resume',
|
label: 'resume',
|
||||||
|
|||||||
Reference in New Issue
Block a user