/**
 * Reactive alert queue shared between `createAlert()` (provider) and `useAlert()` (consumer).
 *
 * ## Setup
 * `createAlert()` must be called **once** in an ancestor component — typically the root
 * `app.vue` in a Nuxt app — to register the provider via Vue `provide()`. The `<Alert />`
 * component only *consumes* the queue; it does not set it up. If no ancestor calls
 * `createAlert()`, every `useAlert()` call returns `null` and toast pushes will throw.
 *
 * ```vue
 * <!-- app.vue -->
 * <script lang="ts" setup>
 * createAlert()
 * </script>
 *
 * <template>
 *   <VApp>
 *     <NuxtLayout><NuxtPage /></NuxtLayout>
 *     <DialogHost />
 *     <Alert />
 *   </VApp>
 * </template>
 * ```
 *
 * ## Usage
 * `useAlert()` returns an `AlertProvide | null`. There are **no** convenience methods
 * like `.success()` / `.error()` / `.warning()` / `.info()` — push items via `addAlert`:
 *
 * ```ts
 * const alert = useAlert()
 * alert?.addAlert({ alertType: 'success', message: 'Saved' })
 * alert?.addAlert({ alertType: 'error',   message: 'Failed: ' + err.message })
 * alert?.addAlert({ alertType: 'warning', message: 'Check your input' })
 * alert?.addAlert({ alertType: 'info',    message: 'Processing...' })
 * ```
 *
 * `alertType` must be one of `'success' | 'error' | 'warning' | 'info'`. `message` is
 * required — items without a `message` are silently dropped. Optional fields:
 * `alertLocation` (default `'default'`, lets multiple `<Alert />` hosts filter),
 * `alertExpireIn` (ms, default 60000), `alertIcon`, `data`.
 *
 * Always null-check the handle: `alert?.addAlert(...)`.
 *
 * ## Returned API (`AlertProvide`)
 * - `addAlert(item)` — push a new alert onto the queue.
 * - `takeAlert(location?)` — pop the next alert for the given location (default `'default'`).
 * - `hasAlert(location?)` — whether anything is queued for the given location.
 * - `clear()` — drop all queued alerts.
 * - `items` — the underlying reactive ref (for custom consumers).
 *
 * Expired items (past `alertDateTime + alertExpireIn`) are auto-pruned once per second.
 */
import { type InjectionKey, type Ref } from 'vue';
import type { AlertItem } from '../types/alert.js';
interface AlertProvide {
    addAlert: (item: Partial<AlertItem>) => void;
    takeAlert: (location?: string) => AlertItem | undefined;
    hasAlert: (location?: string) => boolean;
    clear: () => void;
    items: Ref<AlertItem[]>;
}
export declare const AlertKey: InjectionKey<AlertProvide>;
export declare function createAlert(): void;
export declare function useAlert(): AlertProvide | null;
export {};
