import type { JSX, Signal } from 'solid-js';
import type { OmitAndMerge } from './types';
export type ValidElements = keyof JSX.IntrinsicElements;
export type ValidComponent
= (props: P) => JSX.Element;
export type ValidConstructor = ValidElements | ValidComponent | (string & {});
export type DynamicProps = T extends ValidElements ? JSX.IntrinsicElements[T] : T extends ValidComponent ? U : Record;
type UnboxIntrinsicElements = T extends JSX.HTMLAttributes ? U : never;
type RefCallback = (el: T) => void;
type RefField = T | RefCallback;
type UnboxComponentProp = U extends {
ref: infer X;
} ? X : never;
export type DynamicNode = T extends ValidElements ? UnboxIntrinsicElements : T extends ValidComponent ? UnboxComponentProp : never;
export interface WithRef {
ref?: RefField>;
}
export interface DynamicComponent {
as?: T;
}
export interface DynamicComponentWithRef extends WithRef {
as?: T;
}
export type HeadlessProps = OmitAndMerge, DynamicProps>;
export type HeadlessPropsWithRef = OmitAndMerge, DynamicProps>;
export declare function createForwardRef(props: WithRef): Signal | undefined>;
export {};
//# sourceMappingURL=dynamic-prop.d.ts.map