{"version":3,"file":"src_hooks_useClientConfig_ts-packages_ui-mobile_src_index_tsx.chunk.bundle","sources":["/Users/claudiobaiardi/Documents/GitHub/aldyl/dataoil-app/apps/data-oil-app/otherReports/src/hooks/useClientConfig.ts","/Users/claudiobaiardi/Documents/GitHub/aldyl/dataoil-app/packages/ui-mobile/src/components/BreadcrumbProvider.tsx","/Users/claudiobaiardi/Documents/GitHub/aldyl/dataoil-app/packages/ui-mobile/src/components/breadcrumb.tsx","/Users/claudiobaiardi/Documents/GitHub/aldyl/dataoil-app/packages/ui-mobile/src/components/checkbox.tsx","/Users/claudiobaiardi/Documents/GitHub/aldyl/dataoil-app/packages/ui-mobile/src/components/confirmation-modal.tsx","/Users/claudiobaiardi/Documents/GitHub/aldyl/dataoil-app/packages/ui-mobile/src/components/date-picker.tsx","/Users/claudiobaiardi/Documents/GitHub/aldyl/dataoil-app/packages/ui-mobile/src/components/date-range-picker/Calendar.tsx","/Users/claudiobaiardi/Documents/GitHub/aldyl/dataoil-app/packages/ui-mobile/src/components/date-range-picker/DateRangePicker.tsx","/Users/claudiobaiardi/Documents/GitHub/aldyl/dataoil-app/packages/ui-mobile/src/components/date-range-picker/Day.tsx","/Users/claudiobaiardi/Documents/GitHub/aldyl/dataoil-app/packages/ui-mobile/src/components/date-range-picker/Header.tsx","/Users/claudiobaiardi/Documents/GitHub/aldyl/dataoil-app/packages/ui-mobile/src/components/date-range-picker/index.ts","/Users/claudiobaiardi/Documents/GitHub/aldyl/dataoil-app/packages/ui-mobile/src/components/field-group.tsx","/Users/claudiobaiardi/Documents/GitHub/aldyl/dataoil-app/packages/ui-mobile/src/components/folder-icon-button.tsx","/Users/claudiobaiardi/Documents/GitHub/aldyl/dataoil-app/packages/ui-mobile/src/components/form-box.tsx","/Users/claudiobaiardi/Documents/GitHub/aldyl/dataoil-app/packages/ui-mobile/src/components/icon-card-button.tsx","/Users/claudiobaiardi/Documents/GitHub/aldyl/dataoil-app/packages/ui-mobile/src/components/index.ts","/Users/claudiobaiardi/Documents/GitHub/aldyl/dataoil-app/packages/ui-mobile/src/components/loading-spinner.tsx","/Users/claudiobaiardi/Documents/GitHub/aldyl/dataoil-app/packages/ui-mobile/src/components/mobile-table.tsx","/Users/claudiobaiardi/Documents/GitHub/aldyl/dataoil-app/packages/ui-mobile/src/components/network-indicator.tsx","/Users/claudiobaiardi/Documents/GitHub/aldyl/dataoil-app/packages/ui-mobile/src/components/numeric-field.tsx","/Users/claudiobaiardi/Documents/GitHub/aldyl/dataoil-app/packages/ui-mobile/src/components/ods-widget.tsx","/Users/claudiobaiardi/Documents/GitHub/aldyl/dataoil-app/packages/ui-mobile/src/components/progress-bar.tsx","/Users/claudiobaiardi/Documents/GitHub/aldyl/dataoil-app/packages/ui-mobile/src/components/radio-group.tsx","/Users/claudiobaiardi/Documents/GitHub/aldyl/dataoil-app/packages/ui-mobile/src/components/search-input.tsx","/Users/claudiobaiardi/Documents/GitHub/aldyl/dataoil-app/packages/ui-mobile/src/components/searchable-select.tsx","/Users/claudiobaiardi/Documents/GitHub/aldyl/dataoil-app/packages/ui-mobile/src/components/select.tsx","/Users/claudiobaiardi/Documents/GitHub/aldyl/dataoil-app/packages/ui-mobile/src/components/skeleton-loader.tsx","/Users/claudiobaiardi/Documents/GitHub/aldyl/dataoil-app/packages/ui-mobile/src/components/stat-card.tsx","/Users/claudiobaiardi/Documents/GitHub/aldyl/dataoil-app/packages/ui-mobile/src/components/status-button.tsx","/Users/claudiobaiardi/Documents/GitHub/aldyl/dataoil-app/packages/ui-mobile/src/components/summary-table.tsx","/Users/claudiobaiardi/Documents/GitHub/aldyl/dataoil-app/packages/ui-mobile/src/components/tag.tsx","/Users/claudiobaiardi/Documents/GitHub/aldyl/dataoil-app/packages/ui-mobile/src/components/time-picker.tsx","/Users/claudiobaiardi/Documents/GitHub/aldyl/dataoil-app/packages/ui-mobile/src/components/useSelectPositioning.ts","/Users/claudiobaiardi/Documents/GitHub/aldyl/dataoil-app/packages/ui-mobile/src/hooks/BreadcrumbContext.tsx","/Users/claudiobaiardi/Documents/GitHub/aldyl/dataoil-app/packages/ui-mobile/src/hooks/index.ts","/Users/claudiobaiardi/Documents/GitHub/aldyl/dataoil-app/packages/ui-mobile/src/hooks/useExitConfirmationGuard.tsx","/Users/claudiobaiardi/Documents/GitHub/aldyl/dataoil-app/packages/ui-mobile/src/hooks/useNetworkStatus.ts","/Users/claudiobaiardi/Documents/GitHub/aldyl/dataoil-app/packages/ui-mobile/src/hooks/useToast.ts","/Users/claudiobaiardi/Documents/GitHub/aldyl/dataoil-app/packages/ui-mobile/src/index.tsx"],"sourcesContent":["import { useMemo } from 'react';\nimport { configService, useConfig, useTheme } from '@data-oil-front/core-host';\n\ninterface ClientConfigSnapshot {\n  apiBaseUrl: string | null;\n  apiFileServer?: string;\n  primaryColor: string | null;\n  config: ReturnType<typeof useConfig>['config'];\n}\n\nexport function useClientConfig(): ClientConfigSnapshot {\n  const { config } = useConfig();\n  const defaultConfig = useMemo(() => configService.getDefaultConfig(), []);\n  const { primaryColor } = useTheme();\n\n  const apiBaseUrl = config.API_BASE_URL ?? null;\n  const apiFileServer =\n    (config as any)?.API_FILE_SERVER ??\n    (defaultConfig as any)?.API_FILE_SERVER ??\n    undefined;\n\n  return {\n    config,\n    apiBaseUrl,\n    apiFileServer,\n    primaryColor,\n  };\n}\n","import React, { useEffect, ReactNode } from 'react';\nimport { useBreadcrumb } from '../hooks/BreadcrumbContext';\n\ninterface RouteConfig {\n  [key: string]: {\n    label: string;\n    parent?: string;\n  };\n}\n\n// Configuración de rutas con sus etiquetas y relaciones jerárquicas\nconst DEFAULT_ROUTE_CONFIG: RouteConfig = {\n  Home: { label: 'Inicio' },\n  DataLoading: { label: 'Cargando Datos' },\n  DailyReport: { label: 'Reporte Diario', parent: 'Home' },\n  LabReport: { label: 'Reporte de Laboratorio', parent: 'Home' },\n  OdsView: { label: 'ODS', parent: 'Home' },\n  ReportHistory: { label: 'Historial de Reportes', parent: 'Home' },\n  SyncData: { label: 'Sincronizar Datos', parent: 'Home' },\n};\n\ninterface BreadcrumbProviderProps {\n  children: ReactNode;\n  routeConfig?: RouteConfig;\n  color?: string;\n  // Nombre de la ruta actual; provisto por la app que usa @react-navigation\n  currentRouteName?: string;\n}\n\nexport function BreadcrumbProvider({\n  children,\n  routeConfig = DEFAULT_ROUTE_CONFIG,\n  color,\n  currentRouteName,\n}: BreadcrumbProviderProps) {\n  const { setBreadcrumb, setColor, clearBreadcrumb } = useBreadcrumb();\n\n  useEffect(() => {\n    if (color) {\n      setColor(color);\n    }\n  }, [color, setColor]);\n\n  useEffect(() => {\n    if (!currentRouteName) {\n      clearBreadcrumb();\n      return;\n    }\n\n    // Construir el breadcrumb basado en la ruta actual\n    const buildBreadcrumb = (routeName: string): Array<{ label: string; navigateTo?: string }> => {\n      const route = routeConfig[routeName];\n      if (!route) return [];\n\n      const breadcrumbItems = [] as Array<{ label: string; navigateTo?: string }>;\n\n      // Si tiene un padre, incluirlo primero\n      if (route.parent) {\n        const parentItems = buildBreadcrumb(route.parent);\n        breadcrumbItems.push(...parentItems);\n      }\n\n      // Agregar el item actual\n      breadcrumbItems.push({\n        label: route.label,\n        navigateTo: routeName !== currentRouteName ? routeName : undefined,\n      });\n\n      return breadcrumbItems;\n    };\n\n    const breadcrumbItems = buildBreadcrumb(currentRouteName);\n\n    // Solo actualizar si hay cambios\n    if (breadcrumbItems.length > 0) {\n      setBreadcrumb(breadcrumbItems);\n    } else {\n      clearBreadcrumb();\n    }\n  }, [currentRouteName, routeConfig, setBreadcrumb, clearBreadcrumb]);\n\n  return <>{children}</>;\n}\n","import React, { useState, useEffect, FunctionComponent } from \"react\";\nimport {\n  View,\n  Text,\n  TouchableOpacity,\n  StyleSheet,\n  Modal,\n  Pressable,\n} from \"react-native\";\nimport { ChevronRightIcon } from \"react-native-heroicons/outline\";\nimport { useBreadcrumb } from '../hooks/BreadcrumbContext';\nimport type { BreadcrumbItem } from '../hooks/BreadcrumbContext';\nimport { CommonActions, useNavigation } from '@react-navigation/native';\n\ninterface BreadcrumbProps {\n  items?: BreadcrumbItem[]; // Ahora es opcional\n  color?: string;\n}\n\nexport const Breadcrumb: FunctionComponent<BreadcrumbProps> = ({\n  items: propItems,\n  color: propColor,\n}) => {\n  const breadcrumbContext = useBreadcrumb();\n  const [showDropdown, setShowDropdown] = useState(false);\n  const navigation = useNavigation();\n\n  useEffect(() => {\n    if (showDropdown) {\n      const timer = setTimeout(() => {\n        setShowDropdown(false);\n      }, 5000);\n      return () => clearTimeout(timer);\n    }\n  }, [showDropdown]);\n\n  // ✅ Usar items del contexto si está disponible, sino usar props\n  // breadcrumbContext puede ser undefined si no hay BreadcrumbProvider\n  const items = propItems || breadcrumbContext?.state?.items || [];\n  const color = propColor || breadcrumbContext?.state?.color;\n\n  if (!items || items.length === 0) return null;\n\n  const handleNavigate = (\n    navigateTo?:\n      | string\n      | {\n          name: string;\n          params?: Record<string, unknown>;\n          mode?: 'push' | 'replace' | 'reset';\n        },\n  ) => {\n    if (!navigateTo) return;\n\n    const nav = navigation as any;\n    const canGoBack = typeof nav?.canGoBack === 'function' && nav.canGoBack();\n    const targetName = typeof navigateTo === 'string' ? navigateTo : navigateTo.name;\n\n    // When returning to Home from a form screen, pop the stack so beforeRemove guards run.\n    if (targetName === 'Home' && canGoBack && typeof nav?.popToTop === 'function') {\n      nav.popToTop();\n      return;\n    }\n\n    if (typeof navigateTo === 'string') {\n      navigation.navigate(navigateTo as never);\n      return;\n    }\n\n    if (navigateTo.mode === 'replace') {\n      (navigation as any).dispatch(\n        CommonActions.navigate({\n          name: navigateTo.name,\n          params: navigateTo.params ?? {},\n          merge: true,\n        }),\n      );\n      return;\n    }\n\n    if (navigateTo.mode === 'reset') {\n      (navigation as any).dispatch(\n        CommonActions.reset({\n          index: 0,\n          routes: [{ name: navigateTo.name, params: navigateTo.params ?? {} }],\n        }),\n      );\n      return;\n    }\n\n    (navigation as any).navigate(navigateTo.name, navigateTo.params ?? {});\n  };\n\n  const ArrowRightIcon = () => <ChevronRightIcon size={16} color=\"#B0B0B0\" />;\n\n  if (items.length <= 2) {\n    return (\n      <View style={styles.container}>\n        {items.map((item, idx) => (\n          <React.Fragment key={item.label}>\n            {idx !== 0 && <ArrowRightIcon />}\n            {idx === items.length - 1 ? (\n              <Text style={[styles.lastItem, { color }]}>{item.label}</Text>\n            ) : (\n              <TouchableOpacity\n                style={styles.clickableItem}\n                onPress={() => handleNavigate(item.navigateTo)}\n                activeOpacity={0.7}\n              >\n                <Text style={styles.clickableText}>{item.label}</Text>\n              </TouchableOpacity>\n            )}\n          </React.Fragment>\n        ))}\n      </View>\n    );\n  }\n\n  const first = items[0];\n  const last = items[items.length - 1];\n  const middle = items.slice(1, -1);\n\n  return (\n    <View style={styles.wrapper}>\n      <View style={styles.container}>\n        <TouchableOpacity\n          style={styles.clickableItem}\n          onPress={() => handleNavigate(first.navigateTo)}\n          activeOpacity={0.7}\n        >\n          <Text style={styles.clickableText}>{first.label}</Text>\n        </TouchableOpacity>\n        <ArrowRightIcon />\n\n        <View style={styles.dropdownContainer}>\n          <TouchableOpacity\n            style={styles.dropdownButton}\n            onPress={() => setShowDropdown(!showDropdown)}\n            activeOpacity={0.7}\n          >\n            <Text style={styles.dropdownText}>...</Text>\n          </TouchableOpacity>\n        </View>\n\n        <ArrowRightIcon />\n        <Text style={[styles.lastItem, { color }]}>{last.label}</Text>\n      </View>\n\n      {showDropdown && (\n        <Modal\n          visible={showDropdown}\n          transparent={true}\n          animationType=\"none\"\n          statusBarTranslucent={true}\n          onRequestClose={() => setShowDropdown(false)}\n        >\n          <View style={styles.modalContainer}>\n            <Pressable\n              style={styles.overlay}\n              onPress={() => setShowDropdown(false)}\n            />\n            <View style={styles.dropdownMenu}>\n              {middle.map((item) => (\n                <TouchableOpacity\n                  key={item.label}\n                  style={styles.dropdownItem}\n                  onPress={() => {\n                    setShowDropdown(false);\n                    handleNavigate(item.navigateTo);\n                  }}\n                  activeOpacity={0.7}\n                >\n                  <Text style={styles.dropdownItemText}>{item.label}</Text>\n                </TouchableOpacity>\n              ))}\n            </View>\n          </View>\n        </Modal>\n      )}\n    </View>\n  );\n};\n\nconst styles = StyleSheet.create({\n  wrapper: {\n    position: \"relative\",\n    zIndex: 1,\n    width: \"100%\",\n  },\n  container: {\n    backgroundColor: \"#f9fafb\",\n    width: \"100%\",\n    flexDirection: \"row\",\n    justifyContent: \"flex-start\",\n    alignItems: \"center\",\n    gap: 8,\n    paddingHorizontal: 16,\n    paddingVertical: 6,\n  },\n  clickableItem: {\n    backgroundColor: \"#F3F4F6\",\n    color: \"#6B7280\",\n    borderRadius: 6,\n    paddingVertical: 4,\n    paddingHorizontal: 8,\n  },\n  clickableText: {\n    fontSize: 14,\n    color: \"#6B7280\",\n    fontWeight: \"600\",\n  },\n  lastItem: {\n    fontSize: 14,\n    fontWeight: \"600\",\n  },\n  arrowIcon: {\n    fontSize: 14,\n    color: \"#B0B0B0\",\n    fontWeight: \"bold\",\n  },\n  dropdownContainer: {\n    position: \"relative\",\n  },\n  dropdownButton: {\n    paddingHorizontal: 8,\n    paddingVertical: 4,\n    borderRadius: 4,\n    backgroundColor: \"transparent\",\n  },\n  dropdownText: {\n    fontSize: 14,\n    color: \"#6B7280\",\n    fontWeight: \"bold\",\n  },\n  dropdownMenu: {\n    position: \"absolute\",\n    top: 50,\n    left: 16,\n    backgroundColor: \"white\",\n    borderRadius: 8,\n    borderWidth: 1,\n    borderColor: \"#E5E7EB\",\n    shadowColor: \"#000\",\n    shadowOffset: {\n      width: 0,\n      height: 4,\n    },\n    shadowOpacity: 0.3,\n    shadowRadius: 4.65,\n    elevation: 8,\n    minWidth: 120,\n  },\n  modalContainer: {\n    flex: 1,\n    position: \"relative\",\n  },\n  dropdownItem: {\n    paddingHorizontal: 16,\n    paddingVertical: 12,\n    borderBottomWidth: 1,\n    borderBottomColor: \"#F3F4F6\",\n  },\n  dropdownItemText: {\n    fontSize: 14,\n    color: \"#374151\",\n  },\n  overlay: {\n    flex: 1,\n    backgroundColor: \"transparent\",\n  },\n});\n","import React from 'react';\nimport { Pressable, View, Text, StyleSheet } from 'react-native';\n\nexport type CheckboxProps = {\n  checked: boolean;\n  onChange: (next: boolean) => void;\n  label?: string;\n  size?: number;\n  disabled?: boolean;\n  color?: string;\n  style?: any;\n  required?: boolean;\n};\n\nexport default function Checkbox({ checked, onChange, label, size = 22, disabled = false, color = '#2563EB', style, required = false }: CheckboxProps) {\n  return (\n    <Pressable\n      onPress={() => (!disabled ? onChange(!checked) : undefined)}\n      accessibilityRole=\"checkbox\"\n      accessibilityState={{ checked, disabled }}\n      style={[styles.row, style, disabled && styles.disabled]}\n    >\n      <View\n        style={[\n          styles.box,\n          { width: size, height: size, borderColor: color, backgroundColor: checked ? color : '#FFFFFF' },\n        ]}\n      >\n        {checked ? <View style={styles.tick} /> : null}\n      </View>\n      {label ? (\n        <Text style={styles.label}>\n          {label}\n          {required ? <Text style={styles.required}> *</Text> : null}\n        </Text>\n      ) : null}\n    </Pressable>\n  );\n}\n\nconst styles = StyleSheet.create({\n  row: { flexDirection: 'row', alignItems: 'center', gap: 10 },\n  box: { borderWidth: 2, borderRadius: 6, alignItems: 'center', justifyContent: 'center' },\n  tick: { width: 10, height: 10, backgroundColor: '#FFFFFF', borderRadius: 2 },\n  label: { fontSize: 16, color: '#111827' },\n  required: {\n    color: '#FF0000',\n    fontSize: 16,\n    fontWeight: '600',\n  },\n  disabled: { opacity: 0.6 },\n});\n\n\n","import React, { useEffect, useRef } from 'react';\nimport { Modal, View, Text, StyleSheet, TouchableOpacity, Animated, Easing } from 'react-native';\nimport { XMarkIcon } from 'react-native-heroicons/outline';\n\nexport interface ConfirmationModalProps {\n  open: boolean;\n  onClose: () => void;\n  onConfirm: () => void;\n  title: string;\n  message: string;\n  confirmText?: string;\n  cancelText?: string;\n}\n\nexport default function ConfirmationModal({\n  open,\n  onClose,\n  onConfirm,\n  title,\n  message,\n  confirmText = 'Sí, cancelar',\n  cancelText = 'No, continuar',\n}: ConfirmationModalProps) {\n  const opacity = useRef(new Animated.Value(0)).current;\n  const scale = useRef(new Animated.Value(0.95)).current;\n\n  useEffect(() => {\n    if (open) {\n      Animated.parallel([\n        Animated.timing(opacity, { toValue: 1, duration: 200, easing: Easing.out(Easing.ease), useNativeDriver: true }),\n        Animated.timing(scale, { toValue: 1, duration: 200, easing: Easing.out(Easing.ease), useNativeDriver: true }),\n      ]).start();\n    } else {\n      opacity.setValue(0);\n      scale.setValue(0.95);\n    }\n  }, [open, opacity, scale]);\n\n  return (\n    <Modal visible={open} transparent animationType=\"fade\" onRequestClose={onClose}>\n      <View style={styles.overlay}>\n        <Animated.View style={[styles.backdrop, { opacity }]} />\n        <Animated.View style={[styles.panelWrapper, { transform: [{ scale }], opacity }]}> \n          <View style={styles.panel}>\n            <View style={styles.header}>\n              <Text style={styles.title}>{title}</Text>\n              <TouchableOpacity accessibilityLabel=\"Cerrar\" onPress={onClose} style={styles.iconBtn}>\n                <XMarkIcon size={24} color=\"#6B7280\" />\n              </TouchableOpacity>\n            </View>\n            <View style={styles.body}>\n              <Text style={styles.message}>{message}</Text>\n            </View>\n            <View style={styles.footer}>\n              <TouchableOpacity\n                style={[styles.btn, styles.btnDanger]}\n                onPress={() => {\n                  onConfirm();\n                  onClose();\n                }}\n                activeOpacity={0.9}\n              >\n                <Text style={styles.btnDangerText}>{confirmText}</Text>\n              </TouchableOpacity>\n              <TouchableOpacity style={[styles.btn, styles.btnSecondary]} onPress={onClose} activeOpacity={0.9}>\n                <Text style={styles.btnSecondaryText}>{cancelText}</Text>\n              </TouchableOpacity>\n            </View>\n          </View>\n        </Animated.View>\n      </View>\n    </Modal>\n  );\n}\n\nconst styles = StyleSheet.create({\n  overlay: {\n    flex: 1,\n    alignItems: 'center',\n    justifyContent: 'center',\n  },\n  backdrop: {\n    position: 'absolute',\n    top: 0,\n    left: 0,\n    right: 0,\n    bottom: 0,\n    backgroundColor: 'rgba(0,0,0,0.5)',\n  },\n  panelWrapper: {\n    width: '100%',\n    paddingHorizontal: 16,\n  },\n  panel: {\n    backgroundColor: '#FFFFFF',\n    borderRadius: 12,\n    shadowColor: '#000',\n    shadowOpacity: 0.2,\n    shadowRadius: 12,\n    shadowOffset: { width: 0, height: 6 },\n    elevation: 8,\n    overflow: 'hidden',\n  },\n  header: {\n    paddingHorizontal: 16,\n    paddingTop: 16,\n    paddingBottom: 8,\n    flexDirection: 'row',\n    alignItems: 'center',\n    justifyContent: 'space-between',\n  },\n  title: {\n    fontSize: 18,\n    fontWeight: '600',\n    color: '#111827',\n  },\n  iconBtn: {\n    padding: 6,\n    borderRadius: 999,\n  },\n  body: {\n    paddingHorizontal: 16,\n    paddingVertical: 8,\n  },\n  message: {\n    fontSize: 14,\n    color: '#6B7280',\n  },\n  footer: {\n    flexDirection: 'row',\n    gap: 12,\n    paddingHorizontal: 16,\n    paddingVertical: 12,\n    backgroundColor: '#F9FAFB',\n  },\n  btn: {\n    flex: 1,\n    borderRadius: 8,\n    paddingVertical: 12,\n    alignItems: 'center',\n    justifyContent: 'center',\n  },\n  btnDanger: {\n    backgroundColor: '#DC2626',\n  },\n  btnDangerText: {\n    color: '#FFFFFF',\n    fontWeight: '600',\n  },\n  btnSecondary: {\n    backgroundColor: '#FFFFFF',\n    borderWidth: 1,\n    borderColor: '#D1D5DB',\n  },\n  btnSecondaryText: {\n    color: '#374151',\n    fontWeight: '600',\n  },\n});\n\n\n","import React, { useCallback, useMemo, useState } from 'react';\nimport { Modal, Platform, StyleSheet, Text, TouchableOpacity, View } from 'react-native';\nimport { CalendarIcon } from 'react-native-heroicons/outline';\nimport DateTimePicker, { DateTimePickerEvent } from '@react-native-community/datetimepicker';\n\nexport interface DatePickerProps {\n  label?: string;\n  value: Date | null;\n  onChange: (value: Date | null) => void;\n  onApply?: (date?: Date | null) => void;\n  onClear?: () => void;\n  onMonthChange?: (monthDate: Date) => void; // se llama cuando cambia el mes visible (aprox.)\n  open?: boolean;\n  onOpenChange?: (open: boolean) => void;\n  applyText?: string;\n  clearText?: string;\n  disabled?: boolean;\n  required?: boolean;\n}\n\n/**\n * DatePicker móvil simple basado en Modal + DateTimePicker\n * - iOS: inline dentro de un modal con botones Apply/Clear\n * - Android: usa el picker nativo y cierra al seleccionar\n */\nexport default function UiMobileDatePicker({\n  label,\n  value,\n  onChange,\n  onApply,\n  onClear,\n  onMonthChange,\n  open,\n  onOpenChange,\n  applyText = 'Aplicar',\n  clearText = 'Limpiar',\n  disabled = false,\n  required = false,\n}: DatePickerProps) {\n  const [internalOpen, setInternalOpen] = useState(false);\n  const isOpen = open ?? internalOpen;\n\n  // Estado interno para manejar la fecha seleccionada en el picker (iOS)\n  // Se sincroniza con value al abrir, pero permite cambios locales inmediatos\n  const [pickerDate, setPickerDate] = useState(value ?? new Date());\n\n  // Sincronizar pickerDate cuando value cambia (externamente) o al abrir\n  React.useEffect(() => {\n    if (value) {\n      setPickerDate(value);\n    }\n  }, [value, isOpen]);\n\n  const setOpen = useCallback(\n    (next: boolean) => {\n      if (next) {\n        // Al abrir, aseguramos que pickerDate esté sync con value actual\n        setPickerDate(value ?? new Date());\n      }\n      if (onOpenChange) onOpenChange(next);\n      else setInternalOpen(next);\n    },\n    [onOpenChange, value]\n  );\n\n  const handleAndroidChange = useCallback(\n    (event: DateTimePickerEvent, date?: Date) => {\n      if (event.type === 'dismissed') {\n        setOpen(false);\n        return;\n      }\n      if (date) {\n        setPickerDate(date);\n        onChange(date);\n        // Heurística para onMonthChange\n        onMonthChange?.(date);\n      }\n      setOpen(false);\n      // En Android, el cambio es confirmación implícita\n      onApply?.(date);\n    },\n    [onApply, onChange, onMonthChange, setOpen]\n  );\n\n  const handleIOSChange = useCallback(\n    (_: any, date?: Date) => {\n      if (date) {\n        setPickerDate(date);\n        onChange(date);\n        onMonthChange?.(date);\n      }\n    },\n    [onChange, onMonthChange]\n  );\n\n  const iconColor = useMemo(() => {\n    if (disabled) return '#D1D5DB';\n    return value ? '#6B7280' : '#9CA3AF';\n  }, [disabled, value]);\n\n  return (\n    <View>\n      {label ? (\n        <Text style={styles.label}>\n          {label}\n          {required ? <Text style={styles.required}> *</Text> : null}\n        </Text>\n      ) : null}\n      <TouchableOpacity\n        accessibilityRole=\"button\"\n        onPress={() => setOpen(true)}\n        activeOpacity={0.8}\n        style={[styles.trigger, disabled && styles.triggerDisabled]}\n        disabled={disabled}\n      >\n        <Text style={styles.triggerText}>\n          {value ? formatDate(value) : 'Seleccionar fecha'}\n        </Text>\n        <View style={styles.calendarIcon} pointerEvents=\"none\">\n          <CalendarIcon size={20} color={iconColor} />\n        </View>\n      </TouchableOpacity>\n\n      {Platform.OS === 'android' ? (\n        isOpen ? (\n          <DateTimePicker\n            value={pickerDate}\n            mode=\"date\"\n            display=\"calendar\"\n            onChange={handleAndroidChange}\n          />\n        ) : null\n      ) : (\n        <Modal visible={isOpen} transparent animationType=\"slide\" onRequestClose={() => setOpen(false)}>\n          <View style={styles.backdrop}>\n            <View style={styles.sheet}>\n              <DateTimePicker value={pickerDate} mode=\"date\" display=\"inline\" onChange={handleIOSChange} />\n              <View style={styles.actions}>\n                <TouchableOpacity\n                  onPress={() => {\n                    onClear?.();\n                    setOpen(false);\n                  }}\n                  style={[styles.btn, styles.btnSecondary]}\n                  activeOpacity={0.9}\n                >\n                  <Text style={styles.btnSecondaryText}>{clearText}</Text>\n                </TouchableOpacity>\n                <TouchableOpacity\n                  onPress={() => {\n                    onApply?.(pickerDate);\n                    setOpen(false);\n                  }}\n                  style={[styles.btn, styles.btnPrimary]}\n                  activeOpacity={0.9}\n                >\n                  <Text style={styles.btnPrimaryText}>{applyText}</Text>\n                </TouchableOpacity>\n              </View>\n            </View>\n          </View>\n        </Modal>\n      )}\n    </View>\n  );\n}\n\nfunction formatDate(d: Date) {\n  const dd = String(d.getDate()).padStart(2, '0');\n  const mm = String(d.getMonth() + 1).padStart(2, '0');\n  const yy = d.getFullYear();\n  return `${dd}/${mm}/${yy}`;\n}\n\nconst styles = StyleSheet.create({\n  label: {\n    marginBottom: 6,\n    color: '#6B7280',\n    fontSize: 14,\n    fontWeight: '500',\n  },\n  required: {\n    color: '#FF0000',\n    fontSize: 14,\n    fontWeight: '600',\n  },\n  trigger: {\n    borderWidth: 1,\n    borderColor: '#D1D5DB',\n    borderRadius: 8,\n    backgroundColor: '#FFFFFF',\n    paddingVertical: 12,\n    paddingHorizontal: 14,\n    paddingRight: 44,\n    minHeight: 48,\n    justifyContent: 'center',\n  },\n  triggerText: {\n    color: '#111827',\n    fontSize: 16,\n  },\n  triggerDisabled: {\n    backgroundColor: '#F9FAFB',\n    borderColor: '#E5E7EB',\n  },\n  calendarIcon: {\n    position: 'absolute',\n    right: 12,\n    top: 0,\n    bottom: 0,\n    justifyContent: 'center',\n  },\n  backdrop: {\n    flex: 1,\n    backgroundColor: 'rgba(0,0,0,0.3)',\n    justifyContent: 'flex-end',\n  },\n  sheet: {\n    backgroundColor: '#FFF',\n    borderTopLeftRadius: 16,\n    borderTopRightRadius: 16,\n    padding: 16,\n  },\n  actions: {\n    marginTop: 12,\n    flexDirection: 'row',\n    gap: 8,\n  },\n  btn: {\n    flex: 1,\n    paddingVertical: 12,\n    borderRadius: 10,\n    alignItems: 'center',\n  },\n  btnSecondary: {\n    backgroundColor: '#6B7280',\n  },\n  btnSecondaryText: {\n    color: '#FFF',\n    fontWeight: '600',\n  },\n  btnPrimary: {\n    backgroundColor: '#1B418C',\n  },\n  btnPrimaryText: {\n    color: '#FFF',\n    fontWeight: '600',\n  },\n});\n\n\n","import React, { useMemo } from 'react';\nimport { StyleSheet, Text, View } from 'react-native';\nimport dayjs from 'dayjs';\nimport { CalendarProps } from './types';\nimport Header from './Header';\nimport Day from './Day';\n\nconst WEEKDAYS = ['Lun', 'Mar', 'Mié', 'Jue', 'Vie', 'Sáb', 'Dom'];\n\n/**\n * Calendar grid component that handles month rendering and day selection logic.\n */\nconst Calendar: React.FC<CalendarProps> = ({\n  currentDate,\n  startDate,\n  endDate,\n  minDate,\n  maxDate,\n  onSelectDate,\n  onMonthChange,\n}) => {\n  const days = useMemo(() => {\n    const startOfMonth = currentDate.startOf('month');\n    const endOfMonth = currentDate.endOf('month');\n    \n    // Adjust to start from Monday (ISO)\n    // dayjs().day() returns 0 (Sun) to 6 (Sat)\n    const dayOfWeek = startOfMonth.day();\n    const startDay = dayOfWeek === 0 ? 7 : dayOfWeek; // Sunday is 7\n    const daysBefore = startDay - 1;\n\n    const calendarDays = [];\n\n    // Days from previous month\n    for (let i = daysBefore; i > 0; i--) {\n      calendarDays.push({\n        date: startOfMonth.subtract(i, 'day'),\n        isCurrentMonth: false,\n      });\n    }\n\n    // Days of current month\n    const totalDaysInMonth = currentDate.daysInMonth();\n    for (let i = 1; i <= totalDaysInMonth; i++) {\n      calendarDays.push({\n        date: startOfMonth.date(i),\n        isCurrentMonth: true,\n      });\n    }\n\n    // Days from next month to complete 6 rows (42 days)\n    const remainingDays = 42 - calendarDays.length;\n    for (let i = 1; i <= remainingDays; i++) {\n      calendarDays.push({\n        date: endOfMonth.add(i, 'day'),\n        isCurrentMonth: false,\n      });\n    }\n\n    return calendarDays;\n  }, [currentDate]);\n\n  const handlePrevMonth = () => {\n    onMonthChange(currentDate.subtract(1, 'month'));\n  };\n\n  const handleNextMonth = () => {\n    onMonthChange(currentDate.add(1, 'month'));\n  };\n\n  return (\n    <View style={styles.container}>\n      <Header\n        currentDate={currentDate}\n        onPrevMonth={handlePrevMonth}\n        onNextMonth={handleNextMonth}\n      />\n      \n      <View style={styles.weekdays}>\n        {WEEKDAYS.map((day) => (\n          <Text key={day} style={styles.weekdayText}>\n            {day}\n          </Text>\n        ))}\n      </View>\n\n      <View style={styles.grid}>\n        {days.map(({ date, isCurrentMonth }, index) => {\n          const isSelected = (startDate && date.isSame(startDate, 'day')) || \n                             (endDate && date.isSame(endDate, 'day')) || false;\n          const isStart = startDate ? date.isSame(startDate, 'day') : false;\n          const isEnd = endDate ? date.isSame(endDate, 'day') : false;\n          const isInRange = startDate && endDate && date.isAfter(startDate, 'day') && date.isBefore(endDate, 'day') || false;\n          \n          const isDisabled = (minDate && date.isBefore(minDate, 'day')) || \n                             (maxDate && date.isAfter(maxDate, 'day')) || false;\n          const isToday = date.isSame(dayjs(), 'day');\n\n          return (\n            <Day\n              key={date.toISOString() + index}\n              date={date}\n              isCurrentMonth={isCurrentMonth}\n              isSelected={isSelected}\n              isStart={isStart}\n              isEnd={isEnd}\n              isInRange={isInRange}\n              isDisabled={isDisabled}\n              isToday={isToday}\n              onPress={onSelectDate}\n            />\n          );\n        })}\n      </View>\n    </View>\n  );\n};\n\nconst styles = StyleSheet.create({\n  container: {\n    paddingHorizontal: 16,\n    paddingBottom: 16,\n  },\n  weekdays: {\n    flexDirection: 'row',\n    marginTop: 10,\n    marginBottom: 8,\n  },\n  weekdayText: {\n    flex: 1,\n    textAlign: 'center',\n    fontSize: 13,\n    fontWeight: '500',\n    color: '#9CA3AF',\n    textTransform: 'capitalize',\n  },\n  grid: {\n    flexDirection: 'row',\n    flexWrap: 'wrap',\n  },\n});\n\nexport default React.memo(Calendar);\n","import React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport {\n  Modal,\n  Platform,\n  StyleSheet,\n  Text,\n  TouchableOpacity,\n  View,\n  ActivityIndicator,\n} from 'react-native';\nimport { CalendarIcon } from 'react-native-heroicons/outline';\nimport dayjs, { Dayjs } from 'dayjs';\nimport 'dayjs/locale/es';\nimport { DateRangePickerProps, DateRange } from './types';\nimport Calendar from './Calendar';\n\ntype QuickFilterType = 'UD' | 'Hoy' | 'US' | '1M' | '6M';\n\nconst QUICK_FILTERS: { label: string; value: QuickFilterType }[] = [\n  { label: 'U.Día', value: 'UD' },\n  { label: 'Hoy', value: 'Hoy' },\n  { label: 'U.Sem', value: 'US' },\n  { label: '1M', value: '1M' },\n  { label: '6M', value: '6M' },\n];\n\n/**\n * DateRangePicker component for selecting a start and end date.\n * Features:\n * - Start and end date selection with range validation.\n * - Navigable monthly calendar.\n * - Min/Max date support.\n * - Loading and disabled states.\n * - Responsive and accessible design.\n * \n * @param {DateRangePickerProps} props - The component props.\n */\nconst DateRangePicker: React.FC<DateRangePickerProps> = ({\n  label,\n  value,\n  onStartDateChange,\n  onEndDateChange,\n  onDateRangeChange,\n  onChange,\n  minDate,\n  maxDate,\n  disabled = false,\n  loading = false,\n  required = false,\n  locale = 'es',\n  format = 'DD/MM/YYYY',\n  applyText = 'Aplicar',\n  clearText = 'Limpiar',\n  onClear,\n  placeholder = 'Seleccionar rango',\n}) => {\n  const [isOpen, setIsOpen] = useState(false);\n  const [currentDate, setCurrentDate] = useState(dayjs());\n  const [activeQuickFilter, setActiveQuickFilter] = useState<QuickFilterType | null>(null);\n  \n  // Internal state for range during selection in modal\n  const [internalRange, setInternalRange] = useState<DateRange>({\n    startDate: value.startDate,\n    endDate: value.endDate,\n  });\n\n  // Set locale\n  useEffect(() => {\n    dayjs.locale(locale);\n  }, [locale]);\n\n  // Sync internal range when value prop changes or modal opens\n  useEffect(() => {\n    if (isOpen) {\n      setInternalRange({\n        startDate: value.startDate,\n        endDate: value.endDate,\n      });\n      setActiveQuickFilter(null); // Reset quick filter when opening modal\n      // Set current month to start date or today\n      setCurrentDate(value.startDate ? dayjs(value.startDate) : dayjs());\n    }\n  }, [value, isOpen]);\n\n  const handleSelectDate = useCallback((date: Dayjs) => {\n    const nativeDate = date.toDate();\n    setActiveQuickFilter(null); // Clear active filter on manual selection\n    \n    setInternalRange((prev) => {\n      // If no start date or both dates already selected, start a new range\n      if (!prev.startDate || (prev.startDate && prev.endDate)) {\n        return { startDate: nativeDate, endDate: null };\n      }\n\n      // If start date exists but no end date\n      if (prev.startDate && !prev.endDate) {\n        // If selected date is before start date, set it as new start date\n        if (date.isBefore(dayjs(prev.startDate), 'day')) {\n          return { startDate: nativeDate, endDate: null };\n        }\n        // Otherwise set as end date\n        return { ...prev, endDate: nativeDate };\n      }\n\n      return prev;\n    });\n  }, []);\n\n  const handleQuickFilterPress = (type: QuickFilterType) => {\n    let start: Dayjs = dayjs();\n    let end: Dayjs = dayjs();\n\n    switch (type) {\n      case 'UD':\n        start = dayjs().subtract(1, 'day');\n        end = dayjs().subtract(1, 'day');\n        break;\n      case 'Hoy':\n        start = dayjs();\n        end = dayjs();\n        break;\n      case 'US':\n        start = dayjs().subtract(6, 'day');\n        end = dayjs();\n        break;\n      case '1M':\n        start = dayjs().subtract(29, 'day');\n        end = dayjs();\n        break;\n      case '6M':\n        start = dayjs().subtract(179, 'day');\n        end = dayjs();\n        break;\n    }\n\n    setInternalRange({\n      startDate: start.startOf('day').toDate(),\n      endDate: end.endOf('day').toDate(),\n    });\n    setActiveQuickFilter(type);\n    setCurrentDate(start);\n  };\n\n  const handleApply = () => {\n    onChange(internalRange);\n    onDateRangeChange?.(internalRange);\n    onStartDateChange?.(internalRange.startDate);\n    onEndDateChange?.(internalRange.endDate);\n    setIsOpen(false);\n  };\n\n  const handleClear = () => {\n    const emptyRange = { startDate: null, endDate: null };\n    setInternalRange(emptyRange);\n    setActiveQuickFilter(null);\n    onChange(emptyRange);\n    onDateRangeChange?.(emptyRange);\n    onStartDateChange?.(null);\n    onEndDateChange?.(null);\n    onClear?.();\n    setIsOpen(false);\n  };\n\n  const displayValue = useMemo(() => {\n    if (!value.startDate) return placeholder;\n    const start = dayjs(value.startDate).format(format);\n    if (!value.endDate) return start;\n    const end = dayjs(value.endDate).format(format);\n    return `${start} - ${end}`;\n  }, [value, format, placeholder]);\n\n  const iconColor = useMemo(() => {\n    if (disabled) return '#D1D5DB';\n    return value.startDate ? '#6B7280' : '#9CA3AF';\n  }, [disabled, value.startDate]);\n\n  return (\n    <View style={styles.container}>\n      {label && (\n        <Text style={styles.label}>\n          {label}\n          {required && <Text style={styles.required}> *</Text>}\n        </Text>\n      )}\n\n      <TouchableOpacity\n        style={[styles.trigger, disabled && styles.triggerDisabled]}\n        onPress={() => !disabled && !loading && setIsOpen(true)}\n        disabled={disabled || loading}\n        activeOpacity={0.8}\n        accessibilityRole=\"button\"\n        accessibilityLabel={label || 'Seleccionar rango de fechas'}\n      >\n        <View style={styles.triggerContent}>\n          <Text style={[styles.triggerText, !value.startDate && styles.placeholderText]}>\n            {displayValue}\n          </Text>\n          {loading ? (\n            <ActivityIndicator size=\"small\" color=\"#1B418C\" />\n          ) : (\n            <CalendarIcon size={20} color={iconColor} />\n          )}\n        </View>\n      </TouchableOpacity>\n\n      <Modal\n        visible={isOpen}\n        transparent\n        animationType=\"slide\"\n        onRequestClose={() => setIsOpen(false)}\n      >\n        <View style={styles.backdrop}>\n          <View style={styles.sheet}>\n            <View style={styles.sheetHeader}>\n              <Text style={styles.sheetTitle}>Seleccionar Rango</Text>\n            </View>\n\n            <Calendar\n              currentDate={currentDate}\n              startDate={internalRange.startDate ? dayjs(internalRange.startDate) : null}\n              endDate={internalRange.endDate ? dayjs(internalRange.endDate) : null}\n              minDate={minDate ? dayjs(minDate) : undefined}\n              maxDate={maxDate ? dayjs(maxDate) : undefined}\n              onSelectDate={handleSelectDate}\n              onMonthChange={setCurrentDate}\n            />\n\n            <View style={styles.quickFiltersContainer}>\n              {QUICK_FILTERS.map((filter) => (\n                <TouchableOpacity\n                  key={filter.value}\n                  style={[\n                    styles.quickFilterBtn,\n                    activeQuickFilter === filter.value && styles.quickFilterBtnActive,\n                  ]}\n                  onPress={() => handleQuickFilterPress(filter.value)}\n                  activeOpacity={0.7}\n                  accessibilityRole=\"button\"\n                  accessibilityLabel={`Filtrar por ${filter.label}`}\n                  accessibilityState={{ selected: activeQuickFilter === filter.value }}\n                >\n                  <Text\n                    style={[\n                      styles.quickFilterText,\n                      activeQuickFilter === filter.value && styles.quickFilterTextActive,\n                    ]}\n                  >\n                    {filter.label}\n                  </Text>\n                </TouchableOpacity>\n              ))}\n            </View>\n\n            <View style={styles.actions}>\n              <TouchableOpacity\n                onPress={handleClear}\n                style={[styles.btn, styles.btnSecondary]}\n                activeOpacity={0.9}\n              >\n                <Text style={styles.btnSecondaryText}>{clearText}</Text>\n              </TouchableOpacity>\n              <TouchableOpacity\n                onPress={handleApply}\n                style={[styles.btn, styles.btnPrimary, !internalRange.startDate && styles.btnDisabled]}\n                activeOpacity={0.9}\n                disabled={!internalRange.startDate}\n              >\n                <Text style={styles.btnPrimaryText}>{applyText}</Text>\n              </TouchableOpacity>\n            </View>\n          </View>\n        </View>\n      </Modal>\n    </View>\n  );\n};\n\nconst styles = StyleSheet.create({\n  container: {\n    width: '100%',\n  },\n  label: {\n    marginBottom: 6,\n    color: '#6B7280',\n    fontSize: 14,\n    fontWeight: '500',\n  },\n  required: {\n    color: '#FF0000',\n    fontSize: 14,\n    fontWeight: '600',\n  },\n  trigger: {\n    borderWidth: 1,\n    borderColor: '#D1D5DB',\n    borderRadius: 8,\n    backgroundColor: '#FFFFFF',\n    paddingVertical: 12,\n    paddingHorizontal: 14,\n    minHeight: 48,\n    justifyContent: 'center',\n  },\n  triggerDisabled: {\n    backgroundColor: '#F9FAFB',\n    borderColor: '#E5E7EB',\n  },\n  triggerContent: {\n    flexDirection: 'row',\n    justifyContent: 'space-between',\n    alignItems: 'center',\n  },\n  triggerText: {\n    color: '#111827',\n    fontSize: 16,\n  },\n  placeholderText: {\n    color: '#9CA3AF',\n  },\n  backdrop: {\n    flex: 1,\n    backgroundColor: 'rgba(0,0,0,0.5)',\n    justifyContent: 'flex-end',\n  },\n  sheet: {\n    backgroundColor: '#FFF',\n    borderTopLeftRadius: 24,\n    borderTopRightRadius: 24,\n    paddingBottom: Platform.OS === 'ios' ? 40 : 24,\n    maxHeight: '90%',\n  },\n  sheetHeader: {\n    paddingVertical: 20,\n    paddingHorizontal: 16,\n    alignItems: 'center',\n  },\n  sheetTitle: {\n    fontSize: 18,\n    fontWeight: '700',\n    color: '#111827',\n  },\n  quickFiltersContainer: {\n    flexDirection: 'row',\n    justifyContent: 'space-between',\n    paddingHorizontal: 20,\n    paddingVertical: 12,\n    gap: 8,\n  },\n  quickFilterBtn: {\n    flex: 1,\n    paddingVertical: 10,\n    borderRadius: 8,\n    backgroundColor: '#F3F4F6',\n    alignItems: 'center',\n    justifyContent: 'center',\n  },\n  quickFilterBtnActive: {\n    backgroundColor: '#1B418C',\n  },\n  quickFilterText: {\n    fontSize: 13,\n    fontWeight: '700',\n    color: '#4B5563',\n  },\n  quickFilterTextActive: {\n    color: '#FFFFFF',\n  },\n  actions: {\n    flexDirection: 'row',\n    paddingHorizontal: 20,\n    paddingTop: 8,\n    gap: 16,\n  },\n  btn: {\n    flex: 1,\n    paddingVertical: 16,\n    borderRadius: 12,\n    alignItems: 'center',\n    justifyContent: 'center',\n  },\n  btnSecondary: {\n    backgroundColor: '#F3F4F6',\n  },\n  btnSecondaryText: {\n    color: '#4B5563',\n    fontWeight: '600',\n    fontSize: 16,\n  },\n  btnPrimary: {\n    backgroundColor: '#1B418C',\n  },\n  btnPrimaryText: {\n    color: '#FFF',\n    fontWeight: '600',\n    fontSize: 16,\n  },\n  btnDisabled: {\n    backgroundColor: '#D1D5DB',\n  },\n});\n\nexport default React.memo(DateRangePicker);\n","import React from \"react\";\nimport { StyleSheet, Text, TouchableOpacity, View } from \"react-native\";\nimport { DayProps } from \"./types\";\n\n/**\n * Individual day component for the calendar grid\n */\nconst Day: React.FC<DayProps> = ({\n  date,\n  isCurrentMonth,\n  isSelected,\n  isStart,\n  isEnd,\n  isInRange,\n  isDisabled,\n  isToday,\n  onPress,\n}) => {\n  const containerStyles = [styles.container];\n\n  const selectionStyles = [styles.selection, isSelected && styles.selected];\n\n  const textStyles = [\n    styles.text,\n    !isCurrentMonth && styles.notCurrentMonthText,\n    isSelected && styles.selectedText,\n    isDisabled && styles.disabledText,\n    isToday && !isSelected && styles.todayText,\n  ];\n\n  return (\n    <TouchableOpacity\n      style={containerStyles}\n      onPress={() => !isDisabled && onPress(date)}\n      disabled={isDisabled}\n      activeOpacity={0.7}\n      accessibilityRole=\"button\"\n      accessibilityLabel={date.format(\"D MMMM YYYY\")}\n      accessibilityState={{ selected: isSelected, disabled: isDisabled }}\n    >\n      {/* Background for range highlighting */}\n      {(isInRange || isStart || isEnd) && (\n        <View style={styles.rangeBackgroundContainer} pointerEvents=\"none\">\n          {isInRange && <View style={styles.rangeBackground} />}\n          {isStart && (\n            <View style={[styles.rangeBackground, styles.rangeStartFill]} />\n          )}\n          {isEnd && (\n            <View style={[styles.rangeBackground, styles.rangeEndFill]} />\n          )}\n        </View>\n      )}\n\n      <View style={selectionStyles} pointerEvents=\"none\">\n        {isToday && !isSelected && <View style={styles.todayDot} />}\n        <Text style={textStyles}>{date.date()}</Text>\n      </View>\n    </TouchableOpacity>\n  );\n};\n\nconst styles = StyleSheet.create({\n  container: {\n    width: \"14.28%\",\n    aspectRatio: 1,\n    justifyContent: \"center\",\n    alignItems: \"center\",\n    position: \"relative\",\n    padding: 0,\n    margin: 0,\n  },\n  rangeBackgroundContainer: {\n    position: \"absolute\",\n    left: 0,\n    right: 0,\n    top: 0,\n    bottom: 0,\n    zIndex: -1,\n  },\n  rangeBackground: {\n    position: \"absolute\",\n    left: 0,\n    right: 0,\n    top: \"50%\",\n    height: 36,\n    marginTop: -13,\n    backgroundColor: \"#EBF0F9\",\n  },\n  rangeStartFill: {\n    left: \"50%\",\n  },\n  rangeEndFill: {\n    right: \"50%\",\n  },\n  selection: {\n    width: 36,\n    height: 36,\n    justifyContent: \"center\",\n    alignItems: \"center\",\n    borderRadius: 18,\n    overflow: \"hidden\",\n  },\n  selected: {\n    backgroundColor: \"#1B418C\",\n    borderRadius: 18, // Explicitly repeat to avoid some Android rendering issues\n  },\n  text: {\n    fontSize: 15,\n    color: \"#111827\",\n    fontWeight: \"500\",\n    textAlign: \"center\",\n  },\n  notCurrentMonthText: {\n    color: \"#D1D5DB\",\n  },\n  todayText: {\n    color: \"#1B418C\",\n    fontWeight: \"bold\",\n  },\n  todayDot: {\n    position: \"absolute\",\n    bottom: 2,\n    width: 4,\n    height: 4,\n    borderRadius: 2,\n    backgroundColor: \"#1B418C\",\n  },\n  selectedText: {\n    color: \"#FFFFFF\",\n    fontWeight: \"600\",\n  },\n  disabledText: {\n    color: \"#E5E7EB\",\n  },\n});\n\nexport default React.memo(Day);\n","import React from 'react';\nimport { StyleSheet, Text, TouchableOpacity, View } from 'react-native';\nimport { ChevronLeftIcon, ChevronRightIcon } from 'react-native-heroicons/outline';\nimport { Dayjs } from 'dayjs';\n\ninterface HeaderProps {\n  currentDate: Dayjs;\n  onPrevMonth: () => void;\n  onNextMonth: () => void;\n}\n\nconst Header: React.FC<HeaderProps> = ({ currentDate, onPrevMonth, onNextMonth }) => {\n  return (\n    <View style={styles.container}>\n      <TouchableOpacity\n        onPress={onPrevMonth}\n        style={styles.button}\n        accessibilityLabel=\"Mes anterior\"\n        accessibilityRole=\"button\"\n      >\n        <ChevronLeftIcon size={24} color=\"#6B7280\" />\n      </TouchableOpacity>\n\n      <View style={styles.titleContainer}>\n        <Text style={styles.title} accessibilityRole=\"header\">\n          {currentDate.format('MMMM YYYY').charAt(0).toUpperCase() +\n            currentDate.format('MMMM YYYY').slice(1)}\n        </Text>\n      </View>\n\n      <TouchableOpacity\n        onPress={onNextMonth}\n        style={styles.button}\n        accessibilityLabel=\"Mes siguiente\"\n        accessibilityRole=\"button\"\n      >\n        <ChevronRightIcon size={24} color=\"#6B7280\" />\n      </TouchableOpacity>\n    </View>\n  );\n};\n\nconst styles = StyleSheet.create({\n  container: {\n    flexDirection: 'row',\n    alignItems: 'center',\n    justifyContent: 'space-between',\n    paddingVertical: 10,\n    paddingHorizontal: 5,\n  },\n  titleContainer: {\n    flex: 1,\n    alignItems: 'center',\n  },\n  title: {\n    fontSize: 16,\n    fontWeight: '600',\n    color: '#111827',\n  },\n  button: {\n    padding: 8,\n    borderRadius: 20,\n  },\n});\n\nexport default React.memo(Header);\n","export { default as DateRangePicker } from './DateRangePicker';\nexport * from './types';\n","import React from 'react';\nimport { View, Text, StyleSheet, ViewStyle, TextStyle } from 'react-native';\n\nexport interface FieldGroupProps {\n  label?: string;\n  required?: boolean;\n  errorText?: string | null;\n  children: React.ReactNode;\n  style?: ViewStyle;\n  labelStyle?: TextStyle;\n}\n\nexport function FieldGroup({ label, required, errorText, children, style, labelStyle }: FieldGroupProps) {\n  return (\n    <View style={[styles.group, style]}> \n      {label ? (\n        <Text style={[styles.label, labelStyle]}>\n          {label} {required ? <Text style={styles.required}>*</Text> : null}\n        </Text>\n      ) : null}\n      {children}\n      {!!errorText && <Text style={styles.error}>{errorText}</Text>}\n    </View>\n  );\n}\n\nconst styles = StyleSheet.create({\n  group: {\n    marginBottom: 12,\n  },\n  label: {\n    fontSize: 14,\n    color: '#111827',\n    marginBottom: 8,\n    fontWeight: '600',\n  },\n  required: {\n    color: '#FF1D4B',\n  },\n  error: {\n    color: '#FF1D4B',\n    fontSize: 14,\n    marginTop: 4,\n  },\n});\n\nexport default FieldGroup;\n\n\n","import { FunctionComponent } from 'react';\nimport { View, Text, StyleSheet, TouchableOpacity } from 'react-native';\n\ninterface FolderIconButtonProps {\n  label: string;\n  onPress: () => void;\n  disabled?: boolean;\n  size?: 'small' | 'medium' | 'large';\n}\n\nexport const FolderIconButton: FunctionComponent<FolderIconButtonProps> = ({\n  label,\n  onPress,\n  disabled = false,\n  size = 'medium',\n}) => {\n  const handlePress = () => {\n    if (!disabled) {\n      onPress();\n    }\n  };\n\n  const getSizeStyles = () => {\n    switch (size) {\n      case 'small':\n        return {\n          container: styles.smallContainer,\n          folder: styles.smallFolder,\n          tab: styles.smallTab,\n          label: styles.smallLabel,\n        };\n      case 'large':\n        return {\n          container: styles.largeContainer,\n          folder: styles.largeFolder,\n          tab: styles.largeTab,\n          label: styles.largeLabel,\n        };\n      default:\n        return {\n          container: styles.mediumContainer,\n          folder: styles.mediumFolder,\n          tab: styles.mediumTab,\n          label: styles.mediumLabel,\n        };\n    }\n  };\n\n  const sizeStyles = getSizeStyles();\n\n  return (\n    <TouchableOpacity\n      onPress={handlePress}\n      disabled={disabled}\n      style={[styles.button, sizeStyles.container, disabled && styles.disabled]}\n      activeOpacity={1}\n    >\n      <View style={[styles.folderContainer, sizeStyles.folder]}>\n        {/* Parte trasera de la carpeta */}\n        <View\n          style={[\n            styles.folderBack,\n            sizeStyles.folder,\n            {\n              backgroundColor: disabled ? '#9CA3AF' : '#3B82F6',\n              shadowColor: disabled ? '#9CA3AF' : '#3B82F6',\n            },\n          ]}\n        />\n\n        {/* Pestaña de la carpeta */}\n        <View\n          style={[\n            styles.folderTab,\n            sizeStyles.tab,\n            {\n              backgroundColor: disabled ? '#6B7280' : '#2563EB',\n              shadowColor: disabled ? '#6B7280' : '#2563EB',\n            },\n          ]}\n        />\n      </View>\n\n      <Text\n        style={[\n          styles.label,\n          sizeStyles.label,\n          disabled && styles.disabledLabel,\n        ]}\n      >\n        {label}\n      </Text>\n    </TouchableOpacity>\n  );\n};\n\nconst styles = StyleSheet.create({\n  button: {\n    flexDirection: 'column',\n    alignItems: 'center',\n    justifyContent: 'center',\n    borderRadius: 8,\n  },\n  disabled: {\n    opacity: 0.5,\n  },\n\n  // Tamaños del contenedor\n  smallContainer: {\n    padding: 8,\n    gap: 4,\n  },\n  mediumContainer: {\n    padding: 12,\n    gap: 8,\n  },\n  largeContainer: {\n    padding: 12,\n    gap: 12,\n  },\n\n  // Contenedor de la carpeta\n  folderContainer: {\n    position: 'relative',\n    alignItems: 'center',\n    justifyContent: 'center',\n  },\n\n  // Tamaños de la carpeta\n  smallFolder: {\n    width: 32,\n    height: 24,\n  },\n  mediumFolder: {\n    width: 48,\n    height: 36,\n  },\n  largeFolder: {\n    width: 64,\n    height: 48,\n  },\n\n  // Parte trasera de la carpeta\n  folderBack: {\n    position: 'absolute',\n    borderRadius: 6,\n    shadowOffset: {\n      width: 0,\n      height: 4,\n    },\n    shadowOpacity: 0.45,\n    shadowRadius: 3,\n    elevation: 6\n  },\n\n  // Pestaña de la carpeta\n  folderTab: {\n    position: 'absolute',\n    top: -6,\n    left: 0,\n    borderTopLeftRadius: 6,\n    borderTopRightRadius: 6,\n    shadowOffset: {\n      width: 0,\n      height: 2,\n    },\n    shadowOpacity: 0.15,\n    shadowRadius: 3,\n    elevation: 3,\n  },\n\n  // Tamaños de la pestaña\n  smallTab: {\n    width: 16,\n    height: 6,\n  },\n  mediumTab: {\n    width: 24,\n    height: 9,\n  },\n  largeTab: {\n    width: 32,\n    height: 12,\n  },\n\n  // Estilos del label\n  label: {\n    textAlign: 'center',\n    fontWeight: '500',\n    color: '#374151',\n  },\n  disabledLabel: {\n    color: '#9CA3AF',\n  },\n\n  // Tamaños del label\n  smallLabel: {\n    fontSize: 10,\n    lineHeight: 12,\n  },\n  mediumLabel: {\n    fontSize: 14,\n    lineHeight: 14,\n  },\n  largeLabel: {\n    fontSize: 14,\n    lineHeight: 16,\n  },\n});\n","import React from 'react';\nimport { View, Text, StyleSheet, ViewStyle, TextStyle } from 'react-native';\n\nexport interface FormBoxProps {\n  title?: string;\n  children: React.ReactNode;\n  style?: ViewStyle;\n  titleStyle?: TextStyle;\n}\n\nexport function FormBox({ title, children, style, titleStyle }: FormBoxProps) {\n  return (\n    <View style={[styles.box, style]}> \n      {title ? <Text style={[styles.title, titleStyle]}>{title}</Text> : null}\n      {children}\n    </View>\n  );\n}\n\nconst styles = StyleSheet.create({\n  box: {\n    backgroundColor: '#F9FAFB',\n    borderColor: '#E5E7EB',\n    borderWidth: 1,\n    borderRadius: 12,\n    padding: 12,\n  },\n  title: {\n    fontSize: 14,\n    fontWeight: '700',\n    color: '#111827',\n    marginBottom: 8,\n  },\n});\n\nexport default FormBox;\n\n\n","import React from 'react';\nimport {\n  TouchableOpacity,\n  View,\n  Text,\n  StyleSheet,\n  ViewStyle,\n  TextStyle,\n  DimensionValue,\n} from 'react-native';\n\ninterface IconProps {\n  color?: string;\n  size?: number;\n}\n\nexport interface IconCardButtonProps {\n  /**\n   * Icono a mostrar en el botón (componente React)\n   */\n  icon: React.ReactNode;\n  /**\n   * Texto a mostrar debajo del icono\n   */\n  title: string;\n  /**\n   * Estado de conexión que determina si el botón está habilitado\n   */\n  isConnected?: boolean | undefined;\n  /**\n   * Deshabilita el botón independientemente del estado de conexión.\n   * Útil para módulos/remotes no disponibles.\n   */\n  disabled?: boolean;\n  /**\n   * Función que se ejecuta cuando se presiona el botón\n   */\n  onPress: () => void;\n  /**\n   * Función que se ejecuta cuando se presiona el botón en modo offline\n   */\n  onOfflinePress?: () => void;\n  /**\n   * Estilos personalizados para el contenedor\n   */\n  style?: ViewStyle;\n  /**\n   * Estilos personalizados para el texto\n   */\n  textStyle?: TextStyle;\n  /**\n   * Ancho del botón (por defecto: 100%)\n   */\n  width?: DimensionValue;\n  /**\n   * Altura del botón (por defecto: 160)\n   */\n  height?: number;\n}\n\nexport function IconCardButton({\n  icon,\n  title,\n  isConnected = true,\n  disabled = false,\n  onPress,\n  onOfflinePress,\n  style,\n  textStyle,\n  width = '100%',\n  height = 160,\n}: IconCardButtonProps) {\n  const handlePress = () => {\n    if (disabled) return;\n    if (isConnected === true) {\n      onPress();\n    } else if (onOfflinePress) {\n      onOfflinePress();\n    }\n  };\n\n  const isEffectivelyDisabled = disabled || (!isConnected && !onOfflinePress);\n\n  const containerStyle = [\n    styles.container,\n    {\n      width,\n      height,\n      backgroundColor: isEffectivelyDisabled ? '#F3F4F6' : '#FFFFFF',\n      borderColor: isEffectivelyDisabled ? '#E5E7EB' : '#D1D5DB',\n      opacity: isEffectivelyDisabled ? 0.55 : 1,\n    },\n    style,\n  ];\n\n  const textColor = isEffectivelyDisabled ? '#9CA3AF' : '#7A7A85';\n  const iconColor = isEffectivelyDisabled ? '#9CA3AF' : '#7A7A85';\n\n  // Render icon according to the value type\n  const iconNode = (() => {\n    // If it's a valid React element, try to inject color/size if supported\n    if (React.isValidElement(icon)) {\n      return React.cloneElement(icon as React.ReactElement<IconProps>, {\n        color: iconColor,\n        size: 40,\n      } as IconProps);\n    }\n\n    // If a plain string (emoji or glyph), wrap in Text to satisfy RN requirements\n    if (typeof icon === 'string' || typeof icon === 'number') {\n      return (\n        <Text style={[styles.iconText, { color: iconColor }]}>\n          {icon}\n        </Text>\n      );\n    }\n\n    // Fallback: render whatever it is\n    return icon as React.ReactNode;\n  })();\n\n  return (\n    <TouchableOpacity\n      style={containerStyle}\n      onPress={handlePress}\n      disabled={isEffectivelyDisabled}\n      activeOpacity={isEffectivelyDisabled ? 1 : 0.7}\n    >\n      <View style={styles.content}>\n        <View style={styles.iconContainer}>\n          {iconNode}\n        </View>\n        <Text\n          style={[\n            styles.title,\n            { color: textColor },\n            textStyle,\n          ]}\n        >\n          {title}\n        </Text>\n      </View>\n    </TouchableOpacity>\n  );\n}\n\nconst styles = StyleSheet.create({\n  container: {\n    borderWidth: 1,\n    borderRadius: 8,\n    justifyContent: 'center',\n    alignItems: 'center',\n    padding: 16,\n  },\n  content: {\n    flex: 1,\n    justifyContent: 'center',\n    alignItems: 'center',\n  },\n  iconContainer: {\n    justifyContent: 'center',\n    alignItems: 'center',\n    marginBottom: 8,\n  },\n  iconText: {\n    fontSize: 40,\n    textAlign: 'center',\n  },\n  title: {\n    fontSize: 16,\n    fontWeight: '600',\n    textAlign: 'center',\n  },\n});\n\nexport default IconCardButton;\n","// Componentes exportados\nexport { Breadcrumb } from './breadcrumb';\n// Nota: el tipo BreadcrumbItem se exporta desde hooks/BreadcrumbContext para evitar duplicidad\nexport { BreadcrumbProvider } from './BreadcrumbProvider';\nexport { BreadcrumbProvider as BreadcrumbRouteProvider } from './BreadcrumbProvider';\n\nexport { FolderIconButton } from './folder-icon-button';\n\nexport { IconCardButton } from './icon-card-button';\nexport type { IconCardButtonProps } from './icon-card-button';\n\n\nexport { NetworkIndicator } from './network-indicator';\nexport type { NetworkState } from './network-indicator';\n\nexport { ODSWidget } from './ods-widget';\n\nexport { default as StatusButton } from './status-button';\nexport { default as Tag } from './tag';\n\n// UiMobile placeholder eliminado del bundle público\n\n// Modals\nexport { default as ConfirmationModal } from './confirmation-modal';\nexport type { ConfirmationModalProps } from './confirmation-modal';\n\nexport { default as SkeletonLoader } from './skeleton-loader';\nexport type { SkeletonLoaderProps } from './skeleton-loader';\n\nexport { default as Select, MenuItem } from './select';\nexport type { SelectProps, MenuItemProps } from './select';\n\nexport { default as SearchableSelect } from './searchable-select';\nexport type { SearchableSelectProps, SearchableSelectOption } from './searchable-select';\n\nexport { default as RadioGroup } from './radio-group';\nexport type { RadioGroupProps, RadioOption, RadioValue } from './radio-group';\n\nexport { default as DatePicker } from './date-picker';\nexport type { DatePickerProps } from './date-picker';\nexport { DateRangePicker } from './date-range-picker';\nexport type { DateRangePickerProps, DateRange } from './date-range-picker';\nexport { default as TimePicker } from './time-picker';\nexport type { TimePickerProps } from './time-picker';\n\n// Inputs\nexport { default as NumericField } from './numeric-field';\nexport type { NumericFieldProps } from './numeric-field';\n\nexport { default as SearchInput } from './search-input';\nexport type { SearchInputProps } from './search-input';\n\nexport { default as LoadingSpinner } from './loading-spinner';\nexport type { LoadingSpinnerProps } from './loading-spinner';\n\n// Form primitives\nexport { FormBox } from './form-box';\nexport type { FormBoxProps } from './form-box';\nexport { FieldGroup } from './field-group';\nexport type { FieldGroupProps } from './field-group';\n// Data display\nexport { StatCard } from './stat-card';\nexport type { StatCardProps } from './stat-card';\n\n// Summary\nexport { default as SummaryTable } from './summary-table';\nexport type { SummaryTableProps, SummaryItem } from './summary-table';\n\n// Lists\nexport { default as MobileTable } from './mobile-table';\nexport type { MobileTableProps } from './mobile-table';\n\n// Progress\nexport { default as ProgressBar } from './progress-bar';\nexport type { ProgressBarProps } from './progress-bar';\n\n// Inputs extra\nexport { default as Checkbox } from './checkbox';\nexport type { CheckboxProps } from './checkbox';\n\n","import React from 'react';\nimport { ActivityIndicator, StyleSheet, View, ViewStyle } from 'react-native';\n\nexport interface LoadingSpinnerProps {\n  size?: 'small' | 'large' | number;\n  color?: string;\n  style?: ViewStyle;\n}\n\nexport default function LoadingSpinner({ size = 'small', color = '#6B7280', style }: LoadingSpinnerProps) {\n  return (\n    <View style={[styles.container, style]}>\n      <ActivityIndicator size={size} color={color} />\n    </View>\n  );\n}\n\nconst styles = StyleSheet.create({\n  container: {\n    alignItems: 'center',\n    justifyContent: 'center',\n    paddingVertical: 12,\n  },\n});\n\n\n","import React, { memo, useMemo } from 'react';\nimport { FlatList, ListRenderItemInfo, StyleSheet, Text, TouchableOpacity, View, ViewStyle, TextStyle, StyleProp } from 'react-native';\nimport SummaryTable, { SummaryItem } from './summary-table';\n\nexport interface CardAction {\n  key: string;\n  label?: string;\n  icon?: React.ReactNode;\n  onPress: () => void;\n  backgroundColor?: string;\n  textColor?: string;\n  borderColor?: string;\n  showLabel?: boolean;\n}\n\nexport interface MobileTableProps {\n  data: Array<Record<string, any>>;\n  titleKey?: string;\n  onRowClick?: (item: Record<string, any>) => void;\n  onEdit?: (item: Record<string, any>) => void;\n  hasActions?: boolean;\n  cardType?: string;\n  accentColor?: string;\n  headerComponent?: React.ReactNode;\n  footerComponent?: React.ReactNode;\n  contentContainerStyle?: StyleProp<ViewStyle>;\n  ListEmptyComponent?: React.ReactNode;\n  style?: StyleProp<ViewStyle>;\n  scrollEnabled?: boolean;\n  getCardTitle?: (item: Record<string, any>) => string | undefined;\n  getCardSubtitle?: (item: Record<string, any>) => string | undefined;\n  isItemSelected?: (item: Record<string, any>) => boolean;\n  getActions?: (item: Record<string, any>) => CardAction[] | undefined;\n  onScroll?: (event: any) => void;\n  onScrollBeginDrag?: (event: any) => void;\n  stickyHeaderIndices?: number[];\n}\n\nfunction toSummaryItems(item: Record<string, any>, titleKey: string): { title: string; items: SummaryItem[] } {\n  const entries = Object.entries(item);\n  const title = (item[titleKey] ?? '').toString();\n  const items: SummaryItem[] = entries\n    .filter(([k, value]) => {\n      if (k === titleKey || k === 'id' || k === 'raw') {\n        return false;\n      }\n\n      return typeof value !== 'object' || React.isValidElement(value);\n    })\n    .map(([name, value]) => ({\n      name,\n      value: React.isValidElement(value) ? value : String(value ?? ''),\n    }));\n  return { title, items };\n}\n\ntype CardProps = {\n  item: Record<string, any>;\n  titleKey: string;\n  accentColor?: string;\n  hasActions?: boolean;\n  onPress?: () => void;\n  onEdit?: () => void;\n  cardStyle?: ViewStyle;\n  titleStyle?: TextStyle;\n  actions?: CardAction[];\n};\n\nconst Card = memo(function Card({\n  item,\n  titleKey,\n  accentColor,\n  onPress,\n  onEdit,\n  hasActions,\n  cardStyle,\n  titleStyle,\n  actions,\n}: CardProps) {\n  const { title, items } = useMemo(() => toSummaryItems(item, titleKey), [item, titleKey]);\n  const resolvedActions = actions?.length ? actions : undefined;\n  return (\n    <TouchableOpacity activeOpacity={0.9} onPress={onPress} style={[styles.card, cardStyle]}>\n      <View style={styles.header}>\n        <Text style={[styles.title, titleStyle]} numberOfLines={1}>{title}</Text>\n        {resolvedActions ? (\n          <View style={styles.actionsRow}>\n            {resolvedActions.map((action) => (\n              <TouchableOpacity\n                key={action.key}\n                onPress={action.onPress}\n                activeOpacity={0.85}\n                style={[\n                  styles.actionBtn,\n                  action.backgroundColor ? { backgroundColor: action.backgroundColor } : undefined,\n                  action.borderColor ? { borderColor: action.borderColor, borderWidth: 1 } : undefined,\n                ]}\n                accessibilityRole=\"button\"\n                accessibilityLabel={action.label ?? 'Acción'}\n              >\n                {action.icon ? action.icon : null}\n                {action.label && action.showLabel !== false ? (\n                  <Text style={[styles.actionText, action.textColor ? { color: action.textColor } : undefined]}>\n                    {action.label}\n                  </Text>\n                ) : null}\n              </TouchableOpacity>\n            ))}\n          </View>\n        ) : hasActions && onEdit ? (\n          <TouchableOpacity onPress={onEdit} activeOpacity={0.85} style={styles.editBtn}>\n            <Text style={[styles.editText, { color: accentColor ?? '#1B418C' }]}>Editar</Text>\n          </TouchableOpacity>\n        ) : null}\n      </View>\n      <SummaryTable items={items} />\n    </TouchableOpacity>\n  );\n});\n\nexport default function MobileTable({\n  data,\n  titleKey = 'Campo',\n  onRowClick,\n  onEdit,\n  hasActions,\n  accentColor,\n  headerComponent,\n  footerComponent,\n  contentContainerStyle,\n  ListEmptyComponent,\n  style,\n  scrollEnabled = true,\n  getCardTitle: _getCardTitle,\n  getCardSubtitle: _getCardSubtitle,\n  isItemSelected,\n  getActions,\n  onScroll,\n  onScrollBeginDrag,\n  stickyHeaderIndices,\n}: MobileTableProps) {\n  const renderItem = ({ item }: ListRenderItemInfo<Record<string, any>>) => {\n    const selected = isItemSelected ? isItemSelected(item) : false;\n    const actions = getActions?.(item);\n    return (\n      <Card\n        item={item}\n        titleKey={titleKey}\n        accentColor={accentColor}\n        hasActions={hasActions}\n        onPress={onRowClick ? () => onRowClick(item) : undefined}\n        onEdit={onEdit ? () => onEdit(item) : undefined}\n        cardStyle={selected ? styles.selectedCard : undefined}\n        titleStyle={selected ? styles.selectedTitle : undefined}\n        actions={actions}\n      />\n    );\n  };\n\n  return (\n    <FlatList\n      data={data}\n      keyExtractor={(it, idx) => String((it as any).id ?? idx)}\n      renderItem={renderItem}\n      ItemSeparatorComponent={() => <View style={styles.sep} />}\n      contentContainerStyle={[styles.container, contentContainerStyle]}\n      ListHeaderComponent={headerComponent as any}\n      ListFooterComponent={footerComponent as any}\n      ListEmptyComponent={ListEmptyComponent as any}\n      style={style}\n      nestedScrollEnabled\n      scrollEnabled={scrollEnabled}\n      keyboardShouldPersistTaps=\"handled\"\n      contentInsetAdjustmentBehavior=\"automatic\"\n      onScroll={onScroll}\n      onScrollBeginDrag={onScrollBeginDrag}\n      stickyHeaderIndices={stickyHeaderIndices}\n    />\n  );\n}\n\nconst styles = StyleSheet.create({\n  container: {\n    paddingVertical: 8,\n    paddingHorizontal: 12,\n    rowGap: 24 as any,\n    backgroundColor: '#f9fafb',\n  },\n  sep: {\n    height: 24,\n  },\n  card: {\n    width: '100%',\n  },\n  header: {\n    paddingHorizontal: 4,\n    paddingVertical: 6,\n    flexDirection: 'row',\n    alignItems: 'center',\n    justifyContent: 'space-between',\n    marginBottom: 12,\n  },\n  title: {\n    fontSize: 18,\n    fontWeight: '700',\n    color: '#111827',\n    flex: 1,\n    marginRight: 12,\n  },\n  editBtn: {\n    paddingHorizontal: 12,\n    paddingVertical: 6,\n    borderRadius: 8,\n    backgroundColor: '#F3F4F6',\n  },\n  editText: {\n    fontWeight: '600',\n  },\n  actionsRow: {\n    flexDirection: 'row',\n    alignItems: 'center',\n    gap: 8,\n  },\n  actionBtn: {\n    paddingHorizontal: 10,\n    paddingVertical: 6,\n    borderRadius: 999,\n    backgroundColor: '#EFF6FF',\n    flexDirection: 'row',\n    alignItems: 'center',\n    justifyContent: 'center',\n    minWidth: 36,\n    minHeight: 36,\n  },\n  actionText: {\n    fontWeight: '600',\n    color: '#1D4ED8',\n  },\n  selectedCard: {\n    backgroundColor: '#DBEAFE',\n    borderColor: '#3B82F6',\n    borderWidth: 2,\n    borderRadius: 12,\n  },\n  selectedTitle: {\n    color: '#1D4ED8',\n  },\n});\n\n","import { View, Text, StyleSheet } from 'react-native';\nimport { useNetworkStatus } from '../hooks/useNetworkStatus';\n\nimport { ExclamationTriangleIcon, QuestionMarkCircleIcon, SignalIcon, WifiIcon } from \"react-native-heroicons/outline\";\n\nexport type NetworkStatus = 'wifi' | 'cellular' | 'none' | 'unknown';\n\nexport interface NetworkState {\n  status: NetworkStatus;\n  isConnected: boolean;\n}\n\nexport function NetworkIndicator() {\n  const { status, isConnected } = useNetworkStatus();\n\n  const getNetworkInfo = (status: NetworkStatus, isConnected: boolean) => {\n    if (!isConnected || status === 'none') {\n      return {\n        icon: <ExclamationTriangleIcon size={16} color=\"#F87171\" />,\n        text: 'Sin conexión',\n        containerStyle: styles.containerDisconnected,\n        textStyle: styles.textDisconnected,\n      };\n    }\n\n    switch (status) {\n      case 'wifi':\n        return {\n          icon: <WifiIcon size={16} color=\"#4ADE80\" />,\n          text: 'WiFi',\n          containerStyle: styles.containerWifi,\n          textStyle: styles.textWifi,\n        };\n      case 'cellular':\n        return {\n          icon: <SignalIcon size={16} color=\"#60A5FA\" />,\n          text: 'Datos móviles',\n          containerStyle: styles.containerCellular,\n          textStyle: styles.textCellular,\n        };\n      case 'unknown':\n      default:\n        return {\n          icon: <QuestionMarkCircleIcon size={16} color=\"#6B7280\" />,\n          text: 'Desconocido',\n          containerStyle: styles.containerUnknown,\n          textStyle: styles.textUnknown,\n        };\n    }\n  };\n\n  const networkInfo = getNetworkInfo(status, isConnected);\n\n  return (\n    <View style={[styles.container, networkInfo.containerStyle]}>\n      {networkInfo.icon}\n      <Text style={[styles.text, networkInfo.textStyle]}>{networkInfo.text}</Text>\n    </View>\n  );\n};\n\nconst styles = StyleSheet.create({\n  container: {\n    flexDirection: 'row',\n    alignItems: 'center',\n    gap: 6, // equivalent to gap-1.5 (1.5 * 4px = 6px)\n    paddingHorizontal: 8, // equivalent to px-2 (2 * 4px = 8px)\n    paddingVertical: 4, // equivalent to py-1 (1 * 4px = 4px)\n    borderRadius: 9999, // equivalent to rounded-full\n    fontSize: 14, // equivalent to text-xs\n    fontWeight: '500', // equivalent to font-medium\n  },\n  text: {\n    fontSize: 14,\n    fontWeight: '500',\n  },\n  // Disconnected state\n  containerDisconnected: {\n    backgroundColor: '#EF444433', // equivalent to bg-red-500/20\n  },\n  textDisconnected: {\n    color: '#F87171', // equivalent to text-red-400\n  },\n  // WiFi state\n  containerWifi: {\n    backgroundColor: '#22C55E33', // equivalent to bg-green-500/20\n  },\n  textWifi: {\n    color: '#4ADE80', // equivalent to text-green-400\n  },\n  // Cellular state\n  containerCellular: {\n    backgroundColor: '#3B82F633', // equivalent to bg-blue-500/20\n  },\n  textCellular: {\n    color: '#60A5FA', // equivalent to text-blue-400\n  },\n  // Unknown state\n  containerUnknown: {\n    backgroundColor: '#6B728033', // equivalent to bg-gray-500/20\n  },\n  textUnknown: {\n    color: '#9CA3AF', // equivalent to text-gray-400\n  },\n});\n\nexport default NetworkIndicator;\n","import React, { useMemo } from 'react';\nimport { View, Text, TextInput, StyleSheet, ViewStyle, TextStyle } from 'react-native';\n\nexport interface NumericFieldProps {\n  label?: string;\n  unit?: string;\n  required?: boolean;\n  value: string | number | null;\n  onChange: (value: string) => void;\n  min?: number;\n  step?: number;\n  onlyIntegers?: boolean;\n  disabled?: boolean;\n  touched?: boolean;\n  errorText?: string;\n  containerStyle?: ViewStyle;\n  inputStyle?: TextStyle;\n  unitTextStyle?: TextStyle;\n}\n\n/**\n * NumericField: campo numérico consistente con la estética de ui-mobile.\n * No aplica validación compleja; delega al consumidor y muestra errores si se indican.\n */\nexport default function NumericField({\n  label,\n  unit,\n  required = false,\n  value,\n  onChange,\n  onlyIntegers = false,\n  disabled = false,\n  touched = false,\n  errorText,\n  containerStyle,\n  inputStyle,\n  unitTextStyle,\n}: NumericFieldProps) {\n  const showError = useMemo(() => Boolean(touched && errorText), [touched, errorText]);\n\n  return (\n    <View style={containerStyle}>\n      {label ? (\n        <Text style={styles.label}>\n          {label}\n          {required ? <Text style={styles.required}> *</Text> : null}\n        </Text>\n      ) : null}\n      <View style={[styles.fieldRow, disabled && styles.disabled]}>\n        <TextInput\n          value={value == null ? '' : String(value)}\n          onChangeText={(text) => {\n            if (text === '') {\n              onChange('');\n              return;\n            }\n\n            if (onlyIntegers) {\n              const numeric = text.replace(/[^0-9]/g, '');\n              onChange(numeric);\n            } else {\n              const normalized = text.replace(',', '.');\n              const parts = normalized.split('.');\n              const numeric = parts.length > 2\n                ? parts[0] + '.' + parts.slice(1).join('')\n                : normalized.replace(/[^0-9.]/g, '');\n              onChange(numeric);\n            }\n          }}\n          editable={!disabled}\n          keyboardType={onlyIntegers ? 'number-pad' : 'decimal-pad'}\n          style={[styles.input, inputStyle]}\n          accessibilityLabel={label}\n          placeholder={required ? 'Requerido' : undefined}\n        />\n        {unit ? <Text style={[styles.unit, unitTextStyle]}>{unit}</Text> : null}\n      </View>\n      {showError ? <Text style={styles.errorText}>{errorText}</Text> : null}\n    </View>\n  );\n}\n\nconst styles = StyleSheet.create({\n  label: {\n    marginBottom: 6,\n    color: '#6B7280',\n    fontSize: 14,\n    fontWeight: '500',\n  },\n  required: {\n    color: '#FF0000',\n    fontSize: 14,\n    fontWeight: '600',\n  },\n  fieldRow: {\n    flexDirection: 'row',\n    alignItems: 'center',\n    gap: 8,\n    borderWidth: 1,\n    borderColor: '#D1D5DB',\n    borderRadius: 8,\n    backgroundColor: '#FFFFFF',\n    paddingHorizontal: 12,\n    minHeight: 48,\n  },\n  disabled: {\n    opacity: 0.6,\n  },\n  input: {\n    flex: 1,\n    color: '#111827',\n    fontSize: 16,\n    paddingVertical: 10,\n  },\n  unit: {\n    color: '#6B7280',\n    fontWeight: '600',\n  },\n  errorText: {\n    marginTop: 4,\n    color: '#FF1D4B',\n    fontSize: 12,\n  },\n});\n\n","import { FunctionComponent } from 'react';\nimport {\n  View,\n  Text,\n  StyleSheet,\n  TouchableOpacity,\n} from 'react-native';\n\nimport Svg, { Path } from 'react-native-svg';\n\n// Componente del icono de documento\ninterface DocumentIconProps {\n  size?: number;\n  color?: string;\n}\n\nconst DocumentIcon: FunctionComponent<DocumentIconProps> = ({ \n  size = 24, \n  color = '#F59E0B' \n}) => (\n  <Svg\n    width={size}\n    height={size}\n    viewBox=\"0 0 24 24\"\n    fill=\"none\"\n    stroke={color}\n    strokeWidth={2}\n    strokeLinecap=\"round\"\n    strokeLinejoin=\"round\"\n  >\n    <Path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\" />\n    <Path d=\"M14 2v6h6\" />\n    <Path d=\"M16 13H8\" />\n    <Path d=\"M16 17H8\" />\n    <Path d=\"M10 9H8\" />\n  </Svg>\n);\n\n// Componente del icono de plus\ninterface PlusIconProps {\n  size?: number;\n  color?: string;\n}\n\nconst PlusIcon: FunctionComponent<PlusIconProps> = ({ \n  size = 20, \n  color = '#F59E0B' \n}) => (\n  <Svg\n    width={size}\n    height={size}\n    viewBox=\"0 0 24 24\"\n    fill=\"none\"\n    stroke={color}\n    strokeWidth={2}\n    strokeLinecap=\"round\"\n    strokeLinejoin=\"round\"\n  >\n    <Path d=\"M12 4v16m8-8H4\" />\n  </Svg>\n);\n\ninterface ODSWidgetProps {\n  onViewODS?: () => void;\n  onCreateODS?: () => void;\n}\n\nexport const ODSWidget: FunctionComponent<ODSWidgetProps> = ({\n  onViewODS,\n  onCreateODS,\n}) => {\n  const handleViewODS = () => {\n    if (onViewODS) {\n      onViewODS();\n    }\n  };\n\n  const handleCreateODS = () => {\n    if (onCreateODS) {\n      onCreateODS();\n    }\n  };\n\n  return (\n    <View style={styles.wrapper}>\n      <TouchableOpacity\n        onPress={handleViewODS}\n        style={styles.container}\n        activeOpacity={0.95}\n      >\n        {/* Header Section */}\n        <View style={styles.header}>\n          <View style={styles.leftSection}>\n            <View style={styles.iconContainer}>\n              <DocumentIcon size={24} color=\"#F59E0B\" />\n            </View>\n            <View style={styles.textContainer}>\n              <Text style={styles.title}>ODS</Text>\n              <Text style={styles.subtitle}>Orden de Servicio</Text>\n            </View>\n          </View>\n        </View>\n      </TouchableOpacity>\n\n      {/* Botón de acción posicionado sobre la tarjeta */}\n      <View style={styles.actionButtonContainer}>\n        <TouchableOpacity\n          onPress={handleCreateODS}\n          style={styles.actionButton}\n          activeOpacity={0.8}\n        >\n          <Text style={styles.actionButtonText}>Crear ODS</Text>\n          <PlusIcon size={20} color=\"#F59E0B\" />\n        </TouchableOpacity>\n      </View>\n    </View>\n  );\n};\n\nconst styles = StyleSheet.create({\n  wrapper: {\n    width: '100%',\n    position: 'relative',\n  },\n  container: {\n    width: '100%',\n    borderRadius: 8,\n    padding: 16,\n    backgroundColor: '#F59E0B', // Color base del gradiente\n    shadowColor: '#000',\n    shadowOffset: {\n      width: 0,\n      height: 4,\n    },\n    shadowOpacity: 0.1,\n    shadowRadius: 6,\n    elevation: 4,\n  },\n  header: {\n    flexDirection: 'row',\n    alignItems: 'center',\n    justifyContent: 'flex-start',\n    paddingRight: 130, // Dejar espacio para el botón absoluto\n  },\n  leftSection: {\n    flexDirection: 'row',\n    alignItems: 'center',\n    flex: 1,\n  },\n  iconContainer: {\n    width: 48,\n    height: 48,\n    borderRadius: 8,\n    backgroundColor: 'rgba(255, 255, 255, 0.9)',\n    justifyContent: 'center',\n    alignItems: 'center',\n    marginRight: 12,\n  },\n  textContainer: {\n    flex: 1,\n  },\n  title: {\n    fontSize: 18,\n    fontWeight: 'bold',\n    color: '#FFFFFF',\n    marginBottom: 2,\n    textShadowColor: 'rgba(0, 0, 0, 0.1)',\n    textShadowOffset: { width: 0, height: 1 },\n    textShadowRadius: 2,\n  },\n  subtitle: {\n    fontSize: 14,\n    color: '#FED7AA', // text-orange-100 equivalente\n    textShadowColor: 'rgba(0, 0, 0, 0.05)',\n    textShadowOffset: { width: 0, height: 1 },\n    textShadowRadius: 1,\n  },\n  actionButtonContainer: {\n    position: 'absolute',\n    right: 16,\n    top: 16,\n    bottom: 16,\n    justifyContent: 'center',\n    zIndex: 10,\n    elevation: 5,\n  },\n  actionButton: {\n    flexDirection: 'row',\n    alignItems: 'center',\n    backgroundColor: '#FFFFFF',\n    paddingHorizontal: 16,\n    paddingVertical: 10,\n    borderRadius: 8,\n    shadowColor: '#000',\n    shadowOffset: {\n      width: 0,\n      height: 2,\n    },\n    shadowOpacity: 0.1,\n    shadowRadius: 4,\n    elevation: 2,\n    gap: 8,\n  },\n  actionButtonText: {\n    color: '#F59E0B',\n    fontSize: 14,\n    fontWeight: '600',\n  },\n});\n","import React from 'react';\nimport { View, ViewStyle, StyleSheet } from 'react-native';\n\nexport interface ProgressBarProps {\n  value: number; // 0 - 100\n  height?: number;\n  backgroundColor?: string; // track color\n  progressColor?: string; // bar color\n  rounded?: boolean;\n  style?: ViewStyle;\n}\n\nexport function ProgressBar({\n  value,\n  height = 8,\n  backgroundColor = '#E5E7EB',\n  progressColor = '#2563EB',\n  rounded = true,\n  style,\n}: ProgressBarProps) {\n  const clamped = Math.max(0, Math.min(100, Number.isFinite(value) ? value : 0));\n  const radius = rounded ? height / 2 : 0;\n\n  return (\n    <View\n      style={[\n        styles.track,\n        { height, backgroundColor, borderRadius: radius },\n        style,\n      ]}\n      accessible\n      accessibilityRole=\"progressbar\"\n      accessibilityValue={{ now: clamped, min: 0, max: 100 }}\n    >\n      <View\n        style={{\n          width: `${clamped}%`,\n          height: '100%',\n          backgroundColor: progressColor,\n          borderRadius: radius,\n        }}\n      />\n    </View>\n  );\n}\n\nconst styles = StyleSheet.create({\n  track: {\n    width: '100%',\n    overflow: 'hidden',\n  },\n});\n\nexport default ProgressBar;\n\n\n","import React from 'react';\nimport { View, Text, TouchableOpacity, StyleSheet, ViewStyle, TextStyle } from 'react-native';\n\nexport type RadioValue = string | number | null;\n\nexport interface RadioOption {\n  value: RadioValue;\n  label: string;\n  disabled?: boolean;\n}\n\nexport interface RadioGroupProps {\n  title?: string;\n  options: RadioOption[];\n  selectedValue: RadioValue;\n  onValueChange: (next: RadioValue) => void;\n  row?: boolean;\n  accentColor?: string;\n  style?: ViewStyle;\n  titleStyle?: TextStyle;\n  optionStyle?: ViewStyle;\n  labelStyle?: TextStyle;\n  required?: boolean;\n}\n\nexport function RadioGroup({\n  title,\n  options,\n  selectedValue,\n  onValueChange,\n  row = false,\n  accentColor = '#007AFF',\n  style,\n  titleStyle,\n  optionStyle,\n  labelStyle,\n  required = false,\n}: RadioGroupProps) {\n  return (\n    <View style={[styles.container, style]}>\n      {title ? (\n        <Text style={[styles.title, titleStyle]}>\n          {title}\n          {required ? <Text style={styles.required}> *</Text> : null}\n        </Text>\n      ) : null}\n      <View style={[styles.options, row && styles.row]}>\n        {options.map((opt) => {\n          const isSelected = opt.value === selectedValue;\n          return (\n            <TouchableOpacity\n              key={String(opt.value)}\n              accessibilityRole=\"radio\"\n              accessibilityState={{ selected: isSelected, disabled: !!opt.disabled }}\n              activeOpacity={0.8}\n              disabled={opt.disabled}\n              onPress={() => onValueChange(opt.value)}\n              style={[\n                styles.pillOption,\n                row && styles.optionRow,\n                {\n                  backgroundColor: isSelected ? accentColor : '#FFFFFF',\n                  borderColor: accentColor,\n                },\n                optionStyle,\n              ]}\n            >\n              <Text\n                style={[\n                  styles.pillLabel,\n                  { color: isSelected ? '#FFFFFF' : accentColor },\n                  labelStyle,\n                ]}\n              >\n                {opt.label}\n              </Text>\n            </TouchableOpacity>\n          );\n        })}\n      </View>\n    </View>\n  );\n}\n\nconst styles = StyleSheet.create({\n  container: {\n    gap: 8,\n  },\n  title: {\n    fontSize: 14,\n    fontWeight: '600',\n    color: '#374151',\n  },\n  required: {\n    color: '#FF0000',\n    fontSize: 14,\n    fontWeight: '600',\n  },\n  options: {\n    gap: 12,\n  },\n  row: {\n    flexDirection: 'row',\n    flexWrap: 'wrap',\n  },\n  pillOption: {\n    width: '100%',\n    borderRadius: 16,\n    borderWidth: 2,\n    paddingVertical: 20,\n    paddingHorizontal: 16,\n    alignItems: 'center',\n    justifyContent: 'center',\n    shadowColor: '#000',\n    shadowOpacity: 0.1,\n    shadowRadius: 6,\n    shadowOffset: { width: 0, height: 3 },\n    elevation: 3,\n  },\n  optionRow: {\n    marginRight: 12,\n  },\n  pillLabel: {\n    fontSize: 18,\n    fontWeight: '700',\n  },\n});\n\nexport default RadioGroup;\n\n\n","import React from 'react';\nimport {\n  View,\n  TextInput,\n  StyleSheet,\n  TouchableOpacity,\n  ViewStyle,\n} from 'react-native';\nimport { MagnifyingGlassIcon, XMarkIcon } from 'react-native-heroicons/outline';\n\nexport interface SearchInputProps {\n  value: string;\n  onChangeText: (text: string) => void;\n  placeholder?: string;\n  containerStyle?: ViewStyle;\n  accentColor?: string;\n}\n\nexport default function SearchInput({\n  value,\n  onChangeText,\n  placeholder = 'Buscar...',\n  containerStyle,\n  accentColor = '#1B418C',\n}: SearchInputProps) {\n  return (\n    <View style={[styles.container, containerStyle]}>\n      <View style={styles.inputWrapper}>\n        <MagnifyingGlassIcon size={20} color=\"#6B7280\" style={styles.searchIcon} />\n        <TextInput\n          value={value}\n          onChangeText={onChangeText}\n          placeholder={placeholder}\n          placeholderTextColor=\"#9CA3AF\"\n          style={styles.input}\n          autoCorrect={false}\n          autoCapitalize=\"none\"\n        />\n        {value.length > 0 && (\n          <TouchableOpacity\n            onPress={() => onChangeText('')}\n            style={styles.clearButton}\n          >\n            <XMarkIcon size={20} color=\"#6B7280\" />\n          </TouchableOpacity>\n        )}\n      </View>\n    </View>\n  );\n}\n\nconst styles = StyleSheet.create({\n  container: {\n    paddingVertical: 12,\n    backgroundColor: '#f9fafb',\n  },\n  inputWrapper: {\n    flexDirection: 'row',\n    alignItems: 'center',\n    backgroundColor: '#FFFFFF',\n    borderWidth: 1,\n    borderColor: '#E5E7EB',\n    borderRadius: 12,\n    paddingHorizontal: 12,\n    height: 48,\n    shadowColor: '#000',\n    shadowOffset: { width: 0, height: 1 },\n    shadowOpacity: 0.05,\n    shadowRadius: 2,\n    elevation: 2,\n  },\n  searchIcon: {\n    marginRight: 8,\n  },\n  input: {\n    flex: 1,\n    fontSize: 15,\n    color: '#111827',\n    paddingVertical: 8,\n  },\n  clearButton: {\n    padding: 4,\n  },\n});\n","import React, { useMemo, useState } from 'react';\nimport { View, Text, TextInput, StyleSheet } from 'react-native';\nimport Select, { MenuItem } from './select';\n\nexport interface SearchableSelectOption {\n  value: string | number | null;\n  label: string;\n}\n\nexport interface SearchableSelectProps {\n  label?: string;\n  placeholder?: string;\n  options: SearchableSelectOption[];\n  selectedValue: string | number | null;\n  onValueChange: (next: string | number | null) => void;\n  emptyStateText?: string;\n  loading?: boolean;\n  loadingMessage?: string;\n  searchPlaceholder?: string;\n  minSearchLength?: number;\n  accentColor?: string;\n  required?: boolean;\n  disabled?: boolean;\n  direction?: \"auto\" | \"up\" | \"down\";\n  margin?: number;\n}\n\nexport default function SearchableSelect({\n  label,\n  placeholder = 'Selecciona una opción',\n  options,\n  selectedValue,\n  onValueChange,\n  emptyStateText,\n  loading = false,\n  loadingMessage = 'Cargando opciones...',\n  searchPlaceholder = 'Buscar...',\n  minSearchLength = 0,\n  accentColor,\n  required = false,\n  disabled = false,\n  direction = \"auto\",\n  margin = 16,\n}: SearchableSelectProps) {\n  const [query, setQuery] = useState('');\n  const hasNoOptions = !loading && options.length === 0;\n  const emptyOptionsMessage = emptyStateText ?? 'No hay opciones disponibles';\n  const selectIsDisabled = disabled || loading;\n  const selectPlaceholder = loading\n    ? loadingMessage\n    : hasNoOptions\n      ? emptyOptionsMessage\n      : placeholder;\n\n  const filtered = useMemo(() => {\n    const q = query.trim().toLowerCase();\n    if (q.length < minSearchLength) return options;\n    return options.filter((o) => o.label.toLowerCase().includes(q));\n  }, [options, query, minSearchLength]);\n\n  return (\n    <View style={styles.container}>\n      <Select\n        value={selectedValue}\n        onChange={onValueChange}\n        label={label}\n        placeholder={selectPlaceholder}\n        accentColor={accentColor}\n        menuStyle={styles.menu}\n        required={required}\n        disabled={selectIsDisabled}\n        headerHeight={50} // Approximate height of the searchBox\n        direction={direction}\n        margin={margin}\n      >\n        <View style={styles.searchBox}>\n          <TextInput\n            value={query}\n            onChangeText={setQuery}\n            placeholder={searchPlaceholder}\n            style={styles.input}\n            placeholderTextColor=\"#9CA3AF\"\n          />\n          {minSearchLength > 0 ? (\n            <Text style={styles.hint}>{`Min. ${minSearchLength} caracteres`}</Text>\n          ) : null}\n        </View>\n        {loading ? (\n          <MenuItem value=\"__searchable_select_loading_state__\" disabled>\n            {loadingMessage}\n          </MenuItem>\n        ) : null}\n        {!loading ? filtered.map((opt) => (\n          <MenuItem key={String(opt.value)} value={opt.value}>\n            {opt.label}\n          </MenuItem>\n        )) : null}\n        {!loading && filtered.length === 0 ? (\n          <MenuItem value=\"__searchable_select_empty_state__\" disabled>\n            {emptyOptionsMessage}\n          </MenuItem>\n        ) : null}\n      </Select>\n    </View>\n  );\n}\n\nconst styles = StyleSheet.create({\n  container: {\n  },\n  menu: {\n  },\n  searchBox: {\n    paddingHorizontal: 12,\n    paddingTop: 8,\n    paddingBottom: 4,\n    borderBottomWidth: 1,\n    borderBottomColor: '#E5E7EB',\n    backgroundColor: '#FFFFFF',\n  },\n  input: {\n    height: 36,\n    borderWidth: 1,\n    borderColor: '#E5E7EB',\n    borderRadius: 6,\n    paddingHorizontal: 10,\n    color: '#111827',\n  },\n  hint: {\n    marginTop: 4,\n    color: '#9CA3AF',\n    fontSize: 12,\n  },\n});\n\n\n","import React, {\n  useCallback,\n  useContext,\n  useEffect,\n  useMemo,\n  useRef,\n  useState,\n} from \"react\";\nimport {\n  View,\n  Text,\n  Modal,\n  TouchableOpacity,\n  TouchableWithoutFeedback,\n  StyleSheet,\n  Dimensions,\n  ViewStyle,\n  TextStyle,\n  ScrollView,\n  InteractionManager,\n  Animated,\n} from \"react-native\";\nimport { ChevronUpDownIcon } from \"react-native-heroicons/solid\";\nimport { useSelectPositioning } from \"./useSelectPositioning\";\n\ntype SelectValue = string | number | null;\n\ninterface SelectContextValue {\n  selectedValue: SelectValue;\n  onSelect: (value: SelectValue) => void;\n}\n\nconst SelectContext = React.createContext<SelectContextValue | null>(null);\n\nexport interface MenuItemProps {\n  value: SelectValue;\n  children: React.ReactNode;\n  disabled?: boolean;\n  style?: ViewStyle;\n  textStyle?: TextStyle;\n}\n\nexport function MenuItem({\n  value,\n  children,\n  disabled = false,\n  style,\n  textStyle,\n}: MenuItemProps) {\n  const ctx = useContext(SelectContext);\n\n  const isSelected = ctx?.selectedValue === value;\n\n  const handlePress = useCallback(() => {\n    if (disabled) return;\n    ctx?.onSelect(value);\n  }, [ctx, value, disabled]);\n\n  return (\n    <TouchableOpacity\n      accessibilityRole=\"button\"\n      accessibilityState={{ disabled, selected: !!isSelected }}\n      activeOpacity={0.7}\n      onPress={handlePress}\n      disabled={disabled}\n      style={[\n        styles.item,\n        isSelected && styles.itemSelected,\n        disabled && styles.itemDisabled,\n        style,\n      ]}\n    >\n      <Text\n        style={[\n          styles.itemText,\n          isSelected && styles.itemTextSelected,\n          textStyle,\n        ]}\n      >\n        {children}\n      </Text>\n    </TouchableOpacity>\n  );\n}\n\nexport interface SelectProps {\n  value: SelectValue;\n  required?: boolean;\n  onChange: (value: SelectValue) => void;\n  children: React.ReactNode;\n  label?: string;\n  placeholder?: string;\n  loading?: boolean;\n  loadingMessage?: string;\n  emptyStateText?: string;\n  disabled?: boolean;\n  size?: \"small\" | \"medium\" | \"large\";\n  style?: ViewStyle; // container\n  triggerStyle?: ViewStyle; // button\n  textStyle?: TextStyle; // selected text\n  menuStyle?: ViewStyle; // dropdown container\n  maxMenuHeight?: number;\n  offsetX?: number;\n  offsetY?: number;\n  accentColor?: string;\n  margin?: number;\n  headerHeight?: number;\n  direction?: \"auto\" | \"up\" | \"down\";\n}\n\nexport function Select({\n  value,\n  required = false,\n  onChange,\n  children,\n  label,\n  placeholder = \"Selecciona una opción\",\n  loading = false,\n  loadingMessage = \"Cargando opciones...\",\n  emptyStateText,\n  disabled = false,\n  size = \"medium\",\n  style,\n  triggerStyle,\n  textStyle,\n  menuStyle,\n  maxMenuHeight = 320,\n  offsetX = 0,\n  offsetY = 0,\n  accentColor = \"#6B7280\",\n  margin = 16,\n  headerHeight = 0,\n  direction = \"auto\",\n}: SelectProps) {\n  const [isOpen, setIsOpen] = useState(false);\n  const [menuHeight, setMenuHeight] = useState(0);\n  const [anchor, setAnchor] = useState<{\n    x: number;\n    y: number;\n    width: number;\n    height: number;\n  } | null>(null);\n\n  const openerRef = useRef<View>(null);\n  const animValue = useRef(new Animated.Value(0)).current;\n\n  const windowDims = Dimensions.get(\"window\");\n  const emptyMessage =\n    emptyStateText ?? \"No hay opciones disponibles\";\n\n  const sizeStyles = useMemo(() => {\n    switch (size) {\n      case \"small\":\n        return {\n          paddingVertical: 8,\n          paddingHorizontal: 12,\n          minHeight: 36,\n          fontSize: 14,\n        };\n      case \"large\":\n        return {\n          paddingVertical: 16,\n          paddingHorizontal: 16,\n          minHeight: 56,\n          fontSize: 18,\n        };\n      default:\n        return {\n          paddingVertical: 12,\n          paddingHorizontal: 14,\n          minHeight: 48,\n          fontSize: 16,\n        };\n    }\n  }, [size]);\n\n  const selectableItemsCount = useMemo(() => {\n    let count = 0;\n    React.Children.forEach(children, (child) => {\n      if (!React.isValidElement(child)) return;\n      const childProps = child.props as MenuItemProps;\n      if (\n        childProps &&\n        Object.prototype.hasOwnProperty.call(childProps, \"value\") &&\n        !childProps.disabled\n      ) {\n        count += 1;\n      }\n    });\n    return count;\n  }, [children]);\n\n  const hasNoOptions = !loading && selectableItemsCount === 0;\n  const effectiveDisabled = disabled || loading || hasNoOptions;\n  const effectivePlaceholder = loading\n    ? loadingMessage\n    : hasNoOptions\n      ? emptyMessage\n      : placeholder;\n\n  const openMenu = useCallback(() => {\n    if (effectiveDisabled) return;\n    InteractionManager.runAfterInteractions(() => {\n      requestAnimationFrame(() => {\n        openerRef.current?.measureInWindow((x, y, width, height) => {\n          setAnchor({ x, y, width, height });\n          setIsOpen(true);\n        });\n      });\n    });\n  }, [effectiveDisabled]);\n\n  const closeMenu = useCallback(() => {\n    Animated.timing(animValue, {\n      toValue: 0,\n      duration: 150,\n      useNativeDriver: true,\n    }).start(() => {\n      setIsOpen(false);\n      setMenuHeight(0);\n      animValue.setValue(0);\n    });\n  }, [animValue]);\n\n  useEffect(() => {\n    const sub = Dimensions.addEventListener(\"change\", () => {\n      setIsOpen(false);\n    });\n    return () => {\n      sub.remove();\n    };\n  }, []);\n\n  const displayLabel = useMemo(() => {\n    let labelText: React.ReactNode = effectivePlaceholder;\n    React.Children.forEach(children, (child) => {\n      if (!React.isValidElement(child)) return;\n      const childProps = child.props as MenuItemProps;\n      if (\n        childProps &&\n        Object.prototype.hasOwnProperty.call(childProps, \"value\")\n      ) {\n        if (childProps.value === value) {\n          labelText = childProps.children;\n        }\n      }\n    });\n    return labelText;\n  }, [children, value, effectivePlaceholder]);\n\n  const onSelect = useCallback(\n    (nextValue: SelectValue) => {\n      onChange(nextValue);\n      closeMenu();\n    },\n    [onChange, closeMenu]\n  );\n\n  const items = useMemo(\n    () => React.Children.toArray(children).filter(Boolean),\n    [children]\n  );\n\n  const computedMenu = useSelectPositioning({\n    anchor,\n    viewport: { width: windowDims.width, height: windowDims.height },\n    maxMenuHeight,\n    headerHeight,\n    itemCount: items.length,\n    margin,\n    offsetX,\n    offsetY,\n    direction,\n    menuHeight,\n  });\n\n  useEffect(() => {\n    if (computedMenu?.isMeasured && isOpen) {\n      Animated.timing(animValue, {\n        toValue: 1,\n        duration: 200,\n        useNativeDriver: true,\n      }).start();\n    }\n  }, [computedMenu?.isMeasured, isOpen, animValue]);\n\n  return (\n    <View style={style}>\n      {label ? (\n        <Text style={[styles.label, { color: effectiveDisabled ? '#bfbfbf' : accentColor }]}>\n          {label}\n          {required ? <Text style={styles.required}> *</Text> : null}\n        </Text>\n      ) : null}\n\n      <TouchableOpacity\n        ref={openerRef}\n        activeOpacity={0.8}\n        onPress={openMenu}\n        disabled={effectiveDisabled}\n        accessibilityRole=\"button\"\n        accessibilityState={{ disabled: effectiveDisabled }}\n        style={[\n          styles.trigger,\n          {\n            paddingVertical: sizeStyles.paddingVertical,\n            paddingHorizontal: sizeStyles.paddingHorizontal,\n            minHeight: sizeStyles.minHeight,\n          },\n          // { borderColor: accentColor },\n          effectiveDisabled && styles.triggerDisabled,\n          triggerStyle,\n        ]}\n      >\n        <Text\n          numberOfLines={1}\n          style={[\n            styles.triggerText,\n            { fontSize: sizeStyles.fontSize },\n            (value === '' || value === null || value === undefined) && styles.placeholderText,\n            textStyle,\n          ]}\n        >\n          {displayLabel}\n        </Text>\n        <ChevronUpDownIcon size={18} color={accentColor} />\n      </TouchableOpacity>\n\n      <Modal\n        visible={isOpen}\n        transparent\n        onRequestClose={closeMenu}\n        presentationStyle=\"overFullScreen\"\n      >\n        <TouchableWithoutFeedback onPress={closeMenu}>\n          <Animated.View style={[styles.backdrop, { opacity: animValue }]} />\n        </TouchableWithoutFeedback>\n\n        {computedMenu ? (\n          <Animated.View\n            onLayout={(e) => {\n              const { height } = e.nativeEvent.layout;\n              if (height > 0 && menuHeight === 0) {\n                setMenuHeight(height);\n              }\n            }}\n            style={[\n              styles.menu,\n              {\n                top: computedMenu.top,\n                left: computedMenu.left,\n                width: computedMenu.width,\n                maxHeight: computedMenu.maxHeight,\n                opacity: animValue,\n                transform: [\n                  {\n                    translateY: animValue.interpolate({\n                      inputRange: [0, 1],\n                      outputRange: [computedMenu.openDown ? -10 : 10, 0],\n                    }),\n                  },\n                ],\n              },\n              menuStyle,\n            ]}\n          >\n            <SelectContext.Provider value={{ selectedValue: value, onSelect }}>\n              <View style={styles.menuInner}>\n                <ScrollView\n                  style={{ maxHeight: computedMenu.maxHeight }}\n                  contentContainerStyle={styles.scrollContainer}\n                  keyboardShouldPersistTaps=\"handled\"\n                  showsVerticalScrollIndicator\n                >\n                  {loading ? (\n                    <MenuItem value=\"__select_loading_state__\" disabled>\n                      {loadingMessage}\n                    </MenuItem>\n                  ) : null}\n                  {React.Children.map(children, (child) => child)}\n                  {!loading && hasNoOptions ? (\n                    <MenuItem value=\"__select_empty_state__\" disabled>\n                      {emptyMessage}\n                    </MenuItem>\n                  ) : null}\n                </ScrollView>\n              </View>\n            </SelectContext.Provider>\n          </Animated.View>\n        ) : null}\n      </Modal>\n    </View>\n  );\n}\n\nconst styles = StyleSheet.create({\n  label: {\n    marginBottom: 6,\n    color: \"#6B7280\",\n    fontSize: 14,\n    fontWeight: \"500\",\n  },\n  trigger: {\n    borderWidth: 1,\n    borderColor: \"#D1D5DB\",\n    borderRadius: 8,\n    backgroundColor: \"#FFFFFF\",\n    flexDirection: \"row\",\n    alignItems: \"center\",\n    justifyContent: \"space-between\",\n    gap: 8,\n  },\n  triggerDisabled: {\n    opacity: 0.45,\n  },\n  triggerText: {\n    color: \"#111827\",\n    flex: 1,\n  },\n  placeholderText: {\n    color: \"#9CA3AF\",\n  },\n  backdrop: {\n    position: \"absolute\",\n    top: 0,\n    left: 0,\n    right: 0,\n    bottom: 0,\n    backgroundColor: \"rgba(0,0,0,0.2)\",\n  },\n  menu: {\n    position: \"absolute\",\n    backgroundColor: \"#FFFFFF\",\n    borderRadius: 8,\n    borderWidth: 1,\n    borderColor: \"#E5E7EB\",\n    shadowColor: \"#000\",\n    shadowOpacity: 0.15,\n    shadowRadius: 12,\n    shadowOffset: { width: 0, height: 6 },\n    elevation: 8,\n    overflow: \"hidden\",\n  },\n  menuInner: {\n    paddingVertical: 4,\n  },\n  scrollContainer: {\n    paddingVertical: 4,\n  },\n  item: {\n    paddingHorizontal: 12,\n    paddingVertical: 12,\n  },\n  itemDisabled: {\n    opacity: 0.5,\n  },\n  itemSelected: {\n    backgroundColor: \"#F3F4F6\",\n  },\n  itemText: {\n    color: \"#111827\",\n    fontSize: 16,\n  },\n  itemTextSelected: {\n    fontWeight: \"600\",\n  },\n  required: {\n    color: \"#FF0000\",\n    fontSize: 14,\n    fontWeight: \"600\",\n  },\n});\n\n// Attach subcomponent for ergonomic API: <Select.MenuItem />\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nSelect.MenuItem = MenuItem;\n\nexport default Select;\n","import * as React from 'react';\nimport { useEffect, useRef } from 'react';\nimport { Animated, StyleSheet, ViewStyle, DimensionValue } from 'react-native';\n\nexport interface SkeletonLoaderProps {\n  width?: DimensionValue;\n  height?: DimensionValue;\n  style?: ViewStyle;\n  borderRadius?: number;\n}\n\nexport const SkeletonLoader = ({\n  width = '100%',\n  height = 16,\n  style,\n  borderRadius = 4,\n}: SkeletonLoaderProps) => {\n  const opacity = useRef(new Animated.Value(0.3)).current;\n\n  useEffect(() => {\n    const pulse = Animated.loop(\n      Animated.sequence([\n        Animated.timing(opacity, {\n          toValue: 0.7,\n          duration: 800,\n          useNativeDriver: true,\n        }),\n        Animated.timing(opacity, {\n          toValue: 0.3,\n          duration: 800,\n          useNativeDriver: true,\n        }),\n      ])\n    );\n    \n    pulse.start();\n\n    return () => pulse.stop();\n  }, [opacity]);\n\n  return (\n    <Animated.View\n      style={[\n        styles.skeleton,\n        { width, height, borderRadius, opacity },\n        style,\n      ]}\n    />\n  );\n};\n\nconst styles = StyleSheet.create({\n  skeleton: {\n    backgroundColor: '#D1D5DB', // gray-300\n  },\n});\n\nexport default SkeletonLoader;\n","import React from 'react';\nimport { View, Text, StyleSheet, ViewStyle, TextStyle } from 'react-native';\n\ntype Tone = 'success' | 'warning' | 'danger' | 'info';\n\nexport interface StatCardProps {\n  value: string | number;\n  label: string;\n  icon?: React.ReactNode;\n  badge?: { text: string; tone: Tone } | null;\n  style?: ViewStyle;\n  valueStyle?: TextStyle;\n  labelStyle?: TextStyle;\n  iconSlot?: React.ReactNode;\n}\n\nexport function StatCard({ value, label, icon, badge, style, valueStyle, labelStyle, iconSlot }: StatCardProps) {\n  return (\n    <View style={[styles.card, style]}> \n      {iconSlot ? (\n        <View style={styles.iconWrap}>{iconSlot}</View>\n      ) : (\n        <View style={styles.iconWrap}>{icon}</View>\n      )}\n      <Text style={[styles.value, valueStyle]}>{value ?? 'N/A'}</Text>\n      <Text style={[styles.label, labelStyle]}>{label}</Text>\n      {badge ? (\n        <View style={[styles.badge, toneToStyle(badge.tone).container]}> \n          <Text style={[styles.badgeText, toneToStyle(badge.tone).text]}>{badge.text}</Text>\n        </View>\n      ) : null}\n    </View>\n  );\n}\n\nfunction toneToStyle(tone: Tone): { container: ViewStyle; text: TextStyle } {\n  switch (tone) {\n    case 'success':\n      return { container: { backgroundColor: '#D1FAE5' }, text: { color: '#065F46' } };\n    case 'warning':\n      return { container: { backgroundColor: '#FEF3C7' }, text: { color: '#92400E' } };\n    case 'danger':\n      return { container: { backgroundColor: '#FEE2E2' }, text: { color: '#991B1B' } };\n    default:\n      return { container: { backgroundColor: '#DBEAFE' }, text: { color: '#1E40AF' } };\n  }\n}\n\nconst styles = StyleSheet.create({\n  card: {\n    backgroundColor: '#FFFFFF',\n    borderRadius: 12,\n    padding: 16,\n    alignItems: 'center',\n    justifyContent: 'center',\n    gap: 6,\n    // Sombra sutil\n    shadowColor: '#00000050',\n    shadowOffset: { width: 0, height: 8 },\n    shadowOpacity: 0.02,\n    shadowRadius: 20,\n    elevation: 6,\n  },\n  iconWrap: {\n    width: 48,\n    height: 48,\n    borderRadius: 10,\n    alignItems: 'center',\n    justifyContent: 'center',\n    backgroundColor: '#2563EB',\n    overflow: 'hidden',\n  },\n  value: {\n    fontSize: 24,\n    fontWeight: '700',\n    color: '#111827',\n    textAlign: 'center',\n    lineHeight: 28,\n    marginTop: 6,\n  },\n  label: {\n    fontSize: 13,\n    color: '#6B7280',\n    textAlign: 'center',\n    marginTop: 4,\n    fontWeight: '500',\n  },\n  badge: {\n    marginTop: 4,\n    paddingHorizontal: 8,\n    paddingVertical: 4,\n    borderRadius: 999,\n  },\n  badgeText: {\n    fontSize: 10,\n    fontWeight: '600',\n  },\n});\n\nexport default StatCard;\n\n\n","import React from 'react';\nimport {\n  TouchableOpacity,\n  Text,\n  ActivityIndicator,\n  StyleSheet,\n  ViewStyle,\n  TextStyle,\n  View,\n} from 'react-native';\n\ninterface StatusButtonProps {\n  title: string;\n  loadingTitle?: string;\n  onPress: () => void;\n  loading?: boolean;\n  disabled?: boolean;\n  style?: ViewStyle;\n  textStyle?: TextStyle;\n  loadingColor?: string;\n  backgroundColor?: string;\n  size?: 'small' | 'medium' | 'large';\n  leftIcon?: React.ReactNode;\n  rightIcon?: React.ReactNode;\n}\n\nexport default function StatusButton({\n  title,\n  loadingTitle,\n  onPress,\n  loading = false,\n  disabled = false,\n  style,\n  textStyle,\n  loadingColor = 'white',\n  backgroundColor,\n  size = 'medium',\n  leftIcon,\n  rightIcon,\n}: StatusButtonProps) {\n  const isDisabled = disabled || loading;\n\n  const getSizeStyles = () => {\n    switch (size) {\n      case 'small':\n        return {\n          paddingVertical: 8,\n          paddingHorizontal: 16,\n          minHeight: 36,\n          fontSize: 14,\n        };\n      case 'large':\n        return {\n          paddingVertical: 20,\n          paddingHorizontal: 32,\n          minHeight: 64,\n          fontSize: 18,\n        };\n      default: // medium\n        return {\n          paddingVertical: 16,\n          paddingHorizontal: 24,\n          minHeight: 56,\n          fontSize: 16,\n        };\n    }\n  };\n\n  const sizeStyles = getSizeStyles();\n\n  return (\n    <TouchableOpacity\n      style={[\n        styles.button,\n        {\n          paddingVertical: sizeStyles.paddingVertical,\n          paddingHorizontal: sizeStyles.paddingHorizontal,\n          minHeight: sizeStyles.minHeight,\n        },\n        backgroundColor && { backgroundColor },\n        isDisabled && styles.disabledButton,\n        style,\n      ]}\n      onPress={onPress}\n      disabled={isDisabled}\n    >\n      {loading ? (\n        <View style={styles.loadingContainer}>\n          <ActivityIndicator \n            color={loadingColor} \n            size=\"small\" \n            style={styles.spinner}\n          />\n          <Text style={[\n            styles.buttonText, \n            { fontSize: sizeStyles.fontSize },\n            textStyle\n          ]}\n          numberOfLines={1}\n          adjustsFontSizeToFit\n          minimumFontScale={0.75}>\n            {loadingTitle || title}\n          </Text>\n        </View>\n      ) : (\n        <View style={styles.contentRow}>\n          {leftIcon ? <View style={styles.iconLeft}>{leftIcon}</View> : null}\n          <Text\n            style={[\n              styles.buttonText,\n              { fontSize: sizeStyles.fontSize },\n              textStyle,\n            ]}\n            numberOfLines={1}\n            adjustsFontSizeToFit\n            minimumFontScale={0.75}\n          >\n            {title}\n          </Text>\n          {rightIcon ? <View style={styles.iconRight}>{rightIcon}</View> : null}\n        </View>\n      )}\n    </TouchableOpacity>\n  );\n}\n\nconst styles = StyleSheet.create({\n  button: {\n    borderRadius: 8,\n    alignItems: 'center',\n    justifyContent: 'center',\n    flexDirection: 'row',\n  },\n  disabledButton: {\n    opacity: 0.6,\n  },\n  loadingContainer: {\n    flexDirection: 'row',\n    alignItems: 'center',\n    justifyContent: 'center',\n  },\n  spinner: {\n    marginRight: 8,\n  },\n  contentRow: {\n    flexDirection: 'row',\n    alignItems: 'center',\n    justifyContent: 'center',\n    width: '100%',\n  },\n  iconLeft: {\n    marginRight: 8,\n    flexShrink: 0,\n  },\n  iconRight: {\n    marginLeft: 8,\n    flexShrink: 0,\n  },\n  buttonText: {\n    fontWeight: '500',\n    color: 'white',\n    flexShrink: 1,\n    textAlign: 'center',\n  },\n});\n","import React from 'react';\nimport { View, Text, StyleSheet, ViewStyle } from 'react-native';\n\nexport interface SummaryItem {\n  name: string;\n  value: React.ReactNode;\n}\n\nexport interface SummaryTableProps {\n  items: SummaryItem[];\n  style?: ViewStyle;\n  accentColor?: string;\n  leftBackgroundColor?: string;\n}\n\nexport function SummaryTable({ items, style, leftBackgroundColor = '#F9FAFB' }: SummaryTableProps) {\n  const renderValue = (value: React.ReactNode) => {\n    if (React.isValidElement(value)) {\n      return value;\n    }\n\n    if (typeof value === 'string' || typeof value === 'number') {\n      return <Text style={[styles.value, { color: '#111827' }]}>{value}</Text>;\n    }\n\n    if (typeof value === 'boolean') {\n      return <Text style={[styles.value, { color: '#111827' }]}>{String(value)}</Text>;\n    }\n\n    return <Text style={[styles.value, { color: '#111827' }]}>{''}</Text>;\n  };\n\n  return (\n    <View style={[styles.card, style]}>\n      {items.map((item, idx) => (\n        <View\n          key={`${item.name}-${idx}`}\n          style={[styles.row, idx !== items.length - 1 && styles.rowDivider]}\n        >\n          <View style={styles.cellLeft}>\n            <View\n              pointerEvents=\"none\"\n              style={[\n                styles.leftBg,\n                idx === 0 && styles.leftBgTop,\n                idx === items.length - 1 && styles.leftBgBottom,\n                { backgroundColor: leftBackgroundColor },\n              ]}\n            />\n            <Text style={[styles.name]}>{item.name}:</Text>\n          </View>\n          <View style={styles.cellRight}>\n            {renderValue(item.value)}\n          </View>\n        </View>\n      ))}\n    </View>\n  );\n}\n\nconst styles = StyleSheet.create({\n  card: {\n    backgroundColor: '#FFFFFF',\n    borderRadius: 10,\n    borderWidth: 1,\n    borderColor: '#E5E7EB',\n    overflow: 'hidden',\n    marginBottom: 16,\n    boxShadow: '0px 10px 16px 0px rgba(0, 0, 0, 0.05)',\n  },\n  row: {\n    flexDirection: 'row',\n    alignItems: 'center',\n    paddingVertical: 12,\n    paddingHorizontal: 12,\n    backgroundColor: '#FFFFFF',\n  },\n  rowDivider: {\n    borderBottomWidth: 1,\n    borderBottomColor: '#E5E7EB',\n  },\n  cellLeft: {\n    width: '35%',\n    position: 'relative',\n    justifyContent: 'center',\n  },\n  cellRight: {\n    width: '65%',\n    paddingStart: 12,\n  },\n  leftBg: {\n    position: 'absolute',\n    top: -12,\n    bottom: -12,\n    left: -14,\n    right: 0,\n  },\n  leftBgTop: {\n    borderTopLeftRadius: 10,\n  },\n  leftBgBottom: {\n    borderBottomLeftRadius: 10,\n  },\n  name: {\n    color: '#111827',\n    fontWeight: '700',\n  },\n  value: {\n    color: '#374151',\n    fontWeight: '400',\n  },\n});\n\nexport default SummaryTable;\n\n\n","import React from 'react';\nimport { View, Text, StyleSheet, ViewStyle, TextStyle } from 'react-native';\n\nexport interface TagProps {\n  label: string;\n  backgroundColor?: string;\n  textColor?: string;\n  size?: 'small' | 'medium';\n  style?: ViewStyle;\n  textStyle?: TextStyle;\n}\n\nexport default function Tag({\n  label,\n  backgroundColor = '#E5E7EB', // gray-200\n  textColor = '#111827', // gray-900\n  size = 'medium',\n  style,\n  textStyle,\n}: TagProps) {\n  const sizeStyles = size === 'small'\n    ? { paddingVertical: 4, paddingHorizontal: 10, fontSize: 12 }\n    : { paddingVertical: 6, paddingHorizontal: 12, fontSize: 14 };\n\n  return (\n    <View\n      style={[\n        styles.container,\n        { backgroundColor, paddingVertical: sizeStyles.paddingVertical, paddingHorizontal: sizeStyles.paddingHorizontal },\n        style,\n      ]}\n    >\n      <Text style={[styles.text, { color: textColor, fontSize: sizeStyles.fontSize }, textStyle]}>{label}</Text>\n    </View>\n  );\n}\n\nconst styles = StyleSheet.create({\n  container: {\n    borderRadius: 9999,\n    alignSelf: 'flex-start',\n  },\n  text: {\n    fontWeight: '600',\n  },\n});\n\n\n","import React, { useCallback, useMemo, useState } from 'react';\nimport { Modal, Platform, StyleSheet, Text, TouchableOpacity, View } from 'react-native';\nimport DateTimePicker, { DateTimePickerEvent } from '@react-native-community/datetimepicker';\nimport { ClockIcon } from 'react-native-heroicons/outline';\n\nexport interface TimePickerProps {\n  label?: string;\n  value: string | null; // \"HH:mm\"\n  onChange: (value: string | null) => void;\n  open?: boolean;\n  onOpenChange?: (open: boolean) => void;\n  applyText?: string;\n  clearText?: string;\n  disabled?: boolean;\n  required?: boolean;\n}\n\n/**\n * TimePicker móvil simple basado en Modal + DateTimePicker\n * - iOS: inline dentro de un modal con botones Apply/Clear\n * - Android: usa el picker nativo y cierra al seleccionar\n */\nexport default function UiMobileTimePicker({\n  label,\n  value,\n  onChange,\n  open,\n  onOpenChange,\n  applyText = 'Aplicar',\n  clearText = 'Limpiar',\n  disabled = false,\n  required = false,\n}: TimePickerProps) {\n  const [internalOpen, setInternalOpen] = useState(false);\n  const isOpen = open ?? internalOpen;\n\n  const selected = useMemo(() => (value ? parseHHmm(value) : new Date()), [value]);\n\n  const setOpen = useCallback(\n    (next: boolean) => {\n      if (onOpenChange) onOpenChange(next);\n      else setInternalOpen(next);\n    },\n    [onOpenChange]\n  );\n\n  const handleAndroidChange = useCallback(\n    (event: DateTimePickerEvent, date?: Date) => {\n      if (event.type === 'dismissed') {\n        setOpen(false);\n        return;\n      }\n      if (date) {\n        onChange(formatHHmm(date));\n      }\n      setOpen(false);\n    },\n    [onChange, setOpen]\n  );\n\n  const handleIOSChange = useCallback(\n    (_: any, date?: Date) => {\n      if (date) {\n        onChange(formatHHmm(date));\n      }\n    },\n    [onChange]\n  );\n\n  const iconColor = useMemo(() => {\n    if (disabled) return '#D1D5DB';\n    return value ? '#6B7280' : '#9CA3AF';\n  }, [disabled, value]);\n\n  return (\n    <View>\n      {label ? (\n        <Text style={styles.label}>\n          {label}\n          {required ? <Text style={styles.required}> *</Text> : null}\n        </Text>\n      ) : null}\n      <TouchableOpacity\n        accessibilityRole=\"button\"\n        onPress={() => setOpen(true)}\n        activeOpacity={0.8}\n        style={[styles.trigger, disabled && styles.triggerDisabled]}\n        disabled={disabled}\n      >\n        <Text style={styles.triggerText}>{value ?? 'Seleccionar hora'}</Text>\n        <View style={styles.icon} pointerEvents=\"none\">\n          <ClockIcon size={20} color={iconColor} />\n        </View>\n      </TouchableOpacity>\n\n      {Platform.OS === 'android' ? (\n        isOpen ? (\n          <DateTimePicker value={selected} mode=\"time\" display=\"spinner\" onChange={handleAndroidChange} />\n        ) : null\n      ) : (\n        <Modal visible={isOpen} transparent animationType=\"slide\" onRequestClose={() => setOpen(false)}>\n          <View style={styles.backdrop}>\n            <View style={styles.sheet}>\n              <DateTimePicker value={selected} mode=\"time\" display=\"spinner\" onChange={handleIOSChange} />\n              <View style={styles.actions}>\n                <TouchableOpacity\n                  onPress={() => {\n                    onChange(null);\n                    setOpen(false);\n                  }}\n                  style={[styles.btn, styles.btnSecondary]}\n                  activeOpacity={0.9}\n                >\n                  <Text style={styles.btnSecondaryText}>{clearText}</Text>\n                </TouchableOpacity>\n                <TouchableOpacity\n                  onPress={() => {\n                    setOpen(false);\n                  }}\n                  style={[styles.btn, styles.btnPrimary]}\n                  activeOpacity={0.9}\n                >\n                  <Text style={styles.btnPrimaryText}>{applyText}</Text>\n                </TouchableOpacity>\n              </View>\n            </View>\n          </View>\n        </Modal>\n      )}\n    </View>\n  );\n}\n\nfunction formatHHmm(d: Date) {\n  const hh = String(d.getHours()).padStart(2, '0');\n  const mm = String(d.getMinutes()).padStart(2, '0');\n  return `${hh}:${mm}`;\n}\n\nfunction parseHHmm(v: string) {\n  const [hh, mm] = v.split(':');\n  const d = new Date();\n  d.setHours(Number(hh) || 0);\n  d.setMinutes(Number(mm) || 0);\n  d.setSeconds(0);\n  d.setMilliseconds(0);\n  return d;\n}\n\nconst styles = StyleSheet.create({\n  label: {\n    marginBottom: 6,\n    color: '#6B7280',\n    fontSize: 14,\n    fontWeight: '500',\n  },\n  required: {\n    color: '#FF0000',\n    fontSize: 14,\n    fontWeight: '600',\n  },\n  trigger: {\n    borderWidth: 1,\n    borderColor: '#D1D5DB',\n    borderRadius: 8,\n    backgroundColor: '#FFFFFF',\n    paddingVertical: 12,\n    paddingHorizontal: 14,\n    paddingRight: 44,\n    minHeight: 48,\n    justifyContent: 'center',\n  },\n  triggerText: {\n    color: '#111827',\n    fontSize: 16,\n  },\n  triggerDisabled: {\n    backgroundColor: '#F9FAFB',\n    borderColor: '#E5E7EB',\n  },\n  icon: {\n    position: 'absolute',\n    right: 12,\n    top: 0,\n    bottom: 0,\n    justifyContent: 'center',\n  },\n  backdrop: {\n    flex: 1,\n    backgroundColor: 'rgba(0,0,0,0.3)',\n    justifyContent: 'flex-end',\n  },\n  sheet: {\n    backgroundColor: '#FFF',\n    borderTopLeftRadius: 16,\n    borderTopRightRadius: 16,\n    padding: 16,\n  },\n  actions: {\n    marginTop: 12,\n    flexDirection: 'row',\n    gap: 8,\n  },\n  btn: {\n    flex: 1,\n    paddingVertical: 12,\n    borderRadius: 10,\n    alignItems: 'center',\n  },\n  btnSecondary: {\n    backgroundColor: '#6B7280',\n  },\n  btnSecondaryText: {\n    color: '#FFF',\n    fontWeight: '600',\n  },\n  btnPrimary: {\n    backgroundColor: '#1B418C',\n  },\n  btnPrimaryText: {\n    color: '#FFF',\n    fontWeight: '600',\n  },\n});\n\n\n","import { useMemo } from 'react';\n\nexport interface Anchor {\n  x: number;\n  y: number;\n  width: number;\n  height: number;\n}\n\nexport interface Viewport {\n  width: number;\n  height: number;\n}\n\nexport interface PositioningOptions {\n  anchor: Anchor | null;\n  viewport: Viewport;\n  maxMenuHeight: number;\n  headerHeight: number;\n  itemCount: number;\n  itemHeight?: number;\n  margin?: number;\n  offsetX?: number;\n  offsetY?: number;\n  direction?: 'auto' | 'up' | 'down';\n  menuHeight?: number; // Real measured height\n}\n\nexport function calculatePosition({\n  anchor,\n  viewport,\n  maxMenuHeight,\n  headerHeight,\n  itemCount,\n  itemHeight = 48,\n  margin = 16,\n  offsetX = 0,\n  offsetY = 0,\n  direction = 'auto',\n  menuHeight = 0,\n}: PositioningOptions) {\n  if (!anchor) return null;\n\n  const spaceBelow = viewport.height - (anchor.y + anchor.height) - margin;\n  const spaceAbove = anchor.y - margin;\n\n  // Estimate content height for direction decision only\n  const estimatedContentHeight = headerHeight + Math.max(1, itemCount) * itemHeight;\n  const estimatedHeight = Math.min(maxMenuHeight, estimatedContentHeight);\n\n  let openDown = true;\n  if (direction === 'down') {\n    openDown = true;\n  } else if (direction === 'up') {\n    openDown = false;\n  } else {\n    // auto logic: prefer down if it fits the estimated content, otherwise check up\n    if (spaceBelow >= estimatedHeight) {\n      openDown = true;\n    } else if (spaceAbove >= estimatedHeight) {\n      openDown = false;\n    } else {\n      openDown = spaceBelow >= spaceAbove;\n    }\n  }\n\n  const maxHeight = Math.min(maxMenuHeight, openDown ? spaceBelow : spaceAbove);\n  \n  // Use real menuHeight if available, otherwise fallback to estimated\n  const finalMenuHeight = menuHeight > 0 ? Math.min(menuHeight, maxHeight) : Math.min(estimatedHeight, maxHeight);\n\n  const rawTop = openDown ? anchor.y + anchor.height : anchor.y - finalMenuHeight;\n\n  // Boundary check for Y\n  const top = Math.max(\n    margin,\n    Math.min(\n      rawTop + offsetY,\n      viewport.height - margin - (openDown ? 0 : finalMenuHeight)\n    )\n  );\n\n  // X positioning logic\n  const rawLeft = anchor.x + offsetX;\n  const left = Math.max(\n    margin,\n    Math.min(rawLeft, viewport.width - anchor.width - margin)\n  );\n  const width = Math.min(anchor.width, viewport.width - left - margin);\n\n  return {\n    top,\n    left,\n    width,\n    maxHeight,\n    openDown,\n    isMeasured: menuHeight > 0,\n  };\n}\n\nexport function useSelectPositioning(options: PositioningOptions) {\n  return useMemo(() => calculatePosition(options), [\n    options.anchor,\n    options.viewport.width,\n    options.viewport.height,\n    options.maxMenuHeight,\n    options.headerHeight,\n    options.itemCount,\n    options.itemHeight,\n    options.margin,\n    options.offsetX,\n    options.offsetY,\n    options.direction,\n    options.menuHeight,\n  ]);\n}\n","import React, { createContext, useContext, useReducer, ReactNode, useCallback, useMemo } from 'react';\n\n// Definir la estructura de un item del breadcrumb\nexport interface BreadcrumbItem {\n  label: string;\n  navigateTo?:\n    | string\n    | {\n        name: string;\n        params?: Record<string, unknown>;\n        mode?: 'push' | 'replace' | 'reset';\n      };\n}\n\n// Definir el estado del breadcrumb\ninterface BreadcrumbState {\n  items: BreadcrumbItem[];\n  color?: string;\n}\n\n// Definir las acciones posibles\ntype BreadcrumbAction =\n  | { type: 'SET_BREADCRUMB'; payload: BreadcrumbItem[] }\n  | { type: 'SET_COLOR'; payload: string }\n  | { type: 'ADD_ITEM'; payload: BreadcrumbItem }\n  | { type: 'REMOVE_LAST_ITEM' }\n  | { type: 'CLEAR_BREADCRUMB' };\n\n// Estado inicial\nconst initialState: BreadcrumbState = {\n  items: [],\n  color: undefined,\n};\n\nconst noopDispatch: React.Dispatch<BreadcrumbAction> = () => undefined;\nconst noop = () => undefined;\n\n// Reducer para manejar las acciones\nfunction breadcrumbReducer(state: BreadcrumbState, action: BreadcrumbAction): BreadcrumbState {\n  switch (action.type) {\n    case 'SET_BREADCRUMB':\n      return {\n        ...state,\n        items: action.payload,\n      };\n    case 'SET_COLOR':\n      return {\n        ...state,\n        color: action.payload,\n      };\n    case 'ADD_ITEM':\n      return {\n        ...state,\n        items: [...state.items, action.payload],\n      };\n    case 'REMOVE_LAST_ITEM':\n      return {\n        ...state,\n        items: state.items.slice(0, -1),\n      };\n    case 'CLEAR_BREADCRUMB':\n      return {\n        ...state,\n        items: [],\n      };\n    default:\n      return state;\n  }\n}\n\n// Crear el contexto\ninterface BreadcrumbContextType {\n  state: BreadcrumbState;\n  dispatch: React.Dispatch<BreadcrumbAction>;\n  setBreadcrumb: (items: BreadcrumbItem[]) => void;\n  setColor: (color: string) => void;\n  addItem: (item: BreadcrumbItem) => void;\n  removeLastItem: () => void;\n  clearBreadcrumb: () => void;\n}\n\nconst BreadcrumbContext = createContext<BreadcrumbContextType | undefined>(undefined);\nconst FALLBACK_BREADCRUMB_CONTEXT: BreadcrumbContextType = {\n  state: initialState,\n  dispatch: noopDispatch,\n  setBreadcrumb: noop,\n  setColor: noop,\n  addItem: noop,\n  removeLastItem: noop,\n  clearBreadcrumb: noop,\n};\n\n// Provider del contexto\nexport function BreadcrumbProvider({ children }: { children: ReactNode }) {\n  const [state, dispatch] = useReducer(breadcrumbReducer, initialState);\n\n  // Funciones helper para facilitar el uso del contexto\n  const setBreadcrumb = useCallback((items: BreadcrumbItem[]) => {\n    dispatch({ type: 'SET_BREADCRUMB', payload: items });\n  }, [dispatch]);\n\n  const setColor = useCallback((color: string) => {\n    dispatch({ type: 'SET_COLOR', payload: color });\n  }, [dispatch]);\n\n  const addItem = useCallback((item: BreadcrumbItem) => {\n    dispatch({ type: 'ADD_ITEM', payload: item });\n  }, [dispatch]);\n\n  const removeLastItem = useCallback(() => {\n    dispatch({ type: 'REMOVE_LAST_ITEM' });\n  }, [dispatch]);\n\n  const clearBreadcrumb = useCallback(() => {\n    dispatch({ type: 'CLEAR_BREADCRUMB' });\n  }, [dispatch]);\n\n  const value = useMemo(\n    () => ({\n      state,\n      dispatch,\n      setBreadcrumb,\n      setColor,\n      addItem,\n      removeLastItem,\n      clearBreadcrumb,\n    }),\n    [state, dispatch, setBreadcrumb, setColor, addItem, removeLastItem, clearBreadcrumb]\n  );\n\n  return (\n    <BreadcrumbContext.Provider value={value}>\n      {children}\n    </BreadcrumbContext.Provider>\n  );\n}\n\n// Hook personalizado para usar el contexto\nexport function useBreadcrumb() {\n  const context = useContext(BreadcrumbContext);\n  return context ?? FALLBACK_BREADCRUMB_CONTEXT;\n}\n","// Hooks exportados\nexport { useNetworkStatus } from './useNetworkStatus';\nexport type { NetworkStatus } from './useNetworkStatus';\n\nexport { useToast } from './useToast';\n\n// Breadcrumb hooks y context (fuente única del tipo BreadcrumbItem)\nexport { BreadcrumbProvider as BreadcrumbContextProvider, useBreadcrumb } from './BreadcrumbContext';\nexport type { BreadcrumbItem } from './BreadcrumbContext';\n\nexport { useExitConfirmationGuard } from './useExitConfirmationGuard';\n","import React, { useCallback, useEffect, useRef, useState } from 'react';\nimport { useNavigation } from '@react-navigation/native';\nimport ConfirmationModal from '../components/confirmation-modal';\n\ntype ExitConfirmationCopy = {\n  title: string;\n  message: string;\n  confirmText?: string;\n  cancelText?: string;\n};\n\ntype UseExitConfirmationGuardParams = {\n  enabled?: boolean;\n  copy?: ExitConfirmationCopy;\n};\n\nconst DEFAULT_EXIT_CONFIRMATION_COPY: ExitConfirmationCopy = {\n  title: '¿Salir del formulario?',\n  message:\n    'Si sales ahora, perderás los datos ingresados. ¿Deseas continuar?',\n  confirmText: 'Sí, salir',\n  cancelText: 'No, permanecer',\n};\n\nexport function useExitConfirmationGuard({\n  enabled = true,\n  copy = DEFAULT_EXIT_CONFIRMATION_COPY,\n}: UseExitConfirmationGuardParams = {}) {\n  const navigation = useNavigation<any>();\n  const [isOpen, setIsOpen] = useState(false);\n  const pendingActionRef = useRef<any | null>(null);\n  const bypassOnceRef = useRef(false);\n\n  useEffect(() => {\n    if (!enabled) {\n      return;\n    }\n\n    const unsubscribe = navigation.addListener(\n      'beforeRemove',\n      (event: any) => {\n        if (bypassOnceRef.current) {\n          bypassOnceRef.current = false;\n          return;\n        }\n\n        event.preventDefault();\n        pendingActionRef.current = event.data.action;\n        setIsOpen(true);\n      },\n    );\n\n    return unsubscribe;\n  }, [enabled, navigation]);\n\n  const handleClose = useCallback(() => {\n    setIsOpen(false);\n    pendingActionRef.current = null;\n  }, []);\n\n  const handleConfirm = useCallback(() => {\n    const action = pendingActionRef.current;\n    setIsOpen(false);\n    pendingActionRef.current = null;\n\n    if (!action) {\n      return;\n    }\n\n    bypassOnceRef.current = true;\n    navigation.dispatch(action);\n  }, [navigation]);\n\n  return {\n    exitConfirmationModal: (\n      <ConfirmationModal\n        open={isOpen}\n        onClose={handleClose}\n        onConfirm={handleConfirm}\n        title={copy.title}\n        message={copy.message}\n        confirmText={copy.confirmText ?? 'Sí, salir'}\n        cancelText={copy.cancelText ?? 'No, permanecer'}\n      />\n    ),\n  };\n}\n\n","// Nota: 'use client' no aplica en React Native\nimport { useState, useEffect } from 'react';\nimport NetInfo, { NetInfoState, NetInfoStateType } from '@react-native-community/netinfo';\n\nexport type NetworkStatus = 'wifi' | 'cellular' | 'none' | 'unknown';\n\ninterface NetworkState {\n  status: NetworkStatus;\n  isConnected: boolean;\n}\n\nconst mapNetInfoTypeToStatus = (type: NetInfoStateType, isConnected: boolean): NetworkStatus => {\n  if (!isConnected) return 'none';\n  \n  switch (type) {\n    case NetInfoStateType.wifi:\n      return 'wifi';\n    case NetInfoStateType.cellular:\n      return 'cellular';\n    case NetInfoStateType.ethernet:\n      return 'wifi'; // Treat ethernet as wifi for consistency\n    case NetInfoStateType.bluetooth:\n    case NetInfoStateType.wimax:\n    case NetInfoStateType.vpn:\n    case NetInfoStateType.other:\n      return 'wifi'; // Default to wifi for other connection types\n    case NetInfoStateType.none:\n    case NetInfoStateType.unknown:\n    default:\n      return isConnected ? 'unknown' : 'none';\n  }\n};\n\nexport const useNetworkStatus = () => {\n  const [networkState, setNetworkState] = useState<NetworkState>({\n    status: 'unknown',\n    isConnected: false,\n  });\n\n  useEffect(() => {\n    let mounted = true;\n\n    // Get initial network state\n    NetInfo.fetch().then((state: NetInfoState) => {\n      if (mounted) {\n        const isConnected = state.isConnected ?? false;\n        const status = mapNetInfoTypeToStatus(state.type, isConnected);\n        \n        setNetworkState({\n          status,\n          isConnected\n        });\n      }\n    }).catch(() => {\n      if (mounted) {\n        setNetworkState({\n          status: 'unknown',\n          isConnected: false,\n        });\n      }\n    });\n\n    // Subscribe to network state changes\n    const unsubscribe = NetInfo.addEventListener((state: NetInfoState) => {\n      if (mounted) {\n        const isConnected = state.isConnected ?? false;\n        const status = mapNetInfoTypeToStatus(state.type, isConnected);\n        \n        setNetworkState({\n          status,\n          isConnected\n        });\n      }\n    });\n\n    // Cleanup function\n    return () => {\n      mounted = false;\n      unsubscribe();\n    };\n  }, []);\n\n  return networkState;\n};\n","import { useMemo } from 'react';\nimport Toast from 'react-native-toast-message';\n\n/**\n * API mínima compatible con consumidores que aún importan el hook desde ui-mobile.\n * Implementación directa sobre react-native-toast-message (sin contexto propio).\n */\nexport function useToast() {\n  return useMemo(\n    () => ({\n      show: (params: Parameters<typeof Toast.show>[0]) => Toast.show(params),\n      hide: () => Toast.hide(),\n    }),\n    [],\n  );\n}\n","// Exportar todos los componentes\nexport * from \"./components\";\n\n// Exportar todos los hooks\nexport * from \"./hooks\";\n\n// Nota: If you need to use the native module, uncomment the following code\n// import UiMobile from './NativeUiMobile';\n// export function multiply(a: number, b: number): number {\n//   return UiMobile.multiply(a, b);\n// }\n"],"names":["useClientConfig","useConfig","config","defaultConfig","useMemo","configService","getDefaultConfig","useTheme","primaryColor","API_BASE_URL","API_FILE_SERVER","undefined","DEFAULT_ROUTE_CONFIG","Home","label","DataLoading","DailyReport","parent","LabReport","OdsView","ReportHistory","SyncData","BreadcrumbProvider","children","routeConfig","color","currentRouteName","setBreadcrumb","setColor","clearBreadcrumb","useBreadcrumb","useEffect","buildBreadcrumb","routeName","route","breadcrumbItems","parentItems","push","navigateTo","length","Breadcrumb","breadcrumbContext","propItems","items","propColor","showDropdown","setShowDropdown","useState","navigation","useNavigation","timer","setTimeout","clearTimeout","state","handleNavigate","nav","canGoBack","name","popToTop","mode","navigate","params","dispatch","CommonActions","reset","index","routes","merge","ArrowRightIcon","ChevronRightIcon","size","View","style","styles","container","map","item","idx","Fragment","Text","lastItem","TouchableOpacity","clickableItem","onPress","activeOpacity","clickableText","first","last","middle","slice","wrapper","dropdownContainer","dropdownButton","dropdownText","Modal","visible","transparent","animationType","statusBarTranslucent","onRequestClose","modalContainer","Pressable","overlay","dropdownMenu","dropdownItem","dropdownItemText","StyleSheet","create","position","zIndex","width","backgroundColor","flexDirection","justifyContent","alignItems","gap","paddingHorizontal","paddingVertical","borderRadius","fontSize","fontWeight","arrowIcon","top","left","borderWidth","borderColor","shadowColor","shadowOffset","height","shadowOpacity","shadowRadius","elevation","minWidth","flex","borderBottomWidth","borderBottomColor","Checkbox","checked","onChange","disabled","required","accessibilityRole","accessibilityState","row","box","tick","opacity","ConfirmationModal","open","onClose","onConfirm","title","message","confirmText","cancelText","useRef","Animated","Value","current","scale","parallel","timing","toValue","duration","easing","Easing","out","ease","useNativeDriver","start","setValue","backdrop","panelWrapper","transform","panel","header","accessibilityLabel","iconBtn","XMarkIcon","body","footer","btn","btnDanger","btnDangerText","btnSecondary","btnSecondaryText","right","bottom","overflow","paddingTop","paddingBottom","padding","UiMobileDatePicker","value","onApply","onClear","onMonthChange","onOpenChange","applyText","clearText","internalOpen","setInternalOpen","isOpen","Date","pickerDate","setPickerDate","React","d","dd","mm","yy","setOpen","useCallback","next","handleAndroidChange","event","date","type","handleIOSChange","_","iconColor","trigger","triggerDisabled","triggerText","String","getDate","padStart","getMonth","getFullYear","calendarIcon","pointerEvents","CalendarIcon","Platform","OS","display","sheet","actions","btnPrimary","btnPrimaryText","marginBottom","paddingRight","minHeight","borderTopLeftRadius","borderTopRightRadius","marginTop","WEEKDAYS","Calendar","CalendarProps","currentDate","startDate","endDate","minDate","maxDate","onSelectDate","days","startOfMonth","startOf","endOfMonth","endOf","dayOfWeek","day","calendarDays","i","subtract","isCurrentMonth","totalDaysInMonth","daysInMonth","remainingDays","add","onPrevMonth","handlePrevMonth","onNextMonth","handleNextMonth","weekdays","weekdayText","grid","isSelected","isSame","isStart","isEnd","isInRange","isAfter","isBefore","isDisabled","isToday","dayjs","toISOString","textAlign","textTransform","flexWrap","memo","QUICK_FILTERS","DateRangePicker","DateRangePickerProps","onStartDateChange","onEndDateChange","onDateRangeChange","loading","locale","format","placeholder","setIsOpen","setCurrentDate","activeQuickFilter","setActiveQuickFilter","internalRange","setInternalRange","handleSelectDate","nativeDate","toDate","prev","displayValue","triggerContent","placeholderText","ActivityIndicator","sheetHeader","sheetTitle","quickFiltersContainer","filter","quickFilterBtn","quickFilterBtnActive","handleQuickFilterPress","Dayjs","end","selected","quickFilterText","quickFilterTextActive","handleClear","emptyRange","handleApply","btnDisabled","maxHeight","Day","DayProps","containerStyles","selectionStyles","selection","textStyles","text","notCurrentMonthText","selectedText","disabledText","todayText","rangeBackgroundContainer","rangeBackground","rangeStartFill","rangeEndFill","todayDot","aspectRatio","margin","Header","HeaderProps","button","ChevronLeftIcon","titleContainer","charAt","toUpperCase","FieldGroup","errorText","labelStyle","group","error","FolderIconButton","sizeStyles","getSizeStyles","smallContainer","folder","smallFolder","tab","smallTab","smallLabel","largeContainer","largeFolder","largeTab","largeLabel","mediumContainer","mediumFolder","mediumTab","mediumLabel","handlePress","folderContainer","folderBack","folderTab","disabledLabel","lineHeight","FormBox","titleStyle","IconCardButton","icon","isConnected","onOfflinePress","textStyle","isEffectivelyDisabled","containerStyle","textColor","iconNode","isValidElement","cloneElement","iconText","content","iconContainer","BreadcrumbRouteProvider","DatePicker","LoadingSpinner","MenuItem","MobileTable","NetworkIndicator","NumericField","ODSWidget","ProgressBar","RadioGroup","SearchInput","SearchableSelect","Select","SkeletonLoader","StatCard","StatusButton","SummaryTable","Tag","TimePicker","Card","titleKey","accentColor","onEdit","hasActions","cardStyle","entries","Object","toString","k","toSummaryItems","resolvedActions","card","numberOfLines","actionsRow","action","actionBtn","showLabel","actionText","key","editBtn","editText","data","onRowClick","headerComponent","footerComponent","contentContainerStyle","ListEmptyComponent","scrollEnabled","getCardTitle","getCardSubtitle","isItemSelected","getActions","onScroll","onScrollBeginDrag","stickyHeaderIndices","FlatList","keyExtractor","it","id","renderItem","selectedCard","selectedTitle","ItemSeparatorComponent","sep","ListHeaderComponent","ListFooterComponent","nestedScrollEnabled","keyboardShouldPersistTaps","contentInsetAdjustmentBehavior","rowGap","marginRight","networkInfo","getNetworkInfo","status","ExclamationTriangleIcon","containerDisconnected","textDisconnected","WifiIcon","containerWifi","textWifi","SignalIcon","containerCellular","textCellular","QuestionMarkCircleIcon","containerUnknown","textUnknown","useNetworkStatus","unit","onlyIntegers","touched","inputStyle","unitTextStyle","showError","Boolean","fieldRow","TextInput","onChangeText","numeric","replace","normalized","parts","split","join","editable","keyboardType","input","DocumentIcon","viewBox","fill","stroke","strokeWidth","strokeLinecap","strokeLinejoin","Path","PlusIcon","onViewODS","onCreateODS","handleViewODS","leftSection","textContainer","subtitle","actionButtonContainer","handleCreateODS","actionButton","actionButtonText","textShadowColor","textShadowOffset","textShadowRadius","progressColor","rounded","clamped","Math","max","min","Number","isFinite","radius","track","accessible","accessibilityValue","now","options","selectedValue","onValueChange","optionStyle","opt","pillOption","optionRow","pillLabel","inputWrapper","MagnifyingGlassIcon","searchIcon","placeholderTextColor","autoCorrect","autoCapitalize","clearButton","emptyStateText","loadingMessage","searchPlaceholder","minSearchLength","direction","query","setQuery","hasNoOptions","emptyOptionsMessage","selectIsDisabled","selectPlaceholder","filtered","q","trim","toLowerCase","o","includes","menuStyle","menu","headerHeight","searchBox","hint","SelectContext","createContext","ctx","useContext","onSelect","itemSelected","itemDisabled","itemText","itemTextSelected","triggerStyle","maxMenuHeight","offsetX","offsetY","menuHeight","setMenuHeight","anchor","setAnchor","openerRef","animValue","windowDims","Dimensions","get","emptyMessage","selectableItemsCount","count","Children","forEach","child","childProps","props","prototype","hasOwnProperty","call","effectiveDisabled","effectivePlaceholder","openMenu","InteractionManager","runAfterInteractions","requestAnimationFrame","measureInWindow","x","y","closeMenu","sub","addEventListener","remove","displayLabel","labelText","nextValue","toArray","computedMenu","useSelectPositioning","viewport","itemCount","isMeasured","ref","ChevronUpDownIcon","presentationStyle","TouchableWithoutFeedback","onLayout","e","nativeEvent","layout","translateY","interpolate","inputRange","outputRange","openDown","Provider","menuInner","ScrollView","scrollContainer","showsVerticalScrollIndicator","pulse","loop","sequence","stop","skeleton","badge","valueStyle","iconSlot","iconWrap","toneToStyle","tone","badgeText","loadingTitle","loadingColor","leftIcon","rightIcon","disabledButton","loadingContainer","spinner","buttonText","adjustsFontSizeToFit","minimumFontScale","contentRow","iconLeft","iconRight","flexShrink","marginLeft","leftBackgroundColor","rowDivider","cellLeft","leftBg","leftBgTop","leftBgBottom","cellRight","renderValue","boxShadow","paddingStart","borderBottomLeftRadius","alignSelf","UiMobileTimePicker","v","hh","setHours","setMinutes","setSeconds","setMilliseconds","DateTimePickerEvent","formatHHmm","ClockIcon","getHours","getMinutes","calculatePosition","itemHeight","spaceBelow","spaceAbove","estimatedContentHeight","estimatedHeight","finalMenuHeight","rawTop","rawLeft","initialState","noop","breadcrumbReducer","BreadcrumbState","payload","BreadcrumbContext","FALLBACK_BREADCRUMB_CONTEXT","noopDispatch","addItem","removeLastItem","useReducer","context","BreadcrumbContextProvider","useExitConfirmationGuard","useToast","DEFAULT_EXIT_CONFIRMATION_COPY","enabled","copy","pendingActionRef","bypassOnceRef","addListener","preventDefault","handleClose","handleConfirm","exitConfirmationModal","mapNetInfoTypeToStatus","NetInfoStateType","wifi","cellular","ethernet","bluetooth","wimax","vpn","other","none","unknown","networkState","setNetworkState","mounted","NetInfo","fetch","then","catch","unsubscribe","show","Toast","hide"],"mappings":"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"}