WIP components (as built)
This commit is contained in:
71 files changed
+3241
-468
No files matched your search
@@ -0,0 +1,51 @@
|
||||
# 281 InterruptButton 中断按钮
|
||||
|
||||
## 用途
|
||||
|
||||
中断正在运行的智能体:可选确认,中断进行中显示“正在停止”直到运行结束。
|
||||
|
||||
## 最小示例
|
||||
|
||||
```go
|
||||
running, stopping := true, false
|
||||
view := func(c *ui.Context) {
|
||||
mujica.Use(c, mujica.Settings{})
|
||||
r := mujica.InterruptButton(c, running, mujica.InterruptButtonOptions{Confirm: true, Interrupting: stopping})
|
||||
if r.Changed() {
|
||||
stopping = true // cancel the run, then clear running and stopping
|
||||
}
|
||||
}
|
||||
ui.Render(view, 400, 300, 1)
|
||||
```
|
||||
|
||||
签名:`func InterruptButton(c *ui.Context, running bool, opts InterruptButtonOptions) ChoiceResult`
|
||||
|
||||
## 参数
|
||||
|
||||
`InterruptButtonOptions`
|
||||
|
||||
| 字段 | 类型 | 默认值 | 含义 |
|
||||
| --- | --- | --- | --- |
|
||||
| Confirm | bool | false | 点击后先弹出确认,确认后才报告中断。 |
|
||||
| Interrupting | bool | false | 中断进行中:按钮保留尺寸并显示加载;running 为 false 时设为 true 会 panic。 |
|
||||
| Label | string | 内置“停止” | 按钮文字,也是确认按钮的文字。 |
|
||||
|
||||
`running` 为 false 时按钮禁用。
|
||||
|
||||
## 状态
|
||||
|
||||
- 危险按钮外观:DangerFill 底与 OnDanger 文字,图标为叉号。
|
||||
- 中断中:显示加载标记与“正在停止”,不再响应点击。
|
||||
- 确认弹层默认聚焦“继续运行”,Enter 不会误触中断。
|
||||
|
||||
## 事件
|
||||
|
||||
- `Changed()`:用户要求中断(需要确认时在确认后)。
|
||||
|
||||
## 键盘操作
|
||||
|
||||
- Tab 聚焦,Enter 或 Space 按下;确认弹层中 Tab 到“停止”再 Enter,Escape 取消。
|
||||
|
||||
## 限制
|
||||
|
||||
- 只报告中断请求,取消运行由调用方完成。
|
||||
@@ -0,0 +1,54 @@
|
||||
# 282 TokenUsageChart Token 用量图
|
||||
|
||||
## 用途
|
||||
|
||||
按会话或步骤显示输入与输出 token 用量:默认堆叠柱状图,也可切换为折线。
|
||||
|
||||
## 最小示例
|
||||
|
||||
```go
|
||||
usage := []mujica.TokenUsage{{Label: "Plan", Input: 1200, Output: 300}, {Label: "Write", Input: 2100, Output: 2900}}
|
||||
view := func(c *ui.Context) {
|
||||
mujica.Use(c, mujica.Settings{})
|
||||
mujica.TokenUsageChart(c, usage, mujica.TokenUsageChartOptions{})
|
||||
}
|
||||
ui.Render(view, 400, 300, 1)
|
||||
```
|
||||
|
||||
签名:`func TokenUsageChart(c *ui.Context, usage []TokenUsage, opts TokenUsageChartOptions) ChartResult`
|
||||
|
||||
## 参数
|
||||
|
||||
`TokenUsage`
|
||||
|
||||
| 字段 | 类型 | 默认值 | 含义 |
|
||||
| --- | --- | --- | --- |
|
||||
| Label | string | "" | 会话或步骤名,作为柱的类别。 |
|
||||
| Input, Output | int | 0 | 输入、输出 token 数;为负 panic。 |
|
||||
|
||||
`TokenUsageChartOptions`
|
||||
|
||||
| 字段 | 类型 | 默认值 | 含义 |
|
||||
| --- | --- | --- | --- |
|
||||
| Frame | ChartFrame | 零值 | 图表名称、高度、加载/失败/空状态;Label 为空时用内置“Token 用量”。 |
|
||||
| Line | bool | false | 折线代替堆叠柱。 |
|
||||
| Version | int | 0 | 原地修改数据时递增;新切片或长度变化自动刷新。 |
|
||||
|
||||
返回 `ChartResult`。序列在 usage 切片、长度或 Version 变化时重建。超过 256 项时,相邻项目汇总为最多 256 组,保留输入输出总数;柱类别显示首尾名称。
|
||||
|
||||
## 状态
|
||||
|
||||
- 输入、输出分色(取自图表调色板,对 Surface 至少 3:1),图例同时用形状区分。
|
||||
- 加载、失败、无数据状态与图表同尺寸。
|
||||
|
||||
## 事件
|
||||
|
||||
- `Changed()`:读数移到另一个标记;`Toggled()`:图例开关某个序列。
|
||||
|
||||
## 键盘操作
|
||||
|
||||
- Tab 聚焦图表,←/→ 在柱或点之间移动,读数显示并朗读。
|
||||
|
||||
## 限制
|
||||
|
||||
- 折线模式的横轴为序号,类别名只在柱状模式显示。
|
||||
@@ -0,0 +1,60 @@
|
||||
# 283 CostBreakdown 费用分解
|
||||
|
||||
## 用途
|
||||
|
||||
按模型、工具或步骤汇总调用次数、token 与费用,表格可排序,底部显示合计。
|
||||
|
||||
## 最小示例
|
||||
|
||||
```go
|
||||
var state mujica.CostBreakdownState
|
||||
items := []mujica.CostItem{
|
||||
{Model: "opus", Tool: "search", InputTokens: 1000, OutputTokens: 200, Cost: 0.30},
|
||||
{Model: "haiku", Tool: "search", InputTokens: 4000, OutputTokens: 500, Cost: 0.05},
|
||||
}
|
||||
view := func(c *ui.Context) {
|
||||
mujica.Use(c, mujica.Settings{})
|
||||
mujica.CostBreakdown(c, &state, items, mujica.CostBreakdownOptions{GroupBy: mujica.CostByModel}).Element.Height(260)
|
||||
}
|
||||
ui.Render(view, 400, 300, 1)
|
||||
```
|
||||
|
||||
签名:`func CostBreakdown(c *ui.Context, s *CostBreakdownState, items []CostItem, opts CostBreakdownOptions) DataTableView`
|
||||
|
||||
## 参数
|
||||
|
||||
`CostItem`
|
||||
|
||||
| 字段 | 类型 | 默认值 | 含义 |
|
||||
| --- | --- | --- | --- |
|
||||
| Model, Tool, Step | string | "" | 分组依据;为空归入“(未命名)”。 |
|
||||
| InputTokens, OutputTokens | int | 0 | token 数;为负 panic。 |
|
||||
| Cost | float64 | 0 | 费用;为负或非有限值 panic。 |
|
||||
|
||||
`CostBreakdownOptions`
|
||||
|
||||
| 字段 | 类型 | 默认值 | 含义 |
|
||||
| --- | --- | --- | --- |
|
||||
| GroupBy | CostGroup | CostByModel | CostByModel、CostByTool、CostByStep。 |
|
||||
| Currency | string | "$" | 金额前缀。 |
|
||||
| Decimals | int | 0(即 2) | 金额小数位;为负 panic。 |
|
||||
| Version | int | 0 | 原地修改数据时递增;新切片或长度变化自动刷新。 |
|
||||
|
||||
`CostBreakdownState.Table` 保存排序与选择。汇总只在 items 或分组方式变化时计算。给返回的 `Element` 一个高度。
|
||||
|
||||
## 状态
|
||||
|
||||
- 费用列含占比条与百分比,数字为等宽数字。
|
||||
- 合计行为衬线“合计”、token 总数与加粗金额,朗读完整合计。
|
||||
|
||||
## 事件
|
||||
|
||||
- 同 DataTable:`Changed()`、`SortChanged()`。
|
||||
|
||||
## 键盘操作
|
||||
|
||||
- 同 DataTable:↑/↓ 选择行,列标题可用键盘排序。
|
||||
|
||||
## 限制
|
||||
|
||||
- 金额以浮点汇总并按小数位显示,不做货币舍入规则。
|
||||
@@ -0,0 +1,64 @@
|
||||
# 284 TraceViewer 调用链查看器
|
||||
|
||||
## 用途
|
||||
|
||||
以树显示调用链跨度,每行带耗时与时间轴条;选中跨度在下方查看属性。
|
||||
|
||||
## 最小示例
|
||||
|
||||
```go
|
||||
var state mujica.TraceViewerState
|
||||
spans := []mujica.TraceSpan{
|
||||
{ID: "run", Name: "agent.run", End: 900 * time.Millisecond},
|
||||
{ID: "plan", Parent: "run", Name: "llm.plan", Start: 10 * time.Millisecond, End: 210 * time.Millisecond,
|
||||
Attrs: []mujica.TraceAttr{{Key: "model", Value: "opus"}}},
|
||||
}
|
||||
view := func(c *ui.Context) {
|
||||
mujica.Use(c, mujica.Settings{})
|
||||
mujica.TraceViewer(c, &state, spans, mujica.TraceViewerOptions{}).Element.Height(260)
|
||||
}
|
||||
ui.Render(view, 400, 300, 1)
|
||||
```
|
||||
|
||||
签名:`func TraceViewer(c *ui.Context, s *TraceViewerState, spans []TraceSpan, opts TraceViewerOptions) DataTableView`
|
||||
|
||||
## 参数
|
||||
|
||||
`TraceSpan`
|
||||
|
||||
| 字段 | 类型 | 默认值 | 含义 |
|
||||
| --- | --- | --- | --- |
|
||||
| ID | string | 必填 | 唯一标识;重复 panic。 |
|
||||
| Parent | string | "" | 父跨度;不存在时作为根。 |
|
||||
| Name | string | "" | 名称。 |
|
||||
| Start, End | time.Duration | 0 | 相对调用链开始的偏移;需 0 ≤ Start ≤ End。 |
|
||||
| Failed | bool | false | 失败。 |
|
||||
| Attrs | []TraceAttr | nil | 属性键值。 |
|
||||
|
||||
`TraceViewerOptions`
|
||||
|
||||
| 字段 | 类型 | 默认值 | 含义 |
|
||||
| --- | --- | --- | --- |
|
||||
| Status | DataStatus | DataReady | 加载、失败状态。 |
|
||||
| Error | string | "" | 失败说明。 |
|
||||
| Version | int | 0 | 原地修改数据时递增;新切片或长度变化自动刷新。 |
|
||||
|
||||
`TraceViewerState.Tree` 保存展开、排序与选择。索引只在 spans 变化时重建;父链成环时 panic。给返回的 `Element` 一个高度。
|
||||
|
||||
## 状态
|
||||
|
||||
- 时间轴条按整条调用链的跨度缩放,位置吸附像素。
|
||||
- 失败跨度:叉号图标、Danger 文字与空心时间条,不只靠颜色。
|
||||
- 属性面板显示开始、耗时与全部属性。
|
||||
|
||||
## 事件
|
||||
|
||||
- 同 TreeTable:`Changed()` 选择变化。
|
||||
|
||||
## 键盘操作
|
||||
|
||||
- ↑/↓ 选择,→ 展开,← 收起;输入名称开头字母跳转。
|
||||
|
||||
## 限制
|
||||
|
||||
- 只构建可见行(TreeTable 虚拟化);属性面板也按可见行虚拟化,独立滚动。
|
||||
@@ -0,0 +1,63 @@
|
||||
# 285 EvalResultTable 评测结果表
|
||||
|
||||
## 用途
|
||||
|
||||
列出评测用例、得分与通过/失败,顶部显示通过数,每行可查看差异。
|
||||
|
||||
## 最小示例
|
||||
|
||||
```go
|
||||
var state mujica.DataTableState[string]
|
||||
cases := []mujica.EvalCase{{ID: "c1", Name: "Greets by title", Score: 0.98, Passed: true}, {ID: "c2", Name: "Refuses forgery", Score: 0.41}}
|
||||
view := func(c *ui.Context) {
|
||||
mujica.Use(c, mujica.Settings{})
|
||||
r := mujica.EvalResultTable(c, &state, cases, mujica.EvalResultTableOptions{})
|
||||
r.Table.Element.Height(260)
|
||||
if id, ok := r.Diff(); ok {
|
||||
_ = id // open expected and actual output side by side
|
||||
}
|
||||
}
|
||||
ui.Render(view, 400, 300, 1)
|
||||
```
|
||||
|
||||
签名:`func EvalResultTable(c *ui.Context, s *DataTableState[string], cases []EvalCase, opts EvalResultTableOptions) EvalResultTableResult`
|
||||
|
||||
## 参数
|
||||
|
||||
`EvalCase`
|
||||
|
||||
| 字段 | 类型 | 默认值 | 含义 |
|
||||
| --- | --- | --- | --- |
|
||||
| ID | string | 必填 | 唯一标识。 |
|
||||
| Name | string | "" | 用例名。 |
|
||||
| Score | float64 | 0 | 得分;非有限值 panic。 |
|
||||
| Passed | bool | false | 是否通过。 |
|
||||
|
||||
`EvalResultTableOptions`
|
||||
|
||||
| 字段 | 类型 | 默认值 | 含义 |
|
||||
| --- | --- | --- | --- |
|
||||
| Decimals | int | 0(即 2) | 得分小数位;为负 panic。 |
|
||||
| Status | DataStatus | DataReady | 加载、失败状态。 |
|
||||
| Error | string | "" | 失败说明。 |
|
||||
| Version | int | 0 | 原地修改数据时递增;新切片或长度变化自动刷新。 |
|
||||
|
||||
返回 `EvalResultTableResult`,含命名字段 `Element` 与 `Table`(DataTableView)。给 `Element` 一个高度。通过数与数据校验按数据版本缓存。
|
||||
|
||||
## 状态
|
||||
|
||||
- 结果列为图标加“通过/失败”文字与颜色。
|
||||
- 顶部“通过 n / m”与比例条。
|
||||
|
||||
## 事件
|
||||
|
||||
- `Diff()`:要查看差异的用例 ID。
|
||||
- `Table` 的 `Changed()`、`SortChanged()`。
|
||||
|
||||
## 键盘操作
|
||||
|
||||
- ↑/↓ 选择行;差异按钮用 Tab 到达,Enter 或 Space 触发。
|
||||
|
||||
## 限制
|
||||
|
||||
- 差异内容由调用方显示,例如用 DiffViewer。
|
||||
@@ -0,0 +1,62 @@
|
||||
# 286 ToolRegistryPanel 工具注册面板
|
||||
|
||||
## 用途
|
||||
|
||||
列出智能体可用的工具与启停开关,并预览所选工具的参数模式。
|
||||
|
||||
## 最小示例
|
||||
|
||||
```go
|
||||
var state mujica.ListState[string]
|
||||
tools := []mujica.AgentTool{{Name: "web_search", Description: "Search the web", Enabled: true,
|
||||
Params: []mujica.ToolParam{{Name: "query", Type: "string", Required: true}}}}
|
||||
view := func(c *ui.Context) {
|
||||
mujica.Use(c, mujica.Settings{})
|
||||
r := mujica.ToolRegistryPanel(c, &state, tools, mujica.ToolRegistryPanelOptions{})
|
||||
r.Element.Height(260)
|
||||
if name, on, ok := r.Toggled(); ok && name == tools[0].Name {
|
||||
tools[0].Enabled = on
|
||||
}
|
||||
}
|
||||
ui.Render(view, 400, 300, 1)
|
||||
```
|
||||
|
||||
签名:`func ToolRegistryPanel(c *ui.Context, s *ListState[string], tools []AgentTool, opts ToolRegistryPanelOptions) ToolRegistryResult`
|
||||
|
||||
## 参数
|
||||
|
||||
`AgentTool`
|
||||
|
||||
| 字段 | 类型 | 默认值 | 含义 |
|
||||
| --- | --- | --- | --- |
|
||||
| Name | string | 必填 | 唯一名称;重复 panic。 |
|
||||
| Description | string | "" | 说明。 |
|
||||
| Enabled | bool | false | 是否启用,由调用方持有。 |
|
||||
| Params | []ToolParam | nil | 参数:名称、类型、必填、说明。 |
|
||||
|
||||
`ToolRegistryPanelOptions`
|
||||
|
||||
| 字段 | 类型 | 默认值 | 含义 |
|
||||
| --- | --- | --- | --- |
|
||||
| Disabled | bool | false | 禁用开关。 |
|
||||
| Version | int | 0 | 原地修改数据时递增;新切片或长度变化自动刷新。 |
|
||||
|
||||
给返回的 `Element` 一个高度;`List.Changed()` 报告工具选择。名称索引按数据版本缓存,参数预览独立滚动,按可见行虚拟化。
|
||||
|
||||
## 状态
|
||||
|
||||
- 开关使用 Switch,名称为“启用 工具名”。
|
||||
- 参数以等宽名称、Info 色类型与“必填”描边标签显示。
|
||||
|
||||
## 事件
|
||||
|
||||
- `Toggled()`:被切换的工具与新状态。
|
||||
- 列表选择变化时右侧预览随之更新。
|
||||
|
||||
## 键盘操作
|
||||
|
||||
- 列表 ↑/↓ 选择工具;开关用 Tab 到达,Space 切换。
|
||||
|
||||
## 限制
|
||||
|
||||
- 参数只做平铺预览,不展开嵌套对象。
|
||||
@@ -0,0 +1,48 @@
|
||||
# 287 DotsLoader 三点加载
|
||||
|
||||
## 用途
|
||||
|
||||
三个圆点依次变亮的加载标记,只在加载期间显示。
|
||||
|
||||
## 最小示例
|
||||
|
||||
```go
|
||||
view := func(c *ui.Context) {
|
||||
mujica.Use(c, mujica.Settings{})
|
||||
mujica.DotsLoader(c, mujica.LoaderOptions{Label: "Thinking", ShowLabel: true})
|
||||
}
|
||||
ui.Render(view, 400, 300, 1)
|
||||
```
|
||||
|
||||
签名:`func DotsLoader(c *ui.Context, opts LoaderOptions) *ui.Element`
|
||||
|
||||
## 参数
|
||||
|
||||
`LoaderOptions`
|
||||
|
||||
| 字段 | 类型 | 默认值 | 含义 |
|
||||
| --- | --- | --- | --- |
|
||||
| Size | float32 | 0(即 16) | 标记高度;为负或无穷 panic。 |
|
||||
| Label | string | 内置“加载中” | 朗读文字。 |
|
||||
| ShowLabel | bool | false | 在标记旁显示文字。 |
|
||||
| Color | ui.Color | AccentText | 标记颜色。 |
|
||||
|
||||
五个加载器共用 `LoaderOptions`。
|
||||
|
||||
## 状态
|
||||
|
||||
- 只在绘制时请求下一帧:不再构建或被隐藏后停止重绘。
|
||||
- 减少动画:标记静止,并始终显示文字说明。
|
||||
- 无弹跳、无发光。
|
||||
|
||||
## 事件
|
||||
|
||||
- 无。
|
||||
|
||||
## 键盘操作
|
||||
|
||||
- 无:不获取焦点,以进度角色朗读。
|
||||
|
||||
## 限制
|
||||
|
||||
- 无。
|
||||
@@ -0,0 +1,47 @@
|
||||
# 288 BarsLoader 条形加载
|
||||
|
||||
## 用途
|
||||
|
||||
四根竖条依次升降的加载标记。
|
||||
|
||||
## 最小示例
|
||||
|
||||
```go
|
||||
view := func(c *ui.Context) {
|
||||
mujica.Use(c, mujica.Settings{})
|
||||
mujica.BarsLoader(c, mujica.LoaderOptions{Size: 20, Label: "Indexing"})
|
||||
}
|
||||
ui.Render(view, 400, 300, 1)
|
||||
```
|
||||
|
||||
签名:`func BarsLoader(c *ui.Context, opts LoaderOptions) *ui.Element`
|
||||
|
||||
## 参数
|
||||
|
||||
`LoaderOptions`
|
||||
|
||||
| 字段 | 类型 | 默认值 | 含义 |
|
||||
| --- | --- | --- | --- |
|
||||
| Size | float32 | 0(即 16) | 标记高度。 |
|
||||
| Label | string | 内置“加载中” | 朗读文字。 |
|
||||
| ShowLabel | bool | false | 显示文字。 |
|
||||
| Color | ui.Color | AccentText | 颜色。 |
|
||||
|
||||
见 DotsLoader。
|
||||
|
||||
## 状态
|
||||
|
||||
- 条高吸附像素;只在绘制时动画。
|
||||
- 减少动画:静止并显示文字。
|
||||
|
||||
## 事件
|
||||
|
||||
- 无。
|
||||
|
||||
## 键盘操作
|
||||
|
||||
- 无。
|
||||
|
||||
## 限制
|
||||
|
||||
- 无。
|
||||
@@ -0,0 +1,47 @@
|
||||
# 289 PulseLoader 呼吸加载
|
||||
|
||||
## 用途
|
||||
|
||||
单个圆点在 60% 到 100% 之间缓慢呼吸的加载标记,强度受限,不发光。
|
||||
|
||||
## 最小示例
|
||||
|
||||
```go
|
||||
view := func(c *ui.Context) {
|
||||
mujica.Use(c, mujica.Settings{})
|
||||
mujica.PulseLoader(c, mujica.LoaderOptions{Label: "Listening", ShowLabel: true})
|
||||
}
|
||||
ui.Render(view, 400, 300, 1)
|
||||
```
|
||||
|
||||
签名:`func PulseLoader(c *ui.Context, opts LoaderOptions) *ui.Element`
|
||||
|
||||
## 参数
|
||||
|
||||
`LoaderOptions`
|
||||
|
||||
| 字段 | 类型 | 默认值 | 含义 |
|
||||
| --- | --- | --- | --- |
|
||||
| Size | float32 | 0(即 16) | 标记高度。 |
|
||||
| Label | string | 内置“加载中” | 朗读文字。 |
|
||||
| ShowLabel | bool | false | 显示文字。 |
|
||||
| Color | ui.Color | AccentText | 颜色。 |
|
||||
|
||||
见 DotsLoader。
|
||||
|
||||
## 状态
|
||||
|
||||
- 透明度 0.55–1、尺寸 0.6–1,无光晕。
|
||||
- 减少动画:静止并显示文字。
|
||||
|
||||
## 事件
|
||||
|
||||
- 无。
|
||||
|
||||
## 键盘操作
|
||||
|
||||
- 无。
|
||||
|
||||
## 限制
|
||||
|
||||
- 无。
|
||||
@@ -0,0 +1,47 @@
|
||||
# 290 OrbitLoader 环绕加载
|
||||
|
||||
## 用途
|
||||
|
||||
一枚菱形沿一圈小菱形环绕,与 Spinner 同一视觉语言。
|
||||
|
||||
## 最小示例
|
||||
|
||||
```go
|
||||
view := func(c *ui.Context) {
|
||||
mujica.Use(c, mujica.Settings{})
|
||||
mujica.OrbitLoader(c, mujica.LoaderOptions{Size: 24, Label: "Connecting"})
|
||||
}
|
||||
ui.Render(view, 400, 300, 1)
|
||||
```
|
||||
|
||||
签名:`func OrbitLoader(c *ui.Context, opts LoaderOptions) *ui.Element`
|
||||
|
||||
## 参数
|
||||
|
||||
`LoaderOptions`
|
||||
|
||||
| 字段 | 类型 | 默认值 | 含义 |
|
||||
| --- | --- | --- | --- |
|
||||
| Size | float32 | 0(即 16) | 标记高度。 |
|
||||
| Label | string | 内置“加载中” | 朗读文字。 |
|
||||
| ShowLabel | bool | false | 显示文字。 |
|
||||
| Color | ui.Color | AccentText | 颜色。 |
|
||||
|
||||
见 DotsLoader。
|
||||
|
||||
## 状态
|
||||
|
||||
- 移动的菱形坐标吸附像素。
|
||||
- 减少动画:菱形停在顶端并显示文字。
|
||||
|
||||
## 事件
|
||||
|
||||
- 无。
|
||||
|
||||
## 键盘操作
|
||||
|
||||
- 无。
|
||||
|
||||
## 限制
|
||||
|
||||
- 无。
|
||||
@@ -0,0 +1,47 @@
|
||||
# 291 WaveLoader 波形加载
|
||||
|
||||
## 用途
|
||||
|
||||
一条向右流动的正弦线加载标记。
|
||||
|
||||
## 最小示例
|
||||
|
||||
```go
|
||||
view := func(c *ui.Context) {
|
||||
mujica.Use(c, mujica.Settings{})
|
||||
mujica.WaveLoader(c, mujica.LoaderOptions{Label: "Speaking", ShowLabel: true})
|
||||
}
|
||||
ui.Render(view, 400, 300, 1)
|
||||
```
|
||||
|
||||
签名:`func WaveLoader(c *ui.Context, opts LoaderOptions) *ui.Element`
|
||||
|
||||
## 参数
|
||||
|
||||
`LoaderOptions`
|
||||
|
||||
| 字段 | 类型 | 默认值 | 含义 |
|
||||
| --- | --- | --- | --- |
|
||||
| Size | float32 | 0(即 16) | 标记高度,宽为 2.5 倍。 |
|
||||
| Label | string | 内置“加载中” | 朗读文字。 |
|
||||
| ShowLabel | bool | false | 显示文字。 |
|
||||
| Color | ui.Color | AccentText | 颜色。 |
|
||||
|
||||
见 DotsLoader。
|
||||
|
||||
## 状态
|
||||
|
||||
- 路径点吸附像素。
|
||||
- 减少动画:静止的波形并显示文字。
|
||||
|
||||
## 事件
|
||||
|
||||
- 无。
|
||||
|
||||
## 键盘操作
|
||||
|
||||
- 无。
|
||||
|
||||
## 限制
|
||||
|
||||
- 无。
|
||||
@@ -0,0 +1,50 @@
|
||||
# 292 Shimmer 占位扫光
|
||||
|
||||
## 用途
|
||||
|
||||
加载中显示带扫光的占位块,加载完成后构建内容。
|
||||
|
||||
## 最小示例
|
||||
|
||||
```go
|
||||
loading := true
|
||||
view := func(c *ui.Context) {
|
||||
mujica.Use(c, mujica.Settings{})
|
||||
mujica.Shimmer(c, loading, mujica.ShimmerOptions{Height: 48}, func() {
|
||||
ui.Text(c, "Report ready")
|
||||
})
|
||||
}
|
||||
ui.Render(view, 400, 300, 1)
|
||||
```
|
||||
|
||||
签名:`func Shimmer(c *ui.Context, loading bool, opts ShimmerOptions, content func()) *ui.Element`
|
||||
|
||||
## 参数
|
||||
|
||||
`ShimmerOptions`
|
||||
|
||||
| 字段 | 类型 | 默认值 | 含义 |
|
||||
| --- | --- | --- | --- |
|
||||
| Width | float32 | 0(填满) | 宽度;为负 panic。 |
|
||||
| Height | float32 | 0(即 ControlHeight) | 高度。 |
|
||||
| Label | string | 内置“加载中” | 加载时朗读的文字。 |
|
||||
|
||||
`loading` 为 false 时只构建 content。
|
||||
|
||||
## 状态
|
||||
|
||||
- 扫光为一条半透明 Surface 色带,位置吸附像素,只在绘制时动画。
|
||||
- 减少动画:静态填充。
|
||||
- 加载结束后不再重绘。
|
||||
|
||||
## 事件
|
||||
|
||||
- 无。
|
||||
|
||||
## 键盘操作
|
||||
|
||||
- 无。
|
||||
|
||||
## 限制
|
||||
|
||||
- 只用于加载中,不作装饰。
|
||||
@@ -0,0 +1,47 @@
|
||||
# 293 CountUp 数字过渡
|
||||
|
||||
## 用途
|
||||
|
||||
数值变化时从旧值过渡到新值。
|
||||
|
||||
## 最小示例
|
||||
|
||||
```go
|
||||
view := func(c *ui.Context) {
|
||||
mujica.Use(c, mujica.Settings{})
|
||||
mujica.CountUp(c, 12840, mujica.CountUpOptions{Duration: 800 * time.Millisecond})
|
||||
}
|
||||
ui.Render(view, 400, 300, 1)
|
||||
```
|
||||
|
||||
签名:`func CountUp(c *ui.Context, value float64, opts CountUpOptions) *ui.Element`
|
||||
|
||||
## 参数
|
||||
|
||||
`CountUpOptions`
|
||||
|
||||
| 字段 | 类型 | 默认值 | 含义 |
|
||||
| --- | --- | --- | --- |
|
||||
| Duration | time.Duration | 0(即 120 ms) | 过渡时长;为负 panic。 |
|
||||
| Decimals | int | 0 | 小数位;为负 panic。 |
|
||||
| Format | func(float64) string | nil | 自定义显示,优先于 Decimals。 |
|
||||
|
||||
value 须为有限值。首次显示直接为目标值。
|
||||
|
||||
## 状态
|
||||
|
||||
- 缓出过渡,过渡中途再变化时从当前显示值继续。
|
||||
- 等宽数字防止抖动;朗读最终值。
|
||||
- 减少动画:直接显示新值。过渡结束或屏外隐藏后停止重绘;恢复动画设置时保持已显示的最终值。
|
||||
|
||||
## 事件
|
||||
|
||||
- 无。
|
||||
|
||||
## 键盘操作
|
||||
|
||||
- 无。
|
||||
|
||||
## 限制
|
||||
|
||||
- 无。
|
||||
@@ -0,0 +1,49 @@
|
||||
# 294 Typewriter 打字机
|
||||
|
||||
## 用途
|
||||
|
||||
逐字显示文本,可调速度、可跳过、完成时通知;文本增长时从当前位置继续。
|
||||
|
||||
## 最小示例
|
||||
|
||||
```go
|
||||
view := func(c *ui.Context) {
|
||||
mujica.Use(c, mujica.Settings{})
|
||||
r := mujica.Typewriter(c, "The court assembles at dusk.", mujica.TypewriterOptions{Speed: 30, Skippable: true})
|
||||
if r.Changed() {
|
||||
// show the next message
|
||||
}
|
||||
}
|
||||
ui.Render(view, 400, 300, 1)
|
||||
```
|
||||
|
||||
签名:`func Typewriter(c *ui.Context, text string, opts TypewriterOptions) ChoiceResult`
|
||||
|
||||
## 参数
|
||||
|
||||
`TypewriterOptions`
|
||||
|
||||
| 字段 | 类型 | 默认值 | 含义 |
|
||||
| --- | --- | --- | --- |
|
||||
| Speed | float64 | 0(即每秒 40 字) | 速度;须为有限值,并产生 1 ns 到 time.Duration 上限之间的正间隔。非法值 panic。 |
|
||||
| Skippable | bool | false | 显示“跳过”按钮。 |
|
||||
|
||||
返回 `ChoiceResult`,含 `Element`。
|
||||
|
||||
## 状态
|
||||
|
||||
- 按定时请求帧,不连续重绘。
|
||||
- 整段文本作为名称朗读,不逐字朗读。
|
||||
- 减少动画:直接显示全文。
|
||||
|
||||
## 事件
|
||||
|
||||
- `Changed()`:全文显示完的那一帧(含跳过)。
|
||||
|
||||
## 键盘操作
|
||||
|
||||
- “跳过”按钮用 Tab 到达,Enter 或 Space 跳过。
|
||||
|
||||
## 限制
|
||||
|
||||
- 文本被替换为不以旧文本开头的内容时从头开始。
|
||||
@@ -0,0 +1,46 @@
|
||||
# 295 ShimmerText 文字扫光
|
||||
|
||||
## 用途
|
||||
|
||||
处理中的状态文字(如“思考中”)上有光扫过。
|
||||
|
||||
## 最小示例
|
||||
|
||||
```go
|
||||
thinking := true
|
||||
view := func(c *ui.Context) {
|
||||
mujica.Use(c, mujica.Settings{})
|
||||
mujica.ShimmerText(c, "Thinking…", mujica.ShimmerTextOptions{Active: thinking})
|
||||
}
|
||||
ui.Render(view, 400, 300, 1)
|
||||
```
|
||||
|
||||
签名:`func ShimmerText(c *ui.Context, text string, opts ShimmerTextOptions) *ui.Element`
|
||||
|
||||
## 参数
|
||||
|
||||
`ShimmerTextOptions`
|
||||
|
||||
| 字段 | 类型 | 默认值 | 含义 |
|
||||
| --- | --- | --- | --- |
|
||||
| Active | bool | false | 扫光;否则为静态 TextMuted 文字。 |
|
||||
|
||||
text 为空时 panic。
|
||||
|
||||
## 状态
|
||||
|
||||
- 逐字由 TextMuted 渐亮到 Text,再回落;只在绘制时动画。
|
||||
- 以状态角色朗读文字。
|
||||
- 减少动画或未激活:静态文字。
|
||||
|
||||
## 事件
|
||||
|
||||
- 无。
|
||||
|
||||
## 键盘操作
|
||||
|
||||
- 无。
|
||||
|
||||
## 限制
|
||||
|
||||
- 扫光时文字保持单行。
|
||||
@@ -0,0 +1,50 @@
|
||||
# 296 Stagger 依次进场
|
||||
|
||||
## 用途
|
||||
|
||||
子项按间隔依次进场,只在首次出现时执行一次。
|
||||
|
||||
## 最小示例
|
||||
|
||||
```go
|
||||
guests := []string{"Sakiko", "Uika", "Mutsumi"}
|
||||
view := func(c *ui.Context) {
|
||||
mujica.Use(c, mujica.Settings{})
|
||||
mujica.Stagger(c, len(guests), mujica.StaggerOptions{}, func(i int) {
|
||||
ui.Text(c, guests[i])
|
||||
})
|
||||
}
|
||||
ui.Render(view, 400, 300, 1)
|
||||
```
|
||||
|
||||
签名:`func Stagger(c *ui.Context, n int, opts StaggerOptions, item func(i int)) *ui.Element`
|
||||
|
||||
## 参数
|
||||
|
||||
`StaggerOptions`
|
||||
|
||||
| 字段 | 类型 | 默认值 | 含义 |
|
||||
| --- | --- | --- | --- |
|
||||
| Interval | time.Duration | 0(即 60 ms) | 相邻子项间隔。 |
|
||||
| Duration | time.Duration | 0(即 PopupDuration) | 每项进场时长。 |
|
||||
| Horizontal | bool | false | 横向排列。 |
|
||||
|
||||
n、Interval、Duration 为负时 panic。基于 MyGo `Transition` 的 Enter。
|
||||
|
||||
## 状态
|
||||
|
||||
- 每项从 8 DIP 外淡入。
|
||||
- 序列结束后新增的项照常进场,不再等待。
|
||||
- 减少动画:一次全部显示。按定时请求帧。
|
||||
|
||||
## 事件
|
||||
|
||||
- 无。
|
||||
|
||||
## 键盘操作
|
||||
|
||||
- 无。
|
||||
|
||||
## 限制
|
||||
|
||||
- 尚未出现的项不占位,容器随之增长。
|
||||
@@ -0,0 +1,47 @@
|
||||
# 297 ReorderTransition 重排过渡
|
||||
|
||||
## 用途
|
||||
|
||||
按稳定键排列子项,顺序变化时子项平滑移动到新位置;新增淡入,移除淡出。
|
||||
|
||||
## 最小示例
|
||||
|
||||
```go
|
||||
order := []string{"Sakiko", "Uika", "Mutsumi"}
|
||||
view := func(c *ui.Context) {
|
||||
mujica.Use(c, mujica.Settings{})
|
||||
mujica.ReorderTransition(c, order, mujica.ReorderTransitionOptions{Gap: 4}, func(name string) {
|
||||
ui.Text(c, name)
|
||||
})
|
||||
}
|
||||
ui.Render(view, 400, 300, 1)
|
||||
```
|
||||
|
||||
签名:`func ReorderTransition[K comparable](c *ui.Context, keys []K, opts ReorderTransitionOptions, item func(key K)) *ui.Element`
|
||||
|
||||
## 参数
|
||||
|
||||
`ReorderTransitionOptions`
|
||||
|
||||
| 字段 | 类型 | 默认值 | 含义 |
|
||||
| --- | --- | --- | --- |
|
||||
| Duration | time.Duration | 0(即 120 ms) | 移动时长;为负 panic。 |
|
||||
| Gap | float32 | 0 | 子项间距。 |
|
||||
|
||||
键重复时 panic。基于 MyGo `Transition` 的 Position、Enter 与 Exit。
|
||||
|
||||
## 状态
|
||||
|
||||
- 减少动画:直接到位。动画结束后停止重绘。
|
||||
|
||||
## 事件
|
||||
|
||||
- 无。
|
||||
|
||||
## 键盘操作
|
||||
|
||||
- 焦点随键跟随子项移动。
|
||||
|
||||
## 限制
|
||||
|
||||
- 只做纵向列;虚拟化列表(List)的行不支持此过渡(MyGo 文档 transitions.md)。
|
||||
@@ -0,0 +1,52 @@
|
||||
# 298 LayoutTransition 布局过渡
|
||||
|
||||
## 用途
|
||||
|
||||
内容的尺寸与位置变化时从旧布局过渡到新布局(FLIP)。
|
||||
|
||||
## 最小示例
|
||||
|
||||
```go
|
||||
open := false
|
||||
view := func(c *ui.Context) {
|
||||
mujica.Use(c, mujica.Settings{})
|
||||
mujica.LayoutTransition(c, mujica.LayoutTransitionOptions{Clip: true}, func() {
|
||||
ui.Text(c, "Program")
|
||||
if open {
|
||||
ui.Text(c, "Overture · Masquerade · Finale")
|
||||
}
|
||||
})
|
||||
}
|
||||
ui.Render(view, 400, 300, 1)
|
||||
```
|
||||
|
||||
签名:`func LayoutTransition(c *ui.Context, opts LayoutTransitionOptions, content func()) *ui.Element`
|
||||
|
||||
## 参数
|
||||
|
||||
`LayoutTransitionOptions`
|
||||
|
||||
| 字段 | 类型 | 默认值 | 含义 |
|
||||
| --- | --- | --- | --- |
|
||||
| Duration | time.Duration | 0(即 120 ms) | 时长;为负 panic。 |
|
||||
| Row | bool | false | 横向排列内容。 |
|
||||
| Clip | bool | false | 尺寸变化时裁剪溢出内容。 |
|
||||
|
||||
基于 MyGo `Transition` 的 Position 与 Size。
|
||||
|
||||
## 状态
|
||||
|
||||
- 尺寸过渡中内容按每一帧的尺寸重新布局。
|
||||
- 窗口缩放引起的变化不动画;减少动画时直接到位。
|
||||
|
||||
## 事件
|
||||
|
||||
- 无。
|
||||
|
||||
## 键盘操作
|
||||
|
||||
- 无。
|
||||
|
||||
## 限制
|
||||
|
||||
- 被同一变化推动的兄弟元素需要各自的 LayoutTransition 才会同步移动。
|
||||
@@ -0,0 +1,48 @@
|
||||
# 299 Presence 进出场
|
||||
|
||||
## 用途
|
||||
|
||||
内容随 show 进出场:淡入淡出、滑动或折叠,退出完成后移除。
|
||||
|
||||
## 最小示例
|
||||
|
||||
```go
|
||||
show := true
|
||||
view := func(c *ui.Context) {
|
||||
mujica.Use(c, mujica.Settings{})
|
||||
mujica.Presence(c, show, mujica.PresenceOptions{Kind: mujica.PresenceSlide}, func() {
|
||||
ui.Text(c, "Saved")
|
||||
})
|
||||
}
|
||||
ui.Render(view, 400, 300, 1)
|
||||
```
|
||||
|
||||
签名:`func Presence(c *ui.Context, show bool, opts PresenceOptions, content func()) *ui.Element`
|
||||
|
||||
## 参数
|
||||
|
||||
`PresenceOptions`
|
||||
|
||||
| 字段 | 类型 | 默认值 | 含义 |
|
||||
| --- | --- | --- | --- |
|
||||
| Kind | PresenceKind | PresenceFade | PresenceFade、PresenceSlide、PresenceCollapse;未知值 panic。 |
|
||||
| Duration | time.Duration | 0(即 PopupDuration) | 时长;为负 panic。 |
|
||||
|
||||
基于 MyGo `Transition` 的 Enter 与 Exit:退出时保留上一帧的副本直到动画结束,不占布局、不接收指针与焦点。
|
||||
|
||||
## 状态
|
||||
|
||||
- 减少动画:直接出现与消失。动画结束后停止重绘。
|
||||
|
||||
## 事件
|
||||
|
||||
- 无。
|
||||
|
||||
## 键盘操作
|
||||
|
||||
- 退出中的内容不接收焦点。
|
||||
|
||||
## 限制
|
||||
|
||||
- 不提供缩放:MyGo `ui.Motion` 只有位移、透明度与折叠(ui/transition.go:40)。
|
||||
- 父元素在上一帧不存在时,内容随父元素一起出现而不进场。
|
||||
@@ -0,0 +1,47 @@
|
||||
# 300 BlinkHighlight 变化高亮
|
||||
|
||||
## 用途
|
||||
|
||||
数值变化时单次高亮:上升 Success、下降 Danger,并留下方向箭头。
|
||||
|
||||
## 最小示例
|
||||
|
||||
```go
|
||||
price := 101.5
|
||||
view := func(c *ui.Context) {
|
||||
mujica.Use(c, mujica.Settings{})
|
||||
mujica.BlinkHighlight(c, price, mujica.BlinkHighlightOptions{})
|
||||
}
|
||||
ui.Render(view, 400, 300, 1)
|
||||
```
|
||||
|
||||
签名:`func BlinkHighlight(c *ui.Context, value float64, opts BlinkHighlightOptions) *ui.Element`
|
||||
|
||||
## 参数
|
||||
|
||||
`BlinkHighlightOptions`
|
||||
|
||||
| 字段 | 类型 | 默认值 | 含义 |
|
||||
| --- | --- | --- | --- |
|
||||
| Format | func(float64) string | 两位小数 | 显示格式。 |
|
||||
| Duration | time.Duration | 0(即 120 ms) | 高亮淡出时长;为负 panic。 |
|
||||
|
||||
value 须为有限值;首次显示不高亮。
|
||||
|
||||
## 状态
|
||||
|
||||
- 背景从 22% 透明度淡出一次,结束后停止重绘。
|
||||
- 方向箭头与朗读的“上升/下降”在变化后一直保留,不只靠颜色。
|
||||
- 减少动画:不闪烁,只显示静态箭头。
|
||||
|
||||
## 事件
|
||||
|
||||
- 无。
|
||||
|
||||
## 键盘操作
|
||||
|
||||
- 无。
|
||||
|
||||
## 限制
|
||||
|
||||
- 开启减少动画会结束当前高亮;恢复动画时保持静态方向标记。
|
||||
Reference in new issue
Block a user