diff --git a/README.md b/README.md index ab48d99..721ec56 100644 --- a/README.md +++ b/README.md @@ -46,22 +46,14 @@ It's recommended to initialize Palettez in a synchronous script to avoid theme f ;(async () => { const themeStore = window.palettez.createThemeStore({ config: { - colorScheme: { - label: 'Color scheme', - options: { - system: { - value: 'System', - isDefault: true, - media: { - query: '(prefers-color-scheme: dark)', - ifMatch: 'dark', - ifNotMatch: 'light', - }, - }, - light: { value: 'Light' }, - dark: { value: 'Dark' }, + colorScheme: [ + { + value: 'system', + media: ['(prefers-color-scheme: dark)', 'dark', 'light'], }, - }, + 'light', + 'dark', + ], }, }) @@ -101,41 +93,26 @@ const themeStore = createThemeStore({ // required, specify theme and options config: { - colorScheme: { - label: 'Color scheme', - options: { - system: { - value: 'System', - isDefault: true, - - // only supported client-side - media: { - query: '(prefers-color-scheme: dark)', - ifMatch: 'dark', - ifNotMatch: 'light', - }, - }, - light: { value: 'Light' }, - dark: { value: 'Dark' }, + colorScheme: [ + { + value: 'system', + media: ['(prefers-color-scheme: dark)', 'dark', 'light'], }, - }, - - contrast: { - label: 'Contrast', - options: { - system: { - value: 'System', - isDefault: true, - media: { - query: '(prefers-contrast: more) and (forced-colors: none)', - ifMatch: 'more', - ifNotMatch: 'standard', - }, - }, - standard: { value: 'Standard' }, - high: { value: 'High' }, + 'light', + 'dark', + ], + contrast: [ + { + value: 'system', + media: [ + '(prefers-contrast: more) and (forced-colors: none)', + 'high', + 'standard', + ], }, - }, + 'standard', + 'high', + ], }, // optional, specify your own storage solution. localStorage is used by default. diff --git a/demos/astro/package.json b/demos/astro/package.json index 148a69f..16c1dfc 100644 --- a/demos/astro/package.json +++ b/demos/astro/package.json @@ -7,15 +7,15 @@ "dev": "astro dev --port 3000" }, "dependencies": { - "astro": "4.14.2", + "astro": "4.15.1", "palettez": "workspace:*", "react": "18.3.1", "react-dom": "18.3.1" }, "devDependencies": { "@astrojs/react": "3.6.2", - "@astrojs/vercel": "7.7.2", - "@types/react": "18.3.3", + "@astrojs/vercel": "7.8.0", + "@types/react": "18.3.4", "@types/react-dom": "18.3.0", "typescript": "5.5.4" } diff --git a/demos/astro/src/pages/_sync-theme-select.tsx b/demos/astro/src/pages/_sync-theme-select.tsx index 87cf000..6d60566 100644 --- a/demos/astro/src/pages/_sync-theme-select.tsx +++ b/demos/astro/src/pages/_sync-theme-select.tsx @@ -5,31 +5,27 @@ export function ThemeSelect({ themesAndOptions, }: { storeKey: string - themesAndOptions: Array<{ - key: string - label: string - options: Array<{ key: string; value: string }> - }> + themesAndOptions: Array<[string, Array]> }) { const { themes, setThemes } = usePalettez(() => window.palettez.getThemeStore(storeKey), ) - return themesAndOptions.map((theme) => ( -
+ return themesAndOptions.map(([theme, options]) => ( +
- {' '} + {' '} diff --git a/demos/astro/src/pages/_theme-select.tsx b/demos/astro/src/pages/_theme-select.tsx index f0549e2..0fe4f2e 100644 --- a/demos/astro/src/pages/_theme-select.tsx +++ b/demos/astro/src/pages/_theme-select.tsx @@ -6,11 +6,7 @@ export function ThemeSelect({ themesAndOptions, }: { storeKey: string - themesAndOptions: Array<{ - key: string - label: string - options: Array<{ key: string; value: string }> - }> + themesAndOptions: Array<[string, Array]> }) { const stores = useThemeStoreContext() @@ -18,21 +14,21 @@ export function ThemeSelect({ initOnMount: true, }) - return themesAndOptions.map((theme) => ( -
+ return themesAndOptions.map(([theme, options]) => ( +
- {' '} + {' '} diff --git a/demos/astro/src/pages/index.astro b/demos/astro/src/pages/index.astro index f13b105..15e7d76 100644 --- a/demos/astro/src/pages/index.astro +++ b/demos/astro/src/pages/index.astro @@ -1,35 +1,21 @@ --- -import { getThemesAndOptions } from 'palettez' +import { type ThemeConfig, getThemesAndOptions } from 'palettez' import palettez from 'palettez/raw?raw' import { singleStoreScript } from './_single-store-script' import { ThemeSelect } from './_sync-theme-select' import './_style.css' const config = { - colorScheme: { - label: 'Color scheme', - options: { - system: { - value: 'System', - isDefault: true, - media: { - query: '(prefers-color-scheme: dark)', - ifMatch: 'dark', - ifNotMatch: 'light', - }, - }, - light: { value: 'Light' }, - dark: { value: 'Dark' }, + colorScheme: [ + { + value: 'system', + media: ['(prefers-color-scheme: dark)', 'dark', 'light'], }, - }, - contrast: { - label: 'Contrast', - options: { - standard: { value: 'Standard', isDefault: true }, - high: { value: 'High' }, - }, - }, -} + 'light', + 'dark', + ], + contrast: ['standard', 'high'], +} as const satisfies ThemeConfig const themesAndOptions = getThemesAndOptions(config) diff --git a/demos/astro/src/pages/multi-store-with-server-persistence.astro b/demos/astro/src/pages/multi-store-with-server-persistence.astro index 912bdbc..9b25754 100644 --- a/demos/astro/src/pages/multi-store-with-server-persistence.astro +++ b/demos/astro/src/pages/multi-store-with-server-persistence.astro @@ -1,5 +1,5 @@ --- -import { getThemesAndOptions } from 'palettez' +import { type ThemeConfig, getThemesAndOptions } from 'palettez' import palettez from 'palettez/raw?raw' import { createStoresScript } from './_multi-store-scripts' import { ThemeSelect } from './_sync-theme-select' @@ -9,30 +9,16 @@ import './_style.css' export const prerender = false const config = { - colorScheme: { - label: 'Color scheme', - options: { - system: { - value: 'System', - isDefault: true, - media: { - query: '(prefers-color-scheme: dark)', - ifMatch: 'dark', - ifNotMatch: 'light', - }, - }, - light: { value: 'Light' }, - dark: { value: 'Dark' }, + colorScheme: [ + { + value: 'system', + media: ['(prefers-color-scheme: dark)', 'dark', 'light'], }, - }, - contrast: { - label: 'Contrast', - options: { - standard: { value: 'Standard', isDefault: true }, - high: { value: 'High' }, - }, - }, -} + 'light', + 'dark', + ], + contrast: ['standard', 'high'], +} as const satisfies ThemeConfig const themeStoreKeys = ['app', 'section1', 'section2'] diff --git a/demos/astro/src/pages/no-hydration-mismatch.astro b/demos/astro/src/pages/no-hydration-mismatch.astro index c53b499..a75bd82 100644 --- a/demos/astro/src/pages/no-hydration-mismatch.astro +++ b/demos/astro/src/pages/no-hydration-mismatch.astro @@ -1,35 +1,21 @@ --- -import { getThemesAndOptions } from 'palettez' +import { type ThemeConfig, getThemesAndOptions } from 'palettez' import { Page } from './_no-hydration-mismatch' import './_style.css' export const prerender = false const config = { - colorScheme: { - label: 'Color scheme', - options: { - // system: { - // value: 'System', - // isDefault: true, - // media: { - // query: '(prefers-color-scheme: dark)', - // ifMatch: 'dark', - // ifNotMatch: 'light', - // }, - // }, - light: { value: 'Light' }, - dark: { value: 'Dark' }, - }, - }, - contrast: { - label: 'Contrast', - options: { - standard: { value: 'Standard', isDefault: true }, - high: { value: 'High' }, - }, - }, -} + colorScheme: [ + // { + // value: 'system', + // media: ['(prefers-color-scheme: dark)', 'dark', 'light'], + // }, + 'light', + 'dark', + ], + contrast: ['standard', 'high'], +} as const satisfies ThemeConfig const configsByKey = { app: config, diff --git a/demos/next/app/multi-store-with-server-persistence/page.tsx b/demos/next/app/multi-store-with-server-persistence/page.tsx index dc9e8d6..a0c208b 100644 --- a/demos/next/app/multi-store-with-server-persistence/page.tsx +++ b/demos/next/app/multi-store-with-server-persistence/page.tsx @@ -1,34 +1,20 @@ import { cookies } from 'next/headers' -import { getThemesAndOptions } from 'palettez' +import { type ThemeConfig, getThemesAndOptions } from 'palettez' import { createStoresScript } from '../../lib/multi-store-scripts' import { ThemeSelect } from '../../lib/sync-theme-select' import { ThemeWrapper } from '../../lib/sync-theme-wrapper' const config = { - colorScheme: { - label: 'Color scheme', - options: { - system: { - value: 'System', - isDefault: true, - media: { - query: '(prefers-color-scheme: dark)', - ifMatch: 'dark', - ifNotMatch: 'light', - }, - }, - light: { value: 'Light' }, - dark: { value: 'Dark' }, - }, - }, - contrast: { - label: 'Contrast', - options: { - standard: { value: 'Standard', isDefault: true }, - high: { value: 'High' }, + colorScheme: [ + { + value: 'system', + media: ['(prefers-color-scheme: dark)', 'dark', 'light'], }, - }, -} + 'light', + 'dark', + ], + contrast: ['standard', 'high'], +} as const satisfies ThemeConfig const themeStoreKeys = ['app', 'section1', 'section2'] diff --git a/demos/next/app/no-hydration-mismatch/page.tsx b/demos/next/app/no-hydration-mismatch/page.tsx index 77fb122..2f8fc60 100644 --- a/demos/next/app/no-hydration-mismatch/page.tsx +++ b/demos/next/app/no-hydration-mismatch/page.tsx @@ -1,34 +1,20 @@ import { cookies } from 'next/headers' -import { getThemesAndOptions } from 'palettez' +import { type ThemeConfig, getThemesAndOptions } from 'palettez' import { ThemeSelect } from '../../lib/theme-select' import { ThemeStoreProvider } from '../../lib/theme-store-provider' import { ThemeWrapper } from '../../lib/theme-wrapper' const config = { - colorScheme: { - label: 'Color scheme', - options: { - // system: { - // value: 'System', - // isDefault: true, - // media: { - // query: '(prefers-color-scheme: dark)', - // ifMatch: 'dark', - // ifNotMatch: 'light', - // }, - // }, - light: { value: 'Light' }, - dark: { value: 'Dark' }, + colorScheme: [ + { + value: 'system', + media: ['(prefers-color-scheme: dark)', 'dark', 'light'], }, - }, - contrast: { - label: 'Contrast', - options: { - standard: { value: 'Standard', isDefault: true }, - high: { value: 'High' }, - }, - }, -} + 'light', + 'dark', + ], + contrast: ['standard', 'high'], +} as const satisfies ThemeConfig const configsByKey = { app: config, diff --git a/demos/next/app/page.tsx b/demos/next/app/page.tsx index 91c3071..1fd6762 100644 --- a/demos/next/app/page.tsx +++ b/demos/next/app/page.tsx @@ -1,33 +1,19 @@ -import { getThemesAndOptions } from 'palettez' +import { type ThemeConfig, getThemesAndOptions } from 'palettez' import { singleStoreScript } from '../lib/single-store-script' import { ThemeSelect } from '../lib/sync-theme-select' import { ThemeWrapper } from '../lib/sync-theme-wrapper' const config = { - colorScheme: { - label: 'Color scheme', - options: { - system: { - value: 'System', - isDefault: true, - media: { - query: '(prefers-color-scheme: dark)', - ifMatch: 'dark', - ifNotMatch: 'light', - }, - }, - light: { value: 'Light' }, - dark: { value: 'Dark' }, + colorScheme: [ + { + value: 'system', + media: ['(prefers-color-scheme: dark)', 'dark', 'light'], }, - }, - contrast: { - label: 'Contrast', - options: { - standard: { value: 'Standard', isDefault: true }, - high: { value: 'High' }, - }, - }, -} + 'light', + 'dark', + ], + contrast: ['standard', 'high'], +} as const satisfies ThemeConfig const themesAndOptions = getThemesAndOptions(config) diff --git a/demos/next/lib/sync-theme-select.tsx b/demos/next/lib/sync-theme-select.tsx index 97eb586..c3cd833 100644 --- a/demos/next/lib/sync-theme-select.tsx +++ b/demos/next/lib/sync-theme-select.tsx @@ -6,31 +6,27 @@ export function ThemeSelect({ themesAndOptions, }: { storeKey: string - themesAndOptions: Array<{ - key: string - label: string - options: Array<{ key: string; value: string }> - }> + themesAndOptions: Array<[string, Array]> }) { const { themes, setThemes } = usePalettez(() => window.palettez.getThemeStore(storeKey), ) - return themesAndOptions.map((theme) => ( -
+ return themesAndOptions.map(([theme, options]) => ( +
- {' '} + {' '} diff --git a/demos/next/lib/theme-select.tsx b/demos/next/lib/theme-select.tsx index 3466e28..932ae19 100644 --- a/demos/next/lib/theme-select.tsx +++ b/demos/next/lib/theme-select.tsx @@ -7,11 +7,7 @@ export function ThemeSelect({ themesAndOptions, }: { storeKey: string - themesAndOptions: Array<{ - key: string - label: string - options: Array<{ key: string; value: string }> - }> + themesAndOptions: Array<[string, Array]> }) { const stores = useThemeStoreContext() @@ -19,21 +15,21 @@ export function ThemeSelect({ initOnMount: true, }) - return themesAndOptions.map((theme) => ( -
+ return themesAndOptions.map(([theme, options]) => ( +
- {' '} + {' '} diff --git a/demos/next/package.json b/demos/next/package.json index 602a07b..59488e6 100644 --- a/demos/next/package.json +++ b/demos/next/package.json @@ -9,7 +9,7 @@ "dependencies": { "body-parser": "1.20.2", "cookies": "0.9.1", - "next": "14.2.5", + "next": "14.2.7", "palettez": "workspace:*", "react": "18.3.1", "react-dom": "18.3.1" @@ -17,8 +17,8 @@ "devDependencies": { "@types/body-parser": "1.19.5", "@types/cookie": "0.6.0", - "@types/node": "22.4.0", - "@types/react": "18.3.3", + "@types/node": "22.5.1", + "@types/react": "18.3.4", "@types/react-dom": "18.3.0", "typescript": "5.5.4" } diff --git a/demos/next/pages/pages/basic-usage.tsx b/demos/next/pages/pages/basic-usage.tsx index c4daa4c..1a5ae37 100644 --- a/demos/next/pages/pages/basic-usage.tsx +++ b/demos/next/pages/pages/basic-usage.tsx @@ -1,33 +1,19 @@ -import { getThemesAndOptions } from 'palettez' +import { type ThemeConfig, getThemesAndOptions } from 'palettez' import { singleStoreScript } from '../../lib/single-store-script' import { ThemeSelect } from '../../lib/sync-theme-select' import { ThemeWrapper } from '../../lib/sync-theme-wrapper' const config = { - colorScheme: { - label: 'Color scheme', - options: { - system: { - value: 'System', - isDefault: true, - media: { - query: '(prefers-color-scheme: dark)', - ifMatch: 'dark', - ifNotMatch: 'light', - }, - }, - light: { value: 'Light' }, - dark: { value: 'Dark' }, + colorScheme: [ + { + value: 'system', + media: ['(prefers-color-scheme: dark)', 'dark', 'light'], }, - }, - contrast: { - label: 'Contrast', - options: { - standard: { value: 'Standard', isDefault: true }, - high: { value: 'High' }, - }, - }, -} + 'light', + 'dark', + ], + contrast: ['standard', 'high'], +} as const satisfies ThemeConfig const themesAndOptions = getThemesAndOptions(config) diff --git a/demos/next/pages/pages/multi-store-with-server-persistence.tsx b/demos/next/pages/pages/multi-store-with-server-persistence.tsx index d20cc4e..88861fd 100644 --- a/demos/next/pages/pages/multi-store-with-server-persistence.tsx +++ b/demos/next/pages/pages/multi-store-with-server-persistence.tsx @@ -1,36 +1,22 @@ import util from 'node:util' import bodyParser from 'body-parser' import cookie from 'cookie' -import { getThemesAndOptions } from 'palettez' +import { type ThemeConfig, getThemesAndOptions } from 'palettez' import { createStoresScript } from '../../lib/multi-store-scripts' import { ThemeSelect } from '../../lib/sync-theme-select' import { ThemeWrapper } from '../../lib/sync-theme-wrapper' const config = { - colorScheme: { - label: 'Color scheme', - options: { - system: { - value: 'System', - isDefault: true, - media: { - query: '(prefers-color-scheme: dark)', - ifMatch: 'dark', - ifNotMatch: 'light', - }, - }, - light: { value: 'Light' }, - dark: { value: 'Dark' }, + colorScheme: [ + { + value: 'system', + media: ['(prefers-color-scheme: dark)', 'dark', 'light'], }, - }, - contrast: { - label: 'Contrast', - options: { - standard: { value: 'Standard', isDefault: true }, - high: { value: 'High' }, - }, - }, -} + 'light', + 'dark', + ], + contrast: ['standard', 'high'], +} as const satisfies ThemeConfig const themeStoreKeys = ['app', 'section1', 'section2'] diff --git a/demos/next/pages/pages/no-hydration-mismatch.tsx b/demos/next/pages/pages/no-hydration-mismatch.tsx index 122ac71..fe99041 100644 --- a/demos/next/pages/pages/no-hydration-mismatch.tsx +++ b/demos/next/pages/pages/no-hydration-mismatch.tsx @@ -1,36 +1,22 @@ import util from 'node:util' import bodyParser from 'body-parser' import cookie from 'cookie' -import { getThemesAndOptions } from 'palettez' +import { type ThemeConfig, getThemesAndOptions } from 'palettez' import { ThemeSelect } from '../../lib/theme-select' import { ThemeStoreProvider } from '../../lib/theme-store-provider' import { ThemeWrapper } from '../../lib/theme-wrapper' const config = { - colorScheme: { - label: 'Color scheme', - options: { - // system: { - // value: 'System', - // isDefault: true, - // media: { - // query: '(prefers-color-scheme: dark)', - // ifMatch: 'dark', - // ifNotMatch: 'light', - // }, - // }, - light: { value: 'Light' }, - dark: { value: 'Dark' }, - }, - }, - contrast: { - label: 'Contrast', - options: { - standard: { value: 'Standard', isDefault: true }, - high: { value: 'High' }, - }, - }, -} + colorScheme: [ + // { + // value: 'system', + // media: ['(prefers-color-scheme: dark)', 'dark', 'light'], + // }, + 'light', + 'dark', + ], + contrast: ['standard', 'high'], +} as const satisfies ThemeConfig const configsByKey = { app: config, diff --git a/demos/remix/app/routes/_index.tsx b/demos/remix/app/routes/_index.tsx index 9cbed2d..c36ed81 100644 --- a/demos/remix/app/routes/_index.tsx +++ b/demos/remix/app/routes/_index.tsx @@ -1,35 +1,21 @@ import { Links, Meta, Scripts } from '@remix-run/react' -import { getThemesAndOptions } from 'palettez' +import { type ThemeConfig, getThemesAndOptions } from 'palettez' import palettez from 'palettez/raw?raw' import { singleStoreScript } from '../single-store-script' import { ThemeSelect } from '../sync-theme-select' import { ThemeWrapper } from '../sync-theme-wrapper' const config = { - colorScheme: { - label: 'Color scheme', - options: { - system: { - value: 'System', - isDefault: true, - media: { - query: '(prefers-color-scheme: dark)', - ifMatch: 'dark', - ifNotMatch: 'light', - }, - }, - light: { value: 'Light' }, - dark: { value: 'Dark' }, + colorScheme: [ + { + value: 'system', + media: ['(prefers-color-scheme: dark)', 'dark', 'light'], }, - }, - contrast: { - label: 'Contrast', - options: { - standard: { value: 'Standard', isDefault: true }, - high: { value: 'High' }, - }, - }, -} + 'light', + 'dark', + ], + contrast: ['standard', 'high'], +} as const satisfies ThemeConfig const themesAndOptions = getThemesAndOptions(config) diff --git a/demos/remix/app/routes/multi-store-with-server-persistence.tsx b/demos/remix/app/routes/multi-store-with-server-persistence.tsx index f99d9c6..5590387 100644 --- a/demos/remix/app/routes/multi-store-with-server-persistence.tsx +++ b/demos/remix/app/routes/multi-store-with-server-persistence.tsx @@ -10,7 +10,7 @@ import { type LoaderFunctionArgs, json, } from '@vercel/remix' -import { getThemesAndOptions } from 'palettez' +import { type ThemeConfig, getThemesAndOptions } from 'palettez' import palettez from 'palettez/raw?raw' import { createStoresScript } from '../multi-store-scripts' import { ThemeSelect } from '../sync-theme-select' @@ -18,30 +18,16 @@ import { ThemeWrapper } from '../sync-theme-wrapper' import { getThemeSession1 } from '../theme.server' const config = { - colorScheme: { - label: 'Color scheme', - options: { - system: { - value: 'System', - isDefault: true, - media: { - query: '(prefers-color-scheme: dark)', - ifMatch: 'dark', - ifNotMatch: 'light', - }, - }, - light: { value: 'Light' }, - dark: { value: 'Dark' }, + colorScheme: [ + { + value: 'system', + media: ['(prefers-color-scheme: dark)', 'dark', 'light'], }, - }, - contrast: { - label: 'Contrast', - options: { - standard: { value: 'Standard', isDefault: true }, - high: { value: 'High' }, - }, - }, -} + 'light', + 'dark', + ], + contrast: ['standard', 'high'], +} as const satisfies ThemeConfig const themeStoreKeys = ['app', 'section1', 'section2'] diff --git a/demos/remix/app/routes/no-hydration-mismatch.tsx b/demos/remix/app/routes/no-hydration-mismatch.tsx index 4de1a4c..a0cdf75 100644 --- a/demos/remix/app/routes/no-hydration-mismatch.tsx +++ b/demos/remix/app/routes/no-hydration-mismatch.tsx @@ -10,37 +10,23 @@ import { type LoaderFunctionArgs, json, } from '@vercel/remix' -import { getThemesAndOptions } from 'palettez' +import { type ThemeConfig, getThemesAndOptions } from 'palettez' import { ThemeSelect } from '../theme-select' import { ThemeStoreProvider } from '../theme-store-provider' import { ThemeWrapper } from '../theme-wrapper' import { getThemeSession2 } from '../theme.server' const config = { - colorScheme: { - label: 'Color scheme', - options: { - // system: { - // value: 'System', - // isDefault: true, - // media: { - // query: '(prefers-color-scheme: dark)', - // ifMatch: 'dark', - // ifNotMatch: 'light', - // }, - // }, - light: { value: 'Light' }, - dark: { value: 'Dark' }, - }, - }, - contrast: { - label: 'Contrast', - options: { - standard: { value: 'Standard', isDefault: true }, - high: { value: 'High' }, - }, - }, -} + colorScheme: [ + // { + // value: 'system', + // media: ['(prefers-color-scheme: dark)', 'dark', 'light'], + // }, + 'light', + 'dark', + ], + contrast: ['standard', 'high'], +} as const satisfies ThemeConfig const configsByKey = { app: config, diff --git a/demos/remix/app/sync-theme-select.tsx b/demos/remix/app/sync-theme-select.tsx index 87cf000..6d60566 100644 --- a/demos/remix/app/sync-theme-select.tsx +++ b/demos/remix/app/sync-theme-select.tsx @@ -5,31 +5,27 @@ export function ThemeSelect({ themesAndOptions, }: { storeKey: string - themesAndOptions: Array<{ - key: string - label: string - options: Array<{ key: string; value: string }> - }> + themesAndOptions: Array<[string, Array]> }) { const { themes, setThemes } = usePalettez(() => window.palettez.getThemeStore(storeKey), ) - return themesAndOptions.map((theme) => ( -
+ return themesAndOptions.map(([theme, options]) => ( +
- {' '} + {' '} diff --git a/demos/remix/app/theme-select.tsx b/demos/remix/app/theme-select.tsx index 2d9cd0d..f5b2464 100644 --- a/demos/remix/app/theme-select.tsx +++ b/demos/remix/app/theme-select.tsx @@ -6,11 +6,7 @@ export function ThemeSelect({ themesAndOptions, }: { storeKey: string - themesAndOptions: Array<{ - key: string - label: string - options: Array<{ key: string; value: string }> - }> + themesAndOptions: Array<[string, Array]> }) { const stores = useThemeStoreContext() @@ -18,21 +14,21 @@ export function ThemeSelect({ initOnMount: true, }) - return themesAndOptions.map((theme) => ( -
+ return themesAndOptions.map(([theme, options]) => ( +
- {' '} + {' '} diff --git a/demos/remix/package.json b/demos/remix/package.json index 30268c3..50e7ffd 100644 --- a/demos/remix/package.json +++ b/demos/remix/package.json @@ -12,18 +12,18 @@ "@remix-run/react": "2.11.2", "@remix-run/server-runtime": "2.11.2", "@vercel/remix": "2.11.2", - "isbot": "5.1.16", + "isbot": "5.1.17", "palettez": "workspace:*", "react": "18.3.1", "react-dom": "18.3.1" }, "devDependencies": { "@remix-run/dev": "2.11.2", - "@types/node": "22.4.0", - "@types/react": "18.3.3", + "@types/node": "22.5.1", + "@types/react": "18.3.4", "@types/react-dom": "18.3.0", "typescript": "5.5.4", - "vite": "^5.4.1", + "vite": "^5.4.2", "vite-tsconfig-paths": "^5.0.1" } } diff --git a/package.json b/package.json index 535cea9..a3052d2 100644 --- a/package.json +++ b/package.json @@ -5,9 +5,9 @@ "@biomejs/biome": "1.8.3", "@changesets/changelog-github": "0.5.0", "@changesets/cli": "2.27.7", - "@commitlint/cli": "19.4.0", - "@commitlint/config-conventional": "19.2.2", - "turbo": "2.0.14" + "@commitlint/cli": "19.4.1", + "@commitlint/config-conventional": "19.4.1", + "turbo": "2.1.0" }, "packageManager": "pnpm@9.7.1" } diff --git a/palettez/package.json b/palettez/package.json index eb2d2ab..ca121c6 100644 --- a/palettez/package.json +++ b/palettez/package.json @@ -1,6 +1,6 @@ { "name": "palettez", - "version": "0.0.18", + "version": "0.0.19", "description": "Palettez", "keywords": ["theming"], "repository": { @@ -40,12 +40,12 @@ "build": "tsup", "dev": "tsup --watch", "size": "pnpm build && size-limit", - "test": "vitest" + "test": "vitest --reporter=basic --disable-console-intercept" }, "devDependencies": { "@size-limit/preset-small-lib": "11.1.4", - "@types/react": "18.3.3", - "jsdom": "24.1.1", + "@types/react": "18.3.4", + "jsdom": "25.0.0", "react": "18.3.1", "react-dom": "18.3.1", "size-limit": "11.1.4", diff --git a/palettez/src/index.ts b/palettez/src/index.ts index 4d90620..174efa7 100644 --- a/palettez/src/index.ts +++ b/palettez/src/index.ts @@ -25,18 +25,22 @@ export { type ThemeOption = { value: string isDefault?: boolean - media?: { query: string; ifMatch: string; ifNotMatch: string } + media?: [string, string, string] } -type ThemeConfig = Record< - string, - { - label: string - options: Record - } -> +type ThemeConfig = Record> + +type KeyedThemeConfig = Record> -type Themes = { [K in keyof T]: keyof T[K]['options'] } +type Themes = { + [K in keyof T]: T[K] extends Array + ? U extends string + ? U + : U extends { value: string } + ? U['value'] + : never + : never +} type Listener = ( updatedThemes: Themes, @@ -56,31 +60,23 @@ const isClient = !!( typeof window.document.createElement !== 'undefined' ) -function getThemesAndOptions(config: ThemeConfig) { - return Object.entries(config).reduce< - Array<{ - key: string - label: string - options: Array<{ key: string; value: string }> - }> - >((acc, [theme, themeConfig]) => { - acc.push({ - key: theme, - label: themeConfig.label, - options: Object.entries(themeConfig.options).map( - ([optionKey, { value }]) => ({ - key: optionKey, - value, - }), +function getThemesAndOptions( + config: ThemeConfig, +): Array<[string, Array]> { + return Object.entries(config).map(([theme, options]) => { + return [ + theme, + options.map((option) => + typeof option === 'string' ? option : option.value, ), - }) - - return acc - }, []) + ] + }) } -class ThemeStore { - #options: Required +class ThemeStore { + #options: Required> & { + config: KeyedThemeConfig + } #storage: StorageAdapter #defaultThemes: Themes @@ -96,16 +92,27 @@ class ThemeStore { initialThemes = {}, storage = localStorageAdapter(), }: ThemeStoreOptions) { - this.#options = { key, config, initialThemes, storage } + const keyedConfig: KeyedThemeConfig = Object.fromEntries( + Object.entries(config).map(([theme, options]) => [ + theme, + Object.fromEntries( + options.map((option) => { + return typeof option === 'string' + ? [option, { value: option }] + : [option.value, option] + }), + ), + ]), + ) - this.#defaultThemes = Object.fromEntries( - Object.entries(config).map(([theme, themeConfig]) => { - const entries = Object.entries(themeConfig.options) + this.#options = { key, config: keyedConfig, initialThemes, storage } + this.#defaultThemes = Object.fromEntries( + Object.entries(keyedConfig).map(([theme, themeOptions]) => { + const options = Object.values(themeOptions) const defaultOption = - entries.find(([, option]) => option.isDefault) || entries[0] - - return [theme, defaultOption![0]] + options.find((option) => option.isDefault) || options[0] + return [theme, defaultOption!.value] }), ) as Themes @@ -116,7 +123,7 @@ class ThemeStore { }) this.#resolvedOptionsByTheme = Object.fromEntries( - Object.keys(config).map((theme) => [theme, {}]), + Object.keys(keyedConfig).map((theme) => [theme, {}]), ) } @@ -195,12 +202,9 @@ class ThemeStore { #resolveThemes = (): Themes => { return Object.fromEntries( Object.entries(this.#currentThemes).map(([theme, optionKey]) => { - const option = this.#options.config[theme]!.options[optionKey]! + const option = this.#options.config[theme]![optionKey]! - const resolved = this.#resolveThemeOption({ - theme, - option: { key: optionKey, ...option }, - }) + const resolved = this.#resolveThemeOption({ theme, option }) return [theme, resolved] }), @@ -212,36 +216,36 @@ class ThemeStore { option, }: { theme: string - option: ThemeOption & { key: string } + option: ThemeOption }): string => { - if (!option.media) return option.key + if (!option.media) return option.value if (!isClient) { console.warn( `[${packageName}] Option with key "media" cannot be resolved in server environment.`, ) - return option.key + return option.value } - if (!this.#resolvedOptionsByTheme[theme]![option.key]) { + if (!this.#resolvedOptionsByTheme[theme]![option.value]) { const { - media: { query, ifMatch, ifNotMatch }, + media: [media, ifMatch, ifNotMatch], } = option - const mq = window.matchMedia(query) + const mq = window.matchMedia(media) - this.#resolvedOptionsByTheme[theme]![option.key] = mq.matches + this.#resolvedOptionsByTheme[theme]![option.value] = mq.matches ? ifMatch : ifNotMatch mq.addEventListener( 'change', (e) => { - this.#resolvedOptionsByTheme[theme]![option.key] = e.matches + this.#resolvedOptionsByTheme[theme]![option.value] = e.matches ? ifMatch : ifNotMatch - if (this.#currentThemes[theme] === option.key) { + if (this.#currentThemes[theme] === option.value) { this.#setThemesAndNotify({ ...this.#currentThemes }) } }, @@ -249,7 +253,7 @@ class ThemeStore { ) } - return this.#resolvedOptionsByTheme[theme]![option.key]! + return this.#resolvedOptionsByTheme[theme]![option.value]! } #notify = (resolvedThemes: Themes): void => { diff --git a/palettez/tests/index.test.ts b/palettez/tests/index.test.ts index ca4cef8..9c807c2 100644 --- a/palettez/tests/index.test.ts +++ b/palettez/tests/index.test.ts @@ -1,46 +1,47 @@ // @vitest-environment jsdom import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import { createThemeStore, getThemeStore } from '../src' +import { + type ThemeConfig, + createThemeStore, + getThemeStore, + getThemesAndOptions, +} from '../src' const mockConfig = { - colorScheme: { - label: 'Color scheme', - options: { - system: { - value: 'System', - isDefault: true, - media: { - query: '(prefers-color-scheme: dark)', - ifMatch: 'dark', - ifNotMatch: 'light', - }, - }, - light: { value: 'Light' }, - dark: { value: 'Dark' }, + colorScheme: [ + { + value: 'system', + media: ['(prefers-color-scheme: dark)', 'dark', 'light'], }, - }, - contrast: { - label: 'Contrast', - options: { - standard: { value: 'Standard', isDefault: true }, - high: { value: 'High' }, - }, - }, -} + 'light', + 'dark', + ], + contrast: ['standard', 'high'], +} as const satisfies ThemeConfig const mockStorage = { getItem: vi.fn(), setItem: vi.fn(), // removeItem: vi.fn(), watch: vi.fn(), -} as const +} const mockOptions = { key: 'palettez', config: mockConfig, storage: () => mockStorage, -} as const +} + +describe('getThemesAndOptions', () => { + it('should return the themes and options', () => { + const themesAndOptions = getThemesAndOptions(mockConfig) + expect(themesAndOptions).toEqual([ + ['colorScheme', ['system', 'light', 'dark']], + ['contrast', ['standard', 'high']], + ]) + }) +}) describe('ThemeStore', () => { beforeEach(() => { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 933fccd..13c46f1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -18,20 +18,20 @@ importers: specifier: 2.27.7 version: 2.27.7 '@commitlint/cli': - specifier: 19.4.0 - version: 19.4.0(@types/node@22.4.0)(typescript@5.5.4) + specifier: 19.4.1 + version: 19.4.1(@types/node@22.5.1)(typescript@5.5.4) '@commitlint/config-conventional': - specifier: 19.2.2 - version: 19.2.2 + specifier: 19.4.1 + version: 19.4.1 turbo: - specifier: 2.0.14 - version: 2.0.14 + specifier: 2.1.0 + version: 2.1.0 demos/astro: dependencies: astro: - specifier: 4.14.2 - version: 4.14.2(@types/node@22.4.0)(rollup@4.20.0)(typescript@5.5.4) + specifier: 4.15.1 + version: 4.15.1(@types/node@22.5.1)(rollup@4.21.1)(typescript@5.5.4) palettez: specifier: workspace:* version: link:../../palettez @@ -44,13 +44,13 @@ importers: devDependencies: '@astrojs/react': specifier: 3.6.2 - version: 3.6.2(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(vite@5.4.1(@types/node@22.4.0)) + version: 3.6.2(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(vite@5.4.2(@types/node@22.5.1)) '@astrojs/vercel': - specifier: 7.7.2 - version: 7.7.2(astro@4.14.2(@types/node@22.4.0)(rollup@4.20.0)(typescript@5.5.4))(next@14.2.5(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) + specifier: 7.8.0 + version: 7.8.0(astro@4.15.1(@types/node@22.5.1)(rollup@4.21.1)(typescript@5.5.4))(next@14.2.7(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) '@types/react': - specifier: 18.3.3 - version: 18.3.3 + specifier: 18.3.4 + version: 18.3.4 '@types/react-dom': specifier: 18.3.0 version: 18.3.0 @@ -67,8 +67,8 @@ importers: specifier: 0.9.1 version: 0.9.1 next: - specifier: 14.2.5 - version: 14.2.5(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 14.2.7 + version: 14.2.7(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) palettez: specifier: workspace:* version: link:../../palettez @@ -86,11 +86,11 @@ importers: specifier: 0.6.0 version: 0.6.0 '@types/node': - specifier: 22.4.0 - version: 22.4.0 + specifier: 22.5.1 + version: 22.5.1 '@types/react': - specifier: 18.3.3 - version: 18.3.3 + specifier: 18.3.4 + version: 18.3.4 '@types/react-dom': specifier: 18.3.0 version: 18.3.0 @@ -111,10 +111,10 @@ importers: version: 2.11.2(typescript@5.5.4) '@vercel/remix': specifier: 2.11.2 - version: 2.11.2(@remix-run/dev@2.11.2(@remix-run/react@2.11.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4))(@remix-run/serve@2.11.2(typescript@5.5.4))(@types/node@22.4.0)(typescript@5.5.4)(vite@5.4.1(@types/node@22.4.0)))(@remix-run/node@2.11.2(typescript@5.5.4))(@remix-run/server-runtime@2.11.2(typescript@5.5.4))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 2.11.2(@remix-run/dev@2.11.2(@remix-run/react@2.11.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4))(@remix-run/serve@2.11.2(typescript@5.5.4))(@types/node@22.5.1)(typescript@5.5.4)(vite@5.4.2(@types/node@22.5.1)))(@remix-run/node@2.11.2(typescript@5.5.4))(@remix-run/server-runtime@2.11.2(typescript@5.5.4))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) isbot: - specifier: 5.1.16 - version: 5.1.16 + specifier: 5.1.17 + version: 5.1.17 palettez: specifier: workspace:* version: link:../../palettez @@ -127,13 +127,13 @@ importers: devDependencies: '@remix-run/dev': specifier: 2.11.2 - version: 2.11.2(@remix-run/react@2.11.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4))(@remix-run/serve@2.11.2(typescript@5.5.4))(@types/node@22.4.0)(typescript@5.5.4)(vite@5.4.1(@types/node@22.4.0)) + version: 2.11.2(@remix-run/react@2.11.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4))(@remix-run/serve@2.11.2(typescript@5.5.4))(@types/node@22.5.1)(typescript@5.5.4)(vite@5.4.2(@types/node@22.5.1)) '@types/node': - specifier: 22.4.0 - version: 22.4.0 + specifier: 22.5.1 + version: 22.5.1 '@types/react': - specifier: 18.3.3 - version: 18.3.3 + specifier: 18.3.4 + version: 18.3.4 '@types/react-dom': specifier: 18.3.0 version: 18.3.0 @@ -141,11 +141,11 @@ importers: specifier: 5.5.4 version: 5.5.4 vite: - specifier: ^5.4.1 - version: 5.4.1(@types/node@22.4.0) + specifier: ^5.4.2 + version: 5.4.2(@types/node@22.5.1) vite-tsconfig-paths: specifier: ^5.0.1 - version: 5.0.1(typescript@5.5.4)(vite@5.4.1(@types/node@22.4.0)) + version: 5.0.1(typescript@5.5.4)(vite@5.4.2(@types/node@22.5.1)) palettez: devDependencies: @@ -153,11 +153,11 @@ importers: specifier: 11.1.4 version: 11.1.4(size-limit@11.1.4) '@types/react': - specifier: 18.3.3 - version: 18.3.3 + specifier: 18.3.4 + version: 18.3.4 jsdom: - specifier: 24.1.1 - version: 24.1.1 + specifier: 25.0.0 + version: 25.0.0 react: specifier: 18.3.1 version: 18.3.1 @@ -175,7 +175,7 @@ importers: version: 5.5.4 vitest: specifier: 2.0.5 - version: 2.0.5(@types/node@22.4.0)(jsdom@24.1.1) + version: 2.0.5(@types/node@22.5.1)(jsdom@25.0.0) packages: @@ -209,8 +209,8 @@ packages: resolution: {integrity: sha512-/ca/+D8MIKEC8/A9cSaPUqQNZm+Es/ZinRv0ZAzvu2ios7POQSsVD+VOj7/hypWNsNM3T7RpfgNq7H2TU1KEHA==} engines: {node: ^18.17.1 || ^20.3.0 || >=21.0.0} - '@astrojs/vercel@7.7.2': - resolution: {integrity: sha512-mwnXz4OHE+X20kyQfrxAoLCe+uIhZ1w+G7fJnERSua9/DgX+j0Gvfku3D33bNyxaIwLQB5BOGAu2eZoi+gna4Q==} + '@astrojs/vercel@7.8.0': + resolution: {integrity: sha512-cpY14PPrKhAsYZp/tfRSIfKdiPctvvPfOH8z3USLJEAJ5lLfToUHEGTJzNfGqCBtd61QftypIxIlTHGuFY30UQ==} peerDependencies: astro: ^4.2.0 @@ -305,6 +305,11 @@ packages: engines: {node: '>=6.0.0'} hasBin: true + '@babel/parser@7.25.6': + resolution: {integrity: sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==} + engines: {node: '>=6.0.0'} + hasBin: true + '@babel/plugin-syntax-decorators@7.24.7': resolution: {integrity: sha512-Ui4uLJJrRV1lb38zg1yYTmRKmiZLiftDEvZN2iq3kd9kUFU+PttmzTbAFC2ucRk/XJmtek6G23gPsuZbhrT8fQ==} engines: {node: '>=6.9.0'} @@ -375,6 +380,10 @@ packages: resolution: {integrity: sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==} engines: {node: '>=6.9.0'} + '@babel/types@7.25.6': + resolution: {integrity: sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==} + engines: {node: '>=6.9.0'} + '@biomejs/biome@1.8.3': resolution: {integrity: sha512-/uUV3MV+vyAczO+vKrPdOW0Iaet7UnJMU4bNMinggGJTAnBPjCoLEYcyYtYHNnUNYlv4xZMH6hVIQCAozq8d5w==} engines: {node: '>=14.21.3'} @@ -489,13 +498,13 @@ packages: '@changesets/write@0.3.1': resolution: {integrity: sha512-SyGtMXzH3qFqlHKcvFY2eX+6b0NGiFcNav8AFsYwy5l8hejOeoeTDemu5Yjmke2V5jpzY+pBvM0vCCQ3gdZpfw==} - '@commitlint/cli@19.4.0': - resolution: {integrity: sha512-sJX4J9UioVwZHq7JWM9tjT5bgWYaIN3rC4FP7YwfEwBYiIO+wMyRttRvQLNkow0vCdM0D67r9NEWU0Ui03I4Eg==} + '@commitlint/cli@19.4.1': + resolution: {integrity: sha512-EerFVII3ZcnhXsDT9VePyIdCJoh3jEzygN1L37MjQXgPfGS6fJTWL/KHClVMod1d8w94lFC3l4Vh/y5ysVAz2A==} engines: {node: '>=v18'} hasBin: true - '@commitlint/config-conventional@19.2.2': - resolution: {integrity: sha512-mLXjsxUVLYEGgzbxbxicGPggDuyWNkf25Ht23owXIH+zV2pv1eJuzLK3t1gDY5Gp6pxdE60jZnWUY5cvgL3ufw==} + '@commitlint/config-conventional@19.4.1': + resolution: {integrity: sha512-D5S5T7ilI5roybWGc8X35OBlRXLAwuTseH1ro0XgqkOWrhZU8yOwBOslrNmSDlTXhXLq8cnfhQyC42qaUCzlXA==} engines: {node: '>=v18'} '@commitlint/config-validator@19.0.3': @@ -518,8 +527,8 @@ packages: resolution: {integrity: sha512-eNX54oXMVxncORywF4ZPFtJoBm3Tvp111tg1xf4zWXGfhBPKpfKG6R+G3G4v5CPlRROXpAOpQ3HMhA9n1Tck1g==} engines: {node: '>=v18'} - '@commitlint/lint@19.2.2': - resolution: {integrity: sha512-xrzMmz4JqwGyKQKTpFzlN0dx0TAiT7Ran1fqEBgEmEj+PU98crOFtysJgY+QdeSagx6EDRigQIXJVnfrI0ratA==} + '@commitlint/lint@19.4.1': + resolution: {integrity: sha512-Ws4YVAZ0jACTv6VThumITC1I5AG0UyXMGua3qcf55JmXIXm/ejfaVKykrqx7RyZOACKVAs8uDRIsEsi87JZ3+Q==} engines: {node: '>=v18'} '@commitlint/load@19.4.0': @@ -542,8 +551,8 @@ packages: resolution: {integrity: sha512-z2riI+8G3CET5CPgXJPlzftH+RiWYLMYv4C9tSLdLXdr6pBNimSKukYP9MS27ejmscqCTVA4almdLh0ODD2KYg==} engines: {node: '>=v18'} - '@commitlint/rules@19.0.3': - resolution: {integrity: sha512-TspKb9VB6svklxNCKKwxhELn7qhtY1rFF8ls58DcFd0F97XoG07xugPjjbVnLqmMkRjZDbDIwBKt9bddOfLaPw==} + '@commitlint/rules@19.4.1': + resolution: {integrity: sha512-AgctfzAONoVxmxOXRyxXIq7xEPrd7lK/60h2egp9bgGUMZK9v0+YqLOA+TH+KqCa63ZoCr8owP2YxoSSu7IgnQ==} engines: {node: '>=v18'} '@commitlint/to-lines@19.0.0': @@ -1121,59 +1130,59 @@ packages: '@mdx-js/mdx@2.3.0': resolution: {integrity: sha512-jLuwRlz8DQfQNiUCJR50Y09CGPq3fLtmtUQfVrj79E0JWu3dvsVcxVIcfhR5h0iXu+/z++zDrYeiJqifRynJkA==} - '@next/env@14.2.5': - resolution: {integrity: sha512-/zZGkrTOsraVfYjGP8uM0p6r0BDT6xWpkjdVbcz66PJVSpwXX3yNiRycxAuDfBKGWBrZBXRuK/YVlkNgxHGwmA==} + '@next/env@14.2.7': + resolution: {integrity: sha512-OTx9y6I3xE/eih+qtthppwLytmpJVPM5PPoJxChFsbjIEFXIayG0h/xLzefHGJviAa3Q5+Fd+9uYojKkHDKxoQ==} - '@next/swc-darwin-arm64@14.2.5': - resolution: {integrity: sha512-/9zVxJ+K9lrzSGli1///ujyRfon/ZneeZ+v4ptpiPoOU+GKZnm8Wj8ELWU1Pm7GHltYRBklmXMTUqM/DqQ99FQ==} + '@next/swc-darwin-arm64@14.2.7': + resolution: {integrity: sha512-UhZGcOyI9LE/tZL3h9rs/2wMZaaJKwnpAyegUVDGZqwsla6hMfeSj9ssBWQS9yA4UXun3pPhrFLVnw5KXZs3vw==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@next/swc-darwin-x64@14.2.5': - resolution: {integrity: sha512-vXHOPCwfDe9qLDuq7U1OYM2wUY+KQ4Ex6ozwsKxp26BlJ6XXbHleOUldenM67JRyBfVjv371oneEvYd3H2gNSA==} + '@next/swc-darwin-x64@14.2.7': + resolution: {integrity: sha512-ys2cUgZYRc+CbyDeLAaAdZgS7N1Kpyy+wo0b/gAj+SeOeaj0Lw/q+G1hp+DuDiDAVyxLBCJXEY/AkhDmtihUTA==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@next/swc-linux-arm64-gnu@14.2.5': - resolution: {integrity: sha512-vlhB8wI+lj8q1ExFW8lbWutA4M2ZazQNvMWuEDqZcuJJc78iUnLdPPunBPX8rC4IgT6lIx/adB+Cwrl99MzNaA==} + '@next/swc-linux-arm64-gnu@14.2.7': + resolution: {integrity: sha512-2xoWtE13sUJ3qrC1lwE/HjbDPm+kBQYFkkiVECJWctRASAHQ+NwjMzgrfqqMYHfMxFb5Wws3w9PqzZJqKFdWcQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-arm64-musl@14.2.5': - resolution: {integrity: sha512-NpDB9NUR2t0hXzJJwQSGu1IAOYybsfeB+LxpGsXrRIb7QOrYmidJz3shzY8cM6+rO4Aojuef0N/PEaX18pi9OA==} + '@next/swc-linux-arm64-musl@14.2.7': + resolution: {integrity: sha512-+zJ1gJdl35BSAGpkCbfyiY6iRTaPrt3KTl4SF/B1NyELkqqnrNX6cp4IjjjxKpd64/7enI0kf6b9O1Uf3cL0pw==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-x64-gnu@14.2.5': - resolution: {integrity: sha512-8XFikMSxWleYNryWIjiCX+gU201YS+erTUidKdyOVYi5qUQo/gRxv/3N1oZFCgqpesN6FPeqGM72Zve+nReVXQ==} + '@next/swc-linux-x64-gnu@14.2.7': + resolution: {integrity: sha512-m6EBqrskeMUzykBrv0fDX/28lWIBGhMzOYaStp0ihkjzIYJiKUOzVYD1gULHc8XDf5EMSqoH/0/TRAgXqpQwmw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-linux-x64-musl@14.2.5': - resolution: {integrity: sha512-6QLwi7RaYiQDcRDSU/os40r5o06b5ue7Jsk5JgdRBGGp8l37RZEh9JsLSM8QF0YDsgcosSeHjglgqi25+m04IQ==} + '@next/swc-linux-x64-musl@14.2.7': + resolution: {integrity: sha512-gUu0viOMvMlzFRz1r1eQ7Ql4OE+hPOmA7smfZAhn8vC4+0swMZaZxa9CSIozTYavi+bJNDZ3tgiSdMjmMzRJlQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-win32-arm64-msvc@14.2.5': - resolution: {integrity: sha512-1GpG2VhbspO+aYoMOQPQiqc/tG3LzmsdBH0LhnDS3JrtDx2QmzXe0B6mSZZiN3Bq7IOMXxv1nlsjzoS1+9mzZw==} + '@next/swc-win32-arm64-msvc@14.2.7': + resolution: {integrity: sha512-PGbONHIVIuzWlYmLvuFKcj+8jXnLbx4WrlESYlVnEzDsa3+Q2hI1YHoXaSmbq0k4ZwZ7J6sWNV4UZfx1OeOlbQ==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@next/swc-win32-ia32-msvc@14.2.5': - resolution: {integrity: sha512-Igh9ZlxwvCDsu6438FXlQTHlRno4gFpJzqPjSIBZooD22tKeI4fE/YMRoHVJHmrQ2P5YL1DoZ0qaOKkbeFWeMg==} + '@next/swc-win32-ia32-msvc@14.2.7': + resolution: {integrity: sha512-BiSY5umlx9ed5RQDoHcdbuKTUkuFORDqzYKPHlLeS+STUWQKWziVOn3Ic41LuTBvqE0TRJPKpio9GSIblNR+0w==} engines: {node: '>= 10'} cpu: [ia32] os: [win32] - '@next/swc-win32-x64-msvc@14.2.5': - resolution: {integrity: sha512-tEQ7oinq1/CjSG9uSTerca3v4AZ+dFa+4Yu6ihaG8Ud8ddqLQgFGcnwYls13H5X5CPDPZJdYxyeMui6muOLd4g==} + '@next/swc-win32-x64-msvc@14.2.7': + resolution: {integrity: sha512-pxsI23gKWRt/SPHFkDEsP+w+Nd7gK37Hpv0ngc5HpWy2e7cKx9zR/+Q2ptAUqICNTecAaGWvmhway7pj/JLEWA==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -1315,83 +1324,163 @@ packages: cpu: [arm] os: [android] + '@rollup/rollup-android-arm-eabi@4.21.1': + resolution: {integrity: sha512-2thheikVEuU7ZxFXubPDOtspKn1x0yqaYQwvALVtEcvFhMifPADBrgRPyHV0TF3b+9BgvgjgagVyvA/UqPZHmg==} + cpu: [arm] + os: [android] + '@rollup/rollup-android-arm64@4.20.0': resolution: {integrity: sha512-u00Ro/nok7oGzVuh/FMYfNoGqxU5CPWz1mxV85S2w9LxHR8OoMQBuSk+3BKVIDYgkpeOET5yXkx90OYFc+ytpQ==} cpu: [arm64] os: [android] + '@rollup/rollup-android-arm64@4.21.1': + resolution: {integrity: sha512-t1lLYn4V9WgnIFHXy1d2Di/7gyzBWS8G5pQSXdZqfrdCGTwi1VasRMSS81DTYb+avDs/Zz4A6dzERki5oRYz1g==} + cpu: [arm64] + os: [android] + '@rollup/rollup-darwin-arm64@4.20.0': resolution: {integrity: sha512-uFVfvzvsdGtlSLuL0ZlvPJvl6ZmrH4CBwLGEFPe7hUmf7htGAN+aXo43R/V6LATyxlKVC/m6UsLb7jbG+LG39Q==} cpu: [arm64] os: [darwin] + '@rollup/rollup-darwin-arm64@4.21.1': + resolution: {integrity: sha512-AH/wNWSEEHvs6t4iJ3RANxW5ZCK3fUnmf0gyMxWCesY1AlUj8jY7GC+rQE4wd3gwmZ9XDOpL0kcFnCjtN7FXlA==} + cpu: [arm64] + os: [darwin] + '@rollup/rollup-darwin-x64@4.20.0': resolution: {integrity: sha512-xbrMDdlev53vNXexEa6l0LffojxhqDTBeL+VUxuuIXys4x6xyvbKq5XqTXBCEUA8ty8iEJblHvFaWRJTk/icAQ==} cpu: [x64] os: [darwin] + '@rollup/rollup-darwin-x64@4.21.1': + resolution: {integrity: sha512-dO0BIz/+5ZdkLZrVgQrDdW7m2RkrLwYTh2YMFG9IpBtlC1x1NPNSXkfczhZieOlOLEqgXOFH3wYHB7PmBtf+Bg==} + cpu: [x64] + os: [darwin] + '@rollup/rollup-linux-arm-gnueabihf@4.20.0': resolution: {integrity: sha512-jMYvxZwGmoHFBTbr12Xc6wOdc2xA5tF5F2q6t7Rcfab68TT0n+r7dgawD4qhPEvasDsVpQi+MgDzj2faOLsZjA==} cpu: [arm] os: [linux] + '@rollup/rollup-linux-arm-gnueabihf@4.21.1': + resolution: {integrity: sha512-sWWgdQ1fq+XKrlda8PsMCfut8caFwZBmhYeoehJ05FdI0YZXk6ZyUjWLrIgbR/VgiGycrFKMMgp7eJ69HOF2pQ==} + cpu: [arm] + os: [linux] + '@rollup/rollup-linux-arm-musleabihf@4.20.0': resolution: {integrity: sha512-1asSTl4HKuIHIB1GcdFHNNZhxAYEdqML/MW4QmPS4G0ivbEcBr1JKlFLKsIRqjSwOBkdItn3/ZDlyvZ/N6KPlw==} cpu: [arm] os: [linux] + '@rollup/rollup-linux-arm-musleabihf@4.21.1': + resolution: {integrity: sha512-9OIiSuj5EsYQlmwhmFRA0LRO0dRRjdCVZA3hnmZe1rEwRk11Jy3ECGGq3a7RrVEZ0/pCsYWx8jG3IvcrJ6RCew==} + cpu: [arm] + os: [linux] + '@rollup/rollup-linux-arm64-gnu@4.20.0': resolution: {integrity: sha512-COBb8Bkx56KldOYJfMf6wKeYJrtJ9vEgBRAOkfw6Ens0tnmzPqvlpjZiLgkhg6cA3DGzCmLmmd319pmHvKWWlQ==} cpu: [arm64] os: [linux] + '@rollup/rollup-linux-arm64-gnu@4.21.1': + resolution: {integrity: sha512-0kuAkRK4MeIUbzQYu63NrJmfoUVicajoRAL1bpwdYIYRcs57iyIV9NLcuyDyDXE2GiZCL4uhKSYAnyWpjZkWow==} + cpu: [arm64] + os: [linux] + '@rollup/rollup-linux-arm64-musl@4.20.0': resolution: {integrity: sha512-+it+mBSyMslVQa8wSPvBx53fYuZK/oLTu5RJoXogjk6x7Q7sz1GNRsXWjn6SwyJm8E/oMjNVwPhmNdIjwP135Q==} cpu: [arm64] os: [linux] + '@rollup/rollup-linux-arm64-musl@4.21.1': + resolution: {integrity: sha512-/6dYC9fZtfEY0vozpc5bx1RP4VrtEOhNQGb0HwvYNwXD1BBbwQ5cKIbUVVU7G2d5WRE90NfB922elN8ASXAJEA==} + cpu: [arm64] + os: [linux] + '@rollup/rollup-linux-powerpc64le-gnu@4.20.0': resolution: {integrity: sha512-yAMvqhPfGKsAxHN8I4+jE0CpLWD8cv4z7CK7BMmhjDuz606Q2tFKkWRY8bHR9JQXYcoLfopo5TTqzxgPUjUMfw==} cpu: [ppc64] os: [linux] + '@rollup/rollup-linux-powerpc64le-gnu@4.21.1': + resolution: {integrity: sha512-ltUWy+sHeAh3YZ91NUsV4Xg3uBXAlscQe8ZOXRCVAKLsivGuJsrkawYPUEyCV3DYa9urgJugMLn8Z3Z/6CeyRQ==} + cpu: [ppc64] + os: [linux] + '@rollup/rollup-linux-riscv64-gnu@4.20.0': resolution: {integrity: sha512-qmuxFpfmi/2SUkAw95TtNq/w/I7Gpjurx609OOOV7U4vhvUhBcftcmXwl3rqAek+ADBwSjIC4IVNLiszoj3dPA==} cpu: [riscv64] os: [linux] + '@rollup/rollup-linux-riscv64-gnu@4.21.1': + resolution: {integrity: sha512-BggMndzI7Tlv4/abrgLwa/dxNEMn2gC61DCLrTzw8LkpSKel4o+O+gtjbnkevZ18SKkeN3ihRGPuBxjaetWzWg==} + cpu: [riscv64] + os: [linux] + '@rollup/rollup-linux-s390x-gnu@4.20.0': resolution: {integrity: sha512-I0BtGXddHSHjV1mqTNkgUZLnS3WtsqebAXv11D5BZE/gfw5KoyXSAXVqyJximQXNvNzUo4GKlCK/dIwXlz+jlg==} cpu: [s390x] os: [linux] + '@rollup/rollup-linux-s390x-gnu@4.21.1': + resolution: {integrity: sha512-z/9rtlGd/OMv+gb1mNSjElasMf9yXusAxnRDrBaYB+eS1shFm6/4/xDH1SAISO5729fFKUkJ88TkGPRUh8WSAA==} + cpu: [s390x] + os: [linux] + '@rollup/rollup-linux-x64-gnu@4.20.0': resolution: {integrity: sha512-y+eoL2I3iphUg9tN9GB6ku1FA8kOfmF4oUEWhztDJ4KXJy1agk/9+pejOuZkNFhRwHAOxMsBPLbXPd6mJiCwew==} cpu: [x64] os: [linux] + '@rollup/rollup-linux-x64-gnu@4.21.1': + resolution: {integrity: sha512-kXQVcWqDcDKw0S2E0TmhlTLlUgAmMVqPrJZR+KpH/1ZaZhLSl23GZpQVmawBQGVhyP5WXIsIQ/zqbDBBYmxm5w==} + cpu: [x64] + os: [linux] + '@rollup/rollup-linux-x64-musl@4.20.0': resolution: {integrity: sha512-hM3nhW40kBNYUkZb/r9k2FKK+/MnKglX7UYd4ZUy5DJs8/sMsIbqWK2piZtVGE3kcXVNj3B2IrUYROJMMCikNg==} cpu: [x64] os: [linux] + '@rollup/rollup-linux-x64-musl@4.21.1': + resolution: {integrity: sha512-CbFv/WMQsSdl+bpX6rVbzR4kAjSSBuDgCqb1l4J68UYsQNalz5wOqLGYj4ZI0thGpyX5kc+LLZ9CL+kpqDovZA==} + cpu: [x64] + os: [linux] + '@rollup/rollup-win32-arm64-msvc@4.20.0': resolution: {integrity: sha512-psegMvP+Ik/Bg7QRJbv8w8PAytPA7Uo8fpFjXyCRHWm6Nt42L+JtoqH8eDQ5hRP7/XW2UiIriy1Z46jf0Oa1kA==} cpu: [arm64] os: [win32] + '@rollup/rollup-win32-arm64-msvc@4.21.1': + resolution: {integrity: sha512-3Q3brDgA86gHXWHklrwdREKIrIbxC0ZgU8lwpj0eEKGBQH+31uPqr0P2v11pn0tSIxHvcdOWxa4j+YvLNx1i6g==} + cpu: [arm64] + os: [win32] + '@rollup/rollup-win32-ia32-msvc@4.20.0': resolution: {integrity: sha512-GabekH3w4lgAJpVxkk7hUzUf2hICSQO0a/BLFA11/RMxQT92MabKAqyubzDZmMOC/hcJNlc+rrypzNzYl4Dx7A==} cpu: [ia32] os: [win32] + '@rollup/rollup-win32-ia32-msvc@4.21.1': + resolution: {integrity: sha512-tNg+jJcKR3Uwe4L0/wY3Ro0H+u3nrb04+tcq1GSYzBEmKLeOQF2emk1whxlzNqb6MMrQ2JOcQEpuuiPLyRcSIw==} + cpu: [ia32] + os: [win32] + '@rollup/rollup-win32-x64-msvc@4.20.0': resolution: {integrity: sha512-aJ1EJSuTdGnM6qbVC4B5DSmozPTqIag9fSzXRNNo+humQLG89XpPgdt16Ia56ORD7s+H8Pmyx44uczDQ0yDzpg==} cpu: [x64] os: [win32] - '@shikijs/core@1.13.0': - resolution: {integrity: sha512-Mj5NVfbAXcD1GnwOTSPl8hBn/T8UDpfFQTptp+p41n/CbUcJtOq98WaRD7Lz3hCglYotUTHUWtzu3JhK6XlkAA==} + '@rollup/rollup-win32-x64-msvc@4.21.1': + resolution: {integrity: sha512-xGiIH95H1zU7naUyTKEyOA/I0aexNMUdO9qRv0bLKN3qu25bBdrxZHqA3PTJ24YNN/GdMzG4xkDcd/GvjuhfLg==} + cpu: [x64] + os: [win32] + + '@shikijs/core@1.14.1': + resolution: {integrity: sha512-KyHIIpKNaT20FtFPFjCQB5WVSTpLR/n+jQXhWHWVUMm9MaOaG9BGOG0MSyt7yA4+Lm+4c9rTc03tt3nYzeYSfw==} '@sindresorhus/merge-streams@2.3.0': resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} @@ -1486,8 +1575,8 @@ packages: '@types/node@12.20.55': resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} - '@types/node@22.4.0': - resolution: {integrity: sha512-49AbMDwYUz7EXxKU/r7mXOsxwFr4BYbvB7tWYxVuLdb2ibd30ijjXINSMAHiEEZk5PCRBmW1gUeisn2VMKt3cQ==} + '@types/node@22.5.1': + resolution: {integrity: sha512-KkHsxej0j9IW1KKOOAA/XBA0z08UFSrRQHErzEfA3Vgq57eXIMYboIlHJuYIfd+lwCQjtKqUu3UnmKbtUc9yRw==} '@types/prop-types@15.7.12': resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} @@ -1495,8 +1584,8 @@ packages: '@types/react-dom@18.3.0': resolution: {integrity: sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==} - '@types/react@18.3.3': - resolution: {integrity: sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==} + '@types/react@18.3.4': + resolution: {integrity: sha512-J7W30FTdfCxDDjmfRM+/JqLHBIyl7xUIp9kwK637FGmY7+mkSFSe6L4jpZzhj5QMfLssSDP4/i75AKkrdC7/Jw==} '@types/semver@7.5.8': resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} @@ -1707,8 +1796,8 @@ packages: resolution: {integrity: sha512-ISvCdHdlTDlH5IpxQJIex7BWBywFWgjJSVdwst+/iQCoEYnyOaQ95+X1JGshuBjGp6nxKUy1jMgE3zPqN7fQdg==} hasBin: true - astro@4.14.2: - resolution: {integrity: sha512-x9VeYx8Ih6kYKBMVwwsfRzsZVq30+SUhiawnYQ6+46qQnEx3zH05KcH24HsJMe6dVpHD8HdH7CWR5C4o7Q/jeg==} + astro@4.15.1: + resolution: {integrity: sha512-XvKZ2GaDbCsMfcJess4o+4D4cCKja45GJ/9o6EJ6n96xaen8HZMRoJn3YKL9TOjIrL2NuU4mBFMG2JivPJ0foA==} engines: {node: ^18.17.1 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0'} hasBin: true @@ -1833,6 +1922,9 @@ packages: caniuse-lite@1.0.30001651: resolution: {integrity: sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg==} + caniuse-lite@1.0.30001653: + resolution: {integrity: sha512-XGWQVB8wFQ2+9NZwZ10GxTYC5hk0Fa+q8cSkr0tgvMhYhMHP/QC+WTgrePMDBWiWc/pV+1ik82Al20XOK25Gcw==} + ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} @@ -1902,9 +1994,9 @@ packages: resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} engines: {node: '>=8'} - cli-cursor@4.0.0: - resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + cli-cursor@5.0.0: + resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} + engines: {node: '>=18'} cli-spinners@2.9.2: resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} @@ -2212,8 +2304,8 @@ packages: electron-to-chromium@1.5.6: resolution: {integrity: sha512-jwXWsM5RPf6j9dPYzaorcBSUg6AiqocPEyMpkchkvntaH9HGfOOMZwxMJjDY/XEs3T5dM7uyH1VhRMkqUU9qVw==} - emoji-regex@10.3.0: - resolution: {integrity: sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==} + emoji-regex@10.4.0: + resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -2600,8 +2692,8 @@ packages: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} - hast-util-from-html@2.0.1: - resolution: {integrity: sha512-RXQBLMl9kjKVNkJTIO6bZyb2n+cUH8LFaSSzo82jiLT6Tfc+Pt7VQCS+/h3YwG4jaNE2TA2sdJisGWR+aJrp0g==} + hast-util-from-html@2.0.2: + resolution: {integrity: sha512-HwOHwxdt2zC5KQ/CNoybBntRook2zJvfZE/u5/Ap7aLPe22bDqen7KwGkOqOyzL5zIqKwiYX/OTtE0FWgr6XXA==} hast-util-from-parse5@8.0.1: resolution: {integrity: sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ==} @@ -2618,8 +2710,8 @@ packages: hast-util-to-estree@2.3.3: resolution: {integrity: sha512-ihhPIUPxN0v0w6M5+IiAZZrn0LH2uZomeWwhn7uP7avZC6TE7lIiEh2yBMPr5+zi1aUCXq6VoYRgs2Bw9xmycQ==} - hast-util-to-html@9.0.1: - resolution: {integrity: sha512-hZOofyZANbyWo+9RP75xIDV/gq+OUKx+T46IlwERnKmfpwp81XBFbT9mi26ws+SJchA4RVUQwIBJpqEOBhMzEQ==} + hast-util-to-html@9.0.2: + resolution: {integrity: sha512-RP5wNpj5nm1Z8cloDv4Sl4RS8jH5HYa0v93YB6Wb4poEzgMo/dAAL0KcT4974dCjcNG5pkLqTImeFHHCwwfY3g==} hast-util-to-parse5@8.0.0: resolution: {integrity: sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==} @@ -2886,8 +2978,8 @@ packages: resolution: {integrity: sha512-vne1mzQUTR+qsMLeCBL9+/tgnDXRyc2pygLGl/WsgA+EZKIiB5Ehu0CiVTHIIk30zhJ24uGz4M5Ppse37aR0Hg==} engines: {node: '>=12'} - isbot@5.1.16: - resolution: {integrity: sha512-zvRjcw/4UfKiCVx+/PqXPKthufO5m2PpJSbA0tVZY9ns7hlQRV1xqWpEFcqyfkK/MrChsXPmu1zpxECjcaEuKg==} + isbot@5.1.17: + resolution: {integrity: sha512-/wch8pRKZE+aoVhRX/hYPY1C7dMCeeMyhkQLNLNlYAbGQn9bkvMB8fOUXNnk5I0m4vDYbBJ9ciVtkr9zfBJ7qA==} engines: {node: '>=18'} isexe@2.0.0: @@ -2918,8 +3010,8 @@ packages: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true - jsdom@24.1.1: - resolution: {integrity: sha512-5O1wWV99Jhq4DV7rCLIoZ/UIhyQeDR7wHVyZAHAshbrvZsLs+Xzz7gtwnlJTJDjleiTKh54F4dXrX70vJQTyJQ==} + jsdom@25.0.0: + resolution: {integrity: sha512-OhoFVT59T7aEq75TVw9xxEfkXgacpqAhQaYgP9y/fDqWQCMB/b1H66RfmPm/MaeaAIU9nDwMOVTlPN51+ao6CQ==} engines: {node: '>=18'} peerDependencies: canvas: ^2.11.2 @@ -3086,6 +3178,9 @@ packages: magic-string@0.30.11: resolution: {integrity: sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==} + magicast@0.3.5: + resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==} + make-dir@3.1.0: resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} engines: {node: '>=8'} @@ -3115,8 +3210,8 @@ packages: mdast-util-frontmatter@1.0.1: resolution: {integrity: sha512-JjA2OjxRqAa8wEG8hloD0uTU0kdn8kbtOWpPP94NBkfAlbxn4S8gCGf/9DwFtEeGPXrDcNXdiDjVaRdUFqYokw==} - mdast-util-gfm-autolink-literal@2.0.0: - resolution: {integrity: sha512-FyzMsduZZHSc3i0Px3PQcBT4WJY/X/RCtEJKuybiC6sjPqLv7h1yqAkmILZtuxMSsUyaLUWNp71+vQH2zqp5cg==} + mdast-util-gfm-autolink-literal@2.0.1: + resolution: {integrity: sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==} mdast-util-gfm-footnote@2.0.0: resolution: {integrity: sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ==} @@ -3369,6 +3464,10 @@ packages: resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==} engines: {node: '>=8.6'} + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + mime-db@1.52.0: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} @@ -3394,6 +3493,10 @@ packages: resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} engines: {node: '>=12'} + mimic-function@5.0.1: + resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} + engines: {node: '>=18'} + minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} @@ -3495,8 +3598,8 @@ packages: resolution: {integrity: sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA==} engines: {node: '>= 10'} - next@14.2.5: - resolution: {integrity: sha512-0f8aRfBVL+mpzfBjYfQuLWh2WyAwtJXCRfkPF4UJ5qd2YwrHczsrSzXU4tRMV0OAxR8ZJZWPFn6uhSC56UTsLA==} + next@14.2.7: + resolution: {integrity: sha512-4Qy2aK0LwH4eQiSvQWyKuC7JXE13bIopEQesWE0c/P3uuNRnZCQanI0vsrMLmUQJLAto+A+/8+sve2hd+BQuOQ==} engines: {node: '>=18.17.0'} hasBin: true peerDependencies: @@ -3525,8 +3628,8 @@ packages: encoding: optional: true - node-gyp-build@4.8.1: - resolution: {integrity: sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==} + node-gyp-build@4.8.2: + resolution: {integrity: sha512-IRUxE4BVsHWXkV/SFOut4qTlagw2aM8T5/vnTsmrHJvVoKueJHRc/JaFND7QDDc61kLYUJ6qlZM3sqTSyx2dTw==} hasBin: true node-releases@2.0.18: @@ -3607,12 +3710,16 @@ packages: resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} engines: {node: '>=12'} + onetime@7.0.0: + resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} + engines: {node: '>=18'} + ora@5.4.1: resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} engines: {node: '>=10'} - ora@8.0.1: - resolution: {integrity: sha512-ANIvzobt1rls2BDny5fWZ3ZVKyD6nscLvfFRpQgfWsythlcsVUC9kL0zq6j2Z5z9wwp1kd7wpsD/T9qNPVLCaQ==} + ora@8.1.0: + resolution: {integrity: sha512-GQEkNkH/GHOhPFXcqZs3IDahXEQcQxsSjEkK4KvEEST4t7eNzoMjxTzef+EZ+JluDEV+Raoi3WQ2CflnRdSVnQ==} engines: {node: '>=18'} os-tmpdir@1.0.2: @@ -4079,15 +4186,15 @@ packages: resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} engines: {node: '>=8'} - restore-cursor@4.0.0: - resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + restore-cursor@5.1.0: + resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} + engines: {node: '>=18'} retext-latin@4.0.0: resolution: {integrity: sha512-hv9woG7Fy0M9IlRQloq/N6atV82NxLGveq+3H2WOi79dtIYWN8OaxogDm77f8YnVXJL2VD3bbqowu5E3EMhBYA==} - retext-smartypants@6.1.0: - resolution: {integrity: sha512-LDPXg95346bqFZnDMHo0S7Rq5p64+B+N8Vz733+wPMDtwb9rCOs9LIdIEhrUOU+TAywX9St+ocQWJt8wrzivcQ==} + retext-smartypants@6.1.1: + resolution: {integrity: sha512-onsHf34i/GzgElJgtT1K2V+31yEhWs7NJboKNxXJcmVMMPxLpgxZ9iADoMdydd6j/bHic5F/aNq0CGqElEtu2g==} retext-stringify@4.0.0: resolution: {integrity: sha512-rtfN/0o8kL1e+78+uxPTqu1Klt0yPzKuQ2BfWwwfgIUSayyzxpM1PJzkKt4V8803uB9qSy32MvI7Xep9khTpiA==} @@ -4113,6 +4220,11 @@ packages: engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true + rollup@4.21.1: + resolution: {integrity: sha512-ZnYyKvscThhgd3M5+Qt3pmhO4jIRR5RGzaSovB6Q7rGNrK5cUncrtLmcTTJVSdcKXyZjW8X8MB0JMSuH9bcAJg==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + rrweb-cssom@0.6.0: resolution: {integrity: sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==} @@ -4199,8 +4311,8 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - shiki@1.13.0: - resolution: {integrity: sha512-e0dWfnONbEv6xl7FJy3XIhsVHQ/65XHDZl92+6H9+4xWjfdo7pmkqG7Kg47KWtDiEtzM5Z+oEfb4vtRvoZ/X9w==} + shiki@1.14.1: + resolution: {integrity: sha512-FujAN40NEejeXdzPt+3sZ3F2dx1U24BY2XTY01+MG8mbxCiA2XukXdcbyMyLAHJ/1AUUnQd1tZlvIjefWWEJeA==} side-channel@1.0.6: resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} @@ -4422,6 +4534,9 @@ packages: tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} + tinyexec@0.3.0: + resolution: {integrity: sha512-tVGE0mVJPGb0chKhqmsoosjsS+qUnJVGJpZgsHYQcGoPlG3B51R3PouqTgEGH2Dc9jjFyOqOpix6ZHNMXp1FZg==} + tinypool@1.0.0: resolution: {integrity: sha512-KIKExllK7jp3uvrNtvRBYBWBOAXSX8ZvoaD8T+7KB/QHIuoJW3Pmr60zucywjAlMb5TeXUkcs/MWeWLu0qvuAQ==} engines: {node: ^18.0.0 || >=20.0.0} @@ -4500,8 +4615,8 @@ packages: resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} engines: {node: '>=6'} - tslib@2.6.3: - resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} + tslib@2.7.0: + resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==} tsscmp@1.0.6: resolution: {integrity: sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==} @@ -4526,41 +4641,41 @@ packages: typescript: optional: true - turbo-darwin-64@2.0.14: - resolution: {integrity: sha512-kwfDmjNwlNfvtrvT29+ZBg5n1Wvxl891bFHchMJyzMoR0HOE9N1NSNdSZb9wG3e7sYNIu4uDkNk+VBEqJW0HzQ==} + turbo-darwin-64@2.1.0: + resolution: {integrity: sha512-gHwpDk2gyB7qZ57gUUwDIS/IkglqEjjVtPZCTxmCRg28Tiwjui0azsLVKrnHP9UZHllozwbi28x8HXLXLEFF1w==} cpu: [x64] os: [darwin] - turbo-darwin-arm64@2.0.14: - resolution: {integrity: sha512-m3LXYEshCx3wc4ZClM6gb01KYpFmtjQ9IBF3A7ofjb6ahux3xlYZJZ3uFCLAGHuvGLuJ3htfiPbwlDPTdknqqw==} + turbo-darwin-arm64@2.1.0: + resolution: {integrity: sha512-GLaqGetNC6eS4eqXgsheLOHic/OcnGCGDi5boVf+TFZTXYH6YE15L4ugZha4xHXCr1KouCLILHh+f8EHEmWylg==} cpu: [arm64] os: [darwin] - turbo-linux-64@2.0.14: - resolution: {integrity: sha512-7vBzCPdoTtR92SNn2JMgj1FlMmyonGmpMaQdgAB1OVYtuQ6NVGoh7/lODfaILqXjpvmFSVbpBIDrKOT6EvcprQ==} + turbo-linux-64@2.1.0: + resolution: {integrity: sha512-VzBOsj7JyGoZtiNZZ6brjnY7UehRnClluw7pwznuLPzClkqOOPMd2jOcgkWxnP/xW4NBmOoFANXXrtvKBD4f2w==} cpu: [x64] os: [linux] - turbo-linux-arm64@2.0.14: - resolution: {integrity: sha512-jwH+c0bfjpBf26K/tdEFatmnYyXwGROjbr6bZmNcL8R+IkGAc/cglL+OToqJnQZTgZvH7uDGbeSyUo7IsHyjuA==} + turbo-linux-arm64@2.1.0: + resolution: {integrity: sha512-St7svJnOO5g4F6R7Z32e10I/0M3e6qpNjEYybXwPNul9NSfnUXeky4WoKaALwqNhyJ7nYemoFpZ1d+i8hFQTHg==} cpu: [arm64] os: [linux] turbo-stream@2.3.0: resolution: {integrity: sha512-PhEr9mdexoVv+rJkQ3c8TjrN3DUghX37GNJkSMksoPR4KrXIPnM2MnqRt07sViIqX9IdlhrgtTSyjoVOASq6cg==} - turbo-windows-64@2.0.14: - resolution: {integrity: sha512-w9/XwkHSzvLjmioo6cl3S1yRfI6swxsV1j1eJwtl66JM4/pn0H2rBa855R0n7hZnmI6H5ywLt/nLt6Ae8RTDmw==} + turbo-windows-64@2.1.0: + resolution: {integrity: sha512-iSobNud2MrJ1SZ1upVPlErT8xexsr0MQtKapdfq6z0M0rBnrDGEq5bUCSScWyGu+O4+glB4br9xkTAkGFqaxqQ==} cpu: [x64] os: [win32] - turbo-windows-arm64@2.0.14: - resolution: {integrity: sha512-XaQlyYk+Rf4xS5XWCo8XCMIpssgGGy8blzLfolN6YBp4baElIWMlkLZHDbGyiFmCbNf9I9gJI64XGRG+LVyyjA==} + turbo-windows-arm64@2.1.0: + resolution: {integrity: sha512-d61jN4rjE5PnUfF66GKrKoj8S8Ql4FGXzFFzZz4kjsHpZZzCTtqlzPZBmd1byzGYhDPTorTqG3G1USohbdyohA==} cpu: [arm64] os: [win32] - turbo@2.0.14: - resolution: {integrity: sha512-00JjdCMD/cpsjP0Izkjcm8Oaor5yUCfDwODtaLb+WyblyadkaDEisGhy3Dbd5az9n+5iLSPiUgf+WjPbns6MRg==} + turbo@2.1.0: + resolution: {integrity: sha512-A969/LO/sPHKlapIarY2VVzqQ5JnnW2/1kksZlnMEpsRD6gwOELvVL+ozfMiO7av9RILt3UeN02L17efr6HUCA==} hasBin: true type-fest@2.19.0: @@ -4582,8 +4697,8 @@ packages: ultrahtml@1.5.3: resolution: {integrity: sha512-GykOvZwgDWZlTQMtp5jrD4BVL+gNn2NVlVafjcFUJ7taY20tqYdwdoWBFy6GBJsNTZe1GkGPkSl5knQAjtgceg==} - undici-types@6.19.6: - resolution: {integrity: sha512-e/vggGopEfTKSvj4ihnOLTsqhrKRN3LeO6qSN/GxohhuRv8qH9bNQ4B8W7e/vFL+0XTnmHPB4/kegunZGA4Org==} + undici-types@6.19.8: + resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} undici@6.19.7: resolution: {integrity: sha512-HR3W/bMGPSr90i8AAp2C4DM3wChFdJPLrWYpIS++LxS8K+W535qftjt+4MyjNYHeWabMj1nvtmLIi7l++iq91A==} @@ -4724,8 +4839,8 @@ packages: vfile@5.3.7: resolution: {integrity: sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==} - vfile@6.0.2: - resolution: {integrity: sha512-zND7NlS8rJYb/sPqkb13ZvbbUoExdbi4w3SfRrMq6R3FvnLQmmfpajJNITuuYm6AZ5uao9vy4BAos3EXBPf2rg==} + vfile@6.0.3: + resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} vite-node@1.6.0: resolution: {integrity: sha512-de6HJgzC+TFzOu0NTC4RAIsyf/DY/ibWDYQUcuEA84EMHhcefTUGkjFHKKEJhQN4A+6I0u++kr3l36ZF2d7XRw==} @@ -4745,8 +4860,8 @@ packages: vite: optional: true - vite@5.4.1: - resolution: {integrity: sha512-1oE6yuNXssjrZdblI9AfBbHCC41nnyoVoEZxQnID6yvQZAFBzxxkqoFLtHUMkYunL8hwOLEjgTuxpkRxvba3kA==} + vite@5.4.2: + resolution: {integrity: sha512-dDrQTRHp5C1fTFzcSaMxjk6vdpKvT+2/mIdE07Gw2ykehT49O0z/VHS3zZ8iV/Gh8BJJKHWOe5RjaNrW5xf/GA==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: @@ -5014,7 +5129,7 @@ snapshots: dependencies: '@astrojs/prism': 3.1.0 github-slugger: 2.0.0 - hast-util-from-html: 2.0.1 + hast-util-from-html: 2.0.2 hast-util-to-text: 4.0.2 import-meta-resolve: 4.1.0 mdast-util-definitions: 6.0.0 @@ -5024,12 +5139,12 @@ snapshots: remark-parse: 11.0.0 remark-rehype: 11.1.0 remark-smartypants: 3.0.2 - shiki: 1.13.0 + shiki: 1.14.1 unified: 11.0.5 unist-util-remove-position: 5.0.0 unist-util-visit: 5.0.0 unist-util-visit-parents: 6.0.1 - vfile: 6.0.2 + vfile: 6.0.3 transitivePeerDependencies: - supports-color @@ -5037,11 +5152,11 @@ snapshots: dependencies: prismjs: 1.29.0 - '@astrojs/react@3.6.2(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(vite@5.4.1(@types/node@22.4.0))': + '@astrojs/react@3.6.2(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(vite@5.4.2(@types/node@22.5.1))': dependencies: - '@types/react': 18.3.3 + '@types/react': 18.3.4 '@types/react-dom': 18.3.0 - '@vitejs/plugin-react': 4.3.1(vite@5.4.1(@types/node@22.4.0)) + '@vitejs/plugin-react': 4.3.1(vite@5.4.2(@types/node@22.5.1)) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) ultrahtml: 1.5.3 @@ -5061,16 +5176,15 @@ snapshots: transitivePeerDependencies: - supports-color - '@astrojs/vercel@7.7.2(astro@4.14.2(@types/node@22.4.0)(rollup@4.20.0)(typescript@5.5.4))(next@14.2.5(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)': + '@astrojs/vercel@7.8.0(astro@4.15.1(@types/node@22.5.1)(rollup@4.21.1)(typescript@5.5.4))(next@14.2.7(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: '@astrojs/internal-helpers': 0.4.1 - '@vercel/analytics': 1.3.1(next@14.2.5(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@vercel/analytics': 1.3.1(next@14.2.7(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) '@vercel/edge': 1.1.2 '@vercel/nft': 0.27.3 - astro: 4.14.2(@types/node@22.4.0)(rollup@4.20.0)(typescript@5.5.4) + astro: 4.15.1(@types/node@22.5.1)(rollup@4.21.1)(typescript@5.5.4) esbuild: 0.21.5 fast-glob: 3.3.2 - set-cookie-parser: 2.7.0 web-vitals: 3.5.2 transitivePeerDependencies: - encoding @@ -5212,6 +5326,10 @@ snapshots: dependencies: '@babel/types': 7.25.2 + '@babel/parser@7.25.6': + dependencies: + '@babel/types': 7.25.6 + '@babel/plugin-syntax-decorators@7.24.7(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 @@ -5253,7 +5371,7 @@ snapshots: '@babel/helper-module-imports': 7.24.7 '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.25.2) - '@babel/types': 7.25.2 + '@babel/types': 7.25.6 transitivePeerDependencies: - supports-color @@ -5307,6 +5425,12 @@ snapshots: '@babel/helper-validator-identifier': 7.24.7 to-fast-properties: 2.0.0 + '@babel/types@7.25.6': + dependencies: + '@babel/helper-string-parser': 7.24.8 + '@babel/helper-validator-identifier': 7.24.7 + to-fast-properties: 2.0.0 + '@biomejs/biome@1.8.3': optionalDependencies: '@biomejs/cli-darwin-arm64': 1.8.3 @@ -5513,11 +5637,11 @@ snapshots: human-id: 1.0.2 prettier: 2.8.8 - '@commitlint/cli@19.4.0(@types/node@22.4.0)(typescript@5.5.4)': + '@commitlint/cli@19.4.1(@types/node@22.5.1)(typescript@5.5.4)': dependencies: '@commitlint/format': 19.3.0 - '@commitlint/lint': 19.2.2 - '@commitlint/load': 19.4.0(@types/node@22.4.0)(typescript@5.5.4) + '@commitlint/lint': 19.4.1 + '@commitlint/load': 19.4.0(@types/node@22.5.1)(typescript@5.5.4) '@commitlint/read': 19.4.0 '@commitlint/types': 19.0.3 execa: 8.0.1 @@ -5526,7 +5650,7 @@ snapshots: - '@types/node' - typescript - '@commitlint/config-conventional@19.2.2': + '@commitlint/config-conventional@19.4.1': dependencies: '@commitlint/types': 19.0.3 conventional-changelog-conventionalcommits: 7.0.2 @@ -5557,14 +5681,14 @@ snapshots: '@commitlint/types': 19.0.3 semver: 7.6.3 - '@commitlint/lint@19.2.2': + '@commitlint/lint@19.4.1': dependencies: '@commitlint/is-ignored': 19.2.2 '@commitlint/parse': 19.0.3 - '@commitlint/rules': 19.0.3 + '@commitlint/rules': 19.4.1 '@commitlint/types': 19.0.3 - '@commitlint/load@19.4.0(@types/node@22.4.0)(typescript@5.5.4)': + '@commitlint/load@19.4.0(@types/node@22.5.1)(typescript@5.5.4)': dependencies: '@commitlint/config-validator': 19.0.3 '@commitlint/execute-rule': 19.0.0 @@ -5572,7 +5696,7 @@ snapshots: '@commitlint/types': 19.0.3 chalk: 5.3.0 cosmiconfig: 9.0.0(typescript@5.5.4) - cosmiconfig-typescript-loader: 5.0.0(@types/node@22.4.0)(cosmiconfig@9.0.0(typescript@5.5.4))(typescript@5.5.4) + cosmiconfig-typescript-loader: 5.0.0(@types/node@22.5.1)(cosmiconfig@9.0.0(typescript@5.5.4))(typescript@5.5.4) lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 lodash.uniq: 4.5.0 @@ -5605,7 +5729,7 @@ snapshots: lodash.mergewith: 4.6.2 resolve-from: 5.0.0 - '@commitlint/rules@19.0.3': + '@commitlint/rules@19.4.1': dependencies: '@commitlint/ensure': 19.0.3 '@commitlint/message': 19.0.0 @@ -5626,7 +5750,7 @@ snapshots: '@emnapi/runtime@1.2.0': dependencies: - tslib: 2.6.3 + tslib: 2.7.0 optional: true '@emotion/hash@0.9.2': {} @@ -5994,33 +6118,33 @@ snapshots: transitivePeerDependencies: - supports-color - '@next/env@14.2.5': {} + '@next/env@14.2.7': {} - '@next/swc-darwin-arm64@14.2.5': + '@next/swc-darwin-arm64@14.2.7': optional: true - '@next/swc-darwin-x64@14.2.5': + '@next/swc-darwin-x64@14.2.7': optional: true - '@next/swc-linux-arm64-gnu@14.2.5': + '@next/swc-linux-arm64-gnu@14.2.7': optional: true - '@next/swc-linux-arm64-musl@14.2.5': + '@next/swc-linux-arm64-musl@14.2.7': optional: true - '@next/swc-linux-x64-gnu@14.2.5': + '@next/swc-linux-x64-gnu@14.2.7': optional: true - '@next/swc-linux-x64-musl@14.2.5': + '@next/swc-linux-x64-musl@14.2.7': optional: true - '@next/swc-win32-arm64-msvc@14.2.5': + '@next/swc-win32-arm64-msvc@14.2.7': optional: true - '@next/swc-win32-ia32-msvc@14.2.5': + '@next/swc-win32-ia32-msvc@14.2.7': optional: true - '@next/swc-win32-x64-msvc@14.2.5': + '@next/swc-win32-x64-msvc@14.2.7': optional: true '@nodelib/fs.scandir@2.1.5': @@ -6073,7 +6197,7 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true - '@remix-run/dev@2.11.2(@remix-run/react@2.11.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4))(@remix-run/serve@2.11.2(typescript@5.5.4))(@types/node@22.4.0)(typescript@5.5.4)(vite@5.4.1(@types/node@22.4.0))': + '@remix-run/dev@2.11.2(@remix-run/react@2.11.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4))(@remix-run/serve@2.11.2(typescript@5.5.4))(@types/node@22.5.1)(typescript@5.5.4)(vite@5.4.2(@types/node@22.5.1))': dependencies: '@babel/core': 7.25.2 '@babel/generator': 7.25.0 @@ -6090,7 +6214,7 @@ snapshots: '@remix-run/router': 1.19.1 '@remix-run/server-runtime': 2.11.2(typescript@5.5.4) '@types/mdx': 2.0.13 - '@vanilla-extract/integration': 6.5.0(@types/node@22.4.0) + '@vanilla-extract/integration': 6.5.0(@types/node@22.5.1) arg: 5.0.2 cacache: 17.1.4 chalk: 4.1.2 @@ -6132,7 +6256,7 @@ snapshots: optionalDependencies: '@remix-run/serve': 2.11.2(typescript@5.5.4) typescript: 5.5.4 - vite: 5.4.1(@types/node@22.4.0) + vite: 5.4.2(@types/node@22.5.1) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -6243,63 +6367,111 @@ snapshots: estree-walker: 2.0.2 picomatch: 2.3.1 - '@rollup/pluginutils@5.1.0(rollup@4.20.0)': + '@rollup/pluginutils@5.1.0(rollup@4.21.1)': dependencies: '@types/estree': 1.0.5 estree-walker: 2.0.2 picomatch: 2.3.1 optionalDependencies: - rollup: 4.20.0 + rollup: 4.21.1 '@rollup/rollup-android-arm-eabi@4.20.0': optional: true + '@rollup/rollup-android-arm-eabi@4.21.1': + optional: true + '@rollup/rollup-android-arm64@4.20.0': optional: true + '@rollup/rollup-android-arm64@4.21.1': + optional: true + '@rollup/rollup-darwin-arm64@4.20.0': optional: true + '@rollup/rollup-darwin-arm64@4.21.1': + optional: true + '@rollup/rollup-darwin-x64@4.20.0': optional: true + '@rollup/rollup-darwin-x64@4.21.1': + optional: true + '@rollup/rollup-linux-arm-gnueabihf@4.20.0': optional: true + '@rollup/rollup-linux-arm-gnueabihf@4.21.1': + optional: true + '@rollup/rollup-linux-arm-musleabihf@4.20.0': optional: true + '@rollup/rollup-linux-arm-musleabihf@4.21.1': + optional: true + '@rollup/rollup-linux-arm64-gnu@4.20.0': optional: true + '@rollup/rollup-linux-arm64-gnu@4.21.1': + optional: true + '@rollup/rollup-linux-arm64-musl@4.20.0': optional: true + '@rollup/rollup-linux-arm64-musl@4.21.1': + optional: true + '@rollup/rollup-linux-powerpc64le-gnu@4.20.0': optional: true + '@rollup/rollup-linux-powerpc64le-gnu@4.21.1': + optional: true + '@rollup/rollup-linux-riscv64-gnu@4.20.0': optional: true + '@rollup/rollup-linux-riscv64-gnu@4.21.1': + optional: true + '@rollup/rollup-linux-s390x-gnu@4.20.0': optional: true + '@rollup/rollup-linux-s390x-gnu@4.21.1': + optional: true + '@rollup/rollup-linux-x64-gnu@4.20.0': optional: true + '@rollup/rollup-linux-x64-gnu@4.21.1': + optional: true + '@rollup/rollup-linux-x64-musl@4.20.0': optional: true + '@rollup/rollup-linux-x64-musl@4.21.1': + optional: true + '@rollup/rollup-win32-arm64-msvc@4.20.0': optional: true + '@rollup/rollup-win32-arm64-msvc@4.21.1': + optional: true + '@rollup/rollup-win32-ia32-msvc@4.20.0': optional: true + '@rollup/rollup-win32-ia32-msvc@4.21.1': + optional: true + '@rollup/rollup-win32-x64-msvc@4.20.0': optional: true - '@shikijs/core@1.13.0': + '@rollup/rollup-win32-x64-msvc@4.21.1': + optional: true + + '@shikijs/core@1.14.1': dependencies: '@types/hast': 3.0.4 @@ -6326,7 +6498,7 @@ snapshots: '@swc/helpers@0.5.5': dependencies: '@swc/counter': 0.1.3 - tslib: 2.6.3 + tslib: 2.7.0 '@ts-morph/common@0.11.1': dependencies: @@ -6363,15 +6535,15 @@ snapshots: '@types/body-parser@1.19.5': dependencies: '@types/connect': 3.4.38 - '@types/node': 22.4.0 + '@types/node': 22.5.1 '@types/connect@3.4.38': dependencies: - '@types/node': 22.4.0 + '@types/node': 22.5.1 '@types/conventional-commits-parser@5.0.0': dependencies: - '@types/node': 22.4.0 + '@types/node': 22.5.1 '@types/cookie@0.6.0': {} @@ -6413,17 +6585,17 @@ snapshots: '@types/node@12.20.55': {} - '@types/node@22.4.0': + '@types/node@22.5.1': dependencies: - undici-types: 6.19.6 + undici-types: 6.19.8 '@types/prop-types@15.7.12': {} '@types/react-dom@18.3.0': dependencies: - '@types/react': 18.3.3 + '@types/react': 18.3.4 - '@types/react@18.3.3': + '@types/react@18.3.4': dependencies: '@types/prop-types': 15.7.12 csstype: 3.1.3 @@ -6458,7 +6630,7 @@ snapshots: transitivePeerDependencies: - babel-plugin-macros - '@vanilla-extract/integration@6.5.0(@types/node@22.4.0)': + '@vanilla-extract/integration@6.5.0(@types/node@22.5.1)': dependencies: '@babel/core': 7.25.2 '@babel/plugin-syntax-typescript': 7.24.7(@babel/core@7.25.2) @@ -6471,8 +6643,8 @@ snapshots: lodash: 4.17.21 mlly: 1.7.1 outdent: 0.8.0 - vite: 5.4.1(@types/node@22.4.0) - vite-node: 1.6.0(@types/node@22.4.0) + vite: 5.4.2(@types/node@22.5.1) + vite-node: 1.6.0(@types/node@22.5.1) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -6487,11 +6659,11 @@ snapshots: '@vanilla-extract/private@1.0.5': {} - '@vercel/analytics@1.3.1(next@14.2.5(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)': + '@vercel/analytics@1.3.1(next@14.2.7(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: server-only: 0.0.1 optionalDependencies: - next: 14.2.5(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + next: 14.2.7(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 '@vercel/edge@1.1.2': {} @@ -6507,16 +6679,16 @@ snapshots: estree-walker: 2.0.2 glob: 7.2.3 graceful-fs: 4.2.11 - micromatch: 4.0.7 - node-gyp-build: 4.8.1 + micromatch: 4.0.8 + node-gyp-build: 4.8.2 resolve-from: 5.0.0 transitivePeerDependencies: - encoding - supports-color - '@vercel/remix@2.11.2(@remix-run/dev@2.11.2(@remix-run/react@2.11.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4))(@remix-run/serve@2.11.2(typescript@5.5.4))(@types/node@22.4.0)(typescript@5.5.4)(vite@5.4.1(@types/node@22.4.0)))(@remix-run/node@2.11.2(typescript@5.5.4))(@remix-run/server-runtime@2.11.2(typescript@5.5.4))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@vercel/remix@2.11.2(@remix-run/dev@2.11.2(@remix-run/react@2.11.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4))(@remix-run/serve@2.11.2(typescript@5.5.4))(@types/node@22.5.1)(typescript@5.5.4)(vite@5.4.2(@types/node@22.5.1)))(@remix-run/node@2.11.2(typescript@5.5.4))(@remix-run/server-runtime@2.11.2(typescript@5.5.4))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@remix-run/dev': 2.11.2(@remix-run/react@2.11.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4))(@remix-run/serve@2.11.2(typescript@5.5.4))(@types/node@22.4.0)(typescript@5.5.4)(vite@5.4.1(@types/node@22.4.0)) + '@remix-run/dev': 2.11.2(@remix-run/react@2.11.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4))(@remix-run/serve@2.11.2(typescript@5.5.4))(@types/node@22.5.1)(typescript@5.5.4)(vite@5.4.2(@types/node@22.5.1)) '@remix-run/node': 2.11.2(typescript@5.5.4) '@remix-run/server-runtime': 2.11.2(typescript@5.5.4) '@vercel/static-config': 3.0.0 @@ -6531,14 +6703,14 @@ snapshots: json-schema-to-ts: 1.6.4 ts-morph: 12.0.0 - '@vitejs/plugin-react@4.3.1(vite@5.4.1(@types/node@22.4.0))': + '@vitejs/plugin-react@4.3.1(vite@5.4.2(@types/node@22.5.1))': dependencies: '@babel/core': 7.25.2 '@babel/plugin-transform-react-jsx-self': 7.24.7(@babel/core@7.25.2) '@babel/plugin-transform-react-jsx-source': 7.24.7(@babel/core@7.25.2) '@types/babel__core': 7.20.5 react-refresh: 0.14.2 - vite: 5.4.1(@types/node@22.4.0) + vite: 5.4.2(@types/node@22.5.1) transitivePeerDependencies: - supports-color @@ -6695,20 +6867,17 @@ snapshots: astring@1.8.6: {} - astro@4.14.2(@types/node@22.4.0)(rollup@4.20.0)(typescript@5.5.4): + astro@4.15.1(@types/node@22.5.1)(rollup@4.21.1)(typescript@5.5.4): dependencies: '@astrojs/compiler': 2.10.3 '@astrojs/internal-helpers': 0.4.1 '@astrojs/markdown-remark': 5.2.0 '@astrojs/telemetry': 3.1.0 '@babel/core': 7.25.2 - '@babel/generator': 7.25.0 - '@babel/parser': 7.25.3 '@babel/plugin-transform-react-jsx': 7.25.2(@babel/core@7.25.2) - '@babel/traverse': 7.25.3 - '@babel/types': 7.25.2 + '@babel/types': 7.25.6 '@oslojs/encoding': 0.4.1 - '@rollup/pluginutils': 5.1.0(rollup@4.20.0) + '@rollup/pluginutils': 5.1.0(rollup@4.21.1) '@types/babel__core': 7.20.5 '@types/cookie': 0.6.0 acorn: 8.12.1 @@ -6729,8 +6898,8 @@ snapshots: es-module-lexer: 1.5.4 esbuild: 0.21.5 estree-walker: 3.0.3 - execa: 8.0.1 fast-glob: 3.3.2 + fastq: 1.17.1 flattie: 1.1.1 github-slugger: 2.0.0 gray-matter: 4.0.3 @@ -6739,10 +6908,11 @@ snapshots: js-yaml: 4.1.0 kleur: 4.1.5 magic-string: 0.30.11 - micromatch: 4.0.7 + magicast: 0.3.5 + micromatch: 4.0.8 mrmime: 2.0.0 neotraverse: 0.6.18 - ora: 8.0.1 + ora: 8.1.0 p-limit: 6.1.0 p-queue: 8.0.1 path-to-regexp: 6.2.2 @@ -6750,14 +6920,15 @@ snapshots: prompts: 2.4.2 rehype: 13.0.1 semver: 7.6.3 - shiki: 1.13.0 + shiki: 1.14.1 string-width: 7.2.0 strip-ansi: 7.1.0 + tinyexec: 0.3.0 tsconfck: 3.1.1(typescript@5.5.4) unist-util-visit: 5.0.0 - vfile: 6.0.2 - vite: 5.4.1(@types/node@22.4.0) - vitefu: 0.2.5(vite@5.4.1(@types/node@22.4.0)) + vfile: 6.0.3 + vite: 5.4.2(@types/node@22.5.1) + vitefu: 0.2.5(vite@5.4.2(@types/node@22.5.1)) which-pm: 3.0.0 xxhash-wasm: 1.0.2 yargs-parser: 21.1.1 @@ -6924,6 +7095,8 @@ snapshots: caniuse-lite@1.0.30001651: {} + caniuse-lite@1.0.30001653: {} + ccount@2.0.1: {} chai@5.1.1: @@ -6987,9 +7160,9 @@ snapshots: dependencies: restore-cursor: 3.1.0 - cli-cursor@4.0.0: + cli-cursor@5.0.0: dependencies: - restore-cursor: 4.0.0 + restore-cursor: 5.1.0 cli-spinners@2.9.2: {} @@ -7110,9 +7283,9 @@ snapshots: core-util-is@1.0.3: {} - cosmiconfig-typescript-loader@5.0.0(@types/node@22.4.0)(cosmiconfig@9.0.0(typescript@5.5.4))(typescript@5.5.4): + cosmiconfig-typescript-loader@5.0.0(@types/node@22.5.1)(cosmiconfig@9.0.0(typescript@5.5.4))(typescript@5.5.4): dependencies: - '@types/node': 22.4.0 + '@types/node': 22.5.1 cosmiconfig: 9.0.0(typescript@5.5.4) jiti: 1.21.6 typescript: 5.5.4 @@ -7246,7 +7419,7 @@ snapshots: electron-to-chromium@1.5.6: {} - emoji-regex@10.3.0: {} + emoji-regex@10.4.0: {} emoji-regex@8.0.0: {} @@ -7415,7 +7588,7 @@ snapshots: eval@0.1.8: dependencies: - '@types/node': 22.4.0 + '@types/node': 22.5.1 require-like: 0.1.2 event-target-shim@5.0.1: {} @@ -7755,13 +7928,13 @@ snapshots: dependencies: function-bind: 1.1.2 - hast-util-from-html@2.0.1: + hast-util-from-html@2.0.2: dependencies: '@types/hast': 3.0.4 devlop: 1.1.0 hast-util-from-parse5: 8.0.1 parse5: 7.1.2 - vfile: 6.0.2 + vfile: 6.0.3 vfile-message: 4.0.2 hast-util-from-parse5@8.0.1: @@ -7771,7 +7944,7 @@ snapshots: devlop: 1.1.0 hastscript: 8.0.0 property-information: 6.5.0 - vfile: 6.0.2 + vfile: 6.0.3 vfile-location: 5.0.3 web-namespaces: 2.0.1 @@ -7795,7 +7968,7 @@ snapshots: parse5: 7.1.2 unist-util-position: 5.0.0 unist-util-visit: 5.0.0 - vfile: 6.0.2 + vfile: 6.0.3 web-namespaces: 2.0.1 zwitch: 2.0.4 @@ -7819,13 +7992,12 @@ snapshots: transitivePeerDependencies: - supports-color - hast-util-to-html@9.0.1: + hast-util-to-html@9.0.2: dependencies: '@types/hast': 3.0.4 '@types/unist': 3.0.3 ccount: 2.0.1 comma-separated-tokens: 2.0.3 - hast-util-raw: 9.0.4 hast-util-whitespace: 3.0.0 html-void-elements: 3.0.0 mdast-util-to-hast: 13.2.0 @@ -8061,7 +8233,7 @@ snapshots: isbot@3.8.0: {} - isbot@5.1.16: {} + isbot@5.1.17: {} isexe@2.0.0: {} @@ -8088,7 +8260,7 @@ snapshots: dependencies: argparse: 2.0.1 - jsdom@24.1.1: + jsdom@25.0.0: dependencies: cssstyle: 4.0.1 data-urls: 5.0.0 @@ -8248,6 +8420,12 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 + magicast@0.3.5: + dependencies: + '@babel/parser': 7.25.6 + '@babel/types': 7.25.6 + source-map-js: 1.2.0 + make-dir@3.1.0: dependencies: semver: 6.3.1 @@ -8315,7 +8493,7 @@ snapshots: mdast-util-to-markdown: 1.5.0 micromark-extension-frontmatter: 1.1.1 - mdast-util-gfm-autolink-literal@2.0.0: + mdast-util-gfm-autolink-literal@2.0.1: dependencies: '@types/mdast': 4.0.4 ccount: 2.0.1 @@ -8363,7 +8541,7 @@ snapshots: mdast-util-gfm@3.0.0: dependencies: mdast-util-from-markdown: 2.0.1 - mdast-util-gfm-autolink-literal: 2.0.0 + mdast-util-gfm-autolink-literal: 2.0.1 mdast-util-gfm-footnote: 2.0.0 mdast-util-gfm-strikethrough: 2.0.0 mdast-util-gfm-table: 2.0.0 @@ -8450,7 +8628,7 @@ snapshots: trim-lines: 3.0.1 unist-util-position: 5.0.0 unist-util-visit: 5.0.0 - vfile: 6.0.2 + vfile: 6.0.3 mdast-util-to-markdown@1.5.0: dependencies: @@ -8907,6 +9085,11 @@ snapshots: braces: 3.0.3 picomatch: 2.3.1 + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + mime-db@1.52.0: {} mime-db@1.53.0: @@ -8922,6 +9105,8 @@ snapshots: mimic-fn@4.0.0: {} + mimic-function@5.0.1: {} + minimatch@3.1.2: dependencies: brace-expansion: 1.1.11 @@ -9011,27 +9196,27 @@ snapshots: neotraverse@0.6.18: {} - next@14.2.5(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + next@14.2.7(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@next/env': 14.2.5 + '@next/env': 14.2.7 '@swc/helpers': 0.5.5 busboy: 1.6.0 - caniuse-lite: 1.0.30001651 + caniuse-lite: 1.0.30001653 graceful-fs: 4.2.11 postcss: 8.4.31 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) styled-jsx: 5.1.1(@babel/core@7.25.2)(react@18.3.1) optionalDependencies: - '@next/swc-darwin-arm64': 14.2.5 - '@next/swc-darwin-x64': 14.2.5 - '@next/swc-linux-arm64-gnu': 14.2.5 - '@next/swc-linux-arm64-musl': 14.2.5 - '@next/swc-linux-x64-gnu': 14.2.5 - '@next/swc-linux-x64-musl': 14.2.5 - '@next/swc-win32-arm64-msvc': 14.2.5 - '@next/swc-win32-ia32-msvc': 14.2.5 - '@next/swc-win32-x64-msvc': 14.2.5 + '@next/swc-darwin-arm64': 14.2.7 + '@next/swc-darwin-x64': 14.2.7 + '@next/swc-linux-arm64-gnu': 14.2.7 + '@next/swc-linux-arm64-musl': 14.2.7 + '@next/swc-linux-x64-gnu': 14.2.7 + '@next/swc-linux-x64-musl': 14.2.7 + '@next/swc-win32-arm64-msvc': 14.2.7 + '@next/swc-win32-ia32-msvc': 14.2.7 + '@next/swc-win32-x64-msvc': 14.2.7 transitivePeerDependencies: - '@babel/core' - babel-plugin-macros @@ -9044,7 +9229,7 @@ snapshots: dependencies: whatwg-url: 5.0.0 - node-gyp-build@4.8.1: {} + node-gyp-build@4.8.2: {} node-releases@2.0.18: {} @@ -9126,6 +9311,10 @@ snapshots: dependencies: mimic-fn: 4.0.0 + onetime@7.0.0: + dependencies: + mimic-function: 5.0.1 + ora@5.4.1: dependencies: bl: 4.1.0 @@ -9138,10 +9327,10 @@ snapshots: strip-ansi: 6.0.1 wcwidth: 1.0.1 - ora@8.0.1: + ora@8.1.0: dependencies: chalk: 5.3.0 - cli-cursor: 4.0.0 + cli-cursor: 5.0.0 cli-spinners: 2.9.2 is-interactive: 2.0.0 is-unicode-supported: 2.0.0 @@ -9236,7 +9425,7 @@ snapshots: nlcst-to-string: 4.0.0 unist-util-modify-children: 4.0.0 unist-util-visit-children: 3.0.0 - vfile: 6.0.2 + vfile: 6.0.3 parse-ms@2.1.0: {} @@ -9519,19 +9708,19 @@ snapshots: rehype-parse@9.0.0: dependencies: '@types/hast': 3.0.4 - hast-util-from-html: 2.0.1 + hast-util-from-html: 2.0.2 unified: 11.0.5 rehype-raw@7.0.0: dependencies: '@types/hast': 3.0.4 hast-util-raw: 9.0.4 - vfile: 6.0.2 + vfile: 6.0.3 rehype-stringify@10.0.0: dependencies: '@types/hast': 3.0.4 - hast-util-to-html: 9.0.1 + hast-util-to-html: 9.0.2 unified: 11.0.5 rehype@13.0.1: @@ -9603,12 +9792,12 @@ snapshots: '@types/mdast': 4.0.4 mdast-util-to-hast: 13.2.0 unified: 11.0.5 - vfile: 6.0.2 + vfile: 6.0.3 remark-smartypants@3.0.2: dependencies: retext: 9.0.0 - retext-smartypants: 6.1.0 + retext-smartypants: 6.1.1 unified: 11.0.5 unist-util-visit: 5.0.0 @@ -9637,10 +9826,10 @@ snapshots: onetime: 5.1.2 signal-exit: 3.0.7 - restore-cursor@4.0.0: + restore-cursor@5.1.0: dependencies: - onetime: 5.1.2 - signal-exit: 3.0.7 + onetime: 7.0.0 + signal-exit: 4.1.0 retext-latin@4.0.0: dependencies: @@ -9648,7 +9837,7 @@ snapshots: parse-latin: 7.0.0 unified: 11.0.5 - retext-smartypants@6.1.0: + retext-smartypants@6.1.1: dependencies: '@types/nlcst': 2.0.3 nlcst-to-string: 4.0.0 @@ -9697,6 +9886,28 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.20.0 fsevents: 2.3.3 + rollup@4.21.1: + dependencies: + '@types/estree': 1.0.5 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.21.1 + '@rollup/rollup-android-arm64': 4.21.1 + '@rollup/rollup-darwin-arm64': 4.21.1 + '@rollup/rollup-darwin-x64': 4.21.1 + '@rollup/rollup-linux-arm-gnueabihf': 4.21.1 + '@rollup/rollup-linux-arm-musleabihf': 4.21.1 + '@rollup/rollup-linux-arm64-gnu': 4.21.1 + '@rollup/rollup-linux-arm64-musl': 4.21.1 + '@rollup/rollup-linux-powerpc64le-gnu': 4.21.1 + '@rollup/rollup-linux-riscv64-gnu': 4.21.1 + '@rollup/rollup-linux-s390x-gnu': 4.21.1 + '@rollup/rollup-linux-x64-gnu': 4.21.1 + '@rollup/rollup-linux-x64-musl': 4.21.1 + '@rollup/rollup-win32-arm64-msvc': 4.21.1 + '@rollup/rollup-win32-ia32-msvc': 4.21.1 + '@rollup/rollup-win32-x64-msvc': 4.21.1 + fsevents: 2.3.3 + rrweb-cssom@0.6.0: {} rrweb-cssom@0.7.1: {} @@ -9815,9 +10026,9 @@ snapshots: shebang-regex@3.0.0: {} - shiki@1.13.0: + shiki@1.14.1: dependencies: - '@shikijs/core': 1.13.0 + '@shikijs/core': 1.14.1 '@types/hast': 3.0.4 side-channel@1.0.6: @@ -9928,7 +10139,7 @@ snapshots: string-width@7.2.0: dependencies: - emoji-regex: 10.3.0 + emoji-regex: 10.4.0 get-east-asian-width: 1.2.0 strip-ansi: 7.1.0 @@ -10037,6 +10248,8 @@ snapshots: tinybench@2.9.0: {} + tinyexec@0.3.0: {} + tinypool@1.0.0: {} tinyrainbow@1.2.0: {} @@ -10099,7 +10312,7 @@ snapshots: minimist: 1.2.8 strip-bom: 3.0.0 - tslib@2.6.3: {} + tslib@2.7.0: {} tsscmp@1.0.6: {} @@ -10130,34 +10343,34 @@ snapshots: - tsx - yaml - turbo-darwin-64@2.0.14: + turbo-darwin-64@2.1.0: optional: true - turbo-darwin-arm64@2.0.14: + turbo-darwin-arm64@2.1.0: optional: true - turbo-linux-64@2.0.14: + turbo-linux-64@2.1.0: optional: true - turbo-linux-arm64@2.0.14: + turbo-linux-arm64@2.1.0: optional: true turbo-stream@2.3.0: {} - turbo-windows-64@2.0.14: + turbo-windows-64@2.1.0: optional: true - turbo-windows-arm64@2.0.14: + turbo-windows-arm64@2.1.0: optional: true - turbo@2.0.14: + turbo@2.1.0: optionalDependencies: - turbo-darwin-64: 2.0.14 - turbo-darwin-arm64: 2.0.14 - turbo-linux-64: 2.0.14 - turbo-linux-arm64: 2.0.14 - turbo-windows-64: 2.0.14 - turbo-windows-arm64: 2.0.14 + turbo-darwin-64: 2.1.0 + turbo-darwin-arm64: 2.1.0 + turbo-linux-64: 2.1.0 + turbo-linux-arm64: 2.1.0 + turbo-windows-64: 2.1.0 + turbo-windows-arm64: 2.1.0 type-fest@2.19.0: {} @@ -10172,7 +10385,7 @@ snapshots: ultrahtml@1.5.3: {} - undici-types@6.19.6: {} + undici-types@6.19.8: {} undici@6.19.7: {} @@ -10196,7 +10409,7 @@ snapshots: extend: 3.0.2 is-plain-obj: 4.1.0 trough: 2.2.0 - vfile: 6.0.2 + vfile: 6.0.3 unique-filename@3.0.0: dependencies: @@ -10336,7 +10549,7 @@ snapshots: vfile-location@5.0.3: dependencies: '@types/unist': 3.0.3 - vfile: 6.0.2 + vfile: 6.0.3 vfile-message@3.1.4: dependencies: @@ -10355,19 +10568,18 @@ snapshots: unist-util-stringify-position: 3.0.3 vfile-message: 3.1.4 - vfile@6.0.2: + vfile@6.0.3: dependencies: '@types/unist': 3.0.3 - unist-util-stringify-position: 4.0.0 vfile-message: 4.0.2 - vite-node@1.6.0(@types/node@22.4.0): + vite-node@1.6.0(@types/node@22.5.1): dependencies: cac: 6.7.14 debug: 4.3.6 pathe: 1.1.2 picocolors: 1.0.1 - vite: 5.4.1(@types/node@22.4.0) + vite: 5.4.2(@types/node@22.5.1) transitivePeerDependencies: - '@types/node' - less @@ -10379,13 +10591,13 @@ snapshots: - supports-color - terser - vite-node@2.0.5(@types/node@22.4.0): + vite-node@2.0.5(@types/node@22.5.1): dependencies: cac: 6.7.14 debug: 4.3.6 pathe: 1.1.2 tinyrainbow: 1.2.0 - vite: 5.4.1(@types/node@22.4.0) + vite: 5.4.2(@types/node@22.5.1) transitivePeerDependencies: - '@types/node' - less @@ -10397,31 +10609,31 @@ snapshots: - supports-color - terser - vite-tsconfig-paths@5.0.1(typescript@5.5.4)(vite@5.4.1(@types/node@22.4.0)): + vite-tsconfig-paths@5.0.1(typescript@5.5.4)(vite@5.4.2(@types/node@22.5.1)): dependencies: debug: 4.3.6 globrex: 0.1.2 tsconfck: 3.1.1(typescript@5.5.4) optionalDependencies: - vite: 5.4.1(@types/node@22.4.0) + vite: 5.4.2(@types/node@22.5.1) transitivePeerDependencies: - supports-color - typescript - vite@5.4.1(@types/node@22.4.0): + vite@5.4.2(@types/node@22.5.1): dependencies: esbuild: 0.21.5 postcss: 8.4.41 - rollup: 4.20.0 + rollup: 4.21.1 optionalDependencies: - '@types/node': 22.4.0 + '@types/node': 22.5.1 fsevents: 2.3.3 - vitefu@0.2.5(vite@5.4.1(@types/node@22.4.0)): + vitefu@0.2.5(vite@5.4.2(@types/node@22.5.1)): optionalDependencies: - vite: 5.4.1(@types/node@22.4.0) + vite: 5.4.2(@types/node@22.5.1) - vitest@2.0.5(@types/node@22.4.0)(jsdom@24.1.1): + vitest@2.0.5(@types/node@22.5.1)(jsdom@25.0.0): dependencies: '@ampproject/remapping': 2.3.0 '@vitest/expect': 2.0.5 @@ -10439,12 +10651,12 @@ snapshots: tinybench: 2.9.0 tinypool: 1.0.0 tinyrainbow: 1.2.0 - vite: 5.4.1(@types/node@22.4.0) - vite-node: 2.0.5(@types/node@22.4.0) + vite: 5.4.2(@types/node@22.5.1) + vite-node: 2.0.5(@types/node@22.5.1) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 22.4.0 - jsdom: 24.1.1 + '@types/node': 22.5.1 + jsdom: 25.0.0 transitivePeerDependencies: - less - lightningcss