Kits
DynamicNotification
ExperimentalExperimental — the contract and the rendering can change without notice. Own the installed copy before shipping it.Dynamic Island-style AI notification pill with a thinking state that morphs into a reply bubble — token-driven surface, WebGL-enhanced backdrop blur, or real refractive liquid glass.
Variants
Composition
Notification with liquid backdrop
- <DynamicNotification>
- <DynamicNotificationIsland>
- <DynamicNotificationLiquid />
- <DynamicNotificationPill>
- <DynamicNotificationIndicator />
- <DynamicNotificationContent>
- <DynamicNotificationTitle />
- <DynamicNotificationClose />
- <DynamicNotificationMessage />
- <DynamicNotificationReply>
- <DynamicNotificationReplyInput />
- <DynamicNotificationReplySubmit />
- <DynamicNotificationIsland>
Glass backdrop alternative
Use Glass or Liquid as the backdrop; omit both for the CSS surface.
- <DynamicNotification>
- <DynamicNotificationIsland>
- <DynamicNotificationGlass />
- <DynamicNotificationPill>
- <DynamicNotificationIndicator />
- <DynamicNotificationContent>
- <DynamicNotificationMessage />
- <DynamicNotificationIsland>
Installation
All variants use this installation. Choose the appearance with the variant prop and its optional parts.
Usage
Dependencies
Behavior hook
src/registry/hooks/use-dynamic-notification.tsHookDynamic notification canvas loop
src/registry/sources/control-ui/dynamic-notification-canvas-loop.tsSupportBackdrop-blur WebGL engine
src/registry/sources/control-ui/dynamic-notification-glass.tsSupportRefractive liquid WebGL engine
src/registry/sources/control-ui/dynamic-notification-liquid.tsSupportDynamic notification siri wave
src/registry/sources/control-ui/dynamic-notification-siri-wave.tsSupportLiquid glass optics
src/registry/lib/liquid-glass-optics.tsUtilMotion
Buttonsrc/registry/lib/motion.tsUtilbuttonPrimitiveLive statuslive-statusPrimitiveRaw code
Installed source shared by all variants
Knobs
Typed custom properties the recipe paints with. Set one on the root — style, a utility class, or a skin — and every slot inherits it.
--cui-dynamic-notification-* · 15 knobsHow the cascade resolves--cui-dynamic-notification-content-easing*linear(
0,
0.0553 4.55%,
0.1795 9.09%,
0.328 13.64%,
0.4745 18.18%,
0.6054 22.73%,
0.7148 27.27%,
0.8017 31.82%,
0.868 36.36%,
0.9166 40.91%,
0.9509 45.45%,
0.9741 50%,
0.9891 54.55%,
0.9982 59.09%,
1.0032 63.64%,
1.0056 68.18%,
1.0063 72.73%,
1.006 77.27%,
1.0053 81.82%,
1.0044 86.36%,
1.0034 90.91%,
1.0026 95.45%,
1
)--cui-dynamic-notification-expanded-radius<length-percentage>1.65rem--cui-dynamic-notification-morph-easing*linear(
0,
0.0568 3.85%,
0.1888 7.69%,
0.351 11.54%,
0.5142 15.38%,
0.6608 19.23%,
0.7824 23.08%,
0.8767 26.92%,
0.9449 30.77%,
0.9908 34.62%,
1.0187 38.46%,
1.0332 42.31%,
1.0382 46.15%,
1.0372 50%,
1.0327 53.85%,
1.0266 57.69%,
1.0203 61.54%,
1.0145 65.38%,
1.0095 69.23%,
1.0056 73.08%,
1.0027 76.92%,
1.0008 80.77%,
0.9995 84.62%,
0.9988 88.46%,
0.9986 92.31%,
0.9985 96.15%,
1
)--cui-dynamic-notification-glass-foreground<color>oklch(1 0 0)--cui-dynamic-notification-glass-ring-color<color>oklch(1 0 0 / 0.12)--cui-dynamic-notification-liquid-foreground<color>oklch(1 0 0)--cui-dynamic-notification-liquid-text-shadow*0 1px 2px oklch(0 0 0 / 0.25)--cui-dynamic-notification-surface-background<color>var(--popover)--cui-dynamic-notification-title-foreground<color>var(--muted-foreground)--cui-dynamic-notification-surface-foreground<color>var(--popover-foreground)--cui-dynamic-notification-surface-ring-color<color>var(--border)--cui-dynamic-notification-surface-shadow*var(--shadow-pop)--cui-dynamic-notification-indicator-end<color>oklch(0.7 0.17 250)--cui-dynamic-notification-indicator-middle<color>oklch(0.75 0.15 70)--cui-dynamic-notification-indicator-start<color>oklch(0.62 0.19 25)