import React, { useState } from 'react'; /** * Model Selector * * Grid/list of available models with filtering. * Shows NSFW badges and download status. */ export const ModelSelector = ({ models, selectedModelId, onSelect, contentRating, showDownloadStatus = true, }) => { const [filter, setFilter] = useState('all'); const [searchQuery, setSearchQuery] = useState(''); // Filter models based on content rating and user filters const filteredModels = models.filter((model) => { // Hide NSFW models in SFW mode if (contentRating === 'sfw' && model.nsfw) { return false; } // Apply user filter if (filter === 'anime' && !model.anime) return false; if (filter === 'nsfw' && !model.nsfw) return false; if (filter === 'sfw' && model.nsfw) return false; // Apply search if (searchQuery) { const q = searchQuery.toLowerCase(); return (model.label.toLowerCase().includes(q) || model.description.toLowerCase().includes(q)); } return true; }); return (
{/* Filters */}
setSearchQuery(e.target.value)}/>
{['all', 'anime', 'nsfw', 'sfw'].map((f) => ())}
{/* Model Grid */}
{filteredModels.map((model) => (
onSelect(model.id)}>
{model.anime ? '\uD83C\uDF38' : '\uD83D\uDDBC\uFE0F'}

{model.label}

{model.description}

{model.size_gb} GB {model.resolution && ({model.resolution})}
{model.nsfw ? (\uD83D\uDD1E NSFW) : (\u2713 SFW)} {model.recommended_nsfw && (\u2B50 Recommended)} {model.anime && (Anime)}
{showDownloadStatus && (
{model.downloaded ? (\u2713 Ready) : ()}
)}
))} {filteredModels.length === 0 && (

No models match your filters

{contentRating === 'sfw' && filter === 'nsfw' && (

Enable Mature mode to see NSFW models

)}
)}
); };