Surface
muffled-ui-registry/surfaceFreeUtility
Shared className merge and floating panel styles.
Live preview
live · rendered by the registry
Rendered by muffled-ui-registry on their own page — this is the component running, not a screenshot of it.Install it
npx shadcn@latest add https://ui.muffled.studio/r/surface.jsonSource
1import { type ClassValue, clsx } from "clsx";2import { twMerge } from "tailwind-merge";34export function cn(...inputs: ClassValue[]) {5 return twMerge(clsx(inputs));6}78/** Paper/ink floating panel — menus, popovers, select dropdowns. */9export function floatingSurfaceClasses(...extra: string[]) {10 return cn(11 "rounded-md border border-border-strong bg-popover text-popover-foreground shadow-none outline-hidden duration-[var(--d-drift)] ease-[var(--ease-drift)] data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0",12 "data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",13 extra,14 );15}1617/** Modal / dialog panel on paper. */18export function modalSurfaceClasses(...extra: string[]) {19 return cn(20 "rounded-md border border-border bg-popover text-popover-foreground shadow-none outline-none duration-[var(--d-drift)] ease-[var(--ease-drift)] data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0",21 extra,22 );23}2425/** Ink/56 focus ring. Pair with `outline-none` on the control. */26export const focusRingClasses =27 "focus-visible:outline focus-visible:outline-offset-2 focus-visible:outline-ring";
What it pulls in
npm packages
Other registry items
Files it writes
More from muffled-ui-registry
All 55 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| Theme Providertheme-provider | muffled-ui-registry | Utilities | Free | no deps |
