1 |
- {"version":3,"file":"21608.js","mappings":";;;;;;;;;;;;;AAAA;AACA,sBAAsB,wEAAwE,gBAAgB,sBAAsB,OAAO,sBAAsB,oBAAoB,gDAAgD,WAAW;AACjN;AAC/B;AACA,sBAAsB,gDAAmB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG,yCAAyC,gDAAmB;AAC/D;AACA,GAAG;AACH;AACA,iEAAe,YAAY;;;;;;;;;;;;;ACrB3B;AACA,sBAAsB,wEAAwE,gBAAgB,sBAAsB,OAAO,sBAAsB,oBAAoB,gDAAgD,WAAW;AACjN;AAC/B;AACA,sBAAsB,gDAAmB;AACzC;AACA;AACA;AACA;AACA;AACA,GAAG,yCAAyC,gDAAmB;AAC/D;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,iEAAe,QAAQ;;;;;;;;;;;;;ACjBvB;AACA,sBAAsB,wEAAwE,gBAAgB,sBAAsB,OAAO,sBAAsB,oBAAoB,gDAAgD,WAAW;AACjN;AAC/B;AACA,sBAAsB,gDAAmB;AACzC;AACA;AACA;AACA;AACA;AACA,GAAG,yCAAyC,gDAAmB;AAC/D;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,iEAAe,OAAO;;;;;;;ACjBtB;AACA;AACA;AACA;;;;;;;;ACHA;AACA;AACA;AACA;;;;;;;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC/BA;AACA;AACA;AACA;AACA;;;;;;;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACdA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACRA;AACA;AACA;AACA;AACA;;;;;;;;ACJA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;ACHA;AAAoC;AAEU;AAEW;AACD;AACT;AACe;AACL;AAYzD,MAAMS,0BAA0B,GAAG,CAAC,EAClCC,sBAAsB,GACtBC,gBAAgB,GAChBC,gBAAgB,GAChBC,gBAAgB,GAChBC,eAAe,GACfC,IAAI,GACJC,SAAS,GACuB,GAAK;IACrC,IAAI,CAACD,IAAI,EAAE;QACT,qBACE,mDAACT,uEAAQ;YAACW,SAAS,EAAEjB,iDAAU,CAACC,mFAAyB,EAAEA,wFAA8B,CAAC;UAAI,CAC9F;IACJ,CAAC;IACD,qBACE,mDAACM,8EAAgB;QAACS,SAAS,EAAEA,SAAS;kBACpC,sEAACI,KAAG;YAACH,SAAS,EAAEhB,yFAA+B;;8BAC7C,mDAACG,kEAAM;oBACLa,SAAS,EAAEhB,kFAAwB;oBACnCsB,IAAI,EAAElB,8EAAgB;oBACtBoB,EAAE,EAAC,gBAAgB;oBACnBC,IAAI,EAAC,gBAAgB;oBACrBC,OAAO,EAAEb,eAAe,CAACc,GAAG,CAAC,CAACC,GAAG,GAAM;4BACrCC,KAAK,EAAEtB,gFAAuB,CAACqB,GAAG,CAAC;4BACnCE,KAAK,EAAEF,GAAG;yBACX,EAAE;oBACHG,QAAQ,EAAEnB,gBAAgB;oBAC1BkB,KAAK,EAAEnB,gBAAgB;kBACvB;gBACDG,IAAI,CAACkB,OAAO,CACVC,MAAM,CACL,CAACC,MAAM,GACLA,MAAM,CAACC,YAAY,KAAKxB,gBAAgB,IACxCF,sBAAsB,KAAKyB,MAAM,CAACE,IAAI,IACtCC,MAAM,CAAC5B,sBAAsB,CAAC,KAAKyB,MAAM,CAACV,EAAE,CAC/C,CACAG,GAAG,CAAC,CAACO,MAAM,GAAK;oBACf,MAAMI,QAAQ,GACZ7B,sBAAsB,KAAKyB,MAAM,CAACE,IAAI,IACtCC,MAAM,CAAC5B,sBAAsB,CAAC,KAAKyB,MAAM,CAACV,EAAE;oBAC9C,qBACE,mDAACvB,oEAAM;wBACLsC,OAAO,EAAE,IAAM7B,gBAAgB,CAACwB,MAAM,CAACV,EAAE,EAAEU,MAAM,CAACE,IAAI,CAAC;wBACvDd,IAAI,EAAEpB,gFAAgB;wBAEtBc,SAAS,EAAEjB,iDAAU,CAACC,oFAA0B,EAAE;4BAChD,CAACA,mFAAyB,CAAC,EAAEsC,QAAQ;yBACtC,CAAC;kCAEDJ,MAAM,CAACQ,cAAc,CAACjB,IAAI;uBALtBS,MAAM,CAACV,EAAE,CAMP,CACT;gBACJ,CAAC,CAAC;;UACA;MACW,CACnB;AACJ,CAAC;AAED,iEAAehB,0BAA0B,EAAC;;;;;;;;;;;;;;;;;;;;;;;;;;AC9E1C;AAA4C;AAEe;AAEb;AAEU;AACL;AAC8B;AAC9B;AAEnD,MAAM0C,qBAAqB,GAAG,CAAC,EAC7BC,iBAAiB,GACjBC,mBAAmB,GACnBC,iBAAiB,GACjBC,mBAAmB,KACpB,GAAK;IACJ,MAAM,EAAEC,IAAI,GAAE,GAAGV,oEAAc,EAAE;IACjC,MAAMW,YAAY,GAAGb,iDAAU,CAACM,yEAAW,CAAC;IAC5C,MAAMQ,MAAM,GAAGV,iFAAyB,CAACS,YAAY,EAAEL,iBAAiB,CAAC;IACzE,MAAMO,YAAY,GAAGd,8CAAO,CAC1B,IACEe,MAAM,CAACC,OAAO,CAACJ,YAAY,CAAC,CAAC7B,GAAG,CAAC,CAAC,CAACH,EAAE,EAAEqC,OAAO,CAAC,GAAM;gBACnDhC,KAAK,EAAEgC,OAAO,CAACC,kBAAkB;gBACjChC,KAAK,EAAEN,EAAE;aACV,EAAE,EACL;QAACgC,YAAY;KAAC,CACf;IACD,MAAMO,WAAW,GAAGnB,8CAAO,CACzB,IACEa,MAAM,CAAC9B,GAAG,CAAC,CAACqC,QAAQ,GAAK;YACvB,MAAMC,WAAW,GAAGjB,6EAAqB,CAACgB,QAAQ,CAAC,CAACE,QAAQ,EAAE;YAC9D,OAAO;gBACLrC,KAAK,EAAEiB,0EAAiB,CAACT,MAAM,CAAC4B,WAAW,CAAC,EAAEV,IAAI,CAAC;gBACnDzB,KAAK,EAAEmC,WAAW;aACnB,CAAC;QACJ,CAAC,CAAC,EACJ;QAACV,IAAI;QAAEE,MAAM;KAAC,CACf;IAED,qBACE,wDAACtC,KAAG;QAACH,SAAS,EAAEhB,+FAAqC;;0BACnD,mDAACG,kEAAM;gBACLmB,IAAI,EAAElB,8EAAgB;gBACtBoB,EAAE,EAAC,iBAAiB;gBACpBC,IAAI,EAAC,iBAAiB;gBACtBC,OAAO,EAAEgC,YAAY;gBACrB3B,QAAQ,EAAEsB,iBAAiB;gBAC3BvB,KAAK,EAAEqB,iBAAiB;cACxB;0BACF,mDAAChC,KAAG;gBAACH,SAAS,EAAEhB,8EAAoB;0BAClC,iEAACG,kEAAM;oBACLa,SAAS,EAAEhB,8EAAoB;oBAC/BsB,IAAI,EAAElB,8EAAgB;oBACtBoB,EAAE,EAAC,gBAAgB;oBACnBC,IAAI,EAAC,gBAAgB;oBACrBC,OAAO,EAAEqC,WAAW;oBACpBhC,QAAQ,EAAEuB,mBAAmB;oBAC7BxB,KAAK,EAAEsB,mBAAmB;kBAC1B;cACE;;MACF,CACN;AACJ,CAAC;AAED,iEAAeF,qBAAqB,EAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjErC,oDAAoD,GACpD,4BAA4B,GAC5B,4CAA4C,GAC5C;AAA4E;AAExC;AACuB;AACH;AACrB;AAEgB;AAEmB;AACV;AACY;AAClB;AACV;AACE;AACR;AACQ;AAEK;AACD;AAC6B;AACH;AACW;AACf;AAM3C;AACwB;AACkC;AAK/D;AAOD;AACW;AACiB;AAEM;AAezD,MAAMyD,UAAU,GAAG,CAAC,EAClBC,gBAAgB,GAChBC,kBAAkB,GAClBC,qBAAqB,GACrBC,MAAM,GACNC,WAAW,GACXC,YAAY,GACI,GAAK;IACrB,MAAMC,iBAAiB,GAAGxC,wDAAW,CAACY,gGAAuB,EAAEX,qDAAY,CAAC;IAC5E,MAAM,EAAEpB,IAAI,GAAE4D,CAAC,GAAE,GAAGtE,oEAAc,CAAC,QAAQ,CAAC;IAC5C,MAAMuE,YAAY,GAAG1C,wDAAW,CAACa,uFAAa,CAAC;IAC/C,MAAM,EAAE8B,eAAe,EAAEC,sBAAsB,GAAE,GAAGF,YAAY;IAChE,MAAM5D,YAAY,GAAGb,iDAAU,CAACM,0EAAW,CAAC;IAC5C,MAAM,EACJsE,OAAO,EAAE,EAAEC,gBAAgB,GAAE,GAC7BzG,SAAS,KACV,GAAGsE,2FAAyB,EAAE;IAE/B,MAAM,KAAClC,iBAAiB,MAAEsE,oBAAoB,MAAIhD,+CAAQ,CAACmC,gBAAgB,CAAC;IAC5E,MAAM,KAACxD,mBAAmB,MAAEsE,sBAAsB,MAAIjD,+CAAQ,CAACoC,kBAAkB,CAAC;IAClF,MAAM,KAAClG,gBAAgB,MAAEgH,mBAAmB,MAAIlD,+CAAQ,CAAC,EAAE,CAAC;IAC5D,MAAMmD,gBAAgB,GAAGtB,oEAAY,CAACjE,MAAM,CAACc,iBAAiB,CAAC,EAAEd,MAAM,CAACe,mBAAmB,CAAC,CAAC;IAC7F,MAAM,KAAC3C,sBAAsB,MAAEoH,yBAAyB,MAAIpD,+CAAQ,CAClEqC,qBAAqB,IAAIQ,sBAAsB,EAAE,CAAC,CAAC,CAAC,CACrD;IAED,0EAA0E;IAC1E,0EAA0E;IAC1E,mHAAmH;IACnH9C,gDAAS,CAAC,IAAM;QACd,IAAIsC,qBAAqB,EAAE;YACzBlB,uEAAQ,CAAC,mBAAmB,CAAC,CAAC;YAC9BiC,yBAAyB,CAACf,qBAAqB,CAAC,CAAC;QACnD,CAAC;IACH,CAAC,EAAE;QAACA,qBAAqB;KAAC,CAAC,CAAC;IAE5B,MAAMpG,gBAAgB,GAAG6D,kDAAW,CAClC,CAAC/C,EAAU,EAAEY,IAAY,GAAK;QAC5ByD,qFAAsB,CAAC,QAAQ,EAAErE,EAAE,CAAC,CAAC;QACrCqG,yBAAyB,CAACzF,IAAI,CAAC,CAAC;QAChC4D,0EAAY,CACVC,iGAAmC,CACjC5D,MAAM,CAACc,iBAAiB,CAAC,EACzBd,MAAM,CAACe,mBAAmB,CAAC,EAC3BhB,IAAI,CACL,EACDmB,IAAI,CACL,CAAC;QACFiE,gBAAgB,CACd,iBAAiB,EACjB;YAACpF,IAAI;SAAC,EACNoD,gGAAkB,CAAC;YACjBxD,OAAO,EAAE;gBAACI,IAAI;aAAC;YACf0F,MAAM,EAAEvE,IAAI;SACb,CAAC,EACFiC,gGAAkB,CAAC;YACjBxD,OAAO,EAAEoF,YAAY,CAACC,eAAe;YACrCS,MAAM,EAAEvE,IAAI;SACb,CAAC,EACFmD,4FAAuB,CACxB,CAAC;IACJ,CAAC,EACD;QAACnD,IAAI;QAAEiE,gBAAgB;QAAErE,iBAAiB;QAAEC,mBAAmB;QAAEgE,YAAY;KAAC,CAC/E;IAED,MAAM,EAAEtG,IAAI,EAAEkH,mBAAmB,GAAE,GAAGpD,yDAAM,CAC1CqC,YAAY,GAAGvB,0EAAc,CAACnC,IAAI,CAAC,GAAG,IAAI,EAC1CkD,uDAAO,CACR;IAED,yDAAyD;IACzD,4GAA4G;IAC5G,iFAAiF;IACjFjC,gDAAS,CAAC,IAAM;QACd,IAAIwD,mBAAmB,EAAE;YACvBL,mBAAmB,CAAC,CAACM,oBAAoB,GAAK;gBAC5C,qGAAqG;gBACrG,OACEA,oBAAoB,IACpB9B,mFAAyB,CAAC6B,mBAAmB,EAAEvH,sBAAsB,CAAC,CACtE;YACJ,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC,EAAE;QAACC,gBAAgB;QAAED,sBAAsB;QAAEuH,mBAAmB;KAAC,CAAC,CAAC;IAEpE,qFAAqF;IACrF,8DAA8D;IAC9D,iFAAiF;IACjF,MAAMnH,eAAe,GAAGmH,mBAAmB,GACvC5B,mFAAyB,CAAC4B,mBAAmB,CAAChG,OAAO,CAAC,GACtD,EAAE;IAEN;;;;;;GAMC,GACD,MAAMkG,kBAAkB,GAAG,CAACC,OAAe,GAAK;QAC9CrC,6EAAc,CAAC,eAAe,EAAEnF,gBAAgB,EAAEwH,OAAO,CAAC,CAAC;QAC3DR,mBAAmB,CAACQ,OAAO,CAAC,CAAC;QAE7B,IAAIH,mBAAmB,EAAE;YACvB,MAAMI,qBAAqB,GAAGlC,kFAAwB,CAAC8B,mBAAmB,EAAEG,OAAO,CAAC;YACpF,IAAIC,qBAAqB,EAAE;gBACzB,MAAM,EAAE5G,EAAE,GAAEY,IAAI,GAAE,GAAGgG,qBAAqB;gBAC1C1H,gBAAgB,CAACc,EAAE,EAAEY,IAAI,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAMiG,YAAY,GAAG9D,kDAAW,CAC9B,CAACzD,IAA2B,GAAK;QAC/B,IAAI,CAACA,IAAI,IAAI,CAACA,IAAI,CAACoB,MAAM,EAAE,qBAAO,mDAAC+C,iEAAc,KAAG,CAAC;QAErD,MAAM,EAAExB,MAAM,GAAE6E,IAAI,GAAEC,UAAU,GAAE,GAAGzH,IAAI,CAACoB,MAAM;QAChD,MAAMsG,QAAQ,GAAGzC,6EAAmB,CAACwC,UAAU,CAAC;QAEhD,MAAM,CAACE,aAAa,EAAEC,YAAY,CAAC,GAAGrC,iFAAwB,CAAC5C,MAAM,CAAC;QACtE,MAAM,CAACkF,aAAa,EAAE1E,WAAW,CAAC,GAAGuC,yFAAgC,CAACkC,YAAY,CAAC;QACnF,MAAME,iBAAiB,GAAG,CAACrC,2EAAkB,CAC3C/C,YAAY,EACZmF,aAAa,EACbtG,MAAM,CAAC4B,WAAW,CAAC,CACpB;QACD,MAAM4E,iBAAiB,GAAG7F,8EAAqB,CAACyF,aAAa,CAAC,KAAK,CAAC;QAEpE,MAAMK,kBAAkB,GAAG,IAAM;YAC/BnD,6EAAc,CAAC,mBAAmB,CAAC,CAAC;YACpCqB,WAAW,EAAE,CAAC;YACd,MAAM+B,cAAc,GAAGC,MAAM,CAAC3G,MAAM,CAACW,8EAAqB,CAAC0F,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC;YAC9E1C,0EAAY,CACVC,iGAAmC,CACjC5D,MAAM,CAACc,iBAAiB,CAAC,EACzBd,MAAM,CAAC0G,cAAc,CAAC,EACtBtI,sBAAsB,CACvB,EACD8C,IAAI,CACL,CAAC;YACFmE,sBAAsB,CAACqB,cAAc,CAAC,CAAC;QACzC,CAAC;QAED,MAAME,kBAAkB,GAAG,IAAM;YAC/B,MAAMF,cAAc,GAAGC,MAAM,CAAC3G,MAAM,CAACW,8EAAqB,CAACyF,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC;YAC/E9C,6EAAc,CAAC,mBAAmB,CAAC,CAAC;YACpCqB,WAAW,EAAE,CAAC;YACdhB,0EAAY,CACVC,iGAAmC,CACjC5D,MAAM,CAACc,iBAAiB,CAAC,EACzBd,MAAM,CAAC0G,cAAc,CAAC,EACtBtI,sBAAsB,CACvB,EACD8C,IAAI,CACL,CAAC;YACFmE,sBAAsB,CAACqB,cAAc,CAAC,CAAC;QACzC,CAAC;QAED,qBACE,wDAAC5H,KAAG;;gBACD,CAACmH,IAAI,kBACJ,mDAACtD,gEAAa;8BACXmC,CAAC,CAAC,gBAAgB,EAAE;wBACnB+B,UAAU,EAAEpI,IAAI,CAACoB,MAAM,CAACQ,cAAc,CAACjB,IAAI;qBAC5C,CAAC;kBACY;gBAEjBkC,MAAM,CAACwF,MAAM,CAAC1F,MAAM,CAAC,CAAC2F,MAAM,GAAG,CAAC,IAAI,CAAC,CAACd,IAAI,kBACzC,mDAACvD,qEAAkB;oBAACsE,IAAI,EAAEZ,aAAa;oBAAEa,EAAE,EAAEZ,YAAY;kBAAI;8BAE/D,mDAACvH,KAAG;oBAACH,SAAS,EAAEhB,oFAAyB;8BACvC,iEAAC6E,kEAAgB;wBAACpB,MAAM,EAAEE,MAAM,CAACwF,MAAM,CAAC1F,MAAM,CAAC;sBAAI;kBAC/C;8BACN,mDAACtC,KAAG;oBAACH,SAAS,EAAEhB,oFAAyB;8BACvC,iEAACoF,0EAAS,KAAG;kBACT;gBACL,CAAC,CAACkD,IAAI,kBACL,mDAACpD,6DAAU;oBAACuE,SAAS,EAAEjB,QAAQ,CAACiB,SAAS;oBAAEC,YAAY,EAAElB,QAAQ,CAACmB,IAAI;oBAAErB,IAAI,EAAEA,IAAI;kBAAI;8BAExF,mDAACxD,6EAA2B;oBAC1B8D,iBAAiB,EAAEA,iBAAiB;oBACpCC,iBAAiB,EAAEA,iBAAiB;oBACpCe,mBAAmB,EAAEd,kBAAkB;oBACvCe,uBAAuB,EAAEZ,kBAAkB;kBAC3C;;UACE,CACN;IACJ,CAAC,EACD;QAACzF,YAAY;QAAED,IAAI;QAAEyD,WAAW;QAAE7D,iBAAiB;QAAE1C,sBAAsB;QAAE0G,CAAC;KAAC,CAChF;IAED,MAAM9D,iBAAiB,GAAG,CAACyG,YAAY,GAAK;QAC1CjE,qFAAsB,CAAC,mBAAmB,EAAEiE,YAAY,CAAC,CAAC;QAC1D9D,0EAAY,CACVC,iGAAmC,CAAC5D,MAAM,CAACyH,YAAY,CAAC,EAAEzH,MAAM,CAAC,CAAC,CAAC,EAAE5B,sBAAsB,CAAC,EAC5F8C,IAAI,CACL,CAAC;QACFkE,oBAAoB,CAACqC,YAAY,CAAC5F,QAAQ,EAAE,CAAC,CAAC;QAC9CwD,sBAAsB,CAAC,GAAG,CAAC,CAAC,CAAC,qDAAqD;IACpF,CAAC;IAED,MAAMpE,mBAAmB,GAAG,CAACyF,cAAc,GAAK;QAC9ClD,qFAAsB,CAAC,qBAAqB,EAAEkD,cAAc,CAAC,CAAC;QAC9DrB,sBAAsB,CAACqB,cAAc,CAAC,CAAC;QACvC/C,0EAAY,CACVC,iGAAmC,CACjC5D,MAAM,CAACc,iBAAiB,CAAC,EACzBd,MAAM,CAAC0G,cAAc,CAAC,EACtBtI,sBAAsB,CACvB,EACD8C,IAAI,CACL,CAAC;IACJ,CAAC;IAED,MAAMwG,qBAAqB,iBACzB,mDAAC7G,uEAAqB;QACpBC,iBAAiB,EAAEA,iBAAiB;QACpCC,mBAAmB,EAAEA,mBAAmB;QACxCC,iBAAiB,EAAEA,iBAAiB;QACpCC,mBAAmB,EAAEA,mBAAmB;MACxC;IAGJ,MAAM0G,0BAA0B,iBAC9B,mDAACxJ,4EAA0B;QACzBC,sBAAsB,EAAEA,sBAAsB;QAC9CE,gBAAgB,EAAEA,gBAAgB;QAClCD,gBAAgB,EAAEA,gBAAgB;QAClCE,gBAAgB,EAAEsH,kBAAkB;QACpCrH,eAAe,EAAEA,eAAe;QAChCC,IAAI,EAAEkH,mBAAmB;QACzBjH,SAAS,EAAEA,SAAS;MACpB;IAGJ,MAAMkJ,IAAI,iBACR,mDAAC9I,KAAG;QACFH,SAAS,EAAEjB,iDAAU,CACnBC,iFAAsB,EACtBA,iEAAM,CAAC,CAAC,iBAAiB,EAAEkH,iBAAiB,CAACiD,eAAe,CAAC,CAAC,CAAC,CAChE;QACD,iDAAiD;QACjD,uFAAuF;QACvFC,SAAS,EAAC,IAAI;kBAEd,iEAACjF,yEAAW;YACVkF,OAAO,EAAEpF,iEAAc;YACvBqF,QAAQ,EAAE7E,gFAAoB,CAAChF,sBAAsB,EAAEmH,gBAAgB,EAAE;gBACvErE,IAAI;gBACJgH,SAAS,EAAErD,iBAAiB,CAACqD,SAAS;gBACtCC,WAAW,EAAEtD,iBAAiB,CAACsD,WAAW;aAC3C,CAAC;YACFzD,MAAM,EAAEsB,YAAY;UACpB;MACE;IAGR,OAAOtB,MAAM,CAAC;QAAEgD,qBAAqB;QAAEC,0BAA0B;QAAEC,IAAI;KAAE,CAAC,CAAC;AAC7E,CAAC;AAED,iEAAetD,UAAU,EAAC;;;;;;;;;;;;;;;;;;;;;;;;ACrU1B;AAA2D;AAEI;AAEN;AASzD,MAAM7B,2BAA2B,GAAG,CAAC,EACnC8D,iBAAiB,GACjBC,iBAAiB,GACjBe,mBAAmB,GACnBC,uBAAuB,GACU,GAAK;IACtC,MAAM,EAAE1C,CAAC,GAAE,GAAGtE,oEAAc,CAAC,QAAQ,CAAC;IACtC,qBACE,wDAAC1B,KAAG;QAACH,SAAS,EAAEhB,2FAAgB;;0BAC9B,mDAACmB,KAAG;0BACD0H,iBAAiB,kBAChB,mDAAC5I,oEAAM;oBAAC0K,IAAI,EAAEF,wFAAoB;oBAAElI,OAAO,EAAEsH,uBAAuB;8BACjE1C,CAAC,CAAC,eAAe,CAAC;kBACZ;cAEP;0BACN,mDAAChG,KAAG;0BACDyH,iBAAiB,kBAChB,mDAAC3I,oEAAM;oBAAC0K,IAAI,EAAEF,wFAAoB;oBAAElI,OAAO,EAAEqH,mBAAmB;8BAC7DzC,CAAC,CAAC,WAAW,CAAC;kBACR;cAEP;;MACF,CACN;AACJ,CAAC;AAED,iEAAerC,2BAA2B,EAAC;;;;;;;;;;;;;;;;;;;ACxC3C;AAA2D;AAEf;AAO5C,MAAMC,kBAAkB,GAAG,CAAC,EAAEsE,IAAI,GAAEC,EAAE,GAA2B,GAAK;IACpE,MAAM,EAAEnC,CAAC,GAAE,GAAGtE,oEAAc,CAAC,QAAQ,CAAC;IACtC,qBACE,mDAACmC,+DAAa;kBACXmC,CAAC,CAAC,sBAAsB,EAAE;YACzBkC,IAAI;YACJC,EAAE;SACH,CAAC;MACY,CAChB;AACJ,CAAC;AAED,iEAAevE,kBAAkB,EAAC;;;;;;;;;;;;;;;;;;ACrBlC;AAA0B;AAEuB;AAMjD,MAAMC,aAAa,GAAoB,CAAC,EAAE6F,QAAQ,GAAE,GAAK;IACvD,qBAAO,mDAAC1J,KAAG;QAACH,SAAS,EAAEhB,iFAAoB;kBAAG6K,QAAQ;MAAO,CAAC;AAChE,CAAC;AAED,iEAAe7F,aAAa,EAAC;;;;;;;;;;;;;;;;;;;;;ACZ7B;AAAoC;AACH;AAEa;AAEC;AAE/C,MAAMC,cAAc,GAAG,IAAM;IAC3B,qBACE;;0BACE,mDAAC5E,uEAAQ;gBAACW,SAAS,EAAGhB,CAAAA,mFAAyB,EAAEA,iFAAuB;cAAK;YAC5E+K,mDAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAACpJ,GAAG,CAAC,CAACsJ,CAAC,iBAClB,mDAAC5K,uEAAQ;oBAEPW,SAAS,EAAEjB,iDAAU,CAACC,mFAAyB,EAAE;wBAC/C,CAACA,oFAA0B,CAAC,EAAEiL,CAAC,GAAG,CAAC,KAAK,CAAC;wBACzC,CAACjL,oFAA0B,CAAC,EAAEiL,CAAC,GAAG,CAAC,KAAK,CAAC;wBACzC,CAACjL,oFAA0B,CAAC,EAAEiL,CAAC,GAAG,CAAC,KAAK,CAAC;qBAC1C,CAAC;mBALGA,CAAC,CAMN,CACF;;MACD,CACH;AACJ,CAAC;AAED,iEAAehG,cAAc,EAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzB9B,kCAAkC,GAClC;AAA0B;AAGgB;AAEI;AAEF;AACkB;AACiB;AAOpC;AACU;AACI;AAQzD,MAAMyG,mBAAmB,GAAG;AAC1B,KAAC,EAAE1L,mEAAS;AACZ,KAAC,EAAEA,mEAAS;AACZ,KAAC,EAAEA,mEAAS;AACZ,KAAC,EAAEA,mEAAS;AACZ,KAAC,EAAEA,mEAAS;CACb;AAED,MAAMkF,UAAU,GAA8B,CAAC,EAAEuE,SAAS,GAAEC,YAAY,GAAEpB,IAAI,GAAE,GAAK;IACnF,MAAMpB,iBAAiB,GAAGxC,wDAAW,CAACY,+FAAuB,CAAC;IAC9D,MAAM,EACJiC,OAAO,EAAE,EAAEC,gBAAgB,GAAE,GAC7BzG,SAAS,KACV,GAAGsE,0FAAyB,EAAE;IAC/B,MAAM,EAAE8E,eAAe,GAAE,GAAGjD,iBAAiB;IAE7C;;;;;;;GAOC,GACD,MAAM8E,uBAAuB,GAAG,CAC9BC,GAAW,EACXnK,KAAa,EACboK,MAAc,EACdC,UAAkB,GACf;QACH3E,gBAAgB,CAACyE,GAAG,EAAEnK,KAAK,EAAEoK,MAAM,EAAEC,UAAU,EAAEzF,mHAAmC,CAAC,CAAC;IACxF,CAAC;IAED,MAAM2F,0BAA0B,GAAG,IAAM;QACvC,MAAMC,QAAQ,GAAGnC,eAAe,GAAG,CAAC;QACpCrE,4EAAc,CAAC,mBAAmB,EAAEqE,eAAe,EAAEmC,QAAQ,CAAC,CAAC;QAC/DN,uBAAuB,CACrB,iBAAiB,EACjBM,QAAQ,EACRb,mGAAuB,EAAE,EACzBD,mGAAuB,EAAE,CAC1B,CAAC;IACJ,CAAC;IAED,MAAMe,0BAA0B,GAAG,IAAM;QACvC,MAAMD,QAAQ,GAAGnC,eAAe,GAAG,CAAC;QACpCrE,4EAAc,CAAC,mBAAmB,EAAEqE,eAAe,EAAEmC,QAAQ,CAAC,CAAC;QAC/DN,uBAAuB,CACrB,iBAAiB,EACjBM,QAAQ,EACRd,mGAAuB,EAAE,EACzBC,mGAAuB,EAAE,CAC1B,CAAC;IACJ,CAAC;IACD,qBACE;;0BACE,mDAACtK,KAAG;gBAACqL,GAAG,EAAE/C,SAAS;gBAAEzI,SAAS,EAAEhB,wEAAc;0BAC5C,iEAACM,8EAAgB;oBAACS,SAAS,EAAEA,SAAS;8BACpC,iEAACsK,qEAAO;wBACNqB,KAAK,EAAEvC,eAAe;wBACtBwC,WAAW,EAAExC,eAAe,KAAKoB,yFAAiB,GAAG,IAAI,GAAGc,0BAA0B;wBACtFO,WAAW,EACTzC,eAAe,KAAKmB,gGAAwB,GAAG,IAAI,GAAGiB,0BAA0B;sBAElF;kBACe;cACf;0BACN,mDAACpL,KAAG;gBACFH,SAAS,EAAE0K,mBAAmB,CAACvB,eAAe,CAAC;gBAC/CqC,GAAG,EAAE/C,SAAS;gBACdlG,IAAI,EAAEmG,YAAY;gBAClBmD,uBAAuB,EAAE;oBAAEC,MAAM,EAAExE,IAAI;iBAAE;cACzC;;MACD,CACH;AACJ,CAAC;AACD,iEAAepD,UAAU,EAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvG1B;AAAgC;AAE2B;AAEhB;AAE8B;AAC/B;AACF;AACW;AAQnD;;;;;;;;;CASC,GACD,MAAMmG,OAAO,GAAG,CAAC,EAAEqB,KAAK,GAAEE,WAAW,GAAED,WAAW,GAAgB,GAAkB;IAClF,MAAM,EAAExF,CAAC,GAAE5D,IAAI,GAAE,GAAGV,oEAAc,CAAC,QAAQ,CAAC;IAC5C,MAAMsK,cAAc,GAAGvK,8CAAO,CAAC,IAAME,0EAAiB,CAACT,MAAM,CAACqK,KAAK,CAAC,EAAEnJ,IAAI,CAAC,EAAE;QAACmJ,KAAK;QAAEnJ,IAAI;KAAC,CAAC;IAC3F,qBACE,wDAACpC,KAAG;QAACH,SAAS,EAAEhB,uEAAgB;;0BAC9B,mDAACC,oEAAM;gBACLmN,OAAO,EAAEjG,CAAC,CAAC,kBAAkB,CAAC;gBAC9BkG,KAAK,EAAEN,mFAAkB;gBACzBQ,OAAO,EAAEP,mFAAmB;gBAC5BS,UAAU,EAAE,CAACd,WAAW;gBACxBpK,OAAO,EAAEoK,WAAW;gBACpBe,SAAS,EAAEvG,CAAC,CAAC,kBAAkB,CAAC;0BAEhC,iEAAC8F,iEAAS,KAAG;cACN;0BACT,mDAACU,MAAI;gBAAC3M,SAAS,EAAEhB,mEAAY;0BAAGmN,cAAc;cAAQ;0BACtD,mDAAClN,oEAAM;gBACLmN,OAAO,EAAEjG,CAAC,CAAC,kBAAkB,CAAC;gBAC9BoG,OAAO,EAAEP,mFAAmB;gBAC5BK,KAAK,EAAEN,mFAAkB;gBACzBU,UAAU,EAAE,CAACb,WAAW;gBACxBrK,OAAO,EAAEqK,WAAW;gBACpBc,SAAS,EAAEvG,CAAC,CAAC,kBAAkB,CAAC;0BAEhC,iEAAC+F,gEAAQ,KAAG;cACL;;MACL,CACN;AACJ,CAAC;AAED,iEAAe7B,OAAO,EAAC;;;;;;;;;;;;;;;;;;;;;;;;ACzDvB;AAAwD;AAEpB;AAEM;AAEK;IAQxC,UAIN;UAJWjL,UAAU;IAAVA,UAAU,CACpBmB,OAAK,IAAG,OAAO;IADLnB,UAAU,CAEpByN,QAAM,IAAG,QAAQ;IAFPzN,UAAU,CAGpB0N,OAAK,IAAG,OAAO;GAHL1N,UAAU,KAAVA,UAAU;AAqBtB,MAAMD,MAAM,GAAoB,CAAC,EAC/BsB,IAAI,GACJD,EAAE,GACFO,QAAQ,GACRL,OAAO,GACPI,KAAK,GACLiM,QAAQ,EAAG,KAAK,GAChBC,QAAQ,EAAG,KAAK,GAChB1M,IAAI,EAAGlB,UAAU,CAACyN,MAAM,GACxBI,WAAW,EAAG,kBAAkB,GAChCC,YAAY,EAAG,IAAI,GACnBlN,SAAS,GACTmN,cAAc,EAAG,IAAI,KACtB,GAAK;IACJ,MAAMC,cAAc,GAAG7J,kDAAW,CAChC,CAAC8J,CAAiC,GAAK;QACrC,IAAItM,QAAQ,EAAE;YACZA,QAAQ,CAACsM,CAAC,CAACC,MAAM,CAACxM,KAAK,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC,EACD;QAACC,QAAQ;KAAC,CACX;IAED,qBACE,wDAACZ,KAAG;QACFH,SAAS,EAAEjB,iDAAU,CAACC,sEAAgB,EAAE;YACtC,CAACA,mFAA6B,CAAC,EAAEkO,YAAY;YAC7C,CAAClN,SAAS,CAAC,EAAEA,SAAS;YACtB,CAAChB,8EAAwB,CAAC,EAAE+N,QAAQ;YACpC,CAAC/N,2EAAqB,CAAC,EAAEsB,IAAI,KAAKlB,UAAU,CAACmB,KAAK;YAClD,CAACvB,4EAAsB,CAAC,EAAEsB,IAAI,KAAKlB,UAAU,CAACyN,MAAM;YACpD,CAAC7N,2EAAqB,CAAC,EAAEsB,IAAI,KAAKlB,UAAU,CAAC0N,KAAK;YAClD,CAAC9N,2EAAqB,CAAC,EAAEmO,cAAc;SACxC,CAAC;;0BAEF,wDAACS,QAAM;gBACL5N,SAAS,EAAEjB,iDAAU,CAACC,mEAAa,EAAE;oBACnC,CAACA,gFAA0B,CAAC,EAAEkO,YAAY;oBAC1C,CAAClO,2EAAqB,CAAC,EAAE+N,QAAQ;iBAClC,CAAC;gBACFtM,IAAI,EAAEA,IAAI;gBACVD,EAAE,EAAEA,EAAE;gBACNO,QAAQ,EAAEqM,cAAc;gBACxBL,QAAQ,EAAEA,QAAQ;gBAClBC,QAAQ,EAAEA,QAAQ;gBACjB,GAAIlM,KAAK,GAAG;oBAAEA,KAAK;iBAAE,GAAG;oBAAEiN,YAAY,EAAE,EAAE;iBAAE;;kCAE7C,mDAACC,QAAM;wBAAClN,KAAK,EAAC,EAAE;wBAACiM,QAAQ;wBAACkB,MAAM;kCAC7BhB,WAAW;sBACL;oBACRvM,OAAO,CAACC,GAAG,CAAC,CAACqN,MAAM,iBAClB,mDAACA,QAAM;4BAAoBlN,KAAK,EAAEkN,MAAM,CAAClN,KAAK;4BAAEiM,QAAQ,EAAEiB,MAAM,CAACjB,QAAQ,IAAI,KAAK;sCAC/EiB,MAAM,CAACnN,KAAK;2BADFmN,MAAM,CAAClN,KAAK,CAEhB,CACT;;cACK;0BACT,mDAACX,KAAG;gBAACH,SAAS,EAAEjB,iDAAU,CAACC,kEAAY,EAAE;oBAAE,CAACA,0EAAoB,CAAC,EAAE+N,QAAQ;iBAAE,CAAC;0BAC5E,iEAACH,sEAAS,KAAG;cACT;;MACF,CACN;AACJ,CAAC;AAED,iEAAezN,MAAM,EAAC;;;;;;;;;;;;;;;;;;;;;;;AClGtB;AAAgE;AAC5B;AAES;IAEtC,eAGN;UAHWkP,eAAe;IAAfA,eAAe,CACzBC,MAAI,IAAG,MAAM;IADHD,eAAe,CAEzBE,UAAQ,IAAG,UAAU;GAFXF,eAAe,KAAfA,eAAe;AAW3B,MAAMjK,SAAS,GAAG,CAAC,EACjBoK,UAAU,EAAG,KAAK,GAClBxO,SAAS,GACTyO,MAAM,EAAGJ,eAAe,CAACE,QAAQ,GAClB,iBACf,mDAACH,gEAA4B;QAC3BM,WAAW,EAAEF,UAAU,GAAG,UAAU,GAAG,YAAY;QACnDxO,SAAS,EAAEjB,iDAAU,CAACC,oEAAW,EAAEA,+DAAM,CAACyP,MAAM,CAAC,EAAE;YACjD,CAACzO,SAAS,CAAC,EAAEA,SAAS;SACvB,CAAC;MACF;AAGJ,iEAAeoE,SAAS,EAAC;;;;;;;;;;;;;;;;;;;;AC7BzB;AAAoC;AAEQ;AAU5C,MAAM/E,QAAQ,GAAG,CAAC,EAChBwK,QAAQ,GACR+E,SAAS,GACTC,SAAS,GACTC,QAAQ,EAAG,IAAI,GACf9O,SAAS,GACK,GAAK;IACnB,qBACE,mDAAC2M,MAAI;QACH3M,SAAS,EAAEjB,iDAAU,CAACC,uEAAe,EAAE;YACrC,CAACA,uEAAe,CAAC,EAAE,CAAC6K,QAAQ,IAAI,CAAC7J,SAAS;YAC1C,CAAChB,qEAAa,CAAC,EAAE8P,QAAQ;YACzB,CAAC9P,sEAAc,CAAC,EAAE4P,SAAS;YAC3B,CAAC5P,sEAAc,CAAC,EAAE6P,SAAS;YAC3B,CAAC7O,SAAS,CAAC,EAAEA,SAAS;SACvB,CAAC;kBAED6J,QAAQ,kBAAI,mDAAC8C,MAAI;YAAC3M,SAAS,EAAEhB,sEAAc;sBAAG6K,QAAQ;UAAQ;MAC1D,CACP;AACJ,CAAC;AAED,iEAAexK,QAAQ,EAAC;;;;;;;;;;;;;;;;;;;AClCxB;AAA0B;AAE0B;AAER;AAO5C,MAAMC,gBAAgB,GAAoB,CAAC,EAAEuK,QAAQ,GAAE9J,SAAS,GAAE,GAAK;IACrE,qBACE,wDAACI,KAAG;QAACH,SAAS,EAAEhB,wFAAwB;;YACrC6K,QAAQ;YACR9J,SAAS,kBAAI,mDAACsP,qEAAO;gBAACrP,SAAS,EAAEhB,8EAAc;cAAI;;MAChD,CACN;AACJ,CAAC;AAED,iEAAeM,gBAAgB,EAAC;;;;;;;;;;;;;;ACpBM;AAItC,MAAM2C,WAAW,GAAGuN,oDAAa,CAAe,EAAE,CAAC;AAEnD,iEAAevN,WAAW,EAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;ACN3B,4BAA4B,GAC5B,oDAAoD,GACG;AAGI;AACU;AAEX;AACkC;AAClD;AACmB;AACb;AACS;AAgCzD;;;;;;;;;CASC,GACD,MAAMoC,yBAAyB,GAAG,IAA0B;IAC1D,MAAM4L,QAAQ,GAAGR,wDAAW,EAAE;IAC9B,MAAMS,KAAK,GAAGP,oEAAQ,EAAE;IACxB,MAAM,EAAExJ,CAAC,GAAE,GAAGtE,oEAAc,CAAC,QAAQ,CAAC;IACtC,MAAM,KAAC9B,SAAS,MAAEoQ,YAAY,MAAI1M,+CAAQ,CAAC,KAAK,CAAC;IAEjD,MAAM8F,SAAS,GAAG7F,wDAAW,CAACkM,uFAAe,EAAEjM,qDAAY,CAAC;IAC5D,MAAM6F,WAAW,GAAG9F,wDAAW,CAACmM,8FAAsB,EAAElM,qDAAY,CAAC;IAErE,6FAA6F;IAC7F,8EAA8E;IAC9E,MAAMyM,kBAAkB,GAAG7M,kDAAW,CACpC,CACE8M,eAAgC,EAChCpF,GAAW,EACXnK,KAAsD,GACnD;QACH,IAAIuP,eAAe,KAAK3K,mHAAmC,EAAE,OAAO4K,SAAS,CAAC;QAE9E,MAAMC,IAAI,GAAGtF,GAAG,KAAK,WAAW,GAAGnK,KAAK,GAAGyI,SAAS;QACpD,MAAMiH,KAAK,GAAGvF,GAAG,KAAK,aAAa,GAAGnK,KAAK,GAAG0I,WAAW;QAEzD,OAAOsG,iEAAW,CAACS,IAAI,EAAEC,KAAK,CAAC,CAACC,MAAM,CAAC;IACzC,CAAC,EACD;QAAClH,SAAS;QAAEC,WAAW;KAAC,CACzB;IAED,MAAMjD,OAAO,GAAG3E,8CAAO,CACrB,IAAO;YACL8O,+BAA+B,EAAE,CAC/BzF,GAAW,EACXnK,KAAsD,EACtDuP,eAAgC,EAChCM,QAAoB,GACjB;gBACH,IAAIX,uEAAU,EAAE,EAAE;oBAChBG,YAAY,CAAC,IAAI,CAAC,CAAC;oBACnBJ,oFAAyB,CACvB9E,GAAG,EACHnK,KAAK,EACLuP,eAAe,EACfD,kBAAkB,CAACC,eAAe,EAAEpF,GAAG,EAAEnK,KAAK,CAAC,CAChD,CACE8P,IAAI,CAAC,IAAM;wBACVD,QAAQ,EAAE,CAAC;oBACb,CAAC,CAAC,CACDE,OAAO,CAAC,IAAM;wBACbV,YAAY,CAAC,KAAK,CAAC,CAAC;oBACtB,CAAC,CAAC,CAAC;gBACP,OAAO;oBACLQ,QAAQ,EAAE,CAAC;gBACb,CAAC;YACH,CAAC;YACDG,sBAAsB,EAAE,CACtB7F,GAAW,EACXnK,KAAsD,EACtDoK,MAAkB,EAClBC,UAAsB,EACtBkF,eAAgC,EAChCU,eAA4B,GACzB;gBACH,IAAIf,uEAAU,EAAE,EAAE;oBAChB9E,MAAM,EAAE,CAAC;oBACTiF,YAAY,CAAC,IAAI,CAAC,CAAC;oBACnBJ,oFAAyB,CACvB9E,GAAG,EACHnK,KAAK,EACLuP,eAAe,EACfD,kBAAkB,CAACC,eAAe,EAAEpF,GAAG,EAAEnK,KAAK,CAAC,CAChD,CACE8P,IAAI,CAAC,IAAM;wBACV,IAAIG,eAAe,EAAE;4BACnBA,eAAe,EAAE,CAAC;wBACpB,CAAC;oBACH,CAAC,CAAC,CACDC,KAAK,CAAC,IAAM;wBACXd,KAAK,CAAC/J,CAAC,CAAC,yBAAyB,CAAC,EAAE;4BAClC8K,MAAM,EAAEvB,mFAAmB;4BAC3BnJ,OAAO,EAAE;gCACP;oCACEe,IAAI,EAAEnB,CAAC,CAAC,MAAM,CAAC;oCACfgL,OAAO,EAAE,IAAI;oCACb5P,OAAO,EAAE,IAAM;wCACb4J,UAAU,EAAE,CAAC;oCACf,CAAC;iCACF;gCACD;oCACE7D,IAAI,EAAEnB,CAAC,CAAC,UAAU,CAAC;oCACnBgL,OAAO,EAAE,KAAK;oCACd5P,OAAO,EAAE,IAAM;wCACb,IAAIwP,eAAe,EAAE;4CACnBA,eAAe,EAAE,CAAC;wCACpB,CAAC;oCACH,CAAC;iCACF;6BACF;yBACF,CAAC,CAAC;oBACL,CAAC,CAAC,CACDF,OAAO,CAAC,IAAM;wBACbV,YAAY,CAAC,KAAK,CAAC,CAAC;oBACtB,CAAC,CAAC,CAAC;gBACP,OAAO;oBACLjF,MAAM,EAAE,CAAC;gBACX,CAAC;YACH,CAAC;YACD1E,gBAAgB,EAAE,CAChByE,GAAW,EACXnK,KAAsD,EACtDoK,MAA2B,EAC3BC,UAA+B,EAC/BkF,eAAgC,EAChCU,eAA4B,GACzB;gBACH,IAAIf,uEAAU,EAAE,EAAE;oBAChB,+BAA+B;oBAC/BC,QAAQ,CAAC/E,MAAM,CAAC,CAAC;oBACjBiF,YAAY,CAAC,IAAI,CAAC,CAAC;oBACnBJ,oFAAyB,CACvB9E,GAAG,EACHnK,KAAK,EACLuP,eAAe,EACfD,kBAAkB,CAACC,eAAe,EAAEpF,GAAG,EAAEnK,KAAK,CAAC,CAChD,CACE8P,IAAI,CAAC,IAAM;wBACV,IAAIG,eAAe,EAAE;4BACnBA,eAAe,EAAE,CAAC;wBACpB,CAAC;oBACH,CAAC,CAAC,CACDC,KAAK,CAAC,IAAM;wBACXd,KAAK,CAAC/J,CAAC,CAAC,yBAAyB,CAAC,EAAE;4BAClC8K,MAAM,EAAEvB,mFAAmB;4BAC3BnJ,OAAO,EAAE;gCACP;oCACEe,IAAI,EAAEnB,CAAC,CAAC,MAAM,CAAC;oCACfgL,OAAO,EAAE,IAAI;oCACb5P,OAAO,EAAE,IAAM;wCACb0O,QAAQ,CAAC9E,UAAU,CAAC,CAAC;oCACvB,CAAC;iCACF;gCACD;oCACE7D,IAAI,EAAEnB,CAAC,CAAC,UAAU,CAAC;oCACnBgL,OAAO,EAAE,KAAK;oCACd5P,OAAO,EAAE,IAAM;wCACb,IAAIwP,eAAe,EAAE;4CACnBA,eAAe,EAAE,CAAC;wCACpB,CAAC;oCACH,CAAC;iCACF;6BACF;yBACF,CAAC,CAAC;oBACL,CAAC,CAAC,CACDF,OAAO,CAAC,IAAM;wBACbV,YAAY,CAAC,KAAK,CAAC,CAAC;oBACtB,CAAC,CAAC,CAAC;gBACP,OAAO;oBACLF,QAAQ,CAAC/E,MAAM,CAAC,CAAC;gBACnB,CAAC;YACH,CAAC;SACF,GACD;QAAC+E,QAAQ;QAAE9J,CAAC;QAAE+J,KAAK;QAAEE,kBAAkB;KAAC,CACzC;IAED,OAAO;QAAE7J,OAAO;QAAExG,SAAS;KAAE,CAAC;AAChC,CAAC;AAED,iEAAesE,yBAAyB,EAAC;;;;;;;;;;;;;;;;;;;;;;;;;;AC5NqB;AAEH;AACa;AACF;AAEtB;AAED;AACU;AAElD,MAAMqN,YAAY,GAAGN,6DAAW,CAAC;IACtC3Q,IAAI,EAAE+Q,uFAAiB;IACvBG,YAAY,EAAEJ,6FAAsB,EAAE;IACtCK,QAAQ,EAAE;QACRpN,kBAAkB,EAAE,CAACqN,KAAK,EAAE3G,MAA4D,GAAM;gBAC5F,GAAG2G,KAAK;gBACR,6OAA6O;gBAC7OC,qBAAqB,EAAEL,sEAAc,CACnCF,6FAAsB,CAACrG,MAAM,CAAC6G,OAAO,CAACjL,MAAM,CAAC,CAACT,eAAe,EAC7D6E,MAAM,CAAC6G,OAAO,CAAC/Q,OAAO,CACvB;gBACDqF,eAAe,EAAE6E,MAAM,CAAC6G,OAAO,CAAC/Q,OAAO;aACxC;KACF;IACD,qCAAqC;IACrC,kCAAkC;IAClCgR,aAAa,EAAE,CAACC,OAAO,GAAK;QAC1BA,OAAO,CAACC,OAAO,CAACb,8EAAa,EAAE,CAACQ,KAAK,EAAE3G,MAAM,GAAK;YAChD,OAAOqG,6FAAsB,CAACrG,MAAM,CAAC6G,OAAO,CAACjL,MAAM,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;QACHmL,OAAO,CAACC,OAAO,CAACZ,qFAAmB,EAAE,CAACO,KAAK,EAAE3G,MAAM,GAAK;YACtD,MAAM,EACJ6G,OAAO,EAAE,EAAEI,eAAe,GAAErL,MAAM,GAAE,KACrC,GAAGoE,MAAM;YACV,MAAMkH,iBAAiB,GAAGD,eAAe,CAACzM,2FAAuB,CAAC;YAClE,IAAI0M,iBAAiB,EAAE;gBACrB,MAAM,EAAE/L,eAAe,EAAEgM,cAAc,GAAE,GAAGd,6FAAsB,CAACzK,MAAM,CAAC;gBAC1E,MAAM,EAAET,eAAe,EAAEiM,aAAa,GAAE,GAAGF,iBAAiB;gBAC5D,OAAO;oBACL,GAAGP,KAAK;oBACR,GAAGO,iBAAiB;oBACpBN,qBAAqB,EAAEL,sEAAc,CAACY,cAAc,EAAEC,aAAa,CAAC;iBACrE,CAAC;YACJ,CAAC;YACD,OAAOT,KAAK,CAAC;QACf,CAAC,CAAC,CAAC;IACL,CAAC;CACF,CAAC,CAAC;AAEI,MAAM,EAAErN,kBAAkB,GAAE,GAAGkN,YAAY,CAACnL,OAAO,CAAC;AAEpD,MAAMhC,aAAa,GAAG,CAACsN,KAAgB,GAAKA,KAAK,CAAC7Q,OAAO,CAAC;AAC1D,MAAMuR,qBAAqB,GAAG,CAACV,KAAgB,GAAKA,KAAK,CAAC7Q,OAAO,CAACqF,eAAe,CAAC;AAClF,MAAMmM,2BAA2B,GAAG,CAACX,KAAgB,GAC1DA,KAAK,CAAC7Q,OAAO,CAAC8Q,qBAAqB,CAAC;AAEtC,iEAAeJ,YAAY,CAACe,OAAO,EAAC;;;;;;;;;;;;;;;ACzD7B,MAAMC,oCAAoC,GAAG,MAAM,CAAC,CAAC,0EAA0E;AAC/H,MAAMC,mCAAmC,GAAG,KAAK,CAAC,CAAC,QAAQ;AAC3D,MAAMC,oCAAoC,GAAG,MAAM,CAAC,CAAC,SAAS;AAC9D,MAAMC,qCAAqC,GAAG,OAAO,CAAC,CAAC,WAAW;;;;;;;;;;;;;;;;ACH1C;AAM/B;;;;;;CAMC,GACM,MAAM1N,yBAAyB,GAAG,CACvC4N,cAA+B,EAC/BtT,sBAAuC,GAC5B;IACX,MAAMuT,cAAc,GAAGD,cAAc,EAAE/R,OAAO,CAACiS,IAAI,CACjD,CAAC/R,MAAM,GACLA,MAAM,CAACE,IAAI,KAAK3B,sBAAsB,IAAIyB,MAAM,CAACV,EAAE,KAAKa,MAAM,CAAC5B,sBAAsB,CAAC,CACzF;IACD,OAAOuT,cAAc,EAAE7R,YAAY,CAAC;AACtC,CAAC,CAAC;AAEF;;;;;;CAMC,GACM,MAAM+D,wBAAwB,GAAG,CACtC6N,cAA+B,EAC/BG,QAAgB,GACD;IACf,MAAMF,cAAc,GAAGD,cAAc,EAAE/R,OAAO,CAACiS,IAAI,CAAC,CAAC/R,MAAM,GAAKA,MAAM,CAACC,YAAY,KAAK+R,QAAQ,CAAC;IACjG,OAAOF,cAAc,CAAC;AACxB,CAAC,CAAC;AAEF;;;;;CAKC,GACM,MAAM5N,yBAAyB,GAAG,CAACpE,OAAiB,GACzD8R,kDAAI,CAAC9R,OAAO,CAACL,GAAG,CAAC,CAACO,MAAM,GAAKA,MAAM,CAACC,YAAY,CAAC,CAAC,CAAC","sources":["webpack://quran.com/./public/icons/caret-down.svg","webpack://quran.com/./public/icons/minus.svg","webpack://quran.com/./public/icons/plus.svg","webpack://quran.com/./src/components/QuranReader/TafsirView/TafsirEndOfScrollingActions.module.scss","webpack://quran.com/./src/components/QuranReader/TafsirView/TafsirMessage/TafsirMessage.module.scss","webpack://quran.com/./src/components/QuranReader/TafsirView/TafsirText/TafsirText.module.scss","webpack://quran.com/./src/components/QuranReader/TafsirView/TafsirView.module.scss","webpack://quran.com/./src/components/dls/Counter/Counter.module.scss","webpack://quran.com/./src/components/dls/Forms/Select/Select.module.scss","webpack://quran.com/./src/components/dls/Separator/Separator.module.scss","webpack://quran.com/./src/components/dls/Skeleton/Skeleton.module.scss","webpack://quran.com/./src/components/dls/Spinner/SpinnerContainer/SpinnerContainer.module.scss","webpack://quran.com/./src/pages/[chapterId]/[verseId]/tafsirs.module.scss","webpack://quran.com/./src/components/QuranReader/TafsirView/LanguageAndTafsirSelection.tsx","webpack://quran.com/./src/components/QuranReader/TafsirView/SurahAndAyahSelection.tsx","webpack://quran.com/./src/components/QuranReader/TafsirView/TafsirBody.tsx","webpack://quran.com/./src/components/QuranReader/TafsirView/TafsirEndOfScrollingActions.tsx","webpack://quran.com/./src/components/QuranReader/TafsirView/TafsirGroupMessage.tsx","webpack://quran.com/./src/components/QuranReader/TafsirView/TafsirMessage/index.tsx","webpack://quran.com/./src/components/QuranReader/TafsirView/TafsirSkeleton.tsx","webpack://quran.com/./src/components/QuranReader/TafsirView/TafsirText/index.tsx","webpack://quran.com/./src/components/dls/Counter/Counter.tsx","webpack://quran.com/./src/components/dls/Forms/Select/index.tsx","webpack://quran.com/./src/components/dls/Separator/Separator.tsx","webpack://quran.com/./src/components/dls/Skeleton/Skeleton.tsx","webpack://quran.com/./src/components/dls/Spinner/SpinnerContainer/index.tsx","webpack://quran.com/./src/contexts/DataContext.ts","webpack://quran.com/./src/hooks/auth/usePersistPreferenceGroup.ts","webpack://quran.com/./src/redux/slices/QuranReader/tafsirs.ts","webpack://quran.com/./src/utils/staticPageGeneration.ts","webpack://quran.com/./src/utils/tafsir.ts"],"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 SvgCaretDown = function SvgCaretDown(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 24 24\",\n width: 18,\n height: 18,\n stroke: \"currentColor\",\n strokeWidth: 1.5,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n fill: \"none\",\n shapeRendering: \"geometricPrecision\",\n style: {\n color: \"currentcolor\"\n }\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m6 9 6 6 6-6\"\n })));\n};\nexport default SvgCaretDown;","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 SvgMinus = function SvgMinus(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 15,\n height: 15,\n viewBox: \"0 0 15 15\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M2.25 7.5a.5.5 0 0 1 .5-.5h9.5a.5.5 0 0 1 0 1h-9.5a.5.5 0 0 1-.5-.5Z\",\n fill: \"currentColor\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\"\n })));\n};\nexport default SvgMinus;","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 SvgPlus = function SvgPlus(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 15,\n height: 15,\n viewBox: \"0 0 15 15\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M8 2.75a.5.5 0 0 0-1 0V7H2.75a.5.5 0 0 0 0 1H7v4.25a.5.5 0 0 0 1 0V8h4.25a.5.5 0 0 0 0-1H8V2.75Z\",\n fill: \"currentColor\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\"\n })));\n};\nexport default SvgPlus;","// Exports\nmodule.exports = {\n\t\"container\": \"TafsirEndOfScrollingActions_container__tcWLj\"\n};\n","// Exports\nmodule.exports = {\n\t\"tafsirMessage\": \"TafsirMessage_tafsirMessage__Gr_S9\"\n};\n","// Exports\nmodule.exports = {\n\t\"counter\": \"TafsirText_counter__xlNaF\",\n\t\"xs\": \"TafsirText_xs__P5Qjv\",\n\t\"sm\": \"TafsirText_sm__BbfQ0\",\n\t\"md\": \"TafsirText_md__mJWtv\",\n\t\"lg\": \"TafsirText_lg__t_oGB\",\n\t\"xl\": \"TafsirText_xl__3hmwr\"\n};\n","// Exports\nmodule.exports = {\n\t\"container\": \"TafsirView_container__R9G7I\",\n\t\"tafsirName\": \"TafsirView_tafsirName__QPOiO\",\n\t\"tafsirContainer\": \"TafsirView_tafsirContainer__g2rhW\",\n\t\"rtl\": \"TafsirView_rtl__8pRLP\",\n\t\"surahAndAyahSelectionContainer\": \"TafsirView_surahAndAyahSelectionContainer__W96nf\",\n\t\"tafsirSelectionContainer\": \"TafsirView_tafsirSelectionContainer__QSkE3\",\n\t\"tafsirSelectionItem\": \"TafsirView_tafsirSelectionItem__GTJvw\",\n\t\"tafsirItemSelected\": \"TafsirView_tafsirItemSelected__SXceL\",\n\t\"separatorContainer\": \"TafsirView_separatorContainer__diS8n\",\n\t\"verseTextContainer\": \"TafsirView_verseTextContainer__A7tZ_\",\n\t\"selectionItem\": \"TafsirView_selectionItem__FJdhi\",\n\t\"ayahSelection\": \"TafsirView_ayahSelection__jWULb\",\n\t\"tafsirSkeletonItem\": \"TafsirView_tafsirSkeletonItem__q5sNk\",\n\t\"ayahSekletonItem\": \"TafsirView_ayahSekletonItem__B_nJN\",\n\t\"tafsirSkeletonItem1\": \"TafsirView_tafsirSkeletonItem1__nLGRk\",\n\t\"tafsirSkeletonItem2\": \"TafsirView_tafsirSkeletonItem2__aaEJy\",\n\t\"tafsirSkeletonItem3\": \"TafsirView_tafsirSkeletonItem3__NqYKV\",\n\t\"tafsirSelectionSkeleton\": \"TafsirView_tafsirSelectionSkeleton__3oq7k\",\n\t\"languageSelection\": \"TafsirView_languageSelection__8EFqZ\",\n\t\"tafsir-font-size-1\": \"TafsirView_tafsir-font-size-1__sLRnq\",\n\t\"tafsir-font-size-2\": \"TafsirView_tafsir-font-size-2__JLiR2\",\n\t\"tafsir-font-size-3\": \"TafsirView_tafsir-font-size-3__K0LBa\",\n\t\"tafsir-font-size-4\": \"TafsirView_tafsir-font-size-4__KrD1k\",\n\t\"tafsir-font-size-5\": \"TafsirView_tafsir-font-size-5__ri_Mr\",\n\t\"tafsir-font-size-6\": \"TafsirView_tafsir-font-size-6__FvBko\",\n\t\"tafsir-font-size-7\": \"TafsirView_tafsir-font-size-7__oS0XU\",\n\t\"tafsir-font-size-8\": \"TafsirView_tafsir-font-size-8__1U_43\",\n\t\"tafsir-font-size-9\": \"TafsirView_tafsir-font-size-9__6VJC2\",\n\t\"tafsir-font-size-10\": \"TafsirView_tafsir-font-size-10__zRYWI\"\n};\n","// Exports\nmodule.exports = {\n\t\"container\": \"Counter_container__WfR1A\",\n\t\"count\": \"Counter_count__Q6LdA\"\n};\n","// Exports\nmodule.exports = {\n\t\"container\": \"Select_container___DCC_\",\n\t\"withBackground\": \"Select_withBackground__rpdEL\",\n\t\"defaultStyledContainer\": \"Select_defaultStyledContainer__b32Mm\",\n\t\"smallContainer\": \"Select_smallContainer__L2Lff\",\n\t\"mediumContainer\": \"Select_mediumContainer__MF_Vq\",\n\t\"largeContainer\": \"Select_largeContainer___qGs0\",\n\t\"disabledContainer\": \"Select_disabledContainer__gi7YD\",\n\t\"arrow\": \"Select_arrow__WAbAk\",\n\t\"disabledArrow\": \"Select_disabledArrow__V4nEO\",\n\t\"select\": \"Select_select__BnH2G\",\n\t\"defaultStyledSelect\": \"Select_defaultStyledSelect__LmeKj\",\n\t\"disabledSelect\": \"Select_disabledSelect___R3Jd\"\n};\n","// Exports\nmodule.exports = {\n\t\"base\": \"Separator_base__2kP0d\",\n\t\"semiBold\": \"Separator_semiBold__9Eu4c\",\n\t\"bold\": \"Separator_bold__412WT\"\n};\n","// Exports\nmodule.exports = {\n\t\"baseSize\": \"Skeleton_baseSize__RsOkc\",\n\t\"skeleton\": \"Skeleton_skeleton__u2Uso\",\n\t\"active\": \"Skeleton_active__5df2K\",\n\t\"loading\": \"Skeleton_loading__iZh50\",\n\t\"rounded\": \"Skeleton_rounded__ftYYr\",\n\t\"content\": \"Skeleton_content__knKtV\"\n};\n","// Exports\nmodule.exports = {\n\t\"internalContainer\": \"SpinnerContainer_internalContainer__kt2ni\",\n\t\"spinner\": \"SpinnerContainer_spinner__kzDgO\"\n};\n","// Exports\nmodule.exports = {\n\t\"tafsirContainer\": \"tafsirs_tafsirContainer__DIxKj\"\n};\n","import classNames from 'classnames';\n\nimport styles from './TafsirView.module.scss';\n\nimport Button, { ButtonSize } from '@/dls/Button/Button';\nimport Select, { SelectSize } from '@/dls/Forms/Select';\nimport Skeleton from '@/dls/Skeleton/Skeleton';\nimport SpinnerContainer from '@/dls/Spinner/SpinnerContainer';\nimport { getLocaleNameByFullName } from '@/utils/locale';\nimport { TafsirsResponse } from 'types/ApiResponses';\n\ntype LanguageAndTafsirSelectionProps = {\n selectedTafsirIdOrSlug: number | string;\n onTafsirSelected: (tafsirId: number, tafsirSlug: string) => void;\n selectedLanguage: string;\n onSelectLanguage: (lang: string) => void;\n languageOptions: string[];\n data: TafsirsResponse;\n isLoading: boolean;\n};\nconst LanguageAndTafsirSelection = ({\n selectedTafsirIdOrSlug,\n onTafsirSelected,\n selectedLanguage,\n onSelectLanguage,\n languageOptions,\n data,\n isLoading,\n}: LanguageAndTafsirSelectionProps) => {\n if (!data) {\n return (\n <Skeleton className={classNames(styles.tafsirSkeletonItem, styles.tafsirSelectionSkeleton)} />\n );\n }\n return (\n <SpinnerContainer isLoading={isLoading}>\n <div className={styles.tafsirSelectionContainer}>\n <Select\n className={styles.languageSelection}\n size={SelectSize.Small}\n id=\"lang-selection\"\n name=\"lang-selection\"\n options={languageOptions.map((lng) => ({\n label: getLocaleNameByFullName(lng),\n value: lng,\n }))}\n onChange={onSelectLanguage}\n value={selectedLanguage}\n />\n {data.tafsirs\n .filter(\n (tafsir) =>\n tafsir.languageName === selectedLanguage ||\n selectedTafsirIdOrSlug === tafsir.slug ||\n Number(selectedTafsirIdOrSlug) === tafsir.id,\n )\n .map((tafsir) => {\n const selected =\n selectedTafsirIdOrSlug === tafsir.slug ||\n Number(selectedTafsirIdOrSlug) === tafsir.id;\n return (\n <Button\n onClick={() => onTafsirSelected(tafsir.id, tafsir.slug)}\n size={ButtonSize.Small}\n key={tafsir.id}\n className={classNames(styles.tafsirSelectionItem, {\n [styles.tafsirItemSelected]: selected,\n })}\n >\n {tafsir.translatedName.name}\n </Button>\n );\n })}\n </div>\n </SpinnerContainer>\n );\n};\n\nexport default LanguageAndTafsirSelection;\n","import { useContext, useMemo } from 'react';\n\nimport useTranslation from 'next-translate/useTranslation';\n\nimport styles from './TafsirView.module.scss';\n\nimport Select, { SelectSize } from '@/dls/Forms/Select';\nimport { toLocalizedNumber } from '@/utils/locale';\nimport { generateChapterVersesKeys, getVerseNumberFromKey } from '@/utils/verse';\nimport DataContext from 'src/contexts/DataContext';\n\nconst SurahAndAyahSelection = ({\n selectedChapterId,\n selectedVerseNumber,\n onChapterIdChange,\n onVerseNumberChange,\n}) => {\n const { lang } = useTranslation();\n const chaptersData = useContext(DataContext);\n const verses = generateChapterVersesKeys(chaptersData, selectedChapterId);\n const surahOptions = useMemo(\n () =>\n Object.entries(chaptersData).map(([id, chapter]) => ({\n label: chapter.transliteratedName,\n value: id,\n })),\n [chaptersData],\n );\n const ayahOptions = useMemo(\n () =>\n verses.map((verseKey) => {\n const verseNumber = getVerseNumberFromKey(verseKey).toString();\n return {\n label: toLocalizedNumber(Number(verseNumber), lang),\n value: verseNumber,\n };\n }),\n [lang, verses],\n );\n\n return (\n <div className={styles.surahAndAyahSelectionContainer}>\n <Select\n size={SelectSize.Small}\n id=\"surah-selection\"\n name=\"surah-selection\"\n options={surahOptions}\n onChange={onChapterIdChange}\n value={selectedChapterId}\n />\n <div className={styles.selectionItem}>\n <Select\n className={styles.ayahSelection}\n size={SelectSize.Small}\n id=\"ayah-selection\"\n name=\"ayah-selection\"\n options={ayahOptions}\n onChange={onVerseNumberChange}\n value={selectedVerseNumber}\n />\n </div>\n </div>\n );\n};\n\nexport default SurahAndAyahSelection;\n","/* eslint-disable react-func/max-lines-per-function */\n/* eslint-disable max-lines */\n/* eslint-disable i18next/no-literal-string */\nimport React, { useCallback, useContext, useEffect, useState } from 'react';\n\nimport classNames from 'classnames';\nimport useTranslation from 'next-translate/useTranslation';\nimport { useSelector, shallowEqual } from 'react-redux';\nimport useSWR from 'swr/immutable';\n\nimport VerseTextPreview from '../VerseTextPreview';\n\nimport LanguageAndTafsirSelection from './LanguageAndTafsirSelection';\nimport SurahAndAyahSelection from './SurahAndAyahSelection';\nimport TafsirEndOfScrollingActions from './TafsirEndOfScrollingActions';\nimport TafsirGroupMessage from './TafsirGroupMessage';\nimport TafsirMessage from './TafsirMessage';\nimport TafsirSkeleton from './TafsirSkeleton';\nimport TafsirText from './TafsirText';\nimport styles from './TafsirView.module.scss';\n\nimport DataFetcher from '@/components/DataFetcher';\nimport Separator from '@/dls/Separator/Separator';\nimport usePersistPreferenceGroup from '@/hooks/auth/usePersistPreferenceGroup';\nimport { selectQuranReaderStyles } from '@/redux/slices/QuranReader/styles';\nimport { selectTafsirs, setSelectedTafsirs } from '@/redux/slices/QuranReader/tafsirs';\nimport { makeTafsirContentUrl, makeTafsirsUrl } from '@/utils/apiPaths';\nimport {\n logButtonClick,\n logEvent,\n logItemSelectionChange,\n logValueChange,\n} from '@/utils/eventLogger';\nimport { getLanguageDataById } from '@/utils/locale';\nimport { fakeNavigate, getVerseSelectedTafsirNavigationUrl } from '@/utils/navigation';\nimport {\n getFirstTafsirOfLanguage,\n getSelectedTafsirLanguage,\n getTafsirsLanguageOptions,\n} from '@/utils/tafsir';\nimport {\n getVerseNumberFromKey,\n getFirstAndLastVerseKeys,\n makeVerseKey,\n isLastVerseOfSurah,\n getVerseAndChapterNumbersFromKey,\n} from '@/utils/verse';\nimport { fetcher } from 'src/api';\nimport DataContext from 'src/contexts/DataContext';\nimport { TafsirContentResponse, TafsirsResponse } from 'types/ApiResponses';\nimport PreferenceGroup from 'types/auth/PreferenceGroup';\n\ntype TafsirBodyProps = {\n initialChapterId: string;\n initialVerseNumber: string;\n initialTafsirIdOrSlug?: number | string;\n scrollToTop: () => void;\n shouldRender?: boolean;\n render: (renderProps: {\n surahAndAyahSelection: JSX.Element;\n languageAndTafsirSelection: JSX.Element;\n body: JSX.Element;\n }) => JSX.Element;\n};\n\nconst TafsirBody = ({\n initialChapterId,\n initialVerseNumber,\n initialTafsirIdOrSlug,\n render,\n scrollToTop,\n shouldRender,\n}: TafsirBodyProps) => {\n const quranReaderStyles = useSelector(selectQuranReaderStyles, shallowEqual);\n const { lang, t } = useTranslation('common');\n const tafsirsState = useSelector(selectTafsirs);\n const { selectedTafsirs: userPreferredTafsirIds } = tafsirsState;\n const chaptersData = useContext(DataContext);\n const {\n actions: { onSettingsChange },\n isLoading,\n } = usePersistPreferenceGroup();\n\n const [selectedChapterId, setSelectedChapterId] = useState(initialChapterId);\n const [selectedVerseNumber, setSelectedVerseNumber] = useState(initialVerseNumber);\n const [selectedLanguage, setSelectedLanguage] = useState('');\n const selectedVerseKey = makeVerseKey(Number(selectedChapterId), Number(selectedVerseNumber));\n const [selectedTafsirIdOrSlug, setSelectedTafsirIdOrSlug] = useState<number | string>(\n initialTafsirIdOrSlug || userPreferredTafsirIds?.[0],\n );\n\n // if user opened tafsirBody via a url, we will have initialTafsirIdOrSlug\n // we need to set this `initialTafsirIdOrSlug` as a selectedTafsirIdOrSlug\n // we did not use `useState(initialTafsirIdOrSlug)` because `useRouter`'s query string is undefined on first render\n useEffect(() => {\n if (initialTafsirIdOrSlug) {\n logEvent('tafsir_url_access');\n setSelectedTafsirIdOrSlug(initialTafsirIdOrSlug);\n }\n }, [initialTafsirIdOrSlug]);\n\n const onTafsirSelected = useCallback(\n (id: number, slug: string) => {\n logItemSelectionChange('tafsir', id);\n setSelectedTafsirIdOrSlug(slug);\n fakeNavigate(\n getVerseSelectedTafsirNavigationUrl(\n Number(selectedChapterId),\n Number(selectedVerseNumber),\n slug,\n ),\n lang,\n );\n onSettingsChange(\n 'selectedTafsirs',\n [slug],\n setSelectedTafsirs({\n tafsirs: [slug],\n locale: lang,\n }),\n setSelectedTafsirs({\n tafsirs: tafsirsState.selectedTafsirs,\n locale: lang,\n }),\n PreferenceGroup.TAFSIRS,\n );\n },\n [lang, onSettingsChange, selectedChapterId, selectedVerseNumber, tafsirsState],\n );\n\n const { data: tafsirSelectionList } = useSWR<TafsirsResponse>(\n shouldRender ? makeTafsirsUrl(lang) : null,\n fetcher,\n );\n\n // selectedLanguage is based on selectedTafsir's language\n // but we need to fetch the data from the API first to know what is the language of `selectedTafsirIdOrSlug`\n // so we get the data from the API and set the selectedLanguage once it is loaded\n useEffect(() => {\n if (tafsirSelectionList) {\n setSelectedLanguage((prevSelectedLanguage) => {\n // if we haven't set the language already, we need to detect which language the current tafsir is in.\n return (\n prevSelectedLanguage ||\n getSelectedTafsirLanguage(tafsirSelectionList, selectedTafsirIdOrSlug)\n );\n });\n }\n }, [onTafsirSelected, selectedTafsirIdOrSlug, tafsirSelectionList]);\n\n // there's no 1:1 data that can map our locale options to the tafsir language options\n // so we're using options that's available from tafsir for now\n // TODO: update language options, to use the same options as our LanguageSelector\n const languageOptions = tafsirSelectionList\n ? getTafsirsLanguageOptions(tafsirSelectionList.tafsirs)\n : [];\n\n /**\n * Handle when the language of the Tafsir is changed. When it does,\n * we auto-select the first Tafsir of the new language based on the\n * response from BE.\n *\n * @param {string} newLang\n */\n const onLanguageSelected = (newLang: string) => {\n logValueChange('tafsir_locale', selectedLanguage, newLang);\n setSelectedLanguage(newLang);\n\n if (tafsirSelectionList) {\n const firstTafsirOfLanguage = getFirstTafsirOfLanguage(tafsirSelectionList, newLang);\n if (firstTafsirOfLanguage) {\n const { id, slug } = firstTafsirOfLanguage;\n onTafsirSelected(id, slug);\n }\n }\n };\n\n const renderTafsir = useCallback(\n (data: TafsirContentResponse) => {\n if (!data || !data.tafsir) return <TafsirSkeleton />;\n\n const { verses, text, languageId } = data.tafsir;\n const langData = getLanguageDataById(languageId);\n\n const [firstVerseKey, lastVerseKey] = getFirstAndLastVerseKeys(verses);\n const [chapterNumber, verseNumber] = getVerseAndChapterNumbersFromKey(lastVerseKey);\n const hasNextVerseGroup = !isLastVerseOfSurah(\n chaptersData,\n chapterNumber,\n Number(verseNumber),\n );\n const hasPrevVerseGroup = getVerseNumberFromKey(firstVerseKey) !== 1;\n\n const loadNextVerseGroup = () => {\n logButtonClick('tafsir_next_verse');\n scrollToTop();\n const newVerseNumber = String(Number(getVerseNumberFromKey(lastVerseKey)) + 1);\n fakeNavigate(\n getVerseSelectedTafsirNavigationUrl(\n Number(selectedChapterId),\n Number(newVerseNumber),\n selectedTafsirIdOrSlug,\n ),\n lang,\n );\n setSelectedVerseNumber(newVerseNumber);\n };\n\n const loadPrevVerseGroup = () => {\n const newVerseNumber = String(Number(getVerseNumberFromKey(firstVerseKey)) - 1);\n logButtonClick('tafsir_prev_verse');\n scrollToTop();\n fakeNavigate(\n getVerseSelectedTafsirNavigationUrl(\n Number(selectedChapterId),\n Number(newVerseNumber),\n selectedTafsirIdOrSlug,\n ),\n lang,\n );\n setSelectedVerseNumber(newVerseNumber);\n };\n\n return (\n <div>\n {!text && (\n <TafsirMessage>\n {t('tafsir.no-text', {\n tafsirName: data.tafsir.translatedName.name,\n })}\n </TafsirMessage>\n )}\n {Object.values(verses).length > 1 && !!text && (\n <TafsirGroupMessage from={firstVerseKey} to={lastVerseKey} />\n )}\n <div className={styles.verseTextContainer}>\n <VerseTextPreview verses={Object.values(verses)} />\n </div>\n <div className={styles.separatorContainer}>\n <Separator />\n </div>\n {!!text && (\n <TafsirText direction={langData.direction} languageCode={langData.code} text={text} />\n )}\n <TafsirEndOfScrollingActions\n hasNextVerseGroup={hasNextVerseGroup}\n hasPrevVerseGroup={hasPrevVerseGroup}\n onNextButtonClicked={loadNextVerseGroup}\n onPreviousButtonClicked={loadPrevVerseGroup}\n />\n </div>\n );\n },\n [chaptersData, lang, scrollToTop, selectedChapterId, selectedTafsirIdOrSlug, t],\n );\n\n const onChapterIdChange = (newChapterId) => {\n logItemSelectionChange('tafsir_chapter_id', newChapterId);\n fakeNavigate(\n getVerseSelectedTafsirNavigationUrl(Number(newChapterId), Number(1), selectedTafsirIdOrSlug),\n lang,\n );\n setSelectedChapterId(newChapterId.toString());\n setSelectedVerseNumber('1'); // reset verse number to 1 every time chapter changes\n };\n\n const onVerseNumberChange = (newVerseNumber) => {\n logItemSelectionChange('tafsir_verse_number', newVerseNumber);\n setSelectedVerseNumber(newVerseNumber);\n fakeNavigate(\n getVerseSelectedTafsirNavigationUrl(\n Number(selectedChapterId),\n Number(newVerseNumber),\n selectedTafsirIdOrSlug,\n ),\n lang,\n );\n };\n\n const surahAndAyahSelection = (\n <SurahAndAyahSelection\n selectedChapterId={selectedChapterId}\n selectedVerseNumber={selectedVerseNumber}\n onChapterIdChange={onChapterIdChange}\n onVerseNumberChange={onVerseNumberChange}\n />\n );\n\n const languageAndTafsirSelection = (\n <LanguageAndTafsirSelection\n selectedTafsirIdOrSlug={selectedTafsirIdOrSlug}\n selectedLanguage={selectedLanguage}\n onTafsirSelected={onTafsirSelected}\n onSelectLanguage={onLanguageSelected}\n languageOptions={languageOptions}\n data={tafsirSelectionList}\n isLoading={isLoading}\n />\n );\n\n const body = (\n <div\n className={classNames(\n styles.tafsirContainer,\n styles[`tafsir-font-size-${quranReaderStyles.tafsirFontScale}`],\n )}\n // disable browser translation for tafsir content\n // @see {https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/translate}\n translate=\"no\"\n >\n <DataFetcher\n loading={TafsirSkeleton}\n queryKey={makeTafsirContentUrl(selectedTafsirIdOrSlug, selectedVerseKey, {\n lang,\n quranFont: quranReaderStyles.quranFont,\n mushafLines: quranReaderStyles.mushafLines,\n })}\n render={renderTafsir}\n />\n </div>\n );\n\n return render({ surahAndAyahSelection, languageAndTafsirSelection, body });\n};\n\nexport default TafsirBody;\n","import useTranslation from 'next-translate/useTranslation';\n\nimport styles from './TafsirEndOfScrollingActions.module.scss';\n\nimport Button, { ButtonType } from '@/dls/Button/Button';\n\ntype TafsirEndOfScrollingActionsProps = {\n hasNextVerseGroup: boolean;\n hasPrevVerseGroup: boolean;\n onNextButtonClicked: () => void;\n onPreviousButtonClicked: () => void;\n};\n\nconst TafsirEndOfScrollingActions = ({\n hasNextVerseGroup,\n hasPrevVerseGroup,\n onNextButtonClicked,\n onPreviousButtonClicked,\n}: TafsirEndOfScrollingActionsProps) => {\n const { t } = useTranslation('common');\n return (\n <div className={styles.container}>\n <div>\n {hasPrevVerseGroup && (\n <Button type={ButtonType.Secondary} onClick={onPreviousButtonClicked}>\n {t('previous-ayah')}\n </Button>\n )}\n </div>\n <div>\n {hasNextVerseGroup && (\n <Button type={ButtonType.Secondary} onClick={onNextButtonClicked}>\n {t('next-ayah')}\n </Button>\n )}\n </div>\n </div>\n );\n};\n\nexport default TafsirEndOfScrollingActions;\n","import useTranslation from 'next-translate/useTranslation';\n\nimport TafsirMessage from './TafsirMessage';\n\ntype TafsirGroupMessageProps = {\n from: string;\n to: string;\n};\n\nconst TafsirGroupMessage = ({ from, to }: TafsirGroupMessageProps) => {\n const { t } = useTranslation('common');\n return (\n <TafsirMessage>\n {t('tafsir.group-message', {\n from,\n to,\n })}\n </TafsirMessage>\n );\n};\n\nexport default TafsirGroupMessage;\n","import React from 'react';\n\nimport styles from './TafsirMessage.module.scss';\n\ntype Props = {\n children: React.ReactNode;\n};\n\nconst TafsirMessage: React.FC<Props> = ({ children }) => {\n return <div className={styles.tafsirMessage}>{children}</div>;\n};\n\nexport default TafsirMessage;\n","import classNames from 'classnames';\nimport range from 'lodash/range';\n\nimport styles from './TafsirView.module.scss';\n\nimport Skeleton from '@/dls/Skeleton/Skeleton';\n\nconst TafsirSkeleton = () => {\n return (\n <>\n <Skeleton className={(styles.tafsirSkeletonItem, styles.ayahSekletonItem)} />\n {range(1, 15).map((i) => (\n <Skeleton\n key={i}\n className={classNames(styles.tafsirSkeletonItem, {\n [styles.tafsirSkeletonItem1]: i % 1 === 0,\n [styles.tafsirSkeletonItem2]: i % 2 === 0,\n [styles.tafsirSkeletonItem3]: i % 3 === 0,\n })}\n />\n ))}\n </>\n );\n};\n\nexport default TafsirSkeleton;\n","/* eslint-disable react/no-danger */\nimport React from 'react';\n\nimport { Action } from '@reduxjs/toolkit';\nimport { useSelector } from 'react-redux';\n\nimport styles from './TafsirText.module.scss';\n\nimport Counter from '@/dls/Counter/Counter';\nimport SpinnerContainer from '@/dls/Spinner/SpinnerContainer';\nimport usePersistPreferenceGroup from '@/hooks/auth/usePersistPreferenceGroup';\nimport {\n MAXIMUM_TAFSIR_FONT_STEP,\n MINIMUM_FONT_STEP,\n selectQuranReaderStyles,\n increaseTafsirFontScale,\n decreaseTafsirFontScale,\n} from '@/redux/slices/QuranReader/styles';\nimport { logValueChange } from '@/utils/eventLogger';\nimport PreferenceGroup from 'types/auth/PreferenceGroup';\n\ntype TafsirTextProps = {\n direction: string;\n languageCode: string;\n text: string;\n};\n\nconst FONT_SIZE_CLASS_MAP = {\n 1: styles.xs,\n 2: styles.sm,\n 3: styles.md,\n 4: styles.lg,\n 5: styles.xl,\n};\n\nconst TafsirText: React.FC<TafsirTextProps> = ({ direction, languageCode, text }) => {\n const quranReaderStyles = useSelector(selectQuranReaderStyles);\n const {\n actions: { onSettingsChange },\n isLoading,\n } = usePersistPreferenceGroup();\n const { tafsirFontScale } = quranReaderStyles;\n\n /**\n * Persist settings in the DB if the user is logged in before dispatching\n * Redux action, otherwise just dispatch it.\n *\n * @param {string} key\n * @param {number} value\n * @param {Action} action\n */\n const onTafsirsSettingsChange = (\n key: string,\n value: number,\n action: Action,\n undoAction: Action,\n ) => {\n onSettingsChange(key, value, action, undoAction, PreferenceGroup.QURAN_READER_STYLES);\n };\n\n const onFontScaleDecreaseClicked = () => {\n const newValue = tafsirFontScale - 1;\n logValueChange('tafsir_font_scale', tafsirFontScale, newValue);\n onTafsirsSettingsChange(\n 'tafsirFontScale',\n newValue,\n decreaseTafsirFontScale(),\n increaseTafsirFontScale(),\n );\n };\n\n const onFontScaleIncreaseClicked = () => {\n const newValue = tafsirFontScale + 1;\n logValueChange('tafsir_font_scale', tafsirFontScale, newValue);\n onTafsirsSettingsChange(\n 'tafsirFontScale',\n newValue,\n increaseTafsirFontScale(),\n decreaseTafsirFontScale(),\n );\n };\n return (\n <>\n <div dir={direction} className={styles.counter}>\n <SpinnerContainer isLoading={isLoading}>\n <Counter\n count={tafsirFontScale}\n onDecrement={tafsirFontScale === MINIMUM_FONT_STEP ? null : onFontScaleDecreaseClicked}\n onIncrement={\n tafsirFontScale === MAXIMUM_TAFSIR_FONT_STEP ? null : onFontScaleIncreaseClicked\n }\n />\n </SpinnerContainer>\n </div>\n <div\n className={FONT_SIZE_CLASS_MAP[tafsirFontScale]}\n dir={direction}\n lang={languageCode}\n dangerouslySetInnerHTML={{ __html: text }}\n />\n </>\n );\n};\nexport default TafsirText;\n","import { useMemo } from 'react';\n\nimport useTranslation from 'next-translate/useTranslation';\n\nimport styles from './Counter.module.scss';\n\nimport Button, { ButtonShape, ButtonVariant } from '@/dls/Button/Button';\nimport MinusIcon from '@/icons/minus.svg';\nimport PlusIcon from '@/icons/plus.svg';\nimport { toLocalizedNumber } from '@/utils/locale';\n\ntype CounterProps = {\n count: number | string;\n onIncrement?: () => void;\n onDecrement?: () => void;\n};\n\n/**\n *\n * @param {CounterProps} props - the props of the this component\n * @param {number} props.count - the current count\n * @param {() => void} props.onIncrement - the function to call when the increment button is clicked.\n * Button is disabled when the value is `undefined` or `null`\n * @param {() => void} props.onDecrement - the function to call when the decrement button is clicked.\n * Button is disabled when the value is `undefined` or `null`\n * @returns {JSX.Element}\n */\nconst Counter = ({ count, onIncrement, onDecrement }: CounterProps): JSX.Element => {\n const { t, lang } = useTranslation('common');\n const localizedCount = useMemo(() => toLocalizedNumber(Number(count), lang), [count, lang]);\n return (\n <div className={styles.container}>\n <Button\n tooltip={t('counter.decrease')}\n shape={ButtonShape.Circle}\n variant={ButtonVariant.Ghost}\n isDisabled={!onDecrement}\n onClick={onDecrement}\n ariaLabel={t('counter.decrease')}\n >\n <MinusIcon />\n </Button>\n <span className={styles.count}>{localizedCount}</span>\n <Button\n tooltip={t('counter.increase')}\n variant={ButtonVariant.Ghost}\n shape={ButtonShape.Circle}\n isDisabled={!onIncrement}\n onClick={onIncrement}\n ariaLabel={t('counter.increase')}\n >\n <PlusIcon />\n </Button>\n </div>\n );\n};\n\nexport default Counter;\n","import React, { ChangeEvent, useCallback } from 'react';\n\nimport classNames from 'classnames';\n\nimport styles from './Select.module.scss';\n\nimport CaretIcon from '@/icons/caret-down.svg';\n\nexport interface SelectOption {\n label: string;\n value: string | number;\n disabled?: boolean;\n}\n\nexport enum SelectSize {\n Small = 'small',\n Medium = 'medium',\n Large = 'large',\n}\n\ninterface Props {\n id: string;\n name: string;\n options: SelectOption[];\n disabled?: boolean;\n required?: boolean;\n size?: SelectSize;\n value?: string;\n placeholder?: string;\n onChange?: (value: string | number) => void;\n defaultStyle?: boolean;\n className?: string;\n withBackground?: boolean;\n}\n\nconst Select: React.FC<Props> = ({\n name,\n id,\n onChange,\n options,\n value,\n disabled = false,\n required = false,\n size = SelectSize.Medium,\n placeholder = 'Select an option',\n defaultStyle = true,\n className,\n withBackground = true,\n}) => {\n const onSelectChange = useCallback(\n (e: ChangeEvent<HTMLSelectElement>) => {\n if (onChange) {\n onChange(e.target.value);\n }\n },\n [onChange],\n );\n\n return (\n <div\n className={classNames(styles.container, {\n [styles.defaultStyledContainer]: defaultStyle,\n [className]: className,\n [styles.disabledContainer]: disabled,\n [styles.smallContainer]: size === SelectSize.Small,\n [styles.mediumContainer]: size === SelectSize.Medium,\n [styles.largeContainer]: size === SelectSize.Large,\n [styles.withBackground]: withBackground,\n })}\n >\n <select\n className={classNames(styles.select, {\n [styles.defaultStyledSelect]: defaultStyle,\n [styles.disabledSelect]: disabled,\n })}\n name={name}\n id={id}\n onChange={onSelectChange}\n disabled={disabled}\n required={required}\n {...(value ? { value } : { defaultValue: '' })}\n >\n <option value=\"\" disabled hidden>\n {placeholder}\n </option>\n {options.map((option) => (\n <option key={option.value} value={option.value} disabled={option.disabled || false}>\n {option.label}\n </option>\n ))}\n </select>\n <div className={classNames(styles.arrow, { [styles.disabledArrow]: disabled })}>\n <CaretIcon />\n </div>\n </div>\n );\n};\n\nexport default Select;\n","import * as SeparatorPrimitive from '@radix-ui/react-separator';\nimport classNames from 'classnames';\n\nimport styles from './Separator.module.scss';\n\nexport enum SeparatorWeight {\n Bold = 'bold',\n SemiBold = 'semiBold',\n}\n\ntype SeparatorProps = {\n isVertical?: boolean;\n className?: string;\n weight?: SeparatorWeight;\n};\n\nconst Separator = ({\n isVertical = false,\n className,\n weight = SeparatorWeight.SemiBold,\n}: SeparatorProps) => (\n <SeparatorPrimitive.Separator\n orientation={isVertical ? 'vertical' : 'horizontal'}\n className={classNames(styles.base, styles[weight], {\n [className]: className,\n })}\n />\n);\n\nexport default Separator;\n","import classNames from 'classnames';\n\nimport styles from './Skeleton.module.scss';\n\ntype SkeletonProps = {\n children?: React.ReactNode;\n isRounded?: boolean;\n isSquared?: boolean;\n isActive?: boolean;\n className?: string;\n};\n\nconst Skeleton = ({\n children,\n isRounded,\n isSquared,\n isActive = true,\n className,\n}: SkeletonProps) => {\n return (\n <span\n className={classNames(styles.skeleton, {\n [styles.baseSize]: !children && !className,\n [styles.active]: isActive,\n [styles.rounded]: isRounded,\n [styles.squared]: isSquared,\n [className]: className,\n })}\n >\n {children && <span className={styles.content}>{children}</span>}\n </span>\n );\n};\n\nexport default Skeleton;\n","import React from 'react';\n\nimport styles from './SpinnerContainer.module.scss';\n\nimport Spinner from '@/dls/Spinner/Spinner';\n\ntype Props = {\n children: React.ReactNode;\n isLoading: boolean;\n};\n\nconst SpinnerContainer: React.FC<Props> = ({ children, isLoading }) => {\n return (\n <div className={styles.internalContainer}>\n {children}\n {isLoading && <Spinner className={styles.spinner} />}\n </div>\n );\n};\n\nexport default SpinnerContainer;\n","import { createContext } from 'react';\n\nimport ChaptersData from 'types/ChaptersData';\n\nconst DataContext = createContext<ChaptersData>({});\n\nexport default DataContext;\n","/* eslint-disable max-lines */\n/* eslint-disable react-func/max-lines-per-function */\nimport { useCallback, useMemo, useState } from 'react';\n\nimport { Action, AsyncThunkAction } from '@reduxjs/toolkit';\nimport useTranslation from 'next-translate/useTranslation';\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\n\nimport { ToastStatus, useToast } from '@/dls/Toast/Toast';\nimport { selectQuranFont, selectQuranMushafLines } from '@/redux/slices/QuranReader/styles';\nimport { getMushafId } from '@/utils/api';\nimport { addOrUpdateUserPreference } from '@/utils/auth/api';\nimport { isLoggedIn } from '@/utils/auth/login';\nimport PreferenceGroup from 'types/auth/PreferenceGroup';\n\ntype ActionOrThunkAction = Action | AsyncThunkAction<any, any, any>;\ntype Value = string | number | boolean | Record<string, any>;\n\ntype Actions = {\n onSettingsChangeWithoutDispatch: (\n key: string,\n value: Value,\n preferenceGroup: PreferenceGroup,\n callback: () => void,\n ) => void;\n onSettingsChange: (\n key: string,\n value: Value,\n action: ActionOrThunkAction,\n undoAction: ActionOrThunkAction,\n preferenceGroup: PreferenceGroup,\n successCallback?: () => void,\n ) => void;\n onXstateSettingsChange: (\n key: string,\n value: string | number | boolean | Record<string, any>,\n action: () => void,\n undoAction: () => void,\n preferenceGroup: PreferenceGroup,\n successCallback?: () => void,\n ) => void;\n};\n\ntype PersistPreferences = { actions: Actions; isLoading: boolean };\n\n/**\n * A hook that will be used to:\n * 1. If the user is logged in, we persist settings\n * to the DB then dispatch the redux action that\n * would apply the changes locally (and might also persist\n * it locally in the localStorage depending on the slice)\n * 2. If not, just dispatch the action.\n *\n * @returns {PersistPreferences}\n */\nconst usePersistPreferenceGroup = (): PersistPreferences => {\n const dispatch = useDispatch();\n const toast = useToast();\n const { t } = useTranslation('common');\n const [isLoading, setIsLoading] = useState(false);\n\n const quranFont = useSelector(selectQuranFont, shallowEqual);\n const mushafLines = useSelector(selectQuranMushafLines, shallowEqual);\n\n // this function is used to get the updated mushafId and pass it to addOrUpdateUserPreference\n // if the preferenceGroup is not QURAN_READER_STYLES, it will return undefined\n const getUpdatedMushafId = useCallback(\n (\n preferenceGroup: PreferenceGroup,\n key: string,\n value: string | number | boolean | Record<string, any>,\n ) => {\n if (preferenceGroup !== PreferenceGroup.QURAN_READER_STYLES) return undefined;\n\n const font = key === 'quranFont' ? value : quranFont;\n const lines = key === 'mushafLines' ? value : mushafLines;\n\n return getMushafId(font, lines).mushaf;\n },\n [quranFont, mushafLines],\n );\n\n const actions = useMemo(\n () => ({\n onSettingsChangeWithoutDispatch: (\n key: string,\n value: string | number | boolean | Record<string, any>,\n preferenceGroup: PreferenceGroup,\n callback: () => void,\n ) => {\n if (isLoggedIn()) {\n setIsLoading(true);\n addOrUpdateUserPreference(\n key,\n value,\n preferenceGroup,\n getUpdatedMushafId(preferenceGroup, key, value),\n )\n .then(() => {\n callback();\n })\n .finally(() => {\n setIsLoading(false);\n });\n } else {\n callback();\n }\n },\n onXstateSettingsChange: (\n key: string,\n value: string | number | boolean | Record<string, any>,\n action: () => void,\n undoAction: () => void,\n preferenceGroup: PreferenceGroup,\n successCallback?: () => void,\n ) => {\n if (isLoggedIn()) {\n action();\n setIsLoading(true);\n addOrUpdateUserPreference(\n key,\n value,\n preferenceGroup,\n getUpdatedMushafId(preferenceGroup, key, value),\n )\n .then(() => {\n if (successCallback) {\n successCallback();\n }\n })\n .catch(() => {\n toast(t('error.pref-persist-fail'), {\n status: ToastStatus.Warning,\n actions: [\n {\n text: t('undo'),\n primary: true,\n onClick: () => {\n undoAction();\n },\n },\n {\n text: t('continue'),\n primary: false,\n onClick: () => {\n if (successCallback) {\n successCallback();\n }\n },\n },\n ],\n });\n })\n .finally(() => {\n setIsLoading(false);\n });\n } else {\n action();\n }\n },\n onSettingsChange: (\n key: string,\n value: string | number | boolean | Record<string, any>,\n action: ActionOrThunkAction,\n undoAction: ActionOrThunkAction,\n preferenceGroup: PreferenceGroup,\n successCallback?: () => void,\n ) => {\n if (isLoggedIn()) {\n // 1. dispatch the action first\n dispatch(action);\n setIsLoading(true);\n addOrUpdateUserPreference(\n key,\n value,\n preferenceGroup,\n getUpdatedMushafId(preferenceGroup, key, value),\n )\n .then(() => {\n if (successCallback) {\n successCallback();\n }\n })\n .catch(() => {\n toast(t('error.pref-persist-fail'), {\n status: ToastStatus.Warning,\n actions: [\n {\n text: t('undo'),\n primary: true,\n onClick: () => {\n dispatch(undoAction);\n },\n },\n {\n text: t('continue'),\n primary: false,\n onClick: () => {\n if (successCallback) {\n successCallback();\n }\n },\n },\n ],\n });\n })\n .finally(() => {\n setIsLoading(false);\n });\n } else {\n dispatch(action);\n }\n },\n }),\n [dispatch, t, toast, getUpdatedMushafId],\n );\n\n return { actions, isLoading };\n};\n\nexport default usePersistPreferenceGroup;\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit';\n\nimport resetSettings from '@/redux/actions/reset-settings';\nimport syncUserPreferences from '@/redux/actions/sync-user-preferences';\nimport { getTafsirsInitialState } from '@/redux/defaultSettings/util';\nimport { RootState } from '@/redux/RootState';\nimport SliceName from '@/redux/types/SliceName';\nimport TafsirsSettings from '@/redux/types/TafsirsSettings';\nimport { areArraysEqual } from '@/utils/array';\nimport PreferenceGroup from 'types/auth/PreferenceGroup';\n\nexport const tafsirsSlice = createSlice({\n name: SliceName.TAFSIRS,\n initialState: getTafsirsInitialState(),\n reducers: {\n setSelectedTafsirs: (state, action: PayloadAction<{ tafsirs: string[]; locale: string }>) => ({\n ...state,\n // we need to before we compare because there is a corner case when the user changes the default tafsirs then re-selects them which results in the same array as the default one but reversed e.g. instead of [20, 131] it becomes [131, 20].\n isUsingDefaultTafsirs: areArraysEqual(\n getTafsirsInitialState(action.payload.locale).selectedTafsirs,\n action.payload.tafsirs,\n ), // check if the user is using the default tafsirs on each tafsir change.\n selectedTafsirs: action.payload.tafsirs,\n }),\n },\n // reset the tafsirs to initial state\n // when reset action is dispatched\n extraReducers: (builder) => {\n builder.addCase(resetSettings, (state, action) => {\n return getTafsirsInitialState(action.payload.locale);\n });\n builder.addCase(syncUserPreferences, (state, action) => {\n const {\n payload: { userPreferences, locale },\n } = action;\n const remotePreferences = userPreferences[PreferenceGroup.TAFSIRS] as TafsirsSettings;\n if (remotePreferences) {\n const { selectedTafsirs: defaultTafsirs } = getTafsirsInitialState(locale);\n const { selectedTafsirs: remoteTafsirs } = remotePreferences;\n return {\n ...state,\n ...remotePreferences,\n isUsingDefaultTafsirs: areArraysEqual(defaultTafsirs, remoteTafsirs),\n };\n }\n return state;\n });\n },\n});\n\nexport const { setSelectedTafsirs } = tafsirsSlice.actions;\n\nexport const selectTafsirs = (state: RootState) => state.tafsirs;\nexport const selectSelectedTafsirs = (state: RootState) => state.tafsirs.selectedTafsirs;\nexport const selectIsUsingDefaultTafsirs = (state: RootState) =>\n state.tafsirs.isUsingDefaultTafsirs;\n\nexport default tafsirsSlice.reducer;\n","export const REVALIDATION_PERIOD_ON_ERROR_SECONDS = 604800; // 7 days. TODO: @osama update the naming + value when we revert this back\nexport const ONE_DAY_REVALIDATION_PERIOD_SECONDS = 86400; // 1 day\nexport const ONE_WEEK_REVALIDATION_PERIOD_SECONDS = 604800; // 7 days\nexport const ONE_MONTH_REVALIDATION_PERIOD_SECONDS = 2592000; // 30 days\n","import uniq from 'lodash/uniq';\n\nimport TafsirInfo from '@/types/TafsirInfo';\nimport { TafsirsResponse } from 'types/ApiResponses';\nimport Tafsir from 'types/Tafsir';\n\n/**\n * Get the language of the selected Tafsir.\n *\n * @param {TafsirsResponse} tafsirListData\n * @param {number|string} selectedTafsirIdOrSlug\n * @returns {string}\n */\nexport const getSelectedTafsirLanguage = (\n tafsirListData: TafsirsResponse,\n selectedTafsirIdOrSlug: number | string,\n): string => {\n const selectedTafsir = tafsirListData?.tafsirs.find(\n (tafsir) =>\n tafsir.slug === selectedTafsirIdOrSlug || tafsir.id === Number(selectedTafsirIdOrSlug),\n );\n return selectedTafsir?.languageName;\n};\n\n/**\n * Get the first Tafsir of a language.\n *\n * @param {TafsirsResponse} tafsirListData\n * @param {string} language\n * @returns {TafsirInfo}\n */\nexport const getFirstTafsirOfLanguage = (\n tafsirListData: TafsirsResponse,\n language: string,\n): TafsirInfo => {\n const selectedTafsir = tafsirListData?.tafsirs.find((tafsir) => tafsir.languageName === language);\n return selectedTafsir;\n};\n\n/**\n * Given list of tafsirs, get all available language options\n *\n * @param {Tafsir[]} tafsirs\n * @returns {string[]} list of available language options\n */\nexport const getTafsirsLanguageOptions = (tafsirs: Tafsir[]): string[] =>\n uniq(tafsirs.map((tafsir) => tafsir.languageName));\n"],"names":["classNames","styles","Button","ButtonSize","Select","SelectSize","Skeleton","SpinnerContainer","getLocaleNameByFullName","LanguageAndTafsirSelection","selectedTafsirIdOrSlug","onTafsirSelected","selectedLanguage","onSelectLanguage","languageOptions","data","isLoading","className","tafsirSkeletonItem","tafsirSelectionSkeleton","div","tafsirSelectionContainer","languageSelection","size","Small","id","name","options","map","lng","label","value","onChange","tafsirs","filter","tafsir","languageName","slug","Number","selected","onClick","tafsirSelectionItem","tafsirItemSelected","translatedName","useContext","useMemo","useTranslation","toLocalizedNumber","generateChapterVersesKeys","getVerseNumberFromKey","DataContext","SurahAndAyahSelection","selectedChapterId","selectedVerseNumber","onChapterIdChange","onVerseNumberChange","lang","chaptersData","verses","surahOptions","Object","entries","chapter","transliteratedName","ayahOptions","verseKey","verseNumber","toString","surahAndAyahSelectionContainer","selectionItem","ayahSelection","React","useCallback","useEffect","useState","useSelector","shallowEqual","useSWR","VerseTextPreview","TafsirEndOfScrollingActions","TafsirGroupMessage","TafsirMessage","TafsirSkeleton","TafsirText","DataFetcher","Separator","usePersistPreferenceGroup","selectQuranReaderStyles","selectTafsirs","setSelectedTafsirs","makeTafsirContentUrl","makeTafsirsUrl","logButtonClick","logEvent","logItemSelectionChange","logValueChange","getLanguageDataById","fakeNavigate","getVerseSelectedTafsirNavigationUrl","getFirstTafsirOfLanguage","getSelectedTafsirLanguage","getTafsirsLanguageOptions","getFirstAndLastVerseKeys","makeVerseKey","isLastVerseOfSurah","getVerseAndChapterNumbersFromKey","fetcher","PreferenceGroup","TafsirBody","initialChapterId","initialVerseNumber","initialTafsirIdOrSlug","render","scrollToTop","shouldRender","quranReaderStyles","t","tafsirsState","selectedTafsirs","userPreferredTafsirIds","actions","onSettingsChange","setSelectedChapterId","setSelectedVerseNumber","setSelectedLanguage","selectedVerseKey","setSelectedTafsirIdOrSlug","locale","TAFSIRS","tafsirSelectionList","prevSelectedLanguage","onLanguageSelected","newLang","firstTafsirOfLanguage","renderTafsir","text","languageId","langData","firstVerseKey","lastVerseKey","chapterNumber","hasNextVerseGroup","hasPrevVerseGroup","loadNextVerseGroup","newVerseNumber","String","loadPrevVerseGroup","tafsirName","values","length","from","to","verseTextContainer","separatorContainer","direction","languageCode","code","onNextButtonClicked","onPreviousButtonClicked","newChapterId","surahAndAyahSelection","languageAndTafsirSelection","body","tafsirContainer","tafsirFontScale","translate","loading","queryKey","quranFont","mushafLines","ButtonType","container","type","Secondary","children","tafsirMessage","range","ayahSekletonItem","i","tafsirSkeletonItem1","tafsirSkeletonItem2","tafsirSkeletonItem3","Counter","MAXIMUM_TAFSIR_FONT_STEP","MINIMUM_FONT_STEP","increaseTafsirFontScale","decreaseTafsirFontScale","FONT_SIZE_CLASS_MAP","xs","sm","md","lg","xl","onTafsirsSettingsChange","key","action","undoAction","QURAN_READER_STYLES","onFontScaleDecreaseClicked","newValue","onFontScaleIncreaseClicked","dir","counter","count","onDecrement","onIncrement","dangerouslySetInnerHTML","__html","ButtonShape","ButtonVariant","MinusIcon","PlusIcon","localizedCount","tooltip","shape","Circle","variant","Ghost","isDisabled","ariaLabel","span","CaretIcon","Medium","Large","disabled","required","placeholder","defaultStyle","withBackground","onSelectChange","e","target","defaultStyledContainer","disabledContainer","smallContainer","mediumContainer","largeContainer","select","defaultStyledSelect","disabledSelect","defaultValue","option","hidden","arrow","disabledArrow","SeparatorPrimitive","SeparatorWeight","Bold","SemiBold","isVertical","weight","orientation","base","isRounded","isSquared","isActive","skeleton","baseSize","active","rounded","squared","content","Spinner","internalContainer","spinner","createContext","useDispatch","ToastStatus","useToast","selectQuranFont","selectQuranMushafLines","getMushafId","addOrUpdateUserPreference","isLoggedIn","dispatch","toast","setIsLoading","getUpdatedMushafId","preferenceGroup","undefined","font","lines","mushaf","onSettingsChangeWithoutDispatch","callback","then","finally","onXstateSettingsChange","successCallback","catch","status","Warning","primary","createSlice","resetSettings","syncUserPreferences","getTafsirsInitialState","SliceName","areArraysEqual","tafsirsSlice","initialState","reducers","state","isUsingDefaultTafsirs","payload","extraReducers","builder","addCase","userPreferences","remotePreferences","defaultTafsirs","remoteTafsirs","selectSelectedTafsirs","selectIsUsingDefaultTafsirs","reducer","REVALIDATION_PERIOD_ON_ERROR_SECONDS","ONE_DAY_REVALIDATION_PERIOD_SECONDS","ONE_WEEK_REVALIDATION_PERIOD_SECONDS","ONE_MONTH_REVALIDATION_PERIOD_SECONDS","uniq","tafsirListData","selectedTafsir","find","language"],"sourceRoot":""}
|