Spec Registry
Help your agents use open-source better. Learn more.
Find usage specs for your project’s dependencies
- Author
- tessl
- Last updated
- Spec files
npm-svelte
Describes: npm/svelte
- Description
- Revolutionary JavaScript framework and compiler that builds web applications without runtime overhead by compiling components at build time.
- Author
- tessl
- Last updated
transitions.md docs/
1# Transitions23Built-in transition effects for element enter/exit animations with customizable parameters and easing functions.45## Capabilities67### Fade Transition89Animate element opacity for smooth appearing and disappearing effects.1011```javascript { .api }12/**13* Animates the opacity of an element from 0 to current opacity for in transitions14* and from current opacity to 0 for out transitions15* @param node - DOM element to animate16* @param params - Fade parameters17* @returns Transition configuration18*/19function fade(node: Element, params?: FadeParams): TransitionConfig;2021interface FadeParams {22/** Delay before animation starts (ms) */23delay?: number;24/** Animation duration (ms) */25duration?: number;26/** Easing function */27easing?: EasingFunction;28}2930interface TransitionConfig {31delay?: number;32duration?: number;33easing?: EasingFunction;34css?: (t: number, u: number) => string;35tick?: (t: number, u: number) => void;36}3738type EasingFunction = (t: number) => number;39```4041**Usage Examples:**4243```javascript44import { fade } from "svelte/transition";4546// Basic fade47<div transition:fade>48Content that fades in and out49</div>5051// Custom fade parameters52<div transition:fade={{ duration: 1000, delay: 500 }}>53Slow fade with delay54</div>5556// Separate in/out transitions57<div in:fade={{ duration: 200 }} out:fade={{ duration: 800 }}>58Quick fade in, slow fade out59</div>60```6162### Fly Transition6364Animate element position and opacity for sliding effects.6566```javascript { .api }67/**68* Animates x/y positions and opacity. In transitions animate from provided values69* to element's default values. Out transitions animate from default to provided values.70* @param node - DOM element to animate71* @param params - Fly parameters72* @returns Transition configuration73*/74function fly(node: Element, params?: FlyParams): TransitionConfig;7576interface FlyParams {77/** Delay before animation starts (ms) */78delay?: number;79/** Animation duration (ms) */80duration?: number;81/** Easing function */82easing?: EasingFunction;83/** Horizontal offset (px or string with unit) */84x?: number | string;85/** Vertical offset (px or string with unit) */86y?: number | string;87/** Target opacity (0-1) */88opacity?: number;89}90```9192**Usage Examples:**9394```javascript95import { fly } from "svelte/transition";96import { cubicOut } from "svelte/easing";9798// Slide in from left99<div transition:fly={{ x: -200, duration: 300 }}>100Slides from left101</div>102103// Slide in from top with opacity104<div transition:fly={{ y: -100, opacity: 0, duration: 500, easing: cubicOut }}>105Slides from top with fade106</div>107108// Slide out to bottom right109<div out:fly={{ x: 200, y: 200, duration: 400 }}>110Slides to bottom right on exit111</div>112113// Using string units114<div transition:fly={{ x: '50%', y: '2rem' }}>115Using relative units116</div>117```118119### Slide Transition120121Animate element height or width for expanding/collapsing effects.122123```javascript { .api }124/**125* Slides an element in and out by animating height or width126* @param node - DOM element to animate127* @param params - Slide parameters128* @returns Transition configuration129*/130function slide(node: Element, params?: SlideParams): TransitionConfig;131132interface SlideParams {133/** Delay before animation starts (ms) */134delay?: number;135/** Animation duration (ms) */136duration?: number;137/** Easing function */138easing?: EasingFunction;139/** Animation axis: 'x' or 'y' */140axis?: 'x' | 'y';141}142```143144**Usage Examples:**145146```javascript147import { slide } from "svelte/transition";148149// Vertical slide (default)150<div transition:slide>151Content that slides up/down152</div>153154// Horizontal slide155<div transition:slide={{ axis: 'x', duration: 400 }}>156Content that slides left/right157</div>158159// Accordion panel160{#if isOpen}161<div transition:slide={{ duration: 300 }}>162<p>Accordion content that slides open and closed</p>163</div>164{/if}165```166167### Scale Transition168169Animate element size and opacity for zoom effects.170171```javascript { .api }172/**173* Animates opacity and scale. In transitions animate from provided values to defaults.174* Out transitions animate from defaults to provided values.175* @param node - DOM element to animate176* @param params - Scale parameters177* @returns Transition configuration178*/179function scale(node: Element, params?: ScaleParams): TransitionConfig;180181interface ScaleParams {182/** Delay before animation starts (ms) */183delay?: number;184/** Animation duration (ms) */185duration?: number;186/** Easing function */187easing?: EasingFunction;188/** Starting scale value (0-1+) */189start?: number;190/** Target opacity (0-1) */191opacity?: number;192}193```194195**Usage Examples:**196197```javascript198import { scale } from "svelte/transition";199200// Basic scale transition201<div transition:scale>202Scales from/to center203</div>204205// Custom scale parameters206<div transition:scale={{ start: 0.5, duration: 200 }}>207Starts at 50% scale208</div>209210// Modal popup effect211<div transition:scale={{ start: 0.8, opacity: 0, duration: 150 }}>212Modal content213</div>214```215216### Blur Transition217218Animate blur filter alongside opacity for depth effects.219220```javascript { .api }221/**222* Animates a blur filter alongside element opacity223* @param node - DOM element to animate224* @param params - Blur parameters225* @returns Transition configuration226*/227function blur(node: Element, params?: BlurParams): TransitionConfig;228229interface BlurParams {230/** Delay before animation starts (ms) */231delay?: number;232/** Animation duration (ms) */233duration?: number;234/** Easing function */235easing?: EasingFunction;236/** Blur amount (number or string with unit) */237amount?: number | string;238/** Target opacity (0-1) */239opacity?: number;240}241```242243**Usage Examples:**244245```javascript246import { blur } from "svelte/transition";247248// Basic blur transition249<div transition:blur>250Content with blur effect251</div>252253// Custom blur amount254<div transition:blur={{ amount: 10, duration: 400 }}>255Heavy blur effect256</div>257258// Blur with opacity259<div transition:blur={{ amount: '5px', opacity: 0.5 }}>260Partial blur and fade261</div>262```263264### Draw Transition265266Animate SVG path strokes for drawing effects.267268```javascript { .api }269/**270* Animates SVG element stroke like drawing. Only works with elements that have getTotalLength method.271* In transitions draw from invisible to visible. Out transitions erase from visible to invisible.272* @param node - SVG element with getTotalLength method273* @param params - Draw parameters274* @returns Transition configuration275*/276function draw(node: SVGElement & { getTotalLength(): number }, params?: DrawParams): TransitionConfig;277278interface DrawParams {279/** Delay before animation starts (ms) */280delay?: number;281/** Drawing speed (units per ms) */282speed?: number;283/** Animation duration (ms) or function based on path length */284duration?: number | ((len: number) => number);285/** Easing function */286easing?: EasingFunction;287}288```289290**Usage Examples:**291292```javascript293import { draw } from "svelte/transition";294295// Basic path drawing296<svg>297<path d="M 10 10 L 100 100" transition:draw />298</svg>299300// Custom drawing speed301<svg>302<path d="M 10 10 C 50 5, 80 30, 100 50" transition:draw={{ speed: 2 }} />303</svg>304305// Duration based on path length306<svg>307<polyline308points="10,10 50,25 90,10 120,40"309transition:draw={{ duration: len => len * 5 }}310/>311</svg>312313// Signature effect314<svg viewBox="0 0 400 200">315<path316d="M 50 100 Q 100 50, 150 100 T 250 100 Q 300 80, 350 120"317stroke="blue"318fill="none"319stroke-width="2"320transition:draw={{ duration: 2000 }}321/>322</svg>323```324325### Crossfade Transition326327Create coordinated transitions between related elements.328329```javascript { .api }330/**331* Creates a pair of transitions for elements that transform into each other.332* When an element is 'sent', it looks for a corresponding 'received' element.333* @param params - Crossfade configuration with optional fallback334* @returns Tuple of [send, receive] transition functions335*/336function crossfade(params: CrossfadeParams & {337fallback?: (node: Element, params: CrossfadeParams, intro: boolean) => TransitionConfig;338}): [339(node: any, params: CrossfadeParams & { key: any }) => () => TransitionConfig,340(node: any, params: CrossfadeParams & { key: any }) => () => TransitionConfig341];342343interface CrossfadeParams {344/** Delay before animation starts (ms) */345delay?: number;346/** Animation duration (ms) or function based on distance */347duration?: number | ((len: number) => number);348/** Easing function */349easing?: EasingFunction;350}351```352353**Usage Examples:**354355```javascript356import { crossfade } from "svelte/transition";357import { quintOut } from "svelte/easing";358359const [send, receive] = crossfade({360duration: d => Math.sqrt(d * 200),361fallback(node, params) {362const style = getComputedStyle(node);363const transform = style.transform === 'none' ? '' : style.transform;364365return {366duration: 600,367easing: quintOut,368css: t => `369transform: ${transform} scale(${t});370opacity: ${t}371`372};373}374});375376// Todo list with crossfade between states377{#each todos as todo (todo.id)}378{#if todo.done}379<div in:receive={{ key: todo.id }} out:send={{ key: todo.id }}>380✓ {todo.text}381</div>382{:else}383<div in:receive={{ key: todo.id }} out:send={{ key: todo.id }}>384○ {todo.text}385</div>386{/if}387{/each}388```389390## Custom Transitions391392Create your own transition functions for specialized effects.393394```javascript { .api }395/**396* Custom transition function signature397* @param node - DOM element being transitioned398* @param params - Transition parameters399* @returns Transition configuration400*/401type TransitionFunction = (node: Element, params?: any) => TransitionConfig;402```403404**Custom Transition Examples:**405406```javascript407// Typewriter effect408function typewriter(node, { speed = 1 }) {409const valid = node.childNodes.length === 1 && node.childNodes[0].nodeType === Node.TEXT_NODE;410411if (!valid) {412throw new Error('Typewriter transition only works on elements with a single text node child');413}414415const text = node.textContent;416const duration = text.length / (speed * 0.01);417418return {419duration,420tick: t => {421const i = Math.trunc(text.length * t);422node.textContent = text.slice(0, i);423}424};425}426427// Spin transition428function spin(node, { duration = 1000 }) {429return {430duration,431css: t => {432const eased = cubicInOut(t);433return `434transform: scale(${eased}) rotate(${eased * 1080}deg);435opacity: ${eased}436`;437}438};439}440441// Usage in template442<p transition:typewriter={{ speed: 2 }}>443This text will be typed out444</p>445446<div transition:spin={{ duration: 500 }}>447Spinning content448</div>449```450451## Transition Coordination452453Coordinate multiple transitions for complex effects:454455```javascript456import { fade, fly, scale } from "svelte/transition";457458// Staggered list animations459{#each items as item, i (item.id)}460<div transition:fly={{ y: 50, delay: i * 100 }}>461{item.name}462</div>463{/each}464465// Layered effects466<div class="modal-backdrop" transition:fade>467<div class="modal" transition:scale={{ start: 0.9 }}>468<div class="modal-content" transition:fly={{ y: -50, delay: 150 }}>469Modal content470</div>471</div>472</div>473```