Dock
svelte-animations/dockFreeBlock
A macOS-style dock component with smooth magnification animation on hover, inspired by the macOS dock.
Install it
npx shadcn@latest add https://sv-animations.vercel.app/r/dock.jsonSource
1<script lang="ts" module>2 import type { MotionValue } from "motion-sv";34 export interface DockProps {5 class?: string;6 iconSize?: number;7 iconMagnification?: number;8 disableMagnification?: boolean;9 iconDistance?: number;10 direction?: "top" | "middle" | "bottom";11 children: Snippet;12 }1314 export interface DockContext {15 mouseX: MotionValue<number>;16 iconSize: number;17 iconMagnification: number;18 disableMagnification: boolean;19 iconDistance: number;20 }21</script>2223<script lang="ts">24 import { motion, useMotionValue } from "motion-sv";25 import { cn } from "$UTILS$";26 import type { Snippet } from "svelte";27 import { setContext } from "svelte";2829 const DEFAULT_SIZE = 40;30 const DEFAULT_MAGNIFICATION = 60;31 const DEFAULT_DISTANCE = 140;3233 let {34 class: className,35 children,36 iconSize = DEFAULT_SIZE,37 iconMagnification = DEFAULT_MAGNIFICATION,38 disableMagnification = false,39 iconDistance = DEFAULT_DISTANCE,40 direction = "middle",41 }: DockProps = $props();4243 // Use MotionValue for mouseX - this enables smooth reactive transforms44 const mouseX = useMotionValue(Infinity);4546 // Provide context to child DockIcon components47 setContext("dock", {48 mouseX,49 get iconSize() {50 return iconSize;51 },52 get iconMagnification() {53 return iconMagnification;54 },55 get disableMagnification() {56 return disableMagnification;57 },58 get iconDistance() {59 return iconDistance;60 },61 });62</script>6364<motion.div65 onmousemove={(e) => mouseX.set(e.pageX)}66 onmouseleave={() => mouseX.set(Infinity)}67 class={cn(68 "mx-auto mt-8 flex h-14 w-max items-center justify-center gap-2 rounded-2xl border p-2 backdrop-blur-md supports-backdrop-blur:bg-white/10 supports-backdrop-blur:dark:bg-black/10",69 {70 "items-start": direction === "top",71 "items-center": direction === "middle",72 "items-end": direction === "bottom",73 },74 className75 )}76>77 {@render children()}78</motion.div>
What it pulls in
npm packages
Files it writes
More from Svelte Animations
All 66 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| Animated Beamanimated-beam | Svelte Animations | Blocks | Free | 1 dep · 6 files | |
| Animated Circular Progress Baranimated-circular-progress-bar | Svelte Animations | Blocks | Free | no deps · 2 files | |
| Animated Gradient Textanimated-gradient-text | Svelte Animations | Blocks | Free | no deps · 2 files | |
| Animated Grid Patternanimated-grid-pattern | Svelte Animations | Blocks | Free | 1 dep · 2 files | |
| Animated Listanimated-list | Svelte Animations | Blocks | Free | 1 dep · 2 files | |
| Animated Shiny Textanimated-shiny-text | Svelte Animations | Blocks | Free | no deps | |
| Animated Theme Toggleranimated-theme-toggler | Svelte Animations | Blocks | Free | no deps · 2 files | |
| Arc Timelinearc-timeline | Svelte Animations | Blocks | Free | no deps · 3 files |
