diff --git a/.changeset/mean-taxis-drive.md b/.changeset/mean-taxis-drive.md new file mode 100644 index 0000000..cd2e2ce --- /dev/null +++ b/.changeset/mean-taxis-drive.md @@ -0,0 +1,5 @@ +--- +'@layerstack/tailwind': patch +--- + +fix: Split theme generation CLI from runtime theme utils diff --git a/packages/tailwind/package.json b/packages/tailwind/package.json index 0d94262..79bd327 100644 --- a/packages/tailwind/package.json +++ b/packages/tailwind/package.json @@ -8,7 +8,7 @@ "scripts": { "dev": "rimraf dist && tsc -p tsconfig.build.json --watch", "build": "rimraf dist && tsc -p tsconfig.build.json && pnpm build:css && cp -r ./src/lib/css dist", - "build:css": "tsc --noEmit && tsx ./src/lib/cli.ts", + "build:css": "tsc --noEmit && tsx ./src/lib/cli/index.ts", "preview": "vite preview", "package": "svelte-package", "prepublishOnly": "svelte-package", @@ -24,13 +24,14 @@ "@types/culori": "^2.1.1", "@types/d3-array": "^3.2.1", "@types/lodash-es": "^4.17.12", - "daisyui": "^4.12.24", + "@types/node": "^24.0.1", "culori": "^4.0.1", + "daisyui": "^4.12.24", "prettier": "^3.5.3", "rimraf": "6.0.1", + "tailwindcss": "^4.1.5", "tslib": "^2.8.1", "tsx": "^4.19.4", - "tailwindcss": "^4.1.5", "typescript": "^5.8.3", "vite": "^6.3.5", "vitest": "^3.1.3" diff --git a/packages/tailwind/src/lib/daisy.ts b/packages/tailwind/src/lib/cli/daisy.ts similarity index 100% rename from packages/tailwind/src/lib/daisy.ts rename to packages/tailwind/src/lib/cli/daisy.ts diff --git a/packages/tailwind/src/lib/cli.ts b/packages/tailwind/src/lib/cli/index.ts similarity index 98% rename from packages/tailwind/src/lib/cli.ts rename to packages/tailwind/src/lib/cli/index.ts index 86d497e..35b5b6e 100755 --- a/packages/tailwind/src/lib/cli.ts +++ b/packages/tailwind/src/lib/cli/index.ts @@ -5,7 +5,7 @@ import { format } from 'prettier'; import { entries } from '@layerstack/utils'; import { mapKeys } from '@layerstack/utils/object'; -import { colorNames, themeStylesString, type Colors, type SupportedColorSpace } from './theme.js'; +import { colorNames, themeStylesString, type Colors, type SupportedColorSpace } from './utils.js'; import { themes as daisyThemes } from './daisy.js'; import { themes as skeletonThemes } from './skeleton.js'; diff --git a/packages/tailwind/src/lib/skeleton.ts b/packages/tailwind/src/lib/cli/skeleton.ts similarity index 100% rename from packages/tailwind/src/lib/skeleton.ts rename to packages/tailwind/src/lib/cli/skeleton.ts diff --git a/packages/tailwind/src/lib/skeleton/crimson.ts b/packages/tailwind/src/lib/cli/skeleton/crimson.ts similarity index 100% rename from packages/tailwind/src/lib/skeleton/crimson.ts rename to packages/tailwind/src/lib/cli/skeleton/crimson.ts diff --git a/packages/tailwind/src/lib/skeleton/gold-nouveau.ts b/packages/tailwind/src/lib/cli/skeleton/gold-nouveau.ts similarity index 100% rename from packages/tailwind/src/lib/skeleton/gold-nouveau.ts rename to packages/tailwind/src/lib/cli/skeleton/gold-nouveau.ts diff --git a/packages/tailwind/src/lib/skeleton/hamlindigo.ts b/packages/tailwind/src/lib/cli/skeleton/hamlindigo.ts similarity index 100% rename from packages/tailwind/src/lib/skeleton/hamlindigo.ts rename to packages/tailwind/src/lib/cli/skeleton/hamlindigo.ts diff --git a/packages/tailwind/src/lib/skeleton/index.ts b/packages/tailwind/src/lib/cli/skeleton/index.ts similarity index 100% rename from packages/tailwind/src/lib/skeleton/index.ts rename to packages/tailwind/src/lib/cli/skeleton/index.ts diff --git a/packages/tailwind/src/lib/skeleton/modern.ts b/packages/tailwind/src/lib/cli/skeleton/modern.ts similarity index 100% rename from packages/tailwind/src/lib/skeleton/modern.ts rename to packages/tailwind/src/lib/cli/skeleton/modern.ts diff --git a/packages/tailwind/src/lib/skeleton/rocket.ts b/packages/tailwind/src/lib/cli/skeleton/rocket.ts similarity index 100% rename from packages/tailwind/src/lib/skeleton/rocket.ts rename to packages/tailwind/src/lib/cli/skeleton/rocket.ts diff --git a/packages/tailwind/src/lib/skeleton/sahara.ts b/packages/tailwind/src/lib/cli/skeleton/sahara.ts similarity index 100% rename from packages/tailwind/src/lib/skeleton/sahara.ts rename to packages/tailwind/src/lib/cli/skeleton/sahara.ts diff --git a/packages/tailwind/src/lib/skeleton/seafoam.ts b/packages/tailwind/src/lib/cli/skeleton/seafoam.ts similarity index 100% rename from packages/tailwind/src/lib/skeleton/seafoam.ts rename to packages/tailwind/src/lib/cli/skeleton/seafoam.ts diff --git a/packages/tailwind/src/lib/skeleton/skeleton.ts b/packages/tailwind/src/lib/cli/skeleton/skeleton.ts similarity index 100% rename from packages/tailwind/src/lib/skeleton/skeleton.ts rename to packages/tailwind/src/lib/cli/skeleton/skeleton.ts diff --git a/packages/tailwind/src/lib/skeleton/vintage.ts b/packages/tailwind/src/lib/cli/skeleton/vintage.ts similarity index 100% rename from packages/tailwind/src/lib/skeleton/vintage.ts rename to packages/tailwind/src/lib/cli/skeleton/vintage.ts diff --git a/packages/tailwind/src/lib/skeleton/wintry.ts b/packages/tailwind/src/lib/cli/skeleton/wintry.ts similarity index 100% rename from packages/tailwind/src/lib/skeleton/wintry.ts rename to packages/tailwind/src/lib/cli/skeleton/wintry.ts diff --git a/packages/tailwind/src/lib/cli/utils.ts b/packages/tailwind/src/lib/cli/utils.ts new file mode 100644 index 0000000..54ff310 --- /dev/null +++ b/packages/tailwind/src/lib/cli/utils.ts @@ -0,0 +1,194 @@ +import { + rgb, + hsl, + oklch, + clampRgb, + interpolate, + wcagContrast, + formatCss, + type Color, + type Hsl, + type Oklch, + type Rgb, +} from 'culori'; +import { entries, fromEntries, keys } from '@layerstack/utils'; +import { colors, semanticColors, shades, stateColors } from '../theme.js'; + +export type SupportedColorSpace = 'rgb' | 'hsl' | 'oklch'; +export type Colors = Record; + +export const colorNames = [ + // Semantic & State colors (ex. `priamry`, 'primary-content`, 'primary-100`, ...) + ...colors.flatMap((color) => [ + color, // default + `${color}-content`, // text/content + ...shades.map((shade) => `${color}-${shade}`), + ]), + + // Surfaces + 'surface-100', + 'surface-200', + 'surface-300', + 'surface-content', +]; + +/** + * Generate missing theme colors (if needed), convert names to CSS variables and to a common color space (hsl, oklch, etc) + */ +export function processThemeColors(colors: Colors, colorSpace: SupportedColorSpace) { + // TODO: make all semanatic colors optional as well + + // Generate optional semanatic colors + colors['neutral'] ??= colors['neutral-500'] ?? 'oklch(.355192 .032071 262.988584)'; + + // Generate optional state colors + colors['info'] ??= colors['info-500'] ?? 'oklch(0.7206 0.191 231.6)'; + colors['success'] ??= colors['success-500'] ?? 'oklch(64.8% 0.150 160)'; + colors['warning'] ??= colors['warning-500'] ?? 'oklch(0.8471 0.199 83.87)'; + colors['danger'] ??= colors['danger-500'] ?? 'oklch(0.7176 0.221 22.18)'; + + // Generate optional content colors + for (const color of [...semanticColors, ...stateColors]) { + // Add `primary` from `primary-500` if not defined in theme (ex. Skeleton) + colors[color] ??= colors[`${color}-500`]; + colors[`${color}-content`] ??= foregroundColor(colors[color]) as string; + + // Generate color shades (ex. `primary-500`) if not defined. Useful for Daisy but not Skeleton themes, for example + for (const shade of shades) { + const shadeColorName = `${color}-${shade}`; + if (!(shadeColorName in colors)) { + // Find the next shade above (shade < 500) or below (shade > 500) and use as reference, if available + const referenceShade = + keys(colors) + .map((key) => { + const [c, s] = String(key).split('-'); + return [c, Number(s)] as [string, number]; + }) + .find(([c, s]) => c === color && (s < 500 ? s > shade : s < shade))?.[1] ?? 500; + const referenceColor = colors[`${color}-${referenceShade}`] ?? colors[color]; + + if (shade < 500) { + colors[shadeColorName] ??= lightenColor( + referenceColor, + (referenceShade - shade) / 1000 + ) as string; // 100 == 0.1 + } else if (shade > 500) { + colors[shadeColorName] ??= darkenColor( + colors[color], + (shade - referenceShade) / 1000 + ) as string; // 100 == 0.1 + } else { + colors[shadeColorName] ??= colors[color] as string; + } + } + } + } + + // Generate optional surface colors + colors['surface-100'] ??= 'oklch(100 0 0)'; + colors['surface-200'] ??= darkenColor(colors['surface-100'], 0.07) as string; + colors['surface-300'] ??= darkenColor(colors['surface-200'], 0.07) as string; + colors['surface-content'] ??= foregroundColor(colors['surface-100']) as string; + + // Add `color-scheme: "dark"` for `dark` theme (if not set) + colors['color-scheme'] ??= isDark(colors['surface-content']) ? 'light' : 'dark'; + + const result = fromEntries( + entries(colors).map(([name, value]) => { + if (colorNames.includes(String(name))) { + // Convert each color to common colorspace and add variable + return [`--color-${name}`, convertColor(value, colorSpace)]; + } else { + // Additional properties such as `color-scheme` or CSS variable + return [name, value]; + } + }) + ); + + return result; +} + +function round(value: number, decimals: number) { + if (value) { + return Number(value.toFixed(decimals)); + } else { + return 0; + } +} + +function isDark(color: Color | string) { + try { + if (wcagContrast(color, 'black') < wcagContrast(color, 'white')) { + return true; + } + return false; + } catch (e) { + return false; + } +} + +/** Lighten or darken color based on contrast of input */ +function foregroundColor(color: Color | string, percentage = 0.8) { + try { + return isDark(color) ? lightenColor(color, percentage) : darkenColor(color, percentage); + } catch (e) { + // console.error('Unable to generate foreground color', color); + } +} + +function lightenColor(color: Color | string, percentage: number) { + try { + return formatCss(interpolate([color, 'white'], 'oklch')(percentage)); + } catch (e) { + // console.error('Unable to generate lighten color', color); + } +} + +function darkenColor(color: Color | string, percentage: number) { + try { + return formatCss(interpolate([color, 'black'], 'oklch')(percentage)); + } catch (e) { + // console.error('Unable to generate darken color', color); + } +} + +/** + * Convert color to space separated components string + */ +export function convertColor(color: Color | string, colorSpace: SupportedColorSpace, decimals = 4) { + try { + if (colorSpace === 'rgb') { + const computedColor = typeof color === 'string' ? rgb(color) : (color as Rgb); + if (computedColor) { + const { r, g, b } = computedColor; + return `rgb(${round(r * 255, decimals)} ${round(g * 255, decimals)} ${round(b * 255, decimals)})`; + } + } else if (colorSpace === 'hsl') { + const computedColor = typeof color === 'string' ? hsl(clampRgb(color)) : (color as Hsl); + if (computedColor) { + const { h, s, l } = computedColor; + return `hsl(${round(h ?? 0, decimals)} ${round(s * 100, decimals)}% ${round(l * 100, decimals)}%)`; + } + } else if (colorSpace === 'oklch') { + const computedColor = typeof color === 'string' ? oklch(clampRgb(color)) : (color as Oklch); + if (computedColor) { + const { l, c, h } = computedColor; + return `oklch(${round(l, decimals)} ${round(c, decimals)} ${round(h ?? 0, decimals)})`; + } + } + } catch (e) { + // console.error('Unable to convert color object to string', color); + } +} + +/** + * Process theme to style variables + */ +export function themeStylesString(colors: Colors, colorSpace: SupportedColorSpace) { + const styleProperties = processThemeColors(colors, colorSpace); + return entries(styleProperties) + .map(([key, value]) => { + return `${key}: ${value};`; + }) + .join('\n'); +} diff --git a/packages/tailwind/src/lib/theme.ts b/packages/tailwind/src/lib/theme.ts index b77501c..d708d60 100644 --- a/packages/tailwind/src/lib/theme.ts +++ b/packages/tailwind/src/lib/theme.ts @@ -1,46 +1,12 @@ import { range } from 'd3-array'; -import { - rgb, - hsl, - oklch, - clampRgb, - interpolate, - wcagContrast, - formatCss, - type Color, - type Hsl, - type Oklch, - type Rgb, -} from 'culori'; -import { entries, fromEntries, keys } from '@layerstack/utils'; - -export type SupportedColorSpace = 'rgb' | 'hsl' | 'oklch'; -export type Colors = Record; - export const semanticColors = ['primary', 'secondary', 'accent', 'neutral'] as const; export const stateColors = ['info', 'success', 'warning', 'danger'] as const; export const colors = [...semanticColors, ...stateColors]; - export const shades = [50, ...range(100, 1000, 100)]; -export const colorNames = [ - // Semantic & State colors (ex. `priamry`, 'primary-content`, 'primary-100`, ...) - ...colors.flatMap((color) => [ - color, // default - `${color}-content`, // text/content - ...shades.map((shade) => `${color}-${shade}`), - ]), - - // Surfaces - 'surface-100', - 'surface-200', - 'surface-300', - 'surface-content', -]; - /** - * Get themes names (`[data-theme="..."]`) split into `light` and `dark` collections determined by `color-scheme` property + * Get themes names from css file (`[data-theme="..."]`) split into `light` and `dark` collections determined by `color-scheme` property */ export function getThemeNames(cssContent: string) { const themeBlocks = cssContent.split(/\[data-theme=/); @@ -67,167 +33,6 @@ export function getThemeNames(cssContent: string) { return { light, dark }; } -/** - * Generate missing theme colors (if needed), convert names to CSS variables and to a common color space (hsl, oklch, etc) - */ -export function processThemeColors(colors: Colors, colorSpace: SupportedColorSpace) { - // TODO: make all semanatic colors optional as well - - // Generate optional semanatic colors - colors['neutral'] ??= colors['neutral-500'] ?? 'oklch(.355192 .032071 262.988584)'; - - // Generate optional state colors - colors['info'] ??= colors['info-500'] ?? 'oklch(0.7206 0.191 231.6)'; - colors['success'] ??= colors['success-500'] ?? 'oklch(64.8% 0.150 160)'; - colors['warning'] ??= colors['warning-500'] ?? 'oklch(0.8471 0.199 83.87)'; - colors['danger'] ??= colors['danger-500'] ?? 'oklch(0.7176 0.221 22.18)'; - - // Generate optional content colors - for (const color of [...semanticColors, ...stateColors]) { - // Add `primary` from `primary-500` if not defined in theme (ex. Skeleton) - colors[color] ??= colors[`${color}-500`]; - colors[`${color}-content`] ??= foregroundColor(colors[color]) as string; - - // Generate color shades (ex. `primary-500`) if not defined. Useful for Daisy but not Skeleton themes, for example - for (const shade of shades) { - const shadeColorName = `${color}-${shade}`; - if (!(shadeColorName in colors)) { - // Find the next shade above (shade < 500) or below (shade > 500) and use as reference, if available - const referenceShade = - keys(colors) - .map((key) => { - const [c, s] = String(key).split('-'); - return [c, Number(s)] as [string, number]; - }) - .find(([c, s]) => c === color && (s < 500 ? s > shade : s < shade))?.[1] ?? 500; - const referenceColor = colors[`${color}-${referenceShade}`] ?? colors[color]; - - if (shade < 500) { - colors[shadeColorName] ??= lightenColor( - referenceColor, - (referenceShade - shade) / 1000 - ) as string; // 100 == 0.1 - } else if (shade > 500) { - colors[shadeColorName] ??= darkenColor( - colors[color], - (shade - referenceShade) / 1000 - ) as string; // 100 == 0.1 - } else { - colors[shadeColorName] ??= colors[color] as string; - } - } - } - } - - // Generate optional surface colors - colors['surface-100'] ??= 'oklch(100 0 0)'; - colors['surface-200'] ??= darkenColor(colors['surface-100'], 0.07) as string; - colors['surface-300'] ??= darkenColor(colors['surface-200'], 0.07) as string; - colors['surface-content'] ??= foregroundColor(colors['surface-100']) as string; - - // Add `color-scheme: "dark"` for `dark` theme (if not set) - colors['color-scheme'] ??= isDark(colors['surface-content']) ? 'light' : 'dark'; - - const result = fromEntries( - entries(colors).map(([name, value]) => { - if (colorNames.includes(String(name))) { - // Convert each color to common colorspace and add variable - return [`--color-${name}`, convertColor(value, colorSpace)]; - } else { - // Additional properties such as `color-scheme` or CSS variable - return [name, value]; - } - }) - ); - - return result; -} - -function round(value: number, decimals: number) { - if (value) { - return Number(value.toFixed(decimals)); - } else { - return 0; - } -} - -function isDark(color: Color | string) { - try { - if (wcagContrast(color, 'black') < wcagContrast(color, 'white')) { - return true; - } - return false; - } catch (e) { - return false; - } -} - -/** Lighten or darken color based on contrast of input */ -function foregroundColor(color: Color | string, percentage = 0.8) { - try { - return isDark(color) ? lightenColor(color, percentage) : darkenColor(color, percentage); - } catch (e) { - // console.error('Unable to generate foreground color', color); - } -} - -function lightenColor(color: Color | string, percentage: number) { - try { - return formatCss(interpolate([color, 'white'], 'oklch')(percentage)); - } catch (e) { - // console.error('Unable to generate lighten color', color); - } -} - -function darkenColor(color: Color | string, percentage: number) { - try { - return formatCss(interpolate([color, 'black'], 'oklch')(percentage)); - } catch (e) { - // console.error('Unable to generate darken color', color); - } -} - -/** - * Convert color to space separated components string - */ -export function convertColor(color: Color | string, colorSpace: SupportedColorSpace, decimals = 4) { - try { - if (colorSpace === 'rgb') { - const computedColor = typeof color === 'string' ? rgb(color) : (color as Rgb); - if (computedColor) { - const { r, g, b } = computedColor; - return `rgb(${round(r * 255, decimals)} ${round(g * 255, decimals)} ${round(b * 255, decimals)})`; - } - } else if (colorSpace === 'hsl') { - const computedColor = typeof color === 'string' ? hsl(clampRgb(color)) : (color as Hsl); - if (computedColor) { - const { h, s, l } = computedColor; - return `hsl(${round(h ?? 0, decimals)} ${round(s * 100, decimals)}% ${round(l * 100, decimals)}%)`; - } - } else if (colorSpace === 'oklch') { - const computedColor = typeof color === 'string' ? oklch(clampRgb(color)) : (color as Oklch); - if (computedColor) { - const { l, c, h } = computedColor; - return `oklch(${round(l, decimals)} ${round(c, decimals)} ${round(h ?? 0, decimals)})`; - } - } - } catch (e) { - // console.error('Unable to convert color object to string', color); - } -} - -/** - * Process theme to style variables - */ -export function themeStylesString(colors: Colors, colorSpace: SupportedColorSpace) { - const styleProperties = processThemeColors(colors, colorSpace); - return entries(styleProperties) - .map(([key, value]) => { - return `${key}: ${value};`; - }) - .join('\n'); -} - /** Return a script tag that will set the initial theme from localStorage. This allows setting * the theme before anything starts rendering, even when SSR is in use. * diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9213092..cc5446c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -38,7 +38,7 @@ importers: version: 2.3.11(svelte@5.28.6)(typescript@5.8.3) '@sveltejs/vite-plugin-svelte': specifier: ^5.0.3 - version: 5.0.3(svelte@5.28.6)(vite@6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1)) + version: 5.0.3(svelte@5.28.6)(vite@6.3.5(@types/node@24.0.1)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1)) '@types/d3-scale': specifier: ^4.0.9 version: 4.0.9 @@ -68,10 +68,10 @@ importers: version: 5.8.3 vite: specifier: ^6.3.5 - version: 6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1) + version: 6.3.5(@types/node@24.0.1)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1) vitest: specifier: ^3.1.3 - version: 3.1.3(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1) + version: 3.1.3(@types/node@24.0.1)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1) packages/svelte-state: dependencies: @@ -81,13 +81,13 @@ importers: devDependencies: '@sveltejs/kit': specifier: ^2.20.8 - version: 2.21.0(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.28.6)(vite@6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1)))(svelte@5.28.6)(vite@6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1)) + version: 2.21.0(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.28.6)(vite@6.3.5(@types/node@24.0.1)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1)))(svelte@5.28.6)(vite@6.3.5(@types/node@24.0.1)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1)) '@sveltejs/package': specifier: ^2.3.11 version: 2.3.11(svelte@5.28.6)(typescript@5.8.3) '@sveltejs/vite-plugin-svelte': specifier: ^5.0.3 - version: 5.0.3(svelte@5.28.6)(vite@6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1)) + version: 5.0.3(svelte@5.28.6)(vite@6.3.5(@types/node@24.0.1)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1)) prettier: specifier: ^3.5.3 version: 3.5.3 @@ -114,10 +114,10 @@ importers: version: 5.8.3 vite: specifier: ^6.3.4 - version: 6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1) + version: 6.3.5(@types/node@24.0.1)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1) vitest: specifier: ^3.1.2 - version: 3.1.3(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1) + version: 3.1.3(@types/node@24.0.1)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1) packages/svelte-stores: dependencies: @@ -136,13 +136,13 @@ importers: devDependencies: '@sveltejs/kit': specifier: ^2.21.0 - version: 2.21.0(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.28.6)(vite@6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1)))(svelte@5.28.6)(vite@6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1)) + version: 2.21.0(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.28.6)(vite@6.3.5(@types/node@24.0.1)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1)))(svelte@5.28.6)(vite@6.3.5(@types/node@24.0.1)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1)) '@sveltejs/package': specifier: ^2.3.11 version: 2.3.11(svelte@5.28.6)(typescript@5.8.3) '@sveltejs/vite-plugin-svelte': specifier: ^5.0.3 - version: 5.0.3(svelte@5.28.6)(vite@6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1)) + version: 5.0.3(svelte@5.28.6)(vite@6.3.5(@types/node@24.0.1)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1)) '@types/lodash-es': specifier: ^4.17.12 version: 4.17.12 @@ -172,10 +172,10 @@ importers: version: 5.8.3 vite: specifier: ^6.3.5 - version: 6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1) + version: 6.3.5(@types/node@24.0.1)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1) vitest: specifier: ^3.1.3 - version: 3.1.3(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1) + version: 3.1.3(@types/node@24.0.1)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1) packages/svelte-table: dependencies: @@ -197,7 +197,7 @@ importers: version: 2.3.11(svelte@5.28.6)(typescript@5.8.3) '@sveltejs/vite-plugin-svelte': specifier: ^5.0.3 - version: 5.0.3(svelte@5.28.6)(vite@6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1)) + version: 5.0.3(svelte@5.28.6)(vite@6.3.5(@types/node@24.0.1)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1)) '@types/d3-array': specifier: ^3.2.1 version: 3.2.1 @@ -230,10 +230,10 @@ importers: version: 5.8.3 vite: specifier: ^6.3.5 - version: 6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1) + version: 6.3.5(@types/node@24.0.1)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1) vitest: specifier: ^3.1.3 - version: 3.1.3(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1) + version: 3.1.3(@types/node@24.0.1)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1) packages/tailwind: dependencies: @@ -268,6 +268,9 @@ importers: '@types/lodash-es': specifier: ^4.17.12 version: 4.17.12 + '@types/node': + specifier: ^24.0.1 + version: 24.0.1 culori: specifier: ^4.0.1 version: 4.0.1 @@ -294,10 +297,10 @@ importers: version: 5.8.3 vite: specifier: ^6.3.5 - version: 6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1) + version: 6.3.5(@types/node@24.0.1)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1) vitest: specifier: ^3.1.3 - version: 3.1.3(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1) + version: 3.1.3(@types/node@24.0.1)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1) packages/utils: dependencies: @@ -319,7 +322,7 @@ importers: version: 2.3.11(svelte@5.28.6)(typescript@5.8.3) '@sveltejs/vite-plugin-svelte': specifier: ^5.0.3 - version: 5.0.3(svelte@5.28.6)(vite@6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1)) + version: 5.0.3(svelte@5.28.6)(vite@6.3.5(@types/node@24.0.1)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1)) '@types/d3-array': specifier: ^3.2.1 version: 3.2.1 @@ -355,10 +358,10 @@ importers: version: 5.8.3 vite: specifier: ^6.3.5 - version: 6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1) + version: 6.3.5(@types/node@24.0.1)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1) vitest: specifier: ^3.1.3 - version: 3.1.3(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1) + version: 3.1.3(@types/node@24.0.1)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1) sites/docs: dependencies: @@ -416,22 +419,22 @@ importers: version: 6.7.2 '@sveltejs/adapter-cloudflare': specifier: ^7.0.3 - version: 7.0.3(@sveltejs/kit@2.21.0(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.28.6)(vite@6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1)))(svelte@5.28.6)(vite@6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1)))(wrangler@4.14.4(@cloudflare/workers-types@4.20250514.0)) + version: 7.0.3(@sveltejs/kit@2.21.0(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.28.6)(vite@6.3.5(@types/node@24.0.1)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1)))(svelte@5.28.6)(vite@6.3.5(@types/node@24.0.1)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1)))(wrangler@4.14.4(@cloudflare/workers-types@4.20250514.0)) '@sveltejs/kit': specifier: ^2.21.0 - version: 2.21.0(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.28.6)(vite@6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1)))(svelte@5.28.6)(vite@6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1)) + version: 2.21.0(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.28.6)(vite@6.3.5(@types/node@24.0.1)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1)))(svelte@5.28.6)(vite@6.3.5(@types/node@24.0.1)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1)) '@sveltejs/package': specifier: ^2.3.11 version: 2.3.11(svelte@5.28.6)(typescript@5.8.3) '@sveltejs/vite-plugin-svelte': specifier: ^5.0.3 - version: 5.0.3(svelte@5.28.6)(vite@6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1)) + version: 5.0.3(svelte@5.28.6)(vite@6.3.5(@types/node@24.0.1)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1)) '@tailwindcss/typography': specifier: ^0.5.16 version: 0.5.16(tailwindcss@4.1.6) '@tailwindcss/vite': specifier: ^4.1.5 - version: 4.1.6(vite@6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1)) + version: 4.1.6(vite@6.3.5(@types/node@24.0.1)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1)) '@types/d3-array': specifier: ^3.2.1 version: 3.2.1 @@ -482,7 +485,7 @@ importers: version: 5.0.0 vite: specifier: ^6.3.5 - version: 6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1) + version: 6.3.5(@types/node@24.0.1)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1) packages: @@ -1257,12 +1260,12 @@ packages: '@types/node@12.20.55': resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} - '@types/node@22.13.5': - resolution: {integrity: sha512-+lTU0PxZXn0Dr1NBtC7Y8cR21AJr87dLLU953CWA6pMxxv/UDc7jYAY90upcrie1nRcD6XNG5HOYEDtgW5TxAg==} - '@types/node@22.15.18': resolution: {integrity: sha512-v1DKRfUdyW+jJhZNEI1PYy29S2YRxMV5AOO/x/SjKmW0acCIOqmbj6Haf9eHAhsPmrhlHSxEhv/1WszcLWV4cg==} + '@types/node@24.0.1': + resolution: {integrity: sha512-MX4Zioh39chHlDJbKmEgydJDS3tspMP/lnQC67G3SWsTnb9NeYVWOjkxpOSy4oMfPs4StcWHwBrvUb4ybfnuaw==} + '@types/prismjs@1.26.5': resolution: {integrity: sha512-AUZTa7hQ2KY5L7AmtSiqxlhWxb4ina0yd8hNbl4TWuqnv/pFP0nDMb3YrfSBf4hJVGLh2YEIBfKaBW/9UEl6IQ==} @@ -2445,12 +2448,12 @@ packages: ufo@1.6.1: resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==} - undici-types@6.20.0: - resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} - undici-types@6.21.0: resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + undici-types@7.8.0: + resolution: {integrity: sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==} + undici@5.29.0: resolution: {integrity: sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==} engines: {node: '>=14.0'} @@ -3215,17 +3218,17 @@ snapshots: dependencies: acorn: 8.14.1 - '@sveltejs/adapter-cloudflare@7.0.3(@sveltejs/kit@2.21.0(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.28.6)(vite@6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1)))(svelte@5.28.6)(vite@6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1)))(wrangler@4.14.4(@cloudflare/workers-types@4.20250514.0))': + '@sveltejs/adapter-cloudflare@7.0.3(@sveltejs/kit@2.21.0(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.28.6)(vite@6.3.5(@types/node@24.0.1)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1)))(svelte@5.28.6)(vite@6.3.5(@types/node@24.0.1)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1)))(wrangler@4.14.4(@cloudflare/workers-types@4.20250514.0))': dependencies: '@cloudflare/workers-types': 4.20250514.0 - '@sveltejs/kit': 2.21.0(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.28.6)(vite@6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1)))(svelte@5.28.6)(vite@6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1)) + '@sveltejs/kit': 2.21.0(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.28.6)(vite@6.3.5(@types/node@24.0.1)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1)))(svelte@5.28.6)(vite@6.3.5(@types/node@24.0.1)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1)) worktop: 0.8.0-next.18 wrangler: 4.14.4(@cloudflare/workers-types@4.20250514.0) - '@sveltejs/kit@2.21.0(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.28.6)(vite@6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1)))(svelte@5.28.6)(vite@6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1))': + '@sveltejs/kit@2.21.0(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.28.6)(vite@6.3.5(@types/node@24.0.1)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1)))(svelte@5.28.6)(vite@6.3.5(@types/node@24.0.1)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1))': dependencies: '@sveltejs/acorn-typescript': 1.0.5(acorn@8.14.1) - '@sveltejs/vite-plugin-svelte': 5.0.3(svelte@5.28.6)(vite@6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1)) + '@sveltejs/vite-plugin-svelte': 5.0.3(svelte@5.28.6)(vite@6.3.5(@types/node@24.0.1)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1)) '@types/cookie': 0.6.0 acorn: 8.14.1 cookie: 0.6.0 @@ -3238,7 +3241,7 @@ snapshots: set-cookie-parser: 2.7.1 sirv: 3.0.1 svelte: 5.28.6 - vite: 6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1) + vite: 6.3.5(@types/node@24.0.1)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1) '@sveltejs/package@2.3.11(svelte@5.28.6)(typescript@5.8.3)': dependencies: @@ -3251,25 +3254,25 @@ snapshots: transitivePeerDependencies: - typescript - '@sveltejs/vite-plugin-svelte-inspector@4.0.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.28.6)(vite@6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1)))(svelte@5.28.6)(vite@6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1))': + '@sveltejs/vite-plugin-svelte-inspector@4.0.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.28.6)(vite@6.3.5(@types/node@24.0.1)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1)))(svelte@5.28.6)(vite@6.3.5(@types/node@24.0.1)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1))': dependencies: - '@sveltejs/vite-plugin-svelte': 5.0.3(svelte@5.28.6)(vite@6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1)) + '@sveltejs/vite-plugin-svelte': 5.0.3(svelte@5.28.6)(vite@6.3.5(@types/node@24.0.1)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1)) debug: 4.4.0 svelte: 5.28.6 - vite: 6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1) + vite: 6.3.5(@types/node@24.0.1)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1) transitivePeerDependencies: - supports-color - '@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.28.6)(vite@6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1))': + '@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.28.6)(vite@6.3.5(@types/node@24.0.1)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1))': dependencies: - '@sveltejs/vite-plugin-svelte-inspector': 4.0.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.28.6)(vite@6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1)))(svelte@5.28.6)(vite@6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1)) + '@sveltejs/vite-plugin-svelte-inspector': 4.0.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.28.6)(vite@6.3.5(@types/node@24.0.1)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1)))(svelte@5.28.6)(vite@6.3.5(@types/node@24.0.1)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1)) debug: 4.4.0 deepmerge: 4.3.1 kleur: 4.1.5 magic-string: 0.30.17 svelte: 5.28.6 - vite: 6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1) - vitefu: 1.0.6(vite@6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1)) + vite: 6.3.5(@types/node@24.0.1)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1) + vitefu: 1.0.6(vite@6.3.5(@types/node@24.0.1)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1)) transitivePeerDependencies: - supports-color @@ -3352,12 +3355,12 @@ snapshots: postcss-selector-parser: 6.0.10 tailwindcss: 4.1.6 - '@tailwindcss/vite@4.1.6(vite@6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1))': + '@tailwindcss/vite@4.1.6(vite@6.3.5(@types/node@24.0.1)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1))': dependencies: '@tailwindcss/node': 4.1.6 '@tailwindcss/oxide': 4.1.6 tailwindcss: 4.1.6 - vite: 6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1) + vite: 6.3.5(@types/node@24.0.1)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1) '@types/cookie@0.6.0': {} @@ -3395,20 +3398,19 @@ snapshots: '@types/node@12.20.55': {} - '@types/node@22.13.5': - dependencies: - undici-types: 6.20.0 - '@types/node@22.15.18': dependencies: undici-types: 6.21.0 - optional: true + + '@types/node@24.0.1': + dependencies: + undici-types: 7.8.0 '@types/prismjs@1.26.5': {} '@types/resolve@1.17.1': dependencies: - '@types/node': 22.13.5 + '@types/node': 22.15.18 '@types/unist@2.0.11': {} @@ -3421,13 +3423,13 @@ snapshots: chai: 5.2.0 tinyrainbow: 2.0.0 - '@vitest/mocker@3.1.3(vite@6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1))': + '@vitest/mocker@3.1.3(vite@6.3.5(@types/node@24.0.1)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1))': dependencies: '@vitest/spy': 3.1.3 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: - vite: 6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1) + vite: 6.3.5(@types/node@24.0.1)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1) '@vitest/pretty-format@3.1.3': dependencies: @@ -4536,10 +4538,9 @@ snapshots: ufo@1.6.1: {} - undici-types@6.20.0: {} + undici-types@6.21.0: {} - undici-types@6.21.0: - optional: true + undici-types@7.8.0: {} undici@5.29.0: dependencies: @@ -4594,13 +4595,13 @@ snapshots: '@types/unist': 2.0.11 unist-util-stringify-position: 2.0.3 - vite-node@3.1.3(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1): + vite-node@3.1.3(@types/node@24.0.1)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1): dependencies: cac: 6.7.14 debug: 4.4.1 es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1) + vite: 6.3.5(@types/node@24.0.1)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1) transitivePeerDependencies: - '@types/node' - jiti @@ -4615,7 +4616,7 @@ snapshots: - tsx - yaml - vite@6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1): + vite@6.3.5(@types/node@24.0.1)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1): dependencies: esbuild: 0.25.4 fdir: 6.4.4(picomatch@4.0.2) @@ -4624,21 +4625,21 @@ snapshots: rollup: 4.40.2 tinyglobby: 0.2.13 optionalDependencies: - '@types/node': 22.15.18 + '@types/node': 24.0.1 fsevents: 2.3.3 jiti: 2.4.2 lightningcss: 1.29.2 tsx: 4.19.4 yaml: 2.7.1 - vitefu@1.0.6(vite@6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1)): + vitefu@1.0.6(vite@6.3.5(@types/node@24.0.1)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1)): optionalDependencies: - vite: 6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1) + vite: 6.3.5(@types/node@24.0.1)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1) - vitest@3.1.3(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1): + vitest@3.1.3(@types/node@24.0.1)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1): dependencies: '@vitest/expect': 3.1.3 - '@vitest/mocker': 3.1.3(vite@6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1)) + '@vitest/mocker': 3.1.3(vite@6.3.5(@types/node@24.0.1)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1)) '@vitest/pretty-format': 3.1.3 '@vitest/runner': 3.1.3 '@vitest/snapshot': 3.1.3 @@ -4655,11 +4656,11 @@ snapshots: tinyglobby: 0.2.13 tinypool: 1.0.2 tinyrainbow: 2.0.0 - vite: 6.3.5(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1) - vite-node: 3.1.3(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1) + vite: 6.3.5(@types/node@24.0.1)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1) + vite-node: 3.1.3(@types/node@24.0.1)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.4)(yaml@2.7.1) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 22.15.18 + '@types/node': 24.0.1 transitivePeerDependencies: - jiti - less