{"version":3,"file":"index.mjs","sources":["../src/adapters/expo-storage.adapter.ts","../src/adapters/expo-device.adapter.ts","../src/adapters/expo-ui.adapter.ts","../src/adapters/expo-purchase.adapter.ts","../src/adapters/index.ts","../src/products/productStore.ts","../src/nami.ts","../node_modules/react/cjs/react-jsx-runtime.production.min.js","../node_modules/react/cjs/react-jsx-runtime.development.js","../node_modules/react/jsx-runtime.js","../src/context/PaywallContext.tsx","../src/utils/fonts.ts","../src/utils/styles.ts","../src/utils/smartText.ts","../src/utils/rendering.ts","../src/components/TemplateRenderer.tsx","../src/components/containers/NamiContentContainer.tsx","../src/components/containers/NamiBackgroundContainer.tsx","../src/components/containers/NamiHeader.tsx","../src/components/containers/NamiFooter.tsx","../src/utils/a11yAnnouncement.ts","../src/utils/announcementMachine.ts","../src/utils/videoControls.ts","../src/context/AnnouncementContext.tsx","../src/components/elements/A11yLiveRegion.tsx","../src/utils/impression.ts","../src/components/PaywallScreen.tsx","../src/context/FocusContext.tsx","../src/components/NamiView.tsx","../src/index.ts"],"sourcesContent":["import type { IStorageAdapter } from '@namiml/sdk-core';\n\ntype SQLiteRow = { value?: string; key?: string };\ntype SQLiteDatabase = {\n  runSync(query: string, params?: unknown[]): void;\n  getFirstSync(query: string, params?: unknown[]): SQLiteRow | null;\n  getAllSync(query: string, params?: unknown[]): SQLiteRow[];\n};\n\nexport class ExpoStorageAdapter implements IStorageAdapter {\n  private db: SQLiteDatabase | null = null;\n  private memoryFallback: Map<string, string> | null = null;\n\n  constructor() {\n    try {\n      const { openDatabaseSync } = require('expo-sqlite');\n      const database = openDatabaseSync('nami-sdk-storage') as SQLiteDatabase;\n      database.runSync(\n        'CREATE TABLE IF NOT EXISTS kv (key TEXT PRIMARY KEY, value TEXT)'\n      );\n      this.db = database;\n    } catch {\n      this.memoryFallback = new Map();\n    }\n  }\n\n  getItem(key: string): string | null {\n    if (this.memoryFallback) return this.memoryFallback.get(key) ?? null;\n    const database = this.db;\n    if (!database) return null;\n    try {\n      const row = database.getFirstSync('SELECT value FROM kv WHERE key = ?', [key]);\n      return row?.value ?? null;\n    } catch {\n      return null;\n    }\n  }\n\n  setItem(key: string, value: string): void {\n    if (this.memoryFallback) {\n      this.memoryFallback.set(key, value);\n      return;\n    }\n    const database = this.db;\n    if (!database) return;\n    try {\n      database.runSync('INSERT OR REPLACE INTO kv (key, value) VALUES (?, ?)', [key, value]);\n    } catch {\n      /* silent */\n    }\n  }\n\n  removeItem(key: string): void {\n    if (this.memoryFallback) {\n      this.memoryFallback.delete(key);\n      return;\n    }\n    const database = this.db;\n    if (!database) return;\n    try {\n      database.runSync('DELETE FROM kv WHERE key = ?', [key]);\n    } catch {\n      /* silent */\n    }\n  }\n\n  clear(): void {\n    if (this.memoryFallback) {\n      this.memoryFallback.clear();\n      return;\n    }\n    const database = this.db;\n    if (!database) return;\n    try {\n      database.runSync('DELETE FROM kv');\n    } catch {\n      /* silent */\n    }\n  }\n\n  getAllKeys(): string[] {\n    if (this.memoryFallback) return [...this.memoryFallback.keys()];\n    const database = this.db;\n    if (!database) return [];\n    try {\n      const rows = database.getAllSync('SELECT key FROM kv');\n      return rows.map((row) => row.key).filter((key): key is string => typeof key === 'string');\n    } catch {\n      return [];\n    }\n  }\n}\n","import type { IDeviceAdapter, ScreenInfo } from '@namiml/sdk-core';\nimport type { DevicePayload, TDevice } from '@namiml/sdk-core';\nimport { NAMI_SDK_PACKAGE_VERSION } from '@namiml/sdk-core';\nimport { Dimensions, Platform } from 'react-native';\n\nfunction getExpoDevice() { return require('expo-device'); }\nfunction getExpoConstants() { return require('expo-constants').default; }\nfunction getExpoLocalization() { return require('expo-localization'); }\n\nconst SDK_CLIENT = 'expo';\n\nconst TV_SCALE_FACTORS: Record<number, number> = {\n  720: 0.67,\n  1080: 1,\n  1440: 1.5,\n  2160: 2,\n};\n\nexport class ExpoDeviceAdapter implements IDeviceAdapter {\n  getDeviceData(): DevicePayload {\n    let osName = Platform.OS;\n    let osVersion = String(Platform.Version);\n    let deviceModel: string | undefined;\n\n    try {\n      const device = getExpoDevice();\n      if (device) {\n        osName = device.osName ?? osName;\n        osVersion = device.osVersion ?? osVersion;\n        deviceModel = device.modelName ?? device.modelId;\n      }\n    } catch { /* expo-device unavailable */ }\n\n    return {\n      os_name: osName,\n      os_version: osVersion,\n      browser_name: '',\n      browser_version: '',\n      sdk_client: SDK_CLIENT,\n      sdk_version: NAMI_SDK_PACKAGE_VERSION,\n      language: this.getLanguage(),\n      ...(deviceModel ? { device_model: deviceModel } : {}),\n      extended_platform: 'expo',\n      extended_platform_version: this.getExpoVersion(),\n    };\n  }\n\n  private getExpoVersion(): string {\n    try {\n      const constants = getExpoConstants();\n      return constants?.expoConfig?.sdkVersion ?? '';\n    } catch {\n      return '';\n    }\n  }\n\n  getDeviceFormFactor(): TDevice {\n    try {\n      const device = getExpoDevice();\n      const deviceType = device?.deviceType;\n      const DeviceType = device?.DeviceType;\n\n      if (DeviceType && deviceType === DeviceType.TV) return 'television';\n      if (DeviceType && deviceType === DeviceType.TABLET) return 'tablet';\n    } catch {\n      // expo-device may not be available (e.g., Expo Go without native modules)\n    }\n    return 'phone';\n  }\n\n  getDeviceScaleFactor(formFactor?: string): number {\n    const ff = formFactor ?? this.getDeviceFormFactor();\n    if (ff !== 'television') return 1;\n\n    const { height } = Dimensions.get('window');\n    const closest = Object.keys(TV_SCALE_FACTORS)\n      .map(Number)\n      .reduce((prev, curr) =>\n        Math.abs(curr - height) < Math.abs(prev - height) ? curr : prev\n      );\n    return TV_SCALE_FACTORS[closest] ?? 1;\n  }\n\n  generateUUID(): string {\n    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n      const r = (Math.random() * 16) | 0;\n      const v = c === 'x' ? r : (r & 0x3) | 0x8;\n      return v.toString(16);\n    });\n  }\n\n  getScreenInfo(): ScreenInfo {\n    const { width, height, scale } = Dimensions.get('window');\n    return { width, height, scale };\n  }\n\n  getLanguage(): string {\n    try {\n      const { getLocales } = getExpoLocalization();\n      const locales = getLocales();\n      return locales?.[0]?.languageCode ?? 'en';\n    } catch {\n      return 'en';\n    }\n  }\n}\n","import type { IUIAdapter, PaywallHandle, FlowNavigationOptions } from '@namiml/sdk-core';\nimport type { IPaywall } from '@namiml/sdk-core';\nimport type { NamiPaywallLaunchContext } from '@namiml/sdk-core';\n\ntype PaywallListener = (paywall: IPaywall, context: NamiPaywallLaunchContext) => void;\ntype ReRenderListener = () => void;\ntype FlowNavListener = (paywall: IPaywall, options: FlowNavigationOptions) => void;\n\n/**\n * Expo UI adapter.\n * Uses a listener pattern so the Expo PaywallView component can register\n * itself to receive create/reRender/flowNav events from the core SDK.\n */\nexport class ExpoUIAdapter implements IUIAdapter {\n  private paywallListener: PaywallListener | null = null;\n  private reRenderListener: ReRenderListener | null = null;\n  private flowNavListener: FlowNavListener | null = null;\n\n  onPaywallRequested(listener: PaywallListener): () => void {\n    this.paywallListener = listener;\n    return () => { this.paywallListener = null; };\n  }\n\n  onReRenderRequested(listener: ReRenderListener): () => void {\n    this.reRenderListener = listener;\n    return () => { this.reRenderListener = null; };\n  }\n\n  onFlowNavigationRequested(listener: FlowNavListener): () => void {\n    this.flowNavListener = listener;\n    return () => { this.flowNavListener = null; };\n  }\n\n  createPaywall(\n    type: string | undefined,\n    value: string,\n    context: NamiPaywallLaunchContext\n  ): PaywallHandle {\n    // In Expo, we don't create a DOM element. Instead, we notify the\n    // registered PaywallView component to present the paywall.\n    // The PaywallView resolves the paywall data using the same core logic.\n    if (this.paywallListener) {\n      // Build minimal paywall info for navigation\n      const paywallInfo = { type, value, context };\n      this.paywallListener(paywallInfo as any, context);\n    }\n    return { type, value, context };\n  }\n\n  reRenderPaywall(): void {\n    this.reRenderListener?.();\n  }\n\n  flowNavigateToScreen(paywall: IPaywall, options: FlowNavigationOptions): void {\n    this.flowNavListener?.(paywall, options);\n  }\n\n  /**\n   * Drop all registered listener refs. Called from `Nami.reset()` via the\n   * IUIAdapter contract so the singleton adapter doesn't hold stale\n   * closures from a pre-reset NamiView/PaywallView mount. If a NamiView\n   * is still mounted when reset runs, it will re-register its listeners\n   * on the next effect cycle.\n   */\n  onReset(): void {\n    this.paywallListener = null;\n    this.reRenderListener = null;\n    this.flowNavListener = null;\n  }\n}\n","import type { IPurchaseAdapter, PurchaseContext, PurchaseResult } from '@namiml/sdk-core';\nimport type { NamiProductDetails } from '@namiml/sdk-core';\n\ntype ExpoNamiIapModule = {\n  initConnection: () => Promise<void>;\n  getProducts: (skuIds: string[]) => Promise<NamiProductDetails[]>;\n  purchase: (params: {\n    skuId: string;\n    offerId?: string;\n    appAccountToken?: string;\n  }) => Promise<{\n    transactionId: string;\n    receipt?: string;\n    skuId: string;\n  }>;\n  restorePurchases: () => Promise<Array<{\n    transactionId: string;\n    receipt?: string;\n    skuId: string;\n  }>>;\n};\n\nfunction getExpoNamiIap(): ExpoNamiIapModule {\n  return require('@namiml/expo-nami-iap') as ExpoNamiIapModule;\n}\n\ntype PurchaseContextWithAppAccountToken = PurchaseContext & {\n  appAccountToken?: string;\n};\n\nfunction getPurchaseErrorMessage(error: unknown): string {\n  if (error instanceof Error && error.message) {\n    return error.message;\n  }\n\n  if (typeof error === 'object' && error && 'message' in error) {\n    const message = (error as { message?: unknown }).message;\n    if (typeof message === 'string' && message.length > 0) {\n      return message;\n    }\n  }\n\n  return 'Purchase failed';\n}\n\nexport class ExpoPurchaseAdapter implements IPurchaseAdapter {\n  async getProducts(skuIds: string[]): Promise<NamiProductDetails[]> {\n    const { initConnection, getProducts } = getExpoNamiIap();\n    await initConnection();\n    return getProducts(skuIds);\n  }\n\n  async purchase(skuId: string, context?: PurchaseContext): Promise<PurchaseResult> {\n    const { initConnection, purchase } = getExpoNamiIap();\n    await initConnection();\n    try {\n      const tx = await purchase({\n        skuId,\n        offerId: context?.offerId,\n        appAccountToken: (context as PurchaseContextWithAppAccountToken | undefined)?.appAccountToken,\n      });\n      return {\n        success: true,\n        transactionId: tx.transactionId,\n        receipt: tx.receipt,\n        skuId: tx.skuId,\n      };\n    } catch (error) {\n      return { success: false, skuId, message: getPurchaseErrorMessage(error) };\n    }\n  }\n\n  async restorePurchases(): Promise<PurchaseResult[]> {\n    const { initConnection, restorePurchases } = getExpoNamiIap();\n    await initConnection();\n    const txs = await restorePurchases();\n    return txs.map((t) => ({ success: true, transactionId: t.transactionId, receipt: t.receipt, skuId: t.skuId }));\n  }\n}\n","import { logger, registerPlatformAdapters, registerPurchaseAdapter } from '@namiml/sdk-core';\nimport { ExpoStorageAdapter } from './expo-storage.adapter';\nimport { ExpoDeviceAdapter } from './expo-device.adapter';\nimport { ExpoUIAdapter } from './expo-ui.adapter';\nimport { ExpoPurchaseAdapter } from './expo-purchase.adapter';\n\nexport const expoUIAdapter = new ExpoUIAdapter();\nexport const expoPurchaseAdapter = new ExpoPurchaseAdapter();\nlet adaptersRegistered = false;\n\nexport function registerExpoAdapters(): void {\n  if (adaptersRegistered) {\n    return;\n  }\n\n  try {\n    registerPlatformAdapters({\n      storage: new ExpoStorageAdapter(),\n      device: new ExpoDeviceAdapter(),\n      ui: expoUIAdapter,\n    });\n    registerPurchaseAdapter(expoPurchaseAdapter);\n    adaptersRegistered = true;\n  } catch (error) {\n    logger.warn('[NamiExpo] Failed to register Expo adapters.', error);\n  }\n}\n\nregisterExpoAdapters();\n\nexport { ExpoStorageAdapter } from './expo-storage.adapter';\nexport { ExpoDeviceAdapter } from './expo-device.adapter';\nexport { ExpoUIAdapter } from './expo-ui.adapter';\nexport { ExpoPurchaseAdapter } from './expo-purchase.adapter';\n","import type { IPaywall, NamiProductDetails } from '@namiml/sdk-core';\nimport { NamiPaywallManager, logger } from '@namiml/sdk-core';\nimport { expoPurchaseAdapter } from '../adapters';\n\n// Accumulated store product details, keyed by product_ref_id (== sku_ref_id).\nconst productsById = new Map<string, NamiProductDetails>();\n\n// Serializes backfill runs so concurrent launches/prefetches don't double-fetch\n// or race the map (parity with the Apple SDK's backfillTaskLock).\nlet pending: Promise<boolean> = Promise.resolve(false);\n\n/** Collect unique store product ids (sku_ref_id) from the given paywalls' sku menus. */\nexport function collectSkuRefIds(paywalls: IPaywall[]): string[] {\n  const ids = new Set<string>();\n  for (const paywall of paywalls ?? []) {\n    for (const menu of paywall?.sku_menus ?? []) {\n      for (const sku of menu?.products ?? []) {\n        if (sku?.sku_ref_id) ids.add(sku.sku_ref_id);\n      }\n    }\n  }\n  return [...ids];\n}\n\n/**\n * Fetch store product details for any of `skuRefIds` not already loaded, merge them into\n * the accumulated set, and push the union to core via NamiPaywallManager.setProductDetails.\n * Serialized; returns whether new products were added. Never throws.\n */\nexport function backfill(skuRefIds: string[]): Promise<boolean> {\n  pending = pending.then(() => backfillOnce(skuRefIds));\n  return pending;\n}\n\nasync function backfillOnce(skuRefIds: string[]): Promise<boolean> {\n  const missing = [...new Set(skuRefIds)].filter((id) => id && !productsById.has(id));\n  if (!missing.length) return false;\n  try {\n    const products = await expoPurchaseAdapter.getProducts(missing);\n    let added = false;\n    for (const product of products ?? []) {\n      if (product?.product_ref_id) {\n        productsById.set(product.product_ref_id, product);\n        added = true;\n      }\n    }\n    if (added) {\n      NamiPaywallManager.setProductDetails([...productsById.values()]);\n    }\n    return added;\n  } catch (error) {\n    logger.warn('[NamiExpo] Failed to load store products.', error);\n    return false;\n  }\n}\n\n/** Clear accumulated products. Called on Nami.reset so reconfigure doesn't serve stale data. */\nexport function reset(): void {\n  pending = pending.then(() => {\n    productsById.clear();\n    return false;\n  });\n}\n","import './adapters';\nimport { Nami as CoreNami, NamiPaywallManager, logger } from '@namiml/sdk-core';\nimport { backfill, collectSkuRefIds, reset as resetProductStore } from './products/productStore';\n\ntype ResettableCoreNami = typeof CoreNami & {\n  reset?: () => Promise<void>;\n};\n\n/**\n * Prefetch StoreKit/Play product details for every configured paywall's SKUs so that\n * prices are available before any paywall mounts (mirrors the Apple SDK startup load).\n * Fire-and-forget and error-safe: a failure here never blocks configure.\n */\nexport async function prefetchProducts(): Promise<void> {\n  try {\n    const ids = collectSkuRefIds(NamiPaywallManager.allPaywalls());\n    if (ids.length) await backfill(ids);\n  } catch (error) {\n    logger.warn('[NamiExpo] Product prefetch skipped.', error);\n  }\n}\n\nexport class Nami {\n  static get sdkVersion(): string {\n    return CoreNami.sdkVersion();\n  }\n\n  static sdkPackageVersion(): string {\n    return CoreNami.sdkPackageVersion();\n  }\n\n  static async configure(config: Parameters<typeof CoreNami.configure>[0]) {\n    const result = await CoreNami.configure(config);\n    void prefetchProducts();\n    return result;\n  }\n\n  static async reset(): Promise<void> {\n    resetProductStore();\n    await (CoreNami as ResettableCoreNami).reset?.();\n  }\n}\n","/**\n * @license React\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var f=require(\"react\"),k=Symbol.for(\"react.element\"),l=Symbol.for(\"react.fragment\"),m=Object.prototype.hasOwnProperty,n=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,g){var b,d={},e=null,h=null;void 0!==g&&(e=\"\"+g);void 0!==a.key&&(e=\"\"+a.key);void 0!==a.ref&&(h=a.ref);for(b in a)m.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:k,type:c,key:e,ref:h,props:d,_owner:n.current}}exports.Fragment=l;exports.jsx=q;exports.jsxs=q;\n","/**\n * @license React\n * react-jsx-runtime.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nif (process.env.NODE_ENV !== \"production\") {\n  (function() {\n'use strict';\n\nvar React = require('react');\n\n// ATTENTION\n// When adding new symbols to this file,\n// Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols'\n// The Symbol used to tag the ReactElement-like types.\nvar REACT_ELEMENT_TYPE = Symbol.for('react.element');\nvar REACT_PORTAL_TYPE = Symbol.for('react.portal');\nvar REACT_FRAGMENT_TYPE = Symbol.for('react.fragment');\nvar REACT_STRICT_MODE_TYPE = Symbol.for('react.strict_mode');\nvar REACT_PROFILER_TYPE = Symbol.for('react.profiler');\nvar REACT_PROVIDER_TYPE = Symbol.for('react.provider');\nvar REACT_CONTEXT_TYPE = Symbol.for('react.context');\nvar REACT_FORWARD_REF_TYPE = Symbol.for('react.forward_ref');\nvar REACT_SUSPENSE_TYPE = Symbol.for('react.suspense');\nvar REACT_SUSPENSE_LIST_TYPE = Symbol.for('react.suspense_list');\nvar REACT_MEMO_TYPE = Symbol.for('react.memo');\nvar REACT_LAZY_TYPE = Symbol.for('react.lazy');\nvar REACT_OFFSCREEN_TYPE = Symbol.for('react.offscreen');\nvar MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nvar FAUX_ITERATOR_SYMBOL = '@@iterator';\nfunction getIteratorFn(maybeIterable) {\n  if (maybeIterable === null || typeof maybeIterable !== 'object') {\n    return null;\n  }\n\n  var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];\n\n  if (typeof maybeIterator === 'function') {\n    return maybeIterator;\n  }\n\n  return null;\n}\n\nvar ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n\nfunction error(format) {\n  {\n    {\n      for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n        args[_key2 - 1] = arguments[_key2];\n      }\n\n      printWarning('error', format, args);\n    }\n  }\n}\n\nfunction printWarning(level, format, args) {\n  // When changing this logic, you might want to also\n  // update consoleWithStackDev.www.js as well.\n  {\n    var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n    var stack = ReactDebugCurrentFrame.getStackAddendum();\n\n    if (stack !== '') {\n      format += '%s';\n      args = args.concat([stack]);\n    } // eslint-disable-next-line react-internal/safe-string-coercion\n\n\n    var argsWithFormat = args.map(function (item) {\n      return String(item);\n    }); // Careful: RN currently depends on this prefix\n\n    argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it\n    // breaks IE9: https://github.com/facebook/react/issues/13610\n    // eslint-disable-next-line react-internal/no-production-logging\n\n    Function.prototype.apply.call(console[level], console, argsWithFormat);\n  }\n}\n\n// -----------------------------------------------------------------------------\n\nvar enableScopeAPI = false; // Experimental Create Event Handle API.\nvar enableCacheElement = false;\nvar enableTransitionTracing = false; // No known bugs, but needs performance testing\n\nvar enableLegacyHidden = false; // Enables unstable_avoidThisFallback feature in Fiber\n// stuff. Intended to enable React core members to more easily debug scheduling\n// issues in DEV builds.\n\nvar enableDebugTracing = false; // Track which Fiber(s) schedule render work.\n\nvar REACT_MODULE_REFERENCE;\n\n{\n  REACT_MODULE_REFERENCE = Symbol.for('react.module.reference');\n}\n\nfunction isValidElementType(type) {\n  if (typeof type === 'string' || typeof type === 'function') {\n    return true;\n  } // Note: typeof might be other than 'symbol' or 'number' (e.g. if it's a polyfill).\n\n\n  if (type === REACT_FRAGMENT_TYPE || type === REACT_PROFILER_TYPE || enableDebugTracing  || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || enableLegacyHidden  || type === REACT_OFFSCREEN_TYPE || enableScopeAPI  || enableCacheElement  || enableTransitionTracing ) {\n    return true;\n  }\n\n  if (typeof type === 'object' && type !== null) {\n    if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || // This needs to include all possible module reference object\n    // types supported by any Flight configuration anywhere since\n    // we don't know which Flight build this will end up being used\n    // with.\n    type.$$typeof === REACT_MODULE_REFERENCE || type.getModuleId !== undefined) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\nfunction getWrappedName(outerType, innerType, wrapperName) {\n  var displayName = outerType.displayName;\n\n  if (displayName) {\n    return displayName;\n  }\n\n  var functionName = innerType.displayName || innerType.name || '';\n  return functionName !== '' ? wrapperName + \"(\" + functionName + \")\" : wrapperName;\n} // Keep in sync with react-reconciler/getComponentNameFromFiber\n\n\nfunction getContextName(type) {\n  return type.displayName || 'Context';\n} // Note that the reconciler package should generally prefer to use getComponentNameFromFiber() instead.\n\n\nfunction getComponentNameFromType(type) {\n  if (type == null) {\n    // Host root, text node or just invalid type.\n    return null;\n  }\n\n  {\n    if (typeof type.tag === 'number') {\n      error('Received an unexpected object in getComponentNameFromType(). ' + 'This is likely a bug in React. Please file an issue.');\n    }\n  }\n\n  if (typeof type === 'function') {\n    return type.displayName || type.name || null;\n  }\n\n  if (typeof type === 'string') {\n    return type;\n  }\n\n  switch (type) {\n    case REACT_FRAGMENT_TYPE:\n      return 'Fragment';\n\n    case REACT_PORTAL_TYPE:\n      return 'Portal';\n\n    case REACT_PROFILER_TYPE:\n      return 'Profiler';\n\n    case REACT_STRICT_MODE_TYPE:\n      return 'StrictMode';\n\n    case REACT_SUSPENSE_TYPE:\n      return 'Suspense';\n\n    case REACT_SUSPENSE_LIST_TYPE:\n      return 'SuspenseList';\n\n  }\n\n  if (typeof type === 'object') {\n    switch (type.$$typeof) {\n      case REACT_CONTEXT_TYPE:\n        var context = type;\n        return getContextName(context) + '.Consumer';\n\n      case REACT_PROVIDER_TYPE:\n        var provider = type;\n        return getContextName(provider._context) + '.Provider';\n\n      case REACT_FORWARD_REF_TYPE:\n        return getWrappedName(type, type.render, 'ForwardRef');\n\n      case REACT_MEMO_TYPE:\n        var outerName = type.displayName || null;\n\n        if (outerName !== null) {\n          return outerName;\n        }\n\n        return getComponentNameFromType(type.type) || 'Memo';\n\n      case REACT_LAZY_TYPE:\n        {\n          var lazyComponent = type;\n          var payload = lazyComponent._payload;\n          var init = lazyComponent._init;\n\n          try {\n            return getComponentNameFromType(init(payload));\n          } catch (x) {\n            return null;\n          }\n        }\n\n      // eslint-disable-next-line no-fallthrough\n    }\n  }\n\n  return null;\n}\n\nvar assign = Object.assign;\n\n// Helpers to patch console.logs to avoid logging during side-effect free\n// replaying on render function. This currently only patches the object\n// lazily which won't cover if the log function was extracted eagerly.\n// We could also eagerly patch the method.\nvar disabledDepth = 0;\nvar prevLog;\nvar prevInfo;\nvar prevWarn;\nvar prevError;\nvar prevGroup;\nvar prevGroupCollapsed;\nvar prevGroupEnd;\n\nfunction disabledLog() {}\n\ndisabledLog.__reactDisabledLog = true;\nfunction disableLogs() {\n  {\n    if (disabledDepth === 0) {\n      /* eslint-disable react-internal/no-production-logging */\n      prevLog = console.log;\n      prevInfo = console.info;\n      prevWarn = console.warn;\n      prevError = console.error;\n      prevGroup = console.group;\n      prevGroupCollapsed = console.groupCollapsed;\n      prevGroupEnd = console.groupEnd; // https://github.com/facebook/react/issues/19099\n\n      var props = {\n        configurable: true,\n        enumerable: true,\n        value: disabledLog,\n        writable: true\n      }; // $FlowFixMe Flow thinks console is immutable.\n\n      Object.defineProperties(console, {\n        info: props,\n        log: props,\n        warn: props,\n        error: props,\n        group: props,\n        groupCollapsed: props,\n        groupEnd: props\n      });\n      /* eslint-enable react-internal/no-production-logging */\n    }\n\n    disabledDepth++;\n  }\n}\nfunction reenableLogs() {\n  {\n    disabledDepth--;\n\n    if (disabledDepth === 0) {\n      /* eslint-disable react-internal/no-production-logging */\n      var props = {\n        configurable: true,\n        enumerable: true,\n        writable: true\n      }; // $FlowFixMe Flow thinks console is immutable.\n\n      Object.defineProperties(console, {\n        log: assign({}, props, {\n          value: prevLog\n        }),\n        info: assign({}, props, {\n          value: prevInfo\n        }),\n        warn: assign({}, props, {\n          value: prevWarn\n        }),\n        error: assign({}, props, {\n          value: prevError\n        }),\n        group: assign({}, props, {\n          value: prevGroup\n        }),\n        groupCollapsed: assign({}, props, {\n          value: prevGroupCollapsed\n        }),\n        groupEnd: assign({}, props, {\n          value: prevGroupEnd\n        })\n      });\n      /* eslint-enable react-internal/no-production-logging */\n    }\n\n    if (disabledDepth < 0) {\n      error('disabledDepth fell below zero. ' + 'This is a bug in React. Please file an issue.');\n    }\n  }\n}\n\nvar ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher;\nvar prefix;\nfunction describeBuiltInComponentFrame(name, source, ownerFn) {\n  {\n    if (prefix === undefined) {\n      // Extract the VM specific prefix used by each line.\n      try {\n        throw Error();\n      } catch (x) {\n        var match = x.stack.trim().match(/\\n( *(at )?)/);\n        prefix = match && match[1] || '';\n      }\n    } // We use the prefix to ensure our stacks line up with native stack frames.\n\n\n    return '\\n' + prefix + name;\n  }\n}\nvar reentry = false;\nvar componentFrameCache;\n\n{\n  var PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map;\n  componentFrameCache = new PossiblyWeakMap();\n}\n\nfunction describeNativeComponentFrame(fn, construct) {\n  // If something asked for a stack inside a fake render, it should get ignored.\n  if ( !fn || reentry) {\n    return '';\n  }\n\n  {\n    var frame = componentFrameCache.get(fn);\n\n    if (frame !== undefined) {\n      return frame;\n    }\n  }\n\n  var control;\n  reentry = true;\n  var previousPrepareStackTrace = Error.prepareStackTrace; // $FlowFixMe It does accept undefined.\n\n  Error.prepareStackTrace = undefined;\n  var previousDispatcher;\n\n  {\n    previousDispatcher = ReactCurrentDispatcher.current; // Set the dispatcher in DEV because this might be call in the render function\n    // for warnings.\n\n    ReactCurrentDispatcher.current = null;\n    disableLogs();\n  }\n\n  try {\n    // This should throw.\n    if (construct) {\n      // Something should be setting the props in the constructor.\n      var Fake = function () {\n        throw Error();\n      }; // $FlowFixMe\n\n\n      Object.defineProperty(Fake.prototype, 'props', {\n        set: function () {\n          // We use a throwing setter instead of frozen or non-writable props\n          // because that won't throw in a non-strict mode function.\n          throw Error();\n        }\n      });\n\n      if (typeof Reflect === 'object' && Reflect.construct) {\n        // We construct a different control for this case to include any extra\n        // frames added by the construct call.\n        try {\n          Reflect.construct(Fake, []);\n        } catch (x) {\n          control = x;\n        }\n\n        Reflect.construct(fn, [], Fake);\n      } else {\n        try {\n          Fake.call();\n        } catch (x) {\n          control = x;\n        }\n\n        fn.call(Fake.prototype);\n      }\n    } else {\n      try {\n        throw Error();\n      } catch (x) {\n        control = x;\n      }\n\n      fn();\n    }\n  } catch (sample) {\n    // This is inlined manually because closure doesn't do it for us.\n    if (sample && control && typeof sample.stack === 'string') {\n      // This extracts the first frame from the sample that isn't also in the control.\n      // Skipping one frame that we assume is the frame that calls the two.\n      var sampleLines = sample.stack.split('\\n');\n      var controlLines = control.stack.split('\\n');\n      var s = sampleLines.length - 1;\n      var c = controlLines.length - 1;\n\n      while (s >= 1 && c >= 0 && sampleLines[s] !== controlLines[c]) {\n        // We expect at least one stack frame to be shared.\n        // Typically this will be the root most one. However, stack frames may be\n        // cut off due to maximum stack limits. In this case, one maybe cut off\n        // earlier than the other. We assume that the sample is longer or the same\n        // and there for cut off earlier. So we should find the root most frame in\n        // the sample somewhere in the control.\n        c--;\n      }\n\n      for (; s >= 1 && c >= 0; s--, c--) {\n        // Next we find the first one that isn't the same which should be the\n        // frame that called our sample function and the control.\n        if (sampleLines[s] !== controlLines[c]) {\n          // In V8, the first line is describing the message but other VMs don't.\n          // If we're about to return the first line, and the control is also on the same\n          // line, that's a pretty good indicator that our sample threw at same line as\n          // the control. I.e. before we entered the sample frame. So we ignore this result.\n          // This can happen if you passed a class to function component, or non-function.\n          if (s !== 1 || c !== 1) {\n            do {\n              s--;\n              c--; // We may still have similar intermediate frames from the construct call.\n              // The next one that isn't the same should be our match though.\n\n              if (c < 0 || sampleLines[s] !== controlLines[c]) {\n                // V8 adds a \"new\" prefix for native classes. Let's remove it to make it prettier.\n                var _frame = '\\n' + sampleLines[s].replace(' at new ', ' at '); // If our component frame is labeled \"<anonymous>\"\n                // but we have a user-provided \"displayName\"\n                // splice it in to make the stack more readable.\n\n\n                if (fn.displayName && _frame.includes('<anonymous>')) {\n                  _frame = _frame.replace('<anonymous>', fn.displayName);\n                }\n\n                {\n                  if (typeof fn === 'function') {\n                    componentFrameCache.set(fn, _frame);\n                  }\n                } // Return the line we found.\n\n\n                return _frame;\n              }\n            } while (s >= 1 && c >= 0);\n          }\n\n          break;\n        }\n      }\n    }\n  } finally {\n    reentry = false;\n\n    {\n      ReactCurrentDispatcher.current = previousDispatcher;\n      reenableLogs();\n    }\n\n    Error.prepareStackTrace = previousPrepareStackTrace;\n  } // Fallback to just using the name if we couldn't make it throw.\n\n\n  var name = fn ? fn.displayName || fn.name : '';\n  var syntheticFrame = name ? describeBuiltInComponentFrame(name) : '';\n\n  {\n    if (typeof fn === 'function') {\n      componentFrameCache.set(fn, syntheticFrame);\n    }\n  }\n\n  return syntheticFrame;\n}\nfunction describeFunctionComponentFrame(fn, source, ownerFn) {\n  {\n    return describeNativeComponentFrame(fn, false);\n  }\n}\n\nfunction shouldConstruct(Component) {\n  var prototype = Component.prototype;\n  return !!(prototype && prototype.isReactComponent);\n}\n\nfunction describeUnknownElementTypeFrameInDEV(type, source, ownerFn) {\n\n  if (type == null) {\n    return '';\n  }\n\n  if (typeof type === 'function') {\n    {\n      return describeNativeComponentFrame(type, shouldConstruct(type));\n    }\n  }\n\n  if (typeof type === 'string') {\n    return describeBuiltInComponentFrame(type);\n  }\n\n  switch (type) {\n    case REACT_SUSPENSE_TYPE:\n      return describeBuiltInComponentFrame('Suspense');\n\n    case REACT_SUSPENSE_LIST_TYPE:\n      return describeBuiltInComponentFrame('SuspenseList');\n  }\n\n  if (typeof type === 'object') {\n    switch (type.$$typeof) {\n      case REACT_FORWARD_REF_TYPE:\n        return describeFunctionComponentFrame(type.render);\n\n      case REACT_MEMO_TYPE:\n        // Memo may contain any component type so we recursively resolve it.\n        return describeUnknownElementTypeFrameInDEV(type.type, source, ownerFn);\n\n      case REACT_LAZY_TYPE:\n        {\n          var lazyComponent = type;\n          var payload = lazyComponent._payload;\n          var init = lazyComponent._init;\n\n          try {\n            // Lazy may contain any component type so we recursively resolve it.\n            return describeUnknownElementTypeFrameInDEV(init(payload), source, ownerFn);\n          } catch (x) {}\n        }\n    }\n  }\n\n  return '';\n}\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nvar loggedTypeFailures = {};\nvar ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n\nfunction setCurrentlyValidatingElement(element) {\n  {\n    if (element) {\n      var owner = element._owner;\n      var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);\n      ReactDebugCurrentFrame.setExtraStackFrame(stack);\n    } else {\n      ReactDebugCurrentFrame.setExtraStackFrame(null);\n    }\n  }\n}\n\nfunction checkPropTypes(typeSpecs, values, location, componentName, element) {\n  {\n    // $FlowFixMe This is okay but Flow doesn't know it.\n    var has = Function.call.bind(hasOwnProperty);\n\n    for (var typeSpecName in typeSpecs) {\n      if (has(typeSpecs, typeSpecName)) {\n        var error$1 = void 0; // Prop type validation may throw. In case they do, we don't want to\n        // fail the render phase where it didn't fail before. So we log it.\n        // After these have been cleaned up, we'll let them throw.\n\n        try {\n          // This is intentionally an invariant that gets caught. It's the same\n          // behavior as without this statement except with a better message.\n          if (typeof typeSpecs[typeSpecName] !== 'function') {\n            // eslint-disable-next-line react-internal/prod-error-codes\n            var err = Error((componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' + 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.');\n            err.name = 'Invariant Violation';\n            throw err;\n          }\n\n          error$1 = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED');\n        } catch (ex) {\n          error$1 = ex;\n        }\n\n        if (error$1 && !(error$1 instanceof Error)) {\n          setCurrentlyValidatingElement(element);\n\n          error('%s: type specification of %s' + ' `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', location, typeSpecName, typeof error$1);\n\n          setCurrentlyValidatingElement(null);\n        }\n\n        if (error$1 instanceof Error && !(error$1.message in loggedTypeFailures)) {\n          // Only monitor this failure once because there tends to be a lot of the\n          // same error.\n          loggedTypeFailures[error$1.message] = true;\n          setCurrentlyValidatingElement(element);\n\n          error('Failed %s type: %s', location, error$1.message);\n\n          setCurrentlyValidatingElement(null);\n        }\n      }\n    }\n  }\n}\n\nvar isArrayImpl = Array.isArray; // eslint-disable-next-line no-redeclare\n\nfunction isArray(a) {\n  return isArrayImpl(a);\n}\n\n/*\n * The `'' + value` pattern (used in in perf-sensitive code) throws for Symbol\n * and Temporal.* types. See https://github.com/facebook/react/pull/22064.\n *\n * The functions in this module will throw an easier-to-understand,\n * easier-to-debug exception with a clear errors message message explaining the\n * problem. (Instead of a confusing exception thrown inside the implementation\n * of the `value` object).\n */\n// $FlowFixMe only called in DEV, so void return is not possible.\nfunction typeName(value) {\n  {\n    // toStringTag is needed for namespaced types like Temporal.Instant\n    var hasToStringTag = typeof Symbol === 'function' && Symbol.toStringTag;\n    var type = hasToStringTag && value[Symbol.toStringTag] || value.constructor.name || 'Object';\n    return type;\n  }\n} // $FlowFixMe only called in DEV, so void return is not possible.\n\n\nfunction willCoercionThrow(value) {\n  {\n    try {\n      testStringCoercion(value);\n      return false;\n    } catch (e) {\n      return true;\n    }\n  }\n}\n\nfunction testStringCoercion(value) {\n  // If you ended up here by following an exception call stack, here's what's\n  // happened: you supplied an object or symbol value to React (as a prop, key,\n  // DOM attribute, CSS property, string ref, etc.) and when React tried to\n  // coerce it to a string using `'' + value`, an exception was thrown.\n  //\n  // The most common types that will cause this exception are `Symbol` instances\n  // and Temporal objects like `Temporal.Instant`. But any object that has a\n  // `valueOf` or `[Symbol.toPrimitive]` method that throws will also cause this\n  // exception. (Library authors do this to prevent users from using built-in\n  // numeric operators like `+` or comparison operators like `>=` because custom\n  // methods are needed to perform accurate arithmetic or comparison.)\n  //\n  // To fix the problem, coerce this object or symbol value to a string before\n  // passing it to React. The most reliable way is usually `String(value)`.\n  //\n  // To find which value is throwing, check the browser or debugger console.\n  // Before this exception was thrown, there should be `console.error` output\n  // that shows the type (Symbol, Temporal.PlainDate, etc.) that caused the\n  // problem and how that type was used: key, atrribute, input value prop, etc.\n  // In most cases, this console output also shows the component and its\n  // ancestor components where the exception happened.\n  //\n  // eslint-disable-next-line react-internal/safe-string-coercion\n  return '' + value;\n}\nfunction checkKeyStringCoercion(value) {\n  {\n    if (willCoercionThrow(value)) {\n      error('The provided key is an unsupported type %s.' + ' This value must be coerced to a string before before using it here.', typeName(value));\n\n      return testStringCoercion(value); // throw (to help callers find troubleshooting comments)\n    }\n  }\n}\n\nvar ReactCurrentOwner = ReactSharedInternals.ReactCurrentOwner;\nvar RESERVED_PROPS = {\n  key: true,\n  ref: true,\n  __self: true,\n  __source: true\n};\nvar specialPropKeyWarningShown;\nvar specialPropRefWarningShown;\nvar didWarnAboutStringRefs;\n\n{\n  didWarnAboutStringRefs = {};\n}\n\nfunction hasValidRef(config) {\n  {\n    if (hasOwnProperty.call(config, 'ref')) {\n      var getter = Object.getOwnPropertyDescriptor(config, 'ref').get;\n\n      if (getter && getter.isReactWarning) {\n        return false;\n      }\n    }\n  }\n\n  return config.ref !== undefined;\n}\n\nfunction hasValidKey(config) {\n  {\n    if (hasOwnProperty.call(config, 'key')) {\n      var getter = Object.getOwnPropertyDescriptor(config, 'key').get;\n\n      if (getter && getter.isReactWarning) {\n        return false;\n      }\n    }\n  }\n\n  return config.key !== undefined;\n}\n\nfunction warnIfStringRefCannotBeAutoConverted(config, self) {\n  {\n    if (typeof config.ref === 'string' && ReactCurrentOwner.current && self && ReactCurrentOwner.current.stateNode !== self) {\n      var componentName = getComponentNameFromType(ReactCurrentOwner.current.type);\n\n      if (!didWarnAboutStringRefs[componentName]) {\n        error('Component \"%s\" contains the string ref \"%s\". ' + 'Support for string refs will be removed in a future major release. ' + 'This case cannot be automatically converted to an arrow function. ' + 'We ask you to manually fix this case by using useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-string-ref', getComponentNameFromType(ReactCurrentOwner.current.type), config.ref);\n\n        didWarnAboutStringRefs[componentName] = true;\n      }\n    }\n  }\n}\n\nfunction defineKeyPropWarningGetter(props, displayName) {\n  {\n    var warnAboutAccessingKey = function () {\n      if (!specialPropKeyWarningShown) {\n        specialPropKeyWarningShown = true;\n\n        error('%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);\n      }\n    };\n\n    warnAboutAccessingKey.isReactWarning = true;\n    Object.defineProperty(props, 'key', {\n      get: warnAboutAccessingKey,\n      configurable: true\n    });\n  }\n}\n\nfunction defineRefPropWarningGetter(props, displayName) {\n  {\n    var warnAboutAccessingRef = function () {\n      if (!specialPropRefWarningShown) {\n        specialPropRefWarningShown = true;\n\n        error('%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);\n      }\n    };\n\n    warnAboutAccessingRef.isReactWarning = true;\n    Object.defineProperty(props, 'ref', {\n      get: warnAboutAccessingRef,\n      configurable: true\n    });\n  }\n}\n/**\n * Factory method to create a new React element. This no longer adheres to\n * the class pattern, so do not use new to call it. Also, instanceof check\n * will not work. Instead test $$typeof field against Symbol.for('react.element') to check\n * if something is a React Element.\n *\n * @param {*} type\n * @param {*} props\n * @param {*} key\n * @param {string|object} ref\n * @param {*} owner\n * @param {*} self A *temporary* helper to detect places where `this` is\n * different from the `owner` when React.createElement is called, so that we\n * can warn. We want to get rid of owner and replace string `ref`s with arrow\n * functions, and as long as `this` and owner are the same, there will be no\n * change in behavior.\n * @param {*} source An annotation object (added by a transpiler or otherwise)\n * indicating filename, line number, and/or other information.\n * @internal\n */\n\n\nvar ReactElement = function (type, key, ref, self, source, owner, props) {\n  var element = {\n    // This tag allows us to uniquely identify this as a React Element\n    $$typeof: REACT_ELEMENT_TYPE,\n    // Built-in properties that belong on the element\n    type: type,\n    key: key,\n    ref: ref,\n    props: props,\n    // Record the component responsible for creating this element.\n    _owner: owner\n  };\n\n  {\n    // The validation flag is currently mutative. We put it on\n    // an external backing store so that we can freeze the whole object.\n    // This can be replaced with a WeakMap once they are implemented in\n    // commonly used development environments.\n    element._store = {}; // To make comparing ReactElements easier for testing purposes, we make\n    // the validation flag non-enumerable (where possible, which should\n    // include every environment we run tests in), so the test framework\n    // ignores it.\n\n    Object.defineProperty(element._store, 'validated', {\n      configurable: false,\n      enumerable: false,\n      writable: true,\n      value: false\n    }); // self and source are DEV only properties.\n\n    Object.defineProperty(element, '_self', {\n      configurable: false,\n      enumerable: false,\n      writable: false,\n      value: self\n    }); // Two elements created in two different places should be considered\n    // equal for testing purposes and therefore we hide it from enumeration.\n\n    Object.defineProperty(element, '_source', {\n      configurable: false,\n      enumerable: false,\n      writable: false,\n      value: source\n    });\n\n    if (Object.freeze) {\n      Object.freeze(element.props);\n      Object.freeze(element);\n    }\n  }\n\n  return element;\n};\n/**\n * https://github.com/reactjs/rfcs/pull/107\n * @param {*} type\n * @param {object} props\n * @param {string} key\n */\n\nfunction jsxDEV(type, config, maybeKey, source, self) {\n  {\n    var propName; // Reserved names are extracted\n\n    var props = {};\n    var key = null;\n    var ref = null; // Currently, key can be spread in as a prop. This causes a potential\n    // issue if key is also explicitly declared (ie. <div {...props} key=\"Hi\" />\n    // or <div key=\"Hi\" {...props} /> ). We want to deprecate key spread,\n    // but as an intermediary step, we will use jsxDEV for everything except\n    // <div {...props} key=\"Hi\" />, because we aren't currently able to tell if\n    // key is explicitly declared to be undefined or not.\n\n    if (maybeKey !== undefined) {\n      {\n        checkKeyStringCoercion(maybeKey);\n      }\n\n      key = '' + maybeKey;\n    }\n\n    if (hasValidKey(config)) {\n      {\n        checkKeyStringCoercion(config.key);\n      }\n\n      key = '' + config.key;\n    }\n\n    if (hasValidRef(config)) {\n      ref = config.ref;\n      warnIfStringRefCannotBeAutoConverted(config, self);\n    } // Remaining properties are added to a new props object\n\n\n    for (propName in config) {\n      if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\n        props[propName] = config[propName];\n      }\n    } // Resolve default props\n\n\n    if (type && type.defaultProps) {\n      var defaultProps = type.defaultProps;\n\n      for (propName in defaultProps) {\n        if (props[propName] === undefined) {\n          props[propName] = defaultProps[propName];\n        }\n      }\n    }\n\n    if (key || ref) {\n      var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type;\n\n      if (key) {\n        defineKeyPropWarningGetter(props, displayName);\n      }\n\n      if (ref) {\n        defineRefPropWarningGetter(props, displayName);\n      }\n    }\n\n    return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);\n  }\n}\n\nvar ReactCurrentOwner$1 = ReactSharedInternals.ReactCurrentOwner;\nvar ReactDebugCurrentFrame$1 = ReactSharedInternals.ReactDebugCurrentFrame;\n\nfunction setCurrentlyValidatingElement$1(element) {\n  {\n    if (element) {\n      var owner = element._owner;\n      var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);\n      ReactDebugCurrentFrame$1.setExtraStackFrame(stack);\n    } else {\n      ReactDebugCurrentFrame$1.setExtraStackFrame(null);\n    }\n  }\n}\n\nvar propTypesMisspellWarningShown;\n\n{\n  propTypesMisspellWarningShown = false;\n}\n/**\n * Verifies the object is a ReactElement.\n * See https://reactjs.org/docs/react-api.html#isvalidelement\n * @param {?object} object\n * @return {boolean} True if `object` is a ReactElement.\n * @final\n */\n\n\nfunction isValidElement(object) {\n  {\n    return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n  }\n}\n\nfunction getDeclarationErrorAddendum() {\n  {\n    if (ReactCurrentOwner$1.current) {\n      var name = getComponentNameFromType(ReactCurrentOwner$1.current.type);\n\n      if (name) {\n        return '\\n\\nCheck the render method of `' + name + '`.';\n      }\n    }\n\n    return '';\n  }\n}\n\nfunction getSourceInfoErrorAddendum(source) {\n  {\n    if (source !== undefined) {\n      var fileName = source.fileName.replace(/^.*[\\\\\\/]/, '');\n      var lineNumber = source.lineNumber;\n      return '\\n\\nCheck your code at ' + fileName + ':' + lineNumber + '.';\n    }\n\n    return '';\n  }\n}\n/**\n * Warn if there's no key explicitly set on dynamic arrays of children or\n * object keys are not valid. This allows us to keep track of children between\n * updates.\n */\n\n\nvar ownerHasKeyUseWarning = {};\n\nfunction getCurrentComponentErrorInfo(parentType) {\n  {\n    var info = getDeclarationErrorAddendum();\n\n    if (!info) {\n      var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name;\n\n      if (parentName) {\n        info = \"\\n\\nCheck the top-level render call using <\" + parentName + \">.\";\n      }\n    }\n\n    return info;\n  }\n}\n/**\n * Warn if the element doesn't have an explicit key assigned to it.\n * This element is in an array. The array could grow and shrink or be\n * reordered. All children that haven't already been validated are required to\n * have a \"key\" property assigned to it. Error statuses are cached so a warning\n * will only be shown once.\n *\n * @internal\n * @param {ReactElement} element Element that requires a key.\n * @param {*} parentType element's parent's type.\n */\n\n\nfunction validateExplicitKey(element, parentType) {\n  {\n    if (!element._store || element._store.validated || element.key != null) {\n      return;\n    }\n\n    element._store.validated = true;\n    var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType);\n\n    if (ownerHasKeyUseWarning[currentComponentErrorInfo]) {\n      return;\n    }\n\n    ownerHasKeyUseWarning[currentComponentErrorInfo] = true; // Usually the current owner is the offender, but if it accepts children as a\n    // property, it may be the creator of the child that's responsible for\n    // assigning it a key.\n\n    var childOwner = '';\n\n    if (element && element._owner && element._owner !== ReactCurrentOwner$1.current) {\n      // Give the component that originally created this child.\n      childOwner = \" It was passed a child from \" + getComponentNameFromType(element._owner.type) + \".\";\n    }\n\n    setCurrentlyValidatingElement$1(element);\n\n    error('Each child in a list should have a unique \"key\" prop.' + '%s%s See https://reactjs.org/link/warning-keys for more information.', currentComponentErrorInfo, childOwner);\n\n    setCurrentlyValidatingElement$1(null);\n  }\n}\n/**\n * Ensure that every element either is passed in a static location, in an\n * array with an explicit keys property defined, or in an object literal\n * with valid key property.\n *\n * @internal\n * @param {ReactNode} node Statically passed child of any type.\n * @param {*} parentType node's parent's type.\n */\n\n\nfunction validateChildKeys(node, parentType) {\n  {\n    if (typeof node !== 'object') {\n      return;\n    }\n\n    if (isArray(node)) {\n      for (var i = 0; i < node.length; i++) {\n        var child = node[i];\n\n        if (isValidElement(child)) {\n          validateExplicitKey(child, parentType);\n        }\n      }\n    } else if (isValidElement(node)) {\n      // This element was passed in a valid location.\n      if (node._store) {\n        node._store.validated = true;\n      }\n    } else if (node) {\n      var iteratorFn = getIteratorFn(node);\n\n      if (typeof iteratorFn === 'function') {\n        // Entry iterators used to provide implicit keys,\n        // but now we print a separate warning for them later.\n        if (iteratorFn !== node.entries) {\n          var iterator = iteratorFn.call(node);\n          var step;\n\n          while (!(step = iterator.next()).done) {\n            if (isValidElement(step.value)) {\n              validateExplicitKey(step.value, parentType);\n            }\n          }\n        }\n      }\n    }\n  }\n}\n/**\n * Given an element, validate that its props follow the propTypes definition,\n * provided by the type.\n *\n * @param {ReactElement} element\n */\n\n\nfunction validatePropTypes(element) {\n  {\n    var type = element.type;\n\n    if (type === null || type === undefined || typeof type === 'string') {\n      return;\n    }\n\n    var propTypes;\n\n    if (typeof type === 'function') {\n      propTypes = type.propTypes;\n    } else if (typeof type === 'object' && (type.$$typeof === REACT_FORWARD_REF_TYPE || // Note: Memo only checks outer props here.\n    // Inner props are checked in the reconciler.\n    type.$$typeof === REACT_MEMO_TYPE)) {\n      propTypes = type.propTypes;\n    } else {\n      return;\n    }\n\n    if (propTypes) {\n      // Intentionally inside to avoid triggering lazy initializers:\n      var name = getComponentNameFromType(type);\n      checkPropTypes(propTypes, element.props, 'prop', name, element);\n    } else if (type.PropTypes !== undefined && !propTypesMisspellWarningShown) {\n      propTypesMisspellWarningShown = true; // Intentionally inside to avoid triggering lazy initializers:\n\n      var _name = getComponentNameFromType(type);\n\n      error('Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?', _name || 'Unknown');\n    }\n\n    if (typeof type.getDefaultProps === 'function' && !type.getDefaultProps.isReactClassApproved) {\n      error('getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.');\n    }\n  }\n}\n/**\n * Given a fragment, validate that it can only be provided with fragment props\n * @param {ReactElement} fragment\n */\n\n\nfunction validateFragmentProps(fragment) {\n  {\n    var keys = Object.keys(fragment.props);\n\n    for (var i = 0; i < keys.length; i++) {\n      var key = keys[i];\n\n      if (key !== 'children' && key !== 'key') {\n        setCurrentlyValidatingElement$1(fragment);\n\n        error('Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.', key);\n\n        setCurrentlyValidatingElement$1(null);\n        break;\n      }\n    }\n\n    if (fragment.ref !== null) {\n      setCurrentlyValidatingElement$1(fragment);\n\n      error('Invalid attribute `ref` supplied to `React.Fragment`.');\n\n      setCurrentlyValidatingElement$1(null);\n    }\n  }\n}\n\nvar didWarnAboutKeySpread = {};\nfunction jsxWithValidation(type, props, key, isStaticChildren, source, self) {\n  {\n    var validType = isValidElementType(type); // We warn in this case but don't throw. We expect the element creation to\n    // succeed and there will likely be errors in render.\n\n    if (!validType) {\n      var info = '';\n\n      if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {\n        info += ' You likely forgot to export your component from the file ' + \"it's defined in, or you might have mixed up default and named imports.\";\n      }\n\n      var sourceInfo = getSourceInfoErrorAddendum(source);\n\n      if (sourceInfo) {\n        info += sourceInfo;\n      } else {\n        info += getDeclarationErrorAddendum();\n      }\n\n      var typeString;\n\n      if (type === null) {\n        typeString = 'null';\n      } else if (isArray(type)) {\n        typeString = 'array';\n      } else if (type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE) {\n        typeString = \"<\" + (getComponentNameFromType(type.type) || 'Unknown') + \" />\";\n        info = ' Did you accidentally export a JSX literal instead of a component?';\n      } else {\n        typeString = typeof type;\n      }\n\n      error('React.jsx: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', typeString, info);\n    }\n\n    var element = jsxDEV(type, props, key, source, self); // The result can be nullish if a mock or a custom function is used.\n    // TODO: Drop this when these are no longer allowed as the type argument.\n\n    if (element == null) {\n      return element;\n    } // Skip key warning if the type isn't valid since our key validation logic\n    // doesn't expect a non-string/function type and can throw confusing errors.\n    // We don't want exception behavior to differ between dev and prod.\n    // (Rendering will throw with a helpful message and as soon as the type is\n    // fixed, the key warnings will appear.)\n\n\n    if (validType) {\n      var children = props.children;\n\n      if (children !== undefined) {\n        if (isStaticChildren) {\n          if (isArray(children)) {\n            for (var i = 0; i < children.length; i++) {\n              validateChildKeys(children[i], type);\n            }\n\n            if (Object.freeze) {\n              Object.freeze(children);\n            }\n          } else {\n            error('React.jsx: Static children should always be an array. ' + 'You are likely explicitly calling React.jsxs or React.jsxDEV. ' + 'Use the Babel transform instead.');\n          }\n        } else {\n          validateChildKeys(children, type);\n        }\n      }\n    }\n\n    {\n      if (hasOwnProperty.call(props, 'key')) {\n        var componentName = getComponentNameFromType(type);\n        var keys = Object.keys(props).filter(function (k) {\n          return k !== 'key';\n        });\n        var beforeExample = keys.length > 0 ? '{key: someKey, ' + keys.join(': ..., ') + ': ...}' : '{key: someKey}';\n\n        if (!didWarnAboutKeySpread[componentName + beforeExample]) {\n          var afterExample = keys.length > 0 ? '{' + keys.join(': ..., ') + ': ...}' : '{}';\n\n          error('A props object containing a \"key\" prop is being spread into JSX:\\n' + '  let props = %s;\\n' + '  <%s {...props} />\\n' + 'React keys must be passed directly to JSX without using spread:\\n' + '  let props = %s;\\n' + '  <%s key={someKey} {...props} />', beforeExample, componentName, afterExample, componentName);\n\n          didWarnAboutKeySpread[componentName + beforeExample] = true;\n        }\n      }\n    }\n\n    if (type === REACT_FRAGMENT_TYPE) {\n      validateFragmentProps(element);\n    } else {\n      validatePropTypes(element);\n    }\n\n    return element;\n  }\n} // These two functions exist to still get child warnings in dev\n// even with the prod transform. This means that jsxDEV is purely\n// opt-in behavior for better messages but that we won't stop\n// giving you warnings if you use production apis.\n\nfunction jsxWithValidationStatic(type, props, key) {\n  {\n    return jsxWithValidation(type, props, key, true);\n  }\n}\nfunction jsxWithValidationDynamic(type, props, key) {\n  {\n    return jsxWithValidation(type, props, key, false);\n  }\n}\n\nvar jsx =  jsxWithValidationDynamic ; // we may want to special case jsxs internally to take advantage of static children.\n// for now we can ship identical prod functions\n\nvar jsxs =  jsxWithValidationStatic ;\n\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsx = jsx;\nexports.jsxs = jsxs;\n  })();\n}\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react-jsx-runtime.production.min.js');\n} else {\n  module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","import React, { createContext, useContext, useEffect, useMemo, useRef, useState } from 'react';\nimport { Dimensions } from 'react-native';\nimport type {\n  IPaywall, ISkuMenu, TPaywallContext, NamiPaywallLaunchContext,\n  NamiCampaign, NamiProductDetails, NamiSKU, NamiPaywallEvent,\n  TDevice, TimerState, TPaywallMedia, NamiAppSuppliedVideoDetails,\n  NamiFlow, FormFieldValidator,\n} from '@namiml/sdk-core';\nimport { PaywallState, initialState } from '@namiml/sdk-core';\n\ntype PaywallStateWithPageHistory = PaywallState & {\n  canGoBackPage(): boolean;\n  goBackPage(): boolean;\n};\n\nfunction asMethod<TArgs extends unknown[], TResult>(\n  candidate: unknown,\n): ((...args: TArgs) => TResult) | undefined {\n  return typeof candidate === 'function'\n    ? (candidate as (...args: TArgs) => TResult)\n    : undefined;\n}\n\nexport interface PaywallContextValue {\n  state: TPaywallContext;\n  productDetails: NamiProductDetails[];\n  flow?: NamiFlow;\n  filteredSkuMenus: ISkuMenu[];\n  setPaywall(paywall: IPaywall, context: NamiPaywallLaunchContext, campaign: NamiCampaign): void;\n  notifyFirstFocusReady(paywallId: string, page: string, formFactor?: string): void;\n  setCurrentPage(page: string): void;\n  canGoBackPage(): boolean;\n  goBackPage(): boolean;\n  setCurrentGroupData(groupId: string, groupName: string): void;\n  setSelectedProducts(products: Record<string, string | null>): void;\n  setCurrentFormId(formId: string, value?: string): void;\n  setFormState(formId: string, value: boolean | string): void;\n  registerFormFieldValidator(formId: string, validator: FormFieldValidator): void;\n  setFormFieldError(formId: string, message: string): void;\n  clearFormFieldError(formId: string): void;\n  setTimerState(timerId: string, remainingSeconds: number, savedAt: number, hasEmittedCompletion: boolean): void;\n  getTimerState(timerId: string): TimerState | undefined;\n  setProductDetails(details: NamiProductDetails[]): void;\n  setPurchaseInProgress(inProgress: boolean): void;\n  setPurchase(inProgress: boolean, product?: NamiSKU): void;\n  setCustomerAttribute(attributes: Record<string, string>): void;\n  removeCustomerAttribute(key: string): void;\n  setIsLoggedIn(isLoggedIn: boolean): void;\n  setAppSuppliedVideoDetails(details: NamiAppSuppliedVideoDetails): void;\n  resetAppSuppliedVideoDetails(): void;\n  setMediaList(media: TPaywallMedia[]): void;\n  setSafeAreaTop(top: number): void;\n  setFullScreenPresentation(full: boolean): void;\n  setFormFactor(factor: TDevice): void;\n  setUserInteractionEnabled(enabled: boolean): void;\n  setUserTags(tags: Record<string, string>): void;\n  setLaunchDetails(value: string, type?: string): void;\n  setOpenHeaderIds(id: string, sku?: NamiSKU): void;\n  setFlow(flow: NamiFlow): void;\n  setCurrentSlideIndex(index: number): void;\n  getPaywallActionEventData(): Partial<NamiPaywallEvent>;\n  getSelectedPaywall(): IPaywall | undefined;\n  getSelectedCampaign(): NamiCampaign | undefined;\n}\n\nconst PaywallCtx = createContext<PaywallContextValue | null>(null);\nconst FirstFocusReadyCtx = createContext<{\n  firstFocusReadyKey: string | null;\n  notifyFirstFocusReady(paywallId: string, page: string, formFactor?: string): void;\n} | null>(null);\n\nexport function usePaywallContext(): PaywallContextValue {\n  const ctx = useContext(PaywallCtx);\n  if (!ctx) throw new Error('usePaywallContext must be used within a PaywallProvider');\n  return ctx;\n}\n\nexport function useFirstFocusReadyContext(): {\n  firstFocusReadyKey: string | null;\n  notifyFirstFocusReady(paywallId: string, page: string, formFactor?: string): void;\n} {\n  const ctx = useContext(FirstFocusReadyCtx);\n  if (!ctx) throw new Error('useFirstFocusReadyContext must be used within a PaywallProvider');\n  return ctx;\n}\n\ninterface PaywallProviderProps {\n  paywall: IPaywall;\n  context: NamiPaywallLaunchContext;\n  campaign: NamiCampaign;\n  flow?: NamiFlow;\n  onFirstFocusReady?: (paywallId: string, page: string, formFactor?: string) => void;\n  children: React.ReactNode;\n}\n\nexport const PaywallProvider: React.FC<PaywallProviderProps> = ({\n  paywall, context, campaign, flow, onFirstFocusReady, children,\n}) => {\n  const providerRef = useRef<PaywallStateWithPageHistory | null>(null);\n  const pageHistoryRef = useRef<string[]>([]);\n  const [firstFocusReadyKey, setFirstFocusReadyKey] = useState<string | null>(null);\n\n  const [state, setState] = useState<TPaywallContext>(() => {\n    const provider = PaywallState.create(paywall, context, campaign) as PaywallStateWithPageHistory;\n    if (flow) provider.setFlow(flow);\n    providerRef.current = provider;\n    pageHistoryRef.current = [provider.state.currentPage ?? paywall.template?.initialState?.currentPage ?? 'page1'];\n    return cloneStateWithDynamicProps(provider.state, provider);\n  });\n\n  useEffect(() => {\n    const provider = providerRef.current;\n    if (!provider) return;\n    const unsubscribe = provider.subscribe(() => {\n      setState(cloneStateWithDynamicProps(provider.state, provider));\n    });\n    return () => {\n      unsubscribe();\n      PaywallState.remove(provider);\n    };\n  }, []);\n\n  useEffect(() => {\n    const provider = providerRef.current;\n    if (!provider) return;\n    setFirstFocusReadyKey(null);\n    provider.setPaywall(paywall, context, campaign);\n    if (flow) provider.setFlow(flow);\n    pageHistoryRef.current = [provider.state.currentPage ?? paywall.template?.initialState?.currentPage ?? 'page1'];\n    setState(cloneStateWithDynamicProps(provider.state, provider));\n  }, [paywall, context, campaign, flow]);\n\n  const methods = useMemo(() => ({\n    setPaywall: (nextPaywall: IPaywall, nextContext: NamiPaywallLaunchContext, nextCampaign: NamiCampaign) => {\n      providerRef.current?.setPaywall(nextPaywall, nextContext, nextCampaign);\n      const provider = providerRef.current;\n      pageHistoryRef.current = [provider?.state.currentPage ?? nextPaywall.template?.initialState?.currentPage ?? 'page1'];\n    },\n    setCurrentPage: (page: string) => {\n      const provider = providerRef.current;\n      const currentPage = provider?.state.currentPage ?? pageHistoryRef.current[pageHistoryRef.current.length - 1] ?? 'page1';\n      if (!page || page === currentPage) {\n        return;\n      }\n      const currentHistory = pageHistoryRef.current.length ? pageHistoryRef.current : [currentPage];\n      pageHistoryRef.current = [...currentHistory, page];\n      provider?.setCurrentPage(page);\n    },\n    canGoBackPage: () => {\n      if (pageHistoryRef.current.length > 1) {\n        return true;\n      }\n      return asMethod<[], boolean>(providerRef.current?.canGoBackPage)?.call(providerRef.current) ?? false;\n    },\n    goBackPage: () => {\n      const provider = providerRef.current;\n      if (pageHistoryRef.current.length > 1) {\n        const nextHistory = [...pageHistoryRef.current];\n        nextHistory.pop();\n        const previousPage = nextHistory[nextHistory.length - 1];\n        if (!previousPage) {\n          return false;\n        }\n\n        pageHistoryRef.current = nextHistory;\n        const providerHandled =\n          asMethod<[], boolean>(provider?.goBackPage)?.call(provider) ?? false;\n        if (!providerHandled) {\n          provider?.setCurrentPage(previousPage);\n        }\n        return true;\n      }\n      return asMethod<[], boolean>(provider?.goBackPage)?.call(provider) ?? false;\n    },\n    setCurrentGroupData: (groupId: string, groupName: string) => {\n      providerRef.current?.setCurrentGroupData(groupId, groupName);\n    },\n    setSelectedProducts: (products: Record<string, string | null>) => {\n      providerRef.current?.setSelectedProducts(products);\n    },\n    setCurrentFormId: (formId: string, value?: string) => {\n      providerRef.current?.setCurrentFormId(formId, value);\n    },\n    setFormState: (formId: string, value: boolean | string) => {\n      providerRef.current?.setFormState(formId, value);\n    },\n    registerFormFieldValidator: (formId: string, validator: FormFieldValidator) => {\n      providerRef.current?.registerFormFieldValidator(formId, validator);\n    },\n    setFormFieldError: (formId: string, message: string) => {\n      providerRef.current?.setFormFieldError(formId, message);\n    },\n    clearFormFieldError: (formId: string) => {\n      providerRef.current?.clearFormFieldError(formId);\n    },\n    setTimerState: (timerId: string, remainingSeconds: number, savedAt: number, hasEmittedCompletion: boolean) => {\n      providerRef.current?.setTimerState(timerId, remainingSeconds, savedAt, hasEmittedCompletion);\n    },\n    getTimerState: (timerId: string) => {\n      return providerRef.current?.getTimerState(timerId);\n    },\n    setProductDetails: (details: NamiProductDetails[]) => {\n      providerRef.current?.setProductDetails(details);\n    },\n    setPurchaseInProgress: (inProgress: boolean) => {\n      providerRef.current?.setPurchaseInProgress(inProgress);\n    },\n    setPurchase: (inProgress: boolean, product?: NamiSKU) => {\n      providerRef.current?.setPurchase(inProgress, product);\n    },\n    setCustomerAttribute: (attributes: Record<string, string>) => {\n      providerRef.current?.setCustomerAttribute(attributes);\n    },\n    removeCustomerAttribute: (key: string) => {\n      providerRef.current?.removeCustomerAttribute(key);\n    },\n    setIsLoggedIn: (isLoggedIn: boolean) => {\n      providerRef.current?.setIsLoggedIn(isLoggedIn);\n    },\n    setAppSuppliedVideoDetails: (details: NamiAppSuppliedVideoDetails) => {\n      providerRef.current?.setAppSuppliedVideoDetails(details);\n    },\n    resetAppSuppliedVideoDetails: () => {\n      providerRef.current?.resetAppSuppliedVideoDetails();\n    },\n    setMediaList: (media: TPaywallMedia[]) => {\n      providerRef.current?.setMediaList(media);\n    },\n    setSafeAreaTop: (top: number) => {\n      providerRef.current?.setSafeAreaTop(top);\n    },\n    setFullScreenPresentation: (full: boolean) => {\n      providerRef.current?.setFullScreenPresentation(full);\n    },\n    setFormFactor: (factor: TDevice) => {\n      providerRef.current?.setFormFactor(factor);\n    },\n    setUserInteractionEnabled: (enabled: boolean) => {\n      providerRef.current?.setUserInteractionEnabled(enabled);\n    },\n    setUserTags: (tags: Record<string, string>) => {\n      providerRef.current?.setUserTags(tags);\n    },\n    setLaunchDetails: (value: string, type?: string) => {\n      providerRef.current?.setLaunchDetails(value, type);\n    },\n    setOpenHeaderIds: (id: string, sku?: NamiSKU) => {\n      providerRef.current?.setOpenHeaderIds(id, sku);\n    },\n    setFlow: (nextFlow: NamiFlow) => {\n      providerRef.current?.setFlow(nextFlow);\n    },\n    notifyFirstFocusReady: (paywallId: string, page: string, formFactor?: string) => {\n      setFirstFocusReadyKey(`${paywallId}:${page}:${formFactor ?? ''}`);\n      onFirstFocusReady?.(paywallId, page, formFactor);\n    },\n    setCurrentSlideIndex: (index: number) => {\n      providerRef.current?.setCurrentSlideIndex(index);\n    },\n    getPaywallActionEventData: () => {\n      return providerRef.current?.getPaywallActionEventData() ?? {};\n    },\n    getSelectedPaywall: () => {\n      return providerRef.current?.getSelectedPaywall();\n    },\n    getSelectedCampaign: () => {\n      return providerRef.current?.getSelectedCampaign();\n    },\n  }), [onFirstFocusReady]);\n\n  const focusReadyValue = useMemo(\n    () => ({\n      firstFocusReadyKey,\n      notifyFirstFocusReady: methods.notifyFirstFocusReady,\n    }),\n    [firstFocusReadyKey, methods],\n  );\n\n  const value = useMemo<PaywallContextValue>(() => {\n    const provider = providerRef.current;\n    return {\n      state,\n      productDetails: provider?.getProductDetails() ?? provider?.productDetails ?? [],\n      flow: provider?.flow,\n      filteredSkuMenus: provider?.filteredSkuMenus ?? [],\n      ...methods,\n    };\n  }, [methods, state]);\n\n  return (\n    <PaywallCtx.Provider value={value}>\n      <FirstFocusReadyCtx.Provider value={focusReadyValue}>\n        {children}\n      </FirstFocusReadyCtx.Provider>\n    </PaywallCtx.Provider>\n  );\n};\n\nexport default PaywallCtx;\n\nfunction cloneStateWithDynamicProps(\n  state: TPaywallContext | undefined,\n  provider: PaywallState,\n): TPaywallContext {\n  const nextState = { ...(state ?? initialState) } as TPaywallContext;\n  defineDynamicStateProps(nextState, provider);\n  return nextState;\n}\n\nfunction defineDynamicStateProps(state: TPaywallContext, provider: PaywallState): void {\n  Object.defineProperty(state, 'tvQuality', {\n    get: () => getTVQuality(provider),\n    enumerable: false,\n    configurable: true,\n  });\n  Object.defineProperty(state, 'viewportWidth', {\n    get: getViewportWidth,\n    enumerable: false,\n    configurable: true,\n  });\n  Object.defineProperty(state, 'viewportHeight', {\n    get: getViewportHeight,\n    enumerable: false,\n    configurable: true,\n  });\n}\n\nfunction getTVQuality(provider: PaywallState): string {\n  if (provider.getFormFactor() !== 'television') {\n    return '';\n  }\n\n  const { width, height, scale } = Dimensions.get('window');\n  const maxDimension = Math.max(width, height) * (scale || 1);\n  const minDimension = Math.min(width, height) * (scale || 1);\n\n  if (!maxDimension || !minDimension) {\n    return '720p';\n  }\n  if (maxDimension >= 3840 || minDimension >= 2160) {\n    return '4K';\n  }\n  if (maxDimension >= 1920 || minDimension >= 1080) {\n    return '1080p';\n  }\n  return '720p';\n}\n\nfunction getViewportWidth(): number {\n  return Dimensions.get('window').width;\n}\n\nfunction getViewportHeight(): number {\n  return Dimensions.get('window').height;\n}\n","import { Platform } from 'react-native';\nimport { logger, type FontDetails, type IPaywall } from '@namiml/sdk-core';\n\ntype FontModule = {\n  loadAsync(map: Record<string, string | { uri: string }>): Promise<void>;\n};\n\ntype PreparedFont = FontDetails & {\n  alias: string;\n};\ntype HostedFontsMap = Record<string, FontDetails | undefined>;\n\ntype FontVariantKey = 'regular' | 'bold' | 'italic' | 'boldItalic';\nexport type ResolvedFontDescriptor = {\n  family?: string;\n  isHosted: boolean;\n  variant?: FontVariantKey;\n};\n\nlet fontModule: FontModule | null = null;\ntry {\n  fontModule = require('expo-font');\n} catch {\n  try {\n    fontModule = require('@amazon-devices/expo-font');\n  } catch {\n    fontModule = null;\n  }\n}\n\nconst knownFontFaces = new Set<string>();\nconst loadedFonts = new Set<string>();\nconst loadingFonts = new Map<string, Promise<void>>();\nlet warnedMissingFontModule = false;\nconst warnedFailedFontLoads = new Set<string>();\nconst fontFamilyVariants = new Map<string, Map<FontVariantKey, string>>();\nconst aliasToFamilyKey = new Map<string, string>();\nconst KEPLER_VARIANT_COLLISION_FAMILY_KEYS = new Set<string>(['All-ProDisplayC']);\n\nexport async function prepareAndLoadFonts(\n  fontsObject?: HostedFontsMap,\n): Promise<boolean> {\n  if (!fontsObject) return false;\n\n  if (!fontModule) {\n    if (!warnedMissingFontModule && Object.keys(fontsObject).length > 0) {\n      warnedMissingFontModule = true;\n      logger.warn(\n        '[NamiExpo][fonts] Paywall requested hosted fonts, but expo-font is unavailable in the current app runtime.',\n      );\n    }\n    return false;\n  }\n\n  const fonts = collectHostedFonts(fontsObject);\n\n  for (const font of fonts) {\n    registerFontMetadata(font);\n  }\n\n  const results = await Promise.all(fonts.map((font) => loadFont(font)));\n  return results.some(Boolean);\n}\n\nexport function prewarmPaywallFonts(paywalls: Array<IPaywall | null | undefined>): void {\n  const uniqueCollections = new Set<HostedFontsMap>();\n\n  for (const paywall of paywalls) {\n    if (!paywall?.fonts) {\n      continue;\n    }\n    uniqueCollections.add(paywall.fonts);\n  }\n\n  for (const fonts of uniqueCollections) {\n    void prepareAndLoadFonts(fonts);\n  }\n}\n\nexport async function prepareAndLoadFontsWithTimeout(\n  fontsObject?: HostedFontsMap,\n  timeoutMs = 1200,\n): Promise<'ready' | 'timeout' | 'failed' | 'none'> {\n  if (!fontsObject || Object.keys(fontsObject).length === 0) {\n    return 'none';\n  }\n\n  let timer: ReturnType<typeof setTimeout> | undefined;\n  const result: 'ready' | 'failed' | 'timeout' = await Promise.race([\n    ensureFontsReady(fontsObject).then((value) => (value === 'none' ? 'failed' : value)),\n    new Promise<'timeout'>((resolve) => {\n      timer = setTimeout(() => resolve('timeout'), timeoutMs);\n    }),\n  ]);\n\n  if (timer) {\n    clearTimeout(timer);\n  }\n\n  return result;\n}\n\nexport async function ensureFontsReady(\n  fontsObject?: HostedFontsMap,\n): Promise<'ready' | 'failed' | 'none'> {\n  if (!fontsObject || Object.keys(fontsObject).length === 0) {\n    return 'none';\n  }\n\n  await prepareAndLoadFonts(fontsObject);\n\n  const fonts = collectHostedFonts(fontsObject);\n\n  const allReady = fonts.every((font) => loadedFonts.has(font.alias || buildFontFaceFamily(font)));\n  return allReady ? 'ready' : 'failed';\n}\n\nfunction collectHostedFonts(fontsObject?: HostedFontsMap): PreparedFont[] {\n  if (!fontsObject) {\n    return [];\n  }\n\n  return Object.entries(fontsObject)\n    .flatMap(([fontName, value]) => {\n      if (!value?.file) {\n        return [];\n      }\n\n      return [{\n        ...value,\n        alias: sanitizeFontName(fontName),\n      } satisfies PreparedFont];\n    });\n}\n\nasync function loadFont(font: PreparedFont): Promise<boolean> {\n  if (!fontModule) return false;\n\n  if (shouldSkipHostedFontLoad(font)) {\n    return false;\n  }\n\n  const family = font.alias || buildFontFaceFamily(font);\n  knownFontFaces.add(family);\n  if (loadedFonts.has(family)) return false;\n\n  const existing = loadingFonts.get(family);\n  if (existing) {\n    await existing;\n    return false;\n  }\n\n  let loaded = false;\n  const promise = fontModule\n    .loadAsync({ [family]: { uri: font.file } })\n    .then(() => {\n      loadedFonts.add(family);\n      loaded = true;\n    })\n    .catch((error) => {\n      if (!warnedFailedFontLoads.has(family)) {\n        warnedFailedFontLoads.add(family);\n        logger.warn(\n          `[NamiExpo][fonts] Failed to load hosted font \"${family}\" from \"${font.file}\".`,\n          error,\n        );\n      }\n      // Keep the renderer resilient if a hosted font is unavailable.\n    })\n    .finally(() => {\n      loadingFonts.delete(family);\n    });\n\n  loadingFonts.set(family, promise);\n  await promise;\n  return loaded;\n}\n\nexport function buildFontFaceFamily(font: FontDetails): string {\n  return sanitizeFontName(`${font.family}-${font.style}`);\n}\n\nexport function sanitizeFontName(value: string): string {\n  return value.replace(/ /g, '');\n}\n\nexport function resolveFontFamily(\n  fontName?: string,\n  options?: { italic?: boolean; bold?: boolean },\n): string | undefined {\n  return resolveFontDescriptor(fontName, options).family;\n}\n\nexport function resolveFontDescriptor(\n  fontName?: string,\n  options?: { italic?: boolean; bold?: boolean },\n): ResolvedFontDescriptor {\n  if (!fontName) {\n    return {\n      family: undefined,\n      isHosted: false,\n    };\n  }\n\n  const sanitized = sanitizeFontName(fontName);\n  const familyKey = aliasToFamilyKey.get(sanitized) ?? sanitized;\n\n  const exact = getKnownFontFamily(sanitized);\n  if (exact) {\n    return {\n      family: exact,\n      isHosted: true,\n      variant: getRegisteredFontVariant(familyKey, exact),\n    };\n  }\n\n  if (options?.bold || options?.italic) {\n    const knownVariant = getKnownVariantFamily(familyKey, options);\n    if (knownVariant) {\n      return {\n        family: knownVariant,\n        isHosted: true,\n        variant: getRegisteredFontVariant(familyKey, knownVariant),\n      };\n    }\n  }\n\n  const knownBase = getKnownVariantFamily(familyKey);\n  if (knownBase) {\n    return {\n      family: knownBase,\n      isHosted: true,\n      variant: getRegisteredFontVariant(familyKey, knownBase),\n    };\n  }\n\n  return {\n    family: undefined,\n    isHosted: false,\n  };\n}\n\nfunction registerFontMetadata(font: PreparedFont): void {\n  const familyKey = sanitizeFontName(font.family);\n  aliasToFamilyKey.set(font.alias, familyKey);\n  const variant = normalizeFontVariant(font.style);\n  const variants = fontFamilyVariants.get(familyKey) ?? new Map<FontVariantKey, string>();\n  variants.set(variant, font.alias);\n  fontFamilyVariants.set(familyKey, variants);\n}\n\nfunction getKnownFontFamily(candidate: string): string | undefined {\n  if (loadedFonts.has(candidate)) {\n    return candidate;\n  }\n\n  return undefined;\n}\n\nfunction getKnownVariantFamily(\n  candidate: string,\n  options?: { italic?: boolean; bold?: boolean },\n): string | undefined {\n  const variants = fontFamilyVariants.get(candidate);\n  if (!variants) {\n    return undefined;\n  }\n\n  const desired = buildRequestedVariantKey(options);\n  const exact = variants.get(desired);\n  if (exact && getKnownFontFamily(exact)) {\n    return exact;\n  }\n\n  const regular = variants.get('regular');\n  if (regular && getKnownFontFamily(regular)) {\n    return regular;\n  }\n\n  if (!options?.bold && !options?.italic) {\n    const bold = variants.get('bold');\n    if (bold && getKnownFontFamily(bold)) {\n      return bold;\n    }\n\n    const italic = variants.get('italic');\n    if (italic && getKnownFontFamily(italic)) {\n      return italic;\n    }\n\n    const boldItalic = variants.get('boldItalic');\n    if (boldItalic && getKnownFontFamily(boldItalic)) {\n      return boldItalic;\n    }\n  }\n\n  return undefined;\n}\n\nfunction getRegisteredFontVariant(\n  familyKey: string,\n  alias: string,\n): FontVariantKey | undefined {\n  const variants = fontFamilyVariants.get(familyKey);\n  if (!variants) {\n    return undefined;\n  }\n\n  for (const [variant, family] of variants.entries()) {\n    if (family === alias) {\n      return variant;\n    }\n  }\n\n  return undefined;\n}\n\nfunction buildRequestedVariantKey(\n  options?: { italic?: boolean; bold?: boolean },\n): FontVariantKey {\n  if (options?.bold && options?.italic) return 'boldItalic';\n  if (options?.bold) return 'bold';\n  if (options?.italic) return 'italic';\n  return 'regular';\n}\n\nfunction normalizeFontVariant(style?: string): FontVariantKey {\n  const normalized = sanitizeFontName(style ?? '').toLowerCase();\n  const hasBold = normalized.includes('bold');\n  const hasItalic = normalized.includes('italic');\n\n  if (hasBold && hasItalic) return 'boldItalic';\n  if (hasBold) return 'bold';\n  if (hasItalic) return 'italic';\n  return 'regular';\n}\n\nfunction shouldSkipHostedFontLoad(font: PreparedFont): boolean {\n  const isTelevisionRuntime = Platform.isTV === true;\n  if (!isTelevisionRuntime) {\n    return false;\n  }\n\n  const familyKey = sanitizeFontName(font.family);\n  if (!KEPLER_VARIANT_COLLISION_FAMILY_KEYS.has(familyKey)) {\n    return false;\n  }\n\n  const variant = normalizeFontVariant(font.style);\n  return variant === 'italic' || variant === 'boldItalic';\n}\n\nexport function inferFontNameVariant(fontName?: string): { italic: boolean; bold: boolean } {\n  const normalized = sanitizeFontName(fontName ?? '').toLowerCase();\n  return {\n    italic: normalized.includes('italic'),\n    bold: normalized.includes('bold'),\n  };\n}\n","import { Platform } from 'react-native';\nimport type { ViewStyle, TextStyle, ImageStyle } from 'react-native';\nimport type { TBaseComponent, BorderSideType, TContainerPosition } from '@namiml/sdk-core';\nimport { inferFontNameVariant, resolveFontDescriptor } from './fonts';\n\nexport type NamiStyle = ViewStyle & TextStyle & Omit<ImageStyle, 'overflow'>;\n\nconst HEX_ALPHA_REGEX = /^#([0-9a-f]{8})$/i;\nconst HEX_SHORT_ALPHA_REGEX = /^#([0-9a-f]{4})$/i;\nconst HSLA_REGEX = /^hsla?\\(\\s*([\\d.]+)\\s*,\\s*([\\d.]+)%\\s*,\\s*([\\d.]+)%(?:\\s*,\\s*([\\d.]+))?\\s*\\)$/i;\n\nexport function parseColor(color: any): string | undefined {\n  if (!color) return undefined;\n  if (typeof color === 'string') {\n    const trimmed = color.trim();\n    if (!trimmed) return undefined;\n    if (trimmed.toLowerCase().includes('gradient(')) return undefined;\n    return normalizeColorString(trimmed);\n  }\n  if (color.rgba) {\n    const { r, g, b, a } = color.rgba;\n    return `rgba(${Math.round(r * 255)},${Math.round(g * 255)},${Math.round(b * 255)},${a ?? 1})`;\n  }\n  if (color.hex) return normalizeColorString(color.hex);\n  return undefined;\n}\n\nfunction normalizeColorString(input: string): string {\n  const value = input.trim();\n  if (!value) return value;\n\n  const match = value.match(/^rgba?\\((.+)\\)$/i);\n  if (match) {\n    const inside = match[1];\n    const [base, alphaRaw] = inside.split('/').map((v) => v.trim());\n    const parts = base.split(/[\\s,]+/).filter(Boolean);\n    const nums = parts.map((p) => p.trim());\n    const r = nums[0];\n    const g = nums[1];\n    const b = nums[2];\n    const a = alphaRaw ?? nums[3];\n\n    if (r != null && g != null && b != null) {\n      if (a != null) {\n        return `rgba(${r},${g},${b},${a})`;\n      }\n      return `rgb(${r},${g},${b})`;\n    }\n  }\n\n  const hexAlphaMatch = value.match(HEX_ALPHA_REGEX);\n  if (hexAlphaMatch) {\n    const hex = hexAlphaMatch[1];\n    const r = parseInt(hex.slice(0, 2), 16);\n    const g = parseInt(hex.slice(2, 4), 16);\n    const b = parseInt(hex.slice(4, 6), 16);\n    const a = parseInt(hex.slice(6, 8), 16) / 255;\n    return `rgba(${r},${g},${b},${Number(a.toFixed(3))})`;\n  }\n\n  const hexShortAlphaMatch = value.match(HEX_SHORT_ALPHA_REGEX);\n  if (hexShortAlphaMatch) {\n    const hex = hexShortAlphaMatch[1];\n    const r = parseInt(hex[0] + hex[0], 16);\n    const g = parseInt(hex[1] + hex[1], 16);\n    const b = parseInt(hex[2] + hex[2], 16);\n    const a = parseInt(hex[3] + hex[3], 16) / 255;\n    return `rgba(${r},${g},${b},${Number(a.toFixed(3))})`;\n  }\n\n  const hslaMatch = value.match(HSLA_REGEX);\n  if (hslaMatch) {\n    const h = parseFloat(hslaMatch[1]);\n    const s = parseFloat(hslaMatch[2]);\n    const l = parseFloat(hslaMatch[3]);\n    const a = hslaMatch[4] != null ? parseFloat(hslaMatch[4]) : undefined;\n    const [r, g, b] = hslToRgb(h, s, l);\n    if (a != null && !Number.isNaN(a)) {\n      return `rgba(${r},${g},${b},${Number(a.toFixed(3))})`;\n    }\n    return `rgb(${r},${g},${b})`;\n  }\n\n  return value;\n}\n\nfunction hslToRgb(h: number, s: number, l: number): [number, number, number] {\n  const hh = ((h % 360) + 360) % 360;\n  const ss = Math.max(0, Math.min(100, s)) / 100;\n  const ll = Math.max(0, Math.min(100, l)) / 100;\n  const c = (1 - Math.abs(2 * ll - 1)) * ss;\n  const x = c * (1 - Math.abs(((hh / 60) % 2) - 1));\n  const m = ll - c / 2;\n  let r1 = 0;\n  let g1 = 0;\n  let b1 = 0;\n  if (hh < 60) {\n    r1 = c; g1 = x; b1 = 0;\n  } else if (hh < 120) {\n    r1 = x; g1 = c; b1 = 0;\n  } else if (hh < 180) {\n    r1 = 0; g1 = c; b1 = x;\n  } else if (hh < 240) {\n    r1 = 0; g1 = x; b1 = c;\n  } else if (hh < 300) {\n    r1 = x; g1 = 0; b1 = c;\n  } else {\n    r1 = c; g1 = 0; b1 = x;\n  }\n  const r = Math.round((r1 + m) * 255);\n  const g = Math.round((g1 + m) * 255);\n  const b = Math.round((b1 + m) * 255);\n  return [r, g, b];\n}\n\nexport function isLinearGradient(value?: string): boolean {\n  if (!value || typeof value !== 'string') return false;\n  return value.trim().toLowerCase().startsWith('linear-gradient(');\n}\n\nexport type LinearGradientSpec = {\n  colors: string[];\n  locations?: number[];\n  angle?: number;\n};\n\nfunction splitGradientArgs(input: string): string[] {\n  const out: string[] = [];\n  let current = '';\n  let depth = 0;\n  for (let i = 0; i < input.length; i++) {\n    const ch = input[i];\n    if (ch === '(') depth += 1;\n    if (ch === ')') depth = Math.max(0, depth - 1);\n    if (ch === ',' && depth === 0) {\n      out.push(current.trim());\n      current = '';\n      continue;\n    }\n    current += ch;\n  }\n  if (current.trim()) out.push(current.trim());\n  return out;\n}\n\nfunction parseAngleToken(token: string): number | undefined {\n  const t = token.trim().toLowerCase();\n  if (t.endsWith('deg')) {\n    const num = parseFloat(t.replace('deg', '').trim());\n    return Number.isFinite(num) ? num : undefined;\n  }\n  if (t.startsWith('to ')) {\n    // CSS gradient directions\n    if (t.includes('right') && t.includes('top')) return 45;\n    if (t.includes('right') && t.includes('bottom')) return 135;\n    if (t.includes('left') && t.includes('bottom')) return 225;\n    if (t.includes('left') && t.includes('top')) return 315;\n    if (t.includes('right')) return 90;\n    if (t.includes('left')) return 270;\n    if (t.includes('bottom')) return 180;\n    if (t.includes('top')) return 0;\n  }\n  return undefined;\n}\n\nexport function parseSize(value: any, scaleFactor: number = 1): number | undefined {\n  if (value === undefined || value === null) return undefined;\n  if (typeof value === 'number') return value * scaleFactor;\n  if (typeof value === 'string') {\n    const num = parseFloat(value);\n    if (!isNaN(num)) return num * scaleFactor;\n  }\n  return undefined;\n}\n\nexport function parseSizeOrPercent(value: any, scaleFactor: number = 1): number | string | undefined {\n  if (value === undefined || value === null) return undefined;\n  if (typeof value === 'string' && value.endsWith('%')) return value;\n  return parseSize(value, scaleFactor);\n}\n\nexport function flexDirectionFromConfig(dir?: string): ViewStyle['flexDirection'] {\n  switch (dir) {\n    case 'horizontal': return 'row';\n    case 'vertical': return 'column';\n    case 'horizontal-reverse': return 'row-reverse';\n    case 'vertical-reverse': return 'column-reverse';\n    default: return 'column';\n  }\n}\n\n// NAM-2417: a directionless `button` component defaults to horizontal (icon left of\n// label), unlike containers which default to vertical via flexDirectionFromConfig.\nexport function buttonFlexDirection(dir?: string): ViewStyle['flexDirection'] {\n  return flexDirectionFromConfig(dir ?? 'horizontal');\n}\n\nconst ALIGNMENT_VALUE_MAP: Record<string, ViewStyle['alignItems']> = {\n  top: 'flex-start',\n  left: 'flex-start',\n  right: 'flex-end',\n  bottom: 'flex-end',\n  start: 'flex-start',\n  end: 'flex-end',\n  leading: 'flex-start',\n  trailing: 'flex-end',\n  center: 'center',\n  stretch: 'stretch',\n};\n\nconst JUSTIFY_VALUE_MAP: Record<string, ViewStyle['justifyContent']> = {\n  spaceBetween: 'space-between',\n  'space-between': 'space-between',\n  spaceAround: 'space-around',\n  'space-around': 'space-around',\n  spaceEvenly: 'space-evenly',\n  'space-evenly': 'space-evenly',\n  top: 'flex-start',\n  bottom: 'flex-end',\n  left: 'flex-start',\n  right: 'flex-end',\n  start: 'flex-start',\n  end: 'flex-end',\n  leading: 'flex-start',\n  trailing: 'flex-end',\n  center: 'center',\n};\n\nfunction mapAlignmentValue(align?: string): ViewStyle['alignItems'] | undefined {\n  if (!align) return undefined;\n  return ALIGNMENT_VALUE_MAP[align] ?? undefined;\n}\n\nfunction mapJustifyValue(align?: string): ViewStyle['justifyContent'] | undefined {\n  if (!align) return undefined;\n  return JUSTIFY_VALUE_MAP[align] ?? (ALIGNMENT_VALUE_MAP[align] as ViewStyle['justifyContent'] | undefined);\n}\n\nfunction mapPositionAlignment(align?: string): ViewStyle['alignSelf'] {\n  return mapAlignmentValue(align);\n}\n\nexport function paddingAndMarginStyles(component: TBaseComponent, scaleFactor: number): ViewStyle {\n  const s: ViewStyle = {};\n  if (component.leftPadding != null) s.paddingLeft = parseSize(component.leftPadding, scaleFactor);\n  if (component.rightPadding != null) s.paddingRight = parseSize(component.rightPadding, scaleFactor);\n  if (component.topPadding != null) s.paddingTop = parseSize(component.topPadding, scaleFactor);\n  if (component.bottomPadding != null) s.paddingBottom = parseSize(component.bottomPadding, scaleFactor);\n  if (component.leftMargin != null) s.marginLeft = parseSize(component.leftMargin, scaleFactor);\n  if (component.rightMargin != null) s.marginRight = parseSize(component.rightMargin, scaleFactor);\n  if (component.topMargin != null) s.marginTop = parseSize(component.topMargin, scaleFactor);\n  if (component.bottomMargin != null) s.marginBottom = parseSize(component.bottomMargin, scaleFactor);\n  return s;\n}\n\nexport function borderStyles(component: TBaseComponent, scaleFactor: number, inFocusedState: boolean = false): ViewStyle {\n  const s: ViewStyle = {};\n  const bw = parseSize(\n    inFocusedState ? (component.focusedBorderWidth ?? component.borderWidth) : component.borderWidth,\n    scaleFactor\n  );\n  const bc = parseColor(\n    inFocusedState ? (component.focusedBorderColor ?? component.borderColor) : component.borderColor\n  );\n  const br = parseSize(\n    inFocusedState ? (component.focusedBorderRadius ?? component.borderRadius) : component.borderRadius,\n    scaleFactor\n  );\n  const roundBorders = inFocusedState\n    ? (component.focusedRoundBorders ?? component.roundBorders)\n    : component.roundBorders;\n\n  if (roundBorders?.length) {\n    const mapping: Record<string, keyof ViewStyle> = {\n      upperLeft: 'borderTopLeftRadius',\n      upperRight: 'borderTopRightRadius',\n      lowerLeft: 'borderBottomLeftRadius',\n      lowerRight: 'borderBottomRightRadius',\n    };\n    for (const corner of roundBorders) {\n      const key = mapping[corner];\n      if (key && br != null) (s as any)[key] = br;\n    }\n  } else if (br != null) {\n    s.borderRadius = br;\n  }\n\n  const sides: BorderSideType[] = inFocusedState\n    ? (component.focusedBorders ?? component.borders ?? [])\n    : (component.borders ?? []);\n  if (sides.length > 0 && bw != null) {\n    const sideMap: Record<BorderSideType, [keyof ViewStyle, keyof ViewStyle]> = {\n      top: ['borderTopWidth', 'borderTopColor'],\n      bottom: ['borderBottomWidth', 'borderBottomColor'],\n      left: ['borderLeftWidth', 'borderLeftColor'],\n      right: ['borderRightWidth', 'borderRightColor'],\n    };\n    for (const side of sides) {\n      const [wKey, cKey] = sideMap[side];\n      (s as any)[wKey] = bw;\n      if (bc) (s as any)[cKey] = bc;\n    }\n  } else if (bw != null) {\n    s.borderWidth = bw;\n    if (bc) s.borderColor = bc;\n  } else if (bc) {\n    s.borderColor = bc;\n  }\n\n  return s;\n}\n\nfunction parseDropShadow(value?: string): { x: number; y: number; blur: number; color?: string } | null {\n  if (!value || typeof value !== 'string') return null;\n  const match = value.trim().match(/(-?\\d+(?:\\.\\d+)?)\\s+(-?\\d+(?:\\.\\d+)?)\\s+(\\d+(?:\\.\\d+)?)\\s+(.+)/);\n  if (!match) return null;\n  const x = parseFloat(match[1]);\n  const y = parseFloat(match[2]);\n  const blur = parseFloat(match[3]);\n  const color = parseColor(match[4].trim());\n  return { x, y, blur, color: color ?? undefined };\n}\n\nexport function shadowStyles(component: TBaseComponent): ViewStyle {\n  const parsed = parseDropShadow(component.dropShadow);\n  if (!parsed) return {};\n  const { x, y, blur, color } = parsed;\n  return {\n    ...Platform.select({\n      ios: {\n        shadowColor: color ?? 'rgba(0,0,0,0.5)',\n        shadowOffset: { width: x, height: y },\n        shadowOpacity: 1,\n        shadowRadius: blur,\n      },\n      android: {\n        elevation: blur ? Math.ceil(blur / 2) : 4,\n      },\n    }),\n  };\n}\n\nexport function sizeStyles(\n  component: TBaseComponent,\n  scaleFactor: number,\n  parentDirection?: string\n): ViewStyle {\n  const s: ViewStyle = {};\n  const rawW = component.width ?? (component as any).fixedWidth;\n  const rawH = component.height ?? (component as any).fixedHeight;\n  const w = parseSizeOrPercent(rawW, scaleFactor);\n  const h = parseSizeOrPercent(rawH, scaleFactor);\n\n  if (w != null) s.width = w as any;\n  if (h != null) s.height = h as any;\n  s.maxWidth = '100%';\n\n  if (rawW === 'fitContent') {\n    s.flexShrink = 0;\n    s.flexGrow = 0;\n  }\n\n  if (rawH === 'fitContent') {\n    s.flexGrow = 0;\n  }\n\n  if (parentDirection === 'horizontal' && rawW == null) {\n    s.flex = 1;\n    s.flexShrink = 1;\n    (s as any).minWidth = 0;\n  } else if (typeof rawW === 'string' && rawW.trim().endsWith('%')) {\n    s.flexShrink = 1;\n    (s as any).minWidth = 0;\n  }\n\n  if (typeof rawH === 'string' && rawH.trim().endsWith('%')) {\n    s.flexShrink = 1;\n  }\n\n  const componentId = String((component as any).id ?? '');\n  const componentType = String((component as any).namiComponentType ?? '');\n  const isDividerLike = componentType === 'divider' || /^divider/i.test(componentId);\n  if (isDividerLike && parentDirection === 'horizontal' && rawH === '100%') {\n    (s as any).height = undefined;\n    s.alignSelf = 'stretch';\n    s.flexGrow = 1;\n    s.flexShrink = 0;\n  }\n\n  if (!parentDirection && rawW == null && rawH == null) {\n    s.alignSelf = 'stretch';\n  }\n\n  return s;\n}\n\nexport function layoutStyles(component: TBaseComponent, scaleFactor: number): ViewStyle {\n  const s: ViewStyle = {};\n  s.flexDirection = flexDirectionFromConfig((component as any).direction);\n\n  const alignment = (component as any).alignment;\n  const horizontal = (component as any).horizontalAlignment;\n  const vertical = (component as any).verticalAlignment;\n\n  const verticalAlign = vertical ? mapAlignmentValue(vertical) : undefined;\n  const horizontalAlign = horizontal ? mapAlignmentValue(horizontal) : undefined;\n  const fallbackAlign = alignment ? (mapAlignmentValue(alignment) ?? 'center') : 'center';\n  const fallbackJustify = alignment ? (mapJustifyValue(alignment) ?? 'center') : 'center';\n\n  const isRow = s.flexDirection === 'row' || s.flexDirection === 'row-reverse';\n\n  if (verticalAlign && horizontalAlign) {\n    if (isRow) {\n      s.alignItems = verticalAlign;\n      s.justifyContent = mapJustifyValue(horizontal) ?? fallbackJustify;\n    } else {\n      s.alignItems = horizontalAlign;\n      s.justifyContent = mapJustifyValue(vertical) ?? 'center';\n    }\n  } else if (!isRow) {\n    s.alignItems = horizontalAlign ?? fallbackAlign;\n    s.justifyContent = mapJustifyValue(vertical) ?? 'center';\n  } else {\n    s.alignItems = verticalAlign ?? 'center';\n    s.justifyContent = mapJustifyValue(horizontal) ?? fallbackJustify;\n  }\n\n  if ((component as any).grow) s.flexGrow = 1;\n\n  return s;\n}\n\nexport function positionStyles(component: TBaseComponent): ViewStyle {\n  const pos = (component as any).position as TContainerPosition | undefined;\n  if (!pos) return { position: 'relative' };\n\n  const [alignment, spot] = pos.split('-');\n  const s: ViewStyle = { position: 'absolute' };\n  const alignSelf = mapPositionAlignment(alignment);\n  if (alignSelf) s.alignSelf = alignSelf;\n\n  if (spot === 'top' || spot === 'bottom' || spot === 'left' || spot === 'right') {\n    (s as any)[spot] = 0;\n  }\n\n  return s;\n}\n\nexport function backgroundColorStyle(component: TBaseComponent, inFocusedState: boolean = false): ViewStyle {\n  const fill = typeof component.fillColor === 'string' ? component.fillColor : undefined;\n  const focusedFill = typeof (component as any).focusedFillColor === 'string' ? (component as any).focusedFillColor : undefined;\n  const useFocused = inFocusedState && focusedFill;\n  const primary = useFocused ? focusedFill : fill;\n  const fallback = useFocused ? (component as any).focusedFillColorFallback : component.fillColorFallback;\n  const gradientSource = primary ?? fill;\n  if (isLinearGradient(gradientSource)) {\n    const fallbackColor = parseColor(fallback);\n    return fallbackColor ? { backgroundColor: fallbackColor } : { backgroundColor: 'transparent' };\n  }\n  const bg = parseColor(primary) ?? parseColor(fallback);\n  if (bg) return { backgroundColor: bg };\n  return {};\n}\n\nexport function transformStyles(component: TBaseComponent, scaleFactor: number): ViewStyle {\n  const transforms: Array<{ translateX: number } | { translateY: number }> = [];\n  const mx = parseSize((component as any).moveX, scaleFactor);\n  const my = parseSize((component as any).moveY, scaleFactor);\n  if (mx) transforms.push({ translateX: mx });\n  if (my) transforms.push({ translateY: my });\n  if (transforms.length) return { transform: transforms } as ViewStyle;\n  return {};\n}\n\nexport function applyStyles(component: TBaseComponent, scaleFactor: number = 1, inFocusedState: boolean = false, parentDirection?: string): NamiStyle {\n  return {\n    ...positionStyles(component),\n    ...paddingAndMarginStyles(component, scaleFactor),\n    ...borderStyles(component, scaleFactor, inFocusedState),\n    ...shadowStyles(component),\n    ...sizeStyles(component, scaleFactor, parentDirection),\n    ...layoutStyles(component, scaleFactor),\n    ...backgroundColorStyle(component, inFocusedState),\n    ...transformStyles(component, scaleFactor),\n    ...(component.zIndex != null ? { zIndex: component.zIndex } : {}),\n  } as NamiStyle;\n}\n\nexport function focusedStyleOverrides(component: TBaseComponent, scaleFactor: number = 1): ViewStyle {\n  return {\n    ...backgroundColorStyle(component, true),\n    ...borderStyles(component, scaleFactor, true),\n  };\n}\n\nexport function resolveFillImageUrl(fillImage: any): string | undefined {\n  if (!fillImage) return undefined;\n  if (typeof fillImage === 'string') return fillImage;\n  if (typeof fillImage === 'object' && typeof fillImage.url === 'string') return fillImage.url;\n  return undefined;\n}\n\nexport function childSpacingStyle(index: number, component: { spacing?: any; direction?: string }, scaleFactor: number): ViewStyle {\n  if (!component?.spacing || index === 0) return {};\n  const spacing = parseSize(component.spacing, scaleFactor);\n  if (spacing == null) return {};\n  const isVertical = component.direction === 'vertical';\n  return isVertical ? { marginTop: spacing } : { marginLeft: spacing };\n}\n\nexport function extractPrefixedStyles(component: Record<string, any>, prefix: string): Record<string, any> {\n  const out: Record<string, any> = {};\n  if (!component) return out;\n  const keys = Object.keys(component);\n  for (const key of keys) {\n    if (!key.startsWith(prefix)) continue;\n    const stripped = key.slice(prefix.length);\n    if (!stripped) continue;\n    const newKey = stripped.charAt(0).toLowerCase() + stripped.slice(1);\n    out[newKey] = component[key];\n  }\n  return out;\n}\n\nexport function textStyles(\n  component: any,\n  scaleFactor: number = 1,\n  inFocusedState: boolean = false,\n): TextStyle {\n  const s: TextStyle = {};\n  const inferredVariant = inferFontNameVariant(component.fontName ?? component.fontFamily);\n  const requestedItalic = component.fontStyle === 'italic' || inferredVariant.italic;\n  const requestedBold =\n    inferredVariant.bold\n    || (\n      typeof component.fontWeight === 'string'\n      && (\n        component.fontWeight === 'bold'\n        || Number.parseInt(component.fontWeight, 10) >= 600\n      )\n    );\n  if (component.fontSize)\n    s.fontSize = parseSize(component.fontSize, scaleFactor);\n  const resolvedFont = resolveFontDescriptor(component.fontName ?? component.fontFamily, {\n    italic: requestedItalic,\n    bold: requestedBold,\n  });\n  if (resolvedFont.family) {\n    s.fontFamily = resolvedFont.family;\n  }\n\n  const color = inFocusedState\n    ? parseColor(component.focusedFontColor ?? component.activeFontColor)\n      ?? parseColor(component.fontColor)\n      ?? parseColor(component.textColor)\n    : parseColor(component.fontColor) ?? parseColor(component.textColor);\n  if (color) s.color = color;\n\n  if (resolvedFont.isHosted) {\n    s.fontWeight = 'normal';\n    s.fontStyle = 'normal';\n    if (shouldApplySyntheticItalic(requestedItalic, resolvedFont.variant)) {\n      s.transform = [{ skewX: '-10deg' }];\n    }\n  } else {\n    if (component.fontWeight) s.fontWeight = component.fontWeight;\n    if (component.fontStyle) s.fontStyle = component.fontStyle;\n  }\n  if (component.capitalize) s.textTransform = 'uppercase';\n  if (component.alignment) {\n    switch (component.alignment) {\n      case 'leading': case 'left': s.textAlign = 'left'; break;\n      case 'trailing': case 'right': s.textAlign = 'right'; break;\n      case 'center': s.textAlign = 'center'; break;\n    }\n  }\n  if (component.strikethrough) s.textDecorationLine = 'line-through';\n  // NAM-1409: letterSpacing is an em fraction of font size (signed decimal in\n  // [-1, 1]), but RN's Text `letterSpacing` is in POINTS, so convert.\n  // Numeric strings (\"0.08\") coerce via Number(); non-numeric / an unresolved\n  // `${var}` smart-text token -> NaN -> omitted (-> 0).\n  const letterSpacingValue = typeof component.letterSpacing === 'string'\n    ? Number(component.letterSpacing)\n    : component.letterSpacing;\n  if (Number.isFinite(letterSpacingValue) && s.fontSize) {\n    s.letterSpacing = (letterSpacingValue as number) * s.fontSize;\n  }\n  // NAM-1409: lineHeight is an ABSOLUTE px value; only applied when it\n  // coerces to a finite number > 0 (scaled by scaleFactor), replacing rather\n  // than stacking with the computed default. Numeric strings coerce via\n  // Number(); non-numeric / an unresolved `${var}` smart-text token -> NaN.\n  const lineHeightValue = typeof component.lineHeight === 'string'\n    ? Number(component.lineHeight)\n    : component.lineHeight;\n  if (Number.isFinite(lineHeightValue) && (lineHeightValue as number) > 0) {\n    s.lineHeight = (lineHeightValue as number) * scaleFactor;\n  } else if (\n    s.fontSize\n    && (component.textType === 'legal' || component.component === 'text-list')\n  ) {\n    s.lineHeight = Number((s.fontSize * 1.2).toFixed(3));\n  }\n  // Android/TV adds extra font padding by default; disable for parity with web\n  (s as any).includeFontPadding = false;\n  const shadow = parseDropShadow(component.dropShadow);\n  if (shadow) {\n    s.textShadowColor = shadow.color ?? 'rgba(0,0,0,0.5)';\n    s.textShadowOffset = { width: shadow.x, height: shadow.y };\n    s.textShadowRadius = shadow.blur;\n  }\n\n  return s;\n}\n\nexport function pickAndApplyBackgroundColor(component: TBaseComponent, inFocusedState: boolean = false): ViewStyle {\n  return backgroundColorStyle(component, inFocusedState);\n}\n\nexport function applyGridStyles(component: TBaseComponent, scaleFactor: number = 1, inFocusedState: boolean = false, parentDirection?: string): NamiStyle {\n  return {\n    ...positionStyles(component),\n    ...paddingAndMarginStyles(component, scaleFactor),\n    ...borderStyles(component, scaleFactor, inFocusedState),\n    ...shadowStyles(component),\n    ...sizeStyles(component, scaleFactor, parentDirection),\n    ...backgroundColorStyle(component, inFocusedState),\n    ...transformStyles(component, scaleFactor),\n    ...(component.zIndex != null ? { zIndex: component.zIndex } : {}),\n  } as NamiStyle;\n}\n\nexport function applySegmentFontStyles(styles: any, scaleFactor: number = 1): TextStyle {\n  const s: TextStyle = {};\n  const inferredVariant = inferFontNameVariant(styles.fontName ?? styles.fontFamily);\n  const requestedItalic = styles.fontStyle === 'italic' || inferredVariant.italic;\n  const requestedBold =\n    inferredVariant.bold\n    || (\n      typeof styles.fontWeight === 'string'\n      && (\n        styles.fontWeight === 'bold'\n        || Number.parseInt(styles.fontWeight, 10) >= 600\n      )\n    );\n  if (styles.fontSize != null)\n    s.fontSize = parseSize(styles.fontSize, scaleFactor);\n  const resolvedFont = resolveFontDescriptor(styles.fontName ?? styles.fontFamily, {\n    italic: requestedItalic,\n    bold: requestedBold,\n  });\n  if (resolvedFont.family) {\n    s.fontFamily = resolvedFont.family;\n  }\n  const color = parseColor(styles.fontColor ?? styles.textColor);\n  if (color) s.color = color;\n  if (resolvedFont.isHosted) {\n    s.fontWeight = 'normal';\n    s.fontStyle = 'normal';\n    if (shouldApplySyntheticItalic(requestedItalic, resolvedFont.variant)) {\n      s.transform = [{ skewX: '-10deg' }];\n    }\n  } else {\n    if (styles.fontWeight) s.fontWeight = styles.fontWeight;\n    if (styles.fontStyle) s.fontStyle = styles.fontStyle;\n  }\n  if (styles.alignment) {\n    switch (styles.alignment) {\n      case 'leading': case 'left': s.textAlign = 'left'; break;\n      case 'trailing': case 'right': s.textAlign = 'right'; break;\n      case 'center': s.textAlign = 'center'; break;\n    }\n  }\n\n  return s;\n}\n\nexport function applySegmentStyles(styles: any, scaleFactor: number = 1, inFocusedState: boolean = false): ViewStyle {\n  return applyStyles(styles as any, scaleFactor, inFocusedState);\n}\n\nfunction shouldApplySyntheticItalic(\n  requestedItalic: boolean,\n  resolvedVariant?: string,\n): boolean {\n  if (!requestedItalic) {\n    return false;\n  }\n\n  return resolvedVariant !== 'italic' && resolvedVariant !== 'boldItalic';\n}\n","import type { NamiFlow, TPaywallContext } from '@namiml/sdk-core';\nimport { getUrlParams, SMART_TEXT_PATTERN, VAR_REGEX } from '@namiml/sdk-core';\n\ntype ReplacementsType = Record<string, any>;\n\nexport type SmartTextFlowState = {\n  isLaunched: boolean;\n  previousStepAvailable: boolean;\n  nextStepAvailable: boolean;\n};\n\nexport type SmartTextReplacements = {\n  state: TPaywallContext;\n  urlParams: Record<string, any>;\n  flow: SmartTextFlowState;\n  launch: TPaywallContext['launch'];\n  sku: any;\n  customer: TPaywallContext['customer'];\n  block?: any;\n};\n\nfunction getAttr(object: any, ...attrs: Array<string | number>): any {\n  let current = object;\n  for (const attr of attrs) {\n    if (current === undefined || current === null) return undefined;\n    current = Array.isArray(current) ? current[+attr] : current[attr];\n  }\n  return current;\n}\n\nfunction interpolateString(value: string, replacements: ReplacementsType): any {\n  let output = value;\n  if (typeof value !== 'string') {\n    return output;\n  }\n  if (!value.includes('$')) {\n    return value;\n  }\n\n  const regex = new RegExp(VAR_REGEX.source, VAR_REGEX.flags);\n  const matches: RegExpExecArray[] = [];\n  let matchResult: RegExpExecArray | null;\n  while ((matchResult = regex.exec(value)) !== null) {\n    matches.push(matchResult);\n    if (!regex.global) break;\n    if (matchResult.index === regex.lastIndex) regex.lastIndex++;\n  }\n\n  for (const [match, rawPath] of matches) {\n    const path = interpolateString(rawPath, replacements);\n    if (match === value) return replacer(match, path);\n    if (path !== rawPath) {\n      output = output.replace(rawPath, path);\n    }\n    output = output.replace(VAR_REGEX, replacer as any);\n  }\n  return output;\n\n  function replacer(matchValue: string, pathValue: string): string {\n    const pathParts = String(pathValue).split('.');\n    const firstKey = pathParts[0];\n    if (!firstKey) return matchValue;\n\n    const firstSegment = getAttr(replacements, firstKey);\n    if (firstSegment === undefined) return matchValue;\n\n    const isEmptyObject =\n      typeof firstSegment === 'object'\n      && firstSegment !== null\n      && Object.keys(firstSegment).length === 0;\n    if (isEmptyObject) return '';\n\n    const newValue = getAttr(replacements, ...pathParts);\n    if (newValue === undefined) return '';\n    if (typeof newValue !== 'string') return newValue as unknown as string;\n    return interpolateString(newValue, replacements);\n  }\n}\n\nexport function interpolate<T>(value: T, replacements: ReplacementsType): T {\n  if (Array.isArray(value)) {\n    const output: any[] = [];\n    for (const item of value) {\n      const newValue = interpolate(item, replacements);\n      if (Array.isArray(newValue)) {\n        output.push(...newValue);\n      } else {\n        output.push(newValue);\n      }\n    }\n    return output as unknown as T;\n  }\n\n  if (value === null || value === undefined) return value;\n\n  if (typeof value === 'object') {\n    const output: Record<string, any> = {};\n    for (const [key, current] of Object.entries(value as Record<string, any>)) {\n      output[key] = key === 'newRow' ? current : interpolate(current, replacements);\n    }\n    return output as T;\n  }\n\n  if (typeof value === 'string') return interpolateString(value, replacements);\n  return value;\n}\n\nexport function buildSmartTextReplacements(\n  state: TPaywallContext,\n  flow?: NamiFlow,\n  sku?: any,\n  block?: any,\n): SmartTextReplacements {\n  return {\n    state,\n    urlParams: getUrlParams(),\n    flow: {\n      isLaunched: !!flow?.manager?.flowOpen,\n      previousStepAvailable: !!flow?.previousStepAvailable,\n      nextStepAvailable: !!flow?.nextStepAvailable,\n    },\n    launch: state.launch,\n    sku: sku ?? state.sku,\n    customer: state.customer,\n    block,\n  };\n}\n\nexport function resolveSmartText(text: string | undefined, state: TPaywallContext): string {\n  if (!text) return '';\n  return String(interpolateSmartText(text, buildSmartTextReplacements(state)) ?? '');\n}\n\nexport function interpolateSmartText(value: any, replacements: SmartTextReplacements): any {\n  if (value == null) return value;\n  if (typeof value !== 'string') return value;\n  if (!value.includes(SMART_TEXT_PATTERN)) return value;\n  return interpolateString(value, replacements);\n}\n\nexport function interpolateComponent<T extends Record<string, any>>(\n  component: T,\n  state: TPaywallContext,\n  skuVars?: Record<string, any>,\n): T {\n  const replacements = buildSmartTextReplacements(state, undefined, skuVars);\n  return interpolate(component, replacements);\n}\n","import {\n  LIQUID_VARIABLE_REGEX,\n  SMART_TEXT_PATTERN,\n  resolveLoopSource,\n  type TComponent,\n} from '@namiml/sdk-core';\nimport { buildSmartTextReplacements, interpolate, interpolateSmartText } from './smartText';\n\nconst DEEP_SMART_TEXT_PRESERVE_KEYS = new Set([\n  'components',\n  'productBaseComponents',\n  'productFeaturedComponents',\n  'collapseHeader',\n]);\n\nfunction componentSmartTextSku(component: any): any {\n  return component?.smartTextSku ?? component?.sku;\n}\n\nexport function conditionComponentMatches(\n  ctx: any,\n  condition: any,\n  sku: any = componentSmartTextSku(condition),\n): boolean {\n  if (condition.assertions) {\n    return condition.assertions.every((test: any) => testObjectMatches(ctx, test, undefined, sku));\n  }\n  if (condition.orAssertions) {\n    return !condition.orAssertions.length || condition.orAssertions.some((test: any) => testObjectMatches(ctx, test, undefined, sku));\n  }\n  return false;\n}\n\nexport function withOverrides<T extends Record<string, any>>(\n  ctx: any,\n  { conditionAttributes, ...component }: T,\n  sku: any = componentSmartTextSku(component),\n): T {\n  if (!conditionAttributes) return component as T;\n  return conditionAttributes.reduce((nextComponent: T, condition: any): T => {\n    if (!conditionComponentMatches(ctx, condition, sku)) return nextComponent;\n    const resolvedAttributes = Object.fromEntries(\n      Object.entries(condition.attributes ?? {}).map(([key, value]) => [\n        key,\n        valueFromSmartText(ctx, value, sku),\n      ]),\n    );\n    return { ...nextComponent, ...resolvedAttributes };\n  }, component as T);\n}\n\nexport function valueFromSmartText(ctx: any, value: any, sku?: any, block: any = null): any {\n  const replacements = buildSmartTextReplacements(\n    ctx.state,\n    ctx.flow,\n    sku ?? ctx.state?.sku,\n    block,\n  );\n  if (typeof value === 'string' && value.includes(SMART_TEXT_PATTERN)) {\n    return interpolateSmartText(value, replacements);\n  }\n  return value;\n}\n\nexport function resolveComponentSmartText(component: any, ctx: any): any {\n  const smartTextSku = componentSmartTextSku(component);\n  const replacements = buildSmartTextReplacements(ctx.state, ctx.flow, smartTextSku);\n  const preservedEntries: Array<[string, any]> = [];\n  const shallowComponent = Object.entries(component ?? {}).reduce((output, [key, value]) => {\n    if (DEEP_SMART_TEXT_PRESERVE_KEYS.has(key)) {\n      // Child component trees need to keep their original template strings so they can\n      // be resolved later with their own component/SKU context.\n      preservedEntries.push([key, value]);\n      return output;\n    }\n    output[key] = valueFromSmartText(ctx, value, smartTextSku);\n    return output;\n  }, {} as Record<string, any>);\n\n  const resolvedComponent = interpolate(shallowComponent, replacements);\n  preservedEntries.forEach(([key, value]) => {\n    resolvedComponent[key] = value;\n  });\n  return resolvedComponent;\n}\n\nexport function expandRenderableComponents(\n  ctx: any,\n  components: TComponent[] | undefined,\n): TComponent[] {\n  return (components ?? []).flatMap((component) =>\n    expandRenderableComponent(ctx, component as TComponent),\n  );\n}\n\nfunction expandRenderableComponent(ctx: any, component: TComponent | undefined): TComponent[] {\n  if (!component || (component as any).hidden) {\n    return [];\n  }\n\n  const smartTextSku = componentSmartTextSku(component);\n\n  if ((component as any).component === 'condition') {\n    if (!conditionComponentMatches(ctx, component, smartTextSku)) {\n      return [];\n    }\n\n    return expandRenderableComponents(ctx, (component as any).components);\n  }\n\n  let resolvedComponent: any = component;\n  if ((component as any).conditionAttributes?.length) {\n    resolvedComponent = withOverrides(ctx, resolvedComponent, smartTextSku);\n  }\n  resolvedComponent = resolveComponentSmartText(resolvedComponent, ctx);\n\n  return resolvedComponent?.hidden ? [] : [resolvedComponent as TComponent];\n}\n\nexport function getRepeatingListBlocks(ctx: any, component: any): TComponent[][] {\n  if (!component.loopSource) {\n    return [];\n  }\n\n  const source = resolveLoopSource(component.loopSource);\n\n  const filteredBlocks: any[] = (source ?? []).filter((block: any) =>\n    !component.loopSourceConditions?.length ||\n    component.loopSourceConditions.every((value: any) =>\n      testObjectMatches(ctx, value, block),\n    ),\n  );\n\n  const renderItem = (block: any): TComponent[] =>\n    interpolate(component.components, interpolate({ block }, { block }));\n\n  const groupBy: string | undefined = component.groupBy;\n  const headerTemplate: TComponent | undefined = component.groupHeaderTemplate;\n\n  // Slots injected after the data pipeline (filter → group → cap). A slot is visible when its\n  // (non-block) conditions all pass; it renders as a plain item block (no __namiGroupHeader\n  // marker → no timeline dot). Unknown positions/ordinals are skipped (tolerant).\n  const visibleSlots: any[] = (component.slots ?? []).filter(\n    (slot: any) =>\n      !slot.conditions?.length ||\n      slot.conditions.every((condition: any) => testObjectMatches(ctx, condition, undefined)),\n  );\n  const slotBlock = (slot: any): TComponent[] => [slot.template as TComponent];\n  const listStart = visibleSlots.filter((s) => s.position === 'listStart').map(slotBlock);\n  const listEnd = visibleSlots.filter((s) => s.position === 'listEnd').map(slotBlock);\n\n  if (!groupBy || !headerTemplate) {\n    const cappedBlocks =\n      component.max != null ? filteredBlocks.slice(0, component.max) : filteredBlocks;\n    return [...listStart, ...cappedBlocks.map(renderItem), ...listEnd];\n  }\n\n  const sectionOrder: string[] = [];\n  const sections = new Map<string, any[]>();\n  for (const block of filteredBlocks) {\n    const resolved = interpolate(groupBy, interpolate({ block }, { block }));\n    const key = resolved == null ? '' : String(resolved);\n    if (!sections.has(key)) {\n      sectionOrder.push(key);\n      sections.set(key, []);\n    }\n    sections.get(key)!.push(block);\n  }\n\n  // Resolve groupStart/groupEnd target keys using the pre-cap filtered blocks: a group qualifies\n  // if any item passes all itemConditions (block context); ordinal picks first/last qualifier.\n  const groupQualifies = (slot: any, blocks: any[]): boolean => {\n    const conditions = slot.group?.itemConditions ?? [];\n    if (!conditions.length) return blocks.length > 0;\n    return blocks.some((block) => conditions.every((c: any) => testObjectMatches(ctx, c, block)));\n  };\n  const targetGroupKey = (slot: any): string | undefined => {\n    const qualifying = sectionOrder.filter((key) => groupQualifies(slot, sections.get(key)!));\n    return slot.group?.ordinal === 'last' ? qualifying[qualifying.length - 1] : qualifying[0];\n  };\n  const groupStartByKey = new Map<string, TComponent[][]>();\n  const groupEndByKey = new Map<string, TComponent[][]>();\n  for (const slot of visibleSlots) {\n    const byKey =\n      slot.position === 'groupStart'\n        ? groupStartByKey\n        : slot.position === 'groupEnd'\n          ? groupEndByKey\n          : null;\n    if (!byKey) continue;\n    const key = targetGroupKey(slot);\n    if (key == null) continue;\n    if (!byKey.has(key)) byKey.set(key, []);\n    byKey.get(key)!.push(slotBlock(slot));\n  }\n\n  const result: TComponent[][] = [...listStart];\n  for (const key of sectionOrder) {\n    const group = { key };\n    const header = interpolate(headerTemplate, interpolate({ group }, { group })) as any;\n    header.__namiGroupHeader = true;\n    result.push([header]);\n    result.push(...(groupStartByKey.get(key) ?? []));\n    const groupItems =\n      component.groupMax != null\n        ? sections.get(key)!.slice(0, component.groupMax)\n        : sections.get(key)!;\n    for (const block of groupItems) {\n      result.push(renderItem(block));\n    }\n    result.push(...(groupEndByKey.get(key) ?? []));\n  }\n  result.push(...listEnd);\n  return result;\n}\n\n/**\n * Accessibility props for a collapse container's trigger (NAM-2528): a button\n * whose expanded/collapsed state is announced by VoiceOver/TalkBack.\n */\nexport function collapseHeaderA11yProps(isOpen: boolean) {\n  return {\n    accessibilityRole: 'button' as const,\n    accessibilityState: { expanded: isOpen },\n  };\n}\n\n/**\n * Accessibility props for a collapse container's body, which stays mounted at\n * maxHeight 0 while collapsed and must be hidden from assistive tech then.\n */\nexport function collapseBodyA11yProps(isOpen: boolean) {\n  return {\n    accessibilityElementsHidden: !isOpen,\n    importantForAccessibility: (isOpen ? 'auto' : 'no-hide-descendants') as 'auto' | 'no-hide-descendants',\n  };\n}\n\nfunction testObjectMatches(\n  ctx: any,\n  { value: rawValue, expected, operator }: { value: any; expected: any; operator: string },\n  block?: any,\n  sku?: any,\n): boolean {\n  let value = valueFromSmartText(ctx, rawValue, sku, block);\n  expected = valueFromSmartText(ctx, expected, sku, block);\n\n  if (operator === 'equals') return value === expected;\n  if (operator === 'notEquals') return value !== expected;\n  if (operator === 'contains') {\n    if (typeof rawValue === 'string' && rawValue.includes('launch.productGroups')) {\n      const launchGroups = ctx?.state?.launch?.productGroups;\n      const fallbackGroups = Array.isArray(ctx?.state?.groups)\n        ? ctx.state.groups.map((group: any) => group?.ref).filter(Boolean)\n        : [];\n      const unresolvedValue =\n        value == null\n        || value === ''\n        || value === rawValue\n        || (Array.isArray(value) && value.length === 0);\n      if (unresolvedValue) {\n        value = Array.isArray(launchGroups) && launchGroups.length ? launchGroups : fallbackGroups;\n      }\n    }\n    if (!Array.isArray(value) && typeof value !== 'string' && !(value instanceof String)) {\n      value = value?.toString?.();\n    }\n    if (expected === 'collapse') {\n      expected += `_${ctx.getCurrentCollapsibleSku?.()?.skuId ?? ''}`;\n    }\n    return value?.includes?.(expected);\n  }\n  if (operator === 'notContains') {\n    if (!Array.isArray(value) && typeof value !== 'string' && !(value instanceof String)) {\n      value = value?.toString?.();\n    }\n    return !value?.includes?.(expected);\n  }\n  if (operator === 'set') {\n    const present = value != null && value !== '' && !value.toString().match(LIQUID_VARIABLE_REGEX);\n    if (typeof expected === 'boolean') {\n      return present === expected;\n    }\n    return present;\n  }\n  if (operator === 'notSet') {\n    return value == null || value === '' || !!value.toString().match(LIQUID_VARIABLE_REGEX);\n  }\n  if (operator === 'gt') return value > expected;\n  if (operator === 'gte') return value >= expected;\n  if (operator === 'lt') return value < expected;\n  if (operator === 'lte') return value <= expected;\n  return false;\n}\n\n/**\n * WCAG 1.3.1 (NAM-1451): title-type text is a structural heading.\n * Boolean heading only — RN cannot express heading levels.\n */\nexport function textAccessibilityRole(\n  component: { textType?: string },\n): 'header' | undefined {\n  return component.textType === 'title' ? 'header' : undefined;\n}\n","import React from 'react';\nimport type { TComponent } from '@namiml/sdk-core';\nimport { usePaywallContext } from '../context/PaywallContext';\nimport {\n  conditionComponentMatches,\n  resolveComponentSmartText,\n  withOverrides,\n} from '../utils/rendering';\n\ninterface Props {\n  component: TComponent;\n  scaleFactor?: number;\n  onClose?: () => void;\n  parentDirection?: string;\n  parentCrossAxisFitContent?: boolean;\n}\n\ntype RendererProps = {\n  component: TComponent;\n  scaleFactor: number;\n  onClose?: () => void;\n  parentDirection?: string;\n  parentCrossAxisFitContent?: boolean;\n};\n\ntype ComponentRenderer = React.ComponentType<any>;\n\nconst componentRendererCache = new Map<string, ComponentRenderer | null>();\n\nfunction resolveRenderer(rendererKey: string): ComponentRenderer | null {\n  if (componentRendererCache.has(rendererKey)) {\n    return componentRendererCache.get(rendererKey) ?? null;\n  }\n\n  let renderer: ComponentRenderer | null = null;\n\n  switch (rendererKey) {\n    case 'NamiButton':\n      renderer = require('./elements/NamiButton').NamiButton;\n      break;\n    case 'NamiText':\n      renderer = require('./elements/NamiText').NamiText;\n      break;\n    case 'NamiSymbol':\n      renderer = require('./elements/NamiSymbol').NamiSymbol;\n      break;\n    case 'NamiImage':\n      renderer = require('./elements/NamiImage').NamiImage;\n      break;\n    case 'NamiSpacer':\n      renderer = require('./elements/NamiSpacer').NamiSpacer;\n      break;\n    case 'NamiVideo':\n      renderer = require('./elements/NamiVideo').NamiVideo;\n      break;\n    case 'NamiContainer':\n      renderer = require('./containers/NamiContainer').NamiContainer;\n      break;\n    case 'NamiProductContainer':\n      renderer = require('./containers/NamiProductContainer').NamiProductContainer;\n      break;\n    case 'NamiStack':\n      renderer = require('./containers/NamiStack').NamiStack;\n      break;\n    case 'NamiCarousel':\n      renderer = require('./containers/NamiCarousel').NamiCarousel;\n      break;\n    case 'NamiCollapseContainer':\n      renderer = require('./containers/NamiCollapseContainer').NamiCollapseContainer;\n      break;\n    case 'NamiResponsiveGrid':\n      renderer = require('./containers/NamiResponsiveGrid').NamiResponsiveGrid;\n      break;\n    case 'NamiRepeatingGrid':\n      renderer = require('./containers/NamiRepeatingGrid').NamiRepeatingGrid;\n      break;\n    case 'NamiSegmentPicker':\n      renderer = require('./elements/NamiSegmentPicker').NamiSegmentPicker;\n      break;\n    case 'NamiSegmentPickerItem':\n      renderer = require('./elements/NamiSegmentPickerItem').NamiSegmentPickerItem;\n      break;\n    case 'NamiToggleSwitch':\n      renderer = require('./elements/NamiToggleSwitch').NamiToggleSwitch;\n      break;\n    case 'NamiTextInput':\n      renderer = require('./elements/NamiTextInput').NamiTextInput;\n      break;\n    case 'NamiRadioButton':\n      renderer = require('./elements/NamiRadioButton').NamiRadioButton;\n      break;\n    case 'NamiProgressIndicator':\n      renderer = require('./elements/NamiProgressIndicator').NamiProgressIndicator;\n      break;\n    case 'NamiProgressBar':\n      renderer = require('./elements/NamiProgressBar').NamiProgressBar;\n      break;\n    case 'NamiCountdownTimer':\n      renderer = require('./elements/NamiCountdownTimer').NamiCountdownTimer;\n      break;\n    case 'NamiToggleButton':\n      renderer = require('./elements/NamiToggleButton').NamiToggleButton;\n      break;\n    case 'NamiPlayPauseButton':\n      renderer = require('./elements/NamiPlayPauseButton').NamiPlayPauseButton;\n      break;\n    case 'NamiVolumeButton':\n      renderer = require('./elements/NamiVolumeButton').NamiVolumeButton;\n      break;\n    case 'NamiQRCode':\n      renderer = require('./elements/NamiQRCode').NamiQRCode;\n      break;\n    default:\n      renderer = null;\n  }\n\n  componentRendererCache.set(rendererKey, renderer);\n  return renderer;\n}\n\nfunction renderWithKey(\n  rendererKey: string,\n  props: RendererProps,\n): React.ReactElement | null {\n  const Renderer = resolveRenderer(rendererKey);\n  return Renderer ? <Renderer {...props} /> : null;\n}\n\nexport const TemplateRenderer: React.FC<Props> = ({ component, scaleFactor = 1, onClose, parentDirection, parentCrossAxisFitContent}) => {\n  const ctx = usePaywallContext();\n  const smartTextSku = (component as any)?.smartTextSku ?? (component as any)?.sku;\n\n  // Skip hidden components\n  if (component.hidden) return null;\n\n  // Handle condition components - evaluate condition, render children if matched\n  if (component.component === 'condition') {\n    const cond = component as any;\n    if (!conditionComponentMatches(ctx, cond, smartTextSku)) return null;\n    // Render children of condition\n    return (\n      <>\n        {cond.components?.map((child: TComponent, i: number) => (\n          <TemplateRenderer key={child.id ?? i} component={child} scaleFactor={scaleFactor} onClose={onClose} parentDirection={parentDirection} parentCrossAxisFitContent={parentCrossAxisFitContent} />\n        ))}\n      </>\n    );\n  }\n\n  // Apply conditionAttributes overrides if any match\n  let resolvedComponent = component;\n  if (component.conditionAttributes?.length) {\n    resolvedComponent = withOverrides(ctx, resolvedComponent as any, smartTextSku) as any;\n  }\n\n  // Resolve smart-text values on component fields (shallow)\n  if (!(resolvedComponent as any).__namiSmartTextResolved) {\n    resolvedComponent = resolveComponentSmartText(resolvedComponent, ctx);\n  }\n\n  const componentType: string = resolvedComponent.component;\n  return renderResolvedComponent(\n    componentType,\n    resolvedComponent,\n    scaleFactor,\n    onClose,\n    parentDirection,\n    parentCrossAxisFitContent,\n  );\n};\n\nfunction renderResolvedComponent(\n  componentType: string,\n  resolvedComponent: TComponent,\n  scaleFactor: number,\n  onClose?: () => void,\n  parentDirection?: string,\n  parentCrossAxisFitContent?: boolean,\n): React.ReactElement | null {\n  const sharedProps: RendererProps = {\n    component: resolvedComponent,\n    scaleFactor,\n    onClose,\n    parentDirection,\n    parentCrossAxisFitContent,\n  };\n\n  switch (componentType) {\n    case 'button':\n      return renderWithKey('NamiButton', sharedProps);\n    case 'text':\n    case 'title':\n    case 'body':\n    case 'legal':\n    case 'text-list':\n      return renderWithKey('NamiText', sharedProps);\n    case 'symbol':\n      return renderWithKey('NamiSymbol', sharedProps);\n    case 'image':\n      return renderWithKey('NamiImage', sharedProps);\n    case 'spacer':\n      return renderWithKey('NamiSpacer', sharedProps);\n    case 'videoUrl':\n      return renderWithKey('NamiVideo', sharedProps);\n    case 'container':\n    case 'formContainer':\n      return renderWithKey('NamiContainer', sharedProps);\n    case 'productContainer':\n      return renderWithKey('NamiProductContainer', sharedProps);\n    case 'stack':\n      return renderWithKey('NamiStack', sharedProps);\n    case 'carouselContainer':\n      return renderWithKey('NamiCarousel', sharedProps);\n    case 'collapseContainer':\n      return renderWithKey('NamiCollapseContainer', sharedProps);\n    case 'responsiveGrid':\n      return renderWithKey('NamiResponsiveGrid', sharedProps);\n    case 'repeatingGrid':\n      return renderWithKey('NamiRepeatingGrid', sharedProps);\n    case 'segmentPicker':\n    case 'formSegmentPicker':\n      return renderWithKey('NamiSegmentPicker', sharedProps);\n    case 'segmentPickerItem':\n      return renderWithKey('NamiSegmentPickerItem', sharedProps);\n    case 'toggleSwitch':\n      return renderWithKey('NamiToggleSwitch', sharedProps);\n    case 'textInput':\n      return renderWithKey('NamiTextInput', sharedProps);\n    case 'radio':\n      return renderWithKey('NamiRadioButton', sharedProps);\n    case 'progressIndicator':\n      return renderWithKey('NamiProgressIndicator', sharedProps);\n    case 'progressBar':\n      return renderWithKey('NamiProgressBar', sharedProps);\n    case 'countdownTimerText':\n      return renderWithKey('NamiCountdownTimer', sharedProps);\n    case 'toggleButton':\n      return renderWithKey('NamiToggleButton', sharedProps);\n    case 'playPauseButton':\n      return renderWithKey('NamiPlayPauseButton', sharedProps);\n    case 'volumeButton':\n      return renderWithKey('NamiVolumeButton', sharedProps);\n    case 'qrCode':\n      return renderWithKey('NamiQRCode', sharedProps);\n    default:\n      return null;\n  }\n}\n","import React, { useMemo } from 'react';\nimport { ScrollView, StyleSheet, View, type ViewStyle } from 'react-native';\nimport type { TContainer, TComponent } from '@namiml/sdk-core';\nimport { applyStyles, childSpacingStyle, flexDirectionFromConfig } from '../../utils/styles';\nimport { usePaywallContext } from '../../context/PaywallContext';\nimport { TemplateRenderer } from '../TemplateRenderer';\n\ninterface Props {\n  component: TContainer;\n  scaleFactor: number;\n  onClose?: () => void;\n}\n\nfunction splitContainerStyles(style: ViewStyle): { outer: ViewStyle; inner: ViewStyle } {\n  const {\n    paddingLeft, paddingRight, paddingTop, paddingBottom,\n    flexDirection, alignItems, justifyContent,\n    ...rest\n  } = style;\n\n  const outer: ViewStyle = { ...rest };\n  // The content container is always the page's vertical fill region: styles.outer\n  // declares flex:1 and the body scrolls internally. A payload height of\n  // 'fitContent' makes sizeStyles emit flexGrow:0, which would otherwise override\n  // that fill and collapse the body to 0 height — the flex:1 ScrollView child\n  // can't give an unbounded parent a height. Drop the flex-sizing keys so the\n  // fill stays authoritative, matching the native renderers which always\n  // fill-and-scroll this region regardless of the authored height.\n  delete outer.flex;\n  delete outer.flexGrow;\n  delete outer.flexBasis;\n  delete outer.flexShrink;\n  const inner: ViewStyle = {\n    ...(paddingLeft != null ? { paddingLeft } : {}),\n    ...(paddingRight != null ? { paddingRight } : {}),\n    ...(paddingTop != null ? { paddingTop } : {}),\n    ...(paddingBottom != null ? { paddingBottom } : {}),\n    ...(flexDirection ? { flexDirection } : {}),\n    ...(alignItems ? { alignItems } : {}),\n    ...(justifyContent ? { justifyContent } : {}),\n  };\n\n  return { outer, inner };\n}\n\nexport const NamiContentContainer: React.FC<Props> = ({\n  component,\n  scaleFactor,\n  onClose,\n}) => {\n  const ctx = usePaywallContext();\n  if (!component || component.hidden) return null;\n\n  const baseStyle = useMemo(\n    () => applyStyles(component as any, scaleFactor) as ViewStyle,\n    [component, scaleFactor]\n  );\n  const { outer, inner } = splitContainerStyles(baseStyle);\n\n  const formFactor = ctx.state.formFactor;\n  const scrollEnabled = formFactor !== 'television';\n  const direction = component.direction ?? 'vertical';\n  const flexDir = flexDirectionFromConfig(direction);\n  const contentAlignment = useMemo(() => {\n    const vertical = component.verticalAlignment;\n    const horizontal = component.horizontalAlignment;\n    const isRow = flexDir === 'row' || flexDir === 'row-reverse';\n\n    return {\n      alignItems: isRow\n        ? (vertical === 'top' ? 'flex-start' : vertical === 'bottom' ? 'flex-end' : vertical === 'center' ? 'center' : 'center')\n        : (horizontal === 'left' ? 'flex-start' : horizontal === 'right' ? 'flex-end' : horizontal === 'center' ? 'center' : 'center'),\n      justifyContent: isRow\n        ? (horizontal === 'left' ? 'flex-start' : horizontal === 'right' ? 'flex-end' : horizontal === 'center' ? 'center' : 'flex-start')\n        : (vertical === 'top' ? 'flex-start' : vertical === 'bottom' ? 'flex-end' : vertical === 'center' ? 'center' : 'flex-start'),\n    } as const;\n  }, [component.verticalAlignment, component.horizontalAlignment, flexDir]);\n  const renderedChildren = useMemo(() => {\n    return component.components?.map((comp: TComponent, i: number) => (\n      <View\n        key={comp.id ?? i}\n        style={[\n          styles.fullWidth,\n          i === 0\n            ? null\n            : childSpacingStyle(i, { spacing: component.spacing, direction }, scaleFactor),\n        ]}\n      >\n        <TemplateRenderer\n          component={comp}\n          scaleFactor={scaleFactor}\n          onClose={onClose}\n          parentDirection={direction}\n        />\n      </View>\n    ));\n  }, [component.components, component.spacing, direction, scaleFactor, onClose]);\n\n  const innerContentStyle = useMemo(\n    () => [\n      styles.inner,\n      {\n        flexDirection: flexDir,\n      },\n      inner,\n      contentAlignment,\n    ],\n    [flexDir, inner, contentAlignment],\n  );\n\n  if (!scrollEnabled) {\n    return (\n      <View style={[styles.outer, outer]}>\n        <View style={[styles.scroll, innerContentStyle]}>\n          {renderedChildren}\n        </View>\n      </View>\n    );\n  }\n\n  return (\n    <View style={[styles.outer, outer]}>\n      <ScrollView\n        style={styles.scroll}\n        contentContainerStyle={innerContentStyle}\n        showsVerticalScrollIndicator={false}\n        scrollEnabled\n      >\n        {renderedChildren}\n      </ScrollView>\n    </View>\n  );\n};\n\nconst styles = StyleSheet.create({\n  outer: {\n    flex: 1,\n    minHeight: 0,\n    zIndex: 2,\n  },\n  scroll: {\n    flex: 1,\n  },\n  inner: {\n    width: '100%',\n    flexGrow: 1,\n  },\n  fullWidth: {\n    width: '100%',\n  },\n});\n","import React, { useMemo } from 'react';\nimport { View, ImageBackground, StyleSheet, type ViewStyle } from 'react-native';\nimport type { TContainer, TComponent } from '@namiml/sdk-core';\nimport { applyStyles, parseColor, resolveFillImageUrl } from '../../utils/styles';\nimport { TemplateRenderer } from '../TemplateRenderer';\n\ninterface Props {\n  component: TContainer;\n  scaleFactor: number;\n  onClose?: () => void;\n}\n\nexport const NamiBackgroundContainer: React.FC<Props> = ({ component, scaleFactor, onClose }) => {\n  if (!component || component.hidden) return null;\n\n  const containerStyle = useMemo(\n    () => applyStyles(component as any, scaleFactor) as ViewStyle,\n    [component, scaleFactor]\n  );\n\n  const fillImageUrl = resolveFillImageUrl(component.fillImage);\n  const bgColor = parseColor(component.fillColor) ?? parseColor(component.fillColorFallback);\n  // Only clip when the container is a filled \"tile\" with specific (non-all-corners)\n  // rounding (NAM-1798); all-corners / unrounded filled containers stay unclipped so\n  // NC-3948 / NAM-1201 over-rounding is not reintroduced. Matches the Apple/Web gate.\n  const roundBorders = component.roundBorders;\n  const hasSpecificCorners =\n    Array.isArray(roundBorders) && roundBorders.length > 0 && roundBorders.length < 4;\n  const clipStyle: ViewStyle =\n    (component.fillColor || component.fillImage) && hasSpecificCorners ? { overflow: 'hidden' } : {};\n\n  const direction = component.direction ?? 'vertical';\n  const content = (\n    <>\n      {component.components?.map((comp: TComponent, i: number) => {\n        const marginKey = direction === 'vertical' ? 'topMargin' : 'leftMargin';\n        const spacedComponent =\n          i === 0 || !component.spacing\n            ? comp\n            : ({\n                ...comp,\n                [marginKey]: mergeRawMarginValue((comp as any)[marginKey], component.spacing),\n              } as TComponent);\n\n        return (\n          <TemplateRenderer\n            key={comp.id ?? i}\n            component={spacedComponent}\n            scaleFactor={scaleFactor}\n            onClose={onClose}\n            parentDirection={direction}\n          />\n        );\n      })}\n    </>\n  );\n\n  if (fillImageUrl) {\n    return (\n      <ImageBackground\n        source={{ uri: fillImageUrl }}\n        resizeMode='cover'\n        style={[containerStyle, styles.background, clipStyle]}\n      >\n        {content}\n      </ImageBackground>\n    );\n  }\n\n  return (\n    <View style={[containerStyle, bgColor ? { backgroundColor: bgColor } : null, styles.background, clipStyle]}>\n      {content}\n    </View>\n  );\n};\n\nfunction mergeRawMarginValue(existing: unknown, spacing: unknown): unknown {\n  if (existing == null) return spacing;\n\n  const existingNumeric = toNumericMargin(existing);\n  const spacingNumeric = toNumericMargin(spacing);\n  if (existingNumeric == null || spacingNumeric == null) {\n    return existing;\n  }\n\n  return existingNumeric + spacingNumeric;\n}\n\nfunction toNumericMargin(value: unknown): number | null {\n  if (typeof value === 'number' && Number.isFinite(value)) {\n    return value;\n  }\n\n  if (typeof value !== 'string') {\n    return null;\n  }\n\n  const trimmed = value.trim();\n  if (!trimmed || !/^-?\\d+(\\.\\d+)?$/.test(trimmed)) {\n    return null;\n  }\n\n  const parsed = Number(trimmed);\n  return Number.isFinite(parsed) ? parsed : null;\n}\n\nconst styles = StyleSheet.create({\n  background: {\n    ...StyleSheet.absoluteFillObject,\n  },\n});\n","import React from 'react';\nimport { View, StyleSheet } from 'react-native';\nimport type { THeaderFooter } from '@namiml/sdk-core';\nimport { usePaywallContext } from '../../context/PaywallContext';\nimport { TemplateRenderer } from '../TemplateRenderer';\n\ninterface Props {\n  components: THeaderFooter;\n  scaleFactor: number;\n  onClose?: () => void;\n}\n\nexport const NamiHeader: React.FC<Props> = ({ components, scaleFactor, onClose }) => {\n  const ctx = usePaywallContext();\n  const formFactor = ctx.state.formFactor;\n  const inFullScreen = ctx.state.fullScreenPresentation ?? false;\n  const marginTop = formFactor === 'phone' && !inFullScreen ? 40 : 0;\n\n  const list = Array.isArray(components)\n    ? components\n    : (components as any)?.components ?? [components];\n  const renderedList = React.useMemo(\n    () => list.map((comp: any, i: number) => (\n      <TemplateRenderer key={comp.id ?? i} component={comp} scaleFactor={scaleFactor} onClose={onClose} />\n    )),\n    [list, scaleFactor, onClose],\n  );\n\n  return (\n    <View style={[styles.header, { marginTop }]}>\n      {renderedList}\n    </View>\n  );\n};\n\nconst styles = StyleSheet.create({\n  header: {\n    display: 'flex',\n    position: 'relative',\n    width: '100%',\n    alignItems: 'center',\n    justifyContent: 'center',\n    zIndex: 2,\n  },\n});\n","import React from 'react';\nimport { View, StyleSheet } from 'react-native';\nimport type { THeaderFooter } from '@namiml/sdk-core';\nimport { TemplateRenderer } from '../TemplateRenderer';\n\ninterface Props {\n  components: THeaderFooter;\n  scaleFactor: number;\n  onClose?: () => void;\n}\n\nexport const NamiFooter: React.FC<Props> = ({ components, scaleFactor, onClose }) => {\n  const list = Array.isArray(components)\n    ? components\n    : (components as any)?.components ?? [components];\n\n  return (\n    <View style={styles.footer}>\n      {list.map((comp: any, i: number) => (\n        <TemplateRenderer key={comp.id ?? i} component={comp} scaleFactor={scaleFactor} onClose={onClose} />\n      ))}\n    </View>\n  );\n};\n\nconst styles = StyleSheet.create({\n  footer: {\n    position: 'absolute',\n    bottom: 0,\n    width: '100%',\n    alignItems: 'center',\n    justifyContent: 'center',\n    zIndex: 3,\n  },\n});\n","/**\n * NAM-403: full-page screenreader announcement helpers for the Vega/Kepler\n * (and shared Expo) renderer. RN-free so the jest node environment can unit-test\n * it (mirrors imageAccessibility.ts). See the TV Full-Page Announcement contract.\n */\n\nexport type TextResolver = (value: string | undefined) => string;\n\nexport interface AnnouncementPage {\n  header?: unknown;\n  contentContainer?: unknown;\n  footer?: unknown;\n}\n\n// Reserved action functions whose buttons never trigger a full-page announcement\n// and always speak only their own label. Source of truth: utils/actionHandler.ts\n// (duplicated here to keep this module RN-free and node-testable).\nconst AUXILIARY_ACTIONS = new Set<string>([\n  'namiRestorePurchases',\n  'namiSignIn',\n  'namiClosePaywall',\n  'namiNavigateToScreen',\n]);\n\nconst TEXT_TYPES = new Set<string>(['text', 'text-list']);\n// Subtrees never descended into during the page-text walk. Button labels are\n// announced on their own focus; media/decoration carry no announce-worthy text.\nconst SKIP_SUBTREE_TYPES = new Set<string>(['button', 'image', 'videoUrl', 'spacer', 'symbol']);\n\nfunction childrenOf(node: any): any[] {\n  if (Array.isArray(node)) return node;\n  if (node && Array.isArray(node.components)) return node.components;\n  return [];\n}\n\nfunction collectNode(node: any, resolve: TextResolver, out: string[]): void {\n  if (!node || typeof node !== 'object') return;\n  if (Array.isArray(node)) {\n    for (const child of node) collectNode(child, resolve, out);\n    return;\n  }\n  if (node.hidden === true) return;\n\n  const type: string | undefined = node.component;\n\n  if (type && TEXT_TYPES.has(type)) {\n    if (type === 'text-list' && Array.isArray(node.texts)) {\n      for (const item of node.texts) {\n        const resolved = resolve(typeof item === 'string' ? item : String(item ?? '')).trim();\n        if (resolved) out.push(resolved);\n      }\n    } else {\n      const raw = node.text ?? node.title;\n      const resolved = resolve(typeof raw === 'string' ? raw : raw == null ? '' : String(raw)).trim();\n      if (resolved) out.push(resolved);\n    }\n    return; // text nodes have no announce-worthy descendants\n  }\n\n  if (type && SKIP_SUBTREE_TYPES.has(type)) return;\n\n  for (const child of childrenOf(node)) collectNode(child, resolve, out);\n}\n\n/**\n * Walk a page (header -> contentContainer -> footer) in source order and join the\n * resolved text of every `text` / `text-list` node. Skips images, media, spacers,\n * symbols, button subtrees, and any node with `hidden: true` (and its children).\n */\nexport function collectPageAnnouncementText(page: AnnouncementPage, resolve: TextResolver): string {\n  const out: string[] = [];\n  collectNode((page as any)?.header, resolve, out);\n  collectNode((page as any)?.contentContainer, resolve, out);\n  collectNode((page as any)?.footer, resolve, out);\n  return out.join('. ');\n}\n\nexport type ButtonAnnouncementKind = 'primary' | 'auxiliary';\n\n/**\n * Auxiliary buttons (restore / sign in / skip-close / navigate) only ever speak\n * their own label; primary buttons (the default CTA and product buttons) trigger\n * the full-page announcement on first focus.\n */\nexport function classifyButtonAnnouncement(\n  component: { onTap?: { function?: string } } | null | undefined,\n): ButtonAnnouncementKind {\n  const fn = component?.onTap?.function;\n  return fn && AUXILIARY_ACTIONS.has(fn) ? 'auxiliary' : 'primary';\n}\n","/**\n * NAM-403: the pure decision logic behind full-page screenreader announcements.\n * RN-free and side-effect-free so it runs under the jest node environment. The\n * React AnnouncementProvider owns state (live-region text, video subscription)\n * and delegates every decision here.\n *\n * Contract (see TV Full-Page Announcement):\n *  - First focus of a primary button announces the composite (page text + label).\n *  - Subsequent focuses and auxiliary buttons speak only their own label, which\n *    the OS screenreader reads naturally — so this machine returns null for them.\n *  - While a video plays, the announcement is deferred and flushed on video end.\n */\nimport type { ButtonAnnouncementKind } from './a11yAnnouncement';\n\nexport interface AnnouncementFocusInput {\n  kind: ButtonAnnouncementKind;\n  ownLabel: string;\n  videoPlaying: boolean;\n  buildComposite: () => string;\n}\n\nexport interface AnnouncementMachine {\n  /** Returns text to speak now via the live region, or null (natural read / deferred). */\n  onFocus(input: AnnouncementFocusInput): string | null;\n  /** Flush a deferred announcement when video playback stops. */\n  onVideoStopped(): string | null;\n  /** Reset per-page state (call on page change). */\n  reset(): void;\n}\n\nexport function createAnnouncementMachine(): AnnouncementMachine {\n  let pageAnnounced = false;\n  let deferred: string | null = null;\n\n  return {\n    onFocus({ kind, ownLabel, videoPlaying, buildComposite }) {\n      if (videoPlaying) {\n        // Defer: the button is hidden from a11y during playback, so nothing is\n        // spoken now; the flush on video end says the composite (first primary\n        // focus) or the focused button's own label.\n        deferred = kind === 'primary' && !pageAnnounced ? buildComposite() : ownLabel;\n        if (kind === 'primary') pageAnnounced = true;\n        return null;\n      }\n      if (kind === 'auxiliary') return null; // natural focus read handles it\n      if (pageAnnounced) return null; // subsequent focus -> natural read\n      pageAnnounced = true;\n      return buildComposite();\n    },\n\n    onVideoStopped() {\n      if (deferred == null) return null;\n      const text = deferred;\n      deferred = null;\n      return text;\n    },\n\n    reset() {\n      pageAnnounced = false;\n      deferred = null;\n    },\n  };\n}\n","type VideoControlState = {\n  playing: boolean;\n  muted: boolean;\n};\n\ntype Listener = (state: VideoControlState) => void;\n\nlet state: VideoControlState = {\n  playing: false,\n  muted: false,\n};\n\nconst listeners = new Set<Listener>();\n\nfunction emit() {\n  listeners.forEach((listener) => listener(state));\n}\n\nexport function getVideoControlState(): VideoControlState {\n  return state;\n}\n\nexport function subscribeVideoControls(listener: Listener): () => void {\n  listeners.add(listener);\n  listener(state);\n  return () => listeners.delete(listener);\n}\n\nexport function setVideoPlaying(playing: boolean): void {\n  if (state.playing === playing) return;\n  state = { ...state, playing };\n  emit();\n}\n\nexport function setVideoMuted(muted: boolean): void {\n  if (state.muted === muted) return;\n  state = { ...state, muted };\n  emit();\n}\n\nexport function initializeVideoControls(next: Partial<VideoControlState>): void {\n  const updated: VideoControlState = {\n    playing: next.playing ?? state.playing,\n    muted: next.muted ?? state.muted,\n  };\n  if (updated.playing === state.playing && updated.muted === state.muted) return;\n  state = updated;\n  emit();\n}\n","import React, { createContext, useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react';\nimport { usePaywallContext } from './PaywallContext';\nimport { buildSmartTextReplacements, interpolateSmartText } from '../utils/smartText';\nimport {\n  collectPageAnnouncementText,\n  type AnnouncementPage,\n  type ButtonAnnouncementKind,\n} from '../utils/a11yAnnouncement';\nimport { createAnnouncementMachine } from '../utils/announcementMachine';\nimport { getVideoControlState, subscribeVideoControls } from '../utils/videoControls';\n\nexport interface AnnouncerValue {\n  isVideoPlaying: boolean;\n  liveRegionText: string;\n  announceOnFocus(kind: ButtonAnnouncementKind, ownLabel: string): void;\n}\n\nconst AnnouncementCtx = createContext<AnnouncerValue | null>(null);\n\n// Re-announcing identical text will not fire the live region again; append an\n// alternating zero-width space (U+200B) so each announce is a distinct text value.\nconst ZERO_WIDTH_SPACE = \"\\u200B\";\nlet toggle = false;\nfunction distinct(text: string): string {\n  toggle = !toggle;\n  return toggle ? text : `${text}${ZERO_WIDTH_SPACE}`;\n}\n\n/**\n * NAM-403: holds per-page announcement state and drives the assertive live region.\n * Pure decision logic lives in announcementMachine; this provider wires it to\n * React state, the video-controls subscription, and smart-text resolution.\n * Reset per page via the `page` dependency.\n */\nexport const AnnouncementProvider: React.FC<{ page: AnnouncementPage; children: React.ReactNode }> = ({\n  page,\n  children,\n}) => {\n  const ctx = usePaywallContext();\n  const [liveRegionText, setLiveRegionText] = useState('');\n  const [isVideoPlaying, setIsVideoPlaying] = useState(() => getVideoControlState().playing);\n  const machineRef = useRef(createAnnouncementMachine());\n  const prevPlayingRef = useRef(getVideoControlState().playing);\n\n  const buildComposite = useCallback(\n    (ownLabel: string): string => {\n      const replacements = buildSmartTextReplacements(ctx.state, ctx.flow, undefined);\n      const resolve = (v?: string) => {\n        const out = interpolateSmartText(v ?? '', replacements);\n        return out == null ? '' : String(out);\n      };\n      const pageText = collectPageAnnouncementText(page, resolve);\n      return pageText ? `${pageText}. ${ownLabel}` : ownLabel;\n    },\n    [ctx.state, ctx.flow, page],\n  );\n\n  const announceOnFocus = useCallback(\n    (kind: ButtonAnnouncementKind, ownLabel: string) => {\n      const text = machineRef.current.onFocus({\n        kind,\n        ownLabel,\n        videoPlaying: getVideoControlState().playing,\n        buildComposite: () => buildComposite(ownLabel),\n      });\n      if (text != null) setLiveRegionText(distinct(text));\n    },\n    [buildComposite],\n  );\n\n  // Track video playback; flush any deferred announcement when it ends.\n  useEffect(\n    () =>\n      subscribeVideoControls((state) => {\n        setIsVideoPlaying(state.playing);\n        if (prevPlayingRef.current && !state.playing) {\n          const text = machineRef.current.onVideoStopped();\n          if (text != null) setLiveRegionText(distinct(text));\n        }\n        prevPlayingRef.current = state.playing;\n      }),\n    [],\n  );\n\n  // Reset per page.\n  useEffect(() => {\n    machineRef.current.reset();\n    setLiveRegionText('');\n  }, [page]);\n\n  const value = useMemo<AnnouncerValue>(\n    () => ({ isVideoPlaying, liveRegionText, announceOnFocus }),\n    [isVideoPlaying, liveRegionText, announceOnFocus],\n  );\n\n  return <AnnouncementCtx.Provider value={value}>{children}</AnnouncementCtx.Provider>;\n};\n\nexport function useAnnouncer(): AnnouncerValue {\n  const ctx = useContext(AnnouncementCtx);\n  if (!ctx) throw new Error('useAnnouncer must be used within an AnnouncementProvider');\n  return ctx;\n}\n","import React from 'react';\nimport { Text, StyleSheet } from 'react-native';\n\n/**\n * NAM-403: visually-hidden assertive live region used to speak the full-page\n * composite announcement. Default (RN) path uses accessibilityLiveRegion, which\n * TalkBack/VoiceView honor on focus-independent text changes. The Kepler override\n * (A11yLiveRegion.kepler.tsx) uses Amazon's preferred aria-live prop. Empty text\n * renders nothing to speak.\n */\nexport const A11yLiveRegion: React.FC<{ text: string }> = ({ text }) => (\n  <Text\n    accessible={!!text}\n    accessibilityLiveRegion=\"assertive\"\n    style={styles.hidden}\n    allowFontScaling={false}\n  >\n    {text}\n  </Text>\n);\n\nconst styles = StyleSheet.create({\n  hidden: { position: 'absolute', width: 1, height: 1, overflow: 'hidden', left: -9999, opacity: 0 },\n});\n","import {\n  getUrlParams,\n  Impression,\n  isAnonymousMode,\n  logger,\n  NamiAPI,\n  storageService,\n} from '@namiml/sdk-core';\n\nfunction buildImpressionPayload(impression: Impression): Impression {\n  const payload: Impression = { ...impression };\n  const sessionId = storageService.getSessionId();\n  if (sessionId) {\n    payload.session = sessionId;\n  }\n\n  const launchId = storageService.getLaunchId();\n  if (launchId) {\n    payload.launch_id = launchId;\n  }\n\n  payload.app_env = NAMI_SDK_ENV;\n  payload.url_params = getUrlParams();\n  return payload;\n}\n\nexport const postImpression = async (impression: Impression): Promise<void> => {\n  if (isAnonymousMode()) {\n    return;\n  }\n\n  const payload = buildImpressionPayload(impression);\n\n  try {\n    await NamiAPI.instance.postImpression(payload);\n  } catch (error) {\n    logger.error('Error posting impression', error);\n  }\n};\n","import React, { useEffect, useMemo, useState } from 'react';\nimport { ActivityIndicator, BackHandler, Keyboard, Pressable, View, StyleSheet } from 'react-native';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\nimport type { IPaywall, TPages } from '@namiml/sdk-core';\nimport { useFirstFocusReadyContext, usePaywallContext } from '../context/PaywallContext';\nimport { NamiContentContainer } from './containers/NamiContentContainer';\nimport { NamiBackgroundContainer } from './containers/NamiBackgroundContainer';\nimport { NamiHeader } from './containers/NamiHeader';\nimport { NamiFooter } from './containers/NamiFooter';\nimport { AnnouncementProvider, useAnnouncer } from '../context/AnnouncementContext';\nimport { A11yLiveRegion } from './elements/A11yLiveRegion';\nimport { parseColor } from '../utils/styles';\nimport { getDeviceScaleFactor, NamiEventEmitter, NamiPaywallAction, PAYWALL_ACTION_EVENT, NamiReservedActions } from '@namiml/sdk-core';\nimport { prepareAndLoadFontsWithTimeout } from '../utils/fonts';\nimport { postImpression } from '../utils/impression';\n\ninterface Props {\n  paywall: IPaywall;\n  onClose?: () => void;\n  onCommitted?: (paywall: IPaywall, pageName: string, formFactor?: string) => void;\n  holdInteractionUntilFocus?: boolean;\n  isActive?: boolean;\n}\n\nlet KeplerTVFocusGuideView: React.ComponentType<any> | null = null;\ntry {\n  KeplerTVFocusGuideView = require('@amazon-devices/react-native-kepler').TVFocusGuideView;\n} catch {\n  KeplerTVFocusGuideView = null;\n}\n\nconst fontGateCache = new Map<string, 'ready' | 'fallback'>();\n\nexport const PaywallScreen: React.FC<Props> = ({\n  paywall,\n  onClose,\n  onCommitted,\n  holdInteractionUntilFocus = false,\n  isActive = true,\n}) => {\n  const ctx = usePaywallContext();\n  const insets = useSafeAreaInsets();\n  const focusReadyCtx = useFirstFocusReadyContext();\n\n  // Push the measured top safe-area inset into paywall state so templates can\n  // position chrome via ${state.safeAreaTop} (e.g. header topPadding,\n  // background topMargin). Mirrors the native Android renderer, which measures\n  // the display cutout and calls setSafeAreaTop. The full-bleed root lets the\n  // background extend under the status bar; this offsets the content back into\n  // the safe area. No safeAreaBottom equivalent exists in core/Android state.\n  // Depend only on insets.top (stable per device/orientation) — depending on\n  // ctx would re-run every render and loop through setState.\n  useEffect(() => {\n    ctx.setSafeAreaTop(insets.top);\n  }, [insets.top]);\n  const scaleFactor = getDeviceScaleFactor(ctx.state.formFactor);\n  const userInteractionEnabled = ctx.state.userInteractionEnabled !== false;\n  const currentPageName = ctx.state.selectedPaywall === paywall\n    ? ctx.state.currentPage\n    : paywall.template?.initialState?.currentPage ?? 'page1';\n\n  const page = useMemo(() => {\n    let currentPage: string;\n    if (ctx.state.selectedPaywall === paywall) {\n      currentPage = ctx.state.currentPage;\n    } else {\n      currentPage = paywall.template?.initialState?.currentPage ?? 'page1';\n    }\n\n    return paywall.template?.pages?.find((p: TPages) => p.name === currentPage) ?? null;\n  }, [paywall, ctx.state.selectedPaywall, ctx.state.currentPage]);\n\n  const firstFocusReadyKey = `${paywall.id ?? 'unknown'}:${page?.name ?? currentPageName}:${ctx.state.formFactor ?? ''}`;\n  const shouldHoldForFocus = holdInteractionUntilFocus && ctx.state.formFactor === 'television';\n  const focusReady = !shouldHoldForFocus || focusReadyCtx.firstFocusReadyKey === firstFocusReadyKey;\n  const interactionEnabled = userInteractionEnabled && focusReady;\n  const fontNames = useMemo(() => Object.keys(paywall.fonts ?? {}).sort(), [paywall.fonts]);\n  const fontGateCacheKey = `${paywall.id ?? 'unknown'}:${page?.name ?? currentPageName}:${fontNames.join(',')}`;\n  const hasFonts = fontNames.length > 0;\n  const [fontGateState, setFontGateState] = useState<'pending' | 'ready' | 'fallback'>(() => {\n    if (!hasFonts) {\n      return 'ready';\n    }\n\n    return fontGateCache.get(fontGateCacheKey) ?? 'pending';\n  });\n\n  useEffect(() => {\n    void postImpression({\n      segment: ctx.state.selectedCampaign?.segment,\n      call_to_action: paywall.id,\n    });\n\n    NamiEventEmitter.getInstance().emit(PAYWALL_ACTION_EVENT, {\n      ...ctx.getPaywallActionEventData(),\n      action: NamiPaywallAction.SHOW_PAYWALL,\n    });\n  }, [paywall.id, ctx.state.selectedCampaign?.segment]);\n\n  useEffect(() => {\n    let cancelled = false;\n\n    if (!hasFonts) {\n      setFontGateState('ready');\n      return;\n    }\n\n    const cachedGateState = fontGateCache.get(fontGateCacheKey);\n    if (cachedGateState) {\n      setFontGateState(cachedGateState);\n      return;\n    }\n\n    setFontGateState('pending');\n\n    void prepareAndLoadFontsWithTimeout(paywall.fonts, 1500).then((result) => {\n      if (!cancelled) {\n        const resolvedState = result === 'ready' ? 'ready' : 'fallback';\n        fontGateCache.set(fontGateCacheKey, resolvedState);\n        setFontGateState(resolvedState);\n      }\n    });\n\n    return () => {\n      cancelled = true;\n    };\n  }, [currentPageName, fontGateCacheKey, fontNames.length, hasFonts, page?.name, paywall.fonts, paywall.id]);\n\n  useEffect(() => {\n    if (fontGateState === 'pending') {\n      return;\n    }\n\n    const paywallId = paywall.id ?? 'unknown';\n    const pageName = page?.name ?? currentPageName;\n    onCommitted?.(paywall, pageName, ctx.state.formFactor);\n  }, [fontGateState, paywall, paywall.id, page?.name, currentPageName, interactionEnabled, onCommitted, ctx.state.formFactor]);\n\n  useEffect(() => {\n    if (!isActive) {\n      return;\n    }\n\n    const subscription = BackHandler.addEventListener('hardwareBackPress', () => {\n      const hasRemoteBackActions = !!ctx.flow?.currentFlowStep?.actions?.[NamiReservedActions.REMOTE_BACK]?.length;\n      if (hasRemoteBackActions) {\n        return false;\n      }\n\n      const canGoBackPage = ctx.canGoBackPage();\n      if (!canGoBackPage) {\n        return false;\n      }\n\n      return ctx.goBackPage();\n    });\n\n    return () => subscription.remove();\n  }, [ctx, isActive]);\n\n  const {\n    backgroundContainer,\n    header = [],\n    contentContainer,\n    footer = [],\n  } = (page ?? {}) as any;\n\n  const hasHeader = Array.isArray(header)\n    ? header.length > 0\n    : Array.isArray((header as any)?.components)\n      ? (header as any).components.length > 0\n      : Boolean(header);\n  const hasFooter = Array.isArray(footer)\n    ? footer.length > 0\n    : Array.isArray((footer as any)?.components)\n      ? (footer as any).components.length > 0\n      : Boolean(footer);\n  const bgColor = parseColor(backgroundContainer?.fillColor)\n    ?? parseColor(backgroundContainer?.fillColorFallback)\n    ?? 'transparent';\n  const waitingOverlayColor = bgColor === 'transparent' ? '#111118' : bgColor;\n  const PageFocusWrapper = ctx.state.formFactor === 'television' && KeplerTVFocusGuideView\n    ? KeplerTVFocusGuideView\n    : View;\n  const pageFocusWrapperProps = ctx.state.formFactor === 'television' && KeplerTVFocusGuideView\n    ? {\n        autoFocus: true,\n        style: styles.pageRoot,\n      }\n    : { style: styles.pageRoot };\n\n  if (!page) {\n    throw new Error(`Page with name ${ctx.state.currentPage} not found in paywall template.`);\n  }\n\n  if (fontGateState === 'pending') {\n    return (\n      <View style={[styles.screen, styles.pendingScreen, { backgroundColor: waitingOverlayColor }]}>\n        <ActivityIndicator size=\"large\" color=\"#FFFFFF\" />\n      </View>\n    );\n  }\n\n  // NAM-1933: on phone/tablet, tapping the paywall background (empty area above\n  // the keyboard) dismisses the keyboard. A Pressable wrapping the page content\n  // yields the responder to interactive children (buttons, the text field), so\n  // its onPress fires only for taps on non-interactive/empty areas. TV has no\n  // keyboard, so it renders the content without the Pressable.\n  const isTelevision = ctx.state.formFactor === 'television';\n\n  const pageContent = (\n    <PageFocusWrapper\n      key={`${paywall.id}:${page.name ?? currentPageName}`}\n      {...pageFocusWrapperProps}\n    >\n      <A11yLiveRegionMount />\n\n      {backgroundContainer && (\n        <NamiBackgroundContainer component={backgroundContainer as any} scaleFactor={scaleFactor} onClose={onClose} />\n      )}\n\n      {hasHeader && (\n        <NamiHeader\n          components={header as any}\n          scaleFactor={scaleFactor}\n          onClose={onClose}\n        />\n      )}\n\n      {contentContainer && (\n        <NamiContentContainer\n          component={contentContainer as any}\n          scaleFactor={scaleFactor}\n          onClose={onClose}\n        />\n      )}\n\n      {hasFooter && (\n        <NamiFooter components={footer as any} scaleFactor={scaleFactor} onClose={onClose} />\n      )}\n\n      {shouldHoldForFocus && !focusReady && (\n        <View\n          pointerEvents=\"none\"\n          style={[styles.waitingOverlay, { backgroundColor: waitingOverlayColor }]}\n        />\n      )}\n    </PageFocusWrapper>\n  );\n\n  return (\n    <AnnouncementProvider page={page as any} key={`ann:${paywall.id}:${page.name ?? currentPageName}`}>\n      <View\n        style={[styles.screen, { backgroundColor: bgColor }]}\n        pointerEvents={interactionEnabled ? 'auto' : 'none'}\n      >\n        {isTelevision ? (\n          pageContent\n        ) : (\n          <Pressable style={styles.screen} onPress={() => Keyboard.dismiss()} accessible={false}>\n            {pageContent}\n          </Pressable>\n        )}\n      </View>\n    </AnnouncementProvider>\n  );\n};\n\n/**\n * NAM-403: renders the assertive live region using text from the announcer.\n * Must live under AnnouncementProvider so it can read useAnnouncer().\n */\nconst A11yLiveRegionMount: React.FC = () => {\n  const { liveRegionText } = useAnnouncer();\n  return <A11yLiveRegion text={liveRegionText} />;\n};\n\nconst styles = StyleSheet.create({\n  screen: { flex: 1 },\n  pendingScreen: {\n    alignItems: 'center',\n    justifyContent: 'center',\n  },\n  pageRoot: { flex: 1 },\n  waitingOverlay: {\n    ...StyleSheet.absoluteFillObject,\n    alignItems: 'center',\n    justifyContent: 'center',\n    zIndex: 20,\n  },\n});\n","import React, { createContext, useCallback, useContext, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react';\n\ntype FocusScopeValue = {\n  reportDescendantFocusDelta(delta: number): void;\n};\n\ntype PreferredFocusValue = {\n  registerPreferredTarget(target: unknown): () => void;\n};\n\nconst FocusScopeContext = createContext<FocusScopeValue | null>(null);\nconst FocusedStyleContext = createContext(false);\nconst FocusContext = createContext(true);\nconst PreferredFocusContext = createContext<PreferredFocusValue | null>(null);\n\nexport const FocusScope: React.FC<{\n  children: React.ReactNode;\n  onFocusWithinChange?: (focused: boolean) => void;\n}> = ({ children, onFocusWithinChange }) => {\n  const parentScope = useContext(FocusScopeContext);\n  const focusedCountRef = useRef(0);\n\n  const reportDescendantFocusDelta = useCallback((delta: number) => {\n    const previousCount = focusedCountRef.current;\n    const nextCount = Math.max(0, previousCount + delta);\n    focusedCountRef.current = nextCount;\n\n    if ((previousCount === 0) === (nextCount === 0)) {\n      return;\n    }\n\n    const isFocused = nextCount > 0;\n    onFocusWithinChange?.(isFocused);\n    parentScope?.reportDescendantFocusDelta(isFocused ? 1 : -1);\n  }, [onFocusWithinChange, parentScope]);\n\n  useEffect(() => () => {\n    if (focusedCountRef.current > 0) {\n      parentScope?.reportDescendantFocusDelta(-1);\n    }\n  }, [parentScope]);\n\n  const value = useMemo<FocusScopeValue>(\n    () => ({ reportDescendantFocusDelta }),\n    [reportDescendantFocusDelta],\n  );\n\n  return (\n    <FocusScopeContext.Provider value={value}>\n      {children}\n    </FocusScopeContext.Provider>\n  );\n};\n\nexport const FocusedStyleProvider: React.FC<{\n  children: React.ReactNode;\n  focused: boolean;\n}> = ({ children, focused }) => {\n  const parentFocused = useContext(FocusedStyleContext);\n  const value = parentFocused || focused;\n\n  return (\n    <FocusedStyleContext.Provider value={value}>\n      {children}\n    </FocusedStyleContext.Provider>\n  );\n};\n\nexport const FocusProvider: React.FC<{\n  children: React.ReactNode;\n  enabled: boolean;\n}> = ({ children, enabled }) => (\n  <FocusContext.Provider value={enabled}>\n    {children}\n  </FocusContext.Provider>\n);\n\nexport const PreferredFocusProvider: React.FC<{\n  children: React.ReactNode;\n  onPreferredTargetChange?: (target: unknown | null) => void;\n}> = ({ children, onPreferredTargetChange }) => {\n  const registerPreferredTarget = useCallback((target: unknown) => {\n    onPreferredTargetChange?.(target);\n\n    return () => {\n      onPreferredTargetChange?.(null);\n    };\n  }, [onPreferredTargetChange]);\n\n  const value = useMemo<PreferredFocusValue>(\n    () => ({ registerPreferredTarget }),\n    [registerPreferredTarget],\n  );\n\n  return (\n    <PreferredFocusContext.Provider value={value}>\n      {children}\n    </PreferredFocusContext.Provider>\n  );\n};\n\nexport function useInheritedFocusedStyle(): boolean {\n  return useContext(FocusedStyleContext);\n}\n\nexport function useFocusEnabled(): boolean {\n  return useContext(FocusContext);\n}\n\nexport function useRegisterPreferredFocus(target: unknown, enabled: boolean): void {\n  const context = useContext(PreferredFocusContext);\n\n  useEffect(() => {\n    if (!enabled || target == null) {\n      return;\n    }\n\n    return context?.registerPreferredTarget(target);\n  }, [context, enabled, target]);\n}\n\nexport function useFocusableState(initialFocused = false, enabled = true) {\n  const scope = useContext(FocusScopeContext);\n  const [isFocused, setIsFocused] = useState(initialFocused);\n  const isFocusedRef = useRef(initialFocused);\n  const reportedToScopeRef = useRef(false);\n\n  const setFocused = useCallback((focused: boolean) => {\n    if (isFocusedRef.current === focused) {\n      return;\n    }\n\n    isFocusedRef.current = focused;\n    setIsFocused(focused);\n    if (focused && !reportedToScopeRef.current) {\n      scope?.reportDescendantFocusDelta(1);\n      reportedToScopeRef.current = true;\n    } else if (!focused && reportedToScopeRef.current) {\n      scope?.reportDescendantFocusDelta(-1);\n      reportedToScopeRef.current = false;\n    }\n  }, [scope]);\n\n  useLayoutEffect(() => {\n    if (!enabled) {\n      setFocused(false);\n      return;\n    }\n\n    if (initialFocused && !reportedToScopeRef.current) {\n      scope?.reportDescendantFocusDelta(1);\n      reportedToScopeRef.current = true;\n    }\n\n    return () => {\n      if (reportedToScopeRef.current) {\n        reportedToScopeRef.current = false;\n        scope?.reportDescendantFocusDelta(-1);\n      }\n    };\n  }, [enabled, initialFocused, scope, setFocused]);\n\n  return {\n    isFocused,\n    onFocus: useCallback(() => setFocused(true), [setFocused]),\n    onBlur: useCallback(() => setFocused(false), [setFocused]),\n    setFocused,\n  };\n}\n","import React, { useState, useEffect, useLayoutEffect, useRef, useMemo, useCallback } from 'react';\nimport { View, StyleSheet, Animated, Dimensions, StatusBar, BackHandler, ActivityIndicator } from 'react-native';\nimport { SafeAreaProvider, initialWindowMetrics } from 'react-native-safe-area-context';\nimport type {\n  IPaywall,\n  NamiPaywallLaunchContext,\n  NamiCampaign,\n  FlowNavigationOptions,\n  NamiFlow,\n  NamiPaywallEvent,\n} from '@namiml/sdk-core';\nimport {\n  getPaywallDataFromLabel,\n  getPaywall,\n  isValidUrl,\n  isNamiFlowCampaign,\n  NamiReservedActions,\n  hasAllPaywalls,\n  NamiEventEmitter,\n  NamiPaywallAction,\n  PAYWALL_ACTION_EVENT,\n  logger,\n} from '@namiml/sdk-core';\n// `.instance.presentFlow()` and `.instance.flowOpen` are class statics not on\n// the narrow public NamiFlowManager proxy; renderer code goes through the\n// `_internal` namespace on root (NAM-1217).\nimport { _internal } from '@namiml/sdk-core';\nconst { NamiFlowManager } = _internal;\nimport { PaywallProvider } from '../context/PaywallContext';\nimport { PaywallScreen } from './PaywallScreen';\nimport { expoUIAdapter } from '../adapters';\nimport { FocusProvider } from '../context/FocusContext';\nimport { prewarmPaywallFonts, prepareAndLoadFontsWithTimeout } from '../utils/fonts';\nimport { parseColor } from '../utils/styles';\nimport { backfill as backfillProducts, collectSkuRefIds } from '../products/productStore';\n\nexport interface NamiViewProps {\n  /** Campaign placement label */\n  placement?: string;\n  /** Campaign URL for deep-link resolution */\n  url?: string;\n  /** Called when the paywall should be dismissed */\n  onClose?: () => void;\n  /** Called when the user taps the sign-in action */\n  onSignIn?: () => void;\n  /** Called when a deep link action fires */\n  onDeepLink?: (url: string) => void;\n  /** Called when a purchase is initiated */\n  onPurchase?: (sku: any) => void;\n  /** Called when the user taps the restore purchases action */\n  onRestore?: () => void;\n  /** Catch-all callback for every paywall action event */\n  onPaywallEvent?: (event: NamiPaywallEvent) => void;\n  /** Called when a flow handoff step fires */\n  onHandoff?: (handoffTag: string, handoffData?: Record<string, any>) => void;\n  /** Called when a flow event fires */\n  onFlowEvent?: (event: Record<string, any>) => void;\n}\n\ntype LaunchRequest = {\n  type?: string;\n  value: string;\n  context?: NamiPaywallLaunchContext;\n};\n\ntype FlowState = {\n  paywalls: IPaywall[];\n  index: number;\n  animation?: FlowNavigationOptions | null;\n};\n\ntype CachedLaunch = {\n  paywallData: IPaywall | null;\n  campaignData: NamiCampaign | null;\n  launchPreviewPaywall: IPaywall | null;\n};\n\ntype RemoteBackFallbackAttempt = {\n  flow: NamiFlow;\n  stepId: string;\n  paywallId?: string;\n};\n\nconst DEFAULT_CONTEXT: NamiPaywallLaunchContext = {\n  productGroups: [],\n  customAttributes: {},\n  customObject: {},\n  currentGroup: '',\n};\n\nconst REMOTE_BACK_FALLBACK_DELAY_MS = 600;\n\nexport const NamiView: React.FC<NamiViewProps> = ({\n  placement,\n  url,\n  onClose,\n  onSignIn,\n  onDeepLink,\n  onPurchase,\n  onRestore,\n  onPaywallEvent,\n  onHandoff,\n  onFlowEvent,\n}) => {\n  const [launchRequest, setLaunchRequest] = useState<LaunchRequest | null>(null);\n  const [reloadKey, setReloadKey] = useState(0);\n  const [isClosing, setIsClosing] = useState(false);\n\n  const [paywallData, setPaywallData] = useState<IPaywall | null>(null);\n  const [campaignData, setCampaignData] = useState<NamiCampaign | null>(null);\n  const [launchPreviewPaywall, setLaunchPreviewPaywall] = useState<IPaywall | null>(null);\n  const [pendingTransitionPaywall, setPendingTransitionPaywall] = useState<IPaywall | null>(null);\n  const [initialScreenCommitted, setInitialScreenCommitted] = useState(false);\n  const [loading, setLoading] = useState(true);\n\n  const [flowState, setFlowState] = useState<FlowState>({ paywalls: [], index: 0, animation: null });\n  const flowRef = useRef<NamiFlow | undefined>();\n  const lastLaunchKeyRef = useRef<string>('');\n  const lastAppearStepIdRef = useRef<string>('');\n  const launchCacheRef = useRef<Map<string, CachedLaunch>>(new Map());\n  const remoteBackFallbackTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n  const remoteBackFallbackAttemptRef = useRef<RemoteBackFallbackAttempt | null>(null);\n  const pendingNavigationFrameRef = useRef<number | null>(null);\n\n  // Stable refs for callbacks so event listeners always see latest values\n  const onCloseRef = useRef(onClose);\n  const onSignInRef = useRef(onSignIn);\n  const onDeepLinkRef = useRef(onDeepLink);\n  const onPurchaseRef = useRef(onPurchase);\n  const onRestoreRef = useRef(onRestore);\n  const onPaywallEventRef = useRef(onPaywallEvent);\n  const onHandoffRef = useRef(onHandoff);\n  const onFlowEventRef = useRef(onFlowEvent);\n\n  useEffect(() => { onCloseRef.current = onClose; }, [onClose]);\n  useEffect(() => { onSignInRef.current = onSignIn; }, [onSignIn]);\n  useEffect(() => { onDeepLinkRef.current = onDeepLink; }, [onDeepLink]);\n  useEffect(() => { onPurchaseRef.current = onPurchase; }, [onPurchase]);\n  useEffect(() => { onRestoreRef.current = onRestore; }, [onRestore]);\n  useEffect(() => { onPaywallEventRef.current = onPaywallEvent; }, [onPaywallEvent]);\n  useEffect(() => { onHandoffRef.current = onHandoff; }, [onHandoff]);\n  useEffect(() => { onFlowEventRef.current = onFlowEvent; }, [onFlowEvent]);\n\n  const resolvedLaunch = useMemo<LaunchRequest>(() => {\n    if (launchRequest?.value) return launchRequest;\n    if (url) return { type: 'url', value: url };\n    if (placement) {\n      // A URL/deeplink campaign carries its URL in the value. If one is handed\n      // in via the placement prop, classify it as a url launch so core takes\n      // the URL-match branch — otherwise the label lookup misses, no paywall\n      // resolves, and NamiView spins on the placeholder forever.\n      return { type: isValidUrl(placement) ? 'url' : 'label', value: placement };\n    }\n    return { type: undefined, value: '' };\n  }, [launchRequest, url, placement]);\n\n  const ctx = useMemo<NamiPaywallLaunchContext>(\n    () => ({\n      ...DEFAULT_CONTEXT,\n      ...(resolvedLaunch.context ?? launchRequest?.context ?? {}),\n      customAttributes: {\n        ...DEFAULT_CONTEXT.customAttributes,\n        ...(resolvedLaunch.context?.customAttributes ??\n          launchRequest?.context?.customAttributes ??\n          {}),\n      },\n      customObject: {\n        ...DEFAULT_CONTEXT.customObject,\n        ...(resolvedLaunch.context?.customObject ??\n          launchRequest?.context?.customObject ??\n          {}),\n      },\n      productGroups:\n        resolvedLaunch.context?.productGroups ??\n        launchRequest?.context?.productGroups ??\n        DEFAULT_CONTEXT.productGroups,\n    }),\n    [launchRequest?.context, resolvedLaunch.context],\n  );\n  const isFlowCampaign = isNamiFlowCampaign(campaignData as any);\n\n  const clearRemoteBackFallback = useCallback(() => {\n    if (remoteBackFallbackTimeoutRef.current) {\n      clearTimeout(remoteBackFallbackTimeoutRef.current);\n      remoteBackFallbackTimeoutRef.current = null;\n    }\n    remoteBackFallbackAttemptRef.current = null;\n  }, []);\n\n  const finishActiveFlow = useCallback(() => {\n    clearRemoteBackFallback();\n    const activeFlow = flowRef.current;\n    if (!activeFlow) return;\n    // Cast comparison sides to `unknown` first — `currentFlow` is typed via\n    // the `_internal` namespace's NamiFlow class declaration (NAM-1217),\n    // `activeFlow` (via flowRef) is typed via the public-barrel's NamiFlow.\n    // Identical runtime class, but bundled .d.ts emits each separately and\n    // TS treats them as nominally distinct. See the cast in the\n    // presentFlow block below.\n    if ((NamiFlowManager.instance.currentFlow as unknown) === activeFlow || NamiFlowManager.instance.flowOpen) {\n      NamiFlowManager.finish();\n    }\n    flowRef.current = undefined;\n    lastAppearStepIdRef.current = '';\n  }, [clearRemoteBackFallback]);\n\n  const requestClose = useCallback(() => {\n    clearRemoteBackFallback();\n    if (onCloseRef.current) {\n      setIsClosing(true);\n      onCloseRef.current();\n      return;\n    }\n  }, [clearRemoteBackFallback]);\n\n  const scheduleRemoteBackFallbackClose = useCallback((flow: NamiFlow, stepId: string, paywallId?: string) => {\n    clearRemoteBackFallback();\n    remoteBackFallbackAttemptRef.current = {\n      flow,\n      stepId,\n      paywallId,\n    };\n    remoteBackFallbackTimeoutRef.current = setTimeout(() => {\n      remoteBackFallbackTimeoutRef.current = null;\n      const attempt = remoteBackFallbackAttemptRef.current;\n      const activeFlow = flowRef.current;\n      const activeStepId = activeFlow?.currentFlowStep?.id;\n      const activeStepType = activeFlow?.currentFlowStep?.type;\n      const activePaywallId = paywallData?.id;\n      const transitionedToTerminalExit =\n        !!attempt\n        && attempt.flow === activeFlow\n        && activePaywallId === attempt.paywallId\n        && (\n          activeFlow?.currentFlowStep?.type === 'exit'\n          || NamiFlowManager.instance.flowOpen === false\n        );\n      const shouldFallbackClose =\n        !isClosing\n        && !!attempt\n        && (\n          (\n            attempt.flow === activeFlow\n            && activeFlow?.currentFlowStep?.id === attempt.stepId\n            && activePaywallId === attempt.paywallId\n            && activeFlow?.previousStepAvailable === false\n          )\n          || transitionedToTerminalExit\n        );\n\n      if (!shouldFallbackClose) {\n        remoteBackFallbackAttemptRef.current = null;\n        return;\n      }\n\n      remoteBackFallbackAttemptRef.current = null;\n      finishActiveFlow();\n      requestClose();\n    }, REMOTE_BACK_FALLBACK_DELAY_MS);\n  }, [clearRemoteBackFallback, finishActiveFlow, isClosing, paywallData?.id, requestClose]);\n\n  const handleFlowNavigation = useCallback(\n    (paywall: IPaywall, options: FlowNavigationOptions) => {\n      const flow = flowRef.current;\n      const currentPaywall =\n        flowState.paywalls[flowState.index] ??\n        flowState.paywalls[flowState.paywalls.length - 1] ??\n        paywallData;\n      const shouldUseAnimatedTransition =\n        options.transition !== 'none'\n        && !!currentPaywall\n        && currentPaywall.id !== paywall.id;\n\n      const applyNavigation = () => {\n        if (flow?.previousFlowStep) {\n          flow.executeLifecycle(\n            flow.previousFlowStep,\n            NamiReservedActions.DISAPPEAR,\n          );\n        }\n\n        setFlowState(() => {\n          if (!shouldUseAnimatedTransition || !currentPaywall) {\n            return { paywalls: [paywall], index: 0, animation: options };\n          }\n\n          return {\n            paywalls: [currentPaywall, paywall],\n            index: 1,\n            animation: options,\n          };\n        });\n        setPaywallData(paywall);\n\n        if (flow?.currentFlowStep) {\n          flow.executeLifecycle(\n            flow.currentFlowStep,\n            NamiReservedActions.APPEAR,\n          );\n          lastAppearStepIdRef.current = flow.currentFlowStep.id;\n        }\n      };\n\n      if (!shouldUseAnimatedTransition) {\n        setPendingTransitionPaywall(null);\n        applyNavigation();\n        return;\n      }\n\n      setPendingTransitionPaywall(paywall);\n      if (pendingNavigationFrameRef.current != null) {\n        cancelAnimationFrame(pendingNavigationFrameRef.current);\n      }\n      pendingNavigationFrameRef.current = requestAnimationFrame(() => {\n        pendingNavigationFrameRef.current = null;\n        applyNavigation();\n      });\n    },\n    [flowState.index, flowState.paywalls, paywallData],\n  );\n\n  const handleFlowAnimationSettled = useCallback((paywall: IPaywall) => {\n    setPendingTransitionPaywall(null);\n    setFlowState((prev) => {\n      const current = prev.paywalls[prev.index] ?? prev.paywalls[prev.paywalls.length - 1];\n      if (!prev.animation && current?.id === paywall.id) {\n        return prev;\n      }\n\n      if (prev.paywalls.length > 1 && prev.index > 0) {\n        return {\n          paywalls: prev.paywalls,\n          index: prev.index,\n          animation: null,\n        };\n      }\n\n      return { paywalls: [paywall], index: 0, animation: null };\n    });\n  }, []);\n\n  useEffect(() => {\n    const subscription = BackHandler.addEventListener(\"hardwareBackPress\", () => {\n      const flow = flowRef.current;\n      if (flow?.currentFlowStep) {\n        const stepcrumbs = Array.isArray(flow.stepcrumbs) ? flow.stepcrumbs : [];\n        const previousScreenStep = [...stepcrumbs]\n          .slice(0, -1)\n          .reverse()\n          .find((step) => step?.type === 'screen');\n        const hasRemoteBackActions = !!flow.currentFlowStep?.actions?.[NamiReservedActions.REMOTE_BACK]?.length;\n        const canNavigateBackInFlow =\n          flow.previousStepAvailable\n          || (\n            Boolean(previousScreenStep)\n            && previousScreenStep?.allow_back_to !== false\n          );\n        if (hasRemoteBackActions) {\n          if (!canNavigateBackInFlow) {\n            scheduleRemoteBackFallbackClose(\n              flow,\n              flow.currentFlowStep.id,\n              paywallData?.id,\n            );\n          } else {\n            clearRemoteBackFallback();\n          }\n          flow.triggerActions(NamiReservedActions.REMOTE_BACK);\n          return true;\n        }\n        clearRemoteBackFallback();\n        if (!canNavigateBackInFlow) {\n          finishActiveFlow();\n          requestClose();\n          return true;\n        }\n        flow.back();\n        return true;\n      }\n\n      if (paywallData) {\n        requestClose();\n        return true;\n      }\n      return false;\n    });\n\n    return () => subscription.remove();\n  }, [clearRemoteBackFallback, finishActiveFlow, paywallData, requestClose, scheduleRemoteBackFallbackClose]);\n\n  // ─── Paywall action event listener ───────────────────────────────────\n  useEffect(() => {\n    const emitter = NamiEventEmitter.getInstance();\n\n    const handler = (event: NamiPaywallEvent) => {\n      // Forward to catch-all\n      onPaywallEventRef.current?.(event);\n\n      // Route to specific callbacks\n      switch (event.action) {\n        case NamiPaywallAction.CLOSE_PAYWALL:\n          onCloseRef.current?.();\n          break;\n        case NamiPaywallAction.SIGN_IN:\n          onSignInRef.current?.();\n          break;\n        case NamiPaywallAction.DEEPLINK:\n          if (event.deeplinkUrl) {\n            onDeepLinkRef.current?.(event.deeplinkUrl);\n          }\n          break;\n        case NamiPaywallAction.BUY_SKU:\n          onPurchaseRef.current?.(event.sku);\n          break;\n        case NamiPaywallAction.RESTORE_PURCHASES:\n          onRestoreRef.current?.();\n          break;\n      }\n    };\n\n    emitter.addListener(PAYWALL_ACTION_EVENT, handler);\n    return () => {\n      emitter.removeListener(PAYWALL_ACTION_EVENT, handler);\n    };\n  }, [finishActiveFlow]);\n\n  // ─── Flow handlers ───────────────────────────────────────────────────\n  useEffect(() => {\n    NamiFlowManager.registerStepHandoff(\n      (handoffTag: string, handoffData?: Record<string, any>) => {\n        onHandoffRef.current?.(handoffTag, handoffData);\n      },\n    );\n\n    NamiFlowManager.registerEventHandler((eventData: Record<string, any>) => {\n      onFlowEventRef.current?.(eventData);\n    });\n\n    return () => {\n      NamiFlowManager.registerStepHandoff(undefined);\n      NamiFlowManager.registerEventHandler(undefined);\n    };\n  }, []);\n\n  // ─── ExpoUIAdapter listener subscriptions ────────────────────────────\n  useEffect(() => {\n    const unsubPaywall = expoUIAdapter.onPaywallRequested((info: any, context) => {\n      setLaunchRequest({ type: info?.type, value: info?.value ?? '', context });\n    });\n    const unsubReRender = expoUIAdapter.onReRenderRequested(() => {\n      setReloadKey(k => k + 1);\n    });\n    const unsubFlow = expoUIAdapter.onFlowNavigationRequested((paywall, options) => {\n      handleFlowNavigation(paywall, options);\n    });\n\n    return () => {\n      unsubPaywall();\n      unsubReRender();\n      unsubFlow();\n    };\n  }, [handleFlowNavigation]);\n\n  useEffect(() => {\n    return () => {\n      if (pendingNavigationFrameRef.current != null) {\n        cancelAnimationFrame(pendingNavigationFrameRef.current);\n        pendingNavigationFrameRef.current = null;\n      }\n      clearRemoteBackFallback();\n      finishActiveFlow();\n    };\n  }, [clearRemoteBackFallback, finishActiveFlow]);\n\n  // ─── Reset state when launch key changes ─────────────────────────────\n  useEffect(() => {\n    const launchKey = `${resolvedLaunch.type ?? ''}:${resolvedLaunch.value ?? ''}`;\n    if (launchKey !== lastLaunchKeyRef.current) {\n      lastLaunchKeyRef.current = launchKey;\n      setIsClosing(false);\n      setFlowState({ paywalls: [], index: 0, animation: null });\n      finishActiveFlow();\n      setPaywallData(null);\n      setCampaignData(null);\n      setLaunchPreviewPaywall(null);\n      setPendingTransitionPaywall(null);\n      setInitialScreenCommitted(false);\n      lastAppearStepIdRef.current = '';\n    }\n  }, [finishActiveFlow, resolvedLaunch.type, resolvedLaunch.value]);\n\n  // ─── Campaign / paywall resolution ───────────────────────────────────\n  useEffect(() => {\n    let cancelled = false;\n\n    const resolveLaunch = async () => {\n      const value = resolvedLaunch.value;\n      const type = resolvedLaunch.type ?? (url ? 'url' : 'label');\n      const cacheKey = `${type}:${value}`;\n      if (!value) {\n        setLoading(false);\n        setPaywallData(null);\n        setCampaignData(null);\n        setLaunchPreviewPaywall(null);\n        return;\n      }\n\n      const cachedLaunch = launchCacheRef.current.get(cacheKey);\n      if (cachedLaunch) {\n        setLaunchPreviewPaywall(cachedLaunch.launchPreviewPaywall);\n        setPaywallData(cachedLaunch.paywallData);\n        setCampaignData(cachedLaunch.campaignData);\n        setLoading(false);\n      } else {\n        setLoading(true);\n      }\n\n      try {\n        const data = getPaywallDataFromLabel(value, type);\n        const paywall = data?.paywall as IPaywall | undefined;\n        const flowPaywalls = isNamiFlowCampaign(data?.campaign as any)\n          ? (data?.campaign?.flow?.object?.screens ?? [])\n              .map((screenId: string) => getPaywall(screenId))\n              .filter((item): item is IPaywall => item != null)\n          : [];\n        const initialPaywall = paywall ?? flowPaywalls[0];\n        const nextCampaign = data?.campaign ? (data.campaign as NamiCampaign) : ({ value, type } as any);\n        const nextLaunch = {\n          launchPreviewPaywall: initialPaywall ?? null,\n          paywallData: data?.paywall ?? null,\n          campaignData: nextCampaign,\n        };\n\n        if (!cancelled) {\n          setLaunchPreviewPaywall(nextLaunch.launchPreviewPaywall);\n          setInitialScreenCommitted(false);\n          setPaywallData(nextLaunch.paywallData);\n          setCampaignData(nextLaunch.campaignData);\n          setLoading(false);\n          launchCacheRef.current.set(cacheKey, nextLaunch);\n        }\n\n        prewarmPaywallFonts([paywall, ...flowPaywalls]);\n\n        const launchSkuRefIds = collectSkuRefIds(\n          [paywall, ...flowPaywalls].filter((item): item is IPaywall => item != null),\n        );\n        if (launchSkuRefIds.length) void backfillProducts(launchSkuRefIds);\n\n        if (initialPaywall?.fonts) {\n          void prepareAndLoadFontsWithTimeout(initialPaywall.fonts);\n        }\n      } catch (e) {\n        if (!cancelled) {\n          setLoading(false);\n        }\n        logger.warn('[NamiExpo] Failed to resolve paywall launch.', e);\n      }\n    };\n\n    void resolveLaunch();\n\n    return () => {\n      cancelled = true;\n    };\n  }, [resolvedLaunch.value, resolvedLaunch.type, url, reloadKey]);\n\n  // ─── Flow presentation ───────────────────────────────────────────────\n  useEffect(() => {\n    if (!campaignData) return;\n    if (!isNamiFlowCampaign(campaignData as any)) return;\n\n    const screens = campaignData.flow?.object?.screens ?? [];\n    if (screens.length && !hasAllPaywalls(screens)) return;\n\n    if (flowRef.current) return;\n\n    const flow = NamiFlowManager.instance.presentFlow(campaignData as any, {\n      type: resolvedLaunch.type,\n      value: resolvedLaunch.value,\n      context: ctx,\n    } as any, ctx);\n\n    // `presentFlow` returns the class from the `_internal` namespace\n    // (NAM-1217); flowRef.current is typed via the public-barrel re-export\n    // of the same class. Bundled .d.ts files emit each declaration in\n    // isolation, so TypeScript sees them as nominally distinct classes\n    // even though they're the same runtime constructor. Cast to align.\n    flowRef.current = flow as unknown as NamiFlow;\n  }, [campaignData, resolvedLaunch.type, resolvedLaunch.value, ctx, reloadKey]);\n\n  useEffect(() => {\n    const flow = flowRef.current;\n    const activePaywall =\n      flowState.paywalls[flowState.index] ??\n      flowState.paywalls[flowState.paywalls.length - 1];\n\n    if (!flow || !activePaywall || !flow.currentFlowStep) {\n      return;\n    }\n\n    const currentStep = flow.currentFlowStep;\n    if (lastAppearStepIdRef.current === currentStep.id) {\n      return;\n    }\n\n    flow.executeLifecycle(currentStep, NamiReservedActions.APPEAR);\n    lastAppearStepIdRef.current = currentStep.id;\n  }, [flowState.paywalls, flowState.index]);\n\n  useEffect(() => {\n    const attempt = remoteBackFallbackAttemptRef.current;\n    if (!attempt) {\n      return;\n    }\n\n    if (isClosing) {\n      clearRemoteBackFallback();\n      return;\n    }\n\n    const activeFlow = flowRef.current;\n    const activeStepId = activeFlow?.currentFlowStep?.id;\n    const activePaywallId = paywallData?.id;\n    const didNavigateAway =\n      attempt.flow !== activeFlow\n      || attempt.stepId !== activeStepId\n      || attempt.paywallId !== activePaywallId;\n\n    if (didNavigateAway) {\n      clearRemoteBackFallback();\n    }\n  }, [clearRemoteBackFallback, flowState.index, flowState.paywalls, isClosing, paywallData?.id]);\n\n  const hasFlowScreen = flowState.paywalls.length > 0;\n  const launchPlaceholderPaywall =\n    launchPreviewPaywall\n    ?? paywallData\n    ?? flowState.paywalls[flowState.index]\n    ?? flowState.paywalls[0]\n    ?? null;\n  const showLaunchPlaceholder =\n    Boolean(launchPlaceholderPaywall)\n    && (loading || !initialScreenCommitted);\n  const showTransitionPlaceholder =\n    Boolean(pendingTransitionPaywall)\n    && !loading\n    && !isClosing;\n\n  const handleInitialCommitted = useCallback((_paywall: IPaywall, _pageName: string, _formFactor?: string) => {\n    setInitialScreenCommitted(true);\n  }, []);\n\n  if (isClosing) {\n    return <View style={styles.root} />;\n  }\n\n  if (loading || !campaignData || (!isFlowCampaign && !paywallData) || (isFlowCampaign && !hasFlowScreen)) {\n    return <LaunchPlaceholder paywall={launchPlaceholderPaywall} />;\n  }\n\n  return (\n    // Full-bleed root so the paywall background extends under the status bar and\n    // home indicator (edge-to-edge). Safe-area insets are applied only to the\n    // chrome (header/footer) via useSafeAreaInsets, not the whole tree — the\n    // previous core SafeAreaView inset every edge and let the #000 root show\n    // through as letterbox bands. SafeAreaProvider guarantees an inset context\n    // even if the host app didn't mount one (nested providers are supported).\n    <SafeAreaProvider initialMetrics={initialWindowMetrics} style={styles.root}>\n      <StatusBar barStyle=\"light-content\" translucent backgroundColor=\"transparent\" />\n      {isFlowCampaign ? (\n        <FlowRenderer\n          paywalls={flowState.paywalls}\n          currentIndex={flowState.index}\n          animation={flowState.animation ?? undefined}\n          onSettled={handleFlowAnimationSettled}\n          onTransitionVisible={() => setPendingTransitionPaywall(null)}\n          onInitialCommitted={handleInitialCommitted}\n          onClose={onClose}\n          campaign={campaignData}\n          context={ctx}\n          flow={flowRef.current}\n        />\n      ) : (\n        <PaywallProvider paywall={paywallData as IPaywall} context={ctx} campaign={campaignData}>\n            <PaywallScreen\n              paywall={paywallData as IPaywall}\n              onClose={requestClose}\n              onCommitted={handleInitialCommitted}\n              isActive\n            />\n          </PaywallProvider>\n      )}\n      {!isClosing && showLaunchPlaceholder && <LaunchPlaceholder paywall={launchPlaceholderPaywall} overlay />}\n      {showTransitionPlaceholder && <LaunchPlaceholder paywall={pendingTransitionPaywall} overlay />}\n    </SafeAreaProvider>\n  );\n};\n\nconst LaunchPlaceholder: React.FC<{\n  paywall: IPaywall | null;\n  overlay?: boolean;\n}> = ({ paywall, overlay = false }) => {\n  const initialPageName = paywall?.template?.initialState?.currentPage ?? 'page1';\n  const page = paywall?.template?.pages?.find((item: any) => item?.name === initialPageName) ?? null;\n  const backgroundContainer = (page as any)?.backgroundContainer;\n  const backgroundColor =\n    parseColor(backgroundContainer?.fillColor)\n    ?? parseColor(backgroundContainer?.fillColorFallback)\n    ?? '#111118';\n\n  return (\n    <View\n      pointerEvents=\"none\"\n      style={[\n        styles.loading,\n        overlay ? styles.loadingOverlay : null,\n        { backgroundColor },\n      ]}\n    >\n      <ActivityIndicator size=\"large\" color=\"#FFFFFF\" />\n    </View>\n  );\n};\n\nconst getPaywallBackgroundColor = (paywall: IPaywall | null | undefined): string => {\n  const initialPageName = paywall?.template?.initialState?.currentPage ?? 'page1';\n  const page = paywall?.template?.pages?.find((item: any) => item?.name === initialPageName) ?? null;\n  const backgroundContainer = (page as any)?.backgroundContainer;\n\n  return (\n    parseColor(backgroundContainer?.fillColor)\n    ?? parseColor(backgroundContainer?.fillColorFallback)\n    ?? '#111118'\n  );\n};\n\n/** Renders multi-step flow paywalls with transition animations */\nconst FlowRenderer: React.FC<{\n  paywalls: IPaywall[];\n  currentIndex: number;\n  animation?: FlowNavigationOptions;\n  onSettled?: (paywall: IPaywall) => void;\n  onTransitionVisible?: () => void;\n  onInitialCommitted?: (paywall: IPaywall, pageName: string, formFactor?: string) => void;\n  onClose?: () => void;\n  campaign: NamiCampaign;\n  context: NamiPaywallLaunchContext;\n  flow?: NamiFlow;\n}> = ({ paywalls, currentIndex, animation, onSettled, onTransitionVisible, onInitialCommitted, onClose, campaign, context, flow }) => {\n  const { width, height } = Dimensions.get('window');\n  const progress = useRef(new Animated.Value(0)).current;\n  const transitionSequenceRef = useRef(0);\n  const lastTransitionSignatureRef = useRef('');\n  const startedTransitionKeyRef = useRef<string | null>(null);\n  const [completedTransitionKey, setCompletedTransitionKey] = useState<string | null>(null);\n  const transition = animation?.transition ?? 'slide';\n  const direction = animation?.direction === 'backward' ? -1 : 1;\n  const isVertical = transition === 'verticalSlide';\n  const distance = isVertical ? height : width;\n  const shouldAnimatePair =\n    paywalls.length === 2\n    && currentIndex === 1\n    && animation != null;\n  const shouldRenderPair = shouldAnimatePair;\n  const sourcePaywall = shouldRenderPair ? paywalls[0] : undefined;\n  const targetPaywall = shouldRenderPair\n    ? paywalls[1]\n    : (paywalls[currentIndex] ?? paywalls[0]);\n  const targetBackgroundColor = useMemo(\n    () => getPaywallBackgroundColor(targetPaywall),\n    [targetPaywall],\n  );\n  const transitionSignature = shouldAnimatePair\n    ? `${sourcePaywall?.id ?? 'source'}->${targetPaywall?.id ?? 'target'}:${transition}:${direction}`\n    : '';\n\n  if (shouldAnimatePair && lastTransitionSignatureRef.current !== transitionSignature) {\n    lastTransitionSignatureRef.current = transitionSignature;\n    transitionSequenceRef.current += 1;\n  } else if (!shouldAnimatePair) {\n    lastTransitionSignatureRef.current = '';\n  }\n\n  const activeTransitionKey = shouldAnimatePair\n    ? `${transitionSignature}:${transitionSequenceRef.current}`\n    : '';\n  const [committedTarget, setCommittedTarget] = useState<{\n    transitionKey: string | null;\n    paywallId: string | null;\n  }>({\n    transitionKey: null,\n    paywallId: null,\n  });\n  const interactionReady =\n    !shouldAnimatePair\n    || (\n      committedTarget.transitionKey === activeTransitionKey\n      && committedTarget.paywallId === (targetPaywall?.id ?? null)\n    );\n  const transitionReady = shouldAnimatePair && interactionReady;\n  const animationReady =\n    !shouldAnimatePair\n    || transitionReady;\n\n  const handleTargetCommitted = useCallback((paywall: IPaywall, _pageName: string, formFactor?: string) => {\n    if (paywall.id !== targetPaywall?.id) {\n      return;\n    }\n    setCommittedTarget({\n      transitionKey: activeTransitionKey || null,\n      paywallId: paywall.id ?? null,\n    });\n  }, [activeTransitionKey, targetPaywall?.id]);\n\n  const handleVisibleCommitted = useCallback((paywall: IPaywall, pageName: string, formFactor?: string) => {\n    if (currentIndex === 0) {\n      onInitialCommitted?.(paywall, pageName, formFactor);\n    }\n    handleTargetCommitted(paywall, pageName, formFactor);\n  }, [currentIndex, handleTargetCommitted, onInitialCommitted]);\n\n  useLayoutEffect(() => {\n    const activePaywall = paywalls[currentIndex] ?? paywalls[paywalls.length - 1];\n\n    if (!shouldAnimatePair) {\n      startedTransitionKeyRef.current = null;\n      setCompletedTransitionKey(null);\n      progress.stopAnimation();\n      progress.setValue(0);\n      return;\n    }\n\n    if (transition === 'fade' || transition === 'none') {\n      if (startedTransitionKeyRef.current === activeTransitionKey) {\n        return;\n      }\n\n      startedTransitionKeyRef.current = activeTransitionKey;\n      setCompletedTransitionKey(null);\n      progress.stopAnimation();\n      progress.setValue(0);\n      if (activePaywall) {\n        requestAnimationFrame(() => {\n          onSettled?.(activePaywall);\n        });\n      }\n      return;\n    }\n\n    if (!transitionReady) {\n      if (startedTransitionKeyRef.current !== activeTransitionKey) {\n        progress.stopAnimation();\n        progress.setValue(0);\n      }\n      return;\n    }\n\n    if (startedTransitionKeyRef.current === activeTransitionKey) {\n      return;\n    }\n\n    startedTransitionKeyRef.current = activeTransitionKey;\n    setCompletedTransitionKey(null);\n    progress.stopAnimation();\n    progress.setValue(0);\n    Animated.timing(progress, {\n      toValue: 1,\n      duration: 250,\n      useNativeDriver: true,\n    }).start(({ finished }) => {\n      if (finished) {\n        setCompletedTransitionKey(activeTransitionKey);\n      }\n    });\n  }, [\n    activeTransitionKey,\n    animation?.direction,\n    currentIndex,\n    onSettled,\n    paywalls,\n    progress,\n    sourcePaywall?.id,\n    transitionReady,\n    transition,\n  ]);\n\n  useEffect(() => {\n    if (\n      !shouldAnimatePair\n      || !targetPaywall\n      || !interactionReady\n      || completedTransitionKey !== activeTransitionKey\n    ) {\n      return;\n    }\n\n    onSettled?.(targetPaywall);\n  }, [\n    activeTransitionKey,\n    completedTransitionKey,\n    interactionReady,\n    onSettled,\n    shouldAnimatePair,\n    targetPaywall,\n  ]);\n\n  useEffect(() => {\n    if (!shouldAnimatePair || !interactionReady) {\n      return;\n    }\n\n    onTransitionVisible?.();\n  }, [interactionReady, onTransitionVisible, shouldAnimatePair]);\n\n  if (transition === 'fade') {\n    const current = paywalls[currentIndex] ?? paywalls[0];\n    if (!current) return null;\n    return (\n      <View style={styles.flowContainer}>\n        <View style={{ width, height }}>\n          <FocusProvider enabled>\n            <PaywallProvider paywall={current} context={context} campaign={campaign} flow={flow}>\n              <PaywallScreen\n                paywall={current}\n                onClose={onClose}\n                onCommitted={handleVisibleCommitted}\n                isActive\n              />\n            </PaywallProvider>\n          </FocusProvider>\n        </View>\n      </View>\n    );\n  }\n\n  const renderedPaywalls = shouldRenderPair\n    ? [\n        { paywall: sourcePaywall, role: 'source' as const, key: 0 },\n        { paywall: targetPaywall, role: 'target' as const, key: 1 },\n      ]\n    : [{ paywall: paywalls[currentIndex] ?? paywalls[0], role: 'target' as const, key: currentIndex }];\n\n  return (\n    <View style={styles.flowContainer}>\n      {renderedPaywalls.map(({ paywall: pw, role, key }) => {\n        if (!pw) {\n          return null;\n        }\n\n        const animatedStyle = role === 'target' && shouldAnimatePair\n          ? { opacity: 0 }\n          : null;\n\n        return (\n          <Animated.View\n            key={pw.id ?? key}\n            pointerEvents={role === 'target' && !shouldAnimatePair && interactionReady ? 'auto' : 'none'}\n            style={[\n              styles.flowScreen,\n              {\n                width,\n                height,\n                zIndex: role === 'target' ? 2 : 1,\n                elevation: role === 'target' ? 2 : 1,\n              },\n              animatedStyle ?? null,\n            ]}\n          >\n            <FocusProvider enabled={role === 'target' && !shouldAnimatePair && interactionReady}>\n              <PaywallProvider\n                paywall={pw}\n                context={context}\n                campaign={campaign}\n                flow={flow}\n              >\n                <PaywallScreen\n                  paywall={pw}\n                  onClose={onClose}\n                  onCommitted={role === 'target' ? handleVisibleCommitted : undefined}\n                  isActive={role === 'target' && !shouldAnimatePair && interactionReady}\n                />\n              </PaywallProvider>\n            </FocusProvider>\n          </Animated.View>\n        );\n      })}\n      {shouldAnimatePair && !interactionReady && (\n        <LaunchPlaceholder paywall={targetPaywall ?? null} overlay />\n      )}\n      {transitionReady && targetPaywall && (\n        <Animated.View\n          pointerEvents=\"none\"\n          style={[\n            styles.flowScreen,\n            {\n              width,\n              height,\n              zIndex: 3,\n              elevation: 3,\n              backgroundColor: targetBackgroundColor,\n            },\n            isVertical\n              ? {\n                  transform: [{\n                    translateY: progress.interpolate({\n                      inputRange: [0, 1],\n                      outputRange: [height * direction, 0],\n                    }),\n                  }],\n                }\n              : {\n                  transform: [{\n                    translateX: progress.interpolate({\n                      inputRange: [0, 1],\n                      outputRange: [width * direction, 0],\n                    }),\n                  }],\n                },\n          ]}\n        />\n      )}\n    </View>\n  );\n};\n\nconst styles = StyleSheet.create({\n  root: { flex: 1, backgroundColor: '#000' },\n  loading: {\n    flex: 1,\n    backgroundColor: '#111118',\n    alignItems: 'center',\n    justifyContent: 'center',\n  },\n  loadingOverlay: {\n    ...StyleSheet.absoluteFillObject,\n    zIndex: 50,\n  },\n  flowContainer: { flex: 1, overflow: 'hidden' },\n  flowScreen: { position: 'absolute', top: 0, left: 0 },\n});\n","const runtimeGlobals = globalThis as Record<string, unknown>;\nconst sdkEnvKey = 'NAMI_SDK' + '_ENV';\n\nif (typeof runtimeGlobals[sdkEnvKey] !== 'string' || runtimeGlobals[sdkEnvKey] === '') {\n  const devFlag = typeof __DEV__ === 'boolean' ? __DEV__ : false;\n  runtimeGlobals[sdkEnvKey] = devFlag ? 'development' : 'production';\n}\n\n// ─── Side-effect: register adapters ──────────────────────────────────\nimport './adapters';\n\n// ─── Nami wrapper ────────────────────────────────────────────────────\nexport { Nami } from './nami';\n\n// ─── Primary component ──────────────────────────────────────────────\nexport { NamiView } from './components/NamiView';\n\n// ─── Managers (re-exported from core) ────────────────────────────────\n// NamiProfileManager intentionally omitted — its source class has no\n// public statics; the public surface lives entirely on NamiCustomerManager.\n// Internal callers needing the class import it from the\n// `_internal` namespace on `@namiml/sdk-core` (NAM-1217). See NAM-1207.\nexport {\n  NamiCampaignManager,\n  NamiCustomerManager,\n  NamiPaywallManager,\n  NamiEntitlementManager,\n  NamiFlowManager,\n  NamiPurchaseManager,\n} from '@namiml/sdk-core';\n\n// ─── Variant D handoff-outcome vocabularies (NAM-1562) ──────────────\n// Const objects (value AND type), so they re-export as values — `export type`\n// would drop the runtime objects handoff handlers read (NamiHandoffTag.SignIn,\n// NamiPermissionOutcome.Push). The engine + routing live in @namiml/sdk-core\n// (NAM-1557); Expo consumes the v2 `registerStepHandoff` on NamiFlowManager\n// (already exported above) and reports outcomes via `complete(outcome)`.\nexport { NamiHandoffTag, NamiPermissionOutcome } from '@namiml/sdk-core';\n\n// ─── Types (re-exported from core) ──────────────────────────────────\nexport type {\n  NamiConfiguration,\n  NamiCampaign,\n  NamiSKU,\n  NamiSKUType,\n  NamiEntitlement,\n  NamiPurchase,\n  NamiPurchaseSuccess,\n  NamiPaywallEvent,\n  NamiPaywallAction,\n  NamiPaywallLaunchContext,\n  NamiLogLevel,\n  NamiLanguageCodes,\n  CustomerJourneyState,\n  NamiProductDetails,\n  NamiFlow,\n  // Text Input component (NAM-1148) — typing parity with the native/Web ports.\n  TTextInputComponent,\n  TTextInputType,\n  FormFieldValidator,\n  IPurchaseAdapter,\n  PurchaseContext,\n  PurchaseResult,\n  // Variant D handoff outcomes (NAM-1562) — handler + typed-outcome contracts.\n  NamiFlowHandoffStepHandler,\n  NamiFlowEventHandler,\n  NamiHandoffComplete,\n  NamiHandoffOutcome,\n  NamiLoginSuccess,\n  NamiHandoffAttributeValue,\n  NamiUserDataEnvelope,\n} from '@namiml/sdk-core';\n\n// ─── Adapters (advanced use) ────────────────────────────────────────\nexport {\n  ExpoStorageAdapter,\n  ExpoDeviceAdapter,\n  ExpoUIAdapter,\n  ExpoPurchaseAdapter,\n} from './adapters';\n\n// ─── Context (advanced use) ─────────────────────────────────────────\nexport { PaywallProvider, usePaywallContext } from './context/PaywallContext';\n\n// ─── Internal components (for customization) ────────────────────────\nexport { PaywallScreen } from './components/PaywallScreen';\nexport { TemplateRenderer } from './components/TemplateRenderer';\n"],"names":["CoreNami","resetProductStore","jsxRuntimeModule","require$$0","require$$1","_jsx","styles","_Fragment","React","_jsxs","backfillProducts"],"mappings":"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","x_google_ignoreList":[7,8,9]}