{"version":3,"file":"smart-defaults.mjs","sources":["../../../src/lib/ux/smart-defaults.ts"],"sourcesContent":["/**\n * @file Smart Defaults System\n * @description PhD-level intelligent default configuration that adapts to device\n * capabilities, network conditions, and user preferences for optimal out-of-box experience.\n *\n * Features:\n * - Device-aware configurations\n * - Network-adaptive settings\n * - User preference detection\n * - Progressive capability enhancement\n * - Memory and CPU-aware defaults\n */\n\nimport { useEffect, useMemo, useState } from 'react';\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Device tier for capability-based defaults\n */\nexport type DeviceTier = 'high' | 'medium' | 'low';\n\n/**\n * Network tier for bandwidth-based defaults\n */\nexport type NetworkTier = 'fast' | 'moderate' | 'slow' | 'offline';\n\n/**\n * User preference categories\n */\nexport interface UserPreferences {\n  /** Prefers reduced motion */\n  reducedMotion: boolean;\n  /** Prefers dark mode */\n  darkMode: boolean;\n  /** Prefers high contrast */\n  highContrast: boolean;\n  /** Data saver enabled */\n  dataSaver: boolean;\n  /** Prefers reduced transparency */\n  reducedTransparency: boolean;\n  /** Language preference */\n  language: string;\n}\n\n/**\n * Animation defaults\n */\nexport interface AnimationDefaults {\n  /** Duration multiplier */\n  durationMultiplier: number;\n  /** Enable animations */\n  enabled: boolean;\n  /** Easing function */\n  easing: string;\n  /** Max concurrent animations */\n  maxConcurrent: number;\n  /** Use GPU acceleration */\n  useGPU: boolean;\n}\n\n/**\n * Image loading defaults\n */\nexport interface ImageDefaults {\n  /** Enable lazy loading */\n  lazyLoad: boolean;\n  /** Image quality (0-100) */\n  quality: number;\n  /** Enable blur-up placeholders */\n  blurUp: boolean;\n  /** Enable WebP format */\n  webp: boolean;\n  /** Enable AVIF format */\n  avif: boolean;\n  /** Max width */\n  maxWidth: number;\n}\n\n/**\n * Data fetching defaults\n */\nexport interface FetchDefaults {\n  /** Stale time in ms */\n  staleTime: number;\n  /** Cache time in ms */\n  cacheTime: number;\n  /** Retry count */\n  retryCount: number;\n  /** Retry delay in ms */\n  retryDelay: number;\n  /** Enable background refetch */\n  backgroundRefetch: boolean;\n  /** Request timeout in ms */\n  timeout: number;\n}\n\n/**\n * Performance defaults\n */\nexport interface PerformanceDefaults {\n  /** Enable performance monitoring */\n  monitoring: boolean;\n  /** Enable prefetching */\n  prefetch: boolean;\n  /** Prefetch distance (routes ahead) */\n  prefetchDistance: number;\n  /** Enable code splitting */\n  codeSplitting: boolean;\n  /** Virtual list threshold */\n  virtualListThreshold: number;\n  /** Debounce delay in ms */\n  debounceDelay: number;\n  /** Throttle delay in ms */\n  throttleDelay: number;\n}\n\n/**\n * Rendering defaults\n */\nexport interface RenderDefaults {\n  /** Batch updates */\n  batchUpdates: boolean;\n  /** Defer non-critical renders */\n  deferNonCritical: boolean;\n  /** Use concurrent mode features */\n  concurrent: boolean;\n  /** Suspense timeout in ms */\n  suspenseTimeout: number;\n  /** Enable render tracking */\n  trackRenders: boolean;\n}\n\n/**\n * Complete smart defaults\n */\nexport interface SmartDefaults {\n  /** Device tier */\n  deviceTier: DeviceTier;\n  /** Network tier */\n  networkTier: NetworkTier;\n  /** User preferences */\n  preferences: UserPreferences;\n  /** Animation defaults */\n  animation: AnimationDefaults;\n  /** Image defaults */\n  image: ImageDefaults;\n  /** Fetch defaults */\n  fetch: FetchDefaults;\n  /** Performance defaults */\n  performance: PerformanceDefaults;\n  /** Render defaults */\n  render: RenderDefaults;\n}\n\n/**\n * Override configuration\n */\nexport interface SmartDefaultsOverrides {\n  animation?: Partial<AnimationDefaults>;\n  image?: Partial<ImageDefaults>;\n  fetch?: Partial<FetchDefaults>;\n  performance?: Partial<PerformanceDefaults>;\n  render?: Partial<RenderDefaults>;\n}\n\n// ============================================================================\n// Detection Functions\n// ============================================================================\n\n/**\n * Detect device tier based on hardware capabilities\n */\nexport function detectDeviceTier(): DeviceTier {\n  if (typeof navigator === 'undefined') return 'medium';\n\n  const nav = navigator as Navigator & {\n    deviceMemory?: number;\n    hardwareConcurrency?: number;\n  };\n\n  const cores = nav.hardwareConcurrency ?? 2;\n  const memory = nav.deviceMemory ?? 4;\n\n  // High-end: 8+ cores or 8+ GB memory\n  if ((cores !== null && cores >= 8) || (memory !== null && memory >= 8)) return 'high';\n\n  // Low-end: 2 or fewer cores or less than 4 GB memory\n  if (cores <= 2 || memory < 4) return 'low';\n\n  return 'medium';\n}\n\n/**\n * Detect network tier based on connection\n */\nexport function detectNetworkTier(): NetworkTier {\n  if (typeof navigator === 'undefined') return 'moderate';\n\n  if (!navigator.onLine) return 'offline';\n\n  const { connection } = navigator as Navigator & {\n    connection?: {\n      effectiveType?: string;\n      downlink?: number;\n      saveData?: boolean;\n    };\n  };\n\n  if (!connection) return 'moderate';\n\n  // Respect data saver\n  if (connection.saveData === true) return 'slow';\n\n  const { effectiveType, downlink } = connection;\n  if (effectiveType === '4g' && (downlink ?? 0) > 5) return 'fast';\n  if (effectiveType === '4g' || effectiveType === '3g') return 'moderate';\n  return 'slow';\n}\n\n/**\n * Detect user preferences\n */\nexport function detectUserPreferences(): UserPreferences {\n  if (typeof window === 'undefined') {\n    return {\n      reducedMotion: false,\n      darkMode: false,\n      highContrast: false,\n      dataSaver: false,\n      reducedTransparency: false,\n      language: 'en',\n    };\n  }\n\n  return {\n    reducedMotion: window.matchMedia('(prefers-reduced-motion: reduce)').matches,\n    darkMode: window.matchMedia('(prefers-color-scheme: dark)').matches,\n    highContrast: window.matchMedia('(prefers-contrast: more)').matches,\n    dataSaver: (navigator as Navigator & { connection?: { saveData?: boolean } }).connection?.saveData ?? false,\n    reducedTransparency: window.matchMedia('(prefers-reduced-transparency: reduce)').matches,\n    language: navigator.language || 'en',\n  };\n}\n\n// ============================================================================\n// Default Calculations\n// ============================================================================\n\n/**\n * Calculate animation defaults\n */\nfunction calculateAnimationDefaults(\n  deviceTier: DeviceTier,\n  preferences: UserPreferences\n): AnimationDefaults {\n  // Disable animations if user prefers reduced motion\n  if (preferences.reducedMotion) {\n    return {\n      durationMultiplier: 0,\n      enabled: false,\n      easing: 'linear',\n      maxConcurrent: 0,\n      useGPU: false,\n    };\n  }\n\n  const tierConfig: Record<DeviceTier, AnimationDefaults> = {\n    high: {\n      durationMultiplier: 1,\n      enabled: true,\n      easing: 'cubic-bezier(0.4, 0, 0.2, 1)',\n      maxConcurrent: 10,\n      useGPU: true,\n    },\n    medium: {\n      durationMultiplier: 0.8,\n      enabled: true,\n      easing: 'ease-out',\n      maxConcurrent: 5,\n      useGPU: true,\n    },\n    low: {\n      durationMultiplier: 0.5,\n      enabled: true,\n      easing: 'ease',\n      maxConcurrent: 2,\n      useGPU: false,\n    },\n  };\n\n  return tierConfig[deviceTier];\n}\n\n/**\n * Calculate image defaults\n */\nfunction calculateImageDefaults(\n  deviceTier: DeviceTier,\n  networkTier: NetworkTier,\n  preferences: UserPreferences\n): ImageDefaults {\n  // Base quality on network and data saver\n  let quality = 80;\n  if (preferences.dataSaver || networkTier === 'slow') {\n    quality = 60;\n  } else if (networkTier === 'fast' && deviceTier === 'high') {\n    quality = 90;\n  }\n\n  // Max width based on device and network\n  let maxWidth = 1920;\n  if (deviceTier === 'low' || networkTier === 'slow') {\n    maxWidth = 1280;\n  } else if (preferences.dataSaver) {\n    maxWidth = 1024;\n  }\n\n  return {\n    lazyLoad: true,\n    quality,\n    blurUp: networkTier !== 'fast' && deviceTier !== 'low',\n    webp: true,\n    avif: deviceTier === 'high' && networkTier === 'fast',\n    maxWidth,\n  };\n}\n\n/**\n * Calculate fetch defaults\n */\nfunction calculateFetchDefaults(\n  networkTier: NetworkTier,\n  preferences: UserPreferences\n): FetchDefaults {\n  const tierConfig: Record<NetworkTier, FetchDefaults> = {\n    fast: {\n      staleTime: 5 * 60 * 1000, // 5 minutes\n      cacheTime: 30 * 60 * 1000, // 30 minutes\n      retryCount: 3,\n      retryDelay: 1000,\n      backgroundRefetch: true,\n      timeout: 10000,\n    },\n    moderate: {\n      staleTime: 10 * 60 * 1000, // 10 minutes\n      cacheTime: 60 * 60 * 1000, // 1 hour\n      retryCount: 3,\n      retryDelay: 2000,\n      backgroundRefetch: true,\n      timeout: 20000,\n    },\n    slow: {\n      staleTime: 30 * 60 * 1000, // 30 minutes\n      cacheTime: 2 * 60 * 60 * 1000, // 2 hours\n      retryCount: 5,\n      retryDelay: 3000,\n      backgroundRefetch: false,\n      timeout: 30000,\n    },\n    offline: {\n      staleTime: Infinity,\n      cacheTime: Infinity,\n      retryCount: 0,\n      retryDelay: 0,\n      backgroundRefetch: false,\n      timeout: 0,\n    },\n  };\n\n  const defaults = tierConfig[networkTier];\n\n  // Adjust for data saver\n  if (preferences.dataSaver) {\n    defaults.backgroundRefetch = false;\n    defaults.staleTime *= 2;\n  }\n\n  return defaults;\n}\n\n/**\n * Calculate performance defaults\n */\nfunction calculatePerformanceDefaults(\n  deviceTier: DeviceTier,\n  networkTier: NetworkTier\n): PerformanceDefaults {\n  const getPrefetchDistance = (): number => {\n    if (deviceTier === 'high') return 3;\n    if (deviceTier === 'medium') return 2;\n    return 1;\n  };\n\n  const getVirtualListThreshold = (): number => {\n    if (deviceTier === 'high') return 100;\n    if (deviceTier === 'medium') return 50;\n    return 20;\n  };\n\n  const getDebounceDelay = (): number => {\n    if (deviceTier === 'high') return 150;\n    if (deviceTier === 'medium') return 200;\n    return 300;\n  };\n\n  const getThrottleDelay = (): number => {\n    if (deviceTier === 'high') return 100;\n    if (deviceTier === 'medium') return 150;\n    return 200;\n  };\n\n  return {\n    monitoring: true,\n    prefetch: networkTier !== 'offline' && networkTier !== 'slow',\n    prefetchDistance: getPrefetchDistance(),\n    codeSplitting: true,\n    virtualListThreshold: getVirtualListThreshold(),\n    debounceDelay: getDebounceDelay(),\n    throttleDelay: getThrottleDelay(),\n  };\n}\n\n/**\n * Calculate render defaults\n */\nfunction calculateRenderDefaults(deviceTier: DeviceTier): RenderDefaults {\n  const getSuspenseTimeout = (): number => {\n    if (deviceTier === 'high') return 3000;\n    if (deviceTier === 'medium') return 5000;\n    return 10000;\n  };\n\n  return {\n    batchUpdates: true,\n    deferNonCritical: deviceTier !== 'high',\n    concurrent: deviceTier !== 'low',\n    suspenseTimeout: getSuspenseTimeout(),\n    trackRenders: deviceTier !== 'low',\n  };\n}\n\n// ============================================================================\n// Smart Defaults Manager\n// ============================================================================\n\n/**\n * Manages smart defaults\n */\nexport class SmartDefaultsManager {\n  private static instance: SmartDefaultsManager;\n  private defaults: SmartDefaults;\n  private overrides: SmartDefaultsOverrides = {};\n  private updateCallbacks: Set<(defaults: SmartDefaults) => void> = new Set();\n\n  constructor() {\n    this.defaults = this.calculateDefaults();\n    this.setupListeners();\n  }\n\n  /**\n   * Get singleton instance\n   */\n  static getInstance(): SmartDefaultsManager {\n    SmartDefaultsManager.instance ??= new SmartDefaultsManager();\n    return SmartDefaultsManager.instance;\n  }\n\n  /**\n   * Reset singleton\n   */\n  static reset(): void {\n    // Type-safe null assignment for singleton reset\n    (SmartDefaultsManager as unknown as { instance: SmartDefaultsManager | null }).instance = null;\n  }\n\n  /**\n   * Recalculate defaults\n   */\n  recalculate(): void {\n    this.defaults = this.calculateDefaults();\n    this.notifyUpdate();\n  }\n\n  /**\n   * Get current defaults with overrides\n   */\n  getDefaults(): SmartDefaults {\n    return {\n      ...this.defaults,\n      animation: { ...this.defaults.animation, ...this.overrides.animation },\n      image: { ...this.defaults.image, ...this.overrides.image },\n      fetch: { ...this.defaults.fetch, ...this.overrides.fetch },\n      performance: { ...this.defaults.performance, ...this.overrides.performance },\n      render: { ...this.defaults.render, ...this.overrides.render },\n    };\n  }\n\n  /**\n   * Set overrides\n   */\n  setOverrides(overrides: SmartDefaultsOverrides): void {\n    this.overrides = { ...this.overrides, ...overrides };\n    this.notifyUpdate();\n  }\n\n  /**\n   * Clear overrides\n   */\n  clearOverrides(): void {\n    this.overrides = {};\n    this.notifyUpdate();\n  }\n\n  /**\n   * Subscribe to updates\n   */\n  subscribe(callback: (defaults: SmartDefaults) => void): () => void {\n    this.updateCallbacks.add(callback);\n    return () => this.updateCallbacks.delete(callback);\n  }\n\n  /**\n   * Calculate all defaults\n   */\n  private calculateDefaults(): SmartDefaults {\n    const deviceTier = detectDeviceTier();\n    const networkTier = detectNetworkTier();\n    const preferences = detectUserPreferences();\n\n    return {\n      deviceTier,\n      networkTier,\n      preferences,\n      animation: calculateAnimationDefaults(deviceTier, preferences),\n      image: calculateImageDefaults(deviceTier, networkTier, preferences),\n      fetch: calculateFetchDefaults(networkTier, preferences),\n      performance: calculatePerformanceDefaults(deviceTier, networkTier),\n      render: calculateRenderDefaults(deviceTier),\n    };\n  }\n\n  /**\n   * Setup listeners for changes\n   */\n  private setupListeners(): void {\n    if (typeof window === 'undefined') return;\n\n    // Network changes\n    const { connection } = navigator as Navigator & {\n      connection?: EventTarget;\n    };\n\n    if (connection) {\n      connection.addEventListener('change', () => this.recalculate());\n    }\n\n    // Online/offline\n    window.addEventListener('online', () => this.recalculate());\n    window.addEventListener('offline', () => this.recalculate());\n\n    // Preference changes\n    window.matchMedia('(prefers-reduced-motion: reduce)').addEventListener('change', () => this.recalculate());\n    window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', () => this.recalculate());\n    window.matchMedia('(prefers-contrast: more)').addEventListener('change', () => this.recalculate());\n  }\n\n  /**\n   * Notify subscribers\n   */\n  private notifyUpdate(): void {\n    const defaults = this.getDefaults();\n    this.updateCallbacks.forEach((cb) => cb(defaults));\n  }\n}\n\n// ============================================================================\n// Hook\n// ============================================================================\n\n/**\n * Hook for accessing smart defaults\n */\nexport function useSmartDefaults(overrides?: SmartDefaultsOverrides): SmartDefaults {\n  const manager = useMemo(() => SmartDefaultsManager.getInstance(), []);\n  const [defaults, setDefaults] = useState(() => manager.getDefaults());\n\n  useEffect(() => {\n    if (overrides) {\n      manager.setOverrides(overrides);\n    }\n\n    return manager.subscribe(setDefaults);\n  }, [manager, overrides]);\n\n  return defaults;\n}\n\n/**\n * Hook for specific default category\n */\nexport function useAnimationDefaults(): AnimationDefaults {\n  const { animation } = useSmartDefaults();\n  return animation;\n}\n\nexport function useImageDefaults(): ImageDefaults {\n  const { image } = useSmartDefaults();\n  return image;\n}\n\nexport function useFetchDefaults(): FetchDefaults {\n  const { fetch } = useSmartDefaults();\n  return fetch;\n}\n\nexport function usePerformanceDefaults(): PerformanceDefaults {\n  const { performance } = useSmartDefaults();\n  return performance;\n}\n\nexport function useRenderDefaults(): RenderDefaults {\n  const { render } = useSmartDefaults();\n  return render;\n}\n\n/**\n * Hook for conditional feature based on defaults\n */\nexport function useConditionalFeature(\n  featureCheck: (defaults: SmartDefaults) => boolean\n): boolean {\n  const defaults = useSmartDefaults();\n  return useMemo(() => featureCheck(defaults), [defaults, featureCheck]);\n}\n\n// ============================================================================\n// Utility Functions\n// ============================================================================\n\n/**\n * Get smart defaults manager\n */\nexport function getSmartDefaults(): SmartDefaults {\n  return SmartDefaultsManager.getInstance().getDefaults();\n}\n\n/**\n * Set smart defaults overrides\n */\nexport function setSmartDefaultsOverrides(overrides: SmartDefaultsOverrides): void {\n  SmartDefaultsManager.getInstance().setOverrides(overrides);\n}\n\n/**\n * Reset smart defaults\n */\nexport function resetSmartDefaults(): void {\n  SmartDefaultsManager.reset();\n}\n\n// ============================================================================\n// Exports\n// ============================================================================\n\nexport default {\n  SmartDefaultsManager,\n  detectDeviceTier,\n  detectNetworkTier,\n  detectUserPreferences,\n  getSmartDefaults,\n  setSmartDefaultsOverrides,\n  resetSmartDefaults,\n  useSmartDefaults,\n  useAnimationDefaults,\n  useImageDefaults,\n  useFetchDefaults,\n  usePerformanceDefaults,\n  useRenderDefaults,\n  useConditionalFeature,\n};\n"],"names":["detectDeviceTier","nav","cores","memory","detectNetworkTier","connection","effectiveType","downlink","detectUserPreferences","calculateAnimationDefaults","deviceTier","preferences","calculateImageDefaults","networkTier","quality","maxWidth","calculateFetchDefaults","defaults","calculatePerformanceDefaults","getPrefetchDistance","getVirtualListThreshold","getDebounceDelay","getThrottleDelay","calculateRenderDefaults","SmartDefaultsManager","overrides","callback","cb","useSmartDefaults","manager","useMemo","setDefaults","useState","useEffect","useAnimationDefaults","animation","useImageDefaults","image","useFetchDefaults","fetch","usePerformanceDefaults","performance","useRenderDefaults","render","useConditionalFeature","featureCheck","getSmartDefaults","setSmartDefaultsOverrides","resetSmartDefaults"],"mappings":"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"}