* fix(workbench): 模型目录与助手形象 - 修正 Live2D 首帧闪现和模型默认分组
进入画布时形象配置与 Live2D 首帧未就绪不再显示默认球,改为加载提示,失败才回退。
新导入模型一级目录默认未分类、二级渠道展示名默认跟随上游 ID;历史非空分组(含与模型 ID 同名)保留。
拉取模型弹窗默认只勾选已存在模型并移除逐项已存在字样;一级分组下拉点击即展开全部选项。
* style(web): 画布与模型导入 - 按 Prettier 规范格式化改动文件
修复 PR 中 Web checks 的格式化检查失败:Live2D 启动器 JSX、模型导入选择工具函数与 Live2D 加载测试按项目 Prettier 配置重新排版,不改变行为。
* test(web): Live2D 生命周期 - 修复 bun 1.3.9 下 text 导入与模块导入冲突
agent-live2d-lifecycle 曾用 with { type: text } 导入 live2d-avatar.tsx,bun 1.3.9 会按路径复用该缓存,导致新增的模块导入拿不到 Live2DAvatar 具名导出并报 SyntaxError。改为 readFileSync 读取源码文本,本地以 bun 1.3.9 复现并验证通过。
28 lines
1.3 KiB
TypeScript
28 lines
1.3 KiB
TypeScript
import { expect, test } from "bun:test";
|
|
import { renderToStaticMarkup } from "react-dom/server";
|
|
|
|
import { Live2DAvatar } from "../src/components/canvas/live2d-avatar";
|
|
|
|
function renderLoadingAvatar(reducedMotion = false) {
|
|
return renderToStaticMarkup(<Live2DAvatar url="/api/public/appearance/live2d/model-id/model.model3.json" width={165} height={220} reducedMotion={reducedMotion} fallback={<span data-default-avatar>默认球</span>} />);
|
|
}
|
|
|
|
test("Live2D first render shows loading rather than the failure fallback", () => {
|
|
const markup = renderLoadingAvatar();
|
|
expect(markup).not.toContain("data-default-avatar");
|
|
expect(markup).not.toContain("默认球");
|
|
expect(markup).toContain('role="status"');
|
|
expect(markup).toContain("正在加载 Live2D 模型");
|
|
expect(markup).toContain('aria-busy="true"');
|
|
expect(markup).toContain("visibility:hidden");
|
|
expect(markup).toContain("width:165px;height:220px");
|
|
});
|
|
|
|
test("Live2D loading respects reduced motion without showing the default avatar", () => {
|
|
expect(renderLoadingAvatar()).toContain("motion-safe:animate-spin");
|
|
const markup = renderLoadingAvatar(true);
|
|
expect(markup).not.toContain("animate-spin");
|
|
expect(markup).not.toContain("data-default-avatar");
|
|
expect(markup).toContain("正在加载 Live2D 模型");
|
|
});
|