API
The whole public surface, across two entry points. This page renders from the same list a test compares against the package's real exports — if it documented something that no longer exists, the test fails.
<gf-icon>
| Input | Type | Default | |
|---|---|---|---|
iconDef | AnimatedIconDef | — | The tree-shakeable path. Wins over name. |
name | string | '' | Requires provideIconCatalog. Unknown = renders nothing, doesn't throw. |
animation | string | 'default' | Which variant to play. |
trigger | AnimatedIconTrigger | 'group' | When it animates. |
size | number | string | 24 | The SVG's side length. |
strokeWidth | number | string | 2 | Stroke thickness. |
loop | boolean | false | With one-shot easings, the cut between loops shows. |
delay | number | 0 | Extra delay (ms), ADDED on top of each track's own. |
viewOnce | boolean | true | Only with trigger="view". |
decorative | boolean | true | See Accessibility: label decides. |
label | string | — | With label, the icon is semantic. |
respectReducedMotion | boolean | true | Stays static if the system asks for it. |
Public methods on the component instance. They're what you need with trigger="manual":
play(variant?)— plays a variant; with no argument, the one from theanimationinput.reverse()— returns to the starting pose animating, not all at once. Tracks only: reversing anautoDrawwould UNdraw the icon, which is nobody's intent when the pointer leaves.cancel()— cuts everything off and puts the shapes back in their original pose.
<gf-icon-morph>
| Input | Type | Default | |
|---|---|---|---|
icon | MorphIcon | — | The binding IS the state. The first value renders static. |
size | number | string | 24 | The SVG's side length. |
strokeWidth | number | string | 2 | Stroke thickness. |
decorative | boolean | true | Same contract as <gf-icon>. |
label | string | — | With label, the icon is semantic. |
respectReducedMotion | boolean | true | Here it JUMPS to the destination instead of staying still. |
spring | SpringPreset | SpringConfig | 'smooth' | smooth / snappy / bouncy, or your own { k, c }. Only decides timing, never geometry. |
live | boolean | false | Baked (WAAPI, default) vs live (a real spring via requestAnimationFrame). Fixed after the first use — changing it later has no effect. |
Exports from glyphflow
| Symbol | What it is | |
|---|---|---|
GfIconComponent | component | The engine. Selector <gf-icon>. Standalone. |
provideGfIcons | function | Optional global config. Today just durationScale. |
GF_ICONS_CONFIG | token | The InjectionToken behind provideGfIcons, in case you want to provide it yourself. |
provideIconCatalog | function | Registers the catalog so you can use name=. Opt-in: without this, name= renders nothing. |
GF_ICON_CATALOG | token | The catalog's token. Without it, an unknown name renders empty, without throwing. |
CURATED_ICONS | constant | The 1767 with hand-authored choreography. |
GENERATED_ICONS | constant | The remaining 0 from Lucide, auto-draw only. |
ANIMATED_ICONS | constant | Curated + generated. Referencing it anchors the whole catalog in your bundle. |
ANIMATED_ICON_NAMES | constant | The catalog's keys. Same bundle cost as ANIMATED_ICONS. |
ICON_ALIASES | constant | Real Lucide renames (same glyph, new name). |
resolveIconName | function | Applies the aliases: old name → current name. |
ICON_META | constant | Per-icon metadata: curated flag, source, search tags. |
ICON_TAGS | constant | Lucide's search synonyms per icon, without the geometry. |
ICON_VARIANTS | constant | Which animation variants each icon has, without the geometry. Always starts with draw. |
SPRING_SMOOTH | constant | ζ=1.00, critical, no overshoot. The house default for going from A to B. |
SPRING_SNAPPY | constant | ζ=0.73, fast with a subtle overshoot. |
SPRING_BOUNCY | constant | ζ=0.40, a real bounce. |
MaxIconComponentdeprecated | component | The engine. Selector <gf-icon>. Standalone. Use GfIconComponent instead. |
provideMaxIconsdeprecated | function | Optional global config. Today just durationScale. Use provideGfIcons instead. |
MAX_ICONS_CONFIGdeprecated | token | The InjectionToken behind provideGfIcons, in case you want to provide it yourself. Use GF_ICONS_CONFIG instead. |
MAX_ICON_CATALOGdeprecated | token | The catalog's token. Without it, an unknown name renders empty, without throwing. Use GF_ICON_CATALOG instead. |
Types
| Type | |
|---|---|
AnimatedIconDef | An icon: geometry + its animation variants. |
IconShape | An SVG shape (path, circle, line…). |
IconChoreography | A variant: per-shape tracks + autoDraw + reverseOnLeave. |
MotionTrack | Keyframes + WAAPI options for one shape. |
AutoDraw | Auto-draw config (speed, overlap, caps). |
AnimatedIconTrigger | 'group' | 'hover' | 'tap' | 'view' | 'auto' | 'manual'. |
GfIconsConfig | What provideGfIcons receives. |
IconMeta | One catalog icon's metadata. `tags` is always populated. |
Exports from glyphflow/morph
| Symbol | What it is | |
|---|---|---|
GfIconMorphComponent | component | Selector <gf-icon-morph>. Changing [icon] triggers the transition. |
MaxIconMorphComponentdeprecated | component | Selector <gf-icon-morph>. Changing [icon] triggers the transition. Use GfIconMorphComponent instead. |
morphKeyframes | function | Computes the discrete `d` keyframes between two icons. Doesn't animate anything. |
runMorph | function | morphKeyframes + element.animate(). Returns the Animation so you can control it. |
canonicalD | function | The already-resolved `d` of an icon — what renders when there's no transition. |
morphAt | function | The exact morph pose at any t (0-1), with no animation — for scrubbers and manual control. |
createLiveMorph | function | The live engine: a spring driven by requestAnimationFrame, instead of precomputed WAAPI keyframes. |
SPRING_PRESETS | constant | smooth (ζ=1.00), snappy (ζ=0.73), and bouncy (ζ=0.40). The last two actually overshoot. |
STEPS_DEFAULT | constant | 20 discrete poses. Decided in the Lab by comparing 10/15/20/30. |
RESOLUTION_DEFAULT | constant | 64 points per subpath. |
SPRING_TAIL_DEFAULT | constant | What to do with the spring's asymptotic tail. |
correspondenceIsPoor | function | `true` when no matching algorithm would save the pair — the engine fades instead of deforming. |
QUALITY_RESIDUAL_MAX | constant | Procrustes residual threshold above which the correspondence counts as poor. |
QUALITY_FRAGMENTATION_MAX | constant | Subpath fragmentation threshold above which the correspondence counts as poor. |
maxLinearDeviation | function | How far WAAPI's linear interpolation between baked poses strays from the real polar trajectory. |
COPY_INTENT | constant | Copy to clipboard: copy becomes check, snappy, and returns to rest on its own after 2 s. |
THEME_INTENT | constant | Light to dark: sun becomes moon, with smooth — a change of mood, not a confirmation. |
PASSWORD_INTENT | constant | Reveal or hide a password: eye becomes eye-off. Active means the password is visible. |
PLAY_PAUSE_INTENT | constant | Playback transport: play becomes pause. Active means it is playing, so the button offers to pause. |
MENU_CLOSE_INTENT | constant | Navigation menu: menu becomes x. Active means open, so the button offers to close. |
EXPAND_COLLAPSE_INTENT | constant | Expand and collapse: the chevron flips. Active means expanded, so it points up. |
LIKE_INTENT | constant | Remove a "like": heart becomes heart-off (broken by a slash, not filled). Active means it's already removed. |
FAVORITE_INTENT | constant | Favorite: star becomes star-off, fragmented by the same slash. Active means no longer favorited. |
NOTIFY_INTENT | constant | Notifications: bell becomes bell-off. Active means muted. |
PIN_INTENT | constant | Pin an item: mapPin becomes mapPin-off. Active means it's no longer pinned. |
VOLUME_INTENT | constant | Sound: volume2 (two waves) becomes volume-off. Active means muted — the one of the six whose curated pair had to be extended (volumeOff↔volume2 didn't exist, only volumeOff↔volume with no waves). |
PASOS_DEFAULTdeprecated | constant | 20 discrete poses. Decided in the Lab by comparing 10/15/20/30. Use STEPS_DEFAULT instead. |
RESOLUCION_DEFAULTdeprecated | constant | 64 points per subpath. Use RESOLUTION_DEFAULT instead. |
COLA_DEFAULTdeprecated | constant | What to do with the spring's asymptotic tail. Use SPRING_TAIL_DEFAULT instead. |
Types
| Type | |
|---|---|
MorphIcon | What [icon] accepts: an AnimatedIconDef or its geometry. |
MorphKeyframes | morphKeyframes' output: keyframes, duration, weight. |
MorphKeyframesOpts | Steps, resolution, tail, spring, overshoot. |
RunMorphOpts | The above + loop, direction, and durationScale. |
SpringConfig | Raw spring: stiffness and damping. |
SpringPreset | The names in SPRING_PRESETS: 'smooth' | 'snappy' | 'bouncy'. |
LiveMorph | createLiveMorph's handle: morphTo, set, destroy. |
LiveMorphOpts | spring and durationScale, same vocabulary as the baked engine. |
MorphIntent | A two-state gesture with its character already decided: the pair of figures, its spring, and whether the active state expires. |
GfAsyncState | The four moments of an async operation: idle, loading, success, error. |
The icons
On top of the above, glyphflow exports one const per icon with an Icon suffix — bellIcon, trash2Icon, circleCheckIcon. That's the tree-shakeable path, which is why they're not listed one by one: there are ~1767 of them, and the browsable catalog lives at the icons page.
The const's name is the icon's name in camelCase plus Icon: trash-2 → trash2Icon, circle-check → circleCheckIcon. Each icon's detail panel gives you the snippet already built.