{"version":3,"file":"get-render-slots.cjs","names":[],"sources":["../../../src/components/RollingNumber/get-render-slots.ts"],"sourcesContent":["import { getDigitParts, type DigitParts } from './get-digit-parts';\n\nexport interface DigitSlot {\n  type: 'digit';\n  key: string;\n  digit: string;\n  previousDigit: string | null;\n  empty: boolean;\n}\n\nexport interface CharSlot {\n  type: 'char';\n  key: string;\n  char: string;\n  empty: boolean;\n}\n\nexport type RenderSlot = DigitSlot | CharSlot;\n\nexport interface GetRenderSlotsInput {\n  current: DigitParts;\n  previous: DigitParts;\n  prefix?: string;\n  suffix?: string;\n  decimalSeparator?: string;\n  thousandSeparator?: string | boolean;\n}\n\nfunction padLeft(arr: string[], length: number): (string | null)[] {\n  return [...Array(length - arr.length).fill(null), ...arr];\n}\n\nfunction padRight(arr: string[], length: number): (string | null)[] {\n  return [...arr, ...Array(length - arr.length).fill(null)];\n}\n\nexport function getRenderSlots({\n  current,\n  previous,\n  prefix,\n  suffix,\n  decimalSeparator = '.',\n  thousandSeparator,\n}: GetRenderSlotsInput): RenderSlot[] {\n  const maxIntLen = Math.max(current.intDigits.length, previous.intDigits.length);\n  const maxFracLen = Math.max(current.fracDigits.length, previous.fracDigits.length);\n\n  const currIntPadded = padLeft(current.intDigits, maxIntLen);\n  const prevIntPadded = padLeft(previous.intDigits, maxIntLen);\n  const currFracPadded = padRight(current.fracDigits, maxFracLen);\n  const prevFracPadded = padRight(previous.fracDigits, maxFracLen);\n\n  const sep = thousandSeparator\n    ? typeof thousandSeparator === 'string'\n      ? thousandSeparator\n      : ','\n    : null;\n\n  const slots: RenderSlot[] = [];\n\n  if (prefix) {\n    for (let i = 0; i < prefix.length; i++) {\n      slots.push({ type: 'char', key: `prefix-${i}`, char: prefix[i], empty: false });\n    }\n  }\n\n  if (current.negative || previous.negative) {\n    slots.push({ type: 'char', key: 'sign', char: '-', empty: !current.negative });\n  }\n\n  for (let i = 0; i < maxIntLen; i++) {\n    const posFromRight = maxIntLen - 1 - i;\n    const currDigit = currIntPadded[i];\n    const prevDigit = prevIntPadded[i];\n    const isEmpty = currDigit === null;\n\n    slots.push({\n      type: 'digit',\n      key: `int-${posFromRight}`,\n      digit: currDigit ?? '0',\n      previousDigit: prevDigit,\n      empty: isEmpty,\n    });\n\n    if (sep && posFromRight > 0 && posFromRight % 3 === 0) {\n      slots.push({ type: 'char', key: `sep-${posFromRight}`, char: sep, empty: isEmpty });\n    }\n  }\n\n  if (current.hasDecimal || previous.hasDecimal) {\n    slots.push({\n      type: 'char',\n      key: 'dec',\n      char: decimalSeparator,\n      empty: !current.hasDecimal,\n    });\n  }\n\n  for (let i = 0; i < maxFracLen; i++) {\n    const currDigit = currFracPadded[i];\n    const prevDigit = prevFracPadded[i];\n    const isEmpty = currDigit === null;\n\n    slots.push({\n      type: 'digit',\n      key: `frac-${i}`,\n      digit: currDigit ?? '0',\n      previousDigit: prevDigit,\n      empty: isEmpty,\n    });\n  }\n\n  if (suffix) {\n    for (let i = 0; i < suffix.length; i++) {\n      slots.push({ type: 'char', key: `suffix-${i}`, char: suffix[i], empty: false });\n    }\n  }\n\n  return slots;\n}\n\nexport interface GetRenderSlotsFromValuesInput {\n  value: number;\n  previousValue: number;\n  prefix?: string;\n  suffix?: string;\n  decimalSeparator?: string;\n  thousandSeparator?: string | boolean;\n  decimalScale?: number;\n  fixedDecimalScale?: boolean;\n}\n\nexport function getRenderSlotsFromValues({\n  value,\n  previousValue,\n  prefix,\n  suffix,\n  decimalSeparator,\n  thousandSeparator,\n  decimalScale,\n  fixedDecimalScale,\n}: GetRenderSlotsFromValuesInput): RenderSlot[] {\n  const current = getDigitParts({ value, decimalScale, fixedDecimalScale });\n  const prev = getDigitParts({ value: previousValue, decimalScale, fixedDecimalScale });\n\n  return getRenderSlots({\n    current,\n    previous: prev,\n    prefix,\n    suffix,\n    decimalSeparator,\n    thousandSeparator,\n  });\n}\n"],"mappings":";;AA4BA,SAAS,QAAQ,KAAe,QAAmC;CACjE,OAAO,CAAC,GAAG,MAAM,SAAS,IAAI,MAAM,EAAE,KAAK,IAAI,GAAG,GAAG,GAAG;AAC1D;AAEA,SAAS,SAAS,KAAe,QAAmC;CAClE,OAAO,CAAC,GAAG,KAAK,GAAG,MAAM,SAAS,IAAI,MAAM,EAAE,KAAK,IAAI,CAAC;AAC1D;AAEA,SAAgB,eAAe,EAC7B,SACA,UACA,QACA,QACA,mBAAmB,KACnB,qBACoC;CACpC,MAAM,YAAY,KAAK,IAAI,QAAQ,UAAU,QAAQ,SAAS,UAAU,MAAM;CAC9E,MAAM,aAAa,KAAK,IAAI,QAAQ,WAAW,QAAQ,SAAS,WAAW,MAAM;CAEjF,MAAM,gBAAgB,QAAQ,QAAQ,WAAW,SAAS;CAC1D,MAAM,gBAAgB,QAAQ,SAAS,WAAW,SAAS;CAC3D,MAAM,iBAAiB,SAAS,QAAQ,YAAY,UAAU;CAC9D,MAAM,iBAAiB,SAAS,SAAS,YAAY,UAAU;CAE/D,MAAM,MAAM,oBACR,OAAO,sBAAsB,WAC3B,oBACA,MACF;CAEJ,MAAM,QAAsB,CAAC;CAE7B,IAAI,QACF,KAAK,IAAI,IAAI,GAAG,IAAI,OAAO,QAAQ,KACjC,MAAM,KAAK;EAAE,MAAM;EAAQ,KAAK,UAAU;EAAK,MAAM,OAAO;EAAI,OAAO;CAAM,CAAC;CAIlF,IAAI,QAAQ,YAAY,SAAS,UAC/B,MAAM,KAAK;EAAE,MAAM;EAAQ,KAAK;EAAQ,MAAM;EAAK,OAAO,CAAC,QAAQ;CAAS,CAAC;CAG/E,KAAK,IAAI,IAAI,GAAG,IAAI,WAAW,KAAK;EAClC,MAAM,eAAe,YAAY,IAAI;EACrC,MAAM,YAAY,cAAc;EAChC,MAAM,YAAY,cAAc;EAChC,MAAM,UAAU,cAAc;EAE9B,MAAM,KAAK;GACT,MAAM;GACN,KAAK,OAAO;GACZ,OAAO,aAAa;GACpB,eAAe;GACf,OAAO;EACT,CAAC;EAED,IAAI,OAAO,eAAe,KAAK,eAAe,MAAM,GAClD,MAAM,KAAK;GAAE,MAAM;GAAQ,KAAK,OAAO;GAAgB,MAAM;GAAK,OAAO;EAAQ,CAAC;CAEtF;CAEA,IAAI,QAAQ,cAAc,SAAS,YACjC,MAAM,KAAK;EACT,MAAM;EACN,KAAK;EACL,MAAM;EACN,OAAO,CAAC,QAAQ;CAClB,CAAC;CAGH,KAAK,IAAI,IAAI,GAAG,IAAI,YAAY,KAAK;EACnC,MAAM,YAAY,eAAe;EACjC,MAAM,YAAY,eAAe;EACjC,MAAM,UAAU,cAAc;EAE9B,MAAM,KAAK;GACT,MAAM;GACN,KAAK,QAAQ;GACb,OAAO,aAAa;GACpB,eAAe;GACf,OAAO;EACT,CAAC;CACH;CAEA,IAAI,QACF,KAAK,IAAI,IAAI,GAAG,IAAI,OAAO,QAAQ,KACjC,MAAM,KAAK;EAAE,MAAM;EAAQ,KAAK,UAAU;EAAK,MAAM,OAAO;EAAI,OAAO;CAAM,CAAC;CAIlF,OAAO;AACT"}