import type { Icon } from '@wikimedia/codex-icons'; import type { Ref } from 'vue'; import type { StatusType } from '../../types'; /** * Action button configuration for a toast. */ export interface ToastActionButton { /** * Label text for the action button. */ label: string; /** * Callback function when the action button is clicked. */ onClick: () => void; } /** * Options for creating a toast. * Provide either message (programmatic) or contentRef (declarative cdx-toast). */ export interface ToastOptions { /** * Toast message. Required for programmatic useToast(); omit when using contentRef. */ message?: string; /** * Ref that the container will assign to the content element. Used by declarative * cdx-toast so slot content is teleported into the container without raw HTML. */ contentRef?: Ref; /** * Toast type. Defaults to 'notice'. */ type?: StatusType; /** * Custom icon. Only allowed for notice toasts. */ icon?: Icon | null; /** * Optional action button configuration. */ actionButton?: ToastActionButton; /** * Whether to prevent the user from dismissing the toast. Defaults to false * (user can dismiss via close button or swipe). */ preventUserDismiss?: boolean; /** * Callback function when the toast is dismissed by the user. */ onUserDismissed?: () => void; /** * Callback function when the toast is automatically dismissed. */ onAutoDismissed?: () => void; /** * Enable automatic dismissal. Can be set to `true` for default 4000ms, * a number for custom duration in milliseconds, or `false` to disable. */ autoDismiss?: boolean | number; } /** * Toast instance with all required properties. */ export interface Toast extends ToastOptions { /** * Unique identifier for the toast. */ id: string; } /** * Toast as stored in reactive toastStore. contentRef is kept in contentRefsById. */ export type ToastInStore = Omit; /** * Updatable toast options. Used to reactively update a toast in the store (e.g. when * declarative CdxToast props change). Excludes message, contentRef, and callbacks. */ export type ToastUpdateOptions = Pick; /** * Return type for the useToast composable. */ export interface UseToastReturn { /** * Show a toast notification. * * @param options Toast options * @return Toast ID */ show: (options: ToastOptions) => string; /** * Dismiss a toast by ID. * * @param id Toast ID */ dismiss: (id: string) => void; /** * Update an existing toast by ID. Only display-related options are applied; * callbacks and contentRef are unchanged. Used by CdxToast to keep the store * in sync when props change. * * @param id Toast ID * @param options Partial updatable options */ update: (id: string, options: Partial) => void; /** * Clear all toasts. */ clear: () => void; /** * Show a success toast. * * @param message Toast message * @param opts Additional toast options (excluding message and type) * @return Toast ID */ success: (message: string, opts?: Omit) => string; /** * Show an error toast. * * @param message Toast message * @param opts Additional toast options (excluding message and type) * @return Toast ID */ error: (message: string, opts?: Omit) => string; /** * Show a notice/info toast. * * @param message Toast message * @param opts Additional toast options (excluding message and type) * @return Toast ID */ info: (message: string, opts?: Omit) => string; /** * Show a warning toast. * * @param message Toast message * @param opts Additional toast options (excluding message and type) * @return Toast ID */ warning: (message: string, opts?: Omit) => string; }