Feedback Fancy Stable

StatusMorph

A 1em SVG status icon that morphs between idle, loading, success, and error, closing its spinning ring into a drawn check or cross with a portalled live region announcing each state

Preview

Installation

pnpm add fancy-ui-svelte
import { StatusMorph } from 'fancy-ui-svelte'

Usage

svelte
<script lang="ts">
  import { StatusMorph } from 'fancy-ui-svelte';
</script>

<StatusMorph />

Examples

Basic Usage

Standalone

The full ring → check/cross morph, outside the Button composition.

Semantic Tone

tone="semantic" reads the shared status colors.

Props

PropTypeDefaultDescription
state "idle" | "loading" | "success" | "error""idle"Current state, two-way bound. The component only ever writes it back to "idle" itself, when resetAfter fires — every other write is the caller's, and is always honoured
resetAfter number1800Milliseconds until an automatic reset to "idle" after "success" or "error". 0 disables the timer entirely (manual reset only)
labels { loading?: string; success?: string; error?: string }{ loading: "Loading", success: "Done", error: "Failed" }Live-region text per state; unset keys fall back to the defaults
tone "current" | "semantic""current""current" paints every glyph in currentColor; "semantic" reads the shared --ft-status-running/-done/-error vocabulary instead
haptic booleanfalseBest-effort tactile feedback (the success/error haptic patterns) on entering those states; silently a no-op wherever the Vibration API is unsupported or refused
class string-Additional CSS classes
ref HTMLSpanElement | nullnullBindable reference to the root element

Slots

SlotDescription
idleCustom idle content, rendered in the same calc(1em + 1px) footprint instead of the default transparent scaffold, so swapping to it never shifts layout