Button

PreviousNext
Docs
react-ariaui

Preview

Loading preview…
components/ui/Button.tsx
'use client';
import {Button as RACButton, ButtonProps as RACButtonProps, composeRenderProps} from 'react-aria-components';
import {ProgressCircle} from '@/registry/react-aria/ui/ProgressCircle';
import './Button.css';

interface ButtonProps extends RACButtonProps {
  /**
   * The visual style of the button (Vanilla CSS implementation specific).
   * @default 'primary'
   */
  variant?: 'primary' | 'secondary' | 'quiet'
}

export function Button(props: ButtonProps) {
  return (
    <RACButton {...props} className="react-aria-Button button-base" data-variant={props.variant || 'primary'}>
      {composeRenderProps(props.children, (children, {isPending}) => (
        <>
          {!isPending && children}
          {isPending && (
            <ProgressCircle aria-label="Saving..." isIndeterminate />
          )}
        </>
      ))}
    </RACButton>
  );
}

Installation

npx shadcn@latest add @react-aria/css-button

Usage

import { CssButton } from "@/components/ui/css-button"
<CssButton />