import React from "react"; export interface Value { /** * 唯一标识 */ key?: string; /** * 属性展示值 */ name: string; } export interface AttributeRenderProps { /** * 当前输入值 */ inputValue: string; /** * 监听某些操作键位被按下 * @since 2.7.0 */ onOperationalKeyDown?: (listener: (key: "ArrowDown" | "ArrowUp" | "Enter" | "Tab") => void) => void; /** * 确认选择 */ onSelect: (value: Value[]) => void; /** * 取消 */ onCancel: () => void; } export declare type AttributeType = "input" | "single" | "multiple" | "render"; export declare type AttributeTypeOptions = ["input", {}] | ["render", {}] | ["single", { /** * 是否启用搜索 * @default false * @since 2.5.0 */ searchable?: boolean; /** * 无可选项时提示内容 */ emptyText?: React.ReactNode; }] | ["multiple", { /** * 是否开启全选 * @default true */ all?: boolean; /** * 是否启用搜索 * @default false * @since 2.5.0 */ searchable?: boolean; /** * 无可选项时提示内容 */ emptyText?: React.ReactNode; }]; export interface AttributeValue { /** * 为资源属性需求值的类型 * * 可使用数组形式进行详细配置,如: * * ```js * ["multiple", { all: true }] * ``` * * 其中: * *`"single"`: * - `searchable` 是否启用搜索 * - `emptyText` 无可选项时提示内容 * - `virtual` 是否启用虚拟滚动 * - `listWidth` 列表宽度,启用虚拟滚动后无法自适应宽度 * *`"multiple"`: * - `all` 是否启用全选 * - `searchable` 是否启用搜索 * - `emptyText` 无可选项时提示内容 * - `virtual` 是否启用虚拟滚动 * - `listWidth` 列表宽度,启用虚拟滚动后无法自适应宽度 * * @docType "input" | "single" | "multiple" | "render" | [AttributeType, AttributeOptions] */ type: AttributeType | AttributeTypeOptions; /** * 属性的唯一标识,会在结果中返回 */ key: string; /** * 资源属性值名称 */ name: string; /** * 资源属性可用值 * @docType Value[] | (() => Value[]) | (() => Promise) */ values?: Value[] | (() => Value[]) | (() => Promise); /** * 该属性是否可重复选择 * @default false */ reusable?: boolean; /** * 该属性是否可移除 * @default true */ removeable?: boolean; /** * 自定义渲染 */ render?: (props: AttributeRenderProps) => React.ReactNode; } export interface AttributeSelectProps { attributes: AttributeValue[]; inputValue: string; onSelect?: (attribute: AttributeValue) => void; maxHeight: number; } export interface AttributeSelectState { select: number; lastInputValue: string; } export declare class AttributeSelect extends React.Component { static contextType: React.Context; state: AttributeSelectState; static getDerivedStateFromProps(props: AttributeSelectProps, state: AttributeSelectState): { select: number; lastInputValue: string; }; handleKeyDown: (keyCode: number) => boolean; getUseableList(): Array; getAttribute(select: number): AttributeValue; move: (step: number) => void; handleClick: (e: React.MouseEvent, index: number) => void; render(): JSX.Element; }