| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 | 
							- import styled from "styles"
 - import React, { useCallback, useRef } from "react"
 - import useZoomEvents from "hooks/useZoomEvents"
 - import useCamera from "hooks/useCamera"
 - import Page from "./page"
 - import Brush from "./brush"
 - import state from "state"
 - import Bounds from "./bounds"
 - import BoundsBg from "./bounds-bg"
 - import inputs from "state/inputs"
 - 
 - export default function Canvas() {
 -   const rCanvas = useRef<SVGSVGElement>(null)
 -   const rGroup = useRef<SVGGElement>(null)
 -   const events = useZoomEvents(rCanvas)
 - 
 -   useCamera(rGroup)
 - 
 -   const handlePointerDown = useCallback((e: React.PointerEvent) => {
 -     rCanvas.current.setPointerCapture(e.pointerId)
 -     state.send("POINTED_CANVAS", inputs.pointerDown(e, "canvas"))
 -   }, [])
 - 
 -   const handlePointerMove = useCallback((e: React.PointerEvent) => {
 -     state.send("MOVED_POINTER", inputs.pointerMove(e))
 -   }, [])
 - 
 -   const handlePointerUp = useCallback((e: React.PointerEvent) => {
 -     rCanvas.current.releasePointerCapture(e.pointerId)
 -     state.send("STOPPED_POINTING", { id: "canvas", ...inputs.pointerUp(e) })
 -   }, [])
 - 
 -   return (
 -     <MainSVG
 -       ref={rCanvas}
 -       {...events}
 -       onPointerDown={handlePointerDown}
 -       onPointerMove={handlePointerMove}
 -       onPointerUp={handlePointerUp}
 -     >
 -       <MainGroup ref={rGroup}>
 -         <BoundsBg />
 -         <Page />
 -         <Bounds />
 -         <Brush />
 -       </MainGroup>
 -     </MainSVG>
 -   )
 - }
 - 
 - const MainSVG = styled("svg", {
 -   position: "fixed",
 -   top: 0,
 -   left: 0,
 -   width: "100%",
 -   height: "100%",
 -   touchAction: "none",
 -   zIndex: 100,
 - })
 - 
 - const MainGroup = styled("g", {})
 
 
  |