import { type ComponentType, type HTMLAttributes } from "react";
import { type ToastRendererProps } from "./DefaultToastRenderer.js";
import { type ConfigurableToastProps } from "./Toast.js";
import { type SnackbarPosition } from "./snackbarStyles.js";
/**
 * @since 6.0.0 The `id` prop is optional
 */
export interface SnackbarProps extends HTMLAttributes<HTMLDivElement> {
    /** @defaultValue `"snackbar-" + useId()` */
    id?: string;
    /**
     * Set this to the number of toasts that can be visible within the snackbar at
     * the same time. Any toasts added after this value will be added into the
     * queue to be shown.
     *
     * @defaultValue `1`
     */
    limit?: number;
    /**
     * Set this to `true` if the snackbar should use absolute positioning so it
     * can be fixed within a `position: relative` container instead of the entire
     * viewport.
     *
     * @defaultValue `false`
     */
    absolute?: boolean;
    /** @defaultValue `"bottom"` */
    position?: SnackbarPosition;
    /** @defaultValue `false` */
    disablePortal?: boolean;
    /**
     * This can be used to create a custom toast implementation.
     *
     * @example
     * ```ts
     * import type { ToastRendererProps } from "@react-md/core";
     * import {
     *   Snackbar,
     *   Toast,
     *   ToastContent,
     *   useToastManager,
     * } from "@react-md/core";
     * import type { ReactElement } from "react";
     *
     * function CustomToast(props: CustomToastRendererProps): ReactElement {
     *   // Pretend like we don't need anything else from the toast since the
     *   // custom behavior is related to the `toastId`
     *   const { toastId, visible, duplicates, visibleTime } = props;
     *
     *   const toastManager = useToastManager();
     *
     *   // Note: If you want to rely on the `action` and `closeButton` behavior,
     *   // you must also wrap the `Toast` with:
     *   // <RemoveToastProvider value={() => toastManager.removeToast(toastId, true)}>
     *
     *   return (
     *     <Toast
     *       theme={isError(toastId) ? "error" : "surface"}
     *       visible={visible}
     *       onEntered={() => {
     *         toastManager.startRemoveTimeout(toastId);
     *       }}
     *       onExited={() => {
     *         toastManager.removeToast(toastId, false)
     *       }}
     *       disableContentWrapper
     *     >
     *       <ToastContent>
     *         <TranslateMessage id={toastId} />
     *       </ToastContent>
     *       {isActionable(toastId) && (
     *         <Button
     *           onClick={async () => {
     *             await someApiCall();
     *             toastManager.removeToast(toastId, true);
     *           }}
     *         >
     *           Dismiss
     *         </Button>
     *       )}
     *     </Toast>
     *   );
     * }
     *
     * function Example(): ReactElement {
     *   return <Snackbar renderToast={CustomToast} />
     * }
     * ```
     *
     * @see {@link DefaultToastRenderer}
     * @defaultValue `DefaultToastRenderer`
     */
    renderToast?: ComponentType<ToastRendererProps>;
    /**
     * Optional props that should be passed to each `Toast` from the `Snackbar`.
     * This is a great way to enforce each toast having a close button, a custom
     * class name, theme, etc.
     *
     * @see {@link DefaultToastRenderer}
     */
    toastDefaults?: ConfigurableToastProps;
}
/**
 * **Client Component**
 *
 * @example Super Simple Example
 * ```tsx
 * import { Button, Snackbar, addToast } from "@react-md/core";
 * import type { ReactElement } from "react";
 *
 * function Example(): ReactElement {
 *   return (
 *     <>
 *       <Button
 *         onClick={() => {
 *           addToast({ children: "A new toast!" });
 *         }}
 *       >
 *         Toast!
 *       </Button>
 *       <Snackbar />
 *     </>
 *   );
 * }
 * ```
 *
 * @see {@link SnackbarProps.renderToast} for creating a custom toast
 * implementation.
 * @since 6.0.0 Rewritten to use a new API that supports adding toasts
 * outside of React components and rendering multiple toasts at once.
 */
export declare const Snackbar: import("react").ForwardRefExoticComponent<SnackbarProps & import("react").RefAttributes<HTMLDivElement>>;
