{"version":3,"sources":["../src/index.ts"],"sourcesContent":["type CharWidthRule = {\n  test: RegExp | ((char: string) => boolean)\n  width: number\n  placeholder?: string\n}\n\ntype PaddingMap = Record<string, CharWidthRule>\n\nconst DefaultPaddingMap: PaddingMap = {\n  cjk: {\n    test: isCJK,\n    width: 2,\n  },\n}\n\nfunction isCJK(char: string): boolean {\n  const cjkRanges = [\n    [0x4e00, 0x9fff],\n    [0x3400, 0x4dbf],\n    [0x20000, 0x2a6df],\n    [0x2a700, 0x2b73f],\n    [0x2b740, 0x2b81f],\n    [0x2b820, 0x2ceaf],\n    [0xf900, 0xfaff],\n    [0x2f800, 0x2fa1f],\n    [0x3040, 0x309f],\n    [0x30a0, 0x30ff],\n    [0x31f0, 0x31ff],\n    [0xac00, 0xd7a3],\n    [0x1100, 0x11ff],\n    [0x3130, 0x318f],\n    [0xff00, 0xffef],\n  ]\n\n  const charCode = char.codePointAt(0)!\n  return cjkRanges.some(([start, end]) => charCode >= start && charCode <= end)\n}\n\nfunction getCharWidth(char: string, rules: PaddingMap): number {\n  for (const rule of Object.values(rules)) {\n    const matched =\n      typeof rule.test === 'function' ? rule.test(char) : rule.test.test(char)\n    if (matched) {\n      return rule.width\n    }\n  }\n  return 1\n}\n\nfunction getStringWidth(str: string, rules: PaddingMap): number {\n  let width = 0\n  for (const char of str) {\n    width += getCharWidth(char, rules)\n  }\n  return width\n}\n\nexport function alignText(\n  strings: string[],\n  paddingMap: PaddingMap = {},\n  placeholder: string = ' ',\n): string[] {\n  const mergedPaddingMap = {...DefaultPaddingMap, ...paddingMap}\n  const widths = strings.map(str => getStringWidth(str, mergedPaddingMap))\n  const maxWidth = Math.max(...widths)\n\n  return strings.map((str, index) => {\n    const diff = maxWidth - widths[index]\n    return str + placeholder.repeat(diff)\n  })\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA,IAAM,oBAAgC;AAAA,EACpC,KAAK;AAAA,IACH,MAAM;AAAA,IACN,OAAO;AAAA,EACT;AACF;AAEA,SAAS,MAAM,MAAuB;AACpC,QAAM,YAAY;AAAA,IAChB,CAAC,OAAQ,KAAM;AAAA,IACf,CAAC,OAAQ,KAAM;AAAA,IACf,CAAC,QAAS,MAAO;AAAA,IACjB,CAAC,QAAS,MAAO;AAAA,IACjB,CAAC,QAAS,MAAO;AAAA,IACjB,CAAC,QAAS,MAAO;AAAA,IACjB,CAAC,OAAQ,KAAM;AAAA,IACf,CAAC,QAAS,MAAO;AAAA,IACjB,CAAC,OAAQ,KAAM;AAAA,IACf,CAAC,OAAQ,KAAM;AAAA,IACf,CAAC,OAAQ,KAAM;AAAA,IACf,CAAC,OAAQ,KAAM;AAAA,IACf,CAAC,MAAQ,IAAM;AAAA,IACf,CAAC,OAAQ,KAAM;AAAA,IACf,CAAC,OAAQ,KAAM;AAAA,EACjB;AAEA,QAAM,WAAW,KAAK,YAAY,CAAC;AACnC,SAAO,UAAU,KAAK,CAAC,CAAC,OAAO,GAAG,MAAM,YAAY,SAAS,YAAY,GAAG;AAC9E;AAEA,SAAS,aAAa,MAAc,OAA2B;AAC7D,aAAW,QAAQ,OAAO,OAAO,KAAK,GAAG;AACvC,UAAM,UACJ,OAAO,KAAK,SAAS,aAAa,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,KAAK,IAAI;AACzE,QAAI,SAAS;AACX,aAAO,KAAK;AAAA,IACd;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,eAAe,KAAa,OAA2B;AAC9D,MAAI,QAAQ;AACZ,aAAW,QAAQ,KAAK;AACtB,aAAS,aAAa,MAAM,KAAK;AAAA,EACnC;AACA,SAAO;AACT;AAEO,SAAS,UACd,SACA,aAAyB,CAAC,GAC1B,cAAsB,KACZ;AACV,QAAM,mBAAmB,EAAC,GAAG,mBAAmB,GAAG,WAAU;AAC7D,QAAM,SAAS,QAAQ,IAAI,SAAO,eAAe,KAAK,gBAAgB,CAAC;AACvE,QAAM,WAAW,KAAK,IAAI,GAAG,MAAM;AAEnC,SAAO,QAAQ,IAAI,CAAC,KAAK,UAAU;AACjC,UAAM,OAAO,WAAW,OAAO,KAAK;AACpC,WAAO,MAAM,YAAY,OAAO,IAAI;AAAA,EACtC,CAAC;AACH;","names":[]}