Logo Orbit
DiagramsNew

Logo Orbit

Upright logo badges orbit a fixed center on two circular paths.

USE IT FORIntegration sectionsPartner ecosystemsConnected apps
React + CSS
Explore the full-width experienceOpen preview

Dropbox→ Anticraft UI

Live component. Go ahead, interact.
01

Installation

Run this in your shadcn-configured React project. The component and stylesheet are added together.

TERMINAL
npx shadcn@latest add http://localhost:5173/r/logo-orbit.json

This command uses the current site address. For localhost, keep this preview running on the same computer. Files follow your configured components alias.

02

Usage

Import the component and make the details your own.

TypeScript
import { LogoOrbit } from '@/components/anticraft/LogoOrbit';

export function Example() {
  return (
    <LogoOrbit
      center={<span>A</span>}
      centerLabel="Acme"
      duration={60}
      items={[
        { id: 'files', label: 'Files', logo: <span>◈</span>, size: 72 },
        { id: 'chat', label: 'Chat', logo: <span>✳</span>, size: 64 },
        { id: 'calendar', label: 'Calendar', logo: <span>▦</span>, size: 76 },
        { id: 'tasks', label: 'Tasks', logo: <span>✓</span>, orbit: 'inner', size: 52 },
      ]}
    />
  );
}
03

Props

PropTypeDefaultDescription
itemsLogoOrbitItem[]RequiredLogos with unique id, label, ReactNode logo, optional inner/outer orbit, badge size and href. Empty ids/labels and duplicate ids are ignored. Up to twelve items are shown; a maximum of six use the inner path, with additional inner requests moved to the outer path.
centerReactNodeGeometric A markDecorative artwork in the fixed central disk. Use an inline SVG or an image with an empty alt attribute.
centerLabelstring'Workspace'Accessible name of the center and destination shown in the selection caption.
durationnumber60Seconds per outer revolution, clamped to 20–180. The inner path takes 70% of this duration. Nonfinite values fall back to 60.
reversebooleanfalseReverses both paths while keeping the logos upright.
pausedbooleanfalseExternal pause override. The built-in pause button is disabled while true.
defaultSelectedIdstringFirst itemInitial selection. Falls back to the first item if that id is absent or removed.
onItemSelect(id: string) => voidundefinedCalled when a badge is activated. A supplied href also navigates through a native link.
classNamestring''Additional classes. Style the surface, hub and ring CSS variables to match your brand. Badge sizes are specified at a 560px stage and scale with it, with a 36px minimum target; valid sizes are 44–80 outer and 44–64 inner.
04

Motion & accessibility

Considered by default.

The center remains fixed while the two paths rotate at different speeds. Each badge counter-rotates to keep its artwork upright. Hover or focus a badge to hold the paths still, then click, Enter or Space to select it. Native links retain their normal behavior. Pause, reduced motion, offscreen state and hidden documents stop the orbit without resetting its phase. Logo artwork and the center should contain no nested controls.

Use semantic content and meaningful labels in your composition. Check contrast and keyboard behavior with your own styles and content.