beUI Pro para móvil ya está disponible: 50 bloques y pantallas de React Native
Emoji Picker
A full emoji picker with search, category tabs, skin tones, recent emoji, and keyboard navigation, plus a reaction bar built on it.
Message reactions
index.tsReaction pills that toggle with rolling counts, and an add button that morphs open the picker. New reactions pop in at the end of the row.
Mira Okafor 10:42
The new onboarding flow is live. Sign-ups are up 18% since this morning.
"use client";
import { EmojiReactions } from "@/components/premium/emoji-picker";
const PORTRAIT =
"https://images.unsplash.com/photo-1494790108377-be9c29b29330?auto=format&fit=crop&crop=faces&fm=webp&q=80&w=96&h=96";
export function EmojiReactionsPreview() {
return (
<div className="flex w-full max-w-md gap-3">
{/* biome-ignore lint/performance/noImgElement: small remote portrait in a sample message. */}
<img
src={PORTRAIT}
alt=""
className="size-9 shrink-0 rounded-full object-cover"
/>
<div className="min-w-0">
<p className="text-sm">
<span className="font-medium">Mira Okafor</span>{" "}
<span className="text-xs text-muted-foreground">10:42</span>
</p>
<p className="mt-1 text-sm text-pretty">
The new onboarding flow is live. Sign-ups are up 18% since this
morning.
</p>
<EmojiReactions
className="mt-3"
defaultReactions={[
{ emoji: "🎉", count: 6, mine: false },
{ emoji: "🚀", count: 3, mine: true },
{ emoji: "👀", count: 1, mine: false },
]}
/>
</div>
</div>
);
}
El código fuente está bloqueado
Consigue acceso para instalar componentes premium y ver todo el código fuente.
Abrir panelInstalar
Picker panel
emoji-picker.tsxThe picker on its own: search by name or tag, jump between categories as the tabs follow your scroll, preview on hover, and pick a skin tone. It loads the emoji set on first open and hides glyphs the device cannot draw.
Pick an emoji
Pick a few emoji
"use client";
import { useState } from "react";
import { EmojiPicker } from "@/components/premium/emoji-picker";
export function EmojiPickerPanelPreview() {
const [picked, setPicked] = useState<string[]>([]);
return (
<div className="flex flex-col items-center gap-4">
<div className="overflow-hidden rounded-3xl border border-border bg-background">
<EmojiPicker
autoFocus={false}
onSelect={(char) =>
setPicked((current) => [...current, char].slice(-12))
}
/>
</div>
<p aria-live="polite" className="h-7 text-xl tracking-wide">
{picked.join("") || (
<span className="text-sm text-muted-foreground">
Pick a few emoji
</span>
)}
</p>
</div>
);
}
El código fuente está bloqueado
Consigue acceso para instalar componentes premium y ver todo el código fuente.
Abrir panel