dsh-config-manager 0.1.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +38 -4
- package/README.zh-CN.md +38 -4
- package/lib/client.js +118 -95
- package/lib/client.js.map +1 -1
- package/lib/ui/flow.d.ts +17 -0
- package/lib/ui/flow.js +22 -0
- package/lib/ui/flow.js.map +1 -0
- package/package.json +5 -1
- package/src/client/import/ImportWizardView.tsx +18 -8
- package/src/core/smoke.test.ts +8 -5
- package/src/ui/flow.test.ts +37 -0
- package/src/ui/flow.ts +24 -0
package/README.md
CHANGED
|
@@ -43,13 +43,13 @@ This plugin is a standard **DSH bundle plugin** (mirrors the dsh-ssh engineering
|
|
|
43
43
|
Two install options (choose one):
|
|
44
44
|
|
|
45
45
|
```bash
|
|
46
|
-
# ①
|
|
46
|
+
# ① Recommended — install from the npm registry
|
|
47
|
+
dsh plugin --profile web add dsh-config-manager --config.auto-install-peers=false
|
|
48
|
+
|
|
49
|
+
# ② Alternative — local tgz / directory (development & testing)
|
|
47
50
|
npm run build
|
|
48
51
|
npm pack # produces dsh-config-manager-0.1.0.tgz
|
|
49
52
|
dsh plugin --profile web add file:/absolute/path/to/dsh-config-manager-0.1.0.tgz
|
|
50
|
-
|
|
51
|
-
# ② Install from a registry after publishing
|
|
52
|
-
dsh plugin --profile web add dsh-config-manager
|
|
53
53
|
```
|
|
54
54
|
|
|
55
55
|
> **`--legacy-peer-deps` note**: some DSH core packages in peerDependencies (e.g.
|
|
@@ -157,6 +157,40 @@ npm test # node --test "src/**/*.test.ts" "tests/**/*.te
|
|
|
157
157
|
|
|
158
158
|
Architecture: the core engine (`src/core`) depends only on the `ConfigAdapter` / `HostContext` interfaces (decoupled from the DSH runtime, testable with in-memory mocks); `src/adapters` implements each config category; `src/security` provides secret scanning / encryption / integrity / ZIP safety / redaction; `src/migrations` centralizes schema migration.
|
|
159
159
|
|
|
160
|
+
## Publishing (GitHub Actions · npm trusted publishing / OIDC)
|
|
161
|
+
|
|
162
|
+
Pushing a version tag triggers the CI pipeline in `.github/workflows/publish.yml`, which typechecks, runs the tests, builds, and publishes the package to npm. Publishing uses **npm trusted publishing (OIDC)** — no long-lived token is stored in the repository; the npm CLI exchanges a short-lived identity with the registry via GitHub Actions.
|
|
163
|
+
|
|
164
|
+
```bash
|
|
165
|
+
npm version patch # 0.1.0 → 0.1.1 (also creates the tag)
|
|
166
|
+
git push origin main --tags
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
One-time setup on npmjs.com (required before the first OIDC publish):
|
|
170
|
+
|
|
171
|
+
**Option A — website** (scoped packages / where the UI is available):
|
|
172
|
+
1. Open the package page: https://www.npmjs.com/package/dsh-config-manager → **Settings → Publishing access**.
|
|
173
|
+
2. **Add trusted publisher**: Provider **GitHub Actions** · owner `xiajiajun516` · repository `dsh-config-manager` · workflow filename `publish.yml`.
|
|
174
|
+
|
|
175
|
+
**Option B — CLI** (recommended; works for unscoped packages where the UI section is missing):
|
|
176
|
+
```bash
|
|
177
|
+
npm logout
|
|
178
|
+
npm login # web OAuth + 2FA code
|
|
179
|
+
npm trust github dsh-config-manager \
|
|
180
|
+
--file publish.yml \
|
|
181
|
+
--repo xiajiajun516/dsh-config-manager \
|
|
182
|
+
--allow-publish # first run asks for a 2FA code
|
|
183
|
+
npm trust list dsh-config-manager # verify
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
No `NPM_TOKEN` repository secret is needed — a previously configured token can be revoked (npm is deprecating bypass-2FA tokens anyway).
|
|
187
|
+
|
|
188
|
+
Notes:
|
|
189
|
+
|
|
190
|
+
- The version in `package.json` must match the tag (`npm version` keeps them in sync automatically).
|
|
191
|
+
- The workflow upgrades npm (`npm install -g npm@latest`) because OIDC publishing requires npm ≥ 11.5.1.
|
|
192
|
+
- The workflow can also be triggered manually via **Run workflow** on the Actions page.
|
|
193
|
+
|
|
160
194
|
## Testing
|
|
161
195
|
|
|
162
196
|
Test framework: **node:test (Node built-in, zero dependency)**, following the choice made in the core module (no vitest). Tests live in `src/**/*.test.ts` and `tests/**/*.test.ts`.
|
package/README.zh-CN.md
CHANGED
|
@@ -45,13 +45,13 @@ Analyze → Preview → Snapshot → Apply → Validate → Rollback(if needed)
|
|
|
45
45
|
两种安装方式(二选一):
|
|
46
46
|
|
|
47
47
|
```bash
|
|
48
|
-
# ①
|
|
48
|
+
# ① 推荐 —— 从 npm registry 安装
|
|
49
|
+
dsh plugin --profile web add dsh-config-manager --config.auto-install-peers=false
|
|
50
|
+
|
|
51
|
+
# ② 备选 —— 本地 tgz / 目录安装(开发与测试)
|
|
49
52
|
npm run build
|
|
50
53
|
npm pack # 产出 dsh-config-manager-0.1.0.tgz
|
|
51
54
|
dsh plugin --profile web add file:/absolute/path/to/dsh-config-manager-0.1.0.tgz
|
|
52
|
-
|
|
53
|
-
# ② 发布后从 registry 安装
|
|
54
|
-
dsh plugin --profile web add dsh-config-manager
|
|
55
55
|
```
|
|
56
56
|
|
|
57
57
|
> **`--legacy-peer-deps` 说明**:peerDependencies 中的部分 DSH 核心包(如
|
|
@@ -159,6 +159,40 @@ npm test # node --test "src/**/*.test.ts" "tests/**/*.te
|
|
|
159
159
|
|
|
160
160
|
架构:核心引擎(`src/core`)只依赖 `ConfigAdapter` / `HostContext` 接口(与 DSH 运行时解耦,可用内存 mock 测试);`src/adapters` 实现各配置类别;`src/security` 提供秘密扫描 / 加密 / 完整性 / ZIP 安全 / redaction;`src/migrations` 集中 schema 迁移。
|
|
161
161
|
|
|
162
|
+
## Publishing(GitHub Actions · npm Trusted Publishing / OIDC)
|
|
163
|
+
|
|
164
|
+
推送版本标签会触发 `.github/workflows/publish.yml` 的 CI 流水线:typecheck → 测试 → 构建 → 自动发布到 npm。发布使用 **npm Trusted Publishing(OIDC)**——仓库不存储任何长期令牌,npm CLI 通过 GitHub Actions 的 OIDC 与 registry 交换短期身份。
|
|
165
|
+
|
|
166
|
+
```bash
|
|
167
|
+
npm version patch # 0.1.0 → 0.1.1(同时创建 tag)
|
|
168
|
+
git push origin main --tags
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
npmjs.com 一次性配置(首次 OIDC 发布前必须完成):
|
|
172
|
+
|
|
173
|
+
**方案 A — 网页**(有 scope 包或 UI 入口可用时):
|
|
174
|
+
1. 打开包页面:https://www.npmjs.com/package/dsh-config-manager → **Settings → Publishing access**。
|
|
175
|
+
2. **Add trusted publisher**:Provider **GitHub Actions** · owner `xiajiajun516` · repository `dsh-config-manager` · workflow filename `publish.yml`。
|
|
176
|
+
|
|
177
|
+
**方案 B — CLI(推荐;无 scope 包 UI 无入口时用这个)**:
|
|
178
|
+
```bash
|
|
179
|
+
npm logout
|
|
180
|
+
npm login # 网页 OAuth + 2FA 验证码
|
|
181
|
+
npm trust github dsh-config-manager \
|
|
182
|
+
--file publish.yml \
|
|
183
|
+
--repo xiajiajun516/dsh-config-manager \
|
|
184
|
+
--allow-publish # 首次会要求输入 2FA 验证码
|
|
185
|
+
npm trust list dsh-config-manager # 验证
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
无需 `NPM_TOKEN` 仓库密钥——之前配置的令牌可以撤销(npm 也正在逐步废弃 bypass-2FA 令牌)。
|
|
189
|
+
|
|
190
|
+
说明:
|
|
191
|
+
|
|
192
|
+
- `package.json` 中的版本须与 tag 一致(`npm version` 会自动同步)。
|
|
193
|
+
- 流水线会先升级 npm(`npm install -g npm@latest`),因为 OIDC 发布要求 npm ≥ 11.5.1。
|
|
194
|
+
- 也可在 Actions 页面点 **Run workflow** 手动触发。
|
|
195
|
+
|
|
162
196
|
## Testing
|
|
163
197
|
|
|
164
198
|
测试框架为 **node:test(Node 内置,零依赖)**,沿用核心模块的既有选择(不引入 vitest)。测试位于 `src/**/*.test.ts` 与 `tests/**/*.test.ts`。
|
package/lib/client.js
CHANGED
|
@@ -548,8 +548,8 @@ var ExportFlow = class {
|
|
|
548
548
|
}
|
|
549
549
|
};
|
|
550
550
|
//#endregion
|
|
551
|
-
//#region \0config-manager-css
|
|
552
|
-
const css = ".fjdJpq_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}.fjdJpq_sectionHeader{flex:none;align-items:center;gap:10px;display:flex}.fjdJpq_viewTabs{border-bottom:1px solid var(--dsw-alias-border-l1);flex:1;gap:2px;display:flex}.fjdJpq_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}.fjdJpq_viewTab:hover{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-interactive-bg-hover)}.fjdJpq_viewTab[data-active]{color:var(--dsw-alias-label-primary);border-bottom-color:var(--dsw-alias-state-business-primary);font-weight:600}.fjdJpq_sectionBody{flex-direction:column;flex:1;min-height:0;display:flex;overflow-y:auto}.fjdJpq_viewBody{flex-direction:column;gap:12px;padding:4px 2px 16px;display:flex}.fjdJpq_iconButton{width:26px;height:26px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-radius:6px;justify-content:center;align-items:center;padding:0;font-size:15px;display:inline-flex}.fjdJpq_iconButton:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.fjdJpq_sectionTitleBlock{flex-direction:column;gap:2px;display:flex}.fjdJpq_sectionTitle{color:var(--dsw-alias-label-primary);margin:0;font-size:15px;font-weight:700}.fjdJpq_sectionSubtitle{color:var(--dsw-alias-label-secondary);margin:0;font-size:12px;line-height:1.5}.fjdJpq_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}.fjdJpq_primaryButton:hover:not(:disabled){background:var(--dsw-alias-button-info-hover)}.fjdJpq_primaryButton:disabled{opacity:.5;cursor:default}.fjdJpq_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}.fjdJpq_ghostButton:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.fjdJpq_ghostButton:disabled{opacity:.45;cursor:default}.fjdJpq_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}.fjdJpq_dangerButton:hover:not(:disabled){background:var(--dsw-alias-state-error-primary);color:var(--dsw-alias-label-primary-foreground)}.fjdJpq_dangerButton:disabled{opacity:.45;cursor:default}.fjdJpq_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}.fjdJpq_badgeInfo{color:var(--dsw-alias-state-business-primary);border-color:var(--dsw-alias-state-business-primary)}.fjdJpq_badgeOk{color:var(--dsw-alias-state-success-primary);border-color:var(--dsw-alias-state-success-primary)}.fjdJpq_badgeWarn{color:var(--dsw-alias-state-warn-primary);border-color:var(--dsw-alias-state-warn-primary)}.fjdJpq_badgeError{color:var(--dsw-alias-state-error-primary);border-color:var(--dsw-alias-state-error-primary)}.fjdJpq_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}.fjdJpq_banner[data-kind=ok]{color:var(--dsw-alias-state-success-primary);border-color:var(--dsw-alias-state-success-primary)}.fjdJpq_banner[data-kind=error]{color:var(--dsw-alias-state-error-primary);border-color:var(--dsw-alias-state-error-primary)}.fjdJpq_banner[data-kind=info]{color:var(--dsw-alias-state-business-primary);border-color:var(--dsw-alias-state-business-primary)}.fjdJpq_banner[data-kind=warn]{color:var(--dsw-alias-state-warn-primary);border-color:var(--dsw-alias-state-warn-primary)}.fjdJpq_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}.fjdJpq_field{flex-direction:column;gap:5px;display:flex}.fjdJpq_fieldLabel{color:var(--dsw-alias-label-secondary);font-size:12px;font-weight:600}.fjdJpq_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}.fjdJpq_input:focus{border-color:var(--dsw-alias-state-business-primary)}.fjdJpq_input::placeholder{color:var(--dsw-alias-label-tertiary)}.fjdJpq_input:disabled{opacity:.55}.fjdJpq_hint{color:var(--dsw-alias-label-tertiary);font-size:11.5px;line-height:1.5}.fjdJpq_formError{color:var(--dsw-alias-state-error-primary);margin:0;font-size:12px}.fjdJpq_checkboxRow{color:var(--dsw-alias-label-primary);cursor:pointer;align-items:flex-start;gap:8px;font-size:13px;display:flex}.fjdJpq_checkboxRow input{flex:none;margin-top:2px}.fjdJpq_radioLabel{color:var(--dsw-alias-label-primary);cursor:pointer;align-items:center;gap:6px;font-size:13px;display:inline-flex}.fjdJpq_secretFields{grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:10px 12px;padding-top:4px;display:grid}.fjdJpq_hiddenFile{display:none}.fjdJpq_modeTabs{border-bottom:1px solid var(--dsw-alias-border-l1);flex:none;gap:2px;display:flex}.fjdJpq_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}.fjdJpq_modeTab:hover{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-interactive-bg-hover)}.fjdJpq_modeTab[data-active]{color:var(--dsw-alias-label-primary);border-bottom-color:var(--dsw-alias-state-business-primary);font-weight:600}.fjdJpq_modeHint{color:var(--dsw-alias-label-secondary);font-size:12px;line-height:1.5}.fjdJpq_groupList{flex-direction:column;gap:10px;display:flex}.fjdJpq_groupCard{gap:8px}.fjdJpq_groupHeader{flex-wrap:wrap;align-items:baseline;gap:8px;display:flex}.fjdJpq_groupLabel{color:var(--dsw-alias-label-primary);font-size:12.5px;font-weight:700}.fjdJpq_groupNote{color:var(--dsw-alias-label-tertiary);font-size:11.5px}.fjdJpq_groupItems{flex-direction:column;gap:6px;display:flex}.fjdJpq_categoryItem{flex-wrap:wrap;align-items:center;gap:8px;display:inline-flex}.fjdJpq_categoryName{font-weight:500}.fjdJpq_categoryDesc{color:var(--dsw-alias-label-tertiary);font-size:11.5px}.fjdJpq_optionsCard{gap:8px}.fjdJpq_warnList{margin:4px 0 0;padding-left:18px}.fjdJpq_actionRow{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.fjdJpq_progressBlock{flex-direction:column;flex:none;gap:6px;display:flex}.fjdJpq_progressMeta{color:var(--dsw-alias-label-secondary);flex-wrap:wrap;gap:12px;font-size:12px;display:flex}.fjdJpq_progressLabel{font-weight:600}.fjdJpq_progressDetail{color:var(--dsw-alias-label-tertiary)}.fjdJpq_progressPercent{font-variant-numeric:tabular-nums;margin-left:auto}.fjdJpq_progressTrack{background:var(--dsw-alias-interactive-bg-hover);border-radius:999px;height:8px;overflow:hidden}.fjdJpq_progressBar{background:var(--dsw-alias-state-business-primary);border-radius:999px;height:100%;transition:width .12s linear}.fjdJpq_progressBarDone{background:var(--dsw-alias-state-success-primary)}.fjdJpq_progressIndeterminate{width:40%;animation:1s ease-in-out infinite fjdJpq_dshCmIndeterminate}@keyframes fjdJpq_dshCmIndeterminate{0%{margin-left:-40%}to{margin-left:100%}}.fjdJpq_reportView{flex-direction:column;gap:10px;display:flex}.fjdJpq_statRow{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.fjdJpq_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}.fjdJpq_reportFooter{justify-content:flex-end;gap:8px;display:flex}.fjdJpq_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}.fjdJpq_rollbackBox .fjdJpq_reportText{border-color:var(--dsw-alias-border-l2)}.fjdJpq_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}.fjdJpq_errorTitle{color:var(--dsw-alias-state-error-primary);font-size:13px;font-weight:700}.fjdJpq_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}.fjdJpq_errorAction{color:var(--dsw-alias-label-secondary);font-size:12.5px}.fjdJpq_errorActionLabel{color:var(--dsw-alias-state-business-primary)}.fjdJpq_errorItem{color:var(--dsw-alias-label-tertiary);font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11.5px}.fjdJpq_errorFooter{justify-content:flex-end;display:flex}.fjdJpq_errorList{flex-direction:column;gap:4px;display:flex}.fjdJpq_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}.fjdJpq_conflictList{flex-direction:column;gap:10px;display:flex}.fjdJpq_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}.fjdJpq_conflictHead{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.fjdJpq_conflictId{color:var(--dsw-alias-label-primary);font-size:12.5px;font-weight:600}.fjdJpq_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}.fjdJpq_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}.fjdJpq_conflictOptions{flex-wrap:wrap;gap:14px;display:flex}.fjdJpq_pathMappingList{flex-direction:column;gap:8px;display:flex}.fjdJpq_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}.fjdJpq_pathOld,.fjdJpq_pathNew{flex-direction:column;gap:4px;min-width:0;display:flex}.fjdJpq_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}.fjdJpq_pathIssueKind{color:var(--dsw-alias-state-warn-primary);font-size:10.5px}.fjdJpq_secretsList{flex-direction:column;gap:10px;display:flex}.fjdJpq_empty{text-align:center;color:var(--dsw-alias-label-tertiary);padding:22px 12px;font-size:12.5px}.fjdJpq_spinnerWrap{align-items:center;gap:6px;display:inline-flex}.fjdJpq_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 fjdJpq_dshCmSpin;display:inline-block}.fjdJpq_spinnerLabel{color:var(--dsw-alias-label-secondary);font-size:12px}@keyframes fjdJpq_dshCmSpin{to{transform:rotate(360deg)}}";
|
|
551
|
+
//#region \0config-manager-css:/home/runner/work/dsh-config-manager/dsh-config-manager/src/client/config-manager.module.css.js
|
|
552
|
+
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_iconButton{width:26px;height:26px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-radius:6px;justify-content:center;align-items:center;padding:0;font-size:15px;display:inline-flex}._367UGW_iconButton:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}._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_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_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_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)}._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}@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)}}";
|
|
553
553
|
const tagId = "dsh-config-manager/config-manager.module.css";
|
|
554
554
|
if (typeof document !== "undefined" && document.querySelector("style[data-tag=\"dsh-config-manager/config-manager.module.css\"]") === null) {
|
|
555
555
|
const tag = document.createElement("style");
|
|
@@ -559,93 +559,93 @@ if (typeof document !== "undefined" && document.querySelector("style[data-tag=\"
|
|
|
559
559
|
document.head.appendChild(tag);
|
|
560
560
|
}
|
|
561
561
|
var config_manager_module_css_default = {
|
|
562
|
-
"
|
|
563
|
-
"
|
|
564
|
-
"
|
|
565
|
-
"
|
|
566
|
-
"
|
|
567
|
-
"
|
|
568
|
-
"
|
|
569
|
-
"
|
|
570
|
-
"
|
|
571
|
-
"
|
|
572
|
-
"
|
|
573
|
-
"
|
|
574
|
-
"
|
|
575
|
-
"
|
|
576
|
-
"
|
|
577
|
-
"
|
|
578
|
-
"
|
|
579
|
-
"
|
|
580
|
-
"
|
|
581
|
-
"
|
|
582
|
-
"
|
|
583
|
-
"
|
|
584
|
-
"
|
|
585
|
-
"
|
|
586
|
-
"
|
|
587
|
-
"
|
|
588
|
-
"
|
|
589
|
-
"
|
|
590
|
-
"
|
|
591
|
-
"
|
|
592
|
-
"
|
|
593
|
-
"
|
|
594
|
-
"
|
|
595
|
-
"
|
|
596
|
-
"
|
|
597
|
-
"
|
|
598
|
-
"
|
|
599
|
-
"
|
|
600
|
-
"
|
|
601
|
-
"
|
|
602
|
-
"
|
|
603
|
-
"
|
|
604
|
-
"
|
|
605
|
-
"
|
|
606
|
-
"
|
|
607
|
-
"
|
|
608
|
-
"
|
|
609
|
-
"
|
|
610
|
-
"
|
|
611
|
-
"
|
|
612
|
-
"
|
|
613
|
-
"
|
|
614
|
-
"
|
|
615
|
-
"
|
|
616
|
-
"
|
|
617
|
-
"
|
|
618
|
-
"
|
|
619
|
-
"
|
|
620
|
-
"
|
|
621
|
-
"
|
|
622
|
-
"
|
|
623
|
-
"
|
|
624
|
-
"
|
|
625
|
-
"
|
|
626
|
-
"
|
|
627
|
-
"
|
|
628
|
-
"
|
|
629
|
-
"
|
|
630
|
-
"
|
|
631
|
-
"
|
|
632
|
-
"
|
|
633
|
-
"
|
|
634
|
-
"
|
|
635
|
-
"
|
|
636
|
-
"
|
|
637
|
-
"
|
|
638
|
-
"
|
|
639
|
-
"
|
|
640
|
-
"
|
|
641
|
-
"
|
|
642
|
-
"
|
|
643
|
-
"
|
|
644
|
-
"
|
|
645
|
-
"
|
|
646
|
-
"
|
|
647
|
-
"
|
|
648
|
-
"
|
|
562
|
+
"input": "_367UGW_input",
|
|
563
|
+
"dangerButton": "_367UGW_dangerButton",
|
|
564
|
+
"badgeInfo": "_367UGW_badgeInfo",
|
|
565
|
+
"errorReason": "_367UGW_errorReason",
|
|
566
|
+
"pathMappingList": "_367UGW_pathMappingList",
|
|
567
|
+
"sectionTitleBlock": "_367UGW_sectionTitleBlock",
|
|
568
|
+
"radioLabel": "_367UGW_radioLabel",
|
|
569
|
+
"modeTab": "_367UGW_modeTab",
|
|
570
|
+
"groupLabel": "_367UGW_groupLabel",
|
|
571
|
+
"actionRow": "_367UGW_actionRow",
|
|
572
|
+
"spinnerWrap": "_367UGW_spinnerWrap",
|
|
573
|
+
"groupNote": "_367UGW_groupNote",
|
|
574
|
+
"dshCmSpin": "_367UGW_dshCmSpin",
|
|
575
|
+
"progressMeta": "_367UGW_progressMeta",
|
|
576
|
+
"groupItems": "_367UGW_groupItems",
|
|
577
|
+
"categoryName": "_367UGW_categoryName",
|
|
578
|
+
"section": "_367UGW_section",
|
|
579
|
+
"badgeOk": "_367UGW_badgeOk",
|
|
580
|
+
"errorList": "_367UGW_errorList",
|
|
581
|
+
"progressBarDone": "_367UGW_progressBarDone",
|
|
582
|
+
"conflictItem": "_367UGW_conflictItem",
|
|
583
|
+
"errorItem": "_367UGW_errorItem",
|
|
584
|
+
"sectionTitle": "_367UGW_sectionTitle",
|
|
585
|
+
"sectionBody": "_367UGW_sectionBody",
|
|
586
|
+
"progressBlock": "_367UGW_progressBlock",
|
|
587
|
+
"hint": "_367UGW_hint",
|
|
588
|
+
"hiddenFile": "_367UGW_hiddenFile",
|
|
589
|
+
"groupList": "_367UGW_groupList",
|
|
590
|
+
"progressDetail": "_367UGW_progressDetail",
|
|
591
|
+
"conflictHead": "_367UGW_conflictHead",
|
|
592
|
+
"errorLine": "_367UGW_errorLine",
|
|
593
|
+
"optionsCard": "_367UGW_optionsCard",
|
|
594
|
+
"groupCard": "_367UGW_groupCard",
|
|
595
|
+
"card": "_367UGW_card",
|
|
596
|
+
"warnList": "_367UGW_warnList",
|
|
597
|
+
"dshCmIndeterminate": "_367UGW_dshCmIndeterminate",
|
|
598
|
+
"reportFooter": "_367UGW_reportFooter",
|
|
599
|
+
"errorFooter": "_367UGW_errorFooter",
|
|
600
|
+
"errorBanner": "_367UGW_errorBanner",
|
|
601
|
+
"groupHeader": "_367UGW_groupHeader",
|
|
602
|
+
"categoryItem": "_367UGW_categoryItem",
|
|
603
|
+
"errorAction": "_367UGW_errorAction",
|
|
604
|
+
"categoryDesc": "_367UGW_categoryDesc",
|
|
605
|
+
"secretsList": "_367UGW_secretsList",
|
|
606
|
+
"viewTab": "_367UGW_viewTab",
|
|
607
|
+
"progressPercent": "_367UGW_progressPercent",
|
|
608
|
+
"reportView": "_367UGW_reportView",
|
|
609
|
+
"conflictDetail": "_367UGW_conflictDetail",
|
|
610
|
+
"ghostButton": "_367UGW_ghostButton",
|
|
611
|
+
"checkboxRow": "_367UGW_checkboxRow",
|
|
612
|
+
"iconButton": "_367UGW_iconButton",
|
|
613
|
+
"primaryButton": "_367UGW_primaryButton",
|
|
614
|
+
"errorTitle": "_367UGW_errorTitle",
|
|
615
|
+
"conflictOptions": "_367UGW_conflictOptions",
|
|
616
|
+
"sectionHeader": "_367UGW_sectionHeader",
|
|
617
|
+
"progressTrack": "_367UGW_progressTrack",
|
|
618
|
+
"progressIndeterminate": "_367UGW_progressIndeterminate",
|
|
619
|
+
"formError": "_367UGW_formError",
|
|
620
|
+
"empty": "_367UGW_empty",
|
|
621
|
+
"spinner": "_367UGW_spinner",
|
|
622
|
+
"pathRow": "_367UGW_pathRow",
|
|
623
|
+
"pathIssueKind": "_367UGW_pathIssueKind",
|
|
624
|
+
"sectionSubtitle": "_367UGW_sectionSubtitle",
|
|
625
|
+
"badgeError": "_367UGW_badgeError",
|
|
626
|
+
"conflictId": "_367UGW_conflictId",
|
|
627
|
+
"viewTabs": "_367UGW_viewTabs",
|
|
628
|
+
"modeHint": "_367UGW_modeHint",
|
|
629
|
+
"pathOld": "_367UGW_pathOld",
|
|
630
|
+
"field": "_367UGW_field",
|
|
631
|
+
"statRow": "_367UGW_statRow",
|
|
632
|
+
"banner": "_367UGW_banner",
|
|
633
|
+
"fieldLabel": "_367UGW_fieldLabel",
|
|
634
|
+
"modeTabs": "_367UGW_modeTabs",
|
|
635
|
+
"progressBar": "_367UGW_progressBar",
|
|
636
|
+
"errorActionLabel": "_367UGW_errorActionLabel",
|
|
637
|
+
"pathNew": "_367UGW_pathNew",
|
|
638
|
+
"spinnerLabel": "_367UGW_spinnerLabel",
|
|
639
|
+
"rollbackBox": "_367UGW_rollbackBox",
|
|
640
|
+
"reportText": "_367UGW_reportText",
|
|
641
|
+
"viewBody": "_367UGW_viewBody",
|
|
642
|
+
"severityError": "_367UGW_severityError",
|
|
643
|
+
"conflictList": "_367UGW_conflictList",
|
|
644
|
+
"badgeWarn": "_367UGW_badgeWarn",
|
|
645
|
+
"progressLabel": "_367UGW_progressLabel",
|
|
646
|
+
"secretFields": "_367UGW_secretFields",
|
|
647
|
+
"pathValue": "_367UGW_pathValue",
|
|
648
|
+
"badge": "_367UGW_badge"
|
|
649
649
|
};
|
|
650
650
|
//#endregion
|
|
651
651
|
//#region src/client/common/ui.tsx
|
|
@@ -1633,6 +1633,19 @@ var ConflictCollector = class {
|
|
|
1633
1633
|
}
|
|
1634
1634
|
};
|
|
1635
1635
|
//#endregion
|
|
1636
|
+
//#region src/ui/flow.ts
|
|
1637
|
+
/**
|
|
1638
|
+
* 计算下一阶段:在 `list`(适用阶段的有序列表)中取 `from` 的下一项。
|
|
1639
|
+
* - `from` 不在列表中(如来自 preview 页)→ 取第一项;
|
|
1640
|
+
* - `from` 已是最后一项(confirm)→ 原地返回;
|
|
1641
|
+
* - 绝不回退:已完成阶段不会因仍适用而被再次命中。
|
|
1642
|
+
*/
|
|
1643
|
+
function nextFlowPhase(list, from) {
|
|
1644
|
+
if (list.length === 0) return "confirm";
|
|
1645
|
+
const idx = list.indexOf(from);
|
|
1646
|
+
return list[Math.min(idx + 1, list.length - 1)] ?? "confirm";
|
|
1647
|
+
}
|
|
1648
|
+
//#endregion
|
|
1636
1649
|
//#region src/client/import/ConflictList.tsx
|
|
1637
1650
|
/**
|
|
1638
1651
|
* 冲突决策列表(规范 §11,绑 src/ui/conflict-view.ts 的 ConflictCollector)。
|
|
@@ -1820,6 +1833,7 @@ function PathMappingForm({ issues, initial, t, onChange }) {
|
|
|
1820
1833
|
* 中间阶段(conflicts/path-mapping/secrets)是 UI 层流程页,wizard 的 decisions 由
|
|
1821
1834
|
* 对应组件收集后写入。
|
|
1822
1835
|
*/
|
|
1836
|
+
/** 中间流程阶段(wizard.step 之外的 UI 层页面)——定义见 src/ui/flow.ts */
|
|
1823
1837
|
const SCORE_LABEL = {
|
|
1824
1838
|
excellent: "Excellent",
|
|
1825
1839
|
good: "Good",
|
|
@@ -1896,13 +1910,22 @@ function ImportWizardView({ api, t }) {
|
|
|
1896
1910
|
const hasConflicts = (snapshot.plan?.items ?? []).some((i) => i.kind === "Conflict");
|
|
1897
1911
|
const hasPathIssues = (snapshot.analysis?.pathIssues.length ?? 0) > 0;
|
|
1898
1912
|
const hasSecrets = (snapshot.plan?.missingSecrets.length ?? 0) > 0;
|
|
1899
|
-
/**
|
|
1900
|
-
|
|
1901
|
-
|
|
1902
|
-
|
|
1903
|
-
|
|
1904
|
-
|
|
1913
|
+
/**
|
|
1914
|
+
* 适用阶段的有序列表(仅含需要用户处理 + 确认页)。
|
|
1915
|
+
* hasConflicts/hasPathIssues/hasSecrets 基于原始 analysis/plan(Dry Run 产物),
|
|
1916
|
+
* 在流程中不会因已解决而重算——所以导航必须只前进(见 nextFlowPhase),
|
|
1917
|
+
* 而不是靠"当前阶段 != X"判定(那会让已完成阶段被重新命中、跳回上一步)。
|
|
1918
|
+
*/
|
|
1919
|
+
const applicablePhases = () => {
|
|
1920
|
+
const list = [];
|
|
1921
|
+
if (hasConflicts) list.push("conflicts");
|
|
1922
|
+
if (hasPathIssues) list.push("path-mapping");
|
|
1923
|
+
if (hasSecrets) list.push("secrets");
|
|
1924
|
+
list.push("confirm");
|
|
1925
|
+
return list;
|
|
1905
1926
|
};
|
|
1927
|
+
/** 从某阶段完成后进入的下一个阶段:只前进(from 不在列表时取第一项) */
|
|
1928
|
+
const nextPhase = (from) => nextFlowPhase(applicablePhases(), from);
|
|
1906
1929
|
/** 选择并上传 ZIP → wizard.selectZip(analyzing → compatibility) */
|
|
1907
1930
|
const onPickFile = async (file) => {
|
|
1908
1931
|
if (file === void 0) return;
|