You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

PrimaryTools.tsx 2.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. import * as React from 'react'
  2. import {
  3. ArrowTopRightIcon,
  4. CursorArrowIcon,
  5. Pencil1Icon,
  6. Pencil2Icon,
  7. TextIcon,
  8. } from '@radix-ui/react-icons'
  9. import { TDSnapshot, TDShapeType } from '~types'
  10. import { useTldrawApp } from '~hooks'
  11. import { ToolButtonWithTooltip } from '~components/Primitives/ToolButton'
  12. import { Panel } from '~components/Primitives/Panel'
  13. import { ShapesMenu } from './ShapesMenu'
  14. import { EraserIcon } from '~components/Primitives/icons'
  15. const activeToolSelector = (s: TDSnapshot) => s.appState.activeTool
  16. const toolLockedSelector = (s: TDSnapshot) => s.appState.isToolLocked
  17. export const PrimaryTools = React.memo(function PrimaryTools(): JSX.Element {
  18. const app = useTldrawApp()
  19. const activeTool = app.useStore(activeToolSelector)
  20. const isToolLocked = app.useStore(toolLockedSelector)
  21. const selectSelectTool = React.useCallback(() => {
  22. app.selectTool('select')
  23. }, [app])
  24. const selectEraseTool = React.useCallback(() => {
  25. app.selectTool('erase')
  26. }, [app])
  27. const selectDrawTool = React.useCallback(() => {
  28. app.selectTool(TDShapeType.Draw)
  29. }, [app])
  30. const selectArrowTool = React.useCallback(() => {
  31. app.selectTool(TDShapeType.Arrow)
  32. }, [app])
  33. const selectTextTool = React.useCallback(() => {
  34. app.selectTool(TDShapeType.Text)
  35. }, [app])
  36. const selectStickyTool = React.useCallback(() => {
  37. app.selectTool(TDShapeType.Sticky)
  38. }, [app])
  39. return (
  40. <Panel side="center">
  41. <ToolButtonWithTooltip
  42. kbd={'1'}
  43. label={'select'}
  44. onClick={selectSelectTool}
  45. isActive={activeTool === 'select'}
  46. >
  47. <CursorArrowIcon />
  48. </ToolButtonWithTooltip>
  49. <ToolButtonWithTooltip
  50. kbd={'2'}
  51. label={TDShapeType.Draw}
  52. onClick={selectDrawTool}
  53. isActive={activeTool === TDShapeType.Draw}
  54. >
  55. <Pencil1Icon />
  56. </ToolButtonWithTooltip>
  57. <ToolButtonWithTooltip
  58. kbd={'3'}
  59. label={'eraser'}
  60. onClick={selectEraseTool}
  61. isActive={activeTool === 'erase'}
  62. >
  63. <EraserIcon />
  64. </ToolButtonWithTooltip>
  65. <ShapesMenu activeTool={activeTool} isToolLocked={isToolLocked} />
  66. <ToolButtonWithTooltip
  67. kbd={'6'}
  68. label={TDShapeType.Arrow}
  69. onClick={selectArrowTool}
  70. isLocked={isToolLocked}
  71. isActive={activeTool === TDShapeType.Arrow}
  72. >
  73. <ArrowTopRightIcon />
  74. </ToolButtonWithTooltip>
  75. <ToolButtonWithTooltip
  76. kbd={'7'}
  77. label={TDShapeType.Text}
  78. onClick={selectTextTool}
  79. isLocked={isToolLocked}
  80. isActive={activeTool === TDShapeType.Text}
  81. >
  82. <TextIcon />
  83. </ToolButtonWithTooltip>
  84. <ToolButtonWithTooltip
  85. kbd={'8'}
  86. label={TDShapeType.Sticky}
  87. onClick={selectStickyTool}
  88. isActive={activeTool === TDShapeType.Sticky}
  89. >
  90. <Pencil2Icon />
  91. </ToolButtonWithTooltip>
  92. </Panel>
  93. )
  94. })