{"version":3,"sources":["../src/wallet/types.ts","../src/wallet/LegionWallet.tsx"],"names":["LegionWallet"],"mappings":"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","file":"wallet.mjs","sourcesContent":["/**\n * Theming props for the Wallet Widget.\n * These map to CSS custom properties used internally.\n */\nexport interface WalletThemingProps {\n  /** Container background color */\n  walletBackgroundColor?: string;\n  /** Primary text color */\n  walletTextColor?: string;\n  /** Secondary text color */\n  walletSecondaryTextColor?: string;\n  /** Border color */\n  walletBorderColor?: string;\n  /** Container border radius */\n  walletBorderRadius?: string;\n  /** Container padding */\n  walletPadding?: string;\n  /** Container box shadow */\n  walletShadow?: string;\n  /** Primary accent color */\n  walletPrimaryColor?: string;\n  /** Primary hover color */\n  walletPrimaryHover?: string;\n  /** Tab background */\n  walletTabBackground?: string;\n  /** Active tab background */\n  walletTabActiveBackground?: string;\n  /** Active tab text color */\n  walletTabActiveColor?: string;\n  /** Tab border color */\n  walletTabBorderColor?: string;\n  /** Tab border radius */\n  walletTabRadius?: string;\n  /** Coupon gradient start */\n  walletCouponBgStart?: string;\n  /** Coupon gradient end */\n  walletCouponBgEnd?: string;\n  /** Coupon border color */\n  walletCouponBorderColor?: string;\n  /** Coupon border radius */\n  walletCouponRadius?: string;\n  /** Coupon box shadow */\n  walletCouponShadow?: string;\n  /** Coupon hover shadow */\n  walletCouponHoverShadow?: string;\n  /** Voucher gradient start */\n  walletVoucherBgStart?: string;\n  /** Voucher gradient mid */\n  walletVoucherBgMid?: string;\n  /** Voucher gradient end */\n  walletVoucherBgEnd?: string;\n  /** Voucher accent gradient start */\n  walletVoucherAccentStart?: string;\n  /** Voucher accent gradient mid */\n  walletVoucherAccentMid?: string;\n  /** Voucher accent gradient end */\n  walletVoucherAccentEnd?: string;\n  /** Voucher border color */\n  walletVoucherBorderColor?: string;\n  /** Voucher border radius */\n  walletVoucherRadius?: string;\n  /** Voucher box shadow */\n  walletVoucherShadow?: string;\n  /** Font family */\n  walletFontFamily?: string;\n  /** Title font size */\n  walletTitleSize?: string;\n  /** Title font weight */\n  walletTitleWeight?: string;\n  /** Body text font size */\n  walletBodySize?: string;\n  /** Meta text font size */\n  walletMetaSize?: string;\n  /** Active badge background */\n  walletBadgeActiveBg?: string;\n  /** Active badge text color */\n  walletBadgeActiveColor?: string;\n  /** Expired badge background */\n  walletBadgeExpiredBg?: string;\n  /** Expired badge text color */\n  walletBadgeExpiredColor?: string;\n  /** Redeemed badge background */\n  walletBadgeRedeemedBg?: string;\n  /** Redeemed badge text color */\n  walletBadgeRedeemedColor?: string;\n  /** Button border radius */\n  walletButtonRadius?: string;\n  /** Button padding */\n  walletButtonPadding?: string;\n  /** Progress bar background */\n  walletProgressBg?: string;\n  /** Progress bar color */\n  walletProgressColor?: string;\n  /** Progress bar warning color */\n  walletProgressWarningColor?: string;\n  /** Transition duration */\n  walletTransitionDuration?: string;\n  /** Hover scale factor */\n  walletHoverScale?: string;\n  /** Empty state icon color */\n  walletEmptyIconColor?: string;\n  /** Empty state text color */\n  walletEmptyTextColor?: string;\n}\n\n/**\n * Core configuration props for the Wallet Widget.\n */\nexport interface WalletWidgetProps extends WalletThemingProps {\n  /** Base URL of the Legion application (required) */\n  baseUrl: string;\n  /** User ID (required) */\n  userId: string;\n  /** API key for authentication */\n  apiKey?: string;\n  /** Theme preset. Default: \"light\" */\n  theme?: \"light\" | \"dark\";\n  /** Show wallet balance. Default: true */\n  showBalance?: boolean;\n  /** Show transaction history. Default: true */\n  showHistory?: boolean;\n  /** Widget height CSS value. Default: \"500px\" */\n  height?: string;\n  /** Additional CSS class name for the container */\n  className?: string;\n  /** Additional inline styles for the container */\n  style?: React.CSSProperties;\n  /** Callback when the widget iframe has loaded */\n  onLoad?: (detail: { widget: string; theme: string }) => void;\n  /** Callback when the widget iframe fails to load */\n  onError?: (message: string) => void;\n}\n\n/**\n * Mapping from camelCase theming prop names to the kebab-case query\n * parameter names used by the wallet widget iframe URL.\n */\nexport const WALLET_THEMING_PROP_TO_PARAM: Record<\n  keyof WalletThemingProps,\n  string\n> = {\n  walletBackgroundColor: \"wallet-background-color\",\n  walletTextColor: \"wallet-text-color\",\n  walletSecondaryTextColor: \"wallet-secondary-text-color\",\n  walletBorderColor: \"wallet-border-color\",\n  walletBorderRadius: \"wallet-border-radius\",\n  walletPadding: \"wallet-padding\",\n  walletShadow: \"wallet-shadow\",\n  walletPrimaryColor: \"wallet-primary-color\",\n  walletPrimaryHover: \"wallet-primary-hover\",\n  walletTabBackground: \"wallet-tab-background\",\n  walletTabActiveBackground: \"wallet-tab-active-background\",\n  walletTabActiveColor: \"wallet-tab-active-color\",\n  walletTabBorderColor: \"wallet-tab-border-color\",\n  walletTabRadius: \"wallet-tab-radius\",\n  walletCouponBgStart: \"wallet-coupon-bg-start\",\n  walletCouponBgEnd: \"wallet-coupon-bg-end\",\n  walletCouponBorderColor: \"wallet-coupon-border-color\",\n  walletCouponRadius: \"wallet-coupon-radius\",\n  walletCouponShadow: \"wallet-coupon-shadow\",\n  walletCouponHoverShadow: \"wallet-coupon-hover-shadow\",\n  walletVoucherBgStart: \"wallet-voucher-bg-start\",\n  walletVoucherBgMid: \"wallet-voucher-bg-mid\",\n  walletVoucherBgEnd: \"wallet-voucher-bg-end\",\n  walletVoucherAccentStart: \"wallet-voucher-accent-start\",\n  walletVoucherAccentMid: \"wallet-voucher-accent-mid\",\n  walletVoucherAccentEnd: \"wallet-voucher-accent-end\",\n  walletVoucherBorderColor: \"wallet-voucher-border-color\",\n  walletVoucherRadius: \"wallet-voucher-radius\",\n  walletVoucherShadow: \"wallet-voucher-shadow\",\n  walletFontFamily: \"wallet-font-family\",\n  walletTitleSize: \"wallet-title-size\",\n  walletTitleWeight: \"wallet-title-weight\",\n  walletBodySize: \"wallet-body-size\",\n  walletMetaSize: \"wallet-meta-size\",\n  walletBadgeActiveBg: \"wallet-badge-active-bg\",\n  walletBadgeActiveColor: \"wallet-badge-active-color\",\n  walletBadgeExpiredBg: \"wallet-badge-expired-bg\",\n  walletBadgeExpiredColor: \"wallet-badge-expired-color\",\n  walletBadgeRedeemedBg: \"wallet-badge-redeemed-bg\",\n  walletBadgeRedeemedColor: \"wallet-badge-redeemed-color\",\n  walletButtonRadius: \"wallet-button-radius\",\n  walletButtonPadding: \"wallet-button-padding\",\n  walletProgressBg: \"wallet-progress-bg\",\n  walletProgressColor: \"wallet-progress-color\",\n  walletProgressWarningColor: \"wallet-progress-warning-color\",\n  walletTransitionDuration: \"wallet-transition-duration\",\n  walletHoverScale: \"wallet-hover-scale\",\n  walletEmptyIconColor: \"wallet-empty-icon-color\",\n  walletEmptyTextColor: \"wallet-empty-text-color\",\n};\n\n","import React, {\n  useRef,\n  useCallback,\n  useMemo,\n  forwardRef,\n  useImperativeHandle,\n} from \"react\";\nimport {\n  type WalletWidgetProps,\n  type WalletThemingProps,\n  WALLET_THEMING_PROP_TO_PARAM,\n} from \"./types\";\n\n/**\n * Ref handle exposed by LegionWallet for imperative control.\n */\nexport interface LegionWalletHandle {\n  /** Reload the widget iframe */\n  refresh: () => void;\n}\n\n/**\n * Build the iframe src URL from widget props.\n */\nexport function buildWalletWidgetUrl(props: WalletWidgetProps): string {\n  const {\n    baseUrl,\n    userId,\n    apiKey,\n    theme = \"light\",\n    showBalance = true,\n    showHistory = true,\n  } = props;\n\n  const url = new URL(\"/widget/wallet\", baseUrl);\n\n  url.searchParams.set(\"userId\", userId);\n  url.searchParams.set(\"theme\", theme);\n  url.searchParams.set(\"showBalance\", String(showBalance));\n  url.searchParams.set(\"showHistory\", String(showHistory));\n\n  if (apiKey) {\n    url.searchParams.set(\"apiKey\", apiKey);\n  }\n\n  // Append theming params\n  const themingKeys = Object.keys(WALLET_THEMING_PROP_TO_PARAM) as Array<\n    keyof WalletThemingProps\n  >;\n  for (const key of themingKeys) {\n    const value = props[key];\n    if (value !== undefined && value !== null && String(value).length > 0) {\n      url.searchParams.set(WALLET_THEMING_PROP_TO_PARAM[key], String(value));\n    }\n  }\n\n  return url.toString();\n}\n\n/**\n * LegionWallet – a React component that embeds the Legion Wallet widget\n * via an iframe.\n *\n * @example\n * ```tsx\n * import { LegionWallet } from '@legionhandtech/lht-react-widgets';\n *\n * function App() {\n *   return (\n *     <LegionWallet\n *       baseUrl=\"https://your-legion-domain.com\"\n *       userId=\"user-123\"\n *       apiKey=\"your-api-key\"\n *       theme=\"light\"\n *     />\n *   );\n * }\n * ```\n */\nexport const LegionWallet = forwardRef<LegionWalletHandle, WalletWidgetProps>(\n  function LegionWallet(props, ref) {\n    const {\n      theme = \"light\",\n      userId,\n      apiKey,\n      showBalance,\n      showHistory,\n      height = \"500px\",\n      className,\n      style,\n      onLoad,\n      onError,\n      baseUrl,\n      ...rest\n    } = props;\n\n    const iframeRef = useRef<HTMLIFrameElement>(null);\n\n    useImperativeHandle(\n      ref,\n      () => ({\n        refresh: () => {\n          const iframe = iframeRef.current;\n          if (iframe?.contentWindow) {\n            iframe.contentWindow.location.reload();\n          }\n        },\n      }),\n      []\n    );\n\n    const src = useMemo(\n      () => buildWalletWidgetUrl(props),\n      [\n        baseUrl,\n        userId,\n        apiKey,\n        theme,\n        showBalance,\n        showHistory,\n        ...Object.keys(WALLET_THEMING_PROP_TO_PARAM).map(\n          (k) => rest[k as keyof typeof rest]\n        ),\n      ]\n    );\n\n    const handleLoad = useCallback(() => {\n      // Send API key via postMessage\n      if (apiKey && iframeRef.current?.contentWindow) {\n        iframeRef.current.contentWindow.postMessage(\n          { type: \"AUTH_TOKEN\", token: apiKey },\n          baseUrl\n        );\n      }\n      onLoad?.({ widget: \"wallet\", theme });\n    }, [apiKey, baseUrl, theme, onLoad]);\n\n    const handleError = useCallback(() => {\n      onError?.(\"Failed to load wallet widget\");\n    }, [onError]);\n\n    const containerStyle: React.CSSProperties = {\n      display: \"block\",\n      width: \"100%\",\n      height,\n      ...style,\n    };\n\n    const iframeStyle: React.CSSProperties = {\n      border: \"none\",\n      borderRadius: \"8px\",\n      boxShadow: \"0 2px 10px rgba(0, 0, 0, 0.1)\",\n      width: \"100%\",\n      height: \"100%\",\n    };\n\n    return (\n      <div className={className} style={containerStyle}>\n        <iframe\n          ref={iframeRef}\n          src={src}\n          title=\"Wallet Widget\"\n          width=\"100%\"\n          height=\"100%\"\n          loading=\"lazy\"\n          style={iframeStyle}\n          onLoad={handleLoad}\n          onError={handleError}\n        />\n      </div>\n    );\n  }\n);\n\n"]}