import type { HubSpotReactComponent, HubSpotReactFragmentProp, UnknownComponentProps } from '../shared/types/shared.ts';
/**
 * Utility type for filtering out all of the prop names where the value is a ReactNode.
 * We use this to know which props are allowed to be used as fragment props.
 */
type ComponentFragmentPropName<TProps extends UnknownComponentProps> = {
    [K in keyof TProps]: HubSpotReactFragmentProp extends Required<TProps>[K] ? K : never;
}[keyof TProps & string];
/**
 * Options for creating a custom remote component.
 */
export interface CreateRemoteComponentInternalOptions<TProps extends UnknownComponentProps = UnknownComponentProps> {
    /**
     * An array of prop names that are allowed to be used as fragment props (props that accept ReactNode children).
     */
    fragmentProps?: ComponentFragmentPropName<TProps>[];
}
/**
 * Creates and registers a custom remote component for internal HubSpot use.
 *
 * This function is intended for HubSpot internal teams who need to create
 * custom remote components that work with the UI Extensions testing utilities.
 *
 * Components created with this function will:
 * - Be registered in the global component registry
 * - Pass validation in testing utilities (isAllowedComponentName)
 * - Work with renderer.find(), renderer.findAll(), and other testing utilities
 *
 * @param componentName - Unique name for the component (e.g., "FlywheelCustomButton").
 *                        Recommended to prefix with team name to avoid collisions.
 * @param options - Optional configuration including fragment props
 * @returns A typed remote React component that can be rendered in a remote environment
 */
export declare function createRemoteComponentInternal<TProps extends UnknownComponentProps>(componentName: string, options?: CreateRemoteComponentInternalOptions<TProps>): HubSpotReactComponent<TProps>;
export {};
