import type { HTMLAttributes } from "react"; import { forwardRef } from "react"; import cn from "classnames"; import { bem } from "@react-md/utils"; /** * The position within the viewport for the floating action button. */ export type FABPosition = | null | "bottom-left" | "bottom-right" | "top-left" | "top-right"; export interface FABProps extends HTMLAttributes { /** * The position within the viewport to display the button as a floating action * button. */ position?: FABPosition; } const styles = bem("rmd-fab"); /** * This is a simple wrapper for the `Button` component that will conditionally * render the `Button` in a `` to render as a floating action button. * * Note: You probably don't really want to use this externally since this is * really just required so that the click and focus states behavior will still * be contained within the button. The states behavior requires * `position: relative` to work while changing into a floating action button * makes it `position: fixed`. */ export const FAB = forwardRef(function FAB( { position = null, children, className, ...props }, ref ) { if (!position) { return <>{children}; } return ( {children} ); });