3b98c9438e
- 新增 useContextMenuData Hook 处理右键菜单数据传递 - 重构 Jwt/Base64Converter/TextStatistics/QrCode 页面接收右键数据 - RouterProvider 支持从 URL 参数解析右键菜单数据 - 添加 contextMenu/pendingData 存储键到 StorageSchema - 添加 useContextMenuData 单元测试(12个测试用例)
216 lines
6.1 KiB
TypeScript
216 lines
6.1 KiB
TypeScript
/**
|
||
* 应用页面类型定义
|
||
*/
|
||
export type PageType =
|
||
| 'dashboard' // 仪表盘/首页
|
||
| 'timestamp' // 时间戳转换工具
|
||
| 'storageCleaner' // 存储清理工具
|
||
| 'qrCode' // 二维码工具
|
||
| 'textStatistics' // 文本统计工具
|
||
| 'jwt' // JWT 解析工具
|
||
| 'jsonDiff' // JSON 差异比较工具
|
||
| 'base64Converter' // Base64 转换器工具
|
||
| 'markdownToHtml' // Markdown 转 HTML 工具
|
||
| 'htmlToMarkdown'; // HTML 转 Markdown 工具
|
||
|
||
/**
|
||
* JSON 工具页面子模式类型定义
|
||
*/
|
||
export type JsonToolsPageMode = 'diff' | 'format' | 'yaml' | 'toml' | 'minify';
|
||
|
||
/**
|
||
* Base64 转换器页面子模式类型定义
|
||
*/
|
||
export type Base64ConverterPageMode = 'text' | 'file' | 'image';
|
||
|
||
/**
|
||
* Base64 转换器中各子模式的编码/解码方向
|
||
*/
|
||
export type Base64ConvertDirection = 'encode' | 'decode';
|
||
|
||
/**
|
||
* Markdown 转 HTML 页面预览模式类型定义
|
||
*/
|
||
export type MarkdownToHtmlPreviewMode = 'split' | 'preview' | 'html';
|
||
|
||
/**
|
||
* HTML 转 Markdown 页面预览模式类型定义
|
||
*/
|
||
export type HtmlToMarkdownPreviewMode = 'split' | 'preview' | 'markdown';
|
||
|
||
/**
|
||
* 表单映射条目定义
|
||
*/
|
||
export interface FormMapEntry {
|
||
/** 条目唯一 ID */
|
||
id: string;
|
||
/** 在 UI 中显示的名称 */
|
||
label_display: string;
|
||
/** 字段特征,用于在页面中定位字段 */
|
||
fingerprint: {
|
||
/** CSS 选择器 */
|
||
selector: string;
|
||
/** name 属性 */
|
||
name_attr: string;
|
||
/** 占位符文本 */
|
||
placeholder: string;
|
||
};
|
||
/** 填充逻辑配置 */
|
||
action_logic: {
|
||
/** 字段类型 */
|
||
type: 'text' | 'select' | 'checkbox';
|
||
/** 填充策略:固定值、随机值或序列值 */
|
||
strategy: 'fixed' | 'random' | 'sequence';
|
||
/** 填充的具体值或配置 */
|
||
value: string;
|
||
};
|
||
/** UI 状态 */
|
||
ui_state: {
|
||
/** 是否被选中 */
|
||
is_selected: boolean;
|
||
};
|
||
}
|
||
|
||
/**
|
||
* Chrome Storage 存储模式定义
|
||
* 定义了所有持久化在客户端的数据结构
|
||
*/
|
||
export interface StorageSchema {
|
||
/** RouterProvider 的默认路由键,仅当未显式传入 syncKey 时使用(popup/sidepanel/tab 入口已各自覆盖) */
|
||
'app/currentRoute': PageType;
|
||
/** Popup 窗口的当前路由 */
|
||
'app/popupRoute': PageType;
|
||
/** 侧边栏的当前路由 */
|
||
'app/sidepanelRoute': PageType;
|
||
/** 标签页的当前路由 */
|
||
'app/tabRoute': PageType;
|
||
/** RouterProvider 的默认可见页面列表键,仅当未显式传入 visiblePagesKey 时使用 */
|
||
'app/visiblePages': PageType[];
|
||
/** RouterProvider 的默认页面排序键,仅当未显式传入 pageOrderKey 时使用 */
|
||
'app/pageOrder': PageType[];
|
||
/** Popup 窗口可见的页面列表 */
|
||
'app/popupVisiblePages': PageType[];
|
||
/** Popup 窗口页面的显示顺序 */
|
||
'app/popupPageOrder': PageType[];
|
||
/** 侧边栏可见的页面列表 */
|
||
'app/sidepanelVisiblePages': PageType[];
|
||
/** 侧边栏页面的显示顺序 */
|
||
'app/sidepanelPageOrder': PageType[];
|
||
/** 标签页可见的页面列表 */
|
||
'app/tabVisiblePages': PageType[];
|
||
/** 标签页页面的显示顺序 */
|
||
'app/tabPageOrder': PageType[];
|
||
/** 应用主题配置 */
|
||
'app/theme': string;
|
||
/** 主题模式偏好(light/dark/system) */
|
||
'app/themeMode': 'light' | 'dark' | 'system';
|
||
/** 存储清理工具的偏好设置 */
|
||
'storageCleaner/preferences': StorageCleanerPreferences;
|
||
/** 二维码工具中二维码部分是否展开 */
|
||
'qrCode/qrExpanded': boolean;
|
||
/** 二维码工具中 URL 部分是否展开 */
|
||
'qrCode/urlExpanded': boolean;
|
||
/** 搜索历史记录 */
|
||
'app/searchHistory': string[];
|
||
/** JSON 工具页面当前子模式 */
|
||
'jsonTools/pageMode': JsonToolsPageMode;
|
||
/** Base64 转换器页面当前子模式 */
|
||
'base64Converter/pageMode': Base64ConverterPageMode;
|
||
/** Base64 转换器「文件」子模式当前方向 */
|
||
'base64Converter/fileMode/direction': Base64ConvertDirection;
|
||
/** Base64 转换器「图像」子模式当前方向 */
|
||
'base64Converter/imageMode/direction': Base64ConvertDirection;
|
||
/** Markdown 转 HTML 页面当前预览模式 */
|
||
'markdownToHtml/previewMode': MarkdownToHtmlPreviewMode;
|
||
/** HTML 转 Markdown 页面当前预览模式 */
|
||
'htmlToMarkdown/previewMode': HtmlToMarkdownPreviewMode;
|
||
/** 语言偏好设置 */
|
||
'app/language': string;
|
||
/** 右键菜单待处理数据 */
|
||
'contextMenu/pendingData': ContextMenuPendingData;
|
||
}
|
||
|
||
/**
|
||
* 右键菜单待处理数据
|
||
*/
|
||
export interface ContextMenuPendingData {
|
||
/** 功能标识 */
|
||
featureKey: PageType;
|
||
/** 捕获的文本或图片 URL */
|
||
payload: string;
|
||
/** 数据创建时间戳 */
|
||
timestamp: number;
|
||
}
|
||
|
||
/**
|
||
* 字段类型偏好定义
|
||
* 结构:{ [域名]: { [字段标识符]: 类型名称 } }
|
||
*/
|
||
export interface FieldTypePreferences {
|
||
[domain: string]: {
|
||
[fieldIdentifier: string]: string;
|
||
};
|
||
}
|
||
|
||
/**
|
||
* 存储清理工具偏好设置
|
||
*/
|
||
export interface StorageCleanerPreferences {
|
||
/** 是否在清理后自动刷新页面 */
|
||
autoRefresh: boolean;
|
||
/** 默认勾选的清理类型 */
|
||
selectedTypes: StorageCleanerOptions;
|
||
}
|
||
|
||
/**
|
||
* 存储清理选项配置
|
||
*/
|
||
export interface StorageCleanerOptions {
|
||
/** Local Storage */
|
||
localStorage: boolean;
|
||
/** Session Storage */
|
||
sessionStorage: boolean;
|
||
/** IndexedDB */
|
||
indexedDB: boolean;
|
||
/** Cookies */
|
||
cookies: boolean;
|
||
/** Cache Storage */
|
||
cacheStorage: boolean;
|
||
/** Service Workers */
|
||
serviceWorkers: boolean;
|
||
}
|
||
|
||
/**
|
||
* 单项存储清理结果
|
||
*/
|
||
export type StorageCleanResult =
|
||
| {
|
||
/** 是否清理成功 */
|
||
success: true;
|
||
/** 清理的数量/条数 */
|
||
count: number;
|
||
}
|
||
| {
|
||
/** 是否清理成功 */
|
||
success: false;
|
||
/** 错误信息 */
|
||
error: string;
|
||
};
|
||
|
||
/**
|
||
* 存储清理任务汇总结果
|
||
*/
|
||
export interface CleaningResult {
|
||
/** 整体操作是否成功 */
|
||
success: boolean;
|
||
/** 整体错误信息(如果有) */
|
||
error?: string;
|
||
/** 各项清理的具体结果 */
|
||
localStorage?: StorageCleanResult;
|
||
sessionStorage?: StorageCleanResult;
|
||
indexedDB?: StorageCleanResult;
|
||
cookies?: StorageCleanResult;
|
||
cacheStorage?: StorageCleanResult;
|
||
serviceWorkers?: StorageCleanResult;
|
||
}
|