feat: add OpenGraph image support

+38
app/components/OgImage/Post.vue
···
+
<script setup lang="ts">
+
const config = useRuntimeConfig().public;
+
+
const props = defineProps<{
+
title: string;
+
date: string;
+
author: string;
+
}>();
+
+
const { title, date, author } = props;
+
</script>
+
+
<template>
+
<div class="h-full w-full flex items-start justify-start bg-stone-100">
+
<div class="flex items-start justify-start h-full">
+
<div class="flex flex-col justify-between w-full h-full px-30 py-15" style="font-family: 'Recoleta'">
+
<h1 class="text-[90px] text-left">
+
{{ title }}
+
</h1>
+
<div class="flex flex-row items-center justify-between text-4xl font-bold mb-0">
+
<div class="flex flex-row items-center gap-8">
+
<img src="/logo.png" alt="Author Avatar" height="56" width="56">
+
<p>
+
{{ author }}
+
</p>
+
</div>
+
<p>
+
{{ new Date(date).toLocaleDateString('en-GB', {
+
year: 'numeric',
+
month: 'long',
+
day: 'numeric'
+
}) }}
+
</p>
+
</div>
+
</div>
+
</div>
+
</div>
+
</template>
+9 -1
app/pages/posts/[...slug].vue
···
const config = useRuntimeConfig().public;
const route = useRoute();
-
const { data: post } = await useAsyncData(route.path, () =>
+
const { data: post } = await useAsyncData(`post-${route.path}`, () =>
queryCollection("posts").path(route.path).first()
);
···
title: post.value?.title,
description: post.value?.description
});
+
+
if (post.value) {
+
defineOgImageComponent("Post", {
+
title: post.value.title,
+
date: post.value.date,
+
author: post.value.authors[0]?.name,
+
});
+
}
</script>
<template>
+1
blog.config.ts
···
import { defineBlogConfig } from "./globals";
export default defineBlogConfig({
+
site: "https://finxol.io",
title: "finxol's blog",
author: "finxol",
meta: [
+22 -19
content.config.ts
···
import { defineCollection, defineContentConfig, z } from "@nuxt/content";
+
import { asOgImageCollection } from "nuxt-og-image/content";
export default defineContentConfig({
collections: {
···
source: "pages/**/*.md",
schema: z.object({})
}),
-
posts: defineCollection({
-
type: "page",
-
source: {
-
include: "posts/**/*.md"
-
},
-
schema: z.object({
-
title: z.string(),
-
description: z.string(),
-
date: z.string().date(),
-
updated: z.string().date().optional(),
-
authors: z.array(
-
z.object({
-
name: z.string(),
-
avatar: z.string().optional()
-
})
-
),
-
tags: z.array(z.string()),
-
published: z.boolean().optional()
+
posts: defineCollection(
+
asOgImageCollection({
+
type: "page",
+
source: {
+
include: "posts/**/*.md"
+
},
+
schema: z.object({
+
title: z.string(),
+
description: z.string(),
+
date: z.string().date(),
+
updated: z.string().date().optional(),
+
authors: z.array(
+
z.object({
+
name: z.string(),
+
avatar: z.string().optional()
+
})
+
),
+
tags: z.array(z.string()),
+
published: z.boolean().optional()
+
})
})
-
})
+
)
}
});
+2
globals.ts
···
} & {};
export type BlogConfig = {
+
site: string;
tableOfContents: boolean;
sharingProviders: ("bluesky" | "clipboard" | "native")[];
title: string;
···
export function defineBlogConfig(config: Prettify<Partial<BlogConfig>>) {
return {
+
site: config.site ?? "https://example.com",
tableOfContents: config.tableOfContents ?? true,
sharingProviders: config.sharingProviders
? config.sharingProviders.reduce(
+14 -1
nuxt.config.ts
···
// https://nuxt.com/docs/api/configuration/nuxt-config
export default defineNuxtConfig({
+
site: { url: blogConfig.site, name: blogConfig.title },
+
telemetry: false,
devtools: { enabled: true },
modules: [
"@nuxt/content",
"@nuxtjs/tailwindcss",
"@tailwindcss/typography",
-
"@nuxt/icon"
+
"@nuxt/icon",
+
"nuxt-og-image"
],
future: {
···
runtimeConfig: {
public: blogConfig
+
},
+
+
ogImage: {
+
fonts: [
+
{
+
name: 'Recoleta',
+
weight: 700,
+
path: '/fonts/recoleta-bold.ttf',
+
}
+
],
},
icon: {
+3
package.json
···
"@nuxt/image": "1.9.0",
"@nuxtjs/tailwindcss": "^6.14.0",
"@tailwindcss/typography": "^0.5.16",
+
"@unhead/vue": "^2.0.5",
"@vueuse/core": "^13.3.0",
"nuxt": "^3.17.4",
+
"nuxt-og-image": "5.1.4",
+
"unstorage": "^1.15.0",
"vue": "^3.5.15",
"vue-router": "^4.5.1"
},
+558 -3
pnpm-lock.yaml
···
'@tailwindcss/typography':
specifier: ^0.5.16
version: 0.5.16(tailwindcss@3.4.17)
+
'@unhead/vue':
+
specifier: ^2.0.5
+
version: 2.0.10(vue@3.5.15(typescript@5.8.3))
'@vueuse/core':
specifier: ^13.3.0
version: 13.3.0(vue@3.5.15(typescript@5.8.3))
nuxt:
specifier: ^3.17.4
version: 3.17.4(@biomejs/biome@1.9.4)(@parcel/watcher@2.5.1)(@types/node@22.15.23)(better-sqlite3@11.10.0)(db0@0.3.2(better-sqlite3@11.10.0))(ioredis@5.6.1)(magicast@0.3.5)(rollup@4.41.1)(terser@5.40.0)(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.23)(jiti@2.4.2)(terser@5.40.0)(yaml@2.8.0))(vue-tsc@2.2.2(typescript@5.8.3))(yaml@2.8.0)
+
nuxt-og-image:
+
specifier: 5.1.4
+
version: 5.1.4(@unhead/vue@2.0.10(vue@3.5.15(typescript@5.8.3)))(magicast@0.3.5)(unstorage@1.16.0(db0@0.3.2(better-sqlite3@11.10.0))(ioredis@5.6.1))(vite@6.3.5(@types/node@22.15.23)(jiti@2.4.2)(terser@5.40.0)(yaml@2.8.0))(vue@3.5.15(typescript@5.8.3))
+
unstorage:
+
specifier: ^1.15.0
+
version: 1.16.0(db0@0.3.2(better-sqlite3@11.10.0))(ioredis@5.6.1)
vue:
specifier: ^3.5.15
version: 3.5.15(typescript@5.8.3)
···
resolution: {integrity: sha512-aQypoot0HPSJa6gDPEPTntc1GT6QINrSbgRlRhadGW2WaYqUK3tK4Bw9SBMZXhmxd3GeAlZjVcODHgiu+THY7A==}
engines: {node: '>=18'}
+
'@resvg/resvg-js-android-arm-eabi@2.6.2':
+
resolution: {integrity: sha512-FrJibrAk6v29eabIPgcTUMPXiEz8ssrAk7TXxsiZzww9UTQ1Z5KAbFJs+Z0Ez+VZTYgnE5IQJqBcoSiMebtPHA==}
+
engines: {node: '>= 10'}
+
cpu: [arm]
+
os: [android]
+
+
'@resvg/resvg-js-android-arm64@2.6.2':
+
resolution: {integrity: sha512-VcOKezEhm2VqzXpcIJoITuvUS/fcjIw5NA/w3tjzWyzmvoCdd+QXIqy3FBGulWdClvp4g+IfUemigrkLThSjAQ==}
+
engines: {node: '>= 10'}
+
cpu: [arm64]
+
os: [android]
+
+
'@resvg/resvg-js-darwin-arm64@2.6.2':
+
resolution: {integrity: sha512-nmok2LnAd6nLUKI16aEB9ydMC6Lidiiq2m1nEBDR1LaaP7FGs4AJ90qDraxX+CWlVuRlvNjyYJTNv8qFjtL9+A==}
+
engines: {node: '>= 10'}
+
cpu: [arm64]
+
os: [darwin]
+
+
'@resvg/resvg-js-darwin-x64@2.6.2':
+
resolution: {integrity: sha512-GInyZLjgWDfsVT6+SHxQVRwNzV0AuA1uqGsOAW+0th56J7Nh6bHHKXHBWzUrihxMetcFDmQMAX1tZ1fZDYSRsw==}
+
engines: {node: '>= 10'}
+
cpu: [x64]
+
os: [darwin]
+
+
'@resvg/resvg-js-linux-arm-gnueabihf@2.6.2':
+
resolution: {integrity: sha512-YIV3u/R9zJbpqTTNwTZM5/ocWetDKGsro0SWp70eGEM9eV2MerWyBRZnQIgzU3YBnSBQ1RcxRZvY/UxwESfZIw==}
+
engines: {node: '>= 10'}
+
cpu: [arm]
+
os: [linux]
+
+
'@resvg/resvg-js-linux-arm64-gnu@2.6.2':
+
resolution: {integrity: sha512-zc2BlJSim7YR4FZDQ8OUoJg5holYzdiYMeobb9pJuGDidGL9KZUv7SbiD4E8oZogtYY42UZEap7dqkkYuA91pg==}
+
engines: {node: '>= 10'}
+
cpu: [arm64]
+
os: [linux]
+
+
'@resvg/resvg-js-linux-arm64-musl@2.6.2':
+
resolution: {integrity: sha512-3h3dLPWNgSsD4lQBJPb4f+kvdOSJHa5PjTYVsWHxLUzH4IFTJUAnmuWpw4KqyQ3NA5QCyhw4TWgxk3jRkQxEKg==}
+
engines: {node: '>= 10'}
+
cpu: [arm64]
+
os: [linux]
+
+
'@resvg/resvg-js-linux-x64-gnu@2.6.2':
+
resolution: {integrity: sha512-IVUe+ckIerA7xMZ50duAZzwf1U7khQe2E0QpUxu5MBJNao5RqC0zwV/Zm965vw6D3gGFUl7j4m+oJjubBVoftw==}
+
engines: {node: '>= 10'}
+
cpu: [x64]
+
os: [linux]
+
+
'@resvg/resvg-js-linux-x64-musl@2.6.2':
+
resolution: {integrity: sha512-UOf83vqTzoYQO9SZ0fPl2ZIFtNIz/Rr/y+7X8XRX1ZnBYsQ/tTb+cj9TE+KHOdmlTFBxhYzVkP2lRByCzqi4jQ==}
+
engines: {node: '>= 10'}
+
cpu: [x64]
+
os: [linux]
+
+
'@resvg/resvg-js-win32-arm64-msvc@2.6.2':
+
resolution: {integrity: sha512-7C/RSgCa+7vqZ7qAbItfiaAWhyRSoD4l4BQAbVDqRRsRgY+S+hgS3in0Rxr7IorKUpGE69X48q6/nOAuTJQxeQ==}
+
engines: {node: '>= 10'}
+
cpu: [arm64]
+
os: [win32]
+
+
'@resvg/resvg-js-win32-ia32-msvc@2.6.2':
+
resolution: {integrity: sha512-har4aPAlvjnLcil40AC77YDIk6loMawuJwFINEM7n0pZviwMkMvjb2W5ZirsNOZY4aDbo5tLx0wNMREp5Brk+w==}
+
engines: {node: '>= 10'}
+
cpu: [ia32]
+
os: [win32]
+
+
'@resvg/resvg-js-win32-x64-msvc@2.6.2':
+
resolution: {integrity: sha512-ZXtYhtUr5SSaBrUDq7DiyjOFJqBVL/dOBN7N/qmi/pO0IgiWW/f/ue3nbvu9joWE5aAKDoIzy/CxsY0suwGosQ==}
+
engines: {node: '>= 10'}
+
cpu: [x64]
+
os: [win32]
+
+
'@resvg/resvg-js@2.6.2':
+
resolution: {integrity: sha512-xBaJish5OeGmniDj9cW5PRa/PtmuVU3ziqrbr5xJj901ZDN4TosrVaNZpEiLZAxdfnhAe7uQ7QFWfjPe9d9K2Q==}
+
engines: {node: '>= 10'}
+
+
'@resvg/resvg-wasm@2.6.2':
+
resolution: {integrity: sha512-FqALmHI8D4o6lk/LRWDnhw95z5eO+eAa6ORjVg09YRR7BkcM6oPHU9uyC0gtQG5vpFLvgpeU4+zEAz2H8APHNw==}
+
engines: {node: '>= 10'}
+
'@rolldown/pluginutils@1.0.0-beta.9':
resolution: {integrity: sha512-e9MeMtVWo186sgvFFJOPGy7/d2j2mZhLJIdVW0C/xDluuOvymEATqz6zKsP0ZmXGzQtqlyjz5sC1sYQUoJG98w==}
···
cpu: [x64]
os: [win32]
+
'@sec-ant/readable-stream@0.4.1':
+
resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==}
+
'@shikijs/core@3.4.2':
resolution: {integrity: sha512-AG8vnSi1W2pbgR2B911EfGqtLE9c4hQBYkv/x7Z+Kt0VxhgQKcW7UNDVYsu9YxwV6u+OJrvdJrMq6DNWoBjihQ==}
···
'@shikijs/vscode-textmate@10.0.2':
resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==}
+
'@shuding/opentype.js@1.4.0-beta.0':
+
resolution: {integrity: sha512-3NgmNyH3l/Hv6EvsWJbsvpcpUba6R8IREQ83nH83cyakCw7uM1arZKNfHwv1Wz6jgqrF/j4x5ELvR6PnK9nTcA==}
+
engines: {node: '>= 8.0.0'}
+
hasBin: true
+
'@sindresorhus/is@4.6.0':
resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==}
engines: {node: '>=10'}
···
'@sindresorhus/merge-streams@2.3.0':
resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==}
+
engines: {node: '>=18'}
+
+
'@sindresorhus/merge-streams@4.0.0':
+
resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==}
engines: {node: '>=18'}
'@socket.io/component-emitter@3.1.2':
···
peerDependencies:
vue: '>=3.5.13'
+
'@unocss/core@66.1.2':
+
resolution: {integrity: sha512-mN9h1hHEuhDcdbI4z74o7UnxlBZYVsJpYcdC1YLWBKROcLYTkuyZ7hgBzpo1FBNox2Bt3JnrSinVDmc44Bxjow==}
+
+
'@unocss/extractor-arbitrary-variants@66.1.2':
+
resolution: {integrity: sha512-F570wH9VYeFTb4r8qgcbN5QpEVIAvFC1zOnrAPUr6B6kbU2YChMXxHP7PHK0AzLHnEr458Pwpzl6hmP6bzxZ8g==}
+
+
'@unocss/preset-mini@66.1.2':
+
resolution: {integrity: sha512-oiDe+VhwZ8B5Z0UGfggtOwgpRZMLtH1RTDFvmJmJEXYYX5BPWknS6wYcQzxy0i/y9ym0xp2QnEaTpGmR7LKdkg==}
+
+
'@unocss/preset-wind3@66.1.2':
+
resolution: {integrity: sha512-S09imGOngAAOXCBCHb3JAtxD1/L7nDWrgEeX6NT0ElDp3X1T6XxUXYJlpjCfcqV/klMoXyYouKvp0YuG9QSgVg==}
+
+
'@unocss/rule-utils@66.1.2':
+
resolution: {integrity: sha512-nn0ehvDh7yyWq2mcBDLVpmMAivjRATUroZ8ETinyN1rmfsGesm71R0d1gV3K+Z6YC7a3+dMLc+/qzI7VK3AG/Q==}
+
engines: {node: '>=14'}
+
'@vercel/nft@0.29.3':
resolution: {integrity: sha512-aVV0E6vJpuvImiMwU1/5QKkw2N96BRFE7mBYGS7FhXUoS6V7SarQ+8tuj33o7ofECz8JtHpmQ9JW+oVzOoB7MA==}
engines: {node: '>=18'}
···
bare-events:
optional: true
+
base64-js@0.0.8:
+
resolution: {integrity: sha512-3XSA2cR/h/73EzlXXdU6YNycmYI7+kicTxks4eJg2g39biHR84slg2+des+p7iHYhbRg/udIS4TD53WabcOUkw==}
+
engines: {node: '>= 0.4'}
+
base64-js@1.5.1:
resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
···
camelcase-css@2.0.1:
resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==}
engines: {node: '>= 6'}
+
+
camelize@1.0.1:
+
resolution: {integrity: sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==}
caniuse-api@3.0.0:
resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==}
···
resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==}
engines: {node: '>=18'}
+
chrome-launcher@1.2.0:
+
resolution: {integrity: sha512-JbuGuBNss258bvGil7FT4HKdC3SC2K7UAEUqiPy3ACS3Yxo3hAW6bvFpCu2HsIJLgTqxgEX6BkujvzZfLpUD0Q==}
+
engines: {node: '>=12.13.0'}
+
hasBin: true
+
citty@0.1.6:
resolution: {integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==}
···
crossws@0.3.5:
resolution: {integrity: sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==}
+
css-background-parser@0.1.0:
+
resolution: {integrity: sha512-2EZLisiZQ+7m4wwur/qiYJRniHX4K5Tc9w93MT3AS0WS1u5kaZ4FKXlOTBhOjc+CgEgPiGY+fX1yWD8UwpEqUA==}
+
+
css-box-shadow@1.0.0-3:
+
resolution: {integrity: sha512-9jaqR6e7Ohds+aWwmhe6wILJ99xYQbfmK9QQB9CcMjDbTxPZjwEmUQpU91OG05Xgm8BahT5fW+svbsQGjS/zPg==}
+
+
css-color-keywords@1.0.0:
+
resolution: {integrity: sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==}
+
engines: {node: '>=4'}
+
css-declaration-sorter@7.2.0:
resolution: {integrity: sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow==}
engines: {node: ^14 || ^16 || >=18}
peerDependencies:
postcss: ^8.0.9
+
css-gradient-parser@0.0.16:
+
resolution: {integrity: sha512-3O5QdqgFRUbXvK1x5INf1YkBz1UKSWqrd63vWsum8MNHDBYD5urm3QtxZbKU259OrEXNM26lP/MPY3d1IGkBgA==}
+
engines: {node: '>=16'}
+
css-select@5.1.0:
resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==}
+
+
css-to-react-native@3.2.0:
+
resolution: {integrity: sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==}
css-tree@2.2.1:
resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==}
···
de-indent@1.0.2:
resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==}
+
+
debug@2.6.9:
+
resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==}
+
peerDependencies:
+
supports-color: '*'
+
peerDependenciesMeta:
+
supports-color:
+
optional: true
debug@3.2.7:
resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==}
···
electron-to-chromium@1.5.159:
resolution: {integrity: sha512-CEvHptWAMV5p6GJ0Lq8aheyvVbfzVrv5mmidu1D3pidoVNkB3tTBsTMVtPJ+rzRK5oV229mCLz9Zj/hNvU8GBA==}
+
emoji-regex-xs@2.0.1:
+
resolution: {integrity: sha512-1QFuh8l7LqUcKe24LsPUNzjrzJQ7pgRwp1QMcZ5MX6mFplk2zQ08NVCM84++1cveaUUYtcCYHmeFEuNg16sU4g==}
+
engines: {node: '>=10.0.0'}
+
emoji-regex@8.0.0:
resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
···
escape-html@1.0.3:
resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==}
+
escape-string-regexp@4.0.0:
+
resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+
engines: {node: '>=10'}
+
escape-string-regexp@5.0.0:
resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==}
engines: {node: '>=12'}
···
resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==}
engines: {node: '>=16.17'}
+
execa@9.6.0:
+
resolution: {integrity: sha512-jpWzZ1ZhwUmeWRhS7Qv3mhpOhLfwI+uAX4e5fOcXqwMR7EcJ0pj2kV1CVzHVMX/LphnKWD3LObjZCoJ71lKpHw==}
+
engines: {node: ^18.19.0 || >=20.5.0}
+
expand-template@2.0.3:
resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==}
engines: {node: '>=6'}
···
resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==}
engines: {node: ^12.20 || >= 14.13}
+
fflate@0.7.4:
+
resolution: {integrity: sha512-5u2V/CDW15QM1XbbgS+0DfPxVB+jUKhWEKuuFuHncbk3tEEqzmoXL+2KyOFuKGqOnmdIy0/davWF1CkuwtibCw==}
+
+
figures@6.1.0:
+
resolution: {integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==}
+
engines: {node: '>=18'}
+
file-uri-to-path@1.0.0:
resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==}
···
resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==}
engines: {node: '>=16'}
+
get-stream@9.0.1:
+
resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==}
+
engines: {node: '>=18'}
+
giget@1.2.5:
resolution: {integrity: sha512-r1ekGw/Bgpi3HLV3h1MRBIlSAdHoIMklpaQ3OQLFcRw9PwAj2rqigvIbg+dBUI51OxVI2jsEtDywDBjSiuf7Ug==}
hasBin: true
···
resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
hasBin: true
+
hex-rgb@4.3.0:
+
resolution: {integrity: sha512-Ox1pJVrDCyGHMG9CFg1tmrRUMRPRsAWYc/PinY0XzJU4K7y7vjNoLKIQ7BR5UJMCxNN8EM1MNDmHWA/B3aZUuw==}
+
engines: {node: '>=6'}
+
hookable@5.5.3:
resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==}
···
human-signals@5.0.0:
resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==}
engines: {node: '>=16.17.0'}
+
+
human-signals@8.0.1:
+
resolution: {integrity: sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==}
+
engines: {node: '>=18.18.0'}
ieee754@1.2.1:
resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
···
image-meta@0.2.1:
resolution: {integrity: sha512-K6acvFaelNxx8wc2VjbIzXKDVB0Khs0QT35U6NkGfTdCmjLNcO2945m7RFNR9/RPVFm48hq7QPzK8uGH18HCGw==}
+
image-size@2.0.2:
+
resolution: {integrity: sha512-IRqXKlaXwgSMAMtpNzZa1ZAe8m+Sa1770Dhk8VkSsP9LS+iHD62Zd8FQKs8fbPiagBE7BzoFX23cxFnwshpV6w==}
+
engines: {node: '>=16.x'}
+
hasBin: true
+
impound@1.0.0:
resolution: {integrity: sha512-8lAJ+1Arw2sMaZ9HE2ZmL5zOcMnt18s6+7Xqgq2aUVy4P1nlzAyPtzCDxsk51KVFwHEEdc6OWvUyqwHwhRYaug==}
···
is-stream@4.0.1:
resolution: {integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==}
+
engines: {node: '>=18'}
+
+
is-unicode-supported@2.1.0:
+
resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==}
engines: {node: '>=18'}
is-url-superb@4.0.0:
···
resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==}
engines: {node: '>= 0.6.3'}
+
lighthouse-logger@2.0.1:
+
resolution: {integrity: sha512-ioBrW3s2i97noEmnXxmUq7cjIcVRjT5HBpAYy8zE11CxU9HqlWHHeRxfeN1tn8F7OEMVPIC9x1f8t3Z7US9ehQ==}
+
lilconfig@3.1.3:
resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==}
engines: {node: '>=14'}
+
+
linebreak@1.1.0:
+
resolution: {integrity: sha512-MHp03UImeVhB7XZtjd0E4n6+3xr5Dq/9xI/5FptGk5FrbDR3zagPa2DS6U8ks/3HjbKWG9Q1M2ufOzxV2qLYSQ==}
lines-and-columns@1.2.4:
resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
···
markdown-table@3.0.4:
resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==}
+
+
marky@1.3.0:
+
resolution: {integrity: sha512-ocnPZQLNpvbedwTy9kNrQEsknEfgvcLMvOtz3sFeWApDq1MXH1TqkCIx58xlpESsfwQOnuBO9beyQuNGzVvuhQ==}
math-intrinsics@1.1.0:
resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==}
···
resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==}
engines: {node: '>=10'}
+
ms@2.0.0:
+
resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==}
+
ms@2.1.3:
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
···
resolution: {integrity: sha512-+e01YjZ9hojroO88dvqiOs/Yh4ff/kbXYcfj70l8KhMpmXITz2GBffT9HqwzFdcTm7iE2C422alG42p7yir2nA==}
hasBin: true
+
nuxt-og-image@5.1.4:
+
resolution: {integrity: sha512-eDZw6+BRdYWMJUq1V6cJp+CdADKbg+jZZCtHo5D1vL1U/7wWM1D2svRn0xKwGrTZqxg9oJalh7fbZ4/37/sszw==}
+
engines: {node: '>=18.0.0'}
+
peerDependencies:
+
'@unhead/vue': ^2.0.5
+
unstorage: ^1.15.0
+
+
nuxt-site-config-kit@3.2.0:
+
resolution: {integrity: sha512-kVBXljR7Py8mz5eL6ZysVMlPRwbVX1Tts66StQRwYSJL/srEL8kr/ZfLW6tQU7pDHihcPH3MDgid2gDTFMY3fg==}
+
+
nuxt-site-config@3.2.0:
+
resolution: {integrity: sha512-o1LDV+eaiP0qgM97RxoX2ost3mzmNmg5D3BmiORXCD9lx9CR5OZKc7nXI0zGsASk3eSVj4iNp0ctyF6afPFTow==}
+
nuxt@3.17.4:
resolution: {integrity: sha512-49tkp7/+QVhuEOFoTDVvNV6Pc5+aI7wWjZHXzLUrt3tlWLPFh0yYbNXOc3kaxir1FuhRQHHyHZ7azCPmGukfFg==}
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0.0}
···
package-manager-detector@1.3.0:
resolution: {integrity: sha512-ZsEbbZORsyHuO00lY1kV3/t72yp6Ysay6Pd17ZAlNGuGwmWDLCJxFpRs0IzfXfj1o4icJOkUEioexFHzyPurSQ==}
+
pako@0.2.9:
+
resolution: {integrity: sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==}
+
+
parse-css-color@0.2.1:
+
resolution: {integrity: sha512-bwS/GGIFV3b6KS4uwpzCFj4w297Yl3uqnSgIPsoQkx7GMLROXfMnWvxfNkL0oh8HVhZA4hvJoEoEIqonfJ3BWg==}
+
parse-entities@4.0.2:
resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==}
···
parse-json@8.3.0:
resolution: {integrity: sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==}
+
engines: {node: '>=18'}
+
+
parse-ms@4.0.0:
+
resolution: {integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==}
engines: {node: '>=18'}
parse-path@7.1.0:
···
pkg-types@2.1.0:
resolution: {integrity: sha512-wmJwA+8ihJixSoHKxZJRBQG1oY8Yr9pGLzRmSsNms0iNWyHHAlZCa7mmKiFR10YPZuz/2k169JiS/inOjBCZ2A==}
+
playwright-core@1.52.0:
+
resolution: {integrity: sha512-l2osTgLXSMeuLZOML9qYODUQoPPnUsKsb5/P6LJ2e6uPKXUdPK5WYhN4z03G+YNbWmGDY4YENauNu4ZKczreHg==}
+
engines: {node: '>=18'}
+
hasBin: true
+
portfinder@1.0.37:
resolution: {integrity: sha512-yuGIEjDAYnnOex9ddMnKZEMFE0CcGo6zbfzDklkmT1m5z734ss6JMzN9rNB3+RR7iS+F10D4/BVIaXOyh8PQKw==}
engines: {node: '>= 10.12'}
···
pretty-bytes@6.1.1:
resolution: {integrity: sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==}
engines: {node: ^14.13.1 || >=16.0.0}
+
+
pretty-ms@9.2.0:
+
resolution: {integrity: sha512-4yf0QO/sllf/1zbZWYnvWw3NxCQwLXKzIj0G849LSufP15BXKM0rbD2Z3wVnkMfjdn/CB0Dpp444gYAACdsplg==}
+
engines: {node: '>=18'}
process-nextick-args@2.0.1:
resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
···
resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==}
engines: {node: '>=10'}
+
satori-html@0.3.2:
+
resolution: {integrity: sha512-wjTh14iqADFKDK80e51/98MplTGfxz2RmIzh0GqShlf4a67+BooLywF17TvJPD6phO0Hxm7Mf1N5LtRYvdkYRA==}
+
+
satori@0.13.1:
+
resolution: {integrity: sha512-FlXblaCRDOONmz4JSIG9lUxSIklBZsMVwfLkvXv0MaHa3H6GWZDZccpcCeLqdQ6RjBkYMSh6zZDxkkBFJ4M61A==}
+
engines: {node: '>=16'}
+
scule@1.3.0:
resolution: {integrity: sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==}
···
sisteransi@1.0.5:
resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==}
+
site-config-stack@3.2.0:
+
resolution: {integrity: sha512-YmHQr5nMfec5ZTtuxK52YVG8nj4DwI68rSsbznuurQ96bIh2bHf5mNPAZnAyDBPpTWRwmWAliWMRD6WFewWGdA==}
+
peerDependencies:
+
vue: ^3
+
skin-tone@2.0.0:
resolution: {integrity: sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA==}
engines: {node: '>=8'}
···
resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
engines: {node: '>=12'}
+
string.prototype.codepointat@0.2.1:
+
resolution: {integrity: sha512-2cBVCj6I4IOvEnjgO/hWqXjqBGsY+zwPmHl12Srk9IXSZ56Jwwmy+66XO5Iut/oQVR7t5ihYdLB0GMa4alEUcg==}
+
string_decoder@1.1.1:
resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==}
···
resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==}
engines: {node: '>=12'}
+
strip-final-newline@4.0.0:
+
resolution: {integrity: sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==}
+
engines: {node: '>=18'}
+
strip-json-comments@2.0.1:
resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==}
engines: {node: '>=0.10.0'}
···
thenify@3.3.1:
resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==}
+
+
tiny-inflate@1.0.3:
+
resolution: {integrity: sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==}
tiny-invariant@1.3.3:
resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==}
···
unicode-emoji-modifier-base@1.0.0:
resolution: {integrity: sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g==}
engines: {node: '>=4'}
+
+
unicode-trie@2.0.0:
+
resolution: {integrity: sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==}
unicorn-magic@0.1.0:
resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==}
···
yocto-queue@1.2.1:
resolution: {integrity: sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==}
engines: {node: '>=12.20'}
+
+
yoctocolors@2.1.1:
+
resolution: {integrity: sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==}
+
engines: {node: '>=18'}
+
+
yoga-wasm-web@0.3.3:
+
resolution: {integrity: sha512-N+d4UJSJbt/R3wqY7Coqs5pcV0aUj2j9IaQ3rNj9bVCLld8tTGKRa2USARjnvZJWVx1NDmQev8EknoczaOQDOA==}
youch-core@0.3.2:
resolution: {integrity: sha512-fusrlIMLeRvTFYLUjJ9KzlGC3N+6MOPJ68HNj/yJv2nz7zq8t4HEviLms2gkdRPUS7F5rZ5n+pYx9r88m6IE1g==}
···
'@poppinss/exception@1.2.1': {}
+
'@resvg/resvg-js-android-arm-eabi@2.6.2':
+
optional: true
+
+
'@resvg/resvg-js-android-arm64@2.6.2':
+
optional: true
+
+
'@resvg/resvg-js-darwin-arm64@2.6.2':
+
optional: true
+
+
'@resvg/resvg-js-darwin-x64@2.6.2':
+
optional: true
+
+
'@resvg/resvg-js-linux-arm-gnueabihf@2.6.2':
+
optional: true
+
+
'@resvg/resvg-js-linux-arm64-gnu@2.6.2':
+
optional: true
+
+
'@resvg/resvg-js-linux-arm64-musl@2.6.2':
+
optional: true
+
+
'@resvg/resvg-js-linux-x64-gnu@2.6.2':
+
optional: true
+
+
'@resvg/resvg-js-linux-x64-musl@2.6.2':
+
optional: true
+
+
'@resvg/resvg-js-win32-arm64-msvc@2.6.2':
+
optional: true
+
+
'@resvg/resvg-js-win32-ia32-msvc@2.6.2':
+
optional: true
+
+
'@resvg/resvg-js-win32-x64-msvc@2.6.2':
+
optional: true
+
+
'@resvg/resvg-js@2.6.2':
+
optionalDependencies:
+
'@resvg/resvg-js-android-arm-eabi': 2.6.2
+
'@resvg/resvg-js-android-arm64': 2.6.2
+
'@resvg/resvg-js-darwin-arm64': 2.6.2
+
'@resvg/resvg-js-darwin-x64': 2.6.2
+
'@resvg/resvg-js-linux-arm-gnueabihf': 2.6.2
+
'@resvg/resvg-js-linux-arm64-gnu': 2.6.2
+
'@resvg/resvg-js-linux-arm64-musl': 2.6.2
+
'@resvg/resvg-js-linux-x64-gnu': 2.6.2
+
'@resvg/resvg-js-linux-x64-musl': 2.6.2
+
'@resvg/resvg-js-win32-arm64-msvc': 2.6.2
+
'@resvg/resvg-js-win32-ia32-msvc': 2.6.2
+
'@resvg/resvg-js-win32-x64-msvc': 2.6.2
+
+
'@resvg/resvg-wasm@2.6.2': {}
+
'@rolldown/pluginutils@1.0.0-beta.9': {}
'@rollup/plugin-alias@5.1.1(rollup@4.41.1)':
···
'@rollup/rollup-win32-x64-msvc@4.41.1':
optional: true
+
+
'@sec-ant/readable-stream@0.4.1': {}
'@shikijs/core@3.4.2':
dependencies:
···
'@shikijs/vscode-textmate@10.0.2': {}
+
'@shuding/opentype.js@1.4.0-beta.0':
+
dependencies:
+
fflate: 0.7.4
+
string.prototype.codepointat: 0.2.1
+
'@sindresorhus/is@4.6.0': {}
'@sindresorhus/is@7.0.1': {}
'@sindresorhus/merge-streams@2.3.0': {}
+
+
'@sindresorhus/merge-streams@4.0.0': {}
'@socket.io/component-emitter@3.1.2': {}
···
'@types/node@22.15.23':
dependencies:
undici-types: 6.21.0
-
optional: true
'@types/normalize-package-data@2.4.4': {}
···
unhead: 2.0.10
vue: 3.5.15(typescript@5.8.3)
+
'@unocss/core@66.1.2': {}
+
+
'@unocss/extractor-arbitrary-variants@66.1.2':
+
dependencies:
+
'@unocss/core': 66.1.2
+
+
'@unocss/preset-mini@66.1.2':
+
dependencies:
+
'@unocss/core': 66.1.2
+
'@unocss/extractor-arbitrary-variants': 66.1.2
+
'@unocss/rule-utils': 66.1.2
+
+
'@unocss/preset-wind3@66.1.2':
+
dependencies:
+
'@unocss/core': 66.1.2
+
'@unocss/preset-mini': 66.1.2
+
'@unocss/rule-utils': 66.1.2
+
+
'@unocss/rule-utils@66.1.2':
+
dependencies:
+
'@unocss/core': 66.1.2
+
magic-string: 0.30.17
+
'@vercel/nft@0.29.3(rollup@4.41.1)':
dependencies:
'@mapbox/node-pre-gyp': 2.0.0
···
bare-events: 2.5.4
optional: true
+
base64-js@0.0.8: {}
+
base64-js@1.5.1: {}
better-sqlite3@11.10.0:
···
camelcase-css@2.0.1: {}
+
camelize@1.0.1: {}
+
caniuse-api@3.0.0:
dependencies:
browserslist: 4.24.5
···
chownr@2.0.0: {}
chownr@3.0.0: {}
+
+
chrome-launcher@1.2.0:
+
dependencies:
+
'@types/node': 22.15.23
+
escape-string-regexp: 4.0.0
+
is-wsl: 2.2.0
+
lighthouse-logger: 2.0.1
+
transitivePeerDependencies:
+
- supports-color
citty@0.1.6:
dependencies:
···
dependencies:
uncrypto: 0.1.3
+
css-background-parser@0.1.0: {}
+
+
css-box-shadow@1.0.0-3: {}
+
+
css-color-keywords@1.0.0: {}
+
css-declaration-sorter@7.2.0(postcss@8.5.3):
dependencies:
postcss: 8.5.3
+
css-gradient-parser@0.0.16: {}
+
css-select@5.1.0:
dependencies:
boolbase: 1.0.0
···
domhandler: 5.0.3
domutils: 3.2.2
nth-check: 2.1.1
+
+
css-to-react-native@3.2.0:
+
dependencies:
+
camelize: 1.0.1
+
css-color-keywords: 1.0.0
+
postcss-value-parser: 4.2.0
css-tree@2.2.1:
dependencies:
···
de-indent@1.0.2: {}
+
debug@2.6.9:
+
dependencies:
+
ms: 2.0.0
+
debug@3.2.7:
dependencies:
ms: 2.1.3
···
electron-to-chromium@1.5.159: {}
+
emoji-regex-xs@2.0.1: {}
+
emoji-regex@8.0.0: {}
emoji-regex@9.2.2: {}
···
escape-html@1.0.3: {}
+
escape-string-regexp@4.0.0: {}
+
escape-string-regexp@5.0.0: {}
escodegen@2.1.0:
···
signal-exit: 4.1.0
strip-final-newline: 3.0.0
+
execa@9.6.0:
+
dependencies:
+
'@sindresorhus/merge-streams': 4.0.0
+
cross-spawn: 7.0.6
+
figures: 6.1.0
+
get-stream: 9.0.1
+
human-signals: 8.0.1
+
is-plain-obj: 4.1.0
+
is-stream: 4.0.1
+
npm-run-path: 6.0.0
+
pretty-ms: 9.2.0
+
signal-exit: 4.1.0
+
strip-final-newline: 4.0.0
+
yoctocolors: 2.1.1
+
expand-template@2.0.3: {}
exsolve@1.0.5: {}
···
dependencies:
node-domexception: 1.0.0
web-streams-polyfill: 3.3.3
+
+
fflate@0.7.4: {}
+
+
figures@6.1.0:
+
dependencies:
+
is-unicode-supported: 2.1.0
file-uri-to-path@1.0.0: {}
···
pump: 3.0.2
get-stream@8.0.1: {}
+
+
get-stream@9.0.1:
+
dependencies:
+
'@sec-ant/readable-stream': 0.4.1
+
is-stream: 4.0.1
giget@1.2.5:
dependencies:
···
he@1.2.0: {}
+
hex-rgb@4.3.0: {}
+
hookable@5.5.3: {}
hosted-git-info@7.0.2:
···
httpxy@0.1.7: {}
human-signals@5.0.0: {}
+
+
human-signals@8.0.1: {}
ieee754@1.2.1: {}
···
image-meta@0.2.1: {}
+
image-size@2.0.2: {}
+
impound@1.0.0:
dependencies:
exsolve: 1.0.5
···
is-stream@4.0.1: {}
+
is-unicode-supported@2.1.0: {}
+
is-url-superb@4.0.0: {}
is-url@1.2.4: {}
···
dependencies:
readable-stream: 2.3.8
+
lighthouse-logger@2.0.1:
+
dependencies:
+
debug: 2.6.9
+
marky: 1.3.0
+
transitivePeerDependencies:
+
- supports-color
+
lilconfig@3.1.3: {}
+
+
linebreak@1.1.0:
+
dependencies:
+
base64-js: 0.0.8
+
unicode-trie: 2.0.0
lines-and-columns@1.2.4: {}
···
source-map-js: 1.2.1
markdown-table@3.0.4: {}
+
+
marky@1.3.0: {}
math-intrinsics@1.1.0: {}
···
mrmime@2.0.1: {}
+
ms@2.0.0: {}
+
ms@2.1.3: {}
muggle-string@0.4.1: {}
···
transitivePeerDependencies:
- magicast
+
nuxt-og-image@5.1.4(@unhead/vue@2.0.10(vue@3.5.15(typescript@5.8.3)))(magicast@0.3.5)(unstorage@1.16.0(db0@0.3.2(better-sqlite3@11.10.0))(ioredis@5.6.1))(vite@6.3.5(@types/node@22.15.23)(jiti@2.4.2)(terser@5.40.0)(yaml@2.8.0))(vue@3.5.15(typescript@5.8.3)):
+
dependencies:
+
'@nuxt/devtools-kit': 2.4.1(magicast@0.3.5)(vite@6.3.5(@types/node@22.15.23)(jiti@2.4.2)(terser@5.40.0)(yaml@2.8.0))
+
'@nuxt/kit': 3.17.4(magicast@0.3.5)
+
'@resvg/resvg-js': 2.6.2
+
'@resvg/resvg-wasm': 2.6.2
+
'@unhead/vue': 2.0.10(vue@3.5.15(typescript@5.8.3))
+
'@unocss/core': 66.1.2
+
'@unocss/preset-wind3': 66.1.2
+
chrome-launcher: 1.2.0
+
consola: 3.4.2
+
defu: 6.1.4
+
execa: 9.6.0
+
image-size: 2.0.2
+
magic-string: 0.30.17
+
mocked-exports: 0.1.1
+
nuxt-site-config: 3.2.0(magicast@0.3.5)(vue@3.5.15(typescript@5.8.3))
+
nypm: 0.6.0
+
ofetch: 1.4.1
+
ohash: 2.0.11
+
pathe: 2.0.3
+
pkg-types: 2.1.0
+
playwright-core: 1.52.0
+
radix3: 1.1.2
+
satori: 0.13.1
+
satori-html: 0.3.2
+
sirv: 3.0.1
+
std-env: 3.9.0
+
strip-literal: 3.0.0
+
ufo: 1.6.1
+
unplugin: 2.3.5
+
unstorage: 1.16.0(db0@0.3.2(better-sqlite3@11.10.0))(ioredis@5.6.1)
+
unwasm: 0.3.9
+
yoga-wasm-web: 0.3.3
+
transitivePeerDependencies:
+
- magicast
+
- supports-color
+
- vite
+
- vue
+
+
nuxt-site-config-kit@3.2.0(magicast@0.3.5)(vue@3.5.15(typescript@5.8.3)):
+
dependencies:
+
'@nuxt/kit': 3.17.4(magicast@0.3.5)
+
pkg-types: 2.1.0
+
site-config-stack: 3.2.0(vue@3.5.15(typescript@5.8.3))
+
std-env: 3.9.0
+
ufo: 1.6.1
+
transitivePeerDependencies:
+
- magicast
+
- vue
+
+
nuxt-site-config@3.2.0(magicast@0.3.5)(vue@3.5.15(typescript@5.8.3)):
+
dependencies:
+
'@nuxt/kit': 3.17.4(magicast@0.3.5)
+
nuxt-site-config-kit: 3.2.0(magicast@0.3.5)(vue@3.5.15(typescript@5.8.3))
+
pathe: 2.0.3
+
pkg-types: 2.1.0
+
sirv: 3.0.1
+
site-config-stack: 3.2.0(vue@3.5.15(typescript@5.8.3))
+
ufo: 1.6.1
+
transitivePeerDependencies:
+
- magicast
+
- vue
+
nuxt@3.17.4(@biomejs/biome@1.9.4)(@parcel/watcher@2.5.1)(@types/node@22.15.23)(better-sqlite3@11.10.0)(db0@0.3.2(better-sqlite3@11.10.0))(ioredis@5.6.1)(magicast@0.3.5)(rollup@4.41.1)(terser@5.40.0)(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.23)(jiti@2.4.2)(terser@5.40.0)(yaml@2.8.0))(vue-tsc@2.2.2(typescript@5.8.3))(yaml@2.8.0):
dependencies:
'@nuxt/cli': 3.25.1(magicast@0.3.5)
···
package-manager-detector@1.3.0: {}
+
pako@0.2.9: {}
+
+
parse-css-color@0.2.1:
+
dependencies:
+
color-name: 1.1.4
+
hex-rgb: 4.3.0
+
parse-entities@4.0.2:
dependencies:
'@types/unist': 2.0.11
···
'@babel/code-frame': 7.27.1
index-to-position: 1.1.0
type-fest: 4.41.0
+
+
parse-ms@4.0.0: {}
parse-path@7.1.0:
dependencies:
···
confbox: 0.2.2
exsolve: 1.0.5
pathe: 2.0.3
+
+
playwright-core@1.52.0: {}
portfinder@1.0.37:
dependencies:
···
pretty-bytes@6.1.1: {}
+
pretty-ms@9.2.0:
+
dependencies:
+
parse-ms: 4.0.0
+
process-nextick-args@2.0.1: {}
process@0.11.10: {}
···
safe-stable-stringify@2.5.0: {}
+
satori-html@0.3.2:
+
dependencies:
+
ultrahtml: 1.6.0
+
+
satori@0.13.1:
+
dependencies:
+
'@shuding/opentype.js': 1.4.0-beta.0
+
css-background-parser: 0.1.0
+
css-box-shadow: 1.0.0-3
+
css-gradient-parser: 0.0.16
+
css-to-react-native: 3.2.0
+
emoji-regex-xs: 2.0.1
+
escape-html: 1.0.3
+
linebreak: 1.1.0
+
parse-css-color: 0.2.1
+
postcss-value-parser: 4.2.0
+
yoga-wasm-web: 0.3.3
+
scule@1.3.0: {}
semver@6.3.1: {}
···
sisteransi@1.0.5: {}
+
site-config-stack@3.2.0(vue@3.5.15(typescript@5.8.3)):
+
dependencies:
+
ufo: 1.6.1
+
vue: 3.5.15(typescript@5.8.3)
+
skin-tone@2.0.0:
dependencies:
unicode-emoji-modifier-base: 1.0.0
···
emoji-regex: 9.2.2
strip-ansi: 7.1.0
+
string.prototype.codepointat@0.2.1: {}
+
string_decoder@1.1.1:
dependencies:
safe-buffer: 5.1.2
···
ansi-regex: 6.1.0
strip-final-newline@3.0.0: {}
+
+
strip-final-newline@4.0.0: {}
strip-json-comments@2.0.1: {}
···
dependencies:
any-promise: 1.3.0
+
tiny-inflate@1.0.3: {}
+
tiny-invariant@1.3.3: {}
tinyexec@0.3.2: {}
···
magic-string: 0.30.17
unplugin: 2.3.5
-
undici-types@6.21.0:
-
optional: true
+
undici-types@6.21.0: {}
unenv@2.0.0-rc.17:
dependencies:
···
hookable: 5.5.3
unicode-emoji-modifier-base@1.0.0: {}
+
+
unicode-trie@2.0.0:
+
dependencies:
+
pako: 0.2.9
+
tiny-inflate: 1.0.3
unicorn-magic@0.1.0: {}
···
ylru@1.4.0: {}
yocto-queue@1.2.1: {}
+
+
yoctocolors@2.1.1: {}
+
+
yoga-wasm-web@0.3.3: {}
youch-core@0.3.2:
dependencies:
public/fonts/recoleta-bold.ttf

This is a binary file and will not be displayed.