thinking-orbs

Implement accessible animated AI status indicators in React using the thinking-orbs canvas library.

5.7k|685|Updated Feb 3, 2026
One-click install
npx skills add https://github.com/MengTo/Skills --skill thinking-orbs
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: thinking-orbs
Source: https://github.com/MengTo/Skills/tree/main/agent-skills/web-design/thinking-orbs
Command: npx skills add https://github.com/MengTo/Skills --skill thinking-orbs

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill requires thinking-orbs, react, react-dom.

What problem does it solve?

Chat, copilot, and agent interfaces need truthful, accessible loading feedback, but generic spinners fail to communicate what the AI is actually doing and often break accessibility, theming, or reduced-motion requirements.

Core Features & Use Cases

  • Semantic Activity States: Map product phases to six shipped states (working, searching, solving, listening, composing, shaping) so the indicator reflects the real underlying activity.
  • Accessible by Default: Built-in role and per-state ARIA labels, reduced-motion static frames, and guidance for announcing status exactly once via role="status" regions.
  • Theme and Performance Handling: Auto dark/light theme resolution, DPR-capped Canvas 2D rendering, offscreen and hidden-tab pausing, and tuned 20px/64px size presets.
  • Use Case: In a Next.js chat app, wrap the component in a client boundary and show state="searching" during retrieval, state="composing" while drafting the reply, then remove the orb when the response completes.

Quick Start

Install the thinking-orbs npm package and ask your agent to add a ThinkingOrb component with an appropriate state, size, and aria-label to your React chat interface.

Frequently Asked Questions about thinking-orbs

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I add an AI loading indicator to a React chat interface?

Install the thinking-orbs npm package and render the ThinkingOrb component with a state matching the current activity, such as searching or composing. Choose size 20 for inline status rows or 64 for avatar-scale indicators, and provide a task-specific aria-label.

What loading states does the thinking-orbs library support?

The library ships six states: working, searching, solving, listening, composing, and shaping. Map your product phases to the truthful state and prefer a generic working state over an inaccurate but visually interesting one.

Does thinking-orbs work with Next.js App Router?

Yes, but the component uses effects, canvas, and requestAnimationFrame, so its import must live behind a client boundary with the "use client" directive. The library is SSR-safe because it only paints on the client after resolving the theme.

Can I customize the colors or size of the thinking orb?

No. The public API is monochrome and supports only the tuned 20 and 64 pixel presets, which are separate designs rather than a scale factor. For brand colors or arbitrary sizes, choose another loader or intentionally fork the library.

Why is my screen reader announcing the loading status twice?

Duplicate announcements happen when the orb's default role="img" label and adjacent visible status text both announce the same state. Set aria-hidden="true" on the orb and let a single role="status" live region own the announcement.