import React, { useState } from 'react'; import { View, Text, Pressable, ScrollView, StyleSheet, } from 'react-native'; import { Ux4gStatusBanner } from '../components/status-banner/StatusBanner'; import { Ux4gButton } from '../components/button/Button'; import { Ux4gTag } from '../components/tag/Tag'; import { Ux4gSpinner } from '../components/spinner/Spinner'; import { Ux4gIcons } from '../foundation/icons'; import { useUx4gTheme } from '../theme/Ux4gThemeContext'; export const StatusBannerShowcase: React.FC = () => { const theme = useUx4gTheme(); const colors = theme.colors; const [dismissedBanners, setDismissedBanners] = useState([]); const [isDraftExpanded, setIsDraftExpanded] = useState(false); const handleDismiss = (id: string) => { setDismissedBanners((prev) => [...prev, id]); }; const isVisible = (id: string) => !dismissedBanners.includes(id); const cardStyle = [ styles.card, { backgroundColor: theme.isDark ? '#1F1F1F' : '#FFFFFF', borderColor: theme.isDark ? '#333333' : '#E4E4E7', }, ]; const titleStyle = [ styles.sectionTitle, { color: theme.isDark ? '#F4F4F5' : '#18181B' }, ]; const subtitleStyle = [ styles.subText, { color: theme.isDark ? '#A1A1AA' : '#71717A' }, ]; return ( 📢 Status Banner Component (`Ux4gStatusBanner`) Ported from Flutter `status_banner.dart`. Supports 8 visual variants (`warningLight`, `warningSolid`, `errorLight`, `successLight`, `savingLight`, `infoLight`, `neutralLight`, `primaryLight`), leading/trailing icons, badges, bottom actions, and dismiss controls. {/* 1. All 8 Visual Variants */} 1. Banner Variants (`variant`) Comprehensive display of all 8 status banner variants using default foundation icons and color tokens. {/* 2. Real-World Application & Draft Workflows (Matching User Design Images) */} 2. Real-World Application & Draft Workflows Exact reproduction of portal draft banners, saving progress indicators, and expandable application states. {/* Card 1: Expandable Application Draft Banner */} Last saved: 10 Apr 2026 } trailingIcon={ setIsDraftExpanded((prev) => !prev)}> {isDraftExpanded ? Ux4gIcons.arrowUp({ size: 20, color: '#18181B' }) : Ux4gIcons.arrowDropDown({ size: 20, color: '#18181B' })} } actionsAlignment="space-between" actions={ isDraftExpanded ? [ {}} />, {}} />, ] : undefined } marginStyle={styles.zeroMargin} /> {/* Card 2: Warning Solid Draft Expiry Banner */} {/* Card 3: Saving State Banner */} Saving } marginStyle={styles.zeroMargin} /> {/* Card 4: Draft Saved Success Banner */} {/* Card 5: Draft Expiry Warning with Date Tag */} } marginStyle={styles.zeroMargin} /> {/* Card 6: Draft Expired Error Banner with Action Link */} {}}> Action } marginStyle={styles.zeroMargin} /> {/* Card 7: Saved Right-Aligned Trailing Checkmark Banner */} {Ux4gIcons.success({ size: 20, color: '#128937' })} Saved 3:14 PM } marginStyle={styles.zeroMargin} /> {/* 3. Banner with Badges & Subtitle Widget */} 3. Banner with Badges (`badge` & `subtitleWidget`) Attach status tags or custom components inside the title wrap and subtitle area. } subtitle="Your Aadhaar number ending in 9821 is linked and verified." leadingIcon={Ux4gIcons.verification({ size: 22 })} marginStyle={styles.zeroMargin} /> } subtitleWidget={ ⚠️ Action required: Re-upload clear PAN document before July 31. } leadingIcon={Ux4gIcons.warning({ size: 20, color: '#FA8C16' })} marginStyle={styles.zeroMargin} /> {/* 4. Banner with Action Buttons */} 4. Banner with Actions (`actions` & `actionsAlignment`) Inline call-to-action buttons aligned to start, end, or space-between. {}} />, {}} />, ]} marginStyle={styles.zeroMargin} /> {}} />, {}} />, ]} marginStyle={styles.zeroMargin} /> {/* 5. Interactive Dismissable Banners */} 5. Interactive Dismissable Banner (`onDismiss`) Tap the trailing ✕ icon button to dismiss the banner! {isVisible('banner-1') && ( handleDismiss('banner-1')} marginStyle={styles.zeroMargin} /> )} {isVisible('banner-2') && ( handleDismiss('banner-2')} marginStyle={styles.zeroMargin} /> )} {dismissedBanners.length > 0 && ( setDismissedBanners([])} /> )} ); }; const styles = StyleSheet.create({ container: { flex: 1, }, contentContainer: { padding: 16, paddingBottom: 40, }, header: { marginBottom: 16, }, title: { fontSize: 22, fontWeight: '800', marginBottom: 6, }, subText: { fontSize: 14, lineHeight: 20, }, card: { borderWidth: 1, borderRadius: 16, padding: 16, marginBottom: 16, }, sectionTitle: { fontSize: 16, fontWeight: '700', marginBottom: 4, }, stackGroup: { marginTop: 14, gap: 14, }, zeroMargin: { marginHorizontal: 0, marginVertical: 0, }, });