@musnows/scriverse 0.4.12 → 0.5.1
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/ai.js +279 -4
- package/dist/ai.js.map +1 -1
- package/dist/app.js +34 -11
- package/dist/app.js.map +1 -1
- package/dist/database.js +55 -0
- package/dist/database.js.map +1 -1
- package/dist/pagination.js +1 -1
- package/dist/public/app.js +470 -75
- package/dist/public/global-search.d.ts +12 -0
- package/dist/public/global-search.js +23 -0
- package/dist/public/index.html +17 -4
- package/dist/public/relationship-filters.d.ts +10 -0
- package/dist/public/relationship-filters.js +11 -0
- package/dist/public/relationship-graph.js +59 -3
- package/dist/public/styles.css +244 -5
- package/dist/store.js +110 -32
- package/dist/store.js.map +1 -1
- package/dist/user-auth.js +12 -0
- package/dist/user-auth.js.map +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export type GlobalSearchTarget =
|
|
2
|
+
| { kind: "chapter"; type: "chapter"; id: string; module: "editor" }
|
|
3
|
+
| {
|
|
4
|
+
kind: "entity";
|
|
5
|
+
type: "setting" | "character" | "race" | "organization";
|
|
6
|
+
id: string;
|
|
7
|
+
module: "settings" | "characters" | "races" | "organizations";
|
|
8
|
+
entity: "setting" | "character" | "race" | "organization";
|
|
9
|
+
apiPath: string;
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
export function resolveGlobalSearchTarget(result?: { type?: unknown; id?: unknown }): GlobalSearchTarget | null;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
const entityTargets = Object.freeze({
|
|
2
|
+
setting: Object.freeze({ module: "settings", entity: "setting", resource: "settings" }),
|
|
3
|
+
character: Object.freeze({ module: "characters", entity: "character", resource: "characters" }),
|
|
4
|
+
race: Object.freeze({ module: "races", entity: "race", resource: "races" }),
|
|
5
|
+
organization: Object.freeze({ module: "organizations", entity: "organization", resource: "organizations" })
|
|
6
|
+
});
|
|
7
|
+
|
|
8
|
+
export function resolveGlobalSearchTarget(result = {}) {
|
|
9
|
+
const type = String(result.type ?? "").trim();
|
|
10
|
+
const id = String(result.id ?? "").trim();
|
|
11
|
+
if (!id) return null;
|
|
12
|
+
if (type === "chapter") return { kind: "chapter", type, id, module: "editor" };
|
|
13
|
+
const target = entityTargets[type];
|
|
14
|
+
if (!target) return null;
|
|
15
|
+
return {
|
|
16
|
+
kind: "entity",
|
|
17
|
+
type,
|
|
18
|
+
id,
|
|
19
|
+
module: target.module,
|
|
20
|
+
entity: target.entity,
|
|
21
|
+
apiPath: `/api/${target.resource}/${encodeURIComponent(id)}`
|
|
22
|
+
};
|
|
23
|
+
}
|
package/dist/public/index.html
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
<link rel="icon" href="/icon.svg?v=20260712" type="image/svg+xml">
|
|
11
11
|
<link rel="manifest" href="/site.webmanifest">
|
|
12
12
|
<link rel="stylesheet" href="/vendor/vditor/dist/index.css?v=3.11.2">
|
|
13
|
-
<link rel="stylesheet" href="/styles.css?v=20260726-
|
|
13
|
+
<link rel="stylesheet" href="/styles.css?v=20260726-task-progress-ring-trace-lazy-load">
|
|
14
14
|
</head>
|
|
15
15
|
<body class="auth-pending">
|
|
16
16
|
<section id="auth-view" class="auth-view hidden" aria-labelledby="auth-title">
|
|
@@ -172,7 +172,7 @@
|
|
|
172
172
|
<div class="settings-hub-grid">
|
|
173
173
|
<button id="platform-ai-button" class="settings-hub-card hidden" type="button" data-settings-action="ai"><span class="settings-card-mark">AI</span><strong>AI 管理</strong><small>供应商、模型、上下文与全局提示词</small></button>
|
|
174
174
|
<button id="user-management-button" class="settings-hub-card hidden" type="button"><span class="settings-card-mark">人</span><strong>用户管理</strong><small>管理员、普通用户与账户状态</small></button>
|
|
175
|
-
<button id="platform-ui-settings-button" class="settings-hub-card hidden" type="button"><span class="settings-card-mark">界</span><strong
|
|
175
|
+
<button id="platform-ui-settings-button" class="settings-hub-card hidden" type="button"><span class="settings-card-mark">界</span><strong>界面与分页</strong><small>设置通知位置及各模块的单页数量</small></button>
|
|
176
176
|
<button id="collaboration-button" class="settings-hub-card" type="button"><span class="settings-card-mark">协</span><strong>作品协作</strong><small>邀请注册用户共同编辑当前作品</small></button>
|
|
177
177
|
<button id="appearance-button" class="settings-hub-card" type="button" data-settings-action="appearance"><span class="settings-card-mark">Aa</span><strong>显示设置</strong><small>中文字体、等宽英文字体、字号与行距</small></button>
|
|
178
178
|
<button id="export-button" class="settings-hub-card" type="button" data-settings-action="export"><span class="settings-card-mark">MD</span><strong>导出作品</strong><small>将当前作品安全导出为 Markdown</small></button>
|
|
@@ -337,6 +337,10 @@
|
|
|
337
337
|
<button class="dialog-close" value="cancel" aria-label="关闭" type="submit">×</button>
|
|
338
338
|
</div>
|
|
339
339
|
<div id="dialog-fields" class="dialog-fields"></div>
|
|
340
|
+
<div id="dialog-submit-status" class="dialog-submit-status hidden" role="status" aria-live="polite">
|
|
341
|
+
<span id="dialog-submit-status-message">正在提交,请稍候</span>
|
|
342
|
+
<div class="dialog-submit-progress" role="progressbar" aria-label="提交处理中" aria-valuetext="正在等待服务器响应"><span></span></div>
|
|
343
|
+
</div>
|
|
340
344
|
<div class="dialog-actions">
|
|
341
345
|
<button class="ghost-button" value="cancel" type="submit">取消</button>
|
|
342
346
|
<button id="dialog-submit" class="primary-button" value="default" type="submit">保存</button>
|
|
@@ -575,11 +579,20 @@
|
|
|
575
579
|
</dialog>
|
|
576
580
|
|
|
577
581
|
<dialog id="platform-ui-settings-dialog" class="dialog" aria-labelledby="platform-ui-settings-title">
|
|
578
|
-
<div class="dialog-header"><div><span class="eyebrow">系统管理员</span><h2 id="platform-ui-settings-title"
|
|
582
|
+
<div class="dialog-header"><div><span class="eyebrow">系统管理员</span><h2 id="platform-ui-settings-title">界面与分页</h2></div><button id="platform-ui-settings-close" class="dialog-close" aria-label="关闭" type="button">×</button></div>
|
|
579
583
|
<form id="platform-ui-settings-form">
|
|
580
584
|
<div class="dialog-fields">
|
|
581
585
|
<label>Toast 提示位置<select id="toast-position" name="toastPosition" aria-label="Toast 提示位置"><option value="bottom-right">右下角(默认)</option><option value="top-right">右上角</option></select></label>
|
|
582
586
|
<small>该设置对所有用户生效,保存后的提示会立即显示在新位置。</small>
|
|
587
|
+
<fieldset class="pagination-settings-fieldset">
|
|
588
|
+
<legend>各模块单页数量</legend>
|
|
589
|
+
<small>每个模块独立设置,允许 10–100 条;默认均为 30 条。</small>
|
|
590
|
+
<div class="pagination-settings-grid">
|
|
591
|
+
<label>角色列表<input id="page-size-characters" name="pageSizeCharacters" type="number" min="10" max="100" step="1" required aria-label="角色列表单页数量"></label>
|
|
592
|
+
<label>AI 分析任务<input id="page-size-analysis-tasks" name="pageSizeAnalysisTasks" type="number" min="10" max="100" step="1" required aria-label="AI 分析任务单页数量"></label>
|
|
593
|
+
<label>正文导入历史<input id="page-size-file-versions" name="pageSizeFileVersions" type="number" min="10" max="100" step="1" required aria-label="正文导入历史单页数量"></label>
|
|
594
|
+
</div>
|
|
595
|
+
</fieldset>
|
|
583
596
|
</div>
|
|
584
597
|
<div class="dialog-actions"><button class="ghost-button" id="platform-ui-settings-cancel" type="button">取消</button><button class="primary-button" id="platform-ui-settings-save" type="submit">保存设置</button></div>
|
|
585
598
|
</form>
|
|
@@ -732,6 +745,6 @@
|
|
|
732
745
|
<div id="auth-loading" class="auth-loading" role="status" aria-label="正在载入工作台"></div>
|
|
733
746
|
<script id="vditorIconScript" src="/vendor/vditor/dist/js/icons/ant.js?v=3.11.2"></script>
|
|
734
747
|
<script src="/vendor/vditor/dist/index.min.js?v=3.11.2"></script>
|
|
735
|
-
<script type="module" src="/app.js?v=20260726-
|
|
748
|
+
<script type="module" src="/app.js?v=20260726-task-progress-ring-trace-lazy-load"></script>
|
|
736
749
|
</body>
|
|
737
750
|
</html>
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
type RelationshipFilterItem = {
|
|
2
|
+
id?: string;
|
|
3
|
+
fromCharacterId?: string | null;
|
|
4
|
+
toCharacterId?: string | null;
|
|
5
|
+
};
|
|
6
|
+
|
|
7
|
+
export declare function filterRelationships<T extends RelationshipFilterItem>(
|
|
8
|
+
relationships: T[],
|
|
9
|
+
filters?: { fromCharacterIds?: string[]; toCharacterIds?: string[] }
|
|
10
|
+
): T[];
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export function filterRelationships(relationships, { fromCharacterIds = [], toCharacterIds = [] } = {}) {
|
|
2
|
+
const selectedFromCharacterIds = new Set(fromCharacterIds.map(String).filter(Boolean));
|
|
3
|
+
const selectedToCharacterIds = new Set(toCharacterIds.map(String).filter(Boolean));
|
|
4
|
+
return relationships.filter((relationship) => {
|
|
5
|
+
const matchesFromCharacter = selectedFromCharacterIds.size === 0
|
|
6
|
+
|| selectedFromCharacterIds.has(String(relationship?.fromCharacterId ?? ""));
|
|
7
|
+
const matchesToCharacter = selectedToCharacterIds.size === 0
|
|
8
|
+
|| selectedToCharacterIds.has(String(relationship?.toCharacterId ?? ""));
|
|
9
|
+
return matchesFromCharacter && matchesToCharacter;
|
|
10
|
+
});
|
|
11
|
+
}
|
|
@@ -45,6 +45,32 @@ export function getRelationshipNetworkInitialScale(nodeCount, expanded = false)
|
|
|
45
45
|
return 1;
|
|
46
46
|
}
|
|
47
47
|
|
|
48
|
+
export function getRelationshipNodeFocusView(position, viewport, layout, currentScale = 1) {
|
|
49
|
+
const width = Math.max(0, Number(viewport?.width) || 0);
|
|
50
|
+
const height = Math.max(0, Number(viewport?.height) || 0);
|
|
51
|
+
const layoutWidth = Math.max(1, Number(layout?.width) || 1);
|
|
52
|
+
const layoutHeight = Math.max(1, Number(layout?.height) || 1);
|
|
53
|
+
const scale = clamp(Math.max(Number(currentScale) || 1, 1.8), 0.45, 3.2);
|
|
54
|
+
return {
|
|
55
|
+
scale,
|
|
56
|
+
x: width / 2 - Number(position?.x ?? 0) / layoutWidth * width * scale,
|
|
57
|
+
y: height / 2 - Number(position?.y ?? 0) / layoutHeight * height * scale
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export function shouldShowRelationshipNodeLabel(nodeIndex, degree, nodeCount, viewScale, expanded = false) {
|
|
62
|
+
const count = Math.max(0, Number(nodeCount) || 0);
|
|
63
|
+
const defaultLabelLimit = count > 180 ? 36 : count > 120 ? 48 : count > 80 ? 64 : count;
|
|
64
|
+
return Boolean(expanded) || Number(nodeIndex) < defaultLabelLimit || Number(degree) >= 4 || Number(viewScale) > 1.35;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export function getRelationshipNodeLabelFontSize(viewScale, nodeCount) {
|
|
68
|
+
const scale = clamp(Number(viewScale) || 1, 0.45, 3.2);
|
|
69
|
+
const count = Math.max(0, Number(nodeCount) || 0);
|
|
70
|
+
const screenFontSize = count > 180 ? 8 : count > 120 ? 8.5 : 9;
|
|
71
|
+
return screenFontSize / scale;
|
|
72
|
+
}
|
|
73
|
+
|
|
48
74
|
const GALAXY_CELESTIAL_PALETTES = Object.freeze([
|
|
49
75
|
Object.freeze({ key: "solar", hue: 42, saturation: 96, lightness: 68, color: "#ffc95f", core: "#fff8d4", rim: "#9f3c18", atmosphere: "rgba(255,184,72,.58)", ring: "rgba(255,222,151,.72)" }),
|
|
50
76
|
Object.freeze({ key: "azure", hue: 211, saturation: 94, lightness: 68, color: "#61b8ff", core: "#effaff", rim: "#173b85", atmosphere: "rgba(79,156,255,.56)", ring: "rgba(164,214,255,.68)" }),
|
|
@@ -835,12 +861,25 @@ export function renderRelationshipMindMap(container, graph, options = {}) {
|
|
|
835
861
|
help.textContent = "滚轮缩放 · 拖拽空白平移 · 拖拽节点固定 · 悬浮高亮关联";
|
|
836
862
|
viewport.append(focusBadge, help);
|
|
837
863
|
|
|
864
|
+
const nodeElements = new Map();
|
|
865
|
+
const updateNodeLabelVisibility = () => {
|
|
866
|
+
graph.nodes.forEach((node, index) => {
|
|
867
|
+
nodeElements.get(node.id)?.classList.toggle(
|
|
868
|
+
"is-label-visible",
|
|
869
|
+
shouldShowRelationshipNodeLabel(index, node.degree, graph.nodes.length, viewScale, options.expanded)
|
|
870
|
+
);
|
|
871
|
+
});
|
|
872
|
+
};
|
|
838
873
|
const updateViewTransform = (animate = false) => {
|
|
874
|
+
const labelFontSize = getRelationshipNodeLabelFontSize(viewScale, graph.nodes.length);
|
|
839
875
|
stage.classList.toggle("is-view-animating", animate);
|
|
840
876
|
stage.style.transform = `translate(${viewX}px, ${viewY}px) scale(${viewScale})`;
|
|
877
|
+
stage.style.setProperty("--relationship-node-label-font-size", `${labelFontSize.toFixed(3)}px`);
|
|
841
878
|
viewport.dataset.graphScale = viewScale.toFixed(3);
|
|
842
879
|
viewport.dataset.viewX = viewX.toFixed(1);
|
|
843
880
|
viewport.dataset.viewY = viewY.toFixed(1);
|
|
881
|
+
viewport.dataset.nodeLabelScreenFontSize = (labelFontSize * viewScale).toFixed(3);
|
|
882
|
+
updateNodeLabelVisibility();
|
|
844
883
|
if (animate) window.setTimeout(() => stage.classList.remove("is-view-animating"), 360);
|
|
845
884
|
};
|
|
846
885
|
updateViewTransform();
|
|
@@ -948,8 +987,6 @@ export function renderRelationshipMindMap(container, graph, options = {}) {
|
|
|
948
987
|
svg.append(label);
|
|
949
988
|
stage.append(svg);
|
|
950
989
|
|
|
951
|
-
const nodeElements = new Map();
|
|
952
|
-
const defaultLabelLimit = graph.nodes.length > 180 ? 36 : graph.nodes.length > 120 ? 48 : graph.nodes.length > 80 ? 64 : graph.nodes.length;
|
|
953
990
|
const updateNodePosition = (nodeId) => {
|
|
954
991
|
const position = positions.get(nodeId);
|
|
955
992
|
const button = nodeElements.get(nodeId);
|
|
@@ -1271,7 +1308,7 @@ export function renderRelationshipMindMap(container, graph, options = {}) {
|
|
|
1271
1308
|
button.className = `mind-node network-node obsidian-node${node.locked ? " is-locked" : ""}${node.degree === 0 ? " is-isolated" : ""}`;
|
|
1272
1309
|
button.dataset.nodeId = node.id;
|
|
1273
1310
|
button.dataset.groupKey = node.groupKey || appearance.group.key;
|
|
1274
|
-
button.classList.toggle("is-label-visible", graph.nodes.indexOf(node)
|
|
1311
|
+
button.classList.toggle("is-label-visible", shouldShowRelationshipNodeLabel(graph.nodes.indexOf(node), node.degree, graph.nodes.length, viewScale, options.expanded));
|
|
1275
1312
|
button.style.setProperty("--node-size", `${nodeSize}px`);
|
|
1276
1313
|
button.style.setProperty("--node-color-light", node.color || appearance.color);
|
|
1277
1314
|
button.style.setProperty("--node-color-dark", node.darkColor || appearance.darkColor);
|
|
@@ -1368,6 +1405,7 @@ export function renderRelationshipMindMap(container, graph, options = {}) {
|
|
|
1368
1405
|
selectedId = node.id;
|
|
1369
1406
|
options.onSelect?.(node.id);
|
|
1370
1407
|
applyNodeFocus(node.id);
|
|
1408
|
+
focusViewOnNode(node.id);
|
|
1371
1409
|
});
|
|
1372
1410
|
}
|
|
1373
1411
|
|
|
@@ -1375,6 +1413,7 @@ export function renderRelationshipMindMap(container, graph, options = {}) {
|
|
|
1375
1413
|
viewScale = 1;
|
|
1376
1414
|
viewX = 0;
|
|
1377
1415
|
viewY = 0;
|
|
1416
|
+
delete viewport.dataset.focusedNodeId;
|
|
1378
1417
|
updateViewTransform(true);
|
|
1379
1418
|
};
|
|
1380
1419
|
const setDefaultView = (animate = false) => {
|
|
@@ -1383,8 +1422,22 @@ export function renderRelationshipMindMap(container, graph, options = {}) {
|
|
|
1383
1422
|
const height = viewport.clientHeight;
|
|
1384
1423
|
viewX = width ? (width - width * viewScale) / 2 : 0;
|
|
1385
1424
|
viewY = height ? (height - height * viewScale) / 2 : 0;
|
|
1425
|
+
delete viewport.dataset.focusedNodeId;
|
|
1386
1426
|
updateViewTransform(animate);
|
|
1387
1427
|
};
|
|
1428
|
+
const focusViewOnNode = (nodeId) => {
|
|
1429
|
+
const position = positions.get(nodeId);
|
|
1430
|
+
if (!position) return;
|
|
1431
|
+
const focused = getRelationshipNodeFocusView(position, {
|
|
1432
|
+
width: viewport.clientWidth,
|
|
1433
|
+
height: viewport.clientHeight
|
|
1434
|
+
}, layout, viewScale);
|
|
1435
|
+
viewScale = focused.scale;
|
|
1436
|
+
viewX = focused.x;
|
|
1437
|
+
viewY = focused.y;
|
|
1438
|
+
viewport.dataset.focusedNodeId = nodeId;
|
|
1439
|
+
updateViewTransform(true);
|
|
1440
|
+
};
|
|
1388
1441
|
const animatePositions = (targets, duration = 650) => {
|
|
1389
1442
|
freezePhysics();
|
|
1390
1443
|
if (animationFrame) window.cancelAnimationFrame(animationFrame);
|
|
@@ -1439,6 +1492,7 @@ export function renderRelationshipMindMap(container, graph, options = {}) {
|
|
|
1439
1492
|
if (!panState || event.pointerId !== panState.pointerId) return;
|
|
1440
1493
|
viewX = panState.viewX + event.clientX - panState.startX;
|
|
1441
1494
|
viewY = panState.viewY + event.clientY - panState.startY;
|
|
1495
|
+
delete viewport.dataset.focusedNodeId;
|
|
1442
1496
|
updateViewTransform();
|
|
1443
1497
|
});
|
|
1444
1498
|
const endPan = (event) => {
|
|
@@ -1460,6 +1514,7 @@ export function renderRelationshipMindMap(container, graph, options = {}) {
|
|
|
1460
1514
|
viewX = pointerX - (pointerX - viewX) * ratio;
|
|
1461
1515
|
viewY = pointerY - (pointerY - viewY) * ratio;
|
|
1462
1516
|
viewScale = nextScale;
|
|
1517
|
+
delete viewport.dataset.focusedNodeId;
|
|
1463
1518
|
updateViewTransform();
|
|
1464
1519
|
}, { passive: false });
|
|
1465
1520
|
viewport.addEventListener("click", (event) => {
|
|
@@ -1467,6 +1522,7 @@ export function renderRelationshipMindMap(container, graph, options = {}) {
|
|
|
1467
1522
|
selectedEdgeId = null;
|
|
1468
1523
|
selectedId = null;
|
|
1469
1524
|
hoveredId = null;
|
|
1525
|
+
delete viewport.dataset.focusedNodeId;
|
|
1470
1526
|
clearGraphHighlight();
|
|
1471
1527
|
});
|
|
1472
1528
|
|
package/dist/public/styles.css
CHANGED
|
@@ -1147,18 +1147,21 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
|
|
|
1147
1147
|
.platform-system-prompt-section { margin-bottom: 36px; }
|
|
1148
1148
|
.task-auto-run-panel {
|
|
1149
1149
|
display: grid;
|
|
1150
|
+
grid-template-columns: minmax(0, 1fr) 148px;
|
|
1150
1151
|
gap: 12px;
|
|
1152
|
+
column-gap: 24px;
|
|
1151
1153
|
margin-bottom: 22px;
|
|
1152
1154
|
padding: 14px;
|
|
1153
1155
|
border: 1px solid var(--line);
|
|
1154
1156
|
border-radius: 5px;
|
|
1155
1157
|
background: var(--surface-soft);
|
|
1156
1158
|
}
|
|
1157
|
-
.task-auto-run-copy { display: grid; gap: 4px; }
|
|
1159
|
+
.task-auto-run-copy { display: grid; grid-column: 1; gap: 4px; }
|
|
1158
1160
|
.task-auto-run-copy strong { font-size: 13px; }
|
|
1159
1161
|
.task-auto-run-copy small { color: var(--muted); font-size: 10px; line-height: 1.5; }
|
|
1160
1162
|
.task-auto-run-controls {
|
|
1161
1163
|
display: flex;
|
|
1164
|
+
grid-column: 1;
|
|
1162
1165
|
flex-wrap: wrap;
|
|
1163
1166
|
align-items: end;
|
|
1164
1167
|
gap: 10px 12px;
|
|
@@ -1179,18 +1182,121 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
|
|
|
1179
1182
|
align-self: center;
|
|
1180
1183
|
margin: 0;
|
|
1181
1184
|
}
|
|
1182
|
-
.task-auto-run-meta { margin: 0; color: var(--muted); font-size: 10px; }
|
|
1183
|
-
.task-auto-run-progress {
|
|
1185
|
+
.task-auto-run-meta { grid-column: 1; margin: 0; color: var(--muted); font-size: 10px; }
|
|
1186
|
+
.task-auto-run-progress {
|
|
1187
|
+
display: grid;
|
|
1188
|
+
grid-column: 2;
|
|
1189
|
+
grid-row: 1 / 4;
|
|
1190
|
+
align-self: center;
|
|
1191
|
+
justify-self: center;
|
|
1192
|
+
width: 132px;
|
|
1193
|
+
}
|
|
1194
|
+
.task-auto-run-progress-ring { position: relative; display: grid; width: 132px; height: 132px; place-items: center; }
|
|
1195
|
+
.task-auto-run-progress-ring svg { display: block; width: 100%; height: 100%; overflow: visible; transform: rotate(-90deg); }
|
|
1196
|
+
.task-auto-run-progress-ring-track, .task-auto-run-progress-ring-value { fill: none; stroke-width: 8; }
|
|
1197
|
+
.task-auto-run-progress-ring-track { stroke: color-mix(in srgb, var(--line) 72%, transparent); }
|
|
1198
|
+
.task-auto-run-progress-ring-value { stroke: var(--accent); stroke-linecap: round; transition: stroke-dasharray .25s ease; }
|
|
1199
|
+
.task-auto-run-progress-ring.is-running svg { animation: task-auto-run-active 1.8s ease-in-out infinite; }
|
|
1200
|
+
.task-auto-run-progress-ring.is-running .task-auto-run-progress-ring-value { stroke: var(--green); }
|
|
1201
|
+
.task-auto-run-progress-ring-label { position: absolute; inset: 22px; display: grid; align-content: center; justify-items: center; gap: 3px; text-align: center; }
|
|
1202
|
+
.task-auto-run-progress-ring-label strong { color: var(--ink); font-family: var(--font-latin), monospace; font-size: 22px; font-weight: 600; line-height: 1; }
|
|
1203
|
+
.task-auto-run-progress-ring-label span { color: var(--muted); font-size: 9px; line-height: 1.35; }
|
|
1204
|
+
.task-auto-run-progress-bar-layout { display: none; }
|
|
1184
1205
|
.task-auto-run-progress-label { display: flex; align-items: center; justify-content: space-between; gap: 12px; color: var(--muted); font-size: 10px; }
|
|
1185
1206
|
.task-auto-run-progress-label strong { color: var(--ink); font-family: var(--font-latin), monospace; font-size: 10px; font-weight: 600; }
|
|
1186
1207
|
.task-auto-run-progress-bar { width: 100%; height: 6px; overflow: hidden; border: 0; border-radius: 999px; appearance: none; background: color-mix(in srgb, var(--line) 72%, transparent); }
|
|
1187
1208
|
.task-auto-run-progress-bar::-webkit-progress-bar { border-radius: inherit; background: color-mix(in srgb, var(--line) 72%, transparent); }
|
|
1188
1209
|
.task-auto-run-progress-bar::-webkit-progress-value { border-radius: inherit; background: var(--accent); transition: width .25s ease; }
|
|
1189
1210
|
.task-auto-run-progress-bar::-moz-progress-bar { border-radius: inherit; background: var(--accent); transition: width .25s ease; }
|
|
1211
|
+
.task-auto-run-progress-bar.is-running { animation: task-auto-run-active 1.8s ease-in-out infinite; }
|
|
1212
|
+
.task-auto-run-progress-bar.is-running::-webkit-progress-value { background: var(--green); }
|
|
1213
|
+
.task-auto-run-progress-bar.is-running::-moz-progress-bar { background: var(--green); }
|
|
1214
|
+
.task-status-cell { width: 116px; white-space: nowrap; }
|
|
1215
|
+
.task-status-badge {
|
|
1216
|
+
--task-status-color: var(--muted);
|
|
1217
|
+
display: inline-flex;
|
|
1218
|
+
align-items: center;
|
|
1219
|
+
gap: 8px;
|
|
1220
|
+
min-height: 27px;
|
|
1221
|
+
padding: 4px 10px;
|
|
1222
|
+
border: 1px solid color-mix(in srgb, var(--task-status-color) 28%, var(--line));
|
|
1223
|
+
border-radius: 999px;
|
|
1224
|
+
background: color-mix(in srgb, var(--task-status-color) 8%, transparent);
|
|
1225
|
+
color: var(--task-status-color);
|
|
1226
|
+
font-size: 11px;
|
|
1227
|
+
font-weight: 600;
|
|
1228
|
+
}
|
|
1229
|
+
.task-status-indicator {
|
|
1230
|
+
position: relative;
|
|
1231
|
+
flex: 0 0 7px;
|
|
1232
|
+
width: 7px;
|
|
1233
|
+
height: 7px;
|
|
1234
|
+
border-radius: 50%;
|
|
1235
|
+
background: currentColor;
|
|
1236
|
+
box-shadow: 0 0 0 3px color-mix(in srgb, currentColor 13%, transparent);
|
|
1237
|
+
}
|
|
1238
|
+
.task-status-indicator::after {
|
|
1239
|
+
content: "";
|
|
1240
|
+
position: absolute;
|
|
1241
|
+
inset: -5px;
|
|
1242
|
+
border: 1px solid currentColor;
|
|
1243
|
+
border-radius: inherit;
|
|
1244
|
+
opacity: 0;
|
|
1245
|
+
}
|
|
1246
|
+
.task-status-badge.is-pending { --task-status-color: color-mix(in srgb, var(--accent) 48%, #b69043); }
|
|
1247
|
+
.task-status-badge.is-pending .task-status-indicator { background: transparent; border: 1px solid currentColor; animation: task-status-waiting 1.7s ease-in-out infinite; }
|
|
1248
|
+
.task-status-badge.is-running {
|
|
1249
|
+
--task-status-color: var(--green);
|
|
1250
|
+
animation: task-status-running-breathe 1.8s ease-in-out infinite;
|
|
1251
|
+
}
|
|
1252
|
+
.task-status-badge.is-running .task-status-indicator::after { animation: task-status-running-ripple 1.8s ease-out infinite; }
|
|
1253
|
+
.task-status-badge.is-review, .task-status-badge.is-completed { --task-status-color: var(--green); }
|
|
1254
|
+
.task-status-badge.is-partial { --task-status-color: var(--accent); }
|
|
1255
|
+
.task-status-badge.is-expired { --task-status-color: color-mix(in srgb, var(--muted) 72%, var(--accent)); border-style: dashed; }
|
|
1256
|
+
.task-status-badge.is-cancelled, .task-status-badge.is-unknown { --task-status-color: var(--muted); }
|
|
1257
|
+
.task-status-badge.is-cancelled .task-status-indicator, .task-status-badge.is-unknown .task-status-indicator { background: transparent; border: 1px solid currentColor; box-shadow: none; }
|
|
1258
|
+
.task-status-badge.is-state-change { animation: task-status-enter .42s cubic-bezier(.22, .8, .32, 1) both; }
|
|
1259
|
+
.task-status-badge.is-running.is-state-change { animation: task-status-enter .42s cubic-bezier(.22, .8, .32, 1) both, task-status-running-breathe 1.8s ease-in-out .42s infinite; }
|
|
1260
|
+
.task-status-badge.is-partial.is-state-change { animation: task-status-attention .46s ease-out both; }
|
|
1261
|
+
.task-progress-cell { width: 128px; }
|
|
1262
|
+
.task-progress { display: grid; grid-template-columns: 36px minmax(58px, 1fr); align-items: center; gap: 8px; min-width: 102px; }
|
|
1263
|
+
.task-progress-value { color: var(--ink); font-family: var(--font-latin), monospace; font-size: 11px; font-variant-numeric: tabular-nums; font-weight: 600; }
|
|
1264
|
+
.task-progress-track { position: relative; display: block; height: 5px; overflow: hidden; border-radius: 999px; background: color-mix(in srgb, var(--line) 72%, transparent); }
|
|
1265
|
+
.task-progress-fill { position: relative; display: block; width: var(--task-progress); height: 100%; overflow: hidden; border-radius: inherit; background: var(--muted); transition: width .35s ease; }
|
|
1266
|
+
.task-progress.is-running .task-progress-fill, .task-progress.is-review .task-progress-fill, .task-progress.is-completed .task-progress-fill { background: var(--green); }
|
|
1267
|
+
.task-progress.is-partial .task-progress-fill { background: var(--accent); }
|
|
1268
|
+
.task-progress.is-running .task-progress-fill::after {
|
|
1269
|
+
content: "";
|
|
1270
|
+
position: absolute;
|
|
1271
|
+
inset: 0;
|
|
1272
|
+
background: linear-gradient(90deg, transparent, color-mix(in srgb, var(--surface) 64%, transparent), transparent);
|
|
1273
|
+
transform: translateX(-100%);
|
|
1274
|
+
animation: task-progress-shimmer 1.55s ease-in-out infinite;
|
|
1275
|
+
}
|
|
1276
|
+
.task-progress.is-pending .task-progress-track::after {
|
|
1277
|
+
content: "";
|
|
1278
|
+
position: absolute;
|
|
1279
|
+
top: 0;
|
|
1280
|
+
bottom: 0;
|
|
1281
|
+
width: 34%;
|
|
1282
|
+
border-radius: inherit;
|
|
1283
|
+
background: color-mix(in srgb, var(--accent) 32%, transparent);
|
|
1284
|
+
animation: task-progress-waiting 1.9s ease-in-out infinite;
|
|
1285
|
+
}
|
|
1286
|
+
@keyframes task-auto-run-active { 0%, 100% { filter: drop-shadow(0 0 0 transparent); opacity: .72; } 50% { filter: drop-shadow(0 0 4px color-mix(in srgb, var(--green) 42%, transparent)); opacity: 1; } }
|
|
1287
|
+
@keyframes task-status-waiting { 0%, 100% { opacity: .45; transform: scale(.74); } 50% { opacity: 1; transform: scale(1); } }
|
|
1288
|
+
@keyframes task-status-running-breathe { 0%, 100% { background: color-mix(in srgb, var(--green) 5%, transparent); box-shadow: 0 0 0 0 transparent; opacity: .72; } 50% { background: color-mix(in srgb, var(--green) 16%, transparent); box-shadow: 0 0 12px color-mix(in srgb, var(--green) 20%, transparent); opacity: 1; } }
|
|
1289
|
+
@keyframes task-status-running-ripple { 0% { opacity: .62; transform: scale(.38); } 70%, 100% { opacity: 0; transform: scale(1.18); } }
|
|
1290
|
+
@keyframes task-status-enter { from { opacity: .25; transform: translateY(3px) scale(.92); } 65% { transform: translateY(0) scale(1.04); } to { opacity: 1; transform: scale(1); } }
|
|
1291
|
+
@keyframes task-status-attention { 0% { opacity: .35; transform: translateX(0); } 35% { transform: translateX(-3px); } 65% { transform: translateX(3px); } 100% { opacity: 1; transform: translateX(0); } }
|
|
1292
|
+
@keyframes task-progress-shimmer { 0% { transform: translateX(-100%); } 58%, 100% { transform: translateX(100%); } }
|
|
1293
|
+
@keyframes task-progress-waiting { 0% { left: -34%; opacity: .32; } 50% { opacity: .74; } 100% { left: 100%; opacity: .32; } }
|
|
1190
1294
|
.task-row-actions { display: flex; flex-wrap: wrap; gap: 6px; }
|
|
1191
1295
|
.task-detail { display: grid; gap: 12px; }
|
|
1192
1296
|
.task-detail p, .task-detail div { margin: 0; font-size: 12px; line-height: 1.55; }
|
|
1193
1297
|
.task-detail ul { margin: 6px 0 0; padding-left: 18px; }
|
|
1298
|
+
.task-detail-overview { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px 22px; padding: 16px; border: 1px solid var(--line); border-radius: 6px; background: var(--surface-soft); }
|
|
1299
|
+
.task-detail-overview > div, .task-detail-overview > p:first-child, .task-detail-overview > p:last-child { grid-column: 1 / -1; }
|
|
1194
1300
|
.task-detail-result {
|
|
1195
1301
|
max-height: 220px;
|
|
1196
1302
|
overflow: auto;
|
|
@@ -1202,6 +1308,72 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
|
|
|
1202
1308
|
font-size: 10px;
|
|
1203
1309
|
white-space: pre-wrap;
|
|
1204
1310
|
}
|
|
1311
|
+
.task-trace-section { display: grid; gap: 16px; min-width: 0; margin-top: 6px; }
|
|
1312
|
+
.task-trace-heading { display: flex; align-items: end; justify-content: space-between; gap: 20px; padding-top: 8px; }
|
|
1313
|
+
.task-trace-heading h3 { margin: 3px 0 0; font-size: 19px; font-weight: 600; }
|
|
1314
|
+
.task-trace-heading p { max-width: 500px; color: var(--muted); text-align: right; }
|
|
1315
|
+
.task-trace-metrics { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); overflow: hidden; border: 1px solid var(--line); border-radius: 6px; background: var(--surface-soft); }
|
|
1316
|
+
.task-trace-metrics > div { display: grid; gap: 2px; padding: 13px 15px; border-right: 1px solid var(--line); }
|
|
1317
|
+
.task-trace-metrics > div:last-child { border-right: 0; }
|
|
1318
|
+
.task-trace-metrics strong { color: var(--accent-dark); font-family: var(--font-latin), ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace; font-size: 17px; font-variant-numeric: tabular-nums; }
|
|
1319
|
+
.task-trace-metrics span { color: var(--muted); font-size: 9px; letter-spacing: .04em; }
|
|
1320
|
+
.task-trace-calls { display: grid; gap: 10px; }
|
|
1321
|
+
.task-trace-call { overflow: hidden; border: 1px solid var(--line); border-radius: 7px; background: var(--surface); }
|
|
1322
|
+
.task-trace-call > summary { display: grid; grid-template-columns: 30px minmax(0, 1fr) max-content; gap: 11px; align-items: center; padding: 13px 15px; cursor: pointer; list-style: none; }
|
|
1323
|
+
.task-trace-call > summary::-webkit-details-marker, .task-trace-prompt > summary::-webkit-details-marker { display: none; }
|
|
1324
|
+
.task-trace-call > summary:hover, .task-trace-call > summary:focus-visible { background: var(--surface-soft); outline: none; }
|
|
1325
|
+
.task-trace-call > summary > span:nth-child(2) { display: grid; min-width: 0; gap: 2px; }
|
|
1326
|
+
.task-trace-call > summary small { overflow: hidden; color: var(--muted); font-size: 9px; text-overflow: ellipsis; white-space: nowrap; }
|
|
1327
|
+
.task-trace-call-index, .task-trace-round-index { display: grid; place-items: center; width: 28px; height: 28px; border: 1px solid color-mix(in srgb, var(--accent) 42%, var(--line)); border-radius: 50%; background: color-mix(in srgb, var(--accent) 9%, var(--surface)); color: var(--accent-dark); font-family: var(--font-latin), ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace; font-size: 10px; font-weight: 700; }
|
|
1328
|
+
.task-trace-status { padding: 3px 8px; border: 1px solid var(--line); border-radius: 999px; color: var(--muted); font-size: 9px; }
|
|
1329
|
+
.task-trace-call.is-completed .task-trace-status { border-color: color-mix(in srgb, var(--green) 42%, var(--line)); color: var(--green); }
|
|
1330
|
+
.task-trace-call-body { display: grid; gap: 13px; padding: 0 15px 16px 54px; border-top: 1px solid var(--line); }
|
|
1331
|
+
.task-trace-call-meta { display: flex; flex-wrap: wrap; justify-content: space-between; gap: 8px; padding-top: 12px; color: var(--muted); font-size: 9px !important; }
|
|
1332
|
+
.task-trace-call-meta code { overflow-wrap: anywhere; }
|
|
1333
|
+
.task-trace-load-state { display: flex; align-items: center; justify-content: space-between; gap: 16px; min-height: 64px; padding: 12px; border: 1px dashed var(--line-strong); border-radius: 6px; background: var(--surface-soft); }
|
|
1334
|
+
.task-trace-load-state.is-loaded { display: grid; align-items: stretch; }
|
|
1335
|
+
.task-trace-load-state > div:first-child { display: grid; gap: 4px; }
|
|
1336
|
+
.task-trace-load-state p { margin: 0; color: var(--muted); font-size: 9px; }
|
|
1337
|
+
.task-trace-round-summary > p { margin: 0 0 0 38px; color: var(--muted); font-size: 9px; }
|
|
1338
|
+
.task-trace-initial, .task-trace-prompt, .task-trace-response, .task-trace-tools > details, .task-trace-request-meta { border: 1px solid var(--line); border-radius: 5px; background: var(--surface-soft); }
|
|
1339
|
+
.task-trace-initial > summary, .task-trace-prompt > summary, .task-trace-response > summary, .task-trace-tools > details > summary, .task-trace-request-meta > summary { padding: 9px 11px; color: var(--muted); cursor: pointer; font-size: 10px; font-weight: 600; }
|
|
1340
|
+
.task-trace-initial[open] > summary, .task-trace-prompt[open] > summary, .task-trace-response[open] > summary, .task-trace-tools > details[open] > summary, .task-trace-request-meta[open] > summary { border-bottom: 1px solid var(--line); color: var(--ink); }
|
|
1341
|
+
.task-trace-messages { display: grid; gap: 8px; padding: 10px; }
|
|
1342
|
+
.task-trace-message { min-width: 0; overflow: hidden; border: 1px solid var(--line); border-left: 3px solid var(--line-strong); border-radius: 4px; background: var(--surface); }
|
|
1343
|
+
.task-trace-message.is-system { border-left-color: var(--accent); }
|
|
1344
|
+
.task-trace-message.is-user { border-left-color: color-mix(in srgb, var(--accent) 56%, #9d7a45); }
|
|
1345
|
+
.task-trace-message.is-assistant { border-left-color: var(--green); }
|
|
1346
|
+
.task-trace-message header { display: flex; justify-content: space-between; gap: 12px; padding: 7px 9px; border-bottom: 1px solid var(--line); color: var(--muted); }
|
|
1347
|
+
.task-trace-message header span { color: var(--ink); font-size: 10px; font-weight: 600; }
|
|
1348
|
+
.task-trace-message header small { font-family: var(--font-latin), ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace; font-size: 8px; font-variant-numeric: tabular-nums; }
|
|
1349
|
+
.task-trace-message pre, .task-trace-response pre, .task-trace-tools pre, .task-trace-request-meta pre { max-height: 360px; overflow: auto; margin: 0; padding: 10px; background: transparent; color: var(--ink); font-family: var(--font-latin), ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace; font-size: 10px; line-height: 1.55; tab-size: 2; white-space: pre-wrap; overflow-wrap: anywhere; }
|
|
1350
|
+
.task-trace-message > details { margin: 0 9px 9px; border: 1px solid var(--line); border-radius: 4px; }
|
|
1351
|
+
.task-trace-message > details summary { padding: 6px 8px; cursor: pointer; color: var(--muted); font-size: 9px; }
|
|
1352
|
+
.task-trace-message > small { display: block; padding: 0 9px 9px; color: var(--muted); font-size: 8px; }
|
|
1353
|
+
.task-trace-rounds { display: grid; gap: 18px; }
|
|
1354
|
+
.task-trace-round { position: relative; display: grid; gap: 10px; min-width: 0; padding: 14px; border: 1px solid var(--line); border-radius: 6px; background: var(--surface-soft); }
|
|
1355
|
+
.task-trace-round-header { display: grid; grid-template-columns: 28px minmax(0, 1fr) max-content; gap: 10px; align-items: center; }
|
|
1356
|
+
.task-trace-round-header > div { display: grid; gap: 2px; }
|
|
1357
|
+
.task-trace-round-header small, .task-trace-round-header time { color: var(--muted); font-size: 9px; }
|
|
1358
|
+
.task-trace-flow { display: flex; align-items: center; gap: 7px; padding-left: 38px; color: var(--muted); font-size: 9px !important; }
|
|
1359
|
+
.task-trace-flow span { padding: 3px 7px; border: 1px solid var(--line); border-radius: 999px; background: var(--surface); }
|
|
1360
|
+
.task-trace-flow i { color: var(--line-strong); font-style: normal; }
|
|
1361
|
+
.task-trace-attempts { display: grid; gap: 8px; }
|
|
1362
|
+
.task-trace-attempt { display: grid; gap: 8px; min-width: 0; padding: 10px; border-left: 2px solid var(--line-strong); background: var(--surface); }
|
|
1363
|
+
.task-trace-attempt.is-completed { border-left-color: var(--green); }
|
|
1364
|
+
.task-trace-attempt.is-failed { border-left-color: var(--accent); }
|
|
1365
|
+
.task-trace-attempt > header { display: flex; flex-wrap: wrap; align-items: baseline; gap: 6px 12px; }
|
|
1366
|
+
.task-trace-attempt > header span, .task-trace-attempt > header small { color: var(--muted); font-size: 9px; }
|
|
1367
|
+
.task-trace-attempt > header small { margin-left: auto; }
|
|
1368
|
+
.task-trace-tools { display: grid; gap: 7px; }
|
|
1369
|
+
.task-trace-tool-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); }
|
|
1370
|
+
.task-trace-tool-grid > div + div { border-left: 1px solid var(--line); }
|
|
1371
|
+
.task-trace-tool-grid small { display: block; padding: 8px 10px 0; color: var(--muted); font-size: 8px; }
|
|
1372
|
+
.task-trace-failure { max-height: 220px; overflow: auto; margin: 0; padding: 9px 10px; border: 1px solid color-mix(in srgb, var(--accent) 46%, var(--line)); border-radius: 4px; background: color-mix(in srgb, var(--accent) 7%, var(--surface)); color: var(--accent-dark); font-family: var(--font-latin), ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace; font-size: 10px; white-space: pre-wrap; }
|
|
1373
|
+
.task-trace-empty { padding: 10px; color: var(--muted); font-size: 10px !important; }
|
|
1374
|
+
.task-trace-unavailable { padding: 18px; border: 1px dashed var(--line-strong); border-radius: 6px; background: var(--surface-soft); }
|
|
1375
|
+
.task-trace-unavailable strong { font-size: 12px; }
|
|
1376
|
+
.task-trace-unavailable p { margin-top: 5px; color: var(--muted); }
|
|
1205
1377
|
.config-section-header { display: flex; align-items: flex-end; justify-content: space-between; margin-bottom: 14px; }
|
|
1206
1378
|
.config-section-header h2 { margin: 0 0 6px; font-size: 18px; font-weight: 600; }
|
|
1207
1379
|
.config-section-header p { margin: 0; color: var(--muted); font-size: 11px; }
|
|
@@ -1365,7 +1537,7 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
|
|
|
1365
1537
|
white-space: nowrap;
|
|
1366
1538
|
pointer-events: none;
|
|
1367
1539
|
color: var(--relationship-node-label);
|
|
1368
|
-
font-size: 9px;
|
|
1540
|
+
font-size: var(--relationship-node-label-font-size, 9px);
|
|
1369
1541
|
font-weight: 400;
|
|
1370
1542
|
letter-spacing: .01em;
|
|
1371
1543
|
text-shadow: var(--relationship-node-text-shadow);
|
|
@@ -1715,6 +1887,8 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
|
|
|
1715
1887
|
|
|
1716
1888
|
.dialog { width: min(570px, 92vw); max-height: 88vh; border: 1px solid var(--line); border-radius: 5px; padding: 0; background: var(--panel); box-shadow: var(--shadow); }
|
|
1717
1889
|
.wide-dialog { width: min(800px, 92vw); }
|
|
1890
|
+
.trace-dialog { width: min(1180px, 94vw); }
|
|
1891
|
+
.trace-dialog .dialog-fields { max-height: 68vh; }
|
|
1718
1892
|
.dialog::backdrop { background: rgba(34,30,25,.42); backdrop-filter: blur(3px); }
|
|
1719
1893
|
.dialog-header { display: flex; justify-content: space-between; align-items: flex-start; padding: 22px 24px 16px; border-bottom: 1px solid var(--line); }
|
|
1720
1894
|
.dialog-header h2 { margin: 0; font-size: 23px; font-weight: 500; }
|
|
@@ -1823,6 +1997,40 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
|
|
|
1823
1997
|
.member-chip input:focus-visible + span { outline: 2px solid var(--accent); outline-offset: 2px; }
|
|
1824
1998
|
.checkbox-field { display: flex !important; align-items: center; grid-template-columns: 18px 1fr; }
|
|
1825
1999
|
.checkbox-field input { width: 16px; }
|
|
2000
|
+
.dialog-submit-status {
|
|
2001
|
+
display: grid;
|
|
2002
|
+
gap: 9px;
|
|
2003
|
+
padding: 12px 24px 4px;
|
|
2004
|
+
border-top: 1px solid color-mix(in srgb, var(--green) 24%, var(--line));
|
|
2005
|
+
background: color-mix(in srgb, var(--green) 5%, var(--panel));
|
|
2006
|
+
color: var(--green);
|
|
2007
|
+
font-size: 10px;
|
|
2008
|
+
font-weight: 600;
|
|
2009
|
+
}
|
|
2010
|
+
.dialog-submit-status.hidden { display: none; }
|
|
2011
|
+
.dialog-submit-status > span { display: flex; align-items: center; gap: 8px; }
|
|
2012
|
+
.dialog-submit-status > span::before {
|
|
2013
|
+
flex: 0 0 auto;
|
|
2014
|
+
width: 7px;
|
|
2015
|
+
height: 7px;
|
|
2016
|
+
border-radius: 50%;
|
|
2017
|
+
background: var(--green);
|
|
2018
|
+
box-shadow: 0 0 0 0 color-mix(in srgb, var(--green) 32%, transparent);
|
|
2019
|
+
content: "";
|
|
2020
|
+
animation: dialog-submit-pulse 1.45s ease-in-out infinite;
|
|
2021
|
+
}
|
|
2022
|
+
.dialog-submit-progress { height: 3px; overflow: hidden; border-radius: 2px; background: color-mix(in srgb, var(--green) 16%, transparent); }
|
|
2023
|
+
.dialog-submit-progress > span {
|
|
2024
|
+
display: block;
|
|
2025
|
+
width: 36%;
|
|
2026
|
+
height: 100%;
|
|
2027
|
+
border-radius: inherit;
|
|
2028
|
+
background: var(--green);
|
|
2029
|
+
animation: dialog-submit-progress 1.35s ease-in-out infinite;
|
|
2030
|
+
}
|
|
2031
|
+
#dynamic-form.is-submitting .dialog-fields { opacity: .68; pointer-events: none; transition: opacity .15s ease; }
|
|
2032
|
+
@keyframes dialog-submit-pulse { 0%, 100% { opacity: .48; transform: scale(.78); } 50% { box-shadow: 0 0 0 5px transparent; opacity: 1; transform: scale(1); } }
|
|
2033
|
+
@keyframes dialog-submit-progress { from { transform: translateX(-110%); } to { transform: translateX(280%); } }
|
|
1826
2034
|
.dialog-actions { display: flex; justify-content: flex-end; gap: 8px; padding: 14px 24px 20px; }
|
|
1827
2035
|
.dialog-actions .reset-button { margin-right: auto; }
|
|
1828
2036
|
.import-mode-dialog { width: min(560px, calc(100vw - 32px)); }
|
|
@@ -1859,6 +2067,11 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
|
|
|
1859
2067
|
.module-pagination span { color: var(--muted); font-size: 10px; }
|
|
1860
2068
|
.module-pagination button { min-width: 58px; min-height: 28px; padding: 5px 9px; border: 1px solid var(--line); border-radius: 4px; background: transparent; color: var(--muted); font-size: 10px; }
|
|
1861
2069
|
.module-pagination button:disabled { cursor: default; opacity: .46; }
|
|
2070
|
+
.pagination-settings-fieldset { display: grid; gap: 10px; margin: 8px 0 0; padding: 14px; border: 1px solid var(--line); border-radius: 6px; }
|
|
2071
|
+
.pagination-settings-fieldset legend { padding: 0 6px; color: var(--text); font-weight: 700; }
|
|
2072
|
+
.pagination-settings-fieldset > small { color: var(--muted); }
|
|
2073
|
+
.pagination-settings-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); gap: 10px; }
|
|
2074
|
+
.pagination-settings-grid label { display: grid; gap: 6px; min-width: 0; }
|
|
1862
2075
|
.entity-editor-view { position: fixed; z-index: 700; inset: 0; overflow: hidden; background: var(--panel); color: var(--ink); }
|
|
1863
2076
|
.entity-editor-view.hidden, .entity-editor-page.hidden { display: none; }
|
|
1864
2077
|
.entity-editor-page { width: 100%; height: 100%; min-height: 0; }
|
|
@@ -2126,6 +2339,11 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
|
|
|
2126
2339
|
@media (max-width: 850px) {
|
|
2127
2340
|
.top-actions .ghost-button:not(.settings-button) { display: none; }
|
|
2128
2341
|
.book-shelf { grid-template-columns: repeat(3, minmax(180px, 1fr)); }
|
|
2342
|
+
.task-auto-run-panel { grid-template-columns: minmax(0, 1fr); column-gap: 0; }
|
|
2343
|
+
.task-auto-run-copy, .task-auto-run-controls, .task-auto-run-meta { grid-column: 1; }
|
|
2344
|
+
.task-auto-run-progress { grid-column: 1; grid-row: auto; justify-self: stretch; width: 100%; }
|
|
2345
|
+
.task-auto-run-progress-ring { display: none; }
|
|
2346
|
+
.task-auto-run-progress-bar-layout { display: grid; gap: 6px; width: 100%; }
|
|
2129
2347
|
.settings-hub-grid { grid-template-columns: 1fr; }
|
|
2130
2348
|
.settings-layout-toolbar, .module-layout-toolbar { justify-content: stretch; }
|
|
2131
2349
|
.settings-layout-toggle, .module-layout-toggle { width: 100%; }
|
|
@@ -2357,7 +2575,7 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
|
|
|
2357
2575
|
.settings-layout-toggle, .module-layout-toggle { width: 100%; }
|
|
2358
2576
|
.settings-layout-toggle button { flex: 1; }
|
|
2359
2577
|
|
|
2360
|
-
.dialog, .wide-dialog, .account-dialog {
|
|
2578
|
+
.dialog, .wide-dialog, .trace-dialog, .account-dialog {
|
|
2361
2579
|
width: calc(100vw - 20px);
|
|
2362
2580
|
max-width: calc(100vw - 20px);
|
|
2363
2581
|
max-height: calc(100dvh - 20px);
|
|
@@ -2367,6 +2585,26 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
|
|
|
2367
2585
|
.dialog-header { padding: 14px 16px 12px; }
|
|
2368
2586
|
.dialog-header h2 { font-size: 20px; }
|
|
2369
2587
|
.dialog-fields, .appearance-grid, .access-dialog-body, .account-settings-body, .versions-list, .entity-history-list { padding-inline: 16px; }
|
|
2588
|
+
.task-detail-overview { grid-template-columns: minmax(0, 1fr); padding: 12px; }
|
|
2589
|
+
.task-detail-overview > * { grid-column: 1 !important; }
|
|
2590
|
+
.task-trace-heading { align-items: start; flex-direction: column; gap: 5px; }
|
|
2591
|
+
.task-trace-heading p { text-align: left; }
|
|
2592
|
+
.task-trace-metrics { grid-template-columns: repeat(2, minmax(0, 1fr)); }
|
|
2593
|
+
.task-trace-metrics > div { border-bottom: 1px solid var(--line); }
|
|
2594
|
+
.task-trace-metrics > div:nth-child(2n) { border-right: 0; }
|
|
2595
|
+
.task-trace-metrics > div:nth-last-child(-n+2) { border-bottom: 0; }
|
|
2596
|
+
.task-trace-call > summary { grid-template-columns: 28px minmax(0, 1fr); }
|
|
2597
|
+
.task-trace-call > summary .task-trace-status { grid-column: 2; justify-self: start; }
|
|
2598
|
+
.task-trace-call-body { padding: 0 10px 12px; }
|
|
2599
|
+
.task-trace-load-state { align-items: stretch; flex-direction: column; }
|
|
2600
|
+
.task-trace-round { padding: 10px; }
|
|
2601
|
+
.task-trace-round-header { grid-template-columns: 28px minmax(0, 1fr); }
|
|
2602
|
+
.task-trace-round-header time { grid-column: 2; }
|
|
2603
|
+
.task-trace-flow { overflow-x: auto; padding-left: 0; white-space: nowrap; }
|
|
2604
|
+
.task-trace-attempt > header small { width: 100%; margin-left: 0; }
|
|
2605
|
+
.task-trace-tool-grid { grid-template-columns: minmax(0, 1fr); }
|
|
2606
|
+
.task-trace-tool-grid > div + div { border-top: 1px solid var(--line); border-left: 0; }
|
|
2607
|
+
.dialog-submit-status { padding: 10px 16px 4px; }
|
|
2370
2608
|
.dialog-actions { flex-wrap: wrap; padding: 12px 16px 16px; }
|
|
2371
2609
|
.dialog-actions > button { flex: 1 1 120px; }
|
|
2372
2610
|
.search-form { grid-template-columns: minmax(0, 1fr); }
|
|
@@ -2415,4 +2653,5 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
|
|
|
2415
2653
|
|
|
2416
2654
|
@media (prefers-reduced-motion: reduce) {
|
|
2417
2655
|
*, *::before, *::after { scroll-behavior: auto !important; animation-duration: .01ms !important; animation-iteration-count: 1 !important; transition-duration: .01ms !important; }
|
|
2656
|
+
.dialog-submit-progress > span { width: 100%; transform: none; }
|
|
2418
2657
|
}
|