Files
MetonaToast/types/index.d.ts
T

1092 lines
26 KiB
TypeScript

/**
* MetonaToast TypeScript 类型定义
* @version 2.0.0
*/
// 基础类型
export type ToastType =
| 'default'
| 'success'
| 'error'
| 'warning'
| 'info'
| 'loading'
| 'check'
| 'x'
| 'alert'
| 'question'
| 'star'
| 'heart'
| 'bell'
| 'mail'
| 'settings'
| 'user'
| 'home'
| 'search'
| 'plus'
| 'minus'
| 'edit'
| 'trash'
| 'download'
| 'upload'
| 'share'
| 'link'
| 'external'
| 'clock'
| 'calendar'
| 'map'
| 'compass'
| 'globe'
| 'wifi'
| 'cloud'
| 'sun'
| 'moon'
| 'zap'
| 'activity'
| 'cpu'
| 'database'
| 'server'
| 'terminal'
| 'code'
| 'git'
| 'package'
| 'layers'
| 'grid'
| 'list'
| 'filter'
| 'sort'
| 'refresh'
| 'sync'
| 'power'
| 'battery'
| 'bluetooth'
| 'volume'
| 'mic'
| 'camera'
| 'image'
| 'video'
| 'music'
| 'file'
| 'folder'
| 'clipboard'
| 'save'
| 'print'
| 'eye'
| 'eyeOff'
| 'lock'
| 'unlock'
| 'shield'
| 'key'
| 'flag'
| 'bookmark'
| 'tag'
| 'gift'
| 'award'
| 'target'
| 'crosshair'
| 'move'
| 'maximize'
| 'minimize'
| 'copy'
| 'cut'
| 'paste'
| 'rotateCw'
| 'rotateCcw'
| 'zoomIn'
| 'zoomOut'
| 'crop'
| 'sliders'
| 'toggleLeft'
| 'toggleRight'
| 'checkCircle'
| 'xCircle'
| 'alertCircle'
| 'infoCircle'
| 'helpCircle'
| 'alertTriangle'
| 'checkSquare'
| 'square'
| 'circle'
| 'triangle'
| 'hexagon'
| 'octagon'
| 'pentagon'
| 'diamond';
export type ToastPosition =
| 'top-left'
| 'top-center'
| 'top-right'
| 'bottom-left'
| 'bottom-center'
| 'bottom-right';
export type ToastTheme =
| 'light'
| 'dark'
| 'auto'
| 'warm'
| (string & {}); // 自定义主题
export type ToastAnimation =
| 'slide'
| 'fade'
| 'scale'
| 'bounce'
| 'flip'
| 'rotate'
| 'zoom'
| 'slideUp'
| 'slideDown'
| 'slideLeft'
| 'slideRight'
| (string & {}); // 自定义动画
export type ToastProgressDirection = 'horizontal' | 'vertical';
export type ToastLocale =
| 'zh-CN'
| 'zh-TW'
| 'en-US'
| 'en-GB'
| 'ja'
| 'ko'
| 'fr'
| 'de'
| 'es'
| 'pt'
| 'ru'
| 'ar'
| 'hi'
| 'th'
| 'vi'
| 'id'
| 'ms'
| 'tr'
| 'it'
| 'nl'
| 'pl'
| 'uk'
| 'cs'
| 'sv'
| 'da'
| 'fi'
| 'nb'
| 'el'
| 'he'
| 'hu'
| 'ro'
| 'bg'
| 'hr'
| 'sk'
| 'sl'
| 'et'
| 'lv'
| 'lt'
| 'ca'
| 'gl'
| 'eu'
| 'cy'
| 'ga'
| 'mt'
| 'is'
| 'mk'
| 'sq'
| 'sr'
| 'bs'
| 'me'
| 'ka'
| 'hy'
| 'az'
| 'uz'
| 'kk'
| 'ky'
| 'tg'
| 'tk'
| 'mn'
| 'ne'
| 'si'
| 'my'
| 'km'
| 'lo'
| 'am'
| 'sw'
| 'yo'
| 'ig'
| 'ha'
| 'zu'
| 'af'
| 'xh'
| 'st'
| 'tn'
| 'ts'
| 'ss'
| 've'
| 'nr';
// 配置接口
export interface ToastConfig {
/** Toast位置 */
position?: ToastPosition;
/** 显示时长(毫秒),0表示不自动关闭 */
duration?: number;
/** 最大显示数量 */
max?: number;
/** Toast间距 */
gap?: number;
/** 边距 */
offset?: number;
/** 悬停时暂停计时 */
pauseOnHover?: boolean;
/** 点击关闭 */
closeOnClick?: boolean;
/** 显示进度条 */
showProgress?: boolean;
/** 进度条方向 */
progressDirection?: ToastProgressDirection;
/** 主题 */
theme?: ToastTheme;
/** 显示图标 */
icon?: boolean;
/** 显示关闭按钮 */
closeButton?: boolean;
/** 允许拖拽 */
draggable?: boolean;
/** 动画效果 */
animation?: ToastAnimation;
/** z-index */
zIndex?: number;
/** 宽度 */
width?: number | string;
/** 自定义类名 */
className?: string;
/** 自定义样式 */
style?: Partial<CSSStyleDeclaration>;
/** 显示回调 */
onShow?: (toast: ToastInstance) => void;
/** 关闭回调 */
onClose?: (toast: ToastInstance) => void;
/** 点击回调 */
onClick?: (toast: ToastInstance) => void;
/** 更新回调 */
onUpdate?: (toast: ToastInstance) => void;
/** 自定义渲染函数 */
render?: (toast: ToastInstance) => string;
/** 更新时重置计时器 */
resetTimerOnUpdate?: boolean;
/** 后台发送系统通知 */
notifyWhenHidden?: boolean;
/** 分组名称 */
group?: string;
/** 语言 */
locale?: ToastLocale;
/** 插件 */
plugins?: Array<string | Plugin>;
}
/** Action Toast 按钮 */
export interface ActionButton {
text: string;
onClick: (toast: ToastInstance) => void;
color?: string;
style?: Partial<CSSStyleDeclaration>;
close?: boolean;
}
/** 可取消的队列 */
export interface QueueControl {
then: (onFulfilled?: (value: any) => any, onRejected?: (reason: any) => any) => Promise<any>;
catch: (onRejected?: (reason: any) => any) => Promise<any>;
cancel: () => void;
}
/** 分组API */
export interface GroupAPI {
show: (messageOrOpts: string | ToastOptions, opts?: ToastOptions) => ToastInstance;
success: (messageOrOpts: string | ToastOptions, opts?: ToastOptions) => ToastInstance;
error: (messageOrOpts: string | ToastOptions, opts?: ToastOptions) => ToastInstance;
warning: (messageOrOpts: string | ToastOptions, opts?: ToastOptions) => ToastInstance;
info: (messageOrOpts: string | ToastOptions, opts?: ToastOptions) => ToastInstance;
loading: (messageOrOpts: string | ToastOptions, opts?: ToastOptions) => LoadingControl;
action: (messageOrOpts: string | ToastOptions, actions: ActionButton[], opts?: ToastOptions) => ActionControl;
dismiss: () => void;
count: () => number;
}
/** Action Toast 控制对象 */
export interface ActionControl {
id: string;
toast: ToastInstance;
dismiss: () => void;
}
// Toast选项
export interface ToastOptions extends ToastConfig {
/** Toast类型 */
type?: ToastType;
/** 标题 */
title?: string;
/** 消息内容 */
message?: string;
/** 别名 */
content?: string;
/** HTML内容 */
html?: string;
/** 自定义图标HTML */
iconHTML?: string;
/** 唯一标识符 */
id?: string;
}
// Toast实例
export interface ToastInstance {
/** 唯一标识符 */
id: string;
/** Toast类型 */
type: ToastType;
/** 标题 */
title: string;
/** 消息内容 */
message: string;
/** HTML内容 */
html: string;
/** 配置 */
config: Required<ToastConfig>;
/** DOM元素 */
el: HTMLElement | null;
/** 进度条元素 */
barEl: HTMLElement | null;
/** 动画帧ID */
rafId: number | null;
/** 剩余时间 */
remaining: number;
/** 开始时间 */
startedAt: number;
/** 是否暂停 */
paused: boolean;
/** 是否关闭中 */
closing: boolean;
/** 创建Toast */
create(): ToastInstance;
/** 更新Toast */
update(partial: Partial<ToastOptions>): ToastInstance;
/** 关闭Toast */
close(immediate?: boolean): void;
}
// Loading控制对象
export interface LoadingControl {
/** Toast ID */
id: string;
/** 显示成功 */
success(message?: string, options?: ToastOptions): ToastInstance | null;
/** 显示错误 */
error(message?: string, options?: ToastOptions): ToastInstance | null;
/** 显示信息 */
info(message?: string, options?: ToastOptions): ToastInstance | null;
/** 显示警告 */
warning(message?: string, options?: ToastOptions): ToastInstance | null;
/** 更新 */
update(partial: Partial<ToastOptions>): MeToast;
/** 关闭 */
dismiss(): void;
}
// 进度控制对象
export interface ProgressControl {
/** Toast ID */
id: string;
/** 设置进度 */
setProgress(percent: number): void;
/** 完成 */
complete(message?: string): void;
/** 错误 */
error(message?: string): void;
/** 关闭 */
dismiss(): void;
}
// 倒计时控制对象
export interface CountdownControl {
/** Toast ID */
id: string;
/** 取消 */
cancel(): void;
/** 暂停 */
pause(): void;
/** 恢复 */
resume(): void;
}
// 插件接口
export interface Plugin {
/** 插件名称 */
name?: string;
/** 插件版本 */
version?: string;
/** 插件描述 */
description?: string;
/** 钩子 */
hooks?: Record<string, Function>;
/** 中间件 */
middleware?: Function;
/** 安装 */
install?: (manager: PluginManager) => void;
/** 卸载 */
uninstall?: (manager: PluginManager) => void;
/** 初始化 */
init?: (manager: PluginManager) => void;
/** 销毁 */
destroy?: (manager: PluginManager) => void;
[key: string]: any;
}
// 插件管理器接口
export interface PluginManager {
/** 注册插件 */
register(name: string, plugin: Plugin): PluginManager;
/** 注销插件 */
unregister(name: string): PluginManager;
/** 获取插件 */
get(name: string): Plugin | null;
/** 检查插件是否存在 */
has(name: string): boolean;
/** 启用插件 */
enable(name: string): PluginManager;
/** 禁用插件 */
disable(name: string): PluginManager;
/** 检查插件是否启用 */
isEnabled(name: string): boolean;
/** 获取所有插件 */
getAll(): Plugin[];
/** 获取插件名称 */
getNames(): string[];
/** 注册中间件 */
use(middleware: Function): PluginManager;
/** 移除中间件 */
removeMiddleware(middleware: Function): PluginManager;
/** 触发钩子 */
trigger(hookName: string, context: any, ...args: any[]): Promise<any>;
/** 触发同步钩子 */
triggerSync(hookName: string, context: any, ...args: any): any;
/** 执行中间件 */
executeMiddleware(context: any, next: Function): Promise<any>;
/** 获取所有钩子 */
getHooks(): Map<string, Array<{ pluginName: string; handler: Function }>>;
/** 检查钩子是否存在 */
hasHook(hookName: string): boolean;
/** 获取所有中间件 */
getMiddleware(): Function[];
/** 清除所有钩子 */
clearHooks(): void;
/** 清除所有中间件 */
clearMiddleware(): void;
/** 重置 */
reset(): void;
/** 初始化 */
init(): void;
/** 销毁 */
destroy(): void;
}
// 动画管理器接口
export interface AnimationManager {
/** 注册动画 */
register(name: string, config: AnimationConfig): void;
/** 注销动画 */
unregister(name: string): void;
/** 获取动画配置 */
get(name: string): AnimationConfig | null;
/** 应用动画 */
apply(element: HTMLElement, animationName: string, options?: AnimationOptions): Promise<void>;
/** 应用进入动画 */
enter(element: HTMLElement, animationName: string, options?: AnimationOptions): Promise<void>;
/** 应用离开动画 */
leave(element: HTMLElement, animationName: string, options?: AnimationOptions): Promise<void>;
/** 取消所有动画 */
cancelAll(): void;
/** 取消元素动画 */
cancel(element: HTMLElement): void;
/** 暂停所有动画 */
pauseAll(): void;
/** 恢复所有动画 */
resumeAll(): void;
/** 暂停元素动画 */
pause(element: HTMLElement): void;
/** 恢复元素动画 */
resume(element: HTMLElement): void;
/** 获取活动动画数量 */
getActiveCount(): number;
/** 获取所有活动动画 */
getActiveAnimations(): Map<number, { element: HTMLElement; animation: Animation; config: AnimationConfig }>;
/** 检查元素是否有活动动画 */
hasActiveAnimation(element: HTMLElement): boolean;
/** 获取动画配置 */
getConfig(): { animations: string[]; activeCount: number };
/** 重置 */
reset(): void;
/** 销毁 */
destroy(): void;
}
// 动画配置
export interface AnimationConfig {
/** 进入状态 */
enter: Partial<CSSStyleDeclaration>;
/** 离开状态 */
leave: Partial<CSSStyleDeclaration>;
/** 持续时间(毫秒) */
duration?: number;
/** 缓动函数 */
easing?: string;
/** 延迟(毫秒) */
delay?: number;
/** 迭代次数 */
iterations?: number;
/** 方向 */
direction?: 'normal' | 'reverse' | 'alternate' | 'alternate-reverse';
/** 填充模式 */
fillMode?: 'none' | 'forwards' | 'backwards' | 'both';
}
// 动画选项
export interface AnimationOptions {
/** 持续时间(毫秒) */
duration?: number;
/** 缓动函数 */
easing?: string;
/** 延迟(毫秒) */
delay?: number;
/** 迭代次数 */
iterations?: number;
/** 方向 */
direction?: 'normal' | 'reverse' | 'alternate' | 'alternate-reverse';
/** 填充模式 */
fillMode?: 'none' | 'forwards' | 'backwards' | 'both';
}
// 主题配置
export interface ThemeConfig {
/** 背景色 */
bg: string;
/** 文字颜色 */
text: string;
/** 边框颜色 */
border: string;
/** 阴影 */
shadow: string;
/** 悬停阴影 */
hoverShadow: string;
/** 进度条背景 */
progressBg: string;
/** 关闭按钮悬停背景 */
closeHoverBg: string;
/** 背景模糊 */
backdropFilter?: string;
}
// 国际化配置
export interface I18nConfig {
/** 翻译 */
translations: Record<string, string | Record<string, string>>;
/** 语言方向 */
direction?: 'ltr' | 'rtl';
}
// MeToast主对象接口
export interface MeToast {
/** 版本号 */
version: string;
// 核心方法
/** 配置 */
configure(options: ToastConfig): MeToast;
/** 初始化 */
init(options?: InitOptions): MeToast;
/** 销毁 */
destroy(): void;
/** 获取状态 */
getStatus(): StatusInfo;
/** 获取配置 */
getConfig(): Required<ToastConfig>;
/** 更新配置 */
updateConfig(config: Partial<ToastConfig>): MeToast;
/** 重置配置 */
resetConfig(): MeToast;
// Toast方法
/** 显示Toast */
show(message: string, options?: ToastOptions): ToastInstance;
/** 显示成功Toast */
success(message: string, options?: ToastOptions): ToastInstance;
/** 显示错误Toast */
error(message: string, options?: ToastOptions): ToastInstance;
/** 显示警告Toast */
warning(message: string, options?: ToastOptions): ToastInstance;
/** 显示信息Toast */
info(message: string, options?: ToastOptions): ToastInstance;
/** 显示加载Toast */
loading(message: string, options?: ToastOptions): LoadingControl;
/** Promise风格Toast */
promise<T>(promise: Promise<T>, options?: PromiseOptions): Promise<T>;
/** 确认对话框 */
confirm(message: string, options?: ConfirmOptions): Promise<boolean>;
/** 输入对话框 */
prompt(message: string, options?: PromptOptions): Promise<string | null>;
/** 进度Toast */
progress(message: string, options?: ProgressOptions): ProgressControl;
/** 倒计时Toast */
countdown(message: string, seconds: number, options?: CountdownOptions): CountdownControl;
/** Action Toast */
action(message: string, actions: ActionButton[], options?: ToastOptions): ActionControl;
/** 队列Toast */
queue(messages: Array<string | ToastOptions>, options?: QueueOptions): QueueControl;
/** 堆叠Toast */
stack(messages: Array<string | ToastOptions>, options?: StackOptions): void;
// 分组管理
/** 创建分组 */
group(name: string): GroupAPI;
/** 按组关闭 */
dismissGroup(name: string): void;
// Toast管理
/** 查找Toast */
find(id: string): ToastInstance | undefined;
/** 关闭Toast */
dismiss(id?: string): void;
/** 清除Toast */
clear(position?: ToastPosition): void;
/** 获取所有Toast */
getToasts(): ToastInstance[];
/** 获取Toast数量 */
count(): number;
/** 检查是否有Toast */
hasToasts(): boolean;
/** 获取Toast */
getToast(id: string): ToastInstance | null;
/** 关闭所有Toast */
closeAll(): void;
/** 清除所有Toast */
clearAll(): void;
/** 暂停所有Toast */
pauseAll(): void;
/** 恢复所有Toast */
resumeAll(): void;
/** 更新所有Toast */
updateAll(partial: Partial<ToastOptions>): void;
/** 查找Toast */
findToasts(predicate: (toast: ToastInstance) => boolean): ToastInstance[];
/** 按类型查找Toast */
findByType(type: ToastType): ToastInstance[];
/** 按位置查找Toast */
findByPosition(position: ToastPosition): ToastInstance[];
// 插件系统
/** 安装插件 */
use(plugin: string | Plugin, options?: Record<string, any>): MeToast;
// 模块引用
/** 动画模块 */
animations: AnimationUtils;
/** 主题模块 */
themes: ThemeUtils;
/** 国际化模块 */
i18n: I18nUtils;
/** 插件模块 */
plugins: PluginUtils;
/** 预设插件 */
presetPlugins: Record<string, Plugin>;
}
// 初始化选项
export interface InitOptions {
/** 配置 */
config?: ToastConfig;
/** 主题 */
theme?: ToastTheme;
/** 语言 */
locale?: ToastLocale;
/** 插件 */
plugins?: Array<string | Plugin>;
}
// 状态信息
export interface StatusInfo {
/** 版本号 */
version: string;
/** Toast数量 */
toasts: number;
/** 当前主题 */
theme: string;
/** 当前语言 */
locale: string;
/** 已安装插件 */
plugins: string[];
/** 活动动画数量 */
animations: number;
}
// Promise选项
export interface PromiseOptions extends ToastOptions {
/** 加载消息 */
loading?: string;
/** 成功消息 */
success?: string;
/** 错误消息 */
error?: string;
}
// 确认选项
export interface ConfirmOptions extends ToastOptions {
/** 确认按钮文字 */
confirmText?: string;
/** 确认按钮颜色 */
confirmColor?: string;
/** 取消按钮文字 */
cancelText?: string;
/** 取消按钮颜色 */
cancelColor?: string;
}
// 输入选项
export interface PromptOptions extends ToastOptions {
/** 输入框类型 */
inputType?: string;
/** 占位符 */
placeholder?: string;
/** 默认值 */
defaultValue?: string;
/** 提交按钮文字 */
submitText?: string;
/** 提交按钮颜色 */
submitColor?: string;
/** 取消按钮文字 */
cancelText?: string;
/** 取消按钮颜色 */
cancelColor?: string;
}
// 进度选项
export interface ProgressOptions extends ToastOptions {
/** 进度条颜色 */
progressColor?: string;
}
// 倒计时选项
export interface CountdownOptions extends ToastOptions {
/** 完成回调 */
onComplete?: () => void;
}
// 队列选项
export interface QueueOptions extends ToastOptions {
/** 延迟(毫秒) */
delay?: number;
}
// 堆叠选项
export interface StackOptions extends ToastOptions {
/** 交错时间(毫秒) */
stagger?: number;
}
// 动画工具接口
export interface AnimationUtils {
/** 应用动画 */
apply(element: HTMLElement, animationName: string, options?: AnimationOptions): Promise<void>;
/** 应用进入动画 */
enter(element: HTMLElement, animationName: string, options?: AnimationOptions): Promise<void>;
/** 应用离开动画 */
leave(element: HTMLElement, animationName: string, options?: AnimationOptions): Promise<void>;
/** 取消所有动画 */
cancelAll(): void;
/** 取消元素动画 */
cancel(element: HTMLElement): void;
/** 暂停所有动画 */
pauseAll(): void;
/** 恢复所有动画 */
resumeAll(): void;
/** 暂停元素动画 */
pause(element: HTMLElement): void;
/** 恢复元素动画 */
resume(element: HTMLElement): void;
/** 获取活动动画数量 */
getActiveCount(): number;
/** 检查元素是否有活动动画 */
hasActiveAnimation(element: HTMLElement): boolean;
/** 注册动画 */
register(name: string, config: AnimationConfig): void;
/** 注销动画 */
unregister(name: string): void;
/** 获取动画配置 */
get(name: string): AnimationConfig | null;
/** 获取所有动画名称 */
getAnimationNames(): string[];
/** 获取动画配置 */
getConfig(): { animations: string[]; activeCount: number };
/** 重置 */
reset(): void;
/** 销毁 */
destroy(): void;
}
// 主题工具接口
export interface ThemeUtils {
/** 获取系统主题 */
getSystemTheme(): 'light' | 'dark';
/** 解析主题 */
resolveTheme(theme: ToastTheme): 'light' | 'dark';
/** 获取主题配置 */
getThemeConfig(theme: ToastTheme): ThemeConfig;
/** 应用主题 */
applyTheme(theme: ToastTheme): void;
/** 获取当前主题 */
getCurrentTheme(): ToastTheme;
/** 获取解析后的主题 */
getResolvedTheme(): 'light' | 'dark';
/** 切换主题 */
switchTheme(theme: ToastTheme): void;
/** 切换亮色/暗色主题 */
toggleTheme(): void;
/** 重置为自动主题 */
resetToAuto(): void;
/** 初始化主题系统 */
initTheme(): void;
/** 监听系统主题变化 */
watchSystemTheme(): void;
/** 停止监听系统主题变化 */
unwatchSystemTheme(): void;
/** 添加主题监听器 */
addThemeListener(listener: (theme: ToastTheme, resolved: 'light' | 'dark') => void): () => void;
/** 移除主题监听器 */
removeThemeListener(listener: Function): void;
/** 清除所有主题监听器 */
clearThemeListeners(): void;
/** 注册自定义主题 */
registerTheme(name: string, config: ThemeConfig): void;
/** 注销自定义主题 */
unregisterTheme(name: string): void;
/** 获取所有主题 */
getAllThemes(): Record<string, ThemeConfig>;
/** 获取主题名称列表 */
getThemeNames(): string[];
/** 检查主题是否存在 */
hasTheme(name: string): boolean;
/** 获取主题预览 */
getThemePreview(theme: ToastTheme): ThemePreview;
/** 生成主题CSS */
generateThemeCSS(theme: ToastTheme): string;
/** 应用主题CSS */
applyThemeCSS(theme: ToastTheme): void;
/** 移除主题CSS */
removeThemeCSS(): void;
/** 保存主题 */
saveTheme(theme: ToastTheme): void;
/** 加载主题 */
loadTheme(): ToastTheme;
}
// 主题预览
export interface ThemePreview {
/** 主题名称 */
name: string;
/** 解析后的主题 */
resolved: 'light' | 'dark';
/** 颜色 */
colors: {
background: string;
text: string;
border: string;
};
/** 是否为暗色主题 */
isDark: boolean;
/** 是否为亮色主题 */
isLight: boolean;
/** 是否为自动主题 */
isAuto: boolean;
}
// 国际化工具接口
export interface I18nUtils {
/** 翻译 */
t(key: string, params?: Record<string, any>): string;
/** 复数翻译 */
plural(key: string, count: number, params?: Record<string, any>): string;
/** 获取当前语言 */
getCurrentLocale(): ToastLocale;
/** 设置当前语言 */
setCurrentLocale(locale: ToastLocale): void;
/** 切换语言 */
switchLocale(locale: ToastLocale): void;
/** 获取回退语言 */
getFallbackLocale(): ToastLocale;
/** 设置回退语言 */
setFallbackLocale(locale: ToastLocale): void;
/** 检查翻译是否存在 */
hasTranslation(key: string): boolean;
/** 获取所有翻译 */
getTranslations(locale: ToastLocale): Record<string, any>;
/** 添加翻译 */
addTranslations(locale: ToastLocale, translations: Record<string, any>): void;
/** 移除翻译 */
removeTranslation(locale: ToastLocale, key: string): void;
/** 清除翻译 */
clearTranslations(locale: ToastLocale): void;
/** 获取支持的语言列表 */
getSupportedLocales(): ToastLocale[];
/** 检查语言是否支持 */
isLocaleSupported(locale: string): boolean;
/** 获取语言名称 */
getLocaleName(locale: ToastLocale): string;
/** 获取语言方向 */
getLocaleDirection(locale: ToastLocale): 'ltr' | 'rtl';
/** 获取语言信息 */
getLocaleInfo(locale: ToastLocale): LocaleInfo;
/** 获取所有语言信息 */
getAllLocaleInfo(): LocaleInfo[];
/** 格式化数字 */
formatNumber(number: number, options?: Intl.NumberFormatOptions): string;
/** 格式化货币 */
formatCurrency(amount: number, currency?: string, options?: Intl.NumberFormatOptions): string;
/** 格式化百分比 */
formatPercent(value: number, options?: Intl.NumberFormatOptions): string;
/** 格式化日期 */
formatDate(date: Date | number | string, options?: Intl.DateTimeFormatOptions): string;
/** 格式化时间 */
formatTime(date: Date | number | string, options?: Intl.DateTimeFormatOptions): string;
/** 格式化相对时间 */
formatRelativeTime(date: Date | number | string, options?: Intl.RelativeTimeFormatOptions): string;
/** 格式化列表 */
formatList(list: string[], options?: Intl.ListFormatOptions): string;
/** 格式化复数 */
formatPlural(count: number, options?: Intl.PluralRulesOptions): string;
/** 添加语言监听器 */
addLocaleListener(listener: (locale: ToastLocale) => void): () => void;
/** 移除语言监听器 */
removeLocaleListener(listener: Function): void;
/** 清除所有语言监听器 */
clearLocaleListeners(): void;
/** 初始化国际化系统 */
initI18n(): void;
/** 保存语言 */
saveLocale(locale: ToastLocale): void;
/** 加载语言 */
loadLocale(): ToastLocale;
/** 获取默认语言 */
getDefaultLocale(): ToastLocale;
}
// 语言信息
export interface LocaleInfo {
/** 语言代码 */
code: ToastLocale;
/** 语言名称 */
name: string;
/** 语言方向 */
direction: 'ltr' | 'rtl';
/** 是否支持 */
isSupported: boolean;
/** 是否为当前语言 */
isCurrent: boolean;
/** 是否为回退语言 */
isFallback: boolean;
}
// 插件工具接口
export interface PluginUtils {
/** 创建插件管理器 */
createManager(): PluginManager;
/** 注册插件 */
register(name: string, plugin: Plugin): void;
/** 获取插件 */
get(name: string): Plugin | null;
/** 获取所有插件 */
getAll(): Plugin[];
/** 获取预设插件 */
getPreset(name: string): Plugin | null;
/** 获取所有预设插件 */
getAllPresets(): Record<string, Plugin>;
/** 创建插件 */
createPlugin(config: Plugin): Plugin;
/** 验证插件 */
validatePlugin(plugin: Plugin): { valid: boolean; errors: string[] };
}
// 钩子名称
export const HOOK_NAMES: {
BEFORE_INIT: 'beforeInit';
AFTER_INIT: 'afterInit';
BEFORE_DESTROY: 'beforeDestroy';
AFTER_DESTROY: 'afterDestroy';
BEFORE_SHOW: 'beforeShow';
AFTER_SHOW: 'afterShow';
BEFORE_CLOSE: 'beforeClose';
AFTER_CLOSE: 'afterClose';
BEFORE_UPDATE: 'beforeUpdate';
AFTER_UPDATE: 'afterUpdate';
CONFIG_CHANGE: 'configChange';
THEME_CHANGE: 'themeChange';
LOCALE_CHANGE: 'localeChange';
CLICK: 'click';
HOVER: 'hover';
DRAG_START: 'dragStart';
DRAG_END: 'dragEnd';
ANIMATION_START: 'animationStart';
ANIMATION_END: 'animationEnd';
PROGRESS_START: 'progressStart';
PROGRESS_UPDATE: 'progressUpdate';
PROGRESS_END: 'progressEnd';
ERROR: 'error';
CUSTOM: 'custom';
};
// 预设插件
declare const presetPlugins: {
keyboard: Plugin;
persistence: Plugin;
accessibility: Plugin;
};
// 版本号
export const VERSION: string;
// 默认导出
declare const metonaToast: MeToast;
export default metonaToast;
// 命名导出
export { metonaToast as meToast, metonaToast as Met, metonaToast as MeToast };
// Toast类
export class Toast implements ToastInstance {
id: string;
type: ToastType;
title: string;
message: string;
html: string;
config: Required<ToastConfig>;
el: HTMLElement | null;
barEl: HTMLElement | null;
rafId: number | null;
remaining: number;
startedAt: number;
paused: boolean;
closing: boolean;
constructor(opts: ToastOptions);
create(): Toast;
update(partial: Partial<ToastOptions>): Toast;
close(immediate?: boolean): void;
}
// 全局声明
declare global {
interface Window {
MeToast: MeToast;
Met: MeToast;
metonaToast: MeToast;
}
}