ultisuite-client/lib/drive/docs-keyboard-shortcuts-config.ts
R3D347HR4Y 79bb6193fc
Some checks are pending
E2E / Playwright e2e (push) Waiting to run
menus1
2026-06-09 18:27:10 +02:00

142 lines
3.5 KiB
TypeScript

/** Stable ids for docs keyboard shortcuts (user-configurable later). */
export type DocsShortcutId =
| "file.open"
| "file.print"
| "edit.undo"
| "edit.redo"
| "edit.cut"
| "edit.copy"
| "edit.paste"
| "edit.pastePlain"
| "edit.selectAll"
| "edit.findReplace"
export type DocsShortcutCategory = "file" | "edit"
/** Where the shortcut is handled. */
export type DocsShortcutScope = "document" | "editor"
/**
* How the shortcut is executed.
* - tiptap/browser: native handling when the editor is focused (listed for menus + future settings)
* - custom: handled by our docs shortcut runtime
*/
export type DocsShortcutHandler = "tiptap" | "browser" | "custom"
export type DocsShortcutBinding = {
key: string
/** Cmd on macOS, Ctrl on Windows/Linux. Default true. */
mod?: boolean
shift?: boolean
alt?: boolean
}
export type DocsShortcutDefinition = {
id: DocsShortcutId
/** Settings UI label (future). */
label: string
category: DocsShortcutCategory
scope: DocsShortcutScope
handler: DocsShortcutHandler
defaultBinding: DocsShortcutBinding
altBindings?: DocsShortcutBinding[]
}
export const DOCS_KEYBOARD_SHORTCUT_DEFINITIONS = [
{
id: "file.open",
label: "Ouvrir",
category: "file",
scope: "document",
handler: "custom",
defaultBinding: { key: "o", mod: true },
},
{
id: "file.print",
label: "Imprimer",
category: "file",
scope: "document",
handler: "custom",
defaultBinding: { key: "p", mod: true },
},
{
id: "edit.undo",
label: "Annuler",
category: "edit",
scope: "editor",
handler: "tiptap",
defaultBinding: { key: "z", mod: true },
},
{
id: "edit.redo",
label: "Rétablir",
category: "edit",
scope: "editor",
handler: "custom",
defaultBinding: { key: "y", mod: true },
altBindings: [{ key: "z", mod: true, shift: true }],
},
{
id: "edit.cut",
label: "Couper",
category: "edit",
scope: "editor",
handler: "browser",
defaultBinding: { key: "x", mod: true },
},
{
id: "edit.copy",
label: "Copier",
category: "edit",
scope: "editor",
handler: "browser",
defaultBinding: { key: "c", mod: true },
},
{
id: "edit.paste",
label: "Coller",
category: "edit",
scope: "editor",
handler: "browser",
defaultBinding: { key: "v", mod: true },
},
{
id: "edit.pastePlain",
label: "Coller sans la mise en forme",
category: "edit",
scope: "editor",
handler: "custom",
defaultBinding: { key: "v", mod: true, shift: true },
},
{
id: "edit.selectAll",
label: "Tout sélectionner",
category: "edit",
scope: "editor",
handler: "tiptap",
defaultBinding: { key: "a", mod: true },
},
{
id: "edit.findReplace",
label: "Rechercher et remplacer",
category: "edit",
scope: "editor",
handler: "custom",
defaultBinding: { key: "h", mod: true, shift: true },
},
] as const satisfies readonly DocsShortcutDefinition[]
export const DOCS_KEYBOARD_SHORTCUTS_BY_ID: Record<
DocsShortcutId,
DocsShortcutDefinition
> = Object.fromEntries(
DOCS_KEYBOARD_SHORTCUT_DEFINITIONS.map((definition) => [definition.id, definition])
) as Record<DocsShortcutId, DocsShortcutDefinition>
/** User overrides persisted locally (future settings UI). */
export type DocsKeyboardShortcutsUserConfig = Partial<
Record<DocsShortcutId, DocsShortcutBinding>
>
export const DOCS_KEYBOARD_SHORTCUTS_STORAGE_KEY = "ultidrive-docs-keyboard-shortcuts"