{"version":3,"sources":["../src/constants.ts","../src/core/constants.ts","../src/core/detection.ts","../src/core/browser.ts","../src/core/manipulation.ts","../src/core/index.ts","../src/withUserAgent.ts","../src/preview.ts"],"names":["PARAM_KEY","PLATFORMS","ARCHITECTURES","BROWSER_MAPPING","REGEX","detectPlatform","userAgent","platformMatch","match","detectPlatformVersion","platform","detectBitness","version","detectArchitecture","archMatch","archInfo","detectModel","category","detectWow64","isBrowserName","brand","parseBrowserBrands","brands","parseUserAgent","brandList","isMobile","parsedPlatform","parsedArchitecture","parsedModel","parsedPlatformVersion","parsedBitness","isWow64","result","currentUserAgent","beforeAgent","originalNavigator","initialParsedData","setUserAgentData","error","parsedData","userAgentDataProxy","navigatorProxy","target","prop","e","updateUserAgent","fallbackError","set","getFromArgs","args","setUserAgent","getUserAgent","withUserAgent","StoryFn","context","isUserAgentSet","setIsUserAgentSet","useState","useMemo","componentId","useEffect","cleanup","err","preview","preview_default"],"mappings":"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","file":"preview.cjs","sourcesContent":["export const PARAM_KEY = \"userAgent\";\nexport const ADDON_ID = \"storybook/user-agent\";\nexport const TOOL_ID = `${ADDON_ID}/tool`;\nexport const TOOL_TITLE = \"User-Agent\";\n","export const PLATFORMS = {\n  WINDOWS: \"Windows\",\n  MACINTOSH: \"Macintosh\",\n  LINUX: \"Linux\",\n  ANDROID: \"Android\",\n  IOS: \"iOS\",\n} as const;\n\nexport type Platform = (typeof PLATFORMS)[keyof typeof PLATFORMS];\n\nexport const ARCHITECTURES = {\n  X64: \"x64\",\n  X86: \"x86\",\n  ARM64: \"arm64\",\n  ARM: \"arm\",\n} as const;\n\nexport type Architecture = (typeof ARCHITECTURES)[keyof typeof ARCHITECTURES];\n\nexport const BROWSER_MAPPING = {\n  Chrome: \"Chrome\",\n  Chromium: \"Chromium\",\n  Edge: \"Edge\",\n  Brave: \"Brave\",\n  Opera: \"Opera\",\n  Firefox: \"Firefox\",\n  Safari: \"Safari\",\n  \"Internet Explorer\": \"Internet Explorer\",\n} as const;\n\nexport type Browser = (typeof BROWSER_MAPPING)[keyof typeof BROWSER_MAPPING];\n\nexport const REGEX = {\n  MOBILE: /Mobile|Android|iPhone|iPad|iPod/i,\n  PLATFORM: /Windows|Macintosh|Linux|Android|iPhone|iPad|iPod/i,\n  ARCH_INFO: /\\((.*?)\\)/,\n  DEVICE_MODEL: {\n    APPLE: /iPhone|iPad|iPod|MacBook|MacBook Pro|MacBook Air|iMac|Mac Pro/i,\n    MOBILE: /Android|Windows Phone|BlackBerry|Nexus|Pixel|Galaxy/i,\n    PHONE_BRANDS: /Xiaomi|Huawei|Sony|LG|OnePlus|OPPO|vivo|Realme|Motorola/i,\n    PC_BRANDS: /Lenovo|Asus|Acer|Dell|HP|Surface/i,\n  },\n  BROWSER:\n    /(Chrome|Chromium|Edge|Brave|Opera)\\/(\\d+\\.\\d+)|(Firefox)\\/(\\d+\\.\\d+)|(Version)\\/(\\d+\\.\\d+).*Safari|(MSIE|Trident)\\/(\\d+\\.\\d+)/i,\n  PLATFORM_VERSION: {\n    WINDOWS: /Windows NT (\\d+\\.\\d+)/i,\n    MACOS: /Mac OS X (\\d+[._]\\d+(?:[._]\\d+)?)/i,\n    IOS: /iPhone OS (\\d+[._]\\d+(?:[._]\\d+)?)/i,\n    ANDROID: /Android (\\d+(?:\\.\\d+(?:\\.\\d+)?)?)/i,\n  },\n  BITNESS: {\n    WIN64: /Win64|x64|WOW64/i,\n    X86_64: /x86_64/i,\n    ARM64: /aarch64/i,\n    I686: /i686|i386/i,\n    ARM32: /armv\\d+[^6]/i,\n  },\n};\n","import {\n  PLATFORMS,\n  ARCHITECTURES,\n  REGEX,\n  Platform,\n  Architecture,\n} from \"./constants\";\n\nexport function detectPlatform(userAgent: string): Platform | undefined {\n  const platformMatch = userAgent.match(REGEX.PLATFORM);\n  if (!platformMatch) {\n    return undefined;\n  }\n\n  const match = platformMatch[0];\n\n  if (/Windows/i.test(match)) return PLATFORMS.WINDOWS;\n  else if (/Macintosh/i.test(match)) return PLATFORMS.MACINTOSH;\n  else if (/Linux/i.test(match)) return PLATFORMS.LINUX;\n  else if (/Android/i.test(match)) return PLATFORMS.ANDROID;\n  else if (/iPhone|iPad|iPod/i.test(match)) return PLATFORMS.IOS;\n\n  return undefined;\n}\n\nexport function detectPlatformVersion(\n  userAgent: string,\n  platform?: Platform,\n): string | undefined {\n  if (!platform) {\n    platform = detectPlatform(userAgent);\n  }\n\n  if (!platform) return undefined;\n\n  let match;\n\n  switch (platform) {\n    case PLATFORMS.WINDOWS:\n      match = userAgent.match(REGEX.PLATFORM_VERSION.WINDOWS);\n      return match?.[1];\n\n    case PLATFORMS.MACINTOSH:\n      match = userAgent.match(REGEX.PLATFORM_VERSION.MACOS);\n      if (match?.[1]) {\n        // Convert 10_15_7 to 10.15.7\n        return match[1].replace(/_/g, \".\");\n      }\n      return undefined;\n\n    case PLATFORMS.IOS:\n      match = userAgent.match(REGEX.PLATFORM_VERSION.IOS);\n      if (match?.[1]) {\n        // Convert 14_0 to 14.0\n        return match[1].replace(/_/g, \".\");\n      }\n      return undefined;\n\n    case PLATFORMS.ANDROID:\n      match = userAgent.match(REGEX.PLATFORM_VERSION.ANDROID);\n      return match?.[1];\n\n    default:\n      return undefined;\n  }\n}\n\nexport function detectBitness(userAgent: string): string | undefined {\n  // Windows or macOS with explicit 64-bit markers\n  if (REGEX.BITNESS.WIN64.test(userAgent)) {\n    return \"64\";\n  }\n\n  // Linux x86_64\n  if (REGEX.BITNESS.X86_64.test(userAgent)) {\n    return \"64\";\n  }\n\n  // ARM64/aarch64\n  if (REGEX.BITNESS.ARM64.test(userAgent)) {\n    return \"64\";\n  }\n\n  // 32-bit Intel\n  if (REGEX.BITNESS.I686.test(userAgent)) {\n    return \"32\";\n  }\n\n  // 32-bit ARM\n  if (REGEX.BITNESS.ARM32.test(userAgent)) {\n    return \"32\";\n  }\n\n  // Default for modern devices (most modern browsers and devices are 64-bit)\n  const platform = detectPlatform(userAgent);\n  if (platform === PLATFORMS.MACINTOSH || platform === PLATFORMS.IOS) {\n    // Modern Apple devices are all 64-bit\n    return \"64\";\n  }\n\n  // For other platforms, we're less certain but most modern devices are 64-bit\n  if (platform === PLATFORMS.ANDROID) {\n    // Android version-based detection\n    const version = detectPlatformVersion(userAgent, platform);\n    if (version) {\n      const majorVersion = parseInt(version.split(\".\")[0], 10);\n      // Android 5.0 and above are typically 64-bit\n      if (majorVersion >= 5) {\n        return \"64\";\n      } else {\n        // Older Android versions were typically 32-bit\n        return \"32\";\n      }\n    }\n  }\n\n  return undefined;\n}\n\nexport function detectArchitecture(\n  userAgent: string,\n): Architecture | undefined {\n  const archMatch = REGEX.ARCH_INFO.exec(userAgent);\n  if (!archMatch?.[1]) {\n    return undefined;\n  }\n\n  const archInfo = archMatch[1];\n\n  if (archInfo.includes(ARCHITECTURES.X64)) return ARCHITECTURES.X64;\n  else if (archInfo.includes(ARCHITECTURES.X86)) return ARCHITECTURES.X86;\n  else if (archInfo.includes(ARCHITECTURES.ARM64)) return ARCHITECTURES.ARM64;\n  else if (archInfo.includes(ARCHITECTURES.ARM)) return ARCHITECTURES.ARM;\n\n  return undefined;\n}\n\nexport function detectModel(userAgent: string): string | undefined {\n  for (const category of Object.values(REGEX.DEVICE_MODEL)) {\n    const match = category.exec(userAgent);\n    if (match?.[0]) {\n      return match[0];\n    }\n  }\n\n  return undefined;\n}\n\n/**\n * Detects if the user agent is from a WOW64 environment (32-bit app on 64-bit Windows)\n */\nexport function detectWow64(userAgent: string): boolean {\n  // Only relevant for Windows systems\n  const platform = detectPlatform(userAgent);\n  if (platform !== PLATFORMS.WINDOWS) {\n    return false;\n  }\n\n  // Check for WOW64 marker\n  return /WOW64/i.test(userAgent);\n}\n","import { BROWSER_MAPPING, REGEX } from \"./constants\";\nimport type { Brand, UserAgentData } from \"./types\";\nimport {\n  detectPlatform,\n  detectArchitecture,\n  detectModel,\n  detectPlatformVersion,\n  detectBitness,\n  detectWow64,\n} from \"./detection\";\n\nexport function isBrowserName(\n  brand: string,\n): brand is keyof typeof BROWSER_MAPPING {\n  return brand in BROWSER_MAPPING;\n}\n\nexport function parseBrowserBrands(userAgent: string): Brand[] {\n  const brands: Brand[] = [];\n  const match = userAgent.match(REGEX.BROWSER);\n\n  if (!match) {\n    return brands;\n  }\n\n  if (match[1] && match[2]) {\n    const brand = match[1];\n    const version = match[2];\n\n    if (isBrowserName(brand)) {\n      brands.push({ brand: BROWSER_MAPPING[brand], version });\n    } else {\n      brands.push({ brand: \"Chromium\", version });\n    }\n  }\n\n  if (match[3] && match[4]) {\n    brands.push({ brand: BROWSER_MAPPING.Firefox, version: match[4] });\n  }\n\n  if (match[5] && match[6]) {\n    brands.push({ brand: BROWSER_MAPPING.Safari, version: match[6] });\n  }\n\n  if (match[7] && match[8]) {\n    brands.push({\n      brand: BROWSER_MAPPING[\"Internet Explorer\"],\n      version: match[8],\n    });\n  }\n\n  return brands;\n}\n\nexport async function getModernBrowserInfo(): Promise<\n  { brands?: Brand[]; highEntropyValues?: Partial<UserAgentData> } | undefined\n> {\n  if (typeof window === \"undefined\" || !window.navigator.userAgentData) {\n    return undefined;\n  }\n\n  const brands =\n    window.navigator.userAgentData.brands ||\n    window.navigator.userAgentData.fullVersionList;\n\n  let highEntropyValues: Partial<UserAgentData> | undefined;\n\n  if (window.navigator.userAgentData.getHighEntropyValues) {\n    try {\n      highEntropyValues =\n        await window.navigator.userAgentData.getHighEntropyValues([\n          \"architecture\",\n          \"bitness\",\n          \"brands\",\n          \"fullVersionList\",\n          \"mobile\",\n          \"model\",\n          \"platform\",\n          \"platformVersion\",\n          \"wow64\",\n        ]);\n    } catch (error) {\n      console.warn(\"Failed to get high entropy values:\", error);\n    }\n  }\n\n  if (!brands && !highEntropyValues) return undefined;\n\n  return {\n    brands: brands?.map((brand) => ({\n      brand: brand.brand,\n      version: brand.version,\n    })),\n    highEntropyValues,\n  };\n}\n\nexport async function parseUserAgent(\n  userAgent: string,\n): Promise<Partial<UserAgentData>> {\n  const brandList = parseBrowserBrands(userAgent);\n  const isMobile = REGEX.MOBILE.test(userAgent);\n  const parsedPlatform = detectPlatform(userAgent);\n  const parsedArchitecture = detectArchitecture(userAgent);\n  const parsedModel = detectModel(userAgent);\n  const parsedPlatformVersion = detectPlatformVersion(\n    userAgent,\n    parsedPlatform,\n  );\n  const parsedBitness = detectBitness(userAgent);\n  const isWow64 = detectWow64(userAgent);\n\n  const result: Partial<UserAgentData> = {\n    userAgent,\n    mobile: isMobile,\n    platform: parsedPlatform,\n    architecture: parsedArchitecture,\n    model: parsedModel,\n    platformVersion: parsedPlatformVersion || \"0\",\n    bitness: parsedBitness || \"64\",\n    wow64: isWow64,\n  };\n\n  if (brandList && brandList.length > 0) {\n    result.brands = brandList;\n    result.fullVersionList = brandList;\n  } else {\n    result.brands = [];\n    result.fullVersionList = [];\n  }\n\n  return result;\n}\n","import type { UserAgentData, UserAgentArgs } from \"./types\";\nimport { parseUserAgent } from \"./browser\";\n\nlet currentUserAgent =\n  typeof window !== \"undefined\" ? window.navigator.userAgent : \"\";\n\nconst beforeAgent =\n  typeof window !== \"undefined\" ? window.navigator.userAgent : \"\";\n\nlet originalNavigator: Navigator | undefined;\nif (typeof window !== \"undefined\") {\n  originalNavigator = window.navigator;\n\n  (async () => {\n    try {\n      const initialParsedData = await parseUserAgent(beforeAgent);\n\n      if (window.navigator.userAgentData) {\n        setUserAgentData(initialParsedData);\n      }\n    } catch (error) {\n      console.warn(\"Failed to initialize consistent userAgentData:\", error);\n    }\n  })();\n}\n\nfunction setUserAgentData(parsedData: Partial<UserAgentData>): void {\n  if (typeof window === \"undefined\" || !window.navigator.userAgentData) return;\n\n  try {\n    const userAgentDataProxy = {\n      ...window.navigator.userAgentData,\n      ...parsedData,\n      getHighEntropyValues: async () => parsedData,\n    };\n\n    const navigatorProxy = new Proxy(window.navigator, {\n      get(target, prop) {\n        if (prop === \"userAgentData\") {\n          return userAgentDataProxy;\n        }\n        return Reflect.get(target, prop);\n      },\n    });\n\n    if (window.Navigator && typeof window.Navigator === \"function\") {\n      try {\n        Object.defineProperty(window, \"navigator\", {\n          value: navigatorProxy,\n          configurable: true,\n          writable: true,\n        });\n      } catch (e) {\n        console.warn(\"Unable to replace navigator object with proxy:\", e);\n      }\n    }\n  } catch (error) {\n    console.warn(\"Failed to set userAgentData safely:\", error);\n  }\n}\n\nasync function updateUserAgent(userAgent: string): Promise<void> {\n  if (typeof window === \"undefined\") return;\n\n  try {\n    const navigatorProxy = new Proxy(window.navigator, {\n      get(target, prop) {\n        if (prop === \"userAgent\") {\n          return userAgent;\n        }\n        return Reflect.get(target, prop);\n      },\n    });\n\n    if (window.Navigator && typeof window.Navigator === \"function\") {\n      try {\n        Object.defineProperty(window, \"navigator\", {\n          value: navigatorProxy,\n          configurable: true,\n          writable: true,\n        });\n      } catch (e) {\n        console.warn(\"Unable to replace navigator object with proxy:\", e);\n\n        try {\n          Object.defineProperty(window.navigator, \"userAgent\", {\n            get: () => userAgent,\n            configurable: true,\n          });\n        } catch (fallbackError) {\n          console.warn(\"All UA spoofing methods failed:\", fallbackError);\n        }\n      }\n    }\n\n    if (window.navigator.userAgentData) {\n      const parsedData = await parseUserAgent(userAgent);\n      setUserAgentData(parsedData);\n    }\n  } catch (error) {\n    console.warn(\"Failed to update userAgent safely:\", error);\n  }\n}\n\nexport async function set(userAgent?: string): Promise<() => Promise<void>> {\n  if (typeof window === \"undefined\") return async () => {};\n\n  try {\n    if (!userAgent) {\n      currentUserAgent = beforeAgent;\n      await updateUserAgent(beforeAgent);\n      return async () => {};\n    }\n\n    currentUserAgent = userAgent;\n    await updateUserAgent(userAgent);\n\n    return async () => {\n      try {\n        if (originalNavigator) {\n          Object.defineProperty(window, \"navigator\", {\n            value: originalNavigator,\n            configurable: true,\n            writable: true,\n          });\n        } else {\n          await updateUserAgent(currentUserAgent);\n        }\n      } catch (error) {\n        console.warn(\"Failed to restore original navigator:\", error);\n        await updateUserAgent(currentUserAgent);\n      }\n    };\n  } catch (error) {\n    console.warn(\"Error in userAgent setting process:\", error);\n    return async () => {};\n  }\n}\n\nexport function getFromArgs(args?: UserAgentArgs): string {\n  return args?.useragent || \"\";\n}\n","import { set, getFromArgs } from \"./manipulation\";\n\nexport * from \"./types\";\nexport * from \"./constants\";\nexport * from \"./detection\";\nexport * from \"./browser\";\n\nexport const setUserAgent = set;\nexport const getUserAgent = getFromArgs;\n","import type {\n  Renderer,\n  PartialStoryFn as StoryFunction,\n  StoryContext,\n} from \"@storybook/types\";\n\nimport { useEffect, useMemo, useState } from \"@storybook/preview-api\";\n\nimport { setUserAgent, getUserAgent } from \"./core\";\n\nexport function withUserAgent(\n  StoryFn: StoryFunction<Renderer>,\n  context: StoryContext<Renderer>,\n) {\n  const [isUserAgentSet, setIsUserAgentSet] = useState(false);\n\n  const userAgent = useMemo(\n    () => getUserAgent(context.args),\n    [context.args?.useragent],\n  );\n\n  const componentId = useMemo(() => context.id, [context.id]);\n\n  useEffect(() => {\n    let cleanup: (() => Promise<void>) | (() => void) = () => {};\n\n    (async () => {\n      try {\n        setIsUserAgentSet(false);\n        const cleanupFn = await setUserAgent(userAgent);\n        cleanup = cleanupFn;\n        setIsUserAgentSet(true);\n      } catch (error) {\n        console.error(\"Failed to set user agent:\", error);\n        setIsUserAgentSet(true);\n      }\n    })();\n\n    return () => {\n      if (cleanup instanceof Promise) {\n        cleanup.catch((err) => console.error(\"Error during cleanup:\", err));\n      } else {\n        cleanup();\n      }\n      setIsUserAgentSet(false);\n    };\n  }, [userAgent, componentId]);\n\n  if (userAgent && !isUserAgentSet) {\n    return null;\n  }\n\n  return StoryFn();\n}\n","import type { Renderer, ProjectAnnotations } from \"@storybook/types\";\nimport { PARAM_KEY } from \"./constants\";\nimport { withUserAgent } from \"./withUserAgent\";\n\nconst preview: ProjectAnnotations<Renderer> = {\n  decorators: [withUserAgent],\n  initialGlobals: { [PARAM_KEY]: false },\n};\n\nexport default preview;\n"]}