import React, { useState } from 'react'; import { View, Text, ScrollView, StyleSheet } from 'react-native'; import { Ux4gSearchField } from '../components/search-field/SearchField'; import { useUx4gTheme } from '../theme/Ux4gThemeContext'; const SAMPLE_COUNTRIES = [ 'India', 'United States', 'United Kingdom', 'Australia', 'Canada', 'Germany', 'France', 'Japan', 'Brazil', 'South Africa', 'Singapore', 'United Arab Emirates', 'Indonesia', 'Italy', 'Spain', ]; export const SearchFieldShowcase: React.FC = () => { const theme = useUx4gTheme(); const colors = theme.colors; const isDark = theme.isDark; // Section 1: Basic Search const [basicVal, setBasicVal] = useState(''); const [noVoiceVal, setNoVoiceVal] = useState(''); // Section 2: Search with Submit Button const [submitFilledVal, setSubmitFilledVal] = useState('Delhi'); const [submitTonalVal, setSubmitTonalVal] = useState(''); const [lastSubmitted, setLastSubmitted] = useState('None'); // Section 3: Autocomplete Variants const [autoContainsVal, setAutoContainsVal] = useState(''); const [autoStartsWithVal, setAutoStartsWithVal] = useState(''); const [autoLoadingVal, setAutoLoadingVal] = useState('New '); // Section 4: Sizes const [smallVal, setSmallVal] = useState('Small search'); const [mediumVal, setMediumVal] = useState('Medium default'); const [largeVal, setLargeVal] = useState('Large search'); const [xlVal, setXlVal] = useState('Extra Large search'); // Section 5: Validation Statuses const [defaultStatusVal, setDefaultStatusVal] = useState('Regular query'); const [errorStatusVal, setErrorStatusVal] = useState('Invalid character @#$'); const [warningStatusVal, setWarningStatusVal] = useState('Slow server connection'); const [successStatusVal, setSuccessStatusVal] = useState('Valid tracking number'); // Section 6: Disabled const [disabledVal] = useState('GOV/2026/SEARCH-LOCK'); const cardStyle = [ styles.card, { backgroundColor: colors.surface ?? (isDark ? '#18181B' : '#FFFFFF'), borderColor: isDark ? '#27272A' : '#E4E4E7', }, ]; const titleStyle = [styles.cardTitle, { color: colors.onSurface }]; const subtitleStyle = [styles.cardSubtitle, { color: isDark ? '#A1A1AA' : '#71717A' }]; return ( 🔍 Search Field Variants (`Ux4gSearchField`) Complete demonstration of all search field variants (`basicSearch`, `searchWithSubmit`, `autocomplete`), sizes, statuses, and interactive option lists. {/* ── SECTION 1: Basic Search ─────────────────────────────────────────── */} 1. Basic Search (`basicSearch`) Standard input with search leading icon, optional voice search (`mic`), and clear (`close`) icon when text is entered. {/* ── SECTION 2: Search with Submit Button ────────────────────────────── */} 2. Search with Submit Button (`searchWithSubmit`) Displays an attached action button on the right edge with `filled` or `tonal` style. setLastSubmitted(`Filled: "${val}"`)} /> setLastSubmitted(`Tonal: "${val}"`)} /> Last Submitted: {lastSubmitted} {/* ── SECTION 3: Autocomplete / Options Filtering ──────────────────────── */} 3. Autocomplete & Option Filtering (`autocomplete`) Focus on the input and type to filter the dropdown menu list (`contains`, `startsWith`, or `isLoading`). {/* ── SECTION 4: Sizing Options ────────────────────────────────────────── */} 4. Sizing Variants (`small`, `medium`, `large`, `xl`) Pixel-perfect height scaling across all form sizes (`32px`, `40px`, `48px`, `56px`). {/* ── SECTION 5: Validation Statuses ──────────────────────────────────── */} 5. Validation Statuses Semantic status borders, colored labels, status icons, and helper text messages. {/* ── SECTION 6: Disabled vs Enabled ──────────────────────────────────── */} 6. Disabled State (`enabled = false`) Read-only display when search permissions or inputs are locked. {}} enabled={false} variant="searchWithSubmit" caption="You do not have permission to modify this search filter." /> ); }; const styles = StyleSheet.create({ container: { flex: 1, }, contentContainer: { padding: 16, paddingBottom: 64, }, header: { marginBottom: 20, }, title: { fontSize: 22, fontWeight: '800', marginBottom: 6, }, card: { borderWidth: 1, borderRadius: 12, padding: 16, marginBottom: 20, overflow: 'visible', }, cardTitle: { fontSize: 16, fontWeight: '700', marginBottom: 4, }, cardSubtitle: { fontSize: 13, marginBottom: 16, lineHeight: 18, }, rowSpacing: { marginBottom: 16, }, infoBox: { marginTop: 4, paddingVertical: 10, paddingHorizontal: 14, borderRadius: 8, backgroundColor: 'rgba(50, 113, 234, 0.08)', }, infoText: { fontSize: 14, }, });