/// <reference types="@arcgis/core/interfaces.d.ts" />
/// <reference path="../../index.d.ts" />
import { PublicLitElement as LitElement, TargetedEvent, JsxNode } from '@arcgis/lumina';
import { PropertyValues } from 'lit';
import { IPickListFieldInfo, IPickListGroupInfo, IPopoverProps, LastSortBy } from '../../utils/types';
import { FieldPickListLayer } from './utils/types';

/**
 * A component that displays a list of fields for selection, inside a popover (default) or just as a list.
 *
 * [Read more...](https://developers.arcgis.com/javascript/latest/references/common-components/arcgis-field-pick-list/)
 *
 * @slot [content-top] - A slot for content on top of the search filter and list, non-scrollable. Valid only if listOnly is not set to true.
 * @slot [content-center] - A slot for content below the search filter and above the list items, will scroll with the list.
 * @slot [content-bottom] - A slot for content below the list, non-scrollable. Valid only if listOnly is not set to true.
 * @slot [content-footer] - A slot for content below the list inside the panel's footer, non-scrollable. Valid only if listOnly is not set to true.
 * @slot [no-fields] - A slot for content, e.g. a message, that displays if the list of fields is empty.
 */
export declare class ArcgisFieldPickList extends LitElement {
    /** @deprecated use view instead */
    mapView?: __esri.View;
    /** View instance. */
    view?: __esri.View;
    /** Layer instance. */
    layer?: FieldPickListLayer;
    /**
     * All display fields with name, alias, type, and description, sorted by default order.
     * A field with type "none" will always show at the bottom of the list without an info action.
     */
    fields: IPickListFieldInfo[] | IPickListGroupInfo[];
    /** The initially selected fields. Will use selectedFields[0] when multiple is set to false. */
    selectedFields: string[];
    /**
     * If true, renders without a popover.
     *
     * @default false
     */
    listOnly: boolean;
    /** Convenience prop to specify common popover props, `popoverProps.refElement` is required. Valid only if listOnly is not set to true. */
    popoverProps?: IPopoverProps;
    /**
     * If true, displays the field info button. Valid only if listOnly is not set to true.
     *
     * @default false
     */
    showFieldInfo: boolean;
    /**
     * If true, displays an icon corresponding to the field's type.
     *
     * @default false
     */
    showFieldTypeIcon: boolean;
    /**
     * If true, displays field name. By default only displays field alias.
     *
     * @default false
     */
    showFieldName: boolean;
    /**
     * If true, displays description. By default only displays field alias.
     *
     * @default false
     */
    showDescription: boolean;
    /**
     * If true, displays a 'Select All' button on top of the list. Valid only if multiple is set to true.
     *
     * @default false
     */
    showSelectionAll: boolean;
    /**
     * @deprecated use hideCancel instead
     * @default true
     */
    showCancel: boolean;
    /**
     * If true, hides the cancel button. Valid only if listOnly is not set to true.
     *
     * @default false
     */
    hideCancel: boolean;
    /**
     * @deprecated use hideSort instead
     * @default true
     */
    showSort: boolean;
    /**
     * If true, hides the sort menu button.
     *
     * @default false
     */
    hideSort: boolean;
    /**
     * If true, displays the filter option based on the number of fields.
     *
     * @default 10
     */
    showFilterLength: number;
    /**
     * If true, allows for multiple selection. If false, the
     * popover will close once an item has been selected.
     *
     * @default false
     */
    multiple: boolean;
    /** Heading text. Valid only if listOnly is not set to true. */
    heading?: string;
    /** Ok button text. Ok button only shows when multiple set to true. Valid only if listOnly is not set to true. */
    okBtnText?: string;
    /** Filter placeholder text. */
    filterPlaceholderText?: string;
    /** Filter no results text. If empty string ("") no text will be shown. */
    filterNoResultsText?: string;
    /**
     * The initial sort order.
     *
     * @default "default"
     */
    sortBy: LastSortBy;
    /**
     * @deprecated
     * Pass in grouped lists of fields instead.
     * If true, fields and expressions are placed in separate groups.
     * @default false
     */
    groupFieldsAndExpressions?: boolean | undefined;
    /** Header text for group containing fields, if 'groupFieldsAndExpressions' is set to true. */
    fieldsGroupHeading?: string;
    /** Header text for group containing expressions, if 'groupFieldsAndExpressions' is set to true. */
    expressionsGroupHeading?: string;
    /** Custom function to distinguish expressions from fields. */
    customExpressionCheck?: (field: IPickListFieldInfo) => boolean;
    /** Reposition the component. */
    reposition(): Promise<void>;
    /** Set focus on the component. */
    setFocus(): Promise<void>;
    /**
     * Control whether the component is disabled.
     *
     * @param disable
     */
    setDisabled(disable: boolean): Promise<void>;
    /** Emitted when the selected fields have changed. selectedFields contains fields in order of the user's selection. */
    readonly arcgisChange: TargetedEvent<this, {
        selectedFields: string[];
    }>;
    /** Emitted when the pick list has been closed. */
    readonly arcgisClose: TargetedEvent<this, void | {
        selectedFields: string[];
    }>;
    /** @deprecated use arcgisChange instead */
    readonly arcgisFieldPickListChange: TargetedEvent<this, {
        selectedFields: string[];
    }>;
    /** @deprecated use arcgisClose instead */
    readonly arcgisFieldPickListDismissed: TargetedEvent<this, void | {
        selectedFields: string[];
    }>;
    /** @deprecated use arcgisSortByChange instead */
    readonly arcgisFieldPickListSortByChange: TargetedEvent<this, LastSortBy>;
    /** Emitted when the field pick list sort order has changed. */
    readonly arcgisSortByChange: TargetedEvent<this, LastSortBy>;
    /** Emitted when the edit icon of a field has been clicked. The field must have IPickListFieldInfo.showEditAction set to true. */
    readonly arcgisEditField: TargetedEvent<this, {
        fieldName: string;
    }>;
    /** Emitted when the delete icon of a field has been clicked. The field must have IPickListFieldInfo.showDeleteAction set to true. */
    readonly arcgisDeleteField: TargetedEvent<this, {
        fieldName: string;
    }>;
    "@eventTypes": {
        "arcgisChange": ArcgisFieldPickList["arcgisChange"]["detail"];
        "arcgisClose": ArcgisFieldPickList["arcgisClose"]["detail"];
        "arcgisDeleteField": ArcgisFieldPickList["arcgisDeleteField"]["detail"];
        "arcgisEditField": ArcgisFieldPickList["arcgisEditField"]["detail"];
        "arcgisFieldPickListChange": ArcgisFieldPickList["arcgisFieldPickListChange"]["detail"];
        "arcgisFieldPickListDismissed": ArcgisFieldPickList["arcgisFieldPickListDismissed"]["detail"];
        "arcgisFieldPickListSortByChange": ArcgisFieldPickList["arcgisFieldPickListSortByChange"]["detail"];
        "arcgisSortByChange": ArcgisFieldPickList["arcgisSortByChange"]["detail"];
    };
}
