{"version":3,"file":"CreditCardUtils.mjs","names":["Payment","visa","mastercard","amex","discover","diners","unionpay","jcb","clearNumber","value","replace","formatCreditCardNumber","issuer","fns","cardType","clearValue","nextValue","slice","trim","formatCVC","prevValue","allValues","number","maxLength","formatExpirationDate","length","formatBankAccountNumber","formatRoutingNumber","CreditCardBrandIconUrls","Record","dinersclub","getCreditCardMethodIconUrl","creditCardNumber","getCreditCardMethodIcon"],"sources":["../../../../src/utilities/form/paymentForm/CreditCardUtils.ts"],"sourcesContent":["import Payment from 'payment';\nimport visa from '../../../assets/paymentIcons/visa.svg';\nimport mastercard from '../../../assets/paymentIcons/mastercard.svg';\nimport amex from '../../../assets/paymentIcons/amex.svg';\nimport discover from '../../../assets/paymentIcons/discover.svg';\nimport diners from '../../../assets/paymentIcons/diners.svg';\nimport unionpay from '../../../assets/paymentIcons/unionpay.svg';\nimport jcb from '../../../assets/paymentIcons/jcb.svg';\n\n/**\n * clearNumber\n *\n * @param {string} [value='']\n * @return {*}\n */\nfunction clearNumber(value = '') {\n  return value.replace(/\\D+/g, '');\n}\n\n/**\n * formatCreditCardNumber - Format credit card number\n *\n * @export\n * @param {*} value\n * @return {*}\n */\nexport function formatCreditCardNumber(value) {\n  if (!value) {\n    return value;\n  }\n\n  const issuer = Payment.fns.cardType(value);\n  const clearValue = clearNumber(value);\n  let nextValue;\n\n  switch (issuer) {\n    case 'amex':\n      nextValue = `${clearValue.slice(0, 4)} ${clearValue.slice(\n        4,\n        10\n      )} ${clearValue.slice(10, 15)}`;\n      break;\n    case 'dinersclub':\n      nextValue = `${clearValue.slice(0, 4)} ${clearValue.slice(\n        4,\n        10\n      )} ${clearValue.slice(10, 14)}`;\n      break;\n    default:\n      nextValue = `${clearValue.slice(0, 4)} ${clearValue.slice(\n        4,\n        8\n      )} ${clearValue.slice(8, 12)} ${clearValue.slice(12, 19)}`;\n      break;\n  }\n\n  return nextValue.trim();\n}\n\n/**\n * formatCVC - formats the CVC value\n *\n * @export\n * @param {*} value\n * @param {*} prevValue\n * @param {*} [allValues={}]\n * @return {*}\n */\nexport function formatCVC(value, prevValue, allValues: { number?: string } = {}) {\n  const clearValue = clearNumber(value);\n  let maxLength = 4;\n\n  if (allValues?.number) {\n    const issuer = Payment.fns.cardType(allValues?.number);\n    maxLength = issuer === 'amex' ? 4 : 3;\n  }\n\n  return clearValue.slice(0, maxLength);\n}\n/**\n * formatExpirationDate - format expiration date\n * @export\n * @param {*} value\n * @return {*}\n */\nexport function formatExpirationDate(value) {\n  const clearValue = clearNumber(value);\n\n  // Exactly 6 digits is MM + a 4-digit year (\"07/2027\" from paste or browser\n  // autofill): keep the year's last two digits, not its first two.\n  if (clearValue.length === 6) {\n    return `${clearValue.slice(0, 2)}/${clearValue.slice(4, 6)}`;\n  }\n\n  if (clearValue.length >= 3) {\n    return `${clearValue.slice(0, 2)}/${clearValue.slice(2, 4)}`;\n  }\n\n  return clearValue;\n}\n\n/**\n * formatBankAccountNumber - Format bank account number\n * @export\n * @param {*} value\n * @return {*}\n */\nexport function formatBankAccountNumber(value) {\n  const clearValue = clearNumber(value);\n  return `${clearValue.slice(0, 4)} ${clearValue.slice(\n    4,\n    8\n  )} ${clearValue.slice(8, 12)} ${clearValue.slice(12, 16)} ${clearValue.slice(\n    16,\n    20\n  )}`;\n}\n\n/**\n * formatRoutingNumber - format routing number\n * @export\n * @param {*} value\n * @return {*}\n */\nexport function formatRoutingNumber(value) {\n  const clearValue = clearNumber(value);\n  return `${clearValue.slice(0, 3)} ${clearValue.slice(3, 9)}`;\n}\n\n// Map of payment brand -> icon URL. Render with <SvgIcon src={...} /> in components.\nexport const CreditCardBrandIconUrls: Record<string, string> = {\n  visa,\n  mastercard,\n  amex,\n  discover,\n  jcb,\n  dinersclub: diners,\n  unionpay,\n};\n\nexport const getCreditCardMethodIconUrl = (creditCardNumber: string): string | null => {\n  const issuer = Payment.fns.cardType(creditCardNumber);\n  return CreditCardBrandIconUrls[issuer] ?? null;\n};\n\n// Back-compat alias (returns URL); prefer getCreditCardMethodIconUrl\nexport const getCreditCardMethodIcon = getCreditCardMethodIconUrl;\n"],"mappings":";;;;;;;;;;;;;;;AAeA,SAASQ,YAAYC,QAAQ,IAAI;AAC/B,QAAOA,MAAMC,QAAQ,QAAQ,GAAG;;;;;;;;;AAUlC,SAAgBC,uBAAuBF,OAAO;AAC5C,KAAI,CAACA,MACH,QAAOA;CAGT,MAAMG,SAASZ,QAAQa,IAAIC,SAASL,MAAM;CAC1C,MAAMM,aAAaP,YAAYC,MAAM;CACrC,IAAIO;AAEJ,SAAQJ,QAAR;EACE,KAAK;AACHI,eAAY,GAAGD,WAAWE,MAAM,GAAG,EAAE,CAAA,GAAIF,WAAWE,MAClD,GACA,GACD,CAAA,GAAIF,WAAWE,MAAM,IAAI,GAAG;AAC7B;EACF,KAAK;AACHD,eAAY,GAAGD,WAAWE,MAAM,GAAG,EAAE,CAAA,GAAIF,WAAWE,MAClD,GACA,GACD,CAAA,GAAIF,WAAWE,MAAM,IAAI,GAAG;AAC7B;EACF;AACED,eAAY,GAAGD,WAAWE,MAAM,GAAG,EAAE,CAAA,GAAIF,WAAWE,MAClD,GACA,EACD,CAAA,GAAIF,WAAWE,MAAM,GAAG,GAAG,CAAA,GAAIF,WAAWE,MAAM,IAAI,GAAG;AACxD;;AAGJ,QAAOD,UAAUE,MAAM;;;;;;;;;;;AAYzB,SAAgBC,UAAUV,OAAOW,WAAWC,YAAiC,EAAE,EAAE;CAC/E,MAAMN,aAAaP,YAAYC,MAAM;CACrC,IAAIc,YAAY;AAEhB,KAAIF,WAAWC,OAEbC,aADevB,QAAQa,IAAIC,SAASO,WAAWC,OAAO,KAC/B,SAAS,IAAI;AAGtC,QAAOP,WAAWE,MAAM,GAAGM,UAAU;;;;;;;;AAQvC,SAAgBC,qBAAqBf,OAAO;CAC1C,MAAMM,aAAaP,YAAYC,MAAM;AAIrC,KAAIM,WAAWU,WAAW,EACxB,QAAO,GAAGV,WAAWE,MAAM,GAAG,EAAE,CAAA,GAAIF,WAAWE,MAAM,GAAG,EAAE;AAG5D,KAAIF,WAAWU,UAAU,EACvB,QAAO,GAAGV,WAAWE,MAAM,GAAG,EAAE,CAAA,GAAIF,WAAWE,MAAM,GAAG,EAAE;AAG5D,QAAOF;;;;;;;;AAST,SAAgBW,wBAAwBjB,OAAO;CAC7C,MAAMM,aAAaP,YAAYC,MAAM;AACrC,QAAO,GAAGM,WAAWE,MAAM,GAAG,EAAE,CAAA,GAAIF,WAAWE,MAC7C,GACA,EACD,CAAA,GAAIF,WAAWE,MAAM,GAAG,GAAG,CAAA,GAAIF,WAAWE,MAAM,IAAI,GAAG,CAAA,GAAIF,WAAWE,MACrE,IACA,GACD;;;;;;;;AASH,SAAgBU,oBAAoBlB,OAAO;CACzC,MAAMM,aAAaP,YAAYC,MAAM;AACrC,QAAO,GAAGM,WAAWE,MAAM,GAAG,EAAE,CAAA,GAAIF,WAAWE,MAAM,GAAG,EAAE;;AAI5D,MAAaW,0BAAkD;CAC7D3B;CACAC;CACAC;CACAC;CACAG;CACAuB,YAAYzB;CACZC;CACD;AAED,MAAayB,8BAA8BC,qBAA4C;AAErF,QAAOJ,wBADQ5B,QAAQa,IAAIC,SAASkB,iBAAiB,KACX;;AAI5C,MAAaC,0BAA0BF"}