diff --git a/package.json b/package.json index d1f492feb..5d52a8475 100644 --- a/package.json +++ b/package.json @@ -66,6 +66,7 @@ "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", + "play:reactivity-tracing": "turbo dev --filter=./packages/playground/reactivity-tracing", "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/applet/package.json b/packages/applet/package.json index cb89843d4..66882c9da 100644 --- a/packages/applet/package.json +++ b/packages/applet/package.json @@ -37,6 +37,7 @@ "perfect-debounce": "catalog:", "shiki": "catalog:", "splitpanes": "catalog:", + "vis-network": "catalog:", "vue-virtual-scroller": "catalog:" }, "devDependencies": { diff --git a/packages/applet/src/composables/reactivity-relationship.ts b/packages/applet/src/composables/reactivity-relationship.ts new file mode 100644 index 000000000..ec2e216d6 --- /dev/null +++ b/packages/applet/src/composables/reactivity-relationship.ts @@ -0,0 +1,89 @@ +import type { ReactivityGraphNode, ReactivityRelationship } from '@vue/devtools-kit' +import type { Edge, Node, Options } from 'vis-network' +import { useDevToolsColorMode } from '@vue/devtools-ui' +import { DataSet } from 'vis-network/standalone' +import { computed } from 'vue' + +export const reactivityType = { + ref: { + color: '#42b883', + }, + computed: { + color: '#3B86CB', + }, + reactive: { + color: '#ffd700', + }, + render: { + color: '#ff4500', + }, + watch: { + color: '#2dd4bf', + }, +} + +const { isDark } = useDevToolsColorMode() + +export const graphOptions = computed(() => ({ + nodes: { + shape: 'dot', + size: 16, + font: { + color: isDark.value ? '#fff' : '#000', + multi: 'html', + }, + }, + interaction: { + hover: true, + }, + physics: { + maxVelocity: 146, + solver: 'forceAtlas2Based', + timestep: 0.35, + stabilization: { + enabled: true, + iterations: 200, + }, + }, + groups: reactivityType, +})) + +export const graphNodes = new DataSet([]) +export const graphEdges = new DataSet([]) + +function normalizeNodeLabel(node: ReactivityGraphNode) { + if (node.type === 'render') { + return `${node.data.instanceName} (component)` + } + if (node.type === 'watch') { + return `watch` + } + return `${node.data.key} (${node.type})` +} + +export function buildReactivityGraph(nodes: ReactivityGraphNode[], relationships: ReactivityRelationship[]) { + graphNodes.clear() + graphEdges.clear() + nodes.forEach((node) => { + graphNodes.add({ + id: node.id, + shape: 'dot', + size: 16, + label: normalizeNodeLabel(node), + group: node.type, + }) + }) + relationships.forEach((relationship) => { + graphEdges.add({ + arrows: { + to: { + enabled: true, + scaleFactor: 0.8, + }, + }, + id: relationship.id, + from: relationship.from, + to: relationship.to, + }) + }) +} diff --git a/packages/applet/src/modules/components/components/ReactivityRelationships.vue b/packages/applet/src/modules/components/components/ReactivityRelationships.vue new file mode 100644 index 000000000..8cfb2c982 --- /dev/null +++ b/packages/applet/src/modules/components/components/ReactivityRelationships.vue @@ -0,0 +1,76 @@ + + + diff --git a/packages/applet/src/modules/components/index.vue b/packages/applet/src/modules/components/index.vue index 929245e52..f4cad635d 100644 --- a/packages/applet/src/modules/components/index.vue +++ b/packages/applet/src/modules/components/index.vue @@ -1,5 +1,5 @@ + + diff --git a/packages/playground/reactivity-tracing/package.json b/packages/playground/reactivity-tracing/package.json new file mode 100644 index 000000000..2f9981803 --- /dev/null +++ b/packages/playground/reactivity-tracing/package.json @@ -0,0 +1,26 @@ +{ + "name": "playground-reactivity-tracing", + "type": "module", + "version": "7.3.2", + "private": true, + "scripts": { + "dev": "vite" + }, + "dependencies": { + "@vueuse/core": "catalog:", + "pinia": "catalog:", + "unplugin-auto-import": "catalog:", + "vue": "https://pkg.pr.new/vue@13274", + "vue-router": "catalog:" + }, + "devDependencies": { + "@vitejs/plugin-vue": "catalog:", + "sass-embedded": "catalog:", + "serve": "catalog:", + "typescript": "catalog:", + "unocss": "catalog:", + "vite": "catalog:", + "vite-plugin-inspect": "catalog:", + "vite-plugin-vue-devtools": "workspace:*" + } +} diff --git a/packages/playground/reactivity-tracing/public/vite.svg b/packages/playground/reactivity-tracing/public/vite.svg new file mode 100644 index 000000000..e7b8dfb1b --- /dev/null +++ b/packages/playground/reactivity-tracing/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/playground/reactivity-tracing/src/App.vue b/packages/playground/reactivity-tracing/src/App.vue new file mode 100644 index 000000000..1f82ead0e --- /dev/null +++ b/packages/playground/reactivity-tracing/src/App.vue @@ -0,0 +1,31 @@ + + + diff --git a/packages/playground/reactivity-tracing/src/components/Number.vue b/packages/playground/reactivity-tracing/src/components/Number.vue new file mode 100644 index 000000000..b8d15cae7 --- /dev/null +++ b/packages/playground/reactivity-tracing/src/components/Number.vue @@ -0,0 +1,14 @@ + + + diff --git a/packages/playground/reactivity-tracing/src/main.ts b/packages/playground/reactivity-tracing/src/main.ts new file mode 100644 index 000000000..2ee8bc91a --- /dev/null +++ b/packages/playground/reactivity-tracing/src/main.ts @@ -0,0 +1,10 @@ +import { createApp } from 'vue' + +import App from './App.vue' + +import './style.css' +import 'uno.css' + +const app = createApp(App) + +app.mount('#app') diff --git a/packages/playground/reactivity-tracing/src/style.css b/packages/playground/reactivity-tracing/src/style.css new file mode 100644 index 000000000..f0a3c1807 --- /dev/null +++ b/packages/playground/reactivity-tracing/src/style.css @@ -0,0 +1,16 @@ +:root { + font-family: Inter, Avenir, Helvetica, Arial, sans-serif; + font-size: 16px; + line-height: 24px; + font-weight: 400; + + color-scheme: light dark; + color: rgba(255, 255, 255, 0.87); + background-color: #242424; + + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + -webkit-text-size-adjust: 100%; +} diff --git a/packages/playground/reactivity-tracing/uno.config.ts b/packages/playground/reactivity-tracing/uno.config.ts new file mode 100644 index 000000000..b1d9fa578 --- /dev/null +++ b/packages/playground/reactivity-tracing/uno.config.ts @@ -0,0 +1,20 @@ +import { + defineConfig, + presetAttributify, + presetTypography, + presetUno, + transformerDirectives, + transformerVariantGroup, +} from 'unocss' + +export default defineConfig({ + presets: [ + presetUno(), + presetAttributify(), + presetTypography(), + ], + transformers: [ + transformerDirectives(), + transformerVariantGroup(), + ], +}) diff --git a/packages/playground/reactivity-tracing/vite.config.ts b/packages/playground/reactivity-tracing/vite.config.ts new file mode 100644 index 000000000..eb96af140 --- /dev/null +++ b/packages/playground/reactivity-tracing/vite.config.ts @@ -0,0 +1,32 @@ +import vue from '@vitejs/plugin-vue' +import Unocss from 'unocss/vite' + +import AutoImport from 'unplugin-auto-import/vite' +import { defineConfig } from 'vite' +import VueDevtools from 'vite-plugin-vue-devtools' + +// https://vitejs.dev/config/ +export default defineConfig({ + css: { + preprocessorOptions: { + scss: { + api: 'modern-compiler', + }, + }, + }, + plugins: [ + vue(), + VueDevtools(), + Unocss(), + AutoImport({ + imports: [ + 'vue', + 'vue-router', + '@vueuse/core', + ], + }), + ], + server: { + port: 3001, + }, +}) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bafe1246e..8b98f7d1a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -817,6 +817,49 @@ importers: specifier: workspace:* version: link:../../vite + packages/playground/reactivity-tracing: + dependencies: + '@vueuse/core': + specifier: 'catalog:' + version: 12.8.2(typescript@5.8.2) + pinia: + specifier: 'catalog:' + version: 3.0.1(typescript@5.8.2)(vue@https://pkg.pr.new/vue@13274(typescript@5.8.2)) + unplugin-auto-import: + specifier: 'catalog:' + version: 19.1.2(@vueuse/core@12.8.2(typescript@5.8.2)) + vue: + specifier: https://pkg.pr.new/vue@13274 + version: https://pkg.pr.new/vue@13274(typescript@5.8.2) + vue-router: + specifier: 'catalog:' + version: 4.5.0(vue@https://pkg.pr.new/vue@13274(typescript@5.8.2)) + devDependencies: + '@vitejs/plugin-vue': + specifier: 'catalog:' + version: 5.2.3(vite@6.2.1(@types/node@22.13.14)(jiti@2.4.2)(sass-embedded@1.86.0)(terser@5.37.0)(tsx@4.19.3)(yaml@2.7.0))(vue@https://pkg.pr.new/vue@13274(typescript@5.8.2)) + sass-embedded: + specifier: 'catalog:' + version: 1.86.0 + serve: + specifier: 'catalog:' + version: 14.2.4 + typescript: + specifier: 'catalog:' + version: 5.8.2 + unocss: + specifier: 'catalog:' + version: 66.0.0(postcss@8.5.3)(vite@6.2.1(@types/node@22.13.14)(jiti@2.4.2)(sass-embedded@1.86.0)(terser@5.37.0)(tsx@4.19.3)(yaml@2.7.0))(vue@https://pkg.pr.new/vue@13274(typescript@5.8.2)) + vite: + specifier: 'catalog:' + version: 6.2.1(@types/node@22.13.14)(jiti@2.4.2)(sass-embedded@1.86.0)(terser@5.37.0)(tsx@4.19.3)(yaml@2.7.0) + vite-plugin-inspect: + specifier: 'catalog:' + version: 0.8.9(rollup@4.39.0)(vite@6.2.1(@types/node@22.13.14)(jiti@2.4.2)(sass-embedded@1.86.0)(terser@5.37.0)(tsx@4.19.3)(yaml@2.7.0)) + vite-plugin-vue-devtools: + specifier: workspace:* + version: link:../../vite + packages/playground/ui: dependencies: '@unocss/reset': @@ -3471,18 +3514,38 @@ packages: '@vue/compiler-core@3.5.13': resolution: {integrity: sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==} + '@vue/compiler-core@https://pkg.pr.new/vuejs/core/@vue/compiler-core@0666601': + resolution: {tarball: https://pkg.pr.new/vuejs/core/@vue/compiler-core@0666601} + version: 3.5.13 + '@vue/compiler-dom@3.5.13': resolution: {integrity: sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==} + '@vue/compiler-dom@https://pkg.pr.new/vuejs/core/@vue/compiler-dom@0666601': + resolution: {tarball: https://pkg.pr.new/vuejs/core/@vue/compiler-dom@0666601} + version: 3.5.13 + '@vue/compiler-sfc@2.7.16': resolution: {integrity: sha512-KWhJ9k5nXuNtygPU7+t1rX6baZeqOYLEforUPjgNDBnLicfHCoi48H87Q8XyLZOrNNsmhuwKqtpDQWjEFe6Ekg==} '@vue/compiler-sfc@3.5.13': resolution: {integrity: sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==} + '@vue/compiler-sfc@https://pkg.pr.new/vuejs/core/@vue/compiler-sfc@0666601': + resolution: {tarball: https://pkg.pr.new/vuejs/core/@vue/compiler-sfc@0666601} + version: 3.5.13 + '@vue/compiler-ssr@3.5.13': resolution: {integrity: sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==} + '@vue/compiler-ssr@https://pkg.pr.new/vuejs/core/@vue/compiler-ssr@0666601': + resolution: {tarball: https://pkg.pr.new/vuejs/core/@vue/compiler-ssr@0666601} + version: 3.5.13 + + '@vue/compiler-vapor@https://pkg.pr.new/vuejs/core/@vue/compiler-vapor@0666601': + resolution: {tarball: https://pkg.pr.new/vuejs/core/@vue/compiler-vapor@0666601} + version: 3.5.13 + '@vue/compiler-vue2@2.7.16': resolution: {integrity: sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==} @@ -3520,20 +3583,48 @@ packages: '@vue/reactivity@3.5.13': resolution: {integrity: sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==} + '@vue/reactivity@https://pkg.pr.new/vuejs/core/@vue/reactivity@0666601': + resolution: {tarball: https://pkg.pr.new/vuejs/core/@vue/reactivity@0666601} + version: 3.5.13 + '@vue/runtime-core@3.5.13': resolution: {integrity: sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==} + '@vue/runtime-core@https://pkg.pr.new/vuejs/core/@vue/runtime-core@0666601': + resolution: {tarball: https://pkg.pr.new/vuejs/core/@vue/runtime-core@0666601} + version: 3.5.13 + '@vue/runtime-dom@3.5.13': resolution: {integrity: sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==} + '@vue/runtime-dom@https://pkg.pr.new/vuejs/core/@vue/runtime-dom@0666601': + resolution: {tarball: https://pkg.pr.new/vuejs/core/@vue/runtime-dom@0666601} + version: 3.5.13 + + '@vue/runtime-vapor@https://pkg.pr.new/vuejs/core/@vue/runtime-vapor@0666601': + resolution: {tarball: https://pkg.pr.new/vuejs/core/@vue/runtime-vapor@0666601} + version: 3.5.13 + peerDependencies: + '@vue/runtime-dom': 3.5.13 + '@vue/server-renderer@3.5.13': resolution: {integrity: sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==} peerDependencies: vue: 3.5.13 + '@vue/server-renderer@https://pkg.pr.new/vuejs/core/@vue/server-renderer@0666601': + resolution: {tarball: https://pkg.pr.new/vuejs/core/@vue/server-renderer@0666601} + version: 3.5.13 + peerDependencies: + vue: 3.5.13 + '@vue/shared@3.5.13': resolution: {integrity: sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==} + '@vue/shared@https://pkg.pr.new/vuejs/core/@vue/shared@0666601': + resolution: {tarball: https://pkg.pr.new/vuejs/core/@vue/shared@0666601} + version: 3.5.13 + '@vue/test-utils@2.4.6': resolution: {integrity: sha512-FMxEjOpYNYiFe0GkaHsnJPXFHxQ6m4t8vI/ElPGpMWxZKpmRvQ33OIrvRXemy6yha03RxhOlQuy+gZMC3CQSow==} @@ -9314,6 +9405,15 @@ packages: typescript: optional: true + vue@https://pkg.pr.new/vue@13274: + resolution: {tarball: https://pkg.pr.new/vue@13274} + version: 3.5.13 + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + vuex@4.1.0: resolution: {integrity: sha512-hmV6UerDrPcgbSy9ORAtNXDr9M4wlNP4pEFKye4ujJF8oqgFFuxDCdOLS3eNoRTtq5O3hoBDh9Doj1bQMYHRbQ==} peerDependencies: @@ -11893,6 +11993,16 @@ snapshots: transitivePeerDependencies: - vue + '@unocss/astro@66.0.0(vite@6.2.1(@types/node@22.13.14)(jiti@2.4.2)(sass-embedded@1.86.0)(terser@5.37.0)(tsx@4.19.3)(yaml@2.7.0))(vue@https://pkg.pr.new/vue@13274(typescript@5.8.2))': + dependencies: + '@unocss/core': 66.0.0 + '@unocss/reset': 66.0.0 + '@unocss/vite': 66.0.0(vite@6.2.1(@types/node@22.13.14)(jiti@2.4.2)(sass-embedded@1.86.0)(terser@5.37.0)(tsx@4.19.3)(yaml@2.7.0))(vue@https://pkg.pr.new/vue@13274(typescript@5.8.2)) + optionalDependencies: + vite: 6.2.1(@types/node@22.13.14)(jiti@2.4.2)(sass-embedded@1.86.0)(terser@5.37.0)(tsx@4.19.3)(yaml@2.7.0) + transitivePeerDependencies: + - vue + '@unocss/astro@66.0.0(vite@6.2.6(@types/node@22.13.14)(jiti@2.4.2)(sass-embedded@1.86.0)(terser@5.37.0)(tsx@4.19.3)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.2))': dependencies: '@unocss/core': 66.0.0 @@ -11954,6 +12064,17 @@ snapshots: transitivePeerDependencies: - vue + '@unocss/inspector@66.0.0(vue@https://pkg.pr.new/vue@13274(typescript@5.8.2))': + dependencies: + '@unocss/core': 66.0.0 + '@unocss/rule-utils': 66.0.0 + colorette: 2.0.20 + gzip-size: 6.0.0 + sirv: 3.0.1 + vue-flow-layout: 0.1.1(vue@https://pkg.pr.new/vue@13274(typescript@5.8.2)) + transitivePeerDependencies: + - vue + '@unocss/postcss@66.0.0(postcss@8.5.3)': dependencies: '@unocss/config': 66.0.0 @@ -12051,6 +12172,20 @@ snapshots: transitivePeerDependencies: - vue + '@unocss/vite@66.0.0(vite@6.2.1(@types/node@22.13.14)(jiti@2.4.2)(sass-embedded@1.86.0)(terser@5.37.0)(tsx@4.19.3)(yaml@2.7.0))(vue@https://pkg.pr.new/vue@13274(typescript@5.8.2))': + dependencies: + '@ampproject/remapping': 2.3.0 + '@unocss/config': 66.0.0 + '@unocss/core': 66.0.0 + '@unocss/inspector': 66.0.0(vue@https://pkg.pr.new/vue@13274(typescript@5.8.2)) + chokidar: 3.6.0 + magic-string: 0.30.17 + tinyglobby: 0.2.12 + unplugin-utils: 0.2.4 + vite: 6.2.1(@types/node@22.13.14)(jiti@2.4.2)(sass-embedded@1.86.0)(terser@5.37.0)(tsx@4.19.3)(yaml@2.7.0) + transitivePeerDependencies: + - vue + '@unocss/vite@66.0.0(vite@6.2.6(@types/node@22.13.14)(jiti@2.4.2)(sass-embedded@1.86.0)(terser@5.37.0)(tsx@4.19.3)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.2))': dependencies: '@ampproject/remapping': 2.3.0 @@ -12132,6 +12267,11 @@ snapshots: vite: 6.2.1(@types/node@22.13.14)(jiti@2.4.2)(sass-embedded@1.86.0)(terser@5.37.0)(tsx@4.19.3)(yaml@2.7.0) vue: 3.5.13(typescript@5.8.2) + '@vitejs/plugin-vue@5.2.3(vite@6.2.1(@types/node@22.13.14)(jiti@2.4.2)(sass-embedded@1.86.0)(terser@5.37.0)(tsx@4.19.3)(yaml@2.7.0))(vue@https://pkg.pr.new/vue@13274(typescript@5.8.2))': + dependencies: + vite: 6.2.1(@types/node@22.13.14)(jiti@2.4.2)(sass-embedded@1.86.0)(terser@5.37.0)(tsx@4.19.3)(yaml@2.7.0) + vue: https://pkg.pr.new/vue@13274(typescript@5.8.2) + '@vitejs/plugin-vue@5.2.3(vite@6.2.6(@types/node@22.13.14)(jiti@2.4.2)(sass-embedded@1.86.0)(terser@5.37.0)(tsx@4.19.3)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.2))': dependencies: vite: 6.2.6(@types/node@22.13.14)(jiti@2.4.2)(sass-embedded@1.86.0)(terser@5.37.0)(tsx@4.19.3)(yaml@2.7.0) @@ -12524,11 +12664,24 @@ snapshots: estree-walker: 2.0.2 source-map-js: 1.2.1 + '@vue/compiler-core@https://pkg.pr.new/vuejs/core/@vue/compiler-core@0666601': + dependencies: + '@babel/parser': 7.27.0 + '@vue/shared': https://pkg.pr.new/vuejs/core/@vue/shared@0666601 + entities: 4.5.0 + estree-walker: 2.0.2 + source-map-js: 1.2.1 + '@vue/compiler-dom@3.5.13': dependencies: '@vue/compiler-core': 3.5.13 '@vue/shared': 3.5.13 + '@vue/compiler-dom@https://pkg.pr.new/vuejs/core/@vue/compiler-dom@0666601': + dependencies: + '@vue/compiler-core': https://pkg.pr.new/vuejs/core/@vue/compiler-core@0666601 + '@vue/shared': https://pkg.pr.new/vuejs/core/@vue/shared@0666601 + '@vue/compiler-sfc@2.7.16': dependencies: '@babel/parser': 7.27.0 @@ -12549,11 +12702,35 @@ snapshots: postcss: 8.5.3 source-map-js: 1.2.1 + '@vue/compiler-sfc@https://pkg.pr.new/vuejs/core/@vue/compiler-sfc@0666601': + dependencies: + '@babel/parser': 7.27.0 + '@vue/compiler-core': https://pkg.pr.new/vuejs/core/@vue/compiler-core@0666601 + '@vue/compiler-dom': https://pkg.pr.new/vuejs/core/@vue/compiler-dom@0666601 + '@vue/compiler-ssr': https://pkg.pr.new/vuejs/core/@vue/compiler-ssr@0666601 + '@vue/compiler-vapor': https://pkg.pr.new/vuejs/core/@vue/compiler-vapor@0666601 + '@vue/shared': https://pkg.pr.new/vuejs/core/@vue/shared@0666601 + estree-walker: 2.0.2 + magic-string: 0.30.17 + postcss: 8.5.3 + source-map-js: 1.2.1 + '@vue/compiler-ssr@3.5.13': dependencies: '@vue/compiler-dom': 3.5.13 '@vue/shared': 3.5.13 + '@vue/compiler-ssr@https://pkg.pr.new/vuejs/core/@vue/compiler-ssr@0666601': + dependencies: + '@vue/compiler-dom': https://pkg.pr.new/vuejs/core/@vue/compiler-dom@0666601 + '@vue/shared': https://pkg.pr.new/vuejs/core/@vue/shared@0666601 + + '@vue/compiler-vapor@https://pkg.pr.new/vuejs/core/@vue/compiler-vapor@0666601': + dependencies: + '@vue/compiler-dom': https://pkg.pr.new/vuejs/core/@vue/compiler-dom@0666601 + '@vue/shared': https://pkg.pr.new/vuejs/core/@vue/shared@0666601 + source-map-js: 1.2.1 + '@vue/compiler-vue2@2.7.16': dependencies: de-indent: 1.0.2 @@ -12676,11 +12853,20 @@ snapshots: dependencies: '@vue/shared': 3.5.13 + '@vue/reactivity@https://pkg.pr.new/vuejs/core/@vue/reactivity@0666601': + dependencies: + '@vue/shared': https://pkg.pr.new/vuejs/core/@vue/shared@0666601 + '@vue/runtime-core@3.5.13': dependencies: '@vue/reactivity': 3.5.13 '@vue/shared': 3.5.13 + '@vue/runtime-core@https://pkg.pr.new/vuejs/core/@vue/runtime-core@0666601': + dependencies: + '@vue/reactivity': https://pkg.pr.new/vuejs/core/@vue/reactivity@0666601 + '@vue/shared': https://pkg.pr.new/vuejs/core/@vue/shared@0666601 + '@vue/runtime-dom@3.5.13': dependencies: '@vue/reactivity': 3.5.13 @@ -12688,14 +12874,35 @@ snapshots: '@vue/shared': 3.5.13 csstype: 3.1.3 + '@vue/runtime-dom@https://pkg.pr.new/vuejs/core/@vue/runtime-dom@0666601': + dependencies: + '@vue/reactivity': https://pkg.pr.new/vuejs/core/@vue/reactivity@0666601 + '@vue/runtime-core': https://pkg.pr.new/vuejs/core/@vue/runtime-core@0666601 + '@vue/shared': https://pkg.pr.new/vuejs/core/@vue/shared@0666601 + csstype: 3.1.3 + + '@vue/runtime-vapor@https://pkg.pr.new/vuejs/core/@vue/runtime-vapor@0666601(@vue/runtime-dom@https://pkg.pr.new/vuejs/core/@vue/runtime-dom@0666601)': + dependencies: + '@vue/reactivity': https://pkg.pr.new/vuejs/core/@vue/reactivity@0666601 + '@vue/runtime-dom': https://pkg.pr.new/vuejs/core/@vue/runtime-dom@0666601 + '@vue/shared': https://pkg.pr.new/vuejs/core/@vue/shared@0666601 + '@vue/server-renderer@3.5.13(vue@3.5.13(typescript@5.8.2))': dependencies: '@vue/compiler-ssr': 3.5.13 '@vue/shared': 3.5.13 vue: 3.5.13(typescript@5.8.2) + '@vue/server-renderer@https://pkg.pr.new/vuejs/core/@vue/server-renderer@0666601(vue@https://pkg.pr.new/vue@13274(typescript@5.8.2))': + dependencies: + '@vue/compiler-ssr': https://pkg.pr.new/vuejs/core/@vue/compiler-ssr@0666601 + '@vue/shared': https://pkg.pr.new/vuejs/core/@vue/shared@0666601 + vue: https://pkg.pr.new/vue@13274(typescript@5.8.2) + '@vue/shared@3.5.13': {} + '@vue/shared@https://pkg.pr.new/vuejs/core/@vue/shared@0666601': {} + '@vue/test-utils@2.4.6': dependencies: js-beautify: 1.15.1 @@ -16710,6 +16917,13 @@ snapshots: optionalDependencies: typescript: 5.8.2 + pinia@3.0.1(typescript@5.8.2)(vue@https://pkg.pr.new/vue@13274(typescript@5.8.2)): + dependencies: + '@vue/devtools-api': 7.7.2 + vue: https://pkg.pr.new/vue@13274(typescript@5.8.2) + optionalDependencies: + typescript: 5.8.2 + pirates@4.0.6: {} pkg-dir@4.2.0: @@ -18515,6 +18729,33 @@ snapshots: - supports-color - vue + unocss@66.0.0(postcss@8.5.3)(vite@6.2.1(@types/node@22.13.14)(jiti@2.4.2)(sass-embedded@1.86.0)(terser@5.37.0)(tsx@4.19.3)(yaml@2.7.0))(vue@https://pkg.pr.new/vue@13274(typescript@5.8.2)): + dependencies: + '@unocss/astro': 66.0.0(vite@6.2.1(@types/node@22.13.14)(jiti@2.4.2)(sass-embedded@1.86.0)(terser@5.37.0)(tsx@4.19.3)(yaml@2.7.0))(vue@https://pkg.pr.new/vue@13274(typescript@5.8.2)) + '@unocss/cli': 66.0.0 + '@unocss/core': 66.0.0 + '@unocss/postcss': 66.0.0(postcss@8.5.3) + '@unocss/preset-attributify': 66.0.0 + '@unocss/preset-icons': 66.0.0 + '@unocss/preset-mini': 66.0.0 + '@unocss/preset-tagify': 66.0.0 + '@unocss/preset-typography': 66.0.0 + '@unocss/preset-uno': 66.0.0 + '@unocss/preset-web-fonts': 66.0.0 + '@unocss/preset-wind': 66.0.0 + '@unocss/preset-wind3': 66.0.0 + '@unocss/transformer-attributify-jsx': 66.0.0 + '@unocss/transformer-compile-class': 66.0.0 + '@unocss/transformer-directives': 66.0.0 + '@unocss/transformer-variant-group': 66.0.0 + '@unocss/vite': 66.0.0(vite@6.2.1(@types/node@22.13.14)(jiti@2.4.2)(sass-embedded@1.86.0)(terser@5.37.0)(tsx@4.19.3)(yaml@2.7.0))(vue@https://pkg.pr.new/vue@13274(typescript@5.8.2)) + optionalDependencies: + vite: 6.2.1(@types/node@22.13.14)(jiti@2.4.2)(sass-embedded@1.86.0)(terser@5.37.0)(tsx@4.19.3)(yaml@2.7.0) + transitivePeerDependencies: + - postcss + - supports-color + - vue + unocss@66.0.0(postcss@8.5.3)(vite@6.2.6(@types/node@22.13.14)(jiti@2.4.2)(sass-embedded@1.86.0)(terser@5.37.0)(tsx@4.19.3)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.2)): dependencies: '@unocss/astro': 66.0.0(vite@6.2.6(@types/node@22.13.14)(jiti@2.4.2)(sass-embedded@1.86.0)(terser@5.37.0)(tsx@4.19.3)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.2)) @@ -18997,6 +19238,10 @@ snapshots: dependencies: vue: 3.5.13(typescript@5.8.2) + vue-flow-layout@0.1.1(vue@https://pkg.pr.new/vue@13274(typescript@5.8.2)): + dependencies: + vue: https://pkg.pr.new/vue@13274(typescript@5.8.2) + 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.25.2)))(lodash@4.17.21)(vue-template-compiler@2.7.16)(webpack@5.97.1(esbuild@0.25.2)): @@ -19089,6 +19334,11 @@ snapshots: '@vue/devtools-api': 6.6.4 vue: 3.5.13(typescript@5.8.2) + vue-router@4.5.0(vue@https://pkg.pr.new/vue@13274(typescript@5.8.2)): + dependencies: + '@vue/devtools-api': 6.6.4 + vue: https://pkg.pr.new/vue@13274(typescript@5.8.2) + vue-style-loader@4.1.3: dependencies: hash-sum: 1.0.2 @@ -19207,6 +19457,17 @@ snapshots: optionalDependencies: typescript: 5.8.2 + vue@https://pkg.pr.new/vue@13274(typescript@5.8.2): + dependencies: + '@vue/compiler-dom': https://pkg.pr.new/vuejs/core/@vue/compiler-dom@0666601 + '@vue/compiler-sfc': https://pkg.pr.new/vuejs/core/@vue/compiler-sfc@0666601 + '@vue/runtime-dom': https://pkg.pr.new/vuejs/core/@vue/runtime-dom@0666601 + '@vue/runtime-vapor': https://pkg.pr.new/vuejs/core/@vue/runtime-vapor@0666601(@vue/runtime-dom@https://pkg.pr.new/vuejs/core/@vue/runtime-dom@0666601) + '@vue/server-renderer': https://pkg.pr.new/vuejs/core/@vue/server-renderer@0666601(vue@https://pkg.pr.new/vue@13274(typescript@5.8.2)) + '@vue/shared': https://pkg.pr.new/vuejs/core/@vue/shared@0666601 + optionalDependencies: + typescript: 5.8.2 + vuex@4.1.0(vue@3.5.13(typescript@5.8.2)): dependencies: '@vue/devtools-api': 6.6.4 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 061433e5b..319fc0a8a 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -24,6 +24,7 @@ catalog: typescript: ^5.8.2 unocss: ^66.0.0 unplugin-auto-import: ^19.1.2 + vis-network: ^9.1.9 vite: ^6.2.1 vite-hot-client: ^2.0.4 vite-plugin-dts: ^4.5.3