import { ReactElement } from 'react';
/**
 * Configuration options for injecting a router into a React component.
 *
 * @typedef {Object} InjectRouterOptions
 * @property {ReactElement<ReactComponentProps>} children - The child React element to be wrapped by the router.
 * @property {any} router - The router instance to be injected, typically used to provide routing context to the React component.
 */
export type InjectRouterOptions = {
    children: ReactElement<ReactComponentProps>;
    router: any;
};
/**
 * Represents a React element with an optional `identity` property in its props.
 *
 * This type is a specialized version of a ReactElement that includes an optional
 * `identity` field within its props object. The `identity` property can be used
 * to uniquely identify or distinguish instances of this element.
 *
 * This is intended for use in React component trees where additional metadata
 * like `identity` may need to be passed along with the component props.
 */
export type RuntimeReactElement = ReactElement<{
    identity?: string;
}>;
/**
 * Represents the properties for the `RuntimeRouterProvider`.
 *
 * This type defines the structure of the object expected by a router provider in the Runtime ecosystem.
 * It allows for customization and flexibility by including a set of required and additional properties.
 *
 * Properties:
 * - `identity`: A string that uniquely identifies the router provider.
 * - `router`: A property representing the router instance or configuration. The type of this property is not explicitly defined, allowing flexibility in its implementation.
 * - `[prop: string]: any`: An index signature that allows additional properties with any type, providing extensibility for custom requirements.
 */
export type RuntimeRouterProviderProps = {
    identity: string;
    router: any;
    [prop: string]: any;
};
/**
 * Type definition for the props accepted by a React component.
 *
 * The `ReactComponentProps` type allows for flexible and dynamic props
 * that a React component can accept, including an optional `children` property
 * and any additional properties using a string index signature.
 *
 * Properties:
 * - `children` (optional): Represents the child elements or components to be rendered within the component.
 * - `[prop: string]`: A string index signature that allows for passing additional dynamic properties.
 */
export type ReactComponentProps = {
    children?: any;
    router?: any;
    [prop: string]: any;
};
