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. Shrink Page Menu

Shrink Page Menu

PreviousNext

A fullscreen menu where the page clips down to its centre point while scaling to half size, and the menu behind it flies forward out of z-depth and un-blurs.

Open in
shrink-page-menu-demo
Ostrand Yard
HullsHullsRefitsRefitsCharterCharter
VisitVisit
PressPress
PrivacyPrivacy

© 2026 Ostrand Yard

Laid down at

Brekka Slip

Powered by Tween

Every hull starts on the loft floor, drawn full size in chalk, long before a single plank of larch is steamed, bent and fastened to the frames.

Varnished planking along the side of a wooden hull, just above the waterline

Each plank is spiled by hand, every seam caulked with cotton and pitch, every bronze fastening countersunk and plugged, so the topsides read as one unbroken sheen of varnish the day she meets the water.

A cream wooden yacht bow catching golden-hour light, mirrored in still harbour water

From lofted lines to a finished boat riding her mooring at dusk, the yard is where sheer, stance and balance resolve into a shape that sails.

A wooden boat is only ever as honest as the hands that built her, plank by plank, season after season, with nothing hidden under paint.

components/ui/shrink-page-menu-demo.tsx
import { ShrinkPageMenu } from "@/registry/tween/shrink-page-menu"

export function ShrinkPageMenuDemo() {
  return (
    <div className="w-full">
      <ShrinkPageMenu />
    </div>
  )
}

Installation

pnpm dlx shadcn@latest add https://tweenui.dev/r/shrink-page-menu.json

Usage

import { ShrinkPageMenu } from "@/components/ui/shrink-page-menu"
<ShrinkPageMenu
  logo="Ostrand Yard"
  links={[{ label: "Hulls" }, { label: "Refits" }, { label: "Charter" }]}
  secondaryLinks={[{ label: "Visit" }, { label: "Privacy" }]}
  content={[
    {
      type: "text",
      text: "Every hull starts on the loft floor, drawn in chalk.",
    },
    {
      type: "image",
      src: "https://images.unsplash.com/photo-1567703956367-a0ec1fcb883e?q=80&w=1920&h=1080&fit=crop&crop=center&auto=format",
      alt: "Varnished planking along a wooden hull",
    },
  ]}
/>

How it works

  • The page is its own scroll container layered on top of the menu. Opening the menu animates its clip-path from the full rectangle to a single point at the centre while it scales to 0.5, so the page collapses inward.
  • The menu content starts at z: 350 inside a perspective: 1000px parent, blurred and transparent. It moves back to z: 0, un-blurs and fades in, starting 0.2s after the page begins to shrink.
  • Every link is rendered twice, an original and a clone stacked below it. SplitText splits both into characters; on hover the original and clone characters are interleaved and rolled up together with a 0.2s stagger, and roll back from the end on leave.
  • Everything is absolute inside the component, so it works in any container. Below a 1000px container width the secondary links stack and the side footer texts hide.
  • With prefers-reduced-motion: reduce the menu jumps straight open or closed and the hover roll is off.

Props

PropTypeDefaultDescription
logostring"Ostrand Yard"Wordmark top-left.
linksShrinkPageMenuLink[]3 linksLarge serif links. Each is { label, href? }.
secondaryLinksShrinkPageMenuLink[]3 linksSmall serif links under the main ones.
footerobjectdefault texts{ left?, centerCaption?, centerMark?, right? }.
contentShrinkPageMenuBlock[]4 texts, 2 imagesPage blocks: { type: "text", text } or { type: "image", src, alt? }.
menuColorstring"#102a3c"Menu background color.
pageColorstring"#12100e"Page background color.
classNamestring—Extra classes on the outer container.
Scroll Wave GalleryFloating Items Reveal

On This Page

InstallationUsageHow it worksProps

Contribute

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