iMessage UIv0.1.0

Components

LiquidGlassRefract

Physically-based glass without WebGL: a circular-arc bevel profile drives an feDisplacementMap, so the rim genuinely inverts edges the way thick glass does (not a magnifying-ramp approximation). Cross-browser SVG filters.

"use client";

import { ChatBubble, IMessageScreen, LiquidGlassRefract } from "imessage-ui";

/**
 * Physically-based SVG refraction: a circular-arc bevel drives a
 * feDisplacementMap, so the rim really inverts edges like thick glass.
 * No WebGL — works in Chrome, Safari and Firefox.
 */
export default function RefractDemo() {
  return (
    <IMessageScreen className="w-full max-w-sm rounded-2xl p-4">
      <LiquidGlassRefract width={300} height={120} radius={28} scale={18} bevel={14}>
        <div className="flex flex-col gap-1 p-3">
          <ChatBubble variant="received" text="the rim bends these bubbles" senderName="Riley" avatar={{ initial: "R", gradient: ["#FF9FB2", "#E0506E"] }} />
          <ChatBubble variant="sent" text="pure SVG filters, cross-browser" />
        </div>
      </LiquidGlassRefract>
    </IMessageScreen>
  );
}

Usage

import { LiquidGlassRefract } from "imessage-ui";

<LiquidGlassRefract width={300} height={120} radius={28}>
  <Content />
</LiquidGlassRefract>

API reference

PropTypeDefaultDescription
width / height*numberPanel size in px.
children*ReactNodeThe refracted content.
radiusnumbermin(w, h) / 2Corner radius (defaults to a pill).
scalenumber16Refraction strength in px.
bevelnumber13Width of the refracting rim band.
iornumber1.5Index of refraction (1.5 ≈ glass).
sensitivitynumber3Higher = gentler displacement.
maxSlopenumber4Caps the rim slope so edges don't blow out.
chromaticAberrationnumber0Per-channel offset in px; 0 disables.
className / stylestring / CSSPropertiesPassthrough to the panel.