ActionBar.tsx 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. /* eslint-disable @typescript-eslint/no-non-null-assertion */
  2. /* eslint-disable @typescript-eslint/no-explicit-any */
  3. import { useApp } from '@tldraw/react'
  4. import { observer } from 'mobx-react-lite'
  5. import * as React from 'react'
  6. import type { Shape } from '../../lib'
  7. import { TablerIcon } from '../icons'
  8. import { ZoomMenu } from '../ZoomMenu'
  9. export const ActionBar = observer(function ActionBar(): JSX.Element {
  10. const app = useApp<Shape>()
  11. const undo = React.useCallback(() => {
  12. app.api.undo()
  13. }, [app])
  14. const redo = React.useCallback(() => {
  15. app.api.redo()
  16. }, [app])
  17. const zoomIn = React.useCallback(() => {
  18. app.api.zoomIn()
  19. }, [app])
  20. const zoomOut = React.useCallback(() => {
  21. app.api.zoomOut()
  22. }, [app])
  23. return (
  24. <div className="tl-action-bar">
  25. <div className="tl-history-bar">
  26. <button title="Undo" onClick={undo}>
  27. <TablerIcon name="arrow-back-up" />
  28. </button>
  29. <button title="Redo" onClick={redo}>
  30. <TablerIcon name="arrow-forward-up" />
  31. </button>
  32. </div>
  33. <div className="tl-zoom-bar">
  34. <button title="Zoom in" onClick={zoomIn}>
  35. <TablerIcon name="plus" />
  36. </button>
  37. <button title="Zoom out" onClick={zoomOut}>
  38. <TablerIcon name="minus" />
  39. </button>
  40. <ZoomMenu />
  41. </div>
  42. </div>
  43. )
  44. })