{"version":3,"sources":["../src/Price.tsx"],"sourcesContent":["'use client';\n\nimport type { ReactElement } from 'react';\nimport { useLocale } from './useLocale';\n\nexport interface PriceProps {\n  /** Indonesian Rupiah amount, integer rupiah (no decimals — IDR has\n   *  no minor unit). E.g. 99000 for Rp 99,000. */\n  idr: number;\n  /** USD amount in cents, integer. E.g. 700 for $7.00. */\n  usdCents: number;\n  /** Optional suffix appended after the amount. Defaults to nothing.\n   *  Common values: '/mo', '/year', or just the amount alone for total\n   *  prices like a one-time topup. */\n  per?: string;\n  /** Locale to format under. Defaults to whatever useLocale() resolves\n   *  for this visitor. Pass an explicit override only for the IDR/USD\n   *  toggle preview. */\n  forceCurrency?: 'IDR' | 'USD';\n  className?: string;\n}\n\nfunction fmt(locale: string, currency: string, digits: number) {\n  return new Intl.NumberFormat(locale, {\n    style: 'currency',\n    currency,\n    minimumFractionDigits: digits,\n    maximumFractionDigits: digits,\n  });\n}\n\n// Auto-pick precision based on amount magnitude. Tiny per-unit rates\n// (Rp 4.10/GB·hour, $0.000256/GB·hour) get enough digits to stay\n// meaningful instead of collapsing to \"Rp 4\" or \"$0\".\nfunction formatIdr(idr: number): string {\n  if (idr === 0) return fmt('id-ID', 'IDR', 0).format(0);\n  // Fractional rupiah on rate cards — show 2 decimals.\n  if (Math.abs(idr) < 100 && idr % 1 !== 0) return fmt('id-ID', 'IDR', 2).format(idr);\n  return fmt('id-ID', 'IDR', 0).format(idr);\n}\n\nfunction formatUsd(cents: number): string {\n  const dollars = cents / 100;\n  if (dollars === 0) return fmt('en-US', 'USD', 0).format(0);\n  // Micro-amounts (< 1¢) like storage per-GB-hour need 4 decimals.\n  if (Math.abs(dollars) < 0.01) return fmt('en-US', 'USD', 4).format(dollars);\n  // Sub-dollar or fractional-dollar amounts: 2 decimals.\n  if (Math.abs(dollars) < 1 || cents % 100 !== 0) return fmt('en-US', 'USD', 2).format(dollars);\n  // Whole-dollar amounts: clean integer.\n  return fmt('en-US', 'USD', 0).format(dollars);\n}\n\n/**\n * Locale-aware price display.\n *\n * Renders the IDR amount for Indonesian visitors, the USD amount for\n * everyone else. Reads its currency from useLocale() unless explicitly\n * overridden via `forceCurrency`.\n *\n * Server-render shows IDR (matches the Indonesian-first default). On\n * the client, useLocale() may flip the rendering to USD for non-ID\n * visitors after the geo probe resolves — that's a one-time swap per\n * session, then cached.\n *\n * Example:\n *   <Price idr={99000} usdCents={700} per=\"/mo\" />\n *     → ID visitor:        \"Rp 99.000/mo\"\n *     → non-ID visitor:    \"$7/mo\"\n */\nexport function Price({\n  idr,\n  usdCents,\n  per = '',\n  forceCurrency,\n  className,\n}: PriceProps): ReactElement {\n  const { currency } = useLocale();\n  const active = forceCurrency ?? currency;\n  const text = active === 'USD' ? formatUsd(usdCents) : formatIdr(idr);\n  return (\n    <span className={className}>\n      {text}\n      {per}\n    </span>\n  );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAgFI;AA7EJ,uBAA0B;AAmB1B,SAAS,IAAI,QAAgB,UAAkB,QAAgB;AAC7D,SAAO,IAAI,KAAK,aAAa,QAAQ;AAAA,IACnC,OAAO;AAAA,IACP;AAAA,IACA,uBAAuB;AAAA,IACvB,uBAAuB;AAAA,EACzB,CAAC;AACH;AAKA,SAAS,UAAU,KAAqB;AACtC,MAAI,QAAQ,EAAG,QAAO,IAAI,SAAS,OAAO,CAAC,EAAE,OAAO,CAAC;AAErD,MAAI,KAAK,IAAI,GAAG,IAAI,OAAO,MAAM,MAAM,EAAG,QAAO,IAAI,SAAS,OAAO,CAAC,EAAE,OAAO,GAAG;AAClF,SAAO,IAAI,SAAS,OAAO,CAAC,EAAE,OAAO,GAAG;AAC1C;AAEA,SAAS,UAAU,OAAuB;AACxC,QAAM,UAAU,QAAQ;AACxB,MAAI,YAAY,EAAG,QAAO,IAAI,SAAS,OAAO,CAAC,EAAE,OAAO,CAAC;AAEzD,MAAI,KAAK,IAAI,OAAO,IAAI,KAAM,QAAO,IAAI,SAAS,OAAO,CAAC,EAAE,OAAO,OAAO;AAE1E,MAAI,KAAK,IAAI,OAAO,IAAI,KAAK,QAAQ,QAAQ,EAAG,QAAO,IAAI,SAAS,OAAO,CAAC,EAAE,OAAO,OAAO;AAE5F,SAAO,IAAI,SAAS,OAAO,CAAC,EAAE,OAAO,OAAO;AAC9C;AAmBO,SAAS,MAAM;AAAA,EACpB;AAAA,EACA;AAAA,EACA,MAAM;AAAA,EACN;AAAA,EACA;AACF,GAA6B;AAC3B,QAAM,EAAE,SAAS,QAAI,4BAAU;AAC/B,QAAM,SAAS,iBAAiB;AAChC,QAAM,OAAO,WAAW,QAAQ,UAAU,QAAQ,IAAI,UAAU,GAAG;AACnE,SACE,6CAAC,UAAK,WACH;AAAA;AAAA,IACA;AAAA,KACH;AAEJ;","names":[]}