{"version":3,"sources":["../src/index.ts"],"names":["format","spread","el"],"mappings":";AAQA,IAAM,SAAA,GAAY,OAAO,MAAA,KAAW,WAAA;AAKpC,IAAM,YAAA,GAAe;AAAA,EACnB,OAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,YAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA;AAkBO,SAAS,KAAA,GAAgB;AAC9B,EAAA,OAAO,IAAA,CAAK,QAAO,CAAE,QAAA,CAAS,EAAE,CAAA,CAAE,SAAA,CAAU,GAAG,EAAE,CAAA;AACnD;AAqBO,SAAS,OAAU,KAAA,EAAgD;AACxE,EAAA,OAAO,KAAA,YAAiB,GAAA,GAAM,KAAA,GAAQ,IAAI,IAAO,KAAK,CAAA;AACxD;AAYO,SAAS,MAAA,CACd,MACA,IAAA,EACO;AACP,EAAA,MAAM,WAAW,IAAA,YAAgB,GAAA,GAAM,IAAA,GAAO,IAAI,IAAI,IAAI,CAAA;AAC1D,EAAA,IAAI,IAAA,OAAW,OAAA,CAAQ,CAAC,SAAc,QAAA,CAAS,GAAA,CAAI,IAAI,CAAC,CAAA;AACxD,EAAA,OAAO,CAAC,GAAG,QAAQ,CAAA;AACrB;AAYO,SAAS,GAAA,CACd,KAIA,QAAA,EACS;AACT,EAAA,OAAO,MAAA,CAAO,SAAA,CAAU,cAAA,CAAe,IAAA,CAAK,KAAK,QAAQ,CAAA;AAC3D;AAcO,SAAS,EAAA,CACd,MACA,IAAA,EACA,IAAA,GAAO,MACP,QAAA,GAAqB,CAAC,OAAO,CAAA,EACpB;AACT,EAAA,IAAI,IAAA,KAAS,MAAM,OAAO,IAAA;AAC1B,EAAA,IAAI,OAAO,IAAA,KAAS,QAAA,IAAY,OAAO,SAAS,QAAA,EAAU;AACxD,IAAA,IAAI,IAAA,YAAgB,KAAK,OAAO,KAAA;AAChC,IAAA,IAAI,IAAA,YAAgB,KAAK,OAAO,KAAA;AAChC,IAAA,IAAI,IAAA,YAAgB,QAAQ,IAAA,YAAgB,IAAA;AAC1C,MAAA,OAAO,IAAA,CAAK,OAAA,EAAQ,KAAM,IAAA,CAAK,OAAA,EAAQ;AACzC,IAAA,IAAI,IAAA,YAAgB,UAAU,IAAA,YAAgB,MAAA;AAC5C,MAAA,OAAO,QAAA,CAAS,MAAM,IAAI,CAAA;AAC5B,IAAA,IAAI,IAAA,KAAS,IAAA,IAAQ,IAAA,KAAS,IAAA,EAAM,OAAO,KAAA;AAC3C,IAAA,IAAI,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA,CAAE,MAAA,KAAW,OAAO,IAAA,CAAK,IAAI,CAAA,CAAE,MAAA,EAAQ,OAAO,KAAA;AAClE,IAAA,KAAA,MAAW,KAAK,QAAA,EAAU;AACxB,MAAA,IAAA,CAAK,CAAA,IAAK,IAAA,IAAQ,CAAA,IAAK,IAAA,KAAS,IAAA,CAAK,CAAC,CAAA,KAAM,IAAA,CAAK,CAAC,CAAA,EAAG,OAAO,KAAA;AAAA,IAC9D;AACA,IAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,MAAA,IAAI,EAAE,GAAA,IAAO,IAAA,CAAA,EAAO,OAAO,KAAA;AAC3B,MAAA,IAAI,IAAA,CAAK,GAAG,CAAA,KAAM,IAAA,CAAK,GAAG,CAAA,IAAK,CAAC,MAAM,OAAO,KAAA;AAC7C,MAAA,IAAI,IAAA,IAAQ,CAAC,EAAA,CAAG,IAAA,CAAK,GAAG,CAAA,EAAG,IAAA,CAAK,GAAG,CAAA,EAAG,IAAA,EAAM,QAAQ,CAAA,EAAG,OAAO,KAAA;AAAA,IAChE;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,OAAO,KAAA;AACT;AAQO,SAAS,QAAA,CAAS,GAAW,CAAA,EAAoB;AACtD,EAAA,OACE,CAAA,CAAE,WAAW,CAAA,CAAE,MAAA,IACf,EAAE,KAAA,CAAM,KAAA,CAAM,EAAE,CAAA,CAAE,IAAA,EAAK,CAAE,KAAK,EAAE,CAAA,KAAM,EAAE,KAAA,CAAM,KAAA,CAAM,EAAE,CAAA,CAAE,IAAA,EAAK,CAAE,IAAA,CAAK,EAAE,CAAA;AAE1E;AAWO,SAAS,MACd,KAAA,EACS;AACT,EAAA,MAAM,OAAO,OAAO,KAAA;AACpB,EAAA,IAAI,IAAA,KAAS,UAAU,OAAO,KAAA;AAC9B,EAAA,IAAI,KAAA,KAAU,QAAW,OAAO,IAAA;AAChC,EAAA,IAAI,SAAS,QAAA,EAAU;AACrB,IAAA,OAAO,KAAA,KAAU,EAAA;AAAA,EACnB;AACA,EAAA,IAAI,SAAS,QAAA,EAAU;AACrB,IAAA,IAAI,KAAA,KAAU,MAAM,OAAO,IAAA;AAC3B,IAAA,KAAA,MAAW,EAAA,IAAM,OAAO,OAAO,KAAA;AAC/B,IAAA,IAAI,KAAA,YAAiB,QAAQ,OAAO,KAAA;AACpC,IAAA,IAAI,KAAA,YAAiB,MAAM,OAAO,KAAA;AAClC,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,OAAO,KAAA;AACT;AAWO,SAAS,UAAU,MAAA,EAAwB;AAEhD,EAAA,OAAO,MAAA,CAAO,OAAA,CAAQ,qBAAA,EAAuB,MAAM,CAAA;AACrD;AAwBO,SAAS,eAAe,MAAA,EAAwB;AACrD,EAAA,MAAM,OAAA,GAAU,CAAA,CAAA,EAAI,SAAA,CAAU,MAAM,CAAC,CAAA,CAAA,CAAA;AACrC,EAAA,MAAM,OAAA,GAA6C;AAAA,IACjD,EAAA,EAAI,iBAAA;AAAA,IACJ,CAAA,EAAG,gBAAA;AAAA,IACH,EAAA,EAAI,oBAAA;AAAA,IACJ,CAAA,EAAG,qBAAA;AAAA,IACH,IAAA,EAAM,QAAA;AAAA,IACN,EAAA,EAAI;AAAA,GACN;AACA,EAAA,MAAM,MAAA,GAAS,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA;AAClC,EAAA,OAAO,IAAI,MAAA;AAAA,IACT,MAAA,CAAO,MAAA,CAAO,CAAC,KAAA,EAAOA,OAAAA,KAAW;AAC/B,MAAA,OAAO,KAAA,CAAM,OAAA,CAAQA,OAAAA,EAAQ,OAAA,CAAQA,OAAM,CAAC,CAAA;AAAA,IAC9C,GAAG,OAAO;AAAA,GACZ;AACF;AAWO,SAAS,SAAS,IAAA,EAA0C;AACjE,EAAA,MAAM,CAAA,GAAI,KAAK,WAAA,EAAY;AAC3B,EAAA,IAAI,CAAA,KAAM,QAAQ,OAAO,MAAA;AACzB,EAAA,IAAI,CAAA,KAAM,SAAS,OAAO,OAAA;AAC1B,EAAA,OAAO,OAAA;AACT;AAYO,SAAS,SAAS,CAAA,EAA+C;AACtE,EAAA,OAAO,MAAA,CAAO,SAAA,CAAU,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA,KAAM,iBAAA;AAC/C;AAWO,SAAS,SACd,CAAA,EAC+C;AAC/C,EAAA,OAAO,QAAA,CAAS,CAAC,CAAA,IAAK,KAAA,CAAM,QAAQ,CAAC,CAAA;AACvC;AAcO,SAAS,OAAO,CAAA,EAAkC;AACvD,EAAA,IAAI,QAAA,CAAS,CAAC,CAAA,KAAM,KAAA,EAAO,OAAO,KAAA;AAClC,EAAA,IAAI,CAAA,CAAE,UAAA,IAAc,CAAA,CAAE,QAAA,KAAa,OAAO,OAAO,KAAA;AACjD,EAAA,MAAM,OAAO,CAAA,CAAE,WAAA;AACf,EAAA,IAAI,IAAA,KAAS,QAAW,OAAO,IAAA;AAC/B,EAAA,MAAM,OAAO,IAAA,CAAK,SAAA;AAClB,EAAA,IAAI,QAAA,CAAS,IAAI,CAAA,KAAM,KAAA,EAAO,OAAO,KAAA;AACrC,EAAA,IAAI,IAAA,CAAK,cAAA,CAAe,eAAe,CAAA,KAAM,KAAA,EAAO;AAClD,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,OAAO,IAAA;AACT;AAiBO,IAAM,oCAAkC,CAC7C,QAAA,EACA,YACA,YAAA,GAAe,KAAA,EACf,kBAAkB,KAAA,KACsB;AACxC,EAAA,IAAI,UAAA,KAAe,MAAM,OAAO,IAAA;AAChC,EAAA,MAAM,SAA8B,EAAC;AACrC,EAAA,IAAI,OAAO,UAAA,KAAe,QAAA,EAAU,OAAO,UAAA;AAC3C,EAAA,KAAA,MAAW,OAAO,QAAA,EAAU;AAC1B,IAAA,IACE,GAAA,CAAI,YAAY,GAAG,CAAA,KAClB,WAAW,GAAG,CAAA,KAAM,MAAA,IAAa,CAAC,eAAA,CAAA,EACnC;AACA,MAAA,IACE,YAAA,IACA,KAAA,CAAM,OAAA,CAAQ,QAAA,CAAS,GAAG,CAAC,CAAA,IAC3B,KAAA,CAAM,OAAA,CAAQ,UAAA,CAAW,GAAG,CAAC,CAAA,EAC7B;AACA,QAAA,MAAA,CAAO,GAAG,IAAI,QAAA,CAAS,GAAG,EAAE,MAAA,CAAO,UAAA,CAAW,GAAG,CAAC,CAAA;AAClD,QAAA;AAAA,MACF;AACA,MAAA,IAAI,UAAA,CAAW,GAAG,CAAA,KAAM,MAAA,EAAW;AACjC,QAAA;AAAA,MACF;AACA,MAAA,IAAI,MAAA,CAAO,SAAS,GAAG,CAAC,KAAK,MAAA,CAAO,UAAA,CAAW,GAAG,CAAC,CAAA,EAAG;AACpD,QAAA,MAAA,CAAO,GAAG,CAAA,mBAAI,MAAA;AAAA,UACZ,SAAS,GAAG,CAAA;AAAA,UACZ,WAAW,GAAG,CAAA;AAAA,UACd,YAAA;AAAA,UACA;AAAA,SACF;AAAA,MACF,CAAA,MAAO;AACL,QAAA,MAAA,CAAO,GAAG,CAAA,GAAI,UAAA,CAAW,GAAG,CAAA;AAAA,MAC9B;AAAA,IACF,CAAA,MAAO;AACL,MAAA,MAAA,CAAO,GAAG,CAAA,GAAI,QAAA,CAAS,GAAG,CAAA;AAAA,IAC5B;AAAA,EACF;AACA,EAAA,KAAA,MAAW,OAAO,UAAA,EAAY;AAC5B,IAAA,IAAI,CAAC,IAAI,MAAA,EAAQ,GAAG,KAAK,UAAA,CAAW,GAAG,MAAM,MAAA,EAAW;AACtD,MAAA,MAAA,CAAO,GAAG,CAAA,GAAI,UAAA,CAAW,GAAG,CAAA;AAAA,IAC9B;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;AAwBO,SAAS,eAAe,GAAA,EAAsB;AAEnD,EAAA,IAAI,GAAA,CAAI,CAAC,CAAA,KAAM,GAAA,IAAO,IAAI,CAAC,CAAA,KAAM,KAAK,OAAO,KAAA;AAC7C,EAAA,IAAI,GAAA,CAAI,CAAC,CAAA,KAAM,GAAA,CAAI,IAAI,MAAA,GAAS,CAAC,GAAG,OAAO,KAAA;AAC3C,EAAA,MAAM,SAAA,GAAY,IAAI,CAAC,CAAA;AACvB,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAA,CAAI,QAAQ,CAAA,EAAA,EAAK;AACnC,IAAA,IACE,GAAA,CAAI,CAAC,CAAA,KAAM,SAAA,KACV,MAAM,CAAA,IAAK,GAAA,CAAI,CAAA,GAAI,CAAC,CAAA,KAAM,IAAA,CAAA,IAC3B,CAAA,KAAM,GAAA,CAAI,SAAS,CAAA,EACnB;AACA,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT;AAWO,SAAS,UAAU,GAAA,EAAqB;AAC7C,EAAA,IAAI,CAAC,GAAA,CAAI,MAAA,EAAQ,OAAO,EAAA;AACxB,EAAA,IAAI,KAAA,GAAQ,EAAA;AACZ,EAAA,IAAI,QAAA,GAAW,EAAA;AACf,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAA,CAAI,QAAQ,CAAA,EAAA,EAAK;AACnC,IAAA,MAAM,IAAA,GAAO,GAAA,CAAI,MAAA,CAAO,CAAC,CAAA;AACzB,IAAA,IAAI,IAAA,KAAS,IAAA,IAAQ,QAAA,KAAa,IAAA,EAAM;AACtC,MAAA,KAAA,IAAS,IAAA;AAAA,IACX;AACA,IAAA,QAAA,GAAW,IAAA;AAAA,EACb;AACA,EAAA,OAAO,KAAA;AACT;AAYO,SAAS,UAAA,CAGd,GAAM,CAAA,EAAa;AACnB,EAAA,KAAA,MAAW,OAAO,CAAA,EAAG;AACnB,IAAA,IACE,GAAA,CAAI,GAAG,GAAG,CAAA,IACT,EAAE,GAAG,CAAA,KAAc,EAAE,GAAG,CAAA,IACzB,EAAE,MAAA,CAAO,CAAA,CAAE,GAAG,CAAC,CAAA,IAAK,OAAO,CAAA,CAAE,GAAG,CAAC,CAAA,CAAA,EACjC;AACA,MAAA,CAAA,CAAE,GAAG,CAAA,GAAI,CAAA,CAAE,GAAG,CAAA;AAAA,IAChB,CAAA,MAAA,IAAW,MAAA,CAAO,CAAA,CAAE,GAAG,CAAC,KAAK,MAAA,CAAO,CAAA,CAAE,GAAG,CAAC,CAAA,EAAG;AAC3C,MAAA,UAAA,CAAW,CAAA,CAAE,GAAG,CAAA,EAAG,CAAA,CAAE,GAAG,CAAC,CAAA;AAAA,IAC3B;AAAA,EACF;AACA,EAAA,KAAA,MAAW,OAAO,CAAA,EAAG;AACnB,IAAA,IAAI,CAAC,GAAA,CAAI,CAAA,EAAG,GAAG,CAAA,EAAG;AAChB,MAAA,CAAA,CAAE,GAAG,CAAA,GAAI,CAAA,CAAE,GAAG,CAAA;AAAA,IAChB;AAAA,EACF;AACA,EAAA,OAAO,CAAA;AACT;AAYO,SAAS,aACX,IAAA,EACkB;AACrB,EAAA,OAAO,IAAA,CAAK,MAAA,CAAO,CAAC,KAAA,EAAO,KAAA,KAAU;AACnC,IAAA,MAAM,EAAE,OAAO,IAAA,EAAM,UAAA,EAAY,QAAQ,OAAA,EAAS,GAAG,YAAW,GAAI,KAAA;AACpE,IAAA,OAAO,MAAA,CAAO,MAAA,CAAO,KAAA,EAAO,UAAU,CAAA;AAAA,EACxC,CAAA,EAAG,EAAE,CAAA;AACP;AAWO,SAAS,UAAU,GAAA,EAAuB;AAC/C,EAAA,MAAM,OAAiB,EAAC;AACxB,EAAA,IAAI,GAAA,GAAM,EAAA;AACV,EAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,EAAA,IAAI,KAAA,GAAQ,EAAA;AACZ,EAAA,IAAI,QAAA,GAAW,EAAA;AACf,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAA,CAAI,QAAQ,CAAA,EAAA,EAAK;AACnC,IAAA,MAAM,IAAA,GAAO,GAAA,CAAI,MAAA,CAAO,CAAC,CAAA;AACzB,IAAA,IAAI,IAAA,KAAS,KAAA,IAAS,QAAA,KAAa,IAAA,EAAM;AACvC,MAAA,KAAA,GAAQ,EAAA;AAAA,IACV,CAAA,MAAA,IAAA,CAAY,SAAS,GAAA,IAAO,IAAA,KAAS,QAAQ,CAAC,KAAA,IAAS,aAAa,IAAA,EAAM;AACxE,MAAA,KAAA,GAAQ,IAAA;AAAA,IACV,CAAA,MAAA,IAAW,IAAA,KAAS,GAAA,IAAO,CAAC,KAAA,EAAO;AACjC,MAAA,KAAA,EAAA;AAAA,IACF,CAAA,MAAA,IAAW,IAAA,KAAS,GAAA,IAAO,CAAC,KAAA,EAAO;AACjC,MAAA,KAAA,EAAA;AAAA,IACF;AACA,IAAA,IAAI,IAAA,KAAS,GAAA,IAAO,CAAC,KAAA,IAAS,UAAU,CAAA,EAAG;AACzC,MAAA,IAAA,CAAK,KAAK,GAAG,CAAA;AACb,MAAA,GAAA,GAAM,EAAA;AAAA,IACR,CAAA,MAAA,IAAW,IAAA,KAAS,GAAA,IAAO,KAAA,EAAO;AAChC,MAAA,GAAA,IAAO,IAAA;AAAA,IACT;AACA,IAAA,QAAA,GAAW,IAAA;AAAA,EACb;AACA,EAAA,IAAI,GAAA,EAAK;AACP,IAAA,IAAA,CAAK,KAAK,GAAG,CAAA;AAAA,EACf;AACA,EAAA,OAAO,IAAA;AACT;AAaO,SAAS,MAAA,CACd,KACA,QAAA,EACqB;AACrB,EAAA,MAAM,QAA6B,EAAC;AACpC,EAAA,MAAM,OAAO,QAAA,CAAS,MAAA,CAAO,CAAC,CAAA,KAAM,aAAa,MAAM,CAAA;AACvD,EAAA,MAAM,YAAA,GAAe,IAAI,GAAA,CAAI,QAAQ,CAAA;AACrC,EAAA,KAAA,MAAW,OAAO,GAAA,EAAK;AACrB,IAAA,IAAI,CAAC,YAAA,CAAa,GAAA,CAAI,GAAG,KAAK,CAAC,IAAA,CAAK,IAAA,CAAK,CAAC,GAAA,KAAQ,GAAA,CAAI,IAAA,CAAK,GAAG,CAAC,CAAA,EAAG;AAChE,MAAA,KAAA,CAAM,GAAG,CAAA,GAAI,GAAA,CAAI,GAAG,CAAA;AAAA,IACtB;AAAA,EACF;AACA,EAAA,OAAO,KAAA;AACT;AAcO,SAAS,IAAA,CACd,KACA,OAAA,EACqB;AACrB,EAAA,MAAM,QAA6B,EAAC;AACpC,EAAA,MAAM,OAAO,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA,KAAM,aAAa,MAAM,CAAA;AACtD,EAAA,OAAA,CAAQ,OAAA,CAAQ,CAAC,GAAA,KAAQ;AACvB,IAAA,IAAI,EAAE,eAAe,MAAA,CAAA,EAAS;AAC5B,MAAA,KAAA,CAAM,GAAG,CAAA,GAAI,GAAA,CAAI,GAAG,CAAA;AAAA,IACtB;AAAA,EACF,CAAC,CAAA;AACD,EAAA,MAAA,CAAO,IAAA,CAAK,GAAG,CAAA,CAAE,OAAA,CAAQ,CAAC,GAAA,KAAQ;AAChC,IAAA,IAAI,IAAA,CAAK,KAAK,CAAC,GAAA,KAAQ,IAAI,IAAA,CAAK,GAAG,CAAC,CAAA,EAAG;AACrC,MAAA,KAAA,CAAM,GAAG,CAAA,GAAI,GAAA,CAAI,GAAG,CAAA;AAAA,IACtB;AAAA,EACF,CAAC,CAAA;AACD,EAAA,OAAO,KAAA;AACT;AAWO,SAAS,MAAM,GAAA,EAAqB;AACzC,EAAA,OAAO,GAAA,CAAI,OAAA;AAAA,IAAQ,eAAA;AAAA,IAAiB,CAAC,EAAA,EAAY,CAAA,KAC/C,CAAA,CAAE,WAAA;AAAY,GAChB;AACF;AAWO,SAAS,MAAM,GAAA,EAAqB;AACzC,EAAA,OAAO,GAAA,CACJ,OAAA;AAAA,IACC,oBAAA;AAAA,IACA,CAAC,EAAA,EAAY,KAAA,EAAe,QAC1B,KAAA,GAAQ,GAAA,GAAM,IAAI,WAAA;AAAY,GAClC,CACC,OAAA,CAAQ,GAAA,EAAK,GAAG,EAChB,WAAA,EAAY;AACjB;AAYO,SAAS,YAAA,CAAgB,GAAA,EAAQ,QAAA,GAAqB,YAAA,EAAiB;AAC5E,EAAA,IAAI,GAAA,KAAQ,IAAA,IAAQ,OAAO,GAAA,KAAQ,QAAA,EAAU;AAC3C,IAAA,IAAI,YAAA;AACJ,IAAA,IAAI,MAAM,OAAA,CAAQ,GAAG,GAAG,YAAA,GAAe,CAAC,GAAG,GAAG,CAAA;AAAA,SAAA,IACrC,OAAO,GAAG,CAAA,EAAG,YAAA,GAAe,EAAE,GAAG,GAAA,EAAI;AAC9C,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,aAAA,CAAc,GAAA,EAAK,cAAc,QAAQ,CAAA;AACzC,MAAA,OAAO,YAAA;AAAA,IACT;AAAA,EACF;AACA,EAAA,OAAO,GAAA;AACT;AAaO,SAAS,KAAA,CACd,GAAA,EACA,QAAA,GAAqB,YAAA,EAClB;AACH,EAAA,IACE,GAAA,KAAQ,IAAA,IACR,GAAA,YAAe,MAAA,IACf,GAAA,YAAe,IAAA,IACf,GAAA,YAAe,GAAA,IACf,GAAA,YAAe,GAAA,IACd,OAAO,IAAA,KAAS,cAAc,GAAA,YAAe,IAAA;AAE9C,IAAA,OAAO,GAAA;AACT,EAAA,IAAI,YAAA;AACJ,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA,EAAG;AACtB,IAAA,YAAA,GAAe,GAAA,CAAI,GAAA,CAAI,CAAC,KAAA,KAAU;AAChC,MAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,KAAA,CAAM,OAAoB,QAAQ,CAAA;AACxE,MAAA,OAAO,KAAA;AAAA,IACT,CAAC,CAAA;AAAA,EACH,CAAA,MAAO;AACL,IAAA,YAAA,GAAe,OAAO,IAAA,CAAK,GAAG,EAAE,MAAA,CAAO,CAAC,QAAQ,GAAA,KAAQ;AACtD,MAAA,MAAA,CAAO,GAAG,CAAA,GACR,OAAO,GAAA,CAAI,GAAG,CAAA,KAAM,QAAA,GAChB,KAAA,CAAM,GAAA,CAAI,GAAG,CAAA,EAAgB,QAAQ,CAAA,GACrC,IAAI,GAAG,CAAA;AACb,MAAA,OAAO,MAAA;AAAA,IACT,CAAA,EAAG,EAA6B,CAAA;AAAA,EAClC;AACA,EAAA,KAAA,MAAW,OAAO,QAAA,EAAU;AAC1B,IAAA,IAAI,OAAO,GAAA,EAAK;AACd,MAAA,MAAA,CAAO,cAAA,CAAe,cAAc,GAAA,EAAK;AAAA,QACvC,UAAA,EAAY,KAAA;AAAA,QACZ,KAAA,EAAQ,IAAY,GAAG;AAAA,OACxB,CAAA;AAAA,IACH;AAAA,EACF;AACA,EAAA,OAAO,YAAA;AACT;AAYO,SAAS,SAAY,GAAA,EAAW;AACrC,EAAA,OAAO,OAAO,GAAA,KAAQ,QAAA,GACjB,KAAA,CAAM,GAA8B,CAAA,GACrC,GAAA;AACN;AAaO,SAAS,KAAA,CAAM,KAAU,IAAA,EAAuB;AACrD,EAAA,IAAI,CAAC,GAAA,IAAO,OAAO,GAAA,KAAQ,UAAU,OAAO,IAAA;AAC5C,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA;AAC/B,EAAA,IAAI,CAAA,GAAI,GAAA;AACR,EAAA,KAAA,MAAW,KAAK,QAAA,EAAU;AACxB,IAAA,MAAM,OAAA,GAAU,SAAS,CAAC,CAAA;AAC1B,IAAA,IAAI,GAAA,CAAI,CAAA,EAAG,OAAO,CAAA,EAAG;AACnB,MAAA,CAAA,GAAI,EAAE,OAAO,CAAA;AAAA,IACf;AACA,IAAA,IAAI,CAAC,CAAA,KAAM,QAAA,CAAS,MAAA,GAAS,GAAG,OAAO,CAAA;AACvC,IAAA,IAAI,CAAC,CAAA,IAAK,OAAO,CAAA,KAAM,UAAU,OAAO,IAAA;AAAA,EAC1C;AACA,EAAA,OAAO,IAAA;AACT;AAcO,SAAS,SAAS,KAAA,EAAkC;AACzD,EAAA,OAAO,UAAU,MAAA,IAAa,KAAA,KAAU,OAAA,IAAW,KAAA,KAAU,QACzD,IAAA,GACA,MAAA;AACN;AAYO,SAAS,KAAuB,GAAA,EAA+B;AACpE,EAAA,OAAO,CAAC,OAAO,QAAA,CAAS,GAAG,IACtB,MAAA,CAAO,cAAA,CAAe,KAAK,QAAA,EAAU;AAAA,IACpC,UAAA,EAAY,KAAA;AAAA,IACZ,KAAA,EAAO;AAAA,GACR,CAAA,GACD,GAAA;AACN;AAWO,SAAS,QAAQ,GAAA,EAAqB;AAC3C,EAAA,OAAO,IACJ,SAAA,CAAU,KAAK,EACf,OAAA,CAAQ,kBAAA,EAAoB,EAAE,CAAA,CAC9B,WAAA,EAAY,CACZ,OAAA,CAAQ,cAAc,GAAG,CAAA,CACzB,MAAK,CACL,OAAA,CAAQ,QAAQ,GAAG,CAAA;AACxB;AAYO,SAAS,MAAA,CAAU,GAAA,EAAQ,QAAA,GAAqB,YAAA,EAAiB;AACtE,EAAA,IAAI,GAAA,IAAO,OAAO,GAAA,KAAQ,QAAA,EAAU;AAClC,IAAA,IAAI,GAAA,YAAe,QAAQ,OAAO,GAAA;AAClC,IAAA,IAAI,GAAA,YAAe,MAAM,OAAO,GAAA;AAChC,IAAA,IAAIC,OAAAA;AACJ,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA,EAAG;AACtB,MAAAA,OAAAA,GAAS,CAAC,GAAG,GAAG,CAAA;AAAA,IAClB,CAAA,MAAO;AACL,MAAAA,OAAAA,GAAS,EAAE,GAAI,GAAA,EAAiC;AAAA,IAClD;AAGA,IAAA,OAAO,aAAA;AAAA,MACL,GAAA;AAAA,MACAA,OAAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AACA,EAAA,OAAO,GAAA;AACT;AAcA,SAAS,aAAA,CACP,QAAA,EACA,GAAA,EACA,QAAA,EACG;AACH,EAAA,KAAA,MAAW,OAAO,QAAA,EAAU;AAC1B,IAAA,IAAI,OAAO,QAAA,EAAU;AACnB,MAAA,MAAA,CAAO,cAAA,CAAe,KAAK,GAAA,EAAK;AAAA,QAC9B,UAAA,EAAY,KAAA;AAAA,QACZ,KAAA,EAAO,SAAS,GAAc;AAAA,OAC/B,CAAA;AAAA,IACH;AAAA,EACF;AACA,EAAA,OAAO,GAAA;AACT;AAUO,SAAS,aAAA,CACd,OAAA,EACA,QAAA,EACA,IAAA,EACM;AACN,EAAA,IAAI,CAAC,SAAA,EAAW;AAChB,EAAA,IAAI,CAAC,MAAM,IAAA,GAAO,QAAA;AAClB,EAAA,MAAM,EAAA,GAAK,IAAA,CAAK,cAAA,CAAe,OAAO,CAAA;AACtC,EAAA,IAAI,EAAA,EAAI,OAAO,QAAA,CAAS,EAAE,CAAA;AAC1B,EAAA,MAAM,QAAA,GAAW,IAAI,gBAAA,CAAiB,MAAM;AAC1C,IAAA,MAAMC,GAAAA,GAAK,IAAA,EAAM,cAAA,CAAe,OAAO,CAAA;AACvC,IAAA,IAAIA,GAAAA,EAAI;AACN,MAAA,QAAA,EAAU,UAAA,EAAW;AACrB,MAAA,QAAA,CAASA,GAAE,CAAA;AAAA,IACb;AAAA,EACF,CAAC,CAAA;AACD,EAAA,QAAA,CAAS,QAAQ,IAAA,EAAM,EAAE,WAAW,IAAA,EAAM,OAAA,EAAS,MAAM,CAAA;AAC3D;AASO,SAAS,YAAwC,EAAA,EAAU;AAChE,EAAA,IAAI,MAAA,GAAS,KAAA;AACb,EAAA,QAAQ,IAAI,IAAA,KAAgB;AAC1B,IAAA,IAAI,MAAA,EAAQ;AACZ,IAAA,MAAA,GAAS,IAAA;AACT,IAAA,cAAA,CAAe,MAAO,SAAS,KAAM,CAAA;AACrC,IAAA,OAAO,EAAA,CAAG,GAAG,IAAI,CAAA;AAAA,EACnB,CAAA;AACF;AAQO,SAAS,WAAW,KAAA,EAAkC;AAC3D,EAAA,IAAI,KAAA,KAAU,OAAA,IAAW,KAAA,KAAU,KAAA,EAAO,OAAO,MAAA;AACjD,EAAA,OAAO,IAAA;AACT","file":"index.mjs","sourcesContent":["/**\n * Commonly shared utility functions between official FormKit packages.\n *\n * You can add this package by using `npm install @formkit/utils` or `yarn add @formkit/utils`.\n *\n * @packageDocumentation\n */\n\nconst isBrowser = typeof window !== 'undefined'\n\n/**\n * Explicit keys that should always be cloned.\n */\nconst explicitKeys = [\n  '__key',\n  '__init',\n  '__shim',\n  '__original',\n  '__index',\n  '__prevKey',\n]\n\n/**\n * Generates a random string.\n *\n * @example\n *\n * ```javascript\n * import { token } from '@formkit/utils'\n *\n * const tk = token()\n * // 'jkbyqnphqm'\n * ```\n *\n * @returns string\n *\n * @public\n */\nexport function token(): string {\n  return Math.random().toString(36).substring(2, 15)\n}\n\n/**\n * Creates a new set of the specified type and uses the values from an Array or\n * an existing Set.\n *\n * @example\n *\n * ```javascript\n * import { setify } from '@formkit/utils'\n *\n * const tk = setify(['a', 'b'])\n * // Set(2) {'a', 'b'}\n * ```\n *\n * @param items - An array or a Set.\n *\n * @returns `Set<T>`\n *\n * @public\n */\nexport function setify<T>(items: Set<T> | T[] | null | undefined): Set<T> {\n  return items instanceof Set ? items : new Set<T>(items)\n}\n\n/**\n * Given 2 arrays, return them as a combined array with no duplicates.\n *\n * @param arr1 - First array.\n * @param arr2 - Second array.\n *\n * @returns `any[]`\n *\n * @public\n */\nexport function dedupe<T extends any[] | Set<any>, X extends any[] | Set<any>>(\n  arr1: T,\n  arr2?: X\n): any[] {\n  const original = arr1 instanceof Set ? arr1 : new Set(arr1)\n  if (arr2) arr2.forEach((item: any) => original.add(item))\n  return [...original]\n}\n\n/**\n * Checks if the given property exists on the given object.\n *\n * @param obj - An object to check.\n * @param property - The property to check.\n *\n * @returns `boolean`\n *\n * @public\n */\nexport function has(\n  obj: {\n    [index: string]: any\n    [index: number]: any\n  },\n  property: string | symbol | number\n): boolean {\n  return Object.prototype.hasOwnProperty.call(obj, property)\n}\n\n/**\n * Compare two values for equality, optionally at depth.\n *\n * @param valA - First value.\n * @param valB - Second value.\n * @param deep - If it will compare deeply if it's an object.\n * @param explicit - An array of keys to explicity check.\n *\n * @returns `boolean`\n *\n * @public\n */\nexport function eq(\n  valA: any, // eslint-disable-line\n  valB: any, // eslint-disable-line\n  deep = true,\n  explicit: string[] = ['__key']\n): boolean {\n  if (valA === valB) return true\n  if (typeof valB === 'object' && typeof valA === 'object') {\n    if (valA instanceof Map) return false\n    if (valA instanceof Set) return false\n    if (valA instanceof Date && valB instanceof Date)\n      return valA.getTime() === valB.getTime()\n    if (valA instanceof RegExp && valB instanceof RegExp)\n      return eqRegExp(valA, valB)\n    if (valA === null || valB === null) return false\n    if (Object.keys(valA).length !== Object.keys(valB).length) return false\n    for (const k of explicit) {\n      if ((k in valA || k in valB) && valA[k] !== valB[k]) return false\n    }\n    for (const key in valA) {\n      if (!(key in valB)) return false\n      if (valA[key] !== valB[key] && !deep) return false\n      if (deep && !eq(valA[key], valB[key], deep, explicit)) return false\n    }\n    return true\n  }\n  return false\n}\n\n/**\n * A regular expression to test for a valid date string.\n * @param x - A RegExp to compare.\n * @param y - A RegExp to compare.\n * @public\n */\nexport function eqRegExp(x: RegExp, y: RegExp): boolean {\n  return (\n    x.source === y.source &&\n    x.flags.split('').sort().join('') === y.flags.split('').sort().join('')\n  )\n}\n\n/**\n * Determines if a value is empty or not.\n *\n * @param value - The value to check if it's empty.\n *\n * @returns `boolean`\n *\n * @public\n */\nexport function empty(\n  value: any // eslint-disable-line\n): boolean {\n  const type = typeof value\n  if (type === 'number') return false\n  if (value === undefined) return true\n  if (type === 'string') {\n    return value === ''\n  }\n  if (type === 'object') {\n    if (value === null) return true\n    for (const _i in value) return false\n    if (value instanceof RegExp) return false\n    if (value instanceof Date) return false\n    return true\n  }\n  return false\n}\n\n/**\n * Escape a string for use in regular expressions.\n *\n * @param string - String to be escaped.\n *\n * @returns `string`\n *\n * @public\n */\nexport function escapeExp(string: string): string {\n  // $& means the whole matched string\n  return string.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n}\n\n/**\n * The date token strings that can be used for date formatting.\n *\n * @public\n */\nexport type FormKitDateTokens = 'MM' | 'M' | 'DD' | 'D' | 'YYYY' | 'YY'\n\n/**\n * Given a string date format, return a regex to match against.\n *\n * @param format - String to be transformed to RegExp.\n *\n * @example\n *\n * ```javascript\n * regexForFormat('MM') // returns '(0[1-9]|1[012])'\n * ```\n *\n * @returns `RegExp`\n *\n * @public\n */\nexport function regexForFormat(format: string): RegExp {\n  const escaped = `^${escapeExp(format)}$`\n  const formats: Record<FormKitDateTokens, string> = {\n    MM: '(0[1-9]|1[012])',\n    M: '([1-9]|1[012])',\n    DD: '([012][0-9]|3[01])',\n    D: '([012]?[0-9]|3[01])',\n    YYYY: '\\\\d{4}',\n    YY: '\\\\d{2}',\n  }\n  const tokens = Object.keys(formats) as FormKitDateTokens[]\n  return new RegExp(\n    tokens.reduce((regex, format) => {\n      return regex.replace(format, formats[format])\n    }, escaped)\n  )\n}\n\n/**\n * Given a FormKit input type, returns the correct lowerCased() type.\n *\n * @param type - String to return to check for correct type\n *\n * @returns `'list' | 'group' | 'input'`\n *\n * @public\n */\nexport function nodeType(type: string): 'list' | 'group' | 'input' {\n  const t = type.toLowerCase()\n  if (t === 'list') return 'list'\n  if (t === 'group') return 'group'\n  return 'input'\n}\n\n/**\n * Determines if an object is an object.\n *\n * @param o - The value to be checked.\n *\n * @returns `boolean`\n *\n * @public\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function isRecord(o: unknown): o is Record<PropertyKey, unknown> {\n  return Object.prototype.toString.call(o) === '[object Object]'\n}\n\n/**\n * Checks if an object is a simple array or record.\n *\n * @param o - Value to be checked.\n *\n * @returns `boolean`\n *\n * @public\n */\nexport function isObject(\n  o: unknown\n): o is Record<PropertyKey, unknown> | unknown[] {\n  return isRecord(o) || Array.isArray(o)\n}\n\n/**\n * Attempts to determine if an object is a POJO (Plain Old JavaScript Object).\n * Mostly lifted from is-plain-object: https://github.com/jonschlinkert/is-plain-object\n * Copyright (c) 2014-2017, Jon Schlinkert.\n *\n * @param o - The value to be checked.\n *\n * @returns `boolean`\n *\n * @public\n */\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport function isPojo(o: any): o is Record<string, any> {\n  if (isRecord(o) === false) return false\n  if (o.__FKNode__ || o.__POJO__ === false) return false\n  const ctor = o.constructor\n  if (ctor === undefined) return true\n  const prot = ctor.prototype\n  if (isRecord(prot) === false) return false\n  if (prot.hasOwnProperty('isPrototypeOf') === false) {\n    return false\n  }\n  return true\n}\n\n/**\n * Recursively merge data from additional into original returning a new object.\n *\n * @param original - The original array.\n * @param additional - The array to merge.\n * @param extendArrays - If it will extend/concatenate array values instead of\n * replacing them.\n * @param ignoreUndefined - If it will preserve values from the original object\n * even if the additional object has those values set to undefined.\n *\n * @returns `Record<string, any> | string | null`\n *\n * @public\n *\n */\nexport const extend = /*#__NO_SIDE_EFFECTS__*/ (\n  original: Record<string, any>,\n  additional: Record<string, any> | string | null,\n  extendArrays = false,\n  ignoreUndefined = false\n): Record<string, any> | string | null => {\n  if (additional === null) return null\n  const merged: Record<string, any> = {}\n  if (typeof additional === 'string') return additional\n  for (const key in original) {\n    if (\n      has(additional, key) &&\n      (additional[key] !== undefined || !ignoreUndefined)\n    ) {\n      if (\n        extendArrays &&\n        Array.isArray(original[key]) &&\n        Array.isArray(additional[key])\n      ) {\n        merged[key] = original[key].concat(additional[key])\n        continue\n      }\n      if (additional[key] === undefined) {\n        continue\n      }\n      if (isPojo(original[key]) && isPojo(additional[key])) {\n        merged[key] = extend(\n          original[key],\n          additional[key],\n          extendArrays,\n          ignoreUndefined\n        )\n      } else {\n        merged[key] = additional[key]\n      }\n    } else {\n      merged[key] = original[key]\n    }\n  }\n  for (const key in additional) {\n    if (!has(merged, key) && additional[key] !== undefined) {\n      merged[key] = additional[key]\n    }\n  }\n  return merged\n}\n\n/**\n * Determine if the given string is fully quoted.\n *\n * @example\n *\n * ```javascript\n * hello - false\n * \"hello\" - true\n * 'world' - true\n * \"hello\"==\"world\" - false\n * \"hello'this'\" - false\n * \"hello\"'there' - false\n * \"hello\"\"there\" - false\n * 'hello === world' - true\n * ```\n *\n * @param str - The string to check.\n *\n * @returns `boolean`\n *\n * @public\n */\nexport function isQuotedString(str: string): boolean {\n  // quickly return false if the value is note quoted\n  if (str[0] !== '\"' && str[0] !== \"'\") return false\n  if (str[0] !== str[str.length - 1]) return false\n  const quoteType = str[0]\n  for (let p = 1; p < str.length; p++) {\n    if (\n      str[p] === quoteType &&\n      (p === 1 || str[p - 1] !== '\\\\') &&\n      p !== str.length - 1\n    ) {\n      return false\n    }\n  }\n  return true\n}\n\n/**\n * Remove extra escape characters.\n *\n * @param str - String to remove extra escape characters from.\n *\n * @returns `string`\n *\n * @public\n */\nexport function rmEscapes(str: string): string {\n  if (!str.length) return ''\n  let clean = ''\n  let lastChar = ''\n  for (let p = 0; p < str.length; p++) {\n    const char = str.charAt(p)\n    if (char !== '\\\\' || lastChar === '\\\\') {\n      clean += char\n    }\n    lastChar = char\n  }\n  return clean\n}\n\n/**\n * Performs a recursive `Object.assign`-like operation.\n *\n * @param a - An object to be assigned.\n * @param b - An object to get values from.\n *\n * @returns `A & B`\n *\n * @public\n */\nexport function assignDeep<\n  A extends Record<PropertyKey, any>,\n  B extends Record<PropertyKey, any>\n>(a: A, b: B): A & B {\n  for (const key in a) {\n    if (\n      has(b, key) &&\n      (a[key] as any) !== b[key] &&\n      !(isPojo(a[key]) && isPojo(b[key]))\n    ) {\n      a[key] = b[key]\n    } else if (isPojo(a[key]) && isPojo(b[key])) {\n      assignDeep(a[key], b[key])\n    }\n  }\n  for (const key in b) {\n    if (!has(a, key)) {\n      a[key] = b[key]\n    }\n  }\n  return a\n}\n\n/**\n * Filters out values from an object that should not be considered \"props\" of\n * a core node, like \"value\" and \"name\".\n *\n * @param sets - The arrays to get values filtered out of.\n *\n * @returns `Record<string, any>`\n *\n * @public\n */\nexport function nodeProps(\n  ...sets: Array<Record<string, any>>\n): Record<string, any> {\n  return sets.reduce((valid, props) => {\n    const { value, name, modelValue, config, plugins, ...validProps } = props // eslint-disable-line\n    return Object.assign(valid, validProps)\n  }, {})\n}\n\n/**\n * Parse a string for comma-separated arguments.\n *\n * @param str - String to parse arguments from.\n *\n * @returns `string[]`\n *\n * @public\n */\nexport function parseArgs(str: string): string[] {\n  const args: string[] = []\n  let arg = ''\n  let depth = 0\n  let quote = ''\n  let lastChar = ''\n  for (let p = 0; p < str.length; p++) {\n    const char = str.charAt(p)\n    if (char === quote && lastChar !== '\\\\') {\n      quote = ''\n    } else if ((char === \"'\" || char === '\"') && !quote && lastChar !== '\\\\') {\n      quote = char\n    } else if (char === '(' && !quote) {\n      depth++\n    } else if (char === ')' && !quote) {\n      depth--\n    }\n    if (char === ',' && !quote && depth === 0) {\n      args.push(arg)\n      arg = ''\n    } else if (char !== ' ' || quote) {\n      arg += char\n    }\n    lastChar = char\n  }\n  if (arg) {\n    args.push(arg)\n  }\n  return args\n}\n\n/**\n * Return a new (shallow) object with any desired props removed.\n *\n * @param obj - The starting object.\n * @param toRemove - The array of properties to remove. Accepts strings or\n * regular expressions.\n *\n * @returns `Record<string, any>`\n *\n * @public\n */\nexport function except(\n  obj: Record<string, any>,\n  toRemove: Array<string | RegExp>\n): Record<string, any> {\n  const clean: Record<string, any> = {}\n  const exps = toRemove.filter((n) => n instanceof RegExp) as RegExp[]\n  const keysToRemove = new Set(toRemove)\n  for (const key in obj) {\n    if (!keysToRemove.has(key) && !exps.some((exp) => exp.test(key))) {\n      clean[key] = obj[key]\n    }\n  }\n  return clean\n}\n\n/**\n * Extracts a set of keys from a given object. Importantly, this will extract\n * values even if they are not set on the original object — they will just have\n * an undefined value.\n *\n * @param obj - The object to get values from.\n * @param include - The array of items to get.\n *\n * @returns `Record<string, any>`\n *\n * @public\n */\nexport function only(\n  obj: Record<string, any>,\n  include: Array<string | RegExp>\n): Record<string, any> {\n  const clean: Record<string, any> = {}\n  const exps = include.filter((n) => n instanceof RegExp) as RegExp[]\n  include.forEach((key) => {\n    if (!(key instanceof RegExp)) {\n      clean[key] = obj[key]\n    }\n  })\n  Object.keys(obj).forEach((key) => {\n    if (exps.some((exp) => exp.test(key))) {\n      clean[key] = obj[key]\n    }\n  })\n  return clean\n}\n\n/**\n * This converts kebab-case to camelCase. It ONLY converts from kebab to camel.\n *\n * @param str - String to be camel cased.\n *\n * @returns `string`\n *\n * @public\n */\nexport function camel(str: string): string {\n  return str.replace(/-([a-z0-9])/gi, (_s: string, g: string) =>\n    g.toUpperCase()\n  )\n}\n\n/**\n * This converts camel-case to kebab case. It ONLY converts from camel to kebab.\n *\n * @param str - String to be kebabed.\n *\n * @returns `string`\n *\n * @public\n */\nexport function kebab(str: string): string {\n  return str\n    .replace(\n      /([a-z0-9])([A-Z])/g,\n      (_s: string, trail: string, cap: string) =>\n        trail + '-' + cap.toLowerCase()\n    )\n    .replace(' ', '-')\n    .toLowerCase()\n}\n\n/**\n * Shallowly clones the given object.\n *\n * @param obj - Object to be shallowly cloned.\n * @param explicit - The array of keys to be explicity cloned.\n *\n * @returns `T`\n *\n * @public\n */\nexport function shallowClone<T>(obj: T, explicit: string[] = explicitKeys): T {\n  if (obj !== null && typeof obj === 'object') {\n    let returnObject: any[] | Record<string, any> | undefined\n    if (Array.isArray(obj)) returnObject = [...obj]\n    else if (isPojo(obj)) returnObject = { ...obj }\n    if (returnObject) {\n      applyExplicit(obj, returnObject, explicit)\n      return returnObject as T\n    }\n  }\n  return obj\n}\n\n/**\n * Perform a recursive clone on a given object. Only intended to be used\n * for simple objects like arrays and POJOs.\n *\n * @param obj - Object to be cloned.\n * @param explicit - Array of items to be explicity cloned.\n *\n * @returns `T`\n *\n * @public\n */\nexport function clone<T extends Record<string, unknown> | unknown[] | null>(\n  obj: T,\n  explicit: string[] = explicitKeys\n): T {\n  if (\n    obj === null ||\n    obj instanceof RegExp ||\n    obj instanceof Date ||\n    obj instanceof Map ||\n    obj instanceof Set ||\n    (typeof File === 'function' && obj instanceof File)\n  )\n    return obj\n  let returnObject\n  if (Array.isArray(obj)) {\n    returnObject = obj.map((value) => {\n      if (typeof value === 'object') return clone(value as unknown[], explicit)\n      return value\n    }) as T\n  } else {\n    returnObject = Object.keys(obj).reduce((newObj, key) => {\n      newObj[key] =\n        typeof obj[key] === 'object'\n          ? clone(obj[key] as unknown[], explicit)\n          : obj[key]\n      return newObj\n    }, {} as Record<string, unknown>) as T\n  }\n  for (const key of explicit) {\n    if (key in obj) {\n      Object.defineProperty(returnObject, key, {\n        enumerable: false,\n        value: (obj as any)[key],\n      })\n    }\n  }\n  return returnObject\n}\n\n/**\n * Clones anything. If the item is scalar, no worries, it passes it back. If it\n * is an object, it performs a (fast/loose) clone operation.\n *\n * @param obj - The value to be cloned.\n *\n * @returns `T`\n *\n * @public\n */\nexport function cloneAny<T>(obj: T): T {\n  return typeof obj === 'object'\n    ? (clone(obj as Record<string, unknown>) as T)\n    : obj\n}\n\n/**\n * Get a specific value via dot notation.\n *\n * @param obj - An object to fetch data from.\n * @param addr - An \"address\" in dot notation.\n *\n * @returns `unknown`\n *\n * @public\n */\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport function getAt(obj: any, addr: string): unknown {\n  if (!obj || typeof obj !== 'object') return null\n  const segments = addr.split('.')\n  let o = obj\n  for (const i in segments) {\n    const segment = segments[i]\n    if (has(o, segment)) {\n      o = o[segment]\n    }\n    if (+i === segments.length - 1) return o\n    if (!o || typeof o !== 'object') return null\n  }\n  return null\n}\n\n/**\n * Determines if the value of a prop that is either present (true) or not\n * present (undefined). For example, the prop disabled should disable\n * by just existing, but what if it is set to the string \"false\" — then it\n * should not be disabled.\n *\n * @param value - Value to check for undefined.\n *\n * @returns `true | undefined`\n *\n * @public\n */\nexport function undefine(value: unknown): true | undefined {\n  return value !== undefined && value !== 'false' && value !== false\n    ? true\n    : undefined\n}\n\n/**\n * Defines an object as an initial value.\n *\n * @param obj - Object to be added an initial value.\n *\n * @returns `T & { __init?: true }`\n *\n * @public\n */\n/* eslint-disable-next-line @typescript-eslint/ban-types */\nexport function init<T extends object>(obj: T): T & { __init?: true } {\n  return !Object.isFrozen(obj)\n    ? (Object.defineProperty(obj, '__init', {\n        enumerable: false,\n        value: true,\n      }) as T & { __init: true })\n    : obj\n}\n\n/**\n * Turn any string into a URL/DOM-safe string.\n *\n * @param str - String to be slugified to a URL-safe string.\n *\n * @returns `string`\n *\n * @public\n */\nexport function slugify(str: string): string {\n  return str\n    .normalize('NFD')\n    .replace(/[\\u0300-\\u036f]/g, '')\n    .toLowerCase()\n    .replace(/[^a-z0-9]/g, ' ')\n    .trim()\n    .replace(/\\s+/g, '-')\n}\n\n/**\n * Spreads an object or an array, otherwise returns the same value.\n *\n * @param obj - The object to be spread.\n * @param explicit - The array of items to be explicity spread.\n *\n * @returns `T`\n *\n * @public\n */\nexport function spread<T>(obj: T, explicit: string[] = explicitKeys): T {\n  if (obj && typeof obj === 'object') {\n    if (obj instanceof RegExp) return obj\n    if (obj instanceof Date) return obj\n    let spread: T\n    if (Array.isArray(obj)) {\n      spread = [...obj] as unknown as T\n    } else {\n      spread = { ...(obj as Record<PropertyKey, any>) } as T\n    }\n\n    // eslint-disable-next-line @typescript-eslint/ban-types\n    return applyExplicit(\n      obj as Record<PropertyKey, any> | any[],\n      spread as Record<PropertyKey, any>,\n      explicit\n    ) as unknown as T\n  }\n  return obj\n}\n\n/**\n * Apply non enumerable properties to an object.\n *\n * @param original - Original object\n * @param obj - Objecto to aplly the values\n * @param explicit - Array of items to be explicity added.\n *\n * @returns `T`\n *\n * @public\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nfunction applyExplicit<T extends object | any[]>(\n  original: T,\n  obj: T,\n  explicit: string[]\n): T {\n  for (const key of explicit) {\n    if (key in original) {\n      Object.defineProperty(obj, key, {\n        enumerable: false,\n        value: original[key as keyof T],\n      })\n    }\n  }\n  return obj\n}\n\n/**\n * Uses a global mutation observer to wait for a given element to appear in the\n * DOM.\n * @param childId - The id of the child node.\n * @param callback - The callback to call when the child node is found.\n *\n * @public\n */\nexport function whenAvailable(\n  childId: string,\n  callback: (el: Element) => void,\n  root?: Document | ShadowRoot\n): void {\n  if (!isBrowser) return\n  if (!root) root = document\n  const el = root.getElementById(childId)\n  if (el) return callback(el)\n  const observer = new MutationObserver(() => {\n    const el = root?.getElementById(childId)\n    if (el) {\n      observer?.disconnect()\n      callback(el)\n    }\n  })\n  observer.observe(root, { childList: true, subtree: true })\n}\n\n/**\n * Given a function only 1 call will be made per call stack. All others will\n * be discarded.\n * @param fn - The function to be called once per tick.\n * @returns\n * @public\n */\nexport function oncePerTick<T extends CallableFunction>(fn: T): T {\n  let called = false\n  return ((...args: any[]) => {\n    if (called) return\n    called = true\n    queueMicrotask(() => (called = false))\n    return fn(...args)\n  }) as unknown as T\n}\n\n/**\n * Converts any value to a boolean value — but assumes that the default is true.\n * This is used on naked attributes like `disabled` or `required`.\n * @param value - The value to be converted to a boolean.\n * @public\n */\nexport function boolGetter(value: unknown): true | undefined {\n  if (value === 'false' || value === false) return undefined\n  return true\n}\n"]}