types.ts
1 /** 2 * Coordenadas geográficas para resultados de tipo maps 3 */ 4 export interface Coordinates { 5 lat: number; // Latitud 6 lng: number; // Longitud 7 } 8 9 /** 10 * Tipos de búsqueda soportados por la aplicación 11 */ 12 export type SearchType = 'web' | 'images' | 'videos' | 'audio' | 'document' | 'app' | 'maps'; 13 14 /** 15 * Tipos de contenido soportados por YaCy 16 */ 17 export enum ContentDomain { 18 ALL = 'all', 19 IMAGE = 'image', 20 AUDIO = 'audio', 21 VIDEO = 'video', 22 APP = 'app', 23 TEXT = 'text' 24 } 25 26 /** 27 * Interfaz para representar un resultado de búsqueda 28 */ 29 export interface SearchResult { 30 title: string; // Título del resultado 31 link: string; // URL del resultado 32 description: string; // Descripción o extracto del contenido 33 type: SearchType; // Tipo de contenido 34 thumbnail?: string; // URL de la miniatura o imagen 35 image?: string; // URL directa a la imagen (para resultados tipo imagen) 36 imageWidth?: number; // Ancho de la imagen si está disponible 37 imageHeight?: number; // Alto de la imagen si está disponible 38 language?: string; // Código del idioma 39 tags?: string[]; // Etiquetas relacionadas 40 date?: Date; // Fecha de publicación 41 size?: string; // Tamaño formateado 42 score?: number; // Puntuación de relevancia 43 coordinates?: Coordinates; // Coordenadas para resultados de mapas 44 domain?: string; // Dominio extraído del link (calculado) 45 formattedUrl?: string; // URL formateada para mostrar (calculado) 46 _raw?: any; // Datos crudos originales (para depuración) 47 } 48 49 /** 50 * Respuesta de la API de búsqueda 51 */ 52 export interface SearchResponse { 53 results: SearchResult[]; // Resultados de la búsqueda 54 totalResults: number; // Número total de resultados disponibles 55 searchTime: number; // Tiempo que tomó la búsqueda en segundos 56 query: string; // Consulta original 57 page: number; // Número de página actual 58 error: string | null; // Error si ocurrió alguno 59 } 60 61 /** 62 * Parámetros de búsqueda soportados 63 */ 64 export interface SearchParams { 65 query: string; // Consulta de búsqueda 66 type?: SearchType; // Tipo de búsqueda 67 language?: string; // Filtro de idioma 68 page?: number; // Página de resultados (0-indexed) 69 resultadosPorPagina?: number; // Resultados por página 70 recurso?: string; // Recurso de búsqueda (local, global) 71 preferMask?: string; // Filtro de preferencia de máscara 72 constraints?: string; // Restricciones adicionales 73 mediaSearch?: string; // Configuración de búsqueda de medios 74 } 75 76 /** 77 * Configuración de la API YaCy 78 */ 79 export interface YacyConfig { 80 baseUrl: string; // URL base del servidor YaCy 81 timeout: number; // Timeout para las peticiones en ms 82 defaultMaxResults: number; // Número máximo de resultados por defecto 83 imageMaxResults: number; // Número máximo de resultados para imágenes 84 } 85 86 /** 87 * Estado global de la aplicación 88 */ 89 export interface AppState { 90 searchParams: SearchParams; // Parámetros de búsqueda actuales 91 darkMode: boolean; // Modo oscuro activado/desactivado 92 viewColumns: number; // Número de columnas en la vista de resultados 93 mapState: MapState; // Estado del mapa 94 } 95 96 /** 97 * Estado del mapa 98 */ 99 export interface MapState { 100 center: Coordinates; // Centro del mapa 101 zoom: number; // Nivel de zoom 102 markers: Coordinates[]; // Marcadores en el mapa 103 offline: boolean; // Modo offline activado/desactivado 104 }