Navigation Fancy Stable
Dock
Icon dock where each item magnifies smoothly as the cursor approaches, sharing pointer position via Svelte context so every DockIcon scales by proximity within a configurable magnification and distance range
Preview
svelte
<script lang="ts">
import { Dock, DockIcon, DockSeparator } from "fancy-ui-svelte";
</script>
<Dock>
<DockIcon>
<svg class="size-full" viewBox="0 0 24 24" fill="currentColor">
<path
d="M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z"
/>
</svg>
</DockIcon>
<DockSeparator />
<DockIcon>
<svg class="size-full" viewBox="0 0 24 24" fill="currentColor">
<path
d="M22.288 21h-20.576c-.945 0-1.712-.767-1.712-1.712v-13.576c0-.945.767-1.712 1.712-1.712h20.576c.945 0 1.712.767 1.712 1.712v13.576c0 .945-.767 1.712-1.712 1.712zm-10.288-6.086l-9.342-6.483-.02 11.569h18.684v-11.569l-9.322 6.483zm8.869-9.914h-17.789l8.92 6.229 8.869-6.229z"
/>
</svg>
</DockIcon>
<DockIcon>
<svg class="size-full" viewBox="0 0 24 24" fill="currentColor">
<path
d="M19 0h-14c-2.761 0-5 2.239-5 5v14c0 2.761 2.239 5 5 5h14c2.762 0 5-2.239 5-5v-14c0-2.761-2.238-5-5-5zm-11 19h-3v-11h3v11zm-1.5-12.268c-.966 0-1.75-.79-1.75-1.764s.784-1.764 1.75-1.764 1.75.79 1.75 1.764-.783 1.764-1.75 1.764zm13.5 12.268h-3v-5.604c0-3.368-4-3.113-4 0v5.604h-3v-11h3v1.765c1.396-2.586 7-2.777 7 2.476v6.759z"
/>
</svg>
</DockIcon>
</Dock>Installation
pnpm add fancy-ui-svelte
import { Dock } from 'fancy-ui-svelte'
Usage
svelte
<script lang="ts">
import { Dock } from 'fancy-ui-svelte';
</script>
<Dock />Examples
Basic Usage
svelte
<script lang="ts">
import { Dock, DockIcon, DockSeparator } from "$lib/fancy-ui/dock";
</script>
<Dock>
<DockIcon>
<svg class="size-full" viewBox="0 0 24 24" fill="currentColor">
<path
d="M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z"
/>
</svg>
</DockIcon>
<DockSeparator />
<DockIcon>
<svg class="size-full" viewBox="0 0 24 24" fill="currentColor">
<path
d="M22.288 21h-20.576c-.945 0-1.712-.767-1.712-1.712v-13.576c0-.945.767-1.712 1.712-1.712h20.576c.945 0 1.712.767 1.712 1.712v13.576c0 .945-.767 1.712-1.712 1.712zm-10.288-6.086l-9.342-6.483-.02 11.569h18.684v-11.569l-9.322 6.483zm8.869-9.914h-17.789l8.92 6.229 8.869-6.229z"
/>
</svg>
</DockIcon>
<DockIcon>
<svg class="size-full" viewBox="0 0 24 24" fill="currentColor">
<path
d="M19 0h-14c-2.761 0-5 2.239-5 5v14c0 2.761 2.239 5 5 5h14c2.762 0 5-2.239 5-5v-14c0-2.761-2.238-5-5-5zm-11 19h-3v-11h3v11zm-1.5-12.268c-.966 0-1.75-.79-1.75-1.764s.784-1.764 1.75-1.764 1.75.79 1.75 1.764-.783 1.764-1.75 1.764zm13.5 12.268h-3v-5.604c0-3.368-4-3.113-4 0v5.604h-3v-11h3v1.765c1.396-2.586 7-2.777 7 2.476v6.759z"
/>
</svg>
</DockIcon>
</Dock>Direction
Change dock orientation.
svelte
<script lang="ts">
import { Dock, DockIcon } from "$lib/fancy-ui/dock";
import type { Direction } from "$lib/fancy-ui/dock";
</script>
<div class="space-y-6">
{#each ["top", "middle", "bottom"] as dir (dir)}
<div>
<p class="text-muted-foreground mb-2 text-center text-sm">direction="{dir}"</p>
<div class="flex justify-center">
<Dock direction={dir as Direction} class="h-[80px]">
<DockIcon>
<div class="size-full rounded-full bg-gradient-to-br from-pink-500 to-purple-500"></div>
</DockIcon>
<DockIcon>
<div class="size-full rounded-full bg-gradient-to-br from-blue-500 to-cyan-500"></div>
</DockIcon>
<DockIcon>
<div
class="size-full rounded-full bg-gradient-to-br from-green-500 to-emerald-500"
></div>
</DockIcon>
</Dock>
</div>
</div>
{/each}
</div>Props
| Prop | Type | Default | Description |
|---|---|---|---|
magnification | number | 60 | Maximum icon size in pixels when magnified |
distance | number | 140 | Distance in pixels over which magnification takes effect |
direction | "top" | "middle" | "bottom" | "middle" | Vertical alignment of icons relative to the dock bar |
orientation | "horizontal" | "vertical" | "horizontal" | Dock orientation |
Slots
| Slot | Description |
|---|---|
children | DockIcon and DockSeparator elements |
Links
Related components
Br
Breadcrumb
A data-driven trail of links with automatic truncation, a decorative separator, and the current page marked for assistive tech.
Navigation Stable
Co
CommandMenu
A modal search palette over a flat vocabulary of items — grouped results, diacritic-insensitive filtering, match highlighting, and full keyboard navigation with focus that never leaves the search field.
Navigation Stable
Co
ContextMenu
A menu that opens at the pointer on right-click, sharing DropdownMenu's item, submenu and keyboard behaviour but anchored to a virtual point instead of a trigger element.
Navigation Stable