Select.d.ts 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538
  1. /**
  2. * To match accessibility requirement, we always provide an input in the component.
  3. * Other element will not set `tabindex` to avoid `onBlur` sequence problem.
  4. * For focused select, we set `aria-live="polite"` to update the accessibility content.
  5. *
  6. * ref:
  7. * - keyboard: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles/listbox_role#Keyboard_interactions
  8. *
  9. * New api:
  10. * - listHeight
  11. * - listItemHeight
  12. * - component
  13. *
  14. * Remove deprecated api:
  15. * - multiple
  16. * - tags
  17. * - combobox
  18. * - firstActiveValue
  19. * - dropdownMenuStyle
  20. * - openClassName (Not list in api)
  21. *
  22. * Update:
  23. * - `backfill` only support `combobox` mode
  24. * - `combobox` mode not support `labelInValue` since it's meaningless
  25. * - `getInputElement` only support `combobox` mode
  26. * - `onChange` return OptionData instead of ReactNode
  27. * - `filterOption` `onChange` `onSelect` accept OptionData instead of ReactNode
  28. * - `combobox` mode trigger `onChange` will get `undefined` if no `value` match in Option
  29. * - `combobox` mode not support `optionLabelProp`
  30. */
  31. import type { DisplayValueType } from './BaseSelect';
  32. import type { Key, VueNode } from '../_util/type';
  33. import type { ExtractPropTypes, PropType } from 'vue';
  34. declare type ArrayElementType<T> = T extends (infer E)[] ? E : T;
  35. export declare type OnActiveValue = (active: RawValueType, index: number, info?: {
  36. source?: 'keyboard' | 'mouse';
  37. }) => void;
  38. export declare type OnInternalSelect = (value: RawValueType, info: {
  39. selected: boolean;
  40. }) => void;
  41. export declare type RawValueType = string | number;
  42. export interface LabelInValueType {
  43. label: any;
  44. originLabel?: any;
  45. value: RawValueType;
  46. /** @deprecated `key` is useless since it should always same as `value` */
  47. key?: Key;
  48. }
  49. export declare type DraftValueType = RawValueType | LabelInValueType | DisplayValueType | (RawValueType | LabelInValueType | DisplayValueType)[];
  50. export declare type FilterFunc<OptionType> = (inputValue: string, option?: OptionType) => boolean;
  51. export interface FieldNames {
  52. value?: string;
  53. label?: string;
  54. options?: string;
  55. }
  56. export interface BaseOptionType {
  57. disabled?: boolean;
  58. [name: string]: any;
  59. }
  60. export interface DefaultOptionType extends BaseOptionType {
  61. label?: any;
  62. value?: string | number | null;
  63. children?: Omit<DefaultOptionType, 'children'>[];
  64. }
  65. export declare type SelectHandler<ValueType = any, OptionType extends BaseOptionType = DefaultOptionType> = ((value: RawValueType | LabelInValueType, option: OptionType) => void) | ((value: ValueType, option: OptionType) => void);
  66. export declare function selectProps<ValueType = any, OptionType extends BaseOptionType = DefaultOptionType>(): {
  67. prefixCls: StringConstructor;
  68. id: StringConstructor;
  69. backfill: {
  70. type: BooleanConstructor;
  71. default: any;
  72. };
  73. fieldNames: PropType<FieldNames>;
  74. /** @deprecated Use `searchValue` instead */
  75. inputValue: StringConstructor;
  76. searchValue: StringConstructor;
  77. onSearch: PropType<(value: string) => void>;
  78. autoClearSearchValue: {
  79. type: BooleanConstructor;
  80. default: any;
  81. };
  82. onSelect: PropType<SelectHandler<ArrayElementType<ValueType>, OptionType>>;
  83. onDeselect: PropType<SelectHandler<ArrayElementType<ValueType>, OptionType>>;
  84. /**
  85. * In Select, `false` means do nothing.
  86. * In TreeSelect, `false` will highlight match item.
  87. * It's by design.
  88. */
  89. filterOption: {
  90. type: PropType<boolean | FilterFunc<OptionType>>;
  91. default: any;
  92. };
  93. filterSort: PropType<(optionA: OptionType, optionB: OptionType) => number>;
  94. optionFilterProp: StringConstructor;
  95. optionLabelProp: StringConstructor;
  96. options: PropType<OptionType[]>;
  97. defaultActiveFirstOption: {
  98. type: BooleanConstructor;
  99. default: any;
  100. };
  101. virtual: {
  102. type: BooleanConstructor;
  103. default: any;
  104. };
  105. listHeight: NumberConstructor;
  106. listItemHeight: NumberConstructor;
  107. menuItemSelectedIcon: import("vue-types").VueTypeValidableDef<any>;
  108. mode: PropType<"multiple" | "tags" | "combobox">;
  109. labelInValue: {
  110. type: BooleanConstructor;
  111. default: any;
  112. };
  113. value: import("vue-types").VueTypeValidableDef<any>;
  114. defaultValue: import("vue-types").VueTypeValidableDef<any>;
  115. onChange: PropType<(value: ValueType, option: OptionType | OptionType[]) => void>;
  116. children: PropType<VueNode[]>;
  117. showSearch: {
  118. type: BooleanConstructor;
  119. default: any;
  120. };
  121. tagRender: {
  122. type: PropType<(props: import("./BaseSelect").CustomTagProps) => any>;
  123. };
  124. optionLabelRender: {
  125. type: PropType<(option: Record<string, any>) => any>;
  126. };
  127. direction: {
  128. type: PropType<"ltr" | "rtl">;
  129. };
  130. tabindex: NumberConstructor;
  131. autofocus: BooleanConstructor;
  132. notFoundContent: import("vue-types").VueTypeValidableDef<any>;
  133. placeholder: import("vue-types").VueTypeValidableDef<any>;
  134. onClear: PropType<() => void>;
  135. choiceTransitionName: StringConstructor;
  136. disabled: {
  137. type: BooleanConstructor;
  138. default: any;
  139. };
  140. loading: {
  141. type: BooleanConstructor;
  142. default: any;
  143. };
  144. open: {
  145. type: BooleanConstructor;
  146. default: any;
  147. };
  148. defaultOpen: {
  149. type: BooleanConstructor;
  150. default: any;
  151. };
  152. onDropdownVisibleChange: {
  153. type: PropType<(open: boolean) => void>;
  154. };
  155. getInputElement: {
  156. type: PropType<() => any>;
  157. };
  158. getRawInputElement: {
  159. type: PropType<() => any>;
  160. };
  161. maxTagTextLength: NumberConstructor;
  162. maxTagCount: {
  163. type: PropType<number | "responsive">;
  164. };
  165. maxTagPlaceholder: import("vue-types").VueTypeValidableDef<any>;
  166. tokenSeparators: {
  167. type: PropType<string[]>;
  168. };
  169. allowClear: {
  170. type: BooleanConstructor;
  171. default: any;
  172. };
  173. showArrow: {
  174. type: BooleanConstructor;
  175. default: any;
  176. };
  177. inputIcon: import("vue-types").VueTypeValidableDef<any>;
  178. clearIcon: import("vue-types").VueTypeValidableDef<any>;
  179. removeIcon: import("vue-types").VueTypeValidableDef<any>;
  180. animation: StringConstructor;
  181. transitionName: StringConstructor;
  182. dropdownStyle: {
  183. type: PropType<import("vue").CSSProperties>;
  184. };
  185. dropdownClassName: StringConstructor;
  186. dropdownMatchSelectWidth: {
  187. type: PropType<number | boolean>;
  188. default: any;
  189. };
  190. dropdownRender: {
  191. type: PropType<import("./BaseSelect").DropdownRender>;
  192. };
  193. dropdownAlign: PropType<import("../vc-trigger/interface").AlignType>;
  194. placement: {
  195. type: PropType<import("./BaseSelect").Placement>;
  196. };
  197. getPopupContainer: {
  198. type: PropType<import("./BaseSelect").RenderDOMFunc>;
  199. };
  200. showAction: {
  201. type: PropType<("click" | "focus")[]>;
  202. };
  203. onBlur: {
  204. type: PropType<(e: FocusEvent) => void>;
  205. };
  206. onFocus: {
  207. type: PropType<(e: FocusEvent) => void>;
  208. };
  209. onKeyup: PropType<(e: KeyboardEvent) => void>;
  210. onKeydown: PropType<(e: KeyboardEvent) => void>;
  211. onMousedown: PropType<(e: MouseEvent) => void>;
  212. onPopupScroll: PropType<(e: UIEvent) => void>;
  213. onInputKeyDown: PropType<(e: KeyboardEvent) => void>;
  214. onMouseenter: PropType<(e: MouseEvent) => void>;
  215. onMouseleave: PropType<(e: MouseEvent) => void>;
  216. onClick: PropType<(e: MouseEvent) => void>;
  217. };
  218. export declare type SelectProps = Partial<ExtractPropTypes<ReturnType<typeof selectProps>>>;
  219. declare const _default: import("vue").DefineComponent<{
  220. prefixCls: StringConstructor;
  221. id: StringConstructor;
  222. backfill: {
  223. type: BooleanConstructor;
  224. default: any;
  225. };
  226. fieldNames: PropType<FieldNames>;
  227. /** @deprecated Use `searchValue` instead */
  228. inputValue: StringConstructor;
  229. searchValue: StringConstructor;
  230. onSearch: PropType<(value: string) => void>;
  231. autoClearSearchValue: {
  232. type: BooleanConstructor;
  233. default: any;
  234. };
  235. onSelect: PropType<SelectHandler<any, DefaultOptionType>>;
  236. onDeselect: PropType<SelectHandler<any, DefaultOptionType>>;
  237. /**
  238. * In Select, `false` means do nothing.
  239. * In TreeSelect, `false` will highlight match item.
  240. * It's by design.
  241. */
  242. filterOption: {
  243. type: PropType<boolean | FilterFunc<DefaultOptionType>>;
  244. default: any;
  245. };
  246. filterSort: PropType<(optionA: DefaultOptionType, optionB: DefaultOptionType) => number>;
  247. optionFilterProp: StringConstructor;
  248. optionLabelProp: StringConstructor;
  249. options: PropType<DefaultOptionType[]>;
  250. defaultActiveFirstOption: {
  251. type: BooleanConstructor;
  252. default: any;
  253. };
  254. virtual: {
  255. type: BooleanConstructor;
  256. default: any;
  257. };
  258. listHeight: NumberConstructor;
  259. listItemHeight: NumberConstructor;
  260. menuItemSelectedIcon: import("vue-types").VueTypeValidableDef<any>;
  261. mode: PropType<"multiple" | "tags" | "combobox">;
  262. labelInValue: {
  263. type: BooleanConstructor;
  264. default: any;
  265. };
  266. value: import("vue-types").VueTypeValidableDef<any>;
  267. defaultValue: import("vue-types").VueTypeValidableDef<any>;
  268. onChange: PropType<(value: any, option: DefaultOptionType | DefaultOptionType[]) => void>;
  269. children: PropType<VueNode[]>;
  270. showSearch: {
  271. type: BooleanConstructor;
  272. default: any;
  273. };
  274. tagRender: {
  275. type: PropType<(props: import("./BaseSelect").CustomTagProps) => any>;
  276. };
  277. optionLabelRender: {
  278. type: PropType<(option: Record<string, any>) => any>;
  279. };
  280. direction: {
  281. type: PropType<"ltr" | "rtl">;
  282. };
  283. tabindex: NumberConstructor;
  284. autofocus: BooleanConstructor;
  285. notFoundContent: import("vue-types").VueTypeValidableDef<any>;
  286. placeholder: import("vue-types").VueTypeValidableDef<any>;
  287. onClear: PropType<() => void>;
  288. choiceTransitionName: StringConstructor;
  289. disabled: {
  290. type: BooleanConstructor;
  291. default: any;
  292. };
  293. loading: {
  294. type: BooleanConstructor;
  295. default: any;
  296. };
  297. open: {
  298. type: BooleanConstructor;
  299. default: any;
  300. };
  301. defaultOpen: {
  302. type: BooleanConstructor;
  303. default: any;
  304. };
  305. onDropdownVisibleChange: {
  306. type: PropType<(open: boolean) => void>;
  307. };
  308. getInputElement: {
  309. type: PropType<() => any>;
  310. };
  311. getRawInputElement: {
  312. type: PropType<() => any>;
  313. };
  314. maxTagTextLength: NumberConstructor;
  315. maxTagCount: {
  316. type: PropType<number | "responsive">;
  317. };
  318. maxTagPlaceholder: import("vue-types").VueTypeValidableDef<any>;
  319. tokenSeparators: {
  320. type: PropType<string[]>;
  321. };
  322. allowClear: {
  323. type: BooleanConstructor;
  324. default: any;
  325. };
  326. showArrow: {
  327. type: BooleanConstructor;
  328. default: any;
  329. };
  330. inputIcon: import("vue-types").VueTypeValidableDef<any>;
  331. clearIcon: import("vue-types").VueTypeValidableDef<any>;
  332. removeIcon: import("vue-types").VueTypeValidableDef<any>;
  333. animation: StringConstructor;
  334. transitionName: StringConstructor;
  335. dropdownStyle: {
  336. type: PropType<import("vue").CSSProperties>;
  337. };
  338. dropdownClassName: StringConstructor;
  339. dropdownMatchSelectWidth: {
  340. type: PropType<number | boolean>;
  341. default: any;
  342. };
  343. dropdownRender: {
  344. type: PropType<import("./BaseSelect").DropdownRender>;
  345. };
  346. dropdownAlign: PropType<import("../vc-trigger/interface").AlignType>;
  347. placement: {
  348. type: PropType<import("./BaseSelect").Placement>;
  349. };
  350. getPopupContainer: {
  351. type: PropType<import("./BaseSelect").RenderDOMFunc>;
  352. };
  353. showAction: {
  354. type: PropType<("click" | "focus")[]>;
  355. };
  356. onBlur: {
  357. type: PropType<(e: FocusEvent) => void>;
  358. };
  359. onFocus: {
  360. type: PropType<(e: FocusEvent) => void>;
  361. };
  362. onKeyup: PropType<(e: KeyboardEvent) => void>;
  363. onKeydown: PropType<(e: KeyboardEvent) => void>;
  364. onMousedown: PropType<(e: MouseEvent) => void>;
  365. onPopupScroll: PropType<(e: UIEvent) => void>;
  366. onInputKeyDown: PropType<(e: KeyboardEvent) => void>;
  367. onMouseenter: PropType<(e: MouseEvent) => void>;
  368. onMouseleave: PropType<(e: MouseEvent) => void>;
  369. onClick: PropType<(e: MouseEvent) => void>;
  370. }, () => JSX.Element, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<ExtractPropTypes<{
  371. prefixCls: StringConstructor;
  372. id: StringConstructor;
  373. backfill: {
  374. type: BooleanConstructor;
  375. default: any;
  376. };
  377. fieldNames: PropType<FieldNames>;
  378. /** @deprecated Use `searchValue` instead */
  379. inputValue: StringConstructor;
  380. searchValue: StringConstructor;
  381. onSearch: PropType<(value: string) => void>;
  382. autoClearSearchValue: {
  383. type: BooleanConstructor;
  384. default: any;
  385. };
  386. onSelect: PropType<SelectHandler<any, DefaultOptionType>>;
  387. onDeselect: PropType<SelectHandler<any, DefaultOptionType>>;
  388. /**
  389. * In Select, `false` means do nothing.
  390. * In TreeSelect, `false` will highlight match item.
  391. * It's by design.
  392. */
  393. filterOption: {
  394. type: PropType<boolean | FilterFunc<DefaultOptionType>>;
  395. default: any;
  396. };
  397. filterSort: PropType<(optionA: DefaultOptionType, optionB: DefaultOptionType) => number>;
  398. optionFilterProp: StringConstructor;
  399. optionLabelProp: StringConstructor;
  400. options: PropType<DefaultOptionType[]>;
  401. defaultActiveFirstOption: {
  402. type: BooleanConstructor;
  403. default: any;
  404. };
  405. virtual: {
  406. type: BooleanConstructor;
  407. default: any;
  408. };
  409. listHeight: NumberConstructor;
  410. listItemHeight: NumberConstructor;
  411. menuItemSelectedIcon: import("vue-types").VueTypeValidableDef<any>;
  412. mode: PropType<"multiple" | "tags" | "combobox">;
  413. labelInValue: {
  414. type: BooleanConstructor;
  415. default: any;
  416. };
  417. value: import("vue-types").VueTypeValidableDef<any>;
  418. defaultValue: import("vue-types").VueTypeValidableDef<any>;
  419. onChange: PropType<(value: any, option: DefaultOptionType | DefaultOptionType[]) => void>;
  420. children: PropType<VueNode[]>;
  421. showSearch: {
  422. type: BooleanConstructor;
  423. default: any;
  424. };
  425. tagRender: {
  426. type: PropType<(props: import("./BaseSelect").CustomTagProps) => any>;
  427. };
  428. optionLabelRender: {
  429. type: PropType<(option: Record<string, any>) => any>;
  430. };
  431. direction: {
  432. type: PropType<"ltr" | "rtl">;
  433. };
  434. tabindex: NumberConstructor;
  435. autofocus: BooleanConstructor;
  436. notFoundContent: import("vue-types").VueTypeValidableDef<any>;
  437. placeholder: import("vue-types").VueTypeValidableDef<any>;
  438. onClear: PropType<() => void>;
  439. choiceTransitionName: StringConstructor;
  440. disabled: {
  441. type: BooleanConstructor;
  442. default: any;
  443. };
  444. loading: {
  445. type: BooleanConstructor;
  446. default: any;
  447. };
  448. open: {
  449. type: BooleanConstructor;
  450. default: any;
  451. };
  452. defaultOpen: {
  453. type: BooleanConstructor;
  454. default: any;
  455. };
  456. onDropdownVisibleChange: {
  457. type: PropType<(open: boolean) => void>;
  458. };
  459. getInputElement: {
  460. type: PropType<() => any>;
  461. };
  462. getRawInputElement: {
  463. type: PropType<() => any>;
  464. };
  465. maxTagTextLength: NumberConstructor;
  466. maxTagCount: {
  467. type: PropType<number | "responsive">;
  468. };
  469. maxTagPlaceholder: import("vue-types").VueTypeValidableDef<any>;
  470. tokenSeparators: {
  471. type: PropType<string[]>;
  472. };
  473. allowClear: {
  474. type: BooleanConstructor;
  475. default: any;
  476. };
  477. showArrow: {
  478. type: BooleanConstructor;
  479. default: any;
  480. };
  481. inputIcon: import("vue-types").VueTypeValidableDef<any>;
  482. clearIcon: import("vue-types").VueTypeValidableDef<any>;
  483. removeIcon: import("vue-types").VueTypeValidableDef<any>;
  484. animation: StringConstructor;
  485. transitionName: StringConstructor;
  486. dropdownStyle: {
  487. type: PropType<import("vue").CSSProperties>;
  488. };
  489. dropdownClassName: StringConstructor;
  490. dropdownMatchSelectWidth: {
  491. type: PropType<number | boolean>;
  492. default: any;
  493. };
  494. dropdownRender: {
  495. type: PropType<import("./BaseSelect").DropdownRender>;
  496. };
  497. dropdownAlign: PropType<import("../vc-trigger/interface").AlignType>;
  498. placement: {
  499. type: PropType<import("./BaseSelect").Placement>;
  500. };
  501. getPopupContainer: {
  502. type: PropType<import("./BaseSelect").RenderDOMFunc>;
  503. };
  504. showAction: {
  505. type: PropType<("click" | "focus")[]>;
  506. };
  507. onBlur: {
  508. type: PropType<(e: FocusEvent) => void>;
  509. };
  510. onFocus: {
  511. type: PropType<(e: FocusEvent) => void>;
  512. };
  513. onKeyup: PropType<(e: KeyboardEvent) => void>;
  514. onKeydown: PropType<(e: KeyboardEvent) => void>;
  515. onMousedown: PropType<(e: MouseEvent) => void>;
  516. onPopupScroll: PropType<(e: UIEvent) => void>;
  517. onInputKeyDown: PropType<(e: KeyboardEvent) => void>;
  518. onMouseenter: PropType<(e: MouseEvent) => void>;
  519. onMouseleave: PropType<(e: MouseEvent) => void>;
  520. onClick: PropType<(e: MouseEvent) => void>;
  521. }>>, {
  522. open: boolean;
  523. disabled: boolean;
  524. virtual: boolean;
  525. dropdownMatchSelectWidth: number | boolean;
  526. autofocus: boolean;
  527. loading: boolean;
  528. showSearch: boolean;
  529. defaultOpen: boolean;
  530. allowClear: boolean;
  531. showArrow: boolean;
  532. backfill: boolean;
  533. autoClearSearchValue: boolean;
  534. filterOption: boolean | FilterFunc<DefaultOptionType>;
  535. defaultActiveFirstOption: boolean;
  536. labelInValue: boolean;
  537. }>;
  538. export default _default;