aifastdb-devplan 1.5.0 → 1.6.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/autopilot.d.ts +58 -0
- package/dist/autopilot.d.ts.map +1 -0
- package/dist/autopilot.js +250 -0
- package/dist/autopilot.js.map +1 -0
- package/dist/dev-plan-document-store.d.ts +15 -1
- package/dist/dev-plan-document-store.d.ts.map +1 -1
- package/dist/dev-plan-document-store.js +122 -0
- package/dist/dev-plan-document-store.js.map +1 -1
- package/dist/dev-plan-factory.d.ts +69 -3
- package/dist/dev-plan-factory.d.ts.map +1 -1
- package/dist/dev-plan-factory.js +113 -19
- package/dist/dev-plan-factory.js.map +1 -1
- package/dist/dev-plan-graph-store.d.ts +79 -1
- package/dist/dev-plan-graph-store.d.ts.map +1 -1
- package/dist/dev-plan-graph-store.js +420 -3
- package/dist/dev-plan-graph-store.js.map +1 -1
- package/dist/dev-plan-interface.d.ts +24 -1
- package/dist/dev-plan-interface.d.ts.map +1 -1
- package/dist/dev-plan-migrate.d.ts +1 -0
- package/dist/dev-plan-migrate.d.ts.map +1 -1
- package/dist/dev-plan-migrate.js +28 -2
- package/dist/dev-plan-migrate.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +14 -1
- package/dist/index.js.map +1 -1
- package/dist/mcp-server/index.d.ts +3 -0
- package/dist/mcp-server/index.d.ts.map +1 -1
- package/dist/mcp-server/index.js +397 -4
- package/dist/mcp-server/index.js.map +1 -1
- package/dist/types.d.ts +160 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +9 -1
- package/dist/types.js.map +1 -1
- package/dist/visualize/graph-canvas/api-compat.d.ts +20 -0
- package/dist/visualize/graph-canvas/api-compat.d.ts.map +1 -0
- package/dist/visualize/graph-canvas/api-compat.js +344 -0
- package/dist/visualize/graph-canvas/api-compat.js.map +1 -0
- package/dist/visualize/graph-canvas/clusterer.d.ts +16 -0
- package/dist/visualize/graph-canvas/clusterer.d.ts.map +1 -0
- package/dist/visualize/graph-canvas/clusterer.js +460 -0
- package/dist/visualize/graph-canvas/clusterer.js.map +1 -0
- package/dist/visualize/graph-canvas/core.d.ts +11 -0
- package/dist/visualize/graph-canvas/core.d.ts.map +1 -0
- package/dist/visualize/graph-canvas/core.js +1136 -0
- package/dist/visualize/graph-canvas/core.js.map +1 -0
- package/dist/visualize/graph-canvas/index.d.ts +22 -0
- package/dist/visualize/graph-canvas/index.d.ts.map +1 -0
- package/dist/visualize/graph-canvas/index.js +69 -0
- package/dist/visualize/graph-canvas/index.js.map +1 -0
- package/dist/visualize/graph-canvas/interaction.d.ts +13 -0
- package/dist/visualize/graph-canvas/interaction.d.ts.map +1 -0
- package/dist/visualize/graph-canvas/interaction.js +457 -0
- package/dist/visualize/graph-canvas/interaction.js.map +1 -0
- package/dist/visualize/graph-canvas/layout-worker.d.ts +17 -0
- package/dist/visualize/graph-canvas/layout-worker.d.ts.map +1 -0
- package/dist/visualize/graph-canvas/layout-worker.js +577 -0
- package/dist/visualize/graph-canvas/layout-worker.js.map +1 -0
- package/dist/visualize/graph-canvas/lod.d.ts +10 -0
- package/dist/visualize/graph-canvas/lod.d.ts.map +1 -0
- package/dist/visualize/graph-canvas/lod.js +111 -0
- package/dist/visualize/graph-canvas/lod.js.map +1 -0
- package/dist/visualize/graph-canvas/renderer.d.ts +12 -0
- package/dist/visualize/graph-canvas/renderer.d.ts.map +1 -0
- package/dist/visualize/graph-canvas/renderer.js +813 -0
- package/dist/visualize/graph-canvas/renderer.js.map +1 -0
- package/dist/visualize/graph-canvas/spatial-index.d.ts +13 -0
- package/dist/visualize/graph-canvas/spatial-index.d.ts.map +1 -0
- package/dist/visualize/graph-canvas/spatial-index.js +482 -0
- package/dist/visualize/graph-canvas/spatial-index.js.map +1 -0
- package/dist/visualize/graph-canvas/styles.d.ts +11 -0
- package/dist/visualize/graph-canvas/styles.d.ts.map +1 -0
- package/dist/visualize/graph-canvas/styles.js +152 -0
- package/dist/visualize/graph-canvas/styles.js.map +1 -0
- package/dist/visualize/graph-canvas/viewport.d.ts +17 -0
- package/dist/visualize/graph-canvas/viewport.d.ts.map +1 -0
- package/dist/visualize/graph-canvas/viewport.js +385 -0
- package/dist/visualize/graph-canvas/viewport.js.map +1 -0
- package/dist/visualize/server.js +737 -7
- package/dist/visualize/server.js.map +1 -1
- package/dist/visualize/template-core.d.ts +9 -0
- package/dist/visualize/template-core.d.ts.map +1 -0
- package/dist/visualize/template-core.js +714 -0
- package/dist/visualize/template-core.js.map +1 -0
- package/dist/visualize/template-data-loading.d.ts +7 -0
- package/dist/visualize/template-data-loading.d.ts.map +1 -0
- package/dist/visualize/template-data-loading.js +677 -0
- package/dist/visualize/template-data-loading.js.map +1 -0
- package/dist/visualize/template-detail-panel.d.ts +14 -0
- package/dist/visualize/template-detail-panel.d.ts.map +1 -0
- package/dist/visualize/template-detail-panel.js +553 -0
- package/dist/visualize/template-detail-panel.js.map +1 -0
- package/dist/visualize/template-graph-3d.d.ts +7 -0
- package/dist/visualize/template-graph-3d.d.ts.map +1 -0
- package/dist/visualize/template-graph-3d.js +1112 -0
- package/dist/visualize/template-graph-3d.js.map +1 -0
- package/dist/visualize/template-graph-vis.d.ts +8 -0
- package/dist/visualize/template-graph-vis.d.ts.map +1 -0
- package/dist/visualize/template-graph-vis.js +1204 -0
- package/dist/visualize/template-graph-vis.js.map +1 -0
- package/dist/visualize/template-html.d.ts +9 -0
- package/dist/visualize/template-html.d.ts.map +1 -0
- package/dist/visualize/template-html.js +484 -0
- package/dist/visualize/template-html.js.map +1 -0
- package/dist/visualize/template-pages.d.ts +7 -0
- package/dist/visualize/template-pages.d.ts.map +1 -0
- package/dist/visualize/template-pages.js +806 -0
- package/dist/visualize/template-pages.js.map +1 -0
- package/dist/visualize/template-stats-modal.d.ts +7 -0
- package/dist/visualize/template-stats-modal.d.ts.map +1 -0
- package/dist/visualize/template-stats-modal.js +406 -0
- package/dist/visualize/template-stats-modal.js.map +1 -0
- package/dist/visualize/template-styles.d.ts +9 -0
- package/dist/visualize/template-styles.d.ts.map +1 -0
- package/dist/visualize/template-styles.js +487 -0
- package/dist/visualize/template-styles.js.map +1 -0
- package/dist/visualize/template.d.ts +14 -3
- package/dist/visualize/template.d.ts.map +1 -1
- package/dist/visualize/template.js +38 -2889
- package/dist/visualize/template.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template-graph-vis.js","sourceRoot":"","sources":["../../src/visualize/template-graph-vis.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAEH,8CAyqCC;AAzqCD,SAAgB,iBAAiB;IAC/B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuqCR,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template-html.d.ts","sourceRoot":"","sources":["../../src/visualize/template-html.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,wBAAgB,OAAO,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAwdnD"}
|
|
@@ -0,0 +1,484 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* DevPlan 图可视化 — HTML 结构模块
|
|
4
|
+
*
|
|
5
|
+
* 从 template.ts 拆分出的全部 HTML 结构定义。
|
|
6
|
+
* 包含: 侧边栏、图谱容器、详情面板、文档浏览、RAG 聊天、
|
|
7
|
+
* 统计仪表盘、项目设置、统计弹层等 HTML 结构。
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.getHTML = getHTML;
|
|
11
|
+
function getHTML(projectName) {
|
|
12
|
+
return `
|
|
13
|
+
<body>
|
|
14
|
+
<div class="app-layout">
|
|
15
|
+
<!-- Sidebar -->
|
|
16
|
+
<div class="sidebar" id="sidebar">
|
|
17
|
+
<div class="sidebar-header" onclick="toggleSidebar()" title="展开/收起导航">
|
|
18
|
+
<span class="sidebar-menu-icon sidebar-logo-short"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><line x1="3" y1="6" x2="21" y2="6"/><line x1="3" y1="12" x2="21" y2="12"/><line x1="3" y1="18" x2="21" y2="18"/></svg></span>
|
|
19
|
+
<span class="sidebar-logo sidebar-logo-full">AiFastDb-DevPlan</span>
|
|
20
|
+
</div>
|
|
21
|
+
<div class="sidebar-nav">
|
|
22
|
+
<div class="nav-item active" data-page="graph" onclick="navTo('graph')">
|
|
23
|
+
<span class="nav-item-icon">🔗</span>
|
|
24
|
+
<span class="nav-item-text">图谱可视化</span>
|
|
25
|
+
<span class="nav-tooltip">图谱可视化</span>
|
|
26
|
+
</div>
|
|
27
|
+
<div class="nav-item disabled" data-page="tasks" onclick="navTo('tasks')">
|
|
28
|
+
<span class="nav-item-icon">📋</span>
|
|
29
|
+
<span class="nav-item-text">任务看板</span>
|
|
30
|
+
<span class="nav-item-badge">即将推出</span>
|
|
31
|
+
<span class="nav-tooltip">任务看板 (即将推出)</span>
|
|
32
|
+
</div>
|
|
33
|
+
<div class="nav-item" data-page="docs" onclick="navTo('docs')">
|
|
34
|
+
<span class="nav-item-icon">📄</span>
|
|
35
|
+
<span class="nav-item-text">文档库</span>
|
|
36
|
+
<span class="nav-tooltip">文档库</span>
|
|
37
|
+
</div>
|
|
38
|
+
<div class="nav-item" data-page="stats" onclick="navTo('stats')">
|
|
39
|
+
<span class="nav-item-icon">📊</span>
|
|
40
|
+
<span class="nav-item-text">统计仪表盘</span>
|
|
41
|
+
<span class="nav-tooltip">统计仪表盘</span>
|
|
42
|
+
</div>
|
|
43
|
+
</div>
|
|
44
|
+
<div class="sidebar-footer">
|
|
45
|
+
<div class="nav-item" data-page="settings" onclick="navTo('settings')">
|
|
46
|
+
<span class="nav-item-icon">⚙️</span>
|
|
47
|
+
<span class="nav-item-text">项目设置</span>
|
|
48
|
+
<span class="nav-tooltip">项目设置</span>
|
|
49
|
+
</div>
|
|
50
|
+
</div>
|
|
51
|
+
</div>
|
|
52
|
+
|
|
53
|
+
<!-- Main Content -->
|
|
54
|
+
<div class="main-content">
|
|
55
|
+
|
|
56
|
+
<!-- ===== PAGE: Graph ===== -->
|
|
57
|
+
<div class="page-view page-graph active" id="pageGraph">
|
|
58
|
+
<!-- Header -->
|
|
59
|
+
<div class="header">
|
|
60
|
+
<h1><span class="icon">🔗</span> DevPlan 图谱 <span class="project-name">${projectName}</span></h1>
|
|
61
|
+
<div class="stats-bar" id="statsBar">
|
|
62
|
+
<div class="stat"><span>加载中...</span></div>
|
|
63
|
+
</div>
|
|
64
|
+
</div>
|
|
65
|
+
|
|
66
|
+
<!-- Graph -->
|
|
67
|
+
<div class="graph-container">
|
|
68
|
+
<div class="loading" id="loading"><div><div class="spinner"></div><p style="margin-top:12px;color:#9ca3af;">加载图谱数据...</p></div></div>
|
|
69
|
+
<div id="graph"></div>
|
|
70
|
+
<div class="panel" id="panel">
|
|
71
|
+
<div class="panel-resize-handle" id="panelResizeHandle"></div>
|
|
72
|
+
<div class="panel-header" id="panelHeader">
|
|
73
|
+
<div class="panel-header-left">
|
|
74
|
+
<button class="panel-back" id="panelBack" onclick="panelGoBack()" title="返回上一个详情">
|
|
75
|
+
<svg width="16" height="16" viewBox="0 0 16 16" fill="none"><path d="M10 3L5 8L10 13" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg>
|
|
76
|
+
</button>
|
|
77
|
+
<span class="panel-title" id="panelTitle">节点详情</span>
|
|
78
|
+
</div>
|
|
79
|
+
<button class="panel-close" onclick="closePanel()">✕</button>
|
|
80
|
+
</div>
|
|
81
|
+
<div class="panel-body" id="panelBody"></div>
|
|
82
|
+
</div>
|
|
83
|
+
<!-- Debug info -->
|
|
84
|
+
<div class="debug" id="debug">状态: 正在加载 vis-network...</div>
|
|
85
|
+
</div>
|
|
86
|
+
|
|
87
|
+
<!-- Legend + Filters (merged) -->
|
|
88
|
+
<div class="legend">
|
|
89
|
+
<!-- 加载引擎标识 -->
|
|
90
|
+
<div class="legend-engine-badge" id="engineBadge" onclick="navTo('settings')" title="点击前往项目设置切换加载引擎">
|
|
91
|
+
⚡ 加载引擎: <span class="engine-name" id="engineNameLabel">vis-network</span>
|
|
92
|
+
</div>
|
|
93
|
+
<div class="legend-divider"></div>
|
|
94
|
+
<!-- 刷新按钮 -->
|
|
95
|
+
<button class="legend-refresh-btn" id="legendRefreshBtn" onclick="manualRefresh()" title="刷新数据 (F5)">
|
|
96
|
+
<svg class="legend-refresh-icon" id="legendRefreshIcon" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M21 2v6h-6"/><path d="M3 12a9 9 0 0 1 15-6.7L21 8"/><path d="M3 22v-6h6"/><path d="M21 12a9 9 0 0 1-15 6.7L3 16"/></svg>
|
|
97
|
+
</button>
|
|
98
|
+
<!-- Phase-10: Load All button (shown in tiered loading mode) -->
|
|
99
|
+
<button class="legend-refresh-btn" id="loadAllBtn" onclick="loadAllNodes()" title="加载全部节点" style="display:none;font-size:11px;padding:2px 8px;">
|
|
100
|
+
全部
|
|
101
|
+
</button>
|
|
102
|
+
<!-- Phase-10 T10.2: Overview mode toggle -->
|
|
103
|
+
<button class="legend-refresh-btn" id="overviewBtn" onclick="toggleOverviewMode()" title="概览模式 — 每种类型一个超级节点" style="font-size:11px;padding:2px 8px;">
|
|
104
|
+
概览
|
|
105
|
+
</button>
|
|
106
|
+
<!-- Phase-10: Tiered loading indicator -->
|
|
107
|
+
<span id="tieredIndicator" style="display:none;font-size:10px;color:#60a5fa;margin-left:4px;"></span>
|
|
108
|
+
<div class="legend-divider"></div>
|
|
109
|
+
<!-- 节点类型筛选(复选框 + 图例) -->
|
|
110
|
+
<div class="legend-item toggle active" data-type="module" onclick="toggleFilter('module')" title="点击切换模块显隐"><input type="checkbox" class="filter-cb" id="cb-module" checked><div class="legend-icon diamond"></div> 模块</div>
|
|
111
|
+
<div class="legend-item toggle active" data-type="main-task" onclick="toggleFilter('main-task')" title="点击切换主任务显隐"><input type="checkbox" class="filter-cb" id="cb-main-task" checked><div class="legend-icon circle"></div> 主任务</div>
|
|
112
|
+
<div class="legend-item toggle active" data-type="sub-task" onclick="toggleFilter('sub-task')" title="点击切换子任务显隐"><input type="checkbox" class="filter-cb" id="cb-sub-task" checked><div class="legend-icon dot"></div> 子任务</div>
|
|
113
|
+
<div class="legend-item toggle active" data-type="document" onclick="toggleFilter('document')" title="点击切换文档显隐"><input type="checkbox" class="filter-cb" id="cb-document" checked><div class="legend-icon square"></div> 文档</div>
|
|
114
|
+
<div class="legend-divider"></div>
|
|
115
|
+
<!-- 边类型图例 -->
|
|
116
|
+
<div class="legend-item"><div class="legend-line solid"></div> 主任务</div>
|
|
117
|
+
<div class="legend-item"><div class="legend-line thin"></div> 子任务</div>
|
|
118
|
+
<div class="legend-item"><div class="legend-line dashed"></div> 文档</div>
|
|
119
|
+
<div class="legend-item"><div class="legend-line dotted"></div> 模块关联</div>
|
|
120
|
+
</div>
|
|
121
|
+
</div>
|
|
122
|
+
|
|
123
|
+
<!-- ===== PAGE: Docs Browser ===== -->
|
|
124
|
+
<div class="page-view" id="pageDocs">
|
|
125
|
+
<div class="docs-page">
|
|
126
|
+
<!-- Left: Document List -->
|
|
127
|
+
<div class="docs-sidebar">
|
|
128
|
+
<div class="docs-sidebar-header">
|
|
129
|
+
<h3>📄 文档库</h3>
|
|
130
|
+
<div class="docs-search-wrap">
|
|
131
|
+
<input type="text" class="docs-search" id="docsSearch" placeholder="搜索文档标题..." oninput="filterDocs();toggleSearchClear()">
|
|
132
|
+
<button class="docs-search-clear" id="docsSearchClear" onclick="clearDocsSearch()" title="清空搜索">✕</button>
|
|
133
|
+
</div>
|
|
134
|
+
</div>
|
|
135
|
+
<div class="docs-group-list" id="docsGroupList">
|
|
136
|
+
<div style="text-align:center;padding:40px;color:#6b7280;font-size:12px;">加载中...</div>
|
|
137
|
+
</div>
|
|
138
|
+
</div>
|
|
139
|
+
<!-- Right: Document Content / Chat -->
|
|
140
|
+
<div class="docs-content">
|
|
141
|
+
<!-- RAG Chat (default view) -->
|
|
142
|
+
<div class="docs-content-empty" id="docsEmptyState">
|
|
143
|
+
<div class="docs-chat-container">
|
|
144
|
+
<div class="docs-chat-messages" id="docsChatMessages">
|
|
145
|
+
<div class="docs-chat-welcome" id="docsChatWelcome">
|
|
146
|
+
<div class="welcome-icon">🔍</div>
|
|
147
|
+
<div class="welcome-title">文档智能搜索</div>
|
|
148
|
+
<div class="welcome-desc">输入问题,AI 将在文档库中搜索相关内容<br>支持语义搜索,理解你的意图而非仅匹配关键词</div>
|
|
149
|
+
<div class="welcome-tips">
|
|
150
|
+
<span class="tip-chip" onclick="chatSendTip(this)">有多少篇文档?</span>
|
|
151
|
+
<span class="tip-chip" onclick="chatSendTip(this)">项目进度</span>
|
|
152
|
+
<span class="tip-chip" onclick="chatSendTip(this)">有哪些阶段?</span>
|
|
153
|
+
<span class="tip-chip" onclick="chatSendTip(this)">最近更新</span>
|
|
154
|
+
<span class="tip-chip" onclick="chatSendTip(this)">帮助</span>
|
|
155
|
+
</div>
|
|
156
|
+
<div class="welcome-tips" style="margin-top:8px;">
|
|
157
|
+
<span class="tip-chip" onclick="chatSendTip(this)">向量搜索</span>
|
|
158
|
+
<span class="tip-chip" onclick="chatSendTip(this)">aifastdb vs LanceDB</span>
|
|
159
|
+
<span class="tip-chip" onclick="chatSendTip(this)">GPU 加速</span>
|
|
160
|
+
<span class="tip-chip" onclick="chatSendTip(this)">全文搜索</span>
|
|
161
|
+
</div>
|
|
162
|
+
</div>
|
|
163
|
+
</div>
|
|
164
|
+
<div class="docs-chat-input-wrap">
|
|
165
|
+
<textarea class="docs-chat-input" id="docsChatInput" placeholder="发送消息搜索文档数据库..." rows="1" onkeydown="chatInputKeydown(event)" oninput="chatAutoResize(this)"></textarea>
|
|
166
|
+
<button class="docs-chat-send" id="docsChatSend" onclick="chatSend()" title="发送">↑</button>
|
|
167
|
+
</div>
|
|
168
|
+
</div>
|
|
169
|
+
</div>
|
|
170
|
+
<!-- Document Content View -->
|
|
171
|
+
<div id="docsContentView" style="display:none;flex-direction:column;flex:1;min-height:0;">
|
|
172
|
+
<div class="docs-content-header">
|
|
173
|
+
<div style="flex:1;min-width:0;">
|
|
174
|
+
<div class="docs-content-title" id="docsContentTitle">文档标题</div>
|
|
175
|
+
<div class="docs-content-meta" id="docsContentMeta"></div>
|
|
176
|
+
</div>
|
|
177
|
+
<button style="flex-shrink:0;background:none;border:1px solid #374151;border-radius:6px;padding:4px 10px;color:#9ca3af;font-size:11px;cursor:pointer;transition:all 0.15s;" onmouseover="this.style.borderColor='#6366f1';this.style.color='#a5b4fc'" onmouseout="this.style.borderColor='#374151';this.style.color='#9ca3af'" onclick="backToChat()" title="返回对话搜索">← 返回搜索</button>
|
|
178
|
+
</div>
|
|
179
|
+
<div class="docs-content-body" id="docsContentBody">
|
|
180
|
+
<div class="doc-content" id="docsContentInner"></div>
|
|
181
|
+
</div>
|
|
182
|
+
</div>
|
|
183
|
+
</div>
|
|
184
|
+
</div>
|
|
185
|
+
</div>
|
|
186
|
+
|
|
187
|
+
<!-- ===== PAGE: Stats Dashboard ===== -->
|
|
188
|
+
<div class="page-view" id="pageStats">
|
|
189
|
+
<div class="stats-page" id="statsPageContent">
|
|
190
|
+
<div class="stats-header">
|
|
191
|
+
<h2>📊 项目仪表盘 — ${projectName}</h2>
|
|
192
|
+
<p>项目开发进度总览与关键指标</p>
|
|
193
|
+
</div>
|
|
194
|
+
<!-- 内容由 JS 动态渲染 -->
|
|
195
|
+
<div id="statsContent"><div style="text-align:center;padding:60px;color:#6b7280;">加载中...</div></div>
|
|
196
|
+
</div>
|
|
197
|
+
</div>
|
|
198
|
+
|
|
199
|
+
<!-- ===== PAGE: Settings ===== -->
|
|
200
|
+
<div class="page-view" id="pageSettings">
|
|
201
|
+
<div class="settings-page">
|
|
202
|
+
<h2>⚙️ 项目设置</h2>
|
|
203
|
+
<p class="settings-subtitle">配置 ${projectName} 项目的可视化与交互选项</p>
|
|
204
|
+
|
|
205
|
+
<div class="settings-grid">
|
|
206
|
+
<!-- 左列: 节点颜色 -->
|
|
207
|
+
<div class="settings-section">
|
|
208
|
+
<div class="settings-section-title">🎨 节点颜色 <span style="font-size:11px;color:#94a3b8;font-weight:400;margin-left:6px;">适用于所有渲染引擎</span></div>
|
|
209
|
+
<div class="settings-3d-panel" id="ncColors">
|
|
210
|
+
<div class="s3d-body" style="margin-top:0;">
|
|
211
|
+
<div class="s3d-group">
|
|
212
|
+
<div class="s3d-color-row">
|
|
213
|
+
<span class="s3d-color-label"><span class="s3d-dot" style="background:#f59e0b;border-radius:50%;"></span> 项目</span>
|
|
214
|
+
<input type="color" class="s3d-color-input" id="ncColorProject" value="#f59e0b" oninput="updateNodeColor('project',this.value)">
|
|
215
|
+
<span class="s3d-color-hex" id="ncColorProjectHex">#f59e0b</span>
|
|
216
|
+
</div>
|
|
217
|
+
<div class="s3d-color-row">
|
|
218
|
+
<span class="s3d-color-label"><span class="s3d-dot" style="background:#ff6600;"></span> 模块</span>
|
|
219
|
+
<input type="color" class="s3d-color-input" id="ncColorModule" value="#ff6600" oninput="updateNodeColor('module',this.value)">
|
|
220
|
+
<span class="s3d-color-hex" id="ncColorModuleHex">#ff6600</span>
|
|
221
|
+
</div>
|
|
222
|
+
<div class="s3d-color-row">
|
|
223
|
+
<span class="s3d-color-label"><span class="s3d-dot" style="background:#22c55e;border-radius:50%;"></span> 主任务</span>
|
|
224
|
+
<input type="color" class="s3d-color-input" id="ncColorMainTask" value="#22c55e" oninput="updateNodeColor('main-task',this.value)">
|
|
225
|
+
<span class="s3d-color-hex" id="ncColorMainTaskHex">#22c55e</span>
|
|
226
|
+
</div>
|
|
227
|
+
<div class="s3d-color-row">
|
|
228
|
+
<span class="s3d-color-label"><span class="s3d-dot" style="background:#047857;border-radius:50%;"></span> 子任务</span>
|
|
229
|
+
<input type="color" class="s3d-color-input" id="ncColorSubTask" value="#047857" oninput="updateNodeColor('sub-task',this.value)">
|
|
230
|
+
<span class="s3d-color-hex" id="ncColorSubTaskHex">#047857</span>
|
|
231
|
+
</div>
|
|
232
|
+
<div class="s3d-color-row">
|
|
233
|
+
<span class="s3d-color-label"><span class="s3d-dot" style="background:#3b82f6;"></span> 文档</span>
|
|
234
|
+
<input type="color" class="s3d-color-input" id="ncColorDocument" value="#3b82f6" oninput="updateNodeColor('document',this.value)">
|
|
235
|
+
<span class="s3d-color-hex" id="ncColorDocumentHex">#3b82f6</span>
|
|
236
|
+
</div>
|
|
237
|
+
</div>
|
|
238
|
+
<button class="s3d-reset-btn" style="margin-top:8px;font-size:11px;" onclick="resetNodeColors()">↩ 恢复默认颜色</button>
|
|
239
|
+
</div>
|
|
240
|
+
</div>
|
|
241
|
+
</div>
|
|
242
|
+
|
|
243
|
+
<!-- 加载引擎 -->
|
|
244
|
+
<div class="settings-section">
|
|
245
|
+
<div class="settings-section-title">🖥️ 加载引擎</div>
|
|
246
|
+
<div class="settings-option-group" id="rendererOptions">
|
|
247
|
+
<label class="settings-radio-card selected" data-value="vis" onclick="selectRenderer('vis')">
|
|
248
|
+
<input type="radio" name="renderer" value="vis" checked>
|
|
249
|
+
<div class="radio-content">
|
|
250
|
+
<div class="radio-label">vis-network <span class="default-badge">默认</span></div>
|
|
251
|
+
<div class="radio-desc">基于 vis.js 的成熟图可视化库。使用 Canvas 2D 渲染,内置物理引擎力导向布局,支持节点拖拽、缩放、选中高亮等完整交互。适合中小规模图谱(< 2000 节点),生态成熟、兼容性好。</div>
|
|
252
|
+
</div>
|
|
253
|
+
</label>
|
|
254
|
+
<label class="settings-radio-card" data-value="3d" onclick="selectRenderer('3d')">
|
|
255
|
+
<input type="radio" name="renderer" value="3d">
|
|
256
|
+
<div class="radio-content">
|
|
257
|
+
<div class="radio-label">3D Force Graph <span style="font-size:10px;padding:1px 6px;border-radius:4px;background:linear-gradient(135deg,#7c3aed,#3b82f6);color:#e0e7ff;font-weight:500;">Three.js</span></div>
|
|
258
|
+
<div class="radio-desc">基于 Three.js + d3-force-3d 的 3D 球体可视化引擎。节点在三维空间中浮动、旋转、缩放,整体呈球形分布。支持 WebGL 硬件加速渲染、轨道控制器旋转视角、节点拖拽固定、流动粒子特效。适合沉浸式图谱探索。</div>
|
|
259
|
+
</div>
|
|
260
|
+
</label>
|
|
261
|
+
</div>
|
|
262
|
+
</div>
|
|
263
|
+
|
|
264
|
+
<!-- 通用图谱显示设置 (适用于所有引擎) -->
|
|
265
|
+
<div class="settings-section">
|
|
266
|
+
<div class="settings-section-title">🔗 图谱显示</div>
|
|
267
|
+
<div class="settings-3d-panel">
|
|
268
|
+
<div class="s3d-body" style="margin-top:0;">
|
|
269
|
+
<div class="s3d-group">
|
|
270
|
+
<div class="s3d-toggle-row">
|
|
271
|
+
<span class="s3d-toggle-label">显示主节点连线 <span style="font-size:10px;color:#6b7280;margin-left:4px;">(项目节点 ↔ 周围节点的连线)</span></span>
|
|
272
|
+
<label class="s3d-toggle"><input type="checkbox" id="settingShowProjectEdges" onchange="updateGraphSetting('showProjectEdges',this.checked)"><span class="s3d-toggle-slider"></span></label>
|
|
273
|
+
</div>
|
|
274
|
+
</div>
|
|
275
|
+
</div>
|
|
276
|
+
</div>
|
|
277
|
+
</div>
|
|
278
|
+
|
|
279
|
+
<!-- 3D Force Graph 自定义设置 (仅 3D 引擎时显示) -->
|
|
280
|
+
<div class="settings-section" id="settings3dSection" style="display:none;">
|
|
281
|
+
<div class="settings-section-title">🎛️ 3D Force Graph 参数</div>
|
|
282
|
+
<div class="settings-3d-grid">
|
|
283
|
+
|
|
284
|
+
<!-- 布局模式 -->
|
|
285
|
+
<div class="settings-3d-panel" id="s3dLayout">
|
|
286
|
+
<div class="s3d-header" onclick="toggle3DPanel('s3dLayout')">
|
|
287
|
+
<div class="s3d-header-title">🪐 布局模式</div>
|
|
288
|
+
<span class="s3d-header-arrow">▼</span>
|
|
289
|
+
</div>
|
|
290
|
+
<div class="s3d-body">
|
|
291
|
+
<div class="s3d-group">
|
|
292
|
+
<div class="s3d-layout-radios" style="display:flex;gap:8px;margin-bottom:10px;">
|
|
293
|
+
<label style="flex:1;display:flex;align-items:center;gap:6px;padding:8px 12px;background:rgba(99,102,241,0.08);border:1px solid rgba(99,102,241,0.2);border-radius:8px;cursor:pointer;font-size:12px;color:#e2e8f0;transition:all 0.2s;">
|
|
294
|
+
<input type="radio" name="s3dLayoutMode" value="force" onchange="updateLayoutMode('force')" style="accent-color:#6366f1;">
|
|
295
|
+
<span>⚡ 力导向</span>
|
|
296
|
+
</label>
|
|
297
|
+
<label style="flex:1;display:flex;align-items:center;gap:6px;padding:8px 12px;background:rgba(99,102,241,0.08);border:1px solid rgba(99,102,241,0.2);border-radius:8px;cursor:pointer;font-size:12px;color:#e2e8f0;transition:all 0.2s;">
|
|
298
|
+
<input type="radio" name="s3dLayoutMode" value="orbital" onchange="updateLayoutMode('orbital')" style="accent-color:#6366f1;">
|
|
299
|
+
<span>🪐 行星轨道</span>
|
|
300
|
+
</label>
|
|
301
|
+
</div>
|
|
302
|
+
<div class="s3d-desc" style="font-size:11px;color:#94a3b8;margin-bottom:10px;line-height:1.4;">
|
|
303
|
+
行星轨道模式:项目节点为中心(太阳),模块/主任务/子任务/文档按层级排列在固定间距的同心轨道上,类似太阳系行星排列。
|
|
304
|
+
</div>
|
|
305
|
+
<div id="s3dOrbitalSettings" style="display:none;">
|
|
306
|
+
<div class="s3d-row">
|
|
307
|
+
<span class="s3d-label">轨道间距</span>
|
|
308
|
+
<input type="range" class="s3d-slider" id="s3dOrbitSpacing" min="30" max="200" step="10" value="80" oninput="update3DSetting('orbitSpacing',this.value)">
|
|
309
|
+
<span class="s3d-value" id="s3dOrbitSpacingVal">80</span>
|
|
310
|
+
</div>
|
|
311
|
+
<div class="s3d-row">
|
|
312
|
+
<span class="s3d-label">轨道引力</span>
|
|
313
|
+
<input type="range" class="s3d-slider" id="s3dOrbitStrength" min="0.1" max="2.0" step="0.1" value="0.8" oninput="update3DSetting('orbitStrength',this.value)">
|
|
314
|
+
<span class="s3d-value" id="s3dOrbitStrengthVal">0.80</span>
|
|
315
|
+
</div>
|
|
316
|
+
<div class="s3d-row">
|
|
317
|
+
<span class="s3d-label">平面化</span>
|
|
318
|
+
<input type="range" class="s3d-slider" id="s3dOrbitFlatten" min="0" max="1.0" step="0.1" value="0.6" oninput="update3DSetting('orbitFlatten',this.value)">
|
|
319
|
+
<span class="s3d-value" id="s3dOrbitFlattenVal">0.60</span>
|
|
320
|
+
</div>
|
|
321
|
+
<div class="s3d-desc" style="font-size:10px;color:#64748b;margin:4px 0 8px;">平面化=0 → 3D 球壳布局;平面化=1 → 完全扁平太阳系圆盘</div>
|
|
322
|
+
<div class="s3d-toggle-row">
|
|
323
|
+
<span class="s3d-toggle-label">显示轨道环线</span>
|
|
324
|
+
<label class="s3d-toggle"><input type="checkbox" id="s3dShowOrbits" checked onchange="update3DSetting('showOrbits',this.checked)"><span class="s3d-toggle-slider"></span></label>
|
|
325
|
+
</div>
|
|
326
|
+
</div>
|
|
327
|
+
</div>
|
|
328
|
+
</div>
|
|
329
|
+
</div>
|
|
330
|
+
|
|
331
|
+
<!-- 力导向物理参数 -->
|
|
332
|
+
<div class="settings-3d-panel" id="s3dPhysics">
|
|
333
|
+
<div class="s3d-header" onclick="toggle3DPanel('s3dPhysics')">
|
|
334
|
+
<div class="s3d-header-title">⚡ 力导向物理参数</div>
|
|
335
|
+
<span class="s3d-header-arrow">▼</span>
|
|
336
|
+
</div>
|
|
337
|
+
<div class="s3d-body">
|
|
338
|
+
<div class="s3d-group">
|
|
339
|
+
<div class="s3d-row">
|
|
340
|
+
<span class="s3d-label">中心引力</span>
|
|
341
|
+
<input type="range" class="s3d-slider" id="s3dGravity" min="0.01" max="0.30" step="0.01" value="0.05" oninput="update3DSetting('gravity',this.value)">
|
|
342
|
+
<span class="s3d-value" id="s3dGravityVal">0.05</span>
|
|
343
|
+
</div>
|
|
344
|
+
<div class="s3d-row">
|
|
345
|
+
<span class="s3d-label">排斥力</span>
|
|
346
|
+
<input type="range" class="s3d-slider" id="s3dRepulsion" min="-300" max="-5" step="5" value="-30" oninput="update3DSetting('repulsion',this.value)">
|
|
347
|
+
<span class="s3d-value" id="s3dRepulsionVal">-30</span>
|
|
348
|
+
</div>
|
|
349
|
+
<div class="s3d-row">
|
|
350
|
+
<span class="s3d-label">连接距离</span>
|
|
351
|
+
<input type="range" class="s3d-slider" id="s3dLinkDist" min="10" max="120" step="5" value="40" oninput="update3DSetting('linkDistance',this.value)">
|
|
352
|
+
<span class="s3d-value" id="s3dLinkDistVal">40</span>
|
|
353
|
+
</div>
|
|
354
|
+
<div class="s3d-row">
|
|
355
|
+
<span class="s3d-label">速度衰减</span>
|
|
356
|
+
<input type="range" class="s3d-slider" id="s3dVelocityDecay" min="0.1" max="0.8" step="0.05" value="0.30" oninput="update3DSetting('velocityDecay',this.value)">
|
|
357
|
+
<span class="s3d-value" id="s3dVelocityDecayVal">0.30</span>
|
|
358
|
+
</div>
|
|
359
|
+
<div class="s3d-row">
|
|
360
|
+
<span class="s3d-label">Alpha衰减</span>
|
|
361
|
+
<input type="range" class="s3d-slider" id="s3dAlphaDecay" min="0.005" max="0.05" step="0.005" value="0.020" oninput="update3DSetting('alphaDecay',this.value)">
|
|
362
|
+
<span class="s3d-value" id="s3dAlphaDecayVal">0.020</span>
|
|
363
|
+
</div>
|
|
364
|
+
</div>
|
|
365
|
+
<!-- 类型分层 (天体间距效果) -->
|
|
366
|
+
<div class="s3d-group" style="margin-top:8px; border-top:1px solid rgba(99,102,241,0.12); padding-top:8px;">
|
|
367
|
+
<div style="font-size:11px; color:#94a3b8; margin-bottom:6px;">🌍 类型分层 — 不同类型节点保持空间距离(类似天体间距)</div>
|
|
368
|
+
<div class="s3d-toggle-row">
|
|
369
|
+
<span class="s3d-toggle-label">启用类型分层</span>
|
|
370
|
+
<label class="s3d-toggle"><input type="checkbox" id="s3dTypeSeparation" checked onchange="update3DSetting('typeSeparation',this.checked)"><span class="s3d-toggle-slider"></span></label>
|
|
371
|
+
</div>
|
|
372
|
+
<div class="s3d-row">
|
|
373
|
+
<span class="s3d-label">分层强度</span>
|
|
374
|
+
<input type="range" class="s3d-slider" id="s3dTypeSepStrength" min="0.1" max="2.0" step="0.1" value="0.8" oninput="update3DSetting('typeSepStrength',this.value)">
|
|
375
|
+
<span class="s3d-value" id="s3dTypeSepStrengthVal">0.80</span>
|
|
376
|
+
</div>
|
|
377
|
+
<div class="s3d-row">
|
|
378
|
+
<span class="s3d-label">层间间距</span>
|
|
379
|
+
<input type="range" class="s3d-slider" id="s3dTypeSepSpacing" min="30" max="200" step="10" value="80" oninput="update3DSetting('typeSepSpacing',this.value)">
|
|
380
|
+
<span class="s3d-value" id="s3dTypeSepSpacingVal">80</span>
|
|
381
|
+
</div>
|
|
382
|
+
</div>
|
|
383
|
+
</div>
|
|
384
|
+
</div>
|
|
385
|
+
|
|
386
|
+
<!-- 节点大小 -->
|
|
387
|
+
<div class="settings-3d-panel" id="s3dSizes">
|
|
388
|
+
<div class="s3d-header" onclick="toggle3DPanel('s3dSizes')">
|
|
389
|
+
<div class="s3d-header-title">📐 节点大小</div>
|
|
390
|
+
<span class="s3d-header-arrow">▼</span>
|
|
391
|
+
</div>
|
|
392
|
+
<div class="s3d-body">
|
|
393
|
+
<div class="s3d-group">
|
|
394
|
+
<div class="s3d-row">
|
|
395
|
+
<span class="s3d-label">项目</span>
|
|
396
|
+
<input type="range" class="s3d-slider" id="s3dSizeProject" min="10" max="100" step="5" value="50" oninput="update3DSetting('sizeProject',this.value)">
|
|
397
|
+
<span class="s3d-value" id="s3dSizeProjectVal">50</span>
|
|
398
|
+
</div>
|
|
399
|
+
<div class="s3d-row">
|
|
400
|
+
<span class="s3d-label">模块</span>
|
|
401
|
+
<input type="range" class="s3d-slider" id="s3dSizeModule" min="5" max="50" step="1" value="25" oninput="update3DSetting('sizeModule',this.value)">
|
|
402
|
+
<span class="s3d-value" id="s3dSizeModuleVal">25</span>
|
|
403
|
+
</div>
|
|
404
|
+
<div class="s3d-row">
|
|
405
|
+
<span class="s3d-label">主任务</span>
|
|
406
|
+
<input type="range" class="s3d-slider" id="s3dSizeMainTask" min="3" max="30" step="1" value="15" oninput="update3DSetting('sizeMainTask',this.value)">
|
|
407
|
+
<span class="s3d-value" id="s3dSizeMainTaskVal">15</span>
|
|
408
|
+
</div>
|
|
409
|
+
<div class="s3d-row">
|
|
410
|
+
<span class="s3d-label">子任务</span>
|
|
411
|
+
<input type="range" class="s3d-slider" id="s3dSizeSubTask" min="1" max="20" step="1" value="8" oninput="update3DSetting('sizeSubTask',this.value)">
|
|
412
|
+
<span class="s3d-value" id="s3dSizeSubTaskVal">8</span>
|
|
413
|
+
</div>
|
|
414
|
+
<div class="s3d-row">
|
|
415
|
+
<span class="s3d-label">文档</span>
|
|
416
|
+
<input type="range" class="s3d-slider" id="s3dSizeDocument" min="1" max="20" step="1" value="10" oninput="update3DSetting('sizeDocument',this.value)">
|
|
417
|
+
<span class="s3d-value" id="s3dSizeDocumentVal">10</span>
|
|
418
|
+
</div>
|
|
419
|
+
</div>
|
|
420
|
+
</div>
|
|
421
|
+
</div>
|
|
422
|
+
|
|
423
|
+
<!-- 视觉效果 -->
|
|
424
|
+
<div class="settings-3d-panel" id="s3dVisual">
|
|
425
|
+
<div class="s3d-header" onclick="toggle3DPanel('s3dVisual')">
|
|
426
|
+
<div class="s3d-header-title">✨ 视觉效果</div>
|
|
427
|
+
<span class="s3d-header-arrow">▼</span>
|
|
428
|
+
</div>
|
|
429
|
+
<div class="s3d-body">
|
|
430
|
+
<div class="s3d-group">
|
|
431
|
+
<div class="s3d-toggle-row">
|
|
432
|
+
<span class="s3d-toggle-label">流动粒子特效</span>
|
|
433
|
+
<label class="s3d-toggle"><input type="checkbox" id="s3dParticles" checked onchange="update3DSetting('particles',this.checked)"><span class="s3d-toggle-slider"></span></label>
|
|
434
|
+
</div>
|
|
435
|
+
<div class="s3d-toggle-row">
|
|
436
|
+
<span class="s3d-toggle-label">方向箭头</span>
|
|
437
|
+
<label class="s3d-toggle"><input type="checkbox" id="s3dArrows" onchange="update3DSetting('arrows',this.checked)"><span class="s3d-toggle-slider"></span></label>
|
|
438
|
+
</div>
|
|
439
|
+
<div class="s3d-row">
|
|
440
|
+
<span class="s3d-label">节点透明度</span>
|
|
441
|
+
<input type="range" class="s3d-slider" id="s3dNodeOpacity" min="0.3" max="1.0" step="0.05" value="0.90" oninput="update3DSetting('nodeOpacity',this.value)">
|
|
442
|
+
<span class="s3d-value" id="s3dNodeOpacityVal">0.92</span>
|
|
443
|
+
</div>
|
|
444
|
+
<div class="s3d-row">
|
|
445
|
+
<span class="s3d-label">边透明度</span>
|
|
446
|
+
<input type="range" class="s3d-slider" id="s3dLinkOpacity" min="0.05" max="1.0" step="0.05" value="0.25" oninput="update3DSetting('linkOpacity',this.value)">
|
|
447
|
+
<span class="s3d-value" id="s3dLinkOpacityVal">0.25</span>
|
|
448
|
+
</div>
|
|
449
|
+
<div class="s3d-color-row">
|
|
450
|
+
<span class="s3d-color-label">背景色</span>
|
|
451
|
+
<input type="color" class="s3d-color-input" id="s3dBgColor" value="#0a0e1a" oninput="update3DSetting('bgColor',this.value);document.getElementById('s3dBgColorHex').textContent=this.value;">
|
|
452
|
+
<span class="s3d-color-hex" id="s3dBgColorHex">#0a0e1a</span>
|
|
453
|
+
</div>
|
|
454
|
+
</div>
|
|
455
|
+
</div>
|
|
456
|
+
</div>
|
|
457
|
+
|
|
458
|
+
</div><!-- /settings-3d-grid -->
|
|
459
|
+
<button class="s3d-reset-btn" style="margin-top:16px;" onclick="reset3DSettings()">↩ 恢复默认设置</button>
|
|
460
|
+
</div>
|
|
461
|
+
|
|
462
|
+
</div><!-- /settings-grid -->
|
|
463
|
+
</div>
|
|
464
|
+
</div>
|
|
465
|
+
|
|
466
|
+
</div>
|
|
467
|
+
</div>
|
|
468
|
+
|
|
469
|
+
<!-- Settings Toast -->
|
|
470
|
+
<div class="settings-saved-toast" id="settingsSavedToast">✅ 引擎修改成功,正在重新加载页面...</div>
|
|
471
|
+
|
|
472
|
+
<!-- Stats Modal -->
|
|
473
|
+
<div class="stats-modal-overlay" id="statsModalOverlay">
|
|
474
|
+
<div class="stats-modal">
|
|
475
|
+
<div class="stats-modal-header">
|
|
476
|
+
<div><span class="stats-modal-title" id="statsModalTitle">列表</span><span class="stats-modal-count" id="statsModalCount"></span></div>
|
|
477
|
+
<button class="stats-modal-close" onclick="closeStatsModal()">×</button>
|
|
478
|
+
</div>
|
|
479
|
+
<div class="stats-modal-body" id="statsModalBody"></div>
|
|
480
|
+
</div>
|
|
481
|
+
</div>
|
|
482
|
+
`;
|
|
483
|
+
}
|
|
484
|
+
//# sourceMappingURL=template-html.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template-html.js","sourceRoot":"","sources":["../../src/visualize/template-html.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;AAEH,0BAwdC;AAxdD,SAAgB,OAAO,CAAC,WAAmB;IACzC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iFAgDwE,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2BAmIjE,WAAW;;;;;;;;;;;;0CAYI,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuRpD,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template-pages.d.ts","sourceRoot":"","sources":["../../src/visualize/template-pages.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,wBAAgB,cAAc,IAAI,MAAM,CA4xBvC"}
|