feat(mail): 增强邮件规则与阅读体验

- 将收件规则升级为支持多条件、多动作、应用现有邮件和终止继续处理。
- 新增规则构建与显示模式设置,优化规则列表与邮件详情展示。
- 增加邮件列表简洁模式、批量操作、手动刷新和更精细的已读状态控制。
This commit is contained in:
LanQin
2026-06-15 21:50:44 +08:00
parent 96822486af
commit 85fb05d031
12 changed files with 1442 additions and 87 deletions
+36
View File
@@ -0,0 +1,36 @@
import * as React from "react"
export type DisplayMode = "detailed" | "compact"
const DISPLAY_MODE_KEY = "lanqin:display-mode"
export function getInitialDisplayMode(): DisplayMode {
if (typeof window === "undefined") return "detailed"
return window.localStorage.getItem(DISPLAY_MODE_KEY) === "compact" ? "compact" : "detailed"
}
export function setStoredDisplayMode(mode: DisplayMode) {
window.localStorage.setItem(DISPLAY_MODE_KEY, mode)
window.dispatchEvent(new CustomEvent("lanqin:display-mode", { detail: mode }))
}
export function useDisplayMode() {
const [displayMode, setDisplayModeState] = React.useState<DisplayMode>(getInitialDisplayMode)
React.useEffect(() => {
function sync() {
setDisplayModeState(getInitialDisplayMode())
}
window.addEventListener("storage", sync)
window.addEventListener("lanqin:display-mode", sync)
return () => {
window.removeEventListener("storage", sync)
window.removeEventListener("lanqin:display-mode", sync)
}
}, [])
const setDisplayMode = React.useCallback((mode: DisplayMode) => {
setStoredDisplayMode(mode)
setDisplayModeState(mode)
}, [])
return [displayMode, setDisplayMode] as const
}