Refined UI

An opinionated, customizable superset of shadcn/ui

AgentsPrimitivesSkillsSkins
Guides
  • Overview
  • Get started
  • Shadcn compatibility
  • Architecture
  • Agent surface
Primitives
  • Accordion
  • Alert
  • Alert dialog
  • Aspect ratio
  • Autocomplete
  • Avatar
  • Badge
  • Button
  • Button group
  • Calendar
  • Card
  • Checkbox
  • Checkbox Group
  • Code
  • Code Diff
  • Collapsible
  • Color Picker
  • Combobox
  • Command
  • Date Picker
  • Dialog
  • Drawer
  • Empty
  • Field
  • Form
  • Gradient Editor
  • Hover card
  • Input
  • Input group
  • Input OTP
  • Item
  • Kbd
  • Markdown
  • Menu
  • Menubar
  • Meter
  • Native select
  • Navigation menu
  • Number Field
  • Pagination
  • Popover
  • Progress
  • Radio group
  • Resizable
  • Scroll area
  • Select
  • Sidebar
  • Skeleton
  • Slider
  • Spinner
  • Switch
  • Table
  • Table of contents
  • Tabs
  • Textarea
  • Toast
  • Toggle
  • Toolbar
  • Tooltip
  • Tree
  • Trigger Menu
  • Typography
Hooks
  • Use Chat Message
  • Use Chat Input
  • Use User Ask
  • Use Audio Recorder
  • Use Environment Variables
  • Use Copy To Clipboard
  • Use Tool Call
  • Use Sidebar Resize
Utils
  • cn
  • Skin
  • Contracts
  • Serialize
Extensions
  • Control Effects
  • View Transition
  • Send Aurora
  1. Extensions
  2. ControlEffects
Extensions

ControlEffects

CSS-driven control effects (top-shine, ripple, hover-circle) that follow every control app-wide through the emitted anatomy — portalled surfaces included.

Preview

Local demo scoped to this frame — real activation is skin-level, see Activation below.

Effects

Root-mountedMounted once above its targets and attached through the emitted anatomy — no component imports it, and removing the item removes every byte. Not installed means no import, no listener, no cost.

Installs to components/refined-ui/extensions/control-effects.ts. Extensions are optional items layered on the library — no component bundle carries them.

Registry command
npx shadcn@latest add http://127.0.0.1:3000/r/refined/control-effects.json
See registry manifest

Activation

Declare effects on your skin (DS-level, covers portals) and mount the runtime once for in-tree controls; a subtree ControlEffectsRoot stays the caller-wins local override.

// skin.config.tsx — a brand's controls either all ripple or none do
export const skin: RefinedSkin = {
id: "my-brand",
effects: ["ripple"],
};
​
// app layout — mirrors the resolved list on <html> for in-tree controls
<ControlEffectsRuntime />
​
// or scope effects to one subtree instead (caller-wins local override)
<ControlEffectsRoot effects={["top-shine", "ripple"]}>
<Toolbar />
</ControlEffectsRoot>

Source

Installed extension source

Effects contract
src/registry/sources/refined/extensions/control-effects.ts
import type { ControlEffect } from "@/components/refined-ui/contracts";
​
export type { ControlEffect };
​
export type ControlEffectValue = ControlEffect | ControlEffect[];
​
export function controlEffectsAttribute(effects?: ControlEffectValue) {
if (!effects) return undefined;
const values = Array.isArray(effects) ? effects : [effects];
const value = values.filter(Boolean).join(" ");
return value.length > 0 ? value : undefined;
}
​

On this page

  • Preview
  • Attachment
  • Installation
  • Activation
  • Source
Variant
Tone
Size
Icon only
State
Render prop
Render as link