From a0f8f812e4a693a042b03037c790304d22f2810e Mon Sep 17 00:00:00 2001
From: bryantgillespie
Date: Thu, 23 Apr 2026 12:04:00 -0400
Subject: [PATCH 01/45] update all dependencies
---
app/app.config.ts | 9 +-
app/app.vue | 4 +-
app/assets/css/main.css | 69 +-
app/components/CopyDocButton.vue | 41 +-
.../{Default.vue => Default.takumi.vue} | 36 +-
app/pages/[...slug].vue | 56 +-
app/pages/tutorials/[category]/[...slug].vue | 36 +-
nuxt.config.ts | 306 +-
package.json | 55 +-
pnpm-lock.yaml | 8891 ++++++++++-------
pnpm-workspace.yaml | 9 +
server/utils/directus-server.ts | 17 +-
12 files changed, 5559 insertions(+), 3970 deletions(-)
rename app/components/OgImage/{Default.vue => Default.takumi.vue} (62%)
create mode 100644 pnpm-workspace.yaml
diff --git a/app/app.config.ts b/app/app.config.ts
index f25479e0c..819d70bfb 100644
--- a/app/app.config.ts
+++ b/app/app.config.ts
@@ -16,9 +16,6 @@ export default defineAppConfig({
wrapper: '[&_pre>code]:!bg-transparent',
},
},
- },
-
- uiPro: {
page: {
slots: {
root: 'lg:gap-8',
@@ -190,11 +187,13 @@ export default defineAppConfig({
cta: {
cloud: {
link: 'https://directus.cloud',
- description: 'Everything you need to start building. Provisioned in 90 seconds.',
+ description:
+ 'Everything you need to start building. Provisioned in 90 seconds.',
cta: 'Get Started',
},
newsletter: {
- description: 'Get once-a-month release notes & real‑world code tips...no fluff. 🐰',
+ description:
+ 'Get once-a-month release notes & real‑world code tips...no fluff. 🐰',
form: {
hsPortal: 20534155,
hsForm: 'd57a69e4-6f43-4768-a600-5f7d30306260',
diff --git a/app/app.vue b/app/app.vue
index 7f157c5a7..84522c811 100644
--- a/app/app.vue
+++ b/app/app.vue
@@ -7,8 +7,8 @@ const { data: navigation } = useAsyncData('content-navigation', () => queryColle
provide('openapi', spec);
provide('navigation', navigation as Ref);
-defineOgImage({
- url: '/og-image.png',
+defineOgImage('Default', {
+ title: 'Directus Docs',
});
diff --git a/app/assets/css/main.css b/app/assets/css/main.css
index 9705e77a5..33c2e95f0 100644
--- a/app/assets/css/main.css
+++ b/app/assets/css/main.css
@@ -1,37 +1,35 @@
@import "tailwindcss";
-@import "@nuxt/ui-pro";
+@import "@nuxt/ui";
@source "../../../content/**/*";
-
@theme static {
- --font-sans: 'Inter', sans-serif;
- --font-display: 'Poppins', sans-serif;
-
- --color-purple-50: #f3f2ff;
- --color-purple-100: #e9e8ff;
- --color-purple-200: #d6d4ff;
- --color-purple-300: #b8b1ff;
- --color-purple-400: #9585ff;
- --color-purple-500: #6644ff;
- --color-purple-600: #6030f7;
- --color-purple-700: #531ee3;
- --color-purple-800: #4418bf;
- --color-purple-900: #39169c;
- --color-purple-950: #210b6a;
+ --font-sans: "Inter", sans-serif;
+ --font-display: "Poppins", sans-serif;
+ --color-purple-50: #f3f2ff;
+ --color-purple-100: #e9e8ff;
+ --color-purple-200: #d6d4ff;
+ --color-purple-300: #b8b1ff;
+ --color-purple-400: #9585ff;
+ --color-purple-500: #6644ff;
+ --color-purple-600: #6030f7;
+ --color-purple-700: #531ee3;
+ --color-purple-800: #4418bf;
+ --color-purple-900: #39169c;
+ --color-purple-950: #210b6a;
- --color-pink-50: #fef1fa;
- --color-pink-100: #fee5f6;
- --color-pink-200: #feccee;
- --color-pink-300: #ff99dd;
- --color-pink-400: #fe68c9;
- --color-pink-500: #f83cb0;
- --color-pink-600: #e81a8f;
- --color-pink-700: #ca0c72;
- --color-pink-800: #a70d5e;
- --color-pink-900: #8b1050;
- --color-pink-950: #55022d;
+ --color-pink-50: #fef1fa;
+ --color-pink-100: #fee5f6;
+ --color-pink-200: #feccee;
+ --color-pink-300: #ff99dd;
+ --color-pink-400: #fe68c9;
+ --color-pink-500: #f83cb0;
+ --color-pink-600: #e81a8f;
+ --color-pink-700: #ca0c72;
+ --color-pink-800: #a70d5e;
+ --color-pink-900: #8b1050;
+ --color-pink-950: #55022d;
--diff-red: rgba(244, 63, 94, 0.2);
--diff-green: rgba(16, 185, 129, 0.2);
@@ -46,13 +44,13 @@
color utility to any element that depends on these defaults.
*/
@layer base {
- *,
- ::after,
- ::before,
- ::backdrop,
- ::file-selector-button {
- border-color: var(--color-gray-200, currentcolor);
- }
+ *,
+ ::after,
+ ::before,
+ ::backdrop,
+ ::file-selector-button {
+ border-color: var(--color-gray-200, currentcolor);
+ }
}
button,
@@ -64,13 +62,12 @@ button,
cursor: default;
}
-
html {
scroll-behavior: smooth;
}
pre {
- >code {
+ > code {
& .line.diff.remove {
background-color: var(--diff-red);
opacity: 0.7;
diff --git a/app/components/CopyDocButton.vue b/app/components/CopyDocButton.vue
index 7245c7bc0..d1a00dbcc 100644
--- a/app/components/CopyDocButton.vue
+++ b/app/components/CopyDocButton.vue
@@ -20,11 +20,14 @@ const items = [
description: 'View this page as plain text',
icon: 'material-symbols:markdown-outline',
onSelect: () => {
- navigateTo(`https://github.com/directus/docs/raw/refs/heads/main/content/${props.page?.stem}.md`, {
- open: {
- target: '_blank',
+ navigateTo(
+ `https://github.com/directus/docs/raw/refs/heads/main/content/${props.page?.stem}.md`,
+ {
+ open: {
+ target: '_blank',
+ },
},
- });
+ );
},
},
{
@@ -32,11 +35,14 @@ const items = [
icon: 'i-simple-icons:openai',
target: '_blank',
onSelect() {
- navigateTo(`https://chatgpt.com/?hints=search&q=${encodeURIComponent(`Read ${window.location.href} so I can ask questions about it.`)}`, {
- open: {
- target: '_blank',
+ navigateTo(
+ `https://chatgpt.com/?hints=search&q=${encodeURIComponent(`Read ${window.location.href} so I can ask questions about it.`)}`,
+ {
+ open: {
+ target: '_blank',
+ },
},
- });
+ );
},
},
{
@@ -44,11 +50,14 @@ const items = [
icon: 'i-simple-icons:anthropic',
target: '_blank',
onSelect() {
- navigateTo(`https://claude.ai/new?q=${encodeURIComponent(`Read ${window.location.href} so I can ask questions about it.`)}`, {
- open: {
- target: '_blank',
+ navigateTo(
+ `https://claude.ai/new?q=${encodeURIComponent(`Read ${window.location.href} so I can ask questions about it.`)}`,
+ {
+ open: {
+ target: '_blank',
+ },
},
- });
+ );
},
},
];
@@ -70,7 +79,7 @@ async function copyPage() {
-
+
-
+
-
+
diff --git a/app/components/OgImage/Default.vue b/app/components/OgImage/Default.takumi.vue
similarity index 62%
rename from app/components/OgImage/Default.vue
rename to app/components/OgImage/Default.takumi.vue
index a810428b6..31a91dbab 100644
--- a/app/components/OgImage/Default.vue
+++ b/app/components/OgImage/Default.takumi.vue
@@ -1,23 +1,25 @@
@@ -29,6 +31,9 @@ defineProps();
height: 100%;
overflow: hidden;
background-color: #000000;
+ background-image: url('/docs/og-image.png');
+ background-size: 1200px 600px;
+ background-repeat: no-repeat;
font-family: 'Poppins';
padding: 115px 75px 100px 75px;
"
@@ -42,7 +47,7 @@ defineProps();
"
>
();
color: rgba(255, 255, 255, 0.75);
font-family: 'Fira Mono';
font-size: 28px;
- font-style: normal;
font-weight: 500;
line-height: 100%;
"
@@ -60,15 +64,29 @@ defineProps();
{{ truncate(title, 70) }}
+
+ {{ truncate(description, 140) }}
+
diff --git a/app/pages/[...slug].vue b/app/pages/[...slug].vue
index 0c4247e3a..925490584 100644
--- a/app/pages/[...slug].vue
+++ b/app/pages/[...slug].vue
@@ -1,7 +1,7 @@
-
+
-
+
@@ -45,10 +62,7 @@ const { data: surround } = await useAsyncData(`${route.path}-surround`, () => qu
class="content"
prose
>
-
+
@@ -58,13 +72,13 @@ const { data: surround } = await useAsyncData(`${route.path}-surround`, () => qu
diff --git a/app/pages/tutorials/[category]/[...slug].vue b/app/pages/tutorials/[category]/[...slug].vue
index 6a220df29..ac5801518 100644
--- a/app/pages/tutorials/[category]/[...slug].vue
+++ b/app/pages/tutorials/[category]/[...slug].vue
@@ -1,6 +1,9 @@
@@ -34,9 +56,7 @@ const breadcrumb = computed(() => mapContentNavigation(findPageBreadcrumb(naviga
:description="page!.description"
>
-
+
/
diff --git a/nuxt.config.ts b/nuxt.config.ts
index 9cf815a6e..db0038ee1 100644
--- a/nuxt.config.ts
+++ b/nuxt.config.ts
@@ -1,15 +1,14 @@
// https://nuxt.com/docs/api/configuration/nuxt-config
export default defineNuxtConfig({
-
modules: [
'@nuxt/eslint',
- '@nuxt/ui-pro',
+ '@nuxt/ui',
'nuxt-llms',
'@nuxt/content',
'@nuxt/scripts',
'@nuxtjs/seo',
'@vueuse/nuxt',
- ...((process.env.ALGOLIA_APPLICATION_ID && process.env.ALGOLIA_API_KEY)
+ ...(process.env.ALGOLIA_APPLICATION_ID && process.env.ALGOLIA_API_KEY
? ['@nuxtjs/algolia']
: []),
],
@@ -22,15 +21,13 @@ export default defineNuxtConfig({
baseURL: '/docs',
},
- css: [
- '~/assets/css/main.css',
- '~/assets/css/algolia.css',
- ],
+ css: ['~/assets/css/main.css', '~/assets/css/algolia.css'],
site: {
url: 'https://directus.io',
name: 'Directus Docs',
- description: 'Explore our resources and powerful data engine to build your projects confidently.',
+ description:
+ 'Explore our resources and powerful data engine to build your projects confidently.',
defaultLocale: 'en-US',
},
@@ -90,10 +87,95 @@ export default defineNuxtConfig({
},
},
+ mdc: {
+ highlight: {
+ noApiRoute: false,
+ },
+ },
+
+ runtimeConfig: {
+ public: {
+ scripts: {
+ googleTagManager: {
+ id: process.env.GOOGLE_TAG_MANAGER_ID!,
+ },
+ },
+ },
+ directusUrl: process.env.DIRECTUS_URL,
+ },
+
+ build: {
+ transpile: ['shiki'],
+ },
+
+ future: {
+ compatibilityVersion: 4,
+ },
+
+ compatibilityDate: '2024-11-01',
+
+ nitro: {
+ compressPublicAssets: false,
+ prerender: {
+ routes: ['/'],
+
+ crawlLinks: true,
+
+ concurrency: 3,
+ retry: 2,
+ retryDelay: 1000,
+ },
+ },
+
+ algolia: {
+ docSearch: {
+ indexName: 'directus_unified',
+ },
+ },
+
+ eslint: {
+ config: {
+ stylistic: {
+ indent: 'tab',
+ semi: true,
+ quotes: 'single',
+ },
+ },
+ },
+
+ fonts: {
+ families: [
+ { name: 'Inter', weights: [400, 500, 600, 700], global: true },
+ { name: 'Poppins', weights: [400, 500, 600], global: true },
+ { name: 'Fira Mono', weights: [400, 500, 600], global: true },
+ ],
+ },
+
+ icon: {
+ customCollections: [
+ {
+ prefix: 'directus',
+ dir: './app/assets/icons/products',
+ },
+ ],
+ clientBundle: {
+ scan: true,
+ includeCustomCollections: true,
+ },
+ },
+
+ linkChecker: {
+ skipInspections: [
+ // Skip absolute site urls because of our routing setup between the docs and the main site
+ 'absolute-site-urls',
+ ],
+ },
+
llms: {
domain: 'https://directus.io/docs',
title: 'Directus Documentation',
- description: 'Directus is a real-time API and no-code Data Studio for managing any SQL database. It provides REST and GraphQL APIs, granular access control, authentication, file storage, automations, realtime via WebSockets, analytics dashboards, AI integration, and a full extension system. The Data Studio is a web application for non-technical users to browse, manage, and visualize data without writing code.',
+ description:
+ 'Directus is a real-time API and no-code Data Studio for managing any SQL database. It provides REST and GraphQL APIs, granular access control, authentication, file storage, automations, realtime via WebSockets, analytics dashboards, AI integration, and a full extension system. The Data Studio is a web application for non-technical users to browse, manage, and visualize data without writing code.',
full: {
title: 'Complete Directus Documentation',
description: 'All Directus documentation pages in a single file.',
@@ -101,111 +183,163 @@ export default defineNuxtConfig({
sections: [
{
title: 'Getting Started',
- description: 'Introduction to Directus concepts, project creation, first steps with the API, authentication, file uploads, automations, and realtime.',
+ description:
+ 'Introduction to Directus concepts, project creation, first steps with the API, authentication, file uploads, automations, and realtime.',
contentCollection: 'content',
- contentFilters: [{ field: 'path', operator: 'LIKE', value: '/getting-started%' }],
+ contentFilters: [
+ { field: 'path', operator: 'LIKE', value: '/getting-started%' },
+ ],
},
{
title: 'Guides - Data Model',
- description: 'Creating and configuring collections, fields, relationships, and interfaces in Directus.',
+ description:
+ 'Creating and configuring collections, fields, relationships, and interfaces in Directus.',
contentCollection: 'content',
- contentFilters: [{ field: 'path', operator: 'LIKE', value: '/guides/data-model%' }],
+ contentFilters: [
+ { field: 'path', operator: 'LIKE', value: '/guides/data-model%' },
+ ],
},
{
title: 'Guides - Content',
- description: 'Browsing, filtering, editing, importing/exporting, and managing items in the Data Studio. Includes live preview, content versioning, translations, visual editor, and collaborative editing.',
+ description:
+ 'Browsing, filtering, editing, importing/exporting, and managing items in the Data Studio. Includes live preview, content versioning, translations, visual editor, and collaborative editing.',
contentCollection: 'content',
- contentFilters: [{ field: 'path', operator: 'LIKE', value: '/guides/content%' }],
+ contentFilters: [
+ { field: 'path', operator: 'LIKE', value: '/guides/content%' },
+ ],
},
{
title: 'Guides - Auth',
- description: 'Access tokens, cookie-based auth, access control policies, user creation, email login, two-factor authentication, accountability, and SSO configuration.',
+ description:
+ 'Access tokens, cookie-based auth, access control policies, user creation, email login, two-factor authentication, accountability, and SSO configuration.',
contentCollection: 'content',
- contentFilters: [{ field: 'path', operator: 'LIKE', value: '/guides/auth%' }],
+ contentFilters: [
+ { field: 'path', operator: 'LIKE', value: '/guides/auth%' },
+ ],
},
{
title: 'Guides - Connect',
- description: 'Using the Directus REST and GraphQL APIs — authentication mechanics, filter operators, query parameters, pagination, relational queries, error handling, and the JavaScript/TypeScript SDK.',
+ description:
+ 'Using the Directus REST and GraphQL APIs — authentication mechanics, filter operators, query parameters, pagination, relational queries, error handling, and the JavaScript/TypeScript SDK.',
contentCollection: 'content',
- contentFilters: [{ field: 'path', operator: 'LIKE', value: '/guides/connect%' }],
+ contentFilters: [
+ { field: 'path', operator: 'LIKE', value: '/guides/connect%' },
+ ],
},
{
title: 'Guides - Files',
- description: 'Uploading, managing, transforming, and controlling access to files and assets.',
+ description:
+ 'Uploading, managing, transforming, and controlling access to files and assets.',
contentCollection: 'content',
- contentFilters: [{ field: 'path', operator: 'LIKE', value: '/guides/files%' }],
+ contentFilters: [
+ { field: 'path', operator: 'LIKE', value: '/guides/files%' },
+ ],
},
{
title: 'Guides - Automate',
- description: 'Building event-driven automations with Flows, triggers, data chains, and operations.',
+ description:
+ 'Building event-driven automations with Flows, triggers, data chains, and operations.',
contentCollection: 'content',
- contentFilters: [{ field: 'path', operator: 'LIKE', value: '/guides/automate%' }],
+ contentFilters: [
+ { field: 'path', operator: 'LIKE', value: '/guides/automate%' },
+ ],
},
{
title: 'Guides - Realtime',
- description: 'WebSocket authentication, subscriptions, and real-time data actions.',
+ description:
+ 'WebSocket authentication, subscriptions, and real-time data actions.',
contentCollection: 'content',
- contentFilters: [{ field: 'path', operator: 'LIKE', value: '/guides/realtime%' }],
+ contentFilters: [
+ { field: 'path', operator: 'LIKE', value: '/guides/realtime%' },
+ ],
},
{
title: 'Guides - Insights',
- description: 'Building no-code analytics dashboards with configurable panels and visualizations.',
+ description:
+ 'Building no-code analytics dashboards with configurable panels and visualizations.',
contentCollection: 'content',
- contentFilters: [{ field: 'path', operator: 'LIKE', value: '/guides/insights%' }],
+ contentFilters: [
+ { field: 'path', operator: 'LIKE', value: '/guides/insights%' },
+ ],
},
{
title: 'Guides - Extensions',
- description: 'Extending Directus with custom interfaces, displays, layouts, panels, modules, endpoints, hooks, operations, and bundles. Includes the Marketplace and CLI.',
+ description:
+ 'Extending Directus with custom interfaces, displays, layouts, panels, modules, endpoints, hooks, operations, and bundles. Includes the Marketplace and CLI.',
contentCollection: 'content',
- contentFilters: [{ field: 'path', operator: 'LIKE', value: '/guides/extensions%' }],
+ contentFilters: [
+ { field: 'path', operator: 'LIKE', value: '/guides/extensions%' },
+ ],
},
{
title: 'Guides - AI',
- description: 'Using the built-in AI Assistant in the Data Studio and connecting external AI tools via the MCP server.',
+ description:
+ 'Using the built-in AI Assistant in the Data Studio and connecting external AI tools via the MCP server.',
contentCollection: 'content',
- contentFilters: [{ field: 'path', operator: 'LIKE', value: '/guides/ai%' }],
+ contentFilters: [
+ { field: 'path', operator: 'LIKE', value: '/guides/ai%' },
+ ],
},
{
title: 'Guides - Integrations',
- description: 'Connecting Directus with third-party services including n8n, Clay, Zapier, and Vercel.',
+ description:
+ 'Connecting Directus with third-party services including n8n, Clay, Zapier, and Vercel.',
contentCollection: 'content',
- contentFilters: [{ field: 'path', operator: 'LIKE', value: '/guides/integrations%' }],
+ contentFilters: [
+ { field: 'path', operator: 'LIKE', value: '/guides/integrations%' },
+ ],
},
{
title: 'Cloud',
- description: 'Directus Cloud managed hosting — project creation, team management, configuration, custom domains, billing, and migration.',
+ description:
+ 'Directus Cloud managed hosting — project creation, team management, configuration, custom domains, billing, and migration.',
contentCollection: 'content',
contentFilters: [{ field: 'path', operator: 'LIKE', value: '/cloud%' }],
},
{
title: 'Self-Hosting',
- description: 'Running Directus on your own infrastructure — requirements, deployment, upgrades, and including extensions.',
+ description:
+ 'Running Directus on your own infrastructure — requirements, deployment, upgrades, and including extensions.',
contentCollection: 'content',
- contentFilters: [{ field: 'path', operator: 'LIKE', value: '/self-hosting%' }],
+ contentFilters: [
+ { field: 'path', operator: 'LIKE', value: '/self-hosting%' },
+ ],
},
{
title: 'Configuration',
- description: 'Environment variables and server configuration — database, caching, auth/SSO, email, files, flows, AI, logging, security limits, realtime, theming, and more.',
+ description:
+ 'Environment variables and server configuration — database, caching, auth/SSO, email, files, flows, AI, logging, security limits, realtime, theming, and more.',
contentCollection: 'content',
- contentFilters: [{ field: 'path', operator: 'LIKE', value: '/configuration%' }],
+ contentFilters: [
+ { field: 'path', operator: 'LIKE', value: '/configuration%' },
+ ],
},
{
title: 'Community',
- description: 'Contributing to Directus — code contributions, feature requests, documentation, code of conduct, bug reporting, and community programs.',
+ description:
+ 'Contributing to Directus — code contributions, feature requests, documentation, code of conduct, bug reporting, and community programs.',
contentCollection: 'content',
- contentFilters: [{ field: 'path', operator: 'LIKE', value: '/community%' }],
+ contentFilters: [
+ { field: 'path', operator: 'LIKE', value: '/community%' },
+ ],
},
{
title: 'Releases',
- description: 'Release process, monthly changelog, and breaking changes for v10 and v11.',
+ description:
+ 'Release process, monthly changelog, and breaking changes for v10 and v11.',
contentCollection: 'content',
- contentFilters: [{ field: 'path', operator: 'LIKE', value: '/releases%' }],
+ contentFilters: [
+ { field: 'path', operator: 'LIKE', value: '/releases%' },
+ ],
},
{
title: 'Tutorials',
- description: 'Step-by-step guides and practical examples covering projects, tips and tricks, migrations, extensions, self-hosting, and workflows.',
+ description:
+ 'Step-by-step guides and practical examples covering projects, tips and tricks, migrations, extensions, self-hosting, and workflows.',
contentCollection: 'content',
- contentFilters: [{ field: 'path', operator: 'LIKE', value: '/tutorials%' }],
+ contentFilters: [
+ { field: 'path', operator: 'LIKE', value: '/tutorials%' },
+ ],
},
],
notes: [
@@ -216,82 +350,7 @@ export default defineNuxtConfig({
],
},
- mdc: {
- highlight: {
- noApiRoute: false,
- },
- },
-
- runtimeConfig: {
- public: {
- scripts: {
- googleTagManager: {
- id: process.env.GOOGLE_TAG_MANAGER_ID!,
- },
- },
- },
- directusUrl: process.env.DIRECTUS_URL,
- },
-
- build: {
- transpile: ['shiki'],
- },
-
- future: {
- compatibilityVersion: 4,
- },
-
- compatibilityDate: '2024-11-01',
-
- nitro: {
- compressPublicAssets: false,
- prerender: {
- routes: [
- '/',
- ],
-
- crawlLinks: true,
-
- concurrency: 3,
- retry: 2,
- retryDelay: 1000,
- },
- },
-
- algolia: {
- docSearch: {
- indexName: 'directus_unified',
- },
- },
-
- eslint: {
- config: {
- stylistic: {
- indent: 'tab',
- semi: true,
- },
- },
- },
-
- icon: {
- customCollections: [
- {
- prefix: 'directus',
- dir: './app/assets/icons/products',
- },
- ],
- clientBundle: {
- scan: true,
- includeCustomCollections: true,
- },
- },
-
- linkChecker: {
- skipInspections: [
- // Skip absolute site urls because of our routing setup between the docs and the main site
- 'absolute-site-urls',
- ],
- },
+ ogImage: { zeroRuntime: true },
// Disable PostHog in development
posthog: {
@@ -307,7 +366,12 @@ export default defineNuxtConfig({
scripts: {
registry: {
- googleTagManager: true,
+ googleTagManager: {
+ id: process.env.GOOGLE_TAG_MANAGER_ID,
+ scriptOptions: {
+ trigger: 'onNuxtReady',
+ },
+ },
},
},
});
diff --git a/package.json b/package.json
index 810626d0a..53fa3c391 100644
--- a/package.json
+++ b/package.json
@@ -11,49 +11,42 @@
},
"dependencies": {
"@directus/openapi": "0.3.0",
- "@directus/sdk": "^21.1.0",
- "@docsearch/css": "4.5.4",
- "@docsearch/js": "4.5.4",
+ "@directus/sdk": "^21.2.2",
+ "@docsearch/css": "4.6.2",
+ "@docsearch/js": "4.6.2",
"@iconify-json/heroicons-outline": "1.2.1",
- "@iconify-json/material-symbols": "1.2.54",
- "@iconify-json/simple-icons": "1.2.70",
- "@nuxt/content": "3.11.2",
- "@nuxt/ui-pro": "3.3.7",
+ "@iconify-json/material-symbols": "1.2.68",
+ "@iconify-json/simple-icons": "1.2.79",
+ "@nuxt/content": "3.13.0",
+ "@nuxt/fonts": "0.14.0",
+ "@nuxt/ui": "^4.6.1",
"@nuxtjs/algolia": "1.11.2",
"@nuxtjs/color-mode": "4.0.0",
- "@nuxtjs/seo": "3.4.0",
- "@vueuse/core": "14.2.0",
- "@vueuse/nuxt": "14.2.0",
+ "@nuxtjs/seo": "5.1.3",
+ "@takumi-rs/core": "^1.1.0",
+ "@vueuse/core": "14.2.1",
+ "@vueuse/nuxt": "14.2.1",
"lodash-es": "4.18.1",
- "nuxt": "4.3.1",
+ "nuxt": "4.4.2",
"nuxt-llms": "0.2.0",
"openapi3-ts": "4.5.0",
- "posthog-js": "1.345.0",
- "posthog-node": "5.24.14",
+ "posthog-js": "1.371.2",
+ "posthog-node": "5.29.7",
"sharp": "^0.34.5",
+ "tailwindcss": "^4.2.4",
"ufo": "1.6.3"
},
"devDependencies": {
- "@nuxt/eslint": "1.14.0",
- "@nuxt/scripts": "0.13.2",
+ "@iconify-json/ph": "^1.2.2",
+ "@nuxt/eslint": "1.15.2",
+ "@nuxt/scripts": "1.0.2",
"@types/lodash-es": "4.17.12",
- "typescript": "5.9.3",
- "vue-tsc": "^3.2.4"
+ "typescript": "6.0.3",
+ "vue-tsc": "^3.2.7"
},
"pnpm": {
- "supportedArchitectures": {
- "os": ["current", "linux"],
- "cpu": ["current", "x64"],
- "libc": ["current", "musl"]
- },
"overrides": {
- "reka": "2.3.1",
- "debug": "4.4.1"
- },
- "onlyBuiltDependencies": [
- "better-sqlite3",
- "sharp"
- ]
- },
- "packageManager": "pnpm@10.29.2+sha512.bef43fa759d91fd2da4b319a5a0d13ef7a45bb985a3d7342058470f9d2051a3ba8674e629672654686ef9443ad13a82da2beb9eeb3e0221c87b8154fff9d74b8"
+ "vite": "npm:rolldown-vite@latest"
+ }
+ }
}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 7e12d289d..1e3b366c8 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -5,8 +5,7 @@ settings:
excludeLinksFromLockfile: false
overrides:
- reka: 2.3.1
- debug: 4.4.1
+ vite: npm:rolldown-vite@latest
importers:
@@ -16,50 +15,56 @@ importers:
specifier: 0.3.0
version: 0.3.0
'@directus/sdk':
- specifier: ^21.1.0
- version: 21.1.0
+ specifier: ^21.2.2
+ version: 21.2.2
'@docsearch/css':
- specifier: 4.5.4
- version: 4.5.4
+ specifier: 4.6.2
+ version: 4.6.2
'@docsearch/js':
- specifier: 4.5.4
- version: 4.5.4
+ specifier: 4.6.2
+ version: 4.6.2
'@iconify-json/heroicons-outline':
specifier: 1.2.1
version: 1.2.1
'@iconify-json/material-symbols':
- specifier: 1.2.54
- version: 1.2.54
+ specifier: 1.2.68
+ version: 1.2.68
'@iconify-json/simple-icons':
- specifier: 1.2.70
- version: 1.2.70
+ specifier: 1.2.79
+ version: 1.2.79
'@nuxt/content':
- specifier: 3.11.2
- version: 3.11.2(better-sqlite3@11.10.0)(magicast@0.5.2)(valibot@1.2.0(typescript@5.9.3))
- '@nuxt/ui-pro':
- specifier: 3.3.7
- version: 3.3.7(@babel/parser@7.29.0)(@netlify/blobs@9.1.2)(axios@1.13.5)(change-case@5.4.4)(db0@0.3.4(better-sqlite3@11.10.0))(embla-carousel@8.6.0)(ioredis@5.9.2)(jwt-decode@4.0.0)(magicast@0.5.2)(react@19.2.4)(typescript@5.9.3)(valibot@1.2.0(typescript@5.9.3))(vite@7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2))(vue-router@4.6.4(vue@3.5.28(typescript@5.9.3)))(vue@3.5.28(typescript@5.9.3))(zod@4.3.6)
+ specifier: 3.13.0
+ version: 3.13.0(better-sqlite3@11.10.0)(magicast@0.5.2)(valibot@1.3.1(typescript@6.0.3))
+ '@nuxt/fonts':
+ specifier: 0.14.0
+ version: 0.14.0(@netlify/blobs@9.1.2)(db0@0.3.4(better-sqlite3@11.10.0))(ioredis@5.10.1)(magicast@0.5.2)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
+ '@nuxt/ui':
+ specifier: ^4.6.1
+ version: 4.6.1(@netlify/blobs@9.1.2)(@nuxt/content@3.13.0(better-sqlite3@11.10.0)(magicast@0.5.2)(valibot@1.3.1(typescript@6.0.3)))(@tiptap/extensions@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4))(@tiptap/y-tiptap@3.0.3(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.8)(y-protocols@1.0.7(yjs@13.6.30))(yjs@13.6.30))(axios@1.13.5)(change-case@5.4.4)(db0@0.3.4(better-sqlite3@11.10.0))(embla-carousel@8.6.0)(ioredis@5.10.1)(jwt-decode@4.0.0)(magicast@0.5.2)(tailwindcss@4.2.4)(typescript@6.0.3)(valibot@1.3.1(typescript@6.0.3))(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-router@5.0.6(@vue/compiler-sfc@3.5.33)(vue@3.5.33(typescript@6.0.3)))(vue@3.5.33(typescript@6.0.3))(yjs@13.6.30)(zod@4.3.6)
'@nuxtjs/algolia':
specifier: 1.11.2
- version: 1.11.2(@vue/server-renderer@3.5.28(vue@3.5.28(typescript@5.9.3)))(magicast@0.5.2)(react@19.2.4)(vue@3.5.28(typescript@5.9.3))
+ version: 1.11.2(@vue/server-renderer@3.5.33(vue@3.5.33(typescript@6.0.3)))(magicast@0.5.2)(vue@3.5.33(typescript@6.0.3))
'@nuxtjs/color-mode':
specifier: 4.0.0
version: 4.0.0(magicast@0.5.2)
'@nuxtjs/seo':
- specifier: 3.4.0
- version: 3.4.0(@netlify/blobs@9.1.2)(@unhead/vue@2.1.4(vue@3.5.28(typescript@5.9.3)))(db0@0.3.4(better-sqlite3@11.10.0))(ioredis@5.9.2)(magicast@0.5.2)(rollup@4.57.1)(unhead@2.1.4)(unstorage@1.17.4(@netlify/blobs@9.1.2)(db0@0.3.4(better-sqlite3@11.10.0))(ioredis@5.9.2))(vite@7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2))(vue@3.5.28(typescript@5.9.3))(zod@4.3.6)
+ specifier: 5.1.3
+ version: 5.1.3(6c26335a1a794c77cd272700d66c77ac)
+ '@takumi-rs/core':
+ specifier: ^1.1.0
+ version: 1.1.0
'@vueuse/core':
- specifier: 14.2.0
- version: 14.2.0(vue@3.5.28(typescript@5.9.3))
+ specifier: 14.2.1
+ version: 14.2.1(vue@3.5.33(typescript@6.0.3))
'@vueuse/nuxt':
- specifier: 14.2.0
- version: 14.2.0(magicast@0.5.2)(nuxt@4.3.1(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@25.2.2)(@vue/compiler-sfc@3.5.28)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(eslint@9.28.0(jiti@2.6.1))(ioredis@5.9.2)(lightningcss@1.30.2)(magicast@0.5.2)(optionator@0.9.4)(rollup@4.57.1)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2))(vue-tsc@3.2.4(typescript@5.9.3))(yaml@2.8.2))(vue@3.5.28(typescript@5.9.3))
+ specifier: 14.2.1
+ version: 14.2.1(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))
lodash-es:
specifier: 4.18.1
version: 4.18.1
nuxt:
- specifier: 4.3.1
- version: 4.3.1(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@25.2.2)(@vue/compiler-sfc@3.5.28)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(eslint@9.28.0(jiti@2.6.1))(ioredis@5.9.2)(lightningcss@1.30.2)(magicast@0.5.2)(optionator@0.9.4)(rollup@4.57.1)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2))(vue-tsc@3.2.4(typescript@5.9.3))(yaml@2.8.2)
+ specifier: 4.4.2
+ version: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3)
nuxt-llms:
specifier: 0.2.0
version: 0.2.0(magicast@0.5.2)
@@ -67,61 +72,42 @@ importers:
specifier: 4.5.0
version: 4.5.0
posthog-js:
- specifier: 1.345.0
- version: 1.345.0
+ specifier: 1.371.2
+ version: 1.371.2
posthog-node:
- specifier: 5.24.14
- version: 5.24.14
+ specifier: 5.29.7
+ version: 5.29.7
sharp:
specifier: ^0.34.5
version: 0.34.5
+ tailwindcss:
+ specifier: ^4.2.4
+ version: 4.2.4
ufo:
specifier: 1.6.3
version: 1.6.3
devDependencies:
+ '@iconify-json/ph':
+ specifier: ^1.2.2
+ version: 1.2.2
'@nuxt/eslint':
- specifier: 1.14.0
- version: 1.14.0(@typescript-eslint/utils@8.55.0(eslint@9.28.0(jiti@2.6.1))(typescript@5.9.3))(@vue/compiler-sfc@3.5.28)(eslint@9.28.0(jiti@2.6.1))(magicast@0.5.2)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2))
+ specifier: 1.15.2
+ version: 1.15.2(@typescript-eslint/utils@8.59.0(eslint@9.28.0(jiti@2.6.1))(typescript@6.0.3))(@vue/compiler-sfc@3.5.33)(eslint@9.28.0(jiti@2.6.1))(magicast@0.5.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
'@nuxt/scripts':
- specifier: 0.13.2
- version: 0.13.2(@netlify/blobs@9.1.2)(@types/google.maps@3.58.1)(@unhead/vue@2.1.4(vue@3.5.28(typescript@5.9.3)))(db0@0.3.4(better-sqlite3@11.10.0))(ioredis@5.9.2)(magicast@0.5.2)(typescript@5.9.3)(vue@3.5.28(typescript@5.9.3))
+ specifier: 1.0.2
+ version: 1.0.2(@netlify/blobs@9.1.2)(@types/google.maps@3.58.1)(@unhead/vue@2.1.13(vue@3.5.33(typescript@6.0.3)))(db0@0.3.4(better-sqlite3@11.10.0))(ioredis@5.10.1)(magicast@0.5.2)(posthog-js@1.371.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))
'@types/lodash-es':
specifier: 4.17.12
version: 4.17.12
typescript:
- specifier: 5.9.3
- version: 5.9.3
+ specifier: 6.0.3
+ version: 6.0.3
vue-tsc:
- specifier: ^3.2.4
- version: 3.2.4(typescript@5.9.3)
+ specifier: ^3.2.7
+ version: 3.2.7(typescript@6.0.3)
packages:
- '@ai-sdk/provider-utils@2.2.8':
- resolution: {integrity: sha512-fqhG+4sCVv8x7nFzYnFo19ryhAa3w096Kmc3hWxMQfW/TubPOmt3A6tYZhl4mUfQWWQMsuSkLrtjlWuXBVSGQA==}
- engines: {node: '>=18'}
- peerDependencies:
- zod: ^3.23.8
-
- '@ai-sdk/provider@1.1.3':
- resolution: {integrity: sha512-qZMxYJ0qqX/RfnuIaab+zp8UAeJn/ygXXAffR5I4N0n1IrvA6qBsjc8hXLmBiMV2zoXlifkacF7sEFnYnjBcqg==}
- engines: {node: '>=18'}
-
- '@ai-sdk/ui-utils@1.2.11':
- resolution: {integrity: sha512-3zcwCc8ezzFlwp3ZD15wAPjf2Au4s3vAbKsXQVyhxODHcmu0iyPO2Eua6D/vicq/AUm/BAo60r97O6HU+EI0+w==}
- engines: {node: '>=18'}
- peerDependencies:
- zod: ^3.23.8
-
- '@ai-sdk/vue@1.2.12':
- resolution: {integrity: sha512-uJJ4w6vlj3mmWzjwg+1dqKtyQSVmavO//189eh3D6bUC/G17OWQdV47b67FaOiNkdlDIxormmbUOjlYDQv0TtA==}
- engines: {node: '>=18'}
- peerDependencies:
- vue: ^3.3.4
- peerDependenciesMeta:
- vue:
- optional: true
-
'@algolia/cache-browser-local-storage@4.25.3':
resolution: {integrity: sha512-J0vrnbIYmDIf9d9qQwBXaHn10VoQ/rA+2iBMr/idfsjHhL9I4h2pC9Dj1i0ggDLv9sPajbeVVh0BdC+mDbo7Tw==}
@@ -188,9 +174,6 @@ packages:
'@antfu/install-pkg@1.1.0':
resolution: {integrity: sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==}
- '@antfu/utils@8.1.1':
- resolution: {integrity: sha512-Mex9nXf9vR6AhcXmMrlz/HVgYYZpVGJ6YlPgwl7UnaFpnshXs6EK/oa5Gpf3CzENMjkvEx2tQtntGnb7UtSTOQ==}
-
'@apidevtools/json-schema-ref-parser@14.2.1':
resolution: {integrity: sha512-HmdFw9CDYqM6B25pqGBpNeLCKvGPlIx1EbLrVL0zPvj50CJQUHyBNBw45Muk0kEIkogo1VZvOKHajdMuAzSxRg==}
engines: {node: '>= 20'}
@@ -275,12 +258,12 @@ packages:
resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==}
engines: {node: '>=6.9.0'}
- '@babel/helpers@7.28.6':
- resolution: {integrity: sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==}
+ '@babel/helpers@7.29.2':
+ resolution: {integrity: sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==}
engines: {node: '>=6.9.0'}
- '@babel/parser@7.29.0':
- resolution: {integrity: sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==}
+ '@babel/parser@7.29.2':
+ resolution: {integrity: sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==}
engines: {node: '>=6.0.0'}
hasBin: true
@@ -318,12 +301,12 @@ packages:
resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==}
engines: {node: '>=6.9.0'}
- '@bomb.sh/tab@0.0.12':
- resolution: {integrity: sha512-dYRwg4MqfHR5/BcTy285XOGRhjQFmNpaJBZ0tl2oU+RY595MQ5ApTF6j3OvauPAooHL6cfoOZMySQrOQztT8RQ==}
+ '@bomb.sh/tab@0.0.14':
+ resolution: {integrity: sha512-cHMk2LI430MVoX1unTt9oK1iZzQS4CYDz97MSxKLNErW69T43Z2QLFTpdS/3jVOIKrIADWfuxQ+nQNJkNV7E4w==}
hasBin: true
peerDependencies:
cac: ^6.7.14
- citty: ^0.1.6
+ citty: ^0.1.6 || ^0.2.0
commander: ^13.1.0
peerDependenciesMeta:
cac:
@@ -333,367 +316,226 @@ packages:
commander:
optional: true
- '@capsizecss/metrics@3.6.2':
- resolution: {integrity: sha512-5uL1EIhAlfg0dvWsR1DGfqIsyiPBUsD/qlra15B82Ik28BcH7ScYEHLA4F34fZA0KamlpYcappvt2n1pTuDUfw==}
-
- '@capsizecss/unpack@2.4.0':
- resolution: {integrity: sha512-GrSU71meACqcmIUxPYOJvGKF0yryjN/L1aCuE9DViCTJI7bfkjgYDPD1zbNDcINJwSSP6UaBZY9GAbYDO7re0Q==}
+ '@capsizecss/unpack@4.0.0':
+ resolution: {integrity: sha512-VERIM64vtTP1C4mxQ5thVT9fK0apjPFobqybMtA1UdUujWka24ERHbRHFGmpbbhp73MhV+KSsHQH9C6uOTdEQA==}
+ engines: {node: '>=18'}
- '@clack/core@1.0.0':
- resolution: {integrity: sha512-Orf9Ltr5NeiEuVJS8Rk2XTw3IxNC2Bic3ash7GgYeA8LJ/zmSNpSQ/m5UAhe03lA6KFgklzZ5KTHs4OAMA/SAQ==}
+ '@clack/core@1.2.0':
+ resolution: {integrity: sha512-qfxof/3T3t9DPU/Rj3OmcFyZInceqj/NVtO9rwIuJqCUgh32gwPjpFQQp/ben07qKlhpwq7GzfWpST4qdJ5Drg==}
- '@clack/prompts@1.0.0':
- resolution: {integrity: sha512-rWPXg9UaCFqErJVQ+MecOaWsozjaxol4yjnmYcGNipAWzdaWa2x+VJmKfGq7L0APwBohQOYdHC+9RO4qRXej+A==}
+ '@clack/prompts@1.2.0':
+ resolution: {integrity: sha512-4jmztR9fMqPMjz6H/UZXj0zEmE43ha1euENwkckKKel4XpSfokExPo5AiVStdHSAlHekz4d0CA/r45Ok1E4D3w==}
'@cloudflare/kv-asset-handler@0.4.2':
resolution: {integrity: sha512-SIOD2DxrRRwQ+jgzlXCqoEFiKOFqaPjhnNTGKXSRLvp1HiOvapLaFG2kEr9dYQTYe8rKrd9uvDUzmAITeNyaHQ==}
engines: {node: '>=18.0.0'}
+ '@colordx/core@5.4.0':
+ resolution: {integrity: sha512-zEvOjz+QQJX9l+HS5UO4tXoHSG+WSxPKHJg293k3j3myUWJtZ9P0pJT42WHLNxueyiVQX6BQtCs59i3MgpTMeg==}
+
'@directus/openapi@0.3.0':
resolution: {integrity: sha512-T4VZltB4TWTcZYt1vpPnK/nGP5PRrxORcm1cBZKKQ7p7v05knywMN3nuP1IPqHMP4+Ki4abG0qjHtUxaBPvMSw==}
engines: {node: '>=22', pnpm: '>=10 <11'}
- '@directus/sdk@21.1.0':
- resolution: {integrity: sha512-Ig8zZAQDbc7QMIM54N+x71C04lni9MN9yalNAezjDjFdNknTJzupDY7V5cb+kOJL8GsqDE9Bg8xq8xCmkDVs5A==}
+ '@directus/sdk@21.2.2':
+ resolution: {integrity: sha512-T8UhDG+GY534AqvLpRmycLYZmIYIaUYzu25X3WeUjWuxCvqAiKqXbYUrTRb0A5Mw93vUeVuyqabzvLbBY9AXxQ==}
engines: {node: '>=22'}
- '@docsearch/css@4.5.4':
- resolution: {integrity: sha512-gzO4DJwyM9c4YEPHwaLV1nUCDC2N6yoh0QJj44dce2rcfN71mB+jpu3+F+Y/KMDF1EKV0C3m54leSWsraE94xg==}
+ '@docsearch/css@4.6.2':
+ resolution: {integrity: sha512-fH/cn8BjEEdM2nJdjNMHIvOVYupG6AIDtFVDgIZrNzdCSj4KXr9kd+hsehqsNGYjpUjObeKYKvgy/IwCb1jZYQ==}
- '@docsearch/js@4.5.4':
- resolution: {integrity: sha512-jEBsIklNTevznLZouB0y6SZcaT897gRHnGTzCcH32ibPZRVj/9FyuAM2LUTk61sFdOY79LH4V9rYsIdOe6Wq2g==}
+ '@docsearch/js@4.6.2':
+ resolution: {integrity: sha512-qj1yoxl3y4GKoK7+VM6fq/rQqPnvUmg3IKzJ9x0VzN14QVzdB/SG/J6VfV1BWT5RcPUFxIcVwoY1fwHM2fSRRw==}
- '@dxup/nuxt@0.3.2':
- resolution: {integrity: sha512-2f2usP4oLNsIGjPprvABe3f3GWuIhIDp0169pGLFxTDRI5A4d4sBbGpR+tD9bGZCT+1Btb6Q2GKlyv3LkDCW5g==}
+ '@dxup/nuxt@0.4.1':
+ resolution: {integrity: sha512-gtYffW6OfWNvoLW+XD3Mx/K8uUq08PMGLYJoDxc92EzZAWqR0FhcR5iaLm5r/OxyGTKz+P5f5Y7Aoir9+SjYaw==}
+ peerDependencies:
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
'@dxup/unimport@0.1.2':
resolution: {integrity: sha512-/B8YJGPzaYq1NbsQmwgP8EZqg40NpTw4ZB3suuI0TplbxKHeK94jeaawLmVhCv+YwUnOpiWEz9U6SeThku/8JQ==}
- '@emnapi/core@1.8.1':
- resolution: {integrity: sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg==}
+ '@emnapi/core@1.10.0':
+ resolution: {integrity: sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==}
+
+ '@emnapi/core@1.9.2':
+ resolution: {integrity: sha512-UC+ZhH3XtczQYfOlu3lNEkdW/p4dsJ1r/bP7H8+rhao3TTTMO1ATq/4DdIi23XuGoFY+Cz0JmCbdVl0hz9jZcA==}
+
+ '@emnapi/runtime@1.10.0':
+ resolution: {integrity: sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==}
'@emnapi/runtime@1.8.1':
resolution: {integrity: sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==}
- '@emnapi/wasi-threads@1.1.0':
- resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==}
+ '@emnapi/runtime@1.9.2':
+ resolution: {integrity: sha512-3U4+MIWHImeyu1wnmVygh5WlgfYDtyf0k8AbLhMFxOipihf6nrWC4syIm/SwEeec0mNSafiiNnMJwbza/Is6Lw==}
- '@es-joy/jsdoccomment@0.84.0':
- resolution: {integrity: sha512-0xew1CxOam0gV5OMjh2KjFQZsKL2bByX1+q4j3E73MpYIdyUxcZb/xQct9ccUb+ve5KGUYbCUxyPnYB7RbuP+w==}
+ '@emnapi/wasi-threads@1.2.1':
+ resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==}
+
+ '@es-joy/jsdoccomment@0.86.0':
+ resolution: {integrity: sha512-ukZmRQ81WiTpDWO6D/cTBM7XbrNtutHKvAVnZN/8pldAwLoJArGOvkNyxPTBGsPjsoaQBJxlH+tE2TNA/92Qgw==}
engines: {node: ^20.19.0 || ^22.13.0 || >=24}
'@es-joy/resolve.exports@1.2.0':
resolution: {integrity: sha512-Q9hjxWI5xBM+qW2enxfe8wDKdFWMfd0Z29k5ZJnuBqD/CasY5Zryj09aCA6owbGATWz+39p5uIdaHXpopOcG8g==}
engines: {node: '>=10'}
- '@esbuild/aix-ppc64@0.25.12':
- resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==}
- engines: {node: '>=18'}
- cpu: [ppc64]
- os: [aix]
-
- '@esbuild/aix-ppc64@0.27.3':
- resolution: {integrity: sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==}
+ '@esbuild/aix-ppc64@0.27.7':
+ resolution: {integrity: sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==}
engines: {node: '>=18'}
cpu: [ppc64]
os: [aix]
- '@esbuild/android-arm64@0.25.12':
- resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [android]
-
- '@esbuild/android-arm64@0.27.3':
- resolution: {integrity: sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==}
+ '@esbuild/android-arm64@0.27.7':
+ resolution: {integrity: sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==}
engines: {node: '>=18'}
cpu: [arm64]
os: [android]
- '@esbuild/android-arm@0.25.12':
- resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==}
- engines: {node: '>=18'}
- cpu: [arm]
- os: [android]
-
- '@esbuild/android-arm@0.27.3':
- resolution: {integrity: sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==}
+ '@esbuild/android-arm@0.27.7':
+ resolution: {integrity: sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==}
engines: {node: '>=18'}
cpu: [arm]
os: [android]
- '@esbuild/android-x64@0.25.12':
- resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [android]
-
- '@esbuild/android-x64@0.27.3':
- resolution: {integrity: sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==}
+ '@esbuild/android-x64@0.27.7':
+ resolution: {integrity: sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==}
engines: {node: '>=18'}
cpu: [x64]
os: [android]
- '@esbuild/darwin-arm64@0.25.12':
- resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [darwin]
-
- '@esbuild/darwin-arm64@0.27.3':
- resolution: {integrity: sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==}
+ '@esbuild/darwin-arm64@0.27.7':
+ resolution: {integrity: sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==}
engines: {node: '>=18'}
cpu: [arm64]
os: [darwin]
- '@esbuild/darwin-x64@0.25.12':
- resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [darwin]
-
- '@esbuild/darwin-x64@0.27.3':
- resolution: {integrity: sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==}
+ '@esbuild/darwin-x64@0.27.7':
+ resolution: {integrity: sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==}
engines: {node: '>=18'}
cpu: [x64]
os: [darwin]
- '@esbuild/freebsd-arm64@0.25.12':
- resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [freebsd]
-
- '@esbuild/freebsd-arm64@0.27.3':
- resolution: {integrity: sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==}
+ '@esbuild/freebsd-arm64@0.27.7':
+ resolution: {integrity: sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==}
engines: {node: '>=18'}
cpu: [arm64]
os: [freebsd]
- '@esbuild/freebsd-x64@0.25.12':
- resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [freebsd]
-
- '@esbuild/freebsd-x64@0.27.3':
- resolution: {integrity: sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==}
+ '@esbuild/freebsd-x64@0.27.7':
+ resolution: {integrity: sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==}
engines: {node: '>=18'}
cpu: [x64]
os: [freebsd]
- '@esbuild/linux-arm64@0.25.12':
- resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [linux]
-
- '@esbuild/linux-arm64@0.27.3':
- resolution: {integrity: sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==}
+ '@esbuild/linux-arm64@0.27.7':
+ resolution: {integrity: sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==}
engines: {node: '>=18'}
cpu: [arm64]
os: [linux]
- '@esbuild/linux-arm@0.25.12':
- resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==}
- engines: {node: '>=18'}
- cpu: [arm]
- os: [linux]
-
- '@esbuild/linux-arm@0.27.3':
- resolution: {integrity: sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==}
+ '@esbuild/linux-arm@0.27.7':
+ resolution: {integrity: sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==}
engines: {node: '>=18'}
cpu: [arm]
os: [linux]
- '@esbuild/linux-ia32@0.25.12':
- resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==}
- engines: {node: '>=18'}
- cpu: [ia32]
- os: [linux]
-
- '@esbuild/linux-ia32@0.27.3':
- resolution: {integrity: sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==}
+ '@esbuild/linux-ia32@0.27.7':
+ resolution: {integrity: sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==}
engines: {node: '>=18'}
cpu: [ia32]
os: [linux]
- '@esbuild/linux-loong64@0.25.12':
- resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==}
- engines: {node: '>=18'}
- cpu: [loong64]
- os: [linux]
-
- '@esbuild/linux-loong64@0.27.3':
- resolution: {integrity: sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==}
+ '@esbuild/linux-loong64@0.27.7':
+ resolution: {integrity: sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==}
engines: {node: '>=18'}
cpu: [loong64]
os: [linux]
- '@esbuild/linux-mips64el@0.25.12':
- resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==}
- engines: {node: '>=18'}
- cpu: [mips64el]
- os: [linux]
-
- '@esbuild/linux-mips64el@0.27.3':
- resolution: {integrity: sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==}
+ '@esbuild/linux-mips64el@0.27.7':
+ resolution: {integrity: sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==}
engines: {node: '>=18'}
cpu: [mips64el]
os: [linux]
- '@esbuild/linux-ppc64@0.25.12':
- resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==}
- engines: {node: '>=18'}
- cpu: [ppc64]
- os: [linux]
-
- '@esbuild/linux-ppc64@0.27.3':
- resolution: {integrity: sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==}
+ '@esbuild/linux-ppc64@0.27.7':
+ resolution: {integrity: sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==}
engines: {node: '>=18'}
cpu: [ppc64]
os: [linux]
- '@esbuild/linux-riscv64@0.25.12':
- resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==}
- engines: {node: '>=18'}
- cpu: [riscv64]
- os: [linux]
-
- '@esbuild/linux-riscv64@0.27.3':
- resolution: {integrity: sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==}
+ '@esbuild/linux-riscv64@0.27.7':
+ resolution: {integrity: sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==}
engines: {node: '>=18'}
cpu: [riscv64]
os: [linux]
- '@esbuild/linux-s390x@0.25.12':
- resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==}
- engines: {node: '>=18'}
- cpu: [s390x]
- os: [linux]
-
- '@esbuild/linux-s390x@0.27.3':
- resolution: {integrity: sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==}
+ '@esbuild/linux-s390x@0.27.7':
+ resolution: {integrity: sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==}
engines: {node: '>=18'}
cpu: [s390x]
os: [linux]
- '@esbuild/linux-x64@0.25.12':
- resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [linux]
-
- '@esbuild/linux-x64@0.27.3':
- resolution: {integrity: sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==}
+ '@esbuild/linux-x64@0.27.7':
+ resolution: {integrity: sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==}
engines: {node: '>=18'}
cpu: [x64]
os: [linux]
- '@esbuild/netbsd-arm64@0.25.12':
- resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [netbsd]
-
- '@esbuild/netbsd-arm64@0.27.3':
- resolution: {integrity: sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==}
+ '@esbuild/netbsd-arm64@0.27.7':
+ resolution: {integrity: sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==}
engines: {node: '>=18'}
cpu: [arm64]
os: [netbsd]
- '@esbuild/netbsd-x64@0.25.12':
- resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [netbsd]
-
- '@esbuild/netbsd-x64@0.27.3':
- resolution: {integrity: sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==}
+ '@esbuild/netbsd-x64@0.27.7':
+ resolution: {integrity: sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==}
engines: {node: '>=18'}
cpu: [x64]
os: [netbsd]
- '@esbuild/openbsd-arm64@0.25.12':
- resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [openbsd]
-
- '@esbuild/openbsd-arm64@0.27.3':
- resolution: {integrity: sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==}
+ '@esbuild/openbsd-arm64@0.27.7':
+ resolution: {integrity: sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==}
engines: {node: '>=18'}
cpu: [arm64]
os: [openbsd]
- '@esbuild/openbsd-x64@0.25.12':
- resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [openbsd]
-
- '@esbuild/openbsd-x64@0.27.3':
- resolution: {integrity: sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==}
+ '@esbuild/openbsd-x64@0.27.7':
+ resolution: {integrity: sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==}
engines: {node: '>=18'}
cpu: [x64]
os: [openbsd]
- '@esbuild/openharmony-arm64@0.25.12':
- resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [openharmony]
-
- '@esbuild/openharmony-arm64@0.27.3':
- resolution: {integrity: sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==}
+ '@esbuild/openharmony-arm64@0.27.7':
+ resolution: {integrity: sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==}
engines: {node: '>=18'}
cpu: [arm64]
os: [openharmony]
- '@esbuild/sunos-x64@0.25.12':
- resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [sunos]
-
- '@esbuild/sunos-x64@0.27.3':
- resolution: {integrity: sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==}
+ '@esbuild/sunos-x64@0.27.7':
+ resolution: {integrity: sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==}
engines: {node: '>=18'}
cpu: [x64]
os: [sunos]
- '@esbuild/win32-arm64@0.25.12':
- resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [win32]
-
- '@esbuild/win32-arm64@0.27.3':
- resolution: {integrity: sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==}
+ '@esbuild/win32-arm64@0.27.7':
+ resolution: {integrity: sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==}
engines: {node: '>=18'}
cpu: [arm64]
os: [win32]
- '@esbuild/win32-ia32@0.25.12':
- resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==}
- engines: {node: '>=18'}
- cpu: [ia32]
- os: [win32]
-
- '@esbuild/win32-ia32@0.27.3':
- resolution: {integrity: sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==}
+ '@esbuild/win32-ia32@0.27.7':
+ resolution: {integrity: sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==}
engines: {node: '>=18'}
cpu: [ia32]
os: [win32]
- '@esbuild/win32-x64@0.25.12':
- resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [win32]
-
- '@esbuild/win32-x64@0.27.3':
- resolution: {integrity: sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==}
+ '@esbuild/win32-x64@0.27.7':
+ resolution: {integrity: sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==}
engines: {node: '>=18'}
cpu: [x64]
os: [win32]
@@ -708,11 +550,11 @@ packages:
resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==}
engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
- '@eslint/compat@1.4.1':
- resolution: {integrity: sha512-cfO82V9zxxGBxcQDr1lfaYB7wykTa0b00mGa36FrJl7iTFd0Z2cHfEYuxcBRP/iNijCsWsEkA+jzT8hGYmv33w==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ '@eslint/compat@2.0.5':
+ resolution: {integrity: sha512-IbHDbHJfkVNv6xjlET8AIVo/K1NQt7YT4Rp6ok/clyBGcpRx1l6gv0Rq3vBvYfPJIZt6ODf66Zq08FJNDpnzgg==}
+ engines: {node: ^20.19.0 || ^22.13.0 || >=24}
peerDependencies:
- eslint: ^8.40 || 9
+ eslint: ^8.40 || 9 || 10
peerDependenciesMeta:
eslint:
optional: true
@@ -725,15 +567,15 @@ packages:
resolution: {integrity: sha512-u180qk2Um1le4yf0ruXH3PYFeEZeYC3p/4wCTKrr2U1CmGdzGi3KtY0nuPDH48UJxlKCC5RDzbcbh4X0XlqgHg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@eslint/config-helpers@0.5.2':
- resolution: {integrity: sha512-a5MxrdDXEvqnIq+LisyCX6tQMPF/dSJpCfBgBauY+pNZ28yCtSsTvyTYrMhaI+LK26bVyCJfJkT0u8KIj2i1dQ==}
+ '@eslint/config-helpers@0.5.5':
+ resolution: {integrity: sha512-eIJYKTCECbP/nsKaaruF6LW967mtbQbsw4JTtSVkUQc9MneSkbrgPJAbKl9nWr0ZeowV8BfsarBmPpBzGelA2w==}
engines: {node: ^20.19.0 || ^22.13.0 || >=24}
- '@eslint/config-inspector@1.4.2':
- resolution: {integrity: sha512-Ay8QcvV/Tq6YDeoltwZDQsQTrcS5flPkOp4ylk1WdV7L2UGotINwjatjbAIEqBTmP3G0g3Ah8dnuHC8DsnKPYQ==}
+ '@eslint/config-inspector@1.5.0':
+ resolution: {integrity: sha512-YK/VdQ+pibx5pcCI2GPZVO6vFemf/pkB662HuFtc5AA4WLQ9upb3fAoZSjOAYoDJx58qGTDp6xq9ldd/vluNxQ==}
hasBin: true
peerDependencies:
- eslint: ^8.50.0 || ^9.0.0
+ eslint: ^8.50.0 || ^9.0.0 || ^10.0.0
'@eslint/core@0.14.0':
resolution: {integrity: sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==}
@@ -743,12 +585,8 @@ packages:
resolution: {integrity: sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@eslint/core@0.17.0':
- resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
- '@eslint/core@1.1.0':
- resolution: {integrity: sha512-/nr9K9wkr3P1EzFTdFdMoLuo1PmIxjmwvPozwoSodjNBdefGujXQUF93u1DDZpEaTuDvMsIQddsd35BwtrW9Xw==}
+ '@eslint/core@1.2.1':
+ resolution: {integrity: sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ==}
engines: {node: ^20.19.0 || ^22.13.0 || >=24}
'@eslint/eslintrc@3.3.5':
@@ -759,8 +597,8 @@ packages:
resolution: {integrity: sha512-fnqSjGWd/CoIp4EXIxWVK/sHA6DOHN4+8Ix2cX5ycOY7LG0UY8nHCU5pIp2eaE1Mc7Qd8kHspYNzYXT2ojPLzg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@eslint/js@9.39.2':
- resolution: {integrity: sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==}
+ '@eslint/js@9.39.4':
+ resolution: {integrity: sha512-nE7DEIchvtiFTwBw4Lfbu59PG+kCofhjsKaCWzxTpt4lfRjRMqG6uMBzKXuEcyXhOHoUp9riAm7/aWYGhXZ9cw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/object-schema@2.1.7':
@@ -771,34 +609,34 @@ packages:
resolution: {integrity: sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@eslint/plugin-kit@0.4.1':
- resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
'@fastify/busboy@3.2.0':
resolution: {integrity: sha512-m9FVDXU3GT2ITSe0UaMA5rU3QkfC/UXtCU8y0gSN/GugTqtVldOBWIB5V6V3sbmenVZUIpU6f+mPEO2+m5iTaA==}
'@fingerprintjs/botd@2.0.0':
resolution: {integrity: sha512-yhuz23NKEcBDTHmGz/ULrXlGnbHenO+xZmVwuBkuqHUkqvaZ5TAA0kAgcRy4Wyo5dIBdkIf57UXX8/c9UlMLJg==}
- '@floating-ui/core@1.7.4':
- resolution: {integrity: sha512-C3HlIdsBxszvm5McXlB8PeOEWfBhcGBTZGkGlWc2U0KFY5IwG5OQEuQ8rq52DZmcHDlPLd+YFBK+cZcytwIFWg==}
+ '@floating-ui/core@1.7.5':
+ resolution: {integrity: sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==}
+
+ '@floating-ui/dom@1.7.6':
+ resolution: {integrity: sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==}
- '@floating-ui/dom@1.7.5':
- resolution: {integrity: sha512-N0bD2kIPInNHUHehXhMke1rBGs1dwqvC9O9KYMyyjK7iXt7GAhnro7UlcuYcGdS/yYOlq0MAVgrow8IbWJwyqg==}
+ '@floating-ui/utils@0.2.11':
+ resolution: {integrity: sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==}
- '@floating-ui/utils@0.2.10':
- resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==}
+ '@floating-ui/vue@1.1.11':
+ resolution: {integrity: sha512-HzHKCNVxnGS35r9fCHBc3+uCnjw9IWIlCPL683cGgM9Kgj2BiAl8x1mS7vtvP6F9S/e/q4O6MApwSHj8hNLGfw==}
- '@floating-ui/vue@1.1.10':
- resolution: {integrity: sha512-vdf8f6rHnFPPLRsmL4p12wYl+Ux4mOJOkjzKEMYVnwdf7UFdvBtHlLvQyx8iKG5vhPRbDRgZxdtpmyigDPjzYg==}
+ '@humanfs/core@0.19.2':
+ resolution: {integrity: sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==}
+ engines: {node: '>=18.18.0'}
- '@humanfs/core@0.19.1':
- resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==}
+ '@humanfs/node@0.16.8':
+ resolution: {integrity: sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==}
engines: {node: '>=18.18.0'}
- '@humanfs/node@0.16.7':
- resolution: {integrity: sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==}
+ '@humanfs/types@0.15.0':
+ resolution: {integrity: sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==}
engines: {node: '>=18.18.0'}
'@humanwhocodes/module-importer@1.0.1':
@@ -812,20 +650,23 @@ packages:
'@iconify-json/heroicons-outline@1.2.1':
resolution: {integrity: sha512-QNYV4/KsW8Ww9a3B+hxDntS5BwLLbErKpL1V3MkvB8X+ZVTX5VLxjlj8rAEih+GCDWzaiZJOrdO/pagvsuBkXg==}
- '@iconify-json/material-symbols@1.2.54':
- resolution: {integrity: sha512-i2tBZPJeWI/DnvQ3DznodBOBQtZl0swLqyeCZx6yS6qXQ8aMGS4it/JgV3bRrffc3DbdIXGotPQqEBUJaDLqDw==}
+ '@iconify-json/material-symbols@1.2.68':
+ resolution: {integrity: sha512-MGo7A6j+evFoks/kIZAdAKMSKl24ARa19bUvXMw/RVFKuMo2tIc27HZitTuXna858pvhjzMaFq8UrXaKqbQGjA==}
+
+ '@iconify-json/ph@1.2.2':
+ resolution: {integrity: sha512-PgkEZNtqa8hBGjHXQa4pMwZa93hmfu8FUSjs/nv4oUU6yLsgv+gh9nu28Kqi8Fz9CCVu4hj1MZs9/60J57IzFw==}
- '@iconify-json/simple-icons@1.2.70':
- resolution: {integrity: sha512-CYNRCgN6nBTjN4dNkrBCjHXNR2e4hQihdsZUs/afUNFOWLSYjfihca4EFN05rRvDk4Xoy2n8tym6IxBZmcn+Qg==}
+ '@iconify-json/simple-icons@1.2.79':
+ resolution: {integrity: sha512-aNyO7Fd1qej9oQfIyohYFRv0lhQLaZ+6UkK1c1qwax0MDPUOZOdq65MlU500kow97pD/W+b2u1And3e25eE24Q==}
- '@iconify/collections@1.0.648':
- resolution: {integrity: sha512-0365h8NN+PXjUXc32cmaQaulext6S6Jnx1+6XxU5ivzNiQWmMlh6W1BkF9wncH+e48yzL1Tqes2A17WwYieZtw==}
+ '@iconify/collections@1.0.675':
+ resolution: {integrity: sha512-Tosk0Eeh84Tr7vEQbo3fcUTvb0ZGIz04+CJxiGj+Y78qe2CjZP5JnDoWmAowJJcm77NnLGqoN8oxsdukE+xtIw==}
'@iconify/types@2.0.0':
resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==}
- '@iconify/utils@2.3.0':
- resolution: {integrity: sha512-GmQ78prtwYW6EtzXRU1rY+KwOKfz32PD7iJh6Iyqw68GiKuoZ2A6pRtzWONz5VQJbp50mEjXh/7NkumtrAgRKA==}
+ '@iconify/utils@3.1.0':
+ resolution: {integrity: sha512-Zlzem1ZXhI1iHeeERabLNzBHdOa4VhQbqAcOQaMKuTuyZCpwKbC2R4Dd0Zo3g9EAc+Y4fiarO8HIHRAth7+skw==}
'@iconify/vue@5.0.0':
resolution: {integrity: sha512-C+KuEWIF5nSBrobFJhT//JS87OZ++QDORB6f2q2Wm6fl2mueSTpFBeBsveK0KW9hWiZ4mNiPjsh6Zs4jjdROSg==}
@@ -985,22 +826,14 @@ packages:
cpu: [x64]
os: [win32]
- '@internationalized/date@3.11.0':
- resolution: {integrity: sha512-BOx5huLAWhicM9/ZFs84CzP+V3gBW6vlpM02yzsdYC7TGlZJX1OJiEEHcSayF00Z+3jLlm4w79amvSt6RqKN3Q==}
+ '@internationalized/date@3.12.1':
+ resolution: {integrity: sha512-6IedsVWXyq4P9Tj+TxuU8WGWM70hYLl12nbYU8jkikVpa6WXapFazPUcHUMDMoWftIDE2ILDkFFte6W2nFCkRQ==}
- '@internationalized/number@3.6.5':
- resolution: {integrity: sha512-6hY4Kl4HPBvtfS62asS/R22JzNNy8vi/Ssev7x6EobfCp+9QIB2hKvI2EtbdJ0VSQacxVNtqhE/NmF/NZ0gm6g==}
+ '@internationalized/number@3.6.6':
+ resolution: {integrity: sha512-iFgmQaXHE0vytNfpLZWOC2mEJCBRzcUxt53Xf/yCXG93lRvqas237i3r7X4RKMwO3txiyZD4mQjKAByFv6UGSQ==}
- '@ioredis/commands@1.5.0':
- resolution: {integrity: sha512-eUgLqrMf8nJkZxT24JvVRrQya1vZkQh8BBeYNwGDqa5I0VUi8ACx7uFvAaLxintokpTenkK6DASvo/bvNbBGow==}
-
- '@isaacs/balanced-match@4.0.1':
- resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==}
- engines: {node: 20 || >=22}
-
- '@isaacs/brace-expansion@5.0.1':
- resolution: {integrity: sha512-WMz71T1JS624nWj2n2fnYAuPovhv7EUhk69R6i9dsVyzxt5eM3bjwvgk9L+APE1TRscGysAVMANkB0jh0LQZrQ==}
- engines: {node: 20 || >=22}
+ '@ioredis/commands@1.5.1':
+ resolution: {integrity: sha512-JH8ZL/ywcJyR9MmJ5BNqZllXNZQqQbnVZOqpPQqE1vHiFgAw4NHbvE0FOduNU8IX9babitBT46571OnPTT0Zcw==}
'@isaacs/cliui@8.0.2':
resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
@@ -1043,8 +876,11 @@ packages:
'@napi-rs/wasm-runtime@0.2.12':
resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==}
- '@napi-rs/wasm-runtime@1.1.1':
- resolution: {integrity: sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A==}
+ '@napi-rs/wasm-runtime@1.1.4':
+ resolution: {integrity: sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==}
+ peerDependencies:
+ '@emnapi/core': ^1.7.1
+ '@emnapi/runtime': ^1.7.1
'@netlify/blobs@9.1.2':
resolution: {integrity: sha512-7dMjExSH4zj4ShvLem49mE3mf0K171Tx2pV4WDWhJbRUWW3SJIR2qntz0LvUGS97N5HO1SmnzrgWUhEXCsApiw==}
@@ -1054,14 +890,17 @@ packages:
resolution: {integrity: sha512-5XUvZuffe3KetyhbWwd4n2ktd7wraocCYw10tlM+/u/95iAz29GjNiuNxbCD1T6Bn1MyGc4QLVNKOWhzJkVFAw==}
engines: {node: ^14.16.0 || >=16.0.0}
- '@netlify/open-api@2.52.0':
- resolution: {integrity: sha512-QkWQu0vz3uBcxjSslA0N6Njo0x1ndkhEIVEmdwcmxfufX8wA0d9WjiU2sWuHYw11Mrf5pkMUQHvZy+6V4A9TYQ==}
+ '@netlify/open-api@2.53.0':
+ resolution: {integrity: sha512-CcIhcB+XzY77nze7vLTdxkqS/uX5DXleo3adE8H+M7TapLX6GTXp5qMIsq8bAuHy5eGw0ijRrAnSUmkOP4DM2w==}
engines: {node: '>=14.8.0'}
'@netlify/runtime-utils@1.3.1':
resolution: {integrity: sha512-7/vIJlMYrPJPlEW84V2yeRuG3QBu66dmlv9neTmZ5nXzwylhBEOhy11ai+34A8mHCSZI4mKns25w3HM9kaDdJg==}
engines: {node: '>=16.0.0'}
+ '@nodable/entities@2.1.0':
+ resolution: {integrity: sha512-nyT7T3nbMyBI/lvr6L5TyWbFJAI9FTgVRakNoBqCD+PmID8DzFrrNdLLtHMwMszOtqZa8PAOV24ZqDnQrhQINA==}
+
'@nodelib/fs.scandir@2.1.5':
resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
engines: {node: '>= 8'}
@@ -1074,18 +913,18 @@ packages:
resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
engines: {node: '>= 8'}
- '@nuxt/cli@3.33.1':
- resolution: {integrity: sha512-/sCrcI0WemING9zASaXPgPDY7PrQTPlRyCXlSgGx8VwRAkWbxGaPhIc3kZQikgLwVAwy+muWVV4Wks8OTtW5Tw==}
- engines: {node: ^16.10.0 || >=18.0.0}
+ '@nuxt/cli@3.34.0':
+ resolution: {integrity: sha512-KVI4xSo96UtUUbmxr9ouWTytbj1LzTw5alsM4vC/gSY/l8kPMRAlq0XpNSAVTDJyALzLY70WhaIMX24LJLpdFw==}
+ engines: {node: ^16.14.0 || >=18.0.0}
hasBin: true
peerDependencies:
- '@nuxt/schema': ^4.3.0
+ '@nuxt/schema': ^4.3.1
peerDependenciesMeta:
'@nuxt/schema':
optional: true
- '@nuxt/content@3.11.2':
- resolution: {integrity: sha512-WO9C0Y8VdGtWHN/llJNbTaVBili18SUK9MJ5C+yBTJ8ZtUMMMW4YncOoPwxyO6QrLtlBgLIclezxAJrr7OaXyw==}
+ '@nuxt/content@3.13.0':
+ resolution: {integrity: sha512-ZpZ1l0yGzK/Y9QjBT8uReJ62DnOKDMlw+vkzSnkc8YDyZ0ZNhFj1fviMwDhEkArwvQTRfxi12GqzB/wxu01vEw==}
engines: {node: '>= 20.19.0'}
peerDependencies:
'@electric-sql/pglite': '*'
@@ -1111,22 +950,22 @@ packages:
'@nuxt/devalue@2.0.2':
resolution: {integrity: sha512-GBzP8zOc7CGWyFQS6dv1lQz8VVpz5C2yRszbXufwG/9zhStTIH50EtD87NmWbTMwXDvZLNg8GIpb1UFdH93JCA==}
- '@nuxt/devtools-kit@2.7.0':
- resolution: {integrity: sha512-MIJdah6CF6YOW2GhfKnb8Sivu6HpcQheqdjOlZqShBr+1DyjtKQbAKSCAyKPaoIzZP4QOo2SmTFV6aN8jBeEIQ==}
+ '@nuxt/devtools-kit@3.2.4':
+ resolution: {integrity: sha512-Yxy2Xgmq5hf3dQy983V0xh0OJV2mYwRZz9eVIGc3EaribdFGPDNGMMbYqX9qCty3Pbxn/bCF3J0UyPaNlHVayQ==}
peerDependencies:
vite: '>=6.0'
- '@nuxt/devtools-kit@3.1.1':
- resolution: {integrity: sha512-sjiKFeDCOy1SyqezSgyV4rYNfQewC64k/GhOsuJgRF+wR2qr6KTVhO6u2B+csKs74KrMrnJprQBgud7ejvOXAQ==}
+ '@nuxt/devtools-kit@4.0.0-alpha.3':
+ resolution: {integrity: sha512-ymp4jqS3hFfwRw8uDkv8cpu4kWvhQrX+S4jnA/oOc76s4AXf2HCZZJgrncKxh+txqi1NJj8nsQNBbaqRAo3g4w==}
peerDependencies:
vite: '>=6.0'
- '@nuxt/devtools-wizard@3.1.1':
- resolution: {integrity: sha512-6UORjapNKko2buv+3o57DQp69n5Z91TeJ75qdtNKcTvOfCTJrO78Ew0nZSgMMGrjbIJ4pFsHQEqXfgYLw3pNxg==}
+ '@nuxt/devtools-wizard@3.2.4':
+ resolution: {integrity: sha512-5tu2+Quu9XTxwtpzM8CUN0UKn/bzZIfJcoGd+at5Yy1RiUQJ4E52tRK0idW1rMSUDkbkvX3dSnu8Tpj7SAtWdQ==}
hasBin: true
- '@nuxt/devtools@3.1.1':
- resolution: {integrity: sha512-UG8oKQqcSyzwBe1l0z24zypmwn6FLW/HQMHK/F/gscUU5LeMHzgBhLPD+cuLlDvwlGAbifexWNMsS/I7n95KlA==}
+ '@nuxt/devtools@3.2.4':
+ resolution: {integrity: sha512-VPbFy7hlPzWpEZk4BsuVpNuHq1ZYGV9xezjb7/NGuePuNLqeNn74YZugU+PCtva7OwKhEeTXmMK0Mqo/6+nwNA==}
hasBin: true
peerDependencies:
'@vitejs/devtools': '*'
@@ -1135,24 +974,24 @@ packages:
'@vitejs/devtools':
optional: true
- '@nuxt/eslint-config@1.14.0':
- resolution: {integrity: sha512-WRSbCVR8eeOhKYkW5s79VleXvn9/Le81MFirTEpOyYyMQgHi2J5R5cmHWcx5A+Wugs8yDpW1Xn+7g8RWKpuTgA==}
+ '@nuxt/eslint-config@1.15.2':
+ resolution: {integrity: sha512-vS6mWB87tYjB8h3TxG/QziaZ6CGJpEOBd7N/j+64/tjNipUJzNgKwDzyGoOifNqyDDnlvgi6T3m9XpeYm4qRaA==}
peerDependencies:
- eslint: ^9.0.0
+ eslint: ^9.0.0 || ^10.0.0
eslint-plugin-format: '*'
peerDependenciesMeta:
eslint-plugin-format:
optional: true
- '@nuxt/eslint-plugin@1.14.0':
- resolution: {integrity: sha512-NT53GrmGaCQVXzScKSPe8scflxOZeFLONmmwHYh8sUKlnNZyFoxsmnN/AiZcDKDZ+OUjWhBrirDgDIXTTdM6xg==}
+ '@nuxt/eslint-plugin@1.15.2':
+ resolution: {integrity: sha512-LZ4gEcPP5GjzAkb6Kk04a4v0vvkTLOpmnEvdDatnkSlxtQLUSwX8v11vcDGXL92ZQ98dFoC1Q1IA6Tz3jdFIig==}
peerDependencies:
- eslint: ^9.0.0
+ eslint: ^9.0.0 || ^10.0.0
- '@nuxt/eslint@1.14.0':
- resolution: {integrity: sha512-3gSJhCYAR7AV5k2xKJwfjXbr7kvpeaJhGZQ4E45hJQnnUjLIeWPDAqHlKaYKro/pYcXQJ0sIDPJHWJbsF5Ty8g==}
+ '@nuxt/eslint@1.15.2':
+ resolution: {integrity: sha512-LwDavQoLl+y0sIDqWEYbOnM6FOmXVIYSEjuvkO1hgAqhb0CvG3hgTnfE1qkf1jOAZp3CZGP+6rxRAJ0dxhueIQ==}
peerDependencies:
- eslint: ^9.0.0
+ eslint: ^9.0.0 || ^10.0.0
eslint-webpack-plugin: ^4.1.0
vite-plugin-eslint2: ^5.0.0
peerDependenciesMeta:
@@ -1161,40 +1000,57 @@ packages:
vite-plugin-eslint2:
optional: true
- '@nuxt/fonts@0.11.4':
- resolution: {integrity: sha512-GbLavsC+9FejVwY+KU4/wonJsKhcwOZx/eo4EuV57C4osnF/AtEmev8xqI0DNlebMEhEGZbu1MGwDDDYbeR7Bw==}
+ '@nuxt/fonts@0.14.0':
+ resolution: {integrity: sha512-4uXQl9fa5F4ibdgU8zomoOcyMdnwgdem+Pi8JEqeDYI5yPR32Kam6HnuRr47dTb97CstaepAvXPWQUUHMtjsFQ==}
- '@nuxt/icon@1.15.0':
- resolution: {integrity: sha512-kA0rxqr1B601zNJNcOXera8CyYcxUCEcT7dXEC7rwAz71PRCN5emf7G656eKEQgtqrD4JSj6NQqWDgrmFcf/GQ==}
+ '@nuxt/icon@2.2.1':
+ resolution: {integrity: sha512-GI840yYGuvHI0BGDQ63d6rAxGzG96jQcWrnaWIQKlyQo/7sx9PjXkSHckXUXyX1MCr9zY6U25Td6OatfY6Hklw==}
'@nuxt/kit@3.21.1':
resolution: {integrity: sha512-QORZRjcuTKgo++XP1Pc2c2gqwRydkaExrIRfRI9vFsPA3AzuHVn5Gfmbv1ic8y34e78mr5DMBvJlelUaeOuajg==}
engines: {node: '>=18.12.0'}
+ '@nuxt/kit@3.21.2':
+ resolution: {integrity: sha512-Bd6m6mrDrqpBEbX+g0rc66/ALd1sxlgdx5nfK9MAYO0yKLTOSK7McSYz1KcOYn3LQFCXOWfvXwaqih/b+REI1g==}
+ engines: {node: '>=18.12.0'}
+
'@nuxt/kit@4.3.1':
resolution: {integrity: sha512-UjBFt72dnpc+83BV3OIbCT0YHLevJtgJCHpxMX0YRKWLDhhbcDdUse87GtsQBrjvOzK7WUNUYLDS/hQLYev5rA==}
engines: {node: '>=18.12.0'}
- '@nuxt/nitro-server@4.3.1':
- resolution: {integrity: sha512-4aNiM69Re02gI1ywnDND0m6QdVKXhWzDdtvl/16veytdHZj3FSq57ZCwOClNJ7HQkEMqXgS+bi6S2HmJX+et+g==}
+ '@nuxt/kit@4.4.2':
+ resolution: {integrity: sha512-5+IPRNX2CjkBhuWUwz0hBuLqiaJPRoKzQ+SvcdrQDbAyE+VDeFt74VpSFr5/R0ujrK4b+XnSHUJWdS72w6hsog==}
+ engines: {node: '>=18.12.0'}
+
+ '@nuxt/nitro-server@4.4.2':
+ resolution: {integrity: sha512-iMTfraWcpA0MuEnnEI8JFK/4DODY4ss1CfB8m3sBVOqW9jpY1Z6hikxzrtN+CadtepW2aOI5d8TdX5hab+Sb4Q==}
engines: {node: ^20.19.0 || >=22.12.0}
peerDependencies:
- nuxt: ^4.3.1
+ '@babel/plugin-proposal-decorators': ^7.25.0
+ '@rollup/plugin-babel': ^6.0.0 || ^7.0.0
+ nuxt: ^4.4.2
+ peerDependenciesMeta:
+ '@babel/plugin-proposal-decorators':
+ optional: true
+ '@rollup/plugin-babel':
+ optional: true
- '@nuxt/schema@4.3.1':
- resolution: {integrity: sha512-S+wHJdYDuyk9I43Ej27y5BeWMZgi7R/UVql3b3qtT35d0fbpXW7fUenzhLRCCDC6O10sjguc6fcMcR9sMKvV8g==}
+ '@nuxt/schema@4.4.2':
+ resolution: {integrity: sha512-/q6C7Qhiricgi+PKR7ovBnJlKTL0memCbA1CzRT+itCW/oeYzUfeMdQ35mGntlBoyRPNrMXbzuSUhfDbSCU57w==}
engines: {node: ^14.18.0 || >=16.10.0}
- '@nuxt/scripts@0.13.2':
- resolution: {integrity: sha512-aZYm60B08RoRnFVu+RiyN8UQ/xB3IWs05sh1pQ35CJ+zbWT725SZTgMI12kEXzqxAAHpiuv1ctBpLlFg+4jiew==}
+ '@nuxt/scripts@1.0.2':
+ resolution: {integrity: sha512-JMsM9H54jdsW6SKNzQoHviEzXTn9cc60XsIYj7Fyxn3bIXuKGI/mC663lHx1z5wfaV10uZrCdqjqxs8hP5Z9NA==}
+ hasBin: true
peerDependencies:
'@googlemaps/markerclusterer': ^2.6.2
'@paypal/paypal-js': ^8.1.2 || ^9.0.0
- '@stripe/stripe-js': ^7.0.0 || ^8.0.0
+ '@stripe/stripe-js': ^7.0.0 || ^8.0.0 || ^9.0.0
'@types/google.maps': ^3.58.1
'@types/vimeo__player': ^2.18.3
'@types/youtube': ^0.1.0
'@unhead/vue': ^2.0.3
+ posthog-js: ^1.0.0
peerDependenciesMeta:
'@googlemaps/markerclusterer':
optional: true
@@ -1208,50 +1064,36 @@ packages:
optional: true
'@types/youtube':
optional: true
+ posthog-js:
+ optional: true
- '@nuxt/telemetry@2.7.0':
- resolution: {integrity: sha512-mrKC3NjAlBOooLLVTYcIUie1meipoYq5vkoESoVTEWTB34T3a0QJzOfOPch+HYlUR+5Lqy1zLMv6epHFgYAKLA==}
+ '@nuxt/telemetry@2.8.0':
+ resolution: {integrity: sha512-zAwXY24KYvpLTmiV+osagd2EHkfs5IF+7oDZYTQoit5r0kPlwaCNlzHp5I/wUAWT4LBw6lG8gZ6bWidAdv/erQ==}
engines: {node: '>=18.12.0'}
hasBin: true
peerDependencies:
'@nuxt/kit': '>=3.0.0'
- '@nuxt/ui-pro@3.3.7':
- resolution: {integrity: sha512-jZnUsppccbdNPjiuBV7ayCgVCwASL6oNvxdW7T4mytBbjuE6gRINFg/6gJbuMo2JP8xIIiaaPZjWhxbs5wV4rQ==}
- peerDependencies:
- joi: ^17.13.0
- superstruct: ^2.0.0
- typescript: ^5.6.3
- valibot: ^1.0.0
- yup: ^1.6.0
- zod: ^3.24.0 || ^4.0.0
- peerDependenciesMeta:
- joi:
- optional: true
- superstruct:
- optional: true
- valibot:
- optional: true
- yup:
- optional: true
- zod:
- optional: true
-
- '@nuxt/ui@3.3.7':
- resolution: {integrity: sha512-pTUb/Uk3J2XVWDFks7baTmq9hfp+T+nvnXP7/QypBIAZLdkSMgEsFmP7xgX5Gugc/LaThIkAifzfks4wiSGuVA==}
+ '@nuxt/ui@4.6.1':
+ resolution: {integrity: sha512-mBbBTaVDTR6ohOoAJUiV4T2RPXo2hyLewGPTiHjy1arzHPNFnmb/Tkl/2/JipF3Y8cahV4LhVUdkWKsdgI1OXw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
hasBin: true
peerDependencies:
- '@inertiajs/vue3': ^2.0.7
- joi: ^17.13.0
+ '@inertiajs/vue3': ^2.0.7 || ^3.0.0
+ '@nuxt/content': ^3.0.0
+ joi: ^18.0.0
superstruct: ^2.0.0
- typescript: ^5.6.3
+ tailwindcss: ^4.0.0
+ typescript: ^5.6.3 || ^6.0.0
valibot: ^1.0.0
- vue-router: ^4.5.0
- yup: ^1.6.0
+ vue-router: ^4.5.0 || ^5.0.0
+ yup: ^1.7.0
zod: ^3.24.0 || ^4.0.0
peerDependenciesMeta:
'@inertiajs/vue3':
optional: true
+ '@nuxt/content':
+ optional: true
joi:
optional: true
superstruct:
@@ -1265,16 +1107,25 @@ packages:
zod:
optional: true
- '@nuxt/vite-builder@4.3.1':
- resolution: {integrity: sha512-LndnxPJzDUDbWAB8q5gZZN1mSOLHEyMOoj4T3pTdPydGf31QZdMR0V1fQ1fdRgtgNtWB3WLP0d1ZfaAOITsUpw==}
+ '@nuxt/vite-builder@4.4.2':
+ resolution: {integrity: sha512-fJaIwMA8ID6BU5EqmoDvnhq4qYDJeWjdHk4jfqy8D3Nm7CoUW0BvX7Ee92XoO05rtUiClGlk/NQ1Ii8hs3ZIbw==}
engines: {node: ^20.19.0 || >=22.12.0}
peerDependencies:
- nuxt: 4.3.1
+ '@babel/plugin-proposal-decorators': ^7.25.0
+ '@babel/plugin-syntax-jsx': ^7.25.0
+ nuxt: 4.4.2
rolldown: ^1.0.0-beta.38
+ rollup-plugin-visualizer: ^6.0.0 || ^7.0.1
vue: ^3.3.4
peerDependenciesMeta:
+ '@babel/plugin-proposal-decorators':
+ optional: true
+ '@babel/plugin-syntax-jsx':
+ optional: true
rolldown:
optional: true
+ rollup-plugin-visualizer:
+ optional: true
'@nuxtjs/algolia@1.11.2':
resolution: {integrity: sha512-x22Sx6EQebvUmrEY5vDqSaTjNzmAaIA36TKR2Sn9WYM0lS7+tcVL2l3AKg0fUNTLHZz6kesoLMGsppX6cq5Lrw==}
@@ -1285,22 +1136,24 @@ packages:
'@nuxtjs/color-mode@4.0.0':
resolution: {integrity: sha512-xyaVR/TPLdMuRa2VOgH6b75jvmFEsn9QKL6ISldaAw38ooFJfWY1ts2F3ye43wcT/goCbcuvPuskF2f8yUZhlw==}
- '@nuxtjs/mdc@0.20.1':
- resolution: {integrity: sha512-fGmtLDQAmmDHF5Z37Apfc3k806rb2XWDOQFhb5xlDSL7+HiiUjyFy3ctx3qWdlC08dRzfAetmsGOYbfDqYsB/w==}
+ '@nuxtjs/mdc@0.21.1':
+ resolution: {integrity: sha512-DIeUD7IahWVUSoZExysxH9dX51Io6hcQYgGJODq0cMTGqaoDD32lRfHBJxYUmy+sUCV1+1hfa2ixspgJgEd2GA==}
- '@nuxtjs/robots@5.7.0':
- resolution: {integrity: sha512-pkGtOP88rzIalvYE3rTCkJ+f0TDHfB/sbSCcA7inVemFa17JVu8AFlO4e+y4zthj+Jh98Tkf7yCuaDU5w3C1vQ==}
+ '@nuxtjs/robots@6.0.8':
+ resolution: {integrity: sha512-oVP4p3TbolnP+Ky3sFFU6Y19pecz8jtb2AxnrQa8hSj3auqVmJUxexjbFEBnA8+yeWCWAEcXCqlnz5mmJmLCSQ==}
peerDependencies:
zod: '>=3'
peerDependenciesMeta:
zod:
optional: true
- '@nuxtjs/seo@3.4.0':
- resolution: {integrity: sha512-ZpWhRbRpGvFsarwKANU/S6+AEKZaA34A+e9/GSiAdn9984QWf6+acP+NpqPCccmp+J78XNDQd77rwxIFENDuFw==}
+ '@nuxtjs/seo@5.1.3':
+ resolution: {integrity: sha512-aqRjn8sHAwP2iVTxGXOEGewYXYvbFq0XPaJOakvFSussUhPzoYp9yyUbfMhHPXKo25Ndz5+pcB6DsdGt15pY/w==}
+ peerDependencies:
+ nuxt: ^3.16.0 || ^4.0.0
- '@nuxtjs/sitemap@7.6.0':
- resolution: {integrity: sha512-JuWwAFn9MDHWFO5C7lpV6DS86ZIrJItGfzCK1kN9WvgvDmTgal3xbfGCADmAaCWOVl2+dcPGHH6BCypQvUX0aQ==}
+ '@nuxtjs/sitemap@8.0.13':
+ resolution: {integrity: sha512-mGjU8gSmFwEO9v9K2fokt46ZEf2cYqTAc1iyiytL9g7CjRUvHRflWETI+tWGzx/bym9BRErN6nfxpL5KZucgmQ==}
engines: {node: '>=18.0.0'}
peerDependencies:
zod: '>=3'
@@ -1312,8 +1165,8 @@ packages:
resolution: {integrity: sha512-CjruKY9V6NMssL/T1kAFgzosF1v9o6oeN+aX5JB/C/xPNtmgIJqcXHG7fA82Ou1zCpWGl4lROQUKwUNE1pMCyg==}
engines: {node: '>=8.0.0'}
- '@opentelemetry/api@1.9.0':
- resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==}
+ '@opentelemetry/api@1.9.1':
+ resolution: {integrity: sha512-gLyJlPHPZYdAk1JENA9LeHejZe1Ti77/pTeFm/nMXmQH/HFZlcS/O2XJB+L8fkbrNSqhdtlvjBVjxwUYanNH5Q==}
engines: {node: '>=8.0.0'}
'@opentelemetry/core@2.2.0':
@@ -1322,8 +1175,8 @@ packages:
peerDependencies:
'@opentelemetry/api': '>=1.0.0 <1.10.0'
- '@opentelemetry/core@2.5.0':
- resolution: {integrity: sha512-ka4H8OM6+DlUhSAZpONu0cPBtPPTQKxbxVzC4CzVx5+K4JnroJVBtDzLAMx4/3CDTJXRvVFhpFjtl4SaiTNoyQ==}
+ '@opentelemetry/core@2.7.0':
+ resolution: {integrity: sha512-DT12SXVwV2eoJrGf4nnsvZojxxeQo+LlNAsoYGRRObPWTeN6APiqZ2+nqDCQDvQX40eLi1AePONS0onoASp3yQ==}
engines: {node: ^18.19.0 || >=20.6.0}
peerDependencies:
'@opentelemetry/api': '>=1.0.0 <1.10.0'
@@ -1352,8 +1205,8 @@ packages:
peerDependencies:
'@opentelemetry/api': '>=1.3.0 <1.10.0'
- '@opentelemetry/resources@2.5.0':
- resolution: {integrity: sha512-F8W52ApePshpoSrfsSk1H2yJn9aKjCrbpQF1M9Qii0GHzbfVeFUB+rc3X4aggyZD8x9Gu3Slua+s6krmq6Dt8g==}
+ '@opentelemetry/resources@2.7.0':
+ resolution: {integrity: sha512-K+oi0hNMv94EpZbnW3eyu2X6SGVpD3O5DhG2NIp65Hc7lhAj9brRXTAVzh3wB82+q3ThakEf7Zd7RsFUqcTc7A==}
engines: {node: ^18.19.0 || >=20.6.0}
peerDependencies:
'@opentelemetry/api': '>=1.3.0 <1.10.0'
@@ -1376,394 +1229,664 @@ packages:
peerDependencies:
'@opentelemetry/api': '>=1.3.0 <1.10.0'
- '@opentelemetry/semantic-conventions@1.39.0':
- resolution: {integrity: sha512-R5R9tb2AXs2IRLNKLBJDynhkfmx7mX0vi8NkhZb3gUkPWHn6HXk5J8iQ/dql0U3ApfWym4kXXmBDRGO+oeOfjg==}
+ '@opentelemetry/semantic-conventions@1.40.0':
+ resolution: {integrity: sha512-cifvXDhcqMwwTlTK04GBNeIe7yyo28Mfby85QXFe1Yk8nmi36Ab/5UQwptOx84SsoGNRg+EVSjwzfSZMy6pmlw==}
engines: {node: '>=14'}
- '@oxc-minify/binding-android-arm-eabi@0.112.0':
- resolution: {integrity: sha512-m7TGBR2hjsBJIN9UJ909KBoKsuogo6CuLsHKvUIBXdjI0JVHP8g4ZHeB+BJpGn5LJdeSGDfz9MWiuXrZDRzunw==}
+ '@oxc-minify/binding-android-arm-eabi@0.117.0':
+ resolution: {integrity: sha512-5Hf2KsGRjxp3HnPU/mse7cQJa5tWfMFUPZQcgSMVsv2JZnGFFOIDzA0Oja2KDD+VPJqMpEJKc2dCHAGZgJxsGg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm]
os: [android]
- '@oxc-minify/binding-android-arm64@0.112.0':
- resolution: {integrity: sha512-RvxOOkzvP5NeeoraBtgNJSBqO+XzlS7DooxST/drAXCfO52GsmxVB1N7QmifrsTYtH8GC2z3DTFjZQ1w/AJOWg==}
+ '@oxc-minify/binding-android-arm64@0.117.0':
+ resolution: {integrity: sha512-uuxGwxA5J4Sap+gz4nxyM/rer6q2A4X1Oe8HpE0CZQyb5cSBULQ15btZiVG3xOBctI5O+c2dwR1aZAP4oGKcLw==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [android]
- '@oxc-minify/binding-darwin-arm64@0.112.0':
- resolution: {integrity: sha512-hDslO3uVHza3kB9zkcsi25JzN65Gj5ZYty0OvylS11Mhg9ydCYxAzfQ/tISHW/YmV1NRUJX8+GGqM1cKmrHaTA==}
+ '@oxc-minify/binding-darwin-arm64@0.117.0':
+ resolution: {integrity: sha512-lLBf75cxUSLydumToKtGTwbLqO/1urScblJ33Vx0uF38M2ZbL2x51AybBV5vlfLjYNrxvQ8ov0Bj/OhsVO/biA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [darwin]
- '@oxc-minify/binding-darwin-x64@0.112.0':
- resolution: {integrity: sha512-mWA2Y5bUyNoGM+gSGGHesgtQ3LDWgpRe4zDGkBDovxNIiDLBXqu/7QcuS+G918w8oG9VYm1q1iinILer/2pD1Q==}
+ '@oxc-minify/binding-darwin-x64@0.117.0':
+ resolution: {integrity: sha512-wBWwP1voLZMuN4hpe1HRtkPBd4/o/1qan5XssmmI/hewBvGHEHkyvVLS0zu+cKqXDxYzYvb/p+EqU+xSXhEl4A==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [darwin]
- '@oxc-minify/binding-freebsd-x64@0.112.0':
- resolution: {integrity: sha512-T7fsegxcy82xS0jWPXkz/BMhrkb3D7YOCiV0R9pDksjaov+iIFoNEWAoBsaC5NtpdzkX+bmffwDpu336EIfEeg==}
+ '@oxc-minify/binding-freebsd-x64@0.117.0':
+ resolution: {integrity: sha512-pYSacHw698oH2vb70iP1cHk6x0zhvAuOvdskvNtEqvfziu8MSjKXa699vA9Cx72+DH5rwVuj1I3f+7no2fWglA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [freebsd]
- '@oxc-minify/binding-linux-arm-gnueabihf@0.112.0':
- resolution: {integrity: sha512-yePavbIilAcpVYc8vRsDCn3xJxHMXDZIiamyH9fuLosAHNELcLib4/JR4fhDk4NmHVagQH3kRhsnm5Q9cm3pAw==}
+ '@oxc-minify/binding-linux-arm-gnueabihf@0.117.0':
+ resolution: {integrity: sha512-Ugm4Qj7F2+bccjhHCjjnSNHBDPyvjPXWrntID4WJpSrPqt+Az/o0EGdty9sWOjQXRZiTVpa80uqCWZQUn94yTA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm]
os: [linux]
- '@oxc-minify/binding-linux-arm-musleabihf@0.112.0':
- resolution: {integrity: sha512-lmPWLXtW6FspERhy97iP0hwbmLtL66xI29QQ9GpHmTiE4k+zv/FaefuV/Qw+LuHnmFSYzUNrLcxh4ulOZTIP2g==}
+ '@oxc-minify/binding-linux-arm-musleabihf@0.117.0':
+ resolution: {integrity: sha512-qrY6ZviO9wVRI/jl4nRZO4B9os8jaJQemMeWIyFInZNk3lhqihId8iBqMKibJnRaf+JRxLM9j68atXkFRhOHrg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm]
os: [linux]
- '@oxc-minify/binding-linux-arm64-gnu@0.112.0':
- resolution: {integrity: sha512-gySS5XqU5MKs/oCjsTlVm8zb8lqcNKHEANsaRmhW2qvGKJoeGwFb6Fbq6TLCZMRuk143mLbncbverBCa1c3dog==}
+ '@oxc-minify/binding-linux-arm64-gnu@0.117.0':
+ resolution: {integrity: sha512-2VLJHKEFBRhCihT/8uesuDPhXpbWu1OlHCxqQ7pdFVqKik1Maj5E9oSDcYzxqfaCRStvTHkmLVWJBK5CVcIadg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [linux]
libc: [glibc]
- '@oxc-minify/binding-linux-arm64-musl@0.112.0':
- resolution: {integrity: sha512-IRFMZX589lr3rjG0jc8N261/7wqFq2Vl0OMrJWeFls5BF8HiB+fRYuf0Zy2CyRH6NCY2vbdDdp+QCAavQGVsGw==}
+ '@oxc-minify/binding-linux-arm64-musl@0.117.0':
+ resolution: {integrity: sha512-C3zapJconWpl2Y7LR3GkRkH6jxpuV2iVUfkFcHT5Ffn4Zu7l88mZa2dhcfdULZDybN1Phka/P34YUzuskUUrXw==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [linux]
libc: [musl]
- '@oxc-minify/binding-linux-ppc64-gnu@0.112.0':
- resolution: {integrity: sha512-V/69XqIW9hCUceDpcZh79oDg+F4ptEgIfKRENzYs41LRbSoJ7sNjjcW4zifqyviTvzcnXLgK4uoTyoymmNZBMQ==}
+ '@oxc-minify/binding-linux-ppc64-gnu@0.117.0':
+ resolution: {integrity: sha512-2T/Bm+3/qTfuNS4gKSzL8qbiYk+ErHW2122CtDx+ilZAzvWcJ8IbqdZIbEWOlwwe03lESTxPwTBLFqVgQU2OeQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [ppc64]
os: [linux]
libc: [glibc]
- '@oxc-minify/binding-linux-riscv64-gnu@0.112.0':
- resolution: {integrity: sha512-zghvexySyGXGNW+MutjZN7UGTyOQl56RWMlPe1gb+knBm/+0hf9qjk7Q6ofm2tSte+vQolPfQttifGl0dP9uvQ==}
+ '@oxc-minify/binding-linux-riscv64-gnu@0.117.0':
+ resolution: {integrity: sha512-MKLjpldYkeoB4T+yAi4aIAb0waifxUjLcKkCUDmYAY3RqBJTvWK34KtfaKZL0IBMIXfD92CbKkcxQirDUS9Xcg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [riscv64]
os: [linux]
libc: [glibc]
- '@oxc-minify/binding-linux-riscv64-musl@0.112.0':
- resolution: {integrity: sha512-E4a8VUFDJPb2mPcc7J4NQQPi1ssHKF7/g4r6KD2+SBVERIaEEd3cGNqR7SG3g82/BLGV2UDoQe/WvZCkt5M/bQ==}
+ '@oxc-minify/binding-linux-riscv64-musl@0.117.0':
+ resolution: {integrity: sha512-UFVcbPvKUStry6JffriobBp8BHtjmLLPl4bCY+JMxIn/Q3pykCpZzRwFTcDurG/kY8tm+uSNfKKdRNa5Nh9A7g==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [riscv64]
os: [linux]
libc: [musl]
- '@oxc-minify/binding-linux-s390x-gnu@0.112.0':
- resolution: {integrity: sha512-2Hx87sK3y6jBV364Mvv0zyxiITIuy26Ixenv6pK7e+4an3HgNdhAj8nk3aLoLTTSvLik5/MaGhcZGEu9tYV1aA==}
+ '@oxc-minify/binding-linux-s390x-gnu@0.117.0':
+ resolution: {integrity: sha512-B9GyPQ1NKbvpETVAMyJMfRlD3c6UJ7kiuFUAlx9LTYiQL+YIyT6vpuRlq1zgsXxavZluVrfeJv6x0owV4KDx4Q==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [s390x]
os: [linux]
libc: [glibc]
- '@oxc-minify/binding-linux-x64-gnu@0.112.0':
- resolution: {integrity: sha512-2MSCnEPLk9ddSouMhJo78Xy2/JbYC80OYzWdR4yWTGSULsgH3d1VXg73DSwFL8vU7Ad9oK10DioBY2ww7sQTEg==}
+ '@oxc-minify/binding-linux-x64-gnu@0.117.0':
+ resolution: {integrity: sha512-fXfhtr+WWBGNy4M5GjAF5vu/lpulR4Me34FjTyaK9nDrTZs7LM595UDsP1wliksqp4hD/KdoqHGmbCrC+6d4vA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [linux]
libc: [glibc]
- '@oxc-minify/binding-linux-x64-musl@0.112.0':
- resolution: {integrity: sha512-HAPfmQKlkVi97/zRonVE9t/kKUG3ni+mOuU1Euw+3s37KwUuOJjmcwXdclVgXKBlTkCGO0FajPwW5dAJeIXCCw==}
+ '@oxc-minify/binding-linux-x64-musl@0.117.0':
+ resolution: {integrity: sha512-jFBgGbx1oLadb83ntJmy1dWlAHSQanXTS21G4PgkxyONmxZdZ/UMKr7KsADzMuoPsd2YhJHxzRpwJd9U+4BFBw==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [linux]
libc: [musl]
- '@oxc-minify/binding-openharmony-arm64@0.112.0':
- resolution: {integrity: sha512-bLnMojcPadYzMNpB6IAqMiTOag4etc0zbs8On73JsotO1W5c5/j/ncplpSokpEpNasKRUpHVRXpmq0KRXprNhw==}
+ '@oxc-minify/binding-openharmony-arm64@0.117.0':
+ resolution: {integrity: sha512-nxPd9vx1vYz8IlIMdl9HFdOK/ood1H5hzbSFsyO8JU55tkcJoBL8TLCbuFf9pHpOy27l2gcPyV6z3p4eAcTH5Q==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [openharmony]
- '@oxc-minify/binding-wasm32-wasi@0.112.0':
- resolution: {integrity: sha512-tv7PmHYq/8QBlqMaDjsy51GF5KQkG17Yc/PsgB5OVndU34kwbQuebBIic7UfK9ygzidI8moYq3ztnu3za/rqHw==}
+ '@oxc-minify/binding-wasm32-wasi@0.117.0':
+ resolution: {integrity: sha512-pSvjJ6cCCfEXSteWSiVfZhdRzvpmS3tLhlXrXTYiuTDFrkRCobRP39SRwAzK23rE9i/m2JAaES2xPEW6+xu85g==}
engines: {node: '>=14.0.0'}
cpu: [wasm32]
- '@oxc-minify/binding-win32-arm64-msvc@0.112.0':
- resolution: {integrity: sha512-d+jes2jwRkcBSpcaZC6cL8GBi56Br6uAorn9dfquhWLczWL+hHSvvVrRgT1i5/6dkf5UWx2zdoEsAMiJ11w78A==}
+ '@oxc-minify/binding-win32-arm64-msvc@0.117.0':
+ resolution: {integrity: sha512-9NoT9baFrWPdJRIZVQ1jzPZW9TjPT2sbzQyDdoK7uD1V8JXCe1L2y7sp9k2ldZZheaIcmtNwHc7jyD7kYz/0XQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [win32]
- '@oxc-minify/binding-win32-ia32-msvc@0.112.0':
- resolution: {integrity: sha512-TV1C3qDwj7//jNIi5tnNRhReSUgtaRQKi5KobDE6zVAc5gjeuBA8G2qizS9ziXlf/I0dlelrGmGMMDJmH9ekWg==}
+ '@oxc-minify/binding-win32-ia32-msvc@0.117.0':
+ resolution: {integrity: sha512-E51LTjkRei5u2dpFiYSObuh+e43xg45qlmilSTd0XDGFdYJCOv62Q0MEn61TR+efQYPNleYwWdTS9t+tp9p/4w==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [ia32]
os: [win32]
- '@oxc-minify/binding-win32-x64-msvc@0.112.0':
- resolution: {integrity: sha512-LML2Gld6VY8/+7a3VH4k1qngsBXvTkXgbmYgSYwaElqtiQiYaAcXfi0XKOUGe3k3GbBK4juAGixC31CrdFHAQw==}
+ '@oxc-minify/binding-win32-x64-msvc@0.117.0':
+ resolution: {integrity: sha512-I8vniPOxWQdxfIbXNvQLaJ1n8SrnqES6wuiAX10CU72sKsizkds9kDaJ1KzWvDy39RKhTBmD1cJsU2uxPFgizQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [win32]
- '@oxc-parser/binding-android-arm-eabi@0.112.0':
- resolution: {integrity: sha512-retxBzJ39Da7Lh/eZTn9+HJgTeDUxZIpuI0urOsmcFsBKXAth3lc1jIvwseQ9qbAI/VrsoFOXiGIzgclARbAHg==}
+ '@oxc-parser/binding-android-arm-eabi@0.117.0':
+ resolution: {integrity: sha512-XarGPJpaobgKjfm7xRfCGWWszuPbm/OeP91NdMhxtcLZ/qLTmWF0P0z0gqmr0Uysi1F1v1BNtcST11THMrcEOw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [android]
+
+ '@oxc-parser/binding-android-arm-eabi@0.126.0':
+ resolution: {integrity: sha512-svyoHt25J4741QJ5aa4R+h0iiBeSRt63Lr3aAZcxy2c/NeSE1IfDeMnSij6rIg7EjxkdlXzz613wUjeCeilBNA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [android]
+
+ '@oxc-parser/binding-android-arm-eabi@0.127.0':
+ resolution: {integrity: sha512-0LC7ye4hvqbIKxAzThzvswgHLFu2AURKzYLeSVvLdu2TBOYWQDmHnTqPLeA597BcUCxiLqLsS4CJ5uoI5WYWCQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm]
os: [android]
- '@oxc-parser/binding-android-arm64@0.112.0':
- resolution: {integrity: sha512-pRkbBRbuIIsufUWpOJ+JHWfJFNupkidy4sbjfcm37e6xwYrn9LSKMLubPHvNaL1Zf92ZRhGiwaYkEcmaFg2VcA==}
+ '@oxc-parser/binding-android-arm64@0.117.0':
+ resolution: {integrity: sha512-EPTs2EBijGmyhPso4rXAL0NSpECXER9IaVKFZEv83YcA6h4uhKW47kmYt+OZcSp130zhHx+lTWILDQ/LDkCRNA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [android]
+
+ '@oxc-parser/binding-android-arm64@0.126.0':
+ resolution: {integrity: sha512-hPEBRKgplp1mG9GkINFsr4JVMDNrGJLOqfDaadTWpAoTnzYR5Rmv8RMvB3hJZpiNvbk1aacopdHUP1pggMQ/cw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [android]
+
+ '@oxc-parser/binding-android-arm64@0.127.0':
+ resolution: {integrity: sha512-b5jtVTH6AU5CJXHNdj7Jj9IEiR9yVjjnwHzPJhGyHGPdcsZSzBCkS9GBbV33niRMvKthDwQRFRJfI4a+k4PvYg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [android]
- '@oxc-parser/binding-darwin-arm64@0.112.0':
- resolution: {integrity: sha512-fh6/KQL/cbH5DukT3VkdCqnULLuvVnszVKySD5IgSE0WZb32YZo/cPsPdEv052kk6w3N4agu+NTiMnZjcvhUIg==}
+ '@oxc-parser/binding-darwin-arm64@0.117.0':
+ resolution: {integrity: sha512-3bAEpyih6r/Kb+Xzn1em1qBMClOS7NsVWgF86k95jpysR5ix/HlKFKSy7cax6PcS96HeHR4kjlME20n/XK1zNg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@oxc-parser/binding-darwin-arm64@0.126.0':
+ resolution: {integrity: sha512-ccRpu9sdYmznePJQG5halhs0FW5tw5a8zRSoZXOzM1OjoeZ4jiRRruFiPclsD59edoVAK1l83dvfjWz1nQi6lg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@oxc-parser/binding-darwin-arm64@0.127.0':
+ resolution: {integrity: sha512-obCE8B7ISKkJidjlhv9xRGJPOSDG2Yu6PRga9Ruaz35uintHxbp1Ki/Yc71wx4rj3Edrm0a1kzG1TAwit0wFpg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [darwin]
- '@oxc-parser/binding-darwin-x64@0.112.0':
- resolution: {integrity: sha512-vUBOOY1E30vlu/DoTGDoT1UbLlwu5Yv9tqeBabAwRzwNDz8Skho16VKhsBDUiyqddtpsR3//v6vNk38w4c+6IA==}
+ '@oxc-parser/binding-darwin-x64@0.117.0':
+ resolution: {integrity: sha512-W7S99zFwVZhSbCxvjfZkioStFU249DBc4TJw/kK6kfKwx2Zew+jvizX5Y3ZPkAh7fBVUSNOdSeOqLBHLiP50tw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [darwin]
+
+ '@oxc-parser/binding-darwin-x64@0.126.0':
+ resolution: {integrity: sha512-CHB4zVjNSKqx8Fw9pHowzQQnjjuq04i4Ng0Avj+DixlwhwAoMYqlFbocYIlbg+q3zOLGlm7vEHm83jqEMitnyg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [darwin]
+
+ '@oxc-parser/binding-darwin-x64@0.127.0':
+ resolution: {integrity: sha512-JL6Xb5IwPQT8rUzlpsX7E+AgfcdNklXNPFp8pjCQQ5MQOQo5rtEB2ui+3Hgg9Sn7Y9Egj6YOLLiHhLpdAe12Aw==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [darwin]
- '@oxc-parser/binding-freebsd-x64@0.112.0':
- resolution: {integrity: sha512-hnEtO/9AVnYWzrgnp6L+oPs/6UqlFeteUL6n7magkd2tttgmx1C01hyNNh6nTpZfLzEVJSNJ0S+4NTsK2q2CxA==}
+ '@oxc-parser/binding-freebsd-x64@0.117.0':
+ resolution: {integrity: sha512-xH76lqSdjCSY0KUMPwLXlvQ3YEm3FFVEQmgiOCGNf+stZ6E4Mo3nC102Bo8yKd7aW0foIPAFLYsHgj7vVI/axw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@oxc-parser/binding-freebsd-x64@0.126.0':
+ resolution: {integrity: sha512-RQ3nEJdcDKBfBjmLJ3Vl1d0KQERPV1P8eUrnBm7+VTYyoaJSPLVFuPg1mlD1hk3n0/879VLFMfusFkBal4ssWQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@oxc-parser/binding-freebsd-x64@0.127.0':
+ resolution: {integrity: sha512-SDQ/3MQFw58fqQz3Z1PhSKFF3JoCF4gmlNjziDm8X02tTahCw0qJbd7FGPDKw1i4VTBZene9JPyC3mHtSvi+wA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [freebsd]
- '@oxc-parser/binding-linux-arm-gnueabihf@0.112.0':
- resolution: {integrity: sha512-WxJrUz3pcIc2hp4lvJbvt/sTL33oX9NPvkD3vDDybE6tc0V++rS+hNOJxwXdD2FDIFPkHs/IEn5asEZFVH+VKw==}
+ '@oxc-parser/binding-linux-arm-gnueabihf@0.117.0':
+ resolution: {integrity: sha512-9Hdm1imzrn4RdMYnQKKcy+7p7QsSPIrgVIZmpGSJT02nYDuBWLdG1pdYMPFoEo46yiXry3tS3RoHIpNbT1IiyQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm]
os: [linux]
- '@oxc-parser/binding-linux-arm-musleabihf@0.112.0':
- resolution: {integrity: sha512-jj8A8WWySaJQqM9XKAIG8U2Q3qxhFQKrXPWv98d1oC35at+L1h+C+V4M3l8BAKhpHKCu3dYlloaAbHd5q1Hw6A==}
+ '@oxc-parser/binding-linux-arm-gnueabihf@0.126.0':
+ resolution: {integrity: sha512-onipc2wCDA7Bauzb4KK1mab0GsEDf4ujiIfWECdnmY/2LlzAoX3xdQRLAUyEDB1kn3yilHBrkmXDdHluyHXxiw==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm]
os: [linux]
- '@oxc-parser/binding-linux-arm64-gnu@0.112.0':
- resolution: {integrity: sha512-G2F8H6FcAExVK5vvhpSh61tqWx5QoaXXUnSsj5FyuDiFT/K7AMMVSQVqnZREDc+YxhrjB0vnKjCcuobXK63kIw==}
+ '@oxc-parser/binding-linux-arm-gnueabihf@0.127.0':
+ resolution: {integrity: sha512-Av+D1MIqzV0YMGPT9we2SIZaMKD7Cxs4CvXSx/yxaWHewZjYEjScpOf5igc8IILASViw4WTnjlwUdI1KzVtDHQ==}
engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [arm64]
+ cpu: [arm]
os: [linux]
- libc: [glibc]
- '@oxc-parser/binding-linux-arm64-musl@0.112.0':
- resolution: {integrity: sha512-3R0iqjM3xYOZCnwgcxOQXH7hrz64/USDIuLbNTM1kZqQzRqaR4w7SwoWKU934zABo8d0op2oSwOp+CV3hZnM7A==}
+ '@oxc-parser/binding-linux-arm-musleabihf@0.117.0':
+ resolution: {integrity: sha512-Itszer/VCeYhYVJLcuKnHktlY8QyGnVxapltP68S1XRGlV6IsM9HQAElJRMwQhT6/GkMjOhANmkv2Qu/9v44lw==}
engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [arm64]
+ cpu: [arm]
os: [linux]
- libc: [musl]
- '@oxc-parser/binding-linux-ppc64-gnu@0.112.0':
- resolution: {integrity: sha512-lAQf8PQxfgy7h0bmcfSVE3hg3qMueshPYULFsCrHM+8KefGZ9W+ZMvRyU33gLrB4w1O3Fz1orR0hmKMCRxXNrQ==}
+ '@oxc-parser/binding-linux-arm-musleabihf@0.126.0':
+ resolution: {integrity: sha512-5BuJJPohrV5NJ8lmcYOMbfRCUGoYH5J9HZHeuqOLwkHXWAuPMN3X1h8bC/2mWjmosdbfTtmyIdX3spS/TkqKNg==}
engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [ppc64]
+ cpu: [arm]
os: [linux]
- libc: [glibc]
- '@oxc-parser/binding-linux-riscv64-gnu@0.112.0':
- resolution: {integrity: sha512-2QlvQBUhHuAE3ezD4X3CAEKMXdfgInggQ5Bj/7gb5NcYP3GyfLTj7c+mMu+BRwfC9B3AXBNyqHWbqEuuUvZyRQ==}
+ '@oxc-parser/binding-linux-arm-musleabihf@0.127.0':
+ resolution: {integrity: sha512-Cs2fdJ8cPpFdeebj6p4dag8A4+56hPvZ0AhQQzlaLswGz1tz7bXt1nETLeorrM9+AMcWFFkqxcXwDGfTVidY8g==}
engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [riscv64]
+ cpu: [arm]
os: [linux]
- libc: [glibc]
- '@oxc-parser/binding-linux-riscv64-musl@0.112.0':
- resolution: {integrity: sha512-v06iu0osHszgqJ1dLQRb6leWFU1sjG/UQk4MoVBtE6ZPewgfTkby6G9II1SpEAf2onnAuQceVYxQH9iuU3NJqw==}
+ '@oxc-parser/binding-linux-arm64-gnu@0.117.0':
+ resolution: {integrity: sha512-jBxD7DtlHQ36ivjjZdH0noQJgWNouenzpLmXNKnYaCsBfo3jY95m5iyjYQEiWkvkhJ3TJUAs7tQ1/kEpY7x/Kg==}
engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [riscv64]
+ cpu: [arm64]
os: [linux]
- libc: [musl]
+ libc: [glibc]
- '@oxc-parser/binding-linux-s390x-gnu@0.112.0':
- resolution: {integrity: sha512-+5HhNHtxsdcd7+ljXFnn9FOoCNXJX3UPgIfIE6vdwS1HqdGNH6eAcVobuqGOp54l8pvcxDQA6F4cPswCgLrQfQ==}
+ '@oxc-parser/binding-linux-arm64-gnu@0.126.0':
+ resolution: {integrity: sha512-r2KApRgm2pOJaduRm6GOT8x0whcr67AyejNkSdzPt34GJ+Y3axcXN2mwlTs+8lfO/SSmpO5ZJGYiHYnxEE0jkw==}
engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [s390x]
+ cpu: [arm64]
os: [linux]
libc: [glibc]
- '@oxc-parser/binding-linux-x64-gnu@0.112.0':
- resolution: {integrity: sha512-jKwO7ZLNkjxwg7FoCLw+fJszooL9yXRZsDN0AQ1AQUTWq1l8GH/2e44k68N3fcP19jl8O8jGpqLAZcQTYk6skA==}
+ '@oxc-parser/binding-linux-arm64-gnu@0.127.0':
+ resolution: {integrity: sha512-qdOfTcT6SY8gsJrrV92uyEUyjqMGPpIB5JZUG6QN5dukYd+7/j0kX6MwK1DgQj39jtUYixxPiaRUiEN1+0CXgQ==}
engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [x64]
+ cpu: [arm64]
os: [linux]
libc: [glibc]
- '@oxc-parser/binding-linux-x64-musl@0.112.0':
- resolution: {integrity: sha512-TYqnuKV/p3eOc+N61E0961nA7DC+gaCeJ3+V2LcjJdTwFMdikqWL6uVk1jlrpUCBrozHDATVUKDZYH7r4FQYjQ==}
+ '@oxc-parser/binding-linux-arm64-musl@0.117.0':
+ resolution: {integrity: sha512-QagKTDF4lrz8bCXbUi39Uq5xs7C7itAseKm51f33U+Dyar9eJY/zGKqfME9mKLOiahX7Fc1J3xMWVS0AdDXLPg==}
engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [x64]
+ cpu: [arm64]
os: [linux]
libc: [musl]
- '@oxc-parser/binding-openharmony-arm64@0.112.0':
- resolution: {integrity: sha512-ZhrVmWFifVEFQX4XPwLoVFDHw9tAWH9p9vHsHFH+5uCKdfVR+jje4WxVo6YrokWCboGckoOzHq5KKMOcPZfkRg==}
+ '@oxc-parser/binding-linux-arm64-musl@0.126.0':
+ resolution: {integrity: sha512-FQ+MMh7MT0Dr/u8+RWmWKlfoeWPQyHDbhhxJShJlYtROXXPHsRs9EvmQOZZ3sx4Nn7JU8NX+oyw2YzQ7anBJcA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
- os: [openharmony]
-
- '@oxc-parser/binding-wasm32-wasi@0.112.0':
- resolution: {integrity: sha512-Gr8X2PUU3hX1g3F5oLWIZB8DhzDmjr5TfOrmn5tlBOo9l8ojPGdKjnIBfObM7X15928vza8QRKW25RTR7jfivg==}
- engines: {node: '>=14.0.0'}
- cpu: [wasm32]
+ os: [linux]
+ libc: [musl]
- '@oxc-parser/binding-win32-arm64-msvc@0.112.0':
- resolution: {integrity: sha512-t5CDLbU70Ea88bGRhvU/dLJTc/Wcrtf2Jp534E8P3cgjAvHDjdKsfDDqBZrhybJ8Jv9v9vW5ngE40EK51BluDA==}
+ '@oxc-parser/binding-linux-arm64-musl@0.127.0':
+ resolution: {integrity: sha512-EoTCZneNFU/P2qrpEM+RHmQwt+CvDkyGESG6qhr7KaegXLZwePfbrkCDfAk8/rhxbDUVGsZILX+2tqPzFtoFWA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
- os: [win32]
+ os: [linux]
+ libc: [musl]
- '@oxc-parser/binding-win32-ia32-msvc@0.112.0':
- resolution: {integrity: sha512-rZH0JynCCwnhe2HfRoyNOl/Kfd9pudoWxgpC5OZhj7j77pMK0UOAa35hYDfrtSOUk2HLzrikV5dPUOY2DpSBSA==}
+ '@oxc-parser/binding-linux-ppc64-gnu@0.117.0':
+ resolution: {integrity: sha512-RPddpcE/0xxWaommWy0c5i/JdrXcXAkxBS2GOrAUh5LKmyCh03hpJedOAWszG4ADsKQwoUQQ1/tZVGRhZIWtKA==}
engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [ia32]
- os: [win32]
+ cpu: [ppc64]
+ os: [linux]
+ libc: [glibc]
- '@oxc-parser/binding-win32-x64-msvc@0.112.0':
- resolution: {integrity: sha512-oGHluohzmVFAuQrkEnl1OXAxMz2aYmimxUqIgKXpBgbr7PvFv0doELB273sX+5V3fKeggohKg1A2Qq21W9Z9cQ==}
+ '@oxc-parser/binding-linux-ppc64-gnu@0.126.0':
+ resolution: {integrity: sha512-Wv/T8C98hRQhGTlx2XFyLn5raRMp9U1lOQD+YnXNgAr7wHbJJpZ8mDBU7Rw+M3WytGcGTFcr6kqgfyQeHVtLbQ==}
engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [x64]
+ cpu: [ppc64]
+ os: [linux]
+ libc: [glibc]
+
+ '@oxc-parser/binding-linux-ppc64-gnu@0.127.0':
+ resolution: {integrity: sha512-zALjmZYgxFLHjXeudcDF0xFGNydTAtkAeXAr2EuC17ywCyFxcmQra4w0BMde0Yi/re4Bi4iwEoEXtYN7l6eBLQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [ppc64]
+ os: [linux]
+ libc: [glibc]
+
+ '@oxc-parser/binding-linux-riscv64-gnu@0.117.0':
+ resolution: {integrity: sha512-ur/WVZF9FSOiZGxyP+nfxZzuv6r5OJDYoVxJnUR7fM/hhXLh4V/be6rjbzm9KLCDBRwYCEKJtt+XXNccwd06IA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [riscv64]
+ os: [linux]
+ libc: [glibc]
+
+ '@oxc-parser/binding-linux-riscv64-gnu@0.126.0':
+ resolution: {integrity: sha512-DHx1rT1zauW0ZbLHOiQh5AC9Xs3UkWx2XmfZHs+7nnWYr3sagrufoUQC+/XPwwjMIlCFXiFGM0sFh3TyOCZwqA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [riscv64]
+ os: [linux]
+ libc: [glibc]
+
+ '@oxc-parser/binding-linux-riscv64-gnu@0.127.0':
+ resolution: {integrity: sha512-fPP8M6zQLS7Jz7o9d5ArUSuAuSK3e+WCYVrCpdzeCOejidtZExJ9tjhDrAd3HEPqARBCPmdpqxESPFqy44vkBQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [riscv64]
+ os: [linux]
+ libc: [glibc]
+
+ '@oxc-parser/binding-linux-riscv64-musl@0.117.0':
+ resolution: {integrity: sha512-ujGcAx8xAMvhy7X5sBFi3GXML1EtyORuJZ5z2T6UV3U416WgDX/4OCi3GnoteeenvxIf6JgP45B+YTHpt71vpA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [riscv64]
+ os: [linux]
+ libc: [musl]
+
+ '@oxc-parser/binding-linux-riscv64-musl@0.126.0':
+ resolution: {integrity: sha512-umDc2mTShH0U2zcEYf8mIJ163seLJNn54ZUZYeI5jD4qlg9izPwoLrC2aNPKlMJTu6u/ysmQWiEvIiaAG+INkw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [riscv64]
+ os: [linux]
+ libc: [musl]
+
+ '@oxc-parser/binding-linux-riscv64-musl@0.127.0':
+ resolution: {integrity: sha512-7IcC4Ao02oGpfnjt+X/oF4U2mllo2qoSkw5xxiXNKL9MCTsTiAC6616beOuehdxGcnz1bRoPC1RQ2f1GQDdN+g==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [riscv64]
+ os: [linux]
+ libc: [musl]
+
+ '@oxc-parser/binding-linux-s390x-gnu@0.117.0':
+ resolution: {integrity: sha512-hbsfKjUwRjcMZZvvmpZSc+qS0bHcHRu8aV/I3Ikn9BzOA0ZAgUE7ctPtce5zCU7bM8dnTLi4sJ1Pi9YHdx6Urw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [s390x]
+ os: [linux]
+ libc: [glibc]
+
+ '@oxc-parser/binding-linux-s390x-gnu@0.126.0':
+ resolution: {integrity: sha512-PXXeWayclRtO1pxQEeCpiqIglQdhK2mAI2VX5xnsWdImzSB5GpoQ8TNw7vTCKk2k+GZuxl+q1knncidjCyUP9w==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [s390x]
+ os: [linux]
+ libc: [glibc]
+
+ '@oxc-parser/binding-linux-s390x-gnu@0.127.0':
+ resolution: {integrity: sha512-pbXIhiNFHoqWeqDNLiJ9JkpHz1IM9k4DXa66x+1GTWMG7iLxtkXgE53iiuKSXwmk3zIYmaPVfBvgcAhS583K4Q==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [s390x]
+ os: [linux]
+ libc: [glibc]
+
+ '@oxc-parser/binding-linux-x64-gnu@0.117.0':
+ resolution: {integrity: sha512-1QrTrf8rige7UPJrYuDKJLQOuJlgkt+nRSJLBMHWNm9TdivzP48HaK3f4q18EjNlglKtn03lgjMu4fryDm8X4A==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
+
+ '@oxc-parser/binding-linux-x64-gnu@0.126.0':
+ resolution: {integrity: sha512-wzocjxm34TbB3bFlqG65JiLtvf6ZDg2ZxRkLLbgXwDQUNU+0MPjQN8zy/0jBKNA5fnPLk3XeVdZ7Uin+7+CVkg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
+
+ '@oxc-parser/binding-linux-x64-gnu@0.127.0':
+ resolution: {integrity: sha512-MYCguB9RvBvlSd6gbuNI7QwiLoCCAlGnlRJFPrzLI6U1/9wkC/WK6LtBAUln55H1Ctqw45PWmqrobKoMhsYQzQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
+
+ '@oxc-parser/binding-linux-x64-musl@0.117.0':
+ resolution: {integrity: sha512-gRvK6HPzF5ITRL68fqb2WYYs/hGviPIbkV84HWCgiJX+LkaOpp+HIHQl3zVZdyKHwopXToTbXbtx/oFjDjl8pg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
+
+ '@oxc-parser/binding-linux-x64-musl@0.126.0':
+ resolution: {integrity: sha512-e83uftP60jmkPs2+CW6T6A1GYzN2H6IumDAiTntv9WyHR73PI3ImHNBkYqnA3ukeKI3xjcCbhSh9QeJWmufxGQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
+
+ '@oxc-parser/binding-linux-x64-musl@0.127.0':
+ resolution: {integrity: sha512-5eY0B/bxf1xIUxb4NOTvOI3KWtBQfPWYyKAzgcrCt0mDibSZygVpO1Pz8bkeiSZ5Jj9+M09dkggG3H8I5d0Uyg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
+
+ '@oxc-parser/binding-openharmony-arm64@0.117.0':
+ resolution: {integrity: sha512-QPJvFbnnDZZY7xc+xpbIBWLThcGBakwaYA9vKV8b3+oS5MGfAZUoTFJcix5+Zg2Ri46sOfrUim6Y6jsKNcssAQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [openharmony]
+
+ '@oxc-parser/binding-openharmony-arm64@0.126.0':
+ resolution: {integrity: sha512-4WiOILHnPrTDY2/L4mE6PZCYwLN1d3ghma6BuTJ452CCgzRMt3uFplCtR+o3r9zdUWJYb370UizpI9CUcWXr1A==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [openharmony]
+
+ '@oxc-parser/binding-openharmony-arm64@0.127.0':
+ resolution: {integrity: sha512-Gld0ajrFTUXNtdw20fVBuTQx66FA75nIVg+//pPfR3sXkuABB4mTBhl3r9JNzrJpgW//qiwxf0nWXUWGJSL3UQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [openharmony]
+
+ '@oxc-parser/binding-wasm32-wasi@0.117.0':
+ resolution: {integrity: sha512-+XRSNA0xt3pk/6CUHM7pykVe7M8SdifJk8LX1+fIp/zefvR3HBieZCbwG5un8gogNgh7srLycoh/cQA9uozv5g==}
+ engines: {node: '>=14.0.0'}
+ cpu: [wasm32]
+
+ '@oxc-parser/binding-wasm32-wasi@0.126.0':
+ resolution: {integrity: sha512-Y17hhnrQTrxgAxAyAq401vnN9URsAL4s5AjqpG1NDsXSlhe1yBNnns+rC2P6xcMoitgX5nKH2ryYt9oiFRlzLw==}
+ engines: {node: '>=14.0.0'}
+ cpu: [wasm32]
+
+ '@oxc-parser/binding-wasm32-wasi@0.127.0':
+ resolution: {integrity: sha512-T6KVD7rhLzFlwGRXMnxUFfkCZD8FHnb968wVXW1mXzgRFc5RNXOBY2mPPDZ77x5Ln76ltLMgtPg0cOkU1NSrEQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [wasm32]
+
+ '@oxc-parser/binding-win32-arm64-msvc@0.117.0':
+ resolution: {integrity: sha512-GpxeGS+Vo030DsrXeRPc7OSJOQIyAHkM3mzwBcnQjg/79XnOIDDMXJ5X6/aNdkVt/+Pv35pqKzGA4TQau97x8w==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [win32]
+
+ '@oxc-parser/binding-win32-arm64-msvc@0.126.0':
+ resolution: {integrity: sha512-Znug1u1iRvT4VC3jANz6nhGBHsFwEFMxuimYpJFwMtsB6H5FcEoZRMmH26tHkSTD03JvDmG+gB65W3ajLjPcSw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [win32]
+
+ '@oxc-parser/binding-win32-arm64-msvc@0.127.0':
+ resolution: {integrity: sha512-Ujvw4X+LD1CCGULcsQcvb4YNVoBGqt+JHgNNzGGaCImELiZLk477ifUH53gIbE7EKd933NdTi25JWEr9K2HwXw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [win32]
+
+ '@oxc-parser/binding-win32-ia32-msvc@0.117.0':
+ resolution: {integrity: sha512-tchWEYiso1+objTZirmlR+w3fcIel6PVBOJ8NuC2Jr30dxBOiKUfFLovJLANwHg1+TzeD6pVSLIIIEf2T5o5lQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [ia32]
+ os: [win32]
+
+ '@oxc-parser/binding-win32-ia32-msvc@0.126.0':
+ resolution: {integrity: sha512-qrw7mx5hFFTxVSXToOA40hpnjgNB/DJprZchtB4rDKNLKqkD3F26HbzaQeH1nxAKej0efSZfJd5Sw3qdtOLGhw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [ia32]
+ os: [win32]
+
+ '@oxc-parser/binding-win32-ia32-msvc@0.127.0':
+ resolution: {integrity: sha512-0cwxKO7KHQQQfo4Uf4B2SQrhgm+cJaP9OvFFhx52Tkg4bezsacu83GB2/In5bC415Ueeym+kXdnge/57rbSfTw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [ia32]
+ os: [win32]
+
+ '@oxc-parser/binding-win32-x64-msvc@0.117.0':
+ resolution: {integrity: sha512-ysRJAjIbB4e5y+t9PZs7TwbgOV/GVT//s30AORLCT/pedYwpYzHq6ApXK7is9fvyfZtgT3anNir8+esurmyaDw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [win32]
+
+ '@oxc-parser/binding-win32-x64-msvc@0.126.0':
+ resolution: {integrity: sha512-ibB1s+mPUFXvS7MFJO2jpw/aCNs/P6ifnWlRyTYB+WYBpniOiCcHQQskZneJtwcjQMDRol3RGG3ihoYnzXSY4w==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [win32]
+
+ '@oxc-parser/binding-win32-x64-msvc@0.127.0':
+ resolution: {integrity: sha512-rOrnSQSCbhI2kowr9XxE7m9a8oQXnBHjnS6j95LxxAnEZ0+Fz20WlRXG4ondQb+ejjt2KOsa65sE6++L6kUd+w==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
os: [win32]
- '@oxc-project/types@0.112.0':
- resolution: {integrity: sha512-m6RebKHIRsax2iCwVpYW2ErQwa4ywHJrE4sCK3/8JK8ZZAWOKXaRJFl/uP51gaVyyXlaS4+chU1nSCdzYf6QqQ==}
+ '@oxc-project/runtime@0.101.0':
+ resolution: {integrity: sha512-t3qpfVZIqSiLQ5Kqt/MC4Ge/WCOGrrcagAdzTcDaggupjiGxUx4nJF2v6wUCXWSzWHn5Ns7XLv13fCJEwCOERQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+
+ '@oxc-project/types@0.101.0':
+ resolution: {integrity: sha512-nuFhqlUzJX+gVIPPfuE6xurd4lST3mdcWOhyK/rZO0B9XWMKm79SuszIQEnSMmmDhq1DC8WWVYGVd+6F93o1gQ==}
+
+ '@oxc-project/types@0.117.0':
+ resolution: {integrity: sha512-C/kPXBphID44fXdsa2xSOCuzX8fKZiFxPsvucJ6Yfkr6CJlMA+kNLPNKyLoI+l9XlDsNxBrz6h7IIjKU8pB69w==}
+
+ '@oxc-project/types@0.126.0':
+ resolution: {integrity: sha512-oGfVtjAgwQVVpfBrbtk4e1XDyWHRFta6BS3GWVzrF8xYBT2VGQAk39yJS/wFSMrZqoiCU4oghT3Ch0HaHGIHcQ==}
+
+ '@oxc-project/types@0.127.0':
+ resolution: {integrity: sha512-aIYXQBo4lCbO4z0R3FHeucQHpF46l2LbMdxRvqvuRuW2OxdnSkcng5B8+K12spgLDj93rtN3+J2Vac/TIO+ciQ==}
- '@oxc-transform/binding-android-arm-eabi@0.112.0':
- resolution: {integrity: sha512-r4LuBaPnOAi0eUOBNi880Fm2tO2omH7N1FRrL6+nyz/AjQ+QPPLtoyZJva0O+sKi1buyN/7IzM5p9m+5ANSDbg==}
+ '@oxc-transform/binding-android-arm-eabi@0.117.0':
+ resolution: {integrity: sha512-17giX7h5VR9Eodru4OoSCFdgwLFIaUxeEn8JWe0vMZrAuRbT9NiDTy5dXdbGQBoO8aXPkbGS38FGlvbi31aujw==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm]
os: [android]
- '@oxc-transform/binding-android-arm64@0.112.0':
- resolution: {integrity: sha512-ve46vQcQrY8eGe8990VSlS9gkD+AogJqbtfOkeua+5sQGQTDgeIRRxOm7ktCo19uZc2bEBwXRJITgosd+NRVmQ==}
+ '@oxc-transform/binding-android-arm64@0.117.0':
+ resolution: {integrity: sha512-1LrDd1CPochtLx04pAafdah6QtOQQj0/Evttevi+0u8rCI5FKucIG7pqBHkIQi/y7pycFYIj+GebhET80maeUg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [android]
- '@oxc-transform/binding-darwin-arm64@0.112.0':
- resolution: {integrity: sha512-ddbmLU3Tr+i7MOynfwAXxUXud3SjJKlv7XNjaq08qiI8Av/QvhXVGc2bMhXkWQSMSBUeTDoiughKjK+Zsb6y/A==}
+ '@oxc-transform/binding-darwin-arm64@0.117.0':
+ resolution: {integrity: sha512-K1Xo52xJOvFfHSkz2ax9X5Qsku23RCfTIPbHZWdUCAQ1TQooI+sFcewSubhVUJ4DVK12/tYT//XXboumin+FHA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [darwin]
- '@oxc-transform/binding-darwin-x64@0.112.0':
- resolution: {integrity: sha512-TKvmNw96jQZPqYb4pRrzLFDailNB3YS14KNn+x2hwRbqc6CqY96S9PYwyOpVpYdxfoRjYO9WgX9SoS+62a1DPA==}
+ '@oxc-transform/binding-darwin-x64@0.117.0':
+ resolution: {integrity: sha512-ftFT/8Laolfq49mRRWLkIhd1AbJ0MI5bW3LwddvdoAg9zXwkx4qhzTYyBPRZhvXWftts+NjlHfHsXCOqI4tPtw==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [darwin]
- '@oxc-transform/binding-freebsd-x64@0.112.0':
- resolution: {integrity: sha512-YPMkSCDaelO8HHYRMYjm+Q+IfkfIbdtQzwPuasItYkq8UUkNeHNPheNh2JkvQa3c+io3E9ePOgHQ2yihpk7o/Q==}
+ '@oxc-transform/binding-freebsd-x64@0.117.0':
+ resolution: {integrity: sha512-QDRyw0atg9BMnwOwnJeW6REzWPLEjiWtsCc2Sj612F1hCdvP+n0L3o8sHinEWM+BiOkOYtUxHA69WjUslc3G+g==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [freebsd]
- '@oxc-transform/binding-linux-arm-gnueabihf@0.112.0':
- resolution: {integrity: sha512-nA7kzQGNEpuTRknst/IJ3l8hqmDmEda3aun6jkXgp7gKxESjuHeaNH04mKISxvJ7fIacvP2g/wtTSnm4u5jL8Q==}
+ '@oxc-transform/binding-linux-arm-gnueabihf@0.117.0':
+ resolution: {integrity: sha512-UvpvOjyQVgiIJahIpMT0qAsLJT8O1ibHTBgXGOsZkQgw1xmjARPQ07dpRcucPPn6cqCF3wrxfbqtr2vFHaMkdA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm]
os: [linux]
- '@oxc-transform/binding-linux-arm-musleabihf@0.112.0':
- resolution: {integrity: sha512-w8GuLmckKlGc3YujaZKhtbFxziCcosvM2l9GnQjCb/yENWLGDiyQOy0BTAgPGdJwpYTiOeJblEXSuXYvlE1Ong==}
+ '@oxc-transform/binding-linux-arm-musleabihf@0.117.0':
+ resolution: {integrity: sha512-cIhztGFjKk8ngP+/7EPkEhzWMGr2neezxgWirSn/f/MirjH234oHHGJ2diKIbGQEsy0aOuJMTkL9NLfzfmH51A==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm]
os: [linux]
- '@oxc-transform/binding-linux-arm64-gnu@0.112.0':
- resolution: {integrity: sha512-9LwwGnJ8+WT0rXcrI8M0RJtDNt91eMqcDPPEvJxhRFHIMcHTy5D5xT+fOl3Us0yMqKo3HUWkbfUYqAp4GoZ3Jw==}
+ '@oxc-transform/binding-linux-arm64-gnu@0.117.0':
+ resolution: {integrity: sha512-mXbDfvDN0RZVg7v4LohNzU0kK3fMAZgkUKTkpFVgxEvzibEG5VpSznkypUwHI4a8U8pz+K6mGaLetX3Xt+CvvA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [linux]
libc: [glibc]
- '@oxc-transform/binding-linux-arm64-musl@0.112.0':
- resolution: {integrity: sha512-Lg6VOuSd3oXv7J0eGywgqh/086h+qQzIBOD+47pYKMTTJcbDe+f3h/RgGoMKJE5HhiwT5sH1aGEJfIfaYUiVSw==}
+ '@oxc-transform/binding-linux-arm64-musl@0.117.0':
+ resolution: {integrity: sha512-ykxpPQp0eAcSmhy0Y3qKvdanHY4d8THPonDfmCoktUXb6r0X6qnjpJB3V+taN1wevW55bOEZd97kxtjTKjqhmg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [linux]
libc: [musl]
- '@oxc-transform/binding-linux-ppc64-gnu@0.112.0':
- resolution: {integrity: sha512-PXzmj82o1moA4IGphYImTRgc2youTi4VRfyFX3CHwLjxPcQ5JtcsgbDt4QUdOzXZ+zC07s5jf2ZzhRapEOlj2w==}
+ '@oxc-transform/binding-linux-ppc64-gnu@0.117.0':
+ resolution: {integrity: sha512-Rvspti4Kr7eq6zSrURK5WjscfWQPvmy/KjJZV45neRKW8RLonE3r9+NgrwSLGoHvQ3F24fbqlkplox1RtlhH5A==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [ppc64]
os: [linux]
libc: [glibc]
- '@oxc-transform/binding-linux-riscv64-gnu@0.112.0':
- resolution: {integrity: sha512-vhJsMsVH/6xwa3bt1LGts33FXUkGjaEGDwsRyp4lIfOjSfQVWMtCmWMFNaA0dW9FVWdD2Gt2fSFBSZ+azDxlpg==}
+ '@oxc-transform/binding-linux-riscv64-gnu@0.117.0':
+ resolution: {integrity: sha512-Dr2ZW9ZZ4l1eQ5JUEUY3smBh4JFPCPuybWaDZTLn3ADZjyd8ZtNXEjeMT8rQbbhbgSL9hEgbwaqraole3FNThQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [riscv64]
os: [linux]
libc: [glibc]
- '@oxc-transform/binding-linux-riscv64-musl@0.112.0':
- resolution: {integrity: sha512-cXWFb7z+2IjFUEcXtRwluq9oEG5qnyFCjiu3SWrgYNcWwPdHusv3I/7K5/CTbbi4StoZ5txbi7/iSfDHNyWuRw==}
+ '@oxc-transform/binding-linux-riscv64-musl@0.117.0':
+ resolution: {integrity: sha512-oD1Bnes1bIC3LVBSrWEoSUBj6fvatESPwAVWfJVGVQlqWuOs/ZBn1e4Nmbipo3KGPHK7DJY75r/j7CQCxhrOFQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [riscv64]
os: [linux]
libc: [musl]
- '@oxc-transform/binding-linux-s390x-gnu@0.112.0':
- resolution: {integrity: sha512-eEFu4SRqJTJ20/88KRWmp+jpHKAw0Y1DsnSgpEeXyBIIcsOaLIUMU/TfYWUmqRbvbMV9rmOmI3kp5xWYUq6kSQ==}
+ '@oxc-transform/binding-linux-s390x-gnu@0.117.0':
+ resolution: {integrity: sha512-qT//IAPLvse844t99Kff5j055qEbXfwzWgvCMb0FyjisnB8foy25iHZxZIocNBe6qwrCYWUP1M8rNrB/WyfS1Q==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [s390x]
os: [linux]
libc: [glibc]
- '@oxc-transform/binding-linux-x64-gnu@0.112.0':
- resolution: {integrity: sha512-ST1MDT+TlOyZ1c5btrGinRSUW2Jf4Pa+0gdKwsyjDSOC3dxy2ZNkN3mosTf4ywc3J+mxfYKqtjs7zSwHz03ILA==}
+ '@oxc-transform/binding-linux-x64-gnu@0.117.0':
+ resolution: {integrity: sha512-2YEO5X+KgNzFqRVO5dAkhjcI5gwxus4NSWVl/+cs2sI6P0MNPjqE3VWPawl4RTC11LvetiiZdHcujUCPM8aaUw==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [linux]
libc: [glibc]
- '@oxc-transform/binding-linux-x64-musl@0.112.0':
- resolution: {integrity: sha512-ISQoA3pD4cyTGpf9sXXeerH6pL2L6EIpdy6oAy2ttkswyVFDyQNVOVIGIdLZDgbpmqGljxZnWqt/J/N68pQaig==}
+ '@oxc-transform/binding-linux-x64-musl@0.117.0':
+ resolution: {integrity: sha512-3wqWbTSaIFZvDr1aqmTul4cg8PRWYh6VC52E8bLI7ytgS/BwJLW+sDUU2YaGIds4sAf/1yKeJRmudRCDPW9INg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [linux]
libc: [musl]
- '@oxc-transform/binding-openharmony-arm64@0.112.0':
- resolution: {integrity: sha512-UOGVrGIv7yLJovyEXEyUTADuLq98vd/cbMHFLJweRXD+11I8Tn4jASi4WzdsN8C3BVYGRHrXH2NlSBmhz33a4g==}
+ '@oxc-transform/binding-openharmony-arm64@0.117.0':
+ resolution: {integrity: sha512-Ebxx6NPqhzlrjvx4+PdSqbOq+li0f7X59XtJljDghkbJsbnkHvhLmPR09ifHt5X32UlZN63ekjwcg/nbmHLLlA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [openharmony]
- '@oxc-transform/binding-wasm32-wasi@0.112.0':
- resolution: {integrity: sha512-XIX7Gpq9koAvzBVHDlVFHM79r5uOVK6kTEsdsN4qaajpjkgtv4tdsAOKIYK6l7fUbsbE6xS+6w1+yRFrDeC1kg==}
+ '@oxc-transform/binding-wasm32-wasi@0.117.0':
+ resolution: {integrity: sha512-Nn8mmcBiQ0XKHLTb05QBlH+CDkn7jf5YDVv9FtKhy4zJT0NEU9y3dXVbfcurOpsVrG9me4ktzDQNCaAoJjUQyw==}
engines: {node: '>=14.0.0'}
cpu: [wasm32]
- '@oxc-transform/binding-win32-arm64-msvc@0.112.0':
- resolution: {integrity: sha512-EgXef9kOne9BNsbYBbuRqxk2hteT0xsAGcx/VbtCBMJYNj8fANFhT271DUSOgfa4DAgrQQmsyt/Kr1aV9mpU9w==}
+ '@oxc-transform/binding-win32-arm64-msvc@0.117.0':
+ resolution: {integrity: sha512-15cbsF8diXWGnHrTsVgVeabETiT/KdMAfRAcot99xsaVecJs3pITNNjC6Qj+/TPNpehbgIFjlhhxOVSbQsTBgg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [win32]
- '@oxc-transform/binding-win32-ia32-msvc@0.112.0':
- resolution: {integrity: sha512-6QaB0qjNaou2YR+blncHdw7j0e26IOwOIjLbhVGDeuf9+4rjJeiqRXJ2hOtCcS4zblnao/MjdgQuZ3fM0nl+Kw==}
+ '@oxc-transform/binding-win32-ia32-msvc@0.117.0':
+ resolution: {integrity: sha512-I6DkhCuFX6p9rckdWiLuZfBWrrYUC7sNX+zLaCfa5zvrPNwo1/29KkefvqXVxu3AWT/6oZAbtc0A8/mqhETJPQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [ia32]
os: [win32]
- '@oxc-transform/binding-win32-x64-msvc@0.112.0':
- resolution: {integrity: sha512-FRKYlY959QeqRPx9kXs0HjU2xuXPT1cdF+vvA200D9uAX/KLcC34MwRqUKTYml4kCc2Vf/P2pBR9cQuBm3zECQ==}
+ '@oxc-transform/binding-win32-x64-msvc@0.117.0':
+ resolution: {integrity: sha512-V7YzavQnYcRJBeJkp0qpb3FKrlm5I57XJetCYB4jsjStuboQmnFMZ/XQH55Szlf/kVyeU9ddQwv72gJJ5BrGjQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [win32]
+ '@package-json/types@0.0.12':
+ resolution: {integrity: sha512-uu43FGU34B5VM9mCNjXCwLaGHYjXdNincqKLaraaCW+7S2+SmiBg1Nv8bPnmschrIfZmfKNY9f3fC376MRrObw==}
+
'@parcel/watcher-android-arm64@2.5.6':
resolution: {integrity: sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==}
engines: {node: '>= 10.0.0'}
@@ -1868,17 +1991,17 @@ packages:
'@poppinss/colors@4.1.6':
resolution: {integrity: sha512-H9xkIdFswbS8n1d6vmRd8+c10t2Qe+rZITbbDHHkQixH5+2x1FDGmi/0K+WgWiqQFKPSlIYB7jlH6Kpfn6Fleg==}
- '@poppinss/dumper@0.6.5':
- resolution: {integrity: sha512-NBdYIb90J7LfOI32dOewKI1r7wnkiH6m920puQ3qHUeZkxNkQiFnXVWoE6YtFSv6QOiPPf7ys6i+HWWecDz7sw==}
+ '@poppinss/dumper@0.7.0':
+ resolution: {integrity: sha512-0UTYalzk2t6S4rA2uHOz5bSSW2CHdv4vggJI6Alg90yvl0UgXs6XSXpH96OH+bRkX4J/06djv29pqXJ0lq5Kag==}
'@poppinss/exception@1.2.3':
resolution: {integrity: sha512-dCED+QRChTVatE9ibtoaxc+WkdzOSjYTKi/+uacHWIsfodVfpsueo3+DKpgU5Px8qXjgmXkSvhXvSCz3fnP9lw==}
- '@posthog/core@1.21.0':
- resolution: {integrity: sha512-0a2JUIX1vhduP2El/6/J8s5AeYAurIoufQGFgMiGnJE5ajd63o9LFocu2vFYYBnIOmy75y4ADNeW8zSl1keEQQ==}
+ '@posthog/core@1.27.1':
+ resolution: {integrity: sha512-130F5zAmGoY0KAqdT2FYfU79mk54z0wTWfCMkyzXmkKz2eg23694O2ofaAf4NuIdI8e6LFNHyaZ7aWbatUeW5A==}
- '@posthog/types@1.345.0':
- resolution: {integrity: sha512-9zcsJhzO9BPBrGQDL/w7M9un3TQ7w0wiwnK5ZFfwvujhxsIS/GfcpBM/P51aE3bgzNhxpEcUkjL+60uthTentA==}
+ '@posthog/types@1.371.2':
+ resolution: {integrity: sha512-Ak3kuGMPBTjuoK6Ki0kQbq9eROk7LRJ3GBkbQINCZBT9FPlHvlXRwQr0/OVsi4xYPSMSGxWjRDMPFsR9Px66Cg==}
'@protobufjs/aspromise@1.1.2':
resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==}
@@ -1994,11 +2117,95 @@ packages:
resolution: {integrity: sha512-FqALmHI8D4o6lk/LRWDnhw95z5eO+eAa6ORjVg09YRR7BkcM6oPHU9uyC0gtQG5vpFLvgpeU4+zEAz2H8APHNw==}
engines: {node: '>= 10'}
- '@rolldown/pluginutils@1.0.0-rc.2':
- resolution: {integrity: sha512-izyXV/v+cHiRfozX62W9htOAvwMo4/bXKDrQ+vom1L1qRuexPock/7VZDAhnpHCLNejd3NJ6hiab+tO0D44Rgw==}
+ '@rolldown/binding-android-arm64@1.0.0-beta.53':
+ resolution: {integrity: sha512-Ok9V8o7o6YfSdTTYA/uHH30r3YtOxLD6G3wih/U9DO0ucBBFq8WPt/DslU53OgfteLRHITZny9N/qCUxMf9kjQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [android]
+
+ '@rolldown/binding-darwin-arm64@1.0.0-beta.53':
+ resolution: {integrity: sha512-yIsKqMz0CtRnVa6x3Pa+mzTihr4Ty+Z6HfPbZ7RVbk1Uxnco4+CUn7Qbm/5SBol1JD/7nvY8rphAgyAi7Lj6Vg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@rolldown/binding-darwin-x64@1.0.0-beta.53':
+ resolution: {integrity: sha512-GTXe+mxsCGUnJOFMhfGWmefP7Q9TpYUseHvhAhr21nCTgdS8jPsvirb0tJwM3lN0/u/cg7bpFNa16fQrjKrCjQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [darwin]
+
+ '@rolldown/binding-freebsd-x64@1.0.0-beta.53':
+ resolution: {integrity: sha512-9Tmp7bBvKqyDkMcL4e089pH3RsjD3SUungjmqWtyhNOxoQMh0fSmINTyYV8KXtE+JkxYMPWvnEt+/mfpVCkk8w==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.53':
+ resolution: {integrity: sha512-a1y5fiB0iovuzdbjUxa7+Zcvgv+mTmlGGC4XydVIsyl48eoxgaYkA3l9079hyTyhECsPq+mbr0gVQsFU11OJAQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [linux]
+
+ '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.53':
+ resolution: {integrity: sha512-bpIGX+ov9PhJYV+wHNXl9rzq4F0QvILiURn0y0oepbQx+7stmQsKA0DhPGwmhfvF856wq+gbM8L92SAa/CBcLg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
+
+ '@rolldown/binding-linux-arm64-musl@1.0.0-beta.53':
+ resolution: {integrity: sha512-bGe5EBB8FVjHBR1mOLOPEFg1Lp3//7geqWkU5NIhxe+yH0W8FVrQ6WRYOap4SUTKdklD/dC4qPLREkMMQ855FA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
+
+ '@rolldown/binding-linux-x64-gnu@1.0.0-beta.53':
+ resolution: {integrity: sha512-qL+63WKVQs1CMvFedlPt0U9PiEKJOAL/bsHMKUDS6Vp2Q+YAv/QLPu8rcvkfIMvQ0FPU2WL0aX4eWwF6e/GAnA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
+
+ '@rolldown/binding-linux-x64-musl@1.0.0-beta.53':
+ resolution: {integrity: sha512-VGl9JIGjoJh3H8Mb+7xnVqODajBmrdOOb9lxWXdcmxyI+zjB2sux69br0hZJDTyLJfvBoYm439zPACYbCjGRmw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
+
+ '@rolldown/binding-openharmony-arm64@1.0.0-beta.53':
+ resolution: {integrity: sha512-B4iIserJXuSnNzA5xBLFUIjTfhNy7d9sq4FUMQY3GhQWGVhS2RWWzzDnkSU6MUt7/aHUrep0CdQfXUJI9D3W7A==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [openharmony]
+
+ '@rolldown/binding-wasm32-wasi@1.0.0-beta.53':
+ resolution: {integrity: sha512-BUjAEgpABEJXilGq/BPh7jeU3WAJ5o15c1ZEgHaDWSz3LB881LQZnbNJHmUiM4d1JQWMYYyR1Y490IBHi2FPJg==}
+ engines: {node: '>=14.0.0'}
+ cpu: [wasm32]
+
+ '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.53':
+ resolution: {integrity: sha512-s27uU7tpCWSjHBnxyVXHt3rMrQdJq5MHNv3BzsewCIroIw3DJFjMH1dzCPPMUFxnh1r52Nf9IJ/eWp6LDoyGcw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [win32]
+
+ '@rolldown/binding-win32-x64-msvc@1.0.0-beta.53':
+ resolution: {integrity: sha512-cjWL/USPJ1g0en2htb4ssMjIycc36RvdQAx1WlXnS6DpULswiUTVXPDesTifSKYSyvx24E0YqQkEm0K/M2Z/AA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [win32]
+
+ '@rolldown/pluginutils@1.0.0-beta.53':
+ resolution: {integrity: sha512-vENRlFU4YbrwVqNDZ7fLvy+JR1CRkyr01jhSiDpE1u6py3OMzQfztQU2jxykW3ALNxO4kSlqIDeYyD0Y9RcQeQ==}
- '@rolldown/pluginutils@1.0.0-rc.3':
- resolution: {integrity: sha512-eybk3TjzzzV97Dlj5c+XrBFW57eTNhzod66y9HrBlzJ6NsCrWCp/2kaPS3K9wJmurBC0Tdw4yPjXKZqlznim3Q==}
+ '@rolldown/pluginutils@1.0.0-rc.13':
+ resolution: {integrity: sha512-3ngTAv6F/Py35BsYbeeLeecvhMKdsKm4AoOETVhAA+Qc8nrA2I0kF7oa93mE9qnIurngOSpMnQ0x2nQY2FPviA==}
+
+ '@rolldown/pluginutils@1.0.0-rc.17':
+ resolution: {integrity: sha512-n8iosDOt6Ig1UhJ2AYqoIhHWh/isz0xpicHTzpKBeotdVsTEcxsSA/i3EVM7gQAj0rU27OLAxCjzlj15IWY7bg==}
'@rollup/plugin-alias@6.0.0':
resolution: {integrity: sha512-tPCzJOtS7uuVZd+xPhoy5W4vThe6KWXNmsFCNktaAh5RTqcLiSfT4huPQIXkgJ6YCOjJHvecOAzQxLFhPxKr+g==}
@@ -2009,8 +2216,8 @@ packages:
rollup:
optional: true
- '@rollup/plugin-commonjs@29.0.0':
- resolution: {integrity: sha512-U2YHaxR2cU/yAiwKJtJRhnyLk7cifnQw0zUpISsocBDoHDJn+HTV74ABqnwr5bEgWUwFZC9oFL6wLe21lHu5eQ==}
+ '@rollup/plugin-commonjs@29.0.2':
+ resolution: {integrity: sha512-S/ggWH1LU7jTyi9DxZOKyxpVd4hF/OZ0JrEbeLjXk/DFXwRny0tjD2c992zOUYQobLrVkRVMDdmHP16HKP7GRg==}
engines: {node: '>=16.0.0 || 14 >= 14.17'}
peerDependencies:
rollup: ^2.68.0||^3.0.0||^4.0.0
@@ -2054,9 +2261,9 @@ packages:
rollup:
optional: true
- '@rollup/plugin-terser@0.4.4':
- resolution: {integrity: sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A==}
- engines: {node: '>=14.0.0'}
+ '@rollup/plugin-terser@1.0.0':
+ resolution: {integrity: sha512-FnCxhTBx6bMOYQrar6C8h3scPt8/JwIzw3+AJ2K++6guogH5fYaIFia+zZuhqv0eo1RN7W1Pz630SyvLbDjhtQ==}
+ engines: {node: '>=20.0.0'}
peerDependencies:
rollup: ^2.0.0||^3.0.0||^4.0.0
peerDependenciesMeta:
@@ -2072,175 +2279,184 @@ packages:
rollup:
optional: true
- '@rollup/rollup-android-arm-eabi@4.57.1':
- resolution: {integrity: sha512-A6ehUVSiSaaliTxai040ZpZ2zTevHYbvu/lDoeAteHI8QnaosIzm4qwtezfRg1jOYaUmnzLX1AOD6Z+UJjtifg==}
+ '@rollup/rollup-android-arm-eabi@4.60.2':
+ resolution: {integrity: sha512-dnlp69efPPg6Uaw2dVqzWRfAWRnYVb1XJ8CyyhIbZeaq4CA5/mLeZ1IEt9QqQxmbdvagjLIm2ZL8BxXv5lH4Yw==}
cpu: [arm]
os: [android]
- '@rollup/rollup-android-arm64@4.57.1':
- resolution: {integrity: sha512-dQaAddCY9YgkFHZcFNS/606Exo8vcLHwArFZ7vxXq4rigo2bb494/xKMMwRRQW6ug7Js6yXmBZhSBRuBvCCQ3w==}
+ '@rollup/rollup-android-arm64@4.60.2':
+ resolution: {integrity: sha512-OqZTwDRDchGRHHm/hwLOL7uVPB9aUvI0am/eQuWMNyFHf5PSEQmyEeYYheA0EPPKUO/l0uigCp+iaTjoLjVoHg==}
cpu: [arm64]
os: [android]
- '@rollup/rollup-darwin-arm64@4.57.1':
- resolution: {integrity: sha512-crNPrwJOrRxagUYeMn/DZwqN88SDmwaJ8Cvi/TN1HnWBU7GwknckyosC2gd0IqYRsHDEnXf328o9/HC6OkPgOg==}
+ '@rollup/rollup-darwin-arm64@4.60.2':
+ resolution: {integrity: sha512-UwRE7CGpvSVEQS8gUMBe1uADWjNnVgP3Iusyda1nSRwNDCsRjnGc7w6El6WLQsXmZTbLZx9cecegumcitNfpmA==}
cpu: [arm64]
os: [darwin]
- '@rollup/rollup-darwin-x64@4.57.1':
- resolution: {integrity: sha512-Ji8g8ChVbKrhFtig5QBV7iMaJrGtpHelkB3lsaKzadFBe58gmjfGXAOfI5FV0lYMH8wiqsxKQ1C9B0YTRXVy4w==}
+ '@rollup/rollup-darwin-x64@4.60.2':
+ resolution: {integrity: sha512-gjEtURKLCC5VXm1I+2i1u9OhxFsKAQJKTVB8WvDAHF+oZlq0GTVFOlTlO1q3AlCTE/DF32c16ESvfgqR7343/g==}
cpu: [x64]
os: [darwin]
- '@rollup/rollup-freebsd-arm64@4.57.1':
- resolution: {integrity: sha512-R+/WwhsjmwodAcz65guCGFRkMb4gKWTcIeLy60JJQbXrJ97BOXHxnkPFrP+YwFlaS0m+uWJTstrUA9o+UchFug==}
+ '@rollup/rollup-freebsd-arm64@4.60.2':
+ resolution: {integrity: sha512-Bcl6CYDeAgE70cqZaMojOi/eK63h5Me97ZqAQoh77VPjMysA/4ORQBRGo3rRy45x4MzVlU9uZxs8Uwy7ZaKnBw==}
cpu: [arm64]
os: [freebsd]
- '@rollup/rollup-freebsd-x64@4.57.1':
- resolution: {integrity: sha512-IEQTCHeiTOnAUC3IDQdzRAGj3jOAYNr9kBguI7MQAAZK3caezRrg0GxAb6Hchg4lxdZEI5Oq3iov/w/hnFWY9Q==}
+ '@rollup/rollup-freebsd-x64@4.60.2':
+ resolution: {integrity: sha512-LU+TPda3mAE2QB0/Hp5VyeKJivpC6+tlOXd1VMoXV/YFMvk/MNk5iXeBfB4MQGRWyOYVJ01625vjkr0Az98OJQ==}
cpu: [x64]
os: [freebsd]
- '@rollup/rollup-linux-arm-gnueabihf@4.57.1':
- resolution: {integrity: sha512-F8sWbhZ7tyuEfsmOxwc2giKDQzN3+kuBLPwwZGyVkLlKGdV1nvnNwYD0fKQ8+XS6hp9nY7B+ZeK01EBUE7aHaw==}
+ '@rollup/rollup-linux-arm-gnueabihf@4.60.2':
+ resolution: {integrity: sha512-2QxQrM+KQ7DAW4o22j+XZ6RKdxjLD7BOWTP0Bv0tmjdyhXSsr2Ul1oJDQqh9Zf5qOwTuTc7Ek83mOFaKnodPjg==}
cpu: [arm]
os: [linux]
libc: [glibc]
- '@rollup/rollup-linux-arm-musleabihf@4.57.1':
- resolution: {integrity: sha512-rGfNUfn0GIeXtBP1wL5MnzSj98+PZe/AXaGBCRmT0ts80lU5CATYGxXukeTX39XBKsxzFpEeK+Mrp9faXOlmrw==}
+ '@rollup/rollup-linux-arm-musleabihf@4.60.2':
+ resolution: {integrity: sha512-TbziEu2DVsTEOPif2mKWkMeDMLoYjx95oESa9fkQQK7r/Orta0gnkcDpzwufEcAO2BLBsD7mZkXGFqEdMRRwfw==}
cpu: [arm]
os: [linux]
libc: [musl]
- '@rollup/rollup-linux-arm64-gnu@4.57.1':
- resolution: {integrity: sha512-MMtej3YHWeg/0klK2Qodf3yrNzz6CGjo2UntLvk2RSPlhzgLvYEB3frRvbEF2wRKh1Z2fDIg9KRPe1fawv7C+g==}
+ '@rollup/rollup-linux-arm64-gnu@4.60.2':
+ resolution: {integrity: sha512-bO/rVDiDUuM2YfuCUwZ1t1cP+/yqjqz+Xf2VtkdppefuOFS2OSeAfgafaHNkFn0t02hEyXngZkxtGqXcXwO8Rg==}
cpu: [arm64]
os: [linux]
libc: [glibc]
- '@rollup/rollup-linux-arm64-musl@4.57.1':
- resolution: {integrity: sha512-1a/qhaaOXhqXGpMFMET9VqwZakkljWHLmZOX48R0I/YLbhdxr1m4gtG1Hq7++VhVUmf+L3sTAf9op4JlhQ5u1Q==}
+ '@rollup/rollup-linux-arm64-musl@4.60.2':
+ resolution: {integrity: sha512-hr26p7e93Rl0Za+JwW7EAnwAvKkehh12BU1Llm9Ykiibg4uIr2rbpxG9WCf56GuvidlTG9KiiQT/TXT1yAWxTA==}
cpu: [arm64]
os: [linux]
libc: [musl]
- '@rollup/rollup-linux-loong64-gnu@4.57.1':
- resolution: {integrity: sha512-QWO6RQTZ/cqYtJMtxhkRkidoNGXc7ERPbZN7dVW5SdURuLeVU7lwKMpo18XdcmpWYd0qsP1bwKPf7DNSUinhvA==}
+ '@rollup/rollup-linux-loong64-gnu@4.60.2':
+ resolution: {integrity: sha512-pOjB/uSIyDt+ow3k/RcLvUAOGpysT2phDn7TTUB3n75SlIgZzM6NKAqlErPhoFU+npgY3/n+2HYIQVbF70P9/A==}
cpu: [loong64]
os: [linux]
libc: [glibc]
- '@rollup/rollup-linux-loong64-musl@4.57.1':
- resolution: {integrity: sha512-xpObYIf+8gprgWaPP32xiN5RVTi/s5FCR+XMXSKmhfoJjrpRAjCuuqQXyxUa/eJTdAE6eJ+KDKaoEqjZQxh3Gw==}
+ '@rollup/rollup-linux-loong64-musl@4.60.2':
+ resolution: {integrity: sha512-2/w+q8jszv9Ww1c+6uJT3OwqhdmGP2/4T17cu8WuwyUuuaCDDJ2ojdyYwZzCxx0GcsZBhzi3HmH+J5pZNXnd+Q==}
cpu: [loong64]
os: [linux]
libc: [musl]
- '@rollup/rollup-linux-ppc64-gnu@4.57.1':
- resolution: {integrity: sha512-4BrCgrpZo4hvzMDKRqEaW1zeecScDCR+2nZ86ATLhAoJ5FQ+lbHVD3ttKe74/c7tNT9c6F2viwB3ufwp01Oh2w==}
+ '@rollup/rollup-linux-ppc64-gnu@4.60.2':
+ resolution: {integrity: sha512-11+aL5vKheYgczxtPVVRhdptAM2H7fcDR5Gw4/bTcteuZBlH4oP9f5s9zYO9aGZvoGeBpqXI/9TZZihZ609wKw==}
cpu: [ppc64]
os: [linux]
libc: [glibc]
- '@rollup/rollup-linux-ppc64-musl@4.57.1':
- resolution: {integrity: sha512-NOlUuzesGauESAyEYFSe3QTUguL+lvrN1HtwEEsU2rOwdUDeTMJdO5dUYl/2hKf9jWydJrO9OL/XSSf65R5+Xw==}
+ '@rollup/rollup-linux-ppc64-musl@4.60.2':
+ resolution: {integrity: sha512-i16fokAGK46IVZuV8LIIwMdtqhin9hfYkCh8pf8iC3QU3LpwL+1FSFGej+O7l3E/AoknL6Dclh2oTdnRMpTzFQ==}
cpu: [ppc64]
os: [linux]
libc: [musl]
- '@rollup/rollup-linux-riscv64-gnu@4.57.1':
- resolution: {integrity: sha512-ptA88htVp0AwUUqhVghwDIKlvJMD/fmL/wrQj99PRHFRAG6Z5nbWoWG4o81Nt9FT+IuqUQi+L31ZKAFeJ5Is+A==}
+ '@rollup/rollup-linux-riscv64-gnu@4.60.2':
+ resolution: {integrity: sha512-49FkKS6RGQoriDSK/6E2GkAsAuU5kETFCh7pG4yD/ylj9rKhTmO3elsnmBvRD4PgJPds5W2PkhC82aVwmUcJ7A==}
cpu: [riscv64]
os: [linux]
libc: [glibc]
- '@rollup/rollup-linux-riscv64-musl@4.57.1':
- resolution: {integrity: sha512-S51t7aMMTNdmAMPpBg7OOsTdn4tySRQvklmL3RpDRyknk87+Sp3xaumlatU+ppQ+5raY7sSTcC2beGgvhENfuw==}
+ '@rollup/rollup-linux-riscv64-musl@4.60.2':
+ resolution: {integrity: sha512-mjYNkHPfGpUR00DuM1ZZIgs64Hpf4bWcz9Z41+4Q+pgDx73UwWdAYyf6EG/lRFldmdHHzgrYyge5akFUW0D3mQ==}
cpu: [riscv64]
os: [linux]
libc: [musl]
- '@rollup/rollup-linux-s390x-gnu@4.57.1':
- resolution: {integrity: sha512-Bl00OFnVFkL82FHbEqy3k5CUCKH6OEJL54KCyx2oqsmZnFTR8IoNqBF+mjQVcRCT5sB6yOvK8A37LNm/kPJiZg==}
+ '@rollup/rollup-linux-s390x-gnu@4.60.2':
+ resolution: {integrity: sha512-ALyvJz965BQk8E9Al/JDKKDLH2kfKFLTGMlgkAbbYtZuJt9LU8DW3ZoDMCtQpXAltZxwBHevXz5u+gf0yA0YoA==}
cpu: [s390x]
os: [linux]
libc: [glibc]
- '@rollup/rollup-linux-x64-gnu@4.57.1':
- resolution: {integrity: sha512-ABca4ceT4N+Tv/GtotnWAeXZUZuM/9AQyCyKYyKnpk4yoA7QIAuBt6Hkgpw8kActYlew2mvckXkvx0FfoInnLg==}
+ '@rollup/rollup-linux-x64-gnu@4.60.2':
+ resolution: {integrity: sha512-UQjrkIdWrKI626Du8lCQ6MJp/6V1LAo2bOK9OTu4mSn8GGXIkPXk/Vsp4bLHCd9Z9Iz2OTEaokUE90VweJgIYQ==}
cpu: [x64]
os: [linux]
libc: [glibc]
- '@rollup/rollup-linux-x64-musl@4.57.1':
- resolution: {integrity: sha512-HFps0JeGtuOR2convgRRkHCekD7j+gdAuXM+/i6kGzQtFhlCtQkpwtNzkNj6QhCDp7DRJ7+qC/1Vg2jt5iSOFw==}
+ '@rollup/rollup-linux-x64-musl@4.60.2':
+ resolution: {integrity: sha512-bTsRGj6VlSdn/XD4CGyzMnzaBs9bsRxy79eTqTCBsA8TMIEky7qg48aPkvJvFe1HyzQ5oMZdg7AnVlWQSKLTnw==}
cpu: [x64]
os: [linux]
libc: [musl]
- '@rollup/rollup-openbsd-x64@4.57.1':
- resolution: {integrity: sha512-H+hXEv9gdVQuDTgnqD+SQffoWoc0Of59AStSzTEj/feWTBAnSfSD3+Dql1ZruJQxmykT/JVY0dE8Ka7z0DH1hw==}
+ '@rollup/rollup-openbsd-x64@4.60.2':
+ resolution: {integrity: sha512-6d4Z3534xitaA1FcMWP7mQPq5zGwBmGbhphh2DwaA1aNIXUu3KTOfwrWpbwI4/Gr0uANo7NTtaykFyO2hPuFLg==}
cpu: [x64]
os: [openbsd]
- '@rollup/rollup-openharmony-arm64@4.57.1':
- resolution: {integrity: sha512-4wYoDpNg6o/oPximyc/NG+mYUejZrCU2q+2w6YZqrAs2UcNUChIZXjtafAiiZSUc7On8v5NyNj34Kzj/Ltk6dQ==}
+ '@rollup/rollup-openharmony-arm64@4.60.2':
+ resolution: {integrity: sha512-NetAg5iO2uN7eB8zE5qrZ3CSil+7IJt4WDFLcC75Ymywq1VZVD6qJ6EvNLjZ3rEm6gB7XW5JdT60c6MN35Z85Q==}
cpu: [arm64]
os: [openharmony]
- '@rollup/rollup-win32-arm64-msvc@4.57.1':
- resolution: {integrity: sha512-O54mtsV/6LW3P8qdTcamQmuC990HDfR71lo44oZMZlXU4tzLrbvTii87Ni9opq60ds0YzuAlEr/GNwuNluZyMQ==}
+ '@rollup/rollup-win32-arm64-msvc@4.60.2':
+ resolution: {integrity: sha512-NCYhOotpgWZ5kdxCZsv6Iudx0wX8980Q/oW4pNFNihpBKsDbEA1zpkfxJGC0yugsUuyDZ7gL37dbzwhR0VI7pQ==}
cpu: [arm64]
os: [win32]
- '@rollup/rollup-win32-ia32-msvc@4.57.1':
- resolution: {integrity: sha512-P3dLS+IerxCT/7D2q2FYcRdWRl22dNbrbBEtxdWhXrfIMPP9lQhb5h4Du04mdl5Woq05jVCDPCMF7Ub0NAjIew==}
+ '@rollup/rollup-win32-ia32-msvc@4.60.2':
+ resolution: {integrity: sha512-RXsaOqXxfoUBQoOgvmmijVxJnW2IGB0eoMO7F8FAjaj0UTywUO/luSqimWBJn04WNgUkeNhh7fs7pESXajWmkg==}
cpu: [ia32]
os: [win32]
- '@rollup/rollup-win32-x64-gnu@4.57.1':
- resolution: {integrity: sha512-VMBH2eOOaKGtIJYleXsi2B8CPVADrh+TyNxJ4mWPnKfLB/DBUmzW+5m1xUrcwWoMfSLagIRpjUFeW5CO5hyciQ==}
+ '@rollup/rollup-win32-x64-gnu@4.60.2':
+ resolution: {integrity: sha512-qdAzEULD+/hzObedtmV6iBpdL5TIbKVztGiK7O3/KYSf+HIzU257+MX1EXJcyIiDbMAqmbwaufcYPvyRryeZtA==}
cpu: [x64]
os: [win32]
- '@rollup/rollup-win32-x64-msvc@4.57.1':
- resolution: {integrity: sha512-mxRFDdHIWRxg3UfIIAwCm6NzvxG0jDX/wBN6KsQFTvKFqqg9vTrWUE68qEjHt19A5wwx5X5aUi2zuZT7YR0jrA==}
+ '@rollup/rollup-win32-x64-msvc@4.60.2':
+ resolution: {integrity: sha512-Nd/SgG27WoA9e+/TdK74KnHz852TLa94ovOYySo/yMPuTmpckK/jIF2jSwS3g7ELSKXK13/cVdmg1Z/DaCWKxA==}
cpu: [x64]
os: [win32]
- '@sec-ant/readable-stream@0.4.1':
- resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==}
+ '@shikijs/core@4.0.2':
+ resolution: {integrity: sha512-hxT0YF4ExEqB8G/qFdtJvpmHXBYJ2lWW7qTHDarVkIudPFE6iCIrqdgWxGn5s+ppkGXI0aEGlibI0PAyzP3zlw==}
+ engines: {node: '>=20'}
- '@shikijs/core@3.22.0':
- resolution: {integrity: sha512-iAlTtSDDbJiRpvgL5ugKEATDtHdUVkqgHDm/gbD2ZS9c88mx7G1zSYjjOxp5Qa0eaW0MAQosFRmJSk354PRoQA==}
+ '@shikijs/engine-javascript@4.0.2':
+ resolution: {integrity: sha512-7PW0Nm49DcoUIQEXlJhNNBHyoGMjalRETTCcjMqEaMoJRLljy1Bi/EGV3/qLBgLKQejdspiiYuHGQW6dX94Nag==}
+ engines: {node: '>=20'}
- '@shikijs/engine-javascript@3.22.0':
- resolution: {integrity: sha512-jdKhfgW9CRtj3Tor0L7+yPwdG3CgP7W+ZEqSsojrMzCjD1e0IxIbwUMDDpYlVBlC08TACg4puwFGkZfLS+56Tw==}
+ '@shikijs/engine-oniguruma@4.0.2':
+ resolution: {integrity: sha512-UpCB9Y2sUKlS9z8juFSKz7ZtysmeXCgnRF0dlhXBkmQnek7lAToPte8DkxmEYGNTMii72zU/lyXiCB6StuZeJg==}
+ engines: {node: '>=20'}
- '@shikijs/engine-oniguruma@3.22.0':
- resolution: {integrity: sha512-DyXsOG0vGtNtl7ygvabHd7Mt5EY8gCNqR9Y7Lpbbd/PbJvgWrqaKzH1JW6H6qFkuUa8aCxoiYVv8/YfFljiQxA==}
+ '@shikijs/langs@4.0.2':
+ resolution: {integrity: sha512-KaXby5dvoeuZzN0rYQiPMjFoUrz4hgwIE+D6Du9owcHcl6/g16/yT5BQxSW5cGt2MZBz6Hl0YuRqf12omRfUUg==}
+ engines: {node: '>=20'}
- '@shikijs/langs@3.22.0':
- resolution: {integrity: sha512-x/42TfhWmp6H00T6uwVrdTJGKgNdFbrEdhaDwSR5fd5zhQ1Q46bHq9EO61SCEWJR0HY7z2HNDMaBZp8JRmKiIA==}
+ '@shikijs/primitive@4.0.2':
+ resolution: {integrity: sha512-M6UMPrSa3fN5ayeJwFVl9qWofl273wtK1VG8ySDZ1mQBfhCpdd8nEx7nPZ/tk7k+TYcpqBZzj/AnwxT9lO+HJw==}
+ engines: {node: '>=20'}
- '@shikijs/themes@3.22.0':
- resolution: {integrity: sha512-o+tlOKqsr6FE4+mYJG08tfCFDS+3CG20HbldXeVoyP+cYSUxDhrFf3GPjE60U55iOkkjbpY2uC3It/eeja35/g==}
+ '@shikijs/themes@4.0.2':
+ resolution: {integrity: sha512-mjCafwt8lJJaVSsQvNVrJumbnnj1RI8jbUKrPKgE6E3OvQKxnuRoBaYC51H4IGHePsGN/QtALglWBU7DoKDFnA==}
+ engines: {node: '>=20'}
- '@shikijs/transformers@3.22.0':
- resolution: {integrity: sha512-E7eRV7mwDBjueLF6852n2oYeJYxBq3NSsDk+uyruYAXONv4U8holGmIrT+mPRJQ1J1SNOH6L8G19KRzmBawrFw==}
+ '@shikijs/transformers@4.0.2':
+ resolution: {integrity: sha512-1+L0gf9v+SdDXs08vjaLb3mBFa8U7u37cwcBQIv/HCocLwX69Tt6LpUCjtB+UUTvQxI7BnjZKhN/wMjhHBcJGg==}
+ engines: {node: '>=20'}
- '@shikijs/types@3.22.0':
- resolution: {integrity: sha512-491iAekgKDBFE67z70Ok5a8KBMsQ2IJwOWw3us/7ffQkIBCyOQfm/aNwVMBUriP02QshIfgHCBSIYAl3u2eWjg==}
+ '@shikijs/types@4.0.2':
+ resolution: {integrity: sha512-qzbeRooUTPnLE+sHD/Z8DStmaDgnbbc/pMrU203950aRqjX/6AFHeDYT+j00y2lPdz0ywJKx7o/7qnqTivtlXg==}
+ engines: {node: '>=20'}
'@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
+ '@simple-git/args-pathspec@1.0.3':
+ resolution: {integrity: sha512-ngJMaHlsWDTfjyq9F3VIQ8b7NXbBLq5j9i5bJ6XLYtD6qlDXT7fdKY2KscWWUF8t18xx052Y/PUO1K1TRc9yKA==}
+
+ '@simple-git/argv-parser@1.1.1':
+ resolution: {integrity: sha512-Q9lBcfQ+VQCpQqGJFHe5yooOS5hGdLFFbJ5R+R5aDsnkPCahtn1hSkMcORX65J2Z5lxSkD0lQorMsncuBQxYUw==}
'@sindresorhus/base62@1.0.0':
resolution: {integrity: sha512-TeheYy0ILzBEI/CO55CP6zJCSdSWeRtGnHy8U8dWSUH4I68iqTsy7HkMktR4xakThc9jotkPQUXT4ITdbV7cHA==}
@@ -2261,8 +2477,8 @@ packages:
'@socket.io/component-emitter@3.1.2':
resolution: {integrity: sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==}
- '@speed-highlight/core@1.2.14':
- resolution: {integrity: sha512-G4ewlBNhUtlLvrJTb88d2mdy2KRijzs4UhnlrOSRT4bmjh/IqNElZa3zkrZ+TC47TwtlDWzVLFADljF1Ijp5hA==}
+ '@speed-highlight/core@1.2.15':
+ resolution: {integrity: sha512-BMq1K3DsElxDWawkX6eLg9+CKJrTVGCBAWVuHXVUV2u0s2711qiChLSId6ikYPfxhdYocLNt3wWwSvDiTvFabw==}
'@sqlite.org/sqlite-wasm@3.50.4-build1':
resolution: {integrity: sha512-Qig2Wso7gPkU1PtXwFzndh+CTRzrIFxVGqv6eCetjU7YqxlHItj+GvQYwYTppCRgAPawtRN/4AJcEgB9xDHGug==}
@@ -2271,82 +2487,82 @@ packages:
'@standard-schema/spec@1.1.0':
resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==}
- '@stylistic/eslint-plugin@5.8.0':
- resolution: {integrity: sha512-WNPVF/FfBAjyi3OA7gok8swRiImNLKI4dmV3iK/GC/0xSJR7eCzBFsw9hLZVgb1+MYNLy7aDsjohxN1hA/FIfQ==}
+ '@stylistic/eslint-plugin@5.10.0':
+ resolution: {integrity: sha512-nPK52ZHvot8Ju/0A4ucSX1dcPV2/1clx0kLcH5wDmrE4naKso7TUC/voUyU1O9OTKTrR6MYip6LP0ogEMQ9jPQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- eslint: '>=9.0.0'
+ eslint: ^9.0.0 || ^10.0.0
- '@swc/helpers@0.5.18':
- resolution: {integrity: sha512-TXTnIcNJQEKwThMMqBXsZ4VGAza6bvN4pa41Rkqoio6QBKMvo+5lexeTMScGCIxtzgQJzElcvIltani+adC5PQ==}
+ '@swc/helpers@0.5.21':
+ resolution: {integrity: sha512-jI/VAmtdjB/RnI8GTnokyX7Ug8c+g+ffD6QRLa6XQewtnGyukKkKSk3wLTM3b5cjt1jNh9x0jfVlagdN2gDKQg==}
'@szmarczak/http-timer@4.0.6':
resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==}
engines: {node: '>=10'}
- '@tailwindcss/node@4.1.18':
- resolution: {integrity: sha512-DoR7U1P7iYhw16qJ49fgXUlry1t4CpXeErJHnQ44JgTSKMaZUdf17cfn5mHchfJ4KRBZRFA/Coo+MUF5+gOaCQ==}
+ '@tailwindcss/node@4.2.4':
+ resolution: {integrity: sha512-Ai7+yQPxz3ddrDQzFfBKdHEVBg0w3Zl83jnjuwxnZOsnH9pGn93QHQtpU0p/8rYWxvbFZHneni6p1BSLK4DkGA==}
- '@tailwindcss/oxide-android-arm64@4.1.18':
- resolution: {integrity: sha512-dJHz7+Ugr9U/diKJA0W6N/6/cjI+ZTAoxPf9Iz9BFRF2GzEX8IvXxFIi/dZBloVJX/MZGvRuFA9rqwdiIEZQ0Q==}
- engines: {node: '>= 10'}
+ '@tailwindcss/oxide-android-arm64@4.2.4':
+ resolution: {integrity: sha512-e7MOr1SAn9U8KlZzPi1ZXGZHeC5anY36qjNwmZv9pOJ8E4Q6jmD1vyEHkQFmNOIN7twGPEMXRHmitN4zCMN03g==}
+ engines: {node: '>= 20'}
cpu: [arm64]
os: [android]
- '@tailwindcss/oxide-darwin-arm64@4.1.18':
- resolution: {integrity: sha512-Gc2q4Qhs660bhjyBSKgq6BYvwDz4G+BuyJ5H1xfhmDR3D8HnHCmT/BSkvSL0vQLy/nkMLY20PQ2OoYMO15Jd0A==}
- engines: {node: '>= 10'}
+ '@tailwindcss/oxide-darwin-arm64@4.2.4':
+ resolution: {integrity: sha512-tSC/Kbqpz/5/o/C2sG7QvOxAKqyd10bq+ypZNf+9Fi2TvbVbv1zNpcEptcsU7DPROaSbVgUXmrzKhurFvo5eDg==}
+ engines: {node: '>= 20'}
cpu: [arm64]
os: [darwin]
- '@tailwindcss/oxide-darwin-x64@4.1.18':
- resolution: {integrity: sha512-FL5oxr2xQsFrc3X9o1fjHKBYBMD1QZNyc1Xzw/h5Qu4XnEBi3dZn96HcHm41c/euGV+GRiXFfh2hUCyKi/e+yw==}
- engines: {node: '>= 10'}
+ '@tailwindcss/oxide-darwin-x64@4.2.4':
+ resolution: {integrity: sha512-yPyUXn3yO/ufR6+Kzv0t4fCg2qNr90jxXc5QqBpjlPNd0NqyDXcmQb/6weunH/MEDXW5dhyEi+agTDiqa3WsGg==}
+ engines: {node: '>= 20'}
cpu: [x64]
os: [darwin]
- '@tailwindcss/oxide-freebsd-x64@4.1.18':
- resolution: {integrity: sha512-Fj+RHgu5bDodmV1dM9yAxlfJwkkWvLiRjbhuO2LEtwtlYlBgiAT4x/j5wQr1tC3SANAgD+0YcmWVrj8R9trVMA==}
- engines: {node: '>= 10'}
+ '@tailwindcss/oxide-freebsd-x64@4.2.4':
+ resolution: {integrity: sha512-BoMIB4vMQtZsXdGLVc2z+P9DbETkiopogfWZKbWwM8b/1Vinbs4YcUwo+kM/KeLkX3Ygrf4/PsRndKaYhS8Eiw==}
+ engines: {node: '>= 20'}
cpu: [x64]
os: [freebsd]
- '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.18':
- resolution: {integrity: sha512-Fp+Wzk/Ws4dZn+LV2Nqx3IilnhH51YZoRaYHQsVq3RQvEl+71VGKFpkfHrLM/Li+kt5c0DJe/bHXK1eHgDmdiA==}
- engines: {node: '>= 10'}
+ '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.4':
+ resolution: {integrity: sha512-7pIHBLTHYRAlS7V22JNuTh33yLH4VElwKtB3bwchK/UaKUPpQ0lPQiOWcbm4V3WP2I6fNIJ23vABIvoy2izdwA==}
+ engines: {node: '>= 20'}
cpu: [arm]
os: [linux]
- '@tailwindcss/oxide-linux-arm64-gnu@4.1.18':
- resolution: {integrity: sha512-S0n3jboLysNbh55Vrt7pk9wgpyTTPD0fdQeh7wQfMqLPM/Hrxi+dVsLsPrycQjGKEQk85Kgbx+6+QnYNiHalnw==}
- engines: {node: '>= 10'}
+ '@tailwindcss/oxide-linux-arm64-gnu@4.2.4':
+ resolution: {integrity: sha512-+E4wxJ0ZGOzSH325reXTWB48l42i93kQqMvDyz5gqfRzRZ7faNhnmvlV4EPGJU3QJM/3Ab5jhJ5pCRUsKn6OQw==}
+ engines: {node: '>= 20'}
cpu: [arm64]
os: [linux]
libc: [glibc]
- '@tailwindcss/oxide-linux-arm64-musl@4.1.18':
- resolution: {integrity: sha512-1px92582HkPQlaaCkdRcio71p8bc8i/ap5807tPRDK/uw953cauQBT8c5tVGkOwrHMfc2Yh6UuxaH4vtTjGvHg==}
- engines: {node: '>= 10'}
+ '@tailwindcss/oxide-linux-arm64-musl@4.2.4':
+ resolution: {integrity: sha512-bBADEGAbo4ASnppIziaQJelekCxdMaxisrk+fB7Thit72IBnALp9K6ffA2G4ruj90G9XRS2VQ6q2bCKbfFV82g==}
+ engines: {node: '>= 20'}
cpu: [arm64]
os: [linux]
libc: [musl]
- '@tailwindcss/oxide-linux-x64-gnu@4.1.18':
- resolution: {integrity: sha512-v3gyT0ivkfBLoZGF9LyHmts0Isc8jHZyVcbzio6Wpzifg/+5ZJpDiRiUhDLkcr7f/r38SWNe7ucxmGW3j3Kb/g==}
- engines: {node: '>= 10'}
+ '@tailwindcss/oxide-linux-x64-gnu@4.2.4':
+ resolution: {integrity: sha512-7Mx25E4WTfnht0TVRTyC00j3i0M+EeFe7wguMDTlX4mRxafznw0CA8WJkFjWYH5BlgELd1kSjuU2JiPnNZbJDA==}
+ engines: {node: '>= 20'}
cpu: [x64]
os: [linux]
libc: [glibc]
- '@tailwindcss/oxide-linux-x64-musl@4.1.18':
- resolution: {integrity: sha512-bhJ2y2OQNlcRwwgOAGMY0xTFStt4/wyU6pvI6LSuZpRgKQwxTec0/3Scu91O8ir7qCR3AuepQKLU/kX99FouqQ==}
- engines: {node: '>= 10'}
+ '@tailwindcss/oxide-linux-x64-musl@4.2.4':
+ resolution: {integrity: sha512-2wwJRF7nyhOR0hhHoChc04xngV3iS+akccHTGtz965FwF0up4b2lOdo6kI1EbDaEXKgvcrFBYcYQQ/rrnWFVfA==}
+ engines: {node: '>= 20'}
cpu: [x64]
os: [linux]
libc: [musl]
- '@tailwindcss/oxide-wasm32-wasi@4.1.18':
- resolution: {integrity: sha512-LffYTvPjODiP6PT16oNeUQJzNVyJl1cjIebq/rWWBF+3eDst5JGEFSc5cWxyRCJ0Mxl+KyIkqRxk1XPEs9x8TA==}
+ '@tailwindcss/oxide-wasm32-wasi@4.2.4':
+ resolution: {integrity: sha512-FQsqApeor8Fo6gUEklzmaa9994orJZZDBAlQpK2Mq+DslRKFJeD6AjHpBQ0kZFQohVr8o85PPh8eOy86VlSCmw==}
engines: {node: '>=14.0.0'}
cpu: [wasm32]
bundledDependencies:
@@ -2357,47 +2573,331 @@ packages:
- '@emnapi/wasi-threads'
- tslib
- '@tailwindcss/oxide-win32-arm64-msvc@4.1.18':
- resolution: {integrity: sha512-HjSA7mr9HmC8fu6bdsZvZ+dhjyGCLdotjVOgLA2vEqxEBZaQo9YTX4kwgEvPCpRh8o4uWc4J/wEoFzhEmjvPbA==}
- engines: {node: '>= 10'}
+ '@tailwindcss/oxide-win32-arm64-msvc@4.2.4':
+ resolution: {integrity: sha512-L9BXqxC4ToVgwMFqj3pmZRqyHEztulpUJzCxUtLjobMCzTPsGt1Fa9enKbOpY2iIyVtaHNeNvAK8ERP/64sqGQ==}
+ engines: {node: '>= 20'}
cpu: [arm64]
os: [win32]
- '@tailwindcss/oxide-win32-x64-msvc@4.1.18':
- resolution: {integrity: sha512-bJWbyYpUlqamC8dpR7pfjA0I7vdF6t5VpUGMWRkXVE3AXgIZjYUYAK7II1GNaxR8J1SSrSrppRar8G++JekE3Q==}
- engines: {node: '>= 10'}
+ '@tailwindcss/oxide-win32-x64-msvc@4.2.4':
+ resolution: {integrity: sha512-ESlKG0EpVJQwRjXDDa9rLvhEAh0mhP1sF7sap9dNZT0yyl9SAG6T7gdP09EH0vIv0UNTlo6jPWyujD6559fZvw==}
+ engines: {node: '>= 20'}
cpu: [x64]
os: [win32]
- '@tailwindcss/oxide@4.1.18':
- resolution: {integrity: sha512-EgCR5tTS5bUSKQgzeMClT6iCY3ToqE1y+ZB0AKldj809QXk1Y+3jB0upOYZrn9aGIzPtUsP7sX4QQ4XtjBB95A==}
- engines: {node: '>= 10'}
+ '@tailwindcss/oxide@4.2.4':
+ resolution: {integrity: sha512-9El/iI069DKDSXwTvB9J4BwdO5JhRrOweGaK25taBAvBXyXqJAX+Jqdvs8r8gKpsI/1m0LeJLyQYTf/WLrBT1Q==}
+ engines: {node: '>= 20'}
- '@tailwindcss/postcss@4.1.18':
- resolution: {integrity: sha512-Ce0GFnzAOuPyfV5SxjXGn0CubwGcuDB0zcdaPuCSzAa/2vII24JTkH+I6jcbXLb1ctjZMZZI6OjDaLPJQL1S0g==}
+ '@tailwindcss/postcss@4.2.4':
+ resolution: {integrity: sha512-wgAVj6nUWAolAu8YFvzT2cTBIElWHkjZwFYovF+xsqKsW2ADxM/X2opxj5NsF/qVccAOjRNe8X2IdPzMsWyHTg==}
- '@tailwindcss/vite@4.1.18':
- resolution: {integrity: sha512-jVA+/UpKL1vRLg6Hkao5jldawNmRo7mQYrZtNHMIVpLfLhDml5nMRUo/8MwoX2vNXvnaXNNMedrMfMugAVX1nA==}
+ '@tailwindcss/vite@4.2.4':
+ resolution: {integrity: sha512-pCvohwOCspk3ZFn6eJzrrX3g4n2JY73H6MmYC87XfGPyTty4YsCjYTMArRZm/zOI8dIt3+EcrLHAFPe5A4bgtw==}
peerDependencies:
- vite: ^5.2.0 || ^6 || ^7
-
- '@tanstack/table-core@8.21.3':
- resolution: {integrity: sha512-ldZXEhOBb8Is7xLs01fR3YEc3DERiz5silj8tnGkFZytt1abEvl/GhUmCE0PMLaMPTa3Jk4HbKmRlHmu+gCftg==}
- engines: {node: '>=12'}
+ vite: ^5.2.0 || ^6 || ^7 || ^8
- '@tanstack/virtual-core@3.13.18':
- resolution: {integrity: sha512-Mx86Hqu1k39icq2Zusq+Ey2J6dDWTjDvEv43PJtRCoEYTLyfaPnxIQ6iy7YAOK0NV/qOEmZQ/uCufrppZxTgcg==}
+ '@takumi-rs/core-darwin-arm64@1.1.0':
+ resolution: {integrity: sha512-M67gDmZ+AVQOyx1TEaPhPWjnOx1tTEfS6n1tHM8PWpDVwkOUb1omc8k91CcZeQX6Aijcw/OmsqtfEXk1Arz3cg==}
+ engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'}
+ cpu: [arm64]
+ os: [darwin]
- '@tanstack/vue-table@8.21.3':
- resolution: {integrity: sha512-rusRyd77c5tDPloPskctMyPLFEQUeBzxdQ+2Eow4F7gDPlPOB1UnnhzfpdvqZ8ZyX2rRNGmqNnQWm87OI2OQPw==}
- engines: {node: '>=12'}
- peerDependencies:
- vue: '>=3.2'
+ '@takumi-rs/core-darwin-x64@1.1.0':
+ resolution: {integrity: sha512-KwYDZyFD+xsvuN8BpRsQWyhtaBUjQg2Tsg0ZooJX6G9DAko7A0xAbpny3sQnQGF4McukcGq9y6JX0wUbCDqaow==}
+ engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'}
+ cpu: [x64]
+ os: [darwin]
- '@tanstack/vue-virtual@3.13.18':
- resolution: {integrity: sha512-6pT8HdHtTU5Z+t906cGdCroUNA5wHjFXsNss9gwk7QAr1VNZtz9IQCs2Nhx0gABK48c+OocHl2As+TMg8+Hy4A==}
- peerDependencies:
- vue: ^2.7.0 || ^3.0.0
+ '@takumi-rs/core-linux-arm64-gnu@1.1.0':
+ resolution: {integrity: sha512-sQ4/H0uQ5GohithfOOEwsuhlyt4MXdkZV4W+QGorIu04+H/xuKKd1NxT7oK27KnwvM/xFBu82Hh7zl1zqdyZKg==}
+ engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
+
+ '@takumi-rs/core-linux-arm64-musl@1.1.0':
+ resolution: {integrity: sha512-ewXKuY4XGJ1RV+wGMATcU6wVjAauzx+T7S753XBtTkFMdnxpSDaM+Z7wuNKIhydNI8IGmgxpkJ2Gf/qMSbYldA==}
+ engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
+
+ '@takumi-rs/core-linux-x64-gnu@1.1.0':
+ resolution: {integrity: sha512-rX6hdRLptTI2fL+cu3vVTFNGc2iLpWlYKJHxc2sjrlscojj/guJvQfac1JBR32hz8/c1NhrUknp4NNGhmDWr0A==}
+ engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
+
+ '@takumi-rs/core-linux-x64-musl@1.1.0':
+ resolution: {integrity: sha512-JM6TMEA+tOYM20YgfjEGyarr5twjxMTQfY/xENDhXra9YNkmTrIka2dbuVI1j3QPuIfvl645ZJ5zt0nuDBM6Ow==}
+ engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
+
+ '@takumi-rs/core-win32-arm64-msvc@1.1.0':
+ resolution: {integrity: sha512-qDgiQYh/CAccSCWiLz2sqB5LFkIoj8xqKWrkhJET0p81GvTG5ofl+XPKXl4aE6P00Y20YnO8m/Aeo7SrEYf/xw==}
+ engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@takumi-rs/core-win32-x64-msvc@1.1.0':
+ resolution: {integrity: sha512-5Jytj4dGWjdlAexomsRf2tlslOhKEG0YHXsaGhDgCIJ5o2d3w0HYd+PTjGgBKJu2xQrVZ69pB6NyCJ8h4P6MEA==}
+ engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'}
+ cpu: [x64]
+ os: [win32]
+
+ '@takumi-rs/core@1.1.0':
+ resolution: {integrity: sha512-NLHRoL5hiAtMrL5fZpgY5RbmQvB2NzBYMH/9yC5i/KdPXqreHcC2ARXZckRC6lQ9lWVo0CQ4N83VGxMY/S7Bxw==}
+ engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'}
+
+ '@takumi-rs/helpers@1.1.0':
+ resolution: {integrity: sha512-grNwspEyfVRMvZ5cy4KJLdsRfnyvS3wmw9+zD9sa5CPllshnvVDWfkLILOaxqs0Mcq+RqzDX37rQZ1X9eKtltg==}
+ peerDependencies:
+ react: ^19.2.5
+ react-dom: ^18.0.0 || ^19.0.0
+ peerDependenciesMeta:
+ react:
+ optional: true
+ react-dom:
+ optional: true
+
+ '@tanstack/table-core@8.21.3':
+ resolution: {integrity: sha512-ldZXEhOBb8Is7xLs01fR3YEc3DERiz5silj8tnGkFZytt1abEvl/GhUmCE0PMLaMPTa3Jk4HbKmRlHmu+gCftg==}
+ engines: {node: '>=12'}
+
+ '@tanstack/virtual-core@3.14.0':
+ resolution: {integrity: sha512-JLANqGy/D6k4Ujmh8Tr25lGimuOXNiaVyXaCAZS0W+1390sADdGnyUdSWNIfd49gebtIxGMij4IktRVzrdr12Q==}
+
+ '@tanstack/vue-table@8.21.3':
+ resolution: {integrity: sha512-rusRyd77c5tDPloPskctMyPLFEQUeBzxdQ+2Eow4F7gDPlPOB1UnnhzfpdvqZ8ZyX2rRNGmqNnQWm87OI2OQPw==}
+ engines: {node: '>=12'}
+ peerDependencies:
+ vue: '>=3.2'
+
+ '@tanstack/vue-virtual@3.13.24':
+ resolution: {integrity: sha512-A0k2qF0zFSUStXSZkGXABouXr2Tw2Ztl/cVIYG9qy84uR8W7UNjAcX3DvzBS3YnDcwvLxab8v7dbmYBZ39itDA==}
+ peerDependencies:
+ vue: ^2.7.0 || ^3.0.0
+
+ '@tiptap/core@3.22.4':
+ resolution: {integrity: sha512-vGIGm/HpqLg8EAAQXQ+koV+/S828OEpzocfWcPOwo1u2QUVf9dQG47Yy6JJ8zFFaJwfv4dBcOXli+7BrJwsxDQ==}
+ peerDependencies:
+ '@tiptap/pm': 3.22.4
+
+ '@tiptap/extension-blockquote@3.22.4':
+ resolution: {integrity: sha512-7/61kNPbGFhMgM//zMknD0pSb69rGdRIkpulXOWS1JBrFHkH6hjZDfrOETNzgKkO+NlmzVl9rXSTv0xauS3lzA==}
+ peerDependencies:
+ '@tiptap/core': 3.22.4
+
+ '@tiptap/extension-bold@3.22.4':
+ resolution: {integrity: sha512-jIaPKfNOQu2lhpbLDvtwlQqM+mjF+Kk+auHpzYjBnsuwUli1Cl5ZOau7RH+rru/SQvZe1DtpQlANujDywugZAA==}
+ peerDependencies:
+ '@tiptap/core': 3.22.4
+
+ '@tiptap/extension-bubble-menu@3.22.4':
+ resolution: {integrity: sha512-v4pux5Ql3THAEjaLMY4ldtdy/Xy2qU7PJLBkq8ugLp8qicaKC+tpqxp6sGif4vLIjz7Ap5hurRbTNbXzszyyHA==}
+ peerDependencies:
+ '@tiptap/core': 3.22.4
+ '@tiptap/pm': 3.22.4
+
+ '@tiptap/extension-bullet-list@3.22.4':
+ resolution: {integrity: sha512-TB+d3fGcTixYjO7coKqTr1mGTJuqr8hjDCPUFgzuvKyJnBhqWITmBzQ/8CLq4rr6mihgGURbD3N+xkQuPAKFiw==}
+ peerDependencies:
+ '@tiptap/extension-list': 3.22.4
+
+ '@tiptap/extension-code-block@3.22.4':
+ resolution: {integrity: sha512-MEurzNXfMET3rhjpoPJYUgMfxTdTqbzT9+ToFrqNGAHocdXVm6m1hhO2frVC7fEtHPnxXKsn0Z3NUbCRkRTLuA==}
+ peerDependencies:
+ '@tiptap/core': 3.22.4
+ '@tiptap/pm': 3.22.4
+
+ '@tiptap/extension-code@3.22.4':
+ resolution: {integrity: sha512-cnbxmVhAcc7X3G81QUYEmKP0ve2hRmvAiFXBuuv9RUtQlBiRnzmhHoJOMgkX0CsMR7+8kMRpTfeDUYq2xp5s5w==}
+ peerDependencies:
+ '@tiptap/core': 3.22.4
+
+ '@tiptap/extension-collaboration@3.22.4':
+ resolution: {integrity: sha512-4g4DdpvXZyYYCcWs3cO4DwtzhukqI13waYUKfwOcNnQwZ4YOCR83ET/kgqMk/xMAfbymKghbyAZRCc33zD5xvw==}
+ peerDependencies:
+ '@tiptap/core': 3.22.4
+ '@tiptap/pm': 3.22.4
+ '@tiptap/y-tiptap': ^3.0.2
+ yjs: ^13
+
+ '@tiptap/extension-document@3.22.4':
+ resolution: {integrity: sha512-XQKla1+703FqQJC48tPDVgt9ucGiFbIEmQdOg5L5o07z9a6/NzuaZAc+1zJ7NxcUZzy+z6wBn1PrVMTiqiSXlw==}
+ peerDependencies:
+ '@tiptap/core': 3.22.4
+
+ '@tiptap/extension-drag-handle-vue-3@3.22.4':
+ resolution: {integrity: sha512-ySedk/4Szd8M3t2yE+5tjfXyTIwanmQ51jIGxro23D383upDxD0c/lrTk+9+KUWJfsUTqOrJDrzogpRF+F30dQ==}
+ peerDependencies:
+ '@tiptap/extension-drag-handle': 3.22.4
+ '@tiptap/pm': 3.22.4
+ '@tiptap/vue-3': 3.22.4
+ vue: ^3.0.0
+
+ '@tiptap/extension-drag-handle@3.22.4':
+ resolution: {integrity: sha512-VCheiqy0OGrcrxOYt7Kp7MXWMZoEaZp517HnRrdrvcCCO0j2hcrT5mbo1mMPzP/WvTUHkXCmqcLv+uIk3Bdo/g==}
+ peerDependencies:
+ '@tiptap/core': 3.22.4
+ '@tiptap/extension-collaboration': 3.22.4
+ '@tiptap/extension-node-range': 3.22.4
+ '@tiptap/pm': 3.22.4
+ '@tiptap/y-tiptap': ^3.0.2
+
+ '@tiptap/extension-dropcursor@3.22.4':
+ resolution: {integrity: sha512-N9/yMDC35jJp0V/naL0+6gi4gUDUIcPpWEzFdCDWUSYBA8mt41c1kI1ZU7UTKYIBzTClenhYHRc2XKZxxx0+LQ==}
+ peerDependencies:
+ '@tiptap/extensions': 3.22.4
+
+ '@tiptap/extension-floating-menu@3.22.4':
+ resolution: {integrity: sha512-DFuyYxgaZPgxum5z1yvJPbfYCvDdO8geXsdyqt0qYYdiat3aGE4ncJhiLRIFDhSHBhaZg5eCgu/YPYAN6jZnrA==}
+ peerDependencies:
+ '@floating-ui/dom': ^1.0.0
+ '@tiptap/core': 3.22.4
+ '@tiptap/pm': 3.22.4
+
+ '@tiptap/extension-gapcursor@3.22.4':
+ resolution: {integrity: sha512-UYBEUj3SFpKINIE7AdzcyeS3xICK+ee+YLBbuqNXyHStYChjJOohzJehqiqhjR16A88KQQ+ZjgyDcItKGygSog==}
+ peerDependencies:
+ '@tiptap/extensions': 3.22.4
+
+ '@tiptap/extension-hard-break@3.22.4':
+ resolution: {integrity: sha512-xq+a4dE7T6VwApCkh/yU3p30gn3F8g8Arb9CyEZm58/WIJUIGvHSTjDdHmvU16+kiWSBg+wOOsaFHhYjJjxcKA==}
+ peerDependencies:
+ '@tiptap/core': 3.22.4
+
+ '@tiptap/extension-heading@3.22.4':
+ resolution: {integrity: sha512-TUaj5f0Ir5qy9HKKt2ocnwfXKpZDYeHgbbP9gshKFzdq5PLe1RbIgkjfy6bnoI865cYjmPYWRjcT7XsKyIcb9Q==}
+ peerDependencies:
+ '@tiptap/core': 3.22.4
+
+ '@tiptap/extension-horizontal-rule@3.22.4':
+ resolution: {integrity: sha512-cCI1HekGQwhY/MbgaKQ0R/7HcH5ZM1oFAyI/J72QGLC0XnF403S/OXoHMuBWr1mCu8hNiQWCzeNRJUty0iytNw==}
+ peerDependencies:
+ '@tiptap/core': 3.22.4
+ '@tiptap/pm': 3.22.4
+
+ '@tiptap/extension-image@3.22.4':
+ resolution: {integrity: sha512-ZDc+fLaratTQ4IgnKcJJwfUgUgpcHjbZSBi6UQAILJwkflMy1Zxj8mpbma5P934nLSI+uDnR5ret6ZZLNITKhA==}
+ peerDependencies:
+ '@tiptap/core': 3.22.4
+
+ '@tiptap/extension-italic@3.22.4':
+ resolution: {integrity: sha512-fVSDx5AYXgDI3v2zZIqb7V8EewthwM2NJ/ZCX+XaxRsqNEpnjVhgHs7UlvDqK1wj2OJ6zmUNjPtVlAFRxwT+HQ==}
+ peerDependencies:
+ '@tiptap/core': 3.22.4
+
+ '@tiptap/extension-link@3.22.4':
+ resolution: {integrity: sha512-uoP3yus02uwGPVzW2QaEPJWVIrUb/r5nKm6c8DiJv9fNSX1+gykZZMg42c6GwRFLZ/vyfWjVCbAE03VMUqafgA==}
+ peerDependencies:
+ '@tiptap/core': 3.22.4
+ '@tiptap/pm': 3.22.4
+
+ '@tiptap/extension-list-item@3.22.4':
+ resolution: {integrity: sha512-H659KXTvggSypIDWSOJBZ37jh9pKjQriDDvYPYvOZCdfij0D0hsDXN/wXoypArneUkoBdgruHfTtMkFOaQlgkw==}
+ peerDependencies:
+ '@tiptap/extension-list': 3.22.4
+
+ '@tiptap/extension-list-keymap@3.22.4':
+ resolution: {integrity: sha512-t/zhker4oIS78AIGYDdFFfZC6zSBlszfD7z/zqFLGCg5PHNNgkZK5hKj6Vyix6D2SapRn/ajnx+8mhbKIUH5eA==}
+ peerDependencies:
+ '@tiptap/extension-list': 3.22.4
+
+ '@tiptap/extension-list@3.22.4':
+ resolution: {integrity: sha512-Xe8UFvvHmyp/c/TJsFwlwU9CWACYbBirNsluJ3U1+H8BTu1wqdrT/AXR5uIXeyCl5kiWKgX5q71eHWbYFOrqrg==}
+ peerDependencies:
+ '@tiptap/core': 3.22.4
+ '@tiptap/pm': 3.22.4
+
+ '@tiptap/extension-mention@3.22.4':
+ resolution: {integrity: sha512-ZUJ1gCZlH+JGTAT7lVpZjcMAzvIi9hXIyBjOmjL+737NlF+Cfgo+fjHqFQgOSsiO9LEyc3ZMSclmbzII1Jy6IQ==}
+ peerDependencies:
+ '@tiptap/core': 3.22.4
+ '@tiptap/pm': 3.22.4
+ '@tiptap/suggestion': 3.22.4
+
+ '@tiptap/extension-node-range@3.22.4':
+ resolution: {integrity: sha512-AJgZPX9DLDjN1nE4WLQBPHRChxrV3JuWHF6OakZIdO23cuBcg233FCQTqHQ/eNS/tD3J+Kw9gBc4ZUDhBes9gg==}
+ peerDependencies:
+ '@tiptap/core': 3.22.4
+ '@tiptap/pm': 3.22.4
+
+ '@tiptap/extension-ordered-list@3.22.4':
+ resolution: {integrity: sha512-w77hPVf7pcHt97vfrybg/l0t5CimCd4y75OJKuHuo3CfgM5xbUP/gaPNMDyLLe7MYole/UHi/XvG3XjgzqTzAw==}
+ peerDependencies:
+ '@tiptap/extension-list': 3.22.4
+
+ '@tiptap/extension-paragraph@3.22.4':
+ resolution: {integrity: sha512-de6dFkIhigiENESY6rNJ3yTVS/337ybfP30dNPudTwGe9oAu9ZCS+04j6QCvXSjhlI3ULiv7wiSHqrP26Gd+Hw==}
+ peerDependencies:
+ '@tiptap/core': 3.22.4
+
+ '@tiptap/extension-placeholder@3.22.4':
+ resolution: {integrity: sha512-Z3wtWL+KufwkC7CkJge5enAxx4q8C3oOYixme02snY9zfjX3V/1pjAmEfP4wxScgM5GIuTEJ83B9Yz3wRzPA6Q==}
+ peerDependencies:
+ '@tiptap/extensions': 3.22.4
+
+ '@tiptap/extension-strike@3.22.4':
+ resolution: {integrity: sha512-aRHWQj42HiailXSC9LkKYM3jWMcSeGwOjbqM4PiuxQZmHVDRFmeHkfJItOdn2cSHaO0vuEVK+TvrWUWsBFi3pg==}
+ peerDependencies:
+ '@tiptap/core': 3.22.4
+
+ '@tiptap/extension-text@3.22.4':
+ resolution: {integrity: sha512-mM69uUW5cSxIhyEpWXi/YcfyupcJMDLCPEfYi62awH0iOP/LRoCv/nHjJq4Hyj/KxRJbe8HKwIUnqaCUf7m5Pg==}
+ peerDependencies:
+ '@tiptap/core': 3.22.4
+
+ '@tiptap/extension-underline@3.22.4':
+ resolution: {integrity: sha512-08kGdbhIrA6h10GWXqOkqIveaBj5tmxclK208/nUIAlonI9hPd739vu7fmVtpnmqCnSSNpoRtU4u6Gj5at0ZpA==}
+ peerDependencies:
+ '@tiptap/core': 3.22.4
+
+ '@tiptap/extensions@3.22.4':
+ resolution: {integrity: sha512-fOe8VptJvLPs32bNdUYo8SRyljwqKNQVXWW056VoXIc5en/59OdJlJQVeHI0jRRciH3MtrqODi/gfJR0VHNZ8A==}
+ peerDependencies:
+ '@tiptap/core': 3.22.4
+ '@tiptap/pm': 3.22.4
+
+ '@tiptap/markdown@3.22.4':
+ resolution: {integrity: sha512-gcoLOq5TBntw13QdeWMy7yc2X+b9yTplcFb5kpMQNgNoxlu0+jlX4LiBR+E6lOV+m+AtkprHHltTYyKG23bdOw==}
+ peerDependencies:
+ '@tiptap/core': 3.22.4
+ '@tiptap/pm': 3.22.4
+
+ '@tiptap/pm@3.22.4':
+ resolution: {integrity: sha512-hj8Qka6WcHRllHUdeSjDnq2XaisUo4KsoGJc1WcFpoa1Yd+OeD861zUMnV7DFVGdZRy45Obht0CUYJpXQ4yA4w==}
+
+ '@tiptap/starter-kit@3.22.4':
+ resolution: {integrity: sha512-qWjw+vfdin1rzMRpRU4cC5tLTwMJtUpXeQukv+6mOqqvhptuwuZBjUHImVEJaSPoHXS7+1ut+nTnrLyWyEuE5Q==}
+
+ '@tiptap/suggestion@3.22.4':
+ resolution: {integrity: sha512-1buvLZemITTeKmPf2wGFWvvhRFKjdQ+JgMqc67xBraOKeDd8wQi1e2XlhCYAtlVMm5f6j+qlLC/MvwuHI2jHeQ==}
+ peerDependencies:
+ '@tiptap/core': 3.22.4
+ '@tiptap/pm': 3.22.4
+
+ '@tiptap/vue-3@3.22.4':
+ resolution: {integrity: sha512-fcqUWt6LlA5PbcFaDXyV1apWwAs8j80m0kWwoL5+DgKdkGxsB5LgDZU1pTWle0zvR5zmGvJ7LmB6EGAYIBjdmQ==}
+ peerDependencies:
+ '@floating-ui/dom': ^1.0.0
+ '@tiptap/core': 3.22.4
+ '@tiptap/pm': 3.22.4
+ vue: ^3.0.0
+
+ '@tiptap/y-tiptap@3.0.3':
+ resolution: {integrity: sha512-8UvuV4lTisCE9cMTc/X8kRyTn9edUO7Kball0I6wb17VwZSjNDfh/YKtP4O5vcPawEzFHQIvZGq/k1h37kAf0w==}
+ engines: {node: '>=16.0.0', npm: '>=8.0.0'}
+ peerDependencies:
+ prosemirror-model: ^1.7.1
+ prosemirror-state: ^1.2.3
+ prosemirror-view: ^1.9.10
+ y-protocols: ^1.0.1
+ yjs: ^13.5.38
'@tybys/wasm-util@0.10.1':
resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==}
@@ -2405,12 +2905,15 @@ packages:
'@types/cacheable-request@6.0.3':
resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==}
- '@types/debug@4.1.12':
- resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==}
+ '@types/debug@4.1.13':
+ resolution: {integrity: sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==}
'@types/dom-speech-recognition@0.0.1':
resolution: {integrity: sha512-udCxb8DvjcDKfk1WTBzDsxFbLgYxmQGKrE/ricoMqHRNjSlSUCcamVTA5lIQqzY10mY5qCY0QDwBfFEwhfoDPw==}
+ '@types/esrecurse@4.3.1':
+ resolution: {integrity: sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==}
+
'@types/estree@1.0.8':
resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
@@ -2447,6 +2950,9 @@ packages:
'@types/node@25.2.2':
resolution: {integrity: sha512-BkmoP5/FhRYek5izySdkOneRyXYN35I860MFAGupTdebyE66uZaR+bXLHq8k4DirE5DwQi3NuhvRU1jqTVwUrQ==}
+ '@types/node@25.6.0':
+ resolution: {integrity: sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ==}
+
'@types/parse-path@7.1.0':
resolution: {integrity: sha512-EULJ8LApcVEPbrfND0cRQqutIOdiIgJ1Mgrhpy755r14xMohPTEpkV/k28SJvuOs9bHRFW8x+KeDAEPiGQPB9Q==}
deprecated: This is a stub types definition. parse-path provides its own type definitions, so you do not need this installed.
@@ -2475,80 +2981,90 @@ packages:
'@types/web-bluetooth@0.0.21':
resolution: {integrity: sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==}
- '@typescript-eslint/eslint-plugin@8.55.0':
- resolution: {integrity: sha512-1y/MVSz0NglV1ijHC8OT49mPJ4qhPYjiK08YUQVbIOyu+5k862LKUHFkpKHWu//zmr7hDR2rhwUm6gnCGNmGBQ==}
+ '@typescript-eslint/eslint-plugin@8.59.0':
+ resolution: {integrity: sha512-HyAZtpdkgZwpq8Sz3FSUvCR4c+ScbuWa9AksK2Jweub7w4M3yTz4O11AqVJzLYjy/B9ZWPyc81I+mOdJU/bDQw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- '@typescript-eslint/parser': ^8.55.0
- eslint: ^8.57.0 || ^9.0.0
- typescript: '>=4.8.4 <6.0.0'
+ '@typescript-eslint/parser': ^8.59.0
+ eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
+ typescript: '>=4.8.4 <6.1.0'
- '@typescript-eslint/parser@8.55.0':
- resolution: {integrity: sha512-4z2nCSBfVIMnbuu8uinj+f0o4qOeggYJLbjpPHka3KH1om7e+H9yLKTYgksTaHcGco+NClhhY2vyO3HsMH1RGw==}
+ '@typescript-eslint/parser@8.59.0':
+ resolution: {integrity: sha512-TI1XGwKbDpo9tRW8UDIXCOeLk55qe9ZFGs8MTKU6/M08HWTw52DD/IYhfQtOEhEdPhLMT26Ka/x7p70nd3dzDg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- eslint: ^8.57.0 || ^9.0.0
- typescript: '>=4.8.4 <6.0.0'
+ eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
+ typescript: '>=4.8.4 <6.1.0'
- '@typescript-eslint/project-service@8.55.0':
- resolution: {integrity: sha512-zRcVVPFUYWa3kNnjaZGXSu3xkKV1zXy8M4nO/pElzQhFweb7PPtluDLQtKArEOGmjXoRjnUZ29NjOiF0eCDkcQ==}
+ '@typescript-eslint/project-service@8.59.0':
+ resolution: {integrity: sha512-Lw5ITrR5s5TbC19YSvlr63ZfLaJoU6vtKTHyB0GQOpX0W7d5/Ir6vUahWi/8Sps/nOukZQ0IB3SmlxZnjaKVnw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- typescript: '>=4.8.4 <6.0.0'
+ typescript: '>=4.8.4 <6.1.0'
- '@typescript-eslint/scope-manager@8.55.0':
- resolution: {integrity: sha512-fVu5Omrd3jeqeQLiB9f1YsuK/iHFOwb04bCtY4BSCLgjNbOD33ZdV6KyEqplHr+IlpgT0QTZ/iJ+wT7hvTx49Q==}
+ '@typescript-eslint/scope-manager@8.59.0':
+ resolution: {integrity: sha512-UzR16Ut8IpA3Mc4DbgAShlPPkVm8xXMWafXxB0BocaVRHs8ZGakAxGRskF7FId3sdk9lgGD73GSFaWmWFDE4dg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@typescript-eslint/tsconfig-utils@8.55.0':
- resolution: {integrity: sha512-1R9cXqY7RQd7WuqSN47PK9EDpgFUK3VqdmbYrvWJZYDd0cavROGn+74ktWBlmJ13NXUQKlZ/iAEQHI/V0kKe0Q==}
+ '@typescript-eslint/tsconfig-utils@8.59.0':
+ resolution: {integrity: sha512-91Sbl3s4Kb3SybliIY6muFBmHVv+pYXfybC4Oolp3dvk8BvIE3wOPc+403CWIT7mJNkfQRGtdqghzs2+Z91Tqg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- typescript: '>=4.8.4 <6.0.0'
+ typescript: '>=4.8.4 <6.1.0'
- '@typescript-eslint/type-utils@8.55.0':
- resolution: {integrity: sha512-x1iH2unH4qAt6I37I2CGlsNs+B9WGxurP2uyZLRz6UJoZWDBx9cJL1xVN/FiOmHEONEg6RIufdvyT0TEYIgC5g==}
+ '@typescript-eslint/type-utils@8.59.0':
+ resolution: {integrity: sha512-3TRiZaQSltGqGeNrJzzr1+8YcEobKH9rHnqIp/1psfKFmhRQDNMGP5hBufanYTGznwShzVLs3Mz+gDN7HkWfXg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- eslint: ^8.57.0 || ^9.0.0
- typescript: '>=4.8.4 <6.0.0'
+ eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
+ typescript: '>=4.8.4 <6.1.0'
- '@typescript-eslint/types@8.55.0':
- resolution: {integrity: sha512-ujT0Je8GI5BJWi+/mMoR0wxwVEQaxM+pi30xuMiJETlX80OPovb2p9E8ss87gnSVtYXtJoU9U1Cowcr6w2FE0w==}
+ '@typescript-eslint/types@8.59.0':
+ resolution: {integrity: sha512-nLzdsT1gdOgFxxxwrlNVUBzSNBEEHJ86bblmk4QAS6stfig7rcJzWKqCyxFy3YRRHXDWEkb2NralA1nOYkkm/A==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@typescript-eslint/typescript-estree@8.55.0':
- resolution: {integrity: sha512-EwrH67bSWdx/3aRQhCoxDaHM+CrZjotc2UCCpEDVqfCE+7OjKAGWNY2HsCSTEVvWH2clYQK8pdeLp42EVs+xQw==}
+ '@typescript-eslint/typescript-estree@8.59.0':
+ resolution: {integrity: sha512-O9Re9P1BmBLFJyikRbQpLku/QA3/AueZNO9WePLBwQrvkixTmDe8u76B6CYUAITRl/rHawggEqUGn5QIkVRLMw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- typescript: '>=4.8.4 <6.0.0'
+ typescript: '>=4.8.4 <6.1.0'
- '@typescript-eslint/utils@8.55.0':
- resolution: {integrity: sha512-BqZEsnPGdYpgyEIkDC1BadNY8oMwckftxBT+C8W0g1iKPdeqKZBtTfnvcq0nf60u7MkjFO8RBvpRGZBPw4L2ow==}
+ '@typescript-eslint/utils@8.59.0':
+ resolution: {integrity: sha512-I1R/K7V07XsMJ12Oaxg/O9GfrysGTmCRhvZJBv0RE0NcULMzjqVpR5kRRQjHsz3J/bElU7HwCO7zkqL+MSUz+g==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- eslint: ^8.57.0 || ^9.0.0
- typescript: '>=4.8.4 <6.0.0'
+ eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
+ typescript: '>=4.8.4 <6.1.0'
- '@typescript-eslint/visitor-keys@8.55.0':
- resolution: {integrity: sha512-AxNRwEie8Nn4eFS1FzDMJWIISMGoXMb037sgCBJ3UR6o0fQTzr2tqN9WT+DkWJPhIdQCfV7T6D387566VtnCJA==}
+ '@typescript-eslint/visitor-keys@8.59.0':
+ resolution: {integrity: sha512-/uejZt4dSere1bx12WLlPfv8GktzcaDtuJ7s42/HEZ5zGj9oxRaD4bj7qwSunXkf+pbAhFt2zjpHYUiT5lHf0Q==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@ungap/structured-clone@1.3.0':
resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==}
- '@unhead/addons@2.1.4':
- resolution: {integrity: sha512-2FgHlh0pM0tHZ2yQzrRaKc1D0yllrfvL8ah+x7bFMk38JSLlw2okYWW6ZR3v+tO3i8NSqc6NkPLiQUJVZ97aqA==}
+ '@unhead/bundler@3.0.5':
+ resolution: {integrity: sha512-NByETf7g0PQ3msif6HAgtkDGpjfjJfWfJwB4m2fHgW6+BpXRqQQxCscLi3UILhZ06XZVVxx5oCUA8SGfGE7j8A==}
peerDependencies:
- unhead: 2.1.4
+ esbuild: '>=0.17.0'
+ lightningcss: '>=1.20.0'
+ rolldown: '>=1.0.0-beta.0'
+ unhead: ^3.0.5
+ peerDependenciesMeta:
+ esbuild:
+ optional: true
+ lightningcss:
+ optional: true
+ rolldown:
+ optional: true
- '@unhead/schema-org@2.1.4':
- resolution: {integrity: sha512-nv42Zg+3uk/1Oh7XZazYVj/wcZjPoChv8AFJwk0aovWRXmaDTUXruCRN5ZCqK9vruhqqmUIwT++fe/eOt2YN7Q==}
+ '@unhead/schema-org@2.1.13':
+ resolution: {integrity: sha512-D9458jeB20lgLRgZxiTGi/iSbqP/pPsD2klGO5P2PlHOFxvejh9RUAhsz6LILac28Z6lFZPY4hs3mpW3batUtA==}
peerDependencies:
- '@unhead/react': 2.1.4
- '@unhead/solid-js': 2.1.4
- '@unhead/svelte': 2.1.4
- '@unhead/vue': 2.1.4
+ '@unhead/react': ^2.1.13
+ '@unhead/solid-js': ^2.1.13
+ '@unhead/svelte': ^2.1.13
+ '@unhead/vue': ^2.1.13
peerDependenciesMeta:
'@unhead/react':
optional: true
@@ -2559,27 +3075,11 @@ packages:
'@unhead/vue':
optional: true
- '@unhead/vue@2.1.4':
- resolution: {integrity: sha512-MFvywgkHMt/AqbhmKOqRuzvuHBTcmmmnUa7Wm/Sg11leXAeRShv2PcmY7IiYdeeJqBMCm1jwhcs6201jj6ggZg==}
+ '@unhead/vue@2.1.13':
+ resolution: {integrity: sha512-HYy0shaHRnLNW9r85gppO8IiGz0ONWVV3zGdlT8CQ0tbTwixznJCIiyqV4BSV1aIF1jJIye0pd1p/k6Eab8Z/A==}
peerDependencies:
vue: '>=3.5.18'
- '@unocss/core@66.6.0':
- resolution: {integrity: sha512-Sxm7HmhsPIIzxbPnWembPyobuCeA5j9KxL+jIOW2c+kZiTFjHeju7vuVWX9jmAMMC+UyDuuCQ4yE+kBo3Y7SWQ==}
-
- '@unocss/extractor-arbitrary-variants@66.6.0':
- resolution: {integrity: sha512-AsCmpbre4hQb+cKOf3gHUeYlF7guR/aCKZvw53VBk12qY5wNF7LdfIx4zWc5LFVCoRxIZlU2C7L4/Tt7AkiFMA==}
-
- '@unocss/preset-mini@66.6.0':
- resolution: {integrity: sha512-8bQyTuMJcry/z4JTDsQokI0187/1CJIkVx9hr9eEbKf/gWti538P8ktKEmHCf8IyT0At5dfP9oLHLCUzVetdbA==}
-
- '@unocss/preset-wind3@66.6.0':
- resolution: {integrity: sha512-7gzswF810BCSru7pF01BsMzGZbfrsWT5GV6JJLkhROS2pPjeNOpqy2VEfiavv5z09iGSIESeOFMlXr5ORuLZrg==}
-
- '@unocss/rule-utils@66.6.0':
- resolution: {integrity: sha512-v16l6p5VrefDx8P/gzWnp0p6/hCA0vZ4UMUN6SxHGVE6V+IBpX6I6Du3Egk9TdkhZ7o+Pe1NHxksHcjT0V/tww==}
- engines: {node: '>=14'}
-
'@unrs/resolver-binding-android-arm-eabi@1.11.1':
resolution: {integrity: sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==}
cpu: [arm]
@@ -2683,33 +3183,41 @@ packages:
cpu: [x64]
os: [win32]
- '@vercel/nft@1.3.0':
- resolution: {integrity: sha512-i4EYGkCsIjzu4vorDUbqglZc5eFtQI2syHb++9ZUDm6TU4edVywGpVnYDein35x9sevONOn9/UabfQXuNXtuzQ==}
+ '@vercel/nft@1.5.0':
+ resolution: {integrity: sha512-IWTDeIoWhQ7ZtRO/JRKH+jhmeQvZYhtGPmzw/QGDY+wDCQqfm25P9yIdoAFagu4fWsK4IwZXDFIjrmp5rRm/sA==}
engines: {node: '>=20'}
hasBin: true
- '@vitejs/plugin-vue-jsx@5.1.4':
- resolution: {integrity: sha512-70LmoVk9riR7qc4W2CpjsbNMWTPnuZb9dpFKX1emru0yP57nsc9k8nhLA6U93ngQapv5VDIUq2JatNfLbBIkrA==}
+ '@vitejs/devtools-kit@0.1.15':
+ resolution: {integrity: sha512-6OCgoAW7HeJFMpxiNqIZLoBtG+jGTwXBwNgmxPi2KT77nCFUUvnDHrXSOZ8ErmQ7WdrDPLnUeBq/TWyi9xdAyA==}
+ peerDependencies:
+ vite: '*'
+
+ '@vitejs/devtools-rpc@0.1.15':
+ resolution: {integrity: sha512-pHDz3bcK0dlpLzI2ve2Xwnnx6iSASRMuEFJDbe64LAZJPVCBW/Pb0IeEpodI58O9xVpB0EBZykZftz8/oTeVtQ==}
+
+ '@vitejs/plugin-vue-jsx@5.1.5':
+ resolution: {integrity: sha512-jIAsvHOEtWpslLOI2MeElGFxH7M8pM83BU/Tor4RLyiwH0FM4nUW3xdvbw20EeU9wc5IspQwMq225K3CMnJEpA==}
engines: {node: ^20.19.0 || >=22.12.0}
peerDependencies:
- vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0
+ vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0
vue: ^3.0.0
- '@vitejs/plugin-vue@6.0.4':
- resolution: {integrity: sha512-uM5iXipgYIn13UUQCZNdWkYk+sysBeA97d5mHsAoAt1u/wpN3+zxOmsVJWosuzX+IMGRzeYUNytztrYznboIkQ==}
+ '@vitejs/plugin-vue@6.0.6':
+ resolution: {integrity: sha512-u9HHgfrq3AjXlysn0eINFnWQOJQLO9WN6VprZ8FXl7A2bYisv3Hui9Ij+7QZ41F/WYWarHjwBbXtD7dKg3uxbg==}
engines: {node: ^20.19.0 || >=22.12.0}
peerDependencies:
- vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0
+ vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0
vue: ^3.2.25
- '@volar/language-core@2.4.27':
- resolution: {integrity: sha512-DjmjBWZ4tJKxfNC1F6HyYERNHPYS7L7OPFyCrestykNdUZMFYzI9WTyvwPcaNaHlrEUwESHYsfEw3isInncZxQ==}
+ '@volar/language-core@2.4.28':
+ resolution: {integrity: sha512-w4qhIJ8ZSitgLAkVay6AbcnC7gP3glYM3fYwKV3srj8m494E3xtrCv6E+bWviiK/8hs6e6t1ij1s2Endql7vzQ==}
- '@volar/source-map@2.4.27':
- resolution: {integrity: sha512-ynlcBReMgOZj2i6po+qVswtDUeeBRCTgDurjMGShbm8WYZgJ0PA4RmtebBJ0BCYol1qPv3GQF6jK7C9qoVc7lg==}
+ '@volar/source-map@2.4.28':
+ resolution: {integrity: sha512-yX2BDBqJkRXfKw8my8VarTyjv48QwxdJtvRgUpNE5erCsgEUdI2DsLbpa+rOQVAJYshY99szEcRDmyHbF10ggQ==}
- '@volar/typescript@2.4.27':
- resolution: {integrity: sha512-eWaYCcl/uAPInSK2Lze6IqVWaBu/itVqR5InXcHXFyles4zO++Mglt3oxdgj75BDcv1Knr9Y93nowS8U3wqhxg==}
+ '@volar/typescript@2.4.28':
+ resolution: {integrity: sha512-Ja6yvWrbis2QtN4ClAKreeUZPVYMARDYZl9LMEv1iQ1QdepB6wn0jTRxA9MftYmYa4DQ4k/DaSZpFPUfxl8giw==}
'@vue-macros/common@3.1.2':
resolution: {integrity: sha512-h9t4ArDdniO9ekYHAD95t9AZcAbb19lEGK+26iAjUODOIJKmObDNBSe4+6ELQAA3vtYiFPPBtHh7+cQCKi3Dng==}
@@ -2736,76 +3244,68 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0-0
- '@vue/compiler-core@3.5.28':
- resolution: {integrity: sha512-kviccYxTgoE8n6OCw96BNdYlBg2GOWfBuOW4Vqwrt7mSKWKwFVvI8egdTltqRgITGPsTFYtKYfxIG8ptX2PJHQ==}
+ '@vue/compiler-core@3.5.33':
+ resolution: {integrity: sha512-3PZLQwFw4Za3TC8t0FvTy3wI16Kt+pmwcgNZca4Pj9iWL2E72a/gZlpBtAJvEdDMdCxdG/qq0C7PN0bsJuv0Rw==}
- '@vue/compiler-dom@3.5.28':
- resolution: {integrity: sha512-/1ZepxAb159jKR1btkefDP+J2xuWL5V3WtleRmxaT+K2Aqiek/Ab/+Ebrw2pPj0sdHO8ViAyyJWfhXXOP/+LQA==}
+ '@vue/compiler-dom@3.5.33':
+ resolution: {integrity: sha512-PXq0yrfCLzzL07rbXO4awtXY1Z06LG2eu6Adg3RJFa/j3Cii217XxxLXG22N330gw7GmALCY0Z8RgXEviwgpjA==}
- '@vue/compiler-sfc@3.5.28':
- resolution: {integrity: sha512-6TnKMiNkd6u6VeVDhZn/07KhEZuBSn43Wd2No5zaP5s3xm8IqFTHBj84HJah4UepSUJTro5SoqqlOY22FKY96g==}
+ '@vue/compiler-sfc@3.5.33':
+ resolution: {integrity: sha512-UTUvRO9cY+rROrx/pvN9P5Z7FgA6QGfokUCfhQE4EnmUj3rVnK+CHI0LsEO1pg+I7//iRYMUfcNcCPe7tg0CoA==}
- '@vue/compiler-ssr@3.5.28':
- resolution: {integrity: sha512-JCq//9w1qmC6UGLWJX7RXzrGpKkroubey/ZFqTpvEIDJEKGgntuDMqkuWiZvzTzTA5h2qZvFBFHY7fAAa9475g==}
+ '@vue/compiler-ssr@3.5.33':
+ resolution: {integrity: sha512-IErjYdnj1qIupG5xxiVIYiiRvDhGWV4zuh/RCrwfYpuL+HWQzeU6lCk/nF9r7olWMnjKxCAkOctT2qFWFkzb1A==}
- '@vue/devtools-api@6.6.4':
- resolution: {integrity: sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==}
+ '@vue/devtools-api@8.1.1':
+ resolution: {integrity: sha512-bsDMJ07b3GN1puVwJb/fyFnj/U2imyswK5UQVLZwVl7O05jDrt6BHxeG5XffmOOdasOj/bOmIjxJvGPxU7pcqw==}
- '@vue/devtools-core@8.0.6':
- resolution: {integrity: sha512-fN7iVtpSQQdtMORWwVZ1JiIAKriinhD+lCHqPw9Rr252ae2TczILEmW0zcAZifPW8HfYcbFkn+h7Wv6kQQCayw==}
+ '@vue/devtools-core@8.1.1':
+ resolution: {integrity: sha512-bCCsSABp1/ot4j8xJEycM6Mtt2wbuucfByr6hMgjbYhrtlscOJypZKvy8f1FyWLYrLTchB5Qz216Lm92wfbq0A==}
peerDependencies:
vue: ^3.0.0
- '@vue/devtools-kit@8.0.6':
- resolution: {integrity: sha512-9zXZPTJW72OteDXeSa5RVML3zWDCRcO5t77aJqSs228mdopYj5AiTpihozbsfFJ0IodfNs7pSgOGO3qfCuxDtw==}
+ '@vue/devtools-kit@8.1.1':
+ resolution: {integrity: sha512-gVBaBv++i+adg4JpH71k9ppl4soyR7Y2McEqO5YNgv0BI1kMZ7BDX5gnwkZ5COYgiCyhejZG+yGNrBAjj6Coqg==}
- '@vue/devtools-shared@8.0.6':
- resolution: {integrity: sha512-Pp1JylTqlgMJvxW6MGyfTF8vGvlBSCAvMFaDCYa82Mgw7TT5eE5kkHgDvmOGHWeJE4zIDfCpCxHapsK2LtIAJg==}
+ '@vue/devtools-shared@8.1.1':
+ resolution: {integrity: sha512-+h4ttmJYl/txpxHKaoZcaKpC+pvckgLzIDiSQlaQ7kKthKh8KuwoLW2D8hPJEnqKzXOvu15UHEoGyngAXCz0EQ==}
- '@vue/language-core@3.2.4':
- resolution: {integrity: sha512-bqBGuSG4KZM45KKTXzGtoCl9cWju5jsaBKaJJe3h5hRAAWpZUuj5G+L+eI01sPIkm4H6setKRlw7E85wLdDNew==}
+ '@vue/language-core@3.2.7':
+ resolution: {integrity: sha512-Gn4q/tRxbpVGLEuARQ43p3YELlNAFgRUVCgW9U5Cr+5q4vfD2bWDWpl3ABbJMXUt5xlE1dF8dkigg2aUq7JYYw==}
- '@vue/reactivity@3.5.28':
- resolution: {integrity: sha512-gr5hEsxvn+RNyu9/9o1WtdYdwDjg5FgjUSBEkZWqgTKlo/fvwZ2+8W6AfKsc9YN2k/+iHYdS9vZYAhpi10kNaw==}
+ '@vue/reactivity@3.5.33':
+ resolution: {integrity: sha512-p8UfIqyIhb0rYGlSgSBV+lPhF2iUSBcRy7enhTmPqKWadHy9kcOFYF1AejYBP9P+avnd3OBbD49DU4pLWX/94A==}
- '@vue/runtime-core@3.5.28':
- resolution: {integrity: sha512-POVHTdbgnrBBIpnbYU4y7pOMNlPn2QVxVzkvEA2pEgvzbelQq4ZOUxbp2oiyo+BOtiYlm8Q44wShHJoBvDPAjQ==}
+ '@vue/runtime-core@3.5.33':
+ resolution: {integrity: sha512-UpFF45RI9//a7rvq7RdOQblb4tup7hHG9QsmIrxkFQLzQ7R8/iNQ5LE15NhLZ1/WcHMU2b47u6P33CPUelHyIQ==}
- '@vue/runtime-dom@3.5.28':
- resolution: {integrity: sha512-4SXxSF8SXYMuhAIkT+eBRqOkWEfPu6nhccrzrkioA6l0boiq7sp18HCOov9qWJA5HML61kW8p/cB4MmBiG9dSA==}
+ '@vue/runtime-dom@3.5.33':
+ resolution: {integrity: sha512-IOxMsAOwquhfITgmOgaPYl7/j8gKUxUFoflRc+u4LxyD3+783xne8vNta1PONVCvCV9A0w7hkyEepINDqfO0tw==}
- '@vue/server-renderer@3.5.28':
- resolution: {integrity: sha512-pf+5ECKGj8fX95bNincbzJ6yp6nyzuLDhYZCeFxUNp8EBrQpPpQaLX3nNCp49+UbgbPun3CeVE+5CXVV1Xydfg==}
+ '@vue/server-renderer@3.5.33':
+ resolution: {integrity: sha512-0xylq/8/h44lVG0pZFknv1XIdEgymq2E9n59uTWJBG+dIgiT0TMCSsxrN7nO16Z0MU0MPjFcguBbZV8Itk52Hw==}
peerDependencies:
- vue: 3.5.28
+ vue: 3.5.33
- '@vue/shared@3.5.28':
- resolution: {integrity: sha512-cfWa1fCGBxrvaHRhvV3Is0MgmrbSCxYTXCSCau2I0a1Xw1N1pHAvkWCiXPRAqjvToILvguNyEwjevUqAuBQWvQ==}
+ '@vue/shared@3.5.33':
+ resolution: {integrity: sha512-5vR2QIlmaLG77Ygd4pMP6+SGQ5yox9VhtnbDWTy9DzMzdmeLxZ1QqxrywEZ9sa1AVubfIJyaCG3ytyWU81ufcQ==}
'@vueuse/core@10.11.1':
resolution: {integrity: sha512-guoy26JQktXPcz+0n3GukWIy/JDNKti9v6VEMu6kV2sYBsWuGiTU8OWdg+ADfUbHg3/3DlqySDe7JmdHrktiww==}
- '@vueuse/core@12.8.2':
- resolution: {integrity: sha512-HbvCmZdzAu3VGi/pWYm5Ut+Kd9mn1ZHnn4L5G8kOQTPs/IwIAmJoBrmYk2ckLArgMXZj0AW3n5CAejLUO+PhdQ==}
-
- '@vueuse/core@13.9.0':
- resolution: {integrity: sha512-ts3regBQyURfCE2BcytLqzm8+MmLlo5Ln/KLoxDVcsZ2gzIwVNnQpQOL/UKV8alUqjSZOlpFZcRNsLRqj+OzyA==}
- peerDependencies:
- vue: ^3.5.0
-
- '@vueuse/core@14.2.0':
- resolution: {integrity: sha512-tpjzVl7KCQNVd/qcaCE9XbejL38V6KJAEq/tVXj7mDPtl6JtzmUdnXelSS+ULRkkrDgzYVK7EerQJvd2jR794Q==}
+ '@vueuse/core@14.2.1':
+ resolution: {integrity: sha512-3vwDzV+GDUNpdegRY6kzpLm4Igptq+GA0QkJ3W61Iv27YWwW/ufSlOfgQIpN6FZRMG0mkaz4gglJRtq5SeJyIQ==}
peerDependencies:
vue: ^3.5.0
- '@vueuse/integrations@13.9.0':
- resolution: {integrity: sha512-SDobKBbPIOe0cVL7QxMzGkuUGHvWTdihi9zOrrWaWUgFKe15cwEcwfWmgrcNzjT6kHnNmWuTajPHoIzUjYNYYQ==}
+ '@vueuse/integrations@14.2.1':
+ resolution: {integrity: sha512-2LIUpBi/67PoXJGqSDQUF0pgQWpNHh7beiA+KG2AbybcNm+pTGWT6oPGlBgUoDWmYwfeQqM/uzOHqcILpKL7nA==}
peerDependencies:
async-validator: ^4
axios: ^1
change-case: ^5
drauu: ^0.4
- focus-trap: ^7
+ focus-trap: ^7 || ^8
fuse.js: ^7
idb-keyval: ^6
jwt-decode: ^4
@@ -2843,17 +3343,11 @@ packages:
'@vueuse/metadata@10.11.1':
resolution: {integrity: sha512-IGa5FXd003Ug1qAZmyE8wF3sJ81xGLSqTqtQ6jaVfkeZ4i5kS2mwQF61yhVqojRnenVew5PldLyRgvdl4YYuSw==}
- '@vueuse/metadata@12.8.2':
- resolution: {integrity: sha512-rAyLGEuoBJ/Il5AmFHiziCPdQzRt88VxR+Y/A/QhJ1EWtWqPBBAxTAFaSkviwEuOEZNtW8pvkPgoCZQ+HxqW1A==}
-
- '@vueuse/metadata@13.9.0':
- resolution: {integrity: sha512-1AFRvuiGphfF7yWixZa0KwjYH8ulyjDCC0aFgrGRz8+P4kvDFSdXLVfTk5xAN9wEuD1J6z4/myMoYbnHoX07zg==}
-
- '@vueuse/metadata@14.2.0':
- resolution: {integrity: sha512-i3axTGjU8b13FtyR4Keeama+43iD+BwX9C2TmzBVKqjSHArF03hjkp2SBZ1m72Jk2UtrX0aYCugBq2R1fhkuAQ==}
+ '@vueuse/metadata@14.2.1':
+ resolution: {integrity: sha512-1ButlVtj5Sb/HDtIy1HFr1VqCP4G6Ypqt5MAo0lCgjokrk2mvQKsK2uuy0vqu/Ks+sHfuHo0B9Y9jn9xKdjZsw==}
- '@vueuse/nuxt@14.2.0':
- resolution: {integrity: sha512-MpxTYd7/W0izL6DgMEYUUTYkm1q0aqE0kfMr6oBcj5R0TIrdPJAJIwVaqs5pbSjQUPjNNgQ7mCRvx9RKFUq+VQ==}
+ '@vueuse/nuxt@14.2.1':
+ resolution: {integrity: sha512-DHgFMUpyH98M1YM9pbnRjFXMAMKEsHntJeOp8rOXs8QN2cvJBzEZ+TTWIBSPESNFOEwM02RA6BDsaTL35OK4Mw==}
peerDependencies:
nuxt: ^3.0.0 || ^4.0.0-0
vue: ^3.5.0
@@ -2861,16 +3355,8 @@ packages:
'@vueuse/shared@10.11.1':
resolution: {integrity: sha512-LHpC8711VFZlDaYUXEBbFBCQ7GS3dVU9mjOhhMhXP6txTV4EhYQg/KGnQuvt/sPAtoUKq7VVUnL6mVtFoL42sA==}
- '@vueuse/shared@12.8.2':
- resolution: {integrity: sha512-dznP38YzxZoNloI0qpEfpkms8knDtaoQ6Y/sfS0L7Yki4zh40LFHEhur0odJC6xTHG5dxWVPiUWBXn+wCG2s5w==}
-
- '@vueuse/shared@13.9.0':
- resolution: {integrity: sha512-e89uuTLMh0U5cZ9iDpEI2senqPGfbPRTHM/0AaQkcxnpqjkZqDYP8rpfm7edOz8s+pOCOROEy1PIveSW8+fL5g==}
- peerDependencies:
- vue: ^3.5.0
-
- '@vueuse/shared@14.2.0':
- resolution: {integrity: sha512-Z0bmluZTlAXgUcJ4uAFaML16JcD8V0QG00Db3quR642I99JXIDRa2MI2LGxiLVhcBjVnL1jOzIvT5TT2lqJlkA==}
+ '@vueuse/shared@14.2.1':
+ resolution: {integrity: sha512-shTJncjV9JTI4oVNyF1FQonetYAiTBd+Qj7cY89SWbXSkx7gyhrgtEdF2ZAVWS1S3SHlaROO6F2IesJxQEkZBw==}
peerDependencies:
vue: ^3.5.0
@@ -2923,6 +3409,11 @@ packages:
engines: {node: '>=0.4.0'}
hasBin: true
+ acorn@8.16.0:
+ resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==}
+ engines: {node: '>=0.4.0'}
+ hasBin: true
+
agent-base@7.1.4:
resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==}
engines: {node: '>= 14'}
@@ -3004,8 +3495,8 @@ packages:
asynckit@0.4.0:
resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
- autoprefixer@10.4.24:
- resolution: {integrity: sha512-uHZg7N9ULTVbutaIsDRoUkoS8/h3bdsmVJYZ5l3wv8Cp/6UIIoRDm90hZ+BwxUj/hGBEzLxdHNSKuFpn8WOyZw==}
+ autoprefixer@10.5.0:
+ resolution: {integrity: sha512-FMhOoZV4+qR6aTUALKX2rEqGG+oyATvwBt9IIzVR5rMa2HRWPkxf+P+PAJLD1I/H5/II+HuZcBJYEFBpq39ong==}
engines: {node: ^10 || ^12 || >=14}
hasBin: true
peerDependencies:
@@ -3018,8 +3509,8 @@ packages:
axios@1.13.5:
resolution: {integrity: sha512-cz4ur7Vb0xS4/KUN0tPWe44eqxrIu31me+fbang3ijiNscE129POzipJJA6zniq2C/Z6sJCjMimjS8Lc/GAs8Q==}
- b4a@1.7.3:
- resolution: {integrity: sha512-5Q2mfq2WfGuFp3uS//0s6baOJLMoVduPYVeNmDYxu5OUA1/cBfvr2RIS7vi62LdNj/urk1hfmj867I3qt6uZ7Q==}
+ b4a@1.8.0:
+ resolution: {integrity: sha512-qRuSmNSkGQaHwNbM7J78Wwy+ghLEYF1zNrSeMxj4Kgw6y33O3mXcQ6Ie9fRvfU/YnxWkOchPXbaLb73TkIsfdg==}
peerDependencies:
react-native-b4a: '*'
peerDependenciesMeta:
@@ -3032,6 +3523,10 @@ packages:
balanced-match@1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+ balanced-match@4.0.4:
+ resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==}
+ engines: {node: 18 || 20 || >=22}
+
bare-events@2.8.2:
resolution: {integrity: sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==}
peerDependencies:
@@ -3040,15 +3535,45 @@ packages:
bare-abort-controller:
optional: true
- base64-js@0.0.8:
- resolution: {integrity: sha512-3XSA2cR/h/73EzlXXdU6YNycmYI7+kicTxks4eJg2g39biHR84slg2+des+p7iHYhbRg/udIS4TD53WabcOUkw==}
- engines: {node: '>= 0.4'}
+ bare-fs@4.7.1:
+ resolution: {integrity: sha512-WDRsyVN52eAx/lBamKD6uyw8H4228h/x0sGGGegOamM2cd7Pag88GfMQalobXI+HaEUxpCkbKQUDOQqt9wawRw==}
+ engines: {bare: '>=1.16.0'}
+ peerDependencies:
+ bare-buffer: '*'
+ peerDependenciesMeta:
+ bare-buffer:
+ optional: true
+
+ bare-os@3.9.0:
+ resolution: {integrity: sha512-JTjuZyNIDpw+GytMO4a6TK1VXdVKKJr6DRxEHasyuYyShV2deuiHJK/ahGZlebc+SG0/wJCB9XK8gprBGDFi/Q==}
+ engines: {bare: '>=1.14.0'}
+
+ bare-path@3.0.0:
+ resolution: {integrity: sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==}
+
+ bare-stream@2.13.0:
+ resolution: {integrity: sha512-3zAJRZMDFGjdn+RVnNpF9kuELw+0Fl3lpndM4NcEOhb9zwtSo/deETfuIwMSE5BXanA0FrN1qVjffGwAg2Y7EA==}
+ peerDependencies:
+ bare-abort-controller: '*'
+ bare-buffer: '*'
+ bare-events: '*'
+ peerDependenciesMeta:
+ bare-abort-controller:
+ optional: true
+ bare-buffer:
+ optional: true
+ bare-events:
+ optional: true
+
+ bare-url@2.4.2:
+ resolution: {integrity: sha512-/9a2j4ac6ckpmAHvod/ob7x439OAHst/drc2Clnq+reRYd/ovddwcF4LfoxHyNk5AuGBnPg+HqFjmE/Zpq6v0A==}
base64-js@1.5.1:
resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
- baseline-browser-mapping@2.9.19:
- resolution: {integrity: sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==}
+ baseline-browser-mapping@2.10.21:
+ resolution: {integrity: sha512-Q+rUQ7Uz8AHM7DEaNdwvfFCTq7a43lNTzuS94eiWqwyxfV/wJv+oUivef51T91mmRY4d4A1u9rcSvkeufCVXlA==}
+ engines: {node: '>=6.0.0'}
hasBin: true
better-sqlite3@11.10.0:
@@ -3060,30 +3585,31 @@ packages:
birpc@2.9.0:
resolution: {integrity: sha512-KrayHS5pBi69Xi9JmvoqrIgYGDkD6mcSe/i6YKi3w5kekCLzrX4+nawcXqrj2tIp50Kw/mT/s3p+GVK0A0sKxw==}
+ birpc@4.0.0:
+ resolution: {integrity: sha512-LShSxJP0KTmd101b6DRyGBj57LZxSDYWKitQNW/mi8GRMvZb078Uf9+pveax1DrVL89vm7mWe+TovdI/UDOuPw==}
+
bl@4.1.0:
resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==}
- blob-to-buffer@1.2.9:
- resolution: {integrity: sha512-BF033y5fN6OCofD3vgHmNtwZWRcq9NLyyxyILx9hfMy1sXYy4ojFl765hJ2lP0YaN2fuxPaLO2Vzzoxy0FLFFA==}
-
boolbase@1.0.0:
resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
- brace-expansion@1.1.13:
- resolution: {integrity: sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==}
+ brace-expansion@1.1.14:
+ resolution: {integrity: sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==}
- brace-expansion@2.0.2:
- resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==}
+ brace-expansion@2.1.0:
+ resolution: {integrity: sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==}
+
+ brace-expansion@5.0.5:
+ resolution: {integrity: sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==}
+ engines: {node: 18 || 20 || >=22}
braces@3.0.3:
resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
engines: {node: '>=8'}
- brotli@1.3.3:
- resolution: {integrity: sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==}
-
- browserslist@4.28.1:
- resolution: {integrity: sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==}
+ browserslist@4.28.2:
+ resolution: {integrity: sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==}
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
hasBin: true
@@ -3100,8 +3626,8 @@ packages:
buffer@6.0.3:
resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
- builtin-modules@5.0.0:
- resolution: {integrity: sha512-bkXY9WsVpY7CvMhKSR6pZilZu9Ln5WDrKVBUXf2S443etkmEO4V58heTecXcUIsNsi4Rx8JUO4NfX1IcQl4deg==}
+ builtin-modules@5.1.0:
+ resolution: {integrity: sha512-c5JxaDrzwRjq3WyJkI1AGR5xy6Gr6udlt7sQPbl09+3ckB+Zo2qqQ2KhCTBr7Q8dHB43bENGYEk4xddrFH/b7A==}
engines: {node: '>=18.20'}
bundle-name@4.1.0:
@@ -3122,10 +3648,22 @@ packages:
magicast:
optional: true
+ c12@3.3.4:
+ resolution: {integrity: sha512-cM0ApFQSBXuourJejzwv/AuPRvAxordTyParRVcHjjtXirtkzM0uK2L9TTn9s0cXZbG7E55jCivRQzoxYmRAlA==}
+ peerDependencies:
+ magicast: '*'
+ peerDependenciesMeta:
+ magicast:
+ optional: true
+
cac@6.7.14:
resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}
engines: {node: '>=8'}
+ cac@7.0.0:
+ resolution: {integrity: sha512-tixWYgm5ZoOD+3g6UTea91eow5z6AAHaho3g0V9CNSNb45gM8SmflpAc+GRd1InC4AqN/07Unrgp56Y94N9hJQ==}
+ engines: {node: '>=20.19.0'}
+
cacheable-lookup@5.0.4:
resolution: {integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==}
engines: {node: '>=10.6.0'}
@@ -3138,8 +3676,8 @@ packages:
resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
engines: {node: '>= 0.4'}
- call-bind@1.0.8:
- resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==}
+ call-bind@1.0.9:
+ resolution: {integrity: sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==}
engines: {node: '>= 0.4'}
call-bound@1.0.4:
@@ -3153,14 +3691,11 @@ packages:
resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
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==}
- caniuse-lite@1.0.30001769:
- resolution: {integrity: sha512-BCfFL1sHijQlBGWBMuJyhZUhzo7wer5sVj9hqekB/7xn0Ypy+pER/edCYQm4exbXj4WiySGp40P8UuTh6w1srg==}
+ caniuse-lite@1.0.30001790:
+ resolution: {integrity: sha512-bOoxfJPyYo+ds6W0YfptaCWbFnJYjh2Y1Eow5lRv+vI2u8ganPZqNm1JwNh0t2ELQCqIWg4B3dWEusgAmsoyOw==}
ccount@2.0.1:
resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==}
@@ -3169,10 +3704,6 @@ packages:
resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
engines: {node: '>=10'}
- chalk@5.6.2:
- resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==}
- engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
-
change-case@5.4.4:
resolution: {integrity: sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==}
@@ -3222,6 +3753,9 @@ packages:
citty@0.2.0:
resolution: {integrity: sha512-8csy5IBFI2ex2hTVpaHN2j+LNE199AgiI7y4dMintrr8i0lQiFn+0AWMZrWdHKIgMOer65f8IThysYhoReqjWA==}
+ citty@0.2.2:
+ resolution: {integrity: sha512-+6vJA3L98yv+IdfKGZHBNiGW5KHn22e/JwID0Strsz8h4S/csAu/OuICwxrg44k5MRiZHWIo8XXuJgQTriRP4w==}
+
clean-git-ref@2.0.1:
resolution: {integrity: sha512-bLSptAy2P0s6hU4PzuIMKmMJJSE6gLXGH1cntDu7bWJUksvuM+7ReOK61mozULErYvP6a15rnYl0zFDef+pyPw==}
@@ -3229,21 +3763,13 @@ packages:
resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==}
engines: {node: '>=4'}
- clipboardy@4.0.0:
- resolution: {integrity: sha512-5mOlNS0mhX0707P2I0aZ2V/cmHUEO/fL7VFLqszkhUsxt7RwnmrInf/eEQKlf5GzvYeHIjT+Ov1HRfNmymlG0w==}
- engines: {node: '>=18'}
-
- cliui@8.0.1:
- resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
- engines: {node: '>=12'}
+ cliui@9.0.1:
+ resolution: {integrity: sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==}
+ engines: {node: '>=20'}
clone-response@1.0.3:
resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==}
- clone@2.1.2:
- resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==}
- engines: {node: '>=0.8'}
-
cluster-key-slot@1.1.2:
resolution: {integrity: sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==}
engines: {node: '>=0.10.0'}
@@ -3255,9 +3781,6 @@ packages:
color-name@1.1.4:
resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
- colord@2.9.3:
- resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==}
-
colortranslator@5.0.0:
resolution: {integrity: sha512-Z3UPUKasUVDFCDYAjP2fmlVRf1jFHJv1izAmPjiOa0OCIw1W7iC8PZ2GsoDa8uZv+mKyWopxxStT9q05+27h7w==}
@@ -3275,8 +3798,8 @@ packages:
commander@2.20.3:
resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
- comment-parser@1.4.5:
- resolution: {integrity: sha512-aRDkn3uyIlCFfk5NUA+VdwMmMsh8JGhc4hapfV4yxymHGQ3BVskMQfoXGpCo5IoBuQ9tS5iiVKhCpTcB4pW4qw==}
+ comment-parser@1.4.6:
+ resolution: {integrity: sha512-ObxuY6vnbWTN6Od72xfwN9DbzC7Y2vv8u1Soi9ahRKL37gb6y1qk6/dgjs+3JWuXJHWvsg3BXIwzd/rkmAwavg==}
engines: {node: '>= 12.0.0'}
commondir@1.0.1:
@@ -3305,24 +3828,20 @@ packages:
convert-source-map@2.0.0:
resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
- cookie-es@1.2.2:
- resolution: {integrity: sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg==}
+ cookie-es@1.2.3:
+ resolution: {integrity: sha512-lXVyvUvrNXblMqzIRrxHb57UUVmqsSWlxqt3XIjCkUP0wDAf6uicO6KMbEgYrMNtEvWgWHwe42CKxPu9MYAnWw==}
- cookie-es@2.0.0:
- resolution: {integrity: sha512-RAj4E421UYRgqokKUmotqAwuplYw15qtdXfY+hGzgCJ/MBjCVZcSoHK/kH9kocfjRjcDME7IiDWR/1WX1TM2Pg==}
-
- copy-anything@4.0.5:
- resolution: {integrity: sha512-7Vv6asjS4gMOuILabD3l739tsaxFQmC+a7pLZm02zyvs8p977bL3zEgq3yDk5rn9B0PbYgIv++jmHcuUab4RhA==}
- engines: {node: '>=18'}
+ cookie-es@2.0.1:
+ resolution: {integrity: sha512-aVf4A4hI2w70LnF7GG+7xDQUkliwiXWXFvTjkip4+b64ygDQ2sJPRSKFDHbxn8o0xu9QzPkMuuiWIXyFSE2slA==}
- copy-paste@2.2.0:
- resolution: {integrity: sha512-jqSL4r9DSeiIvJZStLzY/sMLt9ToTM7RsK237lYOTG+KcbQJHGala3R1TUpa8h1p9adswVgIdV4qGbseVhL4lg==}
+ cookie-es@3.1.1:
+ resolution: {integrity: sha512-UaXxwISYJPTr9hwQxMFYZ7kNhSXboMXP+Z3TRX6f1/NyaGPfuNUZOWP1pUEb75B2HjfklIYLVRfWiFZJyC6Npg==}
- core-js-compat@3.48.0:
- resolution: {integrity: sha512-OM4cAF3D6VtH/WkLtWvyNC56EZVXsZdU3iqaMG2B4WvYrlqU831pc4UtG5yp0sE9z8Y02wVN7PjW5Zf9Gt0f1Q==}
+ core-js-compat@3.49.0:
+ resolution: {integrity: sha512-VQXt1jr9cBz03b331DFDCCP90b3fanciLkgiOoy8SBHy06gNf+vQ1A3WFLqG7I8TipYIKeYK9wxd0tUrvHcOZA==}
- core-js@3.48.0:
- resolution: {integrity: sha512-zpEHTy1fjTMZCKLHUZoVeylt9XrzaIN2rbPXEt0k+q7JE5CkCZdo6bNq55bn24a69CH7ErAVLKijxJja4fw+UQ==}
+ core-js@3.49.0:
+ resolution: {integrity: sha512-es1U2+YTtzpwkxVLwAFdSpaIMyQaq0PBgm3YD1W3Qpsn1NAmO3KSgZfu+oGSWVu6NvLHoHCV/aYcsE5wiB7ALg==}
core-util-is@1.0.3:
resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
@@ -3336,13 +3855,10 @@ packages:
resolution: {integrity: sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g==}
engines: {node: '>= 14'}
- croner@9.1.0:
- resolution: {integrity: sha512-p9nwwR4qyT5W996vBZhdvBCnMhicY5ytZkR4D1Xj0wuTDEiMnjwR57Q3RXYY/s0EpX6Ay3vgIcfaR+ewGHsi+g==}
+ croner@10.0.1:
+ resolution: {integrity: sha512-ixNtAJndqh173VQ4KodSdJEI6nuioBWI0V1ITNKhZZsO0pEMoDxz539T4FTTbSZ/xIOSuDnzxLVRqBVSvPNE2g==}
engines: {node: '>=18.0'}
- cross-fetch@3.2.0:
- resolution: {integrity: sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==}
-
cross-spawn@7.0.6:
resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
engines: {node: '>= 8'}
@@ -3350,38 +3866,29 @@ packages:
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'}
+ crossws@0.4.5:
+ resolution: {integrity: sha512-wUR89x/Rw7/8t+vn0CmGDYM9TD6VtARGb0LD5jq2wjtMy1vCP4M+sm6N6TigWeTYvnA8MoW29NqqXD0ep0rfBA==}
+ peerDependencies:
+ srvx: '>=0.11.5'
+ peerDependenciesMeta:
+ srvx:
+ optional: true
- css-declaration-sorter@7.3.1:
- resolution: {integrity: sha512-gz6x+KkgNCjxq3Var03pRYLhyNfwhkKF1g/yoLgDNtFvVu0/fOLV9C8fFEZRjACp/XQLumjAYo7JVjzH3wLbxA==}
+ css-declaration-sorter@7.4.0:
+ resolution: {integrity: sha512-LTuzjPoyA2vMGKKcaOqKSp7Ub2eGrNfKiZH4LpezxpNrsICGCSFvsQOI29psISxNZtaXibkC2CXzrQ5enMeGGw==}
engines: {node: ^14 || ^16 || >=18}
peerDependencies:
postcss: ^8.0.9
- css-gradient-parser@0.0.17:
- resolution: {integrity: sha512-w2Xy9UMMwlKtou0vlRnXvWglPAceXCTtcmVSo8ZBUvqCV5aXEFP/PC6d+I464810I9FT++UACwTD5511bmGPUg==}
- engines: {node: '>=16'}
-
css-select@5.2.2:
resolution: {integrity: sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==}
- 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==}
engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'}
- css-tree@3.1.0:
- resolution: {integrity: sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==}
+ css-tree@3.2.1:
+ resolution: {integrity: sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==}
engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0}
css-what@6.2.2:
@@ -3393,23 +3900,23 @@ packages:
engines: {node: '>=4'}
hasBin: true
- cssnano-preset-default@7.0.10:
- resolution: {integrity: sha512-6ZBjW0Lf1K1Z+0OKUAUpEN62tSXmYChXWi2NAA0afxEVsj9a+MbcB1l5qel6BHJHmULai2fCGRthCeKSFbScpA==}
+ cssnano-preset-default@7.0.15:
+ resolution: {integrity: sha512-60kx7lJ40//HA85cIfQXSOJFby2D2V1pOMNHVCxue3KFWCjRzmiQyL9OvI+NAhwUlaojOfF9eK3nGvrJLCBUfQ==}
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
peerDependencies:
- postcss: ^8.4.32
+ postcss: ^8.5.10
- cssnano-utils@5.0.1:
- resolution: {integrity: sha512-ZIP71eQgG9JwjVZsTPSqhc6GHgEr53uJ7tK5///VfyWj6Xp2DBmixWHqJgPno+PqATzn48pL42ww9x5SSGmhZg==}
+ cssnano-utils@5.0.2:
+ resolution: {integrity: sha512-kt41WLK7FLKfePzPi645Y+/NtW/nNM7Su6nlNUfJyRNW3JcuU3JU7+cWJc+JexTeZ8dRBvFufefdG2XpXkIo0A==}
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
peerDependencies:
- postcss: ^8.4.32
+ postcss: ^8.5.10
- cssnano@7.1.2:
- resolution: {integrity: sha512-HYOPBsNvoiFeR1eghKD5C3ASm64v9YVyJB4Ivnl2gqKoQYvjjN/G0rztvKQq8OxocUtC6sjqY8jwYngIB4AByA==}
+ cssnano@7.1.7:
+ resolution: {integrity: sha512-N5LGn/OlhMxDTvKACwUPMzT34SSj1b022pvUAE/Vh6r2WD1aUCbc+QNIP/JjX9VVxebdJWZQ3352Lt4oF7dQ/g==}
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
peerDependencies:
- postcss: ^8.4.32
+ postcss: ^8.5.10
csso@5.0.5:
resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==}
@@ -3418,6 +3925,10 @@ packages:
csstype@3.2.3:
resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==}
+ culori@4.0.2:
+ resolution: {integrity: sha512-1+BhOB8ahCn4O0cep0Sh2l9KCOfOdY+BXJnKMHFFzDEouSr/el18QwXEMRlOj9UY5nCeA8UN3a/82rUWRBeyBw==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
data-uri-to-buffer@4.0.1:
resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==}
engines: {node: '>= 12'}
@@ -3454,6 +3965,15 @@ packages:
supports-color:
optional: true
+ debug@4.4.3:
+ resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
decache@4.6.2:
resolution: {integrity: sha512-2LPqkLeu8XWHU8qNCS3kcF6sCcb5zIzvWaAHYSvPfwhdd7mHuah29NssMzrTYyHN4F5oFy2ko9OBYxegtU0FEw==}
@@ -3491,10 +4011,6 @@ packages:
resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==}
engines: {node: '>= 0.4'}
- define-lazy-prop@2.0.0:
- resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==}
- engines: {node: '>=8'}
-
define-lazy-prop@3.0.0:
resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==}
engines: {node: '>=12'}
@@ -3502,6 +4018,9 @@ packages:
defu@6.1.4:
resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==}
+ defu@6.1.7:
+ resolution: {integrity: sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==}
+
delayed-stream@1.0.0:
resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
engines: {node: '>=0.4.0'}
@@ -3528,20 +4047,17 @@ packages:
resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==}
engines: {node: '>=8'}
- devalue@5.6.2:
- resolution: {integrity: sha512-nPRkjWzzDQlsejL1WVifk5rvcFi/y1onBRxjaFMjZeR9mFpqu2gmAZ9xUB9/IEanEP/vBtGeGganC/GO1fmufg==}
+ devalue@5.7.1:
+ resolution: {integrity: sha512-MUbZ586EgQqdRnC4yDrlod3BEdyvE4TapGYHMW2CiaW+KkkFmWEFqBUaLltEZCGi0iFXCEjRF0OjF0DV2QHjOA==}
devlop@1.1.0:
resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==}
- dfa@1.2.0:
- resolution: {integrity: sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q==}
-
diff3@0.0.3:
resolution: {integrity: sha512-iSq8ngPOt0K53A6eVr4d5Kn6GNrM2nQZtC740pzIriHtn4pOQ2lyzEXQMBeVcWERN0ye7fhBsk9PbLLQOnUx/g==}
- diff@8.0.3:
- resolution: {integrity: sha512-qejHi7bcSD4hQAZE0tNAawRK1ZtafHDmMTMkrrIGgSLl7hTnQHmKCeB45xAcbfTqK2zowkM3j3bHt/4b/ARbYQ==}
+ diff@8.0.4:
+ resolution: {integrity: sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw==}
engines: {node: '>=0.3.1'}
dom-serializer@2.0.0:
@@ -3557,8 +4073,8 @@ packages:
domino@2.1.6:
resolution: {integrity: sha512-3VdM/SXBZX2omc9JF9nOPCtDaYQ67BGp5CoLpIQlO2KCAPETs8TcDHacF26jXadGbvUteZzRTeos2fhID5+ucQ==}
- dompurify@3.3.1:
- resolution: {integrity: sha512-qkdCKzLNtrgPFP1Vo+98FRzJnBRGe4ffyCea9IwHB1fyxPOeNTHpLKYGd4Uk9xvNoH0ZoOjwZxNptyMwqrId1Q==}
+ dompurify@3.4.1:
+ resolution: {integrity: sha512-JahakDAIg1gyOm7dlgWSDjV4n7Ip2PKR55NIT6jrMfIgLFgWo81vdr1/QGqWtFNRqXP9UV71oVePtjqS2ebnPw==}
domutils@3.2.2:
resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==}
@@ -3571,14 +4087,14 @@ packages:
resolution: {integrity: sha512-1gxPBJpI/pcjQhKgIU91II6Wkay+dLcN3M6rf2uwP8hRur3HtQXjVrdAK3sjC0piaEuxzMwjXChcETiJl47lAQ==}
engines: {node: '>=18'}
- dotenv@16.6.1:
- resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==}
- engines: {node: '>=12'}
-
dotenv@17.2.4:
resolution: {integrity: sha512-mudtfb4zRB4bVvdj0xRo+e6duH1csJRM8IukBqfTRvHotn9+LBXB8ynAidP9zHqoRC/fsllXgk4kCKlR21fIhw==}
engines: {node: '>=12'}
+ dotenv@17.4.2:
+ resolution: {integrity: sha512-nI4U3TottKAcAD9LLud4Cb7b2QztQMUEfHbvhTH09bqXTxnSie8WnjPALV/WMCrJZ6UV/qHJ6L03OqO3LcdYZw==}
+ engines: {node: '>=12'}
+
dunder-proto@1.0.1:
resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
engines: {node: '>= 0.4'}
@@ -3592,8 +4108,8 @@ packages:
ee-first@1.1.1:
resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
- electron-to-chromium@1.5.286:
- resolution: {integrity: sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A==}
+ electron-to-chromium@1.5.344:
+ resolution: {integrity: sha512-4MxfbmNDm+KPh066EZy+eUnkcDPcZ35wNmOWzFuh/ijvHsve6kbLTLURy88uCNK5FbpN+yk2nQY6BYh1GEt+wg==}
embla-carousel-auto-height@8.6.0:
resolution: {integrity: sha512-/HrJQOEM6aol/oF33gd2QlINcXy3e19fJWvHDuHWp2bpyTa+2dm9tVVJak30m2Qy6QyQ6Fc8DkImtv7pxWOJUQ==}
@@ -3639,9 +4155,8 @@ packages:
embla-carousel@8.6.0:
resolution: {integrity: sha512-SjWyZBHJPbqxHOzckOfo8lHisEaJWmwd23XppYFYVh10bU66/Pn5tkVkbkCMZVdbUE5eTCI2nD8OyIP4Z+uwkA==}
- emoji-regex-xs@2.0.1:
- resolution: {integrity: sha512-1QFuh8l7LqUcKe24LsPUNzjrzJQ7pgRwp1QMcZ5MX6mFplk2zQ08NVCM84++1cveaUUYtcCYHmeFEuNg16sU4g==}
- engines: {node: '>=10.0.0'}
+ emoji-regex@10.6.0:
+ resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==}
emoji-regex@8.0.0:
resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
@@ -3669,8 +4184,8 @@ packages:
resolution: {integrity: sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==}
engines: {node: '>=10.0.0'}
- enhanced-resolve@5.19.0:
- resolution: {integrity: sha512-phv3E1Xl4tQOShqSte26C7Fl84EwUdZsyOuSSk9qtAGyyQs2s3jJzComh+Abf4g187lUUAvH+H26omrqia2aGg==}
+ enhanced-resolve@5.20.1:
+ resolution: {integrity: sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA==}
engines: {node: '>=10.13.0'}
entities@4.5.0:
@@ -3685,6 +4200,10 @@ packages:
resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==}
engines: {node: '>=0.12'}
+ entities@8.0.0:
+ resolution: {integrity: sha512-zwfzJecQ/Uej6tusMqwAqU/6KL2XaB2VZ2Jg54Je6ahNBGNH6Ek6g3jjNCF0fG9EWQKGZNddNjU5F1ZQn/sBnA==}
+ engines: {node: '>=20.19.0'}
+
env-paths@3.0.0:
resolution: {integrity: sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
@@ -3714,13 +4233,8 @@ packages:
resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==}
engines: {node: '>= 0.4'}
- esbuild@0.25.12:
- resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==}
- engines: {node: '>=18'}
- hasBin: true
-
- esbuild@0.27.3:
- resolution: {integrity: sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==}
+ esbuild@0.27.7:
+ resolution: {integrity: sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==}
engines: {node: '>=18'}
hasBin: true
@@ -3743,13 +4257,13 @@ packages:
resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==}
engines: {node: '>=12'}
- eslint-config-flat-gitignore@2.1.0:
- resolution: {integrity: sha512-cJzNJ7L+psWp5mXM7jBX+fjHtBvvh06RBlcweMhKD8jWqQw0G78hOW5tpVALGHGFPsBV+ot2H+pdDGJy6CV8pA==}
+ eslint-config-flat-gitignore@2.3.0:
+ resolution: {integrity: sha512-bg4ZLGgoARg1naWfsINUUb/52Ksw/K22K+T16D38Y8v+/sGwwIYrGvH/JBjOin+RQtxxC9tzNNiy4shnGtGyyQ==}
peerDependencies:
- eslint: ^9.5.0
+ eslint: ^9.5.0 || ^10.0.0
- eslint-flat-config-utils@3.0.1:
- resolution: {integrity: sha512-VMA3u86bLzNAwD/7DkLtQ9lolgIOx2Sj0kTMMnBvrvEz7w0rQj4aGCR+lqsqtld63gKiLyT4BnQZ3gmGDXtvjg==}
+ eslint-flat-config-utils@3.1.0:
+ resolution: {integrity: sha512-lM+Nwo2CzpuTS/RASQExlEIwk/BQoKqJWX6VbDlLMb/mveqvt9MMrRXFEkG3bseuK6g8noKZLeX82epkILtv4A==}
eslint-import-context@0.1.9:
resolution: {integrity: sha512-K9Hb+yRaGAGUbwjhFNHvSmmkZs9+zbuoe3kFQ4V1wYjrepUFYM2dZAfNtjbbj3qsPfUfsA68Bx/ICWQMi+C8Eg==}
@@ -3765,18 +4279,18 @@ packages:
peerDependencies:
eslint: '*'
- eslint-plugin-import-lite@0.5.0:
- resolution: {integrity: sha512-7uBvxuQj+VlYmZSYSHcm33QgmZnvMLP2nQiWaLtjhJ5x1zKcskOqjolL+dJC13XY+ktQqBgidAnnQMELfRaXQg==}
+ eslint-plugin-import-lite@0.5.2:
+ resolution: {integrity: sha512-XvfdWOC5dSLEI9krIPRlNmKSI2ViIE9pVylzfV9fCq0ZpDaNeUk6o0wZv0OzN83QdadgXp1NsY0qjLINxwYCsw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: '>=9.0.0'
- eslint-plugin-import-x@4.16.1:
- resolution: {integrity: sha512-vPZZsiOKaBAIATpFE2uMI4w5IRwdv/FpQ+qZZMR4E+PeOcM4OeoEbqxRMnywdxP19TyB/3h6QBB0EWon7letSQ==}
+ eslint-plugin-import-x@4.16.2:
+ resolution: {integrity: sha512-rM9K8UBHcWKpzQzStn1YRN2T5NvdeIfSVoKu/lKF41znQXHAUcBbYXe5wd6GNjZjTrP7viQ49n1D83x/2gYgIw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- '@typescript-eslint/utils': ^8.0.0
- eslint: ^8.57.0 || ^9.0.0
+ '@typescript-eslint/utils': ^8.56.0
+ eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
eslint-import-resolver-node: '*'
peerDependenciesMeta:
'@typescript-eslint/utils':
@@ -3784,31 +4298,31 @@ packages:
eslint-import-resolver-node:
optional: true
- eslint-plugin-jsdoc@62.5.4:
- resolution: {integrity: sha512-U+Q5ppErmC17VFQl542eBIaXcuq975BzoIHBXyx7UQx/i4gyHXxPiBkonkuxWyFA98hGLALLUuD+NJcXqSGKxg==}
+ eslint-plugin-jsdoc@62.9.0:
+ resolution: {integrity: sha512-PY7/X4jrVgoIDncUmITlUqK546Ltmx/Pd4Hdsu4CvSjryQZJI2mEV4vrdMufyTetMiZ5taNSqvK//BTgVUlNkA==}
engines: {node: ^20.19.0 || ^22.13.0 || >=24}
peerDependencies:
- eslint: ^7.0.0 || ^8.0.0 || ^9.0.0
+ eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0
- eslint-plugin-regexp@3.0.0:
- resolution: {integrity: sha512-iW7hgAV8NOG6E2dz+VeKpq67YLQ9jaajOKYpoOSic2/q8y9BMdXBKkSR9gcMtbqEhNQzdW41E3wWzvhp8ExYwQ==}
+ eslint-plugin-regexp@3.1.0:
+ resolution: {integrity: sha512-qGXIC3DIKZHcK1H9A9+Byz9gmndY6TTSRkSMTZpNXdyCw2ObSehRgccJv35n9AdUakEjQp5VFNLas6BMXizCZg==}
engines: {node: ^20.19.0 || ^22.13.0 || >=24}
peerDependencies:
eslint: '>=9.38.0'
- eslint-plugin-unicorn@62.0.0:
- resolution: {integrity: sha512-HIlIkGLkvf29YEiS/ImuDZQbP12gWyx5i3C6XrRxMvVdqMroCI9qoVYCoIl17ChN+U89pn9sVwLxhIWj5nEc7g==}
+ eslint-plugin-unicorn@63.0.0:
+ resolution: {integrity: sha512-Iqecl9118uQEXYh7adylgEmGfkn5es3/mlQTLLkd4pXkIk9CTGrAbeUux+YljSa2ohXCBmQQ0+Ej1kZaFgcfkA==}
engines: {node: ^20.10.0 || >=21.0.0}
peerDependencies:
eslint: '>=9.38.0'
- eslint-plugin-vue@10.7.0:
- resolution: {integrity: sha512-r2XFCK4qlo1sxEoAMIoTTX0PZAdla0JJDt1fmYiworZUX67WeEGqm+JbyAg3M+pGiJ5U6Mp5WQbontXWtIW7TA==}
+ eslint-plugin-vue@10.9.0:
+ resolution: {integrity: sha512-EFNNzu4HqtTRb5DJINpyd+u3bDdzETWDMpCzG+UBHz1tpsnMDCeOcf61u4Wy/cbXnMymK+MT9bjH7KcG1fItSw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
'@stylistic/eslint-plugin': ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0
'@typescript-eslint/parser': ^7.0.0 || ^8.0.0
- eslint: ^8.57.0 || ^9.0.0
+ eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
vue-eslint-parser: ^10.0.0
peerDependenciesMeta:
'@stylistic/eslint-plugin':
@@ -3826,10 +4340,14 @@ packages:
resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- eslint-typegen@2.3.0:
- resolution: {integrity: sha512-azYgAvhlz1AyTpeLfVSKcrNJInuIsRrcUrOcHmEl8T9oMKesePVUPrF8gRgE6azV8CAlFzxJDTyaXAAbA/BYiA==}
+ eslint-scope@9.1.2:
+ resolution: {integrity: sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==}
+ engines: {node: ^20.19.0 || ^22.13.0 || >=24}
+
+ eslint-typegen@2.3.1:
+ resolution: {integrity: sha512-zVdh8rThBvv2o5T/K524Fr5iy1Jo0q09rHL7y7FbOhgMB177T2gw+shxfC4ChCEqdq6/y6LJA4j8Fbr/Xls9aw==}
peerDependencies:
- eslint: ^9.0.0
+ eslint: ^9.0.0 || ^10.0.0
eslint-visitor-keys@3.4.3:
resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
@@ -3839,8 +4357,8 @@ packages:
resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- eslint-visitor-keys@5.0.0:
- resolution: {integrity: sha512-A0XeIi7CXU7nPlfHS9loMYEKxUaONu/hTEzHTGba9Huu94Cq1hPivf+DE5erJozZOky0LfvXAyrV/tcswpLI0Q==}
+ eslint-visitor-keys@5.0.1:
+ resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==}
engines: {node: ^20.19.0 || ^22.13.0 || >=24}
eslint@9.28.0:
@@ -3857,8 +4375,8 @@ packages:
resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- espree@11.1.0:
- resolution: {integrity: sha512-WFWYhO1fV4iYkqOOvq8FbqIhr2pYfoDY0kCotMkDeNtGpiGGkZ1iov2u8ydjtgM8yF8rzK7oaTbw2NAzbAbehw==}
+ espree@11.2.0:
+ resolution: {integrity: sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==}
engines: {node: ^20.19.0 || ^22.13.0 || >=24}
esquery@1.7.0:
@@ -3902,10 +4420,6 @@ packages:
resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==}
engines: {node: '>=16.17'}
- execa@9.6.1:
- resolution: {integrity: sha512-9Be3ZoN4LmYR90tUoVu2te2BsbzHfhJyfEiAVfz7N5/zv+jduIfLrV2xdQXOHbaD6KgpGdO9PRPM1Y4Q9QkPkA==}
- 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'}
@@ -3932,11 +4446,24 @@ packages:
fast-levenshtein@2.0.6:
resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
- fast-npm-meta@0.4.8:
- resolution: {integrity: sha512-ybZVlDZ2PkO79dosM+6CLZfKWRH8MF0PiWlw8M4mVWJl8IEJrPfxYc7Tsu830Dwj/R96LKXfePGTSzKWbPJ08w==}
+ fast-npm-meta@1.5.0:
+ resolution: {integrity: sha512-71pTBPrA9WPPsJQ0Q06ZlTQQVJPYd87xZsvFwxFqru7a6kdriMVW1Hjd37W3W13ZuF/K/Zzq6eVlAHVoZCHuQw==}
+ hasBin: true
+
+ fast-string-truncated-width@1.2.1:
+ resolution: {integrity: sha512-Q9acT/+Uu3GwGj+5w/zsGuQjh9O1TyywhIwAxHudtWrgF09nHOPrvTLhQevPbttcxjr/SNN7mJmfOw/B1bXgow==}
+
+ fast-string-width@1.1.0:
+ resolution: {integrity: sha512-O3fwIVIH5gKB38QNbdg+3760ZmGz0SZMgvwJbA1b2TGXceKE6A2cOlfogh1iw8lr049zPyd7YADHy+B7U4W9bQ==}
+
+ fast-wrap-ansi@0.1.6:
+ resolution: {integrity: sha512-HlUwET7a5gqjURj70D5jl7aC3Zmy4weA1SHUfM0JFI0Ptq987NH2TwbBFLoERhfwk+E+eaq4EK3jXoT+R3yp3w==}
- fast-xml-parser@5.3.5:
- resolution: {integrity: sha512-JeaA2Vm9ffQKp9VjvfzObuMCjUYAp5WDYhRYL5LrBPY/jUDlUtOvDfot0vKSkB9tuX885BDHjtw4fZadD95wnA==}
+ fast-xml-builder@1.1.5:
+ resolution: {integrity: sha512-4TJn/8FKLeslLAH3dnohXqE3QSoxkhvaMzepOIZytwJXZO69Bfz0HBdDHzOTOon6G59Zrk6VQ2bEiv1t61rfkA==}
+
+ fast-xml-parser@5.7.1:
+ resolution: {integrity: sha512-8Cc3f8GUGUULg34pBch/KGyPLglS+OFs05deyOlY7fL2MTagYPKrVQNmR1fLF/yJ9PH5ZSTd3YDF6pnmeZU+zA==}
hasBin: true
fastq@1.20.1:
@@ -3958,13 +4485,6 @@ packages:
fflate@0.4.8:
resolution: {integrity: sha512-FJqqoDBR00Mdj9ppamLa/Y7vxm+PRmNWA67N846RvsoYVMKB4q3y/de5PA7gUmRMYK/8CMz2GDZQmCRN1wBcWA==}
- 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-entry-cache@8.0.0:
resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==}
engines: {node: '>=16.0.0'}
@@ -4013,11 +4533,22 @@ packages:
debug:
optional: true
- fontaine@0.6.0:
- resolution: {integrity: sha512-cfKqzB62GmztJhwJ0YXtzNsmpqKAcFzTqsakJ//5COTzbou90LU7So18U+4D8z+lDXr4uztaAUZBonSoPDcj1w==}
+ fontaine@0.8.0:
+ resolution: {integrity: sha512-eek1GbzOdWIj9FyQH/emqW1aEdfC3lYRCHepzwlFCm5T77fBSRSyNRKE6/antF1/B1M+SfJXVRQTY9GAr7lnDg==}
+ engines: {node: '>=18.12.0'}
+
+ fontkitten@1.0.3:
+ resolution: {integrity: sha512-Wp1zXWPVUPBmfoa3Cqc9ctaKuzKAV6uLstRqlR56kSjplf5uAce+qeyYym7F+PHbGTk+tCEdkCW6RD7DX/gBZw==}
+ engines: {node: '>=20'}
- fontkit@2.0.4:
- resolution: {integrity: sha512-syetQadaUEDNdxdugga9CpEYVaQIxOwk7GlwZWWZ19//qW4zE5bknOKeMBDYAASwnpaSHKJITRLMF9m1fp3s6g==}
+ fontless@0.2.1:
+ resolution: {integrity: sha512-mUWZ8w91/mw2KEcZ6gHNoNNmsAq9Wiw2IypIux5lM03nhXm+WSloXGUNuRETNTLqZexMgpt7Aj/v63qqrsWraQ==}
+ engines: {node: '>=18.12.0'}
+ peerDependencies:
+ vite: '*'
+ peerDependenciesMeta:
+ vite:
+ optional: true
for-each@0.3.5:
resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==}
@@ -4038,8 +4569,8 @@ packages:
fraction.js@5.3.4:
resolution: {integrity: sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==}
- framer-motion@12.34.0:
- resolution: {integrity: sha512-+/H49owhzkzQyxtn7nZeF4kdH++I2FWrESQ184Zbcw5cEqNHYkE5yxWxcTLSj5lNx3NWdbIRy5FHqUvetD8FWg==}
+ framer-motion@12.38.0:
+ resolution: {integrity: sha512-rFYkY/pigbcswl1XQSb7q424kSTQ8q6eAC+YUsSKooHQYuLdzdHjrt6uxUC+PRAO++q5IS7+TamgIw1AphxR+g==}
peerDependencies:
'@emotion/is-prop-valid': '*'
react: ^18.0.0 || ^19.0.0
@@ -4067,8 +4598,8 @@ packages:
function-bind@1.1.2:
resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
- fuse.js@7.1.0:
- resolution: {integrity: sha512-trLf4SzuuUxfusZADLINj+dE8clK1frKdmqiJNb1Es75fmI5oY6X2mxLVUciLLjxqw/xr72Dhy+lER6dGd02FQ==}
+ fuse.js@7.3.0:
+ resolution: {integrity: sha512-plz8RVjfcDedTGfVngWH1jmJvBvAwi1v2jecfDerbEnMcmOYUEEwKFTHbNoCiYyzaK2Ws8lABkTCcRSqCY1q4w==}
engines: {node: '>=10'}
fzf@0.5.2:
@@ -4082,6 +4613,10 @@ packages:
resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
engines: {node: 6.* || 8.* || >= 10.*}
+ get-east-asian-width@1.5.0:
+ resolution: {integrity: sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==}
+ engines: {node: '>=18'}
+
get-intrinsic@1.3.0:
resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==}
engines: {node: '>= 0.4'}
@@ -4101,19 +4636,15 @@ packages:
resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==}
engines: {node: '>=16'}
- get-stream@9.0.1:
- resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==}
- engines: {node: '>=18'}
-
- get-tsconfig@4.13.6:
- resolution: {integrity: sha512-shZT/QMiSHc/YBLxxOkMtgSid5HFoauqCE3/exfsEcwg1WkeqjG+V40yBbBrsD+jW2HDXcs28xOfcbm2jI8Ddw==}
+ get-tsconfig@4.14.0:
+ resolution: {integrity: sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==}
giget@2.0.0:
resolution: {integrity: sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA==}
hasBin: true
- giget@3.1.2:
- resolution: {integrity: sha512-T2qUpKBHeUTwHcIhydgnJzhL0Hj785ms+JkxaaWQH9SDM/llXeewnOkfJcFShAHjWI+26hOChwUfCoupaXLm8g==}
+ giget@3.2.0:
+ resolution: {integrity: sha512-GvHTWcykIR/fP8cj8dMpuMMkvaeJfPvYnhq0oW+chSeIr+ldX21ifU2Ms6KBoyKZQZmVaUAAhQ2EZ68KJF8a7A==}
hasBin: true
git-up@8.1.1:
@@ -4141,9 +4672,9 @@ packages:
deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me
hasBin: true
- glob@13.0.1:
- resolution: {integrity: sha512-B7U/vJpE3DkJ5WXTgTpTRN63uV42DseiXXKMwG14LQBXmsdeIoHAPbU/MEo6II0k5ED74uc2ZGTC6MwHFQhF6w==}
- engines: {node: 20 || >=22}
+ glob@13.0.6:
+ resolution: {integrity: sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==}
+ engines: {node: 18 || 20 || >=22}
global-directory@4.0.1:
resolution: {integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==}
@@ -4153,20 +4684,16 @@ packages:
resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
engines: {node: '>=18'}
- globals@15.15.0:
- resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==}
- engines: {node: '>=18'}
-
globals@16.5.0:
resolution: {integrity: sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==}
engines: {node: '>=18'}
- globals@17.3.0:
- resolution: {integrity: sha512-yMqGUQVVCkD4tqjOJf3TnrvaaHDMYp4VlUSObbkIiuCPe/ofdMBFIAcBbCSRFWOnos6qRiTVStDwqPLUclaxIw==}
+ globals@17.5.0:
+ resolution: {integrity: sha512-qoV+HK2yFl/366t2/Cb3+xxPUo5BuMynomoDmiaZBIdbs+0pYbjfZU+twLhGKp4uCZ/+NbtpVepH5bGCxRyy2g==}
engines: {node: '>=18'}
- globby@16.1.0:
- resolution: {integrity: sha512-+A4Hq7m7Ze592k9gZRy4gJ27DrXRNnC1vPjxTt1qQxEY8RxagBkBxivkCwg7FxSTG0iLLEMaUx13oOr0R2/qcQ==}
+ globby@16.2.0:
+ resolution: {integrity: sha512-QrJia2qDf5BB/V6HYlDTs0I0lBahyjLzpGQg3KT7FnCdTonAyPy2RtY802m2k4ALx6Dp752f82WsOczEVr3l6Q==}
engines: {node: '>=20'}
gopd@1.2.0:
@@ -4184,8 +4711,8 @@ packages:
resolution: {integrity: sha512-O1Ld7Dr+nqPnmGpdhzLmMTQ4vAsD+rHwMm1NLUmoUFFymBOMKxCCrtDxqdBRYXdeEPEi3SyoR4TizJLQrnKBNA==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
- h3@1.15.5:
- resolution: {integrity: sha512-xEyq3rSl+dhGX2Lm0+eFQIAzlDN6Fs0EcC4f7BNUmzaRX/PTzeuM+Tr2lHB8FoXggsQIeXLj8EDVgs5ywxyxmg==}
+ h3@1.15.11:
+ resolution: {integrity: sha512-L3THSe2MPeBwgIZVSH5zLdBBU90TOxarvhK9d04IDY2AmVS8j2Jz2LIWtwsGOU3lu2I5jCN7FNvVfY2+XyF+mg==}
has-flag@4.0.0:
resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
@@ -4206,6 +4733,10 @@ packages:
resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
engines: {node: '>= 0.4'}
+ hasown@2.0.3:
+ resolution: {integrity: sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==}
+ engines: {node: '>= 0.4'}
+
hast-util-embedded@3.0.0:
resolution: {integrity: sha512-naH8sld4Pe2ep03qqULEtvYr7EjrLK2QHY8KJR6RJkTUjPGObe1vnx585uzem2hGra+s1q08DZZpfgDVYRbaXA==}
@@ -4260,10 +4791,6 @@ packages:
hastscript@9.0.1:
resolution: {integrity: sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==}
- hex-rgb@4.3.0:
- resolution: {integrity: sha512-Ox1pJVrDCyGHMG9CFg1tmrRUMRPRsAWYc/PinY0XzJU4K7y7vjNoLKIQ7BR5UJMCxNN8EM1MNDmHWA/B3aZUuw==}
- engines: {node: '>=6'}
-
hey-listen@1.0.8:
resolution: {integrity: sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q==}
@@ -4274,8 +4801,8 @@ packages:
hookable@5.5.3:
resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==}
- hookable@6.0.1:
- resolution: {integrity: sha512-uKGyY8BuzN/a5gvzvA+3FVWo0+wUjgtfSdnmjtrOVwQCZPHpHDH2WRO3VZSOeluYrHoDCiXFffZXs8Dj1ULWtw==}
+ hookable@6.1.1:
+ resolution: {integrity: sha512-U9LYDy1CwhMCnprUfeAZWZGByVbhd54hwepegYTK7Pi5NvqEj63ifz5z+xukznehT7i6NIZRu89Ay1AZmRsLEQ==}
htm@3.1.1:
resolution: {integrity: sha512-983Vyg8NwUE7JkZ6NmOqpCZ+sh1bKv2iYTlUkzlWmA5JD2acKoxd4KVxbMmxX/85mtfdnDmTFoNKcg5DGAvxNQ==}
@@ -4308,21 +4835,13 @@ packages:
resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==}
engines: {node: '>= 14'}
- httpxy@0.1.7:
- resolution: {integrity: sha512-pXNx8gnANKAndgga5ahefxc++tJvNL87CXoRwxn1cJE2ZkWEojF3tNfQIEhZX/vfpt+wzeAzpUI4qkediX1MLQ==}
+ httpxy@0.5.1:
+ resolution: {integrity: sha512-JPhqYiixe1A1I+MXDewWDZqeudBGU8Q9jCHYN8ML+779RQzLjTi78HBvWz4jMxUD6h2/vUL12g4q/mFM0OUw1A==}
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'}
-
- iconv-lite@0.4.24:
- resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
- engines: {node: '>=0.10.0'}
-
ieee754@1.2.1:
resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
@@ -4346,8 +4865,8 @@ packages:
resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==}
engines: {node: '>=6'}
- impound@1.0.0:
- resolution: {integrity: sha512-8lAJ+1Arw2sMaZ9HE2ZmL5zOcMnt18s6+7Xqgq2aUVy4P1nlzAyPtzCDxsk51KVFwHEEdc6OWvUyqwHwhRYaug==}
+ impound@1.1.5:
+ resolution: {integrity: sha512-5AUn+QE0UofqNHu5f2Skf6Svukdg4ehOIq8O0EtqIx4jta0CDZYBPqpIHt0zrlUTiFVYlLpeH39DoikXBjPKpA==}
imurmurhash@0.1.4:
resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
@@ -4378,8 +4897,8 @@ packages:
peerDependencies:
algoliasearch: '>= 3.1 < 6'
- ioredis@5.9.2:
- resolution: {integrity: sha512-tAAg/72/VxOUW7RQSX1pIxJVucYKcjFjfvj60L57jrZpYCHC3XN0WCQ3sNYL4Gmvv+7GPvTAjc+KSdeNuE8oWQ==}
+ ioredis@5.10.1:
+ resolution: {integrity: sha512-HuEDBTI70aYdx1v6U97SbNx9F1+svQKBDo30o0b9fw055LMepzpOOd0Ccg9Q6tbqmBSJaMuY0fB7yw9/vjBYCA==}
engines: {node: '>=12.22.0'}
iron-webcrypto@1.2.1:
@@ -4435,6 +4954,10 @@ packages:
is-hexadecimal@2.0.1:
resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==}
+ is-in-ssh@1.0.0:
+ resolution: {integrity: sha512-jYa6Q9rH90kR1vKB6NM7qqd1mge3Fx4Dhw5TVlK1MUBqhEOuCagrEHMevNuCcbECmXZ0ThXkRm+Ymr51HwEPAw==}
+ engines: {node: '>=20'}
+
is-inside-container@1.0.0:
resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==}
engines: {node: '>=14.16'}
@@ -4473,34 +4996,18 @@ packages:
resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
- is-stream@4.0.1:
- resolution: {integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==}
- engines: {node: '>=18'}
-
is-typed-array@1.1.15:
resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==}
engines: {node: '>= 0.4'}
- is-unicode-supported@2.1.0:
- resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==}
- engines: {node: '>=18'}
-
- is-what@5.5.0:
- resolution: {integrity: sha512-oG7cgbmg5kLYae2N5IVd3jm2s+vldjxJzK1pcu9LfpGuQ93MQSzo0okvRna+7y5ifrD+20FE8FvjusyGaz14fw==}
- engines: {node: '>=18'}
-
is-wsl@2.2.0:
resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==}
engines: {node: '>=8'}
- is-wsl@3.1.0:
- resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==}
+ is-wsl@3.1.1:
+ resolution: {integrity: sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==}
engines: {node: '>=16'}
- is64bit@2.0.0:
- resolution: {integrity: sha512-jv+8jaWCl0g2lSBkNSVXdzfBA0npK1HGC2KtWM9FumFRoGS94g3NbCCLVnCYHLjp4GrW2KZeeSTMo5ddtznmGw==}
- engines: {node: '>=18'}
-
isarray@1.0.0:
resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==}
@@ -4510,15 +5017,18 @@ packages:
isexe@2.0.0:
resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
- isexe@3.1.5:
- resolution: {integrity: sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w==}
- engines: {node: '>=18'}
+ isexe@4.0.0:
+ resolution: {integrity: sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw==}
+ engines: {node: '>=20'}
- isomorphic-git@1.36.3:
- resolution: {integrity: sha512-bHF1nQTjL0IfSo13BHDO8oQ6SvYNQduTAdPJdSmrJ5JwZY2fsyjLujEXav5hqPCegSCAnc75ZsBUHqT/NqR7QA==}
+ isomorphic-git@1.37.5:
+ resolution: {integrity: sha512-wek54c5uFvd3WsxewLWt6h0GXKWQh0P8rRXns9bN1rHNjcgCb3+0lmyAsP594NeTtQFeCJQVS9b0kjbkD1l5qg==}
engines: {node: '>=14.17'}
hasBin: true
+ isomorphic.js@0.2.5:
+ resolution: {integrity: sha512-PIeMbHqMt4DnUP3MA/Flc0HElYjMXArsw1qwJZcm9sqR8mq3l8NYizFMty0pWwE/tzIGH3EKK5+jes5mAr85yw==}
+
jackspeak@3.4.3:
resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==}
@@ -4536,8 +5046,8 @@ packages:
resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==}
hasBin: true
- jsdoc-type-pratt-parser@7.1.1:
- resolution: {integrity: sha512-/2uqY7x6bsrpi3i9LVU6J89352C0rpMk0as8trXxCtvd4kPk1ke/Eyif6wqfSLvoNJqcDG9Vk4UsXgygzCt2xA==}
+ jsdoc-type-pratt-parser@7.2.0:
+ resolution: {integrity: sha512-dh140MMgjyg3JhJZY/+iEzW+NO5xR2gpbDFKHqotCmexElVntw7GjWjt511+C/Ef02RU5TKYrJo/Xlzk+OLaTw==}
engines: {node: '>=20.0.0'}
jsesc@3.1.0:
@@ -4554,9 +5064,6 @@ packages:
json-schema-traverse@0.4.1:
resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
- json-schema@0.4.0:
- resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==}
-
json-stable-stringify-without-jsonify@1.0.1:
resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
@@ -4572,10 +5079,6 @@ packages:
keyv@4.5.4:
resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
- kleur@3.0.3:
- resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==}
- engines: {node: '>=6'}
-
kleur@4.1.5:
resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==}
engines: {node: '>=6'}
@@ -4587,11 +5090,8 @@ packages:
knitwork@1.3.0:
resolution: {integrity: sha512-4LqMNoONzR43B1W0ek0fhXMsDNW/zxa1NdFAVMY+k28pgZLovR4G3PB5MrpTxCy1QaZCqNoiaKPr5w5qZHfSNw==}
- kolorist@1.8.0:
- resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==}
-
- launch-editor@2.12.0:
- resolution: {integrity: sha512-giOHXoOtifjdHqUamwKq6c49GzBdLjvxrd2D+Q4V6uOHopJv7p9VJxikDsQ/CBXZbEITgUqSVHXLTG3VhPP1Dg==}
+ launch-editor@2.13.2:
+ resolution: {integrity: sha512-4VVDnbOpLXy/s8rdRCSXb+zfMeFR0WlJWpET1iA9CQdlZDfwyLjUuGQzXU4VeOoey6AicSAluWan7Etga6Kcmg==}
lazystream@1.0.1:
resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==}
@@ -4601,92 +5101,97 @@ packages:
resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
engines: {node: '>= 0.8.0'}
+ lib0@0.2.117:
+ resolution: {integrity: sha512-DeXj9X5xDCjgKLU/7RR+/HQEVzuuEUiwldwOGsHK/sfAfELGWEyTcf0x+uOvCvK3O2zPmZePXWL85vtia6GyZw==}
+ engines: {node: '>=16'}
+ hasBin: true
+
lighthouse-logger@2.0.2:
resolution: {integrity: sha512-vWl2+u5jgOQuZR55Z1WM0XDdrJT6mzMP8zHUct7xTlWhuQs+eV0g+QL0RQdFjT54zVmbhLCP8vIVpy1wGn/gCg==}
- lightningcss-android-arm64@1.30.2:
- resolution: {integrity: sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==}
+ lightningcss-android-arm64@1.32.0:
+ resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==}
engines: {node: '>= 12.0.0'}
cpu: [arm64]
os: [android]
- lightningcss-darwin-arm64@1.30.2:
- resolution: {integrity: sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==}
+ lightningcss-darwin-arm64@1.32.0:
+ resolution: {integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==}
engines: {node: '>= 12.0.0'}
cpu: [arm64]
os: [darwin]
- lightningcss-darwin-x64@1.30.2:
- resolution: {integrity: sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==}
+ lightningcss-darwin-x64@1.32.0:
+ resolution: {integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==}
engines: {node: '>= 12.0.0'}
cpu: [x64]
os: [darwin]
- lightningcss-freebsd-x64@1.30.2:
- resolution: {integrity: sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==}
+ lightningcss-freebsd-x64@1.32.0:
+ resolution: {integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==}
engines: {node: '>= 12.0.0'}
cpu: [x64]
os: [freebsd]
- lightningcss-linux-arm-gnueabihf@1.30.2:
- resolution: {integrity: sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==}
+ lightningcss-linux-arm-gnueabihf@1.32.0:
+ resolution: {integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==}
engines: {node: '>= 12.0.0'}
cpu: [arm]
os: [linux]
- lightningcss-linux-arm64-gnu@1.30.2:
- resolution: {integrity: sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==}
+ lightningcss-linux-arm64-gnu@1.32.0:
+ resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==}
engines: {node: '>= 12.0.0'}
cpu: [arm64]
os: [linux]
libc: [glibc]
- lightningcss-linux-arm64-musl@1.30.2:
- resolution: {integrity: sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==}
+ lightningcss-linux-arm64-musl@1.32.0:
+ resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==}
engines: {node: '>= 12.0.0'}
cpu: [arm64]
os: [linux]
libc: [musl]
- lightningcss-linux-x64-gnu@1.30.2:
- resolution: {integrity: sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==}
+ lightningcss-linux-x64-gnu@1.32.0:
+ resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==}
engines: {node: '>= 12.0.0'}
cpu: [x64]
os: [linux]
libc: [glibc]
- lightningcss-linux-x64-musl@1.30.2:
- resolution: {integrity: sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==}
+ lightningcss-linux-x64-musl@1.32.0:
+ resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==}
engines: {node: '>= 12.0.0'}
cpu: [x64]
os: [linux]
libc: [musl]
- lightningcss-win32-arm64-msvc@1.30.2:
- resolution: {integrity: sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==}
+ lightningcss-win32-arm64-msvc@1.32.0:
+ resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==}
engines: {node: '>= 12.0.0'}
cpu: [arm64]
os: [win32]
- lightningcss-win32-x64-msvc@1.30.2:
- resolution: {integrity: sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==}
+ lightningcss-win32-x64-msvc@1.32.0:
+ resolution: {integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==}
engines: {node: '>= 12.0.0'}
cpu: [x64]
os: [win32]
- lightningcss@1.30.2:
- resolution: {integrity: sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==}
+ lightningcss@1.32.0:
+ resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==}
engines: {node: '>= 12.0.0'}
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==}
+ linkifyjs@4.3.2:
+ resolution: {integrity: sha512-NT1CJtq3hHIreOianA8aSXn6Cw0JzYOuDQbOrSPe7gqFnCpKP++MQe3ODgO3oh2GJFORkAAdqredOa60z63GbA==}
- listhen@1.9.0:
- resolution: {integrity: sha512-I8oW2+QL5KJo8zXNWX046M134WchxsXC7SawLPvRQpogCbkyQIaFxPE89A2HiwR7vAK2Dm2ERBAmyjTYGYEpBg==}
+ listhen@1.9.1:
+ resolution: {integrity: sha512-4EhoyVcXEpNlY5HJRSQpH7Rba94M8N2JmI62ePjl0lrJKXSfG0F1FAgHGxBoz/T3pe41sUEwkIRRIcaUL0/Ofw==}
hasBin: true
load-tsconfig@0.2.5:
@@ -4730,8 +5235,11 @@ packages:
lodash.uniq@4.5.0:
resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==}
- lodash@4.17.23:
- resolution: {integrity: sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==}
+ lodash@4.18.1:
+ resolution: {integrity: sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==}
+
+ logs-sdk@0.0.6:
+ resolution: {integrity: sha512-G4M1C9aLLBOIWpmw/Lqk4zrap/T2IJsoUOuUDjRcVSLy6lHQqxr3wCqIT1FvvpYTUYpEwvu4utsMY42jTNvx8Q==}
long@5.3.2:
resolution: {integrity: sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==}
@@ -4746,8 +5254,8 @@ packages:
lru-cache@10.4.3:
resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
- lru-cache@11.2.5:
- resolution: {integrity: sha512-vFrFJkWtJvJnD5hg+hJvVE8Lh/TcMzKnTgCWmtBipwI5yLX/iX+5UB2tfuyODF5E7k9xEzMdYgGqaSb1c0c5Yw==}
+ lru-cache@11.3.5:
+ resolution: {integrity: sha512-NxVFwLAnrd9i7KUBxC4DrUhmgjzOs+1Qm50D3oF1/oL+r1NpZ4gA7xvG0/zJ8evR7zIKn4vLf7qTNduWFtCrRw==}
engines: {node: 20 || >=22}
lru-cache@5.1.1:
@@ -4778,6 +5286,11 @@ packages:
react:
optional: true
+ marked@17.0.6:
+ resolution: {integrity: sha512-gB0gkNafnonOw0obSTEGZTT86IuhILt2Wfx0mWH/1Au83kybTayroZ/V6nS25mN7u8ASy+5fMhgB3XPNrOZdmA==}
+ engines: {node: '>= 20'}
+ hasBin: true
+
marky@1.3.0:
resolution: {integrity: sha512-ocnPZQLNpvbedwTy9kNrQEsknEfgvcLMvOtz3sFeWApDq1MXH1TqkCIx58xlpESsfwQOnuBO9beyQuNGzVvuhQ==}
@@ -4788,8 +5301,8 @@ packages:
mdast-util-find-and-replace@3.0.2:
resolution: {integrity: sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==}
- mdast-util-from-markdown@2.0.2:
- resolution: {integrity: sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==}
+ mdast-util-from-markdown@2.0.3:
+ resolution: {integrity: sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q==}
mdast-util-gfm-autolink-literal@2.0.1:
resolution: {integrity: sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==}
@@ -4824,8 +5337,8 @@ packages:
mdn-data@2.0.28:
resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==}
- mdn-data@2.12.2:
- resolution: {integrity: sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==}
+ mdn-data@2.27.1:
+ resolution: {integrity: sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==}
merge-stream@2.0.0:
resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
@@ -4964,19 +5477,19 @@ packages:
minimark@0.2.0:
resolution: {integrity: sha512-AmtWU9pO0C2/3AM2pikaVhJ//8E5rOpJ7+ioFQfjIq+wCsBeuZoxPd97hBFZ9qrI7DMHZudwGH3r8A7BMnsIew==}
- minimatch@10.1.2:
- resolution: {integrity: sha512-fu656aJ0n2kcXwsnwnv9g24tkU5uSmOlTjd6WyyaKm2Z+h1qmY6bAjrcaIxF/BslFqbZ8UBtbJi7KgQOZD2PTw==}
- engines: {node: 20 || >=22}
+ minimatch@10.2.5:
+ resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==}
+ engines: {node: 18 || 20 || >=22}
minimatch@3.1.5:
resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==}
- minimatch@5.1.6:
- resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==}
+ minimatch@5.1.9:
+ resolution: {integrity: sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==}
engines: {node: '>=10'}
- minimatch@9.0.5:
- resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
+ minimatch@9.0.9:
+ resolution: {integrity: sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==}
engines: {node: '>=16 || 14 >=14.17'}
minimist@1.2.8:
@@ -4985,8 +5498,8 @@ packages:
minimisted@2.0.1:
resolution: {integrity: sha512-1oPjfuLQa2caorJUM8HV8lGgWCc0qqAO1MNv/k05G4qslmsndV/5WdNZrqCiyqiz3wohia2Ij2B7w2Dr7/IyrA==}
- minipass@7.1.2:
- resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
+ minipass@7.1.3:
+ resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==}
engines: {node: '>=16 || 14 >=14.17'}
minizlib@3.1.0:
@@ -4996,9 +5509,6 @@ packages:
mitt@2.1.0:
resolution: {integrity: sha512-ILj2TpLiysu2wkBbWjAmww7TkZb65aiQO+DkVdUTBpBXq+MHYiETENkKFMtsJZX1Lf4pe4QOrTSjIfUwN5lRdg==}
- mitt@3.0.1:
- resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==}
-
mkdirp-classic@0.5.3:
resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==}
@@ -5009,17 +5519,20 @@ packages:
mlly@1.8.0:
resolution: {integrity: sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==}
+ mlly@1.8.2:
+ resolution: {integrity: sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==}
+
mocked-exports@0.1.1:
resolution: {integrity: sha512-aF7yRQr/Q0O2/4pIXm6PZ5G+jAd7QS4Yu8m+WEeEHGnbo+7mE36CbLSDQiXYV8bVL3NfmdeqPJct0tUlnjVSnA==}
- motion-dom@12.34.0:
- resolution: {integrity: sha512-Lql3NuEcScRDxTAO6GgUsRHBZOWI/3fnMlkMcH5NftzcN37zJta+bpbMAV9px4Nj057TuvRooMK7QrzMCgtz6Q==}
+ motion-dom@12.38.0:
+ resolution: {integrity: sha512-pdkHLD8QYRp8VfiNLb8xIBJis1byQ9gPT3Jnh2jqfFtAsWUA3dEepDlsWe/xMpO8McV+VdpKVcp+E+TGJEtOoA==}
- motion-utils@12.29.2:
- resolution: {integrity: sha512-G3kc34H2cX2gI63RqU+cZq+zWRRPSsNIOjpdl9TN4AQwC4sgwYPl/Q/Obf/d53nOm569T0fYK+tcoSV50BWx8A==}
+ motion-utils@12.36.0:
+ resolution: {integrity: sha512-eHWisygbiwVvf6PZ1vhaHCLamvkSbPIeAYxWUuL3a2PD/TROgE7FvfHWTIH4vMl798QLfMw15nRqIaRDXTlYRg==}
- motion-v@1.10.2:
- resolution: {integrity: sha512-K+Zus21KKgZP4CBY7CvU/B7UZCV9sZTHG0FgsAfGHlbZi+u8EolmZ2kvJe5zOG0RzCgdiVCobHBt54qch9rweg==}
+ motion-v@2.2.1:
+ resolution: {integrity: sha512-BYbABe1Ep/u33dHOrK+8SoVU2MuiQqT94JOYsgrge8QbrwkKf2lS6rHW2QyzP6t89wcyBvzZeLQQwfrx76dj9A==}
peerDependencies:
'@vueuse/core': '>=10.0.0'
vue: '>=3.0.0'
@@ -5039,13 +5552,8 @@ packages:
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
hasBin: true
- nanoid@5.1.6:
- resolution: {integrity: sha512-c7+7RQ+dMB5dPwwCp4ee1/iV/q2P6aK1mTZcfr1BTuVlyW9hJYiMPybJCcnBlQtuSmTIWNeazm/zqNoZSSElBg==}
- engines: {node: ^18 || >=20}
- hasBin: true
-
- nanotar@0.2.0:
- resolution: {integrity: sha512-9ca1h0Xjvo9bEkE4UOxgAzLV0jHKe6LMaxo37ND2DAhhAtd0j8pR1Wxz+/goMrZO8AEZTWCmyaOsFI/W5AdpCQ==}
+ nanotar@0.3.0:
+ resolution: {integrity: sha512-Kv2JYYiCzt16Kt5QwAc9BFG89xfPNBx+oQL4GQXD9nLqPkZBiNaqaCWtwnbk/q7UVsTYevvM1b0UF8zmEI4pCg==}
napi-build-utils@2.0.0:
resolution: {integrity: sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==}
@@ -5062,8 +5570,8 @@ packages:
resolution: {integrity: sha512-Nc3loyVASW59W+8fLDZT1lncpG7llffyZ2o0UQLx/Fr20i7P8oP+lE7+TEcFvXj9IUWU6LjB9P3BH+iFGyp+mg==}
engines: {node: ^14.16.0 || >=16.0.0}
- nitropack@2.13.1:
- resolution: {integrity: sha512-2dDj89C4wC2uzG7guF3CnyG+zwkZosPEp7FFBGHB3AJo11AywOolWhyQJFHDzve8COvGxJaqscye9wW2IrUsNw==}
+ nitropack@2.13.3:
+ resolution: {integrity: sha512-C8vO7RxkU0AQ3HbYUumuG6MVM5JjRaBchke/rYFOp3EvrLtTBHZYhDVGECdpa27vNuOYRzm3GtQMn2YDOjDJLA==}
engines: {node: ^20.19.0 || >=22.12.0}
hasBin: true
peerDependencies:
@@ -5104,8 +5612,8 @@ packages:
resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
- node-forge@1.3.3:
- resolution: {integrity: sha512-rLvcdSyRCyouf6jcOIPe/BgwG/d7hKjzMKOas33/pHEr6gbq18IK9zV7DiPvzsz0oBJPme6qr6H6kGZuI9/DZg==}
+ node-forge@1.4.0:
+ resolution: {integrity: sha512-LarFH0+6VfriEhqMMcLX2F7SwSXeWwnEAJEsYm5QKWchiVYVvJyV9v7UDvUv+w5HO23ZpQTXDv/GxdDdMyOuoQ==}
engines: {node: '>= 6.13.0'}
node-gyp-build@4.8.4:
@@ -5115,8 +5623,8 @@ packages:
node-mock-http@1.0.4:
resolution: {integrity: sha512-8DY+kFsDkNXy1sJglUfuODx1/opAGJGyrTuFqEoN90oRc2Vk0ZbD4K2qmKXBBEhZQzdKHIVfEJpDU8Ak2NJEvQ==}
- node-releases@2.0.27:
- resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==}
+ node-releases@2.0.38:
+ resolution: {integrity: sha512-3qT/88Y3FbH/Kx4szpQQ4HzUbVrHPKTLVpVocKiLfoYvw9XSGOX2FmD2d6DrXbVYyAQTF2HeF6My8jmzx7/CRw==}
nopt@1.0.10:
resolution: {integrity: sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==}
@@ -5146,25 +5654,59 @@ packages:
nth-check@2.1.1:
resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==}
- nuxt-component-meta@0.17.1:
- resolution: {integrity: sha512-5pVCzWXqg9HP159JDhdfQJtFvgmS/KouEVpyYLPEBXWMrQoJBwujsczmLeIKXKI2BTy4RqfXy8N1GfGTZNb57g==}
+ nuxt-component-meta@0.17.2:
+ resolution: {integrity: sha512-2/mSSqutOX8t+r8cAX1yUYwAPBqicPO5Rfum3XaHVszxKCF4tXEXBiPGfJY9Zn69x/CIeOdw+aM9wmHzQ5Q+lA==}
hasBin: true
- nuxt-link-checker@4.3.9:
- resolution: {integrity: sha512-iYJU+A/xUhk62v4tol9cdjJS1+ZOSl0+tdUObgifdeSts6IqAUByUAiX4H6yOY2tdQYKjahMFbQr1GJ+/4LYnQ==}
+ nuxt-link-checker@5.0.9:
+ resolution: {integrity: sha512-hWVYv6D/joMP4LD+iK9fVKr3x32qA0nkfN/dDEvwXXwpuoQuPQ8rf3chisrvHk/hGjNIIE8RsU9CCW4J6x5W7g==}
+ peerDependencies:
+ nuxt: ^3.9.0 || ^4.0.0
nuxt-llms@0.2.0:
resolution: {integrity: sha512-GoEW00x8zaZ1wS0R0aOYptt3b54JEaRwlyVtuAiQoH51BwYdjN5/3+00/+4wi39M5cT4j5XcnGwOxJ7v4WVb9A==}
- nuxt-og-image@5.1.13:
- resolution: {integrity: sha512-H9kqGlmcEb9agWURwT5iFQjbr7Ec7tcQHZZaYSpC/JXKq2/dFyRyAoo6oXTk6ob20dK9aNjkJDcX2XmgZy67+w==}
+ nuxt-og-image@6.4.7:
+ resolution: {integrity: sha512-NbNRv2ouWqqzuOfrElFacSeog/Jj+ARXpEFh1LJOKWmdh7ITIc9Mz8pGD1bpH+6OXGN1Mz83+aV5oR0yyKZrig==}
engines: {node: '>=18.0.0'}
+ hasBin: true
peerDependencies:
- '@unhead/vue': ^2.0.5
+ '@resvg/resvg-js': ^2.6.0
+ '@resvg/resvg-wasm': ^2.6.0
+ '@takumi-rs/core': ^1.0.0-beta.3
+ '@takumi-rs/wasm': ^1.0.0-beta.3
+ '@unhead/vue': ^2.0.5 || ^3.0.0
+ fontless: ^0.2.0
+ playwright-core: ^1.50.0
+ satori: '>=0.19.2'
+ sharp: ^0.34.0
+ tailwindcss: ^4.0.0
+ unifont: ^0.7.0
unstorage: ^1.15.0
+ peerDependenciesMeta:
+ '@resvg/resvg-js':
+ optional: true
+ '@resvg/resvg-wasm':
+ optional: true
+ '@takumi-rs/core':
+ optional: true
+ '@takumi-rs/wasm':
+ optional: true
+ fontless:
+ optional: true
+ playwright-core:
+ optional: true
+ satori:
+ optional: true
+ sharp:
+ optional: true
+ tailwindcss:
+ optional: true
+ unifont:
+ optional: true
- nuxt-schema-org@5.0.10:
- resolution: {integrity: sha512-3DA0o1a+G+MTrnuaV8vU7B3dNjZgTxQ9XLkzop2bKenU7Ru5poFEMl16sOTvClvKm3KB3AwWU24RbPGeSg3epA==}
+ nuxt-schema-org@6.0.4:
+ resolution: {integrity: sha512-QyDq1TRAkcRV6yh3P3eVA3PtaaxCAnAlfAyYCbKLam1nIBcayxi7xST/NMVlCVfdCQalgwexbuWXg/fE+OJnqA==}
peerDependencies:
'@unhead/vue': ^2.0.7
unhead: ^2.0.7
@@ -5177,17 +5719,30 @@ packages:
zod:
optional: true
- nuxt-seo-utils@7.0.19:
- resolution: {integrity: sha512-OTYhViaifRaFv4kMSjaS/kuX/0g05a26/oNIV6WO8cWBI7azzd/7k8Q/PN0MJb2xUzt+MI//CDQKYk4IXD5+Rw==}
+ nuxt-seo-utils@8.1.11:
+ resolution: {integrity: sha512-q8sV6vB6zvX5kzRN3NZy8zKQ6QR1mwai2hqqer3YQiUvAI12zD+a/GF5teprzc/mCwcjF6w1bMlu7/naPQ9Cvw==}
+ hasBin: true
+ peerDependencies:
+ esbuild: '>=0.17.0'
+ lightningcss: '>=1.20.0'
+ nuxt: ^3.0.0 || ^4.0.0
+ rolldown: '>=1.0.0-beta.0'
+ peerDependenciesMeta:
+ esbuild:
+ optional: true
+ lightningcss:
+ optional: true
+ rolldown:
+ optional: true
- nuxt-site-config-kit@3.2.19:
- resolution: {integrity: sha512-5L9Dgw+QGnTLhVO7Km2oZU+wWllvNXLAFXUiZMX1dt37FKXX6v95ZKCVlFfnkSHQ+I2lmuUhFUpuORkOoVnU+g==}
+ nuxt-site-config-kit@4.0.8:
+ resolution: {integrity: sha512-7g3giKXt0M2vssCUg8XFfR6+u4U0zywQ8p8i4msy4p+9etteFNrkrCmVHZ83xiWGFbnoTgiaymPjbaQH3KZqAg==}
- nuxt-site-config@3.2.19:
- resolution: {integrity: sha512-OUGfo8aJWbymheyb9S2u78ADX73C9qBf8u6BwEJiM82JBhvJTEduJBMlK8MWeh3x9NF+/YX4AYsY5hjfQE5jGA==}
+ nuxt-site-config@4.0.8:
+ resolution: {integrity: sha512-H7wHoOJ5Z6ZnTqD5vUugaKkWZbejZ9kGmzpr2dheOaC6RdT8JafCfMrmJG7W+cyJiJJ3YmzL+bzPBW2bW6MExA==}
- nuxt@4.3.1:
- resolution: {integrity: sha512-bl+0rFcT5Ax16aiWFBFPyWcsTob19NTZaDL5P6t0MQdK63AtgS6fN6fwvwdbXtnTk6/YdCzlmuLzXhSM22h0OA==}
+ nuxt@4.4.2:
+ resolution: {integrity: sha512-iWVFpr/YEqVU/CenqIHMnIkvb2HE/9f+q8oxZ+pj2et+60NljGRClCgnmbvGPdmNFE0F1bEhoBCYfqbDOCim3Q==}
engines: {node: ^20.19.0 || >=22.12.0}
hasBin: true
peerDependencies:
@@ -5199,6 +5754,37 @@ packages:
'@types/node':
optional: true
+ nuxtseo-layer-devtools@0.5.1:
+ resolution: {integrity: sha512-kBbQzZdQI95e6NFzhCgNSiRz+QAwZfv7oOuIHIHDeW0hoJoHBs71TbHwi8DIe23t5IcZ9lzxiG7qJsM+uPhiHg==}
+
+ nuxtseo-shared@0.9.0:
+ resolution: {integrity: sha512-3V/vT2F4jON8mRThHPWzwVq6ZTU/J4PsqKwuaoON6b2OraULUhqOl1dOUQcduGHNgfYKhg9UygrT0xk+aUwM/g==}
+ peerDependencies:
+ '@nuxt/schema': ^3.16.0 || ^4.0.0
+ nuxt: ^3.16.0 || ^4.0.0
+ nuxt-site-config: ^3.2.0 || ^4.0.0
+ vue: ^3.5.0
+ zod: ^3.23.0 || ^4.0.0
+ peerDependenciesMeta:
+ nuxt-site-config:
+ optional: true
+ zod:
+ optional: true
+
+ nuxtseo-shared@5.1.3:
+ resolution: {integrity: sha512-euCaYANxdjeLzJcxvEczKpLuikxPy/LUT/v69orStKlG2U4pvWaqDv74QO8YMCCmUbAO+8BoRj/SJccu9GcJGQ==}
+ peerDependencies:
+ '@nuxt/schema': ^3.16.0 || ^4.0.0
+ nuxt: ^3.16.0 || ^4.0.0
+ nuxt-site-config: ^3.2.0 || ^4.0.0
+ vue: ^3.5.0
+ zod: ^3.23.0 || ^4.0.0
+ peerDependenciesMeta:
+ nuxt-site-config:
+ optional: true
+ zod:
+ optional: true
+
nypm@0.6.5:
resolution: {integrity: sha512-K6AJy1GMVyfyMXRVB88700BJqNUkByijGJM8kEHpLdcAt+vSQAVfkWWHYzuRXHSY6xA2sNc5RjTj0p9rE2izVQ==}
engines: {node: '>=18'}
@@ -5238,19 +5824,19 @@ packages:
resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==}
engines: {node: '>=12'}
- oniguruma-parser@0.12.1:
- resolution: {integrity: sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==}
+ oniguruma-parser@0.12.2:
+ resolution: {integrity: sha512-6HVa5oIrgMC6aA6WF6XyyqbhRPJrKR02L20+2+zpDtO5QAzGHAUGw5TKQvwi5vctNnRHkJYmjAhRVQF2EKdTQw==}
- oniguruma-to-es@4.3.4:
- resolution: {integrity: sha512-3VhUGN3w2eYxnTzHn+ikMI+fp/96KoRSVK9/kMTcFqj1NRDh2IhQCKvYxDnWePKRXY/AqH+Fuiyb7VHSzBjHfA==}
+ oniguruma-to-es@4.3.6:
+ resolution: {integrity: sha512-csuQ9x3Yr0cEIs/Zgx/OEt9iBw9vqIunAPQkx19R/fiMq2oGVTgcMqO/V3Ybqefr1TBvosI6jU539ksaBULJyA==}
open@10.2.0:
resolution: {integrity: sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==}
engines: {node: '>=18'}
- open@8.4.2:
- resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==}
- engines: {node: '>=12'}
+ open@11.0.0:
+ resolution: {integrity: sha512-smsWv2LzFjP03xmvFoJ331ss6h+jixfA4UUV/Bsiyuu4YJPfN+FIQGOIiv4w9/+MoHkfkJ22UIaQWRVFRfH6Vw==}
+ engines: {node: '>=20'}
openapi3-ts@4.5.0:
resolution: {integrity: sha512-jaL+HgTq2Gj5jRcfdutgRGLosCy/hT8sQf6VOy+P+g36cZOjI1iukdPnijC+4CmeRzg/jEllJUboEic2FhxhtQ==}
@@ -5259,16 +5845,27 @@ packages:
resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
engines: {node: '>= 0.8.0'}
- oxc-minify@0.112.0:
- resolution: {integrity: sha512-rkVSeeIRSt+RYI9uX6xonBpLUpvZyegxIg0UL87ev7YAfUqp7IIZlRjkgQN5Us1lyXD//TOo0Dcuuro/TYOWoQ==}
+ orderedmap@2.1.1:
+ resolution: {integrity: sha512-TvAWxi0nDe1j/rtMcWcIj94+Ffe6n7zhow33h40SKxmsmozs6dz/e+EajymfoFcHd7sxNn8yHM8839uixMOV6g==}
+
+ oxc-minify@0.117.0:
+ resolution: {integrity: sha512-JHsv/b+bmBJkAzkHXgTN7RThloVxLHPT0ojHfjqxVeHuQB7LPpLUbJ2qfwz37sto9stZ9+AVwUP4b3gtR7p/Tw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+
+ oxc-parser@0.117.0:
+ resolution: {integrity: sha512-l3cbgK5wUvWDVNWM/JFU77qDdGZK1wudnLsFcrRyNo/bL1CyU8pC25vDhMHikVY29lbK2InTWsX42RxVSutUdQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+
+ oxc-parser@0.126.0:
+ resolution: {integrity: sha512-FktCvLby/mOHyuijZt22+nOt10dS24gGUZE3XwIbUg7Kf4+rer3/5T7RgwzazlNuVsCjPloZ3p8E+4ONT3A8Kw==}
engines: {node: ^20.19.0 || >=22.12.0}
- oxc-parser@0.112.0:
- resolution: {integrity: sha512-7rQ3QdJwobMQLMZwQaPuPYMEF2fDRZwf51lZ//V+bA37nejjKW5ifMHbbCwvA889Y4RLhT+/wLJpPRhAoBaZYw==}
+ oxc-parser@0.127.0:
+ resolution: {integrity: sha512-bkgD4qHlN7WxLdX8bLXdaU54TtQtAIg/ZBAfm0aje/mo3MRDo3P0hZSgr4U7O3xfX+fQmR5AP04JS/TGcZLcFA==}
engines: {node: ^20.19.0 || >=22.12.0}
- oxc-transform@0.112.0:
- resolution: {integrity: sha512-cIRRvZgrHfsAHrkt8LWdAX4+Do8R0MzQSfeo9yzErzHeYiuyNiP4PCTPbOy/wBXL4MYzt3ebrBa5jt3akQkKAg==}
+ oxc-transform@0.117.0:
+ resolution: {integrity: sha512-u1Stl2uhDh9bFuOGjGXQIqx46IRUNMyHQkq59LayXNGS2flNv7RpZpRSWs5S5deuNP6jJZ12gtMBze+m4dOhmw==}
engines: {node: ^20.19.0 || >=22.12.0}
oxc-walker@0.7.0:
@@ -5288,6 +5885,10 @@ packages:
resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ p-limit@7.3.0:
+ resolution: {integrity: sha512-7cIXg/Z0M5WZRblrsOla88S4wAK+zOQQWeBYfV3qJuJXMr+LnbYjaadrFaS0JILfEDPVqHyKnZ1Z/1d6J9VVUw==}
+ engines: {node: '>=20'}
+
p-locate@5.0.0:
resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
engines: {node: '>=10'}
@@ -5310,9 +5911,6 @@ packages:
package-manager-detector@1.6.0:
resolution: {integrity: sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==}
- pako@0.2.9:
- resolution: {integrity: sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==}
-
pako@1.0.11:
resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==}
@@ -5320,9 +5918,6 @@ packages:
resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
engines: {node: '>=6'}
- parse-css-color@0.2.1:
- resolution: {integrity: sha512-bwS/GGIFV3b6KS4uwpzCFj4w297Yl3uqnSgIPsoQkx7GMLROXfMnWvxfNkL0oh8HVhZA4hvJoEoEIqonfJ3BWg==}
-
parse-entities@4.0.2:
resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==}
@@ -5333,10 +5928,6 @@ packages:
parse-imports-exports@0.2.4:
resolution: {integrity: sha512-4s6vd6dx1AotCx/RCI2m7t7GCh5bDRUtGNvRfHSP2wbBQdMi67pPe7mtzmgwcaQ8VKK/6IB7Glfyu3qdZJPybQ==}
- parse-ms@4.0.0:
- resolution: {integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==}
- engines: {node: '>=18'}
-
parse-path@7.1.0:
resolution: {integrity: sha512-EuCycjZtfPcjWk7KTksnJ5xPMvWGA/6i4zrLYhRG0hGvC3GPU/jGUj3Cy+ZR0v30duV3e23R95T1lE2+lsndSw==}
@@ -5350,8 +5941,8 @@ packages:
parse5@7.3.0:
resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==}
- parse5@8.0.0:
- resolution: {integrity: sha512-9m4m5GSgXjL4AjumKzq1Fgfp3Z8rsvjRNbnkVwfu2ImRqE5D0LnY2QfDen18FSY9C573YU5XxSapdHZTZ2WolA==}
+ parse5@8.0.1:
+ resolution: {integrity: sha512-z1e/HMG90obSGeidlli3hj7cbocou0/wa5HacvI3ASx34PecNjNQeaHNo5WIZpWofN9kgkqV1q5YvXe3F0FoPw==}
parseurl@1.3.3:
resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==}
@@ -5368,6 +5959,10 @@ packages:
resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ path-expression-matcher@1.5.0:
+ resolution: {integrity: sha512-cbrerZV+6rvdQrrD+iGMcZFEiiSrbv9Tfdkvnusy6y0x0GKBXREFg/Y65GhIfm0tnLntThhzCnfKwp1WRjeCyQ==}
+ engines: {node: '>=14.0.0'}
+
path-key@3.1.1:
resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
engines: {node: '>=8'}
@@ -5383,9 +5978,9 @@ packages:
resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==}
engines: {node: '>=16 || 14 >=14.18'}
- path-scurry@2.0.1:
- resolution: {integrity: sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==}
- engines: {node: 20 || >=22}
+ path-scurry@2.0.2:
+ resolution: {integrity: sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==}
+ engines: {node: 18 || 20 || >=22}
pathe@1.1.2:
resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==}
@@ -5399,14 +5994,18 @@ packages:
picocolors@1.1.1:
resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
- picomatch@2.3.1:
- resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ picomatch@2.3.2:
+ resolution: {integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==}
engines: {node: '>=8.6'}
picomatch@4.0.3:
resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==}
engines: {node: '>=12'}
+ picomatch@4.0.4:
+ resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==}
+ engines: {node: '>=12'}
+
pify@4.0.1:
resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==}
engines: {node: '>=6'}
@@ -5436,183 +6035,195 @@ packages:
peerDependencies:
postcss: ^8.4.38
- postcss-colormin@7.0.5:
- resolution: {integrity: sha512-ekIBP/nwzRWhEMmIxHHbXHcMdzd1HIUzBECaj5KEdLz9DVP2HzT065sEhvOx1dkLjYW7jyD0CngThx6bpFi2fA==}
+ postcss-colormin@7.0.9:
+ resolution: {integrity: sha512-EZpoUlmbXQUpe+g4ZaGM2kjGlHrQ7Bjzb3xHcNrC9ysI1tGoib6DAYvxg6aB7MGxsjgLF+Qx/jwZQkJ5cKDvXA==}
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
peerDependencies:
- postcss: ^8.4.32
+ postcss: ^8.5.10
- postcss-convert-values@7.0.8:
- resolution: {integrity: sha512-+XNKuPfkHTCEo499VzLMYn94TiL3r9YqRE3Ty+jP7UX4qjewUONey1t7CG21lrlTLN07GtGM8MqFVp86D4uKJg==}
+ postcss-convert-values@7.0.11:
+ resolution: {integrity: sha512-H+s7P0f9jJylSysAHs3/5MhAx7GthDO05uw1h56L2xyEqpiLTFLEqBNw3PUYzD5p/AKwWaigCXf6FGELpOw9lw==}
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
peerDependencies:
- postcss: ^8.4.32
+ postcss: ^8.5.10
- postcss-discard-comments@7.0.5:
- resolution: {integrity: sha512-IR2Eja8WfYgN5n32vEGSctVQ1+JARfu4UH8M7bgGh1bC+xI/obsPJXaBpQF7MAByvgwZinhpHpdrmXtvVVlKcQ==}
+ postcss-discard-comments@7.0.7:
+ resolution: {integrity: sha512-FJhE3fSte7HaRNL4iwD8LTG9vWqj3puxXIdig6LfrFqc1TJRUhY4kXOkeTXZZfTXYny+k+SO7fd2fymj1wduJg==}
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
peerDependencies:
- postcss: ^8.4.32
+ postcss: ^8.5.10
- postcss-discard-duplicates@7.0.2:
- resolution: {integrity: sha512-eTonaQvPZ/3i1ASDHOKkYwAybiM45zFIc7KXils4mQmHLqIswXD9XNOKEVxtTFnsmwYzF66u4LMgSr0abDlh5w==}
+ postcss-discard-duplicates@7.0.3:
+ resolution: {integrity: sha512-9cRxXwhEM/aNZon1qZyToX4NmjbFbxOGbww+0CnbYFDbbPRGZ8jg4IbM8UlA+CzkXxM35itxyaHKNqBBg/RTDg==}
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
peerDependencies:
- postcss: ^8.4.32
+ postcss: ^8.5.10
- postcss-discard-empty@7.0.1:
- resolution: {integrity: sha512-cFrJKZvcg/uxB6Ijr4l6qmn3pXQBna9zyrPC+sK0zjbkDUZew+6xDltSF7OeB7rAtzaaMVYSdbod+sZOCWnMOg==}
+ postcss-discard-empty@7.0.2:
+ resolution: {integrity: sha512-NZFouOmOwtngJVgkNeI1LtkzFdYqIurxgy4wq3qNvIiXFURTZ3b/K7q3dP3QitlWQ5imHDQL0qSorItQhoxb1g==}
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
peerDependencies:
- postcss: ^8.4.32
+ postcss: ^8.5.10
- postcss-discard-overridden@7.0.1:
- resolution: {integrity: sha512-7c3MMjjSZ/qYrx3uc1940GSOzN1Iqjtlqe8uoSg+qdVPYyRb0TILSqqmtlSFuE4mTDECwsm397Ya7iXGzfF7lg==}
+ postcss-discard-overridden@7.0.2:
+ resolution: {integrity: sha512-Ym01X4v6U3sY8X0P1J9P+RTar+7JyLTOzDrxKSeaArFsLmkVu4KcAKPBWDYRIyZ/q4jwpSPnOnekeSSqXSXKUw==}
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
peerDependencies:
- postcss: ^8.4.32
+ postcss: ^8.5.10
- postcss-merge-longhand@7.0.5:
- resolution: {integrity: sha512-Kpu5v4Ys6QI59FxmxtNB/iHUVDn9Y9sYw66D6+SZoIk4QTz1prC4aYkhIESu+ieG1iylod1f8MILMs1Em3mmIw==}
+ postcss-merge-longhand@7.0.6:
+ resolution: {integrity: sha512-lDsWeKRsssX/9vKFpingoRiuvGajtOGCJhs1kyaTJ5fzaVzs0aPPYe38UZ/ukMFEA5iuRIjQJHIkH2niYO3ubQ==}
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
peerDependencies:
- postcss: ^8.4.32
+ postcss: ^8.5.10
- postcss-merge-rules@7.0.7:
- resolution: {integrity: sha512-njWJrd/Ms6XViwowaaCc+/vqhPG3SmXn725AGrnl+BgTuRPEacjiLEaGq16J6XirMJbtKkTwnt67SS+e2WGoew==}
+ postcss-merge-rules@7.0.10:
+ resolution: {integrity: sha512-UXYKxkg8Cy1so/evF7AE/25PNXZb3E0SrvjdbtbGf+MW+doLenKqRLQzz6YZW469ktiXK2MVLFWtel/DftCV0Q==}
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
peerDependencies:
- postcss: ^8.4.32
+ postcss: ^8.5.10
- postcss-minify-font-values@7.0.1:
- resolution: {integrity: sha512-2m1uiuJeTplll+tq4ENOQSzB8LRnSUChBv7oSyFLsJRtUgAAJGP6LLz0/8lkinTgxrmJSPOEhgY1bMXOQ4ZXhQ==}
+ postcss-minify-font-values@7.0.2:
+ resolution: {integrity: sha512-Z82NUmnvhPrvMUaHfkaAVBmWQq9F8Dox4Dy0LiwbaTxfmDUWLQtS+0WCgKViwdWCPPajiY9YzoQftgqKdXkM5g==}
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
peerDependencies:
- postcss: ^8.4.32
+ postcss: ^8.5.10
- postcss-minify-gradients@7.0.1:
- resolution: {integrity: sha512-X9JjaysZJwlqNkJbUDgOclyG3jZEpAMOfof6PUZjPnPrePnPG62pS17CjdM32uT1Uq1jFvNSff9l7kNbmMSL2A==}
+ postcss-minify-gradients@7.0.4:
+ resolution: {integrity: sha512-g8MNeNyN+lbwKy8DCtJ6zU6awBL0InBsSOaKmgZ1MdRLVItLQUNFNAzzzBnOp4qowOcyyB6GetTlQ0/0UNXvag==}
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
peerDependencies:
- postcss: ^8.4.32
+ postcss: ^8.5.10
- postcss-minify-params@7.0.5:
- resolution: {integrity: sha512-FGK9ky02h6Ighn3UihsyeAH5XmLEE2MSGH5Tc4tXMFtEDx7B+zTG6hD/+/cT+fbF7PbYojsmmWjyTwFwW1JKQQ==}
+ postcss-minify-params@7.0.8:
+ resolution: {integrity: sha512-DIUKM5DZGTmxN7KFKT+rxt0FdPDmRrdK/k3n3+6Po+N/QYn06juwagHcfOVBG0CfCHwcnI612GAUCZc3eT+ZEg==}
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
peerDependencies:
- postcss: ^8.4.32
+ postcss: ^8.5.10
- postcss-minify-selectors@7.0.5:
- resolution: {integrity: sha512-x2/IvofHcdIrAm9Q+p06ZD1h6FPcQ32WtCRVodJLDR+WMn8EVHI1kvLxZuGKz/9EY5nAmI6lIQIrpo4tBy5+ug==}
+ postcss-minify-selectors@7.1.0:
+ resolution: {integrity: sha512-HYl/6I0aL+UvpA10t65BSa7h+tVjBgE6oRI5N/3ylX3vtwvlDL67G3FT3vYDPnTksxr0riiyJcT0tBtyRVoloA==}
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
peerDependencies:
- postcss: ^8.4.32
+ postcss: ^8.5.10
- postcss-normalize-charset@7.0.1:
- resolution: {integrity: sha512-sn413ofhSQHlZFae//m9FTOfkmiZ+YQXsbosqOWRiVQncU2BA3daX3n0VF3cG6rGLSFVc5Di/yns0dFfh8NFgQ==}
+ postcss-normalize-charset@7.0.2:
+ resolution: {integrity: sha512-YoINoiR4YKlzfB95Y93b0DSxWy7FLw+1SADIaznMHb88AKizpzfF80tolmiDEbYr1UM4r4Hw+NZq37SwT5f3uw==}
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
peerDependencies:
- postcss: ^8.4.32
+ postcss: ^8.5.10
- postcss-normalize-display-values@7.0.1:
- resolution: {integrity: sha512-E5nnB26XjSYz/mGITm6JgiDpAbVuAkzXwLzRZtts19jHDUBFxZ0BkXAehy0uimrOjYJbocby4FVswA/5noOxrQ==}
+ postcss-normalize-display-values@7.0.2:
+ resolution: {integrity: sha512-wu/NTSjnp8sX5TnEHVPN+eScjAtRs18ELtEduG+Ek3GxjeUDUT+VAA3PJjVIXBcVIk6fiLYFj2iKH0q99S3T2Q==}
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
peerDependencies:
- postcss: ^8.4.32
+ postcss: ^8.5.10
- postcss-normalize-positions@7.0.1:
- resolution: {integrity: sha512-pB/SzrIP2l50ZIYu+yQZyMNmnAcwyYb9R1fVWPRxm4zcUFCY2ign7rcntGFuMXDdd9L2pPNUgoODDk91PzRZuQ==}
+ postcss-normalize-positions@7.0.3:
+ resolution: {integrity: sha512-1CJI++oA3yK/fQlPUcEngUfcSWS08Pkt9fK+jVgL53mmtHDBHi0YiuB0m3D9BXwZjmfvCc2GQmFqCAF/CVcPzQ==}
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
peerDependencies:
- postcss: ^8.4.32
+ postcss: ^8.5.10
- postcss-normalize-repeat-style@7.0.1:
- resolution: {integrity: sha512-NsSQJ8zj8TIDiF0ig44Byo3Jk9e4gNt9x2VIlJudnQQ5DhWAHJPF4Tr1ITwyHio2BUi/I6Iv0HRO7beHYOloYQ==}
+ postcss-normalize-repeat-style@7.0.3:
+ resolution: {integrity: sha512-RvImJ2Ml4LZSx31qC2C8LDiz65IgBNATtwEr9r3Aue+D0cCGbj4rjNojb/uGpEm4QxnOTzFqMvaDYuKiT1Cmpg==}
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
peerDependencies:
- postcss: ^8.4.32
+ postcss: ^8.5.10
- postcss-normalize-string@7.0.1:
- resolution: {integrity: sha512-QByrI7hAhsoze992kpbMlJSbZ8FuCEc1OT9EFbZ6HldXNpsdpZr+YXC5di3UEv0+jeZlHbZcoCADgb7a+lPmmQ==}
+ postcss-normalize-string@7.0.2:
+ resolution: {integrity: sha512-FqtrUh2BU2MnVeLeWBbJ2rwOjuDnA91XvoImc1BbgMWIxdxiPTaquflBHsmFBA3xh3pC3wPZO9W5MaIc7wU/Xw==}
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
peerDependencies:
- postcss: ^8.4.32
+ postcss: ^8.5.10
- postcss-normalize-timing-functions@7.0.1:
- resolution: {integrity: sha512-bHifyuuSNdKKsnNJ0s8fmfLMlvsQwYVxIoUBnowIVl2ZAdrkYQNGVB4RxjfpvkMjipqvbz0u7feBZybkl/6NJg==}
+ postcss-normalize-timing-functions@7.0.2:
+ resolution: {integrity: sha512-5H5fpXBnMACEXzn7k9RP7qWZ1eWg8cuZkUuFygStY7icOj+UucwMWXeMmdkF/iITvTVa7fP85tdRCJeznpdFfQ==}
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
peerDependencies:
- postcss: ^8.4.32
+ postcss: ^8.5.10
- postcss-normalize-unicode@7.0.5:
- resolution: {integrity: sha512-X6BBwiRxVaFHrb2WyBMddIeB5HBjJcAaUHyhLrM2FsxSq5TFqcHSsK7Zu1otag+o0ZphQGJewGH1tAyrD0zX1Q==}
+ postcss-normalize-unicode@7.0.8:
+ resolution: {integrity: sha512-imCM3cwK3hvlAG4z1AzYM24m8BPA3/Jk/S71wfbn2I6+E2b+UwFaGvlNqydihXTSl3OFPeQXztqCzg+NGeSibQ==}
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
peerDependencies:
- postcss: ^8.4.32
+ postcss: ^8.5.10
- postcss-normalize-url@7.0.1:
- resolution: {integrity: sha512-sUcD2cWtyK1AOL/82Fwy1aIVm/wwj5SdZkgZ3QiUzSzQQofrbq15jWJ3BA7Z+yVRwamCjJgZJN0I9IS7c6tgeQ==}
+ postcss-normalize-url@7.0.2:
+ resolution: {integrity: sha512-bLnNY7t76NLRb9QQyCVmCN4qwoHxiq6vABH/CXav9wTuR6dNGHGQ72AyO/+h2quWxZk3l7BqxNL1vtDi9H6y1g==}
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
peerDependencies:
- postcss: ^8.4.32
+ postcss: ^8.5.10
- postcss-normalize-whitespace@7.0.1:
- resolution: {integrity: sha512-vsbgFHMFQrJBJKrUFJNZ2pgBeBkC2IvvoHjz1to0/0Xk7sII24T0qFOiJzG6Fu3zJoq/0yI4rKWi7WhApW+EFA==}
+ postcss-normalize-whitespace@7.0.2:
+ resolution: {integrity: sha512-TNSVkuhkeOhl36WruQlflxOb7HweoeZowSusNpfsM1+ZvqJ24Mc+xksu05ecMQxlu+0zgI8pyznO2EWqDCQbLA==}
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
peerDependencies:
- postcss: ^8.4.32
+ postcss: ^8.5.10
- postcss-ordered-values@7.0.2:
- resolution: {integrity: sha512-AMJjt1ECBffF7CEON/Y0rekRLS6KsePU6PRP08UqYW4UGFRnTXNrByUzYK1h8AC7UWTZdQ9O3Oq9kFIhm0SFEw==}
+ postcss-ordered-values@7.0.3:
+ resolution: {integrity: sha512-FTt6R9RF7NAYfpOHa2XFPm89FVuo5GiIbcfwOXFy1MYF38BeiNW9ke8ybw9Pk62eEsUlRVVbxHWA3B7ERYqOOA==}
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
peerDependencies:
- postcss: ^8.4.32
+ postcss: ^8.5.10
- postcss-reduce-initial@7.0.5:
- resolution: {integrity: sha512-RHagHLidG8hTZcnr4FpyMB2jtgd/OcyAazjMhoy5qmWJOx1uxKh4ntk0Pb46ajKM0rkf32lRH4C8c9qQiPR6IA==}
+ postcss-reduce-initial@7.0.8:
+ resolution: {integrity: sha512-VeVRmbgpgTZuRcDQdqnsB4iYTeS2dBRV07UdwK6V3x61F1xTQ2pgIzHBIR4rQYRlXRNKBTGYYhEL1eNA7w9vaQ==}
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
peerDependencies:
- postcss: ^8.4.32
+ postcss: ^8.5.10
- postcss-reduce-transforms@7.0.1:
- resolution: {integrity: sha512-MhyEbfrm+Mlp/36hvZ9mT9DaO7dbncU0CvWI8V93LRkY6IYlu38OPg3FObnuKTUxJ4qA8HpurdQOo5CyqqO76g==}
+ postcss-reduce-transforms@7.0.2:
+ resolution: {integrity: sha512-OV5P9hMnf7kEkeXVXyS5ESqxbIls7a3TqFymUAV5JICO/9YCBEU+QQhQjZiDHaLwFdV7/CL481kVeBUk5FdY3w==}
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
peerDependencies:
- postcss: ^8.4.32
+ postcss: ^8.5.10
postcss-selector-parser@7.1.1:
resolution: {integrity: sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==}
engines: {node: '>=4'}
- postcss-svgo@7.1.0:
- resolution: {integrity: sha512-KnAlfmhtoLz6IuU3Sij2ycusNs4jPW+QoFE5kuuUOK8awR6tMxZQrs5Ey3BUz7nFCzT3eqyFgqkyrHiaU2xx3w==}
+ postcss-svgo@7.1.2:
+ resolution: {integrity: sha512-ixExc8m+/68yuSYQzV/1DgtTup/7nI2dN9eiDS5GMRUzeCH4q9UcqeZPwcSVhdf8ay9fRwXDUHwcY5/XzQSszQ==}
engines: {node: ^18.12.0 || ^20.9.0 || >= 18}
peerDependencies:
- postcss: ^8.4.32
+ postcss: ^8.5.10
- postcss-unique-selectors@7.0.4:
- resolution: {integrity: sha512-pmlZjsmEAG7cHd7uK3ZiNSW6otSZ13RHuZ/4cDN/bVglS5EpF2r2oxY99SuOHa8m7AWoBCelTS3JPpzsIs8skQ==}
+ postcss-unique-selectors@7.0.6:
+ resolution: {integrity: sha512-cDxnYw1QuBMW5w3svZ0BlYF0IA4Amr+1JoTLXzu6vDFPNwohN2QU+sPZNx15b930LR7ce+/600h28/cYoxO9vw==}
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
peerDependencies:
- postcss: ^8.4.32
+ postcss: ^8.5.10
postcss-value-parser@4.2.0:
resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
- postcss@8.5.6:
- resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==}
+ postcss@8.5.10:
+ resolution: {integrity: sha512-pMMHxBOZKFU6HgAZ4eyGnwXF/EvPGGqUr0MnZ5+99485wwW41kW91A4LOGxSHhgugZmSChL5AlElNdwlNgcnLQ==}
engines: {node: ^10 || ^12 || >=14}
- posthog-js@1.345.0:
- resolution: {integrity: sha512-hS+h8QGn+GZp5cwOYQQrxbn/tHlYsORmi0d/JwUjP+ClI+Yr5pYUlScjrexSIi3kdCX80UCWRM1pNVF6GvTI1Q==}
+ posthog-js@1.371.2:
+ resolution: {integrity: sha512-2cd4NqsFbBUiBAXLRCcM8De4lA/x2ZmNI7ii3BegpQItMKZUk2w1HY/91pLvvwEyShWa2WGloBJSCBJAVo/hWg==}
- posthog-node@5.24.14:
- resolution: {integrity: sha512-KbOQAZ66V9t4Abh/x62pL/2n504HlxQEavFZjpcyIpVwQEPmmafsoLU5ueL47m3i6m6r619Z76m4uyoxVfGqsA==}
+ posthog-node@5.29.7:
+ resolution: {integrity: sha512-LWEokcirbzE4RZztFJCKZO0sWBXDOgjeIMmgsFVLGKU41gnwG++NOhO1t+rO5b8qs3YZTPj5sRi9+awhuZ5bTA==}
engines: {node: ^20.20.0 || >=22.22.0}
+ peerDependencies:
+ rxjs: ^7.0.0
+ peerDependenciesMeta:
+ rxjs:
+ optional: true
+
+ powershell-utils@0.1.0:
+ resolution: {integrity: sha512-dM0jVuXJPsDN6DvRpea484tCUaMiXWjuCn++HGTqUWzGDjv5tZkEZldAJ/UMlqRYGFrD/etByo4/xOuC/snX2A==}
+ engines: {node: '>=20'}
preact@10.28.3:
resolution: {integrity: sha512-tCmoRkPQLpBeWzpmbhryairGnhW9tKV6c6gr/w+RhoRoKEJwsjzipwp//1oCpGPOchvSLaAPlpcJi9MwMmoPyA==}
+ preact@10.29.1:
+ resolution: {integrity: sha512-gQCLc/vWroE8lIpleXtdJhTFDogTdZG9AjMUpVkDf2iTCNwYNWA+u16dL41TqUDJO4gm2IgrcMv3uTpjd4Pwmg==}
+
prebuild-install@7.1.3:
resolution: {integrity: sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==}
engines: {node: '>=10'}
@@ -5627,10 +6238,6 @@ packages:
resolution: {integrity: sha512-nODzvTiYVRGRqAOvE84Vk5JDPyyxsVk0/fbA/bq7RqlnhksGpset09XTxbpvLTIjoaF7K8Z8DG8yHtKGTPSYRw==}
engines: {node: '>=20'}
- pretty-ms@9.3.0:
- resolution: {integrity: sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ==}
- engines: {node: '>=18'}
-
process-nextick-args@2.0.1:
resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
@@ -5638,15 +6245,47 @@ packages:
resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==}
engines: {node: '>= 0.6.0'}
- prompts@2.4.2:
- resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==}
- engines: {node: '>= 6'}
-
property-information@7.1.0:
resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==}
- protobufjs@7.5.4:
- resolution: {integrity: sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg==}
+ prosemirror-changeset@2.4.1:
+ resolution: {integrity: sha512-96WBLhOaYhJ+kPhLg3uW359Tz6I/MfcrQfL4EGv4SrcqKEMC1gmoGrXHecPE8eOwTVCJ4IwgfzM8fFad25wNfw==}
+
+ prosemirror-commands@1.7.1:
+ resolution: {integrity: sha512-rT7qZnQtx5c0/y/KlYaGvtG411S97UaL6gdp6RIZ23DLHanMYLyfGBV5DtSnZdthQql7W+lEVbpSfwtO8T+L2w==}
+
+ prosemirror-dropcursor@1.8.2:
+ resolution: {integrity: sha512-CCk6Gyx9+Tt2sbYk5NK0nB1ukHi2ryaRgadV/LvyNuO3ena1payM2z6Cg0vO1ebK8cxbzo41ku2DE5Axj1Zuiw==}
+
+ prosemirror-gapcursor@1.4.1:
+ resolution: {integrity: sha512-pMdYaEnjNMSwl11yjEGtgTmLkR08m/Vl+Jj443167p9eB3HVQKhYCc4gmHVDsLPODfZfjr/MmirsdyZziXbQKw==}
+
+ prosemirror-history@1.5.0:
+ resolution: {integrity: sha512-zlzTiH01eKA55UAf1MEjtssJeHnGxO0j4K4Dpx+gnmX9n+SHNlDqI2oO1Kv1iPN5B1dm5fsljCfqKF9nFL6HRg==}
+
+ prosemirror-keymap@1.2.3:
+ resolution: {integrity: sha512-4HucRlpiLd1IPQQXNqeo81BGtkY8Ai5smHhKW9jjPKRc2wQIxksg7Hl1tTI2IfT2B/LgX6bfYvXxEpJl7aKYKw==}
+
+ prosemirror-model@1.25.4:
+ resolution: {integrity: sha512-PIM7E43PBxKce8OQeezAs9j4TP+5yDpZVbuurd1h5phUxEKIu+G2a+EUZzIC5nS1mJktDJWzbqS23n1tsAf5QA==}
+
+ prosemirror-schema-list@1.5.1:
+ resolution: {integrity: sha512-927lFx/uwyQaGwJxLWCZRkjXG0p48KpMj6ueoYiu4JX05GGuGcgzAy62dfiV8eFZftgyBUvLx76RsMe20fJl+Q==}
+
+ prosemirror-state@1.4.4:
+ resolution: {integrity: sha512-6jiYHH2CIGbCfnxdHbXZ12gySFY/fz/ulZE333G6bPqIZ4F+TXo9ifiR86nAHpWnfoNjOb3o5ESi7J8Uz1jXHw==}
+
+ prosemirror-tables@1.8.5:
+ resolution: {integrity: sha512-V/0cDCsHKHe/tfWkeCmthNUcEp1IVO3p6vwN8XtwE9PZQLAZJigbw3QoraAdfJPir4NKJtNvOB8oYGKRl+t0Dw==}
+
+ prosemirror-transform@1.12.0:
+ resolution: {integrity: sha512-GxboyN4AMIsoHNtz5uf2r2Ru551i5hWeCMD6E2Ib4Eogqoub0NflniaBPVQ4MrGE5yZ8JV9tUHg9qcZTTrcN4w==}
+
+ prosemirror-view@1.41.8:
+ resolution: {integrity: sha512-TnKDdohEatgyZNGCDWIdccOHXhYloJwbwU+phw/a23KBvJIR9lWQWW7WHHK3vBdOLDNuF7TaX98GObUZOWkOnA==}
+
+ protobufjs@7.5.5:
+ resolution: {integrity: sha512-3wY1AxV+VBNW8Yypfd1yQY9pXnqTAN+KwQxL8iYm3/BjKYMNg4i0owhEe26PWDOMaIrzeeF98Lqd5NGz4omiIg==}
engines: {node: '>=12.0.0'}
protocols@2.0.2:
@@ -5669,8 +6308,8 @@ packages:
resolution: {integrity: sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==}
engines: {node: '>=0.6'}
- qs@6.15.0:
- resolution: {integrity: sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ==}
+ qs@6.15.1:
+ resolution: {integrity: sha512-6YHEFRL9mfgcAvql/XhwTvf5jKcOiiupt2FiJxHkiX1z4j7WL8J/jRHYLluORvc1XxB5rV20KoeK00gVJamspg==}
engines: {node: '>=0.6'}
quansync@0.2.11:
@@ -5689,9 +6328,6 @@ packages:
radix3@1.1.2:
resolution: {integrity: sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==}
- randombytes@2.1.0:
- resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
-
range-parser@1.2.1:
resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==}
engines: {node: '>= 0.6'}
@@ -5702,6 +6338,9 @@ packages:
rc9@3.0.0:
resolution: {integrity: sha512-MGOue0VqscKWQ104udASX/3GYDcKyPI4j4F8gu/jHHzglpmy9a/anZK3PNe8ug6aZFl+9GxLtdhe3kVZuMaQbA==}
+ rc9@3.0.1:
+ resolution: {integrity: sha512-gMDyleLWVE+i6Sgtc0QbbY6pEKqYs97NGi6isHQPqYlLemPoO8dxQ3uGi0f4NiP98c+jMW6cG1Kx9dDwfvqARQ==}
+
rc@1.2.8:
resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==}
hasBin: true
@@ -5761,8 +6400,8 @@ packages:
resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==}
hasBin: true
- regjsparser@0.13.0:
- resolution: {integrity: sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q==}
+ regjsparser@0.13.1:
+ resolution: {integrity: sha512-dLsljMd9sqwRkby8zhO1gSg3PnJIBFid8f4CQj/sXx+7cKx+E7u0PKhZ+U4wmhx7EfmtvnA318oVaIkAB1lRJw==}
hasBin: true
rehype-external-links@3.0.0:
@@ -5786,10 +6425,10 @@ packages:
rehype-sort-attributes@5.0.1:
resolution: {integrity: sha512-Bxo+AKUIELcnnAZwJDt5zUDDRpt4uzhfz9d0PVGhcxYWsbFj5Cv35xuWxu5r1LeYNFNhgGqsr9Q2QiIOM/Qctg==}
- reka-ui@2.6.0:
- resolution: {integrity: sha512-NrGMKrABD97l890mFS3TNUzB0BLUfbL3hh0NjcJRIUSUljb288bx3Mzo31nOyUcdiiW0HqFGXJwyCBh9cWgb0w==}
+ reka-ui@2.9.3:
+ resolution: {integrity: sha512-C9lCVxsSC7uYD0Nbgik1+14FNndHNprZmf0zGQt0ZDYIt5KxXV3zD0hEqNcfRUsEEJvVmoRsUkJnASBVBeaaUw==}
peerDependencies:
- vue: '>= 3.2.0'
+ vue: '>= 3.4.0'
remark-emoji@5.0.2:
resolution: {integrity: sha512-IyIqGELcyK5AVdLFafoiNww+Eaw/F+rGrNSXoKucjo95uL267zrddgxGM83GN1wFIb68pyDuAsY3m5t2Cav1pQ==}
@@ -5810,10 +6449,6 @@ packages:
remark-stringify@11.0.0:
resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==}
- require-directory@2.1.1:
- resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
- engines: {node: '>=0.10.0'}
-
reserved-identifiers@1.2.0:
resolution: {integrity: sha512-yE7KUfFvaBFzGPs5H3Ops1RevfUEsDc5Iz65rOwWg4lE8HJSYtle77uul3+573457oHvBKuHYDl/xqUkKpEEdw==}
engines: {node: '>=18'}
@@ -5832,30 +6467,70 @@ packages:
resolve-pkg-maps@1.0.0:
resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==}
- resolve@1.22.11:
- resolution: {integrity: sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==}
+ resolve@1.22.12:
+ resolution: {integrity: sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==}
engines: {node: '>= 0.4'}
hasBin: true
responselike@2.0.1:
resolution: {integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==}
- restructure@3.0.2:
- resolution: {integrity: sha512-gSfoiOEA0VPE6Tukkrr7I0RBdE0s7H1eFCDBk05l1KIQT1UIKNc5JZy6jdyW6eYH3aR3g5b3PuL77rq0hvwtAw==}
-
reusify@1.1.0:
resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==}
engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
- rfdc@1.4.1:
- resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==}
+ rolldown-vite@7.3.1:
+ resolution: {integrity: sha512-LYzdNAjRHhF2yA4JUQm/QyARyi216N2rpJ0lJZb8E9FU2y5v6Vk+xq/U4XBOxMefpWixT5H3TslmAHm1rqIq2w==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ deprecated: Use this package to migrate from Vite 7 to Vite 8. For the most recent updates, migrate to Vite 8 once you're ready.
+ hasBin: true
+ peerDependencies:
+ '@types/node': ^20.19.0 || >=22.12.0
+ esbuild: ^0.27.0
+ jiti: '>=1.21.0'
+ less: ^4.0.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
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+ esbuild:
+ optional: true
+ jiti:
+ optional: true
+ less:
+ optional: true
+ sass:
+ optional: true
+ sass-embedded:
+ optional: true
+ stylus:
+ optional: true
+ sugarss:
+ optional: true
+ terser:
+ optional: true
+ tsx:
+ optional: true
+ yaml:
+ optional: true
+
+ rolldown@1.0.0-beta.53:
+ resolution: {integrity: sha512-Qd9c2p0XKZdgT5AYd+KgAMggJ8ZmCs3JnS9PTMWkyUfteKlfmKtxJbWTHkVakxwXs1Ub7jrRYVeFeF7N0sQxyw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ hasBin: true
- rollup-plugin-visualizer@6.0.5:
- resolution: {integrity: sha512-9+HlNgKCVbJDs8tVtjQ43US12eqaiHyyiLMdBwQ7vSZPiHMysGNo2E88TAp1si5wx8NAoYriI2A5kuKfIakmJg==}
- engines: {node: '>=18'}
+ rollup-plugin-visualizer@7.0.1:
+ resolution: {integrity: sha512-UJUT4+1Ho4OcWmPYU3sYXgUqI8B8Ayfe06MX7y0qCJ1K8aGoKtR/NDd/2nZqM7ADkrzny+I99Ul7GgyoiVNAgg==}
+ engines: {node: '>=22'}
hasBin: true
peerDependencies:
- rolldown: 1.x || ^1.0.0-beta
+ rolldown: 1.x || ^1.0.0-beta || ^1.0.0-rc
rollup: 2.x || 3.x || 4.x
peerDependenciesMeta:
rolldown:
@@ -5863,13 +6538,16 @@ packages:
rollup:
optional: true
- rollup@4.57.1:
- resolution: {integrity: sha512-oQL6lgK3e2QZeQ7gcgIkS2YZPg5slw37hYufJ3edKlfQSGGm8ICoxswK15ntSzF/a8+h7ekRy7k7oWc3BQ7y8A==}
+ rollup@4.60.2:
+ resolution: {integrity: sha512-J9qZyW++QK/09NyN/zeO0dG/1GdGfyp9lV8ajHnRVLfo/uFsbji5mHnDgn/qYdUHyCkM2N+8VyspgZclfAh0eQ==}
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
hasBin: true
- rou3@0.7.12:
- resolution: {integrity: sha512-iFE4hLDuloSWcD7mjdCDhx2bKcIsYbtOTpfH5MHHLSKMOUyjqQXTeZVa289uuwEGEKFoE/BAPbhaU4B774nceg==}
+ rope-sequence@1.3.4:
+ resolution: {integrity: sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ==}
+
+ rou3@0.8.1:
+ resolution: {integrity: sha512-ePa+XGk00/3HuCqrEnK3LxJW7I0SdNg6EFzKUJG73hMAdDcOUC/i/aSz7LSDwLrGr33kal/rqOGydzwl6U7zBA==}
run-applescript@7.1.0:
resolution: {integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==}
@@ -5884,18 +6562,8 @@ packages:
safe-buffer@5.2.1:
resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
- safer-buffer@2.1.2:
- resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
-
- satori-html@0.3.2:
- resolution: {integrity: sha512-wjTh14iqADFKDK80e51/98MplTGfxz2RmIzh0GqShlf4a67+BooLywF17TvJPD6phO0Hxm7Mf1N5LtRYvdkYRA==}
-
- satori@0.18.4:
- resolution: {integrity: sha512-HanEzgXHlX3fzpGgxPoR3qI7FDpc/B+uE/KplzA6BkZGlWMaH98B/1Amq+OBF1pYPlGNzAXPYNHlrEVBvRBnHQ==}
- engines: {node: '>=16'}
-
- sax@1.4.4:
- resolution: {integrity: sha512-1n3r/tGXO6b6VXMdFT54SHzT9ytu9yr7TaELowdYpMqY/Ao7EnlQGmAQ1+RatX7Tkkdm6hONI2owqNx2aZj5Sw==}
+ sax@1.6.0:
+ resolution: {integrity: sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==}
engines: {node: '>=11.0.0'}
scslre@0.3.0:
@@ -5908,9 +6576,6 @@ packages:
search-insights@2.17.3:
resolution: {integrity: sha512-RQPdCYTa8A68uM2jwxoY842xDhvx3E5LFL1LxvxCNMev4o5mLuokczhzjAgGwUZBAmOKZknArSxLKmXtIi2AxQ==}
- secure-json-parse@2.7.0:
- resolution: {integrity: sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==}
-
semver@6.3.1:
resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
hasBin: true
@@ -5924,11 +6589,12 @@ packages:
resolution: {integrity: sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==}
engines: {node: '>= 18'}
- serialize-javascript@6.0.2:
- resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==}
+ serialize-javascript@7.0.5:
+ resolution: {integrity: sha512-F4LcB0UqUl1zErq+1nYEEzSHJnIwb3AF2XWB94b+afhrekOUijwooAYqFyRbjYkm2PAKBabx6oYv/xDxNi8IBw==}
+ engines: {node: '>=20.0.0'}
- seroval@1.5.0:
- resolution: {integrity: sha512-OE4cvmJ1uSPrKorFIH9/w/Qwuvi/IMcGbv5RKgcJ/zjA/IohDLU6SVaxFN9FwajbP7nsX0dQqMDes1whk3y+yw==}
+ seroval@1.5.2:
+ resolution: {integrity: sha512-xcRN39BdsnO9Tf+VzsE7b3JyTJASItIV1FVFewJKCFcW4s4haIKS3e6vj8PGB9qBwC7tnuOywQMdv5N4qkzi7Q==}
engines: {node: '>=10'}
serve-placeholder@2.0.2:
@@ -5966,8 +6632,9 @@ packages:
resolution: {integrity: sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==}
engines: {node: '>= 0.4'}
- shiki@3.22.0:
- resolution: {integrity: sha512-LBnhsoYEe0Eou4e1VgJACes+O6S6QC0w71fCSp5Oya79inkwkm15gQ1UF6VtQ8j/taMDh79hAB49WUk8ALQW3g==}
+ shiki@4.0.2:
+ resolution: {integrity: sha512-eAVKTMedR5ckPo4xne/PjYQYrU3qx78gtJZ+sHlXEg5IHhhoQhMfZVzetTYuaJS0L2Ef3AcCRzCHV8T0WI6nIQ==}
+ engines: {node: '>=20'}
side-channel-list@1.0.0:
resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==}
@@ -5995,8 +6662,8 @@ packages:
simple-get@4.0.1:
resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==}
- simple-git@3.30.0:
- resolution: {integrity: sha512-q6lxyDsCmEal/MEGhP1aVyQ3oxnagGlBDOVSIB4XUVLl1iZh0Pah6ebC9V4xBap/RfgP2WlI8EKs0WS0rMEJHg==}
+ simple-git@3.36.0:
+ resolution: {integrity: sha512-cGQjLjK8bxJw4QuYT7gxHw3/IouVESbhahSsHrX97MzCL1gu2u7oy38W6L2ZIGECEfIBG4BabsWDPjBxJENv9Q==}
sirv@3.0.2:
resolution: {integrity: sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==}
@@ -6005,10 +6672,10 @@ packages:
sisteransi@1.0.5:
resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==}
- site-config-stack@3.2.19:
- resolution: {integrity: sha512-DJLEbH3WePmwdSDUCKCZTCc6xvY/Uuy3Qk5YG+5z5W7yMQbfRHRlEYhJbh4E431/V4aMROXH8lw5x8ETB71Nig==}
+ site-config-stack@4.0.8:
+ resolution: {integrity: sha512-Su+57p7CGqd3QSMmaDV+qU9EqWmgAT3SGX4Wurb5VsEBMFC3oXvai8BlrXVUnH1ay9hA1WOn0g0i6+y/RJX5Yw==}
peerDependencies:
- vue: ^3
+ vue: ^3.5.30
skin-tone@2.0.0:
resolution: {integrity: sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA==}
@@ -6018,19 +6685,20 @@ packages:
resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==}
engines: {node: '>=14.16'}
- slugify@1.6.6:
- resolution: {integrity: sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw==}
+ slugify@1.6.9:
+ resolution: {integrity: sha512-vZ7rfeehZui7wQs438JXBckYLkIIdfHOXsaVEUMyS5fHo1483l1bMdo0EDSWYclY0yZKFOipDy4KHuKs6ssvdg==}
engines: {node: '>=8.0.0'}
- smob@1.5.0:
- resolution: {integrity: sha512-g6T+p7QO8npa+/hNx9ohv1E5pVCmWrVCUzUXJyLdMmftX6ER0oiWY/w9knEonLpnOp6b6FenKnMfR8gqwWdwig==}
+ smob@1.6.1:
+ resolution: {integrity: sha512-KAkBqZl3c2GvNgNhcoyJae1aKldDW0LO279wF9bk1PnluRTETKBq0WyzRXxEhoQLk56yHaOY4JCBEKDuJIET5g==}
+ engines: {node: '>=20.0.0'}
socket.io-client@4.8.3:
resolution: {integrity: sha512-uP0bpjWrjQmUt5DTHq9RuoCBdFJF10cdX9X+a368j/Ft0wmaVgxlrjvK3kjvgCODOMMOz9lcaRzxmso0bTWZ/g==}
engines: {node: '>=10.0.0'}
- socket.io-parser@4.2.5:
- resolution: {integrity: sha512-bPMmpy/5WWKHea5Y/jYAP6k74A+hvmRCQaJuJB6I/ML5JZq/KfNieUVo/3Mh7SAqn7TyFdIo6wqYHInG1MU1bQ==}
+ socket.io-parser@4.2.6:
+ resolution: {integrity: sha512-asJqbVBDsBCJx0pTqw3WfesSY0iRX+2xzWEWzrpcH7L6fLzrhyF8WPI8UaeM4YCuDfpwA/cgsdugMsmtz8EJeg==}
engines: {node: '>=10.0.0'}
source-map-js@1.2.1:
@@ -6057,15 +6725,11 @@ packages:
spdx-expression-parse@4.0.0:
resolution: {integrity: sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==}
- spdx-license-ids@3.0.22:
- resolution: {integrity: sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==}
-
- speakingurl@14.0.1:
- resolution: {integrity: sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==}
- engines: {node: '>=0.10.0'}
+ spdx-license-ids@3.0.23:
+ resolution: {integrity: sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw==}
- srvx@0.11.2:
- resolution: {integrity: sha512-u6NbjE84IJwm1XUnJ53WqylLTQ3BdWRw03lcjBNNeMBD+EFjkl0Cnw1RVaGSqRAo38pOHOPXJH30M6cuTINUxw==}
+ srvx@0.11.15:
+ resolution: {integrity: sha512-iXsux0UcOjdvs0LCMa2Ws3WwcDUozA3JN3BquNXkaFPP7TpRqgunKdEgoZ/uwb1J6xaYHfxtz9Twlh6yzwM6Tg==}
engines: {node: '>=20.16.0'}
hasBin: true
@@ -6083,14 +6747,17 @@ packages:
std-env@3.10.0:
resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==}
+ std-env@4.1.0:
+ resolution: {integrity: sha512-Rq7ybcX2RuC55r9oaPVEW7/xu3tj8u4GeBYHBWCychFtzMIr86A7e3PPEBPT37sHStKX3+TiX/Fr/ACmJLVlLQ==}
+
storyblok-algolia-indexer@1.1.0:
resolution: {integrity: sha512-Kuy4FAzhdNC//LtZ+FJ3kZ92W9FVe7auUicAj4e2of5j4VE2BXYtg/TdAWtekjvA4vvzHYoYCt1sPPDe45n29A==}
storyblok-js-client@5.14.4:
resolution: {integrity: sha512-9yY33tvfO3Cbe25h/l6K0T3IxJeOOyGl/pCwsd55woT0ZEBhIiEZoMumpRsyLjD5AedW9KXLbLjMXhHazkepCA==}
- streamx@2.23.0:
- resolution: {integrity: sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg==}
+ streamx@2.25.0:
+ resolution: {integrity: sha512-0nQuG6jf1w+wddNEEXCF4nTg3LtufWINB5eFEN+5TNZW7KWJp6x87+JFL43vaAUPyCfH1wID+mNVyW6OHtFamg==}
string-width@4.2.3:
resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
@@ -6100,8 +6767,9 @@ packages:
resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
engines: {node: '>=12'}
- string.prototype.codepointat@0.2.1:
- resolution: {integrity: sha512-2cBVCj6I4IOvEnjgO/hWqXjqBGsY+zwPmHl12Srk9IXSZ56Jwwmy+66XO5Iut/oQVR7t5ihYdLB0GMa4alEUcg==}
+ string-width@7.2.0:
+ resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==}
+ engines: {node: '>=18'}
string_decoder@1.1.1:
resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==}
@@ -6116,18 +6784,14 @@ packages:
resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
engines: {node: '>=8'}
- strip-ansi@7.1.2:
- resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==}
+ strip-ansi@7.2.0:
+ resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==}
engines: {node: '>=12'}
strip-final-newline@3.0.0:
resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==}
engines: {node: '>=12'}
- strip-final-newline@4.0.0:
- resolution: {integrity: sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==}
- engines: {node: '>=18'}
-
strip-indent@4.1.1:
resolution: {integrity: sha512-SlyRoSkdh1dYP0PzclLE7r0M9sgbFKKMFXpFRUMNuKhQSbC6VQIGzq3E0qsfvGJaUFJPGv6Ws1NZ/haTAjfbMA==}
engines: {node: '>=12'}
@@ -6143,21 +6807,17 @@ packages:
strip-literal@3.1.0:
resolution: {integrity: sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==}
- strnum@2.1.2:
- resolution: {integrity: sha512-l63NF9y/cLROq/yqKXSLtcMeeyOfnSQlfMSlzFt/K73oIaD8DGaQWd7Z34X9GPiKqP5rbSh84Hl4bOlLcjiSrQ==}
+ strnum@2.2.3:
+ resolution: {integrity: sha512-oKx6RUCuHfT3oyVjtnrmn19H1SiCqgJSg+54XqURKp5aCMbrXrhLjRN9TjuwMjiYstZ0MzDrHqkGZ5dFTKd+zg==}
- structured-clone-es@1.0.0:
- resolution: {integrity: sha512-FL8EeKFFyNQv5cMnXI31CIMCsFarSVI2bF0U0ImeNE3g/F1IvJQyqzOXxPBRXiwQfyBTlbNe88jh1jFW0O/jiQ==}
+ structured-clone-es@2.0.0:
+ resolution: {integrity: sha512-5UuAHmBLXYPCl22xWJrFuGmIhBKQzxISPVz6E7nmTmTcAOpUzlbjKJsRrCE4vADmMQ0dzeCnlWn9XufnAGf76Q==}
- stylehacks@7.0.7:
- resolution: {integrity: sha512-bJkD0JkEtbRrMFtwgpJyBbFIwfDDONQ1Ov3sDLZQP8HuJ73kBOyx66H4bOcAbVWmnfLdvQ0AJwXxOMkpujcO6g==}
+ stylehacks@7.0.10:
+ resolution: {integrity: sha512-sRJ7klmhe/Fl5woJcbJUa2qP1Ueffsl1CQI4ePvqXLkZmcIuAt09aP9uT/FOFPqXh9Rh8M5UkgEnwTdTKn/Aag==}
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
peerDependencies:
- postcss: ^8.4.32
-
- superjson@2.2.6:
- resolution: {integrity: sha512-H+ue8Zo4vJmV2nRjpx86P35lzwDT3nItnIsocgumgr0hHMQ+ZGq5vrERg9kJBo5AWGmxZDhzDo+WVIJqkB0cGA==}
- engines: {node: '>=16'}
+ postcss: ^8.5.10
supports-color@10.2.2:
resolution: {integrity: sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==}
@@ -6171,26 +6831,17 @@ packages:
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
engines: {node: '>= 0.4'}
- svgo@4.0.0:
- resolution: {integrity: sha512-VvrHQ+9uniE+Mvx3+C9IEe/lWasXCU0nXMY2kZeLrHNICuRiC8uMPyM14UEaMOFA5mhyQqEkB02VoQ16n3DLaw==}
+ svgo@4.0.1:
+ resolution: {integrity: sha512-XDpWUOPC6FEibaLzjfe0ucaV0YrOjYotGJO1WpF0Zd+n6ZGEQUsSugaoLq9QkEZtAfQIxT42UChcssDVPP3+/w==}
engines: {node: '>=16'}
hasBin: true
- swrv@1.1.0:
- resolution: {integrity: sha512-pjllRDr2s0iTwiE5Isvip51dZGR7GjLH1gCSVyE8bQnbAx6xackXsFdojau+1O5u98yHF5V73HQGOFxKUXO9gQ==}
- peerDependencies:
- vue: '>=3.2.26 < 4'
-
- system-architecture@0.1.0:
- resolution: {integrity: sha512-ulAk51I9UVUyJgxlv9M6lFot2WP3e7t8Kz9+IS6D4rVba1tR9kON+Ey69f+1R4Q8cd45Lod6a4IcJIxnzGc/zA==}
- engines: {node: '>=18'}
-
tagged-tag@1.0.0:
resolution: {integrity: sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==}
engines: {node: '>=20'}
- tailwind-merge@3.4.0:
- resolution: {integrity: sha512-uSaO4gnW+b3Y2aWoWfFpX62vn2sR3skfhbjsEnaBI81WD1wBLlHZe5sWf0AqjksNdYTbGBEd0UasQMT3SNV15g==}
+ tailwind-merge@3.5.0:
+ resolution: {integrity: sha512-I8K9wewnVDkL1NTGoqWmVEIlUcB9gFriAEkXkfCjX5ib8ezGxtR3xD7iZIxrfArjEsH7F1CHD4RFUtxefdqV/A==}
tailwind-variants@3.2.2:
resolution: {integrity: sha512-Mi4kHeMTLvKlM98XPnK+7HoBPmf4gygdFmqQPaDivc3DpYS6aIY6KiG/PgThrGvii5YZJqRsPz0aPyhoFzmZgg==}
@@ -6202,11 +6853,11 @@ packages:
tailwind-merge:
optional: true
- tailwindcss@4.1.18:
- resolution: {integrity: sha512-4+Z+0yiYyEtUVCScyfHCxOYP06L5Ne+JiHhY2IjR2KWMIWhJOYZKLSGZaP5HkZ8+bY0cxfzwDE5uOmzFXyIwxw==}
+ tailwindcss@4.2.4:
+ resolution: {integrity: sha512-HhKppgO81FQof5m6TEnuBWCZGgfRAWbaeOaGT00KOy/Pf/j6oUihdvBpA7ltCeAvZpFhW3j0PTclkxsd4IXYDA==}
- tapable@2.3.0:
- resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==}
+ tapable@2.3.3:
+ resolution: {integrity: sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==}
engines: {node: '>=6'}
tar-fs@2.1.4:
@@ -6216,21 +6867,23 @@ packages:
resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==}
engines: {node: '>=6'}
- tar-stream@3.1.7:
- resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==}
+ tar-stream@3.1.8:
+ resolution: {integrity: sha512-U6QpVRyCGHva435KoNWy9PRoi2IFYCgtEhq9nmrPPpbRacPs9IH4aJ3gbrFC8dPcXvdSZ4XXfXT5Fshbp2MtlQ==}
- tar@7.5.7:
- resolution: {integrity: sha512-fov56fJiRuThVFXD6o6/Q354S7pnWMJIVlDBYijsTNx6jKSE4pvrDTs6lUnmGvNyfJwFQQwWy3owKz1ucIhveQ==}
+ tar@7.5.13:
+ resolution: {integrity: sha512-tOG/7GyXpFevhXVh8jOPJrmtRpOTsYqUIkVdVooZYJS/z8WhfQUX8RJILmeuJNinGAMSu1veBr4asSHFt5/hng==}
engines: {node: '>=18'}
- deprecated: Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me
- terser@5.46.0:
- resolution: {integrity: sha512-jTwoImyr/QbOWFFso3YoU3ik0jBBDJ6JTOQiy/J2YxVJdZCc+5u7skhNwiOR3FQIygFqVUPHl7qbbxtjW2K3Qg==}
+ teex@1.0.1:
+ resolution: {integrity: sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==}
+
+ terser@5.46.2:
+ resolution: {integrity: sha512-uxfo9fPcSgLDYob/w1FuL0c99MWiJDnv+5qXSQc5+Ki5NjVNsYi66INnMFBjf6uFz6OnX12piJQPF4IpjJTNTw==}
engines: {node: '>=10'}
hasBin: true
- text-decoder@1.2.3:
- resolution: {integrity: sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==}
+ text-decoder@1.2.7:
+ resolution: {integrity: sha512-vlLytXkeP4xvEq2otHeJfSQIRyWxo/oZGEbXrtEEF9Hnmrdly59sUbzZ/QgyWuLYHctCHxFF4tRQZNQ9k60ExQ==}
tiny-inflate@1.0.3:
resolution: {integrity: sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==}
@@ -6238,14 +6891,26 @@ packages:
tiny-invariant@1.3.3:
resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==}
+ tinyclip@0.1.12:
+ resolution: {integrity: sha512-Ae3OVUqifDw0wBriIBS7yVaW44Dp6eSHQcyq4Igc7eN2TJH/2YsicswaW+J/OuMvhpDPOKEgpAZCjkb4hpoyeA==}
+ engines: {node: ^16.14.0 || >= 17.3.0}
+
tinyexec@1.0.2:
resolution: {integrity: sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==}
engines: {node: '>=18'}
+ tinyexec@1.1.1:
+ resolution: {integrity: sha512-VKS/ZaQhhkKFMANmAOhhXVoIfBXblQxGX1myCQ2faQrfmobMftXeJPcZGp0gS07ocvGJWDLZGyOZDadDBqYIJg==}
+ engines: {node: '>=18'}
+
tinyglobby@0.2.15:
resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==}
engines: {node: '>=12.0.0'}
+ tinyglobby@0.2.16:
+ resolution: {integrity: sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==}
+ engines: {node: '>=12.0.0'}
+
to-buffer@1.2.2:
resolution: {integrity: sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw==}
engines: {node: '>= 0.4'}
@@ -6278,8 +6943,8 @@ packages:
trough@2.2.0:
resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==}
- ts-api-utils@2.4.0:
- resolution: {integrity: sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==}
+ ts-api-utils@2.5.0:
+ resolution: {integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==}
engines: {node: '>=18.12'}
peerDependencies:
typescript: '>=4.8.4'
@@ -6298,8 +6963,8 @@ packages:
resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==}
engines: {node: '>=16'}
- type-fest@5.4.4:
- resolution: {integrity: sha512-JnTrzGu+zPV3aXIUhnyWJj4z/wigMsdYajGLIYakqyOW1nPllzXEJee0QQbHj+CTIQtXGlAjuK0UY+2xTyjVAw==}
+ type-fest@5.6.0:
+ resolution: {integrity: sha512-8ZiHFm91orbSAe2PSAiSVBVko18pbhbiB3U9GglSzF/zCGkR+rxpHx6sEMCUm4kxY4LjDIUGgCfUMtwfZfjfUA==}
engines: {node: '>=20'}
type-level-regexp@0.1.17:
@@ -6314,6 +6979,11 @@ packages:
engines: {node: '>=14.17'}
hasBin: true
+ typescript@6.0.3:
+ resolution: {integrity: sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==}
+ engines: {node: '>=14.17'}
+ hasBin: true
+
ufo@1.6.3:
resolution: {integrity: sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==}
@@ -6329,22 +6999,19 @@ packages:
undici-types@7.16.0:
resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==}
+ undici-types@7.19.2:
+ resolution: {integrity: sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg==}
+
unenv@2.0.0-rc.24:
resolution: {integrity: sha512-i7qRCmY42zmCwnYlh9H2SvLEypEFGye5iRmEMKjcGi7zk9UquigRjFtTLz0TYqr0ZGLZhaMHl/foy1bZR+Cwlw==}
- unhead@2.1.4:
- resolution: {integrity: sha512-+5091sJqtNNmgfQ07zJOgUnMIMKzVKAWjeMlSrTdSGPB6JSozhpjUKuMfWEoLxlMAfhIvgOU8Me0XJvmMA/0fA==}
+ unhead@2.1.13:
+ resolution: {integrity: sha512-jO9M1sI6b2h/1KpIu4Jeu+ptumLmUKboRRLxys5pYHFeT+lqTzfNHbYUX9bxVDhC1FBszAGuWcUVlmvIPsah8Q==}
unicode-emoji-modifier-base@1.0.0:
resolution: {integrity: sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g==}
engines: {node: '>=4'}
- unicode-properties@1.4.1:
- resolution: {integrity: sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg==}
-
- unicode-trie@2.0.0:
- resolution: {integrity: sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==}
-
unicorn-magic@0.1.0:
resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==}
engines: {node: '>=18'}
@@ -6360,11 +7027,15 @@ packages:
unified@11.0.5:
resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==}
- unifont@0.4.1:
- resolution: {integrity: sha512-zKSY9qO8svWYns+FGKjyVdLvpGPwqmsCjeJLN1xndMiqxHWBAhoWDMYMG960MxeV48clBmG+fDP59dHY1VoZvg==}
+ unifont@0.7.4:
+ resolution: {integrity: sha512-oHeis4/xl42HUIeHuNZRGEvxj5AaIKR+bHPNegRq5LV1gdc3jundpONbjglKpihmJf+dswygdMJn3eftGIMemg==}
+
+ unimport@5.7.0:
+ resolution: {integrity: sha512-njnL6sp8lEA8QQbZrt+52p/g4X0rw3bnGGmUcJnt1jeG8+iiqO779aGz0PirCtydAIVcuTBRlJ52F0u46z309Q==}
+ engines: {node: '>=18.12.0'}
- unimport@5.6.0:
- resolution: {integrity: sha512-8rqAmtJV8o60x46kBAJKtHpJDJWkA2xcBqWKPI14MgUb05o1pnpnCnXSxedUXyeq7p8fR5g3pTo2BaswZ9lD9A==}
+ unimport@6.1.1:
+ resolution: {integrity: sha512-ZY3adHF8WFSaiF1O+Eqtltt4wMZPGQ+WWLtnbc31TxglU/dx7q8B66kvXdfyGTWA25X8OO00X9b9iyLzrWOZmw==}
engines: {node: '>=18.12.0'}
unist-builder@4.0.0:
@@ -6388,13 +7059,9 @@ packages:
unist-util-visit@5.1.0:
resolution: {integrity: sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==}
- unplugin-ast@0.15.4:
- resolution: {integrity: sha512-LDhDc8tacKS9AmGQ4QCKhXdP2w7d3Wxj8VJMsJXfoz8twUvztxy2FpxpPTv6aOWCV8WnfKh92KBFSA2KCqfgYQ==}
+ unplugin-auto-import@21.0.0:
+ resolution: {integrity: sha512-vWuC8SwqJmxZFYwPojhOhOXDb5xFhNNcEVb9K/RFkyk/3VnfaOjzitWN7v+8DEKpMjSsY2AEGXNgt6I0yQrhRQ==}
engines: {node: '>=20.19.0'}
-
- unplugin-auto-import@20.3.0:
- resolution: {integrity: sha512-RcSEQiVv7g0mLMMXibYVKk8mpteKxvyffGuDKqZZiFr7Oq3PB1HwgHdK5O7H4AzbhzHoVKG0NnMnsk/1HIVYzQ==}
- engines: {node: '>=14'}
peerDependencies:
'@nuxt/kit': ^4.0.0
'@vueuse/core': '*'
@@ -6404,37 +7071,20 @@ packages:
'@vueuse/core':
optional: true
- unplugin-utils@0.2.5:
- resolution: {integrity: sha512-gwXJnPRewT4rT7sBi/IvxKTjsms7jX7QIDLOClApuZwR49SXbrB1z2NLUZ+vDHyqCj/n58OzRRqaW+B8OZi8vg==}
- engines: {node: '>=18.12.0'}
-
unplugin-utils@0.3.1:
resolution: {integrity: sha512-5lWVjgi6vuHhJ526bI4nlCOmkCIF3nnfXkCMDeMJrtdvxTs6ZFCM8oNufGTsDbKv/tJ/xj8RpvXjRuPBZJuJog==}
engines: {node: '>=20.19.0'}
- unplugin-vue-components@30.0.0:
- resolution: {integrity: sha512-4qVE/lwCgmdPTp6h0qsRN2u642tt4boBQtcpn4wQcWZAsr8TQwq+SPT3NDu/6kBFxzo/sSEK4ioXhOOBrXc3iw==}
- engines: {node: '>=14'}
+ unplugin-vue-components@32.0.0:
+ resolution: {integrity: sha512-uLdccgS7mf3pv1bCCP20y/hm+u1eOjAmygVkh+Oa70MPkzgl1eQv1L0CwdHNM3gscO8/GDMGIET98Ja47CBbZg==}
+ engines: {node: '>=20.19.0'}
peerDependencies:
- '@babel/parser': ^7.15.8
'@nuxt/kit': ^3.2.2 || ^4.0.0
- vue: 2 || 3
+ vue: ^3.0.0
peerDependenciesMeta:
- '@babel/parser':
- optional: true
'@nuxt/kit':
optional: true
- unplugin-vue-router@0.19.2:
- resolution: {integrity: sha512-u5dgLBarxE5cyDK/hzJGfpCTLIAyiTXGlo85COuD4Nssj6G7NxS+i9mhCWz/1p/ud1eMwdcUbTXehQe41jYZUA==}
- deprecated: 'Merged into vuejs/router. Migrate: https://router.vuejs.org/guide/migration/v4-to-v5.html'
- peerDependencies:
- '@vue/compiler-sfc': ^3.5.17
- vue-router: ^4.6.0
- peerDependenciesMeta:
- vue-router:
- optional: true
-
unplugin@2.3.11:
resolution: {integrity: sha512-5uKD0nqiYVzlmCRs01Fhs2BdkEgBS3SAVP6ndrBsuK42iC2+JHyxM05Rm9G8+5mkmRtzMZGY8Ct5+mliZxU/Ww==}
engines: {node: '>=18.12.0'}
@@ -6443,11 +7093,14 @@ packages:
resolution: {integrity: sha512-0Mqk3AT2TZCXWKdcoaufeXNukv2mTrEZExeXlHIOZXdqYoHHr4n51pymnwV8x2BOVxwXbK2HLlI7usrqMpycdg==}
engines: {node: ^20.19.0 || >=22.12.0}
+ unrouting@0.1.7:
+ resolution: {integrity: sha512-+0hfD+CVWtD636rc5Fn9VEjjTEDhdqgMpbwAuVoUmydSHDaMNiFW93SJG4LV++RoGSEAyvQN5uABAscYpDphpQ==}
+
unrs-resolver@1.11.1:
resolution: {integrity: sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==}
- unstorage@1.17.4:
- resolution: {integrity: sha512-fHK0yNg38tBiJKp/Vgsq4j0JEsCmgqH58HAn707S7zGkArbZsVr/CwINoi+nh3h98BRCwKvx1K3Xg9u3VV83sw==}
+ unstorage@1.17.5:
+ resolution: {integrity: sha512-0i3iqvRfx29hkNntHyQvJTpf5W9dQ9ZadSoRU8+xVlhVtT7jAX57fazYO9EHvcRCfBCyi5YRya7XCDOsbTgkPg==}
peerDependencies:
'@azure/app-configuration': ^1.8.0
'@azure/cosmos': ^4.2.0
@@ -6525,8 +7178,8 @@ packages:
peerDependencies:
browserslist: '>= 4.21.0'
- uqr@0.1.2:
- resolution: {integrity: sha512-MJu7ypHq6QasgF5YRTjqscSzQp/W11zoUk6kvmlH+fmWEs63Y0Eib13hYFwAzagRJcVY8WVnlV+eBDUGMJ5IbA==}
+ uqr@0.1.3:
+ resolution: {integrity: sha512-0rjE8iEJe4YmT9TOhwsZtqCMRLc5DXZUI2UEYUUg63ikBkqqE5EYWaI0etFe/5KUcmcYwLih2RND1kq+hrUJXA==}
uri-js@4.4.1:
resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
@@ -6541,8 +7194,8 @@ packages:
resolution: {integrity: sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==}
hasBin: true
- valibot@1.2.0:
- resolution: {integrity: sha512-mm1rxUsmOxzrwnX5arGS+U4T25RdvpPjPN4yR0u9pUBov9+zGVtO84tif1eY4r6zWxVxu3KzIyknJy3rxfRZZg==}
+ valibot@1.3.1:
+ resolution: {integrity: sha512-sfdRir/QFM0JaF22hqTroPc5xy4DimuGQVKFrzF1YfGwaS1nJot3Y8VqMdLO2Lg27fMzat2yD3pY5PbAYO39Gg==}
peerDependencies:
typescript: '>=5'
peerDependenciesMeta:
@@ -6626,14 +7279,14 @@ packages:
'@nuxt/kit':
optional: true
- vite-plugin-vue-tracer@1.2.0:
- resolution: {integrity: sha512-a9Z/TLpxwmoE9kIcv28wqQmiszM7ec4zgndXWEsVD/2lEZLRGzcg7ONXmplzGF/UP5W59QNtS809OdywwpUWQQ==}
+ vite-plugin-vue-tracer@1.3.0:
+ resolution: {integrity: sha512-Cgfce6VikzOw5MUJTpeg50s5rRjzU1Vr61ZjuHunVVHLjZZ5AUlgyExHthZ3r59vtoz9W2rDt23FYG81avYBKw==}
peerDependencies:
vite: ^6.0.0 || ^7.0.0
vue: ^3.5.0
- vite@7.3.1:
- resolution: {integrity: sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==}
+ vite@7.3.2:
+ resolution: {integrity: sha512-Bby3NOsna2jsjfLVOHKes8sGwgl4TT0E6vvpYgnAYDIF/tie7MRaFthmKuHx1NSXjiTueXH3do80FMQgvEktRg==}
engines: {node: ^20.19.0 || >=22.12.0}
hasBin: true
peerDependencies:
@@ -6678,16 +7331,16 @@ packages:
vue-bundle-renderer@2.2.0:
resolution: {integrity: sha512-sz/0WEdYH1KfaOm0XaBmRZOWgYTEvUDt6yPYaUzl4E52qzgWLlknaPPTTZmp6benaPTlQAI/hN1x3tAzZygycg==}
- vue-component-meta@3.2.4:
- resolution: {integrity: sha512-FHUxalhR36Kfmrd5B4yfw7kmnCsZL3SGc2vTgzeEGAcLyuhhB0d1j2VmfXvx5pnHLI+kvCb+bxGsRcNgrUJ0Ww==}
+ vue-component-meta@3.2.7:
+ resolution: {integrity: sha512-dxcDX+Qyhn0alsmjNBHO6/Irz7q1tv8uZnT+0gNkqMuTkL5bP/7XxsI8tOukq3jwkdFZAGO4bEqLl9rkPDF3uQ==}
peerDependencies:
typescript: '*'
peerDependenciesMeta:
typescript:
optional: true
- vue-component-type-helpers@3.2.4:
- resolution: {integrity: sha512-05lR16HeZDcDpB23ku5b5f1fBOoHqFnMiKRr2CiEvbG5Ux4Yi0McmQBOET0dR0nxDXosxyVqv67q6CzS3AK8rw==}
+ vue-component-type-helpers@3.2.7:
+ resolution: {integrity: sha512-+gPp5YGmhfsj1IN+xUo7y0fb4clfnOiiUA39y07yW1VzCRjzVgwLbtmdWlghh7mXrPsEaYc7rrIir/HT6C8vYQ==}
vue-demi@0.14.10:
resolution: {integrity: sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==}
@@ -6703,11 +7356,11 @@ packages:
vue-devtools-stub@0.1.0:
resolution: {integrity: sha512-RutnB7X8c5hjq39NceArgXg28WZtZpGc3+J16ljMiYnFhKvd8hITxSWQSQ5bvldxMDU6gG5mkxl1MTQLXckVSQ==}
- vue-eslint-parser@10.2.0:
- resolution: {integrity: sha512-CydUvFOQKD928UzZhTp4pr2vWz1L+H99t7Pkln2QSPdvmURT0MoC4wUccfCnuEaihNsu9aYYyk+bep8rlfkUXw==}
+ vue-eslint-parser@10.4.0:
+ resolution: {integrity: sha512-Vxi9pJdbN3ZnVGLODVtZ7y4Y2kzAAE2Cm0CZ3ZDRvydVYxZ6VrnBhLikBsRS+dpwj4Jv4UCv21PTEwF5rQ9WXg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- eslint: ^8.57.0 || ^9.0.0
+ eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
vue-instantsearch@4.23.1:
resolution: {integrity: sha512-5nu1cwsjjmOe/768SLxiOk9WiWlai4TJZ78i7rYmqYAMeEG9dRGy32qGPvl2SVVpaowaR1f9mixU4nIgGxP/Ug==}
@@ -6722,25 +7375,38 @@ packages:
vue-server-renderer:
optional: true
- vue-router@4.6.4:
- resolution: {integrity: sha512-Hz9q5sa33Yhduglwz6g9skT8OBPii+4bFn88w6J+J4MfEo4KRRpmiNG/hHHkdbRFlLBOqxN8y8gf2Fb0MTUgVg==}
+ vue-router@5.0.6:
+ resolution: {integrity: sha512-9+kmUTGbKMyW9Asoy98IXXYIzrTMT7JDAdpDDeEkorHvybpUvBI2wsrSM5jFOXrFydpzRFJ9vAh+80DN2PGu9w==}
peerDependencies:
+ '@pinia/colada': '>=0.21.2'
+ '@vue/compiler-sfc': ^3.5.17
+ pinia: ^3.0.4
vue: ^3.5.0
+ peerDependenciesMeta:
+ '@pinia/colada':
+ optional: true
+ '@vue/compiler-sfc':
+ optional: true
+ pinia:
+ optional: true
- vue-tsc@3.2.4:
- resolution: {integrity: sha512-xj3YCvSLNDKt1iF9OcImWHhmYcihVu9p4b9s4PGR/qp6yhW+tZJaypGxHScRyOrdnHvaOeF+YkZOdKwbgGvp5g==}
+ vue-tsc@3.2.7:
+ resolution: {integrity: sha512-zc1tL3HoQni1zGTGrwBVRQb7rGP5SWdu/m4rGB6JcnAC5MT5LFZIxF7Y+EJEnt4hGF23d60rXH7gRjHGb5KQQQ==}
hasBin: true
peerDependencies:
typescript: '>=5.0.0'
- vue@3.5.28:
- resolution: {integrity: sha512-BRdrNfeoccSoIZeIhyPBfvWSLFP4q8J3u8Ju8Ug5vu3LdD+yTM13Sg4sKtljxozbnuMu1NB1X5HBHRYUzFocKg==}
+ vue@3.5.33:
+ resolution: {integrity: sha512-1AgChhx5w3ALgT4oK3acm2Es/7jyZhWSVUfs3rOBlGQC0rjEDkS7G4lWlJJGGNQD+BV3reCwbQrOe1mPNwKHBQ==}
peerDependencies:
typescript: '*'
peerDependenciesMeta:
typescript:
optional: true
+ w3c-keyname@2.2.8:
+ resolution: {integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==}
+
web-namespaces@2.0.1:
resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==}
@@ -6748,8 +7414,8 @@ packages:
resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==}
engines: {node: '>= 8'}
- web-vitals@5.1.0:
- resolution: {integrity: sha512-ArI3kx5jI0atlTtmV0fWU3fjpLmq/nD3Zr1iFFlJLaqa5wLBkUSzINwBPySCX/8jRyjlmy1Volw1kz1g9XE4Jg==}
+ web-vitals@5.2.0:
+ resolution: {integrity: sha512-i2z98bEmaCqSDiHEDu+gHl/dmR4Q+TxFmG3/13KkMO+o8UxQzCqWaDRCiLgEa41nlO4VpXSI0ASa1xWmO9sBlA==}
webidl-conversions@3.0.1:
resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
@@ -6773,9 +7439,9 @@ packages:
engines: {node: '>= 8'}
hasBin: true
- which@5.0.0:
- resolution: {integrity: sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==}
- engines: {node: ^18.17.0 || >=20.5.0}
+ which@6.0.1:
+ resolution: {integrity: sha512-oGLe46MIrCRqX7ytPUf66EAYvdeMIZYn3WaocqqKZAxrBpkqHfL/qvTyJ/bTk5+AqHCjXmrv3CEWgy368zhRUg==}
+ engines: {node: ^20.17.0 || >=22.9.0}
hasBin: true
word-wrap@1.2.5:
@@ -6790,6 +7456,10 @@ packages:
resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
engines: {node: '>=12'}
+ wrap-ansi@9.0.2:
+ resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==}
+ engines: {node: '>=18'}
+
wrappy@1.0.2:
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
@@ -6809,8 +7479,8 @@ packages:
utf-8-validate:
optional: true
- ws@8.19.0:
- resolution: {integrity: sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==}
+ ws@8.20.0:
+ resolution: {integrity: sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==}
engines: {node: '>=10.0.0'}
peerDependencies:
bufferutil: ^4.0.1
@@ -6825,6 +7495,10 @@ packages:
resolution: {integrity: sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==}
engines: {node: '>=18'}
+ wsl-utils@0.3.1:
+ resolution: {integrity: sha512-g/eziiSUNBSsdDJtCLB8bdYEUMj4jR7AGeUo96p/3dTafgjHhpF4RiCFPiRILwjQoDXx5MqkBr4fwWtR3Ky4Wg==}
+ engines: {node: '>=20'}
+
xml-name-validator@4.0.0:
resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==}
engines: {node: '>=12'}
@@ -6833,6 +7507,12 @@ packages:
resolution: {integrity: sha512-TEU+nJVUUnA4CYJFLvK5X9AOeH4KvDvhIfm0vV1GaQRtchnG0hgK5p8hw/xjv8cunWYCsiPCSDzObPyhEwq3KQ==}
engines: {node: '>=0.4.0'}
+ y-protocols@1.0.7:
+ resolution: {integrity: sha512-YSVsLoXxO67J6eE/nV4AtFtT3QEotZf5sK5BHxFBXso7VDUT3Tx07IfA6hsu5Q5OmBdMkQVmFZ9QOA7fikWvnw==}
+ engines: {node: '>=16.0.0', npm: '>=8.0.0'}
+ peerDependencies:
+ yjs: ^13.0.0
+
y18n@5.0.8:
resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
engines: {node: '>=10'}
@@ -6849,13 +7529,22 @@ packages:
engines: {node: '>= 14.6'}
hasBin: true
- yargs-parser@21.1.1:
- resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
- engines: {node: '>=12'}
+ yaml@2.8.3:
+ resolution: {integrity: sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==}
+ engines: {node: '>= 14.6'}
+ hasBin: true
- yargs@17.7.2:
- resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==}
- engines: {node: '>=12'}
+ yargs-parser@22.0.0:
+ resolution: {integrity: sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==}
+ engines: {node: ^20.19.0 || ^22.12.0 || >=23}
+
+ yargs@18.0.0:
+ resolution: {integrity: sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==}
+ engines: {node: ^20.19.0 || ^22.12.0 || >=23}
+
+ yjs@13.6.30:
+ resolution: {integrity: sha512-vv/9h42eCMC81ZHDFswuu/MKzkl/vyq1BhaNGfHyOonwlG4CJbQF4oiBBJPvfdeCt/PlVDWh7Nov9D34YY09uQ==}
+ engines: {node: '>=16.0.0', npm: '>=8.0.0'}
yocto-queue@0.1.0:
resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
@@ -6865,21 +7554,11 @@ packages:
resolution: {integrity: sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==}
engines: {node: '>=12.20'}
- yoctocolors@2.1.2:
- resolution: {integrity: sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==}
- engines: {node: '>=18'}
-
- yoga-layout@3.2.1:
- resolution: {integrity: sha512-0LPOt3AxKqMdFBZA3HBAt/t/8vIKq7VaQYbuA8WxCgung+p9TVyKRYdpvCb80HcdTN2NkbIKbhNwKUfm3tQywQ==}
-
- yoga-wasm-web@0.3.3:
- resolution: {integrity: sha512-N+d4UJSJbt/R3wqY7Coqs5pcV0aUj2j9IaQ3rNj9bVCLld8tTGKRa2USARjnvZJWVx1NDmQev8EknoczaOQDOA==}
-
youch-core@0.3.3:
resolution: {integrity: sha512-ho7XuGjLaJ2hWHoK8yFnsUGy2Y5uDpqSTq1FkHLK4/oqKtyUU1AFbOOxY4IpC9f0fTLjwYbslUz0Po5BpD1wrA==}
- youch@4.1.0-beta.13:
- resolution: {integrity: sha512-3+AG1Xvt+R7M7PSDudhbfbwiyveW6B8PLBIwTyEC598biEYIjHhC89i6DBEvR0EZUjGY3uGSnC429HpIa2Z09g==}
+ youch@4.1.1:
+ resolution: {integrity: sha512-mxW3qiSnl+GRxXsaUMzv2Mbada1Y8CDltET9UxejDQe6DBYlSekghl5U5K0ReAikcHDi0G1vKZEmmo/NWAGKLA==}
zip-stream@6.0.1:
resolution: {integrity: sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA==}
@@ -6890,10 +7569,10 @@ packages:
peerDependencies:
zod: ^3.24.1
- zod-to-json-schema@3.25.1:
- resolution: {integrity: sha512-pM/SU9d3YAggzi6MtR4h7ruuQlqKtad8e9S0fmxcMi+ueAK5Korys/aWcV9LIIHTVbj01NdzxcnXSN+O74ZIVA==}
+ zod-to-json-schema@3.25.2:
+ resolution: {integrity: sha512-O/PgfnpT1xKSDeQYSCfRI5Gy3hPf91mKVDuYLUHZJMiDFptvP41MSnWofm8dnCm0256ZNfZIM7DSzuSMAFnjHA==}
peerDependencies:
- zod: ^3.25 || ^4
+ zod: ^3.25.28 || ^4
zod@3.25.76:
resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==}
@@ -6906,34 +7585,6 @@ packages:
snapshots:
- '@ai-sdk/provider-utils@2.2.8(zod@4.3.6)':
- dependencies:
- '@ai-sdk/provider': 1.1.3
- nanoid: 3.3.11
- secure-json-parse: 2.7.0
- zod: 4.3.6
-
- '@ai-sdk/provider@1.1.3':
- dependencies:
- json-schema: 0.4.0
-
- '@ai-sdk/ui-utils@1.2.11(zod@4.3.6)':
- dependencies:
- '@ai-sdk/provider': 1.1.3
- '@ai-sdk/provider-utils': 2.2.8(zod@4.3.6)
- zod: 4.3.6
- zod-to-json-schema: 3.25.1(zod@4.3.6)
-
- '@ai-sdk/vue@1.2.12(vue@3.5.28(typescript@5.9.3))(zod@4.3.6)':
- dependencies:
- '@ai-sdk/provider-utils': 2.2.8(zod@4.3.6)
- '@ai-sdk/ui-utils': 1.2.11(zod@4.3.6)
- swrv: 1.1.0(vue@3.5.28(typescript@5.9.3))
- optionalDependencies:
- vue: 3.5.28(typescript@5.9.3)
- transitivePeerDependencies:
- - zod
-
'@algolia/cache-browser-local-storage@4.25.3':
dependencies:
'@algolia/cache-common': 4.25.3
@@ -7027,9 +7678,7 @@ snapshots:
'@antfu/install-pkg@1.1.0':
dependencies:
package-manager-detector: 1.6.0
- tinyexec: 1.0.2
-
- '@antfu/utils@8.1.1': {}
+ tinyexec: 1.1.1
'@apidevtools/json-schema-ref-parser@14.2.1(@types/json-schema@7.0.15)':
dependencies:
@@ -7050,8 +7699,8 @@ snapshots:
'@babel/generator': 7.29.1
'@babel/helper-compilation-targets': 7.28.6
'@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0)
- '@babel/helpers': 7.28.6
- '@babel/parser': 7.29.0
+ '@babel/helpers': 7.29.2
+ '@babel/parser': 7.29.2
'@babel/template': 7.28.6
'@babel/traverse': 7.29.0
'@babel/types': 7.29.0
@@ -7066,7 +7715,7 @@ snapshots:
'@babel/generator@7.29.1':
dependencies:
- '@babel/parser': 7.29.0
+ '@babel/parser': 7.29.2
'@babel/types': 7.29.0
'@jridgewell/gen-mapping': 0.3.13
'@jridgewell/trace-mapping': 0.3.31
@@ -7080,7 +7729,7 @@ snapshots:
dependencies:
'@babel/compat-data': 7.29.0
'@babel/helper-validator-option': 7.27.1
- browserslist: 4.28.1
+ browserslist: 4.28.2
lru-cache: 5.1.1
semver: 6.3.1
@@ -7150,12 +7799,12 @@ snapshots:
'@babel/helper-validator-option@7.27.1': {}
- '@babel/helpers@7.28.6':
+ '@babel/helpers@7.29.2':
dependencies:
'@babel/template': 7.28.6
'@babel/types': 7.29.0
- '@babel/parser@7.29.0':
+ '@babel/parser@7.29.2':
dependencies:
'@babel/types': 7.29.0
@@ -7185,7 +7834,7 @@ snapshots:
'@babel/template@7.28.6':
dependencies:
'@babel/code-frame': 7.29.0
- '@babel/parser': 7.29.0
+ '@babel/parser': 7.29.2
'@babel/types': 7.29.0
'@babel/traverse@7.29.0':
@@ -7193,7 +7842,7 @@ snapshots:
'@babel/code-frame': 7.29.0
'@babel/generator': 7.29.1
'@babel/helper-globals': 7.28.0
- '@babel/parser': 7.29.0
+ '@babel/parser': 7.29.2
'@babel/template': 7.28.6
'@babel/types': 7.29.0
debug: 4.4.1
@@ -7205,234 +7854,171 @@ snapshots:
'@babel/helper-string-parser': 7.27.1
'@babel/helper-validator-identifier': 7.28.5
- '@bomb.sh/tab@0.0.12(cac@6.7.14)(citty@0.2.0)':
+ '@bomb.sh/tab@0.0.14(cac@6.7.14)(citty@0.2.2)':
optionalDependencies:
cac: 6.7.14
- citty: 0.2.0
-
- '@capsizecss/metrics@3.6.2': {}
+ citty: 0.2.2
- '@capsizecss/unpack@2.4.0':
+ '@capsizecss/unpack@4.0.0':
dependencies:
- blob-to-buffer: 1.2.9
- cross-fetch: 3.2.0
- fontkit: 2.0.4
- transitivePeerDependencies:
- - encoding
+ fontkitten: 1.0.3
- '@clack/core@1.0.0':
+ '@clack/core@1.2.0':
dependencies:
- picocolors: 1.1.1
+ fast-wrap-ansi: 0.1.6
sisteransi: 1.0.5
- '@clack/prompts@1.0.0':
+ '@clack/prompts@1.2.0':
dependencies:
- '@clack/core': 1.0.0
- picocolors: 1.1.1
+ '@clack/core': 1.2.0
+ fast-string-width: 1.1.0
+ fast-wrap-ansi: 0.1.6
sisteransi: 1.0.5
'@cloudflare/kv-asset-handler@0.4.2': {}
+ '@colordx/core@5.4.0': {}
+
'@directus/openapi@0.3.0': {}
- '@directus/sdk@21.1.0': {}
+ '@directus/sdk@21.2.2': {}
- '@docsearch/css@4.5.4': {}
+ '@docsearch/css@4.6.2': {}
- '@docsearch/js@4.5.4': {}
+ '@docsearch/js@4.6.2': {}
- '@dxup/nuxt@0.3.2(magicast@0.5.2)':
+ '@dxup/nuxt@0.4.1(magicast@0.5.2)(typescript@6.0.3)':
dependencies:
'@dxup/unimport': 0.1.2
- '@nuxt/kit': 4.3.1(magicast@0.5.2)
+ '@nuxt/kit': 4.4.2(magicast@0.5.2)
chokidar: 5.0.0
pathe: 2.0.3
- tinyglobby: 0.2.15
+ tinyglobby: 0.2.16
+ optionalDependencies:
+ typescript: 6.0.3
transitivePeerDependencies:
- magicast
'@dxup/unimport@0.1.2': {}
- '@emnapi/core@1.8.1':
+ '@emnapi/core@1.10.0':
dependencies:
- '@emnapi/wasi-threads': 1.1.0
+ '@emnapi/wasi-threads': 1.2.1
tslib: 2.8.1
optional: true
- '@emnapi/runtime@1.8.1':
+ '@emnapi/core@1.9.2':
dependencies:
+ '@emnapi/wasi-threads': 1.2.1
tslib: 2.8.1
optional: true
- '@emnapi/wasi-threads@1.1.0':
+ '@emnapi/runtime@1.10.0':
dependencies:
tslib: 2.8.1
optional: true
- '@es-joy/jsdoccomment@0.84.0':
+ '@emnapi/runtime@1.8.1':
dependencies:
- '@types/estree': 1.0.8
- '@typescript-eslint/types': 8.55.0
- comment-parser: 1.4.5
- esquery: 1.7.0
- jsdoc-type-pratt-parser: 7.1.1
-
- '@es-joy/resolve.exports@1.2.0': {}
-
- '@esbuild/aix-ppc64@0.25.12':
+ tslib: 2.8.1
optional: true
- '@esbuild/aix-ppc64@0.27.3':
- optional: true
-
- '@esbuild/android-arm64@0.25.12':
- optional: true
-
- '@esbuild/android-arm64@0.27.3':
- optional: true
-
- '@esbuild/android-arm@0.25.12':
- optional: true
-
- '@esbuild/android-arm@0.27.3':
- optional: true
-
- '@esbuild/android-x64@0.25.12':
- optional: true
-
- '@esbuild/android-x64@0.27.3':
- optional: true
-
- '@esbuild/darwin-arm64@0.25.12':
- optional: true
-
- '@esbuild/darwin-arm64@0.27.3':
- optional: true
-
- '@esbuild/darwin-x64@0.25.12':
- optional: true
-
- '@esbuild/darwin-x64@0.27.3':
- optional: true
-
- '@esbuild/freebsd-arm64@0.25.12':
- optional: true
-
- '@esbuild/freebsd-arm64@0.27.3':
- optional: true
-
- '@esbuild/freebsd-x64@0.25.12':
- optional: true
-
- '@esbuild/freebsd-x64@0.27.3':
- optional: true
-
- '@esbuild/linux-arm64@0.25.12':
- optional: true
-
- '@esbuild/linux-arm64@0.27.3':
- optional: true
-
- '@esbuild/linux-arm@0.25.12':
- optional: true
-
- '@esbuild/linux-arm@0.27.3':
- optional: true
-
- '@esbuild/linux-ia32@0.25.12':
- optional: true
-
- '@esbuild/linux-ia32@0.27.3':
- optional: true
-
- '@esbuild/linux-loong64@0.25.12':
+ '@emnapi/runtime@1.9.2':
+ dependencies:
+ tslib: 2.8.1
optional: true
- '@esbuild/linux-loong64@0.27.3':
+ '@emnapi/wasi-threads@1.2.1':
+ dependencies:
+ tslib: 2.8.1
optional: true
- '@esbuild/linux-mips64el@0.25.12':
- optional: true
+ '@es-joy/jsdoccomment@0.86.0':
+ dependencies:
+ '@types/estree': 1.0.8
+ '@typescript-eslint/types': 8.59.0
+ comment-parser: 1.4.6
+ esquery: 1.7.0
+ jsdoc-type-pratt-parser: 7.2.0
- '@esbuild/linux-mips64el@0.27.3':
- optional: true
+ '@es-joy/resolve.exports@1.2.0': {}
- '@esbuild/linux-ppc64@0.25.12':
+ '@esbuild/aix-ppc64@0.27.7':
optional: true
- '@esbuild/linux-ppc64@0.27.3':
+ '@esbuild/android-arm64@0.27.7':
optional: true
- '@esbuild/linux-riscv64@0.25.12':
+ '@esbuild/android-arm@0.27.7':
optional: true
- '@esbuild/linux-riscv64@0.27.3':
+ '@esbuild/android-x64@0.27.7':
optional: true
- '@esbuild/linux-s390x@0.25.12':
+ '@esbuild/darwin-arm64@0.27.7':
optional: true
- '@esbuild/linux-s390x@0.27.3':
+ '@esbuild/darwin-x64@0.27.7':
optional: true
- '@esbuild/linux-x64@0.25.12':
+ '@esbuild/freebsd-arm64@0.27.7':
optional: true
- '@esbuild/linux-x64@0.27.3':
+ '@esbuild/freebsd-x64@0.27.7':
optional: true
- '@esbuild/netbsd-arm64@0.25.12':
+ '@esbuild/linux-arm64@0.27.7':
optional: true
- '@esbuild/netbsd-arm64@0.27.3':
+ '@esbuild/linux-arm@0.27.7':
optional: true
- '@esbuild/netbsd-x64@0.25.12':
+ '@esbuild/linux-ia32@0.27.7':
optional: true
- '@esbuild/netbsd-x64@0.27.3':
+ '@esbuild/linux-loong64@0.27.7':
optional: true
- '@esbuild/openbsd-arm64@0.25.12':
+ '@esbuild/linux-mips64el@0.27.7':
optional: true
- '@esbuild/openbsd-arm64@0.27.3':
+ '@esbuild/linux-ppc64@0.27.7':
optional: true
- '@esbuild/openbsd-x64@0.25.12':
+ '@esbuild/linux-riscv64@0.27.7':
optional: true
- '@esbuild/openbsd-x64@0.27.3':
+ '@esbuild/linux-s390x@0.27.7':
optional: true
- '@esbuild/openharmony-arm64@0.25.12':
+ '@esbuild/linux-x64@0.27.7':
optional: true
- '@esbuild/openharmony-arm64@0.27.3':
+ '@esbuild/netbsd-arm64@0.27.7':
optional: true
- '@esbuild/sunos-x64@0.25.12':
+ '@esbuild/netbsd-x64@0.27.7':
optional: true
- '@esbuild/sunos-x64@0.27.3':
+ '@esbuild/openbsd-arm64@0.27.7':
optional: true
- '@esbuild/win32-arm64@0.25.12':
+ '@esbuild/openbsd-x64@0.27.7':
optional: true
- '@esbuild/win32-arm64@0.27.3':
+ '@esbuild/openharmony-arm64@0.27.7':
optional: true
- '@esbuild/win32-ia32@0.25.12':
+ '@esbuild/sunos-x64@0.27.7':
optional: true
- '@esbuild/win32-ia32@0.27.3':
+ '@esbuild/win32-arm64@0.27.7':
optional: true
- '@esbuild/win32-x64@0.25.12':
+ '@esbuild/win32-ia32@0.27.7':
optional: true
- '@esbuild/win32-x64@0.27.3':
+ '@esbuild/win32-x64@0.27.7':
optional: true
'@eslint-community/eslint-utils@4.9.1(eslint@9.28.0(jiti@2.6.1))':
@@ -7442,37 +8028,37 @@ snapshots:
'@eslint-community/regexpp@4.12.2': {}
- '@eslint/compat@1.4.1(eslint@9.28.0(jiti@2.6.1))':
+ '@eslint/compat@2.0.5(eslint@9.28.0(jiti@2.6.1))':
dependencies:
- '@eslint/core': 0.17.0
+ '@eslint/core': 1.2.1
optionalDependencies:
eslint: 9.28.0(jiti@2.6.1)
'@eslint/config-array@0.20.1':
dependencies:
'@eslint/object-schema': 2.1.7
- debug: 4.4.1
+ debug: 4.4.3
minimatch: 3.1.5
transitivePeerDependencies:
- supports-color
'@eslint/config-helpers@0.2.3': {}
- '@eslint/config-helpers@0.5.2':
+ '@eslint/config-helpers@0.5.5':
dependencies:
- '@eslint/core': 1.1.0
+ '@eslint/core': 1.2.1
- '@eslint/config-inspector@1.4.2(eslint@9.28.0(jiti@2.6.1))':
+ '@eslint/config-inspector@1.5.0(eslint@9.28.0(jiti@2.6.1))':
dependencies:
ansis: 4.2.0
- bundle-require: 5.1.0(esbuild@0.27.3)
- cac: 6.7.14
- chokidar: 4.0.3
- esbuild: 0.27.3
+ bundle-require: 5.1.0(esbuild@0.27.7)
+ cac: 7.0.0
+ chokidar: 5.0.0
+ esbuild: 0.27.7
eslint: 9.28.0(jiti@2.6.1)
- h3: 1.15.5
- tinyglobby: 0.2.15
- ws: 8.19.0
+ h3: 1.15.11
+ tinyglobby: 0.2.16
+ ws: 8.20.0
transitivePeerDependencies:
- bufferutil
- utf-8-validate
@@ -7485,18 +8071,14 @@ snapshots:
dependencies:
'@types/json-schema': 7.0.15
- '@eslint/core@0.17.0':
- dependencies:
- '@types/json-schema': 7.0.15
-
- '@eslint/core@1.1.0':
+ '@eslint/core@1.2.1':
dependencies:
'@types/json-schema': 7.0.15
'@eslint/eslintrc@3.3.5':
dependencies:
ajv: 6.14.0
- debug: 4.4.1
+ debug: 4.4.3
espree: 10.4.0
globals: 14.0.0
ignore: 5.3.2
@@ -7509,7 +8091,7 @@ snapshots:
'@eslint/js@9.28.0': {}
- '@eslint/js@9.39.2': {}
+ '@eslint/js@9.39.4': {}
'@eslint/object-schema@2.1.7': {}
@@ -7518,43 +8100,43 @@ snapshots:
'@eslint/core': 0.15.2
levn: 0.4.1
- '@eslint/plugin-kit@0.4.1':
- dependencies:
- '@eslint/core': 0.17.0
- levn: 0.4.1
-
'@fastify/busboy@3.2.0':
optional: true
'@fingerprintjs/botd@2.0.0': {}
- '@floating-ui/core@1.7.4':
+ '@floating-ui/core@1.7.5':
dependencies:
- '@floating-ui/utils': 0.2.10
+ '@floating-ui/utils': 0.2.11
- '@floating-ui/dom@1.7.5':
+ '@floating-ui/dom@1.7.6':
dependencies:
- '@floating-ui/core': 1.7.4
- '@floating-ui/utils': 0.2.10
+ '@floating-ui/core': 1.7.5
+ '@floating-ui/utils': 0.2.11
- '@floating-ui/utils@0.2.10': {}
+ '@floating-ui/utils@0.2.11': {}
- '@floating-ui/vue@1.1.10(vue@3.5.28(typescript@5.9.3))':
+ '@floating-ui/vue@1.1.11(vue@3.5.33(typescript@6.0.3))':
dependencies:
- '@floating-ui/dom': 1.7.5
- '@floating-ui/utils': 0.2.10
- vue-demi: 0.14.10(vue@3.5.28(typescript@5.9.3))
+ '@floating-ui/dom': 1.7.6
+ '@floating-ui/utils': 0.2.11
+ vue-demi: 0.14.10(vue@3.5.33(typescript@6.0.3))
transitivePeerDependencies:
- '@vue/composition-api'
- vue
- '@humanfs/core@0.19.1': {}
+ '@humanfs/core@0.19.2':
+ dependencies:
+ '@humanfs/types': 0.15.0
- '@humanfs/node@0.16.7':
+ '@humanfs/node@0.16.8':
dependencies:
- '@humanfs/core': 0.19.1
+ '@humanfs/core': 0.19.2
+ '@humanfs/types': 0.15.0
'@humanwhocodes/retry': 0.4.3
+ '@humanfs/types@0.15.0': {}
+
'@humanwhocodes/module-importer@1.0.1': {}
'@humanwhocodes/retry@0.4.3': {}
@@ -7563,37 +8145,34 @@ snapshots:
dependencies:
'@iconify/types': 2.0.0
- '@iconify-json/material-symbols@1.2.54':
+ '@iconify-json/material-symbols@1.2.68':
+ dependencies:
+ '@iconify/types': 2.0.0
+
+ '@iconify-json/ph@1.2.2':
dependencies:
'@iconify/types': 2.0.0
- '@iconify-json/simple-icons@1.2.70':
+ '@iconify-json/simple-icons@1.2.79':
dependencies:
'@iconify/types': 2.0.0
- '@iconify/collections@1.0.648':
+ '@iconify/collections@1.0.675':
dependencies:
'@iconify/types': 2.0.0
'@iconify/types@2.0.0': {}
- '@iconify/utils@2.3.0':
+ '@iconify/utils@3.1.0':
dependencies:
'@antfu/install-pkg': 1.1.0
- '@antfu/utils': 8.1.1
'@iconify/types': 2.0.0
- debug: 4.4.1
- globals: 15.15.0
- kolorist: 1.8.0
- local-pkg: 1.1.2
- mlly: 1.8.0
- transitivePeerDependencies:
- - supports-color
+ mlly: 1.8.2
- '@iconify/vue@5.0.0(vue@3.5.28(typescript@5.9.3))':
+ '@iconify/vue@5.0.0(vue@3.5.33(typescript@6.0.3))':
dependencies:
'@iconify/types': 2.0.0
- vue: 3.5.28(typescript@5.9.3)
+ vue: 3.5.33(typescript@6.0.3)
'@img/colour@1.0.0': {}
@@ -7691,34 +8270,28 @@ snapshots:
'@img/sharp-win32-x64@0.34.5':
optional: true
- '@internationalized/date@3.11.0':
+ '@internationalized/date@3.12.1':
dependencies:
- '@swc/helpers': 0.5.18
+ '@swc/helpers': 0.5.21
- '@internationalized/number@3.6.5':
+ '@internationalized/number@3.6.6':
dependencies:
- '@swc/helpers': 0.5.18
-
- '@ioredis/commands@1.5.0': {}
-
- '@isaacs/balanced-match@4.0.1': {}
+ '@swc/helpers': 0.5.21
- '@isaacs/brace-expansion@5.0.1':
- dependencies:
- '@isaacs/balanced-match': 4.0.1
+ '@ioredis/commands@1.5.1': {}
'@isaacs/cliui@8.0.2':
dependencies:
string-width: 5.1.2
string-width-cjs: string-width@4.2.3
- strip-ansi: 7.1.2
+ strip-ansi: 7.2.0
strip-ansi-cjs: strip-ansi@6.0.1
wrap-ansi: 8.1.0
wrap-ansi-cjs: wrap-ansi@7.0.0
'@isaacs/fs-minipass@4.0.1':
dependencies:
- minipass: 7.1.2
+ minipass: 7.1.3
'@jridgewell/gen-mapping@0.3.13':
dependencies:
@@ -7760,22 +8333,29 @@ snapshots:
node-fetch: 2.7.0
nopt: 8.1.0
semver: 7.7.4
- tar: 7.5.7
+ tar: 7.5.13
transitivePeerDependencies:
- encoding
- supports-color
'@napi-rs/wasm-runtime@0.2.12':
dependencies:
- '@emnapi/core': 1.8.1
- '@emnapi/runtime': 1.8.1
+ '@emnapi/core': 1.10.0
+ '@emnapi/runtime': 1.10.0
'@tybys/wasm-util': 0.10.1
optional: true
- '@napi-rs/wasm-runtime@1.1.1':
+ '@napi-rs/wasm-runtime@1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)':
dependencies:
- '@emnapi/core': 1.8.1
- '@emnapi/runtime': 1.8.1
+ '@emnapi/core': 1.10.0
+ '@emnapi/runtime': 1.10.0
+ '@tybys/wasm-util': 0.10.1
+ optional: true
+
+ '@napi-rs/wasm-runtime@1.1.4(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)':
+ dependencies:
+ '@emnapi/core': 1.9.2
+ '@emnapi/runtime': 1.9.2
'@tybys/wasm-util': 0.10.1
optional: true
@@ -7800,12 +8380,14 @@ snapshots:
write-file-atomic: 6.0.0
optional: true
- '@netlify/open-api@2.52.0':
+ '@netlify/open-api@2.53.0':
optional: true
'@netlify/runtime-utils@1.3.1':
optional: true
+ '@nodable/entities@2.1.0': {}
+
'@nodelib/fs.scandir@2.1.5':
dependencies:
'@nodelib/fs.stat': 2.0.5
@@ -7818,23 +8400,22 @@ snapshots:
'@nodelib/fs.scandir': 2.1.5
fastq: 1.20.1
- '@nuxt/cli@3.33.1(@nuxt/schema@4.3.1)(cac@6.7.14)(magicast@0.5.2)':
+ '@nuxt/cli@3.34.0(@nuxt/schema@4.4.2)(cac@6.7.14)(magicast@0.5.2)':
dependencies:
- '@bomb.sh/tab': 0.0.12(cac@6.7.14)(citty@0.2.0)
- '@clack/prompts': 1.0.0
- c12: 3.3.3(magicast@0.5.2)
- citty: 0.2.0
+ '@bomb.sh/tab': 0.0.14(cac@6.7.14)(citty@0.2.2)
+ '@clack/prompts': 1.2.0
+ c12: 3.3.4(magicast@0.5.2)
+ citty: 0.2.2
confbox: 0.2.4
consola: 3.4.2
- copy-paste: 2.2.0
- debug: 4.4.1
- defu: 6.1.4
+ debug: 4.4.3
+ defu: 6.1.7
exsolve: 1.0.8
- fuse.js: 7.1.0
+ fuse.js: 7.3.0
fzf: 0.5.2
- giget: 3.1.2
+ giget: 3.2.0
jiti: 2.6.1
- listhen: 1.9.0
+ listhen: 1.9.1(srvx@0.11.15)
nypm: 0.6.5
ofetch: 1.5.1
ohash: 2.0.11
@@ -7843,39 +8424,39 @@ snapshots:
pkg-types: 2.3.0
scule: 1.3.0
semver: 7.7.4
- srvx: 0.11.2
+ srvx: 0.11.15
std-env: 3.10.0
- tinyexec: 1.0.2
+ tinyclip: 0.1.12
+ tinyexec: 1.1.1
ufo: 1.6.3
- youch: 4.1.0-beta.13
+ youch: 4.1.1
optionalDependencies:
- '@nuxt/schema': 4.3.1
+ '@nuxt/schema': 4.4.2
transitivePeerDependencies:
- cac
- commander
- magicast
- supports-color
- '@nuxt/content@3.11.2(better-sqlite3@11.10.0)(magicast@0.5.2)(valibot@1.2.0(typescript@5.9.3))':
+ '@nuxt/content@3.13.0(better-sqlite3@11.10.0)(magicast@0.5.2)(valibot@1.3.1(typescript@6.0.3))':
dependencies:
- '@nuxt/kit': 4.3.1(magicast@0.5.2)
- '@nuxtjs/mdc': 0.20.1(magicast@0.5.2)
- '@shikijs/langs': 3.22.0
+ '@nuxt/kit': 4.4.2(magicast@0.5.2)
+ '@nuxtjs/mdc': 0.21.1(magicast@0.5.2)
+ '@shikijs/langs': 4.0.2
'@sqlite.org/sqlite-wasm': 3.50.4-build1
'@standard-schema/spec': 1.1.0
'@webcontainer/env': 1.1.1
- c12: 3.3.3(magicast@0.5.2)
+ c12: 3.3.4(magicast@0.5.2)
chokidar: 5.0.0
consola: 3.4.2
db0: 0.3.4(better-sqlite3@11.10.0)
- defu: 6.1.4
+ defu: 6.1.7
destr: 2.0.5
git-url-parse: 16.1.0
hookable: 5.5.3
- isomorphic-git: 1.36.3
+ isomorphic-git: 1.37.5
jiti: 2.6.1
json-schema-to-typescript-lite: 15.0.0
- knitwork: 1.3.0
mdast-util-to-hast: 13.2.1
mdast-util-to-string: 4.0.0
micromark: 4.0.2
@@ -7885,30 +8466,30 @@ snapshots:
micromark-util-sanitize-uri: 2.0.1
micromatch: 4.0.8
minimark: 0.2.0
- minimatch: 10.1.2
- nuxt-component-meta: 0.17.1(magicast@0.5.2)
+ minimatch: 10.2.5
+ nuxt-component-meta: 0.17.2(magicast@0.5.2)
nypm: 0.6.5
ohash: 2.0.11
pathe: 2.0.3
pkg-types: 2.3.0
remark-mdc: 3.10.0
scule: 1.3.0
- shiki: 3.22.0
- slugify: 1.6.6
+ shiki: 4.0.2
+ slugify: 1.6.9
socket.io-client: 4.8.3
- std-env: 3.10.0
- tinyglobby: 0.2.15
+ std-env: 4.1.0
+ tinyglobby: 0.2.16
ufo: 1.6.3
unctx: 2.5.0
unified: 11.0.5
unist-util-stringify-position: 4.0.0
unist-util-visit: 5.1.0
- unplugin: 2.3.11
+ unplugin: 3.0.0
zod: 3.25.76
- zod-to-json-schema: 3.25.1(zod@3.25.76)
+ zod-to-json-schema: 3.25.2(zod@3.25.76)
optionalDependencies:
better-sqlite3: 11.10.0
- valibot: 1.2.0(typescript@5.9.3)
+ valibot: 1.3.1(typescript@6.0.3)
transitivePeerDependencies:
- bufferutil
- drizzle-orm
@@ -7919,51 +8500,51 @@ snapshots:
'@nuxt/devalue@2.0.2': {}
- '@nuxt/devtools-kit@2.7.0(magicast@0.5.2)(vite@7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2))':
+ '@nuxt/devtools-kit@3.2.4(magicast@0.5.2)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))':
dependencies:
- '@nuxt/kit': 3.21.1(magicast@0.5.2)
+ '@nuxt/kit': 4.4.2(magicast@0.5.2)
execa: 8.0.1
- vite: 7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2)
+ vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)
transitivePeerDependencies:
- magicast
- '@nuxt/devtools-kit@3.1.1(magicast@0.5.2)(vite@7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2))':
+ '@nuxt/devtools-kit@4.0.0-alpha.3(magicast@0.5.2)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))':
dependencies:
- '@nuxt/kit': 4.3.1(magicast@0.5.2)
- execa: 8.0.1
- vite: 7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2)
+ '@nuxt/kit': 4.4.2(magicast@0.5.2)
+ tinyexec: 1.1.1
+ vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)
transitivePeerDependencies:
- magicast
- '@nuxt/devtools-wizard@3.1.1':
+ '@nuxt/devtools-wizard@3.2.4':
dependencies:
+ '@clack/prompts': 1.2.0
consola: 3.4.2
- diff: 8.0.3
+ diff: 8.0.4
execa: 8.0.1
magicast: 0.5.2
pathe: 2.0.3
pkg-types: 2.3.0
- prompts: 2.4.2
semver: 7.7.4
- '@nuxt/devtools@3.1.1(vite@7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2))(vue@3.5.28(typescript@5.9.3))':
+ '@nuxt/devtools@3.2.4(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))':
dependencies:
- '@nuxt/devtools-kit': 3.1.1(magicast@0.5.2)(vite@7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2))
- '@nuxt/devtools-wizard': 3.1.1
- '@nuxt/kit': 4.3.1(magicast@0.5.2)
- '@vue/devtools-core': 8.0.6(vite@7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2))(vue@3.5.28(typescript@5.9.3))
- '@vue/devtools-kit': 8.0.6
- birpc: 2.9.0
+ '@nuxt/devtools-kit': 3.2.4(magicast@0.5.2)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
+ '@nuxt/devtools-wizard': 3.2.4
+ '@nuxt/kit': 4.4.2(magicast@0.5.2)
+ '@vue/devtools-core': 8.1.1(vue@3.5.33(typescript@6.0.3))
+ '@vue/devtools-kit': 8.1.1
+ birpc: 4.0.0
consola: 3.4.2
destr: 2.0.5
error-stack-parser-es: 1.0.5
execa: 8.0.1
- fast-npm-meta: 0.4.8
+ fast-npm-meta: 1.5.0
get-port-please: 3.2.0
- hookable: 5.5.3
+ hookable: 6.1.1
image-meta: 0.2.2
is-installed-globally: 1.0.0
- launch-editor: 2.12.0
+ launch-editor: 2.13.2
local-pkg: 1.1.2
magicast: 0.5.2
nypm: 0.6.5
@@ -7972,45 +8553,45 @@ snapshots:
perfect-debounce: 2.1.0
pkg-types: 2.3.0
semver: 7.7.4
- simple-git: 3.30.0
+ simple-git: 3.36.0
sirv: 3.0.2
- structured-clone-es: 1.0.0
- tinyglobby: 0.2.15
- vite: 7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2)
- vite-plugin-inspect: 11.3.3(@nuxt/kit@4.3.1(magicast@0.5.2))(vite@7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2))
- vite-plugin-vue-tracer: 1.2.0(vite@7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2))(vue@3.5.28(typescript@5.9.3))
- which: 5.0.0
- ws: 8.19.0
+ structured-clone-es: 2.0.0
+ tinyglobby: 0.2.16
+ vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)
+ vite-plugin-inspect: 11.3.3(@nuxt/kit@4.4.2(magicast@0.5.2))(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
+ vite-plugin-vue-tracer: 1.3.0(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))
+ which: 6.0.1
+ ws: 8.20.0
transitivePeerDependencies:
- bufferutil
- supports-color
- utf-8-validate
- vue
- '@nuxt/eslint-config@1.14.0(@typescript-eslint/utils@8.55.0(eslint@9.28.0(jiti@2.6.1))(typescript@5.9.3))(@vue/compiler-sfc@3.5.28)(eslint@9.28.0(jiti@2.6.1))(typescript@5.9.3)':
+ '@nuxt/eslint-config@1.15.2(@typescript-eslint/utils@8.59.0(eslint@9.28.0(jiti@2.6.1))(typescript@6.0.3))(@vue/compiler-sfc@3.5.33)(eslint@9.28.0(jiti@2.6.1))(typescript@6.0.3)':
dependencies:
'@antfu/install-pkg': 1.1.0
- '@clack/prompts': 1.0.0
- '@eslint/js': 9.39.2
- '@nuxt/eslint-plugin': 1.14.0(eslint@9.28.0(jiti@2.6.1))(typescript@5.9.3)
- '@stylistic/eslint-plugin': 5.8.0(eslint@9.28.0(jiti@2.6.1))
- '@typescript-eslint/eslint-plugin': 8.55.0(@typescript-eslint/parser@8.55.0(eslint@9.28.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.28.0(jiti@2.6.1))(typescript@5.9.3)
- '@typescript-eslint/parser': 8.55.0(eslint@9.28.0(jiti@2.6.1))(typescript@5.9.3)
+ '@clack/prompts': 1.2.0
+ '@eslint/js': 9.39.4
+ '@nuxt/eslint-plugin': 1.15.2(eslint@9.28.0(jiti@2.6.1))(typescript@6.0.3)
+ '@stylistic/eslint-plugin': 5.10.0(eslint@9.28.0(jiti@2.6.1))
+ '@typescript-eslint/eslint-plugin': 8.59.0(@typescript-eslint/parser@8.59.0(eslint@9.28.0(jiti@2.6.1))(typescript@6.0.3))(eslint@9.28.0(jiti@2.6.1))(typescript@6.0.3)
+ '@typescript-eslint/parser': 8.59.0(eslint@9.28.0(jiti@2.6.1))(typescript@6.0.3)
eslint: 9.28.0(jiti@2.6.1)
- eslint-config-flat-gitignore: 2.1.0(eslint@9.28.0(jiti@2.6.1))
- eslint-flat-config-utils: 3.0.1
+ eslint-config-flat-gitignore: 2.3.0(eslint@9.28.0(jiti@2.6.1))
+ eslint-flat-config-utils: 3.1.0
eslint-merge-processors: 2.0.0(eslint@9.28.0(jiti@2.6.1))
- eslint-plugin-import-lite: 0.5.0(eslint@9.28.0(jiti@2.6.1))
- eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.55.0(eslint@9.28.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.28.0(jiti@2.6.1))
- eslint-plugin-jsdoc: 62.5.4(eslint@9.28.0(jiti@2.6.1))
- eslint-plugin-regexp: 3.0.0(eslint@9.28.0(jiti@2.6.1))
- eslint-plugin-unicorn: 62.0.0(eslint@9.28.0(jiti@2.6.1))
- eslint-plugin-vue: 10.7.0(@stylistic/eslint-plugin@5.8.0(eslint@9.28.0(jiti@2.6.1)))(@typescript-eslint/parser@8.55.0(eslint@9.28.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.28.0(jiti@2.6.1))(vue-eslint-parser@10.2.0(eslint@9.28.0(jiti@2.6.1)))
- eslint-processor-vue-blocks: 2.0.0(@vue/compiler-sfc@3.5.28)(eslint@9.28.0(jiti@2.6.1))
- globals: 17.3.0
+ eslint-plugin-import-lite: 0.5.2(eslint@9.28.0(jiti@2.6.1))
+ eslint-plugin-import-x: 4.16.2(@typescript-eslint/utils@8.59.0(eslint@9.28.0(jiti@2.6.1))(typescript@6.0.3))(eslint@9.28.0(jiti@2.6.1))
+ eslint-plugin-jsdoc: 62.9.0(eslint@9.28.0(jiti@2.6.1))
+ eslint-plugin-regexp: 3.1.0(eslint@9.28.0(jiti@2.6.1))
+ eslint-plugin-unicorn: 63.0.0(eslint@9.28.0(jiti@2.6.1))
+ eslint-plugin-vue: 10.9.0(@stylistic/eslint-plugin@5.10.0(eslint@9.28.0(jiti@2.6.1)))(@typescript-eslint/parser@8.59.0(eslint@9.28.0(jiti@2.6.1))(typescript@6.0.3))(eslint@9.28.0(jiti@2.6.1))(vue-eslint-parser@10.4.0(eslint@9.28.0(jiti@2.6.1)))
+ eslint-processor-vue-blocks: 2.0.0(@vue/compiler-sfc@3.5.33)(eslint@9.28.0(jiti@2.6.1))
+ globals: 17.5.0
local-pkg: 1.1.2
pathe: 2.0.3
- vue-eslint-parser: 10.2.0(eslint@9.28.0(jiti@2.6.1))
+ vue-eslint-parser: 10.4.0(eslint@9.28.0(jiti@2.6.1))
transitivePeerDependencies:
- '@typescript-eslint/utils'
- '@vue/compiler-sfc'
@@ -8018,31 +8599,31 @@ snapshots:
- supports-color
- typescript
- '@nuxt/eslint-plugin@1.14.0(eslint@9.28.0(jiti@2.6.1))(typescript@5.9.3)':
+ '@nuxt/eslint-plugin@1.15.2(eslint@9.28.0(jiti@2.6.1))(typescript@6.0.3)':
dependencies:
- '@typescript-eslint/types': 8.55.0
- '@typescript-eslint/utils': 8.55.0(eslint@9.28.0(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/types': 8.59.0
+ '@typescript-eslint/utils': 8.59.0(eslint@9.28.0(jiti@2.6.1))(typescript@6.0.3)
eslint: 9.28.0(jiti@2.6.1)
transitivePeerDependencies:
- supports-color
- typescript
- '@nuxt/eslint@1.14.0(@typescript-eslint/utils@8.55.0(eslint@9.28.0(jiti@2.6.1))(typescript@5.9.3))(@vue/compiler-sfc@3.5.28)(eslint@9.28.0(jiti@2.6.1))(magicast@0.5.2)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2))':
+ '@nuxt/eslint@1.15.2(@typescript-eslint/utils@8.59.0(eslint@9.28.0(jiti@2.6.1))(typescript@6.0.3))(@vue/compiler-sfc@3.5.33)(eslint@9.28.0(jiti@2.6.1))(magicast@0.5.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))':
dependencies:
- '@eslint/config-inspector': 1.4.2(eslint@9.28.0(jiti@2.6.1))
- '@nuxt/devtools-kit': 3.1.1(magicast@0.5.2)(vite@7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2))
- '@nuxt/eslint-config': 1.14.0(@typescript-eslint/utils@8.55.0(eslint@9.28.0(jiti@2.6.1))(typescript@5.9.3))(@vue/compiler-sfc@3.5.28)(eslint@9.28.0(jiti@2.6.1))(typescript@5.9.3)
- '@nuxt/eslint-plugin': 1.14.0(eslint@9.28.0(jiti@2.6.1))(typescript@5.9.3)
- '@nuxt/kit': 4.3.1(magicast@0.5.2)
+ '@eslint/config-inspector': 1.5.0(eslint@9.28.0(jiti@2.6.1))
+ '@nuxt/devtools-kit': 3.2.4(magicast@0.5.2)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
+ '@nuxt/eslint-config': 1.15.2(@typescript-eslint/utils@8.59.0(eslint@9.28.0(jiti@2.6.1))(typescript@6.0.3))(@vue/compiler-sfc@3.5.33)(eslint@9.28.0(jiti@2.6.1))(typescript@6.0.3)
+ '@nuxt/eslint-plugin': 1.15.2(eslint@9.28.0(jiti@2.6.1))(typescript@6.0.3)
+ '@nuxt/kit': 4.4.2(magicast@0.5.2)
chokidar: 5.0.0
eslint: 9.28.0(jiti@2.6.1)
- eslint-flat-config-utils: 3.0.1
- eslint-typegen: 2.3.0(eslint@9.28.0(jiti@2.6.1))
+ eslint-flat-config-utils: 3.1.0
+ eslint-typegen: 2.3.1(eslint@9.28.0(jiti@2.6.1))
find-up: 8.0.0
get-port-please: 3.2.0
- mlly: 1.8.0
+ mlly: 1.8.2
pathe: 2.0.3
- unimport: 5.6.0
+ unimport: 5.7.0
transitivePeerDependencies:
- '@typescript-eslint/utils'
- '@vue/compiler-sfc'
@@ -8055,28 +8636,23 @@ snapshots:
- utf-8-validate
- vite
- '@nuxt/fonts@0.11.4(@netlify/blobs@9.1.2)(db0@0.3.4(better-sqlite3@11.10.0))(ioredis@5.9.2)(magicast@0.5.2)(vite@7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2))':
+ '@nuxt/fonts@0.14.0(@netlify/blobs@9.1.2)(db0@0.3.4(better-sqlite3@11.10.0))(ioredis@5.10.1)(magicast@0.5.2)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))':
dependencies:
- '@nuxt/devtools-kit': 2.7.0(magicast@0.5.2)(vite@7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2))
- '@nuxt/kit': 3.21.1(magicast@0.5.2)
+ '@nuxt/devtools-kit': 3.2.4(magicast@0.5.2)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
+ '@nuxt/kit': 4.4.2(magicast@0.5.2)
consola: 3.4.2
- css-tree: 3.1.0
- defu: 6.1.4
- esbuild: 0.25.12
- fontaine: 0.6.0
- h3: 1.15.5
- jiti: 2.6.1
+ defu: 6.1.7
+ fontless: 0.2.1(@netlify/blobs@9.1.2)(db0@0.3.4(better-sqlite3@11.10.0))(ioredis@5.10.1)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
+ h3: 1.15.11
magic-regexp: 0.10.0
- magic-string: 0.30.21
- node-fetch-native: 1.6.7
- ohash: 2.0.11
+ ofetch: 1.5.1
pathe: 2.0.3
sirv: 3.0.2
- tinyglobby: 0.2.15
+ tinyglobby: 0.2.16
ufo: 1.6.3
- unifont: 0.4.1
- unplugin: 2.3.11
- unstorage: 1.17.4(@netlify/blobs@9.1.2)(db0@0.3.4(better-sqlite3@11.10.0))(ioredis@5.9.2)
+ unifont: 0.7.4
+ unplugin: 3.0.0
+ unstorage: 1.17.5(@netlify/blobs@9.1.2)(db0@0.3.4(better-sqlite3@11.10.0))(ioredis@5.10.1)
transitivePeerDependencies:
- '@azure/app-configuration'
- '@azure/cosmos'
@@ -8094,32 +8670,30 @@ snapshots:
- '@vercel/kv'
- aws4fetch
- db0
- - encoding
- idb-keyval
- ioredis
- magicast
- uploadthing
- vite
- '@nuxt/icon@1.15.0(magicast@0.5.2)(vite@7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2))(vue@3.5.28(typescript@5.9.3))':
+ '@nuxt/icon@2.2.1(magicast@0.5.2)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))':
dependencies:
- '@iconify/collections': 1.0.648
+ '@iconify/collections': 1.0.675
'@iconify/types': 2.0.0
- '@iconify/utils': 2.3.0
- '@iconify/vue': 5.0.0(vue@3.5.28(typescript@5.9.3))
- '@nuxt/devtools-kit': 2.7.0(magicast@0.5.2)(vite@7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2))
- '@nuxt/kit': 3.21.1(magicast@0.5.2)
+ '@iconify/utils': 3.1.0
+ '@iconify/vue': 5.0.0(vue@3.5.33(typescript@6.0.3))
+ '@nuxt/devtools-kit': 3.2.4(magicast@0.5.2)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
+ '@nuxt/kit': 4.4.2(magicast@0.5.2)
consola: 3.4.2
local-pkg: 1.1.2
- mlly: 1.8.0
+ mlly: 1.8.2
ohash: 2.0.11
pathe: 2.0.3
- picomatch: 4.0.3
+ picomatch: 4.0.4
std-env: 3.10.0
- tinyglobby: 0.2.15
+ tinyglobby: 0.2.16
transitivePeerDependencies:
- magicast
- - supports-color
- vite
- vue
@@ -8149,6 +8723,32 @@ snapshots:
transitivePeerDependencies:
- magicast
+ '@nuxt/kit@3.21.2(magicast@0.5.2)':
+ dependencies:
+ c12: 3.3.4(magicast@0.5.2)
+ consola: 3.4.2
+ defu: 6.1.4
+ destr: 2.0.5
+ errx: 0.1.0
+ exsolve: 1.0.8
+ ignore: 7.0.5
+ jiti: 2.6.1
+ klona: 2.0.6
+ knitwork: 1.3.0
+ mlly: 1.8.2
+ ohash: 2.0.11
+ pathe: 2.0.3
+ pkg-types: 2.3.0
+ rc9: 3.0.1
+ scule: 1.3.0
+ semver: 7.7.4
+ tinyglobby: 0.2.15
+ ufo: 1.6.3
+ unctx: 2.5.0
+ untyped: 2.0.0
+ transitivePeerDependencies:
+ - magicast
+
'@nuxt/kit@4.3.1(magicast@0.5.2)':
dependencies:
c12: 3.3.3(magicast@0.5.2)
@@ -8160,7 +8760,7 @@ snapshots:
ignore: 7.0.5
jiti: 2.6.1
klona: 2.0.6
- mlly: 1.8.0
+ mlly: 1.8.2
ohash: 2.0.11
pathe: 2.0.3
pkg-types: 2.3.0
@@ -8174,34 +8774,61 @@ snapshots:
transitivePeerDependencies:
- magicast
- '@nuxt/nitro-server@4.3.1(@netlify/blobs@9.1.2)(better-sqlite3@11.10.0)(db0@0.3.4(better-sqlite3@11.10.0))(ioredis@5.9.2)(magicast@0.5.2)(nuxt@4.3.1(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@25.2.2)(@vue/compiler-sfc@3.5.28)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(eslint@9.28.0(jiti@2.6.1))(ioredis@5.9.2)(lightningcss@1.30.2)(magicast@0.5.2)(optionator@0.9.4)(rollup@4.57.1)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2))(vue-tsc@3.2.4(typescript@5.9.3))(yaml@2.8.2))(typescript@5.9.3)':
+ '@nuxt/kit@4.4.2(magicast@0.5.2)':
+ dependencies:
+ c12: 3.3.4(magicast@0.5.2)
+ consola: 3.4.2
+ defu: 6.1.7
+ destr: 2.0.5
+ errx: 0.1.0
+ exsolve: 1.0.8
+ ignore: 7.0.5
+ jiti: 2.6.1
+ klona: 2.0.6
+ mlly: 1.8.2
+ ohash: 2.0.11
+ pathe: 2.0.3
+ pkg-types: 2.3.0
+ rc9: 3.0.1
+ scule: 1.3.0
+ semver: 7.7.4
+ tinyglobby: 0.2.16
+ ufo: 1.6.3
+ unctx: 2.5.0
+ untyped: 2.0.0
+ transitivePeerDependencies:
+ - magicast
+
+ '@nuxt/nitro-server@4.4.2(2426d09d816dd853d95ec6447c6869f4)':
dependencies:
+ '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0)
'@nuxt/devalue': 2.0.2
- '@nuxt/kit': 4.3.1(magicast@0.5.2)
- '@unhead/vue': 2.1.4(vue@3.5.28(typescript@5.9.3))
- '@vue/shared': 3.5.28
+ '@nuxt/kit': 4.4.2(magicast@0.5.2)
+ '@unhead/vue': 2.1.13(vue@3.5.33(typescript@6.0.3))
+ '@vue/shared': 3.5.33
consola: 3.4.2
- defu: 6.1.4
+ defu: 6.1.7
destr: 2.0.5
- devalue: 5.6.2
+ devalue: 5.7.1
errx: 0.1.0
escape-string-regexp: 5.0.0
exsolve: 1.0.8
- h3: 1.15.5
- impound: 1.0.0
+ h3: 1.15.11
+ impound: 1.1.5
klona: 2.0.6
mocked-exports: 0.1.1
- nitropack: 2.13.1(@netlify/blobs@9.1.2)(better-sqlite3@11.10.0)
- nuxt: 4.3.1(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@25.2.2)(@vue/compiler-sfc@3.5.28)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(eslint@9.28.0(jiti@2.6.1))(ioredis@5.9.2)(lightningcss@1.30.2)(magicast@0.5.2)(optionator@0.9.4)(rollup@4.57.1)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2))(vue-tsc@3.2.4(typescript@5.9.3))(yaml@2.8.2)
+ nitropack: 2.13.3(@netlify/blobs@9.1.2)(better-sqlite3@11.10.0)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(srvx@0.11.15)
+ nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3)
+ nypm: 0.6.5
ohash: 2.0.11
pathe: 2.0.3
pkg-types: 2.3.0
- rou3: 0.7.12
- std-env: 3.10.0
+ rou3: 0.8.1
+ std-env: 4.1.0
ufo: 1.6.3
unctx: 2.5.0
- unstorage: 1.17.4(@netlify/blobs@9.1.2)(db0@0.3.4(better-sqlite3@11.10.0))(ioredis@5.9.2)
- vue: 3.5.28(typescript@5.9.3)
+ unstorage: 1.17.5(@netlify/blobs@9.1.2)(db0@0.3.4(better-sqlite3@11.10.0))(ioredis@5.10.1)
+ vue: 3.5.33(typescript@6.0.3)
vue-bundle-renderer: 2.2.0
vue-devtools-stub: 0.1.0
transitivePeerDependencies:
@@ -8211,6 +8838,7 @@ snapshots:
- '@azure/identity'
- '@azure/keyvault-secrets'
- '@azure/storage-blob'
+ - '@babel/core'
- '@capacitor/preferences'
- '@deno/kv'
- '@electric-sql/pglite'
@@ -8223,6 +8851,7 @@ snapshots:
- '@vercel/kv'
- aws4fetch
- bare-abort-controller
+ - bare-buffer
- better-sqlite3
- db0
- drizzle-orm
@@ -8234,40 +8863,47 @@ snapshots:
- react-native-b4a
- rolldown
- sqlite3
+ - srvx
- supports-color
- typescript
- uploadthing
- xml2js
- '@nuxt/schema@4.3.1':
+ '@nuxt/schema@4.4.2':
dependencies:
- '@vue/shared': 3.5.28
- defu: 6.1.4
+ '@vue/shared': 3.5.33
+ defu: 6.1.7
pathe: 2.0.3
pkg-types: 2.3.0
- std-env: 3.10.0
+ std-env: 4.1.0
- '@nuxt/scripts@0.13.2(@netlify/blobs@9.1.2)(@types/google.maps@3.58.1)(@unhead/vue@2.1.4(vue@3.5.28(typescript@5.9.3)))(db0@0.3.4(better-sqlite3@11.10.0))(ioredis@5.9.2)(magicast@0.5.2)(typescript@5.9.3)(vue@3.5.28(typescript@5.9.3))':
+ '@nuxt/scripts@1.0.2(@netlify/blobs@9.1.2)(@types/google.maps@3.58.1)(@unhead/vue@2.1.13(vue@3.5.33(typescript@6.0.3)))(db0@0.3.4(better-sqlite3@11.10.0))(ioredis@5.10.1)(magicast@0.5.2)(posthog-js@1.371.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))':
dependencies:
- '@nuxt/kit': 4.3.1(magicast@0.5.2)
- '@unhead/vue': 2.1.4(vue@3.5.28(typescript@5.9.3))
- '@vueuse/core': 14.2.0(vue@3.5.28(typescript@5.9.3))
+ '@nuxt/devtools-kit': 3.2.4(magicast@0.5.2)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
+ '@nuxt/kit': 4.4.2(magicast@0.5.2)
+ '@unhead/vue': 2.1.13(vue@3.5.33(typescript@6.0.3))
+ '@vueuse/core': 14.2.1(vue@3.5.33(typescript@6.0.3))
+ '@vueuse/shared': 14.2.1(vue@3.5.33(typescript@6.0.3))
consola: 3.4.2
- defu: 6.1.4
- h3: 1.15.5
+ defu: 6.1.7
+ h3: 1.15.11
magic-string: 0.30.21
ofetch: 1.5.1
ohash: 2.0.11
+ oxc-parser: 0.127.0
+ oxc-walker: 0.7.0(oxc-parser@0.127.0)
pathe: 2.0.3
pkg-types: 2.3.0
sirv: 3.0.2
- std-env: 3.10.0
+ std-env: 4.1.0
ufo: 1.6.3
- unplugin: 2.3.11
- unstorage: 1.17.4(@netlify/blobs@9.1.2)(db0@0.3.4(better-sqlite3@11.10.0))(ioredis@5.9.2)
- valibot: 1.2.0(typescript@5.9.3)
+ ultrahtml: 1.6.0
+ unplugin: 3.0.0
+ unstorage: 1.17.5(@netlify/blobs@9.1.2)(db0@0.3.4(better-sqlite3@11.10.0))(ioredis@5.10.1)
+ valibot: 1.3.1(typescript@6.0.3)
optionalDependencies:
'@types/google.maps': 3.58.1
+ posthog-js: 1.371.2
transitivePeerDependencies:
- '@azure/app-configuration'
- '@azure/cosmos'
@@ -8290,42 +8926,90 @@ snapshots:
- magicast
- typescript
- uploadthing
+ - vite
- vue
- '@nuxt/telemetry@2.7.0(@nuxt/kit@4.3.1(magicast@0.5.2))':
+ '@nuxt/telemetry@2.8.0(@nuxt/kit@4.4.2(magicast@0.5.2))':
dependencies:
- '@nuxt/kit': 4.3.1(magicast@0.5.2)
- citty: 0.2.0
+ '@nuxt/kit': 4.4.2(magicast@0.5.2)
+ citty: 0.2.2
consola: 3.4.2
ofetch: 2.0.0-alpha.3
- rc9: 3.0.0
- std-env: 3.10.0
-
- '@nuxt/ui-pro@3.3.7(@babel/parser@7.29.0)(@netlify/blobs@9.1.2)(axios@1.13.5)(change-case@5.4.4)(db0@0.3.4(better-sqlite3@11.10.0))(embla-carousel@8.6.0)(ioredis@5.9.2)(jwt-decode@4.0.0)(magicast@0.5.2)(react@19.2.4)(typescript@5.9.3)(valibot@1.2.0(typescript@5.9.3))(vite@7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2))(vue-router@4.6.4(vue@3.5.28(typescript@5.9.3)))(vue@3.5.28(typescript@5.9.3))(zod@4.3.6)':
- dependencies:
- '@ai-sdk/vue': 1.2.12(vue@3.5.28(typescript@5.9.3))(zod@4.3.6)
- '@nuxt/kit': 4.3.1(magicast@0.5.2)
- '@nuxt/schema': 4.3.1
- '@nuxt/ui': 3.3.7(@babel/parser@7.29.0)(@netlify/blobs@9.1.2)(axios@1.13.5)(change-case@5.4.4)(db0@0.3.4(better-sqlite3@11.10.0))(embla-carousel@8.6.0)(ioredis@5.9.2)(jwt-decode@4.0.0)(magicast@0.5.2)(typescript@5.9.3)(valibot@1.2.0(typescript@5.9.3))(vite@7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2))(vue-router@4.6.4(vue@3.5.28(typescript@5.9.3)))(vue@3.5.28(typescript@5.9.3))(zod@4.3.6)
+ rc9: 3.0.1
+ std-env: 4.1.0
+
+ '@nuxt/ui@4.6.1(@netlify/blobs@9.1.2)(@nuxt/content@3.13.0(better-sqlite3@11.10.0)(magicast@0.5.2)(valibot@1.3.1(typescript@6.0.3)))(@tiptap/extensions@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4))(@tiptap/y-tiptap@3.0.3(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.8)(y-protocols@1.0.7(yjs@13.6.30))(yjs@13.6.30))(axios@1.13.5)(change-case@5.4.4)(db0@0.3.4(better-sqlite3@11.10.0))(embla-carousel@8.6.0)(ioredis@5.10.1)(jwt-decode@4.0.0)(magicast@0.5.2)(tailwindcss@4.2.4)(typescript@6.0.3)(valibot@1.3.1(typescript@6.0.3))(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-router@5.0.6(@vue/compiler-sfc@3.5.33)(vue@3.5.33(typescript@6.0.3)))(vue@3.5.33(typescript@6.0.3))(yjs@13.6.30)(zod@4.3.6)':
+ dependencies:
+ '@floating-ui/dom': 1.7.6
+ '@iconify/vue': 5.0.0(vue@3.5.33(typescript@6.0.3))
+ '@internationalized/date': 3.12.1
+ '@internationalized/number': 3.6.6
+ '@nuxt/fonts': 0.14.0(@netlify/blobs@9.1.2)(db0@0.3.4(better-sqlite3@11.10.0))(ioredis@5.10.1)(magicast@0.5.2)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
+ '@nuxt/icon': 2.2.1(magicast@0.5.2)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))
+ '@nuxt/kit': 4.4.2(magicast@0.5.2)
+ '@nuxt/schema': 4.4.2
+ '@nuxtjs/color-mode': 3.5.2(magicast@0.5.2)
'@standard-schema/spec': 1.1.0
- '@vueuse/core': 13.9.0(vue@3.5.28(typescript@5.9.3))
+ '@tailwindcss/postcss': 4.2.4
+ '@tailwindcss/vite': 4.2.4(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
+ '@tanstack/vue-table': 8.21.3(vue@3.5.33(typescript@6.0.3))
+ '@tanstack/vue-virtual': 3.13.24(vue@3.5.33(typescript@6.0.3))
+ '@tiptap/core': 3.22.4(@tiptap/pm@3.22.4)
+ '@tiptap/extension-bubble-menu': 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)
+ '@tiptap/extension-code': 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))
+ '@tiptap/extension-collaboration': 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)(@tiptap/y-tiptap@3.0.3(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.8)(y-protocols@1.0.7(yjs@13.6.30))(yjs@13.6.30))(yjs@13.6.30)
+ '@tiptap/extension-drag-handle': 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/extension-collaboration@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)(@tiptap/y-tiptap@3.0.3(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.8)(y-protocols@1.0.7(yjs@13.6.30))(yjs@13.6.30))(yjs@13.6.30))(@tiptap/extension-node-range@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)(@tiptap/y-tiptap@3.0.3(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.8)(y-protocols@1.0.7(yjs@13.6.30))(yjs@13.6.30))
+ '@tiptap/extension-drag-handle-vue-3': 3.22.4(@tiptap/extension-drag-handle@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/extension-collaboration@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)(@tiptap/y-tiptap@3.0.3(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.8)(y-protocols@1.0.7(yjs@13.6.30))(yjs@13.6.30))(yjs@13.6.30))(@tiptap/extension-node-range@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)(@tiptap/y-tiptap@3.0.3(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.8)(y-protocols@1.0.7(yjs@13.6.30))(yjs@13.6.30)))(@tiptap/pm@3.22.4)(@tiptap/vue-3@3.22.4(@floating-ui/dom@1.7.6)(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)(vue@3.5.33(typescript@6.0.3)))(vue@3.5.33(typescript@6.0.3))
+ '@tiptap/extension-floating-menu': 3.22.4(@floating-ui/dom@1.7.6)(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)
+ '@tiptap/extension-horizontal-rule': 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)
+ '@tiptap/extension-image': 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))
+ '@tiptap/extension-mention': 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)(@tiptap/suggestion@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4))
+ '@tiptap/extension-node-range': 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)
+ '@tiptap/extension-placeholder': 3.22.4(@tiptap/extensions@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4))
+ '@tiptap/markdown': 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)
+ '@tiptap/pm': 3.22.4
+ '@tiptap/starter-kit': 3.22.4
+ '@tiptap/suggestion': 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)
+ '@tiptap/vue-3': 3.22.4(@floating-ui/dom@1.7.6)(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)(vue@3.5.33(typescript@6.0.3))
+ '@unhead/vue': 2.1.13(vue@3.5.33(typescript@6.0.3))
+ '@vueuse/core': 14.2.1(vue@3.5.33(typescript@6.0.3))
+ '@vueuse/integrations': 14.2.1(axios@1.13.5)(change-case@5.4.4)(fuse.js@7.3.0)(jwt-decode@4.0.0)(vue@3.5.33(typescript@6.0.3))
+ '@vueuse/shared': 14.2.1(vue@3.5.33(typescript@6.0.3))
+ colortranslator: 5.0.0
consola: 3.4.2
- defu: 6.1.4
- dotenv: 16.6.1
- git-url-parse: 16.1.0
- motion-v: 1.10.2(@vueuse/core@13.9.0(vue@3.5.28(typescript@5.9.3)))(react@19.2.4)(vue@3.5.28(typescript@5.9.3))
- ofetch: 1.5.1
+ defu: 6.1.7
+ embla-carousel-auto-height: 8.6.0(embla-carousel@8.6.0)
+ embla-carousel-auto-scroll: 8.6.0(embla-carousel@8.6.0)
+ embla-carousel-autoplay: 8.6.0(embla-carousel@8.6.0)
+ embla-carousel-class-names: 8.6.0(embla-carousel@8.6.0)
+ embla-carousel-fade: 8.6.0(embla-carousel@8.6.0)
+ embla-carousel-vue: 8.6.0(vue@3.5.33(typescript@6.0.3))
+ embla-carousel-wheel-gestures: 8.1.0(embla-carousel@8.6.0)
+ fuse.js: 7.3.0
+ hookable: 6.1.1
+ knitwork: 1.3.0
+ magic-string: 0.30.21
+ mlly: 1.8.2
+ motion-v: 2.2.1(@vueuse/core@14.2.1(vue@3.5.33(typescript@6.0.3)))(vue@3.5.33(typescript@6.0.3))
ohash: 2.0.11
pathe: 2.0.3
- pkg-types: 2.3.0
+ reka-ui: 2.9.3(vue@3.5.33(typescript@6.0.3))
scule: 1.3.0
- tinyglobby: 0.2.15
- typescript: 5.9.3
- unplugin: 2.3.11
- unplugin-auto-import: 20.3.0(@nuxt/kit@4.3.1(magicast@0.5.2))(@vueuse/core@13.9.0(vue@3.5.28(typescript@5.9.3)))
- unplugin-vue-components: 30.0.0(@babel/parser@7.29.0)(@nuxt/kit@4.3.1(magicast@0.5.2))(vue@3.5.28(typescript@5.9.3))
+ tailwind-merge: 3.5.0
+ tailwind-variants: 3.2.2(tailwind-merge@3.5.0)(tailwindcss@4.2.4)
+ tailwindcss: 4.2.4
+ tinyglobby: 0.2.16
+ typescript: 6.0.3
+ ufo: 1.6.3
+ unplugin: 3.0.0
+ unplugin-auto-import: 21.0.0(@nuxt/kit@4.4.2(magicast@0.5.2))(@vueuse/core@14.2.1(vue@3.5.33(typescript@6.0.3)))
+ unplugin-vue-components: 32.0.0(@nuxt/kit@4.4.2(magicast@0.5.2))(vue@3.5.33(typescript@6.0.3))
+ vaul-vue: 0.4.1(reka-ui@2.9.3(vue@3.5.33(typescript@6.0.3)))(vue@3.5.33(typescript@6.0.3))
+ vue-component-type-helpers: 3.2.7
optionalDependencies:
- valibot: 1.2.0(typescript@5.9.3)
+ '@nuxt/content': 3.13.0(better-sqlite3@11.10.0)(magicast@0.5.2)(valibot@1.3.1(typescript@6.0.3))
+ valibot: 1.3.1(typescript@6.0.3)
+ vue-router: 5.0.6(@vue/compiler-sfc@3.5.33)(vue@3.5.33(typescript@6.0.3))
zod: 4.3.6
transitivePeerDependencies:
- '@azure/app-configuration'
@@ -8334,13 +9018,13 @@ snapshots:
- '@azure/identity'
- '@azure/keyvault-secrets'
- '@azure/storage-blob'
- - '@babel/parser'
- '@capacitor/preferences'
- '@deno/kv'
- '@emotion/is-prop-valid'
- - '@inertiajs/vue3'
- '@netlify/blobs'
- '@planetscale/database'
+ - '@tiptap/extensions'
+ - '@tiptap/y-tiptap'
- '@upstash/redis'
- '@vercel/blob'
- '@vercel/functions'
@@ -8353,7 +9037,6 @@ snapshots:
- db0
- drauu
- embla-carousel
- - encoding
- focus-trap
- idb-keyval
- ioredis
@@ -8364,141 +9047,56 @@ snapshots:
- react
- react-dom
- sortablejs
- - supports-color
- universal-cookie
- uploadthing
- vite
- vue
- - vue-router
+ - yjs
- '@nuxt/ui@3.3.7(@babel/parser@7.29.0)(@netlify/blobs@9.1.2)(axios@1.13.5)(change-case@5.4.4)(db0@0.3.4(better-sqlite3@11.10.0))(embla-carousel@8.6.0)(ioredis@5.9.2)(jwt-decode@4.0.0)(magicast@0.5.2)(typescript@5.9.3)(valibot@1.2.0(typescript@5.9.3))(vite@7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2))(vue-router@4.6.4(vue@3.5.28(typescript@5.9.3)))(vue@3.5.28(typescript@5.9.3))(zod@4.3.6)':
+ '@nuxt/vite-builder@4.4.2(4d865828a8a2f3300c67d34de741fd3a)':
dependencies:
- '@iconify/vue': 5.0.0(vue@3.5.28(typescript@5.9.3))
- '@internationalized/date': 3.11.0
- '@internationalized/number': 3.6.5
- '@nuxt/fonts': 0.11.4(@netlify/blobs@9.1.2)(db0@0.3.4(better-sqlite3@11.10.0))(ioredis@5.9.2)(magicast@0.5.2)(vite@7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2))
- '@nuxt/icon': 1.15.0(magicast@0.5.2)(vite@7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2))(vue@3.5.28(typescript@5.9.3))
- '@nuxt/kit': 4.3.1(magicast@0.5.2)
- '@nuxt/schema': 4.3.1
- '@nuxtjs/color-mode': 3.5.2(magicast@0.5.2)
- '@standard-schema/spec': 1.1.0
- '@tailwindcss/postcss': 4.1.18
- '@tailwindcss/vite': 4.1.18(vite@7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2))
- '@tanstack/vue-table': 8.21.3(vue@3.5.28(typescript@5.9.3))
- '@unhead/vue': 2.1.4(vue@3.5.28(typescript@5.9.3))
- '@vueuse/core': 13.9.0(vue@3.5.28(typescript@5.9.3))
- '@vueuse/integrations': 13.9.0(axios@1.13.5)(change-case@5.4.4)(fuse.js@7.1.0)(jwt-decode@4.0.0)(vue@3.5.28(typescript@5.9.3))
- colortranslator: 5.0.0
+ '@nuxt/kit': 4.4.2(magicast@0.5.2)
+ '@rollup/plugin-replace': 6.0.3(rollup@4.60.2)
+ '@vitejs/plugin-vue': 6.0.6(rolldown-vite@7.3.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))
+ '@vitejs/plugin-vue-jsx': 5.1.5(rolldown-vite@7.3.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))
+ autoprefixer: 10.5.0(postcss@8.5.10)
consola: 3.4.2
- defu: 6.1.4
- embla-carousel-auto-height: 8.6.0(embla-carousel@8.6.0)
- embla-carousel-auto-scroll: 8.6.0(embla-carousel@8.6.0)
- embla-carousel-autoplay: 8.6.0(embla-carousel@8.6.0)
- embla-carousel-class-names: 8.6.0(embla-carousel@8.6.0)
- embla-carousel-fade: 8.6.0(embla-carousel@8.6.0)
- embla-carousel-vue: 8.6.0(vue@3.5.28(typescript@5.9.3))
- embla-carousel-wheel-gestures: 8.1.0(embla-carousel@8.6.0)
- fuse.js: 7.1.0
- hookable: 5.5.3
+ cssnano: 7.1.7(postcss@8.5.10)
+ defu: 6.1.7
+ escape-string-regexp: 5.0.0
+ exsolve: 1.0.8
+ get-port-please: 3.2.0
+ jiti: 2.6.1
knitwork: 1.3.0
magic-string: 0.30.21
- mlly: 1.8.0
- ohash: 2.0.11
+ mlly: 1.8.2
+ mocked-exports: 0.1.1
+ nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3)
+ nypm: 0.6.5
pathe: 2.0.3
- reka-ui: 2.6.0(typescript@5.9.3)(vue@3.5.28(typescript@5.9.3))
- scule: 1.3.0
- tailwind-merge: 3.4.0
- tailwind-variants: 3.2.2(tailwind-merge@3.4.0)(tailwindcss@4.1.18)
- tailwindcss: 4.1.18
- tinyglobby: 0.2.15
- typescript: 5.9.3
- unplugin: 2.3.11
- unplugin-auto-import: 20.3.0(@nuxt/kit@4.3.1(magicast@0.5.2))(@vueuse/core@13.9.0(vue@3.5.28(typescript@5.9.3)))
- unplugin-vue-components: 30.0.0(@babel/parser@7.29.0)(@nuxt/kit@4.3.1(magicast@0.5.2))(vue@3.5.28(typescript@5.9.3))
- vaul-vue: 0.4.1(reka-ui@2.6.0(typescript@5.9.3)(vue@3.5.28(typescript@5.9.3)))(vue@3.5.28(typescript@5.9.3))
- vue-component-type-helpers: 3.2.4
+ pkg-types: 2.3.0
+ postcss: 8.5.10
+ seroval: 1.5.2
+ std-env: 4.1.0
+ ufo: 1.6.3
+ unenv: 2.0.0-rc.24
+ vite: rolldown-vite@7.3.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(terser@5.46.2)(yaml@2.8.3)
+ vite-node: 5.3.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(terser@5.46.2)(yaml@2.8.3)
+ vite-plugin-checker: 0.12.0(eslint@9.28.0(jiti@2.6.1))(optionator@0.9.4)(rolldown-vite@7.3.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(terser@5.46.2)(yaml@2.8.3))(typescript@6.0.3)(vue-tsc@3.2.7(typescript@6.0.3))
+ vue: 3.5.33(typescript@6.0.3)
+ vue-bundle-renderer: 2.2.0
optionalDependencies:
- valibot: 1.2.0(typescript@5.9.3)
- vue-router: 4.6.4(vue@3.5.28(typescript@5.9.3))
- zod: 4.3.6
- transitivePeerDependencies:
- - '@azure/app-configuration'
- - '@azure/cosmos'
- - '@azure/data-tables'
- - '@azure/identity'
- - '@azure/keyvault-secrets'
- - '@azure/storage-blob'
- - '@babel/parser'
- - '@capacitor/preferences'
- - '@deno/kv'
- - '@netlify/blobs'
- - '@planetscale/database'
- - '@upstash/redis'
- - '@vercel/blob'
- - '@vercel/functions'
- - '@vercel/kv'
- - '@vue/composition-api'
- - async-validator
- - aws4fetch
- - axios
- - change-case
- - db0
- - drauu
- - embla-carousel
- - encoding
- - focus-trap
- - idb-keyval
- - ioredis
- - jwt-decode
- - magicast
- - nprogress
- - qrcode
- - sortablejs
- - supports-color
- - universal-cookie
- - uploadthing
- - vite
- - vue
-
- '@nuxt/vite-builder@4.3.1(@types/node@25.2.2)(eslint@9.28.0(jiti@2.6.1))(lightningcss@1.30.2)(magicast@0.5.2)(nuxt@4.3.1(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@25.2.2)(@vue/compiler-sfc@3.5.28)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(eslint@9.28.0(jiti@2.6.1))(ioredis@5.9.2)(lightningcss@1.30.2)(magicast@0.5.2)(optionator@0.9.4)(rollup@4.57.1)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2))(vue-tsc@3.2.4(typescript@5.9.3))(yaml@2.8.2))(optionator@0.9.4)(rollup@4.57.1)(terser@5.46.0)(typescript@5.9.3)(vue-tsc@3.2.4(typescript@5.9.3))(vue@3.5.28(typescript@5.9.3))(yaml@2.8.2)':
- dependencies:
- '@nuxt/kit': 4.3.1(magicast@0.5.2)
- '@rollup/plugin-replace': 6.0.3(rollup@4.57.1)
- '@vitejs/plugin-vue': 6.0.4(vite@7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2))(vue@3.5.28(typescript@5.9.3))
- '@vitejs/plugin-vue-jsx': 5.1.4(vite@7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2))(vue@3.5.28(typescript@5.9.3))
- autoprefixer: 10.4.24(postcss@8.5.6)
- consola: 3.4.2
- cssnano: 7.1.2(postcss@8.5.6)
- defu: 6.1.4
- esbuild: 0.27.3
- escape-string-regexp: 5.0.0
- exsolve: 1.0.8
- get-port-please: 3.2.0
- jiti: 2.6.1
- knitwork: 1.3.0
- magic-string: 0.30.21
- mlly: 1.8.0
- mocked-exports: 0.1.1
- nuxt: 4.3.1(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@25.2.2)(@vue/compiler-sfc@3.5.28)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(eslint@9.28.0(jiti@2.6.1))(ioredis@5.9.2)(lightningcss@1.30.2)(magicast@0.5.2)(optionator@0.9.4)(rollup@4.57.1)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2))(vue-tsc@3.2.4(typescript@5.9.3))(yaml@2.8.2)
- pathe: 2.0.3
- pkg-types: 2.3.0
- postcss: 8.5.6
- rollup-plugin-visualizer: 6.0.5(rollup@4.57.1)
- seroval: 1.5.0
- std-env: 3.10.0
- ufo: 1.6.3
- unenv: 2.0.0-rc.24
- vite: 7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2)
- vite-node: 5.3.0(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2)
- vite-plugin-checker: 0.12.0(eslint@9.28.0(jiti@2.6.1))(optionator@0.9.4)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2))(vue-tsc@3.2.4(typescript@5.9.3))
- vue: 3.5.28(typescript@5.9.3)
- vue-bundle-renderer: 2.2.0
+ '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0)
+ rolldown: 1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)
+ rollup-plugin-visualizer: 7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2)
transitivePeerDependencies:
- '@biomejs/biome'
+ - '@emnapi/core'
+ - '@emnapi/runtime'
- '@types/node'
+ - esbuild
- eslint
- less
- - lightningcss
- magicast
- meow
- optionator
@@ -8518,7 +9116,7 @@ snapshots:
- vue-tsc
- yaml
- '@nuxtjs/algolia@1.11.2(@vue/server-renderer@3.5.28(vue@3.5.28(typescript@5.9.3)))(magicast@0.5.2)(react@19.2.4)(vue@3.5.28(typescript@5.9.3))':
+ '@nuxtjs/algolia@1.11.2(@vue/server-renderer@3.5.33(vue@3.5.33(typescript@6.0.3)))(magicast@0.5.2)(vue@3.5.33(typescript@6.0.3))':
dependencies:
'@algolia/cache-in-memory': 4.25.3
'@algolia/recommend': 4.25.3
@@ -8532,7 +9130,7 @@ snapshots:
metadata-scraper: 0.2.61
mocked-exports: 0.1.1
storyblok-algolia-indexer: 1.1.0
- vue-instantsearch: 4.23.1(@vue/server-renderer@3.5.28(vue@3.5.28(typescript@5.9.3)))(algoliasearch@4.25.3)(react@19.2.4)(vue@3.5.28(typescript@5.9.3))
+ vue-instantsearch: 4.23.1(@vue/server-renderer@3.5.33(vue@3.5.33(typescript@6.0.3)))(algoliasearch@4.25.3)(vue@3.5.33(typescript@6.0.3))
transitivePeerDependencies:
- '@vue/server-renderer'
- debug
@@ -8543,7 +9141,7 @@ snapshots:
'@nuxtjs/color-mode@3.5.2(magicast@0.5.2)':
dependencies:
- '@nuxt/kit': 3.21.1(magicast@0.5.2)
+ '@nuxt/kit': 3.21.2(magicast@0.5.2)
pathe: 1.1.2
pkg-types: 1.3.1
semver: 7.7.4
@@ -8560,19 +9158,20 @@ snapshots:
transitivePeerDependencies:
- magicast
- '@nuxtjs/mdc@0.20.1(magicast@0.5.2)':
+ '@nuxtjs/mdc@0.21.1(magicast@0.5.2)':
dependencies:
- '@nuxt/kit': 4.3.1(magicast@0.5.2)
- '@shikijs/core': 3.22.0
- '@shikijs/langs': 3.22.0
- '@shikijs/themes': 3.22.0
- '@shikijs/transformers': 3.22.0
+ '@nuxt/kit': 4.4.2(magicast@0.5.2)
+ '@shikijs/core': 4.0.2
+ '@shikijs/engine-javascript': 4.0.2
+ '@shikijs/langs': 4.0.2
+ '@shikijs/themes': 4.0.2
+ '@shikijs/transformers': 4.0.2
'@types/hast': 3.0.4
'@types/mdast': 4.0.4
- '@vue/compiler-core': 3.5.28
+ '@vue/compiler-core': 3.5.33
consola: 3.4.2
- debug: 4.4.1
- defu: 6.1.4
+ debug: 4.4.3
+ defu: 6.1.7
destr: 2.0.5
detab: 3.0.2
github-slugger: 2.0.0
@@ -8581,7 +9180,7 @@ snapshots:
hast-util-to-string: 3.0.1
mdast-util-to-hast: 13.2.1
micromark-util-sanitize-uri: 2.0.1
- parse5: 8.0.0
+ parse5: 8.0.1
pathe: 2.0.3
property-information: 7.1.0
rehype-external-links: 3.0.0
@@ -8598,7 +9197,7 @@ snapshots:
remark-rehype: 11.1.2
remark-stringify: 11.0.0
scule: 1.3.0
- shiki: 3.22.0
+ shiki: 4.0.2
ufo: 1.6.3
unified: 11.0.5
unist-builder: 4.0.0
@@ -8609,37 +9208,39 @@ snapshots:
- magicast
- supports-color
- '@nuxtjs/robots@5.7.0(magicast@0.5.2)(vite@7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2))(vue@3.5.28(typescript@5.9.3))(zod@4.3.6)':
+ '@nuxtjs/robots@6.0.8(@nuxt/schema@4.4.2)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3))(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))(zod@4.3.6)':
dependencies:
'@fingerprintjs/botd': 2.0.0
- '@nuxt/devtools-kit': 3.1.1(magicast@0.5.2)(vite@7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2))
- '@nuxt/kit': 4.3.1(magicast@0.5.2)
+ '@nuxt/kit': 4.4.2(magicast@0.5.2)
consola: 3.4.2
- defu: 6.1.4
- h3: 1.15.5
- nuxt-site-config: 3.2.19(magicast@0.5.2)(vite@7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2))(vue@3.5.28(typescript@5.9.3))
+ defu: 6.1.7
+ h3: 1.15.11
+ nuxt-site-config: 4.0.8(@nuxt/schema@4.4.2)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3))(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))(zod@4.3.6)
+ nuxtseo-shared: 5.1.3(1ea63fa9df7940a4f1f1de81ecc8f7ac)
pathe: 2.0.3
pkg-types: 2.3.0
- sirv: 3.0.2
- std-env: 3.10.0
ufo: 1.6.3
optionalDependencies:
zod: 4.3.6
transitivePeerDependencies:
+ - '@nuxt/schema'
- magicast
+ - nuxt
- vite
- vue
- '@nuxtjs/seo@3.4.0(@netlify/blobs@9.1.2)(@unhead/vue@2.1.4(vue@3.5.28(typescript@5.9.3)))(db0@0.3.4(better-sqlite3@11.10.0))(ioredis@5.9.2)(magicast@0.5.2)(rollup@4.57.1)(unhead@2.1.4)(unstorage@1.17.4(@netlify/blobs@9.1.2)(db0@0.3.4(better-sqlite3@11.10.0))(ioredis@5.9.2))(vite@7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2))(vue@3.5.28(typescript@5.9.3))(zod@4.3.6)':
- dependencies:
- '@nuxt/kit': 4.3.1(magicast@0.5.2)
- '@nuxtjs/robots': 5.7.0(magicast@0.5.2)(vite@7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2))(vue@3.5.28(typescript@5.9.3))(zod@4.3.6)
- '@nuxtjs/sitemap': 7.6.0(magicast@0.5.2)(vite@7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2))(vue@3.5.28(typescript@5.9.3))(zod@4.3.6)
- nuxt-link-checker: 4.3.9(@netlify/blobs@9.1.2)(db0@0.3.4(better-sqlite3@11.10.0))(ioredis@5.9.2)(magicast@0.5.2)(vite@7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2))(vue@3.5.28(typescript@5.9.3))
- nuxt-og-image: 5.1.13(@unhead/vue@2.1.4(vue@3.5.28(typescript@5.9.3)))(magicast@0.5.2)(unstorage@1.17.4(@netlify/blobs@9.1.2)(db0@0.3.4(better-sqlite3@11.10.0))(ioredis@5.9.2))(vite@7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2))(vue@3.5.28(typescript@5.9.3))
- nuxt-schema-org: 5.0.10(@unhead/vue@2.1.4(vue@3.5.28(typescript@5.9.3)))(magicast@0.5.2)(unhead@2.1.4)(vite@7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2))(vue@3.5.28(typescript@5.9.3))(zod@4.3.6)
- nuxt-seo-utils: 7.0.19(magicast@0.5.2)(rollup@4.57.1)(unhead@2.1.4)(vite@7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2))(vue@3.5.28(typescript@5.9.3))
- nuxt-site-config: 3.2.19(magicast@0.5.2)(vite@7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2))(vue@3.5.28(typescript@5.9.3))
+ '@nuxtjs/seo@5.1.3(6c26335a1a794c77cd272700d66c77ac)':
+ dependencies:
+ '@nuxt/kit': 4.4.2(magicast@0.5.2)
+ '@nuxtjs/robots': 6.0.8(@nuxt/schema@4.4.2)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3))(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))(zod@4.3.6)
+ '@nuxtjs/sitemap': 8.0.13(@nuxt/schema@4.4.2)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3))(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))(zod@4.3.6)
+ nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3)
+ nuxt-link-checker: 5.0.9(400458dca2fcb8943a98fc83f55aa892)
+ nuxt-og-image: 6.4.7(5faa756313c8245d53c4b9eebf79d3a4)
+ nuxt-schema-org: 6.0.4(6340a28e464382c8e848f01660f1c1b0)
+ nuxt-seo-utils: 8.1.11(cf66a2112ebe23c18ee2f687859fb007)
+ nuxt-site-config: 4.0.8(@nuxt/schema@4.4.2)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3))(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))(zod@4.3.6)
+ nuxtseo-shared: 5.1.3(1ea63fa9df7940a4f1f1de81ecc8f7ac)
transitivePeerDependencies:
- '@azure/app-configuration'
- '@azure/cosmos'
@@ -8649,8 +9250,18 @@ snapshots:
- '@azure/storage-blob'
- '@capacitor/preferences'
- '@deno/kv'
+ - '@emotion/is-prop-valid'
+ - '@inertiajs/vue3'
- '@netlify/blobs'
+ - '@nuxt/content'
+ - '@nuxt/schema'
- '@planetscale/database'
+ - '@resvg/resvg-js'
+ - '@resvg/resvg-wasm'
+ - '@takumi-rs/core'
+ - '@takumi-rs/wasm'
+ - '@tiptap/extensions'
+ - '@tiptap/y-tiptap'
- '@unhead/react'
- '@unhead/solid-js'
- '@unhead/svelte'
@@ -8659,308 +9270,485 @@ snapshots:
- '@vercel/blob'
- '@vercel/functions'
- '@vercel/kv'
+ - '@vue/composition-api'
+ - async-validator
- aws4fetch
+ - axios
+ - bufferutil
+ - change-case
- db0
+ - drauu
+ - embla-carousel
+ - esbuild
+ - focus-trap
+ - fontless
- idb-keyval
- ioredis
+ - joi
+ - jwt-decode
+ - lightningcss
- magicast
- - rollup
+ - nprogress
+ - playwright-core
+ - qrcode
+ - react
+ - react-dom
+ - rolldown
+ - satori
+ - sharp
+ - sortablejs
+ - superstruct
- supports-color
+ - tailwindcss
+ - typescript
- unhead
+ - unifont
+ - universal-cookie
- unstorage
- uploadthing
+ - utf-8-validate
+ - valibot
- vite
- vue
+ - vue-router
+ - yjs
+ - yup
- zod
- '@nuxtjs/sitemap@7.6.0(magicast@0.5.2)(vite@7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2))(vue@3.5.28(typescript@5.9.3))(zod@4.3.6)':
+ '@nuxtjs/sitemap@8.0.13(@nuxt/schema@4.4.2)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3))(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))(zod@4.3.6)':
dependencies:
- '@nuxt/devtools-kit': 3.1.1(magicast@0.5.2)(vite@7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2))
- '@nuxt/kit': 4.3.1(magicast@0.5.2)
- chalk: 5.6.2
- defu: 6.1.4
- fast-xml-parser: 5.3.5
- nuxt-site-config: 3.2.19(magicast@0.5.2)(vite@7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2))(vue@3.5.28(typescript@5.9.3))
+ '@nuxt/kit': 4.4.2(magicast@0.5.2)
+ consola: 3.4.2
+ defu: 6.1.7
+ fast-xml-parser: 5.7.1
+ nuxt-site-config: 4.0.8(@nuxt/schema@4.4.2)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3))(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))(zod@4.3.6)
+ nuxtseo-shared: 5.1.3(1ea63fa9df7940a4f1f1de81ecc8f7ac)
ofetch: 1.5.1
pathe: 2.0.3
pkg-types: 2.3.0
radix3: 1.1.2
- semver: 7.7.4
- sirv: 3.0.2
- std-env: 3.10.0
ufo: 1.6.3
ultrahtml: 1.6.0
optionalDependencies:
zod: 4.3.6
transitivePeerDependencies:
+ - '@nuxt/schema'
- magicast
+ - nuxt
- vite
- vue
'@opentelemetry/api-logs@0.208.0':
dependencies:
- '@opentelemetry/api': 1.9.0
+ '@opentelemetry/api': 1.9.1
- '@opentelemetry/api@1.9.0': {}
+ '@opentelemetry/api@1.9.1': {}
- '@opentelemetry/core@2.2.0(@opentelemetry/api@1.9.0)':
+ '@opentelemetry/core@2.2.0(@opentelemetry/api@1.9.1)':
dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/semantic-conventions': 1.39.0
+ '@opentelemetry/api': 1.9.1
+ '@opentelemetry/semantic-conventions': 1.40.0
- '@opentelemetry/core@2.5.0(@opentelemetry/api@1.9.0)':
+ '@opentelemetry/core@2.7.0(@opentelemetry/api@1.9.1)':
dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/semantic-conventions': 1.39.0
+ '@opentelemetry/api': 1.9.1
+ '@opentelemetry/semantic-conventions': 1.40.0
- '@opentelemetry/exporter-logs-otlp-http@0.208.0(@opentelemetry/api@1.9.0)':
+ '@opentelemetry/exporter-logs-otlp-http@0.208.0(@opentelemetry/api@1.9.1)':
dependencies:
- '@opentelemetry/api': 1.9.0
+ '@opentelemetry/api': 1.9.1
'@opentelemetry/api-logs': 0.208.0
- '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/otlp-exporter-base': 0.208.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/otlp-transformer': 0.208.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/sdk-logs': 0.208.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.1)
+ '@opentelemetry/otlp-exporter-base': 0.208.0(@opentelemetry/api@1.9.1)
+ '@opentelemetry/otlp-transformer': 0.208.0(@opentelemetry/api@1.9.1)
+ '@opentelemetry/sdk-logs': 0.208.0(@opentelemetry/api@1.9.1)
- '@opentelemetry/otlp-exporter-base@0.208.0(@opentelemetry/api@1.9.0)':
+ '@opentelemetry/otlp-exporter-base@0.208.0(@opentelemetry/api@1.9.1)':
dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/otlp-transformer': 0.208.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/api': 1.9.1
+ '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.1)
+ '@opentelemetry/otlp-transformer': 0.208.0(@opentelemetry/api@1.9.1)
- '@opentelemetry/otlp-transformer@0.208.0(@opentelemetry/api@1.9.0)':
+ '@opentelemetry/otlp-transformer@0.208.0(@opentelemetry/api@1.9.1)':
dependencies:
- '@opentelemetry/api': 1.9.0
+ '@opentelemetry/api': 1.9.1
'@opentelemetry/api-logs': 0.208.0
- '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/resources': 2.2.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/sdk-logs': 0.208.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/sdk-metrics': 2.2.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/sdk-trace-base': 2.2.0(@opentelemetry/api@1.9.0)
- protobufjs: 7.5.4
+ '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.1)
+ '@opentelemetry/resources': 2.2.0(@opentelemetry/api@1.9.1)
+ '@opentelemetry/sdk-logs': 0.208.0(@opentelemetry/api@1.9.1)
+ '@opentelemetry/sdk-metrics': 2.2.0(@opentelemetry/api@1.9.1)
+ '@opentelemetry/sdk-trace-base': 2.2.0(@opentelemetry/api@1.9.1)
+ protobufjs: 7.5.5
- '@opentelemetry/resources@2.2.0(@opentelemetry/api@1.9.0)':
+ '@opentelemetry/resources@2.2.0(@opentelemetry/api@1.9.1)':
dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/semantic-conventions': 1.39.0
+ '@opentelemetry/api': 1.9.1
+ '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.1)
+ '@opentelemetry/semantic-conventions': 1.40.0
- '@opentelemetry/resources@2.5.0(@opentelemetry/api@1.9.0)':
+ '@opentelemetry/resources@2.7.0(@opentelemetry/api@1.9.1)':
dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/core': 2.5.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/semantic-conventions': 1.39.0
+ '@opentelemetry/api': 1.9.1
+ '@opentelemetry/core': 2.7.0(@opentelemetry/api@1.9.1)
+ '@opentelemetry/semantic-conventions': 1.40.0
- '@opentelemetry/sdk-logs@0.208.0(@opentelemetry/api@1.9.0)':
+ '@opentelemetry/sdk-logs@0.208.0(@opentelemetry/api@1.9.1)':
dependencies:
- '@opentelemetry/api': 1.9.0
+ '@opentelemetry/api': 1.9.1
'@opentelemetry/api-logs': 0.208.0
- '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/resources': 2.2.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.1)
+ '@opentelemetry/resources': 2.2.0(@opentelemetry/api@1.9.1)
- '@opentelemetry/sdk-metrics@2.2.0(@opentelemetry/api@1.9.0)':
+ '@opentelemetry/sdk-metrics@2.2.0(@opentelemetry/api@1.9.1)':
dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/resources': 2.2.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/api': 1.9.1
+ '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.1)
+ '@opentelemetry/resources': 2.2.0(@opentelemetry/api@1.9.1)
- '@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0)':
+ '@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.1)':
dependencies:
- '@opentelemetry/api': 1.9.0
- '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/resources': 2.2.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/semantic-conventions': 1.39.0
+ '@opentelemetry/api': 1.9.1
+ '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.1)
+ '@opentelemetry/resources': 2.2.0(@opentelemetry/api@1.9.1)
+ '@opentelemetry/semantic-conventions': 1.40.0
- '@opentelemetry/semantic-conventions@1.39.0': {}
+ '@opentelemetry/semantic-conventions@1.40.0': {}
- '@oxc-minify/binding-android-arm-eabi@0.112.0':
+ '@oxc-minify/binding-android-arm-eabi@0.117.0':
optional: true
- '@oxc-minify/binding-android-arm64@0.112.0':
+ '@oxc-minify/binding-android-arm64@0.117.0':
optional: true
- '@oxc-minify/binding-darwin-arm64@0.112.0':
+ '@oxc-minify/binding-darwin-arm64@0.117.0':
optional: true
- '@oxc-minify/binding-darwin-x64@0.112.0':
+ '@oxc-minify/binding-darwin-x64@0.117.0':
optional: true
- '@oxc-minify/binding-freebsd-x64@0.112.0':
+ '@oxc-minify/binding-freebsd-x64@0.117.0':
optional: true
- '@oxc-minify/binding-linux-arm-gnueabihf@0.112.0':
+ '@oxc-minify/binding-linux-arm-gnueabihf@0.117.0':
optional: true
- '@oxc-minify/binding-linux-arm-musleabihf@0.112.0':
+ '@oxc-minify/binding-linux-arm-musleabihf@0.117.0':
optional: true
- '@oxc-minify/binding-linux-arm64-gnu@0.112.0':
+ '@oxc-minify/binding-linux-arm64-gnu@0.117.0':
optional: true
- '@oxc-minify/binding-linux-arm64-musl@0.112.0':
+ '@oxc-minify/binding-linux-arm64-musl@0.117.0':
optional: true
- '@oxc-minify/binding-linux-ppc64-gnu@0.112.0':
+ '@oxc-minify/binding-linux-ppc64-gnu@0.117.0':
optional: true
- '@oxc-minify/binding-linux-riscv64-gnu@0.112.0':
+ '@oxc-minify/binding-linux-riscv64-gnu@0.117.0':
optional: true
- '@oxc-minify/binding-linux-riscv64-musl@0.112.0':
+ '@oxc-minify/binding-linux-riscv64-musl@0.117.0':
optional: true
- '@oxc-minify/binding-linux-s390x-gnu@0.112.0':
+ '@oxc-minify/binding-linux-s390x-gnu@0.117.0':
optional: true
- '@oxc-minify/binding-linux-x64-gnu@0.112.0':
+ '@oxc-minify/binding-linux-x64-gnu@0.117.0':
optional: true
- '@oxc-minify/binding-linux-x64-musl@0.112.0':
+ '@oxc-minify/binding-linux-x64-musl@0.117.0':
optional: true
- '@oxc-minify/binding-openharmony-arm64@0.112.0':
+ '@oxc-minify/binding-openharmony-arm64@0.117.0':
optional: true
- '@oxc-minify/binding-wasm32-wasi@0.112.0':
+ '@oxc-minify/binding-wasm32-wasi@0.117.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)':
dependencies:
- '@napi-rs/wasm-runtime': 1.1.1
+ '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)
+ transitivePeerDependencies:
+ - '@emnapi/core'
+ - '@emnapi/runtime'
optional: true
- '@oxc-minify/binding-win32-arm64-msvc@0.112.0':
+ '@oxc-minify/binding-win32-arm64-msvc@0.117.0':
optional: true
- '@oxc-minify/binding-win32-ia32-msvc@0.112.0':
+ '@oxc-minify/binding-win32-ia32-msvc@0.117.0':
optional: true
- '@oxc-minify/binding-win32-x64-msvc@0.112.0':
+ '@oxc-minify/binding-win32-x64-msvc@0.117.0':
optional: true
- '@oxc-parser/binding-android-arm-eabi@0.112.0':
+ '@oxc-parser/binding-android-arm-eabi@0.117.0':
optional: true
- '@oxc-parser/binding-android-arm64@0.112.0':
+ '@oxc-parser/binding-android-arm-eabi@0.126.0':
optional: true
- '@oxc-parser/binding-darwin-arm64@0.112.0':
+ '@oxc-parser/binding-android-arm-eabi@0.127.0':
optional: true
- '@oxc-parser/binding-darwin-x64@0.112.0':
+ '@oxc-parser/binding-android-arm64@0.117.0':
optional: true
- '@oxc-parser/binding-freebsd-x64@0.112.0':
+ '@oxc-parser/binding-android-arm64@0.126.0':
optional: true
- '@oxc-parser/binding-linux-arm-gnueabihf@0.112.0':
+ '@oxc-parser/binding-android-arm64@0.127.0':
optional: true
- '@oxc-parser/binding-linux-arm-musleabihf@0.112.0':
+ '@oxc-parser/binding-darwin-arm64@0.117.0':
optional: true
- '@oxc-parser/binding-linux-arm64-gnu@0.112.0':
+ '@oxc-parser/binding-darwin-arm64@0.126.0':
optional: true
- '@oxc-parser/binding-linux-arm64-musl@0.112.0':
+ '@oxc-parser/binding-darwin-arm64@0.127.0':
optional: true
- '@oxc-parser/binding-linux-ppc64-gnu@0.112.0':
+ '@oxc-parser/binding-darwin-x64@0.117.0':
optional: true
- '@oxc-parser/binding-linux-riscv64-gnu@0.112.0':
+ '@oxc-parser/binding-darwin-x64@0.126.0':
optional: true
- '@oxc-parser/binding-linux-riscv64-musl@0.112.0':
+ '@oxc-parser/binding-darwin-x64@0.127.0':
optional: true
- '@oxc-parser/binding-linux-s390x-gnu@0.112.0':
+ '@oxc-parser/binding-freebsd-x64@0.117.0':
optional: true
- '@oxc-parser/binding-linux-x64-gnu@0.112.0':
+ '@oxc-parser/binding-freebsd-x64@0.126.0':
optional: true
- '@oxc-parser/binding-linux-x64-musl@0.112.0':
+ '@oxc-parser/binding-freebsd-x64@0.127.0':
optional: true
- '@oxc-parser/binding-openharmony-arm64@0.112.0':
+ '@oxc-parser/binding-linux-arm-gnueabihf@0.117.0':
optional: true
- '@oxc-parser/binding-wasm32-wasi@0.112.0':
+ '@oxc-parser/binding-linux-arm-gnueabihf@0.126.0':
+ optional: true
+
+ '@oxc-parser/binding-linux-arm-gnueabihf@0.127.0':
+ optional: true
+
+ '@oxc-parser/binding-linux-arm-musleabihf@0.117.0':
+ optional: true
+
+ '@oxc-parser/binding-linux-arm-musleabihf@0.126.0':
+ optional: true
+
+ '@oxc-parser/binding-linux-arm-musleabihf@0.127.0':
+ optional: true
+
+ '@oxc-parser/binding-linux-arm64-gnu@0.117.0':
+ optional: true
+
+ '@oxc-parser/binding-linux-arm64-gnu@0.126.0':
+ optional: true
+
+ '@oxc-parser/binding-linux-arm64-gnu@0.127.0':
+ optional: true
+
+ '@oxc-parser/binding-linux-arm64-musl@0.117.0':
+ optional: true
+
+ '@oxc-parser/binding-linux-arm64-musl@0.126.0':
+ optional: true
+
+ '@oxc-parser/binding-linux-arm64-musl@0.127.0':
+ optional: true
+
+ '@oxc-parser/binding-linux-ppc64-gnu@0.117.0':
+ optional: true
+
+ '@oxc-parser/binding-linux-ppc64-gnu@0.126.0':
+ optional: true
+
+ '@oxc-parser/binding-linux-ppc64-gnu@0.127.0':
+ optional: true
+
+ '@oxc-parser/binding-linux-riscv64-gnu@0.117.0':
+ optional: true
+
+ '@oxc-parser/binding-linux-riscv64-gnu@0.126.0':
+ optional: true
+
+ '@oxc-parser/binding-linux-riscv64-gnu@0.127.0':
+ optional: true
+
+ '@oxc-parser/binding-linux-riscv64-musl@0.117.0':
+ optional: true
+
+ '@oxc-parser/binding-linux-riscv64-musl@0.126.0':
+ optional: true
+
+ '@oxc-parser/binding-linux-riscv64-musl@0.127.0':
+ optional: true
+
+ '@oxc-parser/binding-linux-s390x-gnu@0.117.0':
+ optional: true
+
+ '@oxc-parser/binding-linux-s390x-gnu@0.126.0':
+ optional: true
+
+ '@oxc-parser/binding-linux-s390x-gnu@0.127.0':
+ optional: true
+
+ '@oxc-parser/binding-linux-x64-gnu@0.117.0':
+ optional: true
+
+ '@oxc-parser/binding-linux-x64-gnu@0.126.0':
+ optional: true
+
+ '@oxc-parser/binding-linux-x64-gnu@0.127.0':
+ optional: true
+
+ '@oxc-parser/binding-linux-x64-musl@0.117.0':
+ optional: true
+
+ '@oxc-parser/binding-linux-x64-musl@0.126.0':
+ optional: true
+
+ '@oxc-parser/binding-linux-x64-musl@0.127.0':
+ optional: true
+
+ '@oxc-parser/binding-openharmony-arm64@0.117.0':
+ optional: true
+
+ '@oxc-parser/binding-openharmony-arm64@0.126.0':
+ optional: true
+
+ '@oxc-parser/binding-openharmony-arm64@0.127.0':
+ optional: true
+
+ '@oxc-parser/binding-wasm32-wasi@0.117.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)':
dependencies:
- '@napi-rs/wasm-runtime': 1.1.1
+ '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)
+ transitivePeerDependencies:
+ - '@emnapi/core'
+ - '@emnapi/runtime'
+ optional: true
+
+ '@oxc-parser/binding-wasm32-wasi@0.126.0':
+ dependencies:
+ '@emnapi/core': 1.9.2
+ '@emnapi/runtime': 1.9.2
+ '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)
+ optional: true
+
+ '@oxc-parser/binding-wasm32-wasi@0.127.0':
+ dependencies:
+ '@emnapi/core': 1.9.2
+ '@emnapi/runtime': 1.9.2
+ '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)
+ optional: true
+
+ '@oxc-parser/binding-win32-arm64-msvc@0.117.0':
optional: true
- '@oxc-parser/binding-win32-arm64-msvc@0.112.0':
+ '@oxc-parser/binding-win32-arm64-msvc@0.126.0':
optional: true
- '@oxc-parser/binding-win32-ia32-msvc@0.112.0':
+ '@oxc-parser/binding-win32-arm64-msvc@0.127.0':
optional: true
- '@oxc-parser/binding-win32-x64-msvc@0.112.0':
+ '@oxc-parser/binding-win32-ia32-msvc@0.117.0':
optional: true
- '@oxc-project/types@0.112.0': {}
+ '@oxc-parser/binding-win32-ia32-msvc@0.126.0':
+ optional: true
- '@oxc-transform/binding-android-arm-eabi@0.112.0':
+ '@oxc-parser/binding-win32-ia32-msvc@0.127.0':
optional: true
- '@oxc-transform/binding-android-arm64@0.112.0':
+ '@oxc-parser/binding-win32-x64-msvc@0.117.0':
optional: true
- '@oxc-transform/binding-darwin-arm64@0.112.0':
+ '@oxc-parser/binding-win32-x64-msvc@0.126.0':
optional: true
- '@oxc-transform/binding-darwin-x64@0.112.0':
+ '@oxc-parser/binding-win32-x64-msvc@0.127.0':
+ optional: true
+
+ '@oxc-project/runtime@0.101.0': {}
+
+ '@oxc-project/types@0.101.0': {}
+
+ '@oxc-project/types@0.117.0': {}
+
+ '@oxc-project/types@0.126.0': {}
+
+ '@oxc-project/types@0.127.0': {}
+
+ '@oxc-transform/binding-android-arm-eabi@0.117.0':
optional: true
- '@oxc-transform/binding-freebsd-x64@0.112.0':
+ '@oxc-transform/binding-android-arm64@0.117.0':
optional: true
- '@oxc-transform/binding-linux-arm-gnueabihf@0.112.0':
+ '@oxc-transform/binding-darwin-arm64@0.117.0':
optional: true
- '@oxc-transform/binding-linux-arm-musleabihf@0.112.0':
+ '@oxc-transform/binding-darwin-x64@0.117.0':
optional: true
- '@oxc-transform/binding-linux-arm64-gnu@0.112.0':
+ '@oxc-transform/binding-freebsd-x64@0.117.0':
optional: true
- '@oxc-transform/binding-linux-arm64-musl@0.112.0':
+ '@oxc-transform/binding-linux-arm-gnueabihf@0.117.0':
optional: true
- '@oxc-transform/binding-linux-ppc64-gnu@0.112.0':
+ '@oxc-transform/binding-linux-arm-musleabihf@0.117.0':
optional: true
- '@oxc-transform/binding-linux-riscv64-gnu@0.112.0':
+ '@oxc-transform/binding-linux-arm64-gnu@0.117.0':
optional: true
- '@oxc-transform/binding-linux-riscv64-musl@0.112.0':
+ '@oxc-transform/binding-linux-arm64-musl@0.117.0':
optional: true
- '@oxc-transform/binding-linux-s390x-gnu@0.112.0':
+ '@oxc-transform/binding-linux-ppc64-gnu@0.117.0':
optional: true
- '@oxc-transform/binding-linux-x64-gnu@0.112.0':
+ '@oxc-transform/binding-linux-riscv64-gnu@0.117.0':
optional: true
- '@oxc-transform/binding-linux-x64-musl@0.112.0':
+ '@oxc-transform/binding-linux-riscv64-musl@0.117.0':
optional: true
- '@oxc-transform/binding-openharmony-arm64@0.112.0':
+ '@oxc-transform/binding-linux-s390x-gnu@0.117.0':
optional: true
- '@oxc-transform/binding-wasm32-wasi@0.112.0':
+ '@oxc-transform/binding-linux-x64-gnu@0.117.0':
+ optional: true
+
+ '@oxc-transform/binding-linux-x64-musl@0.117.0':
+ optional: true
+
+ '@oxc-transform/binding-openharmony-arm64@0.117.0':
+ optional: true
+
+ '@oxc-transform/binding-wasm32-wasi@0.117.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)':
dependencies:
- '@napi-rs/wasm-runtime': 1.1.1
+ '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)
+ transitivePeerDependencies:
+ - '@emnapi/core'
+ - '@emnapi/runtime'
optional: true
- '@oxc-transform/binding-win32-arm64-msvc@0.112.0':
+ '@oxc-transform/binding-win32-arm64-msvc@0.117.0':
optional: true
- '@oxc-transform/binding-win32-ia32-msvc@0.112.0':
+ '@oxc-transform/binding-win32-ia32-msvc@0.117.0':
optional: true
- '@oxc-transform/binding-win32-x64-msvc@0.112.0':
+ '@oxc-transform/binding-win32-x64-msvc@0.117.0':
optional: true
+ '@package-json/types@0.0.12': {}
+
'@parcel/watcher-android-arm64@2.5.6':
optional: true
@@ -8994,7 +9782,7 @@ snapshots:
'@parcel/watcher-wasm@2.5.6':
dependencies:
is-glob: 4.0.3
- picomatch: 4.0.3
+ picomatch: 4.0.4
'@parcel/watcher-win32-arm64@2.5.6':
optional: true
@@ -9010,7 +9798,7 @@ snapshots:
detect-libc: 2.1.2
is-glob: 4.0.3
node-addon-api: 7.1.1
- picomatch: 4.0.3
+ picomatch: 4.0.4
optionalDependencies:
'@parcel/watcher-android-arm64': 2.5.6
'@parcel/watcher-darwin-arm64': 2.5.6
@@ -9035,7 +9823,7 @@ snapshots:
dependencies:
kleur: 4.1.5
- '@poppinss/dumper@0.6.5':
+ '@poppinss/dumper@0.7.0':
dependencies:
'@poppinss/colors': 4.1.6
'@sindresorhus/is': 7.2.0
@@ -9043,11 +9831,11 @@ snapshots:
'@poppinss/exception@1.2.3': {}
- '@posthog/core@1.21.0':
+ '@posthog/core@1.27.1':
dependencies:
- cross-spawn: 7.0.6
+ '@posthog/types': 1.371.2
- '@posthog/types@1.345.0': {}
+ '@posthog/types@1.371.2': {}
'@protobufjs/aspromise@1.1.2': {}
@@ -9122,319 +9910,639 @@ snapshots:
'@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
+ optional: true
+
+ '@resvg/resvg-wasm@2.6.2':
+ optional: true
+
+ '@rolldown/binding-android-arm64@1.0.0-beta.53':
+ optional: true
+
+ '@rolldown/binding-darwin-arm64@1.0.0-beta.53':
+ optional: true
+
+ '@rolldown/binding-darwin-x64@1.0.0-beta.53':
+ optional: true
+
+ '@rolldown/binding-freebsd-x64@1.0.0-beta.53':
+ optional: true
- '@resvg/resvg-wasm@2.6.2': {}
+ '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.53':
+ optional: true
- '@rolldown/pluginutils@1.0.0-rc.2': {}
+ '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.53':
+ optional: true
- '@rolldown/pluginutils@1.0.0-rc.3': {}
+ '@rolldown/binding-linux-arm64-musl@1.0.0-beta.53':
+ optional: true
- '@rollup/plugin-alias@6.0.0(rollup@4.57.1)':
+ '@rolldown/binding-linux-x64-gnu@1.0.0-beta.53':
+ optional: true
+
+ '@rolldown/binding-linux-x64-musl@1.0.0-beta.53':
+ optional: true
+
+ '@rolldown/binding-openharmony-arm64@1.0.0-beta.53':
+ optional: true
+
+ '@rolldown/binding-wasm32-wasi@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)':
+ dependencies:
+ '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)
+ transitivePeerDependencies:
+ - '@emnapi/core'
+ - '@emnapi/runtime'
+ optional: true
+
+ '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.53':
+ optional: true
+
+ '@rolldown/binding-win32-x64-msvc@1.0.0-beta.53':
+ optional: true
+
+ '@rolldown/pluginutils@1.0.0-beta.53': {}
+
+ '@rolldown/pluginutils@1.0.0-rc.13': {}
+
+ '@rolldown/pluginutils@1.0.0-rc.17': {}
+
+ '@rollup/plugin-alias@6.0.0(rollup@4.60.2)':
optionalDependencies:
- rollup: 4.57.1
+ rollup: 4.60.2
- '@rollup/plugin-commonjs@29.0.0(rollup@4.57.1)':
+ '@rollup/plugin-commonjs@29.0.2(rollup@4.60.2)':
dependencies:
- '@rollup/pluginutils': 5.3.0(rollup@4.57.1)
+ '@rollup/pluginutils': 5.3.0(rollup@4.60.2)
commondir: 1.0.1
estree-walker: 2.0.2
- fdir: 6.5.0(picomatch@4.0.3)
+ fdir: 6.5.0(picomatch@4.0.4)
is-reference: 1.2.1
magic-string: 0.30.21
- picomatch: 4.0.3
+ picomatch: 4.0.4
optionalDependencies:
- rollup: 4.57.1
+ rollup: 4.60.2
- '@rollup/plugin-inject@5.0.5(rollup@4.57.1)':
+ '@rollup/plugin-inject@5.0.5(rollup@4.60.2)':
dependencies:
- '@rollup/pluginutils': 5.3.0(rollup@4.57.1)
+ '@rollup/pluginutils': 5.3.0(rollup@4.60.2)
estree-walker: 2.0.2
magic-string: 0.30.21
optionalDependencies:
- rollup: 4.57.1
+ rollup: 4.60.2
- '@rollup/plugin-json@6.1.0(rollup@4.57.1)':
+ '@rollup/plugin-json@6.1.0(rollup@4.60.2)':
dependencies:
- '@rollup/pluginutils': 5.3.0(rollup@4.57.1)
+ '@rollup/pluginutils': 5.3.0(rollup@4.60.2)
optionalDependencies:
- rollup: 4.57.1
+ rollup: 4.60.2
- '@rollup/plugin-node-resolve@16.0.3(rollup@4.57.1)':
+ '@rollup/plugin-node-resolve@16.0.3(rollup@4.60.2)':
dependencies:
- '@rollup/pluginutils': 5.3.0(rollup@4.57.1)
+ '@rollup/pluginutils': 5.3.0(rollup@4.60.2)
'@types/resolve': 1.20.2
deepmerge: 4.3.1
is-module: 1.0.0
- resolve: 1.22.11
+ resolve: 1.22.12
optionalDependencies:
- rollup: 4.57.1
+ rollup: 4.60.2
- '@rollup/plugin-replace@6.0.3(rollup@4.57.1)':
+ '@rollup/plugin-replace@6.0.3(rollup@4.60.2)':
dependencies:
- '@rollup/pluginutils': 5.3.0(rollup@4.57.1)
+ '@rollup/pluginutils': 5.3.0(rollup@4.60.2)
magic-string: 0.30.21
optionalDependencies:
- rollup: 4.57.1
+ rollup: 4.60.2
- '@rollup/plugin-terser@0.4.4(rollup@4.57.1)':
+ '@rollup/plugin-terser@1.0.0(rollup@4.60.2)':
dependencies:
- serialize-javascript: 6.0.2
- smob: 1.5.0
- terser: 5.46.0
+ serialize-javascript: 7.0.5
+ smob: 1.6.1
+ terser: 5.46.2
optionalDependencies:
- rollup: 4.57.1
+ rollup: 4.60.2
- '@rollup/pluginutils@5.3.0(rollup@4.57.1)':
+ '@rollup/pluginutils@5.3.0(rollup@4.60.2)':
dependencies:
'@types/estree': 1.0.8
estree-walker: 2.0.2
- picomatch: 4.0.3
+ picomatch: 4.0.4
optionalDependencies:
- rollup: 4.57.1
+ rollup: 4.60.2
- '@rollup/rollup-android-arm-eabi@4.57.1':
+ '@rollup/rollup-android-arm-eabi@4.60.2':
optional: true
- '@rollup/rollup-android-arm64@4.57.1':
+ '@rollup/rollup-android-arm64@4.60.2':
optional: true
- '@rollup/rollup-darwin-arm64@4.57.1':
+ '@rollup/rollup-darwin-arm64@4.60.2':
optional: true
- '@rollup/rollup-darwin-x64@4.57.1':
+ '@rollup/rollup-darwin-x64@4.60.2':
optional: true
- '@rollup/rollup-freebsd-arm64@4.57.1':
+ '@rollup/rollup-freebsd-arm64@4.60.2':
optional: true
- '@rollup/rollup-freebsd-x64@4.57.1':
+ '@rollup/rollup-freebsd-x64@4.60.2':
optional: true
- '@rollup/rollup-linux-arm-gnueabihf@4.57.1':
+ '@rollup/rollup-linux-arm-gnueabihf@4.60.2':
optional: true
- '@rollup/rollup-linux-arm-musleabihf@4.57.1':
+ '@rollup/rollup-linux-arm-musleabihf@4.60.2':
optional: true
- '@rollup/rollup-linux-arm64-gnu@4.57.1':
+ '@rollup/rollup-linux-arm64-gnu@4.60.2':
optional: true
- '@rollup/rollup-linux-arm64-musl@4.57.1':
+ '@rollup/rollup-linux-arm64-musl@4.60.2':
optional: true
- '@rollup/rollup-linux-loong64-gnu@4.57.1':
+ '@rollup/rollup-linux-loong64-gnu@4.60.2':
optional: true
- '@rollup/rollup-linux-loong64-musl@4.57.1':
+ '@rollup/rollup-linux-loong64-musl@4.60.2':
optional: true
- '@rollup/rollup-linux-ppc64-gnu@4.57.1':
+ '@rollup/rollup-linux-ppc64-gnu@4.60.2':
optional: true
- '@rollup/rollup-linux-ppc64-musl@4.57.1':
+ '@rollup/rollup-linux-ppc64-musl@4.60.2':
optional: true
- '@rollup/rollup-linux-riscv64-gnu@4.57.1':
+ '@rollup/rollup-linux-riscv64-gnu@4.60.2':
optional: true
- '@rollup/rollup-linux-riscv64-musl@4.57.1':
+ '@rollup/rollup-linux-riscv64-musl@4.60.2':
optional: true
- '@rollup/rollup-linux-s390x-gnu@4.57.1':
+ '@rollup/rollup-linux-s390x-gnu@4.60.2':
optional: true
- '@rollup/rollup-linux-x64-gnu@4.57.1':
+ '@rollup/rollup-linux-x64-gnu@4.60.2':
optional: true
- '@rollup/rollup-linux-x64-musl@4.57.1':
+ '@rollup/rollup-linux-x64-musl@4.60.2':
optional: true
- '@rollup/rollup-openbsd-x64@4.57.1':
+ '@rollup/rollup-openbsd-x64@4.60.2':
optional: true
- '@rollup/rollup-openharmony-arm64@4.57.1':
+ '@rollup/rollup-openharmony-arm64@4.60.2':
optional: true
- '@rollup/rollup-win32-arm64-msvc@4.57.1':
+ '@rollup/rollup-win32-arm64-msvc@4.60.2':
optional: true
- '@rollup/rollup-win32-ia32-msvc@4.57.1':
+ '@rollup/rollup-win32-ia32-msvc@4.60.2':
optional: true
- '@rollup/rollup-win32-x64-gnu@4.57.1':
+ '@rollup/rollup-win32-x64-gnu@4.60.2':
optional: true
- '@rollup/rollup-win32-x64-msvc@4.57.1':
+ '@rollup/rollup-win32-x64-msvc@4.60.2':
optional: true
- '@sec-ant/readable-stream@0.4.1': {}
-
- '@shikijs/core@3.22.0':
+ '@shikijs/core@4.0.2':
dependencies:
- '@shikijs/types': 3.22.0
+ '@shikijs/primitive': 4.0.2
+ '@shikijs/types': 4.0.2
'@shikijs/vscode-textmate': 10.0.2
'@types/hast': 3.0.4
hast-util-to-html: 9.0.5
- '@shikijs/engine-javascript@3.22.0':
+ '@shikijs/engine-javascript@4.0.2':
dependencies:
- '@shikijs/types': 3.22.0
+ '@shikijs/types': 4.0.2
'@shikijs/vscode-textmate': 10.0.2
- oniguruma-to-es: 4.3.4
+ oniguruma-to-es: 4.3.6
- '@shikijs/engine-oniguruma@3.22.0':
+ '@shikijs/engine-oniguruma@4.0.2':
dependencies:
- '@shikijs/types': 3.22.0
+ '@shikijs/types': 4.0.2
'@shikijs/vscode-textmate': 10.0.2
- '@shikijs/langs@3.22.0':
+ '@shikijs/langs@4.0.2':
dependencies:
- '@shikijs/types': 3.22.0
+ '@shikijs/types': 4.0.2
- '@shikijs/themes@3.22.0':
+ '@shikijs/primitive@4.0.2':
dependencies:
- '@shikijs/types': 3.22.0
+ '@shikijs/types': 4.0.2
+ '@shikijs/vscode-textmate': 10.0.2
+ '@types/hast': 3.0.4
- '@shikijs/transformers@3.22.0':
+ '@shikijs/themes@4.0.2':
dependencies:
- '@shikijs/core': 3.22.0
- '@shikijs/types': 3.22.0
+ '@shikijs/types': 4.0.2
- '@shikijs/types@3.22.0':
+ '@shikijs/transformers@4.0.2':
+ dependencies:
+ '@shikijs/core': 4.0.2
+ '@shikijs/types': 4.0.2
+
+ '@shikijs/types@4.0.2':
dependencies:
'@shikijs/vscode-textmate': 10.0.2
'@types/hast': 3.0.4
- '@shikijs/vscode-textmate@10.0.2': {}
+ '@shikijs/vscode-textmate@10.0.2': {}
+
+ '@simple-git/args-pathspec@1.0.3': {}
+
+ '@simple-git/argv-parser@1.1.1':
+ dependencies:
+ '@simple-git/args-pathspec': 1.0.3
+
+ '@sindresorhus/base62@1.0.0': {}
+
+ '@sindresorhus/is@4.6.0': {}
+
+ '@sindresorhus/is@7.2.0': {}
+
+ '@sindresorhus/merge-streams@4.0.0': {}
+
+ '@socket.io/component-emitter@3.1.2': {}
+
+ '@speed-highlight/core@1.2.15': {}
+
+ '@sqlite.org/sqlite-wasm@3.50.4-build1': {}
+
+ '@standard-schema/spec@1.1.0': {}
+
+ '@stylistic/eslint-plugin@5.10.0(eslint@9.28.0(jiti@2.6.1))':
+ dependencies:
+ '@eslint-community/eslint-utils': 4.9.1(eslint@9.28.0(jiti@2.6.1))
+ '@typescript-eslint/types': 8.59.0
+ eslint: 9.28.0(jiti@2.6.1)
+ eslint-visitor-keys: 4.2.1
+ espree: 10.4.0
+ estraverse: 5.3.0
+ picomatch: 4.0.4
+
+ '@swc/helpers@0.5.21':
+ dependencies:
+ tslib: 2.8.1
+
+ '@szmarczak/http-timer@4.0.6':
+ dependencies:
+ defer-to-connect: 2.0.1
+
+ '@tailwindcss/node@4.2.4':
+ dependencies:
+ '@jridgewell/remapping': 2.3.5
+ enhanced-resolve: 5.20.1
+ jiti: 2.6.1
+ lightningcss: 1.32.0
+ magic-string: 0.30.21
+ source-map-js: 1.2.1
+ tailwindcss: 4.2.4
+
+ '@tailwindcss/oxide-android-arm64@4.2.4':
+ optional: true
+
+ '@tailwindcss/oxide-darwin-arm64@4.2.4':
+ optional: true
+
+ '@tailwindcss/oxide-darwin-x64@4.2.4':
+ optional: true
+
+ '@tailwindcss/oxide-freebsd-x64@4.2.4':
+ optional: true
+
+ '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.4':
+ optional: true
+
+ '@tailwindcss/oxide-linux-arm64-gnu@4.2.4':
+ optional: true
+
+ '@tailwindcss/oxide-linux-arm64-musl@4.2.4':
+ optional: true
+
+ '@tailwindcss/oxide-linux-x64-gnu@4.2.4':
+ optional: true
+
+ '@tailwindcss/oxide-linux-x64-musl@4.2.4':
+ optional: true
+
+ '@tailwindcss/oxide-wasm32-wasi@4.2.4':
+ optional: true
+
+ '@tailwindcss/oxide-win32-arm64-msvc@4.2.4':
+ optional: true
+
+ '@tailwindcss/oxide-win32-x64-msvc@4.2.4':
+ optional: true
+
+ '@tailwindcss/oxide@4.2.4':
+ optionalDependencies:
+ '@tailwindcss/oxide-android-arm64': 4.2.4
+ '@tailwindcss/oxide-darwin-arm64': 4.2.4
+ '@tailwindcss/oxide-darwin-x64': 4.2.4
+ '@tailwindcss/oxide-freebsd-x64': 4.2.4
+ '@tailwindcss/oxide-linux-arm-gnueabihf': 4.2.4
+ '@tailwindcss/oxide-linux-arm64-gnu': 4.2.4
+ '@tailwindcss/oxide-linux-arm64-musl': 4.2.4
+ '@tailwindcss/oxide-linux-x64-gnu': 4.2.4
+ '@tailwindcss/oxide-linux-x64-musl': 4.2.4
+ '@tailwindcss/oxide-wasm32-wasi': 4.2.4
+ '@tailwindcss/oxide-win32-arm64-msvc': 4.2.4
+ '@tailwindcss/oxide-win32-x64-msvc': 4.2.4
+
+ '@tailwindcss/postcss@4.2.4':
+ dependencies:
+ '@alloc/quick-lru': 5.2.0
+ '@tailwindcss/node': 4.2.4
+ '@tailwindcss/oxide': 4.2.4
+ postcss: 8.5.10
+ tailwindcss: 4.2.4
+
+ '@tailwindcss/vite@4.2.4(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))':
+ dependencies:
+ '@tailwindcss/node': 4.2.4
+ '@tailwindcss/oxide': 4.2.4
+ tailwindcss: 4.2.4
+ vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)
+
+ '@takumi-rs/core-darwin-arm64@1.1.0':
+ optional: true
+
+ '@takumi-rs/core-darwin-x64@1.1.0':
+ optional: true
+
+ '@takumi-rs/core-linux-arm64-gnu@1.1.0':
+ optional: true
+
+ '@takumi-rs/core-linux-arm64-musl@1.1.0':
+ optional: true
+
+ '@takumi-rs/core-linux-x64-gnu@1.1.0':
+ optional: true
+
+ '@takumi-rs/core-linux-x64-musl@1.1.0':
+ optional: true
+
+ '@takumi-rs/core-win32-arm64-msvc@1.1.0':
+ optional: true
+
+ '@takumi-rs/core-win32-x64-msvc@1.1.0':
+ optional: true
+
+ '@takumi-rs/core@1.1.0':
+ dependencies:
+ '@takumi-rs/helpers': 1.1.0
+ optionalDependencies:
+ '@takumi-rs/core-darwin-arm64': 1.1.0
+ '@takumi-rs/core-darwin-x64': 1.1.0
+ '@takumi-rs/core-linux-arm64-gnu': 1.1.0
+ '@takumi-rs/core-linux-arm64-musl': 1.1.0
+ '@takumi-rs/core-linux-x64-gnu': 1.1.0
+ '@takumi-rs/core-linux-x64-musl': 1.1.0
+ '@takumi-rs/core-win32-arm64-msvc': 1.1.0
+ '@takumi-rs/core-win32-x64-msvc': 1.1.0
+ transitivePeerDependencies:
+ - react
+ - react-dom
+
+ '@takumi-rs/helpers@1.1.0': {}
+
+ '@tanstack/table-core@8.21.3': {}
+
+ '@tanstack/virtual-core@3.14.0': {}
+
+ '@tanstack/vue-table@8.21.3(vue@3.5.33(typescript@6.0.3))':
+ dependencies:
+ '@tanstack/table-core': 8.21.3
+ vue: 3.5.33(typescript@6.0.3)
+
+ '@tanstack/vue-virtual@3.13.24(vue@3.5.33(typescript@6.0.3))':
+ dependencies:
+ '@tanstack/virtual-core': 3.14.0
+ vue: 3.5.33(typescript@6.0.3)
+
+ '@tiptap/core@3.22.4(@tiptap/pm@3.22.4)':
+ dependencies:
+ '@tiptap/pm': 3.22.4
+
+ '@tiptap/extension-blockquote@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))':
+ dependencies:
+ '@tiptap/core': 3.22.4(@tiptap/pm@3.22.4)
+
+ '@tiptap/extension-bold@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))':
+ dependencies:
+ '@tiptap/core': 3.22.4(@tiptap/pm@3.22.4)
+
+ '@tiptap/extension-bubble-menu@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)':
+ dependencies:
+ '@floating-ui/dom': 1.7.6
+ '@tiptap/core': 3.22.4(@tiptap/pm@3.22.4)
+ '@tiptap/pm': 3.22.4
+
+ '@tiptap/extension-bullet-list@3.22.4(@tiptap/extension-list@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4))':
+ dependencies:
+ '@tiptap/extension-list': 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)
+
+ '@tiptap/extension-code-block@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)':
+ dependencies:
+ '@tiptap/core': 3.22.4(@tiptap/pm@3.22.4)
+ '@tiptap/pm': 3.22.4
+
+ '@tiptap/extension-code@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))':
+ dependencies:
+ '@tiptap/core': 3.22.4(@tiptap/pm@3.22.4)
- '@shuding/opentype.js@1.4.0-beta.0':
+ '@tiptap/extension-collaboration@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)(@tiptap/y-tiptap@3.0.3(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.8)(y-protocols@1.0.7(yjs@13.6.30))(yjs@13.6.30))(yjs@13.6.30)':
dependencies:
- fflate: 0.7.4
- string.prototype.codepointat: 0.2.1
+ '@tiptap/core': 3.22.4(@tiptap/pm@3.22.4)
+ '@tiptap/pm': 3.22.4
+ '@tiptap/y-tiptap': 3.0.3(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.8)(y-protocols@1.0.7(yjs@13.6.30))(yjs@13.6.30)
+ yjs: 13.6.30
- '@sindresorhus/base62@1.0.0': {}
+ '@tiptap/extension-document@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))':
+ dependencies:
+ '@tiptap/core': 3.22.4(@tiptap/pm@3.22.4)
- '@sindresorhus/is@4.6.0': {}
+ '@tiptap/extension-drag-handle-vue-3@3.22.4(@tiptap/extension-drag-handle@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/extension-collaboration@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)(@tiptap/y-tiptap@3.0.3(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.8)(y-protocols@1.0.7(yjs@13.6.30))(yjs@13.6.30))(yjs@13.6.30))(@tiptap/extension-node-range@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)(@tiptap/y-tiptap@3.0.3(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.8)(y-protocols@1.0.7(yjs@13.6.30))(yjs@13.6.30)))(@tiptap/pm@3.22.4)(@tiptap/vue-3@3.22.4(@floating-ui/dom@1.7.6)(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)(vue@3.5.33(typescript@6.0.3)))(vue@3.5.33(typescript@6.0.3))':
+ dependencies:
+ '@tiptap/extension-drag-handle': 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/extension-collaboration@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)(@tiptap/y-tiptap@3.0.3(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.8)(y-protocols@1.0.7(yjs@13.6.30))(yjs@13.6.30))(yjs@13.6.30))(@tiptap/extension-node-range@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)(@tiptap/y-tiptap@3.0.3(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.8)(y-protocols@1.0.7(yjs@13.6.30))(yjs@13.6.30))
+ '@tiptap/pm': 3.22.4
+ '@tiptap/vue-3': 3.22.4(@floating-ui/dom@1.7.6)(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)(vue@3.5.33(typescript@6.0.3))
+ vue: 3.5.33(typescript@6.0.3)
- '@sindresorhus/is@7.2.0': {}
+ '@tiptap/extension-drag-handle@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/extension-collaboration@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)(@tiptap/y-tiptap@3.0.3(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.8)(y-protocols@1.0.7(yjs@13.6.30))(yjs@13.6.30))(yjs@13.6.30))(@tiptap/extension-node-range@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)(@tiptap/y-tiptap@3.0.3(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.8)(y-protocols@1.0.7(yjs@13.6.30))(yjs@13.6.30))':
+ dependencies:
+ '@floating-ui/dom': 1.7.6
+ '@tiptap/core': 3.22.4(@tiptap/pm@3.22.4)
+ '@tiptap/extension-collaboration': 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)(@tiptap/y-tiptap@3.0.3(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.8)(y-protocols@1.0.7(yjs@13.6.30))(yjs@13.6.30))(yjs@13.6.30)
+ '@tiptap/extension-node-range': 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)
+ '@tiptap/pm': 3.22.4
+ '@tiptap/y-tiptap': 3.0.3(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.8)(y-protocols@1.0.7(yjs@13.6.30))(yjs@13.6.30)
- '@sindresorhus/merge-streams@4.0.0': {}
+ '@tiptap/extension-dropcursor@3.22.4(@tiptap/extensions@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4))':
+ dependencies:
+ '@tiptap/extensions': 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)
- '@socket.io/component-emitter@3.1.2': {}
+ '@tiptap/extension-floating-menu@3.22.4(@floating-ui/dom@1.7.6)(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)':
+ dependencies:
+ '@floating-ui/dom': 1.7.6
+ '@tiptap/core': 3.22.4(@tiptap/pm@3.22.4)
+ '@tiptap/pm': 3.22.4
- '@speed-highlight/core@1.2.14': {}
+ '@tiptap/extension-gapcursor@3.22.4(@tiptap/extensions@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4))':
+ dependencies:
+ '@tiptap/extensions': 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)
- '@sqlite.org/sqlite-wasm@3.50.4-build1': {}
+ '@tiptap/extension-hard-break@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))':
+ dependencies:
+ '@tiptap/core': 3.22.4(@tiptap/pm@3.22.4)
- '@standard-schema/spec@1.1.0': {}
+ '@tiptap/extension-heading@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))':
+ dependencies:
+ '@tiptap/core': 3.22.4(@tiptap/pm@3.22.4)
- '@stylistic/eslint-plugin@5.8.0(eslint@9.28.0(jiti@2.6.1))':
+ '@tiptap/extension-horizontal-rule@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)':
dependencies:
- '@eslint-community/eslint-utils': 4.9.1(eslint@9.28.0(jiti@2.6.1))
- '@typescript-eslint/types': 8.55.0
- eslint: 9.28.0(jiti@2.6.1)
- eslint-visitor-keys: 4.2.1
- espree: 10.4.0
- estraverse: 5.3.0
- picomatch: 4.0.3
+ '@tiptap/core': 3.22.4(@tiptap/pm@3.22.4)
+ '@tiptap/pm': 3.22.4
- '@swc/helpers@0.5.18':
+ '@tiptap/extension-image@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))':
dependencies:
- tslib: 2.8.1
+ '@tiptap/core': 3.22.4(@tiptap/pm@3.22.4)
- '@szmarczak/http-timer@4.0.6':
+ '@tiptap/extension-italic@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))':
dependencies:
- defer-to-connect: 2.0.1
+ '@tiptap/core': 3.22.4(@tiptap/pm@3.22.4)
- '@tailwindcss/node@4.1.18':
+ '@tiptap/extension-link@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)':
dependencies:
- '@jridgewell/remapping': 2.3.5
- enhanced-resolve: 5.19.0
- jiti: 2.6.1
- lightningcss: 1.30.2
- magic-string: 0.30.21
- source-map-js: 1.2.1
- tailwindcss: 4.1.18
+ '@tiptap/core': 3.22.4(@tiptap/pm@3.22.4)
+ '@tiptap/pm': 3.22.4
+ linkifyjs: 4.3.2
- '@tailwindcss/oxide-android-arm64@4.1.18':
- optional: true
+ '@tiptap/extension-list-item@3.22.4(@tiptap/extension-list@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4))':
+ dependencies:
+ '@tiptap/extension-list': 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)
- '@tailwindcss/oxide-darwin-arm64@4.1.18':
- optional: true
+ '@tiptap/extension-list-keymap@3.22.4(@tiptap/extension-list@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4))':
+ dependencies:
+ '@tiptap/extension-list': 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)
- '@tailwindcss/oxide-darwin-x64@4.1.18':
- optional: true
+ '@tiptap/extension-list@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)':
+ dependencies:
+ '@tiptap/core': 3.22.4(@tiptap/pm@3.22.4)
+ '@tiptap/pm': 3.22.4
- '@tailwindcss/oxide-freebsd-x64@4.1.18':
- optional: true
+ '@tiptap/extension-mention@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)(@tiptap/suggestion@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4))':
+ dependencies:
+ '@tiptap/core': 3.22.4(@tiptap/pm@3.22.4)
+ '@tiptap/pm': 3.22.4
+ '@tiptap/suggestion': 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)
- '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.18':
- optional: true
+ '@tiptap/extension-node-range@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)':
+ dependencies:
+ '@tiptap/core': 3.22.4(@tiptap/pm@3.22.4)
+ '@tiptap/pm': 3.22.4
- '@tailwindcss/oxide-linux-arm64-gnu@4.1.18':
- optional: true
+ '@tiptap/extension-ordered-list@3.22.4(@tiptap/extension-list@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4))':
+ dependencies:
+ '@tiptap/extension-list': 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)
- '@tailwindcss/oxide-linux-arm64-musl@4.1.18':
- optional: true
+ '@tiptap/extension-paragraph@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))':
+ dependencies:
+ '@tiptap/core': 3.22.4(@tiptap/pm@3.22.4)
- '@tailwindcss/oxide-linux-x64-gnu@4.1.18':
- optional: true
+ '@tiptap/extension-placeholder@3.22.4(@tiptap/extensions@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4))':
+ dependencies:
+ '@tiptap/extensions': 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)
- '@tailwindcss/oxide-linux-x64-musl@4.1.18':
- optional: true
+ '@tiptap/extension-strike@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))':
+ dependencies:
+ '@tiptap/core': 3.22.4(@tiptap/pm@3.22.4)
- '@tailwindcss/oxide-wasm32-wasi@4.1.18':
- optional: true
+ '@tiptap/extension-text@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))':
+ dependencies:
+ '@tiptap/core': 3.22.4(@tiptap/pm@3.22.4)
- '@tailwindcss/oxide-win32-arm64-msvc@4.1.18':
- optional: true
+ '@tiptap/extension-underline@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))':
+ dependencies:
+ '@tiptap/core': 3.22.4(@tiptap/pm@3.22.4)
- '@tailwindcss/oxide-win32-x64-msvc@4.1.18':
- optional: true
+ '@tiptap/extensions@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)':
+ dependencies:
+ '@tiptap/core': 3.22.4(@tiptap/pm@3.22.4)
+ '@tiptap/pm': 3.22.4
- '@tailwindcss/oxide@4.1.18':
- optionalDependencies:
- '@tailwindcss/oxide-android-arm64': 4.1.18
- '@tailwindcss/oxide-darwin-arm64': 4.1.18
- '@tailwindcss/oxide-darwin-x64': 4.1.18
- '@tailwindcss/oxide-freebsd-x64': 4.1.18
- '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.18
- '@tailwindcss/oxide-linux-arm64-gnu': 4.1.18
- '@tailwindcss/oxide-linux-arm64-musl': 4.1.18
- '@tailwindcss/oxide-linux-x64-gnu': 4.1.18
- '@tailwindcss/oxide-linux-x64-musl': 4.1.18
- '@tailwindcss/oxide-wasm32-wasi': 4.1.18
- '@tailwindcss/oxide-win32-arm64-msvc': 4.1.18
- '@tailwindcss/oxide-win32-x64-msvc': 4.1.18
-
- '@tailwindcss/postcss@4.1.18':
+ '@tiptap/markdown@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)':
dependencies:
- '@alloc/quick-lru': 5.2.0
- '@tailwindcss/node': 4.1.18
- '@tailwindcss/oxide': 4.1.18
- postcss: 8.5.6
- tailwindcss: 4.1.18
+ '@tiptap/core': 3.22.4(@tiptap/pm@3.22.4)
+ '@tiptap/pm': 3.22.4
+ marked: 17.0.6
- '@tailwindcss/vite@4.1.18(vite@7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2))':
+ '@tiptap/pm@3.22.4':
dependencies:
- '@tailwindcss/node': 4.1.18
- '@tailwindcss/oxide': 4.1.18
- tailwindcss: 4.1.18
- vite: 7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2)
+ prosemirror-changeset: 2.4.1
+ prosemirror-commands: 1.7.1
+ prosemirror-dropcursor: 1.8.2
+ prosemirror-gapcursor: 1.4.1
+ prosemirror-history: 1.5.0
+ prosemirror-keymap: 1.2.3
+ prosemirror-model: 1.25.4
+ prosemirror-schema-list: 1.5.1
+ prosemirror-state: 1.4.4
+ prosemirror-tables: 1.8.5
+ prosemirror-transform: 1.12.0
+ prosemirror-view: 1.41.8
- '@tanstack/table-core@8.21.3': {}
+ '@tiptap/starter-kit@3.22.4':
+ dependencies:
+ '@tiptap/core': 3.22.4(@tiptap/pm@3.22.4)
+ '@tiptap/extension-blockquote': 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))
+ '@tiptap/extension-bold': 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))
+ '@tiptap/extension-bullet-list': 3.22.4(@tiptap/extension-list@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4))
+ '@tiptap/extension-code': 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))
+ '@tiptap/extension-code-block': 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)
+ '@tiptap/extension-document': 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))
+ '@tiptap/extension-dropcursor': 3.22.4(@tiptap/extensions@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4))
+ '@tiptap/extension-gapcursor': 3.22.4(@tiptap/extensions@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4))
+ '@tiptap/extension-hard-break': 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))
+ '@tiptap/extension-heading': 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))
+ '@tiptap/extension-horizontal-rule': 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)
+ '@tiptap/extension-italic': 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))
+ '@tiptap/extension-link': 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)
+ '@tiptap/extension-list': 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)
+ '@tiptap/extension-list-item': 3.22.4(@tiptap/extension-list@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4))
+ '@tiptap/extension-list-keymap': 3.22.4(@tiptap/extension-list@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4))
+ '@tiptap/extension-ordered-list': 3.22.4(@tiptap/extension-list@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4))
+ '@tiptap/extension-paragraph': 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))
+ '@tiptap/extension-strike': 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))
+ '@tiptap/extension-text': 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))
+ '@tiptap/extension-underline': 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))
+ '@tiptap/extensions': 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)
+ '@tiptap/pm': 3.22.4
- '@tanstack/virtual-core@3.13.18': {}
+ '@tiptap/suggestion@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)':
+ dependencies:
+ '@tiptap/core': 3.22.4(@tiptap/pm@3.22.4)
+ '@tiptap/pm': 3.22.4
- '@tanstack/vue-table@8.21.3(vue@3.5.28(typescript@5.9.3))':
+ '@tiptap/vue-3@3.22.4(@floating-ui/dom@1.7.6)(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)(vue@3.5.33(typescript@6.0.3))':
dependencies:
- '@tanstack/table-core': 8.21.3
- vue: 3.5.28(typescript@5.9.3)
+ '@floating-ui/dom': 1.7.6
+ '@tiptap/core': 3.22.4(@tiptap/pm@3.22.4)
+ '@tiptap/pm': 3.22.4
+ vue: 3.5.33(typescript@6.0.3)
+ optionalDependencies:
+ '@tiptap/extension-bubble-menu': 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)
+ '@tiptap/extension-floating-menu': 3.22.4(@floating-ui/dom@1.7.6)(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)
- '@tanstack/vue-virtual@3.13.18(vue@3.5.28(typescript@5.9.3))':
+ '@tiptap/y-tiptap@3.0.3(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.8)(y-protocols@1.0.7(yjs@13.6.30))(yjs@13.6.30)':
dependencies:
- '@tanstack/virtual-core': 3.13.18
- vue: 3.5.28(typescript@5.9.3)
+ lib0: 0.2.117
+ prosemirror-model: 1.25.4
+ prosemirror-state: 1.4.4
+ prosemirror-view: 1.41.8
+ y-protocols: 1.0.7(yjs@13.6.30)
+ yjs: 13.6.30
'@tybys/wasm-util@0.10.1':
dependencies:
@@ -9448,12 +10556,14 @@ snapshots:
'@types/node': 25.2.2
'@types/responselike': 1.0.3
- '@types/debug@4.1.12':
+ '@types/debug@4.1.13':
dependencies:
'@types/ms': 2.1.0
'@types/dom-speech-recognition@0.0.1': {}
+ '@types/esrecurse@4.3.1': {}
+
'@types/estree@1.0.8': {}
'@types/google.maps@3.58.1': {}
@@ -9488,6 +10598,10 @@ snapshots:
dependencies:
undici-types: 7.16.0
+ '@types/node@25.6.0':
+ dependencies:
+ undici-types: 7.19.2
+
'@types/parse-path@7.1.0':
dependencies:
parse-path: 7.1.0
@@ -9511,147 +10625,129 @@ snapshots:
'@types/web-bluetooth@0.0.21': {}
- '@typescript-eslint/eslint-plugin@8.55.0(@typescript-eslint/parser@8.55.0(eslint@9.28.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.28.0(jiti@2.6.1))(typescript@5.9.3)':
+ '@typescript-eslint/eslint-plugin@8.59.0(@typescript-eslint/parser@8.59.0(eslint@9.28.0(jiti@2.6.1))(typescript@6.0.3))(eslint@9.28.0(jiti@2.6.1))(typescript@6.0.3)':
dependencies:
'@eslint-community/regexpp': 4.12.2
- '@typescript-eslint/parser': 8.55.0(eslint@9.28.0(jiti@2.6.1))(typescript@5.9.3)
- '@typescript-eslint/scope-manager': 8.55.0
- '@typescript-eslint/type-utils': 8.55.0(eslint@9.28.0(jiti@2.6.1))(typescript@5.9.3)
- '@typescript-eslint/utils': 8.55.0(eslint@9.28.0(jiti@2.6.1))(typescript@5.9.3)
- '@typescript-eslint/visitor-keys': 8.55.0
+ '@typescript-eslint/parser': 8.59.0(eslint@9.28.0(jiti@2.6.1))(typescript@6.0.3)
+ '@typescript-eslint/scope-manager': 8.59.0
+ '@typescript-eslint/type-utils': 8.59.0(eslint@9.28.0(jiti@2.6.1))(typescript@6.0.3)
+ '@typescript-eslint/utils': 8.59.0(eslint@9.28.0(jiti@2.6.1))(typescript@6.0.3)
+ '@typescript-eslint/visitor-keys': 8.59.0
eslint: 9.28.0(jiti@2.6.1)
ignore: 7.0.5
natural-compare: 1.4.0
- ts-api-utils: 2.4.0(typescript@5.9.3)
- typescript: 5.9.3
+ ts-api-utils: 2.5.0(typescript@6.0.3)
+ typescript: 6.0.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/parser@8.55.0(eslint@9.28.0(jiti@2.6.1))(typescript@5.9.3)':
+ '@typescript-eslint/parser@8.59.0(eslint@9.28.0(jiti@2.6.1))(typescript@6.0.3)':
dependencies:
- '@typescript-eslint/scope-manager': 8.55.0
- '@typescript-eslint/types': 8.55.0
- '@typescript-eslint/typescript-estree': 8.55.0(typescript@5.9.3)
- '@typescript-eslint/visitor-keys': 8.55.0
- debug: 4.4.1
+ '@typescript-eslint/scope-manager': 8.59.0
+ '@typescript-eslint/types': 8.59.0
+ '@typescript-eslint/typescript-estree': 8.59.0(typescript@6.0.3)
+ '@typescript-eslint/visitor-keys': 8.59.0
+ debug: 4.4.3
eslint: 9.28.0(jiti@2.6.1)
- typescript: 5.9.3
+ typescript: 6.0.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/project-service@8.55.0(typescript@5.9.3)':
+ '@typescript-eslint/project-service@8.59.0(typescript@6.0.3)':
dependencies:
- '@typescript-eslint/tsconfig-utils': 8.55.0(typescript@5.9.3)
- '@typescript-eslint/types': 8.55.0
- debug: 4.4.1
- typescript: 5.9.3
+ '@typescript-eslint/tsconfig-utils': 8.59.0(typescript@6.0.3)
+ '@typescript-eslint/types': 8.59.0
+ debug: 4.4.3
+ typescript: 6.0.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/scope-manager@8.55.0':
+ '@typescript-eslint/scope-manager@8.59.0':
dependencies:
- '@typescript-eslint/types': 8.55.0
- '@typescript-eslint/visitor-keys': 8.55.0
+ '@typescript-eslint/types': 8.59.0
+ '@typescript-eslint/visitor-keys': 8.59.0
- '@typescript-eslint/tsconfig-utils@8.55.0(typescript@5.9.3)':
+ '@typescript-eslint/tsconfig-utils@8.59.0(typescript@6.0.3)':
dependencies:
- typescript: 5.9.3
+ typescript: 6.0.3
- '@typescript-eslint/type-utils@8.55.0(eslint@9.28.0(jiti@2.6.1))(typescript@5.9.3)':
+ '@typescript-eslint/type-utils@8.59.0(eslint@9.28.0(jiti@2.6.1))(typescript@6.0.3)':
dependencies:
- '@typescript-eslint/types': 8.55.0
- '@typescript-eslint/typescript-estree': 8.55.0(typescript@5.9.3)
- '@typescript-eslint/utils': 8.55.0(eslint@9.28.0(jiti@2.6.1))(typescript@5.9.3)
- debug: 4.4.1
+ '@typescript-eslint/types': 8.59.0
+ '@typescript-eslint/typescript-estree': 8.59.0(typescript@6.0.3)
+ '@typescript-eslint/utils': 8.59.0(eslint@9.28.0(jiti@2.6.1))(typescript@6.0.3)
+ debug: 4.4.3
eslint: 9.28.0(jiti@2.6.1)
- ts-api-utils: 2.4.0(typescript@5.9.3)
- typescript: 5.9.3
+ ts-api-utils: 2.5.0(typescript@6.0.3)
+ typescript: 6.0.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/types@8.55.0': {}
+ '@typescript-eslint/types@8.59.0': {}
- '@typescript-eslint/typescript-estree@8.55.0(typescript@5.9.3)':
+ '@typescript-eslint/typescript-estree@8.59.0(typescript@6.0.3)':
dependencies:
- '@typescript-eslint/project-service': 8.55.0(typescript@5.9.3)
- '@typescript-eslint/tsconfig-utils': 8.55.0(typescript@5.9.3)
- '@typescript-eslint/types': 8.55.0
- '@typescript-eslint/visitor-keys': 8.55.0
- debug: 4.4.1
- minimatch: 9.0.5
+ '@typescript-eslint/project-service': 8.59.0(typescript@6.0.3)
+ '@typescript-eslint/tsconfig-utils': 8.59.0(typescript@6.0.3)
+ '@typescript-eslint/types': 8.59.0
+ '@typescript-eslint/visitor-keys': 8.59.0
+ debug: 4.4.3
+ minimatch: 10.2.5
semver: 7.7.4
- tinyglobby: 0.2.15
- ts-api-utils: 2.4.0(typescript@5.9.3)
- typescript: 5.9.3
+ tinyglobby: 0.2.16
+ ts-api-utils: 2.5.0(typescript@6.0.3)
+ typescript: 6.0.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/utils@8.55.0(eslint@9.28.0(jiti@2.6.1))(typescript@5.9.3)':
+ '@typescript-eslint/utils@8.59.0(eslint@9.28.0(jiti@2.6.1))(typescript@6.0.3)':
dependencies:
'@eslint-community/eslint-utils': 4.9.1(eslint@9.28.0(jiti@2.6.1))
- '@typescript-eslint/scope-manager': 8.55.0
- '@typescript-eslint/types': 8.55.0
- '@typescript-eslint/typescript-estree': 8.55.0(typescript@5.9.3)
+ '@typescript-eslint/scope-manager': 8.59.0
+ '@typescript-eslint/types': 8.59.0
+ '@typescript-eslint/typescript-estree': 8.59.0(typescript@6.0.3)
eslint: 9.28.0(jiti@2.6.1)
- typescript: 5.9.3
+ typescript: 6.0.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/visitor-keys@8.55.0':
+ '@typescript-eslint/visitor-keys@8.59.0':
dependencies:
- '@typescript-eslint/types': 8.55.0
- eslint-visitor-keys: 4.2.1
+ '@typescript-eslint/types': 8.59.0
+ eslint-visitor-keys: 5.0.1
'@ungap/structured-clone@1.3.0': {}
- '@unhead/addons@2.1.4(rollup@4.57.1)(unhead@2.1.4)':
+ '@unhead/bundler@3.0.5(esbuild@0.27.7)(lightningcss@1.32.0)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))':
dependencies:
- '@rollup/pluginutils': 5.3.0(rollup@4.57.1)
- estree-walker: 3.0.3
+ '@vitejs/devtools-kit': 0.1.15(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
magic-string: 0.30.21
- mlly: 1.8.0
+ oxc-parser: 0.127.0
+ oxc-walker: 0.7.0(oxc-parser@0.127.0)
ufo: 1.6.3
- unhead: 2.1.4
- unplugin: 2.3.11
- unplugin-ast: 0.15.4
+ unplugin: 3.0.0
+ optionalDependencies:
+ esbuild: 0.27.7
+ lightningcss: 1.32.0
+ rolldown: 1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)
transitivePeerDependencies:
- - rollup
+ - bufferutil
+ - typescript
+ - utf-8-validate
+ - vite
- '@unhead/schema-org@2.1.4(@unhead/vue@2.1.4(vue@3.5.28(typescript@5.9.3)))':
+ '@unhead/schema-org@2.1.13(@unhead/vue@2.1.13(vue@3.5.33(typescript@6.0.3)))':
dependencies:
ufo: 1.6.3
- unhead: 2.1.4
+ unhead: 2.1.13
optionalDependencies:
- '@unhead/vue': 2.1.4(vue@3.5.28(typescript@5.9.3))
-
- '@unhead/vue@2.1.4(vue@3.5.28(typescript@5.9.3))':
- dependencies:
- hookable: 6.0.1
- unhead: 2.1.4
- vue: 3.5.28(typescript@5.9.3)
-
- '@unocss/core@66.6.0': {}
-
- '@unocss/extractor-arbitrary-variants@66.6.0':
- dependencies:
- '@unocss/core': 66.6.0
-
- '@unocss/preset-mini@66.6.0':
- dependencies:
- '@unocss/core': 66.6.0
- '@unocss/extractor-arbitrary-variants': 66.6.0
- '@unocss/rule-utils': 66.6.0
-
- '@unocss/preset-wind3@66.6.0':
- dependencies:
- '@unocss/core': 66.6.0
- '@unocss/preset-mini': 66.6.0
- '@unocss/rule-utils': 66.6.0
+ '@unhead/vue': 2.1.13(vue@3.5.33(typescript@6.0.3))
- '@unocss/rule-utils@66.6.0':
+ '@unhead/vue@2.1.13(vue@3.5.33(typescript@6.0.3))':
dependencies:
- '@unocss/core': 66.6.0
- magic-string: 0.30.21
+ hookable: 6.1.1
+ unhead: 2.1.13
+ vue: 3.5.33(typescript@6.0.3)
'@unrs/resolver-binding-android-arm-eabi@1.11.1':
optional: true
@@ -9712,64 +10808,89 @@ snapshots:
'@unrs/resolver-binding-win32-x64-msvc@1.11.1':
optional: true
- '@vercel/nft@1.3.0(rollup@4.57.1)':
+ '@vercel/nft@1.5.0(rollup@4.60.2)':
dependencies:
'@mapbox/node-pre-gyp': 2.0.3
- '@rollup/pluginutils': 5.3.0(rollup@4.57.1)
- acorn: 8.15.0
- acorn-import-attributes: 1.9.5(acorn@8.15.0)
+ '@rollup/pluginutils': 5.3.0(rollup@4.60.2)
+ acorn: 8.16.0
+ acorn-import-attributes: 1.9.5(acorn@8.16.0)
async-sema: 3.1.1
bindings: 1.5.0
estree-walker: 2.0.2
- glob: 13.0.1
+ glob: 13.0.6
graceful-fs: 4.2.11
node-gyp-build: 4.8.4
- picomatch: 4.0.3
+ picomatch: 4.0.4
resolve-from: 5.0.0
transitivePeerDependencies:
- encoding
- rollup
- supports-color
- '@vitejs/plugin-vue-jsx@5.1.4(vite@7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2))(vue@3.5.28(typescript@5.9.3))':
+ '@vitejs/devtools-kit@0.1.15(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))':
+ dependencies:
+ '@vitejs/devtools-rpc': 0.1.15(typescript@6.0.3)
+ birpc: 4.0.0
+ ohash: 2.0.11
+ vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)
+ transitivePeerDependencies:
+ - bufferutil
+ - typescript
+ - utf-8-validate
+
+ '@vitejs/devtools-rpc@0.1.15(typescript@6.0.3)':
+ dependencies:
+ birpc: 4.0.0
+ logs-sdk: 0.0.6
+ ohash: 2.0.11
+ p-limit: 7.3.0
+ structured-clone-es: 2.0.0
+ valibot: 1.3.1(typescript@6.0.3)
+ ws: 8.20.0
+ transitivePeerDependencies:
+ - bufferutil
+ - typescript
+ - utf-8-validate
+
+ '@vitejs/plugin-vue-jsx@5.1.5(rolldown-vite@7.3.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))':
dependencies:
'@babel/core': 7.29.0
'@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0)
'@babel/plugin-transform-typescript': 7.28.6(@babel/core@7.29.0)
- '@rolldown/pluginutils': 1.0.0-rc.3
+ '@rolldown/pluginutils': 1.0.0-rc.17
'@vue/babel-plugin-jsx': 2.0.1(@babel/core@7.29.0)
- vite: 7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2)
- vue: 3.5.28(typescript@5.9.3)
+ vite: rolldown-vite@7.3.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(terser@5.46.2)(yaml@2.8.3)
+ vue: 3.5.33(typescript@6.0.3)
transitivePeerDependencies:
- supports-color
- '@vitejs/plugin-vue@6.0.4(vite@7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2))(vue@3.5.28(typescript@5.9.3))':
+ '@vitejs/plugin-vue@6.0.6(rolldown-vite@7.3.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))':
dependencies:
- '@rolldown/pluginutils': 1.0.0-rc.2
- vite: 7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2)
- vue: 3.5.28(typescript@5.9.3)
+ '@rolldown/pluginutils': 1.0.0-rc.13
+ vite: rolldown-vite@7.3.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(terser@5.46.2)(yaml@2.8.3)
+ vue: 3.5.33(typescript@6.0.3)
- '@volar/language-core@2.4.27':
+ '@volar/language-core@2.4.28':
dependencies:
- '@volar/source-map': 2.4.27
+ '@volar/source-map': 2.4.28
- '@volar/source-map@2.4.27': {}
+ '@volar/source-map@2.4.28': {}
- '@volar/typescript@2.4.27':
+ '@volar/typescript@2.4.28':
dependencies:
- '@volar/language-core': 2.4.27
+ '@volar/language-core': 2.4.28
path-browserify: 1.0.1
vscode-uri: 3.1.0
- '@vue-macros/common@3.1.2(vue@3.5.28(typescript@5.9.3))':
+ '@vue-macros/common@3.1.2(vue@3.5.33(typescript@6.0.3))':
dependencies:
- '@vue/compiler-sfc': 3.5.28
+ '@vue/compiler-sfc': 3.5.33
ast-kit: 2.2.0
local-pkg: 1.1.2
magic-string-ast: 1.0.3
unplugin-utils: 0.3.1
optionalDependencies:
- vue: 3.5.28(typescript@5.9.3)
+ vue: 3.5.33(typescript@6.0.3)
'@vue/babel-helper-vue-transform-on@2.0.1': {}
@@ -9783,7 +10904,7 @@ snapshots:
'@babel/types': 7.29.0
'@vue/babel-helper-vue-transform-on': 2.0.1
'@vue/babel-plugin-resolve-type': 2.0.1(@babel/core@7.29.0)
- '@vue/shared': 3.5.28
+ '@vue/shared': 3.5.33
optionalDependencies:
'@babel/core': 7.29.0
transitivePeerDependencies:
@@ -9795,186 +10916,147 @@ snapshots:
'@babel/core': 7.29.0
'@babel/helper-module-imports': 7.28.6
'@babel/helper-plugin-utils': 7.28.6
- '@babel/parser': 7.29.0
- '@vue/compiler-sfc': 3.5.28
+ '@babel/parser': 7.29.2
+ '@vue/compiler-sfc': 3.5.33
transitivePeerDependencies:
- supports-color
- '@vue/compiler-core@3.5.28':
+ '@vue/compiler-core@3.5.33':
dependencies:
- '@babel/parser': 7.29.0
- '@vue/shared': 3.5.28
+ '@babel/parser': 7.29.2
+ '@vue/shared': 3.5.33
entities: 7.0.1
estree-walker: 2.0.2
source-map-js: 1.2.1
- '@vue/compiler-dom@3.5.28':
+ '@vue/compiler-dom@3.5.33':
dependencies:
- '@vue/compiler-core': 3.5.28
- '@vue/shared': 3.5.28
+ '@vue/compiler-core': 3.5.33
+ '@vue/shared': 3.5.33
- '@vue/compiler-sfc@3.5.28':
+ '@vue/compiler-sfc@3.5.33':
dependencies:
- '@babel/parser': 7.29.0
- '@vue/compiler-core': 3.5.28
- '@vue/compiler-dom': 3.5.28
- '@vue/compiler-ssr': 3.5.28
- '@vue/shared': 3.5.28
+ '@babel/parser': 7.29.2
+ '@vue/compiler-core': 3.5.33
+ '@vue/compiler-dom': 3.5.33
+ '@vue/compiler-ssr': 3.5.33
+ '@vue/shared': 3.5.33
estree-walker: 2.0.2
magic-string: 0.30.21
- postcss: 8.5.6
+ postcss: 8.5.10
source-map-js: 1.2.1
- '@vue/compiler-ssr@3.5.28':
+ '@vue/compiler-ssr@3.5.33':
dependencies:
- '@vue/compiler-dom': 3.5.28
- '@vue/shared': 3.5.28
+ '@vue/compiler-dom': 3.5.33
+ '@vue/shared': 3.5.33
- '@vue/devtools-api@6.6.4': {}
+ '@vue/devtools-api@8.1.1':
+ dependencies:
+ '@vue/devtools-kit': 8.1.1
- '@vue/devtools-core@8.0.6(vite@7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2))(vue@3.5.28(typescript@5.9.3))':
+ '@vue/devtools-core@8.1.1(vue@3.5.33(typescript@6.0.3))':
dependencies:
- '@vue/devtools-kit': 8.0.6
- '@vue/devtools-shared': 8.0.6
- mitt: 3.0.1
- nanoid: 5.1.6
- pathe: 2.0.3
- vite-hot-client: 2.1.0(vite@7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2))
- vue: 3.5.28(typescript@5.9.3)
- transitivePeerDependencies:
- - vite
+ '@vue/devtools-kit': 8.1.1
+ '@vue/devtools-shared': 8.1.1
+ vue: 3.5.33(typescript@6.0.3)
- '@vue/devtools-kit@8.0.6':
+ '@vue/devtools-kit@8.1.1':
dependencies:
- '@vue/devtools-shared': 8.0.6
+ '@vue/devtools-shared': 8.1.1
birpc: 2.9.0
hookable: 5.5.3
- mitt: 3.0.1
perfect-debounce: 2.1.0
- speakingurl: 14.0.1
- superjson: 2.2.6
- '@vue/devtools-shared@8.0.6':
- dependencies:
- rfdc: 1.4.1
+ '@vue/devtools-shared@8.1.1': {}
- '@vue/language-core@3.2.4':
+ '@vue/language-core@3.2.7':
dependencies:
- '@volar/language-core': 2.4.27
- '@vue/compiler-dom': 3.5.28
- '@vue/shared': 3.5.28
+ '@volar/language-core': 2.4.28
+ '@vue/compiler-dom': 3.5.33
+ '@vue/shared': 3.5.33
alien-signals: 3.1.2
muggle-string: 0.4.1
path-browserify: 1.0.1
- picomatch: 4.0.3
+ picomatch: 4.0.4
- '@vue/reactivity@3.5.28':
+ '@vue/reactivity@3.5.33':
dependencies:
- '@vue/shared': 3.5.28
+ '@vue/shared': 3.5.33
- '@vue/runtime-core@3.5.28':
+ '@vue/runtime-core@3.5.33':
dependencies:
- '@vue/reactivity': 3.5.28
- '@vue/shared': 3.5.28
+ '@vue/reactivity': 3.5.33
+ '@vue/shared': 3.5.33
- '@vue/runtime-dom@3.5.28':
+ '@vue/runtime-dom@3.5.33':
dependencies:
- '@vue/reactivity': 3.5.28
- '@vue/runtime-core': 3.5.28
- '@vue/shared': 3.5.28
+ '@vue/reactivity': 3.5.33
+ '@vue/runtime-core': 3.5.33
+ '@vue/shared': 3.5.33
csstype: 3.2.3
- '@vue/server-renderer@3.5.28(vue@3.5.28(typescript@5.9.3))':
+ '@vue/server-renderer@3.5.33(vue@3.5.33(typescript@6.0.3))':
dependencies:
- '@vue/compiler-ssr': 3.5.28
- '@vue/shared': 3.5.28
- vue: 3.5.28(typescript@5.9.3)
+ '@vue/compiler-ssr': 3.5.33
+ '@vue/shared': 3.5.33
+ vue: 3.5.33(typescript@6.0.3)
- '@vue/shared@3.5.28': {}
+ '@vue/shared@3.5.33': {}
- '@vueuse/core@10.11.1(vue@3.5.28(typescript@5.9.3))':
+ '@vueuse/core@10.11.1(vue@3.5.33(typescript@6.0.3))':
dependencies:
'@types/web-bluetooth': 0.0.20
'@vueuse/metadata': 10.11.1
- '@vueuse/shared': 10.11.1(vue@3.5.28(typescript@5.9.3))
- vue-demi: 0.14.10(vue@3.5.28(typescript@5.9.3))
+ '@vueuse/shared': 10.11.1(vue@3.5.33(typescript@6.0.3))
+ vue-demi: 0.14.10(vue@3.5.33(typescript@6.0.3))
transitivePeerDependencies:
- '@vue/composition-api'
- vue
- '@vueuse/core@12.8.2(typescript@5.9.3)':
- dependencies:
- '@types/web-bluetooth': 0.0.21
- '@vueuse/metadata': 12.8.2
- '@vueuse/shared': 12.8.2(typescript@5.9.3)
- vue: 3.5.28(typescript@5.9.3)
- transitivePeerDependencies:
- - typescript
-
- '@vueuse/core@13.9.0(vue@3.5.28(typescript@5.9.3))':
- dependencies:
- '@types/web-bluetooth': 0.0.21
- '@vueuse/metadata': 13.9.0
- '@vueuse/shared': 13.9.0(vue@3.5.28(typescript@5.9.3))
- vue: 3.5.28(typescript@5.9.3)
-
- '@vueuse/core@14.2.0(vue@3.5.28(typescript@5.9.3))':
+ '@vueuse/core@14.2.1(vue@3.5.33(typescript@6.0.3))':
dependencies:
'@types/web-bluetooth': 0.0.21
- '@vueuse/metadata': 14.2.0
- '@vueuse/shared': 14.2.0(vue@3.5.28(typescript@5.9.3))
- vue: 3.5.28(typescript@5.9.3)
+ '@vueuse/metadata': 14.2.1
+ '@vueuse/shared': 14.2.1(vue@3.5.33(typescript@6.0.3))
+ vue: 3.5.33(typescript@6.0.3)
- '@vueuse/integrations@13.9.0(axios@1.13.5)(change-case@5.4.4)(fuse.js@7.1.0)(jwt-decode@4.0.0)(vue@3.5.28(typescript@5.9.3))':
+ '@vueuse/integrations@14.2.1(axios@1.13.5)(change-case@5.4.4)(fuse.js@7.3.0)(jwt-decode@4.0.0)(vue@3.5.33(typescript@6.0.3))':
dependencies:
- '@vueuse/core': 13.9.0(vue@3.5.28(typescript@5.9.3))
- '@vueuse/shared': 13.9.0(vue@3.5.28(typescript@5.9.3))
- vue: 3.5.28(typescript@5.9.3)
+ '@vueuse/core': 14.2.1(vue@3.5.33(typescript@6.0.3))
+ '@vueuse/shared': 14.2.1(vue@3.5.33(typescript@6.0.3))
+ vue: 3.5.33(typescript@6.0.3)
optionalDependencies:
axios: 1.13.5
change-case: 5.4.4
- fuse.js: 7.1.0
+ fuse.js: 7.3.0
jwt-decode: 4.0.0
'@vueuse/metadata@10.11.1': {}
- '@vueuse/metadata@12.8.2': {}
+ '@vueuse/metadata@14.2.1': {}
- '@vueuse/metadata@13.9.0': {}
-
- '@vueuse/metadata@14.2.0': {}
-
- '@vueuse/nuxt@14.2.0(magicast@0.5.2)(nuxt@4.3.1(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@25.2.2)(@vue/compiler-sfc@3.5.28)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(eslint@9.28.0(jiti@2.6.1))(ioredis@5.9.2)(lightningcss@1.30.2)(magicast@0.5.2)(optionator@0.9.4)(rollup@4.57.1)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2))(vue-tsc@3.2.4(typescript@5.9.3))(yaml@2.8.2))(vue@3.5.28(typescript@5.9.3))':
+ '@vueuse/nuxt@14.2.1(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))':
dependencies:
- '@nuxt/kit': 4.3.1(magicast@0.5.2)
- '@vueuse/core': 14.2.0(vue@3.5.28(typescript@5.9.3))
- '@vueuse/metadata': 14.2.0
+ '@nuxt/kit': 4.4.2(magicast@0.5.2)
+ '@vueuse/core': 14.2.1(vue@3.5.33(typescript@6.0.3))
+ '@vueuse/metadata': 14.2.1
local-pkg: 1.1.2
- nuxt: 4.3.1(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@25.2.2)(@vue/compiler-sfc@3.5.28)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(eslint@9.28.0(jiti@2.6.1))(ioredis@5.9.2)(lightningcss@1.30.2)(magicast@0.5.2)(optionator@0.9.4)(rollup@4.57.1)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2))(vue-tsc@3.2.4(typescript@5.9.3))(yaml@2.8.2)
- vue: 3.5.28(typescript@5.9.3)
+ nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3)
+ vue: 3.5.33(typescript@6.0.3)
transitivePeerDependencies:
- magicast
- '@vueuse/shared@10.11.1(vue@3.5.28(typescript@5.9.3))':
+ '@vueuse/shared@10.11.1(vue@3.5.33(typescript@6.0.3))':
dependencies:
- vue-demi: 0.14.10(vue@3.5.28(typescript@5.9.3))
+ vue-demi: 0.14.10(vue@3.5.33(typescript@6.0.3))
transitivePeerDependencies:
- '@vue/composition-api'
- vue
- '@vueuse/shared@12.8.2(typescript@5.9.3)':
- dependencies:
- vue: 3.5.28(typescript@5.9.3)
- transitivePeerDependencies:
- - typescript
-
- '@vueuse/shared@13.9.0(vue@3.5.28(typescript@5.9.3))':
- dependencies:
- vue: 3.5.28(typescript@5.9.3)
-
- '@vueuse/shared@14.2.0(vue@3.5.28(typescript@5.9.3))':
+ '@vueuse/shared@14.2.1(vue@3.5.33(typescript@6.0.3))':
dependencies:
- vue: 3.5.28(typescript@5.9.3)
+ vue: 3.5.33(typescript@6.0.3)
'@webcontainer/env@1.1.1': {}
@@ -10019,16 +11101,18 @@ snapshots:
dependencies:
event-target-shim: 5.0.1
- acorn-import-attributes@1.9.5(acorn@8.15.0):
+ acorn-import-attributes@1.9.5(acorn@8.16.0):
dependencies:
- acorn: 8.15.0
+ acorn: 8.16.0
- acorn-jsx@5.3.2(acorn@8.15.0):
+ acorn-jsx@5.3.2(acorn@8.16.0):
dependencies:
- acorn: 8.15.0
+ acorn: 8.16.0
acorn@8.15.0: {}
+ acorn@8.16.0: {}
+
agent-base@7.1.4: {}
ajv@6.14.0:
@@ -10078,7 +11162,7 @@ snapshots:
anymatch@3.1.3:
dependencies:
normalize-path: 3.0.0
- picomatch: 2.3.1
+ picomatch: 2.3.2
archiver-utils@5.0.2:
dependencies:
@@ -10086,7 +11170,7 @@ snapshots:
graceful-fs: 4.2.11
is-stream: 2.0.1
lazystream: 1.0.1
- lodash: 4.17.23
+ lodash: 4.18.1
normalize-path: 3.0.0
readable-stream: 4.7.0
@@ -10097,10 +11181,11 @@ snapshots:
buffer-crc32: 1.0.0
readable-stream: 4.7.0
readdir-glob: 1.1.3
- tar-stream: 3.1.7
+ tar-stream: 3.1.8
zip-stream: 6.0.1
transitivePeerDependencies:
- bare-abort-controller
+ - bare-buffer
- react-native-b4a
are-docs-informative@0.0.2: {}
@@ -10113,12 +11198,12 @@ snapshots:
ast-kit@2.2.0:
dependencies:
- '@babel/parser': 7.29.0
+ '@babel/parser': 7.29.2
pathe: 2.0.3
ast-walker-scope@0.8.3:
dependencies:
- '@babel/parser': 7.29.0
+ '@babel/parser': 7.29.2
ast-kit: 2.2.0
async-lock@1.4.1: {}
@@ -10129,13 +11214,13 @@ snapshots:
asynckit@0.4.0: {}
- autoprefixer@10.4.24(postcss@8.5.6):
+ autoprefixer@10.5.0(postcss@8.5.10):
dependencies:
- browserslist: 4.28.1
- caniuse-lite: 1.0.30001769
+ browserslist: 4.28.2
+ caniuse-lite: 1.0.30001790
fraction.js: 5.3.4
picocolors: 1.1.1
- postcss: 8.5.6
+ postcss: 8.5.10
postcss-value-parser: 4.2.0
available-typed-arrays@1.0.7:
@@ -10150,19 +11235,49 @@ snapshots:
transitivePeerDependencies:
- debug
- b4a@1.7.3: {}
+ b4a@1.8.0: {}
bail@2.0.2: {}
balanced-match@1.0.2: {}
+ balanced-match@4.0.4: {}
+
bare-events@2.8.2: {}
- base64-js@0.0.8: {}
+ bare-fs@4.7.1:
+ dependencies:
+ bare-events: 2.8.2
+ bare-path: 3.0.0
+ bare-stream: 2.13.0(bare-events@2.8.2)
+ bare-url: 2.4.2
+ fast-fifo: 1.3.2
+ transitivePeerDependencies:
+ - bare-abort-controller
+ - react-native-b4a
+
+ bare-os@3.9.0: {}
+
+ bare-path@3.0.0:
+ dependencies:
+ bare-os: 3.9.0
+
+ bare-stream@2.13.0(bare-events@2.8.2):
+ dependencies:
+ streamx: 2.25.0
+ teex: 1.0.1
+ optionalDependencies:
+ bare-events: 2.8.2
+ transitivePeerDependencies:
+ - react-native-b4a
+
+ bare-url@2.4.2:
+ dependencies:
+ bare-path: 3.0.0
base64-js@1.5.1: {}
- baseline-browser-mapping@2.9.19: {}
+ baseline-browser-mapping@2.10.21: {}
better-sqlite3@11.10.0:
dependencies:
@@ -10176,6 +11291,8 @@ snapshots:
birpc@2.9.0: {}
+ birpc@4.0.0: {}
+
bl@4.1.0:
dependencies:
buffer: 5.7.1
@@ -10183,34 +11300,32 @@ snapshots:
readable-stream: 3.6.2
optional: true
- blob-to-buffer@1.2.9: {}
-
boolbase@1.0.0: {}
- brace-expansion@1.1.13:
+ brace-expansion@1.1.14:
dependencies:
balanced-match: 1.0.2
concat-map: 0.0.1
- brace-expansion@2.0.2:
+ brace-expansion@2.1.0:
dependencies:
balanced-match: 1.0.2
- braces@3.0.3:
+ brace-expansion@5.0.5:
dependencies:
- fill-range: 7.1.1
+ balanced-match: 4.0.4
- brotli@1.3.3:
+ braces@3.0.3:
dependencies:
- base64-js: 1.5.1
+ fill-range: 7.1.1
- browserslist@4.28.1:
+ browserslist@4.28.2:
dependencies:
- baseline-browser-mapping: 2.9.19
- caniuse-lite: 1.0.30001769
- electron-to-chromium: 1.5.286
- node-releases: 2.0.27
- update-browserslist-db: 1.2.3(browserslist@4.28.1)
+ baseline-browser-mapping: 2.10.21
+ caniuse-lite: 1.0.30001790
+ electron-to-chromium: 1.5.344
+ node-releases: 2.0.38
+ update-browserslist-db: 1.2.3(browserslist@4.28.2)
buffer-crc32@1.0.0: {}
@@ -10227,15 +11342,15 @@ snapshots:
base64-js: 1.5.1
ieee754: 1.2.1
- builtin-modules@5.0.0: {}
+ builtin-modules@5.1.0: {}
bundle-name@4.1.0:
dependencies:
run-applescript: 7.1.0
- bundle-require@5.1.0(esbuild@0.27.3):
+ bundle-require@5.1.0(esbuild@0.27.7):
dependencies:
- esbuild: 0.27.3
+ esbuild: 0.27.7
load-tsconfig: 0.2.5
c12@3.3.3(magicast@0.5.2):
@@ -10255,8 +11370,27 @@ snapshots:
optionalDependencies:
magicast: 0.5.2
+ c12@3.3.4(magicast@0.5.2):
+ dependencies:
+ chokidar: 5.0.0
+ confbox: 0.2.4
+ defu: 6.1.7
+ dotenv: 17.4.2
+ exsolve: 1.0.8
+ giget: 3.2.0
+ jiti: 2.6.1
+ ohash: 2.0.11
+ pathe: 2.0.3
+ perfect-debounce: 2.1.0
+ pkg-types: 2.3.0
+ rc9: 3.0.1
+ optionalDependencies:
+ magicast: 0.5.2
+
cac@6.7.14: {}
+ cac@7.0.0: {}
+
cacheable-lookup@5.0.4: {}
cacheable-request@7.0.4:
@@ -10274,7 +11408,7 @@ snapshots:
es-errors: 1.3.0
function-bind: 1.1.2
- call-bind@1.0.8:
+ call-bind@1.0.9:
dependencies:
call-bind-apply-helpers: 1.0.2
es-define-property: 1.0.1
@@ -10291,16 +11425,14 @@ snapshots:
callsites@3.1.0: {}
- camelize@1.0.1: {}
-
caniuse-api@3.0.0:
dependencies:
- browserslist: 4.28.1
- caniuse-lite: 1.0.30001769
+ browserslist: 4.28.2
+ caniuse-lite: 1.0.30001790
lodash.memoize: 4.1.2
lodash.uniq: 4.5.0
- caniuse-lite@1.0.30001769: {}
+ caniuse-lite@1.0.30001790: {}
ccount@2.0.1: {}
@@ -10309,8 +11441,6 @@ snapshots:
ansi-styles: 4.3.0
supports-color: 7.2.0
- chalk@5.6.2: {}
-
change-case@5.4.4: {}
char-regex@1.0.2: {}
@@ -10338,7 +11468,7 @@ snapshots:
chrome-launcher@1.2.1:
dependencies:
- '@types/node': 25.2.2
+ '@types/node': 25.6.0
escape-string-regexp: 4.0.0
is-wsl: 2.2.0
lighthouse-logger: 2.0.2
@@ -10353,30 +11483,24 @@ snapshots:
citty@0.2.0: {}
+ citty@0.2.2: {}
+
clean-git-ref@2.0.1: {}
clean-regexp@1.0.0:
dependencies:
escape-string-regexp: 1.0.5
- clipboardy@4.0.0:
- dependencies:
- execa: 8.0.1
- is-wsl: 3.1.0
- is64bit: 2.0.0
-
- cliui@8.0.1:
+ cliui@9.0.1:
dependencies:
- string-width: 4.2.3
- strip-ansi: 6.0.1
- wrap-ansi: 7.0.0
+ string-width: 7.2.0
+ strip-ansi: 7.2.0
+ wrap-ansi: 9.0.2
clone-response@1.0.3:
dependencies:
mimic-response: 1.0.1
- clone@2.1.2: {}
-
cluster-key-slot@1.1.2: {}
color-convert@2.0.1:
@@ -10385,8 +11509,6 @@ snapshots:
color-name@1.1.4: {}
- colord@2.9.3: {}
-
colortranslator@5.0.0: {}
combined-stream@1.0.8:
@@ -10399,7 +11521,7 @@ snapshots:
commander@2.20.3: {}
- comment-parser@1.4.5: {}
+ comment-parser@1.4.6: {}
commondir@1.0.1: {}
@@ -10423,23 +11545,17 @@ snapshots:
convert-source-map@2.0.0: {}
- cookie-es@1.2.2: {}
-
- cookie-es@2.0.0: {}
+ cookie-es@1.2.3: {}
- copy-anything@4.0.5:
- dependencies:
- is-what: 5.5.0
+ cookie-es@2.0.1: {}
- copy-paste@2.2.0:
- dependencies:
- iconv-lite: 0.4.24
+ cookie-es@3.1.1: {}
- core-js-compat@3.48.0:
+ core-js-compat@3.49.0:
dependencies:
- browserslist: 4.28.1
+ browserslist: 4.28.2
- core-js@3.48.0: {}
+ core-js@3.49.0: {}
core-util-is@1.0.3: {}
@@ -10450,13 +11566,7 @@ snapshots:
crc-32: 1.2.2
readable-stream: 4.7.0
- croner@9.1.0: {}
-
- cross-fetch@3.2.0:
- dependencies:
- node-fetch: 2.7.0
- transitivePeerDependencies:
- - encoding
+ croner@10.0.1: {}
cross-spawn@7.0.6:
dependencies:
@@ -10468,17 +11578,13 @@ snapshots:
dependencies:
uncrypto: 0.1.3
- css-background-parser@0.1.0: {}
-
- css-box-shadow@1.0.0-3: {}
-
- css-color-keywords@1.0.0: {}
+ crossws@0.4.5(srvx@0.11.15):
+ optionalDependencies:
+ srvx: 0.11.15
- css-declaration-sorter@7.3.1(postcss@8.5.6):
+ css-declaration-sorter@7.4.0(postcss@8.5.10):
dependencies:
- postcss: 8.5.6
-
- css-gradient-parser@0.0.17: {}
+ postcss: 8.5.10
css-select@5.2.2:
dependencies:
@@ -10488,69 +11594,63 @@ snapshots:
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:
mdn-data: 2.0.28
source-map-js: 1.2.1
- css-tree@3.1.0:
+ css-tree@3.2.1:
dependencies:
- mdn-data: 2.12.2
+ mdn-data: 2.27.1
source-map-js: 1.2.1
css-what@6.2.2: {}
cssesc@3.0.0: {}
- cssnano-preset-default@7.0.10(postcss@8.5.6):
- dependencies:
- browserslist: 4.28.1
- css-declaration-sorter: 7.3.1(postcss@8.5.6)
- cssnano-utils: 5.0.1(postcss@8.5.6)
- postcss: 8.5.6
- postcss-calc: 10.1.1(postcss@8.5.6)
- postcss-colormin: 7.0.5(postcss@8.5.6)
- postcss-convert-values: 7.0.8(postcss@8.5.6)
- postcss-discard-comments: 7.0.5(postcss@8.5.6)
- postcss-discard-duplicates: 7.0.2(postcss@8.5.6)
- postcss-discard-empty: 7.0.1(postcss@8.5.6)
- postcss-discard-overridden: 7.0.1(postcss@8.5.6)
- postcss-merge-longhand: 7.0.5(postcss@8.5.6)
- postcss-merge-rules: 7.0.7(postcss@8.5.6)
- postcss-minify-font-values: 7.0.1(postcss@8.5.6)
- postcss-minify-gradients: 7.0.1(postcss@8.5.6)
- postcss-minify-params: 7.0.5(postcss@8.5.6)
- postcss-minify-selectors: 7.0.5(postcss@8.5.6)
- postcss-normalize-charset: 7.0.1(postcss@8.5.6)
- postcss-normalize-display-values: 7.0.1(postcss@8.5.6)
- postcss-normalize-positions: 7.0.1(postcss@8.5.6)
- postcss-normalize-repeat-style: 7.0.1(postcss@8.5.6)
- postcss-normalize-string: 7.0.1(postcss@8.5.6)
- postcss-normalize-timing-functions: 7.0.1(postcss@8.5.6)
- postcss-normalize-unicode: 7.0.5(postcss@8.5.6)
- postcss-normalize-url: 7.0.1(postcss@8.5.6)
- postcss-normalize-whitespace: 7.0.1(postcss@8.5.6)
- postcss-ordered-values: 7.0.2(postcss@8.5.6)
- postcss-reduce-initial: 7.0.5(postcss@8.5.6)
- postcss-reduce-transforms: 7.0.1(postcss@8.5.6)
- postcss-svgo: 7.1.0(postcss@8.5.6)
- postcss-unique-selectors: 7.0.4(postcss@8.5.6)
-
- cssnano-utils@5.0.1(postcss@8.5.6):
- dependencies:
- postcss: 8.5.6
-
- cssnano@7.1.2(postcss@8.5.6):
- dependencies:
- cssnano-preset-default: 7.0.10(postcss@8.5.6)
+ cssnano-preset-default@7.0.15(postcss@8.5.10):
+ dependencies:
+ browserslist: 4.28.2
+ css-declaration-sorter: 7.4.0(postcss@8.5.10)
+ cssnano-utils: 5.0.2(postcss@8.5.10)
+ postcss: 8.5.10
+ postcss-calc: 10.1.1(postcss@8.5.10)
+ postcss-colormin: 7.0.9(postcss@8.5.10)
+ postcss-convert-values: 7.0.11(postcss@8.5.10)
+ postcss-discard-comments: 7.0.7(postcss@8.5.10)
+ postcss-discard-duplicates: 7.0.3(postcss@8.5.10)
+ postcss-discard-empty: 7.0.2(postcss@8.5.10)
+ postcss-discard-overridden: 7.0.2(postcss@8.5.10)
+ postcss-merge-longhand: 7.0.6(postcss@8.5.10)
+ postcss-merge-rules: 7.0.10(postcss@8.5.10)
+ postcss-minify-font-values: 7.0.2(postcss@8.5.10)
+ postcss-minify-gradients: 7.0.4(postcss@8.5.10)
+ postcss-minify-params: 7.0.8(postcss@8.5.10)
+ postcss-minify-selectors: 7.1.0(postcss@8.5.10)
+ postcss-normalize-charset: 7.0.2(postcss@8.5.10)
+ postcss-normalize-display-values: 7.0.2(postcss@8.5.10)
+ postcss-normalize-positions: 7.0.3(postcss@8.5.10)
+ postcss-normalize-repeat-style: 7.0.3(postcss@8.5.10)
+ postcss-normalize-string: 7.0.2(postcss@8.5.10)
+ postcss-normalize-timing-functions: 7.0.2(postcss@8.5.10)
+ postcss-normalize-unicode: 7.0.8(postcss@8.5.10)
+ postcss-normalize-url: 7.0.2(postcss@8.5.10)
+ postcss-normalize-whitespace: 7.0.2(postcss@8.5.10)
+ postcss-ordered-values: 7.0.3(postcss@8.5.10)
+ postcss-reduce-initial: 7.0.8(postcss@8.5.10)
+ postcss-reduce-transforms: 7.0.2(postcss@8.5.10)
+ postcss-svgo: 7.1.2(postcss@8.5.10)
+ postcss-unique-selectors: 7.0.6(postcss@8.5.10)
+
+ cssnano-utils@5.0.2(postcss@8.5.10):
+ dependencies:
+ postcss: 8.5.10
+
+ cssnano@7.1.7(postcss@8.5.10):
+ dependencies:
+ cssnano-preset-default: 7.0.15(postcss@8.5.10)
lilconfig: 3.1.3
- postcss: 8.5.6
+ postcss: 8.5.10
csso@5.0.5:
dependencies:
@@ -10558,6 +11658,8 @@ snapshots:
csstype@3.2.3: {}
+ culori@4.0.2: {}
+
data-uri-to-buffer@4.0.1:
optional: true
@@ -10569,6 +11671,10 @@ snapshots:
dependencies:
ms: 2.1.3
+ debug@4.4.3:
+ dependencies:
+ ms: 2.1.3
+
decache@4.6.2:
dependencies:
callsite: 1.0.0
@@ -10604,12 +11710,12 @@ snapshots:
es-errors: 1.3.0
gopd: 1.2.0
- define-lazy-prop@2.0.0: {}
-
define-lazy-prop@3.0.0: {}
defu@6.1.4: {}
+ defu@6.1.7: {}
+
delayed-stream@1.0.0: {}
denque@2.1.0: {}
@@ -10624,17 +11730,15 @@ snapshots:
detect-libc@2.1.2: {}
- devalue@5.6.2: {}
+ devalue@5.7.1: {}
devlop@1.1.0:
dependencies:
dequal: 2.0.3
- dfa@1.2.0: {}
-
diff3@0.0.3: {}
- diff@8.0.3: {}
+ diff@8.0.4: {}
dom-serializer@2.0.0:
dependencies:
@@ -10650,7 +11754,7 @@ snapshots:
domino@2.1.6: {}
- dompurify@3.3.1:
+ dompurify@3.4.1:
optionalDependencies:
'@types/trusted-types': 2.0.7
@@ -10662,17 +11766,17 @@ snapshots:
dot-prop@10.1.0:
dependencies:
- type-fest: 5.4.4
+ type-fest: 5.6.0
dot-prop@9.0.0:
dependencies:
type-fest: 4.41.0
optional: true
- dotenv@16.6.1: {}
-
dotenv@17.2.4: {}
+ dotenv@17.4.2: {}
+
dunder-proto@1.0.1:
dependencies:
call-bind-apply-helpers: 1.0.2
@@ -10685,7 +11789,7 @@ snapshots:
ee-first@1.1.1: {}
- electron-to-chromium@1.5.286: {}
+ electron-to-chromium@1.5.344: {}
embla-carousel-auto-height@8.6.0(embla-carousel@8.6.0):
dependencies:
@@ -10711,11 +11815,11 @@ snapshots:
dependencies:
embla-carousel: 8.6.0
- embla-carousel-vue@8.6.0(vue@3.5.28(typescript@5.9.3)):
+ embla-carousel-vue@8.6.0(vue@3.5.33(typescript@6.0.3)):
dependencies:
embla-carousel: 8.6.0
embla-carousel-reactive-utils: 8.6.0(embla-carousel@8.6.0)
- vue: 3.5.28(typescript@5.9.3)
+ vue: 3.5.33(typescript@6.0.3)
embla-carousel-wheel-gestures@8.1.0(embla-carousel@8.6.0):
dependencies:
@@ -10724,7 +11828,7 @@ snapshots:
embla-carousel@8.6.0: {}
- emoji-regex-xs@2.0.1: {}
+ emoji-regex@10.6.0: {}
emoji-regex@8.0.0: {}
@@ -10754,10 +11858,10 @@ snapshots:
engine.io-parser@5.2.3: {}
- enhanced-resolve@5.19.0:
+ enhanced-resolve@5.20.1:
dependencies:
graceful-fs: 4.2.11
- tapable: 2.3.0
+ tapable: 2.3.3
entities@4.5.0: {}
@@ -10765,6 +11869,8 @@ snapshots:
entities@7.0.1: {}
+ entities@8.0.0: {}
+
env-paths@3.0.0:
optional: true
@@ -10789,63 +11895,34 @@ snapshots:
has-tostringtag: 1.0.2
hasown: 2.0.2
- esbuild@0.25.12:
+ esbuild@0.27.7:
optionalDependencies:
- '@esbuild/aix-ppc64': 0.25.12
- '@esbuild/android-arm': 0.25.12
- '@esbuild/android-arm64': 0.25.12
- '@esbuild/android-x64': 0.25.12
- '@esbuild/darwin-arm64': 0.25.12
- '@esbuild/darwin-x64': 0.25.12
- '@esbuild/freebsd-arm64': 0.25.12
- '@esbuild/freebsd-x64': 0.25.12
- '@esbuild/linux-arm': 0.25.12
- '@esbuild/linux-arm64': 0.25.12
- '@esbuild/linux-ia32': 0.25.12
- '@esbuild/linux-loong64': 0.25.12
- '@esbuild/linux-mips64el': 0.25.12
- '@esbuild/linux-ppc64': 0.25.12
- '@esbuild/linux-riscv64': 0.25.12
- '@esbuild/linux-s390x': 0.25.12
- '@esbuild/linux-x64': 0.25.12
- '@esbuild/netbsd-arm64': 0.25.12
- '@esbuild/netbsd-x64': 0.25.12
- '@esbuild/openbsd-arm64': 0.25.12
- '@esbuild/openbsd-x64': 0.25.12
- '@esbuild/openharmony-arm64': 0.25.12
- '@esbuild/sunos-x64': 0.25.12
- '@esbuild/win32-arm64': 0.25.12
- '@esbuild/win32-ia32': 0.25.12
- '@esbuild/win32-x64': 0.25.12
-
- esbuild@0.27.3:
- optionalDependencies:
- '@esbuild/aix-ppc64': 0.27.3
- '@esbuild/android-arm': 0.27.3
- '@esbuild/android-arm64': 0.27.3
- '@esbuild/android-x64': 0.27.3
- '@esbuild/darwin-arm64': 0.27.3
- '@esbuild/darwin-x64': 0.27.3
- '@esbuild/freebsd-arm64': 0.27.3
- '@esbuild/freebsd-x64': 0.27.3
- '@esbuild/linux-arm': 0.27.3
- '@esbuild/linux-arm64': 0.27.3
- '@esbuild/linux-ia32': 0.27.3
- '@esbuild/linux-loong64': 0.27.3
- '@esbuild/linux-mips64el': 0.27.3
- '@esbuild/linux-ppc64': 0.27.3
- '@esbuild/linux-riscv64': 0.27.3
- '@esbuild/linux-s390x': 0.27.3
- '@esbuild/linux-x64': 0.27.3
- '@esbuild/netbsd-arm64': 0.27.3
- '@esbuild/netbsd-x64': 0.27.3
- '@esbuild/openbsd-arm64': 0.27.3
- '@esbuild/openbsd-x64': 0.27.3
- '@esbuild/openharmony-arm64': 0.27.3
- '@esbuild/sunos-x64': 0.27.3
- '@esbuild/win32-arm64': 0.27.3
- '@esbuild/win32-ia32': 0.27.3
- '@esbuild/win32-x64': 0.27.3
+ '@esbuild/aix-ppc64': 0.27.7
+ '@esbuild/android-arm': 0.27.7
+ '@esbuild/android-arm64': 0.27.7
+ '@esbuild/android-x64': 0.27.7
+ '@esbuild/darwin-arm64': 0.27.7
+ '@esbuild/darwin-x64': 0.27.7
+ '@esbuild/freebsd-arm64': 0.27.7
+ '@esbuild/freebsd-x64': 0.27.7
+ '@esbuild/linux-arm': 0.27.7
+ '@esbuild/linux-arm64': 0.27.7
+ '@esbuild/linux-ia32': 0.27.7
+ '@esbuild/linux-loong64': 0.27.7
+ '@esbuild/linux-mips64el': 0.27.7
+ '@esbuild/linux-ppc64': 0.27.7
+ '@esbuild/linux-riscv64': 0.27.7
+ '@esbuild/linux-s390x': 0.27.7
+ '@esbuild/linux-x64': 0.27.7
+ '@esbuild/netbsd-arm64': 0.27.7
+ '@esbuild/netbsd-x64': 0.27.7
+ '@esbuild/openbsd-arm64': 0.27.7
+ '@esbuild/openbsd-x64': 0.27.7
+ '@esbuild/openharmony-arm64': 0.27.7
+ '@esbuild/sunos-x64': 0.27.7
+ '@esbuild/win32-arm64': 0.27.7
+ '@esbuild/win32-ia32': 0.27.7
+ '@esbuild/win32-x64': 0.27.7
escalade@3.2.0: {}
@@ -10857,19 +11934,19 @@ snapshots:
escape-string-regexp@5.0.0: {}
- eslint-config-flat-gitignore@2.1.0(eslint@9.28.0(jiti@2.6.1)):
+ eslint-config-flat-gitignore@2.3.0(eslint@9.28.0(jiti@2.6.1)):
dependencies:
- '@eslint/compat': 1.4.1(eslint@9.28.0(jiti@2.6.1))
+ '@eslint/compat': 2.0.5(eslint@9.28.0(jiti@2.6.1))
eslint: 9.28.0(jiti@2.6.1)
- eslint-flat-config-utils@3.0.1:
+ eslint-flat-config-utils@3.1.0:
dependencies:
- '@eslint/config-helpers': 0.5.2
+ '@eslint/config-helpers': 0.5.5
pathe: 2.0.3
eslint-import-context@0.1.9(unrs-resolver@1.11.1):
dependencies:
- get-tsconfig: 4.13.6
+ get-tsconfig: 4.14.0
stable-hash-x: 0.2.0
optionalDependencies:
unrs-resolver: 1.11.1
@@ -10878,37 +11955,38 @@ snapshots:
dependencies:
eslint: 9.28.0(jiti@2.6.1)
- eslint-plugin-import-lite@0.5.0(eslint@9.28.0(jiti@2.6.1)):
+ eslint-plugin-import-lite@0.5.2(eslint@9.28.0(jiti@2.6.1)):
dependencies:
eslint: 9.28.0(jiti@2.6.1)
- eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.55.0(eslint@9.28.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.28.0(jiti@2.6.1)):
+ eslint-plugin-import-x@4.16.2(@typescript-eslint/utils@8.59.0(eslint@9.28.0(jiti@2.6.1))(typescript@6.0.3))(eslint@9.28.0(jiti@2.6.1)):
dependencies:
- '@typescript-eslint/types': 8.55.0
- comment-parser: 1.4.5
+ '@package-json/types': 0.0.12
+ '@typescript-eslint/types': 8.59.0
+ comment-parser: 1.4.6
debug: 4.4.1
eslint: 9.28.0(jiti@2.6.1)
eslint-import-context: 0.1.9(unrs-resolver@1.11.1)
is-glob: 4.0.3
- minimatch: 10.1.2
+ minimatch: 10.2.5
semver: 7.7.4
stable-hash-x: 0.2.0
unrs-resolver: 1.11.1
optionalDependencies:
- '@typescript-eslint/utils': 8.55.0(eslint@9.28.0(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/utils': 8.59.0(eslint@9.28.0(jiti@2.6.1))(typescript@6.0.3)
transitivePeerDependencies:
- supports-color
- eslint-plugin-jsdoc@62.5.4(eslint@9.28.0(jiti@2.6.1)):
+ eslint-plugin-jsdoc@62.9.0(eslint@9.28.0(jiti@2.6.1)):
dependencies:
- '@es-joy/jsdoccomment': 0.84.0
+ '@es-joy/jsdoccomment': 0.86.0
'@es-joy/resolve.exports': 1.2.0
are-docs-informative: 0.0.2
- comment-parser: 1.4.5
- debug: 4.4.1
+ comment-parser: 1.4.6
+ debug: 4.4.3
escape-string-regexp: 4.0.0
eslint: 9.28.0(jiti@2.6.1)
- espree: 11.1.0
+ espree: 11.2.0
esquery: 1.7.0
html-entities: 2.6.0
object-deep-merge: 2.0.0
@@ -10919,28 +11997,26 @@ snapshots:
transitivePeerDependencies:
- supports-color
- eslint-plugin-regexp@3.0.0(eslint@9.28.0(jiti@2.6.1)):
+ eslint-plugin-regexp@3.1.0(eslint@9.28.0(jiti@2.6.1)):
dependencies:
'@eslint-community/eslint-utils': 4.9.1(eslint@9.28.0(jiti@2.6.1))
'@eslint-community/regexpp': 4.12.2
- comment-parser: 1.4.5
+ comment-parser: 1.4.6
eslint: 9.28.0(jiti@2.6.1)
- jsdoc-type-pratt-parser: 7.1.1
+ jsdoc-type-pratt-parser: 7.2.0
refa: 0.12.1
regexp-ast-analysis: 0.7.1
scslre: 0.3.0
- eslint-plugin-unicorn@62.0.0(eslint@9.28.0(jiti@2.6.1)):
+ eslint-plugin-unicorn@63.0.0(eslint@9.28.0(jiti@2.6.1)):
dependencies:
'@babel/helper-validator-identifier': 7.28.5
'@eslint-community/eslint-utils': 4.9.1(eslint@9.28.0(jiti@2.6.1))
- '@eslint/plugin-kit': 0.4.1
change-case: 5.4.4
ci-info: 4.4.0
clean-regexp: 1.0.0
- core-js-compat: 3.48.0
+ core-js-compat: 3.49.0
eslint: 9.28.0(jiti@2.6.1)
- esquery: 1.7.0
find-up-simple: 1.0.1
globals: 16.5.0
indent-string: 5.0.0
@@ -10948,11 +12024,11 @@ snapshots:
jsesc: 3.1.0
pluralize: 8.0.0
regexp-tree: 0.1.27
- regjsparser: 0.13.0
+ regjsparser: 0.13.1
semver: 7.7.4
strip-indent: 4.1.1
- eslint-plugin-vue@10.7.0(@stylistic/eslint-plugin@5.8.0(eslint@9.28.0(jiti@2.6.1)))(@typescript-eslint/parser@8.55.0(eslint@9.28.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.28.0(jiti@2.6.1))(vue-eslint-parser@10.2.0(eslint@9.28.0(jiti@2.6.1))):
+ eslint-plugin-vue@10.9.0(@stylistic/eslint-plugin@5.10.0(eslint@9.28.0(jiti@2.6.1)))(@typescript-eslint/parser@8.59.0(eslint@9.28.0(jiti@2.6.1))(typescript@6.0.3))(eslint@9.28.0(jiti@2.6.1))(vue-eslint-parser@10.4.0(eslint@9.28.0(jiti@2.6.1))):
dependencies:
'@eslint-community/eslint-utils': 4.9.1(eslint@9.28.0(jiti@2.6.1))
eslint: 9.28.0(jiti@2.6.1)
@@ -10960,15 +12036,15 @@ snapshots:
nth-check: 2.1.1
postcss-selector-parser: 7.1.1
semver: 7.7.4
- vue-eslint-parser: 10.2.0(eslint@9.28.0(jiti@2.6.1))
+ vue-eslint-parser: 10.4.0(eslint@9.28.0(jiti@2.6.1))
xml-name-validator: 4.0.0
optionalDependencies:
- '@stylistic/eslint-plugin': 5.8.0(eslint@9.28.0(jiti@2.6.1))
- '@typescript-eslint/parser': 8.55.0(eslint@9.28.0(jiti@2.6.1))(typescript@5.9.3)
+ '@stylistic/eslint-plugin': 5.10.0(eslint@9.28.0(jiti@2.6.1))
+ '@typescript-eslint/parser': 8.59.0(eslint@9.28.0(jiti@2.6.1))(typescript@6.0.3)
- eslint-processor-vue-blocks@2.0.0(@vue/compiler-sfc@3.5.28)(eslint@9.28.0(jiti@2.6.1)):
+ eslint-processor-vue-blocks@2.0.0(@vue/compiler-sfc@3.5.33)(eslint@9.28.0(jiti@2.6.1)):
dependencies:
- '@vue/compiler-sfc': 3.5.28
+ '@vue/compiler-sfc': 3.5.33
eslint: 9.28.0(jiti@2.6.1)
eslint-scope@8.4.0:
@@ -10976,7 +12052,14 @@ snapshots:
esrecurse: 4.3.0
estraverse: 5.3.0
- eslint-typegen@2.3.0(eslint@9.28.0(jiti@2.6.1)):
+ eslint-scope@9.1.2:
+ dependencies:
+ '@types/esrecurse': 4.3.1
+ '@types/estree': 1.0.8
+ esrecurse: 4.3.0
+ estraverse: 5.3.0
+
+ eslint-typegen@2.3.1(eslint@9.28.0(jiti@2.6.1)):
dependencies:
eslint: 9.28.0(jiti@2.6.1)
json-schema-to-typescript-lite: 15.0.0
@@ -10986,7 +12069,7 @@ snapshots:
eslint-visitor-keys@4.2.1: {}
- eslint-visitor-keys@5.0.0: {}
+ eslint-visitor-keys@5.0.1: {}
eslint@9.28.0(jiti@2.6.1):
dependencies:
@@ -10998,7 +12081,7 @@ snapshots:
'@eslint/eslintrc': 3.3.5
'@eslint/js': 9.28.0
'@eslint/plugin-kit': 0.3.5
- '@humanfs/node': 0.16.7
+ '@humanfs/node': 0.16.8
'@humanwhocodes/module-importer': 1.0.1
'@humanwhocodes/retry': 0.4.3
'@types/estree': 1.0.8
@@ -11006,7 +12089,7 @@ snapshots:
ajv: 6.14.0
chalk: 4.1.2
cross-spawn: 7.0.6
- debug: 4.4.1
+ debug: 4.4.3
escape-string-regexp: 4.0.0
eslint-scope: 8.4.0
eslint-visitor-keys: 4.2.1
@@ -11032,15 +12115,15 @@ snapshots:
espree@10.4.0:
dependencies:
- acorn: 8.15.0
- acorn-jsx: 5.3.2(acorn@8.15.0)
+ acorn: 8.16.0
+ acorn-jsx: 5.3.2(acorn@8.16.0)
eslint-visitor-keys: 4.2.1
- espree@11.1.0:
+ espree@11.2.0:
dependencies:
- acorn: 8.15.0
- acorn-jsx: 5.3.2(acorn@8.15.0)
- eslint-visitor-keys: 5.0.0
+ acorn: 8.16.0
+ acorn-jsx: 5.3.2(acorn@8.16.0)
+ eslint-visitor-keys: 5.0.1
esquery@1.7.0:
dependencies:
@@ -11084,21 +12167,6 @@ snapshots:
signal-exit: 4.1.0
strip-final-newline: 3.0.0
- execa@9.6.1:
- 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.3.0
- signal-exit: 4.1.0
- strip-final-newline: 4.0.0
- yoctocolors: 2.1.2
-
expand-template@2.0.3:
optional: true
@@ -11122,11 +12190,28 @@ snapshots:
fast-levenshtein@2.0.6: {}
- fast-npm-meta@0.4.8: {}
+ fast-npm-meta@1.5.0: {}
- fast-xml-parser@5.3.5:
+ fast-string-truncated-width@1.2.1: {}
+
+ fast-string-width@1.1.0:
+ dependencies:
+ fast-string-truncated-width: 1.2.1
+
+ fast-wrap-ansi@0.1.6:
+ dependencies:
+ fast-string-width: 1.1.0
+
+ fast-xml-builder@1.1.5:
+ dependencies:
+ path-expression-matcher: 1.5.0
+
+ fast-xml-parser@5.7.1:
dependencies:
- strnum: 2.1.2
+ '@nodable/entities': 2.1.0
+ fast-xml-builder: 1.1.5
+ path-expression-matcher: 1.5.0
+ strnum: 2.2.3
fastq@1.20.1:
dependencies:
@@ -11136,6 +12221,10 @@ snapshots:
optionalDependencies:
picomatch: 4.0.3
+ fdir@6.5.0(picomatch@4.0.4):
+ optionalDependencies:
+ picomatch: 4.0.4
+
fetch-blob@3.2.0:
dependencies:
node-domexception: 1.0.0
@@ -11144,12 +12233,6 @@ snapshots:
fflate@0.4.8: {}
- fflate@0.7.4: {}
-
- figures@6.1.0:
- dependencies:
- is-unicode-supported: 2.1.0
-
file-entry-cache@8.0.0:
dependencies:
flat-cache: 4.0.1
@@ -11190,30 +12273,57 @@ snapshots:
follow-redirects@1.15.11: {}
- fontaine@0.6.0:
+ fontaine@0.8.0:
dependencies:
- '@capsizecss/metrics': 3.6.2
- '@capsizecss/unpack': 2.4.0
- css-tree: 3.1.0
+ '@capsizecss/unpack': 4.0.0
+ css-tree: 3.2.1
magic-regexp: 0.10.0
magic-string: 0.30.21
pathe: 2.0.3
ufo: 1.6.3
unplugin: 2.3.11
- transitivePeerDependencies:
- - encoding
- fontkit@2.0.4:
+ fontkitten@1.0.3:
dependencies:
- '@swc/helpers': 0.5.18
- brotli: 1.3.3
- clone: 2.1.2
- dfa: 1.2.0
- fast-deep-equal: 3.1.3
- restructure: 3.0.2
tiny-inflate: 1.0.3
- unicode-properties: 1.4.1
- unicode-trie: 2.0.0
+
+ fontless@0.2.1(@netlify/blobs@9.1.2)(db0@0.3.4(better-sqlite3@11.10.0))(ioredis@5.10.1)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)):
+ dependencies:
+ consola: 3.4.2
+ css-tree: 3.2.1
+ defu: 6.1.7
+ esbuild: 0.27.7
+ fontaine: 0.8.0
+ jiti: 2.6.1
+ lightningcss: 1.32.0
+ magic-string: 0.30.21
+ ohash: 2.0.11
+ pathe: 2.0.3
+ ufo: 1.6.3
+ unifont: 0.7.4
+ unstorage: 1.17.5(@netlify/blobs@9.1.2)(db0@0.3.4(better-sqlite3@11.10.0))(ioredis@5.10.1)
+ optionalDependencies:
+ vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)
+ transitivePeerDependencies:
+ - '@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
for-each@0.3.5:
dependencies:
@@ -11239,13 +12349,11 @@ snapshots:
fraction.js@5.3.4: {}
- framer-motion@12.34.0(react@19.2.4):
+ framer-motion@12.38.0:
dependencies:
- motion-dom: 12.34.0
- motion-utils: 12.29.2
+ motion-dom: 12.38.0
+ motion-utils: 12.36.0
tslib: 2.8.1
- optionalDependencies:
- react: 19.2.4
fresh@2.0.0: {}
@@ -11257,7 +12365,7 @@ snapshots:
function-bind@1.1.2: {}
- fuse.js@7.1.0: {}
+ fuse.js@7.3.0: {}
fzf@0.5.2: {}
@@ -11265,6 +12373,8 @@ snapshots:
get-caller-file@2.0.5: {}
+ get-east-asian-width@1.5.0: {}
+
get-intrinsic@1.3.0:
dependencies:
call-bind-apply-helpers: 1.0.2
@@ -11291,12 +12401,7 @@ snapshots:
get-stream@8.0.1: {}
- get-stream@9.0.1:
- dependencies:
- '@sec-ant/readable-stream': 0.4.1
- is-stream: 4.0.1
-
- get-tsconfig@4.13.6:
+ get-tsconfig@4.14.0:
dependencies:
resolve-pkg-maps: 1.0.0
@@ -11309,7 +12414,7 @@ snapshots:
nypm: 0.6.5
pathe: 2.0.3
- giget@3.1.2: {}
+ giget@3.2.0: {}
git-up@8.1.1:
dependencies:
@@ -11337,16 +12442,16 @@ snapshots:
dependencies:
foreground-child: 3.3.1
jackspeak: 3.4.3
- minimatch: 9.0.5
- minipass: 7.1.2
+ minimatch: 9.0.9
+ minipass: 7.1.3
package-json-from-dist: 1.0.1
path-scurry: 1.11.1
- glob@13.0.1:
+ glob@13.0.6:
dependencies:
- minimatch: 10.1.2
- minipass: 7.1.2
- path-scurry: 2.0.1
+ minimatch: 10.2.5
+ minipass: 7.1.3
+ path-scurry: 2.0.2
global-directory@4.0.1:
dependencies:
@@ -11354,13 +12459,11 @@ snapshots:
globals@14.0.0: {}
- globals@15.15.0: {}
-
globals@16.5.0: {}
- globals@17.3.0: {}
+ globals@17.5.0: {}
- globby@16.1.0:
+ globby@16.2.0:
dependencies:
'@sindresorhus/merge-streams': 4.0.0
fast-glob: 3.3.3
@@ -11391,11 +12494,11 @@ snapshots:
dependencies:
duplexer: 0.1.2
- h3@1.15.5:
+ h3@1.15.11:
dependencies:
- cookie-es: 1.2.2
+ cookie-es: 1.2.3
crossws: 0.3.5
- defu: 6.1.4
+ defu: 6.1.7
destr: 2.0.5
iron-webcrypto: 1.2.1
node-mock-http: 1.0.4
@@ -11419,6 +12522,10 @@ snapshots:
dependencies:
function-bind: 1.1.2
+ hasown@2.0.3:
+ dependencies:
+ function-bind: 1.1.2
+
hast-util-embedded@3.0.0:
dependencies:
'@types/hast': 3.0.4
@@ -11561,8 +12668,6 @@ snapshots:
property-information: 7.1.0
space-separated-tokens: 2.0.2
- hex-rgb@4.3.0: {}
-
hey-listen@1.0.8: {}
hogan.js@3.0.2:
@@ -11572,7 +12677,7 @@ snapshots:
hookable@5.5.3: {}
- hookable@6.0.1: {}
+ hookable@6.1.1: {}
htm@3.1.1: {}
@@ -11606,16 +12711,10 @@ snapshots:
transitivePeerDependencies:
- supports-color
- httpxy@0.1.7: {}
+ httpxy@0.5.1: {}
human-signals@5.0.0: {}
- human-signals@8.0.1: {}
-
- iconv-lite@0.4.24:
- dependencies:
- safer-buffer: 2.1.2
-
ieee754@1.2.1: {}
ignore@5.3.2: {}
@@ -11631,13 +12730,13 @@ snapshots:
parent-module: 1.0.1
resolve-from: 4.0.0
- impound@1.0.0:
+ impound@1.1.5:
dependencies:
- exsolve: 1.0.8
- mocked-exports: 0.1.1
+ '@jridgewell/trace-mapping': 0.3.31
+ es-module-lexer: 2.0.0
pathe: 2.0.3
- unplugin: 2.3.11
- unplugin-utils: 0.2.5
+ unplugin: 3.0.0
+ unplugin-utils: 0.3.1
imurmurhash@0.1.4: {}
@@ -11680,9 +12779,9 @@ snapshots:
zod: 4.3.6
zod-to-json-schema: 3.24.6(zod@4.3.6)
- ioredis@5.9.2:
+ ioredis@5.10.1:
dependencies:
- '@ioredis/commands': 1.5.0
+ '@ioredis/commands': 1.5.1
cluster-key-slot: 1.1.2
debug: 4.4.1
denque: 2.1.0
@@ -11707,13 +12806,13 @@ snapshots:
is-builtin-module@5.0.0:
dependencies:
- builtin-modules: 5.0.0
+ builtin-modules: 5.1.0
is-callable@1.2.7: {}
is-core-module@2.16.1:
dependencies:
- hasown: 2.0.2
+ hasown: 2.0.3
is-decimal@2.0.1: {}
@@ -11731,6 +12830,8 @@ snapshots:
is-hexadecimal@2.0.1: {}
+ is-in-ssh@1.0.0: {}
+
is-inside-container@1.0.0:
dependencies:
is-docker: 3.0.0
@@ -11760,37 +12861,27 @@ snapshots:
is-stream@3.0.0: {}
- is-stream@4.0.1: {}
-
is-typed-array@1.1.15:
dependencies:
which-typed-array: 1.1.20
- is-unicode-supported@2.1.0: {}
-
- is-what@5.5.0: {}
-
is-wsl@2.2.0:
dependencies:
is-docker: 2.2.1
- is-wsl@3.1.0:
+ is-wsl@3.1.1:
dependencies:
is-inside-container: 1.0.0
- is64bit@2.0.0:
- dependencies:
- system-architecture: 0.1.0
-
isarray@1.0.0: {}
isarray@2.0.5: {}
isexe@2.0.0: {}
- isexe@3.1.5: {}
+ isexe@4.0.0: {}
- isomorphic-git@1.36.3:
+ isomorphic-git@1.37.5:
dependencies:
async-lock: 1.4.1
clean-git-ref: 2.0.1
@@ -11804,6 +12895,8 @@ snapshots:
sha.js: 2.4.12
simple-get: 4.0.1
+ isomorphic.js@0.2.5: {}
+
jackspeak@3.4.3:
dependencies:
'@isaacs/cliui': 8.0.2
@@ -11820,7 +12913,7 @@ snapshots:
dependencies:
argparse: 2.0.1
- jsdoc-type-pratt-parser@7.1.1: {}
+ jsdoc-type-pratt-parser@7.2.0: {}
jsesc@3.1.0: {}
@@ -11833,8 +12926,6 @@ snapshots:
json-schema-traverse@0.4.1: {}
- json-schema@0.4.0: {}
-
json-stable-stringify-without-jsonify@1.0.1: {}
json5@2.2.3: {}
@@ -11846,17 +12937,13 @@ snapshots:
dependencies:
json-buffer: 3.0.1
- kleur@3.0.3: {}
-
kleur@4.1.5: {}
klona@2.0.6: {}
knitwork@1.3.0: {}
- kolorist@1.8.0: {}
-
- launch-editor@2.12.0:
+ launch-editor@2.13.2:
dependencies:
picocolors: 1.1.1
shell-quote: 1.8.3
@@ -11870,6 +12957,10 @@ snapshots:
prelude-ls: 1.2.1
type-check: 0.4.0
+ lib0@0.2.117:
+ dependencies:
+ isomorphic.js: 0.2.5
+
lighthouse-logger@2.0.2:
dependencies:
debug: 4.4.1
@@ -11877,88 +12968,87 @@ snapshots:
transitivePeerDependencies:
- supports-color
- lightningcss-android-arm64@1.30.2:
+ lightningcss-android-arm64@1.32.0:
optional: true
- lightningcss-darwin-arm64@1.30.2:
+ lightningcss-darwin-arm64@1.32.0:
optional: true
- lightningcss-darwin-x64@1.30.2:
+ lightningcss-darwin-x64@1.32.0:
optional: true
- lightningcss-freebsd-x64@1.30.2:
+ lightningcss-freebsd-x64@1.32.0:
optional: true
- lightningcss-linux-arm-gnueabihf@1.30.2:
+ lightningcss-linux-arm-gnueabihf@1.32.0:
optional: true
- lightningcss-linux-arm64-gnu@1.30.2:
+ lightningcss-linux-arm64-gnu@1.32.0:
optional: true
- lightningcss-linux-arm64-musl@1.30.2:
+ lightningcss-linux-arm64-musl@1.32.0:
optional: true
- lightningcss-linux-x64-gnu@1.30.2:
+ lightningcss-linux-x64-gnu@1.32.0:
optional: true
- lightningcss-linux-x64-musl@1.30.2:
+ lightningcss-linux-x64-musl@1.32.0:
optional: true
- lightningcss-win32-arm64-msvc@1.30.2:
+ lightningcss-win32-arm64-msvc@1.32.0:
optional: true
- lightningcss-win32-x64-msvc@1.30.2:
+ lightningcss-win32-x64-msvc@1.32.0:
optional: true
- lightningcss@1.30.2:
+ lightningcss@1.32.0:
dependencies:
detect-libc: 2.1.2
optionalDependencies:
- lightningcss-android-arm64: 1.30.2
- lightningcss-darwin-arm64: 1.30.2
- lightningcss-darwin-x64: 1.30.2
- lightningcss-freebsd-x64: 1.30.2
- lightningcss-linux-arm-gnueabihf: 1.30.2
- lightningcss-linux-arm64-gnu: 1.30.2
- lightningcss-linux-arm64-musl: 1.30.2
- lightningcss-linux-x64-gnu: 1.30.2
- lightningcss-linux-x64-musl: 1.30.2
- lightningcss-win32-arm64-msvc: 1.30.2
- lightningcss-win32-x64-msvc: 1.30.2
+ lightningcss-android-arm64: 1.32.0
+ lightningcss-darwin-arm64: 1.32.0
+ lightningcss-darwin-x64: 1.32.0
+ lightningcss-freebsd-x64: 1.32.0
+ lightningcss-linux-arm-gnueabihf: 1.32.0
+ lightningcss-linux-arm64-gnu: 1.32.0
+ lightningcss-linux-arm64-musl: 1.32.0
+ lightningcss-linux-x64-gnu: 1.32.0
+ lightningcss-linux-x64-musl: 1.32.0
+ lightningcss-win32-arm64-msvc: 1.32.0
+ lightningcss-win32-x64-msvc: 1.32.0
lilconfig@3.1.3: {}
- linebreak@1.1.0:
- dependencies:
- base64-js: 0.0.8
- unicode-trie: 2.0.0
+ linkifyjs@4.3.2: {}
- listhen@1.9.0:
+ listhen@1.9.1(srvx@0.11.15):
dependencies:
'@parcel/watcher': 2.5.6
'@parcel/watcher-wasm': 2.5.6
- citty: 0.1.6
- clipboardy: 4.0.0
+ citty: 0.2.2
consola: 3.4.2
- crossws: 0.3.5
- defu: 6.1.4
+ crossws: 0.4.5(srvx@0.11.15)
+ defu: 6.1.7
get-port-please: 3.2.0
- h3: 1.15.5
+ h3: 1.15.11
http-shutdown: 1.2.2
jiti: 2.6.1
- mlly: 1.8.0
- node-forge: 1.3.3
- pathe: 1.1.2
- std-env: 3.10.0
+ mlly: 1.8.2
+ node-forge: 1.4.0
+ pathe: 2.0.3
+ std-env: 4.1.0
+ tinyclip: 0.1.12
ufo: 1.6.3
untun: 0.1.3
- uqr: 0.1.2
+ uqr: 0.1.3
+ transitivePeerDependencies:
+ - srvx
load-tsconfig@0.2.5: {}
local-pkg@1.1.2:
dependencies:
- mlly: 1.8.0
+ mlly: 1.8.2
pkg-types: 2.3.0
quansync: 0.2.11
@@ -11990,7 +13080,13 @@ snapshots:
lodash.uniq@4.5.0: {}
- lodash@4.17.23: {}
+ lodash@4.18.1: {}
+
+ logs-sdk@0.0.6:
+ dependencies:
+ magic-string: 0.30.21
+ oxc-parser: 0.126.0
+ unplugin: 3.0.0
long@5.3.2: {}
@@ -12000,7 +13096,7 @@ snapshots:
lru-cache@10.4.3: {}
- lru-cache@11.2.5: {}
+ lru-cache@11.3.5: {}
lru-cache@5.1.1:
dependencies:
@@ -12010,7 +13106,7 @@ snapshots:
dependencies:
estree-walker: 3.0.3
magic-string: 0.30.21
- mlly: 1.8.0
+ mlly: 1.8.2
regexp-tree: 0.1.27
type-level-regexp: 0.1.17
ufo: 1.6.3
@@ -12026,7 +13122,7 @@ snapshots:
magicast@0.5.2:
dependencies:
- '@babel/parser': 7.29.0
+ '@babel/parser': 7.29.2
'@babel/types': 7.29.0
source-map-js: 1.2.1
@@ -12036,6 +13132,8 @@ snapshots:
optionalDependencies:
react: 19.2.4
+ marked@17.0.6: {}
+
marky@1.3.0: {}
math-intrinsics@1.1.0: {}
@@ -12047,7 +13145,7 @@ snapshots:
unist-util-is: 6.0.1
unist-util-visit-parents: 6.0.2
- mdast-util-from-markdown@2.0.2:
+ mdast-util-from-markdown@2.0.3:
dependencies:
'@types/mdast': 4.0.4
'@types/unist': 3.0.3
@@ -12076,7 +13174,7 @@ snapshots:
dependencies:
'@types/mdast': 4.0.4
devlop: 1.1.0
- mdast-util-from-markdown: 2.0.2
+ mdast-util-from-markdown: 2.0.3
mdast-util-to-markdown: 2.1.2
micromark-util-normalize-identifier: 2.0.1
transitivePeerDependencies:
@@ -12085,7 +13183,7 @@ snapshots:
mdast-util-gfm-strikethrough@2.0.0:
dependencies:
'@types/mdast': 4.0.4
- mdast-util-from-markdown: 2.0.2
+ mdast-util-from-markdown: 2.0.3
mdast-util-to-markdown: 2.1.2
transitivePeerDependencies:
- supports-color
@@ -12095,7 +13193,7 @@ snapshots:
'@types/mdast': 4.0.4
devlop: 1.1.0
markdown-table: 3.0.4
- mdast-util-from-markdown: 2.0.2
+ mdast-util-from-markdown: 2.0.3
mdast-util-to-markdown: 2.1.2
transitivePeerDependencies:
- supports-color
@@ -12104,14 +13202,14 @@ snapshots:
dependencies:
'@types/mdast': 4.0.4
devlop: 1.1.0
- mdast-util-from-markdown: 2.0.2
+ mdast-util-from-markdown: 2.0.3
mdast-util-to-markdown: 2.1.2
transitivePeerDependencies:
- supports-color
mdast-util-gfm@3.1.0:
dependencies:
- mdast-util-from-markdown: 2.0.2
+ mdast-util-from-markdown: 2.0.3
mdast-util-gfm-autolink-literal: 2.0.1
mdast-util-gfm-footnote: 2.1.0
mdast-util-gfm-strikethrough: 2.0.0
@@ -12156,7 +13254,7 @@ snapshots:
mdn-data@2.0.28: {}
- mdn-data@2.12.2: {}
+ mdn-data@2.27.1: {}
merge-stream@2.0.0: {}
@@ -12341,7 +13439,7 @@ snapshots:
micromark@4.0.2:
dependencies:
- '@types/debug': 4.1.12
+ '@types/debug': 4.1.13
debug: 4.4.1
decode-named-character-reference: 1.3.0
devlop: 1.1.0
@@ -12364,7 +13462,7 @@ snapshots:
micromatch@4.0.8:
dependencies:
braces: 3.0.3
- picomatch: 2.3.1
+ picomatch: 2.3.2
mime-db@1.52.0: {}
@@ -12388,21 +13486,21 @@ snapshots:
minimark@0.2.0: {}
- minimatch@10.1.2:
+ minimatch@10.2.5:
dependencies:
- '@isaacs/brace-expansion': 5.0.1
+ brace-expansion: 5.0.5
minimatch@3.1.5:
dependencies:
- brace-expansion: 1.1.13
+ brace-expansion: 1.1.14
- minimatch@5.1.6:
+ minimatch@5.1.9:
dependencies:
- brace-expansion: 2.0.2
+ brace-expansion: 2.1.0
- minimatch@9.0.5:
+ minimatch@9.0.9:
dependencies:
- brace-expansion: 2.0.2
+ brace-expansion: 2.1.0
minimist@1.2.8: {}
@@ -12410,16 +13508,14 @@ snapshots:
dependencies:
minimist: 1.2.8
- minipass@7.1.2: {}
+ minipass@7.1.3: {}
minizlib@3.1.0:
dependencies:
- minipass: 7.1.2
+ minipass: 7.1.3
mitt@2.1.0: {}
- mitt@3.0.1: {}
-
mkdirp-classic@0.5.3:
optional: true
@@ -12432,21 +13528,29 @@ snapshots:
pkg-types: 1.3.1
ufo: 1.6.3
+ mlly@1.8.2:
+ dependencies:
+ acorn: 8.16.0
+ pathe: 2.0.3
+ pkg-types: 1.3.1
+ ufo: 1.6.3
+
mocked-exports@0.1.1: {}
- motion-dom@12.34.0:
+ motion-dom@12.38.0:
dependencies:
- motion-utils: 12.29.2
+ motion-utils: 12.36.0
- motion-utils@12.29.2: {}
+ motion-utils@12.36.0: {}
- motion-v@1.10.2(@vueuse/core@13.9.0(vue@3.5.28(typescript@5.9.3)))(react@19.2.4)(vue@3.5.28(typescript@5.9.3)):
+ motion-v@2.2.1(@vueuse/core@14.2.1(vue@3.5.33(typescript@6.0.3)))(vue@3.5.33(typescript@6.0.3)):
dependencies:
- '@vueuse/core': 13.9.0(vue@3.5.28(typescript@5.9.3))
- framer-motion: 12.34.0(react@19.2.4)
+ '@vueuse/core': 14.2.1(vue@3.5.33(typescript@6.0.3))
+ framer-motion: 12.38.0
hey-listen: 1.0.8
- motion-dom: 12.34.0
- vue: 3.5.28(typescript@5.9.3)
+ motion-dom: 12.38.0
+ motion-utils: 12.36.0
+ vue: 3.5.33(typescript@6.0.3)
transitivePeerDependencies:
- '@emotion/is-prop-valid'
- react
@@ -12460,9 +13564,7 @@ snapshots:
nanoid@3.3.11: {}
- nanoid@5.1.6: {}
-
- nanotar@0.2.0: {}
+ nanotar@0.3.0: {}
napi-build-utils@2.0.0:
optional: true
@@ -12473,57 +13575,57 @@ snapshots:
netlify@13.3.5:
dependencies:
- '@netlify/open-api': 2.52.0
+ '@netlify/open-api': 2.53.0
lodash-es: 4.18.1
micro-api-client: 3.3.0
node-fetch: 3.3.2
p-wait-for: 5.0.2
- qs: 6.15.0
+ qs: 6.15.1
optional: true
- nitropack@2.13.1(@netlify/blobs@9.1.2)(better-sqlite3@11.10.0):
+ nitropack@2.13.3(@netlify/blobs@9.1.2)(better-sqlite3@11.10.0)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(srvx@0.11.15):
dependencies:
'@cloudflare/kv-asset-handler': 0.4.2
- '@rollup/plugin-alias': 6.0.0(rollup@4.57.1)
- '@rollup/plugin-commonjs': 29.0.0(rollup@4.57.1)
- '@rollup/plugin-inject': 5.0.5(rollup@4.57.1)
- '@rollup/plugin-json': 6.1.0(rollup@4.57.1)
- '@rollup/plugin-node-resolve': 16.0.3(rollup@4.57.1)
- '@rollup/plugin-replace': 6.0.3(rollup@4.57.1)
- '@rollup/plugin-terser': 0.4.4(rollup@4.57.1)
- '@vercel/nft': 1.3.0(rollup@4.57.1)
+ '@rollup/plugin-alias': 6.0.0(rollup@4.60.2)
+ '@rollup/plugin-commonjs': 29.0.2(rollup@4.60.2)
+ '@rollup/plugin-inject': 5.0.5(rollup@4.60.2)
+ '@rollup/plugin-json': 6.1.0(rollup@4.60.2)
+ '@rollup/plugin-node-resolve': 16.0.3(rollup@4.60.2)
+ '@rollup/plugin-replace': 6.0.3(rollup@4.60.2)
+ '@rollup/plugin-terser': 1.0.0(rollup@4.60.2)
+ '@vercel/nft': 1.5.0(rollup@4.60.2)
archiver: 7.0.1
- c12: 3.3.3(magicast@0.5.2)
+ c12: 3.3.4(magicast@0.5.2)
chokidar: 5.0.0
- citty: 0.1.6
+ citty: 0.2.2
compatx: 0.2.0
confbox: 0.2.4
consola: 3.4.2
- cookie-es: 2.0.0
- croner: 9.1.0
+ cookie-es: 2.0.1
+ croner: 10.0.1
crossws: 0.3.5
db0: 0.3.4(better-sqlite3@11.10.0)
- defu: 6.1.4
+ defu: 6.1.7
destr: 2.0.5
dot-prop: 10.1.0
- esbuild: 0.27.3
+ esbuild: 0.27.7
escape-string-regexp: 5.0.0
etag: 1.8.1
exsolve: 1.0.8
- globby: 16.1.0
+ globby: 16.2.0
gzip-size: 7.0.0
- h3: 1.15.5
+ h3: 1.15.11
hookable: 5.5.3
- httpxy: 0.1.7
- ioredis: 5.9.2
+ httpxy: 0.5.1
+ ioredis: 5.10.1
jiti: 2.6.1
klona: 2.0.6
knitwork: 1.3.0
- listhen: 1.9.0
+ listhen: 1.9.1(srvx@0.11.15)
magic-string: 0.30.21
magicast: 0.5.2
mime: 4.1.0
- mlly: 1.8.0
+ mlly: 1.8.2
node-fetch-native: 1.6.7
node-mock-http: 1.0.4
ofetch: 1.5.1
@@ -12533,25 +13635,25 @@ snapshots:
pkg-types: 2.3.0
pretty-bytes: 7.1.0
radix3: 1.1.2
- rollup: 4.57.1
- rollup-plugin-visualizer: 6.0.5(rollup@4.57.1)
+ rollup: 4.60.2
+ rollup-plugin-visualizer: 7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2)
scule: 1.3.0
semver: 7.7.4
serve-placeholder: 2.0.2
serve-static: 2.2.1
source-map: 0.7.6
- std-env: 3.10.0
+ std-env: 4.1.0
ufo: 1.6.3
ultrahtml: 1.6.0
uncrypto: 0.1.3
unctx: 2.5.0
unenv: 2.0.0-rc.24
- unimport: 5.6.0
+ unimport: 6.1.1
unplugin-utils: 0.3.1
- unstorage: 1.17.4(@netlify/blobs@9.1.2)(db0@0.3.4(better-sqlite3@11.10.0))(ioredis@5.9.2)
+ unstorage: 1.17.5(@netlify/blobs@9.1.2)(db0@0.3.4(better-sqlite3@11.10.0))(ioredis@5.10.1)
untyped: 2.0.0
unwasm: 0.5.3
- youch: 4.1.0-beta.13
+ youch: 4.1.1
youch-core: 0.3.3
transitivePeerDependencies:
- '@azure/app-configuration'
@@ -12572,6 +13674,7 @@ snapshots:
- '@vercel/kv'
- aws4fetch
- bare-abort-controller
+ - bare-buffer
- better-sqlite3
- drizzle-orm
- encoding
@@ -12580,6 +13683,7 @@ snapshots:
- react-native-b4a
- rolldown
- sqlite3
+ - srvx
- supports-color
- uploadthing
@@ -12613,13 +13717,13 @@ snapshots:
formdata-polyfill: 4.0.10
optional: true
- node-forge@1.3.3: {}
+ node-forge@1.4.0: {}
node-gyp-build@4.8.4: {}
node-mock-http@1.0.4: {}
- node-releases@2.0.27: {}
+ node-releases@2.0.38: {}
nopt@1.0.10:
dependencies:
@@ -12646,38 +13750,37 @@ snapshots:
dependencies:
boolbase: 1.0.0
- nuxt-component-meta@0.17.1(magicast@0.5.2):
+ nuxt-component-meta@0.17.2(magicast@0.5.2):
dependencies:
- '@nuxt/kit': 4.3.1(magicast@0.5.2)
+ '@nuxt/kit': 4.4.2(magicast@0.5.2)
citty: 0.1.6
- mlly: 1.8.0
+ mlly: 1.8.2
ohash: 2.0.11
scule: 1.3.0
typescript: 5.9.3
ufo: 1.6.3
- vue-component-meta: 3.2.4(typescript@5.9.3)
+ vue-component-meta: 3.2.7(typescript@5.9.3)
transitivePeerDependencies:
- magicast
- nuxt-link-checker@4.3.9(@netlify/blobs@9.1.2)(db0@0.3.4(better-sqlite3@11.10.0))(ioredis@5.9.2)(magicast@0.5.2)(vite@7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2))(vue@3.5.28(typescript@5.9.3)):
+ nuxt-link-checker@5.0.9(400458dca2fcb8943a98fc83f55aa892):
dependencies:
- '@nuxt/devtools-kit': 3.1.1(magicast@0.5.2)(vite@7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2))
- '@nuxt/kit': 4.3.1(magicast@0.5.2)
- '@vueuse/core': 14.2.0(vue@3.5.28(typescript@5.9.3))
+ '@nuxt/kit': 4.4.2(magicast@0.5.2)
+ '@vueuse/core': 14.2.1(vue@3.5.33(typescript@6.0.3))
consola: 3.4.2
- diff: 8.0.3
- fuse.js: 7.1.0
+ diff: 8.0.4
+ fuse.js: 7.3.0
magic-string: 0.30.21
- nuxt-site-config: 3.2.19(magicast@0.5.2)(vite@7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2))(vue@3.5.28(typescript@5.9.3))
+ nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3)
+ nuxt-site-config: 4.0.8(@nuxt/schema@4.4.2)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3))(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))(zod@4.3.6)
+ nuxtseo-shared: 5.1.3(1ea63fa9df7940a4f1f1de81ecc8f7ac)
ofetch: 1.5.1
pathe: 2.0.3
pkg-types: 2.3.0
radix3: 1.1.2
- sirv: 3.0.2
- std-env: 3.10.0
ufo: 1.6.3
ultrahtml: 1.6.0
- unstorage: 1.17.4(@netlify/blobs@9.1.2)(db0@0.3.4(better-sqlite3@11.10.0))(ioredis@5.9.2)
+ unstorage: 1.17.5(@netlify/blobs@9.1.2)(db0@0.3.4(better-sqlite3@11.10.0))(ioredis@5.10.1)
transitivePeerDependencies:
- '@azure/app-configuration'
- '@azure/cosmos'
@@ -12688,6 +13791,7 @@ snapshots:
- '@capacitor/preferences'
- '@deno/kv'
- '@netlify/blobs'
+ - '@nuxt/schema'
- '@planetscale/database'
- '@upstash/redis'
- '@vercel/blob'
@@ -12701,6 +13805,7 @@ snapshots:
- uploadthing
- vite
- vue
+ - zod
nuxt-llms@0.2.0(magicast@0.5.2):
dependencies:
@@ -12708,177 +13813,247 @@ snapshots:
transitivePeerDependencies:
- magicast
- nuxt-og-image@5.1.13(@unhead/vue@2.1.4(vue@3.5.28(typescript@5.9.3)))(magicast@0.5.2)(unstorage@1.17.4(@netlify/blobs@9.1.2)(db0@0.3.4(better-sqlite3@11.10.0))(ioredis@5.9.2))(vite@7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2))(vue@3.5.28(typescript@5.9.3)):
+ nuxt-og-image@6.4.7(5faa756313c8245d53c4b9eebf79d3a4):
dependencies:
- '@nuxt/devtools-kit': 3.1.1(magicast@0.5.2)(vite@7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2))
- '@nuxt/kit': 4.3.1(magicast@0.5.2)
- '@resvg/resvg-js': 2.6.2
- '@resvg/resvg-wasm': 2.6.2
- '@unhead/vue': 2.1.4(vue@3.5.28(typescript@5.9.3))
- '@unocss/core': 66.6.0
- '@unocss/preset-wind3': 66.6.0
+ '@clack/prompts': 1.2.0
+ '@nuxt/kit': 4.4.2(magicast@0.5.2)
+ '@unhead/vue': 2.1.13(vue@3.5.33(typescript@6.0.3))
+ '@vue/compiler-sfc': 3.5.33
chrome-launcher: 1.2.1
consola: 3.4.2
- defu: 6.1.4
- execa: 9.6.1
- image-size: 2.0.2
+ culori: 4.0.2
+ defu: 6.1.7
+ devalue: 5.7.1
+ exsolve: 1.0.8
+ lightningcss: 1.32.0
magic-string: 0.30.21
+ magicast: 0.5.2
mocked-exports: 0.1.1
- nuxt-site-config: 3.2.19(magicast@0.5.2)(vite@7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2))(vue@3.5.28(typescript@5.9.3))
+ nuxt-site-config: 4.0.8(@nuxt/schema@4.4.2)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3))(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))(zod@4.3.6)
+ nuxtseo-shared: 5.1.3(1ea63fa9df7940a4f1f1de81ecc8f7ac)
nypm: 0.6.5
ofetch: 1.5.1
ohash: 2.0.11
+ oxc-parser: 0.127.0
+ oxc-walker: 0.7.0(oxc-parser@0.127.0)
pathe: 2.0.3
pkg-types: 2.3.0
- playwright-core: 1.58.2
radix3: 1.1.2
- satori: 0.18.4
- satori-html: 0.3.2
- sirv: 3.0.2
- std-env: 3.10.0
+ std-env: 4.1.0
strip-literal: 3.1.0
+ tinyexec: 1.1.1
+ tinyglobby: 0.2.16
ufo: 1.6.3
- unplugin: 2.3.11
- unstorage: 1.17.4(@netlify/blobs@9.1.2)(db0@0.3.4(better-sqlite3@11.10.0))(ioredis@5.9.2)
- unwasm: 0.5.3
- yoga-wasm-web: 0.3.3
+ ultrahtml: 1.6.0
+ unplugin: 3.0.0
+ unstorage: 1.17.5(@netlify/blobs@9.1.2)(db0@0.3.4(better-sqlite3@11.10.0))(ioredis@5.10.1)
+ optionalDependencies:
+ '@resvg/resvg-js': 2.6.2
+ '@resvg/resvg-wasm': 2.6.2
+ '@takumi-rs/core': 1.1.0
+ fontless: 0.2.1(@netlify/blobs@9.1.2)(db0@0.3.4(better-sqlite3@11.10.0))(ioredis@5.10.1)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
+ playwright-core: 1.58.2
+ sharp: 0.34.5
+ tailwindcss: 4.2.4
+ unifont: 0.7.4
transitivePeerDependencies:
- - magicast
+ - '@nuxt/schema'
+ - nuxt
- supports-color
- vite
- vue
+ - zod
- nuxt-schema-org@5.0.10(@unhead/vue@2.1.4(vue@3.5.28(typescript@5.9.3)))(magicast@0.5.2)(unhead@2.1.4)(vite@7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2))(vue@3.5.28(typescript@5.9.3))(zod@4.3.6):
+ nuxt-schema-org@6.0.4(6340a28e464382c8e848f01660f1c1b0):
dependencies:
- '@nuxt/kit': 4.3.1(magicast@0.5.2)
- '@unhead/schema-org': 2.1.4(@unhead/vue@2.1.4(vue@3.5.28(typescript@5.9.3)))
- defu: 6.1.4
- nuxt-site-config: 3.2.19(magicast@0.5.2)(vite@7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2))(vue@3.5.28(typescript@5.9.3))
- pathe: 2.0.3
+ '@nuxt/kit': 4.4.2(magicast@0.5.2)
+ '@unhead/schema-org': 2.1.13(@unhead/vue@2.1.13(vue@3.5.33(typescript@6.0.3)))
+ defu: 6.1.7
+ nuxt-site-config: 4.0.8(@nuxt/schema@4.4.2)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3))(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))(zod@4.3.6)
+ nuxtseo-layer-devtools: 0.5.1(fedd14e568760e80f869e92ae51165ee)
+ nuxtseo-shared: 0.9.0(1ea63fa9df7940a4f1f1de81ecc8f7ac)
pkg-types: 2.3.0
- sirv: 3.0.2
optionalDependencies:
- '@unhead/vue': 2.1.4(vue@3.5.28(typescript@5.9.3))
- unhead: 2.1.4
+ '@unhead/vue': 2.1.13(vue@3.5.33(typescript@6.0.3))
zod: 4.3.6
transitivePeerDependencies:
+ - '@azure/app-configuration'
+ - '@azure/cosmos'
+ - '@azure/data-tables'
+ - '@azure/identity'
+ - '@azure/keyvault-secrets'
+ - '@azure/storage-blob'
+ - '@capacitor/preferences'
+ - '@deno/kv'
+ - '@emotion/is-prop-valid'
+ - '@inertiajs/vue3'
+ - '@netlify/blobs'
+ - '@nuxt/content'
+ - '@nuxt/schema'
+ - '@planetscale/database'
+ - '@tiptap/extensions'
+ - '@tiptap/y-tiptap'
- '@unhead/react'
- '@unhead/solid-js'
- '@unhead/svelte'
+ - '@upstash/redis'
+ - '@vercel/blob'
+ - '@vercel/functions'
+ - '@vercel/kv'
+ - '@vue/composition-api'
+ - async-validator
+ - aws4fetch
+ - axios
+ - change-case
+ - db0
+ - drauu
+ - embla-carousel
+ - focus-trap
+ - idb-keyval
+ - ioredis
+ - joi
+ - jwt-decode
- magicast
+ - nprogress
+ - nuxt
+ - qrcode
+ - react
+ - react-dom
+ - sortablejs
+ - superstruct
+ - tailwindcss
+ - typescript
+ - universal-cookie
+ - uploadthing
+ - valibot
- vite
- vue
+ - vue-router
+ - yjs
+ - yup
- nuxt-seo-utils@7.0.19(magicast@0.5.2)(rollup@4.57.1)(unhead@2.1.4)(vite@7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2))(vue@3.5.28(typescript@5.9.3)):
+ nuxt-seo-utils@8.1.11(cf66a2112ebe23c18ee2f687859fb007):
dependencies:
- '@nuxt/kit': 4.3.1(magicast@0.5.2)
- '@unhead/addons': 2.1.4(rollup@4.57.1)(unhead@2.1.4)
- defu: 6.1.4
+ '@nuxt/kit': 4.4.2(magicast@0.5.2)
+ '@unhead/bundler': 3.0.5(esbuild@0.27.7)(lightningcss@1.32.0)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
+ citty: 0.2.2
+ defu: 6.1.7
escape-string-regexp: 5.0.0
- fast-glob: 3.3.3
+ exsolve: 1.0.8
image-size: 2.0.2
- nuxt-site-config: 3.2.19(magicast@0.5.2)(vite@7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2))(vue@3.5.28(typescript@5.9.3))
+ nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3)
+ nuxt-site-config: 4.0.8(@nuxt/schema@4.4.2)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3))(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))(zod@4.3.6)
+ nuxtseo-shared: 5.1.3(1ea63fa9df7940a4f1f1de81ecc8f7ac)
pathe: 2.0.3
pkg-types: 2.3.0
scule: 1.3.0
- semver: 7.7.4
+ tinyglobby: 0.2.16
ufo: 1.6.3
+ optionalDependencies:
+ esbuild: 0.27.7
+ lightningcss: 1.32.0
+ rolldown: 1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)
+ sharp: 0.34.5
transitivePeerDependencies:
+ - '@nuxt/schema'
+ - bufferutil
- magicast
- - rollup
+ - typescript
- unhead
+ - utf-8-validate
- vite
- vue
+ - zod
- nuxt-site-config-kit@3.2.19(magicast@0.5.2)(vue@3.5.28(typescript@5.9.3)):
+ nuxt-site-config-kit@4.0.8(magicast@0.5.2)(vue@3.5.33(typescript@6.0.3)):
dependencies:
- '@nuxt/kit': 4.3.1(magicast@0.5.2)
- pkg-types: 2.3.0
- site-config-stack: 3.2.19(vue@3.5.28(typescript@5.9.3))
- std-env: 3.10.0
+ '@nuxt/kit': 4.4.2(magicast@0.5.2)
+ site-config-stack: 4.0.8(vue@3.5.33(typescript@6.0.3))
+ std-env: 4.1.0
ufo: 1.6.3
transitivePeerDependencies:
- magicast
- vue
- nuxt-site-config@3.2.19(magicast@0.5.2)(vite@7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2))(vue@3.5.28(typescript@5.9.3)):
+ nuxt-site-config@4.0.8(@nuxt/schema@4.4.2)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3))(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))(zod@4.3.6):
dependencies:
- '@nuxt/devtools-kit': 3.1.1(magicast@0.5.2)(vite@7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2))
- '@nuxt/kit': 4.3.1(magicast@0.5.2)
- h3: 1.15.5
- nuxt-site-config-kit: 3.2.19(magicast@0.5.2)(vue@3.5.28(typescript@5.9.3))
+ '@nuxt/kit': 4.4.2(magicast@0.5.2)
+ h3: 1.15.11
+ nuxt-site-config-kit: 4.0.8(magicast@0.5.2)(vue@3.5.33(typescript@6.0.3))
+ nuxtseo-shared: 5.1.3(1ea63fa9df7940a4f1f1de81ecc8f7ac)
pathe: 2.0.3
pkg-types: 2.3.0
- sirv: 3.0.2
- site-config-stack: 3.2.19(vue@3.5.28(typescript@5.9.3))
+ site-config-stack: 4.0.8(vue@3.5.33(typescript@6.0.3))
ufo: 1.6.3
transitivePeerDependencies:
+ - '@nuxt/schema'
- magicast
+ - nuxt
- vite
- vue
+ - zod
- nuxt@4.3.1(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@25.2.2)(@vue/compiler-sfc@3.5.28)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(eslint@9.28.0(jiti@2.6.1))(ioredis@5.9.2)(lightningcss@1.30.2)(magicast@0.5.2)(optionator@0.9.4)(rollup@4.57.1)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2))(vue-tsc@3.2.4(typescript@5.9.3))(yaml@2.8.2):
- dependencies:
- '@dxup/nuxt': 0.3.2(magicast@0.5.2)
- '@nuxt/cli': 3.33.1(@nuxt/schema@4.3.1)(cac@6.7.14)(magicast@0.5.2)
- '@nuxt/devtools': 3.1.1(vite@7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2))(vue@3.5.28(typescript@5.9.3))
- '@nuxt/kit': 4.3.1(magicast@0.5.2)
- '@nuxt/nitro-server': 4.3.1(@netlify/blobs@9.1.2)(better-sqlite3@11.10.0)(db0@0.3.4(better-sqlite3@11.10.0))(ioredis@5.9.2)(magicast@0.5.2)(nuxt@4.3.1(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@25.2.2)(@vue/compiler-sfc@3.5.28)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(eslint@9.28.0(jiti@2.6.1))(ioredis@5.9.2)(lightningcss@1.30.2)(magicast@0.5.2)(optionator@0.9.4)(rollup@4.57.1)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2))(vue-tsc@3.2.4(typescript@5.9.3))(yaml@2.8.2))(typescript@5.9.3)
- '@nuxt/schema': 4.3.1
- '@nuxt/telemetry': 2.7.0(@nuxt/kit@4.3.1(magicast@0.5.2))
- '@nuxt/vite-builder': 4.3.1(@types/node@25.2.2)(eslint@9.28.0(jiti@2.6.1))(lightningcss@1.30.2)(magicast@0.5.2)(nuxt@4.3.1(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@25.2.2)(@vue/compiler-sfc@3.5.28)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(eslint@9.28.0(jiti@2.6.1))(ioredis@5.9.2)(lightningcss@1.30.2)(magicast@0.5.2)(optionator@0.9.4)(rollup@4.57.1)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2))(vue-tsc@3.2.4(typescript@5.9.3))(yaml@2.8.2))(optionator@0.9.4)(rollup@4.57.1)(terser@5.46.0)(typescript@5.9.3)(vue-tsc@3.2.4(typescript@5.9.3))(vue@3.5.28(typescript@5.9.3))(yaml@2.8.2)
- '@unhead/vue': 2.1.4(vue@3.5.28(typescript@5.9.3))
- '@vue/shared': 3.5.28
- c12: 3.3.3(magicast@0.5.2)
+ nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3):
+ dependencies:
+ '@dxup/nuxt': 0.4.1(magicast@0.5.2)(typescript@6.0.3)
+ '@nuxt/cli': 3.34.0(@nuxt/schema@4.4.2)(cac@6.7.14)(magicast@0.5.2)
+ '@nuxt/devtools': 3.2.4(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))
+ '@nuxt/kit': 4.4.2(magicast@0.5.2)
+ '@nuxt/nitro-server': 4.4.2(2426d09d816dd853d95ec6447c6869f4)
+ '@nuxt/schema': 4.4.2
+ '@nuxt/telemetry': 2.8.0(@nuxt/kit@4.4.2(magicast@0.5.2))
+ '@nuxt/vite-builder': 4.4.2(4d865828a8a2f3300c67d34de741fd3a)
+ '@unhead/vue': 2.1.13(vue@3.5.33(typescript@6.0.3))
+ '@vue/shared': 3.5.33
+ c12: 3.3.4(magicast@0.5.2)
chokidar: 5.0.0
compatx: 0.2.0
consola: 3.4.2
- cookie-es: 2.0.0
- defu: 6.1.4
- destr: 2.0.5
- devalue: 5.6.2
+ cookie-es: 2.0.1
+ defu: 6.1.7
+ devalue: 5.7.1
errx: 0.1.0
escape-string-regexp: 5.0.0
exsolve: 1.0.8
- h3: 1.15.5
- hookable: 5.5.3
+ hookable: 6.1.1
ignore: 7.0.5
- impound: 1.0.0
+ impound: 1.1.5
jiti: 2.6.1
klona: 2.0.6
knitwork: 1.3.0
magic-string: 0.30.21
- mlly: 1.8.0
- nanotar: 0.2.0
+ mlly: 1.8.2
+ nanotar: 0.3.0
nypm: 0.6.5
ofetch: 1.5.1
ohash: 2.0.11
on-change: 6.0.2
- oxc-minify: 0.112.0
- oxc-parser: 0.112.0
- oxc-transform: 0.112.0
- oxc-walker: 0.7.0(oxc-parser@0.112.0)
+ oxc-minify: 0.117.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)
+ oxc-parser: 0.117.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)
+ oxc-transform: 0.117.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)
+ oxc-walker: 0.7.0(oxc-parser@0.117.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))
pathe: 2.0.3
perfect-debounce: 2.1.0
+ picomatch: 4.0.4
pkg-types: 2.3.0
- rou3: 0.7.12
+ rou3: 0.8.1
scule: 1.3.0
semver: 7.7.4
- std-env: 3.10.0
- tinyglobby: 0.2.15
+ std-env: 4.1.0
+ tinyglobby: 0.2.16
ufo: 1.6.3
ultrahtml: 1.6.0
uncrypto: 0.1.3
unctx: 2.5.0
- unimport: 5.6.0
+ unimport: 6.1.1
unplugin: 3.0.0
- unplugin-vue-router: 0.19.2(@vue/compiler-sfc@3.5.28)(vue-router@4.6.4(vue@3.5.28(typescript@5.9.3)))(vue@3.5.28(typescript@5.9.3))
+ unrouting: 0.1.7
untyped: 2.0.0
- vue: 3.5.28(typescript@5.9.3)
- vue-router: 4.6.4(vue@3.5.28(typescript@5.9.3))
+ vue: 3.5.33(typescript@6.0.3)
+ vue-router: 5.0.6(@vue/compiler-sfc@3.5.33)(vue@3.5.33(typescript@6.0.3))
optionalDependencies:
'@parcel/watcher': 2.5.6
- '@types/node': 25.2.2
+ '@types/node': 25.6.0
transitivePeerDependencies:
- '@azure/app-configuration'
- '@azure/cosmos'
@@ -12886,13 +14061,20 @@ snapshots:
- '@azure/identity'
- '@azure/keyvault-secrets'
- '@azure/storage-blob'
+ - '@babel/core'
+ - '@babel/plugin-proposal-decorators'
+ - '@babel/plugin-syntax-jsx'
- '@biomejs/biome'
- '@capacitor/preferences'
- '@deno/kv'
- '@electric-sql/pglite'
+ - '@emnapi/core'
+ - '@emnapi/runtime'
- '@libsql/client'
- '@netlify/blobs'
+ - '@pinia/colada'
- '@planetscale/database'
+ - '@rollup/plugin-babel'
- '@upstash/redis'
- '@vercel/blob'
- '@vercel/functions'
@@ -12901,6 +14083,7 @@ snapshots:
- '@vue/compiler-sfc'
- aws4fetch
- bare-abort-controller
+ - bare-buffer
- better-sqlite3
- bufferutil
- cac
@@ -12908,22 +14091,25 @@ snapshots:
- db0
- drizzle-orm
- encoding
+ - esbuild
- eslint
- idb-keyval
- ioredis
- less
- - lightningcss
- magicast
- meow
- mysql2
- optionator
- oxlint
+ - pinia
- react-native-b4a
- rolldown
- rollup
+ - rollup-plugin-visualizer
- sass
- sass-embedded
- sqlite3
+ - srvx
- stylelint
- stylus
- sugarss
@@ -12934,11 +14120,128 @@ snapshots:
- uploadthing
- utf-8-validate
- vite
- - vls
- - vti
- - vue-tsc
- - xml2js
- - yaml
+ - vls
+ - vti
+ - vue-tsc
+ - xml2js
+ - yaml
+
+ nuxtseo-layer-devtools@0.5.1(fedd14e568760e80f869e92ae51165ee):
+ dependencies:
+ '@nuxt/devtools-kit': 4.0.0-alpha.3(magicast@0.5.2)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
+ '@nuxt/kit': 4.4.2(magicast@0.5.2)
+ '@nuxt/ui': 4.6.1(@netlify/blobs@9.1.2)(@nuxt/content@3.13.0(better-sqlite3@11.10.0)(magicast@0.5.2)(valibot@1.3.1(typescript@6.0.3)))(@tiptap/extensions@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4))(@tiptap/y-tiptap@3.0.3(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.8)(y-protocols@1.0.7(yjs@13.6.30))(yjs@13.6.30))(axios@1.13.5)(change-case@5.4.4)(db0@0.3.4(better-sqlite3@11.10.0))(embla-carousel@8.6.0)(ioredis@5.10.1)(jwt-decode@4.0.0)(magicast@0.5.2)(tailwindcss@4.2.4)(typescript@6.0.3)(valibot@1.3.1(typescript@6.0.3))(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-router@5.0.6(@vue/compiler-sfc@3.5.33)(vue@3.5.33(typescript@6.0.3)))(vue@3.5.33(typescript@6.0.3))(yjs@13.6.30)(zod@4.3.6)
+ '@shikijs/langs': 4.0.2
+ '@shikijs/themes': 4.0.2
+ '@vueuse/nuxt': 14.2.1(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))
+ nuxtseo-shared: 0.9.0(1ea63fa9df7940a4f1f1de81ecc8f7ac)
+ ofetch: 1.5.1
+ shiki: 4.0.2
+ ufo: 1.6.3
+ transitivePeerDependencies:
+ - '@azure/app-configuration'
+ - '@azure/cosmos'
+ - '@azure/data-tables'
+ - '@azure/identity'
+ - '@azure/keyvault-secrets'
+ - '@azure/storage-blob'
+ - '@capacitor/preferences'
+ - '@deno/kv'
+ - '@emotion/is-prop-valid'
+ - '@inertiajs/vue3'
+ - '@netlify/blobs'
+ - '@nuxt/content'
+ - '@nuxt/schema'
+ - '@planetscale/database'
+ - '@tiptap/extensions'
+ - '@tiptap/y-tiptap'
+ - '@upstash/redis'
+ - '@vercel/blob'
+ - '@vercel/functions'
+ - '@vercel/kv'
+ - '@vue/composition-api'
+ - async-validator
+ - aws4fetch
+ - axios
+ - change-case
+ - db0
+ - drauu
+ - embla-carousel
+ - focus-trap
+ - idb-keyval
+ - ioredis
+ - joi
+ - jwt-decode
+ - magicast
+ - nprogress
+ - nuxt
+ - nuxt-site-config
+ - qrcode
+ - react
+ - react-dom
+ - sortablejs
+ - superstruct
+ - tailwindcss
+ - typescript
+ - universal-cookie
+ - uploadthing
+ - valibot
+ - vite
+ - vue
+ - vue-router
+ - yjs
+ - yup
+ - zod
+
+ nuxtseo-shared@0.9.0(1ea63fa9df7940a4f1f1de81ecc8f7ac):
+ dependencies:
+ '@clack/prompts': 1.2.0
+ '@nuxt/devtools-kit': 4.0.0-alpha.3(magicast@0.5.2)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
+ '@nuxt/kit': 4.4.2(magicast@0.5.2)
+ '@nuxt/schema': 4.4.2
+ birpc: 4.0.0
+ consola: 3.4.2
+ defu: 6.1.7
+ nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3)
+ ofetch: 1.5.1
+ pathe: 2.0.3
+ pkg-types: 2.3.0
+ radix3: 1.1.2
+ sirv: 3.0.2
+ std-env: 4.1.0
+ ufo: 1.6.3
+ vue: 3.5.33(typescript@6.0.3)
+ optionalDependencies:
+ nuxt-site-config: 4.0.8(@nuxt/schema@4.4.2)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3))(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))(zod@4.3.6)
+ zod: 4.3.6
+ transitivePeerDependencies:
+ - magicast
+ - vite
+
+ nuxtseo-shared@5.1.3(1ea63fa9df7940a4f1f1de81ecc8f7ac):
+ dependencies:
+ '@clack/prompts': 1.2.0
+ '@nuxt/devtools-kit': 4.0.0-alpha.3(magicast@0.5.2)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
+ '@nuxt/kit': 4.4.2(magicast@0.5.2)
+ '@nuxt/schema': 4.4.2
+ birpc: 4.0.0
+ consola: 3.4.2
+ defu: 6.1.7
+ nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3)
+ ofetch: 1.5.1
+ pathe: 2.0.3
+ pkg-types: 2.3.0
+ radix3: 1.1.2
+ sirv: 3.0.2
+ std-env: 4.1.0
+ ufo: 1.6.3
+ vue: 3.5.33(typescript@6.0.3)
+ optionalDependencies:
+ nuxt-site-config: 4.0.8(@nuxt/schema@4.4.2)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3))(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))(zod@4.3.6)
+ zod: 4.3.6
+ transitivePeerDependencies:
+ - magicast
+ - vite
nypm@0.6.5:
dependencies:
@@ -12976,11 +14279,11 @@ snapshots:
dependencies:
mimic-fn: 4.0.0
- oniguruma-parser@0.12.1: {}
+ oniguruma-parser@0.12.2: {}
- oniguruma-to-es@4.3.4:
+ oniguruma-to-es@4.3.6:
dependencies:
- oniguruma-parser: 0.12.1
+ oniguruma-parser: 0.12.2
regex: 6.1.0
regex-recursion: 6.0.2
@@ -12991,11 +14294,14 @@ snapshots:
is-inside-container: 1.0.0
wsl-utils: 0.1.0
- open@8.4.2:
+ open@11.0.0:
dependencies:
- define-lazy-prop: 2.0.0
- is-docker: 2.2.1
- is-wsl: 2.2.0
+ default-browser: 5.5.0
+ define-lazy-prop: 3.0.0
+ is-in-ssh: 1.0.0
+ is-inside-container: 1.0.0
+ powershell-utils: 0.1.0
+ wsl-utils: 0.3.1
openapi3-ts@4.5.0:
dependencies:
@@ -13010,81 +14316,147 @@ snapshots:
type-check: 0.4.0
word-wrap: 1.2.5
- oxc-minify@0.112.0:
+ orderedmap@2.1.1: {}
+
+ oxc-minify@0.117.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0):
+ optionalDependencies:
+ '@oxc-minify/binding-android-arm-eabi': 0.117.0
+ '@oxc-minify/binding-android-arm64': 0.117.0
+ '@oxc-minify/binding-darwin-arm64': 0.117.0
+ '@oxc-minify/binding-darwin-x64': 0.117.0
+ '@oxc-minify/binding-freebsd-x64': 0.117.0
+ '@oxc-minify/binding-linux-arm-gnueabihf': 0.117.0
+ '@oxc-minify/binding-linux-arm-musleabihf': 0.117.0
+ '@oxc-minify/binding-linux-arm64-gnu': 0.117.0
+ '@oxc-minify/binding-linux-arm64-musl': 0.117.0
+ '@oxc-minify/binding-linux-ppc64-gnu': 0.117.0
+ '@oxc-minify/binding-linux-riscv64-gnu': 0.117.0
+ '@oxc-minify/binding-linux-riscv64-musl': 0.117.0
+ '@oxc-minify/binding-linux-s390x-gnu': 0.117.0
+ '@oxc-minify/binding-linux-x64-gnu': 0.117.0
+ '@oxc-minify/binding-linux-x64-musl': 0.117.0
+ '@oxc-minify/binding-openharmony-arm64': 0.117.0
+ '@oxc-minify/binding-wasm32-wasi': 0.117.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)
+ '@oxc-minify/binding-win32-arm64-msvc': 0.117.0
+ '@oxc-minify/binding-win32-ia32-msvc': 0.117.0
+ '@oxc-minify/binding-win32-x64-msvc': 0.117.0
+ transitivePeerDependencies:
+ - '@emnapi/core'
+ - '@emnapi/runtime'
+
+ oxc-parser@0.117.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0):
+ dependencies:
+ '@oxc-project/types': 0.117.0
+ optionalDependencies:
+ '@oxc-parser/binding-android-arm-eabi': 0.117.0
+ '@oxc-parser/binding-android-arm64': 0.117.0
+ '@oxc-parser/binding-darwin-arm64': 0.117.0
+ '@oxc-parser/binding-darwin-x64': 0.117.0
+ '@oxc-parser/binding-freebsd-x64': 0.117.0
+ '@oxc-parser/binding-linux-arm-gnueabihf': 0.117.0
+ '@oxc-parser/binding-linux-arm-musleabihf': 0.117.0
+ '@oxc-parser/binding-linux-arm64-gnu': 0.117.0
+ '@oxc-parser/binding-linux-arm64-musl': 0.117.0
+ '@oxc-parser/binding-linux-ppc64-gnu': 0.117.0
+ '@oxc-parser/binding-linux-riscv64-gnu': 0.117.0
+ '@oxc-parser/binding-linux-riscv64-musl': 0.117.0
+ '@oxc-parser/binding-linux-s390x-gnu': 0.117.0
+ '@oxc-parser/binding-linux-x64-gnu': 0.117.0
+ '@oxc-parser/binding-linux-x64-musl': 0.117.0
+ '@oxc-parser/binding-openharmony-arm64': 0.117.0
+ '@oxc-parser/binding-wasm32-wasi': 0.117.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)
+ '@oxc-parser/binding-win32-arm64-msvc': 0.117.0
+ '@oxc-parser/binding-win32-ia32-msvc': 0.117.0
+ '@oxc-parser/binding-win32-x64-msvc': 0.117.0
+ transitivePeerDependencies:
+ - '@emnapi/core'
+ - '@emnapi/runtime'
+
+ oxc-parser@0.126.0:
+ dependencies:
+ '@oxc-project/types': 0.126.0
optionalDependencies:
- '@oxc-minify/binding-android-arm-eabi': 0.112.0
- '@oxc-minify/binding-android-arm64': 0.112.0
- '@oxc-minify/binding-darwin-arm64': 0.112.0
- '@oxc-minify/binding-darwin-x64': 0.112.0
- '@oxc-minify/binding-freebsd-x64': 0.112.0
- '@oxc-minify/binding-linux-arm-gnueabihf': 0.112.0
- '@oxc-minify/binding-linux-arm-musleabihf': 0.112.0
- '@oxc-minify/binding-linux-arm64-gnu': 0.112.0
- '@oxc-minify/binding-linux-arm64-musl': 0.112.0
- '@oxc-minify/binding-linux-ppc64-gnu': 0.112.0
- '@oxc-minify/binding-linux-riscv64-gnu': 0.112.0
- '@oxc-minify/binding-linux-riscv64-musl': 0.112.0
- '@oxc-minify/binding-linux-s390x-gnu': 0.112.0
- '@oxc-minify/binding-linux-x64-gnu': 0.112.0
- '@oxc-minify/binding-linux-x64-musl': 0.112.0
- '@oxc-minify/binding-openharmony-arm64': 0.112.0
- '@oxc-minify/binding-wasm32-wasi': 0.112.0
- '@oxc-minify/binding-win32-arm64-msvc': 0.112.0
- '@oxc-minify/binding-win32-ia32-msvc': 0.112.0
- '@oxc-minify/binding-win32-x64-msvc': 0.112.0
-
- oxc-parser@0.112.0:
- dependencies:
- '@oxc-project/types': 0.112.0
+ '@oxc-parser/binding-android-arm-eabi': 0.126.0
+ '@oxc-parser/binding-android-arm64': 0.126.0
+ '@oxc-parser/binding-darwin-arm64': 0.126.0
+ '@oxc-parser/binding-darwin-x64': 0.126.0
+ '@oxc-parser/binding-freebsd-x64': 0.126.0
+ '@oxc-parser/binding-linux-arm-gnueabihf': 0.126.0
+ '@oxc-parser/binding-linux-arm-musleabihf': 0.126.0
+ '@oxc-parser/binding-linux-arm64-gnu': 0.126.0
+ '@oxc-parser/binding-linux-arm64-musl': 0.126.0
+ '@oxc-parser/binding-linux-ppc64-gnu': 0.126.0
+ '@oxc-parser/binding-linux-riscv64-gnu': 0.126.0
+ '@oxc-parser/binding-linux-riscv64-musl': 0.126.0
+ '@oxc-parser/binding-linux-s390x-gnu': 0.126.0
+ '@oxc-parser/binding-linux-x64-gnu': 0.126.0
+ '@oxc-parser/binding-linux-x64-musl': 0.126.0
+ '@oxc-parser/binding-openharmony-arm64': 0.126.0
+ '@oxc-parser/binding-wasm32-wasi': 0.126.0
+ '@oxc-parser/binding-win32-arm64-msvc': 0.126.0
+ '@oxc-parser/binding-win32-ia32-msvc': 0.126.0
+ '@oxc-parser/binding-win32-x64-msvc': 0.126.0
+
+ oxc-parser@0.127.0:
+ dependencies:
+ '@oxc-project/types': 0.127.0
optionalDependencies:
- '@oxc-parser/binding-android-arm-eabi': 0.112.0
- '@oxc-parser/binding-android-arm64': 0.112.0
- '@oxc-parser/binding-darwin-arm64': 0.112.0
- '@oxc-parser/binding-darwin-x64': 0.112.0
- '@oxc-parser/binding-freebsd-x64': 0.112.0
- '@oxc-parser/binding-linux-arm-gnueabihf': 0.112.0
- '@oxc-parser/binding-linux-arm-musleabihf': 0.112.0
- '@oxc-parser/binding-linux-arm64-gnu': 0.112.0
- '@oxc-parser/binding-linux-arm64-musl': 0.112.0
- '@oxc-parser/binding-linux-ppc64-gnu': 0.112.0
- '@oxc-parser/binding-linux-riscv64-gnu': 0.112.0
- '@oxc-parser/binding-linux-riscv64-musl': 0.112.0
- '@oxc-parser/binding-linux-s390x-gnu': 0.112.0
- '@oxc-parser/binding-linux-x64-gnu': 0.112.0
- '@oxc-parser/binding-linux-x64-musl': 0.112.0
- '@oxc-parser/binding-openharmony-arm64': 0.112.0
- '@oxc-parser/binding-wasm32-wasi': 0.112.0
- '@oxc-parser/binding-win32-arm64-msvc': 0.112.0
- '@oxc-parser/binding-win32-ia32-msvc': 0.112.0
- '@oxc-parser/binding-win32-x64-msvc': 0.112.0
-
- oxc-transform@0.112.0:
+ '@oxc-parser/binding-android-arm-eabi': 0.127.0
+ '@oxc-parser/binding-android-arm64': 0.127.0
+ '@oxc-parser/binding-darwin-arm64': 0.127.0
+ '@oxc-parser/binding-darwin-x64': 0.127.0
+ '@oxc-parser/binding-freebsd-x64': 0.127.0
+ '@oxc-parser/binding-linux-arm-gnueabihf': 0.127.0
+ '@oxc-parser/binding-linux-arm-musleabihf': 0.127.0
+ '@oxc-parser/binding-linux-arm64-gnu': 0.127.0
+ '@oxc-parser/binding-linux-arm64-musl': 0.127.0
+ '@oxc-parser/binding-linux-ppc64-gnu': 0.127.0
+ '@oxc-parser/binding-linux-riscv64-gnu': 0.127.0
+ '@oxc-parser/binding-linux-riscv64-musl': 0.127.0
+ '@oxc-parser/binding-linux-s390x-gnu': 0.127.0
+ '@oxc-parser/binding-linux-x64-gnu': 0.127.0
+ '@oxc-parser/binding-linux-x64-musl': 0.127.0
+ '@oxc-parser/binding-openharmony-arm64': 0.127.0
+ '@oxc-parser/binding-wasm32-wasi': 0.127.0
+ '@oxc-parser/binding-win32-arm64-msvc': 0.127.0
+ '@oxc-parser/binding-win32-ia32-msvc': 0.127.0
+ '@oxc-parser/binding-win32-x64-msvc': 0.127.0
+
+ oxc-transform@0.117.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0):
optionalDependencies:
- '@oxc-transform/binding-android-arm-eabi': 0.112.0
- '@oxc-transform/binding-android-arm64': 0.112.0
- '@oxc-transform/binding-darwin-arm64': 0.112.0
- '@oxc-transform/binding-darwin-x64': 0.112.0
- '@oxc-transform/binding-freebsd-x64': 0.112.0
- '@oxc-transform/binding-linux-arm-gnueabihf': 0.112.0
- '@oxc-transform/binding-linux-arm-musleabihf': 0.112.0
- '@oxc-transform/binding-linux-arm64-gnu': 0.112.0
- '@oxc-transform/binding-linux-arm64-musl': 0.112.0
- '@oxc-transform/binding-linux-ppc64-gnu': 0.112.0
- '@oxc-transform/binding-linux-riscv64-gnu': 0.112.0
- '@oxc-transform/binding-linux-riscv64-musl': 0.112.0
- '@oxc-transform/binding-linux-s390x-gnu': 0.112.0
- '@oxc-transform/binding-linux-x64-gnu': 0.112.0
- '@oxc-transform/binding-linux-x64-musl': 0.112.0
- '@oxc-transform/binding-openharmony-arm64': 0.112.0
- '@oxc-transform/binding-wasm32-wasi': 0.112.0
- '@oxc-transform/binding-win32-arm64-msvc': 0.112.0
- '@oxc-transform/binding-win32-ia32-msvc': 0.112.0
- '@oxc-transform/binding-win32-x64-msvc': 0.112.0
-
- oxc-walker@0.7.0(oxc-parser@0.112.0):
+ '@oxc-transform/binding-android-arm-eabi': 0.117.0
+ '@oxc-transform/binding-android-arm64': 0.117.0
+ '@oxc-transform/binding-darwin-arm64': 0.117.0
+ '@oxc-transform/binding-darwin-x64': 0.117.0
+ '@oxc-transform/binding-freebsd-x64': 0.117.0
+ '@oxc-transform/binding-linux-arm-gnueabihf': 0.117.0
+ '@oxc-transform/binding-linux-arm-musleabihf': 0.117.0
+ '@oxc-transform/binding-linux-arm64-gnu': 0.117.0
+ '@oxc-transform/binding-linux-arm64-musl': 0.117.0
+ '@oxc-transform/binding-linux-ppc64-gnu': 0.117.0
+ '@oxc-transform/binding-linux-riscv64-gnu': 0.117.0
+ '@oxc-transform/binding-linux-riscv64-musl': 0.117.0
+ '@oxc-transform/binding-linux-s390x-gnu': 0.117.0
+ '@oxc-transform/binding-linux-x64-gnu': 0.117.0
+ '@oxc-transform/binding-linux-x64-musl': 0.117.0
+ '@oxc-transform/binding-openharmony-arm64': 0.117.0
+ '@oxc-transform/binding-wasm32-wasi': 0.117.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)
+ '@oxc-transform/binding-win32-arm64-msvc': 0.117.0
+ '@oxc-transform/binding-win32-ia32-msvc': 0.117.0
+ '@oxc-transform/binding-win32-x64-msvc': 0.117.0
+ transitivePeerDependencies:
+ - '@emnapi/core'
+ - '@emnapi/runtime'
+
+ oxc-walker@0.7.0(oxc-parser@0.117.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)):
+ dependencies:
+ magic-regexp: 0.10.0
+ oxc-parser: 0.117.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)
+
+ oxc-walker@0.7.0(oxc-parser@0.127.0):
dependencies:
magic-regexp: 0.10.0
- oxc-parser: 0.112.0
+ oxc-parser: 0.127.0
p-cancelable@2.1.1: {}
@@ -13096,6 +14468,10 @@ snapshots:
dependencies:
yocto-queue: 1.2.2
+ p-limit@7.3.0:
+ dependencies:
+ yocto-queue: 1.2.2
+
p-locate@5.0.0:
dependencies:
p-limit: 3.1.0
@@ -13116,19 +14492,12 @@ snapshots:
package-manager-detector@1.6.0: {}
- pako@0.2.9: {}
-
pako@1.0.11: {}
parent-module@1.0.1:
dependencies:
callsites: 3.1.0
- 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
@@ -13146,8 +14515,6 @@ snapshots:
dependencies:
parse-statements: 1.0.11
- parse-ms@4.0.0: {}
-
parse-path@7.1.0:
dependencies:
protocols: 2.0.2
@@ -13163,9 +14530,9 @@ snapshots:
dependencies:
entities: 6.0.1
- parse5@8.0.0:
+ parse5@8.0.1:
dependencies:
- entities: 6.0.1
+ entities: 8.0.0
parseurl@1.3.3: {}
@@ -13176,6 +14543,8 @@ snapshots:
path-exists@5.0.0:
optional: true
+ path-expression-matcher@1.5.0: {}
+
path-key@3.1.1: {}
path-key@4.0.0: {}
@@ -13185,12 +14554,12 @@ snapshots:
path-scurry@1.11.1:
dependencies:
lru-cache: 10.4.3
- minipass: 7.1.2
+ minipass: 7.1.3
- path-scurry@2.0.1:
+ path-scurry@2.0.2:
dependencies:
- lru-cache: 11.2.5
- minipass: 7.1.2
+ lru-cache: 11.3.5
+ minipass: 7.1.3
pathe@1.1.2: {}
@@ -13200,10 +14569,12 @@ snapshots:
picocolors@1.1.1: {}
- picomatch@2.3.1: {}
+ picomatch@2.3.2: {}
picomatch@4.0.3: {}
+ picomatch@4.0.4: {}
+
pify@4.0.1: {}
pkg-types@1.3.1:
@@ -13218,148 +14589,151 @@ snapshots:
exsolve: 1.0.8
pathe: 2.0.3
- playwright-core@1.58.2: {}
+ playwright-core@1.58.2:
+ optional: true
pluralize@8.0.0: {}
possible-typed-array-names@1.1.0: {}
- postcss-calc@10.1.1(postcss@8.5.6):
+ postcss-calc@10.1.1(postcss@8.5.10):
dependencies:
- postcss: 8.5.6
+ postcss: 8.5.10
postcss-selector-parser: 7.1.1
postcss-value-parser: 4.2.0
- postcss-colormin@7.0.5(postcss@8.5.6):
+ postcss-colormin@7.0.9(postcss@8.5.10):
dependencies:
- browserslist: 4.28.1
+ '@colordx/core': 5.4.0
+ browserslist: 4.28.2
caniuse-api: 3.0.0
- colord: 2.9.3
- postcss: 8.5.6
+ postcss: 8.5.10
postcss-value-parser: 4.2.0
- postcss-convert-values@7.0.8(postcss@8.5.6):
+ postcss-convert-values@7.0.11(postcss@8.5.10):
dependencies:
- browserslist: 4.28.1
- postcss: 8.5.6
+ browserslist: 4.28.2
+ postcss: 8.5.10
postcss-value-parser: 4.2.0
- postcss-discard-comments@7.0.5(postcss@8.5.6):
+ postcss-discard-comments@7.0.7(postcss@8.5.10):
dependencies:
- postcss: 8.5.6
+ postcss: 8.5.10
postcss-selector-parser: 7.1.1
- postcss-discard-duplicates@7.0.2(postcss@8.5.6):
+ postcss-discard-duplicates@7.0.3(postcss@8.5.10):
dependencies:
- postcss: 8.5.6
+ postcss: 8.5.10
- postcss-discard-empty@7.0.1(postcss@8.5.6):
+ postcss-discard-empty@7.0.2(postcss@8.5.10):
dependencies:
- postcss: 8.5.6
+ postcss: 8.5.10
- postcss-discard-overridden@7.0.1(postcss@8.5.6):
+ postcss-discard-overridden@7.0.2(postcss@8.5.10):
dependencies:
- postcss: 8.5.6
+ postcss: 8.5.10
- postcss-merge-longhand@7.0.5(postcss@8.5.6):
+ postcss-merge-longhand@7.0.6(postcss@8.5.10):
dependencies:
- postcss: 8.5.6
+ postcss: 8.5.10
postcss-value-parser: 4.2.0
- stylehacks: 7.0.7(postcss@8.5.6)
+ stylehacks: 7.0.10(postcss@8.5.10)
- postcss-merge-rules@7.0.7(postcss@8.5.6):
+ postcss-merge-rules@7.0.10(postcss@8.5.10):
dependencies:
- browserslist: 4.28.1
+ browserslist: 4.28.2
caniuse-api: 3.0.0
- cssnano-utils: 5.0.1(postcss@8.5.6)
- postcss: 8.5.6
+ cssnano-utils: 5.0.2(postcss@8.5.10)
+ postcss: 8.5.10
postcss-selector-parser: 7.1.1
- postcss-minify-font-values@7.0.1(postcss@8.5.6):
+ postcss-minify-font-values@7.0.2(postcss@8.5.10):
dependencies:
- postcss: 8.5.6
+ postcss: 8.5.10
postcss-value-parser: 4.2.0
- postcss-minify-gradients@7.0.1(postcss@8.5.6):
+ postcss-minify-gradients@7.0.4(postcss@8.5.10):
dependencies:
- colord: 2.9.3
- cssnano-utils: 5.0.1(postcss@8.5.6)
- postcss: 8.5.6
+ '@colordx/core': 5.4.0
+ cssnano-utils: 5.0.2(postcss@8.5.10)
+ postcss: 8.5.10
postcss-value-parser: 4.2.0
- postcss-minify-params@7.0.5(postcss@8.5.6):
+ postcss-minify-params@7.0.8(postcss@8.5.10):
dependencies:
- browserslist: 4.28.1
- cssnano-utils: 5.0.1(postcss@8.5.6)
- postcss: 8.5.6
+ browserslist: 4.28.2
+ cssnano-utils: 5.0.2(postcss@8.5.10)
+ postcss: 8.5.10
postcss-value-parser: 4.2.0
- postcss-minify-selectors@7.0.5(postcss@8.5.6):
+ postcss-minify-selectors@7.1.0(postcss@8.5.10):
dependencies:
+ browserslist: 4.28.2
+ caniuse-api: 3.0.0
cssesc: 3.0.0
- postcss: 8.5.6
+ postcss: 8.5.10
postcss-selector-parser: 7.1.1
- postcss-normalize-charset@7.0.1(postcss@8.5.6):
+ postcss-normalize-charset@7.0.2(postcss@8.5.10):
dependencies:
- postcss: 8.5.6
+ postcss: 8.5.10
- postcss-normalize-display-values@7.0.1(postcss@8.5.6):
+ postcss-normalize-display-values@7.0.2(postcss@8.5.10):
dependencies:
- postcss: 8.5.6
+ postcss: 8.5.10
postcss-value-parser: 4.2.0
- postcss-normalize-positions@7.0.1(postcss@8.5.6):
+ postcss-normalize-positions@7.0.3(postcss@8.5.10):
dependencies:
- postcss: 8.5.6
+ postcss: 8.5.10
postcss-value-parser: 4.2.0
- postcss-normalize-repeat-style@7.0.1(postcss@8.5.6):
+ postcss-normalize-repeat-style@7.0.3(postcss@8.5.10):
dependencies:
- postcss: 8.5.6
+ postcss: 8.5.10
postcss-value-parser: 4.2.0
- postcss-normalize-string@7.0.1(postcss@8.5.6):
+ postcss-normalize-string@7.0.2(postcss@8.5.10):
dependencies:
- postcss: 8.5.6
+ postcss: 8.5.10
postcss-value-parser: 4.2.0
- postcss-normalize-timing-functions@7.0.1(postcss@8.5.6):
+ postcss-normalize-timing-functions@7.0.2(postcss@8.5.10):
dependencies:
- postcss: 8.5.6
+ postcss: 8.5.10
postcss-value-parser: 4.2.0
- postcss-normalize-unicode@7.0.5(postcss@8.5.6):
+ postcss-normalize-unicode@7.0.8(postcss@8.5.10):
dependencies:
- browserslist: 4.28.1
- postcss: 8.5.6
+ browserslist: 4.28.2
+ postcss: 8.5.10
postcss-value-parser: 4.2.0
- postcss-normalize-url@7.0.1(postcss@8.5.6):
+ postcss-normalize-url@7.0.2(postcss@8.5.10):
dependencies:
- postcss: 8.5.6
+ postcss: 8.5.10
postcss-value-parser: 4.2.0
- postcss-normalize-whitespace@7.0.1(postcss@8.5.6):
+ postcss-normalize-whitespace@7.0.2(postcss@8.5.10):
dependencies:
- postcss: 8.5.6
+ postcss: 8.5.10
postcss-value-parser: 4.2.0
- postcss-ordered-values@7.0.2(postcss@8.5.6):
+ postcss-ordered-values@7.0.3(postcss@8.5.10):
dependencies:
- cssnano-utils: 5.0.1(postcss@8.5.6)
- postcss: 8.5.6
+ cssnano-utils: 5.0.2(postcss@8.5.10)
+ postcss: 8.5.10
postcss-value-parser: 4.2.0
- postcss-reduce-initial@7.0.5(postcss@8.5.6):
+ postcss-reduce-initial@7.0.8(postcss@8.5.10):
dependencies:
- browserslist: 4.28.1
+ browserslist: 4.28.2
caniuse-api: 3.0.0
- postcss: 8.5.6
+ postcss: 8.5.10
- postcss-reduce-transforms@7.0.1(postcss@8.5.6):
+ postcss-reduce-transforms@7.0.2(postcss@8.5.10):
dependencies:
- postcss: 8.5.6
+ postcss: 8.5.10
postcss-value-parser: 4.2.0
postcss-selector-parser@7.1.1:
@@ -13367,47 +14741,51 @@ snapshots:
cssesc: 3.0.0
util-deprecate: 1.0.2
- postcss-svgo@7.1.0(postcss@8.5.6):
+ postcss-svgo@7.1.2(postcss@8.5.10):
dependencies:
- postcss: 8.5.6
+ postcss: 8.5.10
postcss-value-parser: 4.2.0
- svgo: 4.0.0
+ svgo: 4.0.1
- postcss-unique-selectors@7.0.4(postcss@8.5.6):
+ postcss-unique-selectors@7.0.6(postcss@8.5.10):
dependencies:
- postcss: 8.5.6
+ postcss: 8.5.10
postcss-selector-parser: 7.1.1
postcss-value-parser@4.2.0: {}
- postcss@8.5.6:
+ postcss@8.5.10:
dependencies:
nanoid: 3.3.11
picocolors: 1.1.1
source-map-js: 1.2.1
- posthog-js@1.345.0:
+ posthog-js@1.371.2:
dependencies:
- '@opentelemetry/api': 1.9.0
+ '@opentelemetry/api': 1.9.1
'@opentelemetry/api-logs': 0.208.0
- '@opentelemetry/exporter-logs-otlp-http': 0.208.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/resources': 2.5.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/sdk-logs': 0.208.0(@opentelemetry/api@1.9.0)
- '@posthog/core': 1.21.0
- '@posthog/types': 1.345.0
- core-js: 3.48.0
- dompurify: 3.3.1
+ '@opentelemetry/exporter-logs-otlp-http': 0.208.0(@opentelemetry/api@1.9.1)
+ '@opentelemetry/resources': 2.7.0(@opentelemetry/api@1.9.1)
+ '@opentelemetry/sdk-logs': 0.208.0(@opentelemetry/api@1.9.1)
+ '@posthog/core': 1.27.1
+ '@posthog/types': 1.371.2
+ core-js: 3.49.0
+ dompurify: 3.4.1
fflate: 0.4.8
- preact: 10.28.3
+ preact: 10.29.1
query-selector-shadow-dom: 1.0.1
- web-vitals: 5.1.0
+ web-vitals: 5.2.0
- posthog-node@5.24.14:
+ posthog-node@5.29.7:
dependencies:
- '@posthog/core': 1.21.0
+ '@posthog/core': 1.27.1
+
+ powershell-utils@0.1.0: {}
preact@10.28.3: {}
+ preact@10.29.1: {}
+
prebuild-install@7.1.3:
dependencies:
detect-libc: 2.1.2
@@ -13428,22 +14806,82 @@ snapshots:
pretty-bytes@7.1.0: {}
- pretty-ms@9.3.0:
- dependencies:
- parse-ms: 4.0.0
-
process-nextick-args@2.0.1: {}
process@0.11.10: {}
- prompts@2.4.2:
+ property-information@7.1.0: {}
+
+ prosemirror-changeset@2.4.1:
dependencies:
- kleur: 3.0.3
- sisteransi: 1.0.5
+ prosemirror-transform: 1.12.0
- property-information@7.1.0: {}
+ prosemirror-commands@1.7.1:
+ dependencies:
+ prosemirror-model: 1.25.4
+ prosemirror-state: 1.4.4
+ prosemirror-transform: 1.12.0
+
+ prosemirror-dropcursor@1.8.2:
+ dependencies:
+ prosemirror-state: 1.4.4
+ prosemirror-transform: 1.12.0
+ prosemirror-view: 1.41.8
+
+ prosemirror-gapcursor@1.4.1:
+ dependencies:
+ prosemirror-keymap: 1.2.3
+ prosemirror-model: 1.25.4
+ prosemirror-state: 1.4.4
+ prosemirror-view: 1.41.8
+
+ prosemirror-history@1.5.0:
+ dependencies:
+ prosemirror-state: 1.4.4
+ prosemirror-transform: 1.12.0
+ prosemirror-view: 1.41.8
+ rope-sequence: 1.3.4
+
+ prosemirror-keymap@1.2.3:
+ dependencies:
+ prosemirror-state: 1.4.4
+ w3c-keyname: 2.2.8
- protobufjs@7.5.4:
+ prosemirror-model@1.25.4:
+ dependencies:
+ orderedmap: 2.1.1
+
+ prosemirror-schema-list@1.5.1:
+ dependencies:
+ prosemirror-model: 1.25.4
+ prosemirror-state: 1.4.4
+ prosemirror-transform: 1.12.0
+
+ prosemirror-state@1.4.4:
+ dependencies:
+ prosemirror-model: 1.25.4
+ prosemirror-transform: 1.12.0
+ prosemirror-view: 1.41.8
+
+ prosemirror-tables@1.8.5:
+ dependencies:
+ prosemirror-keymap: 1.2.3
+ prosemirror-model: 1.25.4
+ prosemirror-state: 1.4.4
+ prosemirror-transform: 1.12.0
+ prosemirror-view: 1.41.8
+
+ prosemirror-transform@1.12.0:
+ dependencies:
+ prosemirror-model: 1.25.4
+
+ prosemirror-view@1.41.8:
+ dependencies:
+ prosemirror-model: 1.25.4
+ prosemirror-state: 1.4.4
+ prosemirror-transform: 1.12.0
+
+ protobufjs@7.5.5:
dependencies:
'@protobufjs/aspromise': 1.1.2
'@protobufjs/base64': 1.1.2
@@ -13455,7 +14893,7 @@ snapshots:
'@protobufjs/path': 1.1.2
'@protobufjs/pool': 1.1.0
'@protobufjs/utf8': 1.1.0
- '@types/node': 25.2.2
+ '@types/node': 25.6.0
long: 5.3.2
protocols@2.0.2: {}
@@ -13479,7 +14917,7 @@ snapshots:
dependencies:
side-channel: 1.1.0
- qs@6.15.0:
+ qs@6.15.1:
dependencies:
side-channel: 1.1.0
optional: true
@@ -13494,10 +14932,6 @@ snapshots:
radix3@1.1.2: {}
- randombytes@2.1.0:
- dependencies:
- safe-buffer: 5.2.1
-
range-parser@1.2.1: {}
rc9@2.1.2:
@@ -13510,6 +14944,11 @@ snapshots:
defu: 6.1.4
destr: 2.0.5
+ rc9@3.0.1:
+ dependencies:
+ defu: 6.1.7
+ destr: 2.0.5
+
rc@1.2.8:
dependencies:
deep-extend: 0.6.0
@@ -13547,7 +14986,7 @@ snapshots:
readdir-glob@1.1.3:
dependencies:
- minimatch: 5.1.6
+ minimatch: 5.1.9
readdirp@4.1.2: {}
@@ -13580,7 +15019,7 @@ snapshots:
regexp-tree@0.1.27: {}
- regjsparser@0.13.0:
+ regjsparser@0.13.1:
dependencies:
jsesc: 3.1.0
@@ -13631,22 +15070,21 @@ snapshots:
'@types/hast': 3.0.4
unist-util-visit: 5.1.0
- reka-ui@2.6.0(typescript@5.9.3)(vue@3.5.28(typescript@5.9.3)):
+ reka-ui@2.9.3(vue@3.5.33(typescript@6.0.3)):
dependencies:
- '@floating-ui/dom': 1.7.5
- '@floating-ui/vue': 1.1.10(vue@3.5.28(typescript@5.9.3))
- '@internationalized/date': 3.11.0
- '@internationalized/number': 3.6.5
- '@tanstack/vue-virtual': 3.13.18(vue@3.5.28(typescript@5.9.3))
- '@vueuse/core': 12.8.2(typescript@5.9.3)
- '@vueuse/shared': 12.8.2(typescript@5.9.3)
+ '@floating-ui/dom': 1.7.6
+ '@floating-ui/vue': 1.1.11(vue@3.5.33(typescript@6.0.3))
+ '@internationalized/date': 3.12.1
+ '@internationalized/number': 3.6.6
+ '@tanstack/vue-virtual': 3.13.24(vue@3.5.33(typescript@6.0.3))
+ '@vueuse/core': 14.2.1(vue@3.5.33(typescript@6.0.3))
+ '@vueuse/shared': 14.2.1(vue@3.5.33(typescript@6.0.3))
aria-hidden: 1.2.6
- defu: 6.1.4
+ defu: 6.1.7
ohash: 2.0.11
- vue: 3.5.28(typescript@5.9.3)
+ vue: 3.5.33(typescript@6.0.3)
transitivePeerDependencies:
- '@vue/composition-api'
- - typescript
remark-emoji@5.0.2:
dependencies:
@@ -13672,7 +15110,7 @@ snapshots:
'@types/mdast': 4.0.4
'@types/unist': 3.0.3
flat: 6.0.1
- mdast-util-from-markdown: 2.0.2
+ mdast-util-from-markdown: 2.0.3
mdast-util-to-markdown: 2.1.2
micromark: 4.0.2
micromark-core-commonmark: 2.0.3
@@ -13686,14 +15124,14 @@ snapshots:
unified: 11.0.5
unist-util-visit: 5.1.0
unist-util-visit-parents: 6.0.2
- yaml: 2.8.2
+ yaml: 2.8.3
transitivePeerDependencies:
- supports-color
remark-parse@11.0.0:
dependencies:
'@types/mdast': 4.0.4
- mdast-util-from-markdown: 2.0.2
+ mdast-util-from-markdown: 2.0.3
micromark-util-types: 2.0.2
unified: 11.0.5
transitivePeerDependencies:
@@ -13713,8 +15151,6 @@ snapshots:
mdast-util-to-markdown: 2.1.2
unified: 11.0.5
- require-directory@2.1.1: {}
-
reserved-identifiers@1.2.0: {}
resolve-alpn@1.2.1: {}
@@ -13725,8 +15161,9 @@ snapshots:
resolve-pkg-maps@1.0.0: {}
- resolve@1.22.11:
+ resolve@1.22.12:
dependencies:
+ es-errors: 1.3.0
is-core-module: 2.16.1
path-parse: 1.0.7
supports-preserve-symlinks-flag: 1.0.0
@@ -13735,53 +15172,94 @@ snapshots:
dependencies:
lowercase-keys: 2.0.0
- restructure@3.0.2: {}
-
reusify@1.1.0: {}
- rfdc@1.4.1: {}
+ rolldown-vite@7.3.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(terser@5.46.2)(yaml@2.8.3):
+ dependencies:
+ '@oxc-project/runtime': 0.101.0
+ fdir: 6.5.0(picomatch@4.0.4)
+ lightningcss: 1.32.0
+ picomatch: 4.0.4
+ postcss: 8.5.10
+ rolldown: 1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)
+ tinyglobby: 0.2.16
+ optionalDependencies:
+ '@types/node': 25.6.0
+ esbuild: 0.27.7
+ fsevents: 2.3.3
+ jiti: 2.6.1
+ terser: 5.46.2
+ yaml: 2.8.3
+ transitivePeerDependencies:
+ - '@emnapi/core'
+ - '@emnapi/runtime'
+
+ rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0):
+ 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(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)
+ '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.53
+ '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.53
+ transitivePeerDependencies:
+ - '@emnapi/core'
+ - '@emnapi/runtime'
- rollup-plugin-visualizer@6.0.5(rollup@4.57.1):
+ rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2):
dependencies:
- open: 8.4.2
- picomatch: 4.0.3
+ open: 11.0.0
+ picomatch: 4.0.4
source-map: 0.7.6
- yargs: 17.7.2
+ yargs: 18.0.0
optionalDependencies:
- rollup: 4.57.1
+ rolldown: 1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)
+ rollup: 4.60.2
- rollup@4.57.1:
+ rollup@4.60.2:
dependencies:
'@types/estree': 1.0.8
optionalDependencies:
- '@rollup/rollup-android-arm-eabi': 4.57.1
- '@rollup/rollup-android-arm64': 4.57.1
- '@rollup/rollup-darwin-arm64': 4.57.1
- '@rollup/rollup-darwin-x64': 4.57.1
- '@rollup/rollup-freebsd-arm64': 4.57.1
- '@rollup/rollup-freebsd-x64': 4.57.1
- '@rollup/rollup-linux-arm-gnueabihf': 4.57.1
- '@rollup/rollup-linux-arm-musleabihf': 4.57.1
- '@rollup/rollup-linux-arm64-gnu': 4.57.1
- '@rollup/rollup-linux-arm64-musl': 4.57.1
- '@rollup/rollup-linux-loong64-gnu': 4.57.1
- '@rollup/rollup-linux-loong64-musl': 4.57.1
- '@rollup/rollup-linux-ppc64-gnu': 4.57.1
- '@rollup/rollup-linux-ppc64-musl': 4.57.1
- '@rollup/rollup-linux-riscv64-gnu': 4.57.1
- '@rollup/rollup-linux-riscv64-musl': 4.57.1
- '@rollup/rollup-linux-s390x-gnu': 4.57.1
- '@rollup/rollup-linux-x64-gnu': 4.57.1
- '@rollup/rollup-linux-x64-musl': 4.57.1
- '@rollup/rollup-openbsd-x64': 4.57.1
- '@rollup/rollup-openharmony-arm64': 4.57.1
- '@rollup/rollup-win32-arm64-msvc': 4.57.1
- '@rollup/rollup-win32-ia32-msvc': 4.57.1
- '@rollup/rollup-win32-x64-gnu': 4.57.1
- '@rollup/rollup-win32-x64-msvc': 4.57.1
+ '@rollup/rollup-android-arm-eabi': 4.60.2
+ '@rollup/rollup-android-arm64': 4.60.2
+ '@rollup/rollup-darwin-arm64': 4.60.2
+ '@rollup/rollup-darwin-x64': 4.60.2
+ '@rollup/rollup-freebsd-arm64': 4.60.2
+ '@rollup/rollup-freebsd-x64': 4.60.2
+ '@rollup/rollup-linux-arm-gnueabihf': 4.60.2
+ '@rollup/rollup-linux-arm-musleabihf': 4.60.2
+ '@rollup/rollup-linux-arm64-gnu': 4.60.2
+ '@rollup/rollup-linux-arm64-musl': 4.60.2
+ '@rollup/rollup-linux-loong64-gnu': 4.60.2
+ '@rollup/rollup-linux-loong64-musl': 4.60.2
+ '@rollup/rollup-linux-ppc64-gnu': 4.60.2
+ '@rollup/rollup-linux-ppc64-musl': 4.60.2
+ '@rollup/rollup-linux-riscv64-gnu': 4.60.2
+ '@rollup/rollup-linux-riscv64-musl': 4.60.2
+ '@rollup/rollup-linux-s390x-gnu': 4.60.2
+ '@rollup/rollup-linux-x64-gnu': 4.60.2
+ '@rollup/rollup-linux-x64-musl': 4.60.2
+ '@rollup/rollup-openbsd-x64': 4.60.2
+ '@rollup/rollup-openharmony-arm64': 4.60.2
+ '@rollup/rollup-win32-arm64-msvc': 4.60.2
+ '@rollup/rollup-win32-ia32-msvc': 4.60.2
+ '@rollup/rollup-win32-x64-gnu': 4.60.2
+ '@rollup/rollup-win32-x64-msvc': 4.60.2
fsevents: 2.3.3
- rou3@0.7.12: {}
+ rope-sequence@1.3.4: {}
+
+ rou3@0.8.1: {}
run-applescript@7.1.0: {}
@@ -13793,27 +15271,7 @@ snapshots:
safe-buffer@5.2.1: {}
- safer-buffer@2.1.2: {}
-
- satori-html@0.3.2:
- dependencies:
- ultrahtml: 1.6.0
-
- satori@0.18.4:
- 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.17
- 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-layout: 3.2.1
-
- sax@1.4.4: {}
+ sax@1.6.0: {}
scslre@0.3.0:
dependencies:
@@ -13825,15 +15283,13 @@ snapshots:
search-insights@2.17.3: {}
- secure-json-parse@2.7.0: {}
-
semver@6.3.1: {}
semver@7.7.4: {}
send@1.2.1:
dependencies:
- debug: 4.4.1
+ debug: 4.4.3
encodeurl: 2.0.0
escape-html: 1.0.3
etag: 1.8.1
@@ -13847,15 +15303,13 @@ snapshots:
transitivePeerDependencies:
- supports-color
- serialize-javascript@6.0.2:
- dependencies:
- randombytes: 2.1.0
+ serialize-javascript@7.0.5: {}
- seroval@1.5.0: {}
+ seroval@1.5.2: {}
serve-placeholder@2.0.2:
dependencies:
- defu: 6.1.4
+ defu: 6.1.7
serve-static@2.2.1:
dependencies:
@@ -13922,14 +15376,14 @@ snapshots:
shell-quote@1.8.3: {}
- shiki@3.22.0:
+ shiki@4.0.2:
dependencies:
- '@shikijs/core': 3.22.0
- '@shikijs/engine-javascript': 3.22.0
- '@shikijs/engine-oniguruma': 3.22.0
- '@shikijs/langs': 3.22.0
- '@shikijs/themes': 3.22.0
- '@shikijs/types': 3.22.0
+ '@shikijs/core': 4.0.2
+ '@shikijs/engine-javascript': 4.0.2
+ '@shikijs/engine-oniguruma': 4.0.2
+ '@shikijs/langs': 4.0.2
+ '@shikijs/themes': 4.0.2
+ '@shikijs/types': 4.0.2
'@shikijs/vscode-textmate': 10.0.2
'@types/hast': 3.0.4
@@ -13971,10 +15425,12 @@ snapshots:
once: 1.4.0
simple-concat: 1.0.1
- simple-git@3.30.0:
+ simple-git@3.36.0:
dependencies:
'@kwsites/file-exists': 1.1.1
'@kwsites/promise-deferred': 1.1.1
+ '@simple-git/args-pathspec': 1.0.3
+ '@simple-git/argv-parser': 1.1.1
debug: 4.4.1
transitivePeerDependencies:
- supports-color
@@ -13987,10 +15443,10 @@ snapshots:
sisteransi@1.0.5: {}
- site-config-stack@3.2.19(vue@3.5.28(typescript@5.9.3)):
+ site-config-stack@4.0.8(vue@3.5.33(typescript@6.0.3)):
dependencies:
ufo: 1.6.3
- vue: 3.5.28(typescript@5.9.3)
+ vue: 3.5.33(typescript@6.0.3)
skin-tone@2.0.0:
dependencies:
@@ -13998,22 +15454,22 @@ snapshots:
slash@5.1.0: {}
- slugify@1.6.6: {}
+ slugify@1.6.9: {}
- smob@1.5.0: {}
+ smob@1.6.1: {}
socket.io-client@4.8.3:
dependencies:
'@socket.io/component-emitter': 3.1.2
debug: 4.4.1
engine.io-client: 6.6.4
- socket.io-parser: 4.2.5
+ socket.io-parser: 4.2.6
transitivePeerDependencies:
- bufferutil
- supports-color
- utf-8-validate
- socket.io-parser@4.2.5:
+ socket.io-parser@4.2.6:
dependencies:
'@socket.io/component-emitter': 3.1.2
debug: 4.4.1
@@ -14038,13 +15494,11 @@ snapshots:
spdx-expression-parse@4.0.0:
dependencies:
spdx-exceptions: 2.5.0
- spdx-license-ids: 3.0.22
+ spdx-license-ids: 3.0.23
- spdx-license-ids@3.0.22: {}
+ spdx-license-ids@3.0.23: {}
- speakingurl@14.0.1: {}
-
- srvx@0.11.2: {}
+ srvx@0.11.15: {}
stable-hash-x@0.2.0: {}
@@ -14054,6 +15508,8 @@ snapshots:
std-env@3.10.0: {}
+ std-env@4.1.0: {}
+
storyblok-algolia-indexer@1.1.0:
dependencies:
algoliasearch: 4.25.3
@@ -14064,11 +15520,11 @@ snapshots:
storyblok-js-client@5.14.4: {}
- streamx@2.23.0:
+ streamx@2.25.0:
dependencies:
events-universal: 1.0.1
fast-fifo: 1.3.2
- text-decoder: 1.2.3
+ text-decoder: 1.2.7
transitivePeerDependencies:
- bare-abort-controller
- react-native-b4a
@@ -14083,9 +15539,13 @@ snapshots:
dependencies:
eastasianwidth: 0.2.0
emoji-regex: 9.2.2
- strip-ansi: 7.1.2
+ strip-ansi: 7.2.0
- string.prototype.codepointat@0.2.1: {}
+ string-width@7.2.0:
+ dependencies:
+ emoji-regex: 10.6.0
+ get-east-asian-width: 1.5.0
+ strip-ansi: 7.2.0
string_decoder@1.1.1:
dependencies:
@@ -14104,14 +15564,12 @@ snapshots:
dependencies:
ansi-regex: 5.0.1
- strip-ansi@7.1.2:
+ strip-ansi@7.2.0:
dependencies:
ansi-regex: 6.2.2
strip-final-newline@3.0.0: {}
- strip-final-newline@4.0.0: {}
-
strip-indent@4.1.1: {}
strip-json-comments@2.0.1:
@@ -14123,20 +15581,16 @@ snapshots:
dependencies:
js-tokens: 9.0.1
- strnum@2.1.2: {}
+ strnum@2.2.3: {}
- structured-clone-es@1.0.0: {}
+ structured-clone-es@2.0.0: {}
- stylehacks@7.0.7(postcss@8.5.6):
+ stylehacks@7.0.10(postcss@8.5.10):
dependencies:
- browserslist: 4.28.1
- postcss: 8.5.6
+ browserslist: 4.28.2
+ postcss: 8.5.10
postcss-selector-parser: 7.1.1
- superjson@2.2.6:
- dependencies:
- copy-anything: 4.0.5
-
supports-color@10.2.2: {}
supports-color@7.2.0:
@@ -14145,35 +15599,29 @@ snapshots:
supports-preserve-symlinks-flag@1.0.0: {}
- svgo@4.0.0:
+ svgo@4.0.1:
dependencies:
commander: 11.1.0
css-select: 5.2.2
- css-tree: 3.1.0
+ css-tree: 3.2.1
css-what: 6.2.2
csso: 5.0.5
picocolors: 1.1.1
- sax: 1.4.4
-
- swrv@1.1.0(vue@3.5.28(typescript@5.9.3)):
- dependencies:
- vue: 3.5.28(typescript@5.9.3)
-
- system-architecture@0.1.0: {}
+ sax: 1.6.0
tagged-tag@1.0.0: {}
- tailwind-merge@3.4.0: {}
+ tailwind-merge@3.5.0: {}
- tailwind-variants@3.2.2(tailwind-merge@3.4.0)(tailwindcss@4.1.18):
+ tailwind-variants@3.2.2(tailwind-merge@3.5.0)(tailwindcss@4.2.4):
dependencies:
- tailwindcss: 4.1.18
+ tailwindcss: 4.2.4
optionalDependencies:
- tailwind-merge: 3.4.0
+ tailwind-merge: 3.5.0
- tailwindcss@4.1.18: {}
+ tailwindcss@4.2.4: {}
- tapable@2.3.0: {}
+ tapable@2.3.3: {}
tar-fs@2.1.4:
dependencies:
@@ -14192,33 +15640,42 @@ snapshots:
readable-stream: 3.6.2
optional: true
- tar-stream@3.1.7:
+ tar-stream@3.1.8:
dependencies:
- b4a: 1.7.3
+ b4a: 1.8.0
+ bare-fs: 4.7.1
fast-fifo: 1.3.2
- streamx: 2.23.0
+ streamx: 2.25.0
transitivePeerDependencies:
- bare-abort-controller
+ - bare-buffer
- react-native-b4a
- tar@7.5.7:
+ tar@7.5.13:
dependencies:
'@isaacs/fs-minipass': 4.0.1
chownr: 3.0.0
- minipass: 7.1.2
+ minipass: 7.1.3
minizlib: 3.1.0
yallist: 5.0.0
- terser@5.46.0:
+ teex@1.0.1:
+ dependencies:
+ streamx: 2.25.0
+ transitivePeerDependencies:
+ - bare-abort-controller
+ - react-native-b4a
+
+ terser@5.46.2:
dependencies:
'@jridgewell/source-map': 0.3.11
- acorn: 8.15.0
+ acorn: 8.16.0
commander: 2.20.3
source-map-support: 0.5.21
- text-decoder@1.2.3:
+ text-decoder@1.2.7:
dependencies:
- b4a: 1.7.3
+ b4a: 1.8.0
transitivePeerDependencies:
- react-native-b4a
@@ -14226,13 +15683,22 @@ snapshots:
tiny-invariant@1.3.3: {}
+ tinyclip@0.1.12: {}
+
tinyexec@1.0.2: {}
+ tinyexec@1.1.1: {}
+
tinyglobby@0.2.15:
dependencies:
fdir: 6.5.0(picomatch@4.0.3)
picomatch: 4.0.3
+ tinyglobby@0.2.16:
+ dependencies:
+ fdir: 6.5.0(picomatch@4.0.4)
+ picomatch: 4.0.4
+
to-buffer@1.2.2:
dependencies:
isarray: 2.0.5
@@ -14260,9 +15726,9 @@ snapshots:
trough@2.2.0: {}
- ts-api-utils@2.4.0(typescript@5.9.3):
+ ts-api-utils@2.5.0(typescript@6.0.3):
dependencies:
- typescript: 5.9.3
+ typescript: 6.0.3
tslib@2.8.1: {}
@@ -14278,7 +15744,7 @@ snapshots:
type-fest@4.41.0:
optional: true
- type-fest@5.4.4:
+ type-fest@5.6.0:
dependencies:
tagged-tag: 1.0.0
@@ -14292,6 +15758,8 @@ snapshots:
typescript@5.9.3: {}
+ typescript@6.0.3: {}
+
ufo@1.6.3: {}
ultrahtml@1.6.0: {}
@@ -14307,26 +15775,18 @@ snapshots:
undici-types@7.16.0: {}
+ undici-types@7.19.2: {}
+
unenv@2.0.0-rc.24:
dependencies:
pathe: 2.0.3
- unhead@2.1.4:
+ unhead@2.1.13:
dependencies:
- hookable: 6.0.1
+ hookable: 6.1.1
unicode-emoji-modifier-base@1.0.0: {}
- unicode-properties@1.4.1:
- dependencies:
- base64-js: 1.5.1
- unicode-trie: 2.0.0
-
- unicode-trie@2.0.0:
- dependencies:
- pako: 0.2.9
- tiny-inflate: 1.0.3
-
unicorn-magic@0.1.0:
optional: true
@@ -14344,28 +15804,46 @@ snapshots:
trough: 2.2.0
vfile: 6.0.3
- unifont@0.4.1:
+ unifont@0.7.4:
dependencies:
- css-tree: 3.1.0
+ css-tree: 3.2.1
+ ofetch: 1.5.1
ohash: 2.0.11
- unimport@5.6.0:
+ unimport@5.7.0:
dependencies:
- acorn: 8.15.0
+ acorn: 8.16.0
escape-string-regexp: 5.0.0
estree-walker: 3.0.3
local-pkg: 1.1.2
magic-string: 0.30.21
- mlly: 1.8.0
+ mlly: 1.8.2
pathe: 2.0.3
- picomatch: 4.0.3
+ picomatch: 4.0.4
pkg-types: 2.3.0
scule: 1.3.0
strip-literal: 3.1.0
- tinyglobby: 0.2.15
+ tinyglobby: 0.2.16
unplugin: 2.3.11
unplugin-utils: 0.3.1
+ unimport@6.1.1:
+ dependencies:
+ acorn: 8.16.0
+ escape-string-regexp: 5.0.0
+ estree-walker: 3.0.3
+ local-pkg: 1.1.2
+ magic-string: 0.30.21
+ mlly: 1.8.2
+ pathe: 2.0.3
+ picomatch: 4.0.4
+ pkg-types: 2.3.0
+ scule: 1.3.0
+ strip-literal: 3.1.0
+ tinyglobby: 0.2.16
+ unplugin: 3.0.0
+ unplugin-utils: 0.3.1
+
unist-builder@4.0.0:
dependencies:
'@types/unist': 3.0.3
@@ -14398,76 +15876,37 @@ snapshots:
unist-util-is: 6.0.1
unist-util-visit-parents: 6.0.2
- unplugin-ast@0.15.4:
- dependencies:
- '@babel/generator': 7.29.1
- ast-kit: 2.2.0
- magic-string-ast: 1.0.3
- unplugin: 2.3.11
-
- unplugin-auto-import@20.3.0(@nuxt/kit@4.3.1(magicast@0.5.2))(@vueuse/core@13.9.0(vue@3.5.28(typescript@5.9.3))):
+ unplugin-auto-import@21.0.0(@nuxt/kit@4.4.2(magicast@0.5.2))(@vueuse/core@14.2.1(vue@3.5.33(typescript@6.0.3))):
dependencies:
local-pkg: 1.1.2
magic-string: 0.30.21
- picomatch: 4.0.3
- unimport: 5.6.0
+ picomatch: 4.0.4
+ unimport: 5.7.0
unplugin: 2.3.11
unplugin-utils: 0.3.1
optionalDependencies:
- '@nuxt/kit': 4.3.1(magicast@0.5.2)
- '@vueuse/core': 13.9.0(vue@3.5.28(typescript@5.9.3))
-
- unplugin-utils@0.2.5:
- dependencies:
- pathe: 2.0.3
- picomatch: 4.0.3
+ '@nuxt/kit': 4.4.2(magicast@0.5.2)
+ '@vueuse/core': 14.2.1(vue@3.5.33(typescript@6.0.3))
unplugin-utils@0.3.1:
dependencies:
pathe: 2.0.3
picomatch: 4.0.3
- unplugin-vue-components@30.0.0(@babel/parser@7.29.0)(@nuxt/kit@4.3.1(magicast@0.5.2))(vue@3.5.28(typescript@5.9.3)):
- dependencies:
- chokidar: 4.0.3
- debug: 4.4.1
- local-pkg: 1.1.2
- magic-string: 0.30.21
- mlly: 1.8.0
- tinyglobby: 0.2.15
- unplugin: 2.3.11
- unplugin-utils: 0.3.1
- vue: 3.5.28(typescript@5.9.3)
- optionalDependencies:
- '@babel/parser': 7.29.0
- '@nuxt/kit': 4.3.1(magicast@0.5.2)
- transitivePeerDependencies:
- - supports-color
-
- unplugin-vue-router@0.19.2(@vue/compiler-sfc@3.5.28)(vue-router@4.6.4(vue@3.5.28(typescript@5.9.3)))(vue@3.5.28(typescript@5.9.3)):
+ unplugin-vue-components@32.0.0(@nuxt/kit@4.4.2(magicast@0.5.2))(vue@3.5.33(typescript@6.0.3)):
dependencies:
- '@babel/generator': 7.29.1
- '@vue-macros/common': 3.1.2(vue@3.5.28(typescript@5.9.3))
- '@vue/compiler-sfc': 3.5.28
- '@vue/language-core': 3.2.4
- ast-walker-scope: 0.8.3
chokidar: 5.0.0
- json5: 2.2.3
local-pkg: 1.1.2
magic-string: 0.30.21
- mlly: 1.8.0
- muggle-string: 0.4.1
- pathe: 2.0.3
- picomatch: 4.0.3
- scule: 1.3.0
- tinyglobby: 0.2.15
- unplugin: 2.3.11
+ mlly: 1.8.2
+ obug: 2.1.1
+ picomatch: 4.0.4
+ tinyglobby: 0.2.16
+ unplugin: 3.0.0
unplugin-utils: 0.3.1
- yaml: 2.8.2
+ vue: 3.5.33(typescript@6.0.3)
optionalDependencies:
- vue-router: 4.6.4(vue@3.5.28(typescript@5.9.3))
- transitivePeerDependencies:
- - vue
+ '@nuxt/kit': 4.4.2(magicast@0.5.2)
unplugin@2.3.11:
dependencies:
@@ -14479,9 +15918,14 @@ snapshots:
unplugin@3.0.0:
dependencies:
'@jridgewell/remapping': 2.3.5
- picomatch: 4.0.3
+ picomatch: 4.0.4
webpack-virtual-modules: 0.6.2
+ unrouting@0.1.7:
+ dependencies:
+ escape-string-regexp: 5.0.0
+ ufo: 1.6.3
+
unrs-resolver@1.11.1:
dependencies:
napi-postinstall: 0.3.4
@@ -14506,20 +15950,20 @@ snapshots:
'@unrs/resolver-binding-win32-ia32-msvc': 1.11.1
'@unrs/resolver-binding-win32-x64-msvc': 1.11.1
- unstorage@1.17.4(@netlify/blobs@9.1.2)(db0@0.3.4(better-sqlite3@11.10.0))(ioredis@5.9.2):
+ unstorage@1.17.5(@netlify/blobs@9.1.2)(db0@0.3.4(better-sqlite3@11.10.0))(ioredis@5.10.1):
dependencies:
anymatch: 3.1.3
chokidar: 5.0.0
destr: 2.0.5
- h3: 1.15.5
- lru-cache: 11.2.5
+ h3: 1.15.11
+ lru-cache: 11.3.5
node-fetch-native: 1.6.7
ofetch: 1.5.1
ufo: 1.6.3
optionalDependencies:
'@netlify/blobs': 9.1.2
db0: 0.3.4(better-sqlite3@11.10.0)
- ioredis: 5.9.2
+ ioredis: 5.10.1
untun@0.1.3:
dependencies:
@@ -14540,17 +15984,17 @@ snapshots:
exsolve: 1.0.8
knitwork: 1.3.0
magic-string: 0.30.21
- mlly: 1.8.0
+ mlly: 1.8.2
pathe: 2.0.3
pkg-types: 2.3.0
- update-browserslist-db@1.2.3(browserslist@4.28.1):
+ update-browserslist-db@1.2.3(browserslist@4.28.2):
dependencies:
- browserslist: 4.28.1
+ browserslist: 4.28.2
escalade: 3.2.0
picocolors: 1.1.1
- uqr@0.1.2: {}
+ uqr@0.1.3: {}
uri-js@4.4.1:
dependencies:
@@ -14564,15 +16008,15 @@ snapshots:
uuid@11.1.0:
optional: true
- valibot@1.2.0(typescript@5.9.3):
+ valibot@1.3.1(typescript@6.0.3):
optionalDependencies:
- typescript: 5.9.3
+ typescript: 6.0.3
- vaul-vue@0.4.1(reka-ui@2.6.0(typescript@5.9.3)(vue@3.5.28(typescript@5.9.3)))(vue@3.5.28(typescript@5.9.3)):
+ vaul-vue@0.4.1(reka-ui@2.9.3(vue@3.5.33(typescript@6.0.3)))(vue@3.5.33(typescript@6.0.3)):
dependencies:
- '@vueuse/core': 10.11.1(vue@3.5.28(typescript@5.9.3))
- reka-ui: 2.6.0(typescript@5.9.3)(vue@3.5.28(typescript@5.9.3))
- vue: 3.5.28(typescript@5.9.3)
+ '@vueuse/core': 10.11.1(vue@3.5.33(typescript@6.0.3))
+ reka-ui: 2.9.3(vue@3.5.33(typescript@6.0.3))
+ vue: 3.5.33(typescript@6.0.3)
transitivePeerDependencies:
- '@vue/composition-api'
@@ -14591,28 +16035,30 @@ snapshots:
'@types/unist': 3.0.3
vfile-message: 4.0.3
- vite-dev-rpc@1.1.0(vite@7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2)):
+ vite-dev-rpc@1.1.0(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)):
dependencies:
birpc: 2.9.0
- vite: 7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2)
- vite-hot-client: 2.1.0(vite@7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2))
+ vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)
+ vite-hot-client: 2.1.0(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
- vite-hot-client@2.1.0(vite@7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2)):
+ vite-hot-client@2.1.0(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)):
dependencies:
- vite: 7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2)
+ vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)
- vite-node@5.3.0(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2):
+ vite-node@5.3.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(terser@5.46.2)(yaml@2.8.3):
dependencies:
cac: 6.7.14
es-module-lexer: 2.0.0
obug: 2.1.1
pathe: 2.0.3
- vite: 7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2)
+ vite: rolldown-vite@7.3.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(terser@5.46.2)(yaml@2.8.3)
transitivePeerDependencies:
+ - '@emnapi/core'
+ - '@emnapi/runtime'
- '@types/node'
+ - esbuild
- jiti
- less
- - lightningcss
- sass
- sass-embedded
- stylus
@@ -14621,24 +16067,24 @@ snapshots:
- tsx
- yaml
- vite-plugin-checker@0.12.0(eslint@9.28.0(jiti@2.6.1))(optionator@0.9.4)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2))(vue-tsc@3.2.4(typescript@5.9.3)):
+ vite-plugin-checker@0.12.0(eslint@9.28.0(jiti@2.6.1))(optionator@0.9.4)(rolldown-vite@7.3.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(terser@5.46.2)(yaml@2.8.3))(typescript@6.0.3)(vue-tsc@3.2.7(typescript@6.0.3)):
dependencies:
'@babel/code-frame': 7.29.0
chokidar: 4.0.3
npm-run-path: 6.0.0
picocolors: 1.1.1
- picomatch: 4.0.3
+ picomatch: 4.0.4
tiny-invariant: 1.3.3
- tinyglobby: 0.2.15
- vite: 7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2)
+ tinyglobby: 0.2.16
+ vite: rolldown-vite@7.3.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(terser@5.46.2)(yaml@2.8.3)
vscode-uri: 3.1.0
optionalDependencies:
eslint: 9.28.0(jiti@2.6.1)
optionator: 0.9.4
- typescript: 5.9.3
- vue-tsc: 3.2.4(typescript@5.9.3)
+ typescript: 6.0.3
+ vue-tsc: 3.2.7(typescript@6.0.3)
- vite-plugin-inspect@11.3.3(@nuxt/kit@4.3.1(magicast@0.5.2))(vite@7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2)):
+ vite-plugin-inspect@11.3.3(@nuxt/kit@4.4.2(magicast@0.5.2))(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)):
dependencies:
ansis: 4.2.0
debug: 4.4.1
@@ -14648,38 +16094,38 @@ snapshots:
perfect-debounce: 2.1.0
sirv: 3.0.2
unplugin-utils: 0.3.1
- vite: 7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2)
- vite-dev-rpc: 1.1.0(vite@7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2))
+ vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)
+ vite-dev-rpc: 1.1.0(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
optionalDependencies:
- '@nuxt/kit': 4.3.1(magicast@0.5.2)
+ '@nuxt/kit': 4.4.2(magicast@0.5.2)
transitivePeerDependencies:
- supports-color
- vite-plugin-vue-tracer@1.2.0(vite@7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2))(vue@3.5.28(typescript@5.9.3)):
+ vite-plugin-vue-tracer@1.3.0(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3)):
dependencies:
estree-walker: 3.0.3
exsolve: 1.0.8
magic-string: 0.30.21
pathe: 2.0.3
source-map-js: 1.2.1
- vite: 7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2)
- vue: 3.5.28(typescript@5.9.3)
+ vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)
+ vue: 3.5.33(typescript@6.0.3)
- vite@7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)(yaml@2.8.2):
+ vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3):
dependencies:
- esbuild: 0.27.3
- fdir: 6.5.0(picomatch@4.0.3)
- picomatch: 4.0.3
- postcss: 8.5.6
- rollup: 4.57.1
- tinyglobby: 0.2.15
+ esbuild: 0.27.7
+ fdir: 6.5.0(picomatch@4.0.4)
+ picomatch: 4.0.4
+ postcss: 8.5.10
+ rollup: 4.60.2
+ tinyglobby: 0.2.16
optionalDependencies:
- '@types/node': 25.2.2
+ '@types/node': 25.6.0
fsevents: 2.3.3
jiti: 2.6.1
- lightningcss: 1.30.2
- terser: 5.46.0
- yaml: 2.8.2
+ lightningcss: 1.32.0
+ terser: 5.46.2
+ yaml: 2.8.3
vscode-uri@3.1.0: {}
@@ -14687,73 +16133,93 @@ snapshots:
dependencies:
ufo: 1.6.3
- vue-component-meta@3.2.4(typescript@5.9.3):
+ vue-component-meta@3.2.7(typescript@5.9.3):
dependencies:
- '@volar/typescript': 2.4.27
- '@vue/language-core': 3.2.4
+ '@volar/typescript': 2.4.28
+ '@vue/language-core': 3.2.7
path-browserify: 1.0.1
optionalDependencies:
typescript: 5.9.3
- vue-component-type-helpers@3.2.4: {}
+ vue-component-type-helpers@3.2.7: {}
- vue-demi@0.14.10(vue@3.5.28(typescript@5.9.3)):
+ vue-demi@0.14.10(vue@3.5.33(typescript@6.0.3)):
dependencies:
- vue: 3.5.28(typescript@5.9.3)
+ vue: 3.5.33(typescript@6.0.3)
vue-devtools-stub@0.1.0: {}
- vue-eslint-parser@10.2.0(eslint@9.28.0(jiti@2.6.1)):
+ vue-eslint-parser@10.4.0(eslint@9.28.0(jiti@2.6.1)):
dependencies:
debug: 4.4.1
eslint: 9.28.0(jiti@2.6.1)
- eslint-scope: 8.4.0
- eslint-visitor-keys: 4.2.1
- espree: 10.4.0
+ eslint-scope: 9.1.2
+ eslint-visitor-keys: 5.0.1
+ espree: 11.2.0
esquery: 1.7.0
semver: 7.7.4
transitivePeerDependencies:
- supports-color
- vue-instantsearch@4.23.1(@vue/server-renderer@3.5.28(vue@3.5.28(typescript@5.9.3)))(algoliasearch@4.25.3)(react@19.2.4)(vue@3.5.28(typescript@5.9.3)):
+ vue-instantsearch@4.23.1(@vue/server-renderer@3.5.33(vue@3.5.33(typescript@6.0.3)))(algoliasearch@4.25.3)(vue@3.5.33(typescript@6.0.3)):
dependencies:
algoliasearch: 4.25.3
instantsearch-ui-components: 0.17.1(react@19.2.4)
instantsearch.js: 4.87.1(algoliasearch@4.25.3)
mitt: 2.1.0
- vue: 3.5.28(typescript@5.9.3)
+ vue: 3.5.33(typescript@6.0.3)
optionalDependencies:
- '@vue/server-renderer': 3.5.28(vue@3.5.28(typescript@5.9.3))
+ '@vue/server-renderer': 3.5.33(vue@3.5.33(typescript@6.0.3))
transitivePeerDependencies:
- react
- vue-router@4.6.4(vue@3.5.28(typescript@5.9.3)):
+ vue-router@5.0.6(@vue/compiler-sfc@3.5.33)(vue@3.5.33(typescript@6.0.3)):
dependencies:
- '@vue/devtools-api': 6.6.4
- vue: 3.5.28(typescript@5.9.3)
+ '@babel/generator': 7.29.1
+ '@vue-macros/common': 3.1.2(vue@3.5.33(typescript@6.0.3))
+ '@vue/devtools-api': 8.1.1
+ ast-walker-scope: 0.8.3
+ chokidar: 5.0.0
+ json5: 2.2.3
+ local-pkg: 1.1.2
+ magic-string: 0.30.21
+ mlly: 1.8.2
+ muggle-string: 0.4.1
+ pathe: 2.0.3
+ picomatch: 4.0.4
+ scule: 1.3.0
+ tinyglobby: 0.2.16
+ unplugin: 3.0.0
+ unplugin-utils: 0.3.1
+ vue: 3.5.33(typescript@6.0.3)
+ yaml: 2.8.3
+ optionalDependencies:
+ '@vue/compiler-sfc': 3.5.33
- vue-tsc@3.2.4(typescript@5.9.3):
+ vue-tsc@3.2.7(typescript@6.0.3):
dependencies:
- '@volar/typescript': 2.4.27
- '@vue/language-core': 3.2.4
- typescript: 5.9.3
+ '@volar/typescript': 2.4.28
+ '@vue/language-core': 3.2.7
+ typescript: 6.0.3
- vue@3.5.28(typescript@5.9.3):
+ vue@3.5.33(typescript@6.0.3):
dependencies:
- '@vue/compiler-dom': 3.5.28
- '@vue/compiler-sfc': 3.5.28
- '@vue/runtime-dom': 3.5.28
- '@vue/server-renderer': 3.5.28(vue@3.5.28(typescript@5.9.3))
- '@vue/shared': 3.5.28
+ '@vue/compiler-dom': 3.5.33
+ '@vue/compiler-sfc': 3.5.33
+ '@vue/runtime-dom': 3.5.33
+ '@vue/server-renderer': 3.5.33(vue@3.5.33(typescript@6.0.3))
+ '@vue/shared': 3.5.33
optionalDependencies:
- typescript: 5.9.3
+ typescript: 6.0.3
+
+ w3c-keyname@2.2.8: {}
web-namespaces@2.0.1: {}
web-streams-polyfill@3.3.3:
optional: true
- web-vitals@5.1.0: {}
+ web-vitals@5.2.0: {}
webidl-conversions@3.0.1: {}
@@ -14769,7 +16235,7 @@ snapshots:
which-typed-array@1.1.20:
dependencies:
available-typed-arrays: 1.0.7
- call-bind: 1.0.8
+ call-bind: 1.0.9
call-bound: 1.0.4
for-each: 0.3.5
get-proto: 1.0.1
@@ -14780,9 +16246,9 @@ snapshots:
dependencies:
isexe: 2.0.0
- which@5.0.0:
+ which@6.0.1:
dependencies:
- isexe: 3.1.5
+ isexe: 4.0.0
word-wrap@1.2.5: {}
@@ -14796,7 +16262,13 @@ snapshots:
dependencies:
ansi-styles: 6.2.3
string-width: 5.1.2
- strip-ansi: 7.1.2
+ strip-ansi: 7.2.0
+
+ wrap-ansi@9.0.2:
+ dependencies:
+ ansi-styles: 6.2.3
+ string-width: 7.2.0
+ strip-ansi: 7.2.0
wrappy@1.0.2: {}
@@ -14808,16 +16280,26 @@ snapshots:
ws@8.18.3: {}
- ws@8.19.0: {}
+ ws@8.20.0: {}
wsl-utils@0.1.0:
dependencies:
- is-wsl: 3.1.0
+ is-wsl: 3.1.1
+
+ wsl-utils@0.3.1:
+ dependencies:
+ is-wsl: 3.1.1
+ powershell-utils: 0.1.0
xml-name-validator@4.0.0: {}
xmlhttprequest-ssl@2.1.2: {}
+ y-protocols@1.0.7(yjs@13.6.30):
+ dependencies:
+ lib0: 0.2.117
+ yjs: 13.6.30
+
y18n@5.0.8: {}
yallist@3.1.1: {}
@@ -14826,39 +16308,38 @@ snapshots:
yaml@2.8.2: {}
- yargs-parser@21.1.1: {}
+ yaml@2.8.3: {}
- yargs@17.7.2:
+ yargs-parser@22.0.0: {}
+
+ yargs@18.0.0:
dependencies:
- cliui: 8.0.1
+ cliui: 9.0.1
escalade: 3.2.0
get-caller-file: 2.0.5
- require-directory: 2.1.1
- string-width: 4.2.3
+ string-width: 7.2.0
y18n: 5.0.8
- yargs-parser: 21.1.1
+ yargs-parser: 22.0.0
+
+ yjs@13.6.30:
+ dependencies:
+ lib0: 0.2.117
yocto-queue@0.1.0: {}
yocto-queue@1.2.2: {}
- yoctocolors@2.1.2: {}
-
- yoga-layout@3.2.1: {}
-
- yoga-wasm-web@0.3.3: {}
-
youch-core@0.3.3:
dependencies:
'@poppinss/exception': 1.2.3
error-stack-parser-es: 1.0.5
- youch@4.1.0-beta.13:
+ youch@4.1.1:
dependencies:
'@poppinss/colors': 4.1.6
- '@poppinss/dumper': 0.6.5
- '@speed-highlight/core': 1.2.14
- cookie-es: 2.0.0
+ '@poppinss/dumper': 0.7.0
+ '@speed-highlight/core': 1.2.15
+ cookie-es: 3.1.1
youch-core: 0.3.3
zip-stream@6.0.1:
@@ -14871,14 +16352,10 @@ snapshots:
dependencies:
zod: 4.3.6
- zod-to-json-schema@3.25.1(zod@3.25.76):
+ zod-to-json-schema@3.25.2(zod@3.25.76):
dependencies:
zod: 3.25.76
- zod-to-json-schema@3.25.1(zod@4.3.6):
- dependencies:
- zod: 4.3.6
-
zod@3.25.76: {}
zod@4.3.6: {}
diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml
new file mode 100644
index 000000000..73075b053
--- /dev/null
+++ b/pnpm-workspace.yaml
@@ -0,0 +1,9 @@
+allowBuilds:
+ '@parcel/watcher': true
+ better-sqlite3: true
+ core-js: true
+ esbuild: true
+ protobufjs: true
+ sharp: true
+ unrs-resolver: true
+ vue-demi: true
diff --git a/server/utils/directus-server.ts b/server/utils/directus-server.ts
index 4af91d766..fb37c3de1 100644
--- a/server/utils/directus-server.ts
+++ b/server/utils/directus-server.ts
@@ -1,11 +1,5 @@
import { $fetch } from 'ofetch';
-import {
- createDirectus,
- readItem,
- readItems,
- rest,
- type QueryFilter,
-} from '@directus/sdk';
+import { createDirectus, rest } from '@directus/sdk';
import type { Schema } from '#shared/types/schema';
const {
@@ -18,9 +12,6 @@ const directusServer = createDirectus(directusUrl as string, {
},
}).with(rest());
-export {
- directusServer,
- readItem,
- readItems,
-};
-export type { QueryFilter };
+export { directusServer };
+export { readItem, readItems } from '@directus/sdk';
+export type { QueryFilter } from '@directus/sdk';
From 693035f44986fbc045c65b71fab4fbf4bf4cd569 Mon Sep 17 00:00:00 2001
From: bryantgillespie
Date: Thu, 23 Apr 2026 12:08:01 -0400
Subject: [PATCH 02/45] add packageManager back
---
package.json | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/package.json b/package.json
index 53fa3c391..061bc0ab5 100644
--- a/package.json
+++ b/package.json
@@ -48,5 +48,6 @@
"overrides": {
"vite": "npm:rolldown-vite@latest"
}
- }
+ },
+ "packageManager": "pnpm@10.29.2+sha512.bef43fa759d91fd2da4b319a5a0d13ef7a45bb985a3d7342058470f9d2051a3ba8674e629672654686ef9443ad13a82da2beb9eeb3e0221c87b8154fff9d74b8"
}
From 40b762bf994005d0f8ca550ba501476996ccc4c6 Mon Sep 17 00:00:00 2001
From: bryantgillespie
Date: Thu, 23 Apr 2026 12:27:59 -0400
Subject: [PATCH 03/45] remove hardcoded url
---
.env.example | 1 +
nuxt.config.ts | 6 +++++-
2 files changed, 6 insertions(+), 1 deletion(-)
diff --git a/.env.example b/.env.example
index 2d817591e..331678867 100644
--- a/.env.example
+++ b/.env.example
@@ -5,3 +5,4 @@ GOOGLE_TAG_MANAGER_ID=GTM-PTLT3GH
NUXT_UI_PRO_LICENSE=nuxt_ui_pro_license_key_needed_to_build
POSTHOG_API_HOST=https://directus.io/ingest
POSTHOG_API_KEY=phc_secret_key_here
+NUXT_PUBLIC_SITE_URL=https://directus.io
diff --git a/nuxt.config.ts b/nuxt.config.ts
index db0038ee1..2b91131da 100644
--- a/nuxt.config.ts
+++ b/nuxt.config.ts
@@ -24,7 +24,6 @@ export default defineNuxtConfig({
css: ['~/assets/css/main.css', '~/assets/css/algolia.css'],
site: {
- url: 'https://directus.io',
name: 'Directus Docs',
description:
'Explore our resources and powerful data engine to build your projects confidently.',
@@ -168,6 +167,7 @@ export default defineNuxtConfig({
skipInspections: [
// Skip absolute site urls because of our routing setup between the docs and the main site
'absolute-site-urls',
+ 'link-text',
],
},
@@ -374,4 +374,8 @@ export default defineNuxtConfig({
},
},
},
+
+ sitemap: {
+ zeroRuntime: true,
+ },
});
From 12e54f4da748b76e1bfb94b07a135a9af5a56d10 Mon Sep 17 00:00:00 2001
From: bryantgillespie
Date: Sun, 26 Apr 2026 07:15:21 -0400
Subject: [PATCH 04/45] wip
---
.githooks/pre-commit | 3 +
.githooks/pre-push | 9 +
content.config.ts | 1 +
package.json | 6 +-
redirects.csv | 1 +
scripts/_content-lib.mjs | 134 +++++++++++
scripts/check-stable-ids.mjs | 41 ++++
scripts/ensure-stable-ids.mjs | 63 +++++
scripts/redirects-sync.mjs | 422 ++++++++++++++++++++++++++++++++++
scripts/setup-hooks.mjs | 15 ++
10 files changed, 694 insertions(+), 1 deletion(-)
create mode 100755 .githooks/pre-commit
create mode 100755 .githooks/pre-push
create mode 100644 redirects.csv
create mode 100755 scripts/_content-lib.mjs
create mode 100755 scripts/check-stable-ids.mjs
create mode 100755 scripts/ensure-stable-ids.mjs
create mode 100755 scripts/redirects-sync.mjs
create mode 100755 scripts/setup-hooks.mjs
diff --git a/.githooks/pre-commit b/.githooks/pre-commit
new file mode 100755
index 000000000..5e50be8ab
--- /dev/null
+++ b/.githooks/pre-commit
@@ -0,0 +1,3 @@
+#!/bin/sh
+set -e
+pnpm stable-ids:ensure -- --staged
diff --git a/.githooks/pre-push b/.githooks/pre-push
new file mode 100755
index 000000000..955f673b9
--- /dev/null
+++ b/.githooks/pre-push
@@ -0,0 +1,9 @@
+#!/bin/sh
+set -e
+
+if git diff --quiet origin/main...HEAD -- content redirects.csv content.config.ts; then
+ exit 0
+fi
+
+echo "Checking redirects for docs changes..."
+pnpm redirects:check
diff --git a/content.config.ts b/content.config.ts
index 370abe51a..29e092975 100644
--- a/content.config.ts
+++ b/content.config.ts
@@ -16,6 +16,7 @@ export default defineContentConfig({
title: z.string(),
description: z.string().optional(),
headline: z.string().optional(),
+ stableId: z.string().uuid().optional(),
authors: z.array(z.object({
name: z.string(),
title: z.string(),
diff --git a/package.json b/package.json
index 061bc0ab5..51359587c 100644
--- a/package.json
+++ b/package.json
@@ -7,7 +7,11 @@
"dev": "nuxt dev",
"generate": "nuxt generate",
"preview": "nuxt preview",
- "postinstall": "nuxt prepare"
+ "postinstall": "node scripts/setup-hooks.mjs && nuxt prepare",
+ "stable-ids:ensure": "node scripts/ensure-stable-ids.mjs",
+ "stable-ids:check": "node scripts/check-stable-ids.mjs",
+ "redirects:sync": "node scripts/redirects-sync.mjs --base origin/main --manifest redirects.csv --hints .docs/redirect-hints.json --suggest .docs/redirect-decisions-needed.json --accept-high-confidence --fail-on-unresolved",
+ "redirects:check": "node scripts/redirects-sync.mjs --base origin/main --manifest redirects.csv --hints .docs/redirect-hints.json --suggest .docs/redirect-decisions-needed.json --fail-on-unresolved --no-write"
},
"dependencies": {
"@directus/openapi": "0.3.0",
diff --git a/redirects.csv b/redirects.csv
new file mode 100644
index 000000000..e0a04e9ed
--- /dev/null
+++ b/redirects.csv
@@ -0,0 +1 @@
+from,to,status
diff --git a/scripts/_content-lib.mjs b/scripts/_content-lib.mjs
new file mode 100755
index 000000000..afdaa1385
--- /dev/null
+++ b/scripts/_content-lib.mjs
@@ -0,0 +1,134 @@
+import fs from 'node:fs';
+import path from 'node:path';
+
+const ARRAY_KEYS = new Set(['stack', 'features', 'use_cases', 'technologies']);
+const UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
+
+export function isRoutableContentFile(file, { includeLanding = true } = {}) {
+ const normalized = file.replace(/\\/g, '/');
+ if (!normalized.startsWith('content/') || !normalized.endsWith('.md')) return false;
+ if (normalized.startsWith('content/_partials/')) return false;
+ if (!includeLanding && normalized === 'content/index.md') return false;
+ return true;
+}
+
+export function isInScopeContentFile(file) {
+ return isRoutableContentFile(file, { includeLanding: false });
+}
+
+export function listRoutableContentFiles(dir = 'content', { includeLanding = true } = {}) {
+ const files = [];
+ for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
+ const fullPath = path.join(dir, entry.name);
+ const normalized = fullPath.replace(/\\/g, '/');
+ if (entry.isDirectory()) {
+ if (entry.name === '_partials') continue;
+ files.push(...listRoutableContentFiles(fullPath, { includeLanding }));
+ continue;
+ }
+ if (entry.isFile() && isRoutableContentFile(normalized, { includeLanding })) {
+ files.push(normalized);
+ }
+ }
+ return files;
+}
+
+export function listInScopeContentFiles(dir = 'content') {
+ return listRoutableContentFiles(dir, { includeLanding: false });
+}
+
+export function parseFrontmatter(source) {
+ const block = getFrontmatterBlock(source);
+ if (!block) return {};
+
+ const lines = block.body.split(/\r?\n/);
+ const data = {};
+ let currentArrayKey = null;
+
+ for (const line of lines) {
+ const keyMatch = line.match(/^([A-Za-z_][\w-]*):\s*(.*)$/);
+ if (keyMatch) {
+ const [, key, rawValue] = keyMatch;
+ currentArrayKey = null;
+ if (ARRAY_KEYS.has(key)) {
+ if (!rawValue) {
+ data[key] = [];
+ currentArrayKey = key;
+ }
+ else if (rawValue.startsWith('[') && rawValue.endsWith(']')) {
+ data[key] = rawValue
+ .slice(1, -1)
+ .split(',')
+ .map(value => cleanScalar(value))
+ .filter(Boolean);
+ }
+ else {
+ data[key] = [cleanScalar(rawValue)].filter(Boolean);
+ }
+ }
+ else if (rawValue) {
+ data[key] = cleanScalar(rawValue);
+ }
+ continue;
+ }
+
+ if (currentArrayKey) {
+ const itemMatch = line.match(/^\s*-\s*(.+)$/);
+ if (itemMatch) {
+ data[currentArrayKey].push(cleanScalar(itemMatch[1]));
+ continue;
+ }
+ if (/^[^\s]/.test(line)) {
+ currentArrayKey = null;
+ }
+ }
+ }
+
+ return data;
+}
+
+export function cleanScalar(value) {
+ let result = value.trim();
+ if ((result.startsWith('"') && result.endsWith('"')) || (result.startsWith("'") && result.endsWith("'"))) {
+ result = result.slice(1, -1);
+ }
+ return result.trim();
+}
+
+export function getFrontmatterBlock(source) {
+ const match = source.match(/^---(\r?\n)([\s\S]*?)\r?\n---(\r?\n|$)/);
+ if (!match) return null;
+
+ const [fullMatch, newline, body, closingWhitespace] = match;
+ return {
+ fullMatch,
+ newline,
+ body,
+ closingWhitespace,
+ start: 0,
+ end: fullMatch.length,
+ };
+}
+
+export function hasStableId(source) {
+ return /(?:^|\r?\n)stableId:\s*.+(?:\r?\n|$)/.test(getFrontmatterBlock(source)?.body || '');
+}
+
+export function ensureStableIdInSource(source, stableId) {
+ const block = getFrontmatterBlock(source);
+ if (!block) {
+ return { changed: false, source, reason: 'missing-frontmatter' };
+ }
+
+ if (hasStableId(source)) {
+ return { changed: false, source, reason: 'already-present' };
+ }
+
+ const inserted = `---${block.newline}stableId: ${stableId}${block.newline}${block.body}${block.newline}---${block.closingWhitespace}`;
+ const updated = inserted + source.slice(block.end);
+ return { changed: true, source: updated, reason: 'inserted' };
+}
+
+export function isValidUuid(value) {
+ return typeof value === 'string' && UUID_RE.test(value.trim());
+}
diff --git a/scripts/check-stable-ids.mjs b/scripts/check-stable-ids.mjs
new file mode 100755
index 000000000..68965cdcf
--- /dev/null
+++ b/scripts/check-stable-ids.mjs
@@ -0,0 +1,41 @@
+#!/usr/bin/env node
+
+import fs from 'node:fs';
+
+import { getFrontmatterBlock, isValidUuid, listInScopeContentFiles, parseFrontmatter } from './_content-lib.mjs';
+
+function main() {
+ const files = listInScopeContentFiles();
+ const failures = [];
+
+ for (const file of files) {
+ const source = fs.readFileSync(file, 'utf8');
+ const block = getFrontmatterBlock(source);
+ if (!block) {
+ failures.push({ file, reason: 'missing frontmatter' });
+ continue;
+ }
+
+ const frontmatter = parseFrontmatter(source);
+ if (!frontmatter.stableId) {
+ failures.push({ file, reason: 'missing stableId' });
+ continue;
+ }
+
+ if (!isValidUuid(frontmatter.stableId)) {
+ failures.push({ file, reason: `invalid stableId: ${frontmatter.stableId}` });
+ }
+ }
+
+ if (failures.length) {
+ console.error('Stable ID check failed:');
+ for (const failure of failures) {
+ console.error(`- ${failure.file}: ${failure.reason}`);
+ }
+ process.exit(1);
+ }
+
+ console.log(`Stable ID check passed for ${files.length} file(s).`);
+}
+
+main();
diff --git a/scripts/ensure-stable-ids.mjs b/scripts/ensure-stable-ids.mjs
new file mode 100755
index 000000000..19409fc05
--- /dev/null
+++ b/scripts/ensure-stable-ids.mjs
@@ -0,0 +1,63 @@
+#!/usr/bin/env node
+
+import fs from 'node:fs';
+import { execFileSync } from 'node:child_process';
+import crypto from 'node:crypto';
+
+import { ensureStableIdInSource, isInScopeContentFile, listInScopeContentFiles } from './_content-lib.mjs';
+
+const stagedOnly = process.argv.includes('--staged');
+
+function runGit(args) {
+ return execFileSync('git', args, { encoding: 'utf8' });
+}
+
+function listStagedFiles() {
+ const output = runGit(['diff', '--cached', '--name-only', '--diff-filter=AM']);
+ return output
+ .split('\n')
+ .map(line => line.trim())
+ .filter(Boolean)
+ .filter(isInScopeContentFile);
+}
+
+function stageFile(file) {
+ runGit(['add', '--', file]);
+}
+
+function main() {
+ const files = stagedOnly ? listStagedFiles() : listInScopeContentFiles();
+ let inserted = 0;
+ let alreadyPresent = 0;
+ let missingFrontmatter = 0;
+ let staged = 0;
+
+ for (const file of files) {
+ const source = fs.readFileSync(file, 'utf8');
+ const result = ensureStableIdInSource(source, crypto.randomUUID());
+
+ if (!result.changed) {
+ if (result.reason === 'already-present') alreadyPresent++;
+ else if (result.reason === 'missing-frontmatter') missingFrontmatter++;
+ continue;
+ }
+
+ fs.writeFileSync(file, result.source);
+ inserted++;
+
+ if (stagedOnly) {
+ stageFile(file);
+ staged++;
+ }
+ }
+
+ console.log(`Processed files: ${files.length}`);
+ console.log(`Inserted stableId: ${inserted}`);
+ console.log(`Already had stableId: ${alreadyPresent}`);
+ console.log(`Missing frontmatter: ${missingFrontmatter}`);
+ if (stagedOnly) {
+ console.log(`Re-staged files: ${staged}`);
+ }
+}
+
+main();
diff --git a/scripts/redirects-sync.mjs b/scripts/redirects-sync.mjs
new file mode 100755
index 000000000..9aa1cd73b
--- /dev/null
+++ b/scripts/redirects-sync.mjs
@@ -0,0 +1,422 @@
+#!/usr/bin/env node
+
+import fs from 'node:fs';
+import path from 'node:path';
+import { execFileSync } from 'node:child_process';
+
+import { listRoutableContentFiles, parseFrontmatter } from './_content-lib.mjs';
+
+const DEFAULTS = {
+ base: 'origin/main',
+ manifest: 'redirects.csv',
+ hints: '.docs/redirect-hints.json',
+ suggest: '.docs/redirect-decisions-needed.json',
+ acceptHighConfidence: false,
+ failOnUnresolved: false,
+ noWrite: false,
+};
+
+function parseArgs(argv) {
+ const options = { ...DEFAULTS };
+
+ for (let i = 0; i < argv.length; i++) {
+ const arg = argv[i];
+ if (arg === '--base') options.base = argv[++i];
+ else if (arg === '--manifest') options.manifest = argv[++i];
+ else if (arg === '--hints') options.hints = argv[++i];
+ else if (arg === '--suggest') options.suggest = argv[++i];
+ else if (arg === '--accept-high-confidence') options.acceptHighConfidence = true;
+ else if (arg === '--fail-on-unresolved') options.failOnUnresolved = true;
+ else if (arg === '--no-write') options.noWrite = true;
+ else if (arg === '--help' || arg === '-h') {
+ printHelp();
+ process.exit(0);
+ }
+ else {
+ console.error(`Unknown argument: ${arg}`);
+ printHelp();
+ process.exit(1);
+ }
+ }
+
+ return options;
+}
+
+function printHelp() {
+ console.log(`redirects-sync
+
+Usage:
+ node scripts/redirects-sync.mjs [options]
+
+Options:
+ --base Base git ref to diff against (default: origin/main)
+ --manifest Redirect manifest CSV (default: redirects.csv)
+ --hints Manual redirect hints JSON (default: .docs/redirect-hints.json)
+ --suggest Decisions-needed report (default: .docs/redirect-decisions-needed.json)
+ --accept-high-confidence Auto-append deterministic redirects to the manifest
+ --fail-on-unresolved Exit non-zero if unresolved routes remain
+ --no-write Do not write manifest or report files
+`);
+}
+
+function runGit(args) {
+ try {
+ return execFileSync('git', args, { encoding: 'utf8' });
+ }
+ catch (error) {
+ const details = error.stderr?.toString?.() || error.message;
+ throw new Error(`git ${args.join(' ')} failed:\n${details}`);
+ }
+}
+
+function listBaseContentFiles(baseRef) {
+ const output = runGit(['ls-tree', '-r', '--name-only', baseRef, '--', 'content']);
+ return output
+ .split('\n')
+ .map(line => line.trim())
+ .filter(Boolean)
+ .filter(file => file.endsWith('.md'))
+ .filter(file => !file.startsWith('content/_partials/'));
+}
+
+function readBaseFile(baseRef, file) {
+ return runGit(['show', `${baseRef}:${file}`]);
+}
+
+function readCurrentFile(file) {
+ return fs.readFileSync(file, 'utf8');
+}
+
+function stripNumericPrefix(segment) {
+ return segment.replace(/^\d+\./, '');
+}
+
+function buildPublicPath(file, frontmatter = {}) {
+ if (typeof frontmatter.path === 'string' && frontmatter.path.trim()) {
+ return normalizePublicPath(frontmatter.path.trim());
+ }
+
+ const relative = file.replace(/^content\//, '');
+ const parts = relative.split('/');
+ const fileName = parts.pop();
+ const fileStem = stripNumericPrefix(fileName.replace(/\.[^.]+$/, ''));
+ const pathParts = parts.map(stripNumericPrefix).filter(Boolean);
+
+ if (fileStem !== 'index') {
+ pathParts.push(fileStem);
+ }
+
+ return normalizePublicPath(`/${pathParts.join('/')}`);
+}
+
+function normalizePublicPath(routePath) {
+ if (!routePath || routePath === '/') return '/';
+ const normalized = `/${routePath.replace(/^\/+/, '').replace(/\/+$/, '')}`;
+ return normalized === '/index' ? '/' : normalized;
+}
+
+function toSnapshotItem(file, source, collection = 'content') {
+ const frontmatter = parseFrontmatter(source);
+ const publicPath = buildPublicPath(file, frontmatter);
+
+ return {
+ collection,
+ path: publicPath,
+ sourceFile: file,
+ title: frontmatter.title,
+ stableId: frontmatter.stableId,
+ };
+}
+
+function loadCurrentSnapshot() {
+ const files = listRoutableContentFiles();
+ return files.map(file => {
+ const collection = file === 'content/index.md' ? 'landing' : 'content';
+ return toSnapshotItem(file, readCurrentFile(file), collection);
+ });
+}
+
+function loadBaseSnapshot(baseRef) {
+ const files = listBaseContentFiles(baseRef);
+ return files.map(file => {
+ const collection = file === 'content/index.md' ? 'landing' : 'content';
+ return toSnapshotItem(file, readBaseFile(baseRef, file), collection);
+ });
+}
+
+function indexByPath(items) {
+ return new Map(items.map(item => [item.path, item]));
+}
+
+function indexByStableId(items) {
+ const byStableId = new Map();
+ for (const item of items) {
+ if (!item.stableId) continue;
+ const matches = byStableId.get(item.stableId) || [];
+ matches.push(item);
+ byStableId.set(item.stableId, matches);
+ }
+ return byStableId;
+}
+
+function loadRedirectManifest(file) {
+ if (!fs.existsSync(file)) {
+ return { rows: [], fromSet: new Set() };
+ }
+
+ const text = fs.readFileSync(file, 'utf8').trim();
+ if (!text) return { rows: [], fromSet: new Set() };
+
+ const lines = text.split('\n').map(line => line.trim()).filter(Boolean);
+ const rows = [];
+ const seen = new Set();
+
+ for (let index = 1; index < lines.length; index++) {
+ const [from, to, status] = splitCsvLine(lines[index]);
+ if (!from || !to || !status) continue;
+ if (seen.has(from)) {
+ throw new Error(`Duplicate redirect source in ${file}: ${from}`);
+ }
+ seen.add(from);
+ rows.push({ from, to, status });
+ }
+
+ return { rows, fromSet: seen };
+}
+
+function splitCsvLine(line) {
+ const parts = [];
+ let current = '';
+ let inQuotes = false;
+
+ for (let i = 0; i < line.length; i++) {
+ const char = line[i];
+ if (char === '"') {
+ inQuotes = !inQuotes;
+ continue;
+ }
+ if (char === ',' && !inQuotes) {
+ parts.push(current);
+ current = '';
+ continue;
+ }
+ current += char;
+ }
+ parts.push(current);
+ return parts.map(part => part.trim());
+}
+
+function ensureManifest(file) {
+ if (!fs.existsSync(file)) {
+ fs.writeFileSync(file, 'from,to,status\n');
+ }
+}
+
+function loadHints(file) {
+ if (!fs.existsSync(file)) {
+ return { manualRedirects: {} };
+ }
+
+ const parsed = JSON.parse(fs.readFileSync(file, 'utf8'));
+ return {
+ manualRedirects: parsed.manualRedirects || {},
+ };
+}
+
+function appendRedirectRows(file, rows) {
+ if (!rows.length) return;
+ ensureManifest(file);
+ const text = rows.map(row => `${row.from},${row.to},${row.status}`).join('\n') + '\n';
+ fs.appendFileSync(file, text);
+}
+
+function resolveRemovedRoute(oldPage, currentByStableId, manualRedirects) {
+ const manualTarget = manualRedirects[oldPage.path];
+ if (manualTarget) {
+ return {
+ status: 'accepted',
+ from: oldPage.path,
+ to: manualTarget,
+ reason: 'manual redirect hint',
+ old: oldPage,
+ matches: [],
+ };
+ }
+
+ if (!oldPage.stableId) {
+ return {
+ status: 'unresolved',
+ reason: 'old route has no stableId in base ref',
+ old: oldPage,
+ matches: [],
+ };
+ }
+
+ const matches = (currentByStableId.get(oldPage.stableId) || [])
+ .filter(candidate => candidate.path !== oldPage.path);
+
+ if (matches.length === 1) {
+ return {
+ status: 'accepted',
+ from: oldPage.path,
+ to: matches[0].path,
+ reason: 'same stableId',
+ old: oldPage,
+ matches,
+ };
+ }
+
+ if (matches.length > 1) {
+ return {
+ status: 'unresolved',
+ reason: 'multiple current routes share the same stableId',
+ old: oldPage,
+ matches,
+ };
+ }
+
+ return {
+ status: 'unresolved',
+ reason: 'no current route found with the same stableId',
+ old: oldPage,
+ matches: [],
+ };
+}
+
+function writeDecisionArtifacts(file, unresolved, summary) {
+ const payload = {
+ generatedAt: new Date().toISOString(),
+ summary,
+ unresolved: unresolved.map(item => ({
+ reason: item.reason,
+ old: {
+ path: item.old.path,
+ title: item.old.title || '',
+ sourceFile: item.old.sourceFile || '',
+ stableId: item.old.stableId || '',
+ },
+ matches: item.matches.map(match => ({
+ path: match.path,
+ title: match.title || '',
+ sourceFile: match.sourceFile || '',
+ stableId: match.stableId || '',
+ })),
+ })),
+ };
+
+ const markdownFile = file.endsWith('.json')
+ ? file.replace(/\.json$/i, '.md')
+ : `${file}.md`;
+
+ if (unresolved.length) {
+ fs.mkdirSync(path.dirname(file), { recursive: true });
+ fs.writeFileSync(file, JSON.stringify(payload, null, 2) + '\n');
+ fs.writeFileSync(markdownFile, buildDecisionMarkdown(payload));
+ }
+ else {
+ if (fs.existsSync(file)) fs.rmSync(file);
+ if (fs.existsSync(markdownFile)) fs.rmSync(markdownFile);
+ }
+}
+
+function buildDecisionMarkdown(payload) {
+ const lines = [
+ '# Redirect Decisions Needed',
+ '',
+ `Generated: ${payload.generatedAt}`,
+ '',
+ `- Unresolved routes: ${payload.summary.unresolvedRoutes}`,
+ '',
+ ];
+
+ for (const item of payload.unresolved) {
+ lines.push(`## ${item.old.path}`);
+ if (item.old.title) lines.push(`- Old title: ${item.old.title}`);
+ if (item.old.sourceFile) lines.push(`- Old file: \`${item.old.sourceFile}\``);
+ if (item.old.stableId) lines.push(`- stableId: \`${item.old.stableId}\``);
+ lines.push(`- Reason: ${item.reason}`);
+ lines.push('');
+
+ if (item.matches.length) {
+ lines.push('| Matching route | Title | File |');
+ lines.push('|---|---|---|');
+ for (const match of item.matches) {
+ lines.push(`| \`${match.path}\` | ${match.title || ''} | \`${match.sourceFile || ''}\` |`);
+ }
+ lines.push('');
+ }
+ }
+
+ return lines.join('\n') + '\n';
+}
+
+function main() {
+ const options = parseArgs(process.argv.slice(2));
+ const hints = loadHints(options.hints);
+ const manifest = loadRedirectManifest(options.manifest);
+ const basePages = loadBaseSnapshot(options.base);
+ const currentPages = loadCurrentSnapshot();
+
+ const baseByPath = indexByPath(basePages);
+ const currentByPath = indexByPath(currentPages);
+ const currentByStableId = indexByStableId(currentPages);
+
+ const removed = [...baseByPath.values()].filter(page => !currentByPath.has(page.path));
+ const uncoveredRemoved = removed.filter(page => !manifest.fromSet.has(page.path));
+
+ const accepted = [];
+ const unresolved = [];
+
+ for (const oldPage of uncoveredRemoved) {
+ const resolution = resolveRemovedRoute(oldPage, currentByStableId, hints.manualRedirects);
+ if (resolution.status === 'accepted') accepted.push(resolution);
+ else unresolved.push(resolution);
+ }
+
+ const rowsToWrite = options.acceptHighConfidence
+ ? accepted.filter(row => !manifest.fromSet.has(row.from)).map(row => ({ from: row.from, to: row.to, status: 301 }))
+ : [];
+
+ const summary = {
+ baseRef: options.base,
+ basePages: basePages.length,
+ currentPages: currentPages.length,
+ removedRoutes: removed.length,
+ uncoveredRemovedRoutes: uncoveredRemoved.length,
+ autoRedirects: accepted.length,
+ unresolvedRoutes: unresolved.length,
+ };
+
+ if (!options.noWrite) {
+ appendRedirectRows(options.manifest, rowsToWrite);
+ writeDecisionArtifacts(options.suggest, unresolved, summary);
+ }
+
+ console.log(`Base ref: ${summary.baseRef}`);
+ console.log(`Base pages: ${summary.basePages}`);
+ console.log(`Current pages: ${summary.currentPages}`);
+ console.log(`Removed routes: ${summary.removedRoutes}`);
+ console.log(`Uncovered removed routes: ${summary.uncoveredRemovedRoutes}`);
+ console.log(`Auto redirects: ${summary.autoRedirects}`);
+ console.log(`Unresolved routes: ${summary.unresolvedRoutes}`);
+
+ if (rowsToWrite.length) {
+ console.log(`Appended ${rowsToWrite.length} redirect(s) to ${options.manifest}`);
+ }
+ if (unresolved.length && !options.noWrite) {
+ console.log(`Review manual redirect decisions in ${options.suggest.replace(/\.json$/i, '.md')}`);
+ }
+
+ if (unresolved.length) {
+ console.error('\nUnresolved routes:');
+ for (const item of unresolved.slice(0, 20)) {
+ console.error(`- ${item.old.path}: ${item.reason}`);
+ }
+ }
+
+ if (options.failOnUnresolved && unresolved.length > 0) {
+ process.exit(1);
+ }
+}
+
+main();
diff --git a/scripts/setup-hooks.mjs b/scripts/setup-hooks.mjs
new file mode 100755
index 000000000..940c5965d
--- /dev/null
+++ b/scripts/setup-hooks.mjs
@@ -0,0 +1,15 @@
+#!/usr/bin/env node
+
+import fs from 'node:fs';
+import { execFileSync } from 'node:child_process';
+
+if (!fs.existsSync('.git')) {
+ process.exit(0);
+}
+
+try {
+ execFileSync('git', ['config', 'core.hooksPath', '.githooks'], { stdio: 'ignore' });
+}
+catch {
+ process.exit(0);
+}
From fb43401302278701814bead33d1b2fab37925740 Mon Sep 17 00:00:00 2001
From: bryantgillespie
Date: Sun, 26 Apr 2026 07:53:54 -0400
Subject: [PATCH 05/45] cleanup from review
---
.githooks/pre-commit | 8 +++-
scripts/_content-lib.mjs | 2 +
scripts/check-stable-ids.mjs | 11 +++++
scripts/ensure-stable-ids.mjs | 77 ++++++++++++++++++++++++++++++++---
scripts/redirects-sync.mjs | 23 +++++++++--
scripts/setup-hooks.mjs | 6 +++
6 files changed, 117 insertions(+), 10 deletions(-)
diff --git a/.githooks/pre-commit b/.githooks/pre-commit
index 5e50be8ab..f081a6bde 100755
--- a/.githooks/pre-commit
+++ b/.githooks/pre-commit
@@ -1,3 +1,9 @@
#!/bin/sh
set -e
-pnpm stable-ids:ensure -- --staged
+
+if ! command -v pnpm >/dev/null 2>&1; then
+ echo "warning: pnpm not found; skipping stable ID hook" >&2
+ exit 0
+fi
+
+pnpm stable-ids:ensure --staged
diff --git a/scripts/_content-lib.mjs b/scripts/_content-lib.mjs
index afdaa1385..433b7b4b9 100755
--- a/scripts/_content-lib.mjs
+++ b/scripts/_content-lib.mjs
@@ -37,6 +37,8 @@ export function listInScopeContentFiles(dir = 'content') {
return listRoutableContentFiles(dir, { includeLanding: false });
}
+// Intentionally minimal frontmatter parser for simple scalar and scalar-array fields.
+// Do not use this for nested YAML structures or multiline YAML values.
export function parseFrontmatter(source) {
const block = getFrontmatterBlock(source);
if (!block) return {};
diff --git a/scripts/check-stable-ids.mjs b/scripts/check-stable-ids.mjs
index 68965cdcf..02188fddd 100755
--- a/scripts/check-stable-ids.mjs
+++ b/scripts/check-stable-ids.mjs
@@ -4,6 +4,17 @@ import fs from 'node:fs';
import { getFrontmatterBlock, isValidUuid, listInScopeContentFiles, parseFrontmatter } from './_content-lib.mjs';
+const args = process.argv.slice(2);
+
+if (args.includes('--help') || args.includes('-h')) {
+ console.log(`check-stable-ids
+
+Usage:
+ node scripts/check-stable-ids.mjs
+`);
+ process.exit(0);
+}
+
function main() {
const files = listInScopeContentFiles();
const failures = [];
diff --git a/scripts/ensure-stable-ids.mjs b/scripts/ensure-stable-ids.mjs
index 19409fc05..98dbbaaab 100755
--- a/scripts/ensure-stable-ids.mjs
+++ b/scripts/ensure-stable-ids.mjs
@@ -4,12 +4,31 @@ import fs from 'node:fs';
import { execFileSync } from 'node:child_process';
import crypto from 'node:crypto';
-import { ensureStableIdInSource, isInScopeContentFile, listInScopeContentFiles } from './_content-lib.mjs';
+import {
+ ensureStableIdInSource,
+ isInScopeContentFile,
+ isValidUuid,
+ listInScopeContentFiles,
+ parseFrontmatter,
+} from './_content-lib.mjs';
-const stagedOnly = process.argv.includes('--staged');
+const args = process.argv.slice(2);
+const stagedOnly = args.includes('--staged');
-function runGit(args) {
- return execFileSync('git', args, { encoding: 'utf8' });
+if (args.includes('--help') || args.includes('-h')) {
+ console.log(`ensure-stable-ids
+
+Usage:
+ node scripts/ensure-stable-ids.mjs [--staged]
+
+Options:
+ --staged Only process staged added/modified docs
+`);
+ process.exit(0);
+}
+
+function runGit(args, options = {}) {
+ return execFileSync('git', args, { encoding: 'utf8', ...options });
}
function listStagedFiles() {
@@ -25,23 +44,51 @@ function stageFile(file) {
runGit(['add', '--', file]);
}
+function readIndexedFile(file) {
+ return runGit(['show', `:${file}`]);
+}
+
+function hasUnstagedChanges(file) {
+ try {
+ runGit(['diff', '--quiet', '--', file], { stdio: 'ignore' });
+ return false;
+ }
+ catch (error) {
+ if (error.status === 1) return true;
+ throw error;
+ }
+}
+
function main() {
const files = stagedOnly ? listStagedFiles() : listInScopeContentFiles();
let inserted = 0;
let alreadyPresent = 0;
let missingFrontmatter = 0;
let staged = 0;
+ const invalidStableIds = [];
+ const partialStageConflicts = [];
for (const file of files) {
- const source = fs.readFileSync(file, 'utf8');
+ const source = stagedOnly ? readIndexedFile(file) : fs.readFileSync(file, 'utf8');
const result = ensureStableIdInSource(source, crypto.randomUUID());
if (!result.changed) {
- if (result.reason === 'already-present') alreadyPresent++;
+ if (result.reason === 'already-present') {
+ alreadyPresent++;
+ const frontmatter = parseFrontmatter(source);
+ if (frontmatter.stableId && !isValidUuid(frontmatter.stableId)) {
+ invalidStableIds.push({ file, stableId: frontmatter.stableId });
+ }
+ }
else if (result.reason === 'missing-frontmatter') missingFrontmatter++;
continue;
}
+ if (stagedOnly && hasUnstagedChanges(file)) {
+ partialStageConflicts.push(file);
+ continue;
+ }
+
fs.writeFileSync(file, result.source);
inserted++;
@@ -58,6 +105,24 @@ function main() {
if (stagedOnly) {
console.log(`Re-staged files: ${staged}`);
}
+
+ if (invalidStableIds.length) {
+ console.error('\nFound invalid existing stableId values:');
+ for (const entry of invalidStableIds) {
+ console.error(`- ${entry.file}: ${entry.stableId}`);
+ }
+ console.error('\nFix those values manually or run `pnpm stable-ids:check` for a full repo validation pass.');
+ process.exit(1);
+ }
+
+ if (partialStageConflicts.length) {
+ console.error('\nCannot safely auto-insert stableId for partially staged files with unstaged changes:');
+ for (const file of partialStageConflicts) {
+ console.error(`- ${file}`);
+ }
+ console.error('\nRun `pnpm stable-ids:ensure` first, or fully stage those files before committing.');
+ process.exit(1);
+ }
}
main();
diff --git a/scripts/redirects-sync.mjs b/scripts/redirects-sync.mjs
index 9aa1cd73b..491c0ed9a 100755
--- a/scripts/redirects-sync.mjs
+++ b/scripts/redirects-sync.mjs
@@ -59,9 +59,9 @@ Options:
`);
}
-function runGit(args) {
+function runGit(args, options = {}) {
try {
- return execFileSync('git', args, { encoding: 'utf8' });
+ return execFileSync('git', args, { encoding: 'utf8', ...options });
}
catch (error) {
const details = error.stderr?.toString?.() || error.message;
@@ -69,6 +69,15 @@ function runGit(args) {
}
}
+function assertBaseRefExists(baseRef) {
+ try {
+ runGit(['rev-parse', '--verify', baseRef], { stdio: 'ignore' });
+ }
+ catch {
+ throw new Error(`Base ref ${baseRef} does not exist locally. Run \`git fetch origin main\` or pass a different --base ref.`);
+ }
+}
+
function listBaseContentFiles(baseRef) {
const output = runGit(['ls-tree', '-r', '--name-only', baseRef, '--', 'content']);
return output
@@ -223,10 +232,17 @@ function loadHints(file) {
};
}
+function csvValue(value) {
+ const stringValue = String(value ?? '');
+ return /[",\n]/.test(stringValue)
+ ? `"${stringValue.replaceAll('"', '""')}"`
+ : stringValue;
+}
+
function appendRedirectRows(file, rows) {
if (!rows.length) return;
ensureManifest(file);
- const text = rows.map(row => `${row.from},${row.to},${row.status}`).join('\n') + '\n';
+ const text = rows.map(row => [row.from, row.to, row.status].map(csvValue).join(',')).join('\n') + '\n';
fs.appendFileSync(file, text);
}
@@ -352,6 +368,7 @@ function buildDecisionMarkdown(payload) {
function main() {
const options = parseArgs(process.argv.slice(2));
+ assertBaseRefExists(options.base);
const hints = loadHints(options.hints);
const manifest = loadRedirectManifest(options.manifest);
const basePages = loadBaseSnapshot(options.base);
diff --git a/scripts/setup-hooks.mjs b/scripts/setup-hooks.mjs
index 940c5965d..f3fedffc0 100755
--- a/scripts/setup-hooks.mjs
+++ b/scripts/setup-hooks.mjs
@@ -7,9 +7,15 @@ if (!fs.existsSync('.git')) {
process.exit(0);
}
+if (!fs.existsSync('.githooks')) {
+ console.error('warning: .githooks directory not found; hooks were not configured');
+ process.exit(0);
+}
+
try {
execFileSync('git', ['config', 'core.hooksPath', '.githooks'], { stdio: 'ignore' });
}
catch {
+ console.error('warning: failed to configure git core.hooksPath to .githooks; hooks may not run automatically');
process.exit(0);
}
From 2e61cb1604b268055ca053435610887b78327581 Mon Sep 17 00:00:00 2001
From: bryantgillespie
Date: Mon, 27 Apr 2026 06:54:14 -0400
Subject: [PATCH 06/45] cleanup again
---
package.json | 4 +--
scripts/_content-lib.mjs | 22 ++++++++++++++--
scripts/check-stable-ids.mjs | 23 ++++++++++++++--
scripts/ensure-stable-ids.mjs | 17 +++++++++---
scripts/redirects-sync.mjs | 49 ++++++++++++++++++++++-------------
scripts/setup-hooks.mjs | 5 ++++
6 files changed, 92 insertions(+), 28 deletions(-)
diff --git a/package.json b/package.json
index 51359587c..5d1bc1132 100644
--- a/package.json
+++ b/package.json
@@ -10,8 +10,8 @@
"postinstall": "node scripts/setup-hooks.mjs && nuxt prepare",
"stable-ids:ensure": "node scripts/ensure-stable-ids.mjs",
"stable-ids:check": "node scripts/check-stable-ids.mjs",
- "redirects:sync": "node scripts/redirects-sync.mjs --base origin/main --manifest redirects.csv --hints .docs/redirect-hints.json --suggest .docs/redirect-decisions-needed.json --accept-high-confidence --fail-on-unresolved",
- "redirects:check": "node scripts/redirects-sync.mjs --base origin/main --manifest redirects.csv --hints .docs/redirect-hints.json --suggest .docs/redirect-decisions-needed.json --fail-on-unresolved --no-write"
+ "redirects:sync": "node scripts/redirects-sync.mjs --base origin/main --manifest redirects.csv --hints .docs/redirect-hints.json --report .docs/redirect-decisions-needed.json --write-deterministic --fail-on-unresolved",
+ "redirects:check": "node scripts/redirects-sync.mjs --base origin/main --manifest redirects.csv --hints .docs/redirect-hints.json --report .docs/redirect-decisions-needed.json --fail-on-unresolved --no-write"
},
"dependencies": {
"@directus/openapi": "0.3.0",
diff --git a/scripts/_content-lib.mjs b/scripts/_content-lib.mjs
index 433b7b4b9..223eeef78 100755
--- a/scripts/_content-lib.mjs
+++ b/scripts/_content-lib.mjs
@@ -4,6 +4,12 @@ import path from 'node:path';
const ARRAY_KEYS = new Set(['stack', 'features', 'use_cases', 'technologies']);
const UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
+/**
+ * Stable IDs only matter for public, relocatable docs pages.
+ * Partials are excluded because they do not own routes, and the landing page is
+ * excluded because it is intentionally fixed at / and is not part of redirect continuity.
+ */
+
export function isRoutableContentFile(file, { includeLanding = true } = {}) {
const normalized = file.replace(/\\/g, '/');
if (!normalized.startsWith('content/') || !normalized.endsWith('.md')) return false;
@@ -37,8 +43,12 @@ export function listInScopeContentFiles(dir = 'content') {
return listRoutableContentFiles(dir, { includeLanding: false });
}
-// Intentionally minimal frontmatter parser for simple scalar and scalar-array fields.
-// Do not use this for nested YAML structures or multiline YAML values.
+/**
+ * Intentionally minimal frontmatter parser for simple scalar and scalar-array fields.
+ * We keep this dependency-free because the stable ID and redirect workflows only need
+ * a few top-level fields and run inside hooks/scripts where fast startup matters.
+ * Do not use this for nested YAML structures or multiline YAML values.
+ */
export function parseFrontmatter(source) {
const block = getFrontmatterBlock(source);
if (!block) return {};
@@ -97,6 +107,10 @@ export function cleanScalar(value) {
return result.trim();
}
+/**
+ * Preserve the file's existing newline style so hook-driven edits stay mechanical and
+ * do not create noisy cross-platform diffs.
+ */
export function getFrontmatterBlock(source) {
const match = source.match(/^---(\r?\n)([\s\S]*?)\r?\n---(\r?\n|$)/);
if (!match) return null;
@@ -116,6 +130,10 @@ export function hasStableId(source) {
return /(?:^|\r?\n)stableId:\s*.+(?:\r?\n|$)/.test(getFrontmatterBlock(source)?.body || '');
}
+/**
+ * Insert stableId as the first frontmatter field so the backfill stays easy to scan
+ * and future merges are less likely to bury identity changes inside unrelated metadata.
+ */
export function ensureStableIdInSource(source, stableId) {
const block = getFrontmatterBlock(source);
if (!block) {
diff --git a/scripts/check-stable-ids.mjs b/scripts/check-stable-ids.mjs
index 02188fddd..91c3e36e5 100755
--- a/scripts/check-stable-ids.mjs
+++ b/scripts/check-stable-ids.mjs
@@ -18,35 +18,54 @@ Usage:
function main() {
const files = listInScopeContentFiles();
const failures = [];
+ const counts = { 'missing frontmatter': 0, 'missing stableId': 0, 'invalid stableId': 0 };
for (const file of files) {
const source = fs.readFileSync(file, 'utf8');
const block = getFrontmatterBlock(source);
if (!block) {
failures.push({ file, reason: 'missing frontmatter' });
+ counts['missing frontmatter']++;
continue;
}
const frontmatter = parseFrontmatter(source);
if (!frontmatter.stableId) {
failures.push({ file, reason: 'missing stableId' });
+ counts['missing stableId']++;
continue;
}
if (!isValidUuid(frontmatter.stableId)) {
failures.push({ file, reason: `invalid stableId: ${frontmatter.stableId}` });
+ counts['invalid stableId']++;
}
}
- if (failures.length) {
+ const total = files.length;
+ const failing = failures.length;
+ const passing = total - failing;
+
+ if (failing) {
console.error('Stable ID check failed:');
for (const failure of failures) {
console.error(`- ${failure.file}: ${failure.reason}`);
}
+ const breakdown = Object.entries(counts)
+ .filter(([, count]) => count > 0)
+ .map(([reason, count]) => `${count} ${reason}`)
+ .join(', ');
+ console.error(`\nTotal files: ${total}`);
+ console.error(`Passing: ${passing}`);
+ console.error(`Failing: ${failing} (${breakdown})`);
+ console.error('\nFix the files above and re-run the command.');
process.exit(1);
}
- console.log(`Stable ID check passed for ${files.length} file(s).`);
+ console.log(`Total files: ${total}`);
+ console.log(`Passing: ${passing}`);
+ console.log(`Failing: 0`);
+ console.log(`Stable ID check passed.`);
}
main();
diff --git a/scripts/ensure-stable-ids.mjs b/scripts/ensure-stable-ids.mjs
index 98dbbaaab..b4adc3f3b 100755
--- a/scripts/ensure-stable-ids.mjs
+++ b/scripts/ensure-stable-ids.mjs
@@ -44,10 +44,18 @@ function stageFile(file) {
runGit(['add', '--', file]);
}
+/**
+ * In hook mode we read the staged blob from the index, not the working tree, so ID
+ * insertion reflects what is actually being committed.
+ */
function readIndexedFile(file) {
return runGit(['show', `:${file}`]);
}
+/**
+ * If a file has unstaged edits, re-staging it would collapse a partial `git add -p`
+ * selection into a full-file stage. We abort instead of trying to outsmart git here.
+ */
function hasUnstagedChanges(file) {
try {
runGit(['diff', '--quiet', '--', file], { stdio: 'ignore' });
@@ -85,6 +93,7 @@ function main() {
}
if (stagedOnly && hasUnstagedChanges(file)) {
+ // Failing is safer than silently widening the staged diff.
partialStageConflicts.push(file);
continue;
}
@@ -99,9 +108,9 @@ function main() {
}
console.log(`Processed files: ${files.length}`);
- console.log(`Inserted stableId: ${inserted}`);
- console.log(`Already had stableId: ${alreadyPresent}`);
- console.log(`Missing frontmatter: ${missingFrontmatter}`);
+ console.log(`Inserted stable IDs: ${inserted}`);
+ console.log(`Already had stable IDs: ${alreadyPresent}`);
+ console.log(`Skipped (missing frontmatter): ${missingFrontmatter}`);
if (stagedOnly) {
console.log(`Re-staged files: ${staged}`);
}
@@ -111,7 +120,7 @@ function main() {
for (const entry of invalidStableIds) {
console.error(`- ${entry.file}: ${entry.stableId}`);
}
- console.error('\nFix those values manually or run `pnpm stable-ids:check` for a full repo validation pass.');
+ console.error('\nFix those values manually, then re-run the command or use `pnpm stable-ids:check` for a full repo validation pass.');
process.exit(1);
}
diff --git a/scripts/redirects-sync.mjs b/scripts/redirects-sync.mjs
index 491c0ed9a..c3a30d387 100755
--- a/scripts/redirects-sync.mjs
+++ b/scripts/redirects-sync.mjs
@@ -10,8 +10,8 @@ const DEFAULTS = {
base: 'origin/main',
manifest: 'redirects.csv',
hints: '.docs/redirect-hints.json',
- suggest: '.docs/redirect-decisions-needed.json',
- acceptHighConfidence: false,
+ report: '.docs/redirect-decisions-needed.json',
+ writeDeterministic: false,
failOnUnresolved: false,
noWrite: false,
};
@@ -24,8 +24,8 @@ function parseArgs(argv) {
if (arg === '--base') options.base = argv[++i];
else if (arg === '--manifest') options.manifest = argv[++i];
else if (arg === '--hints') options.hints = argv[++i];
- else if (arg === '--suggest') options.suggest = argv[++i];
- else if (arg === '--accept-high-confidence') options.acceptHighConfidence = true;
+ else if (arg === '--report' || arg === '--suggest') options.report = argv[++i];
+ else if (arg === '--write-deterministic' || arg === '--accept-high-confidence') options.writeDeterministic = true;
else if (arg === '--fail-on-unresolved') options.failOnUnresolved = true;
else if (arg === '--no-write') options.noWrite = true;
else if (arg === '--help' || arg === '-h') {
@@ -52,9 +52,9 @@ Options:
--base Base git ref to diff against (default: origin/main)
--manifest Redirect manifest CSV (default: redirects.csv)
--hints Manual redirect hints JSON (default: .docs/redirect-hints.json)
- --suggest Decisions-needed report (default: .docs/redirect-decisions-needed.json)
- --accept-high-confidence Auto-append deterministic redirects to the manifest
- --fail-on-unresolved Exit non-zero if unresolved routes remain
+ --report Redirect decisions report (default: .docs/redirect-decisions-needed.json)
+ --write-deterministic Auto-write deterministic redirects to the manifest
+ --fail-on-unresolved Exit non-zero if redirect decisions remain
--no-write Do not write manifest or report files
`);
}
@@ -100,6 +100,10 @@ function stripNumericPrefix(segment) {
return segment.replace(/^\d+\./, '');
}
+/**
+ * Redirect continuity must follow Nuxt's public route semantics, not raw filesystem
+ * paths. In particular, numeric ordering prefixes affect nav order but not URL shape.
+ */
function buildPublicPath(file, frontmatter = {}) {
if (typeof frontmatter.path === 'string' && frontmatter.path.trim()) {
return normalizePublicPath(frontmatter.path.trim());
@@ -246,6 +250,10 @@ function appendRedirectRows(file, rows) {
fs.appendFileSync(file, text);
}
+/**
+ * Redirect generation is intentionally strict: deterministic same-stableId matches can
+ * be auto-written, while splits, merges, and deletions stay manual decisions.
+ */
function resolveRemovedRoute(oldPage, currentByStableId, manualRedirects) {
const manualTarget = manualRedirects[oldPage.path];
if (manualTarget) {
@@ -253,13 +261,14 @@ function resolveRemovedRoute(oldPage, currentByStableId, manualRedirects) {
status: 'accepted',
from: oldPage.path,
to: manualTarget,
- reason: 'manual redirect hint',
+ reason: 'manual redirect override',
old: oldPage,
matches: [],
};
}
if (!oldPage.stableId) {
+ // During the rollout, old routes from a base ref without stable IDs must stay manual.
return {
status: 'unresolved',
reason: 'old route has no stableId in base ref',
@@ -276,7 +285,7 @@ function resolveRemovedRoute(oldPage, currentByStableId, manualRedirects) {
status: 'accepted',
from: oldPage.path,
to: matches[0].path,
- reason: 'same stableId',
+ reason: 'matching stable ID',
old: oldPage,
matches,
};
@@ -299,6 +308,10 @@ function resolveRemovedRoute(oldPage, currentByStableId, manualRedirects) {
};
}
+/**
+ * The report is optimized for human review, not programmatic scoring. Once stable IDs
+ * exist everywhere, the remaining cases are true editorial decisions.
+ */
function writeDecisionArtifacts(file, unresolved, summary) {
const payload = {
generatedAt: new Date().toISOString(),
@@ -341,7 +354,7 @@ function buildDecisionMarkdown(payload) {
'',
`Generated: ${payload.generatedAt}`,
'',
- `- Unresolved routes: ${payload.summary.unresolvedRoutes}`,
+ `- Redirect decisions needed: ${payload.summary.redirectDecisionsNeeded}`,
'',
];
@@ -390,7 +403,7 @@ function main() {
else unresolved.push(resolution);
}
- const rowsToWrite = options.acceptHighConfidence
+ const rowsToWrite = options.writeDeterministic
? accepted.filter(row => !manifest.fromSet.has(row.from)).map(row => ({ from: row.from, to: row.to, status: 301 }))
: [];
@@ -400,13 +413,13 @@ function main() {
currentPages: currentPages.length,
removedRoutes: removed.length,
uncoveredRemovedRoutes: uncoveredRemoved.length,
- autoRedirects: accepted.length,
- unresolvedRoutes: unresolved.length,
+ deterministicRedirects: accepted.length,
+ redirectDecisionsNeeded: unresolved.length,
};
if (!options.noWrite) {
appendRedirectRows(options.manifest, rowsToWrite);
- writeDecisionArtifacts(options.suggest, unresolved, summary);
+ writeDecisionArtifacts(options.report, unresolved, summary);
}
console.log(`Base ref: ${summary.baseRef}`);
@@ -414,18 +427,18 @@ function main() {
console.log(`Current pages: ${summary.currentPages}`);
console.log(`Removed routes: ${summary.removedRoutes}`);
console.log(`Uncovered removed routes: ${summary.uncoveredRemovedRoutes}`);
- console.log(`Auto redirects: ${summary.autoRedirects}`);
- console.log(`Unresolved routes: ${summary.unresolvedRoutes}`);
+ console.log(`Deterministic redirects: ${summary.deterministicRedirects}`);
+ console.log(`Redirect decisions needed: ${summary.redirectDecisionsNeeded}`);
if (rowsToWrite.length) {
console.log(`Appended ${rowsToWrite.length} redirect(s) to ${options.manifest}`);
}
if (unresolved.length && !options.noWrite) {
- console.log(`Review manual redirect decisions in ${options.suggest.replace(/\.json$/i, '.md')}`);
+ console.log(`Review redirect decisions in ${options.report.replace(/\.json$/i, '.md')}`);
}
if (unresolved.length) {
- console.error('\nUnresolved routes:');
+ console.error('\nRedirect decisions needed:');
for (const item of unresolved.slice(0, 20)) {
console.error(`- ${item.old.path}: ${item.reason}`);
}
diff --git a/scripts/setup-hooks.mjs b/scripts/setup-hooks.mjs
index f3fedffc0..4d9cf9628 100755
--- a/scripts/setup-hooks.mjs
+++ b/scripts/setup-hooks.mjs
@@ -7,6 +7,11 @@ if (!fs.existsSync('.git')) {
process.exit(0);
}
+/**
+ * Hooks are a contributor convenience, not a hard install requirement.
+ * Warn instead of failing so package installation still works in tarballs, CI, or
+ * other environments where git metadata is intentionally absent.
+ */
if (!fs.existsSync('.githooks')) {
console.error('warning: .githooks directory not found; hooks were not configured');
process.exit(0);
From 1c08e8b23e940799c3e5bdc29277e665208388cf Mon Sep 17 00:00:00 2001
From: bryantgillespie
Date: Mon, 27 Apr 2026 11:00:57 -0400
Subject: [PATCH 07/45] switch to json for storing redirects
---
nuxt.config.ts | 20 +++++++++-
package.json | 4 +-
redirects.csv | 1 -
redirects.json | 1 +
scripts/redirects-sync.mjs | 82 ++++++++++++--------------------------
5 files changed, 47 insertions(+), 61 deletions(-)
delete mode 100644 redirects.csv
create mode 100644 redirects.json
diff --git a/nuxt.config.ts b/nuxt.config.ts
index 2b91131da..166a017ae 100644
--- a/nuxt.config.ts
+++ b/nuxt.config.ts
@@ -1,3 +1,19 @@
+import { readFileSync } from 'node:fs';
+
+const BASE_URL = '/docs';
+
+function loadRedirectRouteRules() {
+ const raw = readFileSync('redirects.json', 'utf8').trim();
+ if (!raw) return {};
+ const entries = JSON.parse(raw);
+ const rules = {};
+ for (const [from, rule] of Object.entries(entries)) {
+ const key = `${BASE_URL}${from}`;
+ rules[key] = { redirect: { to: `${BASE_URL}${rule.to}`, statusCode: rule.statusCode } };
+ }
+ return rules;
+}
+
// https://nuxt.com/docs/api/configuration/nuxt-config
export default defineNuxtConfig({
modules: [
@@ -18,9 +34,11 @@ export default defineNuxtConfig({
},
app: {
- baseURL: '/docs',
+ baseURL: BASE_URL,
},
+ routeRules: loadRedirectRouteRules(),
+
css: ['~/assets/css/main.css', '~/assets/css/algolia.css'],
site: {
diff --git a/package.json b/package.json
index 5d1bc1132..082cc5f25 100644
--- a/package.json
+++ b/package.json
@@ -10,8 +10,8 @@
"postinstall": "node scripts/setup-hooks.mjs && nuxt prepare",
"stable-ids:ensure": "node scripts/ensure-stable-ids.mjs",
"stable-ids:check": "node scripts/check-stable-ids.mjs",
- "redirects:sync": "node scripts/redirects-sync.mjs --base origin/main --manifest redirects.csv --hints .docs/redirect-hints.json --report .docs/redirect-decisions-needed.json --write-deterministic --fail-on-unresolved",
- "redirects:check": "node scripts/redirects-sync.mjs --base origin/main --manifest redirects.csv --hints .docs/redirect-hints.json --report .docs/redirect-decisions-needed.json --fail-on-unresolved --no-write"
+ "redirects:sync": "node scripts/redirects-sync.mjs --base origin/main --manifest redirects.json --hints .docs/redirect-hints.json --report .docs/redirect-decisions-needed.json --write-deterministic --fail-on-unresolved",
+ "redirects:check": "node scripts/redirects-sync.mjs --base origin/main --manifest redirects.json --hints .docs/redirect-hints.json --report .docs/redirect-decisions-needed.json --fail-on-unresolved --no-write"
},
"dependencies": {
"@directus/openapi": "0.3.0",
diff --git a/redirects.csv b/redirects.csv
deleted file mode 100644
index e0a04e9ed..000000000
--- a/redirects.csv
+++ /dev/null
@@ -1 +0,0 @@
-from,to,status
diff --git a/redirects.json b/redirects.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/redirects.json
@@ -0,0 +1 @@
+{}
diff --git a/scripts/redirects-sync.mjs b/scripts/redirects-sync.mjs
index c3a30d387..7590ef1fa 100755
--- a/scripts/redirects-sync.mjs
+++ b/scripts/redirects-sync.mjs
@@ -174,55 +174,24 @@ function indexByStableId(items) {
function loadRedirectManifest(file) {
if (!fs.existsSync(file)) {
- return { rows: [], fromSet: new Set() };
+ return { entries: {}, fromSet: new Set() };
}
const text = fs.readFileSync(file, 'utf8').trim();
- if (!text) return { rows: [], fromSet: new Set() };
+ if (!text) return { entries: {}, fromSet: new Set() };
- const lines = text.split('\n').map(line => line.trim()).filter(Boolean);
- const rows = [];
- const seen = new Set();
-
- for (let index = 1; index < lines.length; index++) {
- const [from, to, status] = splitCsvLine(lines[index]);
- if (!from || !to || !status) continue;
- if (seen.has(from)) {
- throw new Error(`Duplicate redirect source in ${file}: ${from}`);
- }
- seen.add(from);
- rows.push({ from, to, status });
+ const parsed = JSON.parse(text);
+ if (parsed === null || typeof parsed !== 'object' || Array.isArray(parsed)) {
+ throw new Error(`Redirect manifest ${file} must be a JSON object keyed by source path`);
}
- return { rows, fromSet: seen };
-}
-
-function splitCsvLine(line) {
- const parts = [];
- let current = '';
- let inQuotes = false;
-
- for (let i = 0; i < line.length; i++) {
- const char = line[i];
- if (char === '"') {
- inQuotes = !inQuotes;
- continue;
- }
- if (char === ',' && !inQuotes) {
- parts.push(current);
- current = '';
- continue;
+ for (const [from, value] of Object.entries(parsed)) {
+ if (!value || typeof value !== 'object' || typeof value.to !== 'string' || typeof value.statusCode !== 'number') {
+ throw new Error(`Invalid redirect entry for ${from} in ${file}: expected { to: string, statusCode: number }`);
}
- current += char;
}
- parts.push(current);
- return parts.map(part => part.trim());
-}
-function ensureManifest(file) {
- if (!fs.existsSync(file)) {
- fs.writeFileSync(file, 'from,to,status\n');
- }
+ return { entries: parsed, fromSet: new Set(Object.keys(parsed)) };
}
function loadHints(file) {
@@ -236,18 +205,11 @@ function loadHints(file) {
};
}
-function csvValue(value) {
- const stringValue = String(value ?? '');
- return /[",\n]/.test(stringValue)
- ? `"${stringValue.replaceAll('"', '""')}"`
- : stringValue;
-}
-
-function appendRedirectRows(file, rows) {
- if (!rows.length) return;
- ensureManifest(file);
- const text = rows.map(row => [row.from, row.to, row.status].map(csvValue).join(',')).join('\n') + '\n';
- fs.appendFileSync(file, text);
+function writeRedirectManifest(file, entries) {
+ const sorted = Object.fromEntries(
+ Object.entries(entries).sort(([a], [b]) => a.localeCompare(b)),
+ );
+ fs.writeFileSync(file, JSON.stringify(sorted, null, 2) + '\n');
}
/**
@@ -403,8 +365,8 @@ function main() {
else unresolved.push(resolution);
}
- const rowsToWrite = options.writeDeterministic
- ? accepted.filter(row => !manifest.fromSet.has(row.from)).map(row => ({ from: row.from, to: row.to, status: 301 }))
+ const newEntries = options.writeDeterministic
+ ? accepted.filter(row => !manifest.fromSet.has(row.from))
: [];
const summary = {
@@ -418,7 +380,13 @@ function main() {
};
if (!options.noWrite) {
- appendRedirectRows(options.manifest, rowsToWrite);
+ if (newEntries.length) {
+ const merged = { ...manifest.entries };
+ for (const entry of newEntries) {
+ merged[entry.from] = { to: entry.to, statusCode: 301 };
+ }
+ writeRedirectManifest(options.manifest, merged);
+ }
writeDecisionArtifacts(options.report, unresolved, summary);
}
@@ -430,8 +398,8 @@ function main() {
console.log(`Deterministic redirects: ${summary.deterministicRedirects}`);
console.log(`Redirect decisions needed: ${summary.redirectDecisionsNeeded}`);
- if (rowsToWrite.length) {
- console.log(`Appended ${rowsToWrite.length} redirect(s) to ${options.manifest}`);
+ if (newEntries.length) {
+ console.log(`Wrote ${newEntries.length} redirect(s) to ${options.manifest}`);
}
if (unresolved.length && !options.noWrite) {
console.log(`Review redirect decisions in ${options.report.replace(/\.json$/i, '.md')}`);
From f785c96b32ba2b632b68f7764978ffc0d9f2d7c5 Mon Sep 17 00:00:00 2001
From: bryantgillespie
Date: Tue, 28 Apr 2026 08:11:23 -0400
Subject: [PATCH 08/45] convert to ts
---
nuxt.config.ts | 18 +-
package.json | 15 +-
scripts/{_content-lib.mjs => _content-lib.ts} | 53 ++++--
...eck-stable-ids.mjs => check-stable-ids.ts} | 17 +-
...re-stable-ids.mjs => ensure-stable-ids.ts} | 33 ++--
.../{redirects-sync.mjs => redirects-sync.ts} | 179 +++++++++++++-----
scripts/{setup-hooks.mjs => setup-hooks.ts} | 0
7 files changed, 227 insertions(+), 88 deletions(-)
rename scripts/{_content-lib.mjs => _content-lib.ts} (75%)
rename scripts/{check-stable-ids.mjs => check-stable-ids.ts} (80%)
rename scripts/{ensure-stable-ids.mjs => ensure-stable-ids.ts} (79%)
rename scripts/{redirects-sync.mjs => redirects-sync.ts} (67%)
rename scripts/{setup-hooks.mjs => setup-hooks.ts} (100%)
diff --git a/nuxt.config.ts b/nuxt.config.ts
index 166a017ae..a178aa087 100644
--- a/nuxt.config.ts
+++ b/nuxt.config.ts
@@ -1,12 +1,20 @@
import { readFileSync } from 'node:fs';
+import type { NitroConfig } from 'nitropack';
const BASE_URL = '/docs';
-function loadRedirectRouteRules() {
+type RedirectStatusCode = 301 | 302 | 307 | 308;
+
+interface RedirectRule {
+ to: string;
+ statusCode: RedirectStatusCode;
+}
+
+function loadRedirectRouteRules(): NitroConfig['routeRules'] {
const raw = readFileSync('redirects.json', 'utf8').trim();
if (!raw) return {};
- const entries = JSON.parse(raw);
- const rules = {};
+ const entries = JSON.parse(raw) as Record;
+ const rules: NitroConfig['routeRules'] = {};
for (const [from, rule] of Object.entries(entries)) {
const key = `${BASE_URL}${from}`;
rules[key] = { redirect: { to: `${BASE_URL}${rule.to}`, statusCode: rule.statusCode } };
@@ -37,8 +45,6 @@ export default defineNuxtConfig({
baseURL: BASE_URL,
},
- routeRules: loadRedirectRouteRules(),
-
css: ['~/assets/css/main.css', '~/assets/css/algolia.css'],
site: {
@@ -125,6 +131,8 @@ export default defineNuxtConfig({
transpile: ['shiki'],
},
+ routeRules: loadRedirectRouteRules(),
+
future: {
compatibilityVersion: 4,
},
diff --git a/package.json b/package.json
index 082cc5f25..03a594b0d 100644
--- a/package.json
+++ b/package.json
@@ -7,11 +7,11 @@
"dev": "nuxt dev",
"generate": "nuxt generate",
"preview": "nuxt preview",
- "postinstall": "node scripts/setup-hooks.mjs && nuxt prepare",
- "stable-ids:ensure": "node scripts/ensure-stable-ids.mjs",
- "stable-ids:check": "node scripts/check-stable-ids.mjs",
- "redirects:sync": "node scripts/redirects-sync.mjs --base origin/main --manifest redirects.json --hints .docs/redirect-hints.json --report .docs/redirect-decisions-needed.json --write-deterministic --fail-on-unresolved",
- "redirects:check": "node scripts/redirects-sync.mjs --base origin/main --manifest redirects.json --hints .docs/redirect-hints.json --report .docs/redirect-decisions-needed.json --fail-on-unresolved --no-write"
+ "postinstall": "node scripts/setup-hooks.ts && nuxt prepare",
+ "stable-ids:ensure": "node scripts/ensure-stable-ids.ts",
+ "stable-ids:check": "node scripts/check-stable-ids.ts",
+ "redirects:sync": "node scripts/redirects-sync.ts --base origin/main --manifest redirects.json --hints .docs/redirect-hints.json --report .docs/redirect-decisions-needed.json --write-deterministic --fail-on-unresolved",
+ "redirects:check": "node scripts/redirects-sync.ts --base origin/main --manifest redirects.json --hints .docs/redirect-hints.json --report .docs/redirect-decisions-needed.json --fail-on-unresolved --no-write"
},
"dependencies": {
"@directus/openapi": "0.3.0",
@@ -53,5 +53,8 @@
"vite": "npm:rolldown-vite@latest"
}
},
- "packageManager": "pnpm@10.29.2+sha512.bef43fa759d91fd2da4b319a5a0d13ef7a45bb985a3d7342058470f9d2051a3ba8674e629672654686ef9443ad13a82da2beb9eeb3e0221c87b8154fff9d74b8"
+ "packageManager": "pnpm@10.29.2+sha512.bef43fa759d91fd2da4b319a5a0d13ef7a45bb985a3d7342058470f9d2051a3ba8674e629672654686ef9443ad13a82da2beb9eeb3e0221c87b8154fff9d74b8",
+ "engines": {
+ "node": ">=22.6"
+ }
}
diff --git a/scripts/_content-lib.mjs b/scripts/_content-lib.ts
similarity index 75%
rename from scripts/_content-lib.mjs
rename to scripts/_content-lib.ts
index 223eeef78..d495bd1c5 100755
--- a/scripts/_content-lib.mjs
+++ b/scripts/_content-lib.ts
@@ -4,13 +4,38 @@ import path from 'node:path';
const ARRAY_KEYS = new Set(['stack', 'features', 'use_cases', 'technologies']);
const UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
+export interface ScopeOptions {
+ includeLanding?: boolean;
+}
+
+export interface Frontmatter {
+ [key: string]: string | string[] | undefined;
+}
+
+export interface FrontmatterBlock {
+ fullMatch: string;
+ newline: string;
+ body: string;
+ closingWhitespace: string;
+ start: number;
+ end: number;
+}
+
+export type EnsureReason = 'inserted' | 'already-present' | 'missing-frontmatter';
+
+export interface EnsureResult {
+ changed: boolean;
+ source: string;
+ reason: EnsureReason;
+}
+
/**
* Stable IDs only matter for public, relocatable docs pages.
* Partials are excluded because they do not own routes, and the landing page is
* excluded because it is intentionally fixed at / and is not part of redirect continuity.
*/
-export function isRoutableContentFile(file, { includeLanding = true } = {}) {
+export function isRoutableContentFile(file: string, { includeLanding = true }: ScopeOptions = {}): boolean {
const normalized = file.replace(/\\/g, '/');
if (!normalized.startsWith('content/') || !normalized.endsWith('.md')) return false;
if (normalized.startsWith('content/_partials/')) return false;
@@ -18,12 +43,12 @@ export function isRoutableContentFile(file, { includeLanding = true } = {}) {
return true;
}
-export function isInScopeContentFile(file) {
+export function isInScopeContentFile(file: string): boolean {
return isRoutableContentFile(file, { includeLanding: false });
}
-export function listRoutableContentFiles(dir = 'content', { includeLanding = true } = {}) {
- const files = [];
+export function listRoutableContentFiles(dir = 'content', { includeLanding = true }: ScopeOptions = {}): string[] {
+ const files: string[] = [];
for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
const fullPath = path.join(dir, entry.name);
const normalized = fullPath.replace(/\\/g, '/');
@@ -39,7 +64,7 @@ export function listRoutableContentFiles(dir = 'content', { includeLanding = tru
return files;
}
-export function listInScopeContentFiles(dir = 'content') {
+export function listInScopeContentFiles(dir = 'content'): string[] {
return listRoutableContentFiles(dir, { includeLanding: false });
}
@@ -49,13 +74,13 @@ export function listInScopeContentFiles(dir = 'content') {
* a few top-level fields and run inside hooks/scripts where fast startup matters.
* Do not use this for nested YAML structures or multiline YAML values.
*/
-export function parseFrontmatter(source) {
+export function parseFrontmatter(source: string): Frontmatter {
const block = getFrontmatterBlock(source);
if (!block) return {};
const lines = block.body.split(/\r?\n/);
- const data = {};
- let currentArrayKey = null;
+ const data: Frontmatter = {};
+ let currentArrayKey: string | null = null;
for (const line of lines) {
const keyMatch = line.match(/^([A-Za-z_][\w-]*):\s*(.*)$/);
@@ -87,7 +112,7 @@ export function parseFrontmatter(source) {
if (currentArrayKey) {
const itemMatch = line.match(/^\s*-\s*(.+)$/);
if (itemMatch) {
- data[currentArrayKey].push(cleanScalar(itemMatch[1]));
+ (data[currentArrayKey] as string[]).push(cleanScalar(itemMatch[1]));
continue;
}
if (/^[^\s]/.test(line)) {
@@ -99,7 +124,7 @@ export function parseFrontmatter(source) {
return data;
}
-export function cleanScalar(value) {
+export function cleanScalar(value: string): string {
let result = value.trim();
if ((result.startsWith('"') && result.endsWith('"')) || (result.startsWith("'") && result.endsWith("'"))) {
result = result.slice(1, -1);
@@ -111,7 +136,7 @@ export function cleanScalar(value) {
* Preserve the file's existing newline style so hook-driven edits stay mechanical and
* do not create noisy cross-platform diffs.
*/
-export function getFrontmatterBlock(source) {
+export function getFrontmatterBlock(source: string): FrontmatterBlock | null {
const match = source.match(/^---(\r?\n)([\s\S]*?)\r?\n---(\r?\n|$)/);
if (!match) return null;
@@ -126,7 +151,7 @@ export function getFrontmatterBlock(source) {
};
}
-export function hasStableId(source) {
+export function hasStableId(source: string): boolean {
return /(?:^|\r?\n)stableId:\s*.+(?:\r?\n|$)/.test(getFrontmatterBlock(source)?.body || '');
}
@@ -134,7 +159,7 @@ export function hasStableId(source) {
* Insert stableId as the first frontmatter field so the backfill stays easy to scan
* and future merges are less likely to bury identity changes inside unrelated metadata.
*/
-export function ensureStableIdInSource(source, stableId) {
+export function ensureStableIdInSource(source: string, stableId: string): EnsureResult {
const block = getFrontmatterBlock(source);
if (!block) {
return { changed: false, source, reason: 'missing-frontmatter' };
@@ -149,6 +174,6 @@ export function ensureStableIdInSource(source, stableId) {
return { changed: true, source: updated, reason: 'inserted' };
}
-export function isValidUuid(value) {
+export function isValidUuid(value: unknown): value is string {
return typeof value === 'string' && UUID_RE.test(value.trim());
}
diff --git a/scripts/check-stable-ids.mjs b/scripts/check-stable-ids.ts
similarity index 80%
rename from scripts/check-stable-ids.mjs
rename to scripts/check-stable-ids.ts
index 91c3e36e5..d114f5bc3 100755
--- a/scripts/check-stable-ids.mjs
+++ b/scripts/check-stable-ids.ts
@@ -2,7 +2,7 @@
import fs from 'node:fs';
-import { getFrontmatterBlock, isValidUuid, listInScopeContentFiles, parseFrontmatter } from './_content-lib.mjs';
+import { getFrontmatterBlock, isValidUuid, listInScopeContentFiles, parseFrontmatter } from './_content-lib.ts';
const args = process.argv.slice(2);
@@ -10,15 +10,22 @@ if (args.includes('--help') || args.includes('-h')) {
console.log(`check-stable-ids
Usage:
- node scripts/check-stable-ids.mjs
+ node scripts/check-stable-ids.ts
`);
process.exit(0);
}
-function main() {
+interface CheckFailure {
+ file: string;
+ reason: string;
+}
+
+type FailureCategory = 'missing frontmatter' | 'missing stableId' | 'invalid stableId';
+
+function main(): void {
const files = listInScopeContentFiles();
- const failures = [];
- const counts = { 'missing frontmatter': 0, 'missing stableId': 0, 'invalid stableId': 0 };
+ const failures: CheckFailure[] = [];
+ const counts: Record = { 'missing frontmatter': 0, 'missing stableId': 0, 'invalid stableId': 0 };
for (const file of files) {
const source = fs.readFileSync(file, 'utf8');
diff --git a/scripts/ensure-stable-ids.mjs b/scripts/ensure-stable-ids.ts
similarity index 79%
rename from scripts/ensure-stable-ids.mjs
rename to scripts/ensure-stable-ids.ts
index b4adc3f3b..7345355e7 100755
--- a/scripts/ensure-stable-ids.mjs
+++ b/scripts/ensure-stable-ids.ts
@@ -1,5 +1,6 @@
#!/usr/bin/env node
+import type { ExecFileSyncOptionsWithStringEncoding } from 'node:child_process';
import fs from 'node:fs';
import { execFileSync } from 'node:child_process';
import crypto from 'node:crypto';
@@ -10,7 +11,7 @@ import {
isValidUuid,
listInScopeContentFiles,
parseFrontmatter,
-} from './_content-lib.mjs';
+} from './_content-lib.ts';
const args = process.argv.slice(2);
const stagedOnly = args.includes('--staged');
@@ -19,7 +20,7 @@ if (args.includes('--help') || args.includes('-h')) {
console.log(`ensure-stable-ids
Usage:
- node scripts/ensure-stable-ids.mjs [--staged]
+ node scripts/ensure-stable-ids.ts [--staged]
Options:
--staged Only process staged added/modified docs
@@ -27,11 +28,16 @@ Options:
process.exit(0);
}
-function runGit(args, options = {}) {
+interface InvalidEntry {
+ file: string;
+ stableId: string;
+}
+
+function runGit(args: string[], options: Partial = {}): string {
return execFileSync('git', args, { encoding: 'utf8', ...options });
}
-function listStagedFiles() {
+function listStagedFiles(): string[] {
const output = runGit(['diff', '--cached', '--name-only', '--diff-filter=AM']);
return output
.split('\n')
@@ -40,7 +46,7 @@ function listStagedFiles() {
.filter(isInScopeContentFile);
}
-function stageFile(file) {
+function stageFile(file: string): void {
runGit(['add', '--', file]);
}
@@ -48,7 +54,7 @@ function stageFile(file) {
* In hook mode we read the staged blob from the index, not the working tree, so ID
* insertion reflects what is actually being committed.
*/
-function readIndexedFile(file) {
+function readIndexedFile(file: string): string {
return runGit(['show', `:${file}`]);
}
@@ -56,25 +62,25 @@ function readIndexedFile(file) {
* If a file has unstaged edits, re-staging it would collapse a partial `git add -p`
* selection into a full-file stage. We abort instead of trying to outsmart git here.
*/
-function hasUnstagedChanges(file) {
+function hasUnstagedChanges(file: string): boolean {
try {
runGit(['diff', '--quiet', '--', file], { stdio: 'ignore' });
return false;
}
catch (error) {
- if (error.status === 1) return true;
+ if ((error as { status?: number }).status === 1) return true;
throw error;
}
}
-function main() {
+function main(): void {
const files = stagedOnly ? listStagedFiles() : listInScopeContentFiles();
let inserted = 0;
let alreadyPresent = 0;
let missingFrontmatter = 0;
let staged = 0;
- const invalidStableIds = [];
- const partialStageConflicts = [];
+ const invalidStableIds: InvalidEntry[] = [];
+ const partialStageConflicts: string[] = [];
for (const file of files) {
const source = stagedOnly ? readIndexedFile(file) : fs.readFileSync(file, 'utf8');
@@ -84,8 +90,9 @@ function main() {
if (result.reason === 'already-present') {
alreadyPresent++;
const frontmatter = parseFrontmatter(source);
- if (frontmatter.stableId && !isValidUuid(frontmatter.stableId)) {
- invalidStableIds.push({ file, stableId: frontmatter.stableId });
+ const stableId = frontmatter.stableId;
+ if (typeof stableId === 'string' && !isValidUuid(stableId)) {
+ invalidStableIds.push({ file, stableId });
}
}
else if (result.reason === 'missing-frontmatter') missingFrontmatter++;
diff --git a/scripts/redirects-sync.mjs b/scripts/redirects-sync.ts
similarity index 67%
rename from scripts/redirects-sync.mjs
rename to scripts/redirects-sync.ts
index 7590ef1fa..7d680c6c0 100755
--- a/scripts/redirects-sync.mjs
+++ b/scripts/redirects-sync.ts
@@ -3,12 +3,77 @@
import fs from 'node:fs';
import path from 'node:path';
import { execFileSync } from 'node:child_process';
+import type { ExecFileSyncOptionsWithStringEncoding } from 'node:child_process';
+
+import { listRoutableContentFiles, parseFrontmatter } from './_content-lib.ts';
+
+interface CliOptions {
+ base: string;
+ manifest: string;
+ hints: string;
+ report: string;
+ writeDeterministic: boolean;
+ failOnUnresolved: boolean;
+ noWrite: boolean;
+}
+
+interface SnapshotItem {
+ collection: 'content' | 'landing';
+ path: string;
+ sourceFile: string;
+ title?: string;
+ stableId?: string;
+}
+
+type RedirectStatusCode = 301 | 302 | 307 | 308;
+
+const VALID_STATUS_CODES: ReadonlySet = new Set([301, 302, 307, 308]);
+
+interface RedirectEntry {
+ to: string;
+ statusCode: RedirectStatusCode;
+}
+
+interface ManifestData {
+ entries: Record;
+ fromSet: Set;
+}
+
+interface Hints {
+ manualRedirects: Record;
+}
-import { listRoutableContentFiles, parseFrontmatter } from './_content-lib.mjs';
+interface AcceptedResolution {
+ status: 'accepted';
+ from: string;
+ to: string;
+ reason: string;
+ old: SnapshotItem;
+ matches: SnapshotItem[];
+}
+
+interface UnresolvedResolution {
+ status: 'unresolved';
+ reason: string;
+ old: SnapshotItem;
+ matches: SnapshotItem[];
+}
+
+type Resolution = AcceptedResolution | UnresolvedResolution;
+
+interface Summary {
+ baseRef: string;
+ basePages: number;
+ currentPages: number;
+ removedRoutes: number;
+ uncoveredRemovedRoutes: number;
+ deterministicRedirects: number;
+ redirectDecisionsNeeded: number;
+}
-const DEFAULTS = {
+const DEFAULTS: CliOptions = {
base: 'origin/main',
- manifest: 'redirects.csv',
+ manifest: 'redirects.json',
hints: '.docs/redirect-hints.json',
report: '.docs/redirect-decisions-needed.json',
writeDeterministic: false,
@@ -16,8 +81,8 @@ const DEFAULTS = {
noWrite: false,
};
-function parseArgs(argv) {
- const options = { ...DEFAULTS };
+function parseArgs(argv: string[]): CliOptions {
+ const options: CliOptions = { ...DEFAULTS };
for (let i = 0; i < argv.length; i++) {
const arg = argv[i];
@@ -42,15 +107,15 @@ function parseArgs(argv) {
return options;
}
-function printHelp() {
+function printHelp(): void {
console.log(`redirects-sync
Usage:
- node scripts/redirects-sync.mjs [options]
+ node scripts/redirects-sync.ts [options]
Options:
--base Base git ref to diff against (default: origin/main)
- --manifest Redirect manifest CSV (default: redirects.csv)
+ --manifest Redirect manifest JSON (default: redirects.json)
--hints Manual redirect hints JSON (default: .docs/redirect-hints.json)
--report Redirect decisions report (default: .docs/redirect-decisions-needed.json)
--write-deterministic Auto-write deterministic redirects to the manifest
@@ -59,17 +124,18 @@ Options:
`);
}
-function runGit(args, options = {}) {
+function runGit(args: string[], options: Partial = {}): string {
try {
return execFileSync('git', args, { encoding: 'utf8', ...options });
}
catch (error) {
- const details = error.stderr?.toString?.() || error.message;
+ const err = error as { stderr?: { toString?: () => string }; message?: string };
+ const details = err.stderr?.toString?.() || err.message || String(error);
throw new Error(`git ${args.join(' ')} failed:\n${details}`);
}
}
-function assertBaseRefExists(baseRef) {
+function assertBaseRefExists(baseRef: string): void {
try {
runGit(['rev-parse', '--verify', baseRef], { stdio: 'ignore' });
}
@@ -78,7 +144,7 @@ function assertBaseRefExists(baseRef) {
}
}
-function listBaseContentFiles(baseRef) {
+function listBaseContentFiles(baseRef: string): string[] {
const output = runGit(['ls-tree', '-r', '--name-only', baseRef, '--', 'content']);
return output
.split('\n')
@@ -88,15 +154,15 @@ function listBaseContentFiles(baseRef) {
.filter(file => !file.startsWith('content/_partials/'));
}
-function readBaseFile(baseRef, file) {
+function readBaseFile(baseRef: string, file: string): string {
return runGit(['show', `${baseRef}:${file}`]);
}
-function readCurrentFile(file) {
+function readCurrentFile(file: string): string {
return fs.readFileSync(file, 'utf8');
}
-function stripNumericPrefix(segment) {
+function stripNumericPrefix(segment: string): string {
return segment.replace(/^\d+\./, '');
}
@@ -104,14 +170,14 @@ function stripNumericPrefix(segment) {
* Redirect continuity must follow Nuxt's public route semantics, not raw filesystem
* paths. In particular, numeric ordering prefixes affect nav order but not URL shape.
*/
-function buildPublicPath(file, frontmatter = {}) {
+function buildPublicPath(file: string, frontmatter: Record = {}): string {
if (typeof frontmatter.path === 'string' && frontmatter.path.trim()) {
return normalizePublicPath(frontmatter.path.trim());
}
const relative = file.replace(/^content\//, '');
const parts = relative.split('/');
- const fileName = parts.pop();
+ const fileName = parts.pop()!;
const fileStem = stripNumericPrefix(fileName.replace(/\.[^.]+$/, ''));
const pathParts = parts.map(stripNumericPrefix).filter(Boolean);
@@ -122,13 +188,13 @@ function buildPublicPath(file, frontmatter = {}) {
return normalizePublicPath(`/${pathParts.join('/')}`);
}
-function normalizePublicPath(routePath) {
+function normalizePublicPath(routePath: string): string {
if (!routePath || routePath === '/') return '/';
const normalized = `/${routePath.replace(/^\/+/, '').replace(/\/+$/, '')}`;
return normalized === '/index' ? '/' : normalized;
}
-function toSnapshotItem(file, source, collection = 'content') {
+function toSnapshotItem(file: string, source: string, collection: 'content' | 'landing' = 'content'): SnapshotItem {
const frontmatter = parseFrontmatter(source);
const publicPath = buildPublicPath(file, frontmatter);
@@ -136,33 +202,33 @@ function toSnapshotItem(file, source, collection = 'content') {
collection,
path: publicPath,
sourceFile: file,
- title: frontmatter.title,
- stableId: frontmatter.stableId,
+ title: typeof frontmatter.title === 'string' ? frontmatter.title : undefined,
+ stableId: typeof frontmatter.stableId === 'string' ? frontmatter.stableId : undefined,
};
}
-function loadCurrentSnapshot() {
+function loadCurrentSnapshot(): SnapshotItem[] {
const files = listRoutableContentFiles();
- return files.map(file => {
- const collection = file === 'content/index.md' ? 'landing' : 'content';
+ return files.map((file) => {
+ const collection: 'content' | 'landing' = file === 'content/index.md' ? 'landing' : 'content';
return toSnapshotItem(file, readCurrentFile(file), collection);
});
}
-function loadBaseSnapshot(baseRef) {
+function loadBaseSnapshot(baseRef: string): SnapshotItem[] {
const files = listBaseContentFiles(baseRef);
- return files.map(file => {
- const collection = file === 'content/index.md' ? 'landing' : 'content';
+ return files.map((file) => {
+ const collection: 'content' | 'landing' = file === 'content/index.md' ? 'landing' : 'content';
return toSnapshotItem(file, readBaseFile(baseRef, file), collection);
});
}
-function indexByPath(items) {
+function indexByPath(items: SnapshotItem[]): Map {
return new Map(items.map(item => [item.path, item]));
}
-function indexByStableId(items) {
- const byStableId = new Map();
+function indexByStableId(items: SnapshotItem[]): Map {
+ const byStableId = new Map();
for (const item of items) {
if (!item.stableId) continue;
const matches = byStableId.get(item.stableId) || [];
@@ -172,7 +238,7 @@ function indexByStableId(items) {
return byStableId;
}
-function loadRedirectManifest(file) {
+function loadRedirectManifest(file: string): ManifestData {
if (!fs.existsSync(file)) {
return { entries: {}, fromSet: new Set() };
}
@@ -180,32 +246,41 @@ function loadRedirectManifest(file) {
const text = fs.readFileSync(file, 'utf8').trim();
if (!text) return { entries: {}, fromSet: new Set() };
- const parsed = JSON.parse(text);
+ const parsed = JSON.parse(text) as unknown;
if (parsed === null || typeof parsed !== 'object' || Array.isArray(parsed)) {
throw new Error(`Redirect manifest ${file} must be a JSON object keyed by source path`);
}
- for (const [from, value] of Object.entries(parsed)) {
- if (!value || typeof value !== 'object' || typeof value.to !== 'string' || typeof value.statusCode !== 'number') {
+ const entries: Record = {};
+ for (const [from, value] of Object.entries(parsed as Record)) {
+ if (!value || typeof value !== 'object') {
throw new Error(`Invalid redirect entry for ${from} in ${file}: expected { to: string, statusCode: number }`);
}
+ const candidate = value as { to?: unknown; statusCode?: unknown };
+ if (typeof candidate.to !== 'string' || typeof candidate.statusCode !== 'number') {
+ throw new Error(`Invalid redirect entry for ${from} in ${file}: expected { to: string, statusCode: number }`);
+ }
+ if (!VALID_STATUS_CODES.has(candidate.statusCode as RedirectStatusCode)) {
+ throw new Error(`Invalid redirect entry for ${from} in ${file}: statusCode ${candidate.statusCode} must be one of 301, 302, 307, 308`);
+ }
+ entries[from] = { to: candidate.to, statusCode: candidate.statusCode as RedirectStatusCode };
}
- return { entries: parsed, fromSet: new Set(Object.keys(parsed)) };
+ return { entries, fromSet: new Set(Object.keys(entries)) };
}
-function loadHints(file) {
+function loadHints(file: string): Hints {
if (!fs.existsSync(file)) {
return { manualRedirects: {} };
}
- const parsed = JSON.parse(fs.readFileSync(file, 'utf8'));
+ const parsed = JSON.parse(fs.readFileSync(file, 'utf8')) as { manualRedirects?: Record };
return {
manualRedirects: parsed.manualRedirects || {},
};
}
-function writeRedirectManifest(file, entries) {
+function writeRedirectManifest(file: string, entries: Record): void {
const sorted = Object.fromEntries(
Object.entries(entries).sort(([a], [b]) => a.localeCompare(b)),
);
@@ -216,7 +291,11 @@ function writeRedirectManifest(file, entries) {
* Redirect generation is intentionally strict: deterministic same-stableId matches can
* be auto-written, while splits, merges, and deletions stay manual decisions.
*/
-function resolveRemovedRoute(oldPage, currentByStableId, manualRedirects) {
+function resolveRemovedRoute(
+ oldPage: SnapshotItem,
+ currentByStableId: Map,
+ manualRedirects: Record,
+): Resolution {
const manualTarget = manualRedirects[oldPage.path];
if (manualTarget) {
return {
@@ -274,7 +353,17 @@ function resolveRemovedRoute(oldPage, currentByStableId, manualRedirects) {
* The report is optimized for human review, not programmatic scoring. Once stable IDs
* exist everywhere, the remaining cases are true editorial decisions.
*/
-function writeDecisionArtifacts(file, unresolved, summary) {
+interface DecisionPayload {
+ generatedAt: string;
+ summary: Summary;
+ unresolved: Array<{
+ reason: string;
+ old: { path: string; title: string; sourceFile: string; stableId: string };
+ matches: Array<{ path: string; title: string; sourceFile: string; stableId: string }>;
+ }>;
+}
+
+function writeDecisionArtifacts(file: string, unresolved: UnresolvedResolution[], summary: Summary): void {
const payload = {
generatedAt: new Date().toISOString(),
summary,
@@ -310,7 +399,7 @@ function writeDecisionArtifacts(file, unresolved, summary) {
}
}
-function buildDecisionMarkdown(payload) {
+function buildDecisionMarkdown(payload: DecisionPayload): string {
const lines = [
'# Redirect Decisions Needed',
'',
@@ -341,7 +430,7 @@ function buildDecisionMarkdown(payload) {
return lines.join('\n') + '\n';
}
-function main() {
+function main(): void {
const options = parseArgs(process.argv.slice(2));
assertBaseRefExists(options.base);
const hints = loadHints(options.hints);
@@ -356,8 +445,8 @@ function main() {
const removed = [...baseByPath.values()].filter(page => !currentByPath.has(page.path));
const uncoveredRemoved = removed.filter(page => !manifest.fromSet.has(page.path));
- const accepted = [];
- const unresolved = [];
+ const accepted: AcceptedResolution[] = [];
+ const unresolved: UnresolvedResolution[] = [];
for (const oldPage of uncoveredRemoved) {
const resolution = resolveRemovedRoute(oldPage, currentByStableId, hints.manualRedirects);
@@ -369,7 +458,7 @@ function main() {
? accepted.filter(row => !manifest.fromSet.has(row.from))
: [];
- const summary = {
+ const summary: Summary = {
baseRef: options.base,
basePages: basePages.length,
currentPages: currentPages.length,
diff --git a/scripts/setup-hooks.mjs b/scripts/setup-hooks.ts
similarity index 100%
rename from scripts/setup-hooks.mjs
rename to scripts/setup-hooks.ts
From 23d0e7f1d78138a9afa73fff219b57a4e7d930c9 Mon Sep 17 00:00:00 2001
From: bryantgillespie
Date: Tue, 28 Apr 2026 08:19:21 -0400
Subject: [PATCH 09/45] cleanup
---
.githooks/pre-push | 2 +-
package.json | 6 +++--
pnpm-lock.yaml | 21 +++++-----------
scripts/_content-lib.ts | 51 +++++----------------------------------
scripts/redirects-sync.ts | 42 ++++++--------------------------
scripts/tsconfig.json | 13 ++++++++++
6 files changed, 38 insertions(+), 97 deletions(-)
create mode 100644 scripts/tsconfig.json
diff --git a/.githooks/pre-push b/.githooks/pre-push
index 955f673b9..41c311f46 100755
--- a/.githooks/pre-push
+++ b/.githooks/pre-push
@@ -1,7 +1,7 @@
#!/bin/sh
set -e
-if git diff --quiet origin/main...HEAD -- content redirects.csv content.config.ts; then
+if git diff --quiet origin/main...HEAD -- content redirects.json content.config.ts; then
exit 0
fi
diff --git a/package.json b/package.json
index 03a594b0d..6f0bba93e 100644
--- a/package.json
+++ b/package.json
@@ -10,8 +10,9 @@
"postinstall": "node scripts/setup-hooks.ts && nuxt prepare",
"stable-ids:ensure": "node scripts/ensure-stable-ids.ts",
"stable-ids:check": "node scripts/check-stable-ids.ts",
- "redirects:sync": "node scripts/redirects-sync.ts --base origin/main --manifest redirects.json --hints .docs/redirect-hints.json --report .docs/redirect-decisions-needed.json --write-deterministic --fail-on-unresolved",
- "redirects:check": "node scripts/redirects-sync.ts --base origin/main --manifest redirects.json --hints .docs/redirect-hints.json --report .docs/redirect-decisions-needed.json --fail-on-unresolved --no-write"
+ "redirects:sync": "node scripts/redirects-sync.ts --write-deterministic --fail-on-unresolved",
+ "redirects:check": "node scripts/redirects-sync.ts --fail-on-unresolved --no-write",
+ "typecheck:scripts": "tsc -p scripts/tsconfig.json"
},
"dependencies": {
"@directus/openapi": "0.3.0",
@@ -45,6 +46,7 @@
"@nuxt/eslint": "1.15.2",
"@nuxt/scripts": "1.0.2",
"@types/lodash-es": "4.17.12",
+ "@types/node": "^25.6.0",
"typescript": "6.0.3",
"vue-tsc": "^3.2.7"
},
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 1e3b366c8..fa37c449f 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -99,6 +99,9 @@ importers:
'@types/lodash-es':
specifier: 4.17.12
version: 4.17.12
+ '@types/node':
+ specifier: ^25.6.0
+ version: 25.6.0
typescript:
specifier: 6.0.3
version: 6.0.3
@@ -2947,9 +2950,6 @@ packages:
'@types/ms@2.1.0':
resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==}
- '@types/node@25.2.2':
- resolution: {integrity: sha512-BkmoP5/FhRYek5izySdkOneRyXYN35I860MFAGupTdebyE66uZaR+bXLHq8k4DirE5DwQi3NuhvRU1jqTVwUrQ==}
-
'@types/node@25.6.0':
resolution: {integrity: sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ==}
@@ -6996,9 +6996,6 @@ packages:
unctx@2.5.0:
resolution: {integrity: sha512-p+Rz9x0R7X+CYDkT+Xg8/GhpcShTlU8n+cf9OtOEf7zEQsNcCZO1dPKNRDqvUTaq+P32PMMkxWHwfrxkqfqAYg==}
- undici-types@7.16.0:
- resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==}
-
undici-types@7.19.2:
resolution: {integrity: sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg==}
@@ -10553,7 +10550,7 @@ snapshots:
dependencies:
'@types/http-cache-semantics': 4.2.0
'@types/keyv': 3.1.4
- '@types/node': 25.2.2
+ '@types/node': 25.6.0
'@types/responselike': 1.0.3
'@types/debug@4.1.13':
@@ -10580,7 +10577,7 @@ snapshots:
'@types/keyv@3.1.4':
dependencies:
- '@types/node': 25.2.2
+ '@types/node': 25.6.0
'@types/lodash-es@4.17.12':
dependencies:
@@ -10594,10 +10591,6 @@ snapshots:
'@types/ms@2.1.0': {}
- '@types/node@25.2.2':
- dependencies:
- undici-types: 7.16.0
-
'@types/node@25.6.0':
dependencies:
undici-types: 7.19.2
@@ -10612,7 +10605,7 @@ snapshots:
'@types/responselike@1.0.3':
dependencies:
- '@types/node': 25.2.2
+ '@types/node': 25.6.0
'@types/trusted-types@2.0.7':
optional: true
@@ -15773,8 +15766,6 @@ snapshots:
magic-string: 0.30.21
unplugin: 2.3.11
- undici-types@7.16.0: {}
-
undici-types@7.19.2: {}
unenv@2.0.0-rc.24:
diff --git a/scripts/_content-lib.ts b/scripts/_content-lib.ts
index d495bd1c5..31b7a6565 100755
--- a/scripts/_content-lib.ts
+++ b/scripts/_content-lib.ts
@@ -1,7 +1,6 @@
import fs from 'node:fs';
import path from 'node:path';
-const ARRAY_KEYS = new Set(['stack', 'features', 'use_cases', 'technologies']);
const UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
export interface ScopeOptions {
@@ -9,15 +8,13 @@ export interface ScopeOptions {
}
export interface Frontmatter {
- [key: string]: string | string[] | undefined;
+ [key: string]: string | undefined;
}
export interface FrontmatterBlock {
- fullMatch: string;
newline: string;
body: string;
closingWhitespace: string;
- start: number;
end: number;
}
@@ -69,55 +66,21 @@ export function listInScopeContentFiles(dir = 'content'): string[] {
}
/**
- * Intentionally minimal frontmatter parser for simple scalar and scalar-array fields.
+ * Intentionally minimal frontmatter parser for top-level scalar fields only.
* We keep this dependency-free because the stable ID and redirect workflows only need
* a few top-level fields and run inside hooks/scripts where fast startup matters.
- * Do not use this for nested YAML structures or multiline YAML values.
+ * Do not use this for arrays, nested YAML structures, or multiline YAML values.
*/
export function parseFrontmatter(source: string): Frontmatter {
const block = getFrontmatterBlock(source);
if (!block) return {};
- const lines = block.body.split(/\r?\n/);
const data: Frontmatter = {};
- let currentArrayKey: string | null = null;
-
- for (const line of lines) {
- const keyMatch = line.match(/^([A-Za-z_][\w-]*):\s*(.*)$/);
+ for (const line of block.body.split(/\r?\n/)) {
+ const keyMatch = line.match(/^([A-Za-z_][\w-]*):\s*(.+)$/);
if (keyMatch) {
const [, key, rawValue] = keyMatch;
- currentArrayKey = null;
- if (ARRAY_KEYS.has(key)) {
- if (!rawValue) {
- data[key] = [];
- currentArrayKey = key;
- }
- else if (rawValue.startsWith('[') && rawValue.endsWith(']')) {
- data[key] = rawValue
- .slice(1, -1)
- .split(',')
- .map(value => cleanScalar(value))
- .filter(Boolean);
- }
- else {
- data[key] = [cleanScalar(rawValue)].filter(Boolean);
- }
- }
- else if (rawValue) {
- data[key] = cleanScalar(rawValue);
- }
- continue;
- }
-
- if (currentArrayKey) {
- const itemMatch = line.match(/^\s*-\s*(.+)$/);
- if (itemMatch) {
- (data[currentArrayKey] as string[]).push(cleanScalar(itemMatch[1]));
- continue;
- }
- if (/^[^\s]/.test(line)) {
- currentArrayKey = null;
- }
+ data[key] = cleanScalar(rawValue);
}
}
@@ -142,11 +105,9 @@ export function getFrontmatterBlock(source: string): FrontmatterBlock | null {
const [fullMatch, newline, body, closingWhitespace] = match;
return {
- fullMatch,
newline,
body,
closingWhitespace,
- start: 0,
end: fullMatch.length,
};
}
diff --git a/scripts/redirects-sync.ts b/scripts/redirects-sync.ts
index 7d680c6c0..db4e95964 100755
--- a/scripts/redirects-sync.ts
+++ b/scripts/redirects-sync.ts
@@ -5,7 +5,7 @@ import path from 'node:path';
import { execFileSync } from 'node:child_process';
import type { ExecFileSyncOptionsWithStringEncoding } from 'node:child_process';
-import { listRoutableContentFiles, parseFrontmatter } from './_content-lib.ts';
+import { isRoutableContentFile, listRoutableContentFiles, parseFrontmatter } from './_content-lib.ts';
interface CliOptions {
base: string;
@@ -18,7 +18,6 @@ interface CliOptions {
}
interface SnapshotItem {
- collection: 'content' | 'landing';
path: string;
sourceFile: string;
title?: string;
@@ -47,9 +46,6 @@ interface AcceptedResolution {
status: 'accepted';
from: string;
to: string;
- reason: string;
- old: SnapshotItem;
- matches: SnapshotItem[];
}
interface UnresolvedResolution {
@@ -150,8 +146,7 @@ function listBaseContentFiles(baseRef: string): string[] {
.split('\n')
.map(line => line.trim())
.filter(Boolean)
- .filter(file => file.endsWith('.md'))
- .filter(file => !file.startsWith('content/_partials/'));
+ .filter(file => isRoutableContentFile(file));
}
function readBaseFile(baseRef: string, file: string): string {
@@ -194,33 +189,18 @@ function normalizePublicPath(routePath: string): string {
return normalized === '/index' ? '/' : normalized;
}
-function toSnapshotItem(file: string, source: string, collection: 'content' | 'landing' = 'content'): SnapshotItem {
+function toSnapshotItem(file: string, source: string): SnapshotItem {
const frontmatter = parseFrontmatter(source);
- const publicPath = buildPublicPath(file, frontmatter);
-
return {
- collection,
- path: publicPath,
+ path: buildPublicPath(file, frontmatter),
sourceFile: file,
title: typeof frontmatter.title === 'string' ? frontmatter.title : undefined,
stableId: typeof frontmatter.stableId === 'string' ? frontmatter.stableId : undefined,
};
}
-function loadCurrentSnapshot(): SnapshotItem[] {
- const files = listRoutableContentFiles();
- return files.map((file) => {
- const collection: 'content' | 'landing' = file === 'content/index.md' ? 'landing' : 'content';
- return toSnapshotItem(file, readCurrentFile(file), collection);
- });
-}
-
-function loadBaseSnapshot(baseRef: string): SnapshotItem[] {
- const files = listBaseContentFiles(baseRef);
- return files.map((file) => {
- const collection: 'content' | 'landing' = file === 'content/index.md' ? 'landing' : 'content';
- return toSnapshotItem(file, readBaseFile(baseRef, file), collection);
- });
+function loadSnapshot(files: string[], readFile: (file: string) => string): SnapshotItem[] {
+ return files.map(file => toSnapshotItem(file, readFile(file)));
}
function indexByPath(items: SnapshotItem[]): Map {
@@ -302,9 +282,6 @@ function resolveRemovedRoute(
status: 'accepted',
from: oldPage.path,
to: manualTarget,
- reason: 'manual redirect override',
- old: oldPage,
- matches: [],
};
}
@@ -326,9 +303,6 @@ function resolveRemovedRoute(
status: 'accepted',
from: oldPage.path,
to: matches[0].path,
- reason: 'matching stable ID',
- old: oldPage,
- matches,
};
}
@@ -435,8 +409,8 @@ function main(): void {
assertBaseRefExists(options.base);
const hints = loadHints(options.hints);
const manifest = loadRedirectManifest(options.manifest);
- const basePages = loadBaseSnapshot(options.base);
- const currentPages = loadCurrentSnapshot();
+ const basePages = loadSnapshot(listBaseContentFiles(options.base), file => readBaseFile(options.base, file));
+ const currentPages = loadSnapshot(listRoutableContentFiles(), readCurrentFile);
const baseByPath = indexByPath(basePages);
const currentByPath = indexByPath(currentPages);
diff --git a/scripts/tsconfig.json b/scripts/tsconfig.json
new file mode 100644
index 000000000..c8735ba45
--- /dev/null
+++ b/scripts/tsconfig.json
@@ -0,0 +1,13 @@
+{
+ "compilerOptions": {
+ "module": "nodenext",
+ "moduleResolution": "nodenext",
+ "target": "es2022",
+ "strict": true,
+ "noEmit": true,
+ "allowImportingTsExtensions": true,
+ "types": ["node"],
+ "skipLibCheck": true
+ },
+ "include": ["**/*.ts"]
+}
From 94d9c40d808ef48c566b66c4dbaadc98433a2b6a Mon Sep 17 00:00:00 2001
From: bryantgillespie
Date: Tue, 28 Apr 2026 08:43:17 -0400
Subject: [PATCH 10/45] ai cleanup
---
.githooks/pre-push | 4 +
nuxt.config.ts | 3 +-
package.json | 4 +-
pnpm-lock.yaml | 274 +++++++++++++++++------------------
scripts/ensure-stable-ids.ts | 2 +-
scripts/redirects-sync.ts | 8 +-
scripts/setup-hooks.ts | 13 ++
7 files changed, 161 insertions(+), 147 deletions(-)
diff --git a/.githooks/pre-push b/.githooks/pre-push
index 41c311f46..08e9dd862 100755
--- a/.githooks/pre-push
+++ b/.githooks/pre-push
@@ -1,6 +1,10 @@
#!/bin/sh
set -e
+if ! git fetch origin main --quiet; then
+ echo "warning: failed to fetch origin/main; using local ref for redirect check" >&2
+fi
+
if git diff --quiet origin/main...HEAD -- content redirects.json content.config.ts; then
exit 0
fi
diff --git a/nuxt.config.ts b/nuxt.config.ts
index a178aa087..171c93951 100644
--- a/nuxt.config.ts
+++ b/nuxt.config.ts
@@ -1,4 +1,4 @@
-import { readFileSync } from 'node:fs';
+import { existsSync, readFileSync } from 'node:fs';
import type { NitroConfig } from 'nitropack';
const BASE_URL = '/docs';
@@ -11,6 +11,7 @@ interface RedirectRule {
}
function loadRedirectRouteRules(): NitroConfig['routeRules'] {
+ if (!existsSync('redirects.json')) return {};
const raw = readFileSync('redirects.json', 'utf8').trim();
if (!raw) return {};
const entries = JSON.parse(raw) as Record;
diff --git a/package.json b/package.json
index 6f0bba93e..034da16d4 100644
--- a/package.json
+++ b/package.json
@@ -46,7 +46,7 @@
"@nuxt/eslint": "1.15.2",
"@nuxt/scripts": "1.0.2",
"@types/lodash-es": "4.17.12",
- "@types/node": "^25.6.0",
+ "@types/node": "^22",
"typescript": "6.0.3",
"vue-tsc": "^3.2.7"
},
@@ -57,6 +57,6 @@
},
"packageManager": "pnpm@10.29.2+sha512.bef43fa759d91fd2da4b319a5a0d13ef7a45bb985a3d7342058470f9d2051a3ba8674e629672654686ef9443ad13a82da2beb9eeb3e0221c87b8154fff9d74b8",
"engines": {
- "node": ">=22.6"
+ "node": ">=22.18"
}
}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index fa37c449f..d56123993 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -37,10 +37,10 @@ importers:
version: 3.13.0(better-sqlite3@11.10.0)(magicast@0.5.2)(valibot@1.3.1(typescript@6.0.3))
'@nuxt/fonts':
specifier: 0.14.0
- version: 0.14.0(@netlify/blobs@9.1.2)(db0@0.3.4(better-sqlite3@11.10.0))(ioredis@5.10.1)(magicast@0.5.2)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
+ version: 0.14.0(@netlify/blobs@9.1.2)(db0@0.3.4(better-sqlite3@11.10.0))(ioredis@5.10.1)(magicast@0.5.2)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
'@nuxt/ui':
specifier: ^4.6.1
- version: 4.6.1(@netlify/blobs@9.1.2)(@nuxt/content@3.13.0(better-sqlite3@11.10.0)(magicast@0.5.2)(valibot@1.3.1(typescript@6.0.3)))(@tiptap/extensions@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4))(@tiptap/y-tiptap@3.0.3(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.8)(y-protocols@1.0.7(yjs@13.6.30))(yjs@13.6.30))(axios@1.13.5)(change-case@5.4.4)(db0@0.3.4(better-sqlite3@11.10.0))(embla-carousel@8.6.0)(ioredis@5.10.1)(jwt-decode@4.0.0)(magicast@0.5.2)(tailwindcss@4.2.4)(typescript@6.0.3)(valibot@1.3.1(typescript@6.0.3))(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-router@5.0.6(@vue/compiler-sfc@3.5.33)(vue@3.5.33(typescript@6.0.3)))(vue@3.5.33(typescript@6.0.3))(yjs@13.6.30)(zod@4.3.6)
+ version: 4.6.1(@netlify/blobs@9.1.2)(@nuxt/content@3.13.0(better-sqlite3@11.10.0)(magicast@0.5.2)(valibot@1.3.1(typescript@6.0.3)))(@tiptap/extensions@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4))(@tiptap/y-tiptap@3.0.3(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.8)(y-protocols@1.0.7(yjs@13.6.30))(yjs@13.6.30))(axios@1.13.5)(change-case@5.4.4)(db0@0.3.4(better-sqlite3@11.10.0))(embla-carousel@8.6.0)(ioredis@5.10.1)(jwt-decode@4.0.0)(magicast@0.5.2)(tailwindcss@4.2.4)(typescript@6.0.3)(valibot@1.3.1(typescript@6.0.3))(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-router@5.0.6(@vue/compiler-sfc@3.5.33)(vue@3.5.33(typescript@6.0.3)))(vue@3.5.33(typescript@6.0.3))(yjs@13.6.30)(zod@4.3.6)
'@nuxtjs/algolia':
specifier: 1.11.2
version: 1.11.2(@vue/server-renderer@3.5.33(vue@3.5.33(typescript@6.0.3)))(magicast@0.5.2)(vue@3.5.33(typescript@6.0.3))
@@ -49,7 +49,7 @@ importers:
version: 4.0.0(magicast@0.5.2)
'@nuxtjs/seo':
specifier: 5.1.3
- version: 5.1.3(6c26335a1a794c77cd272700d66c77ac)
+ version: 5.1.3(4647370d33bd5943aead907599700ab7)
'@takumi-rs/core':
specifier: ^1.1.0
version: 1.1.0
@@ -58,13 +58,13 @@ importers:
version: 14.2.1(vue@3.5.33(typescript@6.0.3))
'@vueuse/nuxt':
specifier: 14.2.1
- version: 14.2.1(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))
+ version: 14.2.1(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@22.19.17)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))
lodash-es:
specifier: 4.18.1
version: 4.18.1
nuxt:
specifier: 4.4.2
- version: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3)
+ version: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@22.19.17)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3)
nuxt-llms:
specifier: 0.2.0
version: 0.2.0(magicast@0.5.2)
@@ -92,16 +92,16 @@ importers:
version: 1.2.2
'@nuxt/eslint':
specifier: 1.15.2
- version: 1.15.2(@typescript-eslint/utils@8.59.0(eslint@9.28.0(jiti@2.6.1))(typescript@6.0.3))(@vue/compiler-sfc@3.5.33)(eslint@9.28.0(jiti@2.6.1))(magicast@0.5.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
+ version: 1.15.2(@typescript-eslint/utils@8.59.0(eslint@9.28.0(jiti@2.6.1))(typescript@6.0.3))(@vue/compiler-sfc@3.5.33)(eslint@9.28.0(jiti@2.6.1))(magicast@0.5.2)(typescript@6.0.3)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
'@nuxt/scripts':
specifier: 1.0.2
- version: 1.0.2(@netlify/blobs@9.1.2)(@types/google.maps@3.58.1)(@unhead/vue@2.1.13(vue@3.5.33(typescript@6.0.3)))(db0@0.3.4(better-sqlite3@11.10.0))(ioredis@5.10.1)(magicast@0.5.2)(posthog-js@1.371.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))
+ version: 1.0.2(@netlify/blobs@9.1.2)(@types/google.maps@3.58.1)(@unhead/vue@2.1.13(vue@3.5.33(typescript@6.0.3)))(db0@0.3.4(better-sqlite3@11.10.0))(ioredis@5.10.1)(magicast@0.5.2)(posthog-js@1.371.2)(typescript@6.0.3)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))
'@types/lodash-es':
specifier: 4.17.12
version: 4.17.12
'@types/node':
- specifier: ^25.6.0
- version: 25.6.0
+ specifier: ^22
+ version: 22.19.17
typescript:
specifier: 6.0.3
version: 6.0.3
@@ -2950,8 +2950,8 @@ packages:
'@types/ms@2.1.0':
resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==}
- '@types/node@25.6.0':
- resolution: {integrity: sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ==}
+ '@types/node@22.19.17':
+ resolution: {integrity: sha512-wGdMcf+vPYM6jikpS/qhg6WiqSV/OhG+jeeHT/KlVqxYfD40iYJf9/AE1uQxVWFvU7MipKRkRv8NSHiCGgPr8Q==}
'@types/parse-path@7.1.0':
resolution: {integrity: sha512-EULJ8LApcVEPbrfND0cRQqutIOdiIgJ1Mgrhpy755r14xMohPTEpkV/k28SJvuOs9bHRFW8x+KeDAEPiGQPB9Q==}
@@ -6996,8 +6996,8 @@ packages:
unctx@2.5.0:
resolution: {integrity: sha512-p+Rz9x0R7X+CYDkT+Xg8/GhpcShTlU8n+cf9OtOEf7zEQsNcCZO1dPKNRDqvUTaq+P32PMMkxWHwfrxkqfqAYg==}
- undici-types@7.19.2:
- resolution: {integrity: sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg==}
+ undici-types@6.21.0:
+ resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
unenv@2.0.0-rc.24:
resolution: {integrity: sha512-i7qRCmY42zmCwnYlh9H2SvLEypEFGye5iRmEMKjcGi7zk9UquigRjFtTLz0TYqr0ZGLZhaMHl/foy1bZR+Cwlw==}
@@ -8497,19 +8497,19 @@ snapshots:
'@nuxt/devalue@2.0.2': {}
- '@nuxt/devtools-kit@3.2.4(magicast@0.5.2)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))':
+ '@nuxt/devtools-kit@3.2.4(magicast@0.5.2)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))':
dependencies:
'@nuxt/kit': 4.4.2(magicast@0.5.2)
execa: 8.0.1
- vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)
+ vite: 7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)
transitivePeerDependencies:
- magicast
- '@nuxt/devtools-kit@4.0.0-alpha.3(magicast@0.5.2)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))':
+ '@nuxt/devtools-kit@4.0.0-alpha.3(magicast@0.5.2)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))':
dependencies:
'@nuxt/kit': 4.4.2(magicast@0.5.2)
tinyexec: 1.1.1
- vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)
+ vite: 7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)
transitivePeerDependencies:
- magicast
@@ -8524,9 +8524,9 @@ snapshots:
pkg-types: 2.3.0
semver: 7.7.4
- '@nuxt/devtools@3.2.4(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))':
+ '@nuxt/devtools@3.2.4(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))':
dependencies:
- '@nuxt/devtools-kit': 3.2.4(magicast@0.5.2)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
+ '@nuxt/devtools-kit': 3.2.4(magicast@0.5.2)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
'@nuxt/devtools-wizard': 3.2.4
'@nuxt/kit': 4.4.2(magicast@0.5.2)
'@vue/devtools-core': 8.1.1(vue@3.5.33(typescript@6.0.3))
@@ -8554,9 +8554,9 @@ snapshots:
sirv: 3.0.2
structured-clone-es: 2.0.0
tinyglobby: 0.2.16
- vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)
- vite-plugin-inspect: 11.3.3(@nuxt/kit@4.4.2(magicast@0.5.2))(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
- vite-plugin-vue-tracer: 1.3.0(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))
+ vite: 7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)
+ vite-plugin-inspect: 11.3.3(@nuxt/kit@4.4.2(magicast@0.5.2))(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
+ vite-plugin-vue-tracer: 1.3.0(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))
which: 6.0.1
ws: 8.20.0
transitivePeerDependencies:
@@ -8605,10 +8605,10 @@ snapshots:
- supports-color
- typescript
- '@nuxt/eslint@1.15.2(@typescript-eslint/utils@8.59.0(eslint@9.28.0(jiti@2.6.1))(typescript@6.0.3))(@vue/compiler-sfc@3.5.33)(eslint@9.28.0(jiti@2.6.1))(magicast@0.5.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))':
+ '@nuxt/eslint@1.15.2(@typescript-eslint/utils@8.59.0(eslint@9.28.0(jiti@2.6.1))(typescript@6.0.3))(@vue/compiler-sfc@3.5.33)(eslint@9.28.0(jiti@2.6.1))(magicast@0.5.2)(typescript@6.0.3)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))':
dependencies:
'@eslint/config-inspector': 1.5.0(eslint@9.28.0(jiti@2.6.1))
- '@nuxt/devtools-kit': 3.2.4(magicast@0.5.2)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
+ '@nuxt/devtools-kit': 3.2.4(magicast@0.5.2)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
'@nuxt/eslint-config': 1.15.2(@typescript-eslint/utils@8.59.0(eslint@9.28.0(jiti@2.6.1))(typescript@6.0.3))(@vue/compiler-sfc@3.5.33)(eslint@9.28.0(jiti@2.6.1))(typescript@6.0.3)
'@nuxt/eslint-plugin': 1.15.2(eslint@9.28.0(jiti@2.6.1))(typescript@6.0.3)
'@nuxt/kit': 4.4.2(magicast@0.5.2)
@@ -8633,13 +8633,13 @@ snapshots:
- utf-8-validate
- vite
- '@nuxt/fonts@0.14.0(@netlify/blobs@9.1.2)(db0@0.3.4(better-sqlite3@11.10.0))(ioredis@5.10.1)(magicast@0.5.2)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))':
+ '@nuxt/fonts@0.14.0(@netlify/blobs@9.1.2)(db0@0.3.4(better-sqlite3@11.10.0))(ioredis@5.10.1)(magicast@0.5.2)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))':
dependencies:
- '@nuxt/devtools-kit': 3.2.4(magicast@0.5.2)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
+ '@nuxt/devtools-kit': 3.2.4(magicast@0.5.2)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
'@nuxt/kit': 4.4.2(magicast@0.5.2)
consola: 3.4.2
defu: 6.1.7
- fontless: 0.2.1(@netlify/blobs@9.1.2)(db0@0.3.4(better-sqlite3@11.10.0))(ioredis@5.10.1)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
+ fontless: 0.2.1(@netlify/blobs@9.1.2)(db0@0.3.4(better-sqlite3@11.10.0))(ioredis@5.10.1)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
h3: 1.15.11
magic-regexp: 0.10.0
ofetch: 1.5.1
@@ -8673,13 +8673,13 @@ snapshots:
- uploadthing
- vite
- '@nuxt/icon@2.2.1(magicast@0.5.2)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))':
+ '@nuxt/icon@2.2.1(magicast@0.5.2)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))':
dependencies:
'@iconify/collections': 1.0.675
'@iconify/types': 2.0.0
'@iconify/utils': 3.1.0
'@iconify/vue': 5.0.0(vue@3.5.33(typescript@6.0.3))
- '@nuxt/devtools-kit': 3.2.4(magicast@0.5.2)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
+ '@nuxt/devtools-kit': 3.2.4(magicast@0.5.2)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
'@nuxt/kit': 4.4.2(magicast@0.5.2)
consola: 3.4.2
local-pkg: 1.1.2
@@ -8796,7 +8796,7 @@ snapshots:
transitivePeerDependencies:
- magicast
- '@nuxt/nitro-server@4.4.2(2426d09d816dd853d95ec6447c6869f4)':
+ '@nuxt/nitro-server@4.4.2(b200ed249053ecb3871c92755e06a756)':
dependencies:
'@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0)
'@nuxt/devalue': 2.0.2
@@ -8815,7 +8815,7 @@ snapshots:
klona: 2.0.6
mocked-exports: 0.1.1
nitropack: 2.13.3(@netlify/blobs@9.1.2)(better-sqlite3@11.10.0)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(srvx@0.11.15)
- nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3)
+ nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@22.19.17)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3)
nypm: 0.6.5
ohash: 2.0.11
pathe: 2.0.3
@@ -8874,9 +8874,9 @@ snapshots:
pkg-types: 2.3.0
std-env: 4.1.0
- '@nuxt/scripts@1.0.2(@netlify/blobs@9.1.2)(@types/google.maps@3.58.1)(@unhead/vue@2.1.13(vue@3.5.33(typescript@6.0.3)))(db0@0.3.4(better-sqlite3@11.10.0))(ioredis@5.10.1)(magicast@0.5.2)(posthog-js@1.371.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))':
+ '@nuxt/scripts@1.0.2(@netlify/blobs@9.1.2)(@types/google.maps@3.58.1)(@unhead/vue@2.1.13(vue@3.5.33(typescript@6.0.3)))(db0@0.3.4(better-sqlite3@11.10.0))(ioredis@5.10.1)(magicast@0.5.2)(posthog-js@1.371.2)(typescript@6.0.3)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))':
dependencies:
- '@nuxt/devtools-kit': 3.2.4(magicast@0.5.2)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
+ '@nuxt/devtools-kit': 3.2.4(magicast@0.5.2)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
'@nuxt/kit': 4.4.2(magicast@0.5.2)
'@unhead/vue': 2.1.13(vue@3.5.33(typescript@6.0.3))
'@vueuse/core': 14.2.1(vue@3.5.33(typescript@6.0.3))
@@ -8935,20 +8935,20 @@ snapshots:
rc9: 3.0.1
std-env: 4.1.0
- '@nuxt/ui@4.6.1(@netlify/blobs@9.1.2)(@nuxt/content@3.13.0(better-sqlite3@11.10.0)(magicast@0.5.2)(valibot@1.3.1(typescript@6.0.3)))(@tiptap/extensions@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4))(@tiptap/y-tiptap@3.0.3(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.8)(y-protocols@1.0.7(yjs@13.6.30))(yjs@13.6.30))(axios@1.13.5)(change-case@5.4.4)(db0@0.3.4(better-sqlite3@11.10.0))(embla-carousel@8.6.0)(ioredis@5.10.1)(jwt-decode@4.0.0)(magicast@0.5.2)(tailwindcss@4.2.4)(typescript@6.0.3)(valibot@1.3.1(typescript@6.0.3))(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-router@5.0.6(@vue/compiler-sfc@3.5.33)(vue@3.5.33(typescript@6.0.3)))(vue@3.5.33(typescript@6.0.3))(yjs@13.6.30)(zod@4.3.6)':
+ '@nuxt/ui@4.6.1(@netlify/blobs@9.1.2)(@nuxt/content@3.13.0(better-sqlite3@11.10.0)(magicast@0.5.2)(valibot@1.3.1(typescript@6.0.3)))(@tiptap/extensions@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4))(@tiptap/y-tiptap@3.0.3(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.8)(y-protocols@1.0.7(yjs@13.6.30))(yjs@13.6.30))(axios@1.13.5)(change-case@5.4.4)(db0@0.3.4(better-sqlite3@11.10.0))(embla-carousel@8.6.0)(ioredis@5.10.1)(jwt-decode@4.0.0)(magicast@0.5.2)(tailwindcss@4.2.4)(typescript@6.0.3)(valibot@1.3.1(typescript@6.0.3))(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-router@5.0.6(@vue/compiler-sfc@3.5.33)(vue@3.5.33(typescript@6.0.3)))(vue@3.5.33(typescript@6.0.3))(yjs@13.6.30)(zod@4.3.6)':
dependencies:
'@floating-ui/dom': 1.7.6
'@iconify/vue': 5.0.0(vue@3.5.33(typescript@6.0.3))
'@internationalized/date': 3.12.1
'@internationalized/number': 3.6.6
- '@nuxt/fonts': 0.14.0(@netlify/blobs@9.1.2)(db0@0.3.4(better-sqlite3@11.10.0))(ioredis@5.10.1)(magicast@0.5.2)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
- '@nuxt/icon': 2.2.1(magicast@0.5.2)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))
+ '@nuxt/fonts': 0.14.0(@netlify/blobs@9.1.2)(db0@0.3.4(better-sqlite3@11.10.0))(ioredis@5.10.1)(magicast@0.5.2)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
+ '@nuxt/icon': 2.2.1(magicast@0.5.2)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))
'@nuxt/kit': 4.4.2(magicast@0.5.2)
'@nuxt/schema': 4.4.2
'@nuxtjs/color-mode': 3.5.2(magicast@0.5.2)
'@standard-schema/spec': 1.1.0
'@tailwindcss/postcss': 4.2.4
- '@tailwindcss/vite': 4.2.4(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
+ '@tailwindcss/vite': 4.2.4(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
'@tanstack/vue-table': 8.21.3(vue@3.5.33(typescript@6.0.3))
'@tanstack/vue-virtual': 3.13.24(vue@3.5.33(typescript@6.0.3))
'@tiptap/core': 3.22.4(@tiptap/pm@3.22.4)
@@ -9050,12 +9050,12 @@ snapshots:
- vue
- yjs
- '@nuxt/vite-builder@4.4.2(4d865828a8a2f3300c67d34de741fd3a)':
+ '@nuxt/vite-builder@4.4.2(40ef2daf26488a39f37e42046efdfe2d)':
dependencies:
'@nuxt/kit': 4.4.2(magicast@0.5.2)
'@rollup/plugin-replace': 6.0.3(rollup@4.60.2)
- '@vitejs/plugin-vue': 6.0.6(rolldown-vite@7.3.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))
- '@vitejs/plugin-vue-jsx': 5.1.5(rolldown-vite@7.3.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))
+ '@vitejs/plugin-vue': 6.0.6(rolldown-vite@7.3.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@22.19.17)(esbuild@0.27.7)(jiti@2.6.1)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))
+ '@vitejs/plugin-vue-jsx': 5.1.5(rolldown-vite@7.3.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@22.19.17)(esbuild@0.27.7)(jiti@2.6.1)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))
autoprefixer: 10.5.0(postcss@8.5.10)
consola: 3.4.2
cssnano: 7.1.7(postcss@8.5.10)
@@ -9068,7 +9068,7 @@ snapshots:
magic-string: 0.30.21
mlly: 1.8.2
mocked-exports: 0.1.1
- nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3)
+ nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@22.19.17)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3)
nypm: 0.6.5
pathe: 2.0.3
pkg-types: 2.3.0
@@ -9077,9 +9077,9 @@ snapshots:
std-env: 4.1.0
ufo: 1.6.3
unenv: 2.0.0-rc.24
- vite: rolldown-vite@7.3.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(terser@5.46.2)(yaml@2.8.3)
- vite-node: 5.3.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(terser@5.46.2)(yaml@2.8.3)
- vite-plugin-checker: 0.12.0(eslint@9.28.0(jiti@2.6.1))(optionator@0.9.4)(rolldown-vite@7.3.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(terser@5.46.2)(yaml@2.8.3))(typescript@6.0.3)(vue-tsc@3.2.7(typescript@6.0.3))
+ vite: rolldown-vite@7.3.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@22.19.17)(esbuild@0.27.7)(jiti@2.6.1)(terser@5.46.2)(yaml@2.8.3)
+ vite-node: 5.3.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@22.19.17)(esbuild@0.27.7)(jiti@2.6.1)(terser@5.46.2)(yaml@2.8.3)
+ vite-plugin-checker: 0.12.0(eslint@9.28.0(jiti@2.6.1))(optionator@0.9.4)(rolldown-vite@7.3.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@22.19.17)(esbuild@0.27.7)(jiti@2.6.1)(terser@5.46.2)(yaml@2.8.3))(typescript@6.0.3)(vue-tsc@3.2.7(typescript@6.0.3))
vue: 3.5.33(typescript@6.0.3)
vue-bundle-renderer: 2.2.0
optionalDependencies:
@@ -9205,15 +9205,15 @@ snapshots:
- magicast
- supports-color
- '@nuxtjs/robots@6.0.8(@nuxt/schema@4.4.2)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3))(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))(zod@4.3.6)':
+ '@nuxtjs/robots@6.0.8(@nuxt/schema@4.4.2)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@22.19.17)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3))(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))(zod@4.3.6)':
dependencies:
'@fingerprintjs/botd': 2.0.0
'@nuxt/kit': 4.4.2(magicast@0.5.2)
consola: 3.4.2
defu: 6.1.7
h3: 1.15.11
- nuxt-site-config: 4.0.8(@nuxt/schema@4.4.2)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3))(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))(zod@4.3.6)
- nuxtseo-shared: 5.1.3(1ea63fa9df7940a4f1f1de81ecc8f7ac)
+ nuxt-site-config: 4.0.8(@nuxt/schema@4.4.2)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@22.19.17)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3))(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))(zod@4.3.6)
+ nuxtseo-shared: 5.1.3(25023e8fc1951fd485d95c7642f63f09)
pathe: 2.0.3
pkg-types: 2.3.0
ufo: 1.6.3
@@ -9226,18 +9226,18 @@ snapshots:
- vite
- vue
- '@nuxtjs/seo@5.1.3(6c26335a1a794c77cd272700d66c77ac)':
+ '@nuxtjs/seo@5.1.3(4647370d33bd5943aead907599700ab7)':
dependencies:
'@nuxt/kit': 4.4.2(magicast@0.5.2)
- '@nuxtjs/robots': 6.0.8(@nuxt/schema@4.4.2)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3))(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))(zod@4.3.6)
- '@nuxtjs/sitemap': 8.0.13(@nuxt/schema@4.4.2)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3))(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))(zod@4.3.6)
- nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3)
- nuxt-link-checker: 5.0.9(400458dca2fcb8943a98fc83f55aa892)
- nuxt-og-image: 6.4.7(5faa756313c8245d53c4b9eebf79d3a4)
- nuxt-schema-org: 6.0.4(6340a28e464382c8e848f01660f1c1b0)
- nuxt-seo-utils: 8.1.11(cf66a2112ebe23c18ee2f687859fb007)
- nuxt-site-config: 4.0.8(@nuxt/schema@4.4.2)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3))(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))(zod@4.3.6)
- nuxtseo-shared: 5.1.3(1ea63fa9df7940a4f1f1de81ecc8f7ac)
+ '@nuxtjs/robots': 6.0.8(@nuxt/schema@4.4.2)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@22.19.17)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3))(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))(zod@4.3.6)
+ '@nuxtjs/sitemap': 8.0.13(@nuxt/schema@4.4.2)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@22.19.17)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3))(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))(zod@4.3.6)
+ nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@22.19.17)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3)
+ nuxt-link-checker: 5.0.9(ad3672cc71ed4fef9dee73a54522c31c)
+ nuxt-og-image: 6.4.7(9fe474218c97b47f30882881f0852e2d)
+ nuxt-schema-org: 6.0.4(d49a319d2e54ee8f7691b4d98b24824b)
+ nuxt-seo-utils: 8.1.11(9275d2bad68344b1070a6ddfde2ef475)
+ nuxt-site-config: 4.0.8(@nuxt/schema@4.4.2)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@22.19.17)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3))(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))(zod@4.3.6)
+ nuxtseo-shared: 5.1.3(25023e8fc1951fd485d95c7642f63f09)
transitivePeerDependencies:
- '@azure/app-configuration'
- '@azure/cosmos'
@@ -9312,14 +9312,14 @@ snapshots:
- yup
- zod
- '@nuxtjs/sitemap@8.0.13(@nuxt/schema@4.4.2)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3))(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))(zod@4.3.6)':
+ '@nuxtjs/sitemap@8.0.13(@nuxt/schema@4.4.2)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@22.19.17)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3))(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))(zod@4.3.6)':
dependencies:
'@nuxt/kit': 4.4.2(magicast@0.5.2)
consola: 3.4.2
defu: 6.1.7
fast-xml-parser: 5.7.1
- nuxt-site-config: 4.0.8(@nuxt/schema@4.4.2)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3))(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))(zod@4.3.6)
- nuxtseo-shared: 5.1.3(1ea63fa9df7940a4f1f1de81ecc8f7ac)
+ nuxt-site-config: 4.0.8(@nuxt/schema@4.4.2)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@22.19.17)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3))(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))(zod@4.3.6)
+ nuxtseo-shared: 5.1.3(25023e8fc1951fd485d95c7642f63f09)
ofetch: 1.5.1
pathe: 2.0.3
pkg-types: 2.3.0
@@ -10254,12 +10254,12 @@ snapshots:
postcss: 8.5.10
tailwindcss: 4.2.4
- '@tailwindcss/vite@4.2.4(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))':
+ '@tailwindcss/vite@4.2.4(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))':
dependencies:
'@tailwindcss/node': 4.2.4
'@tailwindcss/oxide': 4.2.4
tailwindcss: 4.2.4
- vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)
+ vite: 7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)
'@takumi-rs/core-darwin-arm64@1.1.0':
optional: true
@@ -10550,7 +10550,7 @@ snapshots:
dependencies:
'@types/http-cache-semantics': 4.2.0
'@types/keyv': 3.1.4
- '@types/node': 25.6.0
+ '@types/node': 22.19.17
'@types/responselike': 1.0.3
'@types/debug@4.1.13':
@@ -10577,7 +10577,7 @@ snapshots:
'@types/keyv@3.1.4':
dependencies:
- '@types/node': 25.6.0
+ '@types/node': 22.19.17
'@types/lodash-es@4.17.12':
dependencies:
@@ -10591,9 +10591,9 @@ snapshots:
'@types/ms@2.1.0': {}
- '@types/node@25.6.0':
+ '@types/node@22.19.17':
dependencies:
- undici-types: 7.19.2
+ undici-types: 6.21.0
'@types/parse-path@7.1.0':
dependencies:
@@ -10605,7 +10605,7 @@ snapshots:
'@types/responselike@1.0.3':
dependencies:
- '@types/node': 25.6.0
+ '@types/node': 22.19.17
'@types/trusted-types@2.0.7':
optional: true
@@ -10711,9 +10711,9 @@ snapshots:
'@ungap/structured-clone@1.3.0': {}
- '@unhead/bundler@3.0.5(esbuild@0.27.7)(lightningcss@1.32.0)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))':
+ '@unhead/bundler@3.0.5(esbuild@0.27.7)(lightningcss@1.32.0)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(typescript@6.0.3)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))':
dependencies:
- '@vitejs/devtools-kit': 0.1.15(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
+ '@vitejs/devtools-kit': 0.1.15(typescript@6.0.3)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
magic-string: 0.30.21
oxc-parser: 0.127.0
oxc-walker: 0.7.0(oxc-parser@0.127.0)
@@ -10820,12 +10820,12 @@ snapshots:
- rollup
- supports-color
- '@vitejs/devtools-kit@0.1.15(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))':
+ '@vitejs/devtools-kit@0.1.15(typescript@6.0.3)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))':
dependencies:
'@vitejs/devtools-rpc': 0.1.15(typescript@6.0.3)
birpc: 4.0.0
ohash: 2.0.11
- vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)
+ vite: 7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)
transitivePeerDependencies:
- bufferutil
- typescript
@@ -10845,22 +10845,22 @@ snapshots:
- typescript
- utf-8-validate
- '@vitejs/plugin-vue-jsx@5.1.5(rolldown-vite@7.3.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))':
+ '@vitejs/plugin-vue-jsx@5.1.5(rolldown-vite@7.3.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@22.19.17)(esbuild@0.27.7)(jiti@2.6.1)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))':
dependencies:
'@babel/core': 7.29.0
'@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0)
'@babel/plugin-transform-typescript': 7.28.6(@babel/core@7.29.0)
'@rolldown/pluginutils': 1.0.0-rc.17
'@vue/babel-plugin-jsx': 2.0.1(@babel/core@7.29.0)
- vite: rolldown-vite@7.3.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(terser@5.46.2)(yaml@2.8.3)
+ vite: rolldown-vite@7.3.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@22.19.17)(esbuild@0.27.7)(jiti@2.6.1)(terser@5.46.2)(yaml@2.8.3)
vue: 3.5.33(typescript@6.0.3)
transitivePeerDependencies:
- supports-color
- '@vitejs/plugin-vue@6.0.6(rolldown-vite@7.3.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))':
+ '@vitejs/plugin-vue@6.0.6(rolldown-vite@7.3.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@22.19.17)(esbuild@0.27.7)(jiti@2.6.1)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))':
dependencies:
'@rolldown/pluginutils': 1.0.0-rc.13
- vite: rolldown-vite@7.3.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(terser@5.46.2)(yaml@2.8.3)
+ vite: rolldown-vite@7.3.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@22.19.17)(esbuild@0.27.7)(jiti@2.6.1)(terser@5.46.2)(yaml@2.8.3)
vue: 3.5.33(typescript@6.0.3)
'@volar/language-core@2.4.28':
@@ -11029,13 +11029,13 @@ snapshots:
'@vueuse/metadata@14.2.1': {}
- '@vueuse/nuxt@14.2.1(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))':
+ '@vueuse/nuxt@14.2.1(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@22.19.17)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))':
dependencies:
'@nuxt/kit': 4.4.2(magicast@0.5.2)
'@vueuse/core': 14.2.1(vue@3.5.33(typescript@6.0.3))
'@vueuse/metadata': 14.2.1
local-pkg: 1.1.2
- nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3)
+ nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@22.19.17)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3)
vue: 3.5.33(typescript@6.0.3)
transitivePeerDependencies:
- magicast
@@ -11461,7 +11461,7 @@ snapshots:
chrome-launcher@1.2.1:
dependencies:
- '@types/node': 25.6.0
+ '@types/node': 22.19.17
escape-string-regexp: 4.0.0
is-wsl: 2.2.0
lighthouse-logger: 2.0.2
@@ -12280,7 +12280,7 @@ snapshots:
dependencies:
tiny-inflate: 1.0.3
- fontless@0.2.1(@netlify/blobs@9.1.2)(db0@0.3.4(better-sqlite3@11.10.0))(ioredis@5.10.1)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)):
+ fontless@0.2.1(@netlify/blobs@9.1.2)(db0@0.3.4(better-sqlite3@11.10.0))(ioredis@5.10.1)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)):
dependencies:
consola: 3.4.2
css-tree: 3.2.1
@@ -12296,7 +12296,7 @@ snapshots:
unifont: 0.7.4
unstorage: 1.17.5(@netlify/blobs@9.1.2)(db0@0.3.4(better-sqlite3@11.10.0))(ioredis@5.10.1)
optionalDependencies:
- vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)
+ vite: 7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)
transitivePeerDependencies:
- '@azure/app-configuration'
- '@azure/cosmos'
@@ -13756,7 +13756,7 @@ snapshots:
transitivePeerDependencies:
- magicast
- nuxt-link-checker@5.0.9(400458dca2fcb8943a98fc83f55aa892):
+ nuxt-link-checker@5.0.9(ad3672cc71ed4fef9dee73a54522c31c):
dependencies:
'@nuxt/kit': 4.4.2(magicast@0.5.2)
'@vueuse/core': 14.2.1(vue@3.5.33(typescript@6.0.3))
@@ -13764,9 +13764,9 @@ snapshots:
diff: 8.0.4
fuse.js: 7.3.0
magic-string: 0.30.21
- nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3)
- nuxt-site-config: 4.0.8(@nuxt/schema@4.4.2)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3))(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))(zod@4.3.6)
- nuxtseo-shared: 5.1.3(1ea63fa9df7940a4f1f1de81ecc8f7ac)
+ nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@22.19.17)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3)
+ nuxt-site-config: 4.0.8(@nuxt/schema@4.4.2)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@22.19.17)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3))(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))(zod@4.3.6)
+ nuxtseo-shared: 5.1.3(25023e8fc1951fd485d95c7642f63f09)
ofetch: 1.5.1
pathe: 2.0.3
pkg-types: 2.3.0
@@ -13806,7 +13806,7 @@ snapshots:
transitivePeerDependencies:
- magicast
- nuxt-og-image@6.4.7(5faa756313c8245d53c4b9eebf79d3a4):
+ nuxt-og-image@6.4.7(9fe474218c97b47f30882881f0852e2d):
dependencies:
'@clack/prompts': 1.2.0
'@nuxt/kit': 4.4.2(magicast@0.5.2)
@@ -13822,8 +13822,8 @@ snapshots:
magic-string: 0.30.21
magicast: 0.5.2
mocked-exports: 0.1.1
- nuxt-site-config: 4.0.8(@nuxt/schema@4.4.2)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3))(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))(zod@4.3.6)
- nuxtseo-shared: 5.1.3(1ea63fa9df7940a4f1f1de81ecc8f7ac)
+ nuxt-site-config: 4.0.8(@nuxt/schema@4.4.2)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@22.19.17)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3))(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))(zod@4.3.6)
+ nuxtseo-shared: 5.1.3(25023e8fc1951fd485d95c7642f63f09)
nypm: 0.6.5
ofetch: 1.5.1
ohash: 2.0.11
@@ -13844,7 +13844,7 @@ snapshots:
'@resvg/resvg-js': 2.6.2
'@resvg/resvg-wasm': 2.6.2
'@takumi-rs/core': 1.1.0
- fontless: 0.2.1(@netlify/blobs@9.1.2)(db0@0.3.4(better-sqlite3@11.10.0))(ioredis@5.10.1)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
+ fontless: 0.2.1(@netlify/blobs@9.1.2)(db0@0.3.4(better-sqlite3@11.10.0))(ioredis@5.10.1)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
playwright-core: 1.58.2
sharp: 0.34.5
tailwindcss: 4.2.4
@@ -13857,14 +13857,14 @@ snapshots:
- vue
- zod
- nuxt-schema-org@6.0.4(6340a28e464382c8e848f01660f1c1b0):
+ nuxt-schema-org@6.0.4(d49a319d2e54ee8f7691b4d98b24824b):
dependencies:
'@nuxt/kit': 4.4.2(magicast@0.5.2)
'@unhead/schema-org': 2.1.13(@unhead/vue@2.1.13(vue@3.5.33(typescript@6.0.3)))
defu: 6.1.7
- nuxt-site-config: 4.0.8(@nuxt/schema@4.4.2)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3))(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))(zod@4.3.6)
- nuxtseo-layer-devtools: 0.5.1(fedd14e568760e80f869e92ae51165ee)
- nuxtseo-shared: 0.9.0(1ea63fa9df7940a4f1f1de81ecc8f7ac)
+ nuxt-site-config: 4.0.8(@nuxt/schema@4.4.2)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@22.19.17)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3))(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))(zod@4.3.6)
+ nuxtseo-layer-devtools: 0.5.1(cfaa4fba2806ba2371a648f1cb68ae6a)
+ nuxtseo-shared: 0.9.0(25023e8fc1951fd485d95c7642f63f09)
pkg-types: 2.3.0
optionalDependencies:
'@unhead/vue': 2.1.13(vue@3.5.33(typescript@6.0.3))
@@ -13925,18 +13925,18 @@ snapshots:
- yjs
- yup
- nuxt-seo-utils@8.1.11(cf66a2112ebe23c18ee2f687859fb007):
+ nuxt-seo-utils@8.1.11(9275d2bad68344b1070a6ddfde2ef475):
dependencies:
'@nuxt/kit': 4.4.2(magicast@0.5.2)
- '@unhead/bundler': 3.0.5(esbuild@0.27.7)(lightningcss@1.32.0)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
+ '@unhead/bundler': 3.0.5(esbuild@0.27.7)(lightningcss@1.32.0)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(typescript@6.0.3)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
citty: 0.2.2
defu: 6.1.7
escape-string-regexp: 5.0.0
exsolve: 1.0.8
image-size: 2.0.2
- nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3)
- nuxt-site-config: 4.0.8(@nuxt/schema@4.4.2)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3))(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))(zod@4.3.6)
- nuxtseo-shared: 5.1.3(1ea63fa9df7940a4f1f1de81ecc8f7ac)
+ nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@22.19.17)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3)
+ nuxt-site-config: 4.0.8(@nuxt/schema@4.4.2)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@22.19.17)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3))(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))(zod@4.3.6)
+ nuxtseo-shared: 5.1.3(25023e8fc1951fd485d95c7642f63f09)
pathe: 2.0.3
pkg-types: 2.3.0
scule: 1.3.0
@@ -13968,12 +13968,12 @@ snapshots:
- magicast
- vue
- nuxt-site-config@4.0.8(@nuxt/schema@4.4.2)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3))(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))(zod@4.3.6):
+ nuxt-site-config@4.0.8(@nuxt/schema@4.4.2)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@22.19.17)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3))(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))(zod@4.3.6):
dependencies:
'@nuxt/kit': 4.4.2(magicast@0.5.2)
h3: 1.15.11
nuxt-site-config-kit: 4.0.8(magicast@0.5.2)(vue@3.5.33(typescript@6.0.3))
- nuxtseo-shared: 5.1.3(1ea63fa9df7940a4f1f1de81ecc8f7ac)
+ nuxtseo-shared: 5.1.3(25023e8fc1951fd485d95c7642f63f09)
pathe: 2.0.3
pkg-types: 2.3.0
site-config-stack: 4.0.8(vue@3.5.33(typescript@6.0.3))
@@ -13986,16 +13986,16 @@ snapshots:
- vue
- zod
- nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3):
+ nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@22.19.17)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3):
dependencies:
'@dxup/nuxt': 0.4.1(magicast@0.5.2)(typescript@6.0.3)
'@nuxt/cli': 3.34.0(@nuxt/schema@4.4.2)(cac@6.7.14)(magicast@0.5.2)
- '@nuxt/devtools': 3.2.4(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))
+ '@nuxt/devtools': 3.2.4(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))
'@nuxt/kit': 4.4.2(magicast@0.5.2)
- '@nuxt/nitro-server': 4.4.2(2426d09d816dd853d95ec6447c6869f4)
+ '@nuxt/nitro-server': 4.4.2(b200ed249053ecb3871c92755e06a756)
'@nuxt/schema': 4.4.2
'@nuxt/telemetry': 2.8.0(@nuxt/kit@4.4.2(magicast@0.5.2))
- '@nuxt/vite-builder': 4.4.2(4d865828a8a2f3300c67d34de741fd3a)
+ '@nuxt/vite-builder': 4.4.2(40ef2daf26488a39f37e42046efdfe2d)
'@unhead/vue': 2.1.13(vue@3.5.33(typescript@6.0.3))
'@vue/shared': 3.5.33
c12: 3.3.4(magicast@0.5.2)
@@ -14046,7 +14046,7 @@ snapshots:
vue-router: 5.0.6(@vue/compiler-sfc@3.5.33)(vue@3.5.33(typescript@6.0.3))
optionalDependencies:
'@parcel/watcher': 2.5.6
- '@types/node': 25.6.0
+ '@types/node': 22.19.17
transitivePeerDependencies:
- '@azure/app-configuration'
- '@azure/cosmos'
@@ -14119,15 +14119,15 @@ snapshots:
- xml2js
- yaml
- nuxtseo-layer-devtools@0.5.1(fedd14e568760e80f869e92ae51165ee):
+ nuxtseo-layer-devtools@0.5.1(cfaa4fba2806ba2371a648f1cb68ae6a):
dependencies:
- '@nuxt/devtools-kit': 4.0.0-alpha.3(magicast@0.5.2)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
+ '@nuxt/devtools-kit': 4.0.0-alpha.3(magicast@0.5.2)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
'@nuxt/kit': 4.4.2(magicast@0.5.2)
- '@nuxt/ui': 4.6.1(@netlify/blobs@9.1.2)(@nuxt/content@3.13.0(better-sqlite3@11.10.0)(magicast@0.5.2)(valibot@1.3.1(typescript@6.0.3)))(@tiptap/extensions@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4))(@tiptap/y-tiptap@3.0.3(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.8)(y-protocols@1.0.7(yjs@13.6.30))(yjs@13.6.30))(axios@1.13.5)(change-case@5.4.4)(db0@0.3.4(better-sqlite3@11.10.0))(embla-carousel@8.6.0)(ioredis@5.10.1)(jwt-decode@4.0.0)(magicast@0.5.2)(tailwindcss@4.2.4)(typescript@6.0.3)(valibot@1.3.1(typescript@6.0.3))(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-router@5.0.6(@vue/compiler-sfc@3.5.33)(vue@3.5.33(typescript@6.0.3)))(vue@3.5.33(typescript@6.0.3))(yjs@13.6.30)(zod@4.3.6)
+ '@nuxt/ui': 4.6.1(@netlify/blobs@9.1.2)(@nuxt/content@3.13.0(better-sqlite3@11.10.0)(magicast@0.5.2)(valibot@1.3.1(typescript@6.0.3)))(@tiptap/extensions@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4))(@tiptap/y-tiptap@3.0.3(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.8)(y-protocols@1.0.7(yjs@13.6.30))(yjs@13.6.30))(axios@1.13.5)(change-case@5.4.4)(db0@0.3.4(better-sqlite3@11.10.0))(embla-carousel@8.6.0)(ioredis@5.10.1)(jwt-decode@4.0.0)(magicast@0.5.2)(tailwindcss@4.2.4)(typescript@6.0.3)(valibot@1.3.1(typescript@6.0.3))(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-router@5.0.6(@vue/compiler-sfc@3.5.33)(vue@3.5.33(typescript@6.0.3)))(vue@3.5.33(typescript@6.0.3))(yjs@13.6.30)(zod@4.3.6)
'@shikijs/langs': 4.0.2
'@shikijs/themes': 4.0.2
- '@vueuse/nuxt': 14.2.1(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))
- nuxtseo-shared: 0.9.0(1ea63fa9df7940a4f1f1de81ecc8f7ac)
+ '@vueuse/nuxt': 14.2.1(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@22.19.17)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))
+ nuxtseo-shared: 0.9.0(25023e8fc1951fd485d95c7642f63f09)
ofetch: 1.5.1
shiki: 4.0.2
ufo: 1.6.3
@@ -14186,16 +14186,16 @@ snapshots:
- yup
- zod
- nuxtseo-shared@0.9.0(1ea63fa9df7940a4f1f1de81ecc8f7ac):
+ nuxtseo-shared@0.9.0(25023e8fc1951fd485d95c7642f63f09):
dependencies:
'@clack/prompts': 1.2.0
- '@nuxt/devtools-kit': 4.0.0-alpha.3(magicast@0.5.2)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
+ '@nuxt/devtools-kit': 4.0.0-alpha.3(magicast@0.5.2)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
'@nuxt/kit': 4.4.2(magicast@0.5.2)
'@nuxt/schema': 4.4.2
birpc: 4.0.0
consola: 3.4.2
defu: 6.1.7
- nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3)
+ nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@22.19.17)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3)
ofetch: 1.5.1
pathe: 2.0.3
pkg-types: 2.3.0
@@ -14205,22 +14205,22 @@ snapshots:
ufo: 1.6.3
vue: 3.5.33(typescript@6.0.3)
optionalDependencies:
- nuxt-site-config: 4.0.8(@nuxt/schema@4.4.2)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3))(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))(zod@4.3.6)
+ nuxt-site-config: 4.0.8(@nuxt/schema@4.4.2)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@22.19.17)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3))(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))(zod@4.3.6)
zod: 4.3.6
transitivePeerDependencies:
- magicast
- vite
- nuxtseo-shared@5.1.3(1ea63fa9df7940a4f1f1de81ecc8f7ac):
+ nuxtseo-shared@5.1.3(25023e8fc1951fd485d95c7642f63f09):
dependencies:
'@clack/prompts': 1.2.0
- '@nuxt/devtools-kit': 4.0.0-alpha.3(magicast@0.5.2)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
+ '@nuxt/devtools-kit': 4.0.0-alpha.3(magicast@0.5.2)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
'@nuxt/kit': 4.4.2(magicast@0.5.2)
'@nuxt/schema': 4.4.2
birpc: 4.0.0
consola: 3.4.2
defu: 6.1.7
- nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3)
+ nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@22.19.17)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3)
ofetch: 1.5.1
pathe: 2.0.3
pkg-types: 2.3.0
@@ -14230,7 +14230,7 @@ snapshots:
ufo: 1.6.3
vue: 3.5.33(typescript@6.0.3)
optionalDependencies:
- nuxt-site-config: 4.0.8(@nuxt/schema@4.4.2)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3))(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))(zod@4.3.6)
+ nuxt-site-config: 4.0.8(@nuxt/schema@4.4.2)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@22.19.17)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3))(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))(zod@4.3.6)
zod: 4.3.6
transitivePeerDependencies:
- magicast
@@ -14886,7 +14886,7 @@ snapshots:
'@protobufjs/path': 1.1.2
'@protobufjs/pool': 1.1.0
'@protobufjs/utf8': 1.1.0
- '@types/node': 25.6.0
+ '@types/node': 22.19.17
long: 5.3.2
protocols@2.0.2: {}
@@ -15167,7 +15167,7 @@ snapshots:
reusify@1.1.0: {}
- rolldown-vite@7.3.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(terser@5.46.2)(yaml@2.8.3):
+ rolldown-vite@7.3.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@22.19.17)(esbuild@0.27.7)(jiti@2.6.1)(terser@5.46.2)(yaml@2.8.3):
dependencies:
'@oxc-project/runtime': 0.101.0
fdir: 6.5.0(picomatch@4.0.4)
@@ -15177,7 +15177,7 @@ snapshots:
rolldown: 1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)
tinyglobby: 0.2.16
optionalDependencies:
- '@types/node': 25.6.0
+ '@types/node': 22.19.17
esbuild: 0.27.7
fsevents: 2.3.3
jiti: 2.6.1
@@ -15766,7 +15766,7 @@ snapshots:
magic-string: 0.30.21
unplugin: 2.3.11
- undici-types@7.19.2: {}
+ undici-types@6.21.0: {}
unenv@2.0.0-rc.24:
dependencies:
@@ -16026,23 +16026,23 @@ snapshots:
'@types/unist': 3.0.3
vfile-message: 4.0.3
- vite-dev-rpc@1.1.0(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)):
+ vite-dev-rpc@1.1.0(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)):
dependencies:
birpc: 2.9.0
- vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)
- vite-hot-client: 2.1.0(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
+ vite: 7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)
+ vite-hot-client: 2.1.0(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
- vite-hot-client@2.1.0(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)):
+ vite-hot-client@2.1.0(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)):
dependencies:
- vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)
+ vite: 7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)
- vite-node@5.3.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(terser@5.46.2)(yaml@2.8.3):
+ vite-node@5.3.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@22.19.17)(esbuild@0.27.7)(jiti@2.6.1)(terser@5.46.2)(yaml@2.8.3):
dependencies:
cac: 6.7.14
es-module-lexer: 2.0.0
obug: 2.1.1
pathe: 2.0.3
- vite: rolldown-vite@7.3.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(terser@5.46.2)(yaml@2.8.3)
+ vite: rolldown-vite@7.3.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@22.19.17)(esbuild@0.27.7)(jiti@2.6.1)(terser@5.46.2)(yaml@2.8.3)
transitivePeerDependencies:
- '@emnapi/core'
- '@emnapi/runtime'
@@ -16058,7 +16058,7 @@ snapshots:
- tsx
- yaml
- vite-plugin-checker@0.12.0(eslint@9.28.0(jiti@2.6.1))(optionator@0.9.4)(rolldown-vite@7.3.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(terser@5.46.2)(yaml@2.8.3))(typescript@6.0.3)(vue-tsc@3.2.7(typescript@6.0.3)):
+ vite-plugin-checker@0.12.0(eslint@9.28.0(jiti@2.6.1))(optionator@0.9.4)(rolldown-vite@7.3.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@22.19.17)(esbuild@0.27.7)(jiti@2.6.1)(terser@5.46.2)(yaml@2.8.3))(typescript@6.0.3)(vue-tsc@3.2.7(typescript@6.0.3)):
dependencies:
'@babel/code-frame': 7.29.0
chokidar: 4.0.3
@@ -16067,7 +16067,7 @@ snapshots:
picomatch: 4.0.4
tiny-invariant: 1.3.3
tinyglobby: 0.2.16
- vite: rolldown-vite@7.3.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.6.1)(terser@5.46.2)(yaml@2.8.3)
+ vite: rolldown-vite@7.3.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@22.19.17)(esbuild@0.27.7)(jiti@2.6.1)(terser@5.46.2)(yaml@2.8.3)
vscode-uri: 3.1.0
optionalDependencies:
eslint: 9.28.0(jiti@2.6.1)
@@ -16075,7 +16075,7 @@ snapshots:
typescript: 6.0.3
vue-tsc: 3.2.7(typescript@6.0.3)
- vite-plugin-inspect@11.3.3(@nuxt/kit@4.4.2(magicast@0.5.2))(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)):
+ vite-plugin-inspect@11.3.3(@nuxt/kit@4.4.2(magicast@0.5.2))(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)):
dependencies:
ansis: 4.2.0
debug: 4.4.1
@@ -16085,24 +16085,24 @@ snapshots:
perfect-debounce: 2.1.0
sirv: 3.0.2
unplugin-utils: 0.3.1
- vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)
- vite-dev-rpc: 1.1.0(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
+ vite: 7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)
+ vite-dev-rpc: 1.1.0(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
optionalDependencies:
'@nuxt/kit': 4.4.2(magicast@0.5.2)
transitivePeerDependencies:
- supports-color
- vite-plugin-vue-tracer@1.3.0(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3)):
+ vite-plugin-vue-tracer@1.3.0(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3)):
dependencies:
estree-walker: 3.0.3
exsolve: 1.0.8
magic-string: 0.30.21
pathe: 2.0.3
source-map-js: 1.2.1
- vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)
+ vite: 7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)
vue: 3.5.33(typescript@6.0.3)
- vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3):
+ vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3):
dependencies:
esbuild: 0.27.7
fdir: 6.5.0(picomatch@4.0.4)
@@ -16111,7 +16111,7 @@ snapshots:
rollup: 4.60.2
tinyglobby: 0.2.16
optionalDependencies:
- '@types/node': 25.6.0
+ '@types/node': 22.19.17
fsevents: 2.3.3
jiti: 2.6.1
lightningcss: 1.32.0
diff --git a/scripts/ensure-stable-ids.ts b/scripts/ensure-stable-ids.ts
index 7345355e7..0489aed4e 100755
--- a/scripts/ensure-stable-ids.ts
+++ b/scripts/ensure-stable-ids.ts
@@ -136,7 +136,7 @@ function main(): void {
for (const file of partialStageConflicts) {
console.error(`- ${file}`);
}
- console.error('\nRun `pnpm stable-ids:ensure` first, or fully stage those files before committing.');
+ console.error('\nFully stage these files, or unstage and split your commit.');
process.exit(1);
}
}
diff --git a/scripts/redirects-sync.ts b/scripts/redirects-sync.ts
index db4e95964..20687c7d7 100755
--- a/scripts/redirects-sync.ts
+++ b/scripts/redirects-sync.ts
@@ -165,11 +165,7 @@ function stripNumericPrefix(segment: string): string {
* Redirect continuity must follow Nuxt's public route semantics, not raw filesystem
* paths. In particular, numeric ordering prefixes affect nav order but not URL shape.
*/
-function buildPublicPath(file: string, frontmatter: Record = {}): string {
- if (typeof frontmatter.path === 'string' && frontmatter.path.trim()) {
- return normalizePublicPath(frontmatter.path.trim());
- }
-
+function buildPublicPath(file: string): string {
const relative = file.replace(/^content\//, '');
const parts = relative.split('/');
const fileName = parts.pop()!;
@@ -192,7 +188,7 @@ function normalizePublicPath(routePath: string): string {
function toSnapshotItem(file: string, source: string): SnapshotItem {
const frontmatter = parseFrontmatter(source);
return {
- path: buildPublicPath(file, frontmatter),
+ path: buildPublicPath(file),
sourceFile: file,
title: typeof frontmatter.title === 'string' ? frontmatter.title : undefined,
stableId: typeof frontmatter.stableId === 'string' ? frontmatter.stableId : undefined,
diff --git a/scripts/setup-hooks.ts b/scripts/setup-hooks.ts
index 4d9cf9628..4757314c9 100755
--- a/scripts/setup-hooks.ts
+++ b/scripts/setup-hooks.ts
@@ -17,6 +17,19 @@ if (!fs.existsSync('.githooks')) {
process.exit(0);
}
+let currentHooksPath = '';
+try {
+ currentHooksPath = execFileSync('git', ['config', '--get', 'core.hooksPath'], { encoding: 'utf8' }).trim();
+}
+catch {
+ // No local hooks path is configured.
+}
+
+if (currentHooksPath && currentHooksPath !== '.githooks') {
+ console.error(`warning: core.hooksPath is already set to ${currentHooksPath}; hooks were not configured`);
+ process.exit(0);
+}
+
try {
execFileSync('git', ['config', 'core.hooksPath', '.githooks'], { stdio: 'ignore' });
}
From c8949ec68c50f9c3938a229f4422c217ee765cab Mon Sep 17 00:00:00 2001
From: bryantgillespie
Date: Tue, 28 Apr 2026 08:45:02 -0400
Subject: [PATCH 11/45] Update README.md
---
README.md | 16 +++++++++++++++-
1 file changed, 15 insertions(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 646530f96..6b1bb7081 100644
--- a/README.md
+++ b/README.md
@@ -13,7 +13,7 @@ Welcome! This is the repo for [Directus' documentation](https://docs.directus.io
### Requirements
-- Node.js 22
+- Node.js 22.18 or later
- pnpm
### Install Dependencies
@@ -47,6 +47,20 @@ pnpm dev
pnpm build
```
+### Repository Tooling
+
+The repository includes scripts that keep docs routes stable when files move.
+
+```bash
+pnpm stable-ids:ensure # Add missing stableId frontmatter
+pnpm stable-ids:check # Validate stableId frontmatter
+pnpm redirects:sync # Update redirects.json for moved pages
+pnpm redirects:check # Check redirect coverage without writing files
+pnpm typecheck:scripts # Type check repository scripts
+```
+
+`pnpm install` configures `.githooks` for the repository when no custom `core.hooksPath` is set. The pre-commit hook can add missing `stableId` values to staged docs files. The pre-push hook checks redirects when docs content, redirect configuration, or content configuration changes.
+
## ☁️ Deploying the Docs
The documentation automatically deploys to Vercel when changes are merged into the main branch. Simply:
From 4e55dfb61433bf371643e2f24a6e040837f84555 Mon Sep 17 00:00:00 2001
From: bryantgillespie
Date: Tue, 28 Apr 2026 08:47:28 -0400
Subject: [PATCH 12/45] backfill all ids
---
content/api/index.md | 1 +
content/cloud/1.getting-started/1.introduction.md | 1 +
content/cloud/1.getting-started/2.teams.md | 1 +
content/cloud/1.getting-started/3.accounts.md | 1 +
content/cloud/2.projects/1.create.md | 1 +
content/cloud/2.projects/2.destroy.md | 1 +
content/cloud/2.projects/3.version-upgrades.md | 1 +
content/cloud/2.projects/4.monitoring.md | 1 +
content/cloud/2.projects/5.backups.md | 1 +
content/cloud/3.configuration/1.custom-domains.md | 1 +
content/cloud/3.configuration/2.environment-variables.md | 1 +
content/cloud/3.configuration/3.direct-database-access.md | 1 +
content/cloud/3.configuration/4.custom-extensions.md | 1 +
content/cloud/3.configuration/5.datacenter-regions.md | 1 +
content/cloud/4.billing/1.manage-billing.md | 1 +
content/cloud/4.billing/2.changing-tier.md | 1 +
content/cloud/4.billing/3.cancel-subscription.md | 1 +
content/community/1.overview/1.welcome.md | 1 +
content/community/1.overview/2.conduct.md | 1 +
content/community/1.overview/3.moderation.md | 1 +
content/community/2.contribution/1.translations.md | 1 +
content/community/2.contribution/2.documentation.md | 1 +
content/community/2.contribution/3.feature-requests.md | 1 +
content/community/2.contribution/4.pull-requests.md | 1 +
content/community/3.codebase/1.overview.md | 1 +
content/community/3.codebase/2.dev-environment.md | 1 +
content/community/3.codebase/3.testing.md | 1 +
.../community/4.reporting-and-support/1.troubleshooting-steps.md | 1 +
content/community/4.reporting-and-support/2.bug-reporting.md | 1 +
.../community/4.reporting-and-support/3.security-reporting.md | 1 +
content/community/4.reporting-and-support/4.customer-support.md | 1 +
content/community/5.programs/1.guest-authors.md | 1 +
content/community/5.programs/2.directus-labs.md | 1 +
content/configuration/0.intro.md | 1 +
content/configuration/1.general.md | 1 +
content/configuration/ai.md | 1 +
content/configuration/auth-sso.md | 1 +
content/configuration/cache.md | 1 +
content/configuration/database.md | 1 +
content/configuration/email.md | 1 +
content/configuration/extensions.md | 1 +
content/configuration/files.md | 1 +
content/configuration/flows.md | 1 +
content/configuration/logging.md | 1 +
content/configuration/metrics.md | 1 +
content/configuration/migrations.md | 1 +
content/configuration/pm2.md | 1 +
content/configuration/realtime.md | 1 +
content/configuration/security-limits.md | 1 +
content/configuration/synchronization.md | 1 +
content/configuration/theming.md | 1 +
content/configuration/translations.md | 1 +
content/getting-started/1.overview.md | 1 +
content/getting-started/10.accessibility.md | 1 +
content/getting-started/2.create-a-project.md | 1 +
content/getting-started/3.data-model.md | 1 +
content/getting-started/4.use-the-api.md | 1 +
content/getting-started/5.authenticate-user.md | 1 +
content/getting-started/6.upload-files.md | 1 +
content/getting-started/7.create-an-automation.md | 1 +
content/getting-started/8.connect-to-realtime.md | 1 +
content/getting-started/9.resources.md | 1 +
content/guides/01.data-model/1.collections.md | 1 +
content/guides/01.data-model/2.fields.md | 1 +
content/guides/01.data-model/3.interfaces.md | 1 +
content/guides/01.data-model/4.relationships.md | 1 +
content/guides/02.content/1.explore.md | 1 +
content/guides/02.content/2.editor.md | 1 +
content/guides/02.content/3.layouts.md | 1 +
content/guides/02.content/4.import-export.md | 1 +
content/guides/02.content/5.live-preview.md | 1 +
content/guides/02.content/6.content-versioning.md | 1 +
content/guides/02.content/7.translations.md | 1 +
content/guides/02.content/8.visual-editor/0.index.md | 1 +
content/guides/02.content/8.visual-editor/1.frontend-library.md | 1 +
content/guides/02.content/8.visual-editor/2.studio-module.md | 1 +
content/guides/02.content/8.visual-editor/3.customization.md | 1 +
content/guides/02.content/9.collaborative-editing/0.index.md | 1 +
.../guides/02.content/9.collaborative-editing/1.configuration.md | 1 +
content/guides/02.content/9.collaborative-editing/2.usage.md | 1 +
.../guides/02.content/9.collaborative-editing/3.development.md | 1 +
content/guides/03.auth/1.tokens-cookies.md | 1 +
content/guides/03.auth/2.access-control.md | 1 +
content/guides/03.auth/3.creating-users.md | 1 +
content/guides/03.auth/4.email-login.md | 1 +
content/guides/03.auth/5.2fa.md | 1 +
content/guides/03.auth/6.accountability.md | 1 +
content/guides/03.auth/7.sso/1.index.md | 1 +
content/guides/03.auth/7.sso/2.seamless.md | 1 +
content/guides/04.connect/1.authentication.md | 1 +
content/guides/04.connect/2.filter-rules.md | 1 +
content/guides/04.connect/3.query-parameters.md | 1 +
content/guides/04.connect/4.relations.md | 1 +
content/guides/04.connect/5.errors.md | 1 +
content/guides/04.connect/6.sdk.md | 1 +
content/guides/05.files/1.upload.md | 1 +
content/guides/05.files/2.download.md | 1 +
content/guides/05.files/3.manage.md | 1 +
content/guides/05.files/4.access.md | 1 +
content/guides/05.files/5.transform.md | 1 +
content/guides/06.automate/1.flows.md | 1 +
content/guides/06.automate/2.data-chain.md | 1 +
content/guides/06.automate/3.triggers.md | 1 +
content/guides/06.automate/4.operations.md | 1 +
content/guides/07.realtime/1.authentication.md | 1 +
content/guides/07.realtime/2.subscriptions.md | 1 +
content/guides/07.realtime/3.actions.md | 1 +
content/guides/07.realtime/4.custom-handlers.md | 1 +
content/guides/08.insights/1.overview.md | 1 +
content/guides/08.insights/2.panels.md | 1 +
content/guides/09.extensions/0.overview.md | 1 +
content/guides/09.extensions/1.quickstart.md | 1 +
content/guides/09.extensions/2.api-extensions/0.index.md | 1 +
content/guides/09.extensions/2.api-extensions/1.hooks.md | 1 +
content/guides/09.extensions/2.api-extensions/2.endpoints.md | 1 +
content/guides/09.extensions/2.api-extensions/3.operations.md | 1 +
content/guides/09.extensions/2.api-extensions/4.services.md | 1 +
content/guides/09.extensions/2.api-extensions/5.sandbox.md | 1 +
content/guides/09.extensions/3.app-extensions/0.index.md | 1 +
content/guides/09.extensions/3.app-extensions/1.interfaces.md | 1 +
content/guides/09.extensions/3.app-extensions/2.displays.md | 1 +
content/guides/09.extensions/3.app-extensions/3.layouts.md | 1 +
content/guides/09.extensions/3.app-extensions/4.panels.md | 1 +
content/guides/09.extensions/3.app-extensions/5.modules.md | 1 +
content/guides/09.extensions/3.app-extensions/6.themes.md | 1 +
content/guides/09.extensions/3.app-extensions/7.ui-library.md | 1 +
content/guides/09.extensions/3.app-extensions/8.composables.md | 1 +
content/guides/09.extensions/4.bundles.md | 1 +
content/guides/09.extensions/5.marketplace/0.index.md | 1 +
content/guides/09.extensions/5.marketplace/1.publishing.md | 1 +
content/guides/09.extensions/6.cli.md | 1 +
content/guides/10.deployments/0.index.md | 1 +
content/guides/10.deployments/1.security.md | 1 +
content/guides/11.ai/0.index.md | 1 +
content/guides/11.ai/1.assistant/0.index.md | 1 +
content/guides/11.ai/1.assistant/1.setup.md | 1 +
content/guides/11.ai/1.assistant/2.usage.md | 1 +
content/guides/11.ai/1.assistant/3.tools.md | 1 +
content/guides/11.ai/1.assistant/4.tips.md | 1 +
content/guides/11.ai/1.assistant/5.security.md | 1 +
content/guides/11.ai/2.mcp/0.index.md | 1 +
content/guides/11.ai/2.mcp/1.installation.md | 1 +
content/guides/11.ai/2.mcp/2.use-cases.md | 1 +
content/guides/11.ai/2.mcp/3.tools.md | 1 +
content/guides/11.ai/2.mcp/4.prompts.md | 1 +
content/guides/11.ai/2.mcp/5.troubleshooting.md | 1 +
content/guides/11.ai/2.mcp/6.security.md | 1 +
content/guides/11.ai/2.mcp/7.local-mcp/0.index.md | 1 +
content/guides/11.ai/2.mcp/7.local-mcp/1.tools.md | 1 +
content/guides/11.ai/2.mcp/7.local-mcp/2.prompts.md | 1 +
content/guides/11.integrations/6.framer/0.index.md | 1 +
content/guides/12.integrations/1.n8n/0.index.md | 1 +
content/guides/12.integrations/1.n8n/directus-n8n-actions.md | 1 +
content/guides/12.integrations/1.n8n/directus-n8n-advanced.md | 1 +
content/guides/12.integrations/1.n8n/directus-n8n-triggers.md | 1 +
content/guides/12.integrations/2.clay/0.index.md | 1 +
.../12.integrations/2.clay/directus-clay-data-operations.md | 1 +
.../12.integrations/2.clay/use-clay-templates-with-directus.md | 1 +
.../12.integrations/2.clay/use-directus-webhooks-with-clay.md | 1 +
content/guides/12.integrations/3.zapier/0.index.md | 1 +
content/guides/12.integrations/3.zapier/actions.md | 1 +
content/guides/12.integrations/3.zapier/advanced.md | 1 +
content/guides/12.integrations/3.zapier/triggers.md | 1 +
content/guides/12.integrations/4.vercel/0.index.md | 1 +
content/guides/12.integrations/4.vercel/deployments.md | 1 +
content/guides/12.integrations/5.netlify/0.index.md | 1 +
content/guides/12.integrations/5.netlify/deployments.md | 1 +
content/guides/12.integrations/index.md | 1 +
content/guides/13.security/1.best-practices.md | 1 +
content/releases/1.index.md | 1 +
content/releases/2.changelog.md | 1 +
content/releases/3.breaking-changes/0.index.md | 1 +
content/releases/3.breaking-changes/1.version-10.md | 1 +
content/releases/3.breaking-changes/2.version-11.md | 1 +
content/self-hosting/1.overview.md | 1 +
content/self-hosting/2.requirements.md | 1 +
content/self-hosting/3.deploying.md | 1 +
content/self-hosting/4.upgrading.md | 1 +
content/self-hosting/5.including-extensions.md | 1 +
.../create-reusable-blocks-with-many-to-any-relationships.md | 1 +
.../fetch-data-from-directus-in-android-with-kotlin.md | 1 +
.../fetch-data-from-directus-in-ios-with-swift.md | 1 +
.../1.getting-started/fetch-data-from-directus-with-angular.md | 1 +
.../1.getting-started/fetch-data-from-directus-with-astro.md | 1 +
.../1.getting-started/fetch-data-from-directus-with-django.md | 1 +
.../fetch-data-from-directus-with-eleventy-3.md | 1 +
.../1.getting-started/fetch-data-from-directus-with-flask.md | 1 +
.../1.getting-started/fetch-data-from-directus-with-flutter.md | 1 +
.../1.getting-started/fetch-data-from-directus-with-laravel.md | 1 +
.../1.getting-started/fetch-data-from-directus-with-nextjs.md | 1 +
.../1.getting-started/fetch-data-from-directus-with-nuxt.md | 1 +
.../fetch-data-from-directus-with-solidstart.md | 1 +
.../fetch-data-from-directus-with-spring-boot.md | 1 +
.../1.getting-started/fetch-data-from-directus-with-sveltekit.md | 1 +
.../1.getting-started/implement-directus-auth-with-ios.md | 1 +
...mplement-multilingual-content-with-directus-and-svelte-kit.md | 1 +
.../1.getting-started/implementing-live-preview-in-astro.md | 1 +
.../1.getting-started/implementing-live-preview-in-next-js.md | 1 +
.../1.getting-started/implementing-live-preview-in-nuxt.md | 1 +
.../1.getting-started/implementing-live-preview-in-react.md | 1 +
.../1.getting-started/implementing-live-preview-in-sveltekit.md | 1 +
...implementing-multilingual-content-using-directus-and-astro.md | 1 +
.../implementing-multilingual-content-using-directus-and-next.md | 1 +
.../implementing-multilingual-content-using-directus-and-nuxt.md | 1 +
...ementing-multilingual-content-using-directus-and-sveltekit.md | 1 +
content/tutorials/1.getting-started/index.md | 1 +
.../integrating-the-directus-visual-editor-with-nextjs.md | 1 +
.../integrating-the-directus-visual-editor-with-nuxt.md | 1 +
.../integrating-the-directus-visual-editor-with-sveltekit.md | 1 +
.../1.getting-started/rendering-dynamic-blocks-using-astro.md | 1 +
.../1.getting-started/rendering-dynamic-blocks-using-next.md | 1 +
.../1.getting-started/rendering-dynamic-blocks-using-nuxt.md | 1 +
.../rendering-dynamic-blocks-using-sveltekit.md | 1 +
.../1.getting-started/set-up-live-preview-with-next-js.md | 1 +
.../tutorials/1.getting-started/set-up-live-preview-with-nuxt.md | 1 +
.../1.getting-started/submit-forms-using-directus-and-nextjs.md | 1 +
.../1.getting-started/submit-forms-using-directus-and-nuxt.md | 1 +
.../submit-forms-using-directus-and-sveltekit.md | 1 +
.../tutorials/1.getting-started/using-authentication-in-astro.md | 1 +
.../1.getting-started/using-authentication-in-next-js.md | 1 +
.../tutorials/1.getting-started/using-authentication-in-nuxt.md | 1 +
.../tutorials/1.getting-started/using-authentication-in-react.md | 1 +
.../1.getting-started/using-authentication-in-sveltekit.md | 1 +
...ld-a-multi-user-chat-with-javascript-and-directus-realtime.md | 1 +
.../build-a-multi-user-chat-with-react-and-directus-realtime.md | 1 +
.../build-a-multi-user-chat-with-vue-js-and-directus-realtime.md | 1 +
.../build-a-notebook-chrome-extension-with-directus-auth.md | 1 +
.../build-a-realtime-chat-app-using-directus-and-astro.md | 1 +
.../build-a-realtime-chat-app-using-directus-and-nuxt.md | 1 +
.../build-a-realtime-chat-app-with-directus-and-next.md | 1 +
.../build-a-realtime-chat-app-with-directus-and-sveltekit.md | 1 +
.../build-a-testimonial-widget-with-sveltekit-and-directus.md | 1 +
.../2.projects/build-a-user-feedback-widget-with-vue-js-.md | 1 +
.../build-a-video-streaming-app-with-sveltekit-and-directus.md | 1 +
...ommerce-platform-with-next-js-stripe-and-directus-automate.md | 1 +
...booking-platform-with-next-js-stripe-and-directus-automate.md | 1 +
...d-directus-garden-a-passive-collaborative-event-booth-demo.md | 1 +
.../build-forms-dynamically-using-directus-and-astro.md | 1 +
.../build-forms-dynamically-using-directus-and-next.md | 1 +
.../build-forms-dynamically-using-directus-and-nuxt.md | 1 +
.../build-forms-dynamically-using-directus-and-sveltekit.md | 1 +
.../build-the-leap-week-registration-and-referral-system-.md | 1 +
.../building-ai-venture-an-ai-powered-game-with-directus.md | 1 +
.../2.projects/create-a-cms-using-directus-and-astro.md | 1 +
.../2.projects/create-a-cms-using-directus-and-nextjs.md | 1 +
.../tutorials/2.projects/create-a-cms-using-directus-and-nuxt.md | 1 +
.../2.projects/create-a-cms-using-directus-and-sveltekit.md | 1 +
.../create-dynamic-pages-for-a-cms-using-directus-and-astro.md | 1 +
.../create-dynamic-pages-for-a-cms-using-directus-and-nextjs.md | 1 +
.../create-dynamic-pages-for-a-cms-using-directus-and-nuxt.md | 1 +
...reate-dynamic-pages-for-a-cms-using-directus-and-sveltekit.md | 1 +
...t-an-ai-open-source-santa-roast-app-with-directus-and-nuxt.md | 1 +
content/tutorials/2.projects/index.md | 1 +
.../integrate-directus-with-esp-32-hardware-sensors.md | 1 +
...directus-as-a-baby-health-tracker-with-owlet-and-ops-genie.md | 1 +
.../3.tips-and-tricks/advanced-types-with-the-directus-sdk.md | 1 +
.../build-a-monitoring-pipeline-for-flows-and-extensions-.md | 1 +
.../configure-okta-as-a-single-sign-on-provider.md | 1 +
.../implement-pagination-and-infinite-scrolling-in-next-js-.md | 1 +
.../3.tips-and-tricks/importing-files-in-directus-automate.md | 1 +
content/tutorials/3.tips-and-tricks/index.md | 1 +
.../preview-files-in-live-preview-with-google-docs-previews.md | 1 +
.../search-engine-optimization-best-practices.md | 1 +
content/tutorials/3.tips-and-tricks/understanding-kubernetes.md | 1 +
content/tutorials/4.migration/index.md | 1 +
content/tutorials/4.migration/migrate-from-notion-to-directus.md | 1 +
.../4.migration/migrate-from-nuxt-content-to-directus.md | 1 +
.../tutorials/4.migration/migrate-from-wordpress-to-directus.md | 1 +
.../promoting-changes-between-environments-in-directus.md | 1 +
.../5.extensions/check-permissions-in-a-custom-endpoint.md | 1 +
.../5.extensions/create-collection-items-in-custom-panels.md | 1 +
.../create-new-customers-in-stripe-in-a-custom-hook.md | 1 +
.../display-external-api-data-from-vonage-in-custom-panels.md | 1 +
.../display-external-weather-api-data-in-custom-panels.md | 1 +
.../5.extensions/format-dates-in-a-custom-display-extension.md | 1 +
.../implement-navigation-in-multipage-custom-modules.md | 1 +
content/tutorials/5.extensions/index.md | 1 +
.../5.extensions/integrate-algolia-indexing-with-custom-hooks.md | 1 +
.../integrate-elasticsearch-indexing-with-custom-hooks.md | 1 +
.../integrate-meilisearch-indexing-with-custom-hooks.md | 1 +
.../monitor-and-error-track-with-sentry-in-custom-hooks.md | 1 +
.../proxy-an-external-api-in-a-custom-endpoint-extension.md | 1 +
.../5.extensions/read-collection-data-in-custom-layouts.md | 1 +
.../send-sms-messages-with-twilio-in-custom-operations.md | 1 +
.../send-sms-messages-with-twilio-in-custom-panels.md | 1 +
.../summarize-relational-items-in-a-custom-display-extension.md | 1 +
.../5.extensions/understand-available-slots-in-custom-modules.md | 1 +
.../5.extensions/use-dynamic-values-in-custom-email-templates.md | 1 +
.../5.extensions/use-npm-packages-in-custom-operations.md | 1 +
.../validate-phone-numbers-with-twilio-in-a-custom-hook.md | 1 +
.../5.extensions/validating-third-party-jwts-in-directus.md | 1 +
.../6.self-hosting/deploy-directus-to-an-ubuntu-server.md | 1 +
content/tutorials/6.self-hosting/deploy-directus-to-aws-ec2.md | 1 +
.../6.self-hosting/deploy-directus-to-azure-web-apps.md | 1 +
.../tutorials/6.self-hosting/deploy-directus-to-digital-ocean.md | 1 +
.../6.self-hosting/deploy-directus-to-google-cloud-platform.md | 1 +
content/tutorials/6.self-hosting/deploy-directus-to-railway.md | 1 +
content/tutorials/6.self-hosting/index.md | 1 +
.../build-content-approval-workflows-with-custom-permissions.md | 1 +
.../combine-live-preview-and-content-versioning-with-next-js.md | 1 +
.../7.workflows/create-github-issues-with-directus-automate.md | 1 +
...-high-risk-phone-numbers-with-vonage-and-directus-automate.md | 1 +
.../enrich-user-data-with-clearbit-and-directus-automate.md | 1 +
.../generate-images-with-dall-e-and-directus-automate.md | 1 +
.../generate-social-posts-with-gpt-4-and-directus-automate.md | 1 +
.../generate-transcripts-with-deepgram-and-directus-automate.md | 1 +
content/tutorials/7.workflows/index.md | 1 +
...integrating-multilingual-content-with-directus-and-crowdin.md | 1 +
.../invincible-ai-content-workflows-with-inngest-and-directus.md | 1 +
.../schedule-future-content-with-directus-automate.md | 1 +
.../tag-images-with-clarifai-and-directus-automate.md | 1 +
.../trigger-netlify-site-builds-with-directus-automate.md | 1 +
.../trigger-vercel-site-builds-with-directus-automate.md | 1 +
content/tutorials/index.md | 1 +
314 files changed, 314 insertions(+)
diff --git a/content/api/index.md b/content/api/index.md
index 2120816d1..5902e683e 100644
--- a/content/api/index.md
+++ b/content/api/index.md
@@ -1,4 +1,5 @@
---
+stableId: 11c16367-745c-426b-aa17-71a01ef8ea23
title: Directus API Reference
description: Learn how to use our API
---
diff --git a/content/cloud/1.getting-started/1.introduction.md b/content/cloud/1.getting-started/1.introduction.md
index 64ff76f7a..025fbfc5f 100644
--- a/content/cloud/1.getting-started/1.introduction.md
+++ b/content/cloud/1.getting-started/1.introduction.md
@@ -1,4 +1,5 @@
---
+stableId: 075bcfe2-d204-4914-9b64-6c3e2110f8cd
title: Directus Cloud
description: Whether you're a hobbyist, startup, or enterprise, our flexible Directus Cloud platform lets you get up and running with Directus quickly.
navigation:
diff --git a/content/cloud/1.getting-started/2.teams.md b/content/cloud/1.getting-started/2.teams.md
index 96fa129a6..3d3f9dbad 100644
--- a/content/cloud/1.getting-started/2.teams.md
+++ b/content/cloud/1.getting-started/2.teams.md
@@ -1,4 +1,5 @@
---
+stableId: ad1d1fa2-8400-422a-9f19-8c659775e3d9
title: Cloud Teams
description: A team is an organizational system that groups accounts together as team members and provides consolidated billing for projects.
---
diff --git a/content/cloud/1.getting-started/3.accounts.md b/content/cloud/1.getting-started/3.accounts.md
index 408e64688..a0d0dae72 100644
--- a/content/cloud/1.getting-started/3.accounts.md
+++ b/content/cloud/1.getting-started/3.accounts.md
@@ -1,4 +1,5 @@
---
+stableId: 2edc9eda-f3c0-4f8f-8153-364472c04262
title: Managing Cloud Accounts
description: An account is your portal to Directus Cloud. You can use it to manage your teams, team members, projects and billing.
---
diff --git a/content/cloud/2.projects/1.create.md b/content/cloud/2.projects/1.create.md
index 24ab7e4bd..af921c600 100644
--- a/content/cloud/2.projects/1.create.md
+++ b/content/cloud/2.projects/1.create.md
@@ -1,4 +1,5 @@
---
+stableId: ca3baf6d-bc58-452f-9171-2a07b942d6be
title: Create a Project
description: Create a project in Directus Cloud.
---
diff --git a/content/cloud/2.projects/2.destroy.md b/content/cloud/2.projects/2.destroy.md
index f9c6aec63..d83953143 100644
--- a/content/cloud/2.projects/2.destroy.md
+++ b/content/cloud/2.projects/2.destroy.md
@@ -1,4 +1,5 @@
---
+stableId: 6240e075-d40c-48e6-8ab7-43e2e611c63d
title: Destroy a Project
description: Destroy a Directus Cloud project and cancel your subscription.
---
diff --git a/content/cloud/2.projects/3.version-upgrades.md b/content/cloud/2.projects/3.version-upgrades.md
index 78e4a2474..c671b4082 100644
--- a/content/cloud/2.projects/3.version-upgrades.md
+++ b/content/cloud/2.projects/3.version-upgrades.md
@@ -1,4 +1,5 @@
---
+stableId: 771c0fb7-9ecc-409d-a364-da1fac91da7a
title: Version Upgrades
description: Learn about automatic upgrades and version locking in Directus Cloud.
---
diff --git a/content/cloud/2.projects/4.monitoring.md b/content/cloud/2.projects/4.monitoring.md
index eb3f909be..f1a0ea141 100644
--- a/content/cloud/2.projects/4.monitoring.md
+++ b/content/cloud/2.projects/4.monitoring.md
@@ -1,4 +1,5 @@
---
+stableId: 2eb6adf1-086d-4a6c-93f7-01838aa1081c
title: Monitoring Projects
description: Learn how to monitor your Directus Cloud project.
---
diff --git a/content/cloud/2.projects/5.backups.md b/content/cloud/2.projects/5.backups.md
index 32fa07fa0..ee493d0c6 100644
--- a/content/cloud/2.projects/5.backups.md
+++ b/content/cloud/2.projects/5.backups.md
@@ -1,4 +1,5 @@
---
+stableId: 3f5f1117-5140-4104-b6d0-753651625285
title: Backups
description: Learn about automatic backups in Directus Cloud.
---
diff --git a/content/cloud/3.configuration/1.custom-domains.md b/content/cloud/3.configuration/1.custom-domains.md
index 33050bcca..77dcf4993 100644
--- a/content/cloud/3.configuration/1.custom-domains.md
+++ b/content/cloud/3.configuration/1.custom-domains.md
@@ -1,4 +1,5 @@
---
+stableId: a170f342-1663-440a-950b-432a1f364375
title: Custom Domains
description: Learn how to set up a custom domain for your Directus Enterprise Cloud project.
---
diff --git a/content/cloud/3.configuration/2.environment-variables.md b/content/cloud/3.configuration/2.environment-variables.md
index 48cdebf22..3cd2c09eb 100644
--- a/content/cloud/3.configuration/2.environment-variables.md
+++ b/content/cloud/3.configuration/2.environment-variables.md
@@ -1,4 +1,5 @@
---
+stableId: e44ca992-6815-464a-ba89-28cde56646d8
title: Environment Variables
description: Learn about environment variables in Directus Cloud.
---
diff --git a/content/cloud/3.configuration/3.direct-database-access.md b/content/cloud/3.configuration/3.direct-database-access.md
index 47d4a6940..325cead70 100644
--- a/content/cloud/3.configuration/3.direct-database-access.md
+++ b/content/cloud/3.configuration/3.direct-database-access.md
@@ -1,4 +1,5 @@
---
+stableId: 13c3da5f-8a8a-4c39-8a3f-d00b13fc828a
title: Direct Database Access
description: Learn how to directly access your Directus Cloud project's database.
---
diff --git a/content/cloud/3.configuration/4.custom-extensions.md b/content/cloud/3.configuration/4.custom-extensions.md
index cc7d6c811..013337745 100644
--- a/content/cloud/3.configuration/4.custom-extensions.md
+++ b/content/cloud/3.configuration/4.custom-extensions.md
@@ -1,4 +1,5 @@
---
+stableId: c986c4c6-fe4d-4b1d-85b9-baf2442023c3
title: Custom Extensions
description: Learn how to deploy custom extensions to your Directus Cloud project.
---
diff --git a/content/cloud/3.configuration/5.datacenter-regions.md b/content/cloud/3.configuration/5.datacenter-regions.md
index 173b2716c..02882a5aa 100644
--- a/content/cloud/3.configuration/5.datacenter-regions.md
+++ b/content/cloud/3.configuration/5.datacenter-regions.md
@@ -1,4 +1,5 @@
---
+stableId: 5fe7a64c-ef55-4916-aacd-66d878516fc5
title: Datacenter Regions
description: Learn where datacenters for cloud projects are located.
---
diff --git a/content/cloud/4.billing/1.manage-billing.md b/content/cloud/4.billing/1.manage-billing.md
index 5bc66129e..fd88663e9 100644
--- a/content/cloud/4.billing/1.manage-billing.md
+++ b/content/cloud/4.billing/1.manage-billing.md
@@ -1,4 +1,5 @@
---
+stableId: ec565250-dac8-4e44-aab9-42cec9b6bf73
title: Manage Billing
description: Learn how to manage billing for your Directus Cloud project.
---
diff --git a/content/cloud/4.billing/2.changing-tier.md b/content/cloud/4.billing/2.changing-tier.md
index fd1621bc1..1d8222d46 100644
--- a/content/cloud/4.billing/2.changing-tier.md
+++ b/content/cloud/4.billing/2.changing-tier.md
@@ -1,4 +1,5 @@
---
+stableId: acb64393-bd04-48e0-9b1d-ecaca7df8459
title: Changing Your Tier
description: Learn how to change the tier of your Directus Cloud project.
---
diff --git a/content/cloud/4.billing/3.cancel-subscription.md b/content/cloud/4.billing/3.cancel-subscription.md
index a97b00087..6643bce13 100644
--- a/content/cloud/4.billing/3.cancel-subscription.md
+++ b/content/cloud/4.billing/3.cancel-subscription.md
@@ -1,4 +1,5 @@
---
+stableId: 170504b9-74fb-4bb2-8f51-6b386a58fe0d
title: Cancel Your Subscription
description: Learn how to cancel your Directus Cloud project subscription.
---
diff --git a/content/community/1.overview/1.welcome.md b/content/community/1.overview/1.welcome.md
index b27ee06e3..169ee3669 100644
--- a/content/community/1.overview/1.welcome.md
+++ b/content/community/1.overview/1.welcome.md
@@ -1,4 +1,5 @@
---
+stableId: 4e06b800-dc26-484f-8e0e-6ad6ef67cfbe
title: Directus Community
description: Welcome to the Directus community!
navigation:
diff --git a/content/community/1.overview/2.conduct.md b/content/community/1.overview/2.conduct.md
index 41e7d0099..ecc2d8850 100644
--- a/content/community/1.overview/2.conduct.md
+++ b/content/community/1.overview/2.conduct.md
@@ -1,4 +1,5 @@
---
+stableId: 99dac207-8fec-4fb8-af2e-33b8967553c1
title: Code of Conduct
headline: Community
description: Our standards, responsibilities, and enforcement guidelines to create a positive community.
diff --git a/content/community/1.overview/3.moderation.md b/content/community/1.overview/3.moderation.md
index 1a97a95c8..0127000d1 100644
--- a/content/community/1.overview/3.moderation.md
+++ b/content/community/1.overview/3.moderation.md
@@ -1,4 +1,5 @@
---
+stableId: 2afc51ec-fb8a-477c-b659-b097eef1195a
title: Moderation Guidelines
description: Guidelines we give to community moderators.
headline: Community
diff --git a/content/community/2.contribution/1.translations.md b/content/community/2.contribution/1.translations.md
index 7db40890c..967167377 100644
--- a/content/community/2.contribution/1.translations.md
+++ b/content/community/2.contribution/1.translations.md
@@ -1,4 +1,5 @@
---
+stableId: e4688b26-a826-4bca-a172-5c81d7846299
title: Translations
description: How to contribute to translating the Data Studio.
---
diff --git a/content/community/2.contribution/2.documentation.md b/content/community/2.contribution/2.documentation.md
index d2bb45d72..754524fe7 100644
--- a/content/community/2.contribution/2.documentation.md
+++ b/content/community/2.contribution/2.documentation.md
@@ -1,4 +1,5 @@
---
+stableId: 068fc383-03c0-46d7-ae78-2f0c8a3f8d1b
title: Documentation
description: How to contribute to the Directus documentation.
---
diff --git a/content/community/2.contribution/3.feature-requests.md b/content/community/2.contribution/3.feature-requests.md
index 6ed8cf56d..1c4e46fd6 100644
--- a/content/community/2.contribution/3.feature-requests.md
+++ b/content/community/2.contribution/3.feature-requests.md
@@ -1,4 +1,5 @@
---
+stableId: b56e5bd7-f667-4c84-abe0-42b7eb8f791e
title: Feature Requests
description: How to add feature requests, and our process for reviewing them.
---
diff --git a/content/community/2.contribution/4.pull-requests.md b/content/community/2.contribution/4.pull-requests.md
index 338f324b0..c43af3432 100644
--- a/content/community/2.contribution/4.pull-requests.md
+++ b/content/community/2.contribution/4.pull-requests.md
@@ -1,4 +1,5 @@
---
+stableId: 1024f772-07f5-4f13-a7fc-7d5060e8165c
title: Pull Requests
description: Our process for contributing pull requests to Directus.
---
diff --git a/content/community/3.codebase/1.overview.md b/content/community/3.codebase/1.overview.md
index 1bd64342d..0813a2043 100644
--- a/content/community/3.codebase/1.overview.md
+++ b/content/community/3.codebase/1.overview.md
@@ -1,4 +1,5 @@
---
+stableId: 3cbf2ff3-a075-4f76-80dd-c3bd84ca6cd7
title: Codebase Overview
description: Overview of the Directus codebase for new contributors
navigation:
diff --git a/content/community/3.codebase/2.dev-environment.md b/content/community/3.codebase/2.dev-environment.md
index 40be01f4b..685d98886 100644
--- a/content/community/3.codebase/2.dev-environment.md
+++ b/content/community/3.codebase/2.dev-environment.md
@@ -1,4 +1,5 @@
---
+stableId: 06512035-ce9d-4a5f-8b3f-33c3a2f4229f
title: Development Environment
description: How to set up and run a development environment for Directus so that you can work on the platform's source code.
---
diff --git a/content/community/3.codebase/3.testing.md b/content/community/3.codebase/3.testing.md
index 6a2bf559a..16d360d2f 100644
--- a/content/community/3.codebase/3.testing.md
+++ b/content/community/3.codebase/3.testing.md
@@ -1,4 +1,5 @@
---
+stableId: 49b7eefd-0ed9-439e-9eb9-f5e558df955d
title: Testing
description: How to run unit and blackbox tests in the Directus codebase.
---
diff --git a/content/community/4.reporting-and-support/1.troubleshooting-steps.md b/content/community/4.reporting-and-support/1.troubleshooting-steps.md
index 5d91be6de..e0135c975 100644
--- a/content/community/4.reporting-and-support/1.troubleshooting-steps.md
+++ b/content/community/4.reporting-and-support/1.troubleshooting-steps.md
@@ -1,4 +1,5 @@
---
+stableId: faee16f7-e6d1-4234-a233-2ca3d1f665a8
title: Troubleshooting Steps
description: If you're experiencing issues or think you have found a problem in Directus, be sure to follow these steps.
---
diff --git a/content/community/4.reporting-and-support/2.bug-reporting.md b/content/community/4.reporting-and-support/2.bug-reporting.md
index a516e1f78..d7d482c33 100644
--- a/content/community/4.reporting-and-support/2.bug-reporting.md
+++ b/content/community/4.reporting-and-support/2.bug-reporting.md
@@ -1,4 +1,5 @@
---
+stableId: a79901ff-2a07-4ec7-b7d7-8b7ae11cebfa
title: Bug Reporting
description: How to report bugs in Directus.
---
diff --git a/content/community/4.reporting-and-support/3.security-reporting.md b/content/community/4.reporting-and-support/3.security-reporting.md
index 0bfb1af3d..b344df997 100644
--- a/content/community/4.reporting-and-support/3.security-reporting.md
+++ b/content/community/4.reporting-and-support/3.security-reporting.md
@@ -1,4 +1,5 @@
---
+stableId: 8415e07b-d544-4f3c-9276-652d74c864df
title: Security Reporting
description: How to report security issues in Directus.
---
diff --git a/content/community/4.reporting-and-support/4.customer-support.md b/content/community/4.reporting-and-support/4.customer-support.md
index ec188ba94..804c8420b 100644
--- a/content/community/4.reporting-and-support/4.customer-support.md
+++ b/content/community/4.reporting-and-support/4.customer-support.md
@@ -1,4 +1,5 @@
---
+stableId: 3d616027-3168-4a03-b8d9-7809e5e255ae
title: Customer Support
description: How to get help with Directus as a user and customer.
---
diff --git a/content/community/5.programs/1.guest-authors.md b/content/community/5.programs/1.guest-authors.md
index 920f09aaa..f9af1d046 100644
--- a/content/community/5.programs/1.guest-authors.md
+++ b/content/community/5.programs/1.guest-authors.md
@@ -1,4 +1,5 @@
---
+stableId: 1f688690-0fa9-4160-904f-866f80ae54f7
title: Guest Authors
description: Our guest author program invites authors to join and get paid to write tutorials for the Directus community.
---
diff --git a/content/community/5.programs/2.directus-labs.md b/content/community/5.programs/2.directus-labs.md
index 2fb187d6e..3b0c24a4d 100644
--- a/content/community/5.programs/2.directus-labs.md
+++ b/content/community/5.programs/2.directus-labs.md
@@ -1,4 +1,5 @@
---
+stableId: f0e494ca-d616-4666-b271-8d65be81c81a
title: Directus Labs
description: Directus Labs is the official organization for Directus templates, settings and experimental projects.
---
diff --git a/content/configuration/0.intro.md b/content/configuration/0.intro.md
index 5d066a152..4e6b35713 100644
--- a/content/configuration/0.intro.md
+++ b/content/configuration/0.intro.md
@@ -1,4 +1,5 @@
---
+stableId: c56d859b-1f61-4802-b69f-ad08e0f839ad
title: Introduction
description:
Environment variables are used for all configuration within a Directus project. These variables can be defined in a
diff --git a/content/configuration/1.general.md b/content/configuration/1.general.md
index d85f6d3a0..f11aa5b65 100644
--- a/content/configuration/1.general.md
+++ b/content/configuration/1.general.md
@@ -1,4 +1,5 @@
---
+stableId: 6a01f1ed-f8fd-43d8-b70f-9c190529613e
title: General
description: Configuration for the general system, server, first admin user, and telemetry.
---
diff --git a/content/configuration/ai.md b/content/configuration/ai.md
index 62aab131c..5f7a2754b 100644
--- a/content/configuration/ai.md
+++ b/content/configuration/ai.md
@@ -1,4 +1,5 @@
---
+stableId: 743f74e7-194d-42de-a115-dc7edd37dd77
title: AI
description: Configuration for AI Assistant and Model Context Protocol (MCP) features.
---
diff --git a/content/configuration/auth-sso.md b/content/configuration/auth-sso.md
index 3b780a7c3..ff0cd108e 100644
--- a/content/configuration/auth-sso.md
+++ b/content/configuration/auth-sso.md
@@ -1,4 +1,5 @@
---
+stableId: 4f4bdeae-3024-44b2-8e4f-34573834897b
title: Authentication & SSO
description: Configuration for authentication methods, including local email/password, OAuth 2.0, OpenID, LDAP, and SAML.
navigation:
diff --git a/content/configuration/cache.md b/content/configuration/cache.md
index 71573dcfd..c07c88703 100644
--- a/content/configuration/cache.md
+++ b/content/configuration/cache.md
@@ -1,4 +1,5 @@
---
+stableId: d9e98a97-d820-4155-9c5a-cf29defe43c8
title: Cache
description: Configuration for internal and output caching.
---
diff --git a/content/configuration/database.md b/content/configuration/database.md
index 1281829af..fa0425748 100644
--- a/content/configuration/database.md
+++ b/content/configuration/database.md
@@ -1,4 +1,5 @@
---
+stableId: 56701b9c-6b92-44f5-8774-782c33b5739d
title: Database
description: Configuration for database connections.
---
diff --git a/content/configuration/email.md b/content/configuration/email.md
index 8963474d5..4f1975050 100644
--- a/content/configuration/email.md
+++ b/content/configuration/email.md
@@ -1,4 +1,5 @@
---
+stableId: 30921051-136f-4d6c-8a84-471ef205783d
title: Email
description: Configuration for email settings and templates.
---
diff --git a/content/configuration/extensions.md b/content/configuration/extensions.md
index d761704bd..f29ccbf82 100644
--- a/content/configuration/extensions.md
+++ b/content/configuration/extensions.md
@@ -1,4 +1,5 @@
---
+stableId: acac0926-dc36-4b84-9963-f0dea343efaf
title: Extensions
description: Configuration for extensions and the Directus Marketplace.
---
diff --git a/content/configuration/files.md b/content/configuration/files.md
index fa21b62d8..3b07a1213 100644
--- a/content/configuration/files.md
+++ b/content/configuration/files.md
@@ -1,4 +1,5 @@
---
+stableId: 0c9b088d-3f66-4afe-84a9-1301af20dbde
title: Files
description: Configuration for storage locations, metadata, upload limits, and transformations.
---
diff --git a/content/configuration/flows.md b/content/configuration/flows.md
index 559334148..ef43b2fa3 100644
--- a/content/configuration/flows.md
+++ b/content/configuration/flows.md
@@ -1,4 +1,5 @@
---
+stableId: be7a4a55-ae49-4fc3-b812-f3b1c3bd07e7
title: Flows
description: Configure environment variables, memory, and timeout for Flows.
---
diff --git a/content/configuration/logging.md b/content/configuration/logging.md
index 0b7e83b0e..fcb6ac40c 100644
--- a/content/configuration/logging.md
+++ b/content/configuration/logging.md
@@ -1,4 +1,5 @@
---
+stableId: fa870162-2e4e-4a7c-826b-e3d228564204
title: Logging
description: Configuration for general and Realtime logging.
---
diff --git a/content/configuration/metrics.md b/content/configuration/metrics.md
index 47b1858db..c20cfbc23 100644
--- a/content/configuration/metrics.md
+++ b/content/configuration/metrics.md
@@ -1,4 +1,5 @@
---
+stableId: 71ecfdac-438b-44a2-9f52-bdade14404a1
title: Metrics
description: Configuration for metrics.
---
diff --git a/content/configuration/migrations.md b/content/configuration/migrations.md
index 38e06b68d..4c9284ba2 100644
--- a/content/configuration/migrations.md
+++ b/content/configuration/migrations.md
@@ -1,4 +1,5 @@
---
+stableId: d395c571-bc7d-4c61-9863-d60d5b72a562
title: Migrations
description: Creation of custom migration files to automate database changes.
---
diff --git a/content/configuration/pm2.md b/content/configuration/pm2.md
index 4eb339b37..3cc82cc75 100644
--- a/content/configuration/pm2.md
+++ b/content/configuration/pm2.md
@@ -1,4 +1,5 @@
---
+stableId: 9a06c807-d8a9-4adc-8755-064516ce4e7d
title: PM2
description: Configuration for PM2, the process manager for Directus.
---
diff --git a/content/configuration/realtime.md b/content/configuration/realtime.md
index f48a61361..c879ecd33 100644
--- a/content/configuration/realtime.md
+++ b/content/configuration/realtime.md
@@ -1,4 +1,5 @@
---
+stableId: 69c2ca8b-3e06-4792-8808-bc537270c853
title: Realtime
description: Configuration for WebSockets and GraphQL Subscriptions.
---
diff --git a/content/configuration/security-limits.md b/content/configuration/security-limits.md
index de162fd6d..89e122724 100644
--- a/content/configuration/security-limits.md
+++ b/content/configuration/security-limits.md
@@ -1,4 +1,5 @@
---
+stableId: ebafacb0-0e76-48f5-b9d4-5eed3e354419
title: Security & Limits
description: Configuration for access tokens, cookies, CSP, hashing, CORS, rate limiting, and request limits.
---
diff --git a/content/configuration/synchronization.md b/content/configuration/synchronization.md
index 31f029b02..d413680c9 100644
--- a/content/configuration/synchronization.md
+++ b/content/configuration/synchronization.md
@@ -1,4 +1,5 @@
---
+stableId: 54f191c6-0a98-4720-a45a-ec24cff19382
title: Synchronization
description: Configuration around synchronization and Redis.
---
diff --git a/content/configuration/theming.md b/content/configuration/theming.md
index 5619207ec..62a342997 100644
--- a/content/configuration/theming.md
+++ b/content/configuration/theming.md
@@ -1,4 +1,5 @@
---
+stableId: d5cd5918-9aec-4a4f-9f43-ea43e4e27702
title: Theming
description: Configuration of the Data Studio's theming engine and appearance settings.
---
diff --git a/content/configuration/translations.md b/content/configuration/translations.md
index 65696e2cb..87a5ea412 100644
--- a/content/configuration/translations.md
+++ b/content/configuration/translations.md
@@ -1,4 +1,5 @@
---
+stableId: 219484ed-4006-426f-bdc3-71b04004dc3b
title: Translations
description: Directus supports translations for both the Data Studio UI and authored content.
---
diff --git a/content/getting-started/1.overview.md b/content/getting-started/1.overview.md
index c09853832..0b9a2a4ae 100644
--- a/content/getting-started/1.overview.md
+++ b/content/getting-started/1.overview.md
@@ -1,4 +1,5 @@
---
+stableId: 8d6c731d-b669-41e7-8549-3b641969fb4e
title: Overview
headline: Getting Started
description: Learn about the Directus Data Engine and Studio, when to use it, and how it works.
diff --git a/content/getting-started/10.accessibility.md b/content/getting-started/10.accessibility.md
index 2116a9d64..1ba3e1416 100644
--- a/content/getting-started/10.accessibility.md
+++ b/content/getting-started/10.accessibility.md
@@ -1,4 +1,5 @@
---
+stableId: f8827186-c11d-47f4-88fb-ff99f8e2e984
description: We are always looking for ways to make Directus Studio more accessible. Here are some of the methods we currently support.
title: Accessibility
---
diff --git a/content/getting-started/2.create-a-project.md b/content/getting-started/2.create-a-project.md
index cbe5e5d65..80ba9b165 100644
--- a/content/getting-started/2.create-a-project.md
+++ b/content/getting-started/2.create-a-project.md
@@ -1,4 +1,5 @@
---
+stableId: 4825c227-0cbf-46c5-8e46-0051ebb4871e
title: Create a Project
description: Learn about how to create a managed Directus project or self-host with Docker.
navigation:
diff --git a/content/getting-started/3.data-model.md b/content/getting-started/3.data-model.md
index 69319c63e..6fcc77c33 100644
--- a/content/getting-started/3.data-model.md
+++ b/content/getting-started/3.data-model.md
@@ -1,4 +1,5 @@
---
+stableId: 056e7d72-e462-4fcd-8859-ca83a5785c3e
title: Configure a Data Model
description: This guide will cover creating a collection in Directus via the Data Studio, creating fields, and configuring relationships.
navigation:
diff --git a/content/getting-started/4.use-the-api.md b/content/getting-started/4.use-the-api.md
index 8f22d532b..942225049 100644
--- a/content/getting-started/4.use-the-api.md
+++ b/content/getting-started/4.use-the-api.md
@@ -1,4 +1,5 @@
---
+stableId: 5be35c71-336d-44cf-bfa3-3c5f0dcdf5e6
title: Use the API
description: Get started with Directus APIs. Learn to interact with collections, fetch, and create data.
navigation:
diff --git a/content/getting-started/5.authenticate-user.md b/content/getting-started/5.authenticate-user.md
index 3bcf71e46..b1b678900 100644
--- a/content/getting-started/5.authenticate-user.md
+++ b/content/getting-started/5.authenticate-user.md
@@ -1,4 +1,5 @@
---
+stableId: 93f090e0-0295-4a7b-9c1d-655f2f1857a1
title: Authenticate a User
description: Get started with Directus Auth. Learn how to register, login, create users, and make authenticated requests.
navigation:
diff --git a/content/getting-started/6.upload-files.md b/content/getting-started/6.upload-files.md
index 227f3add7..bf8958e2d 100644
--- a/content/getting-started/6.upload-files.md
+++ b/content/getting-started/6.upload-files.md
@@ -1,4 +1,5 @@
---
+stableId: 71b97532-6f4c-47ef-87c8-416e9f899ac6
title: Upload & Access Files
description: This guide will cover importing a file via URL, requesting assets, and using transformation parameters.
navigation:
diff --git a/content/getting-started/7.create-an-automation.md b/content/getting-started/7.create-an-automation.md
index f3735826e..4e0deaffb 100644
--- a/content/getting-started/7.create-an-automation.md
+++ b/content/getting-started/7.create-an-automation.md
@@ -1,4 +1,5 @@
---
+stableId: 2f1467c4-ca73-4826-a674-f0e7b6a3afd9
title: Create an Automation
description: Get started using flows, triggers, operations and the data chain in Directus Automate.
navigation:
diff --git a/content/getting-started/8.connect-to-realtime.md b/content/getting-started/8.connect-to-realtime.md
index 4f8f79ad4..db0ae287a 100644
--- a/content/getting-started/8.connect-to-realtime.md
+++ b/content/getting-started/8.connect-to-realtime.md
@@ -1,4 +1,5 @@
---
+stableId: bb372327-db6f-45fa-857c-90877a84dbe6
title: Connect to Realtime Data
description: This guide will cover connecting to Directus via WebSockets on the web, subscribing to changes, and creating new items over the connection.
navigation:
diff --git a/content/getting-started/9.resources.md b/content/getting-started/9.resources.md
index dfee34284..49e62f3b4 100644
--- a/content/getting-started/9.resources.md
+++ b/content/getting-started/9.resources.md
@@ -1,4 +1,5 @@
---
+stableId: cbc5febe-25ae-489d-8f02-a119e499bced
description: Key links across the Directus ecosystem.
title: Resources & Links
---
diff --git a/content/guides/01.data-model/1.collections.md b/content/guides/01.data-model/1.collections.md
index 893e4a9bf..7c34723d3 100644
--- a/content/guides/01.data-model/1.collections.md
+++ b/content/guides/01.data-model/1.collections.md
@@ -1,4 +1,5 @@
---
+stableId: 174abd54-cf63-4d35-8974-bc919baa3f9e
title: Collections
description: Directus collections help you manage your data. Create custom collections, define fields, configure relationships, and leverage features like content versioning and access control. Learn how to create, configure, and manage collections in Directus.
---
diff --git a/content/guides/01.data-model/2.fields.md b/content/guides/01.data-model/2.fields.md
index cda99d224..e3e5d2d9d 100644
--- a/content/guides/01.data-model/2.fields.md
+++ b/content/guides/01.data-model/2.fields.md
@@ -1,4 +1,5 @@
---
+stableId: 1d9ed942-1745-4ea5-965d-385049c3d899
title: Fields
description: Directus fields let you define how your data is stored and displayed. Learn about creating fields, data types, interfaces, validations, relationships, and more. Discover how to configure fields to perfectly suit your data modeling needs in Directus.
---
diff --git a/content/guides/01.data-model/3.interfaces.md b/content/guides/01.data-model/3.interfaces.md
index d39f284e4..9e274b706 100644
--- a/content/guides/01.data-model/3.interfaces.md
+++ b/content/guides/01.data-model/3.interfaces.md
@@ -1,4 +1,5 @@
---
+stableId: 475668cc-bb3d-429f-a77c-194ebfa083e9
title: Interfaces
description: Manage your data effectively with Directus fields. Discover various field types, interfaces, validations, and relationships to perfectly suit your data modeling needs.
---
diff --git a/content/guides/01.data-model/4.relationships.md b/content/guides/01.data-model/4.relationships.md
index b8d902539..aea891c69 100644
--- a/content/guides/01.data-model/4.relationships.md
+++ b/content/guides/01.data-model/4.relationships.md
@@ -1,4 +1,5 @@
---
+stableId: 4a3cee6c-da57-4b2f-b4b3-750c406004bd
title: Relationships
description: Leverage Directus relationships to create powerful data connections. Explore Many to One, One to Many, Many to Many, and Many to Any relationships, along with Translations for multilingual content management.
---
diff --git a/content/guides/02.content/1.explore.md b/content/guides/02.content/1.explore.md
index 4d2e84dbc..2f87dfb23 100644
--- a/content/guides/02.content/1.explore.md
+++ b/content/guides/02.content/1.explore.md
@@ -1,4 +1,5 @@
---
+stableId: b08b91db-5ffe-4195-adde-2669e08c1c0b
title: Collection Explorer
description: Learn to filter, layout, batch edit and more with collections in the collection explorer.
---
diff --git a/content/guides/02.content/2.editor.md b/content/guides/02.content/2.editor.md
index 4b9b6d8a7..a569c695b 100644
--- a/content/guides/02.content/2.editor.md
+++ b/content/guides/02.content/2.editor.md
@@ -1,4 +1,5 @@
---
+stableId: 88e09fef-ff03-4c18-a87e-b77f9e0e1d3f
title: Item Editor
description: Learn to create, duplicate, archive and perform other actions with items using Directus.
---
diff --git a/content/guides/02.content/3.layouts.md b/content/guides/02.content/3.layouts.md
index e61ad918b..c78c904e8 100644
--- a/content/guides/02.content/3.layouts.md
+++ b/content/guides/02.content/3.layouts.md
@@ -1,4 +1,5 @@
---
+stableId: 5e9b64e3-8fa3-403c-88e1-d22d7cd2358a
title: Layouts
description: Learn to use layouts for viewing and interacting with items in a collection using Directus.
---
diff --git a/content/guides/02.content/4.import-export.md b/content/guides/02.content/4.import-export.md
index 16a77f85c..61d7f257e 100644
--- a/content/guides/02.content/4.import-export.md
+++ b/content/guides/02.content/4.import-export.md
@@ -1,4 +1,5 @@
---
+stableId: 306359d2-ab67-47eb-ade1-899829fc89ac
title: Import & Export
description: Learn to import and export multiple items stored as files using Directus.
---
diff --git a/content/guides/02.content/5.live-preview.md b/content/guides/02.content/5.live-preview.md
index bd0b0cc86..d37614c94 100644
--- a/content/guides/02.content/5.live-preview.md
+++ b/content/guides/02.content/5.live-preview.md
@@ -1,4 +1,5 @@
---
+stableId: 930e7ab4-7e33-49d6-ab79-87e8d0c3d142
title: Live Preview
description: Learn to set up your project for live previewing items from your application.
---
diff --git a/content/guides/02.content/6.content-versioning.md b/content/guides/02.content/6.content-versioning.md
index 336c55f19..50330e6db 100644
--- a/content/guides/02.content/6.content-versioning.md
+++ b/content/guides/02.content/6.content-versioning.md
@@ -1,4 +1,5 @@
---
+stableId: 1ec3d785-7228-4da5-bf94-513ccb2a4ef5
title: Content Versioning
description: This guide covers the process of enabling and utilizing Content Versioning in Directus.
---
diff --git a/content/guides/02.content/7.translations.md b/content/guides/02.content/7.translations.md
index 278768bf6..15e355c89 100644
--- a/content/guides/02.content/7.translations.md
+++ b/content/guides/02.content/7.translations.md
@@ -1,4 +1,5 @@
---
+stableId: 4df5de12-6f30-47d8-b227-28c0f104a4c6
title: Translations
description: Both content and the data studio can be translated into multiple languages.
---
diff --git a/content/guides/02.content/8.visual-editor/0.index.md b/content/guides/02.content/8.visual-editor/0.index.md
index 0e7c46283..f7a0fc151 100644
--- a/content/guides/02.content/8.visual-editor/0.index.md
+++ b/content/guides/02.content/8.visual-editor/0.index.md
@@ -1,4 +1,5 @@
---
+stableId: 69cf14c9-1aaf-49cd-a1dc-b0c0203467c2
title: Visual Editor
description: The Directus visual editor module allows you to visually edit the content of your website directly in-place.
---
diff --git a/content/guides/02.content/8.visual-editor/1.frontend-library.md b/content/guides/02.content/8.visual-editor/1.frontend-library.md
index e1ac7c99e..598fa1ebc 100644
--- a/content/guides/02.content/8.visual-editor/1.frontend-library.md
+++ b/content/guides/02.content/8.visual-editor/1.frontend-library.md
@@ -1,4 +1,5 @@
---
+stableId: 5bab603a-092b-4ed8-a5c9-2557b9163ada
title: Frontend Library
description: A library that allows your website to communicate with your Directus project and enables Visual Editing.
---
diff --git a/content/guides/02.content/8.visual-editor/2.studio-module.md b/content/guides/02.content/8.visual-editor/2.studio-module.md
index ce5741e94..3436b9d89 100644
--- a/content/guides/02.content/8.visual-editor/2.studio-module.md
+++ b/content/guides/02.content/8.visual-editor/2.studio-module.md
@@ -1,4 +1,5 @@
---
+stableId: 6ba1ed2c-e265-444f-b045-ea12935cee86
title: Studio Module
description: Learn how to edit your website's content in place from within the Directus Studio.
---
diff --git a/content/guides/02.content/8.visual-editor/3.customization.md b/content/guides/02.content/8.visual-editor/3.customization.md
index c9d9883a2..e7313e1ba 100644
--- a/content/guides/02.content/8.visual-editor/3.customization.md
+++ b/content/guides/02.content/8.visual-editor/3.customization.md
@@ -1,4 +1,5 @@
---
+stableId: fe79b56e-3eab-4cd4-8431-680ec11c20f7
title: Customization
description: Customize the styling of your Visual Editing experience to suit your brand or website theming.
---
diff --git a/content/guides/02.content/9.collaborative-editing/0.index.md b/content/guides/02.content/9.collaborative-editing/0.index.md
index c05977088..2a07eadf5 100644
--- a/content/guides/02.content/9.collaborative-editing/0.index.md
+++ b/content/guides/02.content/9.collaborative-editing/0.index.md
@@ -1,4 +1,5 @@
---
+stableId: ae43bd5d-5561-48d5-a1ec-95eaa0673073
title: Collaborative Editing
description: Directus Collaborative Editing enables real-time data synchronization and collaborative editing across collections, allowing multiple users to edit content simultaneously without conflicts.
---
diff --git a/content/guides/02.content/9.collaborative-editing/1.configuration.md b/content/guides/02.content/9.collaborative-editing/1.configuration.md
index 9b18bfb4f..f080afbc2 100644
--- a/content/guides/02.content/9.collaborative-editing/1.configuration.md
+++ b/content/guides/02.content/9.collaborative-editing/1.configuration.md
@@ -1,4 +1,5 @@
---
+stableId: 3eb142a2-88a8-45f4-b765-625fe218a212
title: Configuration
description: Learn how to configure Collaborative Editing in your Directus project.
---
diff --git a/content/guides/02.content/9.collaborative-editing/2.usage.md b/content/guides/02.content/9.collaborative-editing/2.usage.md
index 6d0aa0b22..a14b355e7 100644
--- a/content/guides/02.content/9.collaborative-editing/2.usage.md
+++ b/content/guides/02.content/9.collaborative-editing/2.usage.md
@@ -1,4 +1,5 @@
---
+stableId: 21253079-d996-4d98-ba21-db1b4e37d215
title: Usage Guide
description: Learn how to use Collaborative Editing for real-time collaboration on content in your Directus project.
---
diff --git a/content/guides/02.content/9.collaborative-editing/3.development.md b/content/guides/02.content/9.collaborative-editing/3.development.md
index cabe484db..bdf77afaf 100644
--- a/content/guides/02.content/9.collaborative-editing/3.development.md
+++ b/content/guides/02.content/9.collaborative-editing/3.development.md
@@ -1,4 +1,5 @@
---
+stableId: 08ceea5d-1c6f-4500-b9b7-9fb656644aa1
title: Development & Custom Extensions
description: Learn how Custom Interfaces integrate with Collaborative Editing in Directus.
---
diff --git a/content/guides/03.auth/1.tokens-cookies.md b/content/guides/03.auth/1.tokens-cookies.md
index 36470ed61..6e9e869d8 100644
--- a/content/guides/03.auth/1.tokens-cookies.md
+++ b/content/guides/03.auth/1.tokens-cookies.md
@@ -1,4 +1,5 @@
---
+stableId: 06f322ff-b8a3-40dd-bbb7-9097f594ea9c
title: Access Tokens
description: Learn how to authenticate requests & explore standard, session, and static token types.
---
diff --git a/content/guides/03.auth/2.access-control.md b/content/guides/03.auth/2.access-control.md
index 485e2632c..fb074a55b 100644
--- a/content/guides/03.auth/2.access-control.md
+++ b/content/guides/03.auth/2.access-control.md
@@ -1,4 +1,5 @@
---
+stableId: 0ffe7986-e5c9-4f7b-a4c2-f8c2c260aed9
title: Access Control
description: Manage user and role permissions and policies for interacting with data in Directus.
---
diff --git a/content/guides/03.auth/3.creating-users.md b/content/guides/03.auth/3.creating-users.md
index e519c04ed..6f320b91e 100644
--- a/content/guides/03.auth/3.creating-users.md
+++ b/content/guides/03.auth/3.creating-users.md
@@ -1,4 +1,5 @@
---
+stableId: fcf37ce0-8a6e-41f0-8c04-86a95f78fa02
title: Creating Users
description: Learn about creating users in directus, including API creation, inviting users, and seamless invites.
---
diff --git a/content/guides/03.auth/4.email-login.md b/content/guides/03.auth/4.email-login.md
index 6bed2fee1..e2026a3c1 100644
--- a/content/guides/03.auth/4.email-login.md
+++ b/content/guides/03.auth/4.email-login.md
@@ -1,4 +1,5 @@
---
+stableId: b44ebc23-d349-4bea-96bd-08c8b80c25f9
title: Email Login
description: Learn about user registration, login with standard/session tokens, refresh, logout, and resetting passwords.
---
diff --git a/content/guides/03.auth/5.2fa.md b/content/guides/03.auth/5.2fa.md
index 1215cdb9a..3312ac153 100644
--- a/content/guides/03.auth/5.2fa.md
+++ b/content/guides/03.auth/5.2fa.md
@@ -1,4 +1,5 @@
---
+stableId: 56c44b88-7e4a-4dbd-9aed-3aeb2de2a7ae
title: Two-Factor Authentication
description: Secure your logins with one-time codes! Learn how to generate secrets, enable/disable 2FA.
navigation:
diff --git a/content/guides/03.auth/6.accountability.md b/content/guides/03.auth/6.accountability.md
index 51e471f32..c0aae9079 100644
--- a/content/guides/03.auth/6.accountability.md
+++ b/content/guides/03.auth/6.accountability.md
@@ -1,4 +1,5 @@
---
+stableId: e48e5f3b-aecc-48b6-bded-e851179f94ba
title: Accountability
description: Learn to audit user activity and enforce accountability using the activity feed.
---
diff --git a/content/guides/03.auth/7.sso/1.index.md b/content/guides/03.auth/7.sso/1.index.md
index 12851b1fb..d5f8542c4 100644
--- a/content/guides/03.auth/7.sso/1.index.md
+++ b/content/guides/03.auth/7.sso/1.index.md
@@ -1,4 +1,5 @@
---
+stableId: a30a9f55-f9c8-4f1e-97b4-79a27c72b8d3
title: Single Sign-On
description: Single Sign-On is a mechanism which allows to use external providers to login into systems.
---
diff --git a/content/guides/03.auth/7.sso/2.seamless.md b/content/guides/03.auth/7.sso/2.seamless.md
index d27b74949..7b7f3386c 100644
--- a/content/guides/03.auth/7.sso/2.seamless.md
+++ b/content/guides/03.auth/7.sso/2.seamless.md
@@ -1,4 +1,5 @@
---
+stableId: 4144daa1-f064-469f-968a-5369bb467c5d
title: Seamless SSO
headline: Auth
description: Seamless SSO is a setup to allow logging in without the user ever seeing Directus' login page.
diff --git a/content/guides/04.connect/1.authentication.md b/content/guides/04.connect/1.authentication.md
index 9c2dee0c8..589f5030a 100644
--- a/content/guides/04.connect/1.authentication.md
+++ b/content/guides/04.connect/1.authentication.md
@@ -1,4 +1,5 @@
---
+stableId: 56bba129-54c3-48d4-920a-20e1d38bd36e
title: Authentication
description: Discover how to authenticate Directus Connect requests using authorization headers, session cookies, or query parameters.
---
diff --git a/content/guides/04.connect/2.filter-rules.md b/content/guides/04.connect/2.filter-rules.md
index f94b5ba8c..a32268d86 100644
--- a/content/guides/04.connect/2.filter-rules.md
+++ b/content/guides/04.connect/2.filter-rules.md
@@ -1,4 +1,5 @@
---
+stableId: baadda49-02b9-4a77-8c45-b5c6e4407721
title: Filter Rules
description: Learn about filter rules in Directus - available operators, filter syntax, relational fields, dynamic variables, logical operators, and functions parameters. Understand how to build complex filters for permissions, validations, and automations.
---
diff --git a/content/guides/04.connect/3.query-parameters.md b/content/guides/04.connect/3.query-parameters.md
index bc18b5462..d7ad409e3 100644
--- a/content/guides/04.connect/3.query-parameters.md
+++ b/content/guides/04.connect/3.query-parameters.md
@@ -1,4 +1,5 @@
---
+stableId: 2627d8eb-784f-4197-8d66-f180347d1b4d
title: Query Parameters
description: Learn about Directus query parameters - fields, filter, search, sort, limit, offset, page, aggregate, groupBy, deep, alias, and export. Understand how to customize your API requests and retrieve specific data from your collections.
---
diff --git a/content/guides/04.connect/4.relations.md b/content/guides/04.connect/4.relations.md
index c97466cc2..091cb694b 100644
--- a/content/guides/04.connect/4.relations.md
+++ b/content/guides/04.connect/4.relations.md
@@ -1,4 +1,5 @@
---
+stableId: 5d5b8dc8-7d4f-4548-9c81-a5b59cece548
title: Relational Data
description: Directus enables you to manage and interact with relational data. This section will guide you through the different types of relationships and how to work with them.
---
diff --git a/content/guides/04.connect/5.errors.md b/content/guides/04.connect/5.errors.md
index 9aaa35173..197815f68 100644
--- a/content/guides/04.connect/5.errors.md
+++ b/content/guides/04.connect/5.errors.md
@@ -1,4 +1,5 @@
---
+stableId: bcae2f68-6534-45df-8085-5a2c0d6e20c5
title: Error Codes
description: Learn about Directus error codes - understand what each code means, from validation failures to rate limits exceeded. Troubleshoot issues with your API requests and resolve errors efficiently.
---
diff --git a/content/guides/04.connect/6.sdk.md b/content/guides/04.connect/6.sdk.md
index 8e432b01e..2124b2b2c 100644
--- a/content/guides/04.connect/6.sdk.md
+++ b/content/guides/04.connect/6.sdk.md
@@ -1,4 +1,5 @@
---
+stableId: b885914d-05a2-4f77-aea7-5c58c232af9b
title: Directus SDK
description: A JavaScript and TypeScript library that simplifies working with Directus.
---
diff --git a/content/guides/05.files/1.upload.md b/content/guides/05.files/1.upload.md
index 0414856d2..311d40e18 100644
--- a/content/guides/05.files/1.upload.md
+++ b/content/guides/05.files/1.upload.md
@@ -1,4 +1,5 @@
---
+stableId: 8f50f30f-29b0-4db3-a99c-bdf178bd0508
title: Upload Files
description: Learn to upload files to Directus via both the data studio or API.
---
diff --git a/content/guides/05.files/2.download.md b/content/guides/05.files/2.download.md
index e7822b46e..425a1b99f 100644
--- a/content/guides/05.files/2.download.md
+++ b/content/guides/05.files/2.download.md
@@ -1,4 +1,5 @@
---
+stableId: d7a4c61f-8f81-45d4-9939-19e1a15f931c
title: Download Files
description: Learn to download content from the File Library
---
diff --git a/content/guides/05.files/3.manage.md b/content/guides/05.files/3.manage.md
index 1c25814e3..c48c58e34 100644
--- a/content/guides/05.files/3.manage.md
+++ b/content/guides/05.files/3.manage.md
@@ -1,4 +1,5 @@
---
+stableId: 29931fc0-1926-46ac-9747-e9980ef8381c
title: Manage Files
description: Learn to view, modify, edit and set files' focal points.
---
diff --git a/content/guides/05.files/4.access.md b/content/guides/05.files/4.access.md
index cf7ae03bc..3f513e21d 100644
--- a/content/guides/05.files/4.access.md
+++ b/content/guides/05.files/4.access.md
@@ -1,4 +1,5 @@
---
+stableId: 5ebd040b-f8a5-4ede-9046-db230d931a56
title: Access Files
description: Learn how to access uploaded files, authenticate, provide optional filenames and directly download them.
---
diff --git a/content/guides/05.files/5.transform.md b/content/guides/05.files/5.transform.md
index 101b50703..d951a8aca 100644
--- a/content/guides/05.files/5.transform.md
+++ b/content/guides/05.files/5.transform.md
@@ -1,4 +1,5 @@
---
+stableId: ac573971-6bd3-471e-9dc1-409dbb1f84aa
title: Transform Files
description: Learn how to transform files and set custom presets for these transformations.
---
diff --git a/content/guides/06.automate/1.flows.md b/content/guides/06.automate/1.flows.md
index 3bc59a997..62935d946 100644
--- a/content/guides/06.automate/1.flows.md
+++ b/content/guides/06.automate/1.flows.md
@@ -1,4 +1,5 @@
---
+stableId: 642414c2-5606-4d45-8e74-a0cfe7f6217f
title: Flows
description: Flows enable custom, event-driven data processing and task automation within Directus.
---
diff --git a/content/guides/06.automate/2.data-chain.md b/content/guides/06.automate/2.data-chain.md
index 100e28c03..491fee304 100644
--- a/content/guides/06.automate/2.data-chain.md
+++ b/content/guides/06.automate/2.data-chain.md
@@ -1,4 +1,5 @@
---
+stableId: 7dcdfd8b-af4f-4e57-bf18-b2b761495de8
title: Data Chain
description: Data chains are created by each flow and hold information that can be accessed within different operations.
---
diff --git a/content/guides/06.automate/3.triggers.md b/content/guides/06.automate/3.triggers.md
index 8558e08eb..8157d5283 100644
--- a/content/guides/06.automate/3.triggers.md
+++ b/content/guides/06.automate/3.triggers.md
@@ -1,4 +1,5 @@
---
+stableId: 1628fa36-c59b-48f4-9311-89b0de94c3da
title: Triggers
description: Triggers define the action or events that start flows.
---
diff --git a/content/guides/06.automate/4.operations.md b/content/guides/06.automate/4.operations.md
index 6bf1f7253..a4228d0e8 100644
--- a/content/guides/06.automate/4.operations.md
+++ b/content/guides/06.automate/4.operations.md
@@ -1,4 +1,5 @@
---
+stableId: aa3e84d5-afab-401d-9d84-1b88bc0a525a
title: Operations
description: Operations are individual customizable actions in a flow.
---
diff --git a/content/guides/07.realtime/1.authentication.md b/content/guides/07.realtime/1.authentication.md
index 6726220ea..000611350 100644
--- a/content/guides/07.realtime/1.authentication.md
+++ b/content/guides/07.realtime/1.authentication.md
@@ -1,4 +1,5 @@
---
+stableId: c569716c-9e9b-4b97-b3f7-eb515ead59be
title: Authentication
description: Learn to implement the three authentication modes.
---
diff --git a/content/guides/07.realtime/2.subscriptions.md b/content/guides/07.realtime/2.subscriptions.md
index 75d64b97a..1b2a87780 100644
--- a/content/guides/07.realtime/2.subscriptions.md
+++ b/content/guides/07.realtime/2.subscriptions.md
@@ -1,4 +1,5 @@
---
+stableId: d06ba75a-4d5a-4a31-8632-1b256d28966b
title: Subscriptions
description: Learn to manage realtime subscriptions with both websockets and GraphQL.
---
diff --git a/content/guides/07.realtime/3.actions.md b/content/guides/07.realtime/3.actions.md
index 86827211a..80bad8e24 100644
--- a/content/guides/07.realtime/3.actions.md
+++ b/content/guides/07.realtime/3.actions.md
@@ -1,4 +1,5 @@
---
+stableId: 5139aa8d-2f0c-442f-86ef-eb29e7f0b61d
title: Actions
description: Learn to execute CRUD actions via websockets.
---
diff --git a/content/guides/07.realtime/4.custom-handlers.md b/content/guides/07.realtime/4.custom-handlers.md
index 3b7a85c75..b233b7b10 100644
--- a/content/guides/07.realtime/4.custom-handlers.md
+++ b/content/guides/07.realtime/4.custom-handlers.md
@@ -1,4 +1,5 @@
---
+stableId: 560431a7-f9b0-48e9-8390-9b119c6e7258
title: Custom WebSocket Handlers
description: Build custom WebSocket message handlers, push messages to connected clients, and react to WebSocket events using hook extensions.
---
diff --git a/content/guides/08.insights/1.overview.md b/content/guides/08.insights/1.overview.md
index fbd47d18b..5dfc077d7 100644
--- a/content/guides/08.insights/1.overview.md
+++ b/content/guides/08.insights/1.overview.md
@@ -1,4 +1,5 @@
---
+stableId: accf8981-3ed3-4eb0-947b-4402fcc935e4
title: Insights Overview
description: Insights is a module in Directus that allows rapid, no-code build-out of analytics dashboards.
navigation:
diff --git a/content/guides/08.insights/2.panels.md b/content/guides/08.insights/2.panels.md
index fd9475f54..967077203 100644
--- a/content/guides/08.insights/2.panels.md
+++ b/content/guides/08.insights/2.panels.md
@@ -1,4 +1,5 @@
---
+stableId: bb376071-b7ed-4633-9516-913a325278b1
title: Panels
description: Panels are the building-blocks you can add onto insights dashboards to create, save and display data analytics.
---
diff --git a/content/guides/09.extensions/0.overview.md b/content/guides/09.extensions/0.overview.md
index 7b049313d..602552eb1 100644
--- a/content/guides/09.extensions/0.overview.md
+++ b/content/guides/09.extensions/0.overview.md
@@ -1,4 +1,5 @@
---
+stableId: cc2439e1-caa6-4500-96f1-15d480a28fd0
title: Extensions Overview
description: Extensions are used to extend the functionality of Directus.
navigation:
diff --git a/content/guides/09.extensions/1.quickstart.md b/content/guides/09.extensions/1.quickstart.md
index e10b6b040..81a5aae52 100644
--- a/content/guides/09.extensions/1.quickstart.md
+++ b/content/guides/09.extensions/1.quickstart.md
@@ -1,4 +1,5 @@
---
+stableId: e175bade-fb1e-4204-af9d-d6fc31cceb12
title: Extensions Quickstart
description: This guide will cover how to get started with developing an extension for Directus.
navigation:
diff --git a/content/guides/09.extensions/2.api-extensions/0.index.md b/content/guides/09.extensions/2.api-extensions/0.index.md
index b47d1c023..bb7e7d68a 100644
--- a/content/guides/09.extensions/2.api-extensions/0.index.md
+++ b/content/guides/09.extensions/2.api-extensions/0.index.md
@@ -1,4 +1,5 @@
---
+stableId: ec925964-40e8-47db-9501-886619d00696
title: API Extensions Overview
description: API Extensions extend the functionality of the API.
navigation:
diff --git a/content/guides/09.extensions/2.api-extensions/1.hooks.md b/content/guides/09.extensions/2.api-extensions/1.hooks.md
index d3bfe4a92..e8d8c92a8 100644
--- a/content/guides/09.extensions/2.api-extensions/1.hooks.md
+++ b/content/guides/09.extensions/2.api-extensions/1.hooks.md
@@ -1,4 +1,5 @@
---
+stableId: d97a2cc1-8c8d-4307-996e-0676d84a5879
title: Event Hooks
headline: API Extensions
description: Hooks allow running code when during the Directus lifecycle or database events.
diff --git a/content/guides/09.extensions/2.api-extensions/2.endpoints.md b/content/guides/09.extensions/2.api-extensions/2.endpoints.md
index 7433a6dfc..b5f7c7721 100644
--- a/content/guides/09.extensions/2.api-extensions/2.endpoints.md
+++ b/content/guides/09.extensions/2.api-extensions/2.endpoints.md
@@ -1,4 +1,5 @@
---
+stableId: a61a27be-94ad-400c-845b-60566e3aed94
title: API Endpoints
headline: API Extensions
description: Endpoints allow you to register new API routes in your Directus project.
diff --git a/content/guides/09.extensions/2.api-extensions/3.operations.md b/content/guides/09.extensions/2.api-extensions/3.operations.md
index 0b7e5712a..e39920caa 100644
--- a/content/guides/09.extensions/2.api-extensions/3.operations.md
+++ b/content/guides/09.extensions/2.api-extensions/3.operations.md
@@ -1,4 +1,5 @@
---
+stableId: 597b3ff4-8ccc-43aa-b222-4dc3adc22775
title: Flow Operations
headline: API Extensions
description: Operations are single steps in a Flow - the no-code automation tool part of Directus Automate.
diff --git a/content/guides/09.extensions/2.api-extensions/4.services.md b/content/guides/09.extensions/2.api-extensions/4.services.md
index c244e679f..c9b775a0d 100644
--- a/content/guides/09.extensions/2.api-extensions/4.services.md
+++ b/content/guides/09.extensions/2.api-extensions/4.services.md
@@ -1,4 +1,5 @@
---
+stableId: 6b09c636-8e26-4842-b91f-423beea984ec
title: Services
headline: API Extensions
description: When building extensions, you may use internal Directus services directly.
diff --git a/content/guides/09.extensions/2.api-extensions/5.sandbox.md b/content/guides/09.extensions/2.api-extensions/5.sandbox.md
index 81f4235aa..3b76b7f14 100644
--- a/content/guides/09.extensions/2.api-extensions/5.sandbox.md
+++ b/content/guides/09.extensions/2.api-extensions/5.sandbox.md
@@ -1,4 +1,5 @@
---
+stableId: 6ccec4ec-f3d3-4c6a-9a26-815a3e8914bf
title: Sandbox
headline: API Extensions
description: Sandboxed Extensions run in an isolated environment and must request permission scopes.
diff --git a/content/guides/09.extensions/3.app-extensions/0.index.md b/content/guides/09.extensions/3.app-extensions/0.index.md
index bab8a8707..c9ecf32e3 100644
--- a/content/guides/09.extensions/3.app-extensions/0.index.md
+++ b/content/guides/09.extensions/3.app-extensions/0.index.md
@@ -1,4 +1,5 @@
---
+stableId: be11f329-b043-482a-899f-f0fc410fa4a8
title: App Extensions Overview
description: App Extensions extend the functionality of the Data Studio.
navigation:
diff --git a/content/guides/09.extensions/3.app-extensions/1.interfaces.md b/content/guides/09.extensions/3.app-extensions/1.interfaces.md
index 5f55dace3..d38f63776 100644
--- a/content/guides/09.extensions/3.app-extensions/1.interfaces.md
+++ b/content/guides/09.extensions/3.app-extensions/1.interfaces.md
@@ -1,4 +1,5 @@
---
+stableId: f31f1e62-6850-4f45-92ae-1d73ad4f2e5b
title: Editor Interfaces
description: Interfaces are form inputs used primarily inside of the Directus Editor.
---
diff --git a/content/guides/09.extensions/3.app-extensions/2.displays.md b/content/guides/09.extensions/3.app-extensions/2.displays.md
index 2418b3e7d..0858758c6 100644
--- a/content/guides/09.extensions/3.app-extensions/2.displays.md
+++ b/content/guides/09.extensions/3.app-extensions/2.displays.md
@@ -1,4 +1,5 @@
---
+stableId: 5eb08220-e42f-4753-ae1d-f1304da921a1
title: Inline Displays
description: Displays are used to display a single value throughout the Data Studio.
---
diff --git a/content/guides/09.extensions/3.app-extensions/3.layouts.md b/content/guides/09.extensions/3.app-extensions/3.layouts.md
index e0444ba4d..c98ce7834 100644
--- a/content/guides/09.extensions/3.app-extensions/3.layouts.md
+++ b/content/guides/09.extensions/3.app-extensions/3.layouts.md
@@ -1,4 +1,5 @@
---
+stableId: 77b61d9a-322c-44b5-be14-cdb3cf10f542
title: Explore Layouts
description: Layouts are used to display a list of items in Explore pages in different ways.
---
diff --git a/content/guides/09.extensions/3.app-extensions/4.panels.md b/content/guides/09.extensions/3.app-extensions/4.panels.md
index 6ed7a00a4..a01b08035 100644
--- a/content/guides/09.extensions/3.app-extensions/4.panels.md
+++ b/content/guides/09.extensions/3.app-extensions/4.panels.md
@@ -1,4 +1,5 @@
---
+stableId: 6acd5ea3-d9e1-411a-a909-dc6ef659da0b
title: Dashboard Panels
description: Panels are customizable components within Directus Insights dashboards.
---
diff --git a/content/guides/09.extensions/3.app-extensions/5.modules.md b/content/guides/09.extensions/3.app-extensions/5.modules.md
index e81231537..b6464d644 100644
--- a/content/guides/09.extensions/3.app-extensions/5.modules.md
+++ b/content/guides/09.extensions/3.app-extensions/5.modules.md
@@ -1,4 +1,5 @@
---
+stableId: 7494d9f0-66f6-4f16-930c-46717bfdaa86
title: Custom Modules
description: Modules are top-level areas of the Data Studio, navigated to from the left-hand module bar.
---
diff --git a/content/guides/09.extensions/3.app-extensions/6.themes.md b/content/guides/09.extensions/3.app-extensions/6.themes.md
index 44fac18fd..6a47cb4e0 100644
--- a/content/guides/09.extensions/3.app-extensions/6.themes.md
+++ b/content/guides/09.extensions/3.app-extensions/6.themes.md
@@ -1,4 +1,5 @@
---
+stableId: a0619041-cb5e-4416-b57f-3ba17f095e57
title: Custom Themes
description: Themes are used to style elements of the Data Studio including colors and fonts.
---
diff --git a/content/guides/09.extensions/3.app-extensions/7.ui-library.md b/content/guides/09.extensions/3.app-extensions/7.ui-library.md
index 84f9734d1..25ab46ecd 100644
--- a/content/guides/09.extensions/3.app-extensions/7.ui-library.md
+++ b/content/guides/09.extensions/3.app-extensions/7.ui-library.md
@@ -1,4 +1,5 @@
---
+stableId: b1ea975a-6480-4e1c-85d6-5edf84dfca9c
title: UI Library
description: Directus offers globally-registered UI components for building extensions.
---
diff --git a/content/guides/09.extensions/3.app-extensions/8.composables.md b/content/guides/09.extensions/3.app-extensions/8.composables.md
index 8e5d736ae..64ff591c0 100644
--- a/content/guides/09.extensions/3.app-extensions/8.composables.md
+++ b/content/guides/09.extensions/3.app-extensions/8.composables.md
@@ -1,4 +1,5 @@
---
+stableId: 3c61bdba-aae6-46e0-8d2d-402b0d6d9159
title: Composables
description: Vue composables for working with Directus services when building extensions.
---
diff --git a/content/guides/09.extensions/4.bundles.md b/content/guides/09.extensions/4.bundles.md
index 3ac940078..58afa1120 100644
--- a/content/guides/09.extensions/4.bundles.md
+++ b/content/guides/09.extensions/4.bundles.md
@@ -1,4 +1,5 @@
---
+stableId: 801247e7-b6af-4bf7-ae1c-45a9635cec29
title: Bundling Extensions
description: Bundles are a way to group extensions together as a single distributable package.
---
diff --git a/content/guides/09.extensions/5.marketplace/0.index.md b/content/guides/09.extensions/5.marketplace/0.index.md
index af0c6dbba..26ec33761 100644
--- a/content/guides/09.extensions/5.marketplace/0.index.md
+++ b/content/guides/09.extensions/5.marketplace/0.index.md
@@ -1,4 +1,5 @@
---
+stableId: 4f45772c-5daf-4e5d-a9ac-c6cf0e1fdb29
title: Marketplace Beta
description: The Directus Marketplace provides a way for users to install extensions in their projects directly the Data Studio.
---
diff --git a/content/guides/09.extensions/5.marketplace/1.publishing.md b/content/guides/09.extensions/5.marketplace/1.publishing.md
index 247c51370..46f3b3bbb 100644
--- a/content/guides/09.extensions/5.marketplace/1.publishing.md
+++ b/content/guides/09.extensions/5.marketplace/1.publishing.md
@@ -1,4 +1,5 @@
---
+stableId: 2571d70d-09a6-4722-a706-9a81a176d099
title: Publishing Extensions
description: Publish extensions to the Directus Marketplace via npm, including required metadata, best practices, and author profile setup.
---
diff --git a/content/guides/09.extensions/6.cli.md b/content/guides/09.extensions/6.cli.md
index a022ed1ea..627945dbd 100644
--- a/content/guides/09.extensions/6.cli.md
+++ b/content/guides/09.extensions/6.cli.md
@@ -1,4 +1,5 @@
---
+stableId: fe1ceb1a-db06-4c39-80cd-c80d33ca13c4
title: CLI
description: Using the create-directus-extension to build, validate and manage extensions.
---
diff --git a/content/guides/10.deployments/0.index.md b/content/guides/10.deployments/0.index.md
index fef9eadb7..1269f1d04 100644
--- a/content/guides/10.deployments/0.index.md
+++ b/content/guides/10.deployments/0.index.md
@@ -1,4 +1,5 @@
---
+stableId: b1f79af2-3765-45f3-b9a4-b4b9ce9213a7
title: Overview
description: Trigger, monitor, and manage frontend deployments directly from Directus.
---
diff --git a/content/guides/10.deployments/1.security.md b/content/guides/10.deployments/1.security.md
index 18baf2a05..252063011 100644
--- a/content/guides/10.deployments/1.security.md
+++ b/content/guides/10.deployments/1.security.md
@@ -1,4 +1,5 @@
---
+stableId: b5022aa4-455e-44e5-8d50-78f3d5a3edb1
title: Security
description: Access control, permissions, and credential protection for the Deployment module.
headline: Deployments
diff --git a/content/guides/11.ai/0.index.md b/content/guides/11.ai/0.index.md
index c5e485361..8e70f3a81 100644
--- a/content/guides/11.ai/0.index.md
+++ b/content/guides/11.ai/0.index.md
@@ -1,4 +1,5 @@
---
+stableId: aff68140-bbee-4a00-8482-4ada9fa36e2e
title: AI + Directus
description: Use AI to interact with Directus - either through the built-in AI Assistant or by connecting external AI tools via MCP.
---
diff --git a/content/guides/11.ai/1.assistant/0.index.md b/content/guides/11.ai/1.assistant/0.index.md
index 5b0625a71..9937dd992 100644
--- a/content/guides/11.ai/1.assistant/0.index.md
+++ b/content/guides/11.ai/1.assistant/0.index.md
@@ -1,4 +1,5 @@
---
+stableId: 4de39688-a329-42a1-ae29-315d652e74a2
title: Overview
description: Chat with an AI assistant directly inside Directus. Create content, manage your schema, trigger automations, and explore your data through natural conversation.
---
diff --git a/content/guides/11.ai/1.assistant/1.setup.md b/content/guides/11.ai/1.assistant/1.setup.md
index c76a9469c..69bba2376 100644
--- a/content/guides/11.ai/1.assistant/1.setup.md
+++ b/content/guides/11.ai/1.assistant/1.setup.md
@@ -1,4 +1,5 @@
---
+stableId: df180438-7813-4aff-a7c0-a360932663bd
title: Setup
description: Configure AI Assistant by adding your AI provider API keys and customizing assistant behavior.
headline: AI Assistant
diff --git a/content/guides/11.ai/1.assistant/2.usage.md b/content/guides/11.ai/1.assistant/2.usage.md
index b14562fe9..cfe2f65a4 100644
--- a/content/guides/11.ai/1.assistant/2.usage.md
+++ b/content/guides/11.ai/1.assistant/2.usage.md
@@ -1,4 +1,5 @@
---
+stableId: 45fca6cb-4a0f-49a6-8cb2-5555d0eab323
title: Usage
description: Learn how to use AI Assistant to interact with your Directus instance through natural conversation.
headline: AI Assistant
diff --git a/content/guides/11.ai/1.assistant/3.tools.md b/content/guides/11.ai/1.assistant/3.tools.md
index 93c256a47..889ec811b 100644
--- a/content/guides/11.ai/1.assistant/3.tools.md
+++ b/content/guides/11.ai/1.assistant/3.tools.md
@@ -1,4 +1,5 @@
---
+stableId: 81c50c77-8f91-40f1-a807-5e734d3bc478
title: Tools
description: Reference of all tools available to AI Assistant for interacting with your Directus instance.
headline: AI Assistant
diff --git a/content/guides/11.ai/1.assistant/4.tips.md b/content/guides/11.ai/1.assistant/4.tips.md
index 3c98b6eec..256ad451b 100644
--- a/content/guides/11.ai/1.assistant/4.tips.md
+++ b/content/guides/11.ai/1.assistant/4.tips.md
@@ -1,4 +1,5 @@
---
+stableId: 73a56781-fbb5-4579-b117-b38b767fb61e
title: Best Practices
description: Get the most out of AI Assistant with practical tips, example prompts, and common pitfalls to avoid.
headline: AI Assistant
diff --git a/content/guides/11.ai/1.assistant/5.security.md b/content/guides/11.ai/1.assistant/5.security.md
index d2959be80..6af8c13af 100644
--- a/content/guides/11.ai/1.assistant/5.security.md
+++ b/content/guides/11.ai/1.assistant/5.security.md
@@ -1,4 +1,5 @@
---
+stableId: eab8722d-2bb0-4bc6-b299-781230e54485
title: Security
description: Security considerations for using AI Assistant safely with your Directus data.
headline: AI Assistant
diff --git a/content/guides/11.ai/2.mcp/0.index.md b/content/guides/11.ai/2.mcp/0.index.md
index c23e7c308..935e916ca 100644
--- a/content/guides/11.ai/2.mcp/0.index.md
+++ b/content/guides/11.ai/2.mcp/0.index.md
@@ -1,4 +1,5 @@
---
+stableId: 91f4d2fc-286d-47c0-8942-68af505ce679
title: Overview
description: Connect AI assistants directly to your Directus instance. Let Claude, ChatGPT, and other AI tools manage your content without manual copy-pasting.
---
diff --git a/content/guides/11.ai/2.mcp/1.installation.md b/content/guides/11.ai/2.mcp/1.installation.md
index aeb1835df..9b4186991 100644
--- a/content/guides/11.ai/2.mcp/1.installation.md
+++ b/content/guides/11.ai/2.mcp/1.installation.md
@@ -1,4 +1,5 @@
---
+stableId: 4990e207-3bb9-4675-871c-194de2059369
title: Installation
description: Set up the Directus MCP server and connect your AI tools in under 5 minutes.
headline: MCP Server
diff --git a/content/guides/11.ai/2.mcp/2.use-cases.md b/content/guides/11.ai/2.mcp/2.use-cases.md
index d0757f3e0..92d7f9627 100644
--- a/content/guides/11.ai/2.mcp/2.use-cases.md
+++ b/content/guides/11.ai/2.mcp/2.use-cases.md
@@ -1,4 +1,5 @@
---
+stableId: 40f15f0b-090a-48f4-8c93-9e5906e6f687
title: Use Cases
description: Real examples of how to use AI with your Directus content to save time and reduce repetitive work.
headline: MCP Server
diff --git a/content/guides/11.ai/2.mcp/3.tools.md b/content/guides/11.ai/2.mcp/3.tools.md
index e1b8b4137..68bb0212e 100644
--- a/content/guides/11.ai/2.mcp/3.tools.md
+++ b/content/guides/11.ai/2.mcp/3.tools.md
@@ -1,4 +1,5 @@
---
+stableId: 5f9a10e8-ca15-4e6d-ae55-fb03d9b13111
title: Tools
headline: MCP Server
description: Learn about the tools available in the Directus remote MCP server and how they enable AI-powered content management.
diff --git a/content/guides/11.ai/2.mcp/4.prompts.md b/content/guides/11.ai/2.mcp/4.prompts.md
index c76a340f2..c7d33a556 100644
--- a/content/guides/11.ai/2.mcp/4.prompts.md
+++ b/content/guides/11.ai/2.mcp/4.prompts.md
@@ -1,4 +1,5 @@
---
+stableId: 67aace3d-b54f-46d7-a494-52d346611522
title: Prompts
description: Learn how to configure and use stored prompts with the Directus MCP Server.
headline: MCP Server
diff --git a/content/guides/11.ai/2.mcp/5.troubleshooting.md b/content/guides/11.ai/2.mcp/5.troubleshooting.md
index 3cb18d656..871686dc1 100644
--- a/content/guides/11.ai/2.mcp/5.troubleshooting.md
+++ b/content/guides/11.ai/2.mcp/5.troubleshooting.md
@@ -1,4 +1,5 @@
---
+stableId: 5df0d961-1196-4dce-b8fb-7b5b672e3f88
title: Troubleshooting
description: Common issues and solutions when setting up and using the Directus MCP server.
headline: MCP Server
diff --git a/content/guides/11.ai/2.mcp/6.security.md b/content/guides/11.ai/2.mcp/6.security.md
index 678d13a4e..9295c1987 100644
--- a/content/guides/11.ai/2.mcp/6.security.md
+++ b/content/guides/11.ai/2.mcp/6.security.md
@@ -1,4 +1,5 @@
---
+stableId: 9c2ad065-7f89-45a2-8ced-aeb222ee2b3e
title: Security
description: Practical security guidelines for using the Directus MCP server safely and protecting your data.
headline: MCP Server
diff --git a/content/guides/11.ai/2.mcp/7.local-mcp/0.index.md b/content/guides/11.ai/2.mcp/7.local-mcp/0.index.md
index 447203c15..4075cec32 100644
--- a/content/guides/11.ai/2.mcp/7.local-mcp/0.index.md
+++ b/content/guides/11.ai/2.mcp/7.local-mcp/0.index.md
@@ -1,4 +1,5 @@
---
+stableId: 379162f5-be98-4608-8833-db92a7f39599
title: Installation
description: The Directus Content MCP Server allows you to interact with your Directus data through AI tools using the Model Context Protocol.
---
diff --git a/content/guides/11.ai/2.mcp/7.local-mcp/1.tools.md b/content/guides/11.ai/2.mcp/7.local-mcp/1.tools.md
index 440fdae55..827495584 100644
--- a/content/guides/11.ai/2.mcp/7.local-mcp/1.tools.md
+++ b/content/guides/11.ai/2.mcp/7.local-mcp/1.tools.md
@@ -1,4 +1,5 @@
---
+stableId: d368fdf7-2ed1-4409-b813-7aa13e0b23a3
title: Tools
headline: Local MCP
description: Learn about the tools available in the local Directus Content MCP Server and how to configure them.
diff --git a/content/guides/11.ai/2.mcp/7.local-mcp/2.prompts.md b/content/guides/11.ai/2.mcp/7.local-mcp/2.prompts.md
index 61e69c277..84ff957d1 100644
--- a/content/guides/11.ai/2.mcp/7.local-mcp/2.prompts.md
+++ b/content/guides/11.ai/2.mcp/7.local-mcp/2.prompts.md
@@ -1,4 +1,5 @@
---
+stableId: 203ee773-d2b3-431e-b6e0-be8083a360eb
title: Prompts
description: Configure stored prompts with the local MCP server using environment variables and manual collection setup.
headline: Local MCP
diff --git a/content/guides/11.integrations/6.framer/0.index.md b/content/guides/11.integrations/6.framer/0.index.md
index 6f7ed44e5..ddd01560e 100644
--- a/content/guides/11.integrations/6.framer/0.index.md
+++ b/content/guides/11.integrations/6.framer/0.index.md
@@ -1,4 +1,5 @@
---
+stableId: 80cfaa13-b6eb-4533-9c27-63f888003f47
id: framer-integration
title: Framer
description: Connect your Directus collections to Framer's CMS to sync content in both directions using the Directus Framer plugin.
diff --git a/content/guides/12.integrations/1.n8n/0.index.md b/content/guides/12.integrations/1.n8n/0.index.md
index 51a0574c0..3fb69545a 100644
--- a/content/guides/12.integrations/1.n8n/0.index.md
+++ b/content/guides/12.integrations/1.n8n/0.index.md
@@ -1,4 +1,5 @@
---
+stableId: 3e715811-677e-43b3-acaa-816e129c2fb9
id: n8n-integration
title: Integration
description: Connect Directus with n8n to automate workflows, sync data, and integrate your CMS with other services using the Directus community node.
diff --git a/content/guides/12.integrations/1.n8n/directus-n8n-actions.md b/content/guides/12.integrations/1.n8n/directus-n8n-actions.md
index c51c4f9ce..dc3cde7c4 100644
--- a/content/guides/12.integrations/1.n8n/directus-n8n-actions.md
+++ b/content/guides/12.integrations/1.n8n/directus-n8n-actions.md
@@ -1,4 +1,5 @@
---
+stableId: d39e90fa-abde-460a-b0ec-b054ff4c7aae
id: directus-n8n-actions
title: Actions
description: Complete guide for using Directus actions in n8n workflows, including working with items, users, and files.
diff --git a/content/guides/12.integrations/1.n8n/directus-n8n-advanced.md b/content/guides/12.integrations/1.n8n/directus-n8n-advanced.md
index b5b48c9b1..d414ee10d 100644
--- a/content/guides/12.integrations/1.n8n/directus-n8n-advanced.md
+++ b/content/guides/12.integrations/1.n8n/directus-n8n-advanced.md
@@ -1,4 +1,5 @@
---
+stableId: d0f23ffe-6571-4a90-b193-9adae48d0ade
id: directus-n8n-advanced
title: Advanced
description: Advanced guide for using Directus raw CRUD operations in n8n, including raw JSON operations, complex filters, relational queries, and query parameters.
diff --git a/content/guides/12.integrations/1.n8n/directus-n8n-triggers.md b/content/guides/12.integrations/1.n8n/directus-n8n-triggers.md
index 6c2e740e7..b53625370 100644
--- a/content/guides/12.integrations/1.n8n/directus-n8n-triggers.md
+++ b/content/guides/12.integrations/1.n8n/directus-n8n-triggers.md
@@ -1,4 +1,5 @@
---
+stableId: 9c587bcf-6429-4425-ae5e-498b099ef013
id: directus-n8n-triggers
title: Triggers
description: Complete guide for using Directus triggers in n8n workflows to automate workflows when events happen in Directus.
diff --git a/content/guides/12.integrations/2.clay/0.index.md b/content/guides/12.integrations/2.clay/0.index.md
index 4368d453c..258fc8117 100644
--- a/content/guides/12.integrations/2.clay/0.index.md
+++ b/content/guides/12.integrations/2.clay/0.index.md
@@ -1,4 +1,5 @@
---
+stableId: 42c376ef-1c2e-4e6b-8150-48fa9696baac
id: clay-integration
title: Integration
description: Connect Directus with Clay to automate data enrichment and sync content between platforms using webhooks and HTTP API templates.
diff --git a/content/guides/12.integrations/2.clay/directus-clay-data-operations.md b/content/guides/12.integrations/2.clay/directus-clay-data-operations.md
index 48abdaed8..dc067f735 100644
--- a/content/guides/12.integrations/2.clay/directus-clay-data-operations.md
+++ b/content/guides/12.integrations/2.clay/directus-clay-data-operations.md
@@ -1,4 +1,5 @@
---
+stableId: d67089d8-4978-4b1d-a560-8a78cede576f
id: directus-clay-data-operations-tutorial
title: Data Operations
description: Advanced techniques for working with Directus data in Clay, including filters, pagination, common use cases, and best practices.
diff --git a/content/guides/12.integrations/2.clay/use-clay-templates-with-directus.md b/content/guides/12.integrations/2.clay/use-clay-templates-with-directus.md
index 3c373443e..a2fa5f879 100644
--- a/content/guides/12.integrations/2.clay/use-clay-templates-with-directus.md
+++ b/content/guides/12.integrations/2.clay/use-clay-templates-with-directus.md
@@ -1,4 +1,5 @@
---
+stableId: b4940c7f-b2ea-4653-92cf-ca33661ee0d9
id: clay-templates-directus-tutorial
title: Templates
description: Learn how to use Clay's pre-built HTTP API templates to connect with Directus for data enrichment and synchronization.
diff --git a/content/guides/12.integrations/2.clay/use-directus-webhooks-with-clay.md b/content/guides/12.integrations/2.clay/use-directus-webhooks-with-clay.md
index 136f5e5fe..8ad887624 100644
--- a/content/guides/12.integrations/2.clay/use-directus-webhooks-with-clay.md
+++ b/content/guides/12.integrations/2.clay/use-directus-webhooks-with-clay.md
@@ -1,4 +1,5 @@
---
+stableId: 98d549ef-58ea-43aa-ad7a-0ba0a3a5dba6
id: directus-webhooks-clay-tutorial
title: Webhooks
description: Learn how to set up Directus Flows to automatically send data to Clay webhooks for real-time data synchronization.
diff --git a/content/guides/12.integrations/3.zapier/0.index.md b/content/guides/12.integrations/3.zapier/0.index.md
index eb54b8c7d..ed258652a 100644
--- a/content/guides/12.integrations/3.zapier/0.index.md
+++ b/content/guides/12.integrations/3.zapier/0.index.md
@@ -1,4 +1,5 @@
---
+stableId: ea2adfba-54e9-429c-b4b2-3471f0188d1c
id: zapier-integration
title: Integration
description: Connect Directus with Zapier to automate workflows, sync data, and integrate your CMS with thousands of other apps using the Directus Zapier integration.
diff --git a/content/guides/12.integrations/3.zapier/actions.md b/content/guides/12.integrations/3.zapier/actions.md
index 41b141164..7d3e08476 100644
--- a/content/guides/12.integrations/3.zapier/actions.md
+++ b/content/guides/12.integrations/3.zapier/actions.md
@@ -1,4 +1,5 @@
---
+stableId: 5c521402-6427-4d52-90cb-e3a713344b73
id: zapier-actions
title: Actions
description: Complete guide for using Directus actions in Zapier workflows, including working with items, users, and files.
diff --git a/content/guides/12.integrations/3.zapier/advanced.md b/content/guides/12.integrations/3.zapier/advanced.md
index 77d3c9131..758c7c5bd 100644
--- a/content/guides/12.integrations/3.zapier/advanced.md
+++ b/content/guides/12.integrations/3.zapier/advanced.md
@@ -1,4 +1,5 @@
---
+stableId: 4fdd3809-41f8-40f6-b0e7-a35d8cd8b66b
id: zapier-advanced
title: Advanced
description: Advanced guide for using Directus API features in Zapier, including raw request actions, advanced filtering, and custom API calls.
diff --git a/content/guides/12.integrations/3.zapier/triggers.md b/content/guides/12.integrations/3.zapier/triggers.md
index 832667f01..8ed72f108 100644
--- a/content/guides/12.integrations/3.zapier/triggers.md
+++ b/content/guides/12.integrations/3.zapier/triggers.md
@@ -1,4 +1,5 @@
---
+stableId: 9c585659-1b1c-40c9-9f01-345976d911ca
id: zapier-triggers
title: Triggers
description: Complete guide for using Directus triggers in Zapier workflows to automatically start Zaps when events happen in Directus.
diff --git a/content/guides/12.integrations/4.vercel/0.index.md b/content/guides/12.integrations/4.vercel/0.index.md
index 1c5657024..385c9a7fa 100644
--- a/content/guides/12.integrations/4.vercel/0.index.md
+++ b/content/guides/12.integrations/4.vercel/0.index.md
@@ -1,4 +1,5 @@
---
+stableId: 48852857-0c2a-4c9b-bac1-4b40a9e5ef9f
id: vercel-integration
title: Vercel
description: Connect Directus with Vercel to trigger deployments, monitor build status, and manage your frontend projects directly from your Directus instance.
diff --git a/content/guides/12.integrations/4.vercel/deployments.md b/content/guides/12.integrations/4.vercel/deployments.md
index 92fa40886..48ec25e7a 100644
--- a/content/guides/12.integrations/4.vercel/deployments.md
+++ b/content/guides/12.integrations/4.vercel/deployments.md
@@ -1,4 +1,5 @@
---
+stableId: 89484f0c-4c1b-4320-ade9-2f2b91fce2bd
id: vercel-deployments
title: Deployments
description: Complete guide for triggering deployments, monitoring build status, and viewing logs for your Vercel projects from Directus.
diff --git a/content/guides/12.integrations/5.netlify/0.index.md b/content/guides/12.integrations/5.netlify/0.index.md
index aedae4cb0..7b5ab7998 100644
--- a/content/guides/12.integrations/5.netlify/0.index.md
+++ b/content/guides/12.integrations/5.netlify/0.index.md
@@ -1,4 +1,5 @@
---
+stableId: 0bdf33e1-c15d-4278-914c-21c4a2808481
id: netlify-integration
title: Netlify
description: Integrate Directus with Netlify to deploy your sites, track build progress, and manage frontend projects from within your Directus instance.
diff --git a/content/guides/12.integrations/5.netlify/deployments.md b/content/guides/12.integrations/5.netlify/deployments.md
index e76869a4f..cc45fba38 100644
--- a/content/guides/12.integrations/5.netlify/deployments.md
+++ b/content/guides/12.integrations/5.netlify/deployments.md
@@ -1,4 +1,5 @@
---
+stableId: 48becf46-6c52-47fe-88c2-12592449e70d
id: netlify-deployments
title: Deployments
description: Full guide for triggering builds, tracking deployment progress, and viewing logs for your Netlify sites from Directus.
diff --git a/content/guides/12.integrations/index.md b/content/guides/12.integrations/index.md
index 4c25db1a5..9bbb0414f 100644
--- a/content/guides/12.integrations/index.md
+++ b/content/guides/12.integrations/index.md
@@ -1,4 +1,5 @@
---
+stableId: fbb9c5ec-98ed-46dd-a88b-05f335c2a5f1
title: Integrations
description: Connect Directus with third-party tools and services to extend functionality and automate workflows.
---
diff --git a/content/guides/13.security/1.best-practices.md b/content/guides/13.security/1.best-practices.md
index 5e2f4b27f..b4e935a45 100644
--- a/content/guides/13.security/1.best-practices.md
+++ b/content/guides/13.security/1.best-practices.md
@@ -1,4 +1,5 @@
---
+stableId: 22409c28-3982-4e21-8a7d-ad521fab80f9
title: Security Best Practices
description: Harden a Directus project.
---
diff --git a/content/releases/1.index.md b/content/releases/1.index.md
index f2da9e2b6..5cd0f9bed 100644
--- a/content/releases/1.index.md
+++ b/content/releases/1.index.md
@@ -1,4 +1,5 @@
---
+stableId: c27fb12d-c305-4814-bcac-4a8b26e54921
title: Overview
description: Releases are how we roll out new features, updates, and fixes to Directus.
headline: Releases
diff --git a/content/releases/2.changelog.md b/content/releases/2.changelog.md
index 7d1f65dda..843e99061 100644
--- a/content/releases/2.changelog.md
+++ b/content/releases/2.changelog.md
@@ -1,4 +1,5 @@
---
+stableId: b28e12b3-a906-4907-b5e5-2f9c25a92d08
description: A monthly summary of what's new from the Directus team.
---
diff --git a/content/releases/3.breaking-changes/0.index.md b/content/releases/3.breaking-changes/0.index.md
index cf48a9915..4640ce11c 100644
--- a/content/releases/3.breaking-changes/0.index.md
+++ b/content/releases/3.breaking-changes/0.index.md
@@ -1,4 +1,5 @@
---
+stableId: d9f67929-7cb4-4157-83cc-d8f069e39092
title: Breaking Changes
description: Breaking changes may require action on your part before upgrading.
---
diff --git a/content/releases/3.breaking-changes/1.version-10.md b/content/releases/3.breaking-changes/1.version-10.md
index 5728963da..d9cbbca08 100644
--- a/content/releases/3.breaking-changes/1.version-10.md
+++ b/content/releases/3.breaking-changes/1.version-10.md
@@ -1,4 +1,5 @@
---
+stableId: 32504f20-f628-4396-be41-502ddba8fa8f
title: Version 10
description: Breaking changes may require action on your part before upgrading.
---
diff --git a/content/releases/3.breaking-changes/2.version-11.md b/content/releases/3.breaking-changes/2.version-11.md
index e31956b04..a5df957ea 100644
--- a/content/releases/3.breaking-changes/2.version-11.md
+++ b/content/releases/3.breaking-changes/2.version-11.md
@@ -1,4 +1,5 @@
---
+stableId: aa9dfda7-dbd6-4450-964e-d0823ccd6f27
title: Version 11
description: Breaking changes may require action on your part before upgrading.
---
diff --git a/content/self-hosting/1.overview.md b/content/self-hosting/1.overview.md
index 708c5307c..8a12c3896 100644
--- a/content/self-hosting/1.overview.md
+++ b/content/self-hosting/1.overview.md
@@ -1,4 +1,5 @@
---
+stableId: ab3592a3-6817-4fac-a38b-13fca7e11fe8
title: Self-Hosting Overview
navigation:
title: Overview
diff --git a/content/self-hosting/2.requirements.md b/content/self-hosting/2.requirements.md
index c650dc96b..9436a95af 100644
--- a/content/self-hosting/2.requirements.md
+++ b/content/self-hosting/2.requirements.md
@@ -1,4 +1,5 @@
---
+stableId: 1fbfd932-5de7-47dc-a8dd-b67f3778082f
title: Self-Hosting Requirements
description: This page outlines the requirements for self-hosting Directus.
navigation:
diff --git a/content/self-hosting/3.deploying.md b/content/self-hosting/3.deploying.md
index e55094ee4..7a4c6b0c1 100644
--- a/content/self-hosting/3.deploying.md
+++ b/content/self-hosting/3.deploying.md
@@ -1,4 +1,5 @@
---
+stableId: 603a9738-fc68-4182-accc-5a088b208f57
title: Deploying Directus
description: This section covers the deployment process of Directus, including environment variables, versioning, persistence, and initial admin user setup.
navigation:
diff --git a/content/self-hosting/4.upgrading.md b/content/self-hosting/4.upgrading.md
index 25605a2bb..d8e46cbf5 100644
--- a/content/self-hosting/4.upgrading.md
+++ b/content/self-hosting/4.upgrading.md
@@ -1,4 +1,5 @@
---
+stableId: bf227e79-de99-4b61-833b-e4971f743219
title: Upgrading Directus
description: Learn how to upgrade Directus to the latest version.
navigation:
diff --git a/content/self-hosting/5.including-extensions.md b/content/self-hosting/5.including-extensions.md
index 641fa52dc..394ab32df 100644
--- a/content/self-hosting/5.including-extensions.md
+++ b/content/self-hosting/5.including-extensions.md
@@ -1,4 +1,5 @@
---
+stableId: 3488211b-79aa-4d6d-ba58-56cb635968cf
title: Including Extensions
description: Learn how to include extensions in your self-hosted Directus project.
---
diff --git a/content/tutorials/1.getting-started/create-reusable-blocks-with-many-to-any-relationships.md b/content/tutorials/1.getting-started/create-reusable-blocks-with-many-to-any-relationships.md
index 60046b53a..5c61e5dc6 100644
--- a/content/tutorials/1.getting-started/create-reusable-blocks-with-many-to-any-relationships.md
+++ b/content/tutorials/1.getting-started/create-reusable-blocks-with-many-to-any-relationships.md
@@ -1,4 +1,5 @@
---
+stableId: 197ccca2-68af-47fa-b893-7c6bcb8e6209
id: 9176d1b6-c530-44f3-92b3-71f35ae80902
slug: create-reusable-blocks-with-many-to-any-relationships
title: Create Reusable Blocks with Many-to-Any Relationships
diff --git a/content/tutorials/1.getting-started/fetch-data-from-directus-in-android-with-kotlin.md b/content/tutorials/1.getting-started/fetch-data-from-directus-in-android-with-kotlin.md
index 99e5cf48f..8437cf7cd 100644
--- a/content/tutorials/1.getting-started/fetch-data-from-directus-in-android-with-kotlin.md
+++ b/content/tutorials/1.getting-started/fetch-data-from-directus-in-android-with-kotlin.md
@@ -1,4 +1,5 @@
---
+stableId: 4de99c8f-7d3b-4ff5-b586-c2399a0da15b
id: 3444d6c8-f336-4d0b-aa02-bc665f4ad3b5
slug: fetch-data-from-directus-in-android-with-kotlin
title: Fetch Data from Directus in Android with Kotlin
diff --git a/content/tutorials/1.getting-started/fetch-data-from-directus-in-ios-with-swift.md b/content/tutorials/1.getting-started/fetch-data-from-directus-in-ios-with-swift.md
index eb9353f04..206eab825 100644
--- a/content/tutorials/1.getting-started/fetch-data-from-directus-in-ios-with-swift.md
+++ b/content/tutorials/1.getting-started/fetch-data-from-directus-in-ios-with-swift.md
@@ -1,4 +1,5 @@
---
+stableId: 905f461b-e845-4a80-aa47-f458f81171dd
id: fbb96512-b46a-4a0c-bb39-b7d11ec0dc7f
slug: fetch-data-from-directus-in-ios-with-swift
title: Fetch Data from Directus in iOS with Swift
diff --git a/content/tutorials/1.getting-started/fetch-data-from-directus-with-angular.md b/content/tutorials/1.getting-started/fetch-data-from-directus-with-angular.md
index a4b468842..2c01cb722 100644
--- a/content/tutorials/1.getting-started/fetch-data-from-directus-with-angular.md
+++ b/content/tutorials/1.getting-started/fetch-data-from-directus-with-angular.md
@@ -1,4 +1,5 @@
---
+stableId: 8f85cf62-5bf2-43e3-ac78-0d21b2c12a20
id: 01d87344-02d8-45fc-a6e3-f13777cdab83
slug: fetch-data-from-directus-with-angular
title: Fetch Data from Directus with Angular
diff --git a/content/tutorials/1.getting-started/fetch-data-from-directus-with-astro.md b/content/tutorials/1.getting-started/fetch-data-from-directus-with-astro.md
index da6dd38ca..3cf5df301 100644
--- a/content/tutorials/1.getting-started/fetch-data-from-directus-with-astro.md
+++ b/content/tutorials/1.getting-started/fetch-data-from-directus-with-astro.md
@@ -1,4 +1,5 @@
---
+stableId: 98cb9a2e-88d4-4c63-9f06-414ccb561335
id: 970eaaf3-d033-43d6-800e-c168e28c6d8f
slug: fetch-data-from-directus-with-astro
title: Fetch Data from Directus with Astro
diff --git a/content/tutorials/1.getting-started/fetch-data-from-directus-with-django.md b/content/tutorials/1.getting-started/fetch-data-from-directus-with-django.md
index 0e8e09afb..ed39887b6 100644
--- a/content/tutorials/1.getting-started/fetch-data-from-directus-with-django.md
+++ b/content/tutorials/1.getting-started/fetch-data-from-directus-with-django.md
@@ -1,4 +1,5 @@
---
+stableId: 8d3c6deb-ce99-4030-b49a-af5d3ab49a21
id: ab19694b-b7e5-44d1-994c-f7a5e5025829
slug: fetch-data-from-directus-with-django
title: Fetch Data from Directus with Django
diff --git a/content/tutorials/1.getting-started/fetch-data-from-directus-with-eleventy-3.md b/content/tutorials/1.getting-started/fetch-data-from-directus-with-eleventy-3.md
index a79e880c7..5e66dd304 100644
--- a/content/tutorials/1.getting-started/fetch-data-from-directus-with-eleventy-3.md
+++ b/content/tutorials/1.getting-started/fetch-data-from-directus-with-eleventy-3.md
@@ -1,4 +1,5 @@
---
+stableId: 0dde8554-cbf3-4010-a48e-84b511aa1223
id: b847e493-5a35-49e1-80b1-3dc2657a0f7d
slug: fetch-data-from-directus-with-eleventy-3
technologies:
diff --git a/content/tutorials/1.getting-started/fetch-data-from-directus-with-flask.md b/content/tutorials/1.getting-started/fetch-data-from-directus-with-flask.md
index 77f1ade72..5a4f5571e 100644
--- a/content/tutorials/1.getting-started/fetch-data-from-directus-with-flask.md
+++ b/content/tutorials/1.getting-started/fetch-data-from-directus-with-flask.md
@@ -1,4 +1,5 @@
---
+stableId: 048a52f0-fd73-4ee3-b089-e6ec289d64b1
id: c8562b3b-fbe0-4fd5-ade1-2d9a9e986f6d
slug: fetch-data-from-directus-with-flask
title: Fetch Data from Directus with Flask
diff --git a/content/tutorials/1.getting-started/fetch-data-from-directus-with-flutter.md b/content/tutorials/1.getting-started/fetch-data-from-directus-with-flutter.md
index d8283bbca..51f1cc9a1 100644
--- a/content/tutorials/1.getting-started/fetch-data-from-directus-with-flutter.md
+++ b/content/tutorials/1.getting-started/fetch-data-from-directus-with-flutter.md
@@ -1,4 +1,5 @@
---
+stableId: 3f1dbfa7-989b-46b3-b714-b72b3e7b3cf9
id: 28299d88-04e5-4cb8-83b1-3916696088e3
slug: fetch-data-from-directus-with-flutter
title: Fetch Data from Directus with Flutter
diff --git a/content/tutorials/1.getting-started/fetch-data-from-directus-with-laravel.md b/content/tutorials/1.getting-started/fetch-data-from-directus-with-laravel.md
index e204f2e00..9b0bd8d73 100644
--- a/content/tutorials/1.getting-started/fetch-data-from-directus-with-laravel.md
+++ b/content/tutorials/1.getting-started/fetch-data-from-directus-with-laravel.md
@@ -1,4 +1,5 @@
---
+stableId: 763167a6-a7a1-4c14-9056-19a86f3ac9be
id: 9a8f3c14-f969-4d2a-9b00-5b22f5dcdc33
slug: fetch-data-from-directus-with-laravel
title: Fetch Data from Directus with Laravel
diff --git a/content/tutorials/1.getting-started/fetch-data-from-directus-with-nextjs.md b/content/tutorials/1.getting-started/fetch-data-from-directus-with-nextjs.md
index ea4948c91..a375d16e1 100644
--- a/content/tutorials/1.getting-started/fetch-data-from-directus-with-nextjs.md
+++ b/content/tutorials/1.getting-started/fetch-data-from-directus-with-nextjs.md
@@ -1,4 +1,5 @@
---
+stableId: 1c37964b-48a5-432a-bb71-3beaaee72422
id: 66f569cd-d9cd-42ee-b064-b46cdf380c62
slug: fetch-data-from-directus-with-nextjs
title: Fetch Data from Directus with Next.js
diff --git a/content/tutorials/1.getting-started/fetch-data-from-directus-with-nuxt.md b/content/tutorials/1.getting-started/fetch-data-from-directus-with-nuxt.md
index 1cb9496cc..f79396f8c 100644
--- a/content/tutorials/1.getting-started/fetch-data-from-directus-with-nuxt.md
+++ b/content/tutorials/1.getting-started/fetch-data-from-directus-with-nuxt.md
@@ -1,4 +1,5 @@
---
+stableId: e41d7ea1-f5b9-4a64-a4d6-213902e22dad
id: bf074448-1967-4c83-8926-9f2005029974
slug: fetch-data-from-directus-with-nuxt
title: Fetch Data from Directus with Nuxt
diff --git a/content/tutorials/1.getting-started/fetch-data-from-directus-with-solidstart.md b/content/tutorials/1.getting-started/fetch-data-from-directus-with-solidstart.md
index cfa635969..4b4f3eaec 100644
--- a/content/tutorials/1.getting-started/fetch-data-from-directus-with-solidstart.md
+++ b/content/tutorials/1.getting-started/fetch-data-from-directus-with-solidstart.md
@@ -1,4 +1,5 @@
---
+stableId: 80e9aa99-c19a-4db6-bd49-66e5ce987d6e
id: 3da7bf05-c74c-4e24-bf83-1d2598b89004
slug: fetch-data-from-directus-with-solidstart
title: Fetch Data from Directus with SolidStart
diff --git a/content/tutorials/1.getting-started/fetch-data-from-directus-with-spring-boot.md b/content/tutorials/1.getting-started/fetch-data-from-directus-with-spring-boot.md
index 3ae510123..bccc8b37e 100644
--- a/content/tutorials/1.getting-started/fetch-data-from-directus-with-spring-boot.md
+++ b/content/tutorials/1.getting-started/fetch-data-from-directus-with-spring-boot.md
@@ -1,4 +1,5 @@
---
+stableId: 5073c758-c304-4786-81f8-4911ad90558c
id: 501503e1-3830-494c-a87a-e3a0706b28de
slug: fetch-data-from-directus-with-spring-boot
title: Fetch Data from Directus with Spring Boot
diff --git a/content/tutorials/1.getting-started/fetch-data-from-directus-with-sveltekit.md b/content/tutorials/1.getting-started/fetch-data-from-directus-with-sveltekit.md
index b4644e896..a5b4b7075 100644
--- a/content/tutorials/1.getting-started/fetch-data-from-directus-with-sveltekit.md
+++ b/content/tutorials/1.getting-started/fetch-data-from-directus-with-sveltekit.md
@@ -1,4 +1,5 @@
---
+stableId: 79aa288a-097a-4a7b-bc32-80ee032718aa
id: 9f57fe88-ece0-42db-ad76-9e811989d4a8
slug: fetch-data-from-directus-with-sveltekit
title: Fetch Data from Directus with SvelteKit
diff --git a/content/tutorials/1.getting-started/implement-directus-auth-with-ios.md b/content/tutorials/1.getting-started/implement-directus-auth-with-ios.md
index 1c650791b..c28cbb15d 100644
--- a/content/tutorials/1.getting-started/implement-directus-auth-with-ios.md
+++ b/content/tutorials/1.getting-started/implement-directus-auth-with-ios.md
@@ -1,4 +1,5 @@
---
+stableId: e8a2fade-e70e-4f5d-9b6c-c4a51dee08fa
id: b16741fd-aa1d-48ea-8856-df9a9ae9e0d6
slug: implement-directus-auth-with-ios
title: Implement Directus Auth with iOS
diff --git a/content/tutorials/1.getting-started/implement-multilingual-content-with-directus-and-svelte-kit.md b/content/tutorials/1.getting-started/implement-multilingual-content-with-directus-and-svelte-kit.md
index aa3ea3873..8ea9eca92 100644
--- a/content/tutorials/1.getting-started/implement-multilingual-content-with-directus-and-svelte-kit.md
+++ b/content/tutorials/1.getting-started/implement-multilingual-content-with-directus-and-svelte-kit.md
@@ -1,4 +1,5 @@
---
+stableId: 598819cc-3a8b-4a3d-888e-7a661b832b2d
id: 333eb942-b124-4476-ac04-bac9cb2dcca2
slug: implement-multilingual-content-with-directus-and-svelte-kit
title: Implement Multilingual Content with Directus and SvelteKit
diff --git a/content/tutorials/1.getting-started/implementing-live-preview-in-astro.md b/content/tutorials/1.getting-started/implementing-live-preview-in-astro.md
index 59955c545..846318cf2 100644
--- a/content/tutorials/1.getting-started/implementing-live-preview-in-astro.md
+++ b/content/tutorials/1.getting-started/implementing-live-preview-in-astro.md
@@ -1,4 +1,5 @@
---
+stableId: 84390c7d-4800-4707-9694-4c1d02b56996
slug: implementing-live-preview-in-astro
title: Implementing Live Preview in Astro
technologies:
diff --git a/content/tutorials/1.getting-started/implementing-live-preview-in-next-js.md b/content/tutorials/1.getting-started/implementing-live-preview-in-next-js.md
index cbfbcd1c4..07bf34afb 100644
--- a/content/tutorials/1.getting-started/implementing-live-preview-in-next-js.md
+++ b/content/tutorials/1.getting-started/implementing-live-preview-in-next-js.md
@@ -1,4 +1,5 @@
---
+stableId: 2e9c2cc0-82dd-4af9-bccc-1118ae4086f6
slug: implementing-live-preview-in-next-js
title: Implementing Live Preview in Next.js
technologies:
diff --git a/content/tutorials/1.getting-started/implementing-live-preview-in-nuxt.md b/content/tutorials/1.getting-started/implementing-live-preview-in-nuxt.md
index 1803bca40..ccf6aa31b 100644
--- a/content/tutorials/1.getting-started/implementing-live-preview-in-nuxt.md
+++ b/content/tutorials/1.getting-started/implementing-live-preview-in-nuxt.md
@@ -1,4 +1,5 @@
---
+stableId: eee0304f-ba89-4e8e-a935-4030a95d2b7b
slug: implementing-live-preview-in-nuxt
title: Implementing Live Preview in Nuxt
technologies:
diff --git a/content/tutorials/1.getting-started/implementing-live-preview-in-react.md b/content/tutorials/1.getting-started/implementing-live-preview-in-react.md
index bdd8d5a9e..4cca67a60 100644
--- a/content/tutorials/1.getting-started/implementing-live-preview-in-react.md
+++ b/content/tutorials/1.getting-started/implementing-live-preview-in-react.md
@@ -1,4 +1,5 @@
---
+stableId: 71d9cf45-9974-4aea-8a91-f1c5a8f31d0d
slug: implementing-live-preview-in-react
title: Implementing Live Preview in React
technologies:
diff --git a/content/tutorials/1.getting-started/implementing-live-preview-in-sveltekit.md b/content/tutorials/1.getting-started/implementing-live-preview-in-sveltekit.md
index e7478f588..b6bc4741d 100644
--- a/content/tutorials/1.getting-started/implementing-live-preview-in-sveltekit.md
+++ b/content/tutorials/1.getting-started/implementing-live-preview-in-sveltekit.md
@@ -1,4 +1,5 @@
---
+stableId: 52e8ca43-3013-47a9-a7fd-adc13acbef55
slug: implementing-live-preview-in-sveltekit
title: Implementing Live Preview in SvelteKit
technologies:
diff --git a/content/tutorials/1.getting-started/implementing-multilingual-content-using-directus-and-astro.md b/content/tutorials/1.getting-started/implementing-multilingual-content-using-directus-and-astro.md
index edb4ef6f1..a80f00308 100644
--- a/content/tutorials/1.getting-started/implementing-multilingual-content-using-directus-and-astro.md
+++ b/content/tutorials/1.getting-started/implementing-multilingual-content-using-directus-and-astro.md
@@ -1,4 +1,5 @@
---
+stableId: 686e8090-8367-448d-bf57-4680cad619a9
slug: implementing-multilingual-content-using-directus-and-astro
title: Implementing Multilingual Content using Directus and Astro
technologies:
diff --git a/content/tutorials/1.getting-started/implementing-multilingual-content-using-directus-and-next.md b/content/tutorials/1.getting-started/implementing-multilingual-content-using-directus-and-next.md
index 69913401a..6140fc3cf 100644
--- a/content/tutorials/1.getting-started/implementing-multilingual-content-using-directus-and-next.md
+++ b/content/tutorials/1.getting-started/implementing-multilingual-content-using-directus-and-next.md
@@ -1,4 +1,5 @@
---
+stableId: ed2c086a-f490-44ee-8532-fcb4f88b654d
slug: implementing-multilingual-content-using-directus-and-next
title: Implementing Multilingual Content using Directus and Next.js
technologies:
diff --git a/content/tutorials/1.getting-started/implementing-multilingual-content-using-directus-and-nuxt.md b/content/tutorials/1.getting-started/implementing-multilingual-content-using-directus-and-nuxt.md
index 86e44a5fa..a9c645138 100644
--- a/content/tutorials/1.getting-started/implementing-multilingual-content-using-directus-and-nuxt.md
+++ b/content/tutorials/1.getting-started/implementing-multilingual-content-using-directus-and-nuxt.md
@@ -1,4 +1,5 @@
---
+stableId: cfba1320-ff3f-4a70-b358-af6f9da57af5
slug: implementing-multilingual-content-using-directus-and-nuxt
title: Implementing Multilingual Content using Directus and Nuxt
technologies:
diff --git a/content/tutorials/1.getting-started/implementing-multilingual-content-using-directus-and-sveltekit.md b/content/tutorials/1.getting-started/implementing-multilingual-content-using-directus-and-sveltekit.md
index f6916a182..6b6c776bb 100644
--- a/content/tutorials/1.getting-started/implementing-multilingual-content-using-directus-and-sveltekit.md
+++ b/content/tutorials/1.getting-started/implementing-multilingual-content-using-directus-and-sveltekit.md
@@ -1,4 +1,5 @@
---
+stableId: cb74a8b6-abd5-4526-9028-42f58f1452ab
slug: implementing-multilingual-content-using-directus-and-sveltekit
title: Implementing Multilingual Content using Directus and SvelteKit
technologies:
diff --git a/content/tutorials/1.getting-started/index.md b/content/tutorials/1.getting-started/index.md
index f15cbd374..751e1b665 100644
--- a/content/tutorials/1.getting-started/index.md
+++ b/content/tutorials/1.getting-started/index.md
@@ -1,3 +1,4 @@
---
+stableId: adf560fd-b888-4708-941a-4ef6b0e1578b
title: Getting Started
---
diff --git a/content/tutorials/1.getting-started/integrating-the-directus-visual-editor-with-nextjs.md b/content/tutorials/1.getting-started/integrating-the-directus-visual-editor-with-nextjs.md
index 4904e69b3..a5251de1d 100644
--- a/content/tutorials/1.getting-started/integrating-the-directus-visual-editor-with-nextjs.md
+++ b/content/tutorials/1.getting-started/integrating-the-directus-visual-editor-with-nextjs.md
@@ -1,4 +1,5 @@
---
+stableId: 5d0ac183-f40f-43ec-9d36-3d9efa73c204
slug: integrating-the-directus-visual-editor-with-nextjs
title: Integrating the Directus Visual Editor with Next.js
technologies:
diff --git a/content/tutorials/1.getting-started/integrating-the-directus-visual-editor-with-nuxt.md b/content/tutorials/1.getting-started/integrating-the-directus-visual-editor-with-nuxt.md
index 0c1d6f152..867a02dfc 100644
--- a/content/tutorials/1.getting-started/integrating-the-directus-visual-editor-with-nuxt.md
+++ b/content/tutorials/1.getting-started/integrating-the-directus-visual-editor-with-nuxt.md
@@ -1,4 +1,5 @@
---
+stableId: 0bd2e190-d382-440b-aa41-8c1dd7637652
slug: integrating-the-directus-visual-editor-with-nuxt
title: Integrating the Directus Visual Editor with Nuxt
technologies:
diff --git a/content/tutorials/1.getting-started/integrating-the-directus-visual-editor-with-sveltekit.md b/content/tutorials/1.getting-started/integrating-the-directus-visual-editor-with-sveltekit.md
index e39db7120..60a807025 100644
--- a/content/tutorials/1.getting-started/integrating-the-directus-visual-editor-with-sveltekit.md
+++ b/content/tutorials/1.getting-started/integrating-the-directus-visual-editor-with-sveltekit.md
@@ -1,4 +1,5 @@
---
+stableId: d325a09c-8e8a-45ec-b820-374130375d45
slug: integrating-the-directus-visual-editor-with-sveltekit
title: Integrating the Directus Visual Editor with SvelteKit
technologies:
diff --git a/content/tutorials/1.getting-started/rendering-dynamic-blocks-using-astro.md b/content/tutorials/1.getting-started/rendering-dynamic-blocks-using-astro.md
index 355f0bf9b..def20d084 100644
--- a/content/tutorials/1.getting-started/rendering-dynamic-blocks-using-astro.md
+++ b/content/tutorials/1.getting-started/rendering-dynamic-blocks-using-astro.md
@@ -1,4 +1,5 @@
---
+stableId: 00bd225d-3cdf-4f0e-af46-87461c60a1b7
slug: rendering-dynamic-blocks-using-astro
title: Rendering Dynamic Blocks Using Astro
technologies:
diff --git a/content/tutorials/1.getting-started/rendering-dynamic-blocks-using-next.md b/content/tutorials/1.getting-started/rendering-dynamic-blocks-using-next.md
index a3f770524..93f228e80 100644
--- a/content/tutorials/1.getting-started/rendering-dynamic-blocks-using-next.md
+++ b/content/tutorials/1.getting-started/rendering-dynamic-blocks-using-next.md
@@ -1,4 +1,5 @@
---
+stableId: 55dd3cee-a726-4901-8697-d26f0e1027b4
slug: rendering-dynamic-blocks-using-next
title: Rendering Dynamic Blocks Using Next.js
technologies:
diff --git a/content/tutorials/1.getting-started/rendering-dynamic-blocks-using-nuxt.md b/content/tutorials/1.getting-started/rendering-dynamic-blocks-using-nuxt.md
index 92afc4ace..f0bd9073d 100644
--- a/content/tutorials/1.getting-started/rendering-dynamic-blocks-using-nuxt.md
+++ b/content/tutorials/1.getting-started/rendering-dynamic-blocks-using-nuxt.md
@@ -1,4 +1,5 @@
---
+stableId: 355a2ed6-eb0a-435d-8d69-cf2b69270ff3
slug: rendering-dynamic-blocks-using-nuxt
title: Rendering Dynamic Blocks Using Nuxt
technologies:
diff --git a/content/tutorials/1.getting-started/rendering-dynamic-blocks-using-sveltekit.md b/content/tutorials/1.getting-started/rendering-dynamic-blocks-using-sveltekit.md
index c0b5798a8..521f760b3 100644
--- a/content/tutorials/1.getting-started/rendering-dynamic-blocks-using-sveltekit.md
+++ b/content/tutorials/1.getting-started/rendering-dynamic-blocks-using-sveltekit.md
@@ -1,4 +1,5 @@
---
+stableId: 2c9200ec-ee4a-4bdd-a534-8cf4bb104f86
slug: rendering-dynamic-blocks-using-sveltekit
title: Rendering Dynamic Blocks Using SvelteKit
technologies:
diff --git a/content/tutorials/1.getting-started/set-up-live-preview-with-next-js.md b/content/tutorials/1.getting-started/set-up-live-preview-with-next-js.md
index f0ab20560..4dfcf809d 100644
--- a/content/tutorials/1.getting-started/set-up-live-preview-with-next-js.md
+++ b/content/tutorials/1.getting-started/set-up-live-preview-with-next-js.md
@@ -1,4 +1,5 @@
---
+stableId: 4b3da552-afc6-4281-b206-2228e99f049d
id: 58ab89b4-d426-476f-a0e7-73a62c486676
slug: set-up-live-preview-with-next-js
title: Set Up Live Preview with Next.js
diff --git a/content/tutorials/1.getting-started/set-up-live-preview-with-nuxt.md b/content/tutorials/1.getting-started/set-up-live-preview-with-nuxt.md
index 2dc010d14..c5cf882bc 100644
--- a/content/tutorials/1.getting-started/set-up-live-preview-with-nuxt.md
+++ b/content/tutorials/1.getting-started/set-up-live-preview-with-nuxt.md
@@ -1,4 +1,5 @@
---
+stableId: 0d9cfbc7-9dae-493b-9c17-866606ec9f0e
id: 75acf155-0662-4b74-8555-52e5cf02446c
slug: set-up-live-preview-with-nuxt
title: Set Up Live Preview with Nuxt
diff --git a/content/tutorials/1.getting-started/submit-forms-using-directus-and-nextjs.md b/content/tutorials/1.getting-started/submit-forms-using-directus-and-nextjs.md
index 145786bd8..201f72a12 100644
--- a/content/tutorials/1.getting-started/submit-forms-using-directus-and-nextjs.md
+++ b/content/tutorials/1.getting-started/submit-forms-using-directus-and-nextjs.md
@@ -1,4 +1,5 @@
---
+stableId: 7f7c2b05-a27a-429d-a55c-038824bef895
slug: submit-forms-using-directus-and-nextjs
title: Submit Forms Using Directus and Next.js
technologies:
diff --git a/content/tutorials/1.getting-started/submit-forms-using-directus-and-nuxt.md b/content/tutorials/1.getting-started/submit-forms-using-directus-and-nuxt.md
index f5d361f17..296b6f8f0 100644
--- a/content/tutorials/1.getting-started/submit-forms-using-directus-and-nuxt.md
+++ b/content/tutorials/1.getting-started/submit-forms-using-directus-and-nuxt.md
@@ -1,4 +1,5 @@
---
+stableId: e983aa81-3f48-4e0b-9936-db0aa36fd26b
slug: submit-forms-using-directus-and-nuxt
title: Submit Forms Using Directus and Nuxt
technologies:
diff --git a/content/tutorials/1.getting-started/submit-forms-using-directus-and-sveltekit.md b/content/tutorials/1.getting-started/submit-forms-using-directus-and-sveltekit.md
index 2e25d8162..c4f785fc5 100644
--- a/content/tutorials/1.getting-started/submit-forms-using-directus-and-sveltekit.md
+++ b/content/tutorials/1.getting-started/submit-forms-using-directus-and-sveltekit.md
@@ -1,4 +1,5 @@
---
+stableId: 0a7bab8d-6066-47c8-abb4-ca27149fd1f9
slug: submit-forms-using-directus-and-sveltekit
title: Submit Forms Using Directus and SvelteKit
technologies:
diff --git a/content/tutorials/1.getting-started/using-authentication-in-astro.md b/content/tutorials/1.getting-started/using-authentication-in-astro.md
index 2f16997bd..fc926f8e3 100644
--- a/content/tutorials/1.getting-started/using-authentication-in-astro.md
+++ b/content/tutorials/1.getting-started/using-authentication-in-astro.md
@@ -1,4 +1,5 @@
---
+stableId: 384b2479-40d7-48c2-814b-e75ef0026b43
slug: using-authentication-in-astro
title: Using Authentication in Astro
technologies:
diff --git a/content/tutorials/1.getting-started/using-authentication-in-next-js.md b/content/tutorials/1.getting-started/using-authentication-in-next-js.md
index 1168c88e4..36b7545f5 100644
--- a/content/tutorials/1.getting-started/using-authentication-in-next-js.md
+++ b/content/tutorials/1.getting-started/using-authentication-in-next-js.md
@@ -1,4 +1,5 @@
---
+stableId: 89d1cf86-2d5b-47e5-ac63-a3bcaff42421
slug: using-authentication-in-next-js
title: Using Authentication in Next.js
technologies:
diff --git a/content/tutorials/1.getting-started/using-authentication-in-nuxt.md b/content/tutorials/1.getting-started/using-authentication-in-nuxt.md
index 392eb1090..393dcd6d8 100644
--- a/content/tutorials/1.getting-started/using-authentication-in-nuxt.md
+++ b/content/tutorials/1.getting-started/using-authentication-in-nuxt.md
@@ -1,4 +1,5 @@
---
+stableId: 34b779a1-0e84-49fe-a675-96da571d5ea8
slug: using-authentication-in-nuxt
title: Using Authentication in Nuxt
technologies:
diff --git a/content/tutorials/1.getting-started/using-authentication-in-react.md b/content/tutorials/1.getting-started/using-authentication-in-react.md
index 2fd418b35..18a10ec71 100644
--- a/content/tutorials/1.getting-started/using-authentication-in-react.md
+++ b/content/tutorials/1.getting-started/using-authentication-in-react.md
@@ -1,4 +1,5 @@
---
+stableId: ad274d15-23f8-46c6-ac51-b278a57b5cef
slug: using-authentication-in-react
title: Using Authentication in React
technologies:
diff --git a/content/tutorials/1.getting-started/using-authentication-in-sveltekit.md b/content/tutorials/1.getting-started/using-authentication-in-sveltekit.md
index dce72ad64..f2b0f8939 100644
--- a/content/tutorials/1.getting-started/using-authentication-in-sveltekit.md
+++ b/content/tutorials/1.getting-started/using-authentication-in-sveltekit.md
@@ -1,4 +1,5 @@
---
+stableId: aec92b93-93da-48ed-aa4a-2fcbcf5f5d72
slug: using-authentication-in-sveltekit
title: Using Authentication in SvelteKit
technologies:
diff --git a/content/tutorials/2.projects/build-a-multi-user-chat-with-javascript-and-directus-realtime.md b/content/tutorials/2.projects/build-a-multi-user-chat-with-javascript-and-directus-realtime.md
index b5049aa25..e53d16feb 100644
--- a/content/tutorials/2.projects/build-a-multi-user-chat-with-javascript-and-directus-realtime.md
+++ b/content/tutorials/2.projects/build-a-multi-user-chat-with-javascript-and-directus-realtime.md
@@ -1,4 +1,5 @@
---
+stableId: 6aa0fbfb-a9fe-4152-a7ea-d8332c2c7bc4
id: 1fdbc354-3c98-458e-97f6-587eccab6c16
slug: build-a-multi-user-chat-with-javascript-and-directus-realtime
title: Build a Multi-User Chat with JavaScript and Directus Realtime
diff --git a/content/tutorials/2.projects/build-a-multi-user-chat-with-react-and-directus-realtime.md b/content/tutorials/2.projects/build-a-multi-user-chat-with-react-and-directus-realtime.md
index 9cf1ec352..b58298da0 100644
--- a/content/tutorials/2.projects/build-a-multi-user-chat-with-react-and-directus-realtime.md
+++ b/content/tutorials/2.projects/build-a-multi-user-chat-with-react-and-directus-realtime.md
@@ -1,4 +1,5 @@
---
+stableId: 8a9e82ba-8662-400b-a49f-13734e0d8221
id: 03c6db5a-029b-4207-8786-c1478e173e6b
slug: build-a-multi-user-chat-with-react-and-directus-realtime
title: Build a Multi-User Chat with React and Directus Realtime
diff --git a/content/tutorials/2.projects/build-a-multi-user-chat-with-vue-js-and-directus-realtime.md b/content/tutorials/2.projects/build-a-multi-user-chat-with-vue-js-and-directus-realtime.md
index 704cc1ad9..8dc20f72f 100644
--- a/content/tutorials/2.projects/build-a-multi-user-chat-with-vue-js-and-directus-realtime.md
+++ b/content/tutorials/2.projects/build-a-multi-user-chat-with-vue-js-and-directus-realtime.md
@@ -1,4 +1,5 @@
---
+stableId: c835fb8f-3ccc-4a84-b30c-69f7429f0578
id: 418e29e7-1a2f-44a3-82ad-99dc118cccd0
slug: build-a-multi-user-chat-with-vue-js-and-directus-realtime
title: Build a Multi-User Chat with Vue.js and Directus Realtime
diff --git a/content/tutorials/2.projects/build-a-notebook-chrome-extension-with-directus-auth.md b/content/tutorials/2.projects/build-a-notebook-chrome-extension-with-directus-auth.md
index b5cd05927..80c8ffe71 100644
--- a/content/tutorials/2.projects/build-a-notebook-chrome-extension-with-directus-auth.md
+++ b/content/tutorials/2.projects/build-a-notebook-chrome-extension-with-directus-auth.md
@@ -1,4 +1,5 @@
---
+stableId: c0d7f6bc-bdc0-418e-880a-3c9887a23078
id: e974c49f-cd78-4cf0-8cfe-72f650346c80
slug: build-a-notebook-chrome-extension-with-directus-auth
title: Build a Notebook Chrome Extension with Directus Auth
diff --git a/content/tutorials/2.projects/build-a-realtime-chat-app-using-directus-and-astro.md b/content/tutorials/2.projects/build-a-realtime-chat-app-using-directus-and-astro.md
index 90ed73cb1..2a6d87dc5 100644
--- a/content/tutorials/2.projects/build-a-realtime-chat-app-using-directus-and-astro.md
+++ b/content/tutorials/2.projects/build-a-realtime-chat-app-using-directus-and-astro.md
@@ -1,4 +1,5 @@
---
+stableId: 70f8292e-a9a7-44a7-8409-8861b0991ab8
slug: build-a-realtime-chat-app-with-directus-and-astro
title: Build a Realtime Chat App with Directus and Astro
technologies:
diff --git a/content/tutorials/2.projects/build-a-realtime-chat-app-using-directus-and-nuxt.md b/content/tutorials/2.projects/build-a-realtime-chat-app-using-directus-and-nuxt.md
index 64665dfaf..0c60dec9c 100644
--- a/content/tutorials/2.projects/build-a-realtime-chat-app-using-directus-and-nuxt.md
+++ b/content/tutorials/2.projects/build-a-realtime-chat-app-using-directus-and-nuxt.md
@@ -1,4 +1,5 @@
---
+stableId: e810de4e-c2cb-484d-8600-4b9fcc715a64
slug: build-a-realtime-chat-app-with-directus-and-nuxt
title: Build a Realtime Chat App with Directus and Nuxt
technologies:
diff --git a/content/tutorials/2.projects/build-a-realtime-chat-app-with-directus-and-next.md b/content/tutorials/2.projects/build-a-realtime-chat-app-with-directus-and-next.md
index c07f3dcb3..17c2ffd59 100644
--- a/content/tutorials/2.projects/build-a-realtime-chat-app-with-directus-and-next.md
+++ b/content/tutorials/2.projects/build-a-realtime-chat-app-with-directus-and-next.md
@@ -1,4 +1,5 @@
---
+stableId: 996bd3b2-250d-4f37-bf90-0b114f96b7d1
slug: build-a-realtime-chat-app-with-directus-and-next
title: Build a Realtime Chat App with Directus and Next.js
technologies:
diff --git a/content/tutorials/2.projects/build-a-realtime-chat-app-with-directus-and-sveltekit.md b/content/tutorials/2.projects/build-a-realtime-chat-app-with-directus-and-sveltekit.md
index 9181e7e23..293cc2795 100644
--- a/content/tutorials/2.projects/build-a-realtime-chat-app-with-directus-and-sveltekit.md
+++ b/content/tutorials/2.projects/build-a-realtime-chat-app-with-directus-and-sveltekit.md
@@ -1,4 +1,5 @@
---
+stableId: 61b8cf57-ed7c-4f41-852c-5dbc28cd37a0
slug: build-a-realtime-chat-app-with-directus-and-sveltekit
title: Build a Realtime Chat App with Directus and SvelteKit
technologies:
diff --git a/content/tutorials/2.projects/build-a-testimonial-widget-with-sveltekit-and-directus.md b/content/tutorials/2.projects/build-a-testimonial-widget-with-sveltekit-and-directus.md
index 81fae5776..54df6abf5 100644
--- a/content/tutorials/2.projects/build-a-testimonial-widget-with-sveltekit-and-directus.md
+++ b/content/tutorials/2.projects/build-a-testimonial-widget-with-sveltekit-and-directus.md
@@ -1,4 +1,5 @@
---
+stableId: 065f161c-3d11-4490-99aa-35a44aeb0042
id: 95197ebe-fc70-4f80-a053-a894f3b0b00a
slug: build-a-testimonial-widget-with-sveltekit-and-directus
title: Build a Testimonial Widget with SvelteKit and Directus
diff --git a/content/tutorials/2.projects/build-a-user-feedback-widget-with-vue-js-.md b/content/tutorials/2.projects/build-a-user-feedback-widget-with-vue-js-.md
index 365ea583a..ff5050143 100644
--- a/content/tutorials/2.projects/build-a-user-feedback-widget-with-vue-js-.md
+++ b/content/tutorials/2.projects/build-a-user-feedback-widget-with-vue-js-.md
@@ -1,4 +1,5 @@
---
+stableId: d84d4667-9995-439f-bede-19688f6e8189
id: dc13157c-95a1-4486-9dd3-3d0c43876bdc
slug: build-a-user-feedback-widget-with-vue-js
title: Build a User Feedback Widget with Vue.js
diff --git a/content/tutorials/2.projects/build-a-video-streaming-app-with-sveltekit-and-directus.md b/content/tutorials/2.projects/build-a-video-streaming-app-with-sveltekit-and-directus.md
index 1c25b8c4b..dac11da8a 100644
--- a/content/tutorials/2.projects/build-a-video-streaming-app-with-sveltekit-and-directus.md
+++ b/content/tutorials/2.projects/build-a-video-streaming-app-with-sveltekit-and-directus.md
@@ -1,4 +1,5 @@
---
+stableId: 357a8779-2d1a-4dae-afcc-e0aeffbd5172
id: 21c0643a-570f-45ae-9f7e-21ae9613a494
slug: build-a-video-streaming-app-with-sveltekit-and-directus
title: Build a Video Streaming App with SvelteKit and Directus
diff --git a/content/tutorials/2.projects/build-an-ecommerce-platform-with-next-js-stripe-and-directus-automate.md b/content/tutorials/2.projects/build-an-ecommerce-platform-with-next-js-stripe-and-directus-automate.md
index 754bb0e48..5b8eba711 100644
--- a/content/tutorials/2.projects/build-an-ecommerce-platform-with-next-js-stripe-and-directus-automate.md
+++ b/content/tutorials/2.projects/build-an-ecommerce-platform-with-next-js-stripe-and-directus-automate.md
@@ -1,4 +1,5 @@
---
+stableId: e03366c8-427e-42c0-a0cc-058bec00abb8
id: e9fd65f3-e853-4ecb-8706-74c8fa342b43
slug: build-an-ecommerce-platform-with-next-js-stripe-and-directus-automate
title: Build an Ecommerce Platform with Next.js, Stripe, and Directus Automate
diff --git a/content/tutorials/2.projects/build-an-hotel-booking-platform-with-next-js-stripe-and-directus-automate.md b/content/tutorials/2.projects/build-an-hotel-booking-platform-with-next-js-stripe-and-directus-automate.md
index 274060b99..ac65448cd 100644
--- a/content/tutorials/2.projects/build-an-hotel-booking-platform-with-next-js-stripe-and-directus-automate.md
+++ b/content/tutorials/2.projects/build-an-hotel-booking-platform-with-next-js-stripe-and-directus-automate.md
@@ -1,4 +1,5 @@
---
+stableId: 78258d4b-8355-4477-b45a-2505d018eab6
id: e93c8494-df0d-4aa1-80c1-beabb0081411
slug: build-an-hotel-booking-platform-with-next-js-stripe-and-directus-automate
title: Build an Hotel Booking Platform with Next.js, Stripe, and Directus Automate
diff --git a/content/tutorials/2.projects/build-directus-garden-a-passive-collaborative-event-booth-demo.md b/content/tutorials/2.projects/build-directus-garden-a-passive-collaborative-event-booth-demo.md
index 078a0d343..5dcf4e339 100644
--- a/content/tutorials/2.projects/build-directus-garden-a-passive-collaborative-event-booth-demo.md
+++ b/content/tutorials/2.projects/build-directus-garden-a-passive-collaborative-event-booth-demo.md
@@ -1,4 +1,5 @@
---
+stableId: 6a84ed31-311c-4ef4-ace0-2e8cacbaa960
id: 0a7a8969-138e-4047-884e-1048a811a939
slug: build-directus-garden-a-passive-collaborative-event-booth-demo
title: Build Directus Garden - A Passive Collaborative Event Booth Demo
diff --git a/content/tutorials/2.projects/build-forms-dynamically-using-directus-and-astro.md b/content/tutorials/2.projects/build-forms-dynamically-using-directus-and-astro.md
index 12dafda00..e5fc67e3c 100644
--- a/content/tutorials/2.projects/build-forms-dynamically-using-directus-and-astro.md
+++ b/content/tutorials/2.projects/build-forms-dynamically-using-directus-and-astro.md
@@ -1,4 +1,5 @@
---
+stableId: ffa9c8fe-df0d-4286-8c3b-656680417cc4
slug: build-forms-dynamically-using-directus-and-astro
title: Build Forms Dynamically using Directus and Astro
technologies:
diff --git a/content/tutorials/2.projects/build-forms-dynamically-using-directus-and-next.md b/content/tutorials/2.projects/build-forms-dynamically-using-directus-and-next.md
index d8741ee2f..5fe462f54 100644
--- a/content/tutorials/2.projects/build-forms-dynamically-using-directus-and-next.md
+++ b/content/tutorials/2.projects/build-forms-dynamically-using-directus-and-next.md
@@ -1,4 +1,5 @@
---
+stableId: 63f8f8da-c036-4b22-906e-1fbe19d39298
slug: build-forms-dynamically-using-directus-and-next
title: Build Forms Dynamically using Directus and Next.js
technologies:
diff --git a/content/tutorials/2.projects/build-forms-dynamically-using-directus-and-nuxt.md b/content/tutorials/2.projects/build-forms-dynamically-using-directus-and-nuxt.md
index 39c6ee132..cd42ce989 100644
--- a/content/tutorials/2.projects/build-forms-dynamically-using-directus-and-nuxt.md
+++ b/content/tutorials/2.projects/build-forms-dynamically-using-directus-and-nuxt.md
@@ -1,4 +1,5 @@
---
+stableId: 7a7bf6f7-1550-4565-9817-3b862a476ecb
slug: build-forms-dynamically-using-directus-and-nuxt
title: Build Forms Dynamically using Directus and Nuxt
technologies:
diff --git a/content/tutorials/2.projects/build-forms-dynamically-using-directus-and-sveltekit.md b/content/tutorials/2.projects/build-forms-dynamically-using-directus-and-sveltekit.md
index 629a12079..de6b43590 100644
--- a/content/tutorials/2.projects/build-forms-dynamically-using-directus-and-sveltekit.md
+++ b/content/tutorials/2.projects/build-forms-dynamically-using-directus-and-sveltekit.md
@@ -1,4 +1,5 @@
---
+stableId: 20421ddd-2c84-4920-8f22-34b1e36b0dda
slug: build-forms-dynamically-using-directus-and-sveltekit
title: Build Forms Dynamically using Directus and SvelteKit
technologies:
diff --git a/content/tutorials/2.projects/build-the-leap-week-registration-and-referral-system-.md b/content/tutorials/2.projects/build-the-leap-week-registration-and-referral-system-.md
index 8996a6fe3..d65e75561 100644
--- a/content/tutorials/2.projects/build-the-leap-week-registration-and-referral-system-.md
+++ b/content/tutorials/2.projects/build-the-leap-week-registration-and-referral-system-.md
@@ -1,4 +1,5 @@
---
+stableId: 30c50361-3fd9-4f38-a979-c5860f453944
id: 86f258e4-f1ef-4e33-8dd8-fce88161e748
slug: build-the-leap-week-registration-and-referral-system-
title: Build the Leap Week Registration and Referral System
diff --git a/content/tutorials/2.projects/building-ai-venture-an-ai-powered-game-with-directus.md b/content/tutorials/2.projects/building-ai-venture-an-ai-powered-game-with-directus.md
index e32876f3f..1abeeb42a 100644
--- a/content/tutorials/2.projects/building-ai-venture-an-ai-powered-game-with-directus.md
+++ b/content/tutorials/2.projects/building-ai-venture-an-ai-powered-game-with-directus.md
@@ -1,4 +1,5 @@
---
+stableId: aff46e7f-689a-4703-9fc7-dbb5c70a4af3
id: 11a1c86f-36bf-4dd5-8bce-7eed75451514
slug: building-ai-venture-an-ai-powered-game-with-directus
title: Building AIVenture - An AI-Powered Game with Directus
diff --git a/content/tutorials/2.projects/create-a-cms-using-directus-and-astro.md b/content/tutorials/2.projects/create-a-cms-using-directus-and-astro.md
index 31708e094..e894d4a0d 100644
--- a/content/tutorials/2.projects/create-a-cms-using-directus-and-astro.md
+++ b/content/tutorials/2.projects/create-a-cms-using-directus-and-astro.md
@@ -1,4 +1,5 @@
---
+stableId: b9e011ba-6d63-4d8c-a592-f3e0d8ac8d25
slug: create-a-cms-using-directus-and-astro
title: Create a CMS using Directus and Astro
technologies:
diff --git a/content/tutorials/2.projects/create-a-cms-using-directus-and-nextjs.md b/content/tutorials/2.projects/create-a-cms-using-directus-and-nextjs.md
index 92efc5bea..a6ccb96a7 100644
--- a/content/tutorials/2.projects/create-a-cms-using-directus-and-nextjs.md
+++ b/content/tutorials/2.projects/create-a-cms-using-directus-and-nextjs.md
@@ -1,4 +1,5 @@
---
+stableId: 313ce076-572c-42fe-879d-a7ad38bed4a8
id: 11a1c86f-36bf-4dd5-8bce-7eed75451514
slug: create-a-cms-using-directus-and-nextjs
title: Create a CMS using Directus and Next.js
diff --git a/content/tutorials/2.projects/create-a-cms-using-directus-and-nuxt.md b/content/tutorials/2.projects/create-a-cms-using-directus-and-nuxt.md
index 100dd9694..3eb7b9ff5 100644
--- a/content/tutorials/2.projects/create-a-cms-using-directus-and-nuxt.md
+++ b/content/tutorials/2.projects/create-a-cms-using-directus-and-nuxt.md
@@ -1,4 +1,5 @@
---
+stableId: ec808493-1b38-4dd5-b39a-5fe224fe7fbb
id: 11a1c86f-36bf-4dd5-8bce-7eed75451514
slug: create-a-cms-using-directus-and-nuxt
title: Create a CMS using Directus and Nuxt
diff --git a/content/tutorials/2.projects/create-a-cms-using-directus-and-sveltekit.md b/content/tutorials/2.projects/create-a-cms-using-directus-and-sveltekit.md
index 6a3be1988..87dfca38a 100644
--- a/content/tutorials/2.projects/create-a-cms-using-directus-and-sveltekit.md
+++ b/content/tutorials/2.projects/create-a-cms-using-directus-and-sveltekit.md
@@ -1,4 +1,5 @@
---
+stableId: 26739e2b-e903-4196-950c-6452d04a3420
id: 11a1c86f-36bf-4dd5-8bce-7eed75451514
slug: create-a-cms-using-directus-and-sveltekit
title: Create a CMS using Directus and SvelteKit
diff --git a/content/tutorials/2.projects/create-dynamic-pages-for-a-cms-using-directus-and-astro.md b/content/tutorials/2.projects/create-dynamic-pages-for-a-cms-using-directus-and-astro.md
index b1860ed9b..578c6d6ba 100644
--- a/content/tutorials/2.projects/create-dynamic-pages-for-a-cms-using-directus-and-astro.md
+++ b/content/tutorials/2.projects/create-dynamic-pages-for-a-cms-using-directus-and-astro.md
@@ -1,4 +1,5 @@
---
+stableId: 066eaedf-9bf1-4c84-ad9e-5610df82ebf3
slug: create-dynamic-pages-for-a-cms-using-directus-and-astro
title: Create Dynamic Pages for a CMS using Directus and Astro
technologies:
diff --git a/content/tutorials/2.projects/create-dynamic-pages-for-a-cms-using-directus-and-nextjs.md b/content/tutorials/2.projects/create-dynamic-pages-for-a-cms-using-directus-and-nextjs.md
index 527365ec3..f2942b2b5 100644
--- a/content/tutorials/2.projects/create-dynamic-pages-for-a-cms-using-directus-and-nextjs.md
+++ b/content/tutorials/2.projects/create-dynamic-pages-for-a-cms-using-directus-and-nextjs.md
@@ -1,4 +1,5 @@
---
+stableId: 02fe06e8-c207-426f-8d3b-4832a6531c6d
id: 11a1c86f-36bf-4dd5-8bce-7eed75451514
slug: create-dynamic-pages-for-a-cms-using-directus-and-nextjs
title: Create Dynamic Pages for a CMS using Directus and Next.js
diff --git a/content/tutorials/2.projects/create-dynamic-pages-for-a-cms-using-directus-and-nuxt.md b/content/tutorials/2.projects/create-dynamic-pages-for-a-cms-using-directus-and-nuxt.md
index 3bfddd2d6..5981adce6 100644
--- a/content/tutorials/2.projects/create-dynamic-pages-for-a-cms-using-directus-and-nuxt.md
+++ b/content/tutorials/2.projects/create-dynamic-pages-for-a-cms-using-directus-and-nuxt.md
@@ -1,4 +1,5 @@
---
+stableId: af8dafc8-146c-40a1-a338-8d09b6f76b82
id: 11a1c86f-36bf-4dd5-8bce-7eed75451514
slug: create-dynamic-pages-for-a-cms-using-directus-and-nuxt
title: Create Dynamic Pages for a CMS using Directus and Nuxt
diff --git a/content/tutorials/2.projects/create-dynamic-pages-for-a-cms-using-directus-and-sveltekit.md b/content/tutorials/2.projects/create-dynamic-pages-for-a-cms-using-directus-and-sveltekit.md
index a845acdde..5fe2c2d96 100644
--- a/content/tutorials/2.projects/create-dynamic-pages-for-a-cms-using-directus-and-sveltekit.md
+++ b/content/tutorials/2.projects/create-dynamic-pages-for-a-cms-using-directus-and-sveltekit.md
@@ -1,4 +1,5 @@
---
+stableId: e98986da-9283-470c-8b2d-61dbdf8838eb
id: 11a1c86f-36bf-4dd5-8bce-7eed75451514
slug: create-dynamic-pages-for-a-cms-using-directus-and-sveltekit
title: Create Dynamic Pages for a CMS using Directus and SvelteKit
diff --git a/content/tutorials/2.projects/how-i-built-an-ai-open-source-santa-roast-app-with-directus-and-nuxt.md b/content/tutorials/2.projects/how-i-built-an-ai-open-source-santa-roast-app-with-directus-and-nuxt.md
index 3a42d2985..c146a33a8 100644
--- a/content/tutorials/2.projects/how-i-built-an-ai-open-source-santa-roast-app-with-directus-and-nuxt.md
+++ b/content/tutorials/2.projects/how-i-built-an-ai-open-source-santa-roast-app-with-directus-and-nuxt.md
@@ -1,4 +1,5 @@
---
+stableId: 4d9c1b0e-a39e-4e21-9cb1-52ece475ce5d
id: 11a1c86f-36bf-4dd5-8bce-7eed75451514
slug: ai-santa-roast-app-with-directus-nuxt
title: How I Built an AI Open Source Santa Roast App with Directus and Nuxt
diff --git a/content/tutorials/2.projects/index.md b/content/tutorials/2.projects/index.md
index 804891574..cf1cf08dd 100644
--- a/content/tutorials/2.projects/index.md
+++ b/content/tutorials/2.projects/index.md
@@ -1,4 +1,5 @@
---
+stableId: 6f796f40-3628-4252-ba33-c12cf4e526b9
title: Projects
---
diff --git a/content/tutorials/2.projects/integrate-directus-with-esp-32-hardware-sensors.md b/content/tutorials/2.projects/integrate-directus-with-esp-32-hardware-sensors.md
index 5fafb40ab..c0d0cb9ff 100644
--- a/content/tutorials/2.projects/integrate-directus-with-esp-32-hardware-sensors.md
+++ b/content/tutorials/2.projects/integrate-directus-with-esp-32-hardware-sensors.md
@@ -1,4 +1,5 @@
---
+stableId: aa5e9080-f779-43a9-ae90-b8a9ce076e49
id: f6bf9070-0fb6-4cc0-ba6d-99e1b83e2b87
slug: integrate-directus-with-esp-32-hardware-sensors
title: Integrate Directus with ESP32 Hardware Sensors
diff --git a/content/tutorials/2.projects/use-directus-as-a-baby-health-tracker-with-owlet-and-ops-genie.md b/content/tutorials/2.projects/use-directus-as-a-baby-health-tracker-with-owlet-and-ops-genie.md
index 6ab35ba20..a97a2db3b 100644
--- a/content/tutorials/2.projects/use-directus-as-a-baby-health-tracker-with-owlet-and-ops-genie.md
+++ b/content/tutorials/2.projects/use-directus-as-a-baby-health-tracker-with-owlet-and-ops-genie.md
@@ -1,4 +1,5 @@
---
+stableId: 085ef055-f42c-4c09-84d4-f6e7dd934de4
id: 2aa59541-f1aa-4b2e-bdc4-64fa74d4af83
slug: use-directus-as-a-baby-health-tracker-with-owlet-and-ops-genie
title: Use Directus as a Baby Health Tracker with Owlet and OpsGenie
diff --git a/content/tutorials/3.tips-and-tricks/advanced-types-with-the-directus-sdk.md b/content/tutorials/3.tips-and-tricks/advanced-types-with-the-directus-sdk.md
index c5c435707..a1e98c83c 100644
--- a/content/tutorials/3.tips-and-tricks/advanced-types-with-the-directus-sdk.md
+++ b/content/tutorials/3.tips-and-tricks/advanced-types-with-the-directus-sdk.md
@@ -1,4 +1,5 @@
---
+stableId: 9b909764-1d6a-4524-9d7f-2db000e933fe
id: 210f1fed-c5f7-4ef7-8155-0c08c2562852
slug: advanced-types-with-the-directus-sdk
title: Advanced Types with the Directus SDK
diff --git a/content/tutorials/3.tips-and-tricks/build-a-monitoring-pipeline-for-flows-and-extensions-.md b/content/tutorials/3.tips-and-tricks/build-a-monitoring-pipeline-for-flows-and-extensions-.md
index 591d2b0a3..c681348f9 100644
--- a/content/tutorials/3.tips-and-tricks/build-a-monitoring-pipeline-for-flows-and-extensions-.md
+++ b/content/tutorials/3.tips-and-tricks/build-a-monitoring-pipeline-for-flows-and-extensions-.md
@@ -1,4 +1,5 @@
---
+stableId: 601e2891-5380-4c42-9159-cfa20b544a5f
id: 8fde0935-5bd7-4f95-980b-337aecb9cb01
slug: build-a-monitoring-pipeline-for-flows-and-extensions-
title: Build a Monitoring Pipeline For Flows And Extensions
diff --git a/content/tutorials/3.tips-and-tricks/configure-okta-as-a-single-sign-on-provider.md b/content/tutorials/3.tips-and-tricks/configure-okta-as-a-single-sign-on-provider.md
index 6a3584a7f..6c20cce4b 100644
--- a/content/tutorials/3.tips-and-tricks/configure-okta-as-a-single-sign-on-provider.md
+++ b/content/tutorials/3.tips-and-tricks/configure-okta-as-a-single-sign-on-provider.md
@@ -1,4 +1,5 @@
---
+stableId: 400c4a8d-41cc-4aa3-850c-29eb89da21fe
id: 810c2e77-402d-486f-a37a-159731b90767
slug: configure-okta-as-a-single-sign-on-provider
title: Configure Okta as a Single Sign-On Provider
diff --git a/content/tutorials/3.tips-and-tricks/implement-pagination-and-infinite-scrolling-in-next-js-.md b/content/tutorials/3.tips-and-tricks/implement-pagination-and-infinite-scrolling-in-next-js-.md
index 99846afa7..ae3709944 100644
--- a/content/tutorials/3.tips-and-tricks/implement-pagination-and-infinite-scrolling-in-next-js-.md
+++ b/content/tutorials/3.tips-and-tricks/implement-pagination-and-infinite-scrolling-in-next-js-.md
@@ -1,4 +1,5 @@
---
+stableId: f7a62c07-ea5a-41de-8fb3-8b1493480209
id: 2b0a0315-d7f2-4dc9-9d63-8f853eb81a09
slug: implement-pagination-and-infinite-scrolling-in-next-js-
title: Implement Pagination and Infinite Scrolling in Next.js
diff --git a/content/tutorials/3.tips-and-tricks/importing-files-in-directus-automate.md b/content/tutorials/3.tips-and-tricks/importing-files-in-directus-automate.md
index 1b0a9fddb..b499bf848 100644
--- a/content/tutorials/3.tips-and-tricks/importing-files-in-directus-automate.md
+++ b/content/tutorials/3.tips-and-tricks/importing-files-in-directus-automate.md
@@ -1,4 +1,5 @@
---
+stableId: 05984f63-aae9-4ac5-bf21-5d0a7a0856c4
id: c95350f1-1ace-488b-b293-77546b6ebe17
slug: importing-files-in-directus-automate
title: Importing Files in Directus Automate
diff --git a/content/tutorials/3.tips-and-tricks/index.md b/content/tutorials/3.tips-and-tricks/index.md
index fcca890f7..6b5e8968e 100644
--- a/content/tutorials/3.tips-and-tricks/index.md
+++ b/content/tutorials/3.tips-and-tricks/index.md
@@ -1,3 +1,4 @@
---
+stableId: 9bd67502-aaeb-44d6-b7ca-d58b8f06ccea
title: Tips & Tricks
---
diff --git a/content/tutorials/3.tips-and-tricks/preview-files-in-live-preview-with-google-docs-previews.md b/content/tutorials/3.tips-and-tricks/preview-files-in-live-preview-with-google-docs-previews.md
index fa4f3b2bd..e2b39dc03 100644
--- a/content/tutorials/3.tips-and-tricks/preview-files-in-live-preview-with-google-docs-previews.md
+++ b/content/tutorials/3.tips-and-tricks/preview-files-in-live-preview-with-google-docs-previews.md
@@ -1,4 +1,5 @@
---
+stableId: 9672836c-5724-41aa-819a-078253d1ee1a
id: d204a3d5-d674-4a21-862e-6c9c8ac82ab3
slug: preview-files-in-live-preview-with-google-docs-previews
title: Preview Files in Live Preview with Google Docs Previews
diff --git a/content/tutorials/3.tips-and-tricks/search-engine-optimization-best-practices.md b/content/tutorials/3.tips-and-tricks/search-engine-optimization-best-practices.md
index 6ef9e2c55..713d1d13d 100644
--- a/content/tutorials/3.tips-and-tricks/search-engine-optimization-best-practices.md
+++ b/content/tutorials/3.tips-and-tricks/search-engine-optimization-best-practices.md
@@ -1,4 +1,5 @@
---
+stableId: 4e510251-2a5a-4e15-bb27-d28a742af024
id: efb3fc4e-36cb-44e0-af93-adce554fdad0
slug: search-engine-optimization-best-practices
title: Search Engine Optimization Best Practices
diff --git a/content/tutorials/3.tips-and-tricks/understanding-kubernetes.md b/content/tutorials/3.tips-and-tricks/understanding-kubernetes.md
index 2d071b7f1..c1fc55ac8 100644
--- a/content/tutorials/3.tips-and-tricks/understanding-kubernetes.md
+++ b/content/tutorials/3.tips-and-tricks/understanding-kubernetes.md
@@ -1,4 +1,5 @@
---
+stableId: 9da22b66-3bd7-4a11-9e94-18df020a9fb9
id: 92776b78-2741-4ee7-96a2-bd8137b8ebc9
slug: understanding-kubernetes
title: Understanding Kubernetes
diff --git a/content/tutorials/4.migration/index.md b/content/tutorials/4.migration/index.md
index 8083bf827..e9ed29920 100644
--- a/content/tutorials/4.migration/index.md
+++ b/content/tutorials/4.migration/index.md
@@ -1,3 +1,4 @@
---
+stableId: cd0b8ac8-0e6a-4686-afc0-44d57d34af52
title: Migration
---
diff --git a/content/tutorials/4.migration/migrate-from-notion-to-directus.md b/content/tutorials/4.migration/migrate-from-notion-to-directus.md
index c16b1dc7c..413201543 100644
--- a/content/tutorials/4.migration/migrate-from-notion-to-directus.md
+++ b/content/tutorials/4.migration/migrate-from-notion-to-directus.md
@@ -1,4 +1,5 @@
---
+stableId: a65a7b6a-63bd-457c-87ca-fd8194edfbb0
id: 4a0304fd-c3c3-43f9-8102-acfc6009e26d
slug: migrate-from-notion-to-directus
title: Migrate from Notion to Directus
diff --git a/content/tutorials/4.migration/migrate-from-nuxt-content-to-directus.md b/content/tutorials/4.migration/migrate-from-nuxt-content-to-directus.md
index 63539e2d8..6763263ee 100644
--- a/content/tutorials/4.migration/migrate-from-nuxt-content-to-directus.md
+++ b/content/tutorials/4.migration/migrate-from-nuxt-content-to-directus.md
@@ -1,4 +1,5 @@
---
+stableId: 2713080a-7015-4252-a7fe-a46213917423
id: 023412b4-f8c3-4016-921d-756c75aad1e6
slug: migrate-from-nuxt-content-to-directus
title: Migrate from Nuxt Content to Directus
diff --git a/content/tutorials/4.migration/migrate-from-wordpress-to-directus.md b/content/tutorials/4.migration/migrate-from-wordpress-to-directus.md
index 6a537791f..8fa64b8ed 100644
--- a/content/tutorials/4.migration/migrate-from-wordpress-to-directus.md
+++ b/content/tutorials/4.migration/migrate-from-wordpress-to-directus.md
@@ -1,4 +1,5 @@
---
+stableId: 0aae3c1e-6cd7-4e59-ae60-8053debbe19b
id: 5a282783-0fd8-4a2c-9c4c-47b00c5ad3d1
slug: migrate-from-wordpress-to-directus
title: Migrate from WordPress to Directus
diff --git a/content/tutorials/4.migration/promoting-changes-between-environments-in-directus.md b/content/tutorials/4.migration/promoting-changes-between-environments-in-directus.md
index 89a777bdb..baa9eccaf 100644
--- a/content/tutorials/4.migration/promoting-changes-between-environments-in-directus.md
+++ b/content/tutorials/4.migration/promoting-changes-between-environments-in-directus.md
@@ -1,4 +1,5 @@
---
+stableId: b04b55ba-2cd6-4f1e-9e4f-b3579e6768e9
id: 38c78e29-8fad-46f8-8855-f18864310d00
slug: promoting-changes-between-environments-in-directus
title: Promoting Changes Between Environments in Directus
diff --git a/content/tutorials/5.extensions/check-permissions-in-a-custom-endpoint.md b/content/tutorials/5.extensions/check-permissions-in-a-custom-endpoint.md
index b373fa12b..eafcd540b 100644
--- a/content/tutorials/5.extensions/check-permissions-in-a-custom-endpoint.md
+++ b/content/tutorials/5.extensions/check-permissions-in-a-custom-endpoint.md
@@ -1,4 +1,5 @@
---
+stableId: a0945c19-ed9d-4a16-9c0e-da4fb85996da
id: a2177488-2e50-4206-97a2-a36f3a506541
slug: check-permissions-in-a-custom-endpoint
title: Check Permissions in a Custom Endpoint
diff --git a/content/tutorials/5.extensions/create-collection-items-in-custom-panels.md b/content/tutorials/5.extensions/create-collection-items-in-custom-panels.md
index 4829a08bc..6e3e6d0c0 100644
--- a/content/tutorials/5.extensions/create-collection-items-in-custom-panels.md
+++ b/content/tutorials/5.extensions/create-collection-items-in-custom-panels.md
@@ -1,4 +1,5 @@
---
+stableId: 5bfabd97-af2a-4694-9156-9eb633051efb
id: b8fa9a76-063b-499f-80e7-737f08f94684
slug: create-collection-items-in-custom-panels
title: Create Collection Items in Custom Panels
diff --git a/content/tutorials/5.extensions/create-new-customers-in-stripe-in-a-custom-hook.md b/content/tutorials/5.extensions/create-new-customers-in-stripe-in-a-custom-hook.md
index 9b3cc4794..a1e0fe78b 100644
--- a/content/tutorials/5.extensions/create-new-customers-in-stripe-in-a-custom-hook.md
+++ b/content/tutorials/5.extensions/create-new-customers-in-stripe-in-a-custom-hook.md
@@ -1,4 +1,5 @@
---
+stableId: 6f673434-bdbf-4a89-9440-18e2e13623da
id: ba5c9666-330f-4349-9f1e-da113fb84d27
slug: create-new-customers-in-stripe-in-a-custom-hook
title: Create New Customers in Stripe in a Custom Hook
diff --git a/content/tutorials/5.extensions/display-external-api-data-from-vonage-in-custom-panels.md b/content/tutorials/5.extensions/display-external-api-data-from-vonage-in-custom-panels.md
index 9cc5a8616..639125703 100644
--- a/content/tutorials/5.extensions/display-external-api-data-from-vonage-in-custom-panels.md
+++ b/content/tutorials/5.extensions/display-external-api-data-from-vonage-in-custom-panels.md
@@ -1,4 +1,5 @@
---
+stableId: afd47502-8778-42b9-8ca8-8e4a6f1fb427
id: cb0c443f-e261-4d33-a420-aef1a97f9b06
slug: display-external-api-data-from-vonage-in-custom-panels
title: Display External API Data From Vonage In Custom Panels
diff --git a/content/tutorials/5.extensions/display-external-weather-api-data-in-custom-panels.md b/content/tutorials/5.extensions/display-external-weather-api-data-in-custom-panels.md
index 444c1226d..2da04c4c4 100644
--- a/content/tutorials/5.extensions/display-external-weather-api-data-in-custom-panels.md
+++ b/content/tutorials/5.extensions/display-external-weather-api-data-in-custom-panels.md
@@ -1,4 +1,5 @@
---
+stableId: 27b39214-699f-4f38-ab6b-6a5cf060ace6
id: 4cf07b05-bd1a-41cf-acf7-14891f44dae6
slug: display-external-weather-api-data-in-custom-panels
title: Display External Weather API Data In Custom Panels
diff --git a/content/tutorials/5.extensions/format-dates-in-a-custom-display-extension.md b/content/tutorials/5.extensions/format-dates-in-a-custom-display-extension.md
index d748dd6c0..d81cdcb36 100644
--- a/content/tutorials/5.extensions/format-dates-in-a-custom-display-extension.md
+++ b/content/tutorials/5.extensions/format-dates-in-a-custom-display-extension.md
@@ -1,4 +1,5 @@
---
+stableId: 5e252930-7eb3-4c47-a34b-8ea2a4077ff7
id: 8c3f5a07-162f-4902-8044-dd5fa8b823c2
slug: format-dates-in-a-custom-display-extension
title: Format Dates in a Custom Display Extension
diff --git a/content/tutorials/5.extensions/implement-navigation-in-multipage-custom-modules.md b/content/tutorials/5.extensions/implement-navigation-in-multipage-custom-modules.md
index ee3d195ee..b11c31f7b 100644
--- a/content/tutorials/5.extensions/implement-navigation-in-multipage-custom-modules.md
+++ b/content/tutorials/5.extensions/implement-navigation-in-multipage-custom-modules.md
@@ -1,4 +1,5 @@
---
+stableId: 48273337-cf60-4265-b50d-d426fedb0c31
id: 02b0514b-0ee9-426e-89f9-14dc73bfd62d
slug: implement-navigation-in-multipage-custom-modules
title: Implement Navigation in Multipage Custom Modules
diff --git a/content/tutorials/5.extensions/index.md b/content/tutorials/5.extensions/index.md
index ab761ed50..1d5fc2644 100644
--- a/content/tutorials/5.extensions/index.md
+++ b/content/tutorials/5.extensions/index.md
@@ -1,4 +1,5 @@
---
+stableId: 98d7f795-ff24-4267-ad91-803b2b92fd25
title: Extensions
description: All about extensions
---
diff --git a/content/tutorials/5.extensions/integrate-algolia-indexing-with-custom-hooks.md b/content/tutorials/5.extensions/integrate-algolia-indexing-with-custom-hooks.md
index 494eaf94e..dfc50a885 100644
--- a/content/tutorials/5.extensions/integrate-algolia-indexing-with-custom-hooks.md
+++ b/content/tutorials/5.extensions/integrate-algolia-indexing-with-custom-hooks.md
@@ -1,4 +1,5 @@
---
+stableId: 517fec35-321e-42aa-892c-09f07a6d766c
id: bb540f00-8933-46f1-a2ef-e353e2df160d
slug: integrate-algolia-indexing-with-custom-hooks
title: Integrate Algolia Indexing with Custom Hooks
diff --git a/content/tutorials/5.extensions/integrate-elasticsearch-indexing-with-custom-hooks.md b/content/tutorials/5.extensions/integrate-elasticsearch-indexing-with-custom-hooks.md
index 764b83dbe..5b7adcf64 100644
--- a/content/tutorials/5.extensions/integrate-elasticsearch-indexing-with-custom-hooks.md
+++ b/content/tutorials/5.extensions/integrate-elasticsearch-indexing-with-custom-hooks.md
@@ -1,4 +1,5 @@
---
+stableId: f75aaede-b1a9-4dbd-8b93-6343eb2d852d
id: 11878553-5f03-4992-b321-5a983826c983
slug: integrate-elasticsearch-indexing-with-custom-hooks
title: Integrate Elasticsearch Indexing with Custom Hooks
diff --git a/content/tutorials/5.extensions/integrate-meilisearch-indexing-with-custom-hooks.md b/content/tutorials/5.extensions/integrate-meilisearch-indexing-with-custom-hooks.md
index 7f84ef9bc..f6eecad0d 100644
--- a/content/tutorials/5.extensions/integrate-meilisearch-indexing-with-custom-hooks.md
+++ b/content/tutorials/5.extensions/integrate-meilisearch-indexing-with-custom-hooks.md
@@ -1,4 +1,5 @@
---
+stableId: 7fa99674-e335-4de0-a2dd-3a470b1fd732
id: 27fd058d-83da-4ea5-b7cc-458c4c696079
slug: integrate-meilisearch-indexing-with-custom-hooks
title: Integrate Meilisearch Indexing with Custom Hooks
diff --git a/content/tutorials/5.extensions/monitor-and-error-track-with-sentry-in-custom-hooks.md b/content/tutorials/5.extensions/monitor-and-error-track-with-sentry-in-custom-hooks.md
index 299c7d7f9..ce9c98aeb 100644
--- a/content/tutorials/5.extensions/monitor-and-error-track-with-sentry-in-custom-hooks.md
+++ b/content/tutorials/5.extensions/monitor-and-error-track-with-sentry-in-custom-hooks.md
@@ -1,4 +1,5 @@
---
+stableId: c8c5d921-e41f-437b-99cd-053fad4540c3
id: 05df72da-c73d-4f68-a651-a95343227e85
slug: monitor-and-error-track-with-sentry-in-custom-hooks
title: Monitor and Error Track with Sentry in Custom Hooks
diff --git a/content/tutorials/5.extensions/proxy-an-external-api-in-a-custom-endpoint-extension.md b/content/tutorials/5.extensions/proxy-an-external-api-in-a-custom-endpoint-extension.md
index 36c7f60fd..5db9d9849 100644
--- a/content/tutorials/5.extensions/proxy-an-external-api-in-a-custom-endpoint-extension.md
+++ b/content/tutorials/5.extensions/proxy-an-external-api-in-a-custom-endpoint-extension.md
@@ -1,4 +1,5 @@
---
+stableId: bdd27ae8-1cd8-4ee0-9a6b-29c190d8c742
id: 5e47f786-eddb-4570-bda9-60d6427282af
slug: proxy-an-external-api-in-a-custom-endpoint-extension
title: Proxy an External API in a Custom Endpoint Extension
diff --git a/content/tutorials/5.extensions/read-collection-data-in-custom-layouts.md b/content/tutorials/5.extensions/read-collection-data-in-custom-layouts.md
index 29e0567be..910f56981 100644
--- a/content/tutorials/5.extensions/read-collection-data-in-custom-layouts.md
+++ b/content/tutorials/5.extensions/read-collection-data-in-custom-layouts.md
@@ -1,4 +1,5 @@
---
+stableId: 8853fcca-7cb3-4de8-a1c2-2d438d812b62
id: a5598c32-0b99-4c24-9e3c-2e9b73b600e8
slug: read-collection-data-in-custom-layouts
title: Read Collection Data in Custom Layouts
diff --git a/content/tutorials/5.extensions/send-sms-messages-with-twilio-in-custom-operations.md b/content/tutorials/5.extensions/send-sms-messages-with-twilio-in-custom-operations.md
index fc0f5841f..f99d5f4a5 100644
--- a/content/tutorials/5.extensions/send-sms-messages-with-twilio-in-custom-operations.md
+++ b/content/tutorials/5.extensions/send-sms-messages-with-twilio-in-custom-operations.md
@@ -1,4 +1,5 @@
---
+stableId: e521a65d-42cd-4cb0-87ab-34e7d8fe00ec
id: 79c82730-7768-4722-8538-7f3fecac3d43
slug: send-sms-messages-with-twilio-in-custom-operations
title: Send SMS Messages with Twilio in Custom Operations
diff --git a/content/tutorials/5.extensions/send-sms-messages-with-twilio-in-custom-panels.md b/content/tutorials/5.extensions/send-sms-messages-with-twilio-in-custom-panels.md
index 1e3e249a9..7d0b77153 100644
--- a/content/tutorials/5.extensions/send-sms-messages-with-twilio-in-custom-panels.md
+++ b/content/tutorials/5.extensions/send-sms-messages-with-twilio-in-custom-panels.md
@@ -1,4 +1,5 @@
---
+stableId: 38a54e0c-83af-44e2-a838-800705f02794
id: 9dbc2c00-796b-48ff-8ed6-f01ddf72d7ef
slug: send-sms-messages-with-twilio-in-custom-panels
title: Send SMS Messages with Twilio in Custom Panels
diff --git a/content/tutorials/5.extensions/summarize-relational-items-in-a-custom-display-extension.md b/content/tutorials/5.extensions/summarize-relational-items-in-a-custom-display-extension.md
index ef2abf96a..4bde5b8b8 100644
--- a/content/tutorials/5.extensions/summarize-relational-items-in-a-custom-display-extension.md
+++ b/content/tutorials/5.extensions/summarize-relational-items-in-a-custom-display-extension.md
@@ -1,4 +1,5 @@
---
+stableId: 96599788-9030-4596-a16d-eaf2a102b41d
id: dfddca20-1cc7-4d66-bce0-0e88b36daa18
slug: summarize-relational-items-in-a-custom-display-extension
title: Summarize Relational Items in a Custom Display Extension
diff --git a/content/tutorials/5.extensions/understand-available-slots-in-custom-modules.md b/content/tutorials/5.extensions/understand-available-slots-in-custom-modules.md
index b4278b74e..fdeb702bb 100644
--- a/content/tutorials/5.extensions/understand-available-slots-in-custom-modules.md
+++ b/content/tutorials/5.extensions/understand-available-slots-in-custom-modules.md
@@ -1,4 +1,5 @@
---
+stableId: dcf975ee-c4fb-431d-ae2e-d80427032821
id: 46046425-151c-4bb3-bd47-6274b5e24ecb
slug: understand-available-slots-in-custom-modules
title: Understand Available Slots in Custom Modules
diff --git a/content/tutorials/5.extensions/use-dynamic-values-in-custom-email-templates.md b/content/tutorials/5.extensions/use-dynamic-values-in-custom-email-templates.md
index a706cf283..1b57da3d1 100644
--- a/content/tutorials/5.extensions/use-dynamic-values-in-custom-email-templates.md
+++ b/content/tutorials/5.extensions/use-dynamic-values-in-custom-email-templates.md
@@ -1,4 +1,5 @@
---
+stableId: 4a7052e3-b7c0-4cde-8853-d67e0391f38d
id: ca326a34-f92f-4967-96d8-4c9be74a23fd
slug: use-dynamic-values-in-custom-email-templates
title: Use Dynamic Values in Custom Email Templates
diff --git a/content/tutorials/5.extensions/use-npm-packages-in-custom-operations.md b/content/tutorials/5.extensions/use-npm-packages-in-custom-operations.md
index 73d554eeb..88f482848 100644
--- a/content/tutorials/5.extensions/use-npm-packages-in-custom-operations.md
+++ b/content/tutorials/5.extensions/use-npm-packages-in-custom-operations.md
@@ -1,4 +1,5 @@
---
+stableId: 108362e9-deea-4072-aca6-920a7d6e7265
id: 9e2efc14-27b4-4fa0-9632-71d922947fa2
slug: use-npm-packages-in-custom-operations
title: Use npm Packages in Custom Operations
diff --git a/content/tutorials/5.extensions/validate-phone-numbers-with-twilio-in-a-custom-hook.md b/content/tutorials/5.extensions/validate-phone-numbers-with-twilio-in-a-custom-hook.md
index 28fec324b..fe202efb4 100644
--- a/content/tutorials/5.extensions/validate-phone-numbers-with-twilio-in-a-custom-hook.md
+++ b/content/tutorials/5.extensions/validate-phone-numbers-with-twilio-in-a-custom-hook.md
@@ -1,4 +1,5 @@
---
+stableId: 56ba3ad4-0e59-4819-bbbd-cdffcaa6956f
id: 20e049fb-529f-4a71-8a34-1e4e61d34af1
slug: validate-phone-numbers-with-twilio-in-a-custom-hook
title: Validate Phone Numbers with Twilio in a Custom Hook
diff --git a/content/tutorials/5.extensions/validating-third-party-jwts-in-directus.md b/content/tutorials/5.extensions/validating-third-party-jwts-in-directus.md
index d14623aad..167117490 100644
--- a/content/tutorials/5.extensions/validating-third-party-jwts-in-directus.md
+++ b/content/tutorials/5.extensions/validating-third-party-jwts-in-directus.md
@@ -1,4 +1,5 @@
---
+stableId: 3b58ec70-1bee-4e25-9a8c-8db924f204cd
slug: validating-third-party-jwts-in-directus
title: Validating Third-Party JWTs in Directus (with Okta)
description: Learn how to translate third part JWT's to Directus accountability
diff --git a/content/tutorials/6.self-hosting/deploy-directus-to-an-ubuntu-server.md b/content/tutorials/6.self-hosting/deploy-directus-to-an-ubuntu-server.md
index bac358b30..0b4fdf968 100644
--- a/content/tutorials/6.self-hosting/deploy-directus-to-an-ubuntu-server.md
+++ b/content/tutorials/6.self-hosting/deploy-directus-to-an-ubuntu-server.md
@@ -1,4 +1,5 @@
---
+stableId: 3b3c64bb-f909-4f57-b6f6-3a3854995414
id: 5a48edd1-f8d2-499d-8f1a-6a6b378c65d9
slug: deploy-directus-to-an-ubuntu-server
title: Deploy Directus to an Ubuntu Server
diff --git a/content/tutorials/6.self-hosting/deploy-directus-to-aws-ec2.md b/content/tutorials/6.self-hosting/deploy-directus-to-aws-ec2.md
index 0b0adb0b3..ea703aaa2 100644
--- a/content/tutorials/6.self-hosting/deploy-directus-to-aws-ec2.md
+++ b/content/tutorials/6.self-hosting/deploy-directus-to-aws-ec2.md
@@ -1,4 +1,5 @@
---
+stableId: d5fa569d-b780-43e2-8de6-0268c1b34b1f
id: aa9c315b-633a-4e58-aef3-ecf1161d8f55
slug: deploy-directus-to-aws-ec2
title: Deploy Directus to AWS EC2
diff --git a/content/tutorials/6.self-hosting/deploy-directus-to-azure-web-apps.md b/content/tutorials/6.self-hosting/deploy-directus-to-azure-web-apps.md
index d4b6455d1..aada0cc7c 100644
--- a/content/tutorials/6.self-hosting/deploy-directus-to-azure-web-apps.md
+++ b/content/tutorials/6.self-hosting/deploy-directus-to-azure-web-apps.md
@@ -1,4 +1,5 @@
---
+stableId: 5c7bdb80-e962-4cde-981b-bad86237e103
id: 9b45c97a-d980-42fd-b802-9b341f10b35a
slug: deploy-directus-to-azure-web-apps
title: Deploy Directus to Azure Web Apps
diff --git a/content/tutorials/6.self-hosting/deploy-directus-to-digital-ocean.md b/content/tutorials/6.self-hosting/deploy-directus-to-digital-ocean.md
index 98128ef45..358b2f24e 100644
--- a/content/tutorials/6.self-hosting/deploy-directus-to-digital-ocean.md
+++ b/content/tutorials/6.self-hosting/deploy-directus-to-digital-ocean.md
@@ -1,4 +1,5 @@
---
+stableId: 2e51d7f7-5c1b-4ce4-bacf-ce9f6591fd4f
id: 0398217e-fabe-4866-9827-d5e4172fe3a9
slug: deploy-directus-to-digital-ocean
title: Deploy Directus to Digital Ocean
diff --git a/content/tutorials/6.self-hosting/deploy-directus-to-google-cloud-platform.md b/content/tutorials/6.self-hosting/deploy-directus-to-google-cloud-platform.md
index 28d18dd1c..74d59013b 100644
--- a/content/tutorials/6.self-hosting/deploy-directus-to-google-cloud-platform.md
+++ b/content/tutorials/6.self-hosting/deploy-directus-to-google-cloud-platform.md
@@ -1,4 +1,5 @@
---
+stableId: db34a47d-af53-4570-85f3-594754d070bb
id: 2cdec3d5-9f3d-4c43-9541-6a9f5bc68007
slug: deploy-directus-to-google-cloud-platform
title: Deploy Directus to Google Cloud Platform
diff --git a/content/tutorials/6.self-hosting/deploy-directus-to-railway.md b/content/tutorials/6.self-hosting/deploy-directus-to-railway.md
index 970b5f7fd..0560b876b 100644
--- a/content/tutorials/6.self-hosting/deploy-directus-to-railway.md
+++ b/content/tutorials/6.self-hosting/deploy-directus-to-railway.md
@@ -1,4 +1,5 @@
---
+stableId: 87653fa9-752d-4614-a074-150f7647d3b8
id: 7c8e9f0a-1b2c-4d5e-8f9a-0b1c2d3e4f5a
slug: deploy-directus-to-railway
title: Deploy Directus to Railway
diff --git a/content/tutorials/6.self-hosting/index.md b/content/tutorials/6.self-hosting/index.md
index 6cb768d20..f254a6dcf 100644
--- a/content/tutorials/6.self-hosting/index.md
+++ b/content/tutorials/6.self-hosting/index.md
@@ -1,4 +1,5 @@
---
+stableId: eb1a09a1-e369-4bd5-a1f2-566c4024468a
title: How to Deploy Directus
description: Deploy Directus with Directus Cloud, self-host with Docker, or follow step-by-step guides for your preferred cloud provider.
---
diff --git a/content/tutorials/7.workflows/build-content-approval-workflows-with-custom-permissions.md b/content/tutorials/7.workflows/build-content-approval-workflows-with-custom-permissions.md
index d480603ac..84b9117f1 100644
--- a/content/tutorials/7.workflows/build-content-approval-workflows-with-custom-permissions.md
+++ b/content/tutorials/7.workflows/build-content-approval-workflows-with-custom-permissions.md
@@ -1,4 +1,5 @@
---
+stableId: 4396aa25-77f1-487e-be30-33f0f9578abc
id: 8ab7ca33-2534-42b0-9857-ce840a001a50
slug: build-content-approval-workflows-with-custom-permissions
title: Build Content Approval Workflows with Custom Permissions
diff --git a/content/tutorials/7.workflows/combine-live-preview-and-content-versioning-with-next-js.md b/content/tutorials/7.workflows/combine-live-preview-and-content-versioning-with-next-js.md
index 33dda711b..463e062ae 100644
--- a/content/tutorials/7.workflows/combine-live-preview-and-content-versioning-with-next-js.md
+++ b/content/tutorials/7.workflows/combine-live-preview-and-content-versioning-with-next-js.md
@@ -1,4 +1,5 @@
---
+stableId: 1953c647-6cd3-420c-a9dd-f3afd5693be7
id: 422c9d3c-d5da-45ff-abec-fdbf71a54721
slug: combine-live-preview-and-content-versioning-with-next-js
title: Combine Live Preview and Content Versioning with Next.js
diff --git a/content/tutorials/7.workflows/create-github-issues-with-directus-automate.md b/content/tutorials/7.workflows/create-github-issues-with-directus-automate.md
index dedc44080..4d9ab5674 100644
--- a/content/tutorials/7.workflows/create-github-issues-with-directus-automate.md
+++ b/content/tutorials/7.workflows/create-github-issues-with-directus-automate.md
@@ -1,4 +1,5 @@
---
+stableId: f1b91cbc-3e94-4214-b49a-350ae0f4ed55
id: 34bda8b7-e162-4090-8ceb-ae3db85fb098
slug: create-github-issues-with-directus-automate
title: Create GitHub Issues with Directus Automate
diff --git a/content/tutorials/7.workflows/detect-high-risk-phone-numbers-with-vonage-and-directus-automate.md b/content/tutorials/7.workflows/detect-high-risk-phone-numbers-with-vonage-and-directus-automate.md
index 115ae942d..eae32f3fd 100644
--- a/content/tutorials/7.workflows/detect-high-risk-phone-numbers-with-vonage-and-directus-automate.md
+++ b/content/tutorials/7.workflows/detect-high-risk-phone-numbers-with-vonage-and-directus-automate.md
@@ -1,4 +1,5 @@
---
+stableId: 67b6c096-9b87-4b50-9550-6213469c52b1
id: 6388aa8a-99b5-4a3b-a9ff-275d26b8cb81
slug: detect-high-risk-phone-numbers-with-vonage-and-directus-automate
title: Detect High-Risk Phone Numbers with Vonage and Directus Automate
diff --git a/content/tutorials/7.workflows/enrich-user-data-with-clearbit-and-directus-automate.md b/content/tutorials/7.workflows/enrich-user-data-with-clearbit-and-directus-automate.md
index d798cf004..d8feb2557 100644
--- a/content/tutorials/7.workflows/enrich-user-data-with-clearbit-and-directus-automate.md
+++ b/content/tutorials/7.workflows/enrich-user-data-with-clearbit-and-directus-automate.md
@@ -1,4 +1,5 @@
---
+stableId: d2f091ed-8952-4c98-9d59-eadf4c1e2453
id: 571e0f54-f95d-4ccf-8712-8b92150b364f
slug: enrich-user-data-with-clearbit-and-directus-automate
title: Enrich User Data with Clearbit and Directus Automate
diff --git a/content/tutorials/7.workflows/generate-images-with-dall-e-and-directus-automate.md b/content/tutorials/7.workflows/generate-images-with-dall-e-and-directus-automate.md
index ff6b2ec33..1b120c8cf 100644
--- a/content/tutorials/7.workflows/generate-images-with-dall-e-and-directus-automate.md
+++ b/content/tutorials/7.workflows/generate-images-with-dall-e-and-directus-automate.md
@@ -1,4 +1,5 @@
---
+stableId: 5b0030d0-d6c0-4e7f-9d0e-b2914ceb3f45
id: 9feb1c8f-0500-4bff-9b2f-d69e08d316e7
slug: generate-images-with-dall-e-and-directus-automate
title: Generate Images with DALL•E and Directus Automate
diff --git a/content/tutorials/7.workflows/generate-social-posts-with-gpt-4-and-directus-automate.md b/content/tutorials/7.workflows/generate-social-posts-with-gpt-4-and-directus-automate.md
index 2b394bd6e..868fd51c6 100644
--- a/content/tutorials/7.workflows/generate-social-posts-with-gpt-4-and-directus-automate.md
+++ b/content/tutorials/7.workflows/generate-social-posts-with-gpt-4-and-directus-automate.md
@@ -1,4 +1,5 @@
---
+stableId: 6f67abf4-3bcb-4d99-93d0-33f511c81e04
id: 3b8646a5-cdfa-4841-bc43-1aa337b6e4f7
slug: generate-social-posts-with-gpt-4-and-directus-automate
title: Generate Social Posts with GPT-4 and Directus Automate
diff --git a/content/tutorials/7.workflows/generate-transcripts-with-deepgram-and-directus-automate.md b/content/tutorials/7.workflows/generate-transcripts-with-deepgram-and-directus-automate.md
index 063b7a2ea..2e7c70344 100644
--- a/content/tutorials/7.workflows/generate-transcripts-with-deepgram-and-directus-automate.md
+++ b/content/tutorials/7.workflows/generate-transcripts-with-deepgram-and-directus-automate.md
@@ -1,4 +1,5 @@
---
+stableId: f46d4a90-cff7-4431-b552-8b1296ef5720
id: 89cd5e8e-cabd-4422-92c8-9736faedefe0
slug: generate-transcripts-with-deepgram-and-directus-automate
title: Generate Transcripts with Deepgram and Directus Automate
diff --git a/content/tutorials/7.workflows/index.md b/content/tutorials/7.workflows/index.md
index fc15e77a3..422ee6a12 100644
--- a/content/tutorials/7.workflows/index.md
+++ b/content/tutorials/7.workflows/index.md
@@ -1,3 +1,4 @@
---
+stableId: 70e51841-8685-452a-9b3b-6899b0a209a7
title: Workflows
---
diff --git a/content/tutorials/7.workflows/integrating-multilingual-content-with-directus-and-crowdin.md b/content/tutorials/7.workflows/integrating-multilingual-content-with-directus-and-crowdin.md
index 1c92c398a..fb078c951 100644
--- a/content/tutorials/7.workflows/integrating-multilingual-content-with-directus-and-crowdin.md
+++ b/content/tutorials/7.workflows/integrating-multilingual-content-with-directus-and-crowdin.md
@@ -1,4 +1,5 @@
---
+stableId: 18ca7924-fc9b-48df-980e-01635c0ff4ed
id: 84f37f00-629b-4b38-8d18-9d92cc4b2f0c
slug: integrating-multilingual-content-with-directus-and-crowdin
title: Integrating Multilingual Content with Directus and Crowdin
diff --git a/content/tutorials/7.workflows/invincible-ai-content-workflows-with-inngest-and-directus.md b/content/tutorials/7.workflows/invincible-ai-content-workflows-with-inngest-and-directus.md
index e7b9b264e..c2725ec1a 100644
--- a/content/tutorials/7.workflows/invincible-ai-content-workflows-with-inngest-and-directus.md
+++ b/content/tutorials/7.workflows/invincible-ai-content-workflows-with-inngest-and-directus.md
@@ -1,4 +1,5 @@
---
+stableId: 38e940b1-113e-44fb-bf8f-4906fb1cd578
slug: invincible-ai-content-workflows-with-inngest-and-directus
title: Invincible AI content workflows with Inngest and Directus
technologies:
diff --git a/content/tutorials/7.workflows/schedule-future-content-with-directus-automate.md b/content/tutorials/7.workflows/schedule-future-content-with-directus-automate.md
index e47e0f673..e47baeafd 100644
--- a/content/tutorials/7.workflows/schedule-future-content-with-directus-automate.md
+++ b/content/tutorials/7.workflows/schedule-future-content-with-directus-automate.md
@@ -1,4 +1,5 @@
---
+stableId: 4164fbc4-95f1-4097-b57c-1bd347561a15
id: c773724c-cc1b-4f79-bc46-208b26e8fd7f
slug: schedule-future-content-with-directus-automate
title: Schedule Future Content with Directus Automate
diff --git a/content/tutorials/7.workflows/tag-images-with-clarifai-and-directus-automate.md b/content/tutorials/7.workflows/tag-images-with-clarifai-and-directus-automate.md
index ad0e14cb4..2af9d16ac 100644
--- a/content/tutorials/7.workflows/tag-images-with-clarifai-and-directus-automate.md
+++ b/content/tutorials/7.workflows/tag-images-with-clarifai-and-directus-automate.md
@@ -1,4 +1,5 @@
---
+stableId: c15b7d0c-a285-479e-92c5-88f7f6a5c1fc
id: 73b10a4d-0da8-48c7-9753-4a3addd2c5ff
slug: tag-images-with-clarifai-and-directus-automate
title: Tag Images with Clarifai and Directus Automate
diff --git a/content/tutorials/7.workflows/trigger-netlify-site-builds-with-directus-automate.md b/content/tutorials/7.workflows/trigger-netlify-site-builds-with-directus-automate.md
index e0252485e..97a034437 100644
--- a/content/tutorials/7.workflows/trigger-netlify-site-builds-with-directus-automate.md
+++ b/content/tutorials/7.workflows/trigger-netlify-site-builds-with-directus-automate.md
@@ -1,4 +1,5 @@
---
+stableId: 51836497-a247-44f2-bd1f-f6275b8deb62
id: 03141a12-e9be-4fd5-8072-78685d4ff12b
slug: trigger-netlify-site-builds-with-directus-automate
title: Trigger Netlify Site Builds with Directus Automate
diff --git a/content/tutorials/7.workflows/trigger-vercel-site-builds-with-directus-automate.md b/content/tutorials/7.workflows/trigger-vercel-site-builds-with-directus-automate.md
index 43101c3ad..2eccab239 100644
--- a/content/tutorials/7.workflows/trigger-vercel-site-builds-with-directus-automate.md
+++ b/content/tutorials/7.workflows/trigger-vercel-site-builds-with-directus-automate.md
@@ -1,4 +1,5 @@
---
+stableId: 2b936565-a2c4-4545-896f-216bf5ce461c
id: 5ba45c20-d5f3-469a-a060-2d4fa960bd66
slug: trigger-vercel-site-builds-with-directus-automate
title: Trigger Vercel Site Builds with Directus Automate
diff --git a/content/tutorials/index.md b/content/tutorials/index.md
index 49c2edf70..e5d762509 100644
--- a/content/tutorials/index.md
+++ b/content/tutorials/index.md
@@ -1,4 +1,5 @@
---
+stableId: 728a8384-8b8c-4e76-bd5a-d7e9bdc3da98
title: Tutorials
---
From 0c01c40cbeb9ed03f9ce3c179f5c2ee7c07224a6 Mon Sep 17 00:00:00 2001
From: bryantgillespie
Date: Tue, 28 Apr 2026 09:34:37 -0400
Subject: [PATCH 13/45] =?UTF-8?q?feat(nav):=20rename=20Connect=E2=86=92API?=
=?UTF-8?q?s,=20Automate=E2=86=92Flows,=20Manage=E2=86=92Hosting?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/app.config.ts | 6 +++---
app/components/content/ProductLink.vue | 15 +++++++++++----
2 files changed, 14 insertions(+), 7 deletions(-)
diff --git a/app/app.config.ts b/app/app.config.ts
index 819d70bfb..f60157b40 100644
--- a/app/app.config.ts
+++ b/app/app.config.ts
@@ -55,7 +55,7 @@ export default defineAppConfig({
icon: 'directus-auth',
},
{
- label: 'Connect',
+ label: 'APIs',
to: '/guides/connect/authentication',
icon: 'directus-connect',
},
@@ -65,7 +65,7 @@ export default defineAppConfig({
icon: 'directus-files',
},
{
- label: 'Automate',
+ label: 'Flows',
to: '/guides/automate/flows',
icon: 'directus-automate',
},
@@ -107,7 +107,7 @@ export default defineAppConfig({
],
},
{
- label: 'Manage',
+ label: 'Hosting',
children: [
{
label: 'Cloud',
diff --git a/app/components/content/ProductLink.vue b/app/components/content/ProductLink.vue
index 86bc578bf..ad8559b79 100644
--- a/app/components/content/ProductLink.vue
+++ b/app/components/content/ProductLink.vue
@@ -3,10 +3,6 @@ const props = defineProps<{
product: keyof typeof linkMap;
}>();
-const name = computed(
- () => props.product.charAt(0).toUpperCase() + props.product.slice(1),
-);
-
const linkMap = {
'auth': '/guides/auth/tokens-cookies',
'automate': '/guides/automate/flows',
@@ -20,6 +16,17 @@ const linkMap = {
'insights': '/guides/insights/overview',
'realtime': '/guides/realtime/subscriptions',
} as const;
+
+const labelMap: Partial> = {
+ 'automate': 'Flows',
+ 'connect': 'APIs',
+ 'data-model': 'Data Model',
+};
+
+const name = computed(
+ () => labelMap[props.product]
+ ?? props.product.charAt(0).toUpperCase() + props.product.slice(1),
+);
From fb26a69f9a6c13488daf84d9453ee3c203c194df Mon Sep 17 00:00:00 2001
From: bryantgillespie
Date: Tue, 28 Apr 2026 09:34:50 -0400
Subject: [PATCH 14/45] feat(llms): rename guide section titles to APIs and
Flows
---
nuxt.config.ts | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/nuxt.config.ts b/nuxt.config.ts
index 171c93951..badeb1ded 100644
--- a/nuxt.config.ts
+++ b/nuxt.config.ts
@@ -245,9 +245,9 @@ export default defineNuxtConfig({
],
},
{
- title: 'Guides - Connect',
+ title: 'Guides - APIs',
description:
- 'Using the Directus REST and GraphQL APIs — authentication mechanics, filter operators, query parameters, pagination, relational queries, error handling, and the JavaScript/TypeScript SDK.',
+ 'Using the Directus REST and GraphQL APIs - authentication mechanics, filter operators, query parameters, pagination, relational queries, error handling, and the JavaScript/TypeScript SDK.',
contentCollection: 'content',
contentFilters: [
{ field: 'path', operator: 'LIKE', value: '/guides/connect%' },
@@ -263,7 +263,7 @@ export default defineNuxtConfig({
],
},
{
- title: 'Guides - Automate',
+ title: 'Guides - Flows',
description:
'Building event-driven automations with Flows, triggers, data chains, and operations.',
contentCollection: 'content',
From 853c5b382c6c877ac57d013cfbed15a736778352 Mon Sep 17 00:00:00 2001
From: bryantgillespie
Date: Tue, 28 Apr 2026 09:35:01 -0400
Subject: [PATCH 15/45] docs: replace branded "Directus Connect"/"Directus
Automate" with APIs/Flows
---
content/community/2.contribution/2.documentation.md | 2 +-
content/community/3.codebase/1.overview.md | 2 +-
content/getting-started/7.create-an-automation.md | 8 ++++----
content/guides/04.connect/1.authentication.md | 2 +-
.../guides/09.extensions/2.api-extensions/3.operations.md | 4 ++--
...-platform-with-next-js-stripe-and-directus-automate.md | 4 ++--
...-platform-with-next-js-stripe-and-directus-automate.md | 2 +-
...tus-garden-a-passive-collaborative-event-booth-demo.md | 4 ++--
...uilding-ai-venture-an-ai-powered-game-with-directus.md | 2 +-
...s-as-a-baby-health-tracker-with-owlet-and-ops-genie.md | 2 +-
.../importing-files-in-directus-automate.md | 6 +++---
.../5.extensions/use-npm-packages-in-custom-operations.md | 2 +-
.../create-github-issues-with-directus-automate.md | 8 ++++----
...isk-phone-numbers-with-vonage-and-directus-automate.md | 6 +++---
...nrich-user-data-with-clearbit-and-directus-automate.md | 6 +++---
.../generate-images-with-dall-e-and-directus-automate.md | 6 +++---
...erate-social-posts-with-gpt-4-and-directus-automate.md | 6 +++---
...ate-transcripts-with-deepgram-and-directus-automate.md | 6 +++---
.../schedule-future-content-with-directus-automate.md | 2 +-
.../tag-images-with-clarifai-and-directus-automate.md | 8 ++++----
.../trigger-netlify-site-builds-with-directus-automate.md | 4 ++--
.../trigger-vercel-site-builds-with-directus-automate.md | 4 ++--
22 files changed, 48 insertions(+), 48 deletions(-)
diff --git a/content/community/2.contribution/2.documentation.md b/content/community/2.contribution/2.documentation.md
index 754524fe7..024230634 100644
--- a/content/community/2.contribution/2.documentation.md
+++ b/content/community/2.contribution/2.documentation.md
@@ -22,7 +22,7 @@ We care about writing succinct, inclusive, and well-considered documentation. To
For tutorials, we use the imperative mood instead of the gerund form. For example - "Build an Extension to Show Cat Pictures" instead of "Building an Extension to show cat pictures."
-We end each title with technologies and product used, lowercasing the word 'with' before the tools. For example "Send SMS Messages with Twilio and Directus Automate."
+We end each title with technologies and product used, lowercasing the word 'with' before the tools. For example "Send SMS Messages with Twilio and Directus Flows."
#### Contextualizing and Setting Goals
diff --git a/content/community/3.codebase/1.overview.md b/content/community/3.codebase/1.overview.md
index 0813a2043..d0569a068 100644
--- a/content/community/3.codebase/1.overview.md
+++ b/content/community/3.codebase/1.overview.md
@@ -6,7 +6,7 @@ navigation:
title: Codebase
---
-The :icon{name="simple-icons:github"} [directus/directus](https://github.com/directus/directus) repository includes the Data Studio, Directus Connect, the JavaScript SDK, and a number of smaller packages used internally. All of these live in a single monorepo.
+The :icon{name="simple-icons:github"} [directus/directus](https://github.com/directus/directus) repository includes the Data Studio, the API server, the JavaScript SDK, and a number of smaller packages used internally. All of these live in a single monorepo.
## Data Studio
diff --git a/content/getting-started/7.create-an-automation.md b/content/getting-started/7.create-an-automation.md
index 4e0deaffb..8e63f2e81 100644
--- a/content/getting-started/7.create-an-automation.md
+++ b/content/getting-started/7.create-an-automation.md
@@ -1,14 +1,14 @@
---
stableId: 2f1467c4-ca73-4826-a674-f0e7b6a3afd9
-title: Create an Automation
-description: Get started using flows, triggers, operations and the data chain in Directus Automate.
+title: Create a Flow
+description: Get started using flows, triggers, operations, and the data chain in Directus.
navigation:
- title: Create an Automation
+ title: Create a Flow
---
:video-embed{video-id="6e6965e7-13cc-4f86-b512-f567d66cfbe9"}
-This guide will cover custom event-driven data processing using Directus Automate.
+This guide will cover custom event-driven data processing using Flows.
## Before You Start
diff --git a/content/guides/04.connect/1.authentication.md b/content/guides/04.connect/1.authentication.md
index 589f5030a..4cdbf7b91 100644
--- a/content/guides/04.connect/1.authentication.md
+++ b/content/guides/04.connect/1.authentication.md
@@ -1,7 +1,7 @@
---
stableId: 56bba129-54c3-48d4-920a-20e1d38bd36e
title: Authentication
-description: Discover how to authenticate Directus Connect requests using authorization headers, session cookies, or query parameters.
+description: Discover how to authenticate Directus API requests using authorization headers, session cookies, or query parameters.
---
:partial{content="authentication"}
diff --git a/content/guides/09.extensions/2.api-extensions/3.operations.md b/content/guides/09.extensions/2.api-extensions/3.operations.md
index e39920caa..4bc8a0e4f 100644
--- a/content/guides/09.extensions/2.api-extensions/3.operations.md
+++ b/content/guides/09.extensions/2.api-extensions/3.operations.md
@@ -2,10 +2,10 @@
stableId: 597b3ff4-8ccc-43aa-b222-4dc3adc22775
title: Flow Operations
headline: API Extensions
-description: Operations are single steps in a Flow - the no-code automation tool part of Directus Automate.
+description: Operations are single steps in a Flow - the no-code automation tool in Directus.
---
-Operations are single steps in a Flow - the no-code automation tool part of :product-link{product="automate"}.
+Operations are single steps in a :product-link{product="automate"} - the no-code automation tool in Directus.

diff --git a/content/tutorials/2.projects/build-an-ecommerce-platform-with-next-js-stripe-and-directus-automate.md b/content/tutorials/2.projects/build-an-ecommerce-platform-with-next-js-stripe-and-directus-automate.md
index 5b8eba711..e1f1872de 100644
--- a/content/tutorials/2.projects/build-an-ecommerce-platform-with-next-js-stripe-and-directus-automate.md
+++ b/content/tutorials/2.projects/build-an-ecommerce-platform-with-next-js-stripe-and-directus-automate.md
@@ -2,13 +2,13 @@
stableId: e03366c8-427e-42c0-a0cc-058bec00abb8
id: e9fd65f3-e853-4ecb-8706-74c8fa342b43
slug: build-an-ecommerce-platform-with-next-js-stripe-and-directus-automate
-title: Build an Ecommerce Platform with Next.js, Stripe, and Directus Automate
+title: Build an Ecommerce Platform with Next.js, Stripe, and Directus Flows
technologies:
- nextjs
authors:
- name: Trust Jamin
title: Guest Author
-description: Learn to integrate Stripe with Directus Automate to build an e-commerce website.
+description: Learn to integrate Stripe with Directus Flows to build an e-commerce website.
---
E-commerce websites are among the most popular for businesses as they enable customers to purchase items from your store from the comfort of their homes. In this article, you'll build an e-commerce store with Next.js as its front end, Directus as its backend services, and Stripe for payment processing.
diff --git a/content/tutorials/2.projects/build-an-hotel-booking-platform-with-next-js-stripe-and-directus-automate.md b/content/tutorials/2.projects/build-an-hotel-booking-platform-with-next-js-stripe-and-directus-automate.md
index ac65448cd..18fdcdd83 100644
--- a/content/tutorials/2.projects/build-an-hotel-booking-platform-with-next-js-stripe-and-directus-automate.md
+++ b/content/tutorials/2.projects/build-an-hotel-booking-platform-with-next-js-stripe-and-directus-automate.md
@@ -2,7 +2,7 @@
stableId: 78258d4b-8355-4477-b45a-2505d018eab6
id: e93c8494-df0d-4aa1-80c1-beabb0081411
slug: build-an-hotel-booking-platform-with-next-js-stripe-and-directus-automate
-title: Build an Hotel Booking Platform with Next.js, Stripe, and Directus Automate
+title: Build an Hotel Booking Platform with Next.js, Stripe, and Directus Flows
technologies:
- nextjs
authors:
diff --git a/content/tutorials/2.projects/build-directus-garden-a-passive-collaborative-event-booth-demo.md b/content/tutorials/2.projects/build-directus-garden-a-passive-collaborative-event-booth-demo.md
index 5dcf4e339..0ff5c3e24 100644
--- a/content/tutorials/2.projects/build-directus-garden-a-passive-collaborative-event-booth-demo.md
+++ b/content/tutorials/2.projects/build-directus-garden-a-passive-collaborative-event-booth-demo.md
@@ -31,9 +31,9 @@ This is a perfect vibe — passive, laid-back, and incredibly cute. With this in
In this small demo built in a day, attendees become gardeners helping us build a beautiful and lively garden by placing items in the scene.
-To do this, they must use Directus Auth to register for and login to their account, and then Directus Connect to see what they can place before doing so.
+To do this, they must use Directus Auth to register for and login to their account, and then Directus APIs to see what they can place before doing so.
-The client is a Nuxt.js application backed with Directus, and can facilitate multiple ongoing events. Once audience members participate, they are invited back at the final break for a raffle draw via a transactional email sent through Directus Automate.
+The client is a Nuxt.js application backed with Directus, and can facilitate multiple ongoing events. Once audience members participate, they are invited back at the final break for a raffle draw via a transactional email sent through Directus Flows.
## Understanding the Project
diff --git a/content/tutorials/2.projects/building-ai-venture-an-ai-powered-game-with-directus.md b/content/tutorials/2.projects/building-ai-venture-an-ai-powered-game-with-directus.md
index 1abeeb42a..618d197f0 100644
--- a/content/tutorials/2.projects/building-ai-venture-an-ai-powered-game-with-directus.md
+++ b/content/tutorials/2.projects/building-ai-venture-an-ai-powered-game-with-directus.md
@@ -6,7 +6,7 @@ title: Building AIVenture - An AI-Powered Game with Directus
authors:
- name: Craig Harman
title: Guest Author
-description: Learn the advanced techniques used with Directus Automate to build a game.
+description: Learn the advanced techniques used with Directus Flows to build a game.
---
## You are standing in an open field…
diff --git a/content/tutorials/2.projects/use-directus-as-a-baby-health-tracker-with-owlet-and-ops-genie.md b/content/tutorials/2.projects/use-directus-as-a-baby-health-tracker-with-owlet-and-ops-genie.md
index a97a2db3b..5f197f3c6 100644
--- a/content/tutorials/2.projects/use-directus-as-a-baby-health-tracker-with-owlet-and-ops-genie.md
+++ b/content/tutorials/2.projects/use-directus-as-a-baby-health-tracker-with-owlet-and-ops-genie.md
@@ -10,7 +10,7 @@ description: Learn how to integrate Directus with hardware sensors and incident
---
I have a baby and like many parents rely on monitors and sensors to make sure they're ok. In this article, we will explore Directus as a backend for a smart wearable device, and how to extend the functionality of the the apps shipped with the device. I personally use the [Owlet Smart Sock](https://owletcare.com/products/owlet-smart-sock), but the approaches covered in this article can be adapted for many other sensors.
-We will cover data model configuration, how to grab data from the wearable using Directus Automate, and how to integrate Directus into 3rd party tools for reporting, such as OpsGenie and screen widgets on an iPhone.
+We will cover data model configuration, how to grab data from the wearable using Directus Flows, and how to integrate Directus into 3rd party tools for reporting, such as OpsGenie and screen widgets on an iPhone.
## Creating Collections
diff --git a/content/tutorials/3.tips-and-tricks/importing-files-in-directus-automate.md b/content/tutorials/3.tips-and-tricks/importing-files-in-directus-automate.md
index b499bf848..f9c648084 100644
--- a/content/tutorials/3.tips-and-tricks/importing-files-in-directus-automate.md
+++ b/content/tutorials/3.tips-and-tricks/importing-files-in-directus-automate.md
@@ -2,13 +2,13 @@
stableId: 05984f63-aae9-4ac5-bf21-5d0a7a0856c4
id: c95350f1-1ace-488b-b293-77546b6ebe17
slug: importing-files-in-directus-automate
-title: Importing Files in Directus Automate
+title: Importing Files in Directus Flows
authors:
- name: Kevin Lewis
title: Director, Developer Experience
-description: Learn how to use the Request URL operation to import files in Directus Automate.
+description: Learn how to use the Request URL operation to import files in Directus Flows.
---
-In this quick tip, you will learn how to import files inside of Flows as part of Directus Automate.
+In this quick tip, you will learn how to import files inside of Flows as part of Directus Flows.
Directus doesn’t ship with an operation to import files via URL the same way you can across the Data Studio. Thankfully, you can utilize the Directus API inside of Flows to achieve the same result.
diff --git a/content/tutorials/5.extensions/use-npm-packages-in-custom-operations.md b/content/tutorials/5.extensions/use-npm-packages-in-custom-operations.md
index 88f482848..665de5a85 100644
--- a/content/tutorials/5.extensions/use-npm-packages-in-custom-operations.md
+++ b/content/tutorials/5.extensions/use-npm-packages-in-custom-operations.md
@@ -6,7 +6,7 @@ title: Use npm Packages in Custom Operations
authors:
- name: Kevin Lewis
title: Director, Developer Experience
-description: Learn how to expose an npm package as an operation in Directus Automate.
+description: Learn how to expose an npm package as an operation in Directus Flows.
---
This guide will show you how to expose an NPM package as a custom operation in Flows. We will use `lodash` here, but the
process should be the same for any package.
diff --git a/content/tutorials/7.workflows/create-github-issues-with-directus-automate.md b/content/tutorials/7.workflows/create-github-issues-with-directus-automate.md
index 4d9ab5674..0ffa09e70 100644
--- a/content/tutorials/7.workflows/create-github-issues-with-directus-automate.md
+++ b/content/tutorials/7.workflows/create-github-issues-with-directus-automate.md
@@ -2,17 +2,17 @@
stableId: f1b91cbc-3e94-4214-b49a-350ae0f4ed55
id: 34bda8b7-e162-4090-8ceb-ae3db85fb098
slug: create-github-issues-with-directus-automate
-title: Create GitHub Issues with Directus Automate
+title: Create GitHub Issues with Directus Flows
technologies:
- github
authors:
- name: Kevin Lewis
title: Director, Developer Experience
-description: Learn how to integrate GitHub with Directus Automate to create new issues.
+description: Learn how to integrate GitHub with Directus Flows to create new issues.
---
At the bottom of every page in our docs (including this one) is a feedback widget, which we use to gather feedback on what's good and what needs improving across our pages. All of this data is stored in a Directus project which we look through weekly and create associated GitHub Issues if action is required.
-In this guide, you will learn how to use Directus Automate with Confirmation Prompts to automatically create issues directly from Directus.
+In this guide, you will learn how to use Directus Flows with Confirmation Prompts to automatically create issues directly from Directus.
## Before You Start
@@ -24,7 +24,7 @@ You will also need a Directus collection called `feedback` with a field for `con
## Create a Flow
-Flows are Directus' no-code automation builder provided as part of Directus Automate. Create a new flow called "Create GitHub Issue". Add a **Manual Trigger** on the `Feedback` collection, and set the **Location** to "Item Page Only".
+Flows are Directus' no-code automation builder provided as part of Directus Flows. Create a new flow called "Create GitHub Issue". Add a **Manual Trigger** on the `Feedback` collection, and set the **Location** to "Item Page Only".
Check the **Require Confirmation** box and add one field with a key and name of `title`. This will contain the issue title - which should describe the remedial action based on feedback provided. For example, "I can't find the docs related to connecting an existing database" might be feedback, where "Signpost existing database connection docs" would be the issue title.
diff --git a/content/tutorials/7.workflows/detect-high-risk-phone-numbers-with-vonage-and-directus-automate.md b/content/tutorials/7.workflows/detect-high-risk-phone-numbers-with-vonage-and-directus-automate.md
index eae32f3fd..a8e5f8844 100644
--- a/content/tutorials/7.workflows/detect-high-risk-phone-numbers-with-vonage-and-directus-automate.md
+++ b/content/tutorials/7.workflows/detect-high-risk-phone-numbers-with-vonage-and-directus-automate.md
@@ -2,15 +2,15 @@
stableId: 67b6c096-9b87-4b50-9550-6213469c52b1
id: 6388aa8a-99b5-4a3b-a9ff-275d26b8cb81
slug: detect-high-risk-phone-numbers-with-vonage-and-directus-automate
-title: Detect High-Risk Phone Numbers with Vonage and Directus Automate
+title: Detect High-Risk Phone Numbers with Vonage and Directus Flows
technologies:
- vonage
authors:
- name: Kevin Lewis
title: Director, Developer Experience
-description: Learn how to integrate Vonage's Number Insights API with Directus Automate to validate numbers.
+description: Learn how to integrate Vonage's Number Insights API with Directus Flows to validate numbers.
---
-When creating new users for your service, it's important to take steps to prevent fraudulent or malicious activity. In this post, you'll use [Vonage's Number Insight V2 API](https://developer.vonage.com/en/number-insight/number-insight-v2/overview) and [Directus Automate](https://directus.io/toolkit/automate) to determine the likelihood of a number being risky at the time of user registration, and let you act on it.
+When creating new users for your service, it's important to take steps to prevent fraudulent or malicious activity. In this post, you'll use [Vonage's Number Insight V2 API](https://developer.vonage.com/en/number-insight/number-insight-v2/overview) and [Directus Flows](https://directus.io/toolkit/automate) to determine the likelihood of a number being risky at the time of user registration, and let you act on it.
The Vonage Number Insight V2 API assigns a fraud score to numbers, along with a risk recommendation - allow, flag, or block. You can use this recommendation to allow user creation, allow it with a note to your team to validate or block creation.
diff --git a/content/tutorials/7.workflows/enrich-user-data-with-clearbit-and-directus-automate.md b/content/tutorials/7.workflows/enrich-user-data-with-clearbit-and-directus-automate.md
index d8feb2557..dd52af03f 100644
--- a/content/tutorials/7.workflows/enrich-user-data-with-clearbit-and-directus-automate.md
+++ b/content/tutorials/7.workflows/enrich-user-data-with-clearbit-and-directus-automate.md
@@ -2,13 +2,13 @@
stableId: d2f091ed-8952-4c98-9d59-eadf4c1e2453
id: 571e0f54-f95d-4ccf-8712-8b92150b364f
slug: enrich-user-data-with-clearbit-and-directus-automate
-title: Enrich User Data with Clearbit and Directus Automate
+title: Enrich User Data with Clearbit and Directus Flows
technologies:
- clearbit
authors:
- name: Kevin Lewis
title: Director, Developer Experience
-description: Learn how to integrate Clearbit data enrichment with Directus Automate.
+description: Learn how to integrate Clearbit data enrichment with Directus Flows.
---
The Directus toolkit can be used for so many different projects and use cases, with a common one being Customer Relationship Management (CRM). CRMs are often used to support sales and marketing teams in understanding who is interested in and already using a product, and have more streamlined conversations with them.
@@ -16,7 +16,7 @@ When a new user is created in Directus, directly through the Data Studio or thro
[Clearbit has a series of Enrichment APIs](https://clearbit.com/platform/enrichment) that will take in the data you have, look at a load of data points from around the web, and provide a more complete payload about that person in response.
-In this quick project, you will set up a new Flow with [Directus Automate](https://directus.io/toolkit/automate) that will automatically enrich any new users in your Directus project.
+In this quick project, you will set up a new Flow with [Directus Flows](https://directus.io/toolkit/automate) that will automatically enrich any new users in your Directus project.
## Before You Start
diff --git a/content/tutorials/7.workflows/generate-images-with-dall-e-and-directus-automate.md b/content/tutorials/7.workflows/generate-images-with-dall-e-and-directus-automate.md
index 1b120c8cf..ab5f5ea98 100644
--- a/content/tutorials/7.workflows/generate-images-with-dall-e-and-directus-automate.md
+++ b/content/tutorials/7.workflows/generate-images-with-dall-e-and-directus-automate.md
@@ -2,15 +2,15 @@
stableId: 5b0030d0-d6c0-4e7f-9d0e-b2914ceb3f45
id: 9feb1c8f-0500-4bff-9b2f-d69e08d316e7
slug: generate-images-with-dall-e-and-directus-automate
-title: Generate Images with DALL•E and Directus Automate
+title: Generate Images with DALL•E and Directus Flows
technologies:
- openai
authors:
- name: Kevin Lewis
title: Director, Developer Experience
-description: Learn how to integrate OpenAI's Dall•E models with Directus Automate.
+description: Learn how to integrate OpenAI's Dall•E models with Directus Flows.
---
-Directus Automate provide a really powerful interface to integrating with AI services via their APIs. In this tutorial, we will use [OpenAI’s Image Generation API](https://platform.openai.com/docs/api-reference/images/create) to leverage DALL-E 3 and create images for our content directly within the Directus Editor.
+Directus Flows provide a really powerful interface to integrating with AI services via their APIs. In this tutorial, we will use [OpenAI’s Image Generation API](https://platform.openai.com/docs/api-reference/images/create) to leverage DALL-E 3 and create images for our content directly within the Directus Editor.
## Before We Start
diff --git a/content/tutorials/7.workflows/generate-social-posts-with-gpt-4-and-directus-automate.md b/content/tutorials/7.workflows/generate-social-posts-with-gpt-4-and-directus-automate.md
index 868fd51c6..244e6bcfe 100644
--- a/content/tutorials/7.workflows/generate-social-posts-with-gpt-4-and-directus-automate.md
+++ b/content/tutorials/7.workflows/generate-social-posts-with-gpt-4-and-directus-automate.md
@@ -2,15 +2,15 @@
stableId: 6f67abf4-3bcb-4d99-93d0-33f511c81e04
id: 3b8646a5-cdfa-4841-bc43-1aa337b6e4f7
slug: generate-social-posts-with-gpt-4-and-directus-automate
-title: Generate Social Posts with GPT-4 and Directus Automate
+title: Generate Social Posts with GPT-4 and Directus Flows
technologies:
- openai
authors:
- name: Kevin Lewis
title: Director, Developer Experience
-description: Learn how to integrate OpenAI's GPT-4 model with Directus Automate.
+description: Learn how to integrate OpenAI's GPT-4 model with Directus Flows.
---
-Directus Automate provide a really powerful interface to integrating with AI services via their APIs. In this tutorial, we will use [OpenAI’s Text Generation API](https://platform.openai.com/docs/api-reference/chat/create) to leverage GPT-4 and create social posts for our content directly within the Directus Editor.
+Directus Flows provide a really powerful interface to integrating with AI services via their APIs. In this tutorial, we will use [OpenAI’s Text Generation API](https://platform.openai.com/docs/api-reference/chat/create) to leverage GPT-4 and create social posts for our content directly within the Directus Editor.
## Before We Start
diff --git a/content/tutorials/7.workflows/generate-transcripts-with-deepgram-and-directus-automate.md b/content/tutorials/7.workflows/generate-transcripts-with-deepgram-and-directus-automate.md
index 2e7c70344..d1e03fc4d 100644
--- a/content/tutorials/7.workflows/generate-transcripts-with-deepgram-and-directus-automate.md
+++ b/content/tutorials/7.workflows/generate-transcripts-with-deepgram-and-directus-automate.md
@@ -2,15 +2,15 @@
stableId: f46d4a90-cff7-4431-b552-8b1296ef5720
id: 89cd5e8e-cabd-4422-92c8-9736faedefe0
slug: generate-transcripts-with-deepgram-and-directus-automate
-title: Generate Transcripts with Deepgram and Directus Automate
+title: Generate Transcripts with Deepgram and Directus Flows
technologies:
- deepgram
authors:
- name: Kevin Lewis
title: Director, Developer Experience
-description: Learn how to integrate Deepgram's Speech-to-Text API with Directus Automate.
+description: Learn how to integrate Deepgram's Speech-to-Text API with Directus Flows.
---
-Voice is one of the most common ways we communicate and yet one of the hardest for developers to use and understand. In this post, you'll use Deepgram's speech recognition API and Directus Automate to create and store transcripts whenever a new file is uploaded.
+Voice is one of the most common ways we communicate and yet one of the hardest for developers to use and understand. In this post, you'll use Deepgram's speech recognition API and Directus Flows to create and store transcripts whenever a new file is uploaded.
## Before You Start
diff --git a/content/tutorials/7.workflows/schedule-future-content-with-directus-automate.md b/content/tutorials/7.workflows/schedule-future-content-with-directus-automate.md
index e47baeafd..bae74452b 100644
--- a/content/tutorials/7.workflows/schedule-future-content-with-directus-automate.md
+++ b/content/tutorials/7.workflows/schedule-future-content-with-directus-automate.md
@@ -2,7 +2,7 @@
stableId: 4164fbc4-95f1-4097-b57c-1bd347561a15
id: c773724c-cc1b-4f79-bc46-208b26e8fd7f
slug: schedule-future-content-with-directus-automate
-title: Schedule Future Content with Directus Automate
+title: Schedule Future Content with Directus Flows
authors:
- name: Bryant Gillespie
title: Growth Engineer
diff --git a/content/tutorials/7.workflows/tag-images-with-clarifai-and-directus-automate.md b/content/tutorials/7.workflows/tag-images-with-clarifai-and-directus-automate.md
index 2af9d16ac..bd0d6a2fd 100644
--- a/content/tutorials/7.workflows/tag-images-with-clarifai-and-directus-automate.md
+++ b/content/tutorials/7.workflows/tag-images-with-clarifai-and-directus-automate.md
@@ -2,15 +2,15 @@
stableId: c15b7d0c-a285-479e-92c5-88f7f6a5c1fc
id: 73b10a4d-0da8-48c7-9753-4a3addd2c5ff
slug: tag-images-with-clarifai-and-directus-automate
-title: Tag Images with Clarifai and Directus Automate
+title: Tag Images with Clarifai and Directus Flows
technologies:
- clarifai
authors:
- name: Kevin Lewis
title: Director, Developer Experience
-description: Learn how to integrate Clarifai's image recognition APIs with Directus Automate.
+description: Learn how to integrate Clarifai's image recognition APIs with Directus Flows.
---
-[Clarifai](https://clarifai.com) allow you to train and use machine learning models via APIs. In this tutorial, you will use Clarfai's image recognition model with Directus Automate to automatically tag new image files in your project.
+[Clarifai](https://clarifai.com) allow you to train and use machine learning models via APIs. In this tutorial, you will use Clarfai's image recognition model with Directus Flows to automatically tag new image files in your project.
## Before You Start
@@ -18,7 +18,7 @@ You will need a [Directus project](/getting-started/overview) and a Clarifai API
## Create a Flow
-Flows are Directus' no-code automation builder provided as part of Directus Automate. Create a new flow with a non-blocking event hook and the `files.upload` scope. This means that it will run asynchronously and not block the file upload.
+Flows are Directus' no-code automation builder provided as part of Directus Flows. Create a new flow with a non-blocking event hook and the `files.upload` scope. This means that it will run asynchronously and not block the file upload.
Whenever a few file is uploaded, the flow will be triggered. The payload will include a file type and ID - both will be used in future steps.
diff --git a/content/tutorials/7.workflows/trigger-netlify-site-builds-with-directus-automate.md b/content/tutorials/7.workflows/trigger-netlify-site-builds-with-directus-automate.md
index 97a034437..1ff73a978 100644
--- a/content/tutorials/7.workflows/trigger-netlify-site-builds-with-directus-automate.md
+++ b/content/tutorials/7.workflows/trigger-netlify-site-builds-with-directus-automate.md
@@ -2,13 +2,13 @@
stableId: 51836497-a247-44f2-bd1f-f6275b8deb62
id: 03141a12-e9be-4fd5-8072-78685d4ff12b
slug: trigger-netlify-site-builds-with-directus-automate
-title: Trigger Netlify Site Builds with Directus Automate
+title: Trigger Netlify Site Builds with Directus Flows
technologies:
- netlify
authors:
- name: Bryant Gillespie
title: Growth Engineer
-description: Learn how to trigger new Netlify website builds through Directus Automate.
+description: Learn how to trigger new Netlify website builds through Directus Flows.
---
## Explanation
diff --git a/content/tutorials/7.workflows/trigger-vercel-site-builds-with-directus-automate.md b/content/tutorials/7.workflows/trigger-vercel-site-builds-with-directus-automate.md
index 2eccab239..5fd3619c3 100644
--- a/content/tutorials/7.workflows/trigger-vercel-site-builds-with-directus-automate.md
+++ b/content/tutorials/7.workflows/trigger-vercel-site-builds-with-directus-automate.md
@@ -2,13 +2,13 @@
stableId: 2b936565-a2c4-4545-896f-216bf5ce461c
id: 5ba45c20-d5f3-469a-a060-2d4fa960bd66
slug: trigger-vercel-site-builds-with-directus-automate
-title: Trigger Vercel Site Builds with Directus Automate
+title: Trigger Vercel Site Builds with Directus Flows
technologies:
- vercel
authors:
- name: Bryant Gillespie
title: Growth Engineer
-description: Learn how to trigger new Vercel website builds through Directus Automate.
+description: Learn how to trigger new Vercel website builds through Directus Flows.
---
## Explanation
From 5411aef9f7de70f0e76b1ed2169c6df6fcda4ff9 Mon Sep 17 00:00:00 2001
From: bryantgillespie
Date: Tue, 28 Apr 2026 09:35:07 -0400
Subject: [PATCH 16/45] docs(homepage): drop Data Engine/Data Studio framing
---
content/_partials/engine-studio-box.md | 6 +++---
content/getting-started/1.overview.md | 4 ++--
content/index.md | 6 +++---
3 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/content/_partials/engine-studio-box.md b/content/_partials/engine-studio-box.md
index 0c453b205..0d25c7b34 100644
--- a/content/_partials/engine-studio-box.md
+++ b/content/_partials/engine-studio-box.md
@@ -1,8 +1,8 @@
::shiny-grid{class="lg:grid-cols-2"}
:::shiny-card
---
- title: Data Engine
- description: APIs and developer tools for your data.
+ title: APIs and Developer Tools
+ description: Build with REST, GraphQL, the SDK, realtime, auth, and Flows.
color: purple
---
:product-link{product="connect"} :product-link{product="realtime"} :product-link{product="auth"} :product-link{product="automate"}
@@ -11,7 +11,7 @@
:::shiny-card
---
title: Data Studio
- description: A data web app your whole team will love.
+ description: A web app for your whole team to manage content, files, users, and dashboards.
color: pink
---
:product-link{product="explore"} :product-link{product="editor"} :product-link{product="insights"} :product-link{product="files"}
diff --git a/content/getting-started/1.overview.md b/content/getting-started/1.overview.md
index 0b9a2a4ae..c2668dee5 100644
--- a/content/getting-started/1.overview.md
+++ b/content/getting-started/1.overview.md
@@ -2,12 +2,12 @@
stableId: 8d6c731d-b669-41e7-8549-3b641969fb4e
title: Overview
headline: Getting Started
-description: Learn about the Directus Data Engine and Studio, when to use it, and how it works.
+description: Learn what Directus is, when to use it, and how it works.
navigation:
title: Overview
---
-Directus is a backend for building your projects. Connect it to your database, asset storage, and external services, and immediately receive rich developer tooling (Data Engine) and a comprehensive web application (Data Studio) to work with your data. Granular access control means users can only see, interact with, and create the data their role allows.
+Directus is a backend for building your projects. Connect it to your database, asset storage, and external services, and immediately get a REST and GraphQL API, an SDK, realtime, auth, file management, automations, and a web application to work with your data. Granular access control means users can only see, interact with, and create the data their role allows.
:partial{content="engine-studio-box"}
diff --git a/content/index.md b/content/index.md
index 6ac9cf233..7fb76b5f9 100644
--- a/content/index.md
+++ b/content/index.md
@@ -70,8 +70,8 @@ navigation: false
::shiny-grid{class="lg:grid-cols-2"}
:::shiny-card
---
- title: Data Engine
- description: APIs and developer tools for your data.
+ title: APIs and Developer Tools
+ description: Build with REST, GraphQL, the SDK, realtime, auth, and Flows.
---
:product-link{product="connect"} :product-link{product="realtime"} :product-link{product="auth"} :product-link{product="automate"}
:::
@@ -79,7 +79,7 @@ navigation: false
:::shiny-card
---
title: Data Studio
- description: A data web app your whole team will love.
+ description: A web app for your whole team to manage content, files, users, and dashboards.
---
:product-link{product="explore"} :product-link{product="editor"} :product-link{product="insights"} :product-link{product="files"}
:::
From 0548d6182f478c8fc1babe31b9db99c723657e8b Mon Sep 17 00:00:00 2001
From: bryantgillespie
Date: Tue, 28 Apr 2026 09:35:12 -0400
Subject: [PATCH 17/45] fix: fold 11.integrations into 12.integrations to clear
numeric collision
---
.../{11.integrations => 12.integrations}/6.framer/.navigation.yml | 0
.../{11.integrations => 12.integrations}/6.framer/0.index.md | 0
2 files changed, 0 insertions(+), 0 deletions(-)
rename content/guides/{11.integrations => 12.integrations}/6.framer/.navigation.yml (100%)
rename content/guides/{11.integrations => 12.integrations}/6.framer/0.index.md (100%)
diff --git a/content/guides/11.integrations/6.framer/.navigation.yml b/content/guides/12.integrations/6.framer/.navigation.yml
similarity index 100%
rename from content/guides/11.integrations/6.framer/.navigation.yml
rename to content/guides/12.integrations/6.framer/.navigation.yml
diff --git a/content/guides/11.integrations/6.framer/0.index.md b/content/guides/12.integrations/6.framer/0.index.md
similarity index 100%
rename from content/guides/11.integrations/6.framer/0.index.md
rename to content/guides/12.integrations/6.framer/0.index.md
From 8d9a72738c8d9396ad9f8034d46d5bd4a12cf8a9 Mon Sep 17 00:00:00 2001
From: bryantgillespie
Date: Tue, 28 Apr 2026 10:51:48 -0400
Subject: [PATCH 18/45] fix sidebar
---
content/guides/04.connect/.navigation.yml | 2 +-
content/guides/06.automate/.navigation.yml | 1 +
2 files changed, 2 insertions(+), 1 deletion(-)
diff --git a/content/guides/04.connect/.navigation.yml b/content/guides/04.connect/.navigation.yml
index 1c6701f30..f492d43ad 100644
--- a/content/guides/04.connect/.navigation.yml
+++ b/content/guides/04.connect/.navigation.yml
@@ -1,2 +1,2 @@
-title: Connect
+title: APIs
icon: directus-connect
diff --git a/content/guides/06.automate/.navigation.yml b/content/guides/06.automate/.navigation.yml
index 469403697..f7a94f1fe 100644
--- a/content/guides/06.automate/.navigation.yml
+++ b/content/guides/06.automate/.navigation.yml
@@ -1 +1,2 @@
+title: Flows
icon: directus-automate
From e1a7980e1d1a153c658758df023fb87e89f1209b Mon Sep 17 00:00:00 2001
From: bryantgillespie
Date: Tue, 28 Apr 2026 11:49:59 -0400
Subject: [PATCH 19/45] =?UTF-8?q?docs(nav):=20rename=20Guides=E2=86=92Guid?=
=?UTF-8?q?e,=20Hosting=E2=86=92Deploy?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/app.config.ts | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/app.config.ts b/app/app.config.ts
index f60157b40..3410fca93 100644
--- a/app/app.config.ts
+++ b/app/app.config.ts
@@ -37,7 +37,7 @@ export default defineAppConfig({
to: '/getting-started/overview',
},
{
- label: 'Guides',
+ label: 'Guide',
children: [
{
label: 'Data Model',
@@ -107,7 +107,7 @@ export default defineAppConfig({
],
},
{
- label: 'Hosting',
+ label: 'Deploy',
children: [
{
label: 'Cloud',
From 2064fcbe08c4de2ff7e9bef4e96267b16513025b Mon Sep 17 00:00:00 2001
From: bryantgillespie
Date: Tue, 28 Apr 2026 12:20:42 -0400
Subject: [PATCH 20/45] kill editor and explorer
---
app/components/content/ProductLink.vue | 2 --
content/_partials/engine-studio-box.md | 2 +-
content/guides/01.data-model/1.collections.md | 8 ++++----
content/guides/01.data-model/2.fields.md | 2 +-
content/guides/01.data-model/3.interfaces.md | 2 +-
content/guides/01.data-model/4.relationships.md | 4 ++--
content/guides/02.content/1.explore.md | 12 ++++++------
content/guides/02.content/2.editor.md | 12 ++++++------
content/guides/03.auth/2.access-control.md | 2 +-
content/guides/09.extensions/0.overview.md | 4 ++--
.../09.extensions/3.app-extensions/1.interfaces.md | 8 ++++----
.../09.extensions/3.app-extensions/3.layouts.md | 6 +++---
content/index.md | 2 +-
13 files changed, 32 insertions(+), 34 deletions(-)
diff --git a/app/components/content/ProductLink.vue b/app/components/content/ProductLink.vue
index ad8559b79..bd9aa880f 100644
--- a/app/components/content/ProductLink.vue
+++ b/app/components/content/ProductLink.vue
@@ -9,8 +9,6 @@ const linkMap = {
'content': '/guides/content/explore',
'connect': '/guides/connect/authentication',
'data-model': '/guides/data-model/collections',
- 'editor': '/guides/content/editor',
- 'explore': '/guides/content/explore',
'extensions': '/guides/extensions/overview',
'files': '/guides/files/upload',
'insights': '/guides/insights/overview',
diff --git a/content/_partials/engine-studio-box.md b/content/_partials/engine-studio-box.md
index 0d25c7b34..2a45c0860 100644
--- a/content/_partials/engine-studio-box.md
+++ b/content/_partials/engine-studio-box.md
@@ -14,6 +14,6 @@
description: A web app for your whole team to manage content, files, users, and dashboards.
color: pink
---
- :product-link{product="explore"} :product-link{product="editor"} :product-link{product="insights"} :product-link{product="files"}
+ :product-link{product="insights"} :product-link{product="files"}
:::
::
diff --git a/content/guides/01.data-model/1.collections.md b/content/guides/01.data-model/1.collections.md
index 7c34723d3..9ebf9b5dc 100644
--- a/content/guides/01.data-model/1.collections.md
+++ b/content/guides/01.data-model/1.collections.md
@@ -12,7 +12,7 @@ There are two types of collections: **user collections** and **system collection
## Creating Collections
-**User collections** are created directly in your database or via Directus. They describe your specific data models and configurations and can be queried via APIs created by :product-link{product="connect"} or via :product-link{product="explore"}.
+**User collections** are created directly in your database or via Directus. They describe your specific data models and configurations and can be queried via APIs created by :product-link{product="connect"} or browsed on the [collection page](/guides/content/explore).
You can create collections from the Data Model settings in the Directus Data Studio, or using the [Collections API](/api/collections).
@@ -65,7 +65,7 @@ Once a collection is created, there are a number of configuration options availa
### Content Versioning
-Content versioning is used by :product-link{product="editor"} and allows teams to create and manage different versions of their content. There are several reasons to use content versioning, including drafting content without publishing it, and more ways to collaborate with others.
+Content versioning is used on the [item page](/guides/content/editor) and allows teams to create and manage different versions of their content. There are several reasons to use content versioning, including drafting content without publishing it, and more ways to collaborate with others.
This feature can be enabled for specific collections, and will be available for all items. Once enabled, item versions can be created, and later have some or all fields promoted to the main version, typically used for publishing.
@@ -75,7 +75,7 @@ Read the content versioning user guide.
### Live Preview
-Live preview is used by :product-link{product="editor"} and allows for your application to be shown in a pane next to your content, which can be used for previewing content before publishing.
+Live preview is used on the [item page](/guides/content/editor) and allows for your application to be shown in a pane next to your content, which can be used for previewing content before publishing.
You can use item field values to construct the URL used by the live preview, including unique identifiers and content version, allowing for previewing content versions before promoting them to the main version.
@@ -109,7 +109,7 @@ Once configured, click :icon{name="material-symbols:sort" title="Sort Button"} i
### Duplication
-The **Save as Copy** option in :product-link{product="editor"} offers a way to effectively duplicate the current item. Duplication settings define which field values will be copied.
+The **Save as Copy** option on the [item page](/guides/content/editor) offers a way to effectively duplicate the current item. Duplication settings define which field values will be copied.
::callout{icon="material-symbols:info-outline"}
diff --git a/content/guides/01.data-model/2.fields.md b/content/guides/01.data-model/2.fields.md
index e3e5d2d9d..1e8aeb75a 100644
--- a/content/guides/01.data-model/2.fields.md
+++ b/content/guides/01.data-model/2.fields.md
@@ -30,7 +30,7 @@ When creating a new field, you must first select an [interface](/guides/data-mod

-The **interface** describes how users will create and edit data, as well as how it is displayed in :product-link{product="editor"}. There are many kinds of built-in interface, such as a text input, date selector, map, and a set of relationship interfaces. More interfaces can be built as [extensions](/guides/extensions/overview).
+The **interface** describes how users will create and edit data, as well as how it is displayed on the [item page](/guides/content/editor). There are many kinds of built-in interface, such as a text input, date selector, map, and a set of relationship interfaces. More interfaces can be built as [extensions](/guides/extensions/overview).
The **key** is the unique name for a field within a collection. This value is used in both the Data Studio and via API. Within the Data Studio, the key is parsed through our title formatter to improve readability.
diff --git a/content/guides/01.data-model/3.interfaces.md b/content/guides/01.data-model/3.interfaces.md
index 9e274b706..924b3b8b4 100644
--- a/content/guides/01.data-model/3.interfaces.md
+++ b/content/guides/01.data-model/3.interfaces.md
@@ -4,7 +4,7 @@ title: Interfaces
description: Manage your data effectively with Directus fields. Discover various field types, interfaces, validations, and relationships to perfectly suit your data modeling needs.
---
-Interfaces are how users interact with fields in :product-link{product="editor"}. Each interface supports specific data types and configurations.
+Interfaces are how users interact with fields on the [item page](/guides/content/editor). Each interface supports specific data types and configurations.
## Text & Numbers
diff --git a/content/guides/01.data-model/4.relationships.md b/content/guides/01.data-model/4.relationships.md
index aea891c69..0cca6511b 100644
--- a/content/guides/01.data-model/4.relationships.md
+++ b/content/guides/01.data-model/4.relationships.md
@@ -14,7 +14,7 @@ In a M2O relationship, multiple items from the one collection are linked to one

-In :product-link{product="editor"}, having a M2O field does not automatically provide navigation to the related collection's items. To achieve this, the related collection requires a One to Many field to be set up.
+On the [item page](/guides/content/editor), having a M2O field does not automatically provide navigation to the related collection's items. To achieve this, the related collection requires a One to Many field to be set up.
::callout{icon="material-symbols:info-outline"}
**M2O Examples**
@@ -33,7 +33,7 @@ In a O2M relationship, one item from a collection is linked to multiple items in

-Creating a O2M interface on the 'many' side of a M2O relationship creates an `Alias` field, which lets us access related items. This does not create a new database column as the O2M field is purely virtual. It creates an interface within the :product-link{product="editor"} to access items from an O2M perspective.
+Creating a O2M interface on the 'many' side of a M2O relationship creates an `Alias` field, which lets us access related items. This does not create a new database column as the O2M field is purely virtual. It creates an interface on the [item page](/guides/content/editor) to access items from an O2M perspective.
## Many to Many (M2M)
diff --git a/content/guides/02.content/1.explore.md b/content/guides/02.content/1.explore.md
index 2f87dfb23..eabbd83ca 100644
--- a/content/guides/02.content/1.explore.md
+++ b/content/guides/02.content/1.explore.md
@@ -1,12 +1,12 @@
---
stableId: b08b91db-5ffe-4195-adde-2669e08c1c0b
-title: Collection Explorer
-description: Learn to filter, layout, batch edit and more with collections in the collection explorer.
+title: Collection Page
+description: Learn to filter, layout, batch edit and more on the collection page.
---
-The content module allows users to browse, filter, and search for items held in collections. When users navigate into viewing single items, they use :product-link{product="editor"}. Each page contains data from a single collection, but can display related fields for each item.
+The content module allows users to browse, filter, and search for items held in collections. When users navigate into viewing single items, they use the [item page](/guides/content/editor). Each collection page contains data from a single collection, but can display related fields for each item.
-To open the collection explorer, click on the content module on the left hand side of the page.
+To open a collection page, click on the content module on the left hand side of the page.

@@ -49,7 +49,7 @@ Layouts are customized mechanisms for viewing and interacting with the items in

-By selecting more than one item in the explorer will allow you to click on :icon{name="material-symbols:filter-list"} and edit several items' fields at once to have the same value.
+Selecting more than one item on the collection page will allow you to click on :icon{name="material-symbols:filter-list"} and edit several items' fields at once to have the same value.
## Bookmarks
@@ -67,7 +67,7 @@ You'll see the "Editing Preset" form, where you can set the name and collection,
Each Collection Page displays all Items in its Collection and comes with highly configurable Layouts for browsing, visualizing, and managing Items. The Page Header includes key action buttons for sorting, searching, filtering, creating, editing, archiving, and deleting multiple Items. To learn more, see our guide on the Collection Page.
-The Content Module consists of :product-link{product="explore"}, where multiple items from a collection are displayed, and :product-link{product="editor"}, where single items can be displayed and edited.
+The Content Module consists of [collection pages](/guides/content/explore), where multiple items from a collection are displayed, and [item pages](/guides/content/editor), where single items can be displayed and edited.
A powerful, yet extensible, way to explore your database. Suitable for everyone in your organization with a robust permissions system.
diff --git a/content/guides/02.content/2.editor.md b/content/guides/02.content/2.editor.md
index a569c695b..f3407c27f 100644
--- a/content/guides/02.content/2.editor.md
+++ b/content/guides/02.content/2.editor.md
@@ -1,16 +1,16 @@
---
stableId: 88e09fef-ff03-4c18-a87e-b77f9e0e1d3f
-title: Item Editor
+title: Item Page
description: Learn to create, duplicate, archive and perform other actions with items using Directus.
---
-The item editor is a tailored form for managing individual items and their field values.
+The item page is a tailored form for managing individual items and their field values.
-
+
## Fields & Data Model
-You can add fields to items by [configuring the collection's data model](/guides/data-model/fields). Here, you can also configure how the fields are displayed in the item editor.
+You can add fields to items by [configuring the collection's data model](/guides/data-model/fields). Here, you can also configure how the fields are displayed on the item page.
## Creating Items
@@ -38,7 +38,7 @@ The :icon{name="material-symbols:more-vert"} icon will only be displayed after c
## Archiving Items
-To archive an item, follow these steps, navigate to the content module and select the desired collection. Select the desired item to open the item editor. Click :icon{name="material-symbols:archive"} located in the header and a popup will appear to confirm the action.
+To archive an item, navigate to the content module and select the desired collection. Select the desired item to open the item page. Click :icon{name="material-symbols:archive"} located in the header and a popup will appear to confirm the action.
Archived items will not show up in app, but will still be returned in API responses unless explicitly filtered out.
@@ -56,7 +56,7 @@ settings.
As you update field values on items, Directus saves these revisions, and they can be compared side-by-side to the current state.
-To revert an item, navigate to the content module and select the desired collection and select the desired item. Click on "Revisions" in the editor sidebar and then on the revision you wish to preview. Go to "Revisions Made" in the side menu and view the revision differences. Click :icon{name="material-symbols:settings-backup-restore"} to revert the item's values and return to the item page.
+To revert an item, navigate to the content module and select the desired collection and select the desired item. Click on "Revisions" in the sidebar and then on the revision you wish to preview. Go to "Revisions Made" in the side menu and view the revision differences. Click :icon{name="material-symbols:settings-backup-restore"} to revert the item's values and return to the item page.
::callout{icon="material-symbols:info-outline"}
**Revision Preview**
diff --git a/content/guides/03.auth/2.access-control.md b/content/guides/03.auth/2.access-control.md
index fb074a55b..158b22341 100644
--- a/content/guides/03.auth/2.access-control.md
+++ b/content/guides/03.auth/2.access-control.md
@@ -49,7 +49,7 @@ Use [filter rules](/guides/connect/filter-rules) to validate field values when a

-Define default field values when an item is created or updated. The value will appear in :product-link{product="editor"}, and can later be updated.
+Define default field values when an item is created or updated. The value will appear on the [item page](/guides/content/editor), and can later be updated.
::callout{icon="material-symbols:info-outline"}
**Conflicting Permissions & the API**
diff --git a/content/guides/09.extensions/0.overview.md b/content/guides/09.extensions/0.overview.md
index 602552eb1..d4040c64b 100644
--- a/content/guides/09.extensions/0.overview.md
+++ b/content/guides/09.extensions/0.overview.md
@@ -24,7 +24,7 @@ Extensions execute code inside the Directus server. See [Security Best Practices

-[Interfaces](/guides/extensions/app-extensions/interfaces) are form inputs used primarily inside of the :product-link{product="editor"}. Interfaces are the primary way users interact with data inside of Directus. Custom interfaces can be used for use cases with unique interaction needs, complex data entry, and any time you need to add elements to the editor.
+[Interfaces](/guides/extensions/app-extensions/interfaces) are form inputs used primarily on the [item page](/guides/content/editor). Interfaces are the primary way users interact with data inside of Directus. Custom interfaces can be used for use cases with unique interaction needs, complex data entry, and any time you need to add elements to the item page.
### Displays
@@ -36,7 +36,7 @@ Extensions execute code inside the Directus server. See [Security Best Practices

-[Layouts](/guides/extensions/app-extensions/layouts) allow for listing of items in :product-link{product="explore"} pages. Layouts receive a collection, filters, searches, and any custom layout options that are defined in the layout entrypoint. They are then expected to fetch and render the items from a collection.
+[Layouts](/guides/extensions/app-extensions/layouts) allow for listing of items on [collection pages](/guides/content/explore). Layouts receive a collection, filters, searches, and any custom layout options that are defined in the layout entrypoint. They are then expected to fetch and render the items from a collection.
### Panels
diff --git a/content/guides/09.extensions/3.app-extensions/1.interfaces.md b/content/guides/09.extensions/3.app-extensions/1.interfaces.md
index d38f63776..493a27e89 100644
--- a/content/guides/09.extensions/3.app-extensions/1.interfaces.md
+++ b/content/guides/09.extensions/3.app-extensions/1.interfaces.md
@@ -1,12 +1,12 @@
---
stableId: f31f1e62-6850-4f45-92ae-1d73ad4f2e5b
-title: Editor Interfaces
-description: Interfaces are form inputs used primarily inside of the Directus Editor.
+title: Item Page Interfaces
+description: Interfaces are form inputs used primarily on the Directus item page.
---
-Interfaces are form inputs used primarily inside of the :product-link{product="editor"}.
+Interfaces are form inputs used primarily on the [item page](/guides/content/editor).
-Interfaces are the primary way users interact with data inside of Directus. Custom interfaces can be used for use cases with unique interaction needs, complex data entry, and any time you need to add elements to the editor.
+Interfaces are the primary way users interact with data inside of Directus. Custom interfaces can be used for use cases with unique interaction needs, complex data entry, and any time you need to add elements to the item page.

diff --git a/content/guides/09.extensions/3.app-extensions/3.layouts.md b/content/guides/09.extensions/3.app-extensions/3.layouts.md
index c98ce7834..83a8b537e 100644
--- a/content/guides/09.extensions/3.app-extensions/3.layouts.md
+++ b/content/guides/09.extensions/3.app-extensions/3.layouts.md
@@ -1,10 +1,10 @@
---
stableId: 77b61d9a-322c-44b5-be14-cdb3cf10f542
-title: Explore Layouts
-description: Layouts are used to display a list of items in Explore pages in different ways.
+title: Collection Page Layouts
+description: Layouts are used to display a list of items on collection pages in different ways.
---
-Layouts allow for listing of items in :product-link{product="explore"} pages.
+Layouts allow for listing of items on [collection pages](/guides/content/explore).
Layouts receive a collection, filters, searches, and any custom layout options that are defined in the layout entrypoint. They are then expected to fetch and render the items from a collection.
diff --git a/content/index.md b/content/index.md
index 7fb76b5f9..51ab93ed4 100644
--- a/content/index.md
+++ b/content/index.md
@@ -81,7 +81,7 @@ navigation: false
title: Data Studio
description: A web app for your whole team to manage content, files, users, and dashboards.
---
- :product-link{product="explore"} :product-link{product="editor"} :product-link{product="insights"} :product-link{product="files"}
+ :product-link{product="insights"} :product-link{product="files"}
:::
::
From d6971b04a481727fe4bbb48afac832bc6634a850 Mon Sep 17 00:00:00 2001
From: bryantgillespie
Date: Thu, 30 Apr 2026 12:04:17 -0400
Subject: [PATCH 21/45] initial moves
---
app/pages/frameworks/[framework].vue | 224 ++++++++++++++++
app/pages/frameworks/index.vue | 64 +++++
app/utils/frameworks.ts | 138 ++++++++++
content.config.ts | 4 +
content/frameworks/.navigation.yml | 2 +
.../01.nextjs/authentication.md} | 7 +-
.../01.nextjs/build-a-cms.md} | 7 +-
.../01.nextjs/data-fetching.md} | 9 +-
.../01.nextjs/dynamic-forms.md} | 7 +-
.../01.nextjs/dynamic-pages.md} | 7 +-
.../01.nextjs/forms.md} | 7 +-
.../live-preview-content-versioning.md} | 9 +-
.../01.nextjs/live-preview-draft-mode.md} | 9 +-
.../01.nextjs/live-preview.md} | 7 +-
.../01.nextjs/multilingual-content.md} | 7 +-
.../01.nextjs/pagination-infinite-scroll.md} | 7 +-
.../01.nextjs/reusable-blocks.md} | 9 +-
.../01.nextjs/visual-editor.md} | 9 +-
.../02.nuxt/authentication.md} | 7 +-
.../02.nuxt/build-a-cms.md} | 7 +-
.../02.nuxt/data-fetching.md} | 9 +-
.../02.nuxt/dynamic-forms.md} | 7 +-
.../02.nuxt/dynamic-pages.md} | 7 +-
.../02.nuxt/forms.md} | 7 +-
.../02.nuxt/live-preview-setup.md} | 9 +-
.../02.nuxt/live-preview.md} | 7 +-
.../02.nuxt/migrate-from-nuxt-content.md} | 9 +-
.../02.nuxt/multilingual-content.md} | 7 +-
.../02.nuxt/reusable-blocks.md} | 9 +-
.../02.nuxt/visual-editor.md} | 9 +-
.../03.astro/authentication.md} | 7 +-
.../03.astro/build-a-cms.md} | 7 +-
.../03.astro/data-fetching.md} | 7 +-
.../03.astro/dynamic-forms.md} | 7 +-
.../03.astro/dynamic-pages.md} | 7 +-
.../03.astro/live-preview.md} | 9 +-
.../03.astro/multilingual-content.md} | 7 +-
.../03.astro/reusable-blocks.md} | 9 +-
.../04.sveltekit/authentication.md} | 7 +-
.../04.sveltekit/build-a-cms.md} | 7 +-
.../04.sveltekit/data-fetching.md} | 7 +-
.../04.sveltekit/dynamic-forms.md} | 7 +-
.../04.sveltekit/dynamic-pages.md} | 7 +-
.../04.sveltekit/forms.md} | 7 +-
.../04.sveltekit/internationalization.md} | 7 +-
.../04.sveltekit/live-preview.md} | 7 +-
.../04.sveltekit/multilingual-content.md} | 7 +-
.../04.sveltekit/reusable-blocks.md} | 9 +-
.../04.sveltekit/visual-editor.md} | 9 +-
.../05.react/authentication.md} | 7 +-
.../05.react/live-preview.md} | 7 +-
.../06.angular/data-fetching.md} | 7 +-
.../07.laravel/data-fetching.md} | 7 +-
.../08.django/data-fetching.md} | 7 +-
.../09.flask/data-fetching.md} | 9 +-
.../10.spring-boot/data-fetching.md} | 9 +-
.../11.flutter/data-fetching.md} | 7 +-
.../12.swift/authentication.md} | 7 +-
.../12.swift/data-fetching.md} | 7 +-
.../13.kotlin/data-fetching.md} | 7 +-
.../14.eleventy/data-fetching.md} | 9 +-
.../15.solidstart/data-fetching.md} | 7 +-
content/guides/01.data-model/1.collections.md | 4 +-
content/guides/01.data-model/3.interfaces.md | 2 +-
.../guides/01.data-model/4.relationships.md | 2 +-
content/guides/02.content/5.live-preview.md | 10 +-
content/index.md | 2 +-
content/tutorials/1.getting-started/index.md | 4 -
...t-with-javascript-and-directus-realtime.md | 2 +-
...ltime-chat-app-using-directus-and-astro.md | 2 +-
...altime-chat-app-using-directus-and-nuxt.md | 2 +-
...ild-a-user-feedback-widget-with-vue-js-.md | 2 +-
...e-blocks-with-many-to-any-relationships.md | 0
...-santa-roast-app-with-directus-and-nuxt.md | 2 +-
...ent-workflows-with-inngest-and-directus.md | 2 +-
nuxt.config.ts | 3 +-
redirects.json | 239 +++++++++++++++++-
77 files changed, 1046 insertions(+), 97 deletions(-)
create mode 100644 app/pages/frameworks/[framework].vue
create mode 100644 app/pages/frameworks/index.vue
create mode 100644 app/utils/frameworks.ts
create mode 100644 content/frameworks/.navigation.yml
rename content/{tutorials/1.getting-started/using-authentication-in-next-js.md => frameworks/01.nextjs/authentication.md} (99%)
rename content/{tutorials/2.projects/create-a-cms-using-directus-and-nextjs.md => frameworks/01.nextjs/build-a-cms.md} (99%)
rename content/{tutorials/1.getting-started/fetch-data-from-directus-with-nextjs.md => frameworks/01.nextjs/data-fetching.md} (98%)
rename content/{tutorials/2.projects/build-forms-dynamically-using-directus-and-next.md => frameworks/01.nextjs/dynamic-forms.md} (99%)
rename content/{tutorials/2.projects/create-dynamic-pages-for-a-cms-using-directus-and-nextjs.md => frameworks/01.nextjs/dynamic-pages.md} (99%)
rename content/{tutorials/1.getting-started/submit-forms-using-directus-and-nextjs.md => frameworks/01.nextjs/forms.md} (99%)
rename content/{tutorials/7.workflows/combine-live-preview-and-content-versioning-with-next-js.md => frameworks/01.nextjs/live-preview-content-versioning.md} (96%)
rename content/{tutorials/1.getting-started/set-up-live-preview-with-next-js.md => frameworks/01.nextjs/live-preview-draft-mode.md} (97%)
rename content/{tutorials/1.getting-started/implementing-live-preview-in-next-js.md => frameworks/01.nextjs/live-preview.md} (98%)
rename content/{tutorials/1.getting-started/implementing-multilingual-content-using-directus-and-next.md => frameworks/01.nextjs/multilingual-content.md} (99%)
rename content/{tutorials/3.tips-and-tricks/implement-pagination-and-infinite-scrolling-in-next-js-.md => frameworks/01.nextjs/pagination-infinite-scroll.md} (99%)
rename content/{tutorials/1.getting-started/rendering-dynamic-blocks-using-next.md => frameworks/01.nextjs/reusable-blocks.md} (97%)
rename content/{tutorials/1.getting-started/integrating-the-directus-visual-editor-with-nextjs.md => frameworks/01.nextjs/visual-editor.md} (98%)
rename content/{tutorials/1.getting-started/using-authentication-in-nuxt.md => frameworks/02.nuxt/authentication.md} (99%)
rename content/{tutorials/2.projects/create-a-cms-using-directus-and-nuxt.md => frameworks/02.nuxt/build-a-cms.md} (99%)
rename content/{tutorials/1.getting-started/fetch-data-from-directus-with-nuxt.md => frameworks/02.nuxt/data-fetching.md} (98%)
rename content/{tutorials/2.projects/build-forms-dynamically-using-directus-and-nuxt.md => frameworks/02.nuxt/dynamic-forms.md} (99%)
rename content/{tutorials/2.projects/create-dynamic-pages-for-a-cms-using-directus-and-nuxt.md => frameworks/02.nuxt/dynamic-pages.md} (99%)
rename content/{tutorials/1.getting-started/submit-forms-using-directus-and-nuxt.md => frameworks/02.nuxt/forms.md} (99%)
rename content/{tutorials/1.getting-started/set-up-live-preview-with-nuxt.md => frameworks/02.nuxt/live-preview-setup.md} (96%)
rename content/{tutorials/1.getting-started/implementing-live-preview-in-nuxt.md => frameworks/02.nuxt/live-preview.md} (99%)
rename content/{tutorials/4.migration/migrate-from-nuxt-content-to-directus.md => frameworks/02.nuxt/migrate-from-nuxt-content.md} (97%)
rename content/{tutorials/1.getting-started/implementing-multilingual-content-using-directus-and-nuxt.md => frameworks/02.nuxt/multilingual-content.md} (99%)
rename content/{tutorials/1.getting-started/rendering-dynamic-blocks-using-nuxt.md => frameworks/02.nuxt/reusable-blocks.md} (97%)
rename content/{tutorials/1.getting-started/integrating-the-directus-visual-editor-with-nuxt.md => frameworks/02.nuxt/visual-editor.md} (96%)
rename content/{tutorials/1.getting-started/using-authentication-in-astro.md => frameworks/03.astro/authentication.md} (99%)
rename content/{tutorials/2.projects/create-a-cms-using-directus-and-astro.md => frameworks/03.astro/build-a-cms.md} (99%)
rename content/{tutorials/1.getting-started/fetch-data-from-directus-with-astro.md => frameworks/03.astro/data-fetching.md} (99%)
rename content/{tutorials/2.projects/build-forms-dynamically-using-directus-and-astro.md => frameworks/03.astro/dynamic-forms.md} (99%)
rename content/{tutorials/2.projects/create-dynamic-pages-for-a-cms-using-directus-and-astro.md => frameworks/03.astro/dynamic-pages.md} (99%)
rename content/{tutorials/1.getting-started/implementing-live-preview-in-astro.md => frameworks/03.astro/live-preview.md} (98%)
rename content/{tutorials/1.getting-started/implementing-multilingual-content-using-directus-and-astro.md => frameworks/03.astro/multilingual-content.md} (98%)
rename content/{tutorials/1.getting-started/rendering-dynamic-blocks-using-astro.md => frameworks/03.astro/reusable-blocks.md} (97%)
rename content/{tutorials/1.getting-started/using-authentication-in-sveltekit.md => frameworks/04.sveltekit/authentication.md} (99%)
rename content/{tutorials/2.projects/create-a-cms-using-directus-and-sveltekit.md => frameworks/04.sveltekit/build-a-cms.md} (99%)
rename content/{tutorials/1.getting-started/fetch-data-from-directus-with-sveltekit.md => frameworks/04.sveltekit/data-fetching.md} (99%)
rename content/{tutorials/2.projects/build-forms-dynamically-using-directus-and-sveltekit.md => frameworks/04.sveltekit/dynamic-forms.md} (99%)
rename content/{tutorials/2.projects/create-dynamic-pages-for-a-cms-using-directus-and-sveltekit.md => frameworks/04.sveltekit/dynamic-pages.md} (99%)
rename content/{tutorials/1.getting-started/submit-forms-using-directus-and-sveltekit.md => frameworks/04.sveltekit/forms.md} (98%)
rename content/{tutorials/1.getting-started/implement-multilingual-content-with-directus-and-svelte-kit.md => frameworks/04.sveltekit/internationalization.md} (98%)
rename content/{tutorials/1.getting-started/implementing-live-preview-in-sveltekit.md => frameworks/04.sveltekit/live-preview.md} (99%)
rename content/{tutorials/1.getting-started/implementing-multilingual-content-using-directus-and-sveltekit.md => frameworks/04.sveltekit/multilingual-content.md} (98%)
rename content/{tutorials/1.getting-started/rendering-dynamic-blocks-using-sveltekit.md => frameworks/04.sveltekit/reusable-blocks.md} (97%)
rename content/{tutorials/1.getting-started/integrating-the-directus-visual-editor-with-sveltekit.md => frameworks/04.sveltekit/visual-editor.md} (97%)
rename content/{tutorials/1.getting-started/using-authentication-in-react.md => frameworks/05.react/authentication.md} (99%)
rename content/{tutorials/1.getting-started/implementing-live-preview-in-react.md => frameworks/05.react/live-preview.md} (99%)
rename content/{tutorials/1.getting-started/fetch-data-from-directus-with-angular.md => frameworks/06.angular/data-fetching.md} (99%)
rename content/{tutorials/1.getting-started/fetch-data-from-directus-with-laravel.md => frameworks/07.laravel/data-fetching.md} (99%)
rename content/{tutorials/1.getting-started/fetch-data-from-directus-with-django.md => frameworks/08.django/data-fetching.md} (99%)
rename content/{tutorials/1.getting-started/fetch-data-from-directus-with-flask.md => frameworks/09.flask/data-fetching.md} (98%)
rename content/{tutorials/1.getting-started/fetch-data-from-directus-with-spring-boot.md => frameworks/10.spring-boot/data-fetching.md} (98%)
rename content/{tutorials/1.getting-started/fetch-data-from-directus-with-flutter.md => frameworks/11.flutter/data-fetching.md} (99%)
rename content/{tutorials/1.getting-started/implement-directus-auth-with-ios.md => frameworks/12.swift/authentication.md} (99%)
rename content/{tutorials/1.getting-started/fetch-data-from-directus-in-ios-with-swift.md => frameworks/12.swift/data-fetching.md} (98%)
rename content/{tutorials/1.getting-started/fetch-data-from-directus-in-android-with-kotlin.md => frameworks/13.kotlin/data-fetching.md} (99%)
rename content/{tutorials/1.getting-started/fetch-data-from-directus-with-eleventy-3.md => frameworks/14.eleventy/data-fetching.md} (98%)
rename content/{tutorials/1.getting-started/fetch-data-from-directus-with-solidstart.md => frameworks/15.solidstart/data-fetching.md} (99%)
delete mode 100644 content/tutorials/1.getting-started/index.md
rename content/tutorials/{1.getting-started => 2.projects}/create-reusable-blocks-with-many-to-any-relationships.md (100%)
diff --git a/app/pages/frameworks/[framework].vue b/app/pages/frameworks/[framework].vue
new file mode 100644
index 000000000..0ffad293d
--- /dev/null
+++ b/app/pages/frameworks/[framework].vue
@@ -0,0 +1,224 @@
+
+
+
+
+
+
+
+ Frameworks
+
+
+
+
+
+
+
+
+ {{ framework.label }} Guides
+
+
+
+
+
+
+
+ {{ group.title }}
+
+
+
+
+
+
+
+ {{ guideTitle(guide) }}
+
+
+ {{ guide.description }}
+
+
+
+
+
+
+
+
+
+ No framework-specific guides yet. Use the core Directus guides below to get started.
+
+
+
+
+ Core Directus guides
+
+
+ Use these guides to understand the Directus concepts behind your {{ framework.label }} implementation.
+
+
+
+
+
+
+
+
+ {{ guide.title }}
+
+
+ {{ guide.description }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/pages/frameworks/index.vue b/app/pages/frameworks/index.vue
new file mode 100644
index 000000000..698268c0f
--- /dev/null
+++ b/app/pages/frameworks/index.vue
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+
+
+ All frameworks
+
+
+
+
+
+
+ {{ framework.count }} {{ framework.count === 1 ? 'guide' : 'guides' }}
+
+
+
+
+
+
+
+
diff --git a/app/utils/frameworks.ts b/app/utils/frameworks.ts
new file mode 100644
index 000000000..603d174e5
--- /dev/null
+++ b/app/utils/frameworks.ts
@@ -0,0 +1,138 @@
+export interface Framework {
+ slug: string;
+ label: string;
+ icon: string;
+ description: string;
+ aliases?: string[];
+}
+
+export interface FrameworkGuide {
+ title?: string;
+ description?: string;
+ path?: string;
+ icon?: string;
+ technologies?: string[];
+ navigation?: boolean | { title?: string };
+ stem?: string;
+}
+
+export interface CoreGuideLink {
+ path: string;
+ label: string;
+ description: string;
+ icon: string;
+}
+
+export const frameworks: Framework[] = [
+ { slug: 'nextjs', label: 'Next.js', icon: 'simple-icons:nextdotjs', description: 'Build content-driven React apps with Directus.' },
+ { slug: 'nuxt', label: 'Nuxt', icon: 'simple-icons:nuxt', description: 'Build Vue applications and websites with Directus.' },
+ { slug: 'astro', label: 'Astro', icon: 'simple-icons:astro', description: 'Create content sites with Astro and Directus.' },
+ { slug: 'sveltekit', label: 'SvelteKit', icon: 'simple-icons:svelte', description: 'Use Directus as the backend for SvelteKit apps.' },
+ { slug: 'react', label: 'React', icon: 'simple-icons:react', description: 'Connect React apps to Directus APIs and Realtime.' },
+ { slug: 'vue', label: 'Vue', icon: 'simple-icons:vuedotjs', description: 'Connect Vue apps to Directus APIs and Realtime.' },
+ { slug: 'angular', label: 'Angular', icon: 'simple-icons:angular', description: 'Fetch and render Directus data in Angular apps.' },
+ { slug: 'laravel', label: 'Laravel', icon: 'simple-icons:laravel', description: 'Use Directus with Laravel applications.' },
+ { slug: 'django', label: 'Django', icon: 'simple-icons:django', description: 'Use Directus with Django applications.' },
+ { slug: 'flask', label: 'Flask', icon: 'simple-icons:flask', description: 'Use Directus with Flask applications.' },
+ { slug: 'spring-boot', label: 'Spring Boot', icon: 'simple-icons:springboot', description: 'Use Directus with Spring Boot applications.', aliases: ['springboot'] },
+ { slug: 'flutter', label: 'Flutter', icon: 'simple-icons:flutter', description: 'Build cross-platform apps backed by Directus.' },
+ { slug: 'swift', label: 'iOS Swift', icon: 'simple-icons:swift', description: 'Use Directus in native iOS apps with Swift.' },
+ { slug: 'kotlin', label: 'Android Kotlin', icon: 'simple-icons:android', description: 'Use Directus in native Android apps with Kotlin.' },
+ { slug: 'eleventy', label: 'Eleventy', icon: 'simple-icons:eleventy', description: 'Build static sites with Eleventy and Directus.', aliases: ['11ty'] },
+ { slug: 'solidstart', label: 'SolidStart', icon: 'simple-icons:solid', description: 'Use Directus with SolidStart applications.' },
+];
+
+export const coreGuideLinks: CoreGuideLink[] = [
+ {
+ path: '/getting-started/overview',
+ label: 'Start with Directus',
+ description: 'Create a project and learn the core Directus workflow.',
+ icon: 'material-symbols:rocket',
+ },
+ {
+ path: '/guides/data-model/collections',
+ label: 'Model your data',
+ description: 'Create collections, fields, relationships, and interfaces.',
+ icon: 'directus-explore',
+ },
+ {
+ path: '/guides/connect/authentication',
+ label: 'Use the API',
+ description: 'Authenticate and connect your application to Directus APIs.',
+ icon: 'directus-connect',
+ },
+ {
+ path: '/guides/auth/tokens-cookies',
+ label: 'Authenticate users',
+ description: 'Understand Directus auth tokens, cookies, sessions, and roles.',
+ icon: 'directus-auth',
+ },
+ {
+ path: '/guides/files/upload',
+ label: 'Manage files',
+ description: 'Upload, serve, transform, and protect files in Directus.',
+ icon: 'directus-files',
+ },
+ {
+ path: '/guides/realtime/subscriptions',
+ label: 'Use Realtime',
+ description: 'Subscribe to live data changes with Directus Realtime.',
+ icon: 'directus-realtime',
+ },
+];
+
+const startHereSlugs = new Set([
+ 'data-fetching',
+ 'authentication',
+ 'build-a-cms',
+]);
+
+const commonTaskSlugs = new Set([
+ 'dynamic-pages',
+ 'forms',
+ 'dynamic-forms',
+ 'live-preview',
+ 'live-preview-setup',
+ 'live-preview-draft-mode',
+ 'visual-editor',
+ 'reusable-blocks',
+ 'multilingual-content',
+ 'internationalization',
+ 'pagination-infinite-scroll',
+]);
+
+const groupOrder: Record = {
+ 'Start here': 1,
+ 'Common tasks': 2,
+ 'Example builds': 3,
+ 'Migration': 4,
+ 'More guides': 99,
+};
+
+export const getFramework = (slug: string): Framework | undefined =>
+ frameworks.find(framework => framework.slug === slug);
+
+export const getFrameworkSlugs = (framework: Framework): string[] => [
+ framework.slug,
+ ...(framework.aliases ?? []),
+];
+
+export const hasFrameworkTechnology = (guide: FrameworkGuide, framework: Framework): boolean => {
+ const technologies = guide.technologies ?? [];
+ const slugs = getFrameworkSlugs(framework);
+ return technologies.some(technology => slugs.includes(technology));
+};
+
+export const frameworkGuideGroup = (path: string | undefined): string => {
+ const slug = path?.split('/').filter(Boolean).pop();
+
+ if (!slug) return 'More guides';
+ if (startHereSlugs.has(slug)) return 'Start here';
+ if (commonTaskSlugs.has(slug)) return 'Common tasks';
+ if (slug.startsWith('migrate-')) return 'Migration';
+
+ return 'Example builds';
+};
+
+export const frameworkGuideGroupOrder = (path: string | undefined): number =>
+ groupOrder[frameworkGuideGroup(path)] || 99;
diff --git a/content.config.ts b/content.config.ts
index 29e092975..ce120679e 100644
--- a/content.config.ts
+++ b/content.config.ts
@@ -23,6 +23,10 @@ export default defineContentConfig({
})).optional(),
icon: z.string().optional(),
technologies: z.array(z.string()).optional(),
+ stack: z.array(z.string()).optional(),
+ features: z.array(z.string()).optional(),
+ use_cases: z.array(z.string()).optional(),
+ content_type: z.string().optional(),
links: z.array(z.object({
label: z.string(),
icon: z.string(),
diff --git a/content/frameworks/.navigation.yml b/content/frameworks/.navigation.yml
new file mode 100644
index 000000000..014084143
--- /dev/null
+++ b/content/frameworks/.navigation.yml
@@ -0,0 +1,2 @@
+title: Frameworks
+icon: i-ph-brackets-curly
diff --git a/content/tutorials/1.getting-started/using-authentication-in-next-js.md b/content/frameworks/01.nextjs/authentication.md
similarity index 99%
rename from content/tutorials/1.getting-started/using-authentication-in-next-js.md
rename to content/frameworks/01.nextjs/authentication.md
index 36b7545f5..6ff0d88c9 100644
--- a/content/tutorials/1.getting-started/using-authentication-in-next-js.md
+++ b/content/frameworks/01.nextjs/authentication.md
@@ -1,13 +1,18 @@
---
stableId: 89d1cf86-2d5b-47e5-ac63-a3bcaff42421
-slug: using-authentication-in-next-js
+slug: authentication
title: Using Authentication in Next.js
technologies:
- nextjs
+stack:
+ - nextjs
authors:
- name: Carmen Huidobro
title: Developer Educator
description: Learn how to setup Directus authentication with Next.js.
+navigation:
+ title: Authentication
+content_type: framework-guide
---
### Introduction
diff --git a/content/tutorials/2.projects/create-a-cms-using-directus-and-nextjs.md b/content/frameworks/01.nextjs/build-a-cms.md
similarity index 99%
rename from content/tutorials/2.projects/create-a-cms-using-directus-and-nextjs.md
rename to content/frameworks/01.nextjs/build-a-cms.md
index a6ccb96a7..651dd53c8 100644
--- a/content/tutorials/2.projects/create-a-cms-using-directus-and-nextjs.md
+++ b/content/frameworks/01.nextjs/build-a-cms.md
@@ -1,7 +1,7 @@
---
stableId: 313ce076-572c-42fe-879d-a7ad38bed4a8
id: 11a1c86f-36bf-4dd5-8bce-7eed75451514
-slug: create-a-cms-using-directus-and-nextjs
+slug: build-a-cms
title: Create a CMS using Directus and Next.js
technologies:
- nextjs
@@ -9,6 +9,11 @@ authors:
- name: Kumar Harsh
title: Guest Author
description: Learn how to create a CMS using Directus and Next.js.
+stack:
+ - nextjs
+navigation:
+ title: Build a CMS
+content_type: framework-guide
---
Directus provides a headless CMS, which when combined with Next.js will streamline content management. This post covers how to connect them to create a flexible, modern content management system.
diff --git a/content/tutorials/1.getting-started/fetch-data-from-directus-with-nextjs.md b/content/frameworks/01.nextjs/data-fetching.md
similarity index 98%
rename from content/tutorials/1.getting-started/fetch-data-from-directus-with-nextjs.md
rename to content/frameworks/01.nextjs/data-fetching.md
index a375d16e1..63e12f1a1 100644
--- a/content/tutorials/1.getting-started/fetch-data-from-directus-with-nextjs.md
+++ b/content/frameworks/01.nextjs/data-fetching.md
@@ -1,14 +1,19 @@
---
stableId: 1c37964b-48a5-432a-bb71-3beaaee72422
id: 66f569cd-d9cd-42ee-b064-b46cdf380c62
-slug: fetch-data-from-directus-with-nextjs
+slug: data-fetching
title: Fetch Data from Directus with Next.js
authors:
- name: Esther Agbaje
title: Developer Advocate
technologies:
- nextjs
+stack:
+ - nextjs
description: Learn how to integrate Directus in your Next.js web application.
+navigation:
+ title: Data Fetching
+content_type: framework-guide
---
[Next.js](https://nextjs.org/) is a popular JavaScript framework based on React.js. In this tutorial, you will learn how
to build a website using Directus as a [Headless CMS](https://directus.io/solutions/headless-cms). You will store,
@@ -335,7 +340,7 @@ If you want to change what is user-accessible, consider setting up more restrict
at build-time.
If you want to build more complex dynamic pages made out of reusable components, check out
-[our recipe on doing just this](/tutorials/getting-started/create-reusable-blocks-with-many-to-any-relationships).
+[our recipe on doing just this](/tutorials/projects/create-reusable-blocks-with-many-to-any-relationships).
If you want to see the code for this project, you can find it
[on GitHub](https://github.com/directus/examples/blob/main/website-next13).
diff --git a/content/tutorials/2.projects/build-forms-dynamically-using-directus-and-next.md b/content/frameworks/01.nextjs/dynamic-forms.md
similarity index 99%
rename from content/tutorials/2.projects/build-forms-dynamically-using-directus-and-next.md
rename to content/frameworks/01.nextjs/dynamic-forms.md
index 5fe462f54..cbfca771b 100644
--- a/content/tutorials/2.projects/build-forms-dynamically-using-directus-and-next.md
+++ b/content/frameworks/01.nextjs/dynamic-forms.md
@@ -1,6 +1,6 @@
---
stableId: 63f8f8da-c036-4b22-906e-1fbe19d39298
-slug: build-forms-dynamically-using-directus-and-next
+slug: dynamic-forms
title: Build Forms Dynamically using Directus and Next.js
technologies:
- nextjs
@@ -8,6 +8,11 @@ authors:
- name: Kumar Harsh
title: Guest Author
description: Learn how to setup Directus fields with Next.js.
+stack:
+ - nextjs
+navigation:
+ title: Dynamic Forms
+content_type: framework-guide
---
Directus' data studio allows you to create data for your collections. You can then leverage these collections with Next.js to generate dynamic and interactive forms for your application.
diff --git a/content/tutorials/2.projects/create-dynamic-pages-for-a-cms-using-directus-and-nextjs.md b/content/frameworks/01.nextjs/dynamic-pages.md
similarity index 99%
rename from content/tutorials/2.projects/create-dynamic-pages-for-a-cms-using-directus-and-nextjs.md
rename to content/frameworks/01.nextjs/dynamic-pages.md
index f2942b2b5..389a5b4b3 100644
--- a/content/tutorials/2.projects/create-dynamic-pages-for-a-cms-using-directus-and-nextjs.md
+++ b/content/frameworks/01.nextjs/dynamic-pages.md
@@ -1,7 +1,7 @@
---
stableId: 02fe06e8-c207-426f-8d3b-4832a6531c6d
id: 11a1c86f-36bf-4dd5-8bce-7eed75451514
-slug: create-dynamic-pages-for-a-cms-using-directus-and-nextjs
+slug: dynamic-pages
title: Create Dynamic Pages for a CMS using Directus and Next.js
technologies:
- nextjs
@@ -9,6 +9,11 @@ authors:
- name: Kumar Harsh
title: Guest Author
description: Learn how to create dynamic pages you can use in your CMS using Directus and Next.js.
+stack:
+ - nextjs
+navigation:
+ title: Dynamic Pages
+content_type: framework-guide
---
Directus provides a headless CMS, which when combined with Next.js will streamline content management. This post covers how to combine the two to create dynamic pages for a content management system.
diff --git a/content/tutorials/1.getting-started/submit-forms-using-directus-and-nextjs.md b/content/frameworks/01.nextjs/forms.md
similarity index 99%
rename from content/tutorials/1.getting-started/submit-forms-using-directus-and-nextjs.md
rename to content/frameworks/01.nextjs/forms.md
index 201f72a12..f81fd66bd 100644
--- a/content/tutorials/1.getting-started/submit-forms-using-directus-and-nextjs.md
+++ b/content/frameworks/01.nextjs/forms.md
@@ -1,13 +1,18 @@
---
stableId: 7f7c2b05-a27a-429d-a55c-038824bef895
-slug: submit-forms-using-directus-and-nextjs
+slug: forms
title: Submit Forms Using Directus and Next.js
technologies:
- nextjs
+stack:
+ - nextjs
authors:
- name: Kumar Harsh
title: Guest Author
description: Learn how to submit forms using Directus and Next.js.
+navigation:
+ title: Form Submissions
+content_type: framework-guide
---
Directus provides a headless CMS, which when combined with Next.js will streamline content management. This post covers how to connect them to create and submit forms.
diff --git a/content/tutorials/7.workflows/combine-live-preview-and-content-versioning-with-next-js.md b/content/frameworks/01.nextjs/live-preview-content-versioning.md
similarity index 96%
rename from content/tutorials/7.workflows/combine-live-preview-and-content-versioning-with-next-js.md
rename to content/frameworks/01.nextjs/live-preview-content-versioning.md
index 463e062ae..6b4bf4990 100644
--- a/content/tutorials/7.workflows/combine-live-preview-and-content-versioning-with-next-js.md
+++ b/content/frameworks/01.nextjs/live-preview-content-versioning.md
@@ -1,14 +1,19 @@
---
stableId: 1953c647-6cd3-420c-a9dd-f3afd5693be7
id: 422c9d3c-d5da-45ff-abec-fdbf71a54721
-slug: combine-live-preview-and-content-versioning-with-next-js
+slug: live-preview-content-versioning
title: Combine Live Preview and Content Versioning with Next.js
technologies:
- nextjs
+stack:
+ - nextjs
authors:
- name: Esther Agbaje
title: Developer Advocate
description: Learn how to set up Live Preview with different content versions in your Next.js application.
+navigation:
+ title: Live Preview and Versions
+content_type: framework-guide
---
Imagine being able to create different versions of your content, and then easily preview them while still in draft mode. With Directus, you can integrate Content Versioning and Live Preview in your Next.js application, making it easier for your team to manage and preview multiple content versions.
@@ -18,7 +23,7 @@ In this post, I'll show you how to set up your Live Preview-enabled Next.js appl
## Prerequisites:
- A Directus project with at least one content versioned collection. In this tutorial, we will use a collection called `Posts`.
-- A Next.js application with Live Preview enabled. If you don't have one, [follow our guide](/tutorials/getting-started/fetch-data-from-directus-with-nextjs).
+- A Next.js application with Live Preview enabled. If you don't have one, [follow our guide](/frameworks/nextjs/data-fetching).
- Basic knowledge of React and Next.js.
## Step 1: Read the Version from SearchParams
diff --git a/content/tutorials/1.getting-started/set-up-live-preview-with-next-js.md b/content/frameworks/01.nextjs/live-preview-draft-mode.md
similarity index 97%
rename from content/tutorials/1.getting-started/set-up-live-preview-with-next-js.md
rename to content/frameworks/01.nextjs/live-preview-draft-mode.md
index 4dfcf809d..2a3074ab2 100644
--- a/content/tutorials/1.getting-started/set-up-live-preview-with-next-js.md
+++ b/content/frameworks/01.nextjs/live-preview-draft-mode.md
@@ -1,14 +1,19 @@
---
stableId: 4b3da552-afc6-4281-b206-2228e99f049d
id: 58ab89b4-d426-476f-a0e7-73a62c486676
-slug: set-up-live-preview-with-next-js
+slug: live-preview-draft-mode
title: Set Up Live Preview with Next.js
technologies:
- nextjs
+stack:
+ - nextjs
authors:
- name: Esther Agbaje
title: Developer Advocate
description: Learn how to confgure Live Preview with Next.js' draft mode.
+navigation:
+ title: Draft Mode Preview
+content_type: framework-guide
---
Directus' Live Preview feature allows you to show changes in your website before publishing and without the need to
refresh the browser. This is useful when using Directus as a [Headless CMS](https://directus.io/solutions/headless-cms).
@@ -29,7 +34,7 @@ You will need:
- Some knowledge of React.js and Next.js.
If you're just getting started with Next.js and Directus, reference our
-[guide](/tutorials/getting-started/fetch-data-from-directus-with-nextjs) to set up Next.js 13 with Directus.
+[guide](/frameworks/nextjs/data-fetching) to set up Next.js 13 with Directus.
## Configure Live Preview URL in Directus
diff --git a/content/tutorials/1.getting-started/implementing-live-preview-in-next-js.md b/content/frameworks/01.nextjs/live-preview.md
similarity index 98%
rename from content/tutorials/1.getting-started/implementing-live-preview-in-next-js.md
rename to content/frameworks/01.nextjs/live-preview.md
index 07bf34afb..043c82f04 100644
--- a/content/tutorials/1.getting-started/implementing-live-preview-in-next-js.md
+++ b/content/frameworks/01.nextjs/live-preview.md
@@ -1,14 +1,19 @@
---
stableId: 2e9c2cc0-82dd-4af9-bccc-1118ae4086f6
-slug: implementing-live-preview-in-next-js
+slug: live-preview
title: Implementing Live Preview in Next.js
technologies:
- nextjs
- directus
+stack:
+ - nextjs
authors:
- name: Carmen Huidobro
title: Developer Educator
description: Learn how to setup Directus live preview with Next.js.
+navigation:
+ title: Live Preview
+content_type: framework-guide
---
Live Preview can be enabled in Directus Editor and allows content authors to see their changes directly in the Data Studio. It can be combined with content versioning to preview pre-published content. In this tutorial, you'll learn how to implement Live Preview in your Next.js application.
diff --git a/content/tutorials/1.getting-started/implementing-multilingual-content-using-directus-and-next.md b/content/frameworks/01.nextjs/multilingual-content.md
similarity index 99%
rename from content/tutorials/1.getting-started/implementing-multilingual-content-using-directus-and-next.md
rename to content/frameworks/01.nextjs/multilingual-content.md
index 6140fc3cf..b6ee87263 100644
--- a/content/tutorials/1.getting-started/implementing-multilingual-content-using-directus-and-next.md
+++ b/content/frameworks/01.nextjs/multilingual-content.md
@@ -1,13 +1,18 @@
---
stableId: ed2c086a-f490-44ee-8532-fcb4f88b654d
-slug: implementing-multilingual-content-using-directus-and-next
+slug: multilingual-content
title: Implementing Multilingual Content using Directus and Next.js
technologies:
+stack:
+ - nextjs
- nextjs
authors:
- name: Kumar Harsh
title: Guest Author
description: Learn how to access multilingual Directus content using Next.js.
+navigation:
+ title: Multilingual Content
+content_type: framework-guide
---
Directus comes with built-in support for creating multilingual content. In this post, you'll learn how to create multilingual content and access it using your Next.js application.
diff --git a/content/tutorials/3.tips-and-tricks/implement-pagination-and-infinite-scrolling-in-next-js-.md b/content/frameworks/01.nextjs/pagination-infinite-scroll.md
similarity index 99%
rename from content/tutorials/3.tips-and-tricks/implement-pagination-and-infinite-scrolling-in-next-js-.md
rename to content/frameworks/01.nextjs/pagination-infinite-scroll.md
index ae3709944..41858e464 100644
--- a/content/tutorials/3.tips-and-tricks/implement-pagination-and-infinite-scrolling-in-next-js-.md
+++ b/content/frameworks/01.nextjs/pagination-infinite-scroll.md
@@ -1,14 +1,19 @@
---
stableId: f7a62c07-ea5a-41de-8fb3-8b1493480209
id: 2b0a0315-d7f2-4dc9-9d63-8f853eb81a09
-slug: implement-pagination-and-infinite-scrolling-in-next-js-
+slug: pagination-infinite-scroll
title: Implement Pagination and Infinite Scrolling in Next.js
technologies:
- nextjs
+stack:
+ - nextjs
authors:
- name: Taminoturoko Briggs
title: Guest Author
description: Learn various techniques to load paginated data in your Next.js application.
+navigation:
+ title: Pagination
+content_type: framework-guide
---
When working with a large set of data fetching and rendering them at once can cause performance issues for your application, especially for devices with poor internet connections. To prevent this, several techniques are used to fetch and render data in chunks. Two of the most common ones are pagination and infinite scrolling.
diff --git a/content/tutorials/1.getting-started/rendering-dynamic-blocks-using-next.md b/content/frameworks/01.nextjs/reusable-blocks.md
similarity index 97%
rename from content/tutorials/1.getting-started/rendering-dynamic-blocks-using-next.md
rename to content/frameworks/01.nextjs/reusable-blocks.md
index 93f228e80..5f7df73d7 100644
--- a/content/tutorials/1.getting-started/rendering-dynamic-blocks-using-next.md
+++ b/content/frameworks/01.nextjs/reusable-blocks.md
@@ -1,16 +1,21 @@
---
stableId: 55dd3cee-a726-4901-8697-d26f0e1027b4
-slug: rendering-dynamic-blocks-using-next
+slug: reusable-blocks
title: Rendering Dynamic Blocks Using Next.js
technologies:
- nextjs
+stack:
+ - nextjs
authors:
- name: Kumar Harsh
title: Guest Author
description: Learn how to render dynamic blocks using Next.js.
+navigation:
+ title: Reusable Blocks
+content_type: framework-guide
---
-[Having used Directus as a Headless CMS to create individual blocks that can be re-used on different pages](https://directus.io/docs/tutorials/getting-started/create-reusable-blocks-with-many-to-any-relationships), let's integrate them into a Next.js application.
+[Having used Directus as a Headless CMS to create individual blocks that can be re-used on different pages](https://directus.io/docs/tutorials/projects/create-reusable-blocks-with-many-to-any-relationships), let's integrate them into a Next.js application.
## Before You Start
diff --git a/content/tutorials/1.getting-started/integrating-the-directus-visual-editor-with-nextjs.md b/content/frameworks/01.nextjs/visual-editor.md
similarity index 98%
rename from content/tutorials/1.getting-started/integrating-the-directus-visual-editor-with-nextjs.md
rename to content/frameworks/01.nextjs/visual-editor.md
index a5251de1d..fb6274e20 100644
--- a/content/tutorials/1.getting-started/integrating-the-directus-visual-editor-with-nextjs.md
+++ b/content/frameworks/01.nextjs/visual-editor.md
@@ -1,13 +1,18 @@
---
stableId: 5d0ac183-f40f-43ec-9d36-3d9efa73c204
-slug: integrating-the-directus-visual-editor-with-nextjs
+slug: visual-editor
title: Integrating the Directus Visual Editor with Next.js
technologies:
- nextjs
+stack:
+ - nextjs
authors:
- name: Kumar Harsh
title: Guest Author
description: Learn how to integrate the Directus Visual Editor with Next.js.
+navigation:
+ title: Visual Editor
+content_type: framework-guide
---
The Directus Visual Editor module allows you to edit your content live on your site. This article shows you how to integrate it with an existing CMS setup using Next.js.
@@ -113,7 +118,7 @@ environment:
In a production environment, you should only allow your app's trusted domains in the `CORS_ORIGIN` list.
## Set Up Your Next.js Project
-Follow the instructions for setting up a Next.js project in the [Create a CMS using Directus and Next.js](https://directus.io/docs/tutorials/projects/create-a-cms-using-directus-and-nextjs) tutorial. Once you have the Next.js app from that tutorial set up, you can start with the steps in this article to integrate with the Directus Visual Editor.
+Follow the instructions for setting up a Next.js project in the [Create a CMS using Directus and Next.js](https://directus.io/docs/frameworks/nextjs/build-a-cms) tutorial. Once you have the Next.js app from that tutorial set up, you can start with the steps in this article to integrate with the Directus Visual Editor.
You can get the full code for this article [here](https://github.com/krharsh17/directus-next-cms) to skip the setup and go straight to the integration.
diff --git a/content/tutorials/1.getting-started/using-authentication-in-nuxt.md b/content/frameworks/02.nuxt/authentication.md
similarity index 99%
rename from content/tutorials/1.getting-started/using-authentication-in-nuxt.md
rename to content/frameworks/02.nuxt/authentication.md
index 393dcd6d8..578a1ef0a 100644
--- a/content/tutorials/1.getting-started/using-authentication-in-nuxt.md
+++ b/content/frameworks/02.nuxt/authentication.md
@@ -1,13 +1,18 @@
---
stableId: 34b779a1-0e84-49fe-a675-96da571d5ea8
-slug: using-authentication-in-nuxt
+slug: authentication
title: Using Authentication in Nuxt
technologies:
- nuxt
+stack:
+ - nuxt
authors:
- name: Craig Harman
title: Guest Author
description: Learn how to setup Directus authentication with Nuxt.
+navigation:
+ title: Authentication
+content_type: framework-guide
---
### Introduction
diff --git a/content/tutorials/2.projects/create-a-cms-using-directus-and-nuxt.md b/content/frameworks/02.nuxt/build-a-cms.md
similarity index 99%
rename from content/tutorials/2.projects/create-a-cms-using-directus-and-nuxt.md
rename to content/frameworks/02.nuxt/build-a-cms.md
index 3eb7b9ff5..575c12be9 100644
--- a/content/tutorials/2.projects/create-a-cms-using-directus-and-nuxt.md
+++ b/content/frameworks/02.nuxt/build-a-cms.md
@@ -1,7 +1,7 @@
---
stableId: ec808493-1b38-4dd5-b39a-5fe224fe7fbb
id: 11a1c86f-36bf-4dd5-8bce-7eed75451514
-slug: create-a-cms-using-directus-and-nuxt
+slug: build-a-cms
title: Create a CMS using Directus and Nuxt
technologies:
- nuxt
@@ -9,6 +9,11 @@ authors:
- name: Craig Harman
title: Guest Author
description: Learn how to create a CMS using Directus and Nuxt.
+stack:
+ - nuxt
+navigation:
+ title: Build a CMS
+content_type: framework-guide
---
Directus provides a headless CMS, which when combined with Nuxt will streamline content management. This post covers how to connect them to create a flexible, modern content management system.
diff --git a/content/tutorials/1.getting-started/fetch-data-from-directus-with-nuxt.md b/content/frameworks/02.nuxt/data-fetching.md
similarity index 98%
rename from content/tutorials/1.getting-started/fetch-data-from-directus-with-nuxt.md
rename to content/frameworks/02.nuxt/data-fetching.md
index f79396f8c..53c8bdc5e 100644
--- a/content/tutorials/1.getting-started/fetch-data-from-directus-with-nuxt.md
+++ b/content/frameworks/02.nuxt/data-fetching.md
@@ -1,14 +1,19 @@
---
stableId: e41d7ea1-f5b9-4a64-a4d6-213902e22dad
id: bf074448-1967-4c83-8926-9f2005029974
-slug: fetch-data-from-directus-with-nuxt
+slug: data-fetching
title: Fetch Data from Directus with Nuxt
authors:
- name: Kevin Lewis
title: Director, Developer Experience
technologies:
- nuxt
+stack:
+ - nuxt
description: Learn how to integrate Directus in your Nuxt web application.
+navigation:
+ title: Data Fetching
+content_type: framework-guide
---
[Nuxt](https://nuxt.com/) is a popular JavaScript framework based on Vue.js. In this tutorial, you will learn how to
build a website using Directus as a [Headless CMS](https://directus.io/solutions/headless-cms). You will store,
@@ -282,7 +287,7 @@ If you want to change what is user-accessible, consider setting up more restrict
at build-time.
If you want to build more complex dynamic pages made out of reusable components, check out
-[our recipe on doing just this](/tutorials/getting-started/create-reusable-blocks-with-many-to-any-relationships).
+[our recipe on doing just this](/tutorials/projects/create-reusable-blocks-with-many-to-any-relationships).
If you want to see the code for this project, you can find it
[on GitHub](https://github.com/directus/examples/blob/main/website-nuxt3).
diff --git a/content/tutorials/2.projects/build-forms-dynamically-using-directus-and-nuxt.md b/content/frameworks/02.nuxt/dynamic-forms.md
similarity index 99%
rename from content/tutorials/2.projects/build-forms-dynamically-using-directus-and-nuxt.md
rename to content/frameworks/02.nuxt/dynamic-forms.md
index cd42ce989..7b8fee42f 100644
--- a/content/tutorials/2.projects/build-forms-dynamically-using-directus-and-nuxt.md
+++ b/content/frameworks/02.nuxt/dynamic-forms.md
@@ -1,6 +1,6 @@
---
stableId: 7a7bf6f7-1550-4565-9817-3b862a476ecb
-slug: build-forms-dynamically-using-directus-and-nuxt
+slug: dynamic-forms
title: Build Forms Dynamically using Directus and Nuxt
technologies:
- nuxt
@@ -8,6 +8,11 @@ authors:
- name: Craig Harman
title: Guest Author
description: Learn how to setup Directus fields with Nuxt.
+stack:
+ - nuxt
+navigation:
+ title: Dynamic Forms
+content_type: framework-guide
---
Directus' data studio allows you to create data for your collections. You can then leverage these collections with Nuxt to generate dynamic and interactive forms for your application.
diff --git a/content/tutorials/2.projects/create-dynamic-pages-for-a-cms-using-directus-and-nuxt.md b/content/frameworks/02.nuxt/dynamic-pages.md
similarity index 99%
rename from content/tutorials/2.projects/create-dynamic-pages-for-a-cms-using-directus-and-nuxt.md
rename to content/frameworks/02.nuxt/dynamic-pages.md
index 5981adce6..04f4c63f1 100644
--- a/content/tutorials/2.projects/create-dynamic-pages-for-a-cms-using-directus-and-nuxt.md
+++ b/content/frameworks/02.nuxt/dynamic-pages.md
@@ -1,7 +1,7 @@
---
stableId: af8dafc8-146c-40a1-a338-8d09b6f76b82
id: 11a1c86f-36bf-4dd5-8bce-7eed75451514
-slug: create-dynamic-pages-for-a-cms-using-directus-and-nuxt
+slug: dynamic-pages
title: Create Dynamic Pages for a CMS using Directus and Nuxt
technologies:
- nuxt
@@ -9,6 +9,11 @@ authors:
- name: Craig Harman
title: Guest Author
description: Learn how to create dynamic pages you can use in your CMS using Directus and Nuxt.
+stack:
+ - nuxt
+navigation:
+ title: Dynamic Pages
+content_type: framework-guide
---
Directus provides a headless CMS, which when combined with Nuxt will streamline content management. This post covers how to combine the two to create dynamic pages for a content management system.
diff --git a/content/tutorials/1.getting-started/submit-forms-using-directus-and-nuxt.md b/content/frameworks/02.nuxt/forms.md
similarity index 99%
rename from content/tutorials/1.getting-started/submit-forms-using-directus-and-nuxt.md
rename to content/frameworks/02.nuxt/forms.md
index 296b6f8f0..ebe6b6a53 100644
--- a/content/tutorials/1.getting-started/submit-forms-using-directus-and-nuxt.md
+++ b/content/frameworks/02.nuxt/forms.md
@@ -1,13 +1,18 @@
---
stableId: e983aa81-3f48-4e0b-9936-db0aa36fd26b
-slug: submit-forms-using-directus-and-nuxt
+slug: forms
title: Submit Forms Using Directus and Nuxt
technologies:
- nuxt
+stack:
+ - nuxt
authors:
- name: Craig Harman
title: Guest Author
description: Learn how to submit forms using Directus and Nuxt.
+navigation:
+ title: Form Submissions
+content_type: framework-guide
---
Directus provides a headless CMS, which when combined with Nuxt will streamline content management. This post covers how to connect them to create and submit forms.
diff --git a/content/tutorials/1.getting-started/set-up-live-preview-with-nuxt.md b/content/frameworks/02.nuxt/live-preview-setup.md
similarity index 96%
rename from content/tutorials/1.getting-started/set-up-live-preview-with-nuxt.md
rename to content/frameworks/02.nuxt/live-preview-setup.md
index c5cf882bc..fae9b2918 100644
--- a/content/tutorials/1.getting-started/set-up-live-preview-with-nuxt.md
+++ b/content/frameworks/02.nuxt/live-preview-setup.md
@@ -1,14 +1,19 @@
---
stableId: 0d9cfbc7-9dae-493b-9c17-866606ec9f0e
id: 75acf155-0662-4b74-8555-52e5cf02446c
-slug: set-up-live-preview-with-nuxt
+slug: live-preview-setup
title: Set Up Live Preview with Nuxt
technologies:
- nuxt
+stack:
+ - nuxt
authors:
- name: Kevin Lewis
title: Director, Developer Experience
description: Learn how to create a Nuxt preview plugin to configure Live Preview.
+navigation:
+ title: Live Preview Setup
+content_type: framework-guide
---
Directus' Live Preview feature allows you to show changes in your website collection before publishing and without the
need to refresh the browser.
@@ -27,7 +32,7 @@ You will need:
- Some knowledge of Vue and Nuxt.
If you're just getting started with Nuxt and Directus, reference our
-[guide](/tutorials/getting-started/fetch-data-from-directus-with-nuxt) to set up Nuxt 3 with Directus by creating a custom
+[guide](/frameworks/nuxt/data-fetching) to set up Nuxt 3 with Directus by creating a custom
plugin. This guide assumes you have already set up the plugin and have access to `this.$directus`, `this.$readItem` and
`this.$readItems` in your project.
diff --git a/content/tutorials/1.getting-started/implementing-live-preview-in-nuxt.md b/content/frameworks/02.nuxt/live-preview.md
similarity index 99%
rename from content/tutorials/1.getting-started/implementing-live-preview-in-nuxt.md
rename to content/frameworks/02.nuxt/live-preview.md
index ccf6aa31b..528d08fa6 100644
--- a/content/tutorials/1.getting-started/implementing-live-preview-in-nuxt.md
+++ b/content/frameworks/02.nuxt/live-preview.md
@@ -1,14 +1,19 @@
---
stableId: eee0304f-ba89-4e8e-a935-4030a95d2b7b
-slug: implementing-live-preview-in-nuxt
+slug: live-preview
title: Implementing Live Preview in Nuxt
technologies:
- nuxt
- directus
+stack:
+ - nuxt
authors:
- name: Craig Harman
title: Guest Author
description: Learn how to setup Directus live preview with Nuxt.
+navigation:
+ title: Live Preview
+content_type: framework-guide
---
Live Preview can be enabled in Directus Editor and allows content authors to see their changes directly in the Data Studio. It can be combined with content versioning to preview pre-published content. In this tutorial, you'll learn how to implement Live Preview in your Nuxt application.
diff --git a/content/tutorials/4.migration/migrate-from-nuxt-content-to-directus.md b/content/frameworks/02.nuxt/migrate-from-nuxt-content.md
similarity index 97%
rename from content/tutorials/4.migration/migrate-from-nuxt-content-to-directus.md
rename to content/frameworks/02.nuxt/migrate-from-nuxt-content.md
index 6763263ee..835d5e499 100644
--- a/content/tutorials/4.migration/migrate-from-nuxt-content-to-directus.md
+++ b/content/frameworks/02.nuxt/migrate-from-nuxt-content.md
@@ -1,14 +1,19 @@
---
stableId: 2713080a-7015-4252-a7fe-a46213917423
id: 023412b4-f8c3-4016-921d-756c75aad1e6
-slug: migrate-from-nuxt-content-to-directus
+slug: migrate-from-nuxt-content
title: Migrate from Nuxt Content to Directus
technologies:
- nuxt
+stack:
+ - nuxt
authors:
- name: Kevin Lewis
title: Director, Developer Experience
description: Learn how to move from a flat-file CMS to Directus.
+navigation:
+ title: Nuxt Content Migration
+content_type: framework-guide
---
Away from my day job here at Directus I run a [free library of online content focused around core skills](https://yougotthis.io).
@@ -132,7 +137,7 @@ Now data exists within Directus, Nuxt Content could be replaced within the Nuxt
npm install @directus/sdk
```
-Following the same steps as our guide "[Build a Website With Nuxt 3 and the Directus JavaScript SDK](/tutorials/getting-started/fetch-data-from-directus-with-nuxt)", I created a plugin. However, being Nuxt 2, this looks slightly different:
+Following the same steps as our guide "[Build a Website With Nuxt 3 and the Directus JavaScript SDK](/frameworks/nuxt/data-fetching)", I created a plugin. However, being Nuxt 2, this looks slightly different:
```js
import { Directus } from '@directus/sdk';
diff --git a/content/tutorials/1.getting-started/implementing-multilingual-content-using-directus-and-nuxt.md b/content/frameworks/02.nuxt/multilingual-content.md
similarity index 99%
rename from content/tutorials/1.getting-started/implementing-multilingual-content-using-directus-and-nuxt.md
rename to content/frameworks/02.nuxt/multilingual-content.md
index a9c645138..37ef14e54 100644
--- a/content/tutorials/1.getting-started/implementing-multilingual-content-using-directus-and-nuxt.md
+++ b/content/frameworks/02.nuxt/multilingual-content.md
@@ -1,13 +1,18 @@
---
stableId: cfba1320-ff3f-4a70-b358-af6f9da57af5
-slug: implementing-multilingual-content-using-directus-and-nuxt
+slug: multilingual-content
title: Implementing Multilingual Content using Directus and Nuxt
technologies:
- nuxt
+stack:
+ - nuxt
authors:
- name: Craig Harman
title: Guest Author
description: Learn how to access multilingual Directus content using Nuxt.
+navigation:
+ title: Multilingual Content
+content_type: framework-guide
---
Directus comes with built-in support for creating multilingual content. In this post, you'll learn how to create multilingual content and access it using your Nuxt application.
diff --git a/content/tutorials/1.getting-started/rendering-dynamic-blocks-using-nuxt.md b/content/frameworks/02.nuxt/reusable-blocks.md
similarity index 97%
rename from content/tutorials/1.getting-started/rendering-dynamic-blocks-using-nuxt.md
rename to content/frameworks/02.nuxt/reusable-blocks.md
index f0bd9073d..792ccb460 100644
--- a/content/tutorials/1.getting-started/rendering-dynamic-blocks-using-nuxt.md
+++ b/content/frameworks/02.nuxt/reusable-blocks.md
@@ -1,15 +1,20 @@
---
stableId: 355a2ed6-eb0a-435d-8d69-cf2b69270ff3
-slug: rendering-dynamic-blocks-using-nuxt
+slug: reusable-blocks
title: Rendering Dynamic Blocks Using Nuxt
technologies:
- nuxt
+stack:
+ - nuxt
authors:
- name: Craig Harman
title: Guest Author
description: Learn how to render dynamic blocks using Nuxt.
+navigation:
+ title: Reusable Blocks
+content_type: framework-guide
---
-[Having used Directus as a Headless CMS to create individual blocks that can be re-used on different pages](https://directus.io/docs/tutorials/getting-started/create-reusable-blocks-with-many-to-any-relationships), let's integrate them into your Nuxt website.
+[Having used Directus as a Headless CMS to create individual blocks that can be re-used on different pages](https://directus.io/docs/tutorials/projects/create-reusable-blocks-with-many-to-any-relationships), let's integrate them into your Nuxt website.
## Before You Start
diff --git a/content/tutorials/1.getting-started/integrating-the-directus-visual-editor-with-nuxt.md b/content/frameworks/02.nuxt/visual-editor.md
similarity index 96%
rename from content/tutorials/1.getting-started/integrating-the-directus-visual-editor-with-nuxt.md
rename to content/frameworks/02.nuxt/visual-editor.md
index 867a02dfc..5caf51e86 100644
--- a/content/tutorials/1.getting-started/integrating-the-directus-visual-editor-with-nuxt.md
+++ b/content/frameworks/02.nuxt/visual-editor.md
@@ -1,13 +1,18 @@
---
stableId: 0bd2e190-d382-440b-aa41-8c1dd7637652
-slug: integrating-the-directus-visual-editor-with-nuxt
+slug: visual-editor
title: Integrating the Directus Visual Editor with Nuxt
technologies:
- nuxt
+stack:
+ - nuxt
authors:
- name: Craig Harman
title: Guest Author
description: Learn how to integrate the Directus Visual Editor with Nuxt.
+navigation:
+ title: Visual Editor
+content_type: framework-guide
---
The Directus Visual Editor module allows you to edit your content live on your site. This article shows you how to integrate it with an existing CMS setup using Nuxt.
@@ -52,7 +57,7 @@ Navigate to Settings -> Visual Editor and add the URL of your Nuxt website that
## Set Up Your Nuxt Project
-Follow the instructions for setting up a Nuxt project in the [Create a CMS using Directus and Nuxt documentation](https://directus.io/docs/tutorials/projects/create-a-cms-using-directus-and-nuxt#set-up-your-nuxt-project). Complete the remainder of the steps in this article to create a Nuxt project that is ready to integrate with the Directus Visual Editor.
+Follow the instructions for setting up a Nuxt project in the [Create a CMS using Directus and Nuxt documentation](https://directus.io/docs/frameworks/nuxt/build-a-cms#set-up-your-nuxt-project). Complete the remainder of the steps in this article to create a Nuxt project that is ready to integrate with the Directus Visual Editor.
A copy of the Directus/Nuxt CMS project from this article is available [here](https://github.com/craigharman/directus-guest-authoring/tree/master/036-directus-cms-home) if you want to skip the setup and go straight to the integration.
diff --git a/content/tutorials/1.getting-started/using-authentication-in-astro.md b/content/frameworks/03.astro/authentication.md
similarity index 99%
rename from content/tutorials/1.getting-started/using-authentication-in-astro.md
rename to content/frameworks/03.astro/authentication.md
index fc926f8e3..38d1255fc 100644
--- a/content/tutorials/1.getting-started/using-authentication-in-astro.md
+++ b/content/frameworks/03.astro/authentication.md
@@ -1,13 +1,18 @@
---
stableId: 384b2479-40d7-48c2-814b-e75ef0026b43
-slug: using-authentication-in-astro
+slug: authentication
title: Using Authentication in Astro
technologies:
- astro
+stack:
+ - astro
authors:
- name: Carmen Huidobro
title: Developer Educator
description: Learn how to setup Directus authentication with Astro.
+navigation:
+ title: Authentication
+content_type: framework-guide
---
Authentication is a critical part of any modern web application, ensuring that users can securely access their data and perform authorized actions. In this tutorial, you will learn how to implement authentication in your Astro application using Directus' built-in authentication system.
diff --git a/content/tutorials/2.projects/create-a-cms-using-directus-and-astro.md b/content/frameworks/03.astro/build-a-cms.md
similarity index 99%
rename from content/tutorials/2.projects/create-a-cms-using-directus-and-astro.md
rename to content/frameworks/03.astro/build-a-cms.md
index e894d4a0d..829e55239 100644
--- a/content/tutorials/2.projects/create-a-cms-using-directus-and-astro.md
+++ b/content/frameworks/03.astro/build-a-cms.md
@@ -1,6 +1,6 @@
---
stableId: b9e011ba-6d63-4d8c-a592-f3e0d8ac8d25
-slug: create-a-cms-using-directus-and-astro
+slug: build-a-cms
title: Create a CMS using Directus and Astro
technologies:
- astro
@@ -8,6 +8,11 @@ authors:
- name: Carmen Huidobro
title: Developer Educator
description: Learn how to create a CMS using Directus and Astro.
+stack:
+ - astro
+navigation:
+ title: Build a CMS
+content_type: framework-guide
---
# Create a CMS using Directus and Astro
diff --git a/content/tutorials/1.getting-started/fetch-data-from-directus-with-astro.md b/content/frameworks/03.astro/data-fetching.md
similarity index 99%
rename from content/tutorials/1.getting-started/fetch-data-from-directus-with-astro.md
rename to content/frameworks/03.astro/data-fetching.md
index 3cf5df301..e382d3298 100644
--- a/content/tutorials/1.getting-started/fetch-data-from-directus-with-astro.md
+++ b/content/frameworks/03.astro/data-fetching.md
@@ -1,14 +1,19 @@
---
stableId: 98cb9a2e-88d4-4c63-9f06-414ccb561335
id: 970eaaf3-d033-43d6-800e-c168e28c6d8f
-slug: fetch-data-from-directus-with-astro
+slug: data-fetching
title: Fetch Data from Directus with Astro
technologies:
- astro
+stack:
+ - astro
authors:
- name: Trust Jamin
title: Guest Author
description: Learn how to integrate Directus in your Astro web application.
+navigation:
+ title: Data Fetching
+content_type: framework-guide
---
[Astro](https://astro.build/) is a web framework used for building content-heavy websites. In this tutorial, you will learn how to build a website using Directus as a headless CMS. You will store, retrieve, and use global metadata such as the site title, create new pages dynamically based on Directus items, and build a blog.
diff --git a/content/tutorials/2.projects/build-forms-dynamically-using-directus-and-astro.md b/content/frameworks/03.astro/dynamic-forms.md
similarity index 99%
rename from content/tutorials/2.projects/build-forms-dynamically-using-directus-and-astro.md
rename to content/frameworks/03.astro/dynamic-forms.md
index e5fc67e3c..607f6ec55 100644
--- a/content/tutorials/2.projects/build-forms-dynamically-using-directus-and-astro.md
+++ b/content/frameworks/03.astro/dynamic-forms.md
@@ -1,6 +1,6 @@
---
stableId: ffa9c8fe-df0d-4286-8c3b-656680417cc4
-slug: build-forms-dynamically-using-directus-and-astro
+slug: dynamic-forms
title: Build Forms Dynamically using Directus and Astro
technologies:
- astro
@@ -8,6 +8,11 @@ authors:
- name: Carmen Huidobro
title: Developer Educator
description: Learn how to setup Directus fields with Astro.
+stack:
+ - astro
+navigation:
+ title: Dynamic Forms
+content_type: framework-guide
---
Directus' data studio allows you to create data for your collections. You can then leverage these collections with Astro to generate dynamic and interactive forms for your application.
diff --git a/content/tutorials/2.projects/create-dynamic-pages-for-a-cms-using-directus-and-astro.md b/content/frameworks/03.astro/dynamic-pages.md
similarity index 99%
rename from content/tutorials/2.projects/create-dynamic-pages-for-a-cms-using-directus-and-astro.md
rename to content/frameworks/03.astro/dynamic-pages.md
index 578c6d6ba..006ed1d7f 100644
--- a/content/tutorials/2.projects/create-dynamic-pages-for-a-cms-using-directus-and-astro.md
+++ b/content/frameworks/03.astro/dynamic-pages.md
@@ -1,6 +1,6 @@
---
stableId: 066eaedf-9bf1-4c84-ad9e-5610df82ebf3
-slug: create-dynamic-pages-for-a-cms-using-directus-and-astro
+slug: dynamic-pages
title: Create Dynamic Pages for a CMS using Directus and Astro
technologies:
- astro
@@ -8,6 +8,11 @@ authors:
- name: Carmen Huidobro
title: Developer Educator
description: Learn how to create dynamic pages you can use in your CMS using Directus and Astro.
+stack:
+ - astro
+navigation:
+ title: Dynamic Pages
+content_type: framework-guide
---
Directus' data studio allows you to create data for your collections. You can then leverage these collections with Astro to generate dynamic and interactive forms for your application.
diff --git a/content/tutorials/1.getting-started/implementing-live-preview-in-astro.md b/content/frameworks/03.astro/live-preview.md
similarity index 98%
rename from content/tutorials/1.getting-started/implementing-live-preview-in-astro.md
rename to content/frameworks/03.astro/live-preview.md
index 846318cf2..5e6b85235 100644
--- a/content/tutorials/1.getting-started/implementing-live-preview-in-astro.md
+++ b/content/frameworks/03.astro/live-preview.md
@@ -1,14 +1,19 @@
---
stableId: 84390c7d-4800-4707-9694-4c1d02b56996
-slug: implementing-live-preview-in-astro
+slug: live-preview
title: Implementing Live Preview in Astro
technologies:
- astro
- directus
+stack:
+ - astro
authors:
- name: Carmen Huidobro
title: Developer Educator
description: Learn how to setup Directus live preview with Astro.
+navigation:
+ title: Live Preview
+content_type: framework-guide
---
Live Preview can be enabled in Directus Editor and allows content authors to see their changes directly in the Data Studio. It can be combined with content versioning to preview pre-published content. In this tutorial, you'll learn how to implement Live Preview in your Astro application.
@@ -21,7 +26,7 @@ You will need:
- Fundamental understanding of Astro concepts.
- Optional but recommended: Familiarity with data modeling in Directus.
-If you're just getting started with Astro and Directus, reference our guide on [getting started with Directus and Astro](/tutorials/getting-started/fetch-data-from-directus-with-astro).
+If you're just getting started with Astro and Directus, reference our guide on [getting started with Directus and Astro](/frameworks/astro/data-fetching).
## Set Up Directus
diff --git a/content/tutorials/1.getting-started/implementing-multilingual-content-using-directus-and-astro.md b/content/frameworks/03.astro/multilingual-content.md
similarity index 98%
rename from content/tutorials/1.getting-started/implementing-multilingual-content-using-directus-and-astro.md
rename to content/frameworks/03.astro/multilingual-content.md
index a80f00308..92899d4f8 100644
--- a/content/tutorials/1.getting-started/implementing-multilingual-content-using-directus-and-astro.md
+++ b/content/frameworks/03.astro/multilingual-content.md
@@ -1,13 +1,18 @@
---
stableId: 686e8090-8367-448d-bf57-4680cad619a9
-slug: implementing-multilingual-content-using-directus-and-astro
+slug: multilingual-content
title: Implementing Multilingual Content using Directus and Astro
technologies:
- astro
+stack:
+ - astro
authors:
- name: Carmen Huidobro
title: Developer Educator
description: Learn how to access multilingual Directus content using Astro.
+navigation:
+ title: Multilingual Content
+content_type: framework-guide
---
Directus comes with built-in support for creating multilingual content. In this tutorial, you'll learn how to create multilingual content and access it using your Astro application.
diff --git a/content/tutorials/1.getting-started/rendering-dynamic-blocks-using-astro.md b/content/frameworks/03.astro/reusable-blocks.md
similarity index 97%
rename from content/tutorials/1.getting-started/rendering-dynamic-blocks-using-astro.md
rename to content/frameworks/03.astro/reusable-blocks.md
index def20d084..1770bb153 100644
--- a/content/tutorials/1.getting-started/rendering-dynamic-blocks-using-astro.md
+++ b/content/frameworks/03.astro/reusable-blocks.md
@@ -1,16 +1,21 @@
---
stableId: 00bd225d-3cdf-4f0e-af46-87461c60a1b7
-slug: rendering-dynamic-blocks-using-astro
+slug: reusable-blocks
title: Rendering Dynamic Blocks Using Astro
technologies:
- astro
+stack:
+ - astro
authors:
- name: Carmen Huidobro
title: Developer Educator
description: Learn how to render dynamic blocks using Astro.
+navigation:
+ title: Reusable Blocks
+content_type: framework-guide
---
-[Having used Directus as a Headless CMS to create individual blocks that can be re-used on different pages](https://directus.io/docs/tutorials/getting-started/create-reusable-blocks-with-many-to-any-relationships), let's integrate them into our Astro website.
+[Having used Directus as a Headless CMS to create individual blocks that can be re-used on different pages](https://directus.io/docs/tutorials/projects/create-reusable-blocks-with-many-to-any-relationships), let's integrate them into our Astro website.
## Before You Start
diff --git a/content/tutorials/1.getting-started/using-authentication-in-sveltekit.md b/content/frameworks/04.sveltekit/authentication.md
similarity index 99%
rename from content/tutorials/1.getting-started/using-authentication-in-sveltekit.md
rename to content/frameworks/04.sveltekit/authentication.md
index f2b0f8939..bc6ea56fa 100644
--- a/content/tutorials/1.getting-started/using-authentication-in-sveltekit.md
+++ b/content/frameworks/04.sveltekit/authentication.md
@@ -1,13 +1,18 @@
---
stableId: aec92b93-93da-48ed-aa4a-2fcbcf5f5d72
-slug: using-authentication-in-sveltekit
+slug: authentication
title: Using Authentication in SvelteKit
technologies:
- sveltekit
+stack:
+ - sveltekit
authors:
- name: Temitope Oyedelde
title: Guest Author
description: Learn how to setup Directus authentication with SvelteKit.
+navigation:
+ title: Authentication
+content_type: framework-guide
---
## Introduction
diff --git a/content/tutorials/2.projects/create-a-cms-using-directus-and-sveltekit.md b/content/frameworks/04.sveltekit/build-a-cms.md
similarity index 99%
rename from content/tutorials/2.projects/create-a-cms-using-directus-and-sveltekit.md
rename to content/frameworks/04.sveltekit/build-a-cms.md
index 87dfca38a..575fd06e1 100644
--- a/content/tutorials/2.projects/create-a-cms-using-directus-and-sveltekit.md
+++ b/content/frameworks/04.sveltekit/build-a-cms.md
@@ -1,7 +1,7 @@
---
stableId: 26739e2b-e903-4196-950c-6452d04a3420
id: 11a1c86f-36bf-4dd5-8bce-7eed75451514
-slug: create-a-cms-using-directus-and-sveltekit
+slug: build-a-cms
title: Create a CMS using Directus and SvelteKit
technologies:
- sveltekit
@@ -9,6 +9,11 @@ authors:
- name: Temitope Oyedelde
title: Guest Author
description: Learn how to create a CMS using Directus and SvelteKit.
+stack:
+ - sveltekit
+navigation:
+ title: Build a CMS
+content_type: framework-guide
---
Directus provides a headless CMS, which when combined with SvelteKit will streamline content management. This post covers how to connect them to create a flexible, modern content management system.
diff --git a/content/tutorials/1.getting-started/fetch-data-from-directus-with-sveltekit.md b/content/frameworks/04.sveltekit/data-fetching.md
similarity index 99%
rename from content/tutorials/1.getting-started/fetch-data-from-directus-with-sveltekit.md
rename to content/frameworks/04.sveltekit/data-fetching.md
index a5b4b7075..6b4b11ab6 100644
--- a/content/tutorials/1.getting-started/fetch-data-from-directus-with-sveltekit.md
+++ b/content/frameworks/04.sveltekit/data-fetching.md
@@ -1,14 +1,19 @@
---
stableId: 79aa288a-097a-4a7b-bc32-80ee032718aa
id: 9f57fe88-ece0-42db-ad76-9e811989d4a8
-slug: fetch-data-from-directus-with-sveltekit
+slug: data-fetching
title: Fetch Data from Directus with SvelteKit
technologies:
- sveltekit
+stack:
+ - sveltekit
authors:
- name: Eike Thies
title: Guest Author
description: Learn how to integrate Directus in your SvelteKit web application.
+navigation:
+ title: Data Fetching
+content_type: framework-guide
---
[SvelteKit](https://kit.svelte.dev/) is a popular Companion JavaScript Framework to Svelte.js - focusing on creating performant web applications. In this tutorial, you will learn how to build a website using Directus as a CMS. You will store, retrieve, and use global metadata such as the site title, create new pages dynamically based on Directus items, and build a blog.
diff --git a/content/tutorials/2.projects/build-forms-dynamically-using-directus-and-sveltekit.md b/content/frameworks/04.sveltekit/dynamic-forms.md
similarity index 99%
rename from content/tutorials/2.projects/build-forms-dynamically-using-directus-and-sveltekit.md
rename to content/frameworks/04.sveltekit/dynamic-forms.md
index de6b43590..26efea5ea 100644
--- a/content/tutorials/2.projects/build-forms-dynamically-using-directus-and-sveltekit.md
+++ b/content/frameworks/04.sveltekit/dynamic-forms.md
@@ -1,6 +1,6 @@
---
stableId: 20421ddd-2c84-4920-8f22-34b1e36b0dda
-slug: build-forms-dynamically-using-directus-and-sveltekit
+slug: dynamic-forms
title: Build Forms Dynamically using Directus and SvelteKit
technologies:
- sveltekit
@@ -8,6 +8,11 @@ authors:
- name: Temitope Oyedelde
title: Guest Author
description: Learn how to setup Directus fields with SvelteKit.
+stack:
+ - sveltekit
+navigation:
+ title: Dynamic Forms
+content_type: framework-guide
---
Directus' data studio allows you to create data for your collections. You can then leverage these collections with SvelteKit to generate dynamic and interactive forms for your application.
diff --git a/content/tutorials/2.projects/create-dynamic-pages-for-a-cms-using-directus-and-sveltekit.md b/content/frameworks/04.sveltekit/dynamic-pages.md
similarity index 99%
rename from content/tutorials/2.projects/create-dynamic-pages-for-a-cms-using-directus-and-sveltekit.md
rename to content/frameworks/04.sveltekit/dynamic-pages.md
index 5fe2c2d96..b69646c70 100644
--- a/content/tutorials/2.projects/create-dynamic-pages-for-a-cms-using-directus-and-sveltekit.md
+++ b/content/frameworks/04.sveltekit/dynamic-pages.md
@@ -1,7 +1,7 @@
---
stableId: e98986da-9283-470c-8b2d-61dbdf8838eb
id: 11a1c86f-36bf-4dd5-8bce-7eed75451514
-slug: create-dynamic-pages-for-a-cms-using-directus-and-sveltekit
+slug: dynamic-pages
title: Create Dynamic Pages for a CMS using Directus and SvelteKit
technologies:
- sveltekit
@@ -9,6 +9,11 @@ authors:
- name: Temitope Oyedelde
title: Guest Author
description: Learn how to create dynamic pages you can use in your CMS using Directus and SvelteKit.
+stack:
+ - sveltekit
+navigation:
+ title: Dynamic Pages
+content_type: framework-guide
---
Directus provides a headless CMS, which, when combined with SvelteKit, will streamline content management. This post covers how to combine the two to create dynamic pages for a content management system.
diff --git a/content/tutorials/1.getting-started/submit-forms-using-directus-and-sveltekit.md b/content/frameworks/04.sveltekit/forms.md
similarity index 98%
rename from content/tutorials/1.getting-started/submit-forms-using-directus-and-sveltekit.md
rename to content/frameworks/04.sveltekit/forms.md
index c4f785fc5..bd5411591 100644
--- a/content/tutorials/1.getting-started/submit-forms-using-directus-and-sveltekit.md
+++ b/content/frameworks/04.sveltekit/forms.md
@@ -1,13 +1,18 @@
---
stableId: 0a7bab8d-6066-47c8-abb4-ca27149fd1f9
-slug: submit-forms-using-directus-and-sveltekit
+slug: forms
title: Submit Forms Using Directus and SvelteKit
technologies:
- sveltekit
+stack:
+ - sveltekit
authors:
- name: Temitope Oyedelde
title: Guest Author
description: Learn how to submit forms using Directus and SvelteKit.
+navigation:
+ title: Form Submissions
+content_type: framework-guide
---
Directus provides a headless CMS, which when combined with SvelteKit will streamline content management. This post covers how to connect them to create and submit forms.
diff --git a/content/tutorials/1.getting-started/implement-multilingual-content-with-directus-and-svelte-kit.md b/content/frameworks/04.sveltekit/internationalization.md
similarity index 98%
rename from content/tutorials/1.getting-started/implement-multilingual-content-with-directus-and-svelte-kit.md
rename to content/frameworks/04.sveltekit/internationalization.md
index 8ea9eca92..6e1d2c933 100644
--- a/content/tutorials/1.getting-started/implement-multilingual-content-with-directus-and-svelte-kit.md
+++ b/content/frameworks/04.sveltekit/internationalization.md
@@ -1,14 +1,19 @@
---
stableId: 598819cc-3a8b-4a3d-888e-7a661b832b2d
id: 333eb942-b124-4476-ac04-bac9cb2dcca2
-slug: implement-multilingual-content-with-directus-and-svelte-kit
+slug: internationalization
title: Implement Multilingual Content with Directus and SvelteKit
technologies:
- sveltekit
+stack:
+ - sveltekit
authors:
- name: Ekekenta Clinton
title: Guest Author
description: Learn how to handle internationalization in your SvelteKit application.
+navigation:
+ title: Internationalization
+content_type: framework-guide
---
## Before You Start
diff --git a/content/tutorials/1.getting-started/implementing-live-preview-in-sveltekit.md b/content/frameworks/04.sveltekit/live-preview.md
similarity index 99%
rename from content/tutorials/1.getting-started/implementing-live-preview-in-sveltekit.md
rename to content/frameworks/04.sveltekit/live-preview.md
index b6bc4741d..3e7eaae15 100644
--- a/content/tutorials/1.getting-started/implementing-live-preview-in-sveltekit.md
+++ b/content/frameworks/04.sveltekit/live-preview.md
@@ -1,14 +1,19 @@
---
stableId: 52e8ca43-3013-47a9-a7fd-adc13acbef55
-slug: implementing-live-preview-in-sveltekit
+slug: live-preview
title: Implementing Live Preview in SvelteKit
technologies:
- sveltekit
- directus
+stack:
+ - sveltekit
authors:
- name: Temitope Oyedelde
title: Guest Author
description: Learn how to setup Directus live preview with SvelteKit.
+navigation:
+ title: Live Preview
+content_type: framework-guide
---
Live Preview can be enabled in Directus Editor and allows content authors to see their changes directly in the Data Studio. It can be combined with content versioning to preview pre-published content. In this tutorial, you'll learn how to implement Live Preview in your SvelteKit application.
diff --git a/content/tutorials/1.getting-started/implementing-multilingual-content-using-directus-and-sveltekit.md b/content/frameworks/04.sveltekit/multilingual-content.md
similarity index 98%
rename from content/tutorials/1.getting-started/implementing-multilingual-content-using-directus-and-sveltekit.md
rename to content/frameworks/04.sveltekit/multilingual-content.md
index 6b6c776bb..d4b0f6448 100644
--- a/content/tutorials/1.getting-started/implementing-multilingual-content-using-directus-and-sveltekit.md
+++ b/content/frameworks/04.sveltekit/multilingual-content.md
@@ -1,13 +1,18 @@
---
stableId: cb74a8b6-abd5-4526-9028-42f58f1452ab
-slug: implementing-multilingual-content-using-directus-and-sveltekit
+slug: multilingual-content
title: Implementing Multilingual Content using Directus and SvelteKit
technologies:
- sveltekit
+stack:
+ - sveltekit
authors:
- name: Temitope Oyedelde
title: Guest Author
description: Learn how to access multilingual Directus content using SvelteKit.
+navigation:
+ title: Multilingual Content
+content_type: framework-guide
---
Directus comes with built-in support for creating multilingual content. In this post, you'll learn how to create multilingual content and access it using your SvelteKit application.
diff --git a/content/tutorials/1.getting-started/rendering-dynamic-blocks-using-sveltekit.md b/content/frameworks/04.sveltekit/reusable-blocks.md
similarity index 97%
rename from content/tutorials/1.getting-started/rendering-dynamic-blocks-using-sveltekit.md
rename to content/frameworks/04.sveltekit/reusable-blocks.md
index 521f760b3..73cadc7f9 100644
--- a/content/tutorials/1.getting-started/rendering-dynamic-blocks-using-sveltekit.md
+++ b/content/frameworks/04.sveltekit/reusable-blocks.md
@@ -1,16 +1,21 @@
---
stableId: 2c9200ec-ee4a-4bdd-a534-8cf4bb104f86
-slug: rendering-dynamic-blocks-using-sveltekit
+slug: reusable-blocks
title: Rendering Dynamic Blocks Using SvelteKit
technologies:
- sveltekit
+stack:
+ - sveltekit
authors:
- name: Temitope Oyedelde
title: Guest Author
description: Learn how to render dynamic blocks using SvelteKit.
+navigation:
+ title: Reusable Blocks
+content_type: framework-guide
---
-[Having used Directus as a Headless CMS to create individual blocks that can be re-used on different pages](https://directus.io/docs/tutorials/getting-started/create-reusable-blocks-with-many-to-any-relationships), let's integrate them into our Svelte website.
+[Having used Directus as a Headless CMS to create individual blocks that can be re-used on different pages](https://directus.io/docs/tutorials/projects/create-reusable-blocks-with-many-to-any-relationships), let's integrate them into our Svelte website.
## Before You Start
diff --git a/content/tutorials/1.getting-started/integrating-the-directus-visual-editor-with-sveltekit.md b/content/frameworks/04.sveltekit/visual-editor.md
similarity index 97%
rename from content/tutorials/1.getting-started/integrating-the-directus-visual-editor-with-sveltekit.md
rename to content/frameworks/04.sveltekit/visual-editor.md
index 60a807025..0525d0a7c 100644
--- a/content/tutorials/1.getting-started/integrating-the-directus-visual-editor-with-sveltekit.md
+++ b/content/frameworks/04.sveltekit/visual-editor.md
@@ -1,13 +1,18 @@
---
stableId: d325a09c-8e8a-45ec-b820-374130375d45
-slug: integrating-the-directus-visual-editor-with-sveltekit
+slug: visual-editor
title: Integrating the Directus Visual Editor with SvelteKit
technologies:
- sveltekit
+stack:
+ - sveltekit
authors:
- name: Temitope Oyedelde
title: Guest Author
description: Learn how to integrate the Directus Visual Editor with SvelteKit.
+navigation:
+ title: Visual Editor
+content_type: framework-guide
---
The Directus Visual Editor module allows you to edit your content live on your site. This article shows you how to integrate it with an existing CMS setup using SvelteKit.
@@ -48,7 +53,7 @@ Choose Community templates, and select the CMS template. Fill in your Directus U
### Initialize Your Project
-Follow the instructions for setting up a SvelteKit project in the [Create a CMS using Directus and SvelteKit](https://directus.io/docs/tutorials/projects/create-a-cms-using-directus-and-sveltekit). Complete the remainder of the steps in this article to create a SvelteKit project that is ready to integrate with the Directus Visual Editor.
+Follow the instructions for setting up a SvelteKit project in the [Create a CMS using Directus and SvelteKit](https://directus.io/docs/frameworks/sveltekit/build-a-cms). Complete the remainder of the steps in this article to create a SvelteKit project that is ready to integrate with the Directus Visual Editor.
You can get the full code for this article [here](https://github.com/oyedeletemitope/build_a_dynamic_cms_directus) to skip the setup and go straight to the integration.
diff --git a/content/tutorials/1.getting-started/using-authentication-in-react.md b/content/frameworks/05.react/authentication.md
similarity index 99%
rename from content/tutorials/1.getting-started/using-authentication-in-react.md
rename to content/frameworks/05.react/authentication.md
index 18a10ec71..1d14f6fc0 100644
--- a/content/tutorials/1.getting-started/using-authentication-in-react.md
+++ b/content/frameworks/05.react/authentication.md
@@ -1,13 +1,18 @@
---
stableId: ad274d15-23f8-46c6-ac51-b278a57b5cef
-slug: using-authentication-in-react
+slug: authentication
title: Using Authentication in React
technologies:
- react
+stack:
+ - react
authors:
- name: Kumar Harsh
title: Guest Author
description: Learn how to setup Directus authentication with React.
+navigation:
+ title: Authentication
+content_type: framework-guide
---
Authentication is a critical part of any modern web application, ensuring that users can securely access their data and perform authorized actions. In this tutorial, you will learn how to implement authentication in your React application using Directus' built-in authentication system.
diff --git a/content/tutorials/1.getting-started/implementing-live-preview-in-react.md b/content/frameworks/05.react/live-preview.md
similarity index 99%
rename from content/tutorials/1.getting-started/implementing-live-preview-in-react.md
rename to content/frameworks/05.react/live-preview.md
index 4cca67a60..a602e5300 100644
--- a/content/tutorials/1.getting-started/implementing-live-preview-in-react.md
+++ b/content/frameworks/05.react/live-preview.md
@@ -1,13 +1,18 @@
---
stableId: 71d9cf45-9974-4aea-8a91-f1c5a8f31d0d
-slug: implementing-live-preview-in-react
+slug: live-preview
title: Implementing Live Preview in React
technologies:
- react
+stack:
+ - react
authors:
- name: Kumar Harsh
title: Guest Author
description: Learn how to setup Directus live preview with React.
+navigation:
+ title: Live Preview
+content_type: framework-guide
---
Live Preview can be enabled in Directus Editor and allows content authors to see their changes directly in the Data Studio. It can be combined with content versioning to preview pre-published content. In this tutorial, you'll learn how to implement Live Preview in your React application.
diff --git a/content/tutorials/1.getting-started/fetch-data-from-directus-with-angular.md b/content/frameworks/06.angular/data-fetching.md
similarity index 99%
rename from content/tutorials/1.getting-started/fetch-data-from-directus-with-angular.md
rename to content/frameworks/06.angular/data-fetching.md
index 2c01cb722..a1d50d878 100644
--- a/content/tutorials/1.getting-started/fetch-data-from-directus-with-angular.md
+++ b/content/frameworks/06.angular/data-fetching.md
@@ -1,14 +1,19 @@
---
stableId: 8f85cf62-5bf2-43e3-ac78-0d21b2c12a20
id: 01d87344-02d8-45fc-a6e3-f13777cdab83
-slug: fetch-data-from-directus-with-angular
+slug: data-fetching
title: Fetch Data from Directus with Angular
technologies:
- angular
+stack:
+ - angular
authors:
- name: David Mbochi
title: Guest Author
description: Learn how to integrate Directus in your Angular web application.
+navigation:
+ title: Data Fetching
+content_type: framework-guide
---
[Angular](https://angular.dev/) is a popular front-end web framework. In this tutorial, you will use the framework to implement the front-end for the Directus headless CMS. You will implement a blog that loads blog posts dynamically and also serves global metadata.
diff --git a/content/tutorials/1.getting-started/fetch-data-from-directus-with-laravel.md b/content/frameworks/07.laravel/data-fetching.md
similarity index 99%
rename from content/tutorials/1.getting-started/fetch-data-from-directus-with-laravel.md
rename to content/frameworks/07.laravel/data-fetching.md
index 9b0bd8d73..d6371ff52 100644
--- a/content/tutorials/1.getting-started/fetch-data-from-directus-with-laravel.md
+++ b/content/frameworks/07.laravel/data-fetching.md
@@ -1,14 +1,19 @@
---
stableId: 763167a6-a7a1-4c14-9056-19a86f3ac9be
id: 9a8f3c14-f969-4d2a-9b00-5b22f5dcdc33
-slug: fetch-data-from-directus-with-laravel
+slug: data-fetching
title: Fetch Data from Directus with Laravel
technologies:
+stack:
+ - laravel
- laravel
authors:
- name: Ekekenta Clinton
title: Guest Author
description: Learn how to integrate Directus in your Laravel web application.
+navigation:
+ title: Data Fetching
+content_type: framework-guide
---
In this tutorial, you will learn how to build a website using Directus as a Headless CMS. You will store, retrieve, and use global metadata such as the site title, create new pages dynamically based on Directus items, and build a blog.
diff --git a/content/tutorials/1.getting-started/fetch-data-from-directus-with-django.md b/content/frameworks/08.django/data-fetching.md
similarity index 99%
rename from content/tutorials/1.getting-started/fetch-data-from-directus-with-django.md
rename to content/frameworks/08.django/data-fetching.md
index ed39887b6..f8367b8d4 100644
--- a/content/tutorials/1.getting-started/fetch-data-from-directus-with-django.md
+++ b/content/frameworks/08.django/data-fetching.md
@@ -1,14 +1,19 @@
---
stableId: 8d3c6deb-ce99-4030-b49a-af5d3ab49a21
id: ab19694b-b7e5-44d1-994c-f7a5e5025829
-slug: fetch-data-from-directus-with-django
+slug: data-fetching
title: Fetch Data from Directus with Django
technologies:
- django
+stack:
+ - django
authors:
- name: Omu Inetimi
title: Guest Author
description: Learn how to integrate Directus in your Django web application.
+navigation:
+ title: Data Fetching
+content_type: framework-guide
---
Django is a popular Python framework known for its "battery included" philosophy. In this tutorial, you will learn how to integrate Django with Directus, and build an application that uses the Django templating engine to display data from the API.
diff --git a/content/tutorials/1.getting-started/fetch-data-from-directus-with-flask.md b/content/frameworks/09.flask/data-fetching.md
similarity index 98%
rename from content/tutorials/1.getting-started/fetch-data-from-directus-with-flask.md
rename to content/frameworks/09.flask/data-fetching.md
index 5a4f5571e..081aa4581 100644
--- a/content/tutorials/1.getting-started/fetch-data-from-directus-with-flask.md
+++ b/content/frameworks/09.flask/data-fetching.md
@@ -1,14 +1,19 @@
---
stableId: 048a52f0-fd73-4ee3-b089-e6ec289d64b1
id: c8562b3b-fbe0-4fd5-ade1-2d9a9e986f6d
-slug: fetch-data-from-directus-with-flask
+slug: data-fetching
title: Fetch Data from Directus with Flask
technologies:
- flask
+stack:
+ - flask
authors:
- name: Guilherme Souza
title: Guest Author
description: Learn how to integrate Directus in your Flask web application.
+navigation:
+ title: Data Fetching
+content_type: framework-guide
---
[Flask](https://flask.palletsprojects.com/en/3.0.x/) is a minimal Python framework used to build web applications. In this tutorial, you will store, retrieve, and use global metadata, pages, and posts based on a Directus project.
@@ -358,6 +363,6 @@ Through this guide, you have set up a Flask project, created a Directus module,
If you want to change what is user-accessible, consider setting up more restrictive roles and accessing only valid data at build-time.
-If you want to build more complex dynamic pages made out of reusable components, [check out our recipe on doing just this](/tutorials/getting-started/create-reusable-blocks-with-many-to-any-relationships).
+If you want to build more complex dynamic pages made out of reusable components, [check out our recipe on doing just this](/tutorials/projects/create-reusable-blocks-with-many-to-any-relationships).
If you want to see the code for this project, you can find it [on GitHub](https://github.com/directus-labs/blog-example-flask).
diff --git a/content/tutorials/1.getting-started/fetch-data-from-directus-with-spring-boot.md b/content/frameworks/10.spring-boot/data-fetching.md
similarity index 98%
rename from content/tutorials/1.getting-started/fetch-data-from-directus-with-spring-boot.md
rename to content/frameworks/10.spring-boot/data-fetching.md
index bccc8b37e..e8079068f 100644
--- a/content/tutorials/1.getting-started/fetch-data-from-directus-with-spring-boot.md
+++ b/content/frameworks/10.spring-boot/data-fetching.md
@@ -1,14 +1,19 @@
---
stableId: 5073c758-c304-4786-81f8-4911ad90558c
id: 501503e1-3830-494c-a87a-e3a0706b28de
-slug: fetch-data-from-directus-with-spring-boot
+slug: data-fetching
title: Fetch Data from Directus with Spring Boot
technologies:
- - springboot
+ - spring-boot
+stack:
+ - spring-boot
authors:
- name: David Mbochi
title: Guest Author
description: Learn how to integrate Directus in your Spring Boot web application.
+navigation:
+ title: Data Fetching
+content_type: framework-guide
---
This tutorial will show you how to integrate Spring Boot in Directus. At the end of this tutorial, you will have an application that uses Thymeleaf templating engine to display the data from the Directus API.
diff --git a/content/tutorials/1.getting-started/fetch-data-from-directus-with-flutter.md b/content/frameworks/11.flutter/data-fetching.md
similarity index 99%
rename from content/tutorials/1.getting-started/fetch-data-from-directus-with-flutter.md
rename to content/frameworks/11.flutter/data-fetching.md
index 51f1cc9a1..a8b0960af 100644
--- a/content/tutorials/1.getting-started/fetch-data-from-directus-with-flutter.md
+++ b/content/frameworks/11.flutter/data-fetching.md
@@ -1,14 +1,19 @@
---
stableId: 3f1dbfa7-989b-46b3-b714-b72b3e7b3cf9
id: 28299d88-04e5-4cb8-83b1-3916696088e3
-slug: fetch-data-from-directus-with-flutter
+slug: data-fetching
title: Fetch Data from Directus with Flutter
authors:
- name: Clara Ekekenta
title: Guest Author
technologies:
- flutter
+stack:
+ - flutter
description: Learn how to integrate Directus in your Flutter app with Dart.
+navigation:
+ title: Data Fetching
+content_type: framework-guide
---
## Before You Start
You will need:
diff --git a/content/tutorials/1.getting-started/implement-directus-auth-with-ios.md b/content/frameworks/12.swift/authentication.md
similarity index 99%
rename from content/tutorials/1.getting-started/implement-directus-auth-with-ios.md
rename to content/frameworks/12.swift/authentication.md
index c28cbb15d..6074ff5c1 100644
--- a/content/tutorials/1.getting-started/implement-directus-auth-with-ios.md
+++ b/content/frameworks/12.swift/authentication.md
@@ -1,14 +1,19 @@
---
stableId: e8a2fade-e70e-4f5d-9b6c-c4a51dee08fa
id: b16741fd-aa1d-48ea-8856-df9a9ae9e0d6
-slug: implement-directus-auth-with-ios
+slug: authentication
title: Implement Directus Auth with iOS
technologies:
+stack:
+ - swift
- swift
authors:
- name: Harshpal Bhirth
title: Guest Author
description: Learn how to register, login, and protect content in your iOS app.
+navigation:
+ title: Authentication
+content_type: framework-guide
---
In this tutorial, you will learn how to configure an iOS project with Directus Auth. You'll cover registering, logging in, logging out, viewing all posts from all users, creating a post, and editing and deleting posts from your user account.
diff --git a/content/tutorials/1.getting-started/fetch-data-from-directus-in-ios-with-swift.md b/content/frameworks/12.swift/data-fetching.md
similarity index 98%
rename from content/tutorials/1.getting-started/fetch-data-from-directus-in-ios-with-swift.md
rename to content/frameworks/12.swift/data-fetching.md
index 206eab825..54b1d665f 100644
--- a/content/tutorials/1.getting-started/fetch-data-from-directus-in-ios-with-swift.md
+++ b/content/frameworks/12.swift/data-fetching.md
@@ -1,14 +1,19 @@
---
stableId: 905f461b-e845-4a80-aa47-f458f81171dd
id: fbb96512-b46a-4a0c-bb39-b7d11ec0dc7f
-slug: fetch-data-from-directus-in-ios-with-swift
+slug: data-fetching
title: Fetch Data from Directus in iOS with Swift
technologies:
- swift
+stack:
+ - swift
authors:
- name: Harshpal Bhirth
title: Guest Author
description: Learn how to integrate Directus in your iOS app with Swift.
+navigation:
+ title: Data Fetching
+content_type: framework-guide
---
In this tutorial, you will learn how to configure an iOS project to fetch and showcase posts in your SwiftUI-based app.
diff --git a/content/tutorials/1.getting-started/fetch-data-from-directus-in-android-with-kotlin.md b/content/frameworks/13.kotlin/data-fetching.md
similarity index 99%
rename from content/tutorials/1.getting-started/fetch-data-from-directus-in-android-with-kotlin.md
rename to content/frameworks/13.kotlin/data-fetching.md
index 8437cf7cd..99b6d21c4 100644
--- a/content/tutorials/1.getting-started/fetch-data-from-directus-in-android-with-kotlin.md
+++ b/content/frameworks/13.kotlin/data-fetching.md
@@ -1,14 +1,19 @@
---
stableId: 4de99c8f-7d3b-4ff5-b586-c2399a0da15b
id: 3444d6c8-f336-4d0b-aa02-bc665f4ad3b5
-slug: fetch-data-from-directus-in-android-with-kotlin
+slug: data-fetching
title: Fetch Data from Directus in Android with Kotlin
technologies:
- kotlin
+stack:
+ - kotlin
authors:
- name: Ekekenta Clinton
title: Guest Author
description: Learn how to integrate Directus in your Android app with Kotlin.
+navigation:
+ title: Data Fetching
+content_type: framework-guide
---
In this tutorial, you will learn how to set up an Android project with Kotlin and Directus. We'll cover initializing the project, creating a helper library for the Directus SDK, setting up global configurations, and creating dynamic pages, including a blog listing and a blog single view.
diff --git a/content/tutorials/1.getting-started/fetch-data-from-directus-with-eleventy-3.md b/content/frameworks/14.eleventy/data-fetching.md
similarity index 98%
rename from content/tutorials/1.getting-started/fetch-data-from-directus-with-eleventy-3.md
rename to content/frameworks/14.eleventy/data-fetching.md
index 5e66dd304..e11e007b4 100644
--- a/content/tutorials/1.getting-started/fetch-data-from-directus-with-eleventy-3.md
+++ b/content/frameworks/14.eleventy/data-fetching.md
@@ -1,14 +1,19 @@
---
stableId: 0dde8554-cbf3-4010-a48e-84b511aa1223
id: b847e493-5a35-49e1-80b1-3dc2657a0f7d
-slug: fetch-data-from-directus-with-eleventy-3
+slug: data-fetching
technologies:
- - 11ty
+ - eleventy
+stack:
+ - eleventy
title: Fetch Data from Directus with Eleventy 3
authors:
- name: Kevin Lewis
title: Director, Developer Experience
description: Learn how to integrate Directus in your 11ty web application.
+navigation:
+ title: Data Fetching
+content_type: framework-guide
---
Eleventy (sometimes referred to 11ty) is a lightweight and unopinionated static site generator. You can use any templating language, and it ships with zero client-side JavaScript by default. In this guide, you will learn how to build a website with Directus as a Headless CMS.
diff --git a/content/tutorials/1.getting-started/fetch-data-from-directus-with-solidstart.md b/content/frameworks/15.solidstart/data-fetching.md
similarity index 99%
rename from content/tutorials/1.getting-started/fetch-data-from-directus-with-solidstart.md
rename to content/frameworks/15.solidstart/data-fetching.md
index 4b4f3eaec..274f4ad8c 100644
--- a/content/tutorials/1.getting-started/fetch-data-from-directus-with-solidstart.md
+++ b/content/frameworks/15.solidstart/data-fetching.md
@@ -1,14 +1,19 @@
---
stableId: 80e9aa99-c19a-4db6-bd49-66e5ce987d6e
id: 3da7bf05-c74c-4e24-bf83-1d2598b89004
-slug: fetch-data-from-directus-with-solidstart
+slug: data-fetching
title: Fetch Data from Directus with SolidStart
technologies:
- solidstart
+stack:
+ - solidstart
authors:
- name: Atila Fassina
title: Guest Author
description: Learn how to integrate Directus in your SolidStart web application.
+navigation:
+ title: Data Fetching
+content_type: framework-guide
---
[SolidStart](https://start.solidjs.com) a meta-framework built around [SolidJS](https://solidjs.com) - SolidStart is a framework aiming to allow people and teams to built high-end applications without being too opinionated. In this tutorial, you will learn how to build a website using Directus as a CMS. You will store, retrieve, and use global metadata such as the site title, create new pages dynamically based on Directus items, and build a blog.
diff --git a/content/guides/01.data-model/1.collections.md b/content/guides/01.data-model/1.collections.md
index 9ebf9b5dc..19cd1ed73 100644
--- a/content/guides/01.data-model/1.collections.md
+++ b/content/guides/01.data-model/1.collections.md
@@ -79,8 +79,8 @@ Live preview is used on the [item page](/guides/content/editor) and allows for y
You can use item field values to construct the URL used by the live preview, including unique identifiers and content version, allowing for previewing content versions before promoting them to the main version.
-::callout{icon="material-symbols:school-outline" color="secondary" to="/tutorials/getting-started"}
-Read tutorials on implementing live preview.
+::callout{icon="material-symbols:school-outline" color="secondary" to="/guides/content/live-preview"}
+Read the Live Preview guide.
::
### Accountability
diff --git a/content/guides/01.data-model/3.interfaces.md b/content/guides/01.data-model/3.interfaces.md
index 924b3b8b4..f543f0320 100644
--- a/content/guides/01.data-model/3.interfaces.md
+++ b/content/guides/01.data-model/3.interfaces.md
@@ -404,7 +404,7 @@ When this field is added to a collection, Directus will create a Many to Many (M
| Related Collections | Which collections should items be selected from. |
| Allow Duplicates | Allow users to add the same Item multiple times. |
-::callout{icon="material-symbols:school-outline" color="secondary" to="/tutorials/getting-started/create-reusable-blocks-with-many-to-any-relationships"}
+::callout{icon="material-symbols:school-outline" color="secondary" to="/tutorials/projects/create-reusable-blocks-with-many-to-any-relationships"}
Read our tutorial on using a Builder (M2A) to create reusable page components.
::
diff --git a/content/guides/01.data-model/4.relationships.md b/content/guides/01.data-model/4.relationships.md
index 0cca6511b..c9004a3e5 100644
--- a/content/guides/01.data-model/4.relationships.md
+++ b/content/guides/01.data-model/4.relationships.md
@@ -65,7 +65,7 @@ In a M2A relationship, one collection can be related to any item in any collecti
When you configure a M2A in Directus, a M2A `Alias` field is created as well as a junction collection. The junction collection in a M2A relationship also stores the collection name for related collections.
-::callout{icon="material-symbols:school-outline" color="secondary" to="/tutorials/getting-started/create-reusable-blocks-with-many-to-any-relationships"}
+::callout{icon="material-symbols:school-outline" color="secondary" to="/tutorials/projects/create-reusable-blocks-with-many-to-any-relationships"}
Read our tutorial on using a Builder (M2A) to create reusable page components.
::
diff --git a/content/guides/02.content/5.live-preview.md b/content/guides/02.content/5.live-preview.md
index d37614c94..c60b61514 100644
--- a/content/guides/02.content/5.live-preview.md
+++ b/content/guides/02.content/5.live-preview.md
@@ -93,8 +93,8 @@ When you save changes, the item refreshes automatically.
## Reference Tutorials
-- [Implementing Live Preview in Astro](/tutorials/getting-started/implementing-live-preview-in-astro)
-- [Implementing Live Preview in Next.js](/tutorials/getting-started/implementing-live-preview-in-next-js)
-- [Implementing Live Preview in Nuxt](/tutorials/getting-started/implementing-live-preview-in-nuxt)
-- [Implementing Live Preview in React](/tutorials/getting-started/implementing-live-preview-in-react)
-- [Implementing Live Preview in SvelteKit](/tutorials/getting-started/implementing-live-preview-in-sveltekit)
+- [Implementing Live Preview in Astro](/frameworks/astro/live-preview)
+- [Implementing Live Preview in Next.js](/frameworks/nextjs/live-preview)
+- [Implementing Live Preview in Nuxt](/frameworks/nuxt/live-preview)
+- [Implementing Live Preview in React](/frameworks/react/live-preview)
+- [Implementing Live Preview in SvelteKit](/frameworks/sveltekit/live-preview)
diff --git a/content/index.md b/content/index.md
index 51ab93ed4..972ebfdc4 100644
--- a/content/index.md
+++ b/content/index.md
@@ -124,7 +124,7 @@ navigation: false
title: Integrate Your Frontend
description: Learn how to build a website using Directus as a Headless CMS using various frameworks.
icon: material-symbols:web
- to: '/tutorials/getting-started'
+ to: '/frameworks'
---
:::
diff --git a/content/tutorials/1.getting-started/index.md b/content/tutorials/1.getting-started/index.md
deleted file mode 100644
index 751e1b665..000000000
--- a/content/tutorials/1.getting-started/index.md
+++ /dev/null
@@ -1,4 +0,0 @@
----
-stableId: adf560fd-b888-4708-941a-4ef6b0e1578b
-title: Getting Started
----
diff --git a/content/tutorials/2.projects/build-a-multi-user-chat-with-javascript-and-directus-realtime.md b/content/tutorials/2.projects/build-a-multi-user-chat-with-javascript-and-directus-realtime.md
index e53d16feb..fda5dbb30 100644
--- a/content/tutorials/2.projects/build-a-multi-user-chat-with-javascript-and-directus-realtime.md
+++ b/content/tutorials/2.projects/build-a-multi-user-chat-with-javascript-and-directus-realtime.md
@@ -4,7 +4,7 @@ id: 1fdbc354-3c98-458e-97f6-587eccab6c16
slug: build-a-multi-user-chat-with-javascript-and-directus-realtime
title: Build a Multi-User Chat with JavaScript and Directus Realtime
technologies:
- - react
+ - vanilla
authors:
- name: Kevin Lewis
title: Director, Developer Experience
diff --git a/content/tutorials/2.projects/build-a-realtime-chat-app-using-directus-and-astro.md b/content/tutorials/2.projects/build-a-realtime-chat-app-using-directus-and-astro.md
index 2a6d87dc5..22cc4c8b0 100644
--- a/content/tutorials/2.projects/build-a-realtime-chat-app-using-directus-and-astro.md
+++ b/content/tutorials/2.projects/build-a-realtime-chat-app-using-directus-and-astro.md
@@ -1,6 +1,6 @@
---
stableId: 70f8292e-a9a7-44a7-8409-8861b0991ab8
-slug: build-a-realtime-chat-app-with-directus-and-astro
+slug: build-a-realtime-chat-app-using-directus-and-astro
title: Build a Realtime Chat App with Directus and Astro
technologies:
- astro
diff --git a/content/tutorials/2.projects/build-a-realtime-chat-app-using-directus-and-nuxt.md b/content/tutorials/2.projects/build-a-realtime-chat-app-using-directus-and-nuxt.md
index 0c60dec9c..72e35c03c 100644
--- a/content/tutorials/2.projects/build-a-realtime-chat-app-using-directus-and-nuxt.md
+++ b/content/tutorials/2.projects/build-a-realtime-chat-app-using-directus-and-nuxt.md
@@ -1,6 +1,6 @@
---
stableId: e810de4e-c2cb-484d-8600-4b9fcc715a64
-slug: build-a-realtime-chat-app-with-directus-and-nuxt
+slug: build-a-realtime-chat-app-using-directus-and-nuxt
title: Build a Realtime Chat App with Directus and Nuxt
technologies:
- nuxt
diff --git a/content/tutorials/2.projects/build-a-user-feedback-widget-with-vue-js-.md b/content/tutorials/2.projects/build-a-user-feedback-widget-with-vue-js-.md
index ff5050143..d8b775602 100644
--- a/content/tutorials/2.projects/build-a-user-feedback-widget-with-vue-js-.md
+++ b/content/tutorials/2.projects/build-a-user-feedback-widget-with-vue-js-.md
@@ -1,7 +1,7 @@
---
stableId: d84d4667-9995-439f-bede-19688f6e8189
id: dc13157c-95a1-4486-9dd3-3d0c43876bdc
-slug: build-a-user-feedback-widget-with-vue-js
+slug: build-a-user-feedback-widget-with-vue-js-
title: Build a User Feedback Widget with Vue.js
technologies:
- vue
diff --git a/content/tutorials/1.getting-started/create-reusable-blocks-with-many-to-any-relationships.md b/content/tutorials/2.projects/create-reusable-blocks-with-many-to-any-relationships.md
similarity index 100%
rename from content/tutorials/1.getting-started/create-reusable-blocks-with-many-to-any-relationships.md
rename to content/tutorials/2.projects/create-reusable-blocks-with-many-to-any-relationships.md
diff --git a/content/tutorials/2.projects/how-i-built-an-ai-open-source-santa-roast-app-with-directus-and-nuxt.md b/content/tutorials/2.projects/how-i-built-an-ai-open-source-santa-roast-app-with-directus-and-nuxt.md
index c146a33a8..fc82f2419 100644
--- a/content/tutorials/2.projects/how-i-built-an-ai-open-source-santa-roast-app-with-directus-and-nuxt.md
+++ b/content/tutorials/2.projects/how-i-built-an-ai-open-source-santa-roast-app-with-directus-and-nuxt.md
@@ -1,7 +1,7 @@
---
stableId: 4d9c1b0e-a39e-4e21-9cb1-52ece475ce5d
id: 11a1c86f-36bf-4dd5-8bce-7eed75451514
-slug: ai-santa-roast-app-with-directus-nuxt
+slug: how-i-built-an-ai-open-source-santa-roast-app-with-directus-and-nuxt
title: How I Built an AI Open Source Santa Roast App with Directus and Nuxt
technologies:
- nuxt
diff --git a/content/tutorials/7.workflows/invincible-ai-content-workflows-with-inngest-and-directus.md b/content/tutorials/7.workflows/invincible-ai-content-workflows-with-inngest-and-directus.md
index c2725ec1a..78b55f18b 100644
--- a/content/tutorials/7.workflows/invincible-ai-content-workflows-with-inngest-and-directus.md
+++ b/content/tutorials/7.workflows/invincible-ai-content-workflows-with-inngest-and-directus.md
@@ -3,7 +3,7 @@ stableId: 38e940b1-113e-44fb-bf8f-4906fb1cd578
slug: invincible-ai-content-workflows-with-inngest-and-directus
title: Invincible AI content workflows with Inngest and Directus
technologies:
- - inggest
+ - inngest
authors:
- name: Bryant Gillespie
title: Developer Advocate
diff --git a/nuxt.config.ts b/nuxt.config.ts
index badeb1ded..2c6094290 100644
--- a/nuxt.config.ts
+++ b/nuxt.config.ts
@@ -17,8 +17,7 @@ function loadRedirectRouteRules(): NitroConfig['routeRules'] {
const entries = JSON.parse(raw) as Record;
const rules: NitroConfig['routeRules'] = {};
for (const [from, rule] of Object.entries(entries)) {
- const key = `${BASE_URL}${from}`;
- rules[key] = { redirect: { to: `${BASE_URL}${rule.to}`, statusCode: rule.statusCode } };
+ rules[from] = { redirect: { to: `${BASE_URL}${rule.to}`, statusCode: rule.statusCode } };
}
return rules;
}
diff --git a/redirects.json b/redirects.json
index 0967ef424..3ae3175cb 100644
--- a/redirects.json
+++ b/redirects.json
@@ -1 +1,238 @@
-{}
+{
+ "/tutorials/getting-started": {
+ "to": "/tutorials",
+ "statusCode": 301
+ },
+ "/tutorials/getting-started/create-reusable-blocks-with-many-to-any-relationships": {
+ "to": "/tutorials/projects/create-reusable-blocks-with-many-to-any-relationships",
+ "statusCode": 301
+ },
+ "/tutorials/getting-started/fetch-data-from-directus-in-android-with-kotlin": {
+ "to": "/frameworks/kotlin/data-fetching",
+ "statusCode": 301
+ },
+ "/tutorials/getting-started/fetch-data-from-directus-in-ios-with-swift": {
+ "to": "/frameworks/swift/data-fetching",
+ "statusCode": 301
+ },
+ "/tutorials/getting-started/fetch-data-from-directus-with-angular": {
+ "to": "/frameworks/angular/data-fetching",
+ "statusCode": 301
+ },
+ "/tutorials/getting-started/fetch-data-from-directus-with-astro": {
+ "to": "/frameworks/astro/data-fetching",
+ "statusCode": 301
+ },
+ "/tutorials/getting-started/fetch-data-from-directus-with-django": {
+ "to": "/frameworks/django/data-fetching",
+ "statusCode": 301
+ },
+ "/tutorials/getting-started/fetch-data-from-directus-with-eleventy-3": {
+ "to": "/frameworks/eleventy/data-fetching",
+ "statusCode": 301
+ },
+ "/tutorials/getting-started/fetch-data-from-directus-with-flask": {
+ "to": "/frameworks/flask/data-fetching",
+ "statusCode": 301
+ },
+ "/tutorials/getting-started/fetch-data-from-directus-with-flutter": {
+ "to": "/frameworks/flutter/data-fetching",
+ "statusCode": 301
+ },
+ "/tutorials/getting-started/fetch-data-from-directus-with-laravel": {
+ "to": "/frameworks/laravel/data-fetching",
+ "statusCode": 301
+ },
+ "/tutorials/getting-started/fetch-data-from-directus-with-nextjs": {
+ "to": "/frameworks/nextjs/data-fetching",
+ "statusCode": 301
+ },
+ "/tutorials/getting-started/fetch-data-from-directus-with-nuxt": {
+ "to": "/frameworks/nuxt/data-fetching",
+ "statusCode": 301
+ },
+ "/tutorials/getting-started/fetch-data-from-directus-with-solidstart": {
+ "to": "/frameworks/solidstart/data-fetching",
+ "statusCode": 301
+ },
+ "/tutorials/getting-started/fetch-data-from-directus-with-spring-boot": {
+ "to": "/frameworks/spring-boot/data-fetching",
+ "statusCode": 301
+ },
+ "/tutorials/getting-started/fetch-data-from-directus-with-sveltekit": {
+ "to": "/frameworks/sveltekit/data-fetching",
+ "statusCode": 301
+ },
+ "/tutorials/getting-started/implement-directus-auth-with-ios": {
+ "to": "/frameworks/swift/authentication",
+ "statusCode": 301
+ },
+ "/tutorials/getting-started/implement-multilingual-content-with-directus-and-svelte-kit": {
+ "to": "/frameworks/sveltekit/internationalization",
+ "statusCode": 301
+ },
+ "/tutorials/getting-started/implementing-live-preview-in-astro": {
+ "to": "/frameworks/astro/live-preview",
+ "statusCode": 301
+ },
+ "/tutorials/getting-started/implementing-live-preview-in-next-js": {
+ "to": "/frameworks/nextjs/live-preview",
+ "statusCode": 301
+ },
+ "/tutorials/getting-started/implementing-live-preview-in-nuxt": {
+ "to": "/frameworks/nuxt/live-preview",
+ "statusCode": 301
+ },
+ "/tutorials/getting-started/implementing-live-preview-in-react": {
+ "to": "/frameworks/react/live-preview",
+ "statusCode": 301
+ },
+ "/tutorials/getting-started/implementing-live-preview-in-sveltekit": {
+ "to": "/frameworks/sveltekit/live-preview",
+ "statusCode": 301
+ },
+ "/tutorials/getting-started/implementing-multilingual-content-using-directus-and-astro": {
+ "to": "/frameworks/astro/multilingual-content",
+ "statusCode": 301
+ },
+ "/tutorials/getting-started/implementing-multilingual-content-using-directus-and-next": {
+ "to": "/frameworks/nextjs/multilingual-content",
+ "statusCode": 301
+ },
+ "/tutorials/getting-started/implementing-multilingual-content-using-directus-and-nuxt": {
+ "to": "/frameworks/nuxt/multilingual-content",
+ "statusCode": 301
+ },
+ "/tutorials/getting-started/implementing-multilingual-content-using-directus-and-sveltekit": {
+ "to": "/frameworks/sveltekit/multilingual-content",
+ "statusCode": 301
+ },
+ "/tutorials/getting-started/integrating-the-directus-visual-editor-with-nextjs": {
+ "to": "/frameworks/nextjs/visual-editor",
+ "statusCode": 301
+ },
+ "/tutorials/getting-started/integrating-the-directus-visual-editor-with-nuxt": {
+ "to": "/frameworks/nuxt/visual-editor",
+ "statusCode": 301
+ },
+ "/tutorials/getting-started/integrating-the-directus-visual-editor-with-sveltekit": {
+ "to": "/frameworks/sveltekit/visual-editor",
+ "statusCode": 301
+ },
+ "/tutorials/getting-started/rendering-dynamic-blocks-using-astro": {
+ "to": "/frameworks/astro/reusable-blocks",
+ "statusCode": 301
+ },
+ "/tutorials/getting-started/rendering-dynamic-blocks-using-next": {
+ "to": "/frameworks/nextjs/reusable-blocks",
+ "statusCode": 301
+ },
+ "/tutorials/getting-started/rendering-dynamic-blocks-using-nuxt": {
+ "to": "/frameworks/nuxt/reusable-blocks",
+ "statusCode": 301
+ },
+ "/tutorials/getting-started/rendering-dynamic-blocks-using-sveltekit": {
+ "to": "/frameworks/sveltekit/reusable-blocks",
+ "statusCode": 301
+ },
+ "/tutorials/getting-started/set-up-live-preview-with-next-js": {
+ "to": "/frameworks/nextjs/live-preview-draft-mode",
+ "statusCode": 301
+ },
+ "/tutorials/getting-started/set-up-live-preview-with-nuxt": {
+ "to": "/frameworks/nuxt/live-preview-setup",
+ "statusCode": 301
+ },
+ "/tutorials/getting-started/submit-forms-using-directus-and-nextjs": {
+ "to": "/frameworks/nextjs/forms",
+ "statusCode": 301
+ },
+ "/tutorials/getting-started/submit-forms-using-directus-and-nuxt": {
+ "to": "/frameworks/nuxt/forms",
+ "statusCode": 301
+ },
+ "/tutorials/getting-started/submit-forms-using-directus-and-sveltekit": {
+ "to": "/frameworks/sveltekit/forms",
+ "statusCode": 301
+ },
+ "/tutorials/getting-started/using-authentication-in-astro": {
+ "to": "/frameworks/astro/authentication",
+ "statusCode": 301
+ },
+ "/tutorials/getting-started/using-authentication-in-next-js": {
+ "to": "/frameworks/nextjs/authentication",
+ "statusCode": 301
+ },
+ "/tutorials/getting-started/using-authentication-in-nuxt": {
+ "to": "/frameworks/nuxt/authentication",
+ "statusCode": 301
+ },
+ "/tutorials/getting-started/using-authentication-in-react": {
+ "to": "/frameworks/react/authentication",
+ "statusCode": 301
+ },
+ "/tutorials/getting-started/using-authentication-in-sveltekit": {
+ "to": "/frameworks/sveltekit/authentication",
+ "statusCode": 301
+ },
+ "/tutorials/migration/migrate-from-nuxt-content-to-directus": {
+ "to": "/frameworks/nuxt/migrate-from-nuxt-content",
+ "statusCode": 301
+ },
+ "/tutorials/projects/build-forms-dynamically-using-directus-and-astro": {
+ "to": "/frameworks/astro/dynamic-forms",
+ "statusCode": 301
+ },
+ "/tutorials/projects/build-forms-dynamically-using-directus-and-next": {
+ "to": "/frameworks/nextjs/dynamic-forms",
+ "statusCode": 301
+ },
+ "/tutorials/projects/build-forms-dynamically-using-directus-and-nuxt": {
+ "to": "/frameworks/nuxt/dynamic-forms",
+ "statusCode": 301
+ },
+ "/tutorials/projects/build-forms-dynamically-using-directus-and-sveltekit": {
+ "to": "/frameworks/sveltekit/dynamic-forms",
+ "statusCode": 301
+ },
+ "/tutorials/projects/create-a-cms-using-directus-and-astro": {
+ "to": "/frameworks/astro/build-a-cms",
+ "statusCode": 301
+ },
+ "/tutorials/projects/create-a-cms-using-directus-and-nextjs": {
+ "to": "/frameworks/nextjs/build-a-cms",
+ "statusCode": 301
+ },
+ "/tutorials/projects/create-a-cms-using-directus-and-nuxt": {
+ "to": "/frameworks/nuxt/build-a-cms",
+ "statusCode": 301
+ },
+ "/tutorials/projects/create-a-cms-using-directus-and-sveltekit": {
+ "to": "/frameworks/sveltekit/build-a-cms",
+ "statusCode": 301
+ },
+ "/tutorials/projects/create-dynamic-pages-for-a-cms-using-directus-and-astro": {
+ "to": "/frameworks/astro/dynamic-pages",
+ "statusCode": 301
+ },
+ "/tutorials/projects/create-dynamic-pages-for-a-cms-using-directus-and-nextjs": {
+ "to": "/frameworks/nextjs/dynamic-pages",
+ "statusCode": 301
+ },
+ "/tutorials/projects/create-dynamic-pages-for-a-cms-using-directus-and-nuxt": {
+ "to": "/frameworks/nuxt/dynamic-pages",
+ "statusCode": 301
+ },
+ "/tutorials/projects/create-dynamic-pages-for-a-cms-using-directus-and-sveltekit": {
+ "to": "/frameworks/sveltekit/dynamic-pages",
+ "statusCode": 301
+ },
+ "/tutorials/tips-and-tricks/implement-pagination-and-infinite-scrolling-in-next-js-": {
+ "to": "/frameworks/nextjs/pagination-infinite-scroll",
+ "statusCode": 301
+ },
+ "/tutorials/workflows/combine-live-preview-and-content-versioning-with-next-js": {
+ "to": "/frameworks/nextjs/live-preview-content-versioning",
+ "statusCode": 301
+ }
+}
From bf3949e06deb794d674389bc367d3da71719e2b4 Mon Sep 17 00:00:00 2001
From: bryantgillespie
Date: Thu, 30 Apr 2026 12:17:48 -0400
Subject: [PATCH 22/45] wippity
---
.claude/scheduled_tasks.lock | 1 +
app/app.config.ts | 15 +-
app/components/content/FrameworkGuideList.vue | 160 +++++++++++++
app/pages/[...slug].vue | 78 +++++-
app/pages/frameworks/[framework].vue | 224 ------------------
app/pages/frameworks/index.vue | 56 ++++-
app/utils/frameworks.ts | 138 -----------
content/frameworks/01.nextjs/.navigation.yml | 3 +
.../{data-fetching.md => 01.data-fetching.md} | 0
...authentication.md => 02.authentication.md} | 0
.../{build-a-cms.md => 10.build-a-cms.md} | 0
.../{dynamic-forms.md => 11.dynamic-forms.md} | 0
.../{dynamic-pages.md => 12.dynamic-pages.md} | 0
.../01.nextjs/{forms.md => 13.forms.md} | 0
.../{live-preview.md => 14.live-preview.md} | 0
... => 15.live-preview-content-versioning.md} | 0
...-mode.md => 16.live-preview-draft-mode.md} | 0
...-content.md => 17.multilingual-content.md} | 0
...ll.md => 18.pagination-infinite-scroll.md} | 0
...usable-blocks.md => 19.reusable-blocks.md} | 0
.../{visual-editor.md => 20.visual-editor.md} | 0
content/frameworks/01.nextjs/index.md | 9 +
content/frameworks/02.nuxt/.navigation.yml | 3 +
.../{data-fetching.md => 01.data-fetching.md} | 0
...authentication.md => 02.authentication.md} | 0
.../{build-a-cms.md => 10.build-a-cms.md} | 0
.../{dynamic-forms.md => 11.dynamic-forms.md} | 0
.../{dynamic-pages.md => 12.dynamic-pages.md} | 0
.../02.nuxt/{forms.md => 13.forms.md} | 0
.../{live-preview.md => 14.live-preview.md} | 0
...view-setup.md => 15.live-preview-setup.md} | 0
...ent.md => 16.migrate-from-nuxt-content.md} | 0
...-content.md => 17.multilingual-content.md} | 0
...usable-blocks.md => 18.reusable-blocks.md} | 0
.../{visual-editor.md => 19.visual-editor.md} | 0
content/frameworks/02.nuxt/index.md | 9 +
content/frameworks/03.astro/.navigation.yml | 3 +
.../{data-fetching.md => 01.data-fetching.md} | 0
...authentication.md => 02.authentication.md} | 0
.../{build-a-cms.md => 10.build-a-cms.md} | 0
.../{dynamic-forms.md => 11.dynamic-forms.md} | 0
.../{dynamic-pages.md => 12.dynamic-pages.md} | 0
.../{live-preview.md => 13.live-preview.md} | 0
...-content.md => 14.multilingual-content.md} | 0
...usable-blocks.md => 15.reusable-blocks.md} | 0
content/frameworks/03.astro/index.md | 9 +
.../frameworks/04.sveltekit/.navigation.yml | 3 +
.../{data-fetching.md => 01.data-fetching.md} | 0
...authentication.md => 02.authentication.md} | 0
.../{build-a-cms.md => 10.build-a-cms.md} | 0
.../{dynamic-forms.md => 11.dynamic-forms.md} | 0
.../{dynamic-pages.md => 12.dynamic-pages.md} | 0
.../04.sveltekit/{forms.md => 13.forms.md} | 0
...lization.md => 14.internationalization.md} | 0
.../{live-preview.md => 15.live-preview.md} | 0
...-content.md => 16.multilingual-content.md} | 0
...usable-blocks.md => 17.reusable-blocks.md} | 0
.../{visual-editor.md => 18.visual-editor.md} | 0
content/frameworks/04.sveltekit/index.md | 9 +
content/frameworks/05.react/.navigation.yml | 3 +
...authentication.md => 02.authentication.md} | 0
.../{live-preview.md => 10.live-preview.md} | 0
content/frameworks/05.react/index.md | 9 +
content/frameworks/06.angular/.navigation.yml | 3 +
.../{data-fetching.md => 01.data-fetching.md} | 0
content/frameworks/06.angular/index.md | 9 +
content/frameworks/07.laravel/.navigation.yml | 3 +
.../{data-fetching.md => 01.data-fetching.md} | 0
content/frameworks/07.laravel/index.md | 9 +
content/frameworks/08.django/.navigation.yml | 3 +
.../{data-fetching.md => 01.data-fetching.md} | 0
content/frameworks/08.django/index.md | 9 +
content/frameworks/09.flask/.navigation.yml | 3 +
.../{data-fetching.md => 01.data-fetching.md} | 0
content/frameworks/09.flask/index.md | 9 +
.../frameworks/10.spring-boot/.navigation.yml | 3 +
.../{data-fetching.md => 01.data-fetching.md} | 0
content/frameworks/10.spring-boot/index.md | 9 +
content/frameworks/11.flutter/.navigation.yml | 3 +
.../{data-fetching.md => 01.data-fetching.md} | 0
content/frameworks/11.flutter/index.md | 9 +
content/frameworks/12.swift/.navigation.yml | 3 +
.../{data-fetching.md => 01.data-fetching.md} | 0
...authentication.md => 02.authentication.md} | 0
content/frameworks/12.swift/index.md | 9 +
content/frameworks/13.kotlin/.navigation.yml | 3 +
.../{data-fetching.md => 01.data-fetching.md} | 0
content/frameworks/13.kotlin/index.md | 9 +
.../frameworks/14.eleventy/.navigation.yml | 3 +
.../{data-fetching.md => 01.data-fetching.md} | 0
content/frameworks/14.eleventy/index.md | 9 +
.../frameworks/15.solidstart/.navigation.yml | 3 +
.../{data-fetching.md => 01.data-fetching.md} | 0
content/frameworks/15.solidstart/index.md | 9 +
...t-with-javascript-and-directus-realtime.md | 2 +
...r-chat-with-react-and-directus-realtime.md | 2 +
...-chat-with-vue-js-and-directus-realtime.md | 2 +
...ook-chrome-extension-with-directus-auth.md | 2 +
...ltime-chat-app-using-directus-and-astro.md | 2 +
...altime-chat-app-using-directus-and-nuxt.md | 2 +
...ealtime-chat-app-with-directus-and-next.md | 2 +
...me-chat-app-with-directus-and-sveltekit.md | 2 +
...nial-widget-with-sveltekit-and-directus.md | 2 +
...ild-a-user-feedback-widget-with-vue-js-.md | 2 +
...reaming-app-with-sveltekit-and-directus.md | 2 +
...th-next-js-stripe-and-directus-automate.md | 2 +
...th-next-js-stripe-and-directus-automate.md | 2 +
...e-blocks-with-many-to-any-relationships.md | 2 +
...-santa-roast-app-with-directus-and-nuxt.md | 2 +
...igure-okta-as-a-single-sign-on-provider.md | 2 +
.../understanding-kubernetes.md | 2 +
.../migrate-from-notion-to-directus.md | 2 +
.../migrate-from-wordpress-to-directus.md | 2 +
...ew-customers-in-stripe-in-a-custom-hook.md | 2 +
...l-api-data-from-vonage-in-custom-panels.md | 2 +
...rate-algolia-indexing-with-custom-hooks.md | 2 +
...lasticsearch-indexing-with-custom-hooks.md | 2 +
...-meilisearch-indexing-with-custom-hooks.md | 2 +
...error-track-with-sentry-in-custom-hooks.md | 2 +
...ssages-with-twilio-in-custom-operations.md | 2 +
...s-messages-with-twilio-in-custom-panels.md | 2 +
...nal-items-in-a-custom-display-extension.md | 2 +
...ne-numbers-with-twilio-in-a-custom-hook.md | 2 +
.../deploy-directus-to-an-ubuntu-server.md | 2 +
.../deploy-directus-to-aws-ec2.md | 2 +
.../deploy-directus-to-azure-web-apps.md | 2 +
.../deploy-directus-to-digital-ocean.md | 2 +
...eploy-directus-to-google-cloud-platform.md | 2 +
.../deploy-directus-to-railway.md | 2 +
...te-github-issues-with-directus-automate.md | 2 +
...mbers-with-vonage-and-directus-automate.md | 2 +
...ata-with-clearbit-and-directus-automate.md | 2 +
...mages-with-dall-e-and-directus-automate.md | 2 +
...-posts-with-gpt-4-and-directus-automate.md | 2 +
...pts-with-deepgram-and-directus-automate.md | 2 +
...ngual-content-with-directus-and-crowdin.md | 2 +
...ent-workflows-with-inngest-and-directus.md | 2 +
...ges-with-clarifai-and-directus-automate.md | 2 +
...lify-site-builds-with-directus-automate.md | 2 +
...rcel-site-builds-with-directus-automate.md | 2 +
140 files changed, 567 insertions(+), 377 deletions(-)
create mode 100644 .claude/scheduled_tasks.lock
create mode 100644 app/components/content/FrameworkGuideList.vue
delete mode 100644 app/pages/frameworks/[framework].vue
delete mode 100644 app/utils/frameworks.ts
create mode 100644 content/frameworks/01.nextjs/.navigation.yml
rename content/frameworks/01.nextjs/{data-fetching.md => 01.data-fetching.md} (100%)
rename content/frameworks/01.nextjs/{authentication.md => 02.authentication.md} (100%)
rename content/frameworks/01.nextjs/{build-a-cms.md => 10.build-a-cms.md} (100%)
rename content/frameworks/01.nextjs/{dynamic-forms.md => 11.dynamic-forms.md} (100%)
rename content/frameworks/01.nextjs/{dynamic-pages.md => 12.dynamic-pages.md} (100%)
rename content/frameworks/01.nextjs/{forms.md => 13.forms.md} (100%)
rename content/frameworks/01.nextjs/{live-preview.md => 14.live-preview.md} (100%)
rename content/frameworks/01.nextjs/{live-preview-content-versioning.md => 15.live-preview-content-versioning.md} (100%)
rename content/frameworks/01.nextjs/{live-preview-draft-mode.md => 16.live-preview-draft-mode.md} (100%)
rename content/frameworks/01.nextjs/{multilingual-content.md => 17.multilingual-content.md} (100%)
rename content/frameworks/01.nextjs/{pagination-infinite-scroll.md => 18.pagination-infinite-scroll.md} (100%)
rename content/frameworks/01.nextjs/{reusable-blocks.md => 19.reusable-blocks.md} (100%)
rename content/frameworks/01.nextjs/{visual-editor.md => 20.visual-editor.md} (100%)
create mode 100644 content/frameworks/01.nextjs/index.md
create mode 100644 content/frameworks/02.nuxt/.navigation.yml
rename content/frameworks/02.nuxt/{data-fetching.md => 01.data-fetching.md} (100%)
rename content/frameworks/02.nuxt/{authentication.md => 02.authentication.md} (100%)
rename content/frameworks/02.nuxt/{build-a-cms.md => 10.build-a-cms.md} (100%)
rename content/frameworks/02.nuxt/{dynamic-forms.md => 11.dynamic-forms.md} (100%)
rename content/frameworks/02.nuxt/{dynamic-pages.md => 12.dynamic-pages.md} (100%)
rename content/frameworks/02.nuxt/{forms.md => 13.forms.md} (100%)
rename content/frameworks/02.nuxt/{live-preview.md => 14.live-preview.md} (100%)
rename content/frameworks/02.nuxt/{live-preview-setup.md => 15.live-preview-setup.md} (100%)
rename content/frameworks/02.nuxt/{migrate-from-nuxt-content.md => 16.migrate-from-nuxt-content.md} (100%)
rename content/frameworks/02.nuxt/{multilingual-content.md => 17.multilingual-content.md} (100%)
rename content/frameworks/02.nuxt/{reusable-blocks.md => 18.reusable-blocks.md} (100%)
rename content/frameworks/02.nuxt/{visual-editor.md => 19.visual-editor.md} (100%)
create mode 100644 content/frameworks/02.nuxt/index.md
create mode 100644 content/frameworks/03.astro/.navigation.yml
rename content/frameworks/03.astro/{data-fetching.md => 01.data-fetching.md} (100%)
rename content/frameworks/03.astro/{authentication.md => 02.authentication.md} (100%)
rename content/frameworks/03.astro/{build-a-cms.md => 10.build-a-cms.md} (100%)
rename content/frameworks/03.astro/{dynamic-forms.md => 11.dynamic-forms.md} (100%)
rename content/frameworks/03.astro/{dynamic-pages.md => 12.dynamic-pages.md} (100%)
rename content/frameworks/03.astro/{live-preview.md => 13.live-preview.md} (100%)
rename content/frameworks/03.astro/{multilingual-content.md => 14.multilingual-content.md} (100%)
rename content/frameworks/03.astro/{reusable-blocks.md => 15.reusable-blocks.md} (100%)
create mode 100644 content/frameworks/03.astro/index.md
create mode 100644 content/frameworks/04.sveltekit/.navigation.yml
rename content/frameworks/04.sveltekit/{data-fetching.md => 01.data-fetching.md} (100%)
rename content/frameworks/04.sveltekit/{authentication.md => 02.authentication.md} (100%)
rename content/frameworks/04.sveltekit/{build-a-cms.md => 10.build-a-cms.md} (100%)
rename content/frameworks/04.sveltekit/{dynamic-forms.md => 11.dynamic-forms.md} (100%)
rename content/frameworks/04.sveltekit/{dynamic-pages.md => 12.dynamic-pages.md} (100%)
rename content/frameworks/04.sveltekit/{forms.md => 13.forms.md} (100%)
rename content/frameworks/04.sveltekit/{internationalization.md => 14.internationalization.md} (100%)
rename content/frameworks/04.sveltekit/{live-preview.md => 15.live-preview.md} (100%)
rename content/frameworks/04.sveltekit/{multilingual-content.md => 16.multilingual-content.md} (100%)
rename content/frameworks/04.sveltekit/{reusable-blocks.md => 17.reusable-blocks.md} (100%)
rename content/frameworks/04.sveltekit/{visual-editor.md => 18.visual-editor.md} (100%)
create mode 100644 content/frameworks/04.sveltekit/index.md
create mode 100644 content/frameworks/05.react/.navigation.yml
rename content/frameworks/05.react/{authentication.md => 02.authentication.md} (100%)
rename content/frameworks/05.react/{live-preview.md => 10.live-preview.md} (100%)
create mode 100644 content/frameworks/05.react/index.md
create mode 100644 content/frameworks/06.angular/.navigation.yml
rename content/frameworks/06.angular/{data-fetching.md => 01.data-fetching.md} (100%)
create mode 100644 content/frameworks/06.angular/index.md
create mode 100644 content/frameworks/07.laravel/.navigation.yml
rename content/frameworks/07.laravel/{data-fetching.md => 01.data-fetching.md} (100%)
create mode 100644 content/frameworks/07.laravel/index.md
create mode 100644 content/frameworks/08.django/.navigation.yml
rename content/frameworks/08.django/{data-fetching.md => 01.data-fetching.md} (100%)
create mode 100644 content/frameworks/08.django/index.md
create mode 100644 content/frameworks/09.flask/.navigation.yml
rename content/frameworks/09.flask/{data-fetching.md => 01.data-fetching.md} (100%)
create mode 100644 content/frameworks/09.flask/index.md
create mode 100644 content/frameworks/10.spring-boot/.navigation.yml
rename content/frameworks/10.spring-boot/{data-fetching.md => 01.data-fetching.md} (100%)
create mode 100644 content/frameworks/10.spring-boot/index.md
create mode 100644 content/frameworks/11.flutter/.navigation.yml
rename content/frameworks/11.flutter/{data-fetching.md => 01.data-fetching.md} (100%)
create mode 100644 content/frameworks/11.flutter/index.md
create mode 100644 content/frameworks/12.swift/.navigation.yml
rename content/frameworks/12.swift/{data-fetching.md => 01.data-fetching.md} (100%)
rename content/frameworks/12.swift/{authentication.md => 02.authentication.md} (100%)
create mode 100644 content/frameworks/12.swift/index.md
create mode 100644 content/frameworks/13.kotlin/.navigation.yml
rename content/frameworks/13.kotlin/{data-fetching.md => 01.data-fetching.md} (100%)
create mode 100644 content/frameworks/13.kotlin/index.md
create mode 100644 content/frameworks/14.eleventy/.navigation.yml
rename content/frameworks/14.eleventy/{data-fetching.md => 01.data-fetching.md} (100%)
create mode 100644 content/frameworks/14.eleventy/index.md
create mode 100644 content/frameworks/15.solidstart/.navigation.yml
rename content/frameworks/15.solidstart/{data-fetching.md => 01.data-fetching.md} (100%)
create mode 100644 content/frameworks/15.solidstart/index.md
diff --git a/.claude/scheduled_tasks.lock b/.claude/scheduled_tasks.lock
new file mode 100644
index 000000000..9a938bbbf
--- /dev/null
+++ b/.claude/scheduled_tasks.lock
@@ -0,0 +1 @@
+{"sessionId":"feb302f0-9d29-4609-b4e5-c057df2cf5c8","pid":73084,"procStart":"Thu Apr 30 15:50:33 2026","acquiredAt":1777565167544}
\ No newline at end of file
diff --git a/app/app.config.ts b/app/app.config.ts
index 3410fca93..1ebe09f61 100644
--- a/app/app.config.ts
+++ b/app/app.config.ts
@@ -129,6 +129,16 @@ export default defineAppConfig({
{
label: 'Resources',
children: [
+ {
+ label: 'Frameworks',
+ to: '/frameworks',
+ icon: 'i-ph-brackets-curly',
+ },
+ {
+ label: 'Tutorials',
+ to: '/tutorials',
+ icon: 'i-ph-article',
+ },
{
label: 'Community',
to: '/community/overview/welcome',
@@ -139,11 +149,6 @@ export default defineAppConfig({
to: '/releases',
icon: 'i-ph-notebook',
},
- {
- label: 'Tutorials',
- to: '/tutorials',
- icon: 'i-ph-article',
- },
],
},
{
diff --git a/app/components/content/FrameworkGuideList.vue b/app/components/content/FrameworkGuideList.vue
new file mode 100644
index 000000000..90c97b9da
--- /dev/null
+++ b/app/components/content/FrameworkGuideList.vue
@@ -0,0 +1,160 @@
+
+
+
+
+
+
+ Start Here
+
+
+
+
+
+
+ {{ guideTitle(guide) }}
+
+
+ {{ guide.description }}
+
+
+
+
+
+
+
+
+
+
+ Guides
+
+
+
+
+
+
+ {{ guideTitle(guide) }}
+
+
+ {{ guide.description }}
+
+
+
+
+
+
+
+
+
+
+ {{ frameworkLabel }} Tutorials
+
+
+ Longer-form builds and community walkthroughs.
+
+
+
+
+ {{ tutorial.title }}
+
+
+
+
+
+
diff --git a/app/pages/[...slug].vue b/app/pages/[...slug].vue
index 925490584..d8d60a5d7 100644
--- a/app/pages/[...slug].vue
+++ b/app/pages/[...slug].vue
@@ -12,6 +12,15 @@ definePageMeta({
const route = useRoute();
const { path } = useNormalizedPath();
+
+if (path.value.endsWith('/.navigation')) {
+ throw createError({
+ statusCode: 404,
+ statusMessage: 'Page not found',
+ fatal: true,
+ });
+}
+
const { data: page } = await useAsyncData(path, () =>
queryCollection('content').path(path.value).first(),
);
@@ -43,6 +52,44 @@ const { data: surround } = await useAsyncData(`${route.path}-surround`, () =>
fields: ['title', 'description', 'path'],
}).where('path', 'NOT LIKE', '%.navigation'),
);
+
+const frameworkRootMatch = computed(() => /^\/frameworks\/([^/]+)\/?$/.exec(path.value));
+const frameworkGuideMatch = computed(() => /^\/frameworks\/([^/]+)\/.+/.exec(path.value));
+const frameworkSlug = computed(() => frameworkRootMatch.value?.[1] ?? frameworkGuideMatch.value?.[1]);
+
+const findNavNode = (items: ContentNavigationItem[] | undefined, target: string): ContentNavigationItem | undefined => {
+ if (!items) return undefined;
+ for (const item of items) {
+ if (item.path === target) return item;
+ const child = findNavNode(item.children, target);
+ if (child) return child;
+ }
+ return undefined;
+};
+
+const frameworkNode = computed(() => {
+ const slug = frameworkSlug.value;
+ return slug ? findNavNode(navigation.value, `/frameworks/${slug}`) : undefined;
+});
+
+const frameworkIcon = computed(() =>
+ frameworkRootMatch.value
+ ? (frameworkNode.value as { icon?: string } | undefined)?.icon
+ : undefined,
+);
+
+const frameworkBreadcrumb = computed(() => {
+ if (frameworkGuideMatch.value && frameworkNode.value) {
+ return [
+ { label: 'Frameworks', to: '/frameworks' },
+ { label: frameworkNode.value.title, to: frameworkNode.value.path },
+ ];
+ }
+ if (frameworkRootMatch.value) {
+ return [{ label: 'Frameworks', to: '/frameworks' }];
+ }
+ return [];
+});
@@ -53,7 +100,36 @@ const { data: surround } = await useAsyncData(`${route.path}-surround`, () =>
:headline="headline"
:ui="{ headline: 'headline', title: 'title' }"
>
-
+
+
+
+ /
+
+
+
+
+
+
+
+
+
+ {{ page.title }}
+
+
+
+
diff --git a/app/pages/frameworks/[framework].vue b/app/pages/frameworks/[framework].vue
deleted file mode 100644
index 0ffad293d..000000000
--- a/app/pages/frameworks/[framework].vue
+++ /dev/null
@@ -1,224 +0,0 @@
-
-
-
-
-
-
-
- Frameworks
-
-
-
-
-
-
-
-
- {{ framework.label }} Guides
-
-
-
-
-
-
-
- {{ group.title }}
-
-
-
-
-
-
-
- {{ guideTitle(guide) }}
-
-
- {{ guide.description }}
-
-
-
-
-
-
-
-
-
- No framework-specific guides yet. Use the core Directus guides below to get started.
-
-
-
-
- Core Directus guides
-
-
- Use these guides to understand the Directus concepts behind your {{ framework.label }} implementation.
-
-
-
-
-
-
-
-
- {{ guide.title }}
-
-
- {{ guide.description }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/app/pages/frameworks/index.vue b/app/pages/frameworks/index.vue
index 698268c0f..cffc32b35 100644
--- a/app/pages/frameworks/index.vue
+++ b/app/pages/frameworks/index.vue
@@ -1,21 +1,60 @@
+
+
+
+
+
+
+ {{ framework.label }}
+
+
+
+
diff --git a/app/layouts/docs.vue b/app/layouts/docs.vue
index eecd1d737..5b6d2434a 100644
--- a/app/layouts/docs.vue
+++ b/app/layouts/docs.vue
@@ -3,21 +3,18 @@ import type { ContentNavigationItem } from '@nuxt/content';
const nav = inject[>('navigation')!;
const route = useRoute();
+const router = useRouter();
const { links } = useSectionLinks();
const { header: { nav: navConfig } } = useAppConfig();
const currentSection = computed(() => {
- // Get the first segment of the path to determine the content section
const pathSegments = route.path.split('/').filter(Boolean);
- const contentSection = pathSegments[0]; // e.g., "cloud", "guides", "api"
+ const contentSection = pathSegments[0];
if (!contentSection) return null;
-
- // Don't show section header for guides since they're already in the navigation
if (contentSection === 'guides') return null;
- // Find the nav section that contains a child matching this content section
for (const item of navConfig) {
if (item.children) {
const matchingChild = item.children.find((child) => {
@@ -28,11 +25,10 @@ const currentSection = computed(() => {
return false;
});
if (matchingChild) {
- return matchingChild; // Return the specific child (e.g., "Cloud", "Self-Hosting")
+ return matchingChild;
}
}
- // For direct matches (like API Reference, Start)
if (item.to) {
const itemSegments = item.to.split('/').filter(Boolean);
if (itemSegments[0] === contentSection) {
@@ -44,7 +40,6 @@ const currentSection = computed(() => {
return null;
}) as ComputedRef<{ label: string; to: string; icon?: string } | null>;
-// Only render the nav for the current section of the docs (eg docs, api, cloud)
const navigation = computed(() => {
const routePrefix = `/${route.path.split('/')[1]}`;
@@ -52,6 +47,47 @@ const navigation = computed(() => {
return item.path.startsWith(routePrefix);
})?.children ?? [];
});
+
+const isFrameworksSection = computed(() => route.path === '/frameworks' || route.path.startsWith('/frameworks/'));
+
+const frameworksRoot = computed(() =>
+ nav.value.find(item => item.path === '/frameworks'),
+);
+
+type FrameworkOption = { label: string; value: string; icon?: string };
+
+const frameworkOptions = computed](() => {
+ const items = frameworksRoot.value?.children ?? [];
+ return items
+ .filter(item => item.path && item.path !== '/frameworks')
+ .map(item => ({
+ label: item.title ?? item.path?.split('/').pop() ?? '',
+ value: item.path,
+ icon: (item as { icon?: string }).icon,
+ }));
+});
+
+const selectedFrameworkPath = computed(() => {
+ const match = /^\/frameworks\/([^/]+)/.exec(route.path);
+ return match ? `/frameworks/${match[1]}` : undefined;
+});
+
+const selectedFrameworkIcon = computed(() =>
+ frameworkOptions.value.find(option => option.value === selectedFrameworkPath.value)?.icon,
+);
+
+const onFrameworkSelect = (value: string | undefined) => {
+ if (value && value !== selectedFrameworkPath.value) {
+ router.push(value);
+ }
+};
+
+const frameworkNavigation = computed(() => {
+ const path = selectedFrameworkPath.value;
+ if (!path) return [];
+ const node = frameworksRoot.value?.children?.find(item => item.path === path);
+ return node?.children ?? [];
+});
@@ -64,23 +100,60 @@ const navigation = computed(() => {
type="dashed"
class="my-5"
/>
-
-
+
+
+ Frameworks
+
+
+
+
+
+
+
+
+
- {{ currentSection.label }}
-
-
-
+
+
+
+
+
+ {{ currentSection.label }}
+
+
+
+
diff --git a/app/pages/frameworks/index.vue b/app/pages/frameworks/index.vue
index cffc32b35..381e59a77 100644
--- a/app/pages/frameworks/index.vue
+++ b/app/pages/frameworks/index.vue
@@ -71,10 +71,6 @@ useSeoMeta({
/>
-
- All Frameworks
-
-
-import type {
- ContentCollectionItem,
- ContentNavigationItem,
-} from '@nuxt/content';
+import type { ContentNavigationItem } from '@nuxt/content';
import { findPageBreadcrumb } from '@nuxt/content/utils';
const navigation = inject('navigation') as Ref;
@@ -25,13 +22,6 @@ if (!page.value) {
});
}
-const imageSrc = (page: ContentCollectionItem | undefined) => {
- if (!page) return '';
- const technologies = page.technologies || ['directus'];
- const techString = technologies.join(', ');
- return `/docs/api/tutorialimg?logos=${techString}`;
-};
-
const breadcrumb = computed(() =>
(findPageBreadcrumb(navigation.value, path.value) ?? []).map(item => ({
label: item.title,
@@ -69,11 +59,6 @@ defineOgImage('Default', {
>
-
Date: Thu, 30 Apr 2026 12:44:51 -0400
Subject: [PATCH 24/45] fix nav
---
app/app.config.ts | 2 +-
app/components/content/FrameworkGuideList.vue | 3 ---
2 files changed, 1 insertion(+), 4 deletions(-)
diff --git a/app/app.config.ts b/app/app.config.ts
index 1ebe09f61..b5c2f34bb 100644
--- a/app/app.config.ts
+++ b/app/app.config.ts
@@ -107,7 +107,7 @@ export default defineAppConfig({
],
},
{
- label: 'Deploy',
+ label: 'Hosting',
children: [
{
label: 'Cloud',
diff --git a/app/components/content/FrameworkGuideList.vue b/app/components/content/FrameworkGuideList.vue
index 90c97b9da..cf5aac733 100644
--- a/app/components/content/FrameworkGuideList.vue
+++ b/app/components/content/FrameworkGuideList.vue
@@ -139,9 +139,6 @@ const matchingTutorials = computed(() => (tutorials.value ?? [])
{{ frameworkLabel }} Tutorials
-
- Longer-form builds and community walkthroughs.
-
Date: Thu, 30 Apr 2026 12:55:28 -0400
Subject: [PATCH 25/45] extract findNavNode
---
.claude/scheduled_tasks.lock | 1 -
app/components/content/FrameworkGuideList.vue | 10 ----------
app/components/content/FrameworkLinks.vue | 12 +-----------
app/pages/[...slug].vue | 10 ----------
app/pages/frameworks/index.vue | 12 +-----------
app/utils/findNavNode.ts | 14 ++++++++++++++
6 files changed, 16 insertions(+), 43 deletions(-)
delete mode 100644 .claude/scheduled_tasks.lock
create mode 100644 app/utils/findNavNode.ts
diff --git a/.claude/scheduled_tasks.lock b/.claude/scheduled_tasks.lock
deleted file mode 100644
index 9a938bbbf..000000000
--- a/.claude/scheduled_tasks.lock
+++ /dev/null
@@ -1 +0,0 @@
-{"sessionId":"feb302f0-9d29-4609-b4e5-c057df2cf5c8","pid":73084,"procStart":"Thu Apr 30 15:50:33 2026","acquiredAt":1777565167544}
\ No newline at end of file
diff --git a/app/components/content/FrameworkGuideList.vue b/app/components/content/FrameworkGuideList.vue
index cf5aac733..137d159bc 100644
--- a/app/components/content/FrameworkGuideList.vue
+++ b/app/components/content/FrameworkGuideList.vue
@@ -7,16 +7,6 @@ const props = defineProps<{
const navigation = inject('navigation') as Ref | undefined;
-const findNavNode = (items: ContentNavigationItem[] | undefined, target: string): ContentNavigationItem | undefined => {
- if (!items) return undefined;
- for (const item of items) {
- if (item.path === target) return item;
- const child = findNavNode(item.children, target);
- if (child) return child;
- }
- return undefined;
-};
-
const frameworkLabel = computed(() => {
const node = findNavNode(navigation?.value, `/frameworks/${props.slug}`);
return node?.title ?? props.slug;
diff --git a/app/components/content/FrameworkLinks.vue b/app/components/content/FrameworkLinks.vue
index c4d1a703d..165f6b2a0 100644
--- a/app/components/content/FrameworkLinks.vue
+++ b/app/components/content/FrameworkLinks.vue
@@ -3,18 +3,8 @@ import type { ContentNavigationItem } from '@nuxt/content';
const navigation = inject('navigation') as Ref | undefined;
-const findNode = (items: ContentNavigationItem[] | undefined, target: string): ContentNavigationItem | undefined => {
- if (!items) return undefined;
- for (const item of items) {
- if (item.path === target) return item;
- const child = findNode(item.children, target);
- if (child) return child;
- }
- return undefined;
-};
-
const frameworks = computed(() => {
- const root = findNode(navigation?.value, '/frameworks');
+ const root = findNavNode(navigation?.value, '/frameworks');
return (root?.children ?? [])
.filter(item => item.path && item.path !== '/frameworks')
.map(item => ({
diff --git a/app/pages/[...slug].vue b/app/pages/[...slug].vue
index d8d60a5d7..90613d4d9 100644
--- a/app/pages/[...slug].vue
+++ b/app/pages/[...slug].vue
@@ -57,16 +57,6 @@ const frameworkRootMatch = computed(() => /^\/frameworks\/([^/]+)\/?$/.exec(path
const frameworkGuideMatch = computed(() => /^\/frameworks\/([^/]+)\/.+/.exec(path.value));
const frameworkSlug = computed(() => frameworkRootMatch.value?.[1] ?? frameworkGuideMatch.value?.[1]);
-const findNavNode = (items: ContentNavigationItem[] | undefined, target: string): ContentNavigationItem | undefined => {
- if (!items) return undefined;
- for (const item of items) {
- if (item.path === target) return item;
- const child = findNavNode(item.children, target);
- if (child) return child;
- }
- return undefined;
-};
-
const frameworkNode = computed(() => {
const slug = frameworkSlug.value;
return slug ? findNavNode(navigation.value, `/frameworks/${slug}`) : undefined;
diff --git a/app/pages/frameworks/index.vue b/app/pages/frameworks/index.vue
index 381e59a77..44ae94d02 100644
--- a/app/pages/frameworks/index.vue
+++ b/app/pages/frameworks/index.vue
@@ -26,18 +26,8 @@ type FrameworkCard = {
count: number;
};
-const findNode = (items: ContentNavigationItem[] | undefined, path: string): ContentNavigationItem | undefined => {
- if (!items) return undefined;
- for (const item of items) {
- if (item.path === path) return item;
- const child = findNode(item.children, path);
- if (child) return child;
- }
- return undefined;
-};
-
const frameworkCards = computed(() => {
- const root = findNode(nav.value as ContentNavigationItem[] | undefined, '/frameworks');
+ const root = findNavNode(nav.value as ContentNavigationItem[] | undefined, '/frameworks');
const items = root?.children ?? [];
return items
diff --git a/app/utils/findNavNode.ts b/app/utils/findNavNode.ts
new file mode 100644
index 000000000..70409dad3
--- /dev/null
+++ b/app/utils/findNavNode.ts
@@ -0,0 +1,14 @@
+import type { ContentNavigationItem } from '@nuxt/content';
+
+export default function findNavNode(
+ items: ContentNavigationItem[] | undefined,
+ target: string,
+): ContentNavigationItem | undefined {
+ if (!items) return undefined;
+ for (const item of items) {
+ if (item.path === target) return item;
+ const child = findNavNode(item.children, target);
+ if (child) return child;
+ }
+ return undefined;
+}
From 1b1f78cd79378b11c0130f5dd3911ff21de84f95 Mon Sep 17 00:00:00 2001
From: bryantgillespie
Date: Thu, 30 Apr 2026 12:55:37 -0400
Subject: [PATCH 26/45] vanilla to vanilla js
---
...d-a-multi-user-chat-with-javascript-and-directus-realtime.md | 2 +-
.../build-a-notebook-chrome-extension-with-directus-auth.md | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/content/tutorials/2.projects/build-a-multi-user-chat-with-javascript-and-directus-realtime.md b/content/tutorials/2.projects/build-a-multi-user-chat-with-javascript-and-directus-realtime.md
index 6a31ebf79..db87ad8b6 100644
--- a/content/tutorials/2.projects/build-a-multi-user-chat-with-javascript-and-directus-realtime.md
+++ b/content/tutorials/2.projects/build-a-multi-user-chat-with-javascript-and-directus-realtime.md
@@ -10,7 +10,7 @@ authors:
title: Director, Developer Experience
description: Learn how to send and receive data over a realtime connection with JavaScript.
stack:
- - vanilla
+ - vanillajs
---
In this guide, you will build a multi-user chat application with Directus’ WebSockets interface that authenticate users
with an existing account, show historical messages stored in Directus, allow users to send new messages, and immediately
diff --git a/content/tutorials/2.projects/build-a-notebook-chrome-extension-with-directus-auth.md b/content/tutorials/2.projects/build-a-notebook-chrome-extension-with-directus-auth.md
index 3ff7e3a1d..fc8c5c2e4 100644
--- a/content/tutorials/2.projects/build-a-notebook-chrome-extension-with-directus-auth.md
+++ b/content/tutorials/2.projects/build-a-notebook-chrome-extension-with-directus-auth.md
@@ -10,7 +10,7 @@ authors:
title: Guest Author
description: Learn to build and integrate a Chrome Extension with Directus Auth.
stack:
- - chrome
+ - vanillajs
---
This article will guide you through building a Chrome extension using Vite and Directus. The extension will leverage Directus as the backend to store and manage data.
From 91eec5c7e904c14c17ee3b685e6c0856f5e2c95e Mon Sep 17 00:00:00 2001
From: bryantgillespie
Date: Thu, 30 Apr 2026 12:55:49 -0400
Subject: [PATCH 27/45] fix claude bs
---
.gitignore | 2 ++
1 file changed, 2 insertions(+)
diff --git a/.gitignore b/.gitignore
index 893afef2b..4b70306eb 100644
--- a/.gitignore
+++ b/.gitignore
@@ -27,3 +27,5 @@ logs
.vercel
.vscode
+
+.claude/scheduled_tasks.lock
From 3039cb357a1855678330e93d09383cf28fdb030a Mon Sep 17 00:00:00 2001
From: bryantgillespie
Date: Thu, 30 Apr 2026 13:04:38 -0400
Subject: [PATCH 28/45] oops technologies is needed for the imaages
---
app/components/content/FrameworkGuideList.vue | 6 +++---
content.config.ts | 4 ----
content/frameworks/01.nextjs/01.data-fetching.md | 3 ---
content/frameworks/01.nextjs/02.authentication.md | 3 ---
content/frameworks/01.nextjs/10.build-a-cms.md | 3 ---
content/frameworks/01.nextjs/11.dynamic-forms.md | 3 ---
content/frameworks/01.nextjs/12.dynamic-pages.md | 3 ---
content/frameworks/01.nextjs/13.forms.md | 3 ---
content/frameworks/01.nextjs/14.live-preview.md | 3 ---
.../01.nextjs/15.live-preview-content-versioning.md | 3 ---
content/frameworks/01.nextjs/16.live-preview-draft-mode.md | 3 ---
content/frameworks/01.nextjs/17.multilingual-content.md | 4 ----
.../frameworks/01.nextjs/18.pagination-infinite-scroll.md | 3 ---
content/frameworks/01.nextjs/19.reusable-blocks.md | 3 ---
content/frameworks/01.nextjs/20.visual-editor.md | 3 ---
content/frameworks/02.nuxt/01.data-fetching.md | 3 ---
content/frameworks/02.nuxt/02.authentication.md | 3 ---
content/frameworks/02.nuxt/10.build-a-cms.md | 3 ---
content/frameworks/02.nuxt/11.dynamic-forms.md | 3 ---
content/frameworks/02.nuxt/12.dynamic-pages.md | 3 ---
content/frameworks/02.nuxt/13.forms.md | 3 ---
content/frameworks/02.nuxt/14.live-preview.md | 3 ---
content/frameworks/02.nuxt/15.live-preview-setup.md | 3 ---
content/frameworks/02.nuxt/16.migrate-from-nuxt-content.md | 3 ---
content/frameworks/02.nuxt/17.multilingual-content.md | 3 ---
content/frameworks/02.nuxt/18.reusable-blocks.md | 3 ---
content/frameworks/02.nuxt/19.visual-editor.md | 3 ---
content/frameworks/03.astro/01.data-fetching.md | 3 ---
content/frameworks/03.astro/02.authentication.md | 3 ---
content/frameworks/03.astro/10.build-a-cms.md | 3 ---
content/frameworks/03.astro/11.dynamic-forms.md | 3 ---
content/frameworks/03.astro/12.dynamic-pages.md | 3 ---
content/frameworks/03.astro/13.live-preview.md | 3 ---
content/frameworks/03.astro/14.multilingual-content.md | 3 ---
content/frameworks/03.astro/15.reusable-blocks.md | 3 ---
content/frameworks/04.sveltekit/01.data-fetching.md | 3 ---
content/frameworks/04.sveltekit/02.authentication.md | 3 ---
content/frameworks/04.sveltekit/10.build-a-cms.md | 3 ---
content/frameworks/04.sveltekit/11.dynamic-forms.md | 3 ---
content/frameworks/04.sveltekit/12.dynamic-pages.md | 3 ---
content/frameworks/04.sveltekit/13.forms.md | 3 ---
content/frameworks/04.sveltekit/14.internationalization.md | 3 ---
content/frameworks/04.sveltekit/15.live-preview.md | 3 ---
content/frameworks/04.sveltekit/16.multilingual-content.md | 3 ---
content/frameworks/04.sveltekit/17.reusable-blocks.md | 3 ---
content/frameworks/04.sveltekit/18.visual-editor.md | 3 ---
content/frameworks/05.react/02.authentication.md | 3 ---
content/frameworks/05.react/10.live-preview.md | 3 ---
content/frameworks/06.angular/01.data-fetching.md | 3 ---
content/frameworks/07.laravel/01.data-fetching.md | 4 ----
content/frameworks/08.django/01.data-fetching.md | 3 ---
content/frameworks/09.flask/01.data-fetching.md | 3 ---
content/frameworks/10.spring-boot/01.data-fetching.md | 3 ---
content/frameworks/11.flutter/01.data-fetching.md | 3 ---
content/frameworks/12.swift/01.data-fetching.md | 3 ---
content/frameworks/12.swift/02.authentication.md | 4 ----
content/frameworks/13.kotlin/01.data-fetching.md | 3 ---
content/frameworks/14.eleventy/01.data-fetching.md | 3 ---
content/frameworks/15.solidstart/01.data-fetching.md | 3 ---
...multi-user-chat-with-javascript-and-directus-realtime.md | 4 +---
...ld-a-multi-user-chat-with-react-and-directus-realtime.md | 2 --
...d-a-multi-user-chat-with-vue-js-and-directus-realtime.md | 2 --
.../build-a-notebook-chrome-extension-with-directus-auth.md | 4 ----
.../build-a-realtime-chat-app-using-directus-and-astro.md | 2 --
.../build-a-realtime-chat-app-using-directus-and-nuxt.md | 2 --
.../build-a-realtime-chat-app-with-directus-and-next.md | 2 --
...build-a-realtime-chat-app-with-directus-and-sveltekit.md | 2 --
...uild-a-testimonial-widget-with-sveltekit-and-directus.md | 2 --
.../2.projects/build-a-user-feedback-widget-with-vue-js-.md | 2 --
...ild-a-video-streaming-app-with-sveltekit-and-directus.md | 2 --
...ce-platform-with-next-js-stripe-and-directus-automate.md | 2 --
...ng-platform-with-next-js-stripe-and-directus-automate.md | 2 --
...create-reusable-blocks-with-many-to-any-relationships.md | 2 --
...ai-open-source-santa-roast-app-with-directus-and-nuxt.md | 2 --
.../configure-okta-as-a-single-sign-on-provider.md | 2 --
.../tutorials/3.tips-and-tricks/understanding-kubernetes.md | 2 --
.../4.migration/migrate-from-notion-to-directus.md | 2 --
.../4.migration/migrate-from-wordpress-to-directus.md | 2 --
.../create-new-customers-in-stripe-in-a-custom-hook.md | 2 --
...isplay-external-api-data-from-vonage-in-custom-panels.md | 2 --
.../integrate-algolia-indexing-with-custom-hooks.md | 2 --
.../integrate-elasticsearch-indexing-with-custom-hooks.md | 2 --
.../integrate-meilisearch-indexing-with-custom-hooks.md | 2 --
.../monitor-and-error-track-with-sentry-in-custom-hooks.md | 2 --
.../send-sms-messages-with-twilio-in-custom-operations.md | 2 --
.../send-sms-messages-with-twilio-in-custom-panels.md | 2 --
...marize-relational-items-in-a-custom-display-extension.md | 2 --
.../validate-phone-numbers-with-twilio-in-a-custom-hook.md | 2 --
.../6.self-hosting/deploy-directus-to-an-ubuntu-server.md | 2 --
.../tutorials/6.self-hosting/deploy-directus-to-aws-ec2.md | 2 --
.../6.self-hosting/deploy-directus-to-azure-web-apps.md | 2 --
.../6.self-hosting/deploy-directus-to-digital-ocean.md | 2 --
.../deploy-directus-to-google-cloud-platform.md | 2 --
.../tutorials/6.self-hosting/deploy-directus-to-railway.md | 2 --
.../create-github-issues-with-directus-automate.md | 2 --
...-risk-phone-numbers-with-vonage-and-directus-automate.md | 2 --
.../enrich-user-data-with-clearbit-and-directus-automate.md | 2 --
.../generate-images-with-dall-e-and-directus-automate.md | 2 --
...enerate-social-posts-with-gpt-4-and-directus-automate.md | 2 --
...erate-transcripts-with-deepgram-and-directus-automate.md | 2 --
...rating-multilingual-content-with-directus-and-crowdin.md | 2 --
...ncible-ai-content-workflows-with-inngest-and-directus.md | 2 --
.../tag-images-with-clarifai-and-directus-automate.md | 2 --
.../trigger-netlify-site-builds-with-directus-automate.md | 2 --
.../trigger-vercel-site-builds-with-directus-automate.md | 2 --
105 files changed, 4 insertions(+), 276 deletions(-)
diff --git a/app/components/content/FrameworkGuideList.vue b/app/components/content/FrameworkGuideList.vue
index 137d159bc..c65614d65 100644
--- a/app/components/content/FrameworkGuideList.vue
+++ b/app/components/content/FrameworkGuideList.vue
@@ -25,7 +25,7 @@ const { data: guides } = await useAsyncData(`framework-${props.slug}-guides`, ()
const { data: tutorials } = await useAsyncData(`framework-${props.slug}-tutorials`, () =>
queryCollection('content')
.where('path', 'LIKE', '/tutorials/%')
- .select('title', 'description', 'path', 'stack')
+ .select('title', 'description', 'path', 'technologies')
.all(),
);
@@ -35,7 +35,7 @@ type Item = {
path?: string;
navigation?: boolean | { title?: string };
stem?: string;
- stack?: string[];
+ technologies?: string[];
};
const guideTitle = (g: Item) =>
@@ -57,7 +57,7 @@ const moreGuides = computed(() =>
visibleGuides.value.filter(g => stemPosition(g.stem) >= 10));
const matchingTutorials = computed(() => (tutorials.value ?? [])
- .filter(t => Array.isArray(t.stack) && t.stack.includes(props.slug))
+ .filter(t => Array.isArray(t.technologies) && t.technologies.includes(props.slug))
.sort((a, b) => (a.title ?? '').localeCompare(b.title ?? '')));
diff --git a/content.config.ts b/content.config.ts
index ce120679e..29e092975 100644
--- a/content.config.ts
+++ b/content.config.ts
@@ -23,10 +23,6 @@ export default defineContentConfig({
})).optional(),
icon: z.string().optional(),
technologies: z.array(z.string()).optional(),
- stack: z.array(z.string()).optional(),
- features: z.array(z.string()).optional(),
- use_cases: z.array(z.string()).optional(),
- content_type: z.string().optional(),
links: z.array(z.object({
label: z.string(),
icon: z.string(),
diff --git a/content/frameworks/01.nextjs/01.data-fetching.md b/content/frameworks/01.nextjs/01.data-fetching.md
index 63e12f1a1..bcab8f215 100644
--- a/content/frameworks/01.nextjs/01.data-fetching.md
+++ b/content/frameworks/01.nextjs/01.data-fetching.md
@@ -8,12 +8,9 @@ authors:
title: Developer Advocate
technologies:
- nextjs
-stack:
- - nextjs
description: Learn how to integrate Directus in your Next.js web application.
navigation:
title: Data Fetching
-content_type: framework-guide
---
[Next.js](https://nextjs.org/) is a popular JavaScript framework based on React.js. In this tutorial, you will learn how
to build a website using Directus as a [Headless CMS](https://directus.io/solutions/headless-cms). You will store,
diff --git a/content/frameworks/01.nextjs/02.authentication.md b/content/frameworks/01.nextjs/02.authentication.md
index 6ff0d88c9..c4878c2f1 100644
--- a/content/frameworks/01.nextjs/02.authentication.md
+++ b/content/frameworks/01.nextjs/02.authentication.md
@@ -4,15 +4,12 @@ slug: authentication
title: Using Authentication in Next.js
technologies:
- nextjs
-stack:
- - nextjs
authors:
- name: Carmen Huidobro
title: Developer Educator
description: Learn how to setup Directus authentication with Next.js.
navigation:
title: Authentication
-content_type: framework-guide
---
### Introduction
diff --git a/content/frameworks/01.nextjs/10.build-a-cms.md b/content/frameworks/01.nextjs/10.build-a-cms.md
index 651dd53c8..78fd88823 100644
--- a/content/frameworks/01.nextjs/10.build-a-cms.md
+++ b/content/frameworks/01.nextjs/10.build-a-cms.md
@@ -9,11 +9,8 @@ authors:
- name: Kumar Harsh
title: Guest Author
description: Learn how to create a CMS using Directus and Next.js.
-stack:
- - nextjs
navigation:
title: Build a CMS
-content_type: framework-guide
---
Directus provides a headless CMS, which when combined with Next.js will streamline content management. This post covers how to connect them to create a flexible, modern content management system.
diff --git a/content/frameworks/01.nextjs/11.dynamic-forms.md b/content/frameworks/01.nextjs/11.dynamic-forms.md
index cbfca771b..a6cb34336 100644
--- a/content/frameworks/01.nextjs/11.dynamic-forms.md
+++ b/content/frameworks/01.nextjs/11.dynamic-forms.md
@@ -8,11 +8,8 @@ authors:
- name: Kumar Harsh
title: Guest Author
description: Learn how to setup Directus fields with Next.js.
-stack:
- - nextjs
navigation:
title: Dynamic Forms
-content_type: framework-guide
---
Directus' data studio allows you to create data for your collections. You can then leverage these collections with Next.js to generate dynamic and interactive forms for your application.
diff --git a/content/frameworks/01.nextjs/12.dynamic-pages.md b/content/frameworks/01.nextjs/12.dynamic-pages.md
index 389a5b4b3..75ed9d232 100644
--- a/content/frameworks/01.nextjs/12.dynamic-pages.md
+++ b/content/frameworks/01.nextjs/12.dynamic-pages.md
@@ -9,11 +9,8 @@ authors:
- name: Kumar Harsh
title: Guest Author
description: Learn how to create dynamic pages you can use in your CMS using Directus and Next.js.
-stack:
- - nextjs
navigation:
title: Dynamic Pages
-content_type: framework-guide
---
Directus provides a headless CMS, which when combined with Next.js will streamline content management. This post covers how to combine the two to create dynamic pages for a content management system.
diff --git a/content/frameworks/01.nextjs/13.forms.md b/content/frameworks/01.nextjs/13.forms.md
index f81fd66bd..9346ee719 100644
--- a/content/frameworks/01.nextjs/13.forms.md
+++ b/content/frameworks/01.nextjs/13.forms.md
@@ -4,15 +4,12 @@ slug: forms
title: Submit Forms Using Directus and Next.js
technologies:
- nextjs
-stack:
- - nextjs
authors:
- name: Kumar Harsh
title: Guest Author
description: Learn how to submit forms using Directus and Next.js.
navigation:
title: Form Submissions
-content_type: framework-guide
---
Directus provides a headless CMS, which when combined with Next.js will streamline content management. This post covers how to connect them to create and submit forms.
diff --git a/content/frameworks/01.nextjs/14.live-preview.md b/content/frameworks/01.nextjs/14.live-preview.md
index 043c82f04..b20de534c 100644
--- a/content/frameworks/01.nextjs/14.live-preview.md
+++ b/content/frameworks/01.nextjs/14.live-preview.md
@@ -5,15 +5,12 @@ title: Implementing Live Preview in Next.js
technologies:
- nextjs
- directus
-stack:
- - nextjs
authors:
- name: Carmen Huidobro
title: Developer Educator
description: Learn how to setup Directus live preview with Next.js.
navigation:
title: Live Preview
-content_type: framework-guide
---
Live Preview can be enabled in Directus Editor and allows content authors to see their changes directly in the Data Studio. It can be combined with content versioning to preview pre-published content. In this tutorial, you'll learn how to implement Live Preview in your Next.js application.
diff --git a/content/frameworks/01.nextjs/15.live-preview-content-versioning.md b/content/frameworks/01.nextjs/15.live-preview-content-versioning.md
index 6b4bf4990..712d03016 100644
--- a/content/frameworks/01.nextjs/15.live-preview-content-versioning.md
+++ b/content/frameworks/01.nextjs/15.live-preview-content-versioning.md
@@ -5,15 +5,12 @@ slug: live-preview-content-versioning
title: Combine Live Preview and Content Versioning with Next.js
technologies:
- nextjs
-stack:
- - nextjs
authors:
- name: Esther Agbaje
title: Developer Advocate
description: Learn how to set up Live Preview with different content versions in your Next.js application.
navigation:
title: Live Preview and Versions
-content_type: framework-guide
---
Imagine being able to create different versions of your content, and then easily preview them while still in draft mode. With Directus, you can integrate Content Versioning and Live Preview in your Next.js application, making it easier for your team to manage and preview multiple content versions.
diff --git a/content/frameworks/01.nextjs/16.live-preview-draft-mode.md b/content/frameworks/01.nextjs/16.live-preview-draft-mode.md
index 2a3074ab2..910c1b385 100644
--- a/content/frameworks/01.nextjs/16.live-preview-draft-mode.md
+++ b/content/frameworks/01.nextjs/16.live-preview-draft-mode.md
@@ -5,15 +5,12 @@ slug: live-preview-draft-mode
title: Set Up Live Preview with Next.js
technologies:
- nextjs
-stack:
- - nextjs
authors:
- name: Esther Agbaje
title: Developer Advocate
description: Learn how to confgure Live Preview with Next.js' draft mode.
navigation:
title: Draft Mode Preview
-content_type: framework-guide
---
Directus' Live Preview feature allows you to show changes in your website before publishing and without the need to
refresh the browser. This is useful when using Directus as a [Headless CMS](https://directus.io/solutions/headless-cms).
diff --git a/content/frameworks/01.nextjs/17.multilingual-content.md b/content/frameworks/01.nextjs/17.multilingual-content.md
index b6ee87263..114a6c649 100644
--- a/content/frameworks/01.nextjs/17.multilingual-content.md
+++ b/content/frameworks/01.nextjs/17.multilingual-content.md
@@ -3,16 +3,12 @@ stableId: ed2c086a-f490-44ee-8532-fcb4f88b654d
slug: multilingual-content
title: Implementing Multilingual Content using Directus and Next.js
technologies:
-stack:
- - nextjs
- - nextjs
authors:
- name: Kumar Harsh
title: Guest Author
description: Learn how to access multilingual Directus content using Next.js.
navigation:
title: Multilingual Content
-content_type: framework-guide
---
Directus comes with built-in support for creating multilingual content. In this post, you'll learn how to create multilingual content and access it using your Next.js application.
diff --git a/content/frameworks/01.nextjs/18.pagination-infinite-scroll.md b/content/frameworks/01.nextjs/18.pagination-infinite-scroll.md
index 41858e464..e94d0fcf4 100644
--- a/content/frameworks/01.nextjs/18.pagination-infinite-scroll.md
+++ b/content/frameworks/01.nextjs/18.pagination-infinite-scroll.md
@@ -5,15 +5,12 @@ slug: pagination-infinite-scroll
title: Implement Pagination and Infinite Scrolling in Next.js
technologies:
- nextjs
-stack:
- - nextjs
authors:
- name: Taminoturoko Briggs
title: Guest Author
description: Learn various techniques to load paginated data in your Next.js application.
navigation:
title: Pagination
-content_type: framework-guide
---
When working with a large set of data fetching and rendering them at once can cause performance issues for your application, especially for devices with poor internet connections. To prevent this, several techniques are used to fetch and render data in chunks. Two of the most common ones are pagination and infinite scrolling.
diff --git a/content/frameworks/01.nextjs/19.reusable-blocks.md b/content/frameworks/01.nextjs/19.reusable-blocks.md
index 5f7df73d7..1e11b4b9f 100644
--- a/content/frameworks/01.nextjs/19.reusable-blocks.md
+++ b/content/frameworks/01.nextjs/19.reusable-blocks.md
@@ -4,15 +4,12 @@ slug: reusable-blocks
title: Rendering Dynamic Blocks Using Next.js
technologies:
- nextjs
-stack:
- - nextjs
authors:
- name: Kumar Harsh
title: Guest Author
description: Learn how to render dynamic blocks using Next.js.
navigation:
title: Reusable Blocks
-content_type: framework-guide
---
[Having used Directus as a Headless CMS to create individual blocks that can be re-used on different pages](https://directus.io/docs/tutorials/projects/create-reusable-blocks-with-many-to-any-relationships), let's integrate them into a Next.js application.
diff --git a/content/frameworks/01.nextjs/20.visual-editor.md b/content/frameworks/01.nextjs/20.visual-editor.md
index fb6274e20..6d700f341 100644
--- a/content/frameworks/01.nextjs/20.visual-editor.md
+++ b/content/frameworks/01.nextjs/20.visual-editor.md
@@ -4,15 +4,12 @@ slug: visual-editor
title: Integrating the Directus Visual Editor with Next.js
technologies:
- nextjs
-stack:
- - nextjs
authors:
- name: Kumar Harsh
title: Guest Author
description: Learn how to integrate the Directus Visual Editor with Next.js.
navigation:
title: Visual Editor
-content_type: framework-guide
---
The Directus Visual Editor module allows you to edit your content live on your site. This article shows you how to integrate it with an existing CMS setup using Next.js.
diff --git a/content/frameworks/02.nuxt/01.data-fetching.md b/content/frameworks/02.nuxt/01.data-fetching.md
index 53c8bdc5e..58cf9fe57 100644
--- a/content/frameworks/02.nuxt/01.data-fetching.md
+++ b/content/frameworks/02.nuxt/01.data-fetching.md
@@ -8,12 +8,9 @@ authors:
title: Director, Developer Experience
technologies:
- nuxt
-stack:
- - nuxt
description: Learn how to integrate Directus in your Nuxt web application.
navigation:
title: Data Fetching
-content_type: framework-guide
---
[Nuxt](https://nuxt.com/) is a popular JavaScript framework based on Vue.js. In this tutorial, you will learn how to
build a website using Directus as a [Headless CMS](https://directus.io/solutions/headless-cms). You will store,
diff --git a/content/frameworks/02.nuxt/02.authentication.md b/content/frameworks/02.nuxt/02.authentication.md
index 578a1ef0a..619974ade 100644
--- a/content/frameworks/02.nuxt/02.authentication.md
+++ b/content/frameworks/02.nuxt/02.authentication.md
@@ -4,15 +4,12 @@ slug: authentication
title: Using Authentication in Nuxt
technologies:
- nuxt
-stack:
- - nuxt
authors:
- name: Craig Harman
title: Guest Author
description: Learn how to setup Directus authentication with Nuxt.
navigation:
title: Authentication
-content_type: framework-guide
---
### Introduction
diff --git a/content/frameworks/02.nuxt/10.build-a-cms.md b/content/frameworks/02.nuxt/10.build-a-cms.md
index 575c12be9..46ec1ff2c 100644
--- a/content/frameworks/02.nuxt/10.build-a-cms.md
+++ b/content/frameworks/02.nuxt/10.build-a-cms.md
@@ -9,11 +9,8 @@ authors:
- name: Craig Harman
title: Guest Author
description: Learn how to create a CMS using Directus and Nuxt.
-stack:
- - nuxt
navigation:
title: Build a CMS
-content_type: framework-guide
---
Directus provides a headless CMS, which when combined with Nuxt will streamline content management. This post covers how to connect them to create a flexible, modern content management system.
diff --git a/content/frameworks/02.nuxt/11.dynamic-forms.md b/content/frameworks/02.nuxt/11.dynamic-forms.md
index 7b8fee42f..4adce0fba 100644
--- a/content/frameworks/02.nuxt/11.dynamic-forms.md
+++ b/content/frameworks/02.nuxt/11.dynamic-forms.md
@@ -8,11 +8,8 @@ authors:
- name: Craig Harman
title: Guest Author
description: Learn how to setup Directus fields with Nuxt.
-stack:
- - nuxt
navigation:
title: Dynamic Forms
-content_type: framework-guide
---
Directus' data studio allows you to create data for your collections. You can then leverage these collections with Nuxt to generate dynamic and interactive forms for your application.
diff --git a/content/frameworks/02.nuxt/12.dynamic-pages.md b/content/frameworks/02.nuxt/12.dynamic-pages.md
index 04f4c63f1..174d0de2a 100644
--- a/content/frameworks/02.nuxt/12.dynamic-pages.md
+++ b/content/frameworks/02.nuxt/12.dynamic-pages.md
@@ -9,11 +9,8 @@ authors:
- name: Craig Harman
title: Guest Author
description: Learn how to create dynamic pages you can use in your CMS using Directus and Nuxt.
-stack:
- - nuxt
navigation:
title: Dynamic Pages
-content_type: framework-guide
---
Directus provides a headless CMS, which when combined with Nuxt will streamline content management. This post covers how to combine the two to create dynamic pages for a content management system.
diff --git a/content/frameworks/02.nuxt/13.forms.md b/content/frameworks/02.nuxt/13.forms.md
index ebe6b6a53..4edfbe077 100644
--- a/content/frameworks/02.nuxt/13.forms.md
+++ b/content/frameworks/02.nuxt/13.forms.md
@@ -4,15 +4,12 @@ slug: forms
title: Submit Forms Using Directus and Nuxt
technologies:
- nuxt
-stack:
- - nuxt
authors:
- name: Craig Harman
title: Guest Author
description: Learn how to submit forms using Directus and Nuxt.
navigation:
title: Form Submissions
-content_type: framework-guide
---
Directus provides a headless CMS, which when combined with Nuxt will streamline content management. This post covers how to connect them to create and submit forms.
diff --git a/content/frameworks/02.nuxt/14.live-preview.md b/content/frameworks/02.nuxt/14.live-preview.md
index 528d08fa6..941761cef 100644
--- a/content/frameworks/02.nuxt/14.live-preview.md
+++ b/content/frameworks/02.nuxt/14.live-preview.md
@@ -5,15 +5,12 @@ title: Implementing Live Preview in Nuxt
technologies:
- nuxt
- directus
-stack:
- - nuxt
authors:
- name: Craig Harman
title: Guest Author
description: Learn how to setup Directus live preview with Nuxt.
navigation:
title: Live Preview
-content_type: framework-guide
---
Live Preview can be enabled in Directus Editor and allows content authors to see their changes directly in the Data Studio. It can be combined with content versioning to preview pre-published content. In this tutorial, you'll learn how to implement Live Preview in your Nuxt application.
diff --git a/content/frameworks/02.nuxt/15.live-preview-setup.md b/content/frameworks/02.nuxt/15.live-preview-setup.md
index fae9b2918..f392b0799 100644
--- a/content/frameworks/02.nuxt/15.live-preview-setup.md
+++ b/content/frameworks/02.nuxt/15.live-preview-setup.md
@@ -5,15 +5,12 @@ slug: live-preview-setup
title: Set Up Live Preview with Nuxt
technologies:
- nuxt
-stack:
- - nuxt
authors:
- name: Kevin Lewis
title: Director, Developer Experience
description: Learn how to create a Nuxt preview plugin to configure Live Preview.
navigation:
title: Live Preview Setup
-content_type: framework-guide
---
Directus' Live Preview feature allows you to show changes in your website collection before publishing and without the
need to refresh the browser.
diff --git a/content/frameworks/02.nuxt/16.migrate-from-nuxt-content.md b/content/frameworks/02.nuxt/16.migrate-from-nuxt-content.md
index 835d5e499..5034f3d46 100644
--- a/content/frameworks/02.nuxt/16.migrate-from-nuxt-content.md
+++ b/content/frameworks/02.nuxt/16.migrate-from-nuxt-content.md
@@ -5,15 +5,12 @@ slug: migrate-from-nuxt-content
title: Migrate from Nuxt Content to Directus
technologies:
- nuxt
-stack:
- - nuxt
authors:
- name: Kevin Lewis
title: Director, Developer Experience
description: Learn how to move from a flat-file CMS to Directus.
navigation:
title: Nuxt Content Migration
-content_type: framework-guide
---
Away from my day job here at Directus I run a [free library of online content focused around core skills](https://yougotthis.io).
diff --git a/content/frameworks/02.nuxt/17.multilingual-content.md b/content/frameworks/02.nuxt/17.multilingual-content.md
index 37ef14e54..22993cd34 100644
--- a/content/frameworks/02.nuxt/17.multilingual-content.md
+++ b/content/frameworks/02.nuxt/17.multilingual-content.md
@@ -4,15 +4,12 @@ slug: multilingual-content
title: Implementing Multilingual Content using Directus and Nuxt
technologies:
- nuxt
-stack:
- - nuxt
authors:
- name: Craig Harman
title: Guest Author
description: Learn how to access multilingual Directus content using Nuxt.
navigation:
title: Multilingual Content
-content_type: framework-guide
---
Directus comes with built-in support for creating multilingual content. In this post, you'll learn how to create multilingual content and access it using your Nuxt application.
diff --git a/content/frameworks/02.nuxt/18.reusable-blocks.md b/content/frameworks/02.nuxt/18.reusable-blocks.md
index 792ccb460..654590d79 100644
--- a/content/frameworks/02.nuxt/18.reusable-blocks.md
+++ b/content/frameworks/02.nuxt/18.reusable-blocks.md
@@ -4,15 +4,12 @@ slug: reusable-blocks
title: Rendering Dynamic Blocks Using Nuxt
technologies:
- nuxt
-stack:
- - nuxt
authors:
- name: Craig Harman
title: Guest Author
description: Learn how to render dynamic blocks using Nuxt.
navigation:
title: Reusable Blocks
-content_type: framework-guide
---
[Having used Directus as a Headless CMS to create individual blocks that can be re-used on different pages](https://directus.io/docs/tutorials/projects/create-reusable-blocks-with-many-to-any-relationships), let's integrate them into your Nuxt website.
diff --git a/content/frameworks/02.nuxt/19.visual-editor.md b/content/frameworks/02.nuxt/19.visual-editor.md
index 5caf51e86..cc2fe9beb 100644
--- a/content/frameworks/02.nuxt/19.visual-editor.md
+++ b/content/frameworks/02.nuxt/19.visual-editor.md
@@ -4,15 +4,12 @@ slug: visual-editor
title: Integrating the Directus Visual Editor with Nuxt
technologies:
- nuxt
-stack:
- - nuxt
authors:
- name: Craig Harman
title: Guest Author
description: Learn how to integrate the Directus Visual Editor with Nuxt.
navigation:
title: Visual Editor
-content_type: framework-guide
---
The Directus Visual Editor module allows you to edit your content live on your site. This article shows you how to integrate it with an existing CMS setup using Nuxt.
diff --git a/content/frameworks/03.astro/01.data-fetching.md b/content/frameworks/03.astro/01.data-fetching.md
index e382d3298..729f01b41 100644
--- a/content/frameworks/03.astro/01.data-fetching.md
+++ b/content/frameworks/03.astro/01.data-fetching.md
@@ -5,15 +5,12 @@ slug: data-fetching
title: Fetch Data from Directus with Astro
technologies:
- astro
-stack:
- - astro
authors:
- name: Trust Jamin
title: Guest Author
description: Learn how to integrate Directus in your Astro web application.
navigation:
title: Data Fetching
-content_type: framework-guide
---
[Astro](https://astro.build/) is a web framework used for building content-heavy websites. In this tutorial, you will learn how to build a website using Directus as a headless CMS. You will store, retrieve, and use global metadata such as the site title, create new pages dynamically based on Directus items, and build a blog.
diff --git a/content/frameworks/03.astro/02.authentication.md b/content/frameworks/03.astro/02.authentication.md
index 38d1255fc..e8bb46968 100644
--- a/content/frameworks/03.astro/02.authentication.md
+++ b/content/frameworks/03.astro/02.authentication.md
@@ -4,15 +4,12 @@ slug: authentication
title: Using Authentication in Astro
technologies:
- astro
-stack:
- - astro
authors:
- name: Carmen Huidobro
title: Developer Educator
description: Learn how to setup Directus authentication with Astro.
navigation:
title: Authentication
-content_type: framework-guide
---
Authentication is a critical part of any modern web application, ensuring that users can securely access their data and perform authorized actions. In this tutorial, you will learn how to implement authentication in your Astro application using Directus' built-in authentication system.
diff --git a/content/frameworks/03.astro/10.build-a-cms.md b/content/frameworks/03.astro/10.build-a-cms.md
index 829e55239..b543f2287 100644
--- a/content/frameworks/03.astro/10.build-a-cms.md
+++ b/content/frameworks/03.astro/10.build-a-cms.md
@@ -8,11 +8,8 @@ authors:
- name: Carmen Huidobro
title: Developer Educator
description: Learn how to create a CMS using Directus and Astro.
-stack:
- - astro
navigation:
title: Build a CMS
-content_type: framework-guide
---
# Create a CMS using Directus and Astro
diff --git a/content/frameworks/03.astro/11.dynamic-forms.md b/content/frameworks/03.astro/11.dynamic-forms.md
index 607f6ec55..c87530d2d 100644
--- a/content/frameworks/03.astro/11.dynamic-forms.md
+++ b/content/frameworks/03.astro/11.dynamic-forms.md
@@ -8,11 +8,8 @@ authors:
- name: Carmen Huidobro
title: Developer Educator
description: Learn how to setup Directus fields with Astro.
-stack:
- - astro
navigation:
title: Dynamic Forms
-content_type: framework-guide
---
Directus' data studio allows you to create data for your collections. You can then leverage these collections with Astro to generate dynamic and interactive forms for your application.
diff --git a/content/frameworks/03.astro/12.dynamic-pages.md b/content/frameworks/03.astro/12.dynamic-pages.md
index 006ed1d7f..9764aa55b 100644
--- a/content/frameworks/03.astro/12.dynamic-pages.md
+++ b/content/frameworks/03.astro/12.dynamic-pages.md
@@ -8,11 +8,8 @@ authors:
- name: Carmen Huidobro
title: Developer Educator
description: Learn how to create dynamic pages you can use in your CMS using Directus and Astro.
-stack:
- - astro
navigation:
title: Dynamic Pages
-content_type: framework-guide
---
Directus' data studio allows you to create data for your collections. You can then leverage these collections with Astro to generate dynamic and interactive forms for your application.
diff --git a/content/frameworks/03.astro/13.live-preview.md b/content/frameworks/03.astro/13.live-preview.md
index 5e6b85235..25a0eaf81 100644
--- a/content/frameworks/03.astro/13.live-preview.md
+++ b/content/frameworks/03.astro/13.live-preview.md
@@ -5,15 +5,12 @@ title: Implementing Live Preview in Astro
technologies:
- astro
- directus
-stack:
- - astro
authors:
- name: Carmen Huidobro
title: Developer Educator
description: Learn how to setup Directus live preview with Astro.
navigation:
title: Live Preview
-content_type: framework-guide
---
Live Preview can be enabled in Directus Editor and allows content authors to see their changes directly in the Data Studio. It can be combined with content versioning to preview pre-published content. In this tutorial, you'll learn how to implement Live Preview in your Astro application.
diff --git a/content/frameworks/03.astro/14.multilingual-content.md b/content/frameworks/03.astro/14.multilingual-content.md
index 92899d4f8..e2693d8c9 100644
--- a/content/frameworks/03.astro/14.multilingual-content.md
+++ b/content/frameworks/03.astro/14.multilingual-content.md
@@ -4,15 +4,12 @@ slug: multilingual-content
title: Implementing Multilingual Content using Directus and Astro
technologies:
- astro
-stack:
- - astro
authors:
- name: Carmen Huidobro
title: Developer Educator
description: Learn how to access multilingual Directus content using Astro.
navigation:
title: Multilingual Content
-content_type: framework-guide
---
Directus comes with built-in support for creating multilingual content. In this tutorial, you'll learn how to create multilingual content and access it using your Astro application.
diff --git a/content/frameworks/03.astro/15.reusable-blocks.md b/content/frameworks/03.astro/15.reusable-blocks.md
index 1770bb153..727950c65 100644
--- a/content/frameworks/03.astro/15.reusable-blocks.md
+++ b/content/frameworks/03.astro/15.reusable-blocks.md
@@ -4,15 +4,12 @@ slug: reusable-blocks
title: Rendering Dynamic Blocks Using Astro
technologies:
- astro
-stack:
- - astro
authors:
- name: Carmen Huidobro
title: Developer Educator
description: Learn how to render dynamic blocks using Astro.
navigation:
title: Reusable Blocks
-content_type: framework-guide
---
[Having used Directus as a Headless CMS to create individual blocks that can be re-used on different pages](https://directus.io/docs/tutorials/projects/create-reusable-blocks-with-many-to-any-relationships), let's integrate them into our Astro website.
diff --git a/content/frameworks/04.sveltekit/01.data-fetching.md b/content/frameworks/04.sveltekit/01.data-fetching.md
index 6b4b11ab6..1490b3f74 100644
--- a/content/frameworks/04.sveltekit/01.data-fetching.md
+++ b/content/frameworks/04.sveltekit/01.data-fetching.md
@@ -5,15 +5,12 @@ slug: data-fetching
title: Fetch Data from Directus with SvelteKit
technologies:
- sveltekit
-stack:
- - sveltekit
authors:
- name: Eike Thies
title: Guest Author
description: Learn how to integrate Directus in your SvelteKit web application.
navigation:
title: Data Fetching
-content_type: framework-guide
---
[SvelteKit](https://kit.svelte.dev/) is a popular Companion JavaScript Framework to Svelte.js - focusing on creating performant web applications. In this tutorial, you will learn how to build a website using Directus as a CMS. You will store, retrieve, and use global metadata such as the site title, create new pages dynamically based on Directus items, and build a blog.
diff --git a/content/frameworks/04.sveltekit/02.authentication.md b/content/frameworks/04.sveltekit/02.authentication.md
index bc6ea56fa..1dee8f132 100644
--- a/content/frameworks/04.sveltekit/02.authentication.md
+++ b/content/frameworks/04.sveltekit/02.authentication.md
@@ -4,15 +4,12 @@ slug: authentication
title: Using Authentication in SvelteKit
technologies:
- sveltekit
-stack:
- - sveltekit
authors:
- name: Temitope Oyedelde
title: Guest Author
description: Learn how to setup Directus authentication with SvelteKit.
navigation:
title: Authentication
-content_type: framework-guide
---
## Introduction
diff --git a/content/frameworks/04.sveltekit/10.build-a-cms.md b/content/frameworks/04.sveltekit/10.build-a-cms.md
index 575fd06e1..4949465cc 100644
--- a/content/frameworks/04.sveltekit/10.build-a-cms.md
+++ b/content/frameworks/04.sveltekit/10.build-a-cms.md
@@ -9,11 +9,8 @@ authors:
- name: Temitope Oyedelde
title: Guest Author
description: Learn how to create a CMS using Directus and SvelteKit.
-stack:
- - sveltekit
navigation:
title: Build a CMS
-content_type: framework-guide
---
Directus provides a headless CMS, which when combined with SvelteKit will streamline content management. This post covers how to connect them to create a flexible, modern content management system.
diff --git a/content/frameworks/04.sveltekit/11.dynamic-forms.md b/content/frameworks/04.sveltekit/11.dynamic-forms.md
index 26efea5ea..c8f60f088 100644
--- a/content/frameworks/04.sveltekit/11.dynamic-forms.md
+++ b/content/frameworks/04.sveltekit/11.dynamic-forms.md
@@ -8,11 +8,8 @@ authors:
- name: Temitope Oyedelde
title: Guest Author
description: Learn how to setup Directus fields with SvelteKit.
-stack:
- - sveltekit
navigation:
title: Dynamic Forms
-content_type: framework-guide
---
Directus' data studio allows you to create data for your collections. You can then leverage these collections with SvelteKit to generate dynamic and interactive forms for your application.
diff --git a/content/frameworks/04.sveltekit/12.dynamic-pages.md b/content/frameworks/04.sveltekit/12.dynamic-pages.md
index b69646c70..a44fb8cc8 100644
--- a/content/frameworks/04.sveltekit/12.dynamic-pages.md
+++ b/content/frameworks/04.sveltekit/12.dynamic-pages.md
@@ -9,11 +9,8 @@ authors:
- name: Temitope Oyedelde
title: Guest Author
description: Learn how to create dynamic pages you can use in your CMS using Directus and SvelteKit.
-stack:
- - sveltekit
navigation:
title: Dynamic Pages
-content_type: framework-guide
---
Directus provides a headless CMS, which, when combined with SvelteKit, will streamline content management. This post covers how to combine the two to create dynamic pages for a content management system.
diff --git a/content/frameworks/04.sveltekit/13.forms.md b/content/frameworks/04.sveltekit/13.forms.md
index bd5411591..79f822fa0 100644
--- a/content/frameworks/04.sveltekit/13.forms.md
+++ b/content/frameworks/04.sveltekit/13.forms.md
@@ -4,15 +4,12 @@ slug: forms
title: Submit Forms Using Directus and SvelteKit
technologies:
- sveltekit
-stack:
- - sveltekit
authors:
- name: Temitope Oyedelde
title: Guest Author
description: Learn how to submit forms using Directus and SvelteKit.
navigation:
title: Form Submissions
-content_type: framework-guide
---
Directus provides a headless CMS, which when combined with SvelteKit will streamline content management. This post covers how to connect them to create and submit forms.
diff --git a/content/frameworks/04.sveltekit/14.internationalization.md b/content/frameworks/04.sveltekit/14.internationalization.md
index 6e1d2c933..644349e0c 100644
--- a/content/frameworks/04.sveltekit/14.internationalization.md
+++ b/content/frameworks/04.sveltekit/14.internationalization.md
@@ -5,15 +5,12 @@ slug: internationalization
title: Implement Multilingual Content with Directus and SvelteKit
technologies:
- sveltekit
-stack:
- - sveltekit
authors:
- name: Ekekenta Clinton
title: Guest Author
description: Learn how to handle internationalization in your SvelteKit application.
navigation:
title: Internationalization
-content_type: framework-guide
---
## Before You Start
diff --git a/content/frameworks/04.sveltekit/15.live-preview.md b/content/frameworks/04.sveltekit/15.live-preview.md
index 3e7eaae15..6afb67711 100644
--- a/content/frameworks/04.sveltekit/15.live-preview.md
+++ b/content/frameworks/04.sveltekit/15.live-preview.md
@@ -5,15 +5,12 @@ title: Implementing Live Preview in SvelteKit
technologies:
- sveltekit
- directus
-stack:
- - sveltekit
authors:
- name: Temitope Oyedelde
title: Guest Author
description: Learn how to setup Directus live preview with SvelteKit.
navigation:
title: Live Preview
-content_type: framework-guide
---
Live Preview can be enabled in Directus Editor and allows content authors to see their changes directly in the Data Studio. It can be combined with content versioning to preview pre-published content. In this tutorial, you'll learn how to implement Live Preview in your SvelteKit application.
diff --git a/content/frameworks/04.sveltekit/16.multilingual-content.md b/content/frameworks/04.sveltekit/16.multilingual-content.md
index d4b0f6448..3357846c1 100644
--- a/content/frameworks/04.sveltekit/16.multilingual-content.md
+++ b/content/frameworks/04.sveltekit/16.multilingual-content.md
@@ -4,15 +4,12 @@ slug: multilingual-content
title: Implementing Multilingual Content using Directus and SvelteKit
technologies:
- sveltekit
-stack:
- - sveltekit
authors:
- name: Temitope Oyedelde
title: Guest Author
description: Learn how to access multilingual Directus content using SvelteKit.
navigation:
title: Multilingual Content
-content_type: framework-guide
---
Directus comes with built-in support for creating multilingual content. In this post, you'll learn how to create multilingual content and access it using your SvelteKit application.
diff --git a/content/frameworks/04.sveltekit/17.reusable-blocks.md b/content/frameworks/04.sveltekit/17.reusable-blocks.md
index 73cadc7f9..a6c4d4cc2 100644
--- a/content/frameworks/04.sveltekit/17.reusable-blocks.md
+++ b/content/frameworks/04.sveltekit/17.reusable-blocks.md
@@ -4,15 +4,12 @@ slug: reusable-blocks
title: Rendering Dynamic Blocks Using SvelteKit
technologies:
- sveltekit
-stack:
- - sveltekit
authors:
- name: Temitope Oyedelde
title: Guest Author
description: Learn how to render dynamic blocks using SvelteKit.
navigation:
title: Reusable Blocks
-content_type: framework-guide
---
[Having used Directus as a Headless CMS to create individual blocks that can be re-used on different pages](https://directus.io/docs/tutorials/projects/create-reusable-blocks-with-many-to-any-relationships), let's integrate them into our Svelte website.
diff --git a/content/frameworks/04.sveltekit/18.visual-editor.md b/content/frameworks/04.sveltekit/18.visual-editor.md
index 0525d0a7c..815869bef 100644
--- a/content/frameworks/04.sveltekit/18.visual-editor.md
+++ b/content/frameworks/04.sveltekit/18.visual-editor.md
@@ -4,15 +4,12 @@ slug: visual-editor
title: Integrating the Directus Visual Editor with SvelteKit
technologies:
- sveltekit
-stack:
- - sveltekit
authors:
- name: Temitope Oyedelde
title: Guest Author
description: Learn how to integrate the Directus Visual Editor with SvelteKit.
navigation:
title: Visual Editor
-content_type: framework-guide
---
The Directus Visual Editor module allows you to edit your content live on your site. This article shows you how to integrate it with an existing CMS setup using SvelteKit.
diff --git a/content/frameworks/05.react/02.authentication.md b/content/frameworks/05.react/02.authentication.md
index 1d14f6fc0..9ef737614 100644
--- a/content/frameworks/05.react/02.authentication.md
+++ b/content/frameworks/05.react/02.authentication.md
@@ -4,15 +4,12 @@ slug: authentication
title: Using Authentication in React
technologies:
- react
-stack:
- - react
authors:
- name: Kumar Harsh
title: Guest Author
description: Learn how to setup Directus authentication with React.
navigation:
title: Authentication
-content_type: framework-guide
---
Authentication is a critical part of any modern web application, ensuring that users can securely access their data and perform authorized actions. In this tutorial, you will learn how to implement authentication in your React application using Directus' built-in authentication system.
diff --git a/content/frameworks/05.react/10.live-preview.md b/content/frameworks/05.react/10.live-preview.md
index a602e5300..8610bfc8e 100644
--- a/content/frameworks/05.react/10.live-preview.md
+++ b/content/frameworks/05.react/10.live-preview.md
@@ -4,15 +4,12 @@ slug: live-preview
title: Implementing Live Preview in React
technologies:
- react
-stack:
- - react
authors:
- name: Kumar Harsh
title: Guest Author
description: Learn how to setup Directus live preview with React.
navigation:
title: Live Preview
-content_type: framework-guide
---
Live Preview can be enabled in Directus Editor and allows content authors to see their changes directly in the Data Studio. It can be combined with content versioning to preview pre-published content. In this tutorial, you'll learn how to implement Live Preview in your React application.
diff --git a/content/frameworks/06.angular/01.data-fetching.md b/content/frameworks/06.angular/01.data-fetching.md
index a1d50d878..1fad05fbb 100644
--- a/content/frameworks/06.angular/01.data-fetching.md
+++ b/content/frameworks/06.angular/01.data-fetching.md
@@ -5,15 +5,12 @@ slug: data-fetching
title: Fetch Data from Directus with Angular
technologies:
- angular
-stack:
- - angular
authors:
- name: David Mbochi
title: Guest Author
description: Learn how to integrate Directus in your Angular web application.
navigation:
title: Data Fetching
-content_type: framework-guide
---
[Angular](https://angular.dev/) is a popular front-end web framework. In this tutorial, you will use the framework to implement the front-end for the Directus headless CMS. You will implement a blog that loads blog posts dynamically and also serves global metadata.
diff --git a/content/frameworks/07.laravel/01.data-fetching.md b/content/frameworks/07.laravel/01.data-fetching.md
index d6371ff52..3cadf81c7 100644
--- a/content/frameworks/07.laravel/01.data-fetching.md
+++ b/content/frameworks/07.laravel/01.data-fetching.md
@@ -4,16 +4,12 @@ id: 9a8f3c14-f969-4d2a-9b00-5b22f5dcdc33
slug: data-fetching
title: Fetch Data from Directus with Laravel
technologies:
-stack:
- - laravel
- - laravel
authors:
- name: Ekekenta Clinton
title: Guest Author
description: Learn how to integrate Directus in your Laravel web application.
navigation:
title: Data Fetching
-content_type: framework-guide
---
In this tutorial, you will learn how to build a website using Directus as a Headless CMS. You will store, retrieve, and use global metadata such as the site title, create new pages dynamically based on Directus items, and build a blog.
diff --git a/content/frameworks/08.django/01.data-fetching.md b/content/frameworks/08.django/01.data-fetching.md
index f8367b8d4..ec64704f5 100644
--- a/content/frameworks/08.django/01.data-fetching.md
+++ b/content/frameworks/08.django/01.data-fetching.md
@@ -5,15 +5,12 @@ slug: data-fetching
title: Fetch Data from Directus with Django
technologies:
- django
-stack:
- - django
authors:
- name: Omu Inetimi
title: Guest Author
description: Learn how to integrate Directus in your Django web application.
navigation:
title: Data Fetching
-content_type: framework-guide
---
Django is a popular Python framework known for its "battery included" philosophy. In this tutorial, you will learn how to integrate Django with Directus, and build an application that uses the Django templating engine to display data from the API.
diff --git a/content/frameworks/09.flask/01.data-fetching.md b/content/frameworks/09.flask/01.data-fetching.md
index 081aa4581..b0839a291 100644
--- a/content/frameworks/09.flask/01.data-fetching.md
+++ b/content/frameworks/09.flask/01.data-fetching.md
@@ -5,15 +5,12 @@ slug: data-fetching
title: Fetch Data from Directus with Flask
technologies:
- flask
-stack:
- - flask
authors:
- name: Guilherme Souza
title: Guest Author
description: Learn how to integrate Directus in your Flask web application.
navigation:
title: Data Fetching
-content_type: framework-guide
---
[Flask](https://flask.palletsprojects.com/en/3.0.x/) is a minimal Python framework used to build web applications. In this tutorial, you will store, retrieve, and use global metadata, pages, and posts based on a Directus project.
diff --git a/content/frameworks/10.spring-boot/01.data-fetching.md b/content/frameworks/10.spring-boot/01.data-fetching.md
index e8079068f..efb5cbb14 100644
--- a/content/frameworks/10.spring-boot/01.data-fetching.md
+++ b/content/frameworks/10.spring-boot/01.data-fetching.md
@@ -5,15 +5,12 @@ slug: data-fetching
title: Fetch Data from Directus with Spring Boot
technologies:
- spring-boot
-stack:
- - spring-boot
authors:
- name: David Mbochi
title: Guest Author
description: Learn how to integrate Directus in your Spring Boot web application.
navigation:
title: Data Fetching
-content_type: framework-guide
---
This tutorial will show you how to integrate Spring Boot in Directus. At the end of this tutorial, you will have an application that uses Thymeleaf templating engine to display the data from the Directus API.
diff --git a/content/frameworks/11.flutter/01.data-fetching.md b/content/frameworks/11.flutter/01.data-fetching.md
index a8b0960af..47c3f0dfd 100644
--- a/content/frameworks/11.flutter/01.data-fetching.md
+++ b/content/frameworks/11.flutter/01.data-fetching.md
@@ -8,12 +8,9 @@ authors:
title: Guest Author
technologies:
- flutter
-stack:
- - flutter
description: Learn how to integrate Directus in your Flutter app with Dart.
navigation:
title: Data Fetching
-content_type: framework-guide
---
## Before You Start
You will need:
diff --git a/content/frameworks/12.swift/01.data-fetching.md b/content/frameworks/12.swift/01.data-fetching.md
index 54b1d665f..d8ee9b3a1 100644
--- a/content/frameworks/12.swift/01.data-fetching.md
+++ b/content/frameworks/12.swift/01.data-fetching.md
@@ -5,15 +5,12 @@ slug: data-fetching
title: Fetch Data from Directus in iOS with Swift
technologies:
- swift
-stack:
- - swift
authors:
- name: Harshpal Bhirth
title: Guest Author
description: Learn how to integrate Directus in your iOS app with Swift.
navigation:
title: Data Fetching
-content_type: framework-guide
---
In this tutorial, you will learn how to configure an iOS project to fetch and showcase posts in your SwiftUI-based app.
diff --git a/content/frameworks/12.swift/02.authentication.md b/content/frameworks/12.swift/02.authentication.md
index 6074ff5c1..2f16894fc 100644
--- a/content/frameworks/12.swift/02.authentication.md
+++ b/content/frameworks/12.swift/02.authentication.md
@@ -4,16 +4,12 @@ id: b16741fd-aa1d-48ea-8856-df9a9ae9e0d6
slug: authentication
title: Implement Directus Auth with iOS
technologies:
-stack:
- - swift
- - swift
authors:
- name: Harshpal Bhirth
title: Guest Author
description: Learn how to register, login, and protect content in your iOS app.
navigation:
title: Authentication
-content_type: framework-guide
---
In this tutorial, you will learn how to configure an iOS project with Directus Auth. You'll cover registering, logging in, logging out, viewing all posts from all users, creating a post, and editing and deleting posts from your user account.
diff --git a/content/frameworks/13.kotlin/01.data-fetching.md b/content/frameworks/13.kotlin/01.data-fetching.md
index 99b6d21c4..57a6eca1f 100644
--- a/content/frameworks/13.kotlin/01.data-fetching.md
+++ b/content/frameworks/13.kotlin/01.data-fetching.md
@@ -5,15 +5,12 @@ slug: data-fetching
title: Fetch Data from Directus in Android with Kotlin
technologies:
- kotlin
-stack:
- - kotlin
authors:
- name: Ekekenta Clinton
title: Guest Author
description: Learn how to integrate Directus in your Android app with Kotlin.
navigation:
title: Data Fetching
-content_type: framework-guide
---
In this tutorial, you will learn how to set up an Android project with Kotlin and Directus. We'll cover initializing the project, creating a helper library for the Directus SDK, setting up global configurations, and creating dynamic pages, including a blog listing and a blog single view.
diff --git a/content/frameworks/14.eleventy/01.data-fetching.md b/content/frameworks/14.eleventy/01.data-fetching.md
index e11e007b4..f46b58451 100644
--- a/content/frameworks/14.eleventy/01.data-fetching.md
+++ b/content/frameworks/14.eleventy/01.data-fetching.md
@@ -4,8 +4,6 @@ id: b847e493-5a35-49e1-80b1-3dc2657a0f7d
slug: data-fetching
technologies:
- eleventy
-stack:
- - eleventy
title: Fetch Data from Directus with Eleventy 3
authors:
- name: Kevin Lewis
@@ -13,7 +11,6 @@ authors:
description: Learn how to integrate Directus in your 11ty web application.
navigation:
title: Data Fetching
-content_type: framework-guide
---
Eleventy (sometimes referred to 11ty) is a lightweight and unopinionated static site generator. You can use any templating language, and it ships with zero client-side JavaScript by default. In this guide, you will learn how to build a website with Directus as a Headless CMS.
diff --git a/content/frameworks/15.solidstart/01.data-fetching.md b/content/frameworks/15.solidstart/01.data-fetching.md
index 274f4ad8c..0492b94e5 100644
--- a/content/frameworks/15.solidstart/01.data-fetching.md
+++ b/content/frameworks/15.solidstart/01.data-fetching.md
@@ -5,15 +5,12 @@ slug: data-fetching
title: Fetch Data from Directus with SolidStart
technologies:
- solidstart
-stack:
- - solidstart
authors:
- name: Atila Fassina
title: Guest Author
description: Learn how to integrate Directus in your SolidStart web application.
navigation:
title: Data Fetching
-content_type: framework-guide
---
[SolidStart](https://start.solidjs.com) a meta-framework built around [SolidJS](https://solidjs.com) - SolidStart is a framework aiming to allow people and teams to built high-end applications without being too opinionated. In this tutorial, you will learn how to build a website using Directus as a CMS. You will store, retrieve, and use global metadata such as the site title, create new pages dynamically based on Directus items, and build a blog.
diff --git a/content/tutorials/2.projects/build-a-multi-user-chat-with-javascript-and-directus-realtime.md b/content/tutorials/2.projects/build-a-multi-user-chat-with-javascript-and-directus-realtime.md
index db87ad8b6..d9dafaf91 100644
--- a/content/tutorials/2.projects/build-a-multi-user-chat-with-javascript-and-directus-realtime.md
+++ b/content/tutorials/2.projects/build-a-multi-user-chat-with-javascript-and-directus-realtime.md
@@ -4,13 +4,11 @@ id: 1fdbc354-3c98-458e-97f6-587eccab6c16
slug: build-a-multi-user-chat-with-javascript-and-directus-realtime
title: Build a Multi-User Chat with JavaScript and Directus Realtime
technologies:
- - vanilla
+ - javascript
authors:
- name: Kevin Lewis
title: Director, Developer Experience
description: Learn how to send and receive data over a realtime connection with JavaScript.
-stack:
- - vanillajs
---
In this guide, you will build a multi-user chat application with Directus’ WebSockets interface that authenticate users
with an existing account, show historical messages stored in Directus, allow users to send new messages, and immediately
diff --git a/content/tutorials/2.projects/build-a-multi-user-chat-with-react-and-directus-realtime.md b/content/tutorials/2.projects/build-a-multi-user-chat-with-react-and-directus-realtime.md
index 7a47dc89f..b58298da0 100644
--- a/content/tutorials/2.projects/build-a-multi-user-chat-with-react-and-directus-realtime.md
+++ b/content/tutorials/2.projects/build-a-multi-user-chat-with-react-and-directus-realtime.md
@@ -9,8 +9,6 @@ authors:
- name: Esther Agbaje
title: Developer Advocate
description: Learn how to send and receive data over a realtime connection in React applications.
-stack:
- - react
---
In this guide, you will build a multi-user chat application with Directus’ WebSockets interface that authenticates users
with an existing account, shows historical messages stored in Directus, allows users to send new messages, and
diff --git a/content/tutorials/2.projects/build-a-multi-user-chat-with-vue-js-and-directus-realtime.md b/content/tutorials/2.projects/build-a-multi-user-chat-with-vue-js-and-directus-realtime.md
index 9ac28dec6..8dc20f72f 100644
--- a/content/tutorials/2.projects/build-a-multi-user-chat-with-vue-js-and-directus-realtime.md
+++ b/content/tutorials/2.projects/build-a-multi-user-chat-with-vue-js-and-directus-realtime.md
@@ -9,8 +9,6 @@ authors:
- name: Kevin Lewis
title: Director, Developer Experience
description: Learn how to send and receive data over a realtime connection in a Vue.js application.
-stack:
- - vue
---
In this guide, you will build a multi-user chat application with Directus’ WebSockets interface that authenticate users
with an existing account, show historical messages stored in Directus, allow users to send new messages, and immediately
diff --git a/content/tutorials/2.projects/build-a-notebook-chrome-extension-with-directus-auth.md b/content/tutorials/2.projects/build-a-notebook-chrome-extension-with-directus-auth.md
index fc8c5c2e4..257ccf4ab 100644
--- a/content/tutorials/2.projects/build-a-notebook-chrome-extension-with-directus-auth.md
+++ b/content/tutorials/2.projects/build-a-notebook-chrome-extension-with-directus-auth.md
@@ -3,14 +3,10 @@ stableId: c0d7f6bc-bdc0-418e-880a-3c9887a23078
id: e974c49f-cd78-4cf0-8cfe-72f650346c80
slug: build-a-notebook-chrome-extension-with-directus-auth
title: Build a Notebook Chrome Extension with Directus Auth
-technologies:
- - chrome
authors:
- name: Jay Bharadia
title: Guest Author
description: Learn to build and integrate a Chrome Extension with Directus Auth.
-stack:
- - vanillajs
---
This article will guide you through building a Chrome extension using Vite and Directus. The extension will leverage Directus as the backend to store and manage data.
diff --git a/content/tutorials/2.projects/build-a-realtime-chat-app-using-directus-and-astro.md b/content/tutorials/2.projects/build-a-realtime-chat-app-using-directus-and-astro.md
index 41468f3dc..22cc4c8b0 100644
--- a/content/tutorials/2.projects/build-a-realtime-chat-app-using-directus-and-astro.md
+++ b/content/tutorials/2.projects/build-a-realtime-chat-app-using-directus-and-astro.md
@@ -8,8 +8,6 @@ authors:
- name: Carmen Huidobro
title: Developer Educator
description: Learn how to setup Directus realtime with Astro.
-stack:
- - astro
---
Directus offers realtime capabilities powered by WebSockets. You can use these with the Directus SDK to create your own realtime applications. In this tutorial, you will build a chat application using Astro and a Directus project.
diff --git a/content/tutorials/2.projects/build-a-realtime-chat-app-using-directus-and-nuxt.md b/content/tutorials/2.projects/build-a-realtime-chat-app-using-directus-and-nuxt.md
index 422a4f1e1..72e35c03c 100644
--- a/content/tutorials/2.projects/build-a-realtime-chat-app-using-directus-and-nuxt.md
+++ b/content/tutorials/2.projects/build-a-realtime-chat-app-using-directus-and-nuxt.md
@@ -8,8 +8,6 @@ authors:
- name: Craig Harman
title: Guest Author
description: Learn how to setup Directus realtime with Nuxt.
-stack:
- - nuxt
---
Directus offers realtime capabilities, powered by websockets. You can use these with the Directus SDK to create your own realtime applications. In this tutorial, you will build a chat application using Nuxt and a Directus project.
a
diff --git a/content/tutorials/2.projects/build-a-realtime-chat-app-with-directus-and-next.md b/content/tutorials/2.projects/build-a-realtime-chat-app-with-directus-and-next.md
index a79bd2c99..17c2ffd59 100644
--- a/content/tutorials/2.projects/build-a-realtime-chat-app-with-directus-and-next.md
+++ b/content/tutorials/2.projects/build-a-realtime-chat-app-with-directus-and-next.md
@@ -8,8 +8,6 @@ authors:
- name: Kumar Harsh
title: Guest Author
description: Learn how to setup Directus realtime with Next.js.
-stack:
- - nextjs
---
Directus offers realtime capabilities, powered by websockets. You can use these with the Directus SDK to create your own realtime applications. In this tutorial, you will build a chat application using Next.js and a Directus project.
diff --git a/content/tutorials/2.projects/build-a-realtime-chat-app-with-directus-and-sveltekit.md b/content/tutorials/2.projects/build-a-realtime-chat-app-with-directus-and-sveltekit.md
index 46ab32ac5..293cc2795 100644
--- a/content/tutorials/2.projects/build-a-realtime-chat-app-with-directus-and-sveltekit.md
+++ b/content/tutorials/2.projects/build-a-realtime-chat-app-with-directus-and-sveltekit.md
@@ -8,8 +8,6 @@ authors:
- name: Temitope Oyedelde
title: Guest Author
description: Learn how to setup Directus realtime with SvelteKit.
-stack:
- - sveltekit
---
Directus offers real-time capabilities powered by WebSockets. You can use these with the Directus SDK to create your own real-time applications. In this tutorial, you will build a chat application using SvelteKit and a Directus project.
diff --git a/content/tutorials/2.projects/build-a-testimonial-widget-with-sveltekit-and-directus.md b/content/tutorials/2.projects/build-a-testimonial-widget-with-sveltekit-and-directus.md
index 99648a100..54df6abf5 100644
--- a/content/tutorials/2.projects/build-a-testimonial-widget-with-sveltekit-and-directus.md
+++ b/content/tutorials/2.projects/build-a-testimonial-widget-with-sveltekit-and-directus.md
@@ -9,8 +9,6 @@ authors:
- name: Quadri Sheriff
title: Guest Author
description: Learn how to set up a testimonial widget using SvelteKit and Directus.
-stack:
- - sveltekit
---
In this tutorial, we will setup a testimonial widget using SvelteKit and Directus as a backend.
diff --git a/content/tutorials/2.projects/build-a-user-feedback-widget-with-vue-js-.md b/content/tutorials/2.projects/build-a-user-feedback-widget-with-vue-js-.md
index f2b4a40b8..d8b775602 100644
--- a/content/tutorials/2.projects/build-a-user-feedback-widget-with-vue-js-.md
+++ b/content/tutorials/2.projects/build-a-user-feedback-widget-with-vue-js-.md
@@ -9,8 +9,6 @@ authors:
- name: Bryant Gillespie
title: Growth Engineer
description: Learn how we built our docs feedback widget with Directus.
-stack:
- - vue
---
One of our DevRel initiatives at Directus is constantly improving our documentation. As a small team with finite time and resources, we rely a lot on user feedback to help guide our writing efforts. But we were missing the most important bit there – your feedback.
diff --git a/content/tutorials/2.projects/build-a-video-streaming-app-with-sveltekit-and-directus.md b/content/tutorials/2.projects/build-a-video-streaming-app-with-sveltekit-and-directus.md
index e2e9d71e7..dac11da8a 100644
--- a/content/tutorials/2.projects/build-a-video-streaming-app-with-sveltekit-and-directus.md
+++ b/content/tutorials/2.projects/build-a-video-streaming-app-with-sveltekit-and-directus.md
@@ -9,8 +9,6 @@ authors:
- name: Clara Ekekenta
title: Guest Author
description: Learn how to store and retrieve video metadata, and then build a streaming application.
-stack:
- - sveltekit
---
In this tutorial, you will learn how to build an application using Directus as a backend. You will store and retrieve video metadata in a Directus project as a content management system, and use them to build a video streaming application that tracks views.
diff --git a/content/tutorials/2.projects/build-an-ecommerce-platform-with-next-js-stripe-and-directus-automate.md b/content/tutorials/2.projects/build-an-ecommerce-platform-with-next-js-stripe-and-directus-automate.md
index fc6ae90ac..e1f1872de 100644
--- a/content/tutorials/2.projects/build-an-ecommerce-platform-with-next-js-stripe-and-directus-automate.md
+++ b/content/tutorials/2.projects/build-an-ecommerce-platform-with-next-js-stripe-and-directus-automate.md
@@ -9,8 +9,6 @@ authors:
- name: Trust Jamin
title: Guest Author
description: Learn to integrate Stripe with Directus Flows to build an e-commerce website.
-stack:
- - nextjs
---
E-commerce websites are among the most popular for businesses as they enable customers to purchase items from your store from the comfort of their homes. In this article, you'll build an e-commerce store with Next.js as its front end, Directus as its backend services, and Stripe for payment processing.
diff --git a/content/tutorials/2.projects/build-an-hotel-booking-platform-with-next-js-stripe-and-directus-automate.md b/content/tutorials/2.projects/build-an-hotel-booking-platform-with-next-js-stripe-and-directus-automate.md
index 427ed1e26..18fdcdd83 100644
--- a/content/tutorials/2.projects/build-an-hotel-booking-platform-with-next-js-stripe-and-directus-automate.md
+++ b/content/tutorials/2.projects/build-an-hotel-booking-platform-with-next-js-stripe-and-directus-automate.md
@@ -9,8 +9,6 @@ authors:
- name: Trust Jamin
title: Guest Author
description: Learn to build a hotel booking site with dynamic availability and payments via Stripe.
-stack:
- - nextjs
---
In this tutorial, you will build a fully functional hotel booking website, using Next.js for the frontend, Directus as the backend service and Stripe for receiving payments.
diff --git a/content/tutorials/2.projects/create-reusable-blocks-with-many-to-any-relationships.md b/content/tutorials/2.projects/create-reusable-blocks-with-many-to-any-relationships.md
index 961bac2fb..5c61e5dc6 100644
--- a/content/tutorials/2.projects/create-reusable-blocks-with-many-to-any-relationships.md
+++ b/content/tutorials/2.projects/create-reusable-blocks-with-many-to-any-relationships.md
@@ -9,8 +9,6 @@ authors:
- name: Bryant Gillespie
title: Growth Engineer
description: Learn how to data model for multiple, repeating sections of content.
-stack:
- - db
---
Many websites are made of common, repeating sections or groups of content.
diff --git a/content/tutorials/2.projects/how-i-built-an-ai-open-source-santa-roast-app-with-directus-and-nuxt.md b/content/tutorials/2.projects/how-i-built-an-ai-open-source-santa-roast-app-with-directus-and-nuxt.md
index b58376f12..fc82f2419 100644
--- a/content/tutorials/2.projects/how-i-built-an-ai-open-source-santa-roast-app-with-directus-and-nuxt.md
+++ b/content/tutorials/2.projects/how-i-built-an-ai-open-source-santa-roast-app-with-directus-and-nuxt.md
@@ -9,8 +9,6 @@ authors:
- name: Bryant Gillespie
title: Growth Engineer
description: Bryant breaks down how he built an AI-powered app that roasts developers based on their GitHub contributions.
-stack:
- - nuxt
---
Hey folks! Bryant here from Directus. In this post, I’ll walk you through our [Salty Open Source Santa](https://salty-santa.vercel.app) project - how we built it, why we built it, and all the fun little features we packed into this thing. Let's dive in!
diff --git a/content/tutorials/3.tips-and-tricks/configure-okta-as-a-single-sign-on-provider.md b/content/tutorials/3.tips-and-tricks/configure-okta-as-a-single-sign-on-provider.md
index bd2c19485..6c20cce4b 100644
--- a/content/tutorials/3.tips-and-tricks/configure-okta-as-a-single-sign-on-provider.md
+++ b/content/tutorials/3.tips-and-tricks/configure-okta-as-a-single-sign-on-provider.md
@@ -9,8 +9,6 @@ authors:
- name: Maksym Yakubov
title: Guest Author
description: Learn how to set up Okta SSO with the SAML authentication mechanism.
-stack:
- - okta
---
Directus has an excellent built-in implementation of Single Sign-On (SSO) across a variety of standards, with adapters for a large number of providers. However, tweaking it all together to make it work like a charm can be tricky.
diff --git a/content/tutorials/3.tips-and-tricks/understanding-kubernetes.md b/content/tutorials/3.tips-and-tricks/understanding-kubernetes.md
index 655ce9286..c1fc55ac8 100644
--- a/content/tutorials/3.tips-and-tricks/understanding-kubernetes.md
+++ b/content/tutorials/3.tips-and-tricks/understanding-kubernetes.md
@@ -9,8 +9,6 @@ authors:
- name: Eike Thies
title: Guest Author
description: Learn about key Kubernetes concepts and how they interact with each other.
-stack:
- - kubernetes
---
While running applications in Docker containers may not seem to complex, the reality of multi-container setups — like needing a database, secrets, hosts, backups, updates, and more — can get quite messy. This is where an orchestrator comes in.
diff --git a/content/tutorials/4.migration/migrate-from-notion-to-directus.md b/content/tutorials/4.migration/migrate-from-notion-to-directus.md
index 39655f082..413201543 100644
--- a/content/tutorials/4.migration/migrate-from-notion-to-directus.md
+++ b/content/tutorials/4.migration/migrate-from-notion-to-directus.md
@@ -9,8 +9,6 @@ authors:
- name: Esther Agbaje
title: Developer Advocate
description: Learn how to migrate data from Notion databases to Directus.
-stack:
- - notion
---
As a developer advocate and freelance coach, I share valuable content with my audience via my [blog](https://thefreelancehq.com/blog). When creating the blog, I needed a [Headless CMS](https://directus.io/solutions/headless-cms) that would integrate nicely with a Next.js Pages directory and make it easy to manage content. Notion was a great choice then, so I opted for it.
diff --git a/content/tutorials/4.migration/migrate-from-wordpress-to-directus.md b/content/tutorials/4.migration/migrate-from-wordpress-to-directus.md
index 00476c872..8fa64b8ed 100644
--- a/content/tutorials/4.migration/migrate-from-wordpress-to-directus.md
+++ b/content/tutorials/4.migration/migrate-from-wordpress-to-directus.md
@@ -9,8 +9,6 @@ authors:
- name: Muhammed Ali
title: Guest Author
description: Learn how to migrate posts and images to Directus, with tips on plugins.
-stack:
- - wordpress
---
If you are considering transitioning your content management system from WordPress to Directus, this tutorial is for you. By the end, you will understand the process in migrating content, data, and other functionality from WordPress to Directus.
diff --git a/content/tutorials/5.extensions/create-new-customers-in-stripe-in-a-custom-hook.md b/content/tutorials/5.extensions/create-new-customers-in-stripe-in-a-custom-hook.md
index 3282f4cff..a1e0fe78b 100644
--- a/content/tutorials/5.extensions/create-new-customers-in-stripe-in-a-custom-hook.md
+++ b/content/tutorials/5.extensions/create-new-customers-in-stripe-in-a-custom-hook.md
@@ -9,8 +9,6 @@ authors:
- name: Tim Butterfield
title: Guest Author
description: Learn how to use the Stripe SDK to create data when actions occur in Directus.
-stack:
- - stripe
---
Hooks allow you to trigger your own code under certain conditions. This tutorial will show you how to create a Stripe
account when an item is created in Directus and write the customer ID back to the record.
diff --git a/content/tutorials/5.extensions/display-external-api-data-from-vonage-in-custom-panels.md b/content/tutorials/5.extensions/display-external-api-data-from-vonage-in-custom-panels.md
index 74f8fd84c..639125703 100644
--- a/content/tutorials/5.extensions/display-external-api-data-from-vonage-in-custom-panels.md
+++ b/content/tutorials/5.extensions/display-external-api-data-from-vonage-in-custom-panels.md
@@ -9,8 +9,6 @@ authors:
- name: Tim Butterfield
title: Guest Author
description: Learn how to display records from external systems in Directus Insights.
-stack:
- - vonage
---
Panels are used in dashboards as part of the Insights module, and typically allow users to better-understand data held
in their Directus collections. In this guide, you will instead fetch data from an external API and display it in a table
diff --git a/content/tutorials/5.extensions/integrate-algolia-indexing-with-custom-hooks.md b/content/tutorials/5.extensions/integrate-algolia-indexing-with-custom-hooks.md
index 65147c8dd..dfc50a885 100644
--- a/content/tutorials/5.extensions/integrate-algolia-indexing-with-custom-hooks.md
+++ b/content/tutorials/5.extensions/integrate-algolia-indexing-with-custom-hooks.md
@@ -9,8 +9,6 @@ authors:
- name: Marvel Ken-Anele
title: Guest Author
description: Learn how to maintain an Algolia index when data is created, updated, and deleted.
-stack:
- - algolia
---
In this article, we will explore how to index data from Directus in Algolia, enabling you to track created, updated, and deleted data to maintain an up-to-date index which you can then use in your external applications. Given that Algolia only support their official JavaScript client and not the REST API directly, we will build a hook extension which utilizes the client.
diff --git a/content/tutorials/5.extensions/integrate-elasticsearch-indexing-with-custom-hooks.md b/content/tutorials/5.extensions/integrate-elasticsearch-indexing-with-custom-hooks.md
index 9ce01d8e0..5b7adcf64 100644
--- a/content/tutorials/5.extensions/integrate-elasticsearch-indexing-with-custom-hooks.md
+++ b/content/tutorials/5.extensions/integrate-elasticsearch-indexing-with-custom-hooks.md
@@ -9,8 +9,6 @@ authors:
- name: Taminoturoko Briggs
title: Guest Author
description: Learn how to maintain an Elasticsearch index when data is created, updated, and deleted.
-stack:
- - elasticsearch
---
In this article, we will explore how to index data from Directus in Elasticsearch through a custom hook extension, enabling you to track created, updated, and deleted data to maintain an up-to-date index which you can then use in your external applications.
diff --git a/content/tutorials/5.extensions/integrate-meilisearch-indexing-with-custom-hooks.md b/content/tutorials/5.extensions/integrate-meilisearch-indexing-with-custom-hooks.md
index aaab1bfdb..f6eecad0d 100644
--- a/content/tutorials/5.extensions/integrate-meilisearch-indexing-with-custom-hooks.md
+++ b/content/tutorials/5.extensions/integrate-meilisearch-indexing-with-custom-hooks.md
@@ -9,8 +9,6 @@ authors:
- name: Clara Ekekenta
title: Guest Author
description: Learn how to maintain an Meilisearch index when data is created, updated, and deleted.
-stack:
- - meilisearch
---
In this article, we will explore how to index data from Directus in Meilisearch by building a custom hook extension, enabling you to track created, updated, and deleted data to maintain an up-to-date index which you can then use in your external applications.
diff --git a/content/tutorials/5.extensions/monitor-and-error-track-with-sentry-in-custom-hooks.md b/content/tutorials/5.extensions/monitor-and-error-track-with-sentry-in-custom-hooks.md
index 653d8f54d..ce9c98aeb 100644
--- a/content/tutorials/5.extensions/monitor-and-error-track-with-sentry-in-custom-hooks.md
+++ b/content/tutorials/5.extensions/monitor-and-error-track-with-sentry-in-custom-hooks.md
@@ -9,8 +9,6 @@ authors:
- name: Salma Alam-Naylor
title: Senior Developer Advocate, Sentry
description: Learn how to integrate Sentry error tracking in both your API and Data Studio.
-stack:
- - sentry
---
If you self-host Directus, it becomes your responsibility to ensure your project is running smoothly. Part of this is knowing when things are going wrong so you can triage issues, fix errors, and get on with your day.
diff --git a/content/tutorials/5.extensions/send-sms-messages-with-twilio-in-custom-operations.md b/content/tutorials/5.extensions/send-sms-messages-with-twilio-in-custom-operations.md
index 7f2139ea8..f99d5f4a5 100644
--- a/content/tutorials/5.extensions/send-sms-messages-with-twilio-in-custom-operations.md
+++ b/content/tutorials/5.extensions/send-sms-messages-with-twilio-in-custom-operations.md
@@ -9,8 +9,6 @@ authors:
- name: Tim Butterfield
title: Guest Author
description: Learn how to build a custom operation that uses the Twilio SDK.
-stack:
- - twilio
---
Operations allow you to trigger your own code in a Flow. This guide will show you how to use the Twilio Node.js helper
library to send SMS messages in Flows.
diff --git a/content/tutorials/5.extensions/send-sms-messages-with-twilio-in-custom-panels.md b/content/tutorials/5.extensions/send-sms-messages-with-twilio-in-custom-panels.md
index 2a1089597..7d0b77153 100644
--- a/content/tutorials/5.extensions/send-sms-messages-with-twilio-in-custom-panels.md
+++ b/content/tutorials/5.extensions/send-sms-messages-with-twilio-in-custom-panels.md
@@ -9,8 +9,6 @@ authors:
- name: Tim Butterfield
title: Guest Author
description: Learn how to build a form inside a panel extension and use external APIs.
-stack:
- - twilio
---
Panels are used in dashboards as part of the Insights module. As well as read-only data panels, they can be interactive
with form inputs.
diff --git a/content/tutorials/5.extensions/summarize-relational-items-in-a-custom-display-extension.md b/content/tutorials/5.extensions/summarize-relational-items-in-a-custom-display-extension.md
index 958a40ecb..4bde5b8b8 100644
--- a/content/tutorials/5.extensions/summarize-relational-items-in-a-custom-display-extension.md
+++ b/content/tutorials/5.extensions/summarize-relational-items-in-a-custom-display-extension.md
@@ -9,8 +9,6 @@ authors:
- name: Tim Butterfield
title: Guest Author
description: Learn how to work with relational data in display extensions.
-stack:
- - db
---
Displays provide a meaningful way for users to consume data. This guide will show you how to create a display that
queries another table and returns the `SUM` or `COUNT` of a column.
diff --git a/content/tutorials/5.extensions/validate-phone-numbers-with-twilio-in-a-custom-hook.md b/content/tutorials/5.extensions/validate-phone-numbers-with-twilio-in-a-custom-hook.md
index 51624613d..fe202efb4 100644
--- a/content/tutorials/5.extensions/validate-phone-numbers-with-twilio-in-a-custom-hook.md
+++ b/content/tutorials/5.extensions/validate-phone-numbers-with-twilio-in-a-custom-hook.md
@@ -9,8 +9,6 @@ authors:
- name: Tim Butterfield
title: Guest Author
description: Learn how to prevent an item from saving if it has an invalid phone number.
-stack:
- - twilio
---
Hooks allow you to trigger your own code when events are emitted from Directus. This guide will show you how to prevent
an item from saving if a phone number is not valid using the Twilio Lookup API.
diff --git a/content/tutorials/6.self-hosting/deploy-directus-to-an-ubuntu-server.md b/content/tutorials/6.self-hosting/deploy-directus-to-an-ubuntu-server.md
index c6e9438b6..0b4fdf968 100644
--- a/content/tutorials/6.self-hosting/deploy-directus-to-an-ubuntu-server.md
+++ b/content/tutorials/6.self-hosting/deploy-directus-to-an-ubuntu-server.md
@@ -9,8 +9,6 @@ authors:
- name: Yusuf Akorede
title: Guest Author
description: Learn how to deploy Directus on a Docker container on an Ubuntu server.
-stack:
- - ubuntu
---
In this tutorial, you will learn how to deploy a Directus application within a Docker container on an Ubuntu server and connect it to a custom domain. [Ubuntu](https://ubuntu.com/download/server) is a popular open source Linux distribution which is commonly available from hosting providers.
diff --git a/content/tutorials/6.self-hosting/deploy-directus-to-aws-ec2.md b/content/tutorials/6.self-hosting/deploy-directus-to-aws-ec2.md
index 6dc28f25a..ea703aaa2 100644
--- a/content/tutorials/6.self-hosting/deploy-directus-to-aws-ec2.md
+++ b/content/tutorials/6.self-hosting/deploy-directus-to-aws-ec2.md
@@ -9,8 +9,6 @@ authors:
- name: Trust Jamin
title: Guest Author
description: Learn how to deploy a Directus to AWS EC2, with a RDS database and a S3 storage bucket.
-stack:
- - aws
---
In this tutorial, you will learn how to deploy a self-hosted instance of Directus to Amazon Web Services (AWS) EC2, connect it to an AWS RDS PostgreSQL database and S3 storage bucket.
diff --git a/content/tutorials/6.self-hosting/deploy-directus-to-azure-web-apps.md b/content/tutorials/6.self-hosting/deploy-directus-to-azure-web-apps.md
index f235b0927..aada0cc7c 100644
--- a/content/tutorials/6.self-hosting/deploy-directus-to-azure-web-apps.md
+++ b/content/tutorials/6.self-hosting/deploy-directus-to-azure-web-apps.md
@@ -11,8 +11,6 @@ authors:
- name: Paul Boudewijn
title: Guest Author
description: Learn how to deploy Directus on a Docker container on Azure.
-stack:
- - azure
---
This guide outlines the steps to deploy Directus on Azure using Docker, with a focus on utilizing PostgreSQL as a database.
diff --git a/content/tutorials/6.self-hosting/deploy-directus-to-digital-ocean.md b/content/tutorials/6.self-hosting/deploy-directus-to-digital-ocean.md
index f91156a40..358b2f24e 100644
--- a/content/tutorials/6.self-hosting/deploy-directus-to-digital-ocean.md
+++ b/content/tutorials/6.self-hosting/deploy-directus-to-digital-ocean.md
@@ -9,8 +9,6 @@ authors:
- name: Matthew Ruffino
title: Guest Author
description: Learn how to deploy Directus on the Digital Ocean App Platform.
-stack:
- - digitalocean
---
This guide shows you how to deploy Directus on the DigitalOcean App Platform with a separate database, object storage, and optional Redis-based synchronization.
diff --git a/content/tutorials/6.self-hosting/deploy-directus-to-google-cloud-platform.md b/content/tutorials/6.self-hosting/deploy-directus-to-google-cloud-platform.md
index ee2db48a9..74d59013b 100644
--- a/content/tutorials/6.self-hosting/deploy-directus-to-google-cloud-platform.md
+++ b/content/tutorials/6.self-hosting/deploy-directus-to-google-cloud-platform.md
@@ -9,8 +9,6 @@ authors:
- name: Trust Jamin
title: Guest Author
description: Learn how to deploy Directus on GCP with a Cloud SQL database and Cloud Storage Bucket.
-stack:
- - gcp
---
In this tutorial, you will learn how to deploy a self-hosted instance of Directus to Google Cloud Platform (GCP) Cloud Run and connect it with a Cloud SQL database (PostgreSQL) and Cloud Storage for storing assets.
diff --git a/content/tutorials/6.self-hosting/deploy-directus-to-railway.md b/content/tutorials/6.self-hosting/deploy-directus-to-railway.md
index 47219f36b..0560b876b 100644
--- a/content/tutorials/6.self-hosting/deploy-directus-to-railway.md
+++ b/content/tutorials/6.self-hosting/deploy-directus-to-railway.md
@@ -6,8 +6,6 @@ title: Deploy Directus to Railway
technologies:
- railway
description: Deploy Directus on Railway using the official one-click templates (blank instance or CMS template) with PostgreSQL, Redis, and S3-compatible storage.
-stack:
- - railway
---
Railway is a platform that runs your app and its dependencies (databases, cache, storage) in one place. You don't manage servers or containers yourself; you deploy from a template or connect a repo, set variables, and Railway handles the rest.
diff --git a/content/tutorials/7.workflows/create-github-issues-with-directus-automate.md b/content/tutorials/7.workflows/create-github-issues-with-directus-automate.md
index fcb1762ee..0ffa09e70 100644
--- a/content/tutorials/7.workflows/create-github-issues-with-directus-automate.md
+++ b/content/tutorials/7.workflows/create-github-issues-with-directus-automate.md
@@ -9,8 +9,6 @@ authors:
- name: Kevin Lewis
title: Director, Developer Experience
description: Learn how to integrate GitHub with Directus Flows to create new issues.
-stack:
- - github
---
At the bottom of every page in our docs (including this one) is a feedback widget, which we use to gather feedback on what's good and what needs improving across our pages. All of this data is stored in a Directus project which we look through weekly and create associated GitHub Issues if action is required.
diff --git a/content/tutorials/7.workflows/detect-high-risk-phone-numbers-with-vonage-and-directus-automate.md b/content/tutorials/7.workflows/detect-high-risk-phone-numbers-with-vonage-and-directus-automate.md
index 3957ce3df..a8e5f8844 100644
--- a/content/tutorials/7.workflows/detect-high-risk-phone-numbers-with-vonage-and-directus-automate.md
+++ b/content/tutorials/7.workflows/detect-high-risk-phone-numbers-with-vonage-and-directus-automate.md
@@ -9,8 +9,6 @@ authors:
- name: Kevin Lewis
title: Director, Developer Experience
description: Learn how to integrate Vonage's Number Insights API with Directus Flows to validate numbers.
-stack:
- - vonage
---
When creating new users for your service, it's important to take steps to prevent fraudulent or malicious activity. In this post, you'll use [Vonage's Number Insight V2 API](https://developer.vonage.com/en/number-insight/number-insight-v2/overview) and [Directus Flows](https://directus.io/toolkit/automate) to determine the likelihood of a number being risky at the time of user registration, and let you act on it.
diff --git a/content/tutorials/7.workflows/enrich-user-data-with-clearbit-and-directus-automate.md b/content/tutorials/7.workflows/enrich-user-data-with-clearbit-and-directus-automate.md
index 85c30bc68..dd52af03f 100644
--- a/content/tutorials/7.workflows/enrich-user-data-with-clearbit-and-directus-automate.md
+++ b/content/tutorials/7.workflows/enrich-user-data-with-clearbit-and-directus-automate.md
@@ -9,8 +9,6 @@ authors:
- name: Kevin Lewis
title: Director, Developer Experience
description: Learn how to integrate Clearbit data enrichment with Directus Flows.
-stack:
- - clearbit
---
The Directus toolkit can be used for so many different projects and use cases, with a common one being Customer Relationship Management (CRM). CRMs are often used to support sales and marketing teams in understanding who is interested in and already using a product, and have more streamlined conversations with them.
diff --git a/content/tutorials/7.workflows/generate-images-with-dall-e-and-directus-automate.md b/content/tutorials/7.workflows/generate-images-with-dall-e-and-directus-automate.md
index 2c5e744bc..ab5f5ea98 100644
--- a/content/tutorials/7.workflows/generate-images-with-dall-e-and-directus-automate.md
+++ b/content/tutorials/7.workflows/generate-images-with-dall-e-and-directus-automate.md
@@ -9,8 +9,6 @@ authors:
- name: Kevin Lewis
title: Director, Developer Experience
description: Learn how to integrate OpenAI's Dall•E models with Directus Flows.
-stack:
- - openai
---
Directus Flows provide a really powerful interface to integrating with AI services via their APIs. In this tutorial, we will use [OpenAI’s Image Generation API](https://platform.openai.com/docs/api-reference/images/create) to leverage DALL-E 3 and create images for our content directly within the Directus Editor.
diff --git a/content/tutorials/7.workflows/generate-social-posts-with-gpt-4-and-directus-automate.md b/content/tutorials/7.workflows/generate-social-posts-with-gpt-4-and-directus-automate.md
index 879608bc9..244e6bcfe 100644
--- a/content/tutorials/7.workflows/generate-social-posts-with-gpt-4-and-directus-automate.md
+++ b/content/tutorials/7.workflows/generate-social-posts-with-gpt-4-and-directus-automate.md
@@ -9,8 +9,6 @@ authors:
- name: Kevin Lewis
title: Director, Developer Experience
description: Learn how to integrate OpenAI's GPT-4 model with Directus Flows.
-stack:
- - openai
---
Directus Flows provide a really powerful interface to integrating with AI services via their APIs. In this tutorial, we will use [OpenAI’s Text Generation API](https://platform.openai.com/docs/api-reference/chat/create) to leverage GPT-4 and create social posts for our content directly within the Directus Editor.
diff --git a/content/tutorials/7.workflows/generate-transcripts-with-deepgram-and-directus-automate.md b/content/tutorials/7.workflows/generate-transcripts-with-deepgram-and-directus-automate.md
index bba839837..d1e03fc4d 100644
--- a/content/tutorials/7.workflows/generate-transcripts-with-deepgram-and-directus-automate.md
+++ b/content/tutorials/7.workflows/generate-transcripts-with-deepgram-and-directus-automate.md
@@ -9,8 +9,6 @@ authors:
- name: Kevin Lewis
title: Director, Developer Experience
description: Learn how to integrate Deepgram's Speech-to-Text API with Directus Flows.
-stack:
- - deepgram
---
Voice is one of the most common ways we communicate and yet one of the hardest for developers to use and understand. In this post, you'll use Deepgram's speech recognition API and Directus Flows to create and store transcripts whenever a new file is uploaded.
diff --git a/content/tutorials/7.workflows/integrating-multilingual-content-with-directus-and-crowdin.md b/content/tutorials/7.workflows/integrating-multilingual-content-with-directus-and-crowdin.md
index 8d1118a8e..fb078c951 100644
--- a/content/tutorials/7.workflows/integrating-multilingual-content-with-directus-and-crowdin.md
+++ b/content/tutorials/7.workflows/integrating-multilingual-content-with-directus-and-crowdin.md
@@ -9,8 +9,6 @@ authors:
- name: Diana Voroniak
title: Product Marketing Manager, Crowdin
description: Learn how to localize content in Directus using Crowdin's connector with Directus.
-stack:
- - crowdin
---
Picture this: your app welcomes users with a friendly "hello" in English, a warm "hola" in Spanish, or a cheerful "bonjour" in French. That's the magic of content localization, and it's your ticket to connecting with users worldwide. If you're new to the multilingual game, fear not! Let's dive into a world where Directus and Crowdin play the hero's role, guiding you to create multilingual apps and automate most of the work.
diff --git a/content/tutorials/7.workflows/invincible-ai-content-workflows-with-inngest-and-directus.md b/content/tutorials/7.workflows/invincible-ai-content-workflows-with-inngest-and-directus.md
index e7b17716b..78b55f18b 100644
--- a/content/tutorials/7.workflows/invincible-ai-content-workflows-with-inngest-and-directus.md
+++ b/content/tutorials/7.workflows/invincible-ai-content-workflows-with-inngest-and-directus.md
@@ -8,8 +8,6 @@ authors:
- name: Bryant Gillespie
title: Developer Advocate
description: Learn how to configure integration Directus and Inngest to build durable workflows for any scale.
-stack:
- - inngest
---
This article demonstrates how to enhance your Directus projects with Inngest to build powerful AI-driven content workflows at scale.
diff --git a/content/tutorials/7.workflows/tag-images-with-clarifai-and-directus-automate.md b/content/tutorials/7.workflows/tag-images-with-clarifai-and-directus-automate.md
index 9a06bcfda..bd0d6a2fd 100644
--- a/content/tutorials/7.workflows/tag-images-with-clarifai-and-directus-automate.md
+++ b/content/tutorials/7.workflows/tag-images-with-clarifai-and-directus-automate.md
@@ -9,8 +9,6 @@ authors:
- name: Kevin Lewis
title: Director, Developer Experience
description: Learn how to integrate Clarifai's image recognition APIs with Directus Flows.
-stack:
- - clarifai
---
[Clarifai](https://clarifai.com) allow you to train and use machine learning models via APIs. In this tutorial, you will use Clarfai's image recognition model with Directus Flows to automatically tag new image files in your project.
diff --git a/content/tutorials/7.workflows/trigger-netlify-site-builds-with-directus-automate.md b/content/tutorials/7.workflows/trigger-netlify-site-builds-with-directus-automate.md
index bebf5a384..1ff73a978 100644
--- a/content/tutorials/7.workflows/trigger-netlify-site-builds-with-directus-automate.md
+++ b/content/tutorials/7.workflows/trigger-netlify-site-builds-with-directus-automate.md
@@ -9,8 +9,6 @@ authors:
- name: Bryant Gillespie
title: Growth Engineer
description: Learn how to trigger new Netlify website builds through Directus Flows.
-stack:
- - netlify
---
## Explanation
diff --git a/content/tutorials/7.workflows/trigger-vercel-site-builds-with-directus-automate.md b/content/tutorials/7.workflows/trigger-vercel-site-builds-with-directus-automate.md
index 07a5b40ba..5fd3619c3 100644
--- a/content/tutorials/7.workflows/trigger-vercel-site-builds-with-directus-automate.md
+++ b/content/tutorials/7.workflows/trigger-vercel-site-builds-with-directus-automate.md
@@ -9,8 +9,6 @@ authors:
- name: Bryant Gillespie
title: Growth Engineer
description: Learn how to trigger new Vercel website builds through Directus Flows.
-stack:
- - vercel
---
## Explanation
From 45877f74df32a3e367efaf7e6bbdfc41fbd9598a Mon Sep 17 00:00:00 2001
From: bryantgillespie
Date: Thu, 30 Apr 2026 13:16:20 -0400
Subject: [PATCH 29/45] add chips to tutorials with framworks
---
app/components/TutorialsArticles.vue | 2 +-
app/pages/tutorials/[category]/[...slug].vue | 46 ++++++++++++++++++++
2 files changed, 47 insertions(+), 1 deletion(-)
diff --git a/app/components/TutorialsArticles.vue b/app/components/TutorialsArticles.vue
index 9cf5169f7..de583be6f 100644
--- a/app/components/TutorialsArticles.vue
+++ b/app/components/TutorialsArticles.vue
@@ -4,7 +4,7 @@ const props = defineProps<{
limit?: number;
}>();
-const { data: articles } = await useAsyncData(props.path + '-preview', () => {
+const { data: articles } = await useAsyncData(`${props.path}-articles-${props.limit ?? 'all'}`, () => {
const query = queryCollection('content')
.where('path', 'LIKE', `${props.path}/%`)
.select('title', 'description', 'icon', 'path', 'technologies', 'navigation');
diff --git a/app/pages/tutorials/[category]/[...slug].vue b/app/pages/tutorials/[category]/[...slug].vue
index 49a578372..5b5b9985a 100644
--- a/app/pages/tutorials/[category]/[...slug].vue
+++ b/app/pages/tutorials/[category]/[...slug].vue
@@ -29,6 +29,23 @@ const breadcrumb = computed(() =>
})),
);
+const frameworkChips = computed(() => {
+ const tech = (page.value as { technologies?: string[] } | null)?.technologies ?? [];
+ const root = findNavNode(navigation.value, '/frameworks');
+ const frameworks = root?.children ?? [];
+ return tech
+ .map((slug) => {
+ const node = frameworks.find(f => f.path === `/frameworks/${slug}`);
+ if (!node) return null;
+ return {
+ label: node.title,
+ icon: (node as { icon?: string }).icon,
+ to: node.path,
+ };
+ })
+ .filter((c): c is { label: string; icon?: string; to: string } => Boolean(c));
+});
+
defineOgImage('Default', {
title: page.value?.title ?? 'Directus Docs',
description: page.value?.description ?? '',
@@ -53,6 +70,35 @@ defineOgImage('Default', {
+
+
+ {{ page!.description }}
+
+
+
+
+ {{ chip.label }}
+
+
+
+
+
Date: Thu, 30 Apr 2026 14:02:46 -0400
Subject: [PATCH 30/45] more cleanup
---
README.md | 27 +++++
app/components/FrameworkLinkList.vue | 36 ++++++
app/components/content/FrameworkGuideList.vue | 109 ++++--------------
app/components/content/FrameworkLinks.vue | 2 +-
app/layouts/docs.vue | 53 +++++----
app/pages/[...slug].vue | 4 +-
app/pages/frameworks/index.vue | 14 +--
app/pages/tutorials/[category]/[...slug].vue | 6 +-
app/types/content.d.ts | 10 ++
content.config.ts | 1 +
.../frameworks/01.nextjs/01.data-fetching.md | 1 +
.../frameworks/01.nextjs/02.authentication.md | 1 +
.../{10.build-a-cms.md => 03.build-a-cms.md} | 1 +
...1.dynamic-forms.md => 04.dynamic-forms.md} | 1 +
...2.dynamic-pages.md => 05.dynamic-pages.md} | 1 +
.../01.nextjs/{13.forms.md => 06.forms.md} | 1 +
...{14.live-preview.md => 07.live-preview.md} | 1 +
... => 08.live-preview-content-versioning.md} | 1 +
...-mode.md => 09.live-preview-draft-mode.md} | 1 +
...-content.md => 10.multilingual-content.md} | 1 +
...ll.md => 11.pagination-infinite-scroll.md} | 1 +
...usable-blocks.md => 12.reusable-blocks.md} | 1 +
...0.visual-editor.md => 13.visual-editor.md} | 1 +
.../frameworks/02.nuxt/01.data-fetching.md | 1 +
.../frameworks/02.nuxt/02.authentication.md | 1 +
.../{10.build-a-cms.md => 03.build-a-cms.md} | 1 +
...1.dynamic-forms.md => 04.dynamic-forms.md} | 1 +
...2.dynamic-pages.md => 05.dynamic-pages.md} | 1 +
.../02.nuxt/{13.forms.md => 06.forms.md} | 1 +
...{14.live-preview.md => 07.live-preview.md} | 1 +
...view-setup.md => 08.live-preview-setup.md} | 1 +
...ent.md => 09.migrate-from-nuxt-content.md} | 1 +
...-content.md => 10.multilingual-content.md} | 1 +
...usable-blocks.md => 11.reusable-blocks.md} | 1 +
...9.visual-editor.md => 12.visual-editor.md} | 1 +
.../frameworks/03.astro/01.data-fetching.md | 1 +
.../frameworks/03.astro/02.authentication.md | 1 +
.../{10.build-a-cms.md => 03.build-a-cms.md} | 1 +
...1.dynamic-forms.md => 04.dynamic-forms.md} | 1 +
...2.dynamic-pages.md => 05.dynamic-pages.md} | 1 +
...{13.live-preview.md => 06.live-preview.md} | 1 +
...-content.md => 07.multilingual-content.md} | 1 +
...usable-blocks.md => 08.reusable-blocks.md} | 1 +
.../04.sveltekit/01.data-fetching.md | 1 +
.../04.sveltekit/02.authentication.md | 1 +
.../{10.build-a-cms.md => 03.build-a-cms.md} | 1 +
...1.dynamic-forms.md => 04.dynamic-forms.md} | 1 +
...2.dynamic-pages.md => 05.dynamic-pages.md} | 1 +
.../04.sveltekit/{13.forms.md => 06.forms.md} | 1 +
...lization.md => 07.internationalization.md} | 1 +
...{15.live-preview.md => 08.live-preview.md} | 1 +
...-content.md => 09.multilingual-content.md} | 1 +
...usable-blocks.md => 10.reusable-blocks.md} | 1 +
...8.visual-editor.md => 11.visual-editor.md} | 1 +
...authentication.md => 01.authentication.md} | 1 +
...{10.live-preview.md => 02.live-preview.md} | 1 +
.../frameworks/06.angular/01.data-fetching.md | 1 +
.../frameworks/07.laravel/01.data-fetching.md | 1 +
.../frameworks/08.django/01.data-fetching.md | 1 +
.../frameworks/09.flask/01.data-fetching.md | 1 +
.../10.spring-boot/01.data-fetching.md | 1 +
.../frameworks/11.flutter/01.data-fetching.md | 1 +
.../frameworks/12.swift/01.data-fetching.md | 1 +
.../frameworks/12.swift/02.authentication.md | 1 +
.../frameworks/13.kotlin/01.data-fetching.md | 1 +
.../14.eleventy/01.data-fetching.md | 1 +
.../15.solidstart/01.data-fetching.md | 1 +
...ook-chrome-extension-with-directus-auth.md | 2 +
68 files changed, 195 insertions(+), 126 deletions(-)
create mode 100644 app/components/FrameworkLinkList.vue
create mode 100644 app/types/content.d.ts
rename content/frameworks/01.nextjs/{10.build-a-cms.md => 03.build-a-cms.md} (99%)
rename content/frameworks/01.nextjs/{11.dynamic-forms.md => 04.dynamic-forms.md} (99%)
rename content/frameworks/01.nextjs/{12.dynamic-pages.md => 05.dynamic-pages.md} (99%)
rename content/frameworks/01.nextjs/{13.forms.md => 06.forms.md} (99%)
rename content/frameworks/01.nextjs/{14.live-preview.md => 07.live-preview.md} (99%)
rename content/frameworks/01.nextjs/{15.live-preview-content-versioning.md => 08.live-preview-content-versioning.md} (99%)
rename content/frameworks/01.nextjs/{16.live-preview-draft-mode.md => 09.live-preview-draft-mode.md} (99%)
rename content/frameworks/01.nextjs/{17.multilingual-content.md => 10.multilingual-content.md} (99%)
rename content/frameworks/01.nextjs/{18.pagination-infinite-scroll.md => 11.pagination-infinite-scroll.md} (99%)
rename content/frameworks/01.nextjs/{19.reusable-blocks.md => 12.reusable-blocks.md} (99%)
rename content/frameworks/01.nextjs/{20.visual-editor.md => 13.visual-editor.md} (99%)
rename content/frameworks/02.nuxt/{10.build-a-cms.md => 03.build-a-cms.md} (99%)
rename content/frameworks/02.nuxt/{11.dynamic-forms.md => 04.dynamic-forms.md} (99%)
rename content/frameworks/02.nuxt/{12.dynamic-pages.md => 05.dynamic-pages.md} (99%)
rename content/frameworks/02.nuxt/{13.forms.md => 06.forms.md} (99%)
rename content/frameworks/02.nuxt/{14.live-preview.md => 07.live-preview.md} (99%)
rename content/frameworks/02.nuxt/{15.live-preview-setup.md => 08.live-preview-setup.md} (99%)
rename content/frameworks/02.nuxt/{16.migrate-from-nuxt-content.md => 09.migrate-from-nuxt-content.md} (99%)
rename content/frameworks/02.nuxt/{17.multilingual-content.md => 10.multilingual-content.md} (99%)
rename content/frameworks/02.nuxt/{18.reusable-blocks.md => 11.reusable-blocks.md} (99%)
rename content/frameworks/02.nuxt/{19.visual-editor.md => 12.visual-editor.md} (99%)
rename content/frameworks/03.astro/{10.build-a-cms.md => 03.build-a-cms.md} (99%)
rename content/frameworks/03.astro/{11.dynamic-forms.md => 04.dynamic-forms.md} (99%)
rename content/frameworks/03.astro/{12.dynamic-pages.md => 05.dynamic-pages.md} (99%)
rename content/frameworks/03.astro/{13.live-preview.md => 06.live-preview.md} (99%)
rename content/frameworks/03.astro/{14.multilingual-content.md => 07.multilingual-content.md} (99%)
rename content/frameworks/03.astro/{15.reusable-blocks.md => 08.reusable-blocks.md} (99%)
rename content/frameworks/04.sveltekit/{10.build-a-cms.md => 03.build-a-cms.md} (99%)
rename content/frameworks/04.sveltekit/{11.dynamic-forms.md => 04.dynamic-forms.md} (99%)
rename content/frameworks/04.sveltekit/{12.dynamic-pages.md => 05.dynamic-pages.md} (99%)
rename content/frameworks/04.sveltekit/{13.forms.md => 06.forms.md} (99%)
rename content/frameworks/04.sveltekit/{14.internationalization.md => 07.internationalization.md} (99%)
rename content/frameworks/04.sveltekit/{15.live-preview.md => 08.live-preview.md} (99%)
rename content/frameworks/04.sveltekit/{16.multilingual-content.md => 09.multilingual-content.md} (99%)
rename content/frameworks/04.sveltekit/{17.reusable-blocks.md => 10.reusable-blocks.md} (99%)
rename content/frameworks/04.sveltekit/{18.visual-editor.md => 11.visual-editor.md} (99%)
rename content/frameworks/05.react/{02.authentication.md => 01.authentication.md} (99%)
rename content/frameworks/05.react/{10.live-preview.md => 02.live-preview.md} (99%)
diff --git a/README.md b/README.md
index 6b1bb7081..6fdffce77 100644
--- a/README.md
+++ b/README.md
@@ -61,6 +61,33 @@ pnpm typecheck:scripts # Type check repository scripts
`pnpm install` configures `.githooks` for the repository when no custom `core.hooksPath` is set. The pre-commit hook can add missing `stableId` values to staged docs files. The pre-push hook checks redirects when docs content, redirect configuration, or content configuration changes.
+## ✍️ Authoring Content
+
+Pages live as Markdown files under `content/`. Frontmatter fields are validated by the schema in `content.config.ts`.
+
+### Framework Guides
+
+Framework guides live under `content/frameworks//`. The numeric prefix on filenames (`01.`, `02.`, …) controls sidebar sort order only — it has no semantic meaning, renumber freely.
+
+The `section` frontmatter field controls grouping on the `/frameworks/` hub page:
+
+- `section: start-here` — appears in the "Start Here" block at the top.
+- `section: guides` (or unset) — appears in the "Guides" block below.
+
+Minimal frontmatter for a new framework guide:
+
+```yaml
+---
+title: Fetch Data from Directus with Foo
+description: Learn how to integrate Directus in your Foo app.
+section: start-here
+technologies:
+ - foo
+navigation:
+ title: Data Fetching
+---
+```
+
## ☁️ Deploying the Docs
The documentation automatically deploys to Vercel when changes are merged into the main branch. Simply:
diff --git a/app/components/FrameworkLinkList.vue b/app/components/FrameworkLinkList.vue
new file mode 100644
index 000000000..233f8887e
--- /dev/null
+++ b/app/components/FrameworkLinkList.vue
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+ {{ item.title }}
+
+
+ {{ item.description }}
+
+
+
+
+
+
+
diff --git a/app/components/content/FrameworkGuideList.vue b/app/components/content/FrameworkGuideList.vue
index c65614d65..252a5e08e 100644
--- a/app/components/content/FrameworkGuideList.vue
+++ b/app/components/content/FrameworkGuideList.vue
@@ -17,7 +17,7 @@ const { data: guides } = await useAsyncData(`framework-${props.slug}-guides`, ()
.where('path', 'LIKE', `/frameworks/${props.slug}/%`)
.where('path', 'NOT LIKE', '%/.navigation')
.where('stem', 'NOT LIKE', '%/index')
- .select('title', 'description', 'path', 'navigation', 'stem')
+ .select('title', 'description', 'path', 'navigation', 'section', 'stem')
.order('stem', 'ASC')
.all(),
);
@@ -29,36 +29,37 @@ const { data: tutorials } = await useAsyncData(`framework-${props.slug}-tutorial
.all(),
);
-type Item = {
- title?: string;
+type LinkItem = {
+ title: string;
description?: string;
- path?: string;
- navigation?: boolean | { title?: string };
- stem?: string;
- technologies?: string[];
+ path: string;
};
-const guideTitle = (g: Item) =>
- (typeof g.navigation === 'object' && g.navigation?.title) ? g.navigation.title : g.title;
-
-const stemPosition = (stem?: string) => {
- const last = stem?.split('/').pop() ?? '';
- const match = /^(\d+)\./.exec(last);
- return match ? Number(match[1]) : 999;
+const guideTitle = (g: { title: string; navigation?: unknown }) => {
+ if (g.navigation && typeof g.navigation === 'object' && 'title' in g.navigation) {
+ const navTitle = (g.navigation as { title?: string }).title;
+ if (navTitle) return navTitle;
+ }
+ return g.title;
};
const visibleGuides = computed(() => (guides.value ?? [])
- .filter((g): g is Item => Boolean(g.path) && g.navigation !== false));
+ .filter(g => g.navigation !== false));
-const startHere = computed(() =>
- visibleGuides.value.filter(g => stemPosition(g.stem) < 10));
+const startHere = computed(() =>
+ visibleGuides.value
+ .filter(g => g.section === 'start-here')
+ .map(g => ({ title: guideTitle(g), description: g.description, path: g.path })));
-const moreGuides = computed(() =>
- visibleGuides.value.filter(g => stemPosition(g.stem) >= 10));
+const moreGuides = computed(() =>
+ visibleGuides.value
+ .filter(g => g.section !== 'start-here')
+ .map(g => ({ title: guideTitle(g), description: g.description, path: g.path })));
-const matchingTutorials = computed(() => (tutorials.value ?? [])
+const matchingTutorials = computed(() => (tutorials.value ?? [])
.filter(t => Array.isArray(t.technologies) && t.technologies.includes(props.slug))
- .sort((a, b) => (a.title ?? '').localeCompare(b.title ?? '')));
+ .sort((a, b) => a.title.localeCompare(b.title))
+ .map(t => ({ title: t.title, description: t.description, path: t.path })));
@@ -67,81 +68,21 @@ const matchingTutorials = computed(() => (tutorials.value ?? [])
Start Here
-
-
-
-
-
- {{ guideTitle(guide) }}
-
-
- {{ guide.description }}
-
-
-
-
-
-
+
Guides
-
-
-
-
-
- {{ guideTitle(guide) }}
-
-
- {{ guide.description }}
-
-
-
-
-
-
+
{{ frameworkLabel }} Tutorials
-
-
-
- {{ tutorial.title }}
-
-
-
+
diff --git a/app/components/content/FrameworkLinks.vue b/app/components/content/FrameworkLinks.vue
index 165f6b2a0..b04fe5af1 100644
--- a/app/components/content/FrameworkLinks.vue
+++ b/app/components/content/FrameworkLinks.vue
@@ -10,7 +10,7 @@ const frameworks = computed(() => {
.map(item => ({
label: item.title,
path: item.path,
- icon: (item as { icon?: string }).icon,
+ icon: item.icon,
}));
});
diff --git a/app/layouts/docs.vue b/app/layouts/docs.vue
index 5b6d2434a..b3f54acce 100644
--- a/app/layouts/docs.vue
+++ b/app/layouts/docs.vue
@@ -63,7 +63,7 @@ const frameworkOptions = computed(() => {
.map(item => ({
label: item.title ?? item.path?.split('/').pop() ?? '',
value: item.path,
- icon: (item as { icon?: string }).icon,
+ icon: item.icon,
}));
});
@@ -88,6 +88,15 @@ const frameworkNavigation = computed(() => {
const node = frameworksRoot.value?.children?.find(item => item.path === path);
return node?.children ?? [];
});
+
+const sectionHeader = computed<{ label: string; icon?: string } | null>(() => {
+ if (isFrameworksSection.value) {
+ return { label: 'Frameworks', icon: 'i-ph-brackets-curly' };
+ }
+ return currentSection.value
+ ? { label: currentSection.value.label, icon: currentSection.value.icon }
+ : null;
+});
@@ -101,12 +110,18 @@ const frameworkNavigation = computed(() => {
class="my-5"
/>
-
-
-
- Frameworks
-
+
+
+ {{ sectionHeader.label }}
+
+
{
/>
-
-
-
- {{ currentSection.label }}
-
-
-
-
+
diff --git a/app/pages/[...slug].vue b/app/pages/[...slug].vue
index 90613d4d9..180ce541b 100644
--- a/app/pages/[...slug].vue
+++ b/app/pages/[...slug].vue
@@ -63,9 +63,7 @@ const frameworkNode = computed(() => {
});
const frameworkIcon = computed(() =>
- frameworkRootMatch.value
- ? (frameworkNode.value as { icon?: string } | undefined)?.icon
- : undefined,
+ frameworkRootMatch.value ? frameworkNode.value?.icon : undefined,
);
const frameworkBreadcrumb = computed(() => {
diff --git a/app/pages/frameworks/index.vue b/app/pages/frameworks/index.vue
index 44ae94d02..9f0fc5723 100644
--- a/app/pages/frameworks/index.vue
+++ b/app/pages/frameworks/index.vue
@@ -1,12 +1,10 @@
-
-
-
-
-
-
-
-
+
+
+
diff --git a/app/assets/css/main.css b/app/assets/css/main.css
index 33c2e95f0..44f43b13b 100644
--- a/app/assets/css/main.css
+++ b/app/assets/css/main.css
@@ -2,10 +2,12 @@
@import "@nuxt/ui";
@source "../../../content/**/*";
+@source "../../../modules/**/*.{vue,ts}";
@theme static {
--font-sans: "Inter", sans-serif;
- --font-display: "Poppins", sans-serif;
+ --font-display: "Source Serif 4", serif;
+ --font-mono: "IBM Plex Mono", monospace;
--color-purple-50: #f3f2ff;
--color-purple-100: #e9e8ff;
@@ -35,6 +37,14 @@
--diff-green: rgba(16, 185, 129, 0.2);
}
+.dark {
+ --ui-bg: #090909;
+}
+
+::selection {
+ background: color-mix(in srgb, var(--color-primary) 50%, var(--ui-bg) 50%);
+}
+
/*
The default border color has changed to `currentcolor` in Tailwind CSS v4,
so we've added these compatibility styles to make sure everything still
@@ -66,6 +76,12 @@ html {
scroll-behavior: smooth;
}
+.sp-divider,
+.sp-divider *,
+.sp-divider > :first-child::after {
+ cursor: col-resize !important;
+}
+
pre {
> code {
& .line.diff.remove {
@@ -78,3 +94,56 @@ pre {
}
}
}
+
+html .shiki span {
+ color: var(--shiki-default);
+ background: var(--shiki-default-bg);
+ font-style: var(--shiki-default-font-style);
+ font-weight: var(--shiki-default-font-weight);
+ text-decoration: var(--shiki-default-text-decoration);
+}
+
+html.light .shiki span,
+html .light .shiki span {
+ color: var(--shiki-light);
+ background: var(--shiki-light-bg);
+ font-style: var(--shiki-light-font-style);
+ font-weight: var(--shiki-light-font-weight);
+ text-decoration: var(--shiki-light-text-decoration);
+}
+
+html.dark .shiki span,
+html .dark .shiki span {
+ color: var(--shiki-dark);
+ background: var(--shiki-dark-bg);
+ font-style: var(--shiki-dark-font-style);
+ font-weight: var(--shiki-dark-font-weight);
+ text-decoration: var(--shiki-dark-text-decoration);
+}
+
+.scrollbar-thin {
+ scrollbar-width: thin;
+ scrollbar-color: var(--ui-border-accented) var(--ui-bg-muted);
+}
+
+.scrollbar-thin::-webkit-scrollbar {
+ width: 8px;
+ height: 8px;
+}
+
+.scrollbar-thin::-webkit-scrollbar-track {
+ background: var(--ui-bg-muted);
+ border-radius: 999px;
+}
+
+.scrollbar-thin::-webkit-scrollbar-thumb {
+ background-color: var(--ui-border-accented);
+ border-radius: 999px;
+ border: 2px solid transparent;
+ background-clip: content-box;
+}
+
+.scrollbar-thin::-webkit-scrollbar-thumb:hover {
+ background-color: var(--ui-text-dimmed);
+ background-clip: content-box;
+}
diff --git a/app/components/DocsAside.vue b/app/components/DocsAside.vue
new file mode 100644
index 000000000..84b07ddcf
--- /dev/null
+++ b/app/components/DocsAside.vue
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
diff --git a/app/components/DocsBanner.vue b/app/components/DocsBanner.vue
index d1ba2ca68..853103778 100644
--- a/app/components/DocsBanner.vue
+++ b/app/components/DocsBanner.vue
@@ -6,27 +6,19 @@ const dismissedBanners = useCookie('directus-dismissed-banners', {
});
const bannerVisible = computed(() => {
- const bannerValue = unref(banner);
- if (!bannerValue) return false;
- if (Object.keys(bannerValue).length === 0) return false;
-
- if (!('id' in bannerValue) || !('content' in bannerValue)) return false;
- return unref(dismissedBanners).includes(bannerValue.id) === false;
+ const value = banner.value;
+ if (!value || Object.keys(value).length === 0) return false;
+ if (!('id' in value) || !('content' in value)) return false;
+ return !dismissedBanners.value.includes(value.id);
});
const dismiss = (id: string) => {
- dismissedBanners.value = [...unref(dismissedBanners), id];
+ dismissedBanners.value = [...dismissedBanners.value, id];
};
-const iconName = computed(() => {
- const bannerValue = unref(banner);
- if (
- !bannerValue
- || (typeof bannerValue === 'object' && Object.keys(bannerValue).length === 0)
- )
- return null;
- return getIconName(bannerValue.icon);
-});
+useHead(computed(() => ({
+ style: [{ innerHTML: `:root { --ui-banner-height: ${bannerVisible.value ? '32px' : '0px'}; }` }],
+})));
@@ -37,16 +29,16 @@ const iconName = computed(() => {
{
{
-
-
-
- © {{ new Date().getFullYear() }} Monospace Inc
-
-
+
+
+
+ © {{ new Date().getFullYear() }} Monospace Inc
+
+
+
+
diff --git a/app/components/DocsPage.vue b/app/components/DocsPage.vue
new file mode 100644
index 000000000..d1de68e36
--- /dev/null
+++ b/app/components/DocsPage.vue
@@ -0,0 +1,88 @@
+
+
+
+
+
+
+
diff --git a/app/components/DocsShell.vue b/app/components/DocsShell.vue
new file mode 100644
index 000000000..2a2dd6e99
--- /dev/null
+++ b/app/components/DocsShell.vue
@@ -0,0 +1,15 @@
+
+
+
diff --git a/app/components/DocsSubNav.vue b/app/components/DocsSubNav.vue
new file mode 100644
index 000000000..0eb662e63
--- /dev/null
+++ b/app/components/DocsSubNav.vue
@@ -0,0 +1,56 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/components/DocsToc.vue b/app/components/DocsToc.vue
index beb105945..1b8e8021b 100644
--- a/app/components/DocsToc.vue
+++ b/app/components/DocsToc.vue
@@ -1,14 +1,20 @@
@@ -25,25 +29,24 @@ const handleFeedback = (feedback: 'good' | 'bad') => {
-
diff --git a/app/components/HomeHero.vue b/app/components/HomeHero.vue
new file mode 100644
index 000000000..d83abe087
--- /dev/null
+++ b/app/components/HomeHero.vue
@@ -0,0 +1,98 @@
+
+
+
+
+
+
+
+
+ Documentation
+
+
+ The AI-ready backend for your whole team.
+
+
+ Directus is the open data platform to build custom apps, powerful backends, and content experiences.
+
+
+
+
+ Search the docs...
+ ⌘K
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/components/HomeHeroShader.vue b/app/components/HomeHeroShader.vue
new file mode 100644
index 000000000..1d933e829
--- /dev/null
+++ b/app/components/HomeHeroShader.vue
@@ -0,0 +1,465 @@
+
+
+
+
+
+
+
diff --git a/app/components/HomePersonalized.vue b/app/components/HomePersonalized.vue
new file mode 100644
index 000000000..b30af773f
--- /dev/null
+++ b/app/components/HomePersonalized.vue
@@ -0,0 +1,466 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Continue reading
+
+
+ {{ resume.title }}
+
+
+
+ {{ sectionLabel(resume.path) }}
+ ·
+ {{ relativeTime(resume.visitedAt) }}
+
+
+
+
+
+
+ Start here
+
+
+ Pick a place to begin
+
+
+
+ A short tour through the basics of Directus.
+
+
+
+
+
+
+
+ Your context
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Favorites
+
+
+
+
+ ★
+ {{ f.title }}
+
+
+
+
+
+ Star pages as you read to keep them here.
+
+
+
+
+
+
+ Recently viewed
+
+
+
+
+ ·
+ {{ r.title }}
+
+
+
+
+
+
+
+
+
diff --git a/app/components/InlinePersonalize.vue b/app/components/InlinePersonalize.vue
new file mode 100644
index 000000000..71f47f460
--- /dev/null
+++ b/app/components/InlinePersonalize.vue
@@ -0,0 +1,359 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ f.label }}
+
+
+ No frameworks match "{{ frameworkQuery }}".
+
+
+
+
+
+
+
+
+ {{ u.label }}
+
+
+
+
+
+
+
+
+ {{ e.label }}
+ {{ e.description }}
+
+
+
+
+
+
+
+
+
+ All set — your docs are personalized.
+
+
+
+
+
+
diff --git a/app/components/LogoDocs.vue b/app/components/LogoDocs.vue
index d8f3723a3..e18c55a89 100644
--- a/app/components/LogoDocs.vue
+++ b/app/components/LogoDocs.vue
@@ -3,13 +3,27 @@ const { preference } = useColorMode();
+
+
+
+
+
+
+
-
+
@@ -24,33 +38,37 @@ const { preference } = useColorMode();
/>
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/components/LogoTv.vue b/app/components/LogoTv.vue
index c6c2eac23..900580dcc 100644
--- a/app/components/LogoTv.vue
+++ b/app/components/LogoTv.vue
@@ -10,15 +10,15 @@
fill-rule="evenodd"
clip-rule="evenodd"
d="M47.4244 22.7181C47.1509 22.6497 46.923 22.5813 46.7179 22.4902C46.5722 22.4254 46.4495 22.3492 46.3416 22.2614C46.2589 22.1941 46.2239 22.0866 46.2339 21.9805C46.3411 20.8425 46.2218 19.837 46.3305 18.7072C46.7863 14.1038 49.6805 15.5623 52.2785 14.8102C53.756 14.394 55.2335 13.5788 55.7913 11.9827C55.8943 11.6881 55.8062 11.3661 55.5998 11.132C53.9065 9.21229 52.0335 7.51504 49.9995 6.05916C43.1565 1.18709 34.269 -0.844273 26.0976 0.320581C25.7527 0.369746 25.5719 0.751614 25.762 1.04362C26.7654 2.58571 28.0723 3.85715 29.5676 4.8089C29.8821 5.00908 29.7534 5.42922 29.3912 5.34092C28.6501 5.16025 27.7347 4.82903 26.8688 4.22184C26.769 4.15185 26.6408 4.1342 26.5275 4.17935C26.1308 4.33755 25.5739 4.55953 25.0985 4.76318C24.7807 4.89929 24.716 5.30812 24.9785 5.53308C29.0527 9.02474 34.9338 9.5725 39.5799 6.8194C39.8995 6.63007 40.4184 7.03418 40.3198 7.39223C40.182 7.89243 40.0247 8.55654 39.8583 9.43196C38.6961 15.3116 35.3461 14.8558 31.1984 13.3745C22.9487 10.3845 18.2521 12.9124 14.0863 7.92748C13.7607 7.53786 13.1918 7.40033 12.8155 7.74119C11.993 8.48609 11.5086 9.55011 11.5086 10.6854C11.5086 12.0548 12.2097 13.2294 13.2519 13.9392C13.398 14.0387 13.5932 13.9967 13.7033 13.8584C13.9138 13.5942 14.0941 13.4042 14.2995 13.2713C14.6014 13.0761 14.7618 13.5222 14.501 13.7697C13.6913 14.5381 13.4342 15.4722 12.8759 17.2487C11.9643 20.1429 12.3518 23.1055 8.09017 23.8803C5.83404 23.9943 5.87962 25.5211 5.05921 27.8001C4.11558 30.5261 2.88254 31.7471 0.614391 34.1085C0.263635 34.4737 0.23175 35.0601 0.624886 35.3792C1.52536 36.1101 2.45298 36.1416 3.39559 35.7535C5.78846 34.7508 7.63439 31.6515 9.36637 29.646C11.3035 27.4127 15.9525 28.3698 19.462 26.182C21.2873 25.0628 22.4099 23.6442 22.1615 21.5529C22.114 21.1529 22.5687 20.9208 22.7205 21.2938C22.9455 21.8464 23.0965 22.4288 23.1665 23.0282C23.19 23.2296 23.3703 23.3787 23.5729 23.3689C27.3404 23.1861 32.195 27.296 36.7433 28.4565C37.0528 28.5355 37.2745 28.1779 37.1018 27.9092C36.8327 27.4904 36.6026 27.0572 36.4172 26.615C36.251 26.2162 36.1178 25.827 36.0152 25.4487C35.9087 25.0554 36.4855 24.9408 36.6943 25.2907C37.9093 27.3267 40.2097 29.189 43.3679 29.4181C44.4846 29.5093 45.7152 29.3725 46.9914 28.9851C48.5182 28.5293 49.9312 27.9368 51.6176 28.2559C52.871 28.4837 54.0332 29.1218 54.7625 30.1929C55.7776 31.6732 57.9112 32.0743 59.0692 30.5583C59.2472 30.3254 59.2616 30.0093 59.1454 29.7402C56.5979 23.8383 50.1847 23.4304 47.4244 22.7181Z"
- class="fill-slate-800 dark:fill-white"
+ class="fill-current text-highlighted"
/>
@@ -26,7 +26,7 @@
diff --git a/app/components/MobileNavSectionSwitcher.vue b/app/components/MobileNavSectionSwitcher.vue
new file mode 100644
index 000000000..8baa87c9c
--- /dev/null
+++ b/app/components/MobileNavSectionSwitcher.vue
@@ -0,0 +1,44 @@
+
+
+
+
+
+ Navigate to
+
+
+
+
+
+
+
diff --git a/app/components/NewsletterForm.vue b/app/components/NewsletterForm.vue
index e7f20cbaf..536bf6114 100644
--- a/app/components/NewsletterForm.vue
+++ b/app/components/NewsletterForm.vue
@@ -27,8 +27,8 @@ onMounted(() => {
-
-
+
+
{{ newsletter.description }}
{
@apply w-full min-w-48;
@apply rounded-md text-xs sm:text-sm;
@apply bg-default;
- @apply placeholder-gray-400 dark:placeholder-gray-500;
+ @apply placeholder:text-muted;
@apply p-2;
}
}
diff --git a/app/components/PersonalizeIdleCta.vue b/app/components/PersonalizeIdleCta.vue
new file mode 100644
index 000000000..9ed81f58b
--- /dev/null
+++ b/app/components/PersonalizeIdleCta.vue
@@ -0,0 +1,105 @@
+
+
+
+
+
+
+
+
+
+ Personalize your docs experience
+
+
+ Tell us your stack and we'll tailor examples, snippets, and search results. No personal info collected.
+
+
+
+
+
+
+
+
+
+
diff --git a/app/components/SettingsDrawer.vue b/app/components/SettingsDrawer.vue
new file mode 100644
index 000000000..82ef7e68f
--- /dev/null
+++ b/app/components/SettingsDrawer.vue
@@ -0,0 +1,358 @@
+
+
+
+ { if (!value) emit('close'); }"
+ >
+
+
+
+
+ Personalize
+
+
+ Tailor the docs to your stack.
+
+
+
+
+
+
+
+
+
+
+ Preferred Framework
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Primary Use Case
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Deployment
+
+
+
+
+
+ {{ d.label }}
+
+
+
+
+
+
+ API Library
+
+
+
+
+
+ {{ l.label }}
+
+
+
+ Syncs the active tab in API code samples.
+
+
+
+
+
+ Role
+
+
+
+
+
+ {{ r.label }}
+
+
+
+
+
+
+ Experience
+
+
+
+
+
+
+
+ {{ e.label }}
+
+
+ {{ e.description }}
+
+
+
+
+
+
+
+
+ Directus Instance
+
+
+
+
+ Used to deep-link from docs into your Directus project.
+
+
+
+
+
+
+
+
+ Saved automatically
+
+
+
+
diff --git a/app/components/SettingsDrawerTrigger.vue b/app/components/SettingsDrawerTrigger.vue
new file mode 100644
index 000000000..7338d6b63
--- /dev/null
+++ b/app/components/SettingsDrawerTrigger.vue
@@ -0,0 +1,23 @@
+
+
+
+
+
+ Personalize
+
+
+
diff --git a/app/components/TutorialCard.vue b/app/components/TutorialCard.vue
new file mode 100644
index 000000000..36d86dc54
--- /dev/null
+++ b/app/components/TutorialCard.vue
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
+ {{ article.title }}
+
+
+ {{ article.description }}
+
+
+
+
+
diff --git a/app/components/TutorialsArticles.vue b/app/components/TutorialsArticles.vue
index de583be6f..ed8cfb8a1 100644
--- a/app/components/TutorialsArticles.vue
+++ b/app/components/TutorialsArticles.vue
@@ -15,50 +15,14 @@ const { data: articles } = await useAsyncData(`${props.path}-articles-${props.li
return query.all();
});
-
-const imageSrc = (article: { technologies?: string[] }) => {
- const technologies = article?.technologies || ['directus'];
- const techString = technologies.join(', ');
- return `/docs/api/tutorialimg?logos=${techString}`;
-};
-
-
+
-
-
-
-
-
- {{ article.title }}
-
-
- {{ article.description }}
-
-
-
-
-
+ :article="article"
+ />
diff --git a/app/components/content/CtaCloud.vue b/app/components/content/CtaCloud.vue
index b80eadac6..c5914c56c 100644
--- a/app/components/content/CtaCloud.vue
+++ b/app/components/content/CtaCloud.vue
@@ -5,11 +5,11 @@ const { cta } = useAppConfig();
- {{ cta.cloud.description }}
+ {{ cta.cloud.description }}
{
-
-
-
- {{ commandParts.prefix }}
- {{ commandParts.command }}
-
-
-
- Copied!
-
-
-
+
+
+ {{ commandParts.prefix }}
+ {{ commandParts.command }}
-
+
+
+ Copied!
+
+
+
+
diff --git a/app/components/content/HomeFeatures.vue b/app/components/content/HomeFeatures.vue
new file mode 100644
index 000000000..635f15440
--- /dev/null
+++ b/app/components/content/HomeFeatures.vue
@@ -0,0 +1,80 @@
+
+
+
+
+
+
+
+
+
+
+ {{ f.title }}
+
+
+ {{ f.description }}
+
+
+
+
+
+
+
diff --git a/app/components/content/ProductLink.vue b/app/components/content/ProductLink.vue
index bd9aa880f..cd4a500d9 100644
--- a/app/components/content/ProductLink.vue
+++ b/app/components/content/ProductLink.vue
@@ -5,7 +5,7 @@ const props = defineProps<{
const linkMap = {
'auth': '/guides/auth/tokens-cookies',
- 'automate': '/guides/automate/flows',
+ 'automate': '/guides/flows',
'content': '/guides/content/explore',
'connect': '/guides/connect/authentication',
'data-model': '/guides/data-model/collections',
diff --git a/app/components/content/ProseCodeGroup.global.vue b/app/components/content/ProseCodeGroup.global.vue
new file mode 100644
index 000000000..3b86bb134
--- /dev/null
+++ b/app/components/content/ProseCodeGroup.global.vue
@@ -0,0 +1,50 @@
+
diff --git a/app/components/content/VideoEmbed.vue b/app/components/content/VideoEmbed.vue
index 670516240..686d77c39 100644
--- a/app/components/content/VideoEmbed.vue
+++ b/app/components/content/VideoEmbed.vue
@@ -1,5 +1,5 @@
-
+
+
+
+
typeof v === 'string') : [];
+ }
+ catch {
+ return [];
+ }
+}
+
+function writeLS(key: string, value: string[]) {
+ if (!import.meta.client) return;
+ try { localStorage.setItem(key, JSON.stringify(value)); }
+ catch { /* ignore quota */ }
+}
+
+function normalize(input: string): string | null {
+ const trimmed = input.trim().replace(/\/+$/, '');
+ if (!trimmed) return null;
+ try {
+ const url = new URL(trimmed.match(/^https?:\/\//) ? trimmed : `https://${trimmed}`);
+ return url.origin + url.pathname.replace(/\/+$/, '');
+ }
+ catch {
+ return null;
+ }
+}
+
+export default function useInstanceUrls() {
+ const urls = useState(INSTANCE_URLS_LS_KEY, () => []);
+ const legacyCookie = useCookie(LEGACY_INSTANCE_URL_COOKIE);
+
+ if (import.meta.client && urls.value.length === 0) {
+ const stored = readLS(INSTANCE_URLS_LS_KEY);
+ if (stored.length) {
+ urls.value = stored;
+ }
+ else if (legacyCookie.value) {
+ const seeded = normalize(legacyCookie.value);
+ if (seeded) {
+ urls.value = [seeded];
+ writeLS(INSTANCE_URLS_LS_KEY, urls.value);
+ }
+ }
+ }
+
+ const primary = computed(() => urls.value[0] ?? null);
+
+ function addUrl(input: string) {
+ const url = normalize(input);
+ if (!url) return;
+ const next = [url, ...urls.value.filter(u => u !== url)].slice(0, INSTANCE_URLS_LIMIT);
+ urls.value = next;
+ writeLS(INSTANCE_URLS_LS_KEY, next);
+ legacyCookie.value = url;
+ }
+
+ function removeUrl(url: string) {
+ const next = urls.value.filter(u => u !== url);
+ urls.value = next;
+ writeLS(INSTANCE_URLS_LS_KEY, next);
+ if (legacyCookie.value === url) {
+ legacyCookie.value = next[0] ?? null;
+ }
+ }
+
+ function clearUrls() {
+ urls.value = [];
+ writeLS(INSTANCE_URLS_LS_KEY, []);
+ legacyCookie.value = null;
+ }
+
+ return { urls, primary, addUrl, removeUrl, clearUrls };
+}
diff --git a/app/composables/usePageHistory.ts b/app/composables/usePageHistory.ts
new file mode 100644
index 000000000..82834fa20
--- /dev/null
+++ b/app/composables/usePageHistory.ts
@@ -0,0 +1,70 @@
+import { FAVORITES_LS_KEY, RECENTS_LIMIT, RECENTS_LS_KEY } from '~/utils/userPreferences';
+
+export interface PageEntry {
+ path: string;
+ title: string;
+ visitedAt?: number;
+}
+
+function readLS(key: string, fallback: T): T {
+ if (!import.meta.client) return fallback;
+ try {
+ const raw = localStorage.getItem(key);
+ if (!raw) return fallback;
+ return JSON.parse(raw) as T;
+ }
+ catch {
+ return fallback;
+ }
+}
+
+function writeLS(key: string, value: unknown) {
+ if (!import.meta.client) return;
+ try { localStorage.setItem(key, JSON.stringify(value)); }
+ catch { /* ignore quota errors */ }
+}
+
+export default function usePageHistory() {
+ const recents = useState(RECENTS_LS_KEY, () => []);
+ const favorites = useState(FAVORITES_LS_KEY, () => []);
+
+ if (import.meta.client && recents.value.length === 0) {
+ recents.value = readLS(RECENTS_LS_KEY, []);
+ }
+ if (import.meta.client && favorites.value.length === 0) {
+ favorites.value = readLS(FAVORITES_LS_KEY, []);
+ }
+
+ function recordVisit(entry: PageEntry) {
+ if (!entry.path || !entry.title) return;
+ const next = [{ ...entry, visitedAt: Date.now() }, ...recents.value.filter(r => r.path !== entry.path)]
+ .slice(0, RECENTS_LIMIT);
+ recents.value = next;
+ writeLS(RECENTS_LS_KEY, next);
+ }
+
+ function isFavorite(path: string) {
+ return favorites.value.some(f => f.path === path);
+ }
+
+ function toggleFavorite(entry: PageEntry) {
+ if (!entry.path || !entry.title) return;
+ const next = isFavorite(entry.path)
+ ? favorites.value.filter(f => f.path !== entry.path)
+ : [{ path: entry.path, title: entry.title }, ...favorites.value];
+ favorites.value = next;
+ writeLS(FAVORITES_LS_KEY, next);
+ }
+
+ function clearRecents() {
+ recents.value = [];
+ writeLS(RECENTS_LS_KEY, []);
+ }
+
+ function clearFavorites() {
+ favorites.value = [];
+ writeLS(FAVORITES_LS_KEY, []);
+ }
+
+ return { recents, favorites, recordVisit, isFavorite, toggleFavorite, clearRecents, clearFavorites };
+}
diff --git a/app/composables/useSectionNavigation.ts b/app/composables/useSectionNavigation.ts
new file mode 100644
index 000000000..22faa9d44
--- /dev/null
+++ b/app/composables/useSectionNavigation.ts
@@ -0,0 +1,137 @@
+import type { ContentNavigationItem } from '@nuxt/content';
+import {
+ docsGroups,
+ docsSections,
+ findGroupBySectionId,
+ findSectionByPath,
+ matchesPrefix,
+ type DocsGroup,
+ type DocsSection,
+} from '#shared/utils/docsSections';
+
+export function useSectionNavigation() {
+ const navigation = inject[>('navigation')!;
+ const route = useRoute();
+
+ const currentSection = computed](() =>
+ findSectionByPath(route.path),
+ );
+
+ const currentGroup = computed(() => {
+ if (currentSection.value) return findGroupBySectionId(currentSection.value.id);
+ // Treat the home route as part of the primary docs group so the
+ // section subnav and sidebar render with default content.
+ if (route.path === '/') return docsGroups.find(group => group.id === 'docs') ?? null;
+ return null;
+ });
+
+ const groups = computed(() =>
+ docsGroups.map(group => ({
+ ...group,
+ active: currentGroup.value?.id === group.id,
+ })),
+ );
+
+ const sections = computed(() =>
+ docsSections.map(section => ({
+ ...section,
+ active: section.prefixes.some(prefix => matchesPrefix(route.path, prefix)),
+ })),
+ );
+
+ const groupSections = computed(() => {
+ const group = currentGroup.value;
+ if (!group) return [];
+ return group.sectionIds
+ .map(id => sections.value.find(section => section.id === id))
+ .filter((section): section is typeof sections.value[number] => Boolean(section));
+ });
+
+ const findRoot = (prefix: string) =>
+ navigation.value?.find(item => item.path === prefix || item.path.startsWith(`${prefix}/`)) ?? null;
+
+ const collapseDescendants = (item: ContentNavigationItem): ContentNavigationItem => ({
+ ...item,
+ defaultOpen: false,
+ children: item.children?.map(collapseDescendants),
+ });
+
+ const sectionNavigation = computed(() => {
+ const section = currentSection.value;
+ if (!section) return [];
+
+ const topLevel = section.id === 'deploy' || section.id === 'community'
+ ? section.prefixes
+ .map(findRoot)
+ .filter((item): item is ContentNavigationItem => item !== null)
+ : findRoot(section.prefixes[0]!)?.children ?? [];
+
+ return topLevel.map(item => ({
+ ...item,
+ children: item.children?.map(collapseDescendants),
+ }));
+ });
+
+ const containsActivePath = (item: ContentNavigationItem): boolean => {
+ if (item.path === route.path) return true;
+ return item.children?.some(containsActivePath) ?? false;
+ };
+
+ const openActiveAncestors = (item: ContentNavigationItem): ContentNavigationItem => {
+ const onActivePath = containsActivePath(item);
+ return {
+ ...item,
+ defaultOpen: onActivePath,
+ children: item.children?.map(openActiveAncestors),
+ };
+ };
+
+ const mobileSectionNavigation = computed(() =>
+ sectionNavigation.value.map(openActiveAncestors),
+ );
+
+ const mobileNavigationTree = computed(() => {
+ if (currentGroup.value?.id === 'docs') {
+ return groupSections.value.flatMap((section) => {
+ const topLevel = section.id === 'deploy' || section.id === 'community'
+ ? section.prefixes.map(findRoot).filter((item): item is ContentNavigationItem => item !== null)
+ : findRoot(section.prefixes[0]!)?.children ?? [];
+ const items = topLevel.map(item => ({
+ ...item,
+ children: item.children?.map(collapseDescendants),
+ })).map(openActiveAncestors);
+ if (!items.length) return [];
+ return [
+ { title: section.label, icon: section.icon, isGroupLabel: true } as ContentNavigationItem,
+ ...items,
+ ];
+ });
+ }
+
+ return mobileSectionNavigation.value;
+ });
+
+ const allSectionItems = computed(() => {
+ const items = groups.value.flatMap((group) => {
+ const gs = group.sectionIds
+ .map(id => sections.value.find(s => s.id === id))
+ .filter((s): s is typeof sections.value[number] => Boolean(s));
+ const groupLink = { title: group.label, to: group.to, path: group.to, icon: group.icon, active: group.active };
+ if (gs.length <= 1) return [groupLink];
+ return [groupLink, ...gs.map(s => ({ title: s.label, to: s.to, path: s.to, icon: s.icon, active: s.active, indent: true }))];
+ });
+ return items;
+ });
+
+ return {
+ groups,
+ currentGroup,
+ sections,
+ currentSection,
+ groupSections,
+ sectionNavigation,
+ mobileSectionNavigation,
+ mobileNavigationTree,
+ allSectionItems,
+ };
+}
diff --git a/app/composables/useSettingsOverlay.ts b/app/composables/useSettingsOverlay.ts
new file mode 100644
index 000000000..e171436cb
--- /dev/null
+++ b/app/composables/useSettingsOverlay.ts
@@ -0,0 +1,7 @@
+import { createSharedComposable } from '@vueuse/core';
+import { LazySettingsDrawer } from '#components';
+
+export const useSettingsOverlay = createSharedComposable(() => {
+ const overlay = useOverlay();
+ return overlay.create(LazySettingsDrawer);
+});
diff --git a/app/composables/useUserPreferences.ts b/app/composables/useUserPreferences.ts
new file mode 100644
index 000000000..81c908ffa
--- /dev/null
+++ b/app/composables/useUserPreferences.ts
@@ -0,0 +1,125 @@
+import { getFramework } from '#shared/utils/frameworks';
+import { getUseCase } from '~/utils/useCases';
+import { getDeployment } from '~/utils/deployments';
+import { getRole } from '~/utils/roles';
+import { getExperience } from '~/utils/experience';
+import {
+ API_CONSUMER_LS_KEY,
+ LEGACY_FRAMEWORK_COOKIE,
+ PREFS_COOKIE,
+ defaultPrefs,
+ type OnboardingState,
+ type UserPreferences,
+} from '~/utils/userPreferences';
+
+const validators: { [K in keyof UserPreferences]: (v: string) => UserPreferences[K] | null } = {
+ framework: v => getFramework(v)?.slug ?? null,
+ useCase: v => getUseCase(v)?.slug ?? null,
+ deployment: v => getDeployment(v)?.slug ?? null,
+ role: v => getRole(v)?.slug ?? null,
+ experience: v => getExperience(v)?.slug ?? null,
+};
+
+export default function useUserPreferences() {
+ const cookie = useCookie(PREFS_COOKIE, {
+ default: () => ({ ...defaultPrefs }),
+ maxAge: 60 * 60 * 24 * 30,
+ sameSite: 'lax',
+ path: '/',
+ });
+
+ const legacyFramework = useCookie(LEGACY_FRAMEWORK_COOKIE);
+ if (!cookie.value.framework && legacyFramework.value) {
+ const valid = getFramework(legacyFramework.value);
+ if (valid) cookie.value = { ...cookie.value, framework: valid.slug };
+ }
+
+ const prefs = computed(() => ({ ...defaultPrefs, ...cookie.value }));
+
+ function set(key: K, value: UserPreferences[K] | null) {
+ const validated = value === null ? null : validators[key](value as string);
+ cookie.value = { ...prefs.value, [key]: validated };
+ }
+
+ const library = useState(API_CONSUMER_LS_KEY, () => null);
+
+ function reset() {
+ cookie.value = { ...defaultPrefs };
+ library.value = null;
+ if (import.meta.client) {
+ try { localStorage.removeItem(API_CONSUMER_LS_KEY); }
+ catch { /* ignore */ }
+ }
+ }
+
+ const framework = computed(() => prefs.value.framework ? getFramework(prefs.value.framework) ?? null : null);
+ const useCase = computed(() => prefs.value.useCase ? getUseCase(prefs.value.useCase) ?? null : null);
+ const deployment = computed(() => prefs.value.deployment ? getDeployment(prefs.value.deployment) ?? null : null);
+ const role = computed(() => prefs.value.role ? getRole(prefs.value.role) ?? null : null);
+ const experience = computed(() => prefs.value.experience ? getExperience(prefs.value.experience) ?? null : null);
+
+ const hasAnyPref = computed(() => Boolean(
+ prefs.value.framework
+ || prefs.value.useCase
+ || prefs.value.deployment
+ || prefs.value.role
+ || prefs.value.experience,
+ ));
+
+ const onboardingState = computed(() => {
+ const v = prefs.value.onboarding;
+ if (v) return v;
+ return hasAnyPref.value ? 'onboarded' : 'idle';
+ });
+
+ function setOnboarding(state: OnboardingState) {
+ cookie.value = { ...prefs.value, onboarding: state };
+ }
+ function startOnboarding() {
+ setOnboarding('active');
+ }
+ function completeOnboarding() {
+ setOnboarding('onboarded');
+ }
+ function dismissOnboarding() {
+ setOnboarding('dismissed');
+ }
+
+ function touchCookie() {
+ cookie.value = { ...prefs.value };
+ }
+
+ if (import.meta.client && library.value === null) {
+ try { library.value = localStorage.getItem(API_CONSUMER_LS_KEY); }
+ catch { /* ignore */ }
+ }
+ function setLibrary(value: string | null) {
+ library.value = value;
+ if (import.meta.client) {
+ try {
+ if (value === null) localStorage.removeItem(API_CONSUMER_LS_KEY);
+ else localStorage.setItem(API_CONSUMER_LS_KEY, value);
+ }
+ catch { /* ignore */ }
+ }
+ }
+
+ return {
+ prefs,
+ framework,
+ useCase,
+ deployment,
+ role,
+ experience,
+ library,
+ hasAnyPref,
+ onboardingState,
+ set,
+ setLibrary,
+ reset,
+ startOnboarding,
+ completeOnboarding,
+ dismissOnboarding,
+ touchCookie,
+ };
+}
diff --git a/app/error.vue b/app/error.vue
index a4b7df18a..d8367535e 100644
--- a/app/error.vue
+++ b/app/error.vue
@@ -3,11 +3,11 @@
-
-
+
-
+
+
diff --git a/app/layouts/docs.vue b/app/layouts/docs.vue
index 4ce8a4cb0..09d16728e 100644
--- a/app/layouts/docs.vue
+++ b/app/layouts/docs.vue
@@ -1,57 +1,30 @@
-
+
-
-
-
-
+
- {{ sectionHeader.label }}
+ {{ displaySection.label }}
@@ -164,15 +122,15 @@ const sectionHeader = computed<{ label: string; icon?: string } | null>(() => {
-
+
-
+
diff --git a/app/layouts/tutorial.vue b/app/layouts/tutorial.vue
index 9e54bcd8f..ec56ab039 100644
--- a/app/layouts/tutorial.vue
+++ b/app/layouts/tutorial.vue
@@ -1,48 +1,30 @@
-
+
-
-
-
-
- Hop To
+
+
+
+ {{ section.label }}
{
variant="link"
highlight
/>
-
+
-
+
diff --git a/app/pages/[...slug].vue b/app/pages/[...slug].vue
index 180ce541b..cf93a09fc 100644
--- a/app/pages/[...slug].vue
+++ b/app/pages/[...slug].vue
@@ -11,6 +11,20 @@ definePageMeta({
const route = useRoute();
+const menuDrawerOpen = ref(false);
+const tocDrawerOpen = ref(false);
+
+watch(() => route.path, () => {
+ menuDrawerOpen.value = false;
+ tocDrawerOpen.value = false;
+});
+
+const { currentSection, currentGroup, groupSections, mobileSectionNavigation, allSectionItems } = useSectionNavigation();
+
+const pageHeaderUi = {
+ headline: 'font-mono font-normal! uppercase tracking-wider',
+};
+
const { path } = useNormalizedPath();
if (path.value.endsWith('/.navigation')) {
@@ -33,6 +47,16 @@ if (!page.value) {
});
}
+const { recordVisit, isFavorite, toggleFavorite } = usePageHistory();
+
+watch(page, (current) => {
+ if (import.meta.client && current?.title) {
+ recordVisit({ path: path.value, title: current.title });
+ }
+}, { immediate: true });
+
+const favorited = computed(() => isFavorite(path.value));
+
const headline = computed(() => findPageHeadline(navigation.value, path.value));
const ogBreadcrumb = computed(() =>
@@ -66,33 +90,111 @@ const frameworkIcon = computed(() =>
frameworkRootMatch.value ? frameworkNode.value?.icon : undefined,
);
-const frameworkBreadcrumb = computed(() => {
- if (frameworkGuideMatch.value && frameworkNode.value) {
- return [
- { label: 'Frameworks', to: '/frameworks' },
- { label: frameworkNode.value.title, to: frameworkNode.value.path },
- ];
+const breadcrumb = computed(() => {
+ const trail: { label: string; to?: string }[] = (findPageBreadcrumb(navigation.value, path.value) ?? [])
+ .map(item => ({
+ label: item.title,
+ to: item.path === path.value ? undefined : item.path,
+ }));
+
+ if (trail.length === 0 && page.value?.title) {
+ trail.push({ label: page.value.title });
}
- if (frameworkRootMatch.value) {
- return [{ label: 'Frameworks', to: '/frameworks' }];
+
+ if (frameworkGuideMatch.value && frameworkNode.value) {
+ const frameworkPath = frameworkNode.value.path;
+ const hasFrameworkCrumb = trail.some(item => item.to === frameworkPath);
+ if (!hasFrameworkCrumb) {
+ trail.push({ label: frameworkNode.value.title ?? '', to: frameworkPath });
+ }
+ else {
+ for (const item of trail) {
+ if (item.to === frameworkPath) item.label = frameworkNode.value.title ?? item.label;
+ }
+ }
}
- return [];
+
+ return [
+ { 'icon': 'i-ph-house', 'to': '/', 'aria-label': 'Home' },
+ ...trail,
+ ];
});
-
+
+
+
-
+
/
@@ -118,6 +220,14 @@ const frameworkBreadcrumb = computed(() => {
v-if="!frameworkRootMatch"
#links
>
+
@@ -145,5 +255,5 @@ const frameworkBreadcrumb = computed(() => {
:file="page.id!"
/>
-
+
diff --git a/app/pages/frameworks/index.vue b/app/pages/frameworks/index.vue
index 9f0fc5723..ac140e344 100644
--- a/app/pages/frameworks/index.vue
+++ b/app/pages/frameworks/index.vue
@@ -49,12 +49,25 @@ useSeoMeta({
-
+
+ :ui="{ headline: 'font-mono font-normal! uppercase tracking-wider' }"
+ >
+
+
+
+ /
+
+
+
+
@@ -78,5 +91,5 @@ useSeoMeta({
-
+
diff --git a/app/pages/index.vue b/app/pages/index.vue
index 8649dafcd..95cb1c551 100644
--- a/app/pages/index.vue
+++ b/app/pages/index.vue
@@ -1,4 +1,8 @@
-
-
-
+
+
-
-
-
-
-
+
+
+
+
+
+
diff --git a/app/pages/tutorials/[category]/[...slug].vue b/app/pages/tutorials/[category]/[...slug].vue
index 6bad7ae24..7fedaad45 100644
--- a/app/pages/tutorials/[category]/[...slug].vue
+++ b/app/pages/tutorials/[category]/[...slug].vue
@@ -8,6 +8,13 @@ definePageMeta({
layout: 'tutorial',
});
+const route = useRoute();
+const menuDrawerOpen = ref(false);
+const tocDrawerOpen = ref(false);
+watch(() => route.path, () => { menuDrawerOpen.value = false; tocDrawerOpen.value = false; });
+
+const { mobileSectionNavigation, currentSection, allSectionItems } = useSectionNavigation();
+
const { path } = useNormalizedPath();
const { data: page } = await useAsyncData(path, () =>
@@ -22,12 +29,32 @@ if (!page.value) {
});
}
-const breadcrumb = computed(() =>
- (findPageBreadcrumb(navigation.value, path.value) ?? []).map(item => ({
- label: item.title,
- to: item.path,
- })),
-);
+const { recordVisit, isFavorite, toggleFavorite } = usePageHistory();
+
+const pageHeaderUi = {
+ headline: 'font-mono font-normal! uppercase tracking-wider',
+};
+
+watch(page, (current) => {
+ if (import.meta.client && current?.title) {
+ recordVisit({ path: path.value, title: current.title });
+ }
+}, { immediate: true });
+
+const favorited = computed(() => isFavorite(path.value));
+
+const breadcrumb = computed(() => {
+ const trail = (findPageBreadcrumb(navigation.value, path.value) ?? [])
+ .map(item => ({
+ label: item.title,
+ to: item.path === path.value ? undefined : item.path,
+ }));
+
+ return [
+ { 'icon': 'i-ph-house', 'to': '/', 'aria-label': 'Home' },
+ ...trail,
+ ];
+});
const frameworkChips = computed(() => {
const tech = page.value?.technologies ?? [];
@@ -56,10 +83,45 @@ defineOgImage('Default', {
-
+
+
+
@@ -103,6 +165,14 @@ defineOgImage('Default', {
v-if="page"
#links
>
+
@@ -127,5 +197,5 @@ defineOgImage('Default', {
:file="page!.id!"
/>
-
+
diff --git a/app/pages/tutorials/[category]/index.vue b/app/pages/tutorials/[category]/index.vue
index 8eb3f47a5..41a129cea 100644
--- a/app/pages/tutorials/[category]/index.vue
+++ b/app/pages/tutorials/[category]/index.vue
@@ -4,6 +4,11 @@ definePageMeta({
});
const route = useRoute();
+const menuDrawerOpen = ref(false);
+watch(() => route.path, () => { menuDrawerOpen.value = false; });
+
+const { mobileSectionNavigation, currentSection, allSectionItems } = useSectionNavigation();
+
const { data: page } = await useAsyncData(route.path, () => queryCollection('content').path('/tutorials/' + route.params.category).first());
if (!page.value) {
@@ -12,22 +17,38 @@ if (!page.value) {
-
+
+
+
-
- Tutorials
-
+
+ /
+
+
@@ -40,5 +61,5 @@ if (!page.value) {
-
+
diff --git a/app/pages/tutorials/index.vue b/app/pages/tutorials/index.vue
index 62c6e84c9..e320030d2 100644
--- a/app/pages/tutorials/index.vue
+++ b/app/pages/tutorials/index.vue
@@ -4,6 +4,10 @@ definePageMeta({
});
const route = useRoute();
+const menuDrawerOpen = ref(false);
+watch(() => route.path, () => { menuDrawerOpen.value = false; });
+
+const { mobileSectionNavigation, currentSection, allSectionItems } = useSectionNavigation();
const { data: page } = await useAsyncData(route.path, () => queryCollection('content').path('/tutorials').first());
const { data: categories } = await useAsyncData(route.path + '-categories', () => queryCollection('content')
@@ -16,11 +20,37 @@ if (!page.value) {
-
+
+
+
+
+
+
+ /
+
+
+
-
+
diff --git a/app/utils/deployments.ts b/app/utils/deployments.ts
new file mode 100644
index 000000000..10638c830
--- /dev/null
+++ b/app/utils/deployments.ts
@@ -0,0 +1,16 @@
+import type { Deployment } from './userPreferences';
+
+export interface DeploymentOption {
+ slug: Deployment;
+ label: string;
+ icon: string;
+ description: string;
+}
+
+export const deployments: DeploymentOption[] = [
+ { slug: 'cloud', label: 'Directus Cloud', icon: 'i-ph-cloud', description: 'Managed hosting by Directus.' },
+ { slug: 'self-hosted', label: 'Self-Hosted', icon: 'i-ph-hard-drives', description: 'Run Directus on your own infrastructure.' },
+];
+
+export const getDeployment = (slug: string): DeploymentOption | undefined =>
+ deployments.find(d => d.slug === slug);
diff --git a/app/utils/experience.ts b/app/utils/experience.ts
new file mode 100644
index 000000000..c8db59634
--- /dev/null
+++ b/app/utils/experience.ts
@@ -0,0 +1,17 @@
+import type { Experience } from './userPreferences';
+
+export interface ExperienceOption {
+ slug: Experience;
+ label: string;
+ icon: string;
+ description: string;
+}
+
+export const experiences: ExperienceOption[] = [
+ { slug: 'new', label: 'New to Directus', icon: 'i-ph-sparkle', description: 'First time or just evaluating.' },
+ { slug: 'familiar', label: 'Some Experience', icon: 'i-ph-plant', description: 'Built something, still learning.' },
+ { slug: 'experienced', label: 'Power User', icon: 'i-ph-tree', description: 'Daily / production use.' },
+];
+
+export const getExperience = (slug: string): ExperienceOption | undefined =>
+ experiences.find(e => e.slug === slug);
diff --git a/app/utils/libraries.ts b/app/utils/libraries.ts
new file mode 100644
index 000000000..fb35621b1
--- /dev/null
+++ b/app/utils/libraries.ts
@@ -0,0 +1,28 @@
+export interface LibraryOption {
+ value: string;
+ label: string;
+ icon: string;
+ matchLabels: string[];
+}
+
+export const libraries: LibraryOption[] = [
+ { value: '0', label: 'SDK', icon: 'simple-icons:directus', matchLabels: ['Directus SDK', 'SDK'] },
+ { value: '1', label: 'REST', icon: 'i-ph-globe', matchLabels: ['REST'] },
+ { value: '2', label: 'GraphQL', icon: 'simple-icons:graphql', matchLabels: ['GraphQL'] },
+];
+
+export const sampleVariants: LibraryOption[] = [
+ { value: 'fetch', label: 'Fetch', icon: 'simple-icons:javascript', matchLabels: ['Fetch', 'JavaScript fetch', 'fetch'] },
+ { value: 'curl', label: 'cURL', icon: 'simple-icons:curl', matchLabels: ['cURL', 'curl'] },
+];
+
+export const allSampleOptions: LibraryOption[] = [...libraries, ...sampleVariants];
+
+export const getSampleOptionByLabel = (label: string): LibraryOption | undefined =>
+ allSampleOptions.find(l => l.matchLabels.includes(label));
+
+export const getLibraryByLabel = (label: string): LibraryOption | undefined =>
+ libraries.find(l => l.matchLabels.includes(label));
+
+export const getLibraryByValue = (value: string): LibraryOption | undefined =>
+ libraries.find(l => l.value === value);
diff --git a/app/utils/relativeTime.ts b/app/utils/relativeTime.ts
new file mode 100644
index 000000000..cd46ffda2
--- /dev/null
+++ b/app/utils/relativeTime.ts
@@ -0,0 +1,12 @@
+export function relativeTime(ts?: number): string {
+ if (!ts) return '';
+ const diff = Date.now() - ts;
+ const m = Math.floor(diff / 60000);
+ if (m < 1) return 'just now';
+ if (m < 60) return `${m}m`;
+ const h = Math.floor(m / 60);
+ if (h < 24) return `${h}h`;
+ const d = Math.floor(h / 24);
+ if (d < 7) return `${d}d`;
+ return `${Math.floor(d / 7)}w`;
+}
diff --git a/app/utils/roles.ts b/app/utils/roles.ts
new file mode 100644
index 000000000..95960d5e6
--- /dev/null
+++ b/app/utils/roles.ts
@@ -0,0 +1,16 @@
+import type { Role } from './userPreferences';
+
+export interface RoleOption {
+ slug: Role;
+ label: string;
+ icon: string;
+ description: string;
+}
+
+export const roles: RoleOption[] = [
+ { slug: 'developer', label: 'Developer', icon: 'i-ph-code', description: 'Show code-first content and technical detail.' },
+ { slug: 'non-developer', label: 'Non-Developer', icon: 'i-ph-user', description: 'Focus on UI workflows and concepts.' },
+];
+
+export const getRole = (slug: string): RoleOption | undefined =>
+ roles.find(r => r.slug === slug);
diff --git a/app/utils/safePolygon.ts b/app/utils/safePolygon.ts
new file mode 100644
index 000000000..53669a106
--- /dev/null
+++ b/app/utils/safePolygon.ts
@@ -0,0 +1,179 @@
+/**
+ * Safe-triangle hover intent guard.
+ *
+ * Inspired by @floating-ui/react's safePolygon (MIT) and Amazon's mega-menu
+ * pattern. Our case is simpler: trigger (results list) is always to the LEFT
+ * of the floating pane (preview), so the safe area is a triangle from the
+ * cursor's exit point to the floating pane's two left corners.
+ *
+ * Usage: pass `trigger` (results container) and `floating` (preview pane) refs.
+ * Call `onPointerMove(event)` from a pointermove listener that covers both
+ * elements and the gap between them. While the cursor is inside the triangle,
+ * `isGuarding()` returns true — use that to swallow hover-driven highlight
+ * events on intermediate rows.
+ */
+
+type Point = [number, number];
+
+export interface SafePolygonOptions {
+ /** Pixel buffer around the polygon edges. Default 0.5 (matches Floating UI). */
+ buffer?: number;
+ /** Require sustained cursor motion toward the floating element. Default true. */
+ requireIntent?: boolean;
+}
+
+export interface SafePolygon {
+ /** Call from pointermove on the trigger element. Returns true if cursor is inside the safe polygon. */
+ onPointerMove: (event: PointerEvent | MouseEvent) => boolean;
+ /** True while a recent pointer motion is still inside the polygon. */
+ isGuarding: () => boolean;
+ /** Reset state — call when the floating target changes (e.g. results list rebuilds). */
+ reset: () => void;
+}
+
+function isPointInPolygon(point: Point, polygon: Point[]) {
+ const [x, y] = point;
+ let isInside = false;
+ const length = polygon.length;
+ for (let i = 0, j = length - 1; i < length; j = i++) {
+ const [xi, yi] = polygon[i] || [0, 0];
+ const [xj, yj] = polygon[j] || [0, 0];
+ const intersect = yi >= y !== yj >= y && x <= ((xj - xi) * (y - yi)) / (yj - yi) + xi;
+ if (intersect) isInside = !isInside;
+ }
+ return isInside;
+}
+
+export function createSafePolygon(
+ getTrigger: () => HTMLElement | null,
+ getFloating: () => HTMLElement | null,
+ options: SafePolygonOptions = {},
+): SafePolygon {
+ const { buffer = 0.5, requireIntent = true } = options;
+
+ let anchorX: number | null = null;
+ let anchorY: number | null = null;
+ let lastX: number | null = null;
+ let lastY: number | null = null;
+ let prevX: number | null = null;
+ let lastTime = 0;
+ let guarding = false;
+
+ function getCursorSpeed(x: number, y: number): number | null {
+ const now = performance.now();
+ const elapsed = now - lastTime;
+ if (lastX === null || lastY === null || elapsed === 0) {
+ lastX = x;
+ lastY = y;
+ lastTime = now;
+ return null;
+ }
+ const dx = x - lastX;
+ const dy = y - lastY;
+ const speed = Math.sqrt(dx * dx + dy * dy) / elapsed;
+ lastX = x;
+ lastY = y;
+ lastTime = now;
+ return speed;
+ }
+
+ function reset() {
+ anchorX = null;
+ anchorY = null;
+ lastX = null;
+ lastY = null;
+ prevX = null;
+ lastTime = 0;
+ guarding = false;
+ }
+
+ function onPointerMove(event: PointerEvent | MouseEvent): boolean {
+ const trigger = getTrigger();
+ const floating = getFloating();
+ if (!trigger || !floating) {
+ guarding = false;
+ return false;
+ }
+
+ const { clientX, clientY } = event;
+ const triggerRect = trigger.getBoundingClientRect();
+ const floatingRect = floating.getBoundingClientRect();
+
+ const insideTrigger
+ = clientX >= triggerRect.left
+ && clientX <= triggerRect.right
+ && clientY >= triggerRect.top
+ && clientY <= triggerRect.bottom;
+
+ // Anchor = cursor position when the user begins moving toward the
+ // floating pane. Update anchor while cursor is NOT moving rightward
+ // (toward the pane). Once the cursor commits to a rightward move,
+ // freeze the anchor so the triangle has a real apex behind the cursor.
+ if (insideTrigger) {
+ const movingTowardFloating = prevX !== null && clientX > prevX;
+ if (!movingTowardFloating || anchorX === null) {
+ anchorX = clientX;
+ anchorY = clientY;
+ }
+ }
+ prevX = clientX;
+
+ if (anchorX === null || anchorY === null) {
+ guarding = false;
+ return false;
+ }
+
+ // Triangle from anchor → top-left and bottom-left corners of floating.
+ // Buffer pulls the floating-side edge inward by a hair so the triangle
+ // doesn't render flush against the pane border.
+ const polygon: Point[] = [
+ [anchorX, anchorY],
+ [floatingRect.left + buffer, floatingRect.top],
+ [floatingRect.left + buffer, floatingRect.bottom],
+ ];
+
+ // Trough between trigger right edge and floating left edge: any cursor
+ // inside this strip should be guarded regardless of triangle math.
+ const top = Math.min(triggerRect.top, floatingRect.top);
+ const bottom = Math.max(triggerRect.bottom, floatingRect.bottom);
+ const rectPoly: Point[] = [
+ [triggerRect.right - 1, bottom],
+ [triggerRect.right - 1, top],
+ [floatingRect.left + 1, top],
+ [floatingRect.left + 1, bottom],
+ ];
+
+ const insideTrough = isPointInPolygon([clientX, clientY], rectPoly);
+ const insidePolygon = isPointInPolygon([clientX, clientY], polygon);
+
+ if (insideTrough) {
+ guarding = true;
+ return true;
+ }
+
+ // Cursor crossed the floating pane's left edge → no longer guarding.
+ if (clientX >= floatingRect.left + 1) {
+ guarding = false;
+ return false;
+ }
+
+ // Intent check: if the cursor stalls (slow motion) outside the trigger,
+ // drop the guard so hover responds normally.
+ if (requireIntent && !insideTrigger) {
+ const speed = getCursorSpeed(clientX, clientY);
+ if (speed !== null && speed < 0.1) {
+ guarding = false;
+ return false;
+ }
+ }
+
+ guarding = insidePolygon;
+ return insidePolygon;
+ }
+
+ return {
+ onPointerMove,
+ isGuarding: () => guarding,
+ reset,
+ };
+}
diff --git a/app/utils/useCases.ts b/app/utils/useCases.ts
new file mode 100644
index 000000000..77d37e885
--- /dev/null
+++ b/app/utils/useCases.ts
@@ -0,0 +1,19 @@
+export interface UseCase {
+ slug: string;
+ label: string;
+ icon: string;
+ description: string;
+}
+
+export const useCases: UseCase[] = [
+ { slug: 'headless-cms', label: 'Headless CMS', icon: 'i-ph-article', description: 'Power websites and apps with structured content.' },
+ { slug: 'client-website', label: 'Client Website', icon: 'i-ph-globe', description: 'Marketing sites and client projects.' },
+ { slug: 'internal-tool', label: 'Internal App', icon: 'i-ph-buildings', description: 'Admin panels and internal tooling.' },
+ { slug: 'api-backend', label: 'API Backend', icon: 'i-ph-plugs-connected', description: 'Data platform and backend-as-a-service.' },
+ { slug: 'multi-tenant-app', label: 'Multi-Tenant App', icon: 'i-ph-users-three', description: 'SaaS apps serving multiple customers.' },
+ { slug: 'ecommerce', label: 'Ecommerce', icon: 'i-ph-shopping-cart', description: 'Storefronts and product catalogs.' },
+ { slug: 'other', label: 'Other', icon: 'i-ph-dots-three-circle', description: 'Something else.' },
+];
+
+export const getUseCase = (slug: string): UseCase | undefined =>
+ useCases.find(u => u.slug === slug);
diff --git a/app/utils/userPreferences.ts b/app/utils/userPreferences.ts
new file mode 100644
index 000000000..a7fcd5959
--- /dev/null
+++ b/app/utils/userPreferences.ts
@@ -0,0 +1,34 @@
+export type Deployment = 'cloud' | 'self-hosted';
+export type Role = 'developer' | 'non-developer';
+export type Experience = 'new' | 'familiar' | 'experienced';
+export type OnboardingState = 'idle' | 'active' | 'onboarded' | 'dismissed';
+
+export interface UserPreferences {
+ framework: string | null;
+ useCase: string | null;
+ deployment: Deployment | null;
+ role: Role | null;
+ experience: Experience | null;
+ onboarding: OnboardingState | null;
+}
+
+export const PREFS_COOKIE = 'directus-docs-prefs';
+export const LEGACY_FRAMEWORK_COOKIE = 'framework';
+export const API_CONSUMER_LS_KEY = 'code-group-api-consumer';
+
+export const defaultPrefs: UserPreferences = {
+ framework: null,
+ useCase: null,
+ deployment: null,
+ role: null,
+ experience: null,
+ onboarding: null,
+};
+
+export const RECENTS_LS_KEY = 'directus-docs-recents';
+export const FAVORITES_LS_KEY = 'directus-docs-favorites';
+export const RECENTS_LIMIT = 20;
+
+export const INSTANCE_URLS_LS_KEY = 'directus-docs-instance-urls';
+export const LEGACY_INSTANCE_URL_COOKIE = 'directus-instance-url';
+export const INSTANCE_URLS_LIMIT = 5;
diff --git a/content/_partials/engine-studio-box.md b/content/_partials/engine-studio-box.md
index 2a45c0860..7f8066b87 100644
--- a/content/_partials/engine-studio-box.md
+++ b/content/_partials/engine-studio-box.md
@@ -1,5 +1,5 @@
-::shiny-grid{class="lg:grid-cols-2"}
- :::shiny-card
+::u-page-grid{class="lg:grid-cols-2"}
+ :::u-page-card
---
title: APIs and Developer Tools
description: Build with REST, GraphQL, the SDK, realtime, auth, and Flows.
@@ -8,7 +8,7 @@
:product-link{product="connect"} :product-link{product="realtime"} :product-link{product="auth"} :product-link{product="automate"}
:::
- :::shiny-card
+ :::u-page-card
---
title: Data Studio
description: A web app for your whole team to manage content, files, users, and dashboards.
diff --git a/content/getting-started/7.create-an-automation.md b/content/getting-started/7.create-an-automation.md
index 8e63f2e81..6b2ce7495 100644
--- a/content/getting-started/7.create-an-automation.md
+++ b/content/getting-started/7.create-an-automation.md
@@ -50,4 +50,4 @@ Now, when you create a post, the user you entered will be notified.
## Next Steps
-Read more about different [triggers](/guides/automate/triggers) available in flows and how data is passed through a flow with [the data chain](/guides/automate/data-chain).
+Read more about different [triggers](/guides/flows/triggers) available in flows and how data is passed through a flow with [the data chain](/guides/flows/data-chain).
diff --git a/content/guides/01.data-model/.navigation.yml b/content/guides/01.data-model/.navigation.yml
index 287d10c68..e69de29bb 100644
--- a/content/guides/01.data-model/.navigation.yml
+++ b/content/guides/01.data-model/.navigation.yml
@@ -1 +0,0 @@
-icon: directus-explore
diff --git a/content/guides/02.content/.navigation.yml b/content/guides/02.content/.navigation.yml
index 41f604a62..e69de29bb 100644
--- a/content/guides/02.content/.navigation.yml
+++ b/content/guides/02.content/.navigation.yml
@@ -1 +0,0 @@
-icon: directus-editor
diff --git a/content/guides/03.auth/.navigation.yml b/content/guides/03.auth/.navigation.yml
index 8b3a757a0..e69de29bb 100644
--- a/content/guides/03.auth/.navigation.yml
+++ b/content/guides/03.auth/.navigation.yml
@@ -1 +0,0 @@
-icon: directus-auth
diff --git a/content/guides/04.connect/.navigation.yml b/content/guides/04.connect/.navigation.yml
index f492d43ad..ddb8571ce 100644
--- a/content/guides/04.connect/.navigation.yml
+++ b/content/guides/04.connect/.navigation.yml
@@ -1,2 +1 @@
title: APIs
-icon: directus-connect
diff --git a/content/guides/04.connect/5.errors.md b/content/guides/04.connect/5.errors.md
index 197815f68..3a17b7c35 100644
--- a/content/guides/04.connect/5.errors.md
+++ b/content/guides/04.connect/5.errors.md
@@ -1,26 +1,272 @@
---
stableId: bcae2f68-6534-45df-8085-5a2c0d6e20c5
-title: Error Codes
-description: Learn about Directus error codes - understand what each code means, from validation failures to rate limits exceeded. Troubleshoot issues with your API requests and resolve errors efficiently.
+title: Errors
+description: Learn how Directus returns errors over REST, GraphQL, and the SDK. Includes core error codes, HTTP status codes, response shape, and patterns for handling errors in your application.
---
-Below are the global error codes used within Directus, and what they mean.
-
-| Error Code | Status | Description |
-| ------------------------ | ------ | ---------------------------------------------------------------- |
-| `FAILED_VALIDATION` | 400 | Validation for this particular item failed. |
-| `FORBIDDEN` | 403 | You are not allowed to do the current action. |
-| `INVALID_TOKEN` | 403 | Provided token is invalid. |
-| `TOKEN_EXPIRED` | 401 | Provided token is valid but has expired. |
-| `INVALID_CREDENTIALS` | 401 | Username / password or access token is wrong. |
-| `INVALID_IP` | 401 | Your IP address isn't allow-listed to be used with this user. |
-| `INVALID_OTP` | 401 | Incorrect OTP was provided. |
-| `INVALID_PAYLOAD` | 400 | Provided payload is invalid. |
-| `INVALID_QUERY` | 400 | The requested query parameters can not be used. |
-| `UNSUPPORTED_MEDIA_TYPE` | 415 | Provided payload format or `Content-Type` header is unsupported. |
-| `REQUESTS_EXCEEDED` | 429 | You have exceeded the rate limit. |
-| `ROUTE_NOT_FOUND` | 404 | Endpoint does not exist. |
-| `SERVICE_UNAVAILABLE` | 503 | Could not use external service. |
-| `UNPROCESSABLE_CONTENT` | 422 | You tried doing something illegal. |
-
-To prevent revealing which items exist, all actions for non-existing items will return a `FORBIDDEN` error.
+Directus uses conventional HTTP response codes to indicate the success or failure of an API request:
+
+- Codes in the `2xx` range indicate success.
+- Codes in the `4xx` range indicate an error caused by the request (a missing parameter, a permission issue, a validation failure, etc.).
+- Codes in the `5xx` range indicate an error on the server.
+
+All errors are returned in a consistent JSON shape so you can handle them programmatically using the `code` value in `extensions`.
+
+## Error Response Shape
+
+Every error response from the REST API follows the same structure:
+
+::code-group
+```json [JSON]
+{
+ "errors": [
+ {
+ "message": "You don't have permission to access this.",
+ "extensions": {
+ "code": "FORBIDDEN"
+ }
+ }
+ ]
+}
+```
+
+```ts [TypeScript]
+interface DirectusErrorResponse {
+ errors: DirectusError[];
+}
+
+interface DirectusError {
+ message: string;
+ extensions: {
+ code: string;
+ [key: string]: unknown;
+ };
+}
+```
+::
+
+A single response can contain multiple errors. Some errors include additional fields in `extensions` with context about what went wrong (the offending `collection`, `field`, or `value`, for example). In development mode, a `stack` trace is included in `extensions` to help with debugging.
+
+GraphQL responses follow the [GraphQL spec](https://spec.graphql.org/October2021/#sec-Errors) and place the `code` under `extensions.code` on each error in the `errors` array.
+
+## HTTP Status Codes
+
+| Status | Name | Description |
+| ------------------- | --------------------- | -------------------------------------------------------------------------------------------- |
+| `200` | OK | The request succeeded. |
+| `204` | No Content | The request succeeded and there is no response body. |
+| `400` | Bad Request | The request was invalid - usually a malformed payload, query, or validation failure. |
+| `401` | Unauthorized | Authentication failed or no valid credentials were provided. |
+| `403` | Forbidden | The authenticated user doesn't have permission to perform this action. |
+| `404` | Not Found | The requested route or resource doesn't exist. |
+| `405` | Method Not Allowed | The HTTP method isn't allowed on this endpoint. The `Allow` header lists supported methods. |
+| `408` | Request Timeout | The operation took too long to complete. |
+| `413` | Content Too Large | The uploaded payload exceeds the size limit. |
+| `415` | Unsupported Media Type | The `Content-Type` of the request body isn't supported. |
+| `416` | Range Not Satisfiable | The requested byte range can't be served for this file. |
+| `422` | Unprocessable Content | The request was well-formed but couldn't be processed. |
+| `429` | Too Many Requests | The rate limit has been exceeded. Back off and retry later. |
+| `500` | Internal Server Error | An unexpected error occurred. Non-admin users see a generic message. |
+| `503` | Service Unavailable | A required dependency or external service is unavailable. |
+
+::callout{icon="i-lucide-shield"}
+To prevent revealing which items exist, all actions for non-existing items return a `FORBIDDEN` error rather than `404`.
+::
+
+## Error Codes
+
+The `code` value in `extensions` lets you handle errors programmatically without parsing the human-readable `message`. Built-in Directus error codes include:
+
+| Error Code | Status | Description |
+| ----------------------------- | ------ | --------------------------------------------------------------------------------- |
+| `CONTAINS_NULL_VALUES` | 400 | A field can't be set to non-nullable because existing rows contain null values. |
+| `CONTENT_TOO_LARGE` | 413 | Uploaded content exceeds the configured size limit. |
+| `EMAIL_LIMIT_EXCEEDED` | 429 | The email sending limit has been hit. |
+| `FAILED_VALIDATION` | 400 | A field value failed validation. |
+| `FORBIDDEN` | 403 | The user doesn't have permission to perform this action. |
+| `GRAPHQL_EXECUTION` | 400 | A GraphQL operation failed during execution setup. |
+| `GRAPHQL_VALIDATION` | 400 | A GraphQL operation failed validation. |
+| `ILLEGAL_ASSET_TRANSFORMATION`| 400 | The requested asset transformation parameters are not allowed. |
+| `INTERNAL_SERVER_ERROR` | 500 | An unexpected error occurred on the server. |
+| `INVALID_CREDENTIALS` | 401 | The provided email, password, or access token is wrong. |
+| `INVALID_FOREIGN_KEY` | 400 | A foreign key value doesn't reference an existing record. |
+| `INVALID_INVITE` | 400 | The invite link is no longer valid. |
+| `INVALID_IP` | 401 | The IP address isn't allow-listed for this user. |
+| `INVALID_METADATA` | 400 | Upload metadata is malformed. |
+| `INVALID_OTP` | 401 | The provided one-time password is incorrect. |
+| `INVALID_PAYLOAD` | 400 | The request body is invalid. |
+| `INVALID_PATH_PARAMETER` | 400 | A path parameter (like an ID) is malformed. |
+| `INVALID_PROVIDER` | 403 | The authentication provider is invalid or not enabled. |
+| `INVALID_PROVIDER_CONFIG` | 503 | The authentication provider is misconfigured. |
+| `INVALID_QUERY` | 400 | The query parameters can't be used as provided. |
+| `INVALID_TOKEN` | 403 | The access token is malformed or invalid. |
+| `LIMIT_EXCEEDED` | 403 | A configured limit (relations, depth, etc.) was exceeded. |
+| `METHOD_NOT_ALLOWED` | 405 | The HTTP method isn't allowed on this endpoint. |
+| `NOT_NULL_VIOLATION` | 400 | A required field was submitted as null. |
+| `OUT_OF_DATE` | 503 | The Directus instance is out of date for this operation. |
+| `OUT_OF_TIME` | 408 | The operation timed out. |
+| `RANGE_NOT_SATISFIABLE` | 416 | The byte range requested for a file can't be served. |
+| `RECORD_NOT_UNIQUE` | 400 | A unique constraint was violated. |
+| `REQUESTS_EXCEEDED` | 429 | The rate limit has been exceeded. |
+| `ROUTE_NOT_FOUND` | 404 | The requested endpoint doesn't exist. |
+| `SERVICE_UNAVAILABLE` | 503 | An external service Directus depends on is unavailable. |
+| `TOKEN_EXPIRED` | 401 | The access token is valid but has expired - refresh it. |
+| `UNEXPECTED_RESPONSE` | 503 | An external service returned an unexpected response. |
+| `UNPROCESSABLE_CONTENT` | 422 | The request was understood but can't be processed. |
+| `UNSUPPORTED_MEDIA_TYPE` | 415 | The `Content-Type` header or payload format isn't supported. |
+| `USER_SUSPENDED` | 401 | The user account is suspended. |
+| `VALUE_OUT_OF_RANGE` | 400 | A numeric value is outside the column's allowed range. |
+| `VALUE_TOO_LONG` | 400 | A value exceeds the column's maximum length. |
+
+::callout{icon="i-lucide-info"}
+Extensions, flows, imports, and upload handlers can return additional error codes. Handle unknown codes with a generic fallback.
+::
+
+## Handling Errors
+
+### REST API
+
+Check the response status, then read `errors[].extensions.code` to branch on specific failure modes:
+
+```js
+const response = await fetch('https://example.directus.app/items/articles', {
+ headers: { Authorization: `Bearer ${token}` },
+});
+
+const body = await response.json();
+
+if (!response.ok) {
+ const error = body.errors?.[0];
+ const code = error?.extensions?.code;
+
+ switch (code) {
+ case 'TOKEN_EXPIRED':
+ // Refresh the token and retry
+ break;
+ case 'FORBIDDEN':
+ // Show a permissions message to the user
+ break;
+ case 'REQUESTS_EXCEEDED':
+ // Back off and retry later
+ break;
+ default:
+ console.error(error?.message);
+ }
+}
+```
+
+### SDK
+
+The SDK throws the parsed error response when a request fails. Wrap calls in `try/catch` and inspect `errors[].extensions.code`:
+
+```ts
+import { createDirectus, rest, readItems } from '@directus/sdk';
+
+const directus = createDirectus('https://example.directus.app').with(rest());
+
+try {
+ const articles = await directus.request(readItems('articles'));
+} catch (err) {
+ const error = err.errors?.[0];
+ const code = error?.extensions?.code;
+
+ if (code === 'TOKEN_EXPIRED') {
+ // Refresh the token and retry
+ } else if (code === 'FORBIDDEN') {
+ // Handle permission denial
+ } else {
+ console.error(error?.message ?? err);
+ }
+}
+```
+
+The SDK error includes the raw `response`, so you can read `err.response.status` when you use the default fetch client. Prefer `code` for programmatic handling because it is stable across transports.
+
+### GraphQL
+
+GraphQL resolver errors can return `200 OK` with an `errors` array in the response body. Request-level failures, such as invalid GraphQL syntax or validation errors, can return a non-2xx HTTP status. Check both the response status and the `errors` array:
+
+```js
+const response = await fetch('https://example.directus.app/graphql', {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ Authorization: `Bearer ${token}`,
+ },
+ body: JSON.stringify({ query: '{ articles { id title } }' }),
+});
+
+const body = await response.json();
+const { data, errors } = body;
+
+if (!response.ok || errors) {
+ for (const error of errors ?? []) {
+ const code = error.extensions?.code;
+
+ if (code === 'FORBIDDEN') {
+ // Handle permission denial
+ }
+ }
+}
+```
+
+## Common Patterns
+
+### Refreshing an Expired Token
+
+`TOKEN_EXPIRED` indicates the request was authenticated but the access token has expired. Use the refresh token to get a new pair and retry the request:
+
+```ts
+import { createDirectus, rest, authentication } from '@directus/sdk';
+
+const directus = createDirectus('https://example.directus.app')
+ .with(authentication())
+ .with(rest());
+
+try {
+ await directus.request(/* ... */);
+} catch (err) {
+ if (err.errors?.[0]?.extensions?.code === 'TOKEN_EXPIRED') {
+ await directus.refresh();
+ await directus.request(/* ... */);
+ }
+}
+```
+
+### Backing Off on Rate Limits
+
+When you receive `REQUESTS_EXCEEDED`, retry with exponential backoff rather than retrying immediately:
+
+```ts
+async function withRetry(fn, attempts = 3) {
+ for (let i = 0; i < attempts; i++) {
+ try {
+ return await fn();
+ } catch (err) {
+ const code = err.errors?.[0]?.extensions?.code;
+ if (code !== 'REQUESTS_EXCEEDED' || i === attempts - 1) throw err;
+ await new Promise((r) => setTimeout(r, 2 ** i * 1000));
+ }
+ }
+}
+```
+
+### Surfacing Validation Errors
+
+`FAILED_VALIDATION` errors include the offending `field`, `path`, and validation `type` in `extensions`. Database constraint errors like `RECORD_NOT_UNIQUE`, `NOT_NULL_VIOLATION`, `INVALID_FOREIGN_KEY`, `VALUE_OUT_OF_RANGE`, and `VALUE_TOO_LONG` can include `collection`, `field`, or `value`. `INVALID_PAYLOAD` includes a `reason`. Use these fields to display actionable errors in your UI:
+
+```ts
+catch (err) {
+ for (const error of err.errors ?? []) {
+ const { code, field, collection } = error.extensions ?? {};
+ if (field) {
+ showFieldError(field, error.message);
+ }
+ }
+}
+```
+
+## Next Steps
+
+- Review [authentication](/guides/auth/tokens-cookies) for token and session handling.
+- Read the [SDK guide](/guides/connect/sdk) for the full client API.
diff --git a/content/guides/05.files/.navigation.yml b/content/guides/05.files/.navigation.yml
index 79a86a3c3..e69de29bb 100644
--- a/content/guides/05.files/.navigation.yml
+++ b/content/guides/05.files/.navigation.yml
@@ -1 +0,0 @@
-icon: directus-files
diff --git a/content/guides/06.automate/.navigation.yml b/content/guides/06.automate/.navigation.yml
deleted file mode 100644
index f7a94f1fe..000000000
--- a/content/guides/06.automate/.navigation.yml
+++ /dev/null
@@ -1,2 +0,0 @@
-title: Flows
-icon: directus-automate
diff --git a/content/guides/06.flows/.navigation.yml b/content/guides/06.flows/.navigation.yml
new file mode 100644
index 000000000..ba66707ea
--- /dev/null
+++ b/content/guides/06.flows/.navigation.yml
@@ -0,0 +1 @@
+title: Flows
diff --git a/content/guides/06.automate/2.data-chain.md b/content/guides/06.flows/2.data-chain.md
similarity index 93%
rename from content/guides/06.automate/2.data-chain.md
rename to content/guides/06.flows/2.data-chain.md
index 491fee304..65ad58be5 100644
--- a/content/guides/06.automate/2.data-chain.md
+++ b/content/guides/06.flows/2.data-chain.md
@@ -42,7 +42,7 @@ Real-life examples of data chains and their data structures will vary, based on
## Data Chain Variables
-While [configuring your operations](/guides/automate/operations), you can use keys from the data chain as variables to
+While [configuring your operations](/guides/flows/operations), you can use keys from the data chain as variables to
access data. The syntax to do so is as follows:
```json
@@ -73,4 +73,4 @@ You can mix your own hardcoded JSON alongside variables. You can also use dot no
```
Certain operations use dropdowns, toggles, checkboxes, and other input options. However, you can bypass this entirely to
-input raw values directly with [Toggle to Raw Editor](/guides/automate/operations).
+input raw values directly with [Toggle to Raw Editor](/guides/flows/operations).
diff --git a/content/guides/06.automate/3.triggers.md b/content/guides/06.flows/3.triggers.md
similarity index 96%
rename from content/guides/06.automate/3.triggers.md
rename to content/guides/06.flows/3.triggers.md
index 8157d5283..6b77addbc 100644
--- a/content/guides/06.automate/3.triggers.md
+++ b/content/guides/06.flows/3.triggers.md
@@ -4,7 +4,7 @@ title: Triggers
description: Triggers define the action or events that start flows.
---
-A trigger defines the event that starts a [flow](/guides/automate/flows). This could be from an internal or external activity, such as
+A trigger defines the event that starts a [flow](/guides/flows). This could be from an internal or external activity, such as
changes to data, logins, errors, incoming webhooks, schedules, operations from other flows, or even the click of a
button within the Data Studio.
@@ -55,7 +55,7 @@ cancel the transaction.
::callout{icon="material-symbols:info-outline"}
**Cancelling Transactions**
To completely cancel a transaction, you'll need to throw an error within a
-[script operation](/guides/automate/operations) or end the Flow on a [failure path](/guides/automate/flows).
+[script operation](/guides/flows/operations) or end the Flow on a [failure path](/guides/flows).
::
### Actions
@@ -167,4 +167,4 @@ Each input field can have its own data type, interface, and display options. Som
to immediately alter the user input (such as trimming whitespace and slugifying text).
Data provided by users when triggering a manual Flow with a confirmation dialog will be accessible in `$trigger.body` in
-the [data chain](/guides/automate/data-chain).
+the [data chain](/guides/flows/data-chain).
diff --git a/content/guides/06.automate/4.operations.md b/content/guides/06.flows/4.operations.md
similarity index 97%
rename from content/guides/06.automate/4.operations.md
rename to content/guides/06.flows/4.operations.md
index a4228d0e8..2cb4c9456 100644
--- a/content/guides/06.automate/4.operations.md
+++ b/content/guides/06.flows/4.operations.md
@@ -32,7 +32,7 @@ fields that may be absent, use the inverse operator (such as `_nnull`) and place
::
::callout{icon="material-symbols:warning-rounded" color="warning"}
-When using an [Event Hook](/guides/automate/triggers) configured to be "Filter (Blocking)", if your flow ends
+When using an [Event Hook](/guides/flows/triggers) configured to be "Filter (Blocking)", if your flow ends
with a condition that executes with a `reject` path, it will cancel your database transaction.
::
@@ -97,7 +97,7 @@ Make sure your `return` value is valid JSON.
::callout{icon="material-symbols:info-outline"}
**Throwing Errors**
If you throw an error in a Run Script operation, it will immediately break your flow chain and stop execution of
-subsequent flows. If you used a ["Blocking" Event hook](/guides/automate/triggers), throwing an error will cancel
+subsequent flows. If you used a ["Blocking" Event hook](/guides/flows/triggers), throwing an error will cancel
the original event transaction to the database.
::
@@ -344,7 +344,7 @@ This operation throws a custom error to halt flow execution with a specific erro
This operation does not generate data. It immediately throws an error that halts flow execution.
::callout{icon="material-symbols:warning-rounded" color="warning"}
-When using an [Event Hook](/guides/automate/triggers) configured to be "Filter (Blocking)", if your flow ends with a
+When using an [Event Hook](/guides/flows/triggers) configured to be "Filter (Blocking)", if your flow ends with a
Throw Error operation, it will cancel your database transaction.
::
@@ -369,7 +369,7 @@ onto its `operationKey`.

This operation starts another flow and (optionally) passes data into it. It should be used in combination with the
-[Another Flow](/guides/automate/triggers) trigger.
+[Another Flow](/guides/flows/triggers) trigger.
### Options
diff --git a/content/guides/06.automate/1.flows.md b/content/guides/06.flows/index.md
similarity index 100%
rename from content/guides/06.automate/1.flows.md
rename to content/guides/06.flows/index.md
diff --git a/content/guides/07.realtime/.navigation.yml b/content/guides/07.realtime/.navigation.yml
index 10cc17f45..e69de29bb 100644
--- a/content/guides/07.realtime/.navigation.yml
+++ b/content/guides/07.realtime/.navigation.yml
@@ -1 +0,0 @@
-icon: directus-realtime
diff --git a/content/guides/08.insights/.navigation.yml b/content/guides/08.insights/.navigation.yml
index edf4e2297..e69de29bb 100644
--- a/content/guides/08.insights/.navigation.yml
+++ b/content/guides/08.insights/.navigation.yml
@@ -1 +0,0 @@
-icon: directus-insights
diff --git a/content/guides/09.extensions/.navigation.yml b/content/guides/09.extensions/.navigation.yml
index ed789fd8b..e69de29bb 100644
--- a/content/guides/09.extensions/.navigation.yml
+++ b/content/guides/09.extensions/.navigation.yml
@@ -1 +0,0 @@
-icon: directus-marketplace
diff --git a/content/guides/09.extensions/2.api-extensions/0.index.md b/content/guides/09.extensions/2.api-extensions/0.index.md
index bb7e7d68a..012bacc3a 100644
--- a/content/guides/09.extensions/2.api-extensions/0.index.md
+++ b/content/guides/09.extensions/2.api-extensions/0.index.md
@@ -10,8 +10,8 @@ API Extensions extend the functionality of the API.
## Extension Types
-::shiny-grid
- :::shiny-card
+::u-page-grid
+ :::u-page-card
---
title: Hooks
to: '/guides/extensions/api-extensions/hooks'
@@ -20,7 +20,7 @@ API Extensions extend the functionality of the API.
---
:::
- :::shiny-card
+ :::u-page-card
---
title: Endpoints
to: '/guides/extensions/api-extensions/endpoints'
@@ -29,7 +29,7 @@ API Extensions extend the functionality of the API.
---
:::
- :::shiny-card
+ :::u-page-card
---
title: Operations
to: '/guides/extensions/api-extensions/operations'
@@ -41,8 +41,8 @@ API Extensions extend the functionality of the API.
## Resources
-::shiny-grid
- :::shiny-card
+::u-page-grid
+ :::u-page-card
---
title: Services
to: '/guides/extensions/api-extensions/services'
@@ -51,7 +51,7 @@ API Extensions extend the functionality of the API.
---
:::
- :::shiny-card
+ :::u-page-card
---
title: Sandbox
to: '/guides/extensions/api-extensions/sandbox'
diff --git a/content/guides/09.extensions/2.api-extensions/3.operations.md b/content/guides/09.extensions/2.api-extensions/3.operations.md
index 4bc8a0e4f..393d5cbf5 100644
--- a/content/guides/09.extensions/2.api-extensions/3.operations.md
+++ b/content/guides/09.extensions/2.api-extensions/3.operations.md
@@ -81,7 +81,7 @@ The `id` in both the app and the api entrypoint must be the same.
### Handler Function
-The handler function is called when the operation is executed. It must return a value to trigger the `resolve` anchor or throw with a value to trigger the `reject` anchor. The returned value will be added to the [data chain](/guides/automate/data-chain).
+The handler function is called when the operation is executed. It must return a value to trigger the `resolve` anchor or throw with a value to trigger the `reject` anchor. The returned value will be added to the [data chain](/guides/flows/data-chain).
The handler function receives `options` and `context`. `options` contains the operation's option values, while `context` has the following properties:
diff --git a/content/guides/09.extensions/3.app-extensions/0.index.md b/content/guides/09.extensions/3.app-extensions/0.index.md
index c9ecf32e3..1fd25cad4 100644
--- a/content/guides/09.extensions/3.app-extensions/0.index.md
+++ b/content/guides/09.extensions/3.app-extensions/0.index.md
@@ -10,8 +10,8 @@ App Extensions extend the functionality of the Data Studio.
## Extension Types
-::shiny-grid
- :::shiny-card
+::u-page-grid
+ :::u-page-card
---
title: Interfaces
to: '/guides/extensions/app-extensions/interfaces'
@@ -19,7 +19,7 @@ App Extensions extend the functionality of the Data Studio.
---
:::
- :::shiny-card
+ :::u-page-card
---
title: Displays
to: '/guides/extensions/app-extensions/displays'
@@ -27,7 +27,7 @@ App Extensions extend the functionality of the Data Studio.
---
:::
- :::shiny-card
+ :::u-page-card
---
title: Layouts
to: '/guides/extensions/app-extensions/layouts'
@@ -35,7 +35,7 @@ App Extensions extend the functionality of the Data Studio.
---
:::
- :::shiny-card
+ :::u-page-card
---
title: Panels
to: '/guides/extensions/app-extensions/panels'
@@ -43,7 +43,7 @@ App Extensions extend the functionality of the Data Studio.
---
:::
- :::shiny-card
+ :::u-page-card
---
title: Modules
to: '/guides/extensions/app-extensions/modules'
@@ -51,7 +51,7 @@ App Extensions extend the functionality of the Data Studio.
---
:::
- :::shiny-card
+ :::u-page-card
---
title: Themes
to: '/guides/extensions/app-extensions/themes'
@@ -63,8 +63,8 @@ App Extensions extend the functionality of the Data Studio.
## Resources
-::shiny-grid
- :::shiny-card
+::u-page-grid
+ :::u-page-card
---
title: UI Library
to: '/guides/extensions/app-extensions/ui-library'
@@ -72,7 +72,7 @@ App Extensions extend the functionality of the Data Studio.
---
:::
- :::shiny-card
+ :::u-page-card
---
title: Composables
to: '/guides/extensions/app-extensions/composables'
diff --git a/content/guides/10.deployments/.navigation.yml b/content/guides/10.deployments/.navigation.yml
index 31de8deab..e1d492502 100644
--- a/content/guides/10.deployments/.navigation.yml
+++ b/content/guides/10.deployments/.navigation.yml
@@ -1,2 +1 @@
title: Deployments
-icon: directus-deployments
diff --git a/content/guides/12.integrations/.navigation.yml b/content/guides/12.integrations/.navigation.yml
index c065d9d22..2f363a9c1 100644
--- a/content/guides/12.integrations/.navigation.yml
+++ b/content/guides/12.integrations/.navigation.yml
@@ -1,4 +1,3 @@
title: Integrations
-icon: directus-integrations
diff --git a/content/index.md b/content/index.md
index 55915c9cc..3916e6144 100644
--- a/content/index.md
+++ b/content/index.md
@@ -1,305 +1,125 @@
---
title: Directus Documentation
-description: Learn how to get started and implement Directus through our developer resources.
+description: The AI-ready backend for your whole team.
navigation: false
---
-## Try a Demo
+## Key features
-::two-up
+Everything you need in one platform.
-#left
-:::tabs
- ::::div{class="pr-6"}
- ---
- label: Local Demo
- ---
- Run Docker locally and use the following command to start the project.
-
- :doc-cli-snippet{command="npx directus-template-cli@latest init"}
+:home-features
- You can then select a project directory name, a backend template, frontend framework, and whether to install dependencies automatically.
- ::::
-
- ::::div{class="pr-6"}
- ---
- label: Hosted Demo
- ---
- Try our [hosted demo project](https://sandbox.directus.io). This is a public demo project that is occasionally reset but please don't input sensitive data.
- ::::
-:::
+## Get started
-#right
-:video-embed{video-id="96b44cbc-1b14-4bea-87cd-0c4cb34d261d"}
+The fastest way to try Directus is to spin up a local instance with our template CLI. It scaffolds a Directus project plus a frontend in under a minute — no signup required.
-::
-
-## Getting Started
-
-::shiny-grid{class="lg:grid-cols-3"}
- :::shiny-card
- ---
- title: Platform Overview
- description: Choose how to run Directus and get started.
- icon: simple-icons:directus
- to: /getting-started/overview
- ---
- :::
+:doc-cli-snippet{command="npx directus-template-cli@latest init"}
- :::shiny-card
- ---
- title: Directus Academy
- description: Learn to use Directus in our video series.
- icon: heroicons-outline:play
- to: https://directus.io/tv/directus-academy
- ---
- :::
+Once you're ready to commit, pick how you want to run Directus:
- :::shiny-card
+::u-page-grid{class="lg:grid-cols-3"}
+ :::u-page-card
---
- title: How to Deploy Directus
- description: Explore Cloud, Docker, and platform-specific deployment guides.
+ title: Directus Cloud
+ description: Spin up a managed instance in seconds. No infrastructure to run.
icon: heroicons-outline:cloud
- to: /tutorials/self-hosting
+ to: https://directus.cloud
---
:::
-::
-:framework-links
-
-## Features
-
-::shiny-grid{class="lg:grid-cols-2"}
- :::shiny-card
+ :::u-page-card
---
- title: APIs and Developer Tools
- description: Build with REST, GraphQL, the SDK, realtime, auth, and Flows.
+ title: Self-Hosted
+ description: Run Directus on your own infrastructure with Docker or your platform of choice.
+ icon: simple-icons:docker
+ to: /self-hosting/overview
---
- :product-link{product="connect"} :product-link{product="realtime"} :product-link{product="auth"} :product-link{product="automate"}
:::
- :::shiny-card
+ :::u-page-card
---
- title: Data Studio
- description: A web app for your whole team to manage content, files, users, and dashboards.
- ---
- :product-link{product="insights"} :product-link{product="files"}
- :::
-::
-
-## Directus APIs
-
-::shiny-grid
- :::shiny-card
- ---
- title: Quickstart
- description: Learn to connect with Directus.
- icon: heroicons-outline:star
- to: '/getting-started/use-the-api'
- ---
- :::
-
- :::shiny-card
- ---
- title: API Reference
- description: Learn how to use the Directus API.
- icon: heroicons-outline:play
- to: '/api'
- ---
- :::
-
- :::shiny-card
- ---
- title: SDK
- description: Official JavaScript and TypeScript library.
- icon: heroicons-outline:code
- to: '/guides/connect/sdk'
+ title: Local Demo
+ description: Try Directus locally in one command.
+ icon: heroicons-outline:command-line
+ to: /getting-started/overview
---
:::
::
-## Tutorials
-
-::shiny-grid
- :::shiny-card
- ---
- title: Integrate Your Frontend
- description: Learn how to build a website using Directus as a Headless CMS using various frameworks.
- icon: material-symbols:web
- to: '/frameworks'
- ---
- :::
+## Pick your framework
- :::shiny-card
- ---
- title: Build Projects with Directus
- description: Learn from a variety of different usecases you can build using Directus.
- icon: heroicons-outline:wrench
- to: '/tutorials/projects'
- ---
- :::
+Connect your preferred frontend to Directus. Each guide covers data fetching, authentication, and live preview.
- :::shiny-card
- ---
- title: Tips and Tricks
- description: Small concepts and techniques to get the most from Directus.
- icon: heroicons-outline:light-bulb
- to: '/tutorials/tips-and-tricks'
- ---
- :::
+:framework-links
- :::shiny-card
- ---
- title: Migrate
- description: Techniques and considerations when migrating from other platforms to Directus.
- icon: carbon:migrate
- to: '/tutorials/migration'
- ---
- :::
+## Who's it for
- :::shiny-card
- ---
- title: Extensions
- description: Learn to build extensions from examples that amplify Directus' functionality.
- icon: heroicons-outline:puzzle
- to: '/tutorials/extensions'
- ---
- :::
+Directus is a flexible backend, but here's how teams typically use it.
- :::shiny-card
+::u-page-grid{class="lg:grid-cols-2"}
+ :::u-page-card
---
- title: Workflows
- description: Learn to set up common patterns to build complex workflows and integrations.
- icon: material-symbols:flowchart-outline
- to: '/tutorials/workflows'
+ title: Developers
+ description: APIs, SDKs, extensions, and self-hosting on your own terms.
+ icon: heroicons-outline:code
---
:::
- :::callout{icon="heroicons-outline:light-bulb" to="/tutorials" class="md:col-span-2 lg:col-span-3"}
- See All Tutorials
- :::
-::
-
-## Releases
-
-::shiny-grid
- :::shiny-card
+ :::u-page-card
---
- title: GitHub Releases
- description: See the complete and latest updates and release notes for Directus.
- icon: simple-icons:github
- to: 'https://github.com/directus/directus/releases'
+ title: Product teams
+ description: Ship features without waiting for a backend rebuild.
+ icon: heroicons-outline:rocket-launch
---
:::
- :::shiny-card
+ :::u-page-card
---
- title: Breaking Changes
- description: Breaking changes may require action on your part before upgrading.
- icon: heroicons-outline:exclamation-circle
- to: '/releases/breaking-changes'
+ title: Agencies
+ description: One backend, every project, every framework.
+ icon: heroicons-outline:briefcase
---
:::
- :::shiny-card
+ :::u-page-card
---
- title: Changelog
- description: A monthly summary of what's new from the Directus team.
- icon: heroicons-outline:document-text
- to: '/releases/changelog'
+ title: Publishers
+ description: Headless CMS for content-driven sites at any scale.
+ icon: heroicons-outline:newspaper
---
:::
::
-## Community-Maintained Tooling
+## How it works
-::shiny-grid
- :::shiny-card
- ---
- title: Python SDK
- description: Interact with Directus using Python.
- icon: simple-icons:python
- to: 'https://pypi.org/project/directus-sdk-py/'
- ---
- :::
-
- :::shiny-card
- ---
- title: Go SDK
- description: Interact with Directus using Go.
- icon: simple-icons:go
- to: 'https://pkg.go.dev/github.com/altipla-consulting/directus-go#section-readme'
- ---
- :::
+Three concepts power everything in Directus. Start here to build your mental model.
- :::shiny-card
+::u-page-grid{class="lg:grid-cols-3"}
+ :::u-page-card
---
- title: Dart SDK
- description: Interact with Directus using Dart.
- icon: simple-icons:dart
- to: 'https://github.com/apstanisic/directus-dart'
+ title: Data model
+ description: Collections and fields map directly to your database schema.
+ icon: heroicons-outline:circle-stack
+ to: /guides/data-model/collections
---
:::
- :::shiny-card
+ :::u-page-card
---
- title: Nuxt Module
- description: Easily connect your Nuxt application to your Directus project.
- icon: simple-icons:nuxtdotjs
- to: 'https://nuxt.com/modules/directus'
+ title: Permissions
+ description: Define who can do what, down to the field level.
+ icon: heroicons-outline:shield-check
+ to: /guides/auth/access-control
---
:::
- :::shiny-card
+ :::u-page-card
---
- title: Helm Chart
- description: Community-maintained Helm Charts repository for Directus.
- icon: simple-icons:helm
- to: 'https://github.com/directus-labs/helm-chart'
- ---
- :::
-
- :::shiny-card
- ---
- title: PHP SDK
- description: Interact with Directus using PHP.
- icon: simple-icons:php
- to: 'https://github.com/alantiller/directus-php-sdk'
- ---
- :::
-
- :::callout{icon="material-symbols:lightbulb-2-outline" class="lg:col-span-3"}
- These are built and maintained by our awesome community. If you are building tooling and want to include it here, please open a [pull request on GitHub](https://github.com/directus/docs).
- :::
-::
-
-## Advanced Concepts
-
-::shiny-grid
- :::shiny-card
- ---
- title: Environment Variables
- description: Configure Directus at an advanced level.
- icon: heroicons-outline:cog
- to: '/configuration/intro'
- ---
- :::
-
- :::shiny-card
- ---
- title: Building Extensions
- description: Learn to build Extensions for Directus.
- icon: heroicons-outline:puzzle
- to: '/guides/extensions/overview'
- ---
- :::
-
- :::shiny-card
- ---
- title: Self-Hosting
- description: Learn self-hosting concepts and deployment paths.
- icon: heroicons-outline:cloud
- to: '/self-hosting/overview'
+ title: Flows
+ description: Trigger logic on events, schedules, or webhooks.
+ icon: heroicons-outline:bolt
+ to: /guides/flows/operations
---
:::
::
diff --git a/content/tutorials/2.projects/build-a-multi-user-chat-with-javascript-and-directus-realtime.md b/content/tutorials/2.projects/build-a-multi-user-chat-with-javascript-and-directus-realtime.md
index d9dafaf91..fda5dbb30 100644
--- a/content/tutorials/2.projects/build-a-multi-user-chat-with-javascript-and-directus-realtime.md
+++ b/content/tutorials/2.projects/build-a-multi-user-chat-with-javascript-and-directus-realtime.md
@@ -4,7 +4,7 @@ id: 1fdbc354-3c98-458e-97f6-587eccab6c16
slug: build-a-multi-user-chat-with-javascript-and-directus-realtime
title: Build a Multi-User Chat with JavaScript and Directus Realtime
technologies:
- - javascript
+ - vanilla
authors:
- name: Kevin Lewis
title: Director, Developer Experience
diff --git a/content/tutorials/7.workflows/build-content-approval-workflows-with-custom-permissions.md b/content/tutorials/7.workflows/build-content-approval-workflows-with-custom-permissions.md
index 84b9117f1..2ff7c5bc9 100644
--- a/content/tutorials/7.workflows/build-content-approval-workflows-with-custom-permissions.md
+++ b/content/tutorials/7.workflows/build-content-approval-workflows-with-custom-permissions.md
@@ -116,6 +116,6 @@ explicit set of permissions each role has at each stage.
::callout{icon="material-symbols:info-outline"}
-Workflows can be further enhanced with custom [Interfaces](/guides/extensions/app-extensions/interfaces) as well as [flows](/guides/automate/flows).
+Workflows can be further enhanced with custom [Interfaces](/guides/extensions/app-extensions/interfaces) as well as [flows](/guides/flows).
::
diff --git a/content/tutorials/7.workflows/generate-images-with-dall-e-and-directus-automate.md b/content/tutorials/7.workflows/generate-images-with-dall-e-and-directus-automate.md
index ab5f5ea98..67f657436 100644
--- a/content/tutorials/7.workflows/generate-images-with-dall-e-and-directus-automate.md
+++ b/content/tutorials/7.workflows/generate-images-with-dall-e-and-directus-automate.md
@@ -24,7 +24,7 @@ In your Directus project, create a new collection called `generations` and add a
In the Settings Module, go to the Flows section and create a new Flow called “Generate Image”. Use a Manual Flow Trigger and select the Generations collection. In the Location dropdown, select Item Page Only. Finally, select Require Confirmation.
-[Confirmation Dialogs](/guides/automate/triggers) are shown in a modal before a flow is triggered, and any data entered is made available to the flow.
+[Confirmation Dialogs](/guides/flows/triggers) are shown in a modal before a flow is triggered, and any data entered is made available to the flow.
In the dialog, configure one field with the key of `prompt` , name of “Prompt”, a Type of String, and an Interface of Input.
diff --git a/content/tutorials/7.workflows/invincible-ai-content-workflows-with-inngest-and-directus.md b/content/tutorials/7.workflows/invincible-ai-content-workflows-with-inngest-and-directus.md
index 78b55f18b..d1d2108f2 100644
--- a/content/tutorials/7.workflows/invincible-ai-content-workflows-with-inngest-and-directus.md
+++ b/content/tutorials/7.workflows/invincible-ai-content-workflows-with-inngest-and-directus.md
@@ -62,7 +62,7 @@ The platform also offers a developer-friendly experience with excellent local de
## The Directus + Inngest Integration: Beyond Flows
-While Directus already includes its own [workflow automation system (Flows)](/guides/automate/flows), Inngest complements it by handling scenarios that Flows wasn't designed for. Directus Flows excels at short-lived automations like sending notifications or processing simple data operations, but AI workflows typically require more resilience and computational power.
+While Directus already includes its own [workflow automation system (Flows)](/guides/flows), Inngest complements it by handling scenarios that Flows wasn't designed for. Directus Flows excels at short-lived automations like sending notifications or processing simple data operations, but AI workflows typically require more resilience and computational power.
Inngest is the perfect companion when you need:
diff --git a/content/tutorials/7.workflows/schedule-future-content-with-directus-automate.md b/content/tutorials/7.workflows/schedule-future-content-with-directus-automate.md
index bae74452b..8934fab2c 100644
--- a/content/tutorials/7.workflows/schedule-future-content-with-directus-automate.md
+++ b/content/tutorials/7.workflows/schedule-future-content-with-directus-automate.md
@@ -12,7 +12,7 @@ description: Learn how to set content to be scheduled on a future date with Dire
This guide explains how to schedule content to be published on a future date for a statically generated site (SSG).
-We'll be using [Flows](/guides/automate/flows) to publish articles when the current date matches the published date.
+We'll be using [Flows](/guides/flows) to publish articles when the current date matches the published date.
First we'll schedule a flow to run at regular intervals.
@@ -63,13 +63,13 @@ field `status` that controls the published state.
### Create and Configure Your Flow
-5. [Create a new flow](/guides/automate/flows)
+5. [Create a new flow](/guides/flows)

Give it a memorable name and short description like `Publish Scheduled Articles`.
-6. [Complete the trigger setup](/guides/automate/triggers)
+6. [Complete the trigger setup](/guides/flows/triggers)

@@ -85,7 +85,7 @@ field `status` that controls the published state.
### Add an Operation to Check The Published Date and Update Data
-7. [Create a new operation](/guides/automate/operations)
+7. [Create a new operation](/guides/flows/operations)

diff --git a/content/tutorials/7.workflows/trigger-netlify-site-builds-with-directus-automate.md b/content/tutorials/7.workflows/trigger-netlify-site-builds-with-directus-automate.md
index 1ff73a978..d973fb1eb 100644
--- a/content/tutorials/7.workflows/trigger-netlify-site-builds-with-directus-automate.md
+++ b/content/tutorials/7.workflows/trigger-netlify-site-builds-with-directus-automate.md
@@ -35,11 +35,11 @@ with them.
### Create and Configure Your Flow
-1. [Create a new flow](/guides/automate/flows)
+1. [Create a new flow](/guides/flows)
Give it a memorable name and short description like `Trigger New Site Build`.
-2. [Complete the trigger setup](/guides/automate/triggers)
+2. [Complete the trigger setup](/guides/flows/triggers)

@@ -62,7 +62,7 @@ with them.
> This step is optional but it is recommended to add a Condition operation to prevent unnecessary builds.
-3. [Create a new Operation](/guides/automate/operations)
+3. [Create a new Operation](/guides/flows/operations)

diff --git a/content/tutorials/7.workflows/trigger-vercel-site-builds-with-directus-automate.md b/content/tutorials/7.workflows/trigger-vercel-site-builds-with-directus-automate.md
index 5fd3619c3..b88205fe5 100644
--- a/content/tutorials/7.workflows/trigger-vercel-site-builds-with-directus-automate.md
+++ b/content/tutorials/7.workflows/trigger-vercel-site-builds-with-directus-automate.md
@@ -33,11 +33,11 @@ with them.
### Create and Configure Your Flow
-1. [Create a new flow](/guides/automate/flows)
+1. [Create a new flow](/guides/flows)
Give it a memorable name and short description like `Trigger New Site Build`.
-2. [Complete the Trigger Setup](/guides/automate/triggers)
+2. [Complete the Trigger Setup](/guides/flows/triggers)

@@ -60,7 +60,7 @@ with them.
> This step is optional but it is recommended to add a Condition operation to prevent unnecessary builds.
-3. [Create a new operation](/guides/automate/operations)
+3. [Create a new operation](/guides/flows/operations)

diff --git a/nuxt.config.ts b/nuxt.config.ts
index 2c6094290..aa8880400 100644
--- a/nuxt.config.ts
+++ b/nuxt.config.ts
@@ -143,6 +143,7 @@ export default defineNuxtConfig({
compressPublicAssets: false,
prerender: {
routes: ['/'],
+ failOnError: false,
crawlLinks: true,
@@ -190,6 +191,7 @@ export default defineNuxtConfig({
},
linkChecker: {
+ enabled: false,
skipInspections: [
// Skip absolute site urls because of our routing setup between the docs and the main site
'absolute-site-urls',
diff --git a/package.json b/package.json
index 034da16d4..1b60185dd 100644
--- a/package.json
+++ b/package.json
@@ -39,7 +39,8 @@
"posthog-node": "5.29.7",
"sharp": "^0.34.5",
"tailwindcss": "^4.2.4",
- "ufo": "1.6.3"
+ "ufo": "1.6.3",
+ "unhead": "^3.1.0"
},
"devDependencies": {
"@iconify-json/ph": "^1.2.2",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index d56123993..83c07c6b7 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -49,7 +49,7 @@ importers:
version: 4.0.0(magicast@0.5.2)
'@nuxtjs/seo':
specifier: 5.1.3
- version: 5.1.3(4647370d33bd5943aead907599700ab7)
+ version: 5.1.3(f958a059aa9f5a6866becf12bff13989)
'@takumi-rs/core':
specifier: ^1.1.0
version: 1.1.0
@@ -86,6 +86,9 @@ importers:
ufo:
specifier: 1.6.3
version: 1.6.3
+ unhead:
+ specifier: ^3.1.0
+ version: 3.1.0(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
devDependencies:
'@iconify-json/ph':
specifier: ^1.2.2
@@ -370,9 +373,6 @@ packages:
'@emnapi/runtime@1.10.0':
resolution: {integrity: sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==}
- '@emnapi/runtime@1.8.1':
- resolution: {integrity: sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==}
-
'@emnapi/runtime@1.9.2':
resolution: {integrity: sha512-3U4+MIWHImeyu1wnmVygh5WlgfYDtyf0k8AbLhMFxOipihf6nrWC4syIm/SwEeec0mNSafiiNnMJwbza/Is6Lw==}
@@ -7005,6 +7005,14 @@ packages:
unhead@2.1.13:
resolution: {integrity: sha512-jO9M1sI6b2h/1KpIu4Jeu+ptumLmUKboRRLxys5pYHFeT+lqTzfNHbYUX9bxVDhC1FBszAGuWcUVlmvIPsah8Q==}
+ unhead@3.1.0:
+ resolution: {integrity: sha512-SH1PAjAMspLIoBjAjE/R8hty2NYo7YcIrdu5I+PVfiW4QmmwEG4pgoiKG0MCs6WRSwiatzeha+4lqSqvHW9PEg==}
+ peerDependencies:
+ vite: '>=6.4.2'
+ peerDependenciesMeta:
+ vite:
+ optional: true
+
unicode-emoji-modifier-base@1.0.0:
resolution: {integrity: sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g==}
engines: {node: '>=4'}
@@ -7915,11 +7923,6 @@ snapshots:
tslib: 2.8.1
optional: true
- '@emnapi/runtime@1.8.1':
- dependencies:
- tslib: 2.8.1
- optional: true
-
'@emnapi/runtime@1.9.2':
dependencies:
tslib: 2.8.1
@@ -8255,7 +8258,7 @@ snapshots:
'@img/sharp-wasm32@0.34.5':
dependencies:
- '@emnapi/runtime': 1.8.1
+ '@emnapi/runtime': 1.10.0
optional: true
'@img/sharp-win32-arm64@0.34.5':
@@ -9226,7 +9229,7 @@ snapshots:
- vite
- vue
- '@nuxtjs/seo@5.1.3(4647370d33bd5943aead907599700ab7)':
+ '@nuxtjs/seo@5.1.3(f958a059aa9f5a6866becf12bff13989)':
dependencies:
'@nuxt/kit': 4.4.2(magicast@0.5.2)
'@nuxtjs/robots': 6.0.8(@nuxt/schema@4.4.2)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@22.19.17)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3))(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))(zod@4.3.6)
@@ -9234,8 +9237,8 @@ snapshots:
nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@22.19.17)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3)
nuxt-link-checker: 5.0.9(ad3672cc71ed4fef9dee73a54522c31c)
nuxt-og-image: 6.4.7(9fe474218c97b47f30882881f0852e2d)
- nuxt-schema-org: 6.0.4(d49a319d2e54ee8f7691b4d98b24824b)
- nuxt-seo-utils: 8.1.11(9275d2bad68344b1070a6ddfde2ef475)
+ nuxt-schema-org: 6.0.4(1a967bc97ce9677f66be35b83ed89595)
+ nuxt-seo-utils: 8.1.11(afd1536e353fe9aacca1e8172ba75d16)
nuxt-site-config: 4.0.8(@nuxt/schema@4.4.2)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.6)(@types/node@22.19.17)(@vue/compiler-sfc@3.5.33)(better-sqlite3@11.10.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@11.10.0))(esbuild@0.27.7)(eslint@9.28.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.3))(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))(zod@4.3.6)
nuxtseo-shared: 5.1.3(25023e8fc1951fd485d95c7642f63f09)
transitivePeerDependencies:
@@ -10711,13 +10714,14 @@ snapshots:
'@ungap/structured-clone@1.3.0': {}
- '@unhead/bundler@3.0.5(esbuild@0.27.7)(lightningcss@1.32.0)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(typescript@6.0.3)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))':
+ '@unhead/bundler@3.0.5(esbuild@0.27.7)(lightningcss@1.32.0)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(typescript@6.0.3)(unhead@3.1.0(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)))(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))':
dependencies:
'@vitejs/devtools-kit': 0.1.15(typescript@6.0.3)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
magic-string: 0.30.21
oxc-parser: 0.127.0
oxc-walker: 0.7.0(oxc-parser@0.127.0)
ufo: 1.6.3
+ unhead: 3.1.0(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
unplugin: 3.0.0
optionalDependencies:
esbuild: 0.27.7
@@ -13857,7 +13861,7 @@ snapshots:
- vue
- zod
- nuxt-schema-org@6.0.4(d49a319d2e54ee8f7691b4d98b24824b):
+ nuxt-schema-org@6.0.4(1a967bc97ce9677f66be35b83ed89595):
dependencies:
'@nuxt/kit': 4.4.2(magicast@0.5.2)
'@unhead/schema-org': 2.1.13(@unhead/vue@2.1.13(vue@3.5.33(typescript@6.0.3)))
@@ -13868,6 +13872,7 @@ snapshots:
pkg-types: 2.3.0
optionalDependencies:
'@unhead/vue': 2.1.13(vue@3.5.33(typescript@6.0.3))
+ unhead: 3.1.0(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
zod: 4.3.6
transitivePeerDependencies:
- '@azure/app-configuration'
@@ -13925,10 +13930,10 @@ snapshots:
- yjs
- yup
- nuxt-seo-utils@8.1.11(9275d2bad68344b1070a6ddfde2ef475):
+ nuxt-seo-utils@8.1.11(afd1536e353fe9aacca1e8172ba75d16):
dependencies:
'@nuxt/kit': 4.4.2(magicast@0.5.2)
- '@unhead/bundler': 3.0.5(esbuild@0.27.7)(lightningcss@1.32.0)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(typescript@6.0.3)(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
+ '@unhead/bundler': 3.0.5(esbuild@0.27.7)(lightningcss@1.32.0)(rolldown@1.0.0-beta.53(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(typescript@6.0.3)(unhead@3.1.0(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)))(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
citty: 0.2.2
defu: 6.1.7
escape-string-regexp: 5.0.0
@@ -15776,6 +15781,13 @@ snapshots:
dependencies:
hookable: 6.1.1
+ unhead@3.1.0(vite@7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)):
+ dependencies:
+ hookable: 6.1.1
+ unplugin: 3.0.0
+ optionalDependencies:
+ vite: 7.3.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)
+
unicode-emoji-modifier-base@1.0.0: {}
unicorn-magic@0.1.0:
diff --git a/public/img/mountains.avif b/public/img/mountains.avif
new file mode 100644
index 0000000000000000000000000000000000000000..7936b54e6725562fae8fb3d82e6a0011948519e8
GIT binary patch
literal 386563
zcmZs>19WBG5;b~a+qP}ncE`4D+jhsc?WALy9d(S3+2PCg^}X-^-*|VAvCpiUYp*)1
zX4S?xX9EBLTr(F>2SYbYGr-sO587H9e(h#V002mbt*MLQKm6B5WMN|C^w$Ic94w7p
z{%ijiNlh&6{t1F>;$-@7urC|vYln4pvLXDB4ewy-V*6zS0B~P}td@Ug008h`4BD4t
z3jEKUuUUp}j9&}*zsawW|33-xzev#kMS}e=68wLW5dVvW{9h#0|01FP7YXyfNZ9{B
z`L8bKPL?MB-`v0C5%c(4A%4sMqwbgDw&q_-!hR_R3;+Ru0>A*^00;mi015yNfcfIT
zlr=VSHvZBV=pV%aCzcLQ4qxbE>0oUCg($}MHcocNHXdK|fdSwFUlgpdjg2K>5+L|x
zqgpyUn112c_9g$n`~S^Be5nGe^)&!x>16+JKOj0-dRYE*I0z)<*B}7a(2YqX5a^$U
z0BkHBZ2#L#Z~!3C;6UJT0PtS``3s
+
zebB*K0Kj+nt2%#uFrgFxfVT3hR{!zs_yGVm!LQ2w$1m~&02qM&t>ZuI1zYg{Dp|-^
zCI89bZx(>B=>MEO|N0<@UpVoPZToNjUl!ON{nsb>-}aG{1AJxpH3I?&`QI%6J=cJ+
z|IO&1ct$`t|F3NYMERd%zG@F7{I3dM#{dI>ME;K*Zuwsu@ZXDr5A^q&K0g6~{J(mCML;~u|EH(_jfNigg#cs#^gp@6
zN_>8NzCj`)vJx^ME&(9|g#-XY5=PvA>h0}C{6H=hr#F}DVAtlbnvc;p?ZLpFf{V-$@C$9=I|%gbEYW(WmmU$aDWTMSVha%
zTpuAlknudT3gP5{Snc>{uL!@N>8E1YZ@7A)*ry{p?Rg
ztXRR~hmUWUx?-pi8WD_SlG*^jyA^RKD4*<-tS<7)B|lmba@JmbGE?VZ0m#9*=sm9~
zekTVArg90i=DNr>b(NX%#&dl23>)bKF+BV`SpU_Lg!T>Pl-}MoaY#w^pLoK#QXL`8
zP!;ER`R*RUm6RIJDLmB*G{qv?mQrlk(|Gjb-4^1OzG)%B9JX30b{&_{hT?26Z7$;8h15E=ISnEgLNJQFM@LZU;!|b
z
z@az?90NGLuw|Gud=L8GKJo!^2B~jp)?B|geFC*W0AJ(Q8e1zMT?#=w+Iq>gjmsTaR@KAGybRh-O4rSxX+c@oQ_3o_|!z2k`Ghq}mI?xT;wu
zoaMS*WRsmtn`55jB=CbLkRtP(-cECgoml=PYK77cYL?`j;LQ_c&gWZT*yrs-*JOsz{0HXz~WBR$ksRx5fJT@vg-52>ov@B8yBXmdaUyAt4
zIkk&ZDS_wQvaU#BToIQ$e$Ib@+03Tv1AV#}+?l%)RnVM|=na4fEWz}oviZ;H0u9kf
z4*rOK>@}J*DGmVA-D34uwu%aJHQl5-Xq&`^4cHe7WTQ>o?Dmg|o2XFVs%J-#8Dmd2
z-IPZ9o$*2^t+k!YgoMD_CoDr18Azcy?_Negux@}uqt40kh*17m9M5?x2)F$~TGS@`
zvoD~$Mp$`{0{+CzgI;+UUT;ufmfqjPD!w$kq_l=N5!sXbOE-K726pxNfdkG;
zKRC+yd`bg;MZ3bF~0qHF2K)3Y$>{;|Ni0PCD2
zvkHDZ>G^{KGVo00cNA4dKx{Sk!-$T)b-vysiHt3?GDo74DNyF~;XMh6(TtiA3`A(f
zmG
zCxfUFb0NQ45%LIKj4ANcTm15&ol+Mtv+J*R0Jjyzp*OeTR?FFk+k67nzGW%FY_1n^
z<)CaJ&0rPN19RXh*(e}mZr}VeA9l@zlnI|S8JU&X!FuyZTop=7*L6>gvgr-i(J^8#
zahr1FamXeriRr^9trTB*_SVgeAwNC9CytX`Whjx-sq(@04jvQJ`9F$Zi>ty>eB8L^
zOl5)+t}Yjckk$xEaSvd4yQMo-JmWPJ@lFlD0RkXDF{~OZwjx+cYfJ45-p0bLq5Kj?
z+4J{NwNA<-TSGiGu__{rSBVsAHvf=5q+9n3y=1vLhxT+aTCpkwpM|29sK-7&xSnr_
zVJ_v7{(hc4)Rz~Qa4`x{Hz*S>Uy%TzN){9PHZ`c>e&!MG-OwE~hR@6dkLClimE+~B
z)ALI(%i=dbCqzgXD*zOoAZ!gTdH@;Jjqe<^qE3IKK9zgo^j1HQq(k+O!)yR^D!O0j
zD&fVcD~iHw5xsfAA4Ce*6%abWQwzV_wsW1+oi&y0}klH{>5WSP@cDU5il
z$=nd9%eEsWw|QgqvsoLEzL8MbPNH;G`0@}*=W1$`QT49aIGeRBI=Z)-8;?G6nx0Xyy|gybyB!;aYJCy@?W{@ksw|#}6&GhA?CK|TibF{$mItYxY0w$XZ$HB{1_?vB1!D#B_4`es9+(v>
z&YmdKtL)mV>n`V&iO|eEt2x?Dtok%@O@CLWz}^1N>{clU59UKDvct#rHyJRX!k@4_
zKI+>ml_VFDA|J4?%5XBb@xq?&=+z_4pTu3}jWac!>-o9Ll1O5uoB->gjAPKg@heI5
z>mh;=MEYY>at{5|E~;|afkmxp^DX1q-u-zLK$s(FW<7B8`VQ
zU(BjWxb}%?E0pLV1y~>s%zDSh2HG+F3blfw8cIgBkCo|ZUUZU?u~GnauH#d?v5g?NJ=%j<+d(RP!4r4v
z`ET=#=%NzrcWDLox)Cj9U0h`vcxA(hYsSG8RU+F(Wmix?l0%k;E#p51aQH32;7z-p
zu~O!_o;yFbs7u^tPc#PFMc$WCl`NQ<>Wb4;A)4WP(p*q$*~0^V0Rn&mm<}s
z6I(dunrYQ36+7<~5mLsLt$<7#4PPd~^_&wD=hED|8>uS)F*%K_$x>l-qYF5nBjhXB
zk9hI8*&NC~<8%sD1MH%_Cz1~BgS^w9H{U#{Rxg75pzGwsL2)0I+}VVl+!-lk{hZl)
zB=1(s^cIzm^Jxqwr%c&J0mmDTXgc;E{KG^X3hFpmo?%T*VIlYYxEE7&MZ%#cQdk*q
zyx(z%?BpFT;BPb+0?*YG%v_8uM1(cZw;S9h$e937+eoC%V^vq)snlx9MlU*};(2+|
z8>_UT*F=un!2H-&g~613cpQq^+Ia87QAh8&YIJQ7_HMC#+*|#9XA!q-K=KUT#J-Mi4$JQJ>D44
z&!eX*2Of`18xjLrtyXZ|x?(tq!I>bw8jDE{f+rqNu;M@n9n#D6^Eg2}K
z=3*h`u+8Yxt2^3E8Y0ZfxhQBb(w_akanrSV;ahf@U~N&>##)xyl~9*4WMA;$Sipts+FiRDD?*lB;jUW{@
zj|ggU7-Q?`f`g(%IhK-Bvp#El(@CG9Rg=Q{?#&Q1pH1--#Wn@n7IDukGl@>ey6Lf>
z5Ts%B2=`zI4$NXvDSnHavbp{Vzun&4VliG6J*SmgGpB^2*v=|gX%)8v!O}$+^upkj
zvLfqx%9|Dv8K0p%HOWsRwqT6W0KXN-17>Gqc!mfcoF}enU8HIz!8(_
zdWF;)4Jw`CrSXH2Oq(nUw5lWR8<}4y;mD4>hb^7iMJ_gc{DW~Q5V8nfB7rWDeqC4S
z25B?uKsxPBh@9tZzv+YErshS|O0MT9C6BOOL#*OV)uGq5oi6W!nl`f!49QP!u?y=1
zCpJbUEA6g#R=!V9>gezIBpy0(#~IKGJ^w4@S(yp%?13+z6{mbP3x*R#xkNZCK}8$+
z^by{Zk=A+|9au|V$j|RZNK9x$%G`?`_eL<42_g1(KXa1wfH!sVhFdHg4)twXRVyW>R`C6X0Lek2_2;Pc~Tx3um7
zqDt>*bUZ`h9pa?b-SWd*pi2F-lu^IPfL_lkquR223z{$`k7aXDgsl#s%n(dn(%w!P
z9Si7KMz>EpYltcjjMNH`fMJs|b$F(y;Qh0y5m7_dh{{AiA)%~7AkJec;4714S2NE{
zj5u#?6?Gc`3gyFOT7`^&Hg<1J*{;Y1z3@RhS5*U)7
zjaP=D-WKi|$ZM*xYNQYM?$Lsw=unF(xsfUiLPmI*i?sAGSZ#`Z12Tt@a?Sn~q;
zSWVdhxhjnROgX*0`w?VpjXSd%tD0vtaBM=ke$WX&;8X
z$Hs-I0vXvb*QL;|n>W1;ojjk(kP(|nJ!w!EtT5Kl#r-Ty{kp<;ViSuDnR`9?+Ys`k
zJw8TgTvqXGUWJsR^DuorjHUT&M;C%PnSRmj=EI2|$Z7;LM@el9qa&N&$`-@rcuMyS
zX8!y!1ZOFn6u4SO>V30=1U%>GMA>7$kBv&jZz`vKHBA{4CPD9n*8N&Mxy^OCIB%Y5qnlpZLtTN)poYP5t{wufDHa
zOwKMDBehw@E68VKf%1*#b-7Jw@`e*O&-n>_zbt&l37SJEfFDPkJsHe`!84$S
zi(9D1-pslL;`8wIq$Zmyb57HtaaV^v(1RV7iHIH-wKK-O7oJ_w1EbMzjOc;cfjvu<
zGeCWh8BVZT&T}3bH+>VucB&R5JA`8ALQ9eK3ccABxR}H)_Cn@Nt+&%SnxMQTwSbo<
z(MIh=WtCb}oJk6Hf(7`tE=M+Q+mTXfm8AQ9{N#9ke`B6)%I1A_s@&_kUY5j5ma3K&
zudrH9Y@0WiwZAGC3@VJ|Ko_id3EeVho`QKvhQL6qH~B4h3zA$VfB^$k*D$ALlINjL*KWU
zOW24YdC>J2D0)$zRqN845seENp11HiF65aaGrCzY%K_EmM=7~w^H!$2g+gptwZ`Lb
z2M(KX!XFW4-26sYkuKy6%JkP{qNfl8Hd$9KbBA^6$mu3K{WUtH6?sOKi?`iTJMv8+
zmn16JEyO55uJquOiz=Ke7QQotrlpM!aV!qMf;F2szV1J#-W`m=zPWE(8r$?0J3Fnk
zE=A_i_0NuWEq|hZ!0~?9>5<4mf#2`ZthY{CMRqb`Qz_vbMKe9?wH04~8-XxkFDOdU
z<0ivSE5&Q6)h36PpHA7}Iyy~7D)WG{e0(Af?WdkbnD{yM;eG`)eq-~2&*U#NR9hc5myaXp+~aF<=rT!yskGqmr$1J)l2
z!!}oT6f&&&q|^?@m-`0w=MHj|Tj9Aym%2w4*f3xhR!iPaew&|8^S(aqY`N-axmz5Hn)UuK}7@MH8N4w4bSG|F7%In!)8$WJtRGw
zNfD)4ZwPmKdX!tp^;ke|0rZZd1oTUChfk@z?x_zJtqSsQyaa@OVW`~g0B!@DS9W0b
z?Po7sSV9XS+Io=nJ$hf8
zMXQwvND-zK)FL>=mgR%@M3o7G+*$H0lW^|JA3awfVXy_3!%-PxO28P*Ilm#ZN8(|4
ze>*@;bi1T9{OkcHfo9+6)EdkgoM=Kr|pQcH@n$jEs`*+SK9N1t#>UVJ1YHkx9o
zRw;H90L?pe?w_rdd{z5-=*j1P{_TDw!!=!Qg;1(C0@xGpS%Hde%rOO&Lk~#9OM8J5
zL(g~FHiQ|(dqZ$iSx^DB35!@39Jc3kT}C&NAfDtDZc)mbCx*c58eDc+Fds`Awnu3t
zKUt%UbjZd^_&7Lz)ceeHzjoFP##VBPo`OE+WX?@E)>`j)06}~ccPa)UvEsZ!S)$oz
zEd-W=Nv!CYiu+npX{u$iEn+RcALEoFB*Rz9ePIeF40D3Jv@5p^42vs~rh+as>0M8y
z0q2s!!MKQ?SWRb*9dDE>;%P+hkx0Hw8+CY`)B4jOCWVmZ^Q~$k=`3fjwO$wd#LL^N
z(k_XBpvIpf%!0DNz%_7{9p4OJr!~@UREQRria&mpMn+NU1-hY&l!J_KGcb&bK*xqU
z*dA;LS76mipC2M+kbQA=1PWn~!6n$*2OY@W!Z?>ikU5242BE&lw)^d4;BTVAbh@Co*ur=l*j1^Fq
zWZ8CY*yK0t>IiN~tdia~q?Afgwz}Iybxuri<;iUM*A1c7Z)KcW8`cwbK&`#s9A-x|
zI+Y*H<~HFDn*!R~;!Hhjoz&&)&^!9@<}^J})f@%XKa`-KrWk&z3tJU_Hu265kVh}T
z_oaZLn#B8yxSfhSwt_eN(5ilw-B8RwE|;t!>cF
zwp5HAP7;oV%;#F>-ge0|LQ&Y@Dz_*l`zC=54hwMt=l;HPOff>hmuwW}7x0U2Hr+O6
zwSs3<MM`q>Cwbb
zis0jp!izdrhmYumb=kecNTEPBCt=Mhf?R>0ipILywl8hF!&wxGen)SwEm_d|sN(q+
zZh2u;aC+;s5>Ev2%{e1^Mp29^_jHhDQ?)m~p)m^W*bNKM@z*XQY17aF6h^6%E*5-S%4yvA@8l3L<UVb=w(N
zIeHRtEsFF$yED@!zEFZlzmNywz8tu2^-CQ=ogRbgUEJj^c}`v1Fzc8ywm<$rxb}<+
z17KHNJ=MbMDcxhTK3E(QVpFTj(!^L#?ai%dAL
z3t^W99fXHlzoBk$FFkbO_}9;j(u!7Sjas~mi8R>N`y&nutE#P=K>kn
z_sNQ!E{N&Y(kYY@jSIFhD)Pp7?T5E7s{+9&Qyls(oq42Wn}&~iBm(pD$9T2{7C?QK
z3(cG}HuS6BUz7=s&QkUs{JRSa$SafNskR2|^5U;t>Vx~3@*Ec8O{eS|dNI9$ou#R;_4y{l3UgmrxIwXU%;9K6sZxte~rV;$4tPW~>FCpG#zPnI=tb~Dhnxe6X9
zoE?>?em3l%|8GEH5AVC@sXx1&NU~@g?d|57xh=VgNigjpb
zy7odtRb%Y}(JdSTWjgrMTG)9k$*x^OzOFt_gmF!ExqP=bE4+8M=gI83_%%cx>02%k
zK*Ud{%QL!t>J=}ewEYQFap-(OH_ES6ZkRCkSEfqZm-0M;>O@$~e5O7FKnPEE2iVPS
z8rt80n`qAj;-(7--e7#L-dS0`{Seob4Ow%Z)Qnt9Fq?dgW)GE!(gEnI*N8WELmloMI4x$Eb|U{80_Rj
zYeU5X+Es++HPZNrjgC?GV&Jg&=8lpVdDxNO90vz`fP3W3J$>wcB95d8P;O~ut6zFo
zf8bDbz1YzDx;@Y&eN!JKdYuu(w0L4*vOUQ1UCu=)tZehJ&9K>F1`fYsG8H$A#sgyF
z5DZEbW>EUm5>U^NSRV#}n)cvz=+$KkYteLNkb#uGX(1AFm`!=N_~L3-A~u*1*yF
zQ?oT9OXeG4z)Jgl$abAr`W0<{gV{GDt$;^37ez8{LrQhjjXy7W
z0_}I6((HaJ_DoEvH_xLJh52U9c_^I%AW$YX#nhd+S>7_LG^uQ_ugVJ2mp%MC{O84^
zT*MVvBdy4c)NEhL?!{}x5oCtxBO6!I^7a@4W!QGcF6fS(D
zQaK93dQMZ%+jE>E&*p|tFC|{)pV@WII@0F{Rz9R
zI>EY8w~Bt80!o;(S-fA1(u#8K#$iKaxz}ZF`V)h+H@qh--DIRVcZSi%dLr=6;^t2Q
zj(>_6|S?nvHvuOb^ADT>|3`tjDdnb$T;6F~RYu2CWC02O(u8
z6t652a@#6=)CMu_5<4+J@zKeqkv^V6-Ef4c)%?pd5^Zy~orECpaZe^Xuosy5|Hv@X
zDj%4zR(=YB5>EEelZU_mWMeb?K19cT)g>(d3~4c&HM{u;mVC?^;|hy`S6dhHwgDUL
zdmt|=7Q2|WLkU@^UV3TGyR=g>_w$*qFer&gpsa^Y;6R$uO~6DSGm(s-|W
zmuXN_mcvtEg=hsJvDZap--RZdq0sUYK#SO=4aBn#_3>MWOVaFNU;Owrr`T2HKjKLw
zJr%$QQ1qhBtK3%FL&ca;PXhLft~q6k41XmcFHSh#CZylN+TsVMBpgfJNX4qLH0r=7
z(v1lW_u*I3*qg~1E&axYs=&}G<@vb*4`Gz%A7E4g5=>WNGPK^xa;27_ajoR%K7o^V
zg#13Dc~eyG&tXiC;y5)n8ri0rgM!I*Yj4dr?)9B0#SEi?w4dv;p_G8nuFM&cw^8$0
zfFM^tST-}ZmC>%RlqMTNuzj3aoOdG>RCIyL+%u$|^3{i+?5Dwa(0<#*$s{K&MSg|K
zpV2Fd@8~I11W{weSUj#MX}$S(I~v^m;^!6nAol#vE)?9JL@O`^GAS9iZ*S>?7fM$q!x3})Hk7>+z+XRRy0_s59%!4Cm-iGES~HCc
zYkH<3e;fQjBi*y+l*w~(-_3ts{o|&zO|!d`&nk*bpJ$C}8I7^y(ZY2~u8>iv~qpfE1a?h$6E$mE^Gy-DEm<5kg2m?HoQ!S;z5u01HxYNqPGzq3zmv~i=+m>h(`QS0bQ9L{
zr5Hg%R~w>&VP(ytfN-RP-OJGGUtB?pZ3}<{c^MN=5dLFVVfV9-U!-PcNWqk9!=Su$
z;C^!L%3%u^e__VTS+chnU37PGXV5ao3ObozK`c86tVoYhpR&V+WJGcL^irZ@jbiY#
zFEQEn{Vc#>dTuB@!nlibWlZ&+`FgS=HUjff8@Z+zaX6^Ev9-p$HjHyxKCJu~#GVva
zau~H6tE%>-@W;JkD6ho3%$n
zlOtMqWjkHFp!B}2^re!`lgfic09vJxn6~_R37EGLc_gdfAtH?LCJwGn~sLJkO6~Sd12PYLf*GBg+l-nvhZ32B@*1;k??FX%1-w{-Jp8qjia?!
zg4QJF7xGdMkua7zi6U{NZ#{01J4fQGy%#-|(V@&z93nz#&wO^q^$XMV5;N%IGNP0D
zWdzsM&)&2)GPZOviPS}KQO4k$x`a#T>9
zS$bA?^LSNUd{_eiC~0g_Gk>!uFSsQ|oCr@)mZsh?xH6r9n;j@6y_C?nO1ft_L3cWk
zAY^UW>WFx~xJr;d66}CvL3z~3rmT-}wtH-8oM)UHuF=kgE}q7c3pq)KR1uN3qw_w?
zaAnTe^TFfj<7c=w!h3TYS7+*$+QV(f6wU0WEkxQer=UKMz94p;l|Qus#VpbeY|4~o
zl9N#c@_jF^;jh(%n-NZ@K7b;yA3ZWaZytr(DWm2Xl
zTQgAt^1bg<%OKfVDZ;t*{v&f|2fM9f#>~Xr@7I)<1nJ1M$Jm(``O1D#$%JqTbMVW#
zIkE4t=pw-vxzcv-d+n6F!~AX9lh}$Rjja2WGF51rj(|PUs|JCZ0%O7M{4HQW8C_#7tH*&vVi@pg|QXPq2#oR!1Ba4jW~R>%%vGd)bR+c!QVs&P
zy<|gO=ga9iu&R6Nl$(jE>TR`lIR`9b&7TlYy7s(cB}JbEISCN)q8dBUwzUZ~ohWQ>
zPbnlR!^7+-eF^Kf_p}|ec&z>|4jWBvn
z)F>c*$J&mrSHj}FsRgHu!E6>>Ns+p=1rGj~V9m|>bbnguRr>%p0{Kx%yM-&%bt-Zv
zU3HG5yFscaM;GTDQwxJI3!2FhN75+Qlr&xu#>tftQQm9jR%Mg1Y<77Zx=?(Gvq*;p
z%@~D5gXz_eK9dF-y{{iPvTj@*O=^c@PEBmP@6M|>BIWZPmCdekSu=$F6_a|{;24JV
z^~Q4=(EMbJz7f&VBiC@CVrljU&-o+!BL-g2-CO$Z^6&CgRxM}>hoM&$S>(4RTu>j<
zyj$|o4rVEl%eZT6Q(Ye6Sev&)9&27$#kg7N2#$_Nc&$M#nP7Hf89lxMC{IKkJstcZ
z%nT3U)tQ(aEYkc`x6$H$-b0QZKiv$K`wld8>R~YR*r~Por_*EI4
zhy<8W-_^l%&g0hnDRbuCFdb(95<8QLNrAy-WU*Wre|K$2`DIPcOX%ZiJne|rb7Mvz
zez>Cn<;{IV%TWDOVhDK(`9N%=V_f0hzvOgTgo;nWEc
z9KSgaO00jfzd6EpSqk3JOt=;Ent$g(=XemF6B}?WC)k>;G>_T#;Z;UE_N>s(oH6cp
z)Lb@p%EW&UA<&F2+l?GQ^Q6C8Bn8e|jOmgW-i2NTel#|tD?5rH%=Dn3%buP?0!k?+
zf>C2kV($z3y>Q1a>-jun2d8U!$0`tGE#+cE8IK_~!CY5_D<-cUmqW~acfB6x-~^E&
zNTptT;TyIQ;;)DbO`6ZKhI~cwMu?@&i5QIwguy@!GR7D5e(xG4w*CQ`4uYV;0QsYm
z{*wj~wn#e#g6Ku8JUK$?V1up{rB>gCt#B`{rfm`^aY#y4QGYFCy!u_FhZ+GQd;kY~
z7Sr))UauWXjYbphw}J)yGtxY++BYK3fj7dm4xZzJGTB9dOwlw0nlqxLS59|_khz|J
zs^q5yj>@vPhPWeDh-(+lHFAAfr!PVMwBLP?5__>!IMwFQpTqiBf}ZZqDH@s)%C_?i
zr)rxJ3cF?q-BM$Ze7BjOwFe9zPLpvK5ygVROkPA{vY;NvdF@o{$5R4y5)a_y3Xt;H
zV8f(P1{53ygUZO8P79L2x_&8gPObn)tep1Y>++@gxVX2Wi8Iwq?QlxpkU@3(Szu)>-Zkb10
zr3OEV-nO<*LR2fr1V{t*hI^QgljJlzho+0hDN-5N%-p9mj<7KrSL%%L<E?PnOOJ&P+B^(0U>kV9kXiOIf-=-)&iGk(9Yv=&2g!pa(y}d051uy?GWB
zyu0E1wuFgsiQL0dWS#XuWc!t($!$_>2Nn1ttIjECIhp3cs~{x_LRJ)n%)=4EV#REl
zV<-g>aPw5KXvQPVSYpfB@#qcu&Otd<7t)>!Z+rQAB-X$W85G}(#3ZdxDIzv!B~BSm
z$<JAOjK9|5Ux(A
ze(Nr8U{e<=BhomhNLf?hu0XMElJ@eOyu?5OYrX#_IXAtN44LO22LnN%+6F#G`M4qy
zO}OdfZKtHr^HX-CFmUgCNACt~HdL(Ew@L*1`C7+CSF4aSTGpXpk2a*Tx@y_$aH-f@
z?J2Jlc!(<^qwzH_SxW3sE6gF;XClD)!o=b3Z)t_24F1*<$W)b*A`)*H)?REXH@AMY
zafN=$T`sHLZy!0?XzYXBGMso8^Q8XInR&Tsj-M@XsSfWGnjM
zEAw5Me98WwLkp1pGwg`e_Fi!HF8;9^6G9JZFwc!mB!?vtQUtLe<7KF>pZ0U){9EVy
zVgj0`R)?p>sADBJNm8gzBicuKOXP_abai2m8MCa{h-otSEa?23iG#}Zj!N+?NZVka
z4hcMrAcAi#d77*RDmV?^$_K_jhD4WtD({n(ENM>547IMPcFI}=^AyF$58|1W+%$kZ
z^PXIvqgogE$2+Nq*SY5jPlG#efFSKwZkKQ=Tdy07CZE6^DWN1DTLle4{vZ@&IL$sG
zC^BgQFl!NQTe5#pKZN_$5k~nE(wHcpGfFwqrOX2F(~gz)2P*mI%-Qx&RLX8^C?O8{
z2EXl))<15lUlCAl*uJixV~v&a&1NQoi*37-^$VxTr3WiUfBYG6*aO)D!yO`}Y99M_
z)#41tfYzMuf9^~MYH}5|GG#7l#$@0jVZc$wT%8}&ce_7?L@yK2TYDv0t9&`nKQ2V<
zkSE=s2#*qXIwYTem+*3wFiAebBf(6Q-Py}j^|p-L{jJ|MRx>eFUgq*eG6X~*Nwi!F
zPLBZ*c(WQVQP-5lBHOk4nL<*ffxP5>gIllEE>xuMSWx$c?KL1*?LO0Z;(7;X(^idf
zc3=!Mb5e$2`0W=xY9pQi^&sNz%iFi03;o6!Ww6-M6yc<4{N$C;$i!v{IMORV78fH)
z3ObX*mfN~|zZ%S_Rs=9XLsolMYP2I?ZTgUrV$(=euCM<*eh?ItHB2{jvTPI|xgUa{
zmWo8ksM}6Le!?I|S^wm<%6Nx)NBc
z{vIGdsmAtNnWws>k&e90_1loZDw6?Tgk_Uq2z-B>684$jvC2aWy`I!wq3|5j?q}OuFijkEAMt{aS|cF8
zNU2N~7I@q0TY5-erc9shX40n@tKB%%iuIkrQ{%*jUBV&8tGtTm$lV6Ex2OwL5NQU3NN$NdC+;^iq@(_^F#So>!rFm?Mbd!TlsDvXRY+-1Bp6
z%bN0yhlTW&tSG^=tAaBPOL+fh|E2k}tjA*$sU93ZbR$ylb=)us%8GCk2ZeX?f%uDv^d^0Y8P?NX?gyDU8U0|NEYVemNbaUk!|=%^M^!fQn(T>|uMD
zAg^=r7JshjT-8oS9Q5~0Z2iu(i{pjXzEccLjV)$cu4;MZ{qInhAGN))>sv6U0&ofz
z^>K1~Guw>zJ9LI$CxV%dEhbnO_-(HjqNLa~-G=(BOO~-K;Z@CVp80cd{aIK9hP`WW
zZ;&L*qy@xEeEF8Fz|{hjXXRa@q-B->E{2c>TbHKyB7qx2##`{^0?K6f*VE&mejWt5
zyM(YiAKI=ffWSW0@ZwrxW>y=XyF49Ga~_XHgm0nCwGV(p``=h
zr+s_LTztff!S2m6PVeVAuH_7(GblqtcA72`YYzN$yaTQDTxr~D)TIy%F!uS8FvUlL
zvm~t(`e0d0DU$v7jeAy6F7QzOBKL{`CH@{?jCM^Ojp^QrZvz$xi@8Gqi;hWEC%`k4
zf=6LdmLwn{(uFv4jqD8^mtFa^k_$>Giu9!h0B+j%WQZ(a>(Kkm7?HZ{@@lej^mTb0
z8+zX3t5yEkwxta0J65YgiS!ixA#fTT>x2EeCk-B^NV%||t_6P@n1OLL#++n=_l7%b;BJG^YM1TUr<>M>8J2@41syPt`kTibRM=b1ulCd|khF&Hgk?k~oPqr&hKi7D8MYn*jk=C8wbF~}XloU~
z))QIfd2l=rQ_9;F;$h8`>ZutheKj8b{gsGvgA?Re%^Py&P92A|LG?LH>Jd`6rzQaCae}6vNK2#C~`~H+nY@Dcr=89Y5xp&|002DhDK|Q>QD*bRI`nn+d?ZQOU|HKbY;(4j^ZQ22C_tvYj5aeCK-)My0wBl5pqP-I
zYv0~6XMK+F#H=Lo1%v|U_U+E589T{hiVGf!b+P$^~SOBNa%)YW+2e!xK?<;j_g
zJ7t{FE+sH-aN)glyn*>2d8XBf9U(I2Tm8TX2#_z)N2m1JrSuz2)r%ghzRrTaWwO68hSz|N8js*
zd)UmaRSG(1kB1p@L(l_Y6jSQy*s+O-1gVvyd}Zc4W;J83=AO~|_2zz6$x%Kb#pVlS
zuagu60Q@FYQTL4X)Lz2q4@iQtPC2sIYuB@{ZviVYo{vQBIK(@cI!~6izPR;k;f99)TP%0K70~L$`Er==*
z6812TCkr+Pqha+cCz_u-H}A-oShR*B#RD3B0B56=G`d9Adi~W8>bxJ!ViJy@jYa@{
z=2s!PYhRLB2iDlpv%nnsOJ_VSVco~Lj?25Z2MC{SR?1%4o@A4TM?
z8)3><6oJz|vh_;nks&u;QR7ooD{IG_w|(=MkwfAc!MhzW9$>)Yo2&^x1CyK?lPRXH
zs<4mf`$*5u_lk3W>ISd8BJioZ^s@9s0e!x2}}C*QdAw?ht^
za^+QE3H!>ZUXtB-ec{9sRtvrd_&q{@xdT9t&s!eaz#oA>H@CN0{s1
z00COFa!Ac*!~|2GzP8iRUBKwpSd!@HLo69oE~`L}cWvXC4XvKj`aGlEdF~tSNl-5O
z8dw`N)=16;8T_sT+Z^$oZsBk|Eu-XD5`sB5
z<--y&xaBLEo6m+ml-zEk(gHCo-@QXuPnj7b^|X!z_=4UsH$hU-KBiOAc%(|CoesJc
z-4v4xlTL%~QlDT?94^Ge6^+Zuf)|e3zP3nL7PWOgVfQm}BS1Op!;-xyeyyZ;V+(TS
zV~o2oPbAs|QJ^q(9xa{Y1(ihtS!=0cLx4~d^+76a)^=N!@bK^{4of77EK7;VfX9dx
zeK!9k(L_6dT7X5f%|R5S(sg*lVN7){co@IWBdwHuP`>Q`c5kv&(Zae`H+z(WI`=d?
zRHV7(Cq?r<j2@Soa+iM0LM`3;s7jouAN
z>3z(_)j-4C@_x{#4@6fp1H4fuSRoJBj90(7R|9;|CpJ0KV}kGhXc&0_&ww@y+H>t-3VtVtO`~+?ppdl*bJWyqRVscq>
zfr0>4^xXT_<@V%tOm`UdS=MCP6oEKB+y6L0_-M5?J-1(+@cyFx{#fMziazrDk1!|u
z!8J)n8k?A@_sLk94TWP{P;dRa1c(%&^TfSHdbF*O);wbDDN>ub>}eBochV*WD@ig>PX?tpm#kLgef)Jt
zPEZMyeI3Ppe3*5c99>c5wJY~nT0A$O5ZnCPI#3joVhPqDN@u_XSWlszF_TkqxbhBo
z&tD17MRk%$fVS)TjmLSB!EStA;()I7D+9{b>>J
z&4K#sPPAXog|0Qax?RME8j@*Xse+w!Bf
zi;Lp&1sBEUMk?sIs`HNpjkKhLsOs9ETz_>fKi^Dos#dU15&4M&?i(B{*|b8BfcnDH
zG%6NrujSkLF?xxm2C1Fc8ot!WuGMQs7a80QT!@uhEyCKHOcTo38q)WXSlUw|#CMRQ
z3o1)h+n_}|j^jr__(4~KAs^O>G}YMGqHRo1XuhA_=+rt(Wr0B?%8rvIVA^-s{jjoE
zNKq~Iv%levg2dCenLVJlneM;}fz+Ad7q7N1XEf2bHDvzqiNZ8P*-Q_kH29*bd3U9Q
zj2J2M#rKhHL<7YRQIbW{9!5!o$>gq1thxdfW-}zfg?W(|!x!d3G9#G0nsG$m{A4G&
zRzP@mZkV55nwHsLJ>NC~{zqBy;LtdyM!?iCinLf%)XJAFx8tI)$@tt2AEC=6{Cq`3
zrXT0xe$yeU!|Cyp^uD9j3y`pG(X$Ak&P%O9`b`-Q96Vqo+k
zccV1xQqFePkX2^#UU`L`mFb9(Xrh?O#6Ff7MTcDCiALD80;};c@TW{;Rpyt7OwA)k
z8Z&%-Q}3W^>ZAt0p`>ghtq&6i!yR{5bNciak>Jt{M}z0kN@Kc}xCuQkGB$oFrBUWTS2ADhRs(sywVuN|
zFs9?=`)G8;TmTc(VEwFbVZmX>Kx(57VrDDFRLVOa-6W;^cfZ&tuL4RBwl`pfKhvL~
zouEy`b&H8gqocb2M7{Q1OiQs7%t1wHo^3O()Jj_fb*P>E(=WS?iaYxNtlP%;ROlwI
zDWdCA&AxjiK)t)};m8zwRXc21lOaj+v=(}uVJW4`@Uao3Oy;YZ&X?&onJ2v4s;iUW
zfAfTd^y5&qm&b||{Q5TlVF*rI^4U!nH-yAJu}R@ofy!JBd~lsq2i3SCnL9r>Fv4
zynIIkv+f4xvK;cK{D4S}HUQU#d+iIGw1Yl_*SrVLy`1SFeNUh-Md=%M4dBh2mDGq7-BHRwOQ>MifH^HOPK)unJl*?RsN
z8P-J;XUA)gM`ma;JiZqVBQA)JhhN#tTBb1_tNR0Onap)ye3;6(Rt8R^?&<|ot@Ou(
zW)?1oeu9UK!9b4(HffrjUb6>a;-|e6ZwT|!-%P-3OBR-Z`)IHAymvDkB_6{d*&BuB
zbC)-$*(8}&ANhRpjb$TDEic~Wx$AVL`286oX92G%**d|6+W%33@)K^TyeD#sli7*4
zK8>WS!sHZ)`>&~^G^gse?&npZ4p%6O#Ox_zHzrLq7HFAFvf4cM{BdTgcU*f_YIme1
z3HT9_5s4WcZkS64e_}%9B-w&jmK59nPMDr5>aeZ(5d&E
zwU3PZP9Ef)Hvu=cVaRXpB8oD!oyUnP`%rne(D#V+HA1w(xxVa0{SZFX(_M}Ug{EpT
zmVV3JJBfn&@o~@VSh;O~BmScg|0p7+e)X)ha+YV~
zu&i{HQ_d^A&osW2P@Th=&_%~ijY}P-0*TIKs8~F+c`}MOmg6}oF#`Z9_byKiyWYGA
zw=<=2oq1d_Oet4X!GFGN8C^LTp25TH5q3%LM8|pys%7a{L=o3Rg)gxJ_QTB-wcEWd
zC5Z~{u&{-ZR1it80i93sfqI3>ag~q0ONa@w+iw`Pm*H>g;>Vx|TjW{Y>F2Ot
zG1fM2dpv{EPl9U~6Mw_~LGOzR!=#DyT0aMl1^TV3Faul}O#&pr8E9N<>u#F9HX&<7
z_;(+M;2gd;PS(x?`GU(VjDcThvAnZGha;3%6diD
zl;|TkU?O~4zp1RLX6eo#vd|ogJL5xns|e&rgC5th&dsEm7zha1`RQIO*+d#!35_~0
zj|VctU-uJUIX$9GdhBCbr-b;Rvc;kxQIYc?+_R{hRLX8+@aH2v0VAv6C?p;H^Dym6
zGZuy;6>7zTnuH#XC7Cg`w?W9pFL0!r=Fk4_Rtqo_lMPuA(9lU?bs+KLI;@`eaur!~=l}u>*@M-jLP$
zumpZS!I_ZN|yYV(8rzzK7sqp0XGYX{Hdk+8%Dh5j9+E7dv
zpDM&2<@lFW`lQqMLaYH#PG|9oteqjCn`BXd;!cUO3`iP1zQ!C_v@l4;jLw#C8#+eO
z$LQ=|Tz)@~`7`S!-e4~y3q%&l@~LV5qJY9mfEqxa()hFw8_-;WT-m?;5}X&aPy9!@
zv;0WX)Qco3b#&fi=*4==YK<>n;}8Q?rC65eXbYD^b&5n3`w0bgI4HNVGjG>SlWGMH
zUFooJemMP#c9b@;A2|;Fd4GPsDv^2zmjJk^9Gr`ML#S&u(CUeM^$dmX)YW57lPdW)
zjKI!6r*4XC3e`K?dzZ)zJ*{L2%zoT-`P!ZVO)^i*7>0o9p6D3(tTvK4E=U(PQ5v2h
zb|)TUhO?f6vz>PQ)|O61+?nu9;J@Oyn(;AS+-|k7&h3kOg^cqU6amv`P27Y&MpeFp
zWE09xsja)lU(uae$j>Z=|CV*pr?lWIS14_Z7*82p*@MyKXw3<6?u-_
z(Y#-9XxqEjSI9MYQ&HZCC!yj~N>83myA$JQ+A?TPXglefV5srAh{8Aive2jKBs|3p
zO^=u;C%^fte6^S^Pv`@)Of2CWX+Vsl9=M@=MATU~y*|7jMlF4T+zFbq6Sm*v_Jn1-
z)6>_G(;3V}reyY)cjIdTo8wBrJq+2VTX!w5m!T@}C_w>jzce!W@aj}*#o
z6vhWuHD2!$KPO!SNV8~K9m7H8(@uTMF~FYjMwWl=awIk{W6#2On(Uq1hBEji+i<>i
zLE^uVjLT{zJ>CS$D%O3bJbzwm22+ZJ()5<9fZ`n6CV^C0&+ijw(_m5YsGXrK*{71l
z5aVlOX(50<-?~R)HryMUm^1V8ifIEK<^L+arV*eY6ZLZGI9y5BFmDB3NXo?~43qk{
z7{yLE2+DtAGcUW&sWYaL&Yp0vJi==loH|uplaZy)xP6ZeCb*Ij7uWk=1A<9z`TI0&
z!@b8*fl2PmLFWNtPM6
z3?#HyKE5K(#@}k*u+<*HKpkyeg+tkZXP`R?A#(Pb50y8Oe1Mqaisk~V@I
zi_!jE3y;HyV?ZJLcWq+iGP &3}6RKb@tFVyE!j>=0|r12S-2GzIfOgQLG~Mdoek
z!IBUEs-Ikpv2N!NfT-|VqDpt|Q*!bprwCLZjW0Ij2H_8g4b|Ap>jWw;cATk6)p>vH
zglRWa*<=9vwO%>tYTQ}8+t9V(76jzN+^F4pl}EOZukJgrz%^y*?)=qT1w157f-wDu
z=&;t!PCi+e4je$yg~BN;@V=qV$ZU*#lgi`=rnkSNXqDy9pfFk=oMA#63RzpA1?}d?
zQ@%v}aXM&&7uL23RhxMJ;yDDI4Rn#^h3N5PyAd#~P@-Eg_TQWL9$#Jd4WH_E+hRAM|pS!Tp6_sL*~OuysCTcDvFdB33(?
z!5H3{g1(4{ABG3{W7vd?Ud&^7r|m$NB2sTw@&$zObcCy_V^}7Yj-^?My@~#h;Btd(
zX$UfNyGa?0Xlu`)@Ajjp+g+`Sd=!+fSyBensQ=P{D$dUzytHn*`Fj;3bc{Sur4vwmNuIkaO9m0f3t*~P&_e=SmEllHe&D_Cf6=|^*xojMeGk?lRM
zOL?e!6aN;Xq%S4M{Ydy(_5J5oDxW@U1}UUeHsjN8N*#-&Ak=sj2&=0OOJg%
zTF}U4KBt-Ciu{}D1<{3PNJPnhuri$}?8p~T(JOp%Q4;N<=#^Jtrb)3h#8pMB@mVAX
zB%_ErI6W~oJd&)@g?9QC2$!}#-di0!C^m}sbp-WClrb(V)}y5TG~RtwH!iU%hcY&f
zci7%UgYvDbe?!R65^~!k02whL?uy4(h!d=H$5Q0qOc4pgW{F9TqpAMsKtasOD}f4ize5f-XQ57*IxkpvxaxA
zcN~I|tajv-MIxX?Y<3YztUlcm&2K^}u_kV{Vk#}t5ho8%S--GU+TZBw2WVbgh;-et
zBjYtwN6A};$7+N`xPL(q36QCSjduurd-GSS0y(1z<=xlyx$8HOEH2$(O1GJEaG6RM
z-cA8eJ3D@z5``&CBUf=ZDpXWItgEN5!pU!(Vr*rc(t9937XaQnNEolI@1lOv=BVDd
zl5g!qDZ|*G0?C1{#gL)Snb^YA!`bRnwmNyPgk%qtDDS!Z#}0F?NInf~MFAk$VKs@@
zEzyb9QY%bs1gdPqK4*o1ViBzJQBSn_ln{c}uz5h+Zn>V?QU>zks*zPwNz+HVLFQ(a
zl)yGQXwPDSzE*Rl(B~mKk#(`5p=3B7F6NDRU+}@wK+}NHwhEY-HD{{)R9ld+fuFiT
zmy5_h$8Z#09Hs+AR*acC@t3$;Qh2#j=94S?w#%&+;|69u2UQODq|R
zA_1_xK`hM!jAGRiwB;KDcN+670?2b2&8czrbFo?k)>IGD#Psapm_4u-Cwas*f?yg^
zCnF?8sjv+KSzJg0Mu$@SRbrfkq$Ps}5pCoB;4U
zgsj>f<-Y|;(8gh+ix)(Tf)@#+`9q>AWPQXT|22;o8Mmf$Gs#8w3%s(p>(v9YI-k&c
zR~bDco*C-T((HSrymf-|x#$36BSxoA44n+nMexQ&eT8HIv=o2h=hN3mK}vu>EC#}Cg6z_rlgQi$4daGlXsj|N;9Q91mB;rs
zO1Vg0E_E~)-}uu`Ap58bB~iGCZ-XN!9MpZlr7Hasp7g4YNNJk1VgD;kqlphTckSEVo=rJTocC_>JMl4AD}bYsk5Q#tblm
z*MgJvrk&o~g^hrf<=K_Z&KG>62eSk1Oyz*;A^@X|;j3Q|=M)QHwe^TYFkbyMxzahI
zmhSN$Mc7`~2K{%5*P0kd7!~OimkV#rWWz!voG-i3W@kZP>`t0*l}|Ej8@fvir{MN@
zwNu1oi}$4+Vmt#9Wb%`qMm`&`7-;?59Q)l
zZKV)(rN@Y5q9xtw99QO^k6$K1U7=TKJLgEk3l#2R*)?x9io|Eck3CU4-kPlYlmEr@
zP?oa3cex+&8pl5Z=v>{mY_+!%MXJoiU(Hd9+Cu&4-1bO5#xnFSm=lyTa5u5dl`bZp
zQ6Nh;GZm-u%A59*j!Hr!`^~ySX}Q|eNbc1sBag5#gie&j$%=>USn5LzccTu7f#VgL
z`HFl{VYYlwEu&+-vq?y(vQ--yjGs+Pxw!)rsx#Rflh_^)q88eSk)00&&Uc7tjIQ?`
zu$gov>x1Ac(f`nQ1xwijbd
z?&BfzTGC_A?64r?P+`PA)#??YiIu5a_l)ez*c@dJ>-vsF+%-`a1G%d;K2|dO?|1Y_
zk--<~6YtrT7BAbbsFYNdx7dbxE3@sh8yjjW%)z!Epx`MlnNPe^u1McCU)$}sjH%2Ms}Ia1wT)DG{uXsCDOJxZ`v2~6e1#@_$HKXe&`
znP)^E3!Bxm9^i=C{^Fo64#gOPcuSk=Vexi+XVz5d;TED}4wZ#zy?ltS?GgHcGNX=tRR+`@4DU+A{;vVC!4-LLH2YK?J4W}Y
z1muyKV-*=Raxv7<4mVkaB~&)O&Iwad&;8P%?`9f~U;F3MQt?1ISvu{I&p3vv4Wt@lf!?Ok{=V!as5
zwde@*ao5%|+ky8;6K&b+f@vjW(?I9t
zE}7@qUt}T%gt=01E|$;JaU2o9(e@q~+5H;PeVpx6>S6VpDl>etR$60Mp@cRviS^ZE
z<`2@JSqw=%(~@mXWi|8?6Pz}#hAMb}m!vC4r<0jpEE*p9RXwBWpSB+l>LYnsHb17c
z?*k{00ZX}0XC6I{a<#y1(>&2oTXR=^CcLPE7O5`BKKAE}$-V}^cRPc-G2MJB?C#`{
zt~o3e?l2d@l&1)Z^kX@!=+@F5@l&*j%RfC%hx$L4%oB0KB^ArPjz+}|7|!@04sF1E
z?Ok=7Nz*i!Z=obdjGZhxWz`Suj{&GDxun0-ssU~mbe>BT)+fYpMY)at{W_aF2^g<~%rH`&+lf4A1Z<0!~glC%PuRAES
z`X7oyv7fJPsSZKz+Fm34(mUmQOXPZLO1K3ISNKu#FuH>9f42Pn)F|-pNCFHr@_=kk
zh{8OWrPB7;=c(OyE}XCD3M-Groq?h?@)(3US?FqE?zhEk!d2*tl)OK*{%*yoHOmdd
z9)oobDB%?xxUR8jD+jOK(clt~qLqQ+sG
zB~fn*j*3Z{Z)uSPPCElXq)fW*3Kznjmt#_3F`UL4qMIw~H%j>I%0(hmL-rS^m<$JA
zr9B9fH_kq)TW*o`-rfr23-8q!6;D&Eb=U(g%)XgBkV?6~XW1f2k>vLzM)dENMhSCX
zZeu+p>CK!}7)&?snMYScNEkO#vs-Hm(P@80b{pR?jV)tJhTlu+?Yhyh2@Lxr`OKF>
zN{Hy5ZMZyl@QkcaIHgGqp0Y{zD4n0D%+WX8vIzL8Z4D+%u``9s7LO#2n{rW~K2_R-
zksLGOhym+u`{Exp^!tI6S7h`X@Fkiayb8UuhyNwx_TPKeA#Kzh
z^fAcOS*>K*iwoucI;p+6yZ#Y}q&bM_l0s#%9XZ#Yt`V^{~sDd9w-RsF+U%ODS(you(|w<
zBw{fkaw^2|ed>9`gGGo30%U3vhVy3YaH^A#a%SgEaDQ5S2+@Am)F9%W7zL=7#+lMd
zlTSiSiJQ_IGhSSA8KH`{wLb(HanU)KtL`
zzN4|Bc=uP1VcDQ^ed=&6OpQ0&%F~C<5km@+Iiv6?Y$fuMP7q=;0_xpxJeeF?>=W<;F4Eb$2F6homO2twKBCr6iQH@*e>4
z^NHAp%hgGV(tD240DEQ?!;A_ox-$YsGtPd~hY$lH(#}XZ9swK`ib~p!B&|oIx&)Bi
z%!p+c-Y|bsfqcq2;wU1b;5<
z`quFPvX;%0Aa5juxI6~s`6v?;p&8jf1h$!RGKpM0XCxDK5kb{YPIda$XGtpIYNPR%
z082w>%aItITetOSSGCW9r<+!-kAz$c?9{wQCi>us3pHKJo1g7IL}~TJqg<#7nh$L7ZzCB?v*gWxG<@g`$FGWJX({?4we4*Uk-g_p)aMl#w@Y4gByIa
zn9Dg_w*l5GvY>T3JjDEnVf`CMV^O}^<;#!rU938Vqa&Lbt;epy17sPYFPfk7Cx1@$
zyooD8nsN~0(x5qo2dQ9CYo`}W+$k$1H*riO!lPJHMT~r*jm%4%$hq%m4nuS8&z33?_fEQ3cGwZN2Spg-X
zfI257%w>}uI;AKv2|Td}JFiB^x8=_&v3fNoGC=)T$SeEfg;&;wqC{u~>6qujA1LMY
z-8;6R>WOl5M#PZCAF>QGrs9tTS{jRN=(1N0HL!potDeK=vdVWMd#508o2HJr2=QB$_tNx_%%1pj(
zm$=0KX8(aSarYQ$E%L0MZ=uy!2`D@rt{M=+rWUgW_@#%hXi5Mg0000C
zNB{o+{0I;bG$1mA)Bz9ygn$AFAd2+VdWr5L50|}m?9*o)Ug9ZET(`8G;eOr976V}$}i7w-i8_tL$*J&xbl+7?hQ?VDL?V-B3^H6#1qYcB(
zx5e>17|XAgE+Wykv(#CnCe&aVR!|1r}~Wag>$_?)%F-*?U?6
zFg;uQ{zA{Z7Mn1(RK*<41?(qg)Fd!YBp7#R}ecYork!}To#pMXW|>Q@IB
zwL@0)^ftn)uTV;~iTdfU01+KKx6p?=99Wx5H7&`ekt>Rno~MN8pfl01c`4-mAm7-Y
zb!&c~&H(P;}Jsk2OFklM<
zv;0$w!C|-c>lqWx`y`%oA-|0XouBbaS_H=w&~JJ1U7abpUl-z5PHyT7@=sp_a~*+H
zn@>(%_>C(XZ4)L7xsD9|oePQT6C-rqsA_#j2}UAy_p#p#2?otbWPEMV^Lb@;1>(KCrBzinK@
z=h9!kphytgLdy3VvijK5Pi}Wdyq$;Kui%*#ik
z;Y~}}VX<2(0yDuxy7J75^oD;ybk(RWm2K#JmNGB=SCW+H@#J*c2}cR|09;`ZhK#%e
zUA%2b@YTmDt^7jI53%S>-86$6F6F~Jd`zhDXehEQbz-vIgJY5_up>clb0RlX>)?0&
zC@t41PZ3sxT0<97!hiHOXB{)VmW>;?n3nP~H4}`Cp??7;1v;!sSe^7N_FO#BXO&0_
zp4T1j_ND^m#$HWWetqEX&UMf+UhXM??~K^-8X1A(nA
z^bqXCQ==NkC4j~rRqd5904@2I$Ey@ZM`XGEWx|2+A
z2ZcTNu*lH0oKbF%bE&^`Qs&OD;8nhi-EIrE_2_+hC2SW`kMlA&@G!6hs^19frdJjsMkhs;kXQ74LBnsz1df;Ka3H)?(KzN~hqqK$9jRl4l2A5w_
zR*o-ZyhQ>Hu7*>@%tlpi>*YG*#1_j{(XiBQthI~$D{Lb6n8K-=gGpq8EK`s7^u5>l
zJv-r_@ZX|bcXvry@LOnTH4p{gzHZ3QG%pGkYB9gPE&-6wKr3Fr-y6mDdFAW^64fo+
z3RCFZIZ`&USIztFjsYtw?JgWk0B0#6&kF)If|IX|YA(k?=QAqhzR9tp#HCYwU7pDSKhBYa_o`vb+lE)M9
zuyfa{5JV9w&+Px1Y%wcl>}$9>JdOo(>;SliiR2XV9T#33)qmSQ#-U@}L~Y_@k2uQk
zS*nOy6$n3-|ETV%y
z43XsPerIo2Fex+6=rh>^r0jB9R*Q
zVSpGj(t-*d(I*me(~a#T-HuMoUW$bC<``Ww;0vw2Ed1-
zJ`CGb5hbc6K$A5qBd=T?Kkd=+RiHNUW-))I}YwjUAK@#U3d{N6?}grb@QX)}H!Z
zQAKNSE}R4S(^=qui?b@#5PL^%puPPN$Zw^i^`=?i69iBgX((wPn}Un}S?Z1*Va|g7
za4#GoNF9=a-4X81gE4SO0y>W&-vqfzfPJL^(jH?1Aw!v>99S4ZEsYvfM2Jsvg>5mU
zi_4<7#wQ8I{ZwBge@&zY6Z*WmmcB&L5H&yYY;lZF@mjG8XYP4i@CbIDSDf)^yXBji
zO5wkE%JFR~os}Ri=NI~FZt9Gq6DUOQlfP0Tn&jKi^!>%YEvLCeHjZc_ZVy{%q`w&M
zG$!XG+s_xLrYvEh|J6Rg+z9lZI2I}TMQ%$Z!|ecdJs>_O!=%Rk3)H5hWU2!q
zQ_pE17!8|16QYeOix8U5A>5@-IJ2~o2^lcPSx`P%;DsT*(HClG!hQd+@Jvp}z|qMX
zn$0|c%%^7;6N38jM3_k6yJ=e8y#i%-YNugEdQ`F_rJQK=US>@++J}XPdzhEE@BeVO
zLOg8|mL1H}SJg9twCOdvIBfhjW>XRLgH_60++F24sK!};>@hW7MMt%X>|idq#iu8G
zz{J8~Pri~6+qM`S4gekI+;kHeq6?g@=8&HQJ443`j|@{7G=ezh8+s}KQPSx2xLmaA
z#D3MKejyBfeZ(`AnO+1@%&pq}K;)KEL@w)Dr3nZ(lYK5e{-F~Eu=H~3>h=Up8O4-j
z;poTRaPO9?V@rD!2CkFM&bj(wg7FwxYacEH{hf|#&W&+>>AWc&^Xci022c2dI8csX
z1%y}mX8WYlB}k$I&Xnc7_A72FZxOX2mYuIEPDYSoO4e+HU%{QS*A^ly=2)i?wnvL+
zS#{m}WSYzVuL!b$vBRd%DW+9DifB@Q`#n=mB
zrMhA-{kIBYVS~FzlqJ#Ceh^0;R7+z?*nx#g5%rz#S=>FS&5ZH%7Id>n(o^sy?Y{{T
zV`q(IL}ZZY#MhGxjh}nj1NR?Iuq|?8M8%y{3nTPOolk=fWL3Yrp_m-338J{V_C;Ci
zgULG^=p?*_m34N3X3B^BiS&DVm`5oQW;|^X42+yG7S*Wl0wkvGVd&zuoCw;z(LD@?
z=W`{X@05wY#9Fe$3F9+Xm0mCN$gKw
zn{YF9Bv^*0fsxTEwFzBPiE_-UP2?$2A$zWH0Tmz)L|;I&OO7HYarLEmjQNbi)Sl_D
zv3#vPMe!7ITD*D*1mRsk7?|*KIlMy@m@tw`MJr<2>3xB45vgWKsgBwK(ZGIIRFWL0
z97an-k<0VBv)PGW?x{R&6bCgM5X@c&H5rcfPA}2M$5#J7vC$|X)awq(VJnk~JoE*$
zU6Gno7;%b&xrBP_`&x6X`xU7$bJ#Xi?n)MOdHT-JB{g)VN}N2gI)aW?`JXkwP@cqvy=UTIuAIqPlKjbLJPQS5=(2t0up*Q
z18>?@dJ1Io^SY$yj*gBN*0qS>s?R4Uiv9C
z=|$6A$x5rQnFI}ChFJp%+mmzqVv#n+?o#jdG{QvtXX_6Ui053O>fmc=tyeVa?!GgH
zo({M_25#Fiw)!bV+EznUgxQd~FUxLcq>2H16KfQ}uUi6f9nrX86?Ke%?R>C?`OZ5z`bCPbadzj-UnxJPHy&LD;<9z#dEpM2
z=j_a?w0~2Lo+K*D)xLHmONs`c&px6Mw)FQF_r)*KP%tg~>EhZu>@FVY;lq&R8
z-H?c|aa3m4i#~gDNA7X20#&AxiOc2m>pPX9v*!)98&&AD7UDx{>uC!jZm@Yyxh+;F
zbiQhMEf@)f2ID`cqBEI^XJkQ|D%#AMV;6VEDaT;tRl}idhZ;+@v~NmBw{r*N%;~9s
z=>>`@SjfJ>Ps-^JIc|SQ)aIk0@PPLr6~h03AYKx56H@0Iur47;$`kjTtr}5O8U(hF
zY3Mb4efI|Sj*gFpdKJjVOn8%%X5X{kk;w0OE21!&Jv9Now;CtpF1?{1Uc+gCUA!4^
zYqgi4`+A}KosmypN5o}bcMcF^yH_^_dwat8Id{uAFF!bS2O^S`P{8Q9>~<#5s!lhG
zB5Nz7#=`s0%Bs7`XRd(BBJr**Y~jDhMdS7ie~R
zO+nRM9OR7_-@69Oha
zCP1rJ9Gk0shTm6xUHAD94V`7W(BaooQ={faMvr$AlrucB=u9P-|B0CfC1jH{sB8~7
zW1_Z`?6~1^?Cs#tAAPFeZEOgVnvf@@^&^h?fA(A&y7j8-s-g@`x9=8&`QcT_{tqsk
zOHjGgNdZHnoH4dMFy($9TGa=UR&1Cg0Wj$1N-D#EiOsTDrM5YNsGVgMEv=8P16}0Z
zsqwp}Buwdz87kj8BF>=>bHP(O$NQ6f8%FJI#>>}uv8Zl^_qnR%1hg4dPpO?SF(K;3
zqh?-JqnO#Z>$ZTo2iA*Wzk;YuT3~A
z6$zFa=lI@c8e$>huc{N2D$8JgBpMQPO4u85B#<=6OGt%F1$Ki>d!%l?z+
z9PJcYXPQFg<8Uo5ND)cUVtgLHsI~()Qj_qIbj;n#)`dAvOfPKyz3go
zl>rKt7t@W}{jshB?~~DzLfqkJ)ND>1GNAg~pi2Sv@`+ljW6m<;8K3cVp?^|6+)lP5
z7x(Jq0^#0Q5l|CCB&HVNhDXEmJdym&yOFL%4ay5)m@YaXN`dl@k}ztJfHwy23#zq1
zq5R2?tp!DfJx<*L;A#umsj^o>-<_ZyoNUgrOQ6P2bS;Z;7H1ddCGlRR-X%0YOD=u<
za?8`58^lVx%IiRp-zpK5`Q0~5~rLsfLX
zo%?2RuH~%?B+b!Jd}jc7UL;>QagL-lm?rajNFIH?x|>3Bb?8)vraNK-oIUVV!P$}J<3?*th7rW
zklnRYB*~cO9nDJxw`lo8v->Om2g;%Z@;<0I!#4kVb^yk%`CXUgX243fTwO40saruGu}a=P8sN
z1TVY4|6r;Ud8=m!F)BCQk^c@26&^!&paSXmMEI=85gazRyg%eN2Q16TcVlz2@*CO%
zr$>=Nrn5S1th>^Ve2p~^0O5~GTy$A>Hbv2ur}G1M?*4{{cN?QN)W|fEvftM?0=5<$
zCOtVO(DFwxD=sMSmLY8MNiM?=4fTtv_o8aj@zx4id`$AIqA_QQlpqztg{#h_j=!bN
z08T)$zttM8I{bxQkpt6J2yK^zsZpKt+)Byh43)z!E>EShaWmAd7rp8z5Q$YLktBAS
zG_nItlnYR}_@GX`emollZLzNJUzEt6|L}kJPlf0(f%T3PnXeaC;sW$!4e&6QET3Cj
z{i7~-JwNL|i*36F%qoML*r%(pfoHiL)zB3KNemz}*B!-Fh9lHqlOQJ63bKydw0DKk
zi)d#@hzY{-Uzs=6l4hdkr>}kP2orQTqn{4@0s@AYg(&0xXx{C=1{~weFJr$kE_%(b
zLMr!XxfzwMW2JS7-f+yI~wNSoQ!eS4C>sgol;~XdMpVVP
zB{=zGz&C>nR}}k_;4UC21Imm*PkemUV+~rw+oo5o`GuBqO3+&s6H|&K4Co7P;)X1>U
zRbh@KJf||r-3%)71hnZT62nXm%iuTg{{X+V1Wx_PJQf%1ML4F=9X9SyTc8x_28mTJ
z;V=b3vlN!ir_4>Fd_qkWePiSLVnZc{`~Q{qAi7e%Slz%*@s%9YpRotk4qr6!5fP{!^+eI~9CYSrv$Y!sjk%$a|brVL&3>{+So2%CgT8t!N1!2Y{#B
zB3BexBBL5-lZb>=Zw2`uZxban513eZAkzHo66hG(8ETiri5c4qt)xLf!fk9ZG`Fb&
z8*&nO!b{F9YniGn(4Jk>rlx1F@{bQWJR9T9kOVeeljk>#8MKz1DHj&j@ajl9n6|ov
za*XO5Mbk=&bXx^az&QHQc3fCzrr2aNcoD7C!W;lzzWsw!3^D+zo&SCoe0npN*hz>S
zHfrw(abPhhOr^2y2v$r;g4{*CN*T4u4a6Mi*H%lL&^t;k~
zf@$n;^Qb`w%Hu-$7xR%p7K&oUMm?Q-pShrh3kAGR$&?9Z?ooXGD|eLH2$ZYizA;R&
z{NVC3#@r@DPSu7zhy9x}3*3zUhB6VDQ8~tmbR>Eo&_O>0pUvHYP_r+Jp>V1&*17o5
z*THQE)t`RpAu!|GTLU*}STpG{Q4Q3w%u-201hK+wmNpQ$(1!<2=<%otqFlFqJ&FB&
zmmKS!SUY>TjF%T15>xFG*!k=-A22wanZS0kQGHz=O)r|H(E{Z}Sm0m=sKUjd<)VMU
zl!T5Tf7|g}CU*PRB7z}-iNES4Jy|ibeW*eT_KGoLaMNS2o|_g<&RneB_|XO4yLf$D
z&F3!}$CDCZs{k-NEFkG7B0&q9k(<&zy^AG%cW(Fz%w?Ix_+z`5LKYg`>M3Pl+uV7^g<2T6h#w
zq=u8Hq8K@cgB^#R$m=$g`>bJ=&S{?-wC4Z*#^4%S|2w}0w8ZuDHH`~}mp1
zR(XqANSP8p^R63)P~fj=Ia8bAMT(S6jMFM
z4H>RdwvgF7?upw49T%je^FIhw&0bKX0h-Y69psP!ckT{wmSkHf(s08kC^W#Jq^0X)lexu>U&sSG@MA>N37UsYF*Er!DEW9
zqq=H_$cmM{l9?LwHoAJ1sQPn=z-;Ovb>7$S$J$ul`L-l@Q`RP%{-U+_3(EPmpK~=Z
z?Vl3%&3*mNK;>z4dnO$K^p>l#IS)cCCv|Q{%F&yRwB*%2
z2p@0bU~K1+4ZS
z~-?r3}T*>V*
z8n`*&K#G|T<<~Cz1|Tss&Ya&Do#3RhZ8oh|WSbFpwoj@~7W&x=tE-xqv>cXRUZ>N&
z<_cC`2%{I)N6G_K1?f(%^VBW`(RTt_>AG}n#PIk>l9!rynlkFFc5Z*btBzdja&tqj
z;z}6(07F8=0b|;lUdJS!s(tOp7SjI{&*CA0i1tv*nD?|xvtr7jfP~<9TfW%Im{P2y
z@K!O%(mTXI`*v;F&`?o22s=vPmgc}HC0p9=H(pIpPV|Dp?WR#CIg&x)2Juw8XsGeZH5!mGs&FgHbH%sqdvNv%@+gNlW5T&{GIO4n4#
zqm*haQyfxVhsqjPj%VO4BC+3%UxrTrD^1ij2CMXch!<)9gEk
zO=yq5(Mx5?ekqfsAwm*vuAVTDK>q8e@x8EeeCFGNM+-?jiKq-Cl)=dUd!OqrOFhG?CQGIRNh=`ZCU%az#o?t*iSS@gpbj(b_%IN#gs!hHmn(RT##v
zVQ|NK20gFFzlpN_&wD!6Mmk#mdr2iBq*(^S=3dMTTzQ7}HFLKe%yvj>K5W~>gMIF7
ze=>$l8=M^0N98FdKBy4SqacK-L)-8HKb2_`Wsr9N6r;zNgX*NOz_k<0AJzGR!b<+y
zRaeh=gn%CD+{=Il)Zh0xD$7sQfCh6xs#wnWVwFN=TL}(tgERdpC$mgWEa=Lf+;tq=
z&mdD2*6IC5)BEB1I+aEg8EU-SwC`1XdK_B%-=?8m3fR`Hv0)nC$c#U4BApcY&|IhP
zX&PtWG&4dLil$~z9GK)aV(8qoPt6u`UmI;rh`h=q93&N9zOB7kf&9#iz~N>NI`Pzy
z{7dH+JstJV2e>Z!1L8nqIF=W`gH2?eMp;q<`FKR(e$mx;HM#GKGWYUv;0-U>7~LWz7yqE2s?__-P_^d4n>_
z-hm0-F~DY?BSteTpu%a&G>*Ql(Y_4Bn+iIIas=;kL;$T9alnMqo7#G?A3%H*v@U_$
zub~UcZSFmgcAx0k1F7@kU81=*x*rt%B7Q2w+*U3lpF
zhrO1aXcEEd6NY^w6N%WH5?8SG6&T(mN{CK;2jHGYU}EIrKPv9J&}FnrO-x9Y%~_&I&v>e9fJM>}T+&SAYVLv<#%joe(F3K}aKWf6aNzfv&Zsrv;${auzp
zih~K$rd5v42EJ?)+E_bx!v+2uV+({YV)*5PC}+c+2MRi^szhk+e$r7Z%`-HtpZ~NCVDn(mc!;iam`w59uetSOC@;
zEERQSlPN4kD?e(x?P=|5K4IIbA`XM#Sfm-FUR$PpY6e_#Wzbl|*Y!xk7a)3_fuX(-
z6MJWfG_vaSIF7g7(>cdW<0i07Z$RYQdAdsG9KAr%5%#eLU={xFkxAvJRGH)ArkZf`
zV=us0J&=iv>Pwr98u%|>xcE=0cZbj$C*+BQk1?6oW;pBYbTUKD681w?I6d`Z-%ZPs
ztC{<*QRXJ^d?Sgut49i(5!{e=ycmqb?vnZs>ILy;nGjtNQFp9sTL5SVf+
zVULIH)VhH7yj&>g^tt@@!}B(}b&exeMmB3l!#dtLnk>aPc5E0Z#t!}OSzA!z@MTcb
zRmz05EtE&`4tSw8Dk$=69}X!atg0)$I;^%cONbsIMxM7T!69`ayMc%zmOh4?=+^*q
zH(A&S<5Q5ypCBR@JH*x`y9?Pd=^8*!VODy2mXahH
z9#20omfdI>W%szX9te5)6y7OgIG>z*%$1(;)=$F3blJOtFO5)A#ua1lapEuv-zV#U
zrE9?dN)~`wpG>(mE6?cYibkZ8MBDLqS}MJwC@eGj`|2fARn!l>_RG;Q<_2uoJkrJ>8GLIao4*_D
zY>^@x_6&d?Ce=jKqPgCs8Zg}ZxxHnc$K>biP{c!9n1SL8_B?4(@i_l!5!M?`;?DD<
zdmN4{DSNm-ieQr)iWN|UvWE^r`EJie-l8)MV@#3k$>^0)B#Mn0O)Q{J@>+v5Jc&uW
z)Y>mt4SL_TEH#6Kzr5}l@Q^$R`YB2*dA3^fB;DTVirKslqAJ}M`+KpZun@{;+t~Bi
zJ@xN0&aPB+EpuNOHG?*x=gTcTx((Xg9#^d74X3}fesA!!rdpC~6w`|(T(WE;lLDFq
zzog!gFqzS_T5z7n2JXv&g${G_qJ_i+t^y%yLUl%a`ibAXL;
zc%=B&PBXEpD0a|nu%v@g7v!A@Y&6dhTW<6xWU1B;gaE;bEsSj&{=nZ=>sZNLEePp|rlgnq>Y@#w-Fi%zwu<~94o#$)NGCQ~TA@;X84IyHQEt<@Go9#s+N<;G`q
zI4FnYYz&JT;xWE#*FXFSk3bc9k29`heBImL{m<&49uGT}H{{@Hz8RP!wLT7bcT32C
zw2kJ-6#nM4z@t*o+^W`b!Q!5;QKcDP5T?VkfUmb&nkVRP>r;7si4=)6tU
zoe7O7P2HnS!Fc|E2gW*yLhNhc5
zfhBmtDk&UluA(Q~Ku2w1T8v$gFhZ`4qb#}f*F{mpFFpxkK%-6>&}|lhYC~x9!42ek
z7d|5wcaIrId^8bwB80U)r0D1}bmYIBxcVHdpW%N|wE*tNCA3pRhIDkqmTuO9G?H(@
zI*)*t^J%tWI8t++oLv#&K>bo~SwL$lNfq(%r#o^cVPwFEV7g!**3tw!NuWIu)6~1AjD!Bet#+VtERo
zUx1{+gY0-&k0-_auug_8(`_mg5@bp&1u4p@{nZ4u3Bbel_&lIf!A+hH^9;()$}NTA
zs5=RLQ@FzMlmiIA(|C=}Mp#gaN*191d}QiN(K^0@uw8Bm*H=X@W+z}NJ2#pZK6b3B
zXgyvrT9^fB|G1bL41|Ek2Bb@NSi9_JVUNcE%YRmCVJuRLv6jYGkEDTFek?15=uVN%
z+Pli8?~Q5Ulh9`lKlg(5fPlYpRSy1#UNW)atY(RNbU5qVW$}RiHMxntQFTZ^nXGEH
zsuu5;pFX!gKyKltw9}JO8L@Y|EOD0h#j_z*1$G0;C^I4N@fHvukZHK4j9f>H6>w=nXP0!!9pdy60;C8pxRO^4C?BFJ-$=m4o60ZQ}|3_?9Au>KufxQvEB@
z+z+N7**c{`naX-rpV8htQ~G9B^3hMhT6w|vzu(%`xH2Jz)6psAAGu)YK@mjU%c^tE
zC9U2v2sxCu%DGJn?mf}KX^02yg2LP60H#KtRaG;<06^F>n}PbUHCIeLfJgxaW#PHG
zzZhgvpZ$D;hw`zJrn&R?(Qp_ILS=&F5DUO@MMgKL#>t{3jiPE4Z&q=p?-}=6US~C7
z1|1RG`L<8&VN(2>yR^iW44}FhnIIb6pcNqg&1RpA)ryv}DZ$U_ut{~4LJZr}7l5w%
zr~srPnDvvCzBGh-6HwUBM_JH*8g%q}m|k(>Ot
z&@tTS9}z>6F1y_z8KYnvlP~Nyyuk+m(^*WoAS)%uaZhiOxD37O$`A
zbpBBw#N5secQH?2*DFPtNxpEOja(M=<`nlWmLOTLhkNlRO!MTNVPPC$rMTU#VfEGe
zvh1LFBMI;{?(L;efxdh8XJb1G!2!J)9tbmHT%llGs8VYkdqZQpF2o#peVg&HCRZNi
zsHTq&0IL8I!I7yVIXbhOgW4?dUWin5CRC=?gz@me7>*$?2Co%IkhUY``;bx%OLs_)L!teJyrotD^K{}o%M?19WWG|Zm2(GdKXWX+9JkSz1^4wx6RO@9YG}Wo2yoQrtciZlcz*v{-5CxeXB|J-yCcGVk1dyp
z^|C)3@wLFi-$WvmDDPd{_OA?}=}1Ioewj@O?7B#C)KTyL5@48gb~abxG1F{Rd2@N-
zuD~1Jj$bxBn0|5XC=#IibmAJYRbNf=IKP7`o|}Xxx7_38;E5e~UWAbxY7+8_E^i$KjPnFyi`>(xkqUg*!1{xPP?Y
zkX8u$C;8AQYZCBL0_nWq@osc@m$_x1nvt5NBk8diu^8!r#39E*y%N&n`6G|flArM6
zGza-Aj9`(&)%3JcUE3T?59ta5HsoxfpD(5W%<)!XJQMRIDo-Wno?y0ThZQ5p;@gh%
zShahx`yn0=R#aohwD|MK)O0?3w5n|*c$+Dl)GLFRY03;y%C&g*g~uP;z*5ffm<SiDe5vT?D(>o#+AYgcP0565
zfT9iuTu`dF!1!zmVZ1d}g0Nab`f;y{kz-WUPL%P6wSH4r#T50$Q$KO
zw>3>J>k`H81@1!!COMOF{1n{aIHHMpHk6Ig-1*7l8JQ+B&$z~3>+i%EDTjy-#z^X3
z4qVgdgT<9&$bxkS5D^7kDa@-t`&TT%tvf$l_$f4XL=i_+QrlOSx}w34C0^c@klYh}
zwRwtL6vw4v8S)Kz8o199l?sIo>%E4V#1`vd9FTxUN&cEfYMYkIIt21~X6JLS_flF`
zSMt_K^dnX*VxzqFj!|nL`8Jw0{&VF5Cz<{J)Hid?U|4gwBO+D>Z`+hU=7x!&iSZeb
zaNQwQxk+BCG5^*&>Ij?Fj59=xt$
zcmNAa);<%@r4cq+o>8sZ&`Ly2Cc;sgM-45+qJ0gF7l54hxi6>AHNulBp2LkG^(;_R);B47s(9v^{
zq^G`EQ;>P%%F)9XCNO*yX(Z9q2pkQ*R4kc5nA#j(uUE*fd;cHN36)QVkVt40LT1IC
z3x~ne*jjgTYy(|#WG1QYAVL5G
zCM$%=JFuzt373)e1Gz7PQw}?PVx0Jg{oY!!p^(=mmFxJfF#Jq1pb_WBV`hl&U&Kgv
zy0K^S(Bv`R8BW^$Z6v>iQU2zpzE|L1f}7xhmip9jQfq!gx3OdC&2Ua&QPotzM&A%&Rzt;cVNu=Tcj??~6hR52
zO@SqJ!`?2do&z`7JbF?TNa%
z#AZ{MS63-oUwmgezlZW?8Q-7dfP|n!
z!X<%$pg~JYfHqA=yN^5Bv1v+6o%y!M(oQT9t*{)qn>7oLiC@!?ObY;za7>G$e!8&M
zUtd~&Dsk;b_(I`tKLh+S$Jrp%7>u`f!t(ySWPn%H@RnGt#5BJIVM*x3Q-yR7c_P{6
zD@d)-U}_=#y`_eTjMg{H8OE$gpjWQ!ChNRhtojY*
zLnClX3!v0A4(k5<>~Clg;Ij8HOI6$7!~l0qbN}lZTUz&af!IXzC6n<8BMt~&u7y)BJ=N=16N$8vWwx!paD&42h@fGFv380fiN90nL?>q#
zJl2U5L&vYy_hIvwvD=iig^^1<*>_Clpt-=wUjsNB!ynArCLvJ*Bjeos-Ys`t_HSer
zDf=Z=@GUkw398<`ii~n(?HC%XTGfN1tpnhtr=Q(IuwlEpH-85Ro<`N0yww
zK}$R_ZH=ME6o=K#+e)lXUPHlO>53x)w&X*QnV3jvvu`>{&*2)JM1$X>g`f0Du~eJ2
z^!vr99qiYNgt*V&%nj2M1<%B2!ML^^y1U)z50kVa2C^5a`
zOT_PpT&PtoP46x3UvXKWEXzAf#l!|32X5>M9ml!i5fYD_B>nLl2Z8thR;n@`%}GT{NScurnUTBRI3=MbEi6PuQ=Y~
z>rmwcPN^=<5OV-Rb#o_&7l&~#7Q}P?2RQKfvyFeQf42)!s^AmBT#gKAKulH!)-Gx(
zWSvnO3EO=!eC0DX@zk?I(YR=$l}4ZV3mRZ)ANjQr9sc`ArSeqDFl%YbgYW3e8VFHW
z<7bQc8i&@tXP2t0NmmJpMjIbe2>Fm%0#L8vsLWQ!2`1%qw9&T8!u}S<->!B`{1~44
z`4&SWc5-_WvKOP+s%Ju;b`&cs@nb58Cjm^d28GT|qweVIsaiQb_5E(nrjOt4mPaMH
z3!)zj)<|>(7n&6F<1M+8B6zgzU7x9YvnACxb99hd*9qr^uhYImJeH{w01a|FGQrpS$^9ZwF#Z|+oD_)fAdt0;-P#e)H8PZYqqb_WiHa|a=z+Tg=|p?DABie=X*;6RlDj$g4M)n1a
z{ScCoF2nd7kOKEU8oP3STRCt&&l^SqP*)ZC$6yK!3k87=C?8PWuG_QvEO8qc>+6BM
zfY466fwb_3lqr&}rbH4I`85lzJNyqJW=4L2_K5#hMlYFpC>)jHmfZ|IlIm@s#4@vN
z1^FK34~32|E!HTiXcQWolebOU(|U
zb*D#&T->{k4FHC#jNJlb?OY*(Ia%j-QVfKk`5EVxz70Z|bO14s`^}==S7c)F?U^HA
zcO?NmK|Z86aVWpWnq$p!)EEReYv$?z{YRFS+}{L3B>sHf$DGOf}s@
z5OpoibkV8ge_7^XRM05R=4?`q`>JoG)+Zk=viG6
z3Nt?X!aKl=7Km_Bxm-PkcuZiOjg(5SKvRzOKrUvaA)qr^%%3Dc*68HKF41XNjzGB1dik_z
z8@VvL7MA5R#j^Okt=K84WNWg}zm2qaA66%ntVu=t28w03Lv>q~Zr(B=W20h8s=R+P
zzj)k6=5m;H!Z))}@Qk+L%m%iicp!)233P6$fuf&SJQQqDcmLsUv&@*$Hz>yDsL2tJ
zt=YVxh8h>cd6hBQAhUzqQih;x
zUJ~Ra`LT$&5Sd*{@2SW;g|C^&?@$ky2W@+m!;J1y&%ByLY%J|f3Ys@_6p{nO3WFLv
zI@<6mu}tk8gq=K_S6RLbpND1HfI1K;WXHH*uM-k}CJCvpcpSLD-;vk$E9yN`27*y>
zrmWZAW9SZ1(@hB{D6J6Zj0pH_Sd^`^eED_p<%@Zhl;R+ki&6Ckkd>)SZKK(cLmvtY
z@I6*|+K5>_?ypXMpahzA%ttFzZuk&w`?;k@Z1)Yk=hDQA!s@y?h^
zZyijIpsCaB-0z2Bk<6&5B#T^-sW4nE52s%GSi3^+AB(z^My@9RnhN@Iuq%i^G))vW
z#=M#a0@C?Y`2`=7wkW;Qk@U04{NT-Nr7Zo1bSETcT5!K!*{XI-|icyxaVJ0AXpe2M+rX~3g5!}RPAu^(0Iz+@
zA9#qnAG3e?6zR%YE)3bkib_?ZhWnGv2$;_}*UT-In!a|aw8nX71dNZueK78ohO^=^
zUq3i{$%e47org%i9v=f?>VcP>JI0TkqGSCGUo;~g_H;S?Wd@ZW=|Wza%ro9oAs~5m
zeJTW4V!%n`ftiS()IaYMomn=qx+3b2n&w)SVe?bu<&iabW~X?41;h5tk;s`YHG-fX
zk{+z$YSCIcOrBoRM8tP2(81and3uDHF=h2R2ks92bCvOR>AL8ic3*oEke_4e{DK|q
zzz%UD`Rg9FzZ`5*FjANrzPy3eLg$mCU0>moMsa3&i=JF<_oaI;_31O}B0GPn4p@u^
zLOtz2lq1)CTNzKntE7`JJjMEvqOUbv
zC?R4=Dy^AOavPZM5jG?xIOTn69DF>5pc$Ugu(-jA;)ERdlz*ie(U(w6|@sFoHB7<P;p}BS~9?Is_IQtf!z8RJhq{akJucy{lV@
z58S!PeL9fXTZXeF#tp+pxk%e)KUpQMBJ~9`xBpv&)e?N!+3imFJO732clOGczR@_3
znv;n(;m9zNo`tJ3L-@jSX!hD5W8)>eryT0KTGQ-Ejt3s$%On6m8vCv$f|H)cb?C1
z=y==gS%n_wKBvPzSWgZ4e~7G0%}|Th+uBnOVT@|CJ90z|djd~wWXIvi#?);Mrb;L6
z3Iwm*7cN>EOW^_Wt}60g$@@yo2p~A|Bl7N6mG?PF2`?RE^5tgi8%M~ocd>)uCsXFl
zJG32c2WScxIJ3<|AMHR>>IT=XbpAt48?8dbyL$Ho?+I8plGCP}hE?$07P}_|%Z6x!
z`3G))b9>lU*pEM>Gmoy{^m!V255ALb&Wb-v!fEECwe)DvE|-xM4tHo`
zN%YzF%YQ5J;&I>yzynh$gQPpVKxL|exz*Gh?6L;@`$xP&*`8XX
ziR@M>8$oBp?nX}&bl+cqPgdEUthr{)h(n!l9BKCZzC3IUt209V++vh;`fhP2a974n
zDL}_4V(xUwtA@uJ2Crg$7G$jB>2*`kRX5US(v~Fhzhr|3t)gFh
zlACdKubAx-q5>BHL)I_1i3OlRT8AJyWV|H;x(cKOhP3a5I+F_f()>A8{886M`NP5&
zZYo-yF!#L6j^Oa@L?RynHM?xtu1m)0FVZ?4?xST&>pjV
z^X&B@J(%-e)MdH_6T!!X2WycLS2~?#{?$gK-5(qPq?RKkpZ_VYaV%L2!cl>dqe>jp
zw!nHO5p_X~Bq+C2khzSa-Z%KH_HK#E+orhdqERvt@xL-~&S&0>0f)f0BXO$%mtK%c
z4=*ZXEuu-)Bk3*IzyGlUTqJ@Pfe?wsu(4$3OsD6Q=g*U|=p1Jw$RD-bIt6XBn*mBm
z?ln>*4~YX~sQRI8lXO5QwMwb;A=b+$nA>p`s^JlEi}3jb=lSuJ%F5u(CQvhBVux&%
z@~nu%-}is18J!Uk@a=7SI7FJ`t`HwhRTE|fFfI!Csk7mNS?i=1mqc;2VJP{*aOqry
zD15e?F^T|^bOI*F3?9>tH79F0Gt(IrEKTF7?u6>vh(ArrZpUW(jFTTbRr3KS)6~T!
zCLemDWLNLOh7E}8pfS9g8aUIFHdTLt$+vQbnsyGT&dIYgrt0lm?np_biwm!A<5yJW
zRrpYyr!6~D2V(Icj0O5b^b#(U6Vt))aQT|=yN**WnJ-yqGvX~6R~r#UUJLM1@!;#^
znn2>A`c<+*_xm#hv#ohAw$+Y<