UNPKG

svelte-multiselect

Version:
144 lines (143 loc) 4.69 kB
import type { Snippet } from 'svelte'; import type { FocusEventHandler, HTMLInputAttributes, KeyboardEventHandler, MouseEventHandler, TouchEventHandler } from 'svelte/elements'; import type { Option } from './types'; export interface MultiSelectNativeEvents { onblur?: FocusEventHandler<HTMLInputElement>; onclick?: MouseEventHandler<HTMLInputElement>; onfocus?: FocusEventHandler<HTMLInputElement>; onkeydown?: KeyboardEventHandler<HTMLInputElement>; onkeyup?: KeyboardEventHandler<HTMLInputElement>; onmousedown?: MouseEventHandler<HTMLInputElement>; onmouseenter?: MouseEventHandler<HTMLInputElement>; onmouseleave?: MouseEventHandler<HTMLInputElement>; ontouchcancel?: TouchEventHandler<HTMLInputElement>; ontouchend?: TouchEventHandler<HTMLInputElement>; ontouchmove?: TouchEventHandler<HTMLInputElement>; ontouchstart?: TouchEventHandler<HTMLInputElement>; } export interface MultiSelectComponentEvents<T extends Option = Option> { onadd?: (data: { option: T; }) => unknown; oncreate?: (data: { option: T; }) => unknown; onremove?: (data: { option: T; }) => unknown; onremoveAll?: (data: { options: T[]; }) => unknown; onchange?: (data: { option?: T; options?: T[]; type: `add` | `remove` | `removeAll`; }) => unknown; onopen?: (data: { event: Event; }) => unknown; onclose?: (data: { event: Event; }) => unknown; } export interface MultiSelectSnippets<T extends Option = Option> { expandIcon?: Snippet<[{ open: boolean; }]>; selectedItem?: Snippet<[{ option: T; idx: number; }]>; children?: Snippet<[{ option: T; idx: number; }]>; removeIcon?: Snippet; afterInput?: Snippet<[ Pick<MultiSelectParameters, `selected` | `disabled` | `invalid` | `id` | `placeholder` | `open` | `required`> ]>; spinner?: Snippet; disabledIcon?: Snippet; option?: Snippet<[{ option: T; idx: number; }]>; userMsg?: Snippet<[ { searchText: string; msgType: false | `dupe` | `create` | `no-match`; msg: null | string; } ]>; } export interface PortalParams { target_node?: HTMLElement | null; active?: boolean; } export interface MultiSelectParameters<T extends Option = Option> { activeIndex?: number | null; activeOption?: T | null; createOptionMsg?: string | null; allowUserOptions?: boolean | `append`; allowEmpty?: boolean; autocomplete?: HTMLInputAttributes[`autocomplete`]; autoScroll?: boolean; breakpoint?: number; defaultDisabledTitle?: string; disabled?: boolean; disabledInputTitle?: string; duplicateOptionMsg?: string; duplicates?: boolean; key?: (opt: T) => unknown; filterFunc?: (opt: T, searchText: string) => boolean; closeDropdownOnSelect?: boolean | `desktop`; form_input?: HTMLInputElement | null; highlightMatches?: boolean; id?: string | null; input?: HTMLInputElement | null; inputClass?: string; inputStyle?: string | null; inputmode?: HTMLInputAttributes[`inputmode`] | null; invalid?: boolean; liActiveOptionClass?: string; liActiveUserMsgClass?: string; liOptionClass?: string; liOptionStyle?: string | null; liSelectedClass?: string; liSelectedStyle?: string | null; liUserMsgClass?: string; loading?: boolean; matchingOptions?: T[]; maxOptions?: number | undefined; maxSelect?: number | null; maxSelectMsg?: ((current: number, max: number) => string) | null; maxSelectMsgClass?: string; name?: string | null; noMatchingOptionsMsg?: string; open?: boolean; options: T[]; outerDiv?: HTMLDivElement | null; outerDivClass?: string; parseLabelsAsHtml?: boolean; pattern?: string | null; placeholder?: string | null; removeAllTitle?: string; removeBtnTitle?: string; minSelect?: number | null; required?: boolean | number; resetFilterOnAdd?: boolean; searchText?: string; selected?: T[]; sortSelected?: boolean | ((op1: T, op2: T) => number); selectedOptionsDraggable?: boolean; style?: string | null; ulOptionsClass?: string; ulSelectedClass?: string; ulSelectedStyle?: string | null; ulOptionsStyle?: string | null; value?: T | T[] | null; portal?: PortalParams; [key: string]: unknown; } export interface MultiSelectProps<T extends Option = Option> extends MultiSelectNativeEvents, MultiSelectComponentEvents<T>, MultiSelectSnippets<T>, MultiSelectParameters<T> { }