{"version":3,"sources":["../src/number.ts","../src/formatter.ts","../src/khmer.ts","../src/parser.ts","../src/khmer-text.ts"],"names":[],"mappings":";;;AAEA,IAAM,eAAA,GAAiD;AAAA,EACrD,QAAA,EAAU,CAAA;AAAA,EACV,SAAA,EAAW,GAAA;AAAA,EACX,gBAAA,EAAkB,GAAA;AAAA,EAClB,WAAA,EAAa,KAAA;AAAA,EACb,KAAA,EAAO;AACT,CAAA;AAEO,SAAS,eACd,KAAA,EACe;AACf,EAAA,IACE,KAAA,KAAU,IAAA,IACV,KAAA,KAAU,MAAA,IACV,UAAU,EAAA,EACV;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,OAAO,MAAA,CAAO,QAAA,CAAS,KAAK,CAAA,GAAI,KAAA,GAAQ,IAAA;AAAA,EAC1C;AAEA,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,OAAO,OAAO,KAAK,CAAA;AAAA,EACrB;AAEA,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,aAAa,KAAA,CAChB,IAAA,EAAK,CACL,OAAA,CAAQ,MAAM,EAAE,CAAA;AAEnB,EAAA,IAAI,CAAC,UAAA,EAAY;AACf,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,MAAA,GAAS,OAAO,UAAU,CAAA;AAEhC,EAAA,OAAO,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA,GACzB,MAAA,GACA,IAAA;AACN;AAEO,SAAS,YAAA,CACd,KAAA,EACA,OAAA,GAA+B,EAAC,EACxB;AACR,EAAA,MAAM,MAAA,GAAS;AAAA,IACb,GAAG,eAAA;AAAA,IACH,GAAG;AAAA,GACL;AAEA,EAAA,MAAM,YAAA,GAAe,eAAe,KAAK,CAAA;AAEzC,EAAA,IAAI,iBAAiB,IAAA,EAAM;AACzB,IAAA,OAAO,MAAA,CAAO,KAAA;AAAA,EAChB;AAEA,EAAA,MAAM,WAAW,IAAA,CAAK,GAAA;AAAA,IACpB,CAAA;AAAA,IACA,IAAA,CAAK,KAAA,CAAM,MAAA,CAAO,QAAQ;AAAA,GAC5B;AAEA,EAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,OAAA,CAAQ,QAAQ,CAAA;AAE3C,EAAA,MAAM,CAAC,WAAA,GAAc,EAAA,EAAI,WAAW,CAAA,GAClC,KAAA,CAAM,MAAM,GAAG,CAAA;AAEjB,EAAA,MAAM,QAAA,GAAW,WAAA,CAAY,UAAA,CAAW,GAAG,CAAA;AAE3C,EAAA,MAAM,eAAA,GAAkB,QAAA,GACpB,WAAA,CAAY,KAAA,CAAM,CAAC,CAAA,GACnB,WAAA;AAEJ,EAAA,MAAM,mBACJ,eAAA,CAAgB,OAAA;AAAA,IACd,uBAAA;AAAA,IACA,MAAA,CAAO;AAAA,GACT;AAEF,EAAA,IAAI,SACF,CAAA,EAAG,QAAA,GAAW,GAAA,GAAM,EAAE,GAAG,gBAAgB,CAAA,CAAA;AAE3C,EAAA,IAAI,QAAA,GAAW,CAAA,IAAK,WAAA,KAAgB,MAAA,EAAW;AAC7C,IAAA,MAAA,IACE,OAAO,gBAAA,GACP,WAAA;AAAA,EACJ;AAEA,EAAA,OAAO,MAAA,CAAO,WAAA,GACV,oBAAA,CAAqB,MAAM,CAAA,GAC3B,MAAA;AACN;AAEO,SAAS,YACd,KAAA,EACQ;AACR,EAAA,IACE,KAAA,KAAU,IAAA,IACV,KAAA,KAAU,MAAA,IACV,UAAU,EAAA,EACV;AACA,IAAA,OAAO,CAAA;AAAA,EACT;AAEA,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,OAAO,MAAA,CAAO,QAAA,CAAS,KAAK,CAAA,GACxB,KAAA,GACA,CAAA;AAAA,EACN;AAEA,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,OAAO,CAAA;AAAA,EACT;AAEA,EAAA,MAAM,UAAA,GAAa,sBAAA;AAAA,IACjB;AAAA,GACF,CACG,IAAA,EAAK,CACL,OAAA,CAAQ,MAAM,EAAE,CAAA;AAEnB,EAAA,IAAI,CAAC,UAAA,EAAY;AACf,IAAA,OAAO,CAAA;AAAA,EACT;AAEA,EAAA,MAAM,MAAA,GAAS,OAAO,UAAU,CAAA;AAEhC,EAAA,OAAO,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA,GACzB,MAAA,GACA,CAAA;AACN;AAEA,SAAS,qBACP,KAAA,EACQ;AACR,EAAA,MAAM,GAAA,GAA8B;AAAA,IAClC,GAAA,EAAK,QAAA;AAAA,IACL,GAAA,EAAK,QAAA;AAAA,IACL,GAAA,EAAK,QAAA;AAAA,IACL,GAAA,EAAK,QAAA;AAAA,IACL,GAAA,EAAK,QAAA;AAAA,IACL,GAAA,EAAK,QAAA;AAAA,IACL,GAAA,EAAK,QAAA;AAAA,IACL,GAAA,EAAK,QAAA;AAAA,IACL,GAAA,EAAK,QAAA;AAAA,IACL,GAAA,EAAK;AAAA,GACP;AAEA,EAAA,OAAO,KAAA,CAAM,OAAA;AAAA,IACX,KAAA;AAAA,IACA,CAAC,KAAA,KAAU,GAAA,CAAI,KAAK,CAAA,IAAG;AAAA,GACzB;AACF;AAEA,SAAS,uBACP,KAAA,EACQ;AACR,EAAA,MAAM,GAAA,GAA8B;AAAA,IAClC,QAAA,EAAK,GAAA;AAAA,IACL,QAAA,EAAK,GAAA;AAAA,IACL,QAAA,EAAK,GAAA;AAAA,IACL,QAAA,EAAK,GAAA;AAAA,IACL,QAAA,EAAK,GAAA;AAAA,IACL,QAAA,EAAK,GAAA;AAAA,IACL,QAAA,EAAK,GAAA;AAAA,IACL,QAAA,EAAK,GAAA;AAAA,IACL,QAAA,EAAK,GAAA;AAAA,IACL,QAAA,EAAK;AAAA,GACP;AAEA,EAAA,OAAO,KAAA,CAAM,OAAA;AAAA,IACX,QAAA;AAAA,IACA,CAAC,KAAA,KAAU,GAAA,CAAI,KAAK,CAAA,IAAG;AAAA,GACzB;AACF;;;AC1KA,IAAM,qBAAA,GAC2B;AAAA,EAC7B,MAAA,EAAQ,IAAA;AAAA,EACR,QAAA,EAAU,QAAA;AAAA,EACV,QAAA,EAAU,CAAA;AAAA,EACV,SAAA,EAAW,GAAA;AAAA,EACX,gBAAA,EAAkB,GAAA;AAAA,EAClB,gBAAA,EAAkB,QAAA;AAAA,EAClB,WAAA,EAAa,KAAA;AAAA,EACb,KAAA,EAAO,GAAA;AAAA,EACP,OAAA,EAAS;AACX,CAAA;AAaK,SAAS,SAAA,CACd,KAAA,EACA,IAAA,GAAO,GAAA,EACC;AACR,EAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,KAAK,CAAA,EAAG;AAC3B,IAAA,OAAO,CAAA;AAAA,EACT;AAEA,EAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,IAAI,CAAA,IAAK,QAAQ,CAAA,EAAG;AACvC,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,OAAO,IAAA,CAAK,IAAA,CAAK,KAAA,GAAQ,IAAI,CAAA,GAAI,IAAA;AACnC;AAKO,SAAS,SAAA,CACd,KAAA,EACA,OAAA,GAA8B,EAAC,EACvB;AACR,EAAA,MAAM,MAAA,GAAS;AAAA,IACb,GAAG,qBAAA;AAAA,IACH,GAAG;AAAA,GACL;AAEA,EAAA,MAAM,YAAA,GACJ,eAAe,KAAK,CAAA;AAEtB,EAAA,IAAI,iBAAiB,IAAA,EAAM;AACzB,IAAA,MAAM,aAAa,MAAA,CAAO,KAAA;AAE1B,IAAA,IAAI,CAAC,OAAO,MAAA,EAAQ;AAClB,MAAA,OAAO,UAAA;AAAA,IACT;AAEA,IAAA,IAAI,CAAC,UAAA,EAAY;AACf,MAAA,OAAO,EAAA;AAAA,IACT;AAEA,IAAA,OAAO,MAAA,CAAO,gBAAA,KACZ,QAAA,GACE,CAAA,EAAG,MAAA,CAAO,QAAQ,CAAA,EAAG,UAAU,CAAA,CAAA,GAC/B,CAAA,EAAG,UAAU,CAAA,CAAA,EAAI,OAAO,QAAQ,CAAA,CAAA;AAAA,EACtC;AAEA,EAAA,MAAM,YAAA,GAAe,SAAA;AAAA,IACnB,YAAA;AAAA,IACA,MAAA,CAAO;AAAA,GACT;AAEA,EAAA,MAAM,SAAA,GACJ,aAAa,YAAA,EAAc;AAAA,IACzB,QAAA,EAAU,CAAA;AAAA,IACV,WAAW,MAAA,CAAO,SAAA;AAAA,IAClB,kBACE,MAAA,CAAO,gBAAA;AAAA,IACT,aACE,MAAA,CAAO,WAAA;AAAA,IACT,OAAO,MAAA,CAAO;AAAA,GACf,CAAA;AAEH,EAAA,IAAI,CAAC,OAAO,MAAA,EAAQ;AAClB,IAAA,OAAO,SAAA;AAAA,EACT;AAEA,EAAA,IAAI,MAAA,CAAO,qBAAqB,QAAA,EAAU;AACxC,IAAA,OAAO,CAAA,EAAG,MAAA,CAAO,QAAQ,CAAA,EAAG,SAAS,CAAA,CAAA;AAAA,EACvC;AAEA,EAAA,OAAO,CAAA,EAAG,SAAS,CAAA,CAAA,EAAI,MAAA,CAAO,QAAQ,CAAA,CAAA;AACxC;AAQO,SAAS,cAAA,CACd,KAAA,EACA,OAAA,GAA8B,EAAC,EACvB;AACR,EAAA,MAAM,MAAA,GAAS;AAAA,IACb,GAAG,qBAAA;AAAA,IACH,GAAG;AAAA,GACL;AAEA,EAAA,MAAM,YAAA,GACJ,eAAe,KAAK,CAAA;AAEtB,EAAA,IAAI,iBAAiB,IAAA,EAAM;AACzB,IAAA,OAAO,MAAA,CAAO,KAAA;AAAA,EAChB;AAEA,EAAA,MAAM,YAAA,GAAe,SAAA;AAAA,IACnB,YAAA;AAAA,IACA,MAAA,CAAO;AAAA,GACT;AAEA,EAAA,OAAO,aAAa,YAAA,EAAc;AAAA,IAChC,QAAA,EAAU,CAAA;AAAA,IACV,WAAW,MAAA,CAAO,SAAA;AAAA,IAClB,kBACE,MAAA,CAAO,gBAAA;AAAA,IACT,aACE,MAAA,CAAO,WAAA;AAAA,IACT,OAAO,MAAA,CAAO;AAAA,GACf,CAAA;AACH;AAKO,SAAS,aAAA,CACd,KAAA,EACA,OAAA,GAEI,EAAC,EACG;AACR,EAAA,MAAM;AAAA,IACJ,KAAA,GAAQ,KAAA;AAAA,IACR,GAAG;AAAA,GACL,GAAI,OAAA;AAEJ,EAAA,MAAM,SAAA,GACJ,UAAU,KAAA,EAAO;AAAA,IACf,GAAG,YAAA;AAAA,IACH,MAAA,EAAQ,KAAA;AAAA,IACR,WAAA,EACE,aAAa,WAAA,IACb;AAAA,GACH,CAAA;AAEH,EAAA,IAAI,CAAC,SAAA,EAAW;AACd,IAAA,OAAO,EAAA;AAAA,EACT;AAEA,EAAA,OAAO,aAAa,gBAAA,KAClB,QAAA,GACE,qBAAM,SAAS,CAAA,CAAA,GACf,GAAG,SAAS,CAAA,mBAAA,CAAA;AAClB;;;AChLA,IAAM,YAAA,GAAe;AAAA,EACnB,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA;AAEA,IAAM,eAAA,GAA0C;AAAA,EAC9C,QAAA,EAAK,GAAA;AAAA,EACL,QAAA,EAAK,GAAA;AAAA,EACL,QAAA,EAAK,GAAA;AAAA,EACL,QAAA,EAAK,GAAA;AAAA,EACL,QAAA,EAAK,GAAA;AAAA,EACL,QAAA,EAAK,GAAA;AAAA,EACL,QAAA,EAAK,GAAA;AAAA,EACL,QAAA,EAAK,GAAA;AAAA,EACL,QAAA,EAAK,GAAA;AAAA,EACL,QAAA,EAAK;AACP,CAAA;AAEO,SAAS,cACd,KAAA,EACQ;AACR,EAAA,MAAM,KAAA,GAAQ,OAAO,KAAK,CAAA;AAE1B,EAAA,OAAO,KAAA,CAAM,OAAA;AAAA,IACX,KAAA;AAAA,IACA,CAAC,KAAA,KACC,YAAA,CAAa,MAAA,CAAO,KAAK,CAAC,CAAA,IAAG;AAAA,GACjC;AACF;AAEO,SAAS,gBACd,KAAA,EACQ;AACR,EAAA,MAAM,aAAa,KAAA,CAChB,OAAA;AAAA,IACC,QAAA;AAAA,IACA,CAAC,KAAA,KAAU,eAAA,CAAgB,KAAK,CAAA,IAAG;AAAA,GACrC,CACC,OAAA,CAAQ,IAAA,EAAM,EAAE,EAChB,IAAA,EAAK;AAER,EAAA,IAAI,CAAC,UAAA,EAAY;AACf,IAAA,OAAO,CAAA;AAAA,EACT;AAEA,EAAA,MAAM,MAAA,GAAS,OAAO,UAAU,CAAA;AAEhC,EAAA,OAAO,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA,GACzB,MAAA,GACA,CAAA;AACN;;;ACtCO,SAAS,SACd,KAAA,EACQ;AACR,EAAA,IACE,KAAA,KAAU,IAAA,IACV,KAAA,KAAU,MAAA,IACV,UAAU,EAAA,EACV;AACA,IAAA,OAAO,CAAA;AAAA,EACT;AAEA,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,OAAO,MAAA,CAAO,QAAA,CAAS,KAAK,CAAA,GACxB,KAAA,GACA,CAAA;AAAA,EACN;AAEA,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,OAAO,CAAA;AAAA,EACT;AAEA,EAAA,MAAM,OAAA,GAAU,KAAA,CACb,OAAA,CAAQ,IAAA,EAAM,EAAE,CAAA,CAChB,OAAA,CAAQ,MAAA,EAAQ,EAAE,CAAA,CAClB,OAAA,CAAQ,MAAA,EAAQ,EAAE,EAClB,IAAA,EAAK;AAER,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,OAAO,CAAA;AAAA,EACT;AAEA,EAAA,IAAI,OAAA,CAAQ,IAAA,CAAK,OAAO,CAAA,EAAG;AACzB,IAAA,OAAO,gBAAgB,OAAO,CAAA;AAAA,EAChC;AAEA,EAAA,OAAO,YAAY,OAAO,CAAA;AAC5B;AAKO,SAAS,aACd,KAAA,EACS;AACT,EAAA,IACE,KAAA,KAAU,IAAA,IACV,KAAA,KAAU,MAAA,IACV,UAAU,EAAA,EACV;AACA,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,OAAO,MAAA,CAAO,SAAS,KAAK,CAAA;AAAA,EAC9B;AAEA,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,EAAK;AAEzB,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,MAAM,OAAA,GAAU,KAAA,CACb,OAAA,CAAQ,IAAA,EAAM,EAAE,CAAA,CAChB,OAAA,CAAQ,MAAA,EAAQ,EAAE,CAAA,CAClB,OAAA,CAAQ,MAAA,EAAQ,EAAE,EAClB,IAAA,EAAK;AAER,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,MAAM,SAAS,OAAA,CAAQ,OAAA;AAAA,IACrB,QAAA;AAAA,IACA,CAAC,KAAA,KAAU;AACT,MAAA,MAAM,GAAA,GAA8B;AAAA,QAClC,QAAA,EAAK,GAAA;AAAA,QACL,QAAA,EAAK,GAAA;AAAA,QACL,QAAA,EAAK,GAAA;AAAA,QACL,QAAA,EAAK,GAAA;AAAA,QACL,QAAA,EAAK,GAAA;AAAA,QACL,QAAA,EAAK,GAAA;AAAA,QACL,QAAA,EAAK,GAAA;AAAA,QACL,QAAA,EAAK,GAAA;AAAA,QACL,QAAA,EAAK,GAAA;AAAA,QACL,QAAA,EAAK;AAAA,OACP;AAEA,MAAA,OAAO,GAAA,CAAI,KAAK,CAAA,IAAK,KAAA;AAAA,IACvB;AAAA,GACF;AAEA,EAAA,MAAM,aAAa,MAAA,CAAO,OAAA;AAAA,IACxB,IAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,OAAO,oBAAA,CAAqB,IAAA;AAAA,IAC1B;AAAA,GACF;AACF;;;AC5HA,IAAM,MAAA,GAAS;AAAA,EACb,gCAAA;AAAA,EACA,oBAAA;AAAA,EACA,oBAAA;AAAA,EACA,cAAA;AAAA,EACA,oBAAA;AAAA,EACA,gCAAA;AAAA,EACA,kDAAA;AAAA,EACA,kDAAA;AAAA,EACA,4CAAA;AAAA,EACA;AACF,CAAA;AAEA,IAAM,IAAA,GAA+B;AAAA,EACnC,CAAA,EAAG,0BAAA;AAAA,EACH,CAAA,EAAG,sCAAA;AAAA,EACH,CAAA,EAAG,gCAAA;AAAA,EACH,CAAA,EAAG,gCAAA;AAAA,EACH,CAAA,EAAG,sCAAA;AAAA,EACH,CAAA,EAAG,sCAAA;AAAA,EACH,CAAA,EAAG,4CAAA;AAAA,EACH,CAAA,EAAG;AACL,CAAA;AAEA,IAAM,MAAA,GAAS;AAAA,EACb,EAAA;AAAA,EACA,0BAAA;AAAA,EACA,oBAAA;AAAA,EACA,4CAAA;AAAA,EACA,4CAAA;AAAA,EACA;AACF,CAAA;AAEA,SAAS,SACP,KAAA,EACQ;AACR,EAAA,IAAI,QAAQ,EAAA,EAAI;AACd,IAAA,OAAO,MAAA,CAAO,KAAK,CAAA,IAAI,EAAA;AAAA,EACzB;AAEA,EAAA,IAAI,UAAU,EAAA,EAAI;AAChB,IAAA,OAAO,oBAAA;AAAA,EACT;AAEA,EAAA,IAAI,QAAQ,EAAA,EAAI;AACd,IAAA,OAAO,CAAA,kBAAA,EAAM,MAAA,CAAO,KAAA,GAAQ,EAAE,CAAC,CAAA,CAAA;AAAA,EACjC;AAEA,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,KAAA,GAAQ,EAAE,CAAA;AAClC,EAAA,IAAI,IAAA;AACJ,EAAA,IAAA,GAAO,KAAA,GAAQ,EAAA;AAEf,EAAA,IAAI,MAAA,GAAS,KAAK,IAAI,CAAA;AAEtB,EAAA,IAAI,OAAO,CAAA,EAAG;AACZ,IAAA,MAAA,IAAU,MAAA,CAAO,IAAI,CAAA,IAAG,EAAA;AAAA,EAC1B;AAEA,EAAA,OAAO,MAAA,IAAQ,EAAA;AACjB;AAEA,SAAS,UACP,KAAA,EACQ;AACR,EAAA,IAAI,UAAU,CAAA,EAAG;AACf,IAAA,OAAO,EAAA;AAAA,EACT;AAEA,EAAA,MAAM,QAAA,GACJ,IAAA,CAAK,KAAA,CAAM,KAAA,GAAQ,GAAG,CAAA;AAExB,EAAA,MAAM,YACJ,KAAA,GAAQ,GAAA;AAEV,EAAA,IAAI,MAAA,GAAS,EAAA;AAEb,EAAA,IAAI,WAAW,CAAA,EAAG;AAChB,IAAA,MAAA,IACE,CAAA,EAAG,MAAA,CAAO,QAAQ,CAAC,CAAA,YAAA,CAAA;AAAA,EACvB;AAEA,EAAA,IAAI,YAAY,CAAA,EAAG;AACjB,IAAA,MAAA,IAAU,SAAS,SAAS,CAAA;AAAA,EAC9B;AAEA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,mBACP,KAAA,EACQ;AACR,EAAA,IAAI,UAAU,CAAA,EAAG;AACf,IAAA,OAAO,MAAA,CAAO,CAAC,CAAG;AAAA,EACpB;AAEA,EAAA,IAAI,MAAA,GAAS,KAAA;AACb,EAAA,IAAI,UAAA,GAAa,CAAA;AACjB,EAAA,IAAI,MAAA,GAAS,EAAA;AAEb,EAAA,OAAO,SAAS,CAAA,EAAG;AACjB,IAAA,MAAM,QAAQ,MAAA,GAAS,GAAA;AAEvB,IAAA,IAAI,UAAU,CAAA,EAAG;AACf,MAAA,MAAM,IAAA,GACJ,UAAU,KAAK,CAAA;AAEjB,MAAA,MAAM,KAAA,GACJ,MAAA,CAAO,UAAU,CAAA,IAAK,EAAA;AAExB,MAAA,MAAA,GACE,OAAO,KAAA,GAAQ,MAAA;AAAA,IACnB;AAEA,IAAA,MAAA,GACE,IAAA,CAAK,KAAA,CAAM,MAAA,GAAS,GAAI,CAAA;AAE1B,IAAA,UAAA,EAAA;AAAA,EACF;AAEA,EAAA,OAAO,MAAA;AACT;AAUO,SAAS,kBACd,KAAA,EACQ;AACR,EAAA,IACE,KAAA,KAAU,IAAA,IACV,KAAA,KAAU,MAAA,IACV,UAAU,EAAA,EACV;AACA,IAAA,OAAO,MAAA,CAAO,CAAC,CAAG;AAAA,EACpB;AAEA,EAAA,MAAM,UAAA,GACJ,OAAO,KAAK,CAAA,CACT,QAAQ,IAAA,EAAM,EAAE,EAChB,IAAA,EAAK;AAEV,EAAA,MAAM,MAAA,GACJ,OAAO,UAAU,CAAA;AAEnB,EAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA,EAAG;AAC5B,IAAA,OAAO,EAAA;AAAA,EACT;AAEA,EAAA,IAAI,WAAW,CAAA,EAAG;AAChB,IAAA,OAAO,MAAA,CAAO,CAAC,CAAG;AAAA,EACpB;AAEA,EAAA,IAAI,SAAS,CAAA,EAAG;AACd,IAAA,OAAO,CAAA,YAAA,EAAK,iBAAA;AAAA,MACV,IAAA,CAAK,IAAI,MAAM;AAAA,KAChB,CAAA,CAAA;AAAA,EACH;AAEA,EAAA,OAAO,kBAAA;AAAA,IACL,IAAA,CAAK,MAAM,MAAM;AAAA,GACnB;AACF;AAWO,SAAS,mBACd,KAAA,EACQ;AACR,EAAA,IACE,KAAA,KAAU,IAAA,IACV,KAAA,KAAU,MAAA,IACV,UAAU,EAAA,EACV;AACA,IAAA,OAAO,MAAA,CAAO,CAAC,CAAG;AAAA,EACpB;AAEA,EAAA,MAAM,UAAA,GACJ,OAAO,KAAK,CAAA,CACT,QAAQ,IAAA,EAAM,EAAE,EAChB,IAAA,EAAK;AAEV,EAAA,MAAM,MAAA,GACJ,OAAO,UAAU,CAAA;AAEnB,EAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA,EAAG;AAC5B,IAAA,OAAO,EAAA;AAAA,EACT;AAEA,EAAA,IAAI,CAAC,UAAA,CAAW,QAAA,CAAS,GAAG,CAAA,EAAG;AAC7B,IAAA,OAAO,iBAAA;AAAA,MACL;AAAA,KACF;AAAA,EACF;AAEA,EAAA,MAAM;AAAA,IACJ,WAAA,GAAY,EAAA;AAAA,IACZ,WAAA,GAAc;AAAA,GAChB,GAAI,UAAA,CAAW,KAAA,CAAM,GAAG,CAAA;AAExB,EAAA,MAAM,WAAA,GACJ,kBAAkB,WAAW,CAAA;AAE/B,EAAA,MAAM,WAAA,GAAc,kBAAkB,WAAW,CAAA;AAUjD,EAAA,OAAO,CAAA,EAAG,WAAW,CAAA,kBAAA,EAAM,WAAW,CAAA,CAAA;AACxC;AASO,SAAS,uBACd,KAAA,EACQ;AACR,EAAA,OAAO,CAAA,EAAG,iBAAA,CAAkB,KAAK,CAAC,CAAA,kBAAA,CAAA;AACpC","file":"index.cjs","sourcesContent":["import type { NumberFormatOptions } from \"./types\";\n\nconst DEFAULT_OPTIONS: Required<NumberFormatOptions> = {\n  decimals: 0,\n  separator: \",\",\n  decimalSeparator: \".\",\n  khmerDigits: false,\n  empty: \"0\",\n};\n\nexport function toNumericValue(\n  value: unknown,\n): number | null {\n  if (\n    value === null ||\n    value === undefined ||\n    value === \"\"\n  ) {\n    return null;\n  }\n\n  if (typeof value === \"number\") {\n    return Number.isFinite(value) ? value : null;\n  }\n\n  if (typeof value === \"bigint\") {\n    return Number(value);\n  }\n\n  if (typeof value !== \"string\") {\n    return null;\n  }\n\n  const normalized = value\n    .trim()\n    .replace(/,/g, \"\");\n\n  if (!normalized) {\n    return null;\n  }\n\n  const parsed = Number(normalized);\n\n  return Number.isFinite(parsed)\n    ? parsed\n    : null;\n}\n\nexport function formatNumber(\n  value: unknown,\n  options: NumberFormatOptions = {},\n): string {\n  const config = {\n    ...DEFAULT_OPTIONS,\n    ...options,\n  };\n\n  const numericValue = toNumericValue(value);\n\n  if (numericValue === null) {\n    return config.empty;\n  }\n\n  const decimals = Math.max(\n    0,\n    Math.floor(config.decimals),\n  );\n\n  const fixed = numericValue.toFixed(decimals);\n\n  const [integerPart = '', decimalPart] =\n    fixed.split(\".\");\n\n  const negative = integerPart.startsWith(\"-\");\n\n  const absoluteInteger = negative\n    ? integerPart.slice(1)\n    : integerPart;\n\n  const formattedInteger =\n    absoluteInteger.replace(\n      /\\B(?=(\\d{3})+(?!\\d))/g,\n      config.separator,\n    );\n\n  let result =\n    `${negative ? \"-\" : \"\"}${formattedInteger}`;\n\n  if (decimals > 0 && decimalPart !== undefined) {\n    result +=\n      config.decimalSeparator +\n      decimalPart;\n  }\n\n  return config.khmerDigits\n    ? convertDigitsToKhmer(result)\n    : result;\n}\n\nexport function parseNumber(\n  value: unknown,\n): number {\n  if (\n    value === null ||\n    value === undefined ||\n    value === \"\"\n  ) {\n    return 0;\n  }\n\n  if (typeof value === \"number\") {\n    return Number.isFinite(value)\n      ? value\n      : 0;\n  }\n\n  if (typeof value !== \"string\") {\n    return 0;\n  }\n\n  const normalized = convertDigitsFromKhmer(\n    value,\n  )\n    .trim()\n    .replace(/,/g, \"\");\n\n  if (!normalized) {\n    return 0;\n  }\n\n  const parsed = Number(normalized);\n\n  return Number.isFinite(parsed)\n    ? parsed\n    : 0;\n}\n\nfunction convertDigitsToKhmer(\n  value: string,\n): string {\n  const map: Record<string, string> = {\n    \"0\": \"០\",\n    \"1\": \"១\",\n    \"2\": \"២\",\n    \"3\": \"៣\",\n    \"4\": \"៤\",\n    \"5\": \"៥\",\n    \"6\": \"៦\",\n    \"7\": \"៧\",\n    \"8\": \"៨\",\n    \"9\": \"៩\",\n  };\n\n  return value.replace(\n    /\\d/g,\n    (digit) => map[digit]??digit,\n  );\n}\n\nfunction convertDigitsFromKhmer(\n  value: string,\n): string {\n  const map: Record<string, string> = {\n    \"០\": \"0\",\n    \"១\": \"1\",\n    \"២\": \"2\",\n    \"៣\": \"3\",\n    \"៤\": \"4\",\n    \"៥\": \"5\",\n    \"៦\": \"6\",\n    \"៧\": \"7\",\n    \"៨\": \"8\",\n    \"៩\": \"9\",\n  };\n\n  return value.replace(\n    /[០-៩]/g,\n    (digit) => map[digit]??digit,\n  );\n}","import {\n  formatNumber,\n  toNumericValue,\n} from \"./number\";\n\nimport type {\n  MoneyFormatOptions,\n} from \"./types\";\n\nconst DEFAULT_MONEY_OPTIONS:\n  Required<MoneyFormatOptions> = {\n    symbol: true,\n    currency: \"៛\",\n    decimals: 0,\n    separator: \",\",\n    decimalSeparator: \".\",\n    currencyPosition: \"suffix\",\n    khmerDigits: false,\n    empty: \"0\",\n    roundTo: 100,\n  };\n\n/**\n * Always rounds a KHR value upward\n * to the nearest configured unit.\n *\n * Example:\n *\n * 1000.01 -> 1100\n * 1050    -> 1100\n * 1099    -> 1100\n * 1100    -> 1100\n */\nexport function ceilMoney(\n  value: number,\n  unit = 100,\n): number {\n  if (!Number.isFinite(value)) {\n    return 0;\n  }\n\n  if (!Number.isFinite(unit) || unit <= 0) {\n    return value;\n  }\n\n  return Math.ceil(value / unit) * unit;\n}\n\n/**\n * Format Khmer Riel.\n */\nexport function formatKHR(\n  value: unknown,\n  options: MoneyFormatOptions = {},\n): string {\n  const config = {\n    ...DEFAULT_MONEY_OPTIONS,\n    ...options,\n  };\n\n  const numericValue =\n    toNumericValue(value);\n\n  if (numericValue === null) {\n    const emptyValue = config.empty;\n\n    if (!config.symbol) {\n      return emptyValue;\n    }\n\n    if (!emptyValue) {\n      return \"\";\n    }\n\n    return config.currencyPosition ===\n      \"prefix\"\n      ? `${config.currency}${emptyValue}`\n      : `${emptyValue} ${config.currency}`;\n  }\n\n  const roundedValue = ceilMoney(\n    numericValue,\n    config.roundTo,\n  );\n\n  const formatted =\n    formatNumber(roundedValue, {\n      decimals: 0,\n      separator: config.separator,\n      decimalSeparator:\n        config.decimalSeparator,\n      khmerDigits:\n        config.khmerDigits,\n      empty: config.empty,\n    });\n\n  if (!config.symbol) {\n    return formatted;\n  }\n\n  if (config.currencyPosition === \"prefix\") {\n    return `${config.currency}${formatted}`;\n  }\n\n  return `${formatted} ${config.currency}`;\n}\n\n/**\n * Format an amount for text input.\n *\n * KHR values are rounded upward to the nearest\n * 100 Riel by default.\n */\nexport function formatKHRInput(\n  value: unknown,\n  options: MoneyFormatOptions = {},\n): string {\n  const config = {\n    ...DEFAULT_MONEY_OPTIONS,\n    ...options,\n  };\n\n  const numericValue =\n    toNumericValue(value);\n\n  if (numericValue === null) {\n    return config.empty;\n  }\n\n  const roundedValue = ceilMoney(\n    numericValue,\n    config.roundTo,\n  );\n\n  return formatNumber(roundedValue, {\n    decimals: 0,\n    separator: config.separator,\n    decimalSeparator:\n      config.decimalSeparator,\n    khmerDigits:\n      config.khmerDigits,\n    empty: config.empty,\n  });\n}\n\n/**\n * Format KHR using the long currency name.\n */\nexport function formatKHRLong(\n  value: unknown,\n  options: MoneyFormatOptions & {\n    khmer?: boolean;\n  } = {},\n): string {\n  const {\n    khmer = false,\n    ...moneyOptions\n  } = options;\n\n  const formatted =\n    formatKHR(value, {\n      ...moneyOptions,\n      symbol: false,\n      khmerDigits:\n        moneyOptions.khmerDigits ??\n        khmer,\n    });\n\n  if (!formatted) {\n    return \"\";\n  }\n\n  return moneyOptions.currencyPosition ===\n    \"prefix\"\n    ? `រៀល${formatted}`\n    : `${formatted} រៀល`;\n}","const KHMER_DIGITS = [\n  \"០\",\n  \"១\",\n  \"២\",\n  \"៣\",\n  \"៤\",\n  \"៥\",\n  \"៦\",\n  \"៧\",\n  \"៨\",\n  \"៩\",\n];\n\nconst KHMER_TO_ARABIC: Record<string, string> = {\n  \"០\": \"0\",\n  \"១\": \"1\",\n  \"២\": \"2\",\n  \"៣\": \"3\",\n  \"៤\": \"4\",\n  \"៥\": \"5\",\n  \"៦\": \"6\",\n  \"៧\": \"7\",\n  \"៨\": \"8\",\n  \"៩\": \"9\",\n};\n\nexport function toKhmerNumber(\n  value: number | string,\n): string {\n  const input = String(value);\n\n  return input.replace(\n    /\\d/g,\n    (digit) =>\n      KHMER_DIGITS[Number(digit)]??digit,\n  );\n}\n\nexport function fromKhmerNumber(\n  value: string,\n): number {\n  const normalized = value\n    .replace(\n      /[០-៩]/g,\n      (digit) => KHMER_TO_ARABIC[digit]??digit,\n    )\n    .replace(/,/g, \"\")\n    .trim();\n\n  if (!normalized) {\n    return 0;\n  }\n\n  const result = Number(normalized);\n\n  return Number.isFinite(result)\n    ? result\n    : 0;\n}","import {\n  parseNumber,\n} from \"./number\";\n\nimport {\n  fromKhmerNumber,\n} from \"./khmer\";\n\n/**\n * Parse a Khmer Riel formatted value.\n *\n * Supports:\n *\n * 10,000\n * 10,000 ៛\n * ៛10,000\n * ៛ 10,000\n * 10,000៛\n * ១០,០០០\n */\nexport function parseKHR(\n  value: unknown,\n): number {\n  if (\n    value === null ||\n    value === undefined ||\n    value === \"\"\n  ) {\n    return 0;\n  }\n\n  if (typeof value === \"number\") {\n    return Number.isFinite(value)\n      ? value\n      : 0;\n  }\n\n  if (typeof value !== \"string\") {\n    return 0;\n  }\n\n  const cleaned = value\n    .replace(/៛/g, \"\")\n    .replace(/រៀល/g, \"\")\n    .replace(/\\s+/g, \"\")\n    .trim();\n\n  if (!cleaned) {\n    return 0;\n  }\n\n  if (/[០-៩]/.test(cleaned)) {\n    return fromKhmerNumber(cleaned);\n  }\n\n  return parseNumber(cleaned);\n}\n\n/**\n * Validate a money input.\n */\nexport function isValidMoney(\n  value: unknown,\n): boolean {\n  if (\n    value === null ||\n    value === undefined ||\n    value === \"\"\n  ) {\n    return false;\n  }\n\n  if (typeof value === \"number\") {\n    return Number.isFinite(value);\n  }\n\n  if (typeof value !== \"string\") {\n    return false;\n  }\n\n  const input = value.trim();\n\n  if (!input) {\n    return false;\n  }\n\n  const cleaned = input\n    .replace(/៛/g, \"\")\n    .replace(/រៀល/g, \"\")\n    .replace(/\\s+/g, \"\")\n    .trim();\n\n  if (!cleaned) {\n    return false;\n  }\n\n  const arabic = cleaned.replace(\n    /[០-៩]/g,\n    (digit) => {\n      const map: Record<string, string> = {\n        \"០\": \"0\",\n        \"១\": \"1\",\n        \"២\": \"2\",\n        \"៣\": \"3\",\n        \"៤\": \"4\",\n        \"៥\": \"5\",\n        \"៦\": \"6\",\n        \"៧\": \"7\",\n        \"៨\": \"8\",\n        \"៩\": \"9\",\n      };\n\n      return map[digit] ?? digit;\n    },\n  );\n\n  const normalized = arabic.replace(\n    /,/g,\n    \"\",\n  );\n\n  return /^[-+]?\\d+(\\.\\d+)?$/.test(\n    normalized,\n  );\n}","const DIGITS = [\n  \"សូន្យ\",\n  \"មួយ\",\n  \"ពីរ\",\n  \"បី\",\n  \"បួន\",\n  \"ប្រាំ\",\n  \"ប្រាំមួយ\",\n  \"ប្រាំពីរ\",\n  \"ប្រាំបី\",\n  \"ប្រាំបួន\",\n];\n\nconst TENS: Record<number, string> = {\n  2: \"ម្ភៃ\",\n  3: \"សាមសិប\",\n  4: \"សែសិប\",\n  5: \"ហាសិប\",\n  6: \"ហុកសិប\",\n  7: \"ចិតសិប\",\n  8: \"ប៉ែតសិប\",\n  9: \"កៅសិប\",\n};\n\nconst SCALES = [\n  \"\",\n  \"ពាន់\",\n  \"លាន\",\n  \"ពាន់លាន\",\n  \"ទ្រីលាន\",\n  \"ក្វាទ្រីលាន\",\n];\n\nfunction under100(\n  value: number,\n): string {\n  if (value < 10) {\n    return DIGITS[value]?? '';\n  }\n\n  if (value === 10) {\n    return \"ដប់\";\n  }\n\n  if (value < 20) {\n    return `ដប់${DIGITS[value - 10]}`;\n  }\n\n  const tens = Math.floor(value / 10);\n  var ones: number;\n  ones = value % 10;\n\n  let result = TENS[tens];\n\n  if (ones > 0) {\n    result += DIGITS[ones]??'';\n  }\n\n  return result??'';\n}\n\nfunction under1000(\n  value: number,\n): string {\n  if (value === 0) {\n    return \"\";\n  }\n\n  const hundreds =\n    Math.floor(value / 100);\n\n  const remainder =\n    value % 100;\n\n  let result = \"\";\n\n  if (hundreds > 0) {\n    result +=\n      `${DIGITS[hundreds]}រយ`;\n  }\n\n  if (remainder > 0) {\n    result += under100(remainder);\n  }\n\n  return result;\n}\n\nfunction integerToKhmerText(\n  value: number,\n): string {\n  if (value === 0) {\n    return DIGITS[0]??'';\n  }\n\n  let number = value;\n  let groupIndex = 0;\n  let result = \"\";\n\n  while (number > 0) {\n    const group = number % 1000;\n\n    if (group !== 0) {\n      const text =\n        under1000(group);\n\n      const scale =\n        SCALES[groupIndex] ?? \"\";\n\n      result =\n        text + scale + result;\n    }\n\n    number =\n      Math.floor(number / 1000);\n\n    groupIndex++;\n  }\n\n  return result;\n}\n\n\n/**\n * Convert a number to Khmer text.\n *\n * Example:\n *\n * 123 -> មួយរយម្ភៃបី\n */\nexport function numberToKhmerText(\n  value: number | string,\n): string {\n  if (\n    value === null ||\n    value === undefined ||\n    value === \"\"\n  ) {\n    return DIGITS[0]??'';\n  }\n\n  const normalized =\n    String(value)\n      .replace(/,/g, \"\")\n      .trim();\n\n  const number =\n    Number(normalized);\n\n  if (!Number.isFinite(number)) {\n    return \"\";\n  }\n\n  if (number === 0) {\n    return DIGITS[0]??'';\n  }\n\n  if (number < 0) {\n    return `ដក${numberToKhmerText(\n      Math.abs(number),\n    )}`;\n  }\n\n  return integerToKhmerText(\n    Math.floor(number),\n  );\n}\n\n/**\n * Convert a decimal number to Khmer text.\n *\n * Example:\n *\n * 123.45\n * ->\n * មួយរយម្ភៃបីចុចបួនប្រាំ\n */\nexport function decimalToKhmerText(\n  value: number | string,\n): string {\n  if (\n    value === null ||\n    value === undefined ||\n    value === \"\"\n  ) {\n    return DIGITS[0]??'';\n  }\n\n  const normalized =\n    String(value)\n      .replace(/,/g, \"\")\n      .trim();\n\n  const number =\n    Number(normalized);\n\n  if (!Number.isFinite(number)) {\n    return \"\";\n  }\n\n  if (!normalized.includes(\".\")) {\n    return numberToKhmerText(\n      normalized,\n    );\n  }\n\n  const [\n    integerPart='',\n    decimalPart = '',\n  ] = normalized.split(\".\");\n\n  const integerText =\n    numberToKhmerText(integerPart);\n\n  const decimalText = numberToKhmerText(decimalPart);\n  // const decimalText =\n  //   decimalPart\n  //     .split(\"\")\n  //     .map(\n  //       (digit) =>\n  //         DIGITS[Number(digit)],\n  //     )\n  //     .join(\"\");\n\n  return `${integerText}ចុច${decimalText}`;\n}\n\n/**\n * Format KHR amount as Khmer text.\n *\n * Example:\n *\n * 10000 -> មួយម៉ឺនរៀល\n */\nexport function numberToKhmerMoneyText(\n  value: number | string,\n): string {\n  return `${numberToKhmerText(value)}រៀល`;\n}"]}