@phoenix-wing/kt-codegen 0.5.0 → 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/dist/ui/KtCodegenApplyReport.d.ts +72 -0
  2. package/dist/ui/KtCodegenApplyReport.d.ts.map +1 -0
  3. package/dist/ui/KtCodegenApplyReport.js +331 -0
  4. package/dist/ui/KtCodegenApplyReport.js.map +1 -0
  5. package/dist/ui/KtCodegenApplyReportModel.d.ts +73 -0
  6. package/dist/ui/KtCodegenApplyReportModel.d.ts.map +1 -0
  7. package/dist/ui/KtCodegenApplyReportModel.js +59 -0
  8. package/dist/ui/KtCodegenApplyReportModel.js.map +1 -0
  9. package/dist/ui/KtCodegenControlCatalog.d.ts +41 -0
  10. package/dist/ui/KtCodegenControlCatalog.d.ts.map +1 -0
  11. package/dist/ui/KtCodegenControlCatalog.js +365 -0
  12. package/dist/ui/KtCodegenControlCatalog.js.map +1 -0
  13. package/dist/ui/KtCodegenControlCatalogState.d.ts +54 -0
  14. package/dist/ui/KtCodegenControlCatalogState.d.ts.map +1 -0
  15. package/dist/ui/KtCodegenControlCatalogState.js +96 -0
  16. package/dist/ui/KtCodegenControlCatalogState.js.map +1 -0
  17. package/dist/ui/KtCodegenControlPanel.d.ts.map +1 -1
  18. package/dist/ui/KtCodegenControlPanel.js +20 -2
  19. package/dist/ui/KtCodegenControlPanel.js.map +1 -1
  20. package/dist/ui/KtCodegenControlViewModel.d.ts +9 -0
  21. package/dist/ui/KtCodegenControlViewModel.d.ts.map +1 -1
  22. package/dist/ui/KtCodegenControlViewModel.js +62 -0
  23. package/dist/ui/KtCodegenControlViewModel.js.map +1 -1
  24. package/dist/ui/KtCodegenPrimaryPanel.d.ts +2 -5
  25. package/dist/ui/KtCodegenPrimaryPanel.d.ts.map +1 -1
  26. package/dist/ui/KtCodegenPrimaryPanel.js +18 -100
  27. package/dist/ui/KtCodegenPrimaryPanel.js.map +1 -1
  28. package/dist/ui/KtCodegenPrimaryUiState.d.ts +10 -0
  29. package/dist/ui/KtCodegenPrimaryUiState.d.ts.map +1 -0
  30. package/dist/ui/KtCodegenPrimaryUiState.js +16 -0
  31. package/dist/ui/KtCodegenPrimaryUiState.js.map +1 -0
  32. package/dist/ui/KtCodegenUiContracts.d.ts +19 -0
  33. package/dist/ui/KtCodegenUiContracts.d.ts.map +1 -1
  34. package/dist/ui/index.d.ts +4 -0
  35. package/dist/ui/index.d.ts.map +1 -1
  36. package/dist/ui/index.js +4 -0
  37. package/dist/ui/index.js.map +1 -1
  38. package/package.json +5 -1
@@ -0,0 +1,365 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ import { KT_CODEGEN_CONTROL_CATALOG_GROUPS, ktCodegenControlCatalogBlocks, ktCodegenControlVisibleSelectionState, ktCodegenFilterControlCatalogBlocks, ktCodegenGroupControlCatalogBlocks, ktCodegenNextControlSelection, ktCodegenNextControlVisibleSelection, } from "./KtCodegenControlCatalogState.js";
3
+ export const KT_CODEGEN_CONTROL_CATALOG_TAG_NAME = "kt-codegen-control-catalog";
4
+ const STYLE = `
5
+ :host {
6
+ --pnw-codegen-border: var(--vscode-panel-border, var(--border, color-mix(in srgb, currentColor 18%, transparent)));
7
+ --pnw-codegen-bg: var(--vscode-editor-background, var(--sidebar-bg, #fff));
8
+ --pnw-codegen-head-bg: var(--vscode-sideBarSectionHeader-background, var(--panel-head-bg, #f6f6f6));
9
+ --pnw-codegen-muted: var(--vscode-descriptionForeground, var(--muted, #666));
10
+ --pnw-codegen-hover: var(--vscode-list-hoverBackground, color-mix(in srgb, currentColor 8%, transparent));
11
+ --pnw-codegen-focus: var(--vscode-focusBorder, var(--accent, #007acc));
12
+ display: block; min-height: 0; color: var(--vscode-foreground, var(--text, inherit));
13
+ background: var(--pnw-codegen-bg); font: 12px/1.35 var(--vscode-font-family, system-ui, sans-serif);
14
+ }
15
+ * { box-sizing: border-box; }
16
+ button, input, select { font: inherit; }
17
+ button { cursor: pointer; }
18
+ button:disabled, input:disabled { opacity: .55; cursor: not-allowed; }
19
+ button:focus-visible, input:focus-visible, select:focus-visible, summary:focus-visible { outline: 1px solid var(--pnw-codegen-focus); outline-offset: 1px; }
20
+ .pnw-codegen-catalog-filters { display: flex; flex-wrap: nowrap; align-items: center; gap: 5px; padding: 6px; background: var(--vscode-editorWidget-background, var(--pnw-codegen-head-bg)); border-top: 1px solid var(--pnw-codegen-border); border-bottom: 1px solid var(--pnw-codegen-border); }
21
+ .pnw-codegen-catalog-label { color: var(--pnw-codegen-muted); font-size: 11px; }
22
+ .pnw-codegen-catalog-filter { min-width: 0; min-height: 25px; padding: 2px 24px 2px 7px; color: inherit; background: var(--vscode-dropdown-background, var(--input-bg, transparent)); border: 1px solid var(--pnw-codegen-border); border-radius: 3px; }
23
+ .pnw-codegen-status-filter { flex: 1 1 116px; }
24
+ .pnw-codegen-scope-filter { flex: 1 1 104px; }
25
+ .pnw-codegen-output-visible, .pnw-codegen-output-one { min-height: 25px; padding: 2px; color: inherit; background: var(--vscode-button-secondaryBackground, var(--btn-bg, transparent)); border: 1px solid var(--pnw-codegen-border); border-radius: 3px; }
26
+ .pnw-codegen-output-visible { flex: 0 0 27px; width: 27px; font-size: 15px; }
27
+ .pnw-codegen-catalog-list { max-height: 290px; overflow-x: hidden; overflow-y: auto; overscroll-behavior: contain; scrollbar-gutter: stable both-edges; }
28
+ .pnw-codegen-catalog-group { border-bottom: 1px solid var(--pnw-codegen-border); }
29
+ .pnw-codegen-catalog-group:last-child { border-bottom: 0; }
30
+ .pnw-codegen-catalog-group > summary { display: flex; align-items: center; gap: 6px; min-height: 32px; padding: 4px 8px; color: inherit; background: var(--pnw-codegen-head-bg); cursor: pointer; user-select: none; }
31
+ .pnw-codegen-catalog-group > summary:hover { background: var(--pnw-codegen-hover); }
32
+ .pnw-codegen-group-check { flex: 0 0 auto; margin: 0; }
33
+ .pnw-codegen-group-title { font-weight: 700; }
34
+ .pnw-codegen-group-count { margin-left: auto; color: var(--pnw-codegen-muted); font-size: 10px; font-weight: 400; text-align: right; }
35
+ .pnw-codegen-group-list { border-top: 1px solid var(--pnw-codegen-border); }
36
+ .pnw-codegen-catalog-row { display: grid; grid-template-columns: 22px 34px minmax(0, 1fr) auto auto auto; align-items: center; gap: 5px; min-height: 36px; padding: 3px 7px 3px 20px; border-bottom: 1px solid var(--pnw-codegen-border); }
37
+ .pnw-codegen-catalog-row:last-child { border-bottom: 0; }
38
+ .pnw-codegen-catalog-row:hover { background: var(--pnw-codegen-hover); }
39
+ .pnw-codegen-legacy-id { justify-self: start; padding: 1px 4px; color: var(--pnw-codegen-muted); border: 1px solid var(--pnw-codegen-border); border-radius: 999px; font-size: 10px; white-space: nowrap; }
40
+ .pnw-codegen-catalog-copy { min-width: 0; overflow: hidden; }
41
+ .pnw-codegen-title-line { display: flex; min-width: 0; align-items: center; gap: 4px; overflow: hidden; white-space: nowrap; }
42
+ .pnw-codegen-catalog-title, .pnw-codegen-control-words { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
43
+ .pnw-codegen-catalog-title { min-width: 0; font-weight: 600; }
44
+ .pnw-codegen-control-words { color: var(--pnw-codegen-muted); }
45
+ .pnw-codegen-badges { display: flex; align-items: center; justify-content: flex-end; gap: 3px; }
46
+ .pnw-codegen-badge { padding: 1px 4px; color: var(--pnw-codegen-muted); border: 1px solid var(--pnw-codegen-border); border-radius: 999px; font-size: 10px; white-space: nowrap; }
47
+ .pnw-codegen-badge.pnw-codegen-legacy, .pnw-codegen-state.pnw-codegen-missing { color: var(--vscode-editorWarning-foreground, #b45309); border-color: currentColor; }
48
+ .pnw-codegen-state.pnw-codegen-hit { color: var(--vscode-testing-iconPassed, #15803d); border-color: currentColor; }
49
+ .pnw-codegen-state.pnw-codegen-unclosed { color: var(--vscode-errorForeground, #b91c1c); border-color: currentColor; }
50
+ .pnw-codegen-output-one { width: 28px; }
51
+ .pnw-codegen-catalog-empty { padding: 12px 8px; color: var(--pnw-codegen-muted); text-align: center; }
52
+ :host([mode="compact"]) .pnw-codegen-catalog-list { max-height: 236px; }
53
+ :host([mode="compact"]) .pnw-codegen-catalog-filters { gap: 3px; padding: 3px 5px; }
54
+ :host([mode="compact"]) .pnw-codegen-catalog-group > summary { min-height: 28px; gap: 4px; padding: 2px 5px; }
55
+ :host([mode="compact"]) .pnw-codegen-catalog-row { grid-template-columns: 22px 34px minmax(0, 1fr) auto auto; gap: 4px; min-height: 32px; padding: 2px 5px 2px 12px; }
56
+ :host([mode="compact"]) .pnw-codegen-badges, :host([mode="compact"]) .pnw-codegen-control-words { display: none; }
57
+ `;
58
+ export class KtCodegenControlCatalog extends HTMLElement {
59
+ root = this.attachShadow({ mode: "open" });
60
+ currentModel;
61
+ currentDisabled = false;
62
+ currentOutputEnabled = false;
63
+ filter = { status: "all", scope: "all" };
64
+ singleMode = false;
65
+ listScrollTop = 0;
66
+ focusedBlockKey;
67
+ rowChecks = new Map();
68
+ groupSelection = new Map();
69
+ expandedGroups = new Set(KT_CODEGEN_CONTROL_CATALOG_GROUPS.map((group) => group.id));
70
+ get model() { return this.currentModel; }
71
+ set model(value) {
72
+ const previous = this.currentModel;
73
+ if (!previous?.preflight && value?.preflight)
74
+ this.filter = { ...this.filter, status: "hit" };
75
+ if (previous?.preflight && !value?.preflight)
76
+ this.filter = { ...this.filter, status: "all" };
77
+ if (value?.singleSelectionMode !== undefined)
78
+ this.singleMode = value.singleSelectionMode;
79
+ this.currentModel = value;
80
+ if (previous && value && this.canPatchSelection(previous, value)) {
81
+ this.syncSelectionPresentation();
82
+ return;
83
+ }
84
+ this.render();
85
+ }
86
+ get disabled() { return this.currentDisabled; }
87
+ set disabled(value) {
88
+ if (this.currentDisabled === value)
89
+ return;
90
+ this.currentDisabled = value;
91
+ this.render();
92
+ }
93
+ get outputEnabled() { return this.currentOutputEnabled; }
94
+ set outputEnabled(value) {
95
+ if (this.currentOutputEnabled === value)
96
+ return;
97
+ this.currentOutputEnabled = value;
98
+ this.render();
99
+ }
100
+ connectedCallback() { this.render(); }
101
+ render() {
102
+ if (!this.isConnected)
103
+ return;
104
+ this.rowChecks.clear();
105
+ this.groupSelection.clear();
106
+ const style = document.createElement("style");
107
+ style.textContent = STYLE;
108
+ const model = this.currentModel;
109
+ if (!model) {
110
+ this.root.replaceChildren(style, this.empty("请先打开一份 Codegen JSON。"));
111
+ return;
112
+ }
113
+ const allBlocks = ktCodegenControlCatalogBlocks(model);
114
+ const visibleBlocks = this.visibleBlocks(model, allBlocks);
115
+ const selected = new Set(model.selectedBlockKeys);
116
+ const canonicalBlockKeys = allBlocks.map((block) => block.key);
117
+ const filters = document.createElement("div");
118
+ filters.className = "pnw-codegen-catalog-filters";
119
+ filters.setAttribute("aria-label", "控制符显示筛选,不改变预检和 Apply 选择");
120
+ if (model.preflight) {
121
+ const status = document.createElement("select");
122
+ status.className = "pnw-codegen-catalog-filter pnw-codegen-status-filter";
123
+ status.setAttribute("aria-label", "控制符状态");
124
+ status.title = "按预检状态筛选;不改变 checkbox 与 Apply 范围";
125
+ for (const [value, label] of [["hit", "命中"], ["unclosed", "未闭合"], ["missing", "未命中"], ["all", "全部"]]) {
126
+ status.append(new Option(`${label} ${this.visibleBlocks(model, allBlocks, { ...this.filter, status: value }).length}`, value));
127
+ }
128
+ status.value = this.filter.status;
129
+ status.onchange = () => this.setFilter({ status: status.value });
130
+ filters.append(status);
131
+ }
132
+ else {
133
+ const label = document.createElement("span");
134
+ label.className = "pnw-codegen-catalog-label";
135
+ label.textContent = "尚未预检";
136
+ filters.append(label);
137
+ }
138
+ const scope = document.createElement("select");
139
+ scope.className = "pnw-codegen-catalog-filter pnw-codegen-scope-filter";
140
+ scope.setAttribute("aria-label", "控制符范围");
141
+ scope.title = "按控制符类型筛选;不改变 checkbox 与 Apply 范围";
142
+ for (const [value, label] of [["all", "全部类型"], ["cpp-only", "C++ only"], ["field-code", "Field Code"]]) {
143
+ scope.append(new Option(label, value));
144
+ }
145
+ scope.value = this.filter.scope;
146
+ scope.onchange = () => this.setFilter({ scope: scope.value });
147
+ filters.append(scope);
148
+ if (this.currentOutputEnabled) {
149
+ const output = document.createElement("button");
150
+ output.type = "button";
151
+ output.className = "pnw-codegen-output-visible";
152
+ output.textContent = "⧉";
153
+ output.disabled = this.currentDisabled || visibleBlocks.length === 0;
154
+ output.title = `输出当前筛选并复制(${visibleBlocks.length} 项);不改变预检和 Apply 选择`;
155
+ output.setAttribute("aria-label", output.title);
156
+ output.onclick = () => this.emit("kt-codegen-control-output", { scope: "visible", blockKeys: visibleBlocks.map((block) => block.key) });
157
+ filters.append(output);
158
+ }
159
+ const list = document.createElement("div");
160
+ list.className = "pnw-codegen-catalog-list";
161
+ list.tabIndex = 0;
162
+ list.onscroll = () => { this.listScrollTop = list.scrollTop; };
163
+ list.setAttribute("role", "tree");
164
+ list.setAttribute("aria-label", "Codegen 控制符目录");
165
+ const allGroups = ktCodegenGroupControlCatalogBlocks(allBlocks);
166
+ const visibleGroups = ktCodegenGroupControlCatalogBlocks(visibleBlocks);
167
+ for (const group of allGroups) {
168
+ const groupVisible = visibleGroups.find((candidate) => candidate.id === group.id)?.blocks ?? [];
169
+ if (!groupVisible.length)
170
+ continue;
171
+ const visibleKeys = groupVisible.map((block) => block.key);
172
+ const groupState = ktCodegenControlVisibleSelectionState(visibleKeys, model.selectedBlockKeys);
173
+ const details = document.createElement("details");
174
+ details.className = "pnw-codegen-catalog-group";
175
+ details.open = this.expandedGroups.has(group.id);
176
+ details.setAttribute("role", "treeitem");
177
+ details.setAttribute("aria-expanded", String(details.open));
178
+ details.ontoggle = () => {
179
+ if (details.open)
180
+ this.expandedGroups.add(group.id);
181
+ else
182
+ this.expandedGroups.delete(group.id);
183
+ details.setAttribute("aria-expanded", String(details.open));
184
+ };
185
+ const header = document.createElement("summary");
186
+ const groupCheck = document.createElement("input");
187
+ groupCheck.type = "checkbox";
188
+ groupCheck.className = "pnw-codegen-group-check";
189
+ groupCheck.checked = groupState.checked;
190
+ groupCheck.indeterminate = groupState.indeterminate;
191
+ groupCheck.disabled = this.currentDisabled || groupState.disabled;
192
+ groupCheck.setAttribute("aria-label", `选择 ${group.label} 当前可见控制符`);
193
+ groupCheck.onclick = (event) => event.stopPropagation();
194
+ groupCheck.onchange = () => this.applySelection(ktCodegenNextControlVisibleSelection(this.selection(), visibleKeys, groupCheck.checked, canonicalBlockKeys));
195
+ const title = document.createElement("span");
196
+ title.className = "pnw-codegen-group-title";
197
+ title.textContent = group.label;
198
+ const count = document.createElement("span");
199
+ count.className = "pnw-codegen-group-count";
200
+ count.textContent = this.groupCount(groupState.selectedCount, groupState.visibleCount, group.blocks.length);
201
+ this.groupSelection.set(group.id, { check: groupCheck, count, visibleBlockKeys: visibleKeys, totalCount: group.blocks.length });
202
+ header.append(groupCheck, title, count);
203
+ const groupList = document.createElement("div");
204
+ groupList.className = "pnw-codegen-group-list";
205
+ groupList.setAttribute("role", "group");
206
+ for (const block of groupVisible)
207
+ groupList.append(this.blockRow(block, selected, canonicalBlockKeys));
208
+ details.append(header, groupList);
209
+ list.append(details);
210
+ }
211
+ if (!visibleBlocks.length)
212
+ list.append(this.empty(model.preflight && this.filter.status === "hit"
213
+ ? "当前筛选没有命中的控制符;可切换到“未闭合”或“未命中”。"
214
+ : "当前筛选没有控制符。"));
215
+ this.root.replaceChildren(style, filters, list);
216
+ list.scrollTop = this.listScrollTop;
217
+ const focusTarget = this.focusedBlockKey === undefined
218
+ ? undefined
219
+ : this.rowChecks.get(this.focusedBlockKey);
220
+ focusTarget?.focus({ preventScroll: true });
221
+ }
222
+ blockRow(block, selected, canonicalBlockKeys) {
223
+ const row = document.createElement("div");
224
+ row.className = "pnw-codegen-catalog-row";
225
+ row.setAttribute("role", "treeitem");
226
+ const check = document.createElement("input");
227
+ check.type = "checkbox";
228
+ check.checked = selected.has(block.key);
229
+ check.disabled = this.currentDisabled;
230
+ check.setAttribute("aria-label", `选择 ${block.title} 参与预检和 Apply`);
231
+ this.rowChecks.set(block.key, check);
232
+ check.onfocus = () => { this.focusedBlockKey = block.key; };
233
+ check.onblur = () => { if (this.focusedBlockKey === block.key)
234
+ this.focusedBlockKey = undefined; };
235
+ check.onchange = () => {
236
+ this.focusedBlockKey = block.key;
237
+ this.applySelection(ktCodegenNextControlSelection(this.selection(), block.key, check.checked, canonicalBlockKeys));
238
+ };
239
+ const id = document.createElement("span");
240
+ id.className = "pnw-codegen-legacy-id";
241
+ id.textContent = `#${block.legacyId}`;
242
+ const copy = document.createElement("span");
243
+ copy.className = "pnw-codegen-catalog-copy";
244
+ copy.title = block.notes;
245
+ const titleLine = document.createElement("span");
246
+ titleLine.className = "pnw-codegen-title-line";
247
+ const title = document.createElement("span");
248
+ title.className = "pnw-codegen-catalog-title";
249
+ title.textContent = block.title;
250
+ titleLine.append(title);
251
+ if (block.legacyState === "legacy-deprecated") {
252
+ const legacy = document.createElement("span");
253
+ legacy.className = "pnw-codegen-badge pnw-codegen-legacy";
254
+ legacy.textContent = "旧兼容";
255
+ titleLine.append(legacy);
256
+ }
257
+ const words = document.createElement("span");
258
+ words.className = "pnw-codegen-control-words";
259
+ words.textContent = block.controlWords;
260
+ copy.append(titleLine, words);
261
+ const state = document.createElement("span");
262
+ state.className = `pnw-codegen-badge pnw-codegen-state pnw-codegen-${block.status}`;
263
+ state.textContent = this.statusLabel(block.status, block.hitCount);
264
+ const badges = document.createElement("span");
265
+ badges.className = "pnw-codegen-badges";
266
+ const platform = document.createElement("span");
267
+ platform.className = "pnw-codegen-badge";
268
+ platform.textContent = block.platform.toUpperCase();
269
+ badges.append(platform);
270
+ row.append(check, id, copy, state, badges);
271
+ if (this.currentOutputEnabled) {
272
+ const output = document.createElement("button");
273
+ output.type = "button";
274
+ output.className = "pnw-codegen-output-one";
275
+ output.textContent = "⧉";
276
+ output.disabled = this.currentDisabled;
277
+ output.title = `输出${block.title}控制块到日志并复制`;
278
+ output.setAttribute("aria-label", output.title);
279
+ output.onclick = () => this.emit("kt-codegen-control-output", { scope: "block", blockKey: block.key });
280
+ row.append(output);
281
+ }
282
+ return row;
283
+ }
284
+ visibleBlocks(model, blocks = ktCodegenControlCatalogBlocks(model), filter = this.filter) {
285
+ return ktCodegenFilterControlCatalogBlocks(blocks, model.selectedBlockKeys, filter);
286
+ }
287
+ selection() {
288
+ return {
289
+ blockKeys: this.currentModel?.selectedBlockKeys ?? [],
290
+ singleMode: this.currentModel?.singleSelectionMode ?? this.singleMode,
291
+ };
292
+ }
293
+ applySelection(next) {
294
+ const model = this.currentModel;
295
+ if (!model || this.currentDisabled)
296
+ return;
297
+ this.singleMode = next.singleMode;
298
+ this.currentModel = { ...model, selectedBlockKeys: next.blockKeys, singleSelectionMode: next.singleMode };
299
+ this.emit("kt-codegen-control-selection-change", next);
300
+ this.syncSelectionPresentation();
301
+ }
302
+ syncSelectionPresentation() {
303
+ const model = this.currentModel;
304
+ if (!model)
305
+ return;
306
+ const selected = new Set(model.selectedBlockKeys);
307
+ for (const [blockKey, check] of this.rowChecks)
308
+ check.checked = selected.has(blockKey);
309
+ for (const binding of this.groupSelection.values()) {
310
+ const state = ktCodegenControlVisibleSelectionState(binding.visibleBlockKeys, model.selectedBlockKeys);
311
+ binding.check.checked = state.checked;
312
+ binding.check.indeterminate = state.indeterminate;
313
+ binding.check.disabled = this.currentDisabled || state.disabled;
314
+ binding.count.textContent = this.groupCount(state.selectedCount, state.visibleCount, binding.totalCount);
315
+ }
316
+ }
317
+ canPatchSelection(previous, next) {
318
+ if (previous.documentId !== next.documentId
319
+ || Boolean(previous.preflight) !== Boolean(next.preflight)
320
+ || previous.blocks.length !== next.blocks.length)
321
+ return false;
322
+ return previous.blocks.every((block, index) => {
323
+ const candidate = next.blocks[index];
324
+ return candidate?.key === block.key
325
+ && candidate.status === block.status
326
+ && candidate.hitCount === block.hitCount
327
+ && candidate.artifactCount === block.artifactCount;
328
+ });
329
+ }
330
+ setFilter(next) {
331
+ this.filter = { ...this.filter, ...next };
332
+ this.render();
333
+ }
334
+ statusLabel(status, hitCount) {
335
+ if (status === "hit")
336
+ return `${hitCount} 命中`;
337
+ if (status === "unclosed")
338
+ return "未闭合";
339
+ if (status === "missing")
340
+ return "未命中";
341
+ if (status === "pending")
342
+ return "待预检";
343
+ return "未选择";
344
+ }
345
+ groupCount(selected, visible, total) {
346
+ return `显示 ${visible}/${total} · 可见已选 ${selected}/${visible}`;
347
+ }
348
+ empty(text) {
349
+ const empty = document.createElement("div");
350
+ empty.className = "pnw-codegen-catalog-empty";
351
+ empty.textContent = text;
352
+ return empty;
353
+ }
354
+ emit(type, detail) {
355
+ this.dispatchEvent(new CustomEvent(type, { bubbles: true, composed: true, detail }));
356
+ }
357
+ }
358
+ export function ktCodegenDefineControlCatalogElement(tagName = KT_CODEGEN_CONTROL_CATALOG_TAG_NAME) {
359
+ const registered = customElements.get(tagName);
360
+ if (registered)
361
+ return registered;
362
+ customElements.define(tagName, KtCodegenControlCatalog);
363
+ return KtCodegenControlCatalog;
364
+ }
365
+ //# sourceMappingURL=KtCodegenControlCatalog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KtCodegenControlCatalog.js","sourceRoot":"","sources":["../../src/ui/KtCodegenControlCatalog.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ import { type KtCodegenBlockKey } from "../blocks/legacy-blocks.js";
2
+ import type { KtCodegenControlBlockStateUiModel, KtCodegenControlUiModel } from "./KtCodegenUiContracts.js";
3
+ export type KtCodegenControlCatalogStatusFilter = "hit" | "unclosed" | "missing" | "selected" | "all";
4
+ export type KtCodegenControlCatalogScopeFilter = "all" | "cpp-only" | "field-code";
5
+ export interface KtCodegenControlCatalogFilter {
6
+ readonly status: KtCodegenControlCatalogStatusFilter;
7
+ readonly scope: KtCodegenControlCatalogScopeFilter;
8
+ }
9
+ export type KtCodegenControlCatalogGroupId = "cpp" | "qt" | "caa";
10
+ export declare const KT_CODEGEN_CONTROL_CATALOG_GROUPS: readonly [{
11
+ readonly id: "cpp";
12
+ readonly label: "C++";
13
+ }, {
14
+ readonly id: "qt";
15
+ readonly label: "Qt";
16
+ }, {
17
+ readonly id: "caa";
18
+ readonly label: "CAA";
19
+ }];
20
+ export interface KtCodegenControlCatalogBlockUiModel extends KtCodegenControlBlockStateUiModel {
21
+ readonly legacyId: number;
22
+ readonly platform: KtCodegenControlCatalogGroupId;
23
+ readonly legacyState: "active" | "legacy-deprecated";
24
+ readonly title: string;
25
+ readonly controlWords: string;
26
+ readonly notes: string;
27
+ }
28
+ export interface KtCodegenControlCatalogGroup {
29
+ readonly id: KtCodegenControlCatalogGroupId;
30
+ readonly label: string;
31
+ readonly blocks: readonly KtCodegenControlCatalogBlockUiModel[];
32
+ }
33
+ export interface KtCodegenControlVisibleSelectionState {
34
+ readonly checked: boolean;
35
+ readonly indeterminate: boolean;
36
+ readonly disabled: boolean;
37
+ readonly selectedCount: number;
38
+ readonly visibleCount: number;
39
+ }
40
+ export interface KtCodegenControlCatalogSelection {
41
+ readonly blockKeys: readonly KtCodegenBlockKey[];
42
+ readonly singleMode: boolean;
43
+ }
44
+ /** 把 Host 状态与 Wing 的稳定控制符元数据合成唯一的目录行模型。 */
45
+ export declare function ktCodegenControlCatalogBlocks(model: KtCodegenControlUiModel): readonly KtCodegenControlCatalogBlockUiModel[];
46
+ /** 显示筛选不改变真正参与 Preflight/Apply 的选择。 */
47
+ export declare function ktCodegenFilterControlCatalogBlocks(blocks: readonly KtCodegenControlCatalogBlockUiModel[], selectedBlockKeys: readonly KtCodegenBlockKey[], filter: KtCodegenControlCatalogFilter): readonly KtCodegenControlCatalogBlockUiModel[];
48
+ /** 目录只采用插件既有的一层 C++/Qt/CAA 分组,组内保持 legacyId 顺序。 */
49
+ export declare function ktCodegenGroupControlCatalogBlocks(blocks: readonly KtCodegenControlCatalogBlockUiModel[]): readonly KtCodegenControlCatalogGroup[];
50
+ export declare function ktCodegenControlVisibleSelectionState(visibleBlockKeys: readonly KtCodegenBlockKey[], selectedBlockKeys: readonly KtCodegenBlockKey[]): KtCodegenControlVisibleSelectionState;
51
+ /** 组 checkbox 只修改当前组合筛选可见项,结果恢复 canonical 顺序。 */
52
+ export declare function ktCodegenNextControlVisibleSelection(current: KtCodegenControlCatalogSelection, visibleBlockKeys: readonly KtCodegenBlockKey[], checked: boolean, canonicalBlockKeys: readonly KtCodegenBlockKey[]): KtCodegenControlCatalogSelection;
53
+ export declare function ktCodegenNextControlSelection(current: KtCodegenControlCatalogSelection, blockKey: KtCodegenBlockKey, checked: boolean, canonicalBlockKeys: readonly KtCodegenBlockKey[]): KtCodegenControlCatalogSelection;
54
+ //# sourceMappingURL=KtCodegenControlCatalogState.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KtCodegenControlCatalogState.d.ts","sourceRoot":"","sources":["../../src/ui/KtCodegenControlCatalogState.ts"],"names":[],"mappings":"AAMA,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EACV,iCAAiC,EACjC,uBAAuB,EACxB,MAAM,2BAA2B,CAAC;AAEnC,MAAM,MAAM,mCAAmC,GAC3C,KAAK,GACL,UAAU,GACV,SAAS,GACT,UAAU,GACV,KAAK,CAAC;AAEV,MAAM,MAAM,kCAAkC,GAAG,KAAK,GAAG,UAAU,GAAG,YAAY,CAAC;AAEnF,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,MAAM,EAAE,mCAAmC,CAAC;IACrD,QAAQ,CAAC,KAAK,EAAE,kCAAkC,CAAC;CACpD;AAED,MAAM,MAAM,8BAA8B,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,CAAC;AAElE,eAAO,MAAM,iCAAiC;;;;;;;;;EAO3C,CAAC;AAEJ,MAAM,WAAW,mCAAoC,SAAQ,iCAAiC;IAC5F,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,8BAA8B,CAAC;IAClD,QAAQ,CAAC,WAAW,EAAE,QAAQ,GAAG,mBAAmB,CAAC;IACrD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,EAAE,EAAE,8BAA8B,CAAC;IAC5C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,SAAS,mCAAmC,EAAE,CAAC;CACjE;AAED,MAAM,WAAW,qCAAqC;IACpD,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,gCAAgC;IAC/C,QAAQ,CAAC,SAAS,EAAE,SAAS,iBAAiB,EAAE,CAAC;IACjD,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;CAC9B;AAID,2CAA2C;AAC3C,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,uBAAuB,GAC7B,SAAS,mCAAmC,EAAE,CAgBhD;AAED,uCAAuC;AACvC,wBAAgB,mCAAmC,CACjD,MAAM,EAAE,SAAS,mCAAmC,EAAE,EACtD,iBAAiB,EAAE,SAAS,iBAAiB,EAAE,EAC/C,MAAM,EAAE,6BAA6B,GACpC,SAAS,mCAAmC,EAAE,CAWhD;AAED,mDAAmD;AACnD,wBAAgB,kCAAkC,CAChD,MAAM,EAAE,SAAS,mCAAmC,EAAE,GACrD,SAAS,4BAA4B,EAAE,CAMzC;AAED,wBAAgB,qCAAqC,CACnD,gBAAgB,EAAE,SAAS,iBAAiB,EAAE,EAC9C,iBAAiB,EAAE,SAAS,iBAAiB,EAAE,GAC9C,qCAAqC,CAavC;AAED,iDAAiD;AACjD,wBAAgB,oCAAoC,CAClD,OAAO,EAAE,gCAAgC,EACzC,gBAAgB,EAAE,SAAS,iBAAiB,EAAE,EAC9C,OAAO,EAAE,OAAO,EAChB,kBAAkB,EAAE,SAAS,iBAAiB,EAAE,GAC/C,gCAAgC,CAUlC;AAED,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,gCAAgC,EACzC,QAAQ,EAAE,iBAAiB,EAC3B,OAAO,EAAE,OAAO,EAChB,kBAAkB,EAAE,SAAS,iBAAiB,EAAE,GAC/C,gCAAgC,CASlC"}
@@ -0,0 +1,96 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ import { KT_CODEGEN_BLOCK_PRESENTATIONS, ktCodegenBlockKeysForPreset, } from "../KtCodegenBlockPresentation.js";
3
+ import { KT_CODEGEN_LEGACY_BLOCKS, } from "../blocks/legacy-blocks.js";
4
+ export const KT_CODEGEN_CONTROL_CATALOG_GROUPS = [
5
+ { id: "cpp", label: "C++" },
6
+ { id: "qt", label: "Qt" },
7
+ { id: "caa", label: "CAA" },
8
+ ];
9
+ const legacyByKey = new Map(KT_CODEGEN_LEGACY_BLOCKS.map((block) => [block.key, block]));
10
+ /** 把 Host 状态与 Wing 的稳定控制符元数据合成唯一的目录行模型。 */
11
+ export function ktCodegenControlCatalogBlocks(model) {
12
+ const stateByKey = new Map(model.blocks.map((block) => [block.key, block]));
13
+ return KT_CODEGEN_BLOCK_PRESENTATIONS.flatMap((presentation) => {
14
+ const legacy = legacyByKey.get(presentation.key);
15
+ const state = stateByKey.get(presentation.key);
16
+ if (!legacy || !state)
17
+ return [];
18
+ return [{
19
+ ...state,
20
+ legacyId: presentation.legacyId,
21
+ platform: legacy.platform,
22
+ legacyState: legacy.legacyState,
23
+ title: presentation.title,
24
+ controlWords: presentation.controlWords,
25
+ notes: presentation.notes,
26
+ }];
27
+ });
28
+ }
29
+ /** 显示筛选不改变真正参与 Preflight/Apply 的选择。 */
30
+ export function ktCodegenFilterControlCatalogBlocks(blocks, selectedBlockKeys, filter) {
31
+ const selected = new Set(selectedBlockKeys);
32
+ const scoped = filter.scope === "all"
33
+ ? undefined
34
+ : new Set(ktCodegenBlockKeysForPreset(filter.scope));
35
+ return blocks.filter((block) => {
36
+ if (scoped && !scoped.has(block.key))
37
+ return false;
38
+ if (filter.status === "all")
39
+ return true;
40
+ if (filter.status === "selected")
41
+ return selected.has(block.key);
42
+ return block.status === filter.status;
43
+ });
44
+ }
45
+ /** 目录只采用插件既有的一层 C++/Qt/CAA 分组,组内保持 legacyId 顺序。 */
46
+ export function ktCodegenGroupControlCatalogBlocks(blocks) {
47
+ const canonical = [...blocks].sort((left, right) => left.legacyId - right.legacyId);
48
+ return KT_CODEGEN_CONTROL_CATALOG_GROUPS.map((group) => ({
49
+ ...group,
50
+ blocks: canonical.filter((block) => block.platform === group.id),
51
+ }));
52
+ }
53
+ export function ktCodegenControlVisibleSelectionState(visibleBlockKeys, selectedBlockKeys) {
54
+ const visible = new Set(visibleBlockKeys);
55
+ const selected = new Set(selectedBlockKeys);
56
+ let selectedCount = 0;
57
+ for (const key of visible)
58
+ if (selected.has(key))
59
+ selectedCount += 1;
60
+ const visibleCount = visible.size;
61
+ return {
62
+ checked: visibleCount > 0 && selectedCount === visibleCount,
63
+ indeterminate: selectedCount > 0 && selectedCount < visibleCount,
64
+ disabled: visibleCount === 0,
65
+ selectedCount,
66
+ visibleCount,
67
+ };
68
+ }
69
+ /** 组 checkbox 只修改当前组合筛选可见项,结果恢复 canonical 顺序。 */
70
+ export function ktCodegenNextControlVisibleSelection(current, visibleBlockKeys, checked, canonicalBlockKeys) {
71
+ const selected = new Set(current.blockKeys);
72
+ for (const key of visibleBlockKeys) {
73
+ if (checked)
74
+ selected.add(key);
75
+ else
76
+ selected.delete(key);
77
+ }
78
+ return {
79
+ blockKeys: canonicalBlockKeys.filter((key) => selected.has(key)),
80
+ singleMode: checked ? false : current.singleMode,
81
+ };
82
+ }
83
+ export function ktCodegenNextControlSelection(current, blockKey, checked, canonicalBlockKeys) {
84
+ const selected = new Set(current.blockKeys);
85
+ if (checked && current.singleMode)
86
+ selected.clear();
87
+ if (checked)
88
+ selected.add(blockKey);
89
+ else
90
+ selected.delete(blockKey);
91
+ return {
92
+ blockKeys: canonicalBlockKeys.filter((key) => selected.has(key)),
93
+ singleMode: current.singleMode,
94
+ };
95
+ }
96
+ //# sourceMappingURL=KtCodegenControlCatalogState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KtCodegenControlCatalogState.js","sourceRoot":"","sources":["../../src/ui/KtCodegenControlCatalogState.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"KtCodegenControlPanel.d.ts","sourceRoot":"","sources":["../../src/ui/KtCodegenControlPanel.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAKV,uBAAuB,EACxB,MAAM,2BAA2B,CAAC;AAEnC,eAAO,MAAM,iCAAiC,6BAA6B,CAAC;AA2D5E,qBAAa,qBAAsB,SAAQ,WAAW;IACpD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAuC;IAC5D,OAAO,CAAC,YAAY,CAAsC;IAC1D,OAAO,CAAC,YAAY,CAAoC;IACxD,OAAO,CAAC,iBAAiB,CAAqB;IAC9C,OAAO,CAAC,iBAAiB,CAAM;IAC/B,OAAO,CAAC,eAAe,CAAS;IAEhC,IAAI,KAAK,IAAI,uBAAuB,GAAG,SAAS,CAA8B;IAC9E,IAAI,KAAK,CAAC,KAAK,EAAE,uBAAuB,GAAG,SAAS,EAOnD;IAED,IAAI,UAAU,IAAI,MAAM,CAAmC;IAC3D,IAAI,UAAU,CAAC,KAAK,EAAE,MAAM,EAG3B;IAED,iBAAiB,IAAI,IAAI;IAEzB,OAAO,CAAC,MAAM;IAiEd,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,SAAS;IA0BjB,OAAO,CAAC,UAAU;IAyDlB,OAAO,CAAC,aAAa;IAcrB,OAAO,CAAC,kBAAkB;IAK1B,OAAO,CAAC,kBAAkB;IAM1B,OAAO,CAAC,UAAU;IAWlB,OAAO,CAAC,cAAc;IAoCtB,OAAO,CAAC,eAAe;IAOvB,OAAO,CAAC,KAAK;CAMd;AAED,wBAAgB,kCAAkC,CAChD,OAAO,SAAoC,GAC1C,OAAO,qBAAqB,CAK9B;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,0BAA0B,EAAE,qBAAqB,CAAC;KACnD;CACF"}
1
+ {"version":3,"file":"KtCodegenControlPanel.d.ts","sourceRoot":"","sources":["../../src/ui/KtCodegenControlPanel.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAKV,uBAAuB,EACxB,MAAM,2BAA2B,CAAC;AAEnC,eAAO,MAAM,iCAAiC,6BAA6B,CAAC;AAmE5E,qBAAa,qBAAsB,SAAQ,WAAW;IACpD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAuC;IAC5D,OAAO,CAAC,YAAY,CAAsC;IAC1D,OAAO,CAAC,YAAY,CAAoC;IACxD,OAAO,CAAC,iBAAiB,CAAqB;IAC9C,OAAO,CAAC,iBAAiB,CAAM;IAC/B,OAAO,CAAC,eAAe,CAAS;IAEhC,IAAI,KAAK,IAAI,uBAAuB,GAAG,SAAS,CAA8B;IAC9E,IAAI,KAAK,CAAC,KAAK,EAAE,uBAAuB,GAAG,SAAS,EAOnD;IAED,IAAI,UAAU,IAAI,MAAM,CAAmC;IAC3D,IAAI,UAAU,CAAC,KAAK,EAAE,MAAM,EAG3B;IAED,iBAAiB,IAAI,IAAI;IAEzB,OAAO,CAAC,MAAM;IAiEd,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,SAAS;IAmCjB,OAAO,CAAC,UAAU;IAyDlB,OAAO,CAAC,aAAa;IAcrB,OAAO,CAAC,kBAAkB;IAK1B,OAAO,CAAC,kBAAkB;IAM1B,OAAO,CAAC,UAAU;IAYlB,OAAO,CAAC,cAAc;IAoCtB,OAAO,CAAC,eAAe;IAOvB,OAAO,CAAC,KAAK;CAMd;AAED,wBAAgB,kCAAkC,CAChD,OAAO,SAAoC,GAC1C,OAAO,qBAAqB,CAK9B;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,0BAA0B,EAAE,qBAAqB,CAAC;KACnD;CACF"}
@@ -1,6 +1,6 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  import { KT_CODEGEN_BLOCK_PRESENTATIONS } from "../KtCodegenBlockPresentation.js";
3
- import { ktCodegenClampControlSplitPercent, ktCodegenControlResultItems, ktCodegenControlUnclosedForDiagnostic, } from "./KtCodegenControlViewModel.js";
3
+ import { ktCodegenClampControlSplitPercent, ktCodegenControlResultBadges, ktCodegenControlResultItems, ktCodegenControlUnclosedForDiagnostic, } from "./KtCodegenControlViewModel.js";
4
4
  export const KT_CODEGEN_CONTROL_PANEL_TAG_NAME = "kt-codegen-control-panel";
5
5
  const STYLE = `
6
6
  :host {
@@ -38,6 +38,14 @@ button:focus-visible, [tabindex]:focus-visible { outline: 1px solid var(--pnw-co
38
38
  .pnw-codegen-heading { display: flex; min-width: 0; align-items: center; gap: 6px; overflow: hidden; }
39
39
  .pnw-codegen-name { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
40
40
  .pnw-codegen-id { flex: 0 0 auto; padding: 1px 4px; color: var(--pnw-codegen-muted); border: 1px solid var(--pnw-codegen-border); border-radius: 999px; font-size: 10px; font-weight: 500; }
41
+ .pnw-codegen-badges { display: inline-flex; flex: 0 0 auto; align-items: center; gap: 4px; margin-left: auto; }
42
+ .pnw-codegen-badge { padding: 1px 5px; border: 1px solid currentColor; border-radius: 999px; font-size: 9px; font-weight: 600; line-height: 1.3; white-space: nowrap; }
43
+ .pnw-codegen-badge-info { color: var(--vscode-textLink-foreground, #2563eb); }
44
+ .pnw-codegen-badge-success { color: var(--vscode-testing-iconPassed, #16803c); }
45
+ .pnw-codegen-badge-warning { color: var(--vscode-editorWarning-foreground, #b45309); }
46
+ .pnw-codegen-badge-error { color: var(--vscode-errorForeground, #dc2626); }
47
+ .pnw-codegen-badge-muted { color: var(--pnw-codegen-muted); }
48
+ .pnw-codegen-row[aria-pressed="true"] .pnw-codegen-badge { color: inherit; opacity: .92; }
41
49
  .pnw-codegen-meta { overflow: hidden; color: var(--pnw-codegen-muted); font-size: 10px; text-overflow: ellipsis; white-space: nowrap; }
42
50
  .pnw-codegen-meta.pnw-codegen-path { overflow-wrap: anywhere; white-space: normal; }
43
51
  .pnw-codegen-splitter { position: relative; align-self: stretch; min-height: 100%; padding: 0; background: transparent; border: 0; cursor: col-resize; touch-action: none; }
@@ -187,6 +195,15 @@ export class KtCodegenControlPanel extends HTMLElement {
187
195
  const location = this.diagnosticLocation(item.diagnostic);
188
196
  meta.textContent = this.showResultPaths && location ? location : item.diagnostic.message;
189
197
  }
198
+ const badges = document.createElement("span");
199
+ badges.className = "pnw-codegen-badges";
200
+ for (const badge of ktCodegenControlResultBadges(this.currentModel, item)) {
201
+ const node = document.createElement("span");
202
+ node.className = `pnw-codegen-badge pnw-codegen-badge-${badge.tone}`;
203
+ node.textContent = badge.label;
204
+ badges.append(node);
205
+ }
206
+ title.append(badges);
190
207
  if (this.showResultPaths)
191
208
  meta.classList.add("pnw-codegen-path");
192
209
  row.append(title, meta);
@@ -274,7 +291,8 @@ export class KtCodegenControlPanel extends HTMLElement {
274
291
  openButton(path, line) {
275
292
  const button = document.createElement("button");
276
293
  button.type = "button";
277
- button.textContent = "打开";
294
+ button.textContent = "查看源码";
295
+ button.title = `只读查看 ${path}:${line + 1}`;
278
296
  button.onclick = () => this.dispatchEvent(new CustomEvent("kt-codegen-control-open", { bubbles: true, composed: true, detail: { path, line } }));
279
297
  return button;
280
298
  }