/**
 *
 * [Live Demo](https://www.primevue.org/confirmdialog/)
 *
 * @module confirmationoptions
 *
 */
import type { HintedString } from '@primevue/core';
import type { ButtonProps } from 'primevue/button';

/**
 * Confirmation Service options.
 */
export interface ConfirmationOptions {
    /**
     * Element to align the overlay.
     */
    target?: HTMLElement | undefined;
    /**
     * Header text of the dialog.
     */
    header?: string | undefined;
    /**
     * Message of the confirmation.
     */
    message?: string | undefined;
    /**
     * Optional key to match the key of the confirmation, useful to target a specific confirm dialog instance.
     */
    group?: string | undefined;
    /**
     * Position of the dialog.
     * @defaultValue center
     */
    position?: HintedString<'center' | 'top' | 'bottom' | 'left' | 'right' | 'topleft' | 'topright' | 'bottomleft' | 'bottomright'> | undefined;
    /**
     * Icon to display next to the message.
     */
    icon?: string | undefined;
    /**
     * Whether background scroll should be blocked when dialog is visible.
     * @defaultValue false
     */
    blockScroll?: boolean | undefined;
    /**
     * A valid query selector or an HTMLElement to specify where the confirm dialog gets attached.
     * Special keywords are 'body' for document body and 'self' for the element itself.
     * @defaultValue body
     */
    appendTo?: HintedString<'body' | 'self'> | undefined | HTMLElement;
    /**
     * Defines if background should be blocked when confirm dialog is displayed.
     * @defaultValue false
     */
    modal?: boolean | undefined;
    /**
     * Callback to execute when action is confirmed.
     * @todo Next release should be able to change
     */
    accept?: () => void;
    /**
     * Callback to execute when action is rejected.
     */
    reject?: () => void;
    /**
     * Callback to execute when dialog is visible.
     */
    onShow?: () => void;
    /**
     * Callback to execute when dialog is hidden.
     */
    onHide?: () => void;
    /**
     * Label of the accept button. Defaults to PrimeVue Locale configuration.
     */
    acceptLabel?: string | undefined;
    /**
     * Label of the reject button. Defaults to PrimeVue Locale configuration.
     */
    rejectLabel?: string | undefined;
    /**
     * Icon of the accept button.
     */
    acceptIcon?: string | undefined;
    /**
     * Icon of the reject button.
     */
    rejectIcon?: string | undefined;
    /**
     * Style class of the accept button.
     */
    acceptClass?: string | undefined;
    /**
     * Style class of the reject button.
     */
    rejectClass?: string | undefined;
    /**
     * Element to receive the focus when the dialog gets visible, valid values are "accept" and "reject".
     */
    defaultFocus?: string | undefined;
    /**
     * Used to pass all properties of the ButtonProps to the reject button inside the component.
     * @type {ButtonProps}
     */
    rejectProps?: object | undefined;
    /**
     * Used to pass all properties of the ButtonProps to the accept button inside the component.
     * @type {ButtonProps}
     */
    acceptProps?: object | undefined;
}
