* 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>
196 lines
5.0 KiB
TypeScript
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)
|
|
)
|
|
}
|