CloseButtonPreview

Button component for closing dialogs, modals, or dismissing content

Import

import {CloseButton} from "@heroui/react";

Usage

"use client";

import {CloseButton} from "@heroui/react";

export function Default() {
  return <CloseButton />;
}

With Custom Icon

Custom Icon
Alternative Icon
"use client";

import {CloseButton} from "@heroui/react";
import {Icon} from "@iconify/react";

export function WithCustomIcon() {
  return (
    <div className="flex items-center gap-4">
      <div className="flex flex-col items-center gap-2">
        <CloseButton>
          <Icon icon="gravity-ui:circle-xmark" />
        </CloseButton>
        <span className="text-muted text-xs">Custom Icon</span>
      </div>
      <div className="flex flex-col items-center gap-2">
        <CloseButton>
          <Icon icon="gravity-ui:xmark" />
        </CloseButton>
        <span className="text-muted text-xs">Alternative Icon</span>
      </div>
    </div>
  );
}

Interactive

Clicked: 0 times
"use client";

import {CloseButton} from "@heroui/react";
import {useState} from "react";

export function Interactive() {
  const [count, setCount] = useState(0);

  return (
    <div className="flex flex-col items-center justify-center gap-4">
      <CloseButton
        aria-label={`Close (clicked ${count} times)`}
        onPress={() => setCount(count + 1)}
      />
      <span className="text-muted text-sm">Clicked: {count} times</span>
    </div>
  );
}

Styling

Passing Tailwind CSS classes

import {CloseButton} from "@heroui/react";

function CustomCloseButton() {
  return <CloseButton className="text-red-600 hover:bg-red-100">Close</CloseButton>;
}

Customizing the component classes

To customize the CloseButton component classes, you can use the @layer components directive.
Learn more.

@layer components {
  .close-button {
    @apply bg-red-100 text-red-800 hover:bg-red-200;
  }

  .close-button--custom {
    @apply rounded-full border-2 border-red-300;
  }
}

HeroUI follows the BEM methodology to ensure component variants and states are reusable and easy to customize.

CSS Classes

The CloseButton component uses these CSS classes (View source styles):

Base Classes

  • .close-button - Base component styles

Variant Classes

  • .close-button--default - Default variant

Interactive States

The component supports both CSS pseudo-classes and data attributes for flexibility:

  • Hover: :hover or [data-hover="true"]
  • Active/Pressed: :active or [data-pressed="true"]
  • Focus: :focus-visible or [data-focus-visible="true"]
  • Disabled: :disabled or [aria-disabled="true"]

API Reference

CloseButton Props

PropTypeDefaultDescription
variant"default""default"Visual variant of the button
asChildbooleanfalseRender as child element
childrenReactNode | function<CloseIcon />Content to display (defaults to close icon)
onPress() => void-Handler called when the button is pressed
isDisabledbooleanfalseWhether the button is disabled

React Aria Button Props

CloseButton extends all React Aria Button props. Common props include:

PropTypeDescription
aria-labelstringAccessible label for screen readers
aria-labelledbystringID of element that labels the button
aria-describedbystringID of element that describes the button

RenderProps

When using the render prop pattern, these values are provided:

PropTypeDescription
isHoveredbooleanWhether the button is hovered
isPressedbooleanWhether the button is pressed
isFocusedbooleanWhether the button is focused
isDisabledbooleanWhether the button is disabled