tween
ComponentsTemplatesShowcaseContact

Command Palette

Search for a command to run...

Getting Started
  • Introduction
  • Installation
  • StoryNew
Guides
  • Motion Principles
  • Scroll and Smooth Scroll
  • Performance and Accessibility
Scroll Animations
  • Sticky Cards Scroll
  • Rise Fan Cards Scroll
  • Rotate Stack Scroll
  • Doodle Lens ScrollNew
  • Slit Open Hero ScrollNew
  • Logo Mask Zoom ScrollNew
  • ASCII Dissolve ScrollNew
  • Lottie Flight ScrollNew
  • Inline Icon Text ScrollNew
  • Starfield ScrollNew
  • Name Swap ScrollNew
  • Spotlight Gallery HeroNew
  • Slit Rotate Hero ScrollNew
  • Stroke Cover ScrollNew
  • Stroke Rows ScrollNew
Text Animations
  • Text Skew Reveal
  • Block Text Reveal
Hover & Cursor
  • Image Trail Cursor
  • Cursor Depth Logo
  • Physics Tag Drop
  • Elastic Card ListNew
  • Magnetic Cards SpringNew
Sliders & Carousels
  • Wheel Fullscreen Carousel
  • Ripple Displacement Slider
  • Three.js Blend Slider
  • Stacked Deck Slider
  • Orbit Cylinder SliderNew
  • Fan Stack SliderNew
  • Exponential Strip SliderNew
  • Dual Column SliderNew
Galleries & Grids
  • Scroll Wave Gallery
Menus & Navigation
  • Shrink Page MenuNew
Preloaders & Intros
  • Floating Items RevealNew
  • Word Cycle RevealNew
  • Tile Grid LoaderNew
Page Transitions
  • Panel Assembly TransitionNew
3D & WebGL
  • Fractal Glass Hero
  • Fluid Cursor Canvas
  • Fluid Portrait Hero
  • Fluid Gradient Canvas
  • Inversion Lens HoverNew
UI Elements
  • Circular Widgets
  • Vinyl Cover
  • Image Explosion Footer
  • Accordion Image FramesNew

(Tween) — Motion registry

Animated components & full sites, one command away.

Product

  • Components
  • Templates
  • Installation
  • Guides
  • Blog
  • Contact

Categories

  • Scroll Animations
  • Text Animations
  • Hover & Cursor
  • Sliders & Carousels
  • Galleries & Grids
  • Menus & Navigation
  • Preloaders & Intros
  • Page Transitions
  • 3D & WebGL
  • UI Elements
TWEEN
ease: power2.inOut0.00s
© 2026 TweenBack to topBuilt by mohammad
  1. Docs/
  2. Components/
  3. Physics Tag Drop

Physics Tag Drop

PreviousNext

A list of service rows that elastically expand on hover while matter-js tag pills drop in and pile up at the floor.

Open in
physics-tag-drop-demo

Tableau

Tableau 1
Tableau 2
Tableau 3

Kinetic

Kinetic 1
Kinetic 2
Kinetic 3

Terrain

Terrain 1
Terrain 2
Terrain 3
components/ui/physics-tag-drop-demo.tsx
import * as React from "react"

import { PhysicsTagDrop } from "@/registry/tween/physics-tag-drop"

export function PhysicsTagDropDemo() {
  return (
    <div className="h-[600px] w-full overflow-y-auto">
      <PhysicsTagDrop style={{ "--ptd-h": "600px" } as React.CSSProperties} />
    </div>
  )
}

Installation

pnpm dlx shadcn@latest add https://tweenui.dev/r/physics-tag-drop.json

Usage

import { PhysicsTagDrop } from "@/components/ui/physics-tag-drop"
<PhysicsTagDrop
  services={[
    {
      name: "Tableau",
      tags: ["Set Design", "Still Life", "Prop Styling"],
      images: ["/sets/plinth.jpg", "/sets/arches.jpg", "/sets/hoops.jpg"],
    },
  ]}
/>

Each row sits at a collapsed height with its three images fanned and tucked behind a large display name. On mouseenter the row springs open with an elastic.out ease, the name shifts color, and the images slide up. A beat later, a per-row matter-js engine spawns a rounded "tag" pill for every label; the pills fall under gravity, bounce off the walls, and pile up on an invisible floor while a requestAnimationFrame loop syncs each DOM node's transform to its physics body. On mouseleave the tags fade out, the engine and animation loop are torn down, and the row collapses back.

Every row owns its own engine, rAF loop, and listeners, all cleaned up on unmount. On touch / no-hover devices the row toggles on tap and auto-reveals when scrolled into view. When prefers-reduced-motion: reduce is set, the physics drop and elastic springs are skipped — the row expands instantly and the tags render as a plain static list.

Props

PropTypeDefaultDescription
servicesPhysicsTagDropService[]3 servicesRows: { name, tags[], images[] }.
backgroundstring"#14120f"Section background and pill backdrop color.
classNamestring—Extra classes on the outer container.
styleReact.CSSProperties—Inline styles; set --ptd-h to cap the height.
Cursor Depth LogoElastic Card List

On This Page

InstallationUsageProps

Contribute

  • Report an issue
  • Request a feature
  • Edit this page