/** * Типы слотов поискового виджета * * Этот модуль определяет все доступные слоты и их интерфейсы свойств * для компонента BarneoSearchWidget, обеспечивая полную настройку. * * @module searchWidgetSlots * */ import type { SearchProduct, SearchWidgetConfig, SearchHint } from "./models"; import type { VNode } from "vue"; /** * Интерфейс свойств для слота поля ввода поиска. * Предоставляет полный контроль над полем ввода поиска. */ export interface SearchInputSlotProps { /** * Текущее значение поискового запроса. * @defaultValue "" */ searchQuery: string; /** * Объект конфигурации компонента. * @see {@link SearchWidgetConfig} */ config: SearchWidgetConfig; /** * Обработчик события ввода для изменений текста. * @param {Event} event - Событие ввода */ handleInput: (event: Event) => void; /** * Обработчик события фокуса. * @param {FocusEvent} event - Событие фокуса */ handleFocus: (event: FocusEvent) => void; /** * Обработчик события потери фокуса. * @param {FocusEvent} event - Событие потери фокуса */ handleBlur: (event: FocusEvent) => void; /** * Обработчик события клика. * @param {MouseEvent} event - Событие клика */ handleClick: (event: MouseEvent) => void; /** * Обработчик выполнения поиска. */ handleSearch: () => void; /** * Скрыть выпадающий список предложений. */ hideSuggestions: () => void; } /** * Базовый интерфейс свойств для слотов, включающих состояние загрузки. */ export interface BaseLoadingSlotProps { /** * Находится ли содержимое слота в состоянии загрузки. * @defaultValue false */ isLoading: boolean; } /** * Интерфейс свойств для слота истории поиска. * Предоставляет доступ к функциональности истории поиска. */ export interface SearchHistorySlotProps extends BaseLoadingSlotProps { /** * Массив исторических поисковых запросов. * @defaultValue [] */ historyQueries: string[]; /** * Очистить всю историю поиска. */ clearHistory: () => void; /** * Выбрать запрос из истории. * @param {string} query - Запрос для выбора */ selectHistoryQuery: (query: string) => void; /** * Удалить конкретный запрос из истории. * @param {string} query - Запрос для удаления */ deleteHistoryQuery: (query: string) => void; } /** * Интерфейс свойств для слота поисковых подсказок. * Предоставляет доступ к функциональности автодополнения и предложений. */ export interface SearchHintsSlotProps extends BaseLoadingSlotProps { /** * Массив поисковых подсказок для автодополнения. * @see {@link SearchHint} * @defaultValue [] */ productHints: SearchHint[]; /** * Массив полных текстовых подсказок. * @defaultValue [] */ fullHints: string[]; /** * Выбрать поисковую подсказку. * @param {SearchHint} hint - Подсказка для выбора */ selectHint: (hint: SearchHint) => void; /** * Выбрать подсказку по полному тексту. * @param {SearchHint} hint - Подсказка для выбора */ selectHintByFullText: (hint: SearchHint) => void; /** * Выбрать полную текстовую подсказку. * @param {string} hint - Полный текст подсказки */ selectFullHint: (hint: string) => void; } /** * Интерфейс свойств для слота популярных запросов. * Предоставляет доступ к популярным поисковым запросам. */ export interface PopularQueriesSlotProps extends BaseLoadingSlotProps { /** * Массив популярных поисковых запросов. * @defaultValue [] */ popularQueries: string[]; /** * Выбрать популярный запрос. * @param {string} query - Запрос для выбора */ selectQuery: (query: string) => void; } /** * Базовый интерфейс свойств для слотов, отображающих товары. */ export interface BaseProductSlotProps extends BaseLoadingSlotProps { /** * Выбрать товар из списка. * @param {SearchProduct} product - Товар для выбора * @param {MouseEvent} [event] - Событие мыши (опционально) */ selectProduct: (product: SearchProduct, event?: MouseEvent) => void; /** * Обработчик клика средней кнопкой мыши (колесико). * @param {SearchProduct} product - Товар для выбора * @param {MouseEvent} event - Событие мыши */ handleAuxClick: (product: SearchProduct, event: MouseEvent) => void; /** * Форматировать цену для отображения. * @param {number} price - Цена в наименьшей единице валюты * @returns {string} Отформатированная строка цены */ formatPrice: (price: number) => string; /** * Обработать ошибки загрузки изображений. * @param {Event} event - Событие ошибки */ handleImageError: (event: Event) => void; } /** * Интерфейс свойств для слота результатов поиска. * Предоставляет доступ к результатам поиска и связанной функциональности. */ export interface SearchResultsSlotProps extends BaseProductSlotProps { /** * Массив товаров результатов поиска. * @see {@link SearchProduct} * @defaultValue [] */ searchResults: SearchProduct[]; /** * Доступны ли результаты поиска. * @defaultValue false */ hasSearchResults: boolean; } /** * Интерфейс свойств для слота отсутствия результатов. * Отображается, когда поиск не возвращает результатов. */ export interface NoResultsSlotProps extends BaseLoadingSlotProps { /** * Текущий поисковый запрос, который не дал результатов. * @defaultValue "" */ searchQuery: string; /** * Доступны ли результаты поиска. * @defaultValue false */ hasSearchResults: boolean; /** * Массив результатов поиска (пустой в данном случае). * @defaultValue [] */ searchResults: SearchProduct[]; } /** * Интерфейс свойств для слота популярных товаров. * Предоставляет доступ к отображению популярных товаров. */ export interface PopularProductsSlotProps extends BaseProductSlotProps { /** * Массив популярных товаров для отображения. * @see {@link SearchProduct} * @defaultValue [] */ popularProducts: SearchProduct[]; /** * Доступны ли результаты поиска. * @defaultValue false */ hasSearchResults: boolean; /** * Массив результатов поиска. * @defaultValue [] */ searchResults: SearchProduct[]; } /** * Интерфейс свойств для слота загрузки. * Отображается во время состояний загрузки. */ export interface LoadingSlotProps extends BaseLoadingSlotProps {} /** * Интерфейс свойств для слота ошибки. * Отображается при возникновении ошибок. */ export interface ErrorSlotProps { /** * Сообщение об ошибке для отображения. * @defaultValue "" */ error: string; } /** * Полный интерфейс слотов для компонента BarneoSearchWidget. * Определяет все доступные слоты и их интерфейсы свойств. */ export interface BarneoSearchWidgetSlots { /** * Слот для настройки поля ввода поиска. * @param {SearchInputSlotProps} props - Свойства поля ввода поиска */ "search-input": SearchInputSlotProps; /** * Слот для настройки отображения истории поиска. * @param {SearchHistorySlotProps} props - Свойства истории */ "search-history": SearchHistorySlotProps; /** * Слот для настройки поисковых подсказок/автодополнения. * @param {SearchHintsSlotProps} props - Свойства подсказок */ "search-hints": SearchHintsSlotProps; /** * Слот для настройки отображения популярных запросов. * @param {PopularQueriesSlotProps} props - Свойства популярных запросов */ "popular-queries": PopularQueriesSlotProps; /** * Слот для настройки отображения результатов поиска. * @param {SearchResultsSlotProps} props - Свойства результатов поиска */ "search-results": SearchResultsSlotProps; /** * Слот для настройки сообщения "ничего не найдено". * @param {NoResultsSlotProps} props - Свойства отсутствия результатов */ "no-results": NoResultsSlotProps; /** * Слот для настройки отображения популярных товаров. * @param {PopularProductsSlotProps} props - Свойства популярных товаров */ "popular-products": PopularProductsSlotProps; /** * Слот для настройки отображения состояния загрузки. * @param {LoadingSlotProps} props - Свойства загрузки */ loading: LoadingSlotProps; /** * Слот для настройки отображения состояния ошибки. * @param {ErrorSlotProps} props - Свойства ошибки */ error: ErrorSlotProps; } /** * Определения типов для отдельных функций слотов. * Эти типы могут использоваться для типобезопасных реализаций слотов. */ export type SearchInputSlot = (props: SearchInputSlotProps) => VNode; export type SearchHistorySlot = (props: SearchHistorySlotProps) => VNode; export type SearchHintsSlot = (props: SearchHintsSlotProps) => VNode; export type PopularQueriesSlot = (props: PopularQueriesSlotProps) => VNode; export type SearchResultsSlot = (props: SearchResultsSlotProps) => VNode; export type NoResultsSlot = (props: NoResultsSlotProps) => VNode; export type PopularProductsSlot = (props: PopularProductsSlotProps) => VNode; export type LoadingSlot = (props: LoadingSlotProps) => VNode; export type ErrorSlot = (props: ErrorSlotProps) => VNode;