Files
MujicaUI/docs/components/244-project-list.md
T
2026-10-05 14:24:42 -04:00

54 lines
2.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 244 ProjectList · 项目列表
## 用途
按文件夹列出项目,展开项目可见其中的会话;把会话拖到项目上或用“移动”菜单即可改变归属。
## 最小示例
```go
var state mujica.ProjectListState
projects := []mujica.ChatProject{{ID: "p1", Name: "Coronation", Folder: "Court"}}
convs := func(id string) []mujica.ChatConversation {
return []mujica.ChatConversation{{ID: "1", Title: "Menu"}}
}
view := func(c *ui.Context) {
mujica.Use(c, mujica.Settings{})
if v := mujica.ProjectList(c, &state, projects, convs, mujica.ProjectListOptions{}); v.Moved {
log.Println("move", v.MoveID, "to", v.MoveTo)
}
}
ui.Render(view, 400, 300, 1)
```
## 参数
`func ProjectList(c *ui.Context, s *ProjectListState, projects []ChatProject, conversations func(projectID string) []ChatConversation, opts ProjectListOptions) ProjectListView`。
`ChatProject`:`ID`、`Name`、`Folder`(文件夹名,空表示不在文件夹中)。
| 字段 | 类型 | 默认值 | 含义 |
| --- | --- | --- | --- |
| `Label` | `string` | "" | 树的无障碍名称。 |
| `Disabled` | `bool` | false | 禁用选择、展开与移动。 |
## 状态
文件夹(展开/收起)、项目行(悬停、选中:Selection 底 + 菱形)、拖入目标(角饰边框)、会话行(拖动时半透明)、禁用。
## 事件
`ProjectListView`:`Changed`(选中项目,ID 在 `State.Selected`)、`Opened`(打开的会话 ID)、`Moved` 与 `MoveID`/`MoveTo`(把会话移入项目,由调用方更新数据)。
## 键盘操作
- Tab:进入树;↑/↓ 在文件夹、项目、会话间移动。
- 项目行上 →/← 展开/收起会话;Enter 选择项目。
- 文件夹上 Enter/Space 展开或收起。
- 会话行的菜单按钮:选择“移入项目”下的目标完成移动(拖放的键盘替代)。
## 限制
- 项目行通过 `Description` 读出“已展开/已收起”;MyGo 不向自定义元素公开 expanded 状态(ui/element.go:282),文件夹使用 `CollapsibleBase`,其展开状态可被辅助技术读到。
- 列表未虚拟化,适合数百个项目以内。