Files
modeling-app/src/lib/settings/initialKeybindings.ts
Mike Farrell d104ca2b05 Add menu item and hotkey to center view on current selection (#4068)
* tentatively adding this

* Update src/components/ModelingMachineProvider.tsx

Co-authored-by: Jonathan Tran <jonnytran@gmail.com>

* Show shortcut in UI dialog

* Move command into modelingMachine action

* Add a menu item to the view menu

* Switch gizmo tests to use "deprecated" test setup in prep for new fixture-based test

* Add e2e test for center view to selection

* Bump @kittycad/lib to latest and fix tsc

* Bump @kittycad/lib to v2.0.7 to fix electron building

* A snapshot a day keeps the bugs away! 📷🐛 (OS: windows-latest)

* A snapshot a day keeps the bugs away! 📷🐛 (OS: ubuntu-latest)

* A snapshot a day keeps the bugs away! 📷🐛 (OS: windows-latest)

---------

Co-authored-by: Jonathan Tran <jonnytran@gmail.com>
Co-authored-by: Frank Noirot <frank@kittycad.io>
Co-authored-by: 49fl <ircsurfer33@gmail.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Frank Noirot <frank@zoo.dev>
2024-10-04 16:47:44 -04:00

196 lines
5.0 KiB
TypeScript

import { isDesktop } from 'lib/isDesktop'
import { platform } from 'lib/utils'
export type InteractionMapItem = {
name: string
sequence: string
title: string
description: string
}
/**
* Controls both the available names for interaction map categories
* and the order in which they are displayed.
*/
export const interactionMapCategories = [
'Sketching',
'Modeling',
'Command Palette',
'Settings',
'Panes',
'Code Editor',
'File Tree',
'Miscellaneous',
]
type InteractionMapCategory = (typeof interactionMapCategories)[number]
/**
* Primary modifier key for the current platform.
*/
const PRIMARY = platform() === 'macos' ? 'Command' : 'Control'
/**
* A temporary implementation of the interaction map for
* display purposes only.
* @todo Implement a proper interaction map
* that can be edited, saved, and loaded. This is underway in the
* franknoirot/editable-hotkeys branch.
*/
export const interactionMap: Record<
InteractionMapCategory,
InteractionMapItem[]
> = {
Settings: [
{
name: 'toggle-settings',
sequence: isDesktop() ? `${PRIMARY}+,` : `Shift+${PRIMARY}+,`,
title: 'Toggle Settings',
description: 'Opens the settings dialog. Always available.',
},
{
name: 'settings-search',
sequence: 'Control+.',
title: 'Settings Search',
description:
'Focus the settings search input. Available when settings are open.',
},
],
'Command Palette': [
{
name: 'toggle-command-palette',
sequence: `${PRIMARY}+K`,
title: 'Toggle Command Palette',
description: 'Always available.',
},
],
Panes: [
{
name: 'toggle-code-pane',
sequence: 'Shift+C',
title: 'Toggle Code Pane',
description:
'Available while modeling when not typing in the code editor.',
},
{
name: 'toggle-variables-pane',
sequence: 'Shift+V',
title: 'Toggle Variables Pane',
description:
'Available while modeling when not typing in the code editor.',
},
{
name: 'toggle-logs-pane',
sequence: 'Shift+L',
title: 'Toggle Logs Pane',
description:
'Available while modeling when not typing in the code editor.',
},
{
name: 'toggle-errors-pane',
sequence: 'Shift+E',
title: 'Toggle Errors Pane',
description:
'Available while modeling when not typing in the code editor.',
},
],
Sketching: [
{
name: 'enter-sketch-mode',
sequence: 'S',
title: 'Enter Sketch Mode',
description:
'Available while modeling when not typing in the code editor.',
},
{
name: 'unequip-sketch-tool',
sequence: 'Escape',
title: 'Unequip Sketch Tool',
description:
'Unequips the current sketch tool. Available while sketching.',
},
{
name: 'exit-sketch-mode',
sequence: 'Escape',
title: 'Exit Sketch Mode',
description: 'Available while sketching, if no sketch tool is equipped.',
},
{
name: 'toggle-line-tool',
sequence: 'L',
title: 'Toggle Line Tool',
description:
'Available while sketching, when not typing in the code editor.',
},
{
name: 'toggle-rectangle-tool',
sequence: 'R',
title: 'Toggle Rectangle Tool',
description:
'Available while sketching, when not typing in the code editor.',
},
{
name: 'toggle-arc-tool',
sequence: 'A',
title: 'Toggle Arc Tool',
description:
'Available while sketching, when not typing in the code editor.',
},
],
Modeling: [
{
name: 'extrude',
sequence: 'E',
title: 'Extrude',
description:
'Available while modeling with either a face selected or an empty selection, when not typing in the code editor.',
},
{
name: 'center-on-selection',
sequence: `${PRIMARY}+Alt+C`,
title: 'Center on selection',
description:
'Centers the view on the selected geometry, or everything if nothing is selected.',
},
],
'Code Editor': [
{
name: 'format-code',
sequence: 'Shift+Alt+F',
title: 'Format Code',
description:
'Nicely formats the KCL code in the editor, available when the editor is focused.',
},
],
'File Tree': [
{
name: 'rename-file',
sequence: 'Enter',
title: 'Rename File/Folder',
description:
'Available when a file or folder is selected in the file tree.',
},
{
name: 'delete-file',
sequence: `${PRIMARY}+Backspace`,
title: 'Delete File/Folder',
description:
'Available when a file or folder is selected in the file tree.',
},
],
}
/**
* Sorts interaction map categories by their order in the
* `interactionMapCategories` array.
*/
export function sortInteractionMapByCategory(
[categoryA]: [InteractionMapCategory, InteractionMapItem[]],
[categoryB]: [InteractionMapCategory, InteractionMapItem[]]
) {
return (
interactionMapCategories.indexOf(categoryA) -
interactionMapCategories.indexOf(categoryB)
)
}