import type { ReactNode } from 'react';
export type AnnouncementType = 
/** Immediate attention req.
 * (high priority)
 * (cannot be disabled)
 */
'alert'
/** Immediate action req.
 * (high priority)
 * (cannot be disabled)
 */
 | 'error'
/** System failure
 * (high priority)
 * (cannot be disabled)
 */
 | 'exception'
/** No immediate action req.
 * (medium priority)
 */
 | 'warning'
/** Feedback on actions
 * (medium priority)
 */
 | 'acknowledgement'
/** Confirmation of action completion
 * (medium priority)
 */
 | 'success'
/** Passive notification
 * (low priority)
 * (ex: "Kelly liked your comment.")
 */
 | 'info'
/** System feedback
 * (low priority)
 * (ex: "Loading create form.")
 */
 | 'status';
interface AnnounceMethodProps {
    /** Message to announce */
    message: string;
    /** Announcement type
     * @default 'info'
     */
    type?: AnnouncementType;
}
interface GenericAnnounceMethodProps extends AnnounceMethodProps {
    /** Whether announcement is assertive.
     * @default false
     */
    assertive?: boolean;
}
export interface LiveLogContextValue {
    announce: (props: GenericAnnounceMethodProps) => void;
    announcePolite: (props: AnnounceMethodProps) => void;
    announceAssertive: (props: AnnounceMethodProps) => void;
    /** @internal */
    initialized: boolean;
}
export interface LiveLogProps {
    /** Content that will be provided live log context. */
    children: ReactNode;
    /** Length at which to start shifting the window of persisted messages.
     * @default 50
     */
    maxLength?: number;
}
interface MessageStateItem {
    message: AnnounceMethodProps['message'];
    id: string;
}
export interface LiveLogState {
    maxLength: number;
    politeMessages: MessageStateItem[];
    assertiveMessages: MessageStateItem[];
    suppressedTypes: AnnouncementType[];
}
export type ReducerAction = {
    type: 'announce';
    payload: {
        message: AnnounceMethodProps['message'];
        level: 'polite' | 'assertive';
        type: AnnouncementType;
    };
} | {
    type: 'setMaxLength';
    payload: number;
} | {
    type: 'trimLength';
};
export {};
//# sourceMappingURL=LiveLog.types.d.ts.map