import { Observable } from "rxjs"; export interface ReadonlySignal { readonly obs: Observable; peek(): T; get(): T; (): T; } export interface DisposableSignal extends ReadonlySignal, Disposable { dispose(): void; } export interface StateSignal extends DisposableSignal { set(value: T, actionName?: string): void; update(updater: (value: T) => T, actionName?: string): void; } export interface LocalStateSignal extends ReadonlySignal { set(value: T, actionName?: string): void; update(updater: (value: T) => T, actionName?: string): void; clear(): void; }