fix(web): 控制台界面细节与 uhd_web 控件规范对齐

- 顶栏搜索移进右侧玻璃胶囊;输入框改淡玻璃(边线 0.46 → 0.16,悬停加深,聚焦 / 出错保留光晕)
- 新增 SegmentedControl(滑动 seg-thumb),替换站点、下载、订阅、文件、智能体列表及对话框里的实心选中块;Tabs 改为同一枚滑块
- 开关型按钮统一 outline + aria-pressed 选中外观;页头 / 工具栏次操作描边、图标钮描边圆;文件排序改 Select;下载总速度加标签
- 分页一页放得下时只留总数、空列表不渲染、按容器宽度收起按钮
- 运行状态存储区重排;智能体列表页与会话页共用外壳路由,标题与左栏不再重挂载
- 站点卡片「⋯」不再单独换行;设置导航、状态计数、多选条件改玻璃选中态

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01Cxwgnn2pbzQ7rXv3rq7fei
This commit is contained in:
rootandClaude Opus 5.5 committed 2026-10-08 12:02:48 +08:00
1 parent 8ff1817845
commit c9b4ceb301
32 files changed
+753 -639

No files matched your search

@@ -29,7 +29,21 @@ describe("list pagination", () => {
expect(html).toContain('aria-label="第 2 页"');
expect(html).not.toContain('aria-label="最后一页"');
});
it("limits table rows and shares the page-size control even for empty lists", () => {
it("一页放得下时只留总数,不显示翻页;没有条目时不渲染", () => {
const render = (total: number) =>
renderToStaticMarkup(
createElement(Pagination, { page: 1, pageSize: 50, total, onPageChange: () => {}, onPageSizeChange: () => {} }),
);
const short = render(8);
expect(short).toContain("共 8 条");
expect(short).not.toContain("上一页");
expect(short).not.toContain('aria-label="每页条数"');
const fits = render(30);
expect(fits).not.toContain("上一页");
expect(fits).toContain('aria-label="每页条数"');
expect(render(0)).toBe("");
});
it("limits table rows and shares the page-size control", () => {
const table = (rows: { id: string }[]) =>
renderToStaticMarkup(
createElement(DataTable<{ id: string }>, {
@@ -42,6 +56,6 @@ describe("list pagination", () => {
expect(html.split("<tbody>")[1]?.split("</tbody>")[0]?.match(/<tr /g)).toHaveLength(50);
expect(html).toContain('aria-label="每页条数"');
expect(html).not.toContain("item-50</td>");
expect(table([])).toContain('aria-label="每页条数"');
expect(table([])).not.toContain("列表分页");
});
});