diff --git a/CHANGELOG.md b/CHANGELOG.md
index 6b2e6f0..bfd8904 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,8 +2,9 @@
 
 ### Breaking changes
 
-* Dropped browsers without `ResizeObserver` support. Can work with [resize-observer-polyfill](https://www.npmjs.com/package/resize-observer-polyfill).
+* Dropped support for browsers without `ResizeObserver`. Can work with [resize-observer-polyfill](https://www.npmjs.com/package/resize-observer-polyfill).
 * Dropped support for Vue < 2.7.
+* Dropped CJS outputs.
 
 ## 6.7.3
 
diff --git a/README.md b/README.md
index abf1daa..32604c6 100644
--- a/README.md
+++ b/README.md
@@ -15,33 +15,16 @@
 
 
💡 Heads up 💡 
 
-If you are migrating from `vue-echarts` ≤ 5, you should read the _[Migration to v6](#migration-to-v6)_ section before you update to v6.
-
-Not ready yet? Read documentation for older versions [here →](https://github.com/ecomfe/vue-echarts/tree/5.x)
+Still using v6? Read v6 docs [here →](https://github.com/ecomfe/vue-echarts/tree/6.x)
 
 ## Installation & Usage
 
-### npm & ESM
+### npm
 
 ```sh
-npm i echarts vue-echarts
+npm add echarts vue-echarts
 ```
 
-To make `vue-echarts` work for _Vue 2_ (<2.7.0), you need to have `@vue/composition-api` installed (`@vue/runtime-core` for TypeScript support):
-
-```sh
-npm i @vue/composition-api
-npm i @vue/runtime-core # for TypeScript support
-```
-
-If you are using _NuxtJS_ on top of _Vue 2_, you'll need `@nuxtjs/composition-api`:
-
-```sh
-npm i @nuxtjs/composition-api
-```
-
-And then add `'@nuxtjs/composition-api/module'` in the `buildModules` option in your `nuxt.config.js`.
-
 #### Example
 
 
@@ -227,7 +210,7 @@ But if you really want to import the whole ECharts bundle without having to impo
 import "echarts";
 ```
 
-### CDN & Global variable
+### CDN
 
 Drop `
+
 
 
 ```
diff --git a/README.zh-Hans.md b/README.zh-Hans.md
index 073c111..8f975d2 100644
--- a/README.zh-Hans.md
+++ b/README.zh-Hans.md
@@ -15,33 +15,16 @@
 
 ## 💡 注意 💡
 
-若您准备从 `vue-echarts` ≤ 5 的版本迁移到新版本,请在升级 v6 前阅读 _[迁移到 v6](#迁移到-v6)_ 部分文档。
-
-没准备好的话,可以继续阅读老版本的文档。[前往 →](https://github.com/ecomfe/vue-echarts/blob/5.x/README.zh_CN.md)
+还在使用 v6?可以继续阅读老版本的文档。[前往 →](https://github.com/ecomfe/vue-echarts/blob/6.x/README.zh_CN.md)
 
 ## 安装 & 使用
 
-### npm & ESM
+### npm
 
 ```sh
-npm i echarts vue-echarts
+npm add echarts vue-echarts
 ```
 
-要在 _Vue 2_(<2.7.0)下使用 `vue-echarts`,需要确保 `@vue/composition-api` 已经安装(TypeScript 支持还需要 `@vue/runtime-core`):
-
-```sh
-npm i @vue/composition-api
-npm i @vue/runtime-core # TypeScript 支持
-```
-
-如果你在使用基于 _Vue 2_ 的 _NuxtJS_,则需要安装 `@nuxtjs/composition-api`:
-
-```sh
-npm i @nuxtjs/composition-api
-```
-
-然后在 `nuxt.config.js` 的 `buildModules` 选项中添加 `'@nuxtjs/composition-api/module'`。
-
 #### 示例
 
 
@@ -227,7 +210,7 @@ export default {
 import "echarts";
 ```
 
-### CDN & 全局变量
+### CDN
 
 用如下方式在 HTML 中插入 `
+
 
 
 ```
diff --git a/package.json b/package.json
index 36b475b..92796df 100644
--- a/package.json
+++ b/package.json
@@ -7,31 +7,22 @@
   "author": "GU Yiling ",
   "scripts": {
     "serve": "vue-cli-service serve",
-    "build": "pnpm run docs && rimraf dist && pnpm run build:2 && pnpm run build:3 && vue-demi-switch 3",
-    "build:2": "vue-demi-switch 2 vue2 && rollup -c rollup.vue2.config.js",
-    "build:3": "vue-demi-switch 3 && rollup -c rollup.config.js",
+    "build": "pnpm run docs && rimraf dist && pnpm run build:rollup",
+    "build:rollup": "vue-demi-switch 3 && rollup -c rollup.config.js",
     "lint": "vue-cli-service lint",
     "publint": "publint",
     "build:demo": "vue-cli-service build",
     "docs": "node ./scripts/docs.mjs",
-    "postinstall": "node ./scripts/postinstall.mjs",
     "prepublishOnly": "pnpm run build && publint"
   },
   "type": "module",
-  "module": "dist/index.js",
-  "main": "dist/index.cjs",
+  "main": "dist/index.js",
   "unpkg": "dist/index.min.js",
   "jsdelivr": "dist/index.min.js",
   "types": "dist/index.d.ts",
   "exports": {
-    ".": {
-      "import": "./dist/index.js",
-      "require": "./dist/index.cjs"
-    },
-    "./csp": {
-      "import": "./dist/csp/index.js",
-      "require": "./dist/csp/index.cjs"
-    },
+    ".": "./dist/index.js",
+    "./csp": "./dist/csp/index.js",
     "./csp/style.css": "./dist/csp/style.css"
   },
   "files": [
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 0f9fedd..1ec2f49 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -41,16 +41,16 @@ importers:
         version: 1.2.2
       '@vue/cli-plugin-babel':
         specifier: ^5.0.8
-        version: 5.0.8(@vue/cli-service@5.0.8(@vue/compiler-sfc@3.4.24)(esbuild@0.21.5)(lodash@4.17.21)(prettier@2.8.8)(raw-loader@4.0.2(webpack@5.91.0(esbuild@0.21.5)))(vue@3.4.24(typescript@4.6.4))(webpack-sources@3.2.3))(core-js@3.37.0)(esbuild@0.21.5)(vue@3.4.24(typescript@4.6.4))
+        version: 5.0.8(@vue/cli-service@5.0.8(@vue/compiler-sfc@3.4.24)(esbuild@0.23.0)(lodash@4.17.21)(prettier@2.8.8)(raw-loader@4.0.2(webpack@5.91.0(esbuild@0.23.0)))(vue@3.4.24(typescript@4.6.4))(webpack-sources@3.2.3))(core-js@3.37.0)(esbuild@0.23.0)(vue@3.4.24(typescript@4.6.4))
       '@vue/cli-plugin-eslint':
         specifier: ^5.0.8
-        version: 5.0.8(@vue/cli-service@5.0.8(@vue/compiler-sfc@3.4.24)(esbuild@0.21.5)(lodash@4.17.21)(prettier@2.8.8)(raw-loader@4.0.2(webpack@5.91.0(esbuild@0.21.5)))(vue@3.4.24(typescript@4.6.4))(webpack-sources@3.2.3))(esbuild@0.21.5)(eslint@7.32.0)
+        version: 5.0.8(@vue/cli-service@5.0.8(@vue/compiler-sfc@3.4.24)(esbuild@0.23.0)(lodash@4.17.21)(prettier@2.8.8)(raw-loader@4.0.2(webpack@5.91.0(esbuild@0.23.0)))(vue@3.4.24(typescript@4.6.4))(webpack-sources@3.2.3))(esbuild@0.23.0)(eslint@7.32.0)
       '@vue/cli-plugin-typescript':
         specifier: ^5.0.8
-        version: 5.0.8(@vue/cli-service@5.0.8(@vue/compiler-sfc@3.4.24)(esbuild@0.21.5)(lodash@4.17.21)(prettier@2.8.8)(raw-loader@4.0.2(webpack@5.91.0(esbuild@0.21.5)))(vue@3.4.24(typescript@4.6.4))(webpack-sources@3.2.3))(esbuild@0.21.5)(eslint@7.32.0)(typescript@4.6.4)(vue@3.4.24(typescript@4.6.4))
+        version: 5.0.8(@vue/cli-service@5.0.8(@vue/compiler-sfc@3.4.24)(esbuild@0.23.0)(lodash@4.17.21)(prettier@2.8.8)(raw-loader@4.0.2(webpack@5.91.0(esbuild@0.23.0)))(vue@3.4.24(typescript@4.6.4))(webpack-sources@3.2.3))(esbuild@0.23.0)(eslint@7.32.0)(typescript@4.6.4)(vue@3.4.24(typescript@4.6.4))
       '@vue/cli-service':
         specifier: ^5.0.8
-        version: 5.0.8(@vue/compiler-sfc@3.4.24)(esbuild@0.21.5)(lodash@4.17.21)(prettier@2.8.8)(raw-loader@4.0.2(webpack@5.91.0(esbuild@0.21.5)))(vue@3.4.24(typescript@4.6.4))(webpack-sources@3.2.3)
+        version: 5.0.8(@vue/compiler-sfc@3.4.24)(esbuild@0.23.0)(lodash@4.17.21)(prettier@2.8.8)(raw-loader@4.0.2(webpack@5.91.0(esbuild@0.23.0)))(vue@3.4.24(typescript@4.6.4))(webpack-sources@3.2.3)
       '@vue/compiler-sfc':
         specifier: ^3.4.24
         version: 3.4.24
@@ -101,7 +101,7 @@ importers:
         version: 8.4.38
       postcss-loader:
         specifier: ^5.3.0
-        version: 5.3.0(postcss@8.4.38)(webpack@5.91.0(esbuild@0.21.5))
+        version: 5.3.0(postcss@8.4.38)(webpack@5.91.0(esbuild@0.23.0))
       postcss-nested:
         specifier: ^5.0.6
         version: 5.0.6(postcss@8.4.38)
@@ -113,7 +113,7 @@ importers:
         version: 0.2.8
       raw-loader:
         specifier: ^4.0.2
-        version: 4.0.2(webpack@5.91.0(esbuild@0.21.5))
+        version: 4.0.2(webpack@5.91.0(esbuild@0.23.0))
       resize-detector:
         specifier: ^0.3.0
         version: 0.3.0
@@ -128,7 +128,7 @@ importers:
         version: 6.1.1(rollup@4.18.0)(typescript@4.6.4)
       rollup-plugin-esbuild:
         specifier: ^6.1.1
-        version: 6.1.1(esbuild@0.21.5)(rollup@4.18.0)
+        version: 6.1.1(esbuild@0.23.0)(rollup@4.18.0)
       rollup-plugin-import-css:
         specifier: ^3.5.0
         version: 3.5.0(rollup@4.18.0)
@@ -146,7 +146,7 @@ importers:
         version: vue@2.7.16
       webpack:
         specifier: ^5.91.0
-        version: 5.91.0(esbuild@0.21.5)
+        version: 5.91.0(esbuild@0.23.0)
 
 packages:
 
@@ -780,141 +780,147 @@ packages:
     resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==}
     engines: {node: '>=10.0.0'}
 
-  '@esbuild/aix-ppc64@0.21.5':
-    resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==}
-    engines: {node: '>=12'}
+  '@esbuild/aix-ppc64@0.23.0':
+    resolution: {integrity: sha512-3sG8Zwa5fMcA9bgqB8AfWPQ+HFke6uD3h1s3RIwUNK8EG7a4buxvuFTs3j1IMs2NXAk9F30C/FF4vxRgQCcmoQ==}
+    engines: {node: '>=18'}
     cpu: [ppc64]
     os: [aix]
 
-  '@esbuild/android-arm64@0.21.5':
-    resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==}
-    engines: {node: '>=12'}
+  '@esbuild/android-arm64@0.23.0':
+    resolution: {integrity: sha512-EuHFUYkAVfU4qBdyivULuu03FhJO4IJN9PGuABGrFy4vUuzk91P2d+npxHcFdpUnfYKy0PuV+n6bKIpHOB3prQ==}
+    engines: {node: '>=18'}
     cpu: [arm64]
     os: [android]
 
-  '@esbuild/android-arm@0.21.5':
-    resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==}
-    engines: {node: '>=12'}
+  '@esbuild/android-arm@0.23.0':
+    resolution: {integrity: sha512-+KuOHTKKyIKgEEqKbGTK8W7mPp+hKinbMBeEnNzjJGyFcWsfrXjSTNluJHCY1RqhxFurdD8uNXQDei7qDlR6+g==}
+    engines: {node: '>=18'}
     cpu: [arm]
     os: [android]
 
-  '@esbuild/android-x64@0.21.5':
-    resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==}
-    engines: {node: '>=12'}
+  '@esbuild/android-x64@0.23.0':
+    resolution: {integrity: sha512-WRrmKidLoKDl56LsbBMhzTTBxrsVwTKdNbKDalbEZr0tcsBgCLbEtoNthOW6PX942YiYq8HzEnb4yWQMLQuipQ==}
+    engines: {node: '>=18'}
     cpu: [x64]
     os: [android]
 
-  '@esbuild/darwin-arm64@0.21.5':
-    resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==}
-    engines: {node: '>=12'}
+  '@esbuild/darwin-arm64@0.23.0':
+    resolution: {integrity: sha512-YLntie/IdS31H54Ogdn+v50NuoWF5BDkEUFpiOChVa9UnKpftgwzZRrI4J132ETIi+D8n6xh9IviFV3eXdxfow==}
+    engines: {node: '>=18'}
     cpu: [arm64]
     os: [darwin]
 
-  '@esbuild/darwin-x64@0.21.5':
-    resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==}
-    engines: {node: '>=12'}
+  '@esbuild/darwin-x64@0.23.0':
+    resolution: {integrity: sha512-IMQ6eme4AfznElesHUPDZ+teuGwoRmVuuixu7sv92ZkdQcPbsNHzutd+rAfaBKo8YK3IrBEi9SLLKWJdEvJniQ==}
+    engines: {node: '>=18'}
     cpu: [x64]
     os: [darwin]
 
-  '@esbuild/freebsd-arm64@0.21.5':
-    resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==}
-    engines: {node: '>=12'}
+  '@esbuild/freebsd-arm64@0.23.0':
+    resolution: {integrity: sha512-0muYWCng5vqaxobq6LB3YNtevDFSAZGlgtLoAc81PjUfiFz36n4KMpwhtAd4he8ToSI3TGyuhyx5xmiWNYZFyw==}
+    engines: {node: '>=18'}
     cpu: [arm64]
     os: [freebsd]
 
-  '@esbuild/freebsd-x64@0.21.5':
-    resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==}
-    engines: {node: '>=12'}
+  '@esbuild/freebsd-x64@0.23.0':
+    resolution: {integrity: sha512-XKDVu8IsD0/q3foBzsXGt/KjD/yTKBCIwOHE1XwiXmrRwrX6Hbnd5Eqn/WvDekddK21tfszBSrE/WMaZh+1buQ==}
+    engines: {node: '>=18'}
     cpu: [x64]
     os: [freebsd]
 
-  '@esbuild/linux-arm64@0.21.5':
-    resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==}
-    engines: {node: '>=12'}
+  '@esbuild/linux-arm64@0.23.0':
+    resolution: {integrity: sha512-j1t5iG8jE7BhonbsEg5d9qOYcVZv/Rv6tghaXM/Ug9xahM0nX/H2gfu6X6z11QRTMT6+aywOMA8TDkhPo8aCGw==}
+    engines: {node: '>=18'}
     cpu: [arm64]
     os: [linux]
 
-  '@esbuild/linux-arm@0.21.5':
-    resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==}
-    engines: {node: '>=12'}
+  '@esbuild/linux-arm@0.23.0':
+    resolution: {integrity: sha512-SEELSTEtOFu5LPykzA395Mc+54RMg1EUgXP+iw2SJ72+ooMwVsgfuwXo5Fn0wXNgWZsTVHwY2cg4Vi/bOD88qw==}
+    engines: {node: '>=18'}
     cpu: [arm]
     os: [linux]
 
-  '@esbuild/linux-ia32@0.21.5':
-    resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==}
-    engines: {node: '>=12'}
+  '@esbuild/linux-ia32@0.23.0':
+    resolution: {integrity: sha512-P7O5Tkh2NbgIm2R6x1zGJJsnacDzTFcRWZyTTMgFdVit6E98LTxO+v8LCCLWRvPrjdzXHx9FEOA8oAZPyApWUA==}
+    engines: {node: '>=18'}
     cpu: [ia32]
     os: [linux]
 
-  '@esbuild/linux-loong64@0.21.5':
-    resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==}
-    engines: {node: '>=12'}
+  '@esbuild/linux-loong64@0.23.0':
+    resolution: {integrity: sha512-InQwepswq6urikQiIC/kkx412fqUZudBO4SYKu0N+tGhXRWUqAx+Q+341tFV6QdBifpjYgUndV1hhMq3WeJi7A==}
+    engines: {node: '>=18'}
     cpu: [loong64]
     os: [linux]
 
-  '@esbuild/linux-mips64el@0.21.5':
-    resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==}
-    engines: {node: '>=12'}
+  '@esbuild/linux-mips64el@0.23.0':
+    resolution: {integrity: sha512-J9rflLtqdYrxHv2FqXE2i1ELgNjT+JFURt/uDMoPQLcjWQA5wDKgQA4t/dTqGa88ZVECKaD0TctwsUfHbVoi4w==}
+    engines: {node: '>=18'}
     cpu: [mips64el]
     os: [linux]
 
-  '@esbuild/linux-ppc64@0.21.5':
-    resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==}
-    engines: {node: '>=12'}
+  '@esbuild/linux-ppc64@0.23.0':
+    resolution: {integrity: sha512-cShCXtEOVc5GxU0fM+dsFD10qZ5UpcQ8AM22bYj0u/yaAykWnqXJDpd77ublcX6vdDsWLuweeuSNZk4yUxZwtw==}
+    engines: {node: '>=18'}
     cpu: [ppc64]
     os: [linux]
 
-  '@esbuild/linux-riscv64@0.21.5':
-    resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==}
-    engines: {node: '>=12'}
+  '@esbuild/linux-riscv64@0.23.0':
+    resolution: {integrity: sha512-HEtaN7Y5UB4tZPeQmgz/UhzoEyYftbMXrBCUjINGjh3uil+rB/QzzpMshz3cNUxqXN7Vr93zzVtpIDL99t9aRw==}
+    engines: {node: '>=18'}
     cpu: [riscv64]
     os: [linux]
 
-  '@esbuild/linux-s390x@0.21.5':
-    resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==}
-    engines: {node: '>=12'}
+  '@esbuild/linux-s390x@0.23.0':
+    resolution: {integrity: sha512-WDi3+NVAuyjg/Wxi+o5KPqRbZY0QhI9TjrEEm+8dmpY9Xir8+HE/HNx2JoLckhKbFopW0RdO2D72w8trZOV+Wg==}
+    engines: {node: '>=18'}
     cpu: [s390x]
     os: [linux]
 
-  '@esbuild/linux-x64@0.21.5':
-    resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==}
-    engines: {node: '>=12'}
+  '@esbuild/linux-x64@0.23.0':
+    resolution: {integrity: sha512-a3pMQhUEJkITgAw6e0bWA+F+vFtCciMjW/LPtoj99MhVt+Mfb6bbL9hu2wmTZgNd994qTAEw+U/r6k3qHWWaOQ==}
+    engines: {node: '>=18'}
     cpu: [x64]
     os: [linux]
 
-  '@esbuild/netbsd-x64@0.21.5':
-    resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==}
-    engines: {node: '>=12'}
+  '@esbuild/netbsd-x64@0.23.0':
+    resolution: {integrity: sha512-cRK+YDem7lFTs2Q5nEv/HHc4LnrfBCbH5+JHu6wm2eP+d8OZNoSMYgPZJq78vqQ9g+9+nMuIsAO7skzphRXHyw==}
+    engines: {node: '>=18'}
     cpu: [x64]
     os: [netbsd]
 
-  '@esbuild/openbsd-x64@0.21.5':
-    resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==}
-    engines: {node: '>=12'}
+  '@esbuild/openbsd-arm64@0.23.0':
+    resolution: {integrity: sha512-suXjq53gERueVWu0OKxzWqk7NxiUWSUlrxoZK7usiF50C6ipColGR5qie2496iKGYNLhDZkPxBI3erbnYkU0rQ==}
+    engines: {node: '>=18'}
+    cpu: [arm64]
+    os: [openbsd]
+
+  '@esbuild/openbsd-x64@0.23.0':
+    resolution: {integrity: sha512-6p3nHpby0DM/v15IFKMjAaayFhqnXV52aEmv1whZHX56pdkK+MEaLoQWj+H42ssFarP1PcomVhbsR4pkz09qBg==}
+    engines: {node: '>=18'}
     cpu: [x64]
     os: [openbsd]
 
-  '@esbuild/sunos-x64@0.21.5':
-    resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==}
-    engines: {node: '>=12'}
+  '@esbuild/sunos-x64@0.23.0':
+    resolution: {integrity: sha512-BFelBGfrBwk6LVrmFzCq1u1dZbG4zy/Kp93w2+y83Q5UGYF1d8sCzeLI9NXjKyujjBBniQa8R8PzLFAUrSM9OA==}
+    engines: {node: '>=18'}
     cpu: [x64]
     os: [sunos]
 
-  '@esbuild/win32-arm64@0.21.5':
-    resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==}
-    engines: {node: '>=12'}
+  '@esbuild/win32-arm64@0.23.0':
+    resolution: {integrity: sha512-lY6AC8p4Cnb7xYHuIxQ6iYPe6MfO2CC43XXKo9nBXDb35krYt7KGhQnOkRGar5psxYkircpCqfbNDB4uJbS2jQ==}
+    engines: {node: '>=18'}
     cpu: [arm64]
     os: [win32]
 
-  '@esbuild/win32-ia32@0.21.5':
-    resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==}
-    engines: {node: '>=12'}
+  '@esbuild/win32-ia32@0.23.0':
+    resolution: {integrity: sha512-7L1bHlOTcO4ByvI7OXVI5pNN6HSu6pUQq9yodga8izeuB1KcT2UkHaH6118QJwopExPn0rMHIseCTx1CRo/uNA==}
+    engines: {node: '>=18'}
     cpu: [ia32]
     os: [win32]
 
-  '@esbuild/win32-x64@0.21.5':
-    resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==}
-    engines: {node: '>=12'}
+  '@esbuild/win32-x64@0.23.0':
+    resolution: {integrity: sha512-Arm+WgUFLUATuoxCJcahGuk6Yj9Pzxd6l11Zb/2aAuv5kWWvvfhLFo2fni4uSK5vzlUdCGZ/BdV5tH8klj8p8g==}
+    engines: {node: '>=18'}
     cpu: [x64]
     os: [win32]
 
@@ -2452,9 +2458,9 @@ packages:
     engines: {node: '>=12'}
     hasBin: true
 
-  esbuild@0.21.5:
-    resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==}
-    engines: {node: '>=12'}
+  esbuild@0.23.0:
+    resolution: {integrity: sha512-1lvV17H2bMYda/WaFb2jLPeHU3zml2k4/yagNMG8Q/YtfMjCwEUZa2eXXMgZTVSL5q1n4H7sQ0X6CdJDqqeCFA==}
+    engines: {node: '>=18'}
     hasBin: true
 
   escalade@3.1.2:
@@ -5406,73 +5412,76 @@ snapshots:
 
   '@discoveryjs/json-ext@0.5.7': {}
 
-  '@esbuild/aix-ppc64@0.21.5':
+  '@esbuild/aix-ppc64@0.23.0':
     optional: true
 
-  '@esbuild/android-arm64@0.21.5':
+  '@esbuild/android-arm64@0.23.0':
     optional: true
 
-  '@esbuild/android-arm@0.21.5':
+  '@esbuild/android-arm@0.23.0':
     optional: true
 
-  '@esbuild/android-x64@0.21.5':
+  '@esbuild/android-x64@0.23.0':
     optional: true
 
-  '@esbuild/darwin-arm64@0.21.5':
+  '@esbuild/darwin-arm64@0.23.0':
     optional: true
 
-  '@esbuild/darwin-x64@0.21.5':
+  '@esbuild/darwin-x64@0.23.0':
     optional: true
 
-  '@esbuild/freebsd-arm64@0.21.5':
+  '@esbuild/freebsd-arm64@0.23.0':
     optional: true
 
-  '@esbuild/freebsd-x64@0.21.5':
+  '@esbuild/freebsd-x64@0.23.0':
     optional: true
 
-  '@esbuild/linux-arm64@0.21.5':
+  '@esbuild/linux-arm64@0.23.0':
     optional: true
 
-  '@esbuild/linux-arm@0.21.5':
+  '@esbuild/linux-arm@0.23.0':
     optional: true
 
-  '@esbuild/linux-ia32@0.21.5':
+  '@esbuild/linux-ia32@0.23.0':
     optional: true
 
-  '@esbuild/linux-loong64@0.21.5':
+  '@esbuild/linux-loong64@0.23.0':
     optional: true
 
-  '@esbuild/linux-mips64el@0.21.5':
+  '@esbuild/linux-mips64el@0.23.0':
     optional: true
 
-  '@esbuild/linux-ppc64@0.21.5':
+  '@esbuild/linux-ppc64@0.23.0':
     optional: true
 
-  '@esbuild/linux-riscv64@0.21.5':
+  '@esbuild/linux-riscv64@0.23.0':
     optional: true
 
-  '@esbuild/linux-s390x@0.21.5':
+  '@esbuild/linux-s390x@0.23.0':
     optional: true
 
-  '@esbuild/linux-x64@0.21.5':
+  '@esbuild/linux-x64@0.23.0':
     optional: true
 
-  '@esbuild/netbsd-x64@0.21.5':
+  '@esbuild/netbsd-x64@0.23.0':
     optional: true
 
-  '@esbuild/openbsd-x64@0.21.5':
+  '@esbuild/openbsd-arm64@0.23.0':
     optional: true
 
-  '@esbuild/sunos-x64@0.21.5':
+  '@esbuild/openbsd-x64@0.23.0':
     optional: true
 
-  '@esbuild/win32-arm64@0.21.5':
+  '@esbuild/sunos-x64@0.23.0':
     optional: true
 
-  '@esbuild/win32-ia32@0.21.5':
+  '@esbuild/win32-arm64@0.23.0':
     optional: true
 
-  '@esbuild/win32-x64@0.21.5':
+  '@esbuild/win32-ia32@0.23.0':
+    optional: true
+
+  '@esbuild/win32-x64@0.23.0':
     optional: true
 
   '@eslint-community/eslint-utils@4.4.0(eslint@7.32.0)':
@@ -5649,13 +5658,13 @@ snapshots:
 
   '@sideway/pinpoint@2.0.0': {}
 
-  '@soda/friendly-errors-webpack-plugin@1.8.1(webpack@5.91.0(esbuild@0.21.5))':
+  '@soda/friendly-errors-webpack-plugin@1.8.1(webpack@5.91.0(esbuild@0.23.0))':
     dependencies:
       chalk: 3.0.0
       error-stack-parser: 2.1.4
       string-width: 4.2.3
       strip-ansi: 6.0.1
-      webpack: 5.91.0(esbuild@0.21.5)
+      webpack: 5.91.0(esbuild@0.23.0)
 
   '@soda/get-current-script@1.0.2': {}
 
@@ -6041,15 +6050,15 @@ snapshots:
 
   '@vue/cli-overlay@5.0.8': {}
 
-  '@vue/cli-plugin-babel@5.0.8(@vue/cli-service@5.0.8(@vue/compiler-sfc@3.4.24)(esbuild@0.21.5)(lodash@4.17.21)(prettier@2.8.8)(raw-loader@4.0.2(webpack@5.91.0(esbuild@0.21.5)))(vue@3.4.24(typescript@4.6.4))(webpack-sources@3.2.3))(core-js@3.37.0)(esbuild@0.21.5)(vue@3.4.24(typescript@4.6.4))':
+  '@vue/cli-plugin-babel@5.0.8(@vue/cli-service@5.0.8(@vue/compiler-sfc@3.4.24)(esbuild@0.23.0)(lodash@4.17.21)(prettier@2.8.8)(raw-loader@4.0.2(webpack@5.91.0(esbuild@0.23.0)))(vue@3.4.24(typescript@4.6.4))(webpack-sources@3.2.3))(core-js@3.37.0)(esbuild@0.23.0)(vue@3.4.24(typescript@4.6.4))':
     dependencies:
       '@babel/core': 7.24.4
       '@vue/babel-preset-app': 5.0.8(@babel/core@7.24.4)(core-js@3.37.0)(vue@3.4.24(typescript@4.6.4))
-      '@vue/cli-service': 5.0.8(@vue/compiler-sfc@3.4.24)(esbuild@0.21.5)(lodash@4.17.21)(prettier@2.8.8)(raw-loader@4.0.2(webpack@5.91.0(esbuild@0.21.5)))(vue@3.4.24(typescript@4.6.4))(webpack-sources@3.2.3)
+      '@vue/cli-service': 5.0.8(@vue/compiler-sfc@3.4.24)(esbuild@0.23.0)(lodash@4.17.21)(prettier@2.8.8)(raw-loader@4.0.2(webpack@5.91.0(esbuild@0.23.0)))(vue@3.4.24(typescript@4.6.4))(webpack-sources@3.2.3)
       '@vue/cli-shared-utils': 5.0.8
-      babel-loader: 8.3.0(@babel/core@7.24.4)(webpack@5.91.0(esbuild@0.21.5))
-      thread-loader: 3.0.4(webpack@5.91.0(esbuild@0.21.5))
-      webpack: 5.91.0(esbuild@0.21.5)
+      babel-loader: 8.3.0(@babel/core@7.24.4)(webpack@5.91.0(esbuild@0.23.0))
+      thread-loader: 3.0.4(webpack@5.91.0(esbuild@0.23.0))
+      webpack: 5.91.0(esbuild@0.23.0)
     transitivePeerDependencies:
       - '@swc/core'
       - core-js
@@ -6060,14 +6069,14 @@ snapshots:
       - vue
       - webpack-cli
 
-  '@vue/cli-plugin-eslint@5.0.8(@vue/cli-service@5.0.8(@vue/compiler-sfc@3.4.24)(esbuild@0.21.5)(lodash@4.17.21)(prettier@2.8.8)(raw-loader@4.0.2(webpack@5.91.0(esbuild@0.21.5)))(vue@3.4.24(typescript@4.6.4))(webpack-sources@3.2.3))(esbuild@0.21.5)(eslint@7.32.0)':
+  '@vue/cli-plugin-eslint@5.0.8(@vue/cli-service@5.0.8(@vue/compiler-sfc@3.4.24)(esbuild@0.23.0)(lodash@4.17.21)(prettier@2.8.8)(raw-loader@4.0.2(webpack@5.91.0(esbuild@0.23.0)))(vue@3.4.24(typescript@4.6.4))(webpack-sources@3.2.3))(esbuild@0.23.0)(eslint@7.32.0)':
     dependencies:
-      '@vue/cli-service': 5.0.8(@vue/compiler-sfc@3.4.24)(esbuild@0.21.5)(lodash@4.17.21)(prettier@2.8.8)(raw-loader@4.0.2(webpack@5.91.0(esbuild@0.21.5)))(vue@3.4.24(typescript@4.6.4))(webpack-sources@3.2.3)
+      '@vue/cli-service': 5.0.8(@vue/compiler-sfc@3.4.24)(esbuild@0.23.0)(lodash@4.17.21)(prettier@2.8.8)(raw-loader@4.0.2(webpack@5.91.0(esbuild@0.23.0)))(vue@3.4.24(typescript@4.6.4))(webpack-sources@3.2.3)
       '@vue/cli-shared-utils': 5.0.8
       eslint: 7.32.0
-      eslint-webpack-plugin: 3.2.0(eslint@7.32.0)(webpack@5.91.0(esbuild@0.21.5))
+      eslint-webpack-plugin: 3.2.0(eslint@7.32.0)(webpack@5.91.0(esbuild@0.23.0))
       globby: 11.1.0
-      webpack: 5.91.0(esbuild@0.21.5)
+      webpack: 5.91.0(esbuild@0.23.0)
       yorkie: 2.0.0
     transitivePeerDependencies:
       - '@swc/core'
@@ -6076,27 +6085,27 @@ snapshots:
       - uglify-js
       - webpack-cli
 
-  '@vue/cli-plugin-router@5.0.8(@vue/cli-service@5.0.8(@vue/compiler-sfc@3.4.24)(esbuild@0.21.5)(lodash@4.17.21)(prettier@2.8.8)(raw-loader@4.0.2(webpack@5.91.0(esbuild@0.21.5)))(vue@3.4.24(typescript@4.6.4))(webpack-sources@3.2.3))':
+  '@vue/cli-plugin-router@5.0.8(@vue/cli-service@5.0.8(@vue/compiler-sfc@3.4.24)(esbuild@0.23.0)(lodash@4.17.21)(prettier@2.8.8)(raw-loader@4.0.2(webpack@5.91.0(esbuild@0.23.0)))(vue@3.4.24(typescript@4.6.4))(webpack-sources@3.2.3))':
     dependencies:
-      '@vue/cli-service': 5.0.8(@vue/compiler-sfc@3.4.24)(esbuild@0.21.5)(lodash@4.17.21)(prettier@2.8.8)(raw-loader@4.0.2(webpack@5.91.0(esbuild@0.21.5)))(vue@3.4.24(typescript@4.6.4))(webpack-sources@3.2.3)
+      '@vue/cli-service': 5.0.8(@vue/compiler-sfc@3.4.24)(esbuild@0.23.0)(lodash@4.17.21)(prettier@2.8.8)(raw-loader@4.0.2(webpack@5.91.0(esbuild@0.23.0)))(vue@3.4.24(typescript@4.6.4))(webpack-sources@3.2.3)
       '@vue/cli-shared-utils': 5.0.8
     transitivePeerDependencies:
       - encoding
 
-  '@vue/cli-plugin-typescript@5.0.8(@vue/cli-service@5.0.8(@vue/compiler-sfc@3.4.24)(esbuild@0.21.5)(lodash@4.17.21)(prettier@2.8.8)(raw-loader@4.0.2(webpack@5.91.0(esbuild@0.21.5)))(vue@3.4.24(typescript@4.6.4))(webpack-sources@3.2.3))(esbuild@0.21.5)(eslint@7.32.0)(typescript@4.6.4)(vue@3.4.24(typescript@4.6.4))':
+  '@vue/cli-plugin-typescript@5.0.8(@vue/cli-service@5.0.8(@vue/compiler-sfc@3.4.24)(esbuild@0.23.0)(lodash@4.17.21)(prettier@2.8.8)(raw-loader@4.0.2(webpack@5.91.0(esbuild@0.23.0)))(vue@3.4.24(typescript@4.6.4))(webpack-sources@3.2.3))(esbuild@0.23.0)(eslint@7.32.0)(typescript@4.6.4)(vue@3.4.24(typescript@4.6.4))':
     dependencies:
       '@babel/core': 7.24.4
       '@types/webpack-env': 1.18.4
-      '@vue/cli-service': 5.0.8(@vue/compiler-sfc@3.4.24)(esbuild@0.21.5)(lodash@4.17.21)(prettier@2.8.8)(raw-loader@4.0.2(webpack@5.91.0(esbuild@0.21.5)))(vue@3.4.24(typescript@4.6.4))(webpack-sources@3.2.3)
+      '@vue/cli-service': 5.0.8(@vue/compiler-sfc@3.4.24)(esbuild@0.23.0)(lodash@4.17.21)(prettier@2.8.8)(raw-loader@4.0.2(webpack@5.91.0(esbuild@0.23.0)))(vue@3.4.24(typescript@4.6.4))(webpack-sources@3.2.3)
       '@vue/cli-shared-utils': 5.0.8
-      babel-loader: 8.3.0(@babel/core@7.24.4)(webpack@5.91.0(esbuild@0.21.5))
-      fork-ts-checker-webpack-plugin: 6.5.3(eslint@7.32.0)(typescript@4.6.4)(webpack@5.91.0(esbuild@0.21.5))
+      babel-loader: 8.3.0(@babel/core@7.24.4)(webpack@5.91.0(esbuild@0.23.0))
+      fork-ts-checker-webpack-plugin: 6.5.3(eslint@7.32.0)(typescript@4.6.4)(webpack@5.91.0(esbuild@0.23.0))
       globby: 11.1.0
-      thread-loader: 3.0.4(webpack@5.91.0(esbuild@0.21.5))
-      ts-loader: 9.5.1(typescript@4.6.4)(webpack@5.91.0(esbuild@0.21.5))
+      thread-loader: 3.0.4(webpack@5.91.0(esbuild@0.23.0))
+      ts-loader: 9.5.1(typescript@4.6.4)(webpack@5.91.0(esbuild@0.23.0))
       typescript: 4.6.4
       vue: 3.4.24(typescript@4.6.4)
-      webpack: 5.91.0(esbuild@0.21.5)
+      webpack: 5.91.0(esbuild@0.23.0)
     transitivePeerDependencies:
       - '@swc/core'
       - encoding
@@ -6106,22 +6115,22 @@ snapshots:
       - uglify-js
       - webpack-cli
 
-  '@vue/cli-plugin-vuex@5.0.8(@vue/cli-service@5.0.8(@vue/compiler-sfc@3.4.24)(esbuild@0.21.5)(lodash@4.17.21)(prettier@2.8.8)(raw-loader@4.0.2(webpack@5.91.0(esbuild@0.21.5)))(vue@3.4.24(typescript@4.6.4))(webpack-sources@3.2.3))':
+  '@vue/cli-plugin-vuex@5.0.8(@vue/cli-service@5.0.8(@vue/compiler-sfc@3.4.24)(esbuild@0.23.0)(lodash@4.17.21)(prettier@2.8.8)(raw-loader@4.0.2(webpack@5.91.0(esbuild@0.23.0)))(vue@3.4.24(typescript@4.6.4))(webpack-sources@3.2.3))':
     dependencies:
-      '@vue/cli-service': 5.0.8(@vue/compiler-sfc@3.4.24)(esbuild@0.21.5)(lodash@4.17.21)(prettier@2.8.8)(raw-loader@4.0.2(webpack@5.91.0(esbuild@0.21.5)))(vue@3.4.24(typescript@4.6.4))(webpack-sources@3.2.3)
+      '@vue/cli-service': 5.0.8(@vue/compiler-sfc@3.4.24)(esbuild@0.23.0)(lodash@4.17.21)(prettier@2.8.8)(raw-loader@4.0.2(webpack@5.91.0(esbuild@0.23.0)))(vue@3.4.24(typescript@4.6.4))(webpack-sources@3.2.3)
 
-  '@vue/cli-service@5.0.8(@vue/compiler-sfc@3.4.24)(esbuild@0.21.5)(lodash@4.17.21)(prettier@2.8.8)(raw-loader@4.0.2(webpack@5.91.0(esbuild@0.21.5)))(vue@3.4.24(typescript@4.6.4))(webpack-sources@3.2.3)':
+  '@vue/cli-service@5.0.8(@vue/compiler-sfc@3.4.24)(esbuild@0.23.0)(lodash@4.17.21)(prettier@2.8.8)(raw-loader@4.0.2(webpack@5.91.0(esbuild@0.23.0)))(vue@3.4.24(typescript@4.6.4))(webpack-sources@3.2.3)':
     dependencies:
       '@babel/helper-compilation-targets': 7.23.6
-      '@soda/friendly-errors-webpack-plugin': 1.8.1(webpack@5.91.0(esbuild@0.21.5))
+      '@soda/friendly-errors-webpack-plugin': 1.8.1(webpack@5.91.0(esbuild@0.23.0))
       '@soda/get-current-script': 1.0.2
       '@types/minimist': 1.2.5
       '@vue/cli-overlay': 5.0.8
-      '@vue/cli-plugin-router': 5.0.8(@vue/cli-service@5.0.8(@vue/compiler-sfc@3.4.24)(esbuild@0.21.5)(lodash@4.17.21)(prettier@2.8.8)(raw-loader@4.0.2(webpack@5.91.0(esbuild@0.21.5)))(vue@3.4.24(typescript@4.6.4))(webpack-sources@3.2.3))
-      '@vue/cli-plugin-vuex': 5.0.8(@vue/cli-service@5.0.8(@vue/compiler-sfc@3.4.24)(esbuild@0.21.5)(lodash@4.17.21)(prettier@2.8.8)(raw-loader@4.0.2(webpack@5.91.0(esbuild@0.21.5)))(vue@3.4.24(typescript@4.6.4))(webpack-sources@3.2.3))
+      '@vue/cli-plugin-router': 5.0.8(@vue/cli-service@5.0.8(@vue/compiler-sfc@3.4.24)(esbuild@0.23.0)(lodash@4.17.21)(prettier@2.8.8)(raw-loader@4.0.2(webpack@5.91.0(esbuild@0.23.0)))(vue@3.4.24(typescript@4.6.4))(webpack-sources@3.2.3))
+      '@vue/cli-plugin-vuex': 5.0.8(@vue/cli-service@5.0.8(@vue/compiler-sfc@3.4.24)(esbuild@0.23.0)(lodash@4.17.21)(prettier@2.8.8)(raw-loader@4.0.2(webpack@5.91.0(esbuild@0.23.0)))(vue@3.4.24(typescript@4.6.4))(webpack-sources@3.2.3))
       '@vue/cli-shared-utils': 5.0.8
       '@vue/component-compiler-utils': 3.3.0(lodash@4.17.21)
-      '@vue/vue-loader-v15': vue-loader@15.11.1(@vue/compiler-sfc@3.4.24)(css-loader@6.11.0(webpack@5.91.0(esbuild@0.21.5)))(lodash@4.17.21)(prettier@2.8.8)(webpack@5.91.0(esbuild@0.21.5))
+      '@vue/vue-loader-v15': vue-loader@15.11.1(@vue/compiler-sfc@3.4.24)(css-loader@6.11.0(webpack@5.91.0(esbuild@0.23.0)))(lodash@4.17.21)(prettier@2.8.8)(webpack@5.91.0(esbuild@0.23.0))
       '@vue/web-component-wrapper': 1.3.0
       acorn: 8.11.3
       acorn-walk: 8.3.2
@@ -6132,9 +6141,9 @@ snapshots:
       cli-highlight: 2.1.11
       clipboardy: 2.3.0
       cliui: 7.0.4
-      copy-webpack-plugin: 9.1.0(webpack@5.91.0(esbuild@0.21.5))
-      css-loader: 6.11.0(webpack@5.91.0(esbuild@0.21.5))
-      css-minimizer-webpack-plugin: 3.4.1(esbuild@0.21.5)(webpack@5.91.0(esbuild@0.21.5))
+      copy-webpack-plugin: 9.1.0(webpack@5.91.0(esbuild@0.23.0))
+      css-loader: 6.11.0(webpack@5.91.0(esbuild@0.23.0))
+      css-minimizer-webpack-plugin: 3.4.1(esbuild@0.23.0)(webpack@5.91.0(esbuild@0.23.0))
       cssnano: 5.1.15(postcss@8.4.38)
       debug: 4.3.4
       default-gateway: 6.0.3
@@ -6143,32 +6152,32 @@ snapshots:
       fs-extra: 9.1.0
       globby: 11.1.0
       hash-sum: 2.0.0
-      html-webpack-plugin: 5.6.0(webpack@5.91.0(esbuild@0.21.5))
+      html-webpack-plugin: 5.6.0(webpack@5.91.0(esbuild@0.23.0))
       is-file-esm: 1.0.0
       launch-editor-middleware: 2.6.1
       lodash.defaultsdeep: 4.6.1
       lodash.mapvalues: 4.6.0
-      mini-css-extract-plugin: 2.9.0(webpack@5.91.0(esbuild@0.21.5))
+      mini-css-extract-plugin: 2.9.0(webpack@5.91.0(esbuild@0.23.0))
       minimist: 1.2.8
       module-alias: 2.2.3
       portfinder: 1.0.32
       postcss: 8.4.38
-      postcss-loader: 6.2.1(postcss@8.4.38)(webpack@5.91.0(esbuild@0.21.5))
-      progress-webpack-plugin: 1.0.16(webpack@5.91.0(esbuild@0.21.5))
+      postcss-loader: 6.2.1(postcss@8.4.38)(webpack@5.91.0(esbuild@0.23.0))
+      progress-webpack-plugin: 1.0.16(webpack@5.91.0(esbuild@0.23.0))
       ssri: 8.0.1
-      terser-webpack-plugin: 5.3.10(esbuild@0.21.5)(webpack@5.91.0(esbuild@0.21.5))
-      thread-loader: 3.0.4(webpack@5.91.0(esbuild@0.21.5))
-      vue-loader: 17.4.2(@vue/compiler-sfc@3.4.24)(vue@3.4.24(typescript@4.6.4))(webpack@5.91.0(esbuild@0.21.5))
+      terser-webpack-plugin: 5.3.10(esbuild@0.23.0)(webpack@5.91.0(esbuild@0.23.0))
+      thread-loader: 3.0.4(webpack@5.91.0(esbuild@0.23.0))
+      vue-loader: 17.4.2(@vue/compiler-sfc@3.4.24)(vue@3.4.24(typescript@4.6.4))(webpack@5.91.0(esbuild@0.23.0))
       vue-style-loader: 4.1.3
-      webpack: 5.91.0(esbuild@0.21.5)
+      webpack: 5.91.0(esbuild@0.23.0)
       webpack-bundle-analyzer: 4.10.2
       webpack-chain: 6.5.1
-      webpack-dev-server: 4.15.2(debug@4.3.4)(webpack@5.91.0(esbuild@0.21.5))
+      webpack-dev-server: 4.15.2(debug@4.3.4)(webpack@5.91.0(esbuild@0.23.0))
       webpack-merge: 5.10.0
       webpack-virtual-modules: 0.4.6
       whatwg-fetch: 3.6.20
     optionalDependencies:
-      raw-loader: 4.0.2(webpack@5.91.0(esbuild@0.21.5))
+      raw-loader: 4.0.2(webpack@5.91.0(esbuild@0.23.0))
       webpack-sources: 3.2.3
     transitivePeerDependencies:
       - '@parcel/css'
@@ -6617,14 +6626,14 @@ snapshots:
       postcss: 8.4.38
       postcss-value-parser: 4.2.0
 
-  babel-loader@8.3.0(@babel/core@7.24.4)(webpack@5.91.0(esbuild@0.21.5)):
+  babel-loader@8.3.0(@babel/core@7.24.4)(webpack@5.91.0(esbuild@0.23.0)):
     dependencies:
       '@babel/core': 7.24.4
       find-cache-dir: 3.3.2
       loader-utils: 2.0.4
       make-dir: 3.1.0
       schema-utils: 2.7.1
-      webpack: 5.91.0(esbuild@0.21.5)
+      webpack: 5.91.0(esbuild@0.23.0)
 
   babel-plugin-dynamic-import-node@2.3.3:
     dependencies:
@@ -6900,7 +6909,7 @@ snapshots:
 
   cookie@0.6.0: {}
 
-  copy-webpack-plugin@9.1.0(webpack@5.91.0(esbuild@0.21.5)):
+  copy-webpack-plugin@9.1.0(webpack@5.91.0(esbuild@0.23.0)):
     dependencies:
       fast-glob: 3.3.2
       glob-parent: 6.0.2
@@ -6908,7 +6917,7 @@ snapshots:
       normalize-path: 3.0.0
       schema-utils: 3.3.0
       serialize-javascript: 6.0.2
-      webpack: 5.91.0(esbuild@0.21.5)
+      webpack: 5.91.0(esbuild@0.23.0)
 
   core-js-compat@3.37.0:
     dependencies:
@@ -6958,7 +6967,7 @@ snapshots:
     dependencies:
       postcss: 8.4.38
 
-  css-loader@6.11.0(webpack@5.91.0(esbuild@0.21.5)):
+  css-loader@6.11.0(webpack@5.91.0(esbuild@0.23.0)):
     dependencies:
       icss-utils: 5.1.0(postcss@8.4.38)
       postcss: 8.4.38
@@ -6969,9 +6978,9 @@ snapshots:
       postcss-value-parser: 4.2.0
       semver: 7.6.0
     optionalDependencies:
-      webpack: 5.91.0(esbuild@0.21.5)
+      webpack: 5.91.0(esbuild@0.23.0)
 
-  css-minimizer-webpack-plugin@3.4.1(esbuild@0.21.5)(webpack@5.91.0(esbuild@0.21.5)):
+  css-minimizer-webpack-plugin@3.4.1(esbuild@0.23.0)(webpack@5.91.0(esbuild@0.23.0)):
     dependencies:
       cssnano: 5.1.15(postcss@8.4.38)
       jest-worker: 27.5.1
@@ -6979,9 +6988,9 @@ snapshots:
       schema-utils: 4.2.0
       serialize-javascript: 6.0.2
       source-map: 0.6.1
-      webpack: 5.91.0(esbuild@0.21.5)
+      webpack: 5.91.0(esbuild@0.23.0)
     optionalDependencies:
-      esbuild: 0.21.5
+      esbuild: 0.23.0
 
   css-select@4.3.0:
     dependencies:
@@ -7208,31 +7217,32 @@ snapshots:
 
   esbuild-wasm@0.19.12: {}
 
-  esbuild@0.21.5:
+  esbuild@0.23.0:
     optionalDependencies:
-      '@esbuild/aix-ppc64': 0.21.5
-      '@esbuild/android-arm': 0.21.5
-      '@esbuild/android-arm64': 0.21.5
-      '@esbuild/android-x64': 0.21.5
-      '@esbuild/darwin-arm64': 0.21.5
-      '@esbuild/darwin-x64': 0.21.5
-      '@esbuild/freebsd-arm64': 0.21.5
-      '@esbuild/freebsd-x64': 0.21.5
-      '@esbuild/linux-arm': 0.21.5
-      '@esbuild/linux-arm64': 0.21.5
-      '@esbuild/linux-ia32': 0.21.5
-      '@esbuild/linux-loong64': 0.21.5
-      '@esbuild/linux-mips64el': 0.21.5
-      '@esbuild/linux-ppc64': 0.21.5
-      '@esbuild/linux-riscv64': 0.21.5
-      '@esbuild/linux-s390x': 0.21.5
-      '@esbuild/linux-x64': 0.21.5
-      '@esbuild/netbsd-x64': 0.21.5
-      '@esbuild/openbsd-x64': 0.21.5
-      '@esbuild/sunos-x64': 0.21.5
-      '@esbuild/win32-arm64': 0.21.5
-      '@esbuild/win32-ia32': 0.21.5
-      '@esbuild/win32-x64': 0.21.5
+      '@esbuild/aix-ppc64': 0.23.0
+      '@esbuild/android-arm': 0.23.0
+      '@esbuild/android-arm64': 0.23.0
+      '@esbuild/android-x64': 0.23.0
+      '@esbuild/darwin-arm64': 0.23.0
+      '@esbuild/darwin-x64': 0.23.0
+      '@esbuild/freebsd-arm64': 0.23.0
+      '@esbuild/freebsd-x64': 0.23.0
+      '@esbuild/linux-arm': 0.23.0
+      '@esbuild/linux-arm64': 0.23.0
+      '@esbuild/linux-ia32': 0.23.0
+      '@esbuild/linux-loong64': 0.23.0
+      '@esbuild/linux-mips64el': 0.23.0
+      '@esbuild/linux-ppc64': 0.23.0
+      '@esbuild/linux-riscv64': 0.23.0
+      '@esbuild/linux-s390x': 0.23.0
+      '@esbuild/linux-x64': 0.23.0
+      '@esbuild/netbsd-x64': 0.23.0
+      '@esbuild/openbsd-arm64': 0.23.0
+      '@esbuild/openbsd-x64': 0.23.0
+      '@esbuild/sunos-x64': 0.23.0
+      '@esbuild/win32-arm64': 0.23.0
+      '@esbuild/win32-ia32': 0.23.0
+      '@esbuild/win32-x64': 0.23.0
 
   escalade@3.1.2: {}
 
@@ -7290,7 +7300,7 @@ snapshots:
 
   eslint-visitor-keys@3.4.3: {}
 
-  eslint-webpack-plugin@3.2.0(eslint@7.32.0)(webpack@5.91.0(esbuild@0.21.5)):
+  eslint-webpack-plugin@3.2.0(eslint@7.32.0)(webpack@5.91.0(esbuild@0.23.0)):
     dependencies:
       '@types/eslint': 8.56.10
       eslint: 7.32.0
@@ -7298,7 +7308,7 @@ snapshots:
       micromatch: 4.0.5
       normalize-path: 3.0.0
       schema-utils: 4.2.0
-      webpack: 5.91.0(esbuild@0.21.5)
+      webpack: 5.91.0(esbuild@0.23.0)
 
   eslint@7.32.0:
     dependencies:
@@ -7524,7 +7534,7 @@ snapshots:
     optionalDependencies:
       debug: 4.3.4
 
-  fork-ts-checker-webpack-plugin@6.5.3(eslint@7.32.0)(typescript@4.6.4)(webpack@5.91.0(esbuild@0.21.5)):
+  fork-ts-checker-webpack-plugin@6.5.3(eslint@7.32.0)(typescript@4.6.4)(webpack@5.91.0(esbuild@0.23.0)):
     dependencies:
       '@babel/code-frame': 7.24.2
       '@types/json-schema': 7.0.15
@@ -7540,7 +7550,7 @@ snapshots:
       semver: 7.6.0
       tapable: 1.1.3
       typescript: 4.6.4
-      webpack: 5.91.0(esbuild@0.21.5)
+      webpack: 5.91.0(esbuild@0.23.0)
     optionalDependencies:
       eslint: 7.32.0
 
@@ -7703,7 +7713,7 @@ snapshots:
 
   html-tags@3.3.1: {}
 
-  html-webpack-plugin@5.6.0(webpack@5.91.0(esbuild@0.21.5)):
+  html-webpack-plugin@5.6.0(webpack@5.91.0(esbuild@0.23.0)):
     dependencies:
       '@types/html-minifier-terser': 6.1.0
       html-minifier-terser: 6.1.0
@@ -7711,7 +7721,7 @@ snapshots:
       pretty-error: 4.0.0
       tapable: 2.2.1
     optionalDependencies:
-      webpack: 5.91.0(esbuild@0.21.5)
+      webpack: 5.91.0(esbuild@0.23.0)
 
   htmlparser2@6.1.0:
     dependencies:
@@ -8055,11 +8065,11 @@ snapshots:
 
   mimic-fn@2.1.0: {}
 
-  mini-css-extract-plugin@2.9.0(webpack@5.91.0(esbuild@0.21.5)):
+  mini-css-extract-plugin@2.9.0(webpack@5.91.0(esbuild@0.23.0)):
     dependencies:
       schema-utils: 4.2.0
       tapable: 2.2.1
-      webpack: 5.91.0(esbuild@0.21.5)
+      webpack: 5.91.0(esbuild@0.23.0)
 
   minimalistic-assert@1.0.1: {}
 
@@ -8358,21 +8368,21 @@ snapshots:
     dependencies:
       postcss: 8.4.38
 
-  postcss-loader@5.3.0(postcss@8.4.38)(webpack@5.91.0(esbuild@0.21.5)):
+  postcss-loader@5.3.0(postcss@8.4.38)(webpack@5.91.0(esbuild@0.23.0)):
     dependencies:
       cosmiconfig: 7.1.0
       klona: 2.0.6
       postcss: 8.4.38
       semver: 7.6.0
-      webpack: 5.91.0(esbuild@0.21.5)
+      webpack: 5.91.0(esbuild@0.23.0)
 
-  postcss-loader@6.2.1(postcss@8.4.38)(webpack@5.91.0(esbuild@0.21.5)):
+  postcss-loader@6.2.1(postcss@8.4.38)(webpack@5.91.0(esbuild@0.23.0)):
     dependencies:
       cosmiconfig: 7.1.0
       klona: 2.0.6
       postcss: 8.4.38
       semver: 7.6.0
-      webpack: 5.91.0(esbuild@0.21.5)
+      webpack: 5.91.0(esbuild@0.23.0)
 
   postcss-merge-longhand@5.1.7(postcss@8.4.38):
     dependencies:
@@ -8545,12 +8555,12 @@ snapshots:
 
   process-nextick-args@2.0.1: {}
 
-  progress-webpack-plugin@1.0.16(webpack@5.91.0(esbuild@0.21.5)):
+  progress-webpack-plugin@1.0.16(webpack@5.91.0(esbuild@0.23.0)):
     dependencies:
       chalk: 2.4.2
       figures: 2.0.0
       log-update: 2.3.0
-      webpack: 5.91.0(esbuild@0.21.5)
+      webpack: 5.91.0(esbuild@0.23.0)
 
   progress@2.0.3: {}
 
@@ -8593,11 +8603,11 @@ snapshots:
       iconv-lite: 0.4.24
       unpipe: 1.0.0
 
-  raw-loader@4.0.2(webpack@5.91.0(esbuild@0.21.5)):
+  raw-loader@4.0.2(webpack@5.91.0(esbuild@0.23.0)):
     dependencies:
       loader-utils: 2.0.4
       schema-utils: 3.3.0
-      webpack: 5.91.0(esbuild@0.21.5)
+      webpack: 5.91.0(esbuild@0.23.0)
 
   read-pkg-up@7.0.1:
     dependencies:
@@ -8713,12 +8723,12 @@ snapshots:
     optionalDependencies:
       '@babel/code-frame': 7.24.2
 
-  rollup-plugin-esbuild@6.1.1(esbuild@0.21.5)(rollup@4.18.0):
+  rollup-plugin-esbuild@6.1.1(esbuild@0.23.0)(rollup@4.18.0):
     dependencies:
       '@rollup/pluginutils': 5.1.0(rollup@4.18.0)
       debug: 4.3.4
       es-module-lexer: 1.5.0
-      esbuild: 0.21.5
+      esbuild: 0.23.0
       get-tsconfig: 4.7.5
       rollup: 4.18.0
     transitivePeerDependencies:
@@ -9051,16 +9061,16 @@ snapshots:
 
   tapable@2.2.1: {}
 
-  terser-webpack-plugin@5.3.10(esbuild@0.21.5)(webpack@5.91.0(esbuild@0.21.5)):
+  terser-webpack-plugin@5.3.10(esbuild@0.23.0)(webpack@5.91.0(esbuild@0.23.0)):
     dependencies:
       '@jridgewell/trace-mapping': 0.3.25
       jest-worker: 27.5.1
       schema-utils: 3.3.0
       serialize-javascript: 6.0.2
       terser: 5.30.4
-      webpack: 5.91.0(esbuild@0.21.5)
+      webpack: 5.91.0(esbuild@0.23.0)
     optionalDependencies:
-      esbuild: 0.21.5
+      esbuild: 0.23.0
 
   terser@5.30.4:
     dependencies:
@@ -9079,14 +9089,14 @@ snapshots:
     dependencies:
       any-promise: 1.3.0
 
-  thread-loader@3.0.4(webpack@5.91.0(esbuild@0.21.5)):
+  thread-loader@3.0.4(webpack@5.91.0(esbuild@0.23.0)):
     dependencies:
       json-parse-better-errors: 1.0.2
       loader-runner: 4.3.0
       loader-utils: 2.0.4
       neo-async: 2.6.2
       schema-utils: 3.3.0
-      webpack: 5.91.0(esbuild@0.21.5)
+      webpack: 5.91.0(esbuild@0.23.0)
 
   thunky@1.1.0: {}
 
@@ -9102,7 +9112,7 @@ snapshots:
 
   tr46@0.0.3: {}
 
-  ts-loader@9.5.1(typescript@4.6.4)(webpack@5.91.0(esbuild@0.21.5)):
+  ts-loader@9.5.1(typescript@4.6.4)(webpack@5.91.0(esbuild@0.23.0)):
     dependencies:
       chalk: 4.1.2
       enhanced-resolve: 5.16.0
@@ -9110,7 +9120,7 @@ snapshots:
       semver: 7.6.0
       source-map: 0.7.4
       typescript: 4.6.4
-      webpack: 5.91.0(esbuild@0.21.5)
+      webpack: 5.91.0(esbuild@0.23.0)
 
   tslib@1.14.1: {}
 
@@ -9211,15 +9221,15 @@ snapshots:
 
   vue-hot-reload-api@2.3.4: {}
 
-  vue-loader@15.11.1(@vue/compiler-sfc@3.4.24)(css-loader@6.11.0(webpack@5.91.0(esbuild@0.21.5)))(lodash@4.17.21)(prettier@2.8.8)(webpack@5.91.0(esbuild@0.21.5)):
+  vue-loader@15.11.1(@vue/compiler-sfc@3.4.24)(css-loader@6.11.0(webpack@5.91.0(esbuild@0.23.0)))(lodash@4.17.21)(prettier@2.8.8)(webpack@5.91.0(esbuild@0.23.0)):
     dependencies:
       '@vue/component-compiler-utils': 3.3.0(lodash@4.17.21)
-      css-loader: 6.11.0(webpack@5.91.0(esbuild@0.21.5))
+      css-loader: 6.11.0(webpack@5.91.0(esbuild@0.23.0))
       hash-sum: 1.0.2
       loader-utils: 1.4.2
       vue-hot-reload-api: 2.3.4
       vue-style-loader: 4.1.3
-      webpack: 5.91.0(esbuild@0.21.5)
+      webpack: 5.91.0(esbuild@0.23.0)
     optionalDependencies:
       '@vue/compiler-sfc': 3.4.24
       prettier: 2.8.8
@@ -9278,12 +9288,12 @@ snapshots:
       - walrus
       - whiskers
 
-  vue-loader@17.4.2(@vue/compiler-sfc@3.4.24)(vue@3.4.24(typescript@4.6.4))(webpack@5.91.0(esbuild@0.21.5)):
+  vue-loader@17.4.2(@vue/compiler-sfc@3.4.24)(vue@3.4.24(typescript@4.6.4))(webpack@5.91.0(esbuild@0.23.0)):
     dependencies:
       chalk: 4.1.2
       hash-sum: 2.0.0
       watchpack: 2.4.1
-      webpack: 5.91.0(esbuild@0.21.5)
+      webpack: 5.91.0(esbuild@0.23.0)
     optionalDependencies:
       '@vue/compiler-sfc': 3.4.24
       vue: 3.4.24(typescript@4.6.4)
@@ -9348,16 +9358,16 @@ snapshots:
       deepmerge: 1.5.2
       javascript-stringify: 2.1.0
 
-  webpack-dev-middleware@5.3.4(webpack@5.91.0(esbuild@0.21.5)):
+  webpack-dev-middleware@5.3.4(webpack@5.91.0(esbuild@0.23.0)):
     dependencies:
       colorette: 2.0.20
       memfs: 3.5.3
       mime-types: 2.1.35
       range-parser: 1.2.1
       schema-utils: 4.2.0
-      webpack: 5.91.0(esbuild@0.21.5)
+      webpack: 5.91.0(esbuild@0.23.0)
 
-  webpack-dev-server@4.15.2(debug@4.3.4)(webpack@5.91.0(esbuild@0.21.5)):
+  webpack-dev-server@4.15.2(debug@4.3.4)(webpack@5.91.0(esbuild@0.23.0)):
     dependencies:
       '@types/bonjour': 3.5.13
       '@types/connect-history-api-fallback': 1.5.4
@@ -9387,10 +9397,10 @@ snapshots:
       serve-index: 1.9.1
       sockjs: 0.3.24
       spdy: 4.0.2
-      webpack-dev-middleware: 5.3.4(webpack@5.91.0(esbuild@0.21.5))
+      webpack-dev-middleware: 5.3.4(webpack@5.91.0(esbuild@0.23.0))
       ws: 8.16.0
     optionalDependencies:
-      webpack: 5.91.0(esbuild@0.21.5)
+      webpack: 5.91.0(esbuild@0.23.0)
     transitivePeerDependencies:
       - bufferutil
       - debug
@@ -9407,7 +9417,7 @@ snapshots:
 
   webpack-virtual-modules@0.4.6: {}
 
-  webpack@5.91.0(esbuild@0.21.5):
+  webpack@5.91.0(esbuild@0.23.0):
     dependencies:
       '@types/eslint-scope': 3.7.7
       '@types/estree': 1.0.5
@@ -9430,7 +9440,7 @@ snapshots:
       neo-async: 2.6.2
       schema-utils: 3.3.0
       tapable: 2.2.1
-      terser-webpack-plugin: 5.3.10(esbuild@0.21.5)(webpack@5.91.0(esbuild@0.21.5))
+      terser-webpack-plugin: 5.3.10(esbuild@0.23.0)(webpack@5.91.0(esbuild@0.23.0))
       watchpack: 2.4.1
       webpack-sources: 3.2.3
     transitivePeerDependencies:
diff --git a/rollup.config.js b/rollup.config.js
index b2b71ae..d5367d4 100644
--- a/rollup.config.js
+++ b/rollup.config.js
@@ -2,7 +2,7 @@ import replace from "@rollup/plugin-replace";
 import esbuild from "rollup-plugin-esbuild";
 import { dts } from "rollup-plugin-dts";
 import css from "rollup-plugin-import-css";
-import { ignoreCss } from "./scripts/rollup.mjs";
+import { injectVueDemi } from "./scripts/rollup.mjs";
 
 /**
  * Modifies the Rollup options for a build to support strict CSP
@@ -45,24 +45,26 @@ const builds = [
         file: "dist/index.js",
         format: "esm",
         sourcemap: true
-      },
-      {
-        file: "dist/index.cjs",
-        format: "cjs",
-        exports: "named",
-        sourcemap: true
       }
     ]
   },
   {
-    input: "src/index.ts",
+    input: "src/global.ts",
     plugins: [esbuild({ minify: true })],
     external: ["vue-demi", /^echarts/],
     output: [
       {
         file: "dist/index.min.js", // for unpkg/jsdelivr
-        format: "esm",
-        sourcemap: true
+        format: "umd",
+        name: "VueECharts",
+        exports: "default",
+        sourcemap: true,
+        globals: {
+          "vue-demi": "VueDemi",
+          echarts: "echarts",
+          "echarts/core": "echarts"
+        },
+        plugins: [injectVueDemi]
       }
     ]
   }
@@ -72,20 +74,17 @@ export default [
   ...builds.map(options => configBuild(options, false)),
   ...builds.map(options => configBuild(options, true)),
   {
-    input: "src/index.ts",
-    plugins: [
-      ignoreCss,
-      dts({
-        compilerOptions: {
-          // see https://github.com/unjs/unbuild/pull/57/files
-          preserveSymlinks: false
-        }
-      })
-    ],
-    external: ["vue-demi", /^echarts/],
-    output: {
-      file: "dist/index.vue3.d.ts",
-      format: "esm"
-    }
+    input: "src/index.d.ts",
+    plugins: [dts()],
+    output: [
+      {
+        file: "dist/index.d.ts",
+        format: "esm"
+      },
+      {
+        file: "dist/csp/index.d.ts",
+        format: "esm"
+      }
+    ]
   }
 ];
diff --git a/rollup.vue2.config.js b/rollup.vue2.config.js
deleted file mode 100644
index 70e6f07..0000000
--- a/rollup.vue2.config.js
+++ /dev/null
@@ -1,15 +0,0 @@
-import { dts } from "rollup-plugin-dts";
-
-/** @type {import('rollup').RollupOptions[]} */
-const options = [
-  {
-    input: "src/index.vue2.d.ts",
-    plugins: [dts()],
-    output: {
-      file: "dist/index.vue2.d.ts",
-      format: "esm"
-    }
-  }
-];
-
-export default options;
diff --git a/scripts/docs.mjs b/scripts/docs.mjs
index 1137047..d5f5d1a 100644
--- a/scripts/docs.mjs
+++ b/scripts/docs.mjs
@@ -7,7 +7,7 @@ const { name, version } = getPackageMeta();
 const CDN_PREFIX = "https://cdn.jsdelivr.net/npm/";
 
 const DEP_VERSIONS = {
-  "vue@3": "3.4.30",
+  "vue@3": "3.4.33",
   "vue@2": "2.7.16",
   echarts: "5.5.1",
   [name]: version
diff --git a/scripts/postinstall.mjs b/scripts/postinstall.mjs
deleted file mode 100644
index 3c6ace1..0000000
--- a/scripts/postinstall.mjs
+++ /dev/null
@@ -1,57 +0,0 @@
-import { readFileSync, writeFileSync } from "node:fs";
-import { resolvePath } from "./utils.mjs";
-
-function resolveDist(...paths) {
-  return resolvePath(import.meta.url, "../dist", ...paths);
-}
-
-const typesSource = {
-  3: "index.vue3.d.ts",
-  2: "index.vue2.d.ts"
-};
-
-const typesTargets = [
-  "index.d.ts",
-  "index.d.cts",
-  "csp/index.d.ts",
-  "csp/index.d.cts"
-];
-
-function switchVersion(version) {
-  const source = typesSource[version];
-  const content = readFileSync(resolveDist(source), "utf8");
-
-  typesTargets.forEach(target => {
-    writeFileSync(resolveDist(target), content, "utf8");
-  });
-
-  console.log(`[vue-echarts] Switched to Vue ${version} environment.`);
-}
-
-async function loadVue() {
-  try {
-    const Vue = await import("vue");
-    return Vue;
-  } catch (e) {
-    return null;
-  }
-}
-
-async function main() {
-  const Vue = await loadVue();
-
-  // Align the process with vue-demi
-  if (!Vue || typeof Vue.version !== "string") {
-    console.warn(
-      '[vue-echarts] Vue is not found. Please run "npm install vue" to install.'
-    );
-  } else if (Vue.version.startsWith("3.")) {
-    switchVersion(3);
-  } else if (Vue.version.startsWith("2.7.")) {
-    switchVersion(2);
-  } else {
-    console.warn(`[vue-echarts] Vue version v${Vue.version} is not supported.`);
-  }
-}
-
-main();
diff --git a/scripts/rollup.mjs b/scripts/rollup.mjs
index b0c8f3c..7cffcab 100644
--- a/scripts/rollup.mjs
+++ b/scripts/rollup.mjs
@@ -1,15 +1,17 @@
-const EMPTY_FILE_ID = "__rollup_empty__";
+import { readFileSync } from "node:fs";
+import { createRequire } from "node:module";
+
+const require = createRequire(import.meta.url);
+
+const VUE_DEMI_IIFE = readFileSync(
+  require.resolve("vue-demi/lib/index.iife.js"),
+  "utf8"
+);
 
 /** @type {import('rollup').Plugin} */
-export const ignoreCss = {
-  name: "ignore-css",
-  resolveId(source) {
-    if (source.endsWith(".css")) {
-      return EMPTY_FILE_ID;
-    }
-    return null;
-  },
-  load(id) {
-    return id === EMPTY_FILE_ID ? "" : null;
+export const injectVueDemi = {
+  name: "inject-vue-demi",
+  banner() {
+    return `${VUE_DEMI_IIFE};\n;`;
   }
 };
diff --git a/src/global.ts b/src/global.ts
new file mode 100644
index 0000000..4938752
--- /dev/null
+++ b/src/global.ts
@@ -0,0 +1,7 @@
+import "echarts";
+import ECharts, * as exported from "./index";
+
+export default {
+  ...ECharts,
+  ...exported
+};
diff --git a/src/index.vue2.d.ts b/src/index.d.ts
similarity index 51%
rename from src/index.vue2.d.ts
rename to src/index.d.ts
index d2f671c..b2be1e6 100644
--- a/src/index.vue2.d.ts
+++ b/src/index.d.ts
@@ -1,30 +1,44 @@
 /* eslint-disable @typescript-eslint/ban-types */
-import type { Ref, DefineComponent } from "vue-demi";
+import type { Ref, DefineComponent, InjectionKey } from "vue-demi";
 import type {
   Option,
+  Theme,
   InitOptions,
   UpdateOptions,
+  LoadingOptions,
   EChartsType,
-  Emits
+  Emits,
+  ThemeInjection,
+  InitOptionsInjection,
+  UpdateOptionsInjection,
+  LoadingOptionsInjection
 } from "./types";
 
-declare const LOADING_OPTIONS_KEY = "ecLoadingOptions";
-declare const THEME_KEY = "ecTheme";
-declare const INIT_OPTIONS_KEY = "ecInitOptions";
-declare const UPDATE_OPTIONS_KEY = "ecUpdateOptions";
+declare const THEME_KEY: InjectionKey;
+declare const INIT_OPTIONS_KEY: InjectionKey;
+declare const UPDATE_OPTIONS_KEY: InjectionKey;
+declare const LOADING_OPTIONS_KEY: InjectionKey;
 
 declare type ChartProps = {
-  loading?: boolean;
-  loadingOptions?: Record;
-  autoresize?: boolean;
-  option?: Option;
-  theme?: string | Record;
+  theme?: Theme;
   initOptions?: InitOptions;
   updateOptions?: UpdateOptions;
+  loadingOptions?: LoadingOptions;
+  option?: Option;
+  autoresize?: boolean;
+  loading?: boolean;
   group?: string;
   manualUpdate?: boolean;
 };
 
+// convert Emits to Props
+// click => onClick
+declare type ChartEventProps = {
+  [key in keyof Emits as key extends string
+    ? `on${Capitalize}`
+    : never]?: Emits[key];
+};
+
 type MethodNames =
   | "getWidth"
   | "getHeight"
@@ -46,18 +60,15 @@ type MethodNames =
 declare type ChartMethods = Pick;
 
 declare const Chart: DefineComponent<
-  ChartProps,
+  ChartProps & ChartEventProps,
   {
     root: Ref;
     chart: Ref;
   },
   {},
   {},
-  ChartMethods,
-  {},
-  {},
-  Emits
+  ChartMethods
 >;
 
 export default Chart;
-export { INIT_OPTIONS_KEY, LOADING_OPTIONS_KEY, THEME_KEY, UPDATE_OPTIONS_KEY };
+export { THEME_KEY, INIT_OPTIONS_KEY, UPDATE_OPTIONS_KEY, LOADING_OPTIONS_KEY };
diff --git a/src/types.ts b/src/types.ts
index 1ccf1c0..861c531 100644
--- a/src/types.ts
+++ b/src/types.ts
@@ -1,6 +1,6 @@
 import { init } from "echarts/core";
 
-import type { SetOptionOpts, ECElementEvent, ElementEvent } from "echarts";
+import type { SetOptionOpts, ECElementEvent, ElementEvent } from "echarts/core";
 import type { Ref } from "vue-demi";
 
 export type Injection = T | null | Ref | { value: T | null };
@@ -37,6 +37,7 @@ export type LoadingOptions = {
   lineWidth?: number;
   zlevel?: number;
 };
+export type LoadingOptionsInjection = Injection;
 
 type MouseEventName =
   | "click"
diff --git a/src/wc.ts b/src/wc.ts
index e5bb03a..1d9d99b 100644
--- a/src/wc.ts
+++ b/src/wc.ts
@@ -26,21 +26,9 @@ export function register(): boolean {
     // if the browser doesn't support native classes.
     const reg = new Function(
       "tag",
-      `class EChartsElement extends HTMLElement {
-  __dispose = null;
-
-  disconnectedCallback() {
-    if (this.__dispose) {
-      this.__dispose();
-      this.__dispose = null;
-    }
-  }
-}
-
-if (customElements.get(tag) == null) {
-  customElements.define(tag, EChartsElement);
-}
-`
+      // Use esbuild repl to keep build process simple
+      // https://esbuild.github.io/try/#dAAwLjIzLjAALS1taW5pZnkAY2xhc3MgRUNoYXJ0c0VsZW1lbnQgZXh0ZW5kcyBIVE1MRWxlbWVudCB7CiAgX19kaXNwb3NlID0gbnVsbDsKCiAgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICBpZiAodGhpcy5fX2Rpc3Bvc2UpIHsKICAgICAgdGhpcy5fX2Rpc3Bvc2UoKTsKICAgICAgdGhpcy5fX2Rpc3Bvc2UgPSBudWxsOwogICAgfQogIH0KfQoKaWYgKGN1c3RvbUVsZW1lbnRzLmdldCh0YWcpID09IG51bGwpIHsKICBjdXN0b21FbGVtZW50cy5kZWZpbmUodGFnLCBFQ2hhcnRzRWxlbWVudCk7Cn0K
+      "class EChartsElement extends HTMLElement{__dispose=null;disconnectedCallback(){this.__dispose&&(this.__dispose(),this.__dispose=null)}}customElements.get(tag)==null&&customElements.define(tag,EChartsElement);"
     );
     reg(TAG_NAME);
   } catch (e) {