diff --git a/docs/plugins/api.md b/docs/plugins/api.md
index 430e0c06a..b9b311853 100644
--- a/docs/plugins/api.md
+++ b/docs/plugins/api.md
@@ -50,6 +50,49 @@ addCustomTab({
   },
   category: 'advanced',
 })
+
+
+const SFC = /* vue */ `
+  <script setup lang="ts">
+  import { ref } from 'vue'
+  
+  const count = ref(0)
+  </script>
+  
+  <template>
+    <div class="h-full w-full flex flex-col items-center justify-center">
+      <div>
+        count is {{ count }}
+      </div>
+      <button class="btn" @click="count++">
+        increment
+      </button>
+    </div>
+  </template>
+  
+  <style scoped>
+  .btn {
+    background-color: #4c51bf;
+    color: #fff;
+    padding: 0.5rem 1rem;
+    border-radius: 0.25rem;
+    border: none;
+    cursor: pointer;
+  }
+  </style>
+`
+
+addCustomTab({
+  name: 'plugin-count',
+  title: 'Plugin Count',
+  icon: 'baseline-exposure-plus-1',
+  // SFC view
+  view: {
+    type: 'sfc',
+    sfc: SFC,
+  },
+  category: 'app',
+})
 ```
 
 ## `addCustomCommand`
diff --git a/package.json b/package.json
index fc0cbefd5..0f87f7291 100644
--- a/package.json
+++ b/package.json
@@ -65,6 +65,7 @@
     "play:multi-app": "turbo dev --filter=./packages/playground/multi-app",
     "play:webpack": "turbo dev --filter=./packages/playground/webpack",
     "play:options-api": "turbo dev --filter=./packages/playground/options-api",
+    "play:plugin-sfc": "turbo dev --filter=./packages/playground/plugin-sfc",
     "docs": "pnpm -C docs run docs:dev",
     "docs:build": "pnpm -C docs run docs:build",
     "zip": "tsx ./scripts/extension-zip.ts",
diff --git a/packages/client/package.json b/packages/client/package.json
index 2f737a2de..176a89f03 100644
--- a/packages/client/package.json
+++ b/packages/client/package.json
@@ -41,7 +41,8 @@
     "vis-network": "^9.1.9",
     "vite-hot-client": "^0.2.4",
     "vue-router": "^4.5.0",
-    "vue-virtual-scroller": "2.0.0-beta.8"
+    "vue-virtual-scroller": "2.0.0-beta.8",
+    "vue3-sfc-loader": "^0.9.5"
   },
   "devDependencies": {
     "@iconify/json": "^2.2.277",
diff --git a/packages/client/src/components/CustomTabComponent.vue b/packages/client/src/components/CustomTabComponent.vue
index 0aea1e9cd..0c6f34b63 100644
--- a/packages/client/src/components/CustomTabComponent.vue
+++ b/packages/client/src/components/CustomTabComponent.vue
@@ -39,6 +39,9 @@ watch(() => tabName.value, () => {
   <template v-else-if="tab?.view?.type === 'vnode'">
     <Component :is="tab.view.vnode" />
   </template>
+  <template v-else-if="tab?.view?.type === 'sfc'">
+    <SFCView :sfc="tab.view.sfc" :name="tab.name" />
+  </template>
   <template v-else>
     <div>
       <NCard flex="~ col" h-full items-center justify-center>
diff --git a/packages/client/src/components/common/SFCView.vue b/packages/client/src/components/common/SFCView.vue
new file mode 100644
index 000000000..5f6390d7e
--- /dev/null
+++ b/packages/client/src/components/common/SFCView.vue
@@ -0,0 +1,29 @@
+<script setup lang="ts">
+import * as Vue from 'vue'
+import { loadModule } from 'vue3-sfc-loader'
+
+const props = defineProps<{
+  sfc: string
+  name: string
+}>()
+
+const options = {
+  moduleCache: {
+    vue: Vue,
+  },
+  getFile() {
+    return props?.sfc ?? ''
+  },
+  addStyle(textContent: string) {
+    const style = Object.assign(document.createElement('style'), { textContent })
+    const ref = document.head.getElementsByTagName('style')[0] || null
+    document.head.insertBefore(style, ref)
+  },
+}
+
+const RemoteSFC = defineAsyncComponent(() => loadModule(`${props.name}.vue`, options))
+</script>
+
+<template>
+  <RemoteSFC />
+</template>
diff --git a/packages/devtools-kit/src/types/tab.ts b/packages/devtools-kit/src/types/tab.ts
index ce07bff03..f2d8aa1ac 100644
--- a/packages/devtools-kit/src/types/tab.ts
+++ b/packages/devtools-kit/src/types/tab.ts
@@ -6,7 +6,7 @@ type TabCategory =
   | 'modules'
   | 'advanced'
 
-export type ModuleView = ModuleIframeView | ModuleVNodeView
+export type ModuleView = ModuleIframeView | ModuleVNodeView | ModuleSFCView
 
 export interface ModuleIframeView {
   /**
@@ -36,6 +36,17 @@ export interface ModuleVNodeView {
   vnode: VNode
 }
 
+export interface ModuleSFCView {
+  /**
+   * SFC view
+   */
+  type: 'sfc'
+  /**
+   * SFC component
+   */
+  sfc: string
+}
+
 export interface CustomTab {
   /**
    * The name of the tab, must be unique
diff --git a/packages/playground/plugin-sfc/index.html b/packages/playground/plugin-sfc/index.html
new file mode 100644
index 000000000..fcc12ba2e
--- /dev/null
+++ b/packages/playground/plugin-sfc/index.html
@@ -0,0 +1,13 @@
+<!doctype html>
+<html lang="en">
+  <head>
+    <meta charset="UTF-8" />
+    <link rel="icon" type="image/svg+xml" href="/vite.svg" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+    <title>Vue DevTools Plugin-SFC Playground</title>
+  </head>
+  <body>
+    <div id="app"></div>
+    <script type="module" src="/src/main.ts"></script>
+  </body>
+</html>
diff --git a/packages/playground/plugin-sfc/package.json b/packages/playground/plugin-sfc/package.json
new file mode 100644
index 000000000..bcbc257d4
--- /dev/null
+++ b/packages/playground/plugin-sfc/package.json
@@ -0,0 +1,20 @@
+{
+  "name": "playground-plugin-sfc",
+  "type": "module",
+  "version": "7.3.2",
+  "private": true,
+  "scripts": {
+    "dev": "vite"
+  },
+  "dependencies": {
+    "vue": "^3.5.13"
+  },
+  "devDependencies": {
+    "@vitejs/plugin-vue": "^5.2.1",
+    "@vue/devtools": "workspace:^",
+    "typescript": "^5.7.2",
+    "vite": "^6.0.1",
+    "vite-plugin-inspect": "0.8.9",
+    "vite-plugin-vue-devtools": "workspace:*"
+  }
+}
diff --git a/packages/playground/plugin-sfc/public/vite.svg b/packages/playground/plugin-sfc/public/vite.svg
new file mode 100644
index 000000000..e7b8dfb1b
--- /dev/null
+++ b/packages/playground/plugin-sfc/public/vite.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="31.88" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 257"><defs><linearGradient id="IconifyId1813088fe1fbc01fb466" x1="-.828%" x2="57.636%" y1="7.652%" y2="78.411%"><stop offset="0%" stop-color="#41D1FF"></stop><stop offset="100%" stop-color="#BD34FE"></stop></linearGradient><linearGradient id="IconifyId1813088fe1fbc01fb467" x1="43.376%" x2="50.316%" y1="2.242%" y2="89.03%"><stop offset="0%" stop-color="#FFEA83"></stop><stop offset="8.333%" stop-color="#FFDD35"></stop><stop offset="100%" stop-color="#FFA800"></stop></linearGradient></defs><path fill="url(#IconifyId1813088fe1fbc01fb466)" d="M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"></path><path fill="url(#IconifyId1813088fe1fbc01fb467)" d="M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"></path></svg>
\ No newline at end of file
diff --git a/packages/playground/plugin-sfc/src/App.vue b/packages/playground/plugin-sfc/src/App.vue
new file mode 100644
index 000000000..4d5958f26
--- /dev/null
+++ b/packages/playground/plugin-sfc/src/App.vue
@@ -0,0 +1,7 @@
+<script setup lang="ts">
+
+</script>
+
+<template>
+  <div class="flex flex-col justify-center" />
+</template>
diff --git a/packages/playground/plugin-sfc/src/count.vue b/packages/playground/plugin-sfc/src/count.vue
new file mode 100644
index 000000000..6cad588c2
--- /dev/null
+++ b/packages/playground/plugin-sfc/src/count.vue
@@ -0,0 +1,27 @@
+<script setup lang="ts">
+import { ref } from 'vue'
+
+const count = ref(0)
+</script>
+
+<template>
+  <div class="h-full w-full flex flex-col items-center justify-center">
+    <div>
+      count is {{ count }}
+    </div>
+    <button class="btn" @click="count++">
+      increment
+    </button>
+  </div>
+</template>
+
+<style scoped>
+.btn {
+  background-color: #4c51bf;
+  color: #fff;
+  padding: 0.5rem 1rem;
+  border-radius: 0.25rem;
+  border: none;
+  cursor: pointer;
+}
+</style>
diff --git a/packages/playground/plugin-sfc/src/main.ts b/packages/playground/plugin-sfc/src/main.ts
new file mode 100644
index 000000000..c91c8c19a
--- /dev/null
+++ b/packages/playground/plugin-sfc/src/main.ts
@@ -0,0 +1,20 @@
+import { addCustomTab } from '@vue/devtools-kit'
+import { createApp } from 'vue'
+import App from './App.vue'
+import countSFC from './count.vue?raw'
+
+const app = createApp(App)
+app.mount('#app')
+
+setTimeout(() => {
+  addCustomTab({
+    name: 'plugin_count',
+    title: 'Plugin Count',
+    icon: 'baseline-exposure-plus-1',
+    view: {
+      type: 'sfc',
+      sfc: countSFC,
+    },
+    category: 'app',
+  })
+}, 2000)
diff --git a/packages/playground/plugin-sfc/vite.config.ts b/packages/playground/plugin-sfc/vite.config.ts
new file mode 100644
index 000000000..17ff095fe
--- /dev/null
+++ b/packages/playground/plugin-sfc/vite.config.ts
@@ -0,0 +1,15 @@
+import vue from '@vitejs/plugin-vue'
+import { defineConfig } from 'vite'
+import inspect from 'vite-plugin-inspect'
+import VueDevTools from 'vite-plugin-vue-devtools'
+// https://vitejs.dev/config/
+export default defineConfig({
+  plugins: [
+    vue(),
+    VueDevTools(),
+    inspect(),
+  ],
+  server: {
+    port: 3000,
+  },
+})
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index ef3db9fd0..8ef5ddc92 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -283,6 +283,9 @@ importers:
       vue-virtual-scroller:
         specifier: 2.0.0-beta.8
         version: 2.0.0-beta.8(vue@3.5.13(typescript@5.7.2))
+      vue3-sfc-loader:
+        specifier: ^0.9.5
+        version: 0.9.5(lodash@4.17.21)(vue@3.5.13(typescript@5.7.2))
     devDependencies:
       '@iconify/json':
         specifier: ^2.2.277
@@ -705,6 +708,31 @@ importers:
         specifier: workspace:*
         version: link:../../vite
 
+  packages/playground/plugin-sfc:
+    dependencies:
+      vue:
+        specifier: ^3.5.13
+        version: 3.5.13(typescript@5.7.2)
+    devDependencies:
+      '@vitejs/plugin-vue':
+        specifier: ^5.2.1
+        version: 5.2.1(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.2)(sass-embedded@1.83.1)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0))(vue@3.5.13(typescript@5.7.2))
+      '@vue/devtools':
+        specifier: workspace:^
+        version: link:../../devtools
+      typescript:
+        specifier: ^5.7.2
+        version: 5.7.2
+      vite:
+        specifier: ^6.0.1
+        version: 6.0.7(@types/node@22.10.5)(jiti@2.4.2)(sass-embedded@1.83.1)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0)
+      vite-plugin-inspect:
+        specifier: 0.8.9
+        version: 0.8.9(rollup@4.29.2)(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.2)(sass-embedded@1.83.1)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0))
+      vite-plugin-vue-devtools:
+        specifier: workspace:*
+        version: link:../../vite
+
   packages/playground/ui:
     dependencies:
       '@unocss/reset':
@@ -753,13 +781,13 @@ importers:
         version: 7.25.9(@babel/core@7.26.0)(eslint@9.17.0(jiti@2.4.2))
       '@vue/cli-plugin-babel':
         specifier: ~5.0.8
-        version: 5.0.8(@vue/cli-service@5.0.8(@vue/compiler-sfc@3.5.13)(esbuild@0.24.2)(lodash@4.17.21)(vue@3.5.13(typescript@5.7.2))(webpack-sources@3.2.3))(core-js@3.39.0)(esbuild@0.24.2)(vue@3.5.13(typescript@5.7.2))
+        version: 5.0.8(@vue/cli-service@5.0.8(@vue/compiler-sfc@3.5.13)(esbuild@0.24.2)(lodash@4.17.21)(vue-template-compiler@2.7.16)(vue@3.5.13(typescript@5.7.2))(webpack-sources@3.2.3))(core-js@3.39.0)(esbuild@0.24.2)(vue@3.5.13(typescript@5.7.2))
       '@vue/cli-plugin-eslint':
         specifier: ~5.0.8
-        version: 5.0.8(@vue/cli-service@5.0.8(@vue/compiler-sfc@3.5.13)(esbuild@0.24.2)(lodash@4.17.21)(vue@3.5.13(typescript@5.7.2))(webpack-sources@3.2.3))(esbuild@0.24.2)(eslint@9.17.0(jiti@2.4.2))
+        version: 5.0.8(@vue/cli-service@5.0.8(@vue/compiler-sfc@3.5.13)(esbuild@0.24.2)(lodash@4.17.21)(vue-template-compiler@2.7.16)(vue@3.5.13(typescript@5.7.2))(webpack-sources@3.2.3))(esbuild@0.24.2)(eslint@9.17.0(jiti@2.4.2))
       '@vue/cli-service':
         specifier: ~5.0.8
-        version: 5.0.8(@vue/compiler-sfc@3.5.13)(esbuild@0.24.2)(lodash@4.17.21)(vue@3.5.13(typescript@5.7.2))(webpack-sources@3.2.3)
+        version: 5.0.8(@vue/compiler-sfc@3.5.13)(esbuild@0.24.2)(lodash@4.17.21)(vue-template-compiler@2.7.16)(vue@3.5.13(typescript@5.7.2))(webpack-sources@3.2.3)
       '@vue/devtools':
         specifier: workspace:*
         version: link:../../devtools
@@ -1192,6 +1220,27 @@ packages:
     peerDependencies:
       '@babel/core': ^7.0.0-0
 
+  '@babel/plugin-proposal-dynamic-import@7.18.6':
+    resolution: {integrity: sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==}
+    engines: {node: '>=6.9.0'}
+    deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-dynamic-import instead.
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+
+  '@babel/plugin-proposal-nullish-coalescing-operator@7.18.6':
+    resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==}
+    engines: {node: '>=6.9.0'}
+    deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead.
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+
+  '@babel/plugin-proposal-optional-chaining@7.21.0':
+    resolution: {integrity: sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==}
+    engines: {node: '>=6.9.0'}
+    deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead.
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+
   '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2':
     resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==}
     engines: {node: '>=6.9.0'}
@@ -1232,6 +1281,16 @@ packages:
     peerDependencies:
       '@babel/core': ^7.0.0-0
 
+  '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3':
+    resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+
+  '@babel/plugin-syntax-optional-chaining@7.8.3':
+    resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+
   '@babel/plugin-syntax-typescript@7.25.9':
     resolution: {integrity: sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==}
     engines: {node: '>=6.9.0'}
@@ -2419,51 +2478,61 @@ packages:
     resolution: {integrity: sha512-h4VgxxmzmtXLLYNDaUcQevCmPYX6zSj4SwKuzY7SR5YlnCBYsmvfYORXgiU8axhkFCDtQF3RW5LIXT8B14Qykg==}
     cpu: [arm]
     os: [linux]
+    libc: [glibc]
 
   '@rollup/rollup-linux-arm-musleabihf@4.29.2':
     resolution: {integrity: sha512-EObwZ45eMmWZQ1w4N7qy4+G1lKHm6mcOwDa+P2+61qxWu1PtQJ/lz2CNJ7W3CkfgN0FQ7cBUy2tk6D5yR4KeXw==}
     cpu: [arm]
     os: [linux]
+    libc: [musl]
 
   '@rollup/rollup-linux-arm64-gnu@4.29.2':
     resolution: {integrity: sha512-Z7zXVHEXg1elbbYiP/29pPwlJtLeXzjrj4241/kCcECds8Zg9fDfURWbZHRIKrEriAPS8wnVtdl4ZJBvZr325w==}
     cpu: [arm64]
     os: [linux]
+    libc: [glibc]
 
   '@rollup/rollup-linux-arm64-musl@4.29.2':
     resolution: {integrity: sha512-TF4kxkPq+SudS/r4zGPf0G08Bl7+NZcFrUSR3484WwsHgGgJyPQRLCNrQ/R5J6VzxfEeQR9XRpc8m2t7lD6SEQ==}
     cpu: [arm64]
     os: [linux]
+    libc: [musl]
 
   '@rollup/rollup-linux-loongarch64-gnu@4.29.2':
     resolution: {integrity: sha512-kO9Fv5zZuyj2zB2af4KA29QF6t7YSxKrY7sxZXfw8koDQj9bx5Tk5RjH+kWKFKok0wLGTi4bG117h31N+TIBEg==}
     cpu: [loong64]
     os: [linux]
+    libc: [glibc]
 
   '@rollup/rollup-linux-powerpc64le-gnu@4.29.2':
     resolution: {integrity: sha512-gIh776X7UCBaetVJGdjXPFurGsdWwHHinwRnC5JlLADU8Yk0EdS/Y+dMO264OjJFo7MXQ5PX4xVFbxrwK8zLqA==}
     cpu: [ppc64]
     os: [linux]
+    libc: [glibc]
 
   '@rollup/rollup-linux-riscv64-gnu@4.29.2':
     resolution: {integrity: sha512-YgikssQ5UNq1GoFKZydMEkhKbjlUq7G3h8j6yWXLBF24KyoA5BcMtaOUAXq5sydPmOPEqB6kCyJpyifSpCfQ0w==}
     cpu: [riscv64]
     os: [linux]
+    libc: [glibc]
 
   '@rollup/rollup-linux-s390x-gnu@4.29.2':
     resolution: {integrity: sha512-9ouIR2vFWCyL0Z50dfnon5nOrpDdkTG9lNDs7MRaienQKlTyHcDxplmk3IbhFlutpifBSBr2H4rVILwmMLcaMA==}
     cpu: [s390x]
     os: [linux]
+    libc: [glibc]
 
   '@rollup/rollup-linux-x64-gnu@4.29.2':
     resolution: {integrity: sha512-ckBBNRN/F+NoSUDENDIJ2U9UWmIODgwDB/vEXCPOMcsco1niTkxTXa6D2Y/pvCnpzaidvY2qVxGzLilNs9BSzw==}
     cpu: [x64]
     os: [linux]
+    libc: [glibc]
 
   '@rollup/rollup-linux-x64-musl@4.29.2':
     resolution: {integrity: sha512-jycl1wL4AgM2aBFJFlpll/kGvAjhK8GSbEmFT5v3KC3rP/b5xZ1KQmv0vQQ8Bzb2ieFQ0kZFPRMbre/l3Bu9JA==}
     cpu: [x64]
     os: [linux]
+    libc: [musl]
 
   '@rollup/rollup-win32-arm64-msvc@4.29.2':
     resolution: {integrity: sha512-S2V0LlcOiYkNGlRAWZwwUdNgdZBfvsDHW0wYosYFV3c7aKgEVcbonetZXsHv7jRTTX+oY5nDYT4W6B1oUpMNOg==}
@@ -8013,6 +8082,9 @@ packages:
   space-separated-tokens@2.0.2:
     resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==}
 
+  spark-md5@3.0.2:
+    resolution: {integrity: sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==}
+
   spdx-correct@3.2.0:
     resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==}
 
@@ -8952,6 +9024,9 @@ packages:
   vue-style-loader@4.1.3:
     resolution: {integrity: sha512-sFuh0xfbtpRlKfm39ss/ikqs9AbKCoXZBpHeVZ8Tx650o0k0q/YCM7FRvigtxpACezfq6af+a7JeqVTWvncqDg==}
 
+  vue-template-compiler@2.7.16:
+    resolution: {integrity: sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ==}
+
   vue-template-es2015-compiler@1.9.1:
     resolution: {integrity: sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==}
 
@@ -8966,6 +9041,9 @@ packages:
     peerDependencies:
       vue: ^3.2.0
 
+  vue3-sfc-loader@0.9.5:
+    resolution: {integrity: sha512-RuzFftbFjdYV81zKnL1/SsaOhq5DXtxuclU3auo8pyI3uprvyD9ssgvxNQ5otBYnqePGCD8P+qgDlVaRPyMvfg==}
+
   vue@2.7.16:
     resolution: {integrity: sha512-4gCtFXaAA3zYZdTp5s4Hl2sozuySsgz4jy1EnpBHNfpMa9dK1ZCG7viqBPCwXtmgc8nHqUsAu3G4gtmXkkY3Sw==}
     deprecated: Vue 2 has reached EOL and is no longer actively maintained. See https://v2.vuejs.org/eol/ for more details.
@@ -9700,6 +9778,27 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
+  '@babel/plugin-proposal-dynamic-import@7.18.6(@babel/core@7.26.0)':
+    dependencies:
+      '@babel/core': 7.26.0
+      '@babel/helper-plugin-utils': 7.25.9
+      '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.26.0)
+
+  '@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.26.0)':
+    dependencies:
+      '@babel/core': 7.26.0
+      '@babel/helper-plugin-utils': 7.25.9
+      '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.26.0)
+
+  '@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.26.0)':
+    dependencies:
+      '@babel/core': 7.26.0
+      '@babel/helper-plugin-utils': 7.25.9
+      '@babel/helper-skip-transparent-expression-wrappers': 7.25.9
+      '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.26.0)
+    transitivePeerDependencies:
+      - supports-color
+
   '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.26.0)':
     dependencies:
       '@babel/core': 7.26.0
@@ -9734,6 +9833,16 @@ snapshots:
       '@babel/core': 7.26.0
       '@babel/helper-plugin-utils': 7.25.9
 
+  '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.26.0)':
+    dependencies:
+      '@babel/core': 7.26.0
+      '@babel/helper-plugin-utils': 7.25.9
+
+  '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.26.0)':
+    dependencies:
+      '@babel/core': 7.26.0
+      '@babel/helper-plugin-utils': 7.25.9
+
   '@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.26.0)':
     dependencies:
       '@babel/core': 7.26.0
@@ -11782,11 +11891,11 @@ snapshots:
 
   '@vue/cli-overlay@5.0.8': {}
 
-  '@vue/cli-plugin-babel@5.0.8(@vue/cli-service@5.0.8(@vue/compiler-sfc@3.5.13)(esbuild@0.24.2)(lodash@4.17.21)(vue@3.5.13(typescript@5.7.2))(webpack-sources@3.2.3))(core-js@3.39.0)(esbuild@0.24.2)(vue@3.5.13(typescript@5.7.2))':
+  '@vue/cli-plugin-babel@5.0.8(@vue/cli-service@5.0.8(@vue/compiler-sfc@3.5.13)(esbuild@0.24.2)(lodash@4.17.21)(vue-template-compiler@2.7.16)(vue@3.5.13(typescript@5.7.2))(webpack-sources@3.2.3))(core-js@3.39.0)(esbuild@0.24.2)(vue@3.5.13(typescript@5.7.2))':
     dependencies:
       '@babel/core': 7.26.0
       '@vue/babel-preset-app': 5.0.8(@babel/core@7.26.0)(core-js@3.39.0)(vue@3.5.13(typescript@5.7.2))
-      '@vue/cli-service': 5.0.8(@vue/compiler-sfc@3.5.13)(esbuild@0.24.2)(lodash@4.17.21)(vue@3.5.13(typescript@5.7.2))(webpack-sources@3.2.3)
+      '@vue/cli-service': 5.0.8(@vue/compiler-sfc@3.5.13)(esbuild@0.24.2)(lodash@4.17.21)(vue-template-compiler@2.7.16)(vue@3.5.13(typescript@5.7.2))(webpack-sources@3.2.3)
       '@vue/cli-shared-utils': 5.0.8
       babel-loader: 8.4.1(@babel/core@7.26.0)(webpack@5.97.1(esbuild@0.24.2))
       thread-loader: 3.0.4(webpack@5.97.1(esbuild@0.24.2))
@@ -11801,9 +11910,9 @@ snapshots:
       - vue
       - webpack-cli
 
-  '@vue/cli-plugin-eslint@5.0.8(@vue/cli-service@5.0.8(@vue/compiler-sfc@3.5.13)(esbuild@0.24.2)(lodash@4.17.21)(vue@3.5.13(typescript@5.7.2))(webpack-sources@3.2.3))(esbuild@0.24.2)(eslint@9.17.0(jiti@2.4.2))':
+  '@vue/cli-plugin-eslint@5.0.8(@vue/cli-service@5.0.8(@vue/compiler-sfc@3.5.13)(esbuild@0.24.2)(lodash@4.17.21)(vue-template-compiler@2.7.16)(vue@3.5.13(typescript@5.7.2))(webpack-sources@3.2.3))(esbuild@0.24.2)(eslint@9.17.0(jiti@2.4.2))':
     dependencies:
-      '@vue/cli-service': 5.0.8(@vue/compiler-sfc@3.5.13)(esbuild@0.24.2)(lodash@4.17.21)(vue@3.5.13(typescript@5.7.2))(webpack-sources@3.2.3)
+      '@vue/cli-service': 5.0.8(@vue/compiler-sfc@3.5.13)(esbuild@0.24.2)(lodash@4.17.21)(vue-template-compiler@2.7.16)(vue@3.5.13(typescript@5.7.2))(webpack-sources@3.2.3)
       '@vue/cli-shared-utils': 5.0.8
       eslint: 9.17.0(jiti@2.4.2)
       eslint-webpack-plugin: 3.2.0(eslint@9.17.0(jiti@2.4.2))(webpack@5.97.1(esbuild@0.24.2))
@@ -11817,29 +11926,29 @@ snapshots:
       - uglify-js
       - webpack-cli
 
-  '@vue/cli-plugin-router@5.0.8(@vue/cli-service@5.0.8(@vue/compiler-sfc@3.5.13)(esbuild@0.24.2)(lodash@4.17.21)(vue@3.5.13(typescript@5.7.2))(webpack-sources@3.2.3))':
+  '@vue/cli-plugin-router@5.0.8(@vue/cli-service@5.0.8(@vue/compiler-sfc@3.5.13)(esbuild@0.24.2)(lodash@4.17.21)(vue-template-compiler@2.7.16)(vue@3.5.13(typescript@5.7.2))(webpack-sources@3.2.3))':
     dependencies:
-      '@vue/cli-service': 5.0.8(@vue/compiler-sfc@3.5.13)(esbuild@0.24.2)(lodash@4.17.21)(vue@3.5.13(typescript@5.7.2))(webpack-sources@3.2.3)
+      '@vue/cli-service': 5.0.8(@vue/compiler-sfc@3.5.13)(esbuild@0.24.2)(lodash@4.17.21)(vue-template-compiler@2.7.16)(vue@3.5.13(typescript@5.7.2))(webpack-sources@3.2.3)
       '@vue/cli-shared-utils': 5.0.8
     transitivePeerDependencies:
       - encoding
 
-  '@vue/cli-plugin-vuex@5.0.8(@vue/cli-service@5.0.8(@vue/compiler-sfc@3.5.13)(esbuild@0.24.2)(lodash@4.17.21)(vue@3.5.13(typescript@5.7.2))(webpack-sources@3.2.3))':
+  '@vue/cli-plugin-vuex@5.0.8(@vue/cli-service@5.0.8(@vue/compiler-sfc@3.5.13)(esbuild@0.24.2)(lodash@4.17.21)(vue-template-compiler@2.7.16)(vue@3.5.13(typescript@5.7.2))(webpack-sources@3.2.3))':
     dependencies:
-      '@vue/cli-service': 5.0.8(@vue/compiler-sfc@3.5.13)(esbuild@0.24.2)(lodash@4.17.21)(vue@3.5.13(typescript@5.7.2))(webpack-sources@3.2.3)
+      '@vue/cli-service': 5.0.8(@vue/compiler-sfc@3.5.13)(esbuild@0.24.2)(lodash@4.17.21)(vue-template-compiler@2.7.16)(vue@3.5.13(typescript@5.7.2))(webpack-sources@3.2.3)
 
-  '@vue/cli-service@5.0.8(@vue/compiler-sfc@3.5.13)(esbuild@0.24.2)(lodash@4.17.21)(vue@3.5.13(typescript@5.7.2))(webpack-sources@3.2.3)':
+  '@vue/cli-service@5.0.8(@vue/compiler-sfc@3.5.13)(esbuild@0.24.2)(lodash@4.17.21)(vue-template-compiler@2.7.16)(vue@3.5.13(typescript@5.7.2))(webpack-sources@3.2.3)':
     dependencies:
       '@babel/helper-compilation-targets': 7.25.9
       '@soda/friendly-errors-webpack-plugin': 1.8.1(webpack@5.97.1(esbuild@0.24.2))
       '@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.5.13)(esbuild@0.24.2)(lodash@4.17.21)(vue@3.5.13(typescript@5.7.2))(webpack-sources@3.2.3))
-      '@vue/cli-plugin-vuex': 5.0.8(@vue/cli-service@5.0.8(@vue/compiler-sfc@3.5.13)(esbuild@0.24.2)(lodash@4.17.21)(vue@3.5.13(typescript@5.7.2))(webpack-sources@3.2.3))
+      '@vue/cli-plugin-router': 5.0.8(@vue/cli-service@5.0.8(@vue/compiler-sfc@3.5.13)(esbuild@0.24.2)(lodash@4.17.21)(vue-template-compiler@2.7.16)(vue@3.5.13(typescript@5.7.2))(webpack-sources@3.2.3))
+      '@vue/cli-plugin-vuex': 5.0.8(@vue/cli-service@5.0.8(@vue/compiler-sfc@3.5.13)(esbuild@0.24.2)(lodash@4.17.21)(vue-template-compiler@2.7.16)(vue@3.5.13(typescript@5.7.2))(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.5.13)(css-loader@6.11.0(webpack@5.97.1(esbuild@0.24.2)))(lodash@4.17.21)(webpack@5.97.1(esbuild@0.24.2))
+      '@vue/vue-loader-v15': vue-loader@15.11.1(@vue/compiler-sfc@3.5.13)(css-loader@6.11.0(webpack@5.97.1(esbuild@0.24.2)))(lodash@4.17.21)(vue-template-compiler@2.7.16)(webpack@5.97.1(esbuild@0.24.2))
       '@vue/web-component-wrapper': 1.3.0
       acorn: 8.14.0
       acorn-walk: 8.3.4
@@ -11886,6 +11995,7 @@ snapshots:
       webpack-virtual-modules: 0.4.6
       whatwg-fetch: 3.6.20
     optionalDependencies:
+      vue-template-compiler: 2.7.16
       webpack-sources: 3.2.3
     transitivePeerDependencies:
       - '@parcel/css'
@@ -17378,6 +17488,8 @@ snapshots:
 
   space-separated-tokens@2.0.2: {}
 
+  spark-md5@3.0.2: {}
+
   spdx-correct@3.2.0:
     dependencies:
       spdx-expression-parse: 3.0.1
@@ -18404,7 +18516,7 @@ snapshots:
 
   vue-hot-reload-api@2.3.4: {}
 
-  vue-loader@15.11.1(@vue/compiler-sfc@3.5.13)(css-loader@6.11.0(webpack@5.97.1(esbuild@0.24.2)))(lodash@4.17.21)(webpack@5.97.1(esbuild@0.24.2)):
+  vue-loader@15.11.1(@vue/compiler-sfc@3.5.13)(css-loader@6.11.0(webpack@5.97.1(esbuild@0.24.2)))(lodash@4.17.21)(vue-template-compiler@2.7.16)(webpack@5.97.1(esbuild@0.24.2)):
     dependencies:
       '@vue/component-compiler-utils': 3.3.0(lodash@4.17.21)
       css-loader: 6.11.0(webpack@5.97.1(esbuild@0.24.2))
@@ -18415,6 +18527,7 @@ snapshots:
       webpack: 5.97.1(esbuild@0.24.2)
     optionalDependencies:
       '@vue/compiler-sfc': 3.5.13
+      vue-template-compiler: 2.7.16
     transitivePeerDependencies:
       - arc-templates
       - atpl
@@ -18498,6 +18611,11 @@ snapshots:
       hash-sum: 1.0.2
       loader-utils: 1.4.2
 
+  vue-template-compiler@2.7.16:
+    dependencies:
+      de-indent: 1.0.2
+      he: 1.2.0
+
   vue-template-es2015-compiler@1.9.1: {}
 
   vue-tsc@2.2.0(typescript@5.7.2):
@@ -18513,6 +18631,84 @@ snapshots:
       vue-observe-visibility: 2.0.0-alpha.1(vue@3.5.13(typescript@5.7.2))
       vue-resize: 2.0.0-alpha.1(vue@3.5.13(typescript@5.7.2))
 
+  vue3-sfc-loader@0.9.5(lodash@4.17.21)(vue@3.5.13(typescript@5.7.2)):
+    dependencies:
+      '@babel/code-frame': 7.26.2
+      '@babel/core': 7.26.0
+      '@babel/generator': 7.26.3
+      '@babel/parser': 7.26.3
+      '@babel/plugin-proposal-dynamic-import': 7.18.6(@babel/core@7.26.0)
+      '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.26.0)
+      '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.26.0)
+      '@babel/plugin-transform-arrow-functions': 7.25.9(@babel/core@7.26.0)
+      '@babel/plugin-transform-modules-commonjs': 7.26.3(@babel/core@7.26.0)
+      '@babel/plugin-transform-typescript': 7.26.3(@babel/core@7.26.0)
+      '@vue/babel-helper-vue-jsx-merge-props': 1.4.0
+      '@vue/babel-plugin-jsx': 1.2.5(@babel/core@7.26.0)
+      '@vue/babel-preset-jsx': 1.4.0(@babel/core@7.26.0)(vue@3.5.13(typescript@5.7.2))
+      '@vue/compiler-dom': 3.5.13
+      '@vue/compiler-sfc': 3.5.13
+      '@vue/component-compiler-utils': 3.3.0(lodash@4.17.21)
+      '@vue/shared': 3.5.13
+      spark-md5: 3.0.2
+      vue-template-compiler: 2.7.16
+    transitivePeerDependencies:
+      - arc-templates
+      - atpl
+      - babel-core
+      - bracket-template
+      - coffee-script
+      - dot
+      - dust
+      - dustjs-helpers
+      - dustjs-linkedin
+      - eco
+      - ect
+      - ejs
+      - haml-coffee
+      - hamlet
+      - hamljs
+      - handlebars
+      - hogan.js
+      - htmling
+      - jade
+      - jazz
+      - jqtpl
+      - just
+      - liquid-node
+      - liquor
+      - lodash
+      - marko
+      - mote
+      - mustache
+      - nunjucks
+      - plates
+      - pug
+      - qejs
+      - ractive
+      - razor-tmpl
+      - react
+      - react-dom
+      - slm
+      - squirrelly
+      - supports-color
+      - swig
+      - swig-templates
+      - teacup
+      - templayed
+      - then-jade
+      - then-pug
+      - tinyliquid
+      - toffee
+      - twig
+      - twing
+      - underscore
+      - vash
+      - velocityjs
+      - vue
+      - walrus
+      - whiskers
+
   vue@2.7.16:
     dependencies:
       '@vue/compiler-sfc': 2.7.16