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.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: state.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({ import: { progress: event } });
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
- "modeHint": "_367UGW_modeHint",
3017
- "wizardCard": "_367UGW_wizardCard",
3018
- "kindTag": "_367UGW_kindTag",
3019
- "ghostButton": "_367UGW_ghostButton",
3020
- "categoryName": "_367UGW_categoryName",
3021
- "card": "_367UGW_card",
3022
- "fieldLabel": "_367UGW_fieldLabel",
3023
- "errorLine": "_367UGW_errorLine",
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
- "logScroll": "_367UGW_logScroll",
3027
- "spinner": "_367UGW_spinner",
3028
- "input": "_367UGW_input",
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
- "progressLabel": "_367UGW_progressLabel",
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
- "spinnerWrap": "_367UGW_spinnerWrap",
3037
- "warnText": "_367UGW_warnText",
3038
- "progressPercent": "_367UGW_progressPercent",
3039
- "rollbackBox": "_367UGW_rollbackBox",
3040
- "severityError": "_367UGW_severityError",
3041
- "pullScroll": "_367UGW_pullScroll",
3042
- "select": "_367UGW_select",
3043
- "viewTab": "_367UGW_viewTab",
3044
- "field": "_367UGW_field",
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
- "formError": "_367UGW_formError",
3048
- "section": "_367UGW_section",
3049
- "secretsList": "_367UGW_secretsList",
3050
- "reportScroll": "_367UGW_reportScroll",
3100
+ "modeTab": "_367UGW_modeTab",
3101
+ "logScroll": "_367UGW_logScroll",
3102
+ "groupHeader": "_367UGW_groupHeader",
3051
3103
  "progressBadge": "_367UGW_progressBadge",
3052
- "categoryItem": "_367UGW_categoryItem",
3053
- "badgeWarn": "_367UGW_badgeWarn",
3054
- "planScroll": "_367UGW_planScroll",
3055
- "badge": "_367UGW_badge",
3104
+ "modeTabs": "_367UGW_modeTabs",
3105
+ "dialogBody": "_367UGW_dialogBody",
3056
3106
  "statRow": "_367UGW_statRow",
3057
- "pathNew": "_367UGW_pathNew",
3058
- "badgeInfo": "_367UGW_badgeInfo",
3107
+ "field": "_367UGW_field",
3059
3108
  "dialogBodyScroll": "_367UGW_dialogBodyScroll",
3060
- "badgeError": "_367UGW_badgeError",
3061
- "dialogClose": "_367UGW_dialogClose",
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
- "conflictItem": "_367UGW_conflictItem",
3064
- "aboutAuthor": "_367UGW_aboutAuthor",
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
- "errorItem": "_367UGW_errorItem",
3067
- "logHeader": "_367UGW_logHeader",
3068
- "secretFields": "_367UGW_secretFields",
3069
- "spinnerLabel": "_367UGW_spinnerLabel",
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
- "optionsCard": "_367UGW_optionsCard",
3081
- "sectionTitleBlock": "_367UGW_sectionTitleBlock",
3082
- "groupHeader": "_367UGW_groupHeader",
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
- "errorFooter": "_367UGW_errorFooter",
3090
- "aboutLinkRow": "_367UGW_aboutLinkRow",
3091
- "checkboxRow": "_367UGW_checkboxRow",
3092
- "sectionBody": "_367UGW_sectionBody",
3093
- "actionRow": "_367UGW_actionRow",
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
- "dshCmSpin": "_367UGW_dshCmSpin",
3096
- "sectionHeader": "_367UGW_sectionHeader",
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
- "conflictId": "_367UGW_conflictId",
3106
- "snapshotRowHeader": "_367UGW_snapshotRowHeader",
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
- "dialogCard": "_367UGW_dialogCard",
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
- "pathMappingList": "_367UGW_pathMappingList",
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
- "conflictOptions": "_367UGW_conflictOptions",
3127
- "pathOld": "_367UGW_pathOld",
3128
- "dialogMask": "_367UGW_dialogMask",
3129
- "modeTabs": "_367UGW_modeTabs",
3130
- "groupLabel": "_367UGW_groupLabel",
3131
- "pathRow": "_367UGW_pathRow",
3132
- "modeTab": "_367UGW_modeTab",
3133
- "reportText": "_367UGW_reportText",
3134
- "progressIndeterminate": "_367UGW_progressIndeterminate"
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
- /** 上次渲染的行数(memo 外比较用;新行 = 长度增加) */
4224
- const prevCountRef = (0, react.useRef)(lines.length);
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 (lines.length > prevCountRef.current) setHasNewOutput(true);
4232
- prevCountRef.current = lines.length;
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 数组为同一引用被 append(RunState.log push 不换引用),浅比较失效 ——
4274
- * 自定义比较以行数 + t 引用为准,长度未变时跳过整个列表重渲染。 */
4275
- const ImportLogPanel = (0, react.memo)(ImportLogPanelBase, (prev, next) => prev.lines.length === next.lines.length && prev.t === next.t);
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, { error: archiveUnlockError }),
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, { error }),
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, { error })
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", {