import { type CSSProperties, type ReactNode } from "react";
import { type CardProps } from "../card/Card.js";
import { type CardContentProps } from "../card/CardContent.js";
import { type PropsWithRef } from "../types.js";
import { type ExpansionPanelHeaderProps } from "./ExpansionPanelHeader.js";
/**
 * @since 6.0.0 The `disableSecondaryColor` convenience prop was removed in
 * favor of the new `contentProps` object.
 * @since 6.0.0 The `disableParagraphMargin` prop was removed since it no longer
 * exists on the `CardContent` component.
 * @since 6.0.0 Removed the `marginTop` prop since it is no longer needed.
 */
export interface ExpansionPanelProps extends CardProps {
    /**
     * Set this to `true` if the {@link children} should be visible. This should
     * generally be provided by the `useExpansionPanels` hook.
     */
    expanded: boolean;
    /**
     * A function that should toggle the {@link expanded} state. This should
     * generally be provided by the `useExpansionPanels` hook.
     */
    onExpandClick: () => void;
    /**
     * Set this to `true` to prevent the panel from toggling the {@link expanded}
     * state. This should generally be provided by the `useExpansionPanels` hook.
     *
     * @defaultValue `false`
     */
    disabled?: boolean;
    /**
     * @defaultValue `true`
     * @see {@link CardProps.fullWidth}
     */
    fullWidth?: boolean;
    /**
     * This can be used to implement a custom header implementation, but it
     * probably shouldn't be needed.
     *
     * @since 6.0.0 This was renamed from `customHeader`
     * @see {@link headerProps}
     */
    header?: ReactNode;
    /**
     * This can be used to apply additional props to the header element.
     *
     * Note: You can override the `style` and `className` using
     * {@link headerStyle} and {@link headerClassName} instead for convenience.
     *
     * @example
     * ```tsx
     * <ExpansionPanel
     *   {...props}
     *   headerProps={{
     *     style: {
     *       // custom inline style
     *     },
     *     className: "come-class-name",
     *     icon: <MyCustomIcon />,
     *     iconRotatorProps: {
     *       className: "another-custom-class-name",
     *     },
     *   }}
     * />
     * ```
     */
    headerProps?: Omit<ExpansionPanelHeaderProps, "id" | "aria-disabled" | "onClick" | "expanded">;
    /**
     * Convenience prop to apply custom style to the `ExpansionPanelHeader`
     * component.
     */
    headerStyle?: CSSProperties;
    /**
     * Convenience prop to apply custom class name to the `ExpansionPanelHeader`
     * component.
     */
    headerClassName?: string;
    /**
     * Content to display within the header of the expansion panel that toggles
     * the expanded state. This should generally contain some accessible text
     * describing the expansion panel's content.
     *
     * @since 6.0.0 This was renamed from `header`
     */
    headerChildren?: ReactNode;
    /**
     * This can be used to apply additional props to the `CardContent` component
     * if needed.
     *
     * Note: `disableSecondaryColor` and `disableLastChildPadding` default to
     * `true` in this implementation.
     *
     * @example
     * ```tsx
     * contentProps={{
     *   style: {},
     *   className: "some-class-name",
     *   disablePadding: true,
     *   disableSecondaryColor: false,
     *   disableLastChildPadding: false,
     *   // whatever else
     * }}
     * ```
     *
     * @see {@link contentStyle}
     * @see {@link contentClassName}
     * @see {@link disableContentPadding}
     */
    contentProps?: PropsWithRef<Omit<CardContentProps, "role">>;
    /**
     * Convenience prop to apply custom style to the `CardContent` component.
     */
    contentStyle?: CSSProperties;
    /**
     * Convenience prop to apply custom class name to the `CardContent` component.
     */
    contentClassName?: string;
    /**
     * Set to `true` to disable the collapse transition for the card content
     * whenever the {@link expanded} state changes.
     *
     * @defaultValue `false`
     */
    disableTransition?: boolean;
    /**
     * @defaultValue `false`
     * @see {@link CardContentProps.disablePadding}
     */
    disableContentPadding?: boolean;
    /**
     * Set this to `true` to unmount the {@link children} when the
     * {@link expanded} state is `false`.
     *
     * @defaultValue `false`
     * @since 6.0.0 Renamed from `persistent` to match the
     * `useCollapseTransition` naming convention.
     */
    temporary?: boolean;
}
/**
 * **Client Component**
 *
 * An expansion panel enables content to be either collapsed (hidden) or
 * expanded (visible) following the disclosure pattern.
 *
 * @example Simple Example
 * ```tsx
 * "use client";
 *
 * import { ExpansionList } from "@react-md/core/expansion-panel/ExpansionList";
 * import { ExpansionPanel } from "@react-md/core/expansion-panel/ExpansionPanel";
 * import { useExpansionPanels } from "@react-md/core/expansion-panel/useExpansionPanels";
 * import { type ReactElement } from "react";
 *
 * export default function ExpansionPanelGroupExample(): ReactElement {
 *   const { getPanelProps } = useExpansionPanels();
 *
 *   return (
 *     <ExpansionList style={{ width: "100%" }}>
 *       <ExpansionPanel {...getPanelProps(0)} headerChildren="Panel 1">
 *         Panel 1 Contents
 *       </ExpansionPanel>
 *       <ExpansionPanel {...getPanelProps(1)} headerChildren="Panel 2">
 *         Panel 2 Contents
 *       </ExpansionPanel>
 *       <ExpansionPanel {...getPanelProps(2)} headerChildren="Panel 3">
 *         Panel 3 Contents
 *       </ExpansionPanel>
 *     </ExpansionList>
 *   );
 * }
 * ```
 *
 * @see {@link https://react-md.dev/components/expansion-panel | ExpansionPanel Demos}
 * @see `useExpansionPanels` for examples.
 * @since 6.0.0 The content will be persistent and invisible using `display: none`
 * instead of unmounting and also animate the `margin-top` style.
 */
export declare const ExpansionPanel: import("react").ForwardRefExoticComponent<ExpansionPanelProps & import("react").RefAttributes<HTMLHeadingElement>>;
