/** * BarneoSearchWidget - комплексный компонент поиска с автодополнением, подсказками и поиском товаров. * * @module searchWidget * */ import type { SearchWidgetConfig, SearchProduct, SearchHint } from "./models"; import type { SearchApiService } from "./api"; import type { CatalogSearchResponse as SearchResponse } from "./responses"; /** * Определяет допустимые свойства компонента BarneoSearchWidget. */ export interface BarneoSearchWidgetProps { /** * Объект конфигурации для виджета поиска. * @see {@link SearchWidgetConfig} */ config?: SearchWidgetConfig; /** * Экземпляр API сервиса для операций поиска. * @see {@link SearchApiService} */ apiService?: SearchApiService; } /** * Определяет внутреннее состояние компонента поиска. */ export interface SearchWidgetState { /** * Текущее значение поискового запроса. * @defaultValue "" */ searchQuery: string; /** * Показывать ли выпадающий список предложений поиска. * @defaultValue false */ showSuggestions: boolean; /** * Индикатор состояния загрузки. * @defaultValue false */ isLoading: boolean; /** * Сообщение об ошибке, если поиск не удался. * @defaultValue "" */ error: string; /** * Массив недавних поисковых запросов для истории. * @defaultValue [] */ historyQueries: string[]; /** * Массив популярных поисковых запросов. * @defaultValue [] */ popularQueries: string[]; /** * Массив популярных товаров для отображения. * @defaultValue [] */ popularProducts: SearchProduct[]; /** * Текущие результаты поиска. * @defaultValue [] */ searchResults: SearchProduct[]; /** * Поисковые подсказки/предложения для автодополнения. * @defaultValue [] */ productHints: SearchHint[]; /** * Полные текстовые подсказки для поиска. * @defaultValue [] */ fullHints: string[]; /** * Доступны ли результаты поиска. * @defaultValue false */ hasSearchResults: boolean; } /** * Определяет допустимые события компонента BarneoSearchWidget. */ export interface SearchWidgetEmits { /** * Вызывается при выполнении поиска. * @param {string} query - Поисковый запрос */ (e: "search", query: string): void; /** * Вызывается при выборе товара из результатов поиска. * @param {SearchProduct} product - Выбранный товар * @param {MouseEvent} [event] - Событие мыши (опционально) */ (e: "select", product: SearchProduct, event?: MouseEvent): void; /** * Вызывается при изменении значения модели (для поддержки v-model). * @param {string} value - Новое значение */ (e: "update:modelValue", value: string): void; /** * Вызывается при получении результатов поиска. * @param {SearchResponse} results - Ответ поиска */ (e: "searchResults", results: SearchResponse): void; /** * Вызывается при выборе запроса из истории. * @param {string} query - Выбранный исторический запрос */ (e: "historySelect", query: string): void; /** * Вызывается при выборе популярного запроса. * @param {string} query - Выбранный популярный запрос */ (e: "popularQuerySelect", query: string): void; /** * Вызывается при очистке истории поиска. */ (e: "clearHistory"): void; /** * Вызывается при получении фокуса полем поиска. */ (e: "focus"): void; /** * Вызывается при потере фокуса полем поиска. */ (e: "blur"): void; /** * Вызывается при изменении состояния загрузки. * @param {boolean} isLoading - Состояние загрузки */ (e: "loading", isLoading: boolean): void; /** * Вызывается при возникновении ошибки. * @param {string} error - Сообщение об ошибке */ (e: "error", error: string): void; /** * Вызывается при отсутствии результатов поиска. * @param {string} query - Запрос, который не дал результатов */ (e: "noResults", query: string): void; /** * Вызывается при вводе пользователем в поле поиска. * @param {string} value - Текущее значение ввода */ (e: "input", value: string): void; /** * Вызывается при выполнении глубокого поиска (Enter или кнопка поиска). * @param {string} query - Поисковый запрос */ (e: "deepSearch", query: string): void; } /** * Определяет допустимые свойства для поля ввода поиска. */ export interface SearchInputProps { /** * Значение поля ввода. */ modelValue: string; /** * Текст-заполнитель для поля ввода. * @defaultValue "Поиск товаров..." */ placeholder?: string; /** * Отключено ли поле ввода. * @defaultValue false */ disabled?: boolean; /** * Показывать ли индикатор загрузки. * @defaultValue false */ loading?: boolean; /** * Показывать ли кнопку очистки. * @defaultValue true */ clearable?: boolean; /** * Размер поля ввода. * @defaultValue "medium" */ size?: "small" | "medium" | "large"; } /** * Определяет допустимые свойства для отображения результатов поиска. */ export interface SearchResultsProps { /** * Массив товаров для отображения. */ items: SearchProduct[]; /** * Показывать ли состояние загрузки. * @defaultValue false */ loading?: boolean; /** * Сообщение для отображения при отсутствии результатов. * @defaultValue "Товары не найдены" */ emptyMessage?: string; /** * Строка запроса для подсветки в результатах. */ highlightQuery?: string; /** * Максимальная высота контейнера результатов. * @defaultValue "300px" */ maxHeight?: string; /** * Выбираемы ли элементы. * @defaultValue true */ selectable?: boolean; /** * Индекс текущего выбранного элемента. * @defaultValue -1 */ selectedIndex?: number; /** * Подсвечивать ли совпадающий текст в результатах. * @defaultValue true */ highlightMatches?: boolean; } /** * Определяет допустимые свойства для контейнера виджета поиска. * Расширяет BarneoSearchWidgetProps поддержкой v-model. */ export interface BarneoSearchWidgetContainerProps extends BarneoSearchWidgetProps { /** * Значение модели для привязки v-model. */ vModel?: string; } /** * Определяет методы, которые компонент BarneoSearchWidget экспортирует через defineExpose. */ export interface SearchWidgetExpose { /** * Очищает поле поиска и сбрасывает состояние виджета. */ clear: () => void; /** * Устанавливает фокус на поле ввода поиска. */ focus: () => void; /** * Снимает фокус с поля ввода поиска. */ blur: () => void; /** * Выполняет глубокий поиск с текущим запросом. */ search: () => Promise; }