1 |
- {"version":3,"file":"static/chunks/pages/reading-goal-6020e7d4ae50e444.js","mappings":"uGAAIA,E,WACJ,SAASC,IAAa,OAAOA,EAAWC,OAAOC,OAASD,OAAOC,OAAOC,OAAS,SAAUC,GAAK,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAAIF,UAAUD,GAAI,IAAK,IAAII,KAAKD,GAAG,IAAKE,eAAeC,KAAKH,EAAGC,KAAOL,EAAEK,GAAKD,EAAEC,IAAO,OAAOL,GAAMJ,EAASY,MAAM,KAAMN,WAcvQ,IAZgB,SAAmBO,GACjC,OAAoB,gBAAoB,MAAOb,EAAS,CACtDc,MAAO,GACPC,OAAQ,GACRC,QAAS,YACTC,KAAM,OACNC,MAAO,8BACNL,GAAQd,IAAUA,EAAqB,gBAAoB,OAAQ,CACpEoB,EAAG,oJACHF,KAAM,qB,uCCZNlB,EAAOqB,EAAQC,EAAQC,EAAQC,E,WACnC,SAASvB,IAAa,OAAOA,EAAWC,OAAOC,OAASD,OAAOC,OAAOC,OAAS,SAAUC,GAAK,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAAIF,UAAUD,GAAI,IAAK,IAAII,KAAKD,GAAG,IAAKE,eAAeC,KAAKH,EAAGC,KAAOL,EAAEK,GAAKD,EAAEC,IAAO,OAAOL,GAAMJ,EAASY,MAAM,KAAMN,WAoCvQ,IAlC0B,SAA6BO,GACrD,OAAoB,gBAAoB,MAAOb,EAAS,CACtDgB,QAAS,YACTC,KAAM,OACNC,MAAO,8BACNL,GAAQd,IAAUA,EAAqB,gBAAoB,OAAQ,CACpEoB,EAAG,6xBACHK,OAAQ,kBACLJ,IAAWA,EAAsB,gBAAoB,OAAQ,CAChED,EAAG,6fACHK,OAAQ,kBACLH,IAAWA,EAAsB,gBAAoB,OAAQ,CAChEF,EAAG,4wBACHK,OAAQ,eACRC,YAAa,GACbC,cAAe,QACfC,eAAgB,WACbL,IAAWA,EAAsB,gBAAoB,OAAQ,CAChEM,SAAU,UACVT,EAAG,kSACHK,OAAQ,eACRC,YAAa,IACbI,iBAAkB,IAClBH,cAAe,QACfC,eAAgB,WACbJ,IAAWA,EAAsB,gBAAoB,OAAQ,CAChEJ,EAAG,yKACHK,OAAQ,eACRC,YAAa,IACbI,iBAAkB,IAClBH,cAAe,QACfC,eAAgB,c,uBCjCfG,OAAOC,SAAWD,OAAOC,UAAY,IAAIC,KAAK,CAC7C,gBACA,WACE,OAAO,EAAQ,W,wICO8E,MAAMC,EAAsC,WAC3IC,EAAoC,KACnCC,EAA6CC,IAA6C,OAA0BH,IACpHI,EAAwCC,GAA4CH,EAA4CF,GACjIM,GAA0D,iBAAkB,CAAC1B,EAAO2B,KACtF,MAAQC,gBAAiBA,EAAkBC,MAAOC,EAAYC,IAAKC,EAAUC,cAAeA,EAAgBC,KAAgDC,GAAkBnC,EACxK+B,EAAMK,EAAuCJ,GAAWA,EAAUX,EAClEQ,EAAQQ,EAAyCP,EAAWC,GAAOD,EAAY,KAC/EQ,EAAaC,EAA+BV,GAASI,EAAcJ,EAAOE,QAAOS,EACvF,OAAqB,mBAAqBhB,EAAwC,CAC9EiB,MAAOb,EACPC,MAAOA,EACPE,IAAKA,IACQ,mBAAqB,UAAsB,OAAqC,CAC7F,gBAAiBA,EACjB,gBAAiB,EACjB,gBAAiBQ,EAA+BV,GAASA,OAAQW,EACjE,iBAAkBF,EAClBI,KAAM,cACN,aAAcC,EAAuCd,EAAOE,GAC5D,aAAwB,OAAVF,QAA4B,IAAVA,EAAmBA,OAAQW,EAC3D,WAAYT,GACbI,EAAe,CACdS,IAAKjB,SAMbD,EAA0CmB,UAAY,CAClDd,IAAK/B,EAAO8C,EAAUC,GAClB,MAAMC,EAAYhD,EAAM8C,GAClBG,EAASC,OAAOF,GACtB,OAAIA,IAAcZ,EAAuCY,GAAmB,IAAIG,MA8CxF,SAAkDH,EAAWD,GACzD,MAAO,mCAAmCC,qBAA6BD,gFA/CmBK,CAAyCH,EAAQF,IAChI,MAEXlB,MAAO7B,EAAO8C,EAAUC,GACpB,MAAMjB,EAAY9B,EAAM8C,GAClBG,EAASC,OAAOpB,GAChBC,EAAMK,EAAuCpC,EAAM+B,KAAO/B,EAAM+B,IAAMV,EAC5E,OAAiB,MAAbS,GAAsBO,EAAyCP,EAAWC,GACvE,KADoF,IAAIoB,MA0CvG,SAAoDH,EAAWD,GAC3D,MAAO,qCAAqCC,qBAA6BD,mNA3CgCM,CAA2CJ,EAAQF,MAM3D,MAAMO,EAAuC,oBAC5IC,GAA0D,iBAAkB,CAACvD,EAAO2B,KACtF,IAAI6B,EACJ,MAAQ5B,gBAAiBA,KAAqB6B,GAAmBzD,EAC3D0D,EAAUjC,EAAyC6B,EAAsC1B,GAC/F,OAAqB,mBAAqB,UAAsB,OAAqC,CACjG,aAAce,EAAuCe,EAAQ7B,MAAO6B,EAAQ3B,KAC5E,aAAmD,QAApCyB,EAAiBE,EAAQ7B,aAAsC,IAAnB2B,EAA4BA,OAAiBhB,EACxG,WAAYkB,EAAQ3B,KACrB0B,EAAgB,CACfb,IAAKjB,QAMwF,SAASO,EAA2CL,EAAOE,GAC5J,MAAO,GAAG4B,KAAKC,MAAM/B,EAAQE,EAAM,QAEvC,SAASY,EAAuCd,EAAOgC,GACnD,OAAgB,MAAThC,EAAgB,gBAAkBA,IAAUgC,EAAW,WAAa,UAE/E,SAAStB,EAA+BV,GACpC,MAAwB,kBAAVA,EAElB,SAASO,EAAuCL,GAE5C,OAAOQ,EAA+BR,KAAS+B,MAAM/B,IAAQA,EAAM,EAEvE,SAASM,EAAyCR,EAAOE,GAErD,OAAOQ,EAA+BV,KAAWiC,MAAMjC,IAAUA,GAASE,GAAOF,GAAS,EAa9F,MAAMkC,EAA4CrC,EAC5CsC,EAA4CT,E,ICjG3C,E,kDAAKU,GAAAA,EACL,MAAG,QADEA,EAEJ,OAAG,SAFCA,EAGL,MAAG,Q,CAHEA,IAAAA,EAAY,KAaxB,IA0BA,EA1B0C,Y,IAQtC,EAPFpC,EAAK,EAALA,MACAqC,EAAU,EAAVA,WAAU,IACVC,KAAAA,OAAI,IAAG,EAAAF,EAAaG,MAAK,EACzBC,EAAe,EAAfA,gBAEMC,EAAiBC,IACrBC,IAAAA,cACA,EAIC,IAHC,OADF,EACGA,IAAAA,cAAuBL,IAASF,EAAaG,QAC9C,OAFF,EAEGI,IAAAA,eAAwBL,IAASF,EAAaQ,SAC/C,OAHF,EAGGD,IAAAA,cAAuBL,IAASF,EAAaS,OAHhD,GAKAR,GAGF,OACE,SAACS,EAAkB,CAACC,UAAWN,EAAgBzC,MAAOA,E,UACpD,SAAC8C,EAAuB,CACtBC,UAAWL,IAAWC,IAAAA,kBAA0BH,GAChDQ,MAAO,CAAEC,UAAW,eAA2B,OAAZ,IAAMjD,EAAM,a,uECjChD,E,oFAAKkD,GAAAA,EACL,MAALC,Q,CADUD,IAAAA,EAAU,K,qECehBE,EAAiB,WACrB,OAAOC,EAAAA,EAAAA,UAAQ,WACb,IAAMC,EAAc,GACdC,EAAQ,IAAIC,KAGZC,EAAS,IAAID,KAAKD,GACD,IAAnBA,EAAMG,UACRD,EAAOE,QAAQJ,EAAMK,UAAYL,EAAMG,UAGzC,IAAK,IAAIG,EAAI,EAAGA,EAAI,EAAGA,GAAK,EAAG,CAC7B,IAAMC,EAAM,IAAIN,KAAKC,GACrBK,EAAIH,QAAQF,EAAOG,UAAYC,GAE/BP,EAAKhE,KAAK,CACRyE,QAASD,EAAIF,YAAcL,EAAMK,UACjCI,KAAMF,EACNG,YAAYC,EAAAA,EAAAA,IAAiBJ,KAIjC,OAAOR,IACN,KAGCa,EAAqB,SAACC,EAAaC,G,IAAgBC,EAAkB,UAAH,8CAClDC,GAAAA,EAAAA,EAAAA,GAAe,gBAA3BzG,EAAYyG,EAAZzG,EAAG0G,EAASD,EAATC,KAEX,OAAOnB,EAAAA,EAAAA,UAAQ,WACb,IAAMoB,EAAsD,GAExDC,EAAgBL,EAAS,EACzBM,EAAkB,GACjBL,GAAmBI,GACtBN,EAAKQ,SAAQ,SAACd,EAAKe,GAYbf,EAAIC,UACNW,EAAgBL,EAASQ,EAAQ,EACjCF,EAAkBE,MAKxB,IAAK,IAAIhB,EAAI,EAAGA,EAAI,EAAGA,GAAK,EAAG,CAC7B,IAAIiB,OAAAA,EACJ,GAAIR,EACFQ,EAAU,CACRC,iBAAiBC,EAAAA,EAAAA,IAAkBnB,EAAI,EAAGW,GAC1CS,OAAOC,EAAAA,EAAAA,IAAed,EAAKP,GAAGG,KAAMQ,QAEjC,CAcL,IAAMO,GAAkBC,EAAAA,EAAAA,IACtBN,EAAgBL,EAASM,EAAkBd,EAAIA,EAAI,EACnDW,GAGFM,EAAU,CACRC,gBAAAA,EACAE,MAAOnH,EAAE,QAAS,CAChBgG,IAAKiB,KAKXN,EAAMnF,KAAKwF,GAGb,OAAOL,IACN,CAACD,EAAMF,EAAiBD,EAAQvG,EAAGsG,KAsGxC,EAnGiC,W,6DAM7B,GALFe,EAAW,EAAXA,YACAC,EAAqB,EAArBA,sBAKMhB,EAAOhB,IACPiC,GAAYC,EAAAA,EAAAA,IAAYC,EAAAA,GAAiBC,EAAAA,IACzCC,GAAcH,EAAAA,EAAAA,IAAYI,EAAAA,GAAwBF,EAAAA,IAClD,GAAaG,EAAAA,EAAAA,IAAYN,EAAWI,GAAlCG,OAEwBC,GAAAA,EAAAA,EAAAA,UAAyB,MAAlDC,EAAyBD,EAA8B,GAA7CE,EAAeF,EAA8B,GAExDG,EAAmC,CACvCC,SAAUL,EACVM,KAAM9B,EAAK,GAAGH,WACdkC,GAAI/B,EAAKA,EAAKvG,OAAS,GAAGoG,WAC1BmC,KAAMlD,EAAWC,OAImBkD,GAAAA,EAAAA,EAAAA,KACpCC,EAAAA,EAAAA,QAA6B,IAAbR,GAAoBS,EAAAA,EAAAA,MAAkB,MACtD,W,OAAMC,EAAAA,EAAAA,IAA0BR,KAChC,CACES,mBAAmB,IAJfC,EAA8BL,EAA9BK,KAAMC,EAAwBN,EAAxBM,aAAcC,EAAUP,EAAVO,OAQ5BC,EAAAA,EAAAA,YAAU,WACS,OAAbf,GAAsBV,GAA0BsB,GAQpDX,GAAaW,EAAKA,KAAKI,QACtB,CAAC1B,EAAuBU,EAAUY,IAErC,IAAMK,EAAYJ,IAAiBD,EAEIA,GAAI,OAAJA,QAAI,IAAJA,OAAAA,EAAAA,EAAMA,OAAQ,CACnDM,aAAc,GACdF,UAAMnG,EACN0D,OAAQ,GAHF2C,EAA+BN,EAA/BM,aAAcF,EAAiBJ,EAAjBI,KAAMzC,EAAWqC,EAAXrC,OAMtB4C,GAAiB5D,EAAAA,EAAAA,UAErB,WACA,IAAK2D,EAAc,MAAO,GAE1B,IAAME,EAAS,GAaf,OAXAF,EAAapC,SAAQ,SAACd,GACpBoD,EAAOpD,EAAIE,OAAQ,kBACdF,GAAG,CACNqD,QACErD,EAAIsD,UAAY,GAChBtD,EAAIuD,YAAc,GAClBvD,EAAIwD,OAAOzJ,OAAS,GACpBiG,EAAIyD,qBAAuB,OAI1BL,IACN,CAACF,IAEEQ,GAA0DnE,EAAAA,EAAAA,UAAQ,W,IAChDe,EAAtB,OAAO6C,EAA0C,QAA3B7C,EAAAA,EAAKqD,MAAK,SAAChJ,G,OAAMA,EAAEsF,kBAAQ,IAA3BK,OAAAA,EAAAA,EAA6BH,cAClD,CAACgD,EAAgB7C,IAEdsD,EAAevD,EAAmBC,EAAMC,EAAQc,GAChDwC,GAAWtE,EAAAA,EAAAA,UAAQ,WACvB,MAAO,CACLC,KAAMc,EAAKwD,KAAI,SAAC9D,EAAK+D,G,OAAS,kBACzB/D,GAAG,CACNgE,KAAMJ,EAAaG,QAErBZ,eAAAA,KAED,CAAC7C,EAAMsD,EAAcT,IAExB,MAAO,CACLF,UAAAA,EACAH,MAAAA,EACAe,SAAAA,EACAtD,OAAAA,EACAyC,KAAAA,EACAE,aAAAA,EACAQ,mBAAAA,K,mHChNAnK,E,0MACJ,SAASC,IAAa,OAAOA,EAAWC,OAAOC,OAASD,OAAOC,OAAOC,OAAS,SAAUC,GAAK,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAAIF,UAAUD,GAAI,IAAK,IAAII,KAAKD,GAAG,IAAKE,eAAeC,KAAKH,EAAGC,KAAOL,EAAEK,GAAKD,EAAEC,IAAO,OAAOL,GAAMJ,EAASY,MAAM,KAAMN,WAEvQ,ICHI,EAAOc,EDiBX,EAdkB,SAAqBP,GACrC,OAAoB,gBAAoB,MAAOb,EAAS,CACtDkB,MAAO,6BACPD,KAAM,OACND,QAAS,YACTS,YAAa,IACbD,OAAQ,eACRiE,UAAW,WACV5E,GAAQd,IAAUA,EAAqB,gBAAoB,OAAQ,CACpE2B,cAAe,QACfC,eAAgB,QAChBR,EAAG,yO,UCbP,SAAS,IAAa,OAAO,EAAWlB,OAAOC,OAASD,OAAOC,OAAOC,OAAS,SAAUC,GAAK,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CAAE,IAAIG,EAAIF,UAAUD,GAAI,IAAK,IAAII,KAAKD,GAAG,IAAKE,eAAeC,KAAKH,EAAGC,KAAOL,EAAEK,GAAKD,EAAEC,IAAO,OAAOL,GAAM,EAASQ,MAAM,KAAMN,WAEvQ,ICOO,EAQM,EDGb,EAlBwB,SAA2BO,GACjD,OAAoB,gBAAoB,MAAO,EAAS,CACtDK,MAAO,6BACPD,KAAM,OACND,QAAS,YACTS,YAAa,IACbD,OAAQ,eACRiE,UAAW,WACV5E,GAAQ,IAAU,EAAqB,gBAAoB,OAAQ,CACpEa,cAAe,QACfC,eAAgB,QAChBR,EAAG,4+BACAC,IAAWA,EAAsB,gBAAoB,OAAQ,CAChEM,cAAe,QACfC,eAAgB,QAChBR,EAAG,2C,WEqDDsJ,EAAU,SAACC,EAAyBC,GACxC,OAAQA,EAAO7B,MACb,IAAK,aACH,OAAO,kBACF4B,GAAK,CACRE,SAAUD,EAAOE,QAAQC,SAAWC,EAAAA,GAAAA,WAA6B,GAAK,KACtED,OAAQH,EAAOE,QAAQC,SAE3B,IAAK,WACH,OAAO,kBACFJ,GAAK,CACR5B,KAAM6B,EAAOE,QAAQ/B,OAEzB,IAAK,YACH,OAAO,kBACF4B,GAAK,CACRM,MAAOL,EAAOE,QAAQG,QAE1B,IAAK,cACH,OAAO,kBACFN,GAAK,CACRO,QAASN,EAAOE,QAAQI,UAE5B,IAAK,eACH,OAAO,kBACFP,GAAK,CACRE,SAAUD,EAAOE,QAAQD,SACzBE,OAAQH,EAAOE,QAAQD,SAAWG,EAAAA,GAAAA,WAA6BA,EAAAA,GAAAA,QAEnE,IAAK,YACH,OAAO,kBACFL,GAAK,CACRQ,gBAAiBP,EAAOE,QAAQM,WAChCC,cAAeT,EAAOE,QAAQQ,WAElC,IAAK,cACH,IAAMC,EAAUC,EAAoBZ,EAAOE,QAAQW,YAC/CC,EAAS,GAKb,MAJI,WAAYH,IACdG,GAAS,UAAKH,EAAQG,UAGjB,0BACFf,GAAK,CACRc,WAAYb,EAAOE,QAAQW,aACxBC,GAGP,QACE,OAAOf,IAIAa,EAAsB,CACjC,UAAW,CACTG,QAAS,OACTC,KAAMC,EAAAA,EACNC,aAAa,EACbJ,OAAQ,CACN3C,KAAMgD,EAAAA,GAAAA,KACNb,QAAS,IACTH,OAAQC,EAAAA,GAAAA,QAGZgB,MAAO,CACLL,QAAS,QACTC,KAAMK,EAAAA,EACNP,OAAQ,CACN3C,KAAMgD,EAAAA,GAAAA,MACNZ,gBAAiB,MACjBE,cAAe,QACfR,SAAU,GACVE,OAAQC,EAAAA,GAAAA,aAGZkB,OAAQ,CACNP,QAAS,OACTC,KAAMO,EACNT,OAAQ,CACN3C,KAAMgD,EAAAA,GAAAA,MACNZ,gBAAiB,MACjBE,cAAe,QACfR,SAAU,IACVE,OAAQC,EAAAA,GAAAA,aAGZoB,OAAQ,CACNT,QAAS,SACTC,KAAMS,IAIJC,EAAiC,CACrCvB,OAAQC,EAAAA,GAAAA,MACRjC,KAAMgD,EAAAA,GAAAA,MACNN,WAAY,KACZR,MAAO,EACPC,QAAS,GACTL,SAAU,KACVM,gBAAiB,MACjBE,cAAe,SAsBjB,EAnB8B,WAC5B,IAA0BkB,GAAAA,EAAAA,EAAAA,YAAW7B,EAAS4B,GAE9C,MAAO,CAFmBC,EAAiC,GAAjCA,EAAiC,K,8DCrI7D,EA1BkD,Y,IAChDC,EAAM,EAANA,OACAC,EAAW,EAAXA,YACAC,EAAQ,EAARA,SACAZ,EAAW,EAAXA,YACMa,EAA0B,EAAhCf,KAAMe,OAA0B,IAA1BA,EAAOC,EAAAA,EAAPD,EACNE,EAAQ,EAARA,SAEM,GAAQ3F,EAAAA,EAAAA,GAAe,gBAArBzG,EAER,OACE,UAACqM,SAAM,CACL/D,KAAK,SACLgE,QAASF,EACTnH,UAAWL,IAAWC,IAAAA,OAAeoH,GAAYpH,IAAAA,U,WAEjD,SAACqH,EAAI,CAACjH,UAAWJ,IAAAA,OAChBwG,IAAe,SAACkB,OAAI,CAACtH,UAAWJ,IAAAA,Y,SAAqB7E,EAAE,kBACxD,UAACwM,MAAG,CAACvH,UAAWJ,IAAAA,c,WACd,SAAC4H,IAAC,CAACxH,UAAWJ,IAAAA,M,SAAekH,IAC5BC,IAAe,SAACS,IAAC,CAACxH,UAAWJ,IAAAA,Y,SAAqBmH,WCS3D,EAvC8D,Y,IAC5D9B,EAAK,EAALA,MACAwC,EAAQ,EAARA,SACAC,EAAG,EAAHA,IACAC,EAAQ,EAARA,SAEM,GAAQnG,EAAAA,EAAAA,GAAe,gBAArBzG,EAER,OACE,sB,WACE,UAACwM,MAAG,CAACvH,UAAWJ,IAAAA,e,WACd,SAACgI,KAAE,CAAC5H,UAAWJ,IAAAA,M,SAAe7E,EAAE,qBAChC,SAACyM,IAAC,CAACxH,UAAWJ,IAAAA,S,SAAkB7E,EAAE,2BAEpC,UAACwM,MAAG,CAACvH,UAAWJ,IAAAA,iB,UACbpF,OAAOqN,KAAK/B,GAAqBjB,KAAI,SAACkB,GACrC,IAAMF,EAAUC,EAAoBC,GAEpC,OACE,SAAC+B,EAAY,CAEX5B,KAAML,EAAQK,KACdiB,SAAU,WACRM,EAAS,CAAEpE,KAAM,cAAe+B,QAAS,CAAEW,WAAAA,KAC3C4B,EAAS5B,IAEXiB,SAAU/B,EAAMc,aAAeA,EAC/Be,OAAQ/L,EAAE,YAA4B,OAAhB8K,EAAQI,QAAQ,WACtCG,YAAa,gBAAiBP,GAAWA,EAAQO,YACjDW,YAAahM,EAAE,YAA4B,OAAhB8K,EAAQI,QAAQ,kBATtCJ,EAAQI,YAalByB,S,iCC2CT,EArEkE,Y,IAChEzC,EAAK,EAALA,MACAwC,EAAQ,EAARA,SACAC,EAAG,EAAHA,IACAK,EAAS,EAATA,UAEoBvG,GAAAA,EAAAA,EAAAA,GAAe,gBAA3BzG,EAAYyG,EAAZzG,EAAG0G,EAASD,EAATC,KACH4B,EAA2E4B,EAA3E5B,KAAMgC,EAAqEJ,EAArEI,OAAQE,EAA6DN,EAA7DM,MAAOC,EAAsDP,EAAtDO,QAASC,EAA6CR,EAA7CQ,gBAAiBE,EAA4BV,EAA5BU,cAAeR,EAAaF,EAAbE,SAChE6C,GAAa1H,EAAAA,EAAAA,UAAQ,W,OAAM2H,EAAAA,EAAAA,IAA4BlN,EAAG0G,KAAO,CAAC1G,EAAG0G,IAqB3E,OACE,sB,WACE,UAAC8F,MAAG,CAACvH,UAAWJ,IAAAA,e,WACd,SAACgI,KAAE,CAAC5H,UAAWJ,IAAAA,M,SAAe7E,EAAE,wBAChC,SAACyM,IAAC,CAACxH,UAAWJ,IAAAA,S,SAAkB7E,EAAE,iCAEpC,UAACwM,MAAG,CAACvH,UAAWJ,IAAAA,iB,WACd,SAACsI,EAAAA,EAAgB,CACf7E,KAAMA,EACNkC,MAAOA,EACPC,QAASA,EACTC,gBAAiBA,EACjBE,cAAeA,EACfwC,cAzBsD,SAACC,GAC7DX,EAAS,CAAEpE,KAAM,YAAa+B,QAASgD,KAyBjCC,cAtBsD,SAACC,GAC7Db,EAAS,CAAEpE,KAAM,YAAa+B,QAAS,CAAEG,MAAO+C,MAsB1CC,gBAnB0D,SAACC,GACjEf,EAAS,CAAEpE,KAAM,cAAe+B,QAAS,CAAEI,QAASgD,MAmB9CT,UAAWA,IAEZ1C,IAAWC,EAAAA,GAAAA,aACV,UAACiC,MAAG,CAACvH,UAAWJ,IAAAA,e,WACd,SAAC6I,QAAK,CAACC,QAAQ,WAAW1I,UAAWJ,IAAAA,M,SAClC7E,EAAE,eAEL,SAAC4N,EAAAA,EAAM,CACLC,GAAG,WACHC,KAAK,WACLtJ,KAAMuJ,EAAAA,EAAAA,MACN9I,UAAWJ,IAAAA,MACXmJ,QAASf,EACT/K,MAAOkI,EAAS6D,WAChBC,SAjDa,SAACvN,GACxB,IAAMwN,EAAcC,OAAOzN,GAC3BqM,EAAU,WAAY,CAAEqB,aAAcjE,EAAUkE,SAAUH,IAE1DzB,EAAS,CAAEpE,KAAM,eAAgB+B,QAAS,CAAED,SAAU+D,WAiDjDxB,S,UClEHqB,EAAU,CACd,CACEO,IAAKhE,EAAAA,GAAAA,MACLY,KAAMqD,EAAAA,GAER,CACED,IAAKhE,EAAAA,GAAAA,WACLY,KAAMO,IAkCV,EA9B0D,Y,IAAGxB,EAAK,EAALA,MAAOwC,EAAQ,EAARA,SAAUC,EAAG,EAAHA,IAAKC,EAAQ,EAARA,SAC3E,GAAQnG,EAAAA,EAAAA,GAAe,gBAArBzG,EAER,OACE,sB,WACE,UAACwM,MAAG,CAACvH,UAAWJ,IAAAA,e,WACd,SAACgI,KAAE,CAAC5H,UAAWJ,IAAAA,M,SAAe7E,EAAE,0BAChC,SAACyM,IAAC,CAACxH,UAAWJ,IAAAA,S,SAAkB7E,EAAE,mCAGpC,UAACwM,MAAG,CAACvH,UAAWJ,IAAAA,iB,UACbmJ,EAAQlE,KAAI,SAACiC,G,OACZ,SAACgB,EAAY,CAEX5B,KAAMY,EAAOZ,KACbiB,SAAU,WACRM,EAAS,CAAEpE,KAAM,aAAc+B,QAAS,CAAEC,OAAQyB,EAAOwC,OACzD3B,EAASb,EAAOwC,MAElBtC,SAAU/B,EAAMI,SAAWyB,EAAOwC,IAClCxC,OAAQ/L,EAAE,GAA4B,OAAzB+L,EAAOwC,IAAIE,cAAc,WACtCzC,YAAahM,EAAE,GAA4B,OAAzB+L,EAAOwC,IAAIE,cAAc,kBARtC1C,EAAOwC,QAWf5B,SClCHqB,EAAU,CACd,CACE1F,KAAMgD,EAAAA,GAAAA,KACNiD,IAAK,OACLpD,KAAMC,EAAAA,GAER,CACE9C,KAAMgD,EAAAA,GAAAA,MACNiD,IAAK,QACLpD,KAAMK,EAAAA,GAER,CACElD,KAAMgD,EAAAA,GAAAA,MACNiD,IAAK,QACLpD,KAAMS,IAiCV,EA7B0D,Y,IAAG1B,EAAK,EAALA,MAAOwC,EAAQ,EAARA,SAAUC,EAAG,EAAHA,IAAKC,EAAQ,EAARA,SAC3E,GAAQnG,EAAAA,EAAAA,GAAe,gBAArBzG,EAER,OACE,sB,WACE,UAACwM,MAAG,CAACvH,UAAWJ,IAAAA,e,WACd,SAACgI,KAAE,CAAC5H,UAAWJ,IAAAA,M,SAAe7E,EAAE,sBAChC,SAACyM,IAAC,CAACxH,UAAWJ,IAAAA,S,SAAkB7E,EAAE,+BAEpC,UAACwM,MAAG,CAACvH,UAAWJ,IAAAA,iB,UACbmJ,EAAQlE,KAAI,SAACiC,G,OACZ,SAACgB,EAAY,CAEXX,SAAU,WACRM,EAAS,CAAEpE,KAAM,WAAY+B,QAAS,CAAE/B,KAAMyD,EAAOzD,QACrDsE,EAASb,EAAOwC,MAElBtC,SAAU/B,EAAM5B,OAASyD,EAAOzD,KAChCyD,OAAQ/L,EAAE,cAAyB,OAAX+L,EAAOwC,IAAI,WACnCvC,YAAahM,EAAE,cAAyB,OAAX+L,EAAOwC,IAAI,iBACxCpD,KAAMY,EAAOZ,MARRY,EAAOwC,QAWf5B,S,kCC5BT,GAhBuF,Y,IACrF+B,EAAY,EAAZA,aAEMlJ,EAAOmJ,MAAMvG,KAAK,CACtBrI,OAAQiE,KAAK4K,IAAIF,EAAc,KAE9B5E,KAAI,SAAC+E,EAAG9E,G,OAET,SAAC+E,KAAE,CAAW7J,UAAWJ,IAAAA,W,UACvB,SAACkK,GAAAA,EAAO,KADDhF,MAKX,OAAO,qB,SAAGvE,K,iICsJZ,GAnHiE,Y,IAAG0E,EAAK,EAALA,MAAOyC,EAAG,EAAHA,IACrDlG,GAAAA,EAAAA,EAAAA,GAAe,gBAA3BzG,EAAYyG,EAAZzG,EAAG0G,EAASD,EAATC,KACLsI,GAAeC,EAAAA,EAAAA,YAAWC,GAAAA,GAE1B3H,GAAYC,EAAAA,GAAAA,IAAYC,GAAAA,GAAiBC,GAAAA,IACzCC,GAAcH,EAAAA,GAAAA,IAAYI,GAAAA,GAAwBF,GAAAA,IAClD,GAAaG,EAAAA,GAAAA,IAAYN,EAAWI,GAAlCG,OAEFuC,EA/BY,SAClBH,EACA/B,G,IAKU,EAHJkC,EAA+B,CACnClC,SAAAA,EACAG,KAAM4B,EAAM5B,KACZ6G,QAAQ,EAIP,IAHC,OADM,EACL7D,EAAAA,GAAAA,MAAiBpB,EAAMM,QACxB,OAFM,EAELc,EAAAA,GAAAA,KAAgBpB,EAAMO,UACvB,OAHM,EAGLa,EAAAA,GAAAA,MAAiB,GAA4BpB,OAAzBA,EAAMQ,gBAAgB,KAAuB,OAApBR,EAAMU,gBAH9C,GAINV,EAAM5B,OAKV,OAFI4B,EAAMI,SAAWC,EAAAA,GAAAA,aAA4BF,EAAQD,SAAWF,EAAME,UAEnEC,EAeS+E,CAAYlF,EAAOpC,GAE7BuH,EAAiB,SAACzG,EAA0BmB,GAChD,IAAM,EAAWG,EAAT5B,KACFtC,EAAM4C,EAAKtC,KAAKyD,GAEtB,GAAIzB,IAASgD,EAAAA,GAAAA,MAAgB,CAC3B,IAAMgE,EAAQtJ,EAAImJ,OAKdI,GAAsB,QAAtBA,EAAAA,GAAAA,GAAgBD,GAAM,KAAtBC,EAAsB,GAFtBC,EAAwB,EAAxBA,QAA0BC,EAAoB,EAApBA,MAAK,EAE/BF,EAAsB,GADtBC,EAAsB,EAAtBA,QAAwBC,EAAkB,EAAlBA,MAGtBC,GAAsBC,EAAAA,GAAAA,IAAeX,EAAcY,GAAiBC,mBACpEC,GAAoBH,EAAAA,GAAAA,IAAeX,EAAce,GAAeF,mBAEtE,OACE,UAACrD,MAAG,CAACvH,UAAWJ,IAAAA,a,WACd,UAAC4H,IAAC,C,UACCzM,EAAE,gBAAgB,IAAE0P,EAAqB,KACzCxI,EAAAA,GAAAA,IAAkBkH,OAAO4B,GAAgBtJ,OAE5C,UAAC+F,IAAC,C,UACCzM,EAAE,aAAayO,cAAc,IAAEqB,EAAmB,KAClD5I,EAAAA,GAAAA,IAAkBkH,OAAO6B,GAAcvJ,SAMhD,IAAMwJ,EAAelK,EAAImJ,OACzB,GAAI7G,IAASgD,EAAAA,GAAAA,KACX,MAAO,GAAwB6E,OAArBnQ,EAAE,gBAAgB,KAAkD,QAA/CmQ,EAAAA,GAAAA,IAAwBD,EAAclQ,EAAG0G,IAG1E,IAAM8D,GAAQ4F,EAAAA,GAAAA,IAAuBF,EAAc,GACnD,MAAO,GAAwBlQ,OAArBA,EAAE,gBAAgB,KAGzB,OAH4BA,EAAE,UAAW,CAC1CqQ,MAAO7F,EACPA,OAAOtD,EAAAA,GAAAA,IAAkBsD,EAAO9D,OAIpC,OACE,sB,WACE,UAAC8F,MAAG,CAACvH,UAAWJ,IAAAA,e,WACd,SAACgI,KAAE,CAAC5H,UAAWJ,IAAAA,M,SAAe7E,EAAE,6BAChC,SAACyM,IAAC,CAACxH,UAAWJ,IAAAA,S,SAAkB7E,EAAE,sCAEpC,UAACsQ,KAAE,CAACrL,UAAWL,IAAWC,IAAAA,iBAAyBA,IAAAA,gB,WACjD,SAAC0L,GAAAA,EAAW,CACVC,UAAUC,EAAAA,GAAAA,IAA2BpG,GACrCqG,QAASC,GAAAA,GACTC,QAAS,W,OACP,SAACC,GAAiC,CAChCnC,aAAcxE,EAAMI,SAAWC,EAAAA,GAAAA,WAA6BL,EAAME,SAAW,KAGjF0G,OAAQ,SAACC,GACP,IAAM,EAAWA,EAATnI,KAER,OACE,qB,SACGA,EAAKtC,KAAKwD,KACT,SAAC9D,EAAoD+D,GACnD,IAAM7D,EAAO,IAAIR,KAAKM,EAAIE,MAIpB8K,EADJ9G,EAAME,SA9EX,GA8EkCF,EAAMI,SAAWC,EAAAA,GAAAA,YACYR,EAAMkH,EAElE,OACE,SAACnC,KAAE,CAED7J,UAAWL,IAAWC,IAAAA,WAAmBmM,GAAiBnM,IAAAA,S,SAEzDmM,GACC,SAACE,KAAE,C,SACAlR,EAAE,mBAAoB,CACrBqQ,MAAOnG,EAAME,SAzF1B,EA0Fa5E,MAAM0B,EAAAA,GAAAA,IAAkBgD,EAAME,SA1F3C,EA0FgE1D,QAIvD,sB,WACE,SAACyK,GAAAA,QAAgB,CAACC,SAASC,EAAAA,GAAAA,IAAqBnL,EAAMQ,G,UACpD,SAACwK,KAAE,C,UAAE9J,EAAAA,GAAAA,IAAelB,EAAMQ,QAG5B,SAAC+F,IAAC,C,SAAE4C,EAAezG,EAAMmB,SAhBxB/D,EAAIE,cA4BxByG,S,sBR3JG2E,GAAAA,EACC,YAAG,WADJA,EAEG,cAAG,aAFNA,EAGH,QAAG,OAHAA,EAID,UAAG,SAJFA,EAKA,WAAG,U,CALHA,IAAAA,EAAM,KAQlB,IAAMC,IAAO,EAMZ,IALC,OADW,EACVD,EAAOE,YAAcC,IACtB,OAFW,EAEVH,EAAOI,cAAgBC,IACxB,OAHW,EAGVL,EAAOM,QAAUC,IAClB,OAJW,EAIVP,EAAOQ,UAAYC,IACpB,OALW,EAKVT,EAAOU,WAAaC,IALV,GAQAC,GAAY,OAAQpF,KAAKyE,IAAmBzH,KAAI,SAACyE,G,MAAS,CACrEA,IAAAA,EACA4D,UAAWZ,GAAKhD,OAGL6D,GAAc,SAACC,EAAaC,EAAeC,IACtDC,EAAAA,GAAAA,IAAe,eAA0BF,OAAXD,EAAI,SAAa,OAANC,GAASC,I,mFS8JpD,GAlKwC,WACtC,IAAM,GAAQ9L,EAAAA,EAAAA,GAAe,gBAArBzG,EACFyS,GAASC,EAAAA,EAAAA,aACT1D,GAAeC,EAAAA,EAAAA,YAAWC,GAAAA,GAC1BpH,GAAS6K,EAAAA,GAAAA,KAEe5K,GAAAA,EAAAA,EAAAA,WAAS,GAAhC6I,EAAuB7I,EAAe,GAA7B6K,EAAc7K,EAAe,GACjBA,GAAAA,EAAAA,EAAAA,UAAS,GAA9B8K,EAAqB9K,EAAW,GAAxB+K,EAAa/K,EAAW,GACbgL,GAAuB,OAAvBA,IAAuB,GAA1C7I,EAAmB6I,EAAuB,GAAnCrG,EAAYqG,EAAuB,GAC3CC,GAAQC,EAAAA,GAAAA,YACR,GAAYC,EAAAA,EAAAA,MAAVC,MAEFC,GAA8BC,EAAAA,EAAAA,aAAY,W,OAC9C,iBAAOzK,G,iEACL,O,GAAM0K,EAAAA,GAAAA,IAAe1K,GAAM2K,MAAK,WAC9BJ,EAAMK,QAAO/K,EAAAA,GAAAA,W,cADf,S,2BADKG,G,gCADuC,GAM9C,CAACuK,IAGGM,EAAMvB,GAAUW,GAEhBa,EAAW,W,OAAA,mB,IACXvE,EAMEvG,E,iEAJ6BuG,EAA/BjF,EAAM5B,OAASgD,EAAAA,GAAAA,MAAyBpB,EAAMM,MACzCN,EAAM5B,OAASgD,EAAAA,GAAAA,KAAwBpB,EAAMO,QACxC,GAA4BP,OAAzBA,EAAMQ,gBAAgB,KAAuB,OAApBR,EAAMU,eAE1ChC,EAA0B,CAC9BT,SAAUL,EACVQ,KAAM4B,EAAM5B,KACZ6G,OAAAA,EACAwE,SAAUC,EAAAA,GAAAA,OAER1J,EAAMI,SAAWC,EAAAA,GAAAA,aACnB3B,EAAKwB,SAAWF,EAAME,WAGxByJ,EAAAA,GAAAA,IAAkB,eAAe,QAAEzJ,SAAU,MAASxB,IAEtDgK,GAAW,G,iBAGT,O,sBAAA,C,EAAMQ,EAA4BxK,I,cAAlC,SACAoK,EAAMhT,EAAE,4BAA6B,CACnC8T,OAAQC,GAAAA,YAAAA,UAEVtB,EAAOjR,KAAK,K,oBACJ,SACRwR,EAAMhT,EAAE,wBAAyB,CAC/B8T,OAAQC,GAAAA,YAAAA,Q,oBAIZnB,GAAW,G,6DAjCI,GAoCXoB,EAAeP,EAAIlF,MAAQ+C,EAAOU,WAClCiC,EAAaD,EAAe,IAAM,EAAU9B,GAAUnS,OAAU,IAwDtE,OACE,UAACyM,MAAG,CAACvH,UAAWL,IAAWsP,IAAAA,U,WACzB,SAACC,GAAAA,EAAQ,CAACjS,MAAO+R,KAEjB,SAACzH,MAAG,CAACvH,UAAWJ,IAAAA,a,SACb+L,GACC,SAAC7B,GAAAA,EAAO,CAACqF,YAAU,EAAC5P,KAAM6P,GAAAA,EAAAA,SAE1B,SAACZ,EAAItB,UAAS,CACZmC,YAAaxB,EACb5I,MAAOA,EACPwC,SAAUA,EACVE,SApBwC,SAAC0F,GACjDF,GAAYqB,EAAIlF,IAAK+D,IAoBbtF,UAjB0C,SAACuH,EAAOtJ,EAAQsH,IT9ErC,SAC/BF,EACAkC,EACAtJ,EACAsH,IAEAiC,EAAAA,GAAAA,IAAe,eAA0BD,OAAXlC,EAAI,SAAa,OAANkC,GAAStJ,EAAOoD,aAAcpD,EAAOqD,SAAUiE,GSyEtFkC,CAAkBhB,EAAIlF,IAAKgG,EAAOtJ,EAAQsH,IAiBlC5F,KACE,UAACH,MAAG,CAACvH,UAAWJ,IAAAA,oB,UACbgO,EAAS,IACR,SAAC6B,GAAAA,GAAM,CACLzP,UAAWJ,IAAAA,eACXL,KAAMmQ,GAAAA,GAAAA,MACNC,QAAQ,SAACC,GAAAA,EAAe,IACxBvI,QA3EH,WACE,IAAXuG,GAAqC,WAArB3I,EAAMc,YACxB8H,EAAU,GACVV,GAAYqB,EAAIlF,IAAK,cAErBuE,GAAU,SAACgC,G,OAAYA,EAAU,KACjC1C,GAAYqB,EAAIlF,IAAK,cAsEPjG,KAAMyM,GAAAA,GAAAA,U,SAEL/U,EAAE,kBAIP,SAAC0U,GAAAA,GAAM,CACLzP,UAAWJ,IAAAA,eACXL,KAAMmQ,GAAAA,GAAAA,MACNK,OAAShB,OAAsCnR,GAAvB,SAACoS,GAAAA,EAAgB,IACzCC,WA1DVzB,EAAIlF,MAAQ+C,EAAOE,cAAgBtH,EAAMc,YAEzCyI,EAAIlF,MAAQ+C,EAAOQ,aACbqD,EAAAA,GAAAA,GACNnG,EACA,CACE1G,KAAM4B,EAAM5B,KACZkC,MAAON,EAAMM,MACbC,QAASP,EAAMO,QACf6E,MAAO,CAAE3E,WAAYT,EAAMQ,gBAAiBG,SAAUX,EAAMU,gBAE9D9C,GAgDUwE,QA7ED,WACR0H,EAWHN,KAVe,IAAXb,GAAqC,WAArB3I,EAAMc,WAExB8H,EAAUZ,GAAUnS,OAAS,GAG7B+S,GAAU,SAACgC,G,OAAYA,EAAU,KTxEV,SAC7BzC,EACAnI,GAEA,IAAIqI,EAEAF,IAAQf,EAAOE,YACjBe,EAAW,CAAEzH,QAASZ,EAAMc,YACnBqH,IAAQf,EAAOM,QAExBW,EAAW,CAAE6C,UAAWlL,EAAM5B,MACrB+J,IAAQf,EAAOQ,UACxBS,EAAW,CACT/H,MAAON,EAAM5B,OAASgD,EAAAA,GAAAA,MAAiBpB,EAAMM,MAAQ,KACrDC,QAASP,EAAM5B,OAASgD,EAAAA,GAAAA,KAAgBpB,EAAMO,QAAU,KACxD6E,MACEpF,EAAM5B,OAASgD,EAAAA,GAAAA,MAAiB,GAA4BpB,OAAzBA,EAAMQ,gBAAgB,KAAuB,OAApBR,EAAMU,eAAkB,KACtFR,SAAUF,EAAMI,SAAWC,EAAAA,GAAAA,WAA6BL,EAAME,SAAW,MAElEiI,IAAQf,EAAOI,gBAExBa,EAAW,CAAE8C,YAAanL,EAAMI,SAGlC8H,GAAYC,EAAK,OAAQE,GSmDrB+C,CAAgB7B,EAAIlF,IAAKrE,K,SAqEuBlK,EAAlCgU,EAAoC,gBAAnB,4B,8BCnHrC,IAAeuB,EAAAA,EAAAA,IA5CmB,WAEhC,IAAoB9O,GAAAA,EAAAA,EAAAA,GAAe,gBAA3BzG,EAAYyG,EAAZzG,EAAG0G,EAASD,EAATC,KACL+L,GAASC,EAAAA,EAAAA,aAGmC8C,GAAAA,EAAAA,GAAAA,KAA1CxM,EAA0CwM,EAA1CxM,KACFC,EAD4CuM,EAApCvM,YAC6BwJ,EAAOgD,WAAazM,EAQ/D,OANAD,EAAAA,EAAAA,YAAU,WACJC,GACFyJ,EAAOjR,KAAK,OAEb,CAACiR,EAAQzJ,KAGV,sB,WACE,SAAC0M,EAAAA,EAAc,CACbvO,MAAOnH,EAAE,gBACT2V,KAAKC,EAAAA,GAAAA,IAAgBlP,GAAMmP,EAAAA,GAAAA,OAC3BC,oBAAoBC,EAAAA,GAAAA,KAAsBF,EAAAA,GAAAA,OAC1CG,UAAQ,EACRC,SAAO,KAGT,SAACzJ,MAAG,CAACvH,UAAWiR,IAAAA,c,UACd,SAAC1J,MAAG,CAACvH,UAAWL,IAAWsR,IAAAA,KAAmBjN,GAAapE,IAAAA,kB,SACxDoE,GAAY,SAAC8F,GAAAA,EAAO,KAAM,SAACoH,GAAqB,e,mCC/CpD,MAKA,EAKA,E,0FAVKC,GAAAA,EACN,KAAG,OADGA,EAER,GAAG,K,CAFKA,IAAAA,EAAkB,K,SAKlBC,GAAAA,EACL,MAAG,QADEA,EAEP,IAAG,M,CAFIA,IAAAA,EAAiB,K,SAKjBC,GAAAA,EACK,gBAAG,mBADRA,EAEG,cAAG,iBAFNA,EAGG,cAAG,iBAHNA,EAIC,YAAG,e,CAJJA,IAAAA,EAAS,M,mCCVrB,IAEO,EAIA,EAyDA,E,0FA7DK1C,GAAAA,EACL,MAALvO,Q,CADUuO,IAAAA,EAAY,K,SAIZtI,GAAAA,EACN,KAAG,aADGA,EAEL,MAAG,cAFEA,EAGL,MAAG,c,CAHEA,IAAAA,EAAQ,K,SAyDRf,GAAAA,EACL,MAAG,QADEA,EAEA,WAAG,a,CAFHA,IAAAA,EAAe,M,kBC9D3BgM,EAAOC,QAAU,CAAC,KAAO,2BAA2B,OAAS,6BAA6B,cAAgB,oCAAoC,MAAQ,4BAA4B,YAAc,kCAAkC,SAAW,+BAA+B,YAAc,oC,kBCA1RD,EAAOC,QAAU,CAAC,aAAe,sCAAsC,iBAAmB,0CAA0C,eAAiB,wCAAwC,MAAQ,+BAA+B,SAAW,kCAAkC,oBAAsB,6CAA6C,eAAiB,wCAAwC,WAAa,oCAAoC,QAAU,iCAAiC,aAAe,sCAAsC,oBAAsB,6CAA6C,eAAiB,wCAAwC,MAAQ,+BAA+B,MAAQ,iC,kBCAzsBD,EAAOC,QAAU,CAAC,aAAe,+BAA+B,cAAgB,gCAAgC,eAAiB,iCAAiC,cAAgB,gCAAgC,kBAAoB,sC,kBCAtOD,EAAOC,QAAU,CAAC,cAAgB,6BAA6B,iBAAmB,gCAAgC,KAAO,oBAAoB,SAAW,wBAAwB,sBAAwB,qCAAqC,UAAY,2B,kBCAzPD,EAAOC,QAAU,CAAC,iBAAmB,0C","sources":["webpack://_N_E/./public/icons/repeat.svg","webpack://_N_E/./public/images/moon-illustration.svg","webpack://_N_E/?ce46","webpack://_N_E/./node_modules/@radix-ui/react-progress/dist/index.mjs","webpack://_N_E/./src/components/dls/Progress/index.tsx","webpack://_N_E/./types/auth/Streak.ts","webpack://_N_E/./src/hooks/auth/useGetStreakWithMetadata.ts","webpack://_N_E/./public/icons/calendar.svg","webpack://_N_E/./public/icons/settings-stroke.svg","webpack://_N_E/./src/components/ReadingGoalPage/utils/tabs.ts","webpack://_N_E/./src/components/ReadingGoalPage/hooks/useReadingGoalReducer.ts","webpack://_N_E/./src/components/ReadingGoalPage/OptionButton.tsx","webpack://_N_E/./src/components/ReadingGoalPage/ReadingGoalExamplesTab.tsx","webpack://_N_E/./src/components/ReadingGoalPage/ReadingGoalTargetAmountTab.tsx","webpack://_N_E/./src/components/ReadingGoalPage/ReadingGoalTimeTab.tsx","webpack://_N_E/./src/components/ReadingGoalPage/ReadingGoalTypeTab.tsx","webpack://_N_E/./src/components/ReadingGoalPage/ReadingGoalWeekPreviewTabSkeleton.tsx","webpack://_N_E/./src/components/ReadingGoalPage/ReadingGoalWeekPreviewTab.tsx","webpack://_N_E/./src/components/ReadingGoalPage/index.tsx","webpack://_N_E/./src/pages/reading-goal/index.tsx","webpack://_N_E/./types/Range.ts","webpack://_N_E/./types/auth/Goal.ts","webpack://_N_E/./src/components/ReadingGoalPage/OptionButton.module.scss","webpack://_N_E/./src/components/ReadingGoalPage/ReadingGoalPage.module.scss","webpack://_N_E/./src/components/dls/Progress/Progress.module.scss","webpack://_N_E/./src/pages/index.module.scss","webpack://_N_E/./src/pages/reading-goal/reading-goal.module.scss"],"sourcesContent":["var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nvar SvgRepeat = function SvgRepeat(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M6.65 5.813h11.625V9.3l4.65-4.65L18.275 0v3.487H4.325v6.976H6.65v-4.65Zm11.625 11.625H6.65V13.95L2 18.6l4.65 4.65v-3.488H20.6v-6.975h-2.325v4.65Z\",\n fill: \"currentColor\"\n })));\n};\nexport default SvgRepeat;","var _path, _path2, _path3, _path4, _path5;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nvar SvgMoonIllustration = function SvgMoonIllustration(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 92 80\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m12.34 45.828.005.007.006.007c2.639 2.996 5.947 5.452 9.705 7.21a32.563 32.563 0 0 0 12.105 2.993 32.981 32.981 0 0 0 12.401-1.734c3.953-1.36 7.547-3.46 10.544-6.165 2.996-2.705 5.33-5.954 6.841-9.536a24.806 24.806 0 0 0 1.925-11.245c-.243-3.83-1.382-7.569-3.337-10.97-1.956-3.4-4.684-6.385-8.002-8.76l-.291.406.272-.42a.577.577 0 0 1-.248-.322.477.477 0 0 1 .04-.358.642.642 0 0 1 .33-.284.808.808 0 0 1 .498-.034c5.97 1.539 11.385 4.455 15.713 8.457 4.327 4.002 7.416 8.949 8.967 14.348a29.004 29.004 0 0 1-.112 16.452c-1.625 5.382-4.782 10.294-9.164 14.248-4.382 3.954-9.838 6.81-15.829 8.282a39.4 39.4 0 0 1-18.315.102c-6.01-1.405-11.505-4.201-15.941-8.106-4.434-3.903-7.656-8.776-9.355-14.137a.477.477 0 0 1 .04-.346c.061-.116.17-.22.32-.284a.806.806 0 0 1 .492-.043.702.702 0 0 1 .39.232Z\",\n stroke: \"currentColor\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M79.173 34.298c.302-1.936.417-3.889.345-5.837a29.111 29.111 0 0 1 1.431 9.421c-.061 4.362-1.11 8.668-3.084 12.654-1.974 3.987-4.831 7.572-8.4 10.533-3.57 2.96-7.776 5.235-12.36 6.68a39.256 39.256 0 0 1-14.294 1.72c-4.846-.311-9.568-1.512-13.878-3.528-4.309-2.016-8.113-4.803-11.18-8.188-3.066-3.385-5.33-7.296-6.658-11.493l-.004-.013a.41.41 0 0 1 .004-.284c3.692 5.875 9.286 10.586 16.028 13.501 6.934 2.998 14.735 3.948 22.298 2.718 7.562-1.231 14.51-4.582 19.853-9.584 5.343-5.002 8.81-11.404 9.899-18.3Z\",\n stroke: \"currentColor\"\n })), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M54.242 8.04c3.262 2.337 5.94 5.27 7.86 8.605 1.917 3.336 3.033 7 3.272 10.752a24.305 24.305 0 0 1-1.887 11.018c-1.483 3.512-3.772 6.702-6.717 9.36-2.944 2.658-6.479 4.724-10.37 6.063a32.481 32.481 0 0 1-12.213 1.708 32.064 32.064 0 0 1-11.92-2.948c-3.698-1.729-6.95-4.144-9.54-7.086a1.202 1.202 0 0 0-.666-.403 1.306 1.306 0 0 0-.799.07c-.248.106-.449.287-.566.512a.976.976 0 0 0-.078.72c1.727 5.455 5.004 10.408 9.504 14.37 4.502 3.962 10.071 6.795 16.159 8.218a39.901 39.901 0 0 0 18.548-.103c6.067-1.491 11.598-4.386 16.044-8.397 4.447-4.012 7.655-9.001 9.307-14.475a29.503 29.503 0 0 0 .115-16.734c-1.578-5.491-4.718-10.516-9.11-14.577-4.39-4.06-9.881-7.016-15.928-8.574a1.308 1.308 0 0 0-.81.055c-.254.103-.46.284-.582.511a.977.977 0 0 0-.08.73c.068.244.23.458.457.606v0Z\",\n stroke: \"currentColor\",\n strokeWidth: 0.5,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n })), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n clipRule: \"evenodd\",\n d: \"M28.306 38.49c1.355-4.41 2.243-7.634 3.174-13.1-.05.085 7.202-2.569 10.347-3.753-4.508-.57-10.678-1.417-10.617-1.324-.848-3.48-1.636-8.948-3.62-15.313-.852 4.775-2.35 10.221-2.973 15.03-3.843 1-6.947 2.025-10.617 3.573 4.511.96 7.36 1.888 11.077 2.73 1.125 5.027 1.95 7.847 3.229 12.158Z\",\n stroke: \"currentColor\",\n strokeWidth: 1.5,\n strokeMiterlimit: 1.5,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n })), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M5.744 25c.02 1.313-.077 2.688.05 3.994M2 32.059c.708.011 1.434-.104 2.14-.05M6.206 33.953c-.185 1.095-.145 2.213-.15 3.322M8.378 31.378c.983.085 2.025-.244 2.98-.015\",\n stroke: \"currentColor\",\n strokeWidth: 1.5,\n strokeMiterlimit: 1.5,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n })));\n};\nexport default SvgMoonIllustration;","\n (window.__NEXT_P = window.__NEXT_P || []).push([\n \"/reading-goal\",\n function () {\n return require(\"private-next-pages/reading-goal/index.tsx\");\n }\n ]);\n if(module.hot) {\n module.hot.dispose(function () {\n window.__NEXT_P.push([\"/reading-goal\"])\n });\n }\n ","import $k03wI$babelruntimehelpersesmextends from \"@babel/runtime/helpers/esm/extends\";\nimport {forwardRef as $k03wI$forwardRef, createElement as $k03wI$createElement} from \"react\";\nimport {createContextScope as $k03wI$createContextScope} from \"@radix-ui/react-context\";\nimport {Primitive as $k03wI$Primitive} from \"@radix-ui/react-primitive\";\n\n\n\n\n\n/* -------------------------------------------------------------------------------------------------\n * Progress\n * -----------------------------------------------------------------------------------------------*/ const $67824d98245208a0$var$PROGRESS_NAME = 'Progress';\nconst $67824d98245208a0$var$DEFAULT_MAX = 100;\nconst [$67824d98245208a0$var$createProgressContext, $67824d98245208a0$export$388eb2d8f6d3261f] = $k03wI$createContextScope($67824d98245208a0$var$PROGRESS_NAME);\nconst [$67824d98245208a0$var$ProgressProvider, $67824d98245208a0$var$useProgressContext] = $67824d98245208a0$var$createProgressContext($67824d98245208a0$var$PROGRESS_NAME);\nconst $67824d98245208a0$export$b25a304ec7d746bb = /*#__PURE__*/ $k03wI$forwardRef((props, forwardedRef)=>{\n const { __scopeProgress: __scopeProgress , value: valueProp , max: maxProp , getValueLabel: getValueLabel = $67824d98245208a0$var$defaultGetValueLabel , ...progressProps } = props;\n const max = $67824d98245208a0$var$isValidMaxNumber(maxProp) ? maxProp : $67824d98245208a0$var$DEFAULT_MAX;\n const value = $67824d98245208a0$var$isValidValueNumber(valueProp, max) ? valueProp : null;\n const valueLabel = $67824d98245208a0$var$isNumber(value) ? getValueLabel(value, max) : undefined;\n return /*#__PURE__*/ $k03wI$createElement($67824d98245208a0$var$ProgressProvider, {\n scope: __scopeProgress,\n value: value,\n max: max\n }, /*#__PURE__*/ $k03wI$createElement($k03wI$Primitive.div, $k03wI$babelruntimehelpersesmextends({\n \"aria-valuemax\": max,\n \"aria-valuemin\": 0,\n \"aria-valuenow\": $67824d98245208a0$var$isNumber(value) ? value : undefined,\n \"aria-valuetext\": valueLabel,\n role: \"progressbar\",\n \"data-state\": $67824d98245208a0$var$getProgressState(value, max),\n \"data-value\": value !== null && value !== void 0 ? value : undefined,\n \"data-max\": max\n }, progressProps, {\n ref: forwardedRef\n })));\n});\n/*#__PURE__*/ Object.assign($67824d98245208a0$export$b25a304ec7d746bb, {\n displayName: $67824d98245208a0$var$PROGRESS_NAME\n});\n$67824d98245208a0$export$b25a304ec7d746bb.propTypes = {\n max (props, propName, componentName) {\n const propValue = props[propName];\n const strVal = String(propValue);\n if (propValue && !$67824d98245208a0$var$isValidMaxNumber(propValue)) return new Error($67824d98245208a0$var$getInvalidMaxError(strVal, componentName));\n return null;\n },\n value (props, propName, componentName) {\n const valueProp = props[propName];\n const strVal = String(valueProp);\n const max = $67824d98245208a0$var$isValidMaxNumber(props.max) ? props.max : $67824d98245208a0$var$DEFAULT_MAX;\n if (valueProp != null && !$67824d98245208a0$var$isValidValueNumber(valueProp, max)) return new Error($67824d98245208a0$var$getInvalidValueError(strVal, componentName));\n return null;\n }\n};\n/* -------------------------------------------------------------------------------------------------\n * ProgressIndicator\n * -----------------------------------------------------------------------------------------------*/ const $67824d98245208a0$var$INDICATOR_NAME = 'ProgressIndicator';\nconst $67824d98245208a0$export$2b776f7e7ee60dbd = /*#__PURE__*/ $k03wI$forwardRef((props, forwardedRef)=>{\n var _context$value;\n const { __scopeProgress: __scopeProgress , ...indicatorProps } = props;\n const context = $67824d98245208a0$var$useProgressContext($67824d98245208a0$var$INDICATOR_NAME, __scopeProgress);\n return /*#__PURE__*/ $k03wI$createElement($k03wI$Primitive.div, $k03wI$babelruntimehelpersesmextends({\n \"data-state\": $67824d98245208a0$var$getProgressState(context.value, context.max),\n \"data-value\": (_context$value = context.value) !== null && _context$value !== void 0 ? _context$value : undefined,\n \"data-max\": context.max\n }, indicatorProps, {\n ref: forwardedRef\n }));\n});\n/*#__PURE__*/ Object.assign($67824d98245208a0$export$2b776f7e7ee60dbd, {\n displayName: $67824d98245208a0$var$INDICATOR_NAME\n});\n/* ---------------------------------------------------------------------------------------------- */ function $67824d98245208a0$var$defaultGetValueLabel(value, max) {\n return `${Math.round(value / max * 100)}%`;\n}\nfunction $67824d98245208a0$var$getProgressState(value, maxValue) {\n return value == null ? 'indeterminate' : value === maxValue ? 'complete' : 'loading';\n}\nfunction $67824d98245208a0$var$isNumber(value) {\n return typeof value === 'number';\n}\nfunction $67824d98245208a0$var$isValidMaxNumber(max) {\n // prettier-ignore\n return $67824d98245208a0$var$isNumber(max) && !isNaN(max) && max > 0;\n}\nfunction $67824d98245208a0$var$isValidValueNumber(value, max) {\n // prettier-ignore\n return $67824d98245208a0$var$isNumber(value) && !isNaN(value) && value <= max && value >= 0;\n} // Split this out for clearer readability of the error message.\nfunction $67824d98245208a0$var$getInvalidMaxError(propValue, componentName) {\n return `Invalid prop \\`max\\` of value \\`${propValue}\\` supplied to \\`${componentName}\\`. Only numbers greater than 0 are valid max values. Defaulting to \\`${$67824d98245208a0$var$DEFAULT_MAX}\\`.`;\n}\nfunction $67824d98245208a0$var$getInvalidValueError(propValue, componentName) {\n return `Invalid prop \\`value\\` of value \\`${propValue}\\` supplied to \\`${componentName}\\`. The \\`value\\` prop must be:\n - a positive number\n - less than the value passed to \\`max\\` (or ${$67824d98245208a0$var$DEFAULT_MAX} if no \\`max\\` prop is set)\n - \\`null\\` if the progress is indeterminate.\n\nDefaulting to \\`null\\`.`;\n}\nconst $67824d98245208a0$export$be92b6f5f03c0fe9 = $67824d98245208a0$export$b25a304ec7d746bb;\nconst $67824d98245208a0$export$adb584737d712b70 = $67824d98245208a0$export$2b776f7e7ee60dbd;\n\n\n\n\nexport {$67824d98245208a0$export$388eb2d8f6d3261f as createProgressScope, $67824d98245208a0$export$b25a304ec7d746bb as Progress, $67824d98245208a0$export$2b776f7e7ee60dbd as ProgressIndicator, $67824d98245208a0$export$be92b6f5f03c0fe9 as Root, $67824d98245208a0$export$adb584737d712b70 as Indicator};\n//# sourceMappingURL=index.mjs.map\n","import * as RadixProgress from '@radix-ui/react-progress';\nimport classNames from 'classnames';\n\nimport styles from './Progress.module.scss';\n\nexport enum ProgressSize {\n Small = 'small',\n Medium = 'medium',\n Large = 'large',\n}\n\ninterface ProgressProps {\n value: number;\n size?: ProgressSize;\n rootStyles?: string;\n indicatorStyles?: string;\n}\n\nconst Progress: React.FC<ProgressProps> = ({\n value,\n rootStyles,\n size = ProgressSize.Small,\n indicatorStyles,\n}) => {\n const rootClassNames = classNames(\n styles.progressRoot,\n {\n [styles.progressSmall]: size === ProgressSize.Small,\n [styles.progressMedium]: size === ProgressSize.Medium,\n [styles.progressLarge]: size === ProgressSize.Large,\n },\n rootStyles,\n );\n\n return (\n <RadixProgress.Root className={rootClassNames} value={value}>\n <RadixProgress.Indicator\n className={classNames(styles.progressIndicator, indicatorStyles)}\n style={{ transform: `translateX(-${100 - value}%)` }}\n />\n </RadixProgress.Root>\n );\n};\n\nexport default Progress;\n","import { Mushaf } from '../QuranReader';\n\nimport { ActivityDay, QuranActivityDay } from './ActivityDay';\nimport { QuranGoalStatus } from './Goal';\n\nexport enum StreakType {\n QURAN = 'QURAN',\n}\n\nexport type StreakWithUserMetadata = {\n streak: number;\n goal?: QuranGoalStatus;\n activityDays: (Omit<ActivityDay<QuranActivityDay>, 'date'> & {\n date: string;\n })[];\n};\n\nexport type StreakWithMetadataParams = {\n from: string;\n to: string;\n mushafId: Mushaf;\n type: StreakType;\n};\n","/* eslint-disable max-lines */\n/* eslint-disable react-func/max-lines-per-function */\nimport { useEffect, useMemo, useState } from 'react';\n\nimport useTranslation from 'next-translate/useTranslation';\nimport { useSelector, shallowEqual } from 'react-redux';\nimport useSWR from 'swr';\n\nimport { selectQuranFont, selectQuranMushafLines } from '@/redux/slices/QuranReader/styles';\nimport { ActivityDay, CurrentQuranActivityDay, QuranActivityDay } from '@/types/auth/ActivityDay';\nimport { StreakType, StreakWithMetadataParams } from '@/types/auth/Streak';\nimport { getMushafId } from '@/utils/api';\nimport { getStreakWithUserMetadata } from '@/utils/auth/api';\nimport { makeStreakUrl } from '@/utils/auth/apiPaths';\nimport { isLoggedIn } from '@/utils/auth/login';\nimport { dateToDateString, getFullDayName } from '@/utils/datetime';\nimport { toLocalizedNumber } from '@/utils/locale';\n\ntype Day = { current: boolean; dateString: string; date: Date };\n\nconst useGetWeekDays = () => {\n return useMemo(() => {\n const days: Day[] = [];\n const today = new Date();\n\n // we want to timeline to start from Sunday\n const sunday = new Date(today);\n if (today.getDay() !== 0) {\n sunday.setDate(today.getDate() - today.getDay());\n }\n\n for (let i = 0; i < 7; i += 1) {\n const day = new Date(sunday);\n day.setDate(sunday.getDate() + i);\n\n days.push({\n current: day.getDate() === today.getDate(),\n date: day,\n dateString: dateToDateString(day),\n });\n }\n\n return days;\n }, []);\n};\n\nconst useGetWeekDayNames = (week: Day[], streak: number, showWeekdayName = false) => {\n const { t, lang } = useTranslation('reading-goal');\n\n return useMemo(() => {\n const names: { localizedNumber: string; title: string }[] = [];\n\n let showIncrement = streak > 1;\n let currentDayIndex = 0;\n if (!showWeekdayName && showIncrement) {\n week.forEach((day, index) => {\n /**\n * we need to make sure that the streak is bigger than\n * the current day's number.\n *\n * Example:\n * Streak: 3\n * Timeline:\n * 1 2 3 4 (5 <- current day) 6 7\n *\n * In this case, we don't want to show the increment and start counting days from 1\n */\n if (day.current) {\n showIncrement = streak > index + 1;\n currentDayIndex = index;\n }\n });\n }\n\n for (let i = 0; i < 7; i += 1) {\n let dayName: { localizedNumber: string; title: string };\n if (showWeekdayName) {\n dayName = {\n localizedNumber: toLocalizedNumber(i + 1, lang),\n title: getFullDayName(week[i].date, lang),\n };\n } else {\n /**\n * If we're showing the increment, we need to subtract all days from the beginning of the week till the current day, and after that increment it based on the day's index.\n *\n * Example:\n * Streak: 10\n * Timeline:\n * 1 (2 <- current day) 3 4 5 6 7\n *\n * We need to render \"1\" as Day 9, and \"2\" as Day 10.\n * \"1\" -> i = 0; currentDayIndex = 1; streak = 10; 10 - 1 + 0 = 9\n * \"2\" -> i = 1; currentDayIndex = 1; streak = 10; 10 - 1 + 1 = 10\n *\n */\n const localizedNumber = toLocalizedNumber(\n showIncrement ? streak - currentDayIndex + i : i + 1,\n lang,\n );\n\n dayName = {\n localizedNumber,\n title: t('day-x', {\n day: localizedNumber,\n }),\n };\n }\n\n names.push(dayName);\n }\n\n return names;\n }, [lang, showWeekdayName, streak, t, week]);\n};\n\nconst useGetStreakWithMetadata = ({\n showDayName,\n disableIfNoGoalExists,\n}: {\n showDayName?: boolean;\n disableIfNoGoalExists?: boolean;\n} = {}) => {\n const week = useGetWeekDays();\n const quranFont = useSelector(selectQuranFont, shallowEqual);\n const mushafLines = useSelector(selectQuranMushafLines, shallowEqual);\n const { mushaf } = getMushafId(quranFont, mushafLines);\n\n const [disabled, setDisabled] = useState<boolean | null>(null);\n\n const params: StreakWithMetadataParams = {\n mushafId: mushaf,\n from: week[0].dateString,\n to: week[week.length - 1].dateString,\n type: StreakType.QURAN,\n };\n\n // we don't pass the params to `makeStreakUrl` in the key so that we can invalidate the cache without getting the other params\n const { data, isValidating, error } = useSWR(\n isLoggedIn() && disabled !== true ? makeStreakUrl() : null,\n () => getStreakWithUserMetadata(params),\n {\n revalidateOnFocus: false,\n },\n );\n\n useEffect(() => {\n if (disabled !== null || !disableIfNoGoalExists || !data) {\n return;\n }\n\n /**\n * We don't want to re-fetch the data if the user has no goal.\n * This is useful for the quran reader widget when we invalidate the cache after the user has read something.\n */\n setDisabled(!data.data.goal);\n }, [disableIfNoGoalExists, disabled, data]);\n\n const isLoading = isValidating && !data;\n\n const { activityDays, goal, streak } = data?.data || {\n activityDays: [],\n goal: undefined,\n streak: 0,\n };\n\n const readingDaysMap = useMemo<\n Record<string, ActivityDay<QuranActivityDay> & { hasRead: boolean }>\n >(() => {\n if (!activityDays) return {};\n\n const result = {};\n\n activityDays.forEach((day) => {\n result[day.date] = {\n ...day,\n hasRead:\n day.pagesRead > 0 ||\n day.secondsRead > 0 ||\n day.ranges.length > 0 ||\n day.manuallyAddedSeconds > 0,\n };\n });\n\n return result;\n }, [activityDays]);\n\n const currentActivityDay: CurrentQuranActivityDay | undefined = useMemo(() => {\n return readingDaysMap[week.find((d) => d.current)?.dateString];\n }, [readingDaysMap, week]);\n\n const weekDayNames = useGetWeekDayNames(week, streak, showDayName);\n const weekData = useMemo(() => {\n return {\n days: week.map((day, idx) => ({\n ...day,\n info: weekDayNames[idx],\n })),\n readingDaysMap,\n };\n }, [week, weekDayNames, readingDaysMap]);\n\n return {\n isLoading,\n error,\n weekData,\n streak,\n goal,\n activityDays,\n currentActivityDay,\n };\n};\n\nexport type StreakWithMetadata = ReturnType<typeof useGetStreakWithMetadata>;\n\nexport default useGetStreakWithMetadata;\n","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nvar SvgCalendar = function SvgCalendar(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n strokeWidth: 1.5,\n stroke: \"currentColor\",\n className: \"w-6 h-6\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"M6.75 3v2.25M17.25 3v2.25M3 18.75V7.5a2.25 2.25 0 0 1 2.25-2.25h13.5A2.25 2.25 0 0 1 21 7.5v11.25m-18 0A2.25 2.25 0 0 0 5.25 21h13.5A2.25 2.25 0 0 0 21 18.75m-18 0v-7.5A2.25 2.25 0 0 1 5.25 9h13.5A2.25 2.25 0 0 1 21 11.25v7.5\"\n })));\n};\nexport default SvgCalendar;","var _path, _path2;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nvar SvgSettingsStroke = function SvgSettingsStroke(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n strokeWidth: 1.5,\n stroke: \"currentColor\",\n className: \"w-6 h-6\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"M9.594 3.94c.09-.542.56-.94 1.11-.94h2.593c.55 0 1.02.398 1.11.94l.213 1.281c.063.374.313.686.645.87.074.04.147.083.22.127.324.196.72.257 1.075.124l1.217-.456a1.125 1.125 0 0 1 1.37.49l1.296 2.247a1.125 1.125 0 0 1-.26 1.431l-1.003.827c-.293.24-.438.613-.431.992a6.759 6.759 0 0 1 0 .255c-.007.378.138.75.43.99l1.005.828c.424.35.534.954.26 1.43l-1.298 2.247a1.125 1.125 0 0 1-1.369.491l-1.217-.456c-.355-.133-.75-.072-1.076.124a6.57 6.57 0 0 1-.22.128c-.331.183-.581.495-.644.869l-.213 1.28c-.09.543-.56.941-1.11.941h-2.594c-.55 0-1.02-.398-1.11-.94l-.213-1.281c-.062-.374-.312-.686-.644-.87a6.52 6.52 0 0 1-.22-.127c-.325-.196-.72-.257-1.076-.124l-1.217.456a1.125 1.125 0 0 1-1.369-.49l-1.297-2.247a1.125 1.125 0 0 1 .26-1.431l1.004-.827c.292-.24.437-.613.43-.992a6.932 6.932 0 0 1 0-.255c.007-.378-.138-.75-.43-.99l-1.004-.828a1.125 1.125 0 0 1-.26-1.43l1.297-2.247a1.125 1.125 0 0 1 1.37-.491l1.216.456c.356.133.751.072 1.076-.124.072-.044.146-.087.22-.128.332-.183.582-.495.644-.869l.214-1.281z\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"M15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0z\"\n })));\n};\nexport default SvgSettingsStroke;","import useReadingGoalReducer from '../hooks/useReadingGoalReducer';\nimport ReadingGoalExamplesTab from '../ReadingGoalExamplesTab';\nimport ReadingGoalTargetAmountTab from '../ReadingGoalTargetAmountTab';\nimport ReadingGoalTimeTab from '../ReadingGoalTimeTab';\nimport ReadingGoalTypeTab from '../ReadingGoalTypeTab';\nimport ReadingGoalWeekPreviewTab from '../ReadingGoalWeekPreviewTab';\n\nimport { QuranGoalPeriod, GoalType } from '@/types/auth/Goal';\nimport { logButtonClick, logValueChange } from '@/utils/eventLogger';\n\nexport enum TabKey {\n ExamplesTab = 'examples',\n ContinuityTab = 'continuity',\n TypeTab = 'type',\n AmountTab = 'amount',\n PreviewTab = 'preview',\n}\n\nconst tabs = {\n [TabKey.ExamplesTab]: ReadingGoalExamplesTab,\n [TabKey.ContinuityTab]: ReadingGoalTimeTab,\n [TabKey.TypeTab]: ReadingGoalTypeTab,\n [TabKey.AmountTab]: ReadingGoalTargetAmountTab,\n [TabKey.PreviewTab]: ReadingGoalWeekPreviewTab,\n};\n\nexport const tabsArray = (Object.keys(tabs) as TabKey[]).map((key) => ({\n key,\n Component: tabs[key],\n}));\n\nexport const logTabClick = (tab: TabKey, event: string, metadata?: Record<string, unknown>) => {\n logButtonClick(`create_goal_${tab}_tab_${event}`, metadata);\n};\n\nexport const logTabNextClick = (\n tab: TabKey,\n state: ReturnType<typeof useReadingGoalReducer>[0],\n) => {\n let metadata: Record<string, unknown> | undefined;\n\n if (tab === TabKey.ExamplesTab) {\n metadata = { example: state.exampleKey };\n } else if (tab === TabKey.TypeTab) {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n metadata = { goal_type: state.type };\n } else if (tab === TabKey.AmountTab) {\n metadata = {\n pages: state.type === GoalType.PAGES ? state.pages : null,\n seconds: state.type === GoalType.TIME ? state.seconds : null,\n range:\n state.type === GoalType.RANGE ? `${state.rangeStartVerse}-${state.rangeEndVerse}` : null,\n duration: state.period === QuranGoalPeriod.Continuous ? state.duration : null,\n };\n } else if (tab === TabKey.ContinuityTab) {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n metadata = { goal_period: state.period };\n }\n\n logTabClick(tab, 'next', metadata);\n};\n\nexport const logTabInputChange = (\n tab: TabKey,\n input: string,\n values: { currentValue: unknown; newValue: unknown },\n metadata?: Record<string, unknown>,\n) => {\n logValueChange(`create_goal_${tab}_tab_${input}`, values.currentValue, values.newValue, metadata);\n};\n","/* eslint-disable max-lines */\n/* eslint-disable react-func/max-lines-per-function */\nimport { Dispatch, SetStateAction, useReducer } from 'react';\n\nimport BookIcon from '@/icons/book.svg';\nimport CalendarIcon from '@/icons/calendar.svg';\nimport ClockIcon from '@/icons/clock.svg';\nimport SettingsIcon from '@/icons/settings-stroke.svg';\nimport { QuranGoalPeriod, GoalType } from '@/types/auth/Goal';\n\ninterface ReadingGoalState {\n period: QuranGoalPeriod;\n type: GoalType;\n pages: number;\n seconds: number;\n exampleKey: keyof typeof readingGoalExamples | null;\n duration: number | null;\n rangeStartVerse: string | null;\n rangeEndVerse: string | null;\n}\n\ntype ReadingGoalAction =\n | {\n type: 'SET_PERIOD';\n payload: {\n period: ReadingGoalState['period'];\n };\n }\n | {\n type: 'SET_TYPE';\n payload: {\n type: ReadingGoalState['type'];\n };\n }\n | {\n type: 'SET_PAGES';\n payload: {\n pages: ReadingGoalState['pages'];\n };\n }\n | {\n type: 'SET_SECONDS';\n payload: {\n seconds: ReadingGoalState['seconds'];\n };\n }\n | {\n type: 'SET_DURATION';\n payload: {\n duration: ReadingGoalState['duration'];\n };\n }\n | {\n type: 'SET_RANGE';\n payload:\n | {\n startVerse: ReadingGoalState['rangeStartVerse'];\n endVerse: ReadingGoalState['rangeEndVerse'];\n }\n | {\n startVerse: NonNullable<ReadingGoalState['rangeStartVerse']>;\n endVerse: NonNullable<ReadingGoalState['rangeEndVerse']>;\n };\n }\n | {\n type: 'SET_EXAMPLE';\n payload: {\n exampleKey: NonNullable<ReadingGoalState['exampleKey']>;\n };\n };\n\nconst reducer = (state: ReadingGoalState, action: ReadingGoalAction): ReadingGoalState => {\n switch (action.type) {\n case 'SET_PERIOD':\n return {\n ...state,\n duration: action.payload.period === QuranGoalPeriod.Continuous ? 30 : null,\n period: action.payload.period,\n };\n case 'SET_TYPE':\n return {\n ...state,\n type: action.payload.type,\n };\n case 'SET_PAGES':\n return {\n ...state,\n pages: action.payload.pages,\n };\n case 'SET_SECONDS':\n return {\n ...state,\n seconds: action.payload.seconds,\n };\n case 'SET_DURATION':\n return {\n ...state,\n duration: action.payload.duration,\n period: action.payload.duration ? QuranGoalPeriod.Continuous : QuranGoalPeriod.Daily,\n };\n case 'SET_RANGE':\n return {\n ...state,\n rangeStartVerse: action.payload.startVerse,\n rangeEndVerse: action.payload.endVerse,\n };\n case 'SET_EXAMPLE': {\n const example = readingGoalExamples[action.payload.exampleKey];\n let values = {};\n if ('values' in example) {\n values = { ...example.values };\n }\n\n return {\n ...state,\n exampleKey: action.payload.exampleKey,\n ...values,\n };\n }\n default:\n return state;\n }\n};\n\nexport const readingGoalExamples = {\n '10_mins': {\n i18nKey: 'time',\n icon: ClockIcon,\n recommended: true,\n values: {\n type: GoalType.TIME,\n seconds: 10 * 60,\n period: QuranGoalPeriod.Daily,\n },\n },\n khatm: {\n i18nKey: 'khatm',\n icon: BookIcon,\n values: {\n type: GoalType.RANGE,\n rangeStartVerse: '1:1',\n rangeEndVerse: '114:6',\n duration: 30,\n period: QuranGoalPeriod.Continuous,\n },\n },\n yearly: {\n i18nKey: 'year',\n icon: CalendarIcon,\n values: {\n type: GoalType.RANGE,\n rangeStartVerse: '1:1',\n rangeEndVerse: '114:6',\n duration: 365,\n period: QuranGoalPeriod.Continuous,\n },\n },\n custom: {\n i18nKey: 'custom',\n icon: SettingsIcon,\n },\n} as const;\n\nconst initialState: ReadingGoalState = {\n period: QuranGoalPeriod.Daily,\n type: GoalType.PAGES,\n exampleKey: null,\n pages: 1,\n seconds: 60,\n duration: null,\n rangeStartVerse: '1:1',\n rangeEndVerse: '114:6',\n};\n\nconst useReadingGoalReducer = () => {\n const [state, dispatch] = useReducer(reducer, initialState);\n\n return [state, dispatch] as const;\n};\n\nexport interface ReadingGoalTabProps {\n onTabChange: Dispatch<SetStateAction<number>>;\n state: ReturnType<typeof useReadingGoalReducer>[0];\n dispatch: ReturnType<typeof useReadingGoalReducer>[1];\n nav: React.ReactNode;\n logClick: (event: string, metadata?: Record<string, unknown>) => void;\n logChange: (\n input: string,\n values: { currentValue: unknown; newValue: unknown },\n metadata?: Record<string, unknown>,\n ) => void;\n}\n\nexport default useReadingGoalReducer;\n","import classNames from 'classnames';\nimport useTranslation from 'next-translate/useTranslation';\n\nimport styles from './OptionButton.module.scss';\n\nimport MoonIllustrationSVG from '@/public/images/moon-illustration.svg';\n\ninterface OptionButtonProps {\n option: string;\n description?: string;\n selected?: boolean;\n recommended?: boolean;\n icon?: React.ReactNode;\n onSelect: () => void;\n}\n\nconst OptionButton: React.FC<OptionButtonProps> = ({\n option,\n description,\n selected,\n recommended,\n icon: Icon = MoonIllustrationSVG,\n onSelect,\n}) => {\n const { t } = useTranslation('reading-goal');\n\n return (\n <button\n type=\"button\"\n onClick={onSelect}\n className={classNames(styles.button, selected && styles.selected)}\n >\n <Icon className={styles.icon} />\n {recommended && <span className={styles.recommended}>{t('recommended')}</span>}\n <div className={styles.textContainer}>\n <p className={styles.title}>{option}</p>\n {description && <p className={styles.description}>{description}</p>}\n </div>\n </button>\n );\n};\n\nexport default OptionButton;\n","import useTranslation from 'next-translate/useTranslation';\n\nimport { readingGoalExamples, ReadingGoalTabProps } from './hooks/useReadingGoalReducer';\nimport OptionButton from './OptionButton';\nimport styles from './ReadingGoalPage.module.scss';\n\nconst ReadingGoalExamplesTab: React.FC<ReadingGoalTabProps> = ({\n state,\n dispatch,\n nav,\n logClick,\n}) => {\n const { t } = useTranslation('reading-goal');\n\n return (\n <>\n <div className={styles.titleContainer}>\n <h1 className={styles.title}>{t('examples-title')}</h1>\n <p className={styles.subtitle}>{t('examples-subtitle')}</p>\n </div>\n <div className={styles.optionsContainer}>\n {Object.keys(readingGoalExamples).map((exampleKey: keyof typeof readingGoalExamples) => {\n const example = readingGoalExamples[exampleKey];\n\n return (\n <OptionButton\n key={example.i18nKey}\n icon={example.icon}\n onSelect={() => {\n dispatch({ type: 'SET_EXAMPLE', payload: { exampleKey } });\n logClick(exampleKey);\n }}\n selected={state.exampleKey === exampleKey}\n option={t(`examples.${example.i18nKey}.title`)}\n recommended={'recommended' in example && example.recommended}\n description={t(`examples.${example.i18nKey}.description`)}\n />\n );\n })}\n {nav}\n </div>\n </>\n );\n};\n\nexport default ReadingGoalExamplesTab;\n","import { useMemo } from 'react';\n\nimport useTranslation from 'next-translate/useTranslation';\n\nimport ReadingGoalInput, { ReadingGoalInputProps } from '../ReadingGoal/ReadingGoalInput';\n\nimport { ReadingGoalTabProps } from './hooks/useReadingGoalReducer';\nimport styles from './ReadingGoalPage.module.scss';\n\nimport Select, { SelectSize } from '@/dls/Forms/Select';\nimport { QuranGoalPeriod } from '@/types/auth/Goal';\nimport { generateDurationDaysOptions } from '@/utils/generators';\n\nconst ReadingGoalTargetAmountTab: React.FC<ReadingGoalTabProps> = ({\n state,\n dispatch,\n nav,\n logChange,\n}) => {\n const { t, lang } = useTranslation('reading-goal');\n const { type, period, pages, seconds, rangeStartVerse, rangeEndVerse, duration } = state;\n const dayOptions = useMemo(() => generateDurationDaysOptions(t, lang), [t, lang]);\n\n const onDurationChange = (d: string) => {\n const newDuration = Number(d);\n logChange('duration', { currentValue: duration, newValue: newDuration });\n\n dispatch({ type: 'SET_DURATION', payload: { duration: newDuration } });\n };\n\n const onRangeChange: ReadingGoalInputProps['onRangeChange'] = (newRange) => {\n dispatch({ type: 'SET_RANGE', payload: newRange });\n };\n\n const onPagesChange: ReadingGoalInputProps['onPagesChange'] = (newPages) => {\n dispatch({ type: 'SET_PAGES', payload: { pages: newPages } });\n };\n\n const onSecondsChange: ReadingGoalInputProps['onSecondsChange'] = (newSeconds) => {\n dispatch({ type: 'SET_SECONDS', payload: { seconds: newSeconds } });\n };\n\n return (\n <>\n <div className={styles.titleContainer}>\n <h1 className={styles.title}>{t('goal-target.title')}</h1>\n <p className={styles.subtitle}>{t('goal-target.description')}</p>\n </div>\n <div className={styles.optionsContainer}>\n <ReadingGoalInput\n type={type}\n pages={pages}\n seconds={seconds}\n rangeStartVerse={rangeStartVerse}\n rangeEndVerse={rangeEndVerse}\n onRangeChange={onRangeChange}\n onPagesChange={onPagesChange}\n onSecondsChange={onSecondsChange}\n logChange={logChange}\n />\n {period === QuranGoalPeriod.Continuous && (\n <div className={styles.inputContainer}>\n <label htmlFor=\"duration\" className={styles.label}>\n {t('duration')}\n </label>\n <Select\n id=\"duration\"\n name=\"duration\"\n size={SelectSize.Large}\n className={styles.input}\n options={dayOptions}\n value={duration.toString()}\n onChange={onDurationChange}\n />\n </div>\n )}\n {nav}\n </div>\n </>\n );\n};\n\nexport default ReadingGoalTargetAmountTab;\n","import useTranslation from 'next-translate/useTranslation';\n\nimport { ReadingGoalTabProps } from './hooks/useReadingGoalReducer';\nimport OptionButton from './OptionButton';\nimport styles from './ReadingGoalPage.module.scss';\n\nimport CalendarIcon from '@/icons/calendar.svg';\nimport RepeatIcon from '@/icons/repeat.svg';\nimport { QuranGoalPeriod } from '@/types/auth/Goal';\n\nconst options = [\n {\n key: QuranGoalPeriod.Daily,\n icon: RepeatIcon,\n },\n {\n key: QuranGoalPeriod.Continuous,\n icon: CalendarIcon,\n },\n] as const;\n\nconst ReadingGoalTimeTab: React.FC<ReadingGoalTabProps> = ({ state, dispatch, nav, logClick }) => {\n const { t } = useTranslation('reading-goal');\n\n return (\n <>\n <div className={styles.titleContainer}>\n <h1 className={styles.title}>{t('frequency-tab.title')}</h1>\n <p className={styles.subtitle}>{t('frequency-tab.description')}</p>\n </div>\n\n <div className={styles.optionsContainer}>\n {options.map((option) => (\n <OptionButton\n key={option.key}\n icon={option.icon}\n onSelect={() => {\n dispatch({ type: 'SET_PERIOD', payload: { period: option.key } });\n logClick(option.key);\n }}\n selected={state.period === option.key}\n option={t(`${option.key.toLowerCase()}.title`)}\n description={t(`${option.key.toLowerCase()}.description`)}\n />\n ))}\n {nav}\n </div>\n </>\n );\n};\n\nexport default ReadingGoalTimeTab;\n","import useTranslation from 'next-translate/useTranslation';\n\nimport { ReadingGoalTabProps } from './hooks/useReadingGoalReducer';\nimport OptionButton from './OptionButton';\nimport styles from './ReadingGoalPage.module.scss';\n\nimport BookIcon from '@/icons/book.svg';\nimport ClockIcon from '@/icons/clock.svg';\nimport SettingsIcon from '@/icons/settings-stroke.svg';\nimport { GoalType } from '@/types/auth/Goal';\n\nconst options = [\n {\n type: GoalType.TIME,\n key: 'time',\n icon: ClockIcon,\n },\n {\n type: GoalType.PAGES,\n key: 'pages',\n icon: BookIcon,\n },\n {\n type: GoalType.RANGE,\n key: 'range',\n icon: SettingsIcon,\n },\n];\n\nconst ReadingGoalTypeTab: React.FC<ReadingGoalTabProps> = ({ state, dispatch, nav, logClick }) => {\n const { t } = useTranslation('reading-goal');\n\n return (\n <>\n <div className={styles.titleContainer}>\n <h1 className={styles.title}>{t('goal-type.title')}</h1>\n <p className={styles.subtitle}>{t('goal-type.description')}</p>\n </div>\n <div className={styles.optionsContainer}>\n {options.map((option) => (\n <OptionButton\n key={option.key}\n onSelect={() => {\n dispatch({ type: 'SET_TYPE', payload: { type: option.type } });\n logClick(option.key);\n }}\n selected={state.type === option.type}\n option={t(`goal-types.${option.key}.title`)}\n description={t(`goal-types.${option.key}.description`)}\n icon={option.icon}\n />\n ))}\n {nav}\n </div>\n </>\n );\n};\n\nexport default ReadingGoalTypeTab;\n","import styles from './ReadingGoalPage.module.scss';\n\nimport Spinner from '@/dls/Spinner/Spinner';\n\ninterface ReadingGoalWeekPreviewTabSkeleton {\n numberOfDays: number;\n}\n\nconst ReadingGoalWeekPreviewTabSkeleton: React.FC<ReadingGoalWeekPreviewTabSkeleton> = ({\n numberOfDays,\n}) => {\n const days = Array.from({\n length: Math.min(numberOfDays, 7),\n // eslint-disable-next-line @typescript-eslint/naming-convention\n }).map((_, idx) => (\n // eslint-disable-next-line react/no-array-index-key\n <li key={idx} className={styles.dayPreview}>\n <Spinner />\n </li>\n ));\n\n return <>{days}</>;\n};\n\nexport default ReadingGoalWeekPreviewTabSkeleton;\n","import { useContext } from 'react';\n\nimport classNames from 'classnames';\nimport useTranslation from 'next-translate/useTranslation';\nimport { shallowEqual, useSelector } from 'react-redux';\n\nimport DataFetcher from '../DataFetcher';\n\nimport { ReadingGoalTabProps } from './hooks/useReadingGoalReducer';\nimport styles from './ReadingGoalPage.module.scss';\nimport ReadingGoalWeekPreviewTabSkeleton from './ReadingGoalWeekPreviewTabSkeleton';\n\nimport DataContext from '@/contexts/DataContext';\nimport HoverablePopover from '@/dls/Popover/HoverablePopover';\nimport { selectQuranFont, selectQuranMushafLines } from '@/redux/slices/QuranReader/styles';\nimport {\n EstimatedGoalDay,\n RangeEstimatedQuranGoalDay,\n QuranGoalPeriod,\n GoalType,\n EstimateGoalRequest,\n EstimatedQuranGoal,\n} from '@/types/auth/Goal';\nimport { Mushaf } from '@/types/QuranReader';\nimport { getMushafId } from '@/utils/api';\nimport { privateFetcher } from '@/utils/auth/api';\nimport { makeEstimateReadingGoalUrl } from '@/utils/auth/apiPaths';\nimport { getChapterData } from '@/utils/chapter';\nimport { dateToReadableFormat, secondsToReadableFormat, getFullDayName } from '@/utils/datetime';\nimport { toLocalizedNumber } from '@/utils/locale';\nimport { convertNumberToDecimal } from '@/utils/number';\nimport { parseVerseRange } from '@/utils/verseKeys';\n\nconst makePayload = (\n state: ReadingGoalTabProps['state'],\n mushafId: Mushaf,\n): EstimateGoalRequest => {\n const payload: EstimateGoalRequest = {\n mushafId,\n type: state.type,\n amount: {\n [GoalType.PAGES]: state.pages,\n [GoalType.TIME]: state.seconds,\n [GoalType.RANGE]: `${state.rangeStartVerse}-${state.rangeEndVerse}`,\n }[state.type],\n };\n\n if (state.period === QuranGoalPeriod.Continuous) payload.duration = state.duration;\n\n return payload;\n};\n\n// this is the maximum number of days that we'll show in the preview for continuous goals\n// if the user selects a duration that is longer than this, we will show in the last day \"+X more days\"\nconst MAX_DAYS = 6;\n\nconst ReadingGoalWeekPreviewTab: React.FC<ReadingGoalTabProps> = ({ state, nav }) => {\n const { t, lang } = useTranslation('reading-goal');\n const chaptersData = useContext(DataContext);\n\n const quranFont = useSelector(selectQuranFont, shallowEqual);\n const mushafLines = useSelector(selectQuranMushafLines, shallowEqual);\n const { mushaf } = getMushafId(quranFont, mushafLines);\n\n const payload = makePayload(state, mushaf);\n\n const getDailyAmount = (data: EstimatedQuranGoal, idx: number) => {\n const { type } = state;\n const day = data.week[idx];\n\n if (type === GoalType.RANGE) {\n const range = day.amount as string;\n\n const [\n { chapter: startingChapter, verse: startingVerse },\n { chapter: endingChapter, verse: endingVerse },\n ] = parseVerseRange(range);\n\n const startingChapterName = getChapterData(chaptersData, startingChapter).transliteratedName;\n const endingChapterName = getChapterData(chaptersData, endingChapter).transliteratedName;\n\n return (\n <div className={styles.rangePreview}>\n <p>\n {t('reciter:read')} {startingChapterName}{' '}\n {toLocalizedNumber(Number(startingVerse), lang)}\n </p>\n <p>\n {t('common:to').toLowerCase()} {endingChapterName}{' '}\n {toLocalizedNumber(Number(endingVerse), lang)}\n </p>\n </div>\n );\n }\n\n const numberAmount = day.amount as number;\n if (type === GoalType.TIME) {\n return `${t('reciter:read')} ${secondsToReadableFormat(numberAmount, t, lang)}`;\n }\n\n const pages = convertNumberToDecimal(numberAmount, 2);\n return `${t('reciter:read')} ${t('x-pages', {\n count: pages,\n pages: toLocalizedNumber(pages, lang),\n })}`;\n };\n\n return (\n <>\n <div className={styles.titleContainer}>\n <h1 className={styles.title}>{t('preview-schedule.title')}</h1>\n <p className={styles.subtitle}>{t('preview-schedule.description')}</p>\n </div>\n <ol className={classNames(styles.optionsContainer, styles.previewWrapper)}>\n <DataFetcher\n queryKey={makeEstimateReadingGoalUrl(payload)}\n fetcher={privateFetcher}\n loading={() => (\n <ReadingGoalWeekPreviewTabSkeleton\n numberOfDays={state.period === QuranGoalPeriod.Continuous ? state.duration : 7}\n />\n )}\n render={(response) => {\n const { data } = response as { data: EstimatedQuranGoal };\n\n return (\n <>\n {data.week.map(\n (day: EstimatedGoalDay | RangeEstimatedQuranGoalDay, idx: number) => {\n const date = new Date(day.date);\n\n const shouldShowNumberOfDaysAfterPreview =\n state.duration > MAX_DAYS && state.period === QuranGoalPeriod.Continuous;\n const isLastElement = shouldShowNumberOfDaysAfterPreview && idx > MAX_DAYS - 1;\n\n return (\n <li\n key={day.date}\n className={classNames(styles.dayPreview, isLastElement && styles.lastDay)}\n >\n {isLastElement ? (\n <h3>\n {t('plus-x-more-days', {\n count: state.duration - MAX_DAYS,\n days: toLocalizedNumber(state.duration - MAX_DAYS, lang),\n })}\n </h3>\n ) : (\n <>\n <HoverablePopover content={dateToReadableFormat(date, lang)}>\n <h3>{getFullDayName(date, lang)}</h3>\n </HoverablePopover>\n\n <p>{getDailyAmount(data, idx)}</p>\n </>\n )}\n </li>\n );\n },\n )}\n </>\n );\n }}\n />\n\n {nav}\n </ol>\n </>\n );\n};\n\nexport default ReadingGoalWeekPreviewTab;\n","/* eslint-disable react-func/max-lines-per-function */\n/* eslint-disable max-lines */\nimport { useCallback, useContext, useState } from 'react';\n\nimport classNames from 'classnames';\nimport { useRouter } from 'next/router';\nimport useTranslation from 'next-translate/useTranslation';\nimport { useSWRConfig } from 'swr';\n\nimport useReadingGoalReducer, { ReadingGoalTabProps } from './hooks/useReadingGoalReducer';\nimport styles from './ReadingGoalPage.module.scss';\nimport { logTabClick, logTabInputChange, logTabNextClick, TabKey, tabsArray } from './utils/tabs';\nimport { validateReadingGoalData } from './utils/validator';\n\nimport DataContext from '@/contexts/DataContext';\nimport Button, { ButtonSize, ButtonType } from '@/dls/Button/Button';\nimport Progress from '@/dls/Progress';\nimport Spinner, { SpinnerSize } from '@/dls/Spinner/Spinner';\nimport { ToastStatus, useToast } from '@/dls/Toast/Toast';\nimport useGetMushaf from '@/hooks/useGetMushaf';\nimport ChevronLeftIcon from '@/icons/chevron-left.svg';\nimport ChevronRightIcon from '@/icons/chevron-right.svg';\nimport layoutStyle from '@/pages/index.module.scss';\nimport { CreateGoalRequest, GoalCategory, GoalType, QuranGoalPeriod } from '@/types/auth/Goal';\nimport { addReadingGoal } from '@/utils/auth/api';\nimport { makeStreakUrl } from '@/utils/auth/apiPaths';\nimport { logFormSubmission } from '@/utils/eventLogger';\n\nconst ReadingGoalOnboarding: React.FC = () => {\n const { t } = useTranslation('reading-goal');\n const router = useRouter();\n const chaptersData = useContext(DataContext);\n const mushaf = useGetMushaf();\n\n const [loading, setLoading] = useState(false);\n const [tabIdx, setTabIdx] = useState(0);\n const [state, dispatch] = useReadingGoalReducer();\n const toast = useToast();\n const { cache } = useSWRConfig();\n\n const addReadingGoalAndClearCache = useCallback(\n async (data: CreateGoalRequest) => {\n await addReadingGoal(data).then(() => {\n cache.delete(makeStreakUrl());\n });\n },\n [cache],\n );\n\n const Tab = tabsArray[tabIdx];\n\n const onSubmit = async () => {\n let amount: string | number;\n\n if (state.type === GoalType.PAGES) amount = state.pages;\n else if (state.type === GoalType.TIME) amount = state.seconds;\n else amount = `${state.rangeStartVerse}-${state.rangeEndVerse}`;\n\n const data: CreateGoalRequest = {\n mushafId: mushaf,\n type: state.type,\n amount,\n category: GoalCategory.QURAN,\n };\n if (state.period === QuranGoalPeriod.Continuous) {\n data.duration = state.duration;\n }\n\n logFormSubmission('create_goal', { duration: null, ...data });\n\n setLoading(true);\n\n try {\n await addReadingGoalAndClearCache(data);\n toast(t('set-reading-goal-success'), {\n status: ToastStatus.Success,\n });\n router.push('/');\n } catch (e) {\n toast(t('common:error.general'), {\n status: ToastStatus.Error,\n });\n }\n\n setLoading(false);\n };\n\n const isPreviewTab = Tab.key === TabKey.PreviewTab;\n const percentage = isPreviewTab ? 100 : (tabIdx / tabsArray.length) * 100;\n\n const onPrev = () => {\n if (tabIdx !== 0 && state.exampleKey !== 'custom') {\n setTabIdx(0);\n logTabClick(Tab.key, 'previous');\n } else {\n setTabIdx((prevIdx) => prevIdx - 1);\n logTabClick(Tab.key, 'previous');\n }\n };\n\n const onNext = () => {\n if (!isPreviewTab) {\n if (tabIdx === 0 && state.exampleKey !== 'custom') {\n // if the user selected an example, skip to the preview tab\n setTabIdx(tabsArray.length - 1);\n } else {\n // otherwise, go to the next tab\n setTabIdx((prevIdx) => prevIdx + 1);\n }\n\n logTabNextClick(Tab.key, state);\n } else {\n onSubmit();\n }\n };\n\n const getIsNextDisabled = () => {\n // if the user is on the examples tab and hasn't selected an example, disable the next button\n if (Tab.key === TabKey.ExamplesTab && !state.exampleKey) return true;\n\n if (Tab.key === TabKey.AmountTab) {\n return !validateReadingGoalData(\n chaptersData,\n {\n type: state.type,\n pages: state.pages,\n seconds: state.seconds,\n range: { startVerse: state.rangeStartVerse, endVerse: state.rangeEndVerse },\n },\n mushaf,\n );\n }\n\n return false;\n };\n\n const logClick: ReadingGoalTabProps['logClick'] = (event) => {\n logTabClick(Tab.key, event);\n };\n\n const logChange: ReadingGoalTabProps['logChange'] = (input, values, metadata) => {\n logTabInputChange(Tab.key, input, values, metadata);\n };\n\n return (\n <div className={classNames(layoutStyle.flowItem)}>\n <Progress value={percentage} />\n\n <div className={styles.tabContainer}>\n {loading ? (\n <Spinner isCentered size={SpinnerSize.Large} />\n ) : (\n <Tab.Component\n onTabChange={setTabIdx}\n state={state}\n dispatch={dispatch}\n logClick={logClick}\n logChange={logChange}\n nav={\n <div className={styles.navigationContainer}>\n {tabIdx > 0 && (\n <Button\n className={styles.navigateButton}\n size={ButtonSize.Large}\n prefix={<ChevronLeftIcon />}\n onClick={onPrev}\n type={ButtonType.Secondary}\n >\n {t('common:prev')}\n </Button>\n )}\n\n <Button\n className={styles.navigateButton}\n size={ButtonSize.Large}\n suffix={!isPreviewTab ? <ChevronRightIcon /> : undefined}\n isDisabled={getIsNextDisabled()}\n onClick={onNext}\n >\n {!isPreviewTab ? t('common:next') : t('start-journey')}\n </Button>\n </div>\n }\n />\n )}\n </div>\n </div>\n );\n};\n\nexport default ReadingGoalOnboarding;\n","import { useEffect } from 'react';\n\nimport classNames from 'classnames';\nimport { NextPage, GetStaticProps } from 'next';\nimport { useRouter } from 'next/router';\nimport useTranslation from 'next-translate/useTranslation';\n\nimport layoutStyles from '../index.module.scss';\n\nimport styles from './reading-goal.module.scss';\n\nimport withAuth from '@/components/Auth/withAuth';\nimport NextSeoWrapper from '@/components/NextSeoWrapper';\nimport ReadingGoalOnboarding from '@/components/ReadingGoalPage';\nimport Spinner from '@/dls/Spinner/Spinner';\nimport useGetStreakWithMetadata from '@/hooks/auth/useGetStreakWithMetadata';\nimport { getAllChaptersData } from '@/utils/chapter';\nimport { getLanguageAlternates } from '@/utils/locale';\nimport { getCanonicalUrl, getReadingGoalNavigationUrl } from '@/utils/navigation';\n\nconst ReadingGoalPage: NextPage = () => {\n // we don't want to show the reading goal page if the user is not logged in\n const { t, lang } = useTranslation('reading-goal');\n const router = useRouter();\n\n // if the user already has a goal, redirect them to the home page\n const { goal, isLoading: isLoadingReadingGoal } = useGetStreakWithMetadata();\n const isLoading = isLoadingReadingGoal || !router.isReady || !!goal;\n\n useEffect(() => {\n if (goal) {\n router.push('/');\n }\n }, [router, goal]);\n\n return (\n <>\n <NextSeoWrapper\n title={t('reading-goal')}\n url={getCanonicalUrl(lang, getReadingGoalNavigationUrl())}\n languageAlternates={getLanguageAlternates(getReadingGoalNavigationUrl())}\n nofollow\n noindex\n />\n\n <div className={layoutStyles.pageContainer}>\n <div className={classNames(layoutStyles.flow, isLoading && styles.loadingContainer)}>\n {isLoading ? <Spinner /> : <ReadingGoalOnboarding />}\n </div>\n </div>\n </>\n );\n};\n\nexport const getStaticProps: GetStaticProps = async ({ locale }) => {\n const allChaptersData = await getAllChaptersData(locale);\n\n return {\n props: {\n chaptersData: allChaptersData,\n },\n };\n};\n\nexport default withAuth(ReadingGoalPage);\n","export enum RangeItemDirection {\n From = 'from',\n To = 'to',\n}\n\nexport enum RangeItemPosition {\n Start = 'start',\n End = 'end',\n}\n\nexport enum RangeItem {\n StartingChapter = 'starting-chapter',\n StartingVerse = 'starting-verse',\n EndingChapter = 'ending-chapter',\n EndingVerse = 'ending-verse',\n}\n","import { Mushaf } from '../QuranReader';\n\nexport enum GoalCategory {\n QURAN = 'QURAN',\n}\n\nexport enum GoalType {\n TIME = 'QURAN_TIME',\n PAGES = 'QURAN_PAGES',\n RANGE = 'QURAN_RANGE',\n}\n\nexport type Goal = {\n id: string;\n type: GoalType;\n targetAmount: string;\n duration?: number;\n isCompleted: boolean;\n createdAt: Date;\n updatedAt: Date;\n};\n\nexport type CreateGoalRequest = {\n type: GoalType;\n amount: string | number;\n duration?: number;\n mushafId: Mushaf;\n category: GoalCategory;\n};\n\nexport type EstimateGoalRequest = Omit<CreateGoalRequest, 'category'>;\n\nexport type UpdateGoalRequest = Partial<CreateGoalRequest>;\n\nexport type QuranGoalStatus = Goal & {\n progress: {\n percent: number;\n\n // this will be either a number of pages (for PAGES and RANGE goals) or a number of seconds (for TIME goals)\n amountLeft: number;\n\n nextVerseToRead?: string;\n daysLeft?: number;\n };\n};\n\nexport interface EstimatedGoalDay {\n date: string;\n amount: number;\n}\n\nexport type RangeEstimatedQuranGoalDay = Omit<EstimatedGoalDay, 'amount'> & {\n amount: string;\n};\n\nexport type EstimatedQuranGoal =\n | {\n week: EstimatedGoalDay[];\n }\n | {\n week: RangeEstimatedQuranGoalDay[];\n };\n\nexport enum QuranGoalPeriod {\n Daily = 'DAILY',\n Continuous = 'CONTINUOUS',\n}\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"icon\":\"OptionButton_icon__w5iJa\",\"button\":\"OptionButton_button__koa5L\",\"textContainer\":\"OptionButton_textContainer__KGc0j\",\"title\":\"OptionButton_title__fLEFm\",\"description\":\"OptionButton_description__paNw7\",\"selected\":\"OptionButton_selected__9vy3U\",\"recommended\":\"OptionButton_recommended__sDzVm\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"tabContainer\":\"ReadingGoalPage_tabContainer__mzLNd\",\"optionsContainer\":\"ReadingGoalPage_optionsContainer__3v9HQ\",\"titleContainer\":\"ReadingGoalPage_titleContainer__A2zup\",\"title\":\"ReadingGoalPage_title__s7pGO\",\"subtitle\":\"ReadingGoalPage_subtitle__ljYxq\",\"navigationContainer\":\"ReadingGoalPage_navigationContainer__0nY0E\",\"previewWrapper\":\"ReadingGoalPage_previewWrapper__sykGt\",\"dayPreview\":\"ReadingGoalPage_dayPreview__M4mrU\",\"lastDay\":\"ReadingGoalPage_lastDay__ieeGh\",\"rangePreview\":\"ReadingGoalPage_rangePreview__xB27p\",\"rangeInputContainer\":\"ReadingGoalPage_rangeInputContainer__SkyH9\",\"inputContainer\":\"ReadingGoalPage_inputContainer__RmukP\",\"input\":\"ReadingGoalPage_input__T_M3H\",\"label\":\"ReadingGoalPage_label__04sb1\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"progressRoot\":\"Progress_progressRoot__Np4He\",\"progressSmall\":\"Progress_progressSmall__xl_va\",\"progressMedium\":\"Progress_progressMedium__ys5Rw\",\"progressLarge\":\"Progress_progressLarge__smmtV\",\"progressIndicator\":\"Progress_progressIndicator__dPgS9\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"pageContainer\":\"index_pageContainer__Pxtn3\",\"loadingContainer\":\"index_loadingContainer__WEZFc\",\"flow\":\"index_flow__rCTR5\",\"flowItem\":\"index_flowItem__GnXWz\",\"additionalVerticalGap\":\"index_additionalVerticalGap__nzYz6\",\"fullWidth\":\"index_fullWidth__1n4ux\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"loadingContainer\":\"reading-goal_loadingContainer__5MEZB\"};"],"names":["_path","_extends","Object","assign","bind","n","e","arguments","length","t","r","hasOwnProperty","call","apply","props","width","height","viewBox","fill","xmlns","d","_path2","_path3","_path4","_path5","stroke","strokeWidth","strokeLinecap","strokeLinejoin","clipRule","strokeMiterlimit","window","__NEXT_P","push","$67824d98245208a0$var$PROGRESS_NAME","$67824d98245208a0$var$DEFAULT_MAX","$67824d98245208a0$var$createProgressContext","$67824d98245208a0$export$388eb2d8f6d3261f","$67824d98245208a0$var$ProgressProvider","$67824d98245208a0$var$useProgressContext","$67824d98245208a0$export$b25a304ec7d746bb","forwardedRef","__scopeProgress","value","valueProp","max","maxProp","getValueLabel","$67824d98245208a0$var$defaultGetValueLabel","progressProps","$67824d98245208a0$var$isValidMaxNumber","$67824d98245208a0$var$isValidValueNumber","valueLabel","$67824d98245208a0$var$isNumber","undefined","scope","role","$67824d98245208a0$var$getProgressState","ref","propTypes","propName","componentName","propValue","strVal","String","Error","$67824d98245208a0$var$getInvalidMaxError","$67824d98245208a0$var$getInvalidValueError","$67824d98245208a0$var$INDICATOR_NAME","$67824d98245208a0$export$2b776f7e7ee60dbd","_context$value","indicatorProps","context","Math","round","maxValue","isNaN","$67824d98245208a0$export$be92b6f5f03c0fe9","$67824d98245208a0$export$adb584737d712b70","ProgressSize","rootStyles","size","Small","indicatorStyles","rootClassNames","classNames","styles","Medium","Large","RadixProgress","className","style","transform","StreakType","QURAN","useGetWeekDays","useMemo","days","today","Date","sunday","getDay","setDate","getDate","i","day","current","date","dateString","dateToDateString","useGetWeekDayNames","week","streak","showWeekdayName","useTranslation","lang","names","showIncrement","currentDayIndex","forEach","index","dayName","localizedNumber","toLocalizedNumber","title","getFullDayName","showDayName","disableIfNoGoalExists","quranFont","useSelector","selectQuranFont","shallowEqual","mushafLines","selectQuranMushafLines","getMushafId","mushaf","useState","disabled","setDisabled","params","mushafId","from","to","type","useSWR","isLoggedIn","makeStreakUrl","getStreakWithUserMetadata","revalidateOnFocus","data","isValidating","error","useEffect","goal","isLoading","activityDays","readingDaysMap","result","hasRead","pagesRead","secondsRead","ranges","manuallyAddedSeconds","currentActivityDay","find","weekDayNames","weekData","map","idx","info","reducer","state","action","duration","payload","period","QuranGoalPeriod","pages","seconds","rangeStartVerse","startVerse","rangeEndVerse","endVerse","example","readingGoalExamples","exampleKey","values","i18nKey","icon","ClockIcon","recommended","GoalType","khatm","BookIcon","yearly","CalendarIcon","custom","SettingsIcon","initialState","useReducer","option","description","selected","Icon","MoonIllustrationSVG","onSelect","button","onClick","span","div","p","dispatch","nav","logClick","h1","keys","OptionButton","logChange","dayOptions","generateDurationDaysOptions","ReadingGoalInput","onRangeChange","newRange","onPagesChange","newPages","onSecondsChange","newSeconds","label","htmlFor","Select","id","name","SelectSize","options","toString","onChange","newDuration","Number","currentValue","newValue","key","RepeatIcon","toLowerCase","numberOfDays","Array","min","_","li","Spinner","chaptersData","useContext","DataContext","amount","makePayload","getDailyAmount","range","parseVerseRange","chapter","verse","startingChapterName","getChapterData","startingChapter","transliteratedName","endingChapterName","endingChapter","startingVerse","endingVerse","numberAmount","secondsToReadableFormat","convertNumberToDecimal","count","ol","DataFetcher","queryKey","makeEstimateReadingGoalUrl","fetcher","privateFetcher","loading","ReadingGoalWeekPreviewTabSkeleton","render","response","isLastElement","MAX_DAYS","h3","HoverablePopover","content","dateToReadableFormat","TabKey","tabs","ExamplesTab","ReadingGoalExamplesTab","ContinuityTab","ReadingGoalTimeTab","TypeTab","ReadingGoalTypeTab","AmountTab","ReadingGoalTargetAmountTab","PreviewTab","ReadingGoalWeekPreviewTab","tabsArray","Component","logTabClick","tab","event","metadata","logButtonClick","router","useRouter","useGetMushaf","setLoading","tabIdx","setTabIdx","useReadingGoalReducer","toast","useToast","useSWRConfig","cache","addReadingGoalAndClearCache","useCallback","addReadingGoal","then","delete","Tab","onSubmit","category","GoalCategory","logFormSubmission","status","ToastStatus","isPreviewTab","percentage","layoutStyle","Progress","isCentered","SpinnerSize","onTabChange","input","logValueChange","logTabInputChange","Button","ButtonSize","prefix","ChevronLeftIcon","prevIdx","ButtonType","suffix","ChevronRightIcon","isDisabled","validateReadingGoalData","goal_type","goal_period","logTabNextClick","withAuth","useGetStreakWithMetadata","isReady","NextSeoWrapper","url","getCanonicalUrl","getReadingGoalNavigationUrl","languageAlternates","getLanguageAlternates","nofollow","noindex","layoutStyles","ReadingGoalOnboarding","RangeItemDirection","RangeItemPosition","RangeItem","module","exports"],"sourceRoot":""}
|