---
name: "@ericts"
slug: "ericts"
description: "Motion-focused shadcn-compatible components, hooks, and blocks for polished React interfaces."
category: "Animated components"
tags: ["animation", "auth", "blocks", "buttons", "cards", "forms", "hooks", "maps", "navigation", "overlays"]
framework: "react"
license: "MIT"
author: "EricTsai83"
website: "https://ui.ericts.com"
github: "https://github.com/EricTsai83/ericts-ui"
registry: "https://ui.ericts.com/r/registry.json"
pro: false
pro_url: null
github_stars: 3
component_count: 28
generated_at: "2026-07-28T08:00:50.948Z"
---

# @ericts

Motion-focused shadcn-compatible components, hooks, and blocks for polished React interfaces.

## Links

- Website: https://ui.ericts.com
- GitHub: https://github.com/EricTsai83/ericts-ui
- Registry JSON: https://ui.ericts.com/r/registry.json
- Directory page: https://sh4dcn.vercel.app/registry/ericts
- This file: https://sh4dcn.vercel.app/md/ericts.md

## Install

```sh
# add the whole registry (shadcn CLI)
npx shadcn@latest add https://ui.ericts.com/r/registry.json
pnpm dlx shadcn@latest add https://ui.ericts.com/r/registry.json
bunx shadcn@latest add https://ui.ericts.com/r/registry.json
# clone the source repo
git clone https://github.com/EricTsai83/ericts-ui.git
# fetch the raw registry index
curl -s https://ui.ericts.com/r/registry.json
```

## Components (28)

| name | type | description | install |
| --- | --- | --- | --- |
| smooth-height | registry:ui | A Motion-powered layout primitive that observes content size and animates height changes. | `npx shadcn@latest add https://ui.ericts.com/r/smooth-height.json` |
| copy-button | registry:ui | A shadcn Button-based clipboard control with animated copy and success states. | `npx shadcn@latest add https://ui.ericts.com/r/copy-button.json` |
| status-button | registry:ui | A shadcn Button-based action that transitions through idle, loading, and success states. | `npx shadcn@latest add https://ui.ericts.com/r/status-button.json` |
| status-badge | registry:ui | A compact animated badge for status labels with icon and text slot transitions. | `npx shadcn@latest add https://ui.ericts.com/r/status-badge.json` |
| floating-select | registry:ui | A single-button floating select that expands into an animated option list. | `npx shadcn@latest add https://ui.ericts.com/r/floating-select.json` |
| expandable-toolbar | registry:ui | A controlled or uncontrolled toolbar primitive that measures its action slot and expands from either side. | `npx shadcn@latest add https://ui.ericts.com/r/expandable-toolbar.json` |
| check-animation | registry:ui | A pure SVG checkmark animation that draws a square or circle before the check. | `npx shadcn@latest add https://ui.ericts.com/r/check-animation.json` |
| jitter-animation | registry:ui | A jitter animation primitive plus a ready-made vibration icon. | `npx shadcn@latest add https://ui.ericts.com/r/jitter-animation.json` |
| squeeze-animation | registry:ui | A squeeze animation primitive plus a ready-made SVG card icon. | `npx shadcn@latest add https://ui.ericts.com/r/squeeze-animation.json` |
| heartbeat-animation | registry:ui | A Motion-powered heartbeat primitive with a projected shadow layer and reduced-motion support. | `npx shadcn@latest add https://ui.ericts.com/r/heartbeat-animation.json` |
| projected-shadow-animation | registry:ui | A CSS-powered primitive that layers an element with projected and contact shadows, then gathers them on hover or active state. | `npx shadcn@latest add https://ui.ericts.com/r/projected-shadow-animation.json` |
| otp-input | registry:ui | A fixed-slot one-time passcode input with paste, autofill, error shake, and animated success feedback. | `npx shadcn@latest add https://ui.ericts.com/r/otp-input.json` |
| highlight-tabs | registry:ui | A Motion-powered tab list with a shared highlight indicator and keyboard navigation. | `npx shadcn@latest add https://ui.ericts.com/r/highlight-tabs.json` |
| expanding-segmented-tabs | registry:ui | A Motion-powered segmented tab list for switching modes or views, with an active tab that expands from icon-only into a label. | `npx shadcn@latest add https://ui.ericts.com/r/expanding-segmented-tabs.json` |
| expandable-tabs | registry:ui | A DynamicIsland-style toolbar whose icon tabs expand into actionable menu or content panels, with full keyboard and ARIA support. | `npx shadcn@latest add https://ui.ericts.com/r/expandable-tabs.json` |
| expanding-button | registry:ui | A compact icon button that morphs — growing in width and height from its corner — into a floating panel holding arbitrary content. The transformation is the po… | `npx shadcn@latest add https://ui.ericts.com/r/expanding-button.json` |
| navigation-menu | registry:ui | A Base UI navigation menu with centered popups, animated viewport sizing, and shadcn-style composition. | `npx shadcn@latest add https://ui.ericts.com/r/navigation-menu.json` |
| text-morph | registry:ui | A Motion-powered text primitive that morphs matching characters between string updates. | `npx shadcn@latest add https://ui.ericts.com/r/text-morph.json` |
| expandable-modal | registry:ui | A shared-layout dialog that expands list items into an accessible detail view. | `npx shadcn@latest add https://ui.ericts.com/r/expandable-modal.json` |
| context-cursor | registry:ui | A scoped custom cursor for pointer-rich surfaces where each target can register its own label, icon, and interaction intent. | `npx shadcn@latest add https://ui.ericts.com/r/context-cursor.json` |
| feedback-popover | registry:ui | A Motion-powered feedback popover that expands from a trigger, supports keyboard submission, and confirms receipt inline. | `npx shadcn@latest add https://ui.ericts.com/r/feedback-popover.json` |
| multi-step | registry:ui | A Motion-powered multi-step container that slides between steps and animates height changes. | `npx shadcn@latest add https://ui.ericts.com/r/multi-step.json` |
| adaptive-drawer | registry:ui | A shadcn Drawer that measures panel content and animates height changes. | `npx shadcn@latest add https://ui.ericts.com/r/adaptive-drawer.json` |
| staggered-entrance | registry:ui | A CSS-powered staggered entrance primitive for lists, cards, steps, rows, and search results. | `npx shadcn@latest add https://ui.ericts.com/r/staggered-entrance.json` |
| use-reduced-motion | registry:hook | A client-safe React hook for reading prefers-reduced-motion and reacting to preference changes. | `npx shadcn@latest add https://ui.ericts.com/r/use-reduced-motion.json` |
| use-element-height | registry:hook | A client-safe React hook that measures an element's height with ResizeObserver so a container can animate between content heights. | `npx shadcn@latest add https://ui.ericts.com/r/use-element-height.json` |
| use-element-size-map | registry:hook | A client-safe React hook that measures multiple keyed element sizes with ResizeObserver so animated shells can morph to active content. | `npx shadcn@latest add https://ui.ericts.com/r/use-element-size-map.json` |
| use-scroll-anchor | registry:hook | A client-safe React hook that parks a selected item at a fixed anchor point in a scroll container, with a configurable easing and duration — the click-to-scrol… | `npx shadcn@latest add https://ui.ericts.com/r/use-scroll-anchor.json` |

## For AI agents

```text
You are adding components from @ericts to a shadcn-compatible project.
1. Read this file (https://sh4dcn.vercel.app/md/ericts.md) for the component list.
2. Fetch the machine-readable index: https://ui.ericts.com/r/registry.json
3. Install a single component with its install command from the table above.
4. Full structured record: https://sh4dcn.vercel.app/json (library slug: ericts).
```
