@react-three/uikit
Version:
Build performant 3D user interfaces with react-three-fiber and yoga.
24 lines (23 loc) • 1.07 kB
JavaScript
import { jsx as _jsx } from "react/jsx-runtime";
import { effect, signal } from '@preact/signals-core';
import { forwardRef, useEffect, useMemo, useState } from 'react';
import { useDefaultProperties } from './default.js';
export const AddHandlers = forwardRef(({ handlers: handlersSignal, children }, ref) => {
const [handlers, setHandlers] = useState(() => handlersSignal.peek());
useEffect(() => effect(() => {
const handlers = handlersSignal.value;
const ref = void setTimeout(() => setHandlers(handlers), 0);
return () => clearTimeout(ref);
}), [handlersSignal]);
return (_jsx("object3D", { ref: ref, matrixAutoUpdate: false, ...handlers, children: children }));
});
export function usePropertySignals(properties) {
const propertySignals = useMemo(() => ({
style: signal(undefined),
properties: signal(undefined),
default: signal(undefined),
}), []);
propertySignals.properties.value = properties;
propertySignals.default.value = useDefaultProperties();
return propertySignals;
}