Skip to content
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 />
        </DynamicNotificationPill>
      • <DynamicNotificationContent>
        • <DynamicNotificationTitle />
        • <DynamicNotificationClose />
        • <DynamicNotificationMessage />
        • <DynamicNotificationReply>
          • <DynamicNotificationReplyInput />
          • <DynamicNotificationReplySubmit />
          </DynamicNotificationReply>
        </DynamicNotificationContent>
      </DynamicNotificationIsland>
    </DynamicNotification>

Glass backdrop alternative

Use Glass or Liquid as the backdrop; omit both for the CSS surface.

  • <DynamicNotification>
    • <DynamicNotificationIsland>
      • <DynamicNotificationGlass />
      • <DynamicNotificationPill>
        • <DynamicNotificationIndicator />
        </DynamicNotificationPill>
      • <DynamicNotificationContent>
        • <DynamicNotificationMessage />
        </DynamicNotificationContent>
      </DynamicNotificationIsland>
    </DynamicNotification>

Installation

All variants use this installation. Choose the appearance with the variant prop and its optional parts.

Registry command
See registry manifest

Usage

Dependencies

Behavior hooksrc/registry/hooks/use-dynamic-notification.tsHook
Dynamic notification canvas loopsrc/registry/sources/control-ui/dynamic-notification-canvas-loop.tsSupport
Backdrop-blur WebGL enginesrc/registry/sources/control-ui/dynamic-notification-glass.tsSupport
Refractive liquid WebGL enginesrc/registry/sources/control-ui/dynamic-notification-liquid.tsSupport
Dynamic notification siri wavesrc/registry/sources/control-ui/dynamic-notification-siri-wave.tsSupport
Liquid glass opticssrc/registry/lib/liquid-glass-optics.tsUtil
Motionsrc/registry/lib/motion.tsUtil
ButtonbuttonPrimitiveLive statuslive-statusPrimitive

Raw code

Installed source shared by all variants

src/registry/sources/control-ui/dynamic-notification.tsx

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)