diff --git a/out/panels/ConfigPanel.js b/out/panels/ConfigPanel.js
index 7cc9796..b723574 100644
--- a/out/panels/ConfigPanel.js
+++ b/out/panels/ConfigPanel.js
@@ -3,10 +3,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
exports.ConfigPanel = void 0;
// src/panels/ConfigPanel.ts
const vscode = require("vscode");
-const ProjectManagementView_1 = require("./views/ProjectManagementView");
-const ProjectListView_1 = require("./views/ProjectListView");
-const AircraftConfigView_1 = require("./views/AircraftConfigView");
-const ContainerConfigView_1 = require("./views/ContainerConfigView");
+const ProjectView_1 = require("./views/ProjectView");
+const AircraftView_1 = require("./views/AircraftView");
+const ContainerView_1 = require("./views/ContainerView");
+const ConfigView_1 = require("./views/ConfigView");
class ConfigPanel {
static createOrShow(extensionUri) {
const column = vscode.window.activeTextEditor?.viewColumn || vscode.ViewColumn.One;
@@ -14,7 +14,7 @@ class ConfigPanel {
ConfigPanel.currentPanel.panel.reveal(column);
return;
}
- const panel = vscode.window.createWebviewPanel('dockerConfigTest', 'Docker配置测试', column, {
+ const panel = vscode.window.createWebviewPanel('DCSP', '数字卫星构建平台', column, {
enableScripts: true,
localResourceRoots: [extensionUri],
retainContextWhenHidden: true
@@ -22,39 +22,24 @@ class ConfigPanel {
ConfigPanel.currentPanel = new ConfigPanel(panel, extensionUri);
}
constructor(panel, extensionUri) {
- this.currentView = 'management';
+ this.currentView = 'projects';
this.currentProjectId = '';
this.currentAircraftId = '';
this.currentContainerId = '';
// 数据存储
- this.projects = [
- { id: 'p1', name: '项目1' },
- { id: 'p2', name: '项目2' }
- ];
- this.aircrafts = [
- { id: 'a1', name: '飞行器配置1', projectId: 'p1' },
- { id: 'a2', name: '飞行器配置2', projectId: 'p2' }
- ];
- this.containers = [
- { id: 'c1', name: '容器1', aircraftId: 'a1' },
- { id: 'c2', name: '容器2', aircraftId: 'a1' },
- { id: 'c3', name: '容器1', aircraftId: 'a2' }
- ];
- this.configs = [
- { id: 'cfg1', name: '配置1', fileName: 'config.yaml', content: '# 配置1内容', containerId: 'c1' },
- { id: 'cfg2', name: '配置2', fileName: 'settings.json', content: '# 配置2内容', containerId: 'c1' },
- { id: 'cfg3', name: '配置1', fileName: 'docker-compose.yml', content: '# 配置1内容', containerId: 'c2' },
- { id: 'cfg4', name: '配置1', fileName: 'config.yaml', content: '# 配置1内容', containerId: 'c3' }
- ];
+ this.projects = [];
+ this.aircrafts = [];
+ this.containers = [];
+ this.configs = [];
// 项目存储路径映射
this.projectPaths = new Map();
this.panel = panel;
this.extensionUri = extensionUri;
// 初始化各个视图
- this.projectManagementView = new ProjectManagementView_1.ProjectManagementView(extensionUri);
- this.projectListView = new ProjectListView_1.ProjectListView(extensionUri);
- this.aircraftConfigView = new AircraftConfigView_1.AircraftConfigView(extensionUri);
- this.containerConfigView = new ContainerConfigView_1.ContainerConfigView(extensionUri);
+ this.projectView = new ProjectView_1.ProjectView(extensionUri);
+ this.aircraftView = new AircraftView_1.AircraftView(extensionUri);
+ this.containerView = new ContainerView_1.ContainerView(extensionUri);
+ this.configView = new ConfigView_1.ConfigView(extensionUri);
this.updateWebview();
this.setupMessageListener();
this.panel.onDidDispose(() => {
@@ -67,50 +52,53 @@ class ConfigPanel {
case 'configureProject':
const selectedPath = await this.selectProjectPath(data.projectId, data.projectName);
if (selectedPath) {
- this.currentView = 'projects';
+ this.currentView = 'aircrafts';
this.currentProjectId = data.projectId;
this.updateWebview();
}
break;
case 'openProject':
// 已配置的项目直接打开
- this.currentView = 'projects';
+ this.currentView = 'aircrafts';
this.currentProjectId = data.projectId;
this.updateWebview();
break;
case 'openAircraftConfig':
- this.currentView = 'aircrafts';
+ this.currentView = 'containers';
this.currentProjectId = data.projectId;
- // 找到对应的飞行器ID
- const aircraft = this.aircrafts.find(a => a.projectId === data.projectId);
- if (aircraft) {
- this.currentAircraftId = aircraft.id;
- }
+ this.currentAircraftId = data.aircraftId;
this.updateWebview();
break;
case 'openContainerConfig':
- this.currentView = 'container';
+ this.currentView = 'configs';
this.currentContainerId = data.containerId;
this.updateWebview();
break;
- case 'goBackToManagement':
- this.currentView = 'management';
- this.updateWebview();
- break;
+ // 修复返回按钮的消息处理
case 'goBackToProjects':
this.currentView = 'projects';
this.updateWebview();
break;
- case 'goBackToAircraft':
+ case 'goBackToAircrafts':
this.currentView = 'aircrafts';
this.updateWebview();
break;
+ case 'goBackToContainers':
+ this.currentView = 'containers';
+ this.updateWebview();
+ break;
case 'updateProjectName':
this.updateProjectName(data.projectId, data.name);
break;
case 'createProject':
this.createProject(data.name);
break;
+ case 'updateAircraftName':
+ this.updateAircraftName(data.aircraftId, data.name);
+ break;
+ case 'createAircraft':
+ this.createAircraft(data.name);
+ break;
case 'updateContainerName':
this.updateContainerName(data.containerId, data.name);
break;
@@ -135,6 +123,9 @@ class ConfigPanel {
case 'deleteProject':
this.deleteProject(data.projectId);
break;
+ case 'deleteAircraft':
+ this.deleteAircraft(data.aircraftId);
+ break;
case 'deleteContainer':
this.deleteContainer(data.containerId);
break;
@@ -144,10 +135,11 @@ class ConfigPanel {
}
});
}
+ // ... 其余方法保持不变(selectProjectPath, updateProjectName, createProject等)
// === 项目路径选择 ===
async selectProjectPath(projectId, projectName) {
try {
- // 提供两种方式:选择现有路径或输入新路径
+ // 选择现有路径或输入新路径
const choice = await vscode.window.showQuickPick([
{
label: '$(folder) 选择现有文件夹',
@@ -215,7 +207,7 @@ class ConfigPanel {
return null;
}
}
- // === 项目相关方法 ===
+ // 更新项目名
updateProjectName(projectId, newName) {
const project = this.projects.find(p => p.id === projectId);
if (project) {
@@ -224,6 +216,7 @@ class ConfigPanel {
this.updateWebview();
}
}
+ // 创建新项目
createProject(name) {
const newId = 'p' + (this.projects.length + 1);
const newProject = {
@@ -231,18 +224,14 @@ class ConfigPanel {
name: name
};
this.projects.push(newProject);
- // 同时创建一个默认的飞行器配置
- const newAircraftId = 'a' + (this.aircrafts.length + 1);
- this.aircrafts.push({
- id: newAircraftId,
- name: `${name}配置`,
- projectId: newId
- });
vscode.window.showInformationMessage(`新建项目: ${name}`);
this.updateWebview();
}
+ // 删除项目
deleteProject(projectId) {
- // 删除项目
+ const project = this.projects.find(p => p.id === projectId);
+ if (!project)
+ return;
this.projects = this.projects.filter(p => p.id !== projectId);
// 删除相关的飞行器
const relatedAircrafts = this.aircrafts.filter(a => a.projectId === projectId);
@@ -255,10 +244,49 @@ class ConfigPanel {
this.configs = this.configs.filter(cfg => !containerIds.includes(cfg.containerId));
// 删除项目路径映射
this.projectPaths.delete(projectId);
- vscode.window.showInformationMessage(`删除项目: ${projectId}`);
+ vscode.window.showInformationMessage(`删除项目: ${project.name}`);
this.updateWebview();
}
- // === 容器相关方法 ===
+ // 更新飞行器名
+ updateAircraftName(aircraftId, newName) {
+ const aircraft = this.aircrafts.find(a => a.id === aircraftId);
+ if (aircraft) {
+ aircraft.name = newName;
+ vscode.window.showInformationMessage(`飞行器名称更新: ${newName}`);
+ this.updateWebview();
+ }
+ }
+ // 创建新飞行器
+ createAircraft(name) {
+ if (!this.currentProjectId) {
+ vscode.window.showErrorMessage('无法创建飞行器:未找到当前项目');
+ return;
+ }
+ const newId = 'a' + (this.aircrafts.length + 1);
+ const newAircraft = {
+ id: newId,
+ name: name,
+ projectId: this.currentProjectId
+ };
+ this.aircrafts.push(newAircraft);
+ vscode.window.showInformationMessage(`新建飞行器: ${name}`);
+ this.updateWebview();
+ }
+ // 删除飞行器
+ deleteAircraft(aircraftId) {
+ const aircraft = this.aircrafts.find(a => a.id === aircraftId);
+ if (!aircraft)
+ return;
+ this.aircrafts = this.aircrafts.filter(a => a.id !== aircraftId);
+ // 删除相关的容器
+ this.containers = this.containers.filter(c => c.aircraftId !== aircraftId);
+ // 删除相关的配置
+ const containerIds = this.containers.filter(c => c.aircraftId === aircraftId).map(c => c.id);
+ this.configs = this.configs.filter(cfg => !containerIds.includes(cfg.containerId));
+ vscode.window.showInformationMessage(`删除飞行器: ${aircraft.name}`);
+ this.updateWebview();
+ }
+ // 更新容器名
updateContainerName(containerId, newName) {
const container = this.containers.find(c => c.id === containerId);
if (container) {
@@ -267,6 +295,7 @@ class ConfigPanel {
this.updateWebview();
}
}
+ // 创建新容器
createContainer(name) {
console.log('创建容器,当前飞行器ID:', this.currentAircraftId);
if (!this.currentAircraftId) {
@@ -282,34 +311,38 @@ class ConfigPanel {
this.containers.push(newContainer);
// 创建两个默认配置文件
const configCount = this.configs.length;
- // 第一个配置文件:Dockerfile
+ // 第一个配置文件
this.configs.push({
id: 'cfg' + (configCount + 1),
- name: 'Docker配置',
- fileName: 'Dockerfile',
+ name: '配置1',
+ fileName: 'config.sh',
content: `# ${name} 的 Dockerfile\nFROM ubuntu:20.04\n\n# 设置工作目录\nWORKDIR /app\n\n# 复制文件\nCOPY . .\n\n# 安装依赖\nRUN apt-get update && apt-get install -y \\\n python3 \\\n python3-pip\n\n# 暴露端口\nEXPOSE 8080\n\n# 启动命令\nCMD ["python3", "app.py"]`,
containerId: newId
});
- // 第二个配置文件:docker-compose.yml
+ // 第二个配置文件
this.configs.push({
id: 'cfg' + (configCount + 2),
- name: '编排配置',
- fileName: 'docker-compose.yml',
+ name: '配置2',
+ fileName: 'config.sh',
content: `# ${name} 的 Docker Compose 配置\nversion: '3.8'\n\nservices:\n ${name.toLowerCase().replace(/\\s+/g, '-')}:\n build: .\n container_name: ${name}\n ports:\n - "8080:8080"\n environment:\n - NODE_ENV=production\n volumes:\n - ./data:/app/data\n restart: unless-stopped`,
containerId: newId
});
vscode.window.showInformationMessage(`新建容器: ${name} (包含2个默认配置文件)`);
this.updateWebview();
}
+ // 删除容器
deleteContainer(containerId) {
+ const container = this.containers.find(c => c.id === containerId);
+ if (!container)
+ return;
// 删除容器
this.containers = this.containers.filter(c => c.id !== containerId);
// 删除相关的配置
this.configs = this.configs.filter(cfg => cfg.containerId !== containerId);
- vscode.window.showInformationMessage(`删除容器: ${containerId}`);
+ vscode.window.showInformationMessage(`删除容器: ${container.name}`);
this.updateWebview();
}
- // === 配置相关方法 ===
+ // 更新配置名
updateConfigName(configId, newName) {
const config = this.configs.find(c => c.id === configId);
if (config) {
@@ -318,6 +351,7 @@ class ConfigPanel {
this.updateWebview();
}
}
+ // 更新文件名
async updateConfigFileName(configId, fileName) {
const config = this.configs.find(c => c.id === configId);
if (config) {
@@ -326,7 +360,7 @@ class ConfigPanel {
this.updateWebview();
}
}
- // 创建配置文件
+ // 创建新配置文件
createConfig(name) {
const newId = 'cfg' + (this.configs.length + 1);
const newConfig = {
@@ -426,35 +460,32 @@ class ConfigPanel {
}
getWebviewContent() {
switch (this.currentView) {
- case 'management':
- return this.projectManagementView.render({
+ case 'projects':
+ return this.projectView.render({
projects: this.projects,
projectPaths: this.projectPaths
});
- case 'projects':
- return this.projectListView.render({
- projects: this.projects
- });
case 'aircrafts':
+ const projectAircrafts = this.aircrafts.filter(a => a.projectId === this.currentProjectId);
+ return this.aircraftView.render({
+ aircrafts: projectAircrafts
+ });
+ case 'containers':
const currentProject = this.projects.find(p => p.id === this.currentProjectId);
- const projectAircraft = this.aircrafts.find(a => a.projectId === this.currentProjectId);
- if (projectAircraft) {
- this.currentAircraftId = projectAircraft.id;
- }
const projectContainers = this.containers.filter(c => c.aircraftId === this.currentAircraftId);
- return this.aircraftConfigView.render({
+ return this.containerView.render({
project: currentProject,
containers: projectContainers
});
- case 'container':
+ case 'configs':
const currentContainer = this.containers.find(c => c.id === this.currentContainerId);
const containerConfigs = this.configs.filter(cfg => cfg.containerId === this.currentContainerId);
- return this.containerConfigView.render({
+ return this.configView.render({
container: currentContainer,
configs: containerConfigs
});
default:
- return this.projectManagementView.render({
+ return this.projectView.render({
projects: this.projects,
projectPaths: this.projectPaths
});
diff --git a/out/panels/ConfigPanel.js.map b/out/panels/ConfigPanel.js.map
index ee4da3e..ecb3d5c 100644
--- a/out/panels/ConfigPanel.js.map
+++ b/out/panels/ConfigPanel.js.map
@@ -1 +1 @@
-{"version":3,"file":"ConfigPanel.js","sourceRoot":"","sources":["../../src/panels/ConfigPanel.ts"],"names":[],"mappings":";;;AAAA,4BAA4B;AAC5B,iCAAiC;AACjC,yEAAsE;AACtE,6DAA0D;AAC1D,mEAAgE;AAChE,qEAAkE;AA4BlE,MAAa,WAAW;IA2Cb,MAAM,CAAC,YAAY,CAAC,YAAwB;QAC/C,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,gBAAgB,EAAE,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC;QAEnF,IAAI,WAAW,CAAC,YAAY,EAAE;YAC1B,WAAW,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC9C,OAAO;SACV;QAED,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAC1C,kBAAkB,EAClB,YAAY,EACZ,MAAM,EACN;YACI,aAAa,EAAE,IAAI;YACnB,kBAAkB,EAAE,CAAC,YAAY,CAAC;YAClC,uBAAuB,EAAE,IAAI;SAChC,CACJ,CAAC;QAEF,WAAW,CAAC,YAAY,GAAG,IAAI,WAAW,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;IACpE,CAAC;IAED,YAAoB,KAA0B,EAAE,YAAwB;QA5DhE,gBAAW,GAA0D,YAAY,CAAC;QAClF,qBAAgB,GAAW,EAAE,CAAC;QAC9B,sBAAiB,GAAW,EAAE,CAAC;QAC/B,uBAAkB,GAAW,EAAE,CAAC;QAExC,OAAO;QACC,aAAQ,GAAc;YAC1B,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE;YACzB,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE;SAC5B,CAAC;QAEM,cAAS,GAAe;YAC5B,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE;YAC7C,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE;SAChD,CAAC;QAEM,eAAU,GAAgB;YAC9B,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE;YAC3C,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE;YAC3C,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE;SAC9C,CAAC;QAEM,YAAO,GAAa;YACxB,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,EAAE;YAC3F,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,EAAE;YAC7F,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,oBAAoB,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,EAAE;YAClG,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,EAAE;SAC9F,CAAC;QAEF,WAAW;QACH,iBAAY,GAAwB,IAAI,GAAG,EAAE,CAAC;QA+BlD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QAEjC,UAAU;QACV,IAAI,CAAC,qBAAqB,GAAG,IAAI,6CAAqB,CAAC,YAAY,CAAC,CAAC;QACrE,IAAI,CAAC,eAAe,GAAG,IAAI,iCAAe,CAAC,YAAY,CAAC,CAAC;QACzD,IAAI,CAAC,kBAAkB,GAAG,IAAI,uCAAkB,CAAC,YAAY,CAAC,CAAC;QAC/D,IAAI,CAAC,mBAAmB,GAAG,IAAI,yCAAmB,CAAC,YAAY,CAAC,CAAC;QAEjE,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAE5B,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,EAAE;YACzB,WAAW,CAAC,YAAY,GAAG,SAAS,CAAC;QACzC,CAAC,CAAC,CAAC;IACP,CAAC;IAEO,oBAAoB;QACxB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,mBAAmB,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YAClD,QAAQ,IAAI,CAAC,IAAI,EAAE;gBACf,KAAK,kBAAkB;oBACnB,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;oBACpF,IAAI,YAAY,EAAE;wBACd,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;wBAC9B,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC;wBACvC,IAAI,CAAC,aAAa,EAAE,CAAC;qBACxB;oBACD,MAAM;gBAEV,KAAK,aAAa;oBACd,aAAa;oBACb,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;oBAC9B,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC;oBACvC,IAAI,CAAC,aAAa,EAAE,CAAC;oBACrB,MAAM;gBAEV,KAAK,oBAAoB;oBACrB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;oBAC/B,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC;oBACvC,aAAa;oBACb,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC;oBAC1E,IAAI,QAAQ,EAAE;wBACV,IAAI,CAAC,iBAAiB,GAAG,QAAQ,CAAC,EAAE,CAAC;qBACxC;oBACD,IAAI,CAAC,aAAa,EAAE,CAAC;oBACrB,MAAM;gBAEV,KAAK,qBAAqB;oBACtB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;oBAC/B,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,WAAW,CAAC;oBAC3C,IAAI,CAAC,aAAa,EAAE,CAAC;oBACrB,MAAM;gBAEV,KAAK,oBAAoB;oBACrB,IAAI,CAAC,WAAW,GAAG,YAAY,CAAC;oBAChC,IAAI,CAAC,aAAa,EAAE,CAAC;oBACrB,MAAM;gBAEV,KAAK,kBAAkB;oBACnB,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;oBAC9B,IAAI,CAAC,aAAa,EAAE,CAAC;oBACrB,MAAM;gBAEV,KAAK,kBAAkB;oBACnB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;oBAC/B,IAAI,CAAC,aAAa,EAAE,CAAC;oBACrB,MAAM;gBAEV,KAAK,mBAAmB;oBACpB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;oBAClD,MAAM;gBAEV,KAAK,eAAe;oBAChB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAC9B,MAAM;gBAEV,KAAK,qBAAqB;oBACtB,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;oBACtD,MAAM;gBAEV,KAAK,iBAAiB;oBAClB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAChC,MAAM;gBAEV,KAAK,kBAAkB;oBACnB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;oBAChD,MAAM;gBAEV,KAAK,sBAAsB;oBACvB,MAAM,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;oBAC9D,MAAM;gBAEV,KAAK,cAAc;oBACf,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAC7B,MAAM;gBAEV,KAAK,gBAAgB;oBACjB,MAAM,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;oBAC7D,MAAM;gBAEV,KAAK,gBAAgB;oBACjB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBACnC,MAAM;gBAEV,KAAK,eAAe;oBAChB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;oBACnC,MAAM;gBAEV,KAAK,iBAAiB;oBAClB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;oBACvC,MAAM;gBAEV,KAAK,cAAc;oBACf,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBACjC,MAAM;aACb;QACL,CAAC,CAAC,CAAC;IACP,CAAC;IAED,iBAAiB;IACT,KAAK,CAAC,iBAAiB,CAAC,SAAiB,EAAE,WAAmB;QAClE,IAAI;YACA,sBAAsB;YACtB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,aAAa,CAC5C;gBACI;oBACI,KAAK,EAAE,mBAAmB;oBAC1B,WAAW,EAAE,iBAAiB;oBAC9B,KAAK,EAAE,QAAQ;iBAClB;gBACD;oBACI,KAAK,EAAE,sBAAsB;oBAC7B,WAAW,EAAE,iBAAiB;oBAC9B,KAAK,EAAE,QAAQ;iBAClB;aACJ,EACD;gBACI,WAAW,EAAE,UAAU;aAC1B,CACJ,CAAC;YAEF,IAAI,CAAC,MAAM,EAAE;gBACT,OAAO,IAAI,CAAC;aACf;YAED,IAAI,MAAM,CAAC,KAAK,KAAK,QAAQ,EAAE;gBAC3B,SAAS;gBACT,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC;oBAC9C,cAAc,EAAE,KAAK;oBACrB,gBAAgB,EAAE,IAAI;oBACtB,aAAa,EAAE,KAAK;oBACpB,SAAS,EAAE,MAAM,WAAW,QAAQ;oBACpC,KAAK,EAAE,QAAQ,WAAW,WAAW;iBACxC,CAAC,CAAC;gBAEH,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;oBAC7B,MAAM,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;oBACtC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;oBAC/C,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,cAAc,YAAY,EAAE,CAAC,CAAC;oBACnE,OAAO,YAAY,CAAC;iBACvB;aACJ;iBAAM;gBACH,QAAQ;gBACR,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC;oBAC/C,MAAM,EAAE,iBAAiB;oBACzB,WAAW,EAAE,yBAAyB,WAAW,EAAE;oBACnD,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE;wBACrB,IAAI,CAAC,KAAK,EAAE;4BACR,OAAO,QAAQ,CAAC;yBACnB;wBACD,OAAO,IAAI,CAAC;oBAChB,CAAC;iBACJ,CAAC,CAAC;gBAEH,IAAI,SAAS,EAAE;oBACX,IAAI;wBACA,SAAS;wBACT,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;wBAC1C,MAAM,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;wBAElD,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;wBAC5C,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,cAAc,SAAS,EAAE,CAAC,CAAC;wBAChE,OAAO,SAAS,CAAC;qBACpB;oBAAC,OAAO,KAAK,EAAE;wBACZ,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,WAAW,KAAK,EAAE,CAAC,CAAC;wBACnD,OAAO,IAAI,CAAC;qBACf;iBACJ;aACJ;YAED,OAAO,IAAI,CAAC;SACf;QAAC,OAAO,KAAK,EAAE;YACZ,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,cAAc,KAAK,EAAE,CAAC,CAAC;YACtD,OAAO,IAAI,CAAC;SACf;IACL,CAAC;IAED,iBAAiB;IACT,iBAAiB,CAAC,SAAiB,EAAE,OAAe;QACxD,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC;QAC5D,IAAI,OAAO,EAAE;YACT,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC;YACvB,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,WAAW,OAAO,EAAE,CAAC,CAAC;YAC3D,IAAI,CAAC,aAAa,EAAE,CAAC;SACxB;IACL,CAAC;IAEO,aAAa,CAAC,IAAY;QAC9B,MAAM,KAAK,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC/C,MAAM,UAAU,GAAY;YACxB,EAAE,EAAE,KAAK;YACT,IAAI,EAAE,IAAI;SACb,CAAC;QACF,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAE/B,iBAAiB;QACjB,MAAM,aAAa,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACxD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YAChB,EAAE,EAAE,aAAa;YACjB,IAAI,EAAE,GAAG,IAAI,IAAI;YACjB,SAAS,EAAE,KAAK;SACnB,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;QACtD,IAAI,CAAC,aAAa,EAAE,CAAC;IACzB,CAAC;IAEO,aAAa,CAAC,SAAiB;QACnC,OAAO;QACP,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC;QAE9D,WAAW;QACX,MAAM,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC;QAC/E,MAAM,WAAW,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACpD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC;QAEvE,UAAU;QACV,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;QAEnF,UAAU;QACV,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACpG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC;QAEnF,WAAW;QACX,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAEpC,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,SAAS,SAAS,EAAE,CAAC,CAAC;QAC3D,IAAI,CAAC,aAAa,EAAE,CAAC;IACzB,CAAC;IAED,iBAAiB;IACT,mBAAmB,CAAC,WAAmB,EAAE,OAAe;QAC5D,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,WAAW,CAAC,CAAC;QAClE,IAAI,SAAS,EAAE;YACX,SAAS,CAAC,IAAI,GAAG,OAAO,CAAC;YACzB,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,WAAW,OAAO,EAAE,CAAC,CAAC;YAC3D,IAAI,CAAC,aAAa,EAAE,CAAC;SACxB;IACL,CAAC;IAEO,eAAe,CAAC,IAAY;QAChC,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAErD,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;YACzB,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,CAAC;YAClD,OAAO;SACV;QAED,MAAM,KAAK,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAEjD,MAAM,YAAY,GAAc;YAC5B,EAAE,EAAE,KAAK;YACT,IAAI,EAAE,IAAI;YACV,UAAU,EAAE,IAAI,CAAC,iBAAiB;SACrC,CAAC;QACF,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAEnC,aAAa;QACb,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;QAExC,qBAAqB;QACrB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;YACd,EAAE,EAAE,KAAK,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC;YAC7B,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE,YAAY;YACtB,OAAO,EAAE,KAAK,IAAI,oOAAoO;YACtP,WAAW,EAAE,KAAK;SACrB,CAAC,CAAC;QAEH,6BAA6B;QAC7B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;YACd,EAAE,EAAE,KAAK,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC;YAC7B,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,oBAAoB;YAC9B,OAAO,EAAE,KAAK,IAAI,wDAAwD,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,wCAAwC,IAAI,uJAAuJ;YACrT,WAAW,EAAE,KAAK;SACrB,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,SAAS,IAAI,eAAe,CAAC,CAAC;QACnE,IAAI,CAAC,aAAa,EAAE,CAAC;IACzB,CAAC;IAEO,eAAe,CAAC,WAAmB;QACvC,OAAO;QACP,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,WAAW,CAAC,CAAC;QAEpE,UAAU;QACV,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,WAAW,KAAK,WAAW,CAAC,CAAC;QAE3E,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,SAAS,WAAW,EAAE,CAAC,CAAC;QAC7D,IAAI,CAAC,aAAa,EAAE,CAAC;IACzB,CAAC;IAED,iBAAiB;IACT,gBAAgB,CAAC,QAAgB,EAAE,OAAe;QACtD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC;QACzD,IAAI,MAAM,EAAE;YACR,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC;YACtB,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,WAAW,OAAO,EAAE,CAAC,CAAC;YAC3D,IAAI,CAAC,aAAa,EAAE,CAAC;SACxB;IACL,CAAC;IAEO,KAAK,CAAC,oBAAoB,CAAC,QAAgB,EAAE,QAAgB;QACjE,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC;QACzD,IAAI,MAAM,EAAE;YACR,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;YAC3B,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,UAAU,QAAQ,EAAE,CAAC,CAAC;YAC3D,IAAI,CAAC,aAAa,EAAE,CAAC;SACxB;IACL,CAAC;IAED,SAAS;IACD,YAAY,CAAC,IAAY;QAC7B,MAAM,KAAK,GAAG,KAAK,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAChD,MAAM,SAAS,GAAW;YACtB,EAAE,EAAE,KAAK;YACT,IAAI,EAAE,IAAI;YACV,QAAQ,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO;YAC3D,OAAO,EAAE,KAAK,IAAI,kBAAkB,IAAI,IAAI,EAAE,CAAC,cAAc,EAAE,qBAAqB;YACpF,WAAW,EAAE,IAAI,CAAC,kBAAkB;SACvC,CAAC;QACF,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAE7B,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;QACtD,IAAI,CAAC,aAAa,EAAE,CAAC;IACzB,CAAC;IAED,SAAS;IACD,YAAY,CAAC,QAAgB;QACjC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC;QACzD,IAAI,MAAM,EAAE;YACR,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC;YAC3D,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,SAAS,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;YAC7D,IAAI,CAAC,aAAa,EAAE,CAAC;SACxB;IACL,CAAC;IAED,YAAY;IACJ,KAAK,CAAC,oBAAoB,CAAC,QAAgB,EAAE,OAAe;QAChE,IAAI;YACA,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC;YACzD,IAAI,CAAC,MAAM,EAAE;gBACT,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;gBAC1C,OAAO;aACV;YAED,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,WAAW,CAAC,CAAC;YACzE,IAAI,CAAC,SAAS,EAAE;gBACZ,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;gBACxC,OAAO;aACV;YAED,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,UAAU,CAAC,CAAC;YACzE,IAAI,CAAC,QAAQ,EAAE;gBACX,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;gBACzC,OAAO;aACV;YAED,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,SAAS,CAAC,CAAC;YACrE,IAAI,CAAC,OAAO,EAAE;gBACV,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;gBACxC,OAAO;aACV;YAED,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YAC9D,IAAI,CAAC,WAAW,EAAE;gBACd,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,CAAC;gBACnD,OAAO;aACV;YAED,2BAA2B;YAC3B,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;YACrF,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;YACtE,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;YAEnE,YAAY;YACZ,IAAI;gBACA,MAAM,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;aAC1D;YAAC,OAAO,KAAK,EAAE;gBACZ,eAAe;aAClB;YAED,WAAW;YACX,IAAI;gBACA,MAAM,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;aAC3D;YAAC,OAAO,KAAK,EAAE;gBACZ,eAAe;aAClB;YAED,OAAO;YACP,MAAM,UAAU,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACrD,MAAM,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;YAEzD,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,YAAY,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;SACtE;QAAC,OAAO,KAAK,EAAE;YACZ,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,YAAY,KAAK,EAAE,CAAC,CAAC;SACvD;IACL,CAAC;IAED,SAAS;IACD,cAAc,CAAC,QAAgB;QACnC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC;QACzD,IAAI,MAAM,EAAE;YACR,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC;gBAC3B,IAAI,EAAE,kBAAkB;gBACxB,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,KAAK,MAAM,CAAC,IAAI,2BAA2B;aACzE,CAAC,CAAC;SACN;aAAM;YACH,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC;gBAC3B,IAAI,EAAE,kBAAkB;gBACxB,OAAO,EAAE,QAAQ,QAAQ,+EAA+E;aAC3G,CAAC,CAAC;SACN;IACL,CAAC;IAED,OAAO;IACC,aAAa;QACjB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;IACvD,CAAC;IAEO,iBAAiB;QACrB,QAAQ,IAAI,CAAC,WAAW,EAAE;YACtB,KAAK,YAAY;gBACb,OAAO,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC;oBACrC,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,YAAY,EAAE,IAAI,CAAC,YAAY;iBAClC,CAAC,CAAC;YACP,KAAK,UAAU;gBACX,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC;oBAC/B,QAAQ,EAAE,IAAI,CAAC,QAAQ;iBAC1B,CAAC,CAAC;YACP,KAAK,WAAW;gBACZ,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,gBAAgB,CAAC,CAAC;gBAC/E,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,IAAI,CAAC,gBAAgB,CAAC,CAAC;gBAExF,IAAI,eAAe,EAAE;oBACjB,IAAI,CAAC,iBAAiB,GAAG,eAAe,CAAC,EAAE,CAAC;iBAC/C;gBAED,MAAM,iBAAiB,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,IAAI,CAAC,iBAAiB,CAAC,CAAC;gBAE/F,OAAO,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC;oBAClC,OAAO,EAAE,cAAc;oBACvB,UAAU,EAAE,iBAAiB;iBAChC,CAAC,CAAC;YACP,KAAK,WAAW;gBACZ,MAAM,gBAAgB,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,kBAAkB,CAAC,CAAC;gBACrF,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,WAAW,KAAK,IAAI,CAAC,kBAAkB,CAAC,CAAC;gBAEjG,OAAO,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC;oBACnC,SAAS,EAAE,gBAAgB;oBAC3B,OAAO,EAAE,gBAAgB;iBAC5B,CAAC,CAAC;YACP;gBACI,OAAO,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC;oBACrC,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,YAAY,EAAE,IAAI,CAAC,YAAY;iBAClC,CAAC,CAAC;SACV;IACL,CAAC;CACJ;AAniBD,kCAmiBC"}
\ No newline at end of file
+{"version":3,"file":"ConfigPanel.js","sourceRoot":"","sources":["../../src/panels/ConfigPanel.ts"],"names":[],"mappings":";;;AAAA,4BAA4B;AAC5B,iCAAiC;AACjC,qDAAkD;AAClD,uDAAoD;AACpD,yDAAsD;AACtD,mDAAgD;AA4BhD,MAAa,WAAW;IAyBb,MAAM,CAAC,YAAY,CAAC,YAAwB;QAC/C,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,gBAAgB,EAAE,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC;QAEnF,IAAI,WAAW,CAAC,YAAY,EAAE;YAC1B,WAAW,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC9C,OAAO;SACV;QAED,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAC1C,MAAM,EACN,UAAU,EACV,MAAM,EACN;YACI,aAAa,EAAE,IAAI;YACnB,kBAAkB,EAAE,CAAC,YAAY,CAAC;YAClC,uBAAuB,EAAE,IAAI;SAChC,CACJ,CAAC;QAEF,WAAW,CAAC,YAAY,GAAG,IAAI,WAAW,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;IACpE,CAAC;IAED,YAAoB,KAA0B,EAAE,YAAwB;QA1ChE,gBAAW,GAAwD,UAAU,CAAC;QAC9E,qBAAgB,GAAW,EAAE,CAAC;QAC9B,sBAAiB,GAAW,EAAE,CAAC;QAC/B,uBAAkB,GAAW,EAAE,CAAC;QAExC,OAAO;QACC,aAAQ,GAAc,EAAE,CAAC;QACzB,cAAS,GAAe,EAAE,CAAC;QAC3B,eAAU,GAAgB,EAAE,CAAC;QAC7B,YAAO,GAAa,EAAE,CAAC;QAE/B,WAAW;QACH,iBAAY,GAAwB,IAAI,GAAG,EAAE,CAAC;QA+BlD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QAEjC,UAAU;QACV,IAAI,CAAC,WAAW,GAAG,IAAI,yBAAW,CAAC,YAAY,CAAC,CAAC;QACjD,IAAI,CAAC,YAAY,GAAG,IAAI,2BAAY,CAAC,YAAY,CAAC,CAAC;QACnD,IAAI,CAAC,aAAa,GAAG,IAAI,6BAAa,CAAC,YAAY,CAAC,CAAC;QACrD,IAAI,CAAC,UAAU,GAAG,IAAI,uBAAU,CAAC,YAAY,CAAC,CAAC;QAE/C,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAE5B,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,EAAE;YACzB,WAAW,CAAC,YAAY,GAAG,SAAS,CAAC;QACzC,CAAC,CAAC,CAAC;IACP,CAAC;IAEO,oBAAoB;QACxB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,mBAAmB,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YAClD,QAAQ,IAAI,CAAC,IAAI,EAAE;gBACf,KAAK,kBAAkB;oBACnB,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;oBACpF,IAAI,YAAY,EAAE;wBACd,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;wBAC/B,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC;wBACvC,IAAI,CAAC,aAAa,EAAE,CAAC;qBACxB;oBACD,MAAM;gBAEV,KAAK,aAAa;oBACd,aAAa;oBACb,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;oBAC/B,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC;oBACvC,IAAI,CAAC,aAAa,EAAE,CAAC;oBACrB,MAAM;gBAEV,KAAK,oBAAoB;oBACrB,IAAI,CAAC,WAAW,GAAG,YAAY,CAAC;oBAChC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC;oBACvC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,UAAU,CAAC;oBACzC,IAAI,CAAC,aAAa,EAAE,CAAC;oBACrB,MAAM;gBAEV,KAAK,qBAAqB;oBACtB,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;oBAC7B,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,WAAW,CAAC;oBAC3C,IAAI,CAAC,aAAa,EAAE,CAAC;oBACrB,MAAM;gBAEV,cAAc;gBACd,KAAK,kBAAkB;oBACnB,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;oBAC9B,IAAI,CAAC,aAAa,EAAE,CAAC;oBACrB,MAAM;gBAEV,KAAK,mBAAmB;oBACpB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;oBAC/B,IAAI,CAAC,aAAa,EAAE,CAAC;oBACrB,MAAM;gBAEV,KAAK,oBAAoB;oBACrB,IAAI,CAAC,WAAW,GAAG,YAAY,CAAC;oBAChC,IAAI,CAAC,aAAa,EAAE,CAAC;oBACrB,MAAM;gBAEV,KAAK,mBAAmB;oBACpB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;oBAClD,MAAM;gBAEV,KAAK,eAAe;oBAChB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAC9B,MAAM;gBAEV,KAAK,oBAAoB;oBACrB,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;oBACpD,MAAM;gBAEV,KAAK,gBAAgB;oBACjB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAC/B,MAAM;gBAEV,KAAK,qBAAqB;oBACtB,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;oBACtD,MAAM;gBAEV,KAAK,iBAAiB;oBAClB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAChC,MAAM;gBAEV,KAAK,kBAAkB;oBACnB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;oBAChD,MAAM;gBAEV,KAAK,sBAAsB;oBACvB,MAAM,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;oBAC9D,MAAM;gBAEV,KAAK,cAAc;oBACf,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAC7B,MAAM;gBAEV,KAAK,gBAAgB;oBACjB,MAAM,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;oBAC7D,MAAM;gBAEV,KAAK,gBAAgB;oBACjB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBACnC,MAAM;gBAEV,KAAK,eAAe;oBAChB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;oBACnC,MAAM;gBAEV,KAAK,gBAAgB;oBACjB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;oBACrC,MAAM;gBAEV,KAAK,iBAAiB;oBAClB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;oBACvC,MAAM;gBAEV,KAAK,cAAc;oBACf,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBACjC,MAAM;aACb;QACL,CAAC,CAAC,CAAC;IACP,CAAC;IAED,qEAAqE;IACrE,iBAAiB;IACT,KAAK,CAAC,iBAAiB,CAAC,SAAiB,EAAE,WAAmB;QAClE,IAAI;YACA,eAAe;YACf,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,aAAa,CAC5C;gBACI;oBACI,KAAK,EAAE,mBAAmB;oBAC1B,WAAW,EAAE,iBAAiB;oBAC9B,KAAK,EAAE,QAAQ;iBAClB;gBACD;oBACI,KAAK,EAAE,sBAAsB;oBAC7B,WAAW,EAAE,iBAAiB;oBAC9B,KAAK,EAAE,QAAQ;iBAClB;aACJ,EACD;gBACI,WAAW,EAAE,UAAU;aAC1B,CACJ,CAAC;YAEF,IAAI,CAAC,MAAM,EAAE;gBACT,OAAO,IAAI,CAAC;aACf;YAED,IAAI,MAAM,CAAC,KAAK,KAAK,QAAQ,EAAE;gBAC3B,SAAS;gBACT,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC;oBAC9C,cAAc,EAAE,KAAK;oBACrB,gBAAgB,EAAE,IAAI;oBACtB,aAAa,EAAE,KAAK;oBACpB,SAAS,EAAE,MAAM,WAAW,QAAQ;oBACpC,KAAK,EAAE,QAAQ,WAAW,WAAW;iBACxC,CAAC,CAAC;gBAEH,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;oBAC7B,MAAM,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;oBACtC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;oBAC/C,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,cAAc,YAAY,EAAE,CAAC,CAAC;oBACnE,OAAO,YAAY,CAAC;iBACvB;aACJ;iBAAM;gBACH,QAAQ;gBACR,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC;oBAC/C,MAAM,EAAE,iBAAiB;oBACzB,WAAW,EAAE,yBAAyB,WAAW,EAAE;oBACnD,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE;wBACrB,IAAI,CAAC,KAAK,EAAE;4BACR,OAAO,QAAQ,CAAC;yBACnB;wBACD,OAAO,IAAI,CAAC;oBAChB,CAAC;iBACJ,CAAC,CAAC;gBAEH,IAAI,SAAS,EAAE;oBACX,IAAI;wBACA,SAAS;wBACT,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;wBAC1C,MAAM,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;wBAElD,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;wBAC5C,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,cAAc,SAAS,EAAE,CAAC,CAAC;wBAChE,OAAO,SAAS,CAAC;qBACpB;oBAAC,OAAO,KAAK,EAAE;wBACZ,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,WAAW,KAAK,EAAE,CAAC,CAAC;wBACnD,OAAO,IAAI,CAAC;qBACf;iBACJ;aACJ;YAED,OAAO,IAAI,CAAC;SACf;QAAC,OAAO,KAAK,EAAE;YACZ,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,cAAc,KAAK,EAAE,CAAC,CAAC;YACtD,OAAO,IAAI,CAAC;SACf;IACL,CAAC;IAED,QAAQ;IACA,iBAAiB,CAAC,SAAiB,EAAE,OAAe;QACxD,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC;QAC5D,IAAI,OAAO,EAAE;YACT,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC;YACvB,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,WAAW,OAAO,EAAE,CAAC,CAAC;YAC3D,IAAI,CAAC,aAAa,EAAE,CAAC;SACxB;IACL,CAAC;IAED,QAAQ;IACA,aAAa,CAAC,IAAY;QAC9B,MAAM,KAAK,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC/C,MAAM,UAAU,GAAY;YACxB,EAAE,EAAE,KAAK;YACT,IAAI,EAAE,IAAI;SACb,CAAC;QACF,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAE/B,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;QACtD,IAAI,CAAC,aAAa,EAAE,CAAC;IACzB,CAAC;IAED,OAAO;IACC,aAAa,CAAC,SAAiB;QACnC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC;QAC5D,IAAI,CAAC,OAAO;YAAE,OAAO;QAErB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC;QAC9D,WAAW;QACX,MAAM,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC;QAC/E,MAAM,WAAW,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACpD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC;QACvE,UAAU;QACV,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;QACnF,UAAU;QACV,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACpG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC;QACnF,WAAW;QACX,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAEpC,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,SAAS,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAC9D,IAAI,CAAC,aAAa,EAAE,CAAC;IACzB,CAAC;IAED,SAAS;IACD,kBAAkB,CAAC,UAAkB,EAAE,OAAe;QAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,UAAU,CAAC,CAAC;QAC/D,IAAI,QAAQ,EAAE;YACV,QAAQ,CAAC,IAAI,GAAG,OAAO,CAAC;YACxB,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,YAAY,OAAO,EAAE,CAAC,CAAC;YAC5D,IAAI,CAAC,aAAa,EAAE,CAAC;SACxB;IACL,CAAC;IAED,SAAS;IACD,cAAc,CAAC,IAAY;QAC/B,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;YACxB,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,CAAC;YAClD,OAAO;SACV;QAED,MAAM,KAAK,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAChD,MAAM,WAAW,GAAa;YAC1B,EAAE,EAAE,KAAK;YACT,IAAI,EAAE,IAAI;YACV,SAAS,EAAE,IAAI,CAAC,gBAAgB;SACnC,CAAC;QACF,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAEjC,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;QACvD,IAAI,CAAC,aAAa,EAAE,CAAC;IACzB,CAAC;IAED,QAAQ;IACA,cAAc,CAAC,UAAkB;QACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,UAAU,CAAC,CAAC;QAC/D,IAAI,CAAC,QAAQ;YAAE,OAAO;QAEtB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,UAAU,CAAC,CAAC;QACjE,UAAU;QACV,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,UAAU,CAAC,CAAC;QAC3E,UAAU;QACV,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC7F,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC;QAEnF,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,UAAU,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;QAChE,IAAI,CAAC,aAAa,EAAE,CAAC;IACzB,CAAC;IAED,QAAQ;IACA,mBAAmB,CAAC,WAAmB,EAAE,OAAe;QAC5D,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,WAAW,CAAC,CAAC;QAClE,IAAI,SAAS,EAAE;YACX,SAAS,CAAC,IAAI,GAAG,OAAO,CAAC;YACzB,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,WAAW,OAAO,EAAE,CAAC,CAAC;YAC3D,IAAI,CAAC,aAAa,EAAE,CAAC;SACxB;IACL,CAAC;IAED,QAAQ;IACA,eAAe,CAAC,IAAY;QAChC,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAErD,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;YACzB,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,CAAC;YAClD,OAAO;SACV;QAED,MAAM,KAAK,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAEjD,MAAM,YAAY,GAAc;YAC5B,EAAE,EAAE,KAAK;YACT,IAAI,EAAE,IAAI;YACV,UAAU,EAAE,IAAI,CAAC,iBAAiB;SACrC,CAAC;QACF,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAEnC,aAAa;QACb,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;QAExC,UAAU;QACV,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;YACd,EAAE,EAAE,KAAK,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC;YAC7B,IAAI,EAAE,KAAK;YACX,QAAQ,EAAE,WAAW;YACrB,OAAO,EAAE,KAAK,IAAI,oOAAoO;YACtP,WAAW,EAAE,KAAK;SACrB,CAAC,CAAC;QAEH,UAAU;QACV,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;YACd,EAAE,EAAE,KAAK,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC;YAC7B,IAAI,EAAE,KAAK;YACX,QAAQ,EAAE,WAAW;YACrB,OAAO,EAAE,KAAK,IAAI,wDAAwD,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,wCAAwC,IAAI,uJAAuJ;YACrT,WAAW,EAAE,KAAK;SACrB,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,SAAS,IAAI,eAAe,CAAC,CAAC;QACnE,IAAI,CAAC,aAAa,EAAE,CAAC;IACzB,CAAC;IAED,OAAO;IACC,eAAe,CAAC,WAAmB;QACvC,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,WAAW,CAAC,CAAC;QAClE,IAAI,CAAC,SAAS;YAAE,OAAO;QAEvB,OAAO;QACP,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,WAAW,CAAC,CAAC;QAEpE,UAAU;QACV,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,WAAW,KAAK,WAAW,CAAC,CAAC;QAE3E,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,SAAS,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;QAChE,IAAI,CAAC,aAAa,EAAE,CAAC;IACzB,CAAC;IAED,QAAQ;IACA,gBAAgB,CAAC,QAAgB,EAAE,OAAe;QACtD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC;QACzD,IAAI,MAAM,EAAE;YACR,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC;YACtB,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,WAAW,OAAO,EAAE,CAAC,CAAC;YAC3D,IAAI,CAAC,aAAa,EAAE,CAAC;SACxB;IACL,CAAC;IAED,QAAQ;IACA,KAAK,CAAC,oBAAoB,CAAC,QAAgB,EAAE,QAAgB;QACjE,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC;QACzD,IAAI,MAAM,EAAE;YACR,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;YAC3B,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,UAAU,QAAQ,EAAE,CAAC,CAAC;YAC3D,IAAI,CAAC,aAAa,EAAE,CAAC;SACxB;IACL,CAAC;IAED,UAAU;IACF,YAAY,CAAC,IAAY;QAC7B,MAAM,KAAK,GAAG,KAAK,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAChD,MAAM,SAAS,GAAW;YACtB,EAAE,EAAE,KAAK;YACT,IAAI,EAAE,IAAI;YACV,QAAQ,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO;YAC3D,OAAO,EAAE,KAAK,IAAI,kBAAkB,IAAI,IAAI,EAAE,CAAC,cAAc,EAAE,qBAAqB;YACpF,WAAW,EAAE,IAAI,CAAC,kBAAkB;SACvC,CAAC;QACF,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAE7B,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;QACtD,IAAI,CAAC,aAAa,EAAE,CAAC;IACzB,CAAC;IAED,SAAS;IACD,YAAY,CAAC,QAAgB;QACjC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC;QACzD,IAAI,MAAM,EAAE;YACR,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC;YAC3D,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,SAAS,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;YAC7D,IAAI,CAAC,aAAa,EAAE,CAAC;SACxB;IACL,CAAC;IAED,YAAY;IACJ,KAAK,CAAC,oBAAoB,CAAC,QAAgB,EAAE,OAAe;QAChE,IAAI;YACA,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC;YACzD,IAAI,CAAC,MAAM,EAAE;gBACT,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;gBAC1C,OAAO;aACV;YAED,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,WAAW,CAAC,CAAC;YACzE,IAAI,CAAC,SAAS,EAAE;gBACZ,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;gBACxC,OAAO;aACV;YAED,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,UAAU,CAAC,CAAC;YACzE,IAAI,CAAC,QAAQ,EAAE;gBACX,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;gBACzC,OAAO;aACV;YAED,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,SAAS,CAAC,CAAC;YACrE,IAAI,CAAC,OAAO,EAAE;gBACV,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;gBACxC,OAAO;aACV;YAED,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YAC9D,IAAI,CAAC,WAAW,EAAE;gBACd,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,CAAC;gBACnD,OAAO;aACV;YAED,2BAA2B;YAC3B,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;YACrF,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;YACtE,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;YAEnE,YAAY;YACZ,IAAI;gBACA,MAAM,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;aAC1D;YAAC,OAAO,KAAK,EAAE;gBACZ,eAAe;aAClB;YAED,WAAW;YACX,IAAI;gBACA,MAAM,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;aAC3D;YAAC,OAAO,KAAK,EAAE;gBACZ,eAAe;aAClB;YAED,OAAO;YACP,MAAM,UAAU,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACrD,MAAM,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;YAEzD,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,YAAY,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;SACtE;QAAC,OAAO,KAAK,EAAE;YACZ,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,YAAY,KAAK,EAAE,CAAC,CAAC;SACvD;IACL,CAAC;IAED,SAAS;IACD,cAAc,CAAC,QAAgB;QACnC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC;QACzD,IAAI,MAAM,EAAE;YACR,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC;gBAC3B,IAAI,EAAE,kBAAkB;gBACxB,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,KAAK,MAAM,CAAC,IAAI,2BAA2B;aACzE,CAAC,CAAC;SACN;aAAM;YACH,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC;gBAC3B,IAAI,EAAE,kBAAkB;gBACxB,OAAO,EAAE,QAAQ,QAAQ,+EAA+E;aAC3G,CAAC,CAAC;SACN;IACL,CAAC;IAED,OAAO;IACC,aAAa;QACjB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;IACvD,CAAC;IAEO,iBAAiB;QACrB,QAAQ,IAAI,CAAC,WAAW,EAAE;YACtB,KAAK,UAAU;gBACX,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;oBAC3B,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,YAAY,EAAE,IAAI,CAAC,YAAY;iBAClC,CAAC,CAAC;YACP,KAAK,WAAW;gBACZ,MAAM,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,IAAI,CAAC,gBAAgB,CAAC,CAAC;gBAC3F,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;oBAC5B,SAAS,EAAE,gBAAgB;iBAC9B,CAAC,CAAC;YACP,KAAK,YAAY;gBACb,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,gBAAgB,CAAC,CAAC;gBAC/E,MAAM,iBAAiB,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,IAAI,CAAC,iBAAiB,CAAC,CAAC;gBAE/F,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;oBAC7B,OAAO,EAAE,cAAc;oBACvB,UAAU,EAAE,iBAAiB;iBAChC,CAAC,CAAC;YACP,KAAK,SAAS;gBACV,MAAM,gBAAgB,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,kBAAkB,CAAC,CAAC;gBACrF,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,WAAW,KAAK,IAAI,CAAC,kBAAkB,CAAC,CAAC;gBAEjG,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;oBAC1B,SAAS,EAAE,gBAAgB;oBAC3B,OAAO,EAAE,gBAAgB;iBAC5B,CAAC,CAAC;YACP;gBACI,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;oBAC3B,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,YAAY,EAAE,IAAI,CAAC,YAAY;iBAClC,CAAC,CAAC;SACV;IACL,CAAC;CACJ;AAjkBD,kCAikBC"}
\ No newline at end of file
diff --git a/out/panels/views/AircraftView.js b/out/panels/views/AircraftView.js
new file mode 100644
index 0000000..abdc96a
--- /dev/null
+++ b/out/panels/views/AircraftView.js
@@ -0,0 +1,204 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.AircraftView = void 0;
+// src/panels/views/AircraftView.ts
+const BaseView_1 = require("./BaseView");
+class AircraftView extends BaseView_1.BaseView {
+ render(data) {
+ const aircrafts = data?.aircrafts || [];
+ // 生成飞行器列表的 HTML
+ const aircraftsHtml = aircrafts.map((aircraft) => {
+ return `
+
+ |
+ 🛸 ${aircraft.name}
+ |
+
+ 配置
+ |
+
+
+ |
+
+ `;
+ }).join('');
+ return `
+
+
+
+
+ 飞行器管理
+ ${this.getStyles()}
+
+
+
+
+
+
+ | 飞行器 |
+ 配置 |
+ 操作 |
+
+
+
+ ${aircraftsHtml}
+
+ |
+
+ |
+
+
+
+
+
+
+`;
+ }
+}
+exports.AircraftView = AircraftView;
+//# sourceMappingURL=AircraftView.js.map
\ No newline at end of file
diff --git a/out/panels/views/AircraftView.js.map b/out/panels/views/AircraftView.js.map
new file mode 100644
index 0000000..1ffca0e
--- /dev/null
+++ b/out/panels/views/AircraftView.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"AircraftView.js","sourceRoot":"","sources":["../../../src/panels/views/AircraftView.ts"],"names":[],"mappings":";;;AAAA,mCAAmC;AACnC,yCAAsC;AAEtC,MAAa,YAAa,SAAQ,mBAAQ;IACtC,MAAM,CAAC,IAA2B;QAC9B,MAAM,SAAS,GAAG,IAAI,EAAE,SAAS,IAAI,EAAE,CAAC;QAExC,gBAAgB;QAChB,MAAM,aAAa,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,QAAa,EAAE,EAAE;YAClD,OAAO;;;wEAGqD,QAAQ,CAAC,EAAE,OAAO,QAAQ,CAAC,IAAI,UAAU,QAAQ,CAAC,IAAI;;;2EAGnD,QAAQ,CAAC,EAAE;;;0EAGZ,QAAQ,CAAC,EAAE;;;aAGxE,CAAC;QACN,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEZ,OAAO;;;;;;MAMT,IAAI,CAAC,SAAS,EAAE;;;;;;;;;;;;;;;;cAgBR,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAyJnB,CAAC;IACL,CAAC;CACJ;AAtMD,oCAsMC"}
\ No newline at end of file
diff --git a/out/panels/views/ConfigView.js b/out/panels/views/ConfigView.js
new file mode 100644
index 0000000..b1bfba6
--- /dev/null
+++ b/out/panels/views/ConfigView.js
@@ -0,0 +1,271 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.ConfigView = void 0;
+// src/panels/views/ConfigView.ts
+const BaseView_1 = require("./BaseView");
+class ConfigView extends BaseView_1.BaseView {
+ render(data) {
+ const container = data?.container;
+ const configs = data?.configs || [];
+ // 生成配置列表的 HTML - 添加文件名编辑功能
+ const configsHtml = configs.map((config) => `
+
+ |
+ 🔧 ${config.name}
+ |
+
+ 📄 ${config.fileName}
+ |
+
+
+ |
+
+ `).join('');
+ return `
+
+
+
+
+ 配置管理
+ ${this.getStyles()}
+
+
+
+
+
+
+
+ | 配置 |
+ 文件 |
+ 操作 |
+
+
+
+ ${configsHtml}
+
+ |
+
+ |
+
+
+
+
+
+
+
📝 编辑配置文件
+
+
+
+
+
+
+
+
+
+`;
+ }
+}
+exports.ConfigView = ConfigView;
+//# sourceMappingURL=ConfigView.js.map
\ No newline at end of file
diff --git a/out/panels/views/ConfigView.js.map b/out/panels/views/ConfigView.js.map
new file mode 100644
index 0000000..a6e293a
--- /dev/null
+++ b/out/panels/views/ConfigView.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"ConfigView.js","sourceRoot":"","sources":["../../../src/panels/views/ConfigView.ts"],"names":[],"mappings":";;;AAAA,iCAAiC;AACjC,yCAAsC;AAGtC,MAAa,UAAW,SAAQ,mBAAQ;IACpC,MAAM,CAAC,IAA0B;QAC7B,MAAM,SAAS,GAAG,IAAI,EAAE,SAAS,CAAC;QAClC,MAAM,OAAO,GAAG,IAAI,EAAE,OAAO,IAAI,EAAE,CAAC;QAEpC,2BAA2B;QAC3B,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAsB,EAAE,EAAE,CAAC;;;sEAGE,MAAM,CAAC,EAAE,OAAO,MAAM,CAAC,IAAI,UAAU,MAAM,CAAC,IAAI;;;oEAGlD,MAAM,CAAC,EAAE,OAAO,MAAM,CAAC,QAAQ,UAAU,MAAM,CAAC,QAAQ;;;wEAGpD,MAAM,CAAC,EAAE;;;SAGxE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEZ,OAAO;;;;;;MAMT,IAAI,CAAC,SAAS,EAAE;;;;gFAI0D,SAAS,EAAE,IAAI,IAAI,MAAM;;;;;;;;;;;;;cAa3F,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA4NjB,CAAC;IACL,CAAC;CACJ;AAzQD,gCAyQC"}
\ No newline at end of file
diff --git a/out/panels/views/ContainerView.js b/out/panels/views/ContainerView.js
new file mode 100644
index 0000000..f9562b8
--- /dev/null
+++ b/out/panels/views/ContainerView.js
@@ -0,0 +1,204 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.ContainerView = void 0;
+// src/panels/views/ContainerView.ts
+const BaseView_1 = require("./BaseView");
+class ContainerView extends BaseView_1.BaseView {
+ render(data) {
+ const project = data?.project;
+ const containers = data?.containers || [];
+ // 生成容器列表的 HTML
+ const containersHtml = containers.map((container) => `
+
+ |
+ 📦 ${container.name}
+ |
+
+ 配置文件
+ |
+
+
+ |
+
+ `).join('');
+ return `
+
+
+
+
+ 容器管理
+ ${this.getStyles()}
+
+
+
+
+
+
+
+ | 容器 |
+ 配置文件 |
+ 操作 |
+
+
+
+ ${containersHtml}
+
+ |
+
+ |
+
+
+
+
+
+
+`;
+ }
+}
+exports.ContainerView = ContainerView;
+//# sourceMappingURL=ContainerView.js.map
\ No newline at end of file
diff --git a/out/panels/views/ContainerView.js.map b/out/panels/views/ContainerView.js.map
new file mode 100644
index 0000000..b8d9c99
--- /dev/null
+++ b/out/panels/views/ContainerView.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"ContainerView.js","sourceRoot":"","sources":["../../../src/panels/views/ContainerView.ts"],"names":[],"mappings":";;;AAAA,oCAAoC;AACpC,yCAAsC;AAGtC,MAAa,aAAc,SAAQ,mBAAQ;IACvC,MAAM,CAAC,IAAyB;QAC5B,MAAM,OAAO,GAAG,IAAI,EAAE,OAAO,CAAC;QAC9B,MAAM,UAAU,GAAG,IAAI,EAAE,UAAU,IAAI,EAAE,CAAC;QAE1C,eAAe;QACf,MAAM,cAAc,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,SAA4B,EAAE,EAAE,CAAC;;;yEAGP,SAAS,CAAC,EAAE,OAAO,SAAS,CAAC,IAAI,UAAU,SAAS,CAAC,IAAI;;;4EAGtD,SAAS,CAAC,EAAE;;;2EAGb,SAAS,CAAC,EAAE;;;SAG9E,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEZ,OAAO;;;;;;MAMT,IAAI,CAAC,SAAS,EAAE;;;;gFAI0D,OAAO,EAAE,IAAI,IAAI,MAAM;;;;;;;;;;;;;cAazF,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAyJpB,CAAC;IACL,CAAC;CACJ;AAtMD,sCAsMC"}
\ No newline at end of file
diff --git a/out/panels/views/ProjectListView.js b/out/panels/views/ProjectListView.js
index e026734..1de2436 100644
--- a/out/panels/views/ProjectListView.js
+++ b/out/panels/views/ProjectListView.js
@@ -6,11 +6,16 @@ const BaseView_1 = require("./BaseView");
class ProjectListView extends BaseView_1.BaseView {
render(data) {
const projects = data?.projects || [];
- // 生成项目列表的 HTML
- const projectsHtml = projects.map((project) => `
+ const aircrafts = data?.aircrafts || [];
+ // 生成项目列表的 HTML - 显示飞行器名称
+ const projectsHtml = projects.map((project) => {
+ // 找到对应的飞行器 - 使用内联类型定义
+ const aircraft = aircrafts.find((a) => a.projectId === project.id);
+ const displayName = aircraft ? aircraft.name : project.name;
+ return `
|
- 🛸 ${project.name}
+ 🛸 ${displayName}
|
配置
@@ -19,7 +24,8 @@ class ProjectListView extends BaseView_1.BaseView {
|
- `).join('');
+ `;
+ }).join('');
return `
diff --git a/out/panels/views/ProjectListView.js.map b/out/panels/views/ProjectListView.js.map
index 9f9050a..e57e213 100644
--- a/out/panels/views/ProjectListView.js.map
+++ b/out/panels/views/ProjectListView.js.map
@@ -1 +1 @@
-{"version":3,"file":"ProjectListView.js","sourceRoot":"","sources":["../../../src/panels/views/ProjectListView.ts"],"names":[],"mappings":";;;AAAA,sCAAsC;AACtC,yCAAsC;AAGtC,MAAa,eAAgB,SAAQ,mBAAQ;IACzC,MAAM,CAAC,IAAsB;QACzB,MAAM,QAAQ,GAAG,IAAI,EAAE,QAAQ,IAAI,EAAE,CAAC;QAEtC,eAAe;QACf,MAAM,YAAY,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAwB,EAAE,EAAE,CAAC;;;uEAGD,OAAO,CAAC,EAAE,OAAO,OAAO,CAAC,IAAI,UAAU,OAAO,CAAC,IAAI;;;2EAG/C,OAAO,CAAC,EAAE;;;yEAGZ,OAAO,CAAC,EAAE;;;SAG1E,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEZ,OAAO;;;;;;MAMT,IAAI,CAAC,SAAS,EAAE;;;;;;;;;;;;;;;;cAgBR,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAyJlB,CAAC;IACL,CAAC;CACJ;AApMD,0CAoMC"}
\ No newline at end of file
+{"version":3,"file":"ProjectListView.js","sourceRoot":"","sources":["../../../src/panels/views/ProjectListView.ts"],"names":[],"mappings":";;;AAAA,sCAAsC;AACtC,yCAAsC;AAGtC,MAAa,eAAgB,SAAQ,mBAAQ;IACzC,MAAM,CAAC,IAAsB;QACzB,MAAM,QAAQ,GAAG,IAAI,EAAE,QAAQ,IAAI,EAAE,CAAC;QACtC,MAAM,SAAS,GAAG,IAAI,EAAE,SAAS,IAAI,EAAE,CAAC;QAExC,yBAAyB;QACzB,MAAM,YAAY,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAwB,EAAE,EAAE;YAC3D,sBAAsB;YACtB,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,OAAO,CAAC,EAAE,CAAC,CAAC;YACxE,MAAM,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;YAE5D,OAAO;;;uEAGoD,OAAO,CAAC,EAAE,OAAO,OAAO,CAAC,IAAI,UAAU,WAAW;;;2EAG9C,OAAO,CAAC,EAAE;;;yEAGZ,OAAO,CAAC,EAAE;;;aAGtE,CAAC;QACN,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEZ,OAAO;;;;;;MAMT,IAAI,CAAC,SAAS,EAAE;;;;;;;;;;;;;;;;cAgBR,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAyJlB,CAAC;IACL,CAAC;CACJ;AA3MD,0CA2MC"}
\ No newline at end of file
diff --git a/out/panels/views/ProjectView.js b/out/panels/views/ProjectView.js
new file mode 100644
index 0000000..fba0196
--- /dev/null
+++ b/out/panels/views/ProjectView.js
@@ -0,0 +1,256 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.ProjectView = void 0;
+// src/panels/views/ProjectView.ts
+const BaseView_1 = require("./BaseView");
+class ProjectView extends BaseView_1.BaseView {
+ render(data) {
+ const projects = data?.projects || [];
+ const projectPaths = data?.projectPaths || new Map();
+ const projectsHtml = projects.map((project) => {
+ const isConfigured = projectPaths.has(project.id);
+ const statusIcon = isConfigured ? '✅' : '⚙️';
+ const statusText = isConfigured ? '已配置' : '待配置';
+ return `
+
+ |
+ ${statusIcon} ${project.name}
+
+ ${statusText}${isConfigured ? ` - ${projectPaths.get(project.id)}` : ''}
+
+ |
+
+
+ ${isConfigured ? '打开' : '配置'}
+
+ |
+
+
+ |
+
+ `;
+ }).join('');
+ return `
+
+
+
+
+ 数字卫星构建平台
+ ${this.getStyles()}
+
+
+
+ 🛰️数字卫星构建平台
+
+
+
+ | 项目 |
+ 配置 |
+ 操作 |
+
+
+
+ ${projectsHtml}
+
+ |
+
+ |
+
+
+
+
+
+
+`;
+ }
+}
+exports.ProjectView = ProjectView;
+//# sourceMappingURL=ProjectView.js.map
\ No newline at end of file
diff --git a/out/panels/views/ProjectView.js.map b/out/panels/views/ProjectView.js.map
new file mode 100644
index 0000000..8212267
--- /dev/null
+++ b/out/panels/views/ProjectView.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"ProjectView.js","sourceRoot":"","sources":["../../../src/panels/views/ProjectView.ts"],"names":[],"mappings":";;;AAAA,kCAAkC;AAClC,yCAAsC;AAGtC,MAAa,WAAY,SAAQ,mBAAQ;IACrC,MAAM,CAAC,IAA0E;QAC7E,MAAM,QAAQ,GAAG,IAAI,EAAE,QAAQ,IAAI,EAAE,CAAC;QACtC,MAAM,YAAY,GAAG,IAAI,EAAE,YAAY,IAAI,IAAI,GAAG,EAAE,CAAC;QAErD,MAAM,YAAY,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAwB,EAAE,EAAE;YAC3D,MAAM,YAAY,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAClD,MAAM,UAAU,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;YAC7C,MAAM,UAAU,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;YAEhD,OAAO;;;kEAG+C,OAAO,CAAC,EAAE,KAAK,UAAU,IAAI,OAAO,CAAC,IAAI;;0BAEjF,UAAU,GAAG,YAAY,CAAC,CAAC,CAAC,MAAM,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;;;;yEAItB,OAAO,CAAC,EAAE,OAAO,OAAO,CAAC,IAAI,MAAM,YAAY;0BAC9F,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI;;;;yEAIqB,OAAO,CAAC,EAAE;;;SAG1E,CAAA;QAAA,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEb,OAAO;;;;;;MAMT,IAAI,CAAC,SAAS,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAuCR,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA8KlB,CAAC;IACL,CAAC;CACJ;AA1PD,kCA0PC"}
\ No newline at end of file
diff --git a/src/panels/ConfigPanel.ts b/src/panels/ConfigPanel.ts
index c1fd61b..31d8a0f 100644
--- a/src/panels/ConfigPanel.ts
+++ b/src/panels/ConfigPanel.ts
@@ -1,9 +1,9 @@
// src/panels/ConfigPanel.ts
import * as vscode from 'vscode';
-import { ProjectManagementView } from './views/ProjectManagementView';
-import { ProjectListView } from './views/ProjectListView';
-import { AircraftConfigView } from './views/AircraftConfigView';
-import { ContainerConfigView } from './views/ContainerConfigView';
+import { ProjectView } from './views/ProjectView';
+import { AircraftView } from './views/AircraftView';
+import { ContainerView } from './views/ContainerView';
+import { ConfigView } from './views/ConfigView';
// 数据模型接口
interface Project {
@@ -36,43 +36,25 @@ export class ConfigPanel {
private readonly panel: vscode.WebviewPanel;
private readonly extensionUri: vscode.Uri;
- private currentView: 'management' | 'projects' | 'aircrafts' | 'container' = 'management';
+ private currentView: 'projects' | 'aircrafts' | 'containers' | 'configs' = 'projects';
private currentProjectId: string = '';
private currentAircraftId: string = '';
private currentContainerId: string = '';
// 数据存储
- private projects: Project[] = [
- { id: 'p1', name: '项目1' },
- { id: 'p2', name: '项目2' }
- ];
-
- private aircrafts: Aircraft[] = [
- { id: 'a1', name: '飞行器配置1', projectId: 'p1' },
- { id: 'a2', name: '飞行器配置2', projectId: 'p2' }
- ];
-
- private containers: Container[] = [
- { id: 'c1', name: '容器1', aircraftId: 'a1' },
- { id: 'c2', name: '容器2', aircraftId: 'a1' },
- { id: 'c3', name: '容器1', aircraftId: 'a2' }
- ];
-
- private configs: Config[] = [
- { id: 'cfg1', name: '配置1', fileName: 'config.yaml', content: '# 配置1内容', containerId: 'c1' },
- { id: 'cfg2', name: '配置2', fileName: 'settings.json', content: '# 配置2内容', containerId: 'c1' },
- { id: 'cfg3', name: '配置1', fileName: 'docker-compose.yml', content: '# 配置1内容', containerId: 'c2' },
- { id: 'cfg4', name: '配置1', fileName: 'config.yaml', content: '# 配置1内容', containerId: 'c3' }
- ];
+ private projects: Project[] = [];
+ private aircrafts: Aircraft[] = [];
+ private containers: Container[] = [];
+ private configs: Config[] = [];
// 项目存储路径映射
private projectPaths: Map = new Map();
// 视图实例
- private readonly projectManagementView: ProjectManagementView;
- private readonly projectListView: ProjectListView;
- private readonly aircraftConfigView: AircraftConfigView;
- private readonly containerConfigView: ContainerConfigView;
+ private readonly projectView: ProjectView;
+ private readonly aircraftView: AircraftView;
+ private readonly containerView: ContainerView;
+ private readonly configView: ConfigView;
public static createOrShow(extensionUri: vscode.Uri) {
const column = vscode.window.activeTextEditor?.viewColumn || vscode.ViewColumn.One;
@@ -83,8 +65,8 @@ export class ConfigPanel {
}
const panel = vscode.window.createWebviewPanel(
- 'dockerConfigTest',
- 'Docker配置测试',
+ 'DCSP',
+ '数字卫星构建平台',
column,
{
enableScripts: true,
@@ -101,10 +83,10 @@ export class ConfigPanel {
this.extensionUri = extensionUri;
// 初始化各个视图
- this.projectManagementView = new ProjectManagementView(extensionUri);
- this.projectListView = new ProjectListView(extensionUri);
- this.aircraftConfigView = new AircraftConfigView(extensionUri);
- this.containerConfigView = new ContainerConfigView(extensionUri);
+ this.projectView = new ProjectView(extensionUri);
+ this.aircraftView = new AircraftView(extensionUri);
+ this.containerView = new ContainerView(extensionUri);
+ this.configView = new ConfigView(extensionUri);
this.updateWebview();
this.setupMessageListener();
@@ -120,7 +102,7 @@ export class ConfigPanel {
case 'configureProject':
const selectedPath = await this.selectProjectPath(data.projectId, data.projectName);
if (selectedPath) {
- this.currentView = 'projects';
+ this.currentView = 'aircrafts';
this.currentProjectId = data.projectId;
this.updateWebview();
}
@@ -128,43 +110,40 @@ export class ConfigPanel {
case 'openProject':
// 已配置的项目直接打开
- this.currentView = 'projects';
+ this.currentView = 'aircrafts';
this.currentProjectId = data.projectId;
this.updateWebview();
break;
case 'openAircraftConfig':
- this.currentView = 'aircrafts';
+ this.currentView = 'containers';
this.currentProjectId = data.projectId;
- // 找到对应的飞行器ID
- const aircraft = this.aircrafts.find(a => a.projectId === data.projectId);
- if (aircraft) {
- this.currentAircraftId = aircraft.id;
- }
+ this.currentAircraftId = data.aircraftId;
this.updateWebview();
break;
case 'openContainerConfig':
- this.currentView = 'container';
+ this.currentView = 'configs';
this.currentContainerId = data.containerId;
this.updateWebview();
break;
- case 'goBackToManagement':
- this.currentView = 'management';
- this.updateWebview();
- break;
-
+ // 修复返回按钮的消息处理
case 'goBackToProjects':
this.currentView = 'projects';
this.updateWebview();
break;
- case 'goBackToAircraft':
+ case 'goBackToAircrafts':
this.currentView = 'aircrafts';
this.updateWebview();
break;
+ case 'goBackToContainers':
+ this.currentView = 'containers';
+ this.updateWebview();
+ break;
+
case 'updateProjectName':
this.updateProjectName(data.projectId, data.name);
break;
@@ -173,6 +152,14 @@ export class ConfigPanel {
this.createProject(data.name);
break;
+ case 'updateAircraftName':
+ this.updateAircraftName(data.aircraftId, data.name);
+ break;
+
+ case 'createAircraft':
+ this.createAircraft(data.name);
+ break;
+
case 'updateContainerName':
this.updateContainerName(data.containerId, data.name);
break;
@@ -205,6 +192,10 @@ export class ConfigPanel {
this.deleteProject(data.projectId);
break;
+ case 'deleteAircraft':
+ this.deleteAircraft(data.aircraftId);
+ break;
+
case 'deleteContainer':
this.deleteContainer(data.containerId);
break;
@@ -216,10 +207,11 @@ export class ConfigPanel {
});
}
+ // ... 其余方法保持不变(selectProjectPath, updateProjectName, createProject等)
// === 项目路径选择 ===
private async selectProjectPath(projectId: string, projectName: string): Promise {
try {
- // 提供两种方式:选择现有路径或输入新路径
+ // 选择现有路径或输入新路径
const choice = await vscode.window.showQuickPick(
[
{
@@ -294,7 +286,7 @@ export class ConfigPanel {
}
}
- // === 项目相关方法 ===
+ // 更新项目名
private updateProjectName(projectId: string, newName: string) {
const project = this.projects.find(p => p.id === projectId);
if (project) {
@@ -304,6 +296,7 @@ export class ConfigPanel {
}
}
+ // 创建新项目
private createProject(name: string) {
const newId = 'p' + (this.projects.length + 1);
const newProject: Project = {
@@ -311,43 +304,79 @@ export class ConfigPanel {
name: name
};
this.projects.push(newProject);
-
- // 同时创建一个默认的飞行器配置
- const newAircraftId = 'a' + (this.aircrafts.length + 1);
- this.aircrafts.push({
- id: newAircraftId,
- name: `${name}配置`,
- projectId: newId
- });
-
+
vscode.window.showInformationMessage(`新建项目: ${name}`);
this.updateWebview();
}
+ // 删除项目
private deleteProject(projectId: string) {
- // 删除项目
+ const project = this.projects.find(p => p.id === projectId);
+ if (!project) return;
+
this.projects = this.projects.filter(p => p.id !== projectId);
-
// 删除相关的飞行器
const relatedAircrafts = this.aircrafts.filter(a => a.projectId === projectId);
const aircraftIds = relatedAircrafts.map(a => a.id);
this.aircrafts = this.aircrafts.filter(a => a.projectId !== projectId);
-
// 删除相关的容器
this.containers = this.containers.filter(c => !aircraftIds.includes(c.aircraftId));
-
// 删除相关的配置
const containerIds = this.containers.filter(c => aircraftIds.includes(c.aircraftId)).map(c => c.id);
this.configs = this.configs.filter(cfg => !containerIds.includes(cfg.containerId));
-
// 删除项目路径映射
this.projectPaths.delete(projectId);
- vscode.window.showInformationMessage(`删除项目: ${projectId}`);
+ vscode.window.showInformationMessage(`删除项目: ${project.name}`);
this.updateWebview();
}
- // === 容器相关方法 ===
+ // 更新飞行器名
+ private updateAircraftName(aircraftId: string, newName: string) {
+ const aircraft = this.aircrafts.find(a => a.id === aircraftId);
+ if (aircraft) {
+ aircraft.name = newName;
+ vscode.window.showInformationMessage(`飞行器名称更新: ${newName}`);
+ this.updateWebview();
+ }
+ }
+
+ // 创建新飞行器
+ private createAircraft(name: string) {
+ if (!this.currentProjectId) {
+ vscode.window.showErrorMessage('无法创建飞行器:未找到当前项目');
+ return;
+ }
+
+ const newId = 'a' + (this.aircrafts.length + 1);
+ const newAircraft: Aircraft = {
+ id: newId,
+ name: name,
+ projectId: this.currentProjectId
+ };
+ this.aircrafts.push(newAircraft);
+
+ vscode.window.showInformationMessage(`新建飞行器: ${name}`);
+ this.updateWebview();
+ }
+
+ // 删除飞行器
+ private deleteAircraft(aircraftId: string) {
+ const aircraft = this.aircrafts.find(a => a.id === aircraftId);
+ if (!aircraft) return;
+
+ this.aircrafts = this.aircrafts.filter(a => a.id !== aircraftId);
+ // 删除相关的容器
+ this.containers = this.containers.filter(c => c.aircraftId !== aircraftId);
+ // 删除相关的配置
+ const containerIds = this.containers.filter(c => c.aircraftId === aircraftId).map(c => c.id);
+ this.configs = this.configs.filter(cfg => !containerIds.includes(cfg.containerId));
+
+ vscode.window.showInformationMessage(`删除飞行器: ${aircraft.name}`);
+ this.updateWebview();
+ }
+
+ // 更新容器名
private updateContainerName(containerId: string, newName: string) {
const container = this.containers.find(c => c.id === containerId);
if (container) {
@@ -357,6 +386,7 @@ export class ConfigPanel {
}
}
+ // 创建新容器
private createContainer(name: string) {
console.log('创建容器,当前飞行器ID:', this.currentAircraftId);
@@ -377,20 +407,20 @@ export class ConfigPanel {
// 创建两个默认配置文件
const configCount = this.configs.length;
- // 第一个配置文件:Dockerfile
+ // 第一个配置文件
this.configs.push({
id: 'cfg' + (configCount + 1),
- name: 'Docker配置',
- fileName: 'Dockerfile',
+ name: '配置1',
+ fileName: 'config.sh',
content: `# ${name} 的 Dockerfile\nFROM ubuntu:20.04\n\n# 设置工作目录\nWORKDIR /app\n\n# 复制文件\nCOPY . .\n\n# 安装依赖\nRUN apt-get update && apt-get install -y \\\n python3 \\\n python3-pip\n\n# 暴露端口\nEXPOSE 8080\n\n# 启动命令\nCMD ["python3", "app.py"]`,
containerId: newId
});
- // 第二个配置文件:docker-compose.yml
+ // 第二个配置文件
this.configs.push({
id: 'cfg' + (configCount + 2),
- name: '编排配置',
- fileName: 'docker-compose.yml',
+ name: '配置2',
+ fileName: 'config.sh',
content: `# ${name} 的 Docker Compose 配置\nversion: '3.8'\n\nservices:\n ${name.toLowerCase().replace(/\\s+/g, '-')}:\n build: .\n container_name: ${name}\n ports:\n - "8080:8080"\n environment:\n - NODE_ENV=production\n volumes:\n - ./data:/app/data\n restart: unless-stopped`,
containerId: newId
});
@@ -399,18 +429,22 @@ export class ConfigPanel {
this.updateWebview();
}
+ // 删除容器
private deleteContainer(containerId: string) {
+ const container = this.containers.find(c => c.id === containerId);
+ if (!container) return;
+
// 删除容器
this.containers = this.containers.filter(c => c.id !== containerId);
// 删除相关的配置
this.configs = this.configs.filter(cfg => cfg.containerId !== containerId);
- vscode.window.showInformationMessage(`删除容器: ${containerId}`);
+ vscode.window.showInformationMessage(`删除容器: ${container.name}`);
this.updateWebview();
}
- // === 配置相关方法 ===
+ // 更新配置名
private updateConfigName(configId: string, newName: string) {
const config = this.configs.find(c => c.id === configId);
if (config) {
@@ -420,6 +454,7 @@ export class ConfigPanel {
}
}
+ // 更新文件名
private async updateConfigFileName(configId: string, fileName: string): Promise {
const config = this.configs.find(c => c.id === configId);
if (config) {
@@ -429,7 +464,7 @@ export class ConfigPanel {
}
}
- // 创建配置文件
+ // 创建新配置文件
private createConfig(name: string) {
const newId = 'cfg' + (this.configs.length + 1);
const newConfig: Config = {
@@ -540,39 +575,34 @@ export class ConfigPanel {
private getWebviewContent(): string {
switch (this.currentView) {
- case 'management':
- return this.projectManagementView.render({
+ case 'projects':
+ return this.projectView.render({
projects: this.projects,
projectPaths: this.projectPaths
});
- case 'projects':
- return this.projectListView.render({
- projects: this.projects
- });
case 'aircrafts':
+ const projectAircrafts = this.aircrafts.filter(a => a.projectId === this.currentProjectId);
+ return this.aircraftView.render({
+ aircrafts: projectAircrafts
+ });
+ case 'containers':
const currentProject = this.projects.find(p => p.id === this.currentProjectId);
- const projectAircraft = this.aircrafts.find(a => a.projectId === this.currentProjectId);
-
- if (projectAircraft) {
- this.currentAircraftId = projectAircraft.id;
- }
-
const projectContainers = this.containers.filter(c => c.aircraftId === this.currentAircraftId);
- return this.aircraftConfigView.render({
+ return this.containerView.render({
project: currentProject,
containers: projectContainers
});
- case 'container':
+ case 'configs':
const currentContainer = this.containers.find(c => c.id === this.currentContainerId);
const containerConfigs = this.configs.filter(cfg => cfg.containerId === this.currentContainerId);
- return this.containerConfigView.render({
+ return this.configView.render({
container: currentContainer,
configs: containerConfigs
});
default:
- return this.projectManagementView.render({
+ return this.projectView.render({
projects: this.projects,
projectPaths: this.projectPaths
});
diff --git a/src/panels/types/ViewTypes.ts b/src/panels/types/ViewTypes.ts
index 8e8aa94..dee98b5 100644
--- a/src/panels/types/ViewTypes.ts
+++ b/src/panels/types/ViewTypes.ts
@@ -17,8 +17,16 @@ export interface ConfigViewData {
containerId: string;
}
+export interface AircraftViewData {
+ id: string;
+ name: string;
+ projectId: string;
+}
+
export interface ProjectListData {
+ aircrafts?: AircraftViewData[];
projects: ProjectViewData[];
+
}
export interface AircraftConfigData {
diff --git a/src/panels/views/ProjectListView.ts b/src/panels/views/AircraftView.ts
similarity index 73%
rename from src/panels/views/ProjectListView.ts
rename to src/panels/views/AircraftView.ts
index 92b1a0c..69bd7a5 100644
--- a/src/panels/views/ProjectListView.ts
+++ b/src/panels/views/AircraftView.ts
@@ -1,52 +1,53 @@
-// src/panels/views/ProjectListView.ts
+// src/panels/views/AircraftView.ts
import { BaseView } from './BaseView';
-import { ProjectListData, ProjectViewData } from '../types/ViewTypes';
-export class ProjectListView extends BaseView {
- render(data?: ProjectListData): string {
- const projects = data?.projects || [];
+export class AircraftView extends BaseView {
+ render(data?: { aircrafts: any[] }): string {
+ const aircrafts = data?.aircrafts || [];
- // 生成项目列表的 HTML
- const projectsHtml = projects.map((project: ProjectViewData) => `
+ // 生成飞行器列表的 HTML
+ const aircraftsHtml = aircrafts.map((aircraft: any) => {
+ return `
|
- 🛸 ${project.name}
+ 🛸 ${aircraft.name}
|
- 配置
+ 配置
|
-
+
|
- `).join('');
+ `;
+ }).join('');
return `
- 飞行器项目管理
+ 飞行器管理
${this.getStyles()}
- | 项目 |
+ 飞行器 |
配置 |
操作 |
- ${projectsHtml}
+ ${aircraftsHtml}
|
-
+
|
@@ -55,16 +56,16 @@ export class ProjectListView extends BaseView {