keys.ts 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. export const isDarwin = /Mac|iPod|iPhone|iPad/.test(window.navigator.platform);
  2. export const isWindows = /^Win/.test(window.navigator.platform);
  3. export const isAndroid = /\b(android)\b/i.test(navigator.userAgent);
  4. export const CODES = {
  5. EQUAL: "Equal",
  6. MINUS: "Minus",
  7. NUM_ADD: "NumpadAdd",
  8. NUM_SUBTRACT: "NumpadSubtract",
  9. NUM_ZERO: "Numpad0",
  10. BRACKET_RIGHT: "BracketRight",
  11. BRACKET_LEFT: "BracketLeft",
  12. ONE: "Digit1",
  13. TWO: "Digit2",
  14. NINE: "Digit9",
  15. QUOTE: "Quote",
  16. ZERO: "Digit0",
  17. SLASH: "Slash",
  18. C: "KeyC",
  19. D: "KeyD",
  20. H: "KeyH",
  21. V: "KeyV",
  22. Z: "KeyZ",
  23. R: "KeyR",
  24. } as const;
  25. export const KEYS = {
  26. ARROW_DOWN: "ArrowDown",
  27. ARROW_LEFT: "ArrowLeft",
  28. ARROW_RIGHT: "ArrowRight",
  29. ARROW_UP: "ArrowUp",
  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. } as const;
  64. export type Key = keyof typeof KEYS;
  65. export const isArrowKey = (key: string) =>
  66. key === KEYS.ARROW_LEFT ||
  67. key === KEYS.ARROW_RIGHT ||
  68. key === KEYS.ARROW_DOWN ||
  69. key === KEYS.ARROW_UP;
  70. export const shouldResizeFromCenter = (event: MouseEvent | KeyboardEvent) =>
  71. event.altKey;
  72. export const shouldMaintainAspectRatio = (event: MouseEvent | KeyboardEvent) =>
  73. event.shiftKey;
  74. export const shouldRotateWithDiscreteAngle = (
  75. event: MouseEvent | KeyboardEvent | React.PointerEvent<HTMLCanvasElement>,
  76. ) => event.shiftKey;