import type { MessageDescriptor } from "@lingui/core" import { useLingui } from "@lingui/react" import { ActionIcon, type ActionIconVariant, Box, Button, type ButtonVariant, Tooltip, useMantineTheme } from "@mantine/core" import { forwardRef, type MouseEventHandler, type ReactNode } from "react" import { Constants } from "@/app/constants" import { useActionButton } from "@/hooks/useActionButton" export type Mode = "auto" | "mobile" | "desktop" interface ActionButtonProps { icon: ReactNode className?: string label?: string | MessageDescriptor onClick?: MouseEventHandler variant?: ActionIconVariant & ButtonVariant mode?: Mode } /** * Switches between Button with label (desktop) and ActionIcon (mobile) */ export const ActionButton = forwardRef((props: ActionButtonProps, ref) => { const { mobile } = useActionButton() const theme = useMantineTheme() const { _ } = useLingui() const label = typeof props.label === "string" ? props.label : props.label && _(props.label) const variant = props.variant ?? "subtle" const mode: Mode = props.mode ?? "auto" const iconOnly = mode === "mobile" || (mode === "auto" && mobile) return ( {iconOnly && ( {props.icon} )} {!iconOnly && ( )} ) }) ActionButton.displayName = "HeaderButton"