Detent web components
By Shane Logsdon

AI & chat

Thinking Orb

Implemented

Minimalist monochrome particle vortex for AI interfaces

detent-thinking-orb

Port status
Catalog status
implemented
Origin
upstream
Phase
4
Wave
phase-4-canvas
Group
AI & chat

5.3 KB gzip for the class module

Variants

Nine cognitive states, one loop per orb. Setting state retargets the running loop — it never restarts or stacks — and each state is a distinct deformation of the same particle shell. The host is a single role="img" named "<state> orb"; the canvas is decorative. paused freezes the current frame, and prefers-reduced-motion: reduce paints one static frame with zero scheduled frames.

The last orb uses the documented light mode (el.dark = false, the property is the opt-out for the default-true flag) on a light surface. Documented parts: orb, canvas. Documented custom property: --detent-thinking-orb-backdrop.

Recorded states

  • paused recorded state; no setter
  • reduced motion recorded state; no setter
  • working recorded state; no setter
  • searching recorded state; no setter
  • solving recorded state; no setter
  • listening recorded state; no setter
  • connecting recorded state; no setter
  • weaving recorded state; no setter
  • composing recorded state; no setter
  • breathing recorded state; no setter
  • shaping recorded state; no setter

Usage

Import

import '/components/thinking-orb/define.js';

// or register it yourself
import { DetentThinkingOrb } from '/components/thinking-orb/thinking-orb.js';

Attributes

  • aria-label
  • dark
  • paused
  • size
  • speed
  • state

Properties

No properties are recorded for this component.

Slots

No slots are recorded for this component.

Events

No events are recorded for this component.

Example

Runnable example: site/examples/thinking-orb.ts. The snippet below is generated from the catalogued attributes.

<detent-thinking-orb
  aria-label="${state} orb"
  dark
  paused
  size="64"
  speed="1"
  state="working"
></detent-thinking-orb>

Source

The pinned upstream source for this row:

  • src/components/ui/ThinkingOrb.tsx sha256 c3efcbedd46b…

Native files

The native module and its artifacts:

  • src/components/thinking-orb/thinking-orb.ts
  • src/components/thinking-orb/styles.css
  • src/components/thinking-orb/define.ts
  • docs/components/thinking-orb.md
  • site/examples/thinking-orb.ts
  • tests/browser/thinking-orb.spec.ts
  • evidence/components/thinking-orb.md

API

Boolean attributes follow HTML presence semantics: present means true, absent means false, and disabled="false" still means disabled.

Attributes

Attributes
AttributePropertyTypeDefaultNotes
aria-labelaria-labelstring'${state} orb'Kebab-case attribute; camelCase property.
darkdarkbooleantruePresence semantics: present means true, absent means false.
pausedpausedbooleanfalsePresence semantics: present means true, absent means false.
sizesizenumber64Kebab-case attribute; camelCase property.
speedspeednumber1Kebab-case attribute; camelCase property.
statestate'working' | 'searching' | 'solving' | 'listening' | 'connecting' | 'weaving' | 'composing' | 'breathing' | 'shaping''working'Kebab-case attribute; camelCase property.

Properties

No property-only values are recorded for this component.

Events

No custom events are recorded for this component.

Slots

No slots are recorded for this component.

CSS customisation

  • `className` prop is replaced by documented CSS parts/custom properties; no Tailwind in consumers.
  • dark resolves from the documented default true with the property as the opt-out instead of auto-detecting document.documentElement.classList.
  • A hidden document stops the loop through visibilitychange; the source handled paused, reduced motion and IntersectionObserver only.
  • size clamps 8..512 and speed 0..8 with one development warning.
  • role=img and aria-label live on the host, where the source put them on the inner wrapper span.
  • The canvas honours devicePixelRatio capped at 2 for both backing store and CSS box.

What it does

A minimalist monochrome particle vortex for AI interfaces: a spherical shell of particles around a luminous optical core, with nine cognitive states that each deform the field differently.

Upstream behaviour
  • Pure monochrome aesthetic (clean white/silver on dark, deep obsidian on light) with zero colors
  • 9 unique cognitive states: working, searching, solving, listening, connecting, weaving, composing, breathing, and shaping
  • GPU-accelerated Canvas rendering with 3D spherical trigonometry and perspective projection
  • Adaptive particle density scaling automatically calibrated to size
  • Full accessibility support with automatic prefers-reduced-motion fallback
  • Minimalist optical core with subtle particle motion trailing and star sparkles
Differences from upstream
  • `className` prop is replaced by documented CSS parts/custom properties; no Tailwind in consumers.
  • dark resolves from the documented default true with the property as the opt-out instead of auto-detecting document.documentElement.classList.
  • A hidden document stops the loop through visibilitychange; the source handled paused, reduced motion and IntersectionObserver only.
  • size clamps 8..512 and speed 0..8 with one development warning.
  • role=img and aria-label live on the host, where the source put them on the inner wrapper span.
  • The canvas honours devicePixelRatio capped at 2 for both backing store and CSS box.
Previous: Text Scramble Decoder Next: Torque Dial

Docs

Components

Project