import { nothing, type TemplateResult, type PropertyValues } from 'lit';
import { DomainAssociation } from '@api-client/core/modeling/DomainAssociation.js';
import type { DomainEntity } from '@api-client/core/modeling/DomainEntity.js';
import { ModelingElement } from './ModelingElement.js';
import { type AssociationSemantic } from '@api-client/core/modeling/Semantics.js';
/**
 * Dispatched when the user wants to navigate to a parent entity.
 *
 * @event DomainAssociationEditor#openentity
 * @type {CustomEvent}
 * @property {object} detail - The event details.
 * @property {string} detail.key - The key of the parent entity to navigate to.
 * @property {string} detail.kind - The kind of the parent entity. It will always be `DomainEntityKind`.
 */
/**
 * Dispatched when the user deletes a property.
 *
 * @event DomainAssociationEditor#delete
 * @type {CustomEvent}
 * @property {object} detail - The event details.
 * @property {string} detail.key - The key of the parent entity to navigate to.
 * @property {string} detail.kind - The kind of the parent entity. It will always be `DomainEntityKind`.
 */
/**
 * An element that specializes in editing properties of a domain association.
 *
 * @fires domainbrowserbrowse - Dispatched when the user clicks on the "pick" button. The detail object
 *                              has the full intent configuration.
 * @fires change - Dispatched when the user changes the value of one of the inputs.
 * @fires DomainAssociationEditor#openentity - A custom event with the `key` and `type` when a property was selected.
 * @fires DomainAssociationEditor#delete - A custom event with the `key` and `type` when a property was selected.
 */
export default class DomainAssociationEditor extends ModelingElement {
    /**
     * The `DomainAssociation` object being edited.
     * This is updated when the `selected` property changes.
     */
    private accessor domainElement;
    protected willUpdate(cp: PropertyValues<this>): void;
    protected computeAssociation(): Promise<void>;
    /**
     * Sets the value of one of the "attribute" fields.
     * These are the checkboxes located in the "Attributes" section.
     *
     * @param name The name of the attribute to set.
     * @param value The boolean option to set as the value.
     * @throws {TypeError} When the passed name is not a valid attribute name.
     * @throws {TypeError} When the passed value is not a boolean value.
     * @fires change - Dispatched when an attribute value is updated.
     */
    setModelAttribute(name: string, value: boolean): void;
    /**
     * Sets the value of the association's `schema.linked` property.
     * @param value The value to set the `linked` property to.
     */
    setSchemaLinked(value: boolean): void;
    /**
     * A handler for the one of the metadata inputs value change.
     *
     * It supports the following fields:
     *
     * - `name`
     * - `displayName`
     * - `description`
     */
    protected handleMetaChange(e: Event): void;
    /**
     * A handler for any of the checkboxes in the `attributes` section.
     * It calls the `setModelAttribute()` method.
     */
    protected handleAttributeOptionChange(e: Event): void;
    protected handleLinkedChange(e: Event): void;
    protected handleSelectTarget(): Promise<void>;
    protected handleDeleteTarget(e: Event): void;
    protected handleNavigateTarget(e: Event): void;
    protected handleUnionTypeChange(e: Event): void;
    protected handleTargetDragEnter(e: DragEvent): void;
    protected handleTargetDragOver(e: DragEvent): void;
    protected handleTargetDragLeave(e: DragEvent): void;
    protected handleTargetDrop(e: DragEvent): void;
    /**
     * Adds a target entity to the association.
     *
     * @param key The key of the target entity to add.
     * @param nsKey The namespace key of the target entity, if it is in a foreign namespace.
     */
    protected addTarget(key: string, nsKey?: string): void;
    protected handleDelete(): void;
    protected handleDeleteTaxonomy(e: Event): void;
    protected handleTaxonomySelect(e: CustomEvent<{
        item: HTMLElement;
    }>): void;
    protected handleConfigureTaxonomy(e: Event): void;
    protected render(): TemplateResult | typeof nothing;
    protected renderForm(model: DomainAssociation): TemplateResult;
    protected renderMetaInputs(model: DomainAssociation): TemplateResult;
    protected renderAttributes(model: DomainAssociation): TemplateResult;
    protected renderAttributeOptions(model: DomainAssociation): TemplateResult;
    protected renderSchema(model: DomainAssociation): TemplateResult | typeof nothing;
    protected renderTargetEntitySection(model: DomainAssociation): TemplateResult;
    /**
     * Renders the section with the current target entity.
     *
     * @todo: The UI only allows to select one target entity.
     *        We need to add a way to select multiple target entities.
     */
    protected renderTargetEntities(model: DomainAssociation): TemplateResult | typeof nothing;
    protected renderChooseTargetButton(): TemplateResult;
    protected renderTargetItems(targets: DomainEntity[]): TemplateResult | typeof nothing;
    protected renderUnionType(model: DomainAssociation): TemplateResult;
    protected renderDataGovernanceSection(model: DomainAssociation): TemplateResult | typeof nothing;
    protected renderTaxonomyInput(model: DomainAssociation): TemplateResult | typeof nothing;
    protected renderSelectedSemantics(selected: AssociationSemantic[]): TemplateResult | typeof nothing;
    protected renderTaxonomyItem(semantic: AssociationSemantic): TemplateResult;
    protected renderTaxonomyCategories(categories: Record<string, AssociationSemantic[]>): TemplateResult[];
}
//# sourceMappingURL=DomainAssociationEditor.d.ts.map