/focuz

Focus management.

Primary LanguageJavaScriptMIT LicenseMIT

focuz

配置 focuz 会涉及到入口、出口和列表,这三个概念和字面一样好理解。想象要实现一个弹窗组件,首先要触发一个按钮打开弹窗,这个按钮是入口;打开弹窗之后按下 TabShift-Tab 从而在弹窗里导航,导航到的元素们是列表;最后在“关闭”按钮上按下空格或回车,弹窗关闭,这个“关闭”按钮是出口。

focuz 的特性:

  • 嵌套的聚焦结构;
  • 灵活、方便的入口与出口:
    • 多入口、多出口;
    • 开关入口、封面入口;
    • 蒙层和 Esc 出口;
    • 调用式的入口与出口。
  • 安全、灵活的列表:
    • 范围列表、固定列表和动态列表;
    • 无需入口的溯溪列表;
    • 焦点矫正与焦点保护;
    • 自定义导航组合键;
    • 延迟聚焦与失焦,支持指定初始焦点。
  • 导航前执行的钩子;
  • 兼容鼠标聚焦行为。

TODO:

  • 特性——悬浮聚焦;
  • 特性——通过插件将范围模式转为序列模式;
  • 优化——入口与出口的 type 选项;
  • 优化——范围列表焦点矫正;
  • 优化——通过元素寻找列表;
  • 优化——组合键字符串;
  • 优化——参数整理与简化;
  • 优化——listsInfo 的 wrap 依赖移除。

基本入参结构:

{
  "root": "#app",
  "entry": "#en1",
  "exit": "#ex1",
  "list": [
    "#i1",
    "#i2",
    "#i3"
  ],
  "sub": {
    "entry": "en2",
    "exit": "#ex2",
    "list": {
      "nodes": ["#i_start", "#i_end"],
      "range": true
    }
  }
}