@phoenix-wing/kt-codegen 0.4.2 → 0.5.0

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 (47) hide show
  1. package/README.md +26 -3
  2. package/dist/KtCodegenApply.d.ts +9 -0
  3. package/dist/KtCodegenApply.d.ts.map +1 -1
  4. package/dist/KtCodegenApply.js +29 -2
  5. package/dist/KtCodegenApply.js.map +1 -1
  6. package/dist/KtCodegenMarker.d.ts +8 -3
  7. package/dist/KtCodegenMarker.d.ts.map +1 -1
  8. package/dist/KtCodegenMarker.js +80 -56
  9. package/dist/KtCodegenMarker.js.map +1 -1
  10. package/dist/model/diagnostic.d.ts +18 -0
  11. package/dist/model/diagnostic.d.ts.map +1 -1
  12. package/dist/model/diagnostic.js.map +1 -1
  13. package/dist/table/KtCodegenTable.d.ts +24 -6
  14. package/dist/table/KtCodegenTable.d.ts.map +1 -1
  15. package/dist/table/KtCodegenTable.js +141 -203
  16. package/dist/table/KtCodegenTable.js.map +1 -1
  17. package/dist/table/KtCodegenTableStyle.d.ts +20 -0
  18. package/dist/table/KtCodegenTableStyle.d.ts.map +1 -0
  19. package/dist/table/KtCodegenTableStyle.js +207 -0
  20. package/dist/table/KtCodegenTableStyle.js.map +1 -0
  21. package/dist/table/KtCodegenTableViewModel.d.ts +45 -0
  22. package/dist/table/KtCodegenTableViewModel.d.ts.map +1 -0
  23. package/dist/table/KtCodegenTableViewModel.js +99 -0
  24. package/dist/table/KtCodegenTableViewModel.js.map +1 -0
  25. package/dist/ui/KtCodegenControlPanel.d.ts +35 -0
  26. package/dist/ui/KtCodegenControlPanel.d.ts.map +1 -0
  27. package/dist/ui/KtCodegenControlPanel.js +338 -0
  28. package/dist/ui/KtCodegenControlPanel.js.map +1 -0
  29. package/dist/ui/KtCodegenControlViewModel.d.ts +20 -0
  30. package/dist/ui/KtCodegenControlViewModel.d.ts.map +1 -0
  31. package/dist/ui/KtCodegenControlViewModel.js +57 -0
  32. package/dist/ui/KtCodegenControlViewModel.js.map +1 -0
  33. package/dist/ui/KtCodegenPrimaryPanel.d.ts +40 -0
  34. package/dist/ui/KtCodegenPrimaryPanel.d.ts.map +1 -0
  35. package/dist/ui/KtCodegenPrimaryPanel.js +384 -0
  36. package/dist/ui/KtCodegenPrimaryPanel.js.map +1 -0
  37. package/dist/ui/KtCodegenUiContracts.d.ts +123 -0
  38. package/dist/ui/KtCodegenUiContracts.d.ts.map +1 -0
  39. package/dist/ui/KtCodegenUiContracts.js +3 -0
  40. package/dist/ui/KtCodegenUiContracts.js.map +1 -0
  41. package/dist/ui/index.d.ts +5 -0
  42. package/dist/ui/index.d.ts.map +1 -0
  43. package/dist/ui/index.js +6 -0
  44. package/dist/ui/index.js.map +1 -0
  45. package/doc/KtCodegenTable/345/270/203/345/261/200/344/270/216/346/212/230/345/217/240/345/245/221/347/272/246.md +106 -0
  46. package/doc//350/207/252/345/212/250/344/273/243/347/240/201/346/240/207/350/256/260/346/211/253/346/217/217.md +8 -9
  47. package/package.json +5 -1
@@ -0,0 +1,207 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ /** KtCodegenTable Shadow DOM 内部类名;同时驱动样式与 DOM,避免两处字符串漂移。 */
3
+ export const KT_CODEGEN_TABLE_CLASSES = Object.freeze({
4
+ toolbar: "pnw-kt-codegen-table-toolbar",
5
+ collapseToggle: "pnw-kt-codegen-table-collapse-toggle",
6
+ collapseIndicator: "pnw-kt-codegen-table-collapse-indicator",
7
+ caption: "pnw-kt-codegen-table-caption",
8
+ shell: "pnw-kt-codegen-table-shell",
9
+ selectedRow: "pnw-kt-codegen-table-selected-row",
10
+ rowNumber: "pnw-kt-codegen-table-row-number",
11
+ booleanCell: "pnw-kt-codegen-table-boolean-cell",
12
+ unknownOption: "pnw-kt-codegen-table-unknown-option",
13
+ empty: "pnw-kt-codegen-table-empty",
14
+ statusbar: "pnw-kt-codegen-table-statusbar",
15
+ status: "pnw-kt-codegen-table-status",
16
+ error: "pnw-kt-codegen-table-error",
17
+ dirty: "pnw-kt-codegen-table-dirty",
18
+ });
19
+ /** KtCodegenTable 的宿主无关视觉原语;宿主可通过 pnw 变量或 VS Code token 换肤。 */
20
+ export const KT_CODEGEN_TABLE_STYLE = `
21
+ :host {
22
+ --pnw-kt-codegen-border: var(--vscode-panel-border, color-mix(in srgb, currentColor 18%, transparent));
23
+ --pnw-kt-codegen-background: var(--vscode-editor-background, #fff);
24
+ --pnw-kt-codegen-toolbar-background: var(--vscode-sideBar-background, #f6f6f6);
25
+ --pnw-kt-codegen-input-background: var(--vscode-input-background, #fff);
26
+ --pnw-kt-codegen-input-foreground: var(--vscode-input-foreground, inherit);
27
+ --pnw-kt-codegen-selection: var(--vscode-list-activeSelectionBackground, Highlight);
28
+ --pnw-kt-codegen-selection-foreground: var(--vscode-list-activeSelectionForeground, HighlightText);
29
+ --pnw-kt-codegen-inactive-selection: var(--vscode-list-inactiveSelectionBackground, var(--pnw-kt-codegen-hover));
30
+ --pnw-kt-codegen-inactive-selection-foreground: var(--vscode-list-inactiveSelectionForeground, var(--vscode-foreground, inherit));
31
+ --pnw-kt-codegen-hover: var(--vscode-list-hoverBackground, rgba(127, 127, 127, .12));
32
+ --pnw-kt-codegen-focus: var(--vscode-focusBorder, #007acc);
33
+ display: flex;
34
+ min-height: 240px;
35
+ height: 100%;
36
+ flex-direction: column;
37
+ overflow: hidden;
38
+ color: var(--vscode-foreground, inherit);
39
+ background: var(--pnw-kt-codegen-background);
40
+ border: 1px solid var(--pnw-kt-codegen-border);
41
+ border-radius: 6px;
42
+ font: var(--vscode-font-size, 13px)/1.4 var(--vscode-font-family, system-ui, sans-serif);
43
+ color-scheme: light dark;
44
+ }
45
+ :host([layout="page"]) {
46
+ height: auto;
47
+ min-height: 0;
48
+ overflow: visible;
49
+ }
50
+ :host([collapsible][collapsed]) {
51
+ height: auto !important;
52
+ min-height: 0;
53
+ }
54
+ * { box-sizing: border-box; }
55
+ [hidden] { display: none !important; }
56
+ .${KT_CODEGEN_TABLE_CLASSES.toolbar} {
57
+ display: flex;
58
+ flex: 0 0 auto;
59
+ align-items: center;
60
+ gap: 6px;
61
+ min-height: 38px;
62
+ padding: 5px 8px;
63
+ background: var(--pnw-kt-codegen-toolbar-background);
64
+ border-bottom: 1px solid var(--pnw-kt-codegen-border);
65
+ overflow-x: auto;
66
+ scrollbar-width: thin;
67
+ }
68
+ .${KT_CODEGEN_TABLE_CLASSES.collapseToggle} {
69
+ display: flex;
70
+ flex: 1 0 max-content;
71
+ align-self: stretch;
72
+ align-items: center;
73
+ gap: 5px;
74
+ min-width: max-content;
75
+ margin-right: auto;
76
+ padding: 0 4px;
77
+ text-align: left;
78
+ background: transparent;
79
+ border: 0;
80
+ }
81
+ .${KT_CODEGEN_TABLE_CLASSES.collapseToggle}:disabled { opacity: 1; cursor: default; }
82
+ .${KT_CODEGEN_TABLE_CLASSES.collapseIndicator} {
83
+ display: inline-block;
84
+ width: 12px;
85
+ color: var(--vscode-descriptionForeground, inherit);
86
+ text-align: center;
87
+ }
88
+ .${KT_CODEGEN_TABLE_CLASSES.caption} { flex: 0 0 auto; font-weight: 650; }
89
+ .${KT_CODEGEN_TABLE_CLASSES.toolbar} > .${KT_CODEGEN_TABLE_CLASSES.caption} { margin-right: auto; }
90
+ button {
91
+ flex: 0 0 auto;
92
+ min-height: 26px;
93
+ padding: 2px 8px;
94
+ color: inherit;
95
+ background: var(--vscode-button-secondaryBackground, transparent);
96
+ border: 1px solid var(--pnw-kt-codegen-border);
97
+ border-radius: 4px;
98
+ font: inherit;
99
+ cursor: pointer;
100
+ }
101
+ button:hover:not(:disabled) { background: var(--pnw-kt-codegen-hover); }
102
+ button:focus-visible, input:focus-visible, select:focus-visible {
103
+ outline: 1px solid var(--pnw-kt-codegen-focus);
104
+ outline-offset: -1px;
105
+ }
106
+ button:disabled { opacity: .42; cursor: default; }
107
+ .${KT_CODEGEN_TABLE_CLASSES.shell} { position: relative; flex: 1 1 auto; min-height: 0; overflow: auto; }
108
+ :host([layout="page"]) .${KT_CODEGEN_TABLE_CLASSES.shell} {
109
+ flex: 0 0 auto;
110
+ min-height: auto;
111
+ overflow-x: auto;
112
+ overflow-y: hidden;
113
+ }
114
+ table { width: max-content; min-width: 100%; border-collapse: separate; border-spacing: 0; table-layout: fixed; }
115
+ th, td {
116
+ height: 34px;
117
+ padding: 0;
118
+ overflow: hidden;
119
+ border-right: 1px solid var(--pnw-kt-codegen-border);
120
+ border-bottom: 1px solid var(--pnw-kt-codegen-border);
121
+ background: var(--pnw-kt-codegen-background);
122
+ }
123
+ th {
124
+ position: sticky;
125
+ z-index: 2;
126
+ top: 0;
127
+ padding: 0 8px;
128
+ text-align: left;
129
+ white-space: nowrap;
130
+ color: var(--vscode-descriptionForeground, inherit);
131
+ background: var(--pnw-kt-codegen-toolbar-background);
132
+ font-weight: 650;
133
+ }
134
+ tr:hover td { background: var(--pnw-kt-codegen-hover); }
135
+ tr.${KT_CODEGEN_TABLE_CLASSES.selectedRow} td {
136
+ color: var(--pnw-kt-codegen-selection-foreground);
137
+ background: var(--pnw-kt-codegen-selection);
138
+ }
139
+ .${KT_CODEGEN_TABLE_CLASSES.shell}:focus-within tr.${KT_CODEGEN_TABLE_CLASSES.selectedRow} td {
140
+ color: var(--pnw-kt-codegen-selection-foreground);
141
+ background: var(--pnw-kt-codegen-selection);
142
+ }
143
+ tr.${KT_CODEGEN_TABLE_CLASSES.selectedRow} td > input:not([type="checkbox"]),
144
+ tr.${KT_CODEGEN_TABLE_CLASSES.selectedRow} td > select { color: inherit; }
145
+ .${KT_CODEGEN_TABLE_CLASSES.rowNumber} {
146
+ position: sticky;
147
+ z-index: 1;
148
+ left: 0;
149
+ width: 48px;
150
+ min-width: 48px;
151
+ max-width: 48px;
152
+ text-align: center;
153
+ color: var(--vscode-descriptionForeground, inherit);
154
+ background: var(--pnw-kt-codegen-toolbar-background);
155
+ }
156
+ th.${KT_CODEGEN_TABLE_CLASSES.rowNumber} { z-index: 3; }
157
+ .${KT_CODEGEN_TABLE_CLASSES.rowNumber} button {
158
+ width: 100%;
159
+ height: 100%;
160
+ padding: 0;
161
+ border: 0;
162
+ border-radius: 0;
163
+ background: transparent;
164
+ }
165
+ td > input:not([type="checkbox"]), td > select {
166
+ width: 100%;
167
+ height: 100%;
168
+ min-width: 0;
169
+ padding: 0 8px;
170
+ color: var(--pnw-kt-codegen-input-foreground);
171
+ background: transparent;
172
+ border: 0;
173
+ border-radius: 0;
174
+ font: inherit;
175
+ }
176
+ td.${KT_CODEGEN_TABLE_CLASSES.booleanCell} { text-align: center; }
177
+ td.${KT_CODEGEN_TABLE_CLASSES.booleanCell} input { width: 16px; height: 16px; accent-color: var(--vscode-button-background, #007acc); }
178
+ option.${KT_CODEGEN_TABLE_CLASSES.unknownOption} { color: var(--vscode-editorWarning-foreground, #b89500); }
179
+ .${KT_CODEGEN_TABLE_CLASSES.empty} {
180
+ position: absolute;
181
+ inset: 42px 16px auto;
182
+ padding: 24px;
183
+ text-align: center;
184
+ color: var(--vscode-descriptionForeground, #666);
185
+ border: 1px dashed var(--pnw-kt-codegen-border);
186
+ border-radius: 6px;
187
+ }
188
+ :host([layout="page"]) .${KT_CODEGEN_TABLE_CLASSES.empty} {
189
+ position: static;
190
+ margin: 16px;
191
+ }
192
+ .${KT_CODEGEN_TABLE_CLASSES.statusbar} {
193
+ display: flex;
194
+ flex: 0 0 auto;
195
+ justify-content: space-between;
196
+ gap: 12px;
197
+ min-height: 28px;
198
+ padding: 5px 9px;
199
+ color: var(--vscode-descriptionForeground, inherit);
200
+ background: var(--pnw-kt-codegen-toolbar-background);
201
+ border-top: 1px solid var(--pnw-kt-codegen-border);
202
+ }
203
+ .${KT_CODEGEN_TABLE_CLASSES.status}.${KT_CODEGEN_TABLE_CLASSES.error} { color: var(--vscode-errorForeground, #c72e0f); }
204
+ .${KT_CODEGEN_TABLE_CLASSES.status}.${KT_CODEGEN_TABLE_CLASSES.dirty} { color: var(--vscode-editorWarning-foreground, #b89500); }
205
+ :host([collapsible][collapsed]) .${KT_CODEGEN_TABLE_CLASSES.toolbar} { border-bottom: 0; }
206
+ `;
207
+ //# sourceMappingURL=KtCodegenTableStyle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KtCodegenTableStyle.js","sourceRoot":"","sources":["../../src/table/KtCodegenTableStyle.ts"],"names":[],"mappings":"AAAA,sCAAsC;AAEtC,4DAA4D;AAC5D,MAAM,CAAC,MAAM,wBAAwB,GAAG,MAAM,CAAC,MAAM,CAAC;IACpD,OAAO,EAAE,8BAA8B;IACvC,cAAc,EAAE,sCAAsC;IACtD,iBAAiB,EAAE,yCAAyC;IAC5D,OAAO,EAAE,8BAA8B;IACvC,KAAK,EAAE,4BAA4B;IACnC,WAAW,EAAE,mCAAmC;IAChD,SAAS,EAAE,iCAAiC;IAC5C,WAAW,EAAE,mCAAmC;IAChD,aAAa,EAAE,qCAAqC;IACpD,KAAK,EAAE,4BAA4B;IACnC,SAAS,EAAE,gCAAgC;IAC3C,MAAM,EAAE,6BAA6B;IACrC,KAAK,EAAE,4BAA4B;IACnC,KAAK,EAAE,4BAA4B;CAC3B,CAAC,CAAC;AAEZ,+DAA+D;AAC/D,MAAM,CAAC,MAAM,sBAAsB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCnC,wBAAwB,CAAC,OAAO;;;;;;;;;;;;GAYhC,wBAAwB,CAAC,cAAc;;;;;;;;;;;;;GAavC,wBAAwB,CAAC,cAAc;GACvC,wBAAwB,CAAC,iBAAiB;;;;;;GAM1C,wBAAwB,CAAC,OAAO;GAChC,wBAAwB,CAAC,OAAO,OAAO,wBAAwB,CAAC,OAAO;;;;;;;;;;;;;;;;;;GAkBvE,wBAAwB,CAAC,KAAK;0BACP,wBAAwB,CAAC,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;KA2BnD,wBAAwB,CAAC,WAAW;;;;GAItC,wBAAwB,CAAC,KAAK,oBAAoB,wBAAwB,CAAC,WAAW;;;;KAIpF,wBAAwB,CAAC,WAAW;KACpC,wBAAwB,CAAC,WAAW;GACtC,wBAAwB,CAAC,SAAS;;;;;;;;;;;KAWhC,wBAAwB,CAAC,SAAS;GACpC,wBAAwB,CAAC,SAAS;;;;;;;;;;;;;;;;;;;KAmBhC,wBAAwB,CAAC,WAAW;KACpC,wBAAwB,CAAC,WAAW;SAChC,wBAAwB,CAAC,aAAa;GAC5C,wBAAwB,CAAC,KAAK;;;;;;;;;0BASP,wBAAwB,CAAC,KAAK;;;;GAIrD,wBAAwB,CAAC,SAAS;;;;;;;;;;;GAWlC,wBAAwB,CAAC,MAAM,IAAI,wBAAwB,CAAC,KAAK;GACjE,wBAAwB,CAAC,MAAM,IAAI,wBAAwB,CAAC,KAAK;mCACjC,wBAAwB,CAAC,OAAO;CAClE,CAAC"}
@@ -0,0 +1,45 @@
1
+ import type { KtCodegenItem } from "../KtCodegenItem.js";
2
+ import type { KtCodegenTableColumn, KtCodegenTableItemField } from "../KtCodegenTableColumns.js";
3
+ /** 表格 Combo 候选项;未知当前值始终会额外保留。 */
4
+ export interface KtCodegenTableOptions {
5
+ readonly tcKind: readonly string[];
6
+ readonly catAttrInOut: readonly string[];
7
+ readonly component: readonly string[];
8
+ }
9
+ /** 表格的宿主布局责任。contained 保持组件内滚动,page 交给页面自然排版。 */
10
+ export type KtCodegenTableLayout = "contained" | "page";
11
+ export interface KtCodegenTableDisclosureState {
12
+ readonly collapsible: boolean;
13
+ readonly collapsed: boolean;
14
+ }
15
+ /** Header disclosure button 所需的纯状态投影。 */
16
+ export interface KtCodegenTableDisclosureViewModel {
17
+ readonly hidden: boolean;
18
+ readonly disabled: boolean;
19
+ readonly expanded: boolean;
20
+ readonly indicator: "▸" | "▾";
21
+ readonly label: string;
22
+ }
23
+ export type KtCodegenTableAction = "autoFit" | "sort" | "copy" | "paste" | "insert" | "duplicate" | "moveUp" | "moveDown" | "delete";
24
+ export interface KtCodegenTableActionState {
25
+ readonly itemCount: number;
26
+ readonly selectedRow: number | null;
27
+ readonly hasClipboard: boolean;
28
+ }
29
+ export interface KtCodegenTableSelectOption {
30
+ readonly value: string;
31
+ readonly label: string;
32
+ readonly disabled: boolean;
33
+ readonly unknown: boolean;
34
+ }
35
+ export declare const KT_CODEGEN_TABLE_ACTIONS: readonly [readonly ["autoFit", "自适应", "根据当前内容调整列宽"], readonly ["sort", "排序", "按旧 Qt 规则规范 Suffix 和 ID"], readonly ["copy", "复制", "复制当前行"], readonly ["paste", "粘贴", "用复制内容替换当前行"], readonly ["insert", "+ 插入", "在当前行后插入"], readonly ["duplicate", "⧉ 副本", "在当前行后创建副本"], readonly ["moveUp", "↑", "上移"], readonly ["moveDown", "↓", "下移"], readonly ["delete", "− 删除", "删除当前行"]];
36
+ /** 属性、attribute 与未知 JavaScript 输入共用的布局归一化边界。 */
37
+ export declare function ktCodegenNormalizeTableLayout(value: unknown): KtCodegenTableLayout;
38
+ /** collapsed 只在显式允许折叠时生效,避免只写 collapsed 的宿主失去内容。 */
39
+ export declare function ktCodegenTableDisclosure(state: KtCodegenTableDisclosureState): KtCodegenTableDisclosureViewModel;
40
+ export declare function ktCodegenTableDisabledActions(state: KtCodegenTableActionState): ReadonlySet<KtCodegenTableAction>;
41
+ export declare function ktCodegenTableSelectOptions(column: KtCodegenTableColumn, current: string, options: KtCodegenTableOptions): readonly KtCodegenTableSelectOption[] | undefined;
42
+ export declare function ktCodegenFitTableColumnWidths(columns: readonly KtCodegenTableColumn[], items: readonly KtCodegenItem[]): ReadonlyMap<KtCodegenTableItemField, number>;
43
+ export declare function ktCodegenTableColumnWidth(column: KtCodegenTableColumn, fittedWidths: ReadonlyMap<KtCodegenTableItemField, number>): number;
44
+ export declare function ktCodegenTableCountLabel(itemCount: number, columnCount: number): string;
45
+ //# sourceMappingURL=KtCodegenTableViewModel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KtCodegenTableViewModel.d.ts","sourceRoot":"","sources":["../../src/table/KtCodegenTableViewModel.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EACV,oBAAoB,EACpB,uBAAuB,EACxB,MAAM,6BAA6B,CAAC;AAErC,iCAAiC;AACjC,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;CACvC;AAED,iDAAiD;AACjD,MAAM,MAAM,oBAAoB,GAAG,WAAW,GAAG,MAAM,CAAC;AAExD,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC7B;AAED,yCAAyC;AACzC,MAAM,WAAW,iCAAiC;IAChD,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,GAAG,GAAG,GAAG,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,MAAM,oBAAoB,GAC5B,SAAS,GACT,MAAM,GACN,MAAM,GACN,OAAO,GACP,QAAQ,GACR,WAAW,GACX,QAAQ,GACR,UAAU,GACV,QAAQ,CAAC;AAEb,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;CAChC;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAED,eAAO,MAAM,wBAAwB,gXAU4C,CAAC;AAElF,gDAAgD;AAChD,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,OAAO,GAAG,oBAAoB,CAElF;AAED,oDAAoD;AACpD,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,6BAA6B,GACnC,iCAAiC,CAUnC;AAED,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,yBAAyB,GAC/B,WAAW,CAAC,oBAAoB,CAAC,CAkBnC;AAED,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,oBAAoB,EAC5B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,qBAAqB,GAC7B,SAAS,0BAA0B,EAAE,GAAG,SAAS,CA4BnD;AAED,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,SAAS,oBAAoB,EAAE,EACxC,KAAK,EAAE,SAAS,aAAa,EAAE,GAC9B,WAAW,CAAC,uBAAuB,EAAE,MAAM,CAAC,CAc9C;AAED,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,oBAAoB,EAC5B,YAAY,EAAE,WAAW,CAAC,uBAAuB,EAAE,MAAM,CAAC,GACzD,MAAM,CAER;AAED,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAEvF"}
@@ -0,0 +1,99 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ export const KT_CODEGEN_TABLE_ACTIONS = [
3
+ ["autoFit", "自适应", "根据当前内容调整列宽"],
4
+ ["sort", "排序", "按旧 Qt 规则规范 Suffix 和 ID"],
5
+ ["copy", "复制", "复制当前行"],
6
+ ["paste", "粘贴", "用复制内容替换当前行"],
7
+ ["insert", "+ 插入", "在当前行后插入"],
8
+ ["duplicate", "⧉ 副本", "在当前行后创建副本"],
9
+ ["moveUp", "↑", "上移"],
10
+ ["moveDown", "↓", "下移"],
11
+ ["delete", "− 删除", "删除当前行"],
12
+ ];
13
+ /** 属性、attribute 与未知 JavaScript 输入共用的布局归一化边界。 */
14
+ export function ktCodegenNormalizeTableLayout(value) {
15
+ return value === "page" ? "page" : "contained";
16
+ }
17
+ /** collapsed 只在显式允许折叠时生效,避免只写 collapsed 的宿主失去内容。 */
18
+ export function ktCodegenTableDisclosure(state) {
19
+ const hidden = state.collapsible && state.collapsed;
20
+ const disabled = !state.collapsible;
21
+ return {
22
+ hidden,
23
+ disabled,
24
+ expanded: !hidden,
25
+ indicator: hidden ? "▸" : "▾",
26
+ label: disabled ? "参数表" : hidden ? "展开参数表" : "收起参数表",
27
+ };
28
+ }
29
+ export function ktCodegenTableDisabledActions(state) {
30
+ const disabled = new Set();
31
+ const row = state.selectedRow;
32
+ const hasSelection = row !== null && row >= 0 && row < state.itemCount;
33
+ if (state.itemCount === 0)
34
+ disabled.add("sort");
35
+ if (!hasSelection) {
36
+ disabled.add("copy");
37
+ disabled.add("paste");
38
+ disabled.add("duplicate");
39
+ disabled.add("delete");
40
+ disabled.add("moveUp");
41
+ disabled.add("moveDown");
42
+ return disabled;
43
+ }
44
+ if (!state.hasClipboard)
45
+ disabled.add("paste");
46
+ if (row === 0)
47
+ disabled.add("moveUp");
48
+ if (row === state.itemCount - 1)
49
+ disabled.add("moveDown");
50
+ return disabled;
51
+ }
52
+ export function ktCodegenTableSelectOptions(column, current, options) {
53
+ const candidates = column.kind === "tcKind"
54
+ ? options.tcKind
55
+ : column.kind === "catAttrInOut"
56
+ ? options.catAttrInOut
57
+ : column.kind === "component"
58
+ ? options.component
59
+ : undefined;
60
+ if (!candidates)
61
+ return undefined;
62
+ const rows = [];
63
+ if (current && !candidates.includes(current)) {
64
+ rows.push({
65
+ value: current,
66
+ label: `${current}(未知,保持原值)`,
67
+ disabled: false,
68
+ unknown: true,
69
+ });
70
+ }
71
+ for (const candidate of candidates) {
72
+ rows.push({
73
+ value: candidate,
74
+ label: candidate || "(空)",
75
+ disabled: /^-.*-$/u.test(candidate),
76
+ unknown: false,
77
+ });
78
+ }
79
+ return rows;
80
+ }
81
+ export function ktCodegenFitTableColumnWidths(columns, items) {
82
+ const widths = new Map();
83
+ for (const column of columns) {
84
+ const longest = items.reduce((length, item) => {
85
+ const value = column.kind === "boolean" ? "true" : String(item[column.field] ?? "");
86
+ return Math.max(length, [...value].length);
87
+ }, [...column.title].length);
88
+ const checkboxWidth = column.kind === "boolean" ? 72 : 0;
89
+ widths.set(column.field, Math.max(checkboxWidth, Math.min(360, Math.max(72, longest * 8 + 28))));
90
+ }
91
+ return widths;
92
+ }
93
+ export function ktCodegenTableColumnWidth(column, fittedWidths) {
94
+ return fittedWidths.get(column.field) ?? column.width;
95
+ }
96
+ export function ktCodegenTableCountLabel(itemCount, columnCount) {
97
+ return `${itemCount} 行 · ${columnCount} 列`;
98
+ }
99
+ //# sourceMappingURL=KtCodegenTableViewModel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KtCodegenTableViewModel.js","sourceRoot":"","sources":["../../src/table/KtCodegenTableViewModel.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import type { KtCodegenControlUiModel } from "./KtCodegenUiContracts.js";
2
+ export declare const KT_CODEGEN_CONTROL_PANEL_TAG_NAME = "kt-codegen-control-panel";
3
+ export declare class KtCodegenControlPanel extends HTMLElement {
4
+ private readonly root;
5
+ private currentModel;
6
+ private resultFilter;
7
+ private selectedResultKey;
8
+ private currentSplitRatio;
9
+ private showResultPaths;
10
+ get model(): KtCodegenControlUiModel | undefined;
11
+ set model(value: KtCodegenControlUiModel | undefined);
12
+ get splitRatio(): number;
13
+ set splitRatio(value: number);
14
+ connectedCallback(): void;
15
+ private render;
16
+ private cacheLabel;
17
+ private emptyMessage;
18
+ private filterButton;
19
+ private resultRow;
20
+ private detailNode;
21
+ private appendHeading;
22
+ private diagnosticBlockKey;
23
+ private diagnosticLocation;
24
+ private openButton;
25
+ private resultSplitter;
26
+ private emitSplitChange;
27
+ private empty;
28
+ }
29
+ export declare function ktCodegenDefineControlPanelElement(tagName?: string): typeof KtCodegenControlPanel;
30
+ declare global {
31
+ interface HTMLElementTagNameMap {
32
+ "kt-codegen-control-panel": KtCodegenControlPanel;
33
+ }
34
+ }
35
+ //# sourceMappingURL=KtCodegenControlPanel.d.ts.map
@@ -0,0 +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"}