这个项目能做什么

# thinking-orbs 为AI与代理界面设计的点状思考球加载指示器。提供九种手调动画状态,每种状态均以两种针对性尺寸发布,渲染于纯2D画布上——无需WebGL,无需滤镜,在Chrome、Safari和Firefox中表现一致。 [在线演示](https://orbs.jakubantalik.com) · [代码仓库](https://github.com/Jakubantalik/thinking-orbs) · [报告问题](https://github.com/Jakubantalik/thinking-orbs/issues) ## 安装 ```bash npm install thinking-orbs ``` ## 快速开始 ```tsx import { ThinkingOrb } from 'thinking-orbs'; function Status() { return <ThinkingOrb state="searching" size={64} />; } ``` ## 状态 代理可能正在执行的九种动作,每种对应一个独特的动画: ```tsx <ThinkingOrb state="working" /> {/* 粒子在倾斜轨道上运动 */} <ThinkingOrb state="searching" /> {/* 扫描子午线扫过点状球体 */} <ThinkingOrb state="solving" /> {/* 条带打乱,然后咔嗒一声恢复解决 */} <ThinkingOrb state="listening" /> {/* 波形在环中滚动 */} <ThinkingOrb state="connecting" /> {/* 星座自行连线 */} <ThinkingOrb state="weaving" /> {/* 三股线围绕球体编织 */} <ThinkingOrb state="composing" /> {/* 起伏的多带饰带 */} <ThinkingOrb state="breathing" /> {/* 环缓慢变形 */} <ThinkingOrb state="shaping" /> {/* 点状轮廓:圆形 → 三角形 → 正方形 */} ``` ## 尺寸 两种调校预设——独立设计,而非缩放因子。`64`用于聊天头像尺寸,`20`用于内联文本尺寸。每种预设都有各自的点数、点大小和速度调校: ```tsx <ThinkingOrb state="working" size={64} /> <ThinkingOrb state="working" size={20} /> ``` ## 主题 严格单色——深色背景用浅色墨迹,浅色背景用深色墨迹——模式自动从宿主项目中选取: ```tsx <ThinkingOrb theme="auto" /> {/* 默认——从项目中检测 */} <ThinkingOrb theme="dark" /> {/* 固定:深色背景用浅色点 */} <ThinkingOrb theme="light" /> {/* 固定:浅色背景用深色点 */} ``` `auto`模式分三层解析,并在任一层次变化时实时更新: 1. 祖先元素上的`data-theme="dark|light"`属性或`dark`/`light`类(Tailwind / shadcn约定),通过`MutationObserver`监听; 2. 否则使用`prefers-color-scheme`,订阅实时操作系统主题切换; 3. SSR安全——画布仅在客户端、主题解析完成后绘制。 ## 其他属性 ```tsx <ThinkingOrb state="solving" size={20} speed={1.5} // 预设内置速度的倍率 paused={false} // 冻结在当前帧 aria-label="正在分析仓库…" // 覆盖各状态的默认标签 /> ``` 所有其他`<canvas>`属性(`className`、`style`、`data-*`等)均会透传。 ## 无障碍与性能 - 开箱即用`role="img"`,并带有合理的各状态`aria-label`。 - `prefers-reduced-motion: reduce`时渲染静态代表性帧——无动画——但仍跟随实时主题。 - 每个实例在滚动出视口(`IntersectionObserver`)或标签页隐藏时自动暂停,并在相位中恢复——所有实例共享一个时钟。 - 仅使用纯2D画布弧线:无`ctx.filter`、无SVG滤镜、无WebGL——各处像素一致,在低端设备上开销低。设备像素比上限为2。 ## 许可证 MIT © Jakub Antalik