| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 | import styled from 'styles'
import state, { useSelector } from 'state'
import React, { useEffect, useRef } from 'react'
import useZoomEvents from 'hooks/useZoomEvents'
import useCamera from 'hooks/useCamera'
import Defs from './defs'
import Page from './page'
import Brush from './brush'
import Bounds from './bounds/bounding-box'
import BoundsBg from './bounds/bounds-bg'
import Selected from './selected'
import Handles from './bounds/handles'
import useCanvasEvents from 'hooks/useCanvasEvents'
import ContextMenu from './context-menu/context-menu'
export default function Canvas() {
  const rCanvas = useRef<SVGSVGElement>(null)
  const rGroup = useRef<SVGGElement>(null)
  useCamera(rGroup)
  useZoomEvents()
  const events = useCanvasEvents(rCanvas)
  const isReady = useSelector((s) => s.isIn('ready'))
  return (
    <ContextMenu>
      <MainSVG ref={rCanvas} {...events}>
        <Defs />
        {isReady && (
          <g ref={rGroup}>
            <BoundsBg />
            <Page />
            {/* <Selected /> */}
            <Bounds />
            <Handles />
            <Brush />
          </g>
        )}
      </MainSVG>
    </ContextMenu>
  )
}
const MainSVG = styled('svg', {
  position: 'fixed',
  overflow: 'hidden',
  top: 0,
  left: 0,
  width: '100%',
  height: '100%',
  touchAction: 'none',
  zIndex: 100,
  backgroundColor: '$canvas',
  pointerEvents: 'all',
  // cursor: 'none',
  '& *': {
    userSelect: 'none',
  },
})
 |