Files
MetonaToast/src/constants.js
T

334 lines
12 KiB
JavaScript

/**
* MetonaToast Constants - 常量定义
* @module constants
* @version 2.0.0
* @description 默认配置、颜色、动画、主题等常量
*/
/**
* 默认配置
*/
export const DEFAULTS = Object.freeze({
// 基础配置
position: 'top-right',
duration: 4000,
max: 6,
gap: 12,
offset: 24,
// 交互配置
pauseOnHover: true,
closeOnClick: true,
draggable: true,
// 显示配置
showProgress: true,
progressDirection: 'horizontal',
icon: true,
closeButton: true,
// 主题配置
theme: 'auto',
animation: 'slide',
// 布局配置
zIndex: 9999,
width: 360,
// 自定义配置
className: '',
style: {},
// 回调函数
onShow: null,
onClose: null,
onClick: null,
onUpdate: null,
// 高级
resetTimerOnUpdate: false,
notifyWhenHidden: false,
// 国际化
locale: 'zh-CN',
// 插件
plugins: [],
});
// Icons — 从 icons.js 导入并重新导出(保持向后兼容)
import { ICONS } from './icons.js';
export { ICONS };
/**
* 类型颜色配置
*/
export const TYPE_COLORS = {
success: { fg: '#10b981', bg: 'rgba(16, 185, 129, 0.1)' },
error: { fg: '#ef4444', bg: 'rgba(239, 68, 68, 0.1)' },
warning: { fg: '#f59e0b', bg: 'rgba(245, 158, 11, 0.1)' },
info: { fg: '#3b82f6', bg: 'rgba(59, 130, 246, 0.1)' },
loading: { fg: '#6366f1', bg: 'rgba(99, 102, 241, 0.1)' },
default: { fg: '#6b7280', bg: 'rgba(107, 114, 128, 0.1)' },
check: { fg: '#10b981', bg: 'rgba(16, 185, 129, 0.1)' },
x: { fg: '#ef4444', bg: 'rgba(239, 68, 68, 0.1)' },
alert: { fg: '#f59e0b', bg: 'rgba(245, 158, 11, 0.1)' },
question: { fg: '#8b5cf6', bg: 'rgba(139, 92, 246, 0.1)' },
star: { fg: '#f59e0b', bg: 'rgba(245, 158, 11, 0.1)' },
heart: { fg: '#ec4899', bg: 'rgba(236, 72, 153, 0.1)' },
bell: { fg: '#f59e0b', bg: 'rgba(245, 158, 11, 0.1)' },
mail: { fg: '#3b82f6', bg: 'rgba(59, 130, 246, 0.1)' },
settings: { fg: '#6b7280', bg: 'rgba(107, 114, 128, 0.1)' },
user: { fg: '#8b5cf6', bg: 'rgba(139, 92, 246, 0.1)' },
home: { fg: '#3b82f6', bg: 'rgba(59, 130, 246, 0.1)' },
search: { fg: '#6b7280', bg: 'rgba(107, 114, 128, 0.1)' },
plus: { fg: '#10b981', bg: 'rgba(16, 185, 129, 0.1)' },
minus: { fg: '#ef4444', bg: 'rgba(239, 68, 68, 0.1)' },
edit: { fg: '#3b82f6', bg: 'rgba(59, 130, 246, 0.1)' },
trash: { fg: '#ef4444', bg: 'rgba(239, 68, 68, 0.1)' },
download: { fg: '#3b82f6', bg: 'rgba(59, 130, 246, 0.1)' },
upload: { fg: '#10b981', bg: 'rgba(16, 185, 129, 0.1)' },
share: { fg: '#8b5cf6', bg: 'rgba(139, 92, 246, 0.1)' },
link: { fg: '#3b82f6', bg: 'rgba(59, 130, 246, 0.1)' },
external: { fg: '#6b7280', bg: 'rgba(107, 114, 128, 0.1)' },
clock: { fg: '#f59e0b', bg: 'rgba(245, 158, 11, 0.1)' },
calendar: { fg: '#3b82f6', bg: 'rgba(59, 130, 246, 0.1)' },
map: { fg: '#10b981', bg: 'rgba(16, 185, 129, 0.1)' },
compass: { fg: '#f59e0b', bg: 'rgba(245, 158, 11, 0.1)' },
globe: { fg: '#3b82f6', bg: 'rgba(59, 130, 246, 0.1)' },
wifi: { fg: '#10b981', bg: 'rgba(16, 185, 129, 0.1)' },
cloud: { fg: '#3b82f6', bg: 'rgba(59, 130, 246, 0.1)' },
sun: { fg: '#f59e0b', bg: 'rgba(245, 158, 11, 0.1)' },
moon: { fg: '#8b5cf6', bg: 'rgba(139, 92, 246, 0.1)' },
zap: { fg: '#f59e0b', bg: 'rgba(245, 158, 11, 0.1)' },
activity: { fg: '#ef4444', bg: 'rgba(239, 68, 68, 0.1)' },
cpu: { fg: '#6b7280', bg: 'rgba(107, 114, 128, 0.1)' },
database: { fg: '#3b82f6', bg: 'rgba(59, 130, 246, 0.1)' },
server: { fg: '#6b7280', bg: 'rgba(107, 114, 128, 0.1)' },
terminal: { fg: '#10b981', bg: 'rgba(16, 185, 129, 0.1)' },
code: { fg: '#8b5cf6', bg: 'rgba(139, 92, 246, 0.1)' },
git: { fg: '#ef4444', bg: 'rgba(239, 68, 68, 0.1)' },
package: { fg: '#f59e0b', bg: 'rgba(245, 158, 11, 0.1)' },
layers: { fg: '#3b82f6', bg: 'rgba(59, 130, 246, 0.1)' },
grid: { fg: '#6b7280', bg: 'rgba(107, 114, 128, 0.1)' },
list: { fg: '#6b7280', bg: 'rgba(107, 114, 128, 0.1)' },
filter: { fg: '#3b82f6', bg: 'rgba(59, 130, 246, 0.1)' },
sort: { fg: '#6b7280', bg: 'rgba(107, 114, 128, 0.1)' },
refresh: { fg: '#3b82f6', bg: 'rgba(59, 130, 246, 0.1)' },
sync: { fg: '#10b981', bg: 'rgba(16, 185, 129, 0.1)' },
power: { fg: '#ef4444', bg: 'rgba(239, 68, 68, 0.1)' },
battery: { fg: '#10b981', bg: 'rgba(16, 185, 129, 0.1)' },
bluetooth: { fg: '#3b82f6', bg: 'rgba(59, 130, 246, 0.1)' },
volume: { fg: '#6b7280', bg: 'rgba(107, 114, 128, 0.1)' },
mic: { fg: '#ef4444', bg: 'rgba(239, 68, 68, 0.1)' },
camera: { fg: '#6b7280', bg: 'rgba(107, 114, 128, 0.1)' },
image: { fg: '#8b5cf6', bg: 'rgba(139, 92, 246, 0.1)' },
video: { fg: '#ef4444', bg: 'rgba(239, 68, 68, 0.1)' },
music: { fg: '#8b5cf6', bg: 'rgba(139, 92, 246, 0.1)' },
file: { fg: '#6b7280', bg: 'rgba(107, 114, 128, 0.1)' },
folder: { fg: '#f59e0b', bg: 'rgba(245, 158, 11, 0.1)' },
clipboard: { fg: '#6b7280', bg: 'rgba(107, 114, 128, 0.1)' },
save: { fg: '#10b981', bg: 'rgba(16, 185, 129, 0.1)' },
print: { fg: '#6b7280', bg: 'rgba(107, 114, 128, 0.1)' },
eye: { fg: '#3b82f6', bg: 'rgba(59, 130, 246, 0.1)' },
eyeOff: { fg: '#6b7280', bg: 'rgba(107, 114, 128, 0.1)' },
lock: { fg: '#f59e0b', bg: 'rgba(245, 158, 11, 0.1)' },
unlock: { fg: '#10b981', bg: 'rgba(16, 185, 129, 0.1)' },
shield: { fg: '#3b82f6', bg: 'rgba(59, 130, 246, 0.1)' },
key: { fg: '#f59e0b', bg: 'rgba(245, 158, 11, 0.1)' },
flag: { fg: '#ef4444', bg: 'rgba(239, 68, 68, 0.1)' },
bookmark: { fg: '#3b82f6', bg: 'rgba(59, 130, 246, 0.1)' },
tag: { fg: '#8b5cf6', bg: 'rgba(139, 92, 246, 0.1)' },
gift: { fg: '#ec4899', bg: 'rgba(236, 72, 153, 0.1)' },
award: { fg: '#f59e0b', bg: 'rgba(245, 158, 11, 0.1)' },
target: { fg: '#ef4444', bg: 'rgba(239, 68, 68, 0.1)' },
crosshair: { fg: '#6b7280', bg: 'rgba(107, 114, 128, 0.1)' },
move: { fg: '#6b7280', bg: 'rgba(107, 114, 128, 0.1)' },
maximize: { fg: '#10b981', bg: 'rgba(16, 185, 129, 0.1)' },
minimize: { fg: '#ef4444', bg: 'rgba(239, 68, 68, 0.1)' },
copy: { fg: '#3b82f6', bg: 'rgba(59, 130, 246, 0.1)' },
cut: { fg: '#ef4444', bg: 'rgba(239, 68, 68, 0.1)' },
paste: { fg: '#10b981', bg: 'rgba(16, 185, 129, 0.1)' },
rotateCw: { fg: '#3b82f6', bg: 'rgba(59, 130, 246, 0.1)' },
rotateCcw: { fg: '#3b82f6', bg: 'rgba(59, 130, 246, 0.1)' },
zoomIn: { fg: '#10b981', bg: 'rgba(16, 185, 129, 0.1)' },
zoomOut: { fg: '#ef4444', bg: 'rgba(239, 68, 68, 0.1)' },
crop: { fg: '#6b7280', bg: 'rgba(107, 114, 128, 0.1)' },
sliders: { fg: '#6b7280', bg: 'rgba(107, 114, 128, 0.1)' },
toggleLeft: { fg: '#6b7280', bg: 'rgba(107, 114, 128, 0.1)' },
toggleRight: { fg: '#10b981', bg: 'rgba(16, 185, 129, 0.1)' },
checkCircle: { fg: '#10b981', bg: 'rgba(16, 185, 129, 0.1)' },
xCircle: { fg: '#ef4444', bg: 'rgba(239, 68, 68, 0.1)' },
alertCircle: { fg: '#f59e0b', bg: 'rgba(245, 158, 11, 0.1)' },
infoCircle: { fg: '#3b82f6', bg: 'rgba(59, 130, 246, 0.1)' },
helpCircle: { fg: '#8b5cf6', bg: 'rgba(139, 92, 246, 0.1)' },
alertTriangle: { fg: '#f59e0b', bg: 'rgba(245, 158, 11, 0.1)' },
checkSquare: { fg: '#10b981', bg: 'rgba(16, 185, 129, 0.1)' },
square: { fg: '#6b7280', bg: 'rgba(107, 114, 128, 0.1)' },
circle: { fg: '#6b7280', bg: 'rgba(107, 114, 128, 0.1)' },
triangle: { fg: '#f59e0b', bg: 'rgba(245, 158, 11, 0.1)' },
hexagon: { fg: '#3b82f6', bg: 'rgba(59, 130, 246, 0.1)' },
octagon: { fg: '#ef4444', bg: 'rgba(239, 68, 68, 0.1)' },
pentagon: { fg: '#8b5cf6', bg: 'rgba(139, 92, 246, 0.1)' },
diamond: { fg: '#ec4899', bg: 'rgba(236, 72, 153, 0.1)' },
};
/**
* 动画配置
*/
export const ANIMATIONS = {
slide: {
enter: { transform: 'translateX(80px)', opacity: 0 },
leave: { transform: 'translateX(120%)', opacity: 0 },
duration: 400,
easing: 'cubic-bezier(0.25, 0.46, 0.45, 0.94)',
},
fade: {
enter: { opacity: 0, filter: 'blur(3px)' },
leave: { opacity: 0, filter: 'blur(3px)' },
duration: 500,
easing: 'ease',
},
scale: {
enter: { transform: 'scale(0.55)', opacity: 0 },
leave: { transform: 'scale(0.55)', opacity: 0 },
duration: 450,
easing: 'cubic-bezier(0.34, 1.56, 0.64, 1)',
},
bounce: {
enter: { transform: 'translateY(-80px)', opacity: 0 },
leave: { transform: 'translateY(20px)', opacity: 0 },
duration: 650,
easing: 'ease',
},
flip: {
enter: { transform: 'perspective(500px) rotateX(-90deg)', opacity: 0 },
leave: { transform: 'perspective(500px) rotateX(90deg)', opacity: 0 },
duration: 500,
easing: 'cubic-bezier(0.25, 0.46, 0.45, 0.94)',
},
rotate: {
enter: { transform: 'rotate(-25deg) scale(0.6)', opacity: 0 },
leave: { transform: 'rotate(25deg) scale(0.6)', opacity: 0 },
duration: 500,
easing: 'cubic-bezier(0.25, 0.46, 0.45, 0.94)',
},
zoom: {
enter: { transform: 'scale(0.1)', opacity: 0 },
leave: { transform: 'scale(0.1)', opacity: 0 },
duration: 500,
easing: 'cubic-bezier(0.34, 1.56, 0.64, 1)',
},
slideUp: {
enter: { transform: 'translateY(60px)', opacity: 0 },
leave: { transform: 'translateY(-120%)', opacity: 0 },
duration: 400,
easing: 'cubic-bezier(0.25, 0.46, 0.45, 0.94)',
},
slideDown: {
enter: { transform: 'translateY(-60px)', opacity: 0 },
leave: { transform: 'translateY(120%)', opacity: 0 },
duration: 400,
easing: 'cubic-bezier(0.25, 0.46, 0.45, 0.94)',
},
slideLeft: {
enter: { transform: 'translateX(-90px)', opacity: 0 },
leave: { transform: 'translateX(120%)', opacity: 0 },
duration: 400,
easing: 'cubic-bezier(0.25, 0.46, 0.45, 0.94)',
},
slideRight: {
enter: { transform: 'translateX(90px)', opacity: 0 },
leave: { transform: 'translateX(-120%)', opacity: 0 },
duration: 400,
easing: 'cubic-bezier(0.25, 0.46, 0.45, 0.94)',
},
};
/**
* 主题配置
*/
export const THEMES = {
light: {
bg: 'rgba(255, 255, 255, 0.96)',
text: '#1f2937',
border: 'rgba(0, 0, 0, 0.06)',
shadow: '0 10px 36px -10px rgba(0, 0, 0, 0.18), 0 4px 14px -4px rgba(0, 0, 0, 0.08)',
hoverShadow: '0 14px 48px -10px rgba(0, 0, 0, 0.22), 0 6px 18px -4px rgba(0, 0, 0, 0.10)',
progressBg: 'rgba(0, 0, 0, 0.06)',
closeHoverBg: 'rgba(0, 0, 0, 0.06)',
},
dark: {
bg: 'rgba(28, 32, 40, 0.94)',
text: '#e6e8eb',
border: 'rgba(255, 255, 255, 0.08)',
shadow: '0 10px 36px -10px rgba(0, 0, 0, 0.6), 0 4px 14px -4px rgba(0, 0, 0, 0.4)',
hoverShadow: '0 14px 48px -8px rgba(0, 0, 0, 0.6), 0 6px 18px -4px rgba(0, 0, 0, 0.4)',
progressBg: 'rgba(255, 255, 255, 0.08)',
closeHoverBg: 'rgba(255, 255, 255, 0.08)',
},
auto: 'auto',
warm: {
bg: 'rgba(255, 251, 235, 0.96)',
text: '#78350f',
border: 'rgba(245, 158, 11, 0.2)',
shadow: '0 10px 36px -10px rgba(245, 158, 11, 0.18), 0 4px 14px -4px rgba(245, 158, 11, 0.08)',
hoverShadow: '0 14px 48px -10px rgba(245, 158, 11, 0.22), 0 6px 18px -4px rgba(245, 158, 11, 0.10)',
progressBg: 'rgba(245, 158, 11, 0.1)',
closeHoverBg: 'rgba(245, 158, 11, 0.1)',
},
};
/**
* 位置配置
*/
export const POSITIONS = [
'top-left',
'top-center',
'top-right',
'bottom-left',
'bottom-center',
'bottom-right',
];
/**
* 类型配置
*/
export const TYPES = [
'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',
];
// Locales — 从 locales.js 导入并重新导出(保持向后兼容)
import { LOCALES } from './locales.js';
export { LOCALES };
/**
* 进度条方向
*/
export const PROGRESS_DIRECTIONS = ['horizontal', 'vertical'];
/**
* 动画类型
*/
export const ANIMATION_TYPES = ['slide', 'fade', 'scale', 'bounce', 'flip', 'rotate', 'zoom', 'slideUp', 'slideDown', 'slideLeft', 'slideRight'];
/**
* 主题类型
*/
export const THEME_TYPES = ['light', 'dark', 'auto'];