#tui #widgets #ratatui #events #mouse #keyboard #stack

ratatui-widgets

为ratatui终端UI库提供的一系列小部件

11个版本

0.1.10 2024年8月6日
0.1.9 2024年7月22日
0.1.6 2024年5月27日
0.1.5 2024年4月24日
0.1.0 2024年1月19日

#489 in 命令行界面

Download history 13/week @ 2024-04-29 7/week @ 2024-05-20 186/week @ 2024-05-27 22/week @ 2024-06-03 59/week @ 2024-06-10 13/week @ 2024-06-17 168/week @ 2024-07-01 9/week @ 2024-07-08 129/week @ 2024-07-15 173/week @ 2024-07-22 7/week @ 2024-07-29 132/week @ 2024-08-05 8/week @ 2024-08-12

320 个月下载量
用于 tuwi

MIT/Apache

37KB
518 行代码(不包括注释)

Ratatui-widgets

Crates.io Badge License Badge Docs.rs Badge
Deps.rs Badge Codecov.io Badge Discord Badge

ratatui-widgets 是一个Rust包,它为 Ratatui 提供额外的部件。

安装

cargo add ratatui-widgets

用法

// TODO: Add usage examples

示例

Button

状态

本README文件为ratatui部件库的初始目标设定。这个库 将定期发布破坏性变更 - 快速迭代并不断尝试。这里更注重快速交付而不是完美。期待在功能变更或添加时看到发布。release-plz 将根据semver更新版本,并使用来自每个PR的信息更新 变更日志

这(目前)不是一个官方Ratatui-org项目,但可能在未来的某个时刻成为。

功能

  • 基本事件处理抽象和键盘/鼠标处理

  • 基本按钮

    let button = Button::new("Click me");
    
  • 堆叠容器,用于处理小部件和布局

    let stack = StackContainer::horizontal().with_widgets(vec![
        (Box::new(Line::raw("Left")), Constraint::Fill(1)),
        (Box::new(Text::raw("Center")), Constraint::Fill(1)),
        (Box::new(Span::raw("Right")), Constraint::Fill(1)),
    ]);
    

待办事项

大多数来自https://en.wikipedia.org/wiki/Graphical_widget#List_of_common_generic_widgets的小部件列表

  • 创建对后端事件进行抽象以生成鼠标和键盘事件的事件类型
    • Crossterm
    • Termion
    • Termwiz
    • 考虑如何处理非鼠标/键盘事件(调整大小、粘贴、聚焦等)
  • 支持按钮/菜单等的键盘快捷键/加速键
  • 考虑支持键盘定制
  • 支持适用于所有小部件的主题(颜色和修饰符)
  • 决定如何处理状态(StatefulWidget和其他选项)
  • 决定如何处理点击/更改等事件
  • 决定如何处理内部状态(聚焦、悬停)
  • 决定如何处理聚焦顺序/选择
  • 决定容器通常如何工作
  • 按钮
    • 按钮 [Submit]
    • 单选按钮 (*)( )
    • 复选框 [x] 项目
    • 开关 <_ON_ / OFF >
    • 切换按钮 [ON]
    • 分割按钮 [提交][]
    • 循环按钮 [红色] <=> [绿色] <=> [蓝色]
  • 滑动条 [-----------|--------------]
  • 列表框(由于核心中已经有一个,所以优先级较低)
  • 旋转框 [123][+][-]
  • 下拉列表 [已选项目][]
  • 菜单
    • 上下文菜单
    • 饼图菜单(在控制台中可能不值得,但也许有类似用途)
  • 菜单栏(可能需要引入 https://crates.io/crates/tui-menu
  • 工具栏(适合鼠标用户界面,不适合键盘用户界面)
    • 功能区(与工具栏相同)
  • 组合框 [____________][]
  • 图标(不确定我们能看到这个的什么用途)
  • 树视图(https://crates.io/crates/tui-tree-widget
  • 树图(未在维基页面上列出,但 https://crates.io/crates/tui-treemap
  • 网格视图/数据网格(类似于内置表格,但我们可以用这个做更多事情)
  • 链接 <点击这里>(与OSC 8集成)
  • 选项卡(与内置选项卡相比,这是一个容器小部件)
  • 滚动条(内置)
  • 文本框(https://crates.io/crates/tui-textarea https://crates.io/crates/tui-input
  • 标签(基本上与段落相同,但链接到另一个字段)
  • 工具提示(当字段聚焦时在下方显示 - 淡文本等。)
  • 气球帮助(类似于工具提示 - 可能这是一个较大的帮助弹出窗口,必须关闭)
  • 状态栏(主要用于放置背景,并添加多个自动间隔的元素)
  • 进度条(仪表/线仪表,但优化了时间/进度)
  • 信息栏 - 类似于弹出窗口或闪元素,但通常是非模态的,可关闭,位于屏幕顶部
  • 容器
    • 窗口(不确定是否需要这个概念,但作为一个顶级想法可能很有用)
    • 可折叠面板 - 类似于 VSCode 的面板
      • 抽屉 - 与面板相关 - 不确定它们之间的区别在哪里
    • 手风琴 - 垂直堆叠的可以由选择展开的项目列表
    • 模态窗口 - 包含其他元素的弹出窗口
    • 对话框 - 在弹出窗口中显示信息并等待响应(《https://crates.org.cn/crates/tui-confirm-dialog》 https://crates.io/crates/tui-confirm-dialog 《https://crates.org.cn/crates/tui-file-dialog》 https://crates.io/crates/tui-file-dialog
    • 弹出窗口(不在维基百科中,https://crates.io/crates/tui-popup
    • 调色板窗口/工具窗口 - 带有命令/按钮的浮动窗口
    • 检查器窗口 - 显示其他位置所选项目的信息(可能作为调试工具很有用)
    • 框架 - 分组机制 - 这可能是一个带有标题的边框,充当容器
    • 画布(可能内置)
    • 封面流 - 通常带有图像/快照的水平滚动的大选择
    • 泡泡流 - 讨论线程(例如 https://github.com/dustinblackman/oatmeal
    • 旋转门 - 显示视觉卡片 - 与封面流不同,它一次显示多个卡片
    • 滚动视图 - 不在维基百科文章中,但 https://crates.io/crates/tui-scrollview
  • 欢迎提出其他项目的建议!

许可证

版权(c)2024 Josh McKinney

本项目根据以下任一许可证授权:

  • Apache License,版本 2.0(《https://github.com/joshka/ratatui-widgets/blob/89745a8b9d4e1f68d91d3ac8d2936d12fc3dfc76/LICENSE-APACHE》或《http://www.apache.org/licenses/LICENSE-2.0》)
  • MIT 许可证(《https://github.com/joshka/ratatui-widgets/blob/89745a8b9d4e1f68d91d3ac8d2936d12fc3dfc76/LICENSE-MIT》或《http://opensource.org/licenses/MIT》)

任选其一。

贡献

除非你明确声明,否则根据 Apache-2.0 许可证定义的,任何有意提交以包含在作品中的贡献,都应按上述方式双许可,不附加任何额外条款或条件。

请参阅《https://github.com/joshka/ratatui-widgets/blob/89745a8b9d4e1f68d91d3ac8d2936d12fc3dfc76/CONTRIBUTING.md》。

依赖关系

~6–21MB
~279K SLoC