1083 lines
27 KiB
TypeScript
1083 lines
27 KiB
TypeScript
/**
|
|
* MetonaToast TypeScript 类型定义
|
|
* @version 2.0.0
|
|
*/
|
|
|
|
// 基础类型
|
|
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';
|
|
|
|
type ToastPosition =
|
|
| 'top-left'
|
|
| 'top-center'
|
|
| 'top-right'
|
|
| 'bottom-left'
|
|
| 'bottom-center'
|
|
| 'bottom-right';
|
|
|
|
type ToastTheme =
|
|
| 'light'
|
|
| 'dark'
|
|
| 'auto'
|
|
| 'warm'
|
|
| (string & {}); // 自定义主题
|
|
|
|
type ToastAnimation =
|
|
| 'slide'
|
|
| 'fade'
|
|
| 'scale'
|
|
| 'bounce'
|
|
| 'flip'
|
|
| 'rotate'
|
|
| 'zoom'
|
|
| 'slideUp'
|
|
| 'slideDown'
|
|
| 'slideLeft'
|
|
| 'slideRight'
|
|
| (string & {}); // 自定义动画
|
|
|
|
type ToastProgressDirection = 'horizontal' | 'vertical';
|
|
|
|
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';
|
|
|
|
// 配置接口
|
|
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 按钮 */
|
|
interface ActionButton {
|
|
text: string;
|
|
onClick: (toast: ToastInstance) => void;
|
|
color?: string;
|
|
style?: Partial<CSSStyleDeclaration>;
|
|
close?: boolean;
|
|
}
|
|
|
|
/** 可取消的队列 */
|
|
interface QueueControl {
|
|
then: (onFulfilled?: (value: any) => any, onRejected?: (reason: any) => any) => Promise<any>;
|
|
catch: (onRejected?: (reason: any) => any) => Promise<any>;
|
|
cancel: () => void;
|
|
}
|
|
|
|
/** 分组API */
|
|
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 控制对象 */
|
|
interface ActionControl {
|
|
id: string;
|
|
toast: ToastInstance;
|
|
dismiss: () => void;
|
|
}
|
|
|
|
// Toast选项
|
|
interface ToastOptions extends ToastConfig {
|
|
/** Toast类型 */
|
|
type?: ToastType;
|
|
/** 标题 */
|
|
title?: string;
|
|
/** 消息内容 */
|
|
message?: string;
|
|
/** 别名 */
|
|
content?: string;
|
|
/** HTML内容 */
|
|
html?: string;
|
|
/** 自定义图标HTML */
|
|
iconHTML?: string;
|
|
/** 唯一标识符 */
|
|
id?: string;
|
|
}
|
|
|
|
// Toast实例
|
|
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控制对象
|
|
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;
|
|
}
|
|
|
|
// 进度控制对象
|
|
interface ProgressControl {
|
|
/** Toast ID */
|
|
id: string;
|
|
/** 设置进度 */
|
|
setProgress(percent: number): void;
|
|
/** 完成 */
|
|
complete(message?: string): void;
|
|
/** 错误 */
|
|
error(message?: string): void;
|
|
/** 关闭 */
|
|
dismiss(): void;
|
|
}
|
|
|
|
// 倒计时控制对象
|
|
interface CountdownControl {
|
|
/** Toast ID */
|
|
id: string;
|
|
/** 取消 */
|
|
cancel(): void;
|
|
/** 暂停 */
|
|
pause(): void;
|
|
/** 恢复 */
|
|
resume(): void;
|
|
}
|
|
|
|
// 插件接口
|
|
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;
|
|
}
|
|
|
|
// 插件管理器接口
|
|
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;
|
|
}
|
|
|
|
// 动画管理器接口
|
|
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;
|
|
}
|
|
|
|
// 动画配置
|
|
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';
|
|
}
|
|
|
|
// 动画选项
|
|
interface AnimationOptions {
|
|
/** 持续时间(毫秒) */
|
|
duration?: number;
|
|
/** 缓动函数 */
|
|
easing?: string;
|
|
/** 延迟(毫秒) */
|
|
delay?: number;
|
|
/** 迭代次数 */
|
|
iterations?: number;
|
|
/** 方向 */
|
|
direction?: 'normal' | 'reverse' | 'alternate' | 'alternate-reverse';
|
|
/** 填充模式 */
|
|
fillMode?: 'none' | 'forwards' | 'backwards' | 'both';
|
|
}
|
|
|
|
// 主题配置
|
|
interface ThemeConfig {
|
|
/** 背景色 */
|
|
bg: string;
|
|
/** 文字颜色 */
|
|
text: string;
|
|
/** 边框颜色 */
|
|
border: string;
|
|
/** 阴影 */
|
|
shadow: string;
|
|
/** 悬停阴影 */
|
|
hoverShadow: string;
|
|
/** 进度条背景 */
|
|
progressBg: string;
|
|
/** 关闭按钮悬停背景 */
|
|
closeHoverBg: string;
|
|
/** 背景模糊 */
|
|
backdropFilter?: string;
|
|
}
|
|
|
|
// 国际化配置
|
|
interface I18nConfig {
|
|
/** 翻译 */
|
|
translations: Record<string, string | Record<string, string>>;
|
|
/** 语言方向 */
|
|
direction?: 'ltr' | 'rtl';
|
|
}
|
|
|
|
// MeToast主对象接口
|
|
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>;
|
|
}
|
|
|
|
// 初始化选项
|
|
interface InitOptions {
|
|
/** 配置 */
|
|
config?: ToastConfig;
|
|
/** 主题 */
|
|
theme?: ToastTheme;
|
|
/** 语言 */
|
|
locale?: ToastLocale;
|
|
/** 插件 */
|
|
plugins?: Array<string | Plugin>;
|
|
}
|
|
|
|
// 状态信息
|
|
interface StatusInfo {
|
|
/** 版本号 */
|
|
version: string;
|
|
/** Toast数量 */
|
|
toasts: number;
|
|
/** 当前主题 */
|
|
theme: string;
|
|
/** 当前语言 */
|
|
locale: string;
|
|
/** 已安装插件 */
|
|
plugins: string[];
|
|
/** 活动动画数量 */
|
|
animations: number;
|
|
}
|
|
|
|
// Promise选项
|
|
interface PromiseOptions extends ToastOptions {
|
|
/** 加载消息 */
|
|
loading?: string;
|
|
/** 成功消息 */
|
|
success?: string;
|
|
/** 错误消息 */
|
|
error?: string;
|
|
}
|
|
|
|
// 确认选项
|
|
interface ConfirmOptions extends ToastOptions {
|
|
/** 确认按钮文字 */
|
|
confirmText?: string;
|
|
/** 确认按钮颜色 */
|
|
confirmColor?: string;
|
|
/** 取消按钮文字 */
|
|
cancelText?: string;
|
|
/** 取消按钮颜色 */
|
|
cancelColor?: string;
|
|
}
|
|
|
|
// 输入选项
|
|
interface PromptOptions extends ToastOptions {
|
|
/** 输入框类型 */
|
|
inputType?: string;
|
|
/** 占位符 */
|
|
placeholder?: string;
|
|
/** 默认值 */
|
|
defaultValue?: string;
|
|
/** 提交按钮文字 */
|
|
submitText?: string;
|
|
/** 提交按钮颜色 */
|
|
submitColor?: string;
|
|
/** 取消按钮文字 */
|
|
cancelText?: string;
|
|
/** 取消按钮颜色 */
|
|
cancelColor?: string;
|
|
}
|
|
|
|
// 进度选项
|
|
interface ProgressOptions extends ToastOptions {
|
|
/** 进度条颜色 */
|
|
progressColor?: string;
|
|
}
|
|
|
|
// 倒计时选项
|
|
interface CountdownOptions extends ToastOptions {
|
|
/** 完成回调 */
|
|
onComplete?: () => void;
|
|
}
|
|
|
|
// 队列选项
|
|
interface QueueOptions extends ToastOptions {
|
|
/** 延迟(毫秒) */
|
|
delay?: number;
|
|
}
|
|
|
|
// 堆叠选项
|
|
interface StackOptions extends ToastOptions {
|
|
/** 交错时间(毫秒) */
|
|
stagger?: number;
|
|
}
|
|
|
|
// 动画工具接口
|
|
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;
|
|
}
|
|
|
|
// 主题工具接口
|
|
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;
|
|
}
|
|
|
|
// 主题预览
|
|
interface ThemePreview {
|
|
/** 主题名称 */
|
|
name: string;
|
|
/** 解析后的主题 */
|
|
resolved: 'light' | 'dark';
|
|
/** 颜色 */
|
|
colors: {
|
|
background: string;
|
|
text: string;
|
|
border: string;
|
|
};
|
|
/** 是否为暗色主题 */
|
|
isDark: boolean;
|
|
/** 是否为亮色主题 */
|
|
isLight: boolean;
|
|
/** 是否为自动主题 */
|
|
isAuto: boolean;
|
|
}
|
|
|
|
// 国际化工具接口
|
|
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;
|
|
}
|
|
|
|
// 语言信息
|
|
interface LocaleInfo {
|
|
/** 语言代码 */
|
|
code: ToastLocale;
|
|
/** 语言名称 */
|
|
name: string;
|
|
/** 语言方向 */
|
|
direction: 'ltr' | 'rtl';
|
|
/** 是否支持 */
|
|
isSupported: boolean;
|
|
/** 是否为当前语言 */
|
|
isCurrent: boolean;
|
|
/** 是否为回退语言 */
|
|
isFallback: boolean;
|
|
}
|
|
|
|
// 插件工具接口
|
|
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[] };
|
|
}
|
|
|
|
// 钩子名称
|
|
declare 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 VERSION: string;
|
|
|
|
// 默认导出
|
|
declare const metonaToast: MeToast;
|
|
|
|
|
|
// Toast类
|
|
declare 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;
|
|
}
|
|
}
|
|
|
|
export { ActionButton, ActionControl, AnimationConfig, AnimationManager, AnimationOptions, AnimationUtils, ConfirmOptions, CountdownControl, CountdownOptions, GroupAPI, HOOK_NAMES, I18nConfig, I18nUtils, InitOptions, LoadingControl, LocaleInfo, MeToast, metonaToast as Met, Plugin, PluginManager, PluginUtils, ProgressControl, ProgressOptions, PromiseOptions, PromptOptions, QueueControl, QueueOptions, StackOptions, StatusInfo, ThemeConfig, ThemePreview, ThemeUtils, Toast, ToastAnimation, ToastConfig, ToastInstance, ToastLocale, ToastOptions, ToastPosition, ToastProgressDirection, ToastTheme, ToastType, VERSION, metonaToast as default, metonaToast as meToast };
|