import { ReadonlySignal, Signal, useComputed, useSignal } from "@preact-signals/unified-signals"; import { useRef } from "react"; const isSignal = (value: T | ReadonlySignal): value is Signal => value instanceof Signal; export const useLiveSignal = (maybeSignal: T | ReadonlySignal) => { const signalValue = useSignal(maybeSignal); if (signalValue.peek() !== maybeSignal) { signalValue.value = maybeSignal; } return useComputed(() => { const value = signalValue.value; return isSignal(value) ? value.value : (value as T); }); }; const empty = Symbol("empty"); export const useConstant = (fn: () => T) => { const ref = useRef(empty); if (ref.current === empty) { ref.current = fn(); } return ref.current; };