Sabil UI

Search documentation

Search for a command to run...

Components

Radio Group

A set of checkable buttons where no more than one can be checked at a time.

Installation#

  1. Install the dependencies

    npm install cn radix-ui
  2. Copy the source into your project

    components/ui/radio-group.tsx
    "use client"import * as React from "react"import { cn } from "cn"import { RadioGroup as RadioGroupPrimitive } from "radix-ui"function RadioGroup({  className,  ...props}: React.ComponentProps<typeof RadioGroupPrimitive.Root>) {  return (    <RadioGroupPrimitive.Root      data-slot="radio-group"      className={cn("grid w-full gap-2", className)}      {...props}    />  )}function RadioGroupItem({  className,  ...props}: React.ComponentProps<typeof RadioGroupPrimitive.Item>) {  return (    <RadioGroupPrimitive.Item      data-slot="radio-group-item"      className={cn(        "group/radio-group-item peer relative flex aspect-square size-4 shrink-0 rounded-full border border-input outline-none group-has-[:focus-visible]/field-label:ring-0 group-has-[:focus-visible]/field-label:not-data-checked:border-input after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 aria-invalid:aria-checked:border-primary dark:bg-input/30 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 data-checked:border-primary data-checked:bg-primary data-checked:text-primary-foreground group-has-[:focus-visible]/field-label:data-checked:border-primary dark:data-checked:bg-primary",        className      )}      {...props}    >      <RadioGroupPrimitive.Indicator        data-slot="radio-group-indicator"        className="flex size-4 items-center justify-center"      >        <span className="absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-primary-foreground" />      </RadioGroupPrimitive.Indicator>    </RadioGroupPrimitive.Item>  )}export { RadioGroup, RadioGroupItem }
  3. Make sure the foundation is in place

    Components read their colors, radius and surfaces from the tokens in app/globals.css. See Theming.

Usage#

import { RadioGroup, RadioGroupItem } from "@/components/ui/radio-group"

Examples#

Choice Card

Description

Standard spacing for most use cases.

More space between elements.

Minimal spacing for dense layouts.

Disabled

Fieldset

Subscription Plan

Yearly and lifetime plans offer significant savings.

Invalid

Notification Preferences

Choose how you want to receive notifications.