Repository: shikijs/shiki
Pull request #900 (2025-01-20 10:12:49)

feat!: remove deprecated apis for v3.0
Draft PR for v3.0.0

netlify[bot]: ### <span aria-hidden="true">👷</span> Deploy Preview for *shiki-matsu* processing.


|  Name | Link |
|:-:|------------------------|
|<span aria-hidden="true">🔨</span> Latest commit | ab391e8b9cfaafbf739cd9ae825b11f5f37d285a |
|<span aria-hidden="true">🔍</span> Latest deploy log | https://app.netlify.com/sites/shiki-matsu/deploys/678e21a4ddbd560008645992 |
netlify[bot]: ### <span aria-hidden="true">👷</span> Deploy Preview for *shiki-next* processing.


|  Name | Link |
|:-:|------------------------|
|<span aria-hidden="true">🔨</span> Latest commit | ab391e8b9cfaafbf739cd9ae825b11f5f37d285a |
|<span aria-hidden="true">🔍</span> Latest deploy log | https://app.netlify.com/sites/shiki-next/deploys/678e21a413ed5a0008f930af |

Patch:
diff --git a/docs/.vitepress/config.ts b/docs/.vitepress/config.ts
index 4559db3e..f5a13bce 100644
--- a/docs/.vitepress/config.ts
+++ b/docs/.vitepress/config.ts
@@ -52,6 +52,7 @@ const INTEGRATIONS: DefaultTheme.NavItemWithLink[] = [
 ]
 
 const BLOGS: DefaultTheme.NavItemWithLink[] = [
+  { text: 'Shiki v3.0', link: '/blog/v3' },
   { text: 'Shiki v2.0', link: '/blog/v2' },
   { text: 'The Evolution of Shiki v1.0', link: 'https://nuxt.com/blog/shiki-v1' },
 ]
@@ -143,7 +144,6 @@ export default withMermaid(defineConfig({
       transformerRemoveNotationEscape(),
       transformerColorizedBrackets({ explicitTrigger: true }),
     ],
-    // @ts-expect-error Waits for https://github.com/vuejs/vitepress/pull/4507
     languages: ['js', 'jsx', 'ts', 'tsx'],
     config: (md) => {
       md.use(groupIconMdPlugin)
diff --git a/docs/blog/v2.md b/docs/blog/v2.md
index dc337bc5..f3004e88 100644
--- a/docs/blog/v2.md
+++ b/docs/blog/v2.md
@@ -59,7 +59,7 @@ There is no functional changes, but more like correcting the naming to avoid con
 
 ### WASM Related APIs
 
-Since the introduction of the [engine system](/guide/regex-engines) in v0.16, WebAssembly-related dependencies are no longer a hard requirement. To facilitate tree-shaking and decouple the engines from the core, two packages have been extracted: `@shikijs/engine-oniguruma` and `@shikijs/engine-javascript`. These are also re-exported from the main package as `shiki/engine/oniguruma` and `shiki/engine/javascript`, respectively.
+Since the introduction of the [engine system](/guide/regex-engines) in v1.16, WebAssembly-related dependencies are no longer a hard requirement. To facilitate tree-shaking and decouple the engines from the core, two packages have been extracted: `@shikijs/engine-oniguruma` and `@shikijs/engine-javascript`. These are also re-exported from the main package as `shiki/engine/oniguruma` and `shiki/engine/javascript`, respectively.
 
 You might need to change your import path:
 
diff --git a/docs/blog/v3.md b/docs/blog/v3.md
new file mode 100644
index 00000000..ea67f8b3
--- /dev/null
+++ b/docs/blog/v3.md
@@ -0,0 +1,99 @@
+---
+outline: deep
+---
+
+# Shiki v3.0.0
+
+Shiki v3.0.0 is [another](./v2) **boring** release that removes deprecated APIs that have been marked since v1.x and explicitly warned in v2.x.
+
+In Shiki, new features are shipped in minor releases progressively, while the major releases is for cleaning up and removing deprecated APIs.
+
+If you are still on v1.x, please [migrate to v2.x](./v2) first. It should provides you a smooth transition path to v3.0.0.
+
+## Breaking Changes
+
+- `v1.x`: Deprecated APIs are still supported, marked on type level only. With optional runtime warnings to opt-in.
+- `v2.0`: No breaking changes, but enable runtime deprecated warnings by default.
+- 👉 `v3.0`: Remove deprecated APIs, breaking changes.
+
+### `getHighlighter` -> `createHighlighter`
+
+There is no functional changes, but more like correcting the naming to avoid confusion. It should be a straightforward find-and-replace.
+
+### WASM Related APIs
+
+Since the introduction of the [engine system](/guide/regex-engines) in v1.16, WebAssembly-related dependencies are no longer a hard requirement. To facilitate tree-shaking and decouple the engines from the core, two packages have been extracted: `@shikijs/engine-oniguruma` and `@shikijs/engine-javascript`. These are also re-exported from the main package as `shiki/engine/oniguruma` and `shiki/engine/javascript`, respectively.
+
+You might need to change your import path:
+
+```ts
+import { loadWasm } from 'shiki' // [!code --]
+import { loadWasm } from 'shiki/engine/oniguruma' // [!code ++]
+```
+
+`loadWasm` field in `createHighlighterCore` is replaced with `engine` field:
+
+```ts
+import { createHighlighter } from 'shiki'
+import { createOnigurumaEngine } from 'shiki/engine/oniguruma' // [!code ++]
+
+const shiki = await createHighlighter({
+  // ...
+  loadWasm: () => import('shiki/wasm'), // [!code --]
+  engine: createOnigurumaEngine(() => import('shiki/wasm')), // [!code ++]
+})
+```
+
+Meanwhile, `@shikijs/core` package no longer includes the engines or wasm binaries. You need to import them from the `@shikijs/engine-oniguruma` and `@shikijs/engine-javascript` packages.
+
+### Shiki Compat
+
+The `@shikijs/compat` package that built for compatibility with v0.14 is now discontinued. Please migrate to the main package.
+
+### Transformers Matching Algorithm
+
+The `matchAlgorithm` option for transformers was introduced in v1.29.0, allowing users to choose the matching algorithm. The default value is change from `v1` to `v3` in v3.0.0.
+
+[Learn more](/packages/transformers#matching-algorithm).
+
+### Other Breaking Changes
+
+- `createdBundledHighlighter` requires a single object-style argument
+- `@shikijs/core`
+  - The regex engines `createJavaScriptRegexEngine` `createOnigurumaEngine` are no longer included, import them from `@shikijs/engine-oniguruma` and `@shikijs/engine-javascript` respectively
+  - `@shikijs/core/wasm-inline` is replaced with `@shikijs/engine-oniguruma/wasm-inline`
+  - Import `FontStyle` and `StackElementMetadata` from `@shikijs/vscode-textmate` instead of `@shikijs/core`
+
+## Try It as a User
+
+If you are using Shiki indirectly via other packages, like [`vitepress`](https://vitepress.dev/) or [`@nuxt/content`](https://content.nuxt.com/), where you don't directly control the version of Shiki, you can try adding the following lines to your `package.json` to force the usage of [Shiki v2.0.0](./v2) first.
+
+```json
+{
+  "resolutions": {
+    "shiki": "^2",
+    "@shikijs/core": "^2",
+    "@shikijs/transformers": "^2",
+    "@shikijs/markdown-it": "^2",
+    "@shikijs/rehype": "^2"
+  }
+}
+```
+
+Then run the tool to see if it emits any warnings. If they do, please report it to their repositories to raise awareness of the upcoming changes. And if not, the tool should work as expected with Shiki v3.0.0, where you can then further migrate to v3 as:
+
+```json
+{
+  "resolutions": {
+    "shiki": "^3",
+    "@shikijs/core": "^3",
+    "@shikijs/transformers": "^3",
+    "@shikijs/markdown-it": "^3",
+    "@shikijs/rehype": "^3"
+  }
+}
+```
+
+## Feedback
+
+Any feedbacks are welcome! Feel free to open an issue on [GitHub](https://github.com/shikijs/shiki) and let us know your thoughts.
diff --git a/docs/guide/compat.md b/docs/guide/compat.md
index 8054ad96..bf23d9cd 100644
--- a/docs/guide/compat.md
+++ b/docs/guide/compat.md
@@ -4,6 +4,10 @@ outline: deep
 
 # Compatibility Build
 
+::: warn
+This is a compatibility build for v0.x users. And this package is no longer maintained since v3. Please migrate to the latest version.
+:::
+
 To make deep migration easier, we provide a compatibility build that shimmed the breaking changes from v0.x. You can use it as a drop-in replacement for `shiki` and migrate step by step.
 
 ## Installations
diff --git a/docs/guide/migrate.md b/docs/guide/migrate.md
index 8b4dc0c5..84533df4 100644
--- a/docs/guide/migrate.md
+++ b/docs/guide/migrate.md
@@ -6,9 +6,13 @@ outline: deep
 
 We suggest you to migrate step by step, following each version's migration guide.
 
+## Migrate from v2.0
+
+If you are on v2.0 and there is no warning in your usage, you should be able to directly bump to v3.0, read [Shiki v3.0](/blog/v3) for more details.
+
 ## Migrate from v1.0
 
-There is no hard breaking changes in v2.0, read [Shiki v2.0](/blog/v2) for more details.
+We recommend you to [migrate to v2.0 first](/blog/v2), then to v3.0.
 
 ## Migrate from v0.14
 
diff --git a/package.json b/package.json
index a3e154df..1153fab9 100644
--- a/package.json
+++ b/package.json
@@ -2,7 +2,7 @@
   "type": "module",
   "version": "2.4.2",
   "private": true,
-  "packageManager": "pnpm@10.4.0",
+  "packageManager": "pnpm@10.4.1",
   "scripts": {
     "lint": "eslint . --cache",
     "release": "bumpp",
@@ -49,6 +49,7 @@
     "esno": "catalog:",
     "fast-glob": "catalog:",
     "fs-extra": "catalog:",
+    "hast-util-to-html": "catalog:",
     "jiti": "catalog:",
     "jsonc-parser": "catalog:",
     "lint-staged": "catalog:",
diff --git a/packages/compat/README.md b/packages/compat/README.md
deleted file mode 100644
index 11ad92c4..00000000
--- a/packages/compat/README.md
+++ /dev/null
@@ -1,9 +0,0 @@
-# shiki-compat
-
-Compatible build of `shiki` to align with `shiki`.
-
-[Documentation](https://shiki.style/guide/compat)
-
-## License
-
-MIT
diff --git a/packages/compat/build.config.ts b/packages/compat/build.config.ts
deleted file mode 100644
index da09e2a0..00000000
--- a/packages/compat/build.config.ts
+++ /dev/null
@@ -1,23 +0,0 @@
-import { defineBuildConfig } from 'unbuild'
-
-export default defineBuildConfig({
-  entries: [
-    'src/index.ts',
-  ],
-  declaration: true,
-  rollup: {
-    emitCJS: false,
-    dts: {
-      respectExternal: true,
-      compilerOptions: {
-        paths: {},
-      },
-    },
-  },
-  externals: [
-    'hast',
-    'shiki',
-    '@shikijs/types',
-    /^@shikijs[\\/].*/,
-  ],
-})
diff --git a/packages/compat/index.cjs b/packages/compat/index.cjs
deleted file mode 100644
index df68f260..00000000
--- a/packages/compat/index.cjs
+++ /dev/null
@@ -1,13 +0,0 @@
-async function createHighlighter(...args) {
-  const { createHighlighter } = await import('./dist/index.mjs')
-  return createHighlighter(...args)
-}
-
-async function loadTheme(...args) {
-  const { loadTheme } = await import('./dist/index.mjs')
-  return loadTheme(...args)
-}
-
-module.exports = createHighlighter
-module.exports.createHighlighter = createHighlighter
-module.exports.loadTheme = loadTheme
diff --git a/packages/compat/package.json b/packages/compat/package.json
deleted file mode 100644
index 4869fc37..00000000
--- a/packages/compat/package.json
+++ /dev/null
@@ -1,51 +0,0 @@
-{
-  "name": "@shikijs/compat",
-  "type": "module",
-  "version": "2.4.2",
-  "description": "Shiki v0.x compatible API",
-  "author": "Anthony Fu <anthonyfu117@hotmail.com>",
-  "license": "MIT",
-  "homepage": "https://github.com/shikijs/shiki#readme",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/shikijs/shiki.git",
-    "directory": "packages/compat"
-  },
-  "bugs": "https://github.com/shikijs/shiki/issues",
-  "keywords": [
-    "shiki",
-    "rehype"
-  ],
-  "sideEffects": false,
-  "exports": {
-    ".": {
-      "types": "./dist/index.d.mts",
-      "require": "./index.cjs",
-      "default": "./dist/index.mjs"
-    }
-  },
-  "main": "./dist/index.mjs",
-  "module": "./dist/index.mjs",
-  "types": "./dist/index.d.mts",
-  "files": [
-    "dist",
-    "index.cjs"
-  ],
-  "scripts": {
-    "build": "unbuild",
-    "dev": "unbuild --stub",
-    "prepublishOnly": "nr build"
-  },
-  "dependencies": {
-    "@shikijs/core": "workspace:*",
-    "@shikijs/langs": "workspace:*",
-    "@shikijs/themes": "workspace:*",
-    "@shikijs/transformers": "workspace:*",
-    "@shikijs/types": "workspace:*",
-    "@shikijs/vscode-textmate": "catalog:",
-    "shiki": "workspace:*"
-  },
-  "devDependencies": {
-    "shiki-legacy": "catalog:"
-  }
-}
diff --git a/packages/compat/src/error.ts b/packages/compat/src/error.ts
deleted file mode 100644
index 6be1d215..00000000
--- a/packages/compat/src/error.ts
+++ /dev/null
@@ -1,8 +0,0 @@
-import { ShikiError } from '@shikijs/core'
-
-export class ShikiCompatError extends ShikiError {
-  constructor(message: string) {
-    super(message)
-    this.name = 'ShikiCompatError'
-  }
-}
diff --git a/packages/compat/src/index.ts b/packages/compat/src/index.ts
deleted file mode 100644
index f96c949b..00000000
--- a/packages/compat/src/index.ts
+++ /dev/null
@@ -1,166 +0,0 @@
-import type { BuiltinLanguage, BuiltinTheme, CodeToTokensBaseOptions, MaybeGetter, StringLiteralUnion, ThemedToken, ThemeInput, ThemeRegistrationAny, ThemeRegistrationResolved } from 'shiki'
-import type { AnsiToHtmlOptions, CodeToHtmlOptions, CodeToHtmlOptionsExtra, HighlighterOptions } from './types'
-
-import fs from 'node:fs'
-import fsp from 'node:fs/promises'
-import { transformerCompactLineOptions } from '@shikijs/transformers'
-import { bundledLanguages, bundledThemes, createHighlighter as getShiki, normalizeTheme, tokenizeAnsiWithTheme, warnDeprecated } from 'shiki'
-import { ShikiCompatError } from './error'
-
-export const BUNDLED_LANGUAGES = bundledLanguages
-export const BUNDLED_THEMES = bundledThemes
-
-export { ShikiCompatError } from './error'
-
-export * from './stub'
-export * from './types'
-
-export { normalizeTheme } from 'shiki'
-export { normalizeTheme as toShikiTheme } from 'shiki'
-
-export interface ShikiCompatHighlighter {
-  ansiToHtml: (code: string, options?: AnsiToHtmlOptions) => string
-
-  codeToHtml: ((code: string, options: CodeToHtmlOptions) => string)
-    & ((code: string, lang: StringLiteralUnion<BuiltinLanguage>, theme?: StringLiteralUnion<BuiltinTheme>, options?: CodeToHtmlOptionsExtra) => string)
-
-  codeToThemedTokens: (code: string, lang: BuiltinLanguage, theme?: BuiltinTheme, options?: CodeToTokensBaseOptions<BuiltinLanguage, BuiltinTheme>) => ThemedToken[][]
-  codeToTokensBase: (code: string, lang: BuiltinLanguage, theme?: BuiltinTheme, options?: CodeToTokensBaseOptions<BuiltinLanguage, BuiltinTheme>) => ThemedToken[][]
-  getBackgroundColor: (theme: BuiltinTheme | ThemeRegistrationAny | string) => string
-  getForegroundColor: (theme: BuiltinTheme | ThemeRegistrationAny | string) => string
-  ansiToThemedTokens: (ansi: string, options?: CodeToTokensBaseOptions) => ThemedToken[][]
-  setColorReplacements: (...args: any[]) => void
-  getLoadedThemes: () => string[]
-  getLoadedLanguages: () => string[]
-}
-
-export async function getHighlighter(options: Partial<HighlighterOptions> = {}): Promise<ShikiCompatHighlighter> {
-  warnDeprecated(`@shikijs/compat is deprecated and will be removed in v3, please migrate to the main shiki package`)
-
-  const themes = options.themes || []
-  const langs = options.langs || []
-
-  if (options.theme)
-    themes.unshift(options.theme)
-  if (!themes.length)
-    themes.push('nord')
-
-  if (!langs.length)
-    langs.push(...Object.keys(bundledLanguages) as BuiltinLanguage[])
-
-  const shiki = await getShiki({
-    ...options,
-    themes,
-    langs,
-  })
-
-  const defaultTheme = shiki.getLoadedThemes()[0]
-
-  function codeToTokensBase(code: string, lang: BuiltinLanguage, theme?: BuiltinTheme, options?: CodeToTokensBaseOptions<BuiltinLanguage, BuiltinTheme>): ThemedToken[][] {
-    const tokens = shiki.codeToTokensBase(code, {
-      includeExplanation: true,
-      lang,
-      theme: (theme || defaultTheme) as BuiltinTheme,
-      ...options,
-    })
-
-    tokens.forEach((line) => {
-      line.forEach((token) => {
-        // Shiki always provides `explanation` array, even it's disabled
-        token.explanation ||= []
-        // @ts-expect-error Shiki does not have `offset` in `ThemedToken`
-        delete token.offset
-      })
-    })
-
-    return tokens
-  }
-
-  function codeToHtml(code: string, options: CodeToHtmlOptions): string
-  /** @deprecated pass the second argument as object instead */
-  function codeToHtml(code: string, lang: StringLiteralUnion<BuiltinLanguage>, theme?: StringLiteralUnion<BuiltinTheme>, options?: CodeToHtmlOptionsExtra): string
-  function codeToHtml(code: string, arg1: any, arg2?: StringLiteralUnion<BuiltinTheme>, options2?: CodeToHtmlOptionsExtra): string {
-    const options: CodeToHtmlOptions = (
-      typeof arg1 === 'string'
-        ? options2
-        : arg1
-    ) || {}
-
-    if (typeof arg1 === 'string')
-      options.lang ||= arg1
-
-    if (!('themes' in options)) {
-      // @ts-expect-error when `themes` is not in options, `theme` has to be a string
-      options.theme = 'theme' in options
-        ? (options.theme || defaultTheme)
-        : arg2 || defaultTheme
-    }
-
-    if (options.lineOptions) {
-      options.transformers ||= []
-      options.transformers.push(transformerCompactLineOptions(options.lineOptions))
-    }
-
-    return shiki.codeToHtml(code, options as any)
-  }
-
-  function ansiToThemedTokens(
-    ansi: string,
-    options: CodeToTokensBaseOptions = {},
-  ): ThemedToken[][] {
-    const theme = shiki.getTheme(options.theme || shiki.getLoadedThemes()[0])
-    return tokenizeAnsiWithTheme(theme, ansi)
-  }
-
-  return {
-    ...shiki,
-    ansiToThemedTokens,
-    codeToTokensBase,
-    codeToThemedTokens: codeToTokensBase,
-    codeToHtml,
-    ansiToHtml(code: string, options?: AnsiToHtmlOptions) {
-      return shiki.codeToHtml(code, {
-        lang: 'ansi',
-        ...options,
-        theme: options?.theme || defaultTheme,
-      })
-    },
-    getBackgroundColor(theme: BuiltinTheme | ThemeRegistrationAny | string) {
-      return shiki.getTheme(theme).bg
-    },
-    getForegroundColor(theme: BuiltinTheme | ThemeRegistrationAny | string) {
-      return shiki.getTheme(theme).fg
-    },
-
-    /**
-     * @deprecated Not supported by Shiki
-     */
-    setColorReplacements(..._args: any[]) {
-      throw new ShikiCompatError('`setColorReplacements` is not supported by @shikijs/compat')
-    },
-  }
-}
-
-export type Highlighter = Awaited<ReturnType<typeof getHighlighter>>
-
-export async function loadTheme(theme: BuiltinTheme | ThemeInput): Promise<ThemeRegistrationResolved> {
-  if (typeof theme === 'string') {
-    if (bundledThemes[theme] != null)
-      return normalizeTheme(await bundledThemes[theme]().then(r => r.default))
-
-    // provide as a path
-    if (fs.existsSync(theme) && theme.endsWith('.json'))
-      return normalizeTheme(JSON.parse(await fsp.readFile(theme, 'utf-8')))
-
-    throw new ShikiCompatError(`Unknown theme: ${theme}`)
-  }
-  else {
-    return normalizeTheme(await normalizeGetter(theme))
-  }
-}
-
-async function normalizeGetter<T>(p: MaybeGetter<T>): Promise<T> {
-  return Promise.resolve(typeof p === 'function' ? (p as any)() : p).then(r => r.default || r)
-}
-
-export default getHighlighter
diff --git a/packages/compat/src/stub.ts b/packages/compat/src/stub.ts
deleted file mode 100644
index 395de216..00000000
--- a/packages/compat/src/stub.ts
+++ /dev/null
@@ -1,18 +0,0 @@
-const _warned = new Set<string>()
-
-function warnOnce(message: string): void {
-  if (!_warned.has(message)) {
-    console.warn(`[shiki-compat]: ${message}`)
-    _warned.add(message)
-  }
-}
-function stubFunction(name: string): () => void {
-  return () => {
-    warnOnce(`\`${name}\` is a stub function in \`shiki-compat\` and does nothing.`)
-  }
-}
-
-export const setCDN = stubFunction('setCDN')
-export const setOnigasmWASM = stubFunction('setOnigasmWASM')
-export const setWasm = stubFunction('setWasm')
-export const setColorReplacements = stubFunction('setColorReplacements')
diff --git a/packages/compat/src/types.ts b/packages/compat/src/types.ts
deleted file mode 100644
index c5eaf616..00000000
--- a/packages/compat/src/types.ts
+++ /dev/null
@@ -1,58 +0,0 @@
-import type {
-  BuiltinLanguage,
-  BuiltinTheme,
-  BundledHighlighterOptions,
-  CodeOptionsMultipleThemes,
-  CodeOptionsSingleTheme,
-  CodeToHastOptionsCommon,
-  LanguageRegistration,
-  RawGrammar,
-  StringLiteralUnion,
-  ThemedToken,
-  ThemeRegistrationAny,
-  ThemeRegistrationResolved,
-} from 'shiki'
-
-export interface LineOption {
-  /**
-   * 1-based line number.
-   */
-  line: number
-  classes?: string[]
-}
-
-export interface OptionsOfLineOptions {
-  lineOptions?: LineOption[]
-}
-
-export interface AnsiToHtmlOptions extends OptionsOfLineOptions {
-  theme?: StringLiteralUnion<BuiltinTheme>
-}
-
-export interface HighlighterOptions extends BundledHighlighterOptions<BuiltinLanguage, BuiltinTheme> {
-  theme?: BuiltinTheme
-}
-
-export type IThemeRegistration = ThemeRegistrationAny | StringLiteralUnion<BuiltinTheme>
-
-export interface IShikiTheme extends ThemeRegistrationResolved {}
-export interface IThemedToken extends ThemedToken {}
-export interface IRawGrammar extends RawGrammar {}
-
-export interface ILanguageRegistration extends LanguageRegistration {
-  grammar?: IRawGrammar
-}
-
-export type Lang = StringLiteralUnion<BuiltinLanguage>
-export type Theme = StringLiteralUnion<BuiltinTheme>
-
-export type CodeToHtmlOptions = (
-  | Partial<CodeOptionsSingleTheme<BuiltinTheme>>
-  | Partial<CodeOptionsMultipleThemes<BuiltinTheme>>
-)
-& CodeToHastOptionsCommon<BuiltinLanguage>
-& OptionsOfLineOptions
-
-export type CodeToHtmlOptionsExtra =
-  & Omit<CodeToHastOptionsCommon<BuiltinLanguage>, 'lang'>
-  & OptionsOfLineOptions
diff --git a/packages/core/build.config.ts b/packages/core/build.config.ts
index 1cb678a0..815817c1 100644
--- a/packages/core/build.config.ts
+++ b/packages/core/build.config.ts
@@ -5,7 +5,6 @@ export default defineBuildConfig({
     'src/index.ts',
     'src/types.ts',
     'src/textmate.ts',
-    'src/wasm-inlined.ts',
   ],
   declaration: true,
   rollup: {
diff --git a/packages/core/package.json b/packages/core/package.json
index 2029fa31..980e81ee 100644
--- a/packages/core/package.json
+++ b/packages/core/package.json
@@ -21,10 +21,6 @@
       "types": "./dist/index.d.mts",
       "default": "./dist/index.mjs"
     },
-    "./wasm-inlined": {
-      "types": "./dist/wasm-inlined.d.mts",
-      "default": "./dist/wasm-inlined.mjs"
-    },
     "./textmate": {
       "types": "./dist/textmate.d.mts",
       "default": "./dist/textmate.mjs"
@@ -41,9 +37,6 @@
   "types": "./dist/index.d.mts",
   "typesVersions": {
     "*": {
-      "wasm-inlined": [
-        "./dist/wasm-inlined.d.mts"
-      ],
       "types": [
         "./dist/types.d.mts"
       ],
@@ -66,8 +59,6 @@
     "test": "vitest"
   },
   "dependencies": {
-    "@shikijs/engine-javascript": "workspace:*",
-    "@shikijs/engine-oniguruma": "workspace:*",
     "@shikijs/types": "workspace:*",
     "@shikijs/vscode-textmate": "catalog:",
     "@types/hast": "catalog:",
diff --git a/packages/core/src/constructors/bundle-factory.ts b/packages/core/src/constructors/bundle-factory.ts
index 9bb46afe..76835261 100644
--- a/packages/core/src/constructors/bundle-factory.ts
+++ b/packages/core/src/constructors/bundle-factory.ts
@@ -8,10 +8,8 @@ import type {
   CreatedBundledHighlighterOptions,
   CreateHighlighterFactory,
   GrammarState,
-  HighlighterCoreOptions,
   HighlighterGeneric,
   LanguageInput,
-  RegexEngine,
   RequireKeys,
   SpecialLanguage,
   SpecialTheme,
@@ -24,9 +22,7 @@ import type {
 import type { Root } from 'hast'
 import { ShikiError } from '@shikijs/types'
 
-import { createOnigurumaEngine } from '../engines/oniguruma'
 import { isSpecialLang, isSpecialTheme } from '../utils'
-import { warnDeprecated } from '../warn'
 import { createHighlighterCore } from './highlighter'
 
 /**
@@ -53,39 +49,13 @@ export function createdBundledHighlighter<BundledLangs extends string, BundledTh
   options: CreatedBundledHighlighterOptions<BundledLangs, BundledThemes>
 ): CreateHighlighterFactory<BundledLangs, BundledThemes>
 
-/**
- * Create a `createHighlighter` function with bundled themes and languages.
- *
- * @deprecated Use `createdBundledHighlighter({ langs, themes, engine })` signature instead.
- */
-export function createdBundledHighlighter<BundledLangs extends string, BundledThemes extends string>(
-  bundledLanguages: Record<BundledLangs, LanguageInput>,
-  bundledThemes: Record<BundledThemes, ThemeInput>,
-  loadWasm: HighlighterCoreOptions['loadWasm'],
-): CreateHighlighterFactory<BundledLangs, BundledThemes>
-
 // Implementation
 export function createdBundledHighlighter<BundledLangs extends string, BundledThemes extends string>(
-  arg1: Record<BundledLangs, LanguageInput> | CreatedBundledHighlighterOptions<BundledLangs, BundledThemes>,
-  arg2?: Record<BundledThemes, ThemeInput>,
-  arg3?: HighlighterCoreOptions['loadWasm'],
+  options: CreatedBundledHighlighterOptions<BundledLangs, BundledThemes>,
 ): CreateHighlighterFactory<BundledLangs, BundledThemes> {
-  let bundledLanguages: Record<BundledLangs, LanguageInput>
-  let bundledThemes: Record<BundledThemes, ThemeInput>
-  let engine: () => Awaitable<RegexEngine>
-
-  if (arg2) {
-    warnDeprecated('`createdBundledHighlighter` signature with `bundledLanguages` and `bundledThemes` is deprecated. Use the options object signature instead.')
-    bundledLanguages = arg1 as Record<BundledLangs, LanguageInput>
-    bundledThemes = arg2
-    engine = () => createOnigurumaEngine(arg3)
-  }
-  else {
-    const options = arg1 as CreatedBundledHighlighterOptions<BundledLangs, BundledThemes>
-    bundledLanguages = options.langs
-    bundledThemes = options.themes
-    engine = options.engine
-  }
+  const bundledLanguages = options.langs
+  const bundledThemes = options.themes
+  const engine = options.engine
 
   async function createHighlighter(
     options: BundledHighlighterOptions<BundledLangs, BundledThemes>,
diff --git a/packages/core/src/constructors/highlighter.ts b/packages/core/src/constructors/highlighter.ts
index bb71e247..604e4f26 100644
--- a/packages/core/src/constructors/highlighter.ts
+++ b/packages/core/src/constructors/highlighter.ts
@@ -5,7 +5,6 @@ import { codeToHtml } from '../highlight/code-to-html'
 import { codeToTokens } from '../highlight/code-to-tokens'
 import { codeToTokensBase, getLastGrammarState } from '../highlight/code-to-tokens-base'
 import { codeToTokensWithThemes } from '../highlight/code-to-tokens-themes'
-import { warnDeprecated } from '../warn'
 
 import { createShikiInternal } from './internal'
 import { createShikiInternalSync } from './internal-sync'
@@ -88,12 +87,3 @@ export function makeSingletonHighlighterCore(
 }
 
 export const getSingletonHighlighterCore = /* @__PURE__ */ makeSingletonHighlighterCore(createHighlighterCore)
-
-/**
- * @deprecated Use `createHighlighterCore` or `getSingletonHighlighterCore` instead.
- */
-/* v8 ignore next 5 */
-export function getHighlighterCore(options: HighlighterCoreOptions): Promise<HighlighterCore> {
-  warnDeprecated('`getHighlighterCore` is deprecated. Use `createHighlighterCore` or `getSingletonHighlighterCore` instead.')
-  return createHighlighterCore(options)
-}
diff --git a/packages/core/src/constructors/internal.ts b/packages/core/src/constructors/internal.ts
index 44a7e1fb..3c051d95 100644
--- a/packages/core/src/constructors/internal.ts
+++ b/packages/core/src/constructors/internal.ts
@@ -1,9 +1,4 @@
-import type {
-  HighlighterCoreOptions,
-  ShikiInternal,
-} from '@shikijs/types'
-import { createOnigurumaEngine, getDefaultWasmLoader } from '@shikijs/engine-oniguruma'
-
+import type { HighlighterCoreOptions, ShikiInternal } from '@shikijs/types'
 import { resolveLangs, resolveThemes } from '../textmate/getters-resolve'
 import { warnDeprecated } from '../warn'
 import { createShikiInternalSync } from './internal-sync'
@@ -12,9 +7,6 @@ import { createShikiInternalSync } from './internal-sync'
  * Get the minimal shiki context for rendering.
  */
 export async function createShikiInternal(options: HighlighterCoreOptions): Promise<ShikiInternal> {
-  if (options.loadWasm) {
-    warnDeprecated('`loadWasm` option is deprecated. Use `engine: createOnigurumaEngine(loadWasm)` instead.')
-  }
   if (!options.engine) {
     warnDeprecated('`engine` option is required. Use `createOnigurumaEngine` or `createJavaScriptRegexEngine` to create an engine.')
   }
@@ -26,22 +18,13 @@ export async function createShikiInternal(options: HighlighterCoreOptions): Prom
   ] = await Promise.all([
     resolveThemes(options.themes || []),
     resolveLangs(options.langs || []),
-    (options.engine || createOnigurumaEngine(options.loadWasm || getDefaultWasmLoader())),
+    options.engine,
   ] as const)
 
   return createShikiInternalSync({
     ...options,
-    loadWasm: undefined,
     themes,
     langs,
     engine,
   })
 }
-
-/**
- * @deprecated Use `createShikiInternal` instead.
- */
-export function getShikiInternal(options: HighlighterCoreOptions): Promise<ShikiInternal> {
-  warnDeprecated('`getShikiInternal` is deprecated. Use `createShikiInternal` instead.')
-  return createShikiInternal(options)
-}
diff --git a/packages/core/src/engines/javascript.ts b/packages/core/src/engines/javascript.ts
deleted file mode 100644
index ec76d423..00000000
--- a/packages/core/src/engines/javascript.ts
+++ /dev/null
@@ -1,23 +0,0 @@
-import type { JavaScriptRegexEngineOptions } from '@shikijs/engine-javascript'
-import type { RegexEngine } from '@shikijs/types'
-import {
-  createJavaScriptRegexEngine as _createJavaScriptRegexEngine,
-  defaultJavaScriptRegexConstructor as _defaultJavaScriptRegexConstructor,
-} from '@shikijs/engine-javascript'
-import { warnDeprecated } from '../warn'
-
-/**
- * @deprecated Import `createJavaScriptRegexEngine` from `@shikijs/engine-javascript` or `shiki/engine/javascript` instead.
- */
-export function createJavaScriptRegexEngine(options?: JavaScriptRegexEngineOptions): RegexEngine {
-  warnDeprecated('import `createJavaScriptRegexEngine` from `@shikijs/engine-javascript` or `shiki/engine/javascript` instead')
-  return _createJavaScriptRegexEngine(options)
-}
-
-/**
- * @deprecated Import `defaultJavaScriptRegexConstructor` from `@shikijs/engine-javascript` or `shiki/engine/javascript` instead.
- */
-export function defaultJavaScriptRegexConstructor(pattern: string): RegExp {
-  warnDeprecated('import `defaultJavaScriptRegexConstructor` from `@shikijs/engine-javascript` or `shiki/engine/javascript` instead')
-  return _defaultJavaScriptRegexConstructor(pattern)
-}
diff --git a/packages/core/src/engines/oniguruma.ts b/packages/core/src/engines/oniguruma.ts
deleted file mode 100644
index 54b81d36..00000000
--- a/packages/core/src/engines/oniguruma.ts
+++ /dev/null
@@ -1,30 +0,0 @@
-import type { LoadWasmOptions, RegexEngine } from '@shikijs/types'
-import {
-  createOnigurumaEngine as _createOnigurumaEngine,
-  loadWasm as _loadWasm,
-} from '@shikijs/engine-oniguruma'
-import { warnDeprecated } from '../warn'
-
-/**
- * @deprecated Import `createOnigurumaEngine` from `@shikijs/engine-oniguruma` or `shiki/engine/oniguruma` instead.
- */
-export function createOnigurumaEngine(options?: LoadWasmOptions | null): Promise<RegexEngine> {
-  warnDeprecated('import `createOnigurumaEngine` from `@shikijs/engine-oniguruma` or `shiki/engine/oniguruma` instead')
-  return _createOnigurumaEngine(options)
-}
-
-/**
- * @deprecated Import `createOnigurumaEngine` from `@shikijs/engine-oniguruma` or `shiki/engine/oniguruma` instead.
- */
-export function createWasmOnigEngine(options?: LoadWasmOptions | null): Promise<RegexEngine> {
-  warnDeprecated('import `createOnigurumaEngine` from `@shikijs/engine-oniguruma` or `shiki/engine/oniguruma` instead')
-  return _createOnigurumaEngine(options)
-}
-
-/**
- * @deprecated Import `loadWasm` from `@shikijs/engine-oniguruma` or `shiki/engine/oniguruma` instead.
- */
-export function loadWasm(options: LoadWasmOptions): Promise<void> {
-  warnDeprecated('import `loadWasm` from `@shikijs/engine-oniguruma` or `shiki/engine/oniguruma` instead')
-  return _loadWasm(options)
-}
diff --git a/packages/core/src/highlight/code-to-hast.ts b/packages/core/src/highlight/code-to-hast.ts
index abe65be5..95f13ce9 100644
--- a/packages/core/src/highlight/code-to-hast.ts
+++ b/packages/core/src/highlight/code-to-hast.ts
@@ -17,7 +17,6 @@ import type {
 import { FontStyle } from '@shikijs/vscode-textmate'
 import { getLastGrammarStateFromMap, setLastGrammarStateToMap } from '../textmate/grammar-state'
 import { addClassToHast, getTokenStyleObject, stringifyTokenStyle } from '../utils'
-import { warnDeprecated } from '../warn'
 import { getTransformers } from './_get-transformers'
 import { codeToTokens } from './code-to-tokens'
 
@@ -182,9 +181,6 @@ export function tokensToHast(
         children: [{ type: 'text', value: token.content }],
       }
 
-      if (typeof token.htmlStyle === 'string')
-        warnDeprecated('`htmlStyle` as a string is deprecated. Use an object instead.')
-
       const style = stringifyTokenStyle(token.htmlStyle || getTokenStyleObject(token))
       if (style)
         tokenNode.properties.style = style
diff --git a/packages/core/src/highlight/code-to-html.ts b/packages/core/src/highlight/code-to-html.ts
index 811af872..c9df9134 100644
--- a/packages/core/src/highlight/code-to-html.ts
+++ b/packages/core/src/highlight/code-to-html.ts
@@ -4,13 +4,13 @@ import type {
   ShikiTransformerContextCommon,
 } from '@shikijs/types'
 
-import { toHtml as hastToHtml } from 'hast-util-to-html'
+import { toHtml } from 'hast-util-to-html'
 
 import { getTransformers } from './_get-transformers'
 import { codeToHast } from './code-to-hast'
 import { codeToTokens } from './code-to-tokens'
 
-export { hastToHtml }
+export const hastToHtml = toHtml
 
 /**
  * Get highlighted code in HTML.
diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts
index cf2074dc..05dba4ab 100644
--- a/packages/core/src/index.ts
+++ b/packages/core/src/index.ts
@@ -2,13 +2,9 @@
 export * from './constructors/bundle-factory'
 // Constructors
 export * from './constructors/highlighter'
-export { createShikiInternal, getShikiInternal } from './constructors/internal'
+export { createShikiInternal } from './constructors/internal'
 export { createShikiInternalSync } from './constructors/internal-sync'
 
-// Engines
-export { createJavaScriptRegexEngine, defaultJavaScriptRegexConstructor } from './engines/javascript'
-export { createOnigurumaEngine, createWasmOnigEngine, loadWasm } from './engines/oniguruma'
-
 // Low-level Highlighting
 export { codeToHast, tokensToHast } from './highlight/code-to-hast'
 export { codeToHtml, hastToHtml } from './highlight/code-to-html'
@@ -26,15 +22,3 @@ export { enableDeprecationWarnings, warnDeprecated } from './warn'
 
 // Types
 export * from '@shikijs/types'
-
-// Deprecated
-export {
-  /**
-   * @deprecated Import `FontStyle` from `@shikijs/vscode-textmate` instead.
-   */
-  FontStyle,
-  /**
-   * @deprecated Use `EncodedTokenMetadata` from `@shikijs/vscode-textmate` instead.
-   */
-  EncodedTokenMetadata as StackElementMetadata,
-} from '@shikijs/vscode-textmate'
diff --git a/packages/core/src/textmate/grammar-state.ts b/packages/core/src/textmate/grammar-state.ts
index af327f76..07826714 100644
--- a/packages/core/src/textmate/grammar-state.ts
+++ b/packages/core/src/textmate/grammar-state.ts
@@ -4,7 +4,6 @@ import type { StateStack, StateStackImpl } from '@shikijs/vscode-textmate'
 import { ShikiError } from '@shikijs/types'
 import { INITIAL } from '@shikijs/vscode-textmate'
 import { toArray } from '../utils'
-import { warnDeprecated } from '../warn'
 
 const _grammarStateMap = new WeakMap<GrammarStateMapKey, GrammarStateInterface>()
 
@@ -85,14 +84,6 @@ export class GrammarState implements GrammarStateInterface {
     return this._stacks[theme]
   }
 
-  /**
-   * @deprecated use `getScopes` instead
-   */
-  get scopes(): string[] {
-    warnDeprecated('GrammarState.scopes is deprecated, use GrammarState.getScopes() instead')
-    return getScopes(this._stacks[this.theme] as StateStackImpl)
-  }
-
   getScopes(theme: string = this.theme): string[] {
     return getScopes(this._stacks[theme] as StateStackImpl)
   }
diff --git a/packages/core/src/wasm-inlined.ts b/packages/core/src/wasm-inlined.ts
deleted file mode 100644
index 29acd4ab..00000000
--- a/packages/core/src/wasm-inlined.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-import { warnDeprecated } from './warn'
-
-export { default } from '@shikijs/engine-oniguruma/wasm-inlined'
-export * from '@shikijs/engine-oniguruma/wasm-inlined'
-
-warnDeprecated('Import from `@shikijs/engine-oniguruma/wasm-inlined` instead')
diff --git a/packages/engine-oniguruma/src/index.ts b/packages/engine-oniguruma/src/index.ts
index a8d4ab12..21333d6d 100644
--- a/packages/engine-oniguruma/src/index.ts
+++ b/packages/engine-oniguruma/src/index.ts
@@ -34,10 +34,3 @@ export async function createOnigurumaEngine(options?: LoadWasmOptions | null): P
     },
   }
 }
-
-/**
- * @deprecated Use `createOnigurumaEngine` instead.
- */
-export async function createWasmOnigEngine(options?: LoadWasmOptions | null): Promise<RegexEngine> {
-  return createOnigurumaEngine(options)
-}
diff --git a/packages/shiki/package.json b/packages/shiki/package.json
index 82ac0f9c..860ee0bb 100644
--- a/packages/shiki/package.json
+++ b/packages/shiki/package.json
@@ -43,10 +43,6 @@
       "types": "./dist/types.d.mts",
       "default": "./dist/types.mjs"
     },
-    "./theme-css-variables": {
-      "types": "./dist/theme-css-variables.d.mts",
-      "default": "./dist/theme-css-variables.mjs"
-    },
     "./engine/javascript": {
       "types": "./dist/engine-javascript.d.mts",
       "default": "./dist/engine-javascript.mjs"
@@ -104,9 +100,6 @@
       "textmate": [
         "./dist/textmate.d.mts"
       ],
-      "theme-css-variables": [
-        "./dist/theme-css-variables.d.mts"
-      ],
       "*": [
         "./dist/*",
         "./*"
diff --git a/packages/shiki/rollup.config.mjs b/packages/shiki/rollup.config.mjs
index 9e28d1c1..49ba9a50 100644
--- a/packages/shiki/rollup.config.mjs
+++ b/packages/shiki/rollup.config.mjs
@@ -20,7 +20,6 @@ const entries = [
   'src/wasm.ts',
   'src/bundle-full.ts',
   'src/bundle-web.ts',
-  'src/theme-css-variables.ts',
   'src/engine-javascript.ts',
   'src/engine-oniguruma.ts',
   'src/textmate.ts',
diff --git a/packages/shiki/src/bundle-full.ts b/packages/shiki/src/bundle-full.ts
index 8fe887ae..4705ff38 100644
--- a/packages/shiki/src/bundle-full.ts
+++ b/packages/shiki/src/bundle-full.ts
@@ -1,9 +1,8 @@
-import type { CreateHighlighterFactory, HighlighterGeneric } from '@shikijs/types'
+import type { HighlighterGeneric } from '@shikijs/types'
 import type {} from 'hast'
 import type { BundledLanguage } from './langs-bundle-full'
 import type { BundledTheme } from './themes'
-import { guessEmbeddedLanguages } from '@shikijs/core'
-import { createdBundledHighlighter, createSingletonShorthands, warnDeprecated } from './core'
+import { createdBundledHighlighter, createSingletonShorthands, guessEmbeddedLanguages } from '@shikijs/core'
 import { createOnigurumaEngine } from './engine-oniguruma'
 import { bundledLanguages } from './langs-bundle-full'
 import { bundledThemes } from './themes'
@@ -11,7 +10,6 @@ import { bundledThemes } from './themes'
 export * from './core'
 export * from './langs-bundle-full'
 export * from './themes'
-export { getWasmInlined } from './wasm-dynamic'
 
 export type Highlighter = HighlighterGeneric<BundledLanguage, BundledTheme>
 
@@ -49,11 +47,3 @@ export const {
   createHighlighter,
   { guessEmbeddedLanguages },
 )
-
-/**
- * @deprecated Use `createHighlighter` or `getSingletonHighlighter` instead.
- */
-export const getHighlighter: CreateHighlighterFactory<BundledLanguage, BundledTheme> = /* @__PURE__ */ (options) => {
-  warnDeprecated('`getHighlighter` is deprecated. Use `createHighlighter` or `getSingletonHighlighter` instead.')
-  return createHighlighter(options)
-}
diff --git a/packages/shiki/src/bundle-web.ts b/packages/shiki/src/bundle-web.ts
index 050a3807..509cabb6 100644
--- a/packages/shiki/src/bundle-web.ts
+++ b/packages/shiki/src/bundle-web.ts
@@ -1,9 +1,8 @@
-import type { CreateHighlighterFactory, HighlighterGeneric } from '@shikijs/types'
+import type { HighlighterGeneric } from '@shikijs/types'
 import type {} from 'hast'
 import type { BundledLanguage } from './langs-bundle-web'
 import type { BundledTheme } from './themes'
-import { guessEmbeddedLanguages } from '@shikijs/core'
-import { createdBundledHighlighter, createSingletonShorthands, warnDeprecated } from './core'
+import { createdBundledHighlighter, createSingletonShorthands, guessEmbeddedLanguages } from '@shikijs/core'
 import { createOnigurumaEngine } from './engine-oniguruma'
 import { bundledLanguages } from './langs-bundle-web'
 import { bundledThemes } from './themes'
@@ -11,7 +10,6 @@ import { bundledThemes } from './themes'
 export * from './core'
 export * from './langs-bundle-web'
 export * from './themes'
-export { getWasmInlined } from './wasm-dynamic'
 
 export type Highlighter = HighlighterGeneric<BundledLanguage, BundledTheme>
 
@@ -49,11 +47,3 @@ export const {
   createHighlighter,
   { guessEmbeddedLanguages },
 )
-
-/**
- * @deprecated Use `createHighlighter` or `getSingletonHighlighter` instead.
- */
-export const getHighlighter: CreateHighlighterFactory<BundledLanguage, BundledTheme> = /* @__PURE__ */ (options) => {
-  warnDeprecated('`getHighlighter` is deprecated. Use `createHighlighter` or `getSingletonHighlighter` instead.')
-  return createHighlighter(options)
-}
diff --git a/packages/shiki/src/theme-css-variables.ts b/packages/shiki/src/theme-css-variables.ts
deleted file mode 100644
index ae57356d..00000000
--- a/packages/shiki/src/theme-css-variables.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-import { warnDeprecated } from '@shikijs/core'
-
-export { createCssVariablesTheme } from './core'
-export type { CssVariablesThemeOptions } from './core'
-
-warnDeprecated('`shiki/theme-css-variables` entry point is deprecated. Use `shiki/core` instead.')
diff --git a/packages/shiki/src/wasm-dynamic.ts b/packages/shiki/src/wasm-dynamic.ts
deleted file mode 100644
index a9be8dd0..00000000
--- a/packages/shiki/src/wasm-dynamic.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-import type { WebAssemblyInstantiator } from './types'
-import { warnDeprecated } from '@shikijs/core'
-
-/**
- * @deprecated Use `import('shiki/wasm')` instead.
- */
-export const getWasmInlined: WebAssemblyInstantiator = async (info) => {
-  warnDeprecated('`getWasmInlined` is deprecated. Use `import("shiki/wasm")` instead.')
-  return import('shiki/wasm').then(wasm => wasm.default(info))
-}
diff --git a/packages/transformers/src/shared/notation-transformer.ts b/packages/transformers/src/shared/notation-transformer.ts
index 15805aae..7d312f32 100644
--- a/packages/transformers/src/shared/notation-transformer.ts
+++ b/packages/transformers/src/shared/notation-transformer.ts
@@ -1,7 +1,6 @@
 import type { ShikiTransformer, ShikiTransformerContext } from '@shikijs/core'
 import type { Element, Text } from 'hast'
 import type { ParsedComments } from './parse-comments'
-import { warnDeprecated } from '@shikijs/core'
 import { parseComments, v1ClearEndCommentPrefix } from './parse-comments'
 
 export type MatchAlgorithm = 'v1' | 'v3'
@@ -30,8 +29,7 @@ export function createCommentNotationTransformer(
   matchAlgorithm: MatchAlgorithm | undefined,
 ): ShikiTransformer {
   if (matchAlgorithm == null) {
-    matchAlgorithm = 'v1'
-    warnDeprecated('The default `matchAlgorithm: "v1"` is deprecated and will be removed in the future. Please explicitly set `matchAlgorithm: "v3"` in the transformer options.', 3)
+    matchAlgorithm = 'v3'
   }
 
   return {
diff --git a/packages/types/src/options.ts b/packages/types/src/options.ts
index 2c95c878..ef989b85 100644
--- a/packages/types/src/options.ts
+++ b/packages/types/src/options.ts
@@ -1,5 +1,5 @@
 import type { DecorationOptions } from './decorations'
-import type { LoadWasmOptions, RegexEngine } from './engines'
+import type { RegexEngine } from './engines'
 import type { LanguageInput, LanguageRegistration, SpecialLanguage } from './langs'
 import type { SpecialTheme, ThemeInput, ThemeRegistrationAny } from './themes'
 import type { TokenizeWithThemeOptions, TokensResult } from './tokens'
@@ -29,13 +29,6 @@ export interface HighlighterCoreOptions<Sync extends boolean = false> {
    * @default true
    */
   warnings?: boolean
-
-  /**
-   * Load wasm file from a custom path or using a custom function.
-   *
-   * @deprecated Use `engine: createOnigurumaEngine(loadWasm)` instead.
-   */
-  loadWasm?: Sync extends true ? never : LoadWasmOptions
 }
 
 export interface BundledHighlighterOptions<L extends string, T extends string> extends Pick<HighlighterCoreOptions, 'warnings'> {
diff --git a/packages/types/src/tokens.ts b/packages/types/src/tokens.ts
index f1fcfd8e..b3f6cf2e 100644
--- a/packages/types/src/tokens.ts
+++ b/packages/types/src/tokens.ts
@@ -17,10 +17,6 @@ export interface GrammarState {
    */
   getInternalStack: (theme?: string) => StateStack | undefined
   getScopes: (theme?: string) => string[] | undefined
-  /**
-   * @deprecated Use `getScopes` instead.
-   */
-  get scopes(): string[]
 }
 
 export interface CodeToTokensBaseOptions<Languages extends string = string, Themes extends string = string> extends TokenizeWithThemeOptions {
@@ -154,7 +150,7 @@ export interface TokenStyles {
    * When specified, `color` and `fontStyle` will be ignored.
    * Prefer use object style for merging with other styles.
    */
-  htmlStyle?: string | Record<string, string>
+  htmlStyle?: Record<string, string>
   /**
    * Extra HTML attributes for the token.
    */
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 1925c0b5..fcb13513 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -13,8 +13,8 @@ catalogs:
       specifier: ^23.3.1
       version: 23.3.1
     '@antfu/utils':
-      specifier: ^9.0.0
-      version: 9.0.0
+      specifier: ^9.1.0
+      version: 9.1.0
     '@iconify-json/carbon':
       specifier: ^1.2.7
       version: 1.2.7
@@ -157,8 +157,8 @@ catalogs:
       specifier: ^3.0.1
       version: 3.0.1
     pnpm:
-      specifier: ^10.4.0
-      version: 10.4.0
+      specifier: ^10.4.1
+      version: 10.4.1
     prettier:
       specifier: ^3.5.1
       version: 3.5.1
@@ -186,9 +186,6 @@ catalogs:
     rollup-plugin-esbuild:
       specifier: ^6.2.0
       version: 6.2.0
-    shiki-legacy:
-      specifier: npm:shiki@^0.14.7
-      version: 0.14.7
     simple-git-hooks:
       specifier: ^2.11.1
       version: 2.11.1
@@ -223,11 +220,11 @@ catalogs:
       specifier: ^5.1.4
       version: 5.1.4
     vitepress:
-      specifier: ^1.6.3
-      version: 1.6.3
+      specifier: ^2.0.0-alpha.2
+      version: 2.0.0-alpha.2
     vitepress-plugin-group-icons:
-      specifier: ^1.3.5
-      version: 1.3.5
+      specifier: ^1.3.6
+      version: 1.3.6
     vitepress-plugin-mermaid:
       specifier: ^2.0.17
       version: 2.0.17
@@ -259,7 +256,7 @@ overrides:
   '@types/hast': ^3.0.4
   '@types/mdast': ^4.0.4
   '@types/unist': ^3.0.3
-  rollup: ^4.34.7
+  rollup: ^4.34.8
   shiki: workspace:*
   typescript: ^5.7.3
   unified: ^11.0.5
@@ -278,25 +275,25 @@ importers:
         version: 23.3.1
       '@antfu/utils':
         specifier: 'catalog:'
-        version: 9.0.0
+        version: 9.1.0
       '@rollup/plugin-alias':
         specifier: 'catalog:'
-        version: 5.1.1(rollup@4.34.7)
+        version: 5.1.1(rollup@4.34.8)
       '@rollup/plugin-commonjs':
         specifier: 'catalog:'
-        version: 28.0.2(rollup@4.34.7)
+        version: 28.0.2(rollup@4.34.8)
       '@rollup/plugin-json':
         specifier: 'catalog:'
-        version: 6.1.0(rollup@4.34.7)
+        version: 6.1.0(rollup@4.34.8)
       '@rollup/plugin-node-resolve':
         specifier: 'catalog:'
-        version: 16.0.0(rollup@4.34.7)
+        version: 16.0.0(rollup@4.34.8)
       '@rollup/plugin-replace':
         specifier: 'catalog:'
-        version: 6.0.2(rollup@4.34.7)
+        version: 6.0.2(rollup@4.34.8)
       '@rollup/plugin-terser':
         specifier: 'catalog:'
-        version: 0.4.4(rollup@4.34.7)
+        version: 0.4.4(rollup@4.34.8)
       '@shikijs/colorized-brackets':
         specifier: workspace:*
         version: link:packages/colorized-brackets
@@ -366,6 +363,9 @@ importers:
       fs-extra:
         specifier: 'catalog:'
         version: 11.3.0
+      hast-util-to-html:
+        specifier: 'catalog:'
+        version: 9.0.4
       jiti:
         specifier: 'catalog:'
         version: 2.4.2
@@ -395,7 +395,7 @@ importers:
         version: 1.1.4
       pnpm:
         specifier: 'catalog:'
-        version: 10.4.0
+        version: 10.4.1
       prettier:
         specifier: 'catalog:'
         version: 3.5.1
@@ -403,17 +403,17 @@ importers:
         specifier: 'catalog:'
         version: 6.0.1
       rollup:
-        specifier: ^4.34.7
-        version: 4.34.7
+        specifier: ^4.34.8
+        version: 4.34.8
       rollup-plugin-copy:
         specifier: 'catalog:'
         version: 3.5.0
       rollup-plugin-dts:
         specifier: 'catalog:'
-        version: 6.1.1(rollup@4.34.7)(typescript@5.7.3)
+        version: 6.1.1(rollup@4.34.8)(typescript@5.7.3)
       rollup-plugin-esbuild:
         specifier: 'catalog:'
-        version: 6.2.0(esbuild@0.17.19)(rollup@4.34.7)
+        version: 6.2.0(esbuild@0.17.19)(rollup@4.34.8)
       shiki:
         specifier: workspace:*
         version: link:packages/shiki
@@ -437,7 +437,7 @@ importers:
         version: 5.1.4(typescript@5.7.3)(vite@6.1.0(@types/node@22.13.4)(jiti@2.4.2)(terser@5.39.0)(tsx@4.19.2)(yaml@2.7.0))
       vitepress-plugin-mermaid:
         specifier: 'catalog:'
-        version: 2.0.17(mermaid@11.4.1)(vitepress@1.6.3(@algolia/client-search@5.20.2)(@types/node@22.13.4)(fuse.js@7.1.0)(jiti@2.4.2)(postcss@8.5.2)(search-insights@2.17.3)(terser@5.39.0)(tsx@4.19.2)(typescript@5.7.3)(yaml@2.7.0))
+        version: 2.0.17(mermaid@11.4.1)(vitepress@2.0.0-alpha.2(@algolia/client-search@5.20.2)(@types/node@22.13.4)(fuse.js@7.1.0)(jiti@2.4.2)(postcss@8.5.2)(search-insights@2.17.3)(terser@5.39.0)(tsx@4.19.2)(typescript@5.7.3)(yaml@2.7.0))
       vitest:
         specifier: 'catalog:'
         version: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.4)(jiti@2.4.2)(terser@5.39.0)(tsx@4.19.2)(yaml@2.7.0)
@@ -480,10 +480,10 @@ importers:
         version: 28.1.0(@babel/parser@7.26.9)(vue@3.5.13(typescript@5.7.3))
       vitepress:
         specifier: 'catalog:'
-        version: 1.6.3(@algolia/client-search@5.20.2)(@types/node@22.13.4)(fuse.js@7.1.0)(jiti@2.4.2)(postcss@8.5.2)(search-insights@2.17.3)(terser@5.39.0)(tsx@4.19.2)(typescript@5.7.3)(yaml@2.7.0)
+        version: 2.0.0-alpha.2(@algolia/client-search@5.20.2)(@types/node@22.13.4)(fuse.js@7.1.0)(jiti@2.4.2)(postcss@8.5.2)(search-insights@2.17.3)(terser@5.39.0)(tsx@4.19.2)(typescript@5.7.3)(yaml@2.7.0)
       vitepress-plugin-group-icons:
         specifier: 'catalog:'
-        version: 1.3.5
+        version: 1.3.6
       vue:
         specifier: 'catalog:'
         version: 3.5.13(typescript@5.7.3)
@@ -525,42 +525,8 @@ importers:
         specifier: workspace:*
         version: link:../shiki
 
-  packages/compat:
-    dependencies:
-      '@shikijs/core':
-        specifier: workspace:*
-        version: link:../core
-      '@shikijs/langs':
-        specifier: workspace:*
-        version: link:../langs
-      '@shikijs/themes':
-        specifier: workspace:*
-        version: link:../themes
-      '@shikijs/transformers':
-        specifier: workspace:*
-        version: link:../transformers
-      '@shikijs/types':
-        specifier: workspace:*
-        version: link:../types
-      '@shikijs/vscode-textmate':
-        specifier: 'catalog:'
-        version: 10.0.2
-      shiki:
-        specifier: workspace:*
-        version: link:../shiki
-    devDependencies:
-      shiki-legacy:
-        specifier: 'catalog:'
-        version: shiki@0.14.7
-
   packages/core:
     dependencies:
-      '@shikijs/engine-javascript':
-        specifier: workspace:*
-        version: link:../engine-javascript
-      '@shikijs/engine-oniguruma':
-        specifier: workspace:*
-        version: link:../engine-oniguruma
       '@shikijs/types':
         specifier: workspace:*
         version: link:../types
@@ -831,74 +797,94 @@ importers:
 
 packages:
 
-  '@algolia/autocomplete-core@1.17.7':
-    resolution: {integrity: sha512-BjiPOW6ks90UKl7TwMv7oNQMnzU+t/wk9mgIDi6b1tXpUek7MW0lbNOUHpvam9pe3lVCf4xPFT+lK7s+e+fs7Q==}
+  '@algolia/autocomplete-core@1.17.9':
+    resolution: {integrity: sha512-O7BxrpLDPJWWHv/DLA9DRFWs+iY1uOJZkqUwjS5HSZAGcl0hIVCQ97LTLewiZmZ402JYUrun+8NqFP+hCknlbQ==}
 
-  '@algolia/autocomplete-plugin-algolia-insights@1.17.7':
-    resolution: {integrity: sha512-Jca5Ude6yUOuyzjnz57og7Et3aXjbwCSDf/8onLHSQgw1qW3ALl9mrMWaXb5FmPVkV3EtkD2F/+NkT6VHyPu9A==}
+  '@algolia/autocomplete-plugin-algolia-insights@1.17.9':
+    resolution: {integrity: sha512-u1fEHkCbWF92DBeB/KHeMacsjsoI0wFhjZtlCq2ddZbAehshbZST6Hs0Avkc0s+4UyBGbMDnSuXHLuvRWK5iDQ==}
     peerDependencies:
       search-insights: '>= 1 < 3'
 
-  '@algolia/autocomplete-preset-algolia@1.17.7':
-    resolution: {integrity: sha512-ggOQ950+nwbWROq2MOCIL71RE0DdQZsceqrg32UqnhDz8FlO9rL8ONHNsI2R1MH0tkgVIDKI/D0sMiUchsFdWA==}
+  '@algolia/autocomplete-preset-algolia@1.17.9':
+    resolution: {integrity: sha512-Na1OuceSJeg8j7ZWn5ssMu/Ax3amtOwk76u4h5J4eK2Nx2KB5qt0Z4cOapCsxot9VcEN11ADV5aUSlQF4RhGjQ==}
     peerDependencies:
       '@algolia/client-search': '>= 4.9.1 < 6'
       algoliasearch: '>= 4.9.1 < 6'
 
-  '@algolia/autocomplete-shared@1.17.7':
-    resolution: {integrity: sha512-o/1Vurr42U/qskRSuhBH+VKxMvkkUVTLU6WZQr+L5lGZZLYWyhdzWjW0iGXY7EkwRTjBqvN2EsR81yCTGV/kmg==}
+  '@algolia/autocomplete-shared@1.17.9':
+    resolution: {integrity: sha512-iDf05JDQ7I0b7JEA/9IektxN/80a2MZ1ToohfmNS3rfeuQnIKI3IJlIafD0xu4StbtQTghx9T3Maa97ytkXenQ==}
     peerDependencies:
       '@algolia/client-search': '>= 4.9.1 < 6'
       algoliasearch: '>= 4.9.1 < 6'
 
-  '@algolia/client-abtesting@5.20.2':
-    resolution: {integrity: sha512-IS8JSFsDD33haaKIIFaL7qj3bEIG9GldZfb3ILW0QF3at7TcrIJYy58hrDvFee5T3p3E2aH/+wqIr0eha8jB/w==}
+  '@algolia/client-abtesting@5.19.0':
+    resolution: {integrity: sha512-dMHwy2+nBL0SnIsC1iHvkBao64h4z+roGelOz11cxrDBrAdASxLxmfVMop8gmodQ2yZSacX0Rzevtxa+9SqxCw==}
+    engines: {node: '>= 14.0.0'}
+
+  '@algolia/client-analytics@5.19.0':
+    resolution: {integrity: sha512-CDW4RwnCHzU10upPJqS6N6YwDpDHno7w6/qXT9KPbPbt8szIIzCHrva4O9KIfx1OhdsHzfGSI5hMAiOOYl4DEQ==}
     engines: {node: '>= 14.0.0'}
 
-  '@algolia/client-analytics@5.20.2':
-    resolution: {integrity: sha512-k0KxCfcX/HZySqPasKy6GkiiDuebaMh2v/nE0HHg1PbsyeyagLapDi6Ktjkxhz8NlUq6eTJR+ddGJegippKQtQ==}
+  '@algolia/client-common@5.19.0':
+    resolution: {integrity: sha512-2ERRbICHXvtj5kfFpY5r8qu9pJII/NAHsdgUXnUitQFwPdPL7wXiupcvZJC7DSntOnE8AE0lM7oDsPhrJfj5nQ==}
     engines: {node: '>= 14.0.0'}
 
   '@algolia/client-common@5.20.2':
     resolution: {integrity: sha512-xoZcL/Uu49KYDb3feu2n06gALD17p5CslO8Zk3mZ7+uTurK3lgjLws7LNetZ172Ap/GpzPCRXI83d2iDoYQD6Q==}
     engines: {node: '>= 14.0.0'}
 
-  '@algolia/client-insights@5.20.2':
-    resolution: {integrity: sha512-fy7aCbo9y7WHt/9G03EYc471Dd5kIaM8PNP4z6AEQYr9a9X8c4inwNs6tePxAEfRHwVQi0CZ7kuVdn6/MjWx1A==}
+  '@algolia/client-insights@5.19.0':
+    resolution: {integrity: sha512-xPOiGjo6I9mfjdJO7Y+p035aWePcbsItizIp+qVyfkfZiGgD+TbNxM12g7QhFAHIkx/mlYaocxPY/TmwPzTe+A==}
+    engines: {node: '>= 14.0.0'}
+
+  '@algolia/client-personalization@5.19.0':
+    resolution: {integrity: sha512-B9eoce/fk8NLboGje+pMr72pw+PV7c5Z01On477heTZ7jkxoZ4X92dobeGuEQop61cJ93Gaevd1of4mBr4hu2A==}
     engines: {node: '>= 14.0.0'}
 
-  '@algolia/client-personalization@5.20.2':
-    resolution: {integrity: sha512-ocL1ZXulfuXzJAwsKw2kMscKMD0rs/f4CFYu6Gjh4mK4um6rGfa1a6u1MSc4swFqRQer0wNP9Pi+kVfKhuKt5A==}
+  '@algolia/client-query-suggestions@5.19.0':
+    resolution: {integrity: sha512-6fcP8d4S8XRDtVogrDvmSM6g5g6DndLc0pEm1GCKe9/ZkAzCmM3ZmW1wFYYPxdjMeifWy1vVEDMJK7sbE4W7MA==}
     engines: {node: '>= 14.0.0'}
 
-  '@algolia/client-query-suggestions@5.20.2':
-    resolution: {integrity: sha512-Xjs4Tj1zkLCnmq1ys8RRhLQPy002I6GuT/nbHVdSQmQu4yKCI0gOFbwxHdM6yYPEuE3cJx7A4wSQjCH21mUKsg==}
+  '@algolia/client-search@5.19.0':
+    resolution: {integrity: sha512-Ctg3xXD/1VtcwmkulR5+cKGOMj4r0wC49Y/KZdGQcqpydKn+e86F6l3tb3utLJQVq4lpEJud6kdRykFgcNsp8Q==}
     engines: {node: '>= 14.0.0'}
 
   '@algolia/client-search@5.20.2':
     resolution: {integrity: sha512-2cD3RGB5byusLS0DAX1Nvl5MLiv7OoGgQrRs+94dTalqjvK8lGKzxxJhXoVojgx2qcROyIUAIDXFdTqv6NIHaA==}
     engines: {node: '>= 14.0.0'}
 
-  '@algolia/ingestion@1.20.2':
-    resolution: {integrity: sha512-S593Kmhc98+5zdzGet4GrZEBEBGl4vVtqg/MPfW8dCRf9qDRNYSkhBsIzlhQe9JWiohe9oB9LW5meibwOgRmww==}
+  '@algolia/ingestion@1.19.0':
+    resolution: {integrity: sha512-LO7w1MDV+ZLESwfPmXkp+KLeYeFrYEgtbCZG6buWjddhYraPQ9MuQWLhLLiaMlKxZ/sZvFTcZYuyI6Jx4WBhcg==}
     engines: {node: '>= 14.0.0'}
 
-  '@algolia/monitoring@1.20.2':
-    resolution: {integrity: sha512-bW41aWLYgBv/coJUIT85mkN3kk1VBKsM8tlwB5S/s446Mgc7r8t5TX7kA8kCR2UbwDedOK51i/85/x/rM0ZXbg==}
+  '@algolia/monitoring@1.19.0':
+    resolution: {integrity: sha512-Mg4uoS0aIKeTpu6iv6O0Hj81s8UHagi5TLm9k2mLIib4vmMtX7WgIAHAcFIaqIZp5D6s5EVy1BaDOoZ7buuJHA==}
     engines: {node: '>= 14.0.0'}
 
-  '@algolia/recommend@5.20.2':
-    resolution: {integrity: sha512-wBMf3J1L5ogvU8p8ifHkknDXWn1zdZ2epkqpt2MkUaZynE3G77rrFU9frcO+Pu1FQJQ5xCDTKcYUUcJCDD00rg==}
+  '@algolia/recommend@5.19.0':
+    resolution: {integrity: sha512-PbgrMTbUPlmwfJsxjFhal4XqZO2kpBNRjemLVTkUiti4w/+kzcYO4Hg5zaBgVqPwvFDNQ8JS4SS3TBBem88u+g==}
+    engines: {node: '>= 14.0.0'}
+
+  '@algolia/requester-browser-xhr@5.19.0':
+    resolution: {integrity: sha512-GfnhnQBT23mW/VMNs7m1qyEyZzhZz093aY2x8p0era96MMyNv8+FxGek5pjVX0b57tmSCZPf4EqNCpkGcGsmbw==}
     engines: {node: '>= 14.0.0'}
 
   '@algolia/requester-browser-xhr@5.20.2':
     resolution: {integrity: sha512-w+VMzOkIq2XDGg6Ybzr74RlBZvJQnuIdKpVusQSXCXknvxwAwbO457LmoavhZWl06Lcsk9YDx1X2k0zb+iJQmw==}
     engines: {node: '>= 14.0.0'}
 
+  '@algolia/requester-fetch@5.19.0':
+    resolution: {integrity: sha512-oyTt8ZJ4T4fYvW5avAnuEc6Laedcme9fAFryMD9ndUTIUe/P0kn3BuGcCLFjN3FDmdrETHSFkgPPf1hGy3sLCw==}
+    engines: {node: '>= 14.0.0'}
+
   '@algolia/requester-fetch@5.20.2':
     resolution: {integrity: sha512-wpjnbvbi3A13b0DvijE45DRYDvwcP5Ttz7RTMkPWTkF1s6AHuo6O2UcwGyaogMAGa1QOOzFYfp5u4YQwMOQx5g==}
     engines: {node: '>= 14.0.0'}
 
+  '@algolia/requester-node-http@5.19.0':
+    resolution: {integrity: sha512-p6t8ue0XZNjcRiqNkb5QAM0qQRAKsCiebZ6n9JjWA+p8fWf8BvnhO55y2fO28g3GW0Imj7PrAuyBuxq8aDVQwQ==}
+    engines: {node: '>= 14.0.0'}
+
   '@algolia/requester-node-http@5.20.2':
     resolution: {integrity: sha512-YuSSdtgUt1dFBTNYUb+2TA5j0Hd0eDXE0bVISjUvTCqmoaGsGLwW+rKI7p1eLQ1r7RESwBAvUwcY1qP2Wl3Lyw==}
     engines: {node: '>= 14.0.0'}
@@ -963,8 +949,8 @@ packages:
   '@antfu/utils@8.1.1':
     resolution: {integrity: sha512-Mex9nXf9vR6AhcXmMrlz/HVgYYZpVGJ6YlPgwl7UnaFpnshXs6EK/oa5Gpf3CzENMjkvEx2tQtntGnb7UtSTOQ==}
 
-  '@antfu/utils@9.0.0':
-    resolution: {integrity: sha512-0+y1FiFZgAGntZvD1e3fdOKDC1N3RzzX+ILRJu+v1tQUsJxJDQwzenwgv6oqclI6u/Eyh26SnXZHrA/rWZF2TQ==}
+  '@antfu/utils@9.1.0':
+    resolution: {integrity: sha512-R+3bzxNN0ZscQg3ZVG7suqBTFP2dbdaCjKe5KY6hqNZimdyZ32KemotJPmoqQhKH28CqdgyXQGkWZlCGsGQmJw==}
 
   '@babel/code-frame@7.26.2':
     resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==}
@@ -1017,8 +1003,8 @@ packages:
     engines: {node: '>=6.0.0'}
     hasBin: true
 
-  '@babel/standalone@7.26.9':
-    resolution: {integrity: sha512-UTeQKy0kzJwWRe55kT1uK4G9H6D0lS6G4207hCU/bDaOhA5t2aC0qHN6GmID0Axv3OFLNXm27NdqcWp+BXcGtA==}
+  '@babel/standalone@7.26.4':
+    resolution: {integrity: sha512-SF+g7S2mhTT1b7CHyfNjDkPU1corxg4LPYsyP0x5KuCl+EbtBQHRLqr9N3q7e7+x7NQ5LYxQf8mJ2PmzebLr0A==}
     engines: {node: '>=6.9.0'}
 
   '@babel/template@7.26.9':
@@ -1040,8 +1026,8 @@ packages:
   '@braintree/sanitize-url@6.0.4':
     resolution: {integrity: sha512-s3jaWicZd0pkP0jf5ysyHUI/RE7MHos6qlToFcGWXVp+ykHOy77OUMrfbgJ9it2C5bow7OIQwYYaHjk9XlBQ2A==}
 
-  '@braintree/sanitize-url@7.1.1':
-    resolution: {integrity: sha512-i1L7noDNxtFyL5DmZafWy1wRVhGehQmzZaz1HiN5e7iylJMSZR7ekOV7NsIqa5qBldlLrsKv4HbgFUVlQrz8Mw==}
+  '@braintree/sanitize-url@7.1.0':
+    resolution: {integrity: sha512-o+UlMLt49RvtCASlOMW0AkHnabN9wR9rwCCherxO0yG4Npy34GkvrAqdXQvrhNs+jh+gkK8gB8Lf05qL/O7KWg==}
 
   '@chevrotain/cst-dts-gen@11.0.3':
     resolution: {integrity: sha512-BvIKpRLeS/8UbfxXxgC33xOumsacaeCKAjAeLyOn7Pcp95HiRbrpl14S+9vaZLolnbssPIUuiUd8IvgkRyt6NQ==}
@@ -1102,14 +1088,14 @@ packages:
     resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==}
     engines: {node: '>=12'}
 
-  '@docsearch/css@3.8.2':
-    resolution: {integrity: sha512-y05ayQFyUmCXze79+56v/4HpycYF3uFqB78pLPrSV5ZKAlDuIAAJNhaRi8tTdRNXh05yxX/TyNnzD6LwSM89vQ==}
+  '@docsearch/css@3.8.3':
+    resolution: {integrity: sha512-1nELpMV40JDLJ6rpVVFX48R1jsBFIQ6RnEQDsLFGmzOjPWTOMlZqUcXcvRx8VmYV/TqnS1l784Ofz+ZEb+wEOQ==}
 
-  '@docsearch/js@3.8.2':
-    resolution: {integrity: sha512-Q5wY66qHn0SwA7Taa0aDbHiJvaFJLOJyHmooQ7y8hlwwQLQ/5WwCcoX0g7ii04Qi2DJlHsd0XXzJ8Ypw9+9YmQ==}
+  '@docsearch/js@3.8.3':
+    resolution: {integrity: sha512-CQsX1zeoPJIWxN3IGoDSWOqzRc0JsOE9Bclegf9llwjYN2rzzJF93zagGcT3uI3tF31oCqTuUOVGW/mVFb7arw==}
 
-  '@docsearch/react@3.8.2':
-    resolution: {integrity: sha512-xCRrJQlTt8N9GU0DG4ptwHRkfnSnD/YpdeaXe02iKfqs97TkZJv60yE+1eq/tjPcVnTW8dP5qLP7itifFVV5eg==}
+  '@docsearch/react@3.8.3':
+    resolution: {integrity: sha512-6UNrg88K7lJWmuS6zFPL/xgL+n326qXqZ7Ybyy4E8P/6Rcblk3GE8RXxeol4Pd5pFpKMhOhBhzABKKwHtbJCIg==}
     peerDependencies:
       '@types/react': '>= 16.8.0 < 19.0.0'
       react: '>= 16.8.0 < 19.0.0'
@@ -1597,8 +1583,8 @@ packages:
     resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==}
     engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
 
-  '@eslint/compat@1.2.6':
-    resolution: {integrity: sha512-k7HNCqApoDHM6XzT30zGoETj+D+uUcZUb+IVAJmar3u6bvHf7hhHJcWx09QHj4/a2qrKZMWU0E16tvkiAdv06Q==}
+  '@eslint/compat@1.2.5':
+    resolution: {integrity: sha512-5iuG/StT+7OfvhoBHPlmxkPA9om6aDUFgmD4+mWKAGsYt4vCe8rypneG03AuseyRHBmcCLXQtIH5S26tIoggLg==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
     peerDependencies:
       eslint: ^9.10.0
@@ -1606,8 +1592,8 @@ packages:
       eslint:
         optional: true
 
-  '@eslint/config-array@0.19.2':
-    resolution: {integrity: sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==}
+  '@eslint/config-array@0.19.1':
+    resolution: {integrity: sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
 
   '@eslint/core@0.10.0':
@@ -1630,8 +1616,8 @@ packages:
     resolution: {integrity: sha512-U0/KgzI9BVUuHDQ9M2fuVgB0QZ1fSyzwm8jKmHr1dlsLHGHYzoeIA9yqLMdTbV3ivZfp6rTdt6zqre3TfNExUQ==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
 
-  '@eslint/object-schema@2.1.6':
-    resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==}
+  '@eslint/object-schema@2.1.5':
+    resolution: {integrity: sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
 
   '@eslint/plugin-kit@0.2.5':
@@ -1642,14 +1628,14 @@ packages:
     resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==}
     engines: {node: '>=14'}
 
-  '@floating-ui/core@1.6.9':
-    resolution: {integrity: sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw==}
+  '@floating-ui/core@1.6.8':
+    resolution: {integrity: sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==}
 
   '@floating-ui/dom@1.1.1':
     resolution: {integrity: sha512-TpIO93+DIujg3g7SykEAGZMDtbJRrmnYRCNYSjJlvIbGhBjRSNTLVbNeDQBrzy9qDgUbiWdc7KA0uZHZ2tJmiw==}
 
-  '@floating-ui/utils@0.2.9':
-    resolution: {integrity: sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==}
+  '@floating-ui/utils@0.2.8':
+    resolution: {integrity: sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==}
 
   '@humanfs/core@0.19.1':
     resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==}
@@ -1811,8 +1797,8 @@ packages:
     resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==}
     engines: {node: '>=8'}
 
-  '@jridgewell/gen-mapping@0.3.8':
-    resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==}
+  '@jridgewell/gen-mapping@0.3.5':
+    resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==}
     engines: {node: '>=6.0.0'}
 
   '@jridgewell/resolve-uri@3.1.2':
@@ -1868,7 +1854,7 @@ packages:
     resolution: {integrity: sha512-PR9zDb+rOzkRb2VD+EuKB7UC41vU5DIwZ5qqCpk0KJudcWAyi8rvYOhS7+L5aZCspw1stTViLgN5v6FF1p5cgQ==}
     engines: {node: '>=14.0.0'}
     peerDependencies:
-      rollup: ^4.34.7
+      rollup: ^4.34.8
     peerDependenciesMeta:
       rollup:
         optional: true
@@ -1877,7 +1863,7 @@ packages:
     resolution: {integrity: sha512-BEFI2EDqzl+vA1rl97IDRZ61AIwGH093d9nz8+dThxJNH8oSoB7MjWvPCX3dkaK1/RCJ/1v/R1XB15FuSs0fQw==}
     engines: {node: '>=16.0.0 || 14 >= 14.17'}
     peerDependencies:
-      rollup: ^4.34.7
+      rollup: ^4.34.8
     peerDependenciesMeta:
       rollup:
         optional: true
@@ -1886,7 +1872,7 @@ packages:
     resolution: {integrity: sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==}
     engines: {node: '>=14.0.0'}
     peerDependencies:
-      rollup: ^4.34.7
+      rollup: ^4.34.8
     peerDependenciesMeta:
       rollup:
         optional: true
@@ -1895,7 +1881,7 @@ packages:
     resolution: {integrity: sha512-0FPvAeVUT/zdWoO0jnb/V5BlBsUSNfkIOtFHzMO4H9MOklrmQFY6FduVHKucNb/aTFxvnGhj4MNj/T1oNdDfNg==}
     engines: {node: '>=14.0.0'}
     peerDependencies:
-      rollup: ^4.34.7
+      rollup: ^4.34.8
     peerDependenciesMeta:
       rollup:
         optional: true
@@ -1904,7 +1890,7 @@ packages:
     resolution: {integrity: sha512-7QaYCf8bqF04dOy7w/eHmJeNExxTYwvKAmlSAH/EaWWUzbT0h5sbF6bktFoX/0F/0qwng5/dWFMyf3gzaM8DsQ==}
     engines: {node: '>=14.0.0'}
     peerDependencies:
-      rollup: ^4.34.7
+      rollup: ^4.34.8
     peerDependenciesMeta:
       rollup:
         optional: true
@@ -1913,7 +1899,7 @@ packages:
     resolution: {integrity: sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A==}
     engines: {node: '>=14.0.0'}
     peerDependencies:
-      rollup: ^4.34.7
+      rollup: ^4.34.8
     peerDependenciesMeta:
       rollup:
         optional: true
@@ -1922,103 +1908,103 @@ packages:
     resolution: {integrity: sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==}
     engines: {node: '>=14.0.0'}
     peerDependencies:
-      rollup: ^4.34.7
+      rollup: ^4.34.8
     peerDependenciesMeta:
       rollup:
         optional: true
 
-  '@rollup/rollup-android-arm-eabi@4.34.7':
-    resolution: {integrity: sha512-l6CtzHYo8D2TQ3J7qJNpp3Q1Iye56ssIAtqbM2H8axxCEEwvN7o8Ze9PuIapbxFL3OHrJU2JBX6FIIVnP/rYyw==}
+  '@rollup/rollup-android-arm-eabi@4.34.8':
+    resolution: {integrity: sha512-q217OSE8DTp8AFHuNHXo0Y86e1wtlfVrXiAlwkIvGRQv9zbc6mE3sjIVfwI8sYUyNxwOg0j/Vm1RKM04JcWLJw==}
     cpu: [arm]
     os: [android]
 
-  '@rollup/rollup-android-arm64@4.34.7':
-    resolution: {integrity: sha512-KvyJpFUueUnSp53zhAa293QBYqwm94TgYTIfXyOTtidhm5V0LbLCJQRGkQClYiX3FXDQGSvPxOTD/6rPStMMDg==}
+  '@rollup/rollup-android-arm64@4.34.8':
+    resolution: {integrity: sha512-Gigjz7mNWaOL9wCggvoK3jEIUUbGul656opstjaUSGC3eT0BM7PofdAJaBfPFWWkXNVAXbaQtC99OCg4sJv70Q==}
     cpu: [arm64]
     os: [android]
 
-  '@rollup/rollup-darwin-arm64@4.34.7':
-    resolution: {integrity: sha512-jq87CjmgL9YIKvs8ybtIC98s/M3HdbqXhllcy9EdLV0yMg1DpxES2gr65nNy7ObNo/vZ/MrOTxt0bE5LinL6mA==}
+  '@rollup/rollup-darwin-arm64@4.34.8':
+    resolution: {integrity: sha512-02rVdZ5tgdUNRxIUrFdcMBZQoaPMrxtwSb+/hOfBdqkatYHR3lZ2A2EGyHq2sGOd0Owk80oV3snlDASC24He3Q==}
     cpu: [arm64]
     os: [darwin]
 
-  '@rollup/rollup-darwin-x64@4.34.7':
-    resolution: {integrity: sha512-rSI/m8OxBjsdnMMg0WEetu/w+LhLAcCDEiL66lmMX4R3oaml3eXz3Dxfvrxs1FbzPbJMaItQiksyMfv1hoIxnA==}
+  '@rollup/rollup-darwin-x64@4.34.8':
+    resolution: {integrity: sha512-qIP/elwR/tq/dYRx3lgwK31jkZvMiD6qUtOycLhTzCvrjbZ3LjQnEM9rNhSGpbLXVJYQ3rq39A6Re0h9tU2ynw==}
     cpu: [x64]
     os: [darwin]
 
-  '@rollup/rollup-freebsd-arm64@4.34.7':
-    resolution: {integrity: sha512-oIoJRy3ZrdsXpFuWDtzsOOa/E/RbRWXVokpVrNnkS7npz8GEG++E1gYbzhYxhxHbO2om1T26BZjVmdIoyN2WtA==}
+  '@rollup/rollup-freebsd-arm64@4.34.8':
+    resolution: {integrity: sha512-IQNVXL9iY6NniYbTaOKdrlVP3XIqazBgJOVkddzJlqnCpRi/yAeSOa8PLcECFSQochzqApIOE1GHNu3pCz+BDA==}
     cpu: [arm64]
     os: [freebsd]
 
-  '@rollup/rollup-freebsd-x64@4.34.7':
-    resolution: {integrity: sha512-X++QSLm4NZfZ3VXGVwyHdRf58IBbCu9ammgJxuWZYLX0du6kZvdNqPwrjvDfwmi6wFdvfZ/s6K7ia0E5kI7m8Q==}
+  '@rollup/rollup-freebsd-x64@4.34.8':
+    resolution: {integrity: sha512-TYXcHghgnCqYFiE3FT5QwXtOZqDj5GmaFNTNt3jNC+vh22dc/ukG2cG+pi75QO4kACohZzidsq7yKTKwq/Jq7Q==}
     cpu: [x64]
     os: [freebsd]
 
-  '@rollup/rollup-linux-arm-gnueabihf@4.34.7':
-    resolution: {integrity: sha512-Z0TzhrsNqukTz3ISzrvyshQpFnFRfLunYiXxlCRvcrb3nvC5rVKI+ZXPFG/Aa4jhQa1gHgH3A0exHaRRN4VmdQ==}
+  '@rollup/rollup-linux-arm-gnueabihf@4.34.8':
+    resolution: {integrity: sha512-A4iphFGNkWRd+5m3VIGuqHnG3MVnqKe7Al57u9mwgbyZ2/xF9Jio72MaY7xxh+Y87VAHmGQr73qoKL9HPbXj1g==}
     cpu: [arm]
     os: [linux]
 
-  '@rollup/rollup-linux-arm-musleabihf@4.34.7':
-    resolution: {integrity: sha512-nkznpyXekFAbvFBKBy4nNppSgneB1wwG1yx/hujN3wRnhnkrYVugMTCBXED4+Ni6thoWfQuHNYbFjgGH0MBXtw==}
+  '@rollup/rollup-linux-arm-musleabihf@4.34.8':
+    resolution: {integrity: sha512-S0lqKLfTm5u+QTxlFiAnb2J/2dgQqRy/XvziPtDd1rKZFXHTyYLoVL58M/XFwDI01AQCDIevGLbQrMAtdyanpA==}
     cpu: [arm]
     os: [linux]
 
-  '@rollup/rollup-linux-arm64-gnu@4.34.7':
-    resolution: {integrity: sha512-KCjlUkcKs6PjOcxolqrXglBDcfCuUCTVlX5BgzgoJHw+1rWH1MCkETLkLe5iLLS9dP5gKC7mp3y6x8c1oGBUtA==}
+  '@rollup/rollup-linux-arm64-gnu@4.34.8':
+    resolution: {integrity: sha512-jpz9YOuPiSkL4G4pqKrus0pn9aYwpImGkosRKwNi+sJSkz+WU3anZe6hi73StLOQdfXYXC7hUfsQlTnjMd3s1A==}
     cpu: [arm64]
     os: [linux]
 
-  '@rollup/rollup-linux-arm64-musl@4.34.7':
-    resolution: {integrity: sha512-uFLJFz6+utmpbR313TTx+NpPuAXbPz4BhTQzgaP0tozlLnGnQ6rCo6tLwaSa6b7l6gRErjLicXQ1iPiXzYotjw==}
+  '@rollup/rollup-linux-arm64-musl@4.34.8':
+    resolution: {integrity: sha512-KdSfaROOUJXgTVxJNAZ3KwkRc5nggDk+06P6lgi1HLv1hskgvxHUKZ4xtwHkVYJ1Rep4GNo+uEfycCRRxht7+Q==}
     cpu: [arm64]
     os: [linux]
 
-  '@rollup/rollup-linux-loongarch64-gnu@4.34.7':
-    resolution: {integrity: sha512-ws8pc68UcJJqCpneDFepnwlsMUFoWvPbWXT/XUrJ7rWUL9vLoIN3GAasgG+nCvq8xrE3pIrd+qLX/jotcLy0Qw==}
+  '@rollup/rollup-linux-loongarch64-gnu@4.34.8':
+    resolution: {integrity: sha512-NyF4gcxwkMFRjgXBM6g2lkT58OWztZvw5KkV2K0qqSnUEqCVcqdh2jN4gQrTn/YUpAcNKyFHfoOZEer9nwo6uQ==}
     cpu: [loong64]
     os: [linux]
 
-  '@rollup/rollup-linux-powerpc64le-gnu@4.34.7':
-    resolution: {integrity: sha512-vrDk9JDa/BFkxcS2PbWpr0C/LiiSLxFbNOBgfbW6P8TBe9PPHx9Wqbvx2xgNi1TOAyQHQJ7RZFqBiEohm79r0w==}
+  '@rollup/rollup-linux-powerpc64le-gnu@4.34.8':
+    resolution: {integrity: sha512-LMJc999GkhGvktHU85zNTDImZVUCJ1z/MbAJTnviiWmmjyckP5aQsHtcujMjpNdMZPT2rQEDBlJfubhs3jsMfw==}
     cpu: [ppc64]
     os: [linux]
 
-  '@rollup/rollup-linux-riscv64-gnu@4.34.7':
-    resolution: {integrity: sha512-rB+ejFyjtmSo+g/a4eovDD1lHWHVqizN8P0Hm0RElkINpS0XOdpaXloqM4FBkF9ZWEzg6bezymbpLmeMldfLTw==}
+  '@rollup/rollup-linux-riscv64-gnu@4.34.8':
+    resolution: {integrity: sha512-xAQCAHPj8nJq1PI3z8CIZzXuXCstquz7cIOL73HHdXiRcKk8Ywwqtx2wrIy23EcTn4aZ2fLJNBB8d0tQENPCmw==}
     cpu: [riscv64]
     os: [linux]
 
-  '@rollup/rollup-linux-s390x-gnu@4.34.7':
-    resolution: {integrity: sha512-nNXNjo4As6dNqRn7OrsnHzwTgtypfRA3u3AKr0B3sOOo+HkedIbn8ZtFnB+4XyKJojIfqDKmbIzO1QydQ8c+Pw==}
+  '@rollup/rollup-linux-s390x-gnu@4.34.8':
+    resolution: {integrity: sha512-DdePVk1NDEuc3fOe3dPPTb+rjMtuFw89gw6gVWxQFAuEqqSdDKnrwzZHrUYdac7A7dXl9Q2Vflxpme15gUWQFA==}
     cpu: [s390x]
     os: [linux]
 
-  '@rollup/rollup-linux-x64-gnu@4.34.7':
-    resolution: {integrity: sha512-9kPVf9ahnpOMSGlCxXGv980wXD0zRR3wyk8+33/MXQIpQEOpaNe7dEHm5LMfyRZRNt9lMEQuH0jUKj15MkM7QA==}
+  '@rollup/rollup-linux-x64-gnu@4.34.8':
+    resolution: {integrity: sha512-8y7ED8gjxITUltTUEJLQdgpbPh1sUQ0kMTmufRF/Ns5tI9TNMNlhWtmPKKHCU0SilX+3MJkZ0zERYYGIVBYHIA==}
     cpu: [x64]
     os: [linux]
 
-  '@rollup/rollup-linux-x64-musl@4.34.7':
-    resolution: {integrity: sha512-7wJPXRWTTPtTFDFezA8sle/1sdgxDjuMoRXEKtx97ViRxGGkVQYovem+Q8Pr/2HxiHp74SSRG+o6R0Yq0shPwQ==}
+  '@rollup/rollup-linux-x64-musl@4.34.8':
+    resolution: {integrity: sha512-SCXcP0ZpGFIe7Ge+McxY5zKxiEI5ra+GT3QRxL0pMMtxPfpyLAKleZODi1zdRHkz5/BhueUrYtYVgubqe9JBNQ==}
     cpu: [x64]
     os: [linux]
 
-  '@rollup/rollup-win32-arm64-msvc@4.34.7':
-    resolution: {integrity: sha512-MN7aaBC7mAjsiMEZcsJvwNsQVNZShgES/9SzWp1HC9Yjqb5OpexYnRjF7RmE4itbeesHMYYQiAtUAQaSKs2Rfw==}
+  '@rollup/rollup-win32-arm64-msvc@4.34.8':
+    resolution: {integrity: sha512-YHYsgzZgFJzTRbth4h7Or0m5O74Yda+hLin0irAIobkLQFRQd1qWmnoVfwmKm9TXIZVAD0nZ+GEb2ICicLyCnQ==}
     cpu: [arm64]
     os: [win32]
 
-  '@rollup/rollup-win32-ia32-msvc@4.34.7':
-    resolution: {integrity: sha512-aeawEKYswsFu1LhDM9RIgToobquzdtSc4jSVqHV8uApz4FVvhFl/mKh92wc8WpFc6aYCothV/03UjY6y7yLgbg==}
+  '@rollup/rollup-win32-ia32-msvc@4.34.8':
+    resolution: {integrity: sha512-r3NRQrXkHr4uWy5TOjTpTYojR9XmF0j/RYgKCef+Ag46FWUTltm5ziticv8LdNsDMehjJ543x/+TJAek/xBA2w==}
     cpu: [ia32]
     os: [win32]
 
-  '@rollup/rollup-win32-x64-msvc@4.34.7':
-    resolution: {integrity: sha512-4ZedScpxxIrVO7otcZ8kCX1mZArtH2Wfj3uFCxRJ9NO80gg1XV0U/b2f/MKaGwj2X3QopHfoWiDQ917FRpwY3w==}
+  '@rollup/rollup-win32-x64-msvc@4.34.8':
+    resolution: {integrity: sha512-U0FaE5O1BCpZSeE6gBl3c5ObhePQSfk9vDRToMmTkbhCOgW4jqvtS5LGyQ76L1fH8sM0keRp4uDTsbjiUyjk0g==}
     cpu: [x64]
     os: [win32]
 
@@ -2086,8 +2072,8 @@ packages:
   '@types/d3-interpolate@3.0.4':
     resolution: {integrity: sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==}
 
-  '@types/d3-path@3.1.1':
-    resolution: {integrity: sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==}
+  '@types/d3-path@3.1.0':
+    resolution: {integrity: sha512-P2dlU/q51fkOc/Gfl3Ul9kicV7l+ra934qBFXCFhrZMOL6du1TM0pm1ThYvENukyOn5h9v+yMJ9Fn5JK4QozrQ==}
 
   '@types/d3-polygon@3.0.2':
     resolution: {integrity: sha512-ZuWOtMaHCkN9xoeEMr1ubW2nGWsp4nIql+OPQRstu4ypeZ+zk3YKqQT0CXVe/PYqrKpZAi+J9mTs05TKwjXSRA==}
@@ -2101,14 +2087,14 @@ packages:
   '@types/d3-scale-chromatic@3.1.0':
     resolution: {integrity: sha512-iWMJgwkK7yTRmWqRB5plb1kadXyQ5Sj8V/zYlFGMUBbIPKQScw+Dku9cAAMgJG+z5GYDoMjWGLVOvjghDEFnKQ==}
 
-  '@types/d3-scale@4.0.9':
-    resolution: {integrity: sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==}
+  '@types/d3-scale@4.0.8':
+    resolution: {integrity: sha512-gkK1VVTr5iNiYJ7vWDI+yUFFlszhNMtVeneJ6lUTKPjprsvLLI9/tgEGiXJOnlINJA8FyA88gfnQsHbybVZrYQ==}
 
   '@types/d3-selection@3.0.11':
     resolution: {integrity: sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w==}
 
-  '@types/d3-shape@3.1.7':
-    resolution: {integrity: sha512-VLvUQ33C+3J+8p+Daf+nYSOsjB4GXp19/S/aGo60m9h1v6XaxjiT82lKVWJCfzhtuZ3yD7i/TPeC/fuKLLOSmg==}
+  '@types/d3-shape@3.1.6':
+    resolution: {integrity: sha512-5KKk5aKGu2I+O6SONMYSNflgiP0WfZIQvVUMan50wHsLG1G94JlxEVnCpQARfTtzytuY0p/9PXXZb3I7giofIA==}
 
   '@types/d3-time-format@4.0.3':
     resolution: {integrity: sha512-5xg9rC+wWL8kdDj153qZcsJ0FWiFt0J5RB6LYUNZjwSnesfblqrI/bJ1wBdJ8OQfncgbJG5+2F+qfqnqyzYxyg==}
@@ -2146,8 +2132,8 @@ packages:
   '@types/fs-extra@8.1.5':
     resolution: {integrity: sha512-0dzKcwO+S8s2kuF5Z9oUWatQJj5Uq/iqphEtE3GQJVRRYm/tD1LglU2UnXi2A8jLq5umkGouOXOR9y0n613ZwQ==}
 
-  '@types/geojson@7946.0.16':
-    resolution: {integrity: sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==}
+  '@types/geojson@7946.0.15':
+    resolution: {integrity: sha512-9oSxFzDCT2Rj6DfcHF8G++jxBKS7mBqXl5xrRW+Kbvjry6Uduya2iiwqHPhVXpasAVMBYKkEPGgKhd3+/HZ6xA==}
 
   '@types/glob@7.2.0':
     resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==}
@@ -2247,13 +2233,13 @@ packages:
     resolution: {integrity: sha512-kArLq83QxGLbuHrTMoOEWO+l2MwsNS2TGISEdx8xgqpkbytB07XmlQyQdNDrCc1ecSqx0cnmhGvpX+VBwqqSkg==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
 
-  '@typescript/vfs@1.6.1':
-    resolution: {integrity: sha512-JwoxboBh7Oz1v38tPbkrZ62ZXNHAk9bJ7c9x0eI5zBfBnBYGhURdbnh7Z4smN/MV48Y5OCcZb58n972UtbazsA==}
+  '@typescript/vfs@1.6.0':
+    resolution: {integrity: sha512-hvJUjNVeBMp77qPINuUvYXj4FyWeeMMKZkxEATEU3hqBAQ7qdTBCUFT7Sp0Zu0faeEtFf+ldXxMEDr/bk73ISg==}
     peerDependencies:
       typescript: ^5.7.3
 
-  '@ungap/structured-clone@1.3.0':
-    resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==}
+  '@ungap/structured-clone@1.2.1':
+    resolution: {integrity: sha512-fEzPV3hSkSMltkw152tJKNARhOupqbH96MZWyRjNaYZOMIzbrTeQDG+MTc6Mr2pgzFQzFxAfmhGDNP5QK++2ZA==}
 
   '@unocss/astro@65.5.0':
     resolution: {integrity: sha512-z0uLbOQhINYpd57p0p/fpVeBY1+Rv0t4GQQUMF00tH8tpIHGUdyHH9aE/yGZaeLI2onmaShTDgIVXT+7fR9fMw==}
@@ -2526,8 +2512,8 @@ packages:
   ajv@6.12.6:
     resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
 
-  algoliasearch@5.20.2:
-    resolution: {integrity: sha512-8evxG++iWyWnhng3g5RP+kwn6j+2vKLfew8pVoekn87FcfsDm92zJXKwSrU6pl+m5eAbGFhFF/gCYEQiRdbPlA==}
+  algoliasearch@5.19.0:
+    resolution: {integrity: sha512-zrLtGhC63z3sVLDDKGW+SlCRN9eJHFTgdEmoAOpsVh6wgGL1GgTTDou7tpCBjevzgIvi3AIyDAQO3Xjbg5eqZg==}
     engines: {node: '>= 14.0.0'}
 
   alien-signals@0.2.2:
@@ -2647,8 +2633,8 @@ packages:
     peerDependencies:
       esbuild: '>=0.18'
 
-  c12@2.0.2:
-    resolution: {integrity: sha512-NkvlL5CHZt9kPswJYDCUYtTaMt7JOfcpsnNncfj7sWsc13x6Wz+GiTpBtqZOojFlzyTHui8+OAfR6praV6PYaQ==}
+  c12@2.0.1:
+    resolution: {integrity: sha512-Z4JgsKXHG37C6PYUtIxCfLJZvo6FyhHJoClwwb9ftUkLpPSkuYqn6Tr+vnaN8hymm0kIbcg6Ey3kv/Q71k5w/A==}
     peerDependencies:
       magicast: ^0.3.5
     peerDependenciesMeta:
@@ -2666,14 +2652,14 @@ packages:
   caniuse-api@3.0.0:
     resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==}
 
-  caniuse-lite@1.0.30001699:
-    resolution: {integrity: sha512-b+uH5BakXZ9Do9iK+CkDmctUSEqZl+SP056vc5usa0PL+ev5OHw003rZXcnjNDv3L8P5j6rwT6C0BPKSikW08w==}
+  caniuse-lite@1.0.30001690:
+    resolution: {integrity: sha512-5ExiE3qQN6oF8Clf8ifIDcMRCRE/dMGcETG/XGMD8/XiXm6HXQgQTh1yZYLXXpSOsEUlJm1Xr7kGULZTuGtP/w==}
 
   ccount@2.0.1:
     resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==}
 
-  chai@5.2.0:
-    resolution: {integrity: sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==}
+  chai@5.1.2:
+    resolution: {integrity: sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==}
     engines: {node: '>=12'}
 
   chalk@4.1.2:
@@ -2887,8 +2873,8 @@ packages:
     peerDependencies:
       cytoscape: ^3.2.0
 
-  cytoscape@3.31.0:
-    resolution: {integrity: sha512-zDGn1K/tfZwEnoGOcHc0H4XazqAAXAuDpcYw9mUnUjATjqljyCNGJv8uEvbvxGaGHaVshxMecyl6oc6uKzRfbw==}
+  cytoscape@3.30.4:
+    resolution: {integrity: sha512-OxtlZwQl1WbwMmLiyPSEBuzeTIQnwZhJYYWFzZ2PhEHVFwpeaqNIkUzSiso00D98qk60l8Gwon2RP304d3BJ1A==}
     engines: {node: '>=0.10'}
 
   d3-array@2.12.1:
@@ -3114,11 +3100,11 @@ packages:
     resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==}
     engines: {node: '>= 4'}
 
-  dompurify@3.2.4:
-    resolution: {integrity: sha512-ysFSFEDVduQpyhzAob/kkuJjf5zWkZD8/A9ywSp1byueyuCfHamrCBa14/Oc2iiB0e51B+NpxSl5gmzn+Ms/mg==}
+  dompurify@3.2.2:
+    resolution: {integrity: sha512-YMM+erhdZ2nkZ4fTNRTSI94mb7VG7uVF5vj5Zde7tImgnhZE3R6YW/IACGIHb2ux+QkEXMhe591N+5jWOmL4Zw==}
 
-  domutils@3.2.2:
-    resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==}
+  domutils@3.2.1:
+    resolution: {integrity: sha512-xWXmuRnN9OMP6ptPd2+H0cCbcYBULa5YDTbMm/2lvkWvNA3O4wcW+GvzooqBuNM8yy6pl3VIAeJTUUWUbfI5Fw==}
 
   dotenv@16.4.7:
     resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==}
@@ -3130,8 +3116,8 @@ packages:
   eastasianwidth@0.2.0:
     resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
 
-  electron-to-chromium@1.5.101:
-    resolution: {integrity: sha512-L0ISiQrP/56Acgu4/i/kfPwWSgrzYZUnQrC0+QPFuhqlLP1Ir7qzPPDVS9BcKIyWTRU8+o6CC8dKw38tSWhYIA==}
+  electron-to-chromium@1.5.76:
+    resolution: {integrity: sha512-CjVQyG7n7Sr+eBXE86HIulnL5N8xZY1sgmOPGuq/F0Rr0FJq63lg0kEtOIDfZBk44FnDLf6FUJ+dsJcuiUDdDQ==}
 
   emoji-regex-xs@1.0.0:
     resolution: {integrity: sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==}
@@ -3145,8 +3131,8 @@ packages:
   emoji-regex@9.2.2:
     resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
 
-  enhanced-resolve@5.18.1:
-    resolution: {integrity: sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==}
+  enhanced-resolve@5.17.1:
+    resolution: {integrity: sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==}
     engines: {node: '>=10.13.0'}
 
   entities@4.5.0:
@@ -3438,8 +3424,8 @@ packages:
   fast-levenshtein@2.0.6:
     resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
 
-  fastq@1.19.0:
-    resolution: {integrity: sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA==}
+  fastq@1.18.0:
+    resolution: {integrity: sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw==}
 
   fdir@6.4.3:
     resolution: {integrity: sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==}
@@ -3667,8 +3653,8 @@ packages:
     resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
     engines: {node: '>= 4'}
 
-  import-fresh@3.3.1:
-    resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==}
+  import-fresh@3.3.0:
+    resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
     engines: {node: '>=6'}
 
   importx@0.5.1:
@@ -3782,8 +3768,8 @@ packages:
   jackspeak@3.4.3:
     resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==}
 
-  jackspeak@4.0.3:
-    resolution: {integrity: sha512-oSwM7q8PTHQWuZAlp995iPpPJ4Vkl7qT0ZRD+9duL9j2oBy6KcTfyxc8mEuHJYC+z/kbps80aJLkaNzTOrf/kw==}
+  jackspeak@4.0.2:
+    resolution: {integrity: sha512-bZsjR/iRjl1Nk1UkjGpAzLNfQtzuijhn2g+pbZb98HQ1Gk8vM9hfbxeMBP+M2/UUdwj0RqGG3mlvk2MsAqwvEw==}
     engines: {node: 20 || >=22}
 
   jiti@1.21.7:
@@ -3809,8 +3795,8 @@ packages:
     resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==}
     hasBin: true
 
-  jsesc@3.1.0:
-    resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==}
+  jsesc@3.0.2:
+    resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==}
     engines: {node: '>=6'}
     hasBin: true
 
@@ -3935,8 +3921,8 @@ packages:
   longest-streak@3.1.0:
     resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==}
 
-  loupe@3.1.3:
-    resolution: {integrity: sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==}
+  loupe@3.1.2:
+    resolution: {integrity: sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg==}
 
   lru-cache@10.4.3:
     resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
@@ -3979,8 +3965,8 @@ packages:
     engines: {node: '>= 18'}
     hasBin: true
 
-  mdast-util-find-and-replace@3.0.2:
-    resolution: {integrity: sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==}
+  mdast-util-find-and-replace@3.0.1:
+    resolution: {integrity: sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA==}
 
   mdast-util-from-markdown@2.0.2:
     resolution: {integrity: sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==}
@@ -3988,8 +3974,8 @@ packages:
   mdast-util-gfm-autolink-literal@2.0.1:
     resolution: {integrity: sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==}
 
-  mdast-util-gfm-footnote@2.1.0:
-    resolution: {integrity: sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==}
+  mdast-util-gfm-footnote@2.0.0:
+    resolution: {integrity: sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ==}
 
   mdast-util-gfm-strikethrough@2.0.0:
     resolution: {integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==}
@@ -4049,8 +4035,8 @@ packages:
   micromark-extension-gfm-strikethrough@2.1.0:
     resolution: {integrity: sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==}
 
-  micromark-extension-gfm-table@2.1.1:
-    resolution: {integrity: sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==}
+  micromark-extension-gfm-table@2.1.0:
+    resolution: {integrity: sha512-Ub2ncQv+fwD70/l4ou27b4YzfNaCJOvyX4HxXU15m7mpYY+rjuWzsLIPZHJL253Z643RpbcP1oeIJlQ/SKW67g==}
 
   micromark-extension-gfm-tagfilter@2.0.0:
     resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==}
@@ -4109,8 +4095,8 @@ packages:
   micromark-util-sanitize-uri@2.0.1:
     resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==}
 
-  micromark-util-subtokenize@2.0.4:
-    resolution: {integrity: sha512-N6hXjrin2GTJDe3MVjf5FuXpm12PGm80BrUAeub9XFXca8JZbP+oIwY4LJSVwFUCL1IPm/WwSVUN7goFHmSGGQ==}
+  micromark-util-subtokenize@2.0.3:
+    resolution: {integrity: sha512-VXJJuNxYWSoYL6AJ6OQECCFGhIU2GGHMw8tahogePBrjkG8aCCas3ibkp7RnVOSTClg2is05/R7maAhF1XyQMg==}
 
   micromark-util-symbol@2.0.1:
     resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==}
@@ -4424,8 +4410,8 @@ packages:
     resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==}
     engines: {node: '>=4'}
 
-  pnpm@10.4.0:
-    resolution: {integrity: sha512-a4SdB4fZf49OHwOpuP+PA4554VPW8RrlOa58Q1/555bfaoYsmRUCaVx/no+siur8GsWo2rR+NhSNGDgy2IbdUg==}
+  pnpm@10.4.1:
+    resolution: {integrity: sha512-x1O2w616+hOvOI+m2AgDWgCOMOqZk/WMZmPivF/yFnmqg02wlJhxKapNSIuG31f3tjSYGy+CfNysxpjMDPuIrw==}
     engines: {node: '>=18.12'}
     hasBin: true
 
@@ -4435,8 +4421,8 @@ packages:
   points-on-path@0.2.1:
     resolution: {integrity: sha512-25ClnWWuw7JbWZcgqY/gJ4FQWadKxGWk+3kR/7kD0tCaDtPPMj7oHu2ToLaVhfpnHrZzYby2w6tUA0eOIuUg8g==}
 
-  postcss-calc@10.1.1:
-    resolution: {integrity: sha512-NYEsLHh8DgG/PRH2+G9BTuUdtf9ViS+vdoQ0YA5OQdGsfN4ztiwtDWNtBl9EKeqNMFnIu8IKZ0cLxEQ5r5KVMw==}
+  postcss-calc@10.0.2:
+    resolution: {integrity: sha512-DT/Wwm6fCKgpYVI7ZEWuPJ4az8hiEHtCUeYjZXqU7Ou4QqYh1Df2yCQ7Ca6N7xqKPFkxN3fhf+u9KSoOCJNAjg==}
     engines: {node: ^18.12 || ^20.9 || >=22.0}
     peerDependencies:
       postcss: ^8.4.38
@@ -4595,8 +4581,8 @@ packages:
     resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==}
     engines: {node: '>=4'}
 
-  postcss-selector-parser@7.1.0:
-    resolution: {integrity: sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==}
+  postcss-selector-parser@7.0.0:
+    resolution: {integrity: sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==}
     engines: {node: '>=4'}
 
   postcss-svgo@7.0.1:
@@ -4618,8 +4604,8 @@ packages:
     resolution: {integrity: sha512-MjOadfU3Ys9KYoX0AdkBlFEF1Vx37uCCeN4ZHnmwm9FfpbsGWMZeBLMmmpY+6Ocqod7mkdZ0DT31OlbsFrLlkA==}
     engines: {node: ^10 || ^12 || >=14}
 
-  preact@10.26.0:
-    resolution: {integrity: sha512-6ugi/Mb7lyV5RA6KlnijFyDLMU253i7L0RRiObIzDoqj59KT9iTeNJbA/YGw6M7jP4vxaab0DOA8DgodTOA6EQ==}
+  preact@10.25.4:
+    resolution: {integrity: sha512-jLdZDb+Q+odkHJ+MpW/9U5cODzqnB+fy2EiHSZES7ldV5LK7yjlVzTp7R8Xy6W6y75kfK8iWYtFVH7lvjwrCMA==}
 
   prelude-ls@1.2.1:
     resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
@@ -4677,8 +4663,8 @@ packages:
     resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
     engines: {node: '>=8.10.0'}
 
-  readdirp@4.1.2:
-    resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==}
+  readdirp@4.1.1:
+    resolution: {integrity: sha512-h80JrZu/MHUZCyHu5ciuoI0+WxsCxzxJTILn6Fs8rxSnFPh+UVHYfeIxK1nVGugMqkfC4vJcBOYbkfkwYK0+gw==}
     engines: {node: '>= 14.18.0'}
 
   refa@0.12.1:
@@ -4761,7 +4747,7 @@ packages:
     resolution: {integrity: sha512-aSHRcJ6KG2IHIioYlvAOcEq6U99sVtqDDKVhnwt70rW6tsz3tv5OSjEiWcgzfsHdLyGXZ/3b/7b/+Za3Y6r1XA==}
     engines: {node: '>=16'}
     peerDependencies:
-      rollup: ^4.34.7
+      rollup: ^4.34.8
       typescript: ^5.7.3
 
   rollup-plugin-esbuild@6.2.0:
@@ -4769,7 +4755,7 @@ packages:
     engines: {node: '>=14.18.0'}
     peerDependencies:
       esbuild: '>=0.18.0'
-      rollup: ^4.34.7
+      rollup: ^4.34.8
 
   rollup-plugin-inject@3.0.2:
     resolution: {integrity: sha512-ptg9PQwzs3orn4jkgXJ74bfs5vYz1NCZlSQMBUA0wKcGp5i5pA1AO3fOUEte8enhGUC+iapTCzEWw2jEFFUO/w==}
@@ -4781,8 +4767,8 @@ packages:
   rollup-pluginutils@2.8.2:
     resolution: {integrity: sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==}
 
-  rollup@4.34.7:
-    resolution: {integrity: sha512-8qhyN0oZ4x0H6wmBgfKxJtxM7qS98YJ0k0kNh5ECVtuchIJ7z9IVVvzpmtQyT10PXKMtBxYr1wQ5Apg8RS8kXQ==}
+  rollup@4.34.8:
+    resolution: {integrity: sha512-489gTVMzAYdiZHFVA/ig/iYFllCcWFHMvUHI1rpFmkoUtRlQxqh6/yiNqnYibjMZ2b/+FUQwldG+aLsEt6bglQ==}
     engines: {node: '>=18.0.0', npm: '>=8.0.0'}
     hasBin: true
 
@@ -4839,9 +4825,6 @@ packages:
     resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
     engines: {node: '>=8'}
 
-  shiki@0.14.7:
-    resolution: {integrity: sha512-dNPAPrxSc87ua2sKJ3H5dQ/6ZaY8RNnaAqK+t0eG7p0Soi2ydiqbGOTaZCqaYvA/uZYfS1LJnemt3Q+mSfcPCg==}
-
   siginfo@2.0.0:
     resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==}
 
@@ -4979,8 +4962,8 @@ packages:
     peerDependencies:
       postcss: ^8.4.31
 
-  stylis@4.3.6:
-    resolution: {integrity: sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ==}
+  stylis@4.3.4:
+    resolution: {integrity: sha512-osIBl6BGUmSfDkyH2mB7EFvCJntXDrLhKjHTRj/rK6xLH0yuPrHULDRQzKokSOD4VoorhtKpfcfW1GAntu8now==}
 
   superjson@2.2.2:
     resolution: {integrity: sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q==}
@@ -5087,8 +5070,8 @@ packages:
     resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==}
     engines: {node: '>=6.10'}
 
-  tsconfck@3.1.5:
-    resolution: {integrity: sha512-CLDfGgUp7XPswWnezWwsCRxNmgQjhYq3VXHM0/XIRxhVrKw0M1if9agzryh1QS3nxjCROvV+xWxoJO1YctzzWg==}
+  tsconfck@3.1.4:
+    resolution: {integrity: sha512-kdqWFGVJqe+KGYvlSO9NIaWn9jT1Ny4oKVzAJsKii5eoE9snzTJzL4+MMVOMn+fikWGFmKEylcXL710V/kIPJQ==}
     engines: {node: ^18 || >=20}
     hasBin: true
     peerDependencies:
@@ -5163,8 +5146,8 @@ packages:
   undici-types@6.20.0:
     resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==}
 
-  undici@5.28.5:
-    resolution: {integrity: sha512-zICwjrDrcrUE0pyyJc1I2QzBkLM8FINsgOrt6WjA+BgajVq9Nxu2PbFFXUrAggLfDXlZGZBVZYw7WNV5KiBiBA==}
+  undici@5.28.4:
+    resolution: {integrity: sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==}
     engines: {node: '>=14.0'}
 
   unenv@2.0.0-rc.1:
@@ -5233,8 +5216,8 @@ packages:
     resolution: {integrity: sha512-eL/8PlhLcMmlMDtNPKhyyz9kEBDS3Uk4yMu/ewlkT2WFbtzScjHWPJLdQLmaGPUKjXzwe9MumOtOgc4Fro96Kg==}
     hasBin: true
 
-  update-browserslist-db@1.1.2:
-    resolution: {integrity: sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==}
+  update-browserslist-db@1.1.1:
+    resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==}
     hasBin: true
     peerDependencies:
       browserslist: '>= 4.21.0'
@@ -5314,8 +5297,8 @@ packages:
       yaml:
         optional: true
 
-  vitepress-plugin-group-icons@1.3.5:
-    resolution: {integrity: sha512-1f1NP7osRYlNTR0yS5CAqcaasKHRSAzFKpeCUOfCPwYLAFxhCxsEbRtPBm0U1CfrDVa303MsjX18ngGpFGxIMA==}
+  vitepress-plugin-group-icons@1.3.6:
+    resolution: {integrity: sha512-MzUAuMZ43f51dfBKYowW7yv/A2DxIjtN50d8Dcj31nU9RB6GuYBJ48E/Ze88U0bEn4wlnrjMXFh2j2e0rYmGug==}
 
   vitepress-plugin-mermaid@2.0.17:
     resolution: {integrity: sha512-IUzYpwf61GC6k0XzfmAmNrLvMi9TRrVRMsUyCA8KNXhg/mQ1VqWnO0/tBVPiX5UoKF1mDUwqn5QV4qAJl6JnUg==}
@@ -5323,8 +5306,8 @@ packages:
       mermaid: 10 || 11
       vitepress: ^1.0.0 || ^1.0.0-alpha
 
-  vitepress@1.6.3:
-    resolution: {integrity: sha512-fCkfdOk8yRZT8GD9BFqusW3+GggWYZ/rYncOfmgcDtP3ualNHCAg+Robxp2/6xfH1WwPHtGpPwv7mbA3qomtBw==}
+  vitepress@2.0.0-alpha.2:
+    resolution: {integrity: sha512-w+1WCkd8ko8lDUh61OWo4dj5Y4VHYJvwmJ9/iOXoVlzxOfO5Hoio2H3OMOgNlCzq0E0rTp9UR5GPU120AnH2dg==}
     hasBin: true
     peerDependencies:
       markdown-it-mathjax3: ^4
@@ -5383,9 +5366,6 @@ packages:
   vscode-oniguruma@1.7.0:
     resolution: {integrity: sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==}
 
-  vscode-textmate@8.0.0:
-    resolution: {integrity: sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==}
-
   vscode-uri@3.0.8:
     resolution: {integrity: sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==}
 
@@ -5530,70 +5510,79 @@ packages:
 
 snapshots:
 
-  '@algolia/autocomplete-core@1.17.7(@algolia/client-search@5.20.2)(algoliasearch@5.20.2)(search-insights@2.17.3)':
+  '@algolia/autocomplete-core@1.17.9(@algolia/client-search@5.20.2)(algoliasearch@5.19.0)(search-insights@2.17.3)':
     dependencies:
-      '@algolia/autocomplete-plugin-algolia-insights': 1.17.7(@algolia/client-search@5.20.2)(algoliasearch@5.20.2)(search-insights@2.17.3)
-      '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.20.2)(algoliasearch@5.20.2)
+      '@algolia/autocomplete-plugin-algolia-insights': 1.17.9(@algolia/client-search@5.20.2)(algoliasearch@5.19.0)(search-insights@2.17.3)
+      '@algolia/autocomplete-shared': 1.17.9(@algolia/client-search@5.20.2)(algoliasearch@5.19.0)
     transitivePeerDependencies:
       - '@algolia/client-search'
       - algoliasearch
       - search-insights
 
-  '@algolia/autocomplete-plugin-algolia-insights@1.17.7(@algolia/client-search@5.20.2)(algoliasearch@5.20.2)(search-insights@2.17.3)':
+  '@algolia/autocomplete-plugin-algolia-insights@1.17.9(@algolia/client-search@5.20.2)(algoliasearch@5.19.0)(search-insights@2.17.3)':
     dependencies:
-      '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.20.2)(algoliasearch@5.20.2)
+      '@algolia/autocomplete-shared': 1.17.9(@algolia/client-search@5.20.2)(algoliasearch@5.19.0)
       search-insights: 2.17.3
     transitivePeerDependencies:
       - '@algolia/client-search'
       - algoliasearch
 
-  '@algolia/autocomplete-preset-algolia@1.17.7(@algolia/client-search@5.20.2)(algoliasearch@5.20.2)':
+  '@algolia/autocomplete-preset-algolia@1.17.9(@algolia/client-search@5.20.2)(algoliasearch@5.19.0)':
     dependencies:
-      '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.20.2)(algoliasearch@5.20.2)
+      '@algolia/autocomplete-shared': 1.17.9(@algolia/client-search@5.20.2)(algoliasearch@5.19.0)
       '@algolia/client-search': 5.20.2
-      algoliasearch: 5.20.2
+      algoliasearch: 5.19.0
 
-  '@algolia/autocomplete-shared@1.17.7(@algolia/client-search@5.20.2)(algoliasearch@5.20.2)':
+  '@algolia/autocomplete-shared@1.17.9(@algolia/client-search@5.20.2)(algoliasearch@5.19.0)':
     dependencies:
       '@algolia/client-search': 5.20.2
-      algoliasearch: 5.20.2
+      algoliasearch: 5.19.0
 
-  '@algolia/client-abtesting@5.20.2':
+  '@algolia/client-abtesting@5.19.0':
     dependencies:
-      '@algolia/client-common': 5.20.2
-      '@algolia/requester-browser-xhr': 5.20.2
-      '@algolia/requester-fetch': 5.20.2
-      '@algolia/requester-node-http': 5.20.2
+      '@algolia/client-common': 5.19.0
+      '@algolia/requester-browser-xhr': 5.19.0
+      '@algolia/requester-fetch': 5.19.0
+      '@algolia/requester-node-http': 5.19.0
 
-  '@algolia/client-analytics@5.20.2':
+  '@algolia/client-analytics@5.19.0':
     dependencies:
-      '@algolia/client-common': 5.20.2
-      '@algolia/requester-browser-xhr': 5.20.2
-      '@algolia/requester-fetch': 5.20.2
-      '@algolia/requester-node-http': 5.20.2
+      '@algolia/client-common': 5.19.0
+      '@algolia/requester-browser-xhr': 5.19.0
+      '@algolia/requester-fetch': 5.19.0
+      '@algolia/requester-node-http': 5.19.0
+
+  '@algolia/client-common@5.19.0': {}
 
   '@algolia/client-common@5.20.2': {}
 
-  '@algolia/client-insights@5.20.2':
+  '@algolia/client-insights@5.19.0':
     dependencies:
-      '@algolia/client-common': 5.20.2
-      '@algolia/requester-browser-xhr': 5.20.2
-      '@algolia/requester-fetch': 5.20.2
-      '@algolia/requester-node-http': 5.20.2
+      '@algolia/client-common': 5.19.0
+      '@algolia/requester-browser-xhr': 5.19.0
+      '@algolia/requester-fetch': 5.19.0
+      '@algolia/requester-node-http': 5.19.0
 
-  '@algolia/client-personalization@5.20.2':
+  '@algolia/client-personalization@5.19.0':
     dependencies:
-      '@algolia/client-common': 5.20.2
-      '@algolia/requester-browser-xhr': 5.20.2
-      '@algolia/requester-fetch': 5.20.2
-      '@algolia/requester-node-http': 5.20.2
+      '@algolia/client-common': 5.19.0
+      '@algolia/requester-browser-xhr': 5.19.0
+      '@algolia/requester-fetch': 5.19.0
+      '@algolia/requester-node-http': 5.19.0
 
-  '@algolia/client-query-suggestions@5.20.2':
+  '@algolia/client-query-suggestions@5.19.0':
     dependencies:
-      '@algolia/client-common': 5.20.2
-      '@algolia/requester-browser-xhr': 5.20.2
-      '@algolia/requester-fetch': 5.20.2
-      '@algolia/requester-node-http': 5.20.2
+      '@algolia/client-common': 5.19.0
+      '@algolia/requester-browser-xhr': 5.19.0
+      '@algolia/requester-fetch': 5.19.0
+      '@algolia/requester-node-http': 5.19.0
+
+  '@algolia/client-search@5.19.0':
+    dependencies:
+      '@algolia/client-common': 5.19.0
+      '@algolia/requester-browser-xhr': 5.19.0
+      '@algolia/requester-fetch': 5.19.0
+      '@algolia/requester-node-http': 5.19.0
 
   '@algolia/client-search@5.20.2':
     dependencies:
@@ -5602,42 +5591,54 @@ snapshots:
       '@algolia/requester-fetch': 5.20.2
       '@algolia/requester-node-http': 5.20.2
 
-  '@algolia/ingestion@1.20.2':
+  '@algolia/ingestion@1.19.0':
     dependencies:
-      '@algolia/client-common': 5.20.2
-      '@algolia/requester-browser-xhr': 5.20.2
-      '@algolia/requester-fetch': 5.20.2
-      '@algolia/requester-node-http': 5.20.2
+      '@algolia/client-common': 5.19.0
+      '@algolia/requester-browser-xhr': 5.19.0
+      '@algolia/requester-fetch': 5.19.0
+      '@algolia/requester-node-http': 5.19.0
 
-  '@algolia/monitoring@1.20.2':
+  '@algolia/monitoring@1.19.0':
     dependencies:
-      '@algolia/client-common': 5.20.2
-      '@algolia/requester-browser-xhr': 5.20.2
-      '@algolia/requester-fetch': 5.20.2
-      '@algolia/requester-node-http': 5.20.2
+      '@algolia/client-common': 5.19.0
+      '@algolia/requester-browser-xhr': 5.19.0
+      '@algolia/requester-fetch': 5.19.0
+      '@algolia/requester-node-http': 5.19.0
 
-  '@algolia/recommend@5.20.2':
+  '@algolia/recommend@5.19.0':
     dependencies:
-      '@algolia/client-common': 5.20.2
-      '@algolia/requester-browser-xhr': 5.20.2
-      '@algolia/requester-fetch': 5.20.2
-      '@algolia/requester-node-http': 5.20.2
+      '@algolia/client-common': 5.19.0
+      '@algolia/requester-browser-xhr': 5.19.0
+      '@algolia/requester-fetch': 5.19.0
+      '@algolia/requester-node-http': 5.19.0
+
+  '@algolia/requester-browser-xhr@5.19.0':
+    dependencies:
+      '@algolia/client-common': 5.19.0
 
   '@algolia/requester-browser-xhr@5.20.2':
     dependencies:
       '@algolia/client-common': 5.20.2
 
+  '@algolia/requester-fetch@5.19.0':
+    dependencies:
+      '@algolia/client-common': 5.19.0
+
   '@algolia/requester-fetch@5.20.2':
     dependencies:
       '@algolia/client-common': 5.20.2
 
+  '@algolia/requester-node-http@5.19.0':
+    dependencies:
+      '@algolia/client-common': 5.19.0
+
   '@algolia/requester-node-http@5.20.2':
     dependencies:
       '@algolia/client-common': 5.20.2
 
   '@ampproject/remapping@2.3.0':
     dependencies:
-      '@jridgewell/gen-mapping': 0.3.8
+      '@jridgewell/gen-mapping': 0.3.5
       '@jridgewell/trace-mapping': 0.3.25
 
   '@antfu/eslint-config@4.2.1(@typescript-eslint/utils@8.24.0(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3))(@vue/compiler-sfc@3.5.13)(eslint-plugin-format@1.0.1(eslint@9.20.1(jiti@2.4.2)))(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3)(vitest@3.0.5(@types/debug@4.1.12)(@types/node@22.13.4)(jiti@2.4.2)(terser@5.39.0)(tsx@4.19.2)(yaml@2.7.0))':
@@ -5697,7 +5698,7 @@ snapshots:
 
   '@antfu/utils@8.1.1': {}
 
-  '@antfu/utils@9.0.0': {}
+  '@antfu/utils@9.1.0': {}
 
   '@babel/code-frame@7.26.2':
     dependencies:
@@ -5731,9 +5732,9 @@ snapshots:
     dependencies:
       '@babel/parser': 7.26.9
       '@babel/types': 7.26.9
-      '@jridgewell/gen-mapping': 0.3.8
+      '@jridgewell/gen-mapping': 0.3.5
       '@jridgewell/trace-mapping': 0.3.25
-      jsesc: 3.1.0
+      jsesc: 3.0.2
 
   '@babel/helper-compilation-targets@7.26.5':
     dependencies:
@@ -5774,7 +5775,7 @@ snapshots:
     dependencies:
       '@babel/types': 7.26.9
 
-  '@babel/standalone@7.26.9': {}
+  '@babel/standalone@7.26.4': {}
 
   '@babel/template@7.26.9':
     dependencies:
@@ -5804,7 +5805,7 @@ snapshots:
   '@braintree/sanitize-url@6.0.4':
     optional: true
 
-  '@braintree/sanitize-url@7.1.1': {}
+  '@braintree/sanitize-url@7.1.0': {}
 
   '@chevrotain/cst-dts-gen@11.0.3':
     dependencies:
@@ -5857,12 +5858,12 @@ snapshots:
     dependencies:
       '@jridgewell/trace-mapping': 0.3.9
 
-  '@docsearch/css@3.8.2': {}
+  '@docsearch/css@3.8.3': {}
 
-  '@docsearch/js@3.8.2(@algolia/client-search@5.20.2)(search-insights@2.17.3)':
+  '@docsearch/js@3.8.3(@algolia/client-search@5.20.2)(search-insights@2.17.3)':
     dependencies:
-      '@docsearch/react': 3.8.2(@algolia/client-search@5.20.2)(search-insights@2.17.3)
-      preact: 10.26.0
+      '@docsearch/react': 3.8.3(@algolia/client-search@5.20.2)(search-insights@2.17.3)
+      preact: 10.25.4
     transitivePeerDependencies:
       - '@algolia/client-search'
       - '@types/react'
@@ -5870,12 +5871,12 @@ snapshots:
       - react-dom
       - search-insights
 
-  '@docsearch/react@3.8.2(@algolia/client-search@5.20.2)(search-insights@2.17.3)':
+  '@docsearch/react@3.8.3(@algolia/client-search@5.20.2)(search-insights@2.17.3)':
     dependencies:
-      '@algolia/autocomplete-core': 1.17.7(@algolia/client-search@5.20.2)(algoliasearch@5.20.2)(search-insights@2.17.3)
-      '@algolia/autocomplete-preset-algolia': 1.17.7(@algolia/client-search@5.20.2)(algoliasearch@5.20.2)
-      '@docsearch/css': 3.8.2
-      algoliasearch: 5.20.2
+      '@algolia/autocomplete-core': 1.17.9(@algolia/client-search@5.20.2)(algoliasearch@5.19.0)(search-insights@2.17.3)
+      '@algolia/autocomplete-preset-algolia': 1.17.9(@algolia/client-search@5.20.2)(algoliasearch@5.19.0)
+      '@docsearch/css': 3.8.3
+      algoliasearch: 5.19.0
     optionalDependencies:
       search-insights: 2.17.3
     transitivePeerDependencies:
@@ -6143,13 +6144,13 @@ snapshots:
 
   '@eslint-community/regexpp@4.12.1': {}
 
-  '@eslint/compat@1.2.6(eslint@9.20.1(jiti@2.4.2))':
+  '@eslint/compat@1.2.5(eslint@9.20.1(jiti@2.4.2))':
     optionalDependencies:
       eslint: 9.20.1(jiti@2.4.2)
 
-  '@eslint/config-array@0.19.2':
+  '@eslint/config-array@0.19.1':
     dependencies:
-      '@eslint/object-schema': 2.1.6
+      '@eslint/object-schema': 2.1.5
       debug: 4.4.0
       minimatch: 3.1.2
     transitivePeerDependencies:
@@ -6170,7 +6171,7 @@ snapshots:
       espree: 10.3.0
       globals: 14.0.0
       ignore: 5.3.2
-      import-fresh: 3.3.1
+      import-fresh: 3.3.0
       js-yaml: 4.1.0
       minimatch: 3.1.2
       strip-json-comments: 3.1.1
@@ -6189,7 +6190,7 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
-  '@eslint/object-schema@2.1.6': {}
+  '@eslint/object-schema@2.1.5': {}
 
   '@eslint/plugin-kit@0.2.5':
     dependencies:
@@ -6198,15 +6199,15 @@ snapshots:
 
   '@fastify/busboy@2.1.1': {}
 
-  '@floating-ui/core@1.6.9':
+  '@floating-ui/core@1.6.8':
     dependencies:
-      '@floating-ui/utils': 0.2.9
+      '@floating-ui/utils': 0.2.8
 
   '@floating-ui/dom@1.1.1':
     dependencies:
-      '@floating-ui/core': 1.6.9
+      '@floating-ui/core': 1.6.8
 
-  '@floating-ui/utils@0.2.9': {}
+  '@floating-ui/utils@0.2.8': {}
 
   '@humanfs/core@0.19.1': {}
 
@@ -6350,7 +6351,7 @@ snapshots:
 
   '@istanbuljs/schema@0.1.3': {}
 
-  '@jridgewell/gen-mapping@0.3.8':
+  '@jridgewell/gen-mapping@0.3.5':
     dependencies:
       '@jridgewell/set-array': 1.2.1
       '@jridgewell/sourcemap-codec': 1.5.0
@@ -6362,7 +6363,7 @@ snapshots:
 
   '@jridgewell/source-map@0.3.6':
     dependencies:
-      '@jridgewell/gen-mapping': 0.3.8
+      '@jridgewell/gen-mapping': 0.3.5
       '@jridgewell/trace-mapping': 0.3.25
 
   '@jridgewell/sourcemap-codec@1.5.0': {}
@@ -6380,9 +6381,9 @@ snapshots:
   '@mermaid-js/mermaid-mindmap@9.3.0':
     dependencies:
       '@braintree/sanitize-url': 6.0.4
-      cytoscape: 3.31.0
-      cytoscape-cose-bilkent: 4.1.0(cytoscape@3.31.0)
-      cytoscape-fcose: 2.2.0(cytoscape@3.31.0)
+      cytoscape: 3.30.4
+      cytoscape-cose-bilkent: 4.1.0(cytoscape@3.30.4)
+      cytoscape-fcose: 2.2.0(cytoscape@3.30.4)
       d3: 7.9.0
       khroma: 2.1.0
       non-layered-tidy-tree-layout: 2.0.2
@@ -6402,7 +6403,7 @@ snapshots:
   '@nodelib/fs.walk@1.2.8':
     dependencies:
       '@nodelib/fs.scandir': 2.1.5
-      fastq: 1.19.0
+      fastq: 1.18.0
 
   '@pkgjs/parseargs@0.11.0':
     optional: true
@@ -6411,13 +6412,13 @@ snapshots:
 
   '@polka/url@1.0.0-next.28': {}
 
-  '@rollup/plugin-alias@5.1.1(rollup@4.34.7)':
+  '@rollup/plugin-alias@5.1.1(rollup@4.34.8)':
     optionalDependencies:
-      rollup: 4.34.7
+      rollup: 4.34.8
 
-  '@rollup/plugin-commonjs@28.0.2(rollup@4.34.7)':
+  '@rollup/plugin-commonjs@28.0.2(rollup@4.34.8)':
     dependencies:
-      '@rollup/pluginutils': 5.1.4(rollup@4.34.7)
+      '@rollup/pluginutils': 5.1.4(rollup@4.34.8)
       commondir: 1.0.1
       estree-walker: 2.0.2
       fdir: 6.4.3(picomatch@4.0.2)
@@ -6425,102 +6426,102 @@ snapshots:
       magic-string: 0.30.17
       picomatch: 4.0.2
     optionalDependencies:
-      rollup: 4.34.7
+      rollup: 4.34.8
 
-  '@rollup/plugin-json@6.1.0(rollup@4.34.7)':
+  '@rollup/plugin-json@6.1.0(rollup@4.34.8)':
     dependencies:
-      '@rollup/pluginutils': 5.1.4(rollup@4.34.7)
+      '@rollup/pluginutils': 5.1.4(rollup@4.34.8)
     optionalDependencies:
-      rollup: 4.34.7
+      rollup: 4.34.8
 
-  '@rollup/plugin-node-resolve@16.0.0(rollup@4.34.7)':
+  '@rollup/plugin-node-resolve@16.0.0(rollup@4.34.8)':
     dependencies:
-      '@rollup/pluginutils': 5.1.4(rollup@4.34.7)
+      '@rollup/pluginutils': 5.1.4(rollup@4.34.8)
       '@types/resolve': 1.20.2
       deepmerge: 4.3.1
       is-module: 1.0.0
       resolve: 1.22.10
     optionalDependencies:
-      rollup: 4.34.7
+      rollup: 4.34.8
 
-  '@rollup/plugin-replace@6.0.2(rollup@4.34.7)':
+  '@rollup/plugin-replace@6.0.2(rollup@4.34.8)':
     dependencies:
-      '@rollup/pluginutils': 5.1.4(rollup@4.34.7)
+      '@rollup/pluginutils': 5.1.4(rollup@4.34.8)
       magic-string: 0.30.17
     optionalDependencies:
-      rollup: 4.34.7
+      rollup: 4.34.8
 
-  '@rollup/plugin-terser@0.4.4(rollup@4.34.7)':
+  '@rollup/plugin-terser@0.4.4(rollup@4.34.8)':
     dependencies:
       serialize-javascript: 6.0.2
       smob: 1.5.0
       terser: 5.39.0
     optionalDependencies:
-      rollup: 4.34.7
+      rollup: 4.34.8
 
-  '@rollup/pluginutils@5.1.4(rollup@4.34.7)':
+  '@rollup/pluginutils@5.1.4(rollup@4.34.8)':
     dependencies:
       '@types/estree': 1.0.6
       estree-walker: 2.0.2
       picomatch: 4.0.2
     optionalDependencies:
-      rollup: 4.34.7
+      rollup: 4.34.8
 
-  '@rollup/rollup-android-arm-eabi@4.34.7':
+  '@rollup/rollup-android-arm-eabi@4.34.8':
     optional: true
 
-  '@rollup/rollup-android-arm64@4.34.7':
+  '@rollup/rollup-android-arm64@4.34.8':
     optional: true
 
-  '@rollup/rollup-darwin-arm64@4.34.7':
+  '@rollup/rollup-darwin-arm64@4.34.8':
     optional: true
 
-  '@rollup/rollup-darwin-x64@4.34.7':
+  '@rollup/rollup-darwin-x64@4.34.8':
     optional: true
 
-  '@rollup/rollup-freebsd-arm64@4.34.7':
+  '@rollup/rollup-freebsd-arm64@4.34.8':
     optional: true
 
-  '@rollup/rollup-freebsd-x64@4.34.7':
+  '@rollup/rollup-freebsd-x64@4.34.8':
     optional: true
 
-  '@rollup/rollup-linux-arm-gnueabihf@4.34.7':
+  '@rollup/rollup-linux-arm-gnueabihf@4.34.8':
     optional: true
 
-  '@rollup/rollup-linux-arm-musleabihf@4.34.7':
+  '@rollup/rollup-linux-arm-musleabihf@4.34.8':
     optional: true
 
-  '@rollup/rollup-linux-arm64-gnu@4.34.7':
+  '@rollup/rollup-linux-arm64-gnu@4.34.8':
     optional: true
 
-  '@rollup/rollup-linux-arm64-musl@4.34.7':
+  '@rollup/rollup-linux-arm64-musl@4.34.8':
     optional: true
 
-  '@rollup/rollup-linux-loongarch64-gnu@4.34.7':
+  '@rollup/rollup-linux-loongarch64-gnu@4.34.8':
     optional: true
 
-  '@rollup/rollup-linux-powerpc64le-gnu@4.34.7':
+  '@rollup/rollup-linux-powerpc64le-gnu@4.34.8':
     optional: true
 
-  '@rollup/rollup-linux-riscv64-gnu@4.34.7':
+  '@rollup/rollup-linux-riscv64-gnu@4.34.8':
     optional: true
 
-  '@rollup/rollup-linux-s390x-gnu@4.34.7':
+  '@rollup/rollup-linux-s390x-gnu@4.34.8':
     optional: true
 
-  '@rollup/rollup-linux-x64-gnu@4.34.7':
+  '@rollup/rollup-linux-x64-gnu@4.34.8':
     optional: true
 
-  '@rollup/rollup-linux-x64-musl@4.34.7':
+  '@rollup/rollup-linux-x64-musl@4.34.8':
     optional: true
 
-  '@rollup/rollup-win32-arm64-msvc@4.34.7':
+  '@rollup/rollup-win32-arm64-msvc@4.34.8':
     optional: true
 
-  '@rollup/rollup-win32-ia32-msvc@4.34.7':
+  '@rollup/rollup-win32-ia32-msvc@4.34.8':
     optional: true
 
-  '@rollup/rollup-win32-x64-msvc@4.34.7':
+  '@rollup/rollup-win32-x64-msvc@4.34.8':
     optional: true
 
   '@shikijs/vscode-textmate@10.0.2': {}
@@ -6556,7 +6557,7 @@ snapshots:
   '@types/d3-contour@3.0.6':
     dependencies:
       '@types/d3-array': 3.2.1
-      '@types/geojson': 7946.0.16
+      '@types/geojson': 7946.0.15
 
   '@types/d3-delaunay@6.0.4': {}
 
@@ -6580,7 +6581,7 @@ snapshots:
 
   '@types/d3-geo@3.1.0':
     dependencies:
-      '@types/geojson': 7946.0.16
+      '@types/geojson': 7946.0.15
 
   '@types/d3-hierarchy@3.1.7': {}
 
@@ -6588,7 +6589,7 @@ snapshots:
     dependencies:
       '@types/d3-color': 3.1.3
 
-  '@types/d3-path@3.1.1': {}
+  '@types/d3-path@3.1.0': {}
 
   '@types/d3-polygon@3.0.2': {}
 
@@ -6598,15 +6599,15 @@ snapshots:
 
   '@types/d3-scale-chromatic@3.1.0': {}
 
-  '@types/d3-scale@4.0.9':
+  '@types/d3-scale@4.0.8':
     dependencies:
       '@types/d3-time': 3.0.4
 
   '@types/d3-selection@3.0.11': {}
 
-  '@types/d3-shape@3.1.7':
+  '@types/d3-shape@3.1.6':
     dependencies:
-      '@types/d3-path': 3.1.1
+      '@types/d3-path': 3.1.0
 
   '@types/d3-time-format@4.0.3': {}
 
@@ -6642,14 +6643,14 @@ snapshots:
       '@types/d3-geo': 3.1.0
       '@types/d3-hierarchy': 3.1.7
       '@types/d3-interpolate': 3.0.4
-      '@types/d3-path': 3.1.1
+      '@types/d3-path': 3.1.0
       '@types/d3-polygon': 3.0.2
       '@types/d3-quadtree': 3.0.6
       '@types/d3-random': 3.0.3
-      '@types/d3-scale': 4.0.9
+      '@types/d3-scale': 4.0.8
       '@types/d3-scale-chromatic': 3.1.0
       '@types/d3-selection': 3.0.11
-      '@types/d3-shape': 3.1.7
+      '@types/d3-shape': 3.1.6
       '@types/d3-time': 3.0.4
       '@types/d3-time-format': 4.0.3
       '@types/d3-timer': 3.0.2
@@ -6678,7 +6679,7 @@ snapshots:
     dependencies:
       '@types/node': 22.13.4
 
-  '@types/geojson@7946.0.16': {}
+  '@types/geojson@7946.0.15': {}
 
   '@types/glob@7.2.0':
     dependencies:
@@ -6806,14 +6807,14 @@ snapshots:
       '@typescript-eslint/types': 8.24.0
       eslint-visitor-keys: 4.2.0
 
-  '@typescript/vfs@1.6.1(typescript@5.7.3)':
+  '@typescript/vfs@1.6.0(typescript@5.7.3)':
     dependencies:
       debug: 4.4.0
       typescript: 5.7.3
     transitivePeerDependencies:
       - supports-color
 
-  '@ungap/structured-clone@1.3.0': {}
+  '@ungap/structured-clone@1.2.1': {}
 
   '@unocss/astro@65.5.0(vite@6.1.0(@types/node@22.13.4)(jiti@2.4.2)(terser@5.39.0)(tsx@4.19.2)(yaml@2.7.0))(vue@3.5.13(typescript@5.7.3))':
     dependencies:
@@ -6992,7 +6993,7 @@ snapshots:
     dependencies:
       '@vitest/spy': 3.0.5
       '@vitest/utils': 3.0.5
-      chai: 5.2.0
+      chai: 5.1.2
       tinyrainbow: 2.0.0
 
   '@vitest/mocker@3.0.5(vite@6.1.0(@types/node@22.13.4)(jiti@2.4.2)(terser@5.39.0)(tsx@4.19.2)(yaml@2.7.0))':
@@ -7025,7 +7026,7 @@ snapshots:
   '@vitest/utils@3.0.5':
     dependencies:
       '@vitest/pretty-format': 3.0.5
-      loupe: 3.1.3
+      loupe: 3.1.2
       tinyrainbow: 2.0.0
 
   '@volar/language-core@2.4.11':
@@ -7186,21 +7187,21 @@ snapshots:
       json-schema-traverse: 0.4.1
       uri-js: 4.4.1
 
-  algoliasearch@5.20.2:
-    dependencies:
-      '@algolia/client-abtesting': 5.20.2
-      '@algolia/client-analytics': 5.20.2
-      '@algolia/client-common': 5.20.2
-      '@algolia/client-insights': 5.20.2
-      '@algolia/client-personalization': 5.20.2
-      '@algolia/client-query-suggestions': 5.20.2
-      '@algolia/client-search': 5.20.2
-      '@algolia/ingestion': 1.20.2
-      '@algolia/monitoring': 1.20.2
-      '@algolia/recommend': 5.20.2
-      '@algolia/requester-browser-xhr': 5.20.2
-      '@algolia/requester-fetch': 5.20.2
-      '@algolia/requester-node-http': 5.20.2
+  algoliasearch@5.19.0:
+    dependencies:
+      '@algolia/client-abtesting': 5.19.0
+      '@algolia/client-analytics': 5.19.0
+      '@algolia/client-common': 5.19.0
+      '@algolia/client-insights': 5.19.0
+      '@algolia/client-personalization': 5.19.0
+      '@algolia/client-query-suggestions': 5.19.0
+      '@algolia/client-search': 5.19.0
+      '@algolia/ingestion': 1.19.0
+      '@algolia/monitoring': 1.19.0
+      '@algolia/recommend': 5.19.0
+      '@algolia/requester-browser-xhr': 5.19.0
+      '@algolia/requester-fetch': 5.19.0
+      '@algolia/requester-node-http': 5.19.0
 
   alien-signals@0.2.2: {}
 
@@ -7246,7 +7247,7 @@ snapshots:
   autoprefixer@10.4.20(postcss@8.5.2):
     dependencies:
       browserslist: 4.24.4
-      caniuse-lite: 1.0.30001699
+      caniuse-lite: 1.0.30001690
       fraction.js: 4.3.7
       normalize-range: 0.1.2
       picocolors: 1.1.1
@@ -7280,10 +7281,10 @@ snapshots:
 
   browserslist@4.24.4:
     dependencies:
-      caniuse-lite: 1.0.30001699
-      electron-to-chromium: 1.5.101
+      caniuse-lite: 1.0.30001690
+      electron-to-chromium: 1.5.76
       node-releases: 2.0.19
-      update-browserslist-db: 1.1.2(browserslist@4.24.4)
+      update-browserslist-db: 1.1.1(browserslist@4.24.4)
 
   buffer-from@1.1.2: {}
 
@@ -7292,7 +7293,7 @@ snapshots:
   bumpp@10.0.3(magicast@0.3.5):
     dependencies:
       args-tokenizer: 0.3.0
-      c12: 2.0.2(magicast@0.3.5)
+      c12: 2.0.1(magicast@0.3.5)
       cac: 6.7.14
       escalade: 3.2.0
       js-yaml: 4.1.0
@@ -7310,7 +7311,7 @@ snapshots:
       esbuild: 0.24.2
       load-tsconfig: 0.2.5
 
-  c12@2.0.2(magicast@0.3.5):
+  c12@2.0.1(magicast@0.3.5):
     dependencies:
       chokidar: 4.0.3
       confbox: 0.1.8
@@ -7320,7 +7321,7 @@ snapshots:
       jiti: 2.4.2
       mlly: 1.7.4
       ohash: 1.1.4
-      pathe: 2.0.3
+      pathe: 1.1.2
       perfect-debounce: 1.0.0
       pkg-types: 1.3.1
       rc9: 2.1.2
@@ -7334,20 +7335,20 @@ snapshots:
   caniuse-api@3.0.0:
     dependencies:
       browserslist: 4.24.4
-      caniuse-lite: 1.0.30001699
+      caniuse-lite: 1.0.30001690
       lodash.memoize: 4.1.2
       lodash.uniq: 4.5.0
 
-  caniuse-lite@1.0.30001699: {}
+  caniuse-lite@1.0.30001690: {}
 
   ccount@2.0.1: {}
 
-  chai@5.2.0:
+  chai@5.1.2:
     dependencies:
       assertion-error: 2.0.1
       check-error: 2.1.1
       deep-eql: 5.0.2
-      loupe: 3.1.3
+      loupe: 3.1.2
       pathval: 2.0.0
 
   chalk@4.1.2:
@@ -7393,7 +7394,7 @@ snapshots:
 
   chokidar@4.0.3:
     dependencies:
-      readdirp: 4.1.2
+      readdirp: 4.1.1
 
   chownr@2.0.0: {}
 
@@ -7501,7 +7502,7 @@ snapshots:
       boolbase: 1.0.0
       css-what: 6.1.0
       domhandler: 5.0.3
-      domutils: 3.2.2
+      domutils: 3.2.1
       nth-check: 2.1.1
 
   css-tree@2.2.1:
@@ -7529,7 +7530,7 @@ snapshots:
       css-declaration-sorter: 7.2.0(postcss@8.5.2)
       cssnano-utils: 5.0.0(postcss@8.5.2)
       postcss: 8.5.2
-      postcss-calc: 10.1.1(postcss@8.5.2)
+      postcss-calc: 10.0.2(postcss@8.5.2)
       postcss-colormin: 7.0.2(postcss@8.5.2)
       postcss-convert-values: 7.0.4(postcss@8.5.2)
       postcss-discard-comments: 7.0.3(postcss@8.5.2)
@@ -7573,17 +7574,17 @@ snapshots:
 
   csstype@3.1.3: {}
 
-  cytoscape-cose-bilkent@4.1.0(cytoscape@3.31.0):
+  cytoscape-cose-bilkent@4.1.0(cytoscape@3.30.4):
     dependencies:
       cose-base: 1.0.3
-      cytoscape: 3.31.0
+      cytoscape: 3.30.4
 
-  cytoscape-fcose@2.2.0(cytoscape@3.31.0):
+  cytoscape-fcose@2.2.0(cytoscape@3.30.4):
     dependencies:
       cose-base: 2.2.0
-      cytoscape: 3.31.0
+      cytoscape: 3.30.4
 
-  cytoscape@3.31.0: {}
+  cytoscape@3.30.4: {}
 
   d3-array@2.12.1:
     dependencies:
@@ -7820,11 +7821,11 @@ snapshots:
     dependencies:
       domelementtype: 2.3.0
 
-  dompurify@3.2.4:
+  dompurify@3.2.2:
     optionalDependencies:
       '@types/trusted-types': 2.0.7
 
-  domutils@3.2.2:
+  domutils@3.2.1:
     dependencies:
       dom-serializer: 2.0.0
       domelementtype: 2.3.0
@@ -7836,7 +7837,7 @@ snapshots:
 
   eastasianwidth@0.2.0: {}
 
-  electron-to-chromium@1.5.101: {}
+  electron-to-chromium@1.5.76: {}
 
   emoji-regex-xs@1.0.0: {}
 
@@ -7846,7 +7847,7 @@ snapshots:
 
   emoji-regex@9.2.2: {}
 
-  enhanced-resolve@5.18.1:
+  enhanced-resolve@5.17.1:
     dependencies:
       graceful-fs: 4.2.11
       tapable: 2.2.1
@@ -7961,7 +7962,7 @@ snapshots:
 
   eslint-config-flat-gitignore@2.0.0(eslint@9.20.1(jiti@2.4.2)):
     dependencies:
-      '@eslint/compat': 1.2.6(eslint@9.20.1(jiti@2.4.2))
+      '@eslint/compat': 1.2.5(eslint@9.20.1(jiti@2.4.2))
       eslint: 9.20.1(jiti@2.4.2)
 
   eslint-flat-config-utils@2.0.1:
@@ -8027,7 +8028,7 @@ snapshots:
       '@typescript-eslint/utils': 8.24.0(eslint@9.20.1(jiti@2.4.2))(typescript@5.7.3)
       debug: 4.4.0
       doctrine: 3.0.0
-      enhanced-resolve: 5.18.1
+      enhanced-resolve: 5.17.1
       eslint: 9.20.1(jiti@2.4.2)
       eslint-import-resolver-node: 0.3.9
       get-tsconfig: 4.10.0
@@ -8074,7 +8075,7 @@ snapshots:
   eslint-plugin-n@17.15.1(eslint@9.20.1(jiti@2.4.2)):
     dependencies:
       '@eslint-community/eslint-utils': 4.4.1(eslint@9.20.1(jiti@2.4.2))
-      enhanced-resolve: 5.18.1
+      enhanced-resolve: 5.17.1
       eslint: 9.20.1(jiti@2.4.2)
       eslint-plugin-es-x: 7.8.0(eslint@9.20.1(jiti@2.4.2))
       get-tsconfig: 4.10.0
@@ -8128,7 +8129,7 @@ snapshots:
       globals: 15.15.0
       indent-string: 4.0.0
       is-builtin-module: 3.2.1
-      jsesc: 3.1.0
+      jsesc: 3.0.2
       pluralize: 8.0.0
       read-pkg-up: 7.0.1
       regexp-tree: 0.1.27
@@ -8190,7 +8191,7 @@ snapshots:
     dependencies:
       '@eslint-community/eslint-utils': 4.4.1(eslint@9.20.1(jiti@2.4.2))
       '@eslint-community/regexpp': 4.12.1
-      '@eslint/config-array': 0.19.2
+      '@eslint/config-array': 0.19.1
       '@eslint/core': 0.11.0
       '@eslint/eslintrc': 3.2.0
       '@eslint/js': 9.20.0
@@ -8299,7 +8300,7 @@ snapshots:
 
   fast-levenshtein@2.0.6: {}
 
-  fastq@1.19.0:
+  fastq@1.18.0:
     dependencies:
       reusify: 1.0.4
 
@@ -8424,7 +8425,7 @@ snapshots:
   glob@11.0.1:
     dependencies:
       foreground-child: 3.3.0
-      jackspeak: 4.0.3
+      jackspeak: 4.0.2
       minimatch: 10.0.1
       minipass: 7.1.2
       package-json-from-dist: 1.0.1
@@ -8506,7 +8507,7 @@ snapshots:
     dependencies:
       '@types/hast': 3.0.4
       '@types/unist': 3.0.3
-      '@ungap/structured-clone': 1.3.0
+      '@ungap/structured-clone': 1.2.1
       hast-util-from-parse5: 8.0.2
       hast-util-to-parse5: 8.0.0
       html-void-elements: 3.0.0
@@ -8576,7 +8577,7 @@ snapshots:
 
   ignore@5.3.2: {}
 
-  import-fresh@3.3.1:
+  import-fresh@3.3.0:
     dependencies:
       parent-module: 1.0.1
       resolve-from: 4.0.0
@@ -8683,7 +8684,7 @@ snapshots:
     optionalDependencies:
       '@pkgjs/parseargs': 0.11.0
 
-  jackspeak@4.0.3:
+  jackspeak@4.0.2:
     dependencies:
       '@isaacs/cliui': 8.0.2
 
@@ -8701,7 +8702,7 @@ snapshots:
 
   jsesc@0.5.0: {}
 
-  jsesc@3.1.0: {}
+  jsesc@3.0.2: {}
 
   json-buffer@3.0.1: {}
 
@@ -8832,7 +8833,7 @@ snapshots:
 
   longest-streak@3.1.0: {}
 
-  loupe@3.1.3: {}
+  loupe@3.1.2: {}
 
   lru-cache@10.4.3: {}
 
@@ -8880,7 +8881,7 @@ snapshots:
 
   marked@13.0.3: {}
 
-  mdast-util-find-and-replace@3.0.2:
+  mdast-util-find-and-replace@3.0.1:
     dependencies:
       '@types/mdast': 4.0.4
       escape-string-regexp: 5.0.0
@@ -8909,10 +8910,10 @@ snapshots:
       '@types/mdast': 4.0.4
       ccount: 2.0.1
       devlop: 1.1.0
-      mdast-util-find-and-replace: 3.0.2
+      mdast-util-find-and-replace: 3.0.1
       micromark-util-character: 2.1.1
 
-  mdast-util-gfm-footnote@2.1.0:
+  mdast-util-gfm-footnote@2.0.0:
     dependencies:
       '@types/mdast': 4.0.4
       devlop: 1.1.0
@@ -8953,7 +8954,7 @@ snapshots:
     dependencies:
       mdast-util-from-markdown: 2.0.2
       mdast-util-gfm-autolink-literal: 2.0.1
-      mdast-util-gfm-footnote: 2.1.0
+      mdast-util-gfm-footnote: 2.0.0
       mdast-util-gfm-strikethrough: 2.0.0
       mdast-util-gfm-table: 2.0.0
       mdast-util-gfm-task-list-item: 2.0.0
@@ -8970,7 +8971,7 @@ snapshots:
     dependencies:
       '@types/hast': 3.0.4
       '@types/mdast': 4.0.4
-      '@ungap/structured-clone': 1.3.0
+      '@ungap/structured-clone': 1.2.1
       devlop: 1.1.0
       micromark-util-sanitize-uri: 2.0.1
       trim-lines: 3.0.1
@@ -9008,24 +9009,24 @@ snapshots:
 
   mermaid@11.4.1:
     dependencies:
-      '@braintree/sanitize-url': 7.1.1
+      '@braintree/sanitize-url': 7.1.0
       '@iconify/utils': 2.3.0
       '@mermaid-js/parser': 0.3.0
       '@types/d3': 7.4.3
-      cytoscape: 3.31.0
-      cytoscape-cose-bilkent: 4.1.0(cytoscape@3.31.0)
-      cytoscape-fcose: 2.2.0(cytoscape@3.31.0)
+      cytoscape: 3.30.4
+      cytoscape-cose-bilkent: 4.1.0(cytoscape@3.30.4)
+      cytoscape-fcose: 2.2.0(cytoscape@3.30.4)
       d3: 7.9.0
       d3-sankey: 0.12.3
       dagre-d3-es: 7.0.11
       dayjs: 1.11.13
-      dompurify: 3.2.4
+      dompurify: 3.2.2
       katex: 0.16.21
       khroma: 2.1.0
       lodash-es: 4.17.21
       marked: 13.0.3
       roughjs: 4.6.6
-      stylis: 4.3.6
+      stylis: 4.3.4
       ts-dedent: 2.2.0
       uuid: 9.0.1
     transitivePeerDependencies:
@@ -9046,7 +9047,7 @@ snapshots:
       micromark-util-html-tag-name: 2.0.1
       micromark-util-normalize-identifier: 2.0.1
       micromark-util-resolve-all: 2.0.1
-      micromark-util-subtokenize: 2.0.4
+      micromark-util-subtokenize: 2.0.3
       micromark-util-symbol: 2.0.1
       micromark-util-types: 2.0.1
 
@@ -9077,7 +9078,7 @@ snapshots:
       micromark-util-symbol: 2.0.1
       micromark-util-types: 2.0.1
 
-  micromark-extension-gfm-table@2.1.1:
+  micromark-extension-gfm-table@2.1.0:
     dependencies:
       devlop: 1.1.0
       micromark-factory-space: 2.0.1
@@ -9102,7 +9103,7 @@ snapshots:
       micromark-extension-gfm-autolink-literal: 2.1.0
       micromark-extension-gfm-footnote: 2.1.0
       micromark-extension-gfm-strikethrough: 2.1.0
-      micromark-extension-gfm-table: 2.1.1
+      micromark-extension-gfm-table: 2.1.0
       micromark-extension-gfm-tagfilter: 2.0.0
       micromark-extension-gfm-task-list-item: 2.1.0
       micromark-util-combine-extensions: 2.0.1
@@ -9189,7 +9190,7 @@ snapshots:
       micromark-util-encode: 2.0.1
       micromark-util-symbol: 2.0.1
 
-  micromark-util-subtokenize@2.0.4:
+  micromark-util-subtokenize@2.0.3:
     dependencies:
       devlop: 1.1.0
       micromark-util-chunked: 2.0.1
@@ -9216,7 +9217,7 @@ snapshots:
       micromark-util-normalize-identifier: 2.0.1
       micromark-util-resolve-all: 2.0.1
       micromark-util-sanitize-uri: 2.0.1
-      micromark-util-subtokenize: 2.0.4
+      micromark-util-subtokenize: 2.0.3
       micromark-util-symbol: 2.0.1
       micromark-util-types: 2.0.1
     transitivePeerDependencies:
@@ -9243,7 +9244,7 @@ snapshots:
       exit-hook: 2.2.1
       glob-to-regexp: 0.4.1
       stoppable: 1.1.0
-      undici: 5.28.5
+      undici: 5.28.4
       workerd: 1.20250204.0
       ws: 8.18.0
       youch: 3.2.3
@@ -9501,7 +9502,7 @@ snapshots:
 
   pluralize@8.0.0: {}
 
-  pnpm@10.4.0: {}
+  pnpm@10.4.1: {}
 
   points-on-curve@0.2.0: {}
 
@@ -9510,10 +9511,10 @@ snapshots:
       path-data-parser: 0.1.0
       points-on-curve: 0.2.0
 
-  postcss-calc@10.1.1(postcss@8.5.2):
+  postcss-calc@10.0.2(postcss@8.5.2):
     dependencies:
       postcss: 8.5.2
-      postcss-selector-parser: 7.1.0
+      postcss-selector-parser: 6.1.2
       postcss-value-parser: 4.2.0
 
   postcss-colormin@7.0.2(postcss@8.5.2):
@@ -9589,7 +9590,7 @@ snapshots:
   postcss-nested@7.0.2(postcss@8.5.2):
     dependencies:
       postcss: 8.5.2
-      postcss-selector-parser: 7.1.0
+      postcss-selector-parser: 7.0.0
 
   postcss-normalize-charset@7.0.0(postcss@8.5.2):
     dependencies:
@@ -9658,7 +9659,7 @@ snapshots:
       cssesc: 3.0.0
       util-deprecate: 1.0.2
 
-  postcss-selector-parser@7.1.0:
+  postcss-selector-parser@7.0.0:
     dependencies:
       cssesc: 3.0.0
       util-deprecate: 1.0.2
@@ -9682,7 +9683,7 @@ snapshots:
       picocolors: 1.1.1
       source-map-js: 1.2.1
 
-  preact@10.26.0: {}
+  preact@10.25.4: {}
 
   prelude-ls@1.2.1: {}
 
@@ -9735,7 +9736,7 @@ snapshots:
     dependencies:
       picomatch: 2.3.1
 
-  readdirp@4.1.2: {}
+  readdirp@4.1.1: {}
 
   refa@0.12.1:
     dependencies:
@@ -9827,21 +9828,21 @@ snapshots:
       globby: 10.0.1
       is-plain-object: 3.0.1
 
-  rollup-plugin-dts@6.1.1(rollup@4.34.7)(typescript@5.7.3):
+  rollup-plugin-dts@6.1.1(rollup@4.34.8)(typescript@5.7.3):
     dependencies:
       magic-string: 0.30.17
-      rollup: 4.34.7
+      rollup: 4.34.8
       typescript: 5.7.3
     optionalDependencies:
       '@babel/code-frame': 7.26.2
 
-  rollup-plugin-esbuild@6.2.0(esbuild@0.17.19)(rollup@4.34.7):
+  rollup-plugin-esbuild@6.2.0(esbuild@0.17.19)(rollup@4.34.8):
     dependencies:
       debug: 4.4.0
       es-module-lexer: 1.6.0
       esbuild: 0.17.19
       get-tsconfig: 4.10.0
-      rollup: 4.34.7
+      rollup: 4.34.8
       unplugin-utils: 0.2.4
     transitivePeerDependencies:
       - supports-color
@@ -9860,29 +9861,29 @@ snapshots:
     dependencies:
       estree-walker: 0.6.1
 
-  rollup@4.34.7:
+  rollup@4.34.8:
     dependencies:
       '@types/estree': 1.0.6
     optionalDependencies:
-      '@rollup/rollup-android-arm-eabi': 4.34.7
-      '@rollup/rollup-android-arm64': 4.34.7
-      '@rollup/rollup-darwin-arm64': 4.34.7
-      '@rollup/rollup-darwin-x64': 4.34.7
-      '@rollup/rollup-freebsd-arm64': 4.34.7
-      '@rollup/rollup-freebsd-x64': 4.34.7
-      '@rollup/rollup-linux-arm-gnueabihf': 4.34.7
-      '@rollup/rollup-linux-arm-musleabihf': 4.34.7
-      '@rollup/rollup-linux-arm64-gnu': 4.34.7
-      '@rollup/rollup-linux-arm64-musl': 4.34.7
-      '@rollup/rollup-linux-loongarch64-gnu': 4.34.7
-      '@rollup/rollup-linux-powerpc64le-gnu': 4.34.7
-      '@rollup/rollup-linux-riscv64-gnu': 4.34.7
-      '@rollup/rollup-linux-s390x-gnu': 4.34.7
-      '@rollup/rollup-linux-x64-gnu': 4.34.7
-      '@rollup/rollup-linux-x64-musl': 4.34.7
-      '@rollup/rollup-win32-arm64-msvc': 4.34.7
-      '@rollup/rollup-win32-ia32-msvc': 4.34.7
-      '@rollup/rollup-win32-x64-msvc': 4.34.7
+      '@rollup/rollup-android-arm-eabi': 4.34.8
+      '@rollup/rollup-android-arm64': 4.34.8
+      '@rollup/rollup-darwin-arm64': 4.34.8
+      '@rollup/rollup-darwin-x64': 4.34.8
+      '@rollup/rollup-freebsd-arm64': 4.34.8
+      '@rollup/rollup-freebsd-x64': 4.34.8
+      '@rollup/rollup-linux-arm-gnueabihf': 4.34.8
+      '@rollup/rollup-linux-arm-musleabihf': 4.34.8
+      '@rollup/rollup-linux-arm64-gnu': 4.34.8
+      '@rollup/rollup-linux-arm64-musl': 4.34.8
+      '@rollup/rollup-linux-loongarch64-gnu': 4.34.8
+      '@rollup/rollup-linux-powerpc64le-gnu': 4.34.8
+      '@rollup/rollup-linux-riscv64-gnu': 4.34.8
+      '@rollup/rollup-linux-s390x-gnu': 4.34.8
+      '@rollup/rollup-linux-x64-gnu': 4.34.8
+      '@rollup/rollup-linux-x64-musl': 4.34.8
+      '@rollup/rollup-win32-arm64-msvc': 4.34.8
+      '@rollup/rollup-win32-ia32-msvc': 4.34.8
+      '@rollup/rollup-win32-x64-msvc': 4.34.8
       fsevents: 2.3.3
 
   roughjs@4.6.6:
@@ -9955,13 +9956,6 @@ snapshots:
 
   shebang-regex@3.0.0: {}
 
-  shiki@0.14.7:
-    dependencies:
-      ansi-sequence-parser: 1.1.3
-      jsonc-parser: 3.3.1
-      vscode-oniguruma: 1.7.0
-      vscode-textmate: 8.0.0
-
   siginfo@2.0.0: {}
 
   signal-exit@4.1.0: {}
@@ -10091,7 +10085,7 @@ snapshots:
       postcss: 8.5.2
       postcss-selector-parser: 6.1.2
 
-  stylis@4.3.6: {}
+  stylis@4.3.4: {}
 
   superjson@2.2.2:
     dependencies:
@@ -10199,7 +10193,7 @@ snapshots:
 
   ts-dedent@2.2.0: {}
 
-  tsconfck@3.1.5(typescript@5.7.3):
+  tsconfck@3.1.4(typescript@5.7.3):
     optionalDependencies:
       typescript: 5.7.3
 
@@ -10225,7 +10219,7 @@ snapshots:
 
   twoslash@0.2.12(typescript@5.7.3):
     dependencies:
-      '@typescript/vfs': 1.6.1(typescript@5.7.3)
+      '@typescript/vfs': 1.6.0(typescript@5.7.3)
       twoslash-protocol: 0.2.12
       typescript: 5.7.3
     transitivePeerDependencies:
@@ -10249,12 +10243,12 @@ snapshots:
 
   unbuild@3.3.1(typescript@5.7.3)(vue-tsc@2.2.2(typescript@5.7.3))(vue@3.5.13(typescript@5.7.3)):
     dependencies:
-      '@rollup/plugin-alias': 5.1.1(rollup@4.34.7)
-      '@rollup/plugin-commonjs': 28.0.2(rollup@4.34.7)
-      '@rollup/plugin-json': 6.1.0(rollup@4.34.7)
-      '@rollup/plugin-node-resolve': 16.0.0(rollup@4.34.7)
-      '@rollup/plugin-replace': 6.0.2(rollup@4.34.7)
-      '@rollup/pluginutils': 5.1.4(rollup@4.34.7)
+      '@rollup/plugin-alias': 5.1.1(rollup@4.34.8)
+      '@rollup/plugin-commonjs': 28.0.2(rollup@4.34.8)
+      '@rollup/plugin-json': 6.1.0(rollup@4.34.8)
+      '@rollup/plugin-node-resolve': 16.0.0(rollup@4.34.8)
+      '@rollup/plugin-replace': 6.0.2(rollup@4.34.8)
+      '@rollup/pluginutils': 5.1.4(rollup@4.34.8)
       citty: 0.1.6
       consola: 3.4.0
       defu: 6.1.4
@@ -10267,8 +10261,8 @@ snapshots:
       pathe: 2.0.3
       pkg-types: 1.3.1
       pretty-bytes: 6.1.1
-      rollup: 4.34.7
-      rollup-plugin-dts: 6.1.1(rollup@4.34.7)(typescript@5.7.3)
+      rollup: 4.34.8
+      rollup-plugin-dts: 6.1.1(rollup@4.34.8)(typescript@5.7.3)
       scule: 1.3.0
       tinyglobby: 0.2.10
       untyped: 1.5.2
@@ -10296,7 +10290,7 @@ snapshots:
 
   undici-types@6.20.0: {}
 
-  undici@5.28.5:
+  undici@5.28.4:
     dependencies:
       '@fastify/busboy': 2.1.1
 
@@ -10400,7 +10394,7 @@ snapshots:
   untyped@1.5.2:
     dependencies:
       '@babel/core': 7.26.9
-      '@babel/standalone': 7.26.9
+      '@babel/standalone': 7.26.4
       '@babel/types': 7.26.9
       citty: 0.1.6
       defu: 6.1.4
@@ -10410,7 +10404,7 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
-  update-browserslist-db@1.1.2(browserslist@4.24.4):
+  update-browserslist-db@1.1.1(browserslist@4.24.4):
     dependencies:
       browserslist: 4.24.4
       escalade: 3.2.0
@@ -10469,7 +10463,7 @@ snapshots:
     dependencies:
       debug: 4.4.0
       globrex: 0.1.2
-      tsconfck: 3.1.5(typescript@5.7.3)
+      tsconfck: 3.1.4(typescript@5.7.3)
     optionalDependencies:
       vite: 6.1.0(@types/node@22.13.4)(jiti@2.4.2)(terser@5.39.0)(tsx@4.19.2)(yaml@2.7.0)
     transitivePeerDependencies:
@@ -10480,7 +10474,7 @@ snapshots:
     dependencies:
       esbuild: 0.24.2
       postcss: 8.5.2
-      rollup: 4.34.7
+      rollup: 4.34.8
     optionalDependencies:
       '@types/node': 22.13.4
       fsevents: 2.3.3
@@ -10489,7 +10483,7 @@ snapshots:
       tsx: 4.19.2
       yaml: 2.7.0
 
-  vitepress-plugin-group-icons@1.3.5:
+  vitepress-plugin-group-icons@1.3.6:
     dependencies:
       '@iconify-json/logos': 1.2.4
       '@iconify-json/vscode-icons': 1.2.14
@@ -10497,17 +10491,17 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
-  vitepress-plugin-mermaid@2.0.17(mermaid@11.4.1)(vitepress@1.6.3(@algolia/client-search@5.20.2)(@types/node@22.13.4)(fuse.js@7.1.0)(jiti@2.4.2)(postcss@8.5.2)(search-insights@2.17.3)(terser@5.39.0)(tsx@4.19.2)(typescript@5.7.3)(yaml@2.7.0)):
+  vitepress-plugin-mermaid@2.0.17(mermaid@11.4.1)(vitepress@2.0.0-alpha.2(@algolia/client-search@5.20.2)(@types/node@22.13.4)(fuse.js@7.1.0)(jiti@2.4.2)(postcss@8.5.2)(search-insights@2.17.3)(terser@5.39.0)(tsx@4.19.2)(typescript@5.7.3)(yaml@2.7.0)):
     dependencies:
       mermaid: 11.4.1
-      vitepress: 1.6.3(@algolia/client-search@5.20.2)(@types/node@22.13.4)(fuse.js@7.1.0)(jiti@2.4.2)(postcss@8.5.2)(search-insights@2.17.3)(terser@5.39.0)(tsx@4.19.2)(typescript@5.7.3)(yaml@2.7.0)
+      vitepress: 2.0.0-alpha.2(@algolia/client-search@5.20.2)(@types/node@22.13.4)(fuse.js@7.1.0)(jiti@2.4.2)(postcss@8.5.2)(search-insights@2.17.3)(terser@5.39.0)(tsx@4.19.2)(typescript@5.7.3)(yaml@2.7.0)
     optionalDependencies:
       '@mermaid-js/mermaid-mindmap': 9.3.0
 
-  vitepress@1.6.3(@algolia/client-search@5.20.2)(@types/node@22.13.4)(fuse.js@7.1.0)(jiti@2.4.2)(postcss@8.5.2)(search-insights@2.17.3)(terser@5.39.0)(tsx@4.19.2)(typescript@5.7.3)(yaml@2.7.0):
+  vitepress@2.0.0-alpha.2(@algolia/client-search@5.20.2)(@types/node@22.13.4)(fuse.js@7.1.0)(jiti@2.4.2)(postcss@8.5.2)(search-insights@2.17.3)(terser@5.39.0)(tsx@4.19.2)(typescript@5.7.3)(yaml@2.7.0):
     dependencies:
-      '@docsearch/css': 3.8.2
-      '@docsearch/js': 3.8.2(@algolia/client-search@5.20.2)(search-insights@2.17.3)
+      '@docsearch/css': 3.8.3
+      '@docsearch/js': 3.8.3(@algolia/client-search@5.20.2)(search-insights@2.17.3)
       '@iconify-json/simple-icons': 1.2.24
       '@shikijs/core': link:packages/core
       '@shikijs/transformers': link:packages/transformers
@@ -10565,7 +10559,7 @@ snapshots:
       '@vitest/snapshot': 3.0.5
       '@vitest/spy': 3.0.5
       '@vitest/utils': 3.0.5
-      chai: 5.2.0
+      chai: 5.1.2
       debug: 4.4.0
       expect-type: 1.1.0
       magic-string: 0.30.17
@@ -10612,8 +10606,6 @@ snapshots:
 
   vscode-oniguruma@1.7.0: {}
 
-  vscode-textmate@8.0.0: {}
-
   vscode-uri@3.0.8: {}
 
   vscode-uri@3.1.0: {}
diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml
index b38522a1..76cc8644 100644
--- a/pnpm-workspace.yaml
+++ b/pnpm-workspace.yaml
@@ -8,7 +8,7 @@ packages:
 catalog:
   '@antfu/eslint-config': ^4.2.1
   '@antfu/ni': ^23.3.1
-  '@antfu/utils': ^9.0.0
+  '@antfu/utils': ^9.1.0
   '@iconify-json/carbon': ^1.2.7
   '@iconify-json/codicon': ^1.2.10
   '@iconify-json/ph': ^1.2.2
@@ -59,18 +59,17 @@ catalog:
   ohash: ^1.1.4
   oniguruma-to-es: ^3.1.0
   pinia: ^3.0.1
-  pnpm: ^10.4.0
+  pnpm: ^10.4.1
   prettier: ^3.5.1
   rehype-raw: ^7.0.0
   rehype-stringify: ^10.0.1
   remark-parse: ^11.0.0
   remark-rehype: ^11.1.1
   rimraf: ^6.0.1
-  rollup: ^4.34.7
+  rollup: ^4.34.8
   rollup-plugin-copy: ^3.5.0
   rollup-plugin-dts: ^6.1.1
   rollup-plugin-esbuild: ^6.2.0
-  shiki-legacy: npm:shiki@^0.14.7
   simple-git-hooks: ^2.11.1
   taze: ^18.5.0
   tm-grammars: ^1.22.14
@@ -85,8 +84,8 @@ catalog:
   unplugin-vue-components: ^28.1.0
   vite: ^6.1.0
   vite-tsconfig-paths: ^5.1.4
-  vitepress: ^1.6.3
-  vitepress-plugin-group-icons: ^1.3.5
+  vitepress: ^2.0.0-alpha.2
+  vitepress-plugin-group-icons: ^1.3.6
   vitepress-plugin-mermaid: ^2.0.17
   vitest: ^3.0.5
   vscode-oniguruma: 1.7.0
diff --git a/taze.config.ts b/taze.config.ts
index 7e7de409..718eecf9 100644
--- a/taze.config.ts
+++ b/taze.config.ts
@@ -6,7 +6,6 @@ export default defineConfig({
     '**/node_modules/**',
   ],
   exclude: [
-    'shiki-legacy',
     // The WASM in v2.0 is not compatible with our loader
     // As there seems to be no much improvement, I guess we could stick with the old version for a while longer
     'vscode-oniguruma',


Test patch:
diff --git a/packages/compat/test/api.test.ts b/packages/compat/test/api.test.ts
deleted file mode 100644
index 272dda1a..00000000
--- a/packages/compat/test/api.test.ts
+++ /dev/null
@@ -1,21 +0,0 @@
-import * as shikiLegacy from 'shiki-legacy'
-import { expect, it } from 'vitest'
-import * as shiki from '../src/index'
-
-it('getBackgroundColor', async () => {
-  const s = await shikiLegacy.getHighlighter({
-    theme: 'nord',
-    langs: ['javascript'],
-  })
-
-  const sj = await shiki.getHighlighter({
-    theme: 'nord',
-    langs: ['javascript'],
-  })
-
-  expect(s.getBackgroundColor('nord')).toMatchInlineSnapshot(`"#2e3440ff"`)
-  expect(sj.getBackgroundColor('nord')).toMatchInlineSnapshot(`"#2e3440ff"`)
-
-  expect(s.getForegroundColor('nord')).toMatchInlineSnapshot(`"#d8dee9ff"`)
-  expect(sj.getForegroundColor('nord')).toMatchInlineSnapshot(`"#d8dee9ff"`)
-})
diff --git a/packages/compat/test/fixtures.test.ts b/packages/compat/test/fixtures.test.ts
deleted file mode 100644
index 9411f8da..00000000
--- a/packages/compat/test/fixtures.test.ts
+++ /dev/null
@@ -1,43 +0,0 @@
-/// <reference types="vite/client" />
-
-import { extname } from 'node:path'
-import process from 'node:process'
-import { describe, expect, it } from 'vitest'
-import getHighlighter from '../src'
-
-describe('fixtures', () => {
-  const files = import.meta.glob<string>('./input/*.*', { query: '?raw', import: 'default', eager: true })
-  const filter = process.env.FILTER
-  Object
-    .entries(files)
-    .forEach(([path, content]) => {
-      const run = !filter || path.includes(filter)
-        ? it
-        : it.skip
-
-      run(`render ${path}`, async () => {
-        const shiki = await getHighlighter({
-          theme: 'nord',
-          langs: ['javascript'],
-        })
-
-        const code = await shiki.codeToHtml(content, {
-          lang: extname(path).slice(1) as any,
-          lineOptions: [
-            { line: 2, classes: ['test'] },
-          ],
-        })
-
-        const code2 = await shiki.codeToHtml(content, extname(path).slice(1), undefined, {
-          lineOptions: [
-            { line: 2, classes: ['test'] },
-          ],
-        })
-
-        await expect(code)
-          .toMatchFileSnapshot(path.replace('input', 'output').replace(/\.\w+$/, '.html'))
-
-        expect(code).toBe(code2)
-      })
-    })
-})
diff --git a/packages/compat/test/input/foo.js b/packages/compat/test/input/foo.js
deleted file mode 100644
index fff2894b..00000000
--- a/packages/compat/test/input/foo.js
+++ /dev/null
@@ -1,3 +0,0 @@
-for (let i = 0; i < 10; i++)
-  // eslint-disable-next-line no-console
-  console.log(i)
diff --git a/packages/compat/test/output/foo.html b/packages/compat/test/output/foo.html
deleted file mode 100644
index 3cc780eb..00000000
--- a/packages/compat/test/output/foo.html
+++ /dev/null
@@ -1,4 +0,0 @@
-<pre class="shiki nord" style="background-color:#2e3440ff;color:#d8dee9ff" tabindex="0"><code><span class="line"><span style="color:#81A1C1">for</span><span style="color:#D8DEE9FF"> (</span><span style="color:#81A1C1">let</span><span style="color:#D8DEE9"> i</span><span style="color:#81A1C1"> =</span><span style="color:#B48EAD"> 0</span><span style="color:#81A1C1">;</span><span style="color:#D8DEE9"> i</span><span style="color:#81A1C1"> &#x3C;</span><span style="color:#B48EAD"> 10</span><span style="color:#81A1C1">;</span><span style="color:#D8DEE9"> i</span><span style="color:#81A1C1">++</span><span style="color:#D8DEE9FF">)</span></span>
-<span class="line test"><span style="color:#616E88">  // eslint-disable-next-line no-console</span></span>
-<span class="line"><span style="color:#D8DEE9">  console</span><span style="color:#ECEFF4">.</span><span style="color:#88C0D0">log</span><span style="color:#D8DEE9FF">(</span><span style="color:#D8DEE9">i</span><span style="color:#D8DEE9FF">)</span></span>
-<span class="line"></span></code></pre>
\ No newline at end of file
diff --git a/packages/compat/test/types.test.ts b/packages/compat/test/types.test.ts
deleted file mode 100644
index 07a6fcd3..00000000
--- a/packages/compat/test/types.test.ts
+++ /dev/null
@@ -1,49 +0,0 @@
-import * as shikiLegacy from 'shiki-legacy'
-import { expect, it } from 'vitest'
-import * as shiki from '../src/index'
-
-it('run', async () => {
-  const s = await shikiLegacy.getHighlighter({
-    theme: 'nord',
-    langs: ['javascript'],
-  })
-
-  const sj = await shiki.getHighlighter({
-    theme: 'nord',
-    langs: ['javascript'],
-  })
-
-  expect(s.getLoadedThemes()).toEqual(sj.getLoadedThemes())
-  // expect(s.getLoadedLanguages()).toEqual(sj.getLoadedLanguages())
-
-  expect(sj.codeToThemedTokens('const a = 1', 'javascript', 'nord', { includeExplanation: false }))
-    .toEqual(s.codeToThemedTokens('const a = 1', 'javascript', 'nord', { includeExplanation: false }))
-
-  s.codeToHtml('const a = 1', 'javascript')
-  sj.codeToHtml('const a = 1', 'javascript')
-  s.codeToHtml('const a = 1', 'javascript', 'nord')
-  sj.codeToHtml('const a = 1', 'javascript', 'nord')
-
-  s.codeToHtml('const a = 1', { lang: 'javascript' })
-  sj.codeToHtml('const a = 1', { lang: 'javascript' })
-
-  s.ansiToHtml('const a = 1', { theme: 'nord' })
-  sj.ansiToHtml('const a = 1', { theme: 'nord' })
-
-  const shikiLegacyKeys = Object.keys(s)
-  const shikiKeys = Object.keys(sj)
-  const keysDiff = shikiLegacyKeys.filter(k => !shikiKeys.includes(k))
-
-  expect.soft(keysDiff).toMatchInlineSnapshot(`[]`)
-
-  const shikiLegacyExports = Object.keys(shikiLegacy)
-  const shikiExports = Object.keys(shiki)
-  const exportsDiff = shikiLegacyExports.filter(k => !shikiExports.includes(k))
-
-  expect.soft(exportsDiff).toMatchInlineSnapshot(`
-    [
-      "FontStyle",
-      "renderToHtml",
-    ]
-  `)
-})
diff --git a/packages/langs-precompiled/tests/precompile-run.test.ts b/packages/langs-precompiled/tests/precompile-run.test.ts
index 7cd21244..99854e12 100644
--- a/packages/langs-precompiled/tests/precompile-run.test.ts
+++ b/packages/langs-precompiled/tests/precompile-run.test.ts
@@ -3,15 +3,13 @@ import { createHighlighterCore } from 'shiki'
 import { expect, it } from 'vitest'
 // eslint-disable-next-line antfu/no-import-dist
 import vitesseDark from '../../themes/dist/vitesse-dark.mjs'
-// eslint-disable-next-line antfu/no-import-dist
-import html from '../dist/html.mjs'
 
 const isNode20andUp = process.version.replace(/^v/, '').split('.').map(Number)[0] >= 20
 
 it.runIf(isNode20andUp)('run', async () => {
   const shiki = await createHighlighterCore({
     themes: [vitesseDark],
-    langs: [html],
+    langs: [import('../dist/html.mjs')],
     engine: createJavaScriptRawEngine(),
   })