Repository: shikijs/shiki
Pull request #874 (2024-12-21 14:48:26)

Use correct method in docs example
Update import in the example docs


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


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


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

Patch:
diff --git a/docs/packages/next.md b/docs/packages/next.md
index 0de6def7..e47776c2 100644
--- a/docs/packages/next.md
+++ b/docs/packages/next.md
@@ -75,7 +75,7 @@ interface Props {
 }
 
 async function CodeBlock(props: Props) {
-  const out = await codeToHtml(props.children, {
+  const out = await codeToHast(props.children, {
     lang: props.lang,
     theme: 'github-dark'
   })
@@ -125,7 +125,7 @@ In your `codeblock.tsx`:
 
 ```tsx
 'use client'
-import { useLayoutEffect, useState } from 'react'
+import { JSX, useLayoutEffect, useState } from 'react'
 import { highlight } from './shared'
 
 export function CodeBlock({ initial }: { initial?: JSX.Element }) {
diff --git a/docs/references/engine-js-compat.md b/docs/references/engine-js-compat.md
index f1b29548..c48372c3 100644
--- a/docs/references/engine-js-compat.md
+++ b/docs/references/engine-js-compat.md
@@ -2,9 +2,9 @@
 
 Compatibility reference of all built-in grammars with the [JavaScript RegExp engine](/guide/regex-engines#javascript-regexp-engine).
 
-> Generated on Thursday, December 19, 2024
+> Generated on Friday, December 27, 2024
 >
-> Version `1.24.2`
+> Version `1.24.4`
 >
 > Runtime: Node.js v22.11.0
 
@@ -13,8 +13,8 @@ Compatibility reference of all built-in grammars with the [JavaScript RegExp eng
 |                 |                       Count |
 | :-------------- | --------------------------: |
 | Total Languages |                         218 |
-| Supported       | [206](#supported-languages) |
-| Mismatched      |  [6](#mismatched-languages) |
+| Supported       | [210](#supported-languages) |
+| Mismatched      |  [2](#mismatched-languages) |
 | Unsupported     | [6](#unsupported-languages) |
 
 ## Supported Languages
@@ -29,6 +29,7 @@ In some edge cases, it's not guaranteed that the highlighting will be 100% the s
 | angular-html       | ✅ OK           |               670 |               - |      |
 | angular-ts         | ✅ OK           |               779 |               - |      |
 | apache             | ✅ OK           |                60 |               - |      |
+| apex               | ✅ OK           |               187 |               - |      |
 | apl                | ✅ OK           |               917 |               - |      |
 | applescript        | ✅ OK           |               152 |               - |      |
 | ara                | ✅ OK           |                54 |               - |      |
@@ -58,6 +59,7 @@ In some edge cases, it's not guaranteed that the highlighting will be 100% the s
 | coffee             | ✅ OK           |               469 |               - |      |
 | common-lisp        | ✅ OK           |                60 |               - |      |
 | coq                | ✅ OK           |                26 |               - |      |
+| cpp                | ✅ OK           |               512 |               - |      |
 | crystal            | ✅ OK           |              1067 |               - |      |
 | css                | ✅ OK           |               141 |               - |      |
 | csv                | ✅ OK           |                 1 |               - |      |
@@ -132,6 +134,7 @@ In some edge cases, it's not guaranteed that the highlighting will be 100% the s
 | lua                | ✅ OK           |               278 |               - |      |
 | luau               | ✅ OK           |                88 |               - |      |
 | make               | ✅ OK           |                51 |               - |      |
+| markdown           | ✅ OK           |               118 |               - |      |
 | marko              | ✅ OK           |               926 |               - |      |
 | matlab             | ✅ OK           |                88 |               - |      |
 | mdc                | ✅ OK           |               783 |               - |      |
@@ -152,6 +155,7 @@ In some edge cases, it's not guaranteed that the highlighting will be 100% the s
 | perl               | ✅ OK           |               941 |               - |      |
 | php                | ✅ OK           |              1131 |               - |      |
 | plsql              | ✅ OK           |                45 |               - |      |
+| po                 | ✅ OK           |                23 |               - |      |
 | postcss            | ✅ OK           |                49 |               - |      |
 | powerquery         | ✅ OK           |                30 |               - |      |
 | powershell         | ✅ OK           |                88 |               - |      |
@@ -216,8 +220,8 @@ In some edge cases, it's not guaranteed that the highlighting will be 100% the s
 | verilog            | ✅ OK           |                33 |               - |      |
 | vhdl               | ✅ OK           |                82 |               - |      |
 | viml               | ✅ OK           |                72 |               - |      |
-| vue                | ✅ OK           |               692 |               - |      |
-| vue-html           | ✅ OK           |               716 |               - |      |
+| vue                | ✅ OK           |               694 |               - |      |
+| vue-html           | ✅ OK           |               718 |               - |      |
 | vyper              | ✅ OK           |               238 |               - |      |
 | wasm               | ✅ OK           |                78 |               - |      |
 | wenyan             | ✅ OK           |                18 |               - |      |
@@ -242,14 +246,10 @@ In some edge cases, it's not guaranteed that the highlighting will be 100% the s
 
 Languages that do not throw with the JavaScript RegExp engine, but will produce different results than the WASM engine. Please use with caution.
 
-| Language | Highlight Match                                                               | Patterns Parsable | Patterns Failed | Diff |
-| -------- | :---------------------------------------------------------------------------- | ----------------: | --------------: | ---: |
-| apex     | [🚧 Mismatch](https://textmate-grammars-themes.netlify.app/?grammar=apex)     |               187 |               - |   33 |
-| cpp      | [🚧 Mismatch](https://textmate-grammars-themes.netlify.app/?grammar=cpp)      |               512 |               - |    8 |
-| kusto    | [🚧 Mismatch](https://textmate-grammars-themes.netlify.app/?grammar=kusto)    |                60 |               - |   40 |
-| markdown | [🚧 Mismatch](https://textmate-grammars-themes.netlify.app/?grammar=markdown) |               118 |               - |  100 |
-| nginx    | [🚧 Mismatch](https://textmate-grammars-themes.netlify.app/?grammar=nginx)    |               378 |               - |  122 |
-| po       | [🚧 Mismatch](https://textmate-grammars-themes.netlify.app/?grammar=po)       |                23 |               - |  114 |
+| Language | Highlight Match                                                            | Patterns Parsable | Patterns Failed | Diff |
+| -------- | :------------------------------------------------------------------------- | ----------------: | --------------: | ---: |
+| kusto    | [🚧 Mismatch](https://textmate-grammars-themes.netlify.app/?grammar=kusto) |                60 |               - |   40 |
+| nginx    | [🚧 Mismatch](https://textmate-grammars-themes.netlify.app/?grammar=nginx) |               378 |               - |  122 |
 
 ## Unsupported Languages
 
@@ -260,6 +260,6 @@ Languages that throw with the JavaScript RegExp engine, either because they cont
 | ada        | ✅ OK           |               201 |               1 |      |
 | hack       | ❌ Error        |               947 |               1 |  114 |
 | purescript | ❌ Error        |                72 |               1 |      |
-| csharp     | ❌ Error        |               306 |               3 |  148 |
+| csharp     | ❌ Error        |               306 |               3 |  137 |
 | swift      | ❌ Error        |               326 |               3 |    8 |
-| razor      | ❌ Error        |               952 |               5 |   14 |
+| razor      | ❌ Error        |               952 |               5 |      |
diff --git a/package.json b/package.json
index d72a8e0b..e0a09382 100644
--- a/package.json
+++ b/package.json
@@ -1,8 +1,8 @@
 {
   "type": "module",
-  "version": "1.24.3",
+  "version": "1.24.4",
   "private": true,
-  "packageManager": "pnpm@9.15.0",
+  "packageManager": "pnpm@9.15.1",
   "scripts": {
     "lint": "eslint . --cache",
     "release": "bumpp",
diff --git a/packages/cli/package.json b/packages/cli/package.json
index 6d86867c..860740ef 100644
--- a/packages/cli/package.json
+++ b/packages/cli/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@shikijs/cli",
   "type": "module",
-  "version": "1.24.3",
+  "version": "1.24.4",
   "description": "Shiki in the command line",
   "author": "Anthony Fu <anthonyfu117@hotmail.com>",
   "license": "MIT",
diff --git a/packages/colorized-brackets/package.json b/packages/colorized-brackets/package.json
index 43afec2d..47818275 100644
--- a/packages/colorized-brackets/package.json
+++ b/packages/colorized-brackets/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@shikijs/colorized-brackets",
   "type": "module",
-  "version": "1.24.3",
+  "version": "1.24.4",
   "description": "Collective of common transformers transformers for Shiki",
   "author": "Michael Moore <mscottmoore@pm.me>",
   "license": "MIT",
diff --git a/packages/compat/package.json b/packages/compat/package.json
index da5283cb..cbbb9e80 100644
--- a/packages/compat/package.json
+++ b/packages/compat/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@shikijs/compat",
   "type": "module",
-  "version": "1.24.3",
+  "version": "1.24.4",
   "description": "Shiki v0.x compatible API",
   "author": "Anthony Fu <anthonyfu117@hotmail.com>",
   "license": "MIT",
diff --git a/packages/core/package.json b/packages/core/package.json
index e90e9fe1..eb162bb5 100644
--- a/packages/core/package.json
+++ b/packages/core/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@shikijs/core",
   "type": "module",
-  "version": "1.24.3",
+  "version": "1.24.4",
   "description": "Core of Shiki",
   "author": "Pine Wu <octref@gmail.com>; Anthony Fu <anthonyfu117@hotmail.com>",
   "license": "MIT",
diff --git a/packages/engine-javascript/package.json b/packages/engine-javascript/package.json
index 4901af69..5ccb2878 100644
--- a/packages/engine-javascript/package.json
+++ b/packages/engine-javascript/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@shikijs/engine-javascript",
   "type": "module",
-  "version": "1.24.3",
+  "version": "1.24.4",
   "description": "Engine for Shiki using JavaScript's native RegExp",
   "author": "Anthony Fu <anthonyfu117@hotmail.com>",
   "license": "MIT",
diff --git a/packages/engine-javascript/src/index.ts b/packages/engine-javascript/src/index.ts
index 4a3d6429..a837bf4b 100644
--- a/packages/engine-javascript/src/index.ts
+++ b/packages/engine-javascript/src/index.ts
@@ -59,13 +59,13 @@ export function defaultJavaScriptRegexConstructor(pattern: string, options?: Oni
       rules: {
         // Needed since TextMate grammars merge backrefs across patterns
         allowOrphanBackrefs: true,
-        // Removing `\G` anchors in cases when they're not supported for emulation allows
-        // supporting more grammars, but also allows some mismatches
-        allowUnhandledGAnchors: true,
         // Improves search performance for generated regexes
         asciiWordBoundaries: true,
         // Follow `vscode-oniguruma` which enables this Oniguruma option by default
         captureGroup: true,
+        // Removing `\G` anchors in cases when they're not supported for emulation allows
+        // supporting more grammars, but also allows some mismatches
+        ignoreUnsupportedGAnchors: true,
       },
       ...options,
     },
diff --git a/packages/engine-oniguruma/package.json b/packages/engine-oniguruma/package.json
index eaabead0..7c6c3002 100644
--- a/packages/engine-oniguruma/package.json
+++ b/packages/engine-oniguruma/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@shikijs/engine-oniguruma",
   "type": "module",
-  "version": "1.24.3",
+  "version": "1.24.4",
   "description": "Engine for Shiki using Oniguruma RegExp engine in WebAssembly",
   "author": "Anthony Fu <anthonyfu117@hotmail.com>",
   "license": "MIT",
diff --git a/packages/langs/README.md b/packages/langs/README.md
new file mode 100644
index 00000000..40b2f3f1
--- /dev/null
+++ b/packages/langs/README.md
@@ -0,0 +1,7 @@
+# @shikijs/langs
+
+TextMate grammars for Shiki.
+
+## License
+
+MIT
diff --git a/packages/langs/package.json b/packages/langs/package.json
new file mode 100644
index 00000000..d7d6e8be
--- /dev/null
+++ b/packages/langs/package.json
@@ -0,0 +1,355 @@
+{
+  "name": "@shikijs/langs",
+  "type": "module",
+  "version": "1.24.4",
+  "description": "TextMate grammars for Shiki in ESM",
+  "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/langs"
+  },
+  "bugs": "https://github.com/shikijs/shiki/issues",
+  "keywords": [
+    "shiki",
+    "textmate-grammars"
+  ],
+  "sideEffects": false,
+  "exports": {
+    ".": "./dist/index.mjs",
+    "./abap": "./dist/abap.mjs",
+    "./actionscript-3": "./dist/actionscript-3.mjs",
+    "./ada": "./dist/ada.mjs",
+    "./angular-expression": "./dist/angular-expression.mjs",
+    "./angular-html": "./dist/angular-html.mjs",
+    "./angular-inline-style": "./dist/angular-inline-style.mjs",
+    "./angular-inline-template": "./dist/angular-inline-template.mjs",
+    "./angular-let-declaration": "./dist/angular-let-declaration.mjs",
+    "./angular-template-blocks": "./dist/angular-template-blocks.mjs",
+    "./angular-template": "./dist/angular-template.mjs",
+    "./angular-ts": "./dist/angular-ts.mjs",
+    "./apache": "./dist/apache.mjs",
+    "./apex": "./dist/apex.mjs",
+    "./apl": "./dist/apl.mjs",
+    "./applescript": "./dist/applescript.mjs",
+    "./ara": "./dist/ara.mjs",
+    "./adoc": "./dist/adoc.mjs",
+    "./asciidoc": "./dist/asciidoc.mjs",
+    "./asm": "./dist/asm.mjs",
+    "./astro": "./dist/astro.mjs",
+    "./awk": "./dist/awk.mjs",
+    "./ballerina": "./dist/ballerina.mjs",
+    "./batch": "./dist/batch.mjs",
+    "./bat": "./dist/bat.mjs",
+    "./beancount": "./dist/beancount.mjs",
+    "./be": "./dist/be.mjs",
+    "./berry": "./dist/berry.mjs",
+    "./bibtex": "./dist/bibtex.mjs",
+    "./bicep": "./dist/bicep.mjs",
+    "./blade": "./dist/blade.mjs",
+    "./1c": "./dist/1c.mjs",
+    "./bsl": "./dist/bsl.mjs",
+    "./c": "./dist/c.mjs",
+    "./cdc": "./dist/cdc.mjs",
+    "./cadence": "./dist/cadence.mjs",
+    "./cairo": "./dist/cairo.mjs",
+    "./clarity": "./dist/clarity.mjs",
+    "./clj": "./dist/clj.mjs",
+    "./clojure": "./dist/clojure.mjs",
+    "./cmake": "./dist/cmake.mjs",
+    "./cobol": "./dist/cobol.mjs",
+    "./codeowners": "./dist/codeowners.mjs",
+    "./ql": "./dist/ql.mjs",
+    "./codeql": "./dist/codeql.mjs",
+    "./coffeescript": "./dist/coffeescript.mjs",
+    "./coffee": "./dist/coffee.mjs",
+    "./lisp": "./dist/lisp.mjs",
+    "./common-lisp": "./dist/common-lisp.mjs",
+    "./coq": "./dist/coq.mjs",
+    "./cpp-macro": "./dist/cpp-macro.mjs",
+    "./cpp": "./dist/cpp.mjs",
+    "./crystal": "./dist/crystal.mjs",
+    "./cs": "./dist/cs.mjs",
+    "./csharp": "./dist/csharp.mjs",
+    "./css": "./dist/css.mjs",
+    "./csv": "./dist/csv.mjs",
+    "./cue": "./dist/cue.mjs",
+    "./cql": "./dist/cql.mjs",
+    "./cypher": "./dist/cypher.mjs",
+    "./d": "./dist/d.mjs",
+    "./dart": "./dist/dart.mjs",
+    "./dax": "./dist/dax.mjs",
+    "./desktop": "./dist/desktop.mjs",
+    "./diff": "./dist/diff.mjs",
+    "./dockerfile": "./dist/dockerfile.mjs",
+    "./docker": "./dist/docker.mjs",
+    "./dotenv": "./dist/dotenv.mjs",
+    "./dream-maker": "./dist/dream-maker.mjs",
+    "./edge": "./dist/edge.mjs",
+    "./elixir": "./dist/elixir.mjs",
+    "./elm": "./dist/elm.mjs",
+    "./elisp": "./dist/elisp.mjs",
+    "./emacs-lisp": "./dist/emacs-lisp.mjs",
+    "./erb": "./dist/erb.mjs",
+    "./erl": "./dist/erl.mjs",
+    "./erlang": "./dist/erlang.mjs",
+    "./es-tag-css": "./dist/es-tag-css.mjs",
+    "./es-tag-glsl": "./dist/es-tag-glsl.mjs",
+    "./es-tag-html": "./dist/es-tag-html.mjs",
+    "./es-tag-sql": "./dist/es-tag-sql.mjs",
+    "./es-tag-xml": "./dist/es-tag-xml.mjs",
+    "./fennel": "./dist/fennel.mjs",
+    "./fish": "./dist/fish.mjs",
+    "./ftl": "./dist/ftl.mjs",
+    "./fluent": "./dist/fluent.mjs",
+    "./f": "./dist/f.mjs",
+    "./for": "./dist/for.mjs",
+    "./f77": "./dist/f77.mjs",
+    "./fortran-fixed-form": "./dist/fortran-fixed-form.mjs",
+    "./f90": "./dist/f90.mjs",
+    "./f95": "./dist/f95.mjs",
+    "./f03": "./dist/f03.mjs",
+    "./f08": "./dist/f08.mjs",
+    "./f18": "./dist/f18.mjs",
+    "./fortran-free-form": "./dist/fortran-free-form.mjs",
+    "./fs": "./dist/fs.mjs",
+    "./fsharp": "./dist/fsharp.mjs",
+    "./gdresource": "./dist/gdresource.mjs",
+    "./gdscript": "./dist/gdscript.mjs",
+    "./gdshader": "./dist/gdshader.mjs",
+    "./genie": "./dist/genie.mjs",
+    "./gherkin": "./dist/gherkin.mjs",
+    "./git-commit": "./dist/git-commit.mjs",
+    "./git-rebase": "./dist/git-rebase.mjs",
+    "./gleam": "./dist/gleam.mjs",
+    "./gjs": "./dist/gjs.mjs",
+    "./glimmer-js": "./dist/glimmer-js.mjs",
+    "./gts": "./dist/gts.mjs",
+    "./glimmer-ts": "./dist/glimmer-ts.mjs",
+    "./glsl": "./dist/glsl.mjs",
+    "./gnuplot": "./dist/gnuplot.mjs",
+    "./go": "./dist/go.mjs",
+    "./gql": "./dist/gql.mjs",
+    "./graphql": "./dist/graphql.mjs",
+    "./groovy": "./dist/groovy.mjs",
+    "./hack": "./dist/hack.mjs",
+    "./haml": "./dist/haml.mjs",
+    "./hbs": "./dist/hbs.mjs",
+    "./handlebars": "./dist/handlebars.mjs",
+    "./hs": "./dist/hs.mjs",
+    "./haskell": "./dist/haskell.mjs",
+    "./haxe": "./dist/haxe.mjs",
+    "./hcl": "./dist/hcl.mjs",
+    "./hjson": "./dist/hjson.mjs",
+    "./hlsl": "./dist/hlsl.mjs",
+    "./html-derivative": "./dist/html-derivative.mjs",
+    "./html": "./dist/html.mjs",
+    "./http": "./dist/http.mjs",
+    "./hxml": "./dist/hxml.mjs",
+    "./hy": "./dist/hy.mjs",
+    "./imba": "./dist/imba.mjs",
+    "./properties": "./dist/properties.mjs",
+    "./ini": "./dist/ini.mjs",
+    "./java": "./dist/java.mjs",
+    "./js": "./dist/js.mjs",
+    "./javascript": "./dist/javascript.mjs",
+    "./jinja-html": "./dist/jinja-html.mjs",
+    "./jinja": "./dist/jinja.mjs",
+    "./jison": "./dist/jison.mjs",
+    "./json": "./dist/json.mjs",
+    "./json5": "./dist/json5.mjs",
+    "./jsonc": "./dist/jsonc.mjs",
+    "./jsonl": "./dist/jsonl.mjs",
+    "./jsonnet": "./dist/jsonnet.mjs",
+    "./fsl": "./dist/fsl.mjs",
+    "./jssm": "./dist/jssm.mjs",
+    "./jsx": "./dist/jsx.mjs",
+    "./jl": "./dist/jl.mjs",
+    "./julia": "./dist/julia.mjs",
+    "./kt": "./dist/kt.mjs",
+    "./kts": "./dist/kts.mjs",
+    "./kotlin": "./dist/kotlin.mjs",
+    "./kql": "./dist/kql.mjs",
+    "./kusto": "./dist/kusto.mjs",
+    "./latex": "./dist/latex.mjs",
+    "./lean4": "./dist/lean4.mjs",
+    "./lean": "./dist/lean.mjs",
+    "./less": "./dist/less.mjs",
+    "./liquid": "./dist/liquid.mjs",
+    "./log": "./dist/log.mjs",
+    "./logo": "./dist/logo.mjs",
+    "./lua": "./dist/lua.mjs",
+    "./luau": "./dist/luau.mjs",
+    "./makefile": "./dist/makefile.mjs",
+    "./make": "./dist/make.mjs",
+    "./markdown-vue": "./dist/markdown-vue.mjs",
+    "./md": "./dist/md.mjs",
+    "./markdown": "./dist/markdown.mjs",
+    "./marko": "./dist/marko.mjs",
+    "./matlab": "./dist/matlab.mjs",
+    "./mdc": "./dist/mdc.mjs",
+    "./mdx": "./dist/mdx.mjs",
+    "./mmd": "./dist/mmd.mjs",
+    "./mermaid": "./dist/mermaid.mjs",
+    "./mips": "./dist/mips.mjs",
+    "./mipsasm": "./dist/mipsasm.mjs",
+    "./mojo": "./dist/mojo.mjs",
+    "./move": "./dist/move.mjs",
+    "./nar": "./dist/nar.mjs",
+    "./narrat": "./dist/narrat.mjs",
+    "./nf": "./dist/nf.mjs",
+    "./nextflow": "./dist/nextflow.mjs",
+    "./nginx": "./dist/nginx.mjs",
+    "./nim": "./dist/nim.mjs",
+    "./nix": "./dist/nix.mjs",
+    "./nu": "./dist/nu.mjs",
+    "./nushell": "./dist/nushell.mjs",
+    "./objc": "./dist/objc.mjs",
+    "./objective-c": "./dist/objective-c.mjs",
+    "./objective-cpp": "./dist/objective-cpp.mjs",
+    "./ocaml": "./dist/ocaml.mjs",
+    "./pascal": "./dist/pascal.mjs",
+    "./perl": "./dist/perl.mjs",
+    "./php": "./dist/php.mjs",
+    "./plsql": "./dist/plsql.mjs",
+    "./pot": "./dist/pot.mjs",
+    "./potx": "./dist/potx.mjs",
+    "./po": "./dist/po.mjs",
+    "./postcss": "./dist/postcss.mjs",
+    "./powerquery": "./dist/powerquery.mjs",
+    "./ps": "./dist/ps.mjs",
+    "./ps1": "./dist/ps1.mjs",
+    "./powershell": "./dist/powershell.mjs",
+    "./prisma": "./dist/prisma.mjs",
+    "./prolog": "./dist/prolog.mjs",
+    "./protobuf": "./dist/protobuf.mjs",
+    "./proto": "./dist/proto.mjs",
+    "./jade": "./dist/jade.mjs",
+    "./pug": "./dist/pug.mjs",
+    "./puppet": "./dist/puppet.mjs",
+    "./purescript": "./dist/purescript.mjs",
+    "./py": "./dist/py.mjs",
+    "./python": "./dist/python.mjs",
+    "./qml": "./dist/qml.mjs",
+    "./qmldir": "./dist/qmldir.mjs",
+    "./qss": "./dist/qss.mjs",
+    "./r": "./dist/r.mjs",
+    "./racket": "./dist/racket.mjs",
+    "./perl6": "./dist/perl6.mjs",
+    "./raku": "./dist/raku.mjs",
+    "./razor": "./dist/razor.mjs",
+    "./reg": "./dist/reg.mjs",
+    "./regex": "./dist/regex.mjs",
+    "./regexp": "./dist/regexp.mjs",
+    "./rel": "./dist/rel.mjs",
+    "./riscv": "./dist/riscv.mjs",
+    "./rst": "./dist/rst.mjs",
+    "./rb": "./dist/rb.mjs",
+    "./ruby": "./dist/ruby.mjs",
+    "./rs": "./dist/rs.mjs",
+    "./rust": "./dist/rust.mjs",
+    "./sas": "./dist/sas.mjs",
+    "./sass": "./dist/sass.mjs",
+    "./scala": "./dist/scala.mjs",
+    "./scheme": "./dist/scheme.mjs",
+    "./scss": "./dist/scss.mjs",
+    "./1c-query": "./dist/1c-query.mjs",
+    "./sdbl": "./dist/sdbl.mjs",
+    "./shader": "./dist/shader.mjs",
+    "./shaderlab": "./dist/shaderlab.mjs",
+    "./bash": "./dist/bash.mjs",
+    "./sh": "./dist/sh.mjs",
+    "./shell": "./dist/shell.mjs",
+    "./zsh": "./dist/zsh.mjs",
+    "./shellscript": "./dist/shellscript.mjs",
+    "./console": "./dist/console.mjs",
+    "./shellsession": "./dist/shellsession.mjs",
+    "./smalltalk": "./dist/smalltalk.mjs",
+    "./solidity": "./dist/solidity.mjs",
+    "./closure-templates": "./dist/closure-templates.mjs",
+    "./soy": "./dist/soy.mjs",
+    "./sparql": "./dist/sparql.mjs",
+    "./spl": "./dist/spl.mjs",
+    "./splunk": "./dist/splunk.mjs",
+    "./sql": "./dist/sql.mjs",
+    "./ssh-config": "./dist/ssh-config.mjs",
+    "./stata": "./dist/stata.mjs",
+    "./styl": "./dist/styl.mjs",
+    "./stylus": "./dist/stylus.mjs",
+    "./svelte": "./dist/svelte.mjs",
+    "./swift": "./dist/swift.mjs",
+    "./system-verilog": "./dist/system-verilog.mjs",
+    "./systemd": "./dist/systemd.mjs",
+    "./talon": "./dist/talon.mjs",
+    "./talonscript": "./dist/talonscript.mjs",
+    "./tasl": "./dist/tasl.mjs",
+    "./tcl": "./dist/tcl.mjs",
+    "./templ": "./dist/templ.mjs",
+    "./tf": "./dist/tf.mjs",
+    "./tfvars": "./dist/tfvars.mjs",
+    "./terraform": "./dist/terraform.mjs",
+    "./tex": "./dist/tex.mjs",
+    "./toml": "./dist/toml.mjs",
+    "./lit": "./dist/lit.mjs",
+    "./ts-tags": "./dist/ts-tags.mjs",
+    "./tsv": "./dist/tsv.mjs",
+    "./tsx": "./dist/tsx.mjs",
+    "./turtle": "./dist/turtle.mjs",
+    "./twig": "./dist/twig.mjs",
+    "./ts": "./dist/ts.mjs",
+    "./typescript": "./dist/typescript.mjs",
+    "./tsp": "./dist/tsp.mjs",
+    "./typespec": "./dist/typespec.mjs",
+    "./typ": "./dist/typ.mjs",
+    "./typst": "./dist/typst.mjs",
+    "./v": "./dist/v.mjs",
+    "./vala": "./dist/vala.mjs",
+    "./cmd": "./dist/cmd.mjs",
+    "./vb": "./dist/vb.mjs",
+    "./verilog": "./dist/verilog.mjs",
+    "./vhdl": "./dist/vhdl.mjs",
+    "./vim": "./dist/vim.mjs",
+    "./vimscript": "./dist/vimscript.mjs",
+    "./viml": "./dist/viml.mjs",
+    "./vue-directives": "./dist/vue-directives.mjs",
+    "./vue-html": "./dist/vue-html.mjs",
+    "./vue-interpolations": "./dist/vue-interpolations.mjs",
+    "./vue-sfc-style-variable-injection": "./dist/vue-sfc-style-variable-injection.mjs",
+    "./vue": "./dist/vue.mjs",
+    "./vy": "./dist/vy.mjs",
+    "./vyper": "./dist/vyper.mjs",
+    "./wasm": "./dist/wasm.mjs",
+    "./wenyan": "./dist/wenyan.mjs",
+    "./wgsl": "./dist/wgsl.mjs",
+    "./mediawiki": "./dist/mediawiki.mjs",
+    "./wiki": "./dist/wiki.mjs",
+    "./wikitext": "./dist/wikitext.mjs",
+    "./wl": "./dist/wl.mjs",
+    "./wolfram": "./dist/wolfram.mjs",
+    "./xml": "./dist/xml.mjs",
+    "./xsl": "./dist/xsl.mjs",
+    "./yml": "./dist/yml.mjs",
+    "./yaml": "./dist/yaml.mjs",
+    "./zenscript": "./dist/zenscript.mjs",
+    "./zig": "./dist/zig.mjs"
+  },
+  "main": "./dist/index.mjs",
+  "module": "./dist/index.mjs",
+  "types": "./dist/index.d.mts",
+  "files": [
+    "dist"
+  ],
+  "scripts": {
+    "prepare": "esno scripts/prepare.ts",
+    "build": "pnpm prepare",
+    "prepublishOnly": "nr prepare"
+  },
+  "dependencies": {
+    "@shikijs/types": "workspace:*"
+  },
+  "devDependencies": {
+    "tm-grammars": "^1.21.10"
+  }
+}
diff --git a/packages/shiki/scripts/prepare/langs.ts b/packages/langs/scripts/langs.ts
similarity index 82%
rename from packages/shiki/scripts/prepare/langs.ts
rename to packages/langs/scripts/langs.ts
index b6b86067..12424447 100644
--- a/packages/shiki/scripts/prepare/langs.ts
+++ b/packages/langs/scripts/langs.ts
@@ -2,7 +2,6 @@ import type { LanguageRegistration } from '@shikijs/core'
 import fg from 'fast-glob'
 import fs from 'fs-extra'
 import { grammars, injections } from 'tm-grammars'
-import { COMMENT_HEAD } from './constants'
 
 /**
  * Document-like languages that have embedded langs
@@ -60,6 +59,7 @@ export async function prepareLangs() {
   allLangFiles.sort()
 
   const resolvedLangs: LanguageRegistration[] = []
+  const exportedFileNames: string[] = []
 
   for (const file of allLangFiles) {
     const content = await fs.readJSON(file)
@@ -101,7 +101,7 @@ export async function prepareLangs() {
     ].join(',\n') || ''
 
     await fs.writeFile(
-      `./src/langs/${lang.name}.mjs`,
+      `./dist/${lang.name}.mjs`,
       `${deps.map(i => `import ${i.replace(/\W/g, '_')} from './${i}.mjs'`).join('\n')}
 
 const lang = Object.freeze(JSON.parse(${JSON.stringify(JSON.stringify(json))}))
@@ -115,7 +115,7 @@ export default [\n${depsStr}\n]
       if (isInvalidFilename(alias))
         continue
       await fs.writeFile(
-        `./src/langs/${alias}.mjs`,
+        `./dist/${alias}.mjs`,
         `/* Alias ${alias} for ${lang.name} */
 export { default } from './${lang.name}.mjs'
 `,
@@ -126,9 +126,10 @@ export { default } from './${lang.name}.mjs'
     for (const name of [...json.aliases || [], lang.name]) {
       if (isInvalidFilename(name))
         continue
+      exportedFileNames.push(name)
       await fs.writeFile(
-        `./src/langs/${name}.d.mts`,
-        `import type { LanguageRegistration } from '@shikijs/core'
+        `./dist/${name}.d.mts`,
+        `import type { LanguageRegistration } from '@shikijs/types'
 const langs: LanguageRegistration []
 export default langs
 `,
@@ -137,6 +138,35 @@ export default langs
     }
   }
 
+  await fs.writeFile(
+    './dist/index.mjs',
+    `// Generated by scripts/prepare.ts
+
+export const languageNames = [
+${resolvedLangs.map(i => JSON.stringify(i.name)).join(',\n')}
+]
+`,
+    'utf-8',
+  )
+
+  await fs.writeFile(
+    './dist/index.d.mts',
+    `export const languageNames: string[]`,
+    'utf-8',
+  )
+
+  const packageJson = JSON.parse(await fs.readFile('./package.json', 'utf-8'))
+  packageJson.exports = {
+    '.': './dist/index.mjs',
+    ...Object.fromEntries(
+      exportedFileNames.map(i => [
+        `./${i}`,
+        `./dist/${i}.mjs`,
+      ]),
+    ),
+  }
+  await fs.writeFile('./package.json', `${JSON.stringify(packageJson, null, 2)}\n`, 'utf-8')
+
   async function writeLanguageBundleIndex(
     fileName: string,
     ids: string[],
@@ -166,16 +196,18 @@ export default langs
         id: i.name,
         name: i.displayName || i.name,
         aliases: i.aliases,
-        import: `__(() => import('./langs/${i.name}.mjs')) as DynamicImportLanguageRegistration__`,
+        import: `__(() => import('@shikijs/langs/${i.name}')) as DynamicImportLanguageRegistration__`,
       }) as const)
       .sort((a, b) => a.id.localeCompare(b.id))
 
     const type = info.flatMap(i => [...i.aliases || [], i.id]).sort().map(i => `  | '${i}'`).join('\n')
 
+    const COMMENT_HEAD = '// Generated by packages/langs/scripts/prepare.ts'
+
     await fs.writeFile(
-      `src/${fileName}.ts`,
+      `../shiki/src/${fileName}.ts`,
       `${COMMENT_HEAD}
-import type { DynamicImportLanguageRegistration, BundledLanguageInfo } from '@shikijs/core'
+import type { DynamicImportLanguageRegistration, BundledLanguageInfo } from '@shikijs/types'
 
 export const bundledLanguagesInfo: BundledLanguageInfo[] = ${JSON.stringify(info, null, 2).replace(/"__|__"/g, '').replace(/"/g, '\'')}
 
diff --git a/packages/langs/scripts/prepare.ts b/packages/langs/scripts/prepare.ts
new file mode 100644
index 00000000..a6cda0ba
--- /dev/null
+++ b/packages/langs/scripts/prepare.ts
@@ -0,0 +1,6 @@
+import fs from 'fs-extra'
+import { prepareLangs } from './langs'
+
+await fs.ensureDir('./dist')
+await fs.emptyDir('./dist')
+await prepareLangs()
diff --git a/packages/markdown-it/package.json b/packages/markdown-it/package.json
index b438199d..42845400 100644
--- a/packages/markdown-it/package.json
+++ b/packages/markdown-it/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@shikijs/markdown-it",
   "type": "module",
-  "version": "1.24.3",
+  "version": "1.24.4",
   "description": "markdown-it integration for shiki",
   "author": "Anthony Fu <anthonyfu117@hotmail.com>",
   "license": "MIT",
diff --git a/packages/monaco/package.json b/packages/monaco/package.json
index 53c8c9af..ff2dbc84 100644
--- a/packages/monaco/package.json
+++ b/packages/monaco/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@shikijs/monaco",
   "type": "module",
-  "version": "1.24.3",
+  "version": "1.24.4",
   "description": "Use Shiki for Monaco Editor",
   "author": "Anthony Fu <anthonyfu117@hotmail.com>",
   "license": "MIT",
diff --git a/packages/rehype/package.json b/packages/rehype/package.json
index 87849d66..fdc1e4de 100644
--- a/packages/rehype/package.json
+++ b/packages/rehype/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@shikijs/rehype",
   "type": "module",
-  "version": "1.24.3",
+  "version": "1.24.4",
   "description": "rehype integration for shiki",
   "author": "Anthony Fu <anthonyfu117@hotmail.com>",
   "license": "MIT",
diff --git a/packages/shiki/package.json b/packages/shiki/package.json
index 5bad991d..6d852a42 100644
--- a/packages/shiki/package.json
+++ b/packages/shiki/package.json
@@ -1,7 +1,7 @@
 {
   "name": "shiki",
   "type": "module",
-  "version": "1.24.3",
+  "version": "1.24.4",
   "description": "A beautiful Syntax Highlighter.",
   "author": "Pine Wu <octref@gmail.com>; Anthony Fu <anthonyfu117@hotmail.com>",
   "license": "MIT",
@@ -124,6 +124,8 @@
     "@shikijs/core": "workspace:*",
     "@shikijs/engine-javascript": "workspace:*",
     "@shikijs/engine-oniguruma": "workspace:*",
+    "@shikijs/langs": "workspace:*",
+    "@shikijs/themes": "workspace:*",
     "@shikijs/types": "workspace:*",
     "@shikijs/vscode-textmate": "catalog:",
     "@types/hast": "catalog:"
diff --git a/packages/shiki/scripts/prepare.ts b/packages/shiki/scripts/prepare.ts
index 07a7ee09..0766174e 100644
--- a/packages/shiki/scripts/prepare.ts
+++ b/packages/shiki/scripts/prepare.ts
@@ -1,10 +1,34 @@
+import { languageNames } from '@shikijs/langs'
+import { themeNames } from '@shikijs/themes'
 import fs from 'fs-extra'
-import { prepareLangs } from './prepare/langs'
-import { prepareTheme } from './prepare/themes'
 
 await fs.ensureDir('./src/langs')
 await fs.emptyDir('./src/langs')
 await fs.ensureDir('./src/themes')
 await fs.emptyDir('./src/themes')
-await prepareLangs()
-await prepareTheme()
+
+for (const lang of languageNames) {
+  await fs.writeFile(
+    `./src/langs/${lang}.mjs`,
+    `export { default } from '@shikijs/langs/${lang}'\n`,
+    'utf-8',
+  )
+  await fs.writeFile(
+    `./src/langs/${lang}.d.mts`,
+    `export { default } from '@shikijs/langs/${lang}'\n`,
+    'utf-8',
+  )
+}
+
+for (const theme of themeNames) {
+  await fs.writeFile(
+    `./src/themes/${theme}.mjs`,
+    `export { default } from '@shikijs/themes/${theme}'\n`,
+    'utf-8',
+  )
+  await fs.writeFile(
+    `./src/themes/${theme}.d.mts`,
+    `export { default } from '@shikijs/themes/${theme}'\n`,
+    'utf-8',
+  )
+}
diff --git a/packages/shiki/scripts/prepare/constants.ts b/packages/shiki/scripts/prepare/constants.ts
deleted file mode 100644
index 7610b3db..00000000
--- a/packages/shiki/scripts/prepare/constants.ts
+++ /dev/null
@@ -1,1 +0,0 @@
-export const COMMENT_HEAD = `// Generated by scripts/prepare.ts`
diff --git a/packages/shiki/src/langs-bundle-full.ts b/packages/shiki/src/langs-bundle-full.ts
index 64391def..49a496b6 100644
--- a/packages/shiki/src/langs-bundle-full.ts
+++ b/packages/shiki/src/langs-bundle-full.ts
@@ -1,56 +1,56 @@
-// Generated by scripts/prepare.ts
-import type { DynamicImportLanguageRegistration, BundledLanguageInfo } from '@shikijs/core'
+// Generated by packages/langs/scripts/prepare.ts
+import type { DynamicImportLanguageRegistration, BundledLanguageInfo } from '@shikijs/types'
 
 export const bundledLanguagesInfo: BundledLanguageInfo[] = [
   {
     'id': 'abap',
     'name': 'ABAP',
-    'import': (() => import('./langs/abap.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/abap')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'actionscript-3',
     'name': 'ActionScript',
-    'import': (() => import('./langs/actionscript-3.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/actionscript-3')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'ada',
     'name': 'Ada',
-    'import': (() => import('./langs/ada.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/ada')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'angular-html',
     'name': 'Angular HTML',
-    'import': (() => import('./langs/angular-html.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/angular-html')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'angular-ts',
     'name': 'Angular TypeScript',
-    'import': (() => import('./langs/angular-ts.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/angular-ts')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'apache',
     'name': 'Apache Conf',
-    'import': (() => import('./langs/apache.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/apache')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'apex',
     'name': 'Apex',
-    'import': (() => import('./langs/apex.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/apex')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'apl',
     'name': 'APL',
-    'import': (() => import('./langs/apl.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/apl')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'applescript',
     'name': 'AppleScript',
-    'import': (() => import('./langs/applescript.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/applescript')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'ara',
     'name': 'Ara',
-    'import': (() => import('./langs/ara.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/ara')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'asciidoc',
@@ -58,27 +58,27 @@ export const bundledLanguagesInfo: BundledLanguageInfo[] = [
     'aliases': [
       'adoc'
     ],
-    'import': (() => import('./langs/asciidoc.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/asciidoc')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'asm',
     'name': 'Assembly',
-    'import': (() => import('./langs/asm.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/asm')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'astro',
     'name': 'Astro',
-    'import': (() => import('./langs/astro.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/astro')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'awk',
     'name': 'AWK',
-    'import': (() => import('./langs/awk.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/awk')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'ballerina',
     'name': 'Ballerina',
-    'import': (() => import('./langs/ballerina.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/ballerina')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'bat',
@@ -86,12 +86,12 @@ export const bundledLanguagesInfo: BundledLanguageInfo[] = [
     'aliases': [
       'batch'
     ],
-    'import': (() => import('./langs/bat.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/bat')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'beancount',
     'name': 'Beancount',
-    'import': (() => import('./langs/beancount.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/beancount')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'berry',
@@ -99,22 +99,22 @@ export const bundledLanguagesInfo: BundledLanguageInfo[] = [
     'aliases': [
       'be'
     ],
-    'import': (() => import('./langs/berry.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/berry')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'bibtex',
     'name': 'BibTeX',
-    'import': (() => import('./langs/bibtex.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/bibtex')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'bicep',
     'name': 'Bicep',
-    'import': (() => import('./langs/bicep.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/bicep')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'blade',
     'name': 'Blade',
-    'import': (() => import('./langs/blade.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/blade')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'bsl',
@@ -122,12 +122,12 @@ export const bundledLanguagesInfo: BundledLanguageInfo[] = [
     'aliases': [
       '1c'
     ],
-    'import': (() => import('./langs/bsl.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/bsl')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'c',
     'name': 'C',
-    'import': (() => import('./langs/c.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/c')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'cadence',
@@ -135,17 +135,17 @@ export const bundledLanguagesInfo: BundledLanguageInfo[] = [
     'aliases': [
       'cdc'
     ],
-    'import': (() => import('./langs/cadence.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/cadence')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'cairo',
     'name': 'Cairo',
-    'import': (() => import('./langs/cairo.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/cairo')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'clarity',
     'name': 'Clarity',
-    'import': (() => import('./langs/clarity.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/clarity')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'clojure',
@@ -153,22 +153,22 @@ export const bundledLanguagesInfo: BundledLanguageInfo[] = [
     'aliases': [
       'clj'
     ],
-    'import': (() => import('./langs/clojure.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/clojure')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'cmake',
     'name': 'CMake',
-    'import': (() => import('./langs/cmake.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/cmake')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'cobol',
     'name': 'COBOL',
-    'import': (() => import('./langs/cobol.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/cobol')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'codeowners',
     'name': 'CODEOWNERS',
-    'import': (() => import('./langs/codeowners.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/codeowners')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'codeql',
@@ -176,7 +176,7 @@ export const bundledLanguagesInfo: BundledLanguageInfo[] = [
     'aliases': [
       'ql'
     ],
-    'import': (() => import('./langs/codeql.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/codeql')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'coffee',
@@ -184,7 +184,7 @@ export const bundledLanguagesInfo: BundledLanguageInfo[] = [
     'aliases': [
       'coffeescript'
     ],
-    'import': (() => import('./langs/coffee.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/coffee')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'common-lisp',
@@ -192,12 +192,12 @@ export const bundledLanguagesInfo: BundledLanguageInfo[] = [
     'aliases': [
       'lisp'
     ],
-    'import': (() => import('./langs/common-lisp.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/common-lisp')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'coq',
     'name': 'Coq',
-    'import': (() => import('./langs/coq.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/coq')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'cpp',
@@ -205,12 +205,12 @@ export const bundledLanguagesInfo: BundledLanguageInfo[] = [
     'aliases': [
       'c++'
     ],
-    'import': (() => import('./langs/cpp.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/cpp')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'crystal',
     'name': 'Crystal',
-    'import': (() => import('./langs/crystal.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/crystal')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'csharp',
@@ -219,22 +219,22 @@ export const bundledLanguagesInfo: BundledLanguageInfo[] = [
       'c#',
       'cs'
     ],
-    'import': (() => import('./langs/csharp.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/csharp')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'css',
     'name': 'CSS',
-    'import': (() => import('./langs/css.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/css')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'csv',
     'name': 'CSV',
-    'import': (() => import('./langs/csv.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/csv')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'cue',
     'name': 'CUE',
-    'import': (() => import('./langs/cue.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/cue')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'cypher',
@@ -242,32 +242,32 @@ export const bundledLanguagesInfo: BundledLanguageInfo[] = [
     'aliases': [
       'cql'
     ],
-    'import': (() => import('./langs/cypher.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/cypher')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'd',
     'name': 'D',
-    'import': (() => import('./langs/d.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/d')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'dart',
     'name': 'Dart',
-    'import': (() => import('./langs/dart.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/dart')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'dax',
     'name': 'DAX',
-    'import': (() => import('./langs/dax.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/dax')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'desktop',
     'name': 'Desktop',
-    'import': (() => import('./langs/desktop.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/desktop')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'diff',
     'name': 'Diff',
-    'import': (() => import('./langs/diff.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/diff')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'docker',
@@ -275,32 +275,32 @@ export const bundledLanguagesInfo: BundledLanguageInfo[] = [
     'aliases': [
       'dockerfile'
     ],
-    'import': (() => import('./langs/docker.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/docker')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'dotenv',
     'name': 'dotEnv',
-    'import': (() => import('./langs/dotenv.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/dotenv')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'dream-maker',
     'name': 'Dream Maker',
-    'import': (() => import('./langs/dream-maker.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/dream-maker')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'edge',
     'name': 'Edge',
-    'import': (() => import('./langs/edge.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/edge')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'elixir',
     'name': 'Elixir',
-    'import': (() => import('./langs/elixir.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/elixir')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'elm',
     'name': 'Elm',
-    'import': (() => import('./langs/elm.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/elm')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'emacs-lisp',
@@ -308,12 +308,12 @@ export const bundledLanguagesInfo: BundledLanguageInfo[] = [
     'aliases': [
       'elisp'
     ],
-    'import': (() => import('./langs/emacs-lisp.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/emacs-lisp')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'erb',
     'name': 'ERB',
-    'import': (() => import('./langs/erb.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/erb')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'erlang',
@@ -321,17 +321,17 @@ export const bundledLanguagesInfo: BundledLanguageInfo[] = [
     'aliases': [
       'erl'
     ],
-    'import': (() => import('./langs/erlang.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/erlang')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'fennel',
     'name': 'Fennel',
-    'import': (() => import('./langs/fennel.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/fennel')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'fish',
     'name': 'Fish',
-    'import': (() => import('./langs/fish.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/fish')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'fluent',
@@ -339,7 +339,7 @@ export const bundledLanguagesInfo: BundledLanguageInfo[] = [
     'aliases': [
       'ftl'
     ],
-    'import': (() => import('./langs/fluent.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/fluent')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'fortran-fixed-form',
@@ -349,7 +349,7 @@ export const bundledLanguagesInfo: BundledLanguageInfo[] = [
       'for',
       'f77'
     ],
-    'import': (() => import('./langs/fortran-fixed-form.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/fortran-fixed-form')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'fortran-free-form',
@@ -361,7 +361,7 @@ export const bundledLanguagesInfo: BundledLanguageInfo[] = [
       'f08',
       'f18'
     ],
-    'import': (() => import('./langs/fortran-free-form.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/fortran-free-form')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'fsharp',
@@ -370,47 +370,47 @@ export const bundledLanguagesInfo: BundledLanguageInfo[] = [
       'f#',
       'fs'
     ],
-    'import': (() => import('./langs/fsharp.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/fsharp')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'gdresource',
     'name': 'GDResource',
-    'import': (() => import('./langs/gdresource.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/gdresource')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'gdscript',
     'name': 'GDScript',
-    'import': (() => import('./langs/gdscript.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/gdscript')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'gdshader',
     'name': 'GDShader',
-    'import': (() => import('./langs/gdshader.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/gdshader')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'genie',
     'name': 'Genie',
-    'import': (() => import('./langs/genie.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/genie')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'gherkin',
     'name': 'Gherkin',
-    'import': (() => import('./langs/gherkin.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/gherkin')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'git-commit',
     'name': 'Git Commit Message',
-    'import': (() => import('./langs/git-commit.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/git-commit')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'git-rebase',
     'name': 'Git Rebase Message',
-    'import': (() => import('./langs/git-rebase.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/git-rebase')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'gleam',
     'name': 'Gleam',
-    'import': (() => import('./langs/gleam.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/gleam')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'glimmer-js',
@@ -418,7 +418,7 @@ export const bundledLanguagesInfo: BundledLanguageInfo[] = [
     'aliases': [
       'gjs'
     ],
-    'import': (() => import('./langs/glimmer-js.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/glimmer-js')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'glimmer-ts',
@@ -426,22 +426,22 @@ export const bundledLanguagesInfo: BundledLanguageInfo[] = [
     'aliases': [
       'gts'
     ],
-    'import': (() => import('./langs/glimmer-ts.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/glimmer-ts')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'glsl',
     'name': 'GLSL',
-    'import': (() => import('./langs/glsl.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/glsl')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'gnuplot',
     'name': 'Gnuplot',
-    'import': (() => import('./langs/gnuplot.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/gnuplot')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'go',
     'name': 'Go',
-    'import': (() => import('./langs/go.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/go')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'graphql',
@@ -449,22 +449,22 @@ export const bundledLanguagesInfo: BundledLanguageInfo[] = [
     'aliases': [
       'gql'
     ],
-    'import': (() => import('./langs/graphql.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/graphql')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'groovy',
     'name': 'Groovy',
-    'import': (() => import('./langs/groovy.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/groovy')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'hack',
     'name': 'Hack',
-    'import': (() => import('./langs/hack.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/hack')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'haml',
     'name': 'Ruby Haml',
-    'import': (() => import('./langs/haml.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/haml')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'handlebars',
@@ -472,7 +472,7 @@ export const bundledLanguagesInfo: BundledLanguageInfo[] = [
     'aliases': [
       'hbs'
     ],
-    'import': (() => import('./langs/handlebars.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/handlebars')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'haskell',
@@ -480,57 +480,57 @@ export const bundledLanguagesInfo: BundledLanguageInfo[] = [
     'aliases': [
       'hs'
     ],
-    'import': (() => import('./langs/haskell.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/haskell')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'haxe',
     'name': 'Haxe',
-    'import': (() => import('./langs/haxe.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/haxe')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'hcl',
     'name': 'HashiCorp HCL',
-    'import': (() => import('./langs/hcl.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/hcl')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'hjson',
     'name': 'Hjson',
-    'import': (() => import('./langs/hjson.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/hjson')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'hlsl',
     'name': 'HLSL',
-    'import': (() => import('./langs/hlsl.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/hlsl')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'html',
     'name': 'HTML',
-    'import': (() => import('./langs/html.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/html')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'html-derivative',
     'name': 'HTML (Derivative)',
-    'import': (() => import('./langs/html-derivative.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/html-derivative')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'http',
     'name': 'HTTP',
-    'import': (() => import('./langs/http.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/http')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'hxml',
     'name': 'HXML',
-    'import': (() => import('./langs/hxml.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/hxml')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'hy',
     'name': 'Hy',
-    'import': (() => import('./langs/hy.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/hy')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'imba',
     'name': 'Imba',
-    'import': (() => import('./langs/imba.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/imba')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'ini',
@@ -538,12 +538,12 @@ export const bundledLanguagesInfo: BundledLanguageInfo[] = [
     'aliases': [
       'properties'
     ],
-    'import': (() => import('./langs/ini.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/ini')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'java',
     'name': 'Java',
-    'import': (() => import('./langs/java.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/java')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'javascript',
@@ -551,42 +551,42 @@ export const bundledLanguagesInfo: BundledLanguageInfo[] = [
     'aliases': [
       'js'
     ],
-    'import': (() => import('./langs/javascript.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/javascript')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'jinja',
     'name': 'Jinja',
-    'import': (() => import('./langs/jinja.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/jinja')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'jison',
     'name': 'Jison',
-    'import': (() => import('./langs/jison.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/jison')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'json',
     'name': 'JSON',
-    'import': (() => import('./langs/json.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/json')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'json5',
     'name': 'JSON5',
-    'import': (() => import('./langs/json5.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/json5')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'jsonc',
     'name': 'JSON with Comments',
-    'import': (() => import('./langs/jsonc.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/jsonc')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'jsonl',
     'name': 'JSON Lines',
-    'import': (() => import('./langs/jsonl.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/jsonl')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'jsonnet',
     'name': 'Jsonnet',
-    'import': (() => import('./langs/jsonnet.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/jsonnet')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'jssm',
@@ -594,12 +594,12 @@ export const bundledLanguagesInfo: BundledLanguageInfo[] = [
     'aliases': [
       'fsl'
     ],
-    'import': (() => import('./langs/jssm.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/jssm')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'jsx',
     'name': 'JSX',
-    'import': (() => import('./langs/jsx.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/jsx')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'julia',
@@ -607,7 +607,7 @@ export const bundledLanguagesInfo: BundledLanguageInfo[] = [
     'aliases': [
       'jl'
     ],
-    'import': (() => import('./langs/julia.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/julia')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'kotlin',
@@ -616,7 +616,7 @@ export const bundledLanguagesInfo: BundledLanguageInfo[] = [
       'kt',
       'kts'
     ],
-    'import': (() => import('./langs/kotlin.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/kotlin')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'kusto',
@@ -624,12 +624,12 @@ export const bundledLanguagesInfo: BundledLanguageInfo[] = [
     'aliases': [
       'kql'
     ],
-    'import': (() => import('./langs/kusto.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/kusto')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'latex',
     'name': 'LaTeX',
-    'import': (() => import('./langs/latex.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/latex')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'lean',
@@ -637,37 +637,37 @@ export const bundledLanguagesInfo: BundledLanguageInfo[] = [
     'aliases': [
       'lean4'
     ],
-    'import': (() => import('./langs/lean.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/lean')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'less',
     'name': 'Less',
-    'import': (() => import('./langs/less.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/less')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'liquid',
     'name': 'Liquid',
-    'import': (() => import('./langs/liquid.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/liquid')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'log',
     'name': 'Log file',
-    'import': (() => import('./langs/log.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/log')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'logo',
     'name': 'Logo',
-    'import': (() => import('./langs/logo.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/logo')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'lua',
     'name': 'Lua',
-    'import': (() => import('./langs/lua.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/lua')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'luau',
     'name': 'Luau',
-    'import': (() => import('./langs/luau.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/luau')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'make',
@@ -675,7 +675,7 @@ export const bundledLanguagesInfo: BundledLanguageInfo[] = [
     'aliases': [
       'makefile'
     ],
-    'import': (() => import('./langs/make.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/make')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'markdown',
@@ -683,27 +683,27 @@ export const bundledLanguagesInfo: BundledLanguageInfo[] = [
     'aliases': [
       'md'
     ],
-    'import': (() => import('./langs/markdown.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/markdown')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'marko',
     'name': 'Marko',
-    'import': (() => import('./langs/marko.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/marko')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'matlab',
     'name': 'MATLAB',
-    'import': (() => import('./langs/matlab.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/matlab')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'mdc',
     'name': 'MDC',
-    'import': (() => import('./langs/mdc.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/mdc')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'mdx',
     'name': 'MDX',
-    'import': (() => import('./langs/mdx.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/mdx')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'mermaid',
@@ -711,7 +711,7 @@ export const bundledLanguagesInfo: BundledLanguageInfo[] = [
     'aliases': [
       'mmd'
     ],
-    'import': (() => import('./langs/mermaid.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/mermaid')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'mipsasm',
@@ -719,17 +719,17 @@ export const bundledLanguagesInfo: BundledLanguageInfo[] = [
     'aliases': [
       'mips'
     ],
-    'import': (() => import('./langs/mipsasm.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/mipsasm')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'mojo',
     'name': 'Mojo',
-    'import': (() => import('./langs/mojo.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/mojo')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'move',
     'name': 'Move',
-    'import': (() => import('./langs/move.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/move')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'narrat',
@@ -737,7 +737,7 @@ export const bundledLanguagesInfo: BundledLanguageInfo[] = [
     'aliases': [
       'nar'
     ],
-    'import': (() => import('./langs/narrat.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/narrat')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'nextflow',
@@ -745,22 +745,22 @@ export const bundledLanguagesInfo: BundledLanguageInfo[] = [
     'aliases': [
       'nf'
     ],
-    'import': (() => import('./langs/nextflow.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/nextflow')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'nginx',
     'name': 'Nginx',
-    'import': (() => import('./langs/nginx.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/nginx')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'nim',
     'name': 'Nim',
-    'import': (() => import('./langs/nim.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/nim')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'nix',
     'name': 'Nix',
-    'import': (() => import('./langs/nix.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/nix')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'nushell',
@@ -768,7 +768,7 @@ export const bundledLanguagesInfo: BundledLanguageInfo[] = [
     'aliases': [
       'nu'
     ],
-    'import': (() => import('./langs/nushell.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/nushell')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'objective-c',
@@ -776,37 +776,37 @@ export const bundledLanguagesInfo: BundledLanguageInfo[] = [
     'aliases': [
       'objc'
     ],
-    'import': (() => import('./langs/objective-c.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/objective-c')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'objective-cpp',
     'name': 'Objective-C++',
-    'import': (() => import('./langs/objective-cpp.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/objective-cpp')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'ocaml',
     'name': 'OCaml',
-    'import': (() => import('./langs/ocaml.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/ocaml')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'pascal',
     'name': 'Pascal',
-    'import': (() => import('./langs/pascal.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/pascal')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'perl',
     'name': 'Perl',
-    'import': (() => import('./langs/perl.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/perl')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'php',
     'name': 'PHP',
-    'import': (() => import('./langs/php.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/php')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'plsql',
     'name': 'PL/SQL',
-    'import': (() => import('./langs/plsql.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/plsql')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'po',
@@ -815,17 +815,17 @@ export const bundledLanguagesInfo: BundledLanguageInfo[] = [
       'pot',
       'potx'
     ],
-    'import': (() => import('./langs/po.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/po')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'postcss',
     'name': 'PostCSS',
-    'import': (() => import('./langs/postcss.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/postcss')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'powerquery',
     'name': 'PowerQuery',
-    'import': (() => import('./langs/powerquery.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/powerquery')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'powershell',
@@ -834,17 +834,17 @@ export const bundledLanguagesInfo: BundledLanguageInfo[] = [
       'ps',
       'ps1'
     ],
-    'import': (() => import('./langs/powershell.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/powershell')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'prisma',
     'name': 'Prisma',
-    'import': (() => import('./langs/prisma.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/prisma')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'prolog',
     'name': 'Prolog',
-    'import': (() => import('./langs/prolog.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/prolog')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'proto',
@@ -852,7 +852,7 @@ export const bundledLanguagesInfo: BundledLanguageInfo[] = [
     'aliases': [
       'protobuf'
     ],
-    'import': (() => import('./langs/proto.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/proto')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'pug',
@@ -860,17 +860,17 @@ export const bundledLanguagesInfo: BundledLanguageInfo[] = [
     'aliases': [
       'jade'
     ],
-    'import': (() => import('./langs/pug.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/pug')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'puppet',
     'name': 'Puppet',
-    'import': (() => import('./langs/puppet.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/puppet')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'purescript',
     'name': 'PureScript',
-    'import': (() => import('./langs/purescript.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/purescript')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'python',
@@ -878,32 +878,32 @@ export const bundledLanguagesInfo: BundledLanguageInfo[] = [
     'aliases': [
       'py'
     ],
-    'import': (() => import('./langs/python.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/python')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'qml',
     'name': 'QML',
-    'import': (() => import('./langs/qml.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/qml')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'qmldir',
     'name': 'QML Directory',
-    'import': (() => import('./langs/qmldir.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/qmldir')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'qss',
     'name': 'Qt Style Sheets',
-    'import': (() => import('./langs/qss.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/qss')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'r',
     'name': 'R',
-    'import': (() => import('./langs/r.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/r')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'racket',
     'name': 'Racket',
-    'import': (() => import('./langs/racket.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/racket')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'raku',
@@ -911,17 +911,17 @@ export const bundledLanguagesInfo: BundledLanguageInfo[] = [
     'aliases': [
       'perl6'
     ],
-    'import': (() => import('./langs/raku.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/raku')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'razor',
     'name': 'ASP.NET Razor',
-    'import': (() => import('./langs/razor.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/razor')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'reg',
     'name': 'Windows Registry Script',
-    'import': (() => import('./langs/reg.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/reg')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'regexp',
@@ -929,22 +929,22 @@ export const bundledLanguagesInfo: BundledLanguageInfo[] = [
     'aliases': [
       'regex'
     ],
-    'import': (() => import('./langs/regexp.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/regexp')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'rel',
     'name': 'Rel',
-    'import': (() => import('./langs/rel.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/rel')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'riscv',
     'name': 'RISC-V',
-    'import': (() => import('./langs/riscv.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/riscv')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'rst',
     'name': 'reStructuredText',
-    'import': (() => import('./langs/rst.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/rst')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'ruby',
@@ -952,7 +952,7 @@ export const bundledLanguagesInfo: BundledLanguageInfo[] = [
     'aliases': [
       'rb'
     ],
-    'import': (() => import('./langs/ruby.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/ruby')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'rust',
@@ -960,32 +960,32 @@ export const bundledLanguagesInfo: BundledLanguageInfo[] = [
     'aliases': [
       'rs'
     ],
-    'import': (() => import('./langs/rust.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/rust')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'sas',
     'name': 'SAS',
-    'import': (() => import('./langs/sas.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/sas')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'sass',
     'name': 'Sass',
-    'import': (() => import('./langs/sass.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/sass')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'scala',
     'name': 'Scala',
-    'import': (() => import('./langs/scala.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/scala')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'scheme',
     'name': 'Scheme',
-    'import': (() => import('./langs/scheme.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/scheme')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'scss',
     'name': 'SCSS',
-    'import': (() => import('./langs/scss.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/scss')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'sdbl',
@@ -993,7 +993,7 @@ export const bundledLanguagesInfo: BundledLanguageInfo[] = [
     'aliases': [
       '1c-query'
     ],
-    'import': (() => import('./langs/sdbl.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/sdbl')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'shaderlab',
@@ -1001,7 +1001,7 @@ export const bundledLanguagesInfo: BundledLanguageInfo[] = [
     'aliases': [
       'shader'
     ],
-    'import': (() => import('./langs/shaderlab.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/shaderlab')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'shellscript',
@@ -1012,7 +1012,7 @@ export const bundledLanguagesInfo: BundledLanguageInfo[] = [
       'shell',
       'zsh'
     ],
-    'import': (() => import('./langs/shellscript.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/shellscript')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'shellsession',
@@ -1020,17 +1020,17 @@ export const bundledLanguagesInfo: BundledLanguageInfo[] = [
     'aliases': [
       'console'
     ],
-    'import': (() => import('./langs/shellsession.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/shellsession')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'smalltalk',
     'name': 'Smalltalk',
-    'import': (() => import('./langs/smalltalk.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/smalltalk')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'solidity',
     'name': 'Solidity',
-    'import': (() => import('./langs/solidity.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/solidity')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'soy',
@@ -1038,12 +1038,12 @@ export const bundledLanguagesInfo: BundledLanguageInfo[] = [
     'aliases': [
       'closure-templates'
     ],
-    'import': (() => import('./langs/soy.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/soy')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'sparql',
     'name': 'SPARQL',
-    'import': (() => import('./langs/sparql.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/sparql')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'splunk',
@@ -1051,22 +1051,22 @@ export const bundledLanguagesInfo: BundledLanguageInfo[] = [
     'aliases': [
       'spl'
     ],
-    'import': (() => import('./langs/splunk.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/splunk')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'sql',
     'name': 'SQL',
-    'import': (() => import('./langs/sql.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/sql')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'ssh-config',
     'name': 'SSH Config',
-    'import': (() => import('./langs/ssh-config.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/ssh-config')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'stata',
     'name': 'Stata',
-    'import': (() => import('./langs/stata.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/stata')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'stylus',
@@ -1074,27 +1074,27 @@ export const bundledLanguagesInfo: BundledLanguageInfo[] = [
     'aliases': [
       'styl'
     ],
-    'import': (() => import('./langs/stylus.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/stylus')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'svelte',
     'name': 'Svelte',
-    'import': (() => import('./langs/svelte.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/svelte')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'swift',
     'name': 'Swift',
-    'import': (() => import('./langs/swift.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/swift')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'system-verilog',
     'name': 'SystemVerilog',
-    'import': (() => import('./langs/system-verilog.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/system-verilog')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'systemd',
     'name': 'Systemd Units',
-    'import': (() => import('./langs/systemd.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/systemd')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'talonscript',
@@ -1102,22 +1102,22 @@ export const bundledLanguagesInfo: BundledLanguageInfo[] = [
     'aliases': [
       'talon'
     ],
-    'import': (() => import('./langs/talonscript.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/talonscript')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'tasl',
     'name': 'Tasl',
-    'import': (() => import('./langs/tasl.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/tasl')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'tcl',
     'name': 'Tcl',
-    'import': (() => import('./langs/tcl.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/tcl')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'templ',
     'name': 'Templ',
-    'import': (() => import('./langs/templ.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/templ')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'terraform',
@@ -1126,17 +1126,17 @@ export const bundledLanguagesInfo: BundledLanguageInfo[] = [
       'tf',
       'tfvars'
     ],
-    'import': (() => import('./langs/terraform.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/terraform')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'tex',
     'name': 'TeX',
-    'import': (() => import('./langs/tex.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/tex')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'toml',
     'name': 'TOML',
-    'import': (() => import('./langs/toml.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/toml')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'ts-tags',
@@ -1144,27 +1144,27 @@ export const bundledLanguagesInfo: BundledLanguageInfo[] = [
     'aliases': [
       'lit'
     ],
-    'import': (() => import('./langs/ts-tags.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/ts-tags')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'tsv',
     'name': 'TSV',
-    'import': (() => import('./langs/tsv.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/tsv')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'tsx',
     'name': 'TSX',
-    'import': (() => import('./langs/tsx.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/tsx')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'turtle',
     'name': 'Turtle',
-    'import': (() => import('./langs/turtle.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/turtle')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'twig',
     'name': 'Twig',
-    'import': (() => import('./langs/twig.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/twig')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'typescript',
@@ -1172,7 +1172,7 @@ export const bundledLanguagesInfo: BundledLanguageInfo[] = [
     'aliases': [
       'ts'
     ],
-    'import': (() => import('./langs/typescript.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/typescript')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'typespec',
@@ -1180,7 +1180,7 @@ export const bundledLanguagesInfo: BundledLanguageInfo[] = [
     'aliases': [
       'tsp'
     ],
-    'import': (() => import('./langs/typespec.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/typespec')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'typst',
@@ -1188,17 +1188,17 @@ export const bundledLanguagesInfo: BundledLanguageInfo[] = [
     'aliases': [
       'typ'
     ],
-    'import': (() => import('./langs/typst.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/typst')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'v',
     'name': 'V',
-    'import': (() => import('./langs/v.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/v')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'vala',
     'name': 'Vala',
-    'import': (() => import('./langs/vala.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/vala')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'vb',
@@ -1206,17 +1206,17 @@ export const bundledLanguagesInfo: BundledLanguageInfo[] = [
     'aliases': [
       'cmd'
     ],
-    'import': (() => import('./langs/vb.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/vb')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'verilog',
     'name': 'Verilog',
-    'import': (() => import('./langs/verilog.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/verilog')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'vhdl',
     'name': 'VHDL',
-    'import': (() => import('./langs/vhdl.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/vhdl')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'viml',
@@ -1225,17 +1225,17 @@ export const bundledLanguagesInfo: BundledLanguageInfo[] = [
       'vim',
       'vimscript'
     ],
-    'import': (() => import('./langs/viml.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/viml')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'vue',
     'name': 'Vue',
-    'import': (() => import('./langs/vue.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/vue')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'vue-html',
     'name': 'Vue HTML',
-    'import': (() => import('./langs/vue-html.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/vue-html')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'vyper',
@@ -1243,12 +1243,12 @@ export const bundledLanguagesInfo: BundledLanguageInfo[] = [
     'aliases': [
       'vy'
     ],
-    'import': (() => import('./langs/vyper.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/vyper')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'wasm',
     'name': 'WebAssembly',
-    'import': (() => import('./langs/wasm.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/wasm')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'wenyan',
@@ -1256,12 +1256,12 @@ export const bundledLanguagesInfo: BundledLanguageInfo[] = [
     'aliases': [
       '文言'
     ],
-    'import': (() => import('./langs/wenyan.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/wenyan')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'wgsl',
     'name': 'WGSL',
-    'import': (() => import('./langs/wgsl.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/wgsl')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'wikitext',
@@ -1270,7 +1270,7 @@ export const bundledLanguagesInfo: BundledLanguageInfo[] = [
       'mediawiki',
       'wiki'
     ],
-    'import': (() => import('./langs/wikitext.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/wikitext')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'wolfram',
@@ -1278,17 +1278,17 @@ export const bundledLanguagesInfo: BundledLanguageInfo[] = [
     'aliases': [
       'wl'
     ],
-    'import': (() => import('./langs/wolfram.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/wolfram')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'xml',
     'name': 'XML',
-    'import': (() => import('./langs/xml.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/xml')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'xsl',
     'name': 'XSL',
-    'import': (() => import('./langs/xsl.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/xsl')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'yaml',
@@ -1296,17 +1296,17 @@ export const bundledLanguagesInfo: BundledLanguageInfo[] = [
     'aliases': [
       'yml'
     ],
-    'import': (() => import('./langs/yaml.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/yaml')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'zenscript',
     'name': 'ZenScript',
-    'import': (() => import('./langs/zenscript.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/zenscript')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'zig',
     'name': 'Zig',
-    'import': (() => import('./langs/zig.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/zig')) as DynamicImportLanguageRegistration
   }
 ]
 
diff --git a/packages/shiki/src/langs-bundle-web.ts b/packages/shiki/src/langs-bundle-web.ts
index fd4b8a3d..f9774a87 100644
--- a/packages/shiki/src/langs-bundle-web.ts
+++ b/packages/shiki/src/langs-bundle-web.ts
@@ -1,31 +1,31 @@
-// Generated by scripts/prepare.ts
-import type { DynamicImportLanguageRegistration, BundledLanguageInfo } from '@shikijs/core'
+// Generated by packages/langs/scripts/prepare.ts
+import type { DynamicImportLanguageRegistration, BundledLanguageInfo } from '@shikijs/types'
 
 export const bundledLanguagesInfo: BundledLanguageInfo[] = [
   {
     'id': 'angular-html',
     'name': 'Angular HTML',
-    'import': (() => import('./langs/angular-html.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/angular-html')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'angular-ts',
     'name': 'Angular TypeScript',
-    'import': (() => import('./langs/angular-ts.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/angular-ts')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'astro',
     'name': 'Astro',
-    'import': (() => import('./langs/astro.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/astro')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'blade',
     'name': 'Blade',
-    'import': (() => import('./langs/blade.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/blade')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'c',
     'name': 'C',
-    'import': (() => import('./langs/c.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/c')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'coffee',
@@ -33,7 +33,7 @@ export const bundledLanguagesInfo: BundledLanguageInfo[] = [
     'aliases': [
       'coffeescript'
     ],
-    'import': (() => import('./langs/coffee.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/coffee')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'cpp',
@@ -41,17 +41,17 @@ export const bundledLanguagesInfo: BundledLanguageInfo[] = [
     'aliases': [
       'c++'
     ],
-    'import': (() => import('./langs/cpp.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/cpp')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'css',
     'name': 'CSS',
-    'import': (() => import('./langs/css.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/css')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'glsl',
     'name': 'GLSL',
-    'import': (() => import('./langs/glsl.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/glsl')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'graphql',
@@ -59,12 +59,12 @@ export const bundledLanguagesInfo: BundledLanguageInfo[] = [
     'aliases': [
       'gql'
     ],
-    'import': (() => import('./langs/graphql.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/graphql')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'haml',
     'name': 'Ruby Haml',
-    'import': (() => import('./langs/haml.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/haml')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'handlebars',
@@ -72,32 +72,32 @@ export const bundledLanguagesInfo: BundledLanguageInfo[] = [
     'aliases': [
       'hbs'
     ],
-    'import': (() => import('./langs/handlebars.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/handlebars')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'html',
     'name': 'HTML',
-    'import': (() => import('./langs/html.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/html')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'html-derivative',
     'name': 'HTML (Derivative)',
-    'import': (() => import('./langs/html-derivative.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/html-derivative')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'http',
     'name': 'HTTP',
-    'import': (() => import('./langs/http.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/http')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'imba',
     'name': 'Imba',
-    'import': (() => import('./langs/imba.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/imba')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'java',
     'name': 'Java',
-    'import': (() => import('./langs/java.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/java')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'javascript',
@@ -105,42 +105,42 @@ export const bundledLanguagesInfo: BundledLanguageInfo[] = [
     'aliases': [
       'js'
     ],
-    'import': (() => import('./langs/javascript.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/javascript')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'jinja',
     'name': 'Jinja',
-    'import': (() => import('./langs/jinja.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/jinja')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'jison',
     'name': 'Jison',
-    'import': (() => import('./langs/jison.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/jison')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'json',
     'name': 'JSON',
-    'import': (() => import('./langs/json.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/json')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'json5',
     'name': 'JSON5',
-    'import': (() => import('./langs/json5.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/json5')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'jsonc',
     'name': 'JSON with Comments',
-    'import': (() => import('./langs/jsonc.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/jsonc')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'jsonl',
     'name': 'JSON Lines',
-    'import': (() => import('./langs/jsonl.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/jsonl')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'jsx',
     'name': 'JSX',
-    'import': (() => import('./langs/jsx.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/jsx')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'julia',
@@ -148,12 +148,12 @@ export const bundledLanguagesInfo: BundledLanguageInfo[] = [
     'aliases': [
       'jl'
     ],
-    'import': (() => import('./langs/julia.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/julia')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'less',
     'name': 'Less',
-    'import': (() => import('./langs/less.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/less')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'markdown',
@@ -161,32 +161,32 @@ export const bundledLanguagesInfo: BundledLanguageInfo[] = [
     'aliases': [
       'md'
     ],
-    'import': (() => import('./langs/markdown.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/markdown')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'marko',
     'name': 'Marko',
-    'import': (() => import('./langs/marko.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/marko')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'mdc',
     'name': 'MDC',
-    'import': (() => import('./langs/mdc.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/mdc')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'mdx',
     'name': 'MDX',
-    'import': (() => import('./langs/mdx.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/mdx')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'php',
     'name': 'PHP',
-    'import': (() => import('./langs/php.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/php')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'postcss',
     'name': 'PostCSS',
-    'import': (() => import('./langs/postcss.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/postcss')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'pug',
@@ -194,7 +194,7 @@ export const bundledLanguagesInfo: BundledLanguageInfo[] = [
     'aliases': [
       'jade'
     ],
-    'import': (() => import('./langs/pug.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/pug')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'python',
@@ -202,12 +202,12 @@ export const bundledLanguagesInfo: BundledLanguageInfo[] = [
     'aliases': [
       'py'
     ],
-    'import': (() => import('./langs/python.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/python')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'r',
     'name': 'R',
-    'import': (() => import('./langs/r.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/r')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'regexp',
@@ -215,17 +215,17 @@ export const bundledLanguagesInfo: BundledLanguageInfo[] = [
     'aliases': [
       'regex'
     ],
-    'import': (() => import('./langs/regexp.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/regexp')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'sass',
     'name': 'Sass',
-    'import': (() => import('./langs/sass.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/sass')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'scss',
     'name': 'SCSS',
-    'import': (() => import('./langs/scss.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/scss')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'shellscript',
@@ -236,12 +236,12 @@ export const bundledLanguagesInfo: BundledLanguageInfo[] = [
       'shell',
       'zsh'
     ],
-    'import': (() => import('./langs/shellscript.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/shellscript')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'sql',
     'name': 'SQL',
-    'import': (() => import('./langs/sql.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/sql')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'stylus',
@@ -249,12 +249,12 @@ export const bundledLanguagesInfo: BundledLanguageInfo[] = [
     'aliases': [
       'styl'
     ],
-    'import': (() => import('./langs/stylus.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/stylus')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'svelte',
     'name': 'Svelte',
-    'import': (() => import('./langs/svelte.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/svelte')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'ts-tags',
@@ -262,12 +262,12 @@ export const bundledLanguagesInfo: BundledLanguageInfo[] = [
     'aliases': [
       'lit'
     ],
-    'import': (() => import('./langs/ts-tags.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/ts-tags')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'tsx',
     'name': 'TSX',
-    'import': (() => import('./langs/tsx.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/tsx')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'typescript',
@@ -275,32 +275,32 @@ export const bundledLanguagesInfo: BundledLanguageInfo[] = [
     'aliases': [
       'ts'
     ],
-    'import': (() => import('./langs/typescript.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/typescript')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'vue',
     'name': 'Vue',
-    'import': (() => import('./langs/vue.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/vue')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'vue-html',
     'name': 'Vue HTML',
-    'import': (() => import('./langs/vue-html.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/vue-html')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'wasm',
     'name': 'WebAssembly',
-    'import': (() => import('./langs/wasm.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/wasm')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'wgsl',
     'name': 'WGSL',
-    'import': (() => import('./langs/wgsl.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/wgsl')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'xml',
     'name': 'XML',
-    'import': (() => import('./langs/xml.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/xml')) as DynamicImportLanguageRegistration
   },
   {
     'id': 'yaml',
@@ -308,7 +308,7 @@ export const bundledLanguagesInfo: BundledLanguageInfo[] = [
     'aliases': [
       'yml'
     ],
-    'import': (() => import('./langs/yaml.mjs')) as DynamicImportLanguageRegistration
+    'import': (() => import('@shikijs/langs/yaml')) as DynamicImportLanguageRegistration
   }
 ]
 
diff --git a/packages/shiki/src/themes.ts b/packages/shiki/src/themes.ts
index 8da62c14..9aad94ca 100644
--- a/packages/shiki/src/themes.ts
+++ b/packages/shiki/src/themes.ts
@@ -1,4 +1,4 @@
-// Generated by scripts/prepare.ts
+// Generated by packages/themes/scripts/prepare.ts
 import type { DynamicImportThemeRegistration, BundledThemeInfo } from '@shikijs/core'
 
 export const bundledThemesInfo: BundledThemeInfo[] = [
@@ -6,325 +6,325 @@ export const bundledThemesInfo: BundledThemeInfo[] = [
     "id": "andromeeda",
     "displayName": "Andromeeda",
     "type": "dark",
-    "import": (() => import('./themes/andromeeda.mjs')) as unknown as DynamicImportThemeRegistration
+    "import": (() => import('@shikijs/themes/andromeeda')) as unknown as DynamicImportThemeRegistration
   },
   {
     "id": "aurora-x",
     "displayName": "Aurora X",
     "type": "dark",
-    "import": (() => import('./themes/aurora-x.mjs')) as unknown as DynamicImportThemeRegistration
+    "import": (() => import('@shikijs/themes/aurora-x')) as unknown as DynamicImportThemeRegistration
   },
   {
     "id": "ayu-dark",
     "displayName": "Ayu Dark",
     "type": "dark",
-    "import": (() => import('./themes/ayu-dark.mjs')) as unknown as DynamicImportThemeRegistration
+    "import": (() => import('@shikijs/themes/ayu-dark')) as unknown as DynamicImportThemeRegistration
   },
   {
     "id": "catppuccin-frappe",
     "displayName": "Catppuccin Frappé",
     "type": "dark",
-    "import": (() => import('./themes/catppuccin-frappe.mjs')) as unknown as DynamicImportThemeRegistration
+    "import": (() => import('@shikijs/themes/catppuccin-frappe')) as unknown as DynamicImportThemeRegistration
   },
   {
     "id": "catppuccin-latte",
     "displayName": "Catppuccin Latte",
     "type": "light",
-    "import": (() => import('./themes/catppuccin-latte.mjs')) as unknown as DynamicImportThemeRegistration
+    "import": (() => import('@shikijs/themes/catppuccin-latte')) as unknown as DynamicImportThemeRegistration
   },
   {
     "id": "catppuccin-macchiato",
     "displayName": "Catppuccin Macchiato",
     "type": "dark",
-    "import": (() => import('./themes/catppuccin-macchiato.mjs')) as unknown as DynamicImportThemeRegistration
+    "import": (() => import('@shikijs/themes/catppuccin-macchiato')) as unknown as DynamicImportThemeRegistration
   },
   {
     "id": "catppuccin-mocha",
     "displayName": "Catppuccin Mocha",
     "type": "dark",
-    "import": (() => import('./themes/catppuccin-mocha.mjs')) as unknown as DynamicImportThemeRegistration
+    "import": (() => import('@shikijs/themes/catppuccin-mocha')) as unknown as DynamicImportThemeRegistration
   },
   {
     "id": "dark-plus",
     "displayName": "Dark Plus",
     "type": "dark",
-    "import": (() => import('./themes/dark-plus.mjs')) as unknown as DynamicImportThemeRegistration
+    "import": (() => import('@shikijs/themes/dark-plus')) as unknown as DynamicImportThemeRegistration
   },
   {
     "id": "dracula",
     "displayName": "Dracula Theme",
     "type": "dark",
-    "import": (() => import('./themes/dracula.mjs')) as unknown as DynamicImportThemeRegistration
+    "import": (() => import('@shikijs/themes/dracula')) as unknown as DynamicImportThemeRegistration
   },
   {
     "id": "dracula-soft",
     "displayName": "Dracula Theme Soft",
     "type": "dark",
-    "import": (() => import('./themes/dracula-soft.mjs')) as unknown as DynamicImportThemeRegistration
+    "import": (() => import('@shikijs/themes/dracula-soft')) as unknown as DynamicImportThemeRegistration
   },
   {
     "id": "everforest-dark",
     "displayName": "Everforest Dark",
     "type": "dark",
-    "import": (() => import('./themes/everforest-dark.mjs')) as unknown as DynamicImportThemeRegistration
+    "import": (() => import('@shikijs/themes/everforest-dark')) as unknown as DynamicImportThemeRegistration
   },
   {
     "id": "everforest-light",
     "displayName": "Everforest Light",
     "type": "light",
-    "import": (() => import('./themes/everforest-light.mjs')) as unknown as DynamicImportThemeRegistration
+    "import": (() => import('@shikijs/themes/everforest-light')) as unknown as DynamicImportThemeRegistration
   },
   {
     "id": "github-dark",
     "displayName": "GitHub Dark",
     "type": "dark",
-    "import": (() => import('./themes/github-dark.mjs')) as unknown as DynamicImportThemeRegistration
+    "import": (() => import('@shikijs/themes/github-dark')) as unknown as DynamicImportThemeRegistration
   },
   {
     "id": "github-dark-default",
     "displayName": "GitHub Dark Default",
     "type": "dark",
-    "import": (() => import('./themes/github-dark-default.mjs')) as unknown as DynamicImportThemeRegistration
+    "import": (() => import('@shikijs/themes/github-dark-default')) as unknown as DynamicImportThemeRegistration
   },
   {
     "id": "github-dark-dimmed",
     "displayName": "GitHub Dark Dimmed",
     "type": "dark",
-    "import": (() => import('./themes/github-dark-dimmed.mjs')) as unknown as DynamicImportThemeRegistration
+    "import": (() => import('@shikijs/themes/github-dark-dimmed')) as unknown as DynamicImportThemeRegistration
   },
   {
     "id": "github-dark-high-contrast",
     "displayName": "GitHub Dark High Contrast",
     "type": "dark",
-    "import": (() => import('./themes/github-dark-high-contrast.mjs')) as unknown as DynamicImportThemeRegistration
+    "import": (() => import('@shikijs/themes/github-dark-high-contrast')) as unknown as DynamicImportThemeRegistration
   },
   {
     "id": "github-light",
     "displayName": "GitHub Light",
     "type": "light",
-    "import": (() => import('./themes/github-light.mjs')) as unknown as DynamicImportThemeRegistration
+    "import": (() => import('@shikijs/themes/github-light')) as unknown as DynamicImportThemeRegistration
   },
   {
     "id": "github-light-default",
     "displayName": "GitHub Light Default",
     "type": "light",
-    "import": (() => import('./themes/github-light-default.mjs')) as unknown as DynamicImportThemeRegistration
+    "import": (() => import('@shikijs/themes/github-light-default')) as unknown as DynamicImportThemeRegistration
   },
   {
     "id": "github-light-high-contrast",
     "displayName": "GitHub Light High Contrast",
     "type": "light",
-    "import": (() => import('./themes/github-light-high-contrast.mjs')) as unknown as DynamicImportThemeRegistration
+    "import": (() => import('@shikijs/themes/github-light-high-contrast')) as unknown as DynamicImportThemeRegistration
   },
   {
     "id": "houston",
     "displayName": "Houston",
     "type": "dark",
-    "import": (() => import('./themes/houston.mjs')) as unknown as DynamicImportThemeRegistration
+    "import": (() => import('@shikijs/themes/houston')) as unknown as DynamicImportThemeRegistration
   },
   {
     "id": "kanagawa-dragon",
     "displayName": "Kanagawa Dragon",
     "type": "dark",
-    "import": (() => import('./themes/kanagawa-dragon.mjs')) as unknown as DynamicImportThemeRegistration
+    "import": (() => import('@shikijs/themes/kanagawa-dragon')) as unknown as DynamicImportThemeRegistration
   },
   {
     "id": "kanagawa-lotus",
     "displayName": "Kanagawa Lotus",
     "type": "light",
-    "import": (() => import('./themes/kanagawa-lotus.mjs')) as unknown as DynamicImportThemeRegistration
+    "import": (() => import('@shikijs/themes/kanagawa-lotus')) as unknown as DynamicImportThemeRegistration
   },
   {
     "id": "kanagawa-wave",
     "displayName": "Kanagawa Wave",
     "type": "dark",
-    "import": (() => import('./themes/kanagawa-wave.mjs')) as unknown as DynamicImportThemeRegistration
+    "import": (() => import('@shikijs/themes/kanagawa-wave')) as unknown as DynamicImportThemeRegistration
   },
   {
     "id": "laserwave",
     "displayName": "LaserWave",
     "type": "dark",
-    "import": (() => import('./themes/laserwave.mjs')) as unknown as DynamicImportThemeRegistration
+    "import": (() => import('@shikijs/themes/laserwave')) as unknown as DynamicImportThemeRegistration
   },
   {
     "id": "light-plus",
     "displayName": "Light Plus",
     "type": "light",
-    "import": (() => import('./themes/light-plus.mjs')) as unknown as DynamicImportThemeRegistration
+    "import": (() => import('@shikijs/themes/light-plus')) as unknown as DynamicImportThemeRegistration
   },
   {
     "id": "material-theme",
     "displayName": "Material Theme",
     "type": "dark",
-    "import": (() => import('./themes/material-theme.mjs')) as unknown as DynamicImportThemeRegistration
+    "import": (() => import('@shikijs/themes/material-theme')) as unknown as DynamicImportThemeRegistration
   },
   {
     "id": "material-theme-darker",
     "displayName": "Material Theme Darker",
     "type": "dark",
-    "import": (() => import('./themes/material-theme-darker.mjs')) as unknown as DynamicImportThemeRegistration
+    "import": (() => import('@shikijs/themes/material-theme-darker')) as unknown as DynamicImportThemeRegistration
   },
   {
     "id": "material-theme-lighter",
     "displayName": "Material Theme Lighter",
     "type": "light",
-    "import": (() => import('./themes/material-theme-lighter.mjs')) as unknown as DynamicImportThemeRegistration
+    "import": (() => import('@shikijs/themes/material-theme-lighter')) as unknown as DynamicImportThemeRegistration
   },
   {
     "id": "material-theme-ocean",
     "displayName": "Material Theme Ocean",
     "type": "dark",
-    "import": (() => import('./themes/material-theme-ocean.mjs')) as unknown as DynamicImportThemeRegistration
+    "import": (() => import('@shikijs/themes/material-theme-ocean')) as unknown as DynamicImportThemeRegistration
   },
   {
     "id": "material-theme-palenight",
     "displayName": "Material Theme Palenight",
     "type": "dark",
-    "import": (() => import('./themes/material-theme-palenight.mjs')) as unknown as DynamicImportThemeRegistration
+    "import": (() => import('@shikijs/themes/material-theme-palenight')) as unknown as DynamicImportThemeRegistration
   },
   {
     "id": "min-dark",
     "displayName": "Min Dark",
     "type": "dark",
-    "import": (() => import('./themes/min-dark.mjs')) as unknown as DynamicImportThemeRegistration
+    "import": (() => import('@shikijs/themes/min-dark')) as unknown as DynamicImportThemeRegistration
   },
   {
     "id": "min-light",
     "displayName": "Min Light",
     "type": "light",
-    "import": (() => import('./themes/min-light.mjs')) as unknown as DynamicImportThemeRegistration
+    "import": (() => import('@shikijs/themes/min-light')) as unknown as DynamicImportThemeRegistration
   },
   {
     "id": "monokai",
     "displayName": "Monokai",
     "type": "dark",
-    "import": (() => import('./themes/monokai.mjs')) as unknown as DynamicImportThemeRegistration
+    "import": (() => import('@shikijs/themes/monokai')) as unknown as DynamicImportThemeRegistration
   },
   {
     "id": "night-owl",
     "displayName": "Night Owl",
     "type": "dark",
-    "import": (() => import('./themes/night-owl.mjs')) as unknown as DynamicImportThemeRegistration
+    "import": (() => import('@shikijs/themes/night-owl')) as unknown as DynamicImportThemeRegistration
   },
   {
     "id": "nord",
     "displayName": "Nord",
     "type": "dark",
-    "import": (() => import('./themes/nord.mjs')) as unknown as DynamicImportThemeRegistration
+    "import": (() => import('@shikijs/themes/nord')) as unknown as DynamicImportThemeRegistration
   },
   {
     "id": "one-dark-pro",
     "displayName": "One Dark Pro",
     "type": "dark",
-    "import": (() => import('./themes/one-dark-pro.mjs')) as unknown as DynamicImportThemeRegistration
+    "import": (() => import('@shikijs/themes/one-dark-pro')) as unknown as DynamicImportThemeRegistration
   },
   {
     "id": "one-light",
     "displayName": "One Light",
     "type": "light",
-    "import": (() => import('./themes/one-light.mjs')) as unknown as DynamicImportThemeRegistration
+    "import": (() => import('@shikijs/themes/one-light')) as unknown as DynamicImportThemeRegistration
   },
   {
     "id": "plastic",
     "displayName": "Plastic",
     "type": "dark",
-    "import": (() => import('./themes/plastic.mjs')) as unknown as DynamicImportThemeRegistration
+    "import": (() => import('@shikijs/themes/plastic')) as unknown as DynamicImportThemeRegistration
   },
   {
     "id": "poimandres",
     "displayName": "Poimandres",
     "type": "dark",
-    "import": (() => import('./themes/poimandres.mjs')) as unknown as DynamicImportThemeRegistration
+    "import": (() => import('@shikijs/themes/poimandres')) as unknown as DynamicImportThemeRegistration
   },
   {
     "id": "red",
     "displayName": "Red",
     "type": "dark",
-    "import": (() => import('./themes/red.mjs')) as unknown as DynamicImportThemeRegistration
+    "import": (() => import('@shikijs/themes/red')) as unknown as DynamicImportThemeRegistration
   },
   {
     "id": "rose-pine",
     "displayName": "Rosé Pine",
     "type": "dark",
-    "import": (() => import('./themes/rose-pine.mjs')) as unknown as DynamicImportThemeRegistration
+    "import": (() => import('@shikijs/themes/rose-pine')) as unknown as DynamicImportThemeRegistration
   },
   {
     "id": "rose-pine-dawn",
     "displayName": "Rosé Pine Dawn",
     "type": "light",
-    "import": (() => import('./themes/rose-pine-dawn.mjs')) as unknown as DynamicImportThemeRegistration
+    "import": (() => import('@shikijs/themes/rose-pine-dawn')) as unknown as DynamicImportThemeRegistration
   },
   {
     "id": "rose-pine-moon",
     "displayName": "Rosé Pine Moon",
     "type": "dark",
-    "import": (() => import('./themes/rose-pine-moon.mjs')) as unknown as DynamicImportThemeRegistration
+    "import": (() => import('@shikijs/themes/rose-pine-moon')) as unknown as DynamicImportThemeRegistration
   },
   {
     "id": "slack-dark",
     "displayName": "Slack Dark",
     "type": "dark",
-    "import": (() => import('./themes/slack-dark.mjs')) as unknown as DynamicImportThemeRegistration
+    "import": (() => import('@shikijs/themes/slack-dark')) as unknown as DynamicImportThemeRegistration
   },
   {
     "id": "slack-ochin",
     "displayName": "Slack Ochin",
     "type": "light",
-    "import": (() => import('./themes/slack-ochin.mjs')) as unknown as DynamicImportThemeRegistration
+    "import": (() => import('@shikijs/themes/slack-ochin')) as unknown as DynamicImportThemeRegistration
   },
   {
     "id": "snazzy-light",
     "displayName": "Snazzy Light",
     "type": "light",
-    "import": (() => import('./themes/snazzy-light.mjs')) as unknown as DynamicImportThemeRegistration
+    "import": (() => import('@shikijs/themes/snazzy-light')) as unknown as DynamicImportThemeRegistration
   },
   {
     "id": "solarized-dark",
     "displayName": "Solarized Dark",
     "type": "dark",
-    "import": (() => import('./themes/solarized-dark.mjs')) as unknown as DynamicImportThemeRegistration
+    "import": (() => import('@shikijs/themes/solarized-dark')) as unknown as DynamicImportThemeRegistration
   },
   {
     "id": "solarized-light",
     "displayName": "Solarized Light",
     "type": "light",
-    "import": (() => import('./themes/solarized-light.mjs')) as unknown as DynamicImportThemeRegistration
+    "import": (() => import('@shikijs/themes/solarized-light')) as unknown as DynamicImportThemeRegistration
   },
   {
     "id": "synthwave-84",
     "displayName": "Synthwave '84",
     "type": "dark",
-    "import": (() => import('./themes/synthwave-84.mjs')) as unknown as DynamicImportThemeRegistration
+    "import": (() => import('@shikijs/themes/synthwave-84')) as unknown as DynamicImportThemeRegistration
   },
   {
     "id": "tokyo-night",
     "displayName": "Tokyo Night",
     "type": "dark",
-    "import": (() => import('./themes/tokyo-night.mjs')) as unknown as DynamicImportThemeRegistration
+    "import": (() => import('@shikijs/themes/tokyo-night')) as unknown as DynamicImportThemeRegistration
   },
   {
     "id": "vesper",
     "displayName": "Vesper",
     "type": "dark",
-    "import": (() => import('./themes/vesper.mjs')) as unknown as DynamicImportThemeRegistration
+    "import": (() => import('@shikijs/themes/vesper')) as unknown as DynamicImportThemeRegistration
   },
   {
     "id": "vitesse-black",
     "displayName": "Vitesse Black",
     "type": "dark",
-    "import": (() => import('./themes/vitesse-black.mjs')) as unknown as DynamicImportThemeRegistration
+    "import": (() => import('@shikijs/themes/vitesse-black')) as unknown as DynamicImportThemeRegistration
   },
   {
     "id": "vitesse-dark",
     "displayName": "Vitesse Dark",
     "type": "dark",
-    "import": (() => import('./themes/vitesse-dark.mjs')) as unknown as DynamicImportThemeRegistration
+    "import": (() => import('@shikijs/themes/vitesse-dark')) as unknown as DynamicImportThemeRegistration
   },
   {
     "id": "vitesse-light",
     "displayName": "Vitesse Light",
     "type": "light",
-    "import": (() => import('./themes/vitesse-light.mjs')) as unknown as DynamicImportThemeRegistration
+    "import": (() => import('@shikijs/themes/vitesse-light')) as unknown as DynamicImportThemeRegistration
   }
 ]
 
diff --git a/packages/themes/README.md b/packages/themes/README.md
new file mode 100644
index 00000000..24ceca16
--- /dev/null
+++ b/packages/themes/README.md
@@ -0,0 +1,7 @@
+# @shikijs/themes
+
+TextMate themes for Shiki.
+
+## License
+
+MIT
diff --git a/packages/themes/package.json b/packages/themes/package.json
new file mode 100644
index 00000000..00c25bfb
--- /dev/null
+++ b/packages/themes/package.json
@@ -0,0 +1,94 @@
+{
+  "name": "@shikijs/themes",
+  "type": "module",
+  "version": "1.24.4",
+  "description": "TextMate themes for Shiki in ESM",
+  "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/themes"
+  },
+  "bugs": "https://github.com/shikijs/shiki/issues",
+  "keywords": [
+    "shiki",
+    "textmate-themes"
+  ],
+  "sideEffects": false,
+  "exports": {
+    ".": "./dist/index.mjs",
+    "./andromeeda": "./dist/andromeeda.mjs",
+    "./aurora-x": "./dist/aurora-x.mjs",
+    "./ayu-dark": "./dist/ayu-dark.mjs",
+    "./catppuccin-frappe": "./dist/catppuccin-frappe.mjs",
+    "./catppuccin-latte": "./dist/catppuccin-latte.mjs",
+    "./catppuccin-macchiato": "./dist/catppuccin-macchiato.mjs",
+    "./catppuccin-mocha": "./dist/catppuccin-mocha.mjs",
+    "./dark-plus": "./dist/dark-plus.mjs",
+    "./dracula": "./dist/dracula.mjs",
+    "./dracula-soft": "./dist/dracula-soft.mjs",
+    "./everforest-dark": "./dist/everforest-dark.mjs",
+    "./everforest-light": "./dist/everforest-light.mjs",
+    "./github-dark": "./dist/github-dark.mjs",
+    "./github-dark-default": "./dist/github-dark-default.mjs",
+    "./github-dark-dimmed": "./dist/github-dark-dimmed.mjs",
+    "./github-dark-high-contrast": "./dist/github-dark-high-contrast.mjs",
+    "./github-light": "./dist/github-light.mjs",
+    "./github-light-default": "./dist/github-light-default.mjs",
+    "./github-light-high-contrast": "./dist/github-light-high-contrast.mjs",
+    "./houston": "./dist/houston.mjs",
+    "./kanagawa-dragon": "./dist/kanagawa-dragon.mjs",
+    "./kanagawa-lotus": "./dist/kanagawa-lotus.mjs",
+    "./kanagawa-wave": "./dist/kanagawa-wave.mjs",
+    "./laserwave": "./dist/laserwave.mjs",
+    "./light-plus": "./dist/light-plus.mjs",
+    "./material-theme": "./dist/material-theme.mjs",
+    "./material-theme-darker": "./dist/material-theme-darker.mjs",
+    "./material-theme-lighter": "./dist/material-theme-lighter.mjs",
+    "./material-theme-ocean": "./dist/material-theme-ocean.mjs",
+    "./material-theme-palenight": "./dist/material-theme-palenight.mjs",
+    "./min-dark": "./dist/min-dark.mjs",
+    "./min-light": "./dist/min-light.mjs",
+    "./monokai": "./dist/monokai.mjs",
+    "./night-owl": "./dist/night-owl.mjs",
+    "./nord": "./dist/nord.mjs",
+    "./one-dark-pro": "./dist/one-dark-pro.mjs",
+    "./one-light": "./dist/one-light.mjs",
+    "./plastic": "./dist/plastic.mjs",
+    "./poimandres": "./dist/poimandres.mjs",
+    "./red": "./dist/red.mjs",
+    "./rose-pine": "./dist/rose-pine.mjs",
+    "./rose-pine-dawn": "./dist/rose-pine-dawn.mjs",
+    "./rose-pine-moon": "./dist/rose-pine-moon.mjs",
+    "./slack-dark": "./dist/slack-dark.mjs",
+    "./slack-ochin": "./dist/slack-ochin.mjs",
+    "./snazzy-light": "./dist/snazzy-light.mjs",
+    "./solarized-dark": "./dist/solarized-dark.mjs",
+    "./solarized-light": "./dist/solarized-light.mjs",
+    "./synthwave-84": "./dist/synthwave-84.mjs",
+    "./tokyo-night": "./dist/tokyo-night.mjs",
+    "./vesper": "./dist/vesper.mjs",
+    "./vitesse-black": "./dist/vitesse-black.mjs",
+    "./vitesse-dark": "./dist/vitesse-dark.mjs",
+    "./vitesse-light": "./dist/vitesse-light.mjs"
+  },
+  "main": "./dist/index.mjs",
+  "module": "./dist/index.mjs",
+  "types": "./dist/index.d.mts",
+  "files": [
+    "dist"
+  ],
+  "scripts": {
+    "prepare": "esno scripts/prepare.ts",
+    "build": "pnpm prepare",
+    "prepublishOnly": "nr prepare"
+  },
+  "dependencies": {
+    "@shikijs/types": "workspace:*"
+  },
+  "devDependencies": {
+    "tm-themes": "catalog:"
+  }
+}
diff --git a/packages/themes/scripts/prepare.ts b/packages/themes/scripts/prepare.ts
new file mode 100644
index 00000000..b0b4f03f
--- /dev/null
+++ b/packages/themes/scripts/prepare.ts
@@ -0,0 +1,6 @@
+import fs from 'fs-extra'
+import { prepareTheme } from './themes'
+
+await fs.ensureDir('./dist')
+await fs.emptyDir('./dist')
+await prepareTheme()
diff --git a/packages/shiki/scripts/prepare/themes.ts b/packages/themes/scripts/themes.ts
similarity index 58%
rename from packages/shiki/scripts/prepare/themes.ts
rename to packages/themes/scripts/themes.ts
index 57749d82..9e86b24b 100644
--- a/packages/shiki/scripts/prepare/themes.ts
+++ b/packages/themes/scripts/themes.ts
@@ -1,6 +1,5 @@
 import fs from 'fs-extra'
 import { themes as allThemes } from 'tm-themes'
-import { COMMENT_HEAD } from './constants'
 
 export async function prepareTheme(): Promise<void> {
   const themes = await Promise.all(allThemes
@@ -8,7 +7,7 @@ export async function prepareTheme(): Promise<void> {
       const theme = await fs.readJSON(`./node_modules/tm-themes/themes/${t.name}.json`)
 
       await fs.writeFile(
-        `./src/themes/${t.name}.mjs`,
+        `./dist/${t.name}.mjs`,
         `/* Theme: ${theme.name} */
 export default Object.freeze(JSON.parse(${JSON.stringify(JSON.stringify(theme))}))
 `,
@@ -16,7 +15,7 @@ export default Object.freeze(JSON.parse(${JSON.stringify(JSON.stringify(theme))}
       )
 
       await fs.writeFile(
-        `./src/themes/${t.name}.d.mts`,
+        `./dist/${t.name}.d.mts`,
         `import type { ThemeRegistration } from '@shikijs/core'
 const theme: ThemeRegistration
 export default theme
@@ -28,12 +27,41 @@ export default theme
         id: t.name,
         displayName: theme.displayName,
         type: theme.type,
-        import: `__(() => import('./themes/${t.name}.mjs')) as unknown as DynamicImportThemeRegistration__`,
+        import: `__(() => import('@shikijs/themes/${t.name}')) as unknown as DynamicImportThemeRegistration__`,
       }
     }))
+
+  await fs.writeFile(
+    'dist/index.mjs',
+    `export const themeNames = [
+${themes.map(i => `  '${i.id}',`).join('\n')}
+]
+`,
+    'utf-8',
+  )
+
+  await fs.writeFile(
+    'dist/index.d.mts',
+    `export const themeNames: readonly string[]
+`,
+    'utf-8',
+  )
+
+  const packageJson = JSON.parse(await fs.readFile('./package.json', 'utf-8'))
+  packageJson.exports = {
+    '.': './dist/index.mjs',
+    ...Object.fromEntries(
+      themes.map(i => [
+        `./${i.id}`,
+        `./dist/${i.id}.mjs`,
+      ]),
+    ),
+  }
+  await fs.writeFile('./package.json', `${JSON.stringify(packageJson, null, 2)}\n`, 'utf-8')
+
   await fs.writeFile(
-    'src/themes.ts',
-    `${COMMENT_HEAD}
+    '../shiki/src/themes.ts',
+    `// Generated by packages/themes/scripts/prepare.ts
 import type { DynamicImportThemeRegistration, BundledThemeInfo } from '@shikijs/core'
 
 export const bundledThemesInfo: BundledThemeInfo[] = ${JSON.stringify(themes, null, 2).replace(/"__|__"/g, '')}
diff --git a/packages/transformers/package.json b/packages/transformers/package.json
index 1e3ef46e..8e110925 100644
--- a/packages/transformers/package.json
+++ b/packages/transformers/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@shikijs/transformers",
   "type": "module",
-  "version": "1.24.3",
+  "version": "1.24.4",
   "description": "Collective of common transformers transformers for Shiki",
   "author": "Anthony Fu <anthonyfu117@hotmail.com>",
   "license": "MIT",
diff --git a/packages/twoslash/package.json b/packages/twoslash/package.json
index 254da55a..9a05719b 100644
--- a/packages/twoslash/package.json
+++ b/packages/twoslash/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@shikijs/twoslash",
   "type": "module",
-  "version": "1.24.3",
+  "version": "1.24.4",
   "description": "Shiki transformer for twoslash",
   "author": "Anthony Fu <anthonyfu117@hotmail.com>",
   "license": "MIT",
diff --git a/packages/types/package.json b/packages/types/package.json
index 2270ed05..21e9f1d1 100644
--- a/packages/types/package.json
+++ b/packages/types/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@shikijs/types",
   "type": "module",
-  "version": "1.24.3",
+  "version": "1.24.4",
   "description": "Type definitions for Shiki",
   "author": "Anthony Fu <anthonyfu117@hotmail.com>",
   "license": "MIT",
diff --git a/packages/vitepress-twoslash/package.json b/packages/vitepress-twoslash/package.json
index c2251638..d5f2e5d7 100644
--- a/packages/vitepress-twoslash/package.json
+++ b/packages/vitepress-twoslash/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@shikijs/vitepress-twoslash",
   "type": "module",
-  "version": "1.24.3",
+  "version": "1.24.4",
   "description": "Enable Twoslash support in VitePress",
   "author": "Anthony Fu <anthonyfu117@hotmail.com>",
   "license": "MIT",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index a902e125..61068f49 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -10,8 +10,8 @@ catalogs:
       specifier: ^3.12.0
       version: 3.12.0
     '@antfu/ni':
-      specifier: ^0.23.1
-      version: 0.23.1
+      specifier: ^0.23.2
+      version: 0.23.2
     '@antfu/utils':
       specifier: ^0.7.10
       version: 0.7.10
@@ -61,8 +61,8 @@ catalogs:
       specifier: ^22.10.2
       version: 22.10.2
     '@unocss/reset':
-      specifier: ^0.65.1
-      version: 0.65.1
+      specifier: ^0.65.2
+      version: 0.65.2
     '@vitest/coverage-v8':
       specifier: 2.0.5
       version: 2.0.5
@@ -76,8 +76,8 @@ catalogs:
       specifier: ^9.9.1
       version: 9.9.1
     chalk:
-      specifier: ^5.3.0
-      version: 5.3.0
+      specifier: ^5.4.1
+      version: 5.4.1
     eslint:
       specifier: ^9.17.0
       version: 9.17.0
@@ -109,8 +109,8 @@ catalogs:
       specifier: ^3.0.1
       version: 3.0.1
     jiti:
-      specifier: ^2.4.1
-      version: 2.4.1
+      specifier: ^2.4.2
+      version: 2.4.2
     jsonc-parser:
       specifier: ^3.3.1
       version: 3.3.1
@@ -142,8 +142,8 @@ catalogs:
       specifier: ^1.1.4
       version: 1.1.4
     oniguruma-to-es:
-      specifier: 0.8.0
-      version: 0.8.0
+      specifier: 0.9.0
+      version: 0.9.0
     picocolors:
       specifier: ^1.1.1
       version: 1.1.1
@@ -151,8 +151,8 @@ catalogs:
       specifier: ^2.3.0
       version: 2.3.0
     pnpm:
-      specifier: ^9.15.0
-      version: 9.15.0
+      specifier: ^9.15.1
+      version: 9.15.1
     prettier:
       specifier: ^3.4.2
       version: 3.4.2
@@ -193,8 +193,8 @@ catalogs:
       specifier: ^0.18.0
       version: 0.18.0
     tm-grammars:
-      specifier: ^1.21.8
-      version: 1.21.8
+      specifier: ^1.21.9
+      version: 1.21.9
     tm-themes:
       specifier: ^1.9.5
       version: 1.9.5
@@ -211,8 +211,8 @@ catalogs:
       specifier: ^5.0.0
       version: 5.0.0
     unocss:
-      specifier: ^0.65.1
-      version: 0.65.1
+      specifier: ^0.65.2
+      version: 0.65.2
     unplugin-vue-components:
       specifier: ^0.28.0
       version: 0.28.0
@@ -235,8 +235,8 @@ catalogs:
       specifier: ^2.1.10
       version: 2.1.10
     wrangler:
-      specifier: ^3.96.0
-      version: 3.96.0
+      specifier: ^3.99.0
+      version: 3.99.0
 
 overrides:
   '@shikijs/compat': workspace:*
@@ -251,11 +251,11 @@ overrides:
   '@types/hast': ^3.0.4
   '@types/mdast': ^4.0.4
   '@types/unist': ^3.0.3
-  rollup: ^4.28.1
+  rollup: ^4.29.1
   shiki: workspace:*
   typescript: ~5.6.3
   unified: ^11.0.5
-  vite: ^6.0.3
+  vite: ^6.0.5
   vscode-oniguruma: ^1.7.0
 
 importers:
@@ -264,31 +264,31 @@ importers:
     devDependencies:
       '@antfu/eslint-config':
         specifier: 'catalog:'
-        version: 3.12.0(@typescript-eslint/utils@8.18.0(eslint@9.17.0(jiti@2.4.1))(typescript@5.6.3))(@vue/compiler-sfc@3.5.13)(eslint-plugin-format@0.1.3(eslint@9.17.0(jiti@2.4.1)))(eslint@9.17.0(jiti@2.4.1))(typescript@5.6.3)(vitest@2.0.5(@types/node@22.10.2)(jiti@2.4.1)(terser@5.32.0)(tsx@4.19.1)(yaml@2.6.1))
+        version: 3.12.0(@typescript-eslint/utils@8.18.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.6.3))(@vue/compiler-sfc@3.5.13)(eslint-plugin-format@0.1.3(eslint@9.17.0(jiti@2.4.2)))(eslint@9.17.0(jiti@2.4.2))(typescript@5.6.3)(vitest@2.0.5(@types/node@22.10.2)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.1)(yaml@2.6.1))
       '@antfu/ni':
         specifier: 'catalog:'
-        version: 0.23.1
+        version: 0.23.2
       '@antfu/utils':
         specifier: 'catalog:'
         version: 0.7.10
       '@rollup/plugin-alias':
         specifier: 'catalog:'
-        version: 5.1.1(rollup@4.28.1)
+        version: 5.1.1(rollup@4.29.1)
       '@rollup/plugin-commonjs':
         specifier: 'catalog:'
-        version: 28.0.2(rollup@4.28.1)
+        version: 28.0.2(rollup@4.29.1)
       '@rollup/plugin-json':
         specifier: 'catalog:'
-        version: 6.1.0(rollup@4.28.1)
+        version: 6.1.0(rollup@4.29.1)
       '@rollup/plugin-node-resolve':
         specifier: 'catalog:'
-        version: 16.0.0(rollup@4.28.1)
+        version: 16.0.0(rollup@4.29.1)
       '@rollup/plugin-replace':
         specifier: 'catalog:'
-        version: 6.0.2(rollup@4.28.1)
+        version: 6.0.2(rollup@4.29.1)
       '@rollup/plugin-terser':
         specifier: 'catalog:'
-        version: 0.4.4(rollup@4.28.1)
+        version: 0.4.4(rollup@4.29.1)
       '@shikijs/engine-javascript':
         specifier: workspace:*
         version: link:packages/engine-javascript
@@ -321,7 +321,7 @@ importers:
         version: 22.10.2
       '@vitest/coverage-v8':
         specifier: 'catalog:'
-        version: 2.0.5(vitest@2.0.5(@types/node@22.10.2)(jiti@2.4.1)(terser@5.32.0)(tsx@4.19.1)(yaml@2.6.1))
+        version: 2.0.5(vitest@2.0.5(@types/node@22.10.2)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.1)(yaml@2.6.1))
       ansi-sequence-parser:
         specifier: 'catalog:'
         version: 1.1.1
@@ -333,10 +333,10 @@ importers:
         version: 0.1.1
       eslint:
         specifier: 'catalog:'
-        version: 9.17.0(jiti@2.4.1)
+        version: 9.17.0(jiti@2.4.2)
       eslint-plugin-format:
         specifier: 'catalog:'
-        version: 0.1.3(eslint@9.17.0(jiti@2.4.1))
+        version: 0.1.3(eslint@9.17.0(jiti@2.4.2))
       esno:
         specifier: 'catalog:'
         version: 4.8.0
@@ -348,7 +348,7 @@ importers:
         version: 11.2.0
       jiti:
         specifier: 'catalog:'
-        version: 2.4.1
+        version: 2.4.2
       jsonc-parser:
         specifier: 'catalog:'
         version: 3.3.1
@@ -378,7 +378,7 @@ importers:
         version: 1.1.1
       pnpm:
         specifier: 'catalog:'
-        version: 9.15.0
+        version: 9.15.1
       prettier:
         specifier: 'catalog:'
         version: 3.4.2
@@ -386,20 +386,20 @@ importers:
         specifier: 'catalog:'
         version: 6.0.1
       rollup:
-        specifier: ^4.28.1
-        version: 4.28.1
+        specifier: ^4.29.1
+        version: 4.29.1
       rollup-plugin-copy:
         specifier: 'catalog:'
         version: 3.5.0
       rollup-plugin-dts:
         specifier: 'catalog:'
-        version: 6.1.1(rollup@4.28.1)(typescript@5.6.3)
+        version: 6.1.1(rollup@4.29.1)(typescript@5.6.3)
       rollup-plugin-esbuild:
         specifier: 'catalog:'
-        version: 6.1.1(esbuild@0.17.19)(rollup@4.28.1)
+        version: 6.1.1(esbuild@0.17.19)(rollup@4.29.1)
       rollup-plugin-typescript2:
         specifier: 'catalog:'
-        version: 0.36.0(rollup@4.28.1)(typescript@5.6.3)
+        version: 0.36.0(rollup@4.29.1)(typescript@5.6.3)
       shiki:
         specifier: workspace:*
         version: link:packages/shiki
@@ -416,23 +416,23 @@ importers:
         specifier: 'catalog:'
         version: 3.0.1(typescript@5.6.3)(vue-tsc@2.1.10(typescript@5.6.3))(vue@3.5.13(typescript@5.6.3))
       vite:
-        specifier: ^6.0.3
-        version: 6.0.3(@types/node@22.10.2)(jiti@2.4.1)(terser@5.32.0)(tsx@4.19.1)(yaml@2.6.1)
+        specifier: ^6.0.5
+        version: 6.0.5(@types/node@22.10.2)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.1)(yaml@2.6.1)
       vite-tsconfig-paths:
         specifier: 'catalog:'
-        version: 5.1.4(typescript@5.6.3)(vite@6.0.3(@types/node@22.10.2)(jiti@2.4.1)(terser@5.32.0)(tsx@4.19.1)(yaml@2.6.1))
+        version: 5.1.4(typescript@5.6.3)(vite@6.0.5(@types/node@22.10.2)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.1)(yaml@2.6.1))
       vitepress-plugin-mermaid:
         specifier: 'catalog:'
-        version: 2.0.17(mermaid@10.9.1)(vitepress@1.5.0(@algolia/client-search@4.24.0)(@types/node@22.10.2)(fuse.js@7.0.0)(jiti@2.4.1)(postcss@8.4.49)(search-insights@2.17.1)(terser@5.32.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.6.1))
+        version: 2.0.17(mermaid@10.9.1)(vitepress@1.5.0(@algolia/client-search@4.24.0)(@types/node@22.10.2)(fuse.js@7.0.0)(jiti@2.4.2)(postcss@8.4.49)(search-insights@2.17.1)(terser@5.32.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.6.1))
       vitest:
         specifier: 'catalog:'
-        version: 2.0.5(@types/node@22.10.2)(jiti@2.4.1)(terser@5.32.0)(tsx@4.19.1)(yaml@2.6.1)
+        version: 2.0.5(@types/node@22.10.2)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.1)(yaml@2.6.1)
       vue-tsc:
         specifier: 'catalog:'
         version: 2.1.10(typescript@5.6.3)
       wrangler:
         specifier: 'catalog:'
-        version: 3.96.0
+        version: 3.99.0
 
   docs:
     dependencies:
@@ -457,7 +457,7 @@ importers:
         version: link:../packages/twoslash
       '@unocss/reset':
         specifier: 'catalog:'
-        version: 0.65.1
+        version: 0.65.2
       '@vueuse/core':
         specifier: 'catalog:'
         version: 12.0.0(typescript@5.6.3)
@@ -472,13 +472,13 @@ importers:
         version: link:../packages/shiki
       unocss:
         specifier: 'catalog:'
-        version: 0.65.1(postcss@8.4.49)(rollup@4.28.1)(vite@6.0.3(@types/node@22.10.2)(jiti@2.4.1)(terser@5.32.0)(tsx@4.19.1)(yaml@2.6.1))(vue@3.5.13(typescript@5.6.3))
+        version: 0.65.2(postcss@8.4.49)(rollup@4.29.1)(vite@6.0.5(@types/node@22.10.2)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.1)(yaml@2.6.1))(vue@3.5.13(typescript@5.6.3))
       unplugin-vue-components:
         specifier: 'catalog:'
-        version: 0.28.0(@babel/parser@7.26.3)(rollup@4.28.1)(vue@3.5.13(typescript@5.6.3))
+        version: 0.28.0(@babel/parser@7.26.3)(rollup@4.29.1)(vue@3.5.13(typescript@5.6.3))
       vitepress:
         specifier: 'catalog:'
-        version: 1.5.0(@algolia/client-search@4.24.0)(@types/node@22.10.2)(fuse.js@7.0.0)(jiti@2.4.1)(postcss@8.4.49)(search-insights@2.17.1)(terser@5.32.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.6.1)
+        version: 1.5.0(@algolia/client-search@4.24.0)(@types/node@22.10.2)(fuse.js@7.0.0)(jiti@2.4.2)(postcss@8.4.49)(search-insights@2.17.1)(terser@5.32.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.6.1)
       vue:
         specifier: 'catalog:'
         version: 3.5.13(typescript@5.6.3)
@@ -490,7 +490,7 @@ importers:
         version: 9.3.1
       chalk:
         specifier: 'catalog:'
-        version: 5.3.0
+        version: 5.4.1
       minimist:
         specifier: 'catalog:'
         version: 1.2.8
@@ -555,7 +555,7 @@ importers:
         version: 9.3.1
       oniguruma-to-es:
         specifier: 'catalog:'
-        version: 0.8.0
+        version: 0.9.0
 
   packages/engine-oniguruma:
     dependencies:
@@ -570,6 +570,16 @@ importers:
         specifier: ^1.7.0
         version: 1.7.0
 
+  packages/langs:
+    dependencies:
+      '@shikijs/types':
+        specifier: workspace:*
+        version: link:../types
+    devDependencies:
+      tm-grammars:
+        specifier: ^1.21.10
+        version: 1.21.10
+
   packages/markdown-it:
     dependencies:
       markdown-it:
@@ -608,8 +618,8 @@ importers:
         specifier: ~5.6.3
         version: 5.6.3
       vite:
-        specifier: ^6.0.3
-        version: 6.0.3(@types/node@22.10.2)(jiti@2.4.1)(terser@5.32.0)(tsx@4.19.1)(yaml@2.6.1)
+        specifier: ^6.0.5
+        version: 6.0.5(@types/node@22.10.2)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.1)(yaml@2.6.1)
 
   packages/rehype:
     dependencies:
@@ -659,6 +669,12 @@ importers:
       '@shikijs/engine-oniguruma':
         specifier: workspace:*
         version: link:../engine-oniguruma
+      '@shikijs/langs':
+        specifier: workspace:*
+        version: link:../langs
+      '@shikijs/themes':
+        specifier: workspace:*
+        version: link:../themes
       '@shikijs/types':
         specifier: workspace:*
         version: link:../types
@@ -674,7 +690,7 @@ importers:
         version: 3.5.0
       tm-grammars:
         specifier: 'catalog:'
-        version: 1.21.8
+        version: 1.21.9
       tm-themes:
         specifier: 'catalog:'
         version: 1.9.5
@@ -682,6 +698,16 @@ importers:
         specifier: ^1.7.0
         version: 1.7.0
 
+  packages/themes:
+    dependencies:
+      '@shikijs/types':
+        specifier: workspace:*
+        version: link:../types
+    devDependencies:
+      tm-themes:
+        specifier: 'catalog:'
+        version: 1.9.5
+
   packages/transformers:
     dependencies:
       shiki:
@@ -878,8 +904,8 @@ packages:
   '@antfu/install-pkg@0.5.0':
     resolution: {integrity: sha512-dKnk2xlAyC7rvTkpkHmu+Qy/2Zc3Vm/l8PtNyIOGDBtXPY3kThfU4ORNEp3V7SXw5XSOb+tOJaUYpfquPzL/Tg==}
 
-  '@antfu/ni@0.23.1':
-    resolution: {integrity: sha512-VFAvMTJhjP6L7CuBKT5FioDCSpdmZxJ4POKTJOrFNicI2CK6mlaRwVEBGWLGm2V6BtQgdbBn9X68piHSbw5wQQ==}
+  '@antfu/ni@0.23.2':
+    resolution: {integrity: sha512-FSEVWXvwroExDXUu8qV6Wqp2X3D1nJ0Li4LFymCyvCVrm7I3lNfG0zZWSWvGU1RE7891eTnFTyh31L3igOwNKQ==}
     hasBin: true
 
   '@antfu/utils@0.7.10':
@@ -968,32 +994,32 @@ packages:
     resolution: {integrity: sha512-YLPHc8yASwjNkmcDMQMY35yiWjoKAKnhUbPRszBRS0YgH+IXtsMp61j+yTcnCE3oO2DgP0U3iejLC8FTtKDC8Q==}
     engines: {node: '>=16.13'}
 
-  '@cloudflare/workerd-darwin-64@1.20241205.0':
-    resolution: {integrity: sha512-TArEZkSZkHJyEwnlWWkSpCI99cF6lJ14OVeEoI9Um/+cD9CKZLM9vCmsLeKglKheJ0KcdCnkA+DbeD15t3VaWg==}
+  '@cloudflare/workerd-darwin-64@1.20241218.0':
+    resolution: {integrity: sha512-8rveQoxtUvlmORKqTWgjv2ycM8uqWox0u9evn3zd2iWKdou5sncFwH517ZRLI3rq9P31ZLmCQBZ0gloFsTeY6w==}
     engines: {node: '>=16'}
     cpu: [x64]
     os: [darwin]
 
-  '@cloudflare/workerd-darwin-arm64@1.20241205.0':
-    resolution: {integrity: sha512-u5eqKa9QRdA8MugfgCoD+ADDjY6EpKbv3hSYJETmmUh17l7WXjWBzv4pUvOKIX67C0UzMUy4jZYwC53MymhX3w==}
+  '@cloudflare/workerd-darwin-arm64@1.20241218.0':
+    resolution: {integrity: sha512-be59Ad9nmM9lCkhHqmTs/uZ3JVZt8NJ9Z0PY+B0xnc5z6WwmV2lj0RVLtq7xJhQsQJA189zt5rXqDP6J+2mu7Q==}
     engines: {node: '>=16'}
     cpu: [arm64]
     os: [darwin]
 
-  '@cloudflare/workerd-linux-64@1.20241205.0':
-    resolution: {integrity: sha512-OYA7S5zpumMamWEW+IhhBU6YojIEocyE5X/YFPiTOCrDE3dsfr9t6oqNE7hxGm1VAAu+Irtl+a/5LwmBOU681w==}
+  '@cloudflare/workerd-linux-64@1.20241218.0':
+    resolution: {integrity: sha512-MzpSBcfZXRxrYWxQ4pVDYDrUbkQuM62ssl4ZtHH8J35OAeGsWFAYji6MkS2SpVwVcvacPwJXIF4JSzp4xKImKw==}
     engines: {node: '>=16'}
     cpu: [x64]
     os: [linux]
 
-  '@cloudflare/workerd-linux-arm64@1.20241205.0':
-    resolution: {integrity: sha512-qAzecONjFJGIAVJZKExQ5dlbic0f3d4A+GdKa+H6SoUJtPaWiE3K6WuePo4JOT7W3/Zfh25McmX+MmpMUUcM5Q==}
+  '@cloudflare/workerd-linux-arm64@1.20241218.0':
+    resolution: {integrity: sha512-RIuJjPxpNqvwIs52vQsXeRMttvhIjgg9NLjjFa3jK8Ijnj8c3ZDru9Wqi48lJP07yDFIRr4uDMMqh/y29YQi2A==}
     engines: {node: '>=16'}
     cpu: [arm64]
     os: [linux]
 
-  '@cloudflare/workerd-windows-64@1.20241205.0':
-    resolution: {integrity: sha512-BEab+HiUgCdl6GXAT7EI2yaRtDPiRJlB94XLvRvXi1ZcmQqsrq6awGo6apctFo4WUL29V7c09LxmN4HQ3X2Tvg==}
+  '@cloudflare/workerd-windows-64@1.20241218.0':
+    resolution: {integrity: sha512-tO1VjlvK3F6Yb2d1jgEy/QBYl//9Pyv3K0j+lq8Eu7qdfm0IgKwSRgDWLept84/qmNsQfausZ4JdNGxTf9xsxQ==}
     engines: {node: '>=16'}
     cpu: [x64]
     os: [win32]
@@ -1571,8 +1597,8 @@ packages:
   '@iconify/types@2.0.0':
     resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==}
 
-  '@iconify/utils@2.1.33':
-    resolution: {integrity: sha512-jP9h6v/g0BIZx0p7XGJJVtkVnydtbgTgt9mVNcGDYwaa7UhdHdI9dvoq+gKj9sijMSJKxUPEG2JyjsgXjxL7Kw==}
+  '@iconify/utils@2.2.1':
+    resolution: {integrity: sha512-0/7J7hk4PqXmxo5PDBDxmnecw5PxklZJfNjIVG9FM0mEfVrvfudS22rYWsqVk6gR3UJ/mSYS90X4R3znXnqfNA==}
 
   '@isaacs/cliui@8.0.2':
     resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
@@ -1636,7 +1662,7 @@ packages:
     resolution: {integrity: sha512-PR9zDb+rOzkRb2VD+EuKB7UC41vU5DIwZ5qqCpk0KJudcWAyi8rvYOhS7+L5aZCspw1stTViLgN5v6FF1p5cgQ==}
     engines: {node: '>=14.0.0'}
     peerDependencies:
-      rollup: ^4.28.1
+      rollup: ^4.29.1
     peerDependenciesMeta:
       rollup:
         optional: true
@@ -1645,7 +1671,7 @@ packages:
     resolution: {integrity: sha512-BEFI2EDqzl+vA1rl97IDRZ61AIwGH093d9nz8+dThxJNH8oSoB7MjWvPCX3dkaK1/RCJ/1v/R1XB15FuSs0fQw==}
     engines: {node: '>=16.0.0 || 14 >= 14.17'}
     peerDependencies:
-      rollup: ^4.28.1
+      rollup: ^4.29.1
     peerDependenciesMeta:
       rollup:
         optional: true
@@ -1654,7 +1680,7 @@ packages:
     resolution: {integrity: sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==}
     engines: {node: '>=14.0.0'}
     peerDependencies:
-      rollup: ^4.28.1
+      rollup: ^4.29.1
     peerDependenciesMeta:
       rollup:
         optional: true
@@ -1663,7 +1689,7 @@ packages:
     resolution: {integrity: sha512-9eO5McEICxMzJpDW9OnMYSv4Sta3hmt7VtBFz5zR9273suNOydOyq/FrGeGy+KsTRFm8w0SLVhzig2ILFT63Ag==}
     engines: {node: '>=14.0.0'}
     peerDependencies:
-      rollup: ^4.28.1
+      rollup: ^4.29.1
     peerDependenciesMeta:
       rollup:
         optional: true
@@ -1672,7 +1698,7 @@ packages:
     resolution: {integrity: sha512-0FPvAeVUT/zdWoO0jnb/V5BlBsUSNfkIOtFHzMO4H9MOklrmQFY6FduVHKucNb/aTFxvnGhj4MNj/T1oNdDfNg==}
     engines: {node: '>=14.0.0'}
     peerDependencies:
-      rollup: ^4.28.1
+      rollup: ^4.29.1
     peerDependenciesMeta:
       rollup:
         optional: true
@@ -1681,7 +1707,7 @@ packages:
     resolution: {integrity: sha512-7QaYCf8bqF04dOy7w/eHmJeNExxTYwvKAmlSAH/EaWWUzbT0h5sbF6bktFoX/0F/0qwng5/dWFMyf3gzaM8DsQ==}
     engines: {node: '>=14.0.0'}
     peerDependencies:
-      rollup: ^4.28.1
+      rollup: ^4.29.1
     peerDependenciesMeta:
       rollup:
         optional: true
@@ -1690,7 +1716,7 @@ packages:
     resolution: {integrity: sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A==}
     engines: {node: '>=14.0.0'}
     peerDependencies:
-      rollup: ^4.28.1
+      rollup: ^4.29.1
     peerDependenciesMeta:
       rollup:
         optional: true
@@ -1703,103 +1729,103 @@ packages:
     resolution: {integrity: sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==}
     engines: {node: '>=14.0.0'}
     peerDependencies:
-      rollup: ^4.28.1
+      rollup: ^4.29.1
     peerDependenciesMeta:
       rollup:
         optional: true
 
-  '@rollup/rollup-android-arm-eabi@4.28.1':
-    resolution: {integrity: sha512-2aZp8AES04KI2dy3Ss6/MDjXbwBzj+i0GqKtWXgw2/Ma6E4jJvujryO6gJAghIRVz7Vwr9Gtl/8na3nDUKpraQ==}
+  '@rollup/rollup-android-arm-eabi@4.29.1':
+    resolution: {integrity: sha512-ssKhA8RNltTZLpG6/QNkCSge+7mBQGUqJRisZ2MDQcEGaK93QESEgWK2iOpIDZ7k9zPVkG5AS3ksvD5ZWxmItw==}
     cpu: [arm]
     os: [android]
 
-  '@rollup/rollup-android-arm64@4.28.1':
-    resolution: {integrity: sha512-EbkK285O+1YMrg57xVA+Dp0tDBRB93/BZKph9XhMjezf6F4TpYjaUSuPt5J0fZXlSag0LmZAsTmdGGqPp4pQFA==}
+  '@rollup/rollup-android-arm64@4.29.1':
+    resolution: {integrity: sha512-CaRfrV0cd+NIIcVVN/jx+hVLN+VRqnuzLRmfmlzpOzB87ajixsN/+9L5xNmkaUUvEbI5BmIKS+XTwXsHEb65Ew==}
     cpu: [arm64]
     os: [android]
 
-  '@rollup/rollup-darwin-arm64@4.28.1':
-    resolution: {integrity: sha512-prduvrMKU6NzMq6nxzQw445zXgaDBbMQvmKSJaxpaZ5R1QDM8w+eGxo6Y/jhT/cLoCvnZI42oEqf9KQNYz1fqQ==}
+  '@rollup/rollup-darwin-arm64@4.29.1':
+    resolution: {integrity: sha512-2ORr7T31Y0Mnk6qNuwtyNmy14MunTAMx06VAPI6/Ju52W10zk1i7i5U3vlDRWjhOI5quBcrvhkCHyF76bI7kEw==}
     cpu: [arm64]
     os: [darwin]
 
-  '@rollup/rollup-darwin-x64@4.28.1':
-    resolution: {integrity: sha512-WsvbOunsUk0wccO/TV4o7IKgloJ942hVFK1CLatwv6TJspcCZb9umQkPdvB7FihmdxgaKR5JyxDjWpCOp4uZlQ==}
+  '@rollup/rollup-darwin-x64@4.29.1':
+    resolution: {integrity: sha512-j/Ej1oanzPjmN0tirRd5K2/nncAhS9W6ICzgxV+9Y5ZsP0hiGhHJXZ2JQ53iSSjj8m6cRY6oB1GMzNn2EUt6Ng==}
     cpu: [x64]
     os: [darwin]
 
-  '@rollup/rollup-freebsd-arm64@4.28.1':
-    resolution: {integrity: sha512-HTDPdY1caUcU4qK23FeeGxCdJF64cKkqajU0iBnTVxS8F7H/7BewvYoG+va1KPSL63kQ1PGNyiwKOfReavzvNA==}
+  '@rollup/rollup-freebsd-arm64@4.29.1':
+    resolution: {integrity: sha512-91C//G6Dm/cv724tpt7nTyP+JdN12iqeXGFM1SqnljCmi5yTXriH7B1r8AD9dAZByHpKAumqP1Qy2vVNIdLZqw==}
     cpu: [arm64]
     os: [freebsd]
 
-  '@rollup/rollup-freebsd-x64@4.28.1':
-    resolution: {integrity: sha512-m/uYasxkUevcFTeRSM9TeLyPe2QDuqtjkeoTpP9SW0XxUWfcYrGDMkO/m2tTw+4NMAF9P2fU3Mw4ahNvo7QmsQ==}
+  '@rollup/rollup-freebsd-x64@4.29.1':
+    resolution: {integrity: sha512-hEioiEQ9Dec2nIRoeHUP6hr1PSkXzQaCUyqBDQ9I9ik4gCXQZjJMIVzoNLBRGet+hIUb3CISMh9KXuCcWVW/8w==}
     cpu: [x64]
     os: [freebsd]
 
-  '@rollup/rollup-linux-arm-gnueabihf@4.28.1':
-    resolution: {integrity: sha512-QAg11ZIt6mcmzpNE6JZBpKfJaKkqTm1A9+y9O+frdZJEuhQxiugM05gnCWiANHj4RmbgeVJpTdmKRmH/a+0QbA==}
+  '@rollup/rollup-linux-arm-gnueabihf@4.29.1':
+    resolution: {integrity: sha512-Py5vFd5HWYN9zxBv3WMrLAXY3yYJ6Q/aVERoeUFwiDGiMOWsMs7FokXihSOaT/PMWUty/Pj60XDQndK3eAfE6A==}
     cpu: [arm]
     os: [linux]
 
-  '@rollup/rollup-linux-arm-musleabihf@4.28.1':
-    resolution: {integrity: sha512-dRP9PEBfolq1dmMcFqbEPSd9VlRuVWEGSmbxVEfiq2cs2jlZAl0YNxFzAQS2OrQmsLBLAATDMb3Z6MFv5vOcXg==}
+  '@rollup/rollup-linux-arm-musleabihf@4.29.1':
+    resolution: {integrity: sha512-RiWpGgbayf7LUcuSNIbahr0ys2YnEERD4gYdISA06wa0i8RALrnzflh9Wxii7zQJEB2/Eh74dX4y/sHKLWp5uQ==}
     cpu: [arm]
     os: [linux]
 
-  '@rollup/rollup-linux-arm64-gnu@4.28.1':
-    resolution: {integrity: sha512-uGr8khxO+CKT4XU8ZUH1TTEUtlktK6Kgtv0+6bIFSeiSlnGJHG1tSFSjm41uQ9sAO/5ULx9mWOz70jYLyv1QkA==}
+  '@rollup/rollup-linux-arm64-gnu@4.29.1':
+    resolution: {integrity: sha512-Z80O+taYxTQITWMjm/YqNoe9d10OX6kDh8X5/rFCMuPqsKsSyDilvfg+vd3iXIqtfmp+cnfL1UrYirkaF8SBZA==}
     cpu: [arm64]
     os: [linux]
 
-  '@rollup/rollup-linux-arm64-musl@4.28.1':
-    resolution: {integrity: sha512-QF54q8MYGAqMLrX2t7tNpi01nvq5RI59UBNx+3+37zoKX5KViPo/gk2QLhsuqok05sSCRluj0D00LzCwBikb0A==}
+  '@rollup/rollup-linux-arm64-musl@4.29.1':
+    resolution: {integrity: sha512-fOHRtF9gahwJk3QVp01a/GqS4hBEZCV1oKglVVq13kcK3NeVlS4BwIFzOHDbmKzt3i0OuHG4zfRP0YoG5OF/rA==}
     cpu: [arm64]
     os: [linux]
 
-  '@rollup/rollup-linux-loongarch64-gnu@4.28.1':
-    resolution: {integrity: sha512-vPul4uodvWvLhRco2w0GcyZcdyBfpfDRgNKU+p35AWEbJ/HPs1tOUrkSueVbBS0RQHAf/A+nNtDpvw95PeVKOA==}
+  '@rollup/rollup-linux-loongarch64-gnu@4.29.1':
+    resolution: {integrity: sha512-5a7q3tnlbcg0OodyxcAdrrCxFi0DgXJSoOuidFUzHZ2GixZXQs6Tc3CHmlvqKAmOs5eRde+JJxeIf9DonkmYkw==}
     cpu: [loong64]
     os: [linux]
 
-  '@rollup/rollup-linux-powerpc64le-gnu@4.28.1':
-    resolution: {integrity: sha512-pTnTdBuC2+pt1Rmm2SV7JWRqzhYpEILML4PKODqLz+C7Ou2apEV52h19CR7es+u04KlqplggmN9sqZlekg3R1A==}
+  '@rollup/rollup-linux-powerpc64le-gnu@4.29.1':
+    resolution: {integrity: sha512-9b4Mg5Yfz6mRnlSPIdROcfw1BU22FQxmfjlp/CShWwO3LilKQuMISMTtAu/bxmmrE6A902W2cZJuzx8+gJ8e9w==}
     cpu: [ppc64]
     os: [linux]
 
-  '@rollup/rollup-linux-riscv64-gnu@4.28.1':
-    resolution: {integrity: sha512-vWXy1Nfg7TPBSuAncfInmAI/WZDd5vOklyLJDdIRKABcZWojNDY0NJwruY2AcnCLnRJKSaBgf/GiJfauu8cQZA==}
+  '@rollup/rollup-linux-riscv64-gnu@4.29.1':
+    resolution: {integrity: sha512-G5pn0NChlbRM8OJWpJFMX4/i8OEU538uiSv0P6roZcbpe/WfhEO+AT8SHVKfp8qhDQzaz7Q+1/ixMy7hBRidnQ==}
     cpu: [riscv64]
     os: [linux]
 
-  '@rollup/rollup-linux-s390x-gnu@4.28.1':
-    resolution: {integrity: sha512-/yqC2Y53oZjb0yz8PVuGOQQNOTwxcizudunl/tFs1aLvObTclTwZ0JhXF2XcPT/zuaymemCDSuuUPXJJyqeDOg==}
+  '@rollup/rollup-linux-s390x-gnu@4.29.1':
+    resolution: {integrity: sha512-WM9lIkNdkhVwiArmLxFXpWndFGuOka4oJOZh8EP3Vb8q5lzdSCBuhjavJsw68Q9AKDGeOOIHYzYm4ZFvmWez5g==}
     cpu: [s390x]
     os: [linux]
 
-  '@rollup/rollup-linux-x64-gnu@4.28.1':
-    resolution: {integrity: sha512-fzgeABz7rrAlKYB0y2kSEiURrI0691CSL0+KXwKwhxvj92VULEDQLpBYLHpF49MSiPG4sq5CK3qHMnb9tlCjBw==}
+  '@rollup/rollup-linux-x64-gnu@4.29.1':
+    resolution: {integrity: sha512-87xYCwb0cPGZFoGiErT1eDcssByaLX4fc0z2nRM6eMtV9njAfEE6OW3UniAoDhX4Iq5xQVpE6qO9aJbCFumKYQ==}
     cpu: [x64]
     os: [linux]
 
-  '@rollup/rollup-linux-x64-musl@4.28.1':
-    resolution: {integrity: sha512-xQTDVzSGiMlSshpJCtudbWyRfLaNiVPXt1WgdWTwWz9n0U12cI2ZVtWe/Jgwyv/6wjL7b66uu61Vg0POWVfz4g==}
+  '@rollup/rollup-linux-x64-musl@4.29.1':
+    resolution: {integrity: sha512-xufkSNppNOdVRCEC4WKvlR1FBDyqCSCpQeMMgv9ZyXqqtKBfkw1yfGMTUTs9Qsl6WQbJnsGboWCp7pJGkeMhKA==}
     cpu: [x64]
     os: [linux]
 
-  '@rollup/rollup-win32-arm64-msvc@4.28.1':
-    resolution: {integrity: sha512-wSXmDRVupJstFP7elGMgv+2HqXelQhuNf+IS4V+nUpNVi/GUiBgDmfwD0UGN3pcAnWsgKG3I52wMOBnk1VHr/A==}
+  '@rollup/rollup-win32-arm64-msvc@4.29.1':
+    resolution: {integrity: sha512-F2OiJ42m77lSkizZQLuC+jiZ2cgueWQL5YC9tjo3AgaEw+KJmVxHGSyQfDUoYR9cci0lAywv2Clmckzulcq6ig==}
     cpu: [arm64]
     os: [win32]
 
-  '@rollup/rollup-win32-ia32-msvc@4.28.1':
-    resolution: {integrity: sha512-ZkyTJ/9vkgrE/Rk9vhMXhf8l9D+eAhbAVbsGsXKy2ohmJaWg0LPQLnIxRdRp/bKyr8tXuPlXhIoGlEB5XpJnGA==}
+  '@rollup/rollup-win32-ia32-msvc@4.29.1':
+    resolution: {integrity: sha512-rYRe5S0FcjlOBZQHgbTKNrqxCBUmgDJem/VQTCcTnA2KCabYSWQDrytOzX7avb79cAAweNmMUb/Zw18RNd4mng==}
     cpu: [ia32]
     os: [win32]
 
-  '@rollup/rollup-win32-x64-msvc@4.28.1':
-    resolution: {integrity: sha512-ZvK2jBafvttJjoIdKm/Q/Bh7IJ1Ose9IBOwpOXcOvW3ikGTQGmKDgxTC6oCAzW6PynbkKP8+um1du81XJHZ0JA==}
+  '@rollup/rollup-win32-x64-msvc@4.29.1':
+    resolution: {integrity: sha512-+10CMg9vt1MoHj6x1pxyjPSMjHTIlqs8/tBztXvPAx24SKs9jwVnKqHJumlH/IzhaPUaj3T6T6wfZr8okdXaIg==}
     cpu: [x64]
     os: [win32]
 
@@ -1946,91 +1972,91 @@ packages:
   '@ungap/structured-clone@1.2.0':
     resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==}
 
-  '@unocss/astro@0.65.1':
-    resolution: {integrity: sha512-SnSoghbPWNC7Kxia/M0DuaYMcSmmeY7N54TYoNceQl23Ru2HioZvgjAJ+XtrK9B+Rvk+q9irGDTqhcadLVQ3Vg==}
+  '@unocss/astro@0.65.2':
+    resolution: {integrity: sha512-lpGoleJToxaYeN5LTGrNbvbXATNWswgoQwlljIJ9kWOjx4NbGC71pXRvDQSb9yRFDTCr5S2hMtupna4ulrHisA==}
     peerDependencies:
-      vite: ^6.0.3
+      vite: ^6.0.5
     peerDependenciesMeta:
       vite:
         optional: true
 
-  '@unocss/cli@0.65.1':
-    resolution: {integrity: sha512-yV0n7+7hfxHtO+lXSElp8Zy2R5KM1ZVj9UWCemxQTJtKO+2KWk9HvGFR84Hs9+dno06GaOyQgpK1pBfmID0W0w==}
+  '@unocss/cli@0.65.2':
+    resolution: {integrity: sha512-N2SeSeGNNuWUQAtsOC02Uqhm1wCtyoRRmh8ylzA/NttbXJlqg5P03vxGfzmaRA+VJhNLwjFqhYE6Yuu4nqCwlg==}
     engines: {node: '>=14'}
     hasBin: true
 
-  '@unocss/config@0.65.1':
-    resolution: {integrity: sha512-Akf5Vm2bGrUK/a10QBF3GLETFJnwW1G8ThPevrOCj0lBVWKlN5eMQnodyNdoCw+JMPfCPZdg+4lU8cJJIRAAbQ==}
+  '@unocss/config@0.65.2':
+    resolution: {integrity: sha512-HDQVoWwrkZ6qRCXus11bUM12eNoErZ7r4lPY5EQqtrwxAcul+l5StvYk0qXr3IC8Ct42RDjKGeM03o7VBpwafQ==}
     engines: {node: '>=14'}
 
-  '@unocss/core@0.65.1':
-    resolution: {integrity: sha512-Ke0WNZjfSCE6pniJb8PjiwhO6/McxVb1EQYrkkz8aJuR83xu+AEcTog9D4N9EUkRfHS5tZYXQtTj4Uh90T6CEg==}
+  '@unocss/core@0.65.2':
+    resolution: {integrity: sha512-37zj1w/6TENsUMzRRmlH5LqUcLGTTjGHrUeZ5KZyeDk+osB/rHSCw0VqqqvL6a7cOHgaW88JgfgKDt5ijRZyFA==}
 
-  '@unocss/extractor-arbitrary-variants@0.65.1':
-    resolution: {integrity: sha512-VpF7j29TlmVjNolkIjhQ/cwYkuPUoXLv+ko62YRMibE5632QepbNob69pNYGOZustrZt3LvgHD/GcriKwJO4BA==}
+  '@unocss/extractor-arbitrary-variants@0.65.2':
+    resolution: {integrity: sha512-G+Fq7i2mTyFv+RdkbahGJFwUR9FbsGCHi+Wt8Eb7cbELWi/R4mUftfW9/q6NaIRKvmLywjWbEQ31qTJIQEO+PQ==}
 
-  '@unocss/inspector@0.65.1':
-    resolution: {integrity: sha512-RtONVp7rPpfSarr48qVEEsm201JyQSv6M21lqu1IzQZ62LQB5Gmi59Y+XR6cYDtwSn5ZUGxowR7nIRTPBMcxkw==}
+  '@unocss/inspector@0.65.2':
+    resolution: {integrity: sha512-90kBrMiQqHpGzPhT9ot7bDAFs+G9RxWROVxrT/JwDqNe+OmcLh5uETO84NU0ScurniEJ8umGBLqmsPGLmHML2g==}
 
-  '@unocss/postcss@0.65.1':
-    resolution: {integrity: sha512-k7mKObxE4o1gApICri20TpI0lT/dtEQv+uYEOrFz267jgPVo3VD6umHsTOLA+OoQ5Bf7VEYQXSeV0oA96j0o1w==}
+  '@unocss/postcss@0.65.2':
+    resolution: {integrity: sha512-vhBWsXnuWUP7qybnucle+gja1YBjL2NRfzCwSaOoRc7C5y201mqfC55AFqjGdxEAcqeeXVtx98Y1oh0FSa5GzA==}
     engines: {node: '>=14'}
     peerDependencies:
       postcss: ^8.4.21
 
-  '@unocss/preset-attributify@0.65.1':
-    resolution: {integrity: sha512-bmu9JELcpwgrXA5RonvFeWb38RcUz82wpWfyDwKdQRJHD3MnYQ5lN03W4B7nMsAflc4ls7XQZLzhn9iYhbYYqg==}
+  '@unocss/preset-attributify@0.65.2':
+    resolution: {integrity: sha512-Aj67qbRoBPYutJasi7EKUaxKwJwEvhA0SVYjXwZG3kjTTBkp1rJvNI0wGXbdz9FkesymiC1KgzBF2UCsFsZ0dQ==}
 
-  '@unocss/preset-icons@0.65.1':
-    resolution: {integrity: sha512-lFGy4PpfClhiRV6Wwn4w79qd53B7QCkEmsP4YF2Px274X0t2av0QjMH+bvo6TrFIsHGKzq0Lxg836SoaPg5YJA==}
+  '@unocss/preset-icons@0.65.2':
+    resolution: {integrity: sha512-NruqU6PlRzyJT0qJQL3yZ/7KrolIWRfXQf82ZfAktPTHYgvaSS4+KtlStsoYSXLSGjPydMlXuYlj8Pum5rTTjw==}
 
-  '@unocss/preset-mini@0.65.1':
-    resolution: {integrity: sha512-dKIxi+ChWSZvXG8I7yVBjw4FLHdAvKrrCN9bjKpR4/4epKD6jRtEcR6S1wL6XSBWabh7V7D/VbVk+XZ6WsGuXA==}
+  '@unocss/preset-mini@0.65.2':
+    resolution: {integrity: sha512-zDDyFuLylmer91qeQ6qbMCP5+/zIeuZA0epLIriCfW3pR7FXzfJRu4R1ynpQjqryjUs/gwS0OWtvr4ufuwkryg==}
 
-  '@unocss/preset-tagify@0.65.1':
-    resolution: {integrity: sha512-u0yWFXyyBumglFvn87MT7kasa3KPAWTiIHkTCVu8tNEFNfJzR9BZLEXGAtwrhqMm0pSCnDdqupwBLBQoVX8zEA==}
+  '@unocss/preset-tagify@0.65.2':
+    resolution: {integrity: sha512-YFhne3eNfZUvKT/MJ7SgjK/FXLradgZCKc5XXsMXA4YTAhNAvQIUZCNmlBzaqDevwbyF6UlXxGHfHUA8CdpSWg==}
 
-  '@unocss/preset-typography@0.65.1':
-    resolution: {integrity: sha512-/fcgKU+uQ/RISRdJHTuSQh41Td/tAngSUzr+7Ry8f1UqI5NTjtGOixgfByPC+ZZ/V8f1DdjigaVy7Q3c+meUMg==}
+  '@unocss/preset-typography@0.65.2':
+    resolution: {integrity: sha512-k/uOu2ASnBQtotMBsx9pOmCgS+pyn7/4mCiifoeTTLnhMK8F6dcGLbVQkOnUD2hsboKXJ1oHgd+1qX0QVr61ww==}
 
-  '@unocss/preset-uno@0.65.1':
-    resolution: {integrity: sha512-OSEkphrlR9/RM5un9t9AqVQXOGBLJgjcEweZSm2ng9AK7BsxBXuVP1FelmRqeXVYT5uFtBoD4dfgCgBjGFIW9Q==}
+  '@unocss/preset-uno@0.65.2':
+    resolution: {integrity: sha512-8HA21mlXwnkXHhtSKYbBYJTmtJN0ncUPSJKiavNGkJUB4cUUbEeFRx2aNIfhOjKYIcH/MNzRc2YYsAAM2s6vgw==}
 
-  '@unocss/preset-web-fonts@0.65.1':
-    resolution: {integrity: sha512-29TO8kCfvOaHj5O3a3SZIXuOwvg7raPcdmuFKB9KFM3J2pYv4PB1cLBrw6h9DWwAAnJUSQpGx9QmKIBEPnDhlw==}
+  '@unocss/preset-web-fonts@0.65.2':
+    resolution: {integrity: sha512-Pl0sKjhrb6FuDID3PMwGflZXwSVW1G1vZEwCd0yEwYH92421VEfK5D073cUtZ1l6irqIA3aux9uMWA9iKtQj7A==}
 
-  '@unocss/preset-wind@0.65.1':
-    resolution: {integrity: sha512-7rw3hAWOkWMSjoprWKcQidqJRFQm8qM0IdLjFLQa2ROSzPSnIlNisXGEwAphf4/VYdP7+URUnu5eySQsIRWRzg==}
+  '@unocss/preset-wind@0.65.2':
+    resolution: {integrity: sha512-qNBJ6pnh9EYbTztmeJ+uZOB3TPx/JnQVHPGBBRD/v2AT11YR0/umdSKefIHbvXKuw/5/+JAwbFx/jSYu1naG6w==}
 
-  '@unocss/reset@0.65.1':
-    resolution: {integrity: sha512-qyxF7rKGX+Cu3FpV8KCRQbtCvFcBpmzvx5A2wal77tIhrFR5VSH7NzCVmgs2+V9FXvU3aWVNZ79i1KMnLZ5Mjg==}
+  '@unocss/reset@0.65.2':
+    resolution: {integrity: sha512-9UmwqYjfdxyi6j1pMfuulipLCsdH2RlF+IOG53unYxulP4C8bvwMnj8Wk+AjMiG5mIOClYyVTGk3NMRPM73/eg==}
 
-  '@unocss/rule-utils@0.65.1':
-    resolution: {integrity: sha512-XGXdXsRmIuMDQk/3Fd3g5JMhsyDGWsTfs6aN4vFQ1rfdSgY4UwbslqUNbIH9xxoTfmzUOJ2lhNrFw78RygCNSA==}
+  '@unocss/rule-utils@0.65.2':
+    resolution: {integrity: sha512-Rw+B52F53gli5wHRR4dXjFrliH6Q8XaNeg55L2uVmg81lEeQCdxPOe0/KjPIEPQPJHOhCpFS3dCHwNROc+UggQ==}
     engines: {node: '>=14'}
 
-  '@unocss/transformer-attributify-jsx@0.65.1':
-    resolution: {integrity: sha512-FR6pAnsHgflIumSl6Y5J+cWUtt2wNPANFWdGd1jNLpcBXDummEd0U+U9VGOfB8AOT263DW0U0JE7vH5xiwVaog==}
+  '@unocss/transformer-attributify-jsx@0.65.2':
+    resolution: {integrity: sha512-Kan2EPHc65t/iHdjqJvtRgc+lUnq2uSDknsTrOk+w1N/ZmjcbVf2E6VXbxBCqmHowJVipeHrxeVX1POyBm0bTQ==}
 
-  '@unocss/transformer-compile-class@0.65.1':
-    resolution: {integrity: sha512-yTs2u8bxGlTXEQ+XYFuS+kapLuLJr7yvNRRTg1hS+2OFdpT8E/PfxAgdGEzMfmrjommjF4BnJ8AAtK+Wsg5s4w==}
+  '@unocss/transformer-compile-class@0.65.2':
+    resolution: {integrity: sha512-z615DntK0bN0v3QicEGVmzt57yXXB20GhpOBTsShq/nTnTP0v+Av1JTbGQBSg8lzmW0z7QdLhCvSAQs8OKMmRQ==}
 
-  '@unocss/transformer-directives@0.65.1':
-    resolution: {integrity: sha512-6D3QSeSWXCA+Jc+BQGwat0RfcNtYZdyFFpP+zr1cFpK7nwNZqwqZU+mcY8nywu/u+hYuEQMWPMzEYDAssMfUQQ==}
+  '@unocss/transformer-directives@0.65.2':
+    resolution: {integrity: sha512-CwdjBoqWbX5FkJrt6Mpy6nBjppuQV2zvIma5W2rdd5XLsYeR0mhdbbQfgvRF94pFIR86ExfOKu/EI6bGuTcaHA==}
 
-  '@unocss/transformer-variant-group@0.65.1':
-    resolution: {integrity: sha512-LdSPDVpVCrMfgTKtGyWz0KkBXiJqFO8FRhiL4/9Hyaf+ECoWQ7RODgO6dKWyFIZEBjkLFK2toeZZvM+KYQlBlw==}
+  '@unocss/transformer-variant-group@0.65.2':
+    resolution: {integrity: sha512-Sh/WKN7lys2TUVnA3Nu7Yn3rLqy0OqfWSf6PbY1RKAD+N7cRlabu3vJF0gIMwV+rmVQnHs/k9BWjNPlB56Kl/A==}
 
-  '@unocss/vite@0.65.1':
-    resolution: {integrity: sha512-5242hAlgTVUA+tJ9mwo/cpLqD9f4dn5V/prTmtIci0Y7zMsVeBlnQwfsV4MhyTVaF3eFxDy5AUEFiOuXo12rbQ==}
+  '@unocss/vite@0.65.2':
+    resolution: {integrity: sha512-MC2PqDB2tbYky7s1XTBoOAdtvUIwwl65qL1UbHTLYiWO9Q704IZUYvrdtpgieR+8IPu2dG2vUyIe3dbD4zPf9g==}
     peerDependencies:
-      vite: ^6.0.3
+      vite: ^6.0.5
 
   '@vitejs/plugin-vue@5.1.4':
     resolution: {integrity: sha512-N2XSI2n3sQqp5w7Y/AN/L2XDjBIRGqXko+eDp42sydYSBeJuSm5a1sLf8zakmo8u7tA8NmBgoDLA1HeOESjp9A==}
     engines: {node: ^18.0.0 || >=20.0.0}
     peerDependencies:
-      vite: ^6.0.3
+      vite: ^6.0.5
       vue: ^3.2.25
 
   '@vitest/coverage-v8@2.0.5':
@@ -2368,6 +2394,10 @@ packages:
     resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==}
     engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
 
+  chalk@5.4.1:
+    resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==}
+    engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
+
   character-entities-html4@2.1.0:
     resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==}
 
@@ -2508,8 +2538,8 @@ packages:
     resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==}
     engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0}
 
-  css-tree@3.0.1:
-    resolution: {integrity: sha512-8Fxxv+tGhORlshCdCwnNJytvlvq46sOLSYEx2ZIGurahWvMucSRnyjPA3AmrMq4VPRYbHVpWj5VkiVasrM2H4Q==}
+  css-tree@3.1.0:
+    resolution: {integrity: sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==}
     engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0}
 
   css-what@6.1.0:
@@ -3354,9 +3384,6 @@ packages:
     resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
     engines: {node: '>=6'}
 
-  importx@0.4.4:
-    resolution: {integrity: sha512-Lo1pukzAREqrBnnHC+tj+lreMTAvyxtkKsMxLY8H15M/bvLl54p3YuoTI70Tz7Il0AsgSlD7Lrk/FaApRcBL7w==}
-
   importx@0.5.0:
     resolution: {integrity: sha512-qROz3rSOjQYclmEQAajH9RhBuqpAGHM+5CNd9fk+TsF4JKmQsAI1egafW8XZZv8vARCo4nAmmt5d0eI2B8GUsA==}
 
@@ -3476,12 +3503,8 @@ packages:
     resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==}
     hasBin: true
 
-  jiti@2.0.0-beta.3:
-    resolution: {integrity: sha512-pmfRbVRs/7khFrSAYnSiJ8C0D5GvzkE4Ey2pAvUcJsw1ly/p+7ut27jbJrjY79BpAJQJ4gXYFtK6d1Aub+9baQ==}
-    hasBin: true
-
-  jiti@2.4.1:
-    resolution: {integrity: sha512-yPBThwecp1wS9DmoA4x4KR2h3QoslacnDR8ypuFM962kI4/456Iy1oHx2RAgh4jfZNdn0bctsdadceiBUgpU1g==}
+  jiti@2.4.2:
+    resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==}
     hasBin: true
 
   js-tokens@4.0.0:
@@ -3710,8 +3733,8 @@ packages:
   mdn-data@2.0.30:
     resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==}
 
-  mdn-data@2.12.1:
-    resolution: {integrity: sha512-rsfnCbOHjqrhWxwt5/wtSLzpoKTzW7OXdT5lLOIH1OTYhWu9rRJveGq0sKvDZODABH7RX+uoR+DYcpFnq4Tf6Q==}
+  mdn-data@2.12.2:
+    resolution: {integrity: sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==}
 
   mdurl@2.0.0:
     resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==}
@@ -3894,8 +3917,8 @@ packages:
     resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==}
     engines: {node: '>=4'}
 
-  miniflare@3.20241205.0:
-    resolution: {integrity: sha512-Z0cTtIf6ZrcAJ3SrOI9EUM3s4dkGhNeU6Ubl8sroYhsPVD+rtz3m5+p6McHFWCkcMff1o60X5XEKVTmkz0gbpA==}
+  miniflare@3.20241218.0:
+    resolution: {integrity: sha512-spYFDArH0wd+wJSTrzBrWrXJrbyJhRMJa35mat947y1jYhVV8I5V8vnD3LwjfpLr0SaEilojz1OIW7ekmnRe+w==}
     engines: {node: '>=16.13'}
     hasBin: true
 
@@ -4047,8 +4070,8 @@ packages:
     resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==}
     engines: {node: '>=18'}
 
-  oniguruma-to-es@0.8.0:
-    resolution: {integrity: sha512-rY+/a6b+uCgoYIL9itjY0x99UUDHXmGaw7Jjk5ZvM/3cxDJifyxFr/Zm4tTmF6Tre18gAakJo7AzhKUeMNLgHA==}
+  oniguruma-to-es@0.9.0:
+    resolution: {integrity: sha512-hdGeGqzIgizcsButPbb4F3YLPMkBRo7cV3oA3dSFbUl/pwp6ipLy/ijZUwBEmHgTQxVL1pr064uoqJ3V7P036A==}
 
   optionator@0.9.4:
     resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
@@ -4182,8 +4205,8 @@ packages:
     resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==}
     engines: {node: '>=4'}
 
-  pnpm@9.15.0:
-    resolution: {integrity: sha512-duI3l2CkMo7EQVgVvNZije5yevN3mqpMkU45RBVsQpmSGon5djge4QfUHxLPpLZmgcqccY8GaPoIMe1MbYulbA==}
+  pnpm@9.15.1:
+    resolution: {integrity: sha512-GstWXmGT7769p3JwKVBGkVDPErzHZCYudYfnHRncmKQj3/lTblfqRMSb33kP9pToPCe+X6oj1n4MAztYO+S/zw==}
     engines: {node: '>=18.12'}
     hasBin: true
 
@@ -4437,14 +4460,14 @@ packages:
     resolution: {integrity: sha512-J8rn6v4DBb2nnFqkqwy6/NnTYMcgLA+sLr0iIO41qpv0n+ngb7ksag2tMRl0inb1bbO/esUwzW1vbJi7K0sI0g==}
     engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
 
-  regex-recursion@5.0.0:
-    resolution: {integrity: sha512-UwyOqeobrCCqTXPcsSqH4gDhOjD5cI/b8kjngWgSZbxYh5yVjAwTjO5+hAuPRNiuR70+5RlWSs+U9PVcVcW9Lw==}
+  regex-recursion@5.1.1:
+    resolution: {integrity: sha512-ae7SBCbzVNrIjgSbh7wMznPcQel1DNlDtzensnFxpiNpXt1U2ju/bHugH422r+4LAVS1FpW1YCwilmnNsjum9w==}
 
   regex-utilities@2.3.0:
     resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==}
 
-  regex@5.0.2:
-    resolution: {integrity: sha512-/pczGbKIQgfTMRV0XjABvc5RzLqQmwqxLHdQao2RTXPk+pmTXB2P0IaUHYdYyk412YLwUIkaeMd5T+RzVgTqnQ==}
+  regex@5.1.1:
+    resolution: {integrity: sha512-dN5I359AVGPnwzJm2jN1k0W9LPZ+ePvoOeVMMfqIMFz53sSwXkxaJoxr50ptnsC771lK95BnTrVSZxq0b9yCGw==}
 
   regexp-ast-analysis@0.7.1:
     resolution: {integrity: sha512-sZuz1dYW/ZsfG17WSAG7eS85r5a0dDsvg+7BiiYR5o6lKCAtUrEwdmRmaGF6rwVj3LcmAeYkOWKEPlbPzN3Y3A==}
@@ -4512,7 +4535,7 @@ packages:
     resolution: {integrity: sha512-aSHRcJ6KG2IHIioYlvAOcEq6U99sVtqDDKVhnwt70rW6tsz3tv5OSjEiWcgzfsHdLyGXZ/3b/7b/+Za3Y6r1XA==}
     engines: {node: '>=16'}
     peerDependencies:
-      rollup: ^4.28.1
+      rollup: ^4.29.1
       typescript: ~5.6.3
 
   rollup-plugin-esbuild@6.1.1:
@@ -4520,7 +4543,7 @@ packages:
     engines: {node: '>=14.18.0'}
     peerDependencies:
       esbuild: '>=0.18.0'
-      rollup: ^4.28.1
+      rollup: ^4.29.1
 
   rollup-plugin-inject@3.0.2:
     resolution: {integrity: sha512-ptg9PQwzs3orn4jkgXJ74bfs5vYz1NCZlSQMBUA0wKcGp5i5pA1AO3fOUEte8enhGUC+iapTCzEWw2jEFFUO/w==}
@@ -4532,14 +4555,14 @@ packages:
   rollup-plugin-typescript2@0.36.0:
     resolution: {integrity: sha512-NB2CSQDxSe9+Oe2ahZbf+B4bh7pHwjV5L+RSYpCu7Q5ROuN94F9b6ioWwKfz3ueL3KTtmX4o2MUH2cgHDIEUsw==}
     peerDependencies:
-      rollup: ^4.28.1
+      rollup: ^4.29.1
       typescript: ~5.6.3
 
   rollup-pluginutils@2.8.2:
     resolution: {integrity: sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==}
 
-  rollup@4.28.1:
-    resolution: {integrity: sha512-61fXYl/qNVinKmGSTHAZ6Yy8I3YIJC/r2m9feHo6SwVAVcLT5MPwOUFe7EuURA/4m0NR8lXG4BBXuo/IZEsjMg==}
+  rollup@4.29.1:
+    resolution: {integrity: sha512-RaJ45M/kmJUzSWDs1Nnd5DdV4eerC98idtUOVr6FfKcgxqvjwHmxc5upLF9qZU9EpsVzzhleFahrT3shLuJzIw==}
     engines: {node: '>=18.0.0', npm: '>=8.0.0'}
     hasBin: true
 
@@ -4611,9 +4634,9 @@ packages:
     resolution: {integrity: sha512-tgqwPUMDcNDhuf1Xf6KTUsyeqGdgKMhzaH4PAZZuzguOgTl5uuyeYe/8mWgAr6IBxB5V06uqEf6Dy37gIWDtDg==}
     hasBin: true
 
-  sirv@2.0.4:
-    resolution: {integrity: sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==}
-    engines: {node: '>= 10'}
+  sirv@3.0.0:
+    resolution: {integrity: sha512-BPwJGUeDaDCHihkORDchNyyTvWFhcusy1XMmhEVTQTwGeybFbp8YEmB+njbPnth1FibULBSBVwCQni25XlCUDg==}
+    engines: {node: '>=18'}
 
   sisteransi@1.0.5:
     resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==}
@@ -4808,8 +4831,11 @@ packages:
     resolution: {integrity: sha512-q5nmENpTHgiPVd1cJDDc9cVoYN5x4vCvwT3FMilvKPKneCBZAxn2YWQjDF0UMcE9k0Cay1gBiDfTMU0g+mPMQA==}
     engines: {node: '>=14.0.0'}
 
-  tm-grammars@1.21.8:
-    resolution: {integrity: sha512-UmTP0IgM8XfFQ723RGAyLAUE3sACY9drzXAlOwTOro/dBCXxHua2vsluKnV3TGL+UcT0AfikM6dH//vf/HenCw==}
+  tm-grammars@1.21.10:
+    resolution: {integrity: sha512-0TSAeQ90vvh0xRGdLw/HZG3K4M9gE1rwhGDB29QtoA5h2eRRD8tlGwukBJKx/y23l9EDbMP3+2QFeJqMsVOgBQ==}
+
+  tm-grammars@1.21.9:
+    resolution: {integrity: sha512-9kT/ehl3KPmxAeD0JVsCKpZOh+ANWj1RVvNFlsIU88ruUTF1XBWaFeFZUcgA5asJYiKtgD48ddb7VWQVOSOx+g==}
 
   tm-themes@1.9.5:
     resolution: {integrity: sha512-W2dlqxyyJjuxO+k9B0Bp9dXGAn45NnTual969CsnIQDthcjaIvrhU1QMMGJE7EgPO2rPcb6R13tDvDRellXwaQ==}
@@ -4909,9 +4935,6 @@ packages:
       typescript:
         optional: true
 
-  unconfig@0.5.5:
-    resolution: {integrity: sha512-VQZ5PT9HDX+qag0XdgQi8tJepPhXiR/yVOkn707gJDKo31lGjRilPREiQJ9Z6zd/Ugpv6ZvO5VxVIcatldYcNQ==}
-
   unconfig@0.6.0:
     resolution: {integrity: sha512-4C67J0nIF2QwSXty2kW3zZx1pMZ3iXabylvJWWgHybWVUcMf9pxwsngoQt0gC+AVstRywFqrRBp3qOXJayhpOw==}
 
@@ -4954,12 +4977,12 @@ packages:
     resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==}
     engines: {node: '>= 10.0.0'}
 
-  unocss@0.65.1:
-    resolution: {integrity: sha512-WK8EZlduulTcy2i1O4/hVPIYlgcztMbOqsIrxY18Hx1LXSkI5LgTl0FVEyf+xLcwqoUzt4VH2BWEEkzQ13+GAg==}
+  unocss@0.65.2:
+    resolution: {integrity: sha512-PEN8Yltr/n6xdNcI9iqIK4Dp/fpQ1bPa4aR2TwFg2lV6aRA2PNzarviqL62oOqXYSyQ4sqW3s/oaWD3JGOgJ1A==}
     engines: {node: '>=14'}
     peerDependencies:
-      '@unocss/webpack': 0.65.1
-      vite: ^6.0.3
+      '@unocss/webpack': 0.65.2
+      vite: ^6.0.5
     peerDependenciesMeta:
       '@unocss/webpack':
         optional: true
@@ -5028,13 +5051,13 @@ packages:
   vite-tsconfig-paths@5.1.4:
     resolution: {integrity: sha512-cYj0LRuLV2c2sMqhqhGpaO3LretdtMn/BVX4cPLanIZuwwrkVl+lK84E/miEXkCHWXuq65rhNN4rXsBcOB3S4w==}
     peerDependencies:
-      vite: ^6.0.3
+      vite: ^6.0.5
     peerDependenciesMeta:
       vite:
         optional: true
 
-  vite@6.0.3:
-    resolution: {integrity: sha512-Cmuo5P0ENTN6HxLSo6IHsjCLn/81Vgrp81oaiFFMRa8gGDj5xEjIcEpf2ZymZtZR8oU0P2JX5WuUp/rlXcHkAw==}
+  vite@6.0.5:
+    resolution: {integrity: sha512-akD5IAH/ID5imgue2DYhzsEwCi0/4VKY31uhMLEYJwPP4TiUp8pL5PIK+Wo7H8qT8JY9i+pVfPydcFPYD1EL7g==}
     engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
     hasBin: true
     peerDependencies:
@@ -5189,17 +5212,17 @@ packages:
     resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
     engines: {node: '>=0.10.0'}
 
-  workerd@1.20241205.0:
-    resolution: {integrity: sha512-vso/2n0c5SdBDWiD+Sx5gM7unA6SiZXRVUHDqH1euoP/9mFVHZF8icoYsNLB87b/TX8zNgpae+I5N/xFpd9v0g==}
+  workerd@1.20241218.0:
+    resolution: {integrity: sha512-7Z3D4vOVChMz9mWDffE299oQxUWm/pbkeAWx1btVamPcAK/2IuoNBhwflWo3jyuKuxvYuFAdIucgYxc8ICqXiA==}
     engines: {node: '>=16'}
     hasBin: true
 
-  wrangler@3.96.0:
-    resolution: {integrity: sha512-KjbHTUnwTa5eKl3hzv2h6nHBfAsbUkdurL7f6Y288/Bdn6tcEis13jLVR/nw/eWa3tNCBG1xOMZJboUyzWcC1g==}
+  wrangler@3.99.0:
+    resolution: {integrity: sha512-k0x4rT3G/QCbxcoZY7CHRVlAIS8WMmKdga6lf4d2c3gXFqssh44vwlTDuARA9QANBxKJTcA7JPTJRfUDhd9QBA==}
     engines: {node: '>=16.17.0'}
     hasBin: true
     peerDependencies:
-      '@cloudflare/workers-types': ^4.20241205.0
+      '@cloudflare/workers-types': ^4.20241218.0
     peerDependenciesMeta:
       '@cloudflare/workers-types':
         optional: true
@@ -5389,46 +5412,46 @@ snapshots:
       '@jridgewell/gen-mapping': 0.3.5
       '@jridgewell/trace-mapping': 0.3.25
 
-  '@antfu/eslint-config@3.12.0(@typescript-eslint/utils@8.18.0(eslint@9.17.0(jiti@2.4.1))(typescript@5.6.3))(@vue/compiler-sfc@3.5.13)(eslint-plugin-format@0.1.3(eslint@9.17.0(jiti@2.4.1)))(eslint@9.17.0(jiti@2.4.1))(typescript@5.6.3)(vitest@2.0.5(@types/node@22.10.2)(jiti@2.4.1)(terser@5.32.0)(tsx@4.19.1)(yaml@2.6.1))':
+  '@antfu/eslint-config@3.12.0(@typescript-eslint/utils@8.18.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.6.3))(@vue/compiler-sfc@3.5.13)(eslint-plugin-format@0.1.3(eslint@9.17.0(jiti@2.4.2)))(eslint@9.17.0(jiti@2.4.2))(typescript@5.6.3)(vitest@2.0.5(@types/node@22.10.2)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.1)(yaml@2.6.1))':
     dependencies:
       '@antfu/install-pkg': 0.5.0
       '@clack/prompts': 0.8.2
-      '@eslint-community/eslint-plugin-eslint-comments': 4.4.1(eslint@9.17.0(jiti@2.4.1))
+      '@eslint-community/eslint-plugin-eslint-comments': 4.4.1(eslint@9.17.0(jiti@2.4.2))
       '@eslint/markdown': 6.2.1
-      '@stylistic/eslint-plugin': 2.12.1(eslint@9.17.0(jiti@2.4.1))(typescript@5.6.3)
-      '@typescript-eslint/eslint-plugin': 8.18.0(@typescript-eslint/parser@8.18.0(eslint@9.17.0(jiti@2.4.1))(typescript@5.6.3))(eslint@9.17.0(jiti@2.4.1))(typescript@5.6.3)
-      '@typescript-eslint/parser': 8.18.0(eslint@9.17.0(jiti@2.4.1))(typescript@5.6.3)
-      '@vitest/eslint-plugin': 1.1.16(@typescript-eslint/utils@8.18.0(eslint@9.17.0(jiti@2.4.1))(typescript@5.6.3))(eslint@9.17.0(jiti@2.4.1))(typescript@5.6.3)(vitest@2.0.5(@types/node@22.10.2)(jiti@2.4.1)(terser@5.32.0)(tsx@4.19.1)(yaml@2.6.1))
-      eslint: 9.17.0(jiti@2.4.1)
-      eslint-config-flat-gitignore: 0.3.0(eslint@9.17.0(jiti@2.4.1))
+      '@stylistic/eslint-plugin': 2.12.1(eslint@9.17.0(jiti@2.4.2))(typescript@5.6.3)
+      '@typescript-eslint/eslint-plugin': 8.18.0(@typescript-eslint/parser@8.18.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.6.3))(eslint@9.17.0(jiti@2.4.2))(typescript@5.6.3)
+      '@typescript-eslint/parser': 8.18.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.6.3)
+      '@vitest/eslint-plugin': 1.1.16(@typescript-eslint/utils@8.18.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.6.3))(eslint@9.17.0(jiti@2.4.2))(typescript@5.6.3)(vitest@2.0.5(@types/node@22.10.2)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.1)(yaml@2.6.1))
+      eslint: 9.17.0(jiti@2.4.2)
+      eslint-config-flat-gitignore: 0.3.0(eslint@9.17.0(jiti@2.4.2))
       eslint-flat-config-utils: 0.4.0
-      eslint-merge-processors: 0.1.0(eslint@9.17.0(jiti@2.4.1))
-      eslint-plugin-antfu: 2.7.0(eslint@9.17.0(jiti@2.4.1))
-      eslint-plugin-command: 0.2.6(eslint@9.17.0(jiti@2.4.1))
-      eslint-plugin-import-x: 4.5.0(eslint@9.17.0(jiti@2.4.1))(typescript@5.6.3)
-      eslint-plugin-jsdoc: 50.6.1(eslint@9.17.0(jiti@2.4.1))
-      eslint-plugin-jsonc: 2.18.2(eslint@9.17.0(jiti@2.4.1))
-      eslint-plugin-n: 17.15.0(eslint@9.17.0(jiti@2.4.1))
+      eslint-merge-processors: 0.1.0(eslint@9.17.0(jiti@2.4.2))
+      eslint-plugin-antfu: 2.7.0(eslint@9.17.0(jiti@2.4.2))
+      eslint-plugin-command: 0.2.6(eslint@9.17.0(jiti@2.4.2))
+      eslint-plugin-import-x: 4.5.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.6.3)
+      eslint-plugin-jsdoc: 50.6.1(eslint@9.17.0(jiti@2.4.2))
+      eslint-plugin-jsonc: 2.18.2(eslint@9.17.0(jiti@2.4.2))
+      eslint-plugin-n: 17.15.0(eslint@9.17.0(jiti@2.4.2))
       eslint-plugin-no-only-tests: 3.3.0
-      eslint-plugin-perfectionist: 4.3.0(eslint@9.17.0(jiti@2.4.1))(typescript@5.6.3)
-      eslint-plugin-regexp: 2.7.0(eslint@9.17.0(jiti@2.4.1))
-      eslint-plugin-toml: 0.12.0(eslint@9.17.0(jiti@2.4.1))
-      eslint-plugin-unicorn: 56.0.1(eslint@9.17.0(jiti@2.4.1))
-      eslint-plugin-unused-imports: 4.1.4(@typescript-eslint/eslint-plugin@8.18.0(@typescript-eslint/parser@8.18.0(eslint@9.17.0(jiti@2.4.1))(typescript@5.6.3))(eslint@9.17.0(jiti@2.4.1))(typescript@5.6.3))(eslint@9.17.0(jiti@2.4.1))
-      eslint-plugin-vue: 9.32.0(eslint@9.17.0(jiti@2.4.1))
-      eslint-plugin-yml: 1.16.0(eslint@9.17.0(jiti@2.4.1))
-      eslint-processor-vue-blocks: 0.1.2(@vue/compiler-sfc@3.5.13)(eslint@9.17.0(jiti@2.4.1))
+      eslint-plugin-perfectionist: 4.3.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.6.3)
+      eslint-plugin-regexp: 2.7.0(eslint@9.17.0(jiti@2.4.2))
+      eslint-plugin-toml: 0.12.0(eslint@9.17.0(jiti@2.4.2))
+      eslint-plugin-unicorn: 56.0.1(eslint@9.17.0(jiti@2.4.2))
+      eslint-plugin-unused-imports: 4.1.4(@typescript-eslint/eslint-plugin@8.18.0(@typescript-eslint/parser@8.18.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.6.3))(eslint@9.17.0(jiti@2.4.2))(typescript@5.6.3))(eslint@9.17.0(jiti@2.4.2))
+      eslint-plugin-vue: 9.32.0(eslint@9.17.0(jiti@2.4.2))
+      eslint-plugin-yml: 1.16.0(eslint@9.17.0(jiti@2.4.2))
+      eslint-processor-vue-blocks: 0.1.2(@vue/compiler-sfc@3.5.13)(eslint@9.17.0(jiti@2.4.2))
       globals: 15.13.0
       jsonc-eslint-parser: 2.4.0
       local-pkg: 0.5.1
       parse-gitignore: 2.0.0
       picocolors: 1.1.1
       toml-eslint-parser: 0.10.0
-      vue-eslint-parser: 9.4.3(eslint@9.17.0(jiti@2.4.1))
+      vue-eslint-parser: 9.4.3(eslint@9.17.0(jiti@2.4.2))
       yaml-eslint-parser: 1.2.3
       yargs: 17.7.2
     optionalDependencies:
-      eslint-plugin-format: 0.1.3(eslint@9.17.0(jiti@2.4.1))
+      eslint-plugin-format: 0.1.3(eslint@9.17.0(jiti@2.4.2))
     transitivePeerDependencies:
       - '@eslint/json'
       - '@typescript-eslint/utils'
@@ -5447,7 +5470,7 @@ snapshots:
       package-manager-detector: 0.2.5
       tinyexec: 0.3.1
 
-  '@antfu/ni@0.23.1': {}
+  '@antfu/ni@0.23.2': {}
 
   '@antfu/utils@0.7.10': {}
 
@@ -5570,19 +5593,19 @@ snapshots:
     dependencies:
       mime: 3.0.0
 
-  '@cloudflare/workerd-darwin-64@1.20241205.0':
+  '@cloudflare/workerd-darwin-64@1.20241218.0':
     optional: true
 
-  '@cloudflare/workerd-darwin-arm64@1.20241205.0':
+  '@cloudflare/workerd-darwin-arm64@1.20241218.0':
     optional: true
 
-  '@cloudflare/workerd-linux-64@1.20241205.0':
+  '@cloudflare/workerd-linux-64@1.20241218.0':
     optional: true
 
-  '@cloudflare/workerd-linux-arm64@1.20241205.0':
+  '@cloudflare/workerd-linux-arm64@1.20241218.0':
     optional: true
 
-  '@cloudflare/workerd-windows-64@1.20241205.0':
+  '@cloudflare/workerd-windows-64@1.20241218.0':
     optional: true
 
   '@cspotcode/source-map-support@0.8.1':
@@ -5851,15 +5874,15 @@ snapshots:
   '@esbuild/win32-x64@0.24.0':
     optional: true
 
-  '@eslint-community/eslint-plugin-eslint-comments@4.4.1(eslint@9.17.0(jiti@2.4.1))':
+  '@eslint-community/eslint-plugin-eslint-comments@4.4.1(eslint@9.17.0(jiti@2.4.2))':
     dependencies:
       escape-string-regexp: 4.0.0
-      eslint: 9.17.0(jiti@2.4.1)
+      eslint: 9.17.0(jiti@2.4.2)
       ignore: 5.3.2
 
-  '@eslint-community/eslint-utils@4.4.1(eslint@9.17.0(jiti@2.4.1))':
+  '@eslint-community/eslint-utils@4.4.1(eslint@9.17.0(jiti@2.4.2))':
     dependencies:
-      eslint: 9.17.0(jiti@2.4.1)
+      eslint: 9.17.0(jiti@2.4.2)
       eslint-visitor-keys: 3.4.3
 
   '@eslint-community/regexpp@4.12.1': {}
@@ -5954,12 +5977,13 @@ snapshots:
 
   '@iconify/types@2.0.0': {}
 
-  '@iconify/utils@2.1.33':
+  '@iconify/utils@2.2.1':
     dependencies:
       '@antfu/install-pkg': 0.4.1
       '@antfu/utils': 0.7.10
       '@iconify/types': 2.0.0
       debug: 4.4.0
+      globals: 15.13.0
       kolorist: 1.8.0
       local-pkg: 0.5.1
       mlly: 1.7.3
@@ -6034,13 +6058,13 @@ snapshots:
 
   '@polka/url@1.0.0-next.25': {}
 
-  '@rollup/plugin-alias@5.1.1(rollup@4.28.1)':
+  '@rollup/plugin-alias@5.1.1(rollup@4.29.1)':
     optionalDependencies:
-      rollup: 4.28.1
+      rollup: 4.29.1
 
-  '@rollup/plugin-commonjs@28.0.2(rollup@4.28.1)':
+  '@rollup/plugin-commonjs@28.0.2(rollup@4.29.1)':
     dependencies:
-      '@rollup/pluginutils': 5.1.4(rollup@4.28.1)
+      '@rollup/pluginutils': 5.1.4(rollup@4.29.1)
       commondir: 1.0.1
       estree-walker: 2.0.2
       fdir: 6.4.2(picomatch@4.0.2)
@@ -6048,117 +6072,117 @@ snapshots:
       magic-string: 0.30.17
       picomatch: 4.0.2
     optionalDependencies:
-      rollup: 4.28.1
+      rollup: 4.29.1
 
-  '@rollup/plugin-json@6.1.0(rollup@4.28.1)':
+  '@rollup/plugin-json@6.1.0(rollup@4.29.1)':
     dependencies:
-      '@rollup/pluginutils': 5.1.4(rollup@4.28.1)
+      '@rollup/pluginutils': 5.1.4(rollup@4.29.1)
     optionalDependencies:
-      rollup: 4.28.1
+      rollup: 4.29.1
 
-  '@rollup/plugin-node-resolve@15.3.0(rollup@4.28.1)':
+  '@rollup/plugin-node-resolve@15.3.0(rollup@4.29.1)':
     dependencies:
-      '@rollup/pluginutils': 5.1.4(rollup@4.28.1)
+      '@rollup/pluginutils': 5.1.4(rollup@4.29.1)
       '@types/resolve': 1.20.2
       deepmerge: 4.3.1
       is-module: 1.0.0
       resolve: 1.22.8
     optionalDependencies:
-      rollup: 4.28.1
+      rollup: 4.29.1
 
-  '@rollup/plugin-node-resolve@16.0.0(rollup@4.28.1)':
+  '@rollup/plugin-node-resolve@16.0.0(rollup@4.29.1)':
     dependencies:
-      '@rollup/pluginutils': 5.1.4(rollup@4.28.1)
+      '@rollup/pluginutils': 5.1.4(rollup@4.29.1)
       '@types/resolve': 1.20.2
       deepmerge: 4.3.1
       is-module: 1.0.0
       resolve: 1.22.8
     optionalDependencies:
-      rollup: 4.28.1
+      rollup: 4.29.1
 
-  '@rollup/plugin-replace@6.0.2(rollup@4.28.1)':
+  '@rollup/plugin-replace@6.0.2(rollup@4.29.1)':
     dependencies:
-      '@rollup/pluginutils': 5.1.4(rollup@4.28.1)
+      '@rollup/pluginutils': 5.1.4(rollup@4.29.1)
       magic-string: 0.30.17
     optionalDependencies:
-      rollup: 4.28.1
+      rollup: 4.29.1
 
-  '@rollup/plugin-terser@0.4.4(rollup@4.28.1)':
+  '@rollup/plugin-terser@0.4.4(rollup@4.29.1)':
     dependencies:
       serialize-javascript: 6.0.2
       smob: 1.5.0
       terser: 5.32.0
     optionalDependencies:
-      rollup: 4.28.1
+      rollup: 4.29.1
 
   '@rollup/pluginutils@4.2.1':
     dependencies:
       estree-walker: 2.0.2
       picomatch: 2.3.1
 
-  '@rollup/pluginutils@5.1.4(rollup@4.28.1)':
+  '@rollup/pluginutils@5.1.4(rollup@4.29.1)':
     dependencies:
       '@types/estree': 1.0.6
       estree-walker: 2.0.2
       picomatch: 4.0.2
     optionalDependencies:
-      rollup: 4.28.1
+      rollup: 4.29.1
 
-  '@rollup/rollup-android-arm-eabi@4.28.1':
+  '@rollup/rollup-android-arm-eabi@4.29.1':
     optional: true
 
-  '@rollup/rollup-android-arm64@4.28.1':
+  '@rollup/rollup-android-arm64@4.29.1':
     optional: true
 
-  '@rollup/rollup-darwin-arm64@4.28.1':
+  '@rollup/rollup-darwin-arm64@4.29.1':
     optional: true
 
-  '@rollup/rollup-darwin-x64@4.28.1':
+  '@rollup/rollup-darwin-x64@4.29.1':
     optional: true
 
-  '@rollup/rollup-freebsd-arm64@4.28.1':
+  '@rollup/rollup-freebsd-arm64@4.29.1':
     optional: true
 
-  '@rollup/rollup-freebsd-x64@4.28.1':
+  '@rollup/rollup-freebsd-x64@4.29.1':
     optional: true
 
-  '@rollup/rollup-linux-arm-gnueabihf@4.28.1':
+  '@rollup/rollup-linux-arm-gnueabihf@4.29.1':
     optional: true
 
-  '@rollup/rollup-linux-arm-musleabihf@4.28.1':
+  '@rollup/rollup-linux-arm-musleabihf@4.29.1':
     optional: true
 
-  '@rollup/rollup-linux-arm64-gnu@4.28.1':
+  '@rollup/rollup-linux-arm64-gnu@4.29.1':
     optional: true
 
-  '@rollup/rollup-linux-arm64-musl@4.28.1':
+  '@rollup/rollup-linux-arm64-musl@4.29.1':
     optional: true
 
-  '@rollup/rollup-linux-loongarch64-gnu@4.28.1':
+  '@rollup/rollup-linux-loongarch64-gnu@4.29.1':
     optional: true
 
-  '@rollup/rollup-linux-powerpc64le-gnu@4.28.1':
+  '@rollup/rollup-linux-powerpc64le-gnu@4.29.1':
     optional: true
 
-  '@rollup/rollup-linux-riscv64-gnu@4.28.1':
+  '@rollup/rollup-linux-riscv64-gnu@4.29.1':
     optional: true
 
-  '@rollup/rollup-linux-s390x-gnu@4.28.1':
+  '@rollup/rollup-linux-s390x-gnu@4.29.1':
     optional: true
 
-  '@rollup/rollup-linux-x64-gnu@4.28.1':
+  '@rollup/rollup-linux-x64-gnu@4.29.1':
     optional: true
 
-  '@rollup/rollup-linux-x64-musl@4.28.1':
+  '@rollup/rollup-linux-x64-musl@4.29.1':
     optional: true
 
-  '@rollup/rollup-win32-arm64-msvc@4.28.1':
+  '@rollup/rollup-win32-arm64-msvc@4.29.1':
     optional: true
 
-  '@rollup/rollup-win32-ia32-msvc@4.28.1':
+  '@rollup/rollup-win32-ia32-msvc@4.29.1':
     optional: true
 
-  '@rollup/rollup-win32-x64-msvc@4.28.1':
+  '@rollup/rollup-win32-x64-msvc@4.29.1':
     optional: true
 
   '@shikijs/types@1.22.2':
@@ -6168,10 +6192,10 @@ snapshots:
 
   '@shikijs/vscode-textmate@9.3.1': {}
 
-  '@stylistic/eslint-plugin@2.12.1(eslint@9.17.0(jiti@2.4.1))(typescript@5.6.3)':
+  '@stylistic/eslint-plugin@2.12.1(eslint@9.17.0(jiti@2.4.2))(typescript@5.6.3)':
     dependencies:
-      '@typescript-eslint/utils': 8.18.0(eslint@9.17.0(jiti@2.4.1))(typescript@5.6.3)
-      eslint: 9.17.0(jiti@2.4.1)
+      '@typescript-eslint/utils': 8.18.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.6.3)
+      eslint: 9.17.0(jiti@2.4.2)
       eslint-visitor-keys: 4.2.0
       espree: 10.3.0
       estraverse: 5.3.0
@@ -6255,15 +6279,15 @@ snapshots:
 
   '@types/web-bluetooth@0.0.20': {}
 
-  '@typescript-eslint/eslint-plugin@8.18.0(@typescript-eslint/parser@8.18.0(eslint@9.17.0(jiti@2.4.1))(typescript@5.6.3))(eslint@9.17.0(jiti@2.4.1))(typescript@5.6.3)':
+  '@typescript-eslint/eslint-plugin@8.18.0(@typescript-eslint/parser@8.18.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.6.3))(eslint@9.17.0(jiti@2.4.2))(typescript@5.6.3)':
     dependencies:
       '@eslint-community/regexpp': 4.12.1
-      '@typescript-eslint/parser': 8.18.0(eslint@9.17.0(jiti@2.4.1))(typescript@5.6.3)
+      '@typescript-eslint/parser': 8.18.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.6.3)
       '@typescript-eslint/scope-manager': 8.18.0
-      '@typescript-eslint/type-utils': 8.18.0(eslint@9.17.0(jiti@2.4.1))(typescript@5.6.3)
-      '@typescript-eslint/utils': 8.18.0(eslint@9.17.0(jiti@2.4.1))(typescript@5.6.3)
+      '@typescript-eslint/type-utils': 8.18.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.6.3)
+      '@typescript-eslint/utils': 8.18.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.6.3)
       '@typescript-eslint/visitor-keys': 8.18.0
-      eslint: 9.17.0(jiti@2.4.1)
+      eslint: 9.17.0(jiti@2.4.2)
       graphemer: 1.4.0
       ignore: 5.3.2
       natural-compare: 1.4.0
@@ -6272,14 +6296,14 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
-  '@typescript-eslint/parser@8.18.0(eslint@9.17.0(jiti@2.4.1))(typescript@5.6.3)':
+  '@typescript-eslint/parser@8.18.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.6.3)':
     dependencies:
       '@typescript-eslint/scope-manager': 8.18.0
       '@typescript-eslint/types': 8.18.0
       '@typescript-eslint/typescript-estree': 8.18.0(typescript@5.6.3)
       '@typescript-eslint/visitor-keys': 8.18.0
       debug: 4.4.0
-      eslint: 9.17.0(jiti@2.4.1)
+      eslint: 9.17.0(jiti@2.4.2)
       typescript: 5.6.3
     transitivePeerDependencies:
       - supports-color
@@ -6289,12 +6313,12 @@ snapshots:
       '@typescript-eslint/types': 8.18.0
       '@typescript-eslint/visitor-keys': 8.18.0
 
-  '@typescript-eslint/type-utils@8.18.0(eslint@9.17.0(jiti@2.4.1))(typescript@5.6.3)':
+  '@typescript-eslint/type-utils@8.18.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.6.3)':
     dependencies:
       '@typescript-eslint/typescript-estree': 8.18.0(typescript@5.6.3)
-      '@typescript-eslint/utils': 8.18.0(eslint@9.17.0(jiti@2.4.1))(typescript@5.6.3)
+      '@typescript-eslint/utils': 8.18.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.6.3)
       debug: 4.4.0
-      eslint: 9.17.0(jiti@2.4.1)
+      eslint: 9.17.0(jiti@2.4.2)
       ts-api-utils: 1.3.0(typescript@5.6.3)
       typescript: 5.6.3
     transitivePeerDependencies:
@@ -6316,13 +6340,13 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
-  '@typescript-eslint/utils@8.18.0(eslint@9.17.0(jiti@2.4.1))(typescript@5.6.3)':
+  '@typescript-eslint/utils@8.18.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.6.3)':
     dependencies:
-      '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0(jiti@2.4.1))
+      '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0(jiti@2.4.2))
       '@typescript-eslint/scope-manager': 8.18.0
       '@typescript-eslint/types': 8.18.0
       '@typescript-eslint/typescript-estree': 8.18.0(typescript@5.6.3)
-      eslint: 9.17.0(jiti@2.4.1)
+      eslint: 9.17.0(jiti@2.4.2)
       typescript: 5.6.3
     transitivePeerDependencies:
       - supports-color
@@ -6341,25 +6365,25 @@ snapshots:
 
   '@ungap/structured-clone@1.2.0': {}
 
-  '@unocss/astro@0.65.1(rollup@4.28.1)(vite@6.0.3(@types/node@22.10.2)(jiti@2.4.1)(terser@5.32.0)(tsx@4.19.1)(yaml@2.6.1))(vue@3.5.13(typescript@5.6.3))':
+  '@unocss/astro@0.65.2(rollup@4.29.1)(vite@6.0.5(@types/node@22.10.2)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.1)(yaml@2.6.1))(vue@3.5.13(typescript@5.6.3))':
     dependencies:
-      '@unocss/core': 0.65.1
-      '@unocss/reset': 0.65.1
-      '@unocss/vite': 0.65.1(rollup@4.28.1)(vite@6.0.3(@types/node@22.10.2)(jiti@2.4.1)(terser@5.32.0)(tsx@4.19.1)(yaml@2.6.1))(vue@3.5.13(typescript@5.6.3))
+      '@unocss/core': 0.65.2
+      '@unocss/reset': 0.65.2
+      '@unocss/vite': 0.65.2(rollup@4.29.1)(vite@6.0.5(@types/node@22.10.2)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.1)(yaml@2.6.1))(vue@3.5.13(typescript@5.6.3))
     optionalDependencies:
-      vite: 6.0.3(@types/node@22.10.2)(jiti@2.4.1)(terser@5.32.0)(tsx@4.19.1)(yaml@2.6.1)
+      vite: 6.0.5(@types/node@22.10.2)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.1)(yaml@2.6.1)
     transitivePeerDependencies:
       - rollup
       - supports-color
       - vue
 
-  '@unocss/cli@0.65.1(rollup@4.28.1)':
+  '@unocss/cli@0.65.2(rollup@4.29.1)':
     dependencies:
       '@ampproject/remapping': 2.3.0
-      '@rollup/pluginutils': 5.1.4(rollup@4.28.1)
-      '@unocss/config': 0.65.1
-      '@unocss/core': 0.65.1
-      '@unocss/preset-uno': 0.65.1
+      '@rollup/pluginutils': 5.1.4(rollup@4.29.1)
+      '@unocss/config': 0.65.2
+      '@unocss/core': 0.65.2
+      '@unocss/preset-uno': 0.65.2
       cac: 6.7.14
       chokidar: 3.6.0
       colorette: 2.0.20
@@ -6372,132 +6396,132 @@ snapshots:
       - rollup
       - supports-color
 
-  '@unocss/config@0.65.1':
+  '@unocss/config@0.65.2':
     dependencies:
-      '@unocss/core': 0.65.1
-      unconfig: 0.5.5
+      '@unocss/core': 0.65.2
+      unconfig: 0.6.0
     transitivePeerDependencies:
       - supports-color
 
-  '@unocss/core@0.65.1': {}
+  '@unocss/core@0.65.2': {}
 
-  '@unocss/extractor-arbitrary-variants@0.65.1':
+  '@unocss/extractor-arbitrary-variants@0.65.2':
     dependencies:
-      '@unocss/core': 0.65.1
+      '@unocss/core': 0.65.2
 
-  '@unocss/inspector@0.65.1(vue@3.5.13(typescript@5.6.3))':
+  '@unocss/inspector@0.65.2(vue@3.5.13(typescript@5.6.3))':
     dependencies:
-      '@unocss/core': 0.65.1
-      '@unocss/rule-utils': 0.65.1
+      '@unocss/core': 0.65.2
+      '@unocss/rule-utils': 0.65.2
       gzip-size: 6.0.0
-      sirv: 2.0.4
+      sirv: 3.0.0
       vue-flow-layout: 0.1.1(vue@3.5.13(typescript@5.6.3))
     transitivePeerDependencies:
       - vue
 
-  '@unocss/postcss@0.65.1(postcss@8.4.49)':
+  '@unocss/postcss@0.65.2(postcss@8.4.49)':
     dependencies:
-      '@unocss/config': 0.65.1
-      '@unocss/core': 0.65.1
-      '@unocss/rule-utils': 0.65.1
-      css-tree: 3.0.1
+      '@unocss/config': 0.65.2
+      '@unocss/core': 0.65.2
+      '@unocss/rule-utils': 0.65.2
+      css-tree: 3.1.0
       postcss: 8.4.49
       tinyglobby: 0.2.10
     transitivePeerDependencies:
       - supports-color
 
-  '@unocss/preset-attributify@0.65.1':
+  '@unocss/preset-attributify@0.65.2':
     dependencies:
-      '@unocss/core': 0.65.1
+      '@unocss/core': 0.65.2
 
-  '@unocss/preset-icons@0.65.1':
+  '@unocss/preset-icons@0.65.2':
     dependencies:
-      '@iconify/utils': 2.1.33
-      '@unocss/core': 0.65.1
+      '@iconify/utils': 2.2.1
+      '@unocss/core': 0.65.2
       ofetch: 1.4.1
     transitivePeerDependencies:
       - supports-color
 
-  '@unocss/preset-mini@0.65.1':
+  '@unocss/preset-mini@0.65.2':
     dependencies:
-      '@unocss/core': 0.65.1
-      '@unocss/extractor-arbitrary-variants': 0.65.1
-      '@unocss/rule-utils': 0.65.1
+      '@unocss/core': 0.65.2
+      '@unocss/extractor-arbitrary-variants': 0.65.2
+      '@unocss/rule-utils': 0.65.2
 
-  '@unocss/preset-tagify@0.65.1':
+  '@unocss/preset-tagify@0.65.2':
     dependencies:
-      '@unocss/core': 0.65.1
+      '@unocss/core': 0.65.2
 
-  '@unocss/preset-typography@0.65.1':
+  '@unocss/preset-typography@0.65.2':
     dependencies:
-      '@unocss/core': 0.65.1
-      '@unocss/preset-mini': 0.65.1
+      '@unocss/core': 0.65.2
+      '@unocss/preset-mini': 0.65.2
 
-  '@unocss/preset-uno@0.65.1':
+  '@unocss/preset-uno@0.65.2':
     dependencies:
-      '@unocss/core': 0.65.1
-      '@unocss/preset-mini': 0.65.1
-      '@unocss/preset-wind': 0.65.1
-      '@unocss/rule-utils': 0.65.1
+      '@unocss/core': 0.65.2
+      '@unocss/preset-mini': 0.65.2
+      '@unocss/preset-wind': 0.65.2
+      '@unocss/rule-utils': 0.65.2
 
-  '@unocss/preset-web-fonts@0.65.1':
+  '@unocss/preset-web-fonts@0.65.2':
     dependencies:
-      '@unocss/core': 0.65.1
+      '@unocss/core': 0.65.2
       ofetch: 1.4.1
 
-  '@unocss/preset-wind@0.65.1':
+  '@unocss/preset-wind@0.65.2':
     dependencies:
-      '@unocss/core': 0.65.1
-      '@unocss/preset-mini': 0.65.1
-      '@unocss/rule-utils': 0.65.1
+      '@unocss/core': 0.65.2
+      '@unocss/preset-mini': 0.65.2
+      '@unocss/rule-utils': 0.65.2
 
-  '@unocss/reset@0.65.1': {}
+  '@unocss/reset@0.65.2': {}
 
-  '@unocss/rule-utils@0.65.1':
+  '@unocss/rule-utils@0.65.2':
     dependencies:
-      '@unocss/core': 0.65.1
+      '@unocss/core': 0.65.2
       magic-string: 0.30.17
 
-  '@unocss/transformer-attributify-jsx@0.65.1':
+  '@unocss/transformer-attributify-jsx@0.65.2':
     dependencies:
-      '@unocss/core': 0.65.1
+      '@unocss/core': 0.65.2
 
-  '@unocss/transformer-compile-class@0.65.1':
+  '@unocss/transformer-compile-class@0.65.2':
     dependencies:
-      '@unocss/core': 0.65.1
+      '@unocss/core': 0.65.2
 
-  '@unocss/transformer-directives@0.65.1':
+  '@unocss/transformer-directives@0.65.2':
     dependencies:
-      '@unocss/core': 0.65.1
-      '@unocss/rule-utils': 0.65.1
-      css-tree: 3.0.1
+      '@unocss/core': 0.65.2
+      '@unocss/rule-utils': 0.65.2
+      css-tree: 3.1.0
 
-  '@unocss/transformer-variant-group@0.65.1':
+  '@unocss/transformer-variant-group@0.65.2':
     dependencies:
-      '@unocss/core': 0.65.1
+      '@unocss/core': 0.65.2
 
-  '@unocss/vite@0.65.1(rollup@4.28.1)(vite@6.0.3(@types/node@22.10.2)(jiti@2.4.1)(terser@5.32.0)(tsx@4.19.1)(yaml@2.6.1))(vue@3.5.13(typescript@5.6.3))':
+  '@unocss/vite@0.65.2(rollup@4.29.1)(vite@6.0.5(@types/node@22.10.2)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.1)(yaml@2.6.1))(vue@3.5.13(typescript@5.6.3))':
     dependencies:
       '@ampproject/remapping': 2.3.0
-      '@rollup/pluginutils': 5.1.4(rollup@4.28.1)
-      '@unocss/config': 0.65.1
-      '@unocss/core': 0.65.1
-      '@unocss/inspector': 0.65.1(vue@3.5.13(typescript@5.6.3))
+      '@rollup/pluginutils': 5.1.4(rollup@4.29.1)
+      '@unocss/config': 0.65.2
+      '@unocss/core': 0.65.2
+      '@unocss/inspector': 0.65.2(vue@3.5.13(typescript@5.6.3))
       chokidar: 3.6.0
       magic-string: 0.30.17
       tinyglobby: 0.2.10
-      vite: 6.0.3(@types/node@22.10.2)(jiti@2.4.1)(terser@5.32.0)(tsx@4.19.1)(yaml@2.6.1)
+      vite: 6.0.5(@types/node@22.10.2)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.1)(yaml@2.6.1)
     transitivePeerDependencies:
       - rollup
       - supports-color
       - vue
 
-  '@vitejs/plugin-vue@5.1.4(vite@6.0.3(@types/node@22.10.2)(jiti@2.4.1)(terser@5.32.0)(tsx@4.19.1)(yaml@2.6.1))(vue@3.5.13(typescript@5.6.3))':
+  '@vitejs/plugin-vue@5.1.4(vite@6.0.5(@types/node@22.10.2)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.1)(yaml@2.6.1))(vue@3.5.13(typescript@5.6.3))':
     dependencies:
-      vite: 6.0.3(@types/node@22.10.2)(jiti@2.4.1)(terser@5.32.0)(tsx@4.19.1)(yaml@2.6.1)
+      vite: 6.0.5(@types/node@22.10.2)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.1)(yaml@2.6.1)
       vue: 3.5.13(typescript@5.6.3)
 
-  '@vitest/coverage-v8@2.0.5(vitest@2.0.5(@types/node@22.10.2)(jiti@2.4.1)(terser@5.32.0)(tsx@4.19.1)(yaml@2.6.1))':
+  '@vitest/coverage-v8@2.0.5(vitest@2.0.5(@types/node@22.10.2)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.1)(yaml@2.6.1))':
     dependencies:
       '@ampproject/remapping': 2.3.0
       '@bcoe/v8-coverage': 0.2.3
@@ -6511,17 +6535,17 @@ snapshots:
       std-env: 3.7.0
       test-exclude: 7.0.1
       tinyrainbow: 1.2.0
-      vitest: 2.0.5(@types/node@22.10.2)(jiti@2.4.1)(terser@5.32.0)(tsx@4.19.1)(yaml@2.6.1)
+      vitest: 2.0.5(@types/node@22.10.2)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.1)(yaml@2.6.1)
     transitivePeerDependencies:
       - supports-color
 
-  '@vitest/eslint-plugin@1.1.16(@typescript-eslint/utils@8.18.0(eslint@9.17.0(jiti@2.4.1))(typescript@5.6.3))(eslint@9.17.0(jiti@2.4.1))(typescript@5.6.3)(vitest@2.0.5(@types/node@22.10.2)(jiti@2.4.1)(terser@5.32.0)(tsx@4.19.1)(yaml@2.6.1))':
+  '@vitest/eslint-plugin@1.1.16(@typescript-eslint/utils@8.18.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.6.3))(eslint@9.17.0(jiti@2.4.2))(typescript@5.6.3)(vitest@2.0.5(@types/node@22.10.2)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.1)(yaml@2.6.1))':
     dependencies:
-      '@typescript-eslint/utils': 8.18.0(eslint@9.17.0(jiti@2.4.1))(typescript@5.6.3)
-      eslint: 9.17.0(jiti@2.4.1)
+      '@typescript-eslint/utils': 8.18.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.6.3)
+      eslint: 9.17.0(jiti@2.4.2)
     optionalDependencies:
       typescript: 5.6.3
-      vitest: 2.0.5(@types/node@22.10.2)(jiti@2.4.1)(terser@5.32.0)(tsx@4.19.1)(yaml@2.6.1)
+      vitest: 2.0.5(@types/node@22.10.2)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.1)(yaml@2.6.1)
 
   '@vitest/expect@2.0.5':
     dependencies:
@@ -6873,7 +6897,7 @@ snapshots:
       defu: 6.1.4
       dotenv: 16.4.5
       giget: 1.2.3
-      jiti: 2.4.1
+      jiti: 2.4.2
       mlly: 1.7.3
       ohash: 1.1.4
       pathe: 1.1.2
@@ -6920,6 +6944,8 @@ snapshots:
 
   chalk@5.3.0: {}
 
+  chalk@5.4.1: {}
+
   character-entities-html4@2.1.0: {}
 
   character-entities-legacy@3.0.0: {}
@@ -7052,9 +7078,9 @@ snapshots:
       mdn-data: 2.0.30
       source-map-js: 1.2.1
 
-  css-tree@3.0.1:
+  css-tree@3.1.0:
     dependencies:
-      mdn-data: 2.12.1
+      mdn-data: 2.12.2
       source-map-js: 1.2.1
 
   css-what@6.1.0: {}
@@ -7488,29 +7514,29 @@ snapshots:
 
   escape-string-regexp@5.0.0: {}
 
-  eslint-compat-utils@0.5.1(eslint@9.17.0(jiti@2.4.1)):
+  eslint-compat-utils@0.5.1(eslint@9.17.0(jiti@2.4.2)):
     dependencies:
-      eslint: 9.17.0(jiti@2.4.1)
+      eslint: 9.17.0(jiti@2.4.2)
       semver: 7.6.3
 
-  eslint-compat-utils@0.6.0(eslint@9.17.0(jiti@2.4.1)):
+  eslint-compat-utils@0.6.0(eslint@9.17.0(jiti@2.4.2)):
     dependencies:
-      eslint: 9.17.0(jiti@2.4.1)
+      eslint: 9.17.0(jiti@2.4.2)
       semver: 7.6.3
 
-  eslint-config-flat-gitignore@0.3.0(eslint@9.17.0(jiti@2.4.1)):
+  eslint-config-flat-gitignore@0.3.0(eslint@9.17.0(jiti@2.4.2)):
     dependencies:
       '@eslint/compat': 1.1.1
-      eslint: 9.17.0(jiti@2.4.1)
+      eslint: 9.17.0(jiti@2.4.2)
       find-up-simple: 1.0.0
 
   eslint-flat-config-utils@0.4.0:
     dependencies:
       pathe: 1.1.2
 
-  eslint-formatting-reporter@0.0.0(eslint@9.17.0(jiti@2.4.1)):
+  eslint-formatting-reporter@0.0.0(eslint@9.17.0(jiti@2.4.2)):
     dependencies:
-      eslint: 9.17.0(jiti@2.4.1)
+      eslint: 9.17.0(jiti@2.4.2)
       prettier-linter-helpers: 1.0.0
 
   eslint-import-resolver-node@0.3.9:
@@ -7521,53 +7547,53 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
-  eslint-json-compat-utils@0.2.1(eslint@9.17.0(jiti@2.4.1))(jsonc-eslint-parser@2.4.0):
+  eslint-json-compat-utils@0.2.1(eslint@9.17.0(jiti@2.4.2))(jsonc-eslint-parser@2.4.0):
     dependencies:
-      eslint: 9.17.0(jiti@2.4.1)
+      eslint: 9.17.0(jiti@2.4.2)
       esquery: 1.6.0
       jsonc-eslint-parser: 2.4.0
 
-  eslint-merge-processors@0.1.0(eslint@9.17.0(jiti@2.4.1)):
+  eslint-merge-processors@0.1.0(eslint@9.17.0(jiti@2.4.2)):
     dependencies:
-      eslint: 9.17.0(jiti@2.4.1)
+      eslint: 9.17.0(jiti@2.4.2)
 
   eslint-parser-plain@0.1.0: {}
 
-  eslint-plugin-antfu@2.7.0(eslint@9.17.0(jiti@2.4.1)):
+  eslint-plugin-antfu@2.7.0(eslint@9.17.0(jiti@2.4.2)):
     dependencies:
       '@antfu/utils': 0.7.10
-      eslint: 9.17.0(jiti@2.4.1)
+      eslint: 9.17.0(jiti@2.4.2)
 
-  eslint-plugin-command@0.2.6(eslint@9.17.0(jiti@2.4.1)):
+  eslint-plugin-command@0.2.6(eslint@9.17.0(jiti@2.4.2)):
     dependencies:
       '@es-joy/jsdoccomment': 0.48.0
-      eslint: 9.17.0(jiti@2.4.1)
+      eslint: 9.17.0(jiti@2.4.2)
 
-  eslint-plugin-es-x@7.8.0(eslint@9.17.0(jiti@2.4.1)):
+  eslint-plugin-es-x@7.8.0(eslint@9.17.0(jiti@2.4.2)):
     dependencies:
-      '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0(jiti@2.4.1))
+      '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0(jiti@2.4.2))
       '@eslint-community/regexpp': 4.12.1
-      eslint: 9.17.0(jiti@2.4.1)
-      eslint-compat-utils: 0.5.1(eslint@9.17.0(jiti@2.4.1))
+      eslint: 9.17.0(jiti@2.4.2)
+      eslint-compat-utils: 0.5.1(eslint@9.17.0(jiti@2.4.2))
 
-  eslint-plugin-format@0.1.3(eslint@9.17.0(jiti@2.4.1)):
+  eslint-plugin-format@0.1.3(eslint@9.17.0(jiti@2.4.2)):
     dependencies:
       '@dprint/formatter': 0.3.0
       '@dprint/markdown': 0.17.8
       '@dprint/toml': 0.6.3
-      eslint: 9.17.0(jiti@2.4.1)
-      eslint-formatting-reporter: 0.0.0(eslint@9.17.0(jiti@2.4.1))
+      eslint: 9.17.0(jiti@2.4.2)
+      eslint-formatting-reporter: 0.0.0(eslint@9.17.0(jiti@2.4.2))
       eslint-parser-plain: 0.1.0
       prettier: 3.4.2
       synckit: 0.9.2
 
-  eslint-plugin-import-x@4.5.0(eslint@9.17.0(jiti@2.4.1))(typescript@5.6.3):
+  eslint-plugin-import-x@4.5.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.6.3):
     dependencies:
       '@typescript-eslint/scope-manager': 8.18.0
-      '@typescript-eslint/utils': 8.18.0(eslint@9.17.0(jiti@2.4.1))(typescript@5.6.3)
+      '@typescript-eslint/utils': 8.18.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.6.3)
       debug: 4.4.0
       doctrine: 3.0.0
-      eslint: 9.17.0(jiti@2.4.1)
+      eslint: 9.17.0(jiti@2.4.2)
       eslint-import-resolver-node: 0.3.9
       get-tsconfig: 4.8.1
       is-glob: 4.0.3
@@ -7579,14 +7605,14 @@ snapshots:
       - supports-color
       - typescript
 
-  eslint-plugin-jsdoc@50.6.1(eslint@9.17.0(jiti@2.4.1)):
+  eslint-plugin-jsdoc@50.6.1(eslint@9.17.0(jiti@2.4.2)):
     dependencies:
       '@es-joy/jsdoccomment': 0.49.0
       are-docs-informative: 0.0.2
       comment-parser: 1.4.1
       debug: 4.4.0
       escape-string-regexp: 4.0.0
-      eslint: 9.17.0(jiti@2.4.1)
+      eslint: 9.17.0(jiti@2.4.2)
       espree: 10.3.0
       esquery: 1.6.0
       parse-imports: 2.1.1
@@ -7596,12 +7622,12 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
-  eslint-plugin-jsonc@2.18.2(eslint@9.17.0(jiti@2.4.1)):
+  eslint-plugin-jsonc@2.18.2(eslint@9.17.0(jiti@2.4.2)):
     dependencies:
-      '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0(jiti@2.4.1))
-      eslint: 9.17.0(jiti@2.4.1)
-      eslint-compat-utils: 0.6.0(eslint@9.17.0(jiti@2.4.1))
-      eslint-json-compat-utils: 0.2.1(eslint@9.17.0(jiti@2.4.1))(jsonc-eslint-parser@2.4.0)
+      '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0(jiti@2.4.2))
+      eslint: 9.17.0(jiti@2.4.2)
+      eslint-compat-utils: 0.6.0(eslint@9.17.0(jiti@2.4.2))
+      eslint-json-compat-utils: 0.2.1(eslint@9.17.0(jiti@2.4.2))(jsonc-eslint-parser@2.4.0)
       espree: 9.6.1
       graphemer: 1.4.0
       jsonc-eslint-parser: 2.4.0
@@ -7610,12 +7636,12 @@ snapshots:
     transitivePeerDependencies:
       - '@eslint/json'
 
-  eslint-plugin-n@17.15.0(eslint@9.17.0(jiti@2.4.1)):
+  eslint-plugin-n@17.15.0(eslint@9.17.0(jiti@2.4.2)):
     dependencies:
-      '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0(jiti@2.4.1))
+      '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0(jiti@2.4.2))
       enhanced-resolve: 5.17.1
-      eslint: 9.17.0(jiti@2.4.1)
-      eslint-plugin-es-x: 7.8.0(eslint@9.17.0(jiti@2.4.1))
+      eslint: 9.17.0(jiti@2.4.2)
+      eslint-plugin-es-x: 7.8.0(eslint@9.17.0(jiti@2.4.2))
       get-tsconfig: 4.8.1
       globals: 15.13.0
       ignore: 5.3.2
@@ -7624,45 +7650,45 @@ snapshots:
 
   eslint-plugin-no-only-tests@3.3.0: {}
 
-  eslint-plugin-perfectionist@4.3.0(eslint@9.17.0(jiti@2.4.1))(typescript@5.6.3):
+  eslint-plugin-perfectionist@4.3.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.6.3):
     dependencies:
       '@typescript-eslint/types': 8.18.0
-      '@typescript-eslint/utils': 8.18.0(eslint@9.17.0(jiti@2.4.1))(typescript@5.6.3)
-      eslint: 9.17.0(jiti@2.4.1)
+      '@typescript-eslint/utils': 8.18.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.6.3)
+      eslint: 9.17.0(jiti@2.4.2)
       natural-orderby: 5.0.0
     transitivePeerDependencies:
       - supports-color
       - typescript
 
-  eslint-plugin-regexp@2.7.0(eslint@9.17.0(jiti@2.4.1)):
+  eslint-plugin-regexp@2.7.0(eslint@9.17.0(jiti@2.4.2)):
     dependencies:
-      '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0(jiti@2.4.1))
+      '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0(jiti@2.4.2))
       '@eslint-community/regexpp': 4.12.1
       comment-parser: 1.4.1
-      eslint: 9.17.0(jiti@2.4.1)
+      eslint: 9.17.0(jiti@2.4.2)
       jsdoc-type-pratt-parser: 4.1.0
       refa: 0.12.1
       regexp-ast-analysis: 0.7.1
       scslre: 0.3.0
 
-  eslint-plugin-toml@0.12.0(eslint@9.17.0(jiti@2.4.1)):
+  eslint-plugin-toml@0.12.0(eslint@9.17.0(jiti@2.4.2)):
     dependencies:
       debug: 4.4.0
-      eslint: 9.17.0(jiti@2.4.1)
-      eslint-compat-utils: 0.6.0(eslint@9.17.0(jiti@2.4.1))
+      eslint: 9.17.0(jiti@2.4.2)
+      eslint-compat-utils: 0.6.0(eslint@9.17.0(jiti@2.4.2))
       lodash: 4.17.21
       toml-eslint-parser: 0.10.0
     transitivePeerDependencies:
       - supports-color
 
-  eslint-plugin-unicorn@56.0.1(eslint@9.17.0(jiti@2.4.1)):
+  eslint-plugin-unicorn@56.0.1(eslint@9.17.0(jiti@2.4.2)):
     dependencies:
       '@babel/helper-validator-identifier': 7.25.9
-      '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0(jiti@2.4.1))
+      '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0(jiti@2.4.2))
       ci-info: 4.0.0
       clean-regexp: 1.0.0
       core-js-compat: 3.38.1
-      eslint: 9.17.0(jiti@2.4.1)
+      eslint: 9.17.0(jiti@2.4.2)
       esquery: 1.6.0
       globals: 15.13.0
       indent-string: 4.0.0
@@ -7675,41 +7701,41 @@ snapshots:
       semver: 7.6.3
       strip-indent: 3.0.0
 
-  eslint-plugin-unused-imports@4.1.4(@typescript-eslint/eslint-plugin@8.18.0(@typescript-eslint/parser@8.18.0(eslint@9.17.0(jiti@2.4.1))(typescript@5.6.3))(eslint@9.17.0(jiti@2.4.1))(typescript@5.6.3))(eslint@9.17.0(jiti@2.4.1)):
+  eslint-plugin-unused-imports@4.1.4(@typescript-eslint/eslint-plugin@8.18.0(@typescript-eslint/parser@8.18.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.6.3))(eslint@9.17.0(jiti@2.4.2))(typescript@5.6.3))(eslint@9.17.0(jiti@2.4.2)):
     dependencies:
-      eslint: 9.17.0(jiti@2.4.1)
+      eslint: 9.17.0(jiti@2.4.2)
     optionalDependencies:
-      '@typescript-eslint/eslint-plugin': 8.18.0(@typescript-eslint/parser@8.18.0(eslint@9.17.0(jiti@2.4.1))(typescript@5.6.3))(eslint@9.17.0(jiti@2.4.1))(typescript@5.6.3)
+      '@typescript-eslint/eslint-plugin': 8.18.0(@typescript-eslint/parser@8.18.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.6.3))(eslint@9.17.0(jiti@2.4.2))(typescript@5.6.3)
 
-  eslint-plugin-vue@9.32.0(eslint@9.17.0(jiti@2.4.1)):
+  eslint-plugin-vue@9.32.0(eslint@9.17.0(jiti@2.4.2)):
     dependencies:
-      '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0(jiti@2.4.1))
-      eslint: 9.17.0(jiti@2.4.1)
+      '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0(jiti@2.4.2))
+      eslint: 9.17.0(jiti@2.4.2)
       globals: 13.24.0
       natural-compare: 1.4.0
       nth-check: 2.1.1
       postcss-selector-parser: 6.1.2
       semver: 7.6.3
-      vue-eslint-parser: 9.4.3(eslint@9.17.0(jiti@2.4.1))
+      vue-eslint-parser: 9.4.3(eslint@9.17.0(jiti@2.4.2))
       xml-name-validator: 4.0.0
     transitivePeerDependencies:
       - supports-color
 
-  eslint-plugin-yml@1.16.0(eslint@9.17.0(jiti@2.4.1)):
+  eslint-plugin-yml@1.16.0(eslint@9.17.0(jiti@2.4.2)):
     dependencies:
       debug: 4.4.0
-      eslint: 9.17.0(jiti@2.4.1)
-      eslint-compat-utils: 0.6.0(eslint@9.17.0(jiti@2.4.1))
+      eslint: 9.17.0(jiti@2.4.2)
+      eslint-compat-utils: 0.6.0(eslint@9.17.0(jiti@2.4.2))
       lodash: 4.17.21
       natural-compare: 1.4.0
       yaml-eslint-parser: 1.2.3
     transitivePeerDependencies:
       - supports-color
 
-  eslint-processor-vue-blocks@0.1.2(@vue/compiler-sfc@3.5.13)(eslint@9.17.0(jiti@2.4.1)):
+  eslint-processor-vue-blocks@0.1.2(@vue/compiler-sfc@3.5.13)(eslint@9.17.0(jiti@2.4.2)):
     dependencies:
       '@vue/compiler-sfc': 3.5.13
-      eslint: 9.17.0(jiti@2.4.1)
+      eslint: 9.17.0(jiti@2.4.2)
 
   eslint-scope@7.2.2:
     dependencies:
@@ -7725,9 +7751,9 @@ snapshots:
 
   eslint-visitor-keys@4.2.0: {}
 
-  eslint@9.17.0(jiti@2.4.1):
+  eslint@9.17.0(jiti@2.4.2):
     dependencies:
-      '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0(jiti@2.4.1))
+      '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0(jiti@2.4.2))
       '@eslint-community/regexpp': 4.12.1
       '@eslint/config-array': 0.19.0
       '@eslint/core': 0.9.0
@@ -7762,7 +7788,7 @@ snapshots:
       natural-compare: 1.4.0
       optionator: 0.9.4
     optionalDependencies:
-      jiti: 2.4.1
+      jiti: 2.4.2
     transitivePeerDependencies:
       - supports-color
 
@@ -8132,24 +8158,12 @@ snapshots:
       parent-module: 1.0.1
       resolve-from: 4.0.0
 
-  importx@0.4.4:
-    dependencies:
-      bundle-require: 5.0.0(esbuild@0.23.1)
-      debug: 4.4.0
-      esbuild: 0.23.1
-      jiti: 2.0.0-beta.3
-      jiti-v1: jiti@1.21.6
-      pathe: 1.1.2
-      tsx: 4.19.1
-    transitivePeerDependencies:
-      - supports-color
-
   importx@0.5.0:
     dependencies:
       bundle-require: 5.0.0(esbuild@0.23.1)
       debug: 4.4.0
       esbuild: 0.23.1
-      jiti: 2.4.1
+      jiti: 2.4.2
       pathe: 1.1.2
       tsx: 4.19.1
     transitivePeerDependencies:
@@ -8253,9 +8267,7 @@ snapshots:
 
   jiti@1.21.6: {}
 
-  jiti@2.0.0-beta.3: {}
-
-  jiti@2.4.1: {}
+  jiti@2.4.2: {}
 
   js-tokens@4.0.0: {}
 
@@ -8576,7 +8588,7 @@ snapshots:
 
   mdn-data@2.0.30: {}
 
-  mdn-data@2.12.1: {}
+  mdn-data@2.12.2: {}
 
   mdurl@2.0.0: {}
 
@@ -8946,7 +8958,7 @@ snapshots:
 
   min-indent@1.0.1: {}
 
-  miniflare@3.20241205.0:
+  miniflare@3.20241218.0:
     dependencies:
       '@cspotcode/source-map-support': 0.8.1
       acorn: 8.14.0
@@ -8956,7 +8968,7 @@ snapshots:
       glob-to-regexp: 0.4.1
       stoppable: 1.1.0
       undici: 5.28.4
-      workerd: 1.20241205.0
+      workerd: 1.20241218.0
       ws: 8.18.0
       youch: 3.3.3
       zod: 3.23.8
@@ -9099,11 +9111,11 @@ snapshots:
     dependencies:
       mimic-function: 5.0.1
 
-  oniguruma-to-es@0.8.0:
+  oniguruma-to-es@0.9.0:
     dependencies:
       emoji-regex-xs: 1.0.0
-      regex: 5.0.2
-      regex-recursion: 5.0.0
+      regex: 5.1.1
+      regex-recursion: 5.1.1
 
   optionator@0.9.4:
     dependencies:
@@ -9220,7 +9232,7 @@ snapshots:
 
   pluralize@8.0.0: {}
 
-  pnpm@9.15.0: {}
+  pnpm@9.15.1: {}
 
   postcss-calc@10.0.2(postcss@8.4.49):
     dependencies:
@@ -9453,13 +9465,14 @@ snapshots:
     dependencies:
       '@eslint-community/regexpp': 4.12.1
 
-  regex-recursion@5.0.0:
+  regex-recursion@5.1.1:
     dependencies:
+      regex: 5.1.1
       regex-utilities: 2.3.0
 
   regex-utilities@2.3.0: {}
 
-  regex@5.0.2:
+  regex@5.1.1:
     dependencies:
       regex-utilities: 2.3.0
 
@@ -9539,22 +9552,22 @@ snapshots:
       globby: 10.0.1
       is-plain-object: 3.0.1
 
-  rollup-plugin-dts@6.1.1(rollup@4.28.1)(typescript@5.6.3):
+  rollup-plugin-dts@6.1.1(rollup@4.29.1)(typescript@5.6.3):
     dependencies:
       magic-string: 0.30.17
-      rollup: 4.28.1
+      rollup: 4.29.1
       typescript: 5.6.3
     optionalDependencies:
       '@babel/code-frame': 7.26.2
 
-  rollup-plugin-esbuild@6.1.1(esbuild@0.17.19)(rollup@4.28.1):
+  rollup-plugin-esbuild@6.1.1(esbuild@0.17.19)(rollup@4.29.1):
     dependencies:
-      '@rollup/pluginutils': 5.1.4(rollup@4.28.1)
+      '@rollup/pluginutils': 5.1.4(rollup@4.29.1)
       debug: 4.4.0
       es-module-lexer: 1.5.4
       esbuild: 0.17.19
       get-tsconfig: 4.8.1
-      rollup: 4.28.1
+      rollup: 4.29.1
     transitivePeerDependencies:
       - supports-color
 
@@ -9568,12 +9581,12 @@ snapshots:
     dependencies:
       rollup-plugin-inject: 3.0.2
 
-  rollup-plugin-typescript2@0.36.0(rollup@4.28.1)(typescript@5.6.3):
+  rollup-plugin-typescript2@0.36.0(rollup@4.29.1)(typescript@5.6.3):
     dependencies:
       '@rollup/pluginutils': 4.2.1
       find-cache-dir: 3.3.2
       fs-extra: 10.1.0
-      rollup: 4.28.1
+      rollup: 4.29.1
       semver: 7.6.3
       tslib: 2.7.0
       typescript: 5.6.3
@@ -9582,29 +9595,29 @@ snapshots:
     dependencies:
       estree-walker: 0.6.1
 
-  rollup@4.28.1:
+  rollup@4.29.1:
     dependencies:
       '@types/estree': 1.0.6
     optionalDependencies:
-      '@rollup/rollup-android-arm-eabi': 4.28.1
-      '@rollup/rollup-android-arm64': 4.28.1
-      '@rollup/rollup-darwin-arm64': 4.28.1
-      '@rollup/rollup-darwin-x64': 4.28.1
-      '@rollup/rollup-freebsd-arm64': 4.28.1
-      '@rollup/rollup-freebsd-x64': 4.28.1
-      '@rollup/rollup-linux-arm-gnueabihf': 4.28.1
-      '@rollup/rollup-linux-arm-musleabihf': 4.28.1
-      '@rollup/rollup-linux-arm64-gnu': 4.28.1
-      '@rollup/rollup-linux-arm64-musl': 4.28.1
-      '@rollup/rollup-linux-loongarch64-gnu': 4.28.1
-      '@rollup/rollup-linux-powerpc64le-gnu': 4.28.1
-      '@rollup/rollup-linux-riscv64-gnu': 4.28.1
-      '@rollup/rollup-linux-s390x-gnu': 4.28.1
-      '@rollup/rollup-linux-x64-gnu': 4.28.1
-      '@rollup/rollup-linux-x64-musl': 4.28.1
-      '@rollup/rollup-win32-arm64-msvc': 4.28.1
-      '@rollup/rollup-win32-ia32-msvc': 4.28.1
-      '@rollup/rollup-win32-x64-msvc': 4.28.1
+      '@rollup/rollup-android-arm-eabi': 4.29.1
+      '@rollup/rollup-android-arm64': 4.29.1
+      '@rollup/rollup-darwin-arm64': 4.29.1
+      '@rollup/rollup-darwin-x64': 4.29.1
+      '@rollup/rollup-freebsd-arm64': 4.29.1
+      '@rollup/rollup-freebsd-x64': 4.29.1
+      '@rollup/rollup-linux-arm-gnueabihf': 4.29.1
+      '@rollup/rollup-linux-arm-musleabihf': 4.29.1
+      '@rollup/rollup-linux-arm64-gnu': 4.29.1
+      '@rollup/rollup-linux-arm64-musl': 4.29.1
+      '@rollup/rollup-linux-loongarch64-gnu': 4.29.1
+      '@rollup/rollup-linux-powerpc64le-gnu': 4.29.1
+      '@rollup/rollup-linux-riscv64-gnu': 4.29.1
+      '@rollup/rollup-linux-s390x-gnu': 4.29.1
+      '@rollup/rollup-linux-x64-gnu': 4.29.1
+      '@rollup/rollup-linux-x64-musl': 4.29.1
+      '@rollup/rollup-win32-arm64-msvc': 4.29.1
+      '@rollup/rollup-win32-ia32-msvc': 4.29.1
+      '@rollup/rollup-win32-x64-msvc': 4.29.1
       fsevents: 2.3.3
 
   run-parallel@1.2.0:
@@ -9665,7 +9678,7 @@ snapshots:
 
   simple-git-hooks@2.11.1: {}
 
-  sirv@2.0.4:
+  sirv@3.0.0:
     dependencies:
       '@polka/url': 1.0.0-next.25
       mrmime: 2.0.0
@@ -9829,7 +9842,7 @@ snapshots:
 
   taze@0.18.0:
     dependencies:
-      '@antfu/ni': 0.23.1
+      '@antfu/ni': 0.23.2
       js-yaml: 4.1.0
       ofetch: 1.4.1
       package-manager-detector: 0.2.5
@@ -9867,7 +9880,9 @@ snapshots:
 
   tinyspy@3.0.0: {}
 
-  tm-grammars@1.21.8: {}
+  tm-grammars@1.21.10: {}
+
+  tm-grammars@1.21.9: {}
 
   tm-themes@1.9.5: {}
 
@@ -9941,26 +9956,26 @@ snapshots:
 
   unbuild@3.0.1(typescript@5.6.3)(vue-tsc@2.1.10(typescript@5.6.3))(vue@3.5.13(typescript@5.6.3)):
     dependencies:
-      '@rollup/plugin-alias': 5.1.1(rollup@4.28.1)
-      '@rollup/plugin-commonjs': 28.0.2(rollup@4.28.1)
-      '@rollup/plugin-json': 6.1.0(rollup@4.28.1)
-      '@rollup/plugin-node-resolve': 15.3.0(rollup@4.28.1)
-      '@rollup/plugin-replace': 6.0.2(rollup@4.28.1)
-      '@rollup/pluginutils': 5.1.4(rollup@4.28.1)
+      '@rollup/plugin-alias': 5.1.1(rollup@4.29.1)
+      '@rollup/plugin-commonjs': 28.0.2(rollup@4.29.1)
+      '@rollup/plugin-json': 6.1.0(rollup@4.29.1)
+      '@rollup/plugin-node-resolve': 15.3.0(rollup@4.29.1)
+      '@rollup/plugin-replace': 6.0.2(rollup@4.29.1)
+      '@rollup/pluginutils': 5.1.4(rollup@4.29.1)
       citty: 0.1.6
       consola: 3.2.3
       defu: 6.1.4
       esbuild: 0.24.0
       hookable: 5.5.3
-      jiti: 2.4.1
+      jiti: 2.4.2
       magic-string: 0.30.17
       mkdist: 2.1.0(typescript@5.6.3)(vue-tsc@2.1.10(typescript@5.6.3))(vue@3.5.13(typescript@5.6.3))
       mlly: 1.7.3
       pathe: 1.1.2
       pkg-types: 1.2.1
       pretty-bytes: 6.1.1
-      rollup: 4.28.1
-      rollup-plugin-dts: 6.1.1(rollup@4.28.1)(typescript@5.6.3)
+      rollup: 4.29.1
+      rollup-plugin-dts: 6.1.1(rollup@4.29.1)(typescript@5.6.3)
       scule: 1.3.0
       tinyglobby: 0.2.10
       ufo: 1.5.4
@@ -9973,14 +9988,6 @@ snapshots:
       - vue
       - vue-tsc
 
-  unconfig@0.5.5:
-    dependencies:
-      '@antfu/utils': 0.7.10
-      defu: 6.1.4
-      importx: 0.4.4
-    transitivePeerDependencies:
-      - supports-color
-
   unconfig@0.6.0:
     dependencies:
       '@antfu/utils': 0.7.10
@@ -10043,37 +10050,37 @@ snapshots:
 
   universalify@2.0.1: {}
 
-  unocss@0.65.1(postcss@8.4.49)(rollup@4.28.1)(vite@6.0.3(@types/node@22.10.2)(jiti@2.4.1)(terser@5.32.0)(tsx@4.19.1)(yaml@2.6.1))(vue@3.5.13(typescript@5.6.3)):
-    dependencies:
-      '@unocss/astro': 0.65.1(rollup@4.28.1)(vite@6.0.3(@types/node@22.10.2)(jiti@2.4.1)(terser@5.32.0)(tsx@4.19.1)(yaml@2.6.1))(vue@3.5.13(typescript@5.6.3))
-      '@unocss/cli': 0.65.1(rollup@4.28.1)
-      '@unocss/core': 0.65.1
-      '@unocss/postcss': 0.65.1(postcss@8.4.49)
-      '@unocss/preset-attributify': 0.65.1
-      '@unocss/preset-icons': 0.65.1
-      '@unocss/preset-mini': 0.65.1
-      '@unocss/preset-tagify': 0.65.1
-      '@unocss/preset-typography': 0.65.1
-      '@unocss/preset-uno': 0.65.1
-      '@unocss/preset-web-fonts': 0.65.1
-      '@unocss/preset-wind': 0.65.1
-      '@unocss/transformer-attributify-jsx': 0.65.1
-      '@unocss/transformer-compile-class': 0.65.1
-      '@unocss/transformer-directives': 0.65.1
-      '@unocss/transformer-variant-group': 0.65.1
-      '@unocss/vite': 0.65.1(rollup@4.28.1)(vite@6.0.3(@types/node@22.10.2)(jiti@2.4.1)(terser@5.32.0)(tsx@4.19.1)(yaml@2.6.1))(vue@3.5.13(typescript@5.6.3))
+  unocss@0.65.2(postcss@8.4.49)(rollup@4.29.1)(vite@6.0.5(@types/node@22.10.2)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.1)(yaml@2.6.1))(vue@3.5.13(typescript@5.6.3)):
+    dependencies:
+      '@unocss/astro': 0.65.2(rollup@4.29.1)(vite@6.0.5(@types/node@22.10.2)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.1)(yaml@2.6.1))(vue@3.5.13(typescript@5.6.3))
+      '@unocss/cli': 0.65.2(rollup@4.29.1)
+      '@unocss/core': 0.65.2
+      '@unocss/postcss': 0.65.2(postcss@8.4.49)
+      '@unocss/preset-attributify': 0.65.2
+      '@unocss/preset-icons': 0.65.2
+      '@unocss/preset-mini': 0.65.2
+      '@unocss/preset-tagify': 0.65.2
+      '@unocss/preset-typography': 0.65.2
+      '@unocss/preset-uno': 0.65.2
+      '@unocss/preset-web-fonts': 0.65.2
+      '@unocss/preset-wind': 0.65.2
+      '@unocss/transformer-attributify-jsx': 0.65.2
+      '@unocss/transformer-compile-class': 0.65.2
+      '@unocss/transformer-directives': 0.65.2
+      '@unocss/transformer-variant-group': 0.65.2
+      '@unocss/vite': 0.65.2(rollup@4.29.1)(vite@6.0.5(@types/node@22.10.2)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.1)(yaml@2.6.1))(vue@3.5.13(typescript@5.6.3))
     optionalDependencies:
-      vite: 6.0.3(@types/node@22.10.2)(jiti@2.4.1)(terser@5.32.0)(tsx@4.19.1)(yaml@2.6.1)
+      vite: 6.0.5(@types/node@22.10.2)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.1)(yaml@2.6.1)
     transitivePeerDependencies:
       - postcss
       - rollup
       - supports-color
       - vue
 
-  unplugin-vue-components@0.28.0(@babel/parser@7.26.3)(rollup@4.28.1)(vue@3.5.13(typescript@5.6.3)):
+  unplugin-vue-components@0.28.0(@babel/parser@7.26.3)(rollup@4.29.1)(vue@3.5.13(typescript@5.6.3)):
     dependencies:
       '@antfu/utils': 0.7.10
-      '@rollup/pluginutils': 5.1.4(rollup@4.28.1)
+      '@rollup/pluginutils': 5.1.4(rollup@4.29.1)
       chokidar: 3.6.0
       debug: 4.4.0
       fast-glob: 3.3.2
@@ -10100,7 +10107,7 @@ snapshots:
       '@babel/standalone': 7.26.4
       '@babel/types': 7.26.3
       defu: 6.1.4
-      jiti: 2.4.1
+      jiti: 2.4.2
       mri: 1.2.0
       scule: 1.3.0
     transitivePeerDependencies:
@@ -10147,13 +10154,13 @@ snapshots:
       '@types/unist': 3.0.3
       vfile-message: 4.0.2
 
-  vite-node@2.0.5(@types/node@22.10.2)(jiti@2.4.1)(terser@5.32.0)(tsx@4.19.1)(yaml@2.6.1):
+  vite-node@2.0.5(@types/node@22.10.2)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.1)(yaml@2.6.1):
     dependencies:
       cac: 6.7.14
       debug: 4.4.0
       pathe: 1.1.2
       tinyrainbow: 1.2.0
-      vite: 6.0.3(@types/node@22.10.2)(jiti@2.4.1)(terser@5.32.0)(tsx@4.19.1)(yaml@2.6.1)
+      vite: 6.0.5(@types/node@22.10.2)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.1)(yaml@2.6.1)
     transitivePeerDependencies:
       - '@types/node'
       - jiti
@@ -10168,38 +10175,38 @@ snapshots:
       - tsx
       - yaml
 
-  vite-tsconfig-paths@5.1.4(typescript@5.6.3)(vite@6.0.3(@types/node@22.10.2)(jiti@2.4.1)(terser@5.32.0)(tsx@4.19.1)(yaml@2.6.1)):
+  vite-tsconfig-paths@5.1.4(typescript@5.6.3)(vite@6.0.5(@types/node@22.10.2)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.1)(yaml@2.6.1)):
     dependencies:
       debug: 4.4.0
       globrex: 0.1.2
       tsconfck: 3.1.3(typescript@5.6.3)
     optionalDependencies:
-      vite: 6.0.3(@types/node@22.10.2)(jiti@2.4.1)(terser@5.32.0)(tsx@4.19.1)(yaml@2.6.1)
+      vite: 6.0.5(@types/node@22.10.2)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.1)(yaml@2.6.1)
     transitivePeerDependencies:
       - supports-color
       - typescript
 
-  vite@6.0.3(@types/node@22.10.2)(jiti@2.4.1)(terser@5.32.0)(tsx@4.19.1)(yaml@2.6.1):
+  vite@6.0.5(@types/node@22.10.2)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.1)(yaml@2.6.1):
     dependencies:
       esbuild: 0.24.0
       postcss: 8.4.49
-      rollup: 4.28.1
+      rollup: 4.29.1
     optionalDependencies:
       '@types/node': 22.10.2
       fsevents: 2.3.3
-      jiti: 2.4.1
+      jiti: 2.4.2
       terser: 5.32.0
       tsx: 4.19.1
       yaml: 2.6.1
 
-  vitepress-plugin-mermaid@2.0.17(mermaid@10.9.1)(vitepress@1.5.0(@algolia/client-search@4.24.0)(@types/node@22.10.2)(fuse.js@7.0.0)(jiti@2.4.1)(postcss@8.4.49)(search-insights@2.17.1)(terser@5.32.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.6.1)):
+  vitepress-plugin-mermaid@2.0.17(mermaid@10.9.1)(vitepress@1.5.0(@algolia/client-search@4.24.0)(@types/node@22.10.2)(fuse.js@7.0.0)(jiti@2.4.2)(postcss@8.4.49)(search-insights@2.17.1)(terser@5.32.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.6.1)):
     dependencies:
       mermaid: 10.9.1
-      vitepress: 1.5.0(@algolia/client-search@4.24.0)(@types/node@22.10.2)(fuse.js@7.0.0)(jiti@2.4.1)(postcss@8.4.49)(search-insights@2.17.1)(terser@5.32.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.6.1)
+      vitepress: 1.5.0(@algolia/client-search@4.24.0)(@types/node@22.10.2)(fuse.js@7.0.0)(jiti@2.4.2)(postcss@8.4.49)(search-insights@2.17.1)(terser@5.32.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.6.1)
     optionalDependencies:
       '@mermaid-js/mermaid-mindmap': 9.3.0
 
-  vitepress@1.5.0(@algolia/client-search@4.24.0)(@types/node@22.10.2)(fuse.js@7.0.0)(jiti@2.4.1)(postcss@8.4.49)(search-insights@2.17.1)(terser@5.32.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.6.1):
+  vitepress@1.5.0(@algolia/client-search@4.24.0)(@types/node@22.10.2)(fuse.js@7.0.0)(jiti@2.4.2)(postcss@8.4.49)(search-insights@2.17.1)(terser@5.32.0)(tsx@4.19.1)(typescript@5.6.3)(yaml@2.6.1):
     dependencies:
       '@docsearch/css': 3.6.2
       '@docsearch/js': 3.6.2(@algolia/client-search@4.24.0)(search-insights@2.17.1)
@@ -10208,7 +10215,7 @@ snapshots:
       '@shikijs/transformers': link:packages/transformers
       '@shikijs/types': 1.22.2
       '@types/markdown-it': 14.1.2
-      '@vitejs/plugin-vue': 5.1.4(vite@6.0.3(@types/node@22.10.2)(jiti@2.4.1)(terser@5.32.0)(tsx@4.19.1)(yaml@2.6.1))(vue@3.5.13(typescript@5.6.3))
+      '@vitejs/plugin-vue': 5.1.4(vite@6.0.5(@types/node@22.10.2)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.1)(yaml@2.6.1))(vue@3.5.13(typescript@5.6.3))
       '@vue/devtools-api': 7.6.4
       '@vue/shared': 3.5.13
       '@vueuse/core': 11.2.0(vue@3.5.13(typescript@5.6.3))
@@ -10217,7 +10224,7 @@ snapshots:
       mark.js: 8.11.1
       minisearch: 7.1.0
       shiki: link:packages/shiki
-      vite: 6.0.3(@types/node@22.10.2)(jiti@2.4.1)(terser@5.32.0)(tsx@4.19.1)(yaml@2.6.1)
+      vite: 6.0.5(@types/node@22.10.2)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.1)(yaml@2.6.1)
       vue: 3.5.13(typescript@5.6.3)
     optionalDependencies:
       postcss: 8.4.49
@@ -10252,7 +10259,7 @@ snapshots:
       - universal-cookie
       - yaml
 
-  vitest@2.0.5(@types/node@22.10.2)(jiti@2.4.1)(terser@5.32.0)(tsx@4.19.1)(yaml@2.6.1):
+  vitest@2.0.5(@types/node@22.10.2)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.1)(yaml@2.6.1):
     dependencies:
       '@ampproject/remapping': 2.3.0
       '@vitest/expect': 2.0.5
@@ -10270,8 +10277,8 @@ snapshots:
       tinybench: 2.9.0
       tinypool: 1.0.1
       tinyrainbow: 1.2.0
-      vite: 6.0.3(@types/node@22.10.2)(jiti@2.4.1)(terser@5.32.0)(tsx@4.19.1)(yaml@2.6.1)
-      vite-node: 2.0.5(@types/node@22.10.2)(jiti@2.4.1)(terser@5.32.0)(tsx@4.19.1)(yaml@2.6.1)
+      vite: 6.0.5(@types/node@22.10.2)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.1)(yaml@2.6.1)
+      vite-node: 2.0.5(@types/node@22.10.2)(jiti@2.4.2)(terser@5.32.0)(tsx@4.19.1)(yaml@2.6.1)
       why-is-node-running: 2.3.0
     optionalDependencies:
       '@types/node': 22.10.2
@@ -10298,10 +10305,10 @@ snapshots:
     dependencies:
       vue: 3.5.13(typescript@5.6.3)
 
-  vue-eslint-parser@9.4.3(eslint@9.17.0(jiti@2.4.1)):
+  vue-eslint-parser@9.4.3(eslint@9.17.0(jiti@2.4.2)):
     dependencies:
       debug: 4.4.0
-      eslint: 9.17.0(jiti@2.4.1)
+      eslint: 9.17.0(jiti@2.4.2)
       eslint-scope: 7.2.2
       eslint-visitor-keys: 3.4.3
       espree: 9.6.1
@@ -10353,15 +10360,15 @@ snapshots:
 
   word-wrap@1.2.5: {}
 
-  workerd@1.20241205.0:
+  workerd@1.20241218.0:
     optionalDependencies:
-      '@cloudflare/workerd-darwin-64': 1.20241205.0
-      '@cloudflare/workerd-darwin-arm64': 1.20241205.0
-      '@cloudflare/workerd-linux-64': 1.20241205.0
-      '@cloudflare/workerd-linux-arm64': 1.20241205.0
-      '@cloudflare/workerd-windows-64': 1.20241205.0
+      '@cloudflare/workerd-darwin-64': 1.20241218.0
+      '@cloudflare/workerd-darwin-arm64': 1.20241218.0
+      '@cloudflare/workerd-linux-64': 1.20241218.0
+      '@cloudflare/workerd-linux-arm64': 1.20241218.0
+      '@cloudflare/workerd-windows-64': 1.20241218.0
 
-  wrangler@3.96.0:
+  wrangler@3.99.0:
     dependencies:
       '@cloudflare/kv-asset-handler': 0.3.4
       '@esbuild-plugins/node-globals-polyfill': 0.2.3(esbuild@0.17.19)
@@ -10371,14 +10378,14 @@ snapshots:
       date-fns: 4.1.0
       esbuild: 0.17.19
       itty-time: 1.0.6
-      miniflare: 3.20241205.0
+      miniflare: 3.20241218.0
       nanoid: 3.3.7
       path-to-regexp: 6.3.0
       resolve: 1.22.8
       selfsigned: 2.4.1
       source-map: 0.6.1
       unenv: unenv-nightly@2.0.0-20241204-140205-a5d5190
-      workerd: 1.20241205.0
+      workerd: 1.20241218.0
       xxhash-wasm: 1.0.2
     optionalDependencies:
       fsevents: 2.3.3
diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml
index 66b8bcef..46a12806 100644
--- a/pnpm-workspace.yaml
+++ b/pnpm-workspace.yaml
@@ -7,7 +7,7 @@ packages:
   - packages/@shikijs/core/vendor/*
 catalog:
   '@antfu/eslint-config': ^3.12.0
-  '@antfu/ni': ^0.23.1
+  '@antfu/ni': ^0.23.2
   '@antfu/utils': ^0.7.10
   '@iconify-json/carbon': ^1.2.5
   '@iconify-json/codicon': ^1.2.8
@@ -27,12 +27,12 @@ catalog:
   '@types/minimist': ^1.2.5
   '@types/node': ^22.10.2
   '@types/unist': ^3.0.3
-  '@unocss/reset': ^0.65.1
+  '@unocss/reset': ^0.65.2
   '@vitest/coverage-v8': 2.0.5
   '@vueuse/core': ^12.0.0
   ansi-sequence-parser: ^1.1.1
   bumpp: ^9.9.1
-  chalk: ^5.3.0
+  chalk: ^5.4.1
   eslint: ^9.17.0
   eslint-plugin-format: ^0.1.3
   esno: ^4.8.0
@@ -43,7 +43,7 @@ catalog:
   hast-util-from-html: ^2.0.3
   hast-util-to-html: ^9.0.4
   hast-util-to-string: ^3.0.1
-  jiti: ^2.4.1
+  jiti: ^2.4.2
   jsonc-parser: ^3.3.1
   lint-staged: ^15.2.11
   markdown-it: ^14.1.0
@@ -54,17 +54,17 @@ catalog:
   monaco-editor-core: ^0.52.2
   ofetch: ^1.4.1
   ohash: ^1.1.4
-  oniguruma-to-es: 0.8.0
+  oniguruma-to-es: 0.9.0
   picocolors: ^1.1.1
   pinia: ^2.3.0
-  pnpm: ^9.15.0
+  pnpm: ^9.15.1
   prettier: ^3.4.2
   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.28.1
+  rollup: ^4.29.1
   rollup-plugin-copy: ^3.5.0
   rollup-plugin-dts: ^6.1.1
   rollup-plugin-esbuild: ^6.1.1
@@ -72,7 +72,7 @@ catalog:
   shiki-legacy: npm:shiki@^0.14.7
   simple-git-hooks: ^2.11.1
   taze: ^0.18.0
-  tm-grammars: ^1.21.8
+  tm-grammars: ^1.21.9
   tm-themes: ^1.9.5
   twoslash: ^0.2.12
   twoslash-vue: ^0.2.12
@@ -80,9 +80,9 @@ catalog:
   unbuild: ^3.0.1
   unified: ^11.0.5
   unist-util-visit: ^5.0.0
-  unocss: ^0.65.1
+  unocss: ^0.65.2
   unplugin-vue-components: ^0.28.0
-  vite: ^6.0.3
+  vite: ^6.0.5
   vite-tsconfig-paths: ^5.1.4
   vitepress: ^1.5.0
   vitepress-plugin-mermaid: ^2.0.17
@@ -90,4 +90,4 @@ catalog:
   vscode-oniguruma: ^1.7.0
   vue: ^3.5.13
   vue-tsc: ^2.1.10
-  wrangler: ^3.96.0
+  wrangler: ^3.99.0


Test patch:
diff --git a/packages/engine-javascript/test/__records__/markdown.js.json b/packages/engine-javascript/test/__records__/markdown.js.json
index 916e2e62..859f372c 100644
--- a/packages/engine-javascript/test/__records__/markdown.js.json
+++ b/packages/engine-javascript/test/__records__/markdown.js.json
@@ -886,13 +886,13 @@
       "index": 11,
       "captureIndices": [
         {
-          "start": 0,
-          "end": 0,
+          "start": 4,
+          "end": 4,
           "length": 0
         },
         {
-          "start": 0,
-          "end": 0,
+          "start": 4,
+          "end": 4,
           "length": 0
         }
       ]
@@ -1005,28 +1005,28 @@
       "index": 3,
       "captureIndices": [
         {
-          "start": 0,
-          "end": 2,
+          "start": 2,
+          "end": 4,
           "length": 2
         },
         {
-          "start": 0,
-          "end": 0,
+          "start": 2,
+          "end": 2,
           "length": 0
         },
         {
-          "start": 0,
-          "end": 0,
+          "start": 2,
+          "end": 2,
           "length": 0
         },
         {
-          "start": 0,
-          "end": 1,
+          "start": 2,
+          "end": 3,
           "length": 1
         },
         {
-          "start": 1,
-          "end": 2,
+          "start": 3,
+          "end": 4,
           "length": 1
         }
       ]
@@ -1051,40 +1051,53 @@
     ],
     "args": [
       "  * that one\n",
-      2,
+      4,
       0
     ],
     "result": {
-      "index": 3,
+      "index": 11,
       "captureIndices": [
         {
-          "start": 0,
-          "end": 2,
-          "length": 2
-        },
-        {
-          "start": 0,
-          "end": 0,
+          "start": 4,
+          "end": 4,
           "length": 0
         },
         {
-          "start": 0,
-          "end": 0,
+          "start": 4,
+          "end": 4,
           "length": 0
-        },
-        {
-          "start": 0,
-          "end": 1,
-          "length": 1
-        },
-        {
-          "start": 1,
-          "end": 2,
-          "length": 1
         }
       ]
     }
   },
+  {
+    "id": "3O5Mw8yMa3",
+    "patterns": [
+      "&(?!([a-zA-Z0-9]+|#\\d+|#x[0-9a-fA-F]+);)",
+      "<(?![a-zA-Z/?$!])",
+      "(?<open>(\\*\\*(?=\\w)|(?<!\\w)\\*\\*|(?<!\\w)\\b__))(?=\\S)(?=(<[^>]*+>|(?<raw>`+)([^`]|(?!(?<!`)\\k<raw>(?!`))`)*+\\k<raw>|\\\\[\\\\`*_{}\\[\\]()#.!+\\->]?+|\\[((?<square>[^\\[\\]\\\\]|\\\\.|\\[\\g<square>*+\\])*+\\](([ ]?\\[[^\\]]*+\\])|(\\([ \\t]*+<?(.*?)>?[ \\t]*+((?<title>['\"])(.*?)\\k<title>)?\\))))|(?!(?<=\\S)\\k<open>).)++(?<=\\S)(?=__\\b|\\*\\*)\\k<open>)",
+      "(?<open>(\\*(?=\\w)|(?<!\\w)\\*|(?<!\\w)\\b_))(?=\\S)(?=(<[^>]*+>|(?<raw>`+)([^`]|(?!(?<!`)\\k<raw>(?!`))`)*+\\k<raw>|\\\\[\\\\`*_{}\\[\\]()#.!+\\->]?+|\\[((?<square>[^\\[\\]\\\\]|\\\\.|\\[\\g<square>*+\\])*+\\](([ ]?\\[[^\\]]*+\\])|(\\([ \\t]*+<?(.*?)>?[ \\t]*+((?<title>['\"])(.*?)\\k<title>)?\\))))|\\k<open>\\k<open>|(?!(?<=\\S)\\k<open>).)++(?<=\\S)(?=_\\b|\\*)\\k<open>)",
+      "(`+)((?:[^`]|(?!(?<!`)\\1(?!`))`)*+)(\\1)",
+      "(?<!\\\\)(~{2,})((?:[^~]|(?!(?<![~\\\\])\\1(?!~))~)*+)(\\1)",
+      "\\\\[-`*_#+.!(){}\\[\\]\\\\>]",
+      "(!\\[)((?<square>[^\\[\\]\\\\]|\\\\.|\\[\\g<square>*+\\])*+)(\\])(\\()[ \\t]*((<)((?:\\\\[<>]|[^<>\\n])*)(>)|((?<url>(?>[^\\s()]+)|\\(\\g<url>*\\))*))[ \\t]*(?:((\\().+?(\\)))|((\").+?(\"))|((').+?(')))?\\s*(\\))",
+      "(!\\[)((?<square>[^\\[\\]\\\\]|\\\\.|\\[\\g<square>*+\\])*+)(\\])[ ]?(\\[)(.*?)(\\])",
+      "(<)((?:mailto:)?[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*)(>)",
+      "(<)((?:https?|ftp)://.*?)(>)",
+      "(\\[)((?<square>[^\\[\\]\\\\]|\\\\.|\\[\\g<square>*+\\])*+)(\\])(\\()[ \\t]*((<)((?:\\\\[<>]|[^<>\\n])*)(>)|((?<url>(?>[^\\s()]+)|\\(\\g<url>*\\))*))[ \\t]*(?:((\\()[^()]*(\\)))|((\")[^\"]*(\"))|((')[^']*(')))?\\s*(\\))",
+      "(?<![\\]\\\\])(\\[)((?<square>[^\\[\\]\\\\]|\\\\.|\\[\\g<square>*+\\])*+)(\\])(\\[)([^\\]]*+)(\\])",
+      "(?<![\\]\\\\])(\\[)((?<square>[^\\[\\]\\\\]|\\\\.|\\[\\g<square>*+\\])*+)(\\])[ ]?(\\[)(\\])",
+      "(?<![\\]\\\\])(\\[)((?:[^\\s\\[\\]\\\\]|\\\\[\\[\\]])+?)((?<!\\\\)\\])",
+      "^(={3,})(?=[ \\t]*$\\n?)",
+      "^(-{3,})(?=[ \\t]*$\\n?)"
+    ],
+    "args": [
+      "  * that one\n",
+      4,
+      0
+    ],
+    "result": null
+  },
   {
     "id": "o849naoraG",
     "patterns": [
@@ -1164,28 +1177,28 @@
       "index": 3,
       "captureIndices": [
         {
-          "start": 0,
-          "end": 2,
+          "start": 2,
+          "end": 4,
           "length": 2
         },
         {
-          "start": 0,
-          "end": 0,
+          "start": 2,
+          "end": 2,
           "length": 0
         },
         {
-          "start": 0,
-          "end": 0,
+          "start": 2,
+          "end": 2,
           "length": 0
         },
         {
-          "start": 0,
-          "end": 1,
+          "start": 2,
+          "end": 3,
           "length": 1
         },
         {
-          "start": 1,
-          "end": 2,
+          "start": 3,
+          "end": 4,
           "length": 1
         }
       ]
@@ -1210,40 +1223,53 @@
     ],
     "args": [
       "  * the other one\n",
-      2,
+      4,
       0
     ],
     "result": {
-      "index": 3,
+      "index": 11,
       "captureIndices": [
         {
-          "start": 0,
-          "end": 2,
-          "length": 2
-        },
-        {
-          "start": 0,
-          "end": 0,
+          "start": 4,
+          "end": 4,
           "length": 0
         },
         {
-          "start": 0,
-          "end": 0,
+          "start": 4,
+          "end": 4,
           "length": 0
-        },
-        {
-          "start": 0,
-          "end": 1,
-          "length": 1
-        },
-        {
-          "start": 1,
-          "end": 2,
-          "length": 1
         }
       ]
     }
   },
+  {
+    "id": "3O5Mw8yMa3",
+    "patterns": [
+      "&(?!([a-zA-Z0-9]+|#\\d+|#x[0-9a-fA-F]+);)",
+      "<(?![a-zA-Z/?$!])",
+      "(?<open>(\\*\\*(?=\\w)|(?<!\\w)\\*\\*|(?<!\\w)\\b__))(?=\\S)(?=(<[^>]*+>|(?<raw>`+)([^`]|(?!(?<!`)\\k<raw>(?!`))`)*+\\k<raw>|\\\\[\\\\`*_{}\\[\\]()#.!+\\->]?+|\\[((?<square>[^\\[\\]\\\\]|\\\\.|\\[\\g<square>*+\\])*+\\](([ ]?\\[[^\\]]*+\\])|(\\([ \\t]*+<?(.*?)>?[ \\t]*+((?<title>['\"])(.*?)\\k<title>)?\\))))|(?!(?<=\\S)\\k<open>).)++(?<=\\S)(?=__\\b|\\*\\*)\\k<open>)",
+      "(?<open>(\\*(?=\\w)|(?<!\\w)\\*|(?<!\\w)\\b_))(?=\\S)(?=(<[^>]*+>|(?<raw>`+)([^`]|(?!(?<!`)\\k<raw>(?!`))`)*+\\k<raw>|\\\\[\\\\`*_{}\\[\\]()#.!+\\->]?+|\\[((?<square>[^\\[\\]\\\\]|\\\\.|\\[\\g<square>*+\\])*+\\](([ ]?\\[[^\\]]*+\\])|(\\([ \\t]*+<?(.*?)>?[ \\t]*+((?<title>['\"])(.*?)\\k<title>)?\\))))|\\k<open>\\k<open>|(?!(?<=\\S)\\k<open>).)++(?<=\\S)(?=_\\b|\\*)\\k<open>)",
+      "(`+)((?:[^`]|(?!(?<!`)\\1(?!`))`)*+)(\\1)",
+      "(?<!\\\\)(~{2,})((?:[^~]|(?!(?<![~\\\\])\\1(?!~))~)*+)(\\1)",
+      "\\\\[-`*_#+.!(){}\\[\\]\\\\>]",
+      "(!\\[)((?<square>[^\\[\\]\\\\]|\\\\.|\\[\\g<square>*+\\])*+)(\\])(\\()[ \\t]*((<)((?:\\\\[<>]|[^<>\\n])*)(>)|((?<url>(?>[^\\s()]+)|\\(\\g<url>*\\))*))[ \\t]*(?:((\\().+?(\\)))|((\").+?(\"))|((').+?(')))?\\s*(\\))",
+      "(!\\[)((?<square>[^\\[\\]\\\\]|\\\\.|\\[\\g<square>*+\\])*+)(\\])[ ]?(\\[)(.*?)(\\])",
+      "(<)((?:mailto:)?[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*)(>)",
+      "(<)((?:https?|ftp)://.*?)(>)",
+      "(\\[)((?<square>[^\\[\\]\\\\]|\\\\.|\\[\\g<square>*+\\])*+)(\\])(\\()[ \\t]*((<)((?:\\\\[<>]|[^<>\\n])*)(>)|((?<url>(?>[^\\s()]+)|\\(\\g<url>*\\))*))[ \\t]*(?:((\\()[^()]*(\\)))|((\")[^\"]*(\"))|((')[^']*(')))?\\s*(\\))",
+      "(?<![\\]\\\\])(\\[)((?<square>[^\\[\\]\\\\]|\\\\.|\\[\\g<square>*+\\])*+)(\\])(\\[)([^\\]]*+)(\\])",
+      "(?<![\\]\\\\])(\\[)((?<square>[^\\[\\]\\\\]|\\\\.|\\[\\g<square>*+\\])*+)(\\])[ ]?(\\[)(\\])",
+      "(?<![\\]\\\\])(\\[)((?:[^\\s\\[\\]\\\\]|\\\\[\\[\\]])+?)((?<!\\\\)\\])",
+      "^(={3,})(?=[ \\t]*$\\n?)",
+      "^(-{3,})(?=[ \\t]*$\\n?)"
+    ],
+    "args": [
+      "  * the other one\n",
+      4,
+      0
+    ],
+    "result": null
+  },
   {
     "id": "o849naoraG",
     "patterns": [
@@ -1476,13 +1502,13 @@
       "index": 11,
       "captureIndices": [
         {
-          "start": 0,
-          "end": 0,
+          "start": 4,
+          "end": 4,
           "length": 0
         },
         {
-          "start": 0,
-          "end": 0,
+          "start": 4,
+          "end": 4,
           "length": 0
         }
       ]
@@ -1595,28 +1621,28 @@
       "index": 3,
       "captureIndices": [
         {
-          "start": 0,
-          "end": 2,
+          "start": 2,
+          "end": 4,
           "length": 2
         },
         {
-          "start": 0,
-          "end": 0,
+          "start": 2,
+          "end": 2,
           "length": 0
         },
         {
-          "start": 0,
-          "end": 0,
+          "start": 2,
+          "end": 2,
           "length": 0
         },
         {
-          "start": 0,
-          "end": 1,
+          "start": 2,
+          "end": 3,
           "length": 1
         },
         {
-          "start": 1,
-          "end": 2,
+          "start": 3,
+          "end": 4,
           "length": 1
         }
       ]
@@ -1641,40 +1667,53 @@
     ],
     "args": [
       "  * that one\n",
-      2,
+      4,
       0
     ],
     "result": {
-      "index": 3,
+      "index": 11,
       "captureIndices": [
         {
-          "start": 0,
-          "end": 2,
-          "length": 2
-        },
-        {
-          "start": 0,
-          "end": 0,
+          "start": 4,
+          "end": 4,
           "length": 0
         },
         {
-          "start": 0,
-          "end": 0,
+          "start": 4,
+          "end": 4,
           "length": 0
-        },
-        {
-          "start": 0,
-          "end": 1,
-          "length": 1
-        },
-        {
-          "start": 1,
-          "end": 2,
-          "length": 1
         }
       ]
     }
   },
+  {
+    "id": "3O5Mw8yMa3",
+    "patterns": [
+      "&(?!([a-zA-Z0-9]+|#\\d+|#x[0-9a-fA-F]+);)",
+      "<(?![a-zA-Z/?$!])",
+      "(?<open>(\\*\\*(?=\\w)|(?<!\\w)\\*\\*|(?<!\\w)\\b__))(?=\\S)(?=(<[^>]*+>|(?<raw>`+)([^`]|(?!(?<!`)\\k<raw>(?!`))`)*+\\k<raw>|\\\\[\\\\`*_{}\\[\\]()#.!+\\->]?+|\\[((?<square>[^\\[\\]\\\\]|\\\\.|\\[\\g<square>*+\\])*+\\](([ ]?\\[[^\\]]*+\\])|(\\([ \\t]*+<?(.*?)>?[ \\t]*+((?<title>['\"])(.*?)\\k<title>)?\\))))|(?!(?<=\\S)\\k<open>).)++(?<=\\S)(?=__\\b|\\*\\*)\\k<open>)",
+      "(?<open>(\\*(?=\\w)|(?<!\\w)\\*|(?<!\\w)\\b_))(?=\\S)(?=(<[^>]*+>|(?<raw>`+)([^`]|(?!(?<!`)\\k<raw>(?!`))`)*+\\k<raw>|\\\\[\\\\`*_{}\\[\\]()#.!+\\->]?+|\\[((?<square>[^\\[\\]\\\\]|\\\\.|\\[\\g<square>*+\\])*+\\](([ ]?\\[[^\\]]*+\\])|(\\([ \\t]*+<?(.*?)>?[ \\t]*+((?<title>['\"])(.*?)\\k<title>)?\\))))|\\k<open>\\k<open>|(?!(?<=\\S)\\k<open>).)++(?<=\\S)(?=_\\b|\\*)\\k<open>)",
+      "(`+)((?:[^`]|(?!(?<!`)\\1(?!`))`)*+)(\\1)",
+      "(?<!\\\\)(~{2,})((?:[^~]|(?!(?<![~\\\\])\\1(?!~))~)*+)(\\1)",
+      "\\\\[-`*_#+.!(){}\\[\\]\\\\>]",
+      "(!\\[)((?<square>[^\\[\\]\\\\]|\\\\.|\\[\\g<square>*+\\])*+)(\\])(\\()[ \\t]*((<)((?:\\\\[<>]|[^<>\\n])*)(>)|((?<url>(?>[^\\s()]+)|\\(\\g<url>*\\))*))[ \\t]*(?:((\\().+?(\\)))|((\").+?(\"))|((').+?(')))?\\s*(\\))",
+      "(!\\[)((?<square>[^\\[\\]\\\\]|\\\\.|\\[\\g<square>*+\\])*+)(\\])[ ]?(\\[)(.*?)(\\])",
+      "(<)((?:mailto:)?[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*)(>)",
+      "(<)((?:https?|ftp)://.*?)(>)",
+      "(\\[)((?<square>[^\\[\\]\\\\]|\\\\.|\\[\\g<square>*+\\])*+)(\\])(\\()[ \\t]*((<)((?:\\\\[<>]|[^<>\\n])*)(>)|((?<url>(?>[^\\s()]+)|\\(\\g<url>*\\))*))[ \\t]*(?:((\\()[^()]*(\\)))|((\")[^\"]*(\"))|((')[^']*(')))?\\s*(\\))",
+      "(?<![\\]\\\\])(\\[)((?<square>[^\\[\\]\\\\]|\\\\.|\\[\\g<square>*+\\])*+)(\\])(\\[)([^\\]]*+)(\\])",
+      "(?<![\\]\\\\])(\\[)((?<square>[^\\[\\]\\\\]|\\\\.|\\[\\g<square>*+\\])*+)(\\])[ ]?(\\[)(\\])",
+      "(?<![\\]\\\\])(\\[)((?:[^\\s\\[\\]\\\\]|\\\\[\\[\\]])+?)((?<!\\\\)\\])",
+      "^(={3,})(?=[ \\t]*$\\n?)",
+      "^(-{3,})(?=[ \\t]*$\\n?)"
+    ],
+    "args": [
+      "  * that one\n",
+      4,
+      0
+    ],
+    "result": null
+  },
   {
     "id": "o849naoraG",
     "patterns": [
@@ -1754,28 +1793,28 @@
       "index": 3,
       "captureIndices": [
         {
-          "start": 0,
-          "end": 2,
+          "start": 2,
+          "end": 4,
           "length": 2
         },
         {
-          "start": 0,
-          "end": 0,
+          "start": 2,
+          "end": 2,
           "length": 0
         },
         {
-          "start": 0,
-          "end": 0,
+          "start": 2,
+          "end": 2,
           "length": 0
         },
         {
-          "start": 0,
-          "end": 1,
+          "start": 2,
+          "end": 3,
           "length": 1
         },
         {
-          "start": 1,
-          "end": 2,
+          "start": 3,
+          "end": 4,
           "length": 1
         }
       ]
@@ -1800,40 +1839,53 @@
     ],
     "args": [
       "  * the other one\n",
-      2,
+      4,
       0
     ],
     "result": {
-      "index": 3,
+      "index": 11,
       "captureIndices": [
         {
-          "start": 0,
-          "end": 2,
-          "length": 2
-        },
-        {
-          "start": 0,
-          "end": 0,
+          "start": 4,
+          "end": 4,
           "length": 0
         },
         {
-          "start": 0,
-          "end": 0,
+          "start": 4,
+          "end": 4,
           "length": 0
-        },
-        {
-          "start": 0,
-          "end": 1,
-          "length": 1
-        },
-        {
-          "start": 1,
-          "end": 2,
-          "length": 1
         }
       ]
     }
   },
+  {
+    "id": "3O5Mw8yMa3",
+    "patterns": [
+      "&(?!([a-zA-Z0-9]+|#\\d+|#x[0-9a-fA-F]+);)",
+      "<(?![a-zA-Z/?$!])",
+      "(?<open>(\\*\\*(?=\\w)|(?<!\\w)\\*\\*|(?<!\\w)\\b__))(?=\\S)(?=(<[^>]*+>|(?<raw>`+)([^`]|(?!(?<!`)\\k<raw>(?!`))`)*+\\k<raw>|\\\\[\\\\`*_{}\\[\\]()#.!+\\->]?+|\\[((?<square>[^\\[\\]\\\\]|\\\\.|\\[\\g<square>*+\\])*+\\](([ ]?\\[[^\\]]*+\\])|(\\([ \\t]*+<?(.*?)>?[ \\t]*+((?<title>['\"])(.*?)\\k<title>)?\\))))|(?!(?<=\\S)\\k<open>).)++(?<=\\S)(?=__\\b|\\*\\*)\\k<open>)",
+      "(?<open>(\\*(?=\\w)|(?<!\\w)\\*|(?<!\\w)\\b_))(?=\\S)(?=(<[^>]*+>|(?<raw>`+)([^`]|(?!(?<!`)\\k<raw>(?!`))`)*+\\k<raw>|\\\\[\\\\`*_{}\\[\\]()#.!+\\->]?+|\\[((?<square>[^\\[\\]\\\\]|\\\\.|\\[\\g<square>*+\\])*+\\](([ ]?\\[[^\\]]*+\\])|(\\([ \\t]*+<?(.*?)>?[ \\t]*+((?<title>['\"])(.*?)\\k<title>)?\\))))|\\k<open>\\k<open>|(?!(?<=\\S)\\k<open>).)++(?<=\\S)(?=_\\b|\\*)\\k<open>)",
+      "(`+)((?:[^`]|(?!(?<!`)\\1(?!`))`)*+)(\\1)",
+      "(?<!\\\\)(~{2,})((?:[^~]|(?!(?<![~\\\\])\\1(?!~))~)*+)(\\1)",
+      "\\\\[-`*_#+.!(){}\\[\\]\\\\>]",
+      "(!\\[)((?<square>[^\\[\\]\\\\]|\\\\.|\\[\\g<square>*+\\])*+)(\\])(\\()[ \\t]*((<)((?:\\\\[<>]|[^<>\\n])*)(>)|((?<url>(?>[^\\s()]+)|\\(\\g<url>*\\))*))[ \\t]*(?:((\\().+?(\\)))|((\").+?(\"))|((').+?(')))?\\s*(\\))",
+      "(!\\[)((?<square>[^\\[\\]\\\\]|\\\\.|\\[\\g<square>*+\\])*+)(\\])[ ]?(\\[)(.*?)(\\])",
+      "(<)((?:mailto:)?[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*)(>)",
+      "(<)((?:https?|ftp)://.*?)(>)",
+      "(\\[)((?<square>[^\\[\\]\\\\]|\\\\.|\\[\\g<square>*+\\])*+)(\\])(\\()[ \\t]*((<)((?:\\\\[<>]|[^<>\\n])*)(>)|((?<url>(?>[^\\s()]+)|\\(\\g<url>*\\))*))[ \\t]*(?:((\\()[^()]*(\\)))|((\")[^\"]*(\"))|((')[^']*(')))?\\s*(\\))",
+      "(?<![\\]\\\\])(\\[)((?<square>[^\\[\\]\\\\]|\\\\.|\\[\\g<square>*+\\])*+)(\\])(\\[)([^\\]]*+)(\\])",
+      "(?<![\\]\\\\])(\\[)((?<square>[^\\[\\]\\\\]|\\\\.|\\[\\g<square>*+\\])*+)(\\])[ ]?(\\[)(\\])",
+      "(?<![\\]\\\\])(\\[)((?:[^\\s\\[\\]\\\\]|\\\\[\\[\\]])+?)((?<!\\\\)\\])",
+      "^(={3,})(?=[ \\t]*$\\n?)",
+      "^(-{3,})(?=[ \\t]*$\\n?)"
+    ],
+    "args": [
+      "  * the other one\n",
+      4,
+      0
+    ],
+    "result": null
+  },
   {
     "id": "o849naoraG",
     "patterns": [
diff --git a/packages/engine-javascript/test/verify.test.ts b/packages/engine-javascript/test/verify.test.ts
index 224247c3..dd59ab40 100644
--- a/packages/engine-javascript/test/verify.test.ts
+++ b/packages/engine-javascript/test/verify.test.ts
@@ -19,10 +19,6 @@ describe('verify', async () => {
     // Some token positions are off in this record
     const name = basename(file, '.wasm.json')
 
-    // TODO: markdown support is still problematic
-    if (name === 'markdown')
-      continue
-
     describe(`record: ${name}`, async () => {
       const executions = JSON.parse(await fs.readFile(file, 'utf-8')) as Execution[]
       let i = 0