dsh-config-manager 0.1.48 → 0.1.49
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/client.d.ts +5 -3
- package/lib/client.js +206 -126
- package/lib/client.js.map +1 -1
- package/lib/core/restore.d.ts +7 -0
- package/lib/core/restore.js +4 -0
- package/lib/core/restore.js.map +1 -1
- package/lib/core/run-registry.d.ts +11 -4
- package/lib/core/run-registry.js +14 -7
- package/lib/core/run-registry.js.map +1 -1
- package/lib/index.d.ts +7 -1
- package/lib/index.js +54 -8
- package/lib/index.js.map +1 -1
- package/package.json +1 -1
- package/src/client/api.ts +3 -1
- package/src/client/config-manager.module.css +22 -0
- package/src/client/export/ExportView.tsx +2 -2
- package/src/client/import/ImportWizardView.tsx +22 -16
- package/src/client/run-store.test.ts +112 -1
- package/src/client/run-store.ts +73 -4
- package/src/client/snapshots/SnapshotsPanel.tsx +20 -2
- package/src/client/sync/SyncHistoryView.tsx +1 -0
- package/src/core/restore.ts +7 -0
- package/src/core/run-registry.test.ts +40 -0
- package/src/core/run-registry.ts +16 -9
- package/src/index.ts +53 -8
package/lib/client.js
CHANGED
|
@@ -2322,6 +2322,7 @@ function defaultSnapshotsState() {
|
|
|
2322
2322
|
return {
|
|
2323
2323
|
selectedId: null,
|
|
2324
2324
|
plan: null,
|
|
2325
|
+
running: false,
|
|
2325
2326
|
report: null,
|
|
2326
2327
|
actionError: null,
|
|
2327
2328
|
error: null,
|
|
@@ -2402,6 +2403,7 @@ function toSnapshotsStoreSlice(s) {
|
|
|
2402
2403
|
return {
|
|
2403
2404
|
selectedId: s.selectedId,
|
|
2404
2405
|
plan: s.plan,
|
|
2406
|
+
running: s.running,
|
|
2405
2407
|
report: s.report,
|
|
2406
2408
|
actionError: s.actionError,
|
|
2407
2409
|
error: s.error,
|
|
@@ -2440,7 +2442,10 @@ function toPersistedState(state) {
|
|
|
2440
2442
|
}
|
|
2441
2443
|
},
|
|
2442
2444
|
market: state.market,
|
|
2443
|
-
snapshots:
|
|
2445
|
+
snapshots: {
|
|
2446
|
+
...state.snapshots,
|
|
2447
|
+
running: false
|
|
2448
|
+
}
|
|
2444
2449
|
};
|
|
2445
2450
|
}
|
|
2446
2451
|
/** 解析 + 轻量校验持久化状态;损坏/版本不符返回 null(调用方回退默认并清键)。 */
|
|
@@ -2725,7 +2730,8 @@ var RunStore = class {
|
|
|
2725
2730
|
},
|
|
2726
2731
|
snapshots: {
|
|
2727
2732
|
...defaultSnapshotsState(),
|
|
2728
|
-
...parsed.snapshots
|
|
2733
|
+
...parsed.snapshots,
|
|
2734
|
+
running: false
|
|
2729
2735
|
}
|
|
2730
2736
|
};
|
|
2731
2737
|
if (this.state.import.containerEncrypted && this.state.import.phase !== "preview" && this.state.import.phase !== "decrypt-archive") this.state.import.phase = "decrypt-archive";
|
|
@@ -2823,6 +2829,18 @@ var RunStore = class {
|
|
|
2823
2829
|
error: "上次导入任务已结束或超过保留期,结果无法恢复,请重新导入"
|
|
2824
2830
|
} });
|
|
2825
2831
|
}
|
|
2832
|
+
const restoreRun = active.find((r) => r.kind === "restore");
|
|
2833
|
+
if (restoreRun !== void 0) {
|
|
2834
|
+
resumed = true;
|
|
2835
|
+
this.patch({ snapshots: {
|
|
2836
|
+
running: true,
|
|
2837
|
+
actionError: null
|
|
2838
|
+
} });
|
|
2839
|
+
this.pollRun(restoreRun.runId, "restore");
|
|
2840
|
+
} else if (this.state.snapshots.running) this.patch({ snapshots: {
|
|
2841
|
+
running: false,
|
|
2842
|
+
actionError: "上次恢复任务已结束但结果无法恢复,请重新执行"
|
|
2843
|
+
} });
|
|
2826
2844
|
return resumed;
|
|
2827
2845
|
}
|
|
2828
2846
|
/** 停止全部轮询(视图卸载时调用;服务端执行不受影响,重开面板再 resume)。 */
|
|
@@ -2910,7 +2928,11 @@ var RunStore = class {
|
|
|
2910
2928
|
patchProgress(kind, state) {
|
|
2911
2929
|
const event = mapRunProgress(kind, state);
|
|
2912
2930
|
if (kind === "export") this.patch({ export: { progress: event } });
|
|
2913
|
-
else this.patch({
|
|
2931
|
+
else if (kind === "restore") this.patch({ snapshots: { running: true } });
|
|
2932
|
+
else this.patch({ import: {
|
|
2933
|
+
progress: event,
|
|
2934
|
+
runId: state.runId
|
|
2935
|
+
} });
|
|
2914
2936
|
}
|
|
2915
2937
|
/** run 完成/失败:把 RunState.result 回填 store(并镜像回控制器)。 */
|
|
2916
2938
|
applySettled(kind, state) {
|
|
@@ -2938,6 +2960,19 @@ var RunStore = class {
|
|
|
2938
2960
|
} });
|
|
2939
2961
|
return;
|
|
2940
2962
|
}
|
|
2963
|
+
if (kind === "restore") {
|
|
2964
|
+
const result = state.result;
|
|
2965
|
+
if (state.status === "done" && result !== void 0 && typeof result === "object") this.patch({ snapshots: {
|
|
2966
|
+
running: false,
|
|
2967
|
+
report: result,
|
|
2968
|
+
actionError: null
|
|
2969
|
+
} });
|
|
2970
|
+
else this.patch({ snapshots: {
|
|
2971
|
+
running: false,
|
|
2972
|
+
actionError: state.error ?? "恢复失败(结果不可用)"
|
|
2973
|
+
} });
|
|
2974
|
+
return;
|
|
2975
|
+
}
|
|
2941
2976
|
const result = state.result;
|
|
2942
2977
|
if (state.status === "done" && result !== void 0 && typeof result === "object") {
|
|
2943
2978
|
const wizard = this.importWizardInst;
|
|
@@ -2983,6 +3018,10 @@ var RunStore = class {
|
|
|
2983
3018
|
runId: null,
|
|
2984
3019
|
error: "任务已结束或超过保留期,进度不可恢复"
|
|
2985
3020
|
} });
|
|
3021
|
+
else if (kind === "restore") this.patch({ snapshots: {
|
|
3022
|
+
running: false,
|
|
3023
|
+
actionError: "恢复任务已结束或超过保留期,进度不可恢复"
|
|
3024
|
+
} });
|
|
2986
3025
|
else {
|
|
2987
3026
|
this.importWizardInst?.reset();
|
|
2988
3027
|
this.patch({ import: {
|
|
@@ -3003,7 +3042,7 @@ var RunStore = class {
|
|
|
3003
3042
|
const runStore = new RunStore();
|
|
3004
3043
|
//#endregion
|
|
3005
3044
|
//#region \0config-manager-css:/home/runner/work/dsh-config-manager/dsh-config-manager/src/client/config-manager.module.css.js
|
|
3006
|
-
const css = "._367UGW_section{height:100%;min-height:0;color:var(--dsw-alias-label-primary);font-family:var(--dsw-font-family);flex-direction:column;gap:10px;font-size:13px;display:flex}._367UGW_sectionHeader{flex:none;align-items:center;gap:10px;display:flex}._367UGW_viewTabs{border-bottom:1px solid var(--dsw-alias-border-l1);flex:1;gap:2px;display:flex}._367UGW_viewTab{color:var(--dsw-alias-label-secondary);cursor:pointer;white-space:nowrap;background:0 0;border:none;border-bottom:2px solid #0000;border-radius:6px 6px 0 0;padding:7px 14px;font-size:13px}._367UGW_viewTab:hover{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-interactive-bg-hover)}._367UGW_viewTab[data-active]{color:var(--dsw-alias-label-primary);border-bottom-color:var(--dsw-alias-state-business-primary);font-weight:600}._367UGW_sectionBody{flex-direction:column;flex:1;min-height:0;display:flex;overflow-y:auto}._367UGW_viewBody{flex-direction:column;gap:12px;padding:4px 2px 16px;display:flex}._367UGW_sectionTitleBlock{flex-direction:column;gap:2px;display:flex}._367UGW_sectionTitle{color:var(--dsw-alias-label-primary);margin:0;font-size:15px;font-weight:700}._367UGW_sectionSubtitle{color:var(--dsw-alias-label-secondary);margin:0;font-size:12px;line-height:1.5}._367UGW_primaryButton{color:var(--dsw-alias-label-primary-foreground);background:var(--dsw-alias-button-info-fill);cursor:pointer;white-space:nowrap;border:none;border-radius:8px;align-items:center;gap:6px;padding:6px 14px;font-size:13px;font-weight:600;display:inline-flex}._367UGW_primaryButton:hover:not(:disabled){background:var(--dsw-alias-button-info-hover)}._367UGW_primaryButton:disabled{opacity:.5;cursor:default}._367UGW_ghostButton{color:var(--dsw-alias-label-primary);border:1px solid var(--dsw-alias-border-l2);cursor:pointer;white-space:nowrap;background:0 0;border-radius:8px;align-items:center;gap:6px;padding:5px 12px;font-size:12px;display:inline-flex}._367UGW_ghostButton:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}._367UGW_ghostButton:disabled{opacity:.45;cursor:default}._367UGW_dangerButton{color:var(--dsw-alias-state-error-primary);border:1px solid var(--dsw-alias-state-error-primary);cursor:pointer;white-space:nowrap;background:0 0;border-radius:8px;padding:5px 12px;font-size:12px}._367UGW_dangerButton:hover:not(:disabled){background:var(--dsw-alias-state-error-primary);color:var(--dsw-alias-label-primary-foreground)}._367UGW_dangerButton:disabled{opacity:.45;cursor:default}._367UGW_badge{border:1px solid var(--dsw-alias-border-l2);color:var(--dsw-alias-label-secondary);white-space:nowrap;border-radius:999px;padding:1px 8px;font-size:11px;line-height:1.6;display:inline-block}._367UGW_badgeInfo{color:var(--dsw-alias-state-business-primary);border-color:var(--dsw-alias-state-business-primary)}._367UGW_badgeOk{color:var(--dsw-alias-state-success-primary);border-color:var(--dsw-alias-state-success-primary)}._367UGW_badgeWarn{color:var(--dsw-alias-state-warn-primary);border-color:var(--dsw-alias-state-warn-primary)}._367UGW_badgeError{color:var(--dsw-alias-state-error-primary);border-color:var(--dsw-alias-state-error-primary)}._367UGW_banner{border:1px solid var(--dsw-alias-border-l2);color:var(--dsw-alias-label-secondary);overflow-wrap:anywhere;border-radius:8px;padding:8px 12px;font-size:12.5px;line-height:1.5}._367UGW_banner[data-kind=ok]{color:var(--dsw-alias-state-success-primary);border-color:var(--dsw-alias-state-success-primary)}._367UGW_banner[data-kind=error]{color:var(--dsw-alias-state-error-primary);border-color:var(--dsw-alias-state-error-primary)}._367UGW_banner[data-kind=info]{color:var(--dsw-alias-state-business-primary);border-color:var(--dsw-alias-state-business-primary)}._367UGW_banner[data-kind=warn]{color:var(--dsw-alias-state-warn-primary);border-color:var(--dsw-alias-state-warn-primary)}._367UGW_card{background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);border-radius:10px;flex-direction:column;flex:none;gap:10px;padding:12px;display:flex}._367UGW_wizardCard{gap:14px}._367UGW_wizardCard ._367UGW_field{gap:8px}._367UGW_field{flex-direction:column;gap:5px;display:flex}._367UGW_fieldLabel{color:var(--dsw-alias-label-secondary);font-size:12px;font-weight:600}._367UGW_input{color:var(--dsw-alias-label-primary);background:var(--dsw-specific-input-major);border:1px solid var(--dsw-alias-border-l2);resize:vertical;border-radius:8px;outline:none;padding:7px 10px;font-family:inherit;font-size:13px}._367UGW_input:focus{border-color:var(--dsw-alias-state-business-primary)}._367UGW_input::placeholder{color:var(--dsw-alias-label-tertiary)}._367UGW_input:disabled{opacity:.55}._367UGW_select{-webkit-appearance:none;appearance:none;color:var(--dsw-alias-label-primary);background-color:var(--dsw-specific-input-major);background-image:linear-gradient(45deg, transparent 50%, var(--dsw-alias-label-secondary) 50%), linear-gradient(135deg, var(--dsw-alias-label-secondary) 50%, transparent 50%);border:1px solid var(--dsw-alias-border-l2);cursor:pointer;background-position:calc(100% - 17px) calc(50% - 1px),calc(100% - 12px) calc(50% - 1px);background-repeat:no-repeat;background-size:5px 5px,5px 5px;border-radius:8px;outline:none;max-width:100%;padding:7px 30px 7px 10px;font-family:inherit;font-size:13px}._367UGW_select:hover:not(:disabled){border-color:var(--dsw-alias-border-l1)}._367UGW_select:focus{border-color:var(--dsw-alias-state-business-primary)}._367UGW_select:disabled{opacity:.55;cursor:default}._367UGW_select option{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-2)}._367UGW_hint{color:var(--dsw-alias-label-tertiary);font-size:11.5px;line-height:1.5}._367UGW_formError{color:var(--dsw-alias-state-error-primary);margin:0;font-size:12px}._367UGW_checkboxRow{color:var(--dsw-alias-label-primary);cursor:pointer;align-items:flex-start;gap:8px;font-size:13px;display:flex}._367UGW_checkboxRow input{flex:none;margin-top:2px}._367UGW_radioLabel{color:var(--dsw-alias-label-primary);cursor:pointer;align-items:center;gap:6px;font-size:13px;display:inline-flex}._367UGW_secretFields{grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:10px 12px;padding-top:4px;display:grid}._367UGW_hiddenFile{display:none}._367UGW_modeTabs{border-bottom:1px solid var(--dsw-alias-border-l1);flex:none;gap:2px;display:flex}._367UGW_modeTab{color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-bottom:2px solid #0000;padding:6px 12px;font-size:12.5px}._367UGW_modeTab:hover{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-interactive-bg-hover)}._367UGW_modeTab[data-active]{color:var(--dsw-alias-label-primary);border-bottom-color:var(--dsw-alias-state-business-primary);font-weight:600}._367UGW_modeHint{color:var(--dsw-alias-label-secondary);font-size:12px;line-height:1.5}._367UGW_groupList{flex-direction:column;gap:10px;display:flex}._367UGW_groupCard{gap:8px}._367UGW_groupHeader{flex-wrap:wrap;align-items:baseline;gap:8px;display:flex}._367UGW_groupLabel{color:var(--dsw-alias-label-primary);font-size:12.5px;font-weight:700}._367UGW_groupNote{color:var(--dsw-alias-label-tertiary);font-size:11.5px}._367UGW_groupItems{flex-direction:column;gap:6px;display:flex}._367UGW_categoryItem{flex-wrap:wrap;align-items:center;gap:8px;display:inline-flex}._367UGW_categoryName{font-weight:500}._367UGW_categoryDesc{color:var(--dsw-alias-label-tertiary);font-size:11.5px}._367UGW_optionsCard{gap:8px}._367UGW_optionsHeader{color:var(--dsw-alias-label-primary);letter-spacing:.02em;margin-bottom:2px;font-size:12px;font-weight:600}._367UGW_warnList{margin:4px 0 0;padding-left:18px}._367UGW_actionRow{flex-wrap:wrap;align-items:center;gap:10px;display:flex}._367UGW_progressBlock{flex-direction:column;flex:none;gap:6px;display:flex}._367UGW_progressMeta{color:var(--dsw-alias-label-secondary);flex-wrap:wrap;gap:12px;font-size:12px;display:flex}._367UGW_progressLabel{font-weight:600}._367UGW_progressDetail{color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;max-width:320px;overflow:hidden}._367UGW_progressBadge{font-variant-numeric:tabular-nums;white-space:nowrap;border-radius:999px;align-items:center;gap:2px;padding:1px 8px;font-size:11px;line-height:18px;display:inline-flex}._367UGW_progressBadgeSection{background:color-mix(in srgb, var(--dsw-alias-state-business-primary) 14%, transparent);color:var(--dsw-alias-state-business-primary)}._367UGW_progressBadgeCount{background:color-mix(in srgb, var(--dsw-alias-state-info-primary) 14%, transparent);color:var(--dsw-alias-state-info-primary)}._367UGW_progressPercent{font-variant-numeric:tabular-nums;margin-left:auto}._367UGW_progressTrack{background:var(--dsw-alias-interactive-bg-hover);border-radius:999px;height:8px;overflow:hidden}._367UGW_progressBar{background:var(--dsw-alias-state-business-primary);border-radius:999px;height:100%;transition:width .12s linear}._367UGW_progressBarDone{background:var(--dsw-alias-state-success-primary)}._367UGW_progressIndeterminate{width:40%;animation:1s ease-in-out infinite _367UGW_dshCmIndeterminate}._367UGW_logPanel{flex-direction:column;flex:none;gap:6px;display:flex}._367UGW_logHeader{color:var(--dsw-alias-label-secondary);font-size:12.5px;font-weight:600}._367UGW_logScroll{overscroll-behavior:contain;background:var(--dsw-alias-bg-base);border:1px solid var(--dsw-alias-border-l2);border-radius:8px;max-height:200px;padding:2px 10px 6px;overflow-y:auto}._367UGW_logLine{white-space:pre-wrap;word-break:break-all;color:var(--dsw-alias-label-secondary);padding:1px 0;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px;line-height:1.6}._367UGW_logEmpty{color:var(--dsw-alias-label-tertiary);padding:6px 0;font-size:11.5px}@keyframes _367UGW_dshCmIndeterminate{0%{margin-left:-40%}to{margin-left:100%}}._367UGW_reportView{flex-direction:column;gap:10px;display:flex}._367UGW_statRow{flex-wrap:wrap;align-items:center;gap:6px;display:flex}._367UGW_reportText{background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l2);white-space:pre-wrap;word-break:break-all;max-height:260px;color:var(--dsw-alias-label-primary);border-radius:8px;margin:0;padding:10px 12px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11.5px;line-height:1.6;overflow:auto}._367UGW_reportFooter{justify-content:flex-end;gap:8px;display:flex}._367UGW_rollbackBox{border:1px solid var(--dsw-alias-state-warn-primary);color:var(--dsw-alias-state-warn-primary);border-radius:8px;flex-direction:column;gap:6px;padding:10px 12px;display:flex}._367UGW_rollbackBox ._367UGW_reportText{border-color:var(--dsw-alias-border-l2)}._367UGW_errorBanner{border:1px solid var(--dsw-alias-state-error-primary);color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-2);border-radius:8px;flex-direction:column;gap:6px;padding:10px 12px;display:flex}._367UGW_errorTitle{color:var(--dsw-alias-state-error-primary);font-size:13px;font-weight:700}._367UGW_errorReason{white-space:pre-wrap;word-break:break-all;color:var(--dsw-alias-label-secondary);margin:0;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11.5px}._367UGW_errorAction{color:var(--dsw-alias-label-secondary);font-size:12.5px}._367UGW_errorActionLabel{color:var(--dsw-alias-state-business-primary)}._367UGW_errorItem{color:var(--dsw-alias-label-tertiary);font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11.5px}._367UGW_errorFooter{justify-content:flex-end;display:flex}._367UGW_errorList{flex-direction:column;gap:4px;display:flex}._367UGW_errorLine{background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l2);white-space:pre-wrap;word-break:break-all;color:var(--dsw-alias-state-error-primary);border-radius:6px;margin:0;padding:6px 10px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px}._367UGW_conflictList{flex-direction:column;gap:10px;display:flex}._367UGW_conflictItem{background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);border-radius:8px;flex-direction:column;gap:6px;padding:10px 12px;display:flex}._367UGW_conflictHead{flex-wrap:wrap;align-items:center;gap:8px;display:flex}._367UGW_conflictId{color:var(--dsw-alias-label-primary);font-size:12.5px;font-weight:600}._367UGW_severityError{color:var(--dsw-alias-state-error-primary);border:1px solid var(--dsw-alias-state-error-primary);border-radius:999px;padding:0 6px;font-size:10.5px}._367UGW_conflictDetail{background:var(--dsw-alias-bg-base);border:1px solid var(--dsw-alias-border-l2);white-space:pre-wrap;word-break:break-all;color:var(--dsw-alias-label-secondary);border-radius:6px;margin:0;padding:6px 8px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px}._367UGW_conflictOptions{flex-wrap:wrap;gap:14px;display:flex}._367UGW_pathMappingList{flex-direction:column;gap:8px;display:flex}._367UGW_pathRow{background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);border-radius:8px;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:10px;padding:10px 12px;display:grid}._367UGW_pathOld,._367UGW_pathNew{flex-direction:column;gap:4px;min-width:0;display:flex}._367UGW_pathValue{text-overflow:ellipsis;white-space:nowrap;color:var(--dsw-alias-label-primary);margin:0;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11.5px;overflow:hidden}._367UGW_pathIssueKind{color:var(--dsw-alias-state-warn-primary);font-size:10.5px}._367UGW_secretsList{flex-direction:column;gap:10px;display:flex}._367UGW_empty{text-align:center;color:var(--dsw-alias-label-tertiary);padding:22px 12px;font-size:12.5px}._367UGW_spinnerWrap{align-items:center;gap:6px;display:inline-flex}._367UGW_spinner{border:2px solid var(--dsw-alias-state-business-primary);vertical-align:-1px;border-top-color:#0000;border-radius:50%;flex:none;width:11px;height:11px;animation:.8s linear infinite _367UGW_dshCmSpin;display:inline-block}._367UGW_spinnerLabel{color:var(--dsw-alias-label-secondary);font-size:12px}@keyframes _367UGW_dshCmSpin{to{transform:rotate(360deg)}}._367UGW_snapshotList{flex-direction:column;gap:2px;display:flex}._367UGW_snapshotRowHeader,._367UGW_snapshotRow{grid-template-columns:minmax(120px,1.2fr) minmax(140px,1.6fr) 90px 56px 56px;align-items:center;gap:8px;padding:6px 10px;font-size:12px;display:grid}._367UGW_snapshotRowHeader{color:var(--dsw-alias-label-tertiary);border-bottom:1px solid var(--dsw-alias-border-l1);font-size:11px}._367UGW_snapshotRow{text-align:left;width:100%;color:var(--dsw-alias-label-primary);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:6px}._367UGW_snapshotRow:hover{background:var(--dsw-alias-interactive-bg-hover)}._367UGW_snapshotRow[data-active]{border-color:var(--dsw-alias-state-business-primary);background:color-mix(in srgb, var(--dsw-alias-state-business-primary) 10%, transparent)}._367UGW_warnText{color:var(--dsw-alias-state-warn-primary)}._367UGW_reportList{color:var(--dsw-alias-label-primary);flex-direction:column;gap:3px;margin:8px 0 4px;padding-left:18px;font-size:12px;display:flex}._367UGW_kindTag{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-secondary);border-radius:4px;padding:1px 6px;font-size:10.5px;display:inline-block}._367UGW_planScroll{overscroll-behavior:contain;background:var(--dsw-alias-bg-base);border:1px solid var(--dsw-alias-border-l2);border-radius:8px;height:280px;padding:2px 10px 8px;overflow-y:auto}._367UGW_planScroll ._367UGW_reportList{margin-top:6px}._367UGW_reportScroll{overscroll-behavior:contain;background:var(--dsw-alias-bg-base);border:1px solid var(--dsw-alias-border-l2);border-radius:8px;max-height:220px;padding:2px 10px 6px;overflow-y:auto}._367UGW_reportScroll ._367UGW_reportList{margin-top:4px}._367UGW_confirmScroll{overscroll-behavior:contain;background:var(--dsw-alias-bg-base);border:1px solid var(--dsw-alias-border-l2);border-radius:8px;max-height:280px;padding:2px 10px 6px;overflow-y:auto}._367UGW_confirmScroll ._367UGW_reportList{margin-top:4px;margin-bottom:0}._367UGW_pullScroll{overscroll-behavior:contain;background:var(--dsw-alias-bg-base);border:1px solid var(--dsw-alias-border-l2);border-radius:8px;height:280px;padding:2px 10px 6px;overflow-y:auto}._367UGW_pullScroll ._367UGW_reportList{margin-top:4px;margin-bottom:0}._367UGW_rowActions{gap:8px;margin-top:10px;display:flex}._367UGW_diffScroll{overscroll-behavior:contain;background:var(--dsw-alias-bg-base);border:1px solid var(--dsw-alias-border-l2);white-space:pre-wrap;word-break:break-all;max-height:240px;color:var(--dsw-alias-label-primary);border-radius:8px;margin:0;padding:8px 10px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11.5px;line-height:1.6;overflow:auto}._367UGW_aboutLinkRow{flex-wrap:wrap;align-items:center;gap:10px;display:flex}._367UGW_aboutAuthor{color:var(--dsw-alias-label-primary);cursor:pointer;border-radius:6px;align-items:center;gap:6px;padding:4px 8px;font-size:13px;text-decoration:none;display:inline-flex}._367UGW_aboutAuthor:hover{background:var(--dsw-alias-interactive-bg-hover)}._367UGW_dialogMask{z-index:100;background:color-mix(in srgb, var(--dsw-alias-bg-base) 55%, transparent);justify-content:center;align-items:center;padding:20px;display:flex;position:fixed;inset:0}._367UGW_dialogCard{background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);width:min(420px,100%);max-height:80vh;box-shadow:0 8px 24px color-mix(in srgb, var(--dsw-alias-bg-base) 40%, transparent);border-radius:10px;flex-direction:column;gap:10px;padding:14px;display:flex}._367UGW_dialogHeader{color:var(--dsw-alias-label-primary);font-size:14px;font-weight:600}._367UGW_dialogBody{overscroll-behavior:contain;max-height:240px;color:var(--dsw-alias-label-primary);white-space:pre-wrap;flex-direction:column;gap:10px;font-size:13px;line-height:1.6;display:flex;overflow-y:auto}._367UGW_dialogWide{width:min(560px,100%)}._367UGW_dialogBodyScroll{overscroll-behavior:contain;max-height:70vh;color:var(--dsw-alias-label-primary);white-space:normal;flex-direction:column;gap:10px;font-size:13px;line-height:1.6;display:flex;overflow-y:auto}._367UGW_dialogHeaderRow{justify-content:space-between;align-items:center;gap:10px;display:flex}._367UGW_dialogClose{color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-radius:6px;padding:2px 8px;font-size:16px;line-height:1}._367UGW_dialogClose:hover{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-hover)}";
|
|
3045
|
+
const css = "._367UGW_section{height:100%;min-height:0;color:var(--dsw-alias-label-primary);font-family:var(--dsw-font-family);flex-direction:column;gap:10px;font-size:13px;display:flex}._367UGW_sectionHeader{flex:none;align-items:center;gap:10px;display:flex}._367UGW_viewTabs{border-bottom:1px solid var(--dsw-alias-border-l1);flex:1;gap:2px;display:flex}._367UGW_viewTab{color:var(--dsw-alias-label-secondary);cursor:pointer;white-space:nowrap;background:0 0;border:none;border-bottom:2px solid #0000;border-radius:6px 6px 0 0;padding:7px 14px;font-size:13px}._367UGW_viewTab:hover{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-interactive-bg-hover)}._367UGW_viewTab[data-active]{color:var(--dsw-alias-label-primary);border-bottom-color:var(--dsw-alias-state-business-primary);font-weight:600}._367UGW_sectionBody{flex-direction:column;flex:1;min-height:0;display:flex;overflow-y:auto}._367UGW_viewBody{flex-direction:column;gap:12px;padding:4px 2px 16px;display:flex}._367UGW_sectionTitleBlock{flex-direction:column;gap:2px;display:flex}._367UGW_sectionTitle{color:var(--dsw-alias-label-primary);margin:0;font-size:15px;font-weight:700}._367UGW_sectionSubtitle{color:var(--dsw-alias-label-secondary);margin:0;font-size:12px;line-height:1.5}._367UGW_primaryButton{color:var(--dsw-alias-label-primary-foreground);background:var(--dsw-alias-button-info-fill);cursor:pointer;white-space:nowrap;border:none;border-radius:8px;align-items:center;gap:6px;padding:6px 14px;font-size:13px;font-weight:600;display:inline-flex}._367UGW_primaryButton:hover:not(:disabled){background:var(--dsw-alias-button-info-hover)}._367UGW_primaryButton:disabled{opacity:.5;cursor:default}._367UGW_ghostButton{color:var(--dsw-alias-label-primary);border:1px solid var(--dsw-alias-border-l2);cursor:pointer;white-space:nowrap;background:0 0;border-radius:8px;align-items:center;gap:6px;padding:5px 12px;font-size:12px;display:inline-flex}._367UGW_ghostButton:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}._367UGW_ghostButton:disabled{opacity:.45;cursor:default}._367UGW_dangerButton{color:var(--dsw-alias-state-error-primary);border:1px solid var(--dsw-alias-state-error-primary);cursor:pointer;white-space:nowrap;background:0 0;border-radius:8px;padding:5px 12px;font-size:12px}._367UGW_dangerButton:hover:not(:disabled){background:var(--dsw-alias-state-error-primary);color:var(--dsw-alias-label-primary-foreground)}._367UGW_dangerButton:disabled{opacity:.45;cursor:default}._367UGW_badge{border:1px solid var(--dsw-alias-border-l2);color:var(--dsw-alias-label-secondary);white-space:nowrap;border-radius:999px;padding:1px 8px;font-size:11px;line-height:1.6;display:inline-block}._367UGW_badgeInfo{color:var(--dsw-alias-state-business-primary);border-color:var(--dsw-alias-state-business-primary)}._367UGW_badgeOk{color:var(--dsw-alias-state-success-primary);border-color:var(--dsw-alias-state-success-primary)}._367UGW_badgeWarn{color:var(--dsw-alias-state-warn-primary);border-color:var(--dsw-alias-state-warn-primary)}._367UGW_badgeError{color:var(--dsw-alias-state-error-primary);border-color:var(--dsw-alias-state-error-primary)}._367UGW_banner{border:1px solid var(--dsw-alias-border-l2);color:var(--dsw-alias-label-secondary);overflow-wrap:anywhere;border-radius:8px;padding:8px 12px;font-size:12.5px;line-height:1.5}._367UGW_banner[data-kind=ok]{color:var(--dsw-alias-state-success-primary);border-color:var(--dsw-alias-state-success-primary)}._367UGW_banner[data-kind=error]{color:var(--dsw-alias-state-error-primary);border-color:var(--dsw-alias-state-error-primary)}._367UGW_banner[data-kind=info]{color:var(--dsw-alias-state-business-primary);border-color:var(--dsw-alias-state-business-primary)}._367UGW_banner[data-kind=warn]{color:var(--dsw-alias-state-warn-primary);border-color:var(--dsw-alias-state-warn-primary)}._367UGW_card{background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);border-radius:10px;flex-direction:column;flex:none;gap:10px;padding:12px;display:flex}._367UGW_wizardCard{gap:14px}._367UGW_wizardCard ._367UGW_field{gap:8px}._367UGW_field{flex-direction:column;gap:5px;display:flex}._367UGW_fieldLabel{color:var(--dsw-alias-label-secondary);font-size:12px;font-weight:600}._367UGW_input{color:var(--dsw-alias-label-primary);background:var(--dsw-specific-input-major);border:1px solid var(--dsw-alias-border-l2);resize:vertical;border-radius:8px;outline:none;padding:7px 10px;font-family:inherit;font-size:13px}._367UGW_input:focus{border-color:var(--dsw-alias-state-business-primary)}._367UGW_input::placeholder{color:var(--dsw-alias-label-tertiary)}._367UGW_input:disabled{opacity:.55}._367UGW_select{-webkit-appearance:none;appearance:none;color:var(--dsw-alias-label-primary);background-color:var(--dsw-specific-input-major);background-image:linear-gradient(45deg, transparent 50%, var(--dsw-alias-label-secondary) 50%), linear-gradient(135deg, var(--dsw-alias-label-secondary) 50%, transparent 50%);border:1px solid var(--dsw-alias-border-l2);cursor:pointer;background-position:calc(100% - 17px) calc(50% - 1px),calc(100% - 12px) calc(50% - 1px);background-repeat:no-repeat;background-size:5px 5px,5px 5px;border-radius:8px;outline:none;max-width:100%;padding:7px 30px 7px 10px;font-family:inherit;font-size:13px}._367UGW_select:hover:not(:disabled){border-color:var(--dsw-alias-border-l1)}._367UGW_select:focus{border-color:var(--dsw-alias-state-business-primary)}._367UGW_select:disabled{opacity:.55;cursor:default}._367UGW_select option{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-2)}._367UGW_hint{color:var(--dsw-alias-label-tertiary);font-size:11.5px;line-height:1.5}._367UGW_formError{color:var(--dsw-alias-state-error-primary);margin:0;font-size:12px}._367UGW_checkboxRow{color:var(--dsw-alias-label-primary);cursor:pointer;align-items:flex-start;gap:8px;font-size:13px;display:flex}._367UGW_checkboxRow input{flex:none;margin-top:2px}._367UGW_radioLabel{color:var(--dsw-alias-label-primary);cursor:pointer;align-items:center;gap:6px;font-size:13px;display:inline-flex}._367UGW_secretFields{grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:10px 12px;padding-top:4px;display:grid}._367UGW_hiddenFile{display:none}._367UGW_modeTabs{border-bottom:1px solid var(--dsw-alias-border-l1);flex:none;gap:2px;display:flex}._367UGW_modeTab{color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-bottom:2px solid #0000;padding:6px 12px;font-size:12.5px}._367UGW_modeTab:hover{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-interactive-bg-hover)}._367UGW_modeTab[data-active]{color:var(--dsw-alias-label-primary);border-bottom-color:var(--dsw-alias-state-business-primary);font-weight:600}._367UGW_modeHint{color:var(--dsw-alias-label-secondary);font-size:12px;line-height:1.5}._367UGW_groupList{flex-direction:column;gap:10px;display:flex}._367UGW_groupCard{gap:8px}._367UGW_groupHeader{flex-wrap:wrap;align-items:baseline;gap:8px;display:flex}._367UGW_groupLabel{color:var(--dsw-alias-label-primary);font-size:12.5px;font-weight:700}._367UGW_groupNote{color:var(--dsw-alias-label-tertiary);font-size:11.5px}._367UGW_groupItems{flex-direction:column;gap:6px;display:flex}._367UGW_categoryItem{flex-wrap:wrap;align-items:center;gap:8px;display:inline-flex}._367UGW_categoryName{font-weight:500}._367UGW_categoryDesc{color:var(--dsw-alias-label-tertiary);font-size:11.5px}._367UGW_optionsCard{gap:8px}._367UGW_optionsHeader{color:var(--dsw-alias-label-primary);letter-spacing:.02em;margin-bottom:2px;font-size:12px;font-weight:600}._367UGW_warnList{margin:4px 0 0;padding-left:18px}._367UGW_actionRow{flex-wrap:wrap;align-items:center;gap:10px;display:flex}._367UGW_progressBlock{flex-direction:column;flex:none;gap:6px;display:flex}._367UGW_progressMeta{color:var(--dsw-alias-label-secondary);flex-wrap:wrap;gap:12px;font-size:12px;display:flex}._367UGW_progressLabel{font-weight:600}._367UGW_progressDetail{color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;max-width:320px;overflow:hidden}._367UGW_progressBadge{font-variant-numeric:tabular-nums;white-space:nowrap;border-radius:999px;align-items:center;gap:2px;padding:1px 8px;font-size:11px;line-height:18px;display:inline-flex}._367UGW_progressBadgeSection{background:color-mix(in srgb, var(--dsw-alias-state-business-primary) 14%, transparent);color:var(--dsw-alias-state-business-primary)}._367UGW_progressBadgeCount{background:color-mix(in srgb, var(--dsw-alias-state-info-primary) 14%, transparent);color:var(--dsw-alias-state-info-primary)}._367UGW_progressPercent{font-variant-numeric:tabular-nums;margin-left:auto}._367UGW_progressTrack{background:var(--dsw-alias-interactive-bg-hover);border-radius:999px;height:8px;overflow:hidden}._367UGW_progressBar{background:var(--dsw-alias-state-business-primary);border-radius:999px;height:100%;transition:width .12s linear}._367UGW_progressBarDone{background:var(--dsw-alias-state-success-primary)}._367UGW_progressIndeterminate{width:40%;animation:1s ease-in-out infinite _367UGW_dshCmIndeterminate}._367UGW_logPanel{flex-direction:column;flex:none;gap:6px;display:flex}._367UGW_logHeader{color:var(--dsw-alias-label-secondary);align-items:center;gap:8px;font-size:12.5px;font-weight:600;display:flex}._367UGW_logJumpButton{font-family:var(--dsw-font-family);color:var(--dsw-alias-label-secondary);border:1px solid var(--dsw-alias-border-l2);cursor:pointer;background:0 0;border-radius:999px;padding:3px 8px;font-size:11px;line-height:1}._367UGW_logJumpButton:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}._367UGW_logScroll{overscroll-behavior:contain;background:var(--dsw-alias-bg-base);border:1px solid var(--dsw-alias-border-l2);border-radius:8px;max-height:200px;padding:2px 10px 6px;overflow-y:auto}._367UGW_logLine{white-space:pre-wrap;word-break:break-all;color:var(--dsw-alias-label-secondary);padding:1px 0;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px;line-height:1.6}._367UGW_logEmpty{color:var(--dsw-alias-label-tertiary);padding:6px 0;font-size:11.5px}@keyframes _367UGW_dshCmIndeterminate{0%{margin-left:-40%}to{margin-left:100%}}._367UGW_reportView{flex-direction:column;gap:10px;display:flex}._367UGW_statRow{flex-wrap:wrap;align-items:center;gap:6px;display:flex}._367UGW_reportText{background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l2);white-space:pre-wrap;word-break:break-all;max-height:260px;color:var(--dsw-alias-label-primary);border-radius:8px;margin:0;padding:10px 12px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11.5px;line-height:1.6;overflow:auto}._367UGW_reportFooter{justify-content:flex-end;gap:8px;display:flex}._367UGW_rollbackBox{border:1px solid var(--dsw-alias-state-warn-primary);color:var(--dsw-alias-state-warn-primary);border-radius:8px;flex-direction:column;gap:6px;padding:10px 12px;display:flex}._367UGW_rollbackBox ._367UGW_reportText{border-color:var(--dsw-alias-border-l2)}._367UGW_errorBanner{border:1px solid var(--dsw-alias-state-error-primary);color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-2);border-radius:8px;flex-direction:column;gap:6px;padding:10px 12px;display:flex}._367UGW_errorTitle{color:var(--dsw-alias-state-error-primary);font-size:13px;font-weight:700}._367UGW_errorReason{white-space:pre-wrap;word-break:break-all;color:var(--dsw-alias-label-secondary);margin:0;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11.5px}._367UGW_errorAction{color:var(--dsw-alias-label-secondary);font-size:12.5px}._367UGW_errorActionLabel{color:var(--dsw-alias-state-business-primary)}._367UGW_errorItem{color:var(--dsw-alias-label-tertiary);font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11.5px}._367UGW_errorFooter{justify-content:flex-end;display:flex}._367UGW_errorList{flex-direction:column;gap:4px;display:flex}._367UGW_errorLine{background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l2);white-space:pre-wrap;word-break:break-all;color:var(--dsw-alias-state-error-primary);border-radius:6px;margin:0;padding:6px 10px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px}._367UGW_conflictList{flex-direction:column;gap:10px;display:flex}._367UGW_conflictItem{background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);border-radius:8px;flex-direction:column;gap:6px;padding:10px 12px;display:flex}._367UGW_conflictHead{flex-wrap:wrap;align-items:center;gap:8px;display:flex}._367UGW_conflictId{color:var(--dsw-alias-label-primary);font-size:12.5px;font-weight:600}._367UGW_severityError{color:var(--dsw-alias-state-error-primary);border:1px solid var(--dsw-alias-state-error-primary);border-radius:999px;padding:0 6px;font-size:10.5px}._367UGW_conflictDetail{background:var(--dsw-alias-bg-base);border:1px solid var(--dsw-alias-border-l2);white-space:pre-wrap;word-break:break-all;color:var(--dsw-alias-label-secondary);border-radius:6px;margin:0;padding:6px 8px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px}._367UGW_conflictOptions{flex-wrap:wrap;gap:14px;display:flex}._367UGW_pathMappingList{flex-direction:column;gap:8px;display:flex}._367UGW_pathRow{background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);border-radius:8px;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:10px;padding:10px 12px;display:grid}._367UGW_pathOld,._367UGW_pathNew{flex-direction:column;gap:4px;min-width:0;display:flex}._367UGW_pathValue{text-overflow:ellipsis;white-space:nowrap;color:var(--dsw-alias-label-primary);margin:0;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11.5px;overflow:hidden}._367UGW_pathIssueKind{color:var(--dsw-alias-state-warn-primary);font-size:10.5px}._367UGW_secretsList{flex-direction:column;gap:10px;display:flex}._367UGW_empty{text-align:center;color:var(--dsw-alias-label-tertiary);padding:22px 12px;font-size:12.5px}._367UGW_spinnerWrap{align-items:center;gap:6px;display:inline-flex}._367UGW_spinner{border:2px solid var(--dsw-alias-state-business-primary);vertical-align:-1px;border-top-color:#0000;border-radius:50%;flex:none;width:11px;height:11px;animation:.8s linear infinite _367UGW_dshCmSpin;display:inline-block}._367UGW_spinnerLabel{color:var(--dsw-alias-label-secondary);font-size:12px}@keyframes _367UGW_dshCmSpin{to{transform:rotate(360deg)}}._367UGW_snapshotList{flex-direction:column;gap:2px;display:flex}._367UGW_snapshotRowHeader,._367UGW_snapshotRow{grid-template-columns:minmax(120px,1.2fr) minmax(140px,1.6fr) 90px 56px 56px;align-items:center;gap:8px;padding:6px 10px;font-size:12px;display:grid}._367UGW_snapshotRowHeader{color:var(--dsw-alias-label-tertiary);border-bottom:1px solid var(--dsw-alias-border-l1);font-size:11px}._367UGW_snapshotRow{text-align:left;width:100%;color:var(--dsw-alias-label-primary);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:6px}._367UGW_snapshotRow:hover{background:var(--dsw-alias-interactive-bg-hover)}._367UGW_snapshotRow[data-active]{border-color:var(--dsw-alias-state-business-primary);background:color-mix(in srgb, var(--dsw-alias-state-business-primary) 10%, transparent)}._367UGW_warnText{color:var(--dsw-alias-state-warn-primary)}._367UGW_reportList{color:var(--dsw-alias-label-primary);flex-direction:column;gap:3px;margin:8px 0 4px;padding-left:18px;font-size:12px;display:flex}._367UGW_kindTag{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-secondary);border-radius:4px;padding:1px 6px;font-size:10.5px;display:inline-block}._367UGW_planScroll{overscroll-behavior:contain;background:var(--dsw-alias-bg-base);border:1px solid var(--dsw-alias-border-l2);border-radius:8px;height:280px;padding:2px 10px 8px;overflow-y:auto}._367UGW_planScroll ._367UGW_reportList{margin-top:6px}._367UGW_reportScroll{overscroll-behavior:contain;background:var(--dsw-alias-bg-base);border:1px solid var(--dsw-alias-border-l2);border-radius:8px;max-height:220px;padding:2px 10px 6px;overflow-y:auto}._367UGW_reportScroll ._367UGW_reportList{margin-top:4px}._367UGW_confirmScroll{overscroll-behavior:contain;background:var(--dsw-alias-bg-base);border:1px solid var(--dsw-alias-border-l2);border-radius:8px;max-height:280px;padding:2px 10px 6px;overflow-y:auto}._367UGW_confirmScroll ._367UGW_reportList{margin-top:4px;margin-bottom:0}._367UGW_pullScroll{overscroll-behavior:contain;background:var(--dsw-alias-bg-base);border:1px solid var(--dsw-alias-border-l2);border-radius:8px;height:280px;padding:2px 10px 6px;overflow-y:auto}._367UGW_pullScroll ._367UGW_reportList{margin-top:4px;margin-bottom:0}._367UGW_rowActions{gap:8px;margin-top:10px;display:flex}._367UGW_diffScroll{overscroll-behavior:contain;background:var(--dsw-alias-bg-base);border:1px solid var(--dsw-alias-border-l2);white-space:pre-wrap;word-break:break-all;max-height:240px;color:var(--dsw-alias-label-primary);border-radius:8px;margin:0;padding:8px 10px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11.5px;line-height:1.6;overflow:auto}._367UGW_aboutLinkRow{flex-wrap:wrap;align-items:center;gap:10px;display:flex}._367UGW_aboutAuthor{color:var(--dsw-alias-label-primary);cursor:pointer;border-radius:6px;align-items:center;gap:6px;padding:4px 8px;font-size:13px;text-decoration:none;display:inline-flex}._367UGW_aboutAuthor:hover{background:var(--dsw-alias-interactive-bg-hover)}._367UGW_dialogMask{z-index:100;background:color-mix(in srgb, var(--dsw-alias-bg-base) 55%, transparent);justify-content:center;align-items:center;padding:20px;display:flex;position:fixed;inset:0}._367UGW_dialogCard{background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);width:min(420px,100%);max-height:80vh;box-shadow:0 8px 24px color-mix(in srgb, var(--dsw-alias-bg-base) 40%, transparent);border-radius:10px;flex-direction:column;gap:10px;padding:14px;display:flex}._367UGW_dialogHeader{color:var(--dsw-alias-label-primary);font-size:14px;font-weight:600}._367UGW_dialogBody{overscroll-behavior:contain;max-height:240px;color:var(--dsw-alias-label-primary);white-space:pre-wrap;flex-direction:column;gap:10px;font-size:13px;line-height:1.6;display:flex;overflow-y:auto}._367UGW_dialogWide{width:min(560px,100%)}._367UGW_dialogBodyScroll{overscroll-behavior:contain;max-height:70vh;color:var(--dsw-alias-label-primary);white-space:normal;flex-direction:column;gap:10px;font-size:13px;line-height:1.6;display:flex;overflow-y:auto}._367UGW_dialogHeaderRow{justify-content:space-between;align-items:center;gap:10px;display:flex}._367UGW_dialogClose{color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-radius:6px;padding:2px 8px;font-size:16px;line-height:1}._367UGW_dialogClose:hover{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-hover)}";
|
|
3007
3046
|
const tagId = "dsh-config-manager/config-manager.module.css";
|
|
3008
3047
|
if (typeof document !== "undefined" && document.querySelector("style[data-tag=\"dsh-config-manager/config-manager.module.css\"]") === null) {
|
|
3009
3048
|
const tag = document.createElement("style");
|
|
@@ -3013,125 +3052,126 @@ if (typeof document !== "undefined" && document.querySelector("style[data-tag=\"
|
|
|
3013
3052
|
document.head.appendChild(tag);
|
|
3014
3053
|
}
|
|
3015
3054
|
var config_manager_module_css_default = {
|
|
3016
|
-
"
|
|
3017
|
-
"
|
|
3018
|
-
"
|
|
3019
|
-
"
|
|
3020
|
-
"
|
|
3021
|
-
"
|
|
3022
|
-
"
|
|
3023
|
-
"
|
|
3055
|
+
"progressLabel": "_367UGW_progressLabel",
|
|
3056
|
+
"sectionHeader": "_367UGW_sectionHeader",
|
|
3057
|
+
"dialogMask": "_367UGW_dialogMask",
|
|
3058
|
+
"secretFields": "_367UGW_secretFields",
|
|
3059
|
+
"badgeInfo": "_367UGW_badgeInfo",
|
|
3060
|
+
"groupList": "_367UGW_groupList",
|
|
3061
|
+
"progressMeta": "_367UGW_progressMeta",
|
|
3062
|
+
"snapshotRowHeader": "_367UGW_snapshotRowHeader",
|
|
3063
|
+
"banner": "_367UGW_banner",
|
|
3064
|
+
"reportList": "_367UGW_reportList",
|
|
3065
|
+
"optionsCard": "_367UGW_optionsCard",
|
|
3066
|
+
"reportView": "_367UGW_reportView",
|
|
3067
|
+
"reportScroll": "_367UGW_reportScroll",
|
|
3068
|
+
"errorItem": "_367UGW_errorItem",
|
|
3069
|
+
"errorFooter": "_367UGW_errorFooter",
|
|
3024
3070
|
"errorTitle": "_367UGW_errorTitle",
|
|
3025
3071
|
"rowActions": "_367UGW_rowActions",
|
|
3026
|
-
"
|
|
3027
|
-
"
|
|
3028
|
-
"
|
|
3029
|
-
"dangerButton": "_367UGW_dangerButton",
|
|
3030
|
-
"sectionTitle": "_367UGW_sectionTitle",
|
|
3031
|
-
"groupNote": "_367UGW_groupNote",
|
|
3032
|
-
"progressBadgeCount": "_367UGW_progressBadgeCount",
|
|
3072
|
+
"actionRow": "_367UGW_actionRow",
|
|
3073
|
+
"spinnerWrap": "_367UGW_spinnerWrap",
|
|
3074
|
+
"badgeWarn": "_367UGW_badgeWarn",
|
|
3033
3075
|
"errorList": "_367UGW_errorList",
|
|
3034
|
-
"
|
|
3076
|
+
"groupCard": "_367UGW_groupCard",
|
|
3077
|
+
"progressIndeterminate": "_367UGW_progressIndeterminate",
|
|
3078
|
+
"groupNote": "_367UGW_groupNote",
|
|
3079
|
+
"pathOld": "_367UGW_pathOld",
|
|
3080
|
+
"hint": "_367UGW_hint",
|
|
3081
|
+
"modeHint": "_367UGW_modeHint",
|
|
3082
|
+
"pathMappingList": "_367UGW_pathMappingList",
|
|
3083
|
+
"progressBar": "_367UGW_progressBar",
|
|
3084
|
+
"reportFooter": "_367UGW_reportFooter",
|
|
3085
|
+
"spinner": "_367UGW_spinner",
|
|
3086
|
+
"dshCmSpin": "_367UGW_dshCmSpin",
|
|
3087
|
+
"secretsList": "_367UGW_secretsList",
|
|
3088
|
+
"logLine": "_367UGW_logLine",
|
|
3035
3089
|
"conflictHead": "_367UGW_conflictHead",
|
|
3036
|
-
"
|
|
3037
|
-
"
|
|
3038
|
-
"
|
|
3039
|
-
"
|
|
3040
|
-
"
|
|
3041
|
-
"
|
|
3042
|
-
"
|
|
3043
|
-
"
|
|
3044
|
-
"
|
|
3045
|
-
"conflictList": "_367UGW_conflictList",
|
|
3090
|
+
"ghostButton": "_367UGW_ghostButton",
|
|
3091
|
+
"sectionTitle": "_367UGW_sectionTitle",
|
|
3092
|
+
"empty": "_367UGW_empty",
|
|
3093
|
+
"dialogWide": "_367UGW_dialogWide",
|
|
3094
|
+
"logPanel": "_367UGW_logPanel",
|
|
3095
|
+
"dialogHeader": "_367UGW_dialogHeader",
|
|
3096
|
+
"badge": "_367UGW_badge",
|
|
3097
|
+
"pathRow": "_367UGW_pathRow",
|
|
3098
|
+
"aboutLinkRow": "_367UGW_aboutLinkRow",
|
|
3046
3099
|
"snapshotList": "_367UGW_snapshotList",
|
|
3047
|
-
"
|
|
3048
|
-
"
|
|
3049
|
-
"
|
|
3050
|
-
"reportScroll": "_367UGW_reportScroll",
|
|
3100
|
+
"modeTab": "_367UGW_modeTab",
|
|
3101
|
+
"logScroll": "_367UGW_logScroll",
|
|
3102
|
+
"groupHeader": "_367UGW_groupHeader",
|
|
3051
3103
|
"progressBadge": "_367UGW_progressBadge",
|
|
3052
|
-
"
|
|
3053
|
-
"
|
|
3054
|
-
"planScroll": "_367UGW_planScroll",
|
|
3055
|
-
"badge": "_367UGW_badge",
|
|
3104
|
+
"modeTabs": "_367UGW_modeTabs",
|
|
3105
|
+
"dialogBody": "_367UGW_dialogBody",
|
|
3056
3106
|
"statRow": "_367UGW_statRow",
|
|
3057
|
-
"
|
|
3058
|
-
"badgeInfo": "_367UGW_badgeInfo",
|
|
3107
|
+
"field": "_367UGW_field",
|
|
3059
3108
|
"dialogBodyScroll": "_367UGW_dialogBodyScroll",
|
|
3060
|
-
"
|
|
3061
|
-
"
|
|
3109
|
+
"radioLabel": "_367UGW_radioLabel",
|
|
3110
|
+
"progressBadgeSection": "_367UGW_progressBadgeSection",
|
|
3111
|
+
"progressPercent": "_367UGW_progressPercent",
|
|
3112
|
+
"dangerButton": "_367UGW_dangerButton",
|
|
3113
|
+
"viewTab": "_367UGW_viewTab",
|
|
3114
|
+
"categoryItem": "_367UGW_categoryItem",
|
|
3115
|
+
"conflictId": "_367UGW_conflictId",
|
|
3116
|
+
"groupItems": "_367UGW_groupItems",
|
|
3062
3117
|
"viewBody": "_367UGW_viewBody",
|
|
3063
|
-
"
|
|
3064
|
-
"
|
|
3118
|
+
"dialogClose": "_367UGW_dialogClose",
|
|
3119
|
+
"dialogCard": "_367UGW_dialogCard",
|
|
3120
|
+
"snapshotRow": "_367UGW_snapshotRow",
|
|
3121
|
+
"conflictOptions": "_367UGW_conflictOptions",
|
|
3122
|
+
"dshCmIndeterminate": "_367UGW_dshCmIndeterminate",
|
|
3065
3123
|
"optionsHeader": "_367UGW_optionsHeader",
|
|
3066
|
-
"
|
|
3067
|
-
"
|
|
3068
|
-
"
|
|
3069
|
-
"
|
|
3070
|
-
"reportList": "_367UGW_reportList",
|
|
3071
|
-
"hiddenFile": "_367UGW_hiddenFile",
|
|
3072
|
-
"warnList": "_367UGW_warnList",
|
|
3073
|
-
"pathValue": "_367UGW_pathValue",
|
|
3074
|
-
"reportFooter": "_367UGW_reportFooter",
|
|
3075
|
-
"dialogHeader": "_367UGW_dialogHeader",
|
|
3076
|
-
"progressBlock": "_367UGW_progressBlock",
|
|
3077
|
-
"empty": "_367UGW_empty",
|
|
3078
|
-
"pathIssueKind": "_367UGW_pathIssueKind",
|
|
3124
|
+
"fieldLabel": "_367UGW_fieldLabel",
|
|
3125
|
+
"formError": "_367UGW_formError",
|
|
3126
|
+
"logEmpty": "_367UGW_logEmpty",
|
|
3127
|
+
"errorBanner": "_367UGW_errorBanner",
|
|
3079
3128
|
"conflictDetail": "_367UGW_conflictDetail",
|
|
3080
|
-
"
|
|
3081
|
-
"
|
|
3082
|
-
"
|
|
3083
|
-
"progressMeta": "_367UGW_progressMeta",
|
|
3084
|
-
"progressBarDone": "_367UGW_progressBarDone",
|
|
3085
|
-
"diffScroll": "_367UGW_diffScroll",
|
|
3086
|
-
"dialogHeaderRow": "_367UGW_dialogHeaderRow",
|
|
3087
|
-
"banner": "_367UGW_banner",
|
|
3129
|
+
"conflictList": "_367UGW_conflictList",
|
|
3130
|
+
"pathValue": "_367UGW_pathValue",
|
|
3131
|
+
"errorReason": "_367UGW_errorReason",
|
|
3088
3132
|
"badgeOk": "_367UGW_badgeOk",
|
|
3089
|
-
"
|
|
3090
|
-
"
|
|
3091
|
-
"
|
|
3092
|
-
"
|
|
3093
|
-
"
|
|
3133
|
+
"wizardCard": "_367UGW_wizardCard",
|
|
3134
|
+
"groupLabel": "_367UGW_groupLabel",
|
|
3135
|
+
"reportText": "_367UGW_reportText",
|
|
3136
|
+
"sectionSubtitle": "_367UGW_sectionSubtitle",
|
|
3137
|
+
"dialogHeaderRow": "_367UGW_dialogHeaderRow",
|
|
3138
|
+
"card": "_367UGW_card",
|
|
3094
3139
|
"viewTabs": "_367UGW_viewTabs",
|
|
3095
|
-
"
|
|
3096
|
-
"
|
|
3097
|
-
"confirmScroll": "_367UGW_confirmScroll",
|
|
3098
|
-
"groupItems": "_367UGW_groupItems",
|
|
3099
|
-
"progressBar": "_367UGW_progressBar",
|
|
3100
|
-
"reportView": "_367UGW_reportView",
|
|
3101
|
-
"primaryButton": "_367UGW_primaryButton",
|
|
3102
|
-
"logPanel": "_367UGW_logPanel",
|
|
3103
|
-
"groupList": "_367UGW_groupList",
|
|
3140
|
+
"categoryName": "_367UGW_categoryName",
|
|
3141
|
+
"kindTag": "_367UGW_kindTag",
|
|
3104
3142
|
"errorAction": "_367UGW_errorAction",
|
|
3105
|
-
"
|
|
3106
|
-
"
|
|
3143
|
+
"badgeError": "_367UGW_badgeError",
|
|
3144
|
+
"progressBarDone": "_367UGW_progressBarDone",
|
|
3145
|
+
"sectionBody": "_367UGW_sectionBody",
|
|
3146
|
+
"progressTrack": "_367UGW_progressTrack",
|
|
3147
|
+
"logJumpButton": "_367UGW_logJumpButton",
|
|
3107
3148
|
"categoryDesc": "_367UGW_categoryDesc",
|
|
3108
|
-
"
|
|
3109
|
-
"dshCmIndeterminate": "_367UGW_dshCmIndeterminate",
|
|
3110
|
-
"snapshotRow": "_367UGW_snapshotRow",
|
|
3111
|
-
"errorBanner": "_367UGW_errorBanner",
|
|
3112
|
-
"errorReason": "_367UGW_errorReason",
|
|
3113
|
-
"dialogBody": "_367UGW_dialogBody",
|
|
3149
|
+
"checkboxRow": "_367UGW_checkboxRow",
|
|
3114
3150
|
"progressDetail": "_367UGW_progressDetail",
|
|
3115
|
-
"
|
|
3116
|
-
"progressBadgeSection": "_367UGW_progressBadgeSection",
|
|
3117
|
-
"dialogWide": "_367UGW_dialogWide",
|
|
3118
|
-
"hint": "_367UGW_hint",
|
|
3119
|
-
"radioLabel": "_367UGW_radioLabel",
|
|
3120
|
-
"groupCard": "_367UGW_groupCard",
|
|
3121
|
-
"logEmpty": "_367UGW_logEmpty",
|
|
3122
|
-
"progressTrack": "_367UGW_progressTrack",
|
|
3123
|
-
"sectionSubtitle": "_367UGW_sectionSubtitle",
|
|
3124
|
-
"logLine": "_367UGW_logLine",
|
|
3151
|
+
"primaryButton": "_367UGW_primaryButton",
|
|
3125
3152
|
"errorActionLabel": "_367UGW_errorActionLabel",
|
|
3126
|
-
"
|
|
3127
|
-
"
|
|
3128
|
-
"
|
|
3129
|
-
"
|
|
3130
|
-
"
|
|
3131
|
-
"
|
|
3132
|
-
"
|
|
3133
|
-
"
|
|
3134
|
-
"
|
|
3153
|
+
"input": "_367UGW_input",
|
|
3154
|
+
"warnText": "_367UGW_warnText",
|
|
3155
|
+
"logHeader": "_367UGW_logHeader",
|
|
3156
|
+
"progressBlock": "_367UGW_progressBlock",
|
|
3157
|
+
"confirmScroll": "_367UGW_confirmScroll",
|
|
3158
|
+
"sectionTitleBlock": "_367UGW_sectionTitleBlock",
|
|
3159
|
+
"aboutAuthor": "_367UGW_aboutAuthor",
|
|
3160
|
+
"section": "_367UGW_section",
|
|
3161
|
+
"errorLine": "_367UGW_errorLine",
|
|
3162
|
+
"hiddenFile": "_367UGW_hiddenFile",
|
|
3163
|
+
"warnList": "_367UGW_warnList",
|
|
3164
|
+
"rollbackBox": "_367UGW_rollbackBox",
|
|
3165
|
+
"pullScroll": "_367UGW_pullScroll",
|
|
3166
|
+
"diffScroll": "_367UGW_diffScroll",
|
|
3167
|
+
"pathIssueKind": "_367UGW_pathIssueKind",
|
|
3168
|
+
"spinnerLabel": "_367UGW_spinnerLabel",
|
|
3169
|
+
"conflictItem": "_367UGW_conflictItem",
|
|
3170
|
+
"severityError": "_367UGW_severityError",
|
|
3171
|
+
"pathNew": "_367UGW_pathNew",
|
|
3172
|
+
"select": "_367UGW_select",
|
|
3173
|
+
"planScroll": "_367UGW_planScroll",
|
|
3174
|
+
"progressBadgeCount": "_367UGW_progressBadgeCount"
|
|
3135
3175
|
};
|
|
3136
3176
|
//#endregion
|
|
3137
3177
|
//#region src/client/common/ui.tsx
|
|
@@ -3856,7 +3896,8 @@ function ExportView({ api, t }) {
|
|
|
3856
3896
|
onRetry: () => {
|
|
3857
3897
|
runExport();
|
|
3858
3898
|
},
|
|
3859
|
-
retrying: running
|
|
3899
|
+
retrying: running,
|
|
3900
|
+
t: api.t
|
|
3860
3901
|
}),
|
|
3861
3902
|
result !== null && !running && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(ReportView, {
|
|
3862
3903
|
kind: "export",
|
|
@@ -3864,7 +3905,8 @@ function ExportView({ api, t }) {
|
|
|
3864
3905
|
onDownload: () => {
|
|
3865
3906
|
download(result.zipPath);
|
|
3866
3907
|
},
|
|
3867
|
-
downloadBusy: downloading
|
|
3908
|
+
downloadBusy: downloading,
|
|
3909
|
+
t: api.t
|
|
3868
3910
|
}), downloaded && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Banner, {
|
|
3869
3911
|
kind: "ok",
|
|
3870
3912
|
children: t("export.saved", { name: result.report.file.name })
|
|
@@ -4220,17 +4262,22 @@ function ImportLogPanelBase({ lines, t }) {
|
|
|
4220
4262
|
const stickRef = (0, react.useRef)(true);
|
|
4221
4263
|
/** 用户上滚后是否有新行到达(显示「↓ 新输出」;点击跳到底部清除) */
|
|
4222
4264
|
const [hasNewOutput, setHasNewOutput] = (0, react.useState)(false);
|
|
4223
|
-
/**
|
|
4224
|
-
|
|
4265
|
+
/**
|
|
4266
|
+
* 上次渲染的数组引用(新输出 = 引用变化)。依赖 appendLog 的**不可变写入**:
|
|
4267
|
+
* 每次追加都生成新数组(run-registry.ts)——行数封顶后长度恒定,但引用必变,
|
|
4268
|
+
* 以引用判断才能感知截断后的新行(长度比较在 500 行封顶时失效)。
|
|
4269
|
+
*/
|
|
4270
|
+
const prevLinesRef = (0, react.useRef)(lines);
|
|
4225
4271
|
(0, react.useEffect)(() => {
|
|
4226
4272
|
const el = scrollRef.current;
|
|
4227
4273
|
if (el === null) return;
|
|
4274
|
+
const hasNew = lines !== prevLinesRef.current;
|
|
4275
|
+
prevLinesRef.current = lines;
|
|
4228
4276
|
if (stickRef.current) {
|
|
4229
4277
|
el.scrollTop = el.scrollHeight;
|
|
4230
4278
|
setHasNewOutput(false);
|
|
4231
|
-
} else if (
|
|
4232
|
-
|
|
4233
|
-
}, [lines.length]);
|
|
4279
|
+
} else if (hasNew) setHasNewOutput(true);
|
|
4280
|
+
}, [lines]);
|
|
4234
4281
|
/** 滚动中更新贴底状态(上滚 → 停止跟随;滚回底部 → 恢复跟随并清除提示) */
|
|
4235
4282
|
const onScroll = () => {
|
|
4236
4283
|
const el = scrollRef.current;
|
|
@@ -4270,9 +4317,10 @@ function ImportLogPanelBase({ lines, t }) {
|
|
|
4270
4317
|
})]
|
|
4271
4318
|
});
|
|
4272
4319
|
}
|
|
4273
|
-
/** memo:lines
|
|
4274
|
-
*
|
|
4275
|
-
|
|
4320
|
+
/** memo:lines 数组经 appendLog **不可变追加**(每次 append 换新引用,run-registry.ts)——
|
|
4321
|
+
* 自定义比较以「数组引用 + t 引用」为准:引用未变 = 无新输出,跳过整个列表重渲染;
|
|
4322
|
+
* 引用已变 = 有新行(含 500 行封顶后长度不变的情况),必须重渲染。 */
|
|
4323
|
+
const ImportLogPanel = (0, react.memo)(ImportLogPanelBase, (prev, next) => prev.lines === next.lines && prev.t === next.t);
|
|
4276
4324
|
/**
|
|
4277
4325
|
* 导入向导主视图。
|
|
4278
4326
|
*/
|
|
@@ -4560,7 +4608,8 @@ function ImportWizardView({ api, t }) {
|
|
|
4560
4608
|
}),
|
|
4561
4609
|
error !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ErrorBanner, {
|
|
4562
4610
|
error,
|
|
4563
|
-
onRetry: resetWizard
|
|
4611
|
+
onRetry: resetWizard,
|
|
4612
|
+
t: api.t
|
|
4564
4613
|
})
|
|
4565
4614
|
]
|
|
4566
4615
|
});
|
|
@@ -4574,7 +4623,8 @@ function ImportWizardView({ api, t }) {
|
|
|
4574
4623
|
}),
|
|
4575
4624
|
error !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ErrorBanner, {
|
|
4576
4625
|
error,
|
|
4577
|
-
onRetry: resetWizard
|
|
4626
|
+
onRetry: resetWizard,
|
|
4627
|
+
t: api.t
|
|
4578
4628
|
}),
|
|
4579
4629
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(ErrorList, { errors: imp.errors })
|
|
4580
4630
|
]
|
|
@@ -4629,7 +4679,8 @@ function ImportWizardView({ api, t }) {
|
|
|
4629
4679
|
error,
|
|
4630
4680
|
onRetry: () => {
|
|
4631
4681
|
goPreview();
|
|
4632
|
-
}
|
|
4682
|
+
},
|
|
4683
|
+
t: api.t
|
|
4633
4684
|
}),
|
|
4634
4685
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
4635
4686
|
className: config_manager_module_css_default.actionRow,
|
|
@@ -4707,7 +4758,8 @@ function ImportWizardView({ api, t }) {
|
|
|
4707
4758
|
error,
|
|
4708
4759
|
onRetry: () => {
|
|
4709
4760
|
goPreview();
|
|
4710
|
-
}
|
|
4761
|
+
},
|
|
4762
|
+
t: api.t
|
|
4711
4763
|
}),
|
|
4712
4764
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
4713
4765
|
className: config_manager_module_css_default.actionRow,
|
|
@@ -4746,7 +4798,10 @@ function ImportWizardView({ api, t }) {
|
|
|
4746
4798
|
setArchiveUnlockError(null);
|
|
4747
4799
|
}
|
|
4748
4800
|
}),
|
|
4749
|
-
archiveUnlockError !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ErrorBanner, {
|
|
4801
|
+
archiveUnlockError !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ErrorBanner, {
|
|
4802
|
+
error: archiveUnlockError,
|
|
4803
|
+
t: api.t
|
|
4804
|
+
}),
|
|
4750
4805
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
4751
4806
|
className: config_manager_module_css_default.actionRow,
|
|
4752
4807
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(Button, {
|
|
@@ -4905,7 +4960,8 @@ function ImportWizardView({ api, t }) {
|
|
|
4905
4960
|
error,
|
|
4906
4961
|
onRetry: () => {
|
|
4907
4962
|
execute();
|
|
4908
|
-
}
|
|
4963
|
+
},
|
|
4964
|
+
t: api.t
|
|
4909
4965
|
})]
|
|
4910
4966
|
});
|
|
4911
4967
|
if (step === "importing") {
|
|
@@ -4941,7 +4997,10 @@ function ImportWizardView({ api, t }) {
|
|
|
4941
4997
|
className: config_manager_module_css_default.hint,
|
|
4942
4998
|
children: t("import.importing")
|
|
4943
4999
|
}),
|
|
4944
|
-
error !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ErrorBanner, {
|
|
5000
|
+
error !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ErrorBanner, {
|
|
5001
|
+
error,
|
|
5002
|
+
t: api.t
|
|
5003
|
+
}),
|
|
4945
5004
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(ErrorList, { errors: imp.errors })
|
|
4946
5005
|
]
|
|
4947
5006
|
});
|
|
@@ -4976,7 +5035,10 @@ function ImportWizardView({ api, t }) {
|
|
|
4976
5035
|
kind: "warn",
|
|
4977
5036
|
children: t("report.needsRestart")
|
|
4978
5037
|
}),
|
|
4979
|
-
error !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ErrorBanner, {
|
|
5038
|
+
error !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ErrorBanner, {
|
|
5039
|
+
error,
|
|
5040
|
+
t: api.t
|
|
5041
|
+
})
|
|
4980
5042
|
]
|
|
4981
5043
|
});
|
|
4982
5044
|
}
|
|
@@ -5210,12 +5272,15 @@ function actionKindLabel(kind) {
|
|
|
5210
5272
|
/**
|
|
5211
5273
|
* 从 runStore 恢复上次的快照面板状态(切 tab 回 / 刷新后挂载)。
|
|
5212
5274
|
* 无敏感字段;plan/report 为纯数据,可安全序列化恢复。
|
|
5275
|
+
* running 来自 store 镜像(刷新后经 runStore.resume() 以宿主 /runs 为权威重新置位——
|
|
5276
|
+
* 持久化白名单恒为 false,绝不把浏览器陈旧状态当成恢复执行中的依据)。
|
|
5213
5277
|
*/
|
|
5214
5278
|
function initFromStore$2() {
|
|
5215
5279
|
const s = runStore.getSnapshot().snapshots;
|
|
5216
5280
|
return {
|
|
5217
5281
|
...initial$3,
|
|
5218
5282
|
selectedId: s.selectedId,
|
|
5283
|
+
running: s.running,
|
|
5219
5284
|
plan: s.plan,
|
|
5220
5285
|
report: s.report,
|
|
5221
5286
|
actionError: s.actionError,
|
|
@@ -5316,6 +5381,7 @@ function SnapshotsPanel({ api, t }) {
|
|
|
5316
5381
|
actionError: null
|
|
5317
5382
|
});
|
|
5318
5383
|
setConfirmOpen(false);
|
|
5384
|
+
runStore.watchRunning("restore", 500);
|
|
5319
5385
|
api.restoreSnapshot(state.selectedId, false).then((res) => {
|
|
5320
5386
|
patch({
|
|
5321
5387
|
running: false,
|
|
@@ -5326,6 +5392,8 @@ function SnapshotsPanel({ api, t }) {
|
|
|
5326
5392
|
running: false,
|
|
5327
5393
|
actionError: err instanceof Error ? err.message : String(err)
|
|
5328
5394
|
});
|
|
5395
|
+
}).finally(() => {
|
|
5396
|
+
runStore.stopRunWatch("restore");
|
|
5329
5397
|
});
|
|
5330
5398
|
};
|
|
5331
5399
|
const summary = () => {
|
|
@@ -5531,10 +5599,16 @@ function BackupScheduleCard({ api, t }) {
|
|
|
5531
5599
|
const [lastRunDetail, setLastRunDetail] = (0, react.useState)(null);
|
|
5532
5600
|
const [flash, setFlash] = (0, react.useState)(null);
|
|
5533
5601
|
const [actionError, setActionError] = (0, react.useState)(null);
|
|
5602
|
+
/** 挂载守卫:切 tab 卸载后异步回调只更新 store(草稿),不再 setState(React 18 无告警但浪费) */
|
|
5603
|
+
const mountedRef = (0, react.useRef)(true);
|
|
5604
|
+
(0, react.useEffect)(() => () => {
|
|
5605
|
+
mountedRef.current = false;
|
|
5606
|
+
}, []);
|
|
5534
5607
|
const load = () => {
|
|
5535
5608
|
setStatus("loading");
|
|
5536
5609
|
setError(null);
|
|
5537
5610
|
api.backupSchedule().then((schedule) => {
|
|
5611
|
+
if (!mountedRef.current) return;
|
|
5538
5612
|
setSaved(schedule);
|
|
5539
5613
|
setDraft(runStore.getSnapshot().snapshots.backupDraft ?? {
|
|
5540
5614
|
enabled: schedule.enabled,
|
|
@@ -5544,6 +5618,7 @@ function BackupScheduleCard({ api, t }) {
|
|
|
5544
5618
|
setLastRunDetail(formatRunTime(schedule.lastRunAt));
|
|
5545
5619
|
setStatus("ready");
|
|
5546
5620
|
}, (err) => {
|
|
5621
|
+
if (!mountedRef.current) return;
|
|
5547
5622
|
setStatus("error");
|
|
5548
5623
|
setError(err instanceof Error ? err.message : String(err));
|
|
5549
5624
|
});
|
|
@@ -5564,6 +5639,8 @@ function BackupScheduleCard({ api, t }) {
|
|
|
5564
5639
|
setFlash(null);
|
|
5565
5640
|
setActionError(null);
|
|
5566
5641
|
api.saveBackupSchedule(parsed.value).then((schedule) => {
|
|
5642
|
+
runStore.patch({ snapshots: { backupDraft: null } });
|
|
5643
|
+
if (!mountedRef.current) return;
|
|
5567
5644
|
setSaved(schedule);
|
|
5568
5645
|
setDraft({
|
|
5569
5646
|
enabled: schedule.enabled,
|
|
@@ -5571,10 +5648,10 @@ function BackupScheduleCard({ api, t }) {
|
|
|
5571
5648
|
});
|
|
5572
5649
|
setLastRun(schedule.lastRunStatus);
|
|
5573
5650
|
setLastRunDetail(formatRunTime(schedule.lastRunAt));
|
|
5574
|
-
runStore.patch({ snapshots: { backupDraft: null } });
|
|
5575
5651
|
setSaving(false);
|
|
5576
5652
|
setFlash(t("backupSchedule.saved"));
|
|
5577
5653
|
}, (err) => {
|
|
5654
|
+
if (!mountedRef.current) return;
|
|
5578
5655
|
setSaving(false);
|
|
5579
5656
|
setActionError(err instanceof Error ? err.message : String(err));
|
|
5580
5657
|
});
|
|
@@ -5585,11 +5662,13 @@ function BackupScheduleCard({ api, t }) {
|
|
|
5585
5662
|
setFlash(null);
|
|
5586
5663
|
setActionError(null);
|
|
5587
5664
|
api.runBackupNow().then((res) => {
|
|
5665
|
+
if (!mountedRef.current) return;
|
|
5588
5666
|
setSaved(res.schedule);
|
|
5589
5667
|
setLastRun(res.run.status);
|
|
5590
5668
|
setLastRunDetail(res.run.zip !== void 0 && res.run.zip !== "" ? res.run.zip : res.run.skipReason !== void 0 ? res.run.skipReason : formatRunTime(res.schedule.lastRunAt));
|
|
5591
5669
|
setRunning(false);
|
|
5592
5670
|
}, (err) => {
|
|
5671
|
+
if (!mountedRef.current) return;
|
|
5593
5672
|
setRunning(false);
|
|
5594
5673
|
setActionError(err instanceof Error ? err.message : String(err));
|
|
5595
5674
|
});
|
|
@@ -5961,7 +6040,8 @@ function SyncHistoryView(props) {
|
|
|
5961
6040
|
onRetry: () => {
|
|
5962
6041
|
setReloadKey((k) => k + 1);
|
|
5963
6042
|
},
|
|
5964
|
-
retrying: loading
|
|
6043
|
+
retrying: loading,
|
|
6044
|
+
t: api.t
|
|
5965
6045
|
});
|
|
5966
6046
|
if (rows.length === 0) return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(Card, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: t("history.empty") }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", { children: t("history.emptyHint") })] });
|
|
5967
6047
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(Card, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(SectionTitle, { title: `${t("history.title")}(${rows.length})` }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("table", {
|