Files
blitzkit/packages/website/src/components/SmartCanvas.tsx
T

20 lines
566 B
TypeScript
Raw Normal View History

2025-09-27 16:07:45 -05:00
import { Canvas, type CanvasProps } from "@react-three/fiber";
import { forwardRef, useImperativeHandle, useRef } from "react";
import { useOnScreen } from "../hooks/useOnScreen";
2025-08-11 11:25:25 -05:00
export const SmartCanvas = forwardRef<HTMLCanvasElement, CanvasProps>(
(props, ref) => {
2025-09-27 16:07:45 -05:00
const canvas = useRef<HTMLCanvasElement>(null!);
2025-08-11 11:25:25 -05:00
const onScreen = useOnScreen(canvas);
useImperativeHandle(ref, () => canvas.current!, []);
return (
<Canvas
2025-09-27 16:07:45 -05:00
frameloop={onScreen ? "demand" : "never"}
2025-08-11 11:25:25 -05:00
ref={canvas}
{...props}
/>
);
2025-09-27 16:07:45 -05:00
}
2025-08-11 11:25:25 -05:00
);