{"version":3,"file":"src_App_tsx.chunk.bundle","sources":["/Users/claudiobaiardi/Documents/GitHub/aldyl/dataoil-app/apps/data-oil-app/machinery/src/App.tsx","/Users/claudiobaiardi/Documents/GitHub/aldyl/dataoil-app/apps/data-oil-app/machinery/src/components/StatusCounters.tsx","/Users/claudiobaiardi/Documents/GitHub/aldyl/dataoil-app/node_modules/.pnpm/@swc+helpers@0.5.21/node_modules/@swc/helpers/cjs/_async_to_generator.cjs","/Users/claudiobaiardi/Documents/GitHub/aldyl/dataoil-app/node_modules/.pnpm/@swc+helpers@0.5.21/node_modules/@swc/helpers/cjs/_interop_require_default.cjs","/Users/claudiobaiardi/Documents/GitHub/aldyl/dataoil-app/packages/mfe-runtime/src/index.ts","/Users/claudiobaiardi/Documents/GitHub/aldyl/dataoil-app/packages/mfe-runtime/src/mfeCacheBust.ts"],"sourcesContent":["import React, { useMemo, useState, useEffect, useCallback } from 'react';\nimport {\n  StyleSheet,\n  Text,\n  View,\n  TextInput,\n  TouchableOpacity,\n} from 'react-native';\nimport {\n  SafeAreaProvider,\n  useSafeAreaInsets,\n} from 'react-native-safe-area-context';\nimport { useFocusEffect, useNavigation } from '@react-navigation/native';\nimport dayjs from 'dayjs';\nimport utc from 'dayjs/plugin/utc';\nimport {\n  MobileTable,\n  SearchableSelect,\n  LoadingSpinner,\n} from '@data-oil-front/ui-mobile';\nimport {\n  fetchMachineryList,\n  fetchMachineryLocations,\n  fetchMachineryFuelLoads,\n  fetchFuelTankStock,\n  fetchMachineryFuelArrivals,\n  getLastFuelLoadsByMachinery,\n  getLastFuelArrivalsByTankId,\n  createLocationsMap,\n  type MachineryData,\n  type MachineryFuelLoad,\n  type MachineryFuelArrival,\n  type FuelTankStock,\n} from '@data-oil-front/core-machinery';\nimport { useTheme } from '@data-oil-front/core-host';\nimport { MACHINERY_SCREENS } from '@data-oil-front/core-utils';\nimport { runMfeCacheBustIfNeeded } from '@data-oil-front/mfe-runtime';\nimport StatusCounters from './components/StatusCounters';\nimport StatusDot, { type MachineStatus } from './components/StatusDot';\n\ndayjs.extend(utc);\n\nfunction formatFuelArrivalDisplayDate(arrivalDate: string): string {\n  const d = dayjs(arrivalDate);\n  if (!d.isValid()) return '—';\n  const hourUTC = d.utc().hour();\n  const minuteUTC = d.utc().minute();\n  if (hourUTC === 0 && minuteUTC === 0) {\n    return d.format('DD/MM/YYYY');\n  }\n  return d.utc().format('DD/MM/YYYY HH:mm');\n}\n\ntype MachineStatusAPI = 'operational' | 'maintenance' | 'inactive';\n\nconst statusMap: Record<MachineStatusAPI, MachineStatus> = {\n  operational: 'operativa',\n  maintenance: 'mantenimiento',\n  inactive: 'inactiva',\n};\n\ntype LastFuelLoad = MachineryFuelLoad;\n\nfunction AppContent() {\n  const navigation = useNavigation();\n  const insets = useSafeAreaInsets();\n  const { primaryColor } = useTheme();\n\n  const [filters, setFilters] = useState<{ status: MachineStatus | 'Todos' }>({\n    status: 'Todos',\n  });\n  const [query, setQuery] = useState<string>('');\n  const [machineryList, setMachineryList] = useState<MachineryData[]>([]);\n  const [lastFuelLoads, setLastFuelLoads] = useState<Map<number, LastFuelLoad>>(\n    new Map(),\n  );\n  const [locations, setLocations] = useState<Map<number | string, string>>(\n    new Map(),\n  );\n  const [loading, setLoading] = useState<boolean>(true);\n  const [error, setError] = useState<string | null>(null);\n  const [tankStocks, setTankStocks] = useState<FuelTankStock[]>([]);\n  const [stockLoading, setStockLoading] = useState<boolean>(true);\n  const [stockError, setStockError] = useState<string | null>(null);\n  const [lastArrivalsByTank, setLastArrivalsByTank] = useState<\n    Map<number, MachineryFuelArrival>\n  >(new Map());\n\n  const loadMachineryData = useCallback(async () => {\n    setLoading(true);\n    setError(null);\n\n    try {\n      const machineryData = await fetchMachineryList();\n      setMachineryList(Array.isArray(machineryData) ? machineryData : []);\n\n      const locationData = await fetchMachineryLocations();\n      if (Array.isArray(locationData)) {\n        const locationsMap = createLocationsMap(locationData);\n        setLocations(locationsMap);\n      }\n\n      const fuelData = await fetchMachineryFuelLoads();\n      if (Array.isArray(fuelData)) {\n        const fuelLoadsMap = getLastFuelLoadsByMachinery(fuelData);\n        setLastFuelLoads(fuelLoadsMap);\n      }\n\n      try {\n        setStockLoading(true);\n        setStockError(null);\n        const [stockData, arrivalsData] = await Promise.all([\n          fetchFuelTankStock(),\n          fetchMachineryFuelArrivals().catch(() => [] as MachineryFuelArrival[]),\n        ]);\n        setTankStocks(Array.isArray(stockData) ? stockData : []);\n        setLastArrivalsByTank(\n          Array.isArray(arrivalsData)\n            ? getLastFuelArrivalsByTankId(arrivalsData)\n            : new Map(),\n        );\n      } catch (stockErr: any) {\n        setTankStocks([]);\n        setLastArrivalsByTank(new Map());\n        setStockError(stockErr?.message || 'No se pudo cargar el stock');\n      } finally {\n        setStockLoading(false);\n      }\n    } catch (err: any) {\n      console.error('Error al cargar maquinarias:', err);\n      setError(\n        err.message ||\n          'Error al cargar las maquinarias. Por favor, intente nuevamente.',\n      );\n      setMachineryList([]);\n    } finally {\n      setLoading(false);\n    }\n  }, []);\n\n  useEffect(() => {\n    loadMachineryData();\n  }, [loadMachineryData]);\n\n  useFocusEffect(\n    useCallback(() => {\n      loadMachineryData();\n    }, [loadMachineryData]),\n  );\n\n  const data = useMemo(() => {\n    return machineryList.map(machinery => {\n      const machineName =\n        machinery.name ||\n        machinery.machine_name ||\n        machinery.machinery_name ||\n        machinery.description ||\n        'Sin nombre';\n      const plate = machinery.plate || 'Sin placa';\n      const apiStatus = machinery.status || 'inactive';\n      const status = statusMap[apiStatus as MachineStatusAPI] || 'inactiva';\n\n      let locationName = '—';\n      if (machinery.location_id) {\n        const locId =\n          typeof machinery.location_id === 'string'\n            ? parseInt(machinery.location_id, 10)\n            : machinery.location_id;\n        locationName =\n          locations.get(locId) || locations.get(machinery.location_id) || '—';\n      }\n\n      const lastLoad = lastFuelLoads.get(machinery.id);\n      let ultCarga = '—';\n      let fechaUltCarga = '—';\n\n      if (lastLoad) {\n        ultCarga = `${lastLoad.load_quantity} L`;\n\n        const loadDate = dayjs(lastLoad.load_date);\n        if (loadDate.isValid()) {\n          const hourUTC = loadDate.utc().hour();\n          const minuteUTC = loadDate.utc().minute();\n\n          if (hourUTC === 0 && minuteUTC === 0) {\n            fechaUltCarga = loadDate.format('DD/MM/YYYY');\n          } else {\n            fechaUltCarga = loadDate.utc().format('DD/MM/YYYY HH:mm');\n          }\n        }\n      }\n\n      return {\n        id: machinery.id,\n        Máquina: machineName,\n        Status: (\n          <View style={styles.statusContainer}>\n            <StatusDot status={status} size={10} />\n            <Text style={styles.statusText}>{status}</Text>\n          </View>\n        ),\n        StatusValue: status,\n        Ubicación: locationName,\n        Placa: plate,\n        'Últ. carga': ultCarga,\n        'Fecha Ult. carga': fechaUltCarga,\n      } as Record<string, any>;\n    });\n  }, [machineryList, lastFuelLoads, locations]);\n\n  const filtered = useMemo(() => {\n    return data.filter(r => {\n      const byStatus =\n        filters.status === 'Todos' || r.StatusValue === filters.status;\n      const q = query.trim().toLowerCase();\n      const byQuery =\n        q === '' ||\n        String(r['Máquina']).toLowerCase().includes(q) ||\n        String(r.Placa).toLowerCase().includes(q);\n      return byStatus && byQuery;\n    });\n  }, [data, filters, query]);\n\n  const counters = useMemo(() => {\n    const totalOperativas = filtered.filter(\n      r => r.StatusValue === 'operativa',\n    ).length;\n    const totalMantenimiento = filtered.filter(\n      r => r.StatusValue === 'mantenimiento',\n    ).length;\n    const totalInactivas = filtered.filter(\n      r => r.StatusValue === 'inactiva',\n    ).length;\n    return { totalOperativas, totalMantenimiento, totalInactivas };\n  }, [filtered]);\n\n  const headerComponent = (\n    <View style={styles.headerContainer}>\n      <Text style={[styles.title, { color: primaryColor }]}>\n        Panel de maquinaria\n      </Text>\n\n      <StatusCounters\n        totalOperativas={counters.totalOperativas}\n        totalMantenimiento={counters.totalMantenimiento}\n        totalInactivas={counters.totalInactivas}\n      />\n\n      <View style={styles.stockCard}>\n        <Text style={styles.stockCardTitle}>Stock de combustible</Text>\n        <View style={styles.stockRow}>\n          {stockLoading ? (\n            <View style={styles.stockLoadingItem}>\n              <LoadingSpinner size=\"small\" color={primaryColor} />\n            </View>\n          ) : tankStocks.length > 0 ? (\n            tankStocks.map(tank => {\n              const lastArrival = lastArrivalsByTank.get(Number(tank.id));\n              const lastLiters =\n                lastArrival != null\n                  ? (typeof lastArrival.liters === 'number'\n                      ? lastArrival.liters\n                      : parseFloat(String(lastArrival.liters)))?.toLocaleString?.(\n                      'es-AR',\n                    ) || '—'\n                  : '—';\n              const lastDate =\n                lastArrival?.arrival_date != null\n                  ? formatFuelArrivalDisplayDate(String(lastArrival.arrival_date))\n                  : '—';\n              return (\n                <View key={tank.id} style={styles.stockItem}>\n                  <Text style={styles.stockFuelType} numberOfLines={1}>\n                    {tank.fuel_type?.charAt(0).toUpperCase() +\n                      tank.fuel_type?.slice(1)}\n                  </Text>\n                  <Text\n                    style={[styles.stockValue, { color: primaryColor }]}\n                    numberOfLines={1}\n                    adjustsFontSizeToFit\n                    minimumFontScale={0.7}\n                  >\n                    {(typeof tank.stock_actual === 'number'\n                      ? tank.stock_actual\n                      : parseFloat(String(tank.stock_actual)))?.toLocaleString?.(\n                      'es-AR',\n                    ) || '—'}{' '}\n                    L\n                  </Text>\n                  <View style={styles.stockDetailBlock}>\n                    <Text style={styles.stockDetailLabel}>Últ. fecha</Text>\n                    <Text\n                      style={styles.stockDetailValue}\n                      numberOfLines={2}\n                      adjustsFontSizeToFit\n                      minimumFontScale={0.85}\n                    >\n                      {lastDate}\n                    </Text>\n                  </View>\n                  <View style={styles.stockDetailBlock}>\n                    <Text style={styles.stockDetailLabel}>Últ. cant.</Text>\n                    <Text\n                      style={styles.stockDetailValue}\n                      numberOfLines={1}\n                      adjustsFontSizeToFit\n                      minimumFontScale={0.85}\n                    >\n                      {lastLiters === '—' ? '—' : `${lastLiters} L`}\n                    </Text>\n                  </View>\n                </View>\n              );\n            })\n          ) : stockError ? (\n            <View style={styles.stockErrorBox}>\n              <Text style={styles.stockErrorText}>\n                No se pudo cargar el stock de combustible\n              </Text>\n            </View>\n          ) : (\n            <Text style={styles.stockEmptyText}>Sin datos de stock</Text>\n          )}\n        </View>\n      </View>\n\n      <TouchableOpacity\n        style={[styles.fuelArrivalButton, { backgroundColor: primaryColor }]}\n        activeOpacity={0.85}\n        accessibilityLabel=\"Registrar llegada de combustible\"\n        onPress={() => {\n          // @ts-ignore\n          navigation.navigate(MACHINERY_SCREENS.FUEL_ARRIVAL);\n        }}\n      >\n        <Text\n          style={styles.fuelArrivalButtonText}\n          numberOfLines={1}\n          adjustsFontSizeToFit\n          minimumFontScale={0.75}\n        >\n          Registrar llegada de combustible\n        </Text>\n      </TouchableOpacity>\n\n      <View style={styles.filtersCard}>\n        <Text style={styles.filtersTitle}>Filtros</Text>\n        <View style={styles.filtersContent}>\n          <View style={styles.searchContainer}>\n            <TextInput\n              style={[styles.searchInput, { paddingRight: query ? 40 : 12 }]}\n              value={query}\n              onChangeText={setQuery}\n              placeholder=\"Buscar por nombre o placa\"\n              placeholderTextColor=\"#9CA3AF\"\n            />\n            {query ? (\n              <TouchableOpacity\n                onPress={() => setQuery('')}\n                style={styles.clearButton}\n                accessibilityLabel=\"Limpiar búsqueda\"\n              >\n                <Text style={styles.clearButtonText}>✕</Text>\n              </TouchableOpacity>\n            ) : null}\n          </View>\n          <View style={styles.selectContainer}>\n            <SearchableSelect\n              label=\"Status\"\n              selectedValue={filters.status}\n              onValueChange={value =>\n                setFilters(prev => ({ ...prev, status: String(value) as any }))\n              }\n              options={[\n                { value: 'Todos', label: 'Todos' },\n                { value: 'operativa', label: 'Operativas' },\n                { value: 'mantenimiento', label: 'Mantenimiento' },\n                { value: 'inactiva', label: 'Inactivas' },\n              ]}\n              placeholder=\"Status\"\n              minSearchLength={0}\n            />\n          </View>\n        </View>\n      </View>\n    </View>\n  );\n\n  const emptyComponent = (\n    <View style={styles.emptyBox}>\n      <Text style={styles.emptyIcon}>🔧</Text>\n      <Text style={styles.emptyText}>No se encontraron maquinarias</Text>\n    </View>\n  );\n\n  const loadingComponent = (\n    <View style={styles.loadingBox}>\n      <LoadingSpinner size=\"large\" color={primaryColor} />\n      <Text style={styles.loadingText}>Cargando maquinarias...</Text>\n    </View>\n  );\n\n  const errorComponent = (\n    <View style={styles.errorContainer}>\n      <Text style={styles.errorTitle}>Error al cargar las maquinarias</Text>\n      <Text style={styles.errorSubtitle}>\n        Verifica tu conexión o inténtalo nuevamente.\n      </Text>\n      <View style={styles.errorMessageBox}>\n        <Text style={styles.errorMessageText} numberOfLines={3}>\n          {error || 'Error desconocido'}\n        </Text>\n      </View>\n      <TouchableOpacity\n        onPress={loadMachineryData}\n        activeOpacity={0.8}\n        style={[styles.errorRetryButton, { backgroundColor: primaryColor }]}\n      >\n        <Text style={styles.errorRetryButtonText}>Reintentar</Text>\n      </TouchableOpacity>\n    </View>\n  );\n\n  return (\n    <SafeAreaProvider>\n      <View style={[styles.screen, { paddingTop: insets.top }]}>\n        <MobileTable\n          style={styles.table}\n          contentContainerStyle={{\n            ...styles.contentContainer,\n            paddingBottom: insets.bottom + 16,\n          }}\n          headerComponent={headerComponent}\n          ListEmptyComponent={\n            loading ? loadingComponent : error ? errorComponent : emptyComponent\n          }\n          data={filtered.map(r => ({\n            id: r.id,\n            Máquina: r['Máquina'],\n            Status: r.Status,\n            Ubicación: r.Ubicación,\n            Placa: r.Placa,\n            'Últ. carga': r['Últ. carga'],\n            'Fecha Ult. carga': r['Fecha Ult. carga'],\n          }))}\n          titleKey=\"Máquina\"\n          onRowClick={item => {\n            // @ts-ignore\n            navigation.navigate(MACHINERY_SCREENS.PREVIEW, { id: item.id });\n          }}\n          accentColor={primaryColor}\n        />\n      </View>\n    </SafeAreaProvider>\n  );\n}\n\nfunction App() {\n  useEffect(() => {\n    runMfeCacheBustIfNeeded().catch(() => undefined);\n  }, []);\n\n  return (\n    <SafeAreaProvider>\n      <AppContent />\n    </SafeAreaProvider>\n  );\n}\n\nconst styles = StyleSheet.create({\n  screen: {\n    flex: 1,\n    backgroundColor: '#F9FAFB',\n  },\n  table: {\n    flex: 1,\n  },\n  contentContainer: {\n    paddingHorizontal: 12,\n    paddingTop: 12,\n  },\n  headerContainer: {\n    paddingHorizontal: 4,\n    paddingVertical: 12,\n  },\n  title: {\n    fontSize: 24,\n    fontWeight: '700',\n    marginBottom: 16,\n  },\n  stockCard: {\n    marginTop: 16,\n    borderRadius: 12,\n    borderWidth: 1,\n    borderColor: '#E5E7EB',\n    backgroundColor: '#FFFFFF',\n    padding: 16,\n    shadowColor: '#000',\n    shadowOffset: { width: 0, height: 1 },\n    shadowOpacity: 0.05,\n    shadowRadius: 2,\n    elevation: 2,\n  },\n  stockCardTitle: {\n    fontSize: 16,\n    fontWeight: '700',\n    color: '#111827',\n    marginBottom: 12,\n  },\n  stockRow: {\n    flexDirection: 'row',\n    gap: 12,\n  },\n  stockItem: {\n    flex: 1,\n    minWidth: 0,\n    borderRadius: 10,\n    backgroundColor: '#F9FAFB',\n    padding: 12,\n    borderWidth: 1,\n    borderColor: '#F3F4F6',\n  },\n  stockFuelType: {\n    fontSize: 13,\n    fontWeight: '700',\n    color: '#374151',\n    textTransform: 'capitalize',\n    marginBottom: 4,\n  },\n  stockValue: {\n    fontSize: 22,\n    fontWeight: '800',\n    marginBottom: 6,\n  },\n  stockDetailBlock: {\n    marginTop: 6,\n  },\n  stockDetailLabel: {\n    fontSize: 10,\n    color: '#6B7280',\n    textTransform: 'uppercase',\n    letterSpacing: 0.3,\n    marginBottom: 2,\n  },\n  stockDetailValue: {\n    fontSize: 12,\n    fontWeight: '600',\n    color: '#374151',\n  },\n  stockEmptyText: {\n    fontSize: 13,\n    color: '#6B7280',\n  },\n  stockLoadingItem: {\n    flex: 1,\n    borderRadius: 10,\n    backgroundColor: '#F9FAFB',\n    padding: 12,\n    borderWidth: 1,\n    borderColor: '#F3F4F6',\n    minHeight: 110,\n    alignItems: 'center',\n    justifyContent: 'center',\n    gap: 8,\n  },\n  stockLoadingText: {\n    fontSize: 12,\n    color: '#6B7280',\n  },\n  stockErrorBox: {\n    borderRadius: 8,\n    borderWidth: 1,\n    borderColor: '#FECACA',\n    backgroundColor: '#FEF2F2',\n    padding: 10,\n    width: '100%',\n  },\n  stockErrorText: {\n    fontSize: 12,\n    color: '#991B1B',\n  },\n  fuelArrivalButton: {\n    marginTop: 16,\n    borderRadius: 10,\n    paddingHorizontal: 14,\n    paddingVertical: 12,\n    alignItems: 'center',\n    alignSelf: 'stretch',\n  },\n  fuelArrivalButtonText: {\n    color: '#FFFFFF',\n    fontSize: 15,\n    fontWeight: '700',\n    textAlign: 'center',\n    width: '100%',\n  },\n  filtersCard: {\n    marginTop: 16,\n    borderRadius: 12,\n    borderWidth: 1,\n    borderColor: '#E5E7EB',\n    backgroundColor: '#FFFFFF',\n    padding: 16,\n    shadowColor: '#000',\n    shadowOffset: { width: 0, height: 1 },\n    shadowOpacity: 0.05,\n    shadowRadius: 2,\n    elevation: 2,\n  },\n  filtersTitle: {\n    fontSize: 18,\n    fontWeight: '700',\n    color: '#111827',\n    marginBottom: 16,\n  },\n  filtersContent: {\n    gap: 16,\n  },\n  searchContainer: {\n    position: 'relative',\n  },\n  searchInput: {\n    width: '100%',\n    height: 44,\n    borderWidth: 1,\n    borderColor: '#D1D5DB',\n    borderRadius: 8,\n    paddingHorizontal: 12,\n    fontSize: 14,\n    color: '#111827',\n    backgroundColor: '#FFFFFF',\n  },\n  clearButton: {\n    position: 'absolute',\n    right: 8,\n    top: '50%',\n    transform: [{ translateY: -12 }],\n    width: 24,\n    height: 24,\n    alignItems: 'center',\n    justifyContent: 'center',\n  },\n  clearButtonText: {\n    fontSize: 16,\n    color: '#6B7280',\n  },\n  selectContainer: {\n    width: '100%',\n  },\n  statusContainer: {\n    flexDirection: 'row',\n    alignItems: 'center',\n    gap: 8,\n  },\n  statusText: {\n    fontSize: 14,\n    color: '#111827',\n    fontWeight: '500',\n    textTransform: 'capitalize',\n  },\n  loadingBox: {\n    paddingVertical: 40,\n    alignItems: 'center',\n    gap: 12,\n  },\n  loadingText: {\n    color: '#6B7280',\n    fontSize: 16,\n  },\n  errorContainer: {\n    width: '100%',\n    borderRadius: 8,\n    borderWidth: 1,\n    borderColor: '#fecaca',\n    backgroundColor: '#fff1f2',\n    padding: 16,\n    marginHorizontal: 12,\n  },\n  errorTitle: {\n    fontSize: 16,\n    fontWeight: '600',\n    color: '#7f1d1d',\n    marginBottom: 4,\n  },\n  errorSubtitle: {\n    fontSize: 14,\n    color: '#7f1d1d',\n    marginBottom: 8,\n  },\n  errorMessageBox: {\n    backgroundColor: '#ffe4e6',\n    padding: 12,\n    borderRadius: 6,\n    marginBottom: 12,\n  },\n  errorMessageText: {\n    fontSize: 12,\n    color: '#7f1d1d',\n  },\n  errorRetryButton: {\n    alignSelf: 'flex-start',\n    paddingHorizontal: 16,\n    paddingVertical: 10,\n    borderRadius: 6,\n  },\n  errorRetryButtonText: {\n    color: '#ffffff',\n    fontSize: 14,\n    fontWeight: '600',\n  },\n  emptyBox: {\n    paddingVertical: 40,\n    alignItems: 'center',\n  },\n  emptyIcon: {\n    fontSize: 48,\n    marginBottom: 12,\n  },\n  emptyText: {\n    color: '#6B7280',\n    fontSize: 16,\n  },\n});\n\nexport default App;\n","import React from 'react';\nimport { View, Text, StyleSheet } from 'react-native';\nimport { statusColorMap } from './StatusDot';\n\ninterface StatusCountersProps {\n  totalOperativas: number;\n  totalMantenimiento: number;\n  totalInactivas: number;\n}\n\nexport default function StatusCounters({\n  totalOperativas,\n  totalMantenimiento,\n  totalInactivas,\n}: StatusCountersProps) {\n  return (\n    <View style={styles.container}>\n      <View style={[styles.card, styles.cardOperativas]}>\n        <View\n          style={[\n            styles.iconCircle,\n            { backgroundColor: statusColorMap.operativa },\n          ]}\n        >\n          <Text style={styles.iconText}>{totalOperativas}</Text>\n        </View>\n        <Text\n          style={styles.label}\n          numberOfLines={1}\n          adjustsFontSizeToFit\n          minimumFontScale={0.75}\n        >\n          Operativas\n        </Text>\n      </View>\n      <View style={[styles.card, styles.cardMantenimiento]}>\n        <View\n          style={[\n            styles.iconCircle,\n            { backgroundColor: statusColorMap.mantenimiento },\n          ]}\n        >\n          <Text style={styles.iconText}>{totalMantenimiento}</Text>\n        </View>\n        <Text\n          style={styles.label}\n          numberOfLines={1}\n          adjustsFontSizeToFit\n          minimumFontScale={0.75}\n        >\n          Mantenimiento\n        </Text>\n      </View>\n      <View style={[styles.card, styles.cardInactivas]}>\n        <View\n          style={[\n            styles.iconCircle,\n            { backgroundColor: statusColorMap.inactiva },\n          ]}\n        >\n          <Text style={styles.iconText}>{totalInactivas}</Text>\n        </View>\n        <Text\n          style={styles.label}\n          numberOfLines={1}\n          adjustsFontSizeToFit\n          minimumFontScale={0.75}\n        >\n          Inactivas\n        </Text>\n      </View>\n    </View>\n  );\n}\n\nconst styles = StyleSheet.create({\n  container: {\n    flexDirection: 'row',\n    gap: 10,\n    marginBottom: 24,\n  },\n  card: {\n    flex: 1,\n    borderRadius: 12,\n    padding: 8,\n    minHeight: 80,\n    alignItems: 'center',\n    justifyContent: 'center',\n    gap: 8,\n    borderWidth: 1,\n    shadowColor: '#000',\n    shadowOffset: { width: 0, height: 1 },\n    shadowOpacity: 0.05,\n    shadowRadius: 2,\n    elevation: 2,\n  },\n  cardOperativas: {\n    backgroundColor: '#ECFDF5',\n    borderColor: '#D1FAE5',\n  },\n  cardMantenimiento: {\n    backgroundColor: '#FFFBEB',\n    borderColor: '#FDE68A',\n  },\n  cardInactivas: {\n    backgroundColor: '#FEF2F2',\n    borderColor: '#FECACA',\n  },\n  iconCircle: {\n    width: 40,\n    height: 40,\n    borderRadius: 20,\n    alignItems: 'center',\n    justifyContent: 'center',\n  },\n  iconText: {\n    fontSize: 20,\n    fontWeight: '800',\n    color: '#FFFFFF',\n  },\n  label: {\n    fontSize: 12,\n    fontWeight: '600',\n    color: '#374151',\n    width: '100%',\n    textAlign: 'center',\n  },\n});\n","\"use strict\";\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n    try {\n        var info = gen[key](arg);\n        var value = info.value;\n    } catch (error) {\n        reject(error);\n        return;\n    }\n    if (info.done) resolve(value);\n    else Promise.resolve(value).then(_next, _throw);\n}\nfunction _async_to_generator(fn) {\n    return function() {\n        var self = this, args = arguments;\n        return new Promise(function(resolve, reject) {\n            var gen = fn.apply(self, args);\n            function _next(value) {\n                asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n            }\n            function _throw(err) {\n                asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n            }\n            _next(undefined);\n        });\n    };\n}\nexports._ = _async_to_generator;\n","\"use strict\";\nfunction _interop_require_default(obj) {\n    return obj && obj.__esModule ? obj : {\n        default: obj\n    };\n}\nexports._ = _interop_require_default;\n","// @data-oil-front/mfe-runtime — public barrel.\n// IMPORTANTE: este paquete NO se importa desde el host ni desde core-host.\n// Es MFE-only: lo importa cada App de MFE para correr el one-shot de\n// cache-bust en cada rol. Ver src/__tests__/architecture.test.ts.\n\nexport {\n  runMfeCacheBustIfNeeded,\n  MFE_CACHE_BUST_VERSION,\n} from \"./mfeCacheBust\";\n","import { NativeModules, DevSettings } from 'react-native';\nimport NetInfo from '@react-native-community/netinfo';\nimport { storageService, authService } from '@data-oil-front/core-host';\n\n/**\n * Versión del cache-bust de bundles MFE. Bumpear este valor fuerza, UNA sola\n * vez por device, un purgado de la cache de bundles de Re.Pack (ScriptManager)\n * + del manifest cacheado del navigationWarmupShell, seguido de un restart.\n *\n * PARA QUÉ: rescatar devices \"pegados\" en una versión vieja del\n * navigationWarmupShell cuyo mecanismo de actualización detecta el hash nuevo\n * pero no baja los chunks. Vive en este paquete MFE-only (`mfe-runtime`) y se\n * dispara desde el entry de CADA MFE, así TODOS los roles se rescatan (antes\n * vivía sólo en labReports/LabStatusWidget, gateado por RBAC, dejando a los\n * roles sin labReports pegados para siempre).\n *\n * ADEMÁS purga la sesión (logout) para forzar re-login: el único modo de\n * refrescar el `user` cacheado con roles/tags VIEJOS que dejan a `useCan`\n * fail-closed (no hay endpoint de refresh de user sin re-login). Por eso TODO\n * el force-refresh se gatea en conectividad: NUNCA purgar sesión/bundles\n * offline (dejaría al usuario atascado en login sin red, sin acceso a su\n * trabajo encolado en `core-shared:offline_mutations`).\n *\n * DATA-SAFE respecto de la cola offline: NO toca `core-shared:offline_mutations`.\n */\nexport const MFE_CACHE_BUST_VERSION = '2026-05-29-v5';\n\n// Flag de \"ya aplicado\". Vive en un namespace que NO purgamos → sobrevive al\n// bust y evita el loop infinito.\n//\n// CONTINUIDAD HISTÓRICA: el namespace se mantiene como 'labReports' (y la key\n// como 'mfeCacheBustVersion') A PROPÓSITO. Esta lógica nació en labReports y\n// muchos devices YA aplicaron el one-shot y persistieron el flag bajo ese\n// namespace. Cambiar el nombre acá haría que esos devices NO encuentren el\n// flag previo y RE-EJECUTEN el bust (purga + logout + restart) sin necesidad.\n// El nombre describe el origen, no el alcance: hoy lo corren todos los MFEs.\nconst BUST_NAMESPACE = 'labReports';\nconst BUST_VERSION_KEY = 'mfeCacheBustVersion';\n\n// Claim persistido de \"bust en curso ESTA sesión\". A diferencia del flag\n// in-memory `busting`, este cruza bundles: la copia de `reports` y la de\n// `labReports` son instancias de módulo SEPARADAS (no comparten el `busting`),\n// así que sin este claim dos MFEs que montan a la vez podrían disparar el\n// bust en paralelo. TTL corto: un claim abandonado (app matada a mitad de\n// camino antes del restart) se auto-sana y permite reintentar.\n//\n// LÍMITE CONOCIDO: el read-check-then-write sobre AsyncStorage NO es atómico, así\n// que queda una ventana TOCTOU si dos MFEs montan en el mismo tick antes de que\n// el claim se escriba. El claim ELIMINA el caso cross-cold-start (el importante) y\n// reduce el concurrente, pero no lo cierra del todo (AsyncStorage no ofrece CAS).\n// Es benigno: todas las ops son idempotentes (removeByPrefix/remove sobre keys ya\n// borradas = no-op, logout doble = no-op, flag de versión idempotente) y el primer\n// restart descarta el contexto del segundo. Peor caso: un restart redundante.\nconst BUST_IN_PROGRESS_KEY = 'mfeCacheBustInProgress';\nconst BUST_IN_PROGRESS_TTL_MINUTES = 5;\n\n// Cache de bundles de Re.Pack: un único blob monolítico bajo namespace 'host'\n// (key real: `Repack.ScriptManager.Cache.v4.<release|debug>`). Usamos prefijo\n// agnóstico de versión/entorno para cubrir ambos builds.\nconst SCRIPT_MANAGER_CACHE_PREFIX = 'Repack.ScriptManager.Cache';\n\n// Hash del manifest del navigationWarmupShell (ver navigationManifest.ts).\nconst NAV_SHELL_MANIFEST_NAMESPACE = 'host';\nconst NAV_SHELL_MANIFEST_KEY = 'navigationWarmupShellManifest';\n\n// Evita el doble disparo dentro de la misma sesión Y del mismo bundle, antes de\n// que ocurra el restart (el widget puede remontar mientras tanto). NO cruza\n// bundles → para eso está el claim persistido `mfeCacheBustInProgress`.\nlet busting = false;\n\nasync function restart(reason: string): Promise<void> {\n  if (__DEV__) {\n    try {\n      DevSettings.reload(reason);\n    } catch (error) {\n      console.warn('[mfeCacheBust] DevSettings.reload falló:', error);\n    }\n    return;\n  }\n\n  // En release no podemos importar `react-native-restart` (no es dep de\n  // labReports), pero el módulo nativo HardRestartModule es process-global y\n  // sí es alcanzable desde cualquier MFE.\n  const mod = (NativeModules as any)?.HardRestartModule as\n    | { restart: (reason: string | null) => Promise<boolean> }\n    | undefined;\n\n  if (mod && typeof mod.restart === 'function') {\n    try {\n      await mod.restart(reason);\n      return;\n    } catch (error) {\n      console.warn('[mfeCacheBust] HardRestartModule.restart falló:', error);\n    }\n  } else {\n    // error (no warn): si el módulo nativo falta, ya purgamos bundles + sesión\n    // pero NO reiniciamos → el usuario queda deslogueado sin restart hasta cerrar\n    // y reabrir a mano. Tiene que verse en el monitoring de producción.\n    console.error(\n      '[mfeCacheBust] HardRestartModule no disponible — el reinicio debe hacerse manualmente.',\n    );\n  }\n}\n\n/**\n * Purga la cache de bundles MFE + la sesión y reinicia, una sola vez por bump\n * de `MFE_CACHE_BUST_VERSION`. Idempotente: si la versión ya fue aplicada en\n * este device, no hace nada.\n *\n * GATE OBLIGATORIO de conectividad (vía `NetInfo.fetch()`, fuente canónica): si\n * está offline no se purga NADA (no dejar al usuario sin bundles ni sin sesión\n * sin red). Se chequea acá adentro —y NO con un `isConnected` de React que\n * llega laggy/false al montar— para no postergar el force-refresh por error.\n */\nexport async function runMfeCacheBustIfNeeded(): Promise<void> {\n  if (busting) return;\n\n  // GATE de conectividad con la fuente canónica (estado real, no el de React).\n  // El bust descarga bundles frescos y el logout exige poder re-loguear → red.\n  try {\n    const net = await NetInfo.fetch();\n    if (!net.isConnected) {\n      console.log('[mfeCacheBust] Offline (NetInfo): se pospone el force-refresh.');\n      return;\n    }\n  } catch (error) {\n    // Si NetInfo falla, por seguridad NO purgamos (evita lockout offline).\n    console.warn('[mfeCacheBust] NetInfo falló; se pospone el force-refresh.', error);\n    return;\n  }\n\n  try {\n    const applied = await storageService.get<string>(\n      BUST_NAMESPACE,\n      BUST_VERSION_KEY,\n      true, // ignoreExpiration: el flag no debe caducar\n    );\n\n    if (applied === MFE_CACHE_BUST_VERSION) return;\n\n    // CLAIM cross-bundle: si otro MFE (otro bundle, otra instancia de módulo)\n    // ya tomó el bust esta sesión, no lo dispares de nuevo. El claim tiene TTL\n    // corto, así que un claim abandonado (app matada antes del restart) se\n    // auto-sana y el próximo arranque puede reintentar.\n    const inProgress = await storageService.get<string>(\n      BUST_NAMESPACE,\n      BUST_IN_PROGRESS_KEY,\n    );\n\n    if (inProgress === MFE_CACHE_BUST_VERSION) {\n      console.log(\n        '[mfeCacheBust] Bust ya en curso esta sesión (otro MFE): se omite.',\n      );\n      return;\n    }\n\n    busting = true;\n\n    // Tomar el claim ANTES de purgar nada. Vive en namespace 'labReports' →\n    // sobrevive al purge de 'host'/'auth'. TTL corto para que se auto-sane.\n    await storageService.set(\n      BUST_NAMESPACE,\n      BUST_IN_PROGRESS_KEY,\n      MFE_CACHE_BUST_VERSION,\n      BUST_IN_PROGRESS_TTL_MINUTES,\n    );\n\n    console.log(\n      `[mfeCacheBust] Force-refresh (versión ${MFE_CACHE_BUST_VERSION})...`,\n    );\n\n    // 1. Nuke del blob de ScriptManager → todos los MFEs re-descargan su bundle\n    //    en el próximo cold start (incluido el navigationWarmupShell fresco).\n    await storageService.removeByPrefix('host', SCRIPT_MANAGER_CACHE_PREFIX);\n\n    // 2. Forzar el re-fetch del manifest del navigationWarmupShell.\n    await storageService.remove(\n      NAV_SHELL_MANIFEST_NAMESPACE,\n      NAV_SHELL_MANIFEST_KEY,\n    );\n\n    // 3. Purgar la sesión → fuerza re-login → trae un `user` fresco con los\n    //    roles/tags correctos para `useCan` (no hay refresh de user sin\n    //    re-login). NO toca la cola offline (`core-shared:offline_mutations`).\n    await authService.logout();\n\n    // 4. Marcar la versión como aplicada ANTES del restart para no loopear.\n    //    Vive en namespace 'labReports' → sobrevive al purge de 'host'/'auth'.\n    await storageService.set(\n      BUST_NAMESPACE,\n      BUST_VERSION_KEY,\n      MFE_CACHE_BUST_VERSION,\n      100 * 365 * 24 * 60, // ~100 años: en la práctica no expira\n    );\n\n    console.log('[mfeCacheBust] Force-refresh listo. Reiniciando la app...');\n    await restart(`mfe-cache-bust:${MFE_CACHE_BUST_VERSION}`);\n  } catch (error) {\n    busting = false;\n    // Soltar el claim para que un próximo intento (mismo o distinto MFE) pueda\n    // reintentar; igual el TTL corto lo soltaría solo.\n    try {\n      await storageService.remove(BUST_NAMESPACE, BUST_IN_PROGRESS_KEY);\n    } catch (cleanupError) {\n      console.warn(\n        '[mfeCacheBust] No se pudo soltar el claim in-progress:',\n        cleanupError,\n      );\n    }\n    console.error('[mfeCacheBust] Error durante el force-refresh:', error);\n  }\n}\n"],"names":["dayjs","extend","utc","statusMap","operational","maintenance","inactive","AppContent","navigation","useNavigation","insets","useSafeAreaInsets","useTheme","primaryColor","useState","status","filters","setFilters","query","setQuery","machineryList","setMachineryList","Map","LastFuelLoad","lastFuelLoads","setLastFuelLoads","locations","setLocations","loading","setLoading","error","setError","tankStocks","setTankStocks","stockLoading","setStockLoading","stockError","setStockError","MachineryFuelArrival","lastArrivalsByTank","setLastArrivalsByTank","loadMachineryData","useCallback","machineryData","fetchMachineryList","Array","isArray","locationData","fetchMachineryLocations","locationsMap","createLocationsMap","fuelData","fetchMachineryFuelLoads","fuelLoadsMap","getLastFuelLoadsByMachinery","Promise","all","fetchFuelTankStock","fetchMachineryFuelArrivals","catch","stockData","arrivalsData","getLastFuelArrivalsByTankId","stockErr","message","err","console","useEffect","useFocusEffect","data","useMemo","map","machinery","machineName","name","machine_name","machinery_name","description","plate","apiStatus","locationName","location_id","locId","parseInt","get","lastLoad","id","ultCarga","fechaUltCarga","load_quantity","loadDate","load_date","isValid","hourUTC","hour","minuteUTC","minute","format","Máquina","Status","View","style","styles","statusContainer","size","Text","statusText","StatusValue","Ubicación","Placa","filtered","filter","r","byStatus","q","trim","toLowerCase","byQuery","String","includes","counters","length","headerComponent","headerContainer","title","color","totalOperativas","totalMantenimiento","totalInactivas","stockCard","stockCardTitle","stockRow","stockLoadingItem","LoadingSpinner","tank","lastArrival","Number","lastLiters","liters","parseFloat","toLocaleString","lastDate","arrival_date","arrivalDate","d","formatFuelArrivalDisplayDate","stockItem","stockFuelType","numberOfLines","fuel_type","charAt","toUpperCase","slice","stockValue","adjustsFontSizeToFit","minimumFontScale","stock_actual","stockDetailBlock","stockDetailLabel","stockDetailValue","stockErrorBox","stockErrorText","stockEmptyText","TouchableOpacity","fuelArrivalButton","backgroundColor","activeOpacity","accessibilityLabel","onPress","navigate","MACHINERY_SCREENS","FUEL_ARRIVAL","fuelArrivalButtonText","filtersCard","filtersTitle","filtersContent","searchContainer","TextInput","searchInput","paddingRight","value","onChangeText","placeholder","placeholderTextColor","clearButton","clearButtonText","selectContainer","SearchableSelect","label","selectedValue","onValueChange","prev","options","minSearchLength","emptyComponent","emptyBox","emptyIcon","emptyText","loadingComponent","loadingBox","loadingText","errorComponent","errorContainer","errorTitle","errorSubtitle","errorMessageBox","errorMessageText","errorRetryButton","errorRetryButtonText","SafeAreaProvider","screen","paddingTop","top","MobileTable","table","contentContainerStyle","contentContainer","paddingBottom","bottom","ListEmptyComponent","titleKey","onRowClick","item","PREVIEW","accentColor","StyleSheet","create","flex","paddingHorizontal","paddingVertical","fontSize","fontWeight","marginBottom","marginTop","borderRadius","borderWidth","borderColor","padding","shadowColor","shadowOffset","width","height","shadowOpacity","shadowRadius","elevation","flexDirection","gap","minWidth","textTransform","letterSpacing","minHeight","alignItems","justifyContent","stockLoadingText","alignSelf","textAlign","position","right","transform","translateY","marginHorizontal","runMfeCacheBustIfNeeded","StatusCounters","container","card","cardOperativas","iconCircle","statusColorMap","operativa","iconText","cardMantenimiento","mantenimiento","cardInactivas","inactiva","asyncGeneratorStep","gen","resolve","reject","_next","_throw","key","arg","info","done","then","exports","_","fn","self","this","args","arguments","apply","undefined","obj","__esModule","default","MFE_CACHE_BUST_VERSION","BUST_NAMESPACE","BUST_VERSION_KEY","BUST_IN_PROGRESS_KEY","BUST_IN_PROGRESS_TTL_MINUTES","SCRIPT_MANAGER_CACHE_PREFIX","NAV_SHELL_MANIFEST_NAMESPACE","NAV_SHELL_MANIFEST_KEY","busting","NetInfo","fetch","isConnected","log","warn","storageService","set","removeByPrefix","remove","authService","logout","reason","mod","NativeModules","HardRestartModule","restart","cleanupError"],"mappings":"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"}