Skip to content
Shiny.Net.HttpServer v1 - A lightweight feature rich HTTP Server - Tunnels, Websockets, AOT, ASPNET Featureset, & Works EVERYWHERE!Let me see!

Presets

A preset is motion that does not need to know what it is animating. Every one of them works on a built-in icon, on your own path data, and on a MotionIconDefinition you assembled yourself.

<shiny:MotionIconView Icon="star" Motion="Tada" Trigger="Hover" />
<shiny:MotionIconView PathData="M12 2 3 20h18z" Motion="Pop" Trigger="Press" />
<MotionIcon Icon="star" Motion="MotionPreset.Tada" />
Preset Motion
Default The motion drawn for this icon, falling back to Pulse for artwork that has none.
None Nothing moves. Useful for pinning an icon to a static state.
Pulse Swells and settles.
Beat A double thump, on the rhythm of a heartbeat.
Spin One full turn.
Shake Side to side.
Wobble Rocks back and forth, damping out.
Bounce Hops, landing with a bounce.
Float Drifts gently up and down.
Pop Dips, springs past its resting size, settles.
Tada Grows while wiggling — the “look at me” one.
Flip Turns over horizontally.
Swing Swings from its top edge, like something hanging.
Blink Fades out and back.
Draw Draws each stroke on in turn, then holds.
Nudge Slides right and returns — a directional hint.
Jiggle Short, sharp rotations.

Default is not a preset so much as a fallback chain

Section titled “Default is not a preset so much as a fallback chain”

Default asks the icon for its own motion first. That is why Icon="bell" rings rather than merely pulsing, and why the same property on a bare PathData glyph still does something sensible — it lands on Pulse.

Set Motion explicitly whenever you want the icon to move the same way as the ones around it rather than expressing what it means.

Every other preset drives the icon as a whole, which is exactly why they work on unknown artwork. Draw has to reach into the parts, because drawing a multi-stroke icon on all at once looks like a mistake rather than an effect — so it staggers them, giving each part its own window in the cycle.

Parts that are stroked are trimmed on; parts that are filled are faded in, because trimming a filled shape would simply pop it into existence at the end of its window.

Duration overrides the length of one cycle without touching the keys, since offsets are normalised:

<shiny:MotionIconView Icon="loader" Motion="Spin" Duration="0:0:0.6" Trigger="Loop" />

Speed is a multiplier over the top of that. On MAUI a negative Speed runs the animation backwards.

On the web, retiming costs nothing extra: duration and repeat count are passed as CSS custom properties rather than baked into the generated stylesheet, so the same motion at two different speeds compiles to one stylesheet shared by both instances. Adding an Interval does produce a different one, because a resting gap genuinely changes the keys.