/// import { type ReadonlySignal } from "@preact-signals/unified-signals"; import type { ReactiveRef } from "../$"; import type { Accessor } from "../utils"; declare const typeThrow: unique symbol; type ReactifyPropsInitial> = { [TKey in keyof T as TKey extends string | number ? TKey : TKey]?: T[TKey] extends ReactiveRef | ReadonlySignal ? ReactiveRef | ReadonlySignal : T[TKey]; } & { [TKey in keyof T as TKey extends string | number ? `${TKey}$` : TKey]?: Accessor; }; type Error = { [typeThrow]: Reason; }; type TypecheckProps, TInitial extends Record> = { [TKey in keyof TInitial]: TKey extends string | number ? TKey extends keyof T ? `${TKey}$` extends keyof T ? Error<`You can define only key with $ postfix and key without postfix, but not both: "${TKey}"`> : T[TKey] extends ReactiveRef ? never : T[TKey] extends ReadonlySignal ? never : T[TKey] extends TInitial[TKey] ? never : Error<`Type of "${TKey}" is not assignable to type property type`> : `${TKey}$` extends keyof T ? T[TKey] extends Accessor ? never : Error<`You can define only key with $ postfix and key without postfix, but not both: "${TKey}"`> : never : never; }[keyof TInitial]; export type ReactifyComponentReturn, TInitial extends Record, TTypecheck extends TypecheckProps = TypecheckProps> = keyof TInitial extends `${string}$` ? { "reactify.reactive-props.error": "you cannot use a key that ends with $"; } : (args: ReactifyPropsInitial) => TTypecheck extends never ? JSX.Element : { "reactify.reactive-props.error": TTypecheck[typeof typeThrow]; }; /** * @description you can pass as prop: Uncached, ReadonlySignal or state. * But you should never change type of this prop * TODO: throw in dev mode */ export declare const reactify: , TProps>(component: T) => React.ComponentType; export {};