import { type TemplateResult, nothing } from 'lit';
import { ExposedEntity, type ApiModel } from '@api-client/core/browser.js';
import { ApiModelingScreen } from './ApiModelingScreen.js';
export interface EditActionEventDetail {
    /**
     * The id of the exposed entity.
     */
    exposedId: string;
    /**
     * The kind of operation to edit (list, read, delete, etc)
     */
    kind: string;
}
export interface EditExposedEntityEventDetail {
    /**
     * The id of the exposed entity.
     */
    exposedId: string;
}
/**
 * A screen that allows the user to expose data entities as a root level actions
 * and configure their properties:
 * - Collection actions (create, list, search)
 * - Resource actions (read, update, delete)
 *
 * @fires exposed-new - When the user wants to expose an entity.
 * @fires action-edit - When the user wants to edit an action.
 * @fires exposed-edit - When the user wants to edit an exposed entity.
 * @fires exposed-remove - When the user wants to remove an exposed entity.
 */
export default class ApiModelingActionsScreen extends ApiModelingScreen {
    /**
     * A flag that determines whether the API has added a data domain.
     */
    accessor hasDomain: boolean;
    /**
     * The list of exposed entities **on the root level**.
     */
    accessor exposed: ExposedEntity[];
    protected handleModelChange(model: ApiModel | undefined): void;
    protected handleDomainChange(): void;
    /**
     * A handler for the "Add data" button click.
     * It dispatches the `exposeentity` event to notify the parent component that the user wants to expose an entity.
     */
    protected handleAddDataClick(): void;
    /**
     * A handler for the "Remove action" button click.
     * It removes the action from the model and updates the exposed list.
     * @param event The event object.
     */
    protected handleRemoveAction(e: Event): void;
    /**
     * Handles the action selection event.
     * It dispatches the `editaction` event to notify the parent component that the user wants to edit an action.
     * @param e The event object.
     */
    protected handleActionSelect(e: CustomEvent<{
        kind: string;
    }>): void;
    protected handleEditAction(e: Event): void;
    render(): TemplateResult | typeof nothing;
    private renderContent;
    private renderEmptyView;
    private renderExposedPath;
    /**
     * Recursively render an expose and its children. Shows entity name only.
     * The model guarantees no infinite cycles, so the UI does not need to track visited nodes.
     */
    private renderExposeTree;
    /**
     * Render a node and all its descendants inline (used for child rows).
     */
    private renderExposeInline;
    private renderEntity;
    private renderMissingEntity;
    private renderEntityActions;
    private renderCollectionActions;
    private renderResourceActions;
    private renderEntityAction;
}
//# sourceMappingURL=ApiModelingActionsScreen.d.ts.map