From 604e0468b929551b48089bedf9064aeafaaec5e7 Mon Sep 17 00:00:00 2001 From: mertsincan Date: Wed, 1 Dec 2021 16:49:08 +0300 Subject: [PATCH] Fixed #1836 - For Listbox --- src/components/listbox/Listbox.d.ts | 295 ++++++++++++++++++++++------ 1 file changed, 240 insertions(+), 55 deletions(-) diff --git a/src/components/listbox/Listbox.d.ts b/src/components/listbox/Listbox.d.ts index 9c17c61d8..12cc89268 100755 --- a/src/components/listbox/Listbox.d.ts +++ b/src/components/listbox/Listbox.d.ts @@ -1,80 +1,265 @@ import { VNode } from 'vue'; -import VirtualScrollerProps from '../virtualscroller'; +import { ClassComponent, GlobalComponentConstructor } from '../ts-helpers'; +import { VirtualScrollerProps, VirtualScrollerItemOptions } from '../virtualscroller'; + type ListboxOptionLabelType = string | ((data: any) => string) | undefined; + type ListboxOptionValueType = string | ((data: any) => any) | undefined; + type ListboxOptionDisabledType = string | ((data: any) => boolean) | undefined; + type ListboxOptionChildrenType = string | ((data: any) => any[]) | undefined; -interface ListboxProps { +type ListboxFilterMatchModeType = 'contains' | 'startsWith' | 'endsWith'; + +export interface ListboxChangeEvent { + /** + * Original event + */ + originalEvent: Event; + /** + * Selected option value + */ + value: any; +} + +export interface ListboxFilterEvent { + /** + * Original event + */ + originalEvent: Event; + /** + * Filter value + */ + value: string; +} + +export interface ListboxProps { + /** + * Value of the component. + */ modelValue?: any; - options?: any[]; + /** + * An array of selectitems to display as the available options. + */ + options?: any[] | undefined; + /** + * Property name or getter function to use as the label of an option. + */ optionLabel?: ListboxOptionLabelType; + /** + * Property name or getter function to use as the value of an option, defaults to the option itself when not defined. + */ optionValue?: ListboxOptionValueType; + /** + * Property name or getter function to use as the disabled flag of an option, defaults to false when not defined. + */ optionDisabled?: ListboxOptionDisabledType; + /** + * Property name or getter function to use as the label of an option group. + */ optionGroupLabel?: ListboxOptionLabelType; + /** + * Property name or getter function that refers to the children options of option group. + */ optionGroupChildren?: ListboxOptionChildrenType; - listStyle?: string; - disabled?: boolean; - dataKey?: string; - multiple?: boolean; - metaKeySelection?: boolean; - filter?: boolean; - filterPlaceholder?: string; - filterLocale?: string; - filterMatchMode?: string; - filterFields?: string[]; - emptyFilterMessage?: string; - emptyMessage?: string; + /** + * Inline style of inner list element. + */ + listStyle?: string | undefined; + /** + * When specified, disables the component. + */ + disabled?: boolean | undefined; + /** + * A property to uniquely identify an option. + */ + dataKey?: string | undefined; + /** + * When specified, allows selecting multiple values. + */ + multiple?: boolean | undefined; + /** + * Defines how multiple items can be selected, when true metaKey needs to be pressed to select or unselect an item and when set to false selection of each item can be toggled individually. + * On touch enabled devices, metaKeySelection is turned off automatically. + * Default value is true. + */ + metaKeySelection?: boolean | undefined; + /** + * When specified, displays a filter input at header. + */ + filter?: boolean | undefined; + /** + * Placeholder text to show when filter input is empty. + */ + filterPlaceholder?: string | undefined; + /** + * Locale to use in filtering. The default locale is the host environment's current locale. + */ + filterLocale?: string | undefined; + /** + * Defines the filtering algorithm to use when searching the options. + * @see ListboxFilterMatchModeType + * Default value is 'contains'. + */ + filterMatchMode?: ListboxFilterMatchModeType; + /** + * Fields used when filtering the options, defaults to optionLabel. + */ + filterFields?: string[] | undefined; + /** + * Text to display when filtering does not return any results. Defaults to value from PrimeVue locale configuration. + * Default value is 'No results found'. + */ + emptyFilterMessage?: string | undefined; + /** + * Text to display when there are no options available. Defaults to value from PrimeVue locale configuration. + * Default value is 'No results found'. + */ + emptyMessage?: string | undefined; + /** + * Whether to use the virtualScroller feature. The properties of VirtualScroller component can be used like an object in it. + * @see VirtualScroller.VirtualScrollerProps + */ virtualScrollerOptions?: VirtualScrollerProps; } -interface ListboxHeaderSlotInterface { - value: any; - options: any[]; +export interface ListboxSlots { + /** + * Custom header template. + * @param {Object} scope - header slot's params. + */ + header: (scope: { + /** + * Value of the component + */ + value: any; + /** + * Displayed options + */ + options: any[]; + }) => VNode[]; + /** + * Custom footer template. + * @param {Object} scope - footer slot's params. + */ + footer: (scope: { + /** + * Value of the component + */ + value: any; + /** + * Displayed options + */ + options: any[]; + }) => VNode[]; + /** + * Custom option template. + * @param {Object} scope - option slot's params. + */ + option: (scope: { + /** + * Option instance + */ + option: any; + /** + * Index of the option + */ + index: number; + }) => VNode[]; + /** + * Custom optiongroup template. + * @param {Object} scope - optiongroup slot's params. + */ + optiongroup: (scope: { + /** + * Option instance + */ + option: any; + /** + * Index of the option + */ + index: number; + }) => VNode[]; + /** + * Custom emptyfilter template. + */ + emptyfilter: () => VNode[]; + /** + * Custom empty template. + */ + empty: () => VNode[]; + /** + * Custom content template. + * @param {Object} scope - content slot's params. + */ + content: (scope: { + /** + * An array of objects to display for virtualscroller + */ + items: any; + /** + * Style class of the component + */ + styleClass: string; + /** + * Referance of the content + * @param {HTMLElement} el - Element of 'ref' property + */ + contentRef(el: any): void; + /** + * Options of the items + * @param {number} index - Rendered index + * @return {@link VirtualScroller.VirtualScrollerItemOptions} + */ + getItemOptions(index: number): VirtualScrollerItemOptions; + }) => VNode[]; + /** + * Custom loader template. + * @param {Object} scope - loader slot's params. + */ + loader: (scope: { + /** + * Options of the loader items for virtualscroller + */ + options: any[]; + }) => VNode[]; } -interface ListboxFooterSlotInterface { - value: any; - options: any[]; +export declare type ListboxEmits = { + /** + * Emitted when the value changes. + * @param {*} value - New value. + */ + 'update:modelValue': (value: any) => void; + /** + * Callback to invoke on value change. + * @param {ListboxChangeEvent} event - Custom change event. + */ + 'change': (event: ListboxChangeEvent) => void; + /** + * Callback to invoke on filter input. + * @param {ListboxFilterEvent} event - Custom filter event. + */ + 'filter': (event: ListboxFilterEvent) => void; } -interface ListboxOptionSlotInterface { - option: any; - index: number; -} +declare class Listbox extends ClassComponent { } -interface ListboxOptionGroupSlotInterface { - option: any; - index: number; -} - -interface ListboxContentInterface { - items: any; - styleClass: string; - contentRef: string; - getItemOptions: any; -} - -interface ListboxLoaderSlotInterface { - options: any[]; -} - -declare class Listbox { - $props: ListboxProps; - $emit(eventName: 'update:modelValue', value: any): this; - $emit(eventName: 'change', e: { originalEvent: Event, value: any }): this; - $emit(eventName: 'filter', e: { originalEvent: Event, value: string }): this; - $slots: { - header: ListboxHeaderSlotInterface; - footer: ListboxFooterSlotInterface; - option: ListboxOptionSlotInterface; - optiongroup: ListboxOptionGroupSlotInterface; - emptyfilter: VNode[]; - empty: VNode[]; - content: ListboxContentInterface; - loader: ListboxLoaderSlotInterface; +declare module '@vue/runtime-core' { + interface GlobalComponents { + Listbox: GlobalComponentConstructor } } +/** + * + * Listbox is used to select one or more values from a list of items. + * + * Demos: + * + * - [Listbox](https://www.primefaces.org/primevue/showcase/#/listbox) + * + */ export default Listbox;