import type { HTMLAttributes, ReactNode } from "react"; /** Floating unsaved-changes bar driven by `isOpen`; other `
` attributes land on the positioned root. */ export interface SaveBarProps extends Omit, "color" | "children" | "dangerouslySetInnerHTML"> { /** Shows the bar and animates it in; unmounts (not just hides) it when false. */ isOpen: boolean; /** Status text, announced via role="status"; defaults to "You have unsaved changes". */ message?: ReactNode; /** Called when Save is clicked. */ onSave: () => void; /** Called when Discard is clicked. */ onDiscard: () => void; /** Shows a spinner on Save and disables Discard. */ isSaving?: boolean; /** Keeps Save disabled, e.g. while a field is invalid. */ isSaveDisabled?: boolean; /** Save button label; defaults to "Save changes". */ saveLabel?: string; /** Discard button label; defaults to "Discard". */ discardLabel?: string; /** CSS position for the bar; defaults to "sticky". */ position?: "sticky" | "fixed"; }