Bubble
Displays conversational content in a message bubble. Supports variants, alignment, grouping, reactions, and collapsible content.
Installation
Complete the project setup first, including Tailwind CSS v4, theme tokens, and Preact compatibility aliases.
1. Install dependencies
bun add --exact class-variance-authority@0.7.1 cn@0.4.0 preact@11.0.0 tw-animate-css@1.4.02. Copy the component with degit
Run this from your project root. It selects bubble.tsx, its local dependencies, and both licenses directly from the repository, then copies them into src/components/ui.
bunx degit@3.10.0 https://github.com/LiasCode/shadcn-preact#main ./.cache/shadcn-preact/bubble --files LICENSE.md,registry/ui/bubble.tsx,registry/ui/lib/utils.ts,registry/ui/primitives/LICENSE,registry/ui/primitives/internals/empty.ts,registry/ui/primitives/internals/getReactElementRef.ts,registry/ui/primitives/internals/getStateAttributesProps.ts,registry/ui/primitives/internals/mergeObjects.ts,registry/ui/primitives/internals/resolveClassName.ts,registry/ui/primitives/internals/resolveStyle.ts,registry/ui/primitives/internals/types.ts,registry/ui/primitives/internals/useMergedRefs.ts,registry/ui/primitives/internals/useRefWithInit.ts,registry/ui/primitives/internals/useRenderElement.ts,registry/ui/primitives/merge-props/index.ts,registry/ui/primitives/use-render/index.ts --force
mkdir -p ./src/components/ui
cp -R ./.cache/shadcn-preact/bubble/registry/ui/. ./src/components/ui/
cp ./.cache/shadcn-preact/bubble/LICENSE.md ./src/components/ui/LICENSE.mdThe temporary copy lives in .cache/shadcn-preact/bubble. Existing components stay in place; shared source files are updated from main.
Selected source files (15)
- bubble.tsx
- lib/utils.ts
- primitives/LICENSE
- primitives/internals/empty.ts
- primitives/internals/getReactElementRef.ts
- primitives/internals/getStateAttributesProps.ts
- primitives/internals/mergeObjects.ts
- primitives/internals/resolveClassName.ts
- primitives/internals/resolveStyle.ts
- primitives/internals/types.ts
- primitives/internals/useMergedRefs.ts
- primitives/internals/useRefWithInit.ts
- primitives/internals/useRenderElement.ts
- primitives/merge-props/index.ts
- primitives/use-render/index.ts
Usage
import { Bubble, BubbleContent, BubbleReactions } from "./components/ui/bubble"<Bubble>
<BubbleContent>
I checked the registry output and removed the stale route.
</BubbleContent>
<BubbleReactions>
<span>๐</span>
</BubbleReactions>
</Bubble>Examples
Example requirements
Copy the exampleโs local helpers and preserve their relative imports: markdown.tsx.
Reactions
Use BubbleReactions for bubble reactions. You can use it to display reactions or quick action buttons. Use side and align to position the row โ side="top" anchors it to the upper edge. Reactions overlap the bubble edge, so leave vertical space between rows โ the examples below use a larger gap for this reason.
Example requirements
Also uses: Button.
bun add --exact sonner@2.0.8Show More / Collapsible
Long bubble content can be composed with Collapsible to allow for a show more or show less interaction. Use the CollapsibleTrigger component to trigger the collapsible content.
Example requirements
Also uses: Button, Collapsible.
bun add --exact lucide-preact@1.51.0Example requirements
Copy the exampleโs local helpers and preserve their relative imports: markdown.tsx.
Reference
See the official Bubble documentation for composition patterns and API details. This page uses the Preact port and examples from the pinned upstream revision.
Component source