From 22e4f966df87ee52b444b82c91ab19c663b82286 Mon Sep 17 00:00:00 2001 From: Eric Date: Fri, 13 Nov 2026 19:23:40 +0100 Subject: [PATCH] Add api backend --- docs/.vitepress/api/waitlist/confirm.get.ts | 30 + docs/.vitepress/api/waitlist/index.post.ts | 63 ++ docs/.vitepress/lib/waitlist/resend.ts | 134 ++++ docs/.vitepress/lib/waitlist/token.ts | 80 +++ .../components/waitlist/WaitlistConfirmed.vue | 26 +- docs/.vitepress/theme/index.ts | 3 + docs/nitro.config.ts | 17 + docs/package.json | 2 + pnpm-lock.yaml | 606 ++++++++++++++++-- 9 files changed, 917 insertions(+), 44 deletions(-) create mode 100644 docs/.vitepress/api/waitlist/confirm.get.ts create mode 100644 docs/.vitepress/api/waitlist/index.post.ts create mode 100644 docs/.vitepress/lib/waitlist/resend.ts create mode 100644 docs/.vitepress/lib/waitlist/token.ts diff --git a/docs/.vitepress/api/waitlist/confirm.get.ts b/docs/.vitepress/api/waitlist/confirm.get.ts new file mode 100644 index 000000000..734e8f265 --- /dev/null +++ b/docs/.vitepress/api/waitlist/confirm.get.ts @@ -0,0 +1,30 @@ +import { defineEventHandler, getQuery, sendRedirect } from 'h3'; +import { waitlistProducts } from '../../theme/components/waitlist/products'; +import { verifyWaitlistToken } from '../../lib/waitlist/token'; +import { getSiteUrl, upsertWaitlistContact } from '../../lib/waitlist/resend'; + +/** + * Step 2 of the double opt-in, opened from the confirmation email. Only here does the + * signup become a Resend contact. Redirects to `/waitlist/confirmed`, which shows the + * result and the follow-up survey. + */ +export default defineEventHandler(async (event) => { + const { token } = getQuery(event); + const confirmedPage = `${getSiteUrl()}/waitlist/confirmed`; + const signup = typeof token === 'string' ? verifyWaitlistToken(token) : null; + + if (!signup || !Object.hasOwn(waitlistProducts, signup.product)) { + return sendRedirect(event, `${confirmedPage}?status=invalid`, 302); + } + + const product = encodeURIComponent(signup.product); + + try { + await upsertWaitlistContact(signup); + } catch (error) { + console.error('[waitlist]', error); + return sendRedirect(event, `${confirmedPage}?product=${product}&status=error`, 302); + } + + return sendRedirect(event, `${confirmedPage}?product=${product}`, 302); +}); diff --git a/docs/.vitepress/api/waitlist/index.post.ts b/docs/.vitepress/api/waitlist/index.post.ts new file mode 100644 index 000000000..3152f20b5 --- /dev/null +++ b/docs/.vitepress/api/waitlist/index.post.ts @@ -0,0 +1,63 @@ +import { createError, defineEventHandler, readBody, setResponseStatus } from 'h3'; +import { checkBotId } from 'botid/server'; +import { waitlistProducts } from '../../theme/components/waitlist/products'; +import { createWaitlistToken } from '../../lib/waitlist/token'; +import { getSiteUrl, sendConfirmationEmail } from '../../lib/waitlist/resend'; + +const EMAIL_PATTERN = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; +const MAX_EMAIL_LENGTH = 254; +const MAX_USE_CASE_LENGTH = 200; + +/** + * Step 1 of the double opt-in: runs the spam checks and emails a signed confirmation link. + * Nothing is stored until `/api/waitlist/confirm` is opened from that email. + */ +export default defineEventHandler(async (event) => { + const body = await readBody | null>(event).catch(() => null); + + // Honeypot: people never see this field. Answer as if it worked so bots don't adapt. + if (body?.website) { + setResponseStatus(event, 202); + return { ok: true }; + } + + const verification = await checkBotId({ + advancedOptions: { headers: event.node.req.headers }, + }); + + if (verification.isBot) { + throw createError({ statusCode: 403, statusMessage: 'Forbidden' }); + } + + const email = typeof body?.email === 'string' ? body.email.trim().toLowerCase() : ''; + const product = typeof body?.product === 'string' ? body.product : ''; + const useCase = + typeof body?.use_case === 'string' ? body.use_case.trim().slice(0, MAX_USE_CASE_LENGTH) : ''; + + if (!email || email.length > MAX_EMAIL_LENGTH || !EMAIL_PATTERN.test(email)) { + throw createError({ statusCode: 400, statusMessage: 'Invalid email address' }); + } + + if (!Object.hasOwn(waitlistProducts, product)) { + throw createError({ statusCode: 400, statusMessage: 'Unknown product' }); + } + + const token = createWaitlistToken({ + email, + product, + use_case: useCase, + signed_up_at: new Date().toISOString(), + }); + + const confirmUrl = `${getSiteUrl()}/api/waitlist/confirm?token=${encodeURIComponent(token)}`; + + try { + await sendConfirmationEmail({ email, product: waitlistProducts[product], confirmUrl }); + } catch (error) { + console.error('[waitlist]', error); + throw createError({ statusCode: 502, statusMessage: 'Could not send confirmation email' }); + } + + setResponseStatus(event, 202); + return { ok: true }; +}); diff --git a/docs/.vitepress/lib/waitlist/resend.ts b/docs/.vitepress/lib/waitlist/resend.ts new file mode 100644 index 000000000..1211655db --- /dev/null +++ b/docs/.vitepress/lib/waitlist/resend.ts @@ -0,0 +1,134 @@ +import { Resend } from 'resend'; +import type { WaitlistProduct } from '../../theme/components/waitlist/products'; +import type { WaitlistTokenPayload } from './token'; + +const DEFAULT_FROM = 'Lucide '; + +let client: Resend | undefined; + +function getResend() { + const apiKey = process.env.RESEND_API_KEY; + + if (!apiKey) { + throw new Error('RESEND_API_KEY is not set'); + } + + client ??= new Resend(apiKey); + + return client; +} + +/** The site the confirmation link and redirects point to. */ +export function getSiteUrl() { + return (process.env.WAITLIST_SITE_URL ?? 'https://lucide.dev').replace(/\/$/, ''); +} + +function escapeHtml(value: string) { + return value + .replace(/&/g, '&') + .replace(//g, '>') + .replace(/"/g, '"'); +} + +export async function sendConfirmationEmail({ + email, + product, + confirmUrl, +}: { + email: string; + product: WaitlistProduct; + confirmUrl: string; +}) { + const name = escapeHtml(product.name); + const url = escapeHtml(confirmUrl); + + const { error } = await getResend().emails.send({ + from: process.env.WAITLIST_FROM ?? DEFAULT_FROM, + to: email, + subject: `Confirm your spot on the ${product.name} waitlist`, + text: [ + `Thanks for your interest in ${product.name}.`, + '', + 'Confirm your email to join the waitlist:', + confirmUrl, + '', + "The link is valid for 7 days. If you didn't sign up, ignore this email and nothing happens.", + '', + 'Lucide', + ].join('\n'), + html: ` + + + + + + +
+

Confirm your spot on the ${name} waitlist

+

Thanks for your interest in ${name}. Click the button to confirm your email and join the waitlist.

+ Confirm my email +

The link is valid for 7 days. If you didn't sign up, ignore this email and nothing happens.

+
+ +`, + }); + + if (error) { + throw new Error(`Resend could not send the confirmation email: ${error.message}`); + } +} + +/** + * Creates the contact, or updates it when the email is already a contact, and adds it to + * the waitlist segment and the product updates topic. + */ +export async function upsertWaitlistContact(signup: WaitlistTokenPayload) { + const resend = getResend(); + const segmentId = process.env.RESEND_WAITLIST_SEGMENT_ID; + const topicId = process.env.RESEND_PRODUCT_UPDATES_TOPIC_ID; + + const properties = { + product: signup.product, + use_case: signup.use_case || null, + source: 'lucide.dev', + signed_up_at: signup.signed_up_at, + }; + + const created = await resend.contacts.create({ + email: signup.email, + unsubscribed: false, + properties, + segments: segmentId ? [{ id: segmentId }] : undefined, + topics: topicId ? [{ id: topicId, subscription: 'opt_in' }] : undefined, + }); + + if (!created.error) return; + + // Most likely the contact already exists, e.g. someone who confirmed twice. + const updated = await resend.contacts.update({ + email: signup.email, + unsubscribed: false, + properties, + }); + + if (updated.error) { + throw new Error( + `Resend could not create or update the contact: ${created.error.message} / ${updated.error.message}`, + ); + } + + // Adding to a segment or topic the contact is already in is harmless, so errors are only logged. + if (segmentId) { + const { error } = await resend.contacts.segments.add({ email: signup.email, segmentId }); + if (error) console.warn('[waitlist] Could not add contact to segment:', error.message); + } + + if (topicId) { + const { error } = await resend.contacts.topics.update({ + email: signup.email, + topics: [{ id: topicId, subscription: 'opt_in' }], + }); + if (error) console.warn('[waitlist] Could not subscribe contact to topic:', error.message); + } +} diff --git a/docs/.vitepress/lib/waitlist/token.ts b/docs/.vitepress/lib/waitlist/token.ts new file mode 100644 index 000000000..b1d7234ad --- /dev/null +++ b/docs/.vitepress/lib/waitlist/token.ts @@ -0,0 +1,80 @@ +import { createHmac, timingSafeEqual } from 'node:crypto'; + +/** How long a confirmation link stays valid. */ +const TOKEN_TTL_MS = 7 * 24 * 60 * 60 * 1000; + +export interface WaitlistTokenPayload { + email: string; + product: string; + use_case: string; + /** When the form was submitted, as an ISO string. */ + signed_up_at: string; + /** Expiry, in milliseconds since the epoch. */ + exp: number; +} + +function getSecret() { + const secret = process.env.WAITLIST_TOKEN_SECRET; + + if (!secret) { + throw new Error('WAITLIST_TOKEN_SECRET is not set'); + } + + return secret; +} + +function sign(data: string) { + return createHmac('sha256', getSecret()).update(data).digest('base64url'); +} + +/** + * Signs the signup into the confirmation link itself, so nothing has to be stored + * until the person confirms. + */ +export function createWaitlistToken(payload: Omit) { + const data = Buffer.from(JSON.stringify({ ...payload, exp: Date.now() + TOKEN_TTL_MS })).toString( + 'base64url', + ); + + return `${data}.${sign(data)}`; +} + +/** + * Returns the payload when the signature matches and the token hasn't expired. + */ +export function verifyWaitlistToken(token: string): WaitlistTokenPayload | null { + const [data, signature, ...rest] = token.split('.'); + + if (!data || !signature || rest.length) return null; + + const expected = Buffer.from(sign(data)); + const received = Buffer.from(signature); + + if (expected.length !== received.length || !timingSafeEqual(expected, received)) { + return null; + } + + try { + const payload = JSON.parse(Buffer.from(data, 'base64url').toString('utf-8')); + + if ( + typeof payload?.email !== 'string' || + typeof payload?.product !== 'string' || + typeof payload?.exp !== 'number' || + payload.exp < Date.now() + ) { + return null; + } + + return { + email: payload.email, + product: payload.product, + use_case: typeof payload.use_case === 'string' ? payload.use_case : '', + signed_up_at: + typeof payload.signed_up_at === 'string' ? payload.signed_up_at : new Date().toISOString(), + exp: payload.exp, + }; + } catch { + return null; + } +} diff --git a/docs/.vitepress/theme/components/waitlist/WaitlistConfirmed.vue b/docs/.vitepress/theme/components/waitlist/WaitlistConfirmed.vue index b4c3a28f6..de7e45d19 100644 --- a/docs/.vitepress/theme/components/waitlist/WaitlistConfirmed.vue +++ b/docs/.vitepress/theme/components/waitlist/WaitlistConfirmed.vue @@ -3,9 +3,10 @@ import { onMounted, ref } from 'vue'; import Card from '../base/Card.vue'; import WaitlistSurvey from './WaitlistSurvey.vue'; import { waitlistProducts, type WaitlistProduct } from './products'; +import { track } from '../../utils/openpanel'; import './waitlist.css'; -const status = ref<'pending' | 'confirmed' | 'invalid'>('pending'); +const status = ref<'pending' | 'confirmed' | 'invalid' | 'error'>('pending'); const product = ref(); // This page is prerendered, so the query string is only available after hydration. @@ -17,7 +18,15 @@ onMounted(() => { productId && Object.hasOwn(waitlistProducts, productId) ? waitlistProducts[productId] : undefined; - status.value = product.value && !params.has('status') ? 'confirmed' : 'invalid'; + if (params.get('status') === 'error') { + status.value = 'error'; + } else { + status.value = product.value && !params.has('status') ? 'confirmed' : 'invalid'; + } + + if (status.value === 'confirmed' && product.value) { + track('waitlist_confirmed', { product: product.value.id }); + } }); @@ -41,6 +50,19 @@ onMounted(() => { :product="product" /> + +
+

Something went wrong

+

+ We couldn't confirm your email just now. Click the link in the email again in a few + minutes. +

+
+
+ = { extends: DefaultTheme, @@ -42,6 +43,8 @@ const theme: Partial = { if (!import.meta.env.SSR) { trackUnderlineDirection(); + // Attaches the invisible bot check to the waitlist form's fetch, verified in /api/waitlist. + initBotId({ protect: [{ path: '/api/waitlist', method: 'POST' }] }); } }, }; diff --git a/docs/nitro.config.ts b/docs/nitro.config.ts index de319f4a6..3512a61f0 100644 --- a/docs/nitro.config.ts +++ b/docs/nitro.config.ts @@ -1,3 +1,7 @@ +// Vercel BotID loads its challenge through these first-party paths (same as `botid/nuxt`). +const BOTID_BASE = '/149e9513-01fa-4fb0-aad4-566afd725d1b/2d206a39-8ed7-437e-a3be-862e0f06eea3'; +const BOTID_SERVER = 'https://api.vercel.com/bot-protection'; + export default defineNitroConfig({ compatibilityDate: '2026-02-26', preset: 'vercel', @@ -6,6 +10,19 @@ export default defineNitroConfig({ routeRules: { '/api/**': { cors: false }, }, + vercel: { + config: { + routes: [ + { src: `^${BOTID_BASE}/a-4-a/c\\.js$`, dest: `${BOTID_SERVER}/v1/challenge` }, + // Nitro's route type doesn't allow `headers` next to `dest`, Vercel's routing schema does. + { + src: `^${BOTID_BASE}/(.*)$`, + dest: `${BOTID_SERVER}/v1/proxy/$1`, + headers: { 'X-Frame-Options': 'SAMEORIGIN' }, + } as { src: string; dest: string }, + ], + }, + }, esbuild: { options: { jsxFactory: 'React.createElement', diff --git a/docs/package.json b/docs/package.json index 38cebf0f1..8cc652fdf 100644 --- a/docs/package.json +++ b/docs/package.json @@ -67,6 +67,7 @@ "@vueuse/components": "^14.4.0", "@vueuse/core": "^14.4.0", "@vueuse/integrations": "^14.4.0", + "botid": "^1.5.13", "element-to-path": "^1.2.1", "fuse.js": "^7.5.0", "jszip": "^3.10.1", @@ -76,6 +77,7 @@ "motion-v": "2.11.0", "react": "19.3.1", "react-dom": "19.3.1", + "resend": "^6.38.0", "sandpack-vue3": "3.1.12", "vue": "^3.5.44", "vue-sonner": "^2.0.9" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8d5df073b..74fdc94fe 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -179,6 +179,9 @@ importers: '@vueuse/integrations': specifier: ^14.4.0 version: 14.4.0(focus-trap@7.8.0)(fuse.js@7.5.0)(vue@3.5.44(typescript@6.0.3)) + botid: + specifier: ^1.5.13 + version: 1.5.13(next@16.4.1(@babel/core@7.29.7(supports-color@10.2.2))(@types/node@26.4.1)(react-dom@19.3.1(react@19.3.1))(react@19.3.1)(sass@1.107.0))(react@19.3.1) element-to-path: specifier: ^1.2.1 version: 1.2.1 @@ -206,6 +209,9 @@ importers: react-dom: specifier: 19.3.1 version: 19.3.1(react@19.3.1) + resend: + specifier: ^6.38.0 + version: 6.38.0 sandpack-vue3: specifier: 3.1.12 version: 3.1.12(vue@3.5.44(typescript@6.0.3)) @@ -214,7 +220,7 @@ importers: version: 3.5.44(typescript@6.0.3) vue-sonner: specifier: ^2.0.9 - version: 2.0.9 + version: 2.0.9(@nuxt/kit@4.6.3(@nuxt/schema@4.6.3)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.5)(mlly@1.8.2)(oxc-parser@0.150.0)(rolldown@1.2.16)(unplugin@3.7.0(esbuild@0.28.2)(rolldown@1.2.16)(rollup@4.65.1)(vite@8.3.5(@types/node@26.4.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(sass-embedded@1.107.0)(sass@1.107.0)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.1))))(@nuxt/schema@4.6.3)(nuxt@4.6.3(60a2a7448ca37a273c0ea8373995cc0e)) devDependencies: '@docsearch/js': specifier: 3.8.2 @@ -526,23 +532,23 @@ importers: version: link:../../../packages/solid '@solidjs/meta': specifier: 1.0.0-next.2 - version: 1.0.0-next.2(@solidjs/web@2.0.0-rc.20(solid-js@2.0.0-rc.20))(solid-js@2.0.0-rc.20) + version: 1.0.0-next.2(@solidjs/web@2.0.0-rc.21(solid-js@2.0.0-rc.21))(solid-js@2.0.0-rc.21) '@solidjs/router': specifier: 2.0.0-next.34 - version: 2.0.0-next.34(@solidjs/web@2.0.0-rc.20(solid-js@2.0.0-rc.20))(filesystem-routing@0.4.0(supports-color@10.2.2)(vite@8.3.5(@types/node@26.4.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(sass-embedded@1.107.0)(sass@1.107.0)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.1)))(solid-js@2.0.0-rc.20) + version: 2.0.0-next.34(@solidjs/web@2.0.0-rc.21(solid-js@2.0.0-rc.21))(filesystem-routing@0.4.0(supports-color@10.2.2)(vite@8.3.5(@types/node@26.4.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(sass-embedded@1.107.0)(sass@1.107.0)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.1)))(solid-js@2.0.0-rc.21) '@solidjs/web': specifier: next - version: 2.0.0-rc.20(solid-js@2.0.0-rc.20) + version: 2.0.0-rc.21(solid-js@2.0.0-rc.21) solid-js: specifier: next - version: 2.0.0-rc.20 + version: 2.0.0-rc.21 devDependencies: '@solidjs/testing-library': specifier: 1.0.0-rc.2 - version: 1.0.0-rc.2(@solidjs/web@2.0.0-rc.20(solid-js@2.0.0-rc.20))(solid-js@2.0.0-rc.20) + version: 1.0.0-rc.2(@solidjs/web@2.0.0-rc.21(solid-js@2.0.0-rc.21))(solid-js@2.0.0-rc.21) '@solidjs/vite-plugin': specifier: 3.0.0-next.47 - version: 3.0.0-next.47(@solidjs/web@2.0.0-rc.20(solid-js@2.0.0-rc.20))(@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.2)(vitest@5.0.5))(solid-js@2.0.0-rc.20)(supports-color@10.2.2)(vite@8.3.5(@types/node@26.4.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(sass-embedded@1.107.0)(sass@1.107.0)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.1)) + version: 3.0.0-next.47(@solidjs/web@2.0.0-rc.21(solid-js@2.0.0-rc.21))(@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.2)(vitest@5.0.5))(solid-js@2.0.0-rc.21)(supports-color@10.2.2)(vite@8.3.5(@types/node@26.4.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(sass-embedded@1.107.0)(sass@1.107.0)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.1)) '@vitest/browser-playwright': specifier: 5.0.5 version: 5.0.5(playwright@1.64.1)(vite@8.3.5(@types/node@26.4.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(sass-embedded@1.107.0)(sass@1.107.0)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.1))(vitest@5.0.5) @@ -1306,19 +1312,19 @@ importers: version: 7.1.0(@babel/core@8.0.10)(@types/babel__core@7.20.5)(rollup@4.65.1)(supports-color@10.2.2) '@solidjs/testing-library': specifier: next - version: 1.0.0-rc.2(@solidjs/web@2.0.0-rc.20(solid-js@2.0.0-rc.20))(solid-js@2.0.0-rc.20) + version: 1.0.0-rc.2(@solidjs/web@2.0.0-rc.21(solid-js@2.0.0-rc.21))(solid-js@2.0.0-rc.21) '@solidjs/vite-plugin': specifier: next - version: 3.0.0-next.35(@solidjs/web@2.0.0-rc.20(solid-js@2.0.0-rc.20))(@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.2)(vitest@5.0.5))(solid-js@2.0.0-rc.20)(supports-color@10.2.2)(vite@8.3.5(@types/node@26.4.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(sass-embedded@1.107.0)(sass@1.107.0)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.1)) + version: 3.0.0-next.35(@solidjs/web@2.0.0-rc.21(solid-js@2.0.0-rc.21))(@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.2)(vitest@5.0.5))(solid-js@2.0.0-rc.21)(supports-color@10.2.2)(vite@8.3.5(@types/node@26.4.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(sass-embedded@1.107.0)(sass@1.107.0)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.1)) '@solidjs/web': specifier: next - version: 2.0.0-rc.20(solid-js@2.0.0-rc.20) + version: 2.0.0-rc.21(solid-js@2.0.0-rc.21) '@testing-library/jest-dom': specifier: ^7.0.1 version: 7.0.1(@testing-library/dom@10.4.2)(vitest@5.0.5) babel-preset-solid: specifier: next - version: 2.0.0-rc.2(@babel/core@8.0.10)(solid-js@2.0.0-rc.20) + version: 2.0.0-rc.2(@babel/core@8.0.10)(solid-js@2.0.0-rc.21) esbuild: specifier: ^0.28.2 version: 0.28.2 @@ -1333,7 +1339,7 @@ importers: version: 6.5.1(rollup@4.65.1)(typescript@6.0.3) solid-js: specifier: next - version: 2.0.0-rc.20 + version: 2.0.0-rc.21 typescript: specifier: ^6.0.3 version: 6.0.3 @@ -5831,8 +5837,8 @@ packages: filesystem-routing: optional: true - '@solidjs/signals@2.0.0-rc.20': - resolution: {integrity: sha512-BIL5dKm0dAtPGsCEuLSNw60spDbmYG5QFK+aHUxPIgPLweA8IeJKd62DiqqqU/jqX0x39ty31GoP1n+ZINkrcg==} + '@solidjs/signals@2.0.0-rc.21': + resolution: {integrity: sha512-F1TUMO/nd1XC//+tcaWxibOOgXBHQGmNQnAeiDnpLh+1smnlwIgKF6pc20evlyfQwqf0gP6rH4sNEqCPBNcpgg==} engines: {node: '>=22.12.0'} '@solidjs/start@2.0.5': @@ -5892,15 +5898,18 @@ packages: '@testing-library/jest-dom': optional: true - '@solidjs/web@2.0.0-rc.20': - resolution: {integrity: sha512-ACGUZ1XBNxiHnWW274na+1JZfuIhiS/BN5XM72wVKNYSopR/NyjVPR4O/nvshtbYlEk1lKJ9d1uBaXDaz6ddYg==} + '@solidjs/web@2.0.0-rc.21': + resolution: {integrity: sha512-1E9dvR3/+5fQTI3oxxACBX2Rg4rezXgrljerhWDHR5uQZ04p5Z8qXROI7dIDJKyANtsnLKYbM2OyI/p/FmjGUA==} engines: {node: '>=22.12.0'} peerDependencies: - solid-js: ^2.0.0-rc.20 + solid-js: ^2.0.0-rc.21 '@speed-highlight/core@1.2.24': resolution: {integrity: sha512-qeW2e1l78afw8VhRPfPQ1Gjj+KU5XFQ/OFV5ti6eTa9bruO7mJyZtA4vw0ofqmA3tKCkROE9xLk3VZoeRc98nw==} + '@stablelib/base64@1.0.1': + resolution: {integrity: sha512-1bnPQqSxSuc3Ii6MhBysoWCg58j97aUjuCSZrGSmDxNqtytIi0k8utUenAwTZN4V5mXXYGsVUI9zeBqy+jBOSQ==} + '@standard-schema/spec@1.1.0': resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} @@ -7554,6 +7563,17 @@ packages: resolution: {integrity: sha512-DkVaaQHymRhpYEYo9x1oo7Q7B0Y6KJUsjm3c9eTyFDby4MHLBTwZ6ZDWBel5zrYxj1WsZgC5oLpiz+93MluXeA==} engines: {node: '>=20.19.0'} + botid@1.5.13: + resolution: {integrity: sha512-bd1oGgunQXOXQOctgLm/XuJKji5E8EUJdHYQAHJhJPgFeBo/mLQMeEsokO9nbrjjOZsSoKZfGHRfM/VAux44GA==} + peerDependencies: + next: '*' + react: ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + next: + optional: true + react: + optional: true + brace-expansion@1.1.21: resolution: {integrity: sha512-9zeA+KLZNNzglF2TPKRQEDyx6Yby7daAkuy8MiPzpXPsYDWi/DRM8jmwUDxokQjYqBpv5DgPiwD4h4ZZSy1Ujw==} @@ -8736,6 +8756,9 @@ packages: resolution: {integrity: sha512-99jPl8JkCSCa4VlboNU1XuL98ijm74Pm9CGo6H4BoMVoVh1uhguQcvwLgXDT8Vkl2qj/UEQ0J9gD8beHjTFk1w==} hasBin: true + fast-sha256@1.3.0: + resolution: {integrity: sha512-n11RGP/lrWEFI/bWdygLxhI+pVeo1ZYIVwvvPkW7azl/rOy+F3HYRZ2K5zeE9mmkhQppyv9sQFx0JM9UabnpPQ==} + fast-string-truncated-width@3.0.3: resolution: {integrity: sha512-0jjjIEL6+0jag3l2XWWizO64/aZVtpiGE3t0Zgqxv0DPuxiMjvB3M24fCyhZUO4KomJQPj3LTSUnDP3GpdwC0g==} @@ -10988,6 +11011,9 @@ packages: resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} engines: {node: '>= 0.4'} + postal-mime@2.7.6: + resolution: {integrity: sha512-UUlyE2KlxmvwMGq060onF/VWU3zD6dVW31FwokQ5v26jWd35fbs2MoTFzh+jXnPwAyV2MULMKXcBInGOl5TO6Q==} + postcss-calc@11.2.3: resolution: {integrity: sha512-pFW3MR2a4W7uHcSGUiyQGGXZWHon83ljbNwnUJ1mRKublWQbv+3o9NiqhlV4TJfNby+U+zLY2OgiywzhA5eFqw==} engines: {node: ^22.22.3 || ^24.15 || >=26.0} @@ -11331,6 +11357,15 @@ packages: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} + resend@6.38.0: + resolution: {integrity: sha512-+t1bz6unmYcyYrLqrZtkn73ODZhUgKJTViuRf+a4ewgo3mT/Bpg64WkBtAVQlXQcmUkeuorO1eLAd2+1h4jgNQ==} + engines: {node: '>=20'} + peerDependencies: + '@react-email/render': '*' + peerDependenciesMeta: + '@react-email/render': + optional: true + resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} @@ -11990,8 +12025,8 @@ packages: solid-js@1.9.18: resolution: {integrity: sha512-CHGO5YFk6Y9m/1YSxVtKnXfrW7JD3Tmof8HmR4z6TmCPsS8efo8LnzIR8CQh3cUvffqYm6DWyBFfk8dQw1CNQQ==} - solid-js@2.0.0-rc.20: - resolution: {integrity: sha512-FxaEI7LHupehFoR9j2CfJAGCoRgiKgeNlzii4szUS6lnD8RkpdtvX1k6WFG71vl5bskXRRsmEQVAXsbIemQOuw==} + solid-js@2.0.0-rc.21: + resolution: {integrity: sha512-0Z8/qiJKnK6A2g8QspGthwxR0W8WauMOD2/LQtNmxBT8gpZkKaXmo/fdek/+cB+84w4HYejWJixSAn4fcAI0Uw==} engines: {node: '>=22.12.0'} solid-refresh@0.6.3: @@ -12097,6 +12132,9 @@ packages: standard-as-callback@2.1.0: resolution: {integrity: sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==} + standardwebhooks@1.1.1: + resolution: {integrity: sha512-bCbX9ZEyFkWPsRz7Bl3NuQUJohmwGSev/yhr7vhaGPlc4AfIrspIRa6cPTBuI1ItmrTDJ4d/S2hCsfe4+vQGnQ==} + static-browser-server@1.0.3: resolution: {integrity: sha512-ZUyfgGDdFRbZGGJQ1YhiM930Yczz5VlbJObrQLlk24+qNHVQx4OlLcYswEUo3bIyNAbQUIUR9Yr5/Hqjzqb4zA==} @@ -16726,6 +16764,77 @@ snapshots: pkg-types: 2.4.0 semver: 7.8.5 + '@nuxt/devtools@3.4.4(@nuxt/schema@4.6.3)(@vercel/blob@2.8.0)(confbox@0.3.1)(db0@0.3.4)(dotenv@17.4.2)(giget@3.3.1)(ioredis@5.11.1(supports-color@10.2.2))(jiti@2.7.0)(magic-string@1.4.5)(mlly@1.8.2)(oxc-parser@0.150.0)(rolldown@1.2.16)(unplugin@3.7.0(esbuild@0.28.2)(rolldown@1.2.16)(rollup@4.65.1)(vite@8.3.5(@types/node@26.4.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(sass-embedded@1.107.0)(sass@1.107.0)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.1)))(vite@8.3.5(@types/node@26.4.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(sass-embedded@1.107.0)(sass@1.107.0)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.1))(vue@3.5.44(typescript@6.0.3))': + dependencies: + '@nuxt/devtools-kit': 3.4.4(@nuxt/schema@4.6.3)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.5)(mlly@1.8.2)(oxc-parser@0.150.0)(rolldown@1.2.16)(unplugin@3.7.0(esbuild@0.28.2)(rolldown@1.2.16)(rollup@4.65.1)(vite@8.3.5(@types/node@26.4.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(sass-embedded@1.107.0)(sass@1.107.0)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.1)))(vite@8.3.5(@types/node@26.4.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(sass-embedded@1.107.0)(sass@1.107.0)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.1)) + '@nuxt/devtools-wizard': 3.4.4 + '@nuxt/kit': 4.6.3(@nuxt/schema@4.6.3)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.5)(mlly@1.8.2)(oxc-parser@0.150.0)(rolldown@1.2.16)(unplugin@3.7.0(esbuild@0.28.2)(rolldown@1.2.16)(rollup@4.65.1)(vite@8.3.5(@types/node@26.4.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(sass-embedded@1.107.0)(sass@1.107.0)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.1))) + '@vue/devtools-core': 8.2.1(vue@3.5.44(typescript@6.0.3)) + '@vue/devtools-kit': 8.2.1 + birpc: 4.2.0 + consola: 3.4.2 + destr: 2.0.5 + error-stack-parser-es: 2.0.1 + execa: 8.0.1 + fast-npm-meta: 2.2.0 + get-port-please: 3.2.0 + hookable: 6.1.2 + image-meta: 0.3.0 + is-installed-globally: 1.0.1 + launch-editor: 2.14.2 + local-pkg: 1.2.1 + magicast: 0.5.5 + ohash: 2.0.12 + package-manager-detector: 1.9.0 + pathe: 2.0.3 + perfect-debounce: 2.1.0 + pkg-types: 2.4.0 + semver: 7.8.5 + sirv: 3.0.2 + structured-clone-es: 2.0.1 + tinyexec: 1.3.1 + tinyglobby: 0.2.17 + unstorage: 1.17.6(@vercel/blob@2.8.0)(db0@0.3.4)(ioredis@5.11.1(supports-color@10.2.2)) + vite: 8.3.5(@types/node@26.4.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(sass-embedded@1.107.0)(sass@1.107.0)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.1) + vite-plugin-inspect: 11.4.1(@nuxt/kit@4.6.3(@nuxt/schema@4.6.3)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.5)(mlly@1.8.2)(oxc-parser@0.150.0)(rolldown@1.2.16)(unplugin@3.7.0(esbuild@0.28.2)(rolldown@1.2.16)(rollup@4.65.1)(vite@8.3.5(@types/node@26.4.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(sass-embedded@1.107.0)(sass@1.107.0)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.1))))(vite@8.3.5(@types/node@26.4.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(sass-embedded@1.107.0)(sass@1.107.0)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.1)) + vite-plugin-vue-tracer: 1.5.0(vite@8.3.5(@types/node@26.4.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(sass-embedded@1.107.0)(sass@1.107.0)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.1))(vue@3.5.44(typescript@6.0.3)) + which: 6.0.1 + ws: 8.22.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@nuxt/schema' + - '@planetscale/database' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bufferutil + - confbox + - db0 + - dotenv + - giget + - idb-keyval + - ioredis + - jiti + - magic-string + - mlly + - oxc-parser + - rolldown + - unplugin + - uploadthing + - utf-8-validate + - vue + optional: true + '@nuxt/devtools@3.4.4(@nuxt/schema@4.6.3)(@vercel/blob@2.8.0)(confbox@0.3.1)(db0@0.4.1)(dotenv@17.4.2)(giget@3.3.1)(ioredis@5.11.1(supports-color@10.2.2))(jiti@2.7.0)(magic-string@1.4.5)(mlly@1.8.2)(oxc-parser@0.150.0)(rolldown@1.2.16)(unplugin@3.7.0(esbuild@0.28.2)(rolldown@1.2.16)(rollup@4.65.1)(vite@8.3.5(@types/node@26.4.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(sass-embedded@1.107.0)(sass@1.107.0)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.1)))(vite@8.3.5(@types/node@26.4.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(sass-embedded@1.107.0)(sass@1.107.0)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.1))(vue@3.5.44(typescript@6.0.3))': dependencies: '@nuxt/devtools-kit': 3.4.4(@nuxt/schema@4.6.3)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.5)(mlly@1.8.2)(oxc-parser@0.150.0)(rolldown@1.2.16)(unplugin@3.7.0(esbuild@0.28.2)(rolldown@1.2.16)(rollup@4.65.1)(vite@8.3.5(@types/node@26.4.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(sass-embedded@1.107.0)(sass@1.107.0)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.1)))(vite@8.3.5(@types/node@26.4.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(sass-embedded@1.107.0)(sass@1.107.0)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.1)) @@ -16829,6 +16938,101 @@ snapshots: - magic-string - unplugin + '@nuxt/nitro-server@4.6.3(060109649bb46c9e9ea558f3c0a20c21)': + dependencies: + '@nuxt/kit': 4.6.3(@nuxt/schema@4.6.3)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.5)(mlly@1.8.2)(oxc-parser@0.150.0)(rolldown@1.2.16)(unplugin@3.7.0(esbuild@0.28.2)(rolldown@1.2.16)(rollup@4.65.1)(vite@8.3.5(@types/node@26.4.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(sass-embedded@1.107.0)(sass@1.107.0)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.1))) + '@unhead/vue': 3.4.3(@oxc-project/types@0.156.0)(esbuild@0.28.2)(lightningcss@1.33.0)(oxc-parser@0.150.0)(rolldown@1.2.16)(rollup@4.65.1)(vite@8.3.5(@types/node@26.4.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(sass-embedded@1.107.0)(sass@1.107.0)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.1))(vue@3.5.44(typescript@6.0.3)) + consola: 3.4.2 + defu: 6.1.7 + destr: 2.0.5 + devalue: 6.0.3 + errx: 0.2.2 + escape-string-regexp: 5.0.0 + exsolve: 1.2.0 + flru: 1.0.2 + h3: 1.15.11 + impound: 1.2.1(esbuild@0.28.2)(rolldown@1.2.16)(rollup@4.65.1)(vite@8.3.5(@types/node@26.4.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(sass-embedded@1.107.0)(sass@1.107.0)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.1)) + klona: 2.0.6 + mocked-exports: 0.1.1 + my-bad: 0.2.11(vite@8.3.5(@types/node@26.4.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(sass-embedded@1.107.0)(sass@1.107.0)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.1)) + nitropack: 2.13.5(@parcel/watcher@2.6.0)(@vercel/blob@2.8.0)(encoding@0.1.13)(oxc-parser@0.150.0)(rolldown@1.2.16)(srvx@1.0.5)(supports-color@10.2.2)(vite@8.3.5(@types/node@26.4.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(sass-embedded@1.107.0)(sass@1.107.0)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.1))(xml2js@0.6.2) + nostics: 1.3.0 + nuxt: 4.6.3(60a2a7448ca37a273c0ea8373995cc0e) + ohash: 2.0.12 + pathe: 2.0.3 + radix3: 1.1.2 + rou3: 0.9.2 + std-env: 4.3.0 + ufo: 1.6.4 + unctx: 3.0.1(magic-string@1.4.5)(oxc-parser@0.150.0)(rolldown@1.2.16)(unplugin@3.7.0(esbuild@0.28.2)(rolldown@1.2.16)(rollup@4.65.1)(vite@8.3.5(@types/node@26.4.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(sass-embedded@1.107.0)(sass@1.107.0)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.1))) + unrouting: 0.3.1 + unstorage: 1.17.6(@vercel/blob@2.8.0)(db0@0.3.4)(ioredis@5.11.1(supports-color@10.2.2)) + vue: 3.5.44(typescript@6.0.3) + vue-bundle-renderer: 2.4.0 + vue-devtools-stub: 0.1.0 + optionalDependencies: + '@babel/plugin-syntax-typescript': 8.0.3(@babel/core@7.29.7(supports-color@10.2.2)) + '@rollup/plugin-babel': 7.1.0(@babel/core@7.29.7(supports-color@10.2.2))(@types/babel__core@7.20.5)(rollup@4.65.1)(supports-color@10.2.2) + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@electric-sql/pglite' + - '@farmfe/core' + - '@libsql/client' + - '@netlify/blobs' + - '@nuxt/schema' + - '@oxc-project/types' + - '@parcel/watcher' + - '@planetscale/database' + - '@rsbuild/core' + - '@rspack/core' + - '@unhead/cli' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - '@vitejs/devtools-kit' + - aws4fetch + - bare-abort-controller + - bare-buffer + - better-sqlite3 + - bun-types-no-globals + - confbox + - db0 + - dotenv + - drizzle-orm + - encoding + - esbuild + - giget + - idb-keyval + - ioredis + - jiti + - lightningcss + - magic-string + - mlly + - mysql2 + - oxc-parser + - react-native-b4a + - rolldown + - rollup + - sqlite3 + - srvx + - supports-color + - typescript + - unloader + - unplugin + - uploadthing + - vite + - webpack + - xml2js + optional: true + '@nuxt/nitro-server@4.6.3(980a5de518d2cbd79c0b54a8c8959b6d)': dependencies: '@nuxt/kit': 4.6.3(@nuxt/schema@4.6.3)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.5)(mlly@1.8.2)(oxc-parser@0.150.0)(rolldown@1.2.16)(unplugin@3.7.0(esbuild@0.28.2)(rolldown@1.2.16)(rollup@4.65.1)(vite@8.3.5(@types/node@26.4.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(sass-embedded@1.107.0)(sass@1.107.0)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.1))) @@ -16940,6 +17144,81 @@ snapshots: rc9: 3.1.0 std-env: 4.3.0 + '@nuxt/vite-builder@4.6.3(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@nuxt/schema@4.6.3)(@types/node@26.4.1)(confbox@0.3.1)(dotenv@17.4.2)(esbuild@0.28.2)(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2))(giget@3.3.1)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(magic-string@1.4.5)(meow@14.1.0)(mlly@1.8.2)(nuxt@4.6.3(60a2a7448ca37a273c0ea8373995cc0e))(optionator@0.9.4)(oxc-parser@0.150.0)(rolldown@1.2.16)(rollup-plugin-visualizer@7.1.1(rolldown@1.2.16)(rollup@4.65.1))(rollup@4.65.1)(sass-embedded@1.107.0)(sass@1.107.0)(stylus@0.56.0(supports-color@10.2.2))(supports-color@10.2.2)(terser@5.51.2)(typescript@6.0.3)(vue-tsc@3.3.11(typescript@6.0.3))(vue@3.5.44(typescript@6.0.3))(yaml@2.9.1)': + dependencies: + '@nuxt/kit': 4.6.3(@nuxt/schema@4.6.3)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.5)(mlly@1.8.2)(oxc-parser@0.150.0)(rolldown@1.2.16)(unplugin@3.7.0(esbuild@0.28.2)(rolldown@1.2.16)(rollup@4.65.1)(vite@8.3.5(@types/node@26.4.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(sass-embedded@1.107.0)(sass@1.107.0)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.1))) + '@vitejs/plugin-vue': 6.0.10(vite@8.3.5(@types/node@26.4.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(sass-embedded@1.107.0)(sass@1.107.0)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.1))(vue@3.5.44(typescript@6.0.3)) + '@vitejs/plugin-vue-jsx': 5.1.6(supports-color@10.2.2)(vite@8.3.5(@types/node@26.4.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(sass-embedded@1.107.0)(sass@1.107.0)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.1))(vue@3.5.44(typescript@6.0.3)) + autoprefixer: 10.6.1(postcss@8.5.32) + clickable-path: 0.1.1 + consola: 3.4.2 + cssnano: 9.9.0(postcss@8.5.32) + defu: 6.1.7 + escape-string-regexp: 5.0.0 + exsolve: 1.2.0 + generic-names: 4.0.0 + get-port-please: 3.2.0 + js-tokens: 10.0.0 + knitwork: 1.3.0 + mocked-exports: 0.1.1 + my-bad: 0.2.11(vite@8.3.5(@types/node@26.4.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(sass-embedded@1.107.0)(sass@1.107.0)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.1)) + nuxt: 4.6.3(60a2a7448ca37a273c0ea8373995cc0e) + pathe: 2.0.3 + pkg-types: 2.4.0 + postcss: 8.5.32 + rolldown-string: 0.3.1(rolldown@1.2.16) + seroval: 1.7.6 + std-env: 4.3.0 + ufo: 1.6.4 + unenv: 2.0.0-rc.24 + unplugin: 3.7.0(esbuild@0.28.2)(rolldown@1.2.16)(rollup@4.65.1)(vite@8.3.5(@types/node@26.4.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(sass-embedded@1.107.0)(sass@1.107.0)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.1)) + vite: 8.3.5(@types/node@26.4.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(sass-embedded@1.107.0)(sass@1.107.0)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.1) + vite-node: 6.0.0(@types/node@26.4.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(sass-embedded@1.107.0)(sass@1.107.0)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.1) + vite-plugin-checker: 0.14.5(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2))(meow@14.1.0)(optionator@0.9.4)(typescript@6.0.3)(vite@8.3.5(@types/node@26.4.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(sass-embedded@1.107.0)(sass@1.107.0)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.1))(vue-tsc@3.3.11(typescript@6.0.3)) + vue: 3.5.44(typescript@6.0.3) + vue-bundle-renderer: 2.4.0 + optionalDependencies: + '@babel/plugin-syntax-jsx': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2)) + rolldown: 1.2.16 + rollup-plugin-visualizer: 7.1.1(rolldown@1.2.16)(rollup@4.65.1) + transitivePeerDependencies: + - '@biomejs/biome' + - '@farmfe/core' + - '@nuxt/schema' + - '@rsbuild/core' + - '@rspack/core' + - '@types/node' + - '@vitejs/devtools' + - bun-types-no-globals + - confbox + - dotenv + - esbuild + - eslint + - giget + - jiti + - less + - magic-string + - meow + - mlly + - optionator + - oxc-parser + - oxlint + - rollup + - sass + - sass-embedded + - stylelint + - stylus + - sugarss + - supports-color + - terser + - tsx + - typescript + - unloader + - vue-tsc + - webpack + - yaml + optional: true + '@nuxt/vite-builder@4.6.3(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@nuxt/schema@4.6.3)(@types/node@26.4.1)(confbox@0.3.1)(dotenv@17.4.2)(esbuild@0.28.2)(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2))(giget@3.3.1)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(magic-string@1.4.5)(meow@14.1.0)(mlly@1.8.2)(nuxt@4.6.3(678d193107555a89b137fff1c862652d))(optionator@0.9.4)(oxc-parser@0.150.0)(rolldown@1.2.16)(rollup-plugin-visualizer@7.1.1(rolldown@1.2.16)(rollup@4.65.1))(rollup@4.65.1)(sass-embedded@1.107.0)(sass@1.107.0)(stylus@0.56.0(supports-color@10.2.2))(supports-color@10.2.2)(terser@5.51.2)(typescript@6.0.3)(vue-tsc@3.3.11(typescript@6.0.3))(vue@3.5.44(typescript@6.0.3))(yaml@2.9.1)': dependencies: '@nuxt/kit': 4.6.3(@nuxt/schema@4.6.3)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.5)(mlly@1.8.2)(oxc-parser@0.150.0)(rolldown@1.2.16)(unplugin@3.7.0(esbuild@0.28.2)(rolldown@1.2.16)(rollup@4.65.1)(vite@8.3.5(@types/node@26.4.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(sass-embedded@1.107.0)(sass@1.107.0)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.1))) @@ -17014,6 +17293,34 @@ snapshots: - webpack - yaml + '@nuxt/vite-server@4.6.3(@nuxt/schema@4.6.3)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.5)(mlly@1.8.2)(nuxt@4.6.3(60a2a7448ca37a273c0ea8373995cc0e))(oxc-parser@0.150.0)(rolldown@1.2.16)(unplugin@3.7.0(esbuild@0.28.2)(rolldown@1.2.16)(rollup@4.65.1)(vite@8.3.5(@types/node@26.4.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(sass-embedded@1.107.0)(sass@1.107.0)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.1)))(vite@8.3.5(@types/node@26.4.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(sass-embedded@1.107.0)(sass@1.107.0)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.1))': + dependencies: + '@nuxt/kit': 4.6.3(@nuxt/schema@4.6.3)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.5)(mlly@1.8.2)(oxc-parser@0.150.0)(rolldown@1.2.16)(unplugin@3.7.0(esbuild@0.28.2)(rolldown@1.2.16)(rollup@4.65.1)(vite@8.3.5(@types/node@26.4.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(sass-embedded@1.107.0)(sass@1.107.0)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.1))) + clickable-path: 0.1.1 + defu: 6.1.7 + exsolve: 1.2.0 + mocked-exports: 0.1.1 + my-bad: 0.2.11(vite@8.3.5(@types/node@26.4.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(sass-embedded@1.107.0)(sass@1.107.0)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.1)) + nuxt: 4.6.3(60a2a7448ca37a273c0ea8373995cc0e) + pathe: 2.0.3 + rou3: 0.9.2 + srvx: 1.0.5 + ufo: 1.6.4 + ultrahtml: 1.7.0 + vite: 8.3.5(@types/node@26.4.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(sass-embedded@1.107.0)(sass@1.107.0)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.1) + transitivePeerDependencies: + - '@nuxt/schema' + - confbox + - dotenv + - giget + - jiti + - magic-string + - mlly + - oxc-parser + - rolldown + - unplugin + optional: true + '@nuxt/vite-server@4.6.3(@nuxt/schema@4.6.3)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.5)(mlly@1.8.2)(nuxt@4.6.3(678d193107555a89b137fff1c862652d))(oxc-parser@0.150.0)(rolldown@1.2.16)(unplugin@3.7.0(esbuild@0.28.2)(rolldown@1.2.16)(rollup@4.65.1)(vite@8.3.5(@types/node@26.4.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(sass-embedded@1.107.0)(sass@1.107.0)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.1)))(vite@8.3.5(@types/node@26.4.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(sass-embedded@1.107.0)(sass@1.107.0)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.1))': dependencies: '@nuxt/kit': 4.6.3(@nuxt/schema@4.6.3)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.5)(mlly@1.8.2)(oxc-parser@0.150.0)(rolldown@1.2.16)(unplugin@3.7.0(esbuild@0.28.2)(rolldown@1.2.16)(rollup@4.65.1)(vite@8.3.5(@types/node@26.4.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(sass-embedded@1.107.0)(sass@1.107.0)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.1))) @@ -18101,23 +18408,23 @@ snapshots: dependencies: solid-js: 1.9.18 - '@solidjs/meta@1.0.0-next.2(@solidjs/web@2.0.0-rc.20(solid-js@2.0.0-rc.20))(solid-js@2.0.0-rc.20)': + '@solidjs/meta@1.0.0-next.2(@solidjs/web@2.0.0-rc.21(solid-js@2.0.0-rc.21))(solid-js@2.0.0-rc.21)': dependencies: - '@solidjs/web': 2.0.0-rc.20(solid-js@2.0.0-rc.20) - solid-js: 2.0.0-rc.20 + '@solidjs/web': 2.0.0-rc.21(solid-js@2.0.0-rc.21) + solid-js: 2.0.0-rc.21 '@solidjs/router@1.0.0(solid-js@1.9.18)': dependencies: solid-js: 1.9.18 - '@solidjs/router@2.0.0-next.34(@solidjs/web@2.0.0-rc.20(solid-js@2.0.0-rc.20))(filesystem-routing@0.4.0(supports-color@10.2.2)(vite@8.3.5(@types/node@26.4.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(sass-embedded@1.107.0)(sass@1.107.0)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.1)))(solid-js@2.0.0-rc.20)': + '@solidjs/router@2.0.0-next.34(@solidjs/web@2.0.0-rc.21(solid-js@2.0.0-rc.21))(filesystem-routing@0.4.0(supports-color@10.2.2)(vite@8.3.5(@types/node@26.4.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(sass-embedded@1.107.0)(sass@1.107.0)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.1)))(solid-js@2.0.0-rc.21)': dependencies: - '@solidjs/web': 2.0.0-rc.20(solid-js@2.0.0-rc.20) - solid-js: 2.0.0-rc.20 + '@solidjs/web': 2.0.0-rc.21(solid-js@2.0.0-rc.21) + solid-js: 2.0.0-rc.21 optionalDependencies: filesystem-routing: 0.4.0(supports-color@10.2.2)(vite@8.3.5(@types/node@26.4.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(sass-embedded@1.107.0)(sass@1.107.0)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.1)) - '@solidjs/signals@2.0.0-rc.20': {} + '@solidjs/signals@2.0.0-rc.21': {} '@solidjs/start@2.0.5(@solidjs/router@1.0.0(solid-js@1.9.18))(@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.2)(vitest@5.0.5))(crossws@0.4.12(srvx@1.0.5))(ocache@0.3.0)(supports-color@10.2.2)(vite@8.3.5(@types/node@26.4.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(sass-embedded@1.107.0)(sass@1.107.0)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.1))': dependencies: @@ -18162,22 +18469,22 @@ snapshots: optionalDependencies: '@solidjs/router': 1.0.0(solid-js@1.9.18) - '@solidjs/testing-library@1.0.0-rc.2(@solidjs/web@2.0.0-rc.20(solid-js@2.0.0-rc.20))(solid-js@2.0.0-rc.20)': + '@solidjs/testing-library@1.0.0-rc.2(@solidjs/web@2.0.0-rc.21(solid-js@2.0.0-rc.21))(solid-js@2.0.0-rc.21)': dependencies: - '@solidjs/web': 2.0.0-rc.20(solid-js@2.0.0-rc.20) + '@solidjs/web': 2.0.0-rc.21(solid-js@2.0.0-rc.21) '@testing-library/dom': 10.4.2 - solid-js: 2.0.0-rc.20 + solid-js: 2.0.0-rc.21 - '@solidjs/vite-plugin@3.0.0-next.35(@solidjs/web@2.0.0-rc.20(solid-js@2.0.0-rc.20))(@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.2)(vitest@5.0.5))(solid-js@2.0.0-rc.20)(supports-color@10.2.2)(vite@8.3.5(@types/node@26.4.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(sass-embedded@1.107.0)(sass@1.107.0)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.1))': + '@solidjs/vite-plugin@3.0.0-next.35(@solidjs/web@2.0.0-rc.21(solid-js@2.0.0-rc.21))(@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.2)(vitest@5.0.5))(solid-js@2.0.0-rc.21)(supports-color@10.2.2)(vite@8.3.5(@types/node@26.4.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(sass-embedded@1.107.0)(sass@1.107.0)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.1))': dependencies: '@ampproject/remapping': 2.3.0 '@babel/core': 7.29.7(supports-color@10.2.2) '@solidjs/babel-plugin': 2.0.0-rc.13(@babel/core@7.29.7(supports-color@10.2.2)) '@solidjs/compiler': 2.0.0-rc.13 - '@solidjs/web': 2.0.0-rc.20(solid-js@2.0.0-rc.20) + '@solidjs/web': 2.0.0-rc.21(solid-js@2.0.0-rc.21) '@types/babel__core': 7.20.5 merge-anything: 5.1.7 - solid-js: 2.0.0-rc.20 + solid-js: 2.0.0-rc.21 vite: 8.3.5(@types/node@26.4.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(sass-embedded@1.107.0)(sass@1.107.0)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.1) vitefu: 1.1.3(vite@8.3.5(@types/node@26.4.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(sass-embedded@1.107.0)(sass@1.107.0)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.1)) optionalDependencies: @@ -18186,16 +18493,16 @@ snapshots: - '@tsrx/core' - supports-color - '@solidjs/vite-plugin@3.0.0-next.47(@solidjs/web@2.0.0-rc.20(solid-js@2.0.0-rc.20))(@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.2)(vitest@5.0.5))(solid-js@2.0.0-rc.20)(supports-color@10.2.2)(vite@8.3.5(@types/node@26.4.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(sass-embedded@1.107.0)(sass@1.107.0)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.1))': + '@solidjs/vite-plugin@3.0.0-next.47(@solidjs/web@2.0.0-rc.21(solid-js@2.0.0-rc.21))(@testing-library/jest-dom@7.0.1(@testing-library/dom@10.4.2)(vitest@5.0.5))(solid-js@2.0.0-rc.21)(supports-color@10.2.2)(vite@8.3.5(@types/node@26.4.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(sass-embedded@1.107.0)(sass@1.107.0)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.1))': dependencies: '@ampproject/remapping': 2.3.0 '@babel/core': 7.29.7(supports-color@10.2.2) '@solidjs/babel-plugin': 2.0.0-rc.13(@babel/core@7.29.7(supports-color@10.2.2)) '@solidjs/compiler': 2.0.0-rc.13 - '@solidjs/web': 2.0.0-rc.20(solid-js@2.0.0-rc.20) + '@solidjs/web': 2.0.0-rc.21(solid-js@2.0.0-rc.21) '@types/babel__core': 7.20.5 merge-anything: 5.1.7 - solid-js: 2.0.0-rc.20 + solid-js: 2.0.0-rc.21 vite: 8.3.5(@types/node@26.4.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(sass-embedded@1.107.0)(sass@1.107.0)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.1) vitefu: 1.1.3(vite@8.3.5(@types/node@26.4.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(sass-embedded@1.107.0)(sass@1.107.0)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.1)) optionalDependencies: @@ -18204,14 +18511,16 @@ snapshots: - '@tsrx/core' - supports-color - '@solidjs/web@2.0.0-rc.20(solid-js@2.0.0-rc.20)': + '@solidjs/web@2.0.0-rc.21(solid-js@2.0.0-rc.21)': dependencies: seroval: 1.7.0 seroval-plugins: 1.7.0(seroval@1.7.0) - solid-js: 2.0.0-rc.20 + solid-js: 2.0.0-rc.21 '@speed-highlight/core@1.2.24': {} + '@stablelib/base64@1.0.1': {} + '@standard-schema/spec@1.1.0': {} '@stitches/core@1.2.8': {} @@ -20050,12 +20359,12 @@ snapshots: optionalDependencies: solid-js: 1.9.18 - babel-preset-solid@2.0.0-rc.2(@babel/core@8.0.10)(solid-js@2.0.0-rc.20): + babel-preset-solid@2.0.0-rc.2(@babel/core@8.0.10)(solid-js@2.0.0-rc.21): dependencies: '@babel/core': 8.0.10 '@dom-expressions/babel-plugin-jsx': 0.50.0-next.44(@babel/core@8.0.10) optionalDependencies: - solid-js: 2.0.0-rc.20 + solid-js: 2.0.0-rc.21 bail@2.0.2: {} @@ -20151,6 +20460,11 @@ snapshots: boolbase@2.0.0: {} + botid@1.5.13(next@16.4.1(@babel/core@7.29.7(supports-color@10.2.2))(@types/node@26.4.1)(react-dom@19.3.1(react@19.3.1))(react@19.3.1)(sass@1.107.0))(react@19.3.1): + optionalDependencies: + next: 16.4.1(@babel/core@7.29.7(supports-color@10.2.2))(@types/node@26.4.1)(react-dom@19.3.1(react@19.3.1))(react@19.3.1)(sass@1.107.0) + react: 19.3.1 + brace-expansion@1.1.21: dependencies: balanced-match: 1.0.2 @@ -21484,6 +21798,8 @@ snapshots: dependencies: cac: 7.0.0 + fast-sha256@1.3.0: {} + fast-string-truncated-width@3.0.3: {} fast-string-width@3.0.2: @@ -23443,6 +23759,33 @@ snapshots: neotraverse@1.0.1: {} + next@16.4.1(@babel/core@7.29.7(supports-color@10.2.2))(@types/node@26.4.1)(react-dom@19.3.1(react@19.3.1))(react@19.3.1)(sass@1.107.0): + dependencies: + '@next/env': 16.4.1 + '@swc/helpers': 0.5.23 + baseline-browser-mapping: 2.11.34 + caniuse-lite: 1.0.30001820 + postcss: 8.5.23 + react: 19.3.1 + react-dom: 19.3.1(react@19.3.1) + styled-jsx: 5.1.6(@babel/core@7.29.7(supports-color@10.2.2))(react@19.3.1) + optionalDependencies: + '@next/swc-darwin-arm64': 16.4.1 + '@next/swc-darwin-x64': 16.4.1 + '@next/swc-linux-arm64-gnu': 16.4.1 + '@next/swc-linux-arm64-musl': 16.4.1 + '@next/swc-linux-x64-gnu': 16.4.1 + '@next/swc-linux-x64-musl': 16.4.1 + '@next/swc-win32-arm64-msvc': 16.4.1 + '@next/swc-win32-x64-msvc': 16.4.1 + sass: 1.107.0 + sharp: 0.35.5(@types/node@26.4.1) + transitivePeerDependencies: + - '@babel/core' + - '@types/node' + - babel-plugin-macros + optional: true + next@16.4.1(@babel/core@8.0.10)(@types/node@26.4.1)(react-dom@19.3.1(react@19.3.1))(react@19.3.1)(sass@1.107.0): dependencies: '@next/env': 16.4.1 @@ -23752,6 +24095,161 @@ snapshots: optionalDependencies: chokidar: 3.6.0 + nuxt@4.6.3(60a2a7448ca37a273c0ea8373995cc0e): + dependencies: + '@dxup/nuxt': 0.5.10(@nuxt/schema@4.6.3)(confbox@0.3.1)(dotenv@17.4.2)(esbuild@0.28.2)(giget@3.3.1)(jiti@2.7.0)(mlly@1.8.2)(oxc-parser@0.150.0)(rolldown@1.2.16)(rollup@4.65.1)(vite@8.3.5(@types/node@26.4.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(sass-embedded@1.107.0)(sass@1.107.0)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.1)) + '@jridgewell/trace-mapping': 0.3.31 + '@nuxt/cli': 4.0.1(@nuxt/schema@4.6.3)(jiti@2.7.0)(oxc-parser@0.150.0)(rolldown@1.2.16)(vite@8.3.5(@types/node@26.4.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(sass-embedded@1.107.0)(sass@1.107.0)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.1)) + '@nuxt/devalue': 2.0.2 + '@nuxt/devtools': 3.4.4(@nuxt/schema@4.6.3)(@vercel/blob@2.8.0)(confbox@0.3.1)(db0@0.3.4)(dotenv@17.4.2)(giget@3.3.1)(ioredis@5.11.1(supports-color@10.2.2))(jiti@2.7.0)(magic-string@1.4.5)(mlly@1.8.2)(oxc-parser@0.150.0)(rolldown@1.2.16)(unplugin@3.7.0(esbuild@0.28.2)(rolldown@1.2.16)(rollup@4.65.1)(vite@8.3.5(@types/node@26.4.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(sass-embedded@1.107.0)(sass@1.107.0)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.1)))(vite@8.3.5(@types/node@26.4.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(sass-embedded@1.107.0)(sass@1.107.0)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.1))(vue@3.5.44(typescript@6.0.3)) + '@nuxt/kit': 4.6.3(@nuxt/schema@4.6.3)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.5)(mlly@1.8.2)(oxc-parser@0.150.0)(rolldown@1.2.16)(unplugin@3.7.0(esbuild@0.28.2)(rolldown@1.2.16)(rollup@4.65.1)(vite@8.3.5(@types/node@26.4.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(sass-embedded@1.107.0)(sass@1.107.0)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.1))) + '@nuxt/nitro-server': 4.6.3(060109649bb46c9e9ea558f3c0a20c21) + '@nuxt/schema': 4.6.3 + '@nuxt/telemetry': 2.9.1(@nuxt/kit@4.6.3(@nuxt/schema@4.6.3)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.5)(mlly@1.8.2)(oxc-parser@0.150.0)(rolldown@1.2.16)(unplugin@3.7.0(esbuild@0.28.2)(rolldown@1.2.16)(rollup@4.65.1)(vite@8.3.5(@types/node@26.4.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(sass-embedded@1.107.0)(sass@1.107.0)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.1)))) + '@nuxt/vite-builder': 4.6.3(@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7(supports-color@10.2.2)))(@nuxt/schema@4.6.3)(@types/node@26.4.1)(confbox@0.3.1)(dotenv@17.4.2)(esbuild@0.28.2)(eslint@10.9.1(jiti@2.7.0)(supports-color@10.2.2))(giget@3.3.1)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(magic-string@1.4.5)(meow@14.1.0)(mlly@1.8.2)(nuxt@4.6.3(60a2a7448ca37a273c0ea8373995cc0e))(optionator@0.9.4)(oxc-parser@0.150.0)(rolldown@1.2.16)(rollup-plugin-visualizer@7.1.1(rolldown@1.2.16)(rollup@4.65.1))(rollup@4.65.1)(sass-embedded@1.107.0)(sass@1.107.0)(stylus@0.56.0(supports-color@10.2.2))(supports-color@10.2.2)(terser@5.51.2)(typescript@6.0.3)(vue-tsc@3.3.11(typescript@6.0.3))(vue@3.5.44(typescript@6.0.3))(yaml@2.9.1) + '@nuxt/vite-server': 4.6.3(@nuxt/schema@4.6.3)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.5)(mlly@1.8.2)(nuxt@4.6.3(60a2a7448ca37a273c0ea8373995cc0e))(oxc-parser@0.150.0)(rolldown@1.2.16)(unplugin@3.7.0(esbuild@0.28.2)(rolldown@1.2.16)(rollup@4.65.1)(vite@8.3.5(@types/node@26.4.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(sass-embedded@1.107.0)(sass@1.107.0)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.1)))(vite@8.3.5(@types/node@26.4.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(sass-embedded@1.107.0)(sass@1.107.0)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.1)) + '@unhead/vue': 3.4.3(@oxc-project/types@0.156.0)(esbuild@0.28.2)(lightningcss@1.33.0)(oxc-parser@0.150.0)(rolldown@1.2.16)(rollup@4.65.1)(vite@8.3.5(@types/node@26.4.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(sass-embedded@1.107.0)(sass@1.107.0)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.1))(vue@3.5.44(typescript@6.0.3)) + '@vue/shared': 3.5.44 + chokidar: 5.0.0 + clickable-path: 0.1.1 + compatx: 0.2.0 + consola: 3.4.2 + cookie-es: 3.1.1 + defu: 6.1.7 + destr: 2.0.5 + devalue: 6.0.3 + errx: 0.2.2 + escape-string-regexp: 5.0.0 + exsolve: 1.2.0 + fetchdts: 0.2.0 + fnv1a-64: 0.1.2 + hookable: 6.1.2 + ignore: 7.0.14 + impound: 1.2.1(esbuild@0.28.2)(rolldown@1.2.16)(rollup@4.65.1)(vite@8.3.5(@types/node@26.4.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(sass-embedded@1.107.0)(sass@1.107.0)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.1)) + iron-webcrypto: 2.0.0 + jiti: 2.7.0 + klona: 2.0.6 + knitwork: 1.3.0 + magic-string: 1.4.5 + my-bad: 0.2.11(vite@8.3.5(@types/node@26.4.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(sass-embedded@1.107.0)(sass@1.107.0)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.1)) + nanotar: 0.3.0 + nostics: 1.3.0 + object-identity: 0.2.3 + ofetch: 1.5.1 + ohash: 2.0.12 + on-change: 6.0.2 + oxc-walker: 1.1.1(@oxc-project/types@0.156.0)(oxc-parser@0.150.0)(rolldown@1.2.16) + pathe: 2.0.3 + perfect-debounce: 2.1.0 + picomatch: 4.0.7 + pkg-types: 2.4.0 + rolldown: 1.2.16 + rolldown-string: 0.3.1(rolldown@1.2.16) + rou3: 0.9.2 + scule: 1.3.0 + std-env: 4.3.0 + tinyglobby: 0.2.17 + ufo: 1.6.4 + ultrahtml: 1.7.0 + uncrypto: 0.1.3 + unctx: 3.0.1(magic-string@1.4.5)(oxc-parser@0.150.0)(rolldown@1.2.16)(unplugin@3.7.0(esbuild@0.28.2)(rolldown@1.2.16)(rollup@4.65.1)(vite@8.3.5(@types/node@26.4.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(sass-embedded@1.107.0)(sass@1.107.0)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.1))) + undici: 8.12.3 + unhead: 3.4.3(esbuild@0.28.2)(rolldown@1.2.16)(rollup@4.65.1)(vite@8.3.5(@types/node@26.4.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(sass-embedded@1.107.0)(sass@1.107.0)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.1)) + unimport: 7.0.2(acorn@8.19.0)(esbuild@0.28.2)(oxc-parser@0.150.0)(rolldown@1.2.16)(rollup@4.65.1)(vite@8.3.5(@types/node@26.4.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(sass-embedded@1.107.0)(sass@1.107.0)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.1)) + unplugin: 3.7.0(esbuild@0.28.2)(rolldown@1.2.16)(rollup@4.65.1)(vite@8.3.5(@types/node@26.4.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(sass-embedded@1.107.0)(sass@1.107.0)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.1)) + unrouting: 0.3.1 + untyped: 2.0.0 + verkit: 0.5.0 + vue: 3.5.44(typescript@6.0.3) + vue-bundle-renderer: 2.4.0 + vue-component-type-helpers: 3.3.13 + vue-router: 5.4.0(@vue/compiler-sfc@3.5.44)(esbuild@0.28.2)(rolldown@1.2.16)(rollup@4.65.1)(vite@8.3.5(@types/node@26.4.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(sass-embedded@1.107.0)(sass@1.107.0)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.1))(vue@3.5.44(typescript@6.0.3)) + optionalDependencies: + '@parcel/watcher': 2.6.0 + '@types/node': 26.4.1 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@babel/plugin-proposal-decorators' + - '@babel/plugin-syntax-jsx' + - '@babel/plugin-syntax-typescript' + - '@biomejs/biome' + - '@capacitor/preferences' + - '@deno/kv' + - '@electric-sql/pglite' + - '@farmfe/core' + - '@libsql/client' + - '@netlify/blobs' + - '@nuxt/docs' + - '@oxc-project/types' + - '@pinia/colada' + - '@planetscale/database' + - '@rollup/plugin-babel' + - '@rsbuild/core' + - '@rspack/core' + - '@unhead/cli' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - '@vitejs/devtools' + - '@vitejs/devtools-kit' + - '@vue/compiler-sfc' + - acorn + - aws4fetch + - bare-abort-controller + - bare-buffer + - better-sqlite3 + - bufferutil + - bun-types-no-globals + - confbox + - db0 + - dotenv + - drizzle-orm + - encoding + - esbuild + - eslint + - giget + - idb-keyval + - ioredis + - less + - lightningcss + - meow + - mlly + - mysql2 + - optionator + - oxc-parser + - oxlint + - pinia + - react-native-b4a + - rollup + - rollup-plugin-visualizer + - sass + - sass-embedded + - serve + - sqlite3 + - srvx + - stylelint + - stylus + - sugarss + - supports-color + - terser + - tsx + - typescript + - unloader + - uploadthing + - utf-8-validate + - vite + - vue-tsc + - webpack + - xml2js + - yaml + optional: true + nuxt@4.6.3(678d193107555a89b137fff1c862652d): dependencies: '@dxup/nuxt': 0.5.10(@nuxt/schema@4.6.3)(confbox@0.3.1)(dotenv@17.4.2)(esbuild@0.28.2)(giget@3.3.1)(jiti@2.7.0)(mlly@1.8.2)(oxc-parser@0.150.0)(rolldown@1.2.16)(rollup@4.65.1)(vite@8.3.5(@types/node@26.4.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(sass-embedded@1.107.0)(sass@1.107.0)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.1)) @@ -24376,6 +24874,8 @@ snapshots: possible-typed-array-names@1.1.0: {} + postal-mime@2.7.6: {} + postcss-calc@11.2.3(postcss@8.5.32): dependencies: '@csstools/css-tokenizer': 4.0.2 @@ -24748,6 +25248,11 @@ snapshots: require-from-string@2.0.2: {} + resend@6.38.0: + dependencies: + postal-mime: 2.7.6 + standardwebhooks: 1.1.1 + resolve-from@4.0.0: {} resolve-from@5.0.0: {} @@ -25553,9 +26058,9 @@ snapshots: seroval: 1.6.12 seroval-plugins: 1.6.12(seroval@1.6.12) - solid-js@2.0.0-rc.20: + solid-js@2.0.0-rc.21: dependencies: - '@solidjs/signals': 2.0.0-rc.20 + '@solidjs/signals': 2.0.0-rc.21 csstype: 3.2.3 seroval: 1.7.0 seroval-plugins: 1.7.0(seroval@1.7.0) @@ -25647,6 +26152,11 @@ snapshots: standard-as-callback@2.1.0: {} + standardwebhooks@1.1.1: + dependencies: + '@stablelib/base64': 1.0.1 + fast-sha256: 1.3.0 + static-browser-server@1.0.3: dependencies: '@open-draft/deferred-promise': 2.2.0 @@ -25775,6 +26285,14 @@ snapshots: style-mod@4.1.3: {} + styled-jsx@5.1.6(@babel/core@7.29.7(supports-color@10.2.2))(react@19.3.1): + dependencies: + client-only: 0.0.1 + react: 19.3.1 + optionalDependencies: + '@babel/core': 7.29.7(supports-color@10.2.2) + optional: true + styled-jsx@5.1.6(@babel/core@8.0.10)(react@19.3.1): dependencies: client-only: 0.0.1 @@ -27115,7 +27633,11 @@ snapshots: - unloader - webpack - vue-sonner@2.0.9: {} + vue-sonner@2.0.9(@nuxt/kit@4.6.3(@nuxt/schema@4.6.3)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.5)(mlly@1.8.2)(oxc-parser@0.150.0)(rolldown@1.2.16)(unplugin@3.7.0(esbuild@0.28.2)(rolldown@1.2.16)(rollup@4.65.1)(vite@8.3.5(@types/node@26.4.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(sass-embedded@1.107.0)(sass@1.107.0)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.1))))(@nuxt/schema@4.6.3)(nuxt@4.6.3(60a2a7448ca37a273c0ea8373995cc0e)): + optionalDependencies: + '@nuxt/kit': 4.6.3(@nuxt/schema@4.6.3)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.5)(mlly@1.8.2)(oxc-parser@0.150.0)(rolldown@1.2.16)(unplugin@3.7.0(esbuild@0.28.2)(rolldown@1.2.16)(rollup@4.65.1)(vite@8.3.5(@types/node@26.4.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.9.1(supports-color@10.2.2))(sass-embedded@1.107.0)(sass@1.107.0)(stylus@0.56.0(supports-color@10.2.2))(terser@5.51.2)(yaml@2.9.1))) + '@nuxt/schema': 4.6.3 + nuxt: 4.6.3(60a2a7448ca37a273c0ea8373995cc0e) vue-tsc@3.3.11(typescript@6.0.3): dependencies: