Compare commits

...

2 Commits

Author SHA1 Message Date
0be8ff5d80 修复进本类型错误 2025-08-22 09:11:44 +08:00
80406ea9fc DP3创建基本页面,问题多多 2025-08-22 08:52:02 +08:00
16 changed files with 13569 additions and 13018 deletions

View File

@@ -0,0 +1,10 @@
import type { NodeDefinition } from "~/types/flow";
export default {
type: "delay",
label: "延时",
category: "控制",
inputs: [{ id: "in", label: "In", type: "flow" }],
outputs: [{ id: "out", label: "Out", type: "flow" }],
defaultConfig: { milliseconds: 1000 }
} as NodeDefinition;

View File

@@ -0,0 +1,81 @@
<template>
<div class="delay-node" :style="{ borderColor: node.data?.color || '#ff6b35' }">
<div class="node-header">
<svg class="node-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor">
<circle cx="12" cy="12" r="10" stroke-width="2" />
<path d="M12 6v6l4 2" stroke-width="2" stroke-linecap="round" />
</svg>
<span class="node-title">延时</span>
</div>
<div class="node-content">
<span class="delay-time">{{ node.data?.config?.milliseconds || 1000 }}ms</span>
</div>
<Handle
id="in"
type="target"
:position="Position.Top"
class="handle"
/>
<Handle
id="out"
type="source"
:position="Position.Bottom"
class="handle"
/>
</div>
</template>
<script setup lang="ts">
import { Handle, Position } from "@vue-flow/core";
const _props = defineProps<{
node: any
}>();
</script>
<style scoped>
.delay-node {
background: white;
border: 2px solid #ff6b35;
border-radius: 8px;
padding: 12px;
min-width: 120px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
}
.node-header {
display: flex;
align-items: center;
gap: 6px;
margin-bottom: 8px;
}
.node-icon {
width: 16px;
height: 16px;
color: #ff6b35;
}
.node-title {
font-weight: 600;
font-size: 14px;
color: #333;
}
.node-content {
text-align: center;
}
.delay-time {
font-size: 12px;
color: #666;
}
.handle {
width: 8px;
height: 8px;
background: #fff;
border: 2px solid #ff6b35;
border-radius: 50%;
}
</style>

View File

@@ -0,0 +1,10 @@
import type { NodeDefinition } from "~/types/flow";
export default {
type: "log",
label: "日志",
category: "工具",
inputs: [{ id: "in", label: "In", type: "flow" }],
outputs: [{ id: "out", label: "Out", type: "flow" }],
defaultConfig: { message: "Hello World" }
} as NodeDefinition;

View File

@@ -0,0 +1,84 @@
<template>
<div class="log-node" :style="{ borderColor: node.data?.color || '#10b981' }">
<div class="node-header">
<svg class="node-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor">
<path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z" stroke-width="2" />
<path d="M14 2v6h6" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" />
<path d="M16 13H8" stroke-width="2" stroke-linecap="round" />
<path d="M16 17H8" stroke-width="2" stroke-linecap="round" />
<path d="M10 9H8" stroke-width="2" stroke-linecap="round" />
</svg>
<span class="node-title">日志</span>
</div>
<div class="node-content">
<span class="log-message">{{ node.data?.config?.message || '输出日志' }}</span>
</div>
<Handle
id="in"
type="target"
:position="Position.Top"
class="handle"
/>
<Handle
id="out"
type="source"
:position="Position.Bottom"
class="handle"
/>
</div>
</template>
<script setup lang="ts">
import { Handle, Position } from "@vue-flow/core";
const _props = defineProps<{
node: any
}>();
</script>
<style scoped>
.log-node {
background: white;
border: 2px solid #10b981;
border-radius: 8px;
padding: 12px;
min-width: 120px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
}
.node-header {
display: flex;
align-items: center;
gap: 6px;
margin-bottom: 8px;
}
.node-icon {
width: 16px;
height: 16px;
color: #10b981;
}
.node-title {
font-weight: 600;
font-size: 14px;
color: #333;
}
.node-content {
text-align: center;
}
.log-message {
font-size: 12px;
color: #666;
}
.handle {
width: 8px;
height: 8px;
background: #fff;
border: 2px solid #10b981;
border-radius: 50%;
}
</style>

View File

@@ -0,0 +1,20 @@
import type { NodeDefinition } from "~/types/flow";
const nodeModules = import.meta.glob("./*/index.ts", { eager: true });
export const flowNodes: NodeDefinition[] = Object.values(nodeModules).map(
(module: any) => module.default
);
export const getNodeDefinitionsByCategory = () => {
const categories: Record<string, NodeDefinition[]> = {};
flowNodes.forEach((node) => {
if (!categories[node.category]) {
categories[node.category] = [];
}
categories[node.category].push(node);
});
return categories;
};

5
app/layouts/flow.vue Normal file
View File

@@ -0,0 +1,5 @@
<template>
<div>
<slot />
</div>
</template>

View File

@@ -44,9 +44,9 @@
<div class="flex justify-center"> <div class="flex justify-center">
<UButton <UButton
:to="app.repo" to="/workflows/flow"
> >
Star on GitHub 进入工作流
</UButton> </UButton>
</div> </div>
</div> </div>

View File

@@ -0,0 +1,154 @@
<template>
<div class="h-screen flex flex-col">
<!-- Toolbar -->
<div class="h-12 bg-gray-100 border-b border-gray-200 flex items-center px-4 gap-3">
<UButton @click="saveFlow">
保存
</UButton>
<UButton @click="importFlow">
导入
</UButton>
<UButton color="primary" @click="executeNodes">
执行
</UButton>
</div>
<div class="flex flex-1 overflow-hidden">
<!-- Node Panel -->
<div class="w-80 bg-white border-r border-gray-200 overflow-y-auto p-4">
<h2 class="text-lg font-semibold mb-4">
节点库
</h2>
<div v-for="(nodes, category) in nodeCategories" :key="category" class="mb-6">
<h3 class="text-sm font-medium text-gray-700 mb-2">
{{ category }}
</h3>
<div class="space-y-2">
<div
v-for="node in nodes"
:key="node.type"
class="p-3 border border-gray-200 rounded-md cursor-move bg-white hover:bg-gray-50 transition-colors"
draggable="true"
@dragstart="(e) => onDragStart(e, node)"
>
<div class="flex items-center gap-2">
<div class="w-4 h-4 bg-blue-100 rounded" />
<span class="text-sm font-medium">{{ node.label }}</span>
</div>
<div class="text-xs text-gray-500 mt-1">
{{ node.inputs.length }}输入 / {{ node.outputs.length }}输出
</div>
</div>
</div>
</div>
</div>
<!-- Flow Canvas -->
<div class="flex-1 relative">
<VueFlow
v-model:nodes="nodes"
v-model:edges="edges"
:node-types="nodeTypes"
:fit-view-on-init="true"
@dragover.prevent
@drop="onDrop"
@node-double-click="(event: NodeMouseEvent) => onNodeDoubleClick(event)"
>
<Background />
<Controls />
<MiniMap />
</VueFlow>
</div>
</div>
</div>
</template>
<script setup lang="ts">
import type { NodeMouseEvent } from "@vue-flow/core";
import type { Component } from "vue";
import type { FlowNode } from "~/types/flow";
import { Background } from "@vue-flow/background";
import { Controls } from "@vue-flow/controls";
import { useVueFlow, VueFlow } from "@vue-flow/core";
import { MiniMap } from "@vue-flow/minimap";
import { v4 as uuidv4 } from "uuid";
import { computed, defineAsyncComponent, ref } from "vue";
import { getNodeDefinitionsByCategory } from "~/components/Flow/Nodes";
definePageMeta({
layout: "flow"
});
const nodeCategories = ref(getNodeDefinitionsByCategory());
const { nodes, edges, addNodes, project } = useVueFlow();
// 注册节点类型
const nodeTypes: Record<string, Component> = {
delay: defineAsyncComponent(() => import("~/components/Flow/Nodes/DelayNode.vue")),
log: defineAsyncComponent(() => import("~/components/Flow/Nodes/LogNode.vue"))
};
const allNodeDefinitions = computed(() => {
const categories = nodeCategories.value;
return Object.values(categories).flat();
});
const onDragStart = (event: DragEvent, node: any) => {
event.dataTransfer?.setData("application/vueflow", node.type);
event.dataTransfer!.effectAllowed = "move";
};
const onDrop = (event: DragEvent) => {
const nodeType = event.dataTransfer?.getData("application/vueflow");
if (!nodeType) return;
const position = project({ x: event.clientX, y: event.clientY });
const nodeDefinition = allNodeDefinitions.value.find((n) => n.type === nodeType);
if (!nodeDefinition) return;
const newNode: FlowNode = {
id: uuidv4(),
type: nodeType,
position,
data: {
config: { ...nodeDefinition.defaultConfig }
}
};
addNodes([newNode]);
};
const onNodeDoubleClick = (event: NodeMouseEvent) => {
console.log("编辑节点:", event.node);
// 这里可以打开右侧抽屉或弹窗编辑节点配置
};
const saveFlow = () => {
const flowData = {
nodes: nodes.value,
edges: edges.value
};
console.log("保存", flowData);
};
const importFlow = () => {
console.log("导入");
// 这里可以实现文件选择器读取 JSON 并还原画布
};
const executeNodes = () => {
const flowData = {
nodes: nodes.value,
edges: edges.value
};
console.log("执行", flowData);
};
</script>
<style>
@import '@vue-flow/core/dist/style.css';
@import '@vue-flow/core/dist/theme-default.css';
</style>

32
app/types/flow.ts Normal file
View File

@@ -0,0 +1,32 @@
export interface NodeDefinition {
type: string
label: string
category: string
inputs: PortDefinition[]
outputs: PortDefinition[]
defaultConfig: Record<string, any>
}
export interface PortDefinition {
id: string
label: string
type: "flow" | "data"
}
export interface FlowNode {
id: string
type: string
position: { x: number, y: number }
data: {
config: Record<string, any>
color?: string
}
}
export interface FlowEdge {
id: string
source: string
target: string
sourceHandle?: string
targetHandle?: string
}

View File

@@ -30,7 +30,13 @@
"@tauri-apps/plugin-os": "^2.3.0", "@tauri-apps/plugin-os": "^2.3.0",
"@tauri-apps/plugin-shell": "^2.3.0", "@tauri-apps/plugin-shell": "^2.3.0",
"@tauri-apps/plugin-store": "^2.3.0", "@tauri-apps/plugin-store": "^2.3.0",
"@types/uuid": "^10.0.0",
"@vue-flow/background": "^1.3.2",
"@vue-flow/controls": "^1.1.3",
"@vue-flow/core": "^1.46.0",
"@vue-flow/minimap": "^1.5.4",
"nuxt": "^4.0.0", "nuxt": "^4.0.0",
"uuid": "^11.1.0",
"vue": "^3.5.17", "vue": "^3.5.17",
"vue-router": "^4.5.1", "vue-router": "^4.5.1",
"zod": "^4.0.5" "zod": "^4.0.5"

156
pnpm-lock.yaml generated
View File

@@ -32,9 +32,27 @@ importers:
'@tauri-apps/plugin-store': '@tauri-apps/plugin-store':
specifier: ^2.3.0 specifier: ^2.3.0
version: 2.3.0 version: 2.3.0
'@types/uuid':
specifier: ^10.0.0
version: 10.0.0
'@vue-flow/background':
specifier: ^1.3.2
version: 1.3.2(@vue-flow/core@1.46.0(vue@3.5.17(tslite@5.7.3)))(vue@3.5.17(tslite@5.7.3))
'@vue-flow/controls':
specifier: ^1.1.3
version: 1.1.3(@vue-flow/core@1.46.0(vue@3.5.17(tslite@5.7.3)))(vue@3.5.17(tslite@5.7.3))
'@vue-flow/core':
specifier: ^1.46.0
version: 1.46.0(vue@3.5.17(tslite@5.7.3))
'@vue-flow/minimap':
specifier: ^1.5.4
version: 1.5.4(@vue-flow/core@1.46.0(vue@3.5.17(tslite@5.7.3)))(vue@3.5.17(tslite@5.7.3))
nuxt: nuxt:
specifier: ^4.0.0 specifier: ^4.0.0
version: 4.0.0(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.1)(@types/node@24.0.13)(@vue/compiler-sfc@3.5.17)(db0@0.3.2)(eslint@9.31.0(jiti@2.4.2))(ioredis@5.6.1)(lightningcss@1.30.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.45.0)(terser@5.43.1)(tslite@5.7.3)(vite@7.0.4(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(yaml@2.8.0) version: 4.0.0(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.1)(@types/node@24.0.13)(@vue/compiler-sfc@3.5.17)(db0@0.3.2)(eslint@9.31.0(jiti@2.4.2))(ioredis@5.6.1)(lightningcss@1.30.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.45.0)(terser@5.43.1)(tslite@5.7.3)(vite@7.0.4(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.0))(yaml@2.8.0)
uuid:
specifier: ^11.1.0
version: 11.1.0
vue: vue:
specifier: ^3.5.17 specifier: ^3.5.17
version: 3.5.17(tslite@5.7.3) version: 3.5.17(tslite@5.7.3)
@@ -1880,6 +1898,9 @@ packages:
'@types/unist@3.0.3': '@types/unist@3.0.3':
resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==}
'@types/uuid@10.0.0':
resolution: {integrity: sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==}
'@types/web-bluetooth@0.0.20': '@types/web-bluetooth@0.0.20':
resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==} resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==}
@@ -2048,6 +2069,29 @@ packages:
vitest: vitest:
optional: true optional: true
'@vue-flow/background@1.3.2':
resolution: {integrity: sha512-eJPhDcLj1wEo45bBoqTXw1uhl0yK2RaQGnEINqvvBsAFKh/camHJd5NPmOdS1w+M9lggc9igUewxaEd3iCQX2w==}
peerDependencies:
'@vue-flow/core': ^1.23.0
vue: ^3.3.0
'@vue-flow/controls@1.1.3':
resolution: {integrity: sha512-XCf+G+jCvaWURdFlZmOjifZGw3XMhN5hHlfMGkWh9xot+9nH9gdTZtn+ldIJKtarg3B21iyHU8JjKDhYcB6JMw==}
peerDependencies:
'@vue-flow/core': ^1.23.0
vue: ^3.3.0
'@vue-flow/core@1.46.0':
resolution: {integrity: sha512-vNIeFcbHuDgl1PSjABL/p+PHlTZYwt1NfZ+htjYlZtqzPfCSkP9URk/TY9ahORBWd/UvgxaNY+AQQoV2O49rtA==}
peerDependencies:
vue: ^3.3.0
'@vue-flow/minimap@1.5.4':
resolution: {integrity: sha512-l4C+XTAXnRxsRpUdN7cAVFBennC1sVRzq4bDSpVK+ag7tdMczAnhFYGgbLkUw3v3sY6gokyWwMl8CDonp8eB2g==}
peerDependencies:
'@vue-flow/core': ^1.23.0
vue: ^3.3.0
'@vue-macros/common@3.0.0-beta.15': '@vue-macros/common@3.0.0-beta.15':
resolution: {integrity: sha512-DMgq/rIh1H20WYNWU7krIbEfJRYDDhy7ix64GlT4AVUJZZWCZ5pxiYVJR3A3GmWQPkn7Pg7i3oIiGqu4JGC65w==} resolution: {integrity: sha512-DMgq/rIh1H20WYNWU7krIbEfJRYDDhy7ix64GlT4AVUJZZWCZ5pxiYVJR3A3GmWQPkn7Pg7i3oIiGqu4JGC65w==}
engines: {node: '>=20.18.0'} engines: {node: '>=20.18.0'}
@@ -2698,6 +2742,44 @@ packages:
csstype@3.1.3: csstype@3.1.3:
resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
d3-color@3.1.0:
resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==}
engines: {node: '>=12'}
d3-dispatch@3.0.1:
resolution: {integrity: sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==}
engines: {node: '>=12'}
d3-drag@3.0.0:
resolution: {integrity: sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==}
engines: {node: '>=12'}
d3-ease@3.0.1:
resolution: {integrity: sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==}
engines: {node: '>=12'}
d3-interpolate@3.0.1:
resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==}
engines: {node: '>=12'}
d3-selection@3.0.0:
resolution: {integrity: sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==}
engines: {node: '>=12'}
d3-timer@3.0.1:
resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==}
engines: {node: '>=12'}
d3-transition@3.0.1:
resolution: {integrity: sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==}
engines: {node: '>=12'}
peerDependencies:
d3-selection: 2 - 3
d3-zoom@3.0.0:
resolution: {integrity: sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==}
engines: {node: '>=12'}
data-uri-to-buffer@4.0.1: data-uri-to-buffer@4.0.1:
resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==}
engines: {node: '>= 12'} engines: {node: '>= 12'}
@@ -5794,7 +5876,7 @@ snapshots:
'@eslint-community/eslint-plugin-eslint-comments': 4.5.0(eslint@9.31.0(jiti@2.4.2)) '@eslint-community/eslint-plugin-eslint-comments': 4.5.0(eslint@9.31.0(jiti@2.4.2))
'@eslint/markdown': 7.0.0 '@eslint/markdown': 7.0.0
'@stylistic/eslint-plugin': 5.1.0(eslint@9.31.0(jiti@2.4.2)) '@stylistic/eslint-plugin': 5.1.0(eslint@9.31.0(jiti@2.4.2))
'@typescript-eslint/eslint-plugin': 8.37.0(@typescript-eslint/parser@8.36.0(eslint@9.31.0(jiti@2.4.2))(tslite@5.7.3))(eslint@9.31.0(jiti@2.4.2))(tslite@5.7.3) '@typescript-eslint/eslint-plugin': 8.37.0(@typescript-eslint/parser@8.37.0(eslint@9.31.0(jiti@2.4.2))(tslite@5.7.3))(eslint@9.31.0(jiti@2.4.2))(tslite@5.7.3)
'@typescript-eslint/parser': 8.37.0(eslint@9.31.0(jiti@2.4.2))(tslite@5.7.3) '@typescript-eslint/parser': 8.37.0(eslint@9.31.0(jiti@2.4.2))(tslite@5.7.3)
'@vitest/eslint-plugin': 1.3.4(eslint@9.31.0(jiti@2.4.2))(tslite@5.7.3) '@vitest/eslint-plugin': 1.3.4(eslint@9.31.0(jiti@2.4.2))(tslite@5.7.3)
ansis: 4.1.0 ansis: 4.1.0
@@ -7750,6 +7832,8 @@ snapshots:
'@types/unist@3.0.3': {} '@types/unist@3.0.3': {}
'@types/uuid@10.0.0': {}
'@types/web-bluetooth@0.0.20': {} '@types/web-bluetooth@0.0.20': {}
'@types/web-bluetooth@0.0.21': {} '@types/web-bluetooth@0.0.21': {}
@@ -7776,10 +7860,10 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@typescript-eslint/eslint-plugin@8.37.0(@typescript-eslint/parser@8.36.0(eslint@9.31.0(jiti@2.4.2))(tslite@5.7.3))(eslint@9.31.0(jiti@2.4.2))(tslite@5.7.3)': '@typescript-eslint/eslint-plugin@8.37.0(@typescript-eslint/parser@8.37.0(eslint@9.31.0(jiti@2.4.2))(tslite@5.7.3))(eslint@9.31.0(jiti@2.4.2))(tslite@5.7.3)':
dependencies: dependencies:
'@eslint-community/regexpp': 4.12.1 '@eslint-community/regexpp': 4.12.1
'@typescript-eslint/parser': 8.36.0(eslint@9.31.0(jiti@2.4.2))(tslite@5.7.3) '@typescript-eslint/parser': 8.37.0(eslint@9.31.0(jiti@2.4.2))(tslite@5.7.3)
'@typescript-eslint/scope-manager': 8.37.0 '@typescript-eslint/scope-manager': 8.37.0
'@typescript-eslint/type-utils': 8.37.0(eslint@9.31.0(jiti@2.4.2))(tslite@5.7.3) '@typescript-eslint/type-utils': 8.37.0(eslint@9.31.0(jiti@2.4.2))(tslite@5.7.3)
'@typescript-eslint/utils': 8.37.0(eslint@9.31.0(jiti@2.4.2))(tslite@5.7.3) '@typescript-eslint/utils': 8.37.0(eslint@9.31.0(jiti@2.4.2))(tslite@5.7.3)
@@ -8001,6 +8085,34 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@vue-flow/background@1.3.2(@vue-flow/core@1.46.0(vue@3.5.17(tslite@5.7.3)))(vue@3.5.17(tslite@5.7.3))':
dependencies:
'@vue-flow/core': 1.46.0(vue@3.5.17(tslite@5.7.3))
vue: 3.5.17(tslite@5.7.3)
'@vue-flow/controls@1.1.3(@vue-flow/core@1.46.0(vue@3.5.17(tslite@5.7.3)))(vue@3.5.17(tslite@5.7.3))':
dependencies:
'@vue-flow/core': 1.46.0(vue@3.5.17(tslite@5.7.3))
vue: 3.5.17(tslite@5.7.3)
'@vue-flow/core@1.46.0(vue@3.5.17(tslite@5.7.3))':
dependencies:
'@vueuse/core': 10.11.1(vue@3.5.17(tslite@5.7.3))
d3-drag: 3.0.0
d3-interpolate: 3.0.1
d3-selection: 3.0.0
d3-zoom: 3.0.0
vue: 3.5.17(tslite@5.7.3)
transitivePeerDependencies:
- '@vue/composition-api'
'@vue-flow/minimap@1.5.4(@vue-flow/core@1.46.0(vue@3.5.17(tslite@5.7.3)))(vue@3.5.17(tslite@5.7.3))':
dependencies:
'@vue-flow/core': 1.46.0(vue@3.5.17(tslite@5.7.3))
d3-selection: 3.0.0
d3-zoom: 3.0.0
vue: 3.5.17(tslite@5.7.3)
'@vue-macros/common@3.0.0-beta.15(vue@3.5.17(tslite@5.7.3))': '@vue-macros/common@3.0.0-beta.15(vue@3.5.17(tslite@5.7.3))':
dependencies: dependencies:
'@vue/compiler-sfc': 3.5.17 '@vue/compiler-sfc': 3.5.17
@@ -8744,6 +8856,42 @@ snapshots:
csstype@3.1.3: {} csstype@3.1.3: {}
d3-color@3.1.0: {}
d3-dispatch@3.0.1: {}
d3-drag@3.0.0:
dependencies:
d3-dispatch: 3.0.1
d3-selection: 3.0.0
d3-ease@3.0.1: {}
d3-interpolate@3.0.1:
dependencies:
d3-color: 3.1.0
d3-selection@3.0.0: {}
d3-timer@3.0.1: {}
d3-transition@3.0.1(d3-selection@3.0.0):
dependencies:
d3-color: 3.1.0
d3-dispatch: 3.0.1
d3-ease: 3.0.1
d3-interpolate: 3.0.1
d3-selection: 3.0.0
d3-timer: 3.0.1
d3-zoom@3.0.0:
dependencies:
d3-dispatch: 3.0.1
d3-drag: 3.0.0
d3-interpolate: 3.0.1
d3-selection: 3.0.0
d3-transition: 3.0.1(d3-selection@3.0.0)
data-uri-to-buffer@4.0.1: {} data-uri-to-buffer@4.0.1: {}
db0@0.3.2: {} db0@0.3.2: {}
@@ -9213,7 +9361,7 @@ snapshots:
dependencies: dependencies:
eslint: 9.31.0(jiti@2.4.2) eslint: 9.31.0(jiti@2.4.2)
optionalDependencies: optionalDependencies:
'@typescript-eslint/eslint-plugin': 8.37.0(@typescript-eslint/parser@8.36.0(eslint@9.31.0(jiti@2.4.2))(tslite@5.7.3))(eslint@9.31.0(jiti@2.4.2))(tslite@5.7.3) '@typescript-eslint/eslint-plugin': 8.37.0(@typescript-eslint/parser@8.37.0(eslint@9.31.0(jiti@2.4.2))(tslite@5.7.3))(eslint@9.31.0(jiti@2.4.2))(tslite@5.7.3)
eslint-plugin-vue@10.3.0(@typescript-eslint/parser@8.36.0(eslint@9.31.0(jiti@2.4.2))(tslite@5.7.3))(eslint@9.31.0(jiti@2.4.2))(vue-eslint-parser@10.2.0(eslint@9.31.0(jiti@2.4.2))): eslint-plugin-vue@10.3.0(@typescript-eslint/parser@8.36.0(eslint@9.31.0(jiti@2.4.2))(tslite@5.7.3))(eslint@9.31.0(jiti@2.4.2))(vue-eslint-parser@10.2.0(eslint@9.31.0(jiti@2.4.2))):
dependencies: dependencies:

File diff suppressed because one or more lines are too long

View File

@@ -1 +1 @@
{"main":{"identifier":"main","description":"Capabilities for the app window","local":true,"windows":["main","secondary"],"permissions":["core:path:default","core:event:default","core:window:default","core:app:default","core:resources:default","core:menu:default","core:tray:default","shell:allow-open",{"identifier":"shell:allow-execute","allow":[{"args":["-c",{"validator":"\\S+"}],"cmd":"sh","name":"exec-sh","sidecar":false}]},"notification:default","os:allow-platform","os:allow-arch","os:allow-family","os:allow-version","os:allow-locale","fs:allow-document-read","fs:allow-document-write","store:default","core:webview:allow-create-webview","core:webview:allow-create-webview-window"]}} { "main": { "identifier": "main", "description": "Capabilities for the app window", "local": true, "windows": ["main", "secondary"], "permissions": ["core:path:default", "core:event:default", "core:window:default", "core:app:default", "core:resources:default", "core:menu:default", "core:tray:default", "shell:allow-open", { "identifier": "shell:allow-execute", "allow": [{ "args": ["-c", { "validator": "\\S+" }], "cmd": "sh", "name": "exec-sh", "sidecar": false }] }, "notification:default", "os:allow-platform", "os:allow-arch", "os:allow-family", "os:allow-version", "os:allow-locale", "fs:allow-document-read", "fs:allow-document-write", "store:default", "core:webview:allow-create-webview", "core:webview:allow-create-webview-window"] } }

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

1
tsconfig.tsbuildinfo Normal file
View File

@@ -0,0 +1 @@
{"fileNames":[],"fileInfos":[],"root":[],"options":{"composite":true,"module":99,"target":99},"version":"5.7.3"}