import { type APIComponents, type APITopLevelComponent, ComponentType } from '../types';
import { MessageActionRowComponent } from './ActionRow';
import { BaseComponent } from './BaseComponent';
import { ButtonComponent, LinkButtonComponent, SKUButtonComponent } from './ButtonComponent';
import { ChannelSelectMenuComponent } from './ChannelSelectMenuComponent';
import { ContainerComponent } from './Container';
import { FileComponent } from './File';
import { MediaGalleryComponent } from './MediaGallery';
import { MentionableSelectMenuComponent } from './MentionableSelectMenuComponent';
import { RoleSelectMenuComponent } from './RoleSelectMenuComponent';
import { SectionComponent } from './Section';
import { SeparatorComponent } from './Separator';
import { StringSelectMenuComponent } from './StringSelectMenuComponent';
import { TextDisplayComponent } from './TextDisplay';
import { TextInputComponent } from './TextInputComponent';
import { UserSelectMenuComponent } from './UserSelectMenuComponent';
export type MessageComponents = ButtonComponent | LinkButtonComponent | SKUButtonComponent | RoleSelectMenuComponent | UserSelectMenuComponent | StringSelectMenuComponent | ChannelSelectMenuComponent | MentionableSelectMenuComponent | TextInputComponent;
export type ActionRowMessageComponents = Exclude<MessageComponents, TextInputComponent>;
export type AllComponents = MessageComponents | TopLevelComponents | ContainerComponents | BaseComponent<ComponentType>;
export * from './componentcommand';
export * from './componentcontext';
export * from './modalcommand';
export * from './modalcontext';
export type TopLevelComponents = SectionComponent | ActionRowMessageComponents | TextDisplayComponent | ContainerComponent | FileComponent | MediaGalleryComponent | BaseComponent<APITopLevelComponent['type']>;
export type ContainerComponents = MessageActionRowComponent | TextDisplayComponent | MediaGalleryComponent | SectionComponent | SeparatorComponent | FileComponent;
/**
 * Return a new component instance based on the component type.
 *
 * @param component The component to create.
 * @returns The component instance.
 */
export declare function componentFactory(component: APIComponents): AllComponents;
