import { forwardRef, useEffect, useId, useImperativeHandle, useRef, } from "react"; import { createPortal } from "react-dom"; import { CloseIcon } from "../icons/semantic-icons.js"; import { useLocale } from "../../i18n/index.js"; export type ButtonVariant = "primary" | "secondary" | "danger" | "ghost"; export type ButtonSize = "default" | "compact"; export type ButtonProps = React.ButtonHTMLAttributes & Readonly<{ variant?: ButtonVariant; size?: ButtonSize; pending?: boolean; pendingLabel?: string; }>; export const Button = forwardRef( function Button( { variant = "primary", size = "default", pending = false, pendingLabel, className = "", type = "button", children, disabled, ...props }, ref, ) { const classes = [ "ui-button", `ui-button--${variant}`, size === "compact" ? "ui-button--compact" : "", pending ? "ui-button--pending" : "", className, ] .filter(Boolean) .join(" "); return ( ); }, ); export type LinkButtonProps = React.AnchorHTMLAttributes & Readonly<{ href: string; variant?: ButtonVariant; size?: ButtonSize; }>; export const LinkButton = forwardRef( function LinkButton( { href, variant = "primary", size = "default", className = "", ...props }, ref, ) { return ( ); }, ); export type IconButtonProps = Omit & Readonly<{ accessibleName: string; children: React.ReactElement; }>; export const IconButton = forwardRef( function IconButton({ accessibleName, className = "", ...props }, ref) { return (