{"version":3,"file":"normalize-pasted-value.mjs","names":[],"sources":["../../../../src/components/NumberInput/normalize-pasted-value/normalize-pasted-value.ts"],"sourcesContent":["export interface NormalizePastedValueOptions {\n  decimalSeparator: string;\n  thousandSeparator?: string;\n  allowedDecimalSeparators: string[];\n  thousandsGroupStyle?: 'thousand' | 'lakh' | 'wan' | 'none';\n}\n\nfunction countTrailingDigits(value: string, from: number) {\n  let count = 0;\n  while (from + count < value.length && /\\d/.test(value[from + count])) {\n    count += 1;\n  }\n  return count;\n}\n\nexport function normalizePastedValue(\n  value: string,\n  {\n    decimalSeparator,\n    thousandSeparator,\n    allowedDecimalSeparators,\n    thousandsGroupStyle,\n  }: NormalizePastedValueOptions\n) {\n  const candidates = new Set(\n    [...allowedDecimalSeparators, decimalSeparator].filter((s) => s.length === 1)\n  );\n  const chars = value.split('');\n  const occurrences = chars.reduce<number[]>((acc, char, index) => {\n    if (candidates.has(char)) {\n      acc.push(index);\n    }\n    return acc;\n  }, []);\n\n  if (occurrences.length === 0) {\n    return value;\n  }\n\n  const lastIndex = occurrences[occurrences.length - 1];\n  const lastChar = chars[lastIndex];\n  const lastCharCount = occurrences.filter((index) => chars[index] === lastChar).length;\n  const lastGroupSize = thousandsGroupStyle === 'wan' ? 4 : 3;\n\n  let decimalIndex = -1;\n  if (lastCharCount === 1) {\n    if (lastChar === decimalSeparator) {\n      decimalIndex = lastIndex;\n    } else if (lastChar === thousandSeparator) {\n      decimalIndex = countTrailingDigits(value, lastIndex + 1) === lastGroupSize ? -1 : lastIndex;\n    } else {\n      decimalIndex = lastIndex;\n    }\n  }\n\n  return chars\n    .map((char, index) => {\n      if (index === decimalIndex) {\n        return decimalSeparator;\n      }\n\n      if (candidates.has(char) && char !== thousandSeparator) {\n        return '';\n      }\n\n      return char;\n    })\n    .join('');\n}\n"],"mappings":";;AAOA,SAAS,oBAAoB,OAAe,MAAc;CACxD,IAAI,QAAQ;CACZ,OAAO,OAAO,QAAQ,MAAM,UAAU,KAAK,KAAK,MAAM,OAAO,MAAM,GACjE,SAAS;CAEX,OAAO;AACT;AAEA,SAAgB,qBACd,OACA,EACE,kBACA,mBACA,0BACA,uBAEF;CACA,MAAM,aAAa,IAAI,IACrB,CAAC,GAAG,0BAA0B,gBAAgB,CAAC,CAAC,QAAQ,MAAM,EAAE,WAAW,CAAC,CAC9E;CACA,MAAM,QAAQ,MAAM,MAAM,EAAE;CAC5B,MAAM,cAAc,MAAM,QAAkB,KAAK,MAAM,UAAU;EAC/D,IAAI,WAAW,IAAI,IAAI,GACrB,IAAI,KAAK,KAAK;EAEhB,OAAO;CACT,GAAG,CAAC,CAAC;CAEL,IAAI,YAAY,WAAW,GACzB,OAAO;CAGT,MAAM,YAAY,YAAY,YAAY,SAAS;CACnD,MAAM,WAAW,MAAM;CACvB,MAAM,gBAAgB,YAAY,QAAQ,UAAU,MAAM,WAAW,QAAQ,CAAC,CAAC;CAC/E,MAAM,gBAAgB,wBAAwB,QAAQ,IAAI;CAE1D,IAAI,eAAe;CACnB,IAAI,kBAAkB,GAAG;EACvB,IAAI,aAAa,kBACf,eAAe;OACV,IAAI,aAAa,mBACtB,eAAe,oBAAoB,OAAO,YAAY,CAAC,MAAM,gBAAgB,KAAK;OAElF,eAAe;CAEnB;CAEA,OAAO,MACJ,KAAK,MAAM,UAAU;EACpB,IAAI,UAAU,cACZ,OAAO;EAGT,IAAI,WAAW,IAAI,IAAI,KAAK,SAAS,mBACnC,OAAO;EAGT,OAAO;CACT,CAAC,CAAC,CACD,KAAK,EAAE;AACZ"}