feat(font): 新增系统字体枚举与全局字体配置能力

- 新增 Go 侧已安装字体扫描接口,支持前端读取系统真实字体列表
- 接入 Wails 字体查询导出,补齐 App.d.ts 与 App.js 调用声明
- 新增字体选项构建与匹配工具,区分 UI 字体与等宽字体候选
- 外观设置支持按平台加载字体列表,并支持搜索匹配与默认字体回退
- Store 增加自定义 UI 字体与代码字体配置,持久化全局字体选择
This commit is contained in:
Syngnat
2026-05-29 14:04:21 +08:00
parent f5f5bbf5eb
commit a7f8ce36df
11 changed files with 685 additions and 12 deletions

View File

@@ -75,6 +75,8 @@ describe('store appearance persistence', () => {
expect(appearance.dataTableFontSizeFollowGlobal).toBe(true);
expect(appearance.sidebarTreeFontSize).toBeNull();
expect(appearance.sidebarTreeFontSizeFollowGlobal).toBe(true);
expect(appearance.customUIFontFamily).toBeNull();
expect(appearance.customMonoFontFamily).toBeNull();
});
it('persists DataGrid appearance settings and restores them after reload', async () => {
@@ -97,6 +99,26 @@ describe('store appearance persistence', () => {
expect(appearance.dataTableDensity).toBe('compact');
});
it('persists custom font families and sanitizes blank values', async () => {
const { useStore } = await importStore();
useStore.getState().setAppearance({
customUIFontFamily: ' IBM Plex Sans, PingFang SC ',
customMonoFontFamily: ' ',
});
let appearance = useStore.getState().appearance;
expect(appearance.customUIFontFamily).toBe('IBM Plex Sans, PingFang SC');
expect(appearance.customMonoFontFamily).toBeNull();
vi.resetModules();
const reloaded = await importStore();
appearance = reloaded.useStore.getState().appearance;
expect(appearance.customUIFontFamily).toBe('IBM Plex Sans, PingFang SC');
expect(appearance.customMonoFontFamily).toBeNull();
});
it('does not clear persisted legacy connections during hydration migration', async () => {
storage.setItem('lite-db-storage', JSON.stringify({
state: {