@qnote/q-ai-note 1.0.5 → 1.0.7
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/README.md +41 -0
- package/dist/cli.js +55 -18
- package/dist/cli.js.map +1 -1
- package/dist/server/accessControl.d.ts +29 -0
- package/dist/server/accessControl.d.ts.map +1 -0
- package/dist/server/accessControl.js +161 -0
- package/dist/server/accessControl.js.map +1 -0
- package/dist/server/api/accessHelpers.d.ts +11 -0
- package/dist/server/api/accessHelpers.d.ts.map +1 -0
- package/dist/server/api/accessHelpers.js +45 -0
- package/dist/server/api/accessHelpers.js.map +1 -0
- package/dist/server/api/chat.d.ts.map +1 -1
- package/dist/server/api/chat.js +31 -0
- package/dist/server/api/chat.js.map +1 -1
- package/dist/server/api/diary.d.ts.map +1 -1
- package/dist/server/api/diary.js +61 -1
- package/dist/server/api/diary.js.map +1 -1
- package/dist/server/api/nodeEntities.d.ts.map +1 -1
- package/dist/server/api/nodeEntities.js +31 -0
- package/dist/server/api/nodeEntities.js.map +1 -1
- package/dist/server/api/projectSettings.d.ts +3 -0
- package/dist/server/api/projectSettings.d.ts.map +1 -0
- package/dist/server/api/projectSettings.js +29 -0
- package/dist/server/api/projectSettings.js.map +1 -0
- package/dist/server/api/sandbox.d.ts.map +1 -1
- package/dist/server/api/sandbox.js +35 -1
- package/dist/server/api/sandbox.js.map +1 -1
- package/dist/server/api/settings.d.ts.map +1 -1
- package/dist/server/api/settings.js +25 -1
- package/dist/server/api/settings.js.map +1 -1
- package/dist/server/api/workItem.d.ts.map +1 -1
- package/dist/server/api/workItem.js +59 -0
- package/dist/server/api/workItem.js.map +1 -1
- package/dist/server/config.d.ts +3 -2
- package/dist/server/config.d.ts.map +1 -1
- package/dist/server/config.js +6 -1
- package/dist/server/config.js.map +1 -1
- package/dist/server/index.d.ts +8 -2
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +102 -4
- package/dist/server/index.js.map +1 -1
- package/dist/server/projectConfig.d.ts +37 -0
- package/dist/server/projectConfig.d.ts.map +1 -0
- package/dist/server/projectConfig.js +180 -0
- package/dist/server/projectConfig.js.map +1 -0
- package/dist/web/app.js +760 -44
- package/dist/web/index.html +107 -60
- package/dist/web/styles.css +256 -11
- package/dist/web/vueRenderers.js +71 -57
- package/package.json +2 -2
package/dist/web/index.html
CHANGED
|
@@ -21,7 +21,8 @@
|
|
|
21
21
|
<li><a href="#/sandboxes" data-nav="sandboxes">沙盘</a></li>
|
|
22
22
|
<li><a href="#/diaries" data-nav="diaries">日记</a></li>
|
|
23
23
|
<li><a href="#/changes" data-nav="changes">变化</a></li>
|
|
24
|
-
<li><a href="#/settings" data-nav="settings"
|
|
24
|
+
<li><a href="#/settings" data-nav="settings">项目设置</a></li>
|
|
25
|
+
<li><a href="#/system-settings" data-nav="system-settings">系统设置</a></li>
|
|
25
26
|
</ul>
|
|
26
27
|
</nav>
|
|
27
28
|
<main class="content">
|
|
@@ -39,7 +40,10 @@
|
|
|
39
40
|
<div class="action-strip">
|
|
40
41
|
<button class="btn btn-secondary btn-sm" id="generate-insight-btn">智能总结</button>
|
|
41
42
|
<button class="btn btn-secondary btn-sm" id="generate-report-btn">生成汇报</button>
|
|
42
|
-
<button class="btn btn-secondary btn-sm" id="toggle-sandbox-
|
|
43
|
+
<button class="btn btn-secondary btn-sm ai-toggle-btn" id="toggle-sandbox-chat-btn" type="button">
|
|
44
|
+
<span class="icon" aria-hidden="true">🤖</span>
|
|
45
|
+
<span>显示 AI 助手</span>
|
|
46
|
+
</button>
|
|
43
47
|
<button class="btn btn-secondary btn-sm" id="toggle-sandbox-fullscreen-btn" type="button">全屏</button>
|
|
44
48
|
</div>
|
|
45
49
|
<div class="insight-box hidden" id="sandbox-insight-output" hidden>
|
|
@@ -109,72 +113,83 @@
|
|
|
109
113
|
<div class="drawer-subtitle" id="drawer-node-title"></div>
|
|
110
114
|
</div>
|
|
111
115
|
<div class="drawer-header-actions">
|
|
112
|
-
<button class="btn btn-secondary btn-sm" id="toggle-node-entity-form-btn" type="button">+ 新建记录</button>
|
|
113
116
|
<button class="btn btn-secondary btn-sm" id="close-node-drawer-btn">关闭</button>
|
|
114
117
|
</div>
|
|
115
118
|
</div>
|
|
116
|
-
<
|
|
117
|
-
|
|
118
|
-
<div class="
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
<
|
|
122
|
-
<div class="
|
|
123
|
-
<
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
<button class="btn btn-secondary btn-sm" data-entity-filter="capability">Capability</button>
|
|
131
|
-
<button class="btn btn-secondary btn-sm" data-entity-filter="diary">Diary</button>
|
|
132
|
-
</div>
|
|
133
|
-
|
|
134
|
-
<div class="drawer-create-form hidden" id="drawer-create-form">
|
|
135
|
-
<select id="entity-type-select">
|
|
136
|
-
<option value="issue">Issue</option>
|
|
137
|
-
<option value="knowledge">Knowledge</option>
|
|
138
|
-
<option value="capability">Capability</option>
|
|
139
|
-
</select>
|
|
140
|
-
<input type="text" id="entity-title-input" placeholder="标题(必填)">
|
|
141
|
-
<div class="entity-field-group" id="entity-assignee-group">
|
|
142
|
-
<input type="text" id="entity-assignee-input" placeholder="负责人(Issue可选)">
|
|
119
|
+
<section class="drawer-section">
|
|
120
|
+
<div class="drawer-section-title">节点概览</div>
|
|
121
|
+
<div class="summary-strip compact" id="node-entity-summary"></div>
|
|
122
|
+
</section>
|
|
123
|
+
<section class="drawer-section">
|
|
124
|
+
<div class="drawer-section-title">快速日记</div>
|
|
125
|
+
<div class="drawer-diary-quick-form">
|
|
126
|
+
<div class="sandbox-diary-quick-meta">
|
|
127
|
+
<span id="sandbox-diary-target-label">快速日记:未选中节点</span>
|
|
128
|
+
</div>
|
|
129
|
+
<textarea id="drawer-diary-content" placeholder="记录进展(日记支持 Markdown)"></textarea>
|
|
130
|
+
<div class="sandbox-diary-quick-actions">
|
|
131
|
+
<button class="btn btn-primary btn-sm" id="drawer-diary-save-btn" type="button">记录日记</button>
|
|
132
|
+
</div>
|
|
143
133
|
</div>
|
|
144
|
-
|
|
145
|
-
|
|
134
|
+
</section>
|
|
135
|
+
<section class="drawer-section">
|
|
136
|
+
<div class="drawer-section-title-row">
|
|
137
|
+
<div class="drawer-section-title">记录管理</div>
|
|
138
|
+
<button class="btn btn-secondary btn-sm" id="toggle-node-entity-form-btn" type="button">+ 新建记录</button>
|
|
146
139
|
</div>
|
|
147
|
-
<div class="entity-
|
|
148
|
-
<
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
<option value="critical">critical</option>
|
|
154
|
-
</select>
|
|
140
|
+
<div class="entity-filter-tabs" id="entity-filter-tabs">
|
|
141
|
+
<button class="btn btn-secondary btn-sm active" data-entity-filter="all">全部</button>
|
|
142
|
+
<button class="btn btn-secondary btn-sm" data-entity-filter="issue">Issue</button>
|
|
143
|
+
<button class="btn btn-secondary btn-sm" data-entity-filter="knowledge">Knowledge</button>
|
|
144
|
+
<button class="btn btn-secondary btn-sm" data-entity-filter="capability">Capability</button>
|
|
145
|
+
<button class="btn btn-secondary btn-sm" data-entity-filter="diary">Diary</button>
|
|
155
146
|
</div>
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
<option value="
|
|
160
|
-
<option value="
|
|
161
|
-
<option value="
|
|
162
|
-
<option value="collaboration">collaboration(协作能力)</option>
|
|
163
|
-
<option value="analysis">analysis(分析能力)</option>
|
|
164
|
-
<option value="delivery">delivery(交付能力)</option>
|
|
165
|
-
<option value="governance">governance(治理能力)</option>
|
|
166
|
-
<option value="other">other(其他)</option>
|
|
147
|
+
|
|
148
|
+
<div class="drawer-create-form hidden" id="drawer-create-form">
|
|
149
|
+
<select id="entity-type-select">
|
|
150
|
+
<option value="issue">Issue</option>
|
|
151
|
+
<option value="knowledge">Knowledge</option>
|
|
152
|
+
<option value="capability">Capability</option>
|
|
167
153
|
</select>
|
|
154
|
+
<input type="text" id="entity-title-input" placeholder="标题(必填)">
|
|
155
|
+
<div class="entity-field-group" id="entity-assignee-group">
|
|
156
|
+
<input type="text" id="entity-assignee-input" placeholder="负责人(Issue可选)">
|
|
157
|
+
</div>
|
|
158
|
+
<div class="entity-field-group" id="entity-status-group">
|
|
159
|
+
<select id="entity-status-select"></select>
|
|
160
|
+
</div>
|
|
161
|
+
<div class="entity-field-group" id="entity-priority-group">
|
|
162
|
+
<select id="entity-priority-select">
|
|
163
|
+
<option value="">优先级(Issue可选)</option>
|
|
164
|
+
<option value="low">low</option>
|
|
165
|
+
<option value="medium">medium</option>
|
|
166
|
+
<option value="high">high</option>
|
|
167
|
+
<option value="critical">critical</option>
|
|
168
|
+
</select>
|
|
169
|
+
</div>
|
|
170
|
+
<div class="entity-field-group" id="entity-capability-type-group">
|
|
171
|
+
<select id="entity-capability-type-input">
|
|
172
|
+
<option value="">能力类型(Capability可选)</option>
|
|
173
|
+
<option value="workflow">workflow(流程能力)</option>
|
|
174
|
+
<option value="automation">automation(自动化能力)</option>
|
|
175
|
+
<option value="tooling">tooling(工具能力)</option>
|
|
176
|
+
<option value="collaboration">collaboration(协作能力)</option>
|
|
177
|
+
<option value="analysis">analysis(分析能力)</option>
|
|
178
|
+
<option value="delivery">delivery(交付能力)</option>
|
|
179
|
+
<option value="governance">governance(治理能力)</option>
|
|
180
|
+
<option value="other">other(其他)</option>
|
|
181
|
+
</select>
|
|
182
|
+
</div>
|
|
183
|
+
<textarea id="entity-content-input" rows="4" placeholder="Markdown 内容(Knowledge/Capability 推荐)"></textarea>
|
|
184
|
+
<div class="entity-form-hint" id="entity-form-hint"></div>
|
|
185
|
+
<div class="entity-form-actions">
|
|
186
|
+
<button class="btn btn-secondary btn-sm hidden" id="cancel-edit-entity-btn" type="button">取消编辑</button>
|
|
187
|
+
<button class="btn btn-primary btn-sm" id="create-node-entity-btn" type="button">添加记录</button>
|
|
188
|
+
</div>
|
|
168
189
|
</div>
|
|
169
|
-
<textarea id="entity-content-input" rows="4" placeholder="Markdown 内容(Knowledge/Capability 推荐)"></textarea>
|
|
170
|
-
<div class="entity-form-hint" id="entity-form-hint"></div>
|
|
171
|
-
<div class="entity-form-actions">
|
|
172
|
-
<button class="btn btn-secondary btn-sm hidden" id="cancel-edit-entity-btn" type="button">取消编辑</button>
|
|
173
|
-
<button class="btn btn-primary btn-sm" id="create-node-entity-btn" type="button">添加记录</button>
|
|
174
|
-
</div>
|
|
175
|
-
</div>
|
|
176
190
|
|
|
177
|
-
|
|
191
|
+
<div class="drawer-list" id="node-entity-list"></div>
|
|
192
|
+
</section>
|
|
178
193
|
</aside>
|
|
179
194
|
</div>
|
|
180
195
|
</div>
|
|
@@ -246,7 +261,35 @@
|
|
|
246
261
|
</div>
|
|
247
262
|
|
|
248
263
|
<div id="page-settings" class="page hidden">
|
|
249
|
-
<h2
|
|
264
|
+
<h2>项目设置</h2>
|
|
265
|
+
<div class="settings-form">
|
|
266
|
+
<div class="setting-group project-setting-section">
|
|
267
|
+
<div class="project-setting-header">
|
|
268
|
+
<label>Users(按 IP 精确匹配,IP 不能复用)</label>
|
|
269
|
+
<button class="btn btn-secondary btn-sm" id="add-project-user-btn" type="button">+ 添加用户</button>
|
|
270
|
+
</div>
|
|
271
|
+
<div class="project-setting-list" id="project-users-list"></div>
|
|
272
|
+
</div>
|
|
273
|
+
<div class="setting-group project-setting-section">
|
|
274
|
+
<div class="project-setting-header">
|
|
275
|
+
<label>Profiles(支持 apply_to_all_users)</label>
|
|
276
|
+
<button class="btn btn-secondary btn-sm" id="add-project-profile-btn" type="button">+ 添加 Profile</button>
|
|
277
|
+
</div>
|
|
278
|
+
<div class="project-setting-list" id="project-profiles-list"></div>
|
|
279
|
+
</div>
|
|
280
|
+
<div class="setting-group project-setting-section">
|
|
281
|
+
<div class="project-setting-header">
|
|
282
|
+
<label>Bindings(user -> profiles)</label>
|
|
283
|
+
<button class="btn btn-secondary btn-sm" id="add-project-binding-btn" type="button">+ 添加绑定</button>
|
|
284
|
+
</div>
|
|
285
|
+
<div class="project-setting-list" id="project-bindings-list"></div>
|
|
286
|
+
</div>
|
|
287
|
+
<button class="btn btn-primary" id="save-project-settings-btn">保存项目设置</button>
|
|
288
|
+
</div>
|
|
289
|
+
</div>
|
|
290
|
+
|
|
291
|
+
<div id="page-system-settings" class="page hidden">
|
|
292
|
+
<h2>系统设置</h2>
|
|
250
293
|
<div class="settings-form">
|
|
251
294
|
<div class="setting-group">
|
|
252
295
|
<label>API URL</label>
|
|
@@ -265,6 +308,10 @@
|
|
|
265
308
|
<div class="settings-kv-list" id="setting-headers-list"></div>
|
|
266
309
|
<button class="btn btn-secondary btn-sm" id="add-setting-header-btn" type="button">+ 添加 Header</button>
|
|
267
310
|
</div>
|
|
311
|
+
<div class="setting-group">
|
|
312
|
+
<label>系统可编辑 IP(精确 IP,一行一个)</label>
|
|
313
|
+
<textarea id="setting-editable-ips" rows="5" placeholder="10.1.2.3 192.168.1.20"></textarea>
|
|
314
|
+
</div>
|
|
268
315
|
<button class="btn btn-primary" id="save-settings-btn">保存</button>
|
|
269
316
|
</div>
|
|
270
317
|
</div>
|
package/dist/web/styles.css
CHANGED
|
@@ -138,6 +138,10 @@ body {
|
|
|
138
138
|
display: none;
|
|
139
139
|
}
|
|
140
140
|
|
|
141
|
+
.hidden {
|
|
142
|
+
display: none !important;
|
|
143
|
+
}
|
|
144
|
+
|
|
141
145
|
@keyframes fadeIn {
|
|
142
146
|
from { opacity: 0; transform: translateY(8px); }
|
|
143
147
|
to { opacity: 1; transform: translateY(0); }
|
|
@@ -453,6 +457,11 @@ h2 {
|
|
|
453
457
|
background: linear-gradient(135deg, #e8f0fe 0%, #f0f7ff 100%);
|
|
454
458
|
}
|
|
455
459
|
|
|
460
|
+
.tree-parent-header.is-selected {
|
|
461
|
+
background: linear-gradient(135deg, #dbeafe 0%, #eef6ff 100%);
|
|
462
|
+
box-shadow: inset 0 0 0 1px #8bb8ff;
|
|
463
|
+
}
|
|
464
|
+
|
|
456
465
|
.tree-parent-header .node-status {
|
|
457
466
|
width: 10px;
|
|
458
467
|
height: 10px;
|
|
@@ -772,6 +781,12 @@ h2 {
|
|
|
772
781
|
background: #f7faff;
|
|
773
782
|
}
|
|
774
783
|
|
|
784
|
+
.lane-tree-node-row.is-selected {
|
|
785
|
+
border-color: #80aef5;
|
|
786
|
+
background: #edf5ff;
|
|
787
|
+
box-shadow: inset 0 0 0 1px #80aef5;
|
|
788
|
+
}
|
|
789
|
+
|
|
775
790
|
.lane-tree-node-row:focus-visible {
|
|
776
791
|
outline: 2px solid #c2dbff;
|
|
777
792
|
outline-offset: 1px;
|
|
@@ -793,6 +808,18 @@ h2 {
|
|
|
793
808
|
border-top: 1.2px solid #9bb3d8;
|
|
794
809
|
}
|
|
795
810
|
|
|
811
|
+
/* Last sibling ends with an "L" connector */
|
|
812
|
+
.lane-tree-children > .lane-tree-node:last-child::after {
|
|
813
|
+
content: '';
|
|
814
|
+
position: absolute;
|
|
815
|
+
left: -10px;
|
|
816
|
+
top: 13px;
|
|
817
|
+
bottom: -2px;
|
|
818
|
+
width: 2px;
|
|
819
|
+
background: var(--bg-secondary);
|
|
820
|
+
pointer-events: none;
|
|
821
|
+
}
|
|
822
|
+
|
|
796
823
|
.dense-lane > .dense-lane-body > .lane-tree-node > .lane-tree-node-row::before {
|
|
797
824
|
display: none;
|
|
798
825
|
}
|
|
@@ -936,6 +963,12 @@ h2 {
|
|
|
936
963
|
box-shadow: 0 4px 10px rgba(0,0,0,0.1);
|
|
937
964
|
}
|
|
938
965
|
|
|
966
|
+
.tree-leaf-node.is-selected {
|
|
967
|
+
border-color: #7aa9f8;
|
|
968
|
+
background: linear-gradient(180deg, #f5f9ff 0%, #ffffff 100%);
|
|
969
|
+
box-shadow: 0 0 0 2px rgba(122, 169, 248, 0.28), 0 6px 14px rgba(58, 108, 196, 0.12);
|
|
970
|
+
}
|
|
971
|
+
|
|
939
972
|
.tree-leaf-node .node-status {
|
|
940
973
|
display: inline-flex;
|
|
941
974
|
width: 6px;
|
|
@@ -1560,7 +1593,7 @@ h2 {
|
|
|
1560
1593
|
background: var(--bg);
|
|
1561
1594
|
border-radius: 12px;
|
|
1562
1595
|
padding: 24px;
|
|
1563
|
-
max-width:
|
|
1596
|
+
max-width: 980px;
|
|
1564
1597
|
box-shadow: var(--shadow);
|
|
1565
1598
|
}
|
|
1566
1599
|
|
|
@@ -1607,6 +1640,160 @@ h2 {
|
|
|
1607
1640
|
width: 100%;
|
|
1608
1641
|
}
|
|
1609
1642
|
|
|
1643
|
+
.project-setting-section {
|
|
1644
|
+
border: 1px solid var(--border);
|
|
1645
|
+
border-radius: 10px;
|
|
1646
|
+
padding: 12px;
|
|
1647
|
+
background: #fcfdff;
|
|
1648
|
+
}
|
|
1649
|
+
|
|
1650
|
+
.project-setting-header {
|
|
1651
|
+
display: flex;
|
|
1652
|
+
align-items: center;
|
|
1653
|
+
justify-content: space-between;
|
|
1654
|
+
gap: 10px;
|
|
1655
|
+
margin-bottom: 10px;
|
|
1656
|
+
}
|
|
1657
|
+
|
|
1658
|
+
.project-setting-list {
|
|
1659
|
+
display: flex;
|
|
1660
|
+
flex-direction: column;
|
|
1661
|
+
gap: 10px;
|
|
1662
|
+
}
|
|
1663
|
+
|
|
1664
|
+
.project-empty {
|
|
1665
|
+
font-size: 12px;
|
|
1666
|
+
color: var(--text-secondary);
|
|
1667
|
+
background: var(--bg);
|
|
1668
|
+
border: 1px dashed var(--border);
|
|
1669
|
+
border-radius: 8px;
|
|
1670
|
+
padding: 10px;
|
|
1671
|
+
}
|
|
1672
|
+
|
|
1673
|
+
.project-row {
|
|
1674
|
+
display: grid;
|
|
1675
|
+
grid-template-columns: minmax(150px, 0.9fr) minmax(180px, 1fr) minmax(360px, 1.8fr) auto;
|
|
1676
|
+
gap: 8px;
|
|
1677
|
+
align-items: center;
|
|
1678
|
+
}
|
|
1679
|
+
|
|
1680
|
+
.project-row select,
|
|
1681
|
+
.project-profile-grid select,
|
|
1682
|
+
.project-profile-grid input,
|
|
1683
|
+
.project-row input {
|
|
1684
|
+
width: 100%;
|
|
1685
|
+
border: 1px solid var(--border);
|
|
1686
|
+
border-radius: 8px;
|
|
1687
|
+
padding: 8px 10px;
|
|
1688
|
+
font-size: 13px;
|
|
1689
|
+
background: var(--bg);
|
|
1690
|
+
}
|
|
1691
|
+
|
|
1692
|
+
.project-ip-editor {
|
|
1693
|
+
border: 1px solid var(--border);
|
|
1694
|
+
border-radius: 8px;
|
|
1695
|
+
background: var(--bg);
|
|
1696
|
+
padding: 8px;
|
|
1697
|
+
display: flex;
|
|
1698
|
+
flex-direction: column;
|
|
1699
|
+
gap: 8px;
|
|
1700
|
+
}
|
|
1701
|
+
|
|
1702
|
+
.project-ip-chips {
|
|
1703
|
+
display: flex;
|
|
1704
|
+
flex-wrap: wrap;
|
|
1705
|
+
gap: 6px;
|
|
1706
|
+
min-height: 24px;
|
|
1707
|
+
}
|
|
1708
|
+
|
|
1709
|
+
.project-ip-chip {
|
|
1710
|
+
display: inline-flex;
|
|
1711
|
+
align-items: center;
|
|
1712
|
+
gap: 6px;
|
|
1713
|
+
padding: 2px 8px;
|
|
1714
|
+
border-radius: 999px;
|
|
1715
|
+
background: #eef4ff;
|
|
1716
|
+
border: 1px solid #c7d9ff;
|
|
1717
|
+
color: #1d4fae;
|
|
1718
|
+
font-size: 12px;
|
|
1719
|
+
}
|
|
1720
|
+
|
|
1721
|
+
.project-ip-remove {
|
|
1722
|
+
border: none;
|
|
1723
|
+
background: transparent;
|
|
1724
|
+
color: #1d4fae;
|
|
1725
|
+
cursor: pointer;
|
|
1726
|
+
font-size: 14px;
|
|
1727
|
+
line-height: 1;
|
|
1728
|
+
}
|
|
1729
|
+
|
|
1730
|
+
.project-ip-input-row {
|
|
1731
|
+
display: grid;
|
|
1732
|
+
grid-template-columns: 1fr auto;
|
|
1733
|
+
gap: 8px;
|
|
1734
|
+
align-items: center;
|
|
1735
|
+
}
|
|
1736
|
+
|
|
1737
|
+
.project-row.compact {
|
|
1738
|
+
grid-template-columns: 1fr 160px auto;
|
|
1739
|
+
}
|
|
1740
|
+
|
|
1741
|
+
.project-profile-card,
|
|
1742
|
+
.project-binding-card {
|
|
1743
|
+
border: 1px solid var(--border);
|
|
1744
|
+
background: var(--bg);
|
|
1745
|
+
border-radius: 8px;
|
|
1746
|
+
padding: 10px;
|
|
1747
|
+
display: flex;
|
|
1748
|
+
flex-direction: column;
|
|
1749
|
+
gap: 10px;
|
|
1750
|
+
}
|
|
1751
|
+
|
|
1752
|
+
.project-profile-grid {
|
|
1753
|
+
display: grid;
|
|
1754
|
+
grid-template-columns: minmax(170px, 1fr) minmax(200px, 1.2fr) minmax(240px, 0.8fr) auto;
|
|
1755
|
+
gap: 8px;
|
|
1756
|
+
align-items: center;
|
|
1757
|
+
}
|
|
1758
|
+
|
|
1759
|
+
.project-profile-pages {
|
|
1760
|
+
display: flex;
|
|
1761
|
+
flex-wrap: wrap;
|
|
1762
|
+
gap: 10px;
|
|
1763
|
+
}
|
|
1764
|
+
|
|
1765
|
+
.project-sandbox-items {
|
|
1766
|
+
display: flex;
|
|
1767
|
+
flex-direction: column;
|
|
1768
|
+
gap: 8px;
|
|
1769
|
+
}
|
|
1770
|
+
|
|
1771
|
+
.project-profile-footer {
|
|
1772
|
+
display: flex;
|
|
1773
|
+
justify-content: flex-end;
|
|
1774
|
+
}
|
|
1775
|
+
|
|
1776
|
+
.project-binding-profiles {
|
|
1777
|
+
display: flex;
|
|
1778
|
+
flex-wrap: wrap;
|
|
1779
|
+
gap: 10px;
|
|
1780
|
+
}
|
|
1781
|
+
|
|
1782
|
+
@media (max-width: 1180px) {
|
|
1783
|
+
.settings-form {
|
|
1784
|
+
max-width: 100%;
|
|
1785
|
+
}
|
|
1786
|
+
.project-row {
|
|
1787
|
+
grid-template-columns: 1fr;
|
|
1788
|
+
}
|
|
1789
|
+
.project-row.compact {
|
|
1790
|
+
grid-template-columns: 1fr;
|
|
1791
|
+
}
|
|
1792
|
+
.project-profile-grid {
|
|
1793
|
+
grid-template-columns: 1fr;
|
|
1794
|
+
}
|
|
1795
|
+
}
|
|
1796
|
+
|
|
1610
1797
|
/* Dialog */
|
|
1611
1798
|
dialog {
|
|
1612
1799
|
position: fixed;
|
|
@@ -1753,16 +1940,24 @@ dialog::backdrop {
|
|
|
1753
1940
|
/* Sandbox Layout - Left/Right */
|
|
1754
1941
|
.sandbox-layout {
|
|
1755
1942
|
display: grid;
|
|
1756
|
-
grid-template-columns: minmax(0,
|
|
1943
|
+
grid-template-columns: minmax(0, 1fr);
|
|
1757
1944
|
gap: 16px;
|
|
1758
|
-
height:
|
|
1945
|
+
min-height: 320px;
|
|
1759
1946
|
padding-right: 8px;
|
|
1760
1947
|
box-sizing: border-box;
|
|
1761
1948
|
position: relative;
|
|
1762
1949
|
}
|
|
1763
1950
|
|
|
1764
|
-
.sandbox-layout.
|
|
1765
|
-
grid-template-columns: minmax(0,
|
|
1951
|
+
.sandbox-layout.show-chat {
|
|
1952
|
+
grid-template-columns: minmax(0, 72fr) minmax(280px, 28fr);
|
|
1953
|
+
}
|
|
1954
|
+
|
|
1955
|
+
.sandbox-layout .sandbox-chat-section {
|
|
1956
|
+
display: none;
|
|
1957
|
+
}
|
|
1958
|
+
|
|
1959
|
+
.sandbox-layout.show-chat .sandbox-chat-section {
|
|
1960
|
+
display: flex;
|
|
1766
1961
|
}
|
|
1767
1962
|
|
|
1768
1963
|
.sandbox-layout.is-fullscreen {
|
|
@@ -1774,12 +1969,24 @@ dialog::backdrop {
|
|
|
1774
1969
|
align-items: stretch;
|
|
1775
1970
|
}
|
|
1776
1971
|
|
|
1972
|
+
.sandbox-layout.is-fullscreen.show-chat {
|
|
1973
|
+
grid-template-columns: minmax(0, 72fr) minmax(280px, 28fr);
|
|
1974
|
+
}
|
|
1975
|
+
|
|
1777
1976
|
.sandbox-layout.is-fullscreen .sandbox-tree-section,
|
|
1778
1977
|
.sandbox-layout.is-fullscreen .sandbox-chat-section {
|
|
1779
1978
|
min-height: 0;
|
|
1780
1979
|
}
|
|
1781
1980
|
|
|
1782
|
-
.sandbox-layout.is-fullscreen .sandbox-chat-section {
|
|
1981
|
+
.sandbox-layout.is-fullscreen:not(.show-chat) .sandbox-chat-section {
|
|
1982
|
+
display: none;
|
|
1983
|
+
}
|
|
1984
|
+
|
|
1985
|
+
#page-sandbox-detail.is-sandbox-fullscreen #sandbox-overview {
|
|
1986
|
+
display: none;
|
|
1987
|
+
}
|
|
1988
|
+
|
|
1989
|
+
#page-sandbox-detail.is-sandbox-fullscreen .back-link {
|
|
1783
1990
|
display: none;
|
|
1784
1991
|
}
|
|
1785
1992
|
|
|
@@ -1898,7 +2105,7 @@ dialog::backdrop {
|
|
|
1898
2105
|
}
|
|
1899
2106
|
|
|
1900
2107
|
.summary-strip.compact {
|
|
1901
|
-
margin-bottom:
|
|
2108
|
+
margin-bottom: 0;
|
|
1902
2109
|
gap: 8px;
|
|
1903
2110
|
}
|
|
1904
2111
|
|
|
@@ -1912,6 +2119,25 @@ dialog::backdrop {
|
|
|
1912
2119
|
font-size: 14px;
|
|
1913
2120
|
}
|
|
1914
2121
|
|
|
2122
|
+
.drawer-section {
|
|
2123
|
+
margin-bottom: 12px;
|
|
2124
|
+
}
|
|
2125
|
+
|
|
2126
|
+
.drawer-section-title {
|
|
2127
|
+
font-size: 12px;
|
|
2128
|
+
font-weight: 600;
|
|
2129
|
+
color: var(--text-secondary);
|
|
2130
|
+
margin: 0 0 8px;
|
|
2131
|
+
}
|
|
2132
|
+
|
|
2133
|
+
.drawer-section-title-row {
|
|
2134
|
+
display: flex;
|
|
2135
|
+
align-items: center;
|
|
2136
|
+
justify-content: space-between;
|
|
2137
|
+
gap: 8px;
|
|
2138
|
+
margin-bottom: 8px;
|
|
2139
|
+
}
|
|
2140
|
+
|
|
1915
2141
|
.drawer-create-form {
|
|
1916
2142
|
display: grid;
|
|
1917
2143
|
gap: 8px;
|
|
@@ -1919,7 +2145,7 @@ dialog::backdrop {
|
|
|
1919
2145
|
background: #f8f9fb;
|
|
1920
2146
|
border: 1px solid var(--border);
|
|
1921
2147
|
border-radius: 10px;
|
|
1922
|
-
margin-bottom:
|
|
2148
|
+
margin-bottom: 8px;
|
|
1923
2149
|
}
|
|
1924
2150
|
|
|
1925
2151
|
.drawer-create-form.hidden {
|
|
@@ -2012,7 +2238,7 @@ dialog::backdrop {
|
|
|
2012
2238
|
display: flex;
|
|
2013
2239
|
flex-wrap: wrap;
|
|
2014
2240
|
gap: 6px;
|
|
2015
|
-
margin-bottom:
|
|
2241
|
+
margin-bottom: 8px;
|
|
2016
2242
|
}
|
|
2017
2243
|
|
|
2018
2244
|
.entity-filter-tabs .btn.active {
|
|
@@ -2121,11 +2347,15 @@ dialog::backdrop {
|
|
|
2121
2347
|
|
|
2122
2348
|
@media (max-width: 1366px) {
|
|
2123
2349
|
.sandbox-layout {
|
|
2350
|
+
grid-template-columns: minmax(0, 1fr);
|
|
2351
|
+
}
|
|
2352
|
+
|
|
2353
|
+
.sandbox-layout.show-chat {
|
|
2124
2354
|
grid-template-columns: minmax(0, 70fr) minmax(260px, 30fr);
|
|
2125
2355
|
}
|
|
2126
2356
|
|
|
2127
|
-
.sandbox-layout.
|
|
2128
|
-
grid-template-columns: minmax(0,
|
|
2357
|
+
.sandbox-layout.is-fullscreen.show-chat {
|
|
2358
|
+
grid-template-columns: minmax(0, 70fr) minmax(260px, 30fr);
|
|
2129
2359
|
}
|
|
2130
2360
|
|
|
2131
2361
|
.node-entity-drawer {
|
|
@@ -2138,6 +2368,21 @@ dialog::backdrop {
|
|
|
2138
2368
|
}
|
|
2139
2369
|
}
|
|
2140
2370
|
|
|
2371
|
+
.ai-toggle-btn {
|
|
2372
|
+
background: linear-gradient(135deg, #2563eb, #1d4ed8);
|
|
2373
|
+
color: #fff;
|
|
2374
|
+
border-color: transparent;
|
|
2375
|
+
box-shadow: 0 6px 14px rgba(37, 99, 235, 0.24);
|
|
2376
|
+
}
|
|
2377
|
+
|
|
2378
|
+
.ai-toggle-btn:hover {
|
|
2379
|
+
background: linear-gradient(135deg, #1d4ed8, #1e40af);
|
|
2380
|
+
}
|
|
2381
|
+
|
|
2382
|
+
.ai-toggle-btn .icon {
|
|
2383
|
+
margin-right: 4px;
|
|
2384
|
+
}
|
|
2385
|
+
|
|
2141
2386
|
.sandbox-chat-section .chat-container {
|
|
2142
2387
|
flex: 1;
|
|
2143
2388
|
height: auto;
|