# Floating Elements Infinite Demo

> Demo showing infinite floating elements component.

A shadcn/ui block from the [@systaliko-ui](https://systaliko-ui.vercel.app) registry, listed on [shadcn.exchange](https://shadcn.exchange/r/systaliko-ui/floating-elements-infinite-demo).

- Page, with a live preview: https://shadcn.exchange/r/systaliko-ui/floating-elements-infinite-demo
- Screenshot: https://abzjhwgwpdpz7ua5.public.blob.vercel-storage.com/shots/systaliko-ui/floating-elements-infinite-demo-light-96233ff28c45e175.png
- Registry item: https://systaliko-ui.vercel.app/r/floating-elements-infinite-demo.json
- Listed: 2026-10-13, source last changed 2026-10-13

## Install

```bash
npx shadcn@latest add https://systaliko-ui.vercel.app/r/floating-elements-infinite-demo.json
```

Run it in a project that has shadcn/ui set up. It adds the files below and installs what they depend on.

## Dependencies

- Registry items: `https://systaliko-ui.vercel.app/r/floating-elements`

## Files

### `registry/demo/blocks/floating-elements-infinite/index.tsx`

```tsx
'use client';

import {
  FloatingElements,
  InfiniteFloatingItem,
} from '@/components/systaliko-ui/blocks/floating-elements';
import { Label } from '@/components/systaliko-ui/shadcn/label';
import { Slider } from '@/components/systaliko-ui/shadcn/slider';
import { useState } from 'react';

const ELEMENTS = [
  { id: 'inf-1', className: 'bg-violet-500 top-[10%] left-[15%]', phase: 0 },
  {
    id: 'inf-2',
    className: 'bg-emerald-500 bottom-[12%] left-[25%]',
    phase: Math.PI / 3,
  },
  {
    id: 'inf-3',
    className: 'bg-yellow-500 top-[40%] right-[12%]',
    phase: Math.PI,
  },
  {
    id: 'inf-4',
    className: 'bg-rose-500 top-[15%] right-[30%]',
    phase: Math.PI / 2,
  },
  {
    id: 'inf-5',
    className: 'bg-sky-500 bottom-[20%] right-[20%]',
    phase: (Math.PI * 5) / 4,
  },
  {
    id: 'inf-6',
    className: 'bg-orange-500 top-[60%] left-[8%]',
    phase: (Math.PI * 3) / 2,
  },
];

export function FloatingElementsInfiniteDemo() {
  const [depth, setDepth] = useState(0.03);
  const [amplitude, setAmplitude] = useState(12);
  const [speed, setSpeed] = useState(1);
  const [stiffness, setStiffness] = useState(80);
  const [damping, setDamping] = useState(20);

  return (
    <div className="flex h-screen flex-col">
      <div className="border-b bg-background/80 backdrop-blur-sm p-4 z-10">
        <div className="flex flex-wrap items-end gap-6">
          <div className="flex flex-col gap-2 min-w-[160px]">
            <Label className="text-sm font-medium">
              Depth: {depth.toFixed(2)}
            </Label>
            <Slider
              value={[depth * 100]}
              onValueChange={([v]) => setDepth(v / 100)}
              min={0}
              max={15}
              step={1}
            />
          </div>

          <div className="flex flex-col gap-2 min-w-[160px]">
            <Label className="text-sm font-medium">
              Amplitude: {amplitude}px
            </Label>
            <Slider
              value={[amplitude]}
              onValueChange={([v]) => setAmplitude(v)}
              min={1}
              max={60}
              step={1}
            />
          </div>

          <div className="flex flex-col gap-2 min-w-[160px]">
            <Label className="text-sm font-medium">
              Speed: {speed.toFixed(1)}
            </Label>
            <Slider
              value={[speed * 10]}
              onValueChange={([v]) => setSpeed(v / 10)}
              min={1}
              max={40}
              step={1}
            />
          </div>

          <div className="flex flex-col gap-2 min-w-[160px]">
            <Label className="text-sm font-medium">
              Stiffness: {stiffness}
            </Label>
            <Slider
              value={[stiffness]}
              onValueChange={([v]) => setStiffness(v)}
              min={10}
              max={300}
              step={10}
            />
          </div>

          <div className="flex flex-col gap-2 min-w-[160px]">
            <Label className="text-sm font-medium">Damping: {damping}</Label>
            <Slider
              value={[damping]}
              onValueChange={([v]) => setDamping(v)}
              min={1}
              max={60}
              step={1}
            />
          </div>
        </div>
      </div>

      <FloatingElements className="bg-secondary flex-1">
        {ELEMENTS.map((el) => (
          <InfiniteFloatingItem
            className={`absolute rounded shadow-[4px_4px_#000] size-20 ${el.className}`}
            key={el.id}
            depth={depth}
            amplitude={amplitude}
            speed={speed}
            phase={el.phase}
            stiffness={stiffness}
            damping={damping}
          />
        ))}
      </FloatingElements>
    </div>
  );
}
```
