import { ReadonlySignal } from "@preact-signals/unified-signals"; import { ExplicitFalsy } from "./explicitFalsy"; export interface Accessor { (): T; } export type Reactive = ReadonlySignal | Accessor; export type AnyReactive = Reactive; export type GetTruthyValue = T extends Accessor< infer U | TFalsy > ? U : T extends ReadonlySignal ? U : never; export type GetValue = T extends Accessor ? U : T extends ReadonlySignal ? U : never; export interface Setter { (value: (prev: T) => T): T; (value: Exclude): T; (value: Exclude | ((prev: T) => T)): T; } export type CreateFunction = ( ...args: TArgs ) => TResult;