dsh-config-manager 0.1.76 → 0.1.78
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/lib/adapters/plugin-data-declared.d.ts +12 -0
- package/lib/adapters/plugin-data-declared.js +57 -0
- package/lib/adapters/plugin-data.d.ts +4 -6
- package/lib/adapters/plugin-data.js +8 -36
- package/lib/adapters/plugins.d.ts +16 -0
- package/lib/adapters/plugins.js +223 -16
- package/lib/client.d.ts +104 -9
- package/lib/client.js +1800 -718
- package/lib/core/analyzer.js +3 -1
- package/lib/core/backup.d.ts +9 -0
- package/lib/core/backup.js +16 -1
- package/lib/core/messages.d.ts +11 -0
- package/lib/core/messages.js +22 -0
- package/lib/core/plugin-cli.d.ts +26 -0
- package/lib/core/plugin-cli.js +62 -2
- package/lib/core/rollback-attribution.d.ts +81 -0
- package/lib/core/rollback-attribution.js +236 -0
- package/lib/core/rollback-merge.d.ts +22 -0
- package/lib/core/rollback-merge.js +203 -0
- package/lib/core/rollback-point.d.ts +114 -0
- package/lib/core/rollback-point.js +534 -17
- package/lib/core/types.d.ts +28 -0
- package/lib/index.d.ts +26 -3
- package/lib/index.js +129 -16
- package/lib/routes/recovery.js +11 -0
- package/lib/schema/section-registry.js +5 -5
- package/lib/schema/types.d.ts +14 -0
- package/lib/ui/badge-tone.d.ts +16 -0
- package/lib/ui/badge-tone.js +20 -0
- package/lib/ui/i18n.d.ts +4 -4
- package/lib/ui/i18n.js +8 -8
- package/lib/ui/rollback-view.d.ts +95 -0
- package/lib/ui/rollback-view.js +55 -0
- package/lib/ui/selection-model.d.ts +140 -1
- package/lib/ui/selection-model.js +241 -9
- package/package.json +1 -1
- package/src/adapters/plugin-data-declared.ts +60 -0
- package/src/adapters/plugin-data.ts +7 -33
- package/src/adapters/plugins.test.ts +162 -0
- package/src/adapters/plugins.ts +236 -17
- package/src/adapters/units.test.ts +26 -0
- package/src/client/chat/ChatEntryView.tsx +147 -46
- package/src/client/chat/chat-entry-view.test.ts +277 -1
- package/src/client/chat/chat-entry-view.ts +98 -4
- package/src/client/chat/chat-node-registration.ts +71 -0
- package/src/client/chat/chat-slots.ts +30 -12
- package/src/client/common/ContentPicker.tsx +581 -175
- package/src/client/common/host-primitives.ts +64 -1
- package/src/client/common/ui.tsx +17 -3
- package/src/client/config-manager.module.css +630 -397
- package/src/client/css-scale-guard.test.ts +41 -3
- package/src/client/css-token-guard.test.ts +10 -4
- package/src/client/export/ExportView.tsx +2 -0
- package/src/client/index.ts +15 -3
- package/src/client/locales.ts +54 -10
- package/src/client/recovery/RollbackCard.tsx +56 -2
- package/src/client/recovery/RollbackDiffPane.tsx +5 -0
- package/src/client/recovery/RollbackFileChanges.tsx +46 -2
- package/src/client/recovery/recovery-locales.ts +22 -0
- package/src/client/recovery/rollback-file-changes.test.ts +1 -1
- package/src/core/analyzer.ts +3 -1
- package/src/core/backup.ts +16 -1
- package/src/core/messages.ts +22 -0
- package/src/core/plugin-cli.fs.test.ts +65 -3
- package/src/core/plugin-cli.ts +55 -2
- package/src/core/rollback-attribution.test.ts +120 -0
- package/src/core/rollback-attribution.ts +267 -0
- package/src/core/rollback-merge.test.ts +133 -0
- package/src/core/rollback-merge.ts +213 -0
- package/src/core/rollback-point.test.ts +412 -0
- package/src/core/rollback-point.ts +560 -20
- package/src/core/types.ts +29 -0
- package/src/index.facade.test.ts +60 -0
- package/src/index.ts +133 -19
- package/src/routes/recovery.ts +11 -0
- package/src/schema/section-registry.ts +5 -5
- package/src/schema/types.ts +14 -0
- package/src/ui/badge-tone.test.ts +23 -0
- package/src/ui/badge-tone.ts +27 -0
- package/src/ui/i18n.ts +8 -8
- package/src/ui/rollback-view.test.ts +27 -0
- package/src/ui/rollback-view.ts +139 -0
- package/src/ui/selection-model.test.ts +240 -2
- package/src/ui/selection-model.ts +349 -1
package/lib/client.js
CHANGED
|
@@ -116,7 +116,7 @@ const SECTION_REGISTRY = {
|
|
|
116
116
|
},
|
|
117
117
|
plugins: {
|
|
118
118
|
id: "plugins",
|
|
119
|
-
displayName: "
|
|
119
|
+
displayName: "Plugin list",
|
|
120
120
|
group: "extensions",
|
|
121
121
|
payload: {
|
|
122
122
|
kind: "array",
|
|
@@ -234,7 +234,7 @@ const SECTION_REGISTRY = {
|
|
|
234
234
|
},
|
|
235
235
|
pluginFiles: {
|
|
236
236
|
id: "pluginFiles",
|
|
237
|
-
displayName: "
|
|
237
|
+
displayName: "Plugin config files",
|
|
238
238
|
group: "extensions",
|
|
239
239
|
payload: {
|
|
240
240
|
kind: "files",
|
|
@@ -296,7 +296,7 @@ const SECTION_REGISTRY = {
|
|
|
296
296
|
},
|
|
297
297
|
self: {
|
|
298
298
|
id: "self",
|
|
299
|
-
displayName: "
|
|
299
|
+
displayName: "Config Manager settings",
|
|
300
300
|
group: "extensions",
|
|
301
301
|
payload: {
|
|
302
302
|
kind: "files",
|
|
@@ -312,7 +312,7 @@ const SECTION_REGISTRY = {
|
|
|
312
312
|
},
|
|
313
313
|
pluginData: {
|
|
314
314
|
id: "pluginData",
|
|
315
|
-
displayName: "
|
|
315
|
+
displayName: "Plugin data dirs",
|
|
316
316
|
group: "extensions",
|
|
317
317
|
payload: {
|
|
318
318
|
kind: "files",
|
|
@@ -328,7 +328,7 @@ const SECTION_REGISTRY = {
|
|
|
328
328
|
},
|
|
329
329
|
pluginAssets: {
|
|
330
330
|
id: "pluginAssets",
|
|
331
|
-
displayName: "
|
|
331
|
+
displayName: "Plugin large files",
|
|
332
332
|
group: "extensions",
|
|
333
333
|
payload: {
|
|
334
334
|
kind: "files",
|
|
@@ -1218,10 +1218,10 @@ const uiZh = {
|
|
|
1218
1218
|
"export.category.settings": "DSH 全局设置(namespace 分区,redacted)",
|
|
1219
1219
|
"export.category.providers": "LLM Provider / Model / 默认模型 / BaseURL",
|
|
1220
1220
|
"export.category.plugins": "已安装插件清单与启用状态(不含二进制)",
|
|
1221
|
-
"export.category.pluginFiles": "
|
|
1222
|
-
"export.category.self": "
|
|
1223
|
-
"export.category.pluginData": "
|
|
1224
|
-
"export.category.pluginAssets": "
|
|
1221
|
+
"export.category.pluginFiles": "插件放在 ~/.dsh 根下的配置文件(白名单 + plugin-config/ 目录,整文件复制)",
|
|
1222
|
+
"export.category.self": "配置管理器自身的设置(同步/自动同步/分区选择/UI 偏好/市场;sync-*.json 等,不含凭据值)",
|
|
1223
|
+
"export.category.pluginData": "插件在系统主目录下的数据(如 ~/.dsh-wallpaper-engine、~/.mnemon 的配置与状态;可再生成缓存绝不收录)",
|
|
1224
|
+
"export.category.pluginAssets": "插件的大体积文件(上传的壁纸、本地数据库等;默认不勾选)",
|
|
1225
1225
|
"export.category.mcp": "MCP 服务器组合配置(需重启生效)",
|
|
1226
1226
|
"export.category.prompts": "System Prompt / Plan Mode 提示",
|
|
1227
1227
|
"export.category.skills": "用户技能文件(~/.dsh/skills)",
|
|
@@ -1755,10 +1755,10 @@ const uiEn = {
|
|
|
1755
1755
|
"export.category.settings": "Global DSH settings (namespace sections, redacted)",
|
|
1756
1756
|
"export.category.providers": "LLM providers / models / default model / base URL",
|
|
1757
1757
|
"export.category.plugins": "Installed plugin list and enablement (binaries excluded)",
|
|
1758
|
-
"export.category.pluginFiles": "
|
|
1759
|
-
"export.category.self": "
|
|
1760
|
-
"export.category.pluginData": "
|
|
1761
|
-
"export.category.pluginAssets": "
|
|
1758
|
+
"export.category.pluginFiles": "Plugin config files at the ~/.dsh root (allowlist + plugin-config/, copied whole)",
|
|
1759
|
+
"export.category.self": "Config Manager's own settings (sync / autosync / section selection / UI prefs / market; sync-*.json etc., no credential values)",
|
|
1760
|
+
"export.category.pluginData": "Plugin data under the system home directory (e.g. the config/state of ~/.dsh-wallpaper-engine and ~/.mnemon; regenerable caches are never included)",
|
|
1761
|
+
"export.category.pluginAssets": "Plugins' large files (uploaded wallpapers, local databases, ...; not selected by default)",
|
|
1762
1762
|
"export.category.mcp": "MCP server composition (restart required)",
|
|
1763
1763
|
"export.category.prompts": "System prompt / Plan Mode prompts",
|
|
1764
1764
|
"export.category.skills": "Your skill files (~/.dsh/skills)",
|
|
@@ -3641,6 +3641,256 @@ function effectiveImportPlan(plan, zipPath, state) {
|
|
|
3641
3641
|
const selection = effectiveImportSelection(plan, zipPath, state);
|
|
3642
3642
|
return plan === null || selection === null ? null : buildSelectedPlan(plan, selection);
|
|
3643
3643
|
}
|
|
3644
|
+
/**
|
|
3645
|
+
* 合并进「按插件看」那棵树的分区(导出选择器里「插件与扩展」组的成员)。
|
|
3646
|
+
*
|
|
3647
|
+
* 这四项的归属键只有 npm 包名(plugin:<包名> ↔ 来源注册表的 packages);self(配置管理器设置)
|
|
3648
|
+
* **不在**这里 —— 它不是插件,仍按普通分区行渲染。清单顺序仍由调用方给的节点顺序决定
|
|
3649
|
+
* (宿主目录已按 EXPORT_GROUPS 排好,树只在第一个成员处渲染一次)。
|
|
3650
|
+
*/
|
|
3651
|
+
const PLUGIN_TREE_SECTIONS = [
|
|
3652
|
+
"plugins",
|
|
3653
|
+
"pluginFiles",
|
|
3654
|
+
"pluginData",
|
|
3655
|
+
"pluginAssets"
|
|
3656
|
+
];
|
|
3657
|
+
/** 该分区是否合并进「按插件看」的树(见 PLUGIN_TREE_SECTIONS)。 */
|
|
3658
|
+
function isPluginTreeSection(section) {
|
|
3659
|
+
return PLUGIN_TREE_SECTIONS.includes(section);
|
|
3660
|
+
}
|
|
3661
|
+
/** 插件单元 id 前缀(与 adapters/units.ts 的 `plugin:<包名>` 同一命名空间) */
|
|
3662
|
+
const PLUGIN_UNIT_PREFIX = "plugin:";
|
|
3663
|
+
/** 把一条区域引用投影成叶子(按该分区清单是否到货决定 present / unread / absent)。 */
|
|
3664
|
+
function areaLeaf(node, ref) {
|
|
3665
|
+
const unitId = ref.section + ":" + ref.relPath;
|
|
3666
|
+
const kind = ref.role === "assets" ? "assets" : "config";
|
|
3667
|
+
const unit = node?.units.find((u) => u.id === unitId);
|
|
3668
|
+
if (unit === void 0) return {
|
|
3669
|
+
kind,
|
|
3670
|
+
section: ref.section,
|
|
3671
|
+
unitId,
|
|
3672
|
+
label: ref.relPath,
|
|
3673
|
+
sizeBytes: 0,
|
|
3674
|
+
state: node === void 0 || node.unitsUnread === true ? "unread" : "absent"
|
|
3675
|
+
};
|
|
3676
|
+
return {
|
|
3677
|
+
kind,
|
|
3678
|
+
section: ref.section,
|
|
3679
|
+
unitId,
|
|
3680
|
+
label: ref.relPath,
|
|
3681
|
+
...unit.detail !== void 0 ? { detail: unit.detail } : {},
|
|
3682
|
+
sizeBytes: unit.sizeBytes,
|
|
3683
|
+
state: "present"
|
|
3684
|
+
};
|
|
3685
|
+
}
|
|
3686
|
+
/** 把选择器分区模型投影成「按插件看」的树(纯函数)。 */
|
|
3687
|
+
function pluginTree(nodes) {
|
|
3688
|
+
const bySection = /* @__PURE__ */ new Map();
|
|
3689
|
+
for (const n of nodes) bySection.set(n.section, n);
|
|
3690
|
+
const pluginsNode = bySection.get("plugins");
|
|
3691
|
+
const entries = [];
|
|
3692
|
+
const extras = [];
|
|
3693
|
+
for (const unit of pluginsNode?.units ?? []) {
|
|
3694
|
+
if (!unit.id.startsWith(PLUGIN_UNIT_PREFIX)) {
|
|
3695
|
+
extras.push(unit);
|
|
3696
|
+
continue;
|
|
3697
|
+
}
|
|
3698
|
+
const name = unit.id.slice(7);
|
|
3699
|
+
const main = {
|
|
3700
|
+
kind: "plugin",
|
|
3701
|
+
section: "plugins",
|
|
3702
|
+
unitId: unit.id,
|
|
3703
|
+
label: unit.label,
|
|
3704
|
+
...unit.detail !== void 0 ? { detail: unit.detail } : {},
|
|
3705
|
+
sizeBytes: unit.sizeBytes,
|
|
3706
|
+
state: "present"
|
|
3707
|
+
};
|
|
3708
|
+
const areas = (unit.relatedAreas ?? []).map((ref) => areaLeaf(bySection.get(ref.section), ref));
|
|
3709
|
+
entries.push({
|
|
3710
|
+
name,
|
|
3711
|
+
main,
|
|
3712
|
+
areas,
|
|
3713
|
+
leaves: [main, ...areas]
|
|
3714
|
+
});
|
|
3715
|
+
}
|
|
3716
|
+
const buckets = [];
|
|
3717
|
+
const pluginExtras = bySection.get("plugins");
|
|
3718
|
+
if (pluginExtras !== void 0) buckets.push({
|
|
3719
|
+
section: "plugins",
|
|
3720
|
+
loaded: pluginExtras.unitsUnread !== true,
|
|
3721
|
+
units: extras
|
|
3722
|
+
});
|
|
3723
|
+
/**
|
|
3724
|
+
* 只留一个桶:pluginFiles。
|
|
3725
|
+
*
|
|
3726
|
+
* 它没有任何包名信息(白名单文件 + `plugin-config/<任意目录名>/`),按目录名猜包名 = 猜错就在树里
|
|
3727
|
+
* 勾错东西 ⇒ 整块归「未归属」。**pluginData / pluginAssets 里没被插件声明认领的单元不再单列
|
|
3728
|
+
* 「遗留数据」桶**(用户 2026-10-17 明确要求:不需要看到这些)—— 它们仍会随该分区整体勾选导出,
|
|
3729
|
+
* 只是不在插件树里单开一行。
|
|
3730
|
+
*/
|
|
3731
|
+
for (const id of ["pluginFiles"]) {
|
|
3732
|
+
const node = bySection.get(id);
|
|
3733
|
+
if (node === void 0) continue;
|
|
3734
|
+
buckets.push({
|
|
3735
|
+
section: id,
|
|
3736
|
+
loaded: node.unitsUnread !== true,
|
|
3737
|
+
units: node.units
|
|
3738
|
+
});
|
|
3739
|
+
}
|
|
3740
|
+
return {
|
|
3741
|
+
pluginsLoaded: pluginsNode !== void 0 && pluginsNode.unitsUnread !== true,
|
|
3742
|
+
entries,
|
|
3743
|
+
buckets
|
|
3744
|
+
};
|
|
3745
|
+
}
|
|
3746
|
+
/** 树上的搜索过滤:插件名命中 → 保留它全部叶子;否则只保留标签命中的叶子;桶按单元标签过滤。 */
|
|
3747
|
+
function filterPluginTree(tree, query) {
|
|
3748
|
+
const q = query.trim().toLowerCase();
|
|
3749
|
+
if (q === "") return tree;
|
|
3750
|
+
const hit = (text) => text.toLowerCase().includes(q);
|
|
3751
|
+
const entries = tree.entries.map((e) => hit(e.name) ? e : {
|
|
3752
|
+
...e,
|
|
3753
|
+
leaves: e.leaves.filter((l) => hit(l.label) || hit(l.detail ?? ""))
|
|
3754
|
+
}).filter((e) => hit(e.name) || e.leaves.length > 0);
|
|
3755
|
+
const buckets = tree.buckets.map((b) => ({
|
|
3756
|
+
...b,
|
|
3757
|
+
units: b.units.filter((u) => hit(u.label) || hit(u.detail ?? ""))
|
|
3758
|
+
})).filter((b) => b.units.length > 0);
|
|
3759
|
+
return {
|
|
3760
|
+
...tree,
|
|
3761
|
+
entries,
|
|
3762
|
+
buckets
|
|
3763
|
+
};
|
|
3764
|
+
}
|
|
3765
|
+
/** 该插件节点下**真实可勾选**的叶子(unread / absent 不参与勾选)。 */
|
|
3766
|
+
function pluginEntryLeaves(entry) {
|
|
3767
|
+
return entry.leaves.filter((l) => l.state === "present");
|
|
3768
|
+
}
|
|
3769
|
+
/**
|
|
3770
|
+
* 该插件名下**已知**的叶子(存在 + 还没读到清单的区域声明)。
|
|
3771
|
+
*
|
|
3772
|
+
* 计数与三态用它,**不用 pluginEntryLeaves(只含 present)**:否则「已选 n/m」会随清单到货跳动 ——
|
|
3773
|
+
* 折叠时显示 1/1、展开(触发了读取)后变成 1/3,用户看到的是「数字自己变了」(2026-10-17 实测反馈)。
|
|
3774
|
+
* absent(注册表说有、盘上确实没有)不计入:它永远不可勾,算进去只会让分母虚高。
|
|
3775
|
+
*/
|
|
3776
|
+
function pluginEntryKnownLeaves(entry) {
|
|
3777
|
+
return entry.leaves.filter((l) => l.state !== "absent");
|
|
3778
|
+
}
|
|
3779
|
+
function pluginEntryTotalCount(entry) {
|
|
3780
|
+
return pluginEntryKnownLeaves(entry).length;
|
|
3781
|
+
}
|
|
3782
|
+
function pluginEntrySelectedCount(sel, entry) {
|
|
3783
|
+
return pluginEntryLeaves(entry).reduce((n, l) => n + (unitChecked(sel, l.section, l.unitId) ? 1 : 0), 0);
|
|
3784
|
+
}
|
|
3785
|
+
/**
|
|
3786
|
+
* 插件节点三态(与分区/分组同一套口径,但分母用**已知**叶子)。
|
|
3787
|
+
*
|
|
3788
|
+
* 还有区域没读到(unread)时最多只能是 `partial`:那些单元此刻勾不上,
|
|
3789
|
+
* 报「全选」会让用户以为已经全带上(真正补齐见 ContentPicker 的待补勾队列)。
|
|
3790
|
+
*/
|
|
3791
|
+
function pluginEntryPickState(sel, entry) {
|
|
3792
|
+
const known = pluginEntryKnownLeaves(entry);
|
|
3793
|
+
if (known.length === 0) return "none";
|
|
3794
|
+
const picked = pluginEntrySelectedCount(sel, entry);
|
|
3795
|
+
if (picked === 0) return "none";
|
|
3796
|
+
return picked === known.length ? "all" : "partial";
|
|
3797
|
+
}
|
|
3798
|
+
/**
|
|
3799
|
+
* 插件节点级勾选:把它名下**存在的**单元一起勾 / 取消。
|
|
3800
|
+
*
|
|
3801
|
+
* 逐个走 toggleUnit:分区未勾时「勾一个单元 = 只勾这一个」的既有语义因此自动生效,
|
|
3802
|
+
* 不会因为一键操作就把整个 pluginData / pluginAssets 分区静默全选。
|
|
3803
|
+
*/
|
|
3804
|
+
function togglePluginEntry(sel, nodes, entry, checked) {
|
|
3805
|
+
let out = sel;
|
|
3806
|
+
for (const leaf of pluginEntryLeaves(entry)) out = toggleUnit(out, nodes, leaf.unitId, checked);
|
|
3807
|
+
return out;
|
|
3808
|
+
}
|
|
3809
|
+
/** 树上所有**真实可勾选**的叶子(各插件名下存在单元的合计;不含未归属 / 遗留数据桶)。 */
|
|
3810
|
+
function pluginTreeLeaves(tree) {
|
|
3811
|
+
return tree.entries.flatMap((e) => pluginEntryLeaves(e));
|
|
3812
|
+
}
|
|
3813
|
+
/** 树上**已知**的叶子(存在 + 未读取;不含 absent)—— 一级区块的计数与三态用它,口径同插件节点。 */
|
|
3814
|
+
function pluginTreeKnownLeaves(tree) {
|
|
3815
|
+
return tree.entries.flatMap((e) => pluginEntryKnownLeaves(e));
|
|
3816
|
+
}
|
|
3817
|
+
function pluginTreeTotalCount(tree) {
|
|
3818
|
+
return pluginTreeKnownLeaves(tree).length;
|
|
3819
|
+
}
|
|
3820
|
+
function pluginTreeSelectedCount(sel, tree) {
|
|
3821
|
+
return pluginTreeLeaves(tree).reduce((n, l) => n + (unitChecked(sel, l.section, l.unitId) ? 1 : 0), 0);
|
|
3822
|
+
}
|
|
3823
|
+
/**
|
|
3824
|
+
* 「插件」一级区块(把全部插件收在一个可折叠区块里)的三态。
|
|
3825
|
+
*
|
|
3826
|
+
* 只算**插件名下真实存在的叶子**:未归属 / 遗留数据是「无法归属的东西」,不参与这个勾选框 ——
|
|
3827
|
+
* 否则「全选所有插件」会顺手把没人认领的散落配置一起带上。
|
|
3828
|
+
*/
|
|
3829
|
+
function pluginTreePickState(sel, tree) {
|
|
3830
|
+
const known = pluginTreeKnownLeaves(tree);
|
|
3831
|
+
if (known.length === 0) return "none";
|
|
3832
|
+
const picked = pluginTreeSelectedCount(sel, tree);
|
|
3833
|
+
if (picked === 0) return "none";
|
|
3834
|
+
return picked === known.length ? "all" : "partial";
|
|
3835
|
+
}
|
|
3836
|
+
/** 一级区块勾选:把所有插件名下存在的单元一起勾 / 取消(逐个走 toggleUnit;含未归属桶吗?不含)。 */
|
|
3837
|
+
function togglePluginTree(sel, nodes, tree, checked) {
|
|
3838
|
+
let out = sel;
|
|
3839
|
+
for (const leaf of pluginTreeLeaves(tree)) out = toggleUnit(out, nodes, leaf.unitId, checked);
|
|
3840
|
+
return out;
|
|
3841
|
+
}
|
|
3842
|
+
/**
|
|
3843
|
+
* 展开「插件」一级区块前还需要读取哪些分区的清单(惰性)。
|
|
3844
|
+
*
|
|
3845
|
+
* **插件清单自己没读到也要报**(否则一级区块展开后只有一句「先读取插件分区」却没有入口)。
|
|
3846
|
+
*/
|
|
3847
|
+
function pluginTreeUnreadSections(tree) {
|
|
3848
|
+
const out = tree.pluginsLoaded ? [] : ["plugins"];
|
|
3849
|
+
for (const entry of tree.entries) for (const s of pluginEntryUnreadSections(entry)) if (!out.includes(s)) out.push(s);
|
|
3850
|
+
for (const bucket of tree.buckets) if (!bucket.loaded && !out.includes(bucket.section)) out.push(bucket.section);
|
|
3851
|
+
return out;
|
|
3852
|
+
}
|
|
3853
|
+
/**
|
|
3854
|
+
* 待补勾的出队判定(纯函数,node 可测)。
|
|
3855
|
+
*
|
|
3856
|
+
* 背景:清单是**惰性**读取的 —— 用户勾「插件」一级区块或某个插件时,它名下可能还有区域没读到
|
|
3857
|
+
* (unread),那些单元此刻勾不上。若就此结束,用户会以为「全带上了」,实际包里少了数据目录/大文件。
|
|
3858
|
+
* 调用方在点击时先勾已知的、把没到齐的键入队;清单到货(nodes 变化)后再调本函数补齐。
|
|
3859
|
+
*
|
|
3860
|
+
* 判据 = 该节点名下**已无 unread 叶子**(`pluginEntryUnreadSections` / `pluginsLoaded`):
|
|
3861
|
+
* 到齐 → 出队并补齐;没到齐 → 留在队列里继续等(绝不猜成「已勾」)。
|
|
3862
|
+
*/
|
|
3863
|
+
function applyPluginPendingChecks(sel, nodes, tree, pending) {
|
|
3864
|
+
const remaining = [];
|
|
3865
|
+
let out = sel;
|
|
3866
|
+
for (const p of pending) {
|
|
3867
|
+
if (p.kind === "root") {
|
|
3868
|
+
if (!tree.pluginsLoaded || tree.entries.some((e) => pluginEntryUnreadSections(e).length > 0)) {
|
|
3869
|
+
remaining.push(p);
|
|
3870
|
+
continue;
|
|
3871
|
+
}
|
|
3872
|
+
out = togglePluginTree(out, nodes, tree, true);
|
|
3873
|
+
continue;
|
|
3874
|
+
}
|
|
3875
|
+
const entry = tree.entries.find((e) => e.name === p.key);
|
|
3876
|
+
if (entry === void 0) continue;
|
|
3877
|
+
if (pluginEntryUnreadSections(entry).length > 0) {
|
|
3878
|
+
remaining.push(p);
|
|
3879
|
+
continue;
|
|
3880
|
+
}
|
|
3881
|
+
out = togglePluginEntry(out, nodes, entry, true);
|
|
3882
|
+
}
|
|
3883
|
+
return {
|
|
3884
|
+
selection: out,
|
|
3885
|
+
remaining
|
|
3886
|
+
};
|
|
3887
|
+
}
|
|
3888
|
+
/** 勾上该插件前还需要读取哪些分区的清单(展开/点击时触发惰性读取)。 */
|
|
3889
|
+
function pluginEntryUnreadSections(entry) {
|
|
3890
|
+
const out = [];
|
|
3891
|
+
for (const leaf of entry.leaves) if (leaf.state === "unread" && !out.includes(leaf.section)) out.push(leaf.section);
|
|
3892
|
+
return out;
|
|
3893
|
+
}
|
|
3644
3894
|
//#endregion
|
|
3645
3895
|
//#region src/ui/session-format-disposition.ts
|
|
3646
3896
|
/**
|
|
@@ -14445,7 +14695,7 @@ function getState(open) {
|
|
|
14445
14695
|
__name(getState, "getState");
|
|
14446
14696
|
//#endregion
|
|
14447
14697
|
//#region \0config-manager-css:/home/runner/work/dsh-config-manager/dsh-config-manager/src/client/config-manager.module.css.js
|
|
14448
|
-
const css = "._367UGW_section{height:100%;min-height:0;font-family:var(--dsw-font-family);color:var(--dsw-alias-label-primary);flex-direction:column;font-size:12.5px;line-height:1.5;display:flex;position:relative;overflow:hidden}body{--cm-disk-card-h:420px;--cm-text-1:var(--dsw-alias-label-primary);--cm-text-2:var(--dsw-alias-label-secondary);--cm-text-3:var(--dsw-alias-label-tertiary);--cm-text-on-accent:var(--dsw-alias-label-primary-foreground);--cm-surface-1:var(--dsw-alias-bg-layer-1);--cm-surface-2:var(--dsw-alias-bg-layer-2);--cm-surface-hover:var(--dsw-alias-interactive-bg-hover);--cm-line-1:var(--dsw-alias-border-l1);--cm-line-2:var(--dsw-alias-border-l2);--cm-input-bg:var(--dsw-specific-input-major);--cm-chat-bubble:var(--dsw-specific-bubble,color-mix(in srgb, var(--cm-text-1) 12%, transparent));--cm-accent:var(--dsw-alias-state-business-primary);--cm-accent-fill:var(--dsw-alias-button-info-fill);--cm-accent-hover:var(--dsw-alias-button-info-hover);--cm-ok:var(--dsw-alias-state-success-primary);--cm-info:var(--dsw-alias-state-info-primary);--cm-warn:var(--dsw-alias-state-warn-primary);--cm-error:var(--dsw-alias-state-error-primary);--cm-fs-meta:11px;--cm-fs-table:12px;--cm-fs-base:12.5px;--cm-fs-title:13px;--cm-sp-1:2px;--cm-sp-2:4px;--cm-sp-3:6px;--cm-sp-4:8px;--cm-sp-5:10px;--cm-sp-6:12px;--cm-sp-7:14px;--cm-sp-8:16px;--cm-sp-9:24px;--cm-r-1:4px;--cm-r-2:6px;--cm-r-3:8px;--cm-r-pill:999px;--cm-h-sm:24px;--cm-h-md:28px;--cm-h-lg:32px;--cm-shadow-1:0 10px 26px color-mix(in srgb, var(--dsw-alias-bg-base) 45%, transparent);--cm-shadow-2:0 12px 32px color-mix(in srgb, var(--dsw-alias-bg-base) 40%, transparent);--cm-ring:0 0 0 2px color-mix(in srgb, var(--cm-accent) 18%, transparent);--cm-ring-strong:0 0 0 2px color-mix(in srgb, var(--cm-accent) 55%, transparent);--cm-z-raise:1;--cm-z-sticky:2;--cm-z-task:90;--cm-z-mask:100;--cm-z-modal:101;--cm-z-pop:110;--cm-z-toast:120;--cm-motion-fast:.12s;--cm-motion-base:.18s;--cm-motion-slow:.3s;--cm-motion-ease-out:cubic-bezier(.16, 1, .3, 1);--cm-motion-ease-in-out:cubic-bezier(.4, 0, .6, 1)}._367UGW_section :is(button,a,input,select,textarea,[role=tab]){transition-property:background-color,border-color,color;transition-duration:var(--cm-motion-fast);transition-timing-function:ease}._367UGW_section :is(button,a,input,select,textarea,[role=tab]):focus-visible{outline:2px solid var(--cm-accent);outline-offset:2px}._367UGW_mono{font-variant-numeric:tabular-nums;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}._367UGW_section svg{color:inherit;flex:none}._367UGW_shellNav{flex:none;align-items:center;gap:8px;padding:8px;display:flex}._367UGW_navStrip{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);border-radius:8px;flex:auto;align-items:center;gap:2px;min-width:0;padding:2px;display:flex;overflow:hidden}._367UGW_navTab,._367UGW_navMore{height:24px;font:inherit;color:var(--dsw-alias-label-secondary);cursor:pointer;white-space:nowrap;background:0 0;border:none;border-radius:6px;flex:none;align-items:center;gap:4px;padding:0 10px;font-size:12px;font-weight:500;display:inline-flex;position:relative}._367UGW_navTab:hover,._367UGW_navMore:hover{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-interactive-bg-hover)}._367UGW_navTab:focus-visible,._367UGW_navMore:focus-visible{outline:2px solid var(--cm-accent);outline-offset:1px;border-radius:6px}._367UGW_navTab[data-active],._367UGW_navMore[data-active]{background:color-mix(in srgb, var(--cm-accent) 16%, transparent);box-shadow:inset 0 0 0 1px color-mix(in srgb, var(--cm-accent) 45%, transparent);color:var(--dsw-alias-label-primary);font-weight:600}._367UGW_navDot{background:var(--cm-error);border-radius:50%;flex:none;width:6px;height:6px}._367UGW_navMoreRoot{flex:none}._367UGW_navMeasure{visibility:hidden;pointer-events:none;align-items:center;gap:2px;padding:2px;display:flex;position:absolute;top:0;left:-9999px}._367UGW_navActions{flex:none;align-items:center;gap:4px;margin-left:4px;display:flex}._367UGW_navActions ._367UGW_ghostButton[data-active]{border-color:color-mix(in srgb, var(--cm-accent) 55%, transparent);color:var(--cm-accent)}._367UGW_iconBtn{width:26px;height:26px;font:inherit;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-radius:6px;justify-content:center;align-self:center;align-items:center;padding:0;font-size:13px;line-height:1.25;display:inline-flex}._367UGW_iconBtn:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}._367UGW_iconBtn:focus-visible{outline:2px solid var(--cm-accent);outline-offset:1px}._367UGW_iconBtn:disabled{opacity:.45;cursor:default}._367UGW_iconBtn[data-size=sm]{border-radius:4px;width:18px;height:18px}._367UGW_iconBtn[data-active]{background:color-mix(in srgb, var(--cm-accent) 14%, transparent);color:var(--cm-accent)}._367UGW_iconBtn[data-danger]{color:var(--cm-error)}._367UGW_iconBtn[data-danger]:hover{background:color-mix(in srgb, var(--cm-error) 12%, transparent);border-color:var(--cm-error);color:var(--cm-error)}._367UGW_shellMain{overscroll-behavior:contain;flex-direction:column;flex:auto;min-height:0;display:flex;overflow-y:auto}._367UGW_pagePad{min-height:0;animation:_367UGW_pageEnter var(--cm-motion-base) var(--cm-motion-ease-out);flex-direction:column;flex:auto;padding:12px 16px 16px;display:flex}@keyframes _367UGW_pageEnter{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}._367UGW_snapshotList>*,._367UGW_dataTable tbody tr{animation:_367UGW_itemEnter var(--cm-motion-base) var(--cm-motion-ease-out) both}._367UGW_snapshotList>:nth-child(2),._367UGW_dataTable tbody tr:nth-child(2){animation-delay:24ms}._367UGW_snapshotList>:nth-child(3),._367UGW_dataTable tbody tr:nth-child(3){animation-delay:48ms}._367UGW_snapshotList>:nth-child(4),._367UGW_dataTable tbody tr:nth-child(4){animation-delay:72ms}._367UGW_snapshotList>:nth-child(n+5),._367UGW_dataTable tbody tr:nth-child(n+5){animation-delay:96ms}@keyframes _367UGW_itemEnter{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}._367UGW_viewEnter{animation:_367UGW_itemEnter var(--cm-motion-base) var(--cm-motion-ease-out);flex-direction:column;flex:auto;gap:10px;min-height:0;display:flex}._367UGW_collapse{visibility:hidden;transition:grid-template-rows var(--cm-motion-base) var(--cm-motion-ease-out), visibility 0s linear var(--cm-motion-base);grid-template-rows:0fr;display:grid}._367UGW_collapse[data-open]{visibility:visible;transition:grid-template-rows var(--cm-motion-base) var(--cm-motion-ease-out), visibility 0s;grid-template-rows:1fr}._367UGW_collapseInner{min-height:0;overflow:hidden}._367UGW_shellContent{flex-direction:column;flex:auto;min-height:0;display:flex;position:relative}._367UGW_taskPanel{z-index:var(--cm-z-task);background:var(--dsw-alias-bg-layer-1);min-height:0;animation:_367UGW_taskPanelIn var(--cm-motion-base) var(--cm-motion-ease-out);flex-direction:column;display:flex;position:absolute;inset:0}@keyframes _367UGW_taskPanelIn{0%{opacity:0;transform:translate(24px)}to{opacity:1;transform:translate(0)}}._367UGW_taskHead{border-bottom:1px solid var(--dsw-alias-border-l1);flex:none;align-items:center;gap:8px;height:44px;padding:0 12px;display:flex}._367UGW_taskTitle{color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;min-width:0;font-size:13px;font-weight:700;overflow:hidden}._367UGW_taskBody{overscroll-behavior:contain;flex:auto;min-height:0;padding:12px 16px 16px;overflow-y:auto}@media (prefers-reduced-motion:reduce){._367UGW_taskPanel{animation:none}}._367UGW_statusBar{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);height:28px;color:var(--dsw-alias-label-tertiary);white-space:nowrap;border-radius:8px;flex:none;align-items:center;gap:10px;margin:0 8px 8px;padding:0 10px;font-size:11px;display:flex;overflow:hidden}._367UGW_bannerSlot{padding:8px 12px 0}._367UGW_syncChannelBody{margin-top:10px}._367UGW_syncChannelBody ._367UGW_collapseInner{flex-direction:column;gap:10px;display:flex}._367UGW_statusTask{color:var(--dsw-alias-label-secondary);font-weight:600}._367UGW_statusProgress{background:color-mix(in srgb, var(--cm-accent) 20%, transparent);border-radius:999px;flex:none;width:60px;height:4px;display:inline-block;position:relative;overflow:hidden}._367UGW_statusProgress:after{content:\"\";background:var(--cm-accent);width:40%;animation:_367UGW_statusIndeterminate 1.2s var(--cm-motion-ease-in-out) infinite;border-radius:999px;position:absolute;inset:0 auto 0 0}@keyframes _367UGW_statusIndeterminate{0%{transform:translate(-100%)}to{transform:translate(250%)}}._367UGW_statusDot{background:var(--dsw-alias-label-tertiary);width:7px;height:7px;transition:background-color var(--cm-motion-fast) ease;border-radius:50%;flex:none;display:inline-block}._367UGW_statusDot[data-kind=ok]{background:var(--cm-ok)}._367UGW_statusDot[data-kind=info]{background:var(--cm-accent)}._367UGW_statusDot[data-kind=warn]{background:var(--cm-warn)}._367UGW_statusDot[data-kind=error]{background:var(--cm-error)}._367UGW_statusDot[data-pulse]{animation:1.2s ease-in-out infinite _367UGW_statusPulse}@keyframes _367UGW_statusPulse{0%,to{opacity:1}50%{opacity:.35}}._367UGW_statusText{text-overflow:ellipsis;min-width:0;overflow:hidden}._367UGW_statusSpacer{flex:auto}._367UGW_statusMeta{color:var(--dsw-alias-label-tertiary);flex:none}._367UGW_primaryButton,._367UGW_ghostButton,._367UGW_dangerButton{height:28px;font:inherit;white-space:nowrap;cursor:pointer;user-select:none;border:1px solid #0000;border-radius:6px;justify-content:center;align-items:center;gap:6px;padding:0 12px;font-size:12.5px;font-weight:600;line-height:1.25;display:inline-flex}._367UGW_primaryButton{background:var(--cm-accent-fill);color:var(--cm-text-on-accent)}._367UGW_primaryButton:hover:not(:disabled){background:var(--cm-accent-hover)}._367UGW_ghostButton{border-color:var(--dsw-alias-border-l2);color:var(--dsw-alias-label-primary);background:0 0}._367UGW_ghostButton:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}._367UGW_dangerButton{border-color:color-mix(in srgb, var(--cm-error) 45%, transparent);color:var(--cm-error);background:0 0}._367UGW_dangerButton:hover:not(:disabled){background:color-mix(in srgb, var(--cm-error) 12%, transparent);border-color:var(--cm-error)}._367UGW_primaryButton:focus-visible,._367UGW_ghostButton:focus-visible,._367UGW_dangerButton:focus-visible{outline:2px solid var(--cm-accent);outline-offset:1px}._367UGW_primaryButton:disabled,._367UGW_ghostButton:disabled,._367UGW_dangerButton:disabled{opacity:.45;cursor:default}._367UGW_primaryButton[data-size=sm],._367UGW_ghostButton[data-size=sm],._367UGW_dangerButton[data-size=sm]{border-radius:6px;height:24px;padding:0 8px;font-size:11px}._367UGW_input{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-specific-input-major);height:28px;font:inherit;color:var(--dsw-alias-label-primary);box-sizing:border-box;border-radius:6px;padding:0 8px;font-size:12.5px}._367UGW_field>._367UGW_input,._367UGW_field>._367UGW_selectRoot{width:100%;position:relative}._367UGW_input::placeholder{color:var(--dsw-alias-label-tertiary)}._367UGW_input:hover{border-color:color-mix(in srgb, var(--cm-accent) 40%, var(--dsw-alias-border-l2))}._367UGW_input:focus{border-color:var(--cm-accent);box-shadow:0 0 0 2px color-mix(in srgb, var(--cm-accent) 18%, transparent);outline:none}._367UGW_input:disabled{opacity:.5;cursor:default}._367UGW_input[type=password]{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12px}._367UGW_selectRoot{vertical-align:middle;min-width:0;max-width:100%;font-size:12.5px;display:inline-block;position:relative}._367UGW_selectTrigger{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-specific-input-major);width:100%;height:28px;font:inherit;color:var(--dsw-alias-label-primary);text-align:left;cursor:pointer;transition:border-color var(--cm-motion-fast) ease, box-shadow var(--cm-motion-fast) ease;border-radius:6px;align-items:center;gap:6px;padding:0 8px;font-size:12.5px;display:flex}._367UGW_selectTrigger:hover{border-color:color-mix(in srgb, var(--cm-accent) 40%, var(--dsw-alias-border-l2))}._367UGW_selectTrigger:focus-visible,._367UGW_selectRoot[data-open] ._367UGW_selectTrigger{border-color:var(--cm-accent);box-shadow:0 0 0 2px color-mix(in srgb, var(--cm-accent) 18%, transparent);outline:none}._367UGW_selectTrigger:disabled{opacity:.5;cursor:default}._367UGW_selectLabel{text-overflow:ellipsis;white-space:nowrap;flex:auto;min-width:0;overflow:hidden}._367UGW_selectChevron{color:var(--dsw-alias-label-secondary);transition:transform var(--cm-motion-fast) var(--cm-motion-ease-out);flex:none}._367UGW_selectRoot[data-open] ._367UGW_selectChevron{transform:rotate(180deg)}._367UGW_selectMenu{z-index:var(--cm-z-pop);box-sizing:border-box;overscroll-behavior:contain;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);max-width:260px;max-height:220px;box-shadow:0 10px 26px color-mix(in srgb, var(--dsw-alias-bg-base) 45%, transparent);transform-origin:top;animation:_367UGW_selectMenuIn var(--cm-motion-fast) var(--cm-motion-ease-out);border-radius:8px;padding:4px;position:absolute;overflow-y:auto}._367UGW_selectRoot[data-align=end] ._367UGW_selectMenu{left:auto;right:0}._367UGW_selectMenuPortal{pointer-events:auto;visibility:hidden}._367UGW_selectMenuPortal[data-ready]{visibility:visible}@keyframes _367UGW_selectMenuIn{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:none}}._367UGW_selectOption{color:var(--dsw-alias-label-primary);cursor:pointer;border-radius:6px;align-items:center;gap:8px;padding:6px 8px;font-size:12.5px;display:flex}._367UGW_selectOption[data-active]{background:var(--dsw-alias-interactive-bg-hover)}._367UGW_selectOption[aria-selected=true],._367UGW_selectOption[aria-checked=true]{color:var(--cm-accent);background:color-mix(in srgb, var(--cm-accent) 10%, transparent);box-shadow:inset 2px 0 0 var(--cm-accent);font-weight:600}._367UGW_selectOption[data-disabled]{opacity:.45;cursor:default}._367UGW_selectOptionLabel{text-overflow:ellipsis;white-space:nowrap;flex:auto;min-width:0;overflow:hidden}._367UGW_libraryFilters{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);border-radius:8px;flex:none;align-items:center;gap:2px;margin-top:8px;padding:2px;display:flex;overflow:hidden}._367UGW_libraryFilter{height:24px;font:inherit;color:var(--dsw-alias-label-secondary);cursor:pointer;white-space:nowrap;background:0 0;border:none;border-radius:6px;flex:none;align-items:center;gap:4px;padding:0 8px;font-size:12px;display:inline-flex}._367UGW_libraryFilter:hover{background:var(--dsw-alias-interactive-bg-hover)}._367UGW_libraryFilter[data-active]{color:var(--cm-accent);background:color-mix(in srgb, var(--cm-accent) 16%, transparent);box-shadow:inset 0 0 0 1px color-mix(in srgb, var(--cm-accent) 45%, transparent);font-weight:600}._367UGW_libraryFilterCount{color:var(--dsw-alias-label-tertiary);font-size:11px}._367UGW_libraryFilter[data-active] ._367UGW_libraryFilterCount{color:inherit}._367UGW_librarySearch{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-specific-input-major);width:100%;height:28px;font:inherit;color:var(--dsw-alias-label-primary);border-radius:6px;flex:none;margin-top:8px;padding:0 8px;font-size:12.5px}._367UGW_librarySearch:focus-visible{border-color:var(--cm-accent);box-shadow:0 0 0 2px color-mix(in srgb, var(--cm-accent) 18%, transparent);outline:none}._367UGW_libraryFooter{border-top:1px solid var(--dsw-alias-border-l1);flex:none;align-items:center;gap:8px;margin-top:8px;padding-top:8px;display:flex}._367UGW_libraryCount{color:var(--dsw-alias-label-secondary);font-size:12px}._367UGW_artifactList{overscroll-behavior:contain;flex:auto;min-height:0;margin:0;padding:0;list-style:none;overflow-y:auto}._367UGW_libraryListState{flex-direction:column;flex:auto;justify-content:center;min-height:0;display:flex}._367UGW_artifactRow{border-bottom:1px solid color-mix(in srgb, var(--dsw-alias-border-l1) 60%, transparent)}._367UGW_artifactRow:last-child{border-bottom:none}._367UGW_artifactRow[data-expanded]{background:color-mix(in srgb, var(--cm-accent) 5%, transparent)}._367UGW_artifactRowHead{box-sizing:border-box;cursor:pointer;align-items:center;gap:8px;min-height:52px;padding:8px 10px;display:flex}._367UGW_artifactRowHead:hover{background:var(--dsw-alias-interactive-bg-hover)}._367UGW_artifactExpand{width:20px;height:20px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-radius:4px;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}._367UGW_artifactExpand:focus-visible{outline:2px solid var(--cm-accent);outline-offset:1px}._367UGW_artifactMain{flex:auto;min-width:0}._367UGW_artifactTitle{align-items:center;gap:6px;min-width:0;display:flex}._367UGW_artifactName{color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;font-size:12.5px;font-weight:600;overflow:hidden}._367UGW_artifactMeta{color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;margin-top:2px;font-size:11px;overflow:hidden}._367UGW_artifactBadges,._367UGW_artifactActions{flex:none;align-items:center;gap:4px;display:flex}._367UGW_artifactDetailWrap{transition:grid-template-rows var(--cm-motion-base) var(--cm-motion-ease-out);grid-template-rows:0fr;display:grid}._367UGW_artifactRow[data-expanded] ._367UGW_artifactDetailWrap{grid-template-rows:1fr}._367UGW_artifactDetailInner{min-height:0;transition:padding var(--cm-motion-base) var(--cm-motion-ease-out);padding:0 10px 0 38px;overflow:hidden}._367UGW_artifactRow[data-expanded] ._367UGW_artifactDetailInner{padding:2px 10px 10px 38px}._367UGW_artifactDetailInner>*{opacity:0;transition:opacity var(--cm-motion-fast) var(--cm-motion-ease-out)}._367UGW_artifactRow[data-expanded] ._367UGW_artifactDetailInner>*{opacity:1;transition-delay:60ms}._367UGW_artifactRow:not([data-expanded]) ._367UGW_artifactDetailInner>*{transition-delay:0s}._367UGW_paletteInput{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-specific-input-major);width:100%;height:32px;font:inherit;color:var(--dsw-alias-label-primary);border-radius:6px;padding:0 10px;font-size:13px}._367UGW_paletteInput:focus-visible{border-color:var(--cm-accent);box-shadow:0 0 0 2px color-mix(in srgb, var(--cm-accent) 18%, transparent);outline:none}._367UGW_paletteList{overscroll-behavior:contain;max-height:280px;margin-top:8px;overflow-y:auto}._367UGW_paletteGroup{letter-spacing:.02em;color:var(--dsw-alias-label-tertiary);user-select:none;padding:8px 8px 4px;font-size:11px;font-weight:500}._367UGW_paletteGroup:not([data-first]){border-top:1px solid var(--dsw-alias-border-l1);margin-top:4px}._367UGW_paletteItem{color:var(--dsw-alias-label-primary);cursor:pointer;border-radius:6px;align-items:center;gap:8px;padding:6px 8px;font-size:12.5px;display:flex}._367UGW_paletteItem[data-active]{background:var(--dsw-alias-interactive-bg-hover)}._367UGW_paletteItem[data-disabled]{opacity:.45;cursor:default}._367UGW_paletteItemLabel{text-overflow:ellipsis;white-space:nowrap;flex:auto;min-width:0;overflow:hidden}._367UGW_paletteItemGroup{color:var(--dsw-alias-label-tertiary);flex:none;font-size:11px}._367UGW_paletteEmpty{color:var(--dsw-alias-label-tertiary);padding:10px 8px;font-size:12.5px}._367UGW_paletteHint{border-top:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-tertiary);margin-top:8px;padding-top:6px;font-size:11px}._367UGW_checkboxRow,._367UGW_radioLabel{cursor:pointer;color:var(--dsw-alias-label-primary);align-items:flex-start;gap:6px;font-size:12.5px;display:flex}._367UGW_checkboxRow input,._367UGW_radioLabel input{width:14px;height:14px;accent-color:var(--cm-accent);cursor:pointer;flex:none;margin:2px 0 0}._367UGW_checkboxRow input:focus-visible,._367UGW_radioLabel input:focus-visible{outline:2px solid var(--cm-accent);outline-offset:2px}._367UGW_badge{white-space:nowrap;border:1px solid var(--dsw-alias-border-l2);height:18px;color:var(--dsw-alias-label-secondary);border-radius:8px;align-items:center;gap:4px;padding:0 6px;font-size:11px;font-weight:600;line-height:1.25;display:inline-flex}._367UGW_banner{animation:_367UGW_itemEnter var(--cm-motion-base) var(--cm-motion-ease-out);border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);box-sizing:border-box;border-radius:8px;flex-wrap:wrap;align-items:center;gap:6px 10px;width:100%;margin:0 0 10px;padding:8px 12px;font-size:12.5px;display:flex}._367UGW_banner[data-kind=ok]{border-color:color-mix(in srgb, var(--cm-ok) 35%, transparent);background:color-mix(in srgb, var(--cm-ok) 9%, transparent)}._367UGW_banner[data-kind=info]{border-color:color-mix(in srgb, var(--cm-accent) 30%, transparent);background:color-mix(in srgb, var(--cm-accent) 8%, transparent)}._367UGW_banner[data-kind=warn]{border-color:color-mix(in srgb, var(--cm-warn) 40%, transparent);background:color-mix(in srgb, var(--cm-warn) 9%, transparent)}._367UGW_banner[data-kind=error]{border-color:color-mix(in srgb, var(--cm-error) 45%, transparent);background:color-mix(in srgb, var(--cm-error) 9%, transparent)}._367UGW_spinnerWrap{vertical-align:middle;align-items:center;gap:6px;display:inline-flex}._367UGW_spinner{vertical-align:middle;transform-origin:50%;flex:none;width:13px;height:13px;animation:.7s linear infinite _367UGW_spin;display:inline-block}._367UGW_spinnerTrack{fill:none;stroke:color-mix(in srgb, currentColor 30%, transparent);stroke-width:3px}._367UGW_spinnerArc{fill:none;stroke:currentColor;stroke-width:3px;stroke-linecap:round}@keyframes _367UGW_spin{to{transform:rotate(360deg)}}._367UGW_spinnerLabel{color:inherit;opacity:.85;font-size:12px}._367UGW_skeletonRoot{flex-direction:column;gap:8px;width:100%;margin-top:8px;display:flex}._367UGW_skeletonBars,._367UGW_skeletonCards{flex-direction:column;gap:8px;display:flex}._367UGW_skeletonBar{background-color:color-mix(in srgb, var(--dsw-alias-label-tertiary) 14%, transparent);background-image:linear-gradient(90deg, transparent, color-mix(in srgb, var(--dsw-alias-label-tertiary) 26%, transparent), transparent);animation:_367UGW_skeletonShimmer 1.3s var(--cm-motion-ease-in-out) infinite;background-position:-160px 0;background-repeat:no-repeat;background-size:160px 100%;border-radius:4px;display:block}@keyframes _367UGW_skeletonShimmer{to{background-position:calc(100% + 160px) 0}}._367UGW_skeletonTitle{border-radius:6px;width:42%;height:13px}._367UGW_skeletonLine{height:11px}._367UGW_skeletonBlock{border-radius:8px;height:46px}._367UGW_skeletonRow{border-radius:6px;height:30px}._367UGW_skeletonBars>._367UGW_skeletonBar:nth-child(4n+2){width:92%}._367UGW_skeletonBars>._367UGW_skeletonBar:nth-child(4n+3){width:78%}._367UGW_skeletonBars>._367UGW_skeletonBar:nth-child(4n){width:64%}._367UGW_skeletonBars>._367UGW_skeletonBar:nth-child(2){animation-delay:60ms}._367UGW_skeletonBars>._367UGW_skeletonBar:nth-child(3){animation-delay:.12s}._367UGW_skeletonBars>._367UGW_skeletonBar:nth-child(4){animation-delay:.18s}._367UGW_skeletonBars>._367UGW_skeletonBar:nth-child(n+5){animation-delay:.24s}._367UGW_skeletonCard{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);border-radius:8px;flex-direction:column;gap:8px;padding:12px;display:flex}._367UGW_skeletonCard>._367UGW_skeletonBar:nth-child(2){width:84%}._367UGW_skeletonCard>._367UGW_skeletonBar:nth-child(3){width:56%}._367UGW_skeletonTable{border:1px solid var(--dsw-alias-border-l1);border-radius:8px;overflow:hidden}._367UGW_skeletonTableRow{border-bottom:1px solid var(--dsw-alias-border-l1);align-items:center;gap:10px;padding:8px 10px;display:flex}._367UGW_skeletonTableRow:last-child{border-bottom:none}._367UGW_skeletonTableCell{flex:1 1 0;height:11px}._367UGW_skeletonTableCell:first-child{flex:0 0 40%}._367UGW_skeletonTableCell:last-child{flex:0 0 20%}._367UGW_skeletonCaption{color:var(--dsw-alias-label-tertiary);font-size:11px}._367UGW_card{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);border-radius:8px;margin:0 0 10px;padding:12px}._367UGW_groupLabel{letter-spacing:.02em;color:var(--dsw-alias-label-tertiary);margin-bottom:8px;font-size:11px;font-weight:700;display:block}._367UGW_groupHeader{align-items:baseline;gap:8px;margin-bottom:10px;display:flex}._367UGW_groupHeader ._367UGW_groupLabel{white-space:nowrap;flex:none;margin-bottom:0}._367UGW_groupNote{color:var(--dsw-alias-label-tertiary);font-size:11px}._367UGW_groupItems{flex-direction:column;gap:6px;display:flex}._367UGW_sectionOptionRow{flex-direction:column;gap:4px;display:flex}._367UGW_field{flex-direction:column;gap:4px;margin:0 0 10px;display:flex}._367UGW_fieldLabel{color:var(--dsw-alias-label-secondary);font-size:11px;font-weight:600}._367UGW_hint{color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:1.5}._367UGW_formError{color:var(--cm-error);font-size:11px}._367UGW_infoHint{vertical-align:middle;align-items:center;display:inline-flex}._367UGW_infoHintBtn{width:18px;height:18px;font:inherit;color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:none;border-radius:4px;flex:none;justify-content:center;align-items:center;padding:0;line-height:1.25;display:inline-flex}._367UGW_infoHintBtn:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}._367UGW_infoHintBtn[data-open]:focus-visible{outline:2px solid var(--cm-accent);outline-offset:1px}._367UGW_infoHintBtn[data-open]{color:var(--dsw-alias-label-primary)}._367UGW_infoHintBtn[data-pinned]{background:color-mix(in srgb, var(--cm-accent) 14%, transparent);color:var(--cm-accent)}._367UGW_infoHintBubble{z-index:var(--cm-z-pop);box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);max-width:min(260px,100vw - 24px);max-height:min(480px,100vh - 16px);box-shadow:0 10px 26px color-mix(in srgb, var(--dsw-alias-bg-base) 45%, transparent);color:var(--dsw-alias-label-secondary);white-space:pre-wrap;overflow-wrap:anywhere;pointer-events:none;visibility:hidden;border-radius:8px;padding:8px 10px;font-size:11px;line-height:1.5;position:fixed;overflow-y:auto}._367UGW_infoHintBubble[data-ready]{visibility:visible;animation:_367UGW_infoHintIn var(--cm-motion-fast) var(--cm-motion-ease-out);transform-origin:top}._367UGW_infoHintBubble[data-ready][data-side=top]{transform-origin:bottom}@keyframes _367UGW_infoHintIn{0%{opacity:0}to{opacity:1}}._367UGW_controlRow{align-items:center;gap:8px;margin:0 0 10px;display:flex}._367UGW_sectionTitleBlock{min-width:0;margin:0 0 10px}._367UGW_sectionTitleRow{align-items:center;gap:8px;min-width:0;display:flex}._367UGW_sectionTitle{color:var(--dsw-alias-label-primary);margin:0;font-size:13px;font-weight:700;line-height:1.5}._367UGW_sectionSubtitle{color:var(--dsw-alias-label-tertiary);margin:1px 0 0;font-size:11px}._367UGW_empty{animation:_367UGW_itemEnter var(--cm-motion-base) var(--cm-motion-ease-out);border:1px dashed var(--dsw-alias-border-l2);text-align:center;color:var(--dsw-alias-label-tertiary);box-sizing:border-box;border-radius:8px;flex-direction:column;justify-content:center;align-items:center;gap:4px;width:100%;padding:24px 16px;font-size:12px;display:flex}._367UGW_emptySteps{margin:2px 0 10px}._367UGW_tableWrap{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);border-radius:8px;margin-bottom:10px;overflow:hidden}._367UGW_tableFixed th,._367UGW_tableFixed td{padding-left:12px;padding-right:12px}._367UGW_tableScroll{max-height:420px;overflow:auto}._367UGW_dataTable{border-collapse:collapse;width:100%;font-size:12px}._367UGW_dataTable th,._367UGW_dataTable td{box-sizing:border-box}._367UGW_tableFixed{table-layout:fixed}._367UGW_tableFixed td,._367UGW_tableFixed th{text-overflow:ellipsis;overflow:hidden}._367UGW_tableCompact th,._367UGW_tableCompact td{padding-left:8px;padding-right:8px}._367UGW_dataTable td._367UGW_dim{white-space:nowrap}._367UGW_dataTable th{z-index:var(--cm-z-raise);text-align:left;color:var(--dsw-alias-label-tertiary);background:var(--dsw-alias-bg-layer-2);border-bottom:1px solid var(--dsw-alias-border-l1);white-space:nowrap;padding:6px 10px;font-size:11px;font-weight:600;position:sticky;top:0}._367UGW_dataTable td{border-bottom:1px solid color-mix(in srgb, var(--dsw-alias-border-l1) 55%, transparent);vertical-align:middle;color:var(--dsw-alias-label-primary);padding:6px 10px}._367UGW_dataTable tbody tr:last-child td{border-bottom:none}._367UGW_dataTable tbody tr{transition:background-color .1s ease-out}._367UGW_dataTable tbody tr:hover{background:var(--dsw-alias-interactive-bg-hover)}._367UGW_dataTable tbody tr[data-selected]{background:color-mix(in srgb, var(--cm-accent) 9%, transparent)}._367UGW_dataTable ._367UGW_num{text-align:right;white-space:nowrap;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12px}._367UGW_dataTable ._367UGW_dim{color:var(--dsw-alias-label-secondary)}._367UGW_dataTable ._367UGW_cellActions{text-align:right;white-space:nowrap}._367UGW_dataTable td._367UGW_cellActions{text-overflow:clip;overflow:visible}._367UGW_rowActions{align-items:center;gap:2px;display:inline-flex}._367UGW_cellMain{flex-direction:column;justify-content:center;gap:1px;min-width:0;min-height:30px;display:flex}._367UGW_cellTitle{text-overflow:ellipsis;white-space:nowrap;font-weight:500;overflow:hidden}._367UGW_cellMeta{color:var(--dsw-alias-label-tertiary);align-items:center;gap:6px;min-width:0;font-size:11px;display:inline-flex;overflow:hidden}._367UGW_cellMetaNoteText{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}._367UGW_actionRow ._367UGW_banner{flex:auto;min-width:0;margin:0}._367UGW_warnText{color:var(--cm-warn)}._367UGW_kvRow{border-bottom:1px solid color-mix(in srgb, var(--dsw-alias-border-l1) 55%, transparent);align-items:baseline;gap:10px;min-width:0;padding:4px 0;font-size:12px;display:flex}._367UGW_kvRow:last-child{border-bottom:none}._367UGW_kvRow+._367UGW_actionRow{margin-top:8px}._367UGW_kvKey{width:88px;color:var(--dsw-alias-label-tertiary);flex:none;font-size:11px}._367UGW_kvValue{overflow-wrap:anywhere;flex:auto;min-width:0}._367UGW_kvValue._367UGW_mono{color:var(--dsw-alias-label-secondary);font-size:12px}._367UGW_segGroup,._367UGW_modeTabs{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-base);border-radius:8px;align-items:center;gap:2px;margin:0 0 10px;padding:2px;display:inline-flex}._367UGW_segItem,._367UGW_modeTab{height:22px;font:inherit;color:var(--dsw-alias-label-secondary);cursor:pointer;white-space:nowrap;background:0 0;border:none;border-radius:6px;align-items:center;gap:4px;padding:0 8px;font-size:11px;font-weight:500;display:inline-flex}._367UGW_segItem:hover,._367UGW_modeTab:hover{color:var(--dsw-alias-label-primary)}._367UGW_segItem:focus-visible,._367UGW_modeTab:focus-visible{outline:2px solid var(--cm-accent);outline-offset:1px}._367UGW_segItem[data-active],._367UGW_modeTab[data-active]{background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-primary);box-shadow:0 0 0 1px var(--dsw-alias-border-l1);font-weight:600}._367UGW_modeHint{color:var(--dsw-alias-label-tertiary);margin:-4px 0 10px;font-size:11px}._367UGW_stepperDot,._367UGW_stepperLabel{transition:background-color var(--cm-motion-fast) ease, border-color var(--cm-motion-fast) ease, color var(--cm-motion-fast) ease}._367UGW_stepper{scrollbar-width:none;align-items:center;padding:2px 0;display:flex;overflow-x:auto}._367UGW_stepper::-webkit-scrollbar{display:none}._367UGW_stepperStep{flex:none;align-items:center;gap:4px;display:inline-flex}._367UGW_stepperDot{border:1.5px solid var(--dsw-alias-border-l2);width:17px;height:17px;color:var(--dsw-alias-label-tertiary);background:var(--dsw-alias-bg-layer-2);border-radius:50%;flex:none;justify-content:center;align-items:center;font-size:11px;font-weight:700;display:inline-flex}._367UGW_stepperDot[data-state=current]{border-color:var(--cm-accent);background:var(--cm-accent);color:var(--dsw-alias-label-primary-foreground)}._367UGW_stepperDot[data-state=done]{background:color-mix(in srgb, var(--cm-ok) 16%, transparent);color:var(--cm-ok);border-color:#0000}._367UGW_stepperLabel{color:var(--dsw-alias-label-tertiary);white-space:nowrap;font-size:11px}._367UGW_stepperStep[data-state=current] ._367UGW_stepperLabel{color:var(--dsw-alias-label-primary);font-weight:600}._367UGW_stepperStep[data-state=done] ._367UGW_stepperLabel{color:var(--dsw-alias-label-secondary)}._367UGW_stepperConnector{background:var(--dsw-alias-border-l2);flex:none;width:14px;height:1.5px;margin:0 4px}._367UGW_stepperStep[data-state=done] ._367UGW_stepperConnector{background:color-mix(in srgb, var(--cm-ok) 45%, transparent)}._367UGW_progressBlock{margin:0 0 10px}._367UGW_progressTrack{background:color-mix(in srgb, var(--dsw-alias-border-l1) 80%, transparent);border-radius:4px;height:5px;position:relative;overflow:hidden}._367UGW_progressBar{background:var(--cm-accent);transition:width var(--cm-motion-slow) var(--cm-motion-ease-out);border-radius:4px;position:absolute;inset:0 auto 0 0}._367UGW_progressBarDone{background:var(--cm-ok)}._367UGW_progressBarFailed{background:var(--cm-error)}._367UGW_progressIndeterminate{background:var(--cm-accent);width:34%;animation:_367UGW_indet 1.15s var(--cm-motion-ease-in-out) infinite;border-radius:4px;position:absolute;top:0;bottom:0}@keyframes _367UGW_indet{0%{left:-34%}to{left:100%}}._367UGW_progressMeta{color:var(--dsw-alias-label-secondary);align-items:center;gap:8px;margin-top:4px;font-size:11px;display:flex}._367UGW_progressLabel{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}._367UGW_progressPercent{color:var(--dsw-alias-label-tertiary);flex:none;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}._367UGW_progressBadge{color:var(--dsw-alias-label-tertiary);flex:none;align-items:center;gap:4px;font-size:11px;display:inline-flex}._367UGW_progressBadgeCount{background:color-mix(in srgb, var(--cm-info) 14%, transparent);color:var(--dsw-alias-label-secondary);border-radius:8px;padding:0 4px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}._367UGW_progressBadgeSection{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}._367UGW_progressDetail{color:var(--dsw-alias-label-tertiary);margin-top:2px;font-size:11px}._367UGW_planScroll,._367UGW_reportScroll,._367UGW_confirmScroll,._367UGW_pullScroll,._367UGW_diffScroll,._367UGW_historyScroll,._367UGW_consultScroll{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-base);border-radius:8px;max-height:380px;overflow:auto}._367UGW_consultScroll{padding:0 6px}._367UGW_logScroll{background:var(--dsw-alias-bg-base);max-height:220px;overflow:auto}._367UGW_dialogMask{z-index:var(--cm-z-mask);background:color-mix(in srgb, var(--dsw-alias-bg-base) 55%, transparent);animation:_367UGW_maskIn var(--cm-motion-fast) var(--cm-motion-ease-out);justify-content:center;align-items:center;display:flex;position:fixed;inset:0}@keyframes _367UGW_maskIn{0%{opacity:0}to{opacity:1}}._367UGW_dialogContentCenter{z-index:var(--cm-z-modal);animation:_367UGW_dialogIn var(--cm-motion-base) var(--cm-motion-ease-out);position:fixed;top:50%;left:50%;transform:translate(-50%,-50%)}@keyframes _367UGW_dialogIn{0%{opacity:0;transform:translate(-50%,-50%)translateY(4px)}to{opacity:1;transform:translate(-50%,-50%)translateY(0)}}._367UGW_dialogMask[data-state=closed]{animation:_367UGW_maskOut var(--cm-motion-fast) var(--cm-motion-ease-out)}._367UGW_dialogContentCenter[data-state=closed]{animation:_367UGW_dialogOut var(--cm-motion-fast) var(--cm-motion-ease-out)}@keyframes _367UGW_maskOut{to{opacity:0}}@keyframes _367UGW_dialogOut{to{opacity:0;transform:translate(-50%,-50%)scale(.98)}}._367UGW_dialogCard{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);width:min(640px,100vw - 48px,95%);max-width:calc(100vw - 48px);max-height:min(600px,100vh - 64px,92%);box-shadow:0 12px 32px color-mix(in srgb, var(--dsw-alias-bg-base) 40%, transparent);border-radius:8px;flex-direction:column;display:flex}._367UGW_dialogHeader{color:var(--dsw-alias-label-primary);padding:12px 16px 0;font-size:13px;font-weight:700}._367UGW_dialogHeaderRow{align-items:center;gap:8px;padding:12px 14px 0;display:flex}._367UGW_dialogHeaderRow ._367UGW_dialogHeader{padding:0}._367UGW_dialogClose{margin-left:auto}._367UGW_dialogBody{min-height:0;color:var(--dsw-alias-label-secondary);flex:auto;padding:8px 16px 12px;font-size:12.5px;overflow-y:auto}._367UGW_dialogBodyScroll{max-height:460px;overflow-y:auto}._367UGW_dialogWide{width:min(720px,100vw - 48px,96%);max-height:min(620px,100vh - 64px,92%)}._367UGW_dialogFooter{border-top:1px solid var(--dsw-alias-border-l1);justify-content:flex-end;gap:8px;margin:0;padding:10px 16px 14px}._367UGW_updateVersionRow{flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:10px;display:flex}._367UGW_updateVersionArrow{color:var(--dsw-alias-label-tertiary)}._367UGW_updateVersionTarget{color:var(--dsw-alias-label-primary);font-size:13px;font-weight:600}._367UGW_updateNotesLoading{justify-content:center;padding:24px 0;display:flex}._367UGW_toastViewport{z-index:var(--cm-z-toast);pointer-events:none;flex-direction:column;align-items:flex-end;gap:8px;max-width:calc(100% - 20px);display:flex;position:absolute;bottom:42px;right:10px}._367UGW_toast{pointer-events:auto;border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);width:fit-content;max-width:340px;box-shadow:0 8px 24px color-mix(in srgb, var(--dsw-alias-bg-base) 45%, transparent);color:var(--dsw-alias-label-primary);animation:_367UGW_toastIn var(--cm-motion-base) var(--cm-motion-ease-out);border-radius:8px;align-items:flex-start;gap:8px;padding:8px 10px;font-size:12px;line-height:1.5;display:flex}@keyframes _367UGW_toastIn{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}._367UGW_toast[data-kind=ok]{border-color:color-mix(in srgb, var(--cm-ok) 40%, transparent)}._367UGW_toast[data-kind=ok] ._367UGW_toastGlyph{color:var(--cm-ok)}._367UGW_toast[data-kind=info] ._367UGW_toastGlyph{color:var(--cm-accent)}._367UGW_toast[data-kind=warn]{border-color:color-mix(in srgb, var(--cm-warn) 40%, transparent)}._367UGW_toast[data-kind=warn] ._367UGW_toastGlyph{color:var(--cm-warn)}._367UGW_toast[data-kind=error]{border-color:color-mix(in srgb, var(--cm-error) 45%, transparent)}._367UGW_toast[data-kind=error] ._367UGW_toastGlyph{color:var(--cm-error)}._367UGW_toastGlyph{flex:none;margin-top:1px;display:inline-flex}._367UGW_toastText{word-break:break-word;min-width:0}._367UGW_toast>button{flex:none;width:18px;height:18px;margin-left:2px}._367UGW_statusAction{font:inherit;color:inherit;text-align:left;cursor:pointer;background:0 0;border:none;align-items:center;gap:8px;min-width:0;padding:0;display:inline-flex}._367UGW_statusAction:hover{color:var(--dsw-alias-label-primary);text-decoration:underline}._367UGW_statusAction:focus-visible{outline:2px solid var(--cm-accent);outline-offset:1px;border-radius:4px}._367UGW_runsCenter{flex-direction:column;gap:10px;display:flex}._367UGW_runsSummary{flex-wrap:wrap;align-items:center;gap:8px;display:flex}._367UGW_runsSummaryTitle{color:var(--dsw-alias-label-primary);font-size:12px;font-weight:700}._367UGW_runsCardHead{flex-wrap:wrap;align-items:center;gap:6px;margin:0 0 8px;display:flex}._367UGW_runsCardTitle{color:var(--dsw-alias-label-primary);font-size:12.5px;font-weight:600}._367UGW_runsWarnNote{border:1px solid color-mix(in srgb, var(--cm-warn) 45%, transparent);background:color-mix(in srgb, var(--cm-warn) 10%, transparent);color:var(--dsw-alias-label-secondary);border-radius:6px;margin:8px 0 0;padding:6px 8px;font-size:11px}._367UGW_runsWarnNoteDetail{color:var(--dsw-alias-label-tertiary);margin:4px 0 0}._367UGW_runsCardTime{color:var(--dsw-alias-label-tertiary);white-space:nowrap;margin-left:auto;font-size:11px}._367UGW_runsCounts{color:var(--dsw-alias-label-tertiary);margin:8px 0 0;font-size:11px}._367UGW_runsLogTail{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-base);max-height:108px;color:var(--dsw-alias-label-secondary);border-radius:6px;margin:8px 0 0;padding:6px 8px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px;line-height:1.5;overflow-y:auto}._367UGW_runsLogLine{white-space:pre-wrap;word-break:break-all}._367UGW_runsCardActions{flex-wrap:wrap;align-items:center;gap:8px;margin:10px 0 0;display:flex}._367UGW_runsOption{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);width:100%;font:inherit;color:var(--dsw-alias-label-primary);text-align:left;cursor:pointer;border-radius:8px;flex-direction:column;gap:2px;margin:0 0 8px;padding:8px 10px;display:flex}._367UGW_runsOption:hover{border-color:var(--cm-accent)}._367UGW_runsOption:focus-visible{outline:2px solid var(--cm-accent);outline-offset:1px}._367UGW_runsOption[data-active]{border-color:var(--cm-accent);background:color-mix(in srgb, var(--cm-accent) 8%, transparent)}._367UGW_runsOptionTitle{align-items:center;gap:6px;font-size:12.5px;font-weight:600;display:flex}._367UGW_runsOptionDesc{color:var(--dsw-alias-label-tertiary);font-size:11px}._367UGW_runsOptionTag{background:color-mix(in srgb, var(--cm-accent) 14%, transparent);color:var(--cm-accent);border-radius:999px;padding:0 4px;font-size:11px;font-weight:600}._367UGW_actionRow{flex-wrap:wrap;align-items:center;gap:8px;margin:0 0 10px;display:flex}._367UGW_actionRowTop{flex-wrap:wrap;align-items:center;gap:8px;margin:10px 0;display:flex}._367UGW_snapshotPickerHint{margin-top:4px;margin-bottom:10px}._367UGW_headRow{flex-wrap:wrap;align-items:center;gap:8px;margin:0 0 10px;display:flex}._367UGW_headRow ._367UGW_groupLabel{margin-bottom:0}._367UGW_authorRow{flex-wrap:wrap;align-items:center;gap:8px;margin-top:8px;display:flex}._367UGW_authorRow ._367UGW_groupLabel{margin-bottom:0}._367UGW_marketFilterGrid{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin-bottom:8px;display:grid}._367UGW_marketFilterSearch{grid-column:1/-1}._367UGW_marketFilterMeta{flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:8px;display:flex}._367UGW_statStrip{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);border-radius:8px;flex-wrap:wrap;flex:none;align-items:stretch;gap:6px 0;min-height:32px;margin-bottom:10px;display:flex}._367UGW_statStrip>:last-child{padding-right:8px}._367UGW_statStrip[data-tone=error]{border-color:color-mix(in srgb, var(--cm-error) 45%, transparent);background:color-mix(in srgb, var(--cm-error) 7%, transparent)}._367UGW_statStrip[data-tone=warn]{border-color:color-mix(in srgb, var(--cm-warn) 40%, transparent);background:color-mix(in srgb, var(--cm-warn) 6%, transparent)}._367UGW_statHealth{color:var(--dsw-alias-label-primary);white-space:nowrap;flex:none;align-items:center;gap:6px;padding:4px 8px;font-size:12px;font-weight:600;display:flex}._367UGW_statHealthAction{font:inherit;cursor:pointer;text-align:left;background:0 0;border:none;font-size:12px;font-weight:600}._367UGW_statHealthAction:hover{background:var(--dsw-alias-interactive-bg-hover)}._367UGW_statHealthAction:focus-visible{outline:2px solid var(--cm-accent);outline-offset:-2px;border-radius:6px}._367UGW_statSeg{border:none;border-left:1px solid var(--dsw-alias-border-l1);font:inherit;color:var(--dsw-alias-label-secondary);white-space:nowrap;cursor:pointer;background:0 0;flex:none;align-items:center;gap:6px;padding:4px 8px;font-size:11px;display:flex}._367UGW_statSeg>span:first-child{color:var(--dsw-alias-label-tertiary)}._367UGW_statSeg:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}._367UGW_statSeg:hover>span:first-child{color:var(--dsw-alias-label-secondary)}._367UGW_statSeg:focus-visible{outline:2px solid var(--cm-accent);outline-offset:-2px}._367UGW_statSeg b{color:var(--dsw-alias-label-primary);font-variant-numeric:tabular-nums;font-weight:700}._367UGW_statSegDim{color:var(--dsw-alias-label-tertiary)}._367UGW_toolRow{flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:10px;display:flex}._367UGW_infoValue{flex:auto;align-items:center;gap:8px;min-width:0;display:inline-flex}._367UGW_infoValue ._367UGW_mono{color:var(--dsw-alias-label-secondary);text-overflow:ellipsis;white-space:nowrap;font-size:11px;overflow:hidden}._367UGW_copyBtn{width:20px;height:20px;font:inherit;color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:none;border-radius:4px;flex:none;justify-content:center;align-items:center;padding:0;font-size:11px;line-height:1.25;display:inline-flex}._367UGW_copyBtn:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}._367UGW_copyBtn:focus-visible{outline:2px solid var(--cm-accent);outline-offset:1px}._367UGW_activityRow ._367UGW_copyBtn{opacity:0}._367UGW_activityRow:hover ._367UGW_copyBtn,._367UGW_activityRow ._367UGW_copyBtn:focus-visible{opacity:1}._367UGW_activityCard{flex-direction:column;min-height:0;margin-bottom:0;display:flex}._367UGW_diskUsageCard{height:var(--cm-disk-card-h);min-height:var(--cm-disk-card-h);max-height:var(--cm-disk-card-h)}._367UGW_diskUsageScroll{flex:auto;min-height:0;max-height:none}._367UGW_activityHeader{align-items:center;gap:8px;margin-bottom:8px;display:flex}._367UGW_activityTitle{letter-spacing:.02em;color:var(--dsw-alias-label-tertiary);flex:auto;font-size:11px;font-weight:700}._367UGW_activityRows{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-base);border-radius:8px;flex:auto;min-height:0;overflow-y:auto}._367UGW_activityRow{border-bottom:1px solid color-mix(in srgb, var(--dsw-alias-border-l1) 55%, transparent);grid-template-columns:72px minmax(0,1fr) auto;align-items:center;gap:10px;min-width:0;padding:4px 10px;font-size:12px;line-height:1.5;display:grid}._367UGW_activityRow:last-child{border-bottom:none}._367UGW_activityTime{color:var(--dsw-alias-label-tertiary);white-space:nowrap;justify-self:end;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px;line-height:1.5}._367UGW_activityKind{color:var(--dsw-alias-label-tertiary);white-space:nowrap;flex:none;font-size:11px;line-height:1.5}._367UGW_activitySummary{min-width:0;color:var(--dsw-alias-label-secondary);align-items:center;gap:6px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px;line-height:1.5;display:inline-flex}._367UGW_activitySummaryText{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}._367UGW_activityBadge{flex:none;justify-content:flex-end;align-items:center;line-height:1.5;display:inline-flex}._367UGW_activityResultOk{color:var(--dsw-alias-label-tertiary);white-space:nowrap;align-items:center;gap:4px;font-size:11px;line-height:1.5;display:inline-flex}._367UGW_factGrid{grid-template-columns:repeat(4,minmax(0,1fr));gap:6px 12px;display:grid}._367UGW_factCell{flex-direction:column;gap:2px;min-width:0;display:flex}._367UGW_factLabel{color:var(--dsw-alias-label-tertiary);white-space:nowrap;font-size:11px}._367UGW_factValue{color:var(--dsw-alias-label-primary);white-space:nowrap;text-overflow:ellipsis;font-size:12px;font-weight:600;overflow:hidden}._367UGW_sectionGrid{grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:0 24px;display:grid}._367UGW_sectionRow{border-bottom:1px solid color-mix(in srgb, var(--dsw-alias-border-l1) 55%, transparent);grid-template-columns:minmax(0,1fr) auto 56px;align-items:center;gap:10px;min-width:0;padding:4px 0;font-size:12px;display:grid}._367UGW_sectionRow:nth-last-child(-n+2){border-bottom:none}._367UGW_sectionName{min-width:0;color:var(--dsw-alias-label-secondary);text-overflow:ellipsis;white-space:nowrap;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px;overflow:hidden}._367UGW_sectionCount{color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums;white-space:nowrap;justify-self:end;font-size:11px}._367UGW_sectionSize{color:var(--dsw-alias-label-secondary);font-variant-numeric:tabular-nums;white-space:nowrap;justify-self:end;font-size:11px}._367UGW_activityEmpty{color:var(--dsw-alias-label-tertiary);text-align:center;padding:16px;font-size:11px}._367UGW_snapshotList{flex-direction:column;gap:10px;margin-bottom:12px;display:flex}._367UGW_snapshotRow{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);border-radius:8px;align-items:center;gap:10px;padding:12px 14px;display:flex}._367UGW_snapshotRow[data-selected]{border-color:var(--cm-accent);background:color-mix(in srgb, var(--cm-accent) 7%, transparent)}._367UGW_snapshotRowHeader{align-items:center;gap:8px;font-size:12px;display:flex}._367UGW_snapshotRowMain{text-overflow:ellipsis;white-space:nowrap;flex:auto;min-width:0;font-weight:500;overflow:hidden}._367UGW_snapshotRowText{flex-direction:column;flex:auto;gap:4px;min-width:0;display:flex}._367UGW_snapshotRowName{word-break:break-all;font-size:12.5px;font-weight:500;line-height:1.5}._367UGW_snapshotRowMeta{min-width:0;color:var(--dsw-alias-label-secondary);align-items:center;gap:10px;font-size:12px;display:flex}._367UGW_snapshotRowBadges{flex:none;align-items:center;gap:6px;display:inline-flex}._367UGW_snapshotRowIssues{text-overflow:ellipsis;white-space:nowrap;flex:auto;min-width:0;overflow:hidden}._367UGW_snapshotRowFacts{text-align:right;white-space:nowrap;font-variant-numeric:tabular-nums;flex:none}._367UGW_snapshotList._367UGW_reportScroll{background:var(--dsw-alias-bg-layer-2);margin-bottom:0;padding:10px 12px 10px 10px}._367UGW_reasonList{flex-direction:column;flex-basis:100%;gap:4px;min-width:0;display:flex}._367UGW_reasonLine{align-items:baseline;gap:6px;min-width:0;display:flex}._367UGW_reasonLine>span:first-child{overflow-wrap:anywhere;min-width:0}._367UGW_viewBody{flex-direction:column;flex:auto;min-width:0;min-height:0;display:flex}._367UGW_resultScroll{flex:auto;min-height:0;overflow-y:auto}._367UGW_resultFooter{border-top:1px solid var(--dsw-alias-border-l1);flex:none;align-items:center;margin:10px 0 0;padding-top:10px}._367UGW_fillCard{flex:auto;margin-bottom:0}._367UGW_fillViewport{flex-direction:column;flex:auto;min-height:0;margin-bottom:0;display:flex}._367UGW_fillViewport ._367UGW_tableScroll{flex:auto;max-height:none}._367UGW_compositionViewport{flex:auto;min-height:0;overflow:auto}._367UGW_sparseFill{flex-direction:column;flex:auto;justify-content:flex-start;align-items:flex-start;gap:10px;min-height:280px;display:flex}._367UGW_pickerRoot{flex-direction:column;gap:8px;min-width:0;display:flex;position:relative}._367UGW_pickerOverlay{z-index:var(--cm-z-sticky);animation:_367UGW_maskIn var(--cm-motion-fast) var(--cm-motion-ease-out);background:color-mix(in srgb, var(--dsw-alias-bg-layer-2) 62%, transparent);backdrop-filter:blur(1px);border-radius:8px;justify-content:center;align-items:center;display:flex;position:absolute;inset:0}._367UGW_pickerToolbar{align-items:center;gap:8px;min-width:0;display:flex}._367UGW_pickerToolbar ._367UGW_input{flex:auto;min-width:0}._367UGW_pickerList{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);border-radius:8px;max-height:320px;padding:4px 10px;overflow:auto}._367UGW_pickerModalBody{flex-direction:column;gap:8px;height:min(420px,62vh);min-height:0;display:flex}._367UGW_pickerModalBody ._367UGW_pickerRoot{flex:auto;min-height:0}._367UGW_pickerModalBody ._367UGW_pickerList{scrollbar-gutter:stable;flex:auto;min-height:0;max-height:none}._367UGW_pickerGroup+._367UGW_pickerGroup{border-top:1px solid color-mix(in srgb, var(--dsw-alias-border-l1) 55%, transparent)}._367UGW_pickerUnit{animation:_367UGW_itemEnter var(--cm-motion-base) var(--cm-motion-ease-out);align-items:center;min-width:0;padding:2px 0 2px 16px;display:flex}._367UGW_pickerUnitName{color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;min-width:0;max-width:280px;font-size:12px;overflow:hidden}._367UGW_pickerTreeRow{align-items:center;gap:4px;min-width:0;padding:4px 0;display:flex}._367UGW_pickerTreeRow>:last-child{flex:auto;min-width:0}._367UGW_pickerChevronSpacer{flex:none;width:18px;height:18px;display:inline-block}._367UGW_pickerSubgroup{padding-left:18px}._367UGW_pickerSubgroupName{color:var(--dsw-alias-label-secondary);text-overflow:ellipsis;white-space:nowrap;min-width:0;font-size:11px;font-weight:600;overflow:hidden}._367UGW_pickerUnitNested{gap:4px;padding-left:18px}._367UGW_pickerMore{justify-content:center;padding:4px 0 2px 16px;display:flex}._367UGW_pickerUnitDetail{max-width:220px;color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;font-size:11px;overflow:hidden}._367UGW_pickerCount{color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums;white-space:nowrap;font-size:11px}._367UGW_pickerFooter{border-top:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-secondary);padding-top:6px;font-size:11px}._367UGW_optionsRow{align-items:center;gap:16px;display:flex;& ._367UGW_noticeSlot{flex-direction:column;justify-content:center;min-height:40px;display:flex}& ._367UGW_noticeSlot ._367UGW_banner{margin:0}& ._367UGW_noticeLine{white-space:nowrap;text-overflow:ellipsis;display:block;overflow:hidden}margin-bottom:4px}._367UGW_groupList{flex-direction:column;gap:8px;margin-bottom:10px;display:flex}._367UGW_groupCard{margin:0}._367UGW_categoryItem{flex-wrap:wrap;align-items:baseline;gap:8px;min-width:0;display:flex}._367UGW_categoryName{color:var(--dsw-alias-label-primary);flex:none;font-weight:500}._367UGW_categoryDesc{color:var(--dsw-alias-label-tertiary);min-width:0;font-size:11px}._367UGW_optionsCard{margin:0 0 10px}._367UGW_secretFields ._367UGW_field{margin-bottom:0}._367UGW_groupHintRow{margin-bottom:10px}._367UGW_secretFields{background:0 0;border:none;border-radius:0;grid-template-columns:1fr 1fr;gap:0 10px;margin:6px 0 10px;padding:0;display:grid}._367UGW_warnList{color:var(--dsw-alias-label-secondary);margin:4px 0 0;padding-left:18px;font-size:11px}._367UGW_wizardStepperRow{align-items:center;gap:10px;margin-bottom:10px;display:flex}._367UGW_conflictDetail{margin-top:2px}._367UGW_conflictList{flex-direction:column;gap:8px;margin-bottom:10px;display:flex}._367UGW_conflictItem{border:1px solid color-mix(in srgb, var(--cm-warn) 35%, transparent);background:var(--dsw-alias-bg-layer-2);border-radius:8px;padding:10px 12px}._367UGW_conflictHead{align-items:center;gap:8px;margin-bottom:6px;font-size:12px;display:flex}._367UGW_conflictId{color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;min-width:0;font-weight:600;overflow:hidden}._367UGW_conflictOptions{flex-wrap:wrap;gap:4px 14px;margin-top:6px;display:flex}._367UGW_conflictChoices{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin-top:8px;display:grid}._367UGW_choiceCard{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-base);color:var(--dsw-alias-label-secondary);cursor:pointer;border-radius:8px;align-items:center;gap:6px;padding:8px 10px;font-size:12px;font-weight:500;transition:border-color .12s ease-out,background-color .12s ease-out;display:flex}._367UGW_choiceCard:hover{border-color:color-mix(in srgb, var(--cm-accent) 40%, var(--dsw-alias-border-l2))}._367UGW_choiceCard:focus-within{outline:2px solid var(--cm-accent);outline-offset:1px}._367UGW_choiceCard[data-selected]{border-color:var(--cm-accent);background:color-mix(in srgb, var(--cm-accent) 9%, transparent);color:var(--dsw-alias-label-primary)}._367UGW_choiceCard input{width:13px;height:13px;accent-color:var(--cm-accent);flex:none;margin:0}._367UGW_choiceTitle{min-width:0}._367UGW_conflictDetail{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-base);color:var(--dsw-alias-label-secondary);overflow-wrap:anywhere;white-space:normal;border-radius:6px;padding:8px 10px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px}._367UGW_conflictPrefix{color:var(--dsw-alias-label-tertiary);margin-bottom:4px}._367UGW_conflictLine{align-items:baseline;gap:8px;padding:4px 0;display:flex}._367UGW_conflictLine+._367UGW_conflictLine{border-top:1px solid color-mix(in srgb, var(--dsw-alias-border-l1) 55%, transparent)}._367UGW_conflictLineLabel{min-width:56px;color:var(--dsw-alias-label-tertiary);flex:none;font-weight:600}._367UGW_conflictLineValue{overflow-wrap:anywhere;flex:auto;min-width:0}._367UGW_pathMappingList{flex-direction:column;gap:6px;margin-bottom:10px;display:flex}._367UGW_pathRow{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);border-radius:8px;flex-direction:column;align-items:stretch;gap:8px;padding:8px 10px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px;display:flex}._367UGW_pathOld,._367UGW_pathNew{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-base);overflow-wrap:anywhere;border-radius:6px;flex-direction:column;flex:auto;width:100%;min-width:0;padding:4px 8px;display:flex}._367UGW_pathValue{color:var(--dsw-alias-label-secondary);white-space:pre-wrap;overflow-wrap:anywhere;margin:2px 0 0}._367UGW_pathIssueKind{flex:none}._367UGW_secretsList{flex-direction:column;display:flex}._367UGW_snapshotPickerRow{flex-wrap:nowrap;align-items:flex-end;gap:8px;margin-top:10px;margin-bottom:10px;display:flex}._367UGW_snapshotPickerRow ._367UGW_field{margin-bottom:0}._367UGW_pickerAction{flex:none;align-items:center;display:inline-flex}._367UGW_logPanel{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-base);border-radius:8px;margin-bottom:10px;overflow:hidden}._367UGW_logHeader{border-bottom:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-tertiary);background:var(--dsw-alias-bg-layer-2);align-items:center;gap:8px;padding:6px 10px;font-size:11px;font-weight:600;display:flex}._367UGW_logLine{color:var(--dsw-alias-label-secondary);white-space:pre-wrap;overflow-wrap:anywhere;padding:1px 10px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px;line-height:1.5}._367UGW_logCounts{color:var(--dsw-alias-label-tertiary);font-weight:500}._367UGW_logFilterButton{font:inherit;color:var(--cm-accent);cursor:pointer;background:0 0;border:none;padding:0 4px;font-size:11px}._367UGW_logFilterButton[data-active]{color:var(--dsw-alias-label-primary);font-weight:700}._367UGW_logEntry+._367UGW_logEntry{border-top:1px solid color-mix(in srgb, var(--dsw-alias-border-l1) 55%, transparent)}._367UGW_logLine[data-level=fail]{color:var(--cm-error)}._367UGW_logLine[data-level=warn]{color:var(--cm-warn)}._367UGW_logLine[data-level=ok]{color:var(--cm-ok)}._367UGW_logLine[data-level=skip]{color:var(--dsw-alias-label-tertiary)}._367UGW_logLine[data-level=running]{color:var(--dsw-alias-label-primary)}._367UGW_logDetail{color:var(--dsw-alias-label-tertiary);white-space:pre-wrap;overflow-wrap:anywhere;padding:0 10px 0 22px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px;line-height:1.5}._367UGW_logDetail[data-kind=command]{color:var(--dsw-alias-label-secondary)}._367UGW_logEmpty{color:var(--dsw-alias-label-tertiary);text-align:center;padding:12px;font-size:11px}._367UGW_logJumpButton{font:inherit;color:var(--cm-accent);cursor:pointer;background:0 0;border:none;margin-left:auto;padding:0 4px;font-size:11px}._367UGW_reportView{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);border-radius:8px;margin-bottom:10px;overflow:hidden}._367UGW_reportList{flex-direction:column;display:flex}._367UGW_confirmItem{border-bottom:1px solid color-mix(in srgb, var(--dsw-alias-border-l1) 50%, transparent);padding:8px 10px}._367UGW_confirmItem:last-child{border-bottom:none}._367UGW_confirmItemHead{flex-wrap:wrap;align-items:center;gap:8px;display:flex}._367UGW_confirmItemDesc{min-width:0;color:var(--dsw-alias-label-primary);overflow-wrap:anywhere;flex:200px;font-size:12.5px}._367UGW_confirmItemHead+._367UGW_conflictItem{margin-top:8px}._367UGW_reportBlock{margin-bottom:10px}._367UGW_reportProblemRow{border-bottom:1px solid color-mix(in srgb, var(--dsw-alias-border-l1) 50%, transparent);padding:6px 10px}._367UGW_reportProblemRow:last-child{border-bottom:none}._367UGW_reportProblemHead{align-items:center;gap:6px;display:flex}._367UGW_reportProblemText{color:var(--dsw-alias-label-primary);overflow-wrap:anywhere;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12px}._367UGW_reportProblemReason{color:var(--dsw-alias-label-secondary);overflow-wrap:anywhere;margin-top:2px;font-size:11px;line-height:1.5}._367UGW_reportSectionRow{align-items:center;gap:6px;padding:4px 0;display:flex}._367UGW_reportWarningRow{color:var(--cm-warn);overflow-wrap:anywhere;padding:2px 10px;font-size:11px;line-height:1.5}._367UGW_reportDetails{color:var(--dsw-alias-label-tertiary);margin-top:4px;font-size:11px}._367UGW_reportDetails>summary{cursor:pointer;color:var(--dsw-alias-label-secondary);padding:2px 0}._367UGW_reportDetails ._367UGW_reportScroll{margin-top:6px}._367UGW_reportView ._367UGW_reportScroll{background:0 0;border:none;border-radius:0}._367UGW_reportBody{flex-direction:column;gap:2px;padding:8px 12px;display:flex}._367UGW_reportHeadline{color:var(--dsw-alias-label-primary);margin-bottom:2px;font-size:12.5px;font-weight:600}._367UGW_reportText{color:var(--dsw-alias-label-secondary);white-space:pre-wrap;overflow-wrap:anywhere;margin:0;padding:8px 12px;font-size:12px}._367UGW_reportFooter{border-top:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-base);align-items:center;gap:8px;padding:8px 12px;display:flex}._367UGW_errorBanner{border:1px solid color-mix(in srgb, var(--cm-error) 45%, transparent);background:color-mix(in srgb, var(--cm-error) 8%, transparent);border-radius:8px;align-items:flex-start;gap:8px;margin:0 0 10px;padding:8px 12px;font-size:12px;display:flex}._367UGW_errorTitle{color:var(--cm-error);font-weight:600}._367UGW_errorLine{white-space:pre-wrap;overflow-wrap:anywhere;color:var(--dsw-alias-label-secondary);margin:0}._367UGW_errorList{margin:4px 0 0;padding-left:18px;font-size:11px}._367UGW_errorItem{overflow-wrap:anywhere}._367UGW_errorReason{white-space:pre-wrap;overflow-wrap:anywhere;min-width:0;color:var(--dsw-alias-label-tertiary);margin:0}._367UGW_errorFooter{margin-top:6px}._367UGW_errorAction{margin-right:8px}._367UGW_errorActionLabel{color:var(--cm-accent)}._367UGW_inspectGroup{margin-bottom:10px}._367UGW_kindTag{background:var(--dsw-alias-interactive-bg-hover);height:16px;color:var(--dsw-alias-label-secondary);white-space:nowrap;border-radius:4px;align-items:center;padding:0 6px;font-size:11px;font-weight:600;display:inline-flex}._367UGW_kindTagOk{background:color-mix(in srgb, var(--cm-ok) 13%, transparent);color:var(--cm-ok)}._367UGW_kindTagInfo{background:color-mix(in srgb, var(--cm-accent) 13%, transparent);color:var(--cm-accent)}._367UGW_kindTagWarn{background:color-mix(in srgb, var(--cm-warn) 13%, transparent);color:var(--cm-warn)}._367UGW_kindTagError{background:color-mix(in srgb, var(--cm-error) 13%, transparent);color:var(--cm-error)}._367UGW_restorePlan{animation:_367UGW_itemEnter var(--cm-motion-base) var(--cm-motion-ease-out);flex-direction:column;gap:10px;display:flex}._367UGW_restorePlanList{flex-direction:column;margin:0;padding:0;list-style:none;display:flex}._367UGW_restorePlanRow,._367UGW_restorePlanRowStatic{border-radius:6px;align-items:center;gap:8px;width:100%;padding:4px 6px;display:flex}._367UGW_restorePlanRow{color:inherit;font:inherit;text-align:left;cursor:pointer;background:0 0;border:none}._367UGW_restorePlanRow:hover{background:var(--dsw-alias-interactive-bg-hover)}._367UGW_restorePlanRow:focus-visible{box-shadow:0 0 0 2px color-mix(in srgb, var(--cm-accent) 55%, transparent);outline:none}._367UGW_restorePlanPath{min-width:0;color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;flex:1;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12px;overflow:hidden}._367UGW_restorePlanStat{color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums;white-space:nowrap;flex:none;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px}._367UGW_restorePlanChevron{color:var(--dsw-alias-label-tertiary);flex:none}._367UGW_restorePlanNote{color:var(--dsw-alias-label-secondary);overflow-wrap:anywhere;padding:0 6px 4px 24px;font-size:11px}._367UGW_restorePlanGroupHead{align-items:center;gap:8px;margin:0 0 4px;display:flex}._367UGW_restorePlanGroupHead ._367UGW_groupLabel{margin-bottom:0;display:inline}._367UGW_diffGroupToggle{color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;padding:0;font-size:11px;font-weight:700}._367UGW_diffGroupToggle:hover{color:var(--dsw-alias-label-primary)}._367UGW_diffGroupToggle:focus-visible{box-shadow:0 0 0 2px color-mix(in srgb, var(--cm-accent) 55%, transparent);border-radius:4px;outline:none}._367UGW_diffStatTotal{font-variant-numeric:tabular-nums;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px}._367UGW_diffStatAdd{color:var(--cm-ok)}._367UGW_diffStatDel{color:var(--cm-error)}._367UGW_rollbackTabIcon{flex:none;align-items:center;margin-right:6px;display:inline-flex}._367UGW_diffFileHead{border-bottom:1px solid var(--dsw-alias-border-l1);flex:none;align-items:center;gap:8px;padding:2px 6px;font-size:12px;line-height:1.5;display:flex}._367UGW_diffFilePath{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--dsw-alias-label-secondary);flex:auto;overflow:hidden}._367UGW_diffFileStat{font-variant-numeric:tabular-nums;flex:none}._367UGW_diffPane{margin:2px 0 8px}._367UGW_diffPaneFill{flex-direction:column;height:100%;min-height:0;margin:0;display:flex}._367UGW_diffPane ._367UGW_diffScroll{max-height:min(80vh,800px)}._367UGW_dialogCard ._367UGW_diffPane ._367UGW_diffScroll{max-height:380px}._367UGW_diffPaneFill ._367UGW_diffScroll{flex:auto;min-height:0;max-height:calc(100vh - 90px)}._367UGW_diffTable{border-collapse:collapse;table-layout:fixed;width:100%;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12px;line-height:1.5}._367UGW_diffNoColW3{width:calc(3ch + 18px)}._367UGW_diffNoColW4{width:calc(4ch + 18px)}._367UGW_diffNoColW5{width:calc(5ch + 18px)}._367UGW_diffNoColW6{width:calc(6ch + 18px)}._367UGW_diffNoHead{border-bottom:1px solid var(--dsw-alias-border-l1);border-right:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-tertiary);text-align:left;padding:2px 6px;font-size:11px;font-weight:600;line-height:1.5}._367UGW_diffNoHead+._367UGW_diffNoHead{border-left:1px solid var(--dsw-alias-border-l1)}._367UGW_diffHunkRow td{background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-tertiary);padding:2px 6px}._367UGW_diffTable tbody td:nth-child(3),._367UGW_diffHunkRow td+td{border-left:1px solid var(--dsw-alias-border-l1)}._367UGW_diffNo{color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums;text-align:right;vertical-align:top;user-select:none;padding:1px 4px}._367UGW_diffNoDel{background:color-mix(in srgb, var(--cm-error) 12%, transparent);color:var(--cm-error);box-shadow:inset 3px 0 0 var(--cm-error)}._367UGW_diffNoAdd{background:color-mix(in srgb, var(--cm-ok) 12%, transparent);color:var(--cm-ok);box-shadow:inset 3px 0 0 var(--cm-ok)}._367UGW_diffCell{color:var(--dsw-alias-label-secondary);white-space:pre-wrap;overflow-wrap:anywhere;vertical-align:top;padding:1px 6px}._367UGW_diffCellAdd{background:color-mix(in srgb, var(--cm-ok) 12%, transparent)}._367UGW_diffCellDel{background:color-mix(in srgb, var(--cm-error) 12%, transparent)}._367UGW_nextStepsGroup{margin-bottom:10px}._367UGW_nextStepsList{max-height:132px;overflow-y:auto}._367UGW_rollbackBox{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-base);border-radius:8px;margin-bottom:10px;padding:8px 10px}._367UGW_statRow{flex-wrap:wrap;align-items:center;gap:8px;margin-top:8px;display:flex}._367UGW_statRow:not(:last-child){margin-bottom:10px}._367UGW_consultSection{margin-top:10px}._367UGW_consultSection:first-of-type{margin-top:8px}._367UGW_consultSection ._367UGW_statRow{margin-top:0}._367UGW_hiddenFile{display:none}._367UGW_cliName,._367UGW_cliCommand{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px}._367UGW_cliCommand{color:var(--dsw-alias-label-secondary);white-space:pre-wrap;overflow-wrap:anywhere;margin:0}._367UGW_historyGroup{margin-bottom:12px}._367UGW_historyRow{border-bottom:1px solid color-mix(in srgb, var(--dsw-alias-border-l1) 55%, transparent);align-items:flex-start;gap:8px;padding:6px 8px;font-size:12px;display:flex}._367UGW_historyRow:last-child{border-bottom:none}._367UGW_historyRowMain{flex:auto;min-width:0}._367UGW_historyMeta{flex-wrap:wrap;align-items:center;gap:6px;margin-bottom:2px;display:flex}._367UGW_historySummary{overflow-wrap:anywhere;color:var(--dsw-alias-label-secondary);display:block}._367UGW_historyTime{color:var(--dsw-alias-label-tertiary);flex:none;padding-top:1px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px}._367UGW_historySections{color:var(--dsw-alias-label-tertiary);font-size:11px}._367UGW_profileRow{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);border-radius:8px;margin-bottom:6px;padding:8px 12px}._367UGW_profileRow[data-selected]{border-color:var(--cm-accent);background:color-mix(in srgb, var(--cm-accent) 7%, transparent)}._367UGW_profileRowHeader{align-items:center;gap:8px;font-size:12px;display:flex}._367UGW_profileRowMain{text-overflow:ellipsis;white-space:nowrap;flex:auto;min-width:0;font-weight:500;overflow:hidden}button._367UGW_profileRowMain{font:inherit;color:var(--dsw-alias-label-primary);text-align:left;cursor:pointer;background:0 0;border:none;flex-direction:column;align-items:flex-start;gap:2px;padding:0;display:flex}._367UGW_profileRowTitle{align-items:center;gap:6px;min-width:0;max-width:100%;display:flex}._367UGW_profileRowName{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}._367UGW_profileRowMeta{max-width:100%;color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;font-size:11px;font-weight:400;display:block;overflow:hidden}._367UGW_detailLines{flex-direction:column;gap:2px;min-width:0;font-size:11px;display:flex}button._367UGW_profileRowMain:hover{color:var(--cm-accent)}._367UGW_listHeaderRow{align-items:center;gap:8px;margin:0 0 8px;display:flex}._367UGW_listHeaderRow ._367UGW_groupLabel{margin-bottom:0}._367UGW_listHeaderRow ._367UGW_cellMeta{flex:auto;min-width:0}._367UGW_badgeRow{flex:none;align-items:center;gap:4px;display:inline-flex}._367UGW_actionRow[data-inline]{flex:none;margin:0}._367UGW_aboutLinkRow{flex-wrap:wrap;align-items:center;gap:8px;display:flex}._367UGW_aboutAuthor{color:var(--cm-accent);overflow-wrap:anywhere;font-size:12.5px;font-weight:600;text-decoration:none}._367UGW_aboutAuthor:hover{text-decoration:underline}._367UGW_aboutAuthor:focus-visible{outline:2px solid var(--cm-accent);outline-offset:1px;border-radius:4px}._367UGW_consultDimension{border-bottom:1px solid color-mix(in srgb, var(--dsw-alias-border-l1) 55%, transparent);padding:6px 0;font-size:12px}._367UGW_consultDimension:last-child{border-bottom:none}._367UGW_severityError{color:var(--cm-error);font-weight:600}._367UGW_viewBody{gap:10px}._367UGW_viewBody>*{margin-bottom:0}._367UGW_viewBody>._367UGW_statRow{margin-top:0;margin-bottom:0}._367UGW_viewBody:after{content:\"\";flex:none;height:8px}@media (width<=900px){._367UGW_secretFields{grid-template-columns:1fr}._367UGW_pagePad{padding:10px 12px 12px}}._367UGW_marketReviewPage{flex-direction:column;flex:1 0 auto;gap:10px;min-height:200px;display:flex}._367UGW_marketReviewPage ._367UGW_pickerRoot{flex:auto}._367UGW_marketReviewScroll,._367UGW_marketReviewPage ._367UGW_pickerList{scrollbar-gutter:stable;flex:auto;min-height:200px;max-height:800px;overflow:auto}._367UGW_marketReviewScroll{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-base);border-radius:8px;padding:6px 10px}@media (prefers-reduced-motion:reduce){._367UGW_toast,._367UGW_statusDot[data-pulse],._367UGW_pagePad,._367UGW_dialogMask,._367UGW_dialogContentCenter,._367UGW_snapshotList>*,._367UGW_dataTable tbody tr,._367UGW_viewEnter,._367UGW_pickerOverlay,._367UGW_pickerUnit,._367UGW_banner,._367UGW_empty{animation:none}._367UGW_statusDot,._367UGW_stepperDot,._367UGW_stepperLabel{transition:none}._367UGW_selectMenu,._367UGW_selectChevron{transition:none;animation:none}._367UGW_artifactDetailWrap,._367UGW_artifactDetailWrap>*{transition:none}._367UGW_dialogMask[data-state=closed],._367UGW_dialogContentCenter[data-state=closed],._367UGW_restorePlan,._367UGW_infoHintBubble{animation:none}._367UGW_collapse{transition:none}._367UGW_skeletonBar{background-image:none;animation:none}}._367UGW_sourceList{flex-direction:column;gap:6px;margin-bottom:10px;display:flex}._367UGW_sourceRow{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);border-radius:8px;align-items:flex-start;gap:8px;min-width:0;padding:8px 10px;display:flex}._367UGW_sourceRow[data-selected]{border-color:var(--cm-accent);background:color-mix(in srgb, var(--cm-accent) 7%, transparent)}._367UGW_sourceRow[data-disabled]{opacity:.7}._367UGW_sourceRowMain{flex:auto;min-width:0}._367UGW_sourceRowHead{align-items:center;gap:8px;min-width:0;display:flex}._367UGW_sourceRowName{color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;min-width:0;font-size:12px;font-weight:600;overflow:hidden}._367UGW_sourceRowHead>:not(._367UGW_sourceRowName){flex:none}._367UGW_sourcePaths{color:var(--dsw-alias-label-tertiary);overflow-wrap:anywhere;margin-top:4px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px;line-height:1.5;display:block}._367UGW_skipList{color:var(--dsw-alias-label-secondary);flex-direction:column;gap:4px;margin:6px 0 0;padding:0;font-size:11px;display:flex}._367UGW_skipRow{flex-wrap:wrap;align-items:baseline;gap:6px;min-width:0;display:flex}._367UGW_skipCode{background:color-mix(in srgb, var(--dsw-alias-label-tertiary) 12%, transparent);color:var(--dsw-alias-label-secondary);white-space:nowrap;border-radius:4px;flex:none;padding:1px 4px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px}._367UGW_skipText{overflow-wrap:anywhere;flex:auto;min-width:0}._367UGW_skipMeta{color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums;flex:none;font-size:11px}._367UGW_chatEntryScope{--cm-text-1:var(--dsw-alias-label-primary);--cm-text-3:var(--dsw-alias-label-tertiary);--cm-surface-2:var(--dsw-alias-bg-layer-2);--cm-chat-bubble:var(--dsw-specific-bubble,color-mix(in srgb, var(--cm-text-1) 12%, transparent));--cm-line-1:var(--dsw-alias-border-l1);--cm-line-2:var(--dsw-alias-border-l2);--cm-fs-meta:11px;--cm-fs-base:12.5px;--cm-sp-2:4px;--cm-sp-3:6px;--cm-sp-4:8px;--cm-sp-5:10px;--cm-sp-6:12px;--cm-sp-8:16px;--cm-r-2:6px;--cm-r-3:8px;min-width:0;color:var(--cm-text-1);font-size:var(--cm-fs-base);line-height:1.5;display:block}._367UGW_chatEntryRow{align-items:flex-end;gap:var(--cm-sp-3);flex-direction:column;display:flex}._367UGW_chatEntryStack{align-items:flex-end;gap:var(--cm-sp-4);flex-direction:column;min-width:0;max-width:min(620px,82%);display:flex}._367UGW_chatBubble{gap:var(--cm-sp-3);max-width:100%;padding:var(--cm-sp-5) var(--cm-sp-8);border-radius:var(--cm-r-3);background:var(--cm-chat-bubble);color:var(--cm-text-1);white-space:pre-wrap;word-break:break-word;flex-direction:column;display:flex}._367UGW_chatBubbleText{white-space:pre-wrap;word-break:break-word}._367UGW_chatFallbackBubble{border-left:2px solid var(--cm-text-1)}._367UGW_chatAttachmentRow{justify-content:flex-end;align-items:flex-end;gap:var(--cm-sp-2);flex-wrap:wrap;min-width:0;display:flex}._367UGW_chatFileCard{align-items:center;gap:var(--cm-sp-3);max-width:100%;padding:var(--cm-sp-2) var(--cm-sp-4);border:.5px solid var(--cm-line-2);border-radius:var(--cm-r-2);background:var(--cm-surface-2);font-size:var(--cm-fs-meta);display:inline-flex}._367UGW_chatFileExt{padding:0 var(--cm-sp-2);border-radius:var(--cm-r-2);background:var(--cm-line-1);color:var(--cm-text-1);font-size:var(--cm-fs-meta);letter-spacing:.02em;flex:none}._367UGW_chatFileName{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}._367UGW_chatFileMeta{color:var(--cm-text-3);font-size:var(--cm-fs-meta);flex:none}._367UGW_chatRawBlock{font-size:var(--cm-fs-meta);color:var(--cm-text-3)}._367UGW_chatRawSummary{cursor:pointer}._367UGW_chatRawPre{max-height:220px;margin:var(--cm-sp-2) 0 0;padding:var(--cm-sp-3);border-radius:var(--cm-r-2);background:var(--cm-surface-2);color:var(--cm-text-3);white-space:pre-wrap;word-break:break-all;overflow:auto}._367UGW_chatEntryActions{align-items:center;gap:var(--cm-sp-2);display:flex}._367UGW_chatEntryTime{color:var(--cm-text-3);font-size:var(--cm-fs-meta)}._367UGW_chatEntryNotice{max-width:min(620px,82%);color:var(--cm-text-3);font-size:var(--cm-fs-meta)}._367UGW_chatEntryReference{color:var(--cm-text-3);font-size:var(--cm-fs-meta)}._367UGW_chatActionBtn{border-radius:var(--cm-r-2);width:24px;height:24px;color:var(--cm-text-3);cursor:pointer;background:0 0;border:0;justify-content:center;align-items:center;padding:0;display:inline-flex}._367UGW_chatActionBtn:hover{background:var(--cm-line-1);color:var(--cm-text-1)}._367UGW_chatActionBtn:disabled{color:var(--cm-text-3);opacity:.5;cursor:not-allowed}._367UGW_rollbackFileList{margin-top:var(--cm-sp-2);flex-direction:column;display:flex}._367UGW_rollbackFileRow{align-items:center;gap:var(--cm-sp-3);padding:var(--cm-sp-3) 0 var(--cm-sp-3) var(--cm-sp-2);grid-template-columns:auto minmax(0,1fr) auto;display:grid;position:relative}._367UGW_rollbackFileRow:before{content:\"\";left:0;top:var(--cm-sp-2);bottom:var(--cm-sp-2);background:var(--cm-info);width:2px;position:absolute}._367UGW_rollbackFileRow[data-kind=create]:before{background:var(--cm-ok)}._367UGW_rollbackFileRow[data-kind=delete]:before{background:var(--cm-error)}._367UGW_rollbackFileRow:not([data-kind]):before{display:none}._367UGW_rollbackFileIcon{flex:none;align-items:center;display:inline-flex}._367UGW_rollbackFilePath{min-width:0;color:var(--cm-text-1);font-size:var(--cm-fs-table);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}._367UGW_rollbackFileDir{color:var(--cm-text-3);transition:color var(--cm-motion-fast) ease}._367UGW_rollbackFileStat{justify-content:flex-end;justify-self:end;align-items:baseline;gap:var(--cm-sp-2);display:inline-flex}._367UGW_rollbackAdded{color:var(--cm-ok);font-size:var(--cm-fs-table);font-variant-numeric:tabular-nums;flex:none}._367UGW_rollbackRemoved{color:var(--cm-error);font-size:var(--cm-fs-table);font-variant-numeric:tabular-nums;flex:none}._367UGW_rollbackDeleted{color:var(--cm-error);font-size:var(--cm-fs-table);flex:none}._367UGW_rollbackFilePath:is(button){font:inherit;font-size:var(--cm-fs-table);color:var(--cm-text-1);text-align:left;cursor:pointer;transition:color var(--cm-motion-fast) ease;background:0 0;border:0;padding:0}._367UGW_rollbackFilePath:is(button):hover:not(:disabled),._367UGW_rollbackFilePath:is(button):focus-visible,._367UGW_rollbackFilePath:is(button):hover:not(:disabled) ._367UGW_rollbackFileDir,._367UGW_rollbackFilePath:is(button):focus-visible ._367UGW_rollbackFileDir{color:var(--cm-accent)}._367UGW_rollbackFilePath:is(button):disabled{color:var(--cm-text-1);cursor:not-allowed;opacity:.7}._367UGW_previewChoiceRow{justify-content:space-between;align-items:baseline;gap:var(--cm-sp-4);margin:0 0 var(--cm-sp-2);display:flex}._367UGW_previewScope{align-items:baseline;gap:var(--cm-sp-3);font-size:var(--cm-fs-meta);color:var(--cm-text-2);font-variant-numeric:tabular-nums;flex:none;display:inline-flex}._367UGW_previewScopeStats{align-items:baseline;gap:var(--cm-sp-3);display:inline-flex}._367UGW_previewScope[data-off=true] ._367UGW_previewScopeStats{color:var(--cm-text-3);opacity:.75}._367UGW_previewScopeOff{color:var(--cm-text-3)}._367UGW_inlineDiffBox{gap:var(--cm-sp-2);margin-top:var(--cm-sp-2);padding:var(--cm-sp-2);border:1px solid var(--cm-line-1);border-radius:var(--cm-r-2);flex-direction:column;display:flex}._367UGW_rollbackWarnings{flex-direction:column;gap:4px;margin-bottom:10px;display:flex}._367UGW_rollbackToolbar{align-items:center;gap:8px;margin-bottom:8px;display:flex}._367UGW_rollbackSummary{color:var(--dsw-alias-label-secondary);font-variant-numeric:tabular-nums;font-size:12px;font-weight:600}._367UGW_rollbackScroll{padding:8px}._367UGW_rollbackGroup{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);border-radius:8px;flex-direction:column;flex:auto;gap:8px;min-height:0;padding:8px 10px;display:flex}._367UGW_rollbackGroupHead{border-bottom:1px solid var(--dsw-alias-border-l1);flex-wrap:wrap;align-items:center;gap:6px;padding-bottom:6px;display:flex}._367UGW_rollbackGroupTitle{color:var(--dsw-alias-label-secondary);overflow-wrap:anywhere;font-size:12px;font-weight:600}._367UGW_rollbackGroupUnit{text-overflow:ellipsis;white-space:nowrap;text-align:right;min-width:0;color:var(--dsw-alias-label-tertiary);flex:auto;margin-left:auto;font-size:11px;overflow:hidden}._367UGW_rollbackPoints{flex-direction:column;gap:6px;display:flex}._367UGW_rollbackPoint{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-base);border-left-width:2px;border-radius:8px;flex-direction:column;gap:4px;padding:8px 10px;display:flex}._367UGW_rollbackPoint[data-kind=auto]{border-left-color:var(--cm-ok)}._367UGW_rollbackPoint[data-kind=guard]{border-left-color:var(--cm-info)}._367UGW_rollbackPoint[data-kind=unknown]{border-left-color:var(--cm-text-3)}._367UGW_rollbackPointTop{flex-wrap:wrap;align-items:center;gap:6px;display:flex}._367UGW_rollbackPointTurn{color:var(--dsw-alias-label-primary);font-variant-numeric:tabular-nums;font-size:12px;font-weight:600}._367UGW_rollbackPointActions{flex:none;align-items:center;gap:6px;margin-left:auto;display:flex}._367UGW_rollbackPointMeta{color:var(--dsw-alias-label-tertiary);flex-wrap:wrap;align-items:center;gap:6px;font-size:11px;line-height:1.5;display:flex}._367UGW_rollbackMetaDot{color:var(--dsw-alias-label-tertiary);flex:none}._367UGW_rollbackLedger{align-items:stretch;gap:10px;height:340px;display:flex}._367UGW_rollbackSessions{flex-direction:column;flex:0 0 148px;gap:4px;height:100%;display:flex;overflow:auto}._367UGW_rollbackSessionItem{text-align:left;border:1px solid var(--dsw-alias-border-l1);border-radius:var(--cm-r-2);background:var(--dsw-alias-bg-base);width:100%;color:var(--dsw-alias-label-secondary);cursor:pointer;flex-direction:column;gap:2px;padding:6px 8px;display:flex}._367UGW_rollbackSessionItem:hover{background:var(--dsw-alias-bg-layer-2)}._367UGW_rollbackSessionItem[data-active]{border-color:var(--cm-accent);background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-primary)}._367UGW_rollbackSessionId{text-overflow:ellipsis;white-space:nowrap;font-size:12px;overflow:hidden}._367UGW_rollbackSessionMeta{color:var(--dsw-alias-label-tertiary);align-items:center;gap:2px;font-size:11px;line-height:1.5;display:flex}._367UGW_rollbackLedgerMain{flex-direction:column;flex:auto;gap:8px;min-width:0;height:100%;display:flex}._367UGW_rollbackPointsScroll{flex:auto;min-height:0;padding:8px;overflow:auto}._367UGW_rollbackPointNote{text-overflow:ellipsis;white-space:nowrap;min-width:0;max-width:100%;overflow:hidden}._367UGW_shHeaderTrailing{align-items:center;gap:8px;margin-left:auto;display:inline-flex}._367UGW_shHeaderTrailing~._367UGW_dialogClose{margin-left:0}._367UGW_shSummary{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);border-radius:8px;flex-direction:column;gap:10px;margin:0 0 10px;padding:12px 14px;display:flex}._367UGW_shMetrics{flex-wrap:wrap;align-items:flex-end;gap:8px 24px;display:flex}._367UGW_shMetric{flex-direction:column;gap:2px;min-width:0;display:flex}._367UGW_shMetricValue{color:var(--dsw-alias-label-primary);font-variant-numeric:tabular-nums;font-size:13px;font-weight:600;line-height:1.25}._367UGW_shMetricLabel{color:var(--dsw-alias-label-tertiary);font-size:11px}._367UGW_shMetric[data-tone=warn] ._367UGW_shMetricValue{color:var(--cm-warn)}._367UGW_shMetric[data-tone=ok] ._367UGW_shMetricValue{color:var(--cm-ok)}._367UGW_shSeverities{flex-wrap:wrap;align-items:center;gap:6px;display:flex}._367UGW_shSeverity{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-base);color:var(--dsw-alias-label-secondary);white-space:nowrap;border-radius:999px;align-items:center;gap:6px;padding:2px 8px;font-size:11px;line-height:1.5;display:inline-flex}._367UGW_shSeverityCount{color:var(--dsw-alias-label-primary);font-variant-numeric:tabular-nums;font-weight:600}._367UGW_shSeverity[data-severity=blocksStartup],._367UGW_shSeverity[data-severity=unloadable]{border-color:color-mix(in srgb, var(--cm-error) 45%, transparent)}._367UGW_shSeverity[data-severity=nextRequestFails],._367UGW_shSeverity[data-severity=invisible]{border-color:color-mix(in srgb, var(--cm-warn) 45%, transparent)}._367UGW_shNotes{border-top:1px solid color-mix(in srgb, var(--dsw-alias-border-l1) 60%, transparent);flex-direction:column;gap:4px;padding-top:8px;display:flex}._367UGW_shSectionHead{flex-wrap:wrap;align-items:center;gap:8px;margin:0 0 10px;display:flex}._367UGW_shSectionHead ._367UGW_groupLabel{margin-bottom:0}._367UGW_shSectionTitle{color:var(--dsw-alias-label-primary);font-size:13px;font-weight:600;line-height:1.25}._367UGW_snapshotList._367UGW_shScroll{background:var(--dsw-alias-bg-base);padding:8px}._367UGW_shRow{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);border-left-width:2px;border-radius:8px;flex-direction:column;gap:4px;padding:8px 10px;display:flex}._367UGW_shRow[data-severity=blocksStartup],._367UGW_shRow[data-severity=unloadable]{border-left-color:var(--cm-error)}._367UGW_shRow[data-severity=nextRequestFails],._367UGW_shRow[data-severity=invisible]{border-left-color:var(--cm-warn)}._367UGW_shRow[data-severity=ok]{border-left-color:var(--cm-ok)}._367UGW_shRowTop{flex-wrap:wrap;align-items:center;gap:6px;display:flex}._367UGW_shRowId{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--dsw-alias-label-primary);flex:auto;font-size:12px;font-weight:600;overflow:hidden}._367UGW_shRowActions{flex:none;align-items:center;gap:6px;margin-left:auto;display:flex}._367UGW_shRowMeta{color:var(--dsw-alias-label-tertiary);flex-wrap:wrap;align-items:center;gap:6px;font-size:11px;line-height:1.5;display:flex}._367UGW_shIssue{background:color-mix(in srgb, var(--dsw-alias-label-tertiary) 12%, transparent);color:var(--dsw-alias-label-secondary);border-radius:4px;align-items:center;padding:2px 6px;display:inline-flex}._367UGW_shRowFacts{white-space:nowrap;font-variant-numeric:tabular-nums;flex:none;margin-left:auto}._367UGW_shMetaDot{color:var(--dsw-alias-label-tertiary);flex:none}._367UGW_shLines{flex-direction:column;gap:4px;display:flex}._367UGW_shPanel{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-base);border-radius:8px;margin:0 0 10px;padding:10px 12px}._367UGW_shPanelHead{flex-wrap:wrap;align-items:center;gap:6px;margin-bottom:6px;display:flex}._367UGW_shPanelTitle{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--dsw-alias-label-primary);flex:auto;font-size:12px;font-weight:600;overflow:hidden}._367UGW_shCommands{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);border-radius:8px;margin:0 0 10px;padding:0;list-style:none;overflow:hidden}._367UGW_shCommand{border-bottom:1px solid color-mix(in srgb, var(--dsw-alias-border-l1) 50%, transparent);align-items:center;gap:8px;padding:8px 10px;display:flex}._367UGW_shCommand:last-child{border-bottom:none}._367UGW_shCommand code{overflow-wrap:anywhere;min-width:0;color:var(--dsw-alias-label-secondary);flex:auto;font-size:11px}";
|
|
14698
|
+
const css = "._367UGW_section{height:100%;min-height:0;font-family:var(--dsw-font-family);font-size:var(--cm-fs-base);color:var(--dsw-alias-label-primary);flex-direction:column;line-height:1.5;display:flex;position:relative;overflow:hidden}body{--cm-disk-card-h:420px;--cm-text-1:var(--dsw-alias-label-primary);--cm-text-2:var(--dsw-alias-label-secondary);--cm-text-3:var(--dsw-alias-label-tertiary);--cm-text-on-accent:var(--dsw-alias-label-primary-foreground);--cm-surface-1:var(--dsw-alias-bg-layer-1);--cm-surface-2:var(--dsw-alias-bg-layer-2);--cm-surface-hover:var(--dsw-alias-interactive-bg-hover);--cm-line-1:var(--dsw-alias-border-l1);--cm-line-2:var(--dsw-alias-border-l2);--cm-input-bg:var(--dsw-specific-input-major);--cm-chat-bubble:var(--dsw-specific-bubble,color-mix(in srgb, var(--cm-text-1) 12%, transparent));--cm-accent:var(--dsw-alias-state-business-primary);--cm-accent-fill:var(--dsw-alias-button-info-fill);--cm-accent-hover:var(--dsw-alias-button-info-hover);--cm-ok:var(--dsw-alias-state-success-primary);--cm-info:var(--cm-accent);--cm-warn:var(--dsw-alias-state-warn-primary);--cm-error:var(--dsw-alias-state-error-primary);--cm-idle:var(--dsw-alias-state-idle-primary,var(--dsw-alias-label-tertiary));--cm-brand:var(--dsw-alias-brand-primary,var(--cm-accent));--cm-warn-label:var(--dsw-alias-state-warn-label,var(--cm-warn));--cm-fs-meta:var(--dsw-font-xxxs-11-font-size,11px);--cm-fs-table:var(--dsw-font-xxs-12-font-size,12px);--cm-fs-base:12.5px;--cm-fs-title:var(--dsw-font-xs-13-font-size,13px);--cm-sp-1:2px;--cm-sp-2:4px;--cm-sp-3:6px;--cm-sp-4:8px;--cm-sp-5:10px;--cm-sp-6:12px;--cm-sp-7:14px;--cm-sp-8:16px;--cm-sp-9:24px;--cm-r-1:var(--dsw-radius-xs,4px);--cm-r-2:var(--dsw-radius-sm,8px);--cm-r-3:var(--dsw-radius-md,12px);--cm-r-surface:var(--dsw-radius-lg,16px);--cm-r-pill:999px;--cm-h-sm:24px;--cm-h-md:28px;--cm-h-lg:32px;--cm-menu-surface:var(--dsw-menu-surface-fill,var(--dsw-alias-bg-layer-2));--cm-menu-backdrop:var(--dsw-menu-backdrop-filter,none);--cm-menu-icon:var(--dsw-alias-menu-icon,var(--dsw-alias-label-secondary));--cm-tooltip-bg:var(--dsw-alias-tooltip-bg,var(--dsw-alias-bg-layer-2));--cm-tooltip-fg:var(--dsw-static-neutral-bluish-00,var(--dsw-alias-label-primary));--cm-toast-bg:var(--dsw-alias-toast-bg,var(--dsw-alias-bg-layer-2));--cm-toast-fg:var(--dsw-alias-toast-label,var(--dsw-alias-label-primary));--cm-mask:var(--dsw-alias-bg-mask-1,color-mix(in srgb, var(--dsw-alias-bg-base) 55%, transparent));--cm-mask-blur:var(--dsw-mask-blur,none);--cm-skeleton:var(--dsw-alias-bg-skeleton,color-mix(in srgb, var(--dsw-alias-label-tertiary) 14%, transparent));--cm-hover:var(--dsw-alias-interactive-bg-hover);--cm-active:var(--dsw-alias-interactive-bg-active,var(--dsw-alias-interactive-bg-hover));--cm-hover-danger:var(--dsw-alias-interactive-bg-hover-danger,color-mix(in srgb, var(--cm-error) 12%, transparent));--cm-ghost-active-fill:var(--dsw-alias-button-ghost-active-fill,color-mix(in srgb, var(--cm-accent) 16%, transparent));--cm-ghost-active-border:var(--dsw-alias-button-ghost-active-border,color-mix(in srgb, var(--cm-accent) 45%, transparent));--cm-primary-fill:var(--dsw-alias-button-primary-fill,var(--cm-accent-fill));--cm-primary-hover:var(--dsw-alias-button-primary-hover,var(--cm-accent-hover));--cm-shadow-1:var(--dsw-elevation-soft,0 10px 26px color-mix(in srgb, var(--dsw-alias-bg-base) 45%, transparent));--cm-shadow-2:var(--dsw-elevation-prominent,0 12px 32px color-mix(in srgb, var(--dsw-alias-bg-base) 40%, transparent));--cm-focus-width:var(--dsw-focus-ring-width,2px);--cm-focus-color:var(--dsw-focus-ring-color,var(--cm-accent));--cm-z-raise:1;--cm-z-sticky:2;--cm-z-task:90;--cm-z-mask:100;--cm-z-modal:101;--cm-z-pop:110;--cm-z-toast:120;--cm-motion-fast:.12s;--cm-motion-base:.18s;--cm-motion-slow:.3s;--cm-motion-ease-out:cubic-bezier(.16, 1, .3, 1);--cm-motion-ease-in-out:cubic-bezier(.4, 0, .6, 1)}._367UGW_section :is(button,a,input,select,textarea,[role=tab]){transition-property:background-color,border-color,color;transition-duration:var(--cm-motion-fast);transition-timing-function:ease}._367UGW_section :is(button,a,input,select,textarea,[role=tab]):focus-visible{outline:var(--cm-focus-width) solid var(--cm-focus-color);outline-offset:2px}._367UGW_mono{font-variant-numeric:tabular-nums;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}._367UGW_section svg{color:inherit;flex:none}._367UGW_shellNav{flex:none;align-items:center;gap:8px;padding:8px;display:flex}._367UGW_navStrip{border-radius:var(--cm-r-3);background:var(--cm-hover);border:none;flex:auto;align-items:center;gap:2px;min-width:0;padding:2px;display:flex;overflow:hidden}._367UGW_navTab,._367UGW_navMore{border-radius:var(--cm-r-2);height:24px;font:inherit;font-size:var(--cm-fs-table);color:var(--dsw-alias-label-secondary);cursor:pointer;white-space:nowrap;background:0 0;border:none;flex:none;align-items:center;gap:4px;padding:0 10px;font-weight:500;display:inline-flex;position:relative}._367UGW_navTab:hover,._367UGW_navMore:hover{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-interactive-bg-hover)}._367UGW_navTab:focus-visible,._367UGW_navMore:focus-visible{outline:var(--cm-focus-width) solid var(--cm-focus-color);outline-offset:1px;border-radius:var(--cm-r-2)}._367UGW_navTab[data-active],._367UGW_navMore[data-active]{background:var(--cm-ghost-active-fill);box-shadow:inset 0 0 0 1px var(--cm-ghost-active-border);color:var(--dsw-alias-label-primary);font-weight:600}._367UGW_navDot{background:var(--cm-error);border-radius:50%;flex:none;width:6px;height:6px}._367UGW_navMoreRoot{flex:none}._367UGW_navMeasure{visibility:hidden;pointer-events:none;align-items:center;gap:2px;padding:2px;display:flex;position:absolute;top:0;left:-9999px}._367UGW_navActions{flex:none;align-items:center;gap:4px;margin-left:4px;display:flex}._367UGW_navActions ._367UGW_ghostButton[data-active]{border-color:color-mix(in srgb, var(--cm-accent) 55%, transparent);color:var(--cm-accent)}._367UGW_iconBtn{border-radius:var(--cm-r-2);width:28px;height:28px;font:inherit;font-size:var(--cm-fs-title);color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;justify-content:center;align-self:center;align-items:center;padding:0;line-height:1.25;display:inline-flex}._367UGW_iconBtn:hover{background:var(--cm-hover);color:var(--dsw-alias-label-primary)}._367UGW_iconBtn:focus-visible{outline:var(--cm-focus-width) solid var(--cm-focus-color);outline-offset:1px}._367UGW_iconBtn:disabled{opacity:.4;cursor:default}._367UGW_iconBtn[data-size=sm]{border-radius:var(--cm-r-1);width:18px;height:18px}._367UGW_iconBtn[data-active]{background:var(--cm-ghost-active-fill);box-shadow:inset 0 0 0 1px var(--cm-ghost-active-border);color:var(--cm-accent)}._367UGW_iconBtn[data-danger]{color:var(--cm-error)}._367UGW_iconBtn[data-danger]:hover{background:color-mix(in srgb, var(--cm-error) 12%, transparent);border-color:var(--cm-error);color:var(--cm-error)}._367UGW_shellMain{overscroll-behavior:contain;flex-direction:column;flex:auto;min-height:0;display:flex;overflow-y:auto}._367UGW_pagePad{min-height:0;animation:_367UGW_pageEnter var(--cm-motion-base) var(--cm-motion-ease-out);flex-direction:column;flex:auto;padding:12px 16px 16px;display:flex}@keyframes _367UGW_pageEnter{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}._367UGW_snapshotList>*,._367UGW_dataTable tbody tr{animation:_367UGW_itemEnter var(--cm-motion-base) var(--cm-motion-ease-out) both}._367UGW_snapshotList>:nth-child(2),._367UGW_dataTable tbody tr:nth-child(2){animation-delay:24ms}._367UGW_snapshotList>:nth-child(3),._367UGW_dataTable tbody tr:nth-child(3){animation-delay:48ms}._367UGW_snapshotList>:nth-child(4),._367UGW_dataTable tbody tr:nth-child(4){animation-delay:72ms}._367UGW_snapshotList>:nth-child(n+5),._367UGW_dataTable tbody tr:nth-child(n+5){animation-delay:96ms}@keyframes _367UGW_itemEnter{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}._367UGW_viewEnter{animation:_367UGW_itemEnter var(--cm-motion-base) var(--cm-motion-ease-out);flex-direction:column;flex:auto;gap:10px;min-height:0;display:flex}._367UGW_collapse{visibility:hidden;transition:grid-template-rows var(--cm-motion-base) var(--cm-motion-ease-out), visibility 0s linear var(--cm-motion-base);grid-template-rows:0fr;display:grid}._367UGW_collapse[data-open]{visibility:visible;transition:grid-template-rows var(--cm-motion-base) var(--cm-motion-ease-out), visibility 0s;grid-template-rows:1fr}._367UGW_collapseInner{min-height:0;overflow:hidden}._367UGW_shellContent{flex-direction:column;flex:auto;min-height:0;display:flex;position:relative}._367UGW_taskPanel{z-index:var(--cm-z-task);background:var(--dsw-alias-bg-layer-1);min-height:0;animation:_367UGW_taskPanelIn var(--cm-motion-base) var(--cm-motion-ease-out);flex-direction:column;display:flex;position:absolute;inset:0}@keyframes _367UGW_taskPanelIn{0%{opacity:0;transform:translate(24px)}to{opacity:1;transform:translate(0)}}._367UGW_taskHead{border-bottom:1px solid var(--dsw-alias-border-l1);flex:none;align-items:center;gap:8px;height:44px;padding:0 12px;display:flex}._367UGW_taskTitle{font-size:var(--cm-fs-title);color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;min-width:0;font-weight:700;overflow:hidden}._367UGW_taskBody{overscroll-behavior:contain;flex:auto;min-height:0;padding:12px 16px 16px;overflow-y:auto}@media (prefers-reduced-motion:reduce){._367UGW_taskPanel{animation:none}}._367UGW_statusBar{border:1px solid var(--dsw-alias-border-l1);border-radius:var(--cm-r-3);background:var(--dsw-alias-bg-layer-2);height:28px;font-size:var(--cm-fs-meta);color:var(--dsw-alias-label-tertiary);white-space:nowrap;flex:none;align-items:center;gap:10px;margin:0 8px 8px;padding:0 10px;display:flex;overflow:hidden}._367UGW_bannerSlot{padding:8px 12px 0}._367UGW_syncChannelBody{margin-top:10px}._367UGW_syncChannelBody ._367UGW_collapseInner{flex-direction:column;gap:10px;display:flex}._367UGW_statusTask{color:var(--dsw-alias-label-secondary);font-weight:600}._367UGW_statusProgress{background:color-mix(in srgb, var(--cm-accent) 20%, transparent);border-radius:999px;flex:none;width:60px;height:4px;display:inline-block;position:relative;overflow:hidden}._367UGW_statusProgress:after{content:\"\";background:var(--cm-accent);width:40%;animation:_367UGW_statusIndeterminate 1.2s var(--cm-motion-ease-in-out) infinite;border-radius:999px;position:absolute;inset:0 auto 0 0}@keyframes _367UGW_statusIndeterminate{0%{transform:translate(-100%)}to{transform:translate(250%)}}._367UGW_statusDot{width:10px;height:10px;color:var(--cm-idle);transition:color var(--cm-motion-fast) ease;border-radius:50%;flex:none;display:inline-block}._367UGW_statusDot[data-kind=ok]{color:var(--cm-ok)}._367UGW_statusDot[data-kind=info]{color:var(--cm-accent)}._367UGW_statusDot[data-kind=warn]{color:var(--cm-warn)}._367UGW_statusDot[data-kind=error]{color:var(--cm-error)}._367UGW_statusDot[data-pulse]{animation:1.2s ease-in-out infinite _367UGW_statusPulse}._367UGW_statusDot:after{content:\"\";background:currentColor;border-radius:50%;width:60%;height:60%;margin:20%;display:block}@keyframes _367UGW_statusPulse{0%,to{opacity:1}50%{opacity:.35}}._367UGW_statusText{text-overflow:ellipsis;min-width:0;overflow:hidden}._367UGW_statusSpacer{flex:auto}._367UGW_statusMeta{color:var(--dsw-alias-label-tertiary);flex:none}._367UGW_primaryButton,._367UGW_ghostButton,._367UGW_dangerButton{border-radius:var(--cm-r-2);height:28px;font:inherit;font-size:var(--cm-fs-table);white-space:nowrap;cursor:pointer;user-select:none;border:.5px solid #0000;justify-content:center;align-items:center;gap:4px;padding:0 10px;font-weight:500;line-height:1.25;display:inline-flex}._367UGW_primaryButton{background:var(--cm-primary-fill);color:var(--cm-text-on-accent)}._367UGW_primaryButton:hover:not(:disabled){background:var(--cm-primary-hover)}._367UGW_ghostButton{border-color:var(--dsw-alias-border-l3);color:var(--dsw-alias-label-primary);background:0 0}._367UGW_ghostButton:hover:not(:disabled){background:var(--cm-hover)}._367UGW_ghostButton:active:not(:disabled){background:var(--cm-active)}._367UGW_dangerButton{border-color:color-mix(in srgb, var(--cm-error) 45%, transparent);color:var(--cm-error);background:0 0}._367UGW_dangerButton:hover:not(:disabled){background:var(--cm-hover-danger);border-color:var(--cm-error)}._367UGW_primaryButton:focus-visible,._367UGW_ghostButton:focus-visible,._367UGW_dangerButton:focus-visible{outline:var(--cm-focus-width) solid var(--cm-focus-color);outline-offset:1px}._367UGW_primaryButton:disabled,._367UGW_ghostButton:disabled,._367UGW_dangerButton:disabled{opacity:.4;cursor:default}._367UGW_primaryButton[data-size=sm],._367UGW_ghostButton[data-size=sm],._367UGW_dangerButton[data-size=sm]{height:24px;font-size:var(--cm-fs-meta);border-radius:var(--cm-r-2);padding:0 8px}._367UGW_input{border:.5px solid var(--dsw-alias-border-l4);border-radius:var(--cm-r-2);background:var(--dsw-specific-input-major);height:28px;font:inherit;font-size:var(--cm-fs-base);color:var(--dsw-alias-label-primary);box-sizing:border-box;padding:0 8px}._367UGW_field>._367UGW_input,._367UGW_field>._367UGW_selectRoot{width:100%;position:relative}._367UGW_input::placeholder{color:var(--dsw-alias-label-dimmed)}._367UGW_input:hover{border-color:color-mix(in srgb, var(--cm-accent) 40%, var(--dsw-alias-border-l2))}._367UGW_input:focus{border-color:var(--cm-accent);outline:none}._367UGW_input:disabled{color:var(--dsw-alias-label-tertiary);cursor:default}._367UGW_input[type=password]{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:var(--cm-fs-table)}._367UGW_selectRoot{vertical-align:middle;min-width:0;max-width:100%;font-size:var(--cm-fs-base);display:inline-block;position:relative}._367UGW_selectTrigger{box-sizing:border-box;border:.5px solid var(--dsw-alias-border-l4);border-radius:var(--cm-r-2);background:var(--dsw-specific-input-major);width:100%;height:28px;font:inherit;font-size:var(--cm-fs-base);color:var(--dsw-alias-label-primary);text-align:left;cursor:pointer;transition:border-color var(--cm-motion-fast) ease, box-shadow var(--cm-motion-fast) ease;align-items:center;gap:6px;padding:0 8px;display:flex}._367UGW_selectTrigger:hover{border-color:color-mix(in srgb, var(--cm-accent) 40%, var(--dsw-alias-border-l2))}._367UGW_selectTrigger:focus-visible,._367UGW_selectRoot[data-open] ._367UGW_selectTrigger{border-color:var(--cm-accent);outline:none}._367UGW_selectTrigger:disabled{color:var(--dsw-alias-label-tertiary);cursor:default}._367UGW_selectLabel{text-overflow:ellipsis;white-space:nowrap;flex:auto;min-width:0;overflow:hidden}._367UGW_selectChevron{color:var(--dsw-alias-label-secondary);transition:transform var(--cm-motion-fast) var(--cm-motion-ease-out);flex:none}._367UGW_selectRoot[data-open] ._367UGW_selectChevron{transform:rotate(180deg)}._367UGW_selectMenu{z-index:var(--cm-z-pop);box-sizing:border-box;overscroll-behavior:contain;border-radius:var(--cm-r-surface);background:var(--cm-menu-surface);max-width:260px;max-height:220px;backdrop-filter:var(--cm-menu-backdrop);box-shadow:var(--cm-shadow-2);transform-origin:top;animation:_367UGW_selectMenuIn var(--cm-motion-fast) var(--cm-motion-ease-out);border:0;padding:4px;position:absolute;overflow-y:auto}._367UGW_selectRoot[data-align=end] ._367UGW_selectMenu{left:auto;right:0}._367UGW_selectMenuPortal{pointer-events:auto;visibility:hidden}._367UGW_selectMenuPortal[data-ready]{visibility:visible}@keyframes _367UGW_selectMenuIn{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:none}}._367UGW_selectOption{border-radius:var(--cm-r-3);font-size:var(--cm-fs-base);color:var(--dsw-alias-label-primary);cursor:pointer;align-items:center;gap:8px;padding:6px 8px;display:flex}._367UGW_selectOption[data-active]{background:var(--cm-hover)}._367UGW_selectOption[aria-selected=true],._367UGW_selectOption[aria-checked=true]{color:var(--cm-accent);background:var(--cm-ghost-active-fill);box-shadow:inset 2px 0 0 var(--cm-accent);font-weight:600}._367UGW_selectOption[data-disabled]{opacity:.4;cursor:default}._367UGW_selectOptionLabel{text-overflow:ellipsis;white-space:nowrap;flex:auto;min-width:0;overflow:hidden}._367UGW_libraryFilters{border:1px solid var(--dsw-alias-border-l1);border-radius:var(--cm-r-3);background:var(--dsw-alias-bg-layer-2);flex:none;align-items:center;gap:2px;margin-top:8px;padding:2px;display:flex;overflow:hidden}._367UGW_libraryFilter{border-radius:var(--cm-r-2);height:24px;font:inherit;font-size:var(--cm-fs-table);color:var(--dsw-alias-label-secondary);cursor:pointer;white-space:nowrap;background:0 0;border:none;flex:none;align-items:center;gap:4px;padding:0 8px;display:inline-flex}._367UGW_libraryFilter:hover{background:var(--dsw-alias-interactive-bg-hover)}._367UGW_libraryFilter[data-active]{color:var(--cm-accent);background:color-mix(in srgb, var(--cm-accent) 16%, transparent);box-shadow:inset 0 0 0 1px color-mix(in srgb, var(--cm-accent) 45%, transparent);font-weight:600}._367UGW_libraryFilterCount{font-size:var(--cm-fs-meta);color:var(--dsw-alias-label-tertiary)}._367UGW_libraryFilter[data-active] ._367UGW_libraryFilterCount{color:inherit}._367UGW_librarySearch{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);border-radius:var(--cm-r-2);background:var(--dsw-specific-input-major);width:100%;height:28px;font:inherit;font-size:var(--cm-fs-base);color:var(--dsw-alias-label-primary);flex:none;margin-top:8px;padding:0 8px}._367UGW_librarySearch:focus-visible{border-color:var(--cm-accent);box-shadow:0 0 0 2px color-mix(in srgb, var(--cm-accent) 18%, transparent);outline:none}._367UGW_libraryFooter{border-top:1px solid var(--dsw-alias-border-l1);flex:none;align-items:center;gap:8px;margin-top:8px;padding-top:8px;display:flex}._367UGW_libraryCount{font-size:var(--cm-fs-table);color:var(--dsw-alias-label-secondary)}._367UGW_artifactList{overscroll-behavior:contain;flex:auto;min-height:0;margin:0;padding:0;list-style:none;overflow-y:auto}._367UGW_libraryListState{flex-direction:column;flex:auto;justify-content:center;min-height:0;display:flex}._367UGW_artifactRow{border-bottom:1px solid color-mix(in srgb, var(--dsw-alias-border-l1) 60%, transparent)}._367UGW_artifactRow:last-child{border-bottom:none}._367UGW_artifactRow[data-expanded]{background:color-mix(in srgb, var(--cm-accent) 5%, transparent)}._367UGW_artifactRowHead{box-sizing:border-box;cursor:pointer;align-items:center;gap:8px;min-height:52px;padding:8px 10px;display:flex}._367UGW_artifactRowHead:hover{background:var(--dsw-alias-interactive-bg-hover)}._367UGW_artifactExpand{border-radius:var(--cm-r-1);width:20px;height:20px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}._367UGW_artifactExpand:focus-visible{outline:var(--cm-focus-width) solid var(--cm-focus-color);outline-offset:1px}._367UGW_artifactMain{flex:auto;min-width:0}._367UGW_artifactTitle{align-items:center;gap:6px;min-width:0;display:flex}._367UGW_artifactName{font-size:var(--cm-fs-base);color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;font-weight:600;overflow:hidden}._367UGW_artifactMeta{font-size:var(--cm-fs-meta);color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;margin-top:2px;overflow:hidden}._367UGW_artifactBadges,._367UGW_artifactActions{flex:none;align-items:center;gap:4px;display:flex}._367UGW_artifactDetailWrap{transition:grid-template-rows var(--cm-motion-base) var(--cm-motion-ease-out);grid-template-rows:0fr;display:grid}._367UGW_artifactRow[data-expanded] ._367UGW_artifactDetailWrap{grid-template-rows:1fr}._367UGW_artifactDetailInner{min-height:0;transition:padding var(--cm-motion-base) var(--cm-motion-ease-out);padding:0 10px 0 38px;overflow:hidden}._367UGW_artifactRow[data-expanded] ._367UGW_artifactDetailInner{padding:2px 10px 10px 38px}._367UGW_artifactDetailInner>*{opacity:0;transition:opacity var(--cm-motion-fast) var(--cm-motion-ease-out)}._367UGW_artifactRow[data-expanded] ._367UGW_artifactDetailInner>*{opacity:1;transition-delay:60ms}._367UGW_artifactRow:not([data-expanded]) ._367UGW_artifactDetailInner>*{transition-delay:0s}._367UGW_paletteInput{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);border-radius:var(--cm-r-2);background:var(--dsw-specific-input-major);width:100%;height:32px;font:inherit;font-size:var(--cm-fs-title);color:var(--dsw-alias-label-primary);padding:0 10px}._367UGW_paletteInput:focus-visible{border-color:var(--cm-accent);box-shadow:0 0 0 2px color-mix(in srgb, var(--cm-accent) 18%, transparent);outline:none}._367UGW_paletteList{overscroll-behavior:contain;max-height:280px;margin-top:8px;overflow-y:auto}._367UGW_paletteGroup{font-size:var(--cm-fs-meta);letter-spacing:.02em;color:var(--dsw-alias-label-tertiary);user-select:none;padding:8px 8px 4px;font-weight:500}._367UGW_paletteGroup:not([data-first]){border-top:1px solid var(--dsw-alias-border-l1);margin-top:4px}._367UGW_paletteItem{border-radius:var(--cm-r-2);font-size:var(--cm-fs-base);color:var(--dsw-alias-label-primary);cursor:pointer;align-items:center;gap:8px;padding:6px 8px;display:flex}._367UGW_paletteItem[data-active]{background:var(--dsw-alias-interactive-bg-hover)}._367UGW_paletteItem[data-disabled]{opacity:.45;cursor:default}._367UGW_paletteItemLabel{text-overflow:ellipsis;white-space:nowrap;flex:auto;min-width:0;overflow:hidden}._367UGW_paletteItemGroup{font-size:var(--cm-fs-meta);color:var(--dsw-alias-label-tertiary);flex:none}._367UGW_paletteEmpty{font-size:var(--cm-fs-base);color:var(--dsw-alias-label-tertiary);padding:10px 8px}._367UGW_paletteHint{border-top:1px solid var(--dsw-alias-border-l1);font-size:var(--cm-fs-meta);color:var(--dsw-alias-label-tertiary);margin-top:8px;padding-top:6px}._367UGW_checkboxRow,._367UGW_radioLabel{cursor:pointer;font-size:var(--cm-fs-base);color:var(--dsw-alias-label-primary);align-items:flex-start;gap:6px;display:flex}._367UGW_checkboxRow input,._367UGW_radioLabel input{width:16px;height:16px;accent-color:var(--cm-brand);cursor:pointer;flex:none;margin:2px 0 0}._367UGW_checkboxRow input:focus-visible,._367UGW_radioLabel input:focus-visible{outline:var(--cm-focus-width) solid var(--cm-focus-color);outline-offset:2px}._367UGW_badge{border-radius:var(--cm-r-pill);height:19px;font-size:var(--cm-fs-meta);white-space:nowrap;color:var(--dsw-alias-label-tertiary);border:none;align-items:center;gap:4px;padding:0 8px;font-weight:500;line-height:1.25;display:inline-flex}._367UGW_badge[data-kind=ok]{background:color-mix(in srgb, var(--cm-ok) 10%, transparent);color:var(--cm-ok)}._367UGW_badge[data-kind=info]{background:color-mix(in srgb, var(--cm-accent) 10%, transparent);color:var(--cm-accent)}._367UGW_badge[data-kind=warn]{background:color-mix(in srgb, var(--cm-warn) 12%, transparent);color:var(--cm-warn)}._367UGW_badge[data-kind=error]{background:color-mix(in srgb, var(--cm-error) 10%, transparent);color:var(--cm-error)}._367UGW_badgeHost{align-items:center;display:inline-flex}._367UGW_banner{animation:_367UGW_itemEnter var(--cm-motion-base) var(--cm-motion-ease-out);border-radius:var(--cm-r-3);border:.5px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);font-size:var(--cm-fs-base);box-sizing:border-box;flex-wrap:wrap;align-items:center;gap:6px 10px;width:100%;margin:0 0 10px;padding:8px 12px;display:flex}._367UGW_banner[data-kind=ok]{border-color:color-mix(in srgb, var(--cm-ok) 35%, transparent);background:color-mix(in srgb, var(--cm-ok) 10%, transparent)}._367UGW_banner[data-kind=info]{border-color:color-mix(in srgb, var(--cm-accent) 30%, transparent);background:color-mix(in srgb, var(--cm-accent) 10%, transparent)}._367UGW_banner[data-kind=warn]{border-color:color-mix(in srgb, var(--cm-warn) 40%, transparent);background:color-mix(in srgb, var(--cm-warn) 12%, transparent)}._367UGW_banner[data-kind=error]{border-color:color-mix(in srgb, var(--cm-error) 45%, transparent);background:color-mix(in srgb, var(--cm-error) 10%, transparent)}._367UGW_spinnerWrap{vertical-align:middle;align-items:center;gap:6px;display:inline-flex}._367UGW_spinner{vertical-align:middle;transform-origin:50%;flex:none;width:13px;height:13px;animation:.7s linear infinite _367UGW_spin;display:inline-block}._367UGW_spinnerTrack{fill:none;stroke:color-mix(in srgb, currentColor 30%, transparent);stroke-width:3px}._367UGW_spinnerArc{fill:none;stroke:currentColor;stroke-width:3px;stroke-linecap:round}@keyframes _367UGW_spin{to{transform:rotate(360deg)}}._367UGW_spinnerLabel{font-size:var(--cm-fs-table);color:inherit;opacity:.85}._367UGW_skeletonRoot{flex-direction:column;gap:8px;width:100%;margin-top:8px;display:flex}._367UGW_skeletonBars,._367UGW_skeletonCards{flex-direction:column;gap:8px;display:flex}._367UGW_skeletonBar{border-radius:var(--cm-r-1);background-color:var(--cm-skeleton);background-image:linear-gradient(90deg, transparent, color-mix(in srgb, var(--dsw-alias-label-tertiary) 26%, transparent), transparent);animation:_367UGW_skeletonShimmer 1.3s var(--cm-motion-ease-in-out) infinite;background-position:-160px 0;background-repeat:no-repeat;background-size:160px 100%;display:block}@keyframes _367UGW_skeletonShimmer{to{background-position:calc(100% + 160px) 0}}._367UGW_skeletonTitle{border-radius:var(--cm-r-2);width:42%;height:13px}._367UGW_skeletonLine{height:11px}._367UGW_skeletonBlock{border-radius:var(--cm-r-3);height:46px}._367UGW_skeletonRow{border-radius:var(--cm-r-2);height:30px}._367UGW_skeletonBars>._367UGW_skeletonBar:nth-child(4n+2){width:92%}._367UGW_skeletonBars>._367UGW_skeletonBar:nth-child(4n+3){width:78%}._367UGW_skeletonBars>._367UGW_skeletonBar:nth-child(4n){width:64%}._367UGW_skeletonBars>._367UGW_skeletonBar:nth-child(2){animation-delay:60ms}._367UGW_skeletonBars>._367UGW_skeletonBar:nth-child(3){animation-delay:.12s}._367UGW_skeletonBars>._367UGW_skeletonBar:nth-child(4){animation-delay:.18s}._367UGW_skeletonBars>._367UGW_skeletonBar:nth-child(n+5){animation-delay:.24s}._367UGW_skeletonCard{border:1px solid var(--dsw-alias-border-l1);border-radius:var(--cm-r-3);background:var(--dsw-alias-bg-layer-2);flex-direction:column;gap:8px;padding:12px;display:flex}._367UGW_skeletonCard>._367UGW_skeletonBar:nth-child(2){width:84%}._367UGW_skeletonCard>._367UGW_skeletonBar:nth-child(3){width:56%}._367UGW_skeletonTable{border:1px solid var(--dsw-alias-border-l1);border-radius:var(--cm-r-3);overflow:hidden}._367UGW_skeletonTableRow{border-bottom:1px solid var(--dsw-alias-border-l1);align-items:center;gap:10px;padding:8px 10px;display:flex}._367UGW_skeletonTableRow:last-child{border-bottom:none}._367UGW_skeletonTableCell{flex:1 1 0;height:11px}._367UGW_skeletonTableCell:first-child{flex:0 0 40%}._367UGW_skeletonTableCell:last-child{flex:0 0 20%}._367UGW_skeletonCaption{font-size:var(--cm-fs-meta);color:var(--dsw-alias-label-tertiary)}._367UGW_card{border:1px solid var(--dsw-alias-border-l1);border-radius:var(--cm-r-3);background:var(--dsw-alias-bg-layer-2);margin:0 0 10px;padding:12px}._367UGW_groupLabel{font-size:var(--cm-fs-meta);letter-spacing:.02em;color:var(--dsw-alias-label-tertiary);margin-bottom:8px;font-weight:700;display:block}._367UGW_groupHeader{align-items:baseline;gap:8px;margin-bottom:10px;display:flex}._367UGW_groupHeader ._367UGW_groupLabel{white-space:nowrap;flex:none;margin-bottom:0}._367UGW_groupNote{font-size:var(--cm-fs-meta);color:var(--dsw-alias-label-tertiary)}._367UGW_groupItems{flex-direction:column;gap:6px;display:flex}._367UGW_sectionOptionRow{flex-direction:column;gap:4px;display:flex}._367UGW_field{flex-direction:column;gap:4px;margin:0 0 10px;display:flex}._367UGW_fieldLabel{font-size:var(--cm-fs-meta);color:var(--dsw-alias-label-secondary);font-weight:600}._367UGW_hint{font-size:var(--cm-fs-meta);color:var(--dsw-alias-label-tertiary);line-height:1.5}._367UGW_formError{font-size:var(--cm-fs-meta);color:var(--cm-error)}._367UGW_infoHint{vertical-align:middle;align-items:center;display:inline-flex}._367UGW_infoHintBtn{border-radius:var(--cm-r-1);width:18px;height:18px;font:inherit;color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:none;flex:none;justify-content:center;align-items:center;padding:0;line-height:1.25;display:inline-flex}._367UGW_infoHintBtn:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}._367UGW_infoHintBtn[data-open]:focus-visible{outline:var(--cm-focus-width) solid var(--cm-focus-color);outline-offset:1px}._367UGW_infoHintBtn[data-open]{color:var(--dsw-alias-label-primary)}._367UGW_infoHintBtn[data-pinned]{background:color-mix(in srgb, var(--cm-accent) 14%, transparent);color:var(--cm-accent)}._367UGW_infoHintBubble{z-index:var(--cm-z-pop);box-sizing:border-box;border-radius:var(--cm-r-2);background:var(--cm-tooltip-bg);max-width:min(260px,100vw - 24px);max-height:min(480px,100vh - 16px);box-shadow:var(--cm-shadow-1);color:var(--cm-tooltip-fg);font-size:var(--cm-fs-table);white-space:pre-wrap;overflow-wrap:anywhere;pointer-events:none;visibility:hidden;border:0;padding:8px 10px;line-height:1.5;position:fixed;overflow-y:auto}._367UGW_infoHintBubble[data-ready]{visibility:visible;animation:_367UGW_infoHintIn var(--cm-motion-fast) var(--cm-motion-ease-out);transform-origin:top}._367UGW_infoHintBubble[data-ready][data-side=top]{transform-origin:bottom}@keyframes _367UGW_infoHintIn{0%{opacity:0}to{opacity:1}}._367UGW_controlRow{align-items:center;gap:8px;margin:0 0 10px;display:flex}._367UGW_sectionTitleBlock{min-width:0;margin:0 0 10px}._367UGW_sectionTitleRow{align-items:center;gap:8px;min-width:0;display:flex}._367UGW_sectionTitle{font-size:var(--cm-fs-title);color:var(--dsw-alias-label-primary);margin:0;font-weight:700;line-height:1.5}._367UGW_sectionSubtitle{font-size:var(--cm-fs-meta);color:var(--dsw-alias-label-tertiary);margin:1px 0 0}._367UGW_empty{animation:_367UGW_itemEnter var(--cm-motion-base) var(--cm-motion-ease-out);border:1px dashed var(--dsw-alias-border-l2);border-radius:var(--cm-r-3);text-align:center;font-size:var(--cm-fs-table);color:var(--dsw-alias-label-tertiary);box-sizing:border-box;flex-direction:column;justify-content:center;align-items:center;gap:4px;width:100%;padding:24px 16px;display:flex}._367UGW_emptySteps{margin:2px 0 10px}._367UGW_tableWrap{border:1px solid var(--dsw-alias-border-l1);border-radius:var(--cm-r-3);background:var(--dsw-alias-bg-layer-2);margin-bottom:10px;overflow:hidden}._367UGW_tableFixed th,._367UGW_tableFixed td{padding-left:12px;padding-right:12px}._367UGW_tableScroll{max-height:420px;overflow:auto}._367UGW_dataTable{border-collapse:collapse;width:100%;font-size:var(--cm-fs-table)}._367UGW_dataTable th,._367UGW_dataTable td{box-sizing:border-box}._367UGW_tableFixed{table-layout:fixed}._367UGW_tableFixed td,._367UGW_tableFixed th{text-overflow:ellipsis;overflow:hidden}._367UGW_tableCompact th,._367UGW_tableCompact td{padding-left:8px;padding-right:8px}._367UGW_dataTable td._367UGW_dim{white-space:nowrap}._367UGW_dataTable th{z-index:var(--cm-z-raise);text-align:left;font-size:var(--cm-fs-meta);color:var(--dsw-alias-label-tertiary);background:var(--dsw-alias-bg-layer-2);border-bottom:.5px solid var(--dsw-alias-border-l2);white-space:nowrap;padding:6px 10px;font-weight:600;position:sticky;top:0}._367UGW_dataTable td{border-bottom:.5px solid var(--dsw-alias-border-l2);vertical-align:middle;color:var(--dsw-alias-label-primary);padding:6px 10px}._367UGW_dataTable tbody tr:last-child td{border-bottom:none}._367UGW_dataTable tbody tr{transition:background-color .1s ease-out}._367UGW_dataTable tbody tr:hover{background:var(--dsw-alias-interactive-bg-hover)}._367UGW_dataTable tbody tr[data-selected]{background:color-mix(in srgb, var(--cm-accent) 9%, transparent)}._367UGW_dataTable ._367UGW_num{text-align:right;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:var(--cm-fs-table);white-space:nowrap}._367UGW_dataTable ._367UGW_dim{color:var(--dsw-alias-label-secondary)}._367UGW_dataTable ._367UGW_cellActions{text-align:right;white-space:nowrap}._367UGW_dataTable td._367UGW_cellActions{text-overflow:clip;overflow:visible}._367UGW_rowActions{align-items:center;gap:2px;display:inline-flex}._367UGW_cellMain{flex-direction:column;justify-content:center;gap:1px;min-width:0;min-height:30px;display:flex}._367UGW_cellTitle{text-overflow:ellipsis;white-space:nowrap;font-weight:500;overflow:hidden}._367UGW_cellMeta{font-size:var(--cm-fs-meta);color:var(--dsw-alias-label-tertiary);align-items:center;gap:6px;min-width:0;display:inline-flex;overflow:hidden}._367UGW_cellMetaNoteText{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}._367UGW_actionRow ._367UGW_banner{flex:auto;min-width:0;margin:0}._367UGW_warnText{color:var(--cm-warn)}._367UGW_kvRow{border-bottom:.5px solid var(--dsw-alias-border-l2);font-size:var(--cm-fs-table);align-items:baseline;gap:10px;min-width:0;padding:4px 0;display:flex}._367UGW_kvRow:last-child{border-bottom:none}._367UGW_kvRow+._367UGW_actionRow{margin-top:8px}._367UGW_checkboxRow+._367UGW_actionRow{margin-top:10px}._367UGW_kvKey{width:88px;color:var(--dsw-alias-label-tertiary);font-size:var(--cm-fs-meta);flex:none}._367UGW_kvValue{overflow-wrap:anywhere;flex:auto;min-width:0}._367UGW_kvValue._367UGW_mono{font-size:var(--cm-fs-table);color:var(--dsw-alias-label-secondary)}._367UGW_segGroup,._367UGW_modeTabs{border-radius:var(--cm-r-3);background:var(--cm-hover);border:none;align-items:center;gap:2px;margin:0 0 10px;padding:2px;display:inline-flex}._367UGW_segItem,._367UGW_modeTab{border-radius:var(--cm-r-2);height:24px;font:inherit;font-size:var(--cm-fs-table);color:var(--dsw-alias-label-secondary);cursor:pointer;white-space:nowrap;background:0 0;border:none;align-items:center;gap:4px;padding:0 10px;font-weight:500;display:inline-flex}._367UGW_segItem:hover,._367UGW_modeTab:hover{color:var(--dsw-alias-label-primary)}._367UGW_segItem:focus-visible,._367UGW_modeTab:focus-visible{outline:var(--cm-focus-width) solid var(--cm-focus-color);outline-offset:1px}._367UGW_segItem[data-active],._367UGW_modeTab[data-active]{background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-primary);box-shadow:var(--cm-shadow-1);font-weight:500}._367UGW_modeHint{font-size:var(--cm-fs-meta);color:var(--dsw-alias-label-tertiary);margin:-4px 0 10px}._367UGW_stepperDot,._367UGW_stepperLabel{transition:background-color var(--cm-motion-fast) ease, border-color var(--cm-motion-fast) ease, color var(--cm-motion-fast) ease}._367UGW_stepper{scrollbar-width:none;align-items:center;padding:2px 0;display:flex;overflow-x:auto}._367UGW_stepper::-webkit-scrollbar{display:none}._367UGW_stepperStep{flex:none;align-items:center;gap:4px;display:inline-flex}._367UGW_stepperDot{border:1.5px solid var(--dsw-alias-border-l2);width:17px;height:17px;font-size:var(--cm-fs-meta);color:var(--dsw-alias-label-tertiary);background:var(--dsw-alias-bg-layer-2);border-radius:50%;flex:none;justify-content:center;align-items:center;font-weight:700;display:inline-flex}._367UGW_stepperDot[data-state=current]{border-color:var(--cm-accent);background:var(--cm-accent);color:var(--dsw-alias-label-primary-foreground)}._367UGW_stepperDot[data-state=done]{background:color-mix(in srgb, var(--cm-ok) 16%, transparent);color:var(--cm-ok);border-color:#0000}._367UGW_stepperLabel{font-size:var(--cm-fs-meta);color:var(--dsw-alias-label-tertiary);white-space:nowrap}._367UGW_stepperStep[data-state=current] ._367UGW_stepperLabel{color:var(--dsw-alias-label-primary);font-weight:600}._367UGW_stepperStep[data-state=done] ._367UGW_stepperLabel{color:var(--dsw-alias-label-secondary)}._367UGW_stepperConnector{background:var(--dsw-alias-border-l2);flex:none;width:14px;height:1.5px;margin:0 4px}._367UGW_stepperStep[data-state=done] ._367UGW_stepperConnector{background:color-mix(in srgb, var(--cm-ok) 45%, transparent)}._367UGW_progressBlock{margin:0 0 10px}._367UGW_progressTrack{border-radius:var(--cm-r-1);background:color-mix(in srgb, var(--dsw-alias-border-l1) 80%, transparent);height:5px;position:relative;overflow:hidden}._367UGW_progressBar{border-radius:var(--cm-r-1);background:var(--cm-accent);transition:width var(--cm-motion-slow) var(--cm-motion-ease-out);position:absolute;inset:0 auto 0 0}._367UGW_progressBarDone{background:var(--cm-ok)}._367UGW_progressBarFailed{background:var(--cm-error)}._367UGW_progressIndeterminate{border-radius:var(--cm-r-1);background:var(--cm-accent);width:34%;animation:_367UGW_indet 1.15s var(--cm-motion-ease-in-out) infinite;position:absolute;top:0;bottom:0}@keyframes _367UGW_indet{0%{left:-34%}to{left:100%}}._367UGW_progressMeta{font-size:var(--cm-fs-meta);color:var(--dsw-alias-label-secondary);align-items:center;gap:8px;margin-top:4px;display:flex}._367UGW_progressLabel{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}._367UGW_progressPercent{color:var(--dsw-alias-label-tertiary);flex:none;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}._367UGW_progressBadge{font-size:var(--cm-fs-meta);color:var(--dsw-alias-label-tertiary);flex:none;align-items:center;gap:4px;display:inline-flex}._367UGW_progressBadgeCount{border-radius:var(--cm-r-3);background:color-mix(in srgb, var(--cm-info) 14%, transparent);color:var(--dsw-alias-label-secondary);padding:0 4px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}._367UGW_progressBadgeSection{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}._367UGW_progressDetail{font-size:var(--cm-fs-meta);color:var(--dsw-alias-label-tertiary);margin-top:2px}._367UGW_planScroll,._367UGW_reportScroll,._367UGW_confirmScroll,._367UGW_pullScroll,._367UGW_diffScroll,._367UGW_historyScroll,._367UGW_consultScroll{border:1px solid var(--dsw-alias-border-l1);border-radius:var(--cm-r-3);background:var(--dsw-alias-bg-base);max-height:380px;overflow:auto}._367UGW_consultScroll{padding:0 6px}._367UGW_logScroll{background:var(--dsw-alias-bg-base);max-height:220px;overflow:auto}._367UGW_dialogMask{z-index:var(--cm-z-mask);background:var(--cm-mask);backdrop-filter:var(--cm-mask-blur);animation:_367UGW_maskIn var(--cm-motion-fast) var(--cm-motion-ease-out);justify-content:center;align-items:center;display:flex;position:fixed;inset:0}@keyframes _367UGW_maskIn{0%{opacity:0}to{opacity:1}}._367UGW_dialogContentCenter{z-index:var(--cm-z-modal);animation:_367UGW_dialogIn var(--cm-motion-base) var(--cm-motion-ease-out);position:fixed;top:50%;left:50%;transform:translate(-50%,-50%)}@keyframes _367UGW_dialogIn{0%{opacity:0;transform:translate(-50%,-50%)translateY(4px)}to{opacity:1;transform:translate(-50%,-50%)translateY(0)}}._367UGW_dialogMask[data-state=closed]{animation:_367UGW_maskOut var(--cm-motion-fast) var(--cm-motion-ease-out)}._367UGW_dialogContentCenter[data-state=closed]{animation:_367UGW_dialogOut var(--cm-motion-fast) var(--cm-motion-ease-out)}@keyframes _367UGW_maskOut{to{opacity:0}}@keyframes _367UGW_dialogOut{to{opacity:0;transform:translate(-50%,-50%)scale(.98)}}._367UGW_dialogCard{border-radius:var(--cm-r-surface);background:var(--dsw-alias-bg-layer-2);width:min(640px,100vw - 48px,95%);max-width:calc(100vw - 48px);max-height:min(600px,100vh - 64px,92%);box-shadow:var(--cm-shadow-2);border:0;flex-direction:column;display:flex}._367UGW_dialogHeader{font-size:var(--cm-fs-title);color:var(--dsw-alias-label-primary);padding:12px 16px 0;font-weight:500}._367UGW_dialogHeaderRow{align-items:center;gap:8px;padding:12px 14px 0;display:flex}._367UGW_dialogHeaderRow ._367UGW_dialogHeader{padding:0}._367UGW_dialogClose{margin-left:auto}._367UGW_dialogBody{min-height:0;font-size:var(--cm-fs-base);color:var(--dsw-alias-label-secondary);flex:auto;padding:8px 16px 12px;overflow-y:auto}._367UGW_dialogBodyScroll{max-height:460px;overflow-y:auto}._367UGW_dialogWide{width:min(720px,100vw - 48px,96%);max-height:min(620px,100vh - 64px,92%)}._367UGW_dialogFooter{border-top:.5px solid var(--dsw-alias-border-l2);justify-content:flex-end;gap:8px;margin:0;padding:10px 16px 14px}._367UGW_updateVersionRow{flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:10px;display:flex}._367UGW_updateVersionArrow{color:var(--dsw-alias-label-tertiary)}._367UGW_updateVersionTarget{font-size:var(--cm-fs-title);color:var(--dsw-alias-label-primary);font-weight:600}._367UGW_updateNotesLoading{justify-content:center;padding:24px 0;display:flex}._367UGW_toastViewport{z-index:var(--cm-z-toast);pointer-events:none;flex-direction:column;align-items:flex-end;gap:8px;max-width:calc(100% - 20px);display:flex;position:absolute;bottom:42px;right:10px}._367UGW_toast{pointer-events:auto;border-radius:var(--cm-r-surface);background:var(--cm-toast-bg);width:fit-content;max-width:420px;box-shadow:var(--cm-shadow-2);font-size:var(--cm-fs-title);color:var(--cm-toast-fg);animation:_367UGW_toastIn var(--cm-motion-base) var(--cm-motion-ease-out);border:0;align-items:flex-start;gap:8px;padding:12px 16px;line-height:1.5;display:flex}@keyframes _367UGW_toastIn{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}._367UGW_toast[data-kind=ok] ._367UGW_toastGlyph{color:var(--cm-ok)}._367UGW_toast[data-kind=info] ._367UGW_toastGlyph{color:var(--cm-accent)}._367UGW_toast[data-kind=warn] ._367UGW_toastGlyph{color:var(--cm-warn-label)}._367UGW_toast[data-kind=error] ._367UGW_toastGlyph{color:var(--cm-error)}._367UGW_toastGlyph{flex:none;margin-top:1px;display:inline-flex}._367UGW_toastText{word-break:break-word;min-width:0}._367UGW_toast>button{flex:none;width:18px;height:18px;margin-left:2px}._367UGW_statusAction{font:inherit;color:inherit;text-align:left;cursor:pointer;background:0 0;border:none;align-items:center;gap:8px;min-width:0;padding:0;display:inline-flex}._367UGW_statusAction:hover{color:var(--dsw-alias-label-primary);text-decoration:underline}._367UGW_statusAction:focus-visible{outline:var(--cm-focus-width) solid var(--cm-focus-color);outline-offset:1px;border-radius:var(--cm-r-1)}._367UGW_runsCenter{flex-direction:column;gap:10px;display:flex}._367UGW_runsSummary{flex-wrap:wrap;align-items:center;gap:8px;display:flex}._367UGW_runsSummaryTitle{font-size:var(--cm-fs-table);color:var(--dsw-alias-label-primary);font-weight:700}._367UGW_runsCardHead{flex-wrap:wrap;align-items:center;gap:6px;margin:0 0 8px;display:flex}._367UGW_runsCardTitle{font-size:var(--cm-fs-base);color:var(--dsw-alias-label-primary);font-weight:600}._367UGW_runsWarnNote{border:1px solid color-mix(in srgb, var(--cm-warn) 45%, transparent);border-radius:var(--cm-r-2);background:color-mix(in srgb, var(--cm-warn) 10%, transparent);font-size:var(--cm-fs-meta);color:var(--dsw-alias-label-secondary);margin:8px 0 0;padding:6px 8px}._367UGW_runsWarnNoteDetail{color:var(--dsw-alias-label-tertiary);margin:4px 0 0}._367UGW_runsCardTime{font-size:var(--cm-fs-meta);color:var(--dsw-alias-label-tertiary);white-space:nowrap;margin-left:auto}._367UGW_runsCounts{font-size:var(--cm-fs-meta);color:var(--dsw-alias-label-tertiary);margin:8px 0 0}._367UGW_runsLogTail{border:1px solid var(--dsw-alias-border-l1);border-radius:var(--cm-r-2);background:var(--dsw-alias-bg-base);max-height:108px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:var(--cm-fs-meta);color:var(--dsw-alias-label-secondary);margin:8px 0 0;padding:6px 8px;line-height:1.5;overflow-y:auto}._367UGW_runsLogLine{white-space:pre-wrap;word-break:break-all}._367UGW_runsCardActions{flex-wrap:wrap;align-items:center;gap:8px;margin:10px 0 0;display:flex}._367UGW_runsOption{border:1px solid var(--dsw-alias-border-l2);border-radius:var(--cm-r-3);background:var(--dsw-alias-bg-layer-2);width:100%;font:inherit;color:var(--dsw-alias-label-primary);text-align:left;cursor:pointer;flex-direction:column;gap:2px;margin:0 0 8px;padding:8px 10px;display:flex}._367UGW_runsOption:hover{border-color:var(--cm-accent)}._367UGW_runsOption:focus-visible{outline:var(--cm-focus-width) solid var(--cm-focus-color);outline-offset:1px}._367UGW_runsOption[data-active]{border-color:var(--cm-accent);background:color-mix(in srgb, var(--cm-accent) 8%, transparent)}._367UGW_runsOptionTitle{font-size:var(--cm-fs-base);align-items:center;gap:6px;font-weight:600;display:flex}._367UGW_runsOptionDesc{font-size:var(--cm-fs-meta);color:var(--dsw-alias-label-tertiary)}._367UGW_runsOptionTag{font-size:var(--cm-fs-meta);background:color-mix(in srgb, var(--cm-accent) 14%, transparent);color:var(--cm-accent);border-radius:999px;padding:0 4px;font-weight:600}._367UGW_actionRow{flex-wrap:wrap;align-items:center;gap:8px;margin:0 0 10px;display:flex}._367UGW_actionRowTop{flex-wrap:wrap;align-items:center;gap:8px;margin:10px 0;display:flex}._367UGW_snapshotPickerHint{margin-top:4px;margin-bottom:10px}._367UGW_headRow{flex-wrap:wrap;align-items:center;gap:8px;margin:0 0 10px;display:flex}._367UGW_headRow ._367UGW_groupLabel{margin-bottom:0}._367UGW_authorRow{flex-wrap:wrap;align-items:center;gap:8px;margin-top:8px;display:flex}._367UGW_authorRow ._367UGW_groupLabel{margin-bottom:0}._367UGW_marketFilterGrid{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin-bottom:8px;display:grid}._367UGW_marketFilterSearch{grid-column:1/-1}._367UGW_marketFilterMeta{flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:8px;display:flex}._367UGW_statStrip{border:1px solid var(--dsw-alias-border-l1);border-radius:var(--cm-r-3);background:var(--dsw-alias-bg-layer-2);flex-wrap:wrap;flex:none;align-items:stretch;gap:6px 0;min-height:32px;margin-bottom:10px;display:flex}._367UGW_statStrip>:last-child{padding-right:8px}._367UGW_statStrip[data-tone=error]{border-color:color-mix(in srgb, var(--cm-error) 45%, transparent);background:color-mix(in srgb, var(--cm-error) 7%, transparent)}._367UGW_statStrip[data-tone=warn]{border-color:color-mix(in srgb, var(--cm-warn) 40%, transparent);background:color-mix(in srgb, var(--cm-warn) 6%, transparent)}._367UGW_statHealth{font-size:var(--cm-fs-table);color:var(--dsw-alias-label-primary);white-space:nowrap;flex:none;align-items:center;gap:6px;padding:4px 8px;font-weight:600;display:flex}._367UGW_statHealthAction{font:inherit;font-size:var(--cm-fs-table);cursor:pointer;text-align:left;background:0 0;border:none;font-weight:600}._367UGW_statHealthAction:hover{background:var(--dsw-alias-interactive-bg-hover)}._367UGW_statHealthAction:focus-visible{outline:var(--cm-focus-width) solid var(--cm-focus-color);outline-offset:-2px;border-radius:var(--cm-r-2)}._367UGW_statSeg{border:none;border-left:1px solid var(--dsw-alias-border-l1);font:inherit;font-size:var(--cm-fs-meta);color:var(--dsw-alias-label-secondary);white-space:nowrap;cursor:pointer;background:0 0;flex:none;align-items:center;gap:6px;padding:4px 8px;display:flex}._367UGW_statSeg>span:first-child{color:var(--dsw-alias-label-tertiary)}._367UGW_statSeg:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}._367UGW_statSeg:hover>span:first-child{color:var(--dsw-alias-label-secondary)}._367UGW_statSeg:focus-visible{outline:var(--cm-focus-width) solid var(--cm-focus-color);outline-offset:-2px}._367UGW_statSeg b{color:var(--dsw-alias-label-primary);font-variant-numeric:tabular-nums;font-weight:700}._367UGW_statSegDim{color:var(--dsw-alias-label-tertiary)}._367UGW_toolRow{flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:10px;display:flex}._367UGW_infoValue{flex:auto;align-items:center;gap:8px;min-width:0;display:inline-flex}._367UGW_infoValue ._367UGW_mono{font-size:var(--cm-fs-meta);color:var(--dsw-alias-label-secondary);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}._367UGW_copyBtn{border-radius:var(--cm-r-1);width:20px;height:20px;font:inherit;font-size:var(--cm-fs-meta);color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:none;flex:none;justify-content:center;align-items:center;padding:0;line-height:1.25;display:inline-flex}._367UGW_copyBtn:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}._367UGW_copyBtn:focus-visible{outline:var(--cm-focus-width) solid var(--cm-focus-color);outline-offset:1px}._367UGW_activityRow ._367UGW_copyBtn{opacity:0}._367UGW_activityRow:hover ._367UGW_copyBtn,._367UGW_activityRow ._367UGW_copyBtn:focus-visible{opacity:1}._367UGW_activityCard{flex-direction:column;min-height:0;margin-bottom:0;display:flex}._367UGW_diskUsageCard{height:var(--cm-disk-card-h);min-height:var(--cm-disk-card-h);max-height:var(--cm-disk-card-h)}._367UGW_diskUsageScroll{flex:auto;min-height:0;max-height:none}._367UGW_activityHeader{align-items:center;gap:8px;margin-bottom:8px;display:flex}._367UGW_activityTitle{font-size:var(--cm-fs-meta);letter-spacing:.02em;color:var(--dsw-alias-label-tertiary);flex:auto;font-weight:700}._367UGW_activityRows{border:1px solid var(--dsw-alias-border-l1);border-radius:var(--cm-r-3);background:var(--dsw-alias-bg-base);flex:auto;min-height:0;overflow-y:auto}._367UGW_activityRow{border-bottom:.5px solid var(--dsw-alias-border-l2);font-size:var(--cm-fs-table);grid-template-columns:72px minmax(0,1fr) auto;align-items:center;gap:10px;min-width:0;padding:4px 10px;line-height:1.5;display:grid}._367UGW_activityRow:last-child{border-bottom:none}._367UGW_activityTime{color:var(--dsw-alias-label-tertiary);font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;line-height:1.5;font-size:var(--cm-fs-meta);white-space:nowrap;justify-self:end}._367UGW_activityKind{color:var(--dsw-alias-label-tertiary);line-height:1.5;font-size:var(--cm-fs-meta);white-space:nowrap;flex:none}._367UGW_activitySummary{min-width:0;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;line-height:1.5;font-size:var(--cm-fs-meta);color:var(--dsw-alias-label-secondary);align-items:center;gap:6px;display:inline-flex}._367UGW_activitySummaryText{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}._367UGW_activityBadge{flex:none;justify-content:flex-end;align-items:center;line-height:1.5;display:inline-flex}._367UGW_activityResultOk{line-height:1.5;font-size:var(--cm-fs-meta);color:var(--dsw-alias-label-tertiary);white-space:nowrap;align-items:center;gap:4px;display:inline-flex}._367UGW_factGrid{grid-template-columns:repeat(4,minmax(0,1fr));gap:6px 12px;display:grid}._367UGW_factCell{flex-direction:column;gap:2px;min-width:0;display:flex}._367UGW_factLabel{font-size:var(--cm-fs-meta);color:var(--dsw-alias-label-tertiary);white-space:nowrap}._367UGW_factValue{font-size:var(--cm-fs-table);color:var(--dsw-alias-label-primary);white-space:nowrap;text-overflow:ellipsis;font-weight:600;overflow:hidden}._367UGW_sectionGrid{grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:0 24px;display:grid}._367UGW_sectionRow{border-bottom:.5px solid var(--dsw-alias-border-l2);font-size:var(--cm-fs-table);grid-template-columns:minmax(0,1fr) auto 56px;align-items:center;gap:10px;min-width:0;padding:4px 0;display:grid}._367UGW_sectionRow:nth-last-child(-n+2){border-bottom:none}._367UGW_sectionName{min-width:0;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:var(--cm-fs-meta);color:var(--dsw-alias-label-secondary);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}._367UGW_sectionCount{color:var(--dsw-alias-label-tertiary);font-size:var(--cm-fs-meta);font-variant-numeric:tabular-nums;white-space:nowrap;justify-self:end}._367UGW_sectionSize{font-size:var(--cm-fs-meta);color:var(--dsw-alias-label-secondary);font-variant-numeric:tabular-nums;white-space:nowrap;justify-self:end}._367UGW_activityEmpty{font-size:var(--cm-fs-meta);color:var(--dsw-alias-label-tertiary);text-align:center;padding:16px}._367UGW_snapshotList{flex-direction:column;gap:10px;margin-bottom:12px;display:flex}._367UGW_snapshotRow{border:1px solid var(--dsw-alias-border-l1);border-radius:var(--cm-r-3);background:var(--dsw-alias-bg-layer-2);align-items:center;gap:10px;padding:12px 14px;display:flex}._367UGW_snapshotRow[data-selected]{border-color:var(--cm-accent);background:color-mix(in srgb, var(--cm-accent) 7%, transparent)}._367UGW_snapshotRowHeader{font-size:var(--cm-fs-table);align-items:center;gap:8px;display:flex}._367UGW_snapshotRowMain{text-overflow:ellipsis;white-space:nowrap;flex:auto;min-width:0;font-weight:500;overflow:hidden}._367UGW_snapshotRowText{flex-direction:column;flex:auto;gap:4px;min-width:0;display:flex}._367UGW_snapshotRowName{font-weight:500;font-size:var(--cm-fs-base);word-break:break-all;line-height:1.5}._367UGW_snapshotRowMeta{min-width:0;font-size:var(--cm-fs-table);color:var(--dsw-alias-label-secondary);align-items:center;gap:10px;display:flex}._367UGW_snapshotRowBadges{flex:none;align-items:center;gap:6px;display:inline-flex}._367UGW_snapshotRowIssues{text-overflow:ellipsis;white-space:nowrap;flex:auto;min-width:0;overflow:hidden}._367UGW_snapshotRowFacts{text-align:right;white-space:nowrap;font-variant-numeric:tabular-nums;flex:none}._367UGW_snapshotList._367UGW_reportScroll{background:var(--dsw-alias-bg-layer-2);margin-bottom:0;padding:10px 12px 10px 10px}._367UGW_reasonList{flex-direction:column;flex-basis:100%;gap:4px;min-width:0;display:flex}._367UGW_reasonLine{align-items:baseline;gap:6px;min-width:0;display:flex}._367UGW_reasonLine>span:first-child{overflow-wrap:anywhere;min-width:0}._367UGW_viewBody{flex-direction:column;flex:auto;min-width:0;min-height:0;display:flex}._367UGW_resultScroll{flex:auto;min-height:0;overflow-y:auto}._367UGW_resultFooter{border-top:1px solid var(--dsw-alias-border-l1);flex:none;align-items:center;margin:10px 0 0;padding-top:10px}._367UGW_fillCard{flex:auto;margin-bottom:0}._367UGW_fillViewport{flex-direction:column;flex:auto;min-height:0;margin-bottom:0;display:flex}._367UGW_fillViewport ._367UGW_tableScroll{flex:auto;max-height:none}._367UGW_compositionViewport{flex:auto;min-height:0;overflow:auto}._367UGW_sparseFill{flex-direction:column;flex:auto;justify-content:flex-start;align-items:flex-start;gap:10px;min-height:280px;display:flex}._367UGW_pickerRoot{flex-direction:column;gap:8px;min-width:0;display:flex;position:relative}._367UGW_pickerOverlay{z-index:var(--cm-z-sticky);animation:_367UGW_maskIn var(--cm-motion-fast) var(--cm-motion-ease-out);border-radius:var(--cm-r-3);background:color-mix(in srgb, var(--dsw-alias-bg-layer-2) 62%, transparent);backdrop-filter:blur(1px);justify-content:center;align-items:center;display:flex;position:absolute;inset:0}._367UGW_pickerToolbar{align-items:center;gap:8px;min-width:0;display:flex}._367UGW_pickerToolbar ._367UGW_input{flex:auto;min-width:0}._367UGW_pickerList{border:1px solid var(--dsw-alias-border-l1);border-radius:var(--cm-r-3);background:var(--dsw-alias-bg-layer-2);max-height:320px;padding:4px 10px;overflow:auto}._367UGW_pickerModalBody{flex-direction:column;gap:8px;height:min(420px,62vh);min-height:0;display:flex}._367UGW_pickerModalBody ._367UGW_pickerRoot{flex:auto;min-height:0}._367UGW_pickerModalBody ._367UGW_pickerList{scrollbar-gutter:stable;flex:auto;min-height:0;max-height:none}._367UGW_pickerGroup+._367UGW_pickerGroup{border-top:.5px solid var(--dsw-alias-border-l2)}._367UGW_pickerUnit{animation:_367UGW_itemEnter var(--cm-motion-base) var(--cm-motion-ease-out);align-items:center;min-width:0;padding:2px 0 2px 16px;display:flex}._367UGW_pickerUnitName{font-size:var(--cm-fs-table);color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;min-width:0;max-width:280px;overflow:hidden}._367UGW_pickerTreeRow{align-items:center;gap:4px;min-width:0;padding:4px 0;display:flex}._367UGW_pickerTreeRow>:last-child{flex:auto;min-width:0}._367UGW_pickerChevronSpacer{flex:none;width:18px;height:18px;display:inline-block}._367UGW_pickerGroupTitle{border-top:1px solid var(--dsw-alias-border-l2);align-items:center;gap:6px;padding:8px 0 4px;display:flex}._367UGW_pickerGroupTitle:first-child{border-top:none;padding-top:0}._367UGW_pickerGroupTitleName{font-size:var(--cm-fs-meta);letter-spacing:.02em;color:var(--dsw-alias-label-secondary);font-weight:600}._367UGW_pickerSubgroup{padding-left:18px}._367UGW_pickerSubgroupName{font-size:var(--cm-fs-meta);color:var(--dsw-alias-label-secondary);text-overflow:ellipsis;white-space:nowrap;min-width:0;font-weight:600;overflow:hidden}._367UGW_pickerChildren{border-left:1px solid var(--dsw-alias-border-l1);margin-left:8px;padding-left:4px}._367UGW_pickerUnitNested{gap:4px}._367UGW_pickerMore{justify-content:center;padding:4px 0 2px 16px;display:flex}._367UGW_pickerUnitDetail{max-width:220px;font-size:var(--cm-fs-meta);color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}._367UGW_pickerCount{font-size:var(--cm-fs-meta);color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums;white-space:nowrap}._367UGW_pickerFooter{border-top:1px solid var(--dsw-alias-border-l1);font-size:var(--cm-fs-meta);color:var(--dsw-alias-label-secondary);padding-top:6px}._367UGW_optionsRow{align-items:center;gap:16px;display:flex;& ._367UGW_noticeSlot{flex-direction:column;justify-content:center;min-height:40px;display:flex}& ._367UGW_noticeSlot ._367UGW_banner{margin:0}& ._367UGW_noticeLine{white-space:nowrap;text-overflow:ellipsis;display:block;overflow:hidden}margin-bottom:4px}._367UGW_groupList{flex-direction:column;gap:8px;margin-bottom:10px;display:flex}._367UGW_groupCard{margin:0}._367UGW_categoryItem{flex-wrap:wrap;align-items:baseline;gap:8px;min-width:0;display:flex}._367UGW_categoryName{color:var(--dsw-alias-label-primary);flex:none;font-weight:500}._367UGW_categoryDesc{font-size:var(--cm-fs-meta);color:var(--dsw-alias-label-tertiary);min-width:0}._367UGW_optionsCard{margin:0 0 10px}._367UGW_secretFields ._367UGW_field{margin-bottom:0}._367UGW_groupHintRow{margin-bottom:10px}._367UGW_secretFields{background:0 0;border:none;border-radius:0;grid-template-columns:1fr 1fr;gap:0 10px;margin:6px 0 10px;padding:0;display:grid}._367UGW_warnList{font-size:var(--cm-fs-meta);color:var(--dsw-alias-label-secondary);margin:4px 0 0;padding-left:18px}._367UGW_wizardStepperRow{align-items:center;gap:10px;margin-bottom:10px;display:flex}._367UGW_conflictDetail{margin-top:2px}._367UGW_conflictList{flex-direction:column;gap:8px;margin-bottom:10px;display:flex}._367UGW_conflictItem{border:1px solid color-mix(in srgb, var(--cm-warn) 35%, transparent);border-radius:var(--cm-r-3);background:var(--dsw-alias-bg-layer-2);padding:10px 12px}._367UGW_conflictHead{font-size:var(--cm-fs-table);align-items:center;gap:8px;margin-bottom:6px;display:flex}._367UGW_conflictId{color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;min-width:0;font-weight:600;overflow:hidden}._367UGW_conflictOptions{flex-wrap:wrap;gap:4px 14px;margin-top:6px;display:flex}._367UGW_conflictChoices{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin-top:8px;display:grid}._367UGW_choiceCard{border:1px solid var(--dsw-alias-border-l2);border-radius:var(--cm-r-3);background:var(--dsw-alias-bg-base);font-size:var(--cm-fs-table);color:var(--dsw-alias-label-secondary);cursor:pointer;align-items:center;gap:6px;padding:8px 10px;font-weight:500;transition:border-color .12s ease-out,background-color .12s ease-out;display:flex}._367UGW_choiceCard:hover{border-color:color-mix(in srgb, var(--cm-accent) 40%, var(--dsw-alias-border-l2))}._367UGW_choiceCard:focus-within{outline:var(--cm-focus-width) solid var(--cm-focus-color);outline-offset:1px}._367UGW_choiceCard[data-selected]{border-color:var(--cm-accent);background:color-mix(in srgb, var(--cm-accent) 9%, transparent);color:var(--dsw-alias-label-primary)}._367UGW_choiceCard input{width:13px;height:13px;accent-color:var(--cm-accent);flex:none;margin:0}._367UGW_choiceTitle{min-width:0}._367UGW_conflictDetail{border:1px solid var(--dsw-alias-border-l1);border-radius:var(--cm-r-2);background:var(--dsw-alias-bg-base);font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:var(--cm-fs-meta);color:var(--dsw-alias-label-secondary);overflow-wrap:anywhere;white-space:normal;padding:8px 10px}._367UGW_conflictPrefix{color:var(--dsw-alias-label-tertiary);margin-bottom:4px}._367UGW_conflictLine{align-items:baseline;gap:8px;padding:4px 0;display:flex}._367UGW_conflictLine+._367UGW_conflictLine{border-top:.5px solid var(--dsw-alias-border-l2)}._367UGW_conflictLineLabel{min-width:56px;color:var(--dsw-alias-label-tertiary);flex:none;font-weight:600}._367UGW_conflictLineValue{overflow-wrap:anywhere;flex:auto;min-width:0}._367UGW_pathMappingList{flex-direction:column;gap:6px;margin-bottom:10px;display:flex}._367UGW_pathRow{border:1px solid var(--dsw-alias-border-l1);border-radius:var(--cm-r-3);background:var(--dsw-alias-bg-layer-2);font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:var(--cm-fs-meta);flex-direction:column;align-items:stretch;gap:8px;padding:8px 10px;display:flex}._367UGW_pathOld,._367UGW_pathNew{border:1px solid var(--dsw-alias-border-l2);border-radius:var(--cm-r-2);background:var(--dsw-alias-bg-base);overflow-wrap:anywhere;flex-direction:column;flex:auto;width:100%;min-width:0;padding:4px 8px;display:flex}._367UGW_pathValue{color:var(--dsw-alias-label-secondary);white-space:pre-wrap;overflow-wrap:anywhere;margin:2px 0 0}._367UGW_pathIssueKind{flex:none}._367UGW_secretsList{flex-direction:column;display:flex}._367UGW_snapshotPickerRow{flex-wrap:nowrap;align-items:flex-end;gap:8px;margin-top:10px;margin-bottom:10px;display:flex}._367UGW_snapshotPickerRow ._367UGW_field{margin-bottom:0}._367UGW_pickerAction{flex:none;align-items:center;display:inline-flex}._367UGW_logPanel{border:1px solid var(--dsw-alias-border-l1);border-radius:var(--cm-r-3);background:var(--dsw-alias-bg-base);margin-bottom:10px;overflow:hidden}._367UGW_logHeader{border-bottom:1px solid var(--dsw-alias-border-l1);font-size:var(--cm-fs-meta);color:var(--dsw-alias-label-tertiary);background:var(--dsw-alias-bg-layer-2);align-items:center;gap:8px;padding:6px 10px;font-weight:600;display:flex}._367UGW_logLine{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:var(--cm-fs-meta);color:var(--dsw-alias-label-secondary);white-space:pre-wrap;overflow-wrap:anywhere;padding:1px 10px;line-height:1.5}._367UGW_logCounts{color:var(--dsw-alias-label-tertiary);font-weight:500}._367UGW_logFilterButton{font:inherit;font-size:var(--cm-fs-meta);color:var(--cm-accent);cursor:pointer;background:0 0;border:none;padding:0 4px}._367UGW_logFilterButton[data-active]{color:var(--dsw-alias-label-primary);font-weight:700}._367UGW_logEntry+._367UGW_logEntry{border-top:.5px solid var(--dsw-alias-border-l2)}._367UGW_logLine[data-level=fail]{color:var(--cm-error)}._367UGW_logLine[data-level=warn]{color:var(--cm-warn)}._367UGW_logLine[data-level=ok]{color:var(--cm-ok)}._367UGW_logLine[data-level=skip]{color:var(--dsw-alias-label-tertiary)}._367UGW_logLine[data-level=running]{color:var(--dsw-alias-label-primary)}._367UGW_logDetail{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:var(--cm-fs-meta);color:var(--dsw-alias-label-tertiary);white-space:pre-wrap;overflow-wrap:anywhere;padding:0 10px 0 22px;line-height:1.5}._367UGW_logDetail[data-kind=command]{color:var(--dsw-alias-label-secondary)}._367UGW_logEmpty{font-size:var(--cm-fs-meta);color:var(--dsw-alias-label-tertiary);text-align:center;padding:12px}._367UGW_logJumpButton{font:inherit;font-size:var(--cm-fs-meta);color:var(--cm-accent);cursor:pointer;background:0 0;border:none;margin-left:auto;padding:0 4px}._367UGW_reportView{border:1px solid var(--dsw-alias-border-l1);border-radius:var(--cm-r-3);background:var(--dsw-alias-bg-layer-2);margin-bottom:10px;overflow:hidden}._367UGW_reportList{flex-direction:column;display:flex}._367UGW_confirmItem{border-bottom:1px solid color-mix(in srgb, var(--dsw-alias-border-l1) 50%, transparent);padding:8px 10px}._367UGW_confirmItem:last-child{border-bottom:none}._367UGW_confirmItemHead{flex-wrap:wrap;align-items:center;gap:8px;display:flex}._367UGW_confirmItemDesc{min-width:0;font-size:var(--cm-fs-base);color:var(--dsw-alias-label-primary);overflow-wrap:anywhere;flex:200px}._367UGW_confirmItemHead+._367UGW_conflictItem{margin-top:8px}._367UGW_reportBlock{margin-bottom:10px}._367UGW_reportProblemRow{border-bottom:1px solid color-mix(in srgb, var(--dsw-alias-border-l1) 50%, transparent);padding:6px 10px}._367UGW_reportProblemRow:last-child{border-bottom:none}._367UGW_reportProblemHead{align-items:center;gap:6px;display:flex}._367UGW_reportProblemText{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:var(--cm-fs-table);color:var(--dsw-alias-label-primary);overflow-wrap:anywhere}._367UGW_reportProblemReason{font-size:var(--cm-fs-meta);color:var(--dsw-alias-label-secondary);overflow-wrap:anywhere;margin-top:2px;line-height:1.5}._367UGW_reportSectionRow{align-items:center;gap:6px;padding:4px 0;display:flex}._367UGW_reportWarningRow{font-size:var(--cm-fs-meta);color:var(--cm-warn);overflow-wrap:anywhere;padding:2px 10px;line-height:1.5}._367UGW_reportDetails{font-size:var(--cm-fs-meta);color:var(--dsw-alias-label-tertiary);margin-top:4px}._367UGW_reportDetails>summary{cursor:pointer;color:var(--dsw-alias-label-secondary);padding:2px 0}._367UGW_reportDetails ._367UGW_reportScroll{margin-top:6px}._367UGW_reportView ._367UGW_reportScroll{background:0 0;border:none;border-radius:0}._367UGW_reportBody{flex-direction:column;gap:2px;padding:8px 12px;display:flex}._367UGW_reportHeadline{font-size:var(--cm-fs-base);color:var(--dsw-alias-label-primary);margin-bottom:2px;font-weight:600}._367UGW_reportText{font-size:var(--cm-fs-table);color:var(--dsw-alias-label-secondary);white-space:pre-wrap;overflow-wrap:anywhere;margin:0;padding:8px 12px}._367UGW_reportFooter{border-top:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-base);align-items:center;gap:8px;padding:8px 12px;display:flex}._367UGW_errorBanner{border:1px solid color-mix(in srgb, var(--cm-error) 45%, transparent);border-radius:var(--cm-r-3);background:color-mix(in srgb, var(--cm-error) 8%, transparent);font-size:var(--cm-fs-table);align-items:flex-start;gap:8px;margin:0 0 10px;padding:8px 12px;display:flex}._367UGW_errorTitle{color:var(--cm-error);font-weight:600}._367UGW_errorLine{white-space:pre-wrap;overflow-wrap:anywhere;color:var(--dsw-alias-label-secondary);margin:0}._367UGW_errorList{font-size:var(--cm-fs-meta);margin:4px 0 0;padding-left:18px}._367UGW_errorItem{overflow-wrap:anywhere}._367UGW_errorReason{white-space:pre-wrap;overflow-wrap:anywhere;min-width:0;color:var(--dsw-alias-label-tertiary);margin:0}._367UGW_errorFooter{margin-top:6px}._367UGW_errorAction{margin-right:8px}._367UGW_errorActionLabel{color:var(--cm-accent)}._367UGW_inspectGroup{margin-bottom:10px}._367UGW_kindTag{border-radius:var(--cm-r-1);background:var(--dsw-alias-interactive-bg-hover);height:16px;font-size:var(--cm-fs-meta);color:var(--dsw-alias-label-secondary);white-space:nowrap;align-items:center;padding:0 6px;font-weight:600;display:inline-flex}._367UGW_kindTagOk{background:color-mix(in srgb, var(--cm-ok) 13%, transparent);color:var(--cm-ok)}._367UGW_kindTagInfo{background:color-mix(in srgb, var(--cm-accent) 13%, transparent);color:var(--cm-accent)}._367UGW_kindTagWarn{background:color-mix(in srgb, var(--cm-warn) 13%, transparent);color:var(--cm-warn)}._367UGW_kindTagError{background:color-mix(in srgb, var(--cm-error) 13%, transparent);color:var(--cm-error)}._367UGW_restorePlan{animation:_367UGW_itemEnter var(--cm-motion-base) var(--cm-motion-ease-out);flex-direction:column;gap:10px;display:flex}._367UGW_restorePlanList{flex-direction:column;margin:0;padding:0;list-style:none;display:flex}._367UGW_restorePlanRow,._367UGW_restorePlanRowStatic{border-radius:var(--cm-r-2);align-items:center;gap:8px;width:100%;padding:4px 6px;display:flex}._367UGW_restorePlanRow{color:inherit;font:inherit;text-align:left;cursor:pointer;background:0 0;border:none}._367UGW_restorePlanRow:hover{background:var(--dsw-alias-interactive-bg-hover)}._367UGW_restorePlanRow:focus-visible{box-shadow:0 0 0 2px color-mix(in srgb, var(--cm-accent) 55%, transparent);outline:none}._367UGW_restorePlanPath{min-width:0;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:var(--cm-fs-table);color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}._367UGW_restorePlanStat{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:var(--cm-fs-meta);color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums;white-space:nowrap;flex:none}._367UGW_restorePlanChevron{color:var(--dsw-alias-label-tertiary);flex:none}._367UGW_restorePlanNote{font-size:var(--cm-fs-meta);color:var(--dsw-alias-label-secondary);overflow-wrap:anywhere;padding:0 6px 4px 24px}._367UGW_restorePlanGroupHead{align-items:center;gap:8px;margin:0 0 4px;display:flex}._367UGW_restorePlanGroupHead ._367UGW_groupLabel{margin-bottom:0;display:inline}._367UGW_diffGroupToggle{color:var(--dsw-alias-label-secondary);font-size:var(--cm-fs-meta);cursor:pointer;background:0 0;border:none;padding:0;font-weight:700}._367UGW_diffGroupToggle:hover{color:var(--dsw-alias-label-primary)}._367UGW_diffGroupToggle:focus-visible{border-radius:var(--cm-r-1);box-shadow:0 0 0 2px color-mix(in srgb, var(--cm-accent) 55%, transparent);outline:none}._367UGW_diffStatTotal{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:var(--cm-fs-meta);font-variant-numeric:tabular-nums}._367UGW_diffStatAdd{color:var(--cm-ok)}._367UGW_diffStatDel{color:var(--cm-error)}._367UGW_rollbackTabIcon{flex:none;align-items:center;margin-right:6px;display:inline-flex}._367UGW_diffFileHead{border-bottom:1px solid var(--dsw-alias-border-l1);font-size:var(--cm-fs-table);flex:none;align-items:center;gap:8px;padding:2px 6px;line-height:1.5;display:flex}._367UGW_diffFilePath{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--dsw-alias-label-secondary);flex:auto;overflow:hidden}._367UGW_diffFileStat{font-variant-numeric:tabular-nums;flex:none}._367UGW_diffPane{margin:2px 0 8px}._367UGW_diffPaneFill{flex-direction:column;height:100%;min-height:0;margin:0;display:flex}._367UGW_diffPane ._367UGW_diffScroll{max-height:min(80vh,800px)}._367UGW_dialogCard ._367UGW_diffPane ._367UGW_diffScroll{max-height:380px}._367UGW_diffPaneFill ._367UGW_diffScroll{flex:auto;min-height:0;max-height:calc(100vh - 90px)}._367UGW_diffTable{border-collapse:collapse;table-layout:fixed;width:100%;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:var(--cm-fs-table);line-height:1.5}._367UGW_diffNoColW3{width:calc(3ch + 18px)}._367UGW_diffNoColW4{width:calc(4ch + 18px)}._367UGW_diffNoColW5{width:calc(5ch + 18px)}._367UGW_diffNoColW6{width:calc(6ch + 18px)}._367UGW_diffNoHead{border-bottom:1px solid var(--dsw-alias-border-l1);border-right:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-tertiary);font-size:var(--cm-fs-meta);text-align:left;padding:2px 6px;font-weight:600;line-height:1.5}._367UGW_diffNoHead+._367UGW_diffNoHead{border-left:1px solid var(--dsw-alias-border-l1)}._367UGW_diffHunkRow td{background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-tertiary);padding:2px 6px}._367UGW_diffTable tbody td:nth-child(3),._367UGW_diffHunkRow td+td{border-left:1px solid var(--dsw-alias-border-l1)}._367UGW_diffNo{color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums;text-align:right;vertical-align:top;user-select:none;padding:1px 4px}._367UGW_diffNoDel{background:color-mix(in srgb, var(--cm-error) 12%, transparent);color:var(--cm-error);box-shadow:inset 3px 0 0 var(--cm-error)}._367UGW_diffNoAdd{background:color-mix(in srgb, var(--cm-ok) 12%, transparent);color:var(--cm-ok);box-shadow:inset 3px 0 0 var(--cm-ok)}._367UGW_diffCell{color:var(--dsw-alias-label-secondary);white-space:pre-wrap;overflow-wrap:anywhere;vertical-align:top;padding:1px 6px}._367UGW_diffCellAdd{background:color-mix(in srgb, var(--cm-ok) 12%, transparent)}._367UGW_diffCellDel{background:color-mix(in srgb, var(--cm-error) 12%, transparent)}._367UGW_nextStepsGroup{margin-bottom:10px}._367UGW_nextStepsList{max-height:132px;overflow-y:auto}._367UGW_rollbackBox{border:1px solid var(--dsw-alias-border-l2);border-radius:var(--cm-r-3);background:var(--dsw-alias-bg-base);margin-bottom:10px;padding:8px 10px}._367UGW_statRow{flex-wrap:wrap;align-items:center;gap:8px;margin-top:8px;display:flex}._367UGW_statRow:not(:last-child){margin-bottom:10px}._367UGW_consultSection{margin-top:10px}._367UGW_consultSection:first-of-type{margin-top:8px}._367UGW_consultSection ._367UGW_statRow{margin-top:0}._367UGW_hiddenFile{display:none}._367UGW_cliName,._367UGW_cliCommand{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:var(--cm-fs-meta)}._367UGW_cliCommand{color:var(--dsw-alias-label-secondary);white-space:pre-wrap;overflow-wrap:anywhere;margin:0}._367UGW_historyGroup{margin-bottom:12px}._367UGW_historyRow{border-bottom:.5px solid var(--dsw-alias-border-l2);font-size:var(--cm-fs-table);align-items:flex-start;gap:8px;padding:6px 8px;display:flex}._367UGW_historyRow:last-child{border-bottom:none}._367UGW_historyRowMain{flex:auto;min-width:0}._367UGW_historyMeta{flex-wrap:wrap;align-items:center;gap:6px;margin-bottom:2px;display:flex}._367UGW_historySummary{overflow-wrap:anywhere;color:var(--dsw-alias-label-secondary);display:block}._367UGW_historyTime{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:var(--cm-fs-meta);color:var(--dsw-alias-label-tertiary);flex:none;padding-top:1px}._367UGW_historySections{font-size:var(--cm-fs-meta);color:var(--dsw-alias-label-tertiary)}._367UGW_profileRow{border:1px solid var(--dsw-alias-border-l1);border-radius:var(--cm-r-3);background:var(--dsw-alias-bg-layer-2);margin-bottom:6px;padding:8px 12px}._367UGW_profileRow[data-selected]{border-color:var(--cm-accent);background:color-mix(in srgb, var(--cm-accent) 7%, transparent)}._367UGW_profileRowHeader{font-size:var(--cm-fs-table);align-items:center;gap:8px;display:flex}._367UGW_profileRowMain{text-overflow:ellipsis;white-space:nowrap;flex:auto;min-width:0;font-weight:500;overflow:hidden}button._367UGW_profileRowMain{font:inherit;color:var(--dsw-alias-label-primary);text-align:left;cursor:pointer;background:0 0;border:none;flex-direction:column;align-items:flex-start;gap:2px;padding:0;display:flex}._367UGW_profileRowTitle{align-items:center;gap:6px;min-width:0;max-width:100%;display:flex}._367UGW_profileRowName{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}._367UGW_profileRowMeta{max-width:100%;font-size:var(--cm-fs-meta);color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;font-weight:400;display:block;overflow:hidden}._367UGW_detailLines{font-size:var(--cm-fs-meta);flex-direction:column;gap:2px;min-width:0;display:flex}button._367UGW_profileRowMain:hover{color:var(--cm-accent)}._367UGW_listHeaderRow{align-items:center;gap:8px;margin:0 0 8px;display:flex}._367UGW_listHeaderRow ._367UGW_groupLabel{margin-bottom:0}._367UGW_listHeaderRow ._367UGW_cellMeta{flex:auto;min-width:0}._367UGW_badgeRow{flex:none;align-items:center;gap:4px;display:inline-flex}._367UGW_actionRow[data-inline]{flex:none;margin:0}._367UGW_aboutLinkRow{flex-wrap:wrap;align-items:center;gap:8px;display:flex}._367UGW_aboutAuthor{font-size:var(--cm-fs-base);color:var(--cm-accent);overflow-wrap:anywhere;font-weight:600;text-decoration:none}._367UGW_aboutAuthor:hover{text-decoration:underline}._367UGW_aboutAuthor:focus-visible{outline:var(--cm-focus-width) solid var(--cm-focus-color);outline-offset:1px;border-radius:var(--cm-r-1)}._367UGW_consultDimension{border-bottom:.5px solid var(--dsw-alias-border-l2);font-size:var(--cm-fs-table);padding:6px 0}._367UGW_consultDimension:last-child{border-bottom:none}._367UGW_severityError{color:var(--cm-error);font-weight:600}._367UGW_viewBody{gap:10px}._367UGW_viewBody>*{margin-bottom:0}._367UGW_viewBody>._367UGW_statRow{margin-top:0;margin-bottom:0}._367UGW_viewBody:after{content:\"\";flex:none;height:8px}@media (width<=900px){._367UGW_secretFields{grid-template-columns:1fr}._367UGW_pagePad{padding:10px 12px 12px}}._367UGW_marketReviewPage{flex-direction:column;flex:1 0 auto;gap:10px;min-height:200px;display:flex}._367UGW_marketReviewPage ._367UGW_pickerRoot{flex:auto}._367UGW_marketReviewScroll,._367UGW_marketReviewPage ._367UGW_pickerList{scrollbar-gutter:stable;flex:auto;min-height:200px;max-height:800px;overflow:auto}._367UGW_marketReviewScroll{border:1px solid var(--dsw-alias-border-l1);border-radius:var(--cm-r-3);background:var(--dsw-alias-bg-base);padding:6px 10px}@media (prefers-reduced-motion:reduce){._367UGW_toast,._367UGW_statusDot[data-pulse],._367UGW_pagePad,._367UGW_dialogMask,._367UGW_dialogContentCenter,._367UGW_snapshotList>*,._367UGW_dataTable tbody tr,._367UGW_viewEnter,._367UGW_pickerOverlay,._367UGW_pickerUnit,._367UGW_banner,._367UGW_empty{animation:none}._367UGW_statusDot,._367UGW_stepperDot,._367UGW_stepperLabel{transition:none}._367UGW_selectMenu,._367UGW_selectChevron{transition:none;animation:none}._367UGW_artifactDetailWrap,._367UGW_artifactDetailWrap>*{transition:none}._367UGW_dialogMask[data-state=closed],._367UGW_dialogContentCenter[data-state=closed],._367UGW_restorePlan,._367UGW_infoHintBubble{animation:none}._367UGW_collapse{transition:none}._367UGW_skeletonBar{background-image:none;animation:none}}._367UGW_sourceList{flex-direction:column;gap:6px;margin-bottom:10px;display:flex}._367UGW_sourceRow{border:1px solid var(--dsw-alias-border-l1);border-radius:var(--cm-r-3);background:var(--dsw-alias-bg-layer-2);align-items:flex-start;gap:8px;min-width:0;padding:8px 10px;display:flex}._367UGW_sourceRow[data-selected]{border-color:var(--cm-accent);background:color-mix(in srgb, var(--cm-accent) 7%, transparent)}._367UGW_sourceRow[data-disabled]{opacity:.7}._367UGW_sourceRowMain{flex:auto;min-width:0}._367UGW_sourceRowHead{align-items:center;gap:8px;min-width:0;display:flex}._367UGW_sourceRowName{font-size:var(--cm-fs-table);color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;min-width:0;font-weight:600;overflow:hidden}._367UGW_sourceRowHead>:not(._367UGW_sourceRowName){flex:none}._367UGW_sourcePaths{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:var(--cm-fs-meta);color:var(--dsw-alias-label-tertiary);overflow-wrap:anywhere;margin-top:4px;line-height:1.5;display:block}._367UGW_skipList{font-size:var(--cm-fs-meta);color:var(--dsw-alias-label-secondary);flex-direction:column;gap:4px;margin:6px 0 0;padding:0;display:flex}._367UGW_skipRow{flex-wrap:wrap;align-items:baseline;gap:6px;min-width:0;display:flex}._367UGW_skipCode{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:var(--cm-fs-meta);border-radius:var(--cm-r-1);background:color-mix(in srgb, var(--dsw-alias-label-tertiary) 12%, transparent);color:var(--dsw-alias-label-secondary);white-space:nowrap;flex:none;padding:1px 4px}._367UGW_skipText{overflow-wrap:anywhere;flex:auto;min-width:0}._367UGW_skipMeta{font-size:var(--cm-fs-meta);color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums;flex:none}._367UGW_chatEntryScope{--cm-text-1:var(--dsw-alias-label-primary);--cm-text-3:var(--dsw-alias-label-tertiary);--cm-surface-2:var(--dsw-alias-bg-layer-2);--cm-chat-bubble:var(--dsw-specific-bubble,color-mix(in srgb, var(--cm-text-1) 12%, transparent));--cm-line-1:var(--dsw-alias-border-l1);--cm-line-2:var(--dsw-alias-border-l2);--cm-fs-meta:11px;--cm-fs-base:var(--dsh-content-font-size,14px);--cm-lh-base:calc(22px + var(--dsh-content-font-delta,0px));--cm-text-2:var(--dsw-alias-label-secondary);--cm-r-chat:var(--dsw-radius-xl,20px);--cm-r-act:var(--dsw-radius-sm,8px);--cm-chat-card-bg:var(--dsw-specific-input-major,transparent);--cm-chat-hover-bg:var(--dsw-alias-interactive-bg-hover,var(--cm-line-1));--cm-fs-second:var(--dsh-content-font-size-secondary,13px);--cm-lh-second:calc(24px + var(--dsh-content-font-delta,0px));--cm-lh-ref:calc(18px + var(--dsh-content-font-delta-secondary,0px));--cm-fs-card:14px;--cm-lh-card:22px;--cm-lh-meta:15px;--cm-chat-action:calc(28px + var(--dsh-content-font-delta,0px));--cm-chat-glyph:calc(15px + var(--dsh-content-font-delta,0px));--cm-sp-2:4px;--cm-sp-3:6px;--cm-sp-4:8px;--cm-sp-5:10px;--cm-sp-6:12px;--cm-sp-8:16px;--cm-r-2:6px;--cm-r-3:8px;min-width:0;color:var(--cm-text-1);font-size:var(--cm-fs-base);line-height:var(--cm-lh-base);display:block}._367UGW_chatEntryRow{align-items:flex-end;gap:var(--cm-sp-3);flex-direction:column;display:flex}._367UGW_chatEntryStack{align-items:flex-end;gap:var(--cm-sp-4);min-width:0;max-width:min(calc(var(--dsh-chat-content-width,748px) * .702), 82%);flex-direction:column;display:flex}._367UGW_chatBubble{max-width:100%;padding:var(--cm-sp-5) var(--cm-sp-8);border-radius:var(--cm-r-chat);background:var(--cm-chat-bubble);color:var(--cm-text-1);white-space:pre-wrap;word-break:break-word}._367UGW_chatBubbleText{white-space:pre-wrap;word-break:break-word}._367UGW_chatFallbackBubble{border-left:2px solid var(--cm-text-1)}._367UGW_chatAttachmentRow{justify-content:flex-end;gap:var(--cm-sp-4);flex-wrap:wrap;max-width:100%;display:flex}._367UGW_chatFileCard{align-items:center;gap:var(--cm-sp-5);box-sizing:border-box;width:240px;min-height:64px;padding:var(--cm-sp-4) var(--cm-sp-6);border:.5px solid var(--cm-line-2);border-radius:var(--cm-r-chat);background:var(--cm-chat-card-bg);flex:0 0 240px;display:inline-flex}._367UGW_chatFileIcon{flex:none;width:28px;height:28px}._367UGW_chatFileContent{flex-direction:column;flex:1;min-width:0;display:flex}._367UGW_chatFileExt{border-radius:var(--cm-r-2);background:var(--cm-line-1);min-width:28px;height:28px;color:var(--cm-text-1);font-size:var(--cm-fs-meta);letter-spacing:.02em;flex:none;justify-content:center;align-items:center;display:inline-flex}._367UGW_chatFileName{color:var(--cm-text-1);font-size:var(--cm-fs-card);font-weight:500;line-height:var(--cm-lh-card);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}._367UGW_chatFileMeta{color:var(--cm-text-3);font-size:12px;line-height:var(--cm-lh-meta);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}._367UGW_chatRawBlock{font-size:var(--cm-fs-meta);color:var(--cm-text-3)}._367UGW_chatRawSummary{cursor:pointer}._367UGW_chatRawPre{max-height:220px;margin:var(--cm-sp-2) 0 0;padding:var(--cm-sp-3);border-radius:var(--cm-r-2);background:var(--cm-surface-2);color:var(--cm-text-3);white-space:pre-wrap;word-break:break-all;overflow:auto}._367UGW_chatEntryActions{align-items:center;gap:var(--cm-sp-4);height:var(--cm-chat-action);margin-top:var(--cm-sp-2);margin-left:calc(-1 * var(--cm-sp-3));display:flex}._367UGW_chatEntryTime{color:var(--cm-text-3);font-size:var(--cm-fs-second);line-height:var(--cm-lh-second);white-space:nowrap;padding-right:var(--cm-sp-6)}._367UGW_chatEntryNotice{max-width:min(calc(var(--dsh-chat-content-width,748px) * .702), 82%);color:var(--cm-text-3);font-size:var(--cm-fs-meta)}._367UGW_chatEntryReference{color:var(--cm-text-3);font-size:var(--cm-fs-second);line-height:var(--cm-lh-ref)}._367UGW_chatActionBtn{width:var(--cm-chat-action);height:var(--cm-chat-action);padding:var(--cm-sp-3);border-radius:var(--cm-r-act);color:var(--cm-text-3);cursor:pointer;background:0 0;border:0;justify-content:center;align-items:center;display:inline-flex}._367UGW_chatActionBtn svg{width:var(--cm-chat-glyph);height:var(--cm-chat-glyph)}._367UGW_chatActionBtn:hover{background:var(--cm-chat-hover-bg);color:var(--cm-text-2)}@media (hover:hover){:is([data-chat-flow-kind=user],[data-chat-flow-kind=steering]):has(~:is([data-chat-flow-kind=user],[data-chat-flow-kind=steering])) ._367UGW_chatEntryActions{opacity:0;transition:opacity var(--cm-motion-fast)}:is([data-chat-flow-kind=user],[data-chat-flow-kind=steering]):has(~:is([data-chat-flow-kind=user],[data-chat-flow-kind=steering])):hover ._367UGW_chatEntryActions,:is([data-chat-flow-kind=user],[data-chat-flow-kind=steering]):has(~:is([data-chat-flow-kind=user],[data-chat-flow-kind=steering])):focus-within ._367UGW_chatEntryActions{opacity:1}}._367UGW_chatActionBtn:disabled{color:var(--cm-text-3);opacity:.5;cursor:not-allowed}._367UGW_rollbackFileList{margin-top:var(--cm-sp-2);flex-direction:column;display:flex}._367UGW_rollbackFileRow{align-items:center;gap:var(--cm-sp-3);padding:var(--cm-sp-3) 0 var(--cm-sp-3) var(--cm-sp-2);grid-template-columns:auto minmax(0,1fr) auto;display:grid;position:relative}._367UGW_rollbackFileRow:before{content:\"\";left:0;top:var(--cm-sp-2);bottom:var(--cm-sp-2);background:var(--cm-info);width:2px;position:absolute}._367UGW_rollbackFileRow[data-kind=create]:before{background:var(--cm-ok)}._367UGW_rollbackFileRow[data-kind=delete]:before{background:var(--cm-error)}._367UGW_rollbackFileRow:not([data-kind]):before{display:none}._367UGW_rollbackFileIcon{flex:none;align-items:center;display:inline-flex}._367UGW_rollbackFilePath{min-width:0;color:var(--cm-text-1);font-size:var(--cm-fs-table);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}._367UGW_rollbackFileDir{color:var(--cm-text-3);transition:color var(--cm-motion-fast) ease}._367UGW_rollbackFileStat{justify-content:flex-end;justify-self:end;align-items:baseline;gap:var(--cm-sp-2);display:inline-flex}._367UGW_rollbackAdded{color:var(--cm-ok);font-size:var(--cm-fs-table);font-variant-numeric:tabular-nums;flex:none}._367UGW_rollbackRemoved{color:var(--cm-error);font-size:var(--cm-fs-table);font-variant-numeric:tabular-nums;flex:none}._367UGW_rollbackDeleted{color:var(--cm-error);font-size:var(--cm-fs-table);flex:none}._367UGW_rollbackFilePath:is(button){font:inherit;font-size:var(--cm-fs-table);color:var(--cm-text-1);text-align:left;cursor:pointer;transition:color var(--cm-motion-fast) ease;background:0 0;border:0;padding:0}._367UGW_rollbackFilePath:is(button):hover:not(:disabled),._367UGW_rollbackFilePath:is(button):focus-visible,._367UGW_rollbackFilePath:is(button):hover:not(:disabled) ._367UGW_rollbackFileDir,._367UGW_rollbackFilePath:is(button):focus-visible ._367UGW_rollbackFileDir{color:var(--cm-accent)}._367UGW_rollbackFilePath:is(button):disabled{color:var(--cm-text-1);cursor:not-allowed;opacity:.7}._367UGW_previewChoiceRow{justify-content:space-between;align-items:baseline;gap:var(--cm-sp-4);margin:0 0 var(--cm-sp-2);display:flex}._367UGW_previewScope{align-items:baseline;gap:var(--cm-sp-3);font-size:var(--cm-fs-meta);color:var(--cm-text-2);font-variant-numeric:tabular-nums;flex:none;display:inline-flex}._367UGW_previewScopeStats{align-items:baseline;gap:var(--cm-sp-3);display:inline-flex}._367UGW_previewScope[data-off=true] ._367UGW_previewScopeStats{color:var(--cm-text-3);opacity:.75}._367UGW_previewScopeOff{color:var(--cm-text-3)}._367UGW_inlineDiffBox{gap:var(--cm-sp-2);margin-top:var(--cm-sp-2);padding:var(--cm-sp-2);border:1px solid var(--cm-line-1);border-radius:var(--cm-r-2);flex-direction:column;display:flex}._367UGW_rollbackWarnings{flex-direction:column;gap:4px;margin-bottom:10px;display:flex}._367UGW_rollbackToolbar{align-items:center;gap:8px;margin-bottom:8px;display:flex}._367UGW_rollbackSummary{font-size:var(--cm-fs-table);color:var(--dsw-alias-label-secondary);font-variant-numeric:tabular-nums;font-weight:600}._367UGW_rollbackScroll{padding:8px}._367UGW_rollbackGroup{border:1px solid var(--dsw-alias-border-l1);border-radius:var(--cm-r-3);background:var(--dsw-alias-bg-layer-2);flex-direction:column;flex:auto;gap:8px;min-height:0;padding:8px 10px;display:flex}._367UGW_rollbackGroupHead{border-bottom:1px solid var(--dsw-alias-border-l1);flex-wrap:wrap;align-items:center;gap:6px;padding-bottom:6px;display:flex}._367UGW_rollbackGroupTitle{font-size:var(--cm-fs-table);color:var(--dsw-alias-label-secondary);overflow-wrap:anywhere;font-weight:600}._367UGW_rollbackGroupUnit{text-overflow:ellipsis;white-space:nowrap;text-align:right;min-width:0;font-size:var(--cm-fs-meta);color:var(--dsw-alias-label-tertiary);flex:auto;margin-left:auto;overflow:hidden}._367UGW_rollbackPoints{flex-direction:column;gap:6px;display:flex}._367UGW_rollbackPoint{border:1px solid var(--dsw-alias-border-l1);border-radius:var(--cm-r-3);background:var(--dsw-alias-bg-base);border-left-width:2px;flex-direction:column;gap:4px;padding:8px 10px;display:flex}._367UGW_rollbackPoint[data-kind=auto]{border-left-color:var(--cm-ok)}._367UGW_rollbackPoint[data-kind=guard]{border-left-color:var(--cm-info)}._367UGW_rollbackPoint[data-kind=unknown]{border-left-color:var(--cm-text-3)}._367UGW_rollbackPointTop{flex-wrap:wrap;align-items:center;gap:6px;display:flex}._367UGW_rollbackPointTurn{font-size:var(--cm-fs-table);color:var(--dsw-alias-label-primary);font-variant-numeric:tabular-nums;font-weight:600}._367UGW_rollbackPointActions{flex:none;align-items:center;gap:6px;margin-left:auto;display:flex}._367UGW_rollbackPointMeta{font-size:var(--cm-fs-meta);color:var(--dsw-alias-label-tertiary);flex-wrap:wrap;align-items:center;gap:6px;line-height:1.5;display:flex}._367UGW_rollbackMetaDot{color:var(--dsw-alias-label-tertiary);flex:none}._367UGW_rollbackLedger{align-items:stretch;gap:10px;height:340px;display:flex}._367UGW_rollbackSessions{flex-direction:column;flex:0 0 148px;gap:4px;height:100%;display:flex;overflow:auto}._367UGW_rollbackSessionItem{text-align:left;border:1px solid var(--dsw-alias-border-l1);border-radius:var(--cm-r-2);background:var(--dsw-alias-bg-base);width:100%;color:var(--dsw-alias-label-secondary);cursor:pointer;flex-direction:column;gap:2px;padding:6px 8px;display:flex}._367UGW_rollbackSessionItem:hover{background:var(--dsw-alias-bg-layer-2)}._367UGW_rollbackSessionItem[data-active]{border-color:var(--cm-accent);background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-primary)}._367UGW_rollbackSessionId{font-size:var(--cm-fs-table);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}._367UGW_rollbackSessionMeta{font-size:var(--cm-fs-meta);color:var(--dsw-alias-label-tertiary);align-items:center;gap:2px;line-height:1.5;display:flex}._367UGW_rollbackLedgerMain{flex-direction:column;flex:auto;gap:8px;min-width:0;height:100%;display:flex}._367UGW_rollbackPointsScroll{flex:auto;min-height:0;padding:8px;overflow:auto}._367UGW_rollbackPointNote{text-overflow:ellipsis;white-space:nowrap;min-width:0;max-width:100%;overflow:hidden}._367UGW_shHeaderTrailing{align-items:center;gap:8px;margin-left:auto;display:inline-flex}._367UGW_shHeaderTrailing~._367UGW_dialogClose{margin-left:0}._367UGW_shSummary{border:1px solid var(--dsw-alias-border-l1);border-radius:var(--cm-r-3);background:var(--dsw-alias-bg-layer-2);flex-direction:column;gap:10px;margin:0 0 10px;padding:12px 14px;display:flex}._367UGW_shMetrics{flex-wrap:wrap;align-items:flex-end;gap:8px 24px;display:flex}._367UGW_shMetric{flex-direction:column;gap:2px;min-width:0;display:flex}._367UGW_shMetricValue{font-size:var(--cm-fs-title);color:var(--dsw-alias-label-primary);font-variant-numeric:tabular-nums;font-weight:600;line-height:1.25}._367UGW_shMetricLabel{font-size:var(--cm-fs-meta);color:var(--dsw-alias-label-tertiary)}._367UGW_shMetric[data-tone=warn] ._367UGW_shMetricValue{color:var(--cm-warn)}._367UGW_shMetric[data-tone=ok] ._367UGW_shMetricValue{color:var(--cm-ok)}._367UGW_shSeverities{flex-wrap:wrap;align-items:center;gap:6px;display:flex}._367UGW_shSeverity{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-base);font-size:var(--cm-fs-meta);color:var(--dsw-alias-label-secondary);white-space:nowrap;border-radius:999px;align-items:center;gap:6px;padding:2px 8px;line-height:1.5;display:inline-flex}._367UGW_shSeverityCount{color:var(--dsw-alias-label-primary);font-variant-numeric:tabular-nums;font-weight:600}._367UGW_shSeverity[data-severity=blocksStartup],._367UGW_shSeverity[data-severity=unloadable]{border-color:color-mix(in srgb, var(--cm-error) 45%, transparent)}._367UGW_shSeverity[data-severity=nextRequestFails],._367UGW_shSeverity[data-severity=invisible]{border-color:color-mix(in srgb, var(--cm-warn) 45%, transparent)}._367UGW_shNotes{border-top:1px solid color-mix(in srgb, var(--dsw-alias-border-l1) 60%, transparent);flex-direction:column;gap:4px;padding-top:8px;display:flex}._367UGW_shSectionHead{flex-wrap:wrap;align-items:center;gap:8px;margin:0 0 10px;display:flex}._367UGW_shSectionHead ._367UGW_groupLabel{margin-bottom:0}._367UGW_shSectionTitle{font-size:var(--cm-fs-title);color:var(--dsw-alias-label-primary);font-weight:600;line-height:1.25}._367UGW_snapshotList._367UGW_shScroll{background:var(--dsw-alias-bg-base);padding:8px}._367UGW_shRow{border:1px solid var(--dsw-alias-border-l1);border-radius:var(--cm-r-3);background:var(--dsw-alias-bg-layer-2);border-left-width:2px;flex-direction:column;gap:4px;padding:8px 10px;display:flex}._367UGW_shRow[data-severity=blocksStartup],._367UGW_shRow[data-severity=unloadable]{border-left-color:var(--cm-error)}._367UGW_shRow[data-severity=nextRequestFails],._367UGW_shRow[data-severity=invisible]{border-left-color:var(--cm-warn)}._367UGW_shRow[data-severity=ok]{border-left-color:var(--cm-ok)}._367UGW_shRowTop{flex-wrap:wrap;align-items:center;gap:6px;display:flex}._367UGW_shRowId{text-overflow:ellipsis;white-space:nowrap;min-width:0;font-size:var(--cm-fs-table);color:var(--dsw-alias-label-primary);flex:auto;font-weight:600;overflow:hidden}._367UGW_shRowActions{flex:none;align-items:center;gap:6px;margin-left:auto;display:flex}._367UGW_shRowMeta{font-size:var(--cm-fs-meta);color:var(--dsw-alias-label-tertiary);flex-wrap:wrap;align-items:center;gap:6px;line-height:1.5;display:flex}._367UGW_shIssue{border-radius:var(--cm-r-1);background:color-mix(in srgb, var(--dsw-alias-label-tertiary) 12%, transparent);color:var(--dsw-alias-label-secondary);align-items:center;padding:2px 6px;display:inline-flex}._367UGW_shRowFacts{white-space:nowrap;font-variant-numeric:tabular-nums;flex:none;margin-left:auto}._367UGW_shMetaDot{color:var(--dsw-alias-label-tertiary);flex:none}._367UGW_shLines{flex-direction:column;gap:4px;display:flex}._367UGW_shPanel{border:1px solid var(--dsw-alias-border-l2);border-radius:var(--cm-r-3);background:var(--dsw-alias-bg-base);margin:0 0 10px;padding:10px 12px}._367UGW_shPanelHead{flex-wrap:wrap;align-items:center;gap:6px;margin-bottom:6px;display:flex}._367UGW_shPanelTitle{text-overflow:ellipsis;white-space:nowrap;min-width:0;font-size:var(--cm-fs-table);color:var(--dsw-alias-label-primary);flex:auto;font-weight:600;overflow:hidden}._367UGW_shCommands{border:1px solid var(--dsw-alias-border-l1);border-radius:var(--cm-r-3);background:var(--dsw-alias-bg-layer-2);margin:0 0 10px;padding:0;list-style:none;overflow:hidden}._367UGW_shCommand{border-bottom:1px solid color-mix(in srgb, var(--dsw-alias-border-l1) 50%, transparent);align-items:center;gap:8px;padding:8px 10px;display:flex}._367UGW_shCommand:last-child{border-bottom:none}._367UGW_shCommand code{overflow-wrap:anywhere;min-width:0;font-size:var(--cm-fs-meta);color:var(--dsw-alias-label-secondary);flex:auto}";
|
|
14449
14699
|
const tagId = "dsh-config-manager/config-manager.module.css";
|
|
14450
14700
|
if (typeof document !== "undefined" && document.querySelector("style[data-tag=\"dsh-config-manager/config-manager.module.css\"]") === null) {
|
|
14451
14701
|
const tag = document.createElement("style");
|
|
@@ -14455,522 +14705,528 @@ if (typeof document !== "undefined" && document.querySelector("style[data-tag=\"
|
|
|
14455
14705
|
document.head.appendChild(tag);
|
|
14456
14706
|
}
|
|
14457
14707
|
var config_manager_module_css_default = {
|
|
14458
|
-
"
|
|
14459
|
-
"
|
|
14460
|
-
"
|
|
14461
|
-
"conflictChoices": "_367UGW_conflictChoices",
|
|
14462
|
-
"runsCardActions": "_367UGW_runsCardActions",
|
|
14463
|
-
"sectionTitleRow": "_367UGW_sectionTitleRow",
|
|
14464
|
-
"sectionCount": "_367UGW_sectionCount",
|
|
14465
|
-
"diffPaneFill": "_367UGW_diffPaneFill",
|
|
14466
|
-
"diffNo": "_367UGW_diffNo",
|
|
14467
|
-
"logPanel": "_367UGW_logPanel",
|
|
14468
|
-
"progressBar": "_367UGW_progressBar",
|
|
14469
|
-
"restorePlan": "_367UGW_restorePlan",
|
|
14470
|
-
"spinnerLabel": "_367UGW_spinnerLabel",
|
|
14471
|
-
"paletteItemGroup": "_367UGW_paletteItemGroup",
|
|
14472
|
-
"rollbackGroupTitle": "_367UGW_rollbackGroupTitle",
|
|
14473
|
-
"skeletonRoot": "_367UGW_skeletonRoot",
|
|
14474
|
-
"shSeverity": "_367UGW_shSeverity",
|
|
14475
|
-
"sectionOptionRow": "_367UGW_sectionOptionRow",
|
|
14476
|
-
"taskHead": "_367UGW_taskHead",
|
|
14477
|
-
"categoryName": "_367UGW_categoryName",
|
|
14478
|
-
"tableWrap": "_367UGW_tableWrap",
|
|
14479
|
-
"viewEnter": "_367UGW_viewEnter",
|
|
14480
|
-
"progressPercent": "_367UGW_progressPercent",
|
|
14481
|
-
"diskUsageCard": "_367UGW_diskUsageCard",
|
|
14482
|
-
"snapshotPickerRow": "_367UGW_snapshotPickerRow",
|
|
14483
|
-
"diffNoDel": "_367UGW_diffNoDel",
|
|
14484
|
-
"rollbackFileRow": "_367UGW_rollbackFileRow",
|
|
14485
|
-
"paletteItem": "_367UGW_paletteItem",
|
|
14486
|
-
"modeTab": "_367UGW_modeTab",
|
|
14487
|
-
"runsLogTail": "_367UGW_runsLogTail",
|
|
14488
|
-
"pickerSubgroup": "_367UGW_pickerSubgroup",
|
|
14489
|
-
"progressLabel": "_367UGW_progressLabel",
|
|
14490
|
-
"noticeLine": "_367UGW_noticeLine",
|
|
14491
|
-
"dialogHeaderRow": "_367UGW_dialogHeaderRow",
|
|
14492
|
-
"navActions": "_367UGW_navActions",
|
|
14493
|
-
"warnText": "_367UGW_warnText",
|
|
14494
|
-
"previewChoiceRow": "_367UGW_previewChoiceRow",
|
|
14495
|
-
"pickerList": "_367UGW_pickerList",
|
|
14496
|
-
"sparseFill": "_367UGW_sparseFill",
|
|
14497
|
-
"rollbackPoint": "_367UGW_rollbackPoint",
|
|
14498
|
-
"rollbackGroupHead": "_367UGW_rollbackGroupHead",
|
|
14499
|
-
"pathRow": "_367UGW_pathRow",
|
|
14500
|
-
"errorAction": "_367UGW_errorAction",
|
|
14501
|
-
"cellActions": "_367UGW_cellActions",
|
|
14502
|
-
"reportScroll": "_367UGW_reportScroll",
|
|
14503
|
-
"factLabel": "_367UGW_factLabel",
|
|
14504
|
-
"iconBtn": "_367UGW_iconBtn",
|
|
14505
|
-
"viewBody": "_367UGW_viewBody",
|
|
14506
|
-
"shMetricLabel": "_367UGW_shMetricLabel",
|
|
14507
|
-
"reportList": "_367UGW_reportList",
|
|
14508
|
-
"chatFileExt": "_367UGW_chatFileExt",
|
|
14509
|
-
"factGrid": "_367UGW_factGrid",
|
|
14510
|
-
"snapshotPickerHint": "_367UGW_snapshotPickerHint",
|
|
14511
|
-
"diffFileHead": "_367UGW_diffFileHead",
|
|
14512
|
-
"diffHunkRow": "_367UGW_diffHunkRow",
|
|
14513
|
-
"authorRow": "_367UGW_authorRow",
|
|
14514
|
-
"dialogWide": "_367UGW_dialogWide",
|
|
14515
|
-
"nextStepsList": "_367UGW_nextStepsList",
|
|
14516
|
-
"dialogBody": "_367UGW_dialogBody",
|
|
14517
|
-
"marketFilterGrid": "_367UGW_marketFilterGrid",
|
|
14518
|
-
"modeHint": "_367UGW_modeHint",
|
|
14519
|
-
"diffStatTotal": "_367UGW_diffStatTotal",
|
|
14520
|
-
"chatFallbackBubble": "_367UGW_chatFallbackBubble",
|
|
14521
|
-
"diffStatDel": "_367UGW_diffStatDel",
|
|
14708
|
+
"dim": "_367UGW_dim",
|
|
14709
|
+
"chatFileName": "_367UGW_chatFileName",
|
|
14710
|
+
"diffNoColW3": "_367UGW_diffNoColW3",
|
|
14522
14711
|
"rollbackBox": "_367UGW_rollbackBox",
|
|
14523
|
-
"
|
|
14524
|
-
"
|
|
14525
|
-
"
|
|
14526
|
-
"syncChannelBody": "_367UGW_syncChannelBody",
|
|
14527
|
-
"spinnerTrack": "_367UGW_spinnerTrack",
|
|
14528
|
-
"tableCompact": "_367UGW_tableCompact",
|
|
14529
|
-
"statSeg": "_367UGW_statSeg",
|
|
14530
|
-
"taskBody": "_367UGW_taskBody",
|
|
14531
|
-
"progressBadge": "_367UGW_progressBadge",
|
|
14532
|
-
"runsLogLine": "_367UGW_runsLogLine",
|
|
14533
|
-
"fillCard": "_367UGW_fillCard",
|
|
14534
|
-
"kindTagInfo": "_367UGW_kindTagInfo",
|
|
14535
|
-
"skeletonShimmer": "_367UGW_skeletonShimmer",
|
|
14536
|
-
"profileRowMain": "_367UGW_profileRowMain",
|
|
14537
|
-
"historyRow": "_367UGW_historyRow",
|
|
14538
|
-
"marketReviewScroll": "_367UGW_marketReviewScroll",
|
|
14539
|
-
"chatBubbleText": "_367UGW_chatBubbleText",
|
|
14540
|
-
"resultScroll": "_367UGW_resultScroll",
|
|
14541
|
-
"rollbackScroll": "_367UGW_rollbackScroll",
|
|
14542
|
-
"activityKind": "_367UGW_activityKind",
|
|
14543
|
-
"severityError": "_367UGW_severityError",
|
|
14544
|
-
"rollbackPointTurn": "_367UGW_rollbackPointTurn",
|
|
14545
|
-
"historyGroup": "_367UGW_historyGroup",
|
|
14546
|
-
"skeletonTitle": "_367UGW_skeletonTitle",
|
|
14547
|
-
"infoHintIn": "_367UGW_infoHintIn",
|
|
14548
|
-
"shNotes": "_367UGW_shNotes",
|
|
14549
|
-
"reportProblemRow": "_367UGW_reportProblemRow",
|
|
14550
|
-
"profileRowTitle": "_367UGW_profileRowTitle",
|
|
14551
|
-
"libraryListState": "_367UGW_libraryListState",
|
|
14552
|
-
"dialogContentCenter": "_367UGW_dialogContentCenter",
|
|
14553
|
-
"factCell": "_367UGW_factCell",
|
|
14554
|
-
"cellTitle": "_367UGW_cellTitle",
|
|
14555
|
-
"activityTime": "_367UGW_activityTime",
|
|
14556
|
-
"num": "_367UGW_num",
|
|
14557
|
-
"sectionGrid": "_367UGW_sectionGrid",
|
|
14558
|
-
"navMore": "_367UGW_navMore",
|
|
14559
|
-
"rollbackWarnings": "_367UGW_rollbackWarnings",
|
|
14560
|
-
"dialogOut": "_367UGW_dialogOut",
|
|
14561
|
-
"consultScroll": "_367UGW_consultScroll",
|
|
14562
|
-
"previewScopeOff": "_367UGW_previewScopeOff",
|
|
14563
|
-
"artifactMain": "_367UGW_artifactMain",
|
|
14564
|
-
"selectOption": "_367UGW_selectOption",
|
|
14565
|
-
"paletteHint": "_367UGW_paletteHint",
|
|
14566
|
-
"statHealthAction": "_367UGW_statHealthAction",
|
|
14567
|
-
"card": "_367UGW_card",
|
|
14568
|
-
"navMeasure": "_367UGW_navMeasure",
|
|
14569
|
-
"groupLabel": "_367UGW_groupLabel",
|
|
14570
|
-
"kvRow": "_367UGW_kvRow",
|
|
14571
|
-
"diffFileStat": "_367UGW_diffFileStat",
|
|
14572
|
-
"navDot": "_367UGW_navDot",
|
|
14573
|
-
"diffNoColW6": "_367UGW_diffNoColW6",
|
|
14574
|
-
"artifactRowHead": "_367UGW_artifactRowHead",
|
|
14575
|
-
"libraryFilter": "_367UGW_libraryFilter",
|
|
14576
|
-
"errorList": "_367UGW_errorList",
|
|
14577
|
-
"taskPanelIn": "_367UGW_taskPanelIn",
|
|
14578
|
-
"selectMenuPortal": "_367UGW_selectMenuPortal",
|
|
14579
|
-
"pathValue": "_367UGW_pathValue",
|
|
14580
|
-
"runsCardHead": "_367UGW_runsCardHead",
|
|
14581
|
-
"runsCardTime": "_367UGW_runsCardTime",
|
|
14582
|
-
"shRowId": "_367UGW_shRowId",
|
|
14583
|
-
"spinnerWrap": "_367UGW_spinnerWrap",
|
|
14584
|
-
"rollbackFileStat": "_367UGW_rollbackFileStat",
|
|
14585
|
-
"runsCardTitle": "_367UGW_runsCardTitle",
|
|
14586
|
-
"historySections": "_367UGW_historySections",
|
|
14587
|
-
"maskIn": "_367UGW_maskIn",
|
|
14588
|
-
"rollbackLedger": "_367UGW_rollbackLedger",
|
|
14589
|
-
"profileRow": "_367UGW_profileRow",
|
|
14590
|
-
"sectionTitle": "_367UGW_sectionTitle",
|
|
14591
|
-
"infoValue": "_367UGW_infoValue",
|
|
14592
|
-
"rollbackLedgerMain": "_367UGW_rollbackLedgerMain",
|
|
14593
|
-
"chatAttachmentRow": "_367UGW_chatAttachmentRow",
|
|
14594
|
-
"shellNav": "_367UGW_shellNav",
|
|
14595
|
-
"historyScroll": "_367UGW_historyScroll",
|
|
14596
|
-
"skeletonTable": "_367UGW_skeletonTable",
|
|
14597
|
-
"reportSectionRow": "_367UGW_reportSectionRow",
|
|
14598
|
-
"diffTable": "_367UGW_diffTable",
|
|
14599
|
-
"diffStatAdd": "_367UGW_diffStatAdd",
|
|
14600
|
-
"stepperLabel": "_367UGW_stepperLabel",
|
|
14601
|
-
"reportText": "_367UGW_reportText",
|
|
14602
|
-
"diffFilePath": "_367UGW_diffFilePath",
|
|
14603
|
-
"chatEntryReference": "_367UGW_chatEntryReference",
|
|
14712
|
+
"rollbackFileIcon": "_367UGW_rollbackFileIcon",
|
|
14713
|
+
"taskHead": "_367UGW_taskHead",
|
|
14714
|
+
"snapshotRowName": "_367UGW_snapshotRowName",
|
|
14604
14715
|
"toastText": "_367UGW_toastText",
|
|
14605
|
-
"
|
|
14606
|
-
"
|
|
14607
|
-
"
|
|
14608
|
-
"
|
|
14716
|
+
"nextStepsGroup": "_367UGW_nextStepsGroup",
|
|
14717
|
+
"chatEntryRow": "_367UGW_chatEntryRow",
|
|
14718
|
+
"profileRowHeader": "_367UGW_profileRowHeader",
|
|
14719
|
+
"progressMeta": "_367UGW_progressMeta",
|
|
14720
|
+
"chatActionBtn": "_367UGW_chatActionBtn",
|
|
14721
|
+
"resultFooter": "_367UGW_resultFooter",
|
|
14722
|
+
"historyRowMain": "_367UGW_historyRowMain",
|
|
14723
|
+
"groupLabel": "_367UGW_groupLabel",
|
|
14609
14724
|
"skeletonCard": "_367UGW_skeletonCard",
|
|
14610
|
-
"
|
|
14611
|
-
"
|
|
14612
|
-
"
|
|
14613
|
-
"
|
|
14614
|
-
"
|
|
14615
|
-
"
|
|
14616
|
-
"
|
|
14617
|
-
"
|
|
14618
|
-
"
|
|
14619
|
-
"
|
|
14620
|
-
"
|
|
14621
|
-
"
|
|
14622
|
-
"
|
|
14623
|
-
"
|
|
14725
|
+
"actionRow": "_367UGW_actionRow",
|
|
14726
|
+
"pickerFooter": "_367UGW_pickerFooter",
|
|
14727
|
+
"selectRoot": "_367UGW_selectRoot",
|
|
14728
|
+
"shSeverity": "_367UGW_shSeverity",
|
|
14729
|
+
"shHeaderTrailing": "_367UGW_shHeaderTrailing",
|
|
14730
|
+
"rollbackPointsScroll": "_367UGW_rollbackPointsScroll",
|
|
14731
|
+
"shRowMeta": "_367UGW_shRowMeta",
|
|
14732
|
+
"skeletonLine": "_367UGW_skeletonLine",
|
|
14733
|
+
"stepperLabel": "_367UGW_stepperLabel",
|
|
14734
|
+
"toast": "_367UGW_toast",
|
|
14735
|
+
"activitySummary": "_367UGW_activitySummary",
|
|
14736
|
+
"statusProgress": "_367UGW_statusProgress",
|
|
14737
|
+
"shSeverities": "_367UGW_shSeverities",
|
|
14738
|
+
"paletteEmpty": "_367UGW_paletteEmpty",
|
|
14739
|
+
"marketFilterSearch": "_367UGW_marketFilterSearch",
|
|
14740
|
+
"snapshotRowText": "_367UGW_snapshotRowText",
|
|
14624
14741
|
"confirmItem": "_367UGW_confirmItem",
|
|
14625
|
-
"
|
|
14626
|
-
"
|
|
14627
|
-
"
|
|
14628
|
-
"
|
|
14629
|
-
"
|
|
14630
|
-
"
|
|
14631
|
-
"
|
|
14632
|
-
"
|
|
14633
|
-
"chatEntryRow": "_367UGW_chatEntryRow",
|
|
14742
|
+
"statSegDim": "_367UGW_statSegDim",
|
|
14743
|
+
"sourceRowHead": "_367UGW_sourceRowHead",
|
|
14744
|
+
"reportSectionRow": "_367UGW_reportSectionRow",
|
|
14745
|
+
"sectionSubtitle": "_367UGW_sectionSubtitle",
|
|
14746
|
+
"logPanel": "_367UGW_logPanel",
|
|
14747
|
+
"shRowFacts": "_367UGW_shRowFacts",
|
|
14748
|
+
"logScroll": "_367UGW_logScroll",
|
|
14749
|
+
"selectChevron": "_367UGW_selectChevron",
|
|
14634
14750
|
"activitySummaryText": "_367UGW_activitySummaryText",
|
|
14635
|
-
"
|
|
14636
|
-
"
|
|
14637
|
-
"
|
|
14638
|
-
"
|
|
14751
|
+
"logHeader": "_367UGW_logHeader",
|
|
14752
|
+
"activityRow": "_367UGW_activityRow",
|
|
14753
|
+
"activityTime": "_367UGW_activityTime",
|
|
14754
|
+
"diskUsageCard": "_367UGW_diskUsageCard",
|
|
14755
|
+
"toolRow": "_367UGW_toolRow",
|
|
14756
|
+
"pickerSubgroupName": "_367UGW_pickerSubgroupName",
|
|
14757
|
+
"stepper": "_367UGW_stepper",
|
|
14758
|
+
"rollbackFilePath": "_367UGW_rollbackFilePath",
|
|
14759
|
+
"restorePlanRowStatic": "_367UGW_restorePlanRowStatic",
|
|
14760
|
+
"shPanelHead": "_367UGW_shPanelHead",
|
|
14761
|
+
"pickerChildren": "_367UGW_pickerChildren",
|
|
14762
|
+
"infoHintBubble": "_367UGW_infoHintBubble",
|
|
14763
|
+
"taskPanel": "_367UGW_taskPanel",
|
|
14764
|
+
"chatFileMeta": "_367UGW_chatFileMeta",
|
|
14765
|
+
"kindTagWarn": "_367UGW_kindTagWarn",
|
|
14766
|
+
"profileRowName": "_367UGW_profileRowName",
|
|
14767
|
+
"previewScope": "_367UGW_previewScope",
|
|
14768
|
+
"conflictHead": "_367UGW_conflictHead",
|
|
14769
|
+
"shRow": "_367UGW_shRow",
|
|
14770
|
+
"reportWarningRow": "_367UGW_reportWarningRow",
|
|
14771
|
+
"toastGlyph": "_367UGW_toastGlyph",
|
|
14772
|
+
"runsLogLine": "_367UGW_runsLogLine",
|
|
14773
|
+
"dataTable": "_367UGW_dataTable",
|
|
14774
|
+
"cellTitle": "_367UGW_cellTitle",
|
|
14775
|
+
"cellMeta": "_367UGW_cellMeta",
|
|
14776
|
+
"warnList": "_367UGW_warnList",
|
|
14777
|
+
"sectionName": "_367UGW_sectionName",
|
|
14778
|
+
"progressBadgeSection": "_367UGW_progressBadgeSection",
|
|
14779
|
+
"artifactBadges": "_367UGW_artifactBadges",
|
|
14780
|
+
"navTab": "_367UGW_navTab",
|
|
14781
|
+
"rollbackSessionMeta": "_367UGW_rollbackSessionMeta",
|
|
14782
|
+
"skeletonBars": "_367UGW_skeletonBars",
|
|
14783
|
+
"dialogBodyScroll": "_367UGW_dialogBodyScroll",
|
|
14784
|
+
"reportBody": "_367UGW_reportBody",
|
|
14639
14785
|
"statusText": "_367UGW_statusText",
|
|
14640
|
-
"
|
|
14641
|
-
"
|
|
14642
|
-
"
|
|
14643
|
-
"
|
|
14644
|
-
"consultDimension": "_367UGW_consultDimension",
|
|
14645
|
-
"conflictId": "_367UGW_conflictId",
|
|
14646
|
-
"chatBubble": "_367UGW_chatBubble",
|
|
14786
|
+
"snapshotList": "_367UGW_snapshotList",
|
|
14787
|
+
"shSectionTitle": "_367UGW_shSectionTitle",
|
|
14788
|
+
"paletteInput": "_367UGW_paletteInput",
|
|
14789
|
+
"skeletonTitle": "_367UGW_skeletonTitle",
|
|
14647
14790
|
"modeTabs": "_367UGW_modeTabs",
|
|
14648
|
-
"
|
|
14649
|
-
"
|
|
14650
|
-
"
|
|
14651
|
-
"
|
|
14791
|
+
"optionsRow": "_367UGW_optionsRow",
|
|
14792
|
+
"libraryFilters": "_367UGW_libraryFilters",
|
|
14793
|
+
"progressBlock": "_367UGW_progressBlock",
|
|
14794
|
+
"skeletonTable": "_367UGW_skeletonTable",
|
|
14795
|
+
"wizardStepperRow": "_367UGW_wizardStepperRow",
|
|
14796
|
+
"fillCard": "_367UGW_fillCard",
|
|
14797
|
+
"pathOld": "_367UGW_pathOld",
|
|
14798
|
+
"inspectGroup": "_367UGW_inspectGroup",
|
|
14799
|
+
"diffNoAdd": "_367UGW_diffNoAdd",
|
|
14800
|
+
"badgeRow": "_367UGW_badgeRow",
|
|
14801
|
+
"shellMain": "_367UGW_shellMain",
|
|
14802
|
+
"artifactActions": "_367UGW_artifactActions",
|
|
14803
|
+
"sectionOptionRow": "_367UGW_sectionOptionRow",
|
|
14804
|
+
"rollbackRemoved": "_367UGW_rollbackRemoved",
|
|
14805
|
+
"profileRowTitle": "_367UGW_profileRowTitle",
|
|
14806
|
+
"rollbackScroll": "_367UGW_rollbackScroll",
|
|
14807
|
+
"shMetricValue": "_367UGW_shMetricValue",
|
|
14808
|
+
"toastViewport": "_367UGW_toastViewport",
|
|
14809
|
+
"selectOptionLabel": "_367UGW_selectOptionLabel",
|
|
14810
|
+
"skipList": "_367UGW_skipList",
|
|
14652
14811
|
"diffNoHead": "_367UGW_diffNoHead",
|
|
14653
|
-
"
|
|
14654
|
-
"
|
|
14655
|
-
"
|
|
14656
|
-
"runsWarnNoteDetail": "_367UGW_runsWarnNoteDetail",
|
|
14657
|
-
"progressDetail": "_367UGW_progressDetail",
|
|
14658
|
-
"segGroup": "_367UGW_segGroup",
|
|
14659
|
-
"toastGlyph": "_367UGW_toastGlyph",
|
|
14660
|
-
"radioLabel": "_367UGW_radioLabel",
|
|
14661
|
-
"sectionSubtitle": "_367UGW_sectionSubtitle",
|
|
14662
|
-
"updateVersionArrow": "_367UGW_updateVersionArrow",
|
|
14663
|
-
"reportHeadline": "_367UGW_reportHeadline",
|
|
14664
|
-
"historyMeta": "_367UGW_historyMeta",
|
|
14665
|
-
"reasonLine": "_367UGW_reasonLine",
|
|
14666
|
-
"activityCard": "_367UGW_activityCard",
|
|
14667
|
-
"pickerUnitName": "_367UGW_pickerUnitName",
|
|
14668
|
-
"pickerUnitNested": "_367UGW_pickerUnitNested",
|
|
14669
|
-
"stepperStep": "_367UGW_stepperStep",
|
|
14670
|
-
"activityRow": "_367UGW_activityRow",
|
|
14671
|
-
"rollbackSessionItem": "_367UGW_rollbackSessionItem",
|
|
14812
|
+
"compositionViewport": "_367UGW_compositionViewport",
|
|
14813
|
+
"rollbackLedgerMain": "_367UGW_rollbackLedgerMain",
|
|
14814
|
+
"sourcePaths": "_367UGW_sourcePaths",
|
|
14672
14815
|
"shSectionHead": "_367UGW_shSectionHead",
|
|
14673
|
-
"
|
|
14674
|
-
"
|
|
14816
|
+
"tableFixed": "_367UGW_tableFixed",
|
|
14817
|
+
"progressBarFailed": "_367UGW_progressBarFailed",
|
|
14818
|
+
"authorRow": "_367UGW_authorRow",
|
|
14819
|
+
"resultScroll": "_367UGW_resultScroll",
|
|
14820
|
+
"skeletonTableCell": "_367UGW_skeletonTableCell",
|
|
14821
|
+
"kvKey": "_367UGW_kvKey",
|
|
14822
|
+
"pathMappingList": "_367UGW_pathMappingList",
|
|
14823
|
+
"statusBar": "_367UGW_statusBar",
|
|
14824
|
+
"rollbackSessionId": "_367UGW_rollbackSessionId",
|
|
14825
|
+
"secretFields": "_367UGW_secretFields",
|
|
14826
|
+
"tableCompact": "_367UGW_tableCompact",
|
|
14827
|
+
"taskBody": "_367UGW_taskBody",
|
|
14675
14828
|
"sourceRow": "_367UGW_sourceRow",
|
|
14676
|
-
"
|
|
14677
|
-
"
|
|
14678
|
-
"
|
|
14679
|
-
"
|
|
14680
|
-
"
|
|
14681
|
-
"
|
|
14682
|
-
"
|
|
14683
|
-
"
|
|
14684
|
-
"
|
|
14685
|
-
"
|
|
14686
|
-
"
|
|
14687
|
-
"rowActions": "_367UGW_rowActions",
|
|
14688
|
-
"pickerFooter": "_367UGW_pickerFooter",
|
|
14689
|
-
"bannerSlot": "_367UGW_bannerSlot",
|
|
14690
|
-
"conflictLineValue": "_367UGW_conflictLineValue",
|
|
14691
|
-
"activitySummary": "_367UGW_activitySummary",
|
|
14692
|
-
"maskOut": "_367UGW_maskOut",
|
|
14693
|
-
"cellMain": "_367UGW_cellMain",
|
|
14694
|
-
"pathOld": "_367UGW_pathOld",
|
|
14695
|
-
"statSegDim": "_367UGW_statSegDim",
|
|
14696
|
-
"pickerRoot": "_367UGW_pickerRoot",
|
|
14697
|
-
"previewScope": "_367UGW_previewScope",
|
|
14829
|
+
"marketFilterGrid": "_367UGW_marketFilterGrid",
|
|
14830
|
+
"spinnerLabel": "_367UGW_spinnerLabel",
|
|
14831
|
+
"pickerUnit": "_367UGW_pickerUnit",
|
|
14832
|
+
"rollbackGroupUnit": "_367UGW_rollbackGroupUnit",
|
|
14833
|
+
"dialogMask": "_367UGW_dialogMask",
|
|
14834
|
+
"skipText": "_367UGW_skipText",
|
|
14835
|
+
"skeletonBar": "_367UGW_skeletonBar",
|
|
14836
|
+
"logJumpButton": "_367UGW_logJumpButton",
|
|
14837
|
+
"categoryItem": "_367UGW_categoryItem",
|
|
14838
|
+
"statusTask": "_367UGW_statusTask",
|
|
14839
|
+
"shScroll": "_367UGW_shScroll",
|
|
14698
14840
|
"rollbackSummary": "_367UGW_rollbackSummary",
|
|
14699
|
-
"
|
|
14700
|
-
"
|
|
14701
|
-
"
|
|
14702
|
-
"shRow": "_367UGW_shRow",
|
|
14703
|
-
"shCommands": "_367UGW_shCommands",
|
|
14704
|
-
"statusIndeterminate": "_367UGW_statusIndeterminate",
|
|
14841
|
+
"snapshotRowHeader": "_367UGW_snapshotRowHeader",
|
|
14842
|
+
"historySections": "_367UGW_historySections",
|
|
14843
|
+
"kindTagOk": "_367UGW_kindTagOk",
|
|
14705
14844
|
"artifactTitle": "_367UGW_artifactTitle",
|
|
14706
|
-
"
|
|
14707
|
-
"
|
|
14708
|
-
"
|
|
14709
|
-
"
|
|
14710
|
-
"
|
|
14711
|
-
"
|
|
14712
|
-
"
|
|
14713
|
-
"
|
|
14714
|
-
"
|
|
14715
|
-
"
|
|
14845
|
+
"navActions": "_367UGW_navActions",
|
|
14846
|
+
"statStrip": "_367UGW_statStrip",
|
|
14847
|
+
"previewScopeStats": "_367UGW_previewScopeStats",
|
|
14848
|
+
"pageEnter": "_367UGW_pageEnter",
|
|
14849
|
+
"actionRowTop": "_367UGW_actionRowTop",
|
|
14850
|
+
"num": "_367UGW_num",
|
|
14851
|
+
"rollbackDeleted": "_367UGW_rollbackDeleted",
|
|
14852
|
+
"chatEntryStack": "_367UGW_chatEntryStack",
|
|
14853
|
+
"fillViewport": "_367UGW_fillViewport",
|
|
14854
|
+
"pickerGroupTitle": "_367UGW_pickerGroupTitle",
|
|
14855
|
+
"kindTagInfo": "_367UGW_kindTagInfo",
|
|
14716
14856
|
"snapshotRowBadges": "_367UGW_snapshotRowBadges",
|
|
14717
|
-
"
|
|
14718
|
-
"
|
|
14719
|
-
"
|
|
14720
|
-
"
|
|
14721
|
-
"
|
|
14722
|
-
"
|
|
14723
|
-
"optionsCard": "_367UGW_optionsCard",
|
|
14724
|
-
"sectionRow": "_367UGW_sectionRow",
|
|
14725
|
-
"rollbackFileDir": "_367UGW_rollbackFileDir",
|
|
14726
|
-
"shIssue": "_367UGW_shIssue",
|
|
14727
|
-
"sourceRowHead": "_367UGW_sourceRowHead",
|
|
14857
|
+
"maskOut": "_367UGW_maskOut",
|
|
14858
|
+
"runsOptionTag": "_367UGW_runsOptionTag",
|
|
14859
|
+
"iconBtn": "_367UGW_iconBtn",
|
|
14860
|
+
"librarySearch": "_367UGW_librarySearch",
|
|
14861
|
+
"shMetrics": "_367UGW_shMetrics",
|
|
14862
|
+
"reportScroll": "_367UGW_reportScroll",
|
|
14728
14863
|
"errorLine": "_367UGW_errorLine",
|
|
14729
|
-
"
|
|
14864
|
+
"tableWrap": "_367UGW_tableWrap",
|
|
14730
14865
|
"reportProblemReason": "_367UGW_reportProblemReason",
|
|
14731
|
-
"
|
|
14732
|
-
"selectMenu": "_367UGW_selectMenu",
|
|
14733
|
-
"tableFixed": "_367UGW_tableFixed",
|
|
14734
|
-
"navTab": "_367UGW_navTab",
|
|
14735
|
-
"pickerToolbar": "_367UGW_pickerToolbar",
|
|
14736
|
-
"progressBarFailed": "_367UGW_progressBarFailed",
|
|
14737
|
-
"selectLabel": "_367UGW_selectLabel",
|
|
14738
|
-
"sourcePaths": "_367UGW_sourcePaths",
|
|
14739
|
-
"selectOptionLabel": "_367UGW_selectOptionLabel",
|
|
14740
|
-
"secretsList": "_367UGW_secretsList",
|
|
14741
|
-
"chatEntryTime": "_367UGW_chatEntryTime",
|
|
14742
|
-
"kindTagOk": "_367UGW_kindTagOk",
|
|
14743
|
-
"skeletonBlock": "_367UGW_skeletonBlock",
|
|
14744
|
-
"chatFileCard": "_367UGW_chatFileCard",
|
|
14745
|
-
"statusPulse": "_367UGW_statusPulse",
|
|
14746
|
-
"runsWarnNote": "_367UGW_runsWarnNote",
|
|
14747
|
-
"actionRowTop": "_367UGW_actionRowTop",
|
|
14748
|
-
"diffScroll": "_367UGW_diffScroll",
|
|
14749
|
-
"spinner": "_367UGW_spinner",
|
|
14750
|
-
"progressBlock": "_367UGW_progressBlock",
|
|
14751
|
-
"shRowActions": "_367UGW_shRowActions",
|
|
14752
|
-
"diffCellDel": "_367UGW_diffCellDel",
|
|
14753
|
-
"diffPane": "_367UGW_diffPane",
|
|
14754
|
-
"shSectionTitle": "_367UGW_shSectionTitle",
|
|
14755
|
-
"rollbackGroupUnit": "_367UGW_rollbackGroupUnit",
|
|
14756
|
-
"artifactBadges": "_367UGW_artifactBadges",
|
|
14757
|
-
"rollbackPointTop": "_367UGW_rollbackPointTop",
|
|
14758
|
-
"skeletonRow": "_367UGW_skeletonRow",
|
|
14759
|
-
"stepperConnector": "_367UGW_stepperConnector",
|
|
14760
|
-
"snapshotRowFacts": "_367UGW_snapshotRowFacts",
|
|
14761
|
-
"errorBanner": "_367UGW_errorBanner",
|
|
14762
|
-
"diffNoAdd": "_367UGW_diffNoAdd",
|
|
14763
|
-
"progressBarDone": "_367UGW_progressBarDone",
|
|
14764
|
-
"librarySearch": "_367UGW_librarySearch",
|
|
14765
|
-
"shSummary": "_367UGW_shSummary",
|
|
14766
|
-
"updateVersionTarget": "_367UGW_updateVersionTarget",
|
|
14767
|
-
"pathNew": "_367UGW_pathNew",
|
|
14768
|
-
"dialogCard": "_367UGW_dialogCard",
|
|
14769
|
-
"paletteList": "_367UGW_paletteList",
|
|
14770
|
-
"toastIn": "_367UGW_toastIn",
|
|
14771
|
-
"snapshotRowText": "_367UGW_snapshotRowText",
|
|
14772
|
-
"artifactExpand": "_367UGW_artifactExpand",
|
|
14773
|
-
"statusAction": "_367UGW_statusAction",
|
|
14774
|
-
"actionRow": "_367UGW_actionRow",
|
|
14866
|
+
"shPanel": "_367UGW_shPanel",
|
|
14775
14867
|
"progressIndeterminate": "_367UGW_progressIndeterminate",
|
|
14776
|
-
"
|
|
14777
|
-
"
|
|
14778
|
-
"
|
|
14779
|
-
"
|
|
14780
|
-
"
|
|
14781
|
-
"
|
|
14782
|
-
"cliCommand": "_367UGW_cliCommand",
|
|
14783
|
-
"restorePlanRow": "_367UGW_restorePlanRow",
|
|
14784
|
-
"reportDetails": "_367UGW_reportDetails",
|
|
14785
|
-
"restorePlanPath": "_367UGW_restorePlanPath",
|
|
14786
|
-
"conflictHead": "_367UGW_conflictHead",
|
|
14787
|
-
"spin": "_367UGW_spin",
|
|
14788
|
-
"aboutLinkRow": "_367UGW_aboutLinkRow",
|
|
14789
|
-
"statusMeta": "_367UGW_statusMeta",
|
|
14790
|
-
"pickerChevronSpacer": "_367UGW_pickerChevronSpacer",
|
|
14791
|
-
"groupHeader": "_367UGW_groupHeader",
|
|
14792
|
-
"statusProgress": "_367UGW_statusProgress",
|
|
14793
|
-
"artifactName": "_367UGW_artifactName",
|
|
14794
|
-
"planScroll": "_367UGW_planScroll",
|
|
14795
|
-
"updateNotesLoading": "_367UGW_updateNotesLoading",
|
|
14796
|
-
"snapshotRowHeader": "_367UGW_snapshotRowHeader",
|
|
14797
|
-
"conflictLineLabel": "_367UGW_conflictLineLabel",
|
|
14798
|
-
"infoHintBubble": "_367UGW_infoHintBubble",
|
|
14799
|
-
"marketReviewPage": "_367UGW_marketReviewPage",
|
|
14800
|
-
"fillViewport": "_367UGW_fillViewport",
|
|
14801
|
-
"collapse": "_367UGW_collapse",
|
|
14868
|
+
"diffCellAdd": "_367UGW_diffCellAdd",
|
|
14869
|
+
"runsCenter": "_367UGW_runsCenter",
|
|
14870
|
+
"diffPaneFill": "_367UGW_diffPaneFill",
|
|
14871
|
+
"tableScroll": "_367UGW_tableScroll",
|
|
14872
|
+
"formError": "_367UGW_formError",
|
|
14873
|
+
"profileRowMeta": "_367UGW_profileRowMeta",
|
|
14802
14874
|
"empty": "_367UGW_empty",
|
|
14803
|
-
"
|
|
14804
|
-
"
|
|
14805
|
-
"
|
|
14806
|
-
"
|
|
14807
|
-
"
|
|
14808
|
-
"
|
|
14809
|
-
"
|
|
14810
|
-
"
|
|
14811
|
-
"
|
|
14812
|
-
"
|
|
14813
|
-
"taskTitle": "_367UGW_taskTitle",
|
|
14814
|
-
"optionsRow": "_367UGW_optionsRow",
|
|
14815
|
-
"diffNoColW3": "_367UGW_diffNoColW3",
|
|
14816
|
-
"progressTrack": "_367UGW_progressTrack",
|
|
14817
|
-
"skeletonCards": "_367UGW_skeletonCards",
|
|
14818
|
-
"confirmScroll": "_367UGW_confirmScroll",
|
|
14819
|
-
"pullScroll": "_367UGW_pullScroll",
|
|
14820
|
-
"nextStepsGroup": "_367UGW_nextStepsGroup",
|
|
14821
|
-
"shMetricValue": "_367UGW_shMetricValue",
|
|
14822
|
-
"snapshotRowMain": "_367UGW_snapshotRowMain",
|
|
14823
|
-
"selectMenuIn": "_367UGW_selectMenuIn",
|
|
14824
|
-
"indet": "_367UGW_indet",
|
|
14875
|
+
"conflictChoices": "_367UGW_conflictChoices",
|
|
14876
|
+
"rollbackSessions": "_367UGW_rollbackSessions",
|
|
14877
|
+
"navDot": "_367UGW_navDot",
|
|
14878
|
+
"sourceRowMain": "_367UGW_sourceRowMain",
|
|
14879
|
+
"stepperDot": "_367UGW_stepperDot",
|
|
14880
|
+
"reportProblemHead": "_367UGW_reportProblemHead",
|
|
14881
|
+
"sectionTitle": "_367UGW_sectionTitle",
|
|
14882
|
+
"chatRawBlock": "_367UGW_chatRawBlock",
|
|
14883
|
+
"shSeverityCount": "_367UGW_shSeverityCount",
|
|
14884
|
+
"activityKind": "_367UGW_activityKind",
|
|
14825
14885
|
"shMetaDot": "_367UGW_shMetaDot",
|
|
14826
|
-
"
|
|
14827
|
-
"
|
|
14828
|
-
"
|
|
14829
|
-
"
|
|
14830
|
-
"
|
|
14886
|
+
"shCommand": "_367UGW_shCommand",
|
|
14887
|
+
"reportBlock": "_367UGW_reportBlock",
|
|
14888
|
+
"rollbackLedger": "_367UGW_rollbackLedger",
|
|
14889
|
+
"libraryCount": "_367UGW_libraryCount",
|
|
14890
|
+
"planScroll": "_367UGW_planScroll",
|
|
14831
14891
|
"updateVersionRow": "_367UGW_updateVersionRow",
|
|
14832
|
-
"
|
|
14833
|
-
"
|
|
14834
|
-
"
|
|
14835
|
-
"
|
|
14836
|
-
"
|
|
14837
|
-
"
|
|
14838
|
-
"
|
|
14839
|
-
"
|
|
14840
|
-
"
|
|
14841
|
-
"
|
|
14842
|
-
"
|
|
14843
|
-
"
|
|
14844
|
-
"
|
|
14845
|
-
"
|
|
14846
|
-
"
|
|
14847
|
-
"
|
|
14848
|
-
"
|
|
14849
|
-
"
|
|
14850
|
-
"shellMain": "_367UGW_shellMain",
|
|
14851
|
-
"conflictList": "_367UGW_conflictList",
|
|
14892
|
+
"rollbackPointActions": "_367UGW_rollbackPointActions",
|
|
14893
|
+
"rollbackFileList": "_367UGW_rollbackFileList",
|
|
14894
|
+
"shCommands": "_367UGW_shCommands",
|
|
14895
|
+
"categoryDesc": "_367UGW_categoryDesc",
|
|
14896
|
+
"sectionTitleRow": "_367UGW_sectionTitleRow",
|
|
14897
|
+
"logDetail": "_367UGW_logDetail",
|
|
14898
|
+
"artifactName": "_367UGW_artifactName",
|
|
14899
|
+
"ghostButton": "_367UGW_ghostButton",
|
|
14900
|
+
"shIssue": "_367UGW_shIssue",
|
|
14901
|
+
"artifactExpand": "_367UGW_artifactExpand",
|
|
14902
|
+
"spinnerArc": "_367UGW_spinnerArc",
|
|
14903
|
+
"shMetric": "_367UGW_shMetric",
|
|
14904
|
+
"restorePlanList": "_367UGW_restorePlanList",
|
|
14905
|
+
"skeletonCards": "_367UGW_skeletonCards",
|
|
14906
|
+
"badge": "_367UGW_badge",
|
|
14907
|
+
"logCounts": "_367UGW_logCounts",
|
|
14908
|
+
"activityRows": "_367UGW_activityRows",
|
|
14909
|
+
"diffStatDel": "_367UGW_diffStatDel",
|
|
14852
14910
|
"sourceRowName": "_367UGW_sourceRowName",
|
|
14853
|
-
"
|
|
14854
|
-
"
|
|
14855
|
-
"
|
|
14911
|
+
"chatFileIcon": "_367UGW_chatFileIcon",
|
|
14912
|
+
"updateVersionArrow": "_367UGW_updateVersionArrow",
|
|
14913
|
+
"runsCardTime": "_367UGW_runsCardTime",
|
|
14914
|
+
"progressBadgeCount": "_367UGW_progressBadgeCount",
|
|
14915
|
+
"pickerMore": "_367UGW_pickerMore",
|
|
14916
|
+
"conflictLineLabel": "_367UGW_conflictLineLabel",
|
|
14917
|
+
"sectionRow": "_367UGW_sectionRow",
|
|
14918
|
+
"logFilterButton": "_367UGW_logFilterButton",
|
|
14919
|
+
"reportText": "_367UGW_reportText",
|
|
14920
|
+
"progressBar": "_367UGW_progressBar",
|
|
14921
|
+
"shLines": "_367UGW_shLines",
|
|
14922
|
+
"rollbackPoint": "_367UGW_rollbackPoint",
|
|
14923
|
+
"rollbackFileDir": "_367UGW_rollbackFileDir",
|
|
14924
|
+
"runsCardTitle": "_367UGW_runsCardTitle",
|
|
14925
|
+
"hiddenFile": "_367UGW_hiddenFile",
|
|
14926
|
+
"pickerGroup": "_367UGW_pickerGroup",
|
|
14856
14927
|
"activityHeader": "_367UGW_activityHeader",
|
|
14857
|
-
"
|
|
14858
|
-
"
|
|
14859
|
-
"
|
|
14860
|
-
"
|
|
14861
|
-
"
|
|
14862
|
-
"
|
|
14863
|
-
"
|
|
14928
|
+
"statSeg": "_367UGW_statSeg",
|
|
14929
|
+
"factLabel": "_367UGW_factLabel",
|
|
14930
|
+
"diffScroll": "_367UGW_diffScroll",
|
|
14931
|
+
"chatBubbleText": "_367UGW_chatBubbleText",
|
|
14932
|
+
"snapshotRowMeta": "_367UGW_snapshotRowMeta",
|
|
14933
|
+
"shRowId": "_367UGW_shRowId",
|
|
14934
|
+
"activityCard": "_367UGW_activityCard",
|
|
14935
|
+
"diffStatAdd": "_367UGW_diffStatAdd",
|
|
14936
|
+
"spinner": "_367UGW_spinner",
|
|
14937
|
+
"choiceTitle": "_367UGW_choiceTitle",
|
|
14938
|
+
"headRow": "_367UGW_headRow",
|
|
14939
|
+
"rollbackToolbar": "_367UGW_rollbackToolbar",
|
|
14940
|
+
"bannerSlot": "_367UGW_bannerSlot",
|
|
14864
14941
|
"dialogHeader": "_367UGW_dialogHeader",
|
|
14865
|
-
"
|
|
14866
|
-
"
|
|
14867
|
-
"
|
|
14868
|
-
"
|
|
14869
|
-
"
|
|
14870
|
-
"
|
|
14942
|
+
"updateNotesLoading": "_367UGW_updateNotesLoading",
|
|
14943
|
+
"selectOption": "_367UGW_selectOption",
|
|
14944
|
+
"pickerTreeRow": "_367UGW_pickerTreeRow",
|
|
14945
|
+
"previewChoiceRow": "_367UGW_previewChoiceRow",
|
|
14946
|
+
"aboutLinkRow": "_367UGW_aboutLinkRow",
|
|
14947
|
+
"cliName": "_367UGW_cliName",
|
|
14871
14948
|
"kvValue": "_367UGW_kvValue",
|
|
14872
|
-
"
|
|
14873
|
-
"
|
|
14874
|
-
"
|
|
14875
|
-
"
|
|
14876
|
-
"
|
|
14877
|
-
"
|
|
14949
|
+
"taskPanelIn": "_367UGW_taskPanelIn",
|
|
14950
|
+
"snapshotPickerHint": "_367UGW_snapshotPickerHint",
|
|
14951
|
+
"marketReviewPage": "_367UGW_marketReviewPage",
|
|
14952
|
+
"artifactMain": "_367UGW_artifactMain",
|
|
14953
|
+
"activityTitle": "_367UGW_activityTitle",
|
|
14954
|
+
"progressPercent": "_367UGW_progressPercent",
|
|
14955
|
+
"shRowActions": "_367UGW_shRowActions",
|
|
14956
|
+
"diffHunkRow": "_367UGW_diffHunkRow",
|
|
14957
|
+
"shellNav": "_367UGW_shellNav",
|
|
14958
|
+
"dialogContentCenter": "_367UGW_dialogContentCenter",
|
|
14959
|
+
"conflictList": "_367UGW_conflictList",
|
|
14960
|
+
"paletteItemLabel": "_367UGW_paletteItemLabel",
|
|
14961
|
+
"historyTime": "_367UGW_historyTime",
|
|
14962
|
+
"chatEntryNotice": "_367UGW_chatEntryNotice",
|
|
14963
|
+
"logLine": "_367UGW_logLine",
|
|
14964
|
+
"chatBubble": "_367UGW_chatBubble",
|
|
14965
|
+
"warnText": "_367UGW_warnText",
|
|
14966
|
+
"marketFilterMeta": "_367UGW_marketFilterMeta",
|
|
14967
|
+
"checkboxRow": "_367UGW_checkboxRow",
|
|
14968
|
+
"navStrip": "_367UGW_navStrip",
|
|
14969
|
+
"detailLines": "_367UGW_detailLines",
|
|
14970
|
+
"toastIn": "_367UGW_toastIn",
|
|
14971
|
+
"pickerCount": "_367UGW_pickerCount",
|
|
14972
|
+
"rollbackPointNote": "_367UGW_rollbackPointNote",
|
|
14973
|
+
"restorePlanNote": "_367UGW_restorePlanNote",
|
|
14974
|
+
"viewEnter": "_367UGW_viewEnter",
|
|
14975
|
+
"field": "_367UGW_field",
|
|
14976
|
+
"libraryFilterCount": "_367UGW_libraryFilterCount",
|
|
14977
|
+
"statHealth": "_367UGW_statHealth",
|
|
14978
|
+
"restorePlanPath": "_367UGW_restorePlanPath",
|
|
14979
|
+
"artifactDetailInner": "_367UGW_artifactDetailInner",
|
|
14980
|
+
"pickerSubgroup": "_367UGW_pickerSubgroup",
|
|
14981
|
+
"diffFileHead": "_367UGW_diffFileHead",
|
|
14982
|
+
"historyRow": "_367UGW_historyRow",
|
|
14983
|
+
"card": "_367UGW_card",
|
|
14984
|
+
"libraryListState": "_367UGW_libraryListState",
|
|
14985
|
+
"dialogHeaderRow": "_367UGW_dialogHeaderRow",
|
|
14986
|
+
"progressBadge": "_367UGW_progressBadge",
|
|
14987
|
+
"navMoreRoot": "_367UGW_navMoreRoot",
|
|
14988
|
+
"segGroup": "_367UGW_segGroup",
|
|
14989
|
+
"conflictPrefix": "_367UGW_conflictPrefix",
|
|
14990
|
+
"dialogOut": "_367UGW_dialogOut",
|
|
14991
|
+
"restorePlanGroupHead": "_367UGW_restorePlanGroupHead",
|
|
14992
|
+
"diffTable": "_367UGW_diffTable",
|
|
14993
|
+
"secretsList": "_367UGW_secretsList",
|
|
14994
|
+
"aboutAuthor": "_367UGW_aboutAuthor",
|
|
14995
|
+
"chatEntryReference": "_367UGW_chatEntryReference",
|
|
14996
|
+
"dialogWide": "_367UGW_dialogWide",
|
|
14997
|
+
"historyScroll": "_367UGW_historyScroll",
|
|
14998
|
+
"logEmpty": "_367UGW_logEmpty",
|
|
14999
|
+
"errorAction": "_367UGW_errorAction",
|
|
15000
|
+
"chatFileExt": "_367UGW_chatFileExt",
|
|
14878
15001
|
"rollbackMetaDot": "_367UGW_rollbackMetaDot",
|
|
14879
|
-
"
|
|
14880
|
-
"
|
|
14881
|
-
"
|
|
14882
|
-
"logDetail": "_367UGW_logDetail",
|
|
14883
|
-
"reasonList": "_367UGW_reasonList",
|
|
14884
|
-
"skeletonBars": "_367UGW_skeletonBars",
|
|
14885
|
-
"chatEntryStack": "_367UGW_chatEntryStack",
|
|
14886
|
-
"groupList": "_367UGW_groupList",
|
|
14887
|
-
"selectRoot": "_367UGW_selectRoot",
|
|
14888
|
-
"runsOptionDesc": "_367UGW_runsOptionDesc",
|
|
14889
|
-
"pickerSubgroupName": "_367UGW_pickerSubgroupName",
|
|
14890
|
-
"compositionViewport": "_367UGW_compositionViewport",
|
|
14891
|
-
"rollbackPointMeta": "_367UGW_rollbackPointMeta",
|
|
14892
|
-
"libraryCount": "_367UGW_libraryCount",
|
|
14893
|
-
"runsOptionTag": "_367UGW_runsOptionTag",
|
|
15002
|
+
"diffCellDel": "_367UGW_diffCellDel",
|
|
15003
|
+
"pathNew": "_367UGW_pathNew",
|
|
15004
|
+
"spinnerTrack": "_367UGW_spinnerTrack",
|
|
14894
15005
|
"statusSpacer": "_367UGW_statusSpacer",
|
|
14895
|
-
"
|
|
14896
|
-
"
|
|
14897
|
-
"
|
|
14898
|
-
"
|
|
14899
|
-
"
|
|
14900
|
-
"
|
|
15006
|
+
"activityResultOk": "_367UGW_activityResultOk",
|
|
15007
|
+
"pathIssueKind": "_367UGW_pathIssueKind",
|
|
15008
|
+
"rollbackPointTop": "_367UGW_rollbackPointTop",
|
|
15009
|
+
"factGrid": "_367UGW_factGrid",
|
|
15010
|
+
"pickerUnitDetail": "_367UGW_pickerUnitDetail",
|
|
15011
|
+
"profileRowMain": "_367UGW_profileRowMain",
|
|
15012
|
+
"chatAttachmentRow": "_367UGW_chatAttachmentRow",
|
|
15013
|
+
"artifactMeta": "_367UGW_artifactMeta",
|
|
15014
|
+
"sectionGrid": "_367UGW_sectionGrid",
|
|
15015
|
+
"emptySteps": "_367UGW_emptySteps",
|
|
15016
|
+
"runsCardHead": "_367UGW_runsCardHead",
|
|
15017
|
+
"copyBtn": "_367UGW_copyBtn",
|
|
15018
|
+
"pickerRoot": "_367UGW_pickerRoot",
|
|
15019
|
+
"collapse": "_367UGW_collapse",
|
|
15020
|
+
"updateVersionTarget": "_367UGW_updateVersionTarget",
|
|
15021
|
+
"runsLogTail": "_367UGW_runsLogTail",
|
|
15022
|
+
"restorePlanChevron": "_367UGW_restorePlanChevron",
|
|
15023
|
+
"confirmScroll": "_367UGW_confirmScroll",
|
|
15024
|
+
"activityEmpty": "_367UGW_activityEmpty",
|
|
15025
|
+
"rollbackWarnings": "_367UGW_rollbackWarnings",
|
|
15026
|
+
"modeTab": "_367UGW_modeTab",
|
|
15027
|
+
"chatRawPre": "_367UGW_chatRawPre",
|
|
15028
|
+
"indet": "_367UGW_indet",
|
|
15029
|
+
"noticeSlot": "_367UGW_noticeSlot",
|
|
15030
|
+
"shSummary": "_367UGW_shSummary",
|
|
15031
|
+
"pickerList": "_367UGW_pickerList",
|
|
15032
|
+
"skeletonCaption": "_367UGW_skeletonCaption",
|
|
15033
|
+
"pickerChevronSpacer": "_367UGW_pickerChevronSpacer",
|
|
14901
15034
|
"conflictDetail": "_367UGW_conflictDetail",
|
|
15035
|
+
"groupHeader": "_367UGW_groupHeader",
|
|
15036
|
+
"reportHeadline": "_367UGW_reportHeadline",
|
|
15037
|
+
"pathRow": "_367UGW_pathRow",
|
|
15038
|
+
"groupNote": "_367UGW_groupNote",
|
|
15039
|
+
"reportProblemText": "_367UGW_reportProblemText",
|
|
15040
|
+
"maskIn": "_367UGW_maskIn",
|
|
15041
|
+
"chatEntryScope": "_367UGW_chatEntryScope",
|
|
15042
|
+
"diffStatTotal": "_367UGW_diffStatTotal",
|
|
15043
|
+
"progressBarDone": "_367UGW_progressBarDone",
|
|
15044
|
+
"collapseInner": "_367UGW_collapseInner",
|
|
15045
|
+
"runsWarnNote": "_367UGW_runsWarnNote",
|
|
15046
|
+
"chatEntryActions": "_367UGW_chatEntryActions",
|
|
15047
|
+
"pickerUnitName": "_367UGW_pickerUnitName",
|
|
15048
|
+
"rollbackAdded": "_367UGW_rollbackAdded",
|
|
15049
|
+
"factValue": "_367UGW_factValue",
|
|
15050
|
+
"pickerToolbar": "_367UGW_pickerToolbar",
|
|
15051
|
+
"groupCard": "_367UGW_groupCard",
|
|
15052
|
+
"errorBanner": "_367UGW_errorBanner",
|
|
15053
|
+
"runsWarnNoteDetail": "_367UGW_runsWarnNoteDetail",
|
|
15054
|
+
"runsCounts": "_367UGW_runsCounts",
|
|
15055
|
+
"libraryFilter": "_367UGW_libraryFilter",
|
|
15056
|
+
"dialogIn": "_367UGW_dialogIn",
|
|
14902
15057
|
"reportFooter": "_367UGW_reportFooter",
|
|
14903
|
-
"logHeader": "_367UGW_logHeader",
|
|
14904
|
-
"logJumpButton": "_367UGW_logJumpButton",
|
|
14905
|
-
"fieldLabel": "_367UGW_fieldLabel",
|
|
14906
|
-
"sectionTitleBlock": "_367UGW_sectionTitleBlock",
|
|
14907
|
-
"pickerAction": "_367UGW_pickerAction",
|
|
14908
15058
|
"dialogFooter": "_367UGW_dialogFooter",
|
|
14909
|
-
"
|
|
14910
|
-
"
|
|
14911
|
-
"groupCard": "_367UGW_groupCard",
|
|
14912
|
-
"itemEnter": "_367UGW_itemEnter",
|
|
14913
|
-
"skeletonLine": "_367UGW_skeletonLine",
|
|
14914
|
-
"marketFilterSearch": "_367UGW_marketFilterSearch",
|
|
14915
|
-
"choiceCard": "_367UGW_choiceCard",
|
|
14916
|
-
"rollbackTabIcon": "_367UGW_rollbackTabIcon",
|
|
15059
|
+
"navMeasure": "_367UGW_navMeasure",
|
|
15060
|
+
"paletteHint": "_367UGW_paletteHint",
|
|
14917
15061
|
"input": "_367UGW_input",
|
|
14918
|
-
"
|
|
14919
|
-
"
|
|
15062
|
+
"rollbackGroupHead": "_367UGW_rollbackGroupHead",
|
|
15063
|
+
"radioLabel": "_367UGW_radioLabel",
|
|
15064
|
+
"statusDot": "_367UGW_statusDot",
|
|
14920
15065
|
"snapshotRow": "_367UGW_snapshotRow",
|
|
14921
|
-
"
|
|
14922
|
-
"
|
|
14923
|
-
"
|
|
14924
|
-
"
|
|
14925
|
-
"
|
|
14926
|
-
"
|
|
14927
|
-
"
|
|
14928
|
-
"
|
|
14929
|
-
"
|
|
14930
|
-
"
|
|
14931
|
-
"
|
|
14932
|
-
"
|
|
14933
|
-
"
|
|
15066
|
+
"historySummary": "_367UGW_historySummary",
|
|
15067
|
+
"consultSection": "_367UGW_consultSection",
|
|
15068
|
+
"selectMenuIn": "_367UGW_selectMenuIn",
|
|
15069
|
+
"chatFileCard": "_367UGW_chatFileCard",
|
|
15070
|
+
"skeletonTableRow": "_367UGW_skeletonTableRow",
|
|
15071
|
+
"infoHintBtn": "_367UGW_infoHintBtn",
|
|
15072
|
+
"restorePlan": "_367UGW_restorePlan",
|
|
15073
|
+
"runsCardActions": "_367UGW_runsCardActions",
|
|
15074
|
+
"pickerUnitNested": "_367UGW_pickerUnitNested",
|
|
15075
|
+
"consultDimension": "_367UGW_consultDimension",
|
|
15076
|
+
"diffNoColW5": "_367UGW_diffNoColW5",
|
|
15077
|
+
"rollbackFileRow": "_367UGW_rollbackFileRow",
|
|
15078
|
+
"artifactList": "_367UGW_artifactList",
|
|
15079
|
+
"spinnerWrap": "_367UGW_spinnerWrap",
|
|
15080
|
+
"progressDetail": "_367UGW_progressDetail",
|
|
15081
|
+
"runsSummary": "_367UGW_runsSummary",
|
|
14934
15082
|
"shellContent": "_367UGW_shellContent",
|
|
14935
|
-
"
|
|
14936
|
-
"
|
|
14937
|
-
"
|
|
15083
|
+
"kindTag": "_367UGW_kindTag",
|
|
15084
|
+
"shNotes": "_367UGW_shNotes",
|
|
15085
|
+
"rollbackGroupTitle": "_367UGW_rollbackGroupTitle",
|
|
15086
|
+
"controlRow": "_367UGW_controlRow",
|
|
15087
|
+
"rollbackPointTurn": "_367UGW_rollbackPointTurn",
|
|
15088
|
+
"consultScroll": "_367UGW_consultScroll",
|
|
15089
|
+
"skeletonBlock": "_367UGW_skeletonBlock",
|
|
15090
|
+
"rollbackPointMeta": "_367UGW_rollbackPointMeta",
|
|
15091
|
+
"stepperStep": "_367UGW_stepperStep",
|
|
15092
|
+
"segItem": "_367UGW_segItem",
|
|
15093
|
+
"optionsCard": "_367UGW_optionsCard",
|
|
15094
|
+
"artifactRow": "_367UGW_artifactRow",
|
|
15095
|
+
"errorActionLabel": "_367UGW_errorActionLabel",
|
|
15096
|
+
"diffGroupToggle": "_367UGW_diffGroupToggle",
|
|
15097
|
+
"reportView": "_367UGW_reportView",
|
|
15098
|
+
"skeletonRoot": "_367UGW_skeletonRoot",
|
|
15099
|
+
"confirmItemHead": "_367UGW_confirmItemHead",
|
|
15100
|
+
"progressTrack": "_367UGW_progressTrack",
|
|
15101
|
+
"profileRow": "_367UGW_profileRow",
|
|
15102
|
+
"errorList": "_367UGW_errorList",
|
|
15103
|
+
"navMore": "_367UGW_navMore",
|
|
15104
|
+
"cellActions": "_367UGW_cellActions",
|
|
15105
|
+
"pagePad": "_367UGW_pagePad",
|
|
15106
|
+
"pathValue": "_367UGW_pathValue",
|
|
15107
|
+
"confirmItemDesc": "_367UGW_confirmItemDesc",
|
|
15108
|
+
"marketReviewScroll": "_367UGW_marketReviewScroll",
|
|
15109
|
+
"chatEntryTime": "_367UGW_chatEntryTime",
|
|
15110
|
+
"reportList": "_367UGW_reportList",
|
|
15111
|
+
"diffNoColW4": "_367UGW_diffNoColW4",
|
|
15112
|
+
"runsOptionDesc": "_367UGW_runsOptionDesc",
|
|
15113
|
+
"primaryButton": "_367UGW_primaryButton",
|
|
15114
|
+
"reportDetails": "_367UGW_reportDetails",
|
|
15115
|
+
"chatFallbackBubble": "_367UGW_chatFallbackBubble",
|
|
15116
|
+
"sparseFill": "_367UGW_sparseFill",
|
|
15117
|
+
"rollbackFileStat": "_367UGW_rollbackFileStat",
|
|
15118
|
+
"fieldLabel": "_367UGW_fieldLabel",
|
|
15119
|
+
"snapshotPickerRow": "_367UGW_snapshotPickerRow",
|
|
15120
|
+
"itemEnter": "_367UGW_itemEnter",
|
|
15121
|
+
"chatFileContent": "_367UGW_chatFileContent",
|
|
15122
|
+
"statusPulse": "_367UGW_statusPulse",
|
|
15123
|
+
"errorItem": "_367UGW_errorItem",
|
|
15124
|
+
"skeletonShimmer": "_367UGW_skeletonShimmer",
|
|
15125
|
+
"infoValue": "_367UGW_infoValue",
|
|
15126
|
+
"severityError": "_367UGW_severityError",
|
|
15127
|
+
"shPanelTitle": "_367UGW_shPanelTitle",
|
|
15128
|
+
"selectTrigger": "_367UGW_selectTrigger",
|
|
15129
|
+
"groupItems": "_367UGW_groupItems",
|
|
15130
|
+
"rowActions": "_367UGW_rowActions",
|
|
15131
|
+
"runsSummaryTitle": "_367UGW_runsSummaryTitle",
|
|
15132
|
+
"historyMeta": "_367UGW_historyMeta",
|
|
15133
|
+
"selectMenuPortal": "_367UGW_selectMenuPortal",
|
|
15134
|
+
"pickerModalBody": "_367UGW_pickerModalBody",
|
|
15135
|
+
"sectionSize": "_367UGW_sectionSize",
|
|
15136
|
+
"hint": "_367UGW_hint",
|
|
15137
|
+
"groupHintRow": "_367UGW_groupHintRow",
|
|
15138
|
+
"snapshotRowFacts": "_367UGW_snapshotRowFacts",
|
|
15139
|
+
"syncChannelBody": "_367UGW_syncChannelBody",
|
|
15140
|
+
"groupList": "_367UGW_groupList",
|
|
15141
|
+
"selectLabel": "_367UGW_selectLabel",
|
|
15142
|
+
"snapshotRowIssues": "_367UGW_snapshotRowIssues",
|
|
15143
|
+
"skeletonRow": "_367UGW_skeletonRow",
|
|
15144
|
+
"stepperConnector": "_367UGW_stepperConnector",
|
|
15145
|
+
"errorTitle": "_367UGW_errorTitle",
|
|
15146
|
+
"factCell": "_367UGW_factCell",
|
|
15147
|
+
"diffNoColW6": "_367UGW_diffNoColW6",
|
|
15148
|
+
"cellMain": "_367UGW_cellMain",
|
|
15149
|
+
"reasonLine": "_367UGW_reasonLine",
|
|
15150
|
+
"reasonList": "_367UGW_reasonList",
|
|
15151
|
+
"statusIndeterminate": "_367UGW_statusIndeterminate",
|
|
15152
|
+
"infoHintIn": "_367UGW_infoHintIn",
|
|
15153
|
+
"paletteList": "_367UGW_paletteList",
|
|
15154
|
+
"infoHint": "_367UGW_infoHint",
|
|
15155
|
+
"cellMetaNoteText": "_367UGW_cellMetaNoteText",
|
|
15156
|
+
"dialogBody": "_367UGW_dialogBody",
|
|
15157
|
+
"statusAction": "_367UGW_statusAction",
|
|
15158
|
+
"cliCommand": "_367UGW_cliCommand",
|
|
14938
15159
|
"artifactDetailWrap": "_367UGW_artifactDetailWrap",
|
|
14939
|
-
"
|
|
14940
|
-
"rollbackPointActions": "_367UGW_rollbackPointActions",
|
|
15160
|
+
"restorePlanStat": "_367UGW_restorePlanStat",
|
|
14941
15161
|
"inlineDiffBox": "_367UGW_inlineDiffBox",
|
|
14942
|
-
"
|
|
14943
|
-
"
|
|
14944
|
-
"
|
|
15162
|
+
"pullScroll": "_367UGW_pullScroll",
|
|
15163
|
+
"spin": "_367UGW_spin",
|
|
15164
|
+
"selectMenu": "_367UGW_selectMenu",
|
|
15165
|
+
"pickerGroupTitleName": "_367UGW_pickerGroupTitleName",
|
|
15166
|
+
"mono": "_367UGW_mono",
|
|
15167
|
+
"categoryName": "_367UGW_categoryName",
|
|
15168
|
+
"kvRow": "_367UGW_kvRow",
|
|
15169
|
+
"conflictLine": "_367UGW_conflictLine",
|
|
15170
|
+
"diffNoDel": "_367UGW_diffNoDel",
|
|
15171
|
+
"logEntry": "_367UGW_logEntry",
|
|
15172
|
+
"choiceCard": "_367UGW_choiceCard",
|
|
15173
|
+
"previewScopeOff": "_367UGW_previewScopeOff",
|
|
15174
|
+
"skipMeta": "_367UGW_skipMeta",
|
|
15175
|
+
"modeHint": "_367UGW_modeHint",
|
|
15176
|
+
"statHealthAction": "_367UGW_statHealthAction",
|
|
15177
|
+
"noticeLine": "_367UGW_noticeLine",
|
|
15178
|
+
"diskUsageScroll": "_367UGW_diskUsageScroll",
|
|
15179
|
+
"artifactRowHead": "_367UGW_artifactRowHead",
|
|
15180
|
+
"errorFooter": "_367UGW_errorFooter",
|
|
15181
|
+
"section": "_367UGW_section",
|
|
15182
|
+
"conflictItem": "_367UGW_conflictItem",
|
|
15183
|
+
"sourceList": "_367UGW_sourceList",
|
|
15184
|
+
"badgeHost": "_367UGW_badgeHost",
|
|
15185
|
+
"kindTagError": "_367UGW_kindTagError",
|
|
15186
|
+
"rollbackPoints": "_367UGW_rollbackPoints",
|
|
14945
15187
|
"statRow": "_367UGW_statRow",
|
|
14946
|
-
"
|
|
14947
|
-
"
|
|
14948
|
-
"
|
|
14949
|
-
"
|
|
14950
|
-
"
|
|
14951
|
-
"restorePlanNote": "_367UGW_restorePlanNote",
|
|
14952
|
-
"dialogIn": "_367UGW_dialogIn",
|
|
14953
|
-
"consultSection": "_367UGW_consultSection",
|
|
14954
|
-
"historyTime": "_367UGW_historyTime",
|
|
14955
|
-
"hint": "_367UGW_hint",
|
|
14956
|
-
"skeletonBar": "_367UGW_skeletonBar",
|
|
14957
|
-
"pickerGroup": "_367UGW_pickerGroup",
|
|
14958
|
-
"artifactMeta": "_367UGW_artifactMeta",
|
|
14959
|
-
"pagePad": "_367UGW_pagePad",
|
|
14960
|
-
"secretFields": "_367UGW_secretFields",
|
|
14961
|
-
"reportWarningRow": "_367UGW_reportWarningRow",
|
|
15188
|
+
"reportProblemRow": "_367UGW_reportProblemRow",
|
|
15189
|
+
"diffPane": "_367UGW_diffPane",
|
|
15190
|
+
"shMetricLabel": "_367UGW_shMetricLabel",
|
|
15191
|
+
"taskTitle": "_367UGW_taskTitle",
|
|
15192
|
+
"statusMeta": "_367UGW_statusMeta",
|
|
14962
15193
|
"dangerButton": "_367UGW_dangerButton",
|
|
14963
|
-
"
|
|
14964
|
-
"
|
|
14965
|
-
"
|
|
14966
|
-
"
|
|
14967
|
-
"
|
|
14968
|
-
"
|
|
15194
|
+
"paletteGroup": "_367UGW_paletteGroup",
|
|
15195
|
+
"runsOptionTitle": "_367UGW_runsOptionTitle",
|
|
15196
|
+
"conflictId": "_367UGW_conflictId",
|
|
15197
|
+
"conflictLineValue": "_367UGW_conflictLineValue",
|
|
15198
|
+
"diffCell": "_367UGW_diffCell",
|
|
15199
|
+
"runsOption": "_367UGW_runsOption",
|
|
15200
|
+
"snapshotRowMain": "_367UGW_snapshotRowMain",
|
|
15201
|
+
"restorePlanRow": "_367UGW_restorePlanRow",
|
|
15202
|
+
"paletteItem": "_367UGW_paletteItem",
|
|
15203
|
+
"conflictOptions": "_367UGW_conflictOptions",
|
|
15204
|
+
"historyGroup": "_367UGW_historyGroup",
|
|
15205
|
+
"sectionTitleBlock": "_367UGW_sectionTitleBlock",
|
|
15206
|
+
"dialogCard": "_367UGW_dialogCard",
|
|
15207
|
+
"rollbackSessionItem": "_367UGW_rollbackSessionItem",
|
|
15208
|
+
"viewBody": "_367UGW_viewBody",
|
|
14969
15209
|
"errorReason": "_367UGW_errorReason",
|
|
14970
|
-
"
|
|
14971
|
-
"
|
|
14972
|
-
"
|
|
14973
|
-
"
|
|
15210
|
+
"diffFilePath": "_367UGW_diffFilePath",
|
|
15211
|
+
"skipCode": "_367UGW_skipCode",
|
|
15212
|
+
"paletteItemGroup": "_367UGW_paletteItemGroup",
|
|
15213
|
+
"shRowTop": "_367UGW_shRowTop",
|
|
15214
|
+
"pickerAction": "_367UGW_pickerAction",
|
|
15215
|
+
"rollbackGroup": "_367UGW_rollbackGroup",
|
|
15216
|
+
"libraryFooter": "_367UGW_libraryFooter",
|
|
15217
|
+
"activityBadge": "_367UGW_activityBadge",
|
|
15218
|
+
"listHeaderRow": "_367UGW_listHeaderRow",
|
|
15219
|
+
"diffNo": "_367UGW_diffNo",
|
|
15220
|
+
"chatRawSummary": "_367UGW_chatRawSummary",
|
|
15221
|
+
"diffFileStat": "_367UGW_diffFileStat",
|
|
15222
|
+
"progressLabel": "_367UGW_progressLabel",
|
|
15223
|
+
"banner": "_367UGW_banner",
|
|
15224
|
+
"dialogClose": "_367UGW_dialogClose",
|
|
15225
|
+
"sectionCount": "_367UGW_sectionCount",
|
|
15226
|
+
"rollbackTabIcon": "_367UGW_rollbackTabIcon",
|
|
15227
|
+
"nextStepsList": "_367UGW_nextStepsList",
|
|
15228
|
+
"skipRow": "_367UGW_skipRow",
|
|
15229
|
+
"pickerOverlay": "_367UGW_pickerOverlay"
|
|
14974
15230
|
};
|
|
14975
15231
|
//#endregion
|
|
14976
15232
|
//#region src/client/common/Modal.tsx
|
|
@@ -15458,6 +15714,67 @@ function CommandPalette({ open, onClose, commands, ctx, onRun, t }) {
|
|
|
15458
15714
|
});
|
|
15459
15715
|
}
|
|
15460
15716
|
//#endregion
|
|
15717
|
+
//#region src/ui/badge-tone.ts
|
|
15718
|
+
/** 四态 → 原生 tone(ok=success / warn=warning / error=danger / info=info)。 */
|
|
15719
|
+
const BADGE_TONE = {
|
|
15720
|
+
ok: "success",
|
|
15721
|
+
info: "info",
|
|
15722
|
+
warn: "warning",
|
|
15723
|
+
error: "danger"
|
|
15724
|
+
};
|
|
15725
|
+
/** 取某个四态对应的原生 tone;未知输入按 info 处理(调用方给的是字面量联合,此为防御)。 */
|
|
15726
|
+
function badgeTone(kind) {
|
|
15727
|
+
return BADGE_TONE[kind] ?? "info";
|
|
15728
|
+
}
|
|
15729
|
+
//#endregion
|
|
15730
|
+
//#region src/client/common/host-primitives.ts
|
|
15731
|
+
let cached;
|
|
15732
|
+
/** 取一次宿主原语包(**每个进程只试一次**,失败记 null 不再重试)。 */
|
|
15733
|
+
function hostPrimitives() {
|
|
15734
|
+
if (cached !== void 0) return cached;
|
|
15735
|
+
cached = null;
|
|
15736
|
+
try {
|
|
15737
|
+
const loaded = typeof require === "function" ? require("@deepseek-ai/dsh-client-ui-primitives") : null;
|
|
15738
|
+
if (loaded !== null && typeof loaded === "object") cached = loaded;
|
|
15739
|
+
} catch {
|
|
15740
|
+
cached = null;
|
|
15741
|
+
}
|
|
15742
|
+
return cached;
|
|
15743
|
+
}
|
|
15744
|
+
/** DSH 自带的文件类型图标(拿不到回 null,调用方回落自己的画法)。 */
|
|
15745
|
+
function hostFileTypeIcon() {
|
|
15746
|
+
const icon = hostPrimitives()?.FileTypeIcon;
|
|
15747
|
+
if (typeof icon === "function" || typeof icon === "object") return icon;
|
|
15748
|
+
return null;
|
|
15749
|
+
}
|
|
15750
|
+
/**
|
|
15751
|
+
* DSH 自带的只读标签(徽章):与宿主同一颗组件、同一套调色板,拿不到回 null
|
|
15752
|
+
* (调用方回落本仓库的 `.badge[data-kind]` 样式)。
|
|
15753
|
+
*/
|
|
15754
|
+
function hostTag() {
|
|
15755
|
+
const tag = hostPrimitives()?.Tag;
|
|
15756
|
+
if (typeof tag === "function" || typeof tag === "object") return tag;
|
|
15757
|
+
return null;
|
|
15758
|
+
}
|
|
15759
|
+
/**
|
|
15760
|
+
* DSH 自带的图标组件(按导出名取;拿不到回 null ⇒ 调用方回落本仓库的图标)。
|
|
15761
|
+
*
|
|
15762
|
+
* 为什么按名字取而不是顶层 import:与 FileTypeIcon / projectUserText 同一条纪律(老宿主没有
|
|
15763
|
+
* 这份模块表,顶层 import 会把整个浏览器半打挂);**为什么要用宿主图标**(2026-10-17 用户要求):
|
|
15764
|
+
* 复制按钮在 DSH 里是 `IconCopyOutlineRegular → IconCheckOutlineRegular` 的**瞬时切换**(无形变动画),
|
|
15765
|
+
* 回退用 `IconRefreshOutlineRegular` —— 与动作行同框时字形、描边、视觉重量才与原生一致。
|
|
15766
|
+
*/
|
|
15767
|
+
function hostIcon(name) {
|
|
15768
|
+
const icon = hostPrimitives()?.[name];
|
|
15769
|
+
if (typeof icon === "function" || typeof icon === "object") return icon;
|
|
15770
|
+
return null;
|
|
15771
|
+
}
|
|
15772
|
+
/** DSH 自带的用户正文投影(把会话引用/斜杠名渲染成 chip;拿不到回 null)。 */
|
|
15773
|
+
function hostUserTextProjector() {
|
|
15774
|
+
const project = hostPrimitives()?.projectUserText;
|
|
15775
|
+
return typeof project === "function" ? project : null;
|
|
15776
|
+
}
|
|
15777
|
+
//#endregion
|
|
15461
15778
|
//#region src/client/common/ui.tsx
|
|
15462
15779
|
/**
|
|
15463
15780
|
* 统一按钮(primary=主操作 / ghost=次操作 / danger=危险操作)。
|
|
@@ -15546,10 +15863,30 @@ function StatusDot({ kind = "idle", pulse }) {
|
|
|
15546
15863
|
"aria-hidden": "true"
|
|
15547
15864
|
});
|
|
15548
15865
|
}
|
|
15549
|
-
/**
|
|
15866
|
+
/**
|
|
15867
|
+
* 状态徽章(info=业务色 / ok=成功 / warn=警告 / error=错误)。
|
|
15868
|
+
*
|
|
15869
|
+
* **优先复用宿主的 `Tag`**(DSH 原生只读标签,与设置页/插件清单里那枚同源):四态映射到
|
|
15870
|
+
* 原生调色板的 success / info / warning / danger(映射表在 `src/ui/badge-tone.ts`,可单测)。
|
|
15871
|
+
* 拿不到原生包(老宿主)时回落本仓库的 `.badge[data-kind]` —— 两条路径的语义由**同一张表**给出。
|
|
15872
|
+
* 原生 Tag 没有 title 入参:需要悬停提示时套一层 inline-flex 的 wrapper,不改变布局。
|
|
15873
|
+
*/
|
|
15550
15874
|
function Badge({ kind = "info", children, title }) {
|
|
15875
|
+
const DshTag = hostTag();
|
|
15876
|
+
if (DshTag !== null) {
|
|
15877
|
+
const tag = /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DshTag, {
|
|
15878
|
+
tone: badgeTone(kind),
|
|
15879
|
+
children
|
|
15880
|
+
});
|
|
15881
|
+
return title === void 0 ? tag : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
15882
|
+
className: config_manager_module_css_default.badgeHost,
|
|
15883
|
+
title,
|
|
15884
|
+
children: tag
|
|
15885
|
+
});
|
|
15886
|
+
}
|
|
15551
15887
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
15552
|
-
className:
|
|
15888
|
+
className: config_manager_module_css_default.badge,
|
|
15889
|
+
"data-kind": kind,
|
|
15553
15890
|
title,
|
|
15554
15891
|
children
|
|
15555
15892
|
});
|
|
@@ -16129,20 +16466,20 @@ const zh$4 = {
|
|
|
16129
16466
|
"section.settings": "设置",
|
|
16130
16467
|
"section.ui": "UI 偏好",
|
|
16131
16468
|
"section.providers": "Provider 与模型",
|
|
16132
|
-
"section.plugins": "
|
|
16469
|
+
"section.plugins": "插件清单",
|
|
16133
16470
|
"section.mcp": "MCP 服务器",
|
|
16134
16471
|
"section.prompts": "提示词",
|
|
16135
16472
|
"section.skills": "技能",
|
|
16136
16473
|
"section.agentPresets": "Agent 预设",
|
|
16137
16474
|
"section.agentInstructions": "全局指令",
|
|
16138
16475
|
"section.workspaces": "工作区",
|
|
16139
|
-
"section.pluginFiles": "
|
|
16476
|
+
"section.pluginFiles": "插件散落配置",
|
|
16140
16477
|
"section.credentialsStatus": "凭据状态",
|
|
16141
16478
|
"section.secrets": "密钥",
|
|
16142
16479
|
"section.sessions": "历史会话",
|
|
16143
|
-
"section.self": "
|
|
16144
|
-
"section.pluginData": "
|
|
16145
|
-
"section.pluginAssets": "
|
|
16480
|
+
"section.self": "配置管理器设置",
|
|
16481
|
+
"section.pluginData": "插件数据目录",
|
|
16482
|
+
"section.pluginAssets": "插件大文件",
|
|
16146
16483
|
"view.about": "关于",
|
|
16147
16484
|
"about.snippet.environment": "### 环境 / Environment",
|
|
16148
16485
|
"about.releaseNotes.rateLimited": "GitHub API 速率限制(Rate limit exceeded),请稍后再试或直接在 GitHub 上查看。",
|
|
@@ -16282,6 +16619,26 @@ const zh$4 = {
|
|
|
16282
16619
|
"picker.sensitive": "敏感",
|
|
16283
16620
|
"picker.showAll": "显示全部(共 {count} 条)",
|
|
16284
16621
|
"picker.summaryImport": "将导入 {sections} 个分区 · {units} 个条目",
|
|
16622
|
+
"picker.pluginRoot": "插件",
|
|
16623
|
+
"picker.pluginLeafPlugin": "插件清单条目",
|
|
16624
|
+
"picker.pluginLeafConfig": "数据目录(配置)",
|
|
16625
|
+
"picker.pluginLeafAssets": "大文件(壁纸 / 数据库)",
|
|
16626
|
+
"picker.pluginAreaUnread": "未读取",
|
|
16627
|
+
"picker.pluginAreaAbsent": "无内容",
|
|
16628
|
+
"picker.pluginViewEmpty": "插件清单还没读到,先读取「插件」分区。",
|
|
16629
|
+
"picker.bucketPlugins": "插件分区的其他条目(补丁行 / pnpm-workspace.yaml)",
|
|
16630
|
+
"picker.bucketLooseFiles": "未归属到插件的配置(~/.dsh 根)",
|
|
16631
|
+
"picker.bucketHint": "这些条目没有可证明的插件归属,不猜;展开可逐条勾选。",
|
|
16632
|
+
"picker.groupHint.extensions": "这一组里的插件分区合并成一棵按插件分组的树:默认只显示一个「插件」区块,展开它才列出各个插件,插件名下面是它的清单条目、数据目录与大文件。只显示能证明的归属(内置来源表 + 插件自述 dsh.dataDirs)——「插件散落配置」没有包名信息,因此留在「未归属」里;带「设备相关」的分区默认不勾选,跨设备导入时可能不适用。",
|
|
16633
|
+
"group.general": "通用",
|
|
16634
|
+
"group.ai": "AI",
|
|
16635
|
+
"group.extensions": "插件与扩展",
|
|
16636
|
+
"group.mcp": "MCP / 工具",
|
|
16637
|
+
"group.customization": "定制",
|
|
16638
|
+
"group.automation": "自动化",
|
|
16639
|
+
"group.workspace": "工作区",
|
|
16640
|
+
"group.ui": "界面",
|
|
16641
|
+
"group.optional": "可选数据",
|
|
16285
16642
|
"import.nothingSelected": "当前没有勾选任何要导入的内容,请把需要导入的分区或条目勾上。",
|
|
16286
16643
|
"import.excludedByUser": "本次有 {count} 项被你取消勾选:未导入,也未进快照。",
|
|
16287
16644
|
"import.consult.hint": "只读分析:先看结论与依据,确认后再选择要导入的内容。",
|
|
@@ -17007,20 +17364,20 @@ const en$4 = {
|
|
|
17007
17364
|
"section.settings": "Settings",
|
|
17008
17365
|
"section.ui": "UI Preferences",
|
|
17009
17366
|
"section.providers": "Providers & Models",
|
|
17010
|
-
"section.plugins": "
|
|
17367
|
+
"section.plugins": "Plugin list",
|
|
17011
17368
|
"section.mcp": "MCP Servers",
|
|
17012
17369
|
"section.prompts": "Prompts",
|
|
17013
17370
|
"section.skills": "Skills",
|
|
17014
17371
|
"section.agentPresets": "Agent Presets",
|
|
17015
17372
|
"section.agentInstructions": "Agent Instructions",
|
|
17016
17373
|
"section.workspaces": "Workspaces",
|
|
17017
|
-
"section.pluginFiles": "
|
|
17374
|
+
"section.pluginFiles": "Plugin config files",
|
|
17018
17375
|
"section.credentialsStatus": "Credentials Status",
|
|
17019
17376
|
"section.secrets": "Secrets",
|
|
17020
17377
|
"section.sessions": "Sessions",
|
|
17021
|
-
"section.self": "
|
|
17022
|
-
"section.pluginData": "
|
|
17023
|
-
"section.pluginAssets": "
|
|
17378
|
+
"section.self": "Config Manager settings",
|
|
17379
|
+
"section.pluginData": "Plugin data dirs",
|
|
17380
|
+
"section.pluginAssets": "Plugin large files",
|
|
17024
17381
|
"view.about": "About",
|
|
17025
17382
|
"about.snippet.environment": "### Environment",
|
|
17026
17383
|
"about.releaseNotes.rateLimited": "GitHub API rate limit exceeded — please try again later, or view the release notes directly on GitHub.",
|
|
@@ -17160,6 +17517,26 @@ const en$4 = {
|
|
|
17160
17517
|
"picker.sensitive": "Sensitive",
|
|
17161
17518
|
"picker.showAll": "Show all ({count})",
|
|
17162
17519
|
"picker.summaryImport": "Will import {sections} section(s) · {units} item(s)",
|
|
17520
|
+
"picker.pluginRoot": "Plugins",
|
|
17521
|
+
"picker.pluginLeafPlugin": "Plugin list entry",
|
|
17522
|
+
"picker.pluginLeafConfig": "Data dir (config)",
|
|
17523
|
+
"picker.pluginLeafAssets": "Large files (wallpapers / databases)",
|
|
17524
|
+
"picker.pluginAreaUnread": "Not read yet",
|
|
17525
|
+
"picker.pluginAreaAbsent": "No content",
|
|
17526
|
+
"picker.pluginViewEmpty": "The plugin list has not been read yet — read the \"Plugins\" section first.",
|
|
17527
|
+
"picker.bucketPlugins": "Other entries of the plugins section (patch lines / pnpm-workspace.yaml)",
|
|
17528
|
+
"picker.bucketLooseFiles": "Config not attributable to a plugin (~/.dsh root)",
|
|
17529
|
+
"picker.bucketHint": "These entries have no provable plugin ownership — we never guess; expand to tick them one by one.",
|
|
17530
|
+
"picker.groupHint.extensions": "The plugin sections in this group are merged into one tree grouped by plugin: by default you only see a single “Plugins” block — expand it to list the plugins, each with its list entry, data dirs and large files. Only provable ownership is shown (built-in source table + plugins that declare dsh.dataDirs) — ‘Plugin config files’ carries no package name and therefore stays under \"unowned\"; device-specific sections are unchecked by default and may not apply on another machine.",
|
|
17531
|
+
"group.general": "General",
|
|
17532
|
+
"group.ai": "AI",
|
|
17533
|
+
"group.extensions": "Extensions",
|
|
17534
|
+
"group.mcp": "MCP / Tools",
|
|
17535
|
+
"group.customization": "Customization",
|
|
17536
|
+
"group.automation": "Automation",
|
|
17537
|
+
"group.workspace": "Workspace",
|
|
17538
|
+
"group.ui": "UI",
|
|
17539
|
+
"group.optional": "Optional Data",
|
|
17163
17540
|
"import.nothingSelected": "Nothing is selected to import — tick the sections or items you want to import.",
|
|
17164
17541
|
"import.excludedByUser": "{count} item(s) were deselected: neither imported nor snapshotted.",
|
|
17165
17542
|
"import.consult.hint": "Read-only analysis: review the verdict and its evidence first, then choose what to import.",
|
|
@@ -22701,6 +23078,28 @@ function kindLabel(kindKey, t) {
|
|
|
22701
23078
|
*/
|
|
22702
23079
|
/** 单元名显示长度上限(配合 .pickerUnitName 的 CSS 省略做兜底;UI-16) */
|
|
22703
23080
|
const UNIT_NAME_MAX = 44;
|
|
23081
|
+
/**
|
|
23082
|
+
* 「插件」一级区块在展开态表里的键(与插件包名、`bucket:<分区>` 共用 `expandedPlugins` 这张表)。
|
|
23083
|
+
* 默认折叠 —— 用户要求「所有插件收在一个叫插件的区块里,展开后才出现」。
|
|
23084
|
+
*/
|
|
23085
|
+
const PLUGIN_ROOT_KEY = "plugin-root";
|
|
23086
|
+
/**
|
|
23087
|
+
* 分组标题的字典键(与 `ui/types.ts` 的 EXPORT_GROUPS 一一对应)。
|
|
23088
|
+
*
|
|
23089
|
+
* **顺序不在这里**:顺序由调用方给的节点顺序决定(宿主目录已按 EXPORT_GROUPS 排好),
|
|
23090
|
+
* 本表只负责「id → 本地化文案」这一件事(否则中英文界面会漂移)。
|
|
23091
|
+
*/
|
|
23092
|
+
const GROUP_TITLE_KEY = {
|
|
23093
|
+
general: "group.general",
|
|
23094
|
+
ai: "group.ai",
|
|
23095
|
+
extensions: "group.extensions",
|
|
23096
|
+
mcp: "group.mcp",
|
|
23097
|
+
customization: "group.customization",
|
|
23098
|
+
automation: "group.automation",
|
|
23099
|
+
workspace: "group.workspace",
|
|
23100
|
+
ui: "group.ui",
|
|
23101
|
+
optional: "group.optional"
|
|
23102
|
+
};
|
|
22704
23103
|
/** 单元列表容器 id(展开按钮的 aria-controls 指向它;UI-22) */
|
|
22705
23104
|
function unitsId(section) {
|
|
22706
23105
|
return `picker-units-${section}`;
|
|
@@ -22721,7 +23120,30 @@ function ContentPicker({ nodes, value, onChange, t, sectionLabel, loading = fals
|
|
|
22721
23120
|
* 分组行的勾选框也照常可用(不必先展开就能整组选/取消)。
|
|
22722
23121
|
*/
|
|
22723
23122
|
const [expandedGroups, setExpandedGroups] = (0, react.useState)({});
|
|
23123
|
+
/**
|
|
23124
|
+
* 「按插件看」的展开态(键 = 插件包名,或 \`bucket:<分区 id>\`)。
|
|
23125
|
+
* 默认全部折叠 —— 展开插件节点时才去读它涉及的 pluginData / pluginAssets 清单(惰性,见渲染处)。
|
|
23126
|
+
*/
|
|
23127
|
+
const [expandedPlugins, setExpandedPlugins] = (0, react.useState)({});
|
|
23128
|
+
/**
|
|
23129
|
+
* 待补勾队列(键 = 「插件」一级区块或某个插件名)。
|
|
23130
|
+
*
|
|
23131
|
+
* 为什么需要它:分区清单是**惰性**读取的 —— 勾一级区块/插件时,它名下还有区域没读到(unread),
|
|
23132
|
+
* 那些单元此刻勾不上。若就此结束,用户会以为「全带上了」,实际包里少了数据目录/大文件。
|
|
23133
|
+
* 所以:先勾已知的 + 触发读取 + 入队;清单到货后(nodes 变化)自动补齐并出队。
|
|
23134
|
+
*/
|
|
23135
|
+
const [pendingChecks, setPendingChecks] = (0, react.useState)([]);
|
|
22724
23136
|
const visible = (0, react.useMemo)(() => filterSections(nodes, query), [nodes, query]);
|
|
23137
|
+
/** 「按插件看」的树:同一份 nodes 的第二个投影(纯函数在 src/ui/selection-model.ts) */
|
|
23138
|
+
/** 「按插件看」的完整树(无搜索过滤;纯函数在 src/ui/selection-model.ts) */
|
|
23139
|
+
const fullTree = (0, react.useMemo)(() => pluginTree(nodes), [nodes]);
|
|
23140
|
+
const filteredTree = (0, react.useMemo)(() => filterPluginTree(fullTree, query), [fullTree, query]);
|
|
23141
|
+
/**
|
|
23142
|
+
* 搜索把树过滤空时**回落到完整树**:分区名命中(如搜「插件数据目录」)应当仍能看到这一组,
|
|
23143
|
+
* 否则用户会在组标题下面看到一句「没有匹配」,而组里的分区明明就在那里。
|
|
23144
|
+
*/
|
|
23145
|
+
const tree = filteredTree.entries.length === 0 && filteredTree.buckets.every((b) => b.units.length === 0) ? fullTree : filteredTree;
|
|
23146
|
+
const firstTreeSection = visible.filter((n) => isPluginTreeSection(n.section)).map((n) => n.section)[0];
|
|
22725
23147
|
const summary = pickerSummary(value, nodes);
|
|
22726
23148
|
/**
|
|
22727
23149
|
* 未读到清单的分区数(在途 + 失败,去重;G-02):> 0 时 footer 合计必须标注
|
|
@@ -22743,6 +23165,422 @@ function ContentPicker({ nodes, value, onChange, t, sectionLabel, loading = fals
|
|
|
22743
23165
|
};
|
|
22744
23166
|
/** 该分区属于哪一侧(决定联动方向):会话侧 / 工作区侧 / 其它(两条都跑)。 */
|
|
22745
23167
|
const focusOf = (section) => section === "sessions" ? "sessions" : section === "workspaces" ? "workspaces" : "both";
|
|
23168
|
+
/**
|
|
23169
|
+
* 待补勾:清单到货后把「勾一级区块/插件时还没读到」的单元补齐(见 pendingChecks 的注释)。
|
|
23170
|
+
*
|
|
23171
|
+
* 收敛判据是「该节点名下已无 unread 叶子」;只要还在读就一直排队,到齐后补一次并出队。
|
|
23172
|
+
* 幂等:补齐结果与当前选择等价时不写库(sameSelection),避免自激渲染。
|
|
23173
|
+
*/
|
|
23174
|
+
(0, react.useEffect)(() => {
|
|
23175
|
+
if (pendingChecks.length === 0) return;
|
|
23176
|
+
const { selection, remaining } = applyPluginPendingChecks(value, nodes, tree, pendingChecks);
|
|
23177
|
+
setPendingChecks(remaining);
|
|
23178
|
+
if (!sameSelection(selection, value)) commit(selection);
|
|
23179
|
+
}, [
|
|
23180
|
+
pendingChecks,
|
|
23181
|
+
tree,
|
|
23182
|
+
nodes,
|
|
23183
|
+
value
|
|
23184
|
+
]);
|
|
23185
|
+
/** 叶子的种类文案(模型不出文案;i18n 铁律)。 */
|
|
23186
|
+
const leafKindText = (kind) => kind === "plugin" ? t("picker.pluginLeafPlugin") : kind === "config" ? t("picker.pluginLeafConfig") : t("picker.pluginLeafAssets");
|
|
23187
|
+
/**
|
|
23188
|
+
* 桶的标题文案(无法归属到具体插件的整块分区 —— 不猜归属的结果必须显式说出来)。
|
|
23189
|
+
*
|
|
23190
|
+
* 只有两个桶:插件分区里的补丁行 / pnpm-workspace.yaml,以及 pluginFiles。两者都**不是插件**,
|
|
23191
|
+
* 因此不放进「插件」一级区块里。缺省回落分区显示名(新增桶时不会渲染出裸 key)。
|
|
23192
|
+
*/
|
|
23193
|
+
const bucketLabel = (section) => section === "plugins" ? t("picker.bucketPlugins") : section === "pluginFiles" ? t("picker.bucketLooseFiles") : label(section);
|
|
23194
|
+
/**
|
|
23195
|
+
* 单个单元行(**唯一实现**:「按分区看」的单元与「按插件看」的桶共用同一个渲染)。
|
|
23196
|
+
*
|
|
23197
|
+
* G-01:单元名与 detail 都是**宿主下发的文本**(导入侧来自备份包内的单元名/会话名),
|
|
23198
|
+
* 必须同等待遇 —— 显示文本与 title 都先过 redact,且**先脱敏、后省略**(反过来的话,
|
|
23199
|
+
* 被截断的密钥不再匹配值形状模式而漏网)。
|
|
23200
|
+
*/
|
|
23201
|
+
const renderUnitRow = (node, u, nested) => {
|
|
23202
|
+
const safeLabel = redact(u.label);
|
|
23203
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
23204
|
+
className: nested ? config_manager_module_css_default.pickerUnit + " " + config_manager_module_css_default.pickerUnitNested : config_manager_module_css_default.pickerUnit,
|
|
23205
|
+
children: [nested && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
23206
|
+
className: config_manager_module_css_default.pickerChevronSpacer,
|
|
23207
|
+
"aria-hidden": "true"
|
|
23208
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Checkbox, {
|
|
23209
|
+
checked: unitChecked(value, node.section, u.id),
|
|
23210
|
+
onChange: (checked) => {
|
|
23211
|
+
commit(toggleUnit(value, nodes, u.id, checked), focusOf(node.section), {
|
|
23212
|
+
unitId: u.id,
|
|
23213
|
+
checked
|
|
23214
|
+
});
|
|
23215
|
+
},
|
|
23216
|
+
label: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
23217
|
+
className: config_manager_module_css_default.categoryItem,
|
|
23218
|
+
children: [
|
|
23219
|
+
u.blank === true ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
23220
|
+
className: config_manager_module_css_default.pickerUnitName,
|
|
23221
|
+
title: safeLabel,
|
|
23222
|
+
children: t("picker.blankSession")
|
|
23223
|
+
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
23224
|
+
className: config_manager_module_css_default.pickerUnitName,
|
|
23225
|
+
title: safeLabel,
|
|
23226
|
+
children: tailWeightedEllipsis(safeLabel, UNIT_NAME_MAX)
|
|
23227
|
+
}),
|
|
23228
|
+
u.lockedWith !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
23229
|
+
title: t("picker.lockedHint"),
|
|
23230
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Badge, {
|
|
23231
|
+
kind: "warn",
|
|
23232
|
+
children: t("picker.locked")
|
|
23233
|
+
})
|
|
23234
|
+
}),
|
|
23235
|
+
u.fileCount !== void 0 && u.fileCount > 1 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
23236
|
+
className: config_manager_module_css_default.pickerCount,
|
|
23237
|
+
children: t("picker.fileCount", { count: String(u.fileCount) })
|
|
23238
|
+
}),
|
|
23239
|
+
unitBadge?.(node.section, u.id),
|
|
23240
|
+
u.detail !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
23241
|
+
className: config_manager_module_css_default.pickerUnitDetail,
|
|
23242
|
+
children: redact(u.detail)
|
|
23243
|
+
}),
|
|
23244
|
+
u.sizeBytes > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
23245
|
+
className: config_manager_module_css_default.sectionSize + " " + config_manager_module_css_default.mono,
|
|
23246
|
+
children: formatBytes$1(u.sizeBytes)
|
|
23247
|
+
})
|
|
23248
|
+
]
|
|
23249
|
+
})
|
|
23250
|
+
})]
|
|
23251
|
+
}, u.id);
|
|
23252
|
+
};
|
|
23253
|
+
/**
|
|
23254
|
+
* 「插件与扩展」组里的四个插件分区合并渲染成的**一棵按插件分组的树**(用户要求:
|
|
23255
|
+
* 不再用「按分区 / 按插件」视图切换 —— 树就是这一组的渲染方式)。
|
|
23256
|
+
*
|
|
23257
|
+
* 只显示**能证明**的归属(宿主下发的 relatedAreas = 内置来源表 + 插件自述 dsh.dataDirs);
|
|
23258
|
+
* pluginFiles 没有任何包名信息,因此整块进「未归属」桶 —— 不猜,也不假装它属于某个插件。
|
|
23259
|
+
* 「注册表说它应该在哪儿」与「磁盘上确实有」分开渲染:unread 不可勾(展开时才去读),
|
|
23260
|
+
* absent 明确标「无内容」—— 否则会出现「勾了却没导出」的幽灵勾选(引擎只带走清单里真实存在的单元)。
|
|
23261
|
+
*
|
|
23262
|
+
* 纯展示:叶子仍是原来的单元 id,勾选仍走 toggleUnit / toggleSection(语义一字不改)。
|
|
23263
|
+
*/
|
|
23264
|
+
const renderPluginTree = () => {
|
|
23265
|
+
/**
|
|
23266
|
+
* 「插件」一级区块(用户要求:所有插件先收在一个可折叠的区块里,展开才列出插件)。
|
|
23267
|
+
*
|
|
23268
|
+
* 默认**折叠**;**搜索时自动展开** —— 否则搜索结果会藏在折叠节点里,看起来像「没有匹配」。
|
|
23269
|
+
* 它的勾选框 = 所有插件名下**存在的**单元(逐个走 toggleUnit),与「未归属 / 遗留数据」桶无关:
|
|
23270
|
+
* 那两个桶是「无法归属的东西」,不该被「全选所有插件」顺手带上。
|
|
23271
|
+
*/
|
|
23272
|
+
const rootKey = PLUGIN_ROOT_KEY;
|
|
23273
|
+
const rootOpen = expandedPlugins[rootKey] === true || query.trim() !== "";
|
|
23274
|
+
const rootState = pluginTreePickState(value, tree);
|
|
23275
|
+
const rootPicked = pluginTreeSelectedCount(value, tree);
|
|
23276
|
+
const rootTotal = pluginTreeTotalCount(tree);
|
|
23277
|
+
const rootSize = tree.entries.reduce((n, e) => n + e.leaves.reduce((m, l) => m + l.sizeBytes, 0), 0);
|
|
23278
|
+
const rootUnread = pluginTreeUnreadSections(tree);
|
|
23279
|
+
const body = /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
|
|
23280
|
+
!tree.pluginsLoaded && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
23281
|
+
className: config_manager_module_css_default.hint,
|
|
23282
|
+
children: t("picker.pluginViewEmpty")
|
|
23283
|
+
}),
|
|
23284
|
+
tree.pluginsLoaded && tree.entries.length === 0 && tree.buckets.every((b) => b.units.length === 0) && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
23285
|
+
className: config_manager_module_css_default.hint,
|
|
23286
|
+
children: t("picker.empty")
|
|
23287
|
+
}),
|
|
23288
|
+
tree.entries.map((entry) => {
|
|
23289
|
+
const open = expandedPlugins[entry.name] === true;
|
|
23290
|
+
const state = pluginEntryPickState(value, entry);
|
|
23291
|
+
const picked = pluginEntrySelectedCount(value, entry);
|
|
23292
|
+
const total = pluginEntryTotalCount(entry);
|
|
23293
|
+
const unread = pluginEntryUnreadSections(entry);
|
|
23294
|
+
const entrySize = entry.leaves.reduce((n, l) => n + l.sizeBytes, 0);
|
|
23295
|
+
const bodyId = "picker-plugin-" + entry.name;
|
|
23296
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
23297
|
+
className: config_manager_module_css_default.pickerGroup,
|
|
23298
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
23299
|
+
className: config_manager_module_css_default.pickerTreeRow,
|
|
23300
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
23301
|
+
type: "button",
|
|
23302
|
+
className: config_manager_module_css_default.iconBtn,
|
|
23303
|
+
"data-size": "sm",
|
|
23304
|
+
"aria-expanded": open,
|
|
23305
|
+
"aria-controls": bodyId,
|
|
23306
|
+
"aria-label": open ? t("picker.collapse") : t("picker.expand"),
|
|
23307
|
+
title: open ? t("picker.collapse") : t("picker.expand"),
|
|
23308
|
+
onClick: () => {
|
|
23309
|
+
if (!open) for (const s of unread) onRequestUnits?.(s);
|
|
23310
|
+
setExpandedPlugins({
|
|
23311
|
+
...expandedPlugins,
|
|
23312
|
+
[entry.name]: !open
|
|
23313
|
+
});
|
|
23314
|
+
},
|
|
23315
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ExpandChevron, { open })
|
|
23316
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Checkbox, {
|
|
23317
|
+
checked: state === "all",
|
|
23318
|
+
onChange: (checked) => {
|
|
23319
|
+
if (!checked) {
|
|
23320
|
+
setPendingChecks((prev) => prev.filter((p) => p.key !== entry.name));
|
|
23321
|
+
commit(togglePluginEntry(value, nodes, entry, false));
|
|
23322
|
+
return;
|
|
23323
|
+
}
|
|
23324
|
+
for (const s of unread) onRequestUnits?.(s);
|
|
23325
|
+
if (unread.length > 0) setPendingChecks((prev) => prev.some((p) => p.key === entry.name) ? prev : [...prev, {
|
|
23326
|
+
key: entry.name,
|
|
23327
|
+
kind: "entry"
|
|
23328
|
+
}]);
|
|
23329
|
+
commit(togglePluginEntry(value, nodes, entry, true));
|
|
23330
|
+
},
|
|
23331
|
+
label: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
23332
|
+
className: config_manager_module_css_default.categoryItem,
|
|
23333
|
+
children: [
|
|
23334
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
23335
|
+
className: config_manager_module_css_default.pickerUnitName,
|
|
23336
|
+
title: redact(entry.name),
|
|
23337
|
+
children: tailWeightedEllipsis(redact(entry.name), UNIT_NAME_MAX)
|
|
23338
|
+
}),
|
|
23339
|
+
state === "partial" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Badge, {
|
|
23340
|
+
kind: "info",
|
|
23341
|
+
children: t("picker.partial")
|
|
23342
|
+
}),
|
|
23343
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
23344
|
+
className: config_manager_module_css_default.pickerCount,
|
|
23345
|
+
children: t("picker.selectedOf", {
|
|
23346
|
+
selected: String(picked),
|
|
23347
|
+
total: String(total)
|
|
23348
|
+
})
|
|
23349
|
+
}),
|
|
23350
|
+
entrySize > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
23351
|
+
className: config_manager_module_css_default.sectionSize + " " + config_manager_module_css_default.mono,
|
|
23352
|
+
children: formatBytes$1(entrySize)
|
|
23353
|
+
}),
|
|
23354
|
+
unread.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
23355
|
+
className: config_manager_module_css_default.pickerCount,
|
|
23356
|
+
children: t("picker.pluginAreaUnread")
|
|
23357
|
+
})
|
|
23358
|
+
]
|
|
23359
|
+
})
|
|
23360
|
+
})]
|
|
23361
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Collapse, {
|
|
23362
|
+
open,
|
|
23363
|
+
id: bodyId,
|
|
23364
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
23365
|
+
className: config_manager_module_css_default.pickerChildren,
|
|
23366
|
+
children: entry.leaves.map((leaf) => {
|
|
23367
|
+
const kindText = leafKindText(leaf.kind);
|
|
23368
|
+
const leafName = leaf.kind === "plugin" ? kindText : kindText + " · " + redact(leaf.label);
|
|
23369
|
+
if (leaf.state !== "present") return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
23370
|
+
className: config_manager_module_css_default.pickerUnit + " " + config_manager_module_css_default.pickerUnitNested,
|
|
23371
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
23372
|
+
className: config_manager_module_css_default.pickerChevronSpacer,
|
|
23373
|
+
"aria-hidden": "true"
|
|
23374
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
23375
|
+
className: config_manager_module_css_default.categoryItem,
|
|
23376
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
23377
|
+
className: config_manager_module_css_default.pickerUnitName,
|
|
23378
|
+
title: redact(leaf.label),
|
|
23379
|
+
children: leafName
|
|
23380
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
23381
|
+
className: config_manager_module_css_default.pickerCount,
|
|
23382
|
+
children: leaf.state === "unread" ? t("picker.pluginAreaUnread") : t("picker.pluginAreaAbsent")
|
|
23383
|
+
})]
|
|
23384
|
+
})]
|
|
23385
|
+
}, leaf.unitId);
|
|
23386
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
23387
|
+
className: config_manager_module_css_default.pickerUnit + " " + config_manager_module_css_default.pickerUnitNested,
|
|
23388
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
23389
|
+
className: config_manager_module_css_default.pickerChevronSpacer,
|
|
23390
|
+
"aria-hidden": "true"
|
|
23391
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Checkbox, {
|
|
23392
|
+
checked: unitChecked(value, leaf.section, leaf.unitId),
|
|
23393
|
+
onChange: (checked) => {
|
|
23394
|
+
commit(toggleUnit(value, nodes, leaf.unitId, checked));
|
|
23395
|
+
},
|
|
23396
|
+
label: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
23397
|
+
className: config_manager_module_css_default.categoryItem,
|
|
23398
|
+
children: [
|
|
23399
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
23400
|
+
className: config_manager_module_css_default.pickerUnitName,
|
|
23401
|
+
title: redact(leaf.label),
|
|
23402
|
+
children: leafName
|
|
23403
|
+
}),
|
|
23404
|
+
leaf.detail !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
23405
|
+
className: config_manager_module_css_default.pickerUnitDetail,
|
|
23406
|
+
children: redact(leaf.detail)
|
|
23407
|
+
}),
|
|
23408
|
+
leaf.sizeBytes > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
23409
|
+
className: config_manager_module_css_default.sectionSize + " " + config_manager_module_css_default.mono,
|
|
23410
|
+
children: formatBytes$1(leaf.sizeBytes)
|
|
23411
|
+
})
|
|
23412
|
+
]
|
|
23413
|
+
})
|
|
23414
|
+
})]
|
|
23415
|
+
}, leaf.unitId);
|
|
23416
|
+
})
|
|
23417
|
+
})
|
|
23418
|
+
})]
|
|
23419
|
+
}, entry.name);
|
|
23420
|
+
})
|
|
23421
|
+
] });
|
|
23422
|
+
const bucketsBody = /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_jsx_runtime.Fragment, { children: tree.buckets.map((bucket) => {
|
|
23423
|
+
const node = nodes.find((n) => n.section === bucket.section);
|
|
23424
|
+
if (node === void 0) return null;
|
|
23425
|
+
const key = "bucket:" + bucket.section;
|
|
23426
|
+
const open = expandedPlugins[key] === true;
|
|
23427
|
+
const units = visibleUnits(bucket.units, showAllUnits[key] === true);
|
|
23428
|
+
const bodyId = "picker-bucket-" + bucket.section;
|
|
23429
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
23430
|
+
className: config_manager_module_css_default.pickerGroup,
|
|
23431
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
23432
|
+
className: config_manager_module_css_default.pickerTreeRow,
|
|
23433
|
+
children: [bucket.units.length > 0 || !bucket.loaded ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
23434
|
+
type: "button",
|
|
23435
|
+
className: config_manager_module_css_default.iconBtn,
|
|
23436
|
+
"data-size": "sm",
|
|
23437
|
+
"aria-expanded": open,
|
|
23438
|
+
"aria-controls": bodyId,
|
|
23439
|
+
"aria-label": open ? t("picker.collapse") : t("picker.expand"),
|
|
23440
|
+
title: open ? t("picker.collapse") : t("picker.expand"),
|
|
23441
|
+
onClick: () => {
|
|
23442
|
+
if (!open && !bucket.loaded) onRequestUnits?.(bucket.section);
|
|
23443
|
+
setExpandedPlugins({
|
|
23444
|
+
...expandedPlugins,
|
|
23445
|
+
[key]: !open
|
|
23446
|
+
});
|
|
23447
|
+
},
|
|
23448
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ExpandChevron, { open })
|
|
23449
|
+
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
23450
|
+
className: config_manager_module_css_default.pickerChevronSpacer,
|
|
23451
|
+
"aria-hidden": "true"
|
|
23452
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Checkbox, {
|
|
23453
|
+
checked: sectionPickState(value, node) === "all",
|
|
23454
|
+
onChange: (checked) => {
|
|
23455
|
+
commit(toggleSection(value, node, checked), focusOf(node.section));
|
|
23456
|
+
},
|
|
23457
|
+
label: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
23458
|
+
className: config_manager_module_css_default.categoryItem,
|
|
23459
|
+
children: [
|
|
23460
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
23461
|
+
className: config_manager_module_css_default.pickerUnitName,
|
|
23462
|
+
children: bucketLabel(bucket.section)
|
|
23463
|
+
}),
|
|
23464
|
+
sectionPickState(value, node) === "partial" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Badge, {
|
|
23465
|
+
kind: "info",
|
|
23466
|
+
children: t("picker.partial")
|
|
23467
|
+
}),
|
|
23468
|
+
node.portability === "deviceSpecific" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Badge, {
|
|
23469
|
+
kind: "warn",
|
|
23470
|
+
children: t("picker.deviceSpecific")
|
|
23471
|
+
}),
|
|
23472
|
+
bucket.loaded && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
23473
|
+
className: config_manager_module_css_default.pickerCount,
|
|
23474
|
+
children: t("picker.selectedOf", {
|
|
23475
|
+
selected: String(selectedUnitCount(value, node)),
|
|
23476
|
+
total: String(node.units.length === 0 ? node.count : node.units.length)
|
|
23477
|
+
})
|
|
23478
|
+
}),
|
|
23479
|
+
bucket.loaded && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(InfoHint, {
|
|
23480
|
+
text: t("picker.bucketHint"),
|
|
23481
|
+
t
|
|
23482
|
+
})
|
|
23483
|
+
]
|
|
23484
|
+
})
|
|
23485
|
+
})]
|
|
23486
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Collapse, {
|
|
23487
|
+
open,
|
|
23488
|
+
id: bodyId,
|
|
23489
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
23490
|
+
className: config_manager_module_css_default.pickerChildren,
|
|
23491
|
+
children: [units.shown.map((u) => renderUnitRow(node, u, true)), units.hidden > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
23492
|
+
className: config_manager_module_css_default.pickerMore,
|
|
23493
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
23494
|
+
type: "button",
|
|
23495
|
+
className: config_manager_module_css_default.ghostButton,
|
|
23496
|
+
"data-size": "sm",
|
|
23497
|
+
onClick: () => {
|
|
23498
|
+
setShowAllUnits({
|
|
23499
|
+
...showAllUnits,
|
|
23500
|
+
[key]: true
|
|
23501
|
+
});
|
|
23502
|
+
},
|
|
23503
|
+
children: t("picker.showAll", { count: String(bucket.units.length) })
|
|
23504
|
+
})
|
|
23505
|
+
})]
|
|
23506
|
+
})
|
|
23507
|
+
})]
|
|
23508
|
+
}, key);
|
|
23509
|
+
}) });
|
|
23510
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
23511
|
+
className: config_manager_module_css_default.pickerGroup,
|
|
23512
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
23513
|
+
className: config_manager_module_css_default.pickerTreeRow,
|
|
23514
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
23515
|
+
type: "button",
|
|
23516
|
+
className: config_manager_module_css_default.iconBtn,
|
|
23517
|
+
"data-size": "sm",
|
|
23518
|
+
"aria-expanded": rootOpen,
|
|
23519
|
+
"aria-controls": "picker-plugin-root",
|
|
23520
|
+
"aria-label": rootOpen ? t("picker.collapse") : t("picker.expand"),
|
|
23521
|
+
title: rootOpen ? t("picker.collapse") : t("picker.expand"),
|
|
23522
|
+
onClick: () => {
|
|
23523
|
+
if (!rootOpen) for (const s of rootUnread) onRequestUnits?.(s);
|
|
23524
|
+
setExpandedPlugins({
|
|
23525
|
+
...expandedPlugins,
|
|
23526
|
+
[rootKey]: !rootOpen
|
|
23527
|
+
});
|
|
23528
|
+
},
|
|
23529
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ExpandChevron, { open: rootOpen })
|
|
23530
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Checkbox, {
|
|
23531
|
+
checked: rootState === "all",
|
|
23532
|
+
onChange: (checked) => {
|
|
23533
|
+
if (!checked) {
|
|
23534
|
+
setPendingChecks((prev) => prev.filter((p) => p.kind !== "root"));
|
|
23535
|
+
commit(togglePluginTree(value, nodes, tree, false));
|
|
23536
|
+
return;
|
|
23537
|
+
}
|
|
23538
|
+
for (const s of rootUnread) onRequestUnits?.(s);
|
|
23539
|
+
if (!tree.pluginsLoaded || tree.entries.some((e) => pluginEntryUnreadSections(e).length > 0)) setPendingChecks((prev) => prev.some((p) => p.kind === "root") ? prev : [...prev, {
|
|
23540
|
+
key: rootKey,
|
|
23541
|
+
kind: "root"
|
|
23542
|
+
}]);
|
|
23543
|
+
commit(togglePluginTree(value, nodes, tree, true));
|
|
23544
|
+
},
|
|
23545
|
+
label: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
23546
|
+
className: config_manager_module_css_default.categoryItem,
|
|
23547
|
+
children: [
|
|
23548
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
23549
|
+
className: config_manager_module_css_default.categoryName,
|
|
23550
|
+
children: t("picker.pluginRoot")
|
|
23551
|
+
}),
|
|
23552
|
+
rootState === "partial" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Badge, {
|
|
23553
|
+
kind: "info",
|
|
23554
|
+
children: t("picker.partial")
|
|
23555
|
+
}),
|
|
23556
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
23557
|
+
className: config_manager_module_css_default.pickerCount,
|
|
23558
|
+
children: t("picker.selectedOf", {
|
|
23559
|
+
selected: String(rootPicked),
|
|
23560
|
+
total: String(rootTotal)
|
|
23561
|
+
})
|
|
23562
|
+
}),
|
|
23563
|
+
rootSize > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
23564
|
+
className: config_manager_module_css_default.sectionSize + " " + config_manager_module_css_default.mono,
|
|
23565
|
+
children: formatBytes$1(rootSize)
|
|
23566
|
+
}),
|
|
23567
|
+
rootUnread.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
23568
|
+
className: config_manager_module_css_default.pickerCount,
|
|
23569
|
+
children: t("picker.pluginAreaUnread")
|
|
23570
|
+
})
|
|
23571
|
+
]
|
|
23572
|
+
})
|
|
23573
|
+
})]
|
|
23574
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Collapse, {
|
|
23575
|
+
open: rootOpen,
|
|
23576
|
+
id: "picker-plugin-root",
|
|
23577
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
23578
|
+
className: config_manager_module_css_default.pickerChildren,
|
|
23579
|
+
children: body
|
|
23580
|
+
})
|
|
23581
|
+
})]
|
|
23582
|
+
}), bucketsBody] });
|
|
23583
|
+
};
|
|
22746
23584
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
22747
23585
|
className: config_manager_module_css_default.pickerRoot,
|
|
22748
23586
|
children: [
|
|
@@ -22792,7 +23630,21 @@ function ContentPicker({ nodes, value, onChange, t, sectionLabel, loading = fals
|
|
|
22792
23630
|
}),
|
|
22793
23631
|
visible.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
22794
23632
|
className: config_manager_module_css_default.pickerList,
|
|
22795
|
-
children: visible.map((node) => {
|
|
23633
|
+
children: visible.map((node, nodeIndex) => {
|
|
23634
|
+
/**
|
|
23635
|
+
* 分组标题:只在**分组变化处**插一行(顺序 = 调用方给的顺序,UI 不重排)。
|
|
23636
|
+
* 没有 group 的调用方(导入向导 / 市场)整段不渲染 —— 行为逐像素不变。
|
|
23637
|
+
* 标题不是选项(DESIGN.md:更小更淡、不可选中、非首组起分隔线),
|
|
23638
|
+
* 因此这里用 span 而不是 Checkbox —— 免得被读成「灰掉的选项」。
|
|
23639
|
+
*/
|
|
23640
|
+
const groupTitle = node.group !== void 0 && (nodeIndex === 0 || visible[nodeIndex - 1]?.group !== node.group) ? node.group : void 0;
|
|
23641
|
+
/**
|
|
23642
|
+
* 「插件与扩展」组里的四个插件分区(plugins / pluginFiles / pluginData / pluginAssets)
|
|
23643
|
+
* 合并成一棵按插件分组的树:只在其中**第一个出现**的分区处渲染一次(见 renderPluginTree),
|
|
23644
|
+
* 其余成员就地跳过 —— 顺序仍由调用方给的节点顺序决定,不引入第二个排序来源。
|
|
23645
|
+
* `self`(配置管理器设置)不在那四项里,照旧按普通分区行渲染。
|
|
23646
|
+
*/
|
|
23647
|
+
if (isPluginTreeSection(node.section) && node.section !== firstTreeSection) return null;
|
|
22796
23648
|
const state = sectionPickState(value, node);
|
|
22797
23649
|
const open = expanded[node.section] === true;
|
|
22798
23650
|
const picked = selectedUnitCount(value, node);
|
|
@@ -22814,7 +23666,16 @@ function ContentPicker({ nodes, value, onChange, t, sectionLabel, loading = fals
|
|
|
22814
23666
|
};
|
|
22815
23667
|
/** 本帧要渲染的单元(默认前 N 条;UI-15) */
|
|
22816
23668
|
const units = visibleUnits(node.units, showAllUnits[node.section] === true);
|
|
22817
|
-
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
23669
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react.Fragment, { children: [groupTitle !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
23670
|
+
className: config_manager_module_css_default.pickerGroupTitle,
|
|
23671
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
23672
|
+
className: config_manager_module_css_default.pickerGroupTitleName,
|
|
23673
|
+
children: t(GROUP_TITLE_KEY[groupTitle])
|
|
23674
|
+
}), groupTitle === "extensions" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(InfoHint, {
|
|
23675
|
+
text: t("picker.groupHint.extensions"),
|
|
23676
|
+
t
|
|
23677
|
+
})]
|
|
23678
|
+
}), node.section === firstTreeSection ? renderPluginTree() : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
22818
23679
|
className: config_manager_module_css_default.pickerGroup,
|
|
22819
23680
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
22820
23681
|
className: config_manager_module_css_default.pickerTreeRow,
|
|
@@ -22882,138 +23743,87 @@ function ContentPicker({ nodes, value, onChange, t, sectionLabel, loading = fals
|
|
|
22882
23743
|
]
|
|
22883
23744
|
})
|
|
22884
23745
|
})]
|
|
22885
|
-
}), /* @__PURE__ */ (0, react_jsx_runtime.
|
|
23746
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Collapse, {
|
|
22886
23747
|
open,
|
|
22887
23748
|
id: unitsId(node.section),
|
|
22888
|
-
children:
|
|
22889
|
-
|
|
22890
|
-
|
|
22891
|
-
|
|
22892
|
-
|
|
22893
|
-
|
|
22894
|
-
|
|
22895
|
-
|
|
22896
|
-
|
|
22897
|
-
|
|
22898
|
-
|
|
22899
|
-
|
|
22900
|
-
|
|
22901
|
-
|
|
22902
|
-
|
|
22903
|
-
|
|
22904
|
-
|
|
22905
|
-
"
|
|
23749
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
23750
|
+
className: config_manager_module_css_default.pickerChildren,
|
|
23751
|
+
children: [groupUnits(units.shown).map((group, gi) => {
|
|
23752
|
+
const groupState = groupPickState(value, group, node.section);
|
|
23753
|
+
const groupPicked = groupSelectedCount(value, group, node.section);
|
|
23754
|
+
const groupKey = node.section + ":" + (group.label ?? "__flat");
|
|
23755
|
+
const groupOpen = group.label === null || expandedGroups[groupKey] === true;
|
|
23756
|
+
const groupBodyId = "picker-units-" + node.section + "-g" + String(gi);
|
|
23757
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [group.label !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
23758
|
+
className: config_manager_module_css_default.pickerTreeRow + " " + config_manager_module_css_default.pickerSubgroup,
|
|
23759
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
23760
|
+
type: "button",
|
|
23761
|
+
className: config_manager_module_css_default.iconBtn,
|
|
23762
|
+
"data-size": "sm",
|
|
23763
|
+
"aria-expanded": groupOpen,
|
|
23764
|
+
"aria-controls": groupBodyId,
|
|
23765
|
+
"aria-label": groupOpen ? t("picker.collapse") : t("picker.expand"),
|
|
23766
|
+
title: groupOpen ? t("picker.collapse") : t("picker.expand"),
|
|
23767
|
+
onClick: () => {
|
|
23768
|
+
setExpandedGroups({
|
|
23769
|
+
...expandedGroups,
|
|
23770
|
+
[groupKey]: !groupOpen
|
|
23771
|
+
});
|
|
23772
|
+
},
|
|
23773
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ExpandChevron, { open: groupOpen })
|
|
22906
23774
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Checkbox, {
|
|
22907
|
-
checked:
|
|
23775
|
+
checked: groupState === "all",
|
|
22908
23776
|
onChange: (checked) => {
|
|
22909
|
-
commit(
|
|
22910
|
-
unitId: u.id,
|
|
22911
|
-
checked
|
|
22912
|
-
});
|
|
23777
|
+
commit(toggleUnitGroup(value, node, group, checked), focusOf(node.section));
|
|
22913
23778
|
},
|
|
22914
23779
|
label: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
22915
23780
|
className: config_manager_module_css_default.categoryItem,
|
|
22916
23781
|
children: [
|
|
22917
|
-
|
|
22918
|
-
className: config_manager_module_css_default.
|
|
22919
|
-
title:
|
|
22920
|
-
children:
|
|
22921
|
-
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
22922
|
-
className: config_manager_module_css_default.pickerUnitName,
|
|
22923
|
-
title: safeLabel,
|
|
22924
|
-
children: tailWeightedEllipsis(safeLabel, UNIT_NAME_MAX)
|
|
23782
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
23783
|
+
className: config_manager_module_css_default.pickerSubgroupName,
|
|
23784
|
+
title: redact(group.label),
|
|
23785
|
+
children: redact(group.label)
|
|
22925
23786
|
}),
|
|
22926
|
-
|
|
22927
|
-
|
|
22928
|
-
children:
|
|
22929
|
-
kind: "warn",
|
|
22930
|
-
children: t("picker.locked")
|
|
22931
|
-
})
|
|
23787
|
+
groupState === "partial" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Badge, {
|
|
23788
|
+
kind: "info",
|
|
23789
|
+
children: t("picker.partial")
|
|
22932
23790
|
}),
|
|
22933
|
-
|
|
23791
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
22934
23792
|
className: config_manager_module_css_default.pickerCount,
|
|
22935
|
-
children: t("picker.
|
|
22936
|
-
|
|
22937
|
-
|
|
22938
|
-
|
|
22939
|
-
className: config_manager_module_css_default.pickerUnitDetail,
|
|
22940
|
-
children: redact(u.detail)
|
|
22941
|
-
}),
|
|
22942
|
-
u.sizeBytes > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
22943
|
-
className: config_manager_module_css_default.sectionSize + " " + config_manager_module_css_default.mono,
|
|
22944
|
-
children: formatBytes$1(u.sizeBytes)
|
|
23793
|
+
children: t("picker.selectedOf", {
|
|
23794
|
+
selected: String(groupPicked),
|
|
23795
|
+
total: String(group.units.length)
|
|
23796
|
+
})
|
|
22945
23797
|
})
|
|
22946
23798
|
]
|
|
22947
23799
|
})
|
|
22948
23800
|
})]
|
|
22949
|
-
}, u.
|
|
22950
|
-
|
|
22951
|
-
|
|
22952
|
-
|
|
22953
|
-
|
|
23801
|
+
}), group.label === null ? group.units.map((u) => renderUnitRow(node, u, true)) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Collapse, {
|
|
23802
|
+
open: groupOpen,
|
|
23803
|
+
id: groupBodyId,
|
|
23804
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
23805
|
+
className: config_manager_module_css_default.pickerChildren,
|
|
23806
|
+
children: group.units.map((u) => renderUnitRow(node, u, true))
|
|
23807
|
+
})
|
|
23808
|
+
})] }, groupKey);
|
|
23809
|
+
}), units.hidden > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
23810
|
+
className: config_manager_module_css_default.pickerMore,
|
|
23811
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
22954
23812
|
type: "button",
|
|
22955
|
-
className: config_manager_module_css_default.
|
|
23813
|
+
className: config_manager_module_css_default.ghostButton,
|
|
22956
23814
|
"data-size": "sm",
|
|
22957
|
-
"aria-expanded": groupOpen,
|
|
22958
|
-
"aria-controls": groupBodyId,
|
|
22959
|
-
"aria-label": groupOpen ? t("picker.collapse") : t("picker.expand"),
|
|
22960
|
-
title: groupOpen ? t("picker.collapse") : t("picker.expand"),
|
|
22961
23815
|
onClick: () => {
|
|
22962
|
-
|
|
22963
|
-
...
|
|
22964
|
-
[
|
|
23816
|
+
setShowAllUnits({
|
|
23817
|
+
...showAllUnits,
|
|
23818
|
+
[node.section]: true
|
|
22965
23819
|
});
|
|
22966
23820
|
},
|
|
22967
|
-
children:
|
|
22968
|
-
})
|
|
22969
|
-
|
|
22970
|
-
|
|
22971
|
-
commit(toggleUnitGroup(value, node, group, checked), focusOf(node.section));
|
|
22972
|
-
},
|
|
22973
|
-
label: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
22974
|
-
className: config_manager_module_css_default.categoryItem,
|
|
22975
|
-
children: [
|
|
22976
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
22977
|
-
className: config_manager_module_css_default.pickerSubgroupName,
|
|
22978
|
-
title: redact(group.label),
|
|
22979
|
-
children: redact(group.label)
|
|
22980
|
-
}),
|
|
22981
|
-
groupState === "partial" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Badge, {
|
|
22982
|
-
kind: "info",
|
|
22983
|
-
children: t("picker.partial")
|
|
22984
|
-
}),
|
|
22985
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
22986
|
-
className: config_manager_module_css_default.pickerCount,
|
|
22987
|
-
children: t("picker.selectedOf", {
|
|
22988
|
-
selected: String(groupPicked),
|
|
22989
|
-
total: String(group.units.length)
|
|
22990
|
-
})
|
|
22991
|
-
})
|
|
22992
|
-
]
|
|
22993
|
-
})
|
|
22994
|
-
})]
|
|
22995
|
-
}), group.label === null ? group.units.map(renderUnit) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Collapse, {
|
|
22996
|
-
open: groupOpen,
|
|
22997
|
-
id: groupBodyId,
|
|
22998
|
-
children: group.units.map(renderUnit)
|
|
22999
|
-
})] }, groupKey);
|
|
23000
|
-
}), units.hidden > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
23001
|
-
className: config_manager_module_css_default.pickerMore,
|
|
23002
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
23003
|
-
type: "button",
|
|
23004
|
-
className: config_manager_module_css_default.ghostButton,
|
|
23005
|
-
"data-size": "sm",
|
|
23006
|
-
onClick: () => {
|
|
23007
|
-
setShowAllUnits({
|
|
23008
|
-
...showAllUnits,
|
|
23009
|
-
[node.section]: true
|
|
23010
|
-
});
|
|
23011
|
-
},
|
|
23012
|
-
children: t("picker.showAll", { count: String(node.units.length) })
|
|
23013
|
-
})
|
|
23014
|
-
})]
|
|
23821
|
+
children: t("picker.showAll", { count: String(node.units.length) })
|
|
23822
|
+
})
|
|
23823
|
+
})]
|
|
23824
|
+
})
|
|
23015
23825
|
})]
|
|
23016
|
-
}, node.section);
|
|
23826
|
+
})] }, node.section);
|
|
23017
23827
|
})
|
|
23018
23828
|
}),
|
|
23019
23829
|
busy && !loading && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
@@ -23831,7 +24641,8 @@ function ExportView({ api, t }) {
|
|
|
23831
24641
|
units: got?.items ?? [],
|
|
23832
24642
|
unitsUnread: got === void 0,
|
|
23833
24643
|
portability: c.portability,
|
|
23834
|
-
sensitive: c.sensitive === true
|
|
24644
|
+
sensitive: c.sensitive === true,
|
|
24645
|
+
group: c.group
|
|
23835
24646
|
};
|
|
23836
24647
|
});
|
|
23837
24648
|
/**
|
|
@@ -37733,6 +38544,51 @@ function rollbackPreviewScope(files, removals) {
|
|
|
37733
38544
|
removals: removals.length
|
|
37734
38545
|
};
|
|
37735
38546
|
}
|
|
38547
|
+
/** 从预览推出可勾选行(只读;绝不改任何判定) */
|
|
38548
|
+
function rollbackSelectionRows(preview) {
|
|
38549
|
+
const files = preview?.workspace?.files;
|
|
38550
|
+
if (!Array.isArray(files)) return [];
|
|
38551
|
+
const out = [];
|
|
38552
|
+
for (const file of files) {
|
|
38553
|
+
if (file === null || typeof file !== "object") continue;
|
|
38554
|
+
const path = typeof file.path === "string" ? file.path : "";
|
|
38555
|
+
if (path === "") continue;
|
|
38556
|
+
const row = {
|
|
38557
|
+
path,
|
|
38558
|
+
parts: splitRollbackPath(path),
|
|
38559
|
+
foreign: file.foreign === true
|
|
38560
|
+
};
|
|
38561
|
+
if (row.foreign && typeof file.foreignSessionId === "string" && file.foreignSessionId !== "") row.foreignSessionId = file.foreignSessionId;
|
|
38562
|
+
out.push(row);
|
|
38563
|
+
}
|
|
38564
|
+
return out;
|
|
38565
|
+
}
|
|
38566
|
+
/**
|
|
38567
|
+
* 默认勾选 = **非 foreign** 的行(B 的自动隔离口径)。用户可在弹窗里逐个改回去。
|
|
38568
|
+
*
|
|
38569
|
+
* 为什么要在这里定而不在组件里:同一条默认值要在面板与聊天两个入口一致,
|
|
38570
|
+
* 且「默认排除别的会话的改动」是产品决定,必须可测。
|
|
38571
|
+
*/
|
|
38572
|
+
function rollbackDefaultSelection(rows) {
|
|
38573
|
+
return rows.filter((row) => !row.foreign).map((row) => row.path);
|
|
38574
|
+
}
|
|
38575
|
+
/**
|
|
38576
|
+
* 勾选集 → `onlyPaths`:
|
|
38577
|
+
* · **全选**(含空清单)⇒ `null`(不传字段 = 走既有全量口径,老宿主也照样工作);
|
|
38578
|
+
* · 真的少勾 ⇒ 把选中的清单原样传给宿主(空数组由调用方拦:宿主侧它是 400)。
|
|
38579
|
+
*/
|
|
38580
|
+
function rollbackOnlyPaths(rows, selected) {
|
|
38581
|
+
if (rows.length === 0) return null;
|
|
38582
|
+
const chosen = new Set(selected);
|
|
38583
|
+
const picked = rows.filter((row) => chosen.has(row.path)).map((row) => row.path);
|
|
38584
|
+
return picked.length === rows.length ? null : picked;
|
|
38585
|
+
}
|
|
38586
|
+
/** 该不该拦住提交:清单非空、却一个都没勾(宿主会把空数组当 400) */
|
|
38587
|
+
function rollbackSelectionBlocksSubmit(rows, selected) {
|
|
38588
|
+
if (rows.length === 0) return false;
|
|
38589
|
+
const chosen = new Set(selected);
|
|
38590
|
+
return !rows.some((row) => chosen.has(row.path));
|
|
38591
|
+
}
|
|
37736
38592
|
/**
|
|
37737
38593
|
* 差异无法逐行展示时的字典键(本层**只回键**,文案在字典里)。
|
|
37738
38594
|
* 未知 / 缺失原因回落 null —— 调用方按「未知原因」出话,绝不回落成「没有差异」(那是另一件事)。
|
|
@@ -37911,7 +38767,14 @@ function rollbackRewindRows(result) {
|
|
|
37911
38767
|
leftoversTruncated: segment.leftoversTruncated === true || segment.createdAfterTruncated === true,
|
|
37912
38768
|
childSessionId,
|
|
37913
38769
|
detail: redactLines(segment.detail),
|
|
37914
|
-
guidance: rollbackGuidanceRows(segment.guidance)
|
|
38770
|
+
guidance: rollbackGuidanceRows(segment.guidance),
|
|
38771
|
+
foreignSkipped: numberOrNull(segment.foreignSkipped) ?? 0,
|
|
38772
|
+
selectionSkipped: numberOrNull(segment.selectionSkipped) ?? 0,
|
|
38773
|
+
mergedCount: numberOrNull(segment.mergedCount) ?? 0,
|
|
38774
|
+
conflictCount: numberOrNull(segment.conflictCount) ?? 0,
|
|
38775
|
+
conflictPaths: redactLines(segment.conflictPaths),
|
|
38776
|
+
unavailableCount: numberOrNull(segment.unavailableCount) ?? 0,
|
|
38777
|
+
concurrentCount: numberOrNull(segment.concurrentCount) ?? 0
|
|
37915
38778
|
};
|
|
37916
38779
|
});
|
|
37917
38780
|
}
|
|
@@ -38854,6 +39717,19 @@ function chatNodeTurn(node) {
|
|
|
38854
39717
|
status: typeof status === "string" ? status : null
|
|
38855
39718
|
};
|
|
38856
39719
|
}
|
|
39720
|
+
/**
|
|
39721
|
+
* 宿主 `conversation.chat.user.content`(Factory 位)的名字。
|
|
39722
|
+
*
|
|
39723
|
+
* 0.2.1-alpha.3 起用户气泡的正文/附件/引用**整体换轨**到这条 factory:图片位
|
|
39724
|
+
* `conversation.chat.user.images` 是它的 children(single/session),旧的 `conversation.message.images`
|
|
39725
|
+
* 与节点 props 上的 `renderMessageImages` 同时删除(本机解包 0.2.1-rc.2 实测:后者 0 次出现)。
|
|
39726
|
+
* 因此「接管 user 之后自己复刻气泡」这条路在 0.2.1 上拿不到图片位(issue #92)——正确做法是把正文
|
|
39727
|
+
* **委托回宿主自己的 content factory**,图片由 ui-attachment 在该 factory 的渲染上下文里 renderSlot。
|
|
39728
|
+
*
|
|
39729
|
+
* 老宿主(≤0.2.0)没有这条 factory:`FactoryOutlet` 在定义缺失时回落调用方给的 `options.fallback`
|
|
39730
|
+
* ⇒ 渲染层把**自绘气泡**当 fallback 传进去,0.1.x/0.2.0 的路径逐字不变(一个版本双栈兼容)。
|
|
39731
|
+
*/
|
|
39732
|
+
const CHAT_USER_CONTENT_FACTORY = "conversation.chat.user.content";
|
|
38857
39733
|
/** 宿主 `compactImages` 的同一口径:**附件总数**(图片 + 文件)> 1。 */
|
|
38858
39734
|
function chatEntryCompactOf(view) {
|
|
38859
39735
|
return view.attachments.length > 1;
|
|
@@ -38993,6 +39869,7 @@ function buildChatEntryBubble(content) {
|
|
|
38993
39869
|
text,
|
|
38994
39870
|
rawText: content,
|
|
38995
39871
|
attachments: [],
|
|
39872
|
+
hostAttachments: [],
|
|
38996
39873
|
images: [],
|
|
38997
39874
|
files: [],
|
|
38998
39875
|
raw: [],
|
|
@@ -39003,6 +39880,7 @@ function buildChatEntryBubble(content) {
|
|
|
39003
39880
|
text: "",
|
|
39004
39881
|
rawText: "",
|
|
39005
39882
|
attachments: [],
|
|
39883
|
+
hostAttachments: [],
|
|
39006
39884
|
images: [],
|
|
39007
39885
|
files: [],
|
|
39008
39886
|
raw: content === null || content === void 0 ? [] : [{
|
|
@@ -39014,6 +39892,7 @@ function buildChatEntryBubble(content) {
|
|
|
39014
39892
|
const texts = [];
|
|
39015
39893
|
const rawTexts = [];
|
|
39016
39894
|
const attachments = [];
|
|
39895
|
+
const hostAttachments = [];
|
|
39017
39896
|
const raw = [];
|
|
39018
39897
|
content.forEach((block, index) => {
|
|
39019
39898
|
const record = asRecord$1(block);
|
|
@@ -39028,6 +39907,10 @@ function buildChatEntryBubble(content) {
|
|
|
39028
39907
|
kind: "image",
|
|
39029
39908
|
image: { attachment: record["attachment"] }
|
|
39030
39909
|
});
|
|
39910
|
+
hostAttachments.push({
|
|
39911
|
+
type: "image",
|
|
39912
|
+
image: { attachment: record["attachment"] }
|
|
39913
|
+
});
|
|
39031
39914
|
return;
|
|
39032
39915
|
}
|
|
39033
39916
|
if (type === "file" && record?.["attachment"] !== void 0) {
|
|
@@ -39042,6 +39925,10 @@ function buildChatEntryBubble(content) {
|
|
|
39042
39925
|
bytes: typeof bytes === "number" && Number.isFinite(bytes) ? bytes : null
|
|
39043
39926
|
}
|
|
39044
39927
|
});
|
|
39928
|
+
hostAttachments.push({
|
|
39929
|
+
type: "file",
|
|
39930
|
+
file: record["attachment"]
|
|
39931
|
+
});
|
|
39045
39932
|
return;
|
|
39046
39933
|
}
|
|
39047
39934
|
raw.push({
|
|
@@ -39054,6 +39941,7 @@ function buildChatEntryBubble(content) {
|
|
|
39054
39941
|
text,
|
|
39055
39942
|
rawText: rawTexts.join(""),
|
|
39056
39943
|
attachments,
|
|
39944
|
+
hostAttachments,
|
|
39057
39945
|
images: attachments.flatMap((item) => item.kind === "image" ? [item.image] : []),
|
|
39058
39946
|
files: attachments.flatMap((item) => item.kind === "file" ? [item.file] : []),
|
|
39059
39947
|
raw,
|
|
@@ -39061,6 +39949,35 @@ function buildChatEntryBubble(content) {
|
|
|
39061
39949
|
};
|
|
39062
39950
|
}
|
|
39063
39951
|
/**
|
|
39952
|
+
* 节点 data + 气泡视图 → 宿主 content factory 的入参(0.2.1+ 委托路径的**唯一**组装点)。
|
|
39953
|
+
*
|
|
39954
|
+
* 逐字对齐宿主 `UserStyleBubble` 的 `prepared` / `facts` 两段 useMemo:
|
|
39955
|
+
* · `content.text` = 未投影的文本拼接(宿主 factory 自己把它交给 `conversation.user.text` 投影成 chip);
|
|
39956
|
+
* · `content.attachments` = 宿主形状的有序附件(同一趟走查产出);
|
|
39957
|
+
* · `content.extraBlocks` = rest 块原样;
|
|
39958
|
+
* · `referenceLabels` / `sessionLabels` / `skillNames` **只在节点真的带了该字段时出现** ——
|
|
39959
|
+
* 宿主用「字段是否存在」区分「没带」与「空数组」,我们传 `[]` 会改变它的分支。
|
|
39960
|
+
*
|
|
39961
|
+
* 本函数不抛(读不到就按「没带」处理),与 buildChatEntryBubble 同一条纪律。
|
|
39962
|
+
*/
|
|
39963
|
+
function buildHostUserContentInput(data, bubble) {
|
|
39964
|
+
const content = {
|
|
39965
|
+
text: bubble.rawText,
|
|
39966
|
+
attachments: bubble.hostAttachments,
|
|
39967
|
+
extraBlocks: bubble.raw.map((block) => block.payload)
|
|
39968
|
+
};
|
|
39969
|
+
const facts = {};
|
|
39970
|
+
if (data.referenceLabels !== null) {
|
|
39971
|
+
content.referenceLabels = data.referenceLabels;
|
|
39972
|
+
facts.sessionLabels = data.referenceLabels;
|
|
39973
|
+
}
|
|
39974
|
+
if (data.skillNames !== null) facts.skillNames = data.skillNames;
|
|
39975
|
+
return {
|
|
39976
|
+
content,
|
|
39977
|
+
facts
|
|
39978
|
+
};
|
|
39979
|
+
}
|
|
39980
|
+
/**
|
|
39064
39981
|
* 有序附件 → 渲染计划(宿主 `attachments.map` 的逐字同构):
|
|
39065
39982
|
* · **顺序 = content 原始顺序**(绝不重排成「先图片后文件」);
|
|
39066
39983
|
* · 图片**每张一次** `renderMessageImages({ images: [image], align: 'end', compact })`
|
|
@@ -39196,13 +40113,15 @@ function shouldRetryChatPoint(lookup) {
|
|
|
39196
40113
|
function buildChatEntryView(node) {
|
|
39197
40114
|
const data = readChatEntryNodeData(node);
|
|
39198
40115
|
const turn = chatNodeTurn(node);
|
|
40116
|
+
const bubble = buildChatEntryBubble(data.content);
|
|
39199
40117
|
return {
|
|
39200
40118
|
turnNumber: turn?.turn ?? null,
|
|
39201
40119
|
turnStatus: turn?.status ?? null,
|
|
39202
|
-
bubble
|
|
40120
|
+
bubble,
|
|
39203
40121
|
clock: formatChatEntryClock(data.time),
|
|
39204
40122
|
referenceLabels: data.referenceLabels ?? [],
|
|
39205
|
-
skillNames: data.skillNames ?? []
|
|
40123
|
+
skillNames: data.skillNames ?? [],
|
|
40124
|
+
hostContent: buildHostUserContentInput(data, bubble)
|
|
39206
40125
|
};
|
|
39207
40126
|
}
|
|
39208
40127
|
/**
|
|
@@ -39748,51 +40667,36 @@ function RollbackDiffPane({ state, rt, title, fill }) {
|
|
|
39748
40667
|
children: key === null ? rt("rollback.diff.reason.unknown") : rt(rk$2(key))
|
|
39749
40668
|
}));
|
|
39750
40669
|
}
|
|
40670
|
+
if (diff.mergeSkipped === true) return shell(/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
40671
|
+
className: config_manager_module_css_default.hint,
|
|
40672
|
+
children: rt(rk$2("rollback.diff.skipped"))
|
|
40673
|
+
}));
|
|
39751
40674
|
if (diff.identical) return shell(/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
39752
40675
|
className: config_manager_module_css_default.hint,
|
|
39753
40676
|
children: rt("rollback.diff.identical")
|
|
39754
40677
|
}));
|
|
39755
40678
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
39756
40679
|
className: fill === true ? config_manager_module_css_default.diffPane + " " + config_manager_module_css_default.diffPaneFill : config_manager_module_css_default.diffPane,
|
|
39757
|
-
children: [
|
|
39758
|
-
|
|
39759
|
-
|
|
39760
|
-
|
|
39761
|
-
|
|
39762
|
-
|
|
39763
|
-
|
|
39764
|
-
|
|
39765
|
-
|
|
39766
|
-
|
|
40680
|
+
children: [
|
|
40681
|
+
diff.merged === true && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
40682
|
+
className: config_manager_module_css_default.hint,
|
|
40683
|
+
children: rt(rk$2("rollback.diff.merged"))
|
|
40684
|
+
}),
|
|
40685
|
+
diff.degraded && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
40686
|
+
className: config_manager_module_css_default.hint,
|
|
40687
|
+
children: rt("rollback.diff.degraded")
|
|
40688
|
+
}),
|
|
40689
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(DiffTable, {
|
|
40690
|
+
hunks: diff.hunks,
|
|
40691
|
+
title,
|
|
40692
|
+
beforeLabel: rt("rollback.diff.before"),
|
|
40693
|
+
afterLabel: rt("rollback.diff.after"),
|
|
40694
|
+
sanitize: redact
|
|
40695
|
+
})
|
|
40696
|
+
]
|
|
39767
40697
|
});
|
|
39768
40698
|
}
|
|
39769
40699
|
//#endregion
|
|
39770
|
-
//#region src/client/common/host-primitives.ts
|
|
39771
|
-
let cached;
|
|
39772
|
-
/** 取一次宿主原语包(**每个进程只试一次**,失败记 null 不再重试)。 */
|
|
39773
|
-
function hostPrimitives() {
|
|
39774
|
-
if (cached !== void 0) return cached;
|
|
39775
|
-
cached = null;
|
|
39776
|
-
try {
|
|
39777
|
-
const loaded = typeof require === "function" ? require("@deepseek-ai/dsh-client-ui-primitives") : null;
|
|
39778
|
-
if (loaded !== null && typeof loaded === "object") cached = loaded;
|
|
39779
|
-
} catch {
|
|
39780
|
-
cached = null;
|
|
39781
|
-
}
|
|
39782
|
-
return cached;
|
|
39783
|
-
}
|
|
39784
|
-
/** DSH 自带的文件类型图标(拿不到回 null,调用方回落自己的画法)。 */
|
|
39785
|
-
function hostFileTypeIcon() {
|
|
39786
|
-
const icon = hostPrimitives()?.FileTypeIcon;
|
|
39787
|
-
if (typeof icon === "function" || typeof icon === "object") return icon;
|
|
39788
|
-
return null;
|
|
39789
|
-
}
|
|
39790
|
-
/** DSH 自带的用户正文投影(把会话引用/斜杠名渲染成 chip;拿不到回 null)。 */
|
|
39791
|
-
function hostUserTextProjector() {
|
|
39792
|
-
const project = hostPrimitives()?.projectUserText;
|
|
39793
|
-
return typeof project === "function" ? project : null;
|
|
39794
|
-
}
|
|
39795
|
-
//#endregion
|
|
39796
40700
|
//#region src/client/chat/RollbackFileIcon.tsx
|
|
39797
40701
|
/**
|
|
39798
40702
|
* 最后的兜底:共享图标原语的通用「文件」图标(`common/Icon.tsx` 的 `name="file"`)。
|
|
@@ -39835,7 +40739,11 @@ const rk$1 = (key) => key;
|
|
|
39835
40739
|
* (取值域在 src/ui/rollback-view.ts,契约里已有),**绝不**从 `added === 0` 反推删除 ——
|
|
39836
40740
|
* 一个文件被清空成 0 行同样是 `+0 −N`,那是另一件事。
|
|
39837
40741
|
*/
|
|
39838
|
-
function FileStat({ status, added, removed, unknown, deleted, rt }) {
|
|
40742
|
+
function FileStat({ status, added, removed, unknown, deleted, skipped, rt }) {
|
|
40743
|
+
if (skipped === true) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
40744
|
+
className: config_manager_module_css_default.hint,
|
|
40745
|
+
children: rt(rk$1("rollback.preview.file.skipped"))
|
|
40746
|
+
});
|
|
39839
40747
|
if (status === "delete") return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
39840
40748
|
className: config_manager_module_css_default.rollbackDeleted,
|
|
39841
40749
|
children: deleted
|
|
@@ -39853,7 +40761,9 @@ function FileStat({ status, added, removed, unknown, deleted, rt }) {
|
|
|
39853
40761
|
})] });
|
|
39854
40762
|
}
|
|
39855
40763
|
/** 文件清单(改动行 + 删除行)。两处调用共用这一份渲染。 */
|
|
39856
|
-
function RollbackFileChanges({ files, removals, rt, view, renderFileIcon }) {
|
|
40764
|
+
function RollbackFileChanges({ files, removals, rt, view, renderFileIcon, selection }) {
|
|
40765
|
+
const selectedSet = selection === void 0 ? null : new Set(selection.selected);
|
|
40766
|
+
const foreignSet = selection === void 0 ? null : new Set(selection.foreign);
|
|
39857
40767
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
39858
40768
|
className: config_manager_module_css_default.rollbackFileList,
|
|
39859
40769
|
role: "list",
|
|
@@ -39868,6 +40778,16 @@ function RollbackFileChanges({ files, removals, rt, view, renderFileIcon }) {
|
|
|
39868
40778
|
role: "listitem",
|
|
39869
40779
|
"data-kind": previewFileStatusKnown(file.status) ? file.status : void 0,
|
|
39870
40780
|
children: [
|
|
40781
|
+
selection !== void 0 && selectedSet !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
|
|
40782
|
+
type: "checkbox",
|
|
40783
|
+
checked: selectedSet.has(file.path),
|
|
40784
|
+
disabled: selection.disabled,
|
|
40785
|
+
title: selection.toggleLabel(file.path),
|
|
40786
|
+
"aria-label": selection.toggleLabel(file.path),
|
|
40787
|
+
onChange: () => {
|
|
40788
|
+
selection.onToggle(file.path);
|
|
40789
|
+
}
|
|
40790
|
+
}),
|
|
39871
40791
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
39872
40792
|
className: config_manager_module_css_default.rollbackFileIcon,
|
|
39873
40793
|
"aria-hidden": "true",
|
|
@@ -39892,6 +40812,11 @@ function RollbackFileChanges({ files, removals, rt, view, renderFileIcon }) {
|
|
|
39892
40812
|
},
|
|
39893
40813
|
children: label
|
|
39894
40814
|
}),
|
|
40815
|
+
selection !== void 0 && foreignSet !== null && foreignSet.has(file.path) && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
40816
|
+
className: config_manager_module_css_default.hint,
|
|
40817
|
+
"data-foreign": "true",
|
|
40818
|
+
children: selection.foreignLabel
|
|
40819
|
+
}),
|
|
39895
40820
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
39896
40821
|
className: config_manager_module_css_default.rollbackFileStat,
|
|
39897
40822
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(FileStat, {
|
|
@@ -39900,6 +40825,7 @@ function RollbackFileChanges({ files, removals, rt, view, renderFileIcon }) {
|
|
|
39900
40825
|
removed: file.removed,
|
|
39901
40826
|
unknown: rt("rollback.preview.file.unknown"),
|
|
39902
40827
|
deleted: rt(rk$1("rollback.preview.file.deleted")),
|
|
40828
|
+
skipped: file.skipped === true,
|
|
39903
40829
|
rt
|
|
39904
40830
|
})
|
|
39905
40831
|
})
|
|
@@ -40017,6 +40943,11 @@ function RollbackCard({ recoveryApi, t }) {
|
|
|
40017
40943
|
* (= 最新那条对话,见下方 activeGroup 的推导)。
|
|
40018
40944
|
*/
|
|
40019
40945
|
const [selectedSession, setSelectedSession] = (0, react.useState)(null);
|
|
40946
|
+
/**
|
|
40947
|
+
* 路径级勾选(2026-10-17 定案 A):这次回退要恢复哪些文件。
|
|
40948
|
+
* 初值在**每次打开预览**时按引擎的归属标记重置(别的对话改过的默认不勾,见 rollbackSelectionRows)。
|
|
40949
|
+
*/
|
|
40950
|
+
const [selectedPaths, setSelectedPaths] = (0, react.useState)([]);
|
|
40020
40951
|
/** 「刷新」在途:**保留旧内容**,只把刷新按钮置为在途(见 load 的 keep 语义) */
|
|
40021
40952
|
const [refreshing, setRefreshing] = (0, react.useState)(false);
|
|
40022
40953
|
/** 开关(issue #88)在途:置灰防重复点击,但不改开关的显示值(值只在宿主确认后变) */
|
|
@@ -40091,6 +41022,7 @@ function RollbackCard({ recoveryApi, t }) {
|
|
|
40091
41022
|
if (!mounted.current || previewSeq.current !== seq) return;
|
|
40092
41023
|
setPreviewLoading(false);
|
|
40093
41024
|
setPreview(res);
|
|
41025
|
+
setSelectedPaths(rollbackDefaultSelection(rollbackSelectionRows(res)));
|
|
40094
41026
|
setMode(rollbackPreviewVerdict(res).mode);
|
|
40095
41027
|
if (!res.ok) setActionError(t(dyn(rollbackCodeKey(res.code))));
|
|
40096
41028
|
}, (err) => {
|
|
@@ -40148,7 +41080,8 @@ function RollbackCard({ recoveryApi, t }) {
|
|
|
40148
41080
|
userConfirmed: true,
|
|
40149
41081
|
mode,
|
|
40150
41082
|
segments: rollbackModeSegments(mode),
|
|
40151
|
-
allowPartial
|
|
41083
|
+
allowPartial,
|
|
41084
|
+
...onlyPaths === null ? {} : { onlyPaths }
|
|
40152
41085
|
}).then((res) => {
|
|
40153
41086
|
if (!mounted.current) return;
|
|
40154
41087
|
setBusy(false);
|
|
@@ -40264,6 +41197,11 @@ function RollbackCard({ recoveryApi, t }) {
|
|
|
40264
41197
|
const previewGuidance = rollbackPreviewGuidance(preview);
|
|
40265
41198
|
/** 会被**改动** / 会被**删除**的文件:与聊天里的回退预览同一对读法(引擎 preview.workspace 的同一份数据)。 */
|
|
40266
41199
|
const previewFiles = readRollbackPreviewFiles(preview?.workspace);
|
|
41200
|
+
/** 可勾选行 / 勾选结果(判定全在 src/ui/rollback-view.ts) */
|
|
41201
|
+
const selectionRows = rollbackSelectionRows(preview);
|
|
41202
|
+
const selectionBlocked = rollbackSelectionBlocksSubmit(selectionRows, selectedPaths);
|
|
41203
|
+
const selectionForeign = selectionRows.filter((row) => row.foreign).map((row) => row.path);
|
|
41204
|
+
const onlyPaths = rollbackOnlyPaths(selectionRows, selectedPaths);
|
|
40267
41205
|
const previewRemovals = readRollbackPreviewRemovals(preview?.workspace);
|
|
40268
41206
|
/** 三个数字的口径与「文件行」同源(rollbackPreviewScope:行数只累加两侧都可信的那部分)。 */
|
|
40269
41207
|
const previewScope = rollbackPreviewScope(previewFiles, previewRemovals);
|
|
@@ -40690,7 +41628,17 @@ function RollbackCard({ recoveryApi, t }) {
|
|
|
40690
41628
|
files: previewFiles,
|
|
40691
41629
|
removals: previewRemovals,
|
|
40692
41630
|
rt: t,
|
|
40693
|
-
view: fileView
|
|
41631
|
+
view: fileView,
|
|
41632
|
+
selection: {
|
|
41633
|
+
selected: selectedPaths,
|
|
41634
|
+
foreign: selectionForeign,
|
|
41635
|
+
foreignLabel: t("rollback.preview.select.foreign"),
|
|
41636
|
+
toggleLabel: (path) => t("rollback.preview.select.toggle", { path }),
|
|
41637
|
+
disabled: busy,
|
|
41638
|
+
onToggle: (path) => {
|
|
41639
|
+
setSelectedPaths((prev) => prev.includes(path) ? prev.filter((item) => item !== path) : [...prev, path]);
|
|
41640
|
+
}
|
|
41641
|
+
}
|
|
40694
41642
|
})
|
|
40695
41643
|
}),
|
|
40696
41644
|
inlineDiff !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
@@ -40736,7 +41684,7 @@ function RollbackCard({ recoveryApi, t }) {
|
|
|
40736
41684
|
children: [
|
|
40737
41685
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(Button, {
|
|
40738
41686
|
variant: "danger",
|
|
40739
|
-
disabled: busy || !canRewind,
|
|
41687
|
+
disabled: busy || !canRewind || selectionBlocked,
|
|
40740
41688
|
loading: busy,
|
|
40741
41689
|
onClick: () => {
|
|
40742
41690
|
setConfirmOpen(true);
|
|
@@ -40804,6 +41752,13 @@ function RollbackCard({ recoveryApi, t }) {
|
|
|
40804
41752
|
leftovers: segment.leftoversCount
|
|
40805
41753
|
}) }),
|
|
40806
41754
|
segment.childSessionId !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: t("rollback.rewind.result.child", { id: segment.childSessionId }) }),
|
|
41755
|
+
segment.foreignSkipped > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: t("rollback.result.foreignSkipped", { n: segment.foreignSkipped }) }),
|
|
41756
|
+
segment.selectionSkipped > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: t("rollback.result.selectionSkipped", { n: segment.selectionSkipped }) }),
|
|
41757
|
+
segment.mergedCount > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: t("rollback.result.merged", { n: segment.mergedCount }) }),
|
|
41758
|
+
segment.conflictCount > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: t("rollback.result.conflict", { n: segment.conflictCount }) }),
|
|
41759
|
+
segment.unavailableCount > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: t("rollback.result.unavailable", { n: segment.unavailableCount }) }),
|
|
41760
|
+
segment.concurrentCount > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: t("rollback.result.concurrent", { n: segment.concurrentCount }) }),
|
|
41761
|
+
segment.conflictPaths.map((line) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: line }, "conflict:" + line)),
|
|
40807
41762
|
segment.detail.map((line) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: line }, line)),
|
|
40808
41763
|
segment.guidance.map((row) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", { children: [t(dyn(row.key)), row.detail !== null ? " — " + row.detail : ""] }, row.key + (row.detail ?? "")))
|
|
40809
41764
|
]
|
|
@@ -47794,6 +48749,14 @@ const zh$2 = {
|
|
|
47794
48749
|
"rollback.preview.notice.skipped": "{n} 项在留点时被跳过(未记录;已计入证明名单 ⇒ 不参与删除判据)",
|
|
47795
48750
|
"rollback.preview.notice.truncated": "该点捕获被上限截断(超单文件上限 / 字节预算 / 文件数预算);删除判据另看证明名单(路径索引)是否完整",
|
|
47796
48751
|
"rollback.preview.files.title": "将被回退的文件:",
|
|
48752
|
+
"rollback.preview.select.foreign": "其它对话改过",
|
|
48753
|
+
"rollback.preview.select.toggle": "「{path}」:勾上则这次回退恢复它",
|
|
48754
|
+
"rollback.result.foreignSkipped": "{n} 个文件在留点后被其它对话改过,这次没有回退它们",
|
|
48755
|
+
"rollback.result.merged": "{n} 个文件已合并:撤销本次对话的改动,保留其它对话的改动",
|
|
48756
|
+
"rollback.result.conflict": "{n} 个文件两侧改到同一处,已保持原样 —— 需要你手工处理",
|
|
48757
|
+
"rollback.result.unavailable": "{n} 个文件无法安全撤销(缺少中间版本 / 二进制 / 差异过大),已保持原样",
|
|
48758
|
+
"rollback.result.concurrent": "{n} 个文件在回退过程中又被改过,已保持原样",
|
|
48759
|
+
"rollback.result.selectionSkipped": "{n} 个文件按你的勾选跳过了",
|
|
47797
48760
|
"rollback.preview.files.empty": "工作区与该回退点一致,无需恢复",
|
|
47798
48761
|
"rollback.preview.files.unavailable": "该回退点的工作区态没有可用的记录(原因:{reason}),无需恢复",
|
|
47799
48762
|
"rollback.preview.files.unavailableSession": "该回退点的工作区态没有可用的记录(原因:{reason});会话仍会回退到该点之前",
|
|
@@ -47803,6 +48766,9 @@ const zh$2 = {
|
|
|
47803
48766
|
"rollback.preview.file.removed": "−{n}",
|
|
47804
48767
|
/** 整文件删除(用户 2026-10-12 第 6 条):写「删除」而不是 `+0 −N` —— 那是两件事。 */
|
|
47805
48768
|
"rollback.preview.file.deleted": "删除",
|
|
48769
|
+
"rollback.preview.file.skipped": "不会改动(与其它对话的改动冲突,或无法安全合并)",
|
|
48770
|
+
"rollback.diff.merged": "下面是合并后的结果:撤销本对话的改动、保留其它对话的改动",
|
|
48771
|
+
"rollback.diff.skipped": "这次回退不会改动它(与其它对话的改动冲突,或无法安全合并)",
|
|
47806
48772
|
"rollback.preview.file.unknown": "行数未统计",
|
|
47807
48773
|
"rollback.preview.file.unknownHint": "这些文件的行数没有统计出来(文件过大、不是文本或内容副本读不出来)—— 回退仍会照常覆盖它们。",
|
|
47808
48774
|
"rollback.diff.viewHint": "查看差异:{path}",
|
|
@@ -48324,6 +49290,14 @@ const en$2 = {
|
|
|
48324
49290
|
"rollback.preview.notice.skipped": "{n} item(s) were skipped at capture time (not recorded; they are in the proof list, so they are outside the deletion test)",
|
|
48325
49291
|
"rollback.preview.notice.truncated": "Capture was truncated by a limit (per-file / byte budget / file-count budget); whether anything is deleted also depends on whether the proof list (path index) is complete",
|
|
48326
49292
|
"rollback.preview.files.title": "Files that will be rewound:",
|
|
49293
|
+
"rollback.preview.select.foreign": "Changed by another conversation",
|
|
49294
|
+
"rollback.preview.select.toggle": "\"{path}\": check to restore it in this rewind",
|
|
49295
|
+
"rollback.result.foreignSkipped": "{n} file(s) were changed by another conversation after this point; this rewind left them untouched",
|
|
49296
|
+
"rollback.result.merged": "{n} file(s) merged: the change from this conversation was reverted and the change from the other conversation was kept",
|
|
49297
|
+
"rollback.result.conflict": "{n} file(s) were changed on both sides in the same place and were left as they are — they need your decision",
|
|
49298
|
+
"rollback.result.unavailable": "{n} file(s) could not be reverted safely (no common ancestor / binary / diff too large) and were left as they are",
|
|
49299
|
+
"rollback.result.concurrent": "{n} file(s) changed again while this rewind was running and were left as they are",
|
|
49300
|
+
"rollback.result.selectionSkipped": "{n} file(s) skipped by your selection",
|
|
48327
49301
|
"rollback.preview.files.empty": "The workspace already matches this rollback point, nothing to restore",
|
|
48328
49302
|
"rollback.preview.files.unavailable": "The workspace state of this rollback point has no usable record (reason: {reason}), nothing to restore",
|
|
48329
49303
|
"rollback.preview.files.unavailableSession": "The workspace state of this rollback point has no usable record (reason: {reason}); the session will still be rewound to before this point",
|
|
@@ -48332,6 +49306,9 @@ const en$2 = {
|
|
|
48332
49306
|
"rollback.preview.file.added": "+{n}",
|
|
48333
49307
|
"rollback.preview.file.removed": "−{n}",
|
|
48334
49308
|
"rollback.preview.file.deleted": "Delete",
|
|
49309
|
+
"rollback.preview.file.skipped": "Left unchanged (conflicts with another conversation, or cannot be merged safely)",
|
|
49310
|
+
"rollback.diff.merged": "Below is the merged result: the change from this conversation is reverted and the change from the other conversation is kept",
|
|
49311
|
+
"rollback.diff.skipped": "This rewind will not change it (it conflicts with another conversation, or cannot be merged safely)",
|
|
48335
49312
|
"rollback.preview.file.unknown": "line counts not measured",
|
|
48336
49313
|
"rollback.preview.file.unknownHint": "Line counts could not be measured for these files (too large, not text, or the content copy is unreadable) — the rewind will still overwrite them.",
|
|
48337
49314
|
"rollback.diff.viewHint": "View diff: {path}",
|
|
@@ -49282,9 +50259,15 @@ function RollbackReviewDialog({ sessionId, turn, port, rt, t, openChildSession,
|
|
|
49282
50259
|
*
|
|
49283
50260
|
* 为什么必须接管(而不是追加):该 key 没有 children 表(宿主只对 turn-tail 声明了子位),
|
|
49284
50261
|
* framework 没有「往用户消息里加 UI」的位子;唯一合法做法是 priority -1 遮蔽宿主的
|
|
49285
|
-
* `UserMessageNodeView
|
|
49286
|
-
*
|
|
49287
|
-
*
|
|
50262
|
+
* `UserMessageNodeView`,然后在自己的渲染里产出那条气泡。
|
|
50263
|
+
*
|
|
50264
|
+
* 正文**谁来画**在 0.2.1-alpha.3 换过一代(issue #92):宿主把图片位搬进
|
|
50265
|
+
* `conversation.chat.user.content` factory 的 children,并删掉了节点 props 上的 `renderMessageImages`。
|
|
50266
|
+
* 因此现在的口径是 **优先委托宿主的 content factory**(`renderFactorySlot(CHAT_USER_CONTENT_FACTORY, …)`),
|
|
50267
|
+
* 只有在宿主**没有**注册那条 factory 时(≤0.2.0)才回落到自绘气泡 —— 自绘气泡同时是那次调用的
|
|
50268
|
+
* `options.fallback`,所以三格(老宿主 / 新宿主 / 宿主中途撤掉 factory)都有确定行为,
|
|
50269
|
+
* 不会出现空白气泡。自绘那一格图片只能走 owner 的 `renderMessageImages`(宿主的 CSS Modules 与组件
|
|
50270
|
+
* 全是 ui-chat 私有、不可导入,外观靠本仓库 CSS 逼近)。
|
|
49288
50271
|
*
|
|
49289
50272
|
* 三件硬约束(本文件是它们的落点):
|
|
49290
50273
|
* ① **用户消息绝不消失**:整个子树包在 `ChatEntryErrorBoundary` 里,抛错就降级成
|
|
@@ -49307,26 +50290,31 @@ const NEWLINE = String.fromCharCode(10);
|
|
|
49307
50290
|
*/
|
|
49308
50291
|
function FileCard({ file, size }) {
|
|
49309
50292
|
const DshIcon = hostFileTypeIcon();
|
|
50293
|
+
/**
|
|
50294
|
+
* 元信息 = 宿主 `.fileMeta` 的**同一组合**:大写的扩展名(≤8 字符)+ 体积文本,空格连接。
|
|
50295
|
+
* 宿主那行是「EXT SIZE」一行的次级小字(不是我们此前那个「文件名旁边挂一个体积」的排法)。
|
|
50296
|
+
*/
|
|
50297
|
+
const meta = [file.ext === null ? "" : file.ext.toUpperCase().slice(0, 8), size ?? ""].filter((part) => part !== "").join(" ");
|
|
49310
50298
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
49311
50299
|
className: config_manager_module_css_default.chatFileCard,
|
|
49312
50300
|
title: file.name !== "" ? file.name : void 0,
|
|
49313
|
-
children: [
|
|
49314
|
-
|
|
49315
|
-
|
|
49316
|
-
|
|
49317
|
-
|
|
49318
|
-
|
|
49319
|
-
|
|
49320
|
-
|
|
49321
|
-
|
|
50301
|
+
children: [DshIcon !== null && file.name !== "" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DshIcon, {
|
|
50302
|
+
path: file.name,
|
|
50303
|
+
size: 28,
|
|
50304
|
+
className: config_manager_module_css_default.chatFileIcon
|
|
50305
|
+
}) : file.ext !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
50306
|
+
className: config_manager_module_css_default.chatFileExt,
|
|
50307
|
+
children: file.ext
|
|
50308
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
50309
|
+
className: config_manager_module_css_default.chatFileContent,
|
|
50310
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
49322
50311
|
className: config_manager_module_css_default.chatFileName,
|
|
49323
50312
|
children: file.name !== "" ? file.name : "?"
|
|
49324
|
-
}),
|
|
49325
|
-
size !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
50313
|
+
}), meta !== "" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
49326
50314
|
className: config_manager_module_css_default.chatFileMeta,
|
|
49327
|
-
children:
|
|
49328
|
-
})
|
|
49329
|
-
]
|
|
50315
|
+
children: meta
|
|
50316
|
+
})]
|
|
50317
|
+
})]
|
|
49330
50318
|
});
|
|
49331
50319
|
}
|
|
49332
50320
|
/** 未知块:宿主用 JsonBlock,这里用原生 `<details>` + 预格式化 JSON(零新增依赖、零新增通道)。 */
|
|
@@ -49363,15 +50351,24 @@ function ChatEntryCopyAction({ text, t }) {
|
|
|
49363
50351
|
if (ok) setCopied(true);
|
|
49364
50352
|
});
|
|
49365
50353
|
}, [copied, text]);
|
|
50354
|
+
/**
|
|
50355
|
+
* 图标 = **DSH 原生那两颗**(2026-10-17 用户要求「复制 icon 与动画都用 DSH 原生的」):
|
|
50356
|
+
* 宿主 MessageIconActions 的复制反馈就是 `IconCopyOutlineRegular → IconCheckOutlineRegular` 的
|
|
50357
|
+
* **瞬时切换**(宿主 `.action svg` 没有任何 transition/animation —— 它的「动画」就是这一次换图)。
|
|
50358
|
+
* 本仓库的 `CopyStateIcon`(morphicons 形变)只在**拿不到宿主图标的老宿主**上兜底。
|
|
50359
|
+
*/
|
|
50360
|
+
const HostCopyIcon = hostIcon("IconCopyOutlineRegular");
|
|
50361
|
+
const HostCheckIcon = hostIcon("IconCheckOutlineRegular");
|
|
49366
50362
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
49367
50363
|
type: "button",
|
|
49368
50364
|
className: config_manager_module_css_default.chatActionBtn,
|
|
49369
50365
|
"aria-label": copied ? t("chat.entry.copied") : t("chat.entry.copy"),
|
|
49370
50366
|
title: copied ? t("chat.entry.copied") : t("chat.entry.copy"),
|
|
49371
50367
|
onClick: onCopy,
|
|
49372
|
-
|
|
50368
|
+
"data-copy-state": copied ? "copied" : "idle",
|
|
50369
|
+
children: HostCopyIcon !== null && HostCheckIcon !== null ? copied ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(HostCheckIcon, { size: 15 }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(HostCopyIcon, { size: 15 }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(CopyStateIcon, {
|
|
49373
50370
|
done: copied,
|
|
49374
|
-
size:
|
|
50371
|
+
size: 15
|
|
49375
50372
|
})
|
|
49376
50373
|
});
|
|
49377
50374
|
}
|
|
@@ -49395,7 +50392,10 @@ function ChatEntryCopyAction({ text, t }) {
|
|
|
49395
50392
|
* 订阅入口可见性信号(issue #88)。
|
|
49396
50393
|
*
|
|
49397
50394
|
* 为什么要在组件里订阅而不是把开关当 prop 往下传:入口是**遮蔽宿主渲染器**注册的(无常),
|
|
49398
|
-
* 开关变化时没有任何父级会重渲染它 ——
|
|
50395
|
+
* 开关变化时没有任何父级会重渲染它 —— 状态只能靠这条信号推。订阅开销 = 一个 Set 里的回调。
|
|
50396
|
+
*
|
|
50397
|
+
* 2026-10-17 起登记本身随开关撤销(关闭 ⇒ 让出 user cell、本组件直接卸载,宿主原生气泡接管回来),
|
|
50398
|
+
* 所以这里是**兜底**:万一信号已翻转而本组件还活着,也绝不画出那颗按钮。
|
|
49399
50399
|
*/
|
|
49400
50400
|
function useRollbackEntryEnabled() {
|
|
49401
50401
|
const [value, setValue] = (0, react.useState)(() => isRollbackEntryEnabled());
|
|
@@ -49404,7 +50404,7 @@ function useRollbackEntryEnabled() {
|
|
|
49404
50404
|
}), []);
|
|
49405
50405
|
return value;
|
|
49406
50406
|
}
|
|
49407
|
-
function ChatEntryBody({ node, sessionId, openFile, openSkill, renderMessageImages, t, rt, port, openChildSession, archiveParentSession, startFreshSession, openDiff, fileIcon }) {
|
|
50407
|
+
function ChatEntryBody({ node, sessionId, openFile, openSkill, renderMessageImages, loadImage, renderFactorySlot, t, rt, port, openChildSession, archiveParentSession, startFreshSession, openDiff, fileIcon }) {
|
|
49408
50408
|
const view = (0, react.useMemo)(() => buildChatEntryView(node), [node]);
|
|
49409
50409
|
const [lookup, setLookup] = (0, react.useState)(null);
|
|
49410
50410
|
/** 有界重试窗口是否还开着(**状态诚实**的唯一开关,R1)—— 由状态机的 `onState` 驱动。 */
|
|
@@ -49473,10 +50473,16 @@ function ChatEntryBody({ node, sessionId, openFile, openSkill, renderMessageImag
|
|
|
49473
50473
|
setDialogTurn(button.turn);
|
|
49474
50474
|
}, [button]);
|
|
49475
50475
|
const bubble = view.bubble;
|
|
50476
|
+
/** 回退图标同样走宿主(`IconRefreshOutlineRegular`):与复制图标同一套字形/描边;拿不到回落 RefreshIcon。 */
|
|
50477
|
+
const HostRefreshIcon = hostIcon("IconRefreshOutlineRegular");
|
|
49476
50478
|
/**
|
|
49477
50479
|
* 附件按**content 原始顺序**输出(宿主 `attachments.map` 同构):图片走 owner 的
|
|
49478
50480
|
* `renderMessageImages`(每张一次调用),文件走文件卡 —— 两类**共用同一条序列**,
|
|
49479
50481
|
* 绝不重排成「先图片后文件」(t4 复核 D2)。
|
|
50482
|
+
*
|
|
50483
|
+
* 这条自绘路径**只在宿主没有 content factory 时**才会上屏(见下面的 `content`):
|
|
50484
|
+
* 0.2.1 起 `renderMessageImages` 已不存在,此时图片位置如实显示提示文本 —— 但那一格
|
|
50485
|
+
* 正常情况下走的是宿主自己的 factory,根本到不了这里。
|
|
49480
50486
|
*/
|
|
49481
50487
|
const canRenderImages = typeof renderMessageImages === "function";
|
|
49482
50488
|
const attachmentNodes = planChatEntryAttachments(bubble).map((item) => item.kind === "image" ? canRenderImages ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react.Fragment, { children: renderMessageImages(item.owner) }, "image:" + String(item.index)) : null : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(FileCard, {
|
|
@@ -49496,40 +50502,72 @@ function ChatEntryBody({ node, sessionId, openFile, openSkill, renderMessageImag
|
|
|
49496
50502
|
openSkill
|
|
49497
50503
|
});
|
|
49498
50504
|
const reasonKey = button.kind === "disabled" ? button.key : null;
|
|
50505
|
+
/**
|
|
50506
|
+
* **自绘气泡**(= 0.2.1 之前那条路径,style 与宿主 .userStack/.bubble 逐条对齐见本文件头注释)。
|
|
50507
|
+
*
|
|
50508
|
+
* 两个身份:① 老宿主(≤0.2.0)没有 `conversation.chat.user.content` 这条 factory,正文由它承担;
|
|
50509
|
+
* ② 新宿主上它是那次 factory 调用的 **fallback** —— 定义缺失(或宿主中途撤掉)时由
|
|
50510
|
+
* `FactoryOutlet` 回落,用户消息因此**永远不会**变成空白。
|
|
50511
|
+
*
|
|
50512
|
+
* 图片:这条路径只能走 owner 的 `renderMessageImages`(0.2.1 起已不存在)⇒ 那一格如实显示提示文本,
|
|
50513
|
+
* 而不是静默消失;新宿主正常情况下根本不会渲染到这里(走的是宿主自己的 content factory)。
|
|
50514
|
+
*/
|
|
50515
|
+
const ownContent = /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
50516
|
+
className: config_manager_module_css_default.chatEntryStack,
|
|
50517
|
+
children: [
|
|
50518
|
+
hasAttachments && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
50519
|
+
className: config_manager_module_css_default.chatAttachmentRow,
|
|
50520
|
+
"data-message-attachments": "",
|
|
50521
|
+
children: attachmentNodes
|
|
50522
|
+
}),
|
|
50523
|
+
bubble.showBubble && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
50524
|
+
className: config_manager_module_css_default.chatBubble,
|
|
50525
|
+
children: [bubble.text !== "" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
50526
|
+
className: config_manager_module_css_default.chatBubbleText,
|
|
50527
|
+
children: hostText === null ? bubble.text : hostText
|
|
50528
|
+
}), bubble.raw.map((block) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RawBlock, {
|
|
50529
|
+
payload: block.payload,
|
|
50530
|
+
label: t("chat.entry.extraBlock"),
|
|
50531
|
+
truncatedLabel: (total) => t("chat.entry.truncated", { total })
|
|
50532
|
+
}, "raw-" + block.id))]
|
|
50533
|
+
}),
|
|
50534
|
+
!canRenderImages && bubble.images.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
50535
|
+
className: config_manager_module_css_default.chatEntryNotice,
|
|
50536
|
+
children: t("chat.entry.noImageRenderer")
|
|
50537
|
+
}),
|
|
50538
|
+
view.referenceLabels.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
50539
|
+
className: config_manager_module_css_default.chatEntryReference,
|
|
50540
|
+
"data-ref-chip": "",
|
|
50541
|
+
children: t("chat.entry.referenceSummary", { labels: view.referenceLabels.join(t("chat.entry.referenceSeparator")) })
|
|
50542
|
+
})
|
|
50543
|
+
]
|
|
50544
|
+
});
|
|
50545
|
+
/**
|
|
50546
|
+
* 正文 / 附件 / 引用(issue #92):**优先委托宿主自己的 content factory**。
|
|
50547
|
+
*
|
|
50548
|
+
* 为什么不能再自绘:0.2.1-alpha.3 起宿主把图片位搬进 `conversation.chat.user.content` 的 children
|
|
50549
|
+
* (`conversation.chat.user.images`),并在节点 props 上删掉了 `renderMessageImages` —— 自己复刻气泡
|
|
50550
|
+
* 就必然拿不到图片位。委托之后,图片由 ui-attachment 在该 factory 的渲染上下文里 renderSlot,
|
|
50551
|
+
* 正文/文件卡/引用/未知块也全部回到宿主实现 ⇒ 与宿主原生气泡**同构**,且以后宿主再改图片实现也不用跟。
|
|
50552
|
+
*
|
|
50553
|
+
* 入参逐字对齐宿主 `UserStyleBubble`(`content` / `loadImage` / `facts` / `interactive: true`),
|
|
50554
|
+
* 组装全在纯层 `buildHostUserContentInput`。**判据不是 `typeof renderFactorySlot === 'function'`** ——
|
|
50555
|
+
* 该席位在新旧宿主上都存在(ui-renderer 的 standardKit 无条件发放),真正的裁决点是这条 factory
|
|
50556
|
+
* 注册没注册:`FactoryOutlet` 在读不到定义时渲染我们给的 `fallback`(= 上面的自绘气泡)——
|
|
50557
|
+
* 于是「老宿主 ≤0.2.0」「新宿主 ≥0.2.1」「宿主中途撤掉 factory」三格都有确定行为,不必开两条发布线。
|
|
50558
|
+
* 调用本身不吃任何副作用,返回不透明 ReactNode(React 元素),空定义时是 fallback 的元素包装。
|
|
50559
|
+
*/
|
|
50560
|
+
const content = typeof renderFactorySlot === "function" ? renderFactorySlot(CHAT_USER_CONTENT_FACTORY, {
|
|
50561
|
+
content: view.hostContent.content,
|
|
50562
|
+
loadImage,
|
|
50563
|
+
facts: view.hostContent.facts,
|
|
50564
|
+
interactive: true
|
|
50565
|
+
}, { fallback: ownContent }) : ownContent;
|
|
49499
50566
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
49500
50567
|
className: config_manager_module_css_default.chatEntryScope,
|
|
49501
50568
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
49502
50569
|
className: config_manager_module_css_default.chatEntryRow,
|
|
49503
|
-
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
49504
|
-
className: config_manager_module_css_default.chatEntryStack,
|
|
49505
|
-
children: [
|
|
49506
|
-
hasAttachments && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
49507
|
-
className: config_manager_module_css_default.chatAttachmentRow,
|
|
49508
|
-
"data-message-attachments": "",
|
|
49509
|
-
children: attachmentNodes
|
|
49510
|
-
}),
|
|
49511
|
-
bubble.showBubble && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
49512
|
-
className: config_manager_module_css_default.chatBubble,
|
|
49513
|
-
children: [bubble.text !== "" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
49514
|
-
className: config_manager_module_css_default.chatBubbleText,
|
|
49515
|
-
children: hostText === null ? bubble.text : hostText
|
|
49516
|
-
}), bubble.raw.map((block) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RawBlock, {
|
|
49517
|
-
payload: block.payload,
|
|
49518
|
-
label: t("chat.entry.extraBlock"),
|
|
49519
|
-
truncatedLabel: (total) => t("chat.entry.truncated", { total })
|
|
49520
|
-
}, "raw-" + block.id))]
|
|
49521
|
-
}),
|
|
49522
|
-
!canRenderImages && bubble.images.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
49523
|
-
className: config_manager_module_css_default.chatEntryNotice,
|
|
49524
|
-
children: t("chat.entry.noImageRenderer")
|
|
49525
|
-
}),
|
|
49526
|
-
view.referenceLabels.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
49527
|
-
className: config_manager_module_css_default.chatEntryReference,
|
|
49528
|
-
"data-ref-chip": "",
|
|
49529
|
-
children: t("chat.entry.referenceSummary", { labels: view.referenceLabels.join(t("chat.entry.referenceSeparator")) })
|
|
49530
|
-
})
|
|
49531
|
-
]
|
|
49532
|
-
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
50570
|
+
children: [content, /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
49533
50571
|
className: config_manager_module_css_default.chatEntryActions,
|
|
49534
50572
|
children: [
|
|
49535
50573
|
view.clock !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
@@ -49549,7 +50587,7 @@ function ChatEntryBody({ node, sessionId, openFile, openSkill, renderMessageImag
|
|
|
49549
50587
|
onClick: openDialog,
|
|
49550
50588
|
"data-chat-entry-window-open": windowOpen ? "" : void 0,
|
|
49551
50589
|
"data-chat-entry-window-closed": windowOpen ? void 0 : "",
|
|
49552
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RefreshIcon, { size:
|
|
50590
|
+
children: HostRefreshIcon === null ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RefreshIcon, { size: 15 }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(HostRefreshIcon, { size: 15 })
|
|
49553
50591
|
})
|
|
49554
50592
|
]
|
|
49555
50593
|
})]
|
|
@@ -49653,6 +50691,11 @@ function ChatEntryNodeView(props) {
|
|
|
49653
50691
|
* 2026-10-12(用户要求「聊天内回退入口只有每条用户消息」):旧的「整回合」档连同它的偏好模块
|
|
49654
50692
|
* (`chat-entry-pref` / `chat-entry-mount`)与回合尾入口(`conversation.chat.turnTail`)一并删除 ——
|
|
49655
50693
|
* 入口恒为每条用户消息气泡里的那一颗,于是这里不再有偏好门,也不再需要「切档时重新评估」的订阅。
|
|
50694
|
+
*
|
|
50695
|
+
* 2026-10-17(用户要求):开关**关闭时不得再接管用户消息气泡**。原实现是「登记常驻、只收起按钮」——
|
|
50696
|
+
* 功能关掉之后那条气泡仍由我们代画(即使正文已委托宿主 factory,外层壳与动作行仍是我们的)。
|
|
50697
|
+
* 现在登记本身随开关出现 / 撤销(`registerChatNodeEntryWhenEnabled`):关掉即让出 user cell,
|
|
50698
|
+
* 宿主 `UserMessageNodeView` 原样接管回来。
|
|
49656
50699
|
*/
|
|
49657
50700
|
/** 诊断(ASCII,与界面文案无关;console.* 实参不触发 i18n 守卫)。 */
|
|
49658
50701
|
function warnChatNode(message) {
|
|
@@ -49705,6 +50748,35 @@ function registerChatNodeEntry(options) {
|
|
|
49705
50748
|
return () => {};
|
|
49706
50749
|
}
|
|
49707
50750
|
}
|
|
50751
|
+
function registerChatNodeEntryWhenEnabled(options) {
|
|
50752
|
+
/** 当前登记的解绑函数;null = 现在没有登记(= 宿主渲染器在渲染那条 cell)。 */
|
|
50753
|
+
let disposeEntry = null;
|
|
50754
|
+
const sync = () => {
|
|
50755
|
+
if (options.isEnabled() === true) {
|
|
50756
|
+
if (disposeEntry === null) disposeEntry = registerChatNodeEntry({
|
|
50757
|
+
probe: options.probe,
|
|
50758
|
+
register: options.register,
|
|
50759
|
+
...options.warn === void 0 ? {} : { warn: options.warn }
|
|
50760
|
+
});
|
|
50761
|
+
return;
|
|
50762
|
+
}
|
|
50763
|
+
if (disposeEntry !== null) {
|
|
50764
|
+
const dispose = disposeEntry;
|
|
50765
|
+
disposeEntry = null;
|
|
50766
|
+
dispose();
|
|
50767
|
+
}
|
|
50768
|
+
};
|
|
50769
|
+
const unsubscribe = options.subscribe(sync);
|
|
50770
|
+
sync();
|
|
50771
|
+
return () => {
|
|
50772
|
+
unsubscribe();
|
|
50773
|
+
if (disposeEntry !== null) {
|
|
50774
|
+
const dispose = disposeEntry;
|
|
50775
|
+
disposeEntry = null;
|
|
50776
|
+
dispose();
|
|
50777
|
+
}
|
|
50778
|
+
};
|
|
50779
|
+
}
|
|
49708
50780
|
//#endregion
|
|
49709
50781
|
//#region src/client/chat/rollback-diff-tab.ts
|
|
49710
50782
|
/**
|
|
@@ -50007,6 +51079,10 @@ function apply(ctx) {
|
|
|
50007
51079
|
* 并留一条 warn 级日志便于排障。
|
|
50008
51080
|
*
|
|
50009
51081
|
* 判据读的是 storage 响应(`rollbackEntryVisible`:老宿主没有该字段 ⇒ 按「默认开」,与那一版语义一致)。
|
|
51082
|
+
*
|
|
51083
|
+
* 2026-10-17 起这条信号还决定**要不要接管用户消息气泡**(不再只是按钮可见性):信号为假时
|
|
51084
|
+
* `registerChatNodeEntryWhenEnabled` 一次都不登记,那条 cell 由宿主 `UserMessageNodeView` 原生渲染
|
|
51085
|
+
* —— 与「关掉功能后连查询都不发」同一条口径:关掉 = 整条入口链路不存在。
|
|
50010
51086
|
*/
|
|
50011
51087
|
recoveryApi.rollbackPointStorage?.().then((status) => {
|
|
50012
51088
|
setRollbackEntryEnabled(rollbackEntryVisible(status));
|
|
@@ -50101,10 +51177,14 @@ function apply(ctx) {
|
|
|
50101
51177
|
* 宿主 UserMessageNodeView 是唯一合法做法,那条气泡由我们自复刻。依据(含 -1 为何是唯一合法优先级)
|
|
50102
51178
|
* → `src/client/chat/chat-slots.ts` 头部注释。
|
|
50103
51179
|
*
|
|
51180
|
+
* **开关关着就完全不接管**(2026-10-17 用户要求):登记由 `registerChatNodeEntryWhenEnabled` 驱动 ——
|
|
51181
|
+
* 关掉回合自动留点后让出 user cell,那条消息回到宿主原生气泡(旧实现是「登记常驻、只收起按钮」,
|
|
51182
|
+
* 气泡仍由我们代画,用户看到的就是「关掉了还在接管」)。开关重新打开时登记当场补上,不需要重载插件。
|
|
51183
|
+
*
|
|
50104
51184
|
* 形态探测 + 失败软化在 `registerChatNodeEntry`:0.1.x 的 ui-chat 契约不同(非 keyed)或注册抛错,
|
|
50105
51185
|
* 都只丢这一个入口,绝不打挂本插件其余槽位与宿主启动。
|
|
50106
51186
|
*/
|
|
50107
|
-
ctx.slots.inject(CHAT_NODE_SLOT, () =>
|
|
51187
|
+
ctx.slots.inject(CHAT_NODE_SLOT, () => registerChatNodeEntryWhenEnabled({
|
|
50108
51188
|
probe: {
|
|
50109
51189
|
spec: (key) => ctx.slots.spec(key),
|
|
50110
51190
|
entriesOfSlot: (key) => ctx.slots.entriesOfSlot?.(key)
|
|
@@ -50115,7 +51195,9 @@ function apply(ctx) {
|
|
|
50115
51195
|
priority: -1,
|
|
50116
51196
|
locale: CHAT_NS,
|
|
50117
51197
|
inject: chatEntryInjected
|
|
50118
|
-
}, ChatEntryNodeView)
|
|
51198
|
+
}, ChatEntryNodeView),
|
|
51199
|
+
isEnabled: isRollbackEntryEnabled,
|
|
51200
|
+
subscribe: subscribeRollbackEntryEnabled
|
|
50119
51201
|
}));
|
|
50120
51202
|
/**
|
|
50121
51203
|
* ── 「查看」→ DSH 右侧栏「回滚差异」标签页(**只读**)──────────────────────────────
|