{"version":3,"sources":["../src/string/index.ts","../src/number/index.ts","../src/date/index.ts","../src/object/index.ts","../src/array/index.ts","../src/formatter/index.ts","../src/index.ts"],"names":["intervals"],"mappings":";;;;;;;;;;;AAAA,IAAA,cAAA,GAAA,EAAA;AAAA,QAAA,CAAA,cAAA,EAAA;AAAA,EAAA,UAAA,EAAA,MAAA,UAAA;AAAA,EAAA,YAAA,EAAA,MAAA,YAAA;AAAA,EAAA,OAAA,EAAA,MAAA,OAAA;AAAA,EAAA,QAAA,EAAA,MAAA;AAAA,CAAA,CAAA;AAOO,SAAS,QAAQ,IAAA,EAAsB;AAC5C,EAAA,OAAO,IAAA,CACJ,QAAA,EAAS,CACT,WAAA,EAAY,CACZ,MAAK,CACL,SAAA,CAAU,KAAK,CAAA,CACf,OAAA,CAAQ,kBAAA,EAAoB,EAAE,CAAA,CAC9B,OAAA,CAAQ,WAAA,EAAa,EAAE,CAAA,CACvB,OAAA,CAAQ,YAAY,GAAG,CAAA,CACvB,OAAA,CAAQ,UAAA,EAAY,EAAE,CAAA;AAC3B;AASO,SAAS,WAAW,IAAA,EAAsB;AAC/C,EAAA,IAAI,CAAC,MAAM,OAAO,EAAA;AAClB,EAAA,OAAO,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,CAAE,WAAA,KAAgB,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA,CAAE,WAAA,EAAY;AAClE;AAWO,SAAS,QAAA,CAAS,IAAA,EAAc,SAAA,GAAoB,GAAA,EAAK,SAAiB,KAAA,EAAe;AAC9F,EAAA,IAAI,IAAA,CAAK,MAAA,IAAU,SAAA,EAAW,OAAO,IAAA;AACrC,EAAA,OAAO,KAAK,KAAA,CAAM,CAAA,EAAG,SAAA,GAAY,MAAA,CAAO,MAAM,CAAA,GAAI,MAAA;AACpD;AAUO,SAAS,YAAA,CACd,MAAA,GAAiB,EAAA,EACjB,OAAA,GAAkB,gEAAA,EACV;AACR,EAAA,IAAI,MAAA,GAAS,EAAA;AACb,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,EAAQ,CAAA,EAAA,EAAK;AAC/B,IAAA,MAAA,IAAU,OAAA,CAAQ,OAAO,IAAA,CAAK,KAAA,CAAM,KAAK,MAAA,EAAO,GAAI,OAAA,CAAQ,MAAM,CAAC,CAAA;AAAA,EACrE;AACA,EAAA,OAAO,MAAA;AACT;;;AC9DA,IAAA,cAAA,GAAA,EAAA;AAAA,QAAA,CAAA,cAAA,EAAA;AAAA,EAAA,KAAA,EAAA,MAAA,KAAA;AAAA,EAAA,YAAA,EAAA,MAAA,YAAA;AAAA,EAAA,OAAA,EAAA,MAAA,OAAA;AAAA,EAAA,OAAA,EAAA,MAAA;AAAA,CAAA,CAAA;AAUO,SAAS,YAAA,CACd,KAAA,EACA,QAAA,GAAmB,CAAA,EACnB,SAAiB,OAAA,EACT;AACR,EAAA,OAAO,IAAI,IAAA,CAAK,YAAA,CAAa,MAAA,EAAQ;AAAA,IACnC,qBAAA,EAAuB,QAAA;AAAA,IACvB,qBAAA,EAAuB;AAAA,GACxB,CAAA,CAAE,MAAA,CAAO,KAAK,CAAA;AACjB;AAaO,SAAS,KAAA,CAAM,KAAA,EAAe,GAAA,EAAa,GAAA,EAAqB;AACrE,EAAA,OAAO,KAAK,GAAA,CAAI,IAAA,CAAK,IAAI,KAAA,EAAO,GAAG,GAAG,GAAG,CAAA;AAC3C;AAWO,SAAS,OAAA,CAAQ,KAAA,EAAe,QAAA,GAAmB,CAAA,EAAW;AACnE,EAAA,MAAM,UAAA,GAAa,IAAA,CAAK,GAAA,CAAI,EAAA,EAAI,QAAQ,CAAA;AACxC,EAAA,OAAO,IAAA,CAAK,KAAA,CAAM,KAAA,GAAQ,UAAU,CAAA,GAAI,UAAA;AAC1C;AAYO,SAAS,OAAA,CAAQ,KAAA,EAAe,KAAA,EAAe,QAAA,GAAmB,CAAA,EAAW;AAClF,EAAA,IAAI,KAAA,KAAU,GAAG,OAAO,CAAA;AACxB,EAAA,OAAO,OAAA,CAAS,KAAA,GAAQ,KAAA,GAAS,GAAA,EAAK,QAAQ,CAAA;AAChD;;;AC/DA,IAAA,YAAA,GAAA,EAAA;AAAA,QAAA,CAAA,YAAA,EAAA;AAAA,EAAA,UAAA,EAAA,MAAA,UAAA;AAAA,EAAA,WAAA,EAAA,MAAA,WAAA;AAAA,EAAA,OAAA,EAAA,MAAA;AAAA,CAAA,CAAA;AAUO,SAAS,UAAA,CACd,MACA,OAAA,GAAsC,EAAE,WAAW,OAAA,EAAQ,EAC3D,SAAiB,OAAA,EACT;AACR,EAAA,MAAM,OAAA,GAAU,IAAI,IAAA,CAAK,IAAI,CAAA;AAC7B,EAAA,IAAI,CAAC,WAAA,CAAY,OAAO,CAAA,EAAG;AACzB,IAAA,MAAM,IAAI,MAAM,uBAAuB,CAAA;AAAA,EACzC;AACA,EAAA,OAAO,IAAI,IAAA,CAAK,cAAA,CAAe,QAAQ,OAAO,CAAA,CAAE,OAAO,OAAO,CAAA;AAChE;AAUO,SAAS,QAAQ,IAAA,EAAsC;AAC5D,EAAA,MAAM,OAAA,GAAU,IAAI,IAAA,CAAK,IAAI,CAAA;AAC7B,EAAA,IAAI,CAAC,WAAA,CAAY,OAAO,CAAA,EAAG;AACzB,IAAA,MAAM,IAAI,MAAM,uBAAuB,CAAA;AAAA,EACzC;AAEA,EAAA,MAAM,OAAA,GAAU,KAAK,KAAA,CAAA,CAAO,IAAA,CAAK,KAAI,GAAI,OAAA,CAAQ,OAAA,EAAQ,IAAK,GAAI,CAAA;AAClE,EAAA,MAAM,WAAW,OAAA,GAAU,CAAA;AAC3B,EAAA,MAAM,UAAA,GAAa,IAAA,CAAK,GAAA,CAAI,OAAO,CAAA;AAEnC,EAAA,MAAM,SAAA,GAAgC;AAAA,IACpC,CAAC,QAAQ,OAAQ,CAAA;AAAA,IACjB,CAAC,SAAS,MAAO,CAAA;AAAA,IACjB,CAAC,QAAQ,MAAM,CAAA;AAAA,IACf,CAAC,OAAO,KAAK,CAAA;AAAA,IACb,CAAC,QAAQ,IAAI,CAAA;AAAA,IACb,CAAC,UAAU,EAAE,CAAA;AAAA,IACb,CAAC,UAAU,CAAC;AAAA,GACd;AAEA,EAAA,KAAA,MAAW,CAAC,IAAA,EAAM,iBAAiB,CAAA,IAAK,SAAA,EAAW;AACjD,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,UAAA,GAAa,iBAAiB,CAAA;AAC1D,IAAA,IAAI,YAAY,CAAA,EAAG;AACjB,MAAA,MAAM,MAAA,GAAS,QAAA,KAAa,CAAA,GAAI,GAAA,GAAM,EAAA;AACtC,MAAA,OAAO,QAAA,GAAW,CAAA,GAAA,EAAM,QAAQ,CAAA,CAAA,EAAI,IAAI,CAAA,EAAG,MAAM,CAAA,CAAA,GAAK,CAAA,EAAG,QAAQ,CAAA,CAAA,EAAI,IAAI,GAAG,MAAM,CAAA,IAAA,CAAA;AAAA,IACpF;AAAA,EACF;AAEA,EAAA,OAAO,UAAA;AACT;AAWO,SAAS,YAAY,IAAA,EAAuC;AACjE,EAAA,MAAM,UAAU,IAAA,YAAgB,IAAA,GAAO,IAAA,GAAO,IAAI,KAAK,IAAI,CAAA;AAC3D,EAAA,OAAO,CAAC,KAAA,CAAM,OAAA,CAAQ,OAAA,EAAS,CAAA;AACjC;;;ACzEA,IAAA,cAAA,GAAA,EAAA;AAAA,QAAA,CAAA,cAAA,EAAA;AAAA,EAAA,SAAA,EAAA,MAAA,SAAA;AAAA,EAAA,KAAA,EAAA,MAAA,KAAA;AAAA,EAAA,IAAA,EAAA,MAAA,IAAA;AAAA,EAAA,IAAA,EAAA,MAAA;AAAA,CAAA,CAAA;AASO,SAAS,UAAa,GAAA,EAAW;AACtC,EAAA,IAAI,GAAA,KAAQ,IAAA,IAAQ,OAAO,GAAA,KAAQ,QAAA,EAAU;AAC3C,IAAA,OAAO,GAAA;AAAA,EACT;AAEA,EAAA,IAAI,eAAe,IAAA,EAAM;AACvB,IAAA,OAAO,IAAI,IAAA,CAAK,GAAA,CAAI,OAAA,EAAS,CAAA;AAAA,EAC/B;AAEA,EAAA,IAAI,eAAe,KAAA,EAAO;AACxB,IAAA,OAAO,GAAA,CAAI,GAAA,CAAI,CAAA,IAAA,KAAQ,SAAA,CAAU,IAAI,CAAC,CAAA;AAAA,EACxC;AAEA,EAAA,IAAI,eAAe,MAAA,EAAQ;AACzB,IAAA,MAAM,YAAY,EAAC;AACnB,IAAA,KAAA,MAAW,OAAO,GAAA,EAAK;AACrB,MAAA,IAAI,OAAO,SAAA,CAAU,cAAA,CAAe,IAAA,CAAK,GAAA,EAAK,GAAG,CAAA,EAAG;AAClD,QAAA,SAAA,CAAU,GAAG,CAAA,GAAI,SAAA,CAAU,GAAA,CAAI,GAAG,CAAC,CAAA;AAAA,MACrC;AAAA,IACF;AACA,IAAA,OAAO,SAAA;AAAA,EACT;AAEA,EAAA,OAAO,GAAA;AACT;AAWO,SAAS,KAAA,CAAyC,WAAc,OAAA,EAA0B;AAC/F,EAAA,IAAI,CAAC,OAAA,CAAQ,MAAA,EAAQ,OAAO,MAAA;AAE5B,EAAA,MAAM,MAAA,GAAS,UAAU,MAAM,CAAA;AAE/B,EAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC5B,IAAA,IAAI,CAAC,MAAA,IAAU,OAAO,MAAA,KAAW,QAAA,EAAU;AAE3C,IAAA,KAAA,MAAW,OAAO,MAAA,EAAQ;AACxB,MAAA,IAAI,OAAO,SAAA,CAAU,cAAA,CAAe,IAAA,CAAK,MAAA,EAAQ,GAAG,CAAA,EAAG;AACrD,QAAA,MAAM,WAAA,GAAc,OAAO,GAAG,CAAA;AAC9B,QAAA,MAAM,WAAA,GAAc,OAAO,GAAG,CAAA;AAE9B,QAAA,IACE,eACA,OAAO,WAAA,KAAgB,QAAA,IACvB,CAAC,MAAM,OAAA,CAAQ,WAAW,CAAA,IAC1B,WAAA,IACA,OAAO,WAAA,KAAgB,QAAA,IACvB,CAAC,KAAA,CAAM,OAAA,CAAQ,WAAW,CAAA,EAC1B;AACA,UAAA,MAAA,CAAO,GAAG,CAAA,GAAI,KAAA;AAAA,YACZ,WAAA;AAAA,YACA;AAAA,WACF;AAAA,QACF,CAAA,MAAO;AACL,UAAA,MAAA,CAAO,GAAG,CAAA,GAAI,SAAA,CAAU,WAAW,CAAA;AAAA,QACrC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,MAAA;AACT;AAUO,SAAS,IAAA,CACd,KACA,IAAA,EACY;AACZ,EAAA,MAAM,MAAA,GAAS,EAAE,GAAG,GAAA,EAAI;AACxB,EAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,IAAA,OAAO,OAAO,GAAG,CAAA;AAAA,EACnB;AACA,EAAA,OAAO,MAAA;AACT;AAUO,SAAS,IAAA,CACd,KACA,IAAA,EACY;AACZ,EAAA,MAAM,SAAS,EAAC;AAChB,EAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,IAAA,IAAI,OAAO,SAAA,CAAU,cAAA,CAAe,IAAA,CAAK,GAAA,EAAK,GAAG,CAAA,EAAG;AAClD,MAAA,MAAA,CAAO,GAAG,CAAA,GAAI,GAAA,CAAI,GAAG,CAAA;AAAA,IACvB;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;;;ACrHA,IAAA,aAAA,GAAA,EAAA;AAAA,QAAA,CAAA,aAAA,EAAA;AAAA,EAAA,KAAA,EAAA,MAAA,KAAA;AAAA,EAAA,OAAA,EAAA,MAAA,OAAA;AAAA,EAAA,OAAA,EAAA,MAAA,OAAA;AAAA,EAAA,QAAA,EAAA,MAAA,QAAA;AAAA,EAAA,MAAA,EAAA,MAAA;AAAA,CAAA,CAAA;AAQO,SAAS,OAAU,GAAA,EAAe;AACvC,EAAA,OAAO,CAAC,GAAG,IAAI,GAAA,CAAI,GAAG,CAAC,CAAA;AACzB;AAUO,SAAS,KAAA,CAAS,KAAU,IAAA,EAAqB;AACtD,EAAA,IAAI,QAAQ,CAAA,EAAG;AACb,IAAA,MAAM,IAAI,MAAM,mCAAmC,CAAA;AAAA,EACrD;AAEA,EAAA,MAAM,SAAgB,EAAC;AACvB,EAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,GAAA,CAAI,MAAA,EAAQ,KAAK,IAAA,EAAM;AACzC,IAAA,MAAA,CAAO,KAAK,GAAA,CAAI,KAAA,CAAM,CAAA,EAAG,CAAA,GAAI,IAAI,CAAC,CAAA;AAAA,EACpC;AACA,EAAA,OAAO,MAAA;AACT;AAYO,SAAS,OAAA,CAAW,GAAA,EAAgB,KAAA,GAAgB,CAAA,EAAQ;AACjE,EAAA,IAAI,SAAS,CAAA,EAAG;AACd,IAAA,OAAO,GAAA;AAAA,EACT;AAEA,EAAA,OAAO,GAAA,CAAI,MAAA,CAAY,CAAC,GAAA,EAAK,GAAA,KAAQ;AACnC,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA,EAAG;AACtB,MAAA,GAAA,CAAI,KAAK,GAAG,OAAA,CAAW,GAAA,EAAK,KAAA,GAAQ,CAAC,CAAC,CAAA;AAAA,IACxC,CAAA,MAAO;AACL,MAAA,GAAA,CAAI,KAAK,GAAQ,CAAA;AAAA,IACnB;AACA,IAAA,OAAO,GAAA;AAAA,EACT,CAAA,EAAG,EAAE,CAAA;AACP;AAcO,SAAS,OAAA,CACd,KACA,GAAA,EACqB;AACrB,EAAA,OAAO,GAAA,CAAI,MAAA;AAAA,IACT,CAAC,QAAQ,IAAA,KAAS;AAChB,MAAA,MAAM,QAAA,GAAW,OAAO,GAAA,KAAQ,UAAA,GAAa,MAAA,CAAO,GAAA,CAAI,IAAI,CAAC,CAAA,GAAI,MAAA,CAAO,IAAA,CAAK,GAAG,CAAC,CAAA;AAEjF,MAAA,IAAI,CAAC,MAAA,CAAO,QAAQ,CAAA,EAAG;AACrB,QAAA,MAAA,CAAO,QAAQ,IAAI,EAAC;AAAA,MACtB;AAEA,MAAA,MAAA,CAAO,QAAQ,CAAA,EAAG,IAAA,CAAK,IAAI,CAAA;AAC3B,MAAA,OAAO,MAAA;AAAA,IACT,CAAA;AAAA,IACA;AAAC,GACH;AACF;AA4GO,SAAS,QAAA,CACd,KACA,OAAA,EACiF;AACjF,EAAA,MAAM,QAAQ,GAAA,CAAI,MAAA;AAElB,EAAA,IAAI,OAAA,CAAQ,SAAS,QAAA,EAAU;AAC7B,IAAA,MAAM,EAAE,MAAA,EAAQ,KAAA,EAAM,GAAI,OAAA;AAE1B,IAAA,IAAI,SAAS,CAAA,EAAG;AACd,MAAA,MAAM,IAAI,MAAM,6BAA6B,CAAA;AAAA,IAC/C;AACA,IAAA,IAAI,SAAS,CAAA,EAAG;AACd,MAAA,MAAM,IAAI,MAAM,8BAA8B,CAAA;AAAA,IAChD;AAEA,IAAA,MAAM,IAAA,GAAO,GAAA,CAAI,KAAA,CAAM,MAAA,EAAQ,SAAS,KAAK,CAAA;AAC7C,IAAA,MAAM,OAAA,GAAU,SAAS,KAAA,GAAQ,KAAA;AAEjC,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,QAAA;AAAA,MACN,IAAA;AAAA,MACA,KAAA;AAAA,MACA,OAAA;AAAA,MACA,MAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAEA,EAAA,IAAI,OAAA,CAAQ,SAAS,MAAA,EAAQ;AAC3B,IAAA,MAAM,EAAE,IAAA,EAAM,QAAA,EAAS,GAAI,OAAA;AAE3B,IAAA,IAAI,OAAO,CAAA,EAAG;AACZ,MAAA,MAAM,IAAI,MAAM,yCAAyC,CAAA;AAAA,IAC3D;AACA,IAAA,IAAI,YAAY,CAAA,EAAG;AACjB,MAAA,MAAM,IAAI,MAAM,kCAAkC,CAAA;AAAA,IACpD;AAEA,IAAA,MAAM,MAAA,GAAA,CAAU,OAAO,CAAA,IAAK,QAAA;AAC5B,IAAA,MAAM,IAAA,GAAO,GAAA,CAAI,KAAA,CAAM,MAAA,EAAQ,SAAS,QAAQ,CAAA;AAChD,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,IAAA,CAAK,KAAA,GAAQ,QAAQ,CAAA;AAC7C,IAAA,MAAM,UAAU,IAAA,GAAO,UAAA;AAEvB,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,MAAA;AAAA,MACN,IAAA;AAAA,MACA,KAAA;AAAA,MACA,OAAA;AAAA,MACA,IAAA;AAAA,MACA,QAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAEA,EAAA,IAAI,OAAA,CAAQ,SAAS,QAAA,EAAU;AAC7B,IAAA,MAAM,EAAE,MAAA,EAAQ,KAAA,EAAO,cAAA,EAAe,GAAI,OAAA;AAE1C,IAAA,IAAI,SAAS,CAAA,EAAG;AACd,MAAA,MAAM,IAAI,MAAM,8BAA8B,CAAA;AAAA,IAChD;AAEA,IAAA,IAAI,UAAA,GAAa,CAAA;AAEjB,IAAA,IAAI,MAAA,KAAW,MAAA,IAAa,MAAA,KAAW,IAAA,EAAM;AAE3C,MAAA,UAAA,GAAa,IAAI,SAAA,CAAU,CAAC,SAAS,cAAA,CAAe,IAAI,MAAM,MAAM,CAAA;AACpE,MAAA,IAAI,eAAe,EAAA,EAAI;AACrB,QAAA,MAAM,IAAI,MAAM,2BAA2B,CAAA;AAAA,MAC7C;AACA,MAAA,UAAA,IAAc,CAAA;AAAA,IAChB;AAEA,IAAA,MAAM,IAAA,GAAO,GAAA,CAAI,KAAA,CAAM,UAAA,EAAY,aAAa,KAAK,CAAA;AACrD,IAAA,MAAM,OAAA,GAAU,aAAa,KAAA,GAAQ,KAAA;AAErC,IAAA,MAAM,UAAA,GAAa,OAAA,IAAW,IAAA,CAAK,MAAA,GAAS,CAAA,GAAI,cAAA,CAAe,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS,CAAC,CAAE,CAAA,GAAI,IAAA;AACzF,IAAA,MAAM,aAAa,MAAA,IAAU,IAAA;AAE7B,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,QAAA;AAAA,MACN,IAAA;AAAA,MACA,KAAA;AAAA,MACA,OAAA;AAAA,MACA,UAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAEA,EAAA,MAAM,IAAI,MAAM,yBAAyB,CAAA;AAC3C;;;AC5RA,IAAA,iBAAA,GAAA,EAAA;AAAA,QAAA,CAAA,iBAAA,EAAA;AAAA,EAAA,eAAA,EAAA,MAAA;AAAA,CAAA,CAAA;AA0BO,SAAS,eAAA,CACd,SAAA,EACA,MAAA,GAAyB,WAAA,EACzB,SAAiB,OAAA,EACA;AACjB,EAAA,IAAI,WAAW,WAAA,EAAa;AAC1B,IAAA,OAAO,SAAA;AAAA,EACT;AAEA,EAAA,MAAM,IAAA,GAAO,IAAI,IAAA,CAAK,SAAS,CAAA;AAG/B,EAAA,IAAI,KAAA,CAAM,IAAA,CAAK,OAAA,EAAS,CAAA,EAAG;AACzB,IAAA,OAAO,SAAA;AAAA,EACT;AAEA,EAAA,IAAI;AACF,IAAA,QAAQ,MAAA;AAAQ,MACd,KAAK,MAAA,EAAQ;AAEX,QAAA,MAAM,OAAA,GAAsC;AAAA,UAC1C,OAAA,EAAS,MAAA;AAAA,UACT,IAAA,EAAM,SAAA;AAAA,UACN,KAAA,EAAO,MAAA;AAAA,UACP,GAAA,EAAK;AAAA,SACP;AACA,QAAA,OAAO,IAAI,IAAA,CAAK,cAAA,CAAe,QAAQ,OAAO,CAAA,CAAE,OAAO,IAAI,CAAA;AAAA,MAC7D;AAAA,MAEA,KAAK,SAAA,EAAW;AAEd,QAAA,MAAM,OAAA,GAAsC;AAAA,UAC1C,OAAA,EAAS,OAAA;AAAA,UACT,IAAA,EAAM,SAAA;AAAA,UACN,KAAA,EAAO,MAAA;AAAA,UACP,GAAA,EAAK;AAAA,SACP;AACA,QAAA,OAAO,IAAI,IAAA,CAAK,cAAA,CAAe,QAAQ,OAAO,CAAA,CAAE,OAAO,IAAI,CAAA;AAAA,MAC7D;AAAA,MAEA,KAAK,MAAA,EAAQ;AAEX,QAAA,MAAM,OAAA,GAAsC;AAAA,UAC1C,IAAA,EAAM,SAAA;AAAA,UACN,KAAA,EAAO,MAAA;AAAA,UACP,GAAA,EAAK;AAAA,SACP;AACA,QAAA,OAAO,IAAI,IAAA,CAAK,cAAA,CAAe,QAAQ,OAAO,CAAA,CAAE,OAAO,IAAI,CAAA;AAAA,MAC7D;AAAA,MAEA,KAAK,QAAA,EAAU;AAEb,QAAA,MAAM,OAAA,GAAsC;AAAA,UAC1C,IAAA,EAAM,SAAA;AAAA,UACN,KAAA,EAAO,OAAA;AAAA,UACP,GAAA,EAAK;AAAA,SACP;AACA,QAAA,OAAO,IAAI,IAAA,CAAK,cAAA,CAAe,QAAQ,OAAO,CAAA,CAAE,OAAO,IAAI,CAAA;AAAA,MAC7D;AAAA,MAEA,KAAK,OAAA,EAAS;AAEZ,QAAA,MAAM,OAAA,GAAsC;AAAA,UAC1C,IAAA,EAAM,SAAA;AAAA,UACN,KAAA,EAAO,SAAA;AAAA,UACP,GAAA,EAAK;AAAA,SACP;AACA,QAAA,OAAO,IAAI,IAAA,CAAK,cAAA,CAAe,QAAQ,OAAO,CAAA,CAAE,OAAO,IAAI,CAAA;AAAA,MAC7D;AAAA,MAEA,KAAK,UAAA,EAAY;AAEf,QAAA,MAAM,QAAA,GAAW,IAAI,IAAA,CAAK,cAAA,CAAe,MAAA,EAAQ;AAAA,UAC/C,IAAA,EAAM,SAAA;AAAA,UACN,KAAA,EAAO,OAAA;AAAA,UACP,GAAA,EAAK;AAAA,SACN,CAAA,CAAE,MAAA,CAAO,IAAI,CAAA;AAEd,QAAA,MAAM,QAAA,GAAW,IAAI,IAAA,CAAK,cAAA,CAAe,MAAA,EAAQ;AAAA,UAC/C,IAAA,EAAM,SAAA;AAAA,UACN,MAAA,EAAQ,SAAA;AAAA,UACR,MAAA,EAAQ,SAAA;AAAA,UACR,MAAA,EAAQ;AAAA,SACT,CAAA,CAAE,MAAA,CAAO,IAAI,CAAA;AAEd,QAAA,OAAO,CAAA,EAAG,QAAQ,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAA;AAAA,MAChC;AAAA,MAEA,KAAK,MAAA,EAAQ;AAEX,QAAA,MAAM,OAAA,GAAsC;AAAA,UAC1C,IAAA,EAAM,SAAA;AAAA,UACN,MAAA,EAAQ,SAAA;AAAA,UACR,MAAA,EAAQ,SAAA;AAAA,UACR,MAAA,EAAQ;AAAA,SACV;AACA,QAAA,OAAO,IAAI,IAAA,CAAK,cAAA,CAAe,QAAQ,OAAO,CAAA,CAAE,OAAO,IAAI,CAAA;AAAA,MAC7D;AAAA,MAEA,KAAK,KAAA,EAAO;AAEV,QAAA,OAAO,KAAK,WAAA,EAAY;AAAA,MAC1B;AAAA,MAEA,KAAK,UAAA,EAAY;AAEf,QAAA,OAAO,kBAAA,CAAmB,MAAM,MAAM,CAAA;AAAA,MACxC;AAAA,MAEA;AACE,QAAA,OAAO,SAAA;AAAA;AACX,EACF,SAAS,KAAA,EAAO;AACd,IAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,kCAAA,EAAqC,MAAM,CAAA,CAAA,CAAA,EAAK,KAAK,CAAA;AACnE,IAAA,OAAO,SAAA;AAAA,EACT;AACF;AAQA,SAAS,kBAAA,CAAmB,MAAY,MAAA,EAAwB;AAC9D,EAAA,MAAM,GAAA,GAAM,KAAK,GAAA,EAAI;AACrB,EAAA,MAAM,gBAAgB,IAAA,CAAK,KAAA,CAAA,CAAO,MAAM,IAAA,CAAK,OAAA,MAAa,GAAI,CAAA;AAC9D,EAAA,MAAM,WAAW,aAAA,GAAgB,CAAA;AACjC,EAAA,MAAM,UAAA,GAAa,IAAA,CAAK,GAAA,CAAI,aAAa,CAAA;AAEzC,EAAA,MAAM,SAAA,GAA0D;AAAA,IAC9D,CAAC,QAAQ,OAAQ,CAAA;AAAA,IACjB,CAAC,SAAS,MAAO,CAAA;AAAA,IACjB,CAAC,QAAQ,MAAM,CAAA;AAAA,IACf,CAAC,OAAO,KAAK,CAAA;AAAA,IACb,CAAC,QAAQ,IAAI,CAAA;AAAA,IACb,CAAC,UAAU,EAAE,CAAA;AAAA,IACb,CAAC,UAAU,CAAC;AAAA,GACd;AAEA,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAM,IAAI,IAAA,CAAK,kBAAA,CAAmB,QAAQ,EAAE,OAAA,EAAS,QAAQ,CAAA;AAEnE,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,aAAa,CAAA,IAAK,SAAA,EAAW;AAC7C,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,UAAA,GAAa,aAAa,CAAA;AACtD,MAAA,IAAI,YAAY,CAAA,EAAG;AACjB,QAAA,OAAO,IAAI,MAAA,CAAO,QAAA,GAAW,QAAA,GAAW,CAAC,UAAU,IAAI,CAAA;AAAA,MACzD;AAAA,IACF;AAEA,IAAA,OAAO,GAAA,CAAI,MAAA,CAAO,CAAA,EAAG,QAAQ,CAAA;AAAA,EAC/B,SAAS,KAAA,EAAO;AAEd,IAAA,MAAMA,UAAAA,GAAqC;AAAA,MACzC,CAAC,MAAM,OAAQ,CAAA;AAAA,MACf,CAAC,QAAQ,MAAO,CAAA;AAAA,MAChB,CAAC,WAAW,MAAM,CAAA;AAAA,MAClB,CAAC,QAAQ,KAAK,CAAA;AAAA,MACd,CAAC,SAAS,IAAI,CAAA;AAAA,MACd,CAAC,UAAU,EAAE,CAAA;AAAA,MACb,CAAC,WAAW,CAAC;AAAA,KACf;AAEA,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,iBAAiB,CAAA,IAAKA,UAAAA,EAAW;AACjD,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,UAAA,GAAa,iBAAiB,CAAA;AAC1D,MAAA,IAAI,YAAY,CAAA,EAAG;AACjB,QAAA,MAAM,MAAA,GAAS,QAAA,KAAa,CAAA,IAAK,IAAA,KAAS,SAAS,GAAA,GAAM,EAAA;AACzD,QAAA,OAAO,QAAA,GACH,CAAA,KAAA,EAAQ,QAAQ,CAAA,CAAA,EAAI,IAAI,CAAA,EAAG,MAAM,CAAA,CAAA,GACjC,CAAA,OAAA,EAAU,QAAQ,CAAA,CAAA,EAAI,IAAI,GAAG,MAAM,CAAA,CAAA;AAAA,MACzC;AAAA,IACF;AAEA,IAAA,OAAO,gBAAA;AAAA,EACT;AACF;;;AC9KA,IAAO,aAAA,GAAQ;AAAA,EACb,GAAG,cAAA;AAAA,EACH,GAAG,cAAA;AAAA,EACH,GAAG,YAAA;AAAA,EACH,GAAG,cAAA;AAAA,EACH,GAAG,aAAA;AAAA,EACH,GAAG;AACL","file":"index.cjs","sourcesContent":["/**\n * Converts a string to a URL-friendly slug\n * @param text - The text to slugify\n * @returns The slugified string\n * @example\n * slugify('Hello World!') // returns 'hello-world'\n */\nexport function slugify(text: string): string {\n  return text\n    .toString()\n    .toLowerCase()\n    .trim()\n    .normalize('NFD')\n    .replace(/[\\u0300-\\u036f]/g, '')\n    .replace(/[^\\w\\s-]/g, '')\n    .replace(/[\\s_-]+/g, '-')\n    .replace(/^-+|-+$/g, '');\n}\n\n/**\n * Capitalizes the first letter of a string\n * @param text - The text to capitalize\n * @returns The capitalized string\n * @example\n * capitalize('hello world') // returns 'Hello world'\n */\nexport function capitalize(text: string): string {\n  if (!text) return '';\n  return text.charAt(0).toUpperCase() + text.slice(1).toLowerCase();\n}\n\n/**\n * Truncates a string to a specified length and adds an ellipsis\n * @param text - The text to truncate\n * @param maxLength - The maximum length (default: 100)\n * @param suffix - The suffix to add (default: '...')\n * @returns The truncated string\n * @example\n * truncate('Lorem ipsum dolor sit amet', 10) // returns 'Lorem ipsu...'\n */\nexport function truncate(text: string, maxLength: number = 100, suffix: string = '...'): string {\n  if (text.length <= maxLength) return text;\n  return text.slice(0, maxLength - suffix.length) + suffix;\n}\n\n/**\n * Generates a random string of specified length\n * @param length - The length of the random string (default: 10)\n * @param charset - The character set to use (default: alphanumeric)\n * @returns A random string\n * @example\n * randomString(8) // returns 'aB3dE7fG'\n */\nexport function randomString(\n  length: number = 10,\n  charset: string = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'\n): string {\n  let result = '';\n  for (let i = 0; i < length; i++) {\n    result += charset.charAt(Math.floor(Math.random() * charset.length));\n  }\n  return result;\n}\n","/**\n * Formats a number with thousands separators and decimal places\n * @param value - The number to format\n * @param decimals - Number of decimal places (default: 2)\n * @param locale - The locale to use for formatting (default: 'en-US')\n * @returns The formatted number string\n * @example\n * formatNumber(1234567.89) // returns '1,234,567.89'\n * formatNumber(1234.5, 0) // returns '1,235'\n */\nexport function formatNumber(\n  value: number,\n  decimals: number = 2,\n  locale: string = 'en-US'\n): string {\n  return new Intl.NumberFormat(locale, {\n    minimumFractionDigits: decimals,\n    maximumFractionDigits: decimals,\n  }).format(value);\n}\n\n/**\n * Clamps a number between a minimum and maximum value\n * @param value - The number to clamp\n * @param min - The minimum value\n * @param max - The maximum value\n * @returns The clamped value\n * @example\n * clamp(10, 0, 5) // returns 5\n * clamp(-5, 0, 10) // returns 0\n * clamp(7, 0, 10) // returns 7\n */\nexport function clamp(value: number, min: number, max: number): number {\n  return Math.min(Math.max(value, min), max);\n}\n\n/**\n * Rounds a number to a specified number of decimal places\n * @param value - The number to round\n * @param decimals - Number of decimal places (default: 0)\n * @returns The rounded number\n * @example\n * roundTo(3.14159, 2) // returns 3.14\n * roundTo(2.5) // returns 3\n */\nexport function roundTo(value: number, decimals: number = 0): number {\n  const multiplier = Math.pow(10, decimals);\n  return Math.round(value * multiplier) / multiplier;\n}\n\n/**\n * Calculates the percentage of a value relative to a total\n * @param value - The value to calculate percentage for\n * @param total - The total value\n * @param decimals - Number of decimal places (default: 2)\n * @returns The percentage value\n * @example\n * percent(25, 100) // returns 25\n * percent(1, 3, 2) // returns 33.33\n */\nexport function percent(value: number, total: number, decimals: number = 2): number {\n  if (total === 0) return 0;\n  return roundTo((value / total) * 100, decimals);\n}\n","/**\n * Formats a date according to a locale\n * @param date - The date to format\n * @param options - Intl.DateTimeFormatOptions for formatting\n * @param locale - The locale to use (default: 'en-US')\n * @returns The formatted date string\n * @example\n * formatDate(new Date('2024-01-15')) // returns '1/15/2024'\n * formatDate(new Date(), { dateStyle: 'full' }) // returns 'Monday, January 15, 2024'\n */\nexport function formatDate(\n  date: Date | string | number,\n  options: Intl.DateTimeFormatOptions = { dateStyle: 'short' },\n  locale: string = 'en-US'\n): string {\n  const dateObj = new Date(date);\n  if (!isValidDate(dateObj)) {\n    throw new Error('Invalid date provided');\n  }\n  return new Intl.DateTimeFormat(locale, options).format(dateObj);\n}\n\n/**\n * Returns a human-readable time difference from now\n * @param date - The date to compare\n * @returns A human-readable string like '5 minutes ago' or 'in 2 hours'\n * @example\n * timeAgo(new Date(Date.now() - 60000)) // returns '1 minute ago'\n * timeAgo(new Date(Date.now() + 3600000)) // returns 'in 1 hour'\n */\nexport function timeAgo(date: Date | string | number): string {\n  const dateObj = new Date(date);\n  if (!isValidDate(dateObj)) {\n    throw new Error('Invalid date provided');\n  }\n\n  const seconds = Math.floor((Date.now() - dateObj.getTime()) / 1000);\n  const isFuture = seconds < 0;\n  const absSeconds = Math.abs(seconds);\n\n  const intervals: [string, number][] = [\n    ['year', 31536000],\n    ['month', 2592000],\n    ['week', 604800],\n    ['day', 86400],\n    ['hour', 3600],\n    ['minute', 60],\n    ['second', 1],\n  ];\n\n  for (const [name, secondsInInterval] of intervals) {\n    const interval = Math.floor(absSeconds / secondsInInterval);\n    if (interval >= 1) {\n      const plural = interval !== 1 ? 's' : '';\n      return isFuture ? `in ${interval} ${name}${plural}` : `${interval} ${name}${plural} ago`;\n    }\n  }\n\n  return 'just now';\n}\n\n/**\n * Checks if a date is valid\n * @param date - The date to validate\n * @returns True if the date is valid, false otherwise\n * @example\n * isValidDate(new Date()) // returns true\n * isValidDate(new Date('invalid')) // returns false\n * isValidDate('2024-01-15') // returns true\n */\nexport function isValidDate(date: Date | string | number): boolean {\n  const dateObj = date instanceof Date ? date : new Date(date);\n  return !isNaN(dateObj.getTime());\n}\n","/**\n * Creates a deep clone of an object\n * @param obj - The object to clone\n * @returns A deep copy of the object\n * @example\n * const original = { a: 1, b: { c: 2 } };\n * const cloned = deepClone(original);\n * cloned.b.c = 3; // original.b.c remains 2\n */\nexport function deepClone<T>(obj: T): T {\n  if (obj === null || typeof obj !== 'object') {\n    return obj;\n  }\n\n  if (obj instanceof Date) {\n    return new Date(obj.getTime()) as T;\n  }\n\n  if (obj instanceof Array) {\n    return obj.map(item => deepClone(item)) as T;\n  }\n\n  if (obj instanceof Object) {\n    const clonedObj = {} as T;\n    for (const key in obj) {\n      if (Object.prototype.hasOwnProperty.call(obj, key)) {\n        clonedObj[key] = deepClone(obj[key]);\n      }\n    }\n    return clonedObj;\n  }\n\n  return obj;\n}\n\n/**\n * Deeply merges two or more objects\n * @param target - The target object\n * @param sources - Source objects to merge\n * @returns The merged object\n * @example\n * merge({ a: 1 }, { b: 2 }, { c: 3 }) // returns { a: 1, b: 2, c: 3 }\n * merge({ a: { x: 1 } }, { a: { y: 2 } }) // returns { a: { x: 1, y: 2 } }\n */\nexport function merge<T extends Record<string, unknown>>(target: T, ...sources: Partial<T>[]): T {\n  if (!sources.length) return target;\n\n  const result = deepClone(target);\n\n  for (const source of sources) {\n    if (!source || typeof source !== 'object') continue;\n\n    for (const key in source) {\n      if (Object.prototype.hasOwnProperty.call(source, key)) {\n        const sourceValue = source[key];\n        const targetValue = result[key];\n\n        if (\n          sourceValue &&\n          typeof sourceValue === 'object' &&\n          !Array.isArray(sourceValue) &&\n          targetValue &&\n          typeof targetValue === 'object' &&\n          !Array.isArray(targetValue)\n        ) {\n          result[key] = merge(\n            targetValue as Record<string, unknown>,\n            sourceValue as Record<string, unknown>\n          ) as T[Extract<keyof T, string>];\n        } else {\n          result[key] = deepClone(sourceValue) as T[Extract<keyof T, string>];\n        }\n      }\n    }\n  }\n\n  return result;\n}\n\n/**\n * Creates a new object with specified keys omitted\n * @param obj - The source object\n * @param keys - Keys to omit\n * @returns A new object without the specified keys\n * @example\n * omit({ a: 1, b: 2, c: 3 }, ['b', 'c']) // returns { a: 1 }\n */\nexport function omit<T extends Record<string, unknown>, K extends keyof T>(\n  obj: T,\n  keys: K[]\n): Omit<T, K> {\n  const result = { ...obj };\n  for (const key of keys) {\n    delete result[key];\n  }\n  return result;\n}\n\n/**\n * Creates a new object with only specified keys\n * @param obj - The source object\n * @param keys - Keys to pick\n * @returns A new object with only the specified keys\n * @example\n * pick({ a: 1, b: 2, c: 3 }, ['a', 'c']) // returns { a: 1, c: 3 }\n */\nexport function pick<T extends Record<string, unknown>, K extends keyof T>(\n  obj: T,\n  keys: K[]\n): Pick<T, K> {\n  const result = {} as Pick<T, K>;\n  for (const key of keys) {\n    if (Object.prototype.hasOwnProperty.call(obj, key)) {\n      result[key] = obj[key];\n    }\n  }\n  return result;\n}\n","/**\n * Returns an array with unique values\n * @param arr - The array to process\n * @returns An array with duplicate values removed\n * @example\n * unique([1, 2, 2, 3, 3, 3]) // returns [1, 2, 3]\n * unique(['a', 'b', 'a']) // returns ['a', 'b']\n */\nexport function unique<T>(arr: T[]): T[] {\n  return [...new Set(arr)];\n}\n\n/**\n * Splits an array into chunks of specified size\n * @param arr - The array to chunk\n * @param size - The size of each chunk\n * @returns An array of chunks\n * @example\n * chunk([1, 2, 3, 4, 5], 2) // returns [[1, 2], [3, 4], [5]]\n */\nexport function chunk<T>(arr: T[], size: number): T[][] {\n  if (size <= 0) {\n    throw new Error('Chunk size must be greater than 0');\n  }\n\n  const result: T[][] = [];\n  for (let i = 0; i < arr.length; i += size) {\n    result.push(arr.slice(i, i + size));\n  }\n  return result;\n}\n\n/**\n * Flattens a nested array to a specified depth\n * @param arr - The array to flatten\n * @param depth - The depth to flatten (default: 1)\n * @returns A flattened array\n * @example\n * flatten([1, [2, [3, [4]]]]) // returns [1, 2, [3, [4]]]\n * flatten([1, [2, [3, [4]]]], 2) // returns [1, 2, 3, [4]]\n * flatten([1, [2, [3, [4]]]], Infinity) // returns [1, 2, 3, 4]\n */\nexport function flatten<T>(arr: unknown[], depth: number = 1): T[] {\n  if (depth <= 0) {\n    return arr as T[];\n  }\n\n  return arr.reduce<T[]>((acc, val) => {\n    if (Array.isArray(val)) {\n      acc.push(...flatten<T>(val, depth - 1));\n    } else {\n      acc.push(val as T);\n    }\n    return acc;\n  }, []);\n}\n\n/**\n * Groups array elements by a key or function\n * @param arr - The array to group\n * @param key - A key name or function to determine grouping\n * @returns An object with grouped elements\n * @example\n * groupBy([{ age: 21 }, { age: 22 }, { age: 21 }], 'age')\n * // returns { '21': [{ age: 21 }, { age: 21 }], '22': [{ age: 22 }] }\n *\n * groupBy([1.3, 2.1, 2.4], Math.floor)\n * // returns { '1': [1.3], '2': [2.1, 2.4] }\n */\nexport function groupBy<T>(\n  arr: T[],\n  key: keyof T | ((item: T) => string | number)\n): Record<string, T[]> {\n  return arr.reduce(\n    (result, item) => {\n      const groupKey = typeof key === 'function' ? String(key(item)) : String(item[key]);\n\n      if (!result[groupKey]) {\n        result[groupKey] = [];\n      }\n\n      result[groupKey]?.push(item);\n      return result;\n    },\n    {} as Record<string, T[]>\n  );\n}\n\n/**\n * Pagination types\n */\nexport type PaginationType = 'offset' | 'page' | 'cursor';\n\n/**\n * Base pagination result interface\n */\nexport interface PaginationResult<T> {\n  data: T[];\n  total: number;\n  hasMore: boolean;\n}\n\n/**\n * Offset-based pagination result\n */\nexport interface OffsetPaginationResult<T> extends PaginationResult<T> {\n  type: 'offset';\n  offset: number;\n  limit: number;\n}\n\n/**\n * Page-based pagination result\n */\nexport interface PagePaginationResult<T> extends PaginationResult<T> {\n  type: 'page';\n  page: number;\n  pageSize: number;\n  totalPages: number;\n}\n\n/**\n * Cursor-based pagination result\n */\nexport interface CursorPaginationResult<T> extends PaginationResult<T> {\n  type: 'cursor';\n  nextCursor: string | null;\n  prevCursor: string | null;\n}\n\n/**\n * Offset-based pagination options\n */\nexport interface OffsetPaginationOptions {\n  type: 'offset';\n  offset: number;\n  limit: number;\n}\n\n/**\n * Page-based pagination options\n */\nexport interface PagePaginationOptions {\n  type: 'page';\n  page: number;\n  pageSize: number;\n}\n\n/**\n * Cursor-based pagination options\n */\nexport interface CursorPaginationOptions<T> {\n  type: 'cursor';\n  cursor?: string | null;\n  limit: number;\n  getCursorValue: (item: T) => string;\n}\n\n/**\n * Union type for all pagination options\n */\nexport type PaginationOptions<T> =\n  | OffsetPaginationOptions\n  | PagePaginationOptions\n  | CursorPaginationOptions<T>;\n\n/**\n * Paginates an array with multiple pagination strategies\n * @param arr - The array to paginate\n * @param options - Pagination options (offset, page, or cursor-based)\n * @returns Paginated result with metadata\n * @example\n * // Offset-based pagination\n * paginate([1, 2, 3, 4, 5], { type: 'offset', offset: 2, limit: 2 })\n * // returns { type: 'offset', data: [3, 4], total: 5, hasMore: true, offset: 2, limit: 2 }\n *\n * // Page-based pagination\n * paginate([1, 2, 3, 4, 5], { type: 'page', page: 2, pageSize: 2 })\n * // returns { type: 'page', data: [3, 4], total: 5, hasMore: true, page: 2, pageSize: 2, totalPages: 3 }\n *\n * // Cursor-based pagination\n * const items = [{ id: '1' }, { id: '2' }, { id: '3' }];\n * paginate(items, { type: 'cursor', cursor: '1', limit: 2, getCursorValue: item => item.id })\n * // returns { type: 'cursor', data: [{ id: '2' }, { id: '3' }], total: 3, hasMore: false, nextCursor: null, prevCursor: '1' }\n */\nexport function paginate<T>(\n  arr: T[],\n  options: OffsetPaginationOptions\n): OffsetPaginationResult<T>;\nexport function paginate<T>(arr: T[], options: PagePaginationOptions): PagePaginationResult<T>;\nexport function paginate<T>(\n  arr: T[],\n  options: CursorPaginationOptions<T>\n): CursorPaginationResult<T>;\nexport function paginate<T>(\n  arr: T[],\n  options: PaginationOptions<T>\n): OffsetPaginationResult<T> | PagePaginationResult<T> | CursorPaginationResult<T> {\n  const total = arr.length;\n\n  if (options.type === 'offset') {\n    const { offset, limit } = options;\n\n    if (offset < 0) {\n      throw new Error('Offset must be non-negative');\n    }\n    if (limit <= 0) {\n      throw new Error('Limit must be greater than 0');\n    }\n\n    const data = arr.slice(offset, offset + limit);\n    const hasMore = offset + limit < total;\n\n    return {\n      type: 'offset',\n      data,\n      total,\n      hasMore,\n      offset,\n      limit,\n    };\n  }\n\n  if (options.type === 'page') {\n    const { page, pageSize } = options;\n\n    if (page < 1) {\n      throw new Error('Page must be greater than or equal to 1');\n    }\n    if (pageSize <= 0) {\n      throw new Error('Page size must be greater than 0');\n    }\n\n    const offset = (page - 1) * pageSize;\n    const data = arr.slice(offset, offset + pageSize);\n    const totalPages = Math.ceil(total / pageSize);\n    const hasMore = page < totalPages;\n\n    return {\n      type: 'page',\n      data,\n      total,\n      hasMore,\n      page,\n      pageSize,\n      totalPages,\n    };\n  }\n\n  if (options.type === 'cursor') {\n    const { cursor, limit, getCursorValue } = options;\n\n    if (limit <= 0) {\n      throw new Error('Limit must be greater than 0');\n    }\n\n    let startIndex = 0;\n\n    if (cursor !== undefined && cursor !== null) {\n      // Find the index of the item after the cursor\n      startIndex = arr.findIndex((item) => getCursorValue(item) === cursor);\n      if (startIndex === -1) {\n        throw new Error('Cursor not found in array');\n      }\n      startIndex += 1; // Start from the next item\n    }\n\n    const data = arr.slice(startIndex, startIndex + limit);\n    const hasMore = startIndex + limit < total;\n\n    const nextCursor = hasMore && data.length > 0 ? getCursorValue(data[data.length - 1]!) : null;\n    const prevCursor = cursor || null;\n\n    return {\n      type: 'cursor',\n      data,\n      total,\n      hasMore,\n      nextCursor,\n      prevCursor,\n    };\n  }\n\n  throw new Error('Invalid pagination type');\n}\n","/**\r\n * Format options for date formatting\r\n */\r\nexport type DateFormatType =\r\n  | 'full'\r\n  | 'compact'\r\n  | 'long'\r\n  | 'medium'\r\n  | 'short'\r\n  | 'datetime'\r\n  | 'time'\r\n  | 'iso'\r\n  | 'relative'\r\n  | 'timestamp';\r\n\r\n/**\r\n * Formats a timestamp into various readable date formats\r\n * @param timestamp - The UNIX timestamp in milliseconds (e.g., 1756868642754)\r\n * @param format - The formatting style: full, compact, long, medium, short, datetime, time, iso, relative, or timestamp\r\n * @param locale - The locale to use for formatting (default: 'fr-FR')\r\n * @returns The formatted date string or the original timestamp if format is 'timestamp'\r\n * @example\r\n * formatTimestamp(1756868642754, 'full') // \"vendredi 14 novembre 2025\"\r\n * formatTimestamp(Date.now(), 'relative') // \"il y a 2 jours\"\r\n * formatTimestamp(1756868642754, 'iso') // \"2025-11-14T22:14:03.001Z\"\r\n */\r\nexport function formatTimestamp(\r\n  timestamp: number,\r\n  format: DateFormatType = 'timestamp',\r\n  locale: string = 'fr-FR'\r\n): string | number {\r\n  if (format === 'timestamp') {\r\n    return timestamp;\r\n  }\r\n\r\n  const date = new Date(timestamp);\r\n\r\n  // Validate date\r\n  if (isNaN(date.getTime())) {\r\n    return timestamp;\r\n  }\r\n\r\n  try {\r\n    switch (format) {\r\n      case 'full': {\r\n        // Example: \"vendredi 14 novembre 2025\"\r\n        const options: Intl.DateTimeFormatOptions = {\r\n          weekday: 'long',\r\n          year: 'numeric',\r\n          month: 'long',\r\n          day: 'numeric',\r\n        };\r\n        return new Intl.DateTimeFormat(locale, options).format(date);\r\n      }\r\n\r\n      case 'compact': {\r\n        // Example: \"vend. 14 novembre 2025\"\r\n        const options: Intl.DateTimeFormatOptions = {\r\n          weekday: 'short',\r\n          year: 'numeric',\r\n          month: 'long',\r\n          day: 'numeric',\r\n        };\r\n        return new Intl.DateTimeFormat(locale, options).format(date);\r\n      }\r\n\r\n      case 'long': {\r\n        // Example: \"14 novembre 2025\"\r\n        const options: Intl.DateTimeFormatOptions = {\r\n          year: 'numeric',\r\n          month: 'long',\r\n          day: 'numeric',\r\n        };\r\n        return new Intl.DateTimeFormat(locale, options).format(date);\r\n      }\r\n\r\n      case 'medium': {\r\n        // Example: \"2 janv. 2025\"\r\n        const options: Intl.DateTimeFormatOptions = {\r\n          year: 'numeric',\r\n          month: 'short',\r\n          day: 'numeric',\r\n        };\r\n        return new Intl.DateTimeFormat(locale, options).format(date);\r\n      }\r\n\r\n      case 'short': {\r\n        // Example: \"14/11/2025\"\r\n        const options: Intl.DateTimeFormatOptions = {\r\n          year: 'numeric',\r\n          month: '2-digit',\r\n          day: '2-digit',\r\n        };\r\n        return new Intl.DateTimeFormat(locale, options).format(date);\r\n      }\r\n\r\n      case 'datetime': {\r\n        // Example: \"2 janv. 2025 10:04:02\"\r\n        const datePart = new Intl.DateTimeFormat(locale, {\r\n          year: 'numeric',\r\n          month: 'short',\r\n          day: 'numeric',\r\n        }).format(date);\r\n\r\n        const timePart = new Intl.DateTimeFormat(locale, {\r\n          hour: '2-digit',\r\n          minute: '2-digit',\r\n          second: '2-digit',\r\n          hour12: false,\r\n        }).format(date);\r\n\r\n        return `${datePart} ${timePart}`;\r\n      }\r\n\r\n      case 'time': {\r\n        // Example: \"22:14:03\"\r\n        const options: Intl.DateTimeFormatOptions = {\r\n          hour: '2-digit',\r\n          minute: '2-digit',\r\n          second: '2-digit',\r\n          hour12: false,\r\n        };\r\n        return new Intl.DateTimeFormat(locale, options).format(date);\r\n      }\r\n\r\n      case 'iso': {\r\n        // Example: \"2025-11-14T22:14:03.001Z\"\r\n        return date.toISOString();\r\n      }\r\n\r\n      case 'relative': {\r\n        // Example: \"il y a 2 jours\"\r\n        return formatRelativeTime(date, locale);\r\n      }\r\n\r\n      default:\r\n        return timestamp;\r\n    }\r\n  } catch (error) {\r\n    console.error(`Error formatting date with format ${format}:`, error);\r\n    return timestamp;\r\n  }\r\n}\r\n\r\n/**\r\n * Helper function to format relative time\r\n * @param date - The date to format\r\n * @param locale - The locale to use\r\n * @returns A human-readable relative time string\r\n */\r\nfunction formatRelativeTime(date: Date, locale: string): string {\r\n  const now = Date.now();\r\n  const diffInSeconds = Math.floor((now - date.getTime()) / 1000);\r\n  const isFuture = diffInSeconds < 0;\r\n  const absSeconds = Math.abs(diffInSeconds);\r\n\r\n  const intervals: Array<[Intl.RelativeTimeFormatUnit, number]> = [\r\n    ['year', 31536000],\r\n    ['month', 2592000],\r\n    ['week', 604800],\r\n    ['day', 86400],\r\n    ['hour', 3600],\r\n    ['minute', 60],\r\n    ['second', 1],\r\n  ];\r\n\r\n  try {\r\n    const rtf = new Intl.RelativeTimeFormat(locale, { numeric: 'auto' });\r\n\r\n    for (const [unit, secondsInUnit] of intervals) {\r\n      const interval = Math.floor(absSeconds / secondsInUnit);\r\n      if (interval >= 1) {\r\n        return rtf.format(isFuture ? interval : -interval, unit);\r\n      }\r\n    }\r\n\r\n    return rtf.format(0, 'second');\r\n  } catch (error) {\r\n    // Fallback for locales that don't support RelativeTimeFormat\r\n    const intervals: Array<[string, number]> = [\r\n      ['an', 31536000],\r\n      ['mois', 2592000],\r\n      ['semaine', 604800],\r\n      ['jour', 86400],\r\n      ['heure', 3600],\r\n      ['minute', 60],\r\n      ['seconde', 1],\r\n    ];\r\n\r\n    for (const [name, secondsInInterval] of intervals) {\r\n      const interval = Math.floor(absSeconds / secondsInInterval);\r\n      if (interval >= 1) {\r\n        const plural = interval !== 1 && name !== 'mois' ? 's' : '';\r\n        return isFuture\r\n          ? `dans ${interval} ${name}${plural}`\r\n          : `il y a ${interval} ${name}${plural}`;\r\n      }\r\n    }\r\n\r\n    return \"à l'instant\";\r\n  }\r\n}\r\n","export { slugify, capitalize, truncate, randomString } from './string/index.js';\nexport { formatNumber, clamp, roundTo, percent } from './number/index.js';\nexport { formatDate, timeAgo, isValidDate } from './date/index.js';\nexport { deepClone, merge, omit, pick } from './object/index.js';\n\nexport {\n  unique, chunk, flatten, groupBy, paginate,\n  type PaginationType,\n  type PaginationResult,\n  type OffsetPaginationResult,\n  type PagePaginationResult,\n  type CursorPaginationResult,\n  type OffsetPaginationOptions,\n  type PagePaginationOptions,\n  type CursorPaginationOptions,\n  type PaginationOptions,\n} from './array/index.js';\n\nexport { formatTimestamp, type DateFormatType } from './formatter/index.js';\n\nimport * as string from './string/index.js';\nimport * as number from './number/index.js';\nimport * as date from './date/index.js';\nimport * as object from './object/index.js';\nimport * as array from './array/index.js';\nimport * as formatter from './formatter/index.js';\n\nexport default {\n  ...string,\n  ...number,\n  ...date,\n  ...object,\n  ...array,\n  ...formatter,\n};\n"]}