mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-08-18 02:21:51 +08:00
2bd9f1a353
This PR introduces new window behaviors, which can be enabled when the menubar setting is active: New Features: - Quick open from tray icon - Minimize to tray - Exit to tray - Start minimized These changes have not yet been tested on macOS. <img width="645" height="479" alt="image" src="https://github.com/user-attachments/assets/7bdd13d0-5322-45a4-8e71-85c081aa0c86" /> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Configurable menubar/tray behaviors: open on left-click, minimize to tray, close to tray (exit to tray), and start minimized. * **UI** * Appearance settings add a Menubar → Window Behavior group with four toggles; group shows only when menubar/tray is enabled (hidden on macOS). * **Settings** * Tray settings persisted and exposed via the settings API with getters and setters for each option. * **Localization** * Added translation keys and English strings for the new controls and descriptions. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: Peng Xiao <pengxiao@outlook.com>
91 lines
2.8 KiB
TypeScript
91 lines
2.8 KiB
TypeScript
import { z } from 'zod';
|
|
|
|
export const workbenchViewIconNameSchema = z.enum([
|
|
'trash',
|
|
'allDocs',
|
|
'collection',
|
|
'tag',
|
|
'doc', // refers to a doc whose mode is not yet being resolved
|
|
'page',
|
|
'edgeless',
|
|
'journal',
|
|
'attachment',
|
|
'pdf',
|
|
'ai',
|
|
]);
|
|
|
|
export const workbenchViewMetaSchema = z.object({
|
|
id: z.string(),
|
|
path: z
|
|
.object({
|
|
pathname: z.string().optional(),
|
|
hash: z.string().optional(),
|
|
search: z.string().optional(),
|
|
})
|
|
.optional(),
|
|
// todo: move title/module to cached stated
|
|
title: z.string().optional(),
|
|
iconName: workbenchViewIconNameSchema.optional(),
|
|
});
|
|
|
|
export const workbenchMetaSchema = z.object({
|
|
id: z.string(),
|
|
activeViewIndex: z.number(),
|
|
pinned: z.boolean().optional(),
|
|
basename: z.string(),
|
|
views: z.array(workbenchViewMetaSchema),
|
|
});
|
|
|
|
export const tabViewsMetaSchema = z.object({
|
|
activeWorkbenchId: z.string().optional(),
|
|
workbenches: z.array(workbenchMetaSchema).default([]),
|
|
});
|
|
|
|
export const TabViewsMetaKey = 'tabViewsMetaSchema';
|
|
export type TabViewsMetaSchema = z.infer<typeof tabViewsMetaSchema>;
|
|
export type WorkbenchMeta = z.infer<typeof workbenchMetaSchema>;
|
|
export type WorkbenchViewMeta = z.infer<typeof workbenchViewMetaSchema>;
|
|
export type WorkbenchViewModule = z.infer<typeof workbenchViewIconNameSchema>;
|
|
|
|
export const SpellCheckStateSchema = z.object({
|
|
enabled: z.boolean().optional(),
|
|
});
|
|
|
|
export const SpellCheckStateKey = 'spellCheckState' as const;
|
|
// oxlint-disable-next-line no-redeclare
|
|
export type SpellCheckStateSchema = z.infer<typeof SpellCheckStateSchema>;
|
|
|
|
export const MenubarStateKey = 'menubarState' as const;
|
|
export const MenubarStateSchema = z.object({
|
|
enabled: z.boolean().default(true),
|
|
openOnLeftClick: z.boolean().default(false),
|
|
minimizeToTray: z.boolean().default(false),
|
|
closeToTray: z.boolean().default(false),
|
|
startMinimized: z.boolean().default(false),
|
|
});
|
|
|
|
export type MenubarStateSchema = z.infer<typeof MenubarStateSchema>;
|
|
|
|
export const MeetingSettingsKey = 'meetingSettings' as const;
|
|
export const MeetingSettingsSchema = z.object({
|
|
// global meeting feature control
|
|
enabled: z.boolean().default(false),
|
|
|
|
// if false (and enabled = false), show a prompt page
|
|
betaDisclaimerAccepted: z.boolean().default(false),
|
|
|
|
// when recording is saved, where to create the recording block
|
|
recordingSavingMode: z.enum(['new-doc', 'journal-today']).default('new-doc'),
|
|
|
|
// whether to enable generation of summary for new meeting recordings
|
|
autoTranscriptionSummary: z.boolean().default(true),
|
|
|
|
// whether to enable generation of todo list for new meeting recordings
|
|
autoTranscriptionTodo: z.boolean().default(true),
|
|
|
|
// recording reactions to new meeting events
|
|
recordingMode: z.enum(['none', 'prompt', 'auto-start']).default('prompt'),
|
|
});
|
|
|
|
export type MeetingSettingsSchema = z.infer<typeof MeetingSettingsSchema>;
|