keys.ts 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. import { isDarwin } from "./constants";
  2. export const CODES = {
  3. EQUAL: "Equal",
  4. MINUS: "Minus",
  5. NUM_ADD: "NumpadAdd",
  6. NUM_SUBTRACT: "NumpadSubtract",
  7. NUM_ZERO: "Numpad0",
  8. BRACKET_RIGHT: "BracketRight",
  9. BRACKET_LEFT: "BracketLeft",
  10. ONE: "Digit1",
  11. TWO: "Digit2",
  12. NINE: "Digit9",
  13. QUOTE: "Quote",
  14. ZERO: "Digit0",
  15. SLASH: "Slash",
  16. C: "KeyC",
  17. D: "KeyD",
  18. H: "KeyH",
  19. V: "KeyV",
  20. Z: "KeyZ",
  21. R: "KeyR",
  22. } as const;
  23. export const KEYS = {
  24. ARROW_DOWN: "ArrowDown",
  25. ARROW_LEFT: "ArrowLeft",
  26. ARROW_RIGHT: "ArrowRight",
  27. ARROW_UP: "ArrowUp",
  28. PAGE_UP: "PageUp",
  29. PAGE_DOWN: "PageDown",
  30. BACKSPACE: "Backspace",
  31. ALT: "Alt",
  32. CTRL_OR_CMD: isDarwin ? "metaKey" : "ctrlKey",
  33. DELETE: "Delete",
  34. ENTER: "Enter",
  35. ESCAPE: "Escape",
  36. QUESTION_MARK: "?",
  37. SPACE: " ",
  38. TAB: "Tab",
  39. CHEVRON_LEFT: "<",
  40. CHEVRON_RIGHT: ">",
  41. PERIOD: ".",
  42. COMMA: ",",
  43. A: "a",
  44. C: "c",
  45. D: "d",
  46. E: "e",
  47. F: "f",
  48. G: "g",
  49. H: "h",
  50. I: "i",
  51. L: "l",
  52. O: "o",
  53. P: "p",
  54. Q: "q",
  55. R: "r",
  56. S: "s",
  57. T: "t",
  58. V: "v",
  59. X: "x",
  60. Y: "y",
  61. Z: "z",
  62. K: "k",
  63. 0: "0",
  64. 1: "1",
  65. 2: "2",
  66. 3: "3",
  67. 4: "4",
  68. 5: "5",
  69. 6: "6",
  70. 7: "7",
  71. 8: "8",
  72. 9: "9",
  73. } as const;
  74. export type Key = keyof typeof KEYS;
  75. export const isArrowKey = (key: string) =>
  76. key === KEYS.ARROW_LEFT ||
  77. key === KEYS.ARROW_RIGHT ||
  78. key === KEYS.ARROW_DOWN ||
  79. key === KEYS.ARROW_UP;
  80. export const shouldResizeFromCenter = (event: MouseEvent | KeyboardEvent) =>
  81. event.altKey;
  82. export const shouldMaintainAspectRatio = (event: MouseEvent | KeyboardEvent) =>
  83. event.shiftKey;
  84. export const shouldRotateWithDiscreteAngle = (
  85. event: MouseEvent | KeyboardEvent | React.PointerEvent<HTMLCanvasElement>,
  86. ) => event.shiftKey;