UNPKG

@heroui/accordion

Version:

Collapse display a list of high-level options that can expand/collapse to reveal more information.

91 lines (88 loc) 3.22 kB
import { SlotsToClasses, AccordionItemSlots, AccordionItemVariantProps } from '@heroui/theme'; import { As } from '@heroui/system'; import { ItemProps } from '@heroui/aria-utils'; import { FocusableProps, PressEvents } from '@react-types/shared'; import { ReactNode } from 'react'; import { HTMLMotionProps } from 'framer-motion'; type AccordionItemIndicatorProps = { /** * The current indicator, usually an arrow icon. */ indicator?: ReactNode; /** * The current open status. */ isOpen?: boolean; /** * The current disabled status. * @default false */ isDisabled?: boolean; }; interface Props<T extends object = {}> extends Omit<ItemProps<"button", T>, "children" | "title" | keyof FocusableProps>, FocusableProps, PressEvents { /** * The content of the component. */ children?: ReactNode; /** * The accordion item title. */ title?: ReactNode; /** * The accordion item subtitle. */ subtitle?: ReactNode; /** * The accordion item `expanded` indicator, it's usually an arrow icon. * If you pass a function, HeroUI will expose the current indicator and the open status, * In case you want to use a custom indicator or modify the current one. */ indicator?: ReactNode | ((props: AccordionItemIndicatorProps) => ReactNode) | null; /** * The accordion item start content, it's usually an icon or avatar. */ startContent?: ReactNode; /** * The props to modify the framer motion animation. Use the `variants` API to create your own animation. */ motionProps?: Omit<HTMLMotionProps<"section">, "ref">; /** * Whether to keep the accordion content mounted when collapsed. * @default false */ keepContentMounted?: boolean; /** * The native button click event handler. * @deprecated - use `onPress` instead. */ onClick?: PressEvents["onClick"]; /** * Classname or List of classes to change the classNames of the element. * if `className` is passed, it will be added to the base slot. * * @example * ```ts * <AccordionItem classNames={{ * base:"base-classes", * heading: "heading-classes", * trigger: "trigger-classes", * startContent: "start-indicator-classes", * indicator: "indicator-classes", * titleWrapper: "title-wrapper-classes", // this wraps the title and subtitle * title: "title-classes", * subtitle: "subtitle-classes", * content: "content-classes", * }} /> * ``` */ classNames?: SlotsToClasses<AccordionItemSlots>; /** * Customizable heading tag for Web accessibility: * use headings to describe content and use them consistently and semantically. * This will help all users to better find the content they are looking for. */ HeadingComponent?: As; } type AccordionItemBaseProps<T extends object = {}> = Props<T> & AccordionItemVariantProps; declare const AccordionItemBase: (props: AccordionItemBaseProps) => JSX.Element; export { type AccordionItemBaseProps, type AccordionItemIndicatorProps, type Props, AccordionItemBase as default };