@react-three/xr
Version:
VR/AR for react-three-fiber
24 lines (23 loc) • 845 B
JavaScript
import { jsx as _jsx } from "react/jsx-runtime";
import { forwardRef, useEffect, useMemo } from 'react';
import { createRoot } from 'react-dom/client';
import tunnel from 'tunnel-rat';
import { useXR } from './xr.js';
/**
* Renders html elements as an overlay for handheld AR experiences
* @param props Props are forwarded to a `div` element
* @function
*/
export const XRDomOverlay = forwardRef((props, ref) => {
const domOverlayRoot = useXR((xr) => xr.domOverlayRoot);
const { In, Out } = useMemo(tunnel, []);
useEffect(() => {
if (domOverlayRoot == null) {
return;
}
const root = createRoot(domOverlayRoot);
root.render(_jsx(Out, {}));
return () => root.unmount();
}, [domOverlayRoot, Out]);
return (_jsx(In, { children: _jsx("div", { ...props, ref: ref }) }));
});