Files
MetonaToast/CHANGELOG.md
T
tianhao bbff631f4f release: v0.4.0 — React 适配器、loading链式id稳定、dragThreshold、RTL适配、dedupe插件
- React 适配器子包:@metona-team/metona-toast/react — useToast() hook + 声明式 <Toast /> 组件,组件卸载自动清理;react 为 optional peerDependency,主包保持零依赖
- loading 链式转换改原地 update:id 稳定不重建 DOM,转换后 duration 恢复默认自动关闭;update() 支持 duration 变更动态重启计时器
- _emit 幽灵实例修复:beforeShow 拦截后的 toast 不再注册进 _toasts
- dragThreshold 配置项(默认 120px,原硬编码);RTL 容器 dir 属性 + 进度条/side 条/色条镜像
- dedupe 预设插件:相同 type+message 自动去重,支持 uninstall
- jest 环境隔离测试独立成 tests/ssr.test.ts(resetModules 不再污染共享模块状态);新增 tests/setup.ts 补 TextEncoder
- 文档:README/docs.html 补 React 适配器、dedupe、dragThreshold;CHANGELOG 更新;328 测试全过
2026-08-08 14:45:19 +08:00

103 lines
6.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Changelog
All notable changes to MetonaToast will be documented in this file.
## [0.4.0] - 2026-08-08
### Added
- **React 适配器子包**`@metona-team/metona-toast/react``useToast()` hook(组件卸载时自动移除本组件创建的 Toast)+ 声明式 `<Toast />` 组件(props 变化更新、卸载自动清理)。主包保持零依赖,`react` 为 optional peerDependency
- **`dedupe` 预设插件**:相同 type+message 的 Toast 自动去重(更新已有实例而非重复弹出),支持 uninstall
- **`dragThreshold` 配置项**:拖拽关闭阈值可配置(默认 120px,原为硬编码)
- **RTL 完整适配**:容器设置 `dir="rtl"`,进度条/side 条/类型色条/圆角正确镜像
- **`update({ duration })` 支持**:动态变更显示时长并自动重启/停止计时器(此前 update 忽略 duration
- **幽灵实例修复**`_emit` 检查 `create()` 结果,beforeShow 拦截后的 toast 不再注册到 `_toasts`(此前会残留幽灵记录,影响 count 与去重类插件)
### Changed
- **loading 链式转换 id 稳定**`loading.success/error/info/warning` 由"关闭旧 + 新建"改为原地 `update()` 同一实例,返回的 Toast id 与 loading id 一致;转换后 duration 自动恢复默认值(自动关闭)。注:转换不再产生新的入场动画,改为平滑更新;关闭按钮/进度条保持 loading 配置(如需默认外观,请通过 opts 覆盖)
## [0.3.0] - 2026-08-08
### Fixed
- **自定义动画真实生效**`animations.register()` 注册的动画此前仅写入内存 Map,实际渲染始终 fallback 到 slide。现在注册表驱动 `_buildClassName` 并动态注入对应 `@keyframes` + 类规则,README 的注册教程名实相符
- **`max` 超限真正关闭最早的 toast**:此前超限时仅从内存 Map 删除记录,DOM 上的旧 toast 依然显示。现在通过实例注册表找到最早的 toast 并真正 `close()`(触发离场动画与生命周期回调)
- **`destroy()` 全量清理**:新增清理 `Toast._hooks` 钩子、`Toast._registry` 实例注册表、`metona-toast-theme-css` / `metona-toast-custom-styles` / `metona-toast-anim-styles` 样式标签;动画注册表改为真正清空
- **`applyThemeVariables` 重复注入**:修复多次调用追加相同 id 的 style 标签问题(改为先移除旧元素)
- **`init()` 复活**`destroy()` 后调用 `init()` 重置 `_destroyed` 标志,恢复可初始化状态
- **失效脚本清理**:删除 `docs`typedoc 未安装)、`example`(examples/ 目录不存在)脚本,新增 `serve` 脚本
- **`AnimationConfig.enter/leave` 类型放宽**:支持 `opacity: 0` 等数值属性(此前仅 `string`,README 示例在 TS 严格模式下报错)
### Added
- **钩子系统完整化**:此前 `HOOK_NAMES` 声明 20+ 钩子但多数永不触发。现在全部声明均有触发点:
- 拦截语义:`beforeClose` / `beforeUpdate` 返回 `false` 可分别阻止关闭、更新
- 新触发点:`click` / `hover` / `dragStart` / `dragEnd` / `animationStart` / `animationEnd` / `progressStart` / `progressEnd` / `configChange` / `themeChange` / `localeChange` / `beforeInit` / `afterInit` / `beforeDestroy` / `afterDestroy`
- **`init({ plugins })` 支持插件对象**:与 `use()` 一致,可传 `string | Plugin`
### Changed
- **VERSION 唯一来源**:版本号统一在 `src/constants.ts` 维护,`api.ts` / `index.ts` 引用,消除三处硬编码漂移
- **`HOOK_NAMES` 收敛**:移除永不触发的 `progressUpdate` / `custom` 声明
- 版本升级至 **v0.3.0**(含行为增强,按 semver minor 处理)
## [0.2.1] - 2026-07-25
### Fixed
- **`auto` 主题配置死值**`THEMES.auto` 改为合法 CSS 值(复用 light 默认值),避免 `getThemeConfig('auto')` 返回无意义字符串
- **`resolveTheme` 循环逻辑**`resolveTheme('auto')` 始终检测系统主题,不再依赖 `currentTheme` 全局状态
- **`formatList` 国际化**:优先使用 `Intl.ListFormat`,降级到逗号拼接,支持各语言原生列表格式
- **RTL 容器定位**RTL 语言自动翻转 left/right 位置,容器创建时正确适配
- **`_containerCache` 泄露**`index.ts``destroy()` 中增加 `_containerCache.clear()`,与 `api.ts` 保持一致
### Changed
- **代码去重**:消除 `index.ts``api.ts` 之间 11 个方法的重复定义,统一在 `api.ts` 实现
- **Toast 回调注入**`Toast._onError` / `Toast._removeToast` 改为 `Toast.setCallbacks()` 静态方法,消除隐式契约
- **Stub 方法替换**`api.ts` 中 7 个 stub 方法替换为完整实现(init/use/destroy/getStatus/getConfig/updateConfig/resetConfig
- **ESLint 规则**:新增 `@typescript-eslint/no-explicit-any` (warn) 和 `prefer-const` (warn)
### Added
- **`beforeShow` 拦截**:钩子函数返回 `false` 可阻止 Toast 显示;配置 `onBeforeShow` 回调支持同样能力
- **`updatePosition()` 方法**:允许运行时移动 Toast 到不同位置容器
- **`remove()` + `removeToast()` 方法**:立即移除 Toast(不触发离场动画),提供无动画的快速清除 API
## [0.2.0] - 2026-07-25
### Changed
- **TypeScript 源码重构**:全部源码从 JavaScript 迁移到 TypeScript
- 删除手动维护的 `types/index.d.ts`,类型由源码自动生成
- `core.js` (1244行) 拆分为 `toast.ts` + `api.ts` + `templates.ts`
- 构建工具链:Babel → `ts-jest`,新增 `@rollup/plugin-typescript`
- 测试迁移至 TypeScript (`tests/index.test.ts`)
### Added
- `tsconfig.json` (strict: true)
- `src/types.ts` 核心类型模块
- `.eslintrc.json` ESLint 配置
- `.gitea/workflows/ci.yml` CI 工作流
- `CHANGELOG.md`
### Removed
- `babel.config.js`
- `types/` 目录
## [0.1.2] - 2026-07-24
### Fixed
- 补全和修正 TypeScript 类型声明
- 全面修复、优化与增强
## [0.1.1] - 2026-07-23
### Changed
- 版本号重置,更新文档页面
## [0.1.0] - 2026-07-22
### Added
- 初始发布
- 107 种内置图标
- 11 种动画效果
- 4 种主题(light/dark/auto/warm
- 国际化支持 (zh-CN/en-US)
- 插件系统 (keyboard/persistence/accessibility)
- 拖拽关闭、进度条、倒计时等高级特性
- TypeScript 类型声明
- 零依赖