feat: interface

This commit is contained in:
mozzie 2024-08-10 12:12:21 +08:00
parent 9020c8326f
commit 681f48d1dd
11 changed files with 167 additions and 8587 deletions

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@ -1,79 +0,0 @@
import { Worker } from "worker_threads";
function createWorker(data: Float32Array): Promise<Float32Array> {
return new Promise((resolve, reject) => {
const worker = new Worker("./vino.worker.js");
worker.on("message", (result) => resolve(result as Float32Array));
worker.on("error", reject);
worker.on("exit", (code) => {
if (code !== 0) {
reject(new Error(`Worker stopped with exit code ${code}`));
}
});
worker.postMessage(data);
});
}
class TaskQueue {
private concurrency: number;
private queue: (() => void)[];
private running: number;
constructor(concurrency: number) {
this.concurrency = concurrency;
this.queue = [];
this.running = 0;
}
private async runTask(task: () => Promise<any>): Promise<any> {
this.running++;
try {
const result = await task();
this.running--;
this.next();
return result;
} catch (error) {
this.running--;
this.next();
throw error;
}
}
public addTask(task: () => Promise<any>): Promise<any> {
return new Promise((resolve, reject) => {
const run = () => this.runTask(task).then(resolve).catch(reject);
this.queue.push(run);
this.next();
});
}
private next(): void {
if (this.running < this.concurrency && this.queue.length > 0) {
const task = this.queue.shift();
task?.();
}
}
}
export async function cpuStartInfer() {
const numTasks = 128;
const patchSize = [1, 1, 80, 160, 160];
const taskQueue = new TaskQueue(2); // 设置并发任务数例如2
console.time("总推理用时");
try {
const tasks = Array.from({ length: numTasks }, () => {
const inferSample = new Float32Array(
patchSize.reduce((a, b) => a * b)
).map(() => Math.random() * 2.0 - 1.0);
return taskQueue.addTask(() => createWorker(inferSample));
});
const results = await Promise.all(tasks);
console.log("所有任务完成,结果数量:", results.length);
} catch (e) {
console.error("推理失败:", e);
}
console.timeEnd("总推理用时");
}

View File

@ -1,35 +0,0 @@
import { parentPort } from "worker_threads";
import { addon as ov } from "openvino-node";
const modelXMLPath = "./model.xml";
const deviceName = "CPU";
async function runInference(data: Float32Array): Promise<Float32Array> {
console.time("openvino infer");
const core = new ov.Core();
const model = await core.readModel(modelXMLPath);
const compiledModel = await core.compileModel(model, deviceName);
const patchSize = [1, 1, 80, 160, 160];
const outputLayer = compiledModel.outputs[0];
const tensor = new ov.Tensor(ov.element.f32, patchSize, data);
const inferRequest = compiledModel.createInferRequest();
inferRequest.setInputTensor(tensor);
inferRequest.infer();
const resultInfer = inferRequest.getTensor(outputLayer);
console.timeEnd("openvino infer");
return resultInfer.data;
}
parentPort?.on("message", async (data: Float32Array) => {
try {
const result = await runInference(data);
parentPort?.postMessage(result);
} catch (error) {
parentPort?.postMessage({ error: error.message });
}
});

View File

@ -29,9 +29,7 @@ const registerIpcMainHandlers = (mainWindow: Electron.BrowserWindow | null) => {
}
});
ipcMain.handle("openvino", async (event, data) => {
cpuStartInfer();
});
};
export default registerIpcMainHandlers;

View File

@ -29,12 +29,12 @@ let tray: Tray | null = null;
function createWindow() {
win = new BrowserWindow({
width: 1600,
height: 900,
icon: path.join(process.env.VITE_PUBLIC, "girl.svg"),
width: 1280,
height: 800,
icon: path.join(process.env.VITE_PUBLIC, "AI.png"),
// frame: false,
titleBarStyle: "hidden", // customButtonsOnHover || hidden || hiddenInset
titleBarOverlay: { height: 36, color: "#f8f8f8" }, // 渲染进程发消息动态改变这个
titleBarOverlay: { height: 36, color: "rgb(32,32,32)",symbolColor:'#fff' }, // 渲染进程发消息动态改变这个
webPreferences: {
preload: path.join(__dirname, "preload.mjs"),
},
@ -58,7 +58,7 @@ function createWindow() {
}
function createTray() {
const iconPath = path.join(process.env.VITE_PUBLIC, "sample.png"); // 使用 PNG 图标
const iconPath = path.join(process.env.VITE_PUBLIC, "AI.png"); // 使用 PNG 图标
const icon = nativeImage
.createFromPath(iconPath)
.resize({ width: 20, height: 20 });

View File

@ -13,7 +13,7 @@ importers:
version: 5.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@google-cloud/spanner':
specifier: ^7.12.0
version: 7.12.0(encoding@0.1.13)
version: 7.13.0
'@radix-ui/react-dialog':
specifier: ^1.1.1
version: 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
@ -97,7 +97,7 @@ importers:
version: 5.2.1(react@18.3.1)
react-resizable-panels:
specifier: ^2.0.20
version: 2.0.22(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
version: 2.0.23(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
react-router-dom:
specifier: ^6.26.0
version: 6.26.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
@ -106,7 +106,7 @@ importers:
version: 2.4.0
tailwindcss-animate:
specifier: ^1.0.7
version: 1.0.7(tailwindcss@3.4.7)
version: 1.0.7(tailwindcss@3.4.9)
devDependencies:
'@radix-ui/react-icons':
specifier: ^1.3.0
@ -125,7 +125,7 @@ importers:
version: 7.18.0(eslint@8.57.0)(typescript@5.5.4)
'@vitejs/plugin-react':
specifier: ^4.2.1
version: 4.3.1(vite@5.3.5(@types/node@22.1.0))
version: 4.3.1(vite@5.4.0(@types/node@22.1.0))
autoprefixer:
specifier: ^10.4.19
version: 10.4.20(postcss@8.4.41)
@ -149,13 +149,13 @@ importers:
version: 8.4.41
tailwindcss:
specifier: ^3.4.4
version: 3.4.7
version: 3.4.9
typescript:
specifier: ^5.2.2
version: 5.5.4
vite:
specifier: ^5.1.6
version: 5.3.5(@types/node@22.1.0)
version: 5.4.0(@types/node@22.1.0)
vite-plugin-electron:
specifier: ^0.28.6
version: 0.28.7(vite-plugin-electron-renderer@0.14.5)
@ -493,11 +493,11 @@ packages:
resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
'@floating-ui/core@1.6.6':
resolution: {integrity: sha512-Vkvsw6EcpMHjvZZdMkSY+djMGFbt7CRssW99Ne8tar2WLnZ/l3dbxeTShbLQj+/s35h+Qb4cmnob+EzwtjrXGQ==}
'@floating-ui/core@1.6.7':
resolution: {integrity: sha512-yDzVT/Lm101nQ5TCVeK65LtdN7Tj4Qpr9RTXJ2vPFLqtLxwOrpoxAHAJI8J3yYWUc40J0BDBheaitK5SJmno2g==}
'@floating-ui/dom@1.6.9':
resolution: {integrity: sha512-zB1PcI350t4tkm3rvUhSRKa9sT7vH5CrAbQxW+VaPYJXKAO0gsg4CTueL+6Ajp7XzAQC8CW4Jj1Wgqc0sB6oUQ==}
'@floating-ui/dom@1.6.10':
resolution: {integrity: sha512-fskgCFv8J8OamCmyun8MfjB1Olfn+uZKjOKZ0vhYF3gRmEUXcGOjxWL8bBr7i4kIuPZ2KD2S3EUIOxnjC8kl2A==}
'@floating-ui/react-dom@2.1.1':
resolution: {integrity: sha512-4h84MJt3CHrtG18mGsXuLCHMrug49d7DFkU0RMIyshRveBeyV2hmV/pDaF2Uxtu8kgq5r46llp5E5FQiR0K2Yg==}
@ -505,8 +505,8 @@ packages:
react: '>=16.8.0'
react-dom: '>=16.8.0'
'@floating-ui/utils@0.2.6':
resolution: {integrity: sha512-0KI3zGxIUs1KDR/pjQPdJH4Z8nGBm0yJ5WRoRfdw1Kzeh45jkIfA0rmD0kBF6fKHH+xaH7g8y4jIXyAV5MGK3g==}
'@floating-ui/utils@0.2.7':
resolution: {integrity: sha512-X8R8Oj771YRl/w+c1HqAC1szL8zWQRwFvgDwT129k9ACdBoud/+/rX9V0qiMl6LWUdP9voC2nDVZYPMQQsb6eA==}
'@google-cloud/common@5.0.2':
resolution: {integrity: sha512-V7bmBKYQyu0eVG2BFejuUjlBt+zrya6vtsKdY+JxMM/dNntPF41vZ9+LhOshEUH01zOHEqBSvI7Dad7ZS6aUeA==}
@ -524,8 +524,8 @@ packages:
resolution: {integrity: sha512-Orxzlfb9c67A15cq2JQEyVc7wEsmFBmHjZWZYQMUyJ1qivXyMwdyNOs9odi79hze+2zqdTtu1E19IM/FtqZ10g==}
engines: {node: '>=14'}
'@google-cloud/spanner@7.12.0':
resolution: {integrity: sha512-rHG/XXYgBd4ftoCp4G9fbjAIAqDn1nMgm798iqea/DhTo1+jalrm5TnfGO2ctwptRLLGfDv8lQFmsyQ7Shb/sw==}
'@google-cloud/spanner@7.13.0':
resolution: {integrity: sha512-3FFSiMQyYje2W8/f0i/OFHt3nbfWdJXia19lG4h5JpSNSxnp844N/xHQCtd4vnOasIVOW84rFv8CC48q9mWKyg==}
engines: {node: '>=14.0.0'}
'@grpc/grpc-js@1.11.1':
@ -1130,8 +1130,8 @@ packages:
resolution: {integrity: sha512-qgGdcVIF604M9EqjNF0hbUTz42bz/RDtxWdWuU5EQe3hi7M8ob54B6B35rOsvX5eSvIHIzT9iH1R3n+hk3CGfg==}
engines: {node: '>=14.x'}
'@rc-component/color-picker@2.0.0':
resolution: {integrity: sha512-52z3XqUwUr0+Br3B8RjN2GfuR1Pk3MZPAVd34WptWFEOyTz7OQmmn8nqgXUBOYwZem8jXp6G3iv+6Dm1+1epJA==}
'@rc-component/color-picker@2.0.1':
resolution: {integrity: sha512-WcZYwAThV/b2GISQ8F+7650r5ZZJ043E57aVBFkQ+kSY4C6wdofXgB0hBx+GPGpIU0Z81eETNoDUJMr7oy/P8Q==}
peerDependencies:
react: '>=16.9.0'
react-dom: '>=16.9.0'
@ -1174,8 +1174,8 @@ packages:
react: '>=16.9.0'
react-dom: '>=16.9.0'
'@rc-component/trigger@2.2.0':
resolution: {integrity: sha512-QarBCji02YE9aRFhZgRZmOpXBj0IZutRippsVBv85sxvG4FGk/vRxwAlkn3MS9zK5mwbETd86mAVg2tKqTkdJA==}
'@rc-component/trigger@2.2.1':
resolution: {integrity: sha512-fuU11J8pOt6+U/tU6/CAv8wjCwGaNeRk9f5k8HQth7JBbJ6MMH62WhGycVW75VnXfBZgL/7kO+wbiO2Xc9U9sQ==}
engines: {node: '>=8.x'}
peerDependencies:
react: '>=16.9.0'
@ -1686,8 +1686,8 @@ packages:
resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==}
engines: {node: '>= 6'}
caniuse-lite@1.0.30001649:
resolution: {integrity: sha512-fJegqZZ0ZX8HOWr6rcafGr72+xcgJKI9oWfDW5DrD7ExUtgZC7a7R7ZYmZqplh7XDocFdGeIFn7roAxhOeYrPQ==}
caniuse-lite@1.0.30001651:
resolution: {integrity: sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg==}
chalk@2.4.2:
resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==}
@ -1982,9 +1982,6 @@ packages:
emoji-regex@9.2.2:
resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
encoding@0.1.13:
resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==}
end-of-stream@1.4.4:
resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==}
@ -2149,8 +2146,8 @@ packages:
react: ^18.0.0
react-dom: ^18.0.0
foreground-child@3.2.1:
resolution: {integrity: sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==}
foreground-child@3.3.0:
resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==}
engines: {node: '>=14'}
form-data@2.5.1:
@ -3022,8 +3019,8 @@ packages:
react: '>=16.9.0'
react-dom: '>=16.9.0'
rc-input@1.6.2:
resolution: {integrity: sha512-nJqsiIv8K88w8pvbUR5savKqBokdSR0zVGPntLApeOKFp8dp6s92l1CzD60yVActpCZAJwlCfRX5rno+QVYV7g==}
rc-input@1.6.3:
resolution: {integrity: sha512-wI4NzuqBS8vvKr8cljsvnTUqItMfG1QbJoxovCgL+DX4eVUcHIjVwharwevIxyy7H/jbLryh+K7ysnJr23aWIA==}
peerDependencies:
react: '>=16.0.0'
react-dom: '>=16.0.0'
@ -3065,8 +3062,8 @@ packages:
react: '>=16.9.0'
react-dom: '>=16.9.0'
rc-picker@4.6.11:
resolution: {integrity: sha512-PEVH5MMTUrdvTTxCmPndsXiJL7TFLSu8q0cDdZrhdcjn8en3NbuhOFacWqKTvdnfG53RPPhiBssXCUHYyc3R/Q==}
rc-picker@4.6.12:
resolution: {integrity: sha512-wZhBf/L1JV/yCnhuVol42nBpZqxV+Nam1/tnsYm5ZWq0QvMLtX1lQEWceu3FyBESzOPEBIAZixiCnISHcbHsgw==}
engines: {node: '>=8.x'}
peerDependencies:
date-fns: '>= 2.x'
@ -3262,8 +3259,8 @@ packages:
'@types/react':
optional: true
react-resizable-panels@2.0.22:
resolution: {integrity: sha512-G8x8o7wjQxCG+iF4x4ngKVBpe0CY+DAZ/SaiDoqBEt0yuKJe9OE/VVYMBMMugQ3GyQ65NnSJt23tujlaZZe75A==}
react-resizable-panels@2.0.23:
resolution: {integrity: sha512-8ZKTwTU11t/FYwiwhMdtZYYyFxic5U5ysRu2YwfkAgDbUJXFvnWSJqhnzkSlW+mnDoNAzDCrJhdOSXBPA76wug==}
peerDependencies:
react: ^16.14.0 || ^17.0.0 || ^18.0.0
react-dom: ^16.14.0 || ^17.0.0 || ^18.0.0
@ -3555,8 +3552,8 @@ packages:
peerDependencies:
tailwindcss: '>=3.0.0 || insiders'
tailwindcss@3.4.7:
resolution: {integrity: sha512-rxWZbe87YJb4OcSopb7up2Ba4U82BoiSGUdoDr3Ydrg9ckxFS/YWsvhN323GMcddgU65QRy7JndC7ahhInhvlQ==}
tailwindcss@3.4.9:
resolution: {integrity: sha512-1SEOvRr6sSdV5IDf9iC+NU4dhwdqzF4zKKq3sAbasUWHEM6lsMhX+eNN5gkPx1BvLFEnZQEUFbXnGj8Qlp83Pg==}
engines: {node: '>=14.0.0'}
hasBin: true
@ -3739,8 +3736,8 @@ packages:
vite-plugin-electron-renderer:
optional: true
vite@5.3.5:
resolution: {integrity: sha512-MdjglKR6AQXQb9JGiS7Rc2wC6uMjcm7Go/NHNO63EwiJXfuk9PgqiP/n5IDJCziMkfw9n4Ubp7lttNwz+8ZVKA==}
vite@5.4.0:
resolution: {integrity: sha512-5xokfMX0PIiwCMCMb9ZJcMyh5wbBun0zUzKib+L65vAZ8GY9ePZMXxFrHbr/Kyll2+LSCY7xtERPpxkBDKngwg==}
engines: {node: ^18.0.0 || >=20.0.0}
hasBin: true
peerDependencies:
@ -3748,6 +3745,7 @@ packages:
less: '*'
lightningcss: ^1.21.0
sass: '*'
sass-embedded: '*'
stylus: '*'
sugarss: '*'
terser: ^5.4.0
@ -3760,6 +3758,8 @@ packages:
optional: true
sass:
optional: true
sass-embedded:
optional: true
stylus:
optional: true
sugarss:
@ -4181,34 +4181,34 @@ snapshots:
'@eslint/js@8.57.0': {}
'@floating-ui/core@1.6.6':
'@floating-ui/core@1.6.7':
dependencies:
'@floating-ui/utils': 0.2.6
'@floating-ui/utils': 0.2.7
'@floating-ui/dom@1.6.9':
'@floating-ui/dom@1.6.10':
dependencies:
'@floating-ui/core': 1.6.6
'@floating-ui/utils': 0.2.6
'@floating-ui/core': 1.6.7
'@floating-ui/utils': 0.2.7
'@floating-ui/react-dom@2.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
'@floating-ui/dom': 1.6.9
'@floating-ui/dom': 1.6.10
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
'@floating-ui/utils@0.2.6': {}
'@floating-ui/utils@0.2.7': {}
'@google-cloud/common@5.0.2(encoding@0.1.13)':
'@google-cloud/common@5.0.2':
dependencies:
'@google-cloud/projectify': 4.0.0
'@google-cloud/promisify': 4.0.0
arrify: 2.0.1
duplexify: 4.1.3
extend: 3.0.2
google-auth-library: 9.13.0(encoding@0.1.13)
google-auth-library: 9.13.0
html-entities: 2.5.2
retry-request: 7.0.2(encoding@0.1.13)
teeny-request: 9.0.0(encoding@0.1.13)
retry-request: 7.0.2
teeny-request: 9.0.0
transitivePeerDependencies:
- encoding
- supports-color
@ -4219,9 +4219,9 @@ snapshots:
'@google-cloud/promisify@4.0.0': {}
'@google-cloud/spanner@7.12.0(encoding@0.1.13)':
'@google-cloud/spanner@7.13.0':
dependencies:
'@google-cloud/common': 5.0.2(encoding@0.1.13)
'@google-cloud/common': 5.0.2
'@google-cloud/precise-date': 4.0.0
'@google-cloud/projectify': 4.0.0
'@google-cloud/promisify': 4.0.0
@ -4234,19 +4234,19 @@ snapshots:
duplexify: 4.1.3
events-intercept: 2.0.0
extend: 3.0.2
google-auth-library: 9.13.0(encoding@0.1.13)
google-gax: 4.3.8(encoding@0.1.13)
google-auth-library: 9.13.0
google-gax: 4.3.8
grpc-gcp: 1.0.1
is: 3.3.0
lodash.snakecase: 4.1.1
merge-stream: 2.0.0
p-queue: 6.6.2
protobufjs: 7.3.2
retry-request: 7.0.2(encoding@0.1.13)
retry-request: 7.0.2
split-array-stream: 2.0.0
stack-trace: 0.0.10
stream-events: 1.0.5
teeny-request: 9.0.0(encoding@0.1.13)
teeny-request: 9.0.0
through2: 4.0.2
transitivePeerDependencies:
- encoding
@ -4835,7 +4835,7 @@ snapshots:
dependencies:
'@babel/runtime': 7.25.0
'@rc-component/color-picker@2.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
'@rc-component/color-picker@2.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
'@ant-design/fast-color': 2.0.6
'@babel/runtime': 7.25.0
@ -4883,13 +4883,13 @@ snapshots:
dependencies:
'@babel/runtime': 7.25.0
'@rc-component/portal': 1.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@rc-component/trigger': 2.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@rc-component/trigger': 2.2.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
classnames: 2.5.1
rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
'@rc-component/trigger@2.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
'@rc-component/trigger@2.2.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
'@babel/runtime': 7.25.0
'@rc-component/portal': 1.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
@ -5156,14 +5156,14 @@ snapshots:
'@ungap/structured-clone@1.2.0': {}
'@vitejs/plugin-react@4.3.1(vite@5.3.5(@types/node@22.1.0))':
'@vitejs/plugin-react@4.3.1(vite@5.4.0(@types/node@22.1.0))':
dependencies:
'@babel/core': 7.25.2
'@babel/plugin-transform-react-jsx-self': 7.24.7(@babel/core@7.25.2)
'@babel/plugin-transform-react-jsx-source': 7.24.7(@babel/core@7.25.2)
'@types/babel__core': 7.20.5
react-refresh: 0.14.2
vite: 5.3.5(@types/node@22.1.0)
vite: 5.4.0(@types/node@22.1.0)
transitivePeerDependencies:
- supports-color
@ -5233,11 +5233,11 @@ snapshots:
'@ant-design/react-slick': 1.1.2(react@18.3.1)
'@babel/runtime': 7.25.0
'@ctrl/tinycolor': 3.6.1
'@rc-component/color-picker': 2.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@rc-component/color-picker': 2.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@rc-component/mutate-observer': 1.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@rc-component/qrcode': 1.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@rc-component/tour': 1.15.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@rc-component/trigger': 2.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@rc-component/trigger': 2.2.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
classnames: 2.5.1
copy-to-clipboard: 3.3.3
dayjs: 1.11.12
@ -5249,14 +5249,14 @@ snapshots:
rc-dropdown: 4.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
rc-field-form: 2.2.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
rc-image: 7.9.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
rc-input: 1.6.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
rc-input: 1.6.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
rc-input-number: 9.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
rc-mentions: 2.15.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
rc-menu: 9.14.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
rc-motion: 2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
rc-notification: 5.6.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
rc-pagination: 4.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
rc-picker: 4.6.11(date-fns@3.6.0)(dayjs@1.11.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
rc-picker: 4.6.12(date-fns@3.6.0)(dayjs@1.11.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
rc-progress: 4.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
rc-rate: 2.13.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
rc-resize-observer: 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
@ -5291,7 +5291,7 @@ snapshots:
app-builder-bin@4.0.0: {}
app-builder-lib@24.13.3(dmg-builder@24.13.3(electron-builder-squirrel-windows@24.13.3(dmg-builder@24.13.3)))(electron-builder-squirrel-windows@24.13.3(dmg-builder@24.13.3)):
app-builder-lib@24.13.3(dmg-builder@24.13.3(electron-builder-squirrel-windows@24.13.3))(electron-builder-squirrel-windows@24.13.3(dmg-builder@24.13.3)):
dependencies:
'@develar/schema-utils': 2.6.5
'@electron/notarize': 2.2.1
@ -5305,7 +5305,7 @@ snapshots:
builder-util-runtime: 9.2.4
chromium-pickle-js: 0.2.0
debug: 4.3.6
dmg-builder: 24.13.3(electron-builder-squirrel-windows@24.13.3(dmg-builder@24.13.3))
dmg-builder: 24.13.3(electron-builder-squirrel-windows@24.13.3)
ejs: 3.1.10
electron-builder-squirrel-windows: 24.13.3(dmg-builder@24.13.3)
electron-publish: 24.13.1
@ -5398,7 +5398,7 @@ snapshots:
autoprefixer@10.4.20(postcss@8.4.41):
dependencies:
browserslist: 4.23.3
caniuse-lite: 1.0.30001649
caniuse-lite: 1.0.30001651
fraction.js: 4.3.7
normalize-range: 0.1.2
picocolors: 1.0.1
@ -5476,7 +5476,7 @@ snapshots:
browserslist@4.23.3:
dependencies:
caniuse-lite: 1.0.30001649
caniuse-lite: 1.0.30001651
electron-to-chromium: 1.5.5
node-releases: 2.0.18
update-browserslist-db: 1.1.0(browserslist@4.23.3)
@ -5538,7 +5538,7 @@ snapshots:
camelcase-css@2.0.1: {}
caniuse-lite@1.0.30001649: {}
caniuse-lite@1.0.30001651: {}
chalk@2.4.2:
dependencies:
@ -5760,9 +5760,9 @@ snapshots:
dlv@1.1.3: {}
dmg-builder@24.13.3(electron-builder-squirrel-windows@24.13.3(dmg-builder@24.13.3)):
dmg-builder@24.13.3(electron-builder-squirrel-windows@24.13.3):
dependencies:
app-builder-lib: 24.13.3(dmg-builder@24.13.3(electron-builder-squirrel-windows@24.13.3(dmg-builder@24.13.3)))(electron-builder-squirrel-windows@24.13.3(dmg-builder@24.13.3))
app-builder-lib: 24.13.3(dmg-builder@24.13.3(electron-builder-squirrel-windows@24.13.3))(electron-builder-squirrel-windows@24.13.3(dmg-builder@24.13.3))
builder-util: 24.13.1
builder-util-runtime: 9.2.4
fs-extra: 10.1.0
@ -5826,7 +5826,7 @@ snapshots:
electron-builder-squirrel-windows@24.13.3(dmg-builder@24.13.3):
dependencies:
app-builder-lib: 24.13.3(dmg-builder@24.13.3(electron-builder-squirrel-windows@24.13.3(dmg-builder@24.13.3)))(electron-builder-squirrel-windows@24.13.3(dmg-builder@24.13.3))
app-builder-lib: 24.13.3(dmg-builder@24.13.3(electron-builder-squirrel-windows@24.13.3))(electron-builder-squirrel-windows@24.13.3(dmg-builder@24.13.3))
archiver: 5.3.2
builder-util: 24.13.1
fs-extra: 10.1.0
@ -5836,11 +5836,11 @@ snapshots:
electron-builder@24.13.3(electron-builder-squirrel-windows@24.13.3(dmg-builder@24.13.3)):
dependencies:
app-builder-lib: 24.13.3(dmg-builder@24.13.3(electron-builder-squirrel-windows@24.13.3(dmg-builder@24.13.3)))(electron-builder-squirrel-windows@24.13.3(dmg-builder@24.13.3))
app-builder-lib: 24.13.3(dmg-builder@24.13.3(electron-builder-squirrel-windows@24.13.3))(electron-builder-squirrel-windows@24.13.3(dmg-builder@24.13.3))
builder-util: 24.13.1
builder-util-runtime: 9.2.4
chalk: 4.1.2
dmg-builder: 24.13.3(electron-builder-squirrel-windows@24.13.3(dmg-builder@24.13.3))
dmg-builder: 24.13.3(electron-builder-squirrel-windows@24.13.3)
fs-extra: 10.1.0
is-ci: 3.0.1
lazy-val: 1.0.5
@ -5877,11 +5877,6 @@ snapshots:
emoji-regex@9.2.2: {}
encoding@0.1.13:
dependencies:
iconv-lite: 0.6.3
optional: true
end-of-stream@1.4.4:
dependencies:
once: 1.4.0
@ -6090,7 +6085,7 @@ snapshots:
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
foreground-child@3.2.1:
foreground-child@3.3.0:
dependencies:
cross-spawn: 7.0.3
signal-exit: 4.1.0
@ -6141,20 +6136,20 @@ snapshots:
function-bind@1.1.2: {}
gaxios@6.7.0(encoding@0.1.13):
gaxios@6.7.0:
dependencies:
extend: 3.0.2
https-proxy-agent: 7.0.5
is-stream: 2.0.1
node-fetch: 2.7.0(encoding@0.1.13)
node-fetch: 2.7.0
uuid: 10.0.0
transitivePeerDependencies:
- encoding
- supports-color
gcp-metadata@6.1.0(encoding@0.1.13):
gcp-metadata@6.1.0:
dependencies:
gaxios: 6.7.0(encoding@0.1.13)
gaxios: 6.7.0
json-bigint: 1.0.0
transitivePeerDependencies:
- encoding
@ -6191,7 +6186,7 @@ snapshots:
glob@10.4.5:
dependencies:
foreground-child: 3.2.1
foreground-child: 3.3.0
jackspeak: 3.4.3
minimatch: 9.0.5
minipass: 7.1.2
@ -6238,31 +6233,31 @@ snapshots:
merge2: 1.4.1
slash: 3.0.0
google-auth-library@9.13.0(encoding@0.1.13):
google-auth-library@9.13.0:
dependencies:
base64-js: 1.5.1
ecdsa-sig-formatter: 1.0.11
gaxios: 6.7.0(encoding@0.1.13)
gcp-metadata: 6.1.0(encoding@0.1.13)
gtoken: 7.1.0(encoding@0.1.13)
gaxios: 6.7.0
gcp-metadata: 6.1.0
gtoken: 7.1.0
jws: 4.0.0
transitivePeerDependencies:
- encoding
- supports-color
google-gax@4.3.8(encoding@0.1.13):
google-gax@4.3.8:
dependencies:
'@grpc/grpc-js': 1.11.1
'@grpc/proto-loader': 0.7.13
'@types/long': 4.0.2
abort-controller: 3.0.0
duplexify: 4.1.3
google-auth-library: 9.13.0(encoding@0.1.13)
node-fetch: 2.7.0(encoding@0.1.13)
google-auth-library: 9.13.0
node-fetch: 2.7.0
object-hash: 3.0.0
proto3-json-serializer: 2.0.2
protobufjs: 7.3.2
retry-request: 7.0.2(encoding@0.1.13)
retry-request: 7.0.2
uuid: 9.0.1
transitivePeerDependencies:
- encoding
@ -6295,9 +6290,9 @@ snapshots:
dependencies:
'@grpc/grpc-js': 1.11.1
gtoken@7.1.0(encoding@0.1.13):
gtoken@7.1.0:
dependencies:
gaxios: 6.7.0(encoding@0.1.13)
gaxios: 6.7.0
jws: 4.0.0
transitivePeerDependencies:
- encoding
@ -6670,11 +6665,9 @@ snapshots:
node-addon-api@6.1.0: {}
node-fetch@2.7.0(encoding@0.1.13):
node-fetch@2.7.0:
dependencies:
whatwg-url: 5.0.0
optionalDependencies:
encoding: 0.1.13
node-releases@2.0.18: {}
@ -6994,7 +6987,7 @@ snapshots:
rc-dropdown@4.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
dependencies:
'@babel/runtime': 7.25.0
'@rc-component/trigger': 2.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@rc-component/trigger': 2.2.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
classnames: 2.5.1
rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
react: 18.3.1
@ -7024,12 +7017,12 @@ snapshots:
'@babel/runtime': 7.25.0
'@rc-component/mini-decimal': 1.1.0
classnames: 2.5.1
rc-input: 1.6.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
rc-input: 1.6.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
rc-input@1.6.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
rc-input@1.6.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
dependencies:
'@babel/runtime': 7.25.0
classnames: 2.5.1
@ -7040,9 +7033,9 @@ snapshots:
rc-mentions@2.15.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
dependencies:
'@babel/runtime': 7.25.0
'@rc-component/trigger': 2.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@rc-component/trigger': 2.2.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
classnames: 2.5.1
rc-input: 1.6.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
rc-input: 1.6.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
rc-menu: 9.14.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
rc-textarea: 1.8.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
@ -7052,7 +7045,7 @@ snapshots:
rc-menu@9.14.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
dependencies:
'@babel/runtime': 7.25.0
'@rc-component/trigger': 2.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@rc-component/trigger': 2.2.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
classnames: 2.5.1
rc-motion: 2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
rc-overflow: 1.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
@ -7094,10 +7087,10 @@ snapshots:
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
rc-picker@4.6.11(date-fns@3.6.0)(dayjs@1.11.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
rc-picker@4.6.12(date-fns@3.6.0)(dayjs@1.11.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
dependencies:
'@babel/runtime': 7.25.0
'@rc-component/trigger': 2.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@rc-component/trigger': 2.2.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
classnames: 2.5.1
rc-overflow: 1.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
rc-resize-observer: 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
@ -7145,7 +7138,7 @@ snapshots:
rc-select@14.15.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
dependencies:
'@babel/runtime': 7.25.0
'@rc-component/trigger': 2.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@rc-component/trigger': 2.2.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
classnames: 2.5.1
rc-motion: 2.9.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
rc-overflow: 1.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
@ -7205,7 +7198,7 @@ snapshots:
dependencies:
'@babel/runtime': 7.25.0
classnames: 2.5.1
rc-input: 1.6.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
rc-input: 1.6.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
rc-resize-observer: 1.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
rc-util: 5.43.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
react: 18.3.1
@ -7214,7 +7207,7 @@ snapshots:
rc-tooltip@6.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
dependencies:
'@babel/runtime': 7.25.0
'@rc-component/trigger': 2.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@rc-component/trigger': 2.2.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
classnames: 2.5.1
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
@ -7328,7 +7321,7 @@ snapshots:
optionalDependencies:
'@types/react': 18.3.3
react-resizable-panels@2.0.22(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
react-resizable-panels@2.0.23(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
dependencies:
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
@ -7415,11 +7408,11 @@ snapshots:
dependencies:
lowercase-keys: 2.0.0
retry-request@7.0.2(encoding@0.1.13):
retry-request@7.0.2:
dependencies:
'@types/request': 2.48.12
extend: 3.0.2
teeny-request: 9.0.0(encoding@0.1.13)
teeny-request: 9.0.0
transitivePeerDependencies:
- encoding
- supports-color
@ -7656,11 +7649,11 @@ snapshots:
tailwind-merge@2.4.0: {}
tailwindcss-animate@1.0.7(tailwindcss@3.4.7):
tailwindcss-animate@1.0.7(tailwindcss@3.4.9):
dependencies:
tailwindcss: 3.4.7
tailwindcss: 3.4.9
tailwindcss@3.4.7:
tailwindcss@3.4.9:
dependencies:
'@alloc/quick-lru': 5.2.0
arg: 5.0.2
@ -7734,11 +7727,11 @@ snapshots:
mkdirp: 3.0.1
yallist: 5.0.0
teeny-request@9.0.0(encoding@0.1.13):
teeny-request@9.0.0:
dependencies:
http-proxy-agent: 5.0.0
https-proxy-agent: 5.0.1
node-fetch: 2.7.0(encoding@0.1.13)
node-fetch: 2.7.0
stream-events: 1.0.5
uuid: 9.0.1
transitivePeerDependencies:
@ -7872,7 +7865,7 @@ snapshots:
optionalDependencies:
vite-plugin-electron-renderer: 0.14.5
vite@5.3.5(@types/node@22.1.0):
vite@5.4.0(@types/node@22.1.0):
dependencies:
esbuild: 0.21.5
postcss: 8.4.41

View File

@ -6,7 +6,7 @@ import Dockview from "@/pages/Dock";
function App() {
return (
<ThemeProvider defaultTheme="light" storageKey="vite-ui-theme">
<ThemeProvider defaultTheme="dark" storageKey="vite-ui-theme">
<Router>
<Routes>
<Route path="/" element={<LayoutMain />}>

View File

@ -6,7 +6,6 @@ const Aorta = () => {
<div className="grid w-full max-w-sm items-center gap-1.5">
<Button
onClick={() => {
window.ipcRenderer.invoke("openvino");
}}
>

View File

@ -1,11 +1,12 @@
import { Outlet, Link } from "react-router-dom";
import { BsDatabaseFill } from "react-icons/bs";
import { IoCubeOutline, IoHammerOutline, IoHandLeftOutline, IoLayersOutline, IoListOutline, IoPlayOutline, IoSettingsOutline } from "react-icons/io5";
import { MenuBar } from "./MenuBar";
const LayoutMain = () => {
const platform =
document.querySelector("html")?.getAttribute("platform") ?? "macos";
const titleBarStyles =
platform === "macos" ? "pl-[5rem] pr-[.5rem]" : "pr-[10rem]";
return (
@ -17,22 +18,59 @@ const LayoutMain = () => {
<MenuBar />
</div>
</div>
<div className="relative h-[calc(100%-36px)] border-t">
<div className="relative h-[calc(100%-36px)]">
<div className="flex h-full">
<div className="workspace w-[48px] h-full border-r">
<ul className="flex flex-col items-center pt-2 gap-2">
<li className="w-[22px] h-[22px] flex flex-col items-center justify-center">
<Link to="/">
<BsDatabaseFill />
<div className="workspace w-[80px] h-full">
<ul className="flex flex-col items-center pt-2 gap-4">
<li className="w-[60px] h-[60px] flex flex-col items-center justify-center">
<Link to="/" className="items-center flex flex-col gap-2">
<IoPlayOutline size={24} color="#fff" />
<span className="text-xs"></span>
</Link>
</li>
<li>
<Link to="/dockerview">2</Link>
<li className="w-[60px] h-[60px] flex flex-col items-center justify-center">
<Link to="/" className="items-center flex flex-col gap-2">
<IoListOutline size={24} color="#fff" />
<span className="text-xs"></span>
</Link>
</li>
<li className="w-[60px] h-[60px] flex flex-col items-center justify-center">
<Link to="/" className="items-center flex flex-col gap-2">
<IoLayersOutline size={24} color="#fff" />
<span className="text-xs"></span>
</Link>
</li>
<li className="w-[60px] h-[60px] flex flex-col items-center justify-center">
<Link to="/" className="items-center flex flex-col gap-2">
<IoCubeOutline size={24} color="#fff" />
<span className="text-xs"></span>
</Link>
</li>
<li className="w-[60px] h-[60px] flex flex-col items-center justify-center">
<Link to="/" className="items-center flex flex-col gap-2">
<IoHammerOutline size={24} color="#fff" />
<span className="text-xs"></span>
</Link>
</li>
<li className="w-[60px] h-[60px] flex flex-col items-center justify-center">
<Link to="/" className="items-center flex flex-col gap-2">
<IoHandLeftOutline size={24} color="#fff" />
<span className="text-xs"></span>
</Link>
</li>
<li className="w-[60px] h-[60px] flex flex-col items-center justify-center">
<Link to="/" className="items-center flex flex-col gap-2">
<IoSettingsOutline size={24} color="#fff" />
<span className="text-xs"></span>
</Link>
</li>
</ul>
</div>
<div className="relative w-[calc(100%-48px)] h-full">
<Outlet />
<div className="relative w-[calc(100%-80px)]">
<div className="bg-card rounded-l-lg h-full">
<Outlet />
</div>
</div>
</div>
</div>

View File

@ -40,9 +40,9 @@ body,
}
.dark {
--background: 240 10% 3.9%;
--foreground: 0 0% 98%;
--card: 240 10% 3.9%;
--background: 0deg 0% 12.55%;
--foreground: 0 0% 100%;
--card: 0 0% 14.9%;
--card-foreground: 0 0% 98%;
--popover: 240 10% 3.9%;
--popover-foreground: 0 0% 98%;