import React, { useState } from 'react'; import { View, Text, StyleSheet, ScrollView, TouchableOpacity } from 'react-native'; import { useUx4gTheme } from '../theme/Ux4gThemeContext'; import { Ux4gTimePicker, Ux4gTimeOfDay } from '../components/time-picker'; import { Ux4gInputFieldStatus } from '../components/input-field'; export const TimePickerShowcase: React.FC = () => { const { colors, typography, isDark, toggleTheme } = useUx4gTheme(); const [standardTime, setStandardTime] = useState({ hour: 9, minute: 30, }); const [intervalTime, setIntervalTime] = useState(undefined); const [statusTime, setStatusTime] = useState(undefined); const [status, setStatus] = useState('defaultStatus'); const formatTimeStr = (t?: Ux4gTimeOfDay) => { if (!t) return 'None'; const isAm = t.hour < 12; const rawHour = t.hour % 12; const displayHour = rawHour === 0 ? 12 : rawHour; const hStr = String(displayHour).padStart(2, '0'); const mStr = String(t.minute).padStart(2, '0'); return `${hStr}:${mStr} ${isAm ? 'AM' : 'PM'}`; }; return ( Ux4gTimePicker Showcase 12-hour AM/PM Time Picker component with minute intervals and status variants. Toggle Theme ({isDark ? 'Dark' : 'Light'}) {/* Card 1: Standard Time Picker */} Standard Time Picker setStandardTime(t)} /> {standardTime && ( Selected Time: {formatTimeStr(standardTime)} )} {/* Card 2: Custom Minute Interval (15 mins) */} Minute Interval (15 Minutes) setIntervalTime(t)} /> {intervalTime && ( Selected Interval Time: {formatTimeStr(intervalTime)} )} {/* Card 3: Validation Statuses */} Validation Statuses {(['defaultStatus', 'error', 'warning', 'success'] as Ux4gInputFieldStatus[]).map((st) => ( setStatus(st)} style={[ styles.statusChip, { backgroundColor: status === st ? colors.primary : `${colors.onSurface}1A`, }, ]} > {st} ))} setStatusTime(t)} /> {/* Card 4: Disabled State */} Disabled Field ); }; const styles = StyleSheet.create({ container: { flex: 1, padding: 16, }, header: { marginBottom: 20, }, title: { fontSize: 22, fontWeight: 'bold', marginBottom: 6, }, subtitle: { fontSize: 14, marginBottom: 12, }, themeButton: { paddingHorizontal: 14, paddingVertical: 8, borderRadius: 6, alignSelf: 'flex-start', }, themeButtonText: { fontSize: 13, fontWeight: '600', }, card: { padding: 16, borderRadius: 12, borderWidth: 1, marginBottom: 16, }, cardHeaderTitle: { fontSize: 18, fontWeight: '700', marginBottom: 14, }, stateContainer: { marginTop: 12, padding: 8, borderRadius: 6, backgroundColor: 'rgba(74, 43, 194, 0.08)', }, stateText: { fontSize: 13, fontWeight: '600', }, statusButtonsRow: { flexDirection: 'row', flexWrap: 'wrap', marginBottom: 12, }, statusChip: { paddingHorizontal: 10, paddingVertical: 6, borderRadius: 16, marginRight: 8, marginBottom: 6, }, statusChipText: { fontSize: 12, fontWeight: '600', }, });