1092 lines
26 KiB
TypeScript
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;
|
|
}
|
|
}
|