@phoenix-wing/code-core 0.6.2 → 0.6.4

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 CHANGED
@@ -11,7 +11,18 @@ Phoenix Code 可跨宿主复用的纯 TypeScript 算法与数据契约。包内
11
11
  - 搜索替换规则校验、去重/冲突检测、最长匹配、文本行号与名称建议;
12
12
  - 工作集 Schema,以及 workspace 相对路径规范化、去重、文件/目录匹配、包含和 roots 相对化;
13
13
  - CAA 工程环境和对话框 handoff 数据契约;
14
- - 跨宿主文件、成员排序、UUID 与搜索替换结果 ViewModel;成员排序、UUID 与搜索替换另提供 Host-neutral Web Components
14
+ - 跨宿主文件、成员排序、UUID 与搜索替换结果 ViewModel;成员排序、UUID 与搜索替换另提供 Host-neutral Web Components
15
+ - 递归多层 `PnwNavigationTreeModel` 与 `<pnw-navigation-tree>`:受控选择/展开事件、ARIA 键盘、受控图标以及 VS Code 风格 light/dark 状态。
16
+
17
+ 通用浏览器 UI 从稳定门面导入:
18
+
19
+ ```ts
20
+ import { pnwCodeDefineNavigationTree } from "@phoenix-wing/code-core/ui";
21
+ import type { PnwNavigationTreeModel } from "@phoenix-wing/code-core/ui/model";
22
+ ```
23
+
24
+ 物理目录 `src/ui/elements/` 与 `src/ui/model/` 不是公共 subpath。完整契约见仓库
25
+ [`docs/Pnw通用NavigationTreeWebComponent.md`](../../docs/Pnw通用NavigationTreeWebComponent.md)。
15
26
 
16
27
  `kt-auto-code` 与 Desk Tools 应直接消费本包。旧 `phoenix-wing/code-core` subpath 仅保留兼容 re-export,不再持有算法真源。
17
28
 
@@ -0,0 +1,44 @@
1
+ import { type PnwNavigationTreeModel } from "../model/PnwNavigationTreeModel.js";
2
+ export declare const PNW_NAVIGATION_TREE_TAG = "pnw-navigation-tree";
3
+ export declare const PNW_NAVIGATION_TREE_ACTION = "pnw-navigation-tree-action";
4
+ export type PnwNavigationTreeColorScheme = "light" | "dark" | "system";
5
+ export type PnwNavigationTreeActionDetail = {
6
+ readonly kind: "select";
7
+ readonly nodeId: string;
8
+ } | {
9
+ readonly kind: "toggle";
10
+ readonly nodeId: string;
11
+ readonly expanded: boolean;
12
+ } | {
13
+ readonly kind: "activate";
14
+ readonly nodeId: string;
15
+ };
16
+ export declare class PnwNavigationTreeView extends HTMLElement {
17
+ static get observedAttributes(): readonly string[];
18
+ private readonly root;
19
+ private currentModel;
20
+ private focusedNodeId;
21
+ private visibleRows;
22
+ get model(): PnwNavigationTreeModel | undefined;
23
+ set model(value: PnwNavigationTreeModel | undefined);
24
+ get colorScheme(): PnwNavigationTreeColorScheme;
25
+ set colorScheme(value: PnwNavigationTreeColorScheme);
26
+ connectedCallback(): void;
27
+ attributeChangedCallback(): void;
28
+ private render;
29
+ private createRow;
30
+ private createCaret;
31
+ private createIcon;
32
+ private createSvg;
33
+ private handleKeydown;
34
+ private focusRow;
35
+ private emitToggle;
36
+ private emit;
37
+ }
38
+ export declare function pnwCodeDefineNavigationTree(tagName?: string): typeof PnwNavigationTreeView;
39
+ declare global {
40
+ interface HTMLElementTagNameMap {
41
+ "pnw-navigation-tree": PnwNavigationTreeView;
42
+ }
43
+ }
44
+ //# sourceMappingURL=PnwNavigationTreeView.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PnwNavigationTreeView.d.ts","sourceRoot":"","sources":["../../../src/ui/elements/PnwNavigationTreeView.ts"],"names":[],"mappings":"AAEA,OAAO,EAQL,KAAK,sBAAsB,EAE5B,MAAM,oCAAoC,CAAC;AAE5C,eAAO,MAAM,uBAAuB,wBAAwB,CAAC;AAC7D,eAAO,MAAM,0BAA0B,+BAA+B,CAAC;AAEvE,MAAM,MAAM,4BAA4B,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEvE,MAAM,MAAM,6BAA6B,GACrC;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACpD;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,GAChF;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AA2I3D,qBAAa,qBAAsB,SAAQ,WAAW;IACpD,MAAM,KAAK,kBAAkB,IAAI,SAAS,MAAM,EAAE,CAEjD;IAED,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAuC;IAC5D,OAAO,CAAC,YAAY,CAAqC;IACzD,OAAO,CAAC,aAAa,CAAqB;IAC1C,OAAO,CAAC,WAAW,CAAuC;IAE1D,IAAI,KAAK,IAAI,sBAAsB,GAAG,SAAS,CAE9C;IAED,IAAI,KAAK,CAAC,KAAK,EAAE,sBAAsB,GAAG,SAAS,EAGlD;IAED,IAAI,WAAW,IAAI,4BAA4B,CAG9C;IAED,IAAI,WAAW,CAAC,KAAK,EAAE,4BAA4B,EAGlD;IAED,iBAAiB,IAAI,IAAI;IAIzB,wBAAwB,IAAI,IAAI;IAIhC,OAAO,CAAC,MAAM;IAiCd,OAAO,CAAC,SAAS;IA0DjB,OAAO,CAAC,WAAW;IA6BnB,OAAO,CAAC,UAAU;IAiBlB,OAAO,CAAC,SAAS;IAYjB,OAAO,CAAC,aAAa;IAsCrB,OAAO,CAAC,QAAQ;IAYhB,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,IAAI;CASb;AAED,wBAAgB,2BAA2B,CACzC,OAAO,SAA0B,GAChC,OAAO,qBAAqB,CAK9B;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,qBAAqB,EAAE,qBAAqB,CAAC;KAC9C;CACF"}
@@ -0,0 +1,391 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ import { pnwFindNavigationTreeRow, pnwNavigationTreeChildFocusId, pnwNavigationTreeInitialFocusId, pnwNavigationTreeMoveFocus, pnwNavigationTreeParentFocusId, pnwProjectNavigationTreeRows, } from "../model/PnwNavigationTreeModel.js";
3
+ export const PNW_NAVIGATION_TREE_TAG = "pnw-navigation-tree";
4
+ export const PNW_NAVIGATION_TREE_ACTION = "pnw-navigation-tree-action";
5
+ const PNW_NAVIGATION_TREE_STYLE = `
6
+ :host {
7
+ --_pnw-tree-bg: var(--pnw-navigation-tree-bg, var(--vscode-sideBar-background, #ffffff));
8
+ --_pnw-tree-text: var(--pnw-navigation-tree-text, var(--vscode-foreground, #1f1f1f));
9
+ --_pnw-tree-muted: var(--pnw-navigation-tree-muted, var(--vscode-descriptionForeground, #616161));
10
+ --_pnw-tree-hover-bg: var(--pnw-navigation-tree-hover-bg, var(--vscode-list-hoverBackground, #e8e8e8));
11
+ --_pnw-tree-selected-bg: var(--pnw-navigation-tree-selected-bg, var(--vscode-list-inactiveSelectionBackground, #d4d4d4));
12
+ --_pnw-tree-selected-text: var(--pnw-navigation-tree-selected-text, var(--vscode-list-activeSelectionForeground, #1f1f1f));
13
+ --_pnw-tree-focus: var(--pnw-navigation-tree-focus, var(--vscode-focusBorder, #0078d4));
14
+ display: block;
15
+ min-width: 0;
16
+ min-height: 0;
17
+ overflow: auto;
18
+ overscroll-behavior: contain;
19
+ color: var(--_pnw-tree-text);
20
+ background: var(--_pnw-tree-bg);
21
+ font: 13px/1.4 var(--vscode-font-family, system-ui, sans-serif);
22
+ }
23
+ :host([hidden]) { display: none; }
24
+ :host([color-scheme="dark"]) {
25
+ --_pnw-tree-bg: var(--pnw-navigation-tree-bg, var(--vscode-sideBar-background, #1e1e1e));
26
+ --_pnw-tree-text: var(--pnw-navigation-tree-text, var(--vscode-foreground, #cccccc));
27
+ --_pnw-tree-muted: var(--pnw-navigation-tree-muted, var(--vscode-descriptionForeground, #a0a0a0));
28
+ --_pnw-tree-hover-bg: var(--pnw-navigation-tree-hover-bg, var(--vscode-list-hoverBackground, #2a2d2e));
29
+ --_pnw-tree-selected-bg: var(--pnw-navigation-tree-selected-bg, var(--vscode-list-inactiveSelectionBackground, #37373d));
30
+ --_pnw-tree-selected-text: var(--pnw-navigation-tree-selected-text, var(--vscode-list-activeSelectionForeground, #ffffff));
31
+ --_pnw-tree-focus: var(--pnw-navigation-tree-focus, var(--vscode-focusBorder, #007fd4));
32
+ }
33
+ * { box-sizing: border-box; }
34
+ .pnw-navigation-tree { min-width: 0; padding-block: 2px; }
35
+ .pnw-navigation-tree-row {
36
+ position: relative;
37
+ display: flex;
38
+ align-items: center;
39
+ min-width: 0;
40
+ min-height: var(--pnw-navigation-tree-row-height, 28px);
41
+ padding-inline: 4px 8px;
42
+ color: var(--_pnw-tree-text);
43
+ cursor: default;
44
+ outline: none;
45
+ user-select: none;
46
+ }
47
+ .pnw-navigation-tree-row:hover { background: var(--_pnw-tree-hover-bg); }
48
+ .pnw-navigation-tree-row.pnw-is-selected {
49
+ color: var(--_pnw-tree-selected-text);
50
+ background: var(--_pnw-tree-selected-bg);
51
+ }
52
+ .pnw-navigation-tree-row:focus {
53
+ z-index: 1;
54
+ outline: 1px solid var(--_pnw-tree-focus);
55
+ outline-offset: -1px;
56
+ }
57
+ .pnw-navigation-tree-row[aria-disabled="true"] { cursor: not-allowed; opacity: .55; }
58
+ .pnw-navigation-tree-indent {
59
+ flex: 0 0 var(--pnw-navigation-tree-indent, 20px);
60
+ width: var(--pnw-navigation-tree-indent, 20px);
61
+ }
62
+ .pnw-navigation-tree-caret,
63
+ .pnw-navigation-tree-caret-placeholder {
64
+ display: inline-grid;
65
+ flex: 0 0 22px;
66
+ width: 22px;
67
+ height: 24px;
68
+ place-items: center;
69
+ }
70
+ .pnw-navigation-tree-caret {
71
+ padding: 0;
72
+ color: currentColor;
73
+ background: transparent;
74
+ border: 0;
75
+ border-radius: 3px;
76
+ cursor: pointer;
77
+ }
78
+ .pnw-navigation-tree-caret:hover { background: color-mix(in srgb, currentColor 10%, transparent); }
79
+ .pnw-navigation-tree-caret:focus-visible {
80
+ outline: 1px solid var(--_pnw-tree-focus);
81
+ outline-offset: -1px;
82
+ }
83
+ .pnw-navigation-tree-caret svg { width: 16px; height: 16px; transition: transform 100ms ease; }
84
+ .pnw-navigation-tree-caret[aria-expanded="true"] svg { transform: rotate(90deg); }
85
+ .pnw-navigation-tree-icon {
86
+ display: inline-grid;
87
+ flex: 0 0 20px;
88
+ width: 20px;
89
+ height: 20px;
90
+ margin-inline: 1px 6px;
91
+ place-items: center;
92
+ color: var(--pnw-navigation-tree-icon, currentColor);
93
+ }
94
+ .pnw-navigation-tree-icon svg { width: 18px; height: 18px; }
95
+ .pnw-navigation-tree-label {
96
+ min-width: 0;
97
+ overflow: hidden;
98
+ text-overflow: ellipsis;
99
+ white-space: nowrap;
100
+ }
101
+ .pnw-navigation-tree-description {
102
+ min-width: 0;
103
+ margin-inline-start: 7px;
104
+ overflow: hidden;
105
+ color: var(--_pnw-tree-muted);
106
+ font-size: 12px;
107
+ text-overflow: ellipsis;
108
+ white-space: nowrap;
109
+ }
110
+ .pnw-navigation-tree-row.pnw-is-selected .pnw-navigation-tree-description { color: currentColor; opacity: .78; }
111
+ .pnw-navigation-tree-empty { padding: 12px; color: var(--_pnw-tree-muted); text-align: center; }
112
+ @media (prefers-color-scheme: dark) {
113
+ :host(:not([color-scheme="light"]):not([color-scheme="dark"])) {
114
+ --_pnw-tree-bg: var(--pnw-navigation-tree-bg, var(--vscode-sideBar-background, #1e1e1e));
115
+ --_pnw-tree-text: var(--pnw-navigation-tree-text, var(--vscode-foreground, #cccccc));
116
+ --_pnw-tree-muted: var(--pnw-navigation-tree-muted, var(--vscode-descriptionForeground, #a0a0a0));
117
+ --_pnw-tree-hover-bg: var(--pnw-navigation-tree-hover-bg, var(--vscode-list-hoverBackground, #2a2d2e));
118
+ --_pnw-tree-selected-bg: var(--pnw-navigation-tree-selected-bg, var(--vscode-list-inactiveSelectionBackground, #37373d));
119
+ --_pnw-tree-selected-text: var(--pnw-navigation-tree-selected-text, var(--vscode-list-activeSelectionForeground, #ffffff));
120
+ --_pnw-tree-focus: var(--pnw-navigation-tree-focus, var(--vscode-focusBorder, #007fd4));
121
+ }
122
+ }
123
+ @media (prefers-reduced-motion: reduce) {
124
+ .pnw-navigation-tree-caret svg { transition: none; }
125
+ }
126
+ `;
127
+ const PNW_NAVIGATION_TREE_ICON_PATHS = {
128
+ catalog: ["M4 5.5h3v13H4z", "M10.5 5.5h3v13h-3z", "m16 6 4 12"],
129
+ folder: ["M3 7.5h7l2-2h9v13H3z"],
130
+ "folder-open": ["M3 8h7l2-2h9v3", "m4 10 2.5-6h15l-2.5 8H3z"],
131
+ file: ["M6 3.5h8l4 4v13H6z", "M14 3.5v4h4"],
132
+ info: ["M12 21a9 9 0 1 0 0-18 9 9 0 0 0 0 18", "M12 10.5v6", "M12 7.5h.01"],
133
+ settings: ["M12 15.25A3.25 3.25 0 1 0 12 8.75a3.25 3.25 0 0 0 0 6.5", "m19 13.5 1.5 1.2-2 3.5-1.8-.7-1.4.8-.2 1.9H9.3L9 17.5l-1.8-.7-1.5 1.4-2-3.5 1.5-1.2v-2l-1.5-1.2 2-3.5 1.8.7L9 6.5l.3-1.9h4.1l.3 1.9 1.8.7 1.5-1.4 2 3.5-1.5 1.2z"],
134
+ search: ["M10.5 18a7.5 7.5 0 1 0 0-15 7.5 7.5 0 0 0 0 15", "m16 16 5 5"],
135
+ warning: ["M12 3 2.5 20h19z", "M12 9v5", "M12 17.5h.01"],
136
+ error: ["M12 21a9 9 0 1 0 0-18 9 9 0 0 0 0 18", "m9 9 6 6", "m15 9-6 6"],
137
+ };
138
+ export class PnwNavigationTreeView extends HTMLElement {
139
+ static get observedAttributes() {
140
+ return ["color-scheme"];
141
+ }
142
+ root = this.attachShadow({ mode: "open" });
143
+ currentModel;
144
+ focusedNodeId;
145
+ visibleRows = [];
146
+ get model() {
147
+ return this.currentModel;
148
+ }
149
+ set model(value) {
150
+ this.currentModel = value;
151
+ this.render();
152
+ }
153
+ get colorScheme() {
154
+ const value = this.getAttribute("color-scheme");
155
+ return value === "light" || value === "dark" ? value : "system";
156
+ }
157
+ set colorScheme(value) {
158
+ if (value === "system")
159
+ this.removeAttribute("color-scheme");
160
+ else
161
+ this.setAttribute("color-scheme", value);
162
+ }
163
+ connectedCallback() {
164
+ this.render();
165
+ }
166
+ attributeChangedCallback() {
167
+ if (this.isConnected)
168
+ this.render();
169
+ }
170
+ render() {
171
+ if (!this.isConnected)
172
+ return;
173
+ const shouldRestoreFocus = this.root.activeElement?.classList.contains("pnw-navigation-tree-row") === true;
174
+ const model = this.currentModel;
175
+ const style = document.createElement("style");
176
+ style.textContent = PNW_NAVIGATION_TREE_STYLE;
177
+ const tree = document.createElement("div");
178
+ tree.className = "pnw-navigation-tree";
179
+ tree.setAttribute("role", "tree");
180
+ tree.setAttribute("aria-label", model?.ariaLabel ?? "导航树");
181
+ this.visibleRows = model ? pnwProjectNavigationTreeRows(model) : [];
182
+ const retainedFocus = pnwFindNavigationTreeRow(this.visibleRows, this.focusedNodeId);
183
+ if (!retainedFocus || retainedFocus.node.disabled) {
184
+ this.focusedNodeId = model
185
+ ? pnwNavigationTreeInitialFocusId(this.visibleRows, model)
186
+ : undefined;
187
+ }
188
+ if (!this.visibleRows.length) {
189
+ const empty = document.createElement("div");
190
+ empty.className = "pnw-navigation-tree-empty";
191
+ empty.textContent = model?.emptyMessage ?? "没有导航项";
192
+ tree.append(empty);
193
+ }
194
+ else {
195
+ for (const row of this.visibleRows)
196
+ tree.append(this.createRow(row));
197
+ }
198
+ this.root.replaceChildren(style, tree);
199
+ if (shouldRestoreFocus && this.focusedNodeId)
200
+ this.focusRow(this.focusedNodeId);
201
+ }
202
+ createRow(row) {
203
+ const item = document.createElement("div");
204
+ item.className = `pnw-navigation-tree-row${row.selected ? " pnw-is-selected" : ""}`;
205
+ item.dataset.nodeId = row.node.id;
206
+ item.setAttribute("role", "treeitem");
207
+ item.setAttribute("aria-level", String(row.level));
208
+ item.setAttribute("aria-posinset", String(row.positionInSet));
209
+ item.setAttribute("aria-setsize", String(row.setSize));
210
+ item.setAttribute("aria-selected", String(row.selected));
211
+ item.setAttribute("aria-disabled", String(row.node.disabled === true));
212
+ item.tabIndex = row.node.id === this.focusedNodeId && !row.node.disabled ? 0 : -1;
213
+ if (row.hasChildren)
214
+ item.setAttribute("aria-expanded", String(row.expanded));
215
+ for (let level = 1; level < row.level; level += 1) {
216
+ const indent = document.createElement("span");
217
+ indent.className = "pnw-navigation-tree-indent";
218
+ indent.setAttribute("aria-hidden", "true");
219
+ item.append(indent);
220
+ }
221
+ item.append(this.createCaret(row));
222
+ if (row.node.iconKey)
223
+ item.append(this.createIcon(row.node.iconKey));
224
+ const label = document.createElement("span");
225
+ label.className = "pnw-navigation-tree-label";
226
+ label.textContent = row.node.label;
227
+ item.append(label);
228
+ if (row.node.description) {
229
+ const description = document.createElement("span");
230
+ description.className = "pnw-navigation-tree-description";
231
+ description.textContent = row.node.description;
232
+ item.append(description);
233
+ item.title = `${row.node.label} — ${row.node.description}`;
234
+ }
235
+ else {
236
+ item.title = row.node.label;
237
+ }
238
+ item.addEventListener("focus", () => {
239
+ this.focusedNodeId = row.node.id;
240
+ });
241
+ item.addEventListener("click", (event) => {
242
+ if (row.node.disabled)
243
+ return;
244
+ // On one stable row, a native double click dispatches detail=1 then detail=2.
245
+ // This is best-effort only: a controlled Host may synchronously replace the row.
246
+ if (event.detail > 1)
247
+ return;
248
+ this.focusRow(row.node.id);
249
+ this.emit({ kind: "select", nodeId: row.node.id });
250
+ if (row.hasChildren)
251
+ this.emitToggle(row);
252
+ });
253
+ item.addEventListener("dblclick", (event) => {
254
+ if (row.node.disabled)
255
+ return;
256
+ event.preventDefault();
257
+ if (!row.hasChildren)
258
+ this.emit({ kind: "activate", nodeId: row.node.id });
259
+ });
260
+ item.addEventListener("keydown", (event) => this.handleKeydown(event, row));
261
+ return item;
262
+ }
263
+ createCaret(row) {
264
+ if (!row.hasChildren) {
265
+ const placeholder = document.createElement("span");
266
+ placeholder.className = "pnw-navigation-tree-caret-placeholder";
267
+ placeholder.setAttribute("aria-hidden", "true");
268
+ return placeholder;
269
+ }
270
+ const button = document.createElement("button");
271
+ button.type = "button";
272
+ button.className = "pnw-navigation-tree-caret";
273
+ button.tabIndex = -1;
274
+ button.setAttribute("aria-label", row.expanded ? `折叠 ${row.node.label}` : `展开 ${row.node.label}`);
275
+ button.setAttribute("aria-expanded", String(row.expanded));
276
+ const svg = this.createSvg();
277
+ const path = document.createElementNS("http://www.w3.org/2000/svg", "path");
278
+ path.setAttribute("d", "m9 5 7 7-7 7");
279
+ svg.append(path);
280
+ button.append(svg);
281
+ button.addEventListener("click", (event) => {
282
+ event.stopPropagation();
283
+ if (row.node.disabled)
284
+ return;
285
+ if (event.detail > 1)
286
+ return;
287
+ this.focusRow(row.node.id);
288
+ this.emitToggle(row);
289
+ });
290
+ return button;
291
+ }
292
+ createIcon(iconKey) {
293
+ const wrapper = document.createElement("span");
294
+ wrapper.className = "pnw-navigation-tree-icon";
295
+ wrapper.setAttribute("aria-hidden", "true");
296
+ const svg = this.createSvg();
297
+ const iconPaths = PNW_NAVIGATION_TREE_ICON_PATHS[iconKey];
298
+ const safePaths = iconPaths ?? PNW_NAVIGATION_TREE_ICON_PATHS.info;
299
+ if (!iconPaths)
300
+ wrapper.dataset.pnwIconFallback = "true";
301
+ for (const pathData of safePaths) {
302
+ const path = document.createElementNS("http://www.w3.org/2000/svg", "path");
303
+ path.setAttribute("d", pathData);
304
+ svg.append(path);
305
+ }
306
+ wrapper.append(svg);
307
+ return wrapper;
308
+ }
309
+ createSvg() {
310
+ const svg = document.createElementNS("http://www.w3.org/2000/svg", "svg");
311
+ svg.setAttribute("viewBox", "0 0 24 24");
312
+ svg.setAttribute("fill", "none");
313
+ svg.setAttribute("stroke", "currentColor");
314
+ svg.setAttribute("stroke-width", "1.75");
315
+ svg.setAttribute("stroke-linecap", "round");
316
+ svg.setAttribute("stroke-linejoin", "round");
317
+ svg.setAttribute("aria-hidden", "true");
318
+ return svg;
319
+ }
320
+ handleKeydown(event, row) {
321
+ if (row.node.disabled)
322
+ return;
323
+ let targetId;
324
+ switch (event.key) {
325
+ case "ArrowDown":
326
+ targetId = pnwNavigationTreeMoveFocus(this.visibleRows, row.node.id, "next");
327
+ break;
328
+ case "ArrowUp":
329
+ targetId = pnwNavigationTreeMoveFocus(this.visibleRows, row.node.id, "previous");
330
+ break;
331
+ case "Home":
332
+ targetId = pnwNavigationTreeMoveFocus(this.visibleRows, row.node.id, "first");
333
+ break;
334
+ case "End":
335
+ targetId = pnwNavigationTreeMoveFocus(this.visibleRows, row.node.id, "last");
336
+ break;
337
+ case "ArrowRight":
338
+ if (row.hasChildren && !row.expanded)
339
+ this.emitToggle(row);
340
+ else
341
+ targetId = pnwNavigationTreeChildFocusId(this.visibleRows, row.node.id);
342
+ break;
343
+ case "ArrowLeft":
344
+ if (row.hasChildren && row.expanded)
345
+ this.emitToggle(row);
346
+ else
347
+ targetId = pnwNavigationTreeParentFocusId(this.visibleRows, row.node.id);
348
+ break;
349
+ case "Enter":
350
+ this.emit({ kind: "activate", nodeId: row.node.id });
351
+ break;
352
+ case " ":
353
+ this.emit({ kind: "select", nodeId: row.node.id });
354
+ break;
355
+ default:
356
+ return;
357
+ }
358
+ event.preventDefault();
359
+ event.stopPropagation();
360
+ if (targetId)
361
+ this.focusRow(targetId);
362
+ }
363
+ focusRow(nodeId) {
364
+ const next = this.root.querySelector(`.pnw-navigation-tree-row[data-node-id="${CSS.escape(nodeId)}"]`);
365
+ if (!next)
366
+ return;
367
+ this.root.querySelectorAll(".pnw-navigation-tree-row").forEach((row) => {
368
+ row.tabIndex = row === next ? 0 : -1;
369
+ });
370
+ this.focusedNodeId = nodeId;
371
+ next.focus();
372
+ }
373
+ emitToggle(row) {
374
+ this.emit({ kind: "toggle", nodeId: row.node.id, expanded: !row.expanded });
375
+ }
376
+ emit(detail) {
377
+ this.dispatchEvent(new CustomEvent(PNW_NAVIGATION_TREE_ACTION, {
378
+ bubbles: true,
379
+ composed: true,
380
+ detail,
381
+ }));
382
+ }
383
+ }
384
+ export function pnwCodeDefineNavigationTree(tagName = PNW_NAVIGATION_TREE_TAG) {
385
+ const registered = customElements.get(tagName);
386
+ if (registered)
387
+ return registered;
388
+ customElements.define(tagName, PnwNavigationTreeView);
389
+ return PnwNavigationTreeView;
390
+ }
391
+ //# sourceMappingURL=PnwNavigationTreeView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PnwNavigationTreeView.js","sourceRoot":"","sources":["../../../src/ui/elements/PnwNavigationTreeView.ts"],"names":[],"mappings":"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"}
@@ -2,4 +2,5 @@ export * from "./model.js";
2
2
  export * from "./PnwCodeReorderMembersPanel.js";
3
3
  export * from "./PnwCodeUuidResultsPanel.js";
4
4
  export * from "./PnwCodeRenameResultsPanel.js";
5
+ export * from "./elements/PnwNavigationTreeView.js";
5
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAEA,cAAc,YAAY,CAAC;AAC3B,cAAc,iCAAiC,CAAC;AAChD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,gCAAgC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAEA,cAAc,YAAY,CAAC;AAC3B,cAAc,iCAAiC,CAAC;AAChD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,qCAAqC,CAAC"}
package/dist/ui/index.js CHANGED
@@ -3,4 +3,5 @@ export * from "./model.js";
3
3
  export * from "./PnwCodeReorderMembersPanel.js";
4
4
  export * from "./PnwCodeUuidResultsPanel.js";
5
5
  export * from "./PnwCodeRenameResultsPanel.js";
6
+ export * from "./elements/PnwNavigationTreeView.js";
6
7
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAAA,sCAAsC;AAEtC,cAAc,YAAY,CAAC;AAC3B,cAAc,iCAAiC,CAAC;AAChD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,gCAAgC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAAA,sCAAsC;AAEtC,cAAc,YAAY,CAAC;AAC3B,cAAc,iCAAiC,CAAC;AAChD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,qCAAqC,CAAC"}
@@ -0,0 +1,36 @@
1
+ export declare const PNW_NAVIGATION_TREE_ICON_KEYS: readonly ["catalog", "folder", "folder-open", "file", "info", "settings", "search", "warning", "error"];
2
+ export type PnwNavigationTreeIconKey = (typeof PNW_NAVIGATION_TREE_ICON_KEYS)[number];
3
+ export interface PnwNavigationTreeNode {
4
+ readonly id: string;
5
+ readonly label: string;
6
+ readonly description?: string;
7
+ readonly iconKey?: PnwNavigationTreeIconKey;
8
+ readonly disabled?: boolean;
9
+ readonly hidden?: boolean;
10
+ readonly children?: readonly PnwNavigationTreeNode[];
11
+ }
12
+ export interface PnwNavigationTreeModel {
13
+ readonly nodes: readonly PnwNavigationTreeNode[];
14
+ readonly expandedNodeIds?: readonly string[];
15
+ readonly selectedNodeId?: string;
16
+ readonly focusedNodeId?: string;
17
+ readonly ariaLabel?: string;
18
+ readonly emptyMessage?: string;
19
+ }
20
+ export interface PnwNavigationTreeRow {
21
+ readonly node: PnwNavigationTreeNode;
22
+ readonly parentId?: string;
23
+ readonly level: number;
24
+ readonly positionInSet: number;
25
+ readonly setSize: number;
26
+ readonly hasChildren: boolean;
27
+ readonly expanded: boolean;
28
+ readonly selected: boolean;
29
+ }
30
+ export declare function pnwProjectNavigationTreeRows(model: PnwNavigationTreeModel): readonly PnwNavigationTreeRow[];
31
+ export declare function pnwFindNavigationTreeRow(rows: readonly PnwNavigationTreeRow[], nodeId: string | undefined): PnwNavigationTreeRow | undefined;
32
+ export declare function pnwNavigationTreeInitialFocusId(rows: readonly PnwNavigationTreeRow[], model: Pick<PnwNavigationTreeModel, "focusedNodeId" | "selectedNodeId">): string | undefined;
33
+ export declare function pnwNavigationTreeMoveFocus(rows: readonly PnwNavigationTreeRow[], currentNodeId: string | undefined, direction: "first" | "last" | "next" | "previous"): string | undefined;
34
+ export declare function pnwNavigationTreeChildFocusId(rows: readonly PnwNavigationTreeRow[], nodeId: string): string | undefined;
35
+ export declare function pnwNavigationTreeParentFocusId(rows: readonly PnwNavigationTreeRow[], nodeId: string): string | undefined;
36
+ //# sourceMappingURL=PnwNavigationTreeModel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PnwNavigationTreeModel.d.ts","sourceRoot":"","sources":["../../../src/ui/model/PnwNavigationTreeModel.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,6BAA6B,yGAUhC,CAAC;AAEX,MAAM,MAAM,wBAAwB,GAAG,CAAC,OAAO,6BAA6B,CAAC,CAAC,MAAM,CAAC,CAAC;AAEtF,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,wBAAwB,CAAC;IAC5C,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,qBAAqB,EAAE,CAAC;CACtD;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,KAAK,EAAE,SAAS,qBAAqB,EAAE,CAAC;IACjD,QAAQ,CAAC,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7C,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,IAAI,EAAE,qBAAqB,CAAC;IACrC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC5B;AAwBD,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,sBAAsB,GAC5B,SAAS,oBAAoB,EAAE,CAiCjC;AAED,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,SAAS,oBAAoB,EAAE,EACrC,MAAM,EAAE,MAAM,GAAG,SAAS,GACzB,oBAAoB,GAAG,SAAS,CAGlC;AAED,wBAAgB,+BAA+B,CAC7C,IAAI,EAAE,SAAS,oBAAoB,EAAE,EACrC,KAAK,EAAE,IAAI,CAAC,sBAAsB,EAAE,eAAe,GAAG,gBAAgB,CAAC,GACtE,MAAM,GAAG,SAAS,CAOpB;AAED,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,SAAS,oBAAoB,EAAE,EACrC,aAAa,EAAE,MAAM,GAAG,SAAS,EACjC,SAAS,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,UAAU,GAChD,MAAM,GAAG,SAAS,CAapB;AAED,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,SAAS,oBAAoB,EAAE,EACrC,MAAM,EAAE,MAAM,GACb,MAAM,GAAG,SAAS,CAQpB;AAED,wBAAgB,8BAA8B,CAC5C,IAAI,EAAE,SAAS,oBAAoB,EAAE,EACrC,MAAM,EAAE,MAAM,GACb,MAAM,GAAG,SAAS,CAGpB"}
@@ -0,0 +1,100 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ export const PNW_NAVIGATION_TREE_ICON_KEYS = [
3
+ "catalog",
4
+ "folder",
5
+ "folder-open",
6
+ "file",
7
+ "info",
8
+ "settings",
9
+ "search",
10
+ "warning",
11
+ "error",
12
+ ];
13
+ function pnwNavigationTreeVisibleSiblings(nodes) {
14
+ return nodes.filter((node) => node.hidden !== true);
15
+ }
16
+ function pnwAssertNavigationTreeNodeIds(nodes, seenIds) {
17
+ for (const node of nodes) {
18
+ if (!node.id.trim()) {
19
+ throw new TypeError("PnwNavigationTreeNode.id 不能为空");
20
+ }
21
+ if (seenIds.has(node.id)) {
22
+ throw new TypeError(`PnwNavigationTreeNode.id 必须唯一:${node.id}`);
23
+ }
24
+ seenIds.add(node.id);
25
+ pnwAssertNavigationTreeNodeIds(node.children ?? [], seenIds);
26
+ }
27
+ }
28
+ export function pnwProjectNavigationTreeRows(model) {
29
+ pnwAssertNavigationTreeNodeIds(model.nodes, new Set());
30
+ const expandedIds = new Set(model.expandedNodeIds ?? []);
31
+ const rows = [];
32
+ const visit = (nodes, level, parentId) => {
33
+ const siblings = pnwNavigationTreeVisibleSiblings(nodes);
34
+ siblings.forEach((node, index) => {
35
+ const children = pnwNavigationTreeVisibleSiblings(node.children ?? []);
36
+ const hasChildren = children.length > 0;
37
+ const expanded = hasChildren && expandedIds.has(node.id);
38
+ rows.push({
39
+ node,
40
+ parentId,
41
+ level,
42
+ positionInSet: index + 1,
43
+ setSize: siblings.length,
44
+ hasChildren,
45
+ expanded,
46
+ selected: node.id === model.selectedNodeId,
47
+ });
48
+ if (expanded) {
49
+ visit(children, level + 1, node.id);
50
+ }
51
+ });
52
+ };
53
+ visit(model.nodes, 1);
54
+ return rows;
55
+ }
56
+ export function pnwFindNavigationTreeRow(rows, nodeId) {
57
+ if (!nodeId)
58
+ return undefined;
59
+ return rows.find((row) => row.node.id === nodeId);
60
+ }
61
+ export function pnwNavigationTreeInitialFocusId(rows, model) {
62
+ const preferredIds = [model.focusedNodeId, model.selectedNodeId];
63
+ for (const nodeId of preferredIds) {
64
+ const row = pnwFindNavigationTreeRow(rows, nodeId);
65
+ if (row && row.node.disabled !== true)
66
+ return row.node.id;
67
+ }
68
+ return rows.find((row) => row.node.disabled !== true)?.node.id;
69
+ }
70
+ export function pnwNavigationTreeMoveFocus(rows, currentNodeId, direction) {
71
+ const enabledRows = rows.filter((row) => row.node.disabled !== true);
72
+ if (!enabledRows.length)
73
+ return undefined;
74
+ if (direction === "first")
75
+ return enabledRows[0]?.node.id;
76
+ if (direction === "last")
77
+ return enabledRows.at(-1)?.node.id;
78
+ const currentIndex = enabledRows.findIndex((row) => row.node.id === currentNodeId);
79
+ if (currentIndex < 0) {
80
+ return direction === "previous" ? enabledRows.at(-1)?.node.id : enabledRows[0]?.node.id;
81
+ }
82
+ const delta = direction === "next" ? 1 : -1;
83
+ const nextIndex = Math.min(enabledRows.length - 1, Math.max(0, currentIndex + delta));
84
+ return enabledRows[nextIndex]?.node.id;
85
+ }
86
+ export function pnwNavigationTreeChildFocusId(rows, nodeId) {
87
+ const rowIndex = rows.findIndex((row) => row.node.id === nodeId);
88
+ if (rowIndex < 0)
89
+ return undefined;
90
+ const row = rows[rowIndex];
91
+ return rows
92
+ .slice(rowIndex + 1)
93
+ .find((candidate) => candidate.parentId === row?.node.id && candidate.node.disabled !== true)
94
+ ?.node.id;
95
+ }
96
+ export function pnwNavigationTreeParentFocusId(rows, nodeId) {
97
+ const parentId = pnwFindNavigationTreeRow(rows, nodeId)?.parentId;
98
+ return pnwFindNavigationTreeRow(rows, parentId)?.node.id;
99
+ }
100
+ //# sourceMappingURL=PnwNavigationTreeModel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PnwNavigationTreeModel.js","sourceRoot":"","sources":["../../../src/ui/model/PnwNavigationTreeModel.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  export * from "./PnwCodeReorderMembersPanelState.js";
2
2
  export * from "./PnwCodeUuidResultsState.js";
3
3
  export * from "./PnwCodeRenameResultsState.js";
4
+ export * from "./model/PnwNavigationTreeModel.js";
4
5
  //# sourceMappingURL=model.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/ui/model.ts"],"names":[],"mappings":"AAEA,cAAc,sCAAsC,CAAC;AACrD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,gCAAgC,CAAC"}
1
+ {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/ui/model.ts"],"names":[],"mappings":"AAEA,cAAc,sCAAsC,CAAC;AACrD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,mCAAmC,CAAC"}
package/dist/ui/model.js CHANGED
@@ -2,4 +2,5 @@
2
2
  export * from "./PnwCodeReorderMembersPanelState.js";
3
3
  export * from "./PnwCodeUuidResultsState.js";
4
4
  export * from "./PnwCodeRenameResultsState.js";
5
+ export * from "./model/PnwNavigationTreeModel.js";
5
6
  //# sourceMappingURL=model.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/ui/model.ts"],"names":[],"mappings":"AAAA,sCAAsC;AAEtC,cAAc,sCAAsC,CAAC;AACrD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,gCAAgC,CAAC"}
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/ui/model.ts"],"names":[],"mappings":"AAAA,sCAAsC;AAEtC,cAAc,sCAAsC,CAAC;AACrD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,mCAAmC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@phoenix-wing/code-core",
3
- "version": "0.6.2",
3
+ "version": "0.6.4",
4
4
  "description": "Phoenix Code 跨宿主纯 TypeScript 算法与契约",
5
5
  "type": "module",
6
6
  "sideEffects": false,