{"version":3,"file":"debug-overlay.mjs","names":["recentEvents: readonly string[]","parts: string[]"],"sources":["../src/debug-overlay.tsx"],"sourcesContent":["/**\n * LayersDebugOverlay — A draggable, collapsible floating debug overlay for the\n * Layers React Native SDK.\n *\n * Displays real-time SDK state: initialization status, environment, queue depth,\n * session/user/install IDs, consent, network status, recent events, and platform info.\n *\n * Built entirely with React Native built-in components (View, Text, ScrollView,\n * TouchableOpacity, PanResponder, Animated). No external dependencies.\n *\n * Usage:\n * ```tsx\n * import { LayersDebugOverlay } from '@layers/react-native/debug-overlay';\n *\n * function App() {\n *   return (\n *     <>\n *       <MyApp />\n *       <LayersDebugOverlay visible={__DEV__} sdk={sdkInstance} />\n *     </>\n *   );\n * }\n * ```\n */\nimport { useEffect, useRef, useState } from 'react';\nimport {\n  Animated,\n  PanResponder,\n  Platform,\n  ScrollView,\n  StyleSheet,\n  Text,\n  TouchableOpacity,\n  View\n} from 'react-native';\nimport type { GestureResponderEvent, PanResponderGestureState, ViewStyle } from 'react-native';\n\nimport type { LayersReactNative } from './index.js';\n\nconst REFRESH_INTERVAL_MS = 1500;\nconst COLLAPSE_CHAR = '\\u25BC'; // down triangle\nconst EXPAND_CHAR = '\\u25B6'; // right triangle\nconst MAX_VISIBLE_EVENTS = 10;\n\nexport interface LayersDebugOverlayProps {\n  /** Show or hide the overlay. */\n  visible: boolean;\n  /** The LayersReactNative SDK instance to read state from. */\n  sdk: LayersReactNative;\n}\n\ninterface DebugState {\n  sdkVersion: string;\n  status: string;\n  environment: string;\n  appId: string;\n  userId: string;\n  sessionId: string;\n  queueDepth: string;\n  installId: string;\n  consent: string;\n  network: string;\n  platform: string;\n  osVersion: string;\n  recentEvents: readonly string[];\n}\n\nfunction collectState(sdk: LayersReactNative): DebugState {\n  let sdkVersion = '--';\n  let status = 'Not initialized';\n  let environment = '--';\n  let appId = '--';\n  let userId = '(anonymous)';\n  let sessionId = '--';\n  let queueDepth = '--';\n  let installId = '--';\n  let consent = '--';\n  let network = 'unknown';\n  let platform = '--';\n  let osVersion = '--';\n  let recentEvents: readonly string[] = [];\n\n  try {\n    sdkVersion = sdk.getSdkVersion();\n  } catch {}\n\n  try {\n    status = sdk.isInitialized ? 'Initialized' : 'Not initialized';\n  } catch {}\n\n  try {\n    environment = sdk.environment;\n  } catch {}\n\n  try {\n    appId = sdk.appId;\n  } catch {}\n\n  try {\n    userId = sdk.getAppUserId() ?? '(anonymous)';\n  } catch {}\n\n  try {\n    const sid = sdk.getSessionId();\n    sessionId = sid.length > 8 ? `${sid.slice(0, 8)}...` : sid;\n  } catch {}\n\n  try {\n    queueDepth = String(sdk.getQueueDepth());\n  } catch {}\n\n  try {\n    const ctx = sdk.getDeviceContext();\n    if (ctx.installId) {\n      installId = ctx.installId.length > 8 ? `${ctx.installId.slice(0, 8)}...` : ctx.installId;\n    }\n    if (ctx.platform) {\n      platform = ctx.platform;\n    }\n    if (ctx.osVersion) {\n      osVersion = ctx.osVersion;\n    }\n  } catch {}\n\n  try {\n    const cs = sdk.getConsentState();\n    const parts: string[] = [];\n    if (cs.analytics != null) parts.push(`analytics:${String(cs.analytics)}`);\n    if (cs.advertising != null) parts.push(`ads:${String(cs.advertising)}`);\n    consent = parts.length > 0 ? parts.join(', ') : 'not set';\n  } catch {}\n\n  try {\n    network = sdk.getNetworkStatus() ? 'online' : 'offline';\n  } catch {}\n\n  try {\n    recentEvents = sdk.getRecentEvents();\n  } catch {}\n\n  return {\n    sdkVersion,\n    status,\n    environment,\n    appId,\n    userId,\n    sessionId,\n    queueDepth,\n    installId,\n    consent,\n    network,\n    platform,\n    osVersion,\n    recentEvents\n  };\n}\n\nfunction DataRow({\n  label,\n  value,\n  valueColor\n}: {\n  label: string;\n  value: string;\n  valueColor?: string;\n}) {\n  return (\n    <View style={styles.row}>\n      <Text style={styles.rowLabel}>{label}</Text>\n      <Text\n        style={[styles.rowValue, valueColor ? { color: valueColor } : undefined]}\n        numberOfLines={1}\n      >\n        {value}\n      </Text>\n    </View>\n  );\n}\n\nexport function LayersDebugOverlay({ visible, sdk }: LayersDebugOverlayProps) {\n  const [collapsed, setCollapsed] = useState(false);\n  const [state, setState] = useState<DebugState>(() => collectState(sdk));\n  const [flushing, setFlushing] = useState(false);\n  const pan = useRef(new Animated.ValueXY({ x: 16, y: 80 })).current;\n\n  // Track whether the last gesture was a drag (to distinguish from tap)\n  const isDragging = useRef(false);\n\n  const panResponder = useRef(\n    PanResponder.create({\n      onStartShouldSetPanResponder: () => true,\n      onMoveShouldSetPanResponder: (_e: GestureResponderEvent, gs: PanResponderGestureState) =>\n        Math.abs(gs.dx) > 5 || Math.abs(gs.dy) > 5,\n      onPanResponderGrant: () => {\n        isDragging.current = false;\n        pan.setOffset({\n          x: (pan.x as unknown as { _value: number })._value,\n          y: (pan.y as unknown as { _value: number })._value\n        });\n        pan.setValue({ x: 0, y: 0 });\n      },\n      onPanResponderMove: (e: GestureResponderEvent, gs: PanResponderGestureState) => {\n        if (Math.abs(gs.dx) > 5 || Math.abs(gs.dy) > 5) {\n          isDragging.current = true;\n        }\n        Animated.event([null, { dx: pan.x, dy: pan.y }], { useNativeDriver: false })(e, gs);\n      },\n      onPanResponderRelease: () => {\n        pan.flattenOffset();\n        if (!isDragging.current) {\n          setCollapsed((c: boolean) => !c);\n        }\n      }\n    })\n  ).current;\n\n  // Auto-refresh state\n  useEffect(() => {\n    if (!visible) return;\n\n    const tick = () => {\n      setState(collectState(sdk));\n    };\n    tick();\n    const id = setInterval(tick, REFRESH_INTERVAL_MS);\n    return () => clearInterval(id);\n  }, [visible, sdk]);\n\n  if (!visible) return null;\n\n  const handleFlush = () => {\n    setFlushing(true);\n    void sdk.flush().finally(() => {\n      setFlushing(false);\n      setState(collectState(sdk));\n    });\n  };\n\n  const statusColor = state.status === 'Initialized' ? '#00ff88' : '#ff453a';\n  const networkColor = state.network === 'online' ? '#00ff88' : '#ff453a';\n\n  const visibleEvents = state.recentEvents.slice(0, MAX_VISIBLE_EVENTS);\n\n  // Animated.View JSX types require @types/react (peerDependency, not devDep in this package)\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  const AnimatedView = Animated.View as any;\n  return (\n    <AnimatedView\n      style={[styles.container, { transform: pan.getTranslateTransform() }]}\n      {...panResponder.panHandlers}\n    >\n      {/* Header */}\n      <View style={styles.header}>\n        <Text style={styles.headerTitle}>Layers SDK Debug</Text>\n        <Text style={styles.headerToggle}>{collapsed ? EXPAND_CHAR : COLLAPSE_CHAR}</Text>\n      </View>\n\n      {/* Content */}\n      {!collapsed && (\n        <View style={styles.content}>\n          <DataRow label=\"SDK Version\" value={state.sdkVersion} />\n          <DataRow label=\"Status\" value={state.status} valueColor={statusColor} />\n          <DataRow label=\"Environment\" value={state.environment} />\n          <DataRow label=\"App ID\" value={state.appId} />\n          <DataRow label=\"User ID\" value={state.userId} />\n          <DataRow label=\"Session ID\" value={state.sessionId} />\n          <DataRow label=\"Queue Depth\" value={state.queueDepth} />\n          <DataRow label=\"Install ID\" value={state.installId} />\n          <DataRow label=\"Consent\" value={state.consent} />\n          <DataRow label=\"Network\" value={state.network} valueColor={networkColor} />\n          <DataRow label=\"Platform\" value={state.platform} />\n          <DataRow label=\"OS Version\" value={state.osVersion} />\n          {/* Note: React Native is cross-platform, so this overlay does not show\n              platform-specific ad tracking info. Android shows GAID in its native\n              overlay; iOS shows ATT/IDFA in its native overlay. */}\n\n          {/* Divider */}\n          <View style={styles.divider} />\n\n          {/* Recent Events */}\n          <Text style={styles.sectionHeader}>Recent Events</Text>\n          <ScrollView style={styles.eventsScroll} nestedScrollEnabled>\n            {visibleEvents.length === 0 ? (\n              <Text style={styles.emptyEvents}>(no events tracked)</Text>\n            ) : (\n              visibleEvents.map((entry: string, i: number) => (\n                <Text key={`${entry}-${String(i)}`} style={styles.eventRow} numberOfLines={1}>\n                  {entry}\n                </Text>\n              ))\n            )}\n          </ScrollView>\n\n          {/* Divider */}\n          <View style={styles.divider} />\n\n          {/* Flush Button */}\n          <TouchableOpacity\n            style={[styles.flushButton, flushing ? styles.flushButtonDisabled : undefined]}\n            onPress={handleFlush}\n            disabled={flushing}\n            activeOpacity={0.7}\n          >\n            <Text style={styles.flushButtonText}>{flushing ? 'Flushing...' : 'Flush Now'}</Text>\n          </TouchableOpacity>\n        </View>\n      )}\n    </AnimatedView>\n  );\n}\n\nconst MONO_FONT = Platform.select({\n  ios: 'Menlo',\n  android: 'monospace',\n  default: 'monospace'\n});\n\nconst styles = StyleSheet.create({\n  container: {\n    position: 'absolute',\n    top: 0,\n    left: 0,\n    zIndex: 99999,\n    backgroundColor: 'rgba(28, 28, 30, 0.92)',\n    borderRadius: 8,\n    paddingHorizontal: 12,\n    paddingTop: 8,\n    paddingBottom: 12,\n    maxWidth: 340,\n    minWidth: 280,\n    shadowColor: '#000',\n    shadowOffset: { width: 0, height: 2 },\n    shadowOpacity: 0.4,\n    shadowRadius: 6,\n    elevation: 10\n  } as ViewStyle,\n  header: {\n    flexDirection: 'row',\n    alignItems: 'center',\n    paddingVertical: 2\n  } as ViewStyle,\n  headerTitle: {\n    flex: 1,\n    color: '#ffffff',\n    fontSize: 13,\n    fontFamily: MONO_FONT,\n    fontWeight: 'bold'\n  },\n  headerToggle: {\n    color: 'rgba(255, 255, 255, 0.7)',\n    fontSize: 13,\n    fontFamily: MONO_FONT\n  },\n  content: {\n    paddingTop: 6\n  } as ViewStyle,\n  row: {\n    flexDirection: 'row',\n    marginBottom: 2\n  } as ViewStyle,\n  rowLabel: {\n    color: 'rgba(255, 255, 255, 0.63)',\n    fontSize: 10,\n    fontFamily: MONO_FONT,\n    width: 100\n  },\n  rowValue: {\n    flex: 1,\n    color: '#00ff88',\n    fontSize: 10,\n    fontFamily: MONO_FONT\n  },\n  divider: {\n    height: StyleSheet.hairlineWidth,\n    backgroundColor: 'rgba(255, 255, 255, 0.24)',\n    marginTop: 6,\n    marginBottom: 4\n  } as ViewStyle,\n  sectionHeader: {\n    color: 'rgba(255, 255, 255, 0.7)',\n    fontSize: 11,\n    fontFamily: MONO_FONT,\n    fontWeight: 'bold',\n    paddingTop: 4,\n    paddingBottom: 2\n  },\n  eventsScroll: {\n    maxHeight: 120\n  } as ViewStyle,\n  emptyEvents: {\n    color: 'rgba(255, 255, 255, 0.47)',\n    fontSize: 9,\n    fontFamily: MONO_FONT\n  },\n  eventRow: {\n    color: 'rgba(255, 255, 255, 0.78)',\n    fontSize: 9,\n    fontFamily: MONO_FONT,\n    paddingVertical: 1\n  },\n  flushButton: {\n    backgroundColor: '#007aff',\n    borderRadius: 4,\n    paddingVertical: 6,\n    paddingHorizontal: 12,\n    marginTop: 4,\n    alignItems: 'center'\n  } as ViewStyle,\n  flushButtonDisabled: {\n    opacity: 0.5\n  } as ViewStyle,\n  flushButtonText: {\n    color: '#ffffff',\n    fontSize: 12,\n    fontFamily: MONO_FONT,\n    fontWeight: 'bold'\n  }\n});\n"],"mappings":"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"}