UNPKG

@whitesev/pops

Version:

弹窗库

257 lines (254 loc) 6.03 kB
import type { PopsCommonConfig } from "../../types/components"; /** * 搜索建议悬浮窗 * pops.searchSuggestion */ export interface PopsSearchSuggestionDetails<T = any> extends Pick<PopsCommonConfig, "useShadowRoot" | "zIndex" | "style"> { /** * 当前的环境,可以是document,可以是shadowroot,默认是document * @default document */ selfDocument?: Document | ShadowRoot | (Document | ShadowRoot)[]; /** * 目标元素,一般是跟随它的位置变化,监听它的focus/click */ target: HTMLElement; /** * 目标input元素,监听它的focus/click/input事件 */ inputTarget?: HTMLInputElement | HTMLTextAreaElement; /** * 数据 */ data: T[] | (() => T[]); /** * 右边的删除按钮图标 */ deleteIcon?: { /** * 是否启用 * @default true */ enable?: boolean; /** * 点击回调 */ callback?: ( event: MouseEvent | PointerEvent, liElement: HTMLLIElement, data: T ) => void; }; /** * 自定义的className */ className?: string; /** * position是否使用absolut * @default true */ isAbsolute?: boolean; /** * 是否启用动画 * @default true */ isAnimation?: boolean; /** * 建议框的宽度 * @default "250px" */ width?: string; /** * 是否和config.target的宽度同步 * @default true */ followTargetWidth?: true; /** * 建议框的最大高度 * @default "300px" */ maxHeight?: string; /** * 建议框距离元素的距离 * @default 0 */ topDistance?: number; /** * 建议框显示的位置,默认是auto(自动判断位置) * @default "auto" */ position?: "top" | "bottom" | "auto"; /** * 当位置在上面时(包括auto自动判断在上面时),是否对搜索项进行反转 * @default true */ positionTopToReverse?: boolean; /** * 搜索中的提示 * * 前提:inputTarget是input/textarea * * 触发change事件,且没有搜索到数据,则显示此提示 */ searchingTip?: string; /** * 没有搜索结果的提示的html * * 前提:inputTarget是input/textarea * * 触发change事件,且没有搜索到数据,则显示此结果项 */ toSearhNotResultHTML?: string; /** * 没有搜索结果是否隐藏提示框 * @default false */ toHideWithNotResult?: boolean; /** * 跟随目标的位置 * @default "target" */ followPosition?: "target" | "input" | "inputCursor"; /** * 获取每一项的html,在显示的时候会调用该函数 * * 它的父元素是一个<li>标签 */ getItemHTML: (item: T) => string; /** * 当config.target触发input时自动调用该函数来获取数据 * @param inputValue 当前输入框的值 */ getData?: (inputValue: string) => Promise<T[]> | T[]; /** * 每一项的点击回调 * @param event 触发的事件 * @param liElement 每一项的元素 * @param data config.data的数据 */ itemClickCallBack?: ( event: MouseEvent | PointerEvent, liElement: HTMLLIElement, data: T ) => void; /** * 键盘的上下键选择的回调 * @param event 触发的事件 * @param liElement 每一项的元素 * @param data config.data的数据 */ selectCallBack?: ( event: MouseEvent, liElement: HTMLLIElement, data: T ) => void; } /** * pops.searchSuggestion的函数返回值 */ export interface PopsSearchSuggestionResult<T = any> { $el: { /** 根元素 */ root: HTMLElement; /** ul元素 */ $hintULContainer: HTMLUListElement; /** 动态更新CSS */ $dynamicCSS: HTMLStyleElement; }; /** * 初始化 */ init: () => void; /** * 获取显示出搜索建议框的html */ getSearchSelectElement: () => HTMLElement; /** * 获取显示出搜索建议框的每一项的html */ getSearchItemLiElement: (data: T, index: number) => HTMLElement; /** * 获取data-value值 */ getItemDataValue: (data: T) => T; /** * 设置搜索建议框每一项的点击事件 */ setSearchItemClickEvent: (liElement: HTMLLIElement) => void; /** * 监听输入框内容改变 */ setInputChangeEvent: (option?: AddEventListenerOptions) => void; /** * 移除输入框内容改变的监听 */ removeInputChangeEvent: (option?: AddEventListenerOptions) => void; /** * 设置显示搜索建议框的事件 */ setShowEvent: (option?: AddEventListenerOptions) => void; /** * 移除显示搜索建议框的事件 */ removeShowEvent: (option?: AddEventListenerOptions) => void; /** * 设置隐藏搜索建议框的事件 */ setHideEvent: (option?: AddEventListenerOptions) => void; /** * 移除隐藏搜索建议框的事件 */ removeHideEvent: (option?: AddEventListenerOptions) => void; /** * 设置所有监听 */ setAllEvent: (option?: AddEventListenerOptions) => void; /** * 移除所有监听 */ removeAllEvent: (option?: AddEventListenerOptions) => void; /** * 获取删除按钮的html */ getDeleteIconHTML: (size: number, fill: string) => void; /** * 设置当前正在搜索中的提示 */ setPromptsInSearch: () => void; /** * 移除正在搜索中的提示 */ removePromptsInSearch: () => void; /** * 清空所有的搜索结果 */ clearAllSearchItemLi: () => void; /** * 修改搜索建议框的位置(top、left) * 因为目标元素可能是动态隐藏的 */ changeHintULElementPosition: () => void; /** * 修改搜索建议框的width * 因为目标元素可能是动态隐藏的 */ changeHintULElementWidth: () => void; updateDynamicCSS: () => void; /** * 更新页面显示的搜索结果 */ update: (data: T[]) => void; /** * 清空当前的搜索结果并显示无结果 */ clear: () => void; /** * 隐藏搜索建议框 */ hide: () => void; /** * 显示搜索建议框 */ show: () => void; }