3D & effects
Two layers of depth. CSS 3D effects ship in @pelagic-ui/react and cost no JavaScript beyond the component. WebGL scenes live in @pelagic-ui/three: they follow the theme, pause off-screen, render a single still frame under reduced motion and fall back gracefully without WebGL. Three.js is only downloaded when a 3D scene scrolls into view.
15 components on this page. Every demo is live — change the theme in the header or flip a demo to right-to-left with its RTL button. These components are React-only for now; Vue, Svelte and Angular versions are coming.
TiltCard Link to TiltCard
A card that tilts toward the pointer with an optional glare highlight.
Starter
$0 / month
Pro
$29 / month
Team
$99 / month
Code
ReactComing to Vue, Svelte and Angular.
<TiltCard maxTilt={12}>
<h3>Pro plan</h3>
<p>$29 / month</p>
</TiltCard> FlipCard Link to FlipCard
A two-sided card flipped by a real toggle button.
Question
What does WCAG stand for?Showing: front
Code
ReactComing to Vue, Svelte and Angular.
<FlipCard height="14rem" front={<p>What is WCAG?</p>} back={<p>Web Content Accessibility Guidelines.</p>} /> CubeCarousel Link to CubeCarousel
Slides on the faces of a rotating cube. Drag or swipe to turn it.
Slide: 1 of 4
Code
ReactComing to Vue, Svelte and Angular.
<CubeCarousel label="Release highlights" slides={[
{ title: 'Charts', content: <p>15 accessible chart types</p> },
{ title: '3D', content: <p>WebGL with fallbacks</p> },
]} /> Carousel3D Link to Carousel3D
A perspective carousel in three modes — coverflow, ring and stack — with drag and swipe, dots and autoplay.
Slide: 1 of 5: Charts
Code
ReactComing to Vue, Svelte and Angular.
<Carousel3D label="Product gallery" mode="coverflow" autoplay={5000} slides={[
{ title: 'Charts', content: <ChartsCard /> },
{ title: 'Themes', content: <ThemesCard /> },
{ title: 'RTL', content: <RtlCard /> },
]} /> ParallaxLayers Link to ParallaxLayers
Layers that move at different depths with the pointer or on scroll.
Code
ReactComing to Vue, Svelte and Angular.
<ParallaxLayers layers={[
{ content: <Sky />, depth: 0.2, decorative: true },
{ content: <Hills />, depth: 0.5, decorative: true },
{ content: <h2>Explore</h2>, depth: 0.9 },
]} /> Text3D Link to Text3D
Extruded headline text built from layered shadows (alias: ExtrudedText).
Pelagic UI
بيلاجيك
Code
ReactComing to Vue, Svelte and Angular.
<Text3D as="h2" depth={8}>Pelagic UI</Text3D> Floating3DIcon Link to Floating3DIcon
A decorative floating tile for icons in heroes and empty states.
Decorative tiles — pair them with real headings.
Code
ReactComing to Vue, Svelte and Angular.
<Floating3DIcon icon="🚀" size="5rem" /> OrbitBadge Link to OrbitBadge
A decorative badge with satellites orbiting on a tilted ring.
The badge itself is decorative; this text carries the meaning.
Code
ReactComing to Vue, Svelte and Angular.
<OrbitBadge size="8rem">AA</OrbitBadge> Perspective3DStack Link to Perspective3DStack
Cards stacked in perspective that fan out on hover or when open.
- Invoice #1041
$1,200 · Paid
- Invoice #1042
$860 · Due in 5 days
- Invoice #1043
$2,450 · Overdue
Code
ReactComing to Vue, Svelte and Angular.
<Perspective3DStack label="Recent invoices" items={[<Invoice n={1} />, <Invoice n={2} />, <Invoice n={3} />]} /> Scene3D Link to Scene3D
The base of every WebGL component: bring your own Three.js setup and get theming, resizing, pausing and fallbacks.
Code
ReactComing to Vue, Svelte and Angular.
import { Scene3D } from '@pelagic-ui/three';
import { Mesh, TorusKnotGeometry, MeshStandardMaterial, DirectionalLight } from 'three';
<Scene3D label="Rotating torus knot" interactive setup={({ scene, colors }) => {
const mesh = new Mesh(new TorusKnotGeometry(0.7, 0.22, 160, 24), new MeshStandardMaterial({ color: colors.primary }));
scene.add(mesh, new DirectionalLight(0xffffff, 2));
return { tick: (dt) => { mesh.rotation.y += dt * 0.6; } };
}} /> Globe3D Link to Globe3D
A dotted globe with labelled markers and animated arcs.
Code
ReactComing to Vue, Svelte and Angular.
import { Globe3D } from '@pelagic-ui/three';
<Globe3D label="Our offices" showList
markers={[{ lat: 31.95, lng: 35.93, label: 'Amman' }, { lat: 51.5, lng: -0.12, label: 'London' }]}
arcs={[{ from: { lat: 31.95, lng: 35.93 }, to: { lat: 51.5, lng: -0.12 }, label: 'Amman → London' }]} /> ParticlesField Link to ParticlesField
An ambient drifting particle background in the theme colour.
Code
ReactComing to Vue, Svelte and Angular.
<div style={{ position: 'relative' }}>
<ParticlesField count={800} />
<h1>Hero title</h1>
</div> FloatingShapes Link to FloatingShapes
Glassy geometric shapes floating slowly — for hero backgrounds.
Code
ReactComing to Vue, Svelte and Angular.
<FloatingShapes count={6} height="20rem" /> Chart3D Link to Chart3D
A 3D bar chart with an always-available data table.
Code
ReactComing to Vue, Svelte and Angular.
<Chart3D title="Revenue by region ($M)" showTable format={(v) => '$' + v + 'M'}
data={[{ label: 'MENA', value: 12.4 }, { label: 'Europe', value: 9.1 }, { label: 'Americas', value: 7.6 }]} /> ModelViewer Link to ModelViewer
Loads and displays a glTF/GLB model with orbit controls, progress and an error state.
The demo builds a small model in your browser with GLTFExporter and loads it from a blob URL — no external file.
Code
ReactComing to Vue, Svelte and Angular.
import { ModelViewer } from '@pelagic-ui/three';
<ModelViewer src="/models/chair.glb" alt="Walnut lounge chair" autoRotate height="22rem" />