keys.ts 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. export const isDarwin = /Mac|iPod|iPhone|iPad/.test(window.navigator.platform);
  2. export const isWindows = /^Win/.test(window.navigator.platform);
  3. export const CODES = {
  4. EQUAL: "Equal",
  5. MINUS: "Minus",
  6. NUM_ADD: "NumpadAdd",
  7. NUM_SUBTRACT: "NumpadSubtract",
  8. NUM_ZERO: "Numpad0",
  9. BRACKET_RIGHT: "BracketRight",
  10. BRACKET_LEFT: "BracketLeft",
  11. ONE: "Digit1",
  12. TWO: "Digit2",
  13. NINE: "Digit9",
  14. QUOTE: "Quote",
  15. ZERO: "Digit0",
  16. SLASH: "Slash",
  17. C: "KeyC",
  18. D: "KeyD",
  19. G: "KeyG",
  20. F: "KeyF",
  21. H: "KeyH",
  22. V: "KeyV",
  23. X: "KeyX",
  24. Z: "KeyZ",
  25. R: "KeyR",
  26. } as const;
  27. export const KEYS = {
  28. ARROW_DOWN: "ArrowDown",
  29. ARROW_LEFT: "ArrowLeft",
  30. ARROW_RIGHT: "ArrowRight",
  31. ARROW_UP: "ArrowUp",
  32. BACKSPACE: "Backspace",
  33. ALT: "Alt",
  34. CTRL_OR_CMD: isDarwin ? "metaKey" : "ctrlKey",
  35. DELETE: "Delete",
  36. ENTER: "Enter",
  37. ESCAPE: "Escape",
  38. QUESTION_MARK: "?",
  39. SPACE: " ",
  40. TAB: "Tab",
  41. A: "a",
  42. D: "d",
  43. E: "e",
  44. G: "g",
  45. I: "i",
  46. L: "l",
  47. O: "o",
  48. P: "p",
  49. Q: "q",
  50. R: "r",
  51. S: "s",
  52. T: "t",
  53. V: "v",
  54. X: "x",
  55. Y: "y",
  56. Z: "z",
  57. } as const;
  58. export type Key = keyof typeof KEYS;
  59. export const isArrowKey = (key: string) =>
  60. key === KEYS.ARROW_LEFT ||
  61. key === KEYS.ARROW_RIGHT ||
  62. key === KEYS.ARROW_DOWN ||
  63. key === KEYS.ARROW_UP;
  64. export const shouldResizeFromCenter = (event: MouseEvent | KeyboardEvent) =>
  65. event.altKey;
  66. export const shouldMaintainAspectRatio = (event: MouseEvent | KeyboardEvent) =>
  67. event.shiftKey;
  68. export const shouldRotateWithDiscreteAngle = (
  69. event: MouseEvent | KeyboardEvent,
  70. ) => event.shiftKey;