{"version":3,"file":"js/709-821efff6ace1c7867e39.js","mappings":"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AEbC,kBAAmB,CACjB,CACErvB,MAAO,iBACPxP,MAAO,cAET,CACEwP,MAAO,SACPxP,MAAO,yBAET,CACEwP,MAAO,SACPxP,MAAO,qBAET,CACEwP,MAAO,UACPxP,MAAO,sBAET,CACEwP,MAAO,aACPxP,MAAO,yBAET,CACEwP,MAAO,QACPxP,MAAO,oBAET,CACEwP,MAAO,SACPxP,MAAO,sBAET,CACEwP,MAAO,qBACPxP,MAAO,kCAET,CACEwP,MAAO,UACPxP,MAAO,oBAET,CACEwP,MAAO,mBACPxP,MAAO,2BAGX8+B,qBAAsB,CACpB,CACEtvB,MAAO,oBACPxP,MAAO,iBAET,CACEwP,MAAO,SACPxP,MAAO,+BAET,CACEwP,MAAO,SACPxP,MAAO,wBAET,CACEwP,MAAO,UACPxP,MAAO,yBAET,CACEwP,MAAO,iBACPxP,MAAO,iCAGX++B,gBAAiB,CACf,CACEvvB,MAAO,mBACPxP,MAAO,iBAET,CACEwP,MAAO,SACPxP,MAAO,+BAET,CACEwP,MAAO,SACPxP,MAAO,yBAGXg/B,iBAAkB,CAChB,CACExvB,MAAO,gBACPxP,MAAO,wBAGXi/B,sBAAuB,CACrB,CACEzvB,MAAO,oBACPxP,MAAO,kBAET,CACEwP,MAAO,oCACPxP,MAAO,kDAET,CACEwP,MAAO,iBACPxP,MAAO,iCAET,CACEwP,MAAO,SACPxP,MAAO,yBAET,CACEwP,MAAO,WACPxP,MAAO,2BAET,CACEwP,MAAO,kCACPxP,MAAO,kDAET,CACEwP,MAAO,QACPxP,MAAO,0BAGXk/B,yBAA0B,CACxB,CACE1vB,MAAO,uBACPxP,MAAO,qBAET,CACEwP,MAAO,0BACPxP,MAAO,6CAET,CACEwP,MAAO,cACPxP,MAAO,gCAET,CACEwP,MAAO,sBACPxP,MAAO,uCAET,CACEwP,MAAO,YACPxP,MAAO,+BAET,CACEwP,MAAO,SACPxP,MAAO,4BAET,CACEwP,MAAO,8BACPxP,MAAO,iDAET,CACEwP,MAAO,UACPxP,MAAO,8BAET,CACEwP,MAAO,oCACPxP,MAAO,wDAET,CACEwP,MAAO,iCACPxP,MAAO,iDAET,CACEwP,MAAO,6BACPxP,MAAO,iDAET,CACEwP,MAAO,WACPxP,MAAO,+BAET,CACEwP,MAAO,QACPxP,MAAO,6BAGXm/B,gBAAiB,CACf,CACE3vB,MAAO,aACPxP,MAAO,WAET,CACEwP,MAAO,eACPxP,MAAO,yBAET,CACEwP,MAAO,mBACPxP,MAAO,6BAET,CACEwP,MAAO,QACPxP,MAAO,mBAGXo/B,mBAAoB,CAClB,CACE5vB,MAAO,kBACPxP,MAAO,kBAET,CACEwP,MAAO,WACPxP,MAAO,2BAET,CACEwP,MAAO,gBACPxP,MAAO,gCAET,CACEwP,MAAO,eACPxP,MAAO,+BAET,CACEwP,MAAO,QACPxP,MAAO,0BAGXq/B,mBAAoB,CAClB,CACE7vB,MAAO,gBACPxP,MAAO,cAET,CACEwP,MAAO,QACPxP,MAAO,sECrOb,SACE,CACEwP,MAAO,WACPxP,MAAO,YAET,CACEwP,MAAO,cACPxP,MAAO,eAET,CACEwP,MAAO,SACPxP,MAAO,UAET,CACEwP,MAAO,8BACPxP,MAAO,iCAET,CACEwP,MAAO,SACPxP,MAAO,UAET,CACEwP,MAAO,QACPxP,MAAO,SAET,CACEwP,MAAO,sBACPxP,MAAO,uBAET,CACEwP,MAAO,SACPxP,MAAO,UAET,CACEwP,MAAO,oBACPxP,MAAO,qBAET,CACEwP,MAAO,mBACPxP,MAAO,sBAET,CACEwP,MAAO,QACPxP,MAAO,SAET,CACEwP,MAAO,qBACPxP,MAAO,sBAET,CACEwP,MAAO,YACPxP,MAAO,aAET,CACEwP,MAAO,UACPxP,MAAO,WAET,CACEwP,MAAO,YACPxP,MAAO,aAET,CACEwP,MAAO,QACPxP,MAAO,SAET,CACEwP,MAAO,OACPxP,MAAO,QAET,CACEwP,MAAO,UACPxP,MAAO,WAET,CACEwP,MAAO,aACPxP,MAAO,cAET,CACEwP,MAAO,UACPxP,MAAO,WAET,CACEwP,MAAO,eACPxP,MAAO,gBAET,CACEwP,MAAO,UACPxP,MAAO,WAET,CACEwP,MAAO,QACPxP,MAAO,SAET,CACEwP,MAAO,UACPxP,MAAO,WAET,CACEwP,MAAO,SACPxP,MAAO,UAET,CACEwP,MAAO,qBACPxP,MAAO,sBAET,CACEwP,MAAO,gCACPxP,MAAO,mCAET,CACEwP,MAAO,SACPxP,MAAO,UAET,CACEwP,MAAO,OACPxP,MAAO,QAET,CACEwP,MAAO,QACPxP,MAAO,SAET,CACEwP,MAAO,gBACPxP,MAAO,iBAET,CACEwP,MAAO,SACPxP,MAAO,UAET,CACEwP,MAAO,cACPxP,MAAO,eAET,CACEwP,MAAO,YACPxP,MAAO,aAET,CACEwP,MAAO,2BACPxP,MAAO,4BAET,CACEwP,MAAO,UACPxP,MAAO,WAET,CACEwP,MAAO,+BACPxP,MAAO,gCAET,CACEwP,MAAO,iBACPxP,MAAO,kBAET,CACEwP,MAAO,mBACPxP,MAAO,oBAET,CACEwP,MAAO,MACPxP,MAAO,OAET,CACEwP,MAAO,QACPxP,MAAO,SAET,CACEwP,MAAO,QACPxP,MAAO,SAET,CACEwP,MAAO,WACPxP,MAAO,YAET,CACEwP,MAAO,YACPxP,MAAO,aAET,CACEwP,MAAO,SACPxP,MAAO,UAET,CACEwP,MAAO,WACPxP,MAAO,YAET,CACEwP,MAAO,wBACPxP,MAAO,yBAET,CACEwP,MAAO,aACPxP,MAAO,cAET,CACEwP,MAAO,eACPxP,MAAO,gBAET,CACEwP,MAAO,QACPxP,MAAO,SAET,CACEwP,MAAO,QACPxP,MAAO,SAET,CACEwP,MAAO,oBACPxP,MAAO,qBAET,CACEwP,MAAO,kBACPxP,MAAO,mBAET,CACEwP,MAAO,SACPxP,MAAO,UAET,CACEwP,MAAO,UACPxP,MAAO,WAET,CACEwP,MAAO,SACPxP,MAAO,UAET,CACEwP,MAAO,kBACPxP,MAAO,mBAET,CACEwP,MAAO,kBACPxP,MAAO,mBAET,CACEwP,MAAO,oBACPxP,MAAO,qBAET,CACEwP,MAAO,kBACPxP,MAAO,mBAET,CACEwP,MAAO,oBACPxP,MAAO,qBAET,CACEwP,MAAO,kBACPxP,MAAO,mBAET,CACEwP,MAAO,oBACPxP,MAAO,uBAET,CACEwP,MAAO,UACPxP,MAAO,WAET,CACEwP,MAAO,cACPxP,MAAO,eAET,CACEwP,MAAO,UACPxP,MAAO,WAET,CACEwP,MAAO,gBACPxP,MAAO,iBAET,CACEwP,MAAO,cACPxP,MAAO,eAET,CACEwP,MAAO,mBACPxP,MAAO,sECnRX,SACE,CACEwP,MAAO,MACPxP,MAAO,KAET,CACEwP,MAAO,MACPxP,MAAO,KAET,CACEwP,MAAO,MACPxP,MAAO,KAET,CACEwP,MAAO,MACPxP,MAAO,KAET,CACEwP,MAAO,MACPxP,MAAO,KAET,CACEwP,MAAO,MACPxP,MAAO,KAET,CACEwP,MAAO,OACPxP,MAAO,MAET,CACEwP,MAAO,OACPxP,MAAO,MAET,CACEwP,MAAO,OACPxP,MAAO,MAET,CACEwP,MAAO,mBACPxP,MAAO,oECvCX,SACE,CACEwP,MAAO,aACPxP,MAAO,aAET,CACEwP,MAAO,gBACPxP,MAAO,gBAET,CACEwP,MAAO,eACPxP,MAAO,gBAET,CACEwP,MAAO,YACPxP,MAAO,4DCfX,SACE,CACEwP,MAAO,YACPxP,MAAO,aAET,CACEwP,MAAO,eACPxP,MAAO,gBAET,CACEwP,MAAO,kBACPxP,MAAO,mBAET,CACEwP,MAAO,sBACPxP,MAAO,uBAET,CACEwP,MAAO,iBACPxP,MAAO,kBAET,CACEwP,MAAO,mBACPxP,MAAO,oBAET,CACEwP,MAAO,UACPxP,MAAO,WAET,CACEwP,MAAO,iBACPxP,MAAO,kBAET,CACEwP,MAAO,gBACPxP,MAAO,iBAET,CACEwP,MAAO,WACPxP,MAAO,YAET,CACEwP,MAAO,UACPxP,MAAO,WAET,CACEwP,MAAO,kBACPxP,MAAO,mBAET,CACEwP,MAAO,qBACPxP,MAAO,sBAET,CACEwP,MAAO,YACPxP,MAAO,aAET,CACEwP,MAAO,gBACPxP,MAAO,iBAET,CACEwP,MAAO,aACPxP,MAAO,cAET,CACEwP,MAAO,kBACPxP,MAAO,mBAET,CACEwP,MAAO,kBACPxP,MAAO,mBAET,CACEwP,MAAO,gBACPxP,MAAO,iBAET,CACEwP,MAAO,kBACPxP,MAAO,mBAET,CACEwP,MAAO,UACPxP,MAAO,WAET,CACEwP,MAAO,cACPxP,MAAO,eAET,CACEwP,MAAO,sBACPxP,MAAO,uBAET,CACEwP,MAAO,aACPxP,MAAO,cAET,CACEwP,MAAO,YACPxP,MAAO,aAET,CACEwP,MAAO,oBACPxP,MAAO,qECvGX,SACE,CACEwP,MAAO,uDACPxP,MAAO,mDAET,CACEwP,MAAO,uDACPxP,MAAO,mDAET,CACEwP,MAAO,0DACPxP,MAAO,sDAET,CACEwP,MAAO,yCACPxP,MAAO,0CAET,CACEwP,MAAO,4CACPxP,MAAO,6CAET,CACEwP,MAAO,mDACPxP,MAAO,oDAET,CACEwP,MAAO,qCACPxP,MAAO,iCAET,CACEwP,MAAO,2CACPxP,MAAO,uCAET,CACEwP,MAAO,wCACPxP,MAAO,oCAET,CACEwP,MAAO,yCACPxP,MAAO,qCAET,CACEwP,MAAO,mCACPxP,MAAO,+BAET,CACEwP,MAAO,uCACPxP,MAAO,mCAET,CACEwP,MAAO,0CACPxP,MAAO,sCAET,CACEwP,MAAO,sCACPxP,MAAO,kCAET,CACEwP,MAAO,0CACPxP,MAAO,sCAET,CACEwP,MAAO,mCACPxP,MAAO,+BAET,CACEwP,MAAO,4CACPxP,MAAO,wCAET,CACEwP,MAAO,mCACPxP,MAAO,+BAET,CACEwP,MAAO,uCACPxP,MAAO,mCAET,CACEwP,MAAO,mCACPxP,MAAO,+BAET,CACEwP,MAAO,+CACPxP,MAAO,2CAET,CACEwP,MAAO,mCACPxP,MAAO,+BAET,CACEwP,MAAO,wCACPxP,MAAO,oCAET,CACEwP,MAAO,uCACPxP,MAAO,mCAET,CACEwP,MAAO,sCACPxP,MAAO,kCAET,CACEwP,MAAO,kDACPxP,MAAO,8CAET,CACEwP,MAAO,4CACPxP,MAAO,wCAET,CACEwP,MAAO,0CACPxP,MAAO,sCAET,CACEwP,MAAO,2CACPxP,MAAO,uCAET,CACEwP,MAAO,oDACPxP,MAAO,gDAET,CACEwP,MAAO,0CACPxP,MAAO,sCAET,CACEwP,MAAO,4CACPxP,MAAO,wCAET,CACEwP,MAAO,oCACPxP,MAAO,gCAET,CACEwP,MAAO,iDACPxP,MAAO,6CAET,CACEwP,MAAO,0CACPxP,MAAO,sCAET,CACEwP,MAAO,iCACPxP,MAAO,6BAET,CACEwP,MAAO,sCACPxP,MAAO,kCAET,CACEwP,MAAO,yDACPxP,MAAO,oGCrJX,IAIMmB,EAAO,CACXnB,MAAO,QAeH02B,EAAS,CACb12B,MAAO,UAOT,SACE2pB,SA7Be,CACf3pB,MAAO,YA6BPmB,KAAAA,EACAm+B,MAAOn+B,EACPo+B,WAxBiB,CACjBv/B,MAAO,cAwBPw/B,eArBqB,CACrBx/B,MAAO,kBAqBPy/B,iBAlBuB,CACvBz/B,MAAO,oBAkBP0/B,gBAAiBhJ,EACjBiJ,kBAAmBjJ,EACnBkJ,aAAclJ,EACdmJ,WAdiB,CACjB7/B,MAAO,8DC3BT,SACE,CACEwP,MAAO,aACPxP,MAAO,cAET,CACEwP,MAAO,WACPxP,MAAO,YAET,CACEwP,MAAO,YACPxP,MAAO,aAET,CACEwP,MAAO,YACPxP,MAAO,aAET,CACEwP,MAAO,YACPxP,MAAO,aAET,CACEwP,MAAO,YACPxP,MAAO,aAET,CACEwP,MAAO,YACPxP,MAAO,aAET,CACEwP,MAAO,YACPxP,MAAO,aAET,CACEwP,MAAO,YACPxP,MAAO,aAET,CACEwP,MAAO,eACPxP,MAAO,gECvCX,SACE,CACEwP,MAAO,SACPxP,MAAO,UAET,CACEwP,MAAO,mBACPxP,MAAO,oBAET,CACEwP,MAAO,gBACPxP,MAAO,iBAET,CACEwP,MAAO,gBACPxP,MAAO,iBAET,CACEwP,MAAO,YACPxP,MAAO,4kDCjBmC,IAExC8/B,EAAwB,SAAAthB,GAO5B,SAAAshB,EAAY74B,GAAQ,IAADwX,EAKf,mGALeC,CAAA,KAAAohB,IACjBrhB,EAAAE,EAAA,KAAAmhB,EAAA,CAAM74B,KACDK,QAAU,CACb,CAAEkI,MAAO,sBAAuBxP,MAAO,cACvC,CAAEwP,MAAO,eAAgBxP,MAAO,UAChCye,CACJ,CAAC,4RAAAa,CAAAwgB,EAAAthB,KAAAshB,KAAA,EAAAr2B,IAAA,aAAAzJ,MAED,SAAW+/B,GACT,IACMC,EADa1sB,EAAEoM,KAAKzY,MAAMg5B,mBACP/tB,KAAKwN,KAAKzY,MAAMi5B,cACrCC,EAAaH,EAAM9tB,KAAKwN,KAAKzY,MAAMm5B,kBAEvCD,EAAWE,MAAK,SAAUlgC,EAAG+gB,GAC3B,IAAMof,EAAOhtB,EAAEnT,GAAGmP,KAAKywB,GAAQ75B,WACzBq6B,EAAOjtB,EAAE4N,GAAG5R,KAAKywB,GAAQ75B,WAE/B,OAAIo6B,EAAOC,EACF,EAELD,EAAOC,GACD,EAEH,CACT,IAGe,eAAXR,IACFI,EAAa7sB,EAAE6sB,EAAWK,MAAMx7B,YAGlCm7B,EAAWM,SAASC,SAASV,EAC/B,GAAC,CAAAv2B,IAAA,WAAAzJ,MAED,SAASoU,GACPsL,KAAKihB,WAAWvsB,EAAOpU,MAAMyP,cAC/B,GAAC,CAAAhG,IAAA,SAAAzJ,MAED,WAAU,IAAD6f,EAAA,KACP,OACE3U,EAAAA,cAACgB,EAAAA,QAAMuC,EAAA,GACDiR,KAAKzY,MAAK,CACd25B,cAAc,0BACdt5B,QAASoY,KAAKpY,QACdtH,MAAO0f,KAAKpY,QAAQ,GAAGtH,MACvBqM,GAAG,uBACHI,YAAY,yBACZC,SAAU,SAAC1M,GAAK,OAAK6f,EAAKnT,SAAS1M,EAAM,IAG/C,+FAAC,CAzD2B,CAASkL,EAAAA,WAAjC40B,EACG1yB,UAAY,CACjB6yB,kBAAmB5yB,IAAAA,OACnB6yB,aAAc7yB,IAAAA,OACd+yB,iBAAkB/yB,IAAAA,QAwDtB,wkDC9D8C,IAExCwzB,EAA2B,SAAAriB,GAAA,SAAAqiB,IAAA,mGAAAniB,CAAA,KAAAmiB,GAAAliB,EAAA,KAAAkiB,EAAAj2B,UAAA,6RAAA0U,CAAAuhB,EAAAriB,KAAAqiB,KAAA,EAAAp3B,IAAA,eAAAzJ,MAa/B,SAAa6kB,GACX,IAEMsb,EAFa7sB,EAAEoM,KAAKzY,MAAMg5B,mBACP/tB,KAAKwN,KAAKzY,MAAMi5B,cAChBhuB,KAAKwN,KAAKzY,MAAMm5B,kBAErCvb,EACFsb,EAAWW,MAAK,WACdxtB,EAAEoM,MAAMlE,OAAOlI,EAAEoM,MAAMpQ,KAAK,QAAQpJ,aAAe2e,EAAS3e,WAC9D,IAEAi6B,EAAW7X,MAEf,GAAC,CAAA7e,IAAA,WAAAzJ,MAED,SAASoU,GACPsL,KAAKqhB,aAAa3sB,EAAOpU,MAC3B,GAAC,CAAAyJ,IAAA,SAAAzJ,MAED,WAAU,IAADye,EAAA,KACP,OACEvT,EAAAA,cAACgB,EAAAA,QAAMuC,EAAA,GACDiR,KAAKzY,MAAK,CACd25B,cAAc,0BACdt5B,QAASoY,KAAKzY,MAAMK,QACpBtH,MAAO0f,KAAKzY,MAAMK,QAAQ,GAAGtH,MAC7B0M,SAAU,SAAC1M,GAAK,OAAKye,EAAK/R,SAAS1M,EAAM,IAG/C,+FAAC,CAzC8B,CAASkL,EAAAA,WAApC21B,EACGzzB,UAAY,CACjB6yB,kBAAmB5yB,IAAAA,OACnB6yB,aAAc7yB,IAAAA,OACd+yB,iBAAkB/yB,IAAAA,QAJhBwzB,EAOGtzB,aAAe,CACpB0yB,kBAAmB,aACnBC,aAAc,mBACdE,iBAAkB,mBAkCtB,inCC3CA,IAAMhzB,EAAY,CAChB4zB,cAAe3zB,IAAAA,MAAgBC,WAC/B2zB,mBAAoB5zB,IAAAA,MAAgBC,WACpCgC,KAAMjC,IAAAA,OACN6zB,oBAAqB7zB,IAAAA,MAAgBC,WACrC6zB,cAAe9zB,IAAAA,OACf+zB,yBAA0B/zB,IAAAA,MAAgBC,WAC1C+zB,0BAA2Bh0B,IAAAA,MAAgBC,YASvCg0B,EAAkB,SAACr6B,GACvB,IAUIs6B,EAVsC55B,EAAA/B,GAAdgC,EAAAA,EAAAA,UAAS,MAAK,GAAnC45B,EAAM75B,EAAA,GAAE85B,EAAS95B,EAAA,IAExBkB,EAAAA,EAAAA,YAAU,WACR44B,EAAUx6B,EAAMqI,KAAKkyB,OACvB,GAAG,IAQH,IACEP,EAIEh6B,EAJFg6B,mBACAC,EAGEj6B,EAHFi6B,oBACAE,EAEEn6B,EAFFm6B,yBACAC,EACEp6B,EADFo6B,0BAGF,OAAQG,GACN,IAAK,eAEHD,EAAkB,WAAH,OACbr2B,EAAAA,cAAAA,EAAAA,SAAA,KACEA,EAAAA,cAACgB,EAAAA,QAAM,CACLC,aAAclF,EAAMk6B,cAAcO,OAClCp0B,YAAU,EACVd,UAAU,2CACVH,GAAG,sBACH7H,KAAK,uBACLiI,YAAY,mBACZnF,QAAS25B,EACTjhC,MAAOiH,EAAMqI,KAAKoyB,SAEpBx2B,EAAAA,cAACy2B,EAAAA,QAAK,CACJn9B,KAAK,gCACLo9B,QAAQ,+BACRn1B,YAAY,kBACZD,UAAU,6EACVq1B,eAAe,WACf7hC,MAAOiH,EAAMqI,KAAKwyB,gBAClB31B,aAAclF,EAAMk6B,cAAcY,iBAEnC,EAEL,MACF,IAAK,gBAEHR,EAAkB,WAAH,OACbr2B,EAAAA,cAAAA,EAAAA,SAAA,KACEA,EAAAA,cAACgB,EAAAA,QAAM,CACLC,aAAclF,EAAMk6B,cAAca,kBAClC10B,YAAU,EACVd,UAAU,uDACVH,GAAG,mCACH7H,KAAK,mCACLiI,YAAY,mBACZnF,QAAS45B,EACTlhC,MAAOiH,EAAMqI,KAAKoyB,SAEpBx2B,EAAAA,cAACy2B,EAAAA,QAAK,CACJx1B,aAAclF,EAAMk6B,cAAcc,iBAClCz9B,KAAK,mCACL8I,YAAU,EACVb,YAAY,cACZD,UAAU,yDACVq1B,eAAe,WACf7hC,MAAOiH,EAAMqI,KAAK4yB,qBAEpBh3B,EAAAA,cAACy2B,EAAAA,QAAK,CACJn9B,KAAK,gCACLiI,YAAY,kBACZD,UAAU,sFACVq1B,eAAe,WACf7hC,MAAOiH,EAAMqI,KAAKwyB,gBAClB31B,aAAclF,EAAMk6B,cAAcY,iBAEnC,EAEL,MACF,IAAK,cAEHR,EAAkB,WAAH,OACbr2B,EAAAA,cAAAA,EAAAA,SAAA,KACEA,EAAAA,cAACgB,EAAAA,QAAM,CACLC,aAAclF,EAAMk6B,cAAcO,OAClCp0B,YAAU,EACVd,UAAU,6DACVH,GAAG,uBACH7H,KAAK,uBACLiI,YAAY,mBACZnF,QAAS85B,EACTphC,MAAOiH,EAAMqI,KAAKoyB,SAEpBx2B,EAAAA,cAACy2B,EAAAA,QAAK,CACJn9B,KAAK,gCACLiI,YAAY,kBACZD,UAAU,mDACVq1B,eAAe,WACf7hC,MAAOiH,EAAMqI,KAAKwyB,gBAClB31B,aAAclF,EAAMk6B,cAAcY,iBAEnC,EAEL,MACF,IAAK,gBAEHR,EAAkB,WAAH,OACbr2B,EAAAA,cAAAA,EAAAA,SAAA,KACEA,EAAAA,cAACy2B,EAAAA,QAAK,CACJx1B,aAAclF,EAAMk6B,cAAcgB,cAClC39B,KAAK,+BACLiI,YAAY,cACZD,UAAU,2DACVq1B,eAAe,WACf7hC,MAAOiH,EAAMqI,KAAK8yB,eAClB90B,YAAU,IAEZpC,EAAAA,cAACy2B,EAAAA,QAAK,CACJn9B,KAAK,6BACLiI,YAAY,cACZD,UAAU,gDACVq1B,eAAe,WACf7hC,MAAOiH,EAAMqI,KAAK+yB,aAClBl2B,aAAclF,EAAMk6B,cAAcmB,YAClCh1B,YAAU,IAEX,EAEL,MACF,IAAK,2BAEHi0B,EAAkB,WAAH,OACbr2B,EAAAA,cAACy2B,EAAAA,QAAK,CACJn9B,KAAK,gCACLiI,YAAY,kBACZD,UAAU,mCACVq1B,eAAe,WACf7hC,MAAOiH,EAAMqI,KAAKwyB,gBAClB31B,aAAclF,EAAMk6B,cAAcY,gBAClC,EAEJ,MACF,IAAK,kBAEHR,EAAkB,WAAH,OACbr2B,EAAAA,cAAAA,EAAAA,SAAA,KACEA,EAAAA,cAACgB,EAAAA,QAAM,CACLC,aAAclF,EAAMk6B,cAAcO,OAClCp0B,YAAU,EACVd,UAAU,0DACVH,GAAG,uBACH7H,KAAK,uBACLiI,YAAY,mBACZnF,QAAS+5B,EACTrhC,MAAOiH,EAAMqI,KAAKoyB,SAEpBx2B,EAAAA,cAACy2B,EAAAA,QAAK,CACJn9B,KAAK,gCACLiI,YAAY,kBACZD,UAAU,0DACVq1B,eAAe,WACf7hC,MAAOiH,EAAMqI,KAAKwyB,gBAClB31B,aAAclF,EAAMk6B,cAAcY,iBAEnC,EAEL,MACF,IAAK,YAEHR,EAAkB,WAAH,OACbr2B,EAAAA,cAACy2B,EAAAA,QAAK,CACJn9B,KAAK,gCACLiI,YAAY,kBACZD,UAAU,mGACVq1B,eAAe,WACf7hC,MAAOiH,EAAMqI,KAAKwyB,gBAClB31B,aAAclF,EAAMk6B,cAAcY,eAClCz0B,YAAU,GACV,EAEJ,MACF,QAEEi0B,EAAkB,WAAH,OAAS,IAAK,EAGjC,OACEr2B,EAAAA,cAAAA,EAAAA,SAAA,KACEA,EAAAA,cAACy2B,EAAAA,QAAK,CACJx1B,aAAclF,EAAMk6B,cAAc38B,KAClCA,KAAK,qBACLo9B,QAAQ,oBACR5hC,MAAOiH,EAAMqI,KAAK9K,KAClB8I,YAAU,EACVd,UAAU,oBACVC,YAAY,cAEdvB,EAAAA,cAACy2B,EAAAA,QAAK,CACJx1B,aAAclF,EAAMk6B,cAAcoB,MAClC/9B,KAAK,sBACLo9B,QAAQ,qBACR5hC,MAAOiH,EAAMqI,KAAKizB,MAClBj1B,YAAU,EACVd,UAAU,0DACVC,YAAY,eAEdvB,EAAAA,cAACgB,EAAAA,QAAM,CACLC,aAAclF,EAAMk6B,cAAcK,OAClCn1B,GAAG,sBACHiB,YAAU,EACV9I,KAAK,uBACLkI,SA9MN,SAAwB0H,GACtBqtB,EAAUrtB,EAAOpU,MACnB,EA6MMyM,YAAY,mBACZD,UAAU,iDACVlF,QAASL,EAAM+5B,cACfhhC,MAAOiH,EAAMqI,KAAKkyB,SAEpBt2B,EAAAA,cAACq2B,EAAe,MAGtB,EAEAD,EAAgBl0B,UAAYA,EAC5Bk0B,EAAgB/zB,aAvOK,CACnB+B,KAAM,CAAC,EACP6xB,cAAe,CAAC,GAuOlB,oDCxPO,IAAM7b,EAAU,UACVF,EAAW,mHCMxB,SACEod,EAAAA,EACAC,EAAAA,EACAC,EAAAA,EACAC,EAAAA,EACAC,EAAAA,EACAC,EAAAA,oDCVF,SACEC,WAAY,WACV,IAAMC,EAAQ,CAAC7oB,EAAAA,SAEf5G,IAAI0vB,OAAM,WACRD,EAAM3gC,SAAQ,SAACogC,GACbA,EAAKQ,MAAM3hC,KAAKmhC,EAClB,GACF,GACF,+DCLF,SACEM,WAAY,WACN16B,OAAO66B,eACTC,EAAAA,EAAAA,GACE96B,OAAO66B,aACP76B,OAAO+6B,WACLj4B,EAAAA,cAAA,OAAKsX,wBAAyB,CAAEC,OAAQra,OAAO+6B,aAIvD","sources":["webpack://lc3/./app/javascript/components/ai_tools/AIForm.jsx","webpack://lc3/./app/javascript/components/ai_tools/AskLitchartsAI.jsx","webpack://lc3/./app/javascript/components/ai_tools/DiscussionQuestions.jsx","webpack://lc3/./app/javascript/components/ai_tools/EssayPrompts.jsx","webpack://lc3/./app/javascript/components/ai_tools/InContentAIForm.jsx","webpack://lc3/./app/javascript/components/ai_tools/InContentAskLitchartsAI.jsx","webpack://lc3/./app/javascript/components/ai_tools/QuizQuestions.jsx","webpack://lc3/./app/javascript/components/ai_tools/constants/index.js","webpack://lc3/./app/javascript/components/ai_tools/hooks/useChatMessages.jsx","webpack://lc3/./app/javascript/components/ai_tools/hooks/useFormDisableFields.jsx","webpack://lc3/./app/javascript/components/ai_tools/hooks/useFormText.jsx","webpack://lc3/./app/javascript/components/ai_tools/hooks/useSessionStorage.jsx","webpack://lc3/./app/javascript/components/ai_tools/hooks/useWindowResizeAndFormCollapse.jsx","webpack://lc3/./app/javascript/components/ai_tools/layout/AIToolsLayout.jsx","webpack://lc3/./app/javascript/components/ai_tools/shared/AIForm/AIFormLayout.jsx","webpack://lc3/./app/javascript/components/ai_tools/shared/AIForm/AIFormSubheading.jsx","webpack://lc3/./app/javascript/components/ai_tools/shared/AIForm/AIFormTitle.jsx","webpack://lc3/./app/javascript/components/ai_tools/shared/AIForm/DisclaimerText.jsx","webpack://lc3/./app/javascript/components/ai_tools/shared/AIForm/LockedInformationBanner.jsx","webpack://lc3/./app/javascript/components/ai_tools/shared/ChatArea/CopyAndSaveReminder.jsx","webpack://lc3/./app/javascript/components/ai_tools/shared/ChatArea/InitialMessage.jsx","webpack://lc3/./app/javascript/components/ai_tools/shared/ChatArea/InitialMessageBullets.jsx","webpack://lc3/./app/javascript/components/ai_tools/shared/ChatArea/InitialMessageDescription.jsx","webpack://lc3/./app/javascript/components/ai_tools/shared/ChatArea/InitialMessageExample.jsx","webpack://lc3/./app/javascript/components/bookmarks/BookmarkList.jsx","webpack://lc3/./app/javascript/components/books/RelatedThemes.jsx","webpack://lc3/./app/javascript/components/books/SummaryAnalysisAPlusDialog.jsx","webpack://lc3/./app/javascript/components/groups/info/GroupsInfoExpandableFaqRow.jsx","webpack://lc3/./app/javascript/components/groups/info/GroupsInfoFaqRow.jsx","webpack://lc3/./app/javascript/components/lit_devices/ChaptersRow.jsx","webpack://lc3/./app/javascript/components/lit_devices/ChaptersView.jsx","webpack://lc3/./app/javascript/components/lit_devices/Content.jsx","webpack://lc3/./app/javascript/components/lit_devices/DevicesRow.jsx","webpack://lc3/./app/javascript/components/lit_devices/DevicesView.jsx","webpack://lc3/./app/javascript/components/lit_devices/Filters.jsx","webpack://lc3/./app/javascript/components/lit_devices/LandingPage.jsx","webpack://lc3/./app/javascript/components/lit_devices/PageDescription.jsx","webpack://lc3/./app/javascript/components/lit_devices/QueryParamsControls.jsx","webpack://lc3/./app/javascript/components/navigation/Menu.jsx","webpack://lc3/./app/javascript/components/navigation/MenuItem.jsx","webpack://lc3/./app/javascript/components/navigation/MenuParent.jsx","webpack://lc3/./app/javascript/components/poetry/poems/show/AiToolToggle.jsx","webpack://lc3/./app/javascript/components/poetry/poems/show/ComponentItemSelect.jsx","webpack://lc3/./app/javascript/components/poetry/poems/show/UncachedAITool.jsx","webpack://lc3/./app/javascript/components/quizzes/QuizBanner.jsx","webpack://lc3/./app/javascript/components/quizzes/QuizCard/QuizAnswerChoice.jsx","webpack://lc3/./app/javascript/components/quizzes/QuizCard/QuizAnswerChoiceIcon.jsx","webpack://lc3/./app/javascript/components/quizzes/QuizCard/QuizCard.jsx","webpack://lc3/./app/javascript/components/quizzes/QuizCard/QuizCardResult.jsx","webpack://lc3/./app/javascript/components/quizzes/QuizCard/QuizCardResultText.jsx","webpack://lc3/./app/javascript/components/quizzes/QuizCard/ReviewButton.jsx","webpack://lc3/./app/javascript/components/quizzes/QuizResult.jsx","webpack://lc3/./app/javascript/components/quizzes/QuizSubmission.jsx","webpack://lc3/./app/javascript/components/quizzes/ResultsPanel.jsx","webpack://lc3/./app/javascript/components/quizzes/constants.js","webpack://lc3/./app/javascript/components/search/AuthorEthnicityMultiSelect.jsx","webpack://lc3/./app/javascript/components/search/AuthorGenderMultiSelect.jsx","webpack://lc3/./app/javascript/components/search/AuthorNationalityMultiSelect.jsx","webpack://lc3/./app/javascript/components/search/GenreMultiSelect.jsx","webpack://lc3/./app/javascript/components/search/GradeLevelRefinementList.jsx","webpack://lc3/./app/javascript/components/search/GuideRefinementList.jsx","webpack://lc3/./app/javascript/components/search/LiteraryMovementRefinementList.jsx","webpack://lc3/./app/javascript/components/search/LiteraryPeriodRefinementList.jsx","webpack://lc3/./app/javascript/components/search/TimePeriodRefinementList.jsx","webpack://lc3/./app/javascript/components/search/TypeRefinementList.jsx","webpack://lc3/./app/javascript/components/search/base/CurrentRefinements.jsx","webpack://lc3/./app/javascript/components/search/base/Flyout.jsx","webpack://lc3/./app/javascript/components/search/base/HierarchicalRefinementList.jsx","webpack://lc3/./app/javascript/components/search/base/HierarchicalRefinementListElement.jsx","webpack://lc3/./app/javascript/components/search/base/Hit.jsx","webpack://lc3/./app/javascript/components/search/base/Hits.jsx","webpack://lc3/./app/javascript/components/search/base/MultiSelectRefinementList.jsx","webpack://lc3/./app/javascript/components/search/base/NoResults.jsx","webpack://lc3/./app/javascript/components/search/base/RefineElement.jsx","webpack://lc3/./app/javascript/components/search/base/RefinementList.jsx","webpack://lc3/./app/javascript/components/search/context/FilterPromoContext.js","webpack://lc3/./app/javascript/components/search/index.js","webpack://lc3/./app/javascript/components/search/references/authorCategories.js","webpack://lc3/./app/javascript/components/search/references/flyoutReference.js","webpack://lc3/./app/javascript/components/search/references/genreCategories.js","webpack://lc3/./app/javascript/components/search/references/gradeLevelCategories.js","webpack://lc3/./app/javascript/components/search/references/guideCategories.js","webpack://lc3/./app/javascript/components/search/references/literaryMovementCategories.js","webpack://lc3/./app/javascript/components/search/references/literaryPeriodCategories.js","webpack://lc3/./app/javascript/components/search/references/promoAttributeReference.js","webpack://lc3/./app/javascript/components/search/references/timePeriodCategories.js","webpack://lc3/./app/javascript/components/search/references/typeCategories.js","webpack://lc3/./app/javascript/components/users/downloads/UserDownloadsSortControl.jsx","webpack://lc3/./app/javascript/components/users/highlights/UserHighlightsFilterControl.jsx","webpack://lc3/./app/javascript/components/views/static/GdprRequestForm.jsx","webpack://lc3/./app/javascript/constants/literary_devices/index.js","webpack://lc3/./app/javascript/initializers/base.js","webpack://lc3/./app/javascript/initializers/globalViews.js","webpack://lc3/./app/javascript/initializers/toast.js"],"sourcesContent":["import React, { useEffect, useLayoutEffect, useState } from \"react\";\nimport PropTypes from \"prop-types\";\nimport classnames from \"classnames\";\nimport pluralize from \"pluralize\";\nimport { Formik, yupToFormErrors } from \"formik\";\nimport * as Yup from \"yup\";\nimport { SM_PIXEL_MIN, XS_PIXEL_MAX } from \"constants/breakpoints\";\nimport InputTextCounter from \"components/shared/InputTextCounter\";\nimport Select from \"components/shared/Select\";\nimport IconButton from \"components/shared/IconButton\";\nimport { AI_ANSWERS_QUOTA } from \"components/ai_tools/constants\";\nimport DisclaimerText from \"components/ai_tools/shared/AIForm/DisclaimerText\";\n\nconst sessionStorageKey = \"askLitchartsAi\";\n\nconst validationSchema = Yup.object().shape({\n  title: Yup.string().required(\"Please select your title\"),\n  question: Yup.string()\n    .required(\"25 characters required\")\n    .min(25, \"25 characters required\")\n    .max(300, \"Over max character limit\"),\n});\n\nconst AIForm = (props) => {\n  const {\n    loading,\n    locked,\n    onSubmit,\n    options = [],\n    questionMinimum,\n    quotaRemaining,\n    resetDate,\n    signupPath,\n    values,\n  } = props;\n  const [isLessThanSmallBreakpoint, setIsLessThanSmallBreakpoint] =\n    useState(true);\n  const [collapsed, setCollapsed] = useState(true);\n  const disableFields = !locked && quotaRemaining === 0;\n\n  const resizeHandler = () => {\n    if (window.matchMedia(`(min-width: ${SM_PIXEL_MIN}px)`).matches) {\n      setIsLessThanSmallBreakpoint(false);\n    } else if (window.matchMedia(`(max-width: ${XS_PIXEL_MAX}px)`).matches) {\n      setIsLessThanSmallBreakpoint(true);\n    }\n  };\n\n  useLayoutEffect(() => {\n    resizeHandler();\n    window.addEventListener(\"resize\", resizeHandler);\n    return () => {\n      window.removeEventListener(\"resize\", resizeHandler);\n    };\n  }, []);\n\n  useLayoutEffect(() => {\n    setCollapsed(isLessThanSmallBreakpoint);\n  }, [isLessThanSmallBreakpoint]);\n\n  useEffect(() => {\n    // Prevent the body from scrolling underneath the form field when on small screen\n    // and expanded\n    if (!collapsed && isLessThanSmallBreakpoint) {\n      document.body.style.overflow = \"hidden\";\n    } else {\n      document.body.style.overflow = \"auto\";\n    }\n  }, [collapsed]);\n\n  const buttonRemainingText =\n    !locked && quotaRemaining > 0 ? ` (${quotaRemaining} left)` : \"\";\n  let buttonCTA = \"Ask LitCharts AI\";\n  if (quotaRemaining > 0 && !collapsed && isLessThanSmallBreakpoint) {\n    buttonCTA = \"Submit\";\n  } else if (quotaRemaining > 0 && quotaRemaining < 25) {\n    buttonCTA = \"Ask New Question\";\n  }\n  const buttonText = buttonCTA + buttonRemainingText;\n  const resetText = `${pluralize(\n    \"answers\",\n    quotaRemaining,\n    true\n  )} left (resets on ${resetDate})`;\n  const showDisclaimerText = !collapsed || (collapsed && quotaRemaining === 0);\n\n  const unpackValueFromStorage = (key) => {\n    const storageKey = `${sessionStorageKey}:${key}`;\n    const storedValue = sessionStorage.getItem(storageKey) || \"\";\n\n    sessionStorage.removeItem(storageKey);\n\n    return storedValue;\n  };\n\n  const initialValues = {\n    question: !disableFields\n      ? unpackValueFromStorage(\"question\") || values.question\n      : \"\",\n    title: !disableFields\n      ? unpackValueFromStorage(\"title\") || values.title\n      : \"\",\n  };\n\n  const storeFieldForReload = (key, value) => {\n    if (locked && !disableFields) {\n      const storageKey = `${sessionStorageKey}:${key}`;\n      sessionStorage.setItem(storageKey, value);\n    }\n  };\n\n  const handleSubmit = (formValues) => {\n    // Locked, redirect to sales page\n    if (locked && !disableFields) {\n      window.location.href = signupPath;\n      return;\n    }\n\n    // We're in a collapsed state (smaller breakpoints)\n    // Expand the form\n    if (collapsed) {\n      setCollapsed(false);\n      return;\n    }\n\n    // pass the values up to the parent to handle submission\n    onSubmit(formValues);\n\n    // If we're in smaller breakpoints, collapse the form\n    if (isLessThanSmallBreakpoint) {\n      setCollapsed(true);\n    }\n  };\n\n  const validateForm = async (formValues) => {\n    let yupFormErrors = {};\n\n    if (collapsed && isLessThanSmallBreakpoint) {\n      return yupFormErrors;\n    }\n\n    if (locked) {\n      return yupFormErrors;\n    }\n\n    try {\n      await validationSchema.validate(formValues, { abortEarly: false });\n    } catch (e) {\n      yupFormErrors = yupToFormErrors(e);\n    }\n\n    return yupFormErrors;\n  };\n\n  const handleClose = () => {\n    setCollapsed(true);\n  };\n\n  const amplitudeSignupAttr = () => {\n    let attr;\n    if (locked && !disableFields) {\n      attr = \"aiSignupForm\"; // we're free tier and signing up\n    } else {\n      attr = \"aiQuestionAsked\"; // we're subbed and asking a question\n    }\n    attr += isLessThanSmallBreakpoint ? \"Small\" : \"Large\";\n    if (collapsed && isLessThanSmallBreakpoint) {\n      attr += \"Collapsed\";\n    }\n    return attr;\n  };\n\n  return (\n    <Formik\n      initialValues={initialValues}\n      validateOnBlur={false}\n      validateOnChange={false}\n      validateOnMount={false}\n      validate={validateForm}\n      onSubmit={handleSubmit}\n    >\n      {(formik) => (\n        <form\n          onSubmit={formik.handleSubmit}\n          className={classnames(\"ai-form--container\", { collapsed })}\n        >\n          <div className=\"ai-form--header\">\n            <div className=\"title-5\">Ask LitCharts AI</div>\n            <div className=\"subtitle-1\">\n              The only tool that combines the world&apos;s best literary\n              analysis with the power of AI.\n            </div>\n            <IconButton\n              iconClass=\"lc-icon-close lc-icon-xs\"\n              btnClass=\"btn-lg btn-borderless-alt\"\n              onClick={handleClose}\n            />\n          </div>\n          <div className=\"ai-form--content\">\n            <div className=\"ai-form--body\">\n              <div\n                className=\"ai-form--banner lc-banner lc-banner-information\"\n                data-testid=\"ai-form-banner\"\n              >\n                {locked ? (\n                  <a href={signupPath} data-amplitude=\"aiSignupBanner\">\n                    Get {AI_ANSWERS_QUOTA} answers per month\n                  </a>\n                ) : (\n                  resetText\n                )}\n              </div>\n              <div className=\"ai-form--fields\">\n                <Select\n                  errorMessage={formik.errors.title}\n                  id=\"title\"\n                  isDisabled={loading || disableFields}\n                  isSearchable\n                  labelText=\"Title\"\n                  name=\"title\"\n                  options={options}\n                  placeholder={\n                    !disableFields ? \"e.g. Hamlet (Shakespeare)\" : \"\"\n                  }\n                  onChange={(e) => {\n                    const fieldKey = \"title\";\n                    storeFieldForReload(fieldKey, e.value);\n                    formik.setFieldValue(fieldKey, e.value);\n                  }}\n                  value={formik.values.title}\n                />\n                <InputTextCounter\n                  disabled={loading || disableFields}\n                  hideSubtext={disableFields}\n                  errorMessage={formik.errors.question}\n                  labelText=\"Question\"\n                  key={`collapsed-${collapsed}`}\n                  name=\"question\"\n                  min={questionMinimum}\n                  max={300}\n                  onChange={(e) => {\n                    const fieldKey = \"question\";\n                    formik.setFieldError(fieldKey, null);\n                    storeFieldForReload(fieldKey, e.target.value);\n                    formik.setFieldValue(fieldKey, e.target.value);\n                  }}\n                  // eslint-disable-next-line max-len\n                  placeholder={\n                    !disableFields\n                      ? \"e.g. In Act 3, scene 3, why does Hamlet decide not to kill Claudius while Claudius is praying?\"\n                      : \"\"\n                  }\n                  value={formik.values.question}\n                />\n              </div>\n            </div>\n            <div className=\"ai-form--footer\">\n              <button\n                className={`ai-form--submit btn btn-a-plus button-1 ${\n                  isLessThanSmallBreakpoint ? \"btn-lg\" : \"btn-block\"\n                }`}\n                data-testid=\"ai-form-submit\"\n                data-amplitude={amplitudeSignupAttr()}\n                disabled={disableFields || loading}\n                type=\"submit\"\n              >\n                {locked && (\n                  <i\n                    className=\"lc-icon lc-icon-lock-filled lc-icon-sm\"\n                    data-testid=\"lock-icon\"\n                  />\n                )}\n                {loading ? \"Answering...\" : buttonText}\n              </button>\n              {!locked && showDisclaimerText && (\n                <div className=\"subtitle-1 tw-flex tw-pt-2 tw-text-gray-tint-40\">\n                  {collapsed && quotaRemaining === 0 && resetText}\n                  {!collapsed && (\n                    <DisclaimerText className=\"tw-self-center tw-text-center tw-flex-grow\" />\n                  )}\n                </div>\n              )}\n            </div>\n          </div>\n        </form>\n      )}\n    </Formik>\n  );\n};\n\nAIForm.propTypes = {\n  loading: PropTypes.bool,\n  locked: PropTypes.bool,\n  onSubmit: PropTypes.func,\n  options: PropTypes.arrayOf(\n    PropTypes.shape({\n      name: PropTypes.string,\n      value: PropTypes.string,\n    })\n  ),\n  questionMinimum: PropTypes.number,\n  quotaRemaining: PropTypes.number.isRequired,\n  resetDate: PropTypes.string,\n  signupPath: PropTypes.string,\n  values: PropTypes.object,\n};\n\nAIForm.defaultProps = {\n  loading: false,\n  locked: false,\n  onSubmit: () => {},\n  options: [],\n  questionMinimum: 25,\n  resetDate: \"\",\n  signupPath: \"/sign-up?focus=teacher\",\n  values: {},\n};\n\nexport default AIForm;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport AIForm from \"components/ai_tools/AIForm\";\nimport ChatArea from \"components/ai_tools/ChatArea\";\n\nimport AIToolsLayout from \"./layout/AIToolsLayout\";\nimport {\n  AI_TOOL_CHANNELS,\n  AI_TOOL_NAMES,\n  QUESTION_MINIMUM_LENGTH,\n} from \"./constants\";\nimport useChatMessages from \"./hooks/useChatMessages\";\n\nconst AskLitchartsAI = (props) => {\n  const {\n    quotaRemaining: quotaFromProps,\n    locked,\n    signupPath,\n    submissionPath,\n    aiAnswersCompletePath,\n  } = props;\n  const { loading, quotaRemaining, messages, prevSlug, handleAskAIFormSubmit } =\n    useChatMessages({\n      submissionPath,\n      aiAnswersCompletePath,\n      locked,\n      upgradeable: false,\n      signupPath,\n      quotaFromProps,\n      eventCategory: \"Ask LitCharts AI\",\n      channel: AI_TOOL_CHANNELS.ASK_AI,\n      toolName: AI_TOOL_NAMES.ASK_AI,\n    });\n\n  return (\n    <AIToolsLayout>\n      <AIForm\n        {...props}\n        loading={loading}\n        onSubmit={handleAskAIFormSubmit}\n        // Note, please read before removing.  This line causes a re-render that clears\n        // out the \"Question\" field while preserving the \"Title\" field upon a\n        // successful Ask Litcharts AI response.\n        key={`quota-remaining-${quotaRemaining}`}\n        quotaRemaining={quotaRemaining}\n        questionMinimum={QUESTION_MINIMUM_LENGTH}\n        values={{ title: prevSlug }}\n      />\n      <ChatArea messages={messages} />\n    </AIToolsLayout>\n  );\n};\n\nAskLitchartsAI.propTypes = {\n  submissionPath: PropTypes.string,\n  aiAnswersCompletePath: PropTypes.string,\n  locked: PropTypes.bool,\n  options: PropTypes.arrayOf(\n    PropTypes.shape({\n      name: PropTypes.string,\n      value: PropTypes.string,\n    })\n  ),\n  questionMinimum: PropTypes.number,\n  quotaRemaining: PropTypes.number.isRequired,\n  resetDate: PropTypes.string,\n  signupPath: PropTypes.string,\n};\n\nAskLitchartsAI.defaultProps = {\n  submissionPath: \"/ai/ask-litcharts-ai\",\n  aiAnswersCompletePath: \"/ai_answers/complete\",\n  locked: false,\n  options: [],\n  questionMinimum: 25,\n  resetDate: \"\",\n  signupPath: \"/sign-up?focus=teacher\",\n};\n\nexport default AskLitchartsAI;\n","import React, { useState, useEffect } from \"react\";\nimport PropTypes from \"prop-types\";\nimport Select from \"components/shared/Select\";\nimport ChatArea from \"components/ai_tools/ChatArea\";\nimport { useFormik } from \"formik\";\nimport * as Yup from \"yup\";\nimport pluralize from \"pluralize\";\nimport AIToolsLayout from \"./layout/AIToolsLayout\";\nimport {\n  AI_TOOL_CHANNELS,\n  AI_TOOL_NAMES,\n  AI_TOOLS_LABEL_MAP,\n  AI_TOOLS_LOADING_DEFAULTS,\n  REUSABLES,\n} from \"./constants\";\nimport useChatMessages from \"./hooks/useChatMessages\";\nimport AIFormLayout from \"./shared/AIForm/AIFormLayout\";\nimport useFormDisableFields from \"./hooks/useFormDisableFields\";\nimport useWindowResizeAndFormCollapse from \"./hooks/useWindowResizeAndFormCollapse\";\n\nconst DiscussionQuestions = (props) => {\n  const {\n    quotaRemaining: quotaFromProps,\n    locked,\n    upgradeable,\n    signupPath,\n    submissionPath,\n    aiAnswersCompletePath,\n    options,\n  } = props;\n\n  const validationSchema = Yup.object().shape({\n    title: Yup.string().required(\"Please select your title\"),\n    topic: Yup.string().when(\"title\", (title) => {\n      if (title) {\n        return Yup.string().required(\"Please select your topic\");\n      }\n    }),\n    subtopic: Yup.string().when(\"topic\", (_) => {\n      if (selectedTopic?.data) {\n        return Yup.string().required(\n          `Please select your ${\n            AI_TOOLS_LABEL_MAP[selectedTopic.label] ??\n            selectedTopic.labelText?.toLowerCase()\n          }`\n        );\n      }\n    }),\n  });\n\n  const [loadingTopics, setLoadingTopics] = useState(false);\n  const [topics, setTopics] = useState();\n  const [selectedTopic, setSelectedTopic] = useState();\n  const [selectedSubtopic, setSelectedSubtopic] = useState();\n  const { isLessThanSmallBreakpoint, collapsed, setCollapsed } =\n    useWindowResizeAndFormCollapse();\n\n  const formik = useFormik({\n    initialValues: {\n      title: prevSlug || \"\",\n      topic: \"\",\n      subtopic: \"\",\n    },\n    validateOnChange: false,\n    validateOnBlur: false,\n    validationSchema,\n    onSubmit: (values) => {\n      validationSchema\n        .validate(values, { abortEarly: false })\n        .then(() => {\n          handleQuizDiscussionEssayPrompt(values);\n          if (isLessThanSmallBreakpoint) {\n            setCollapsed(true);\n          }\n        })\n        .catch((errors) => {\n          formik.setErrors(errors);\n        });\n    },\n  });\n\n  const {\n    loading,\n    quotaRemaining,\n    messages,\n    prevSlug,\n    handleQuizDiscussionEssayPrompt,\n  } = useChatMessages({\n    submissionPath,\n    aiAnswersCompletePath,\n    locked,\n    upgradeable,\n    signupPath,\n    quotaFromProps,\n    toolName: AI_TOOL_NAMES.DISCUSSION_QUESTIONS,\n    eventCategory: \"Discussion Questions Generator\",\n    channel: AI_TOOL_CHANNELS.DISCUSSION_QUESTIONS,\n    messageText: selectedSubtopic?.messageText ?? selectedTopic?.messageText,\n    formik,\n  });\n\n  const { disableFields } = useFormDisableFields(locked, quotaRemaining);\n\n  const handleError = (timeoutRef) => {\n    clearTimeout(timeoutRef);\n    setLoadingTopics(false);\n    setTopics([]);\n    formik.setFieldError(\"topic\", \"Data request failed. Please try again.\");\n  };\n\n  const fetchDropdownContent = (guidePath) => {\n    setTopics();\n    setSelectedTopic(null);\n    setSelectedSubtopic(null);\n    const loadingTimeout = setTimeout(() => {\n      setTopics([]);\n      setLoadingTopics(true);\n    }, 1000);\n\n    fetch(guidePath, {\n      method: \"GET\",\n    })\n      .then((response) => {\n        if (!response.ok) {\n          handleError(loadingTimeout);\n        } else {\n          return response.json();\n        }\n      })\n      .then((data) => {\n        clearTimeout(loadingTimeout);\n        setTopics(data.topics);\n        setLoadingTopics(false);\n      })\n      .catch((error) => {\n        handleError(loadingTimeout);\n        console.error(\"Error fetching dropdown content:\", error);\n      });\n  };\n\n  useEffect(() => {\n    formik.setFieldValue(\"title\", prevSlug);\n  }, [prevSlug]);\n\n  return (\n    <AIToolsLayout>\n      <AIFormLayout\n        {...props}\n        collapsed={collapsed}\n        isLessThanSmallBreakpoint={isLessThanSmallBreakpoint}\n        setCollapsed={setCollapsed}\n        toolName={AI_TOOL_NAMES.DISCUSSION_QUESTIONS}\n        loading={loading}\n        storageKey=\"discussionQuestions\"\n        quotaRemaining={quotaRemaining}\n        formik={formik}\n      >\n        <Select\n          errorMessage={formik.errors.title}\n          id={REUSABLES.TITLE}\n          isDisabled={loading || disableFields}\n          isSearchable\n          labelText=\"Title\"\n          name={REUSABLES.TITLE}\n          options={options}\n          placeholder={!disableFields ? \"e.g. Hamlet (Shakespeare)\" : \"\"}\n          onChange={(e) => {\n            formik.setFieldValue(REUSABLES.TITLE, e.value);\n            formik.setFieldValue(REUSABLES.TOPIC, undefined);\n            formik.setFieldValue(REUSABLES.SUBTOPIC, undefined);\n            formik.setFieldError(REUSABLES.TOPIC, undefined);\n            formik.setFieldError(REUSABLES.SUBTOPIC, undefined);\n            fetchDropdownContent(e.guide_path);\n          }}\n          value={formik.values.title}\n        />\n        {topics && !disableFields && (\n          <Select\n            errorMessage={\n              loadingTopics && formik.errors.topic\n                ? \"Loading, select one when complete\"\n                : formik.errors.topic\n            }\n            id={REUSABLES.TOPIC}\n            isDisabled={loadingTopics || loading || disableFields}\n            isSearchable\n            isControlled\n            isLoading={loadingTopics}\n            labelText=\"Topic\"\n            name={REUSABLES.TOPIC}\n            options={loadingTopics ? [AI_TOOLS_LOADING_DEFAULTS] : topics}\n            placeholder={!disableFields ? \"e.g. Themes\" : \"\"}\n            onChange={(e) => {\n              formik.setFieldValue(REUSABLES.TOPIC, e.value);\n              formik.setFieldValue(REUSABLES.SUBTOPIC, undefined);\n              formik.setFieldError(REUSABLES.SUBTOPIC, undefined);\n\n              setSelectedTopic(topics.find((topic) => topic.value === e.value));\n              setSelectedSubtopic(null);\n            }}\n            value={\n              loadingTopics\n                ? AI_TOOLS_LOADING_DEFAULTS.value\n                : formik.values.topic\n            }\n          />\n        )}\n        {selectedTopic?.data && !disableFields && (\n          <Select\n            errorMessage={formik.errors.subtopic}\n            id={REUSABLES.SUBTOPIC}\n            isDisabled={loading || disableFields}\n            isSearchable\n            isControlled\n            labelText={\n              selectedTopic.labelText ??\n              pluralize(formik.values.topic, 1, false)\n            }\n            name={REUSABLES.SUBTOPIC}\n            options={selectedTopic.data}\n            placeholder={!disableFields ? \"Select one\" : \"\"}\n            onChange={(e) => {\n              formik.setFieldValue(REUSABLES.SUBTOPIC, e.value);\n              setSelectedSubtopic(\n                selectedTopic.data.find((topic) => topic.value === e.value)\n              );\n            }}\n            value={formik.values.subtopic}\n          />\n        )}\n      </AIFormLayout>\n      <ChatArea messages={messages} />\n    </AIToolsLayout>\n  );\n};\n\nDiscussionQuestions.propTypes = {\n  submissionPath: PropTypes.string,\n  aiAnswersCompletePath: PropTypes.string,\n  locked: PropTypes.bool,\n  upgradeable: PropTypes.bool,\n  options: PropTypes.arrayOf(\n    PropTypes.shape({\n      name: PropTypes.string,\n      value: PropTypes.string,\n    })\n  ),\n  questionMinimum: PropTypes.number,\n  quotaRemaining: PropTypes.number.isRequired,\n  resetDate: PropTypes.string,\n  signupPath: PropTypes.string,\n};\n\nDiscussionQuestions.defaultProps = {\n  submissionPath: \"/ai/discussion-question-generator\",\n  aiAnswersCompletePath: \"/ai_answers/complete\",\n  locked: false,\n  upgradeable: false,\n  options: [],\n  questionMinimum: 25,\n  resetDate: \"\",\n  signupPath: \"/sign-up?focus=teacher\",\n};\n\nexport default DiscussionQuestions;\n","import React, { useState, useEffect } from \"react\";\nimport PropTypes from \"prop-types\";\nimport Select from \"components/shared/Select\";\nimport ChatArea from \"components/ai_tools/ChatArea\";\nimport { useFormik } from \"formik\";\nimport * as Yup from \"yup\";\nimport AIToolsLayout from \"./layout/AIToolsLayout\";\nimport {\n  AI_TOOL_CHANNELS,\n  AI_TOOL_NAMES,\n  AI_TOOLS_LOADING_DEFAULTS,\n  REUSABLES,\n} from \"./constants\";\nimport useChatMessages from \"./hooks/useChatMessages\";\nimport AIFormLayout from \"./shared/AIForm/AIFormLayout\";\nimport useFormDisableFields from \"./hooks/useFormDisableFields\";\nimport useWindowResizeAndFormCollapse from \"./hooks/useWindowResizeAndFormCollapse\";\n\nconst EssayPrompts = (props) => {\n  const {\n    quotaRemaining: quotaFromProps,\n    locked,\n    upgradeable,\n    signupPath,\n    submissionPath,\n    aiAnswersCompletePath,\n    options,\n  } = props;\n\n  const validationSchema = Yup.object().shape({\n    title: Yup.string().required(\"Please select your title\"),\n    topic: Yup.string().when(\"title\", (title) => {\n      if (title) {\n        return Yup.string().required(\"Please select your topic\");\n      }\n    }),\n  });\n\n  const [loadingTopics, setLoadingTopics] = useState(false);\n  const [topics, setTopics] = useState();\n  const [selectedTopic, setSelectedTopic] = useState();\n  const { isLessThanSmallBreakpoint, collapsed, setCollapsed } =\n    useWindowResizeAndFormCollapse();\n\n  const formik = useFormik({\n    initialValues: {\n      title: prevSlug || \"\",\n      topic: \"\",\n    },\n    validateOnChange: false,\n    validateOnBlur: false,\n    validationSchema,\n    onSubmit: (values) => {\n      validationSchema\n        .validate(values, { abortEarly: false })\n        .then(() => {\n          handleQuizDiscussionEssayPrompt(values);\n          if (isLessThanSmallBreakpoint) {\n            setCollapsed(true);\n          }\n        })\n        .catch((errors) => {\n          formik.setErrors(errors);\n        });\n    },\n  });\n\n  const {\n    loading,\n    quotaRemaining,\n    messages,\n    prevSlug,\n    handleQuizDiscussionEssayPrompt,\n  } = useChatMessages({\n    submissionPath,\n    aiAnswersCompletePath,\n    locked,\n    upgradeable,\n    signupPath,\n    quotaFromProps,\n    toolName: AI_TOOL_NAMES.ESSAY_PROMPTS,\n    eventCategory: \"Essay Prompts Generator\",\n    channel: AI_TOOL_CHANNELS.ESSAY_PROMPTS,\n    messageText: selectedTopic?.messageText,\n    formik,\n  });\n\n  const { disableFields } = useFormDisableFields(locked, quotaRemaining);\n\n  const handleError = (timeoutRef) => {\n    clearTimeout(timeoutRef);\n    setLoadingTopics(false);\n    setTopics([]);\n    formik.setFieldError(\"topic\", \"Data request failed. Please try again.\");\n  };\n\n  const fetchDropdownContent = (guidePath) => {\n    setTopics();\n    setSelectedTopic(null);\n    const loadingTimeout = setTimeout(() => {\n      setTopics([]);\n      setLoadingTopics(true);\n    }, 1000);\n\n    fetch(guidePath, {\n      method: \"GET\",\n    })\n      .then((response) => {\n        if (!response.ok) {\n          handleError(loadingTimeout);\n        } else {\n          return response.json();\n        }\n      })\n      .then((data) => {\n        clearTimeout(loadingTimeout);\n        setTopics(data.topics);\n        setLoadingTopics(false);\n      })\n      .catch((error) => {\n        handleError(loadingTimeout);\n        console.error(\"Error fetching dropdown content:\", error);\n      });\n  };\n\n  useEffect(() => {\n    formik.setFieldValue(\"title\", prevSlug);\n  }, [prevSlug]);\n\n  return (\n    <AIToolsLayout>\n      <AIFormLayout\n        {...props}\n        collapsed={collapsed}\n        isLessThanSmallBreakpoint={isLessThanSmallBreakpoint}\n        setCollapsed={setCollapsed}\n        toolName={AI_TOOL_NAMES.ESSAY_PROMPTS}\n        loading={loading}\n        storageKey=\"essayPrompts\"\n        quotaRemaining={quotaRemaining}\n        formik={formik}\n      >\n        <Select\n          errorMessage={formik.errors.title}\n          id={REUSABLES.TITLE}\n          isDisabled={loading || disableFields}\n          isSearchable\n          labelText=\"Title\"\n          name={REUSABLES.TITLE}\n          options={options}\n          placeholder={!disableFields ? \"e.g. Hamlet (Shakespeare)\" : \"\"}\n          onChange={(e) => {\n            formik.setFieldValue(REUSABLES.TITLE, e.value);\n            formik.setFieldValue(REUSABLES.TOPIC, undefined);\n            formik.setFieldError(REUSABLES.TOPIC, undefined);\n            fetchDropdownContent(e.guide_path);\n          }}\n          value={formik.values.title}\n        />\n        {topics && !disableFields && (\n          <Select\n            errorMessage={\n              loadingTopics && formik.errors.topic\n                ? \"Loading, select one when complete\"\n                : formik.errors.topic\n            }\n            id={REUSABLES.TOPIC}\n            isDisabled={loadingTopics || loading || disableFields}\n            isSearchable\n            isControlled\n            isLoading={loadingTopics}\n            labelText=\"Topic\"\n            name={REUSABLES.TOPIC}\n            options={loadingTopics ? [AI_TOOLS_LOADING_DEFAULTS] : topics}\n            placeholder={!disableFields ? \"e.g. Themes\" : \"\"}\n            onChange={(e) => {\n              formik.setFieldValue(REUSABLES.TOPIC, e.value);\n\n              setSelectedTopic(topics.find((topic) => topic.value === e.value));\n            }}\n            value={\n              loadingTopics\n                ? AI_TOOLS_LOADING_DEFAULTS.value\n                : formik.values.topic\n            }\n          />\n        )}\n      </AIFormLayout>\n      <ChatArea messages={messages} />\n    </AIToolsLayout>\n  );\n};\n\nEssayPrompts.propTypes = {\n  submissionPath: PropTypes.string,\n  aiAnswersCompletePath: PropTypes.string,\n  locked: PropTypes.bool,\n  upgradeable: PropTypes.bool,\n  options: PropTypes.arrayOf(\n    PropTypes.shape({\n      name: PropTypes.string,\n      value: PropTypes.string,\n    })\n  ),\n  questionMinimum: PropTypes.number,\n  quotaRemaining: PropTypes.number.isRequired,\n  resetDate: PropTypes.string,\n  signupPath: PropTypes.string,\n};\n\nEssayPrompts.defaultProps = {\n  submissionPath: \"/ai/essay-prompt-generator\",\n  aiAnswersCompletePath: \"/ai_answers/complete\",\n  locked: false,\n  upgradeable: false,\n  options: [],\n  questionMinimum: 25,\n  resetDate: \"\",\n  signupPath: \"/sign-up?focus=teacher\",\n};\n\nexport default EssayPrompts;\n","import React, { useRef, useState } from \"react\";\nimport PropTypes from \"prop-types\";\nimport { Formik, yupToFormErrors } from \"formik\";\nimport * as Yup from \"yup\";\nimport Select from \"components/shared/Select\";\nimport InputTextCounter from \"components/shared/InputTextCounter\";\nimport helpers from \"helpers/base\";\n\nconst sessionStorageKey = \"inContentAskLitchartsAi\";\n\nconst validationSchema = Yup.object().shape({\n  title: Yup.string().required(\"Please select your title\"),\n  question: Yup.string()\n    .required(\"25 characters required\")\n    .min(25, \"25 characters required\")\n    .max(300, \"Over max character limit\"),\n});\n\nconst InContentAIForm = (props) => {\n  const {\n    loading,\n    locked,\n    onResourceChange,\n    onSubmit,\n    options = [],\n    questionMinimum,\n    quotaRemaining,\n    resetText,\n    signupPath,\n    values,\n  } = props;\n  const formRef = useRef(null);\n\n  const scrollAboveMobileKeyboard = () => {\n    // Keeps iPhone keyboard from covering textarea.\n    if (isSmallWindow() && helpers.isMobileAgent()) {\n      const form = formRef.current;\n\n      // Footer height minus a bit so we're not right up against the edge\n      const footerHeight = document.querySelector(\".footer\").clientHeight - 10;\n      window.scrollTo({\n        top: form.offsetTop + form.offsetHeight - footerHeight,\n        behavior: \"smooth\",\n      });\n    }\n  };\n\n  const isSmallWindow = () => {\n    return $(\".context-switch-banner:visible\").length;\n  };\n\n  const disableFields = !locked && quotaRemaining === 0;\n\n  const unpackValueFromStorage = (key) => {\n    const storageKey = `${sessionStorageKey}:${key}`;\n    const storedValue = sessionStorage.getItem(storageKey) || \"\";\n\n    sessionStorage.removeItem(storageKey);\n\n    return storedValue;\n  };\n\n  const [initialValues] = useState(() => {\n    return {\n      question: !disableFields\n        ? unpackValueFromStorage(\"question\") || values.question\n        : \"\",\n      title: !disableFields\n        ? unpackValueFromStorage(\"title\") || values.title\n        : \"\",\n    };\n  });\n\n  const storeFieldForReload = (key, value) => {\n    if (locked && !disableFields) {\n      const storageKey = `${sessionStorageKey}:${key}`;\n      sessionStorage.setItem(storageKey, value);\n    }\n  };\n\n  const handleSubmit = (formValues) => {\n    // Locked, redirect to sales page\n    if (locked && !disableFields) {\n      window.location.href = signupPath;\n      return;\n    }\n\n    // pass the values up to the parent to handle submission\n    onSubmit(formValues);\n  };\n\n  const validateForm = async (formValues) => {\n    let yupFormErrors = {};\n\n    if (locked) {\n      return yupFormErrors;\n    }\n\n    try {\n      await validationSchema.validate(formValues, { abortEarly: false });\n    } catch (e) {\n      yupFormErrors = yupToFormErrors(e);\n    }\n\n    return yupFormErrors;\n  };\n\n  return (\n    <Formik\n      initialValues={initialValues}\n      validateOnBlur={false}\n      validateOnChange={false}\n      validateOnMount={false}\n      validate={validateForm}\n      onSubmit={handleSubmit}\n    >\n      {(formik) => (\n        <form\n          ref={formRef}\n          onFocus={scrollAboveMobileKeyboard}\n          onSubmit={formik.handleSubmit}\n          className=\"ai-form--container in-content\"\n        >\n          <div className=\"ai-form--content !tw-overflow-y-visible\">\n            <div className=\"ai-form--body\">\n              {!locked && (\n                <div\n                  className=\"ai-form--banner lc-banner lc-banner-information\"\n                  data-testid=\"ai-form-banner\"\n                >\n                  {resetText}\n                </div>\n              )}\n              <div className=\"ai-form--fields !tw-gap-3\">\n                <Select\n                  errorMessage={formik.errors.title}\n                  id=\"title\"\n                  isDisabled={loading || disableFields}\n                  isSearchable\n                  maxMenuHeight={222}\n                  menuPlacement=\"top\"\n                  name=\"title\"\n                  options={options}\n                  onChange={(e) => {\n                    const fieldKey = \"title\";\n                    storeFieldForReload(fieldKey, e.value);\n                    formik.setFieldValue(fieldKey, e.value);\n                    onResourceChange(e.value);\n                  }}\n                  value={formik.values.title}\n                />\n                <InputTextCounter\n                  disabled={loading || disableFields}\n                  locked={locked}\n                  amplitudeKey={\n                    locked\n                      ? \"AIContentToolSignUpSubmitAttempt\"\n                      : \"AIContentToolSubmit\"\n                  }\n                  hideSubtext={disableFields}\n                  errorMessage={formik.errors.question}\n                  buttonVariant\n                  onSubmit={formik.handleSubmit}\n                  name=\"question\"\n                  min={questionMinimum}\n                  max={300}\n                  onChange={(e) => {\n                    const fieldKey = \"question\";\n                    formik.setFieldError(fieldKey, null);\n                    storeFieldForReload(fieldKey, e.target.value);\n                    formik.setFieldValue(fieldKey, e.target.value);\n                  }}\n                  // eslint-disable-next-line max-len\n                  placeholder={!disableFields ? \"Write your question...\" : \"\"}\n                  value={formik.values.question}\n                />\n              </div>\n            </div>\n          </div>\n        </form>\n      )}\n    </Formik>\n  );\n};\n\nInContentAIForm.propTypes = {\n  loading: PropTypes.bool,\n  locked: PropTypes.bool,\n  onResourceChange: PropTypes.func,\n  onSubmit: PropTypes.func,\n  options: PropTypes.arrayOf(\n    PropTypes.shape({\n      name: PropTypes.string,\n      value: PropTypes.string,\n    })\n  ),\n  questionMinimum: PropTypes.number,\n  quotaRemaining: PropTypes.number.isRequired,\n  resetText: PropTypes.string,\n  signupPath: PropTypes.string,\n  values: PropTypes.object,\n};\n\nInContentAIForm.defaultProps = {\n  loading: false,\n  locked: false,\n  onResourceChange: () => {},\n  onSubmit: () => {},\n  options: [],\n  questionMinimum: 25,\n  resetText: \"\",\n  signupPath: \"/sign-up?focus=teacher\",\n  values: {},\n};\n\nexport default InContentAIForm;\n","import React, { useEffect, useState } from \"react\";\nimport PropTypes from \"prop-types\";\nimport InContentAIForm from \"components/ai_tools/InContentAIForm\";\nimport ChatArea from \"components/ai_tools/ChatArea\";\nimport pluralize from \"pluralize\";\nimport fetch from \"lib/shared/fetch\";\n\nimport {\n  AI_TOOL_CHANNELS,\n  AI_TOOL_NAMES,\n  QUESTION_MINIMUM_LENGTH,\n} from \"./constants\";\nimport useChatMessages from \"./hooks/useChatMessages\";\n\nconst InContentAskLitchartsAI = (props) => {\n  const {\n    aiAnswersCompletePath,\n    guidesPath,\n    inPoetry,\n    locked,\n    options: optionsFromProps,\n    quotaRemaining: quotaFromProps,\n    resetDate,\n    resource,\n    signupPath,\n    submissionPath,\n  } = props;\n  const [options, setOptions] = useState(optionsFromProps);\n  const [resourceTitle, setResourceTitle] = useState(() => {\n    return options.find((option) => option.value === resource)?.title;\n  });\n  const { loading, quotaRemaining, messages, prevSlug, handleAskAIFormSubmit } =\n    useChatMessages(\n      {\n        aiAnswersCompletePath,\n        channel: AI_TOOL_CHANNELS.ASK_AI,\n        eventCategory: \"Ask LitCharts AI on Content Pages\",\n        inContent: true,\n        inPoetry,\n        locked,\n        quotaFromProps,\n        resourceTitle,\n        signupPath,\n        submissionPath,\n        toolName: AI_TOOL_NAMES.ASK_AI,\n        upgradeable: false,\n      },\n      [resourceTitle]\n    );\n\n  useEffect(() => {\n    scrollToolIntoViewOnTap();\n    fetchGuidesList();\n  }, []);\n\n  const handleResourceChange = (slug) => {\n    const newResourceTitle = options.find(\n      (option) => option.value === slug\n    ).title;\n    setResourceTitle(newResourceTitle);\n  };\n\n  const fetchGuidesList = () => {\n    fetch(guidesPath, { cache: \"default\" })\n      .then((response) => {\n        if (response.ok) return response.json();\n        if (response.status === 304) return response.json();\n\n        throw new Error(`Error fetching dropdown content: ${response.status}`);\n      })\n      .then((data) => {\n        // This is a hack :(\n        // When we replace `options` and pass it down to the form, and thus react-select, the dropdown is re-populated,\n        // however, it no longer has the correct option selected. I suspect it's because the value we initially pass in\n        // is no longer in the options array (pass by reference?). So we replace the identical entry in the new options\n        // list with the one already set up.\n        const newOptions = data.guides;\n        const indexToReplace = newOptions.findIndex(\n          (guide) => guide.value === options.at(0).value\n        );\n        newOptions[indexToReplace] = options.at(0);\n\n        setOptions(newOptions);\n      })\n      .catch((error) => {\n        console.error(\"Error fetching dropdown content:\", error);\n      });\n  };\n\n  const scrollToolIntoViewOnTap = () => {\n    // Scrolls AI tool into view when header or body are tapped.\n    const $scrollTarget = $(\".ask-litcharts-ai--in-content-container\");\n    const $tapTarget = $(\".ai-form--header, .chat-area--container\");\n    let offset;\n\n    function scrollToTop(event) {\n      if ($(event.target).is(\"a\")) {\n        return true;\n      }\n\n      let windowOffset = 120;\n      if (inPoetry) {\n        const $toolContainer = $(\"#poems-show__guide__ai-tool__container\");\n        windowOffset = $toolContainer.data().topOffset;\n      }\n\n      if (isSmallWindow()) {\n        offset = $(\".context-switch-banner:visible\").offset().top;\n      } else {\n        offset = $scrollTarget.offset().top - windowOffset;\n      }\n\n      window.scrollTo({\n        top: offset,\n        behavior: \"smooth\",\n      });\n    }\n\n    $tapTarget.on(\"click\", scrollToTop);\n  };\n\n  const isSmallWindow = () => {\n    return $(\".context-switch-banner:visible\").length;\n  };\n\n  const resetText = `${pluralize(\n    \"answers\",\n    quotaRemaining,\n    true\n  )} left (resets on ${resetDate})`;\n\n  return (\n    <div className=\"ask-litcharts-ai--in-content-container\">\n      <div className=\"ai-form--header body-1\">Ask LitCharts AI</div>\n      <ChatArea messages={messages} />\n      {resetDate && quotaRemaining === 0 ? (\n        <div className=\"ask-litcharts-ai--quota-remaining subtitle-2\">\n          <span>{resetText}</span>\n        </div>\n      ) : (\n        <InContentAIForm\n          {...props}\n          loading={loading}\n          onResourceChange={handleResourceChange}\n          onSubmit={handleAskAIFormSubmit}\n          options={options}\n          // Note, please read before removing:\n          // This line causes a re-render that clears out the \"Question\" field.\n          key={`quota-remaining-${quotaRemaining}`}\n          resetText={resetText}\n          quotaRemaining={quotaRemaining}\n          questionMinimum={QUESTION_MINIMUM_LENGTH}\n          values={{ title: prevSlug || resource }}\n        />\n      )}\n    </div>\n  );\n};\n\nInContentAskLitchartsAI.propTypes = {\n  aiAnswersCompletePath: PropTypes.string,\n  guidesPath: PropTypes.string,\n  inPoetry: PropTypes.bool,\n  locked: PropTypes.bool,\n  options: PropTypes.arrayOf(\n    PropTypes.shape({\n      name: PropTypes.string,\n      value: PropTypes.string,\n      label: PropTypes.string,\n      title: PropTypes.string,\n    })\n  ),\n  questionMinimum: PropTypes.number,\n  quotaRemaining: PropTypes.number.isRequired,\n  resetDate: PropTypes.string,\n  resource: PropTypes.string,\n  signupPath: PropTypes.string,\n  submissionPath: PropTypes.string,\n};\n\nInContentAskLitchartsAI.defaultProps = {\n  aiAnswersCompletePath: \"/ai_answers/complete\",\n  guidesPath: \"/ai/guides\",\n  inPoetry: false,\n  locked: false,\n  options: [],\n  questionMinimum: 25,\n  resetDate: \"\",\n  resource: null,\n  signupPath: \"/sign-up?focus=teacher\",\n  submissionPath: \"/ai/ask-litcharts-ai\",\n};\n\nexport default InContentAskLitchartsAI;\n","import React, { useState, useEffect } from \"react\";\nimport PropTypes from \"prop-types\";\nimport Select from \"components/shared/Select\";\nimport ChatArea from \"components/ai_tools/ChatArea\";\nimport { useFormik } from \"formik\";\nimport * as Yup from \"yup\";\nimport pluralize from \"pluralize\";\nimport AIToolsLayout from \"./layout/AIToolsLayout\";\nimport {\n  AI_TOOL_CHANNELS,\n  AI_TOOL_NAMES,\n  AI_TOOLS_LABEL_MAP,\n  AI_TOOLS_LOADING_DEFAULTS,\n  REUSABLES,\n} from \"./constants\";\nimport useChatMessages from \"./hooks/useChatMessages\";\nimport AIFormLayout from \"./shared/AIForm/AIFormLayout\";\nimport useFormDisableFields from \"./hooks/useFormDisableFields\";\nimport useWindowResizeAndFormCollapse from \"./hooks/useWindowResizeAndFormCollapse\";\n\nconst QuizQuestions = (props) => {\n  const {\n    quotaRemaining: quotaFromProps,\n    locked,\n    upgradeable,\n    signupPath,\n    submissionPath,\n    aiAnswersCompletePath,\n    options,\n  } = props;\n\n  const validationSchema = Yup.object().shape({\n    title: Yup.string().required(\"Please select your title\"),\n    topic: Yup.string().when(\"title\", (title) => {\n      if (title) {\n        return Yup.string().required(\"Please select your topic\");\n      }\n    }),\n    subtopic: Yup.string().when(\"topic\", (_) => {\n      if (selectedTopic?.data) {\n        return Yup.string().required(\n          `Please select your ${\n            AI_TOOLS_LABEL_MAP[selectedTopic.label] ??\n            selectedTopic.labelText?.toLowerCase()\n          }`\n        );\n      }\n    }),\n  });\n\n  const [loadingTopics, setLoadingTopics] = useState(false);\n  const [topics, setTopics] = useState();\n  const [selectedTopic, setSelectedTopic] = useState();\n  const [selectedSubtopic, setSelectedSubtopic] = useState();\n  const { isLessThanSmallBreakpoint, collapsed, setCollapsed } =\n    useWindowResizeAndFormCollapse();\n\n  const formik = useFormik({\n    initialValues: {\n      title: prevSlug || \"\",\n      topic: \"\",\n      subtopic: \"\",\n    },\n    validateOnChange: false,\n    validateOnBlur: false,\n    validationSchema,\n    onSubmit: (values) => {\n      validationSchema\n        .validate(values, { abortEarly: false })\n        .then(() => {\n          handleQuizDiscussionEssayPrompt(values);\n          if (isLessThanSmallBreakpoint) {\n            setCollapsed(true);\n          }\n        })\n        .catch((errors) => {\n          formik.setErrors(errors);\n        });\n    },\n  });\n\n  const {\n    loading,\n    quotaRemaining,\n    messages,\n    prevSlug,\n    handleQuizDiscussionEssayPrompt,\n  } = useChatMessages({\n    submissionPath,\n    aiAnswersCompletePath,\n    locked,\n    upgradeable,\n    signupPath,\n    quotaFromProps,\n    toolName: AI_TOOL_NAMES.QUIZ_QUESTIONS,\n    eventCategory: \"Quiz Questions Generator\",\n    channel: AI_TOOL_CHANNELS.QUIZ_QUESTIONS,\n    messageText: selectedSubtopic?.messageText ?? selectedTopic?.messageText,\n    formik,\n  });\n\n  const { disableFields } = useFormDisableFields(locked, quotaRemaining);\n\n  const handleError = (timeoutRef) => {\n    clearTimeout(timeoutRef);\n    setLoadingTopics(false);\n    setTopics([]);\n    formik.setFieldError(\"topic\", \"Data request failed. Please try again.\");\n  };\n\n  const fetchDropdownContent = (guidePath) => {\n    setTopics();\n    setSelectedTopic(null);\n    setSelectedSubtopic(null);\n    const loadingTimeout = setTimeout(() => {\n      setTopics([]);\n      setLoadingTopics(true);\n    }, 1000);\n\n    fetch(guidePath, {\n      method: \"GET\",\n    })\n      .then((response) => {\n        if (!response.ok) {\n          handleError(loadingTimeout);\n        } else {\n          return response.json();\n        }\n      })\n      .then((data) => {\n        clearTimeout(loadingTimeout);\n        setTopics(data.topics);\n        setLoadingTopics(false);\n      })\n      .catch((error) => {\n        handleError(loadingTimeout);\n        console.error(\"Error fetching dropdown content:\", error);\n      });\n  };\n\n  useEffect(() => {\n    formik.setFieldValue(\"title\", prevSlug);\n  }, [prevSlug]);\n\n  return (\n    <AIToolsLayout>\n      <AIFormLayout\n        {...props}\n        collapsed={collapsed}\n        isLessThanSmallBreakpoint={isLessThanSmallBreakpoint}\n        setCollapsed={setCollapsed}\n        toolName={AI_TOOL_NAMES.QUIZ_QUESTIONS}\n        loading={loading}\n        storageKey=\"quizQuestions\"\n        quotaRemaining={quotaRemaining}\n        formik={formik}\n      >\n        <Select\n          errorMessage={formik.errors.title}\n          id={REUSABLES.TITLE}\n          isDisabled={loading || disableFields}\n          isSearchable\n          labelText=\"Title\"\n          name={REUSABLES.TITLE}\n          options={options}\n          placeholder={!disableFields ? \"e.g. Hamlet (Shakespeare)\" : \"\"}\n          onChange={(e) => {\n            formik.setFieldValue(REUSABLES.TITLE, e.value);\n            formik.setFieldValue(REUSABLES.TOPIC, undefined);\n            formik.setFieldValue(REUSABLES.SUBTOPIC, undefined);\n            formik.setFieldError(REUSABLES.TOPIC, undefined);\n            formik.setFieldError(REUSABLES.SUBTOPIC, undefined);\n            fetchDropdownContent(e.guide_path);\n          }}\n          value={formik.values.title}\n        />\n        {topics && !disableFields && (\n          <Select\n            errorMessage={\n              loadingTopics && formik.errors.topic\n                ? \"Loading, select one when complete\"\n                : formik.errors.topic\n            }\n            id={REUSABLES.TOPIC}\n            isDisabled={loadingTopics || loading || disableFields}\n            isSearchable\n            isControlled\n            isLoading={loadingTopics}\n            labelText=\"Topic\"\n            name={REUSABLES.TOPIC}\n            options={loadingTopics ? [AI_TOOLS_LOADING_DEFAULTS] : topics}\n            placeholder={!disableFields ? \"e.g. Themes\" : \"\"}\n            onChange={(e) => {\n              formik.setFieldValue(REUSABLES.TOPIC, e.value);\n              formik.setFieldValue(REUSABLES.SUBTOPIC, undefined);\n              formik.setFieldError(REUSABLES.SUBTOPIC, undefined);\n\n              setSelectedTopic(topics.find((topic) => topic.value === e.value));\n              setSelectedSubtopic(null);\n            }}\n            value={\n              loadingTopics\n                ? AI_TOOLS_LOADING_DEFAULTS.value\n                : formik.values.topic\n            }\n          />\n        )}\n        {selectedTopic?.data && !disableFields && (\n          <Select\n            errorMessage={formik.errors.subtopic}\n            id={REUSABLES.SUBTOPIC}\n            isDisabled={loading || disableFields}\n            isSearchable\n            isControlled\n            labelText={\n              selectedTopic.labelText ??\n              pluralize(formik.values.topic, 1, false)\n            }\n            name={REUSABLES.SUBTOPIC}\n            options={selectedTopic.data}\n            placeholder={!disableFields ? \"Select one\" : \"\"}\n            onChange={(e) => {\n              formik.setFieldValue(REUSABLES.SUBTOPIC, e.value);\n              setSelectedSubtopic(\n                selectedTopic.data.find((topic) => topic.value === e.value)\n              );\n            }}\n            value={formik.values.subtopic}\n          />\n        )}\n      </AIFormLayout>\n      <ChatArea messages={messages} />\n    </AIToolsLayout>\n  );\n};\n\nQuizQuestions.propTypes = {\n  submissionPath: PropTypes.string,\n  aiAnswersCompletePath: PropTypes.string,\n  locked: PropTypes.bool,\n  upgradeable: PropTypes.bool,\n  options: PropTypes.arrayOf(\n    PropTypes.shape({\n      name: PropTypes.string,\n      value: PropTypes.string,\n    })\n  ),\n  questionMinimum: PropTypes.number,\n  quotaRemaining: PropTypes.number.isRequired,\n  resetDate: PropTypes.string,\n  signupPath: PropTypes.string,\n};\n\nQuizQuestions.defaultProps = {\n  submissionPath: \"/ai/quiz-question-generator\",\n  aiAnswersCompletePath: \"/ai_answers/complete\",\n  locked: false,\n  upgradeable: false,\n  options: [],\n  questionMinimum: 25,\n  resetDate: \"\",\n  signupPath: \"/sign-up?focus=teacher\",\n};\n\nexport default QuizQuestions;\n","export const AI_ANSWERS_QUOTA = 250;\nexport const QUESTION_MINIMUM_LENGTH = 25;\nexport const AI_TOOLS_ERROR_MESSAGES = {\n  ESSAY_PROMPTS:\n    \"Oops. Something went wrong. This response wasn't counted. Feel free to try again.\",\n  QUIZ_QUESTIONS:\n    \"Oops. Something went wrong. This response wasn't counted. Feel free to try again.\",\n  DISCUSSION_QUESTIONS:\n    \"Oops. Something went wrong. This response wasn't counted. Feel free to try again.\",\n  ASK_AI:\n    \"Oops. Something went wrong. Your remaining number of answers has not been reduced. Feel free to try again.\",\n};\n\nexport const AI_TOOL_CHANNELS = {\n  ESSAY_PROMPTS: \"EssayPromptsChannel\",\n  DISCUSSION_QUESTIONS: \"DiscussionQuestionsChannel\",\n  QUIZ_QUESTIONS: \"QuizQuestionsChannel\",\n  ASK_AI: \"AskAiChannel\",\n};\n\nexport const AI_TOOL_NAMES = {\n  ESSAY_PROMPTS: \"ESSAY_PROMPTS\",\n  DISCUSSION_QUESTIONS: \"DISCUSSION_QUESTIONS\",\n  QUIZ_QUESTIONS: \"QUIZ_QUESTIONS\",\n  ASK_AI: \"ASK_AI\",\n};\n\nexport const REUSABLES = {\n  TITLE: \"title\",\n  TOPIC: \"topic\",\n  SUBTOPIC: \"subtopic\",\n};\n\nexport const AI_TOOLS_LABEL_MAP = {\n  Characters: \"character\",\n  Symbols: \"symbol\",\n  Themes: \"theme\",\n  \"Line-by-Line Analysis\": \"lines\",\n  \"Poetic Devices\": \"poetic device\",\n};\n\nexport const AMPLITUDE_BANNER_DATA_ATTRIBUTES = {\n  [AI_TOOL_NAMES.DISCUSSION_QUESTIONS]: \"discussionQuestionGeneratorBanner\",\n  [AI_TOOL_NAMES.QUIZ_QUESTIONS]: \"quizQuestionGeneratorBanner\",\n  [AI_TOOL_NAMES.ESSAY_PROMPTS]: \"essayPromptGeneratorBanner\",\n  [AI_TOOL_NAMES.ASK_AI]: \"aiSignupBanner\",\n};\n\nexport const AMPLITUDE_QUESTION_ASKED_LARGE_ATTRIBUTES = {\n  [AI_TOOL_NAMES.DISCUSSION_QUESTIONS]: \"discussionQuestionAskedLarge\",\n  [AI_TOOL_NAMES.QUIZ_QUESTIONS]: \"quizQuestionAskedLarge\",\n  [AI_TOOL_NAMES.ESSAY_PROMPTS]: \"essayPromptAskedLarge\",\n  [AI_TOOL_NAMES.ASK_AI]: \"aiQuestionAskedLarge\",\n};\n\nexport const AMPLITUDE_QUESTION_ASKED_SMALL_ATTRIBUTES = {\n  [AI_TOOL_NAMES.DISCUSSION_QUESTIONS]: \"discussionQuestionAskedSmall\",\n  [AI_TOOL_NAMES.QUIZ_QUESTIONS]: \"quizQuestionAskedSmall\",\n  [AI_TOOL_NAMES.ESSAY_PROMPTS]: \"essayPromptAskedSmall\",\n  [AI_TOOL_NAMES.ASK_AI]: \"aiQuestionAskedSmall\",\n};\n\nexport const AMPLITUDE_QUESTION_ASKED_SMALL_COLLAPSED_ATTRIBUTES = {\n  [AI_TOOL_NAMES.DISCUSSION_QUESTIONS]: \"discussionQuestionAskedSmallCollapsed\",\n  [AI_TOOL_NAMES.QUIZ_QUESTIONS]: \"quizQuestionAskedSmallCollapsed\",\n  [AI_TOOL_NAMES.ESSAY_PROMPTS]: \"essayPromptAskedSmallCollapsed\",\n  [AI_TOOL_NAMES.ASK_AI]: \"aiQuestionAskedSmallCollapsed\",\n};\n\nexport const AMPLITUDE_SIGNUP_INTRO_CHAT_ATTRIBUTES = {\n  [AI_TOOL_NAMES.DISCUSSION_QUESTIONS]: \"discussionQuestionSignupIntroChat\",\n  [AI_TOOL_NAMES.QUIZ_QUESTIONS]: \"quizQuestionSignupIntroChat\",\n  [AI_TOOL_NAMES.ESSAY_PROMPTS]: \"essayPromptSignupIntroChat\",\n  [AI_TOOL_NAMES.ASK_AI]: \"aiSignupIntroChat\",\n};\n\nexport const AMPLITUDE_SIGNUP_FORM_LARGE_ATTRIBUTES = {\n  [AI_TOOL_NAMES.DISCUSSION_QUESTIONS]: \"discussionQuestionSignupFormLarge\",\n  [AI_TOOL_NAMES.QUIZ_QUESTIONS]: \"quizQuestionSignupFormLarge\",\n  [AI_TOOL_NAMES.ESSAY_PROMPTS]: \"essayPromptSignupFormLarge\",\n  [AI_TOOL_NAMES.ASK_AI]: \"aiSignupFormLarge\",\n};\n\nexport const AMPLITUDE_SIGNUP_FORM_SMALL_COLLAPSED_ATTRIBUTES = {\n  [AI_TOOL_NAMES.DISCUSSION_QUESTIONS]:\n    \"discussionQuestionSignupFormSmallCollapsed\",\n  [AI_TOOL_NAMES.QUIZ_QUESTIONS]: \"quizQuestionSignupFormSmallCollapsed\",\n  [AI_TOOL_NAMES.ESSAY_PROMPTS]: \"essayPromptSignupFormSmallCollapsed\",\n  [AI_TOOL_NAMES.ASK_AI]: \"aiSignupFormSmallCollapsed\",\n};\n\nexport const AI_TOOLS_LOADING_DEFAULTS = { label: \"Loading...\", value: \"1\" };\n","import React, { useState, useEffect, useRef } from \"react\";\nimport consumer from \"channels/consumer\";\nimport ReactHtmlParser from \"react-html-parser\";\nimport {\n  serverBubbleConfig,\n  userBubbleConfig,\n  DEFAULT_STATE,\n  LOADING_STATE,\n  STREAMING_STATE,\n} from \"components/ai_tools/ChatBubble\";\nimport fetch from \"lib/shared/fetch\";\nimport { logAiEvent } from \"lib/shared/events\";\nimport { findIndex } from \"lodash\";\nimport { AI_TOOLS_ERROR_MESSAGES } from \"../constants\";\nimport CopyAndSaveReminder from \"../shared/ChatArea/CopyAndSaveReminder\";\nimport InitialMessage from \"../shared/ChatArea/InitialMessage\";\n\nconst useChatMessages = (props, dependencies = []) => {\n  const {\n    aiAnswersCompletePath,\n    channel,\n    eventCategory,\n    inContent,\n    locked,\n    messageText,\n    quotaFromProps,\n    resourceTitle,\n    signupPath,\n    submissionPath,\n    toolName,\n    upgradeable,\n  } = props;\n  // The order matters for these state initializers\n  const [loading, setLoading] = useState(false);\n  const [quotaRemaining, setQuotaRemaining] = useState(quotaFromProps);\n  const [messages, setMessages] = useState([]);\n  const [prevSlug, setPrevSlug] = useState();\n  const messagesCallbacks = useRef([]);\n\n  const handleError = () => {\n    setMessages((prevMessages) => {\n      const copyArray = [...prevMessages];\n      const previousMessage = copyArray.pop();\n      const updatedMessage = {\n        ...previousMessage,\n        children: AI_TOOLS_ERROR_MESSAGES[toolName],\n        streamState: DEFAULT_STATE,\n      };\n\n      return [...copyArray, updatedMessage];\n    });\n    setLoading(false);\n  };\n\n  const handleRedirect = (json) => {\n    if (json?.redirect_to) {\n      window.location.replace(json.redirect_to);\n    }\n  };\n\n  const handleAskAIFormSubmit = ({ question, title: slug }) => {\n    setLoading(true);\n    messagesCallbacks.current.push(() => {\n      setMessages((prevMessages) => {\n        const newServerMessage = serverBubbleConfig({\n          streamState: LOADING_STATE,\n        });\n\n        return [...prevMessages, newServerMessage];\n      });\n    });\n\n    messagesCallbacks.current.push(() => {\n      fetch(submissionPath, {\n        method: \"POST\",\n        body: JSON.stringify({\n          resource: slug,\n          question,\n        }),\n      })\n        .then((response) => {\n          if (!response.ok) {\n            handleError();\n          } else {\n            return response.json();\n          }\n        })\n        .then(handleRedirect)\n        .catch(handleFetchError);\n    });\n\n    setPrevSlug(slug);\n    setMessages((prevMessages) => {\n      const newUserMessage = userBubbleConfig({ children: question });\n      return [...prevMessages, newUserMessage];\n    });\n  };\n\n  const handleQuizDiscussionEssayPrompt = ({\n    topic,\n    subtopic,\n    title: slug,\n  }) => {\n    setLoading(true);\n    messagesCallbacks.current.push(() => {\n      setMessages((prevMessages) => {\n        const newServerMessage = serverBubbleConfig({\n          streamState: LOADING_STATE,\n        });\n\n        return [...prevMessages, newServerMessage];\n      });\n    });\n\n    messagesCallbacks.current.push(() => {\n      fetch(submissionPath, {\n        method: \"POST\",\n        body: JSON.stringify({\n          resource: slug,\n          topic,\n          subtopic,\n        }),\n      })\n        .then((response) => {\n          // we're logged out somehow, like in another tab\n          if (response.status === 401) {\n            window.location.href = signupPath;\n            return;\n          }\n\n          if (!response.ok) {\n            handleError();\n          } else {\n            return response.json();\n          }\n        })\n        .then(handleRedirect)\n        .catch(handleFetchError);\n    });\n\n    setPrevSlug(slug);\n    setMessages((prevMessages) => {\n      const newUserMessage = userBubbleConfig({\n        children: ReactHtmlParser(messageText),\n      });\n      return [...prevMessages, newUserMessage];\n    });\n  };\n\n  const handleBroadcastReceived = (data) => {\n    if (data.stop) {\n      setLoading(false);\n      setMessages((prevMessages) => {\n        const copyArray = [...prevMessages];\n        const previousMessageIndex = findIndex(copyArray, {\n          aiAnswerId: data.ai_answer_id,\n        });\n\n        // We need this here to prevent the case of a user having two browsers/windows open with the same tool\n        // and having the data stream to both windows.  Previously, we were adding the <CopyAndSaveReminder />\n        // to both windows even though only one sent the message.  This makes sure to only handle the window in\n        // which the message came from.\n        if (previousMessageIndex !== -1) {\n          copyArray[previousMessageIndex].children = ReactHtmlParser(data.body);\n          copyArray[previousMessageIndex].streamState = DEFAULT_STATE;\n          messagesCallbacks.current.push(() => {\n            const reminderMessage = serverBubbleConfig({\n              children: <CopyAndSaveReminder />,\n            });\n\n            setMessages((prevMsgs) => [...prevMsgs, reminderMessage]);\n          });\n        }\n\n        return copyArray;\n      });\n      setQuotaRemaining((prev) => prev - 1);\n\n      if (data.ai_answer_id) {\n        fetch(aiAnswersCompletePath, {\n          method: \"POST\",\n          body: JSON.stringify({\n            ai_answer_id: data.ai_answer_id,\n          }),\n        })\n          .then((response) => {\n            if (!response.ok) {\n              handleError();\n            }\n          })\n          .catch(handleFetchError);\n      }\n      logAiEvent(\"AI Response Completed\", eventCategory);\n    } else if (data.error) {\n      handleError();\n    } else {\n      setMessages((prevMessages) => {\n        const copyArray = [...prevMessages];\n\n        let previousMessageIndex = findIndex(copyArray, {\n          aiAnswerId: data.ai_answer_id,\n        });\n\n        if (previousMessageIndex === -1) {\n          previousMessageIndex = copyArray.length - 1;\n        }\n\n        const previousMessage = copyArray[previousMessageIndex];\n\n        // Previous answer already completed with stop signal, do nothing\n        if (\n          previousMessageIndex !== -1 &&\n          previousMessage.streamState === DEFAULT_STATE\n        ) {\n          return prevMessages;\n        }\n\n        if (previousMessage.streamState === LOADING_STATE) {\n          logAiEvent(\"AI Response Started\", eventCategory);\n        }\n\n        const updatedMessage = {\n          ...previousMessage,\n          streamState: STREAMING_STATE,\n          aiAnswerId: data.ai_answer_id,\n          children: ReactHtmlParser(data.body),\n          slideUp: false,\n        };\n\n        copyArray.splice(previousMessageIndex, 1, updatedMessage);\n\n        return copyArray;\n      });\n    }\n  };\n\n  useEffect(() => {\n    if (messages.length > 1) return;\n\n    const initialMessage = serverBubbleConfig({\n      children: (\n        <InitialMessage\n          toolName={toolName}\n          locked={locked}\n          inContent={inContent}\n          resourceTitle={resourceTitle}\n          upgradeable={upgradeable}\n          quotaRemaining={quotaRemaining}\n          signupPath={signupPath}\n        />\n      ),\n      slideUp: false,\n    });\n\n    setMessages([initialMessage]);\n  }, dependencies);\n\n  useEffect(() => {\n    if (locked) return;\n    // Connect to the channel\n    consumer.subscriptions.create(\n      {\n        channel,\n      },\n      {\n        connected: () => console.log(\"connected\"),\n        disconnected: () => console.log(\"disconnected\"),\n        received: handleBroadcastReceived,\n      }\n    );\n\n    return () => {\n      consumer.disconnect();\n    };\n  }, []);\n\n  useEffect(() => {\n    messagesCallbacks.current.forEach((callback) => {\n      setTimeout(callback, 500);\n    });\n    messagesCallbacks.current = [];\n  }, [messages]);\n\n  const handleFetchError = () => {\n    // This block is executed if there is a network error or if the request fails\n    // The catch block captures exceptions thrown during the fetch operation,\n    // which could occur if the client is offline or if there are network connectivity issues.\n    handleError();\n  };\n\n  return {\n    loading,\n    quotaRemaining,\n    messages,\n    prevSlug,\n    handleAskAIFormSubmit,\n    handleQuizDiscussionEssayPrompt,\n  };\n};\n\nexport default useChatMessages;\n","const useFormDisableFields = (locked, quotaRemaining) => {\n  const disableFields = !locked && quotaRemaining === 0;\n  return { disableFields };\n};\n\nexport default useFormDisableFields;\n","import { useState, useEffect } from \"react\";\nimport pluralize from \"pluralize\";\nimport { AI_TOOL_NAMES } from \"../constants\";\n\nconst useFormText = (\n  toolName,\n  locked,\n  quotaRemaining,\n  collapsed,\n  isLessThanSmallBreakpoint,\n  resetDate\n) => {\n  const [buttonText, setButtonText] = useState(\"\");\n  const [resetText, setResetText] = useState(\"\");\n  const [submittingButtonText, setsubmittingButtonText] = useState(\"\");\n\n  let buttonRemainingText = \"\";\n  let buttonCTA = \"\";\n\n  useEffect(() => {\n    switch (toolName) {\n      case AI_TOOL_NAMES.QUIZ_QUESTIONS:\n      case AI_TOOL_NAMES.DISCUSSION_QUESTIONS:\n        buttonRemainingText =\n          !locked && quotaRemaining > 0\n            ? ` (${pluralize(\"use\", quotaRemaining, true)} left)`\n            : \"\";\n        buttonCTA = \"Generate Questions\";\n        if (quotaRemaining > 0 && !collapsed && isLessThanSmallBreakpoint) {\n          buttonCTA = \"Submit\";\n        }\n        setResetText(\n          `${pluralize(\n            \"use\",\n            quotaRemaining,\n            true\n          )} of this tool left (resets on ${resetDate})`\n        );\n        setsubmittingButtonText(\"Generating...\");\n\n        break;\n      case AI_TOOL_NAMES.ESSAY_PROMPTS:\n        buttonRemainingText =\n          !locked && quotaRemaining > 0\n            ? ` (${pluralize(\"use\", quotaRemaining, true)} left)`\n            : \"\";\n        buttonCTA = \"Generate Prompts\";\n        if (quotaRemaining > 0 && !collapsed && isLessThanSmallBreakpoint) {\n          buttonCTA = \"Submit\";\n        }\n        setResetText(\n          `${pluralize(\n            \"use\",\n            quotaRemaining,\n            true\n          )} of this tool left (resets on ${resetDate})`\n        );\n        setsubmittingButtonText(\"Generating...\");\n\n        break;\n      case AI_TOOL_NAMES.ASK_AI:\n        buttonRemainingText =\n          !locked && quotaRemaining > 0 ? ` (${quotaRemaining} left)` : \"\";\n        buttonCTA = \"Ask LitCharts AI\";\n        if (quotaRemaining > 0 && !collapsed && isLessThanSmallBreakpoint) {\n          buttonCTA = \"Submit\";\n        } else if (quotaRemaining > 0 && quotaRemaining < 25) {\n          buttonCTA = \"Ask New Question\";\n        }\n        setResetText(\n          `${pluralize(\n            \"answer\",\n            quotaRemaining,\n            true\n          )} left (resets on ${resetDate})`\n        );\n        setsubmittingButtonText(\"Answering...\");\n        break;\n      default:\n        setButtonText(\"\");\n        setResetText(\"\");\n        return;\n    }\n\n    setButtonText(buttonCTA + buttonRemainingText);\n  }, [\n    toolName,\n    locked,\n    quotaRemaining,\n    collapsed,\n    isLessThanSmallBreakpoint,\n    resetDate,\n  ]);\n\n  return { submittingButtonText, buttonText, resetText };\n};\n\nexport default useFormText;\n","const useSessionStorage = (sessionStorageKey, locked, disableFields) => {\n  const unpackValueFromStorage = (key) => {\n    const storageKey = `${sessionStorageKey}:${key}`;\n    const storedValue = sessionStorage.getItem(storageKey) || \"\";\n    sessionStorage.removeItem(storageKey);\n    return storedValue;\n  };\n\n  const storeFieldForReload = (key, value) => {\n    if (locked && !disableFields) {\n      const storageKey = `${sessionStorageKey}:${key}`;\n      sessionStorage.setItem(storageKey, value);\n    }\n  };\n\n  return [unpackValueFromStorage, storeFieldForReload];\n};\n\nexport default useSessionStorage;\n","import { useState, useEffect, useLayoutEffect } from \"react\";\nimport { SM_PIXEL_MIN, XS_PIXEL_MAX } from \"constants/breakpoints\";\n\nconst useWindowResizeAndFormCollapse = () => {\n  const [isLessThanSmallBreakpoint, setIsLessThanSmallBreakpoint] =\n    useState(true);\n  const [collapsed, setCollapsed] = useState(true);\n\n  const resizeHandler = () => {\n    if (window.matchMedia(`(min-width: ${SM_PIXEL_MIN}px)`).matches) {\n      setIsLessThanSmallBreakpoint(false);\n    } else if (window.matchMedia(`(max-width: ${XS_PIXEL_MAX}px)`).matches) {\n      setIsLessThanSmallBreakpoint(true);\n    }\n  };\n\n  useEffect(() => {\n    resizeHandler();\n    window.addEventListener(\"resize\", resizeHandler);\n    return () => {\n      window.removeEventListener(\"resize\", resizeHandler);\n    };\n  }, []);\n\n  useEffect(() => {\n    // Prevent the body from scrolling underneath the form field when on small screen\n    // and expanded\n    if (!collapsed && isLessThanSmallBreakpoint) {\n      document.body.style.overflow = \"hidden\";\n    } else {\n      document.body.style.overflow = \"auto\";\n    }\n  }, [collapsed, isLessThanSmallBreakpoint]);\n\n  useLayoutEffect(() => {\n    setCollapsed(isLessThanSmallBreakpoint);\n  }, [isLessThanSmallBreakpoint]);\n\n  return { isLessThanSmallBreakpoint, setCollapsed, collapsed };\n};\n\nexport default useWindowResizeAndFormCollapse;\n","import React, { useLayoutEffect, useRef } from \"react\";\n\n// Note: The props should consist of 2 children\n// Left Pane Child: This will be the form\n// Right Pane Child: This is the chat area\n// See AskLitchartsAI.jsx to see this in use.\n\nconst AIToolsLayout = (props) => {\n  const layoutRef = useRef();\n  const resizeHandler = () => {\n    const layoutBanner = document.querySelector(\"body > .lc-banner\");\n    const panelBanner = document.querySelector(\"#panel > .lc-banner\");\n    const promoBanner = document.querySelector(\"#sticky-mobile-header-promo\");\n    const header = document.querySelector(\".header\");\n    const layoutBannerHeight = layoutBanner?.offsetHeight || 0;\n    const panelBannerHeight = panelBanner?.offsetHeight || 0;\n    const promoBannerHeight = promoBanner?.offsetHeight || 0;\n    const headerHeight = header.offsetHeight;\n\n    const offset =\n      headerHeight + layoutBannerHeight + panelBannerHeight + promoBannerHeight;\n\n    layoutRef.current.style.height = `calc(100dvh -  ${offset}px)`;\n  };\n  useLayoutEffect(() => {\n    resizeHandler();\n\n    window.addEventListener(\"resize\", resizeHandler);\n    return () => {\n      window.removeEventListener(\"resize\", resizeHandler);\n    };\n  }, []);\n  return (\n    <div className=\"ai-tools--layout\" ref={layoutRef}>\n      <div className=\"ask-litcharts-ai--container\">\n        <div className=\"ask-litcharts-ai--form\">{props.children[0]}</div>\n        <div className=\"ask-litcharts-ai--chat_area\">{props.children[1]}</div>\n      </div>\n    </div>\n  );\n};\n\nexport default AIToolsLayout;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport classnames from \"classnames\";\nimport IconButton from \"components/shared/IconButton\";\nimport useFormDisableFields from \"../../hooks/useFormDisableFields\";\nimport useFormText from \"../../hooks/useFormText\";\nimport {\n  AI_TOOL_NAMES,\n  AMPLITUDE_QUESTION_ASKED_LARGE_ATTRIBUTES,\n  AMPLITUDE_QUESTION_ASKED_SMALL_ATTRIBUTES,\n  AMPLITUDE_QUESTION_ASKED_SMALL_COLLAPSED_ATTRIBUTES,\n  AMPLITUDE_SIGNUP_FORM_LARGE_ATTRIBUTES,\n  AMPLITUDE_SIGNUP_FORM_SMALL_COLLAPSED_ATTRIBUTES,\n} from \"../../constants\";\nimport AIFormTitle from \"./AIFormTitle\";\nimport LockedInformationBanner from \"./LockedInformationBanner\";\nimport AIFormSubheading from \"./AIFormSubheading\";\nimport DisclaimerText from \"./DisclaimerText\";\n\nconst AIFormLayout = (props) => {\n  const {\n    loading,\n    locked,\n    quotaRemaining,\n    resetDate,\n    signupPath,\n    toolName,\n    formik,\n    isLessThanSmallBreakpoint,\n    collapsed,\n    setCollapsed,\n    children,\n  } = props;\n\n  const { disableFields } = useFormDisableFields(locked, quotaRemaining);\n  const { buttonText, resetText, submittingButtonText } = useFormText(\n    toolName,\n    locked,\n    quotaRemaining,\n    collapsed,\n    isLessThanSmallBreakpoint,\n    resetDate\n  );\n  const showDisclaimerText = !collapsed || (collapsed && quotaRemaining === 0);\n\n  const handleSubmit = (e) => {\n    e.preventDefault();\n    // Locked, redirect to sales page\n    if (locked && !disableFields) {\n      window.location.href = signupPath;\n      return;\n    }\n\n    // We're in a collapsed state (smaller breakpoints)\n    // Expand the form\n    if (collapsed) {\n      setCollapsed(false);\n      return;\n    }\n\n    formik.handleSubmit();\n  };\n\n  const amplitudeSignupAttr = () => {\n    if (locked && !disableFields) {\n      if (isLessThanSmallBreakpoint) {\n        return collapsed\n          ? AMPLITUDE_SIGNUP_FORM_SMALL_COLLAPSED_ATTRIBUTES[toolName]\n          : AMPLITUDE_SIGNUP_FORM_LARGE_ATTRIBUTES[toolName];\n      }\n      return AMPLITUDE_SIGNUP_FORM_LARGE_ATTRIBUTES[toolName];\n    }\n    if (isLessThanSmallBreakpoint) {\n      return collapsed\n        ? AMPLITUDE_QUESTION_ASKED_SMALL_COLLAPSED_ATTRIBUTES[toolName]\n        : AMPLITUDE_QUESTION_ASKED_SMALL_ATTRIBUTES[toolName];\n    }\n    return AMPLITUDE_QUESTION_ASKED_LARGE_ATTRIBUTES[toolName];\n  };\n\n  return (\n    <form\n      onSubmit={handleSubmit}\n      className={classnames(\"ai-form--container\", { collapsed })}\n    >\n      <div className=\"ai-form--header\">\n        <AIFormTitle toolName={toolName} />\n        <AIFormSubheading toolName={toolName} />\n        <IconButton\n          iconClass=\"lc-icon-close lc-icon-xs\"\n          btnClass=\"btn-lg btn-borderless-alt\"\n          onClick={() => setCollapsed(true)}\n        />\n      </div>\n      <div className=\"ai-form--content\">\n        <div className=\"ai-form--body\">\n          <div\n            className=\"ai-form--banner lc-banner lc-banner-information\"\n            data-testid=\"ai-form-banner\"\n          >\n            {locked ? (\n              <LockedInformationBanner\n                toolName={toolName}\n                signupPath={signupPath}\n              />\n            ) : (\n              resetText\n            )}\n          </div>\n          <div className=\"ai-form--fields\">{children}</div>\n        </div>\n        <div className=\"ai-form--footer\">\n          <button\n            className={`ai-form--submit btn btn-a-plus button-1 ${\n              isLessThanSmallBreakpoint ? \"btn-lg\" : \"btn-block\"\n            }`}\n            data-testid=\"ai-form-submit\"\n            data-amplitude={amplitudeSignupAttr()}\n            disabled={disableFields || loading}\n            type=\"submit\"\n          >\n            {locked && (\n              <i\n                className=\"lc-icon lc-icon-lock-filled lc-icon-sm\"\n                data-testid=\"lock-icon\"\n              />\n            )}\n            {loading ? submittingButtonText : buttonText}\n          </button>\n          {!locked && showDisclaimerText && (\n            <div className=\"subtitle-1 tw-flex tw-pt-2 tw-text-gray-tint-40\">\n              {collapsed && quotaRemaining === 0 && resetText}\n              {!collapsed && (\n                <DisclaimerText className=\"tw-self-center tw-text-center tw-flex-grow\" />\n              )}\n            </div>\n          )}\n        </div>\n      </div>\n    </form>\n  );\n};\n\nAIFormLayout.propTypes = {\n  formik: PropTypes.shape({\n    handleSubmit: PropTypes.func.isRequired,\n    values: PropTypes.object.isRequired,\n    errors: PropTypes.object,\n    touched: PropTypes.object,\n    handleChange: PropTypes.func.isRequired,\n    handleBlur: PropTypes.func.isRequired,\n    isSubmitting: PropTypes.bool,\n  }).isRequired,\n  toolName: PropTypes.oneOf(Object.values(AI_TOOL_NAMES)).isRequired,\n  loading: PropTypes.bool,\n  locked: PropTypes.bool,\n  quotaRemaining: PropTypes.number.isRequired,\n  resetDate: PropTypes.string,\n  signupPath: PropTypes.string,\n  isLessThanSmallBreakpoint: PropTypes.bool.isRequired,\n  collapsed: PropTypes.bool.isRequired,\n  setCollapsed: PropTypes.func.isRequired,\n  children: PropTypes.func.isRequired,\n};\n\nAIFormLayout.defaultProps = {\n  loading: false,\n  locked: false,\n  resetDate: \"\",\n  signupPath: \"/sign-up?focus=teacher\",\n};\n\nexport default AIFormLayout;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { AI_TOOL_NAMES } from \"../../constants\";\n\nconst AIFormSubheading = ({ toolName }) => {\n  switch (toolName) {\n    case AI_TOOL_NAMES.ASK_AI:\n      return (\n        <div className=\"subtitle-1\">\n          The only tool that combines the world&apos;s best literary analysis\n          with the power of AI.\n        </div>\n      );\n    case AI_TOOL_NAMES.DISCUSSION_QUESTIONS:\n      return (\n        <div className=\"subtitle-1\">\n          Instantly generate discussion questions by combining the world&apos;s\n          best literary analysis with the power of AI.\n        </div>\n      );\n    case AI_TOOL_NAMES.QUIZ_QUESTIONS:\n      return (\n        <div className=\"subtitle-1\">\n          Instantly generate quiz questions by combining the world&apos;s best\n          literary analysis with the power of AI.\n        </div>\n      );\n    case AI_TOOL_NAMES.ESSAY_PROMPTS:\n      return (\n        <div className=\"subtitle-1\">\n          Instantly generate essay prompts by combining the world&apos;s best\n          literary analysis with the power of AI.\n        </div>\n      );\n    default:\n      return null;\n  }\n};\n\nAIFormSubheading.propTypes = {\n  toolName: PropTypes.oneOf(Object.values(AI_TOOL_NAMES)).isRequired,\n};\n\nexport default AIFormSubheading;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { AI_TOOL_NAMES } from \"../../constants\";\n\nconst AIFormTitle = ({ toolName }) => {\n  switch (toolName) {\n    case AI_TOOL_NAMES.ASK_AI:\n      return <div className=\"title-5\">Ask LitCharts AI</div>;\n    case AI_TOOL_NAMES.DISCUSSION_QUESTIONS:\n      return <div className=\"title-5\">Discussion Question Generator</div>;\n    case AI_TOOL_NAMES.QUIZ_QUESTIONS:\n      return <div className=\"title-5\">Quiz Question Generator</div>;\n    case AI_TOOL_NAMES.ESSAY_PROMPTS:\n      return <div className=\"title-5\">Essay Prompt Generator</div>;\n    default:\n      return null;\n  }\n};\n\nAIFormTitle.propTypes = {\n  toolName: PropTypes.oneOf(Object.values(AI_TOOL_NAMES)).isRequired,\n};\n\nexport default AIFormTitle;\n","import React, { useEffect, useRef, useState } from \"react\";\nimport { handleKeyPress } from \"components/shared/helpers/keyPressHelpers\";\nimport useClickOutsideElement from \"components/shared/hooks/useClickOutsideElement\";\n\nconst popoverText = \"AI responses may be inaccurate or inappropriate.\";\n\nconst popoverOptions = {\n  container: \"body\",\n  content: popoverText,\n  html: true,\n  placement: \"bottom\",\n  template: `\n    <div class=\"ai-disclaimer-popover popover tw-w-[198px] tw-bg-teal tw-border-0\" role=\"tooltip\">\n      <div class=\"arrow !tw-border-b-teal after:!tw-border-b-teal\"></div>\n      <div class=\"popover-body button-2 tw-text-white tw-py-1 tw-px-2\">\n        ${popoverText}\n      </div>\n    </div>\n  `,\n  toggle: \"popover\",\n  trigger: \"manual\",\n};\n\nexport default function DisclaimerText({ className = \"\" }) {\n  const [tooltipActive, setTooltipActive] = useState(false);\n  const tooltipRef = useRef();\n  const touchEventRef = useRef(false);\n\n  // For whatever reason, iOS is triggering both mouseenter and click events\n  // when tapping. This is used at the start of the event to determine if we\n  // need to skip the mouseenter event\n  const setTouchActive = () => {\n    touchEventRef.current = true;\n  };\n\n  const dismissPopover = () => {\n    $(tooltipRef.current).popover(\"hide\");\n  };\n\n  const showPopover = () => {\n    $(tooltipRef.current).popover(\"show\");\n  };\n  const handleKeyDown = (event) => {\n    handleKeyPress(event, () => setTooltipActive(!tooltipActive));\n  };\n\n  // Setup the popover\n  useEffect(() => {\n    $(tooltipRef.current).popover(popoverOptions);\n  }, []);\n\n  // Use state to control tooltip appearance\n  useEffect(() => {\n    if (tooltipActive) {\n      showPopover();\n    } else {\n      dismissPopover();\n    }\n  }, [tooltipActive]);\n\n  // Dismiss popover on window resize\n  useEffect(() => {\n    window.addEventListener(\"resize\", dismissPopover);\n\n    return () => {\n      window.removeEventListener(\"resize\", dismissPopover);\n    };\n  }, []);\n\n  useClickOutsideElement(tooltipRef, dismissPopover);\n\n  return (\n    <span className={className}>\n      Generated by{\" \"}\n      <span\n        className=\"tw-underline tw-cursor-pointer focus-visible:tw-outline-teal\"\n        onMouseEnter={() => setTooltipActive(!touchEventRef.current)}\n        onMouseLeave={() => setTooltipActive(false)}\n        onClick={() => setTooltipActive(!tooltipActive)}\n        onKeyDown={handleKeyDown}\n        onTouchStart={setTouchActive}\n        ref={tooltipRef}\n        role=\"button\"\n        tabIndex={0}\n      >\n        AI\n      </span>{\" \"}\n      using LitCharts content.\n    </span>\n  );\n}\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport {\n  AI_TOOL_NAMES,\n  AMPLITUDE_BANNER_DATA_ATTRIBUTES,\n  AI_ANSWERS_QUOTA,\n} from \"../../constants\";\n\nconst LockedInformationBanner = ({ toolName, signupPath }) => {\n  const amplitudeDataAttribute = AMPLITUDE_BANNER_DATA_ATTRIBUTES[toolName];\n\n  switch (toolName) {\n    case AI_TOOL_NAMES.ASK_AI:\n      return (\n        <a href={signupPath} data-amplitude={amplitudeDataAttribute}>\n          Get {AI_ANSWERS_QUOTA} answers per month\n        </a>\n      );\n    case AI_TOOL_NAMES.DISCUSSION_QUESTIONS:\n    case AI_TOOL_NAMES.QUIZ_QUESTIONS:\n    case AI_TOOL_NAMES.ESSAY_PROMPTS:\n      return (\n        <>\n          Get {AI_ANSWERS_QUOTA} uses of this tool per month with{\" \"}\n          <a href={signupPath} data-amplitude={amplitudeDataAttribute}>\n            A<sup>+</sup> Teacher\n          </a>\n        </>\n      );\n    default:\n      return null;\n  }\n};\n\nLockedInformationBanner.propTypes = {\n  signupPath: PropTypes.string.isRequired,\n  toolName: PropTypes.oneOf(Object.values(AI_TOOL_NAMES)).isRequired,\n};\n\nexport default LockedInformationBanner;\n","import React from \"react\";\n\nconst CopyAndSaveReminder = () => {\n  return (\n    <div className=\"ask-litcharts-ai--message\">\n      <div className=\"body-2 notice\">\n        <strong>Important: </strong>\n        Copy and save this response. It will disappear if you refresh or leave\n        this page.\n      </div>\n    </div>\n  );\n};\n\nexport default CopyAndSaveReminder;\n","import React from \"react\";\nimport InitialMessageDescription from \"./InitialMessageDescription\";\nimport InitialMessageBullets from \"./InitialMessageBullets\";\nimport InitialMessageExample from \"./InitialMessageExample\";\n\nconst InitialMessage = ({\n  inContent,\n  toolName,\n  locked,\n  upgradeable,\n  quotaRemaining,\n  resourceTitle,\n  signupPath,\n}) => {\n  return (\n    <>\n      <div className=\"ask-litcharts-ai--intro\">\n        <div className=\"hand-wave\" />\n        <div className=\"body-2 ask-litcharts-ai--hello\">\n          Hello! I&apos;m LitCharts AI\n        </div>\n        <InitialMessageDescription\n          toolName={toolName}\n          resourceTitle={resourceTitle}\n          inContent={inContent}\n        />\n      </div>\n      <InitialMessageBullets\n        quotaRemaining={quotaRemaining}\n        inContent={inContent}\n        toolName={toolName}\n        signupPath={signupPath}\n        locked={locked}\n        upgradeable={upgradeable}\n      />\n      <InitialMessageExample\n        toolName={toolName}\n        locked={locked}\n        inContent={inContent}\n      />\n    </>\n  );\n};\n\nexport default InitialMessage;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport DisclaimerText from \"components/ai_tools/shared/AIForm/DisclaimerText\";\nimport {\n  AI_TOOL_NAMES,\n  AMPLITUDE_SIGNUP_INTRO_CHAT_ATTRIBUTES,\n  AI_ANSWERS_QUOTA,\n} from \"../../constants\";\nimport useWindowResizeAndFormCollapse from \"../../hooks/useWindowResizeAndFormCollapse\";\n\nconst InitialMessageBullets = ({\n  inContent,\n  locked,\n  quotaRemaining,\n  signupPath,\n  toolName,\n  upgradeable,\n}) => {\n  const { isLessThanSmallBreakpoint } = useWindowResizeAndFormCollapse();\n  const amplitudeKey = AMPLITUDE_SIGNUP_INTRO_CHAT_ATTRIBUTES[toolName];\n\n  switch (toolName) {\n    case AI_TOOL_NAMES.ASK_AI:\n      if (inContent) {\n        if (locked) {\n          return (\n            <div>\n              <a\n                href={signupPath}\n                data-amplitude=\"AIContentToolSignUpChatBubble\"\n              >\n                Get {AI_ANSWERS_QUOTA} answers per month.\n              </a>\n            </div>\n          );\n        }\n        return (\n          <div className=\"ai-form--disclaimer\">\n            <DisclaimerText />\n          </div>\n        );\n      }\n\n      return (\n        <ol className=\"body-2 ask-litcharts-ai--list\">\n          {locked && (\n            <li>\n              <a href={signupPath} data-amplitude={amplitudeKey}>\n                Sign up for LitCharts A<sup>+</sup>\n              </a>\n            </li>\n          )}\n          {!locked && quotaRemaining > 0 && (\n            <li className=\"ask-litcharts-ai--list_ask-step\">\n              Tap the Ask button\n            </li>\n          )}\n          <li>Select a title in the dropdown</li>\n          <li>Submit your question about that title</li>\n        </ol>\n      );\n    case AI_TOOL_NAMES.DISCUSSION_QUESTIONS:\n      return (\n        <ol className=\"body-2 ask-litcharts-ai--list\">\n          {locked && upgradeable && (\n            <li>\n              <a href={signupPath} data-amplitude={amplitudeKey}>\n                Upgrade to LitCharts A<sup>+</sup> Teacher\n              </a>\n            </li>\n          )}\n          {locked && !upgradeable && (\n            <li>\n              <a href={signupPath} data-amplitude={amplitudeKey}>\n                Sign up for LitCharts A<sup>+</sup> Teacher\n              </a>\n            </li>\n          )}\n          {!locked && isLessThanSmallBreakpoint && (\n            <li>Tap the Generate Questions button</li>\n          )}\n          <li>Submit a title and discussion topic</li>\n          <li>Get your discussion questions</li>\n        </ol>\n      );\n    case AI_TOOL_NAMES.QUIZ_QUESTIONS:\n      return (\n        <ol className=\"body-2 ask-litcharts-ai--list\">\n          {locked && upgradeable && (\n            <li>\n              <a href={signupPath} data-amplitude={amplitudeKey}>\n                Upgrade to LitCharts A<sup>+</sup> Teacher\n              </a>\n            </li>\n          )}\n          {locked && !upgradeable && (\n            <li>\n              <a href={signupPath} data-amplitude={amplitudeKey}>\n                Sign up for LitCharts A<sup>+</sup> Teacher\n              </a>\n            </li>\n          )}\n          {!locked && isLessThanSmallBreakpoint && (\n            <li>Tap the Generate Questions button</li>\n          )}\n          <li>Submit a title and quiz topic</li>\n          <li>Get your quiz questions</li>\n        </ol>\n      );\n    case AI_TOOL_NAMES.ESSAY_PROMPTS:\n      return (\n        <ol className=\"body-2 ask-litcharts-ai--list\">\n          {locked && upgradeable && (\n            <li>\n              <a href={signupPath} data-amplitude={amplitudeKey}>\n                Upgrade to LitCharts A<sup>+</sup> Teacher\n              </a>\n            </li>\n          )}\n          {locked && !upgradeable && (\n            <li>\n              <a href={signupPath} data-amplitude={amplitudeKey}>\n                Sign up for LitCharts A<sup>+</sup> Teacher\n              </a>\n            </li>\n          )}\n          {!locked && isLessThanSmallBreakpoint && (\n            <li>Tap the Generate Prompts button</li>\n          )}\n          <li>Submit a title and essay topic</li>\n          <li>Get your essay prompts</li>\n        </ol>\n      );\n    default:\n      return null;\n  }\n};\n\nInitialMessageBullets.propTypes = {\n  quotaRemaining: PropTypes.number.isRequired,\n  signupPath: PropTypes.string.isRequired,\n  locked: PropTypes.bool.isRequired,\n  upgradeable: PropTypes.bool,\n  toolName: PropTypes.oneOf(Object.values(AI_TOOL_NAMES)).isRequired,\n};\n\nInitialMessageBullets.defaultProps = {\n  upgradeable: false,\n};\n\nexport default InitialMessageBullets;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { AI_TOOL_NAMES } from \"../../constants\";\n\nconst InitialMessageDescription = ({ toolName, resourceTitle, inContent }) => {\n  switch (toolName) {\n    case AI_TOOL_NAMES.ASK_AI:\n      return inContent ? (\n        <div className=\"body-2 ask-litcharts-ai--description\">\n          Combining the literary wisdom of LitCharts and the power of AI, I can\n          answer your questions about <i>{resourceTitle}</i> or any other title\n          we cover, instantly.\n        </div>\n      ) : (\n        <div className=\"body-2 ask-litcharts-ai--description\">\n          Need help with literature? Ask me anything. Combining the literary\n          wisdom of LitCharts and the power of AI, I&apos;m here to provide\n          instant answers and explanations. Complete these steps to get help in\n          seconds:\n        </div>\n      );\n    case AI_TOOL_NAMES.DISCUSSION_QUESTIONS:\n      return (\n        <div className=\"body-2 ask-litcharts-ai--description\">\n          Combining the literary wisdom of LitCharts and the power of AI, I can\n          help you instantly create discussion questions that will get people\n          talking. Just complete these steps:\n        </div>\n      );\n    case AI_TOOL_NAMES.QUIZ_QUESTIONS:\n      return (\n        <div className=\"body-2 ask-litcharts-ai--description\">\n          Combining the literary wisdom of LitCharts and the power of AI, I can\n          instantly create focused quiz questions that you can use or modify as\n          you desire. Just complete these steps:\n        </div>\n      );\n    case AI_TOOL_NAMES.ESSAY_PROMPTS:\n      return (\n        <div className=\"body-2 ask-litcharts-ai--description\">\n          Combining the literary wisdom of LitCharts and the power of AI, I can\n          instantly create thought-provoking essay prompts that you can use or\n          modify as you desire. Just complete these steps:\n        </div>\n      );\n    default:\n      return null;\n  }\n};\n\nInitialMessageDescription.propTypes = {\n  inContent: PropTypes.bool,\n  resourceTitle: PropTypes.string,\n  toolName: PropTypes.oneOf(Object.values(AI_TOOL_NAMES)).isRequired,\n};\n\nexport default InitialMessageDescription;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport AskAiImg from \"images/components/ai-tools/ask-ai-intro.gif\";\nimport EpgImg from \"images/components/ai-tools/epg-intro.gif\";\nimport DqgImg from \"images/components/ai-tools/dqg-intro.gif\";\nimport QqgImg from \"images/components/ai-tools/qqg-intro.gif\";\n\nimport { AI_TOOL_NAMES } from \"../../constants\";\n\nconst InitialMessageExample = ({ locked, toolName, inContent }) => {\n  switch (toolName) {\n    case AI_TOOL_NAMES.ASK_AI:\n      if (inContent) {\n        return null;\n      }\n\n      if (locked) {\n        return (\n          <div className=\"body-2\">\n            <span>See Ask LitCharts AI in action below:</span>\n            <img\n              className=\"ask-litcharts-ai--gif\"\n              src={AskAiImg}\n              alt=\"Ask LitCharts AI intro\"\n            />\n          </div>\n        );\n      }\n\n      return (\n        <div className=\"body-2 notice\">\n          For best results, make your questions as specific as possible.\n        </div>\n      );\n    case AI_TOOL_NAMES.DISCUSSION_QUESTIONS:\n      return locked ? (\n        <div className=\"body-2\">\n          <span>See the Discussion Question Generator in action below:</span>\n          <img\n            className=\"ask-litcharts-ai--gif\"\n            src={DqgImg}\n            alt=\"Ask LitCharts AI intro\"\n          />\n        </div>\n      ) : null;\n    case AI_TOOL_NAMES.QUIZ_QUESTIONS:\n      return locked ? (\n        <div className=\"body-2\">\n          <span>See the Quiz Question Generator in action below:</span>\n          <img\n            className=\"ask-litcharts-ai--gif\"\n            src={QqgImg}\n            alt=\"Ask LitCharts AI intro\"\n          />\n        </div>\n      ) : null;\n    case AI_TOOL_NAMES.ESSAY_PROMPTS:\n      return locked ? (\n        <div className=\"body-2\">\n          <span>See the Essay Prompt Generator in action below:</span>\n          <img\n            className=\"ask-litcharts-ai--gif\"\n            src={EpgImg}\n            alt=\"Ask LitCharts AI intro\"\n          />\n        </div>\n      ) : null;\n    default:\n      return null;\n  }\n};\n\nInitialMessageExample.propTypes = {\n  locked: PropTypes.bool.isRequired,\n  toolName: PropTypes.oneOf(Object.values(AI_TOOL_NAMES)).isRequired,\n  inContent: PropTypes.bool.isRequired,\n};\n\nexport default InitialMessageExample;\n","import React, { useState } from \"react\";\nimport PropTypes from \"prop-types\";\nimport { reject } from \"lodash\";\nimport LitCard from \"../shared/LitCard\";\n\nconst propTypes = {\n  bookmarks: PropTypes.array,\n};\n\n// This is basically a very trimmed down copy of the `GuideList` component\n// in order to reuse existing stylings for lit cards organization.\n\nfunction EmptyContainer({ browsePath, emptyImgSrc }) {\n  return (\n    <div className=\"bookmarks-container__empty\">\n      <img\n        alt=\"save guide illustration\"\n        className=\"bookmarks-empty__image\"\n        src={emptyImgSrc}\n      />\n      <div className=\"bookmarks-empty__description\">\n        <span className=\"body-1\">You haven&apos;t saved any guides yet.</span>\n        <span className=\"body-1\">Save your first guide!</span>\n      </div>\n      <a\n        className=\"btn btn-lg btn-default bookmarks-empty_browse-btn\"\n        href={browsePath}\n      >\n        Browse Guides\n      </a>\n    </div>\n  );\n}\n\nexport default function BookmarkList({\n  bookmarks: bookmarksFromProps,\n  browsePath,\n  emptyImgSrc,\n}) {\n  const [bookmarks, setBookmarks] = useState(bookmarksFromProps);\n  const subtitleText =\n    bookmarks.length > 1\n      ? `Here are the ${bookmarks.length} guides you've saved.`\n      : \"Here is the 1 guide you've saved.\";\n\n  const handleRemoveBookmark = (bookmarkId) => {\n    const newBookmarks = reject(\n      bookmarks,\n      (bookmark) => bookmark.bookmarkId === bookmarkId\n    );\n    setBookmarks(newBookmarks);\n  };\n\n  return (\n    <div>\n      {bookmarks.length > 0 ? (\n        <>\n          <div className=\"bookmarks__subtitle subtitle-1\">{subtitleText}</div>\n          <div className=\"guide-list\">\n            <div className=\"guide-list__groups-wrapper\">\n              <ul className=\"guide-list__groups guide-list__groups--grid\">\n                <li className=\"guide-list__group\">\n                  <ul className=\"guide-list__guides\">\n                    <div className=\"row\">\n                      {bookmarks.map((bookmark, index) => (\n                        <div\n                          className=\"col-xxs-12 col-xs-6 col-sm-6 col-md-4 col-lg-4\"\n                          key={bookmark.slug}\n                        >\n                          <li className=\"guide-list__guide\">\n                            <LitCard\n                              {...bookmark}\n                              hideSuccessCta\n                              index={index}\n                              onRemoval={handleRemoveBookmark}\n                              includeTags\n                              userSignedIn\n                            />\n                          </li>\n                        </div>\n                      ))}\n                    </div>\n                  </ul>\n                </li>\n              </ul>\n            </div>\n          </div>\n        </>\n      ) : (\n        <EmptyContainer browsePath={browsePath} emptyImgSrc={emptyImgSrc} />\n      )}\n    </div>\n  );\n}\n\nBookmarkList.propTypes = propTypes;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport Checkbox from \"../shared/Checkbox\";\nimport APlusDialog from \"../shared/dialogs/APlus\";\n\nclass RelatedThemesFilterBox extends React.Component {\n  static propTypes = {\n    filterables: PropTypes.array.isRequired,\n    header: PropTypes.string.isRequired,\n    isPromoVisible: PropTypes.bool.isRequired,\n    isSubscribed: PropTypes.bool.isRequired,\n    isFreeTier: PropTypes.bool.isRequired,\n    onChange: PropTypes.func,\n    showSidebarPromo: PropTypes.func.isRequired,\n    totalFilters: PropTypes.number.isRequired,\n  };\n\n  constructor(props) {\n    super(props);\n\n    this.onCheckboxChange = (e) => {\n      if (!props.isSubscribed) {\n        e.preventDefault();\n        props.showSidebarPromo();\n        return;\n      }\n\n      const { target } = e;\n\n      if (target.checked) {\n        this.setState({ selected: this.state.selected.concat([target.value]) });\n      } else {\n        this.setState({\n          selected: this.state.selected.filter((s) => s !== target.value),\n        });\n      }\n    };\n\n    this.onMoreToggleClick = (e) => {\n      if (!props.isSubscribed) {\n        props.showSidebarPromo();\n        return;\n      }\n\n      this.setState({ allVisible: !this.state.allVisible });\n    };\n\n    this.state = {\n      allVisible: false,\n      selected: [],\n    };\n  }\n\n  componentDidUpdate(prevProps, prevState) {\n    if (\n      this.state.selected.length !== prevState.selected.length &&\n      this.props.onChange\n    ) {\n      this.props.onChange(this.state.selected);\n    }\n  }\n\n  renderMoreToggleBtn() {\n    const { allVisible } = this.state;\n    const { header, totalFilters } = this.props;\n\n    if (totalFilters <= 5) {\n      return null;\n    }\n\n    return (\n      <button\n        className=\"btn btn-borderless btn-text btn-xs related-themes__show-more-less\"\n        onClick={this.onMoreToggleClick}\n      >\n        {`See ${allVisible ? \"less\" : \"more\"} ${header.toLowerCase()}s`}\n      </button>\n    );\n  }\n\n  render() {\n    const { allVisible } = this.state;\n    const { header, isPromoVisible, totalFilters } = this.props;\n    let { filterables } = this.props;\n\n    if (!allVisible) {\n      filterables = filterables.slice(0, 5);\n    }\n\n    return (\n      <div className=\"filter-box\" style={{ position: \"relative\" }}>\n        {isPromoVisible && <div className=\"overlay\" style={{ zIndex: \"1\" }} />}\n        <div className=\"header lit-guides\">\n          {header} ({totalFilters})\n        </div>\n        <ul className=\"list list_checkbox\">\n          {filterables.map((f) => (\n            <li className=\"list__item\" key={f.label}>\n              <Checkbox\n                label={`${f.label} (${f.count})`}\n                name={`filter_checkbox_${f.label\n                  .toLowerCase()\n                  .replace(/\\W/g, \"-\")}`}\n                onChange={this.onCheckboxChange}\n                value={f.label}\n              />\n            </li>\n          ))}\n        </ul>\n        {this.renderMoreToggleBtn()}\n      </div>\n    );\n  }\n}\n\nexport default class RelatedThemes extends React.Component {\n  static propTypes = {\n    aPlusDialogContent: PropTypes.string.isRequired,\n    aPlusDialogHref: PropTypes.string.isRequired,\n    aPlusDialogLogoSrc: PropTypes.string.isRequired,\n    blurredThemesImgSrc: PropTypes.string,\n    filterableAuthorCount: PropTypes.number.isRequired,\n    filteredAuthors: PropTypes.array.isRequired,\n    filterableBookCount: PropTypes.number.isRequired,\n    filteredBooks: PropTypes.array.isRequired,\n    isSubscribed: PropTypes.bool.isRequired,\n    isFreeTier: PropTypes.bool.isRequired,\n    mainTheme: PropTypes.object.isRequired,\n    relatedThemes: PropTypes.array.isRequired,\n    relatedThemesCount: PropTypes.number.isRequired,\n  };\n\n  constructor(props) {\n    super(props);\n\n    this.closeSidebarPromo = (e) => {\n      this.setState({ sidebarPromoVisible: false });\n    };\n\n    this.showSidebarPromo = () => {\n      this.setState({ sidebarPromoVisible: true });\n    };\n\n    this.state = {\n      filteredAuthors: [],\n      filteredBooks: [],\n      filteredThemes: props.relatedThemes,\n      sidebarPromoVisible: false,\n    };\n  }\n\n  componentDidUpdate(prevProps, prevState) {\n    const { filteredAuthors, filteredBooks } = this.state;\n    if (\n      filteredAuthors.length !== prevState.filteredAuthors.length ||\n      filteredBooks.length !== prevState.filteredBooks.length\n    ) {\n      let filteredThemes = [];\n      if (filteredAuthors.length || filteredBooks.length) {\n        const a = this.selectedFiltersToHash(filteredAuthors);\n        const b = this.selectedFiltersToHash(filteredBooks);\n        filteredThemes = this.props.relatedThemes.filter(\n          (t) => a[t.bookAuthorFullName] || b[t.bookTitle]\n        );\n      } else {\n        filteredThemes = this.props.relatedThemes;\n      }\n      this.setState({ filteredThemes });\n    }\n  }\n\n  selectedFiltersToHash(selected) {\n    return selected.reduce((h, k) => {\n      h[k] = true;\n      return h;\n    }, {});\n  }\n\n  renderFilterBox({ filterables, header, key, totalFilters }) {\n    const { aPlusDialogHref, aPlusDialogLogoSrc, isSubscribed } = this.props;\n\n    return (\n      <RelatedThemesFilterBox\n        aPlusDialogHref={aPlusDialogHref}\n        aPlusDialogLogoSrc={aPlusDialogLogoSrc}\n        filterables={filterables}\n        header={header}\n        isPromoVisible={this.state.sidebarPromoVisible}\n        isSubscribed={isSubscribed}\n        onChange={(selected) => this.setState({ [key]: selected })}\n        showSidebarPromo={this.showSidebarPromo}\n        totalFilters={totalFilters}\n      />\n    );\n  }\n\n  renderSidebarPromo() {\n    if (!this.state.sidebarPromoVisible) {\n      return null;\n    }\n\n    const { aPlusDialogHref, aPlusDialogLogoSrc, isFreeTier } = this.props;\n\n    return (\n      <div className=\"a-plus-dialog\" id=\"refinement-promo\">\n        <APlusDialog\n          isFreeTier={isFreeTier}\n          content=\"Update to refine your search.\"\n          href={aPlusDialogHref}\n          amplitudeKey=\"litRelatedThemesFilterSignUp\"\n          logoSrc={aPlusDialogLogoSrc}\n          handleClose={this.closeSidebarPromo}\n          shouldRenderCloseBtn\n        />\n      </div>\n    );\n  }\n\n  renderSidebar() {\n    const {\n      filterableAuthorCount,\n      filterableAuthors,\n      filterableBookCount,\n      filterableBooks,\n    } = this.props;\n    return (\n      <div className=\"sidebar\">\n        <div className=\"sidebar__header\">\n          <div className=\"sidebar__title\">Refine Your Search by...</div>\n        </div>\n        {this.renderFilterBox({\n          filterables: filterableBooks,\n          key: \"filteredBooks\",\n          header: \"Book Title\",\n          totalFilters: filterableBookCount,\n        })}\n        {this.renderFilterBox({\n          filterables: filterableAuthors,\n          key: \"filteredAuthors\",\n          header: \"Author\",\n          totalFilters: filterableAuthorCount,\n        })}\n        {this.renderSidebarPromo()}\n      </div>\n    );\n  }\n\n  renderThemeYouWereReading() {\n    const { mainTheme } = this.props;\n\n    return (\n      <div id=\"theme-you-were-reading\" className=\"theme-box\">\n        <div className=\"theme-box__header\">\n          <div className=\"theme-box__title\">Theme You Were Reading</div>\n        </div>\n        <div className=\"card card_theme\">\n          <div className=\"card-theme-col\">\n            <a href={mainTheme.path} className=\"card__icon\">\n              <span\n                className=\"visible-xs\"\n                dangerouslySetInnerHTML={{ __html: mainTheme.mediumIconHtml }}\n              />\n              <span\n                className=\"hidden-xs\"\n                dangerouslySetInnerHTML={{ __html: mainTheme.largeIconHtml }}\n              />\n            </a>\n          </div>\n          <div className=\"card-theme-col\">\n            <div className=\"card__title\">\n              <a href={mainTheme.path} className=\"theme-title link\">\n                {mainTheme.title}\n              </a>{\" \"}\n              in{\" \"}\n              <a href={mainTheme.bookPath} className=\"link\">\n                {mainTheme.bookTitle}\n              </a>{\" \"}\n              by {mainTheme.bookAuthorFullName}\n            </div>\n          </div>\n        </div>\n      </div>\n    );\n  }\n\n  renderRelatedThemeCards() {\n    if (!this.props.isSubscribed) {\n      return null;\n    }\n\n    const { filteredThemes } = this.state;\n\n    return filteredThemes.map((t) => (\n      <div className=\"theme-box\" key={t.path}>\n        <div className=\"card card_theme\">\n          <div className=\"card-theme-col\">\n            <a href={t.path} className=\"card__icon\">\n              <span\n                className=\"visible-xs\"\n                dangerouslySetInnerHTML={{ __html: t.mediumIconHtml }}\n              />\n              <span\n                className=\"hidden-xs\"\n                dangerouslySetInnerHTML={{ __html: t.largeIconHtml }}\n              />\n            </a>\n          </div>\n          <div className=\"card-theme-col\">\n            <div className=\"card__title\">\n              <a href={t.path} className=\"theme-title link\">\n                {t.title}\n              </a>{\" \"}\n              in{\" \"}\n              <a href={t.bookPath} className=\"link\">\n                {t.bookTitle}\n              </a>{\" \"}\n              by {t.bookAuthorFullName}\n            </div>\n            <p\n              className=\"card__description no-inline-characters no-inline-symbols no-inline-terms\"\n              dangerouslySetInnerHTML={{ __html: t.descriptionHtml }}\n            />\n            <div className=\"read-full\">\n              <a href={t.path} className=\"link\">\n                Read analysis of {t.title}\n              </a>\n            </div>\n          </div>\n        </div>\n      </div>\n    ));\n  }\n\n  renderRelatedThemesBlur() {\n    if (this.props.isSubscribed) {\n      return null;\n    }\n\n    const { blurredThemesImgSrc } = this.props;\n\n    return (\n      <div>\n        <img src={blurredThemesImgSrc} style={{ maxWidth: \"100%\" }} />\n        <img src={blurredThemesImgSrc} style={{ maxWidth: \"100%\" }} />\n      </div>\n    );\n  }\n\n  renderPromo() {\n    if (this.props.isSubscribed) {\n      return null;\n    }\n\n    const { aPlusDialogContent, aPlusDialogHref, aPlusDialogLogoSrc } =\n      this.props;\n\n    return (\n      <div>\n        <APlusDialog\n          content={aPlusDialogContent}\n          href={aPlusDialogHref}\n          amplitudeKey=\"litRelatedThemesCentralColumnSignUp\"\n          logoSrc={aPlusDialogLogoSrc}\n        />\n      </div>\n    );\n  }\n\n  getThemeCount() {\n    const { relatedThemes, relatedThemesCount } = this.props;\n    const { filteredThemes } = this.state;\n    // no relatedThemes are passed unless user is subscribed\n    return relatedThemes.length ? filteredThemes.length : relatedThemesCount;\n  }\n\n  renderRelatedThemes() {\n    return (\n      <div className=\"closed-box\">\n        <div className=\"closed-box__container\" id=\"related_themes\">\n          <div className=\"theme\">\n            <div className=\"theme-box__header\">\n              <div className=\"theme-box__title\">\n                <span id=\"related-theme-count\">{this.getThemeCount()}</span>{\" \"}\n                Related Themes from Other Texts\n              </div>\n              <div className=\"theme-box__subtitle\">\n                Themes are ordered from most to least related.\n              </div>\n            </div>\n            <div className=\"related-themes\">\n              {this.renderRelatedThemeCards()}\n              {this.renderRelatedThemesBlur()}\n              {this.renderPromo()}\n            </div>\n          </div>\n        </div>\n      </div>\n    );\n  }\n\n  render() {\n    return (\n      <div className=\"related\">\n        <div className=\"container\">\n          <div className=\"row\">\n            <div className=\"col-xs-12 col-sm-4\">{this.renderSidebar()}</div>\n            <div className=\"col-xs-12 col-sm-8\">\n              {this.renderThemeYouWereReading()}\n              {this.renderRelatedThemes()}\n            </div>\n          </div>\n        </div>\n      </div>\n    );\n  }\n}\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\n\n// eslint-disable-next-line react/prefer-stateless-function\nclass SummaryAnalysisAPlusDialog extends React.Component {\n  static propTypes = {\n    content: PropTypes.string,\n    href: PropTypes.string.isRequired,\n    linkClasses: PropTypes.string,\n    logoSrc: PropTypes.string,\n    logoSrcXs: PropTypes.string,\n    isFreeTier: PropTypes.bool.isRequired,\n  };\n\n  render() {\n    return (\n      <div>\n        <div className=\"a-plus-dialog__header text-center\">\n          <div className=\"hidden-xs\">\n            <img\n              alt=\"LitCharts Logo\"\n              className=\"brand\"\n              src={this.props.logoSrc}\n            />\n          </div>\n          <div className=\"visible-xs\">\n            <img\n              alt=\"LitCharts Logo\"\n              className=\"brand\"\n              src={this.props.logoSrcXs}\n            />\n          </div>\n        </div>\n        <div className=\"a-plus-dialog__body subtitle-1 text-center\">\n          <p\n            className=\"a-plus-dialog__content\"\n            dangerouslySetInnerHTML={{ __html: this.props.content }}\n          />\n          <a\n            className={`a-plus-dialog__subscribe btn btn-a-plus btn-md btn--icon-left ${\n              this.props.linkClasses || \"\"\n            }`}\n            href={this.props.href}\n            data-amplitude=\"litBlurredAnalysisPrimary\"\n          >\n            <i className=\"lc-icon lc-icon-sm lc-icon-lock-filled\" />\n            Get <span className=\"hidden-xs\">LitCharts </span>A<sup>+</sup>\n          </a>\n        </div>\n        {!this.props.isFreeTier && (\n          <div className=\"a-plus-dialog__footer subtitle-2 text-center\">\n            <div className=\"a-plus-dialog__sign-in\">\n              <span className=\"a-plus-dialog__sign-in--text\">or </span>\n              <a href=\"/sign-in\">sign in</a>\n            </div>\n          </div>\n        )}\n      </div>\n    );\n  }\n}\n\nexport default SummaryAnalysisAPlusDialog;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport Expandable from \"components/shared/Expandable\";\nimport GroupsInfoFaqRow from \"components/groups/info/GroupsInfoFaqRow\";\n\nexport default function GroupsInfoExpandableFaqRow({ question, answer }) {\n  return (\n    <Expandable expandableClassName=\"groups-info__expandable-row\">\n      <GroupsInfoFaqRow question={question} answer={answer} />\n    </Expandable>\n  );\n}\nGroupsInfoExpandableFaqRow.propTypes = {\n  question: PropTypes.string,\n  answer: PropTypes.string,\n};\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\n\nexport default function GroupsInfoFaqRow(props) {\n  return (\n    <>\n      <div className=\"groups-info__question body-1\">\n        <div className=\"groups-info__question--text\">{props.question}</div>\n        <div\n          className={`groups-info__expandable-row--icon lc-icon lc-icon-sm ${\n            props.isExpanded ? \"lc-icon-up\" : \"lc-icon-down\"\n          }`}\n        />\n      </div>\n      <div\n        className=\"groups-info__answer body-2\"\n        dangerouslySetInnerHTML={{ __html: props.answer }}\n      />\n    </>\n  );\n}\nGroupsInfoFaqRow.propTypes = {\n  question: PropTypes.string.isRequired,\n  answer: PropTypes.string.isRequired,\n};\n","import React from \"react\";\nimport LocalTag from \"../shared/LocalTag\";\n\nconst ChaptersRow = ({ index, summarySection }) => (\n  <div className={`${index === 0 ? \"first\" : \"\"} row`}>\n    <span className=\"title-4 left-aligned\">{summarySection.title} </span>\n    <div className=\"literary-devices local-tags-container\">\n      {summarySection.litTerms.map((litTerm) => (\n        <LocalTag key={litTerm.id} litTerm={litTerm} />\n      ))}\n    </div>\n  </div>\n);\n\nexport default ChaptersRow;\n","import React from \"react\";\nimport ChaptersRow from \"./ChaptersRow\";\n\nconst ChaptersView = ({ summarySections }) => (\n  <div className=\"literary-devices chapters\">\n    {summarySections.length ? (\n      summarySections.map((ss, index) => (\n        <ChaptersRow index={index} key={ss.id} summarySection={ss} />\n      ))\n    ) : (\n      <em className=\"text-center no-matches\">No matches.</em>\n    )}\n  </div>\n);\nexport default ChaptersView;\n","import React, { useMemo } from \"react\";\nimport { CHAPTERS, DEVICES } from \"../../constants/literary_devices\";\nimport ChaptersView from \"./ChaptersView\";\nimport DevicesView from \"./DevicesView\";\n\nconst Content = ({\n  hideFilters,\n  filterOptions,\n  filterBy,\n  summarySections,\n  litTerms,\n  viewMode,\n}) => {\n  const sortedLitTerms = useMemo(\n    () =>\n      litTerms.filter(\n        (term) =>\n          term.slug === filterBy.value ||\n          filterBy.value === filterOptions[0].value\n      ),\n    [filterBy]\n  );\n  const sortedSummarySections = useMemo(\n    () =>\n      hideFilters\n        ? []\n        : summarySections\n            .filter((ss) =>\n              ss.litTerms.some(\n                (term) =>\n                  term.slug === filterBy.value ||\n                  filterBy.value === filterOptions[0].value\n              )\n            )\n            .map((ss) => ({\n              ...ss,\n              litTerms: ss.litTerms.filter(\n                (term) =>\n                  term.slug === filterBy.value ||\n                  filterBy?.value === filterOptions[0].value\n              ),\n            })),\n    [hideFilters, filterBy]\n  );\n\n  switch (viewMode) {\n    case CHAPTERS:\n      return <ChaptersView summarySections={sortedSummarySections} />;\n    case DEVICES:\n      return <DevicesView litTerms={sortedLitTerms} />;\n    default:\n      return null;\n  }\n};\n\nexport default Content;\n","import React from \"react\";\n\nconst DevicesRow = ({ index, litTerm }) => (\n  <a href={litTerm.showPath}>\n    <div className={`row ${index === 0 ? \"first\" : \"\"}`}>\n      <span className=\"title-4 term\">{litTerm.name} </span>\n      <span className=\"body-2\">\n        {litTerm.keyExamplesCount} key{\" \"}\n        {litTerm.keyExamplesCount > 1 ? \"examples\" : \"example\"}\n      </span>\n      <div className=\"visible-xs visible-sm pull-right arrow\">\n        <i className=\"lc-icon lc-icon-sm lc-icon-right\" />\n      </div>\n    </div>\n  </a>\n);\n\nexport default DevicesRow;\n","import React from \"react\";\nimport DevicesRow from \"./DevicesRow\";\n\nconst DevicesView = ({ litTerms }) => (\n  <div className=\"literary-devices devices\">\n    {litTerms.map((litTerm, index) => (\n      <DevicesRow index={index} key={litTerm.id} litTerm={litTerm} />\n    ))}\n  </div>\n);\n\nexport default DevicesView;\n","import React from \"react\";\nimport { CHAPTERS, DEVICES } from \"../../constants/literary_devices\";\nimport Select from \"../shared/Select\";\n\nconst Filters = ({\n  currentFilter,\n  setCurrentFilter,\n  filterOptions,\n  setViewMode,\n  hideFilters,\n  viewMode,\n  sectionType,\n}) => {\n  if (hideFilters) {\n    return null;\n  }\n\n  const setViewModeToChapters = () => {\n    setViewMode(CHAPTERS);\n  };\n\n  const setViewModeToDevices = () => {\n    setViewMode(DEVICES);\n  };\n\n  const onChangeFilter = (option) => {\n    setCurrentFilter(option);\n  };\n\n  return (\n    <div id=\"anchor\">\n      <div className=\"literary-devices filters\">\n        <div className=\"options-container\">\n          <span>Sort by: </span>\n          <button\n            className={`btn sort-by-option ${\n              viewMode === DEVICES ? \"sort-by-option--active\" : \"\"\n            }`}\n            onClick={setViewModeToDevices}\n            type=\"button\"\n          >\n            <span className=\"btn-text\">Devices A-Z</span>\n          </button>\n          <button\n            className={`btn sort-by-option ${\n              viewMode === CHAPTERS ? \"sort-by-option--active\" : \"\"\n            }`}\n            onClick={setViewModeToChapters}\n            type=\"button\"\n          >\n            <span className=\"btn-text\">{sectionType}</span>\n          </button>\n        </div>\n        <Select\n          isControlled\n          id=\"literary-devices-filter\"\n          name=\"literary-devices-filter\"\n          options={filterOptions}\n          onChange={onChangeFilter}\n          value={currentFilter.value}\n        />\n      </div>\n    </div>\n  );\n};\n\nexport default Filters;\n","/* eslint-disable react/prefer-stateless-function */\nimport React from \"react\";\nimport { DEVICES } from \"../../constants/literary_devices\";\nimport Content from \"./Content\";\nimport Filters from \"./Filters\";\nimport PageDescription from \"./PageDescription\";\nimport QueryParamsControls from \"./QueryParamsControls\";\n\nclass LandingPage extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      viewMode: DEVICES,\n      filterBy: this.props.filterOptions[0],\n    };\n  }\n\n  handleParamChange = (\n    viewMode = this.state.viewMode,\n    filterBy = this.state.filterBy,\n    updateHistory = true\n  ) => {\n    const url = new URL(window.location);\n    if (viewMode) {\n      url.searchParams.set(\"viewMode\", viewMode);\n    }\n    if (filterBy) {\n      url.searchParams.set(\"filterBy\", filterBy.value);\n    }\n    if (updateHistory) {\n      window.history.pushState({}, \"\", url.toString());\n    }\n  };\n\n  setViewMode = (value, updateHistory = true) => {\n    this.setState({ viewMode: value }, () =>\n      this.handleParamChange(value, undefined, updateHistory)\n    );\n  };\n\n  setCurrentFilter = (option, updateHistory = true) => {\n    this.setState({ filterBy: option }, () =>\n      this.handleParamChange(undefined, option, updateHistory)\n    );\n  };\n\n  lowerCaseOptions = this.props.filterOptions.map((option) => ({\n    ...option,\n    value: option.value.toLowerCase(),\n  }));\n\n  render() {\n    return (\n      <>\n        <PageDescription\n          authorName={this.props.authorName}\n          bookTitle={this.props.bookTitle}\n        />\n        <Filters\n          sectionType={this.props.sectionType}\n          setCurrentFilter={this.setCurrentFilter}\n          currentFilter={this.state.filterBy}\n          filterOptions={this.lowerCaseOptions}\n          setViewMode={this.setViewMode}\n          viewMode={this.state.viewMode?.toLowerCase()}\n          hideFilters={this.props.hideFilters}\n        />\n        <Content\n          hideFilters={this.props.hideFilters}\n          filterOptions={this.props.filterOptions}\n          filterBy={this.state.filterBy}\n          summarySections={this.props.summarySections}\n          viewMode={this.state.viewMode}\n          litTerms={this.props.litTerms}\n        />\n        <QueryParamsControls\n          filterOptions={this.props.filterOptions}\n          setViewMode={this.setViewMode}\n          setFilterBy={this.setCurrentFilter}\n        />\n      </>\n    );\n  }\n}\n\nexport default LandingPage;\n","import React from \"react\";\n\nconst PageDescription = ({ authorName, bookTitle }) => (\n  <p className=\"body-2 left-aligned\">\n    See key examples and analysis of the literary devices {authorName} uses in{\" \"}\n    <em>{bookTitle}</em>, along with the quotes, themes, symbols, and characters\n    related to each device.\n  </p>\n);\n\nexport default PageDescription;\n","import React, { useEffect } from \"react\";\nimport helpers from \"helpers/base\";\nimport { CHAPTERS, DEVICES } from \"../../constants/literary_devices\";\n\n// TODO: Move all this into the parent component since it's not really adding much\nconst QueryParamsControls = ({ filterOptions, setViewMode, setFilterBy }) => {\n  const findFilterByOption = (filterByOption) =>\n    filterOptions.find((option) => option.value === filterByOption);\n\n  const setParamFilters = (_) => {\n    const viewModeParam = helpers.getQueryParam(\"viewMode\")?.toLowerCase();\n    const filterByParam = helpers.getQueryParam(\"filterBy\")?.toLowerCase();\n\n    if (!viewModeParam && !filterByParam) {\n      setViewMode(DEVICES, false);\n      setFilterBy(filterOptions[0], false);\n    }\n    if (viewModeParam) {\n      setViewMode(viewModeParam, false);\n    }\n\n    if (findFilterByOption(filterByParam)) {\n      setFilterBy(findFilterByOption(filterByParam), false);\n    }\n  };\n\n  useEffect(() => {\n    window.addEventListener(\"popstate\", setParamFilters);\n    return () => window.removeEventListener(\"popstate\", setParamFilters);\n  }, []);\n\n  useEffect(() => {\n    const viewModeParam = helpers.getQueryParam(\"viewMode\")?.toLowerCase();\n    const filterByParam = helpers.getQueryParam(\"filterBy\")?.toLowerCase();\n    if (viewModeParam === (CHAPTERS || DEVICES)) {\n      setViewMode(viewModeParam);\n    }\n    if (filterByParam && findFilterByOption(filterByParam)) {\n      setFilterBy(findFilterByOption(filterByParam));\n    }\n  }, []);\n  // eslint-disable-next-line react/jsx-no-useless-fragment\n  return <></>;\n};\n\nexport default QueryParamsControls;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport MenuItem from \"./MenuItem\";\nimport MenuParent, { menuParentProps } from \"./MenuParent\";\n\nconst propTypes = {\n  items: PropTypes.arrayOf(PropTypes.shape(menuParentProps)),\n};\n\nconst Menu = ({ items }) => {\n  return (\n    <div className=\"nav-bar--container\">\n      {items.map((item) => {\n        return (\n          <div key={item.label} className=\"nav-bar--items\">\n            {item.children?.length > 0 ? (\n              <MenuParent {...item} />\n            ) : (\n              <MenuItem label={item.label} url={item.url} />\n            )}\n          </div>\n        );\n      })}\n    </div>\n  );\n};\n\nMenu.propTypes = propTypes;\n\nexport default Menu;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\n\nexport const menuItemType = {\n  label: PropTypes.string.isRequired,\n  url: PropTypes.string.isRequired,\n};\n\nconst MenuItem = ({ label, url }) => {\n  return (\n    <a\n      className=\"nav-bar--child_item\"\n      href={url}\n      data-amplitude=\"universalHeaderNavLink\"\n      data-amplitude-text={label}\n    >\n      {label}\n    </a>\n  );\n};\n\nMenuItem.propTypes = menuItemType;\n\nexport default MenuItem;\n","import React, { useState } from \"react\";\nimport PropTypes from \"prop-types\";\nimport MenuItem, { menuItemType } from \"./MenuItem\";\nimport Icon from \"../shared/Icon\";\n\nexport const menuParentProps = {\n  shouldAutoExpand: PropTypes.bool,\n  children: PropTypes.arrayOf(PropTypes.shape(menuItemType)),\n  iconClass: PropTypes.string,\n  iconUrl: PropTypes.string,\n  label: PropTypes.string.isRequired,\n};\n\nconst defaultProps = {\n  shouldAutoExpand: false,\n  children: [],\n  iconUrl: \"\",\n  iconClass: \"\",\n};\n\nconst MenuParent = ({\n  shouldAutoExpand,\n  children,\n  iconUrl,\n  iconClass,\n  label,\n}) => {\n  const [showChildren, setShowChildren] = useState(shouldAutoExpand);\n\n  const toggleExpand = () => {\n    setShowChildren((show) => !show);\n  };\n\n  return (\n    <div className=\"nav-bar--parent\">\n      <div\n        className=\"nav-bar--parent_item\"\n        onClick={toggleExpand}\n        onKeyPress={toggleExpand}\n        role=\"menu\"\n        tabIndex={0}\n      >\n        {iconClass ? (\n          <Icon name={iconClass} size=\"sm\" className=\"nav-bar--parent_icon\" />\n        ) : (\n          <img src={iconUrl} alt={label} className=\"nav-bar--parent_icon-img\" />\n        )}\n        <span>{label}</span>\n        <Icon name={showChildren ? \"up\" : \"down\"} size=\"xs\" />\n      </div>\n      <div className=\"nav-bar--parent_children\">\n        {showChildren &&\n          children.map((child) => {\n            return (\n              <MenuItem key={child.label} label={child.label} url={child.url} />\n            );\n          })}\n      </div>\n    </div>\n  );\n};\n\nMenuParent.propTypes = menuParentProps;\nMenuParent.defaultProps = defaultProps;\n\nexport default MenuParent;\n","import React from \"react\";\nimport TextToggle from \"../../../shared/TextToggle\";\n\nconst AiToolToggle = ({\n  publicDomain,\n  alignment,\n  leftContent,\n  rightContent,\n}) => {\n  const handleToggle = () => {\n    handleLargeScreenClick();\n    handleSmallScreenClick();\n  };\n\n  const handleLargeScreenClick = () => {\n    const aiTool = document.querySelector(\".poem-ai-tool\");\n    const content = document.querySelector(\".poem-guide-content\");\n    [\"hidden-lg\", \"hidden-md\"].forEach((cls) => {\n      aiTool.classList.toggle(cls);\n      content.classList.toggle(cls);\n    });\n  };\n\n  const handleSmallScreenClick = () => {\n    const aiTool = document.querySelector(\".poem-ai-tool\");\n    const content = document.querySelector(\".poem-guide-content\");\n    [\"hidden-sm\", \"hidden-xs\"].forEach((cls) => {\n      aiTool.classList.toggle(cls);\n      content.classList.toggle(cls);\n    });\n\n    const switchBanners = document.querySelectorAll(\n      \"#poem-switch-to-ai, #poem-switch-to-content\"\n    );\n\n    switchBanners.forEach((banner) => {\n      banner.classList.toggle(\"hidden\");\n    });\n  };\n\n  return publicDomain ? (\n    <div className=\"ai-tool-toggle-container\">\n      <TextToggle\n        alignment={alignment}\n        leftContent={leftContent}\n        rightContent={rightContent}\n        onToggle={handleToggle}\n      />\n    </div>\n  ) : (\n    <div\n      aria-hidden=\"true\"\n      className=\"lc-text-toggle empty\"\n      onClick={handleSmallScreenClick}\n    />\n  );\n};\n\nexport default AiToolToggle;\n","import React from \"react\";\nimport Select from \"components/shared/Select\";\nimport selectors from \"constants/poetry/poems/show/selectors\";\nimport helpers from \"helpers/base\";\n\nclass ComponentItemSelect extends React.Component {\n  selectComponentItem(item) {\n    const { id } = item;\n    const { title } = item;\n    const { modalTitle } = item;\n    const modalCategory = modalTitle + (title ? \": \" : \"\") + title;\n    const { category } = item;\n    const { componentValue } = item;\n    const { activeContext } = item;\n\n    const selector = `${selectors.COMPONENT}[data-category='${category}']`;\n    const $component = $(selector);\n    const $section = $component.closest(selectors.SECTION);\n\n    if (helpers.isMobile() || $section.hasClass(\"is-focused\")) {\n      const $title = $($component.find(selectors.COMPONENT_TITLE));\n      const $valueReplace = $(\n        $component.find(selectors.COMPONENT_VALUE_REPLACE)\n      );\n      const $activeContext = $($component.find(selectors.ACTIVE_CONTEXT_NOTE));\n      const $content = $(selectors.POEM_CONTENT);\n      const $modalCategory = $(selectors.TEXT_MODAL_CATEGORY);\n\n      $title.text(title);\n      this.setComponentContentViaAjax(id, $content);\n      $modalCategory.text(modalCategory);\n      $activeContext.html(activeContext);\n      $valueReplace.html(componentValue);\n    }\n  }\n\n  onChange(option) {\n    this.selectComponentItem(option);\n  }\n\n  setComponentContentViaAjax(componentId, el) {\n    $.ajax({\n      url: `/poetry/poem_components/${componentId}`,\n      type: \"GET\",\n      dataType: \"json\",\n      success(data) {\n        el.html(data.content);\n      },\n    });\n  }\n\n  render() {\n    return (\n      <Select\n        {...this.props}\n        id=\"poem-component-items__select\"\n        placeholder=\"Select vocabulary word\"\n        onChange={(value) => this.onChange(value)}\n      />\n    );\n  }\n}\n\nexport default ComponentItemSelect;\n","import React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport InContentAskLitchartsAI from \"../../../ai_tools/InContentAskLitchartsAI\";\n\nconst UncachedAITool = (props) => {\n  const content = <InContentAskLitchartsAI {...props} />;\n  const container = document.querySelector(\n    \"#poems-show__guide__ai-tool__container\"\n  );\n\n  return ReactDOM.createPortal(content, container);\n};\n\nexport default UncachedAITool;\n","import React from \"react\";\n\nconst QuizBanner = ({ bannerContent }) => {\n  return (\n    <div className=\"lc-banner lc-banner-information quiz-banner\">\n      <p\n        dangerouslySetInnerHTML={{ __html: bannerContent }}\n        className=\"banner-1 quiz-content\"\n      />\n    </div>\n  );\n};\n\nexport default QuizBanner;\n","import classNames from \"classnames\";\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { QUIZ_ANSWER_STATES } from \"../constants\";\nimport QuizAnswerChoiceIcon from \"./QuizAnswerChoiceIcon\";\nimport ReviewButton from \"./ReviewButton\";\n\nfunction QuizAnswerChoice({\n  answerLetter,\n  answerText,\n  isSelectedAnswer,\n  state,\n  setSelectedAnswer,\n  isAnonUser,\n  link,\n}) {\n  const isSelected = isSelectedAnswer && state === QUIZ_ANSWER_STATES.UNLOCKED;\n\n  const handleAnswerSelected = (event) => {\n    if (\n      (!isAnonUser && !event.key) ||\n      event.key === \"Enter\" ||\n      event.key === \" \"\n    ) {\n      setSelectedAnswer(answerLetter);\n    }\n  };\n\n  const canBeTabbed =\n    (state === QUIZ_ANSWER_STATES.UNLOCKED ||\n      state === QUIZ_ANSWER_STATES.LOCKED) &&\n    !isSelectedAnswer;\n\n  const amplitudeEvent =\n    state === QUIZ_ANSWER_STATES.LOCKED\n      ? \"quizLockedAnswerChoice\"\n      : \"quizUnlockedAnswerChoice\";\n\n  const amplitudeFunnel = () => {\n    if (state === QUIZ_ANSWER_STATES.UNLOCKED) {\n      return \"none\";\n    }\n    if (isAnonUser) {\n      return \"free\";\n    }\n    return \"paid\";\n  };\n\n  return (\n    <div\n      className={classNames(\"quiz-answer-choice\", state, {\n        selected: isSelected,\n      })}\n      data-amplitude={amplitudeEvent}\n      data-amplitude-funnel={amplitudeFunnel()}\n      data-test={`QuizCardAnswerChoice-${answerLetter}`}\n      onClick={handleAnswerSelected}\n      onKeyPress={handleAnswerSelected}\n      role=\"button\"\n      tabIndex={canBeTabbed ? 0 : undefined}\n      {...(isAnonUser\n        ? { \"data-toggle\": \"modal\", \"data-target\": \"#quiz-free-tier .modal\" }\n        : {})}\n    >\n      <QuizAnswerChoiceIcon answerLetter={answerLetter} state={state} />\n      <div className=\"text-content-container\">\n        <span\n          className=\"response-text\"\n          dangerouslySetInnerHTML={{ __html: answerText }}\n        />\n        <ReviewButton link={link} state={state} />\n      </div>\n    </div>\n  );\n}\n\nconst propTypes = {\n  link: PropTypes.string,\n  answerLetter: PropTypes.string.isRequired,\n  answerText: PropTypes.string.isRequired,\n  state: PropTypes.oneOf(Object.values(QUIZ_ANSWER_STATES)).isRequired,\n  setSelectedAnswer: PropTypes.func,\n  isSelectedAnswer: PropTypes.bool,\n  isAnonUser: PropTypes.bool.isRequired,\n};\n\nconst defaultProps = {\n  link: undefined,\n  setSelectedAnswer: () => {},\n  isSelectedAnswer: false,\n};\n\nQuizAnswerChoice.propTypes = propTypes;\nQuizAnswerChoice.defaultProps = defaultProps;\n\nexport default QuizAnswerChoice;\n","import React from \"react\";\nimport Icon from \"../../shared/Icon\";\nimport { QUIZ_ANSWER_STATES } from \"../constants\";\n\nconst iconName = (state) => {\n  switch (state) {\n    case QUIZ_ANSWER_STATES.SKIPPED:\n    case QUIZ_ANSWER_STATES.CORRECT:\n      return \"checkmark-64\";\n    case QUIZ_ANSWER_STATES.INCORRECT:\n      return \"close-48\";\n    case QUIZ_ANSWER_STATES.LOCKED:\n      return \"lock-filled-48\";\n    case QUIZ_ANSWER_STATES.DISABLED:\n    case QUIZ_ANSWER_STATES.UNLOCKED:\n    default:\n      return \"\";\n  }\n};\n\nfunction QuizAnswerChoiceIcon({ answerLetter, state }) {\n  const icon = iconName(state);\n  switch (state) {\n    case QUIZ_ANSWER_STATES.UNLOCKED:\n    case QUIZ_ANSWER_STATES.DISABLED:\n      return <div className=\"button-1 quiz-button\">{answerLetter}</div>;\n    case QUIZ_ANSWER_STATES.CORRECT:\n    case QUIZ_ANSWER_STATES.INCORRECT:\n    case QUIZ_ANSWER_STATES.SKIPPED:\n      return (\n        <div className=\"button-1 quiz-button\">\n          <Icon name={icon} size=\"xs\" />\n        </div>\n      );\n    case QUIZ_ANSWER_STATES.LOCKED:\n      return (\n        <div className=\"button-1 quiz-button\">\n          <Icon name={icon} size=\"sm\" />\n        </div>\n      );\n    default:\n      return null;\n  }\n}\n\nexport default QuizAnswerChoiceIcon;\n","import React, { useState } from \"react\";\nimport PropTypes from \"prop-types\";\nimport QuizAnswerChoice from \"./QuizAnswerChoice\";\nimport { QUIZ_ANSWER_STATES } from \"../constants\";\n\nconst propTypes = {\n  answerOptions: PropTypes.arrayOf(\n    PropTypes.shape({\n      answerLetter: PropTypes.string.isRequired,\n      answerText: PropTypes.string.isRequired,\n      link: PropTypes.string,\n      state: PropTypes.oneOf(Object.values(QUIZ_ANSWER_STATES)),\n    })\n  ).isRequired,\n  locked: PropTypes.bool.isRequired,\n  onAnswerSelect: PropTypes.func.isRequired,\n  questionId: PropTypes.number.isRequired,\n  questionIndex: PropTypes.number.isRequired,\n  questionText: PropTypes.string.isRequired,\n  questionTotal: PropTypes.number.isRequired,\n  isAnonUser: PropTypes.bool.isRequired,\n};\n\nfunction QuizCard({\n  answerOptions,\n  locked,\n  isAnonUser,\n  onAnswerSelect,\n  questionId,\n  questionIndex,\n  questionText,\n  questionTotal,\n}) {\n  const [selectedAnswer, setSelectedAnswer] = useState();\n\n  const handleAnswerSelect = (answerLetter) => {\n    if (!locked) {\n      setSelectedAnswer(answerLetter);\n    }\n\n    onAnswerSelect(answerLetter);\n  };\n\n  return (\n    <div className=\"quiz-card\" data-test={`QuizCard-${questionId}`}>\n      <div className=\"quiz-question\">\n        <h5\n          className=\"title-5\"\n          dangerouslySetInnerHTML={{ __html: questionText }}\n        />\n        <div>\n          <span className=\"question-range\">\n            {questionIndex} of {questionTotal}\n          </span>\n        </div>\n      </div>\n      <div className=\"answer-columns\">\n        {answerOptions.map((answerOption) => {\n          return (\n            <div key={answerOption.answerLetter} className=\"answer-column\">\n              <QuizAnswerChoice\n                isAnonUser={isAnonUser}\n                answerLetter={answerOption.answerLetter}\n                answerText={answerOption.answerText}\n                isSelectedAnswer={selectedAnswer === answerOption.answerLetter}\n                setSelectedAnswer={handleAnswerSelect}\n                state={locked ? QUIZ_ANSWER_STATES.LOCKED : answerOption.state}\n              />\n            </div>\n          );\n        })}\n      </div>\n    </div>\n  );\n}\n\nQuizCard.propTypes = propTypes;\n\nexport default QuizCard;\n","import React, { useState } from \"react\";\nimport PropTypes from \"prop-types\";\nimport Icon from \"../../shared/Icon\";\nimport QuizAnswerChoice from \"./QuizAnswerChoice\";\nimport QuizCardResultText from \"./QuizCardResultText\";\nimport { QUIZ_ANSWER_STATES, QUIZ_RESULT_STATES } from \"../constants\";\n\nconst propTypes = {\n  cardState: PropTypes.oneOf(Object.values(QUIZ_RESULT_STATES)).isRequired,\n  answerOptions: PropTypes.arrayOf(\n    PropTypes.shape({\n      link: PropTypes.string,\n      answerLetter: PropTypes.string,\n      answerText: PropTypes.string.isRequired,\n      state: PropTypes.oneOf(Object.values(QUIZ_ANSWER_STATES)).isRequired,\n    })\n  ).isRequired,\n  questionId: PropTypes.number.isRequired,\n  questionIndex: PropTypes.number.isRequired,\n  questionText: PropTypes.string.isRequired,\n};\n\nconst defaultProps = {};\nfunction QuizCardResult({\n  cardState,\n  answerOptions,\n  questionId,\n  questionIndex,\n  questionText,\n}) {\n  const [bannerExpanded, setBannerExpanded] = useState(true);\n\n  const toggleBanner = () => {\n    setBannerExpanded(!bannerExpanded);\n  };\n\n  return (\n    <div\n      className={`quiz-card-result ${cardState}`}\n      data-test={`QuizCardResult-${questionId}`}\n    >\n      {/* eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions */}\n      <div\n        onClick={toggleBanner}\n        className={`banner ${\n          bannerExpanded ? \"expanded\" : \"collapsed\"\n        } ${cardState}`}\n      >\n        <h5 className=\"question-container\">\n          <span className=\"question-index\">{questionIndex}. </span>\n          <span dangerouslySetInnerHTML={{ __html: questionText }} />\n        </h5>\n        <div className=\"icon-container\">\n          <Icon size=\"sm\" name={bannerExpanded ? \"up\" : \"down-48\"} />\n        </div>\n      </div>\n      {bannerExpanded && (\n        <div className={`answer-container ${cardState}`}>\n          <QuizCardResultText cardState={cardState} />\n          <div className=\"answer-columns\">\n            {answerOptions.map((answerOption) => {\n              return (\n                <div key={answerOption.answerLetter} className=\"answer-column\">\n                  <QuizAnswerChoice\n                    link={answerOption.link}\n                    isSelectedAnswer={false}\n                    answerLetter={answerOption.answerLetter}\n                    answerText={answerOption.answerText}\n                    state={answerOption.state}\n                  />\n                </div>\n              );\n            })}\n          </div>\n        </div>\n      )}\n    </div>\n  );\n}\n\nQuizCardResult.propTypes = propTypes;\nQuizCardResult.defaultProps = defaultProps;\n\nexport default QuizCardResult;\n","import React from \"react\";\nimport { QUIZ_RESULT_STATES } from \"../constants\";\n\nfunction QuizCardResultText({ cardState }) {\n  switch (cardState) {\n    case QUIZ_RESULT_STATES.CORRECT:\n      return (\n        <p className=\"result-text\">\n          Good work! Click “Review” to further understand the correct answer.\n        </p>\n      );\n    case QUIZ_RESULT_STATES.INCORRECT:\n      return (\n        <p className=\"result-text\">\n          You’ll get it next time! Click “Review” to understand the correct\n          answer.\n        </p>\n      );\n    case QUIZ_RESULT_STATES.SKIPPED:\n      return (\n        <p className=\"result-text\">\n          You skipped this question. Click “Review” to understand the correct\n          answer.\n        </p>\n      );\n    default:\n      return null;\n  }\n}\n\nexport default QuizCardResultText;\n","import React from \"react\";\nimport { QUIZ_ANSWER_STATES } from \"../constants\";\n\nfunction ReviewButton({ state, link }) {\n  switch (state) {\n    case QUIZ_ANSWER_STATES.SKIPPED:\n    case QUIZ_ANSWER_STATES.CORRECT:\n      return (\n        <a href={link} className=\"review-button btn btn-default btn-sm\">\n          Review\n        </a>\n      );\n    case QUIZ_ANSWER_STATES.INCORRECT:\n    case QUIZ_ANSWER_STATES.LOCKED:\n    case QUIZ_ANSWER_STATES.DISABLED:\n    case QUIZ_ANSWER_STATES.UNLOCKED:\n    default:\n      return null;\n  }\n}\n\nexport default ReviewButton;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport QuizCardResult from \"./QuizCard/QuizCardResult\";\nimport {\n  ANSWER_OPTION_LETTERS,\n  QUIZ_ANSWER_STATES,\n  QUIZ_RESULT_STATES,\n} from \"./constants\";\nimport ResultsPanel from \"./ResultsPanel\";\n\nconst propTypes = {\n  attemptCount: PropTypes.number.isRequired,\n  locked: PropTypes.bool.isRequired,\n  lockedRedirectUrl: PropTypes.string,\n  previousPercentCorrect: PropTypes.number,\n  quizSubmission: PropTypes.shape({\n    correct: PropTypes.number,\n    incorrect: PropTypes.number,\n    skipped: PropTypes.number,\n    percentCorrect: PropTypes.number,\n    reviewLink: PropTypes.string,\n    quizQuestions: PropTypes.arrayOf(\n      PropTypes.shape({\n        answerOptions: PropTypes.arrayOf(\n          PropTypes.shape({\n            answerLetter: PropTypes.oneOf(ANSWER_OPTION_LETTERS).isRequired,\n            answerText: PropTypes.string.isRequired,\n            link: PropTypes.string,\n            state: PropTypes.oneOf(Object.values(QUIZ_ANSWER_STATES))\n              .isRequired,\n          })\n        ),\n        cardState: PropTypes.oneOf(Object.values(QUIZ_RESULT_STATES)),\n        correctAnswerKey: PropTypes.oneOf(ANSWER_OPTION_LETTERS),\n        id: PropTypes.number.isRequired,\n        question: PropTypes.string,\n      })\n    ),\n  }).isRequired,\n};\n\nconst defaultProps = {\n  lockedRedirectUrl: null,\n  previousPercentCorrect: null,\n};\n\nfunction QuizResult({\n  attemptCount,\n  quizSubmission,\n  locked,\n  lockedRedirectUrl,\n}) {\n  const { quizQuestions } = quizSubmission;\n\n  const handleRetake = () => {\n    if (locked) {\n      // TODO: Future story to launch paywall, for now, redirect\n      window.location.href = lockedRedirectUrl;\n    } else {\n      window.location.href = `${window.location.pathname}?retake=1`;\n    }\n  };\n\n  const amplitudeEvent = locked\n    ? \"quizLockedRetakeButton\"\n    : \"quizUnlockedRetakeButton\";\n  const amplitudeFunnel = locked ? \"paid\" : \"none\";\n\n  return (\n    <div>\n      <div className=\"summary-section-quiz--summary\">\n        <ResultsPanel\n          attemptCount={attemptCount}\n          correct={quizSubmission.correct}\n          incorrect={quizSubmission.incorrect}\n          locked={locked}\n          onRetakeClick={handleRetake}\n          previousPercentCorrect={quizSubmission.previousPercentCorrect}\n          reviewLink={quizSubmission.reviewLink}\n          skipped={quizSubmission.skipped}\n        />\n      </div>\n      <h4 className=\"quiz-questions-header title-6\">Your Answers</h4>\n      <div className=\"quiz-questions\">\n        {quizQuestions.map((quizQuestion, index) => {\n          return (\n            <QuizCardResult\n              key={quizQuestion.id}\n              answerOptions={quizQuestion.answerOptions}\n              cardState={quizQuestion.cardState}\n              questionId={quizQuestion.id}\n              questionIndex={index + 1}\n              questionText={quizQuestion.question}\n            />\n          );\n        })}\n      </div>\n      <div className=\"summary-section-quiz--submit\">\n        <button\n          className=\"btn btn-a-plus button-1 btn-lg\"\n          data-amplitude={amplitudeEvent}\n          data-amplitude-funnel={amplitudeFunnel}\n          data-test=\"QuizSubmitButton\"\n          onClick={handleRetake}\n          type=\"button\"\n        >\n          {locked && <i className=\"lc-icon lc-icon-lock-filled lc-icon-sm\" />}\n          Retake Quiz\n        </button>\n      </div>\n    </div>\n  );\n}\n\nQuizResult.propTypes = propTypes;\nQuizResult.defaultProps = defaultProps;\n\nexport default QuizResult;\n","import React, { useState } from \"react\";\nimport PropTypes from \"prop-types\";\nimport pluralize from \"pluralize\";\nimport QuizCard from \"./QuizCard/QuizCard\";\nimport { QUIZ_ANSWER_STATES } from \"./constants\";\n\nconst propTypes = {\n  attemptCount: PropTypes.number.isRequired,\n  lastQuizSubmissionSummary: PropTypes.shape({\n    correct: PropTypes.number,\n    incorrect: PropTypes.number,\n    skipped: PropTypes.number,\n    percentCorrect: PropTypes.number,\n    reviewLink: PropTypes.string,\n  }),\n  locked: PropTypes.bool.isRequired,\n  lockedRedirectUrl: PropTypes.string,\n  quizQuestions: PropTypes.arrayOf(\n    PropTypes.shape({\n      answerOptions: PropTypes.arrayOf(\n        PropTypes.shape({\n          answerLetter: PropTypes.string.isRequired,\n          answerText: PropTypes.string.isRequired,\n          state: PropTypes.oneOf([\n            QUIZ_ANSWER_STATES.UNLOCKED,\n            QUIZ_ANSWER_STATES.LOCKED,\n          ]),\n        })\n      ),\n      id: PropTypes.number.isRequired,\n      question: PropTypes.string.isRequired,\n    })\n  ).isRequired,\n  quizTitle: PropTypes.string.isRequired,\n  submissionUrl: PropTypes.string.isRequired,\n  isAnonUser: PropTypes.bool.isRequired,\n};\n\nconst defaultProps = {\n  lastQuizSubmissionSummary: null,\n  lockedRedirectUrl: null,\n};\n\nfunction QuizSubmission({\n  attemptCount,\n  lastQuizSubmissionSummary,\n  locked,\n  lockedRedirectUrl,\n  quizQuestions,\n  quizTitle,\n  isAnonUser,\n  submissionUrl,\n}) {\n  const [isLoading, setIsLoading] = useState(false);\n  const emptyQuestionsSubmission = quizQuestions.reduce(\n    (acc, cur) => Object.assign(acc, { [cur.id]: null }),\n    {}\n  );\n  const [quizQuestionsSubmission, setQuizQuestionsSubmission] = useState(\n    emptyQuestionsSubmission\n  );\n\n  const handleLockedState = () => {\n    window.location.href = lockedRedirectUrl;\n  };\n\n  const handleSubmit = () => {\n    if (locked) {\n      // TODO: Future story to paywall, for now, redirect\n      handleLockedState();\n      return;\n    }\n\n    const token = document.querySelector(\"meta[name='csrf-token']\").content;\n    const reloadPath = window.location.href.split(\"?\")[0];\n    const request = {\n      method: \"POST\",\n      headers: {\n        \"X-CSRF-Token\": token,\n        \"Content-Type\": \"application/json\",\n      },\n      body: JSON.stringify({\n        quiz_submission: {\n          quiz_question_submissions_attributes: Object.keys(\n            quizQuestionsSubmission\n          ).map((key) => {\n            return {\n              quiz_question_id: key,\n              chosen_answer: quizQuestionsSubmission[key],\n            };\n          }),\n        },\n      }),\n    };\n\n    setIsLoading(true);\n    // eslint-disable-next-line compat/compat\n    fetch(submissionUrl, request)\n      .then((_response) => {\n        window.location.href = reloadPath;\n      })\n      .catch((error) => {\n        // TODO: Use toast notifications to indicate failure when it's available.\n        console.error(\"Something went wrong.\", error);\n        setIsLoading(false);\n        alert(\"Something went wrong.\");\n      });\n  };\n\n  const handleAnswerSelect = (chosenAnswer, questionId) => {\n    if (locked) {\n      handleLockedState();\n      return;\n    }\n    const updatedSubmission = quizQuestionsSubmission;\n    updatedSubmission[questionId] = chosenAnswer;\n    setQuizQuestionsSubmission(updatedSubmission);\n  };\n\n  const amplitudeEvent = locked\n    ? \"quizLockedSubmitButton\"\n    : \"quizUnlockedSubmitButton\";\n\n  const amplitudeFunnel = () => {\n    if (!locked) {\n      return \"none\";\n    }\n    if (isAnonUser) {\n      return \"free\";\n    }\n    return \"paid\";\n  };\n\n  return (\n    <div>\n      <div className=\"summary-section-quiz--description body-2\">\n        {attemptCount > 0\n          ? `You took this quiz ${pluralize(\n              \"time\",\n              attemptCount,\n              true\n            )} before and got ${\n              lastQuizSubmissionSummary.percentCorrect\n            }% last time. Retake this quiz to see your new results.`\n          : `Test your knowledge of ${quizTitle}. Submit your answers to see your results and get feedback.`}\n      </div>\n      <div className=\"quiz-questions\">\n        {quizQuestions.map((quizQuestion, index) => {\n          return (\n            <QuizCard\n              onAnswerSelect={(answerLetter) =>\n                handleAnswerSelect(answerLetter, quizQuestion.id)\n              }\n              key={quizQuestion.id}\n              answerOptions={quizQuestion.answerOptions}\n              locked={locked}\n              isAnonUser={isAnonUser}\n              questionId={quizQuestion.id}\n              questionIndex={index + 1}\n              questionText={quizQuestion.question}\n              questionTotal={quizQuestions.length}\n            />\n          );\n        })}\n      </div>\n      <div className=\"summary-section-quiz--submit\">\n        <button\n          className=\"btn btn-a-plus button-1 btn-lg\"\n          data-amplitude={amplitudeEvent}\n          data-amplitude-funnel={amplitudeFunnel()}\n          data-test=\"QuizSubmitButton\"\n          disabled={isLoading}\n          onClick={isAnonUser ? null : handleSubmit}\n          type=\"button\"\n          {...(isAnonUser\n            ? {\n                \"data-toggle\": \"modal\",\n                \"data-target\": \"#quiz-free-tier .modal\",\n              }\n            : {})}\n        >\n          {locked && <i className=\"lc-icon lc-icon-lock-filled lc-icon-sm\" />}\n          Submit\n        </button>\n      </div>\n    </div>\n  );\n}\n\nQuizSubmission.propTypes = propTypes;\nQuizSubmission.defaultProps = defaultProps;\n\nexport default QuizSubmission;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\n\nconst propTypes = {\n  attemptCount: PropTypes.number,\n  correct: PropTypes.number.isRequired,\n  incorrect: PropTypes.number.isRequired,\n  locked: PropTypes.bool,\n  onRetakeClick: PropTypes.func,\n  previousPercentCorrect: PropTypes.number,\n  reviewLink: PropTypes.string.isRequired,\n  skipped: PropTypes.number.isRequired,\n};\n\nconst defaultProps = {\n  attemptCount: 1,\n  locked: false,\n  onRetakeClick: () => {},\n  previousPercentCorrect: null,\n};\n\nfunction Counter({ label, count }) {\n  const className = label.toLowerCase();\n  return (\n    <div className=\"ResultsPanel--score\">\n      <div className={`ResultsPanel--score-number ${className}`}>{count}</div>\n      <span>{label}</span>\n    </div>\n  );\n}\n\nexport default function ResultsPanel({\n  attemptCount,\n  correct = 0,\n  incorrect = 0,\n  locked,\n  onRetakeClick,\n  previousPercentCorrect,\n  reviewLink,\n  skipped = 0,\n}) {\n  const total = correct + incorrect + skipped;\n  const percentCorrect = (correct / total) * 100;\n  const roundedPercentage = Math.round(percentCorrect) || 0;\n  const summaryText =\n    attemptCount > 1\n      ? `You got ${previousPercentCorrect}% correct last time.`\n      : `You got ${correct} of ${total} correct.`;\n\n  const amplitudeEvent = locked\n    ? \"quizLockedRetakeButton\"\n    : \"quizUnlockedRetakeButton\";\n  const amplitudeFunnel = locked ? \"paid\" : \"none\";\n\n  return (\n    <div className=\"ResultsPanel--container\" data-test=\"QuizResultsPanel\">\n      <div className=\"ResultsPanel--left-content\">\n        <div className=\"ResultsPanel--left-percentage\">\n          <span className=\"ResultsPanel--left-percentageText\">\n            {roundedPercentage}%\n          </span>\n        </div>\n        <div className=\"ResultsPanel--left-overview body-1\">\n          <Counter count={correct} label=\"Correct\" />\n          <Counter count={incorrect} label=\"Incorrect\" />\n          {skipped > 0 && <Counter count={skipped} label=\"Skipped\" />}\n        </div>\n      </div>\n      <div className=\"ResultsPanel--right-content\">\n        <div>\n          {summaryText} Keep going!{\" \"}\n          <a href={reviewLink}>Review the summary &amp; analysis</a>, retake\n          this quiz, or review your answers below.\n        </div>\n        <div>\n          <button\n            className=\"ResultsPanel--right-btn btn btn-a-plus button-1 btn-lg\"\n            data-amplitude={amplitudeEvent}\n            data-amplitude-funnel={amplitudeFunnel}\n            onClick={onRetakeClick}\n            id=\"retake-quiz-button\"\n            type=\"button\"\n          >\n            {locked && <i className=\"lc-icon lc-icon-lock-filled lc-icon-sm\" />}\n            <span>Retake Quiz</span>\n          </button>\n        </div>\n      </div>\n    </div>\n  );\n}\n\nResultsPanel.defaultProps = defaultProps;\nResultsPanel.propTypes = propTypes;\n","export const QUIZ_ANSWER_STATES = {\n  UNLOCKED: \"unlocked\",\n  LOCKED: \"locked\",\n  CORRECT: \"correct\",\n  INCORRECT: \"incorrect\",\n  SKIPPED: \"skipped\",\n  DISABLED: \"disabled\",\n};\n\nexport const QUIZ_RESULT_STATES = {\n  CORRECT: \"correct\",\n  INCORRECT: \"incorrect\",\n  SKIPPED: \"skipped\",\n};\n\nexport const REUSABLES = {\n  TITLE: \"title\",\n  TOPIC: \"topic\",\n  SUBTOPIC: \"subtopic\",\n};\n\nexport const ANSWER_OPTION_LETTERS = [\"a\", \"b\", \"c\", \"d\"];\n","import React from \"react\";\nimport MultiSelectRefinementList from \"components/search/base/MultiSelectRefinementList\";\nimport { authorEthnicities } from \"components/search/references/authorCategories\";\n\nconst AuthorEthnicityMultiSelect = () => {\n  return (\n    <MultiSelectRefinementList\n      attribute=\"authorEthnicity\"\n      categories={authorEthnicities}\n      className=\"refinement-list__author-ethnicity\"\n      id=\"refinement-list__author-ethnicity\"\n      limit={100}\n      name=\"refinement-list__author-ethnicity\"\n      title=\"Ethnicity\"\n    />\n  );\n};\n\nexport default AuthorEthnicityMultiSelect;\n","import React from \"react\";\nimport MultiSelectRefinementList from \"components/search/base/MultiSelectRefinementList\";\nimport { authorGenders } from \"components/search/references/authorCategories\";\n\nconst AuthorGenderMultiSelect = () => {\n  return (\n    <MultiSelectRefinementList\n      attribute=\"authorGender\"\n      categories={authorGenders}\n      className=\"refinement-list__author-gender\"\n      id=\"refinement-list__author-gender\"\n      limit={100}\n      name=\"refinement-list__author-gender\"\n      title=\"Gender\"\n    />\n  );\n};\n\nexport default AuthorGenderMultiSelect;\n","import React from \"react\";\nimport MultiSelectRefinementList from \"components/search/base/MultiSelectRefinementList\";\n\nconst AuthorNationalityMultiSelect = ({ countries }) => {\n  return (\n    <MultiSelectRefinementList\n      attribute=\"authorNationality\"\n      categories={countries}\n      className=\"refinement-list__author-nationality\"\n      id=\"refinement-list__author-nationality\"\n      limit={100}\n      name=\"refinement-list__author-nationality\"\n      title=\"Nationality\"\n    />\n  );\n};\n\nexport default AuthorNationalityMultiSelect;\n","import React from \"react\";\nimport MultiSelectRefinementList from \"components/search/base/MultiSelectRefinementList\";\nimport genreCategories from \"components/search/references/genreCategories\";\n\nconst GenreMultiSelect = () => {\n  return (\n    <MultiSelectRefinementList\n      attribute=\"genre\"\n      categories={genreCategories}\n      className=\"refinement-list__genre\"\n      id=\"refinement-list__genre\"\n      limit={100}\n      name=\"refinement-list__genre\"\n      title=\"Genre\"\n    />\n  );\n};\n\nexport default GenreMultiSelect;\n","import React from \"react\";\nimport RefinementList from \"components/search/base/RefinementList\";\nimport gradeLevelCategories from \"components/search/references/gradeLevelCategories\";\n\nconst GradeLevelRefinementList = () => {\n  return (\n    <RefinementList\n      attribute=\"gradeLevel\"\n      categories={gradeLevelCategories}\n      limit={100}\n      title=\"Grade Level\"\n    />\n  );\n};\n\nexport default GradeLevelRefinementList;\n","import React from \"react\";\nimport HierarchicalRefinementList from \"components/search/base/HierarchicalRefinementList\";\nimport guideCategories from \"components/search/references/guideCategories\";\n\nconst GuideRefinementList = () => {\n  return (\n    <HierarchicalRefinementList\n      attribute=\"category\"\n      categories={guideCategories}\n      limit={20}\n      title=\"Type of Guide\"\n    />\n  );\n};\n\nexport default GuideRefinementList;\n","import React from \"react\";\nimport RefinementList from \"components/search/base/RefinementList\";\nimport literaryMovementCategories from \"components/search/references/literaryMovementCategories\";\n\nconst LiteraryMovementRefinementList = () => {\n  return (\n    <RefinementList\n      attribute=\"literaryMovement\"\n      categories={literaryMovementCategories}\n      limit={100}\n      refinementLimit={3}\n      title=\"Literary Movement\"\n    />\n  );\n};\n\nexport default LiteraryMovementRefinementList;\n","import React from \"react\";\nimport RefinementList from \"components/search/base/RefinementList\";\nimport literaryPeriodCategories from \"components/search/references/literaryPeriodCategories\";\n\nconst LiteraryPeriodRefinementList = () => {\n  return (\n    <RefinementList\n      attribute=\"literaryPeriod\"\n      categories={literaryPeriodCategories}\n      limit={100}\n      refinementLimit={3}\n      title=\"Literary Period\"\n    />\n  );\n};\n\nexport default LiteraryPeriodRefinementList;\n","import React from \"react\";\nimport RefinementList from \"components/search/base/RefinementList\";\nimport timePeriodCategories from \"components/search/references/timePeriodCategories\";\n\nconst TimePeriodRefinementList = () => {\n  return (\n    <RefinementList\n      attribute=\"timePeriod\"\n      categories={timePeriodCategories}\n      limit={100}\n      refinementLimit={3}\n      title=\"Time Period (When Written)\"\n    />\n  );\n};\n\nexport default TimePeriodRefinementList;\n","import React from \"react\";\nimport HierarchicalRefinementList from \"components/search/base/HierarchicalRefinementList\";\nimport typeCategories from \"components/search/references/typeCategories\";\n\nconst TypeHierarchicalRefinementList = () => {\n  return (\n    <HierarchicalRefinementList\n      attribute=\"type\"\n      categories={typeCategories}\n      limit={50}\n      title=\"Type of Work & Genre\"\n    />\n  );\n};\n\nexport default TypeHierarchicalRefinementList;\n","// List of currently selected refinements across all filters, shown at the top\n// of the search results. It becomes sticky when scrolling down far enough\n// and it expands/collapses dynamically based on the number of selected filters\n// and what the user is doing\n\nimport React, { useState, useRef, useEffect } from \"react\";\nimport { connectCurrentRefinements } from \"react-instantsearch-dom\";\n\nimport string from \"helpers/string\";\n\n// TODO interim: consolidate this with a master list of categories\nconst MAPPING = {\n  \"Lit Guide > Lit Guide\": \"Lit Guides: Titles\",\n  \"Lit Guide > Theme\": \"Lit Guides: Themes\",\n  \"Lit Guide > Symbol\": \"Lit Guides: Symbols\",\n  \"Lit Guide > Character\": \"Lit Guides: Characters\",\n  \"Lit Guide > Term\": \"Lit Guides: Terms\",\n  \"Lit Guide > Quotes\": \"Lit Guides: Quotes\",\n  \"Lit Guide > Summary & Analysis\": \"Lit Guides: Summary & Analysis\",\n  \"Lit Guide > Other\": \"Lit Guides: Other\",\n  \"Lit Guide > Quiz\": \"Lit Guides: Quizzes\",\n  \"Lit Guide > Lit Device\": \"Lit Guides: Literary Devices\",\n  \"Poetry Guide > Poetry Guide\": \"Poetry Guides: Titles\",\n  \"Poetry Guide > Theme\": \"Poetry Guides: Themes\",\n  \"Poetry Guide > Symbol\": \"Poetry Guides: Symbols\",\n  \"Poetry Guide > Poetic Device\": \"Poetry Guides: Poetic Devices\",\n  \"Poetry Guide > Other\": \"Poetry Guides: Other\",\n  \"Shakescleare > Shakescleare\": \"Shakescleare: Titles\",\n  \"Shakescleare > Scene\": \"Shakescleare: Scenes\",\n  \"Shakescleare > Other\": \"Shakescleare: Other\",\n  \"Lit Term > Lit Term\": \"All Lit Terms\",\n  \"Lit Terms > Other\": \"Lit Terms: Other\",\n  \"Poetry > Lyric Poetry\": \"Lyric Poetry\",\n  \"Poetry > Narrative Poetry\": \"Narrative Poetry\",\n  \"Poetry > <n/a>\": \"Poetry: Other\",\n  \"Prose Nonfiction > Autobiography / Memoir\": \"Autobiographies/Memoirs\",\n  \"Prose Nonfiction > Biography\": \"Biographies\",\n  \"Prose Nonfiction > Diary or Journal\": \"Diaries or Journals\",\n  \"Prose Nonfiction > Document\": \"Documents\",\n  \"Prose Nonfiction > Essay\": \"Essays\",\n  \"Prose Nonfiction > Graphic Memoir / Biography\":\n    \"Graphic Memoirs/Biographies\",\n  \"Prose Nonfiction > History\": \"History\",\n  \"Prose Nonfiction > Philosophy & Political Philosophy\":\n    \"Philosophy & Political Philosophy\",\n  \"Prose Nonfiction > Sermon, Speech, or Lecture\":\n    \"Sermons, Speeches, or Lectures\",\n  \"Prose Nonfiction > Sociology & Social Science\": \"Sociology & Social Science\",\n  \"Prose Nonfiction > Theology\": \"Theology\",\n  \"Prose Nonfiction > <n/a>\": \"Prose Nonfiction: Other\",\n  \"Prose Fiction > Folktale, Fable, or Fairy Tale\":\n    \"Folktales, Fables, or Fairy Tales\",\n  \"Prose Fiction > Graphic Novel\": \"Graphic Novels\",\n  \"Prose Fiction > Novel\": \"Novels\",\n  \"Prose Fiction > Novella\": \"Novellas\",\n  \"Prose Fiction > Short Story / Story Collection\":\n    \"Short Stories/Story Collections\",\n  \"Prose Fiction > <n/a>\": \"Other\",\n  \"Play or Drama > Musical\": \"Musicals\",\n  \"Play or Drama > One-Act Play\": \"One-Act Plays\",\n  \"Play or Drama > Verse Drama\": \"Verse Dramas\",\n  \"Play or Drama > <n/a>\": \"Play or Drama: Other\",\n  \"Mythology > <n/a>\": \"Mythology: Other\",\n};\n\n// Each individual selected refinement\nconst CurrentRefinementPill = (props) => {\n  return (\n    // eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions\n    <div\n      className=\"current-refinements__refinement\"\n      onClick={() => props.refine(props.value)}\n    >\n      {props.text}\n      <i className=\"lc-icon lc-icon-xs lc-icon-close\" />\n    </div>\n  );\n};\n\nconst getLabel = (label, item) => {\n  if (item.attribute === \"literaryPeriod\") {\n    return `${label.split(\" (\")[0]}...`;\n  }\n  if (item.attribute === \"gradeLevel\") {\n    if (label === \"Higher education\") return label;\n    return string.cardinalize(label);\n  }\n  if ([\"category\", \"type\"].indexOf(item.attribute) > -1) {\n    return string.truncate(MAPPING[label] || \"UNLABELED\", 31);\n  }\n\n  return string.truncate(label, 31);\n};\n\nconst BOOTSTRAP_COL_PADDING = 30;\n\n// The current refinements container becomes fixed when scrolling down so it needs\n// a fixed pixel width\nconst handleResize = () => {\n  $(\".current-refinements\").width(\n    $(\".current-refinements\").parent().outerWidth() - BOOTSTRAP_COL_PADDING\n  );\n};\n\nconst CurrentRefinements = (props) => {\n  // If the current refinement is fixed to the top of the page\n  const [isSticky, setIsSticky] = useState(false);\n\n  // If current refinement is expanded to show all refinements or collapsed\n  const [isExpanded, setIsExpanded] = useState(true);\n\n  // Number of hidden refinements\n  const [hiddenRefinements, setHiddenRefinements] = useState(0);\n\n  const containerRef = useRef(null);\n  const listRef = useRef(null);\n\n  useEffect(() => {\n    window.addEventListener(\"resize\", handleResize);\n\n    handleResize();\n\n    return function cleanup() {\n      window.removeEventListener(\"resize\", handleResize);\n    };\n  }, []);\n\n  useEffect(() => {\n    window.addEventListener(\"scroll\", handleScroll, { passive: true });\n\n    return function cleanup() {\n      window.removeEventListener(\"scroll\", handleScroll);\n    };\n  }, [isSticky]);\n\n  // Always expand list when an item is added/removed\n  useEffect(() => {\n    setIsExpanded(true);\n  }, [props.items]);\n\n  // When shrinking on scroll, set the hidden refinement count for the more button\n  useEffect(() => {\n    if (!isExpanded) {\n      let count = 0;\n\n      let top = -1;\n      // eslint-disable-next-line no-restricted-syntax\n      for (const child of listRef.current.children) {\n        if (top < 0) {\n          top = child.getBoundingClientRect().top;\n        } else if (child.getBoundingClientRect().top > top) {\n          count += 1;\n        }\n      }\n\n      setHiddenRefinements(count);\n    }\n  }, [isExpanded]);\n\n  // On scroll, handle sticky status of the refinement container\n  const handleScroll = () => {\n    if (containerRef.current) {\n      if (isSticky) {\n        setIsSticky($(\".search__searchbar\")[0].getBoundingClientRect().top < 0);\n      } else {\n        setIsSticky(containerRef.current.getBoundingClientRect().top <= 0);\n      }\n    }\n\n    setIsExpanded(false);\n  };\n\n  const expandList = () => {\n    setIsExpanded(true);\n  };\n\n  const itemsToRender = [];\n\n  // The items array may have different children depending on the type of filter\n  // and which filter is selected, this method covers each case\n  props.items.forEach((item) => {\n    let label;\n\n    if (item.items) {\n      item.items.forEach((refinement) => {\n        label = getLabel(refinement.label, item);\n        itemsToRender.push({ text: `${label}`, value: refinement.value });\n      });\n    } else if (Array.isArray(item.currentRefinement)) {\n      item.currentRefinement.forEach((refinement) => {\n        label = getLabel(refinement.label, item);\n        itemsToRender.push({ text: label, value: item.value });\n      });\n    } else {\n      label = getLabel(item.label, item);\n      itemsToRender.push({ text: label, value: item.value });\n    }\n  });\n\n  // Add extra CSS classes based on component state\n  let containerClassName = \"current-refinements\";\n  if (itemsToRender.length === 0) {\n    containerClassName += \" current-refinements--empty\";\n  } else if (isSticky) {\n    containerClassName += \" current-refinements--sticky\";\n  }\n\n  let listClassName = \"current-refinements__list\";\n  if (itemsToRender.length === 0) {\n    listClassName += \" current-refinements__list--empty\";\n  } else if (!isExpanded) {\n    listClassName += \" current-refinements__list--shrunk\";\n  }\n\n  return (\n    <div className={containerClassName} ref={containerRef}>\n      {itemsToRender.length > 0 && (\n        <div className=\"current-refinements__header\">Selected Filters</div>\n      )}\n      <div className=\"current-refinements__list-container\">\n        <div className={listClassName} ref={listRef}>\n          {itemsToRender.map((item) => {\n            return (\n              <CurrentRefinementPill\n                key={item.text + item.label}\n                refine={props.refine}\n                text={item.text}\n                value={item.value}\n              />\n            );\n          })}\n        </div>\n        {hiddenRefinements > 0 && !isExpanded && (\n          <div className=\"current-refinements__expand\">\n            <button\n              className=\"btn btn-text btn-sm\"\n              onClick={expandList}\n              type=\"button\"\n            >\n              <span className=\"hidden-xs\">{`+ ${hiddenRefinements} more`}</span>\n              <span className=\"visible-xs hidden-sm\">{`+ ${hiddenRefinements}`}</span>\n            </button>\n          </div>\n        )}\n      </div>\n    </div>\n  );\n};\n\nexport default connectCurrentRefinements(CurrentRefinements);\n","// The refinement list that is toggled dynamically from the HierarchicalRefinementList\n// On desktop, it is shown on hover, on touch devices it is shown on touch\n// On mobile, it doesn't flyout but replaces the filter in the filter slideout\n\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport { RefinementList } from \"components/search/base/RefinementList\";\nimport IconButton from \"components/shared/IconButton\";\nimport flyoutReference from \"components/search/references/flyoutReference\";\n\nconst propTypes = {\n  attribute: PropTypes.string.isRequired,\n  category: PropTypes.string.isRequired,\n  hidden: PropTypes.bool,\n  hideFlyout: PropTypes.func.isRequired,\n  hideFlyoutHover: PropTypes.func.isRequired,\n  refine: PropTypes.func.isRequired,\n};\n\nconst defaultProps = {\n  hidden: true,\n};\n\nconst Flyout = (props) => {\n  const categories =\n    flyoutReference[flyoutReference.referenceMapping[props.category]];\n  let className = \"refinement-list__flyout\";\n  if (props.hidden) className += \" hidden\";\n\n  let title = props.category;\n  if ([\"Lit Guide\", \"Poetry Guide\", \"Lit Term\"].indexOf(title) > -1) {\n    title = `${title}s`;\n  }\n\n  return (\n    <div className={className} onMouseLeave={props.hideFlyoutHover}>\n      <div className=\"refinement-list__flyout-header\">\n        <IconButton\n          btnClass=\"btn-sm btn-text\"\n          iconClass=\"lc-icon-arrow-left lc-icon-xs\"\n          onClick={props.hideFlyout}\n          text=\"All filters\"\n        />\n        <h2>{props.category}</h2>\n      </div>\n      <RefinementList\n        attribute={props.attribute}\n        categories={categories}\n        controlled\n        currentRefinement={props.currentRefinement}\n        items={props.items}\n        refine={props.refine}\n      />\n    </div>\n  );\n};\n\nFlyout.propTypes = propTypes;\nFlyout.defaultProps = defaultProps;\n\nexport default Flyout;\n","// Renders a list of categories as HierarchicalRefinementListElement with\n// accessible subcategories as Flyouts. Controls the Flyout state for all Flyouts\n// rendered by this component as well as callbacks for controlling them on\n// desktop/mobile\n\nimport React, { useEffect, useState } from \"react\";\nimport { connectRefinementList } from \"react-instantsearch-dom\";\nimport PropTypes from \"prop-types\";\n\nimport { XS_PIXEL_MAX } from \"constants/breakpoints\";\nimport HierarchicalRefinementListElement from \"components/search/base/HierarchicalRefinementListElement\";\n\nconst propTypes = {\n  attribute: PropTypes.string.isRequired,\n  categories: PropTypes.arrayOf(\n    PropTypes.shape({\n      label: PropTypes.string.isRequired,\n      value: PropTypes.string.isRequired,\n    }).isRequired\n  ).isRequired,\n  items: PropTypes.array,\n  refine: PropTypes.func.isRequired,\n  title: PropTypes.string.isRequired,\n};\n\nconst defaultProps = {\n  items: [],\n};\n\nconst HierarchicalRefinementList = (props) => {\n  // Only one flyout can be visible at a time, this manages the state\n  const [flyState, setFlyState] = useState(null);\n\n  // Stores the internal state for all of the flyouts by category\n  const [refinedValues, updateRefinedValue] = useState({});\n\n  // Pass the internally stored refined values to Algolia\n  useEffect(() => {\n    props.refine([].concat(...Object.values(refinedValues)));\n  }, [refinedValues]);\n\n  const handleRefine = (values, category) => {\n    updateRefinedValue((prevState) => ({ ...prevState, [category]: values }));\n  };\n\n  // Add events to manage showing/hiding flyouts\n  useEffect(() => {\n    if (flyState === null) {\n      document.removeEventListener(\"click\", outsideFlyoutClickListener);\n      document.removeEventListener(\"touchend\", outsideFlyoutClickListener);\n    } else {\n      document.addEventListener(\"click\", outsideFlyoutClickListener);\n      document.addEventListener(\"touchend\", outsideFlyoutClickListener);\n    }\n\n    return function cleanup() {\n      document.removeEventListener(\"click\", outsideFlyoutClickListener);\n      document.removeEventListener(\"touchend\", outsideFlyoutClickListener);\n    };\n  }, [flyState]);\n\n  const toggleFlyout = (category) => {\n    if (category === null) {\n      $(\".search__filters\").removeClass(\"search__filters--with-flyout\");\n    } else {\n      $(\".search__filters\").addClass(\"search__filters--with-flyout\");\n    }\n\n    setFlyState(category);\n  };\n\n  // Closes flyout if clicked outside of it\n  const outsideFlyoutClickListener = (event) => {\n    const $target = $(event.target);\n    if (\n      !$target.closest($(\".refinement-list__flyout\")).length &&\n      $(\".refinement-list__flyout\").is(\":visible\")\n    ) {\n      toggleFlyout(null);\n    }\n  };\n\n  // Closes flyout if hovered outside of it\n  const outsideFlyoutHover = (event) => {\n    // Hovers only registered on large size\n    if (window.innerWidth <= XS_PIXEL_MAX) {\n      return;\n    }\n\n    const $target = $(event.target);\n    if (\n      !$target.closest($(\".refinement-list__flyout\")).length &&\n      $(\".refinement-list__flyout\").is(\":visible\")\n    ) {\n      toggleFlyout(null);\n    }\n  };\n\n  return (\n    <div className=\"refinement-list\" onMouseLeave={outsideFlyoutHover}>\n      <div className=\"refinement-list__header\">{props.title}</div>\n      <ul className=\"refinement-list__list refinement-list__list--hierarchical\">\n        {props.categories.map((category) => {\n          const items =\n            props.items.filter(\n              (i) => i.label.split(\" > \")[0] === category.value\n            ) || [];\n          const showFlyout = flyState === category.value;\n\n          return (\n            <HierarchicalRefinementListElement\n              attribute={props.attribute}\n              currentRefinement={props.currentRefinement}\n              handleClick={toggleFlyout}\n              handleRefine={handleRefine}\n              items={items}\n              key={category.value}\n              label={category.label}\n              showFlyout={showFlyout}\n              value={category.value}\n            />\n          );\n        })}\n      </ul>\n    </div>\n  );\n};\n\nHierarchicalRefinementList.propTypes = propTypes;\nHierarchicalRefinementList.defaultProps = defaultProps;\n\nexport default connectRefinementList(HierarchicalRefinementList);\n","// Category within a HierarchicalRefinementList, triggers the respective flyout\n// on click/hover interactions\n\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport { XS_PIXEL_MAX } from \"constants/breakpoints\";\nimport number from \"helpers/number\";\nimport Flyout from \"components/search/base/Flyout\";\n\nconst propTypes = {\n  attribute: PropTypes.string.isRequired,\n  handleClick: PropTypes.func,\n  handleRefine: PropTypes.func.isRequired,\n  items: PropTypes.array,\n  label: PropTypes.string.isRequired,\n  showFlyout: PropTypes.bool,\n  value: PropTypes.string.isRequired,\n};\n\nconst defaultProps = {\n  handleClick: () => {},\n  items: [],\n  showFlyout: false,\n};\n\nconst HierarchicalRefinementListElement = (props) => {\n  // Set up count labels and respective CSS classes\n  let itemsToCount = props.items.filter((item) => item.isRefined);\n  const refinedCount = itemsToCount.length;\n\n  if (refinedCount === 0) itemsToCount = props.items;\n\n  const hitCount = itemsToCount.reduce(\n    (accumulator, currentVal) => accumulator + currentVal.count,\n    0\n  );\n  let liClassName =\n    \"refinement-list__element refinement-list__element--hierarchical\";\n\n  if (hitCount === 0) liClassName += \" refinement-list__element--disabled\";\n  if (props.showFlyout) liClassName += \" refinement-list__element--active\";\n\n  let elementCountClassName = \"refinement-list__element-count\";\n  if (refinedCount > 0)\n    elementCountClassName += \" refinement-list__element-count--refined\";\n\n  return (\n    <li key={props.value} className={liClassName}>\n      {/* eslint-disable-next-line jsx-a11y/click-events-have-key-events */}\n      <div\n        className=\"refinement-list__element-subcontainer\"\n        onMouseEnter={() => {\n          if (window.innerWidth <= XS_PIXEL_MAX) {\n            return;\n          }\n          props.handleClick(props.value);\n        }}\n        onClick={() => {\n          props.handleClick(props.value);\n        }}\n        role=\"button\"\n        tabIndex=\"-1\"\n      >\n        {props.label}\n        <span className=\"refinement-list__element-right-side\">\n          {refinedCount > 0 && (\n            <span className=\"refinement-list__num-applied\">\n              {refinedCount} applied\n            </span>\n          )}\n          <span className={elementCountClassName}>\n            {number.commaSeparateNumber(hitCount)}\n          </span>\n          <i className=\"lc-icon lc-icon-right lc-icon-xs refimement-list__expand-icon\" />\n        </span>\n      </div>\n\n      <Flyout\n        attribute={props.attribute}\n        category={props.value}\n        currentRefinement={props.currentRefinement}\n        hidden={!props.showFlyout}\n        hideFlyout={() => props.handleClick(null)}\n        hideFlyoutHover={() => {\n          if (window.innerWidth <= XS_PIXEL_MAX) {\n            return;\n          }\n\n          props.handleClick(null);\n        }}\n        items={props.items}\n        refine={props.handleRefine}\n      />\n    </li>\n  );\n};\n\nHierarchicalRefinementListElement.propTypes = propTypes;\nHierarchicalRefinementListElement.defaultProps = defaultProps;\n\nexport default HierarchicalRefinementListElement;\n","// Individual search result\n\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport string from \"helpers/string\";\n\nconst propTypes = {\n  hit: PropTypes.shape({\n    category: PropTypes.string.isRequired,\n    primaryTitle: PropTypes.string.isRequired,\n    secondaryTitle: PropTypes.string,\n    path: PropTypes.string.isRequired,\n    blurb: PropTypes.string.isRequired,\n    author: PropTypes.string,\n  }).isRequired,\n  isAPlus: PropTypes.bool,\n};\n\nconst defaultProps = {\n  isAPlus: false,\n};\n\nconst Hit = ({ hit, isAPlus }) => {\n  const title = hit.secondaryTitle\n    ? `${hit.secondaryTitle} > ${hit.primaryTitle}`\n    : hit.primaryTitle;\n  const category = hit.category.split(\" > \")[1];\n\n  let hitClass = \"hit-item\";\n  let categoryClass = `category ${category\n    .toLowerCase()\n    .replace(\"&\", \"\")\n    .replace(/[ ]+/g, \"-\")}`;\n  let titleClass = \"title\";\n  let blurbClass = \"\";\n  let authorClass = \"search__hit-author\";\n\n  let isBlurred = false;\n  if (\n    !isAPlus &&\n    [\"Lit Guide\", \"Poetry Guide\", \"Shakescleare\", \"Lit Term\"].indexOf(\n      category\n    ) < 0\n  ) {\n    hitClass += \" blurred\";\n    categoryClass += \" blurred\";\n    titleClass += \" blurred-text\";\n    blurbClass += \" blurred-text\";\n    authorClass += \" blurred-text\";\n\n    isBlurred = true;\n  }\n\n  return (\n    <div className={hitClass}>\n      {isBlurred ? (\n        <div>\n          <span className={categoryClass}>{category}</span>\n          <span className={titleClass}>{title}</span>\n        </div>\n      ) : (\n        <div>\n          <a className={categoryClass} href={hit.path}>\n            {category}\n          </a>\n          <a className={titleClass} href={hit.path}>\n            {title}\n          </a>\n        </div>\n      )}\n      {category !== \"Lit Term\" && (\n        <div className={authorClass}>by {hit.author}</div>\n      )}\n      <div className={blurbClass}>{string.htmlDecode(hit.blurb)}</div>\n    </div>\n  );\n};\n\nHit.propTypes = propTypes;\nHit.defaultProps = defaultProps;\n\nexport default Hit;\n","// List of search results\n\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\nimport {\n  connectHits,\n  connectStateResults,\n  Pagination,\n} from \"react-instantsearch-dom\";\n\nimport APlus from \"components/shared/dialogs/APlus\";\nimport Hit from \"components/search/base/Hit\";\nimport logo from \"images/reskin/small-logo-and-wordmark-a-plus.svg\";\nimport number from \"helpers/number\";\nimport NoResults from \"components/search/base/NoResults\";\n\nconst propTypes = {\n  aPlusPromoUrl: PropTypes.string.isRequired,\n  hits: PropTypes.array,\n  isAPlus: PropTypes.bool,\n  promoInfo: PropTypes.shape({\n    characterCount: PropTypes.number,\n    quoteCount: PropTypes.number,\n    symbolCount: PropTypes.number,\n    themeCount: PropTypes.number,\n    quizCount: PropTypes.number,\n    litDeviceCount: PropTypes.number,\n  }).isRequired,\n  userSignedIn: PropTypes.bool,\n};\n\nconst defaultProps = {\n  hits: [],\n  isAPlus: false,\n  userSignedIn: false,\n};\n\nconst Paginate = connectStateResults(({ searchResults }) => {\n  if (searchResults && searchResults.nbHits <= 20) return null;\n\n  return (\n    <div id=\"pagination\" className=\"lc-pagination\">\n      <Pagination showLast />\n    </div>\n  );\n});\n\nconst PromoContent = connectStateResults(\n  ({ promoInfo, searchResults, searchState }) => {\n    const relatedText =\n      (searchState.query || \"\").length > 0\n        ? `related to ${searchState.query}`\n        : \"related to your search\";\n    const resultData = searchResults.disjunctiveFacets[0].data;\n    return (\n      <div>\n        <div>\n          Unlock <strong>Advanced Search</strong>. Get the power to{\" \"}\n          <strong>refine</strong> your search and find <strong>related</strong>{\" \"}\n          themes, symbols, characters, or quotes:\n        </div>\n        <ul>\n          <li className=\"theme\">\n            <strong>{`${number.commaSeparateNumber(\n              promoInfo.themeCount\n            )} themes`}</strong>{\" \"}\n            ({number.commaSeparateNumber(resultData[\"Lit Guide > Theme\"] || 0)}{\" \"}\n            {relatedText})\n          </li>\n          <li className=\"symbol\">\n            <strong>{`${number.commaSeparateNumber(\n              promoInfo.symbolCount\n            )} symbols`}</strong>{\" \"}\n            ({number.commaSeparateNumber(resultData[\"Lit Guide > Symbol\"] || 0)}{\" \"}\n            {relatedText})\n          </li>\n          <li className=\"character\">\n            <strong>{`${number.commaSeparateNumber(\n              promoInfo.characterCount\n            )} characters`}</strong>{\" \"}\n            (\n            {number.commaSeparateNumber(\n              resultData[\"Lit Guide > Character\"] || 0\n            )}{\" \"}\n            {relatedText})\n          </li>\n          <li className=\"quotes\">\n            <strong>{`${number.commaSeparateNumber(\n              promoInfo.quoteCount\n            )} quotes`}</strong>{\" \"}\n            ({number.commaSeparateNumber(resultData[\"Lit Guide > Quotes\"] || 0)}{\" \"}\n            {relatedText})\n          </li>\n          <li className=\"quizzes\">\n            <strong>{`${number.commaSeparateNumber(\n              promoInfo.quizCount\n            )} quizzes`}</strong>{\" \"}\n            (\n            {number.commaSeparateNumber(resultData[\"Lit Guide > Quizzes\"] || 0)}{\" \"}\n            {relatedText})\n          </li>\n          <li className=\"lit-devices\">\n            <strong>{`${number.commaSeparateNumber(\n              promoInfo.litDeviceCount\n            )} literary devices`}</strong>{\" \"}\n            (\n            {number.commaSeparateNumber(\n              resultData[\"Lit Guide > Lit Device\"] || 0\n            )}{\" \"}\n            {relatedText})\n          </li>\n        </ul>\n      </div>\n    );\n  }\n);\n\nfunction Hits(props) {\n  if (props.hits.length === 0) {\n    return (\n      <NoResults\n        userSignedIn={props.userSignedIn}\n        showRequestContentAfterDelay={props.showRequestContentAfterDelay}\n      />\n    );\n  }\n\n  // Set so only 1 promo can be visible at a time\n  let shownPromo = false;\n  return (\n    <div id=\"hits\">\n      {props.hits.map((hit) => {\n        if (\n          !props.isAPlus &&\n          !shownPromo &&\n          [\"Lit Guide\", \"Poetry Guide\", \"Shakescleare\", \"Lit Term\"].indexOf(\n            hit.category.split(\" > \")[1]\n          ) < 0\n        ) {\n          shownPromo = true;\n          return (\n            <div key={hit.objectID} className=\"hits__a-plus-container\">\n              <div className=\"hits__a-plus-dialog\">\n                <APlus\n                  amplitudeKey=\"advancedSearchCentralColumn\"\n                  href={props.aPlusPromoUrl}\n                  logoSrc={logo}\n                  isFreeTier={props.userSignedIn}\n                >\n                  <PromoContent promoInfo={props.promoInfo} />\n                </APlus>\n              </div>\n              <Hit hit={hit} isAPlus={props.isAPlus} />\n            </div>\n          );\n        }\n\n        return <Hit key={hit.objectID} hit={hit} isAPlus={props.isAPlus} />;\n      })}\n      <Paginate />\n    </div>\n  );\n}\n\nHits.propTypes = propTypes;\nHits.defaultProps = defaultProps;\n\nexport default connectHits(Hits);\n","// Wrapper of the MultiSelect component with added functionality to refine search\n// results on option select\n\nimport React from \"react\";\nimport { connectRefinementList } from \"react-instantsearch-dom\";\nimport PropTypes from \"prop-types\";\n\nimport promoAttributeReference from \"components/search/references/promoAttributeReference\";\nimport FilterPromoContext from \"components/search/context/FilterPromoContext\";\nimport MultiSelect from \"components/shared/MultiSelect\";\n\nconst propTypes = {\n  attribute: PropTypes.string.isRequired,\n  categories: PropTypes.arrayOf(\n    PropTypes.shape({\n      label: PropTypes.string.isRequired,\n      value: PropTypes.string.isRequired,\n    }).isRequired\n  ).isRequired,\n  className: PropTypes.string,\n  currentRefinement: PropTypes.array,\n  id: PropTypes.string.isRequired,\n  items: PropTypes.array,\n  name: PropTypes.string.isRequired,\n  refine: PropTypes.func.isRequired,\n  title: PropTypes.string,\n\n  //\n  // Filter promo context props\n  isAPlus: PropTypes.bool,\n  setCurrentPromoAttribute: PropTypes.func.isRequired,\n};\n\nconst defaultProps = {\n  className: \"\",\n  isAPlus: false,\n  items: [],\n  title: null,\n};\n\nconst MultiSelectRefinementList = (props) => {\n  const handleRefine = (selectedValues) => {\n    if (!props.isAPlus) {\n      props.setCurrentPromoAttribute(promoAttributeReference[props.attribute]);\n      return;\n    }\n\n    props.refine((selectedValues || []).map(({ value }) => value));\n  };\n\n  const refinementClassName = `refinement-list ${props.className}`;\n\n  const countedCategories = props.categories.map((cat) => {\n    const { count } = props.items.find((i) => i.label === cat.value) || {\n      count: 0,\n    };\n    return { ...cat, numResults: count };\n  });\n\n  return (\n    <div className={refinementClassName}>\n      {props.title && <div>{props.title}</div>}\n      <MultiSelect\n        id={props.id}\n        isControlled\n        name={props.name}\n        onChange={handleRefine}\n        options={countedCategories}\n        preventSelect={!props.isAPlus}\n        value={props.currentRefinement}\n      />\n    </div>\n  );\n};\n\nconst MultiSelectRefinementListWithContext = (props) => {\n  return (\n    <FilterPromoContext.Consumer>\n      {(filterPromoContextProps) => (\n        <MultiSelectRefinementList {...props} {...filterPromoContextProps} />\n      )}\n    </FilterPromoContext.Consumer>\n  );\n};\n\nMultiSelectRefinementList.propTypes = propTypes;\nMultiSelectRefinementList.defaultProps = defaultProps;\n\nexport default connectRefinementList(MultiSelectRefinementListWithContext);\n","// Rendered when there are no results from the search query\n\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport logo from \"images/reskin/small-logo-and-wordmark.png\";\nimport RequestContentModal from \"components/shared/RequestContentModal\";\n\nconst propTypes = {\n  userSignedIn: PropTypes.bool,\n};\n\nconst defaultProps = {\n  userSignedIn: false,\n};\n\nconst showRequestContentModal = () => {\n  $(\"#request-content-modal\").modal(\"show\");\n};\n\nfunction NoResults(props) {\n  return (\n    <div className=\"no-results\">\n      <div className=\"no-results__title\">No results found.</div>\n      <div className=\"no-results__body text-center\">\n        Please try another search or{\" \"}\n        {props.userSignedIn ? (\n          // eslint-disable-next-line jsx-a11y/anchor-is-valid\n          <a\n            href=\"#\"\n            data-amplitude=\"searchNoResultsRequestGuide\"\n            onClick={showRequestContentModal}\n          >\n            request a guide\n          </a>\n        ) : (\n          // eslint-disable-next-line jsx-a11y/anchor-is-valid\n          <a\n            href=\"#\"\n            data-amplitude=\"searchNoResultsRequestGuide\"\n            data-toggle=\"modal\"\n            data-target=\".registration-modal\"\n          >\n            request a guide\n          </a>\n        )}{\" \"}\n        for us to cover.\n      </div>\n      <RequestContentModal\n        logoUrl={logo}\n        showAfterDelay={props.showRequestContentAfterDelay}\n      />\n    </div>\n  );\n}\n\nNoResults.propTypes = propTypes;\nNoResults.defaultProps = defaultProps;\n\nexport default NoResults;\n","// Rendered within a refinement list and contains the checkbox that triggers the\n// refinement\n\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport number from \"helpers/number\";\nimport ControlledCheckbox from \"components/shared/ControlledCheckbox\";\n\nconst propTypes = {\n  count: PropTypes.number,\n  handleRefine: PropTypes.func.isRequired,\n  isRefined: PropTypes.bool,\n  Label: PropTypes.node.isRequired,\n  refineable: PropTypes.bool,\n  value: PropTypes.string.isRequired,\n};\n\nconst defaultProps = {\n  count: 0,\n  isRefined: false,\n  refineable: false,\n};\n\nconst RefineElement = (props) => {\n  const isDisabled = props.count === 0;\n\n  let containerClassName = \"refine-element\";\n  if (isDisabled) containerClassName += \" refine-element--disabled\";\n  return (\n    <div className={containerClassName}>\n      <div className=\"refine-element__left\">\n        <ControlledCheckbox\n          checked={props.isRefined}\n          disabled={isDisabled}\n          name={props.value}\n          onChange={(e) => {\n            if (!props.refineable) {\n              e.preventDefault();\n            }\n            props.handleRefine(props.value);\n          }}\n        >\n          {props.Label}\n        </ControlledCheckbox>\n      </div>\n      <span\n        className={`refine-element__count${\n          props.isRefined ? \" refine-element__count--refined\" : \"\"\n        }`}\n      >\n        {number.commaSeparateNumber(props.count)}\n      </span>\n    </div>\n  );\n};\n\nRefineElement.propTypes = propTypes;\nRefineElement.defaultProps = defaultProps;\n\nexport default RefineElement;\n","// A filter with a list of refineable values\n//   The refine function is passed either from another local component\n//     (like when the list is managed by the HierarchicalRefinementList)\n//     - import { RefinementList } from \"RefinementList\"\n//   or is passed directly by algolia via connectRefinementList\n//     - import RefinementList from \"RefinementList\"\nimport React, { useEffect, useState } from \"react\";\nimport { connectRefinementList } from \"react-instantsearch-dom\";\nimport PropTypes from \"prop-types\";\nimport array from \"lodash/array\";\n\nimport promoAttributeReference from \"components/search/references/promoAttributeReference\";\nimport FilterPromoContext from \"components/search/context/FilterPromoContext\";\nimport RefineElement from \"components/search/base/RefineElement\";\n\nconst propTypes = {\n  attribute: PropTypes.string,\n  categories: PropTypes.arrayOf(\n    PropTypes.shape({\n      label: PropTypes.string.isRequired,\n      value: PropTypes.string.isRequired,\n    }).isRequired\n  ),\n  currentRefinement: PropTypes.array,\n  items: PropTypes.array,\n  refine: PropTypes.func.isRequired,\n  // Note that refinementLimit is specified internally while `limit` is specified by\n  // the algolia API, which we are not using here\n  refinementLimit: PropTypes.number,\n  title: PropTypes.string,\n\n  //\n  // Filter promo context props\n  //\n  isAPlus: PropTypes.bool,\n  setCurrentPromoAttribute: PropTypes.func.isRequired,\n};\n\nconst defaultProps = {\n  attribute: null,\n  categories: [],\n  currentRefinement: [],\n  isAPlus: false,\n  items: [],\n  refinementLimit: -1,\n  title: null,\n};\n\nconst Label = ({ label, attribute }) => {\n  if (attribute === \"literaryPeriod\") {\n    const [label1, label2] = label.split(\"(\");\n    return (\n      <>\n        {label1}\n        <br />\n        {`(${label2}`}\n      </>\n    );\n  }\n\n  return label;\n};\n\nconst isRefineable = (isAPlus, categoryValue) =>\n  isAPlus ||\n  [\n    \"!Lit Guide\",\n    \"!Poetry Guide\",\n    \"!Shakescleare\",\n    \"Lit Term > Lit Term\",\n  ].indexOf(categoryValue) > -1;\n\nconst RefinementList = (props) => {\n  // Used to show/hide long lists of refinements\n  const [showAllRefinements, setShowAllRefinements] = useState(\n    props.refinementLimit < 0\n  );\n\n  // Show only the number of categories specific by refinementLimit (or all if expanded)\n  const [shownCategories, setShownCategories] = useState([]);\n\n  // Refinements can be removed externally, like for instance if disabled when\n  // no results are present. This keeps track of any refinements that need removing\n  const [refinementsToRemove, setRefinementsToRemove] = useState([]);\n\n  // Keeps track of what elements should be rendered\n  const [renderElements, setRenderElements] = useState([]);\n\n  // Updates shown categories when list is expanded/shrunk\n  useEffect(() => {\n    if (props.refinementLimit < 0 || showAllRefinements) {\n      setShownCategories(props.categories);\n    } else {\n      setShownCategories(props.categories.slice(0, props.refinementLimit));\n    }\n  }, [showAllRefinements]);\n\n  // Updates the shown list of categories when the list of items changes\n  // items include things like if the category is refined and the number\n  // of available refinements for that category\n  useEffect(() => {\n    // If the list of items is empty, it means that we have 0 results from search\n    // so we should clear all selected refinements\n    if (props.items.length === 0 && props.currentRefinement.length !== 0) {\n      setRefinementsToRemove(props.categories.map(({ value }) => value));\n    }\n\n    setRenderElements(\n      shownCategories.map((category) => {\n        let resultCount = 0;\n        let isRefined = false;\n\n        if (category.value[0] === \"!\") {\n          const refineableCategories = props.items.filter(\n            (i) => i.label.split(\" > \")[0] === category.value.slice(1)\n          );\n\n          resultCount = refineableCategories.reduce(\n            (acc, curr) => acc + curr.count,\n            0\n          );\n\n          if (\n            refineableCategories.length > 0 &&\n            refineableCategories.every((i) => i.isRefined)\n          ) {\n            isRefined = true;\n          }\n        } else {\n          const result = props.items.filter(\n            (i) => i.label === category.value\n          )[0];\n          if (result) {\n            resultCount = result.count;\n            isRefined = result.isRefined;\n          }\n        }\n\n        if (isRefined && resultCount === 0 && category.value[0] !== \"!\") {\n          setRefinementsToRemove((prevState) => {\n            return array.uniq([...prevState, category.value]);\n          });\n        }\n\n        const refineable = isRefineable(props.isAPlus, category.value);\n\n        return (\n          <RefineElement\n            count={resultCount}\n            key={category.value}\n            Label={<Label label={category.label} attribute={props.attribute} />}\n            handleRefine={handleRefine}\n            isRefined={isRefined}\n            refineable={refineable}\n            value={category.value}\n          />\n        );\n      })\n    );\n  }, [JSON.stringify(props.items), shownCategories.length]);\n\n  // Clears any needed refinements\n  useEffect(() => {\n    if (refinementsToRemove.length === 0) return;\n    if (\n      array.intersection(refinementsToRemove, props.currentRefinement)\n        .length === 0\n    ) {\n      setRefinementsToRemove([]);\n      return;\n    }\n    props.refine(\n      array.without(props.currentRefinement, ...refinementsToRemove)\n    );\n    setRefinementsToRemove([]);\n  }, [JSON.stringify(refinementsToRemove)]);\n\n  const handleRefine = (value) => {\n    if (!isRefineable(props.isAPlus, value)) {\n      props.setCurrentPromoAttribute(promoAttributeReference[props.attribute]);\n      return;\n    }\n\n    // A value starting with ! indicates one of the \"All\" selections from the\n    // flyout, so that's handled differently\n    if (value[0] === \"!\") {\n      const allCategories = props.categories\n        .filter((ref) => ref.value !== value)\n        .map((ref) => ref.value);\n\n      if (allCategories.every((val) => props.currentRefinement.includes(val))) {\n        props.refine(array.without(props.currentRefinement, ...allCategories));\n      } else {\n        // Unique to dedupe categories in case any are already selected when we\n        // select all\n        props.refine(\n          array.uniq([...props.currentRefinement, ...allCategories])\n        );\n      }\n    } else if (props.currentRefinement.indexOf(value) < 0) {\n      props.refine([...props.currentRefinement, value]);\n    } else {\n      props.refine(props.currentRefinement.filter((c) => c !== value));\n    }\n  };\n\n  const toggleShowAllRefinements = () => {\n    setShowAllRefinements((showingRefiments) => !showingRefiments);\n  };\n\n  return (\n    <div className=\"refinement-list\">\n      {props.title && (\n        <div className=\"refinement-list__header\">{props.title}</div>\n      )}\n      <ul className=\"refinement-list__list\">{renderElements}</ul>\n      {props.refinementLimit > 0 && (\n        <div className=\"refinement-list__expand-container\">\n          <button\n            className=\"btn btn-text btn-sm refinement-list__expand\"\n            onClick={toggleShowAllRefinements}\n            type=\"button\"\n          >\n            {showAllRefinements ? \"- Less\" : \"+ More\"}\n          </button>\n        </div>\n      )}\n    </div>\n  );\n};\n\nRefinementList.propTypes = propTypes;\nRefinementList.defaultProps = defaultProps;\n\nconst RefinementListWithPromoContext = (props) => {\n  return (\n    <FilterPromoContext.Consumer>\n      {(filterPromoContextProps) => (\n        <RefinementList {...props} {...filterPromoContextProps} />\n      )}\n    </FilterPromoContext.Consumer>\n  );\n};\n\n// Base RefinementList - pass in a refine function\nexport { RefinementListWithPromoContext as RefinementList };\n\n// Connected RefinementList - algolia passes in the refine function\nexport default connectRefinementList(RefinementListWithPromoContext);\n","// Creates a react context for managing the state of which mini promo is shown\n// on the filters\nimport React from \"react\";\n\nexport default React.createContext({\n  currentPromoAttribute: null,\n  isAPlus: false,\n  setCurrentPromoAttribute: () => {},\n});\n","// Main component for the search page\n// Note that all algolia connected components using any of the connect methods\n// imported from \"react-instantsearch-dom\" must be rendered within the <InstantSearch />\n// component\n\nimport React, { useState } from \"react\";\nimport algoliasearch from \"algoliasearch\";\nimport {\n  connectSearchBox,\n  connectStateResults,\n  InstantSearch,\n  Stats,\n} from \"react-instantsearch-dom\";\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport PropTypes from \"prop-types\";\n\nimport logo from \"images/reskin/small-logo-a-plus.svg\";\nimport number from \"helpers/number\";\nimport AuthorEthnicityMultiSelect from \"components/search/AuthorEthnicityMultiSelect\";\nimport AuthorGenderMultiSelect from \"components/search/AuthorGenderMultiSelect\";\nimport AuthorNationalityMultiSelect from \"components/search/AuthorNationalityMultiSelect\";\nimport CurrentRefinements from \"components/search/base/CurrentRefinements\";\nimport FilterPromoContext from \"components/search/context/FilterPromoContext\";\nimport GenreMultiSelect from \"components/search/GenreMultiSelect\";\nimport GradeLevelRefinementList from \"components/search/GradeLevelRefinementList\";\nimport GuideRefinementList from \"components/search/GuideRefinementList\";\nimport Hits from \"components/search/base/Hits\";\nimport IconButton from \"components/shared/IconButton\";\nimport LiteraryMovementRefinementList from \"components/search/LiteraryMovementRefinementList\";\nimport LiteraryPeriodRefinementList from \"components/search/LiteraryPeriodRefinementList\";\nimport MiniAPlus from \"components/shared/dialogs/MiniAPlus\";\nimport TypeRefinementList from \"components/search/TypeRefinementList\";\nimport TimePeriodRefinementList from \"components/search/TimePeriodRefinementList\";\n\nconst SearchBox = connectSearchBox(({ currentRefinement, refine }) => {\n  function refineSearch(event) {\n    refine(event.currentTarget.value);\n  }\n\n  return (\n    <>\n      <i className=\"lc-icon lc-icon-search lc-icon-sm tw-text-gray tw-absolute tw-top-9 tw-ml-3 md:tw-top-12\" />\n      <input\n        className=\"input-lg search__searchbar !tw-pl-10\"\n        onChange={refineSearch}\n        placeholder=\"Search\"\n        type=\"search\"\n        value={currentRefinement}\n      />\n    </>\n  );\n});\n\nconst propTypes = {\n  algoliaAppId: PropTypes.string.isRequired,\n  algoliaApiKey: PropTypes.string.isRequired,\n  aPlusPromoUrl: PropTypes.string.isRequired,\n  isAPlus: PropTypes.bool,\n  metadataConstants: PropTypes.shape({\n    countries: PropTypes.arrayOf(\n      PropTypes.shape({ label: PropTypes.string, value: PropTypes.string })\n    ),\n  }).isRequired,\n  query: PropTypes.string,\n  userSignedIn: PropTypes.bool,\n  showRequestContentAfterDelay: PropTypes.number,\n};\n\nconst defaultProps = {\n  isAPlus: false,\n  query: \"\",\n  userSignedIn: false,\n  showRequestContentAfterDelay: false,\n};\n\nconst SearchResults = connectStateResults(\n  ({ isSearchStalled, props, showFilters }) => {\n    // Loading\n    if (isSearchStalled) {\n      return \"Searching for results...\";\n    }\n\n    // No results\n    return (\n      <>\n        <div className=\"search__mobile-filter-toggle search__results\">\n          <Stats\n            translations={{\n              stats(nbHits) {\n                return `${number.commaSeparateNumber(nbHits)} Results`;\n              },\n            }}\n          />\n          <IconButton\n            btnClass=\"btn-md btn-default hits__show-filters\"\n            iconClass=\"lc-icon-filters lc-icon-sm\"\n            onClick={showFilters}\n            text=\"Filter\"\n          />\n        </div>\n        <CurrentRefinements />\n        <div className=\"hidden-xs hidden-sm visible-md visible-lg visible-xl search__results\">\n          <Stats\n            translations={{\n              stats(nbHits) {\n                return `${number.commaSeparateNumber(nbHits)} Results`;\n              },\n            }}\n          />\n        </div>\n        <Hits\n          aPlusPromoUrl={props.aPlusPromoUrl}\n          isAPlus={props.isAPlus}\n          promoInfo={props.promoInfo}\n          userSignedIn={props.userSignedIn}\n          showRequestContentAfterDelay={props.showRequestContentAfterDelay}\n        />\n      </>\n    );\n  }\n);\n\nconst Search = (props) => {\n  const [showMobileFilters, setShowMobileFilters] = useState(false);\n  const [filterPromoContextState, setFilterPromoContextState] = useState({\n    currentPromoAttribute: null,\n    isAPlus: props.isAPlus,\n    setCurrentPromoAttribute: (newPromoAttr) =>\n      setFilterPromoContextState((prevState) => ({\n        ...prevState,\n        currentPromoAttribute: newPromoAttr,\n      })),\n  });\n\n  const searchClient = algoliasearch(props.algoliaAppId, props.algoliaApiKey);\n\n  function showFilters() {\n    setShowMobileFilters(true);\n    $(\"body\").append(\n      \"<div class='search__filter-backdrop modal-backdrop' style='opacity: 0.5'></div>\"\n    );\n    // Bind both click and touchend events so it works on both touch and mouse\n    document.addEventListener(\"click\", outsideFilterClickListener);\n    document.addEventListener(\"touchend\", outsideFilterClickListener);\n  }\n\n  function hideFilters() {\n    setShowMobileFilters(false);\n    $(\".search__filter-backdrop\").remove();\n    document.removeEventListener(\"click\", outsideFilterClickListener);\n    document.removeEventListener(\"touchend\", outsideFilterClickListener);\n  }\n\n  const outsideFilterClickListener = (event) => {\n    const $target = $(event.target);\n    if (\n      // Clicking on a select option or on the mini promo close button doesn't\n      // find search__filters in its ancestor list, probably because they are closed\n      // before this method can run, so we specifically exclude them from the check\n      !event.target.classList.contains(\"lc-select__option\") &&\n      !event.target.classList.contains(\"lc-select__option--inner\") &&\n      !event.target.classList.contains(\"lc-icon-close\") &&\n      !event.target.classList.contains(\"lc-select__multi-value\") &&\n      !event.target.classList.contains(\"lc-select__multi-value__label\") &&\n      !$target.closest($(\".search__filters\")).length &&\n      $(\".search__filters\").is(\":visible\")\n    ) {\n      hideFilters();\n    }\n  };\n\n  function closeMiniPromo() {\n    filterPromoContextState.setCurrentPromoAttribute(null);\n  }\n\n  // Renders the mini promo to be shown on top of each set of filters when a\n  // non a-plus user interacts with them\n  const showMiniAplusPromo = (attr) => {\n    const { isAPlus, currentPromoAttribute } = filterPromoContextState;\n    if (!currentPromoAttribute) return null;\n\n    const { value } = currentPromoAttribute;\n    if (isAPlus || value !== attr) return null;\n\n    return (\n      <MiniAPlus\n        handleClose={closeMiniPromo}\n        href={props.aPlusPromoUrl}\n        logoSrc={logo}\n        shouldRenderCloseBtn\n        userSignedIn={props.userSignedIn}\n      >\n        Upgrade to access these filters\n      </MiniAPlus>\n    );\n  };\n\n  return (\n    <div className=\"container\">\n      <div className=\"row\">\n        <InstantSearch searchClient={searchClient} indexName=\"litcharts_things\">\n          <div\n            className={`search__filters ${\n              showMobileFilters && \"search__filters--visible\"\n            } col-md-4 col-lg-3`}\n          >\n            <div className=\"search-filters__inner-container\">\n              <FilterPromoContext.Provider value={filterPromoContextState}>\n                <h2>Filter your search</h2>\n                <div className=\"search__filter-group\">\n                  {showMiniAplusPromo(\"category\")}\n                  <GuideRefinementList />\n                </div>\n                <div className=\"search__filter-group\">\n                  {showMiniAplusPromo(\"type\")}\n                  <TypeRefinementList />\n                  <GenreMultiSelect />\n                </div>\n                <div className=\"search__filter-group\">\n                  {showMiniAplusPromo(\"timePeriod\")}\n                  <TimePeriodRefinementList />\n                </div>\n                <div className=\"search__filter-group\">\n                  {showMiniAplusPromo(\"literaryPeriod\")}\n                  <LiteraryPeriodRefinementList />\n                </div>\n                <div className=\"search__filter-group\">\n                  {showMiniAplusPromo(\"literaryMovement\")}\n                  <LiteraryMovementRefinementList />\n                </div>\n                <div className=\"search__filter-group search__filter-group-author\">\n                  <div className=\"refinement-list__header\">Author Context</div>\n                  {showMiniAplusPromo(\"author\")}\n                  <AuthorNationalityMultiSelect\n                    countries={props.metadataConstants.countries}\n                  />\n                  <AuthorEthnicityMultiSelect />\n                  <AuthorGenderMultiSelect />\n                </div>\n                <div className=\"search__filter-group\">\n                  {showMiniAplusPromo(\"gradeLevel\")}\n                  <GradeLevelRefinementList />\n                </div>\n              </FilterPromoContext.Provider>\n            </div>\n          </div>\n          <div className=\"col-xs-12 col-sm-12 col-md-8 col-lg-offset-1 col-lg-8\">\n            <SearchBox defaultRefinement={props.query} />\n            <SearchResults {...props} showFilters={showFilters} />\n          </div>\n        </InstantSearch>\n      </div>\n    </div>\n  );\n};\n\nSearch.propTypes = propTypes;\nSearch.defaultProps = defaultProps;\n\nexport default Search;\n","export const authorGenders = [\n  {\n    label: \"Female\",\n    value: \"Female\",\n  },\n  {\n    label: \"Male\",\n    value: \"Male\",\n  },\n  {\n    label: \"Nonbinary\",\n    value: \"Nonbinary\",\n  },\n];\n\nexport const authorEthnicities = [\n  {\n    label: \"Asian\",\n    value: \"Asian\",\n  },\n  {\n    label: \"Black or African American\",\n    value: \"Black or African American\",\n  },\n  {\n    label: \"Hispanic or LatinX\",\n    value: \"Hispanic or LatinX\",\n  },\n  {\n    label: \"Indigenous Australian\",\n    value: \"Indigenous Australian\",\n  },\n  {\n    label: \"Middle Eastern\",\n    value: \"Middle Eastern\",\n  },\n  {\n    label: \"Native American or Alaska Native\",\n    value: \"Native American or Alaska Native\",\n  },\n  {\n    label: \"Native Hawaiian or other Pacific Islander\",\n    value: \"Native Hawaiian or other Pacific Islander\",\n  },\n  {\n    label: \"White\",\n    value: \"White\",\n  },\n];\n","// Main reference for the flyouts. A category value starting with \"!\" is not actually\n// refined but triggers a refinement for all the other related categories\nexport default {\n  referenceMapping: {\n    \"Lit Guide\": \"litGuideReference\",\n    \"Poetry Guide\": \"poetryGuideReference\",\n    Shakescleare: \"shakesReference\",\n    \"Lit Term\": \"litTermReference\",\n    \"Prose Fiction\": \"proseFictionReference\",\n    \"Prose Nonfiction\": \"proseNonfictionReference\",\n    Poetry: \"poetryReference\",\n    \"Play or Drama\": \"playDramaReference\",\n    Mythology: \"mythologyReference\",\n  },\n  litGuideReference: [\n    {\n      label: \"All Lit Guides\",\n      value: \"!Lit Guide\",\n    },\n    {\n      label: \"Titles\",\n      value: \"Lit Guide > Lit Guide\",\n    },\n    {\n      label: \"Themes\",\n      value: \"Lit Guide > Theme\",\n    },\n    {\n      label: \"Symbols\",\n      value: \"Lit Guide > Symbol\",\n    },\n    {\n      label: \"Characters\",\n      value: \"Lit Guide > Character\",\n    },\n    {\n      label: \"Terms\",\n      value: \"Lit Guide > Term\",\n    },\n    {\n      label: \"Quotes\",\n      value: \"Lit Guide > Quotes\",\n    },\n    {\n      label: \"Summary & Analysis\",\n      value: \"Lit Guide > Summary & Analysis\",\n    },\n    {\n      label: \"Quizzes\",\n      value: \"Lit Guide > Quiz\",\n    },\n    {\n      label: \"Literary Devices\",\n      value: \"Lit Guide > Lit Device\",\n    },\n  ],\n  poetryGuideReference: [\n    {\n      label: \"All Poetry Guides\",\n      value: \"!Poetry Guide\",\n    },\n    {\n      label: \"Titles\",\n      value: \"Poetry Guide > Poetry Guide\",\n    },\n    {\n      label: \"Themes\",\n      value: \"Poetry Guide > Theme\",\n    },\n    {\n      label: \"Symbols\",\n      value: \"Poetry Guide > Symbol\",\n    },\n    {\n      label: \"Poetic Devices\",\n      value: \"Poetry Guide > Poetic Device\",\n    },\n  ],\n  shakesReference: [\n    {\n      label: \"All Shakescleare\",\n      value: \"!Shakescleare\",\n    },\n    {\n      label: \"Titles\",\n      value: \"Shakescleare > Shakescleare\",\n    },\n    {\n      label: \"Scenes\",\n      value: \"Shakescleare > Scene\",\n    },\n  ],\n  litTermReference: [\n    {\n      label: \"All Lit Terms\",\n      value: \"Lit Term > Lit Term\",\n    },\n  ],\n  proseFictionReference: [\n    {\n      label: \"All Prose Fiction\",\n      value: \"!Prose Fiction\",\n    },\n    {\n      label: \"Folktales, Fables, or Fairy Tales\",\n      value: \"Prose Fiction > Folktale, Fable, or Fairy Tale\",\n    },\n    {\n      label: \"Graphic Novels\",\n      value: \"Prose Fiction > Graphic Novel\",\n    },\n    {\n      label: \"Novels\",\n      value: \"Prose Fiction > Novel\",\n    },\n    {\n      label: \"Novellas\",\n      value: \"Prose Fiction > Novella\",\n    },\n    {\n      label: \"Short Stories/Story Collections\",\n      value: \"Prose Fiction > Short Story / Story Collection\",\n    },\n    {\n      label: \"Other\",\n      value: \"Prose Fiction > <n/a>\",\n    },\n  ],\n  proseNonfictionReference: [\n    {\n      label: \"All Prose Nonfiction\",\n      value: \"!Prose Nonfiction\",\n    },\n    {\n      label: \"Autobiographies/Memoirs\",\n      value: \"Prose Nonfiction > Autobiography / Memoir\",\n    },\n    {\n      label: \"Biographies\",\n      value: \"Prose Nonfiction > Biography\",\n    },\n    {\n      label: \"Diaries or Journals\",\n      value: \"Prose Nonfiction > Diary or Journal\",\n    },\n    {\n      label: \"Documents\",\n      value: \"Prose Nonfiction > Document\",\n    },\n    {\n      label: \"Essays\",\n      value: \"Prose Nonfiction > Essay\",\n    },\n    {\n      label: \"Graphic Memoirs/Biographies\",\n      value: \"Prose Nonfiction > Graphic Memoir / Biography\",\n    },\n    {\n      label: \"History\",\n      value: \"Prose Nonfiction > History\",\n    },\n    {\n      label: \"Philosophy & Political Philosophy\",\n      value: \"Prose Nonfiction > Philosophy & Political Philosophy\",\n    },\n    {\n      label: \"Sermons, Speeches, or Lectures\",\n      value: \"Prose Nonfiction > Sermon, Speech, or Lecture\",\n    },\n    {\n      label: \"Sociology & Social Science\",\n      value: \"Prose Nonfiction > Sociology & Social Science\",\n    },\n    {\n      label: \"Theology\",\n      value: \"Prose Nonfiction > Theology\",\n    },\n    {\n      label: \"Other\",\n      value: \"Prose Nonfiction > <n/a>\",\n    },\n  ],\n  poetryReference: [\n    {\n      label: \"All Poetry\",\n      value: \"!Poetry\",\n    },\n    {\n      label: \"Lyric Poetry\",\n      value: \"Poetry > Lyric Poetry\",\n    },\n    {\n      label: \"Narrative Poetry\",\n      value: \"Poetry > Narrative Poetry\",\n    },\n    {\n      label: \"Other\",\n      value: \"Poetry > <n/a>\",\n    },\n  ],\n  playDramaReference: [\n    {\n      label: \"All Plays/Drama\",\n      value: \"!Play or Drama\",\n    },\n    {\n      label: \"Musicals\",\n      value: \"Play or Drama > Musical\",\n    },\n    {\n      label: \"One-Act Plays\",\n      value: \"Play or Drama > One-Act Play\",\n    },\n    {\n      label: \"Verse Dramas\",\n      value: \"Play or Drama > Verse Drama\",\n    },\n    {\n      label: \"Other\",\n      value: \"Play or Drama > <n/a>\",\n    },\n  ],\n  mythologyReference: [\n    {\n      label: \"All Mythology\",\n      value: \"!Mythology\",\n    },\n    {\n      label: \"Other\",\n      value: \"Mythology > <n/a>\",\n    },\n  ],\n};\n","export default [\n  {\n    label: \"Allegory\",\n    value: \"Allegory\",\n  },\n  {\n    label: \"Ars poetica\",\n    value: \"Ars poetica\",\n  },\n  {\n    label: \"Aubade\",\n    value: \"Aubade\",\n  },\n  {\n    label: \"Bildungsroman/Coming-of-Age\",\n    value: \"Bildungsroman / Coming-of-Age\",\n  },\n  {\n    label: \"Blason\",\n    value: \"Blason\",\n  },\n  {\n    label: \"Cento\",\n    value: \"Cento\",\n  },\n  {\n    label: \"Colonial Literature\",\n    value: \"Colonial Literature\",\n  },\n  {\n    label: \"Comedy\",\n    value: \"Comedy\",\n  },\n  {\n    label: \"Comedy of Manners\",\n    value: \"Comedy of Manners\",\n  },\n  {\n    label: \"Crime/True Crime\",\n    value: \"Crime / True Crime\",\n  },\n  {\n    label: \"Dirge\",\n    value: \"Dirge\",\n  },\n  {\n    label: \"Dramatic monologue\",\n    value: \"Dramatic monologue\",\n  },\n  {\n    label: \"Dystopian\",\n    value: \"Dystopian\",\n  },\n  {\n    label: \"Eclogue\",\n    value: \"Eclogue\",\n  },\n  {\n    label: \"Ekphrasis\",\n    value: \"Ekphrasis\",\n  },\n  {\n    label: \"Elegy\",\n    value: \"Elegy\",\n  },\n  {\n    label: \"Epic\",\n    value: \"Epic\",\n  },\n  {\n    label: \"Epigram\",\n    value: \"Epigram\",\n  },\n  {\n    label: \"Epistolary\",\n    value: \"Epistolary\",\n  },\n  {\n    label: \"Epitaph\",\n    value: \"Epitaph\",\n  },\n  {\n    label: \"Epithalamion\",\n    value: \"Epithalamion\",\n  },\n  {\n    label: \"Fantasy\",\n    value: \"Fantasy\",\n  },\n  {\n    label: \"Farce\",\n    value: \"Farce\",\n  },\n  {\n    label: \"Georgic\",\n    value: \"Georgic\",\n  },\n  {\n    label: \"Gothic\",\n    value: \"Gothic\",\n  },\n  {\n    label: \"Historical Fiction\",\n    value: \"Historical Fiction\",\n  },\n  {\n    label: \"History Play/Historical Drama\",\n    value: \"History Play / Historical Drama\",\n  },\n  {\n    label: \"Horror\",\n    value: \"Horror\",\n  },\n  {\n    label: \"Hymn\",\n    value: \"Hymn\",\n  },\n  {\n    label: \"Idyll\",\n    value: \"Idyll\",\n  },\n  {\n    label: \"Kunstlerroman\",\n    value: \"Kunstlerroman\",\n  },\n  {\n    label: \"Lament\",\n    value: \"Lament\",\n  },\n  {\n    label: \"Light verse\",\n    value: \"Light verse\",\n  },\n  {\n    label: \"Mock-Epic\",\n    value: \"Mock-Epic\",\n  },\n  {\n    label: \"Morality or Mystery Play\",\n    value: \"Morality or Mystery Play\",\n  },\n  {\n    label: \"Mystery\",\n    value: \"Mystery\",\n  },\n  {\n    label: \"Nature/Environmental Writing\",\n    value: \"Nature/Environmental Writing\",\n  },\n  {\n    label: \"Novel of Ideas\",\n    value: \"Novel of Ideas\",\n  },\n  {\n    label: \"Novel of Manners\",\n    value: \"Novel of Manners\",\n  },\n  {\n    label: \"Ode\",\n    value: \"Ode\",\n  },\n  {\n    label: \"Other\",\n    value: \"<n/a>\",\n  },\n  {\n    label: \"Paean\",\n    value: \"Paean\",\n  },\n  {\n    label: \"Palinode\",\n    value: \"Palinode\",\n  },\n  {\n    label: \"Panegyric\",\n    value: \"Panegyric\",\n  },\n  {\n    label: \"Parody\",\n    value: \"Parody\",\n  },\n  {\n    label: \"Pastoral\",\n    value: \"Pastoral\",\n  },\n  {\n    label: \"Philosophical Fiction\",\n    value: \"Philosophical Fiction\",\n  },\n  {\n    label: \"Picaresque\",\n    value: \"Picaresque\",\n  },\n  {\n    label: \"Problem Play\",\n    value: \"Problem Play\",\n  },\n  {\n    label: \"Psalm\",\n    value: \"Psalm\",\n  },\n  {\n    label: \"Quest\",\n    value: \"Quest\",\n  },\n  {\n    label: \"Religious Fiction\",\n    value: \"Religious Fiction\",\n  },\n  {\n    label: \"Revenge Tragedy\",\n    value: \"Revenge Tragedy\",\n  },\n  {\n    label: \"Riddle\",\n    value: \"Riddle\",\n  },\n  {\n    label: \"Romance\",\n    value: \"Romance\",\n  },\n  {\n    label: \"Satire\",\n    value: \"Satire\",\n  },\n  {\n    label: \"Science Fiction\",\n    value: \"Science Fiction\",\n  },\n  {\n    label: \"Science Writing\",\n    value: \"Science Writing\",\n  },\n  {\n    label: \"Sensation Fiction\",\n    value: \"Sensation Fiction\",\n  },\n  {\n    label: \"Slave Narrative\",\n    value: \"Slave Narrative\",\n  },\n  {\n    label: \"Socratic Dialogue\",\n    value: \"Socratic Dialogue\",\n  },\n  {\n    label: \"Southern Gothic\",\n    value: \"Southern Gothic\",\n  },\n  {\n    label: \"Suspense/Thriller\",\n    value: \"Suspense / Thriller\",\n  },\n  {\n    label: \"Tragedy\",\n    value: \"Tragedy\",\n  },\n  {\n    label: \"Tragicomedy\",\n    value: \"Tragicomedy\",\n  },\n  {\n    label: \"Utopian\",\n    value: \"Utopian\",\n  },\n  {\n    label: \"Verse Epistle\",\n    value: \"Verse Epistle\",\n  },\n  {\n    label: \"Verse Novel\",\n    value: \"Verse Novel\",\n  },\n  {\n    label: \"Western/Frontier\",\n    value: \"Western / Frontier\",\n  },\n];\n","export default [\n  {\n    label: \"4th\",\n    value: \"4\",\n  },\n  {\n    label: \"5th\",\n    value: \"5\",\n  },\n  {\n    label: \"6th\",\n    value: \"6\",\n  },\n  {\n    label: \"7th\",\n    value: \"7\",\n  },\n  {\n    label: \"8th\",\n    value: \"8\",\n  },\n  {\n    label: \"9th\",\n    value: \"9\",\n  },\n  {\n    label: \"10th\",\n    value: \"10\",\n  },\n  {\n    label: \"11th\",\n    value: \"11\",\n  },\n  {\n    label: \"12th\",\n    value: \"12\",\n  },\n  {\n    label: \"Higher education\",\n    value: \"Higher education\",\n  },\n];\n","export default [\n  {\n    label: \"Lit Guides\",\n    value: \"Lit Guide\",\n  },\n  {\n    label: \"Poetry Guides\",\n    value: \"Poetry Guide\",\n  },\n  {\n    label: \"Shakescleare\",\n    value: \"Shakescleare\",\n  },\n  {\n    label: \"Lit Terms\",\n    value: \"Lit Term\",\n  },\n];\n","export default [\n  {\n    label: \"Absurdism\",\n    value: \"Absurdism\",\n  },\n  {\n    label: \"Aestheticism\",\n    value: \"Aestheticism\",\n  },\n  {\n    label: \"Beat Generation\",\n    value: \"Beat Generation\",\n  },\n  {\n    label: \"Black Arts Movement\",\n    value: \"Black Arts Movement\",\n  },\n  {\n    label: \"Cavalier Poets\",\n    value: \"Cavalier Poets\",\n  },\n  {\n    label: \"Confessionalists\",\n    value: \"Confessionalists\",\n  },\n  {\n    label: \"Dadaism\",\n    value: \"Dadaism\",\n  },\n  {\n    label: \"Existentialism\",\n    value: \"Existentialism\",\n  },\n  {\n    label: \"Expressionism\",\n    value: \"Expressionism\",\n  },\n  {\n    label: \"Feminism\",\n    value: \"Feminism\",\n  },\n  {\n    label: \"Imagism\",\n    value: \"Imagism\",\n  },\n  {\n    label: \"Magical Realism\",\n    value: \"Magical Realism\",\n  },\n  {\n    label: \"Metaphysical Poets\",\n    value: \"Metaphysical Poets\",\n  },\n  {\n    label: \"Modernism\",\n    value: \"Modernism\",\n  },\n  {\n    label: \"Neoclassicism\",\n    value: \"Neoclassicism\",\n  },\n  {\n    label: \"Naturalism\",\n    value: \"Naturalism\",\n  },\n  {\n    label: \"New York School\",\n    value: \"New York School\",\n  },\n  {\n    label: \"Postcolonialism\",\n    value: \"Postcolonialism\",\n  },\n  {\n    label: \"Postmodernism\",\n    value: \"Postmodernism\",\n  },\n  {\n    label: \"Pre-Raphaelites\",\n    value: \"Pre-Raphaelites\",\n  },\n  {\n    label: \"Realism\",\n    value: \"Realism\",\n  },\n  {\n    label: \"Romanticism\",\n    value: \"Romanticism\",\n  },\n  {\n    label: \"Socialism / Marxism\",\n    value: \"Socialism / Marxism\",\n  },\n  {\n    label: \"Surrealism\",\n    value: \"Surrealism\",\n  },\n  {\n    label: \"Symbolism\",\n    value: \"Symbolism\",\n  },\n  {\n    label: \"Transcendentalism\",\n    value: \"Transcendentalism\",\n  },\n];\n","export default [\n  {\n    label: \"Ancient Near East Literature (2600 BCE–330 BCE)\",\n    value: \"Ancient Near East Literature (2600 BCE-330 BCE)\",\n  },\n  {\n    label: \"Ancient Greek and Roman Period (800 BCE–500 AD)\",\n    value: \"Ancient Greek and Roman Period (800 BCE-500 AD)\",\n  },\n  {\n    label: \"Chinese Spring and Autumn Period (771 BCE–476 BCE)\",\n    value: \"Chinese Spring and Autumn Period (771 BCE-476 BCE)\",\n  },\n  {\n    label: \"Ancient Indian Literature (Before 500)\",\n    value: \"Ancient Indian Literature (Before 500)\",\n  },\n  {\n    label: \"Pre-Colonial African Period (Before 1500)\",\n    value: \"Pre-Colonial African Period (Before 1500)\",\n  },\n  {\n    label: \"Pre-Conquest South American Period (Before 1492)\",\n    value: \"Pre-Conquest South American Period (Before 1492)\",\n  },\n  {\n    label: \"Old English Period (450–1066)\",\n    value: \"Old English Period (450-1066)\",\n  },\n  {\n    label: \"Medieval European period (500–1500)\",\n    value: \"Medieval European period (500-1500)\",\n  },\n  {\n    label: \"Japanese Heian Period (794–1185)\",\n    value: \"Japanese Heian Period (794-1185)\",\n  },\n  {\n    label: \"Middle English Period (1066–1500)\",\n    value: \"Middle English Period (1066-1500)\",\n  },\n  {\n    label: \"The Renaissance (1300–1660)\",\n    value: \"The Renaissance (1300-1660)\",\n  },\n  {\n    label: \"English Renaissance (1485–1660)\",\n    value: \"English Renaissance (1485-1660)\",\n  },\n  {\n    label: \"The Spanish Golden Age (1556–1659)\",\n    value: \"The Spanish Golden Age (1556-1659)\",\n  },\n  {\n    label: \"Elizabethan Period (1558–1603)\",\n    value: \"Elizabethan Period (1558-1603)\",\n  },\n  {\n    label: \"French Grand Siècle (1601–1715)\",\n    value: \"French Grand Siècle (1601-1715)\",\n  },\n  {\n    label: \"Jacobean Period (1603–1625)\",\n    value: \"Jacobean Period (1603-1625)\",\n  },\n  {\n    label: \"American Colonial Period (1607–1775)\",\n    value: \"American Colonial Period (1607-1775)\",\n  },\n  {\n    label: \"Caroline Period (1625–1649)\",\n    value: \"Caroline Period (1625-1649)\",\n  },\n  {\n    label: \"Commonwealth Period (1649–1660)\",\n    value: \"Commonwealth Period (1649-1660)\",\n  },\n  {\n    label: \"The Restoration (1660–1700)\",\n    value: \"The Restoration (1660-1700)\",\n  },\n  {\n    label: \"English Neoclassical Period (1660–1785)\",\n    value: \"English Neoclassical Period (1660-1785)\",\n  },\n  {\n    label: \"Augustan Period (1700–1745)\",\n    value: \"Augustan Period (1700-1745)\",\n  },\n  {\n    label: \"Age of Enlightenment (1650–1800)\",\n    value: \"Age of Enlightenment (1650-1800)\",\n  },\n  {\n    label: \"The Great Awakening (1730–1749)\",\n    value: \"The Great Awakening (1730-1749)\",\n  },\n  {\n    label: \"Age of Sensibility (1745–1785)\",\n    value: \"Age of Sensibility (1745-1785)\",\n  },\n  {\n    label: \"American Early National Period (1775–1830)\",\n    value: \"American Early National Period (1775-1830)\",\n  },\n  {\n    label: \"European Romantic Period (1775–1850)\",\n    value: \"European Romantic Period (1775-1850)\",\n  },\n  {\n    label: \"German Romantic Period (1775–1830)\",\n    value: \"German Romantic Period (1775-1830)\",\n  },\n  {\n    label: \"English Romantic Period (1785–1837)\",\n    value: \"English Romantic Period (1785-1837)\",\n  },\n  {\n    label: \"Russian Golden Age of Literature (1801–1900)\",\n    value: \"Russian Golden Age of Literature (1801-1900)\",\n  },\n  {\n    label: \"French Romantic Period (1815–1850)\",\n    value: \"French Romantic Period (1815-1850)\",\n  },\n  {\n    label: \"American Romantic Period (1828–1865)\",\n    value: \"American Romantic Period (1828-1865)\",\n  },\n  {\n    label: \"Victorian Period (1837–1901)\",\n    value: \"Victorian Period (1837-1901)\",\n  },\n  {\n    label: \"Realist and Naturalist Period (1840–1910)\",\n    value: \"Realist and Naturalist Period (1840-1910)\",\n  },\n  {\n    label: \"Irish Literary Revival (1880–1930)\",\n    value: \"Irish Literary Revival (1880-1930)\",\n  },\n  {\n    label: \"Modern Period (1901–1945)\",\n    value: \"Modern Period (1901-1945)\",\n  },\n  {\n    label: \"Harlem Renaissance (1918–1937)\",\n    value: \"Harlem Renaissance (1918-1937)\",\n  },\n  {\n    label: \"Postmodern and Contemporary Period (1946–Present)\",\n    value: \"Postmodern and Contemporary Period (1946-Present)\",\n  },\n];\n","// The a plus promo in the filters is shown for groups of refinements.\n// This is mapping of those refinement attributs to the group\nconst category = {\n  value: \"category\",\n};\n\nconst type = {\n  value: \"type\",\n};\n\nconst timePeriod = {\n  value: \"timePeriod\",\n};\n\nconst literaryPeriod = {\n  value: \"literaryPeriod\",\n};\n\nconst literaryMovement = {\n  value: \"literaryMovement\",\n};\n\nconst author = {\n  value: \"author\",\n};\n\nconst gradeLevel = {\n  value: \"gradeLevel\",\n};\n\nexport default {\n  category,\n  type,\n  genre: type,\n  timePeriod,\n  literaryPeriod,\n  literaryMovement,\n  authorEthnicity: author,\n  authorNationality: author,\n  authorGender: author,\n  gradeLevel,\n};\n","export default [\n  {\n    label: \"Before 500\",\n    value: \"Before 500\",\n  },\n  {\n    label: \"501-1400\",\n    value: \"501-1400\",\n  },\n  {\n    label: \"1401-1500\",\n    value: \"1401-1500\",\n  },\n  {\n    label: \"1501-1600\",\n    value: \"1501-1600\",\n  },\n  {\n    label: \"1601-1700\",\n    value: \"1601-1700\",\n  },\n  {\n    label: \"1701-1800\",\n    value: \"1701-1800\",\n  },\n  {\n    label: \"1801-1900\",\n    value: \"1801-1900\",\n  },\n  {\n    label: \"1901-1950\",\n    value: \"1901-1950\",\n  },\n  {\n    label: \"1951-2000\",\n    value: \"1951-2000\",\n  },\n  {\n    label: \"2001-Present\",\n    value: \"2001-Present\",\n  },\n];\n","export default [\n  {\n    label: \"Poetry\",\n    value: \"Poetry\",\n  },\n  {\n    label: \"Prose Nonfiction\",\n    value: \"Prose Nonfiction\",\n  },\n  {\n    label: \"Prose Fiction\",\n    value: \"Prose Fiction\",\n  },\n  {\n    label: \"Play or Drama\",\n    value: \"Play or Drama\",\n  },\n  {\n    label: \"Mythology\",\n    value: \"Mythology\",\n  },\n];\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport Select from \"components/shared/Select\";\n\nclass UserDownloadsSortControl extends React.Component {\n  static propTypes = {\n    containerSelector: PropTypes.string,\n    listSelector: PropTypes.string,\n    listItemSelector: PropTypes.string,\n  };\n\n  constructor(props) {\n    super(props);\n    this.options = [\n      { label: \"Recently Downloaded\", value: \"created-at\" },\n      { label: \"Alphabetical\", value: \"title\" },\n    ];\n  }\n\n  updateSort(sortBy) {\n    const $container = $(this.props.containerSelector);\n    const $list = $container.find(this.props.listSelector);\n    let $listItems = $list.find(this.props.listItemSelector);\n\n    $listItems.sort(function (a, b) {\n      const aVal = $(a).data(sortBy).toString();\n      const bVal = $(b).data(sortBy).toString();\n\n      if (aVal > bVal) {\n        return 1;\n      }\n      if (aVal < bVal) {\n        return -1;\n      }\n      return 0;\n    });\n\n    // desc vs asc\n    if (sortBy === \"created-at\") {\n      $listItems = $($listItems.get().reverse());\n    }\n\n    $listItems.detach().appendTo($list);\n  }\n\n  onChange(option) {\n    this.updateSort(option.value.toLowerCase());\n  }\n\n  render() {\n    return (\n      <Select\n        {...this.props}\n        baseClassName=\"lc-select-container--md\"\n        options={this.options}\n        value={this.options[0].value}\n        id=\"sort-control__select\"\n        placeholder=\"Filter by first letter\"\n        onChange={(value) => this.onChange(value)}\n      />\n    );\n  }\n}\n\nexport default UserDownloadsSortControl;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport Select from \"components/shared/Select\";\n\nclass UserHighlightsFilterControl extends React.Component {\n  static propTypes = {\n    containerSelector: PropTypes.string,\n    listSelector: PropTypes.string,\n    listItemSelector: PropTypes.string,\n  };\n\n  static defaultProps = {\n    containerSelector: \".container\",\n    listSelector: \".user-highlights\",\n    listItemSelector: \".user-highlight\",\n  };\n\n  updateFilter(filterBy) {\n    const $container = $(this.props.containerSelector);\n    const $list = $container.find(this.props.listSelector);\n    const $listItems = $list.find(this.props.listItemSelector);\n\n    if (filterBy) {\n      $listItems.each(function () {\n        $(this).toggle($(this).data(\"book\").toString() === filterBy.toString());\n      });\n    } else {\n      $listItems.show();\n    }\n  }\n\n  onChange(option) {\n    this.updateFilter(option.value);\n  }\n\n  render() {\n    return (\n      <Select\n        {...this.props}\n        baseClassName=\"lc-select-container--md\"\n        options={this.props.options}\n        value={this.props.options[0].value}\n        onChange={(value) => this.onChange(value)}\n      />\n    );\n  }\n}\n\nexport default UserHighlightsFilterControl;\n","import React, { useEffect, useState } from \"react\";\nimport PropTypes from \"prop-types\";\nimport Input from \"components/shared/Input\";\nimport Select from \"components/shared/Select\";\n\nconst propTypes = {\n  actionOptions: PropTypes.array.isRequired,\n  beForgottenOptions: PropTypes.array.isRequired,\n  data: PropTypes.object,\n  dataTransferOptions: PropTypes.array.isRequired,\n  errorMessages: PropTypes.object,\n  requestDataAccessOptions: PropTypes.array.isRequired,\n  stopProcessingDataOptions: PropTypes.array.isRequired,\n};\n\nconst defaultProps = {\n  data: {},\n  errorMessages: {},\n};\n\n// Actual <form> is in the rails view\nconst GdprRequestForm = (props) => {\n  const [action, setAction] = useState(null);\n\n  useEffect(() => {\n    setAction(props.data.action);\n  }, []);\n\n  function onActionChange(option) {\n    setAction(option.value);\n  }\n\n  let ActionComponent;\n\n  const {\n    beForgottenOptions,\n    dataTransferOptions,\n    requestDataAccessOptions,\n    stopProcessingDataOptions,\n  } = props;\n\n  switch (action) {\n    case \"be_forgotten\":\n      // eslint-disable-next-line react/no-unstable-nested-components\n      ActionComponent = () => (\n        <>\n          <Select\n            errorMessage={props.errorMessages.reason}\n            isRequired\n            labelText=\"Why do you want your data to be deleted?\"\n            id=\"gdpr-request-reason\"\n            name=\"gdpr_request[reason]\"\n            placeholder=\"Select an option\"\n            options={beForgottenOptions}\n            value={props.data.reason}\n          />\n          <Input\n            name=\"gdpr_request[additional_info]\"\n            inputId=\"gdpr-request-additional-info\"\n            placeholder=\"Additional info\"\n            labelText=\"Optionally, specify which data you want to make sure LitCharts will delete\"\n            InputComponent=\"textarea\"\n            value={props.data.additional_info}\n            errorMessage={props.errorMessages.additionalInfo}\n          />\n        </>\n      );\n      break;\n    case \"data_transfer\":\n      // eslint-disable-next-line react/no-unstable-nested-components\n      ActionComponent = () => (\n        <>\n          <Select\n            errorMessage={props.errorMessages.transferRecipient}\n            isRequired\n            labelText=\"To whom do you want LitCharts to transfer your data?\"\n            id=\"gdpr_request[transfer_recipient]\"\n            name=\"gdpr_request[transfer_recipient]\"\n            placeholder=\"Select an option\"\n            options={dataTransferOptions}\n            value={props.data.reason}\n          />\n          <Input\n            errorMessage={props.errorMessages.transfer3rdParty}\n            name=\"gdpr_request[transfer_3rd_party]\"\n            isRequired\n            placeholder=\"Third party\"\n            labelText=\"Specify the third party and how we should contact them\"\n            InputComponent=\"textarea\"\n            value={props.data.transfer_3rd_party}\n          />\n          <Input\n            name=\"gdpr_request[additional_info]\"\n            placeholder=\"Additional info\"\n            labelText=\"Optionally, describe your request in more detail. Which data should be transferred?\"\n            InputComponent=\"textarea\"\n            value={props.data.additional_info}\n            errorMessage={props.errorMessages.additionalInfo}\n          />\n        </>\n      );\n      break;\n    case \"data_access\":\n      // eslint-disable-next-line react/no-unstable-nested-components\n      ActionComponent = () => (\n        <>\n          <Select\n            errorMessage={props.errorMessages.reason}\n            isRequired\n            labelText=\"What information about your data would you like to access?\"\n            id=\"gdpr_request[reason]\"\n            name=\"gdpr_request[reason]\"\n            placeholder=\"Select an option\"\n            options={requestDataAccessOptions}\n            value={props.data.reason}\n          />\n          <Input\n            name=\"gdpr_request[additional_info]\"\n            placeholder=\"Additional info\"\n            labelText=\"Optionally, explain your question in more detail\"\n            InputComponent=\"textarea\"\n            value={props.data.additional_info}\n            errorMessage={props.errorMessages.additionalInfo}\n          />\n        </>\n      );\n      break;\n    case \"rectification\":\n      // eslint-disable-next-line react/no-unstable-nested-components\n      ActionComponent = () => (\n        <>\n          <Input\n            errorMessage={props.errorMessages.incorrectData}\n            name=\"gdpr_request[incorrect_data]\"\n            placeholder=\"Description\"\n            labelText=\"Describe the incorrect data that LitCharts has about you\"\n            InputComponent=\"textarea\"\n            value={props.data.incorrect_data}\n            isRequired\n          />\n          <Input\n            name=\"gdpr_request[correct_data]\"\n            placeholder=\"Description\"\n            labelText=\"Describe the correct version of the same data\"\n            InputComponent=\"textarea\"\n            value={props.data.correct_data}\n            errorMessage={props.errorMessages.correctData}\n            isRequired\n          />\n        </>\n      );\n      break;\n    case \"stop_marketing_profiling\":\n      // eslint-disable-next-line react/no-unstable-nested-components\n      ActionComponent = () => (\n        <Input\n          name=\"gdpr_request[additional_info]\"\n          placeholder=\"Additional info\"\n          labelText=\"Optionally, specify more details\"\n          InputComponent=\"textarea\"\n          value={props.data.additional_info}\n          errorMessage={props.errorMessages.additionalInfo}\n        />\n      );\n      break;\n    case \"stop_processing\":\n      // eslint-disable-next-line react/no-unstable-nested-components\n      ActionComponent = () => (\n        <>\n          <Select\n            errorMessage={props.errorMessages.reason}\n            isRequired\n            labelText=\"Why do you want LitCharts to stop processing your data?\"\n            id=\"gdpr_request[reason]\"\n            name=\"gdpr_request[reason]\"\n            placeholder=\"Select an option\"\n            options={stopProcessingDataOptions}\n            value={props.data.reason}\n          />\n          <Input\n            name=\"gdpr_request[additional_info]\"\n            placeholder=\"Additional info\"\n            labelText=\"Optionally, please describe your request in more detail\"\n            InputComponent=\"textarea\"\n            value={props.data.additional_info}\n            errorMessage={props.errorMessages.additionalInfo}\n          />\n        </>\n      );\n      break;\n    case \"objection\":\n      // eslint-disable-next-line react/no-unstable-nested-components\n      ActionComponent = () => (\n        <Input\n          name=\"gdpr_request[additional_info]\"\n          placeholder=\"Additional info\"\n          labelText=\"Please describe the nature of your objection to how LitCharts is using your personal information\"\n          InputComponent=\"textarea\"\n          value={props.data.additional_info}\n          errorMessage={props.errorMessages.additionalInfo}\n          isRequired\n        />\n      );\n      break;\n    default:\n      // eslint-disable-next-line react/no-unstable-nested-components\n      ActionComponent = () => null;\n  }\n\n  return (\n    <>\n      <Input\n        errorMessage={props.errorMessages.name}\n        name=\"gdpr_request[name]\"\n        inputId=\"gdpr-request-name\"\n        value={props.data.name}\n        isRequired\n        labelText=\"What's your name?\"\n        placeholder=\"Your name\"\n      />\n      <Input\n        errorMessage={props.errorMessages.email}\n        name=\"gdpr_request[email]\"\n        inputId=\"gdpr-request-email\"\n        value={props.data.email}\n        isRequired\n        labelText=\"Email address (we won't share your email address, ever)\"\n        placeholder=\"Your email\"\n      />\n      <Select\n        errorMessage={props.errorMessages.action}\n        id=\"gdpr-request-action\"\n        isRequired\n        name=\"gdpr_request[action]\"\n        onChange={onActionChange}\n        placeholder=\"Select an option\"\n        labelText=\"What is your specific privacy related request?\"\n        options={props.actionOptions}\n        value={props.data.action}\n      />\n      <ActionComponent />\n    </>\n  );\n};\n\nGdprRequestForm.propTypes = propTypes;\nGdprRequestForm.defaultProps = defaultProps;\n\nexport default GdprRequestForm;\n","export const DEVICES = \"devices\";\nexport const CHAPTERS = \"chapters\";\n","import events from \"initializers/events\";\nimport detectUserInput from \"initializers/detectUserInput\";\nimport globalViews from \"initializers/globalViews\";\nimport applyUtilityClasses from \"initializers/applyUtilityClasses\";\nimport view from \"initializers/view\";\nimport toast from \"initializers/toast\";\n\nexport default [\n  view,\n  detectUserInput,\n  globalViews,\n  applyUtilityClasses,\n  events,\n  toast,\n];\n","import header from \"views/shared/header/base\";\n\n// use this initializer for shared global views, i.e. sitewide header, footer, etc.\nexport default {\n  initialize: () => {\n    const views = [header];\n\n    $().ready(() => {\n      views.forEach((view) => {\n        view.ready.call(view);\n      });\n    });\n  },\n};\n","import { toastNotify } from \"helpers/toastNotify\";\nimport React from \"react\";\n\n// (paul) This allows us to set toast messages via Rails flash.\n// Generally I don't like using `dangerouslySetInnerHTML` but that\n// should only be set by us and not user input.\n\nexport default {\n  initialize: () => {\n    if (window.toastMessage) {\n      toastNotify(\n        window.toastMessage,\n        window.toastLink && (\n          <div dangerouslySetInnerHTML={{ __html: window.toastLink }} />\n        )\n      );\n    }\n  },\n};\n"],"names":["_regeneratorRuntime","e","t","r","Object","prototype","n","hasOwnProperty","o","defineProperty","value","i","Symbol","a","iterator","c","asyncIterator","u","toStringTag","define","enumerable","configurable","writable","wrap","Generator","create","Context","makeInvokeMethod","tryCatch","type","arg","call","h","l","f","s","y","GeneratorFunction","GeneratorFunctionPrototype","p","d","getPrototypeOf","v","values","g","defineIteratorMethods","forEach","_invoke","AsyncIterator","invoke","resolve","__await","then","callInvokeWithMethodAndArg","Error","done","method","delegate","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","TypeError","resultName","next","nextLoc","pushTryEntry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","push","resetTryEntry","completion","reset","isNaN","length","displayName","isGeneratorFunction","constructor","name","mark","setPrototypeOf","__proto__","awrap","async","Promise","keys","reverse","pop","prev","charAt","slice","stop","rval","handle","complete","finish","delegateYield","asyncGeneratorStep","_slicedToArray","Array","isArray","_arrayWithHoles","_iterableToArrayLimit","_arrayLikeToArray","toString","from","test","_unsupportedIterableToArray","_nonIterableRest","sessionStorageKey","validationSchema","Yup","shape","title","required","question","min","max","AIForm","props","loading","locked","onSubmit","_props$options","options","questionMinimum","quotaRemaining","resetDate","signupPath","_useState2","useState","isLessThanSmallBreakpoint","setIsLessThanSmallBreakpoint","_useState4","collapsed","setCollapsed","disableFields","resizeHandler","window","matchMedia","concat","SM_PIXEL_MIN","matches","XS_PIXEL_MAX","useLayoutEffect","addEventListener","removeEventListener","useEffect","document","body","style","overflow","buttonRemainingText","buttonCTA","buttonText","resetText","pluralize","showDisclaimerText","unpackValueFromStorage","key","storageKey","storedValue","sessionStorage","getItem","removeItem","initialValues","storeFieldForReload","setItem","validateForm","_ref","_callee","formValues","yupFormErrors","_context","validate","abortEarly","t0","yupToFormErrors","arguments","apply","_next","_throw","_x","handleClose","React","Formik","validateOnBlur","validateOnChange","validateOnMount","location","href","formik","handleSubmit","className","classnames","IconButton","iconClass","btnClass","onClick","AI_ANSWERS_QUOTA","Select","errorMessage","errors","id","isDisabled","isSearchable","labelText","placeholder","onChange","fieldKey","setFieldValue","InputTextCounter","disabled","hideSubtext","setFieldError","target","attr","DisclaimerText","propTypes","PropTypes","isRequired","defaultProps","AskLitchartsAI","quotaFromProps","submissionPath","aiAnswersCompletePath","_useChatMessages","useChatMessages","upgradeable","eventCategory","channel","AI_TOOL_CHANNELS","ASK_AI","toolName","AI_TOOL_NAMES","messages","prevSlug","handleAskAIFormSubmit","AIToolsLayout","_extends","QUESTION_MINIMUM_LENGTH","ChatArea","DiscussionQuestions","_selectedSubtopic$mes","_selectedTopic$labelT2","topic","when","subtopic","_","_AI_TOOLS_LABEL_MAP$s","_selectedTopic$labelT","selectedTopic","data","AI_TOOLS_LABEL_MAP","label","toLowerCase","loadingTopics","setLoadingTopics","topics","setTopics","_useState6","setSelectedTopic","_useState8","selectedSubtopic","setSelectedSubtopic","_useWindowResizeAndFo","useWindowResizeAndFormCollapse","useFormik","handleQuizDiscussionEssayPrompt","setErrors","DISCUSSION_QUESTIONS","messageText","useFormDisableFields","handleError","timeoutRef","clearTimeout","AIFormLayout","REUSABLES","TITLE","TOPIC","undefined","SUBTOPIC","guidePath","loadingTimeout","setTimeout","fetch","response","ok","json","error","console","fetchDropdownContent","guide_path","isControlled","isLoading","AI_TOOLS_LOADING_DEFAULTS","find","EssayPrompts","ESSAY_PROMPTS","InContentAIForm","onResourceChange","formRef","useRef","scrollAboveMobileKeyboard","isSmallWindow","helpers","form","current","footerHeight","querySelector","clientHeight","scrollTo","top","offsetTop","offsetHeight","behavior","$","ref","onFocus","maxMenuHeight","menuPlacement","amplitudeKey","buttonVariant","InContentAskLitchartsAI","guidesPath","inPoetry","optionsFromProps","resource","setOptions","_options$find","option","resourceTitle","setResourceTitle","inContent","scrollToolIntoViewOnTap","fetchGuidesList","cache","status","newOptions","guides","indexToReplace","findIndex","guide","at","offset","$scrollTarget","on","event","is","windowOffset","topOffset","slug","newResourceTitle","QuizQuestions","QUIZ_QUESTIONS","AI_TOOLS_ERROR_MESSAGES","Characters","Symbols","Themes","AMPLITUDE_BANNER_DATA_ATTRIBUTES","_defineProperty","AMPLITUDE_QUESTION_ASKED_LARGE_ATTRIBUTES","AMPLITUDE_QUESTION_ASKED_SMALL_ATTRIBUTES","AMPLITUDE_QUESTION_ASKED_SMALL_COLLAPSED_ATTRIBUTES","AMPLITUDE_SIGNUP_INTRO_CHAT_ATTRIBUTES","AMPLITUDE_SIGNUP_FORM_LARGE_ATTRIBUTES","AMPLITUDE_SIGNUP_FORM_SMALL_COLLAPSED_ATTRIBUTES","dependencies","setLoading","setQuotaRemaining","setMessages","setPrevSlug","messagesCallbacks","prevMessages","copyArray","_toConsumableArray","updatedMessage","_objectSpread","children","streamState","DEFAULT_STATE","handleRedirect","redirect_to","replace","handleBroadcastReceived","previousMessageIndex","aiAnswerId","ai_answer_id","ReactHtmlParser","reminderMessage","serverBubbleConfig","CopyAndSaveReminder","prevMsgs","JSON","stringify","handleFetchError","logAiEvent","previousMessage","LOADING_STATE","STREAMING_STATE","slideUp","splice","initialMessage","InitialMessage","consumer","subscriptions","connected","log","disconnected","received","disconnect","callback","newServerMessage","newUserMessage","userBubbleConfig","_ref2","setButtonText","setResetText","submittingButtonText","setsubmittingButtonText","layoutRef","layoutBanner","panelBanner","promoBanner","header","layoutBannerHeight","panelBannerHeight","promoBannerHeight","height","_useFormText","useFormText","preventDefault","AIFormTitle","AIFormSubheading","LockedInformationBanner","touched","handleChange","handleBlur","isSubmitting","popoverText","popoverOptions","container","content","html","placement","template","toggle","trigger","_ref$className","tooltipActive","setTooltipActive","tooltipRef","touchEventRef","dismissPopover","popover","useClickOutsideElement","onMouseEnter","onMouseLeave","onKeyDown","handleKeyPress","onTouchStart","role","tabIndex","amplitudeDataAttribute","InitialMessageDescription","InitialMessageBullets","InitialMessageExample","src","AskAiImg","alt","DqgImg","QqgImg","EpgImg","bookmarks","EmptyContainer","browsePath","emptyImgSrc","BookmarkList","bookmarksFromProps","setBookmarks","subtitleText","handleRemoveBookmark","bookmarkId","newBookmarks","reject","bookmark","map","index","LitCard","hideSuccessCta","onRemoval","includeTags","userSignedIn","RelatedThemesFilterBox","_React$Component","_this","_classCallCheck","_callSuper","onCheckboxChange","isSubscribed","showSidebarPromo","checked","setState","selected","state","filter","onMoreToggleClick","allVisible","_inherits","_createClass","prevProps","prevState","this","_this$props","totalFilters","_this2","_this$props2","isPromoVisible","filterables","position","zIndex","Checkbox","count","renderMoreToggleBtn","isFreeTier","RelatedThemes","_React$Component2","_this3","closeSidebarPromo","sidebarPromoVisible","filteredAuthors","filteredBooks","filteredThemes","relatedThemes","_this$state","selectedFiltersToHash","b","bookAuthorFullName","bookTitle","reduce","k","_this4","_this$props3","aPlusDialogHref","aPlusDialogLogoSrc","_this$props4","APlusDialog","logoSrc","shouldRenderCloseBtn","_this$props5","filterableAuthorCount","filterableAuthors","filterableBookCount","filterableBooks","renderFilterBox","renderSidebarPromo","mainTheme","path","dangerouslySetInnerHTML","__html","mediumIconHtml","largeIconHtml","bookPath","descriptionHtml","blurredThemesImgSrc","maxWidth","_this$props6","aPlusDialogContent","_this$props7","relatedThemesCount","getThemeCount","renderRelatedThemeCards","renderRelatedThemesBlur","renderPromo","renderSidebar","renderThemeYouWereReading","renderRelatedThemes","SummaryAnalysisAPlusDialog","logoSrcXs","linkClasses","GroupsInfoExpandableFaqRow","answer","Expandable","expandableClassName","GroupsInfoFaqRow","isExpanded","summarySection","litTerms","litTerm","LocalTag","summarySections","ss","ChaptersRow","hideFilters","filterOptions","filterBy","viewMode","sortedLitTerms","useMemo","term","sortedSummarySections","some","CHAPTERS","ChaptersView","DEVICES","DevicesView","showPath","keyExamplesCount","DevicesRow","currentFilter","setCurrentFilter","setViewMode","sectionType","LandingPage","handleParamChange","updateHistory","url","URL","searchParams","set","history","pushState","lowerCaseOptions","_this$state$viewMode","PageDescription","authorName","Filters","Content","QueryParamsControls","setFilterBy","findFilterByOption","filterByOption","setParamFilters","_helpers$getQueryPara","_helpers$getQueryPara2","viewModeParam","filterByParam","_helpers$getQueryPara3","_helpers$getQueryPara4","items","menuParentProps","Menu","item","_item$children","MenuParent","MenuItem","menuItemType","shouldAutoExpand","iconUrl","showChildren","setShowChildren","toggleExpand","show","onKeyPress","Icon","size","child","publicDomain","alignment","leftContent","rightContent","handleLargeScreenClick","aiTool","cls","classList","handleSmallScreenClick","querySelectorAll","banner","TextToggle","onToggle","ComponentItemSelect","modalCategory","modalTitle","category","componentValue","activeContext","selector","selectors","COMPONENT","$component","$section","closest","SECTION","hasClass","$title","COMPONENT_TITLE","$valueReplace","COMPONENT_VALUE_REPLACE","$activeContext","ACTIVE_CONTEXT_NOTE","$content","POEM_CONTENT","$modalCategory","TEXT_MODAL_CATEGORY","text","setComponentContentViaAjax","selectComponentItem","componentId","el","ajax","dataType","success","ReactDOM","bannerContent","QuizAnswerChoice","answerLetter","answerText","isSelectedAnswer","setSelectedAnswer","isAnonUser","link","isSelected","QUIZ_ANSWER_STATES","UNLOCKED","handleAnswerSelected","canBeTabbed","LOCKED","amplitudeEvent","classNames","QuizAnswerChoiceIcon","ReviewButton","icon","SKIPPED","CORRECT","INCORRECT","DISABLED","iconName","answerOptions","onAnswerSelect","questionId","questionIndex","questionText","questionTotal","QuizCard","selectedAnswer","handleAnswerSelect","answerOption","cardState","QUIZ_RESULT_STATES","QuizCardResult","bannerExpanded","setBannerExpanded","QuizCardResultText","attemptCount","lockedRedirectUrl","previousPercentCorrect","quizSubmission","correct","incorrect","skipped","percentCorrect","reviewLink","quizQuestions","ANSWER_OPTION_LETTERS","correctAnswerKey","QuizResult","handleRetake","pathname","amplitudeFunnel","ResultsPanel","onRetakeClick","quizQuestion","lastQuizSubmissionSummary","quizTitle","submissionUrl","QuizSubmission","setIsLoading","emptyQuestionsSubmission","acc","cur","assign","quizQuestionsSubmission","setQuizQuestionsSubmission","handleLockedState","chosenAnswer","updatedSubmission","token","reloadPath","split","request","headers","quiz_submission","quiz_question_submissions_attributes","quiz_question_id","chosen_answer","_response","alert","Counter","_ref2$correct","_ref2$incorrect","_ref2$skipped","total","roundedPercentage","Math","round","summaryText","MultiSelectRefinementList","attribute","categories","authorEthnicities","limit","authorGenders","countries","genreCategories","RefinementList","gradeLevelCategories","HierarchicalRefinementList","guideCategories","literaryMovementCategories","refinementLimit","literaryPeriodCategories","timePeriodCategories","typeCategories","MAPPING","CurrentRefinementPill","refine","getLabel","string","cardinalize","indexOf","truncate","handleResize","width","parent","outerWidth","connectCurrentRefinements","isSticky","setIsSticky","setIsExpanded","hiddenRefinements","setHiddenRefinements","containerRef","listRef","handleScroll","passive","_step","_iterator","_createForOfIteratorHelper","getBoundingClientRect","err","itemsToRender","refinement","currentRefinement","containerClassName","listClassName","hidden","hideFlyout","hideFlyoutHover","Flyout","flyoutReference","referenceMapping","controlled","flyState","setFlyState","refinedValues","updateRefinedValue","handleRefine","outsideFlyoutClickListener","toggleFlyout","removeClass","addClass","innerWidth","showFlyout","HierarchicalRefinementListElement","handleClick","connectRefinementList","itemsToCount","isRefined","refinedCount","hitCount","accumulator","currentVal","liClassName","elementCountClassName","number","commaSeparateNumber","hit","primaryTitle","secondaryTitle","blurb","author","isAPlus","Hit","hitClass","categoryClass","titleClass","blurbClass","authorClass","isBlurred","htmlDecode","aPlusPromoUrl","hits","promoInfo","characterCount","quoteCount","symbolCount","themeCount","quizCount","litDeviceCount","Paginate","connectStateResults","searchResults","nbHits","Pagination","showLast","PromoContent","searchState","relatedText","query","resultData","disjunctiveFacets","Hits","NoResults","showRequestContentAfterDelay","shownPromo","objectID","APlus","logo","connectHits","setCurrentPromoAttribute","refinementClassName","countedCategories","cat","numResults","MultiSelect","selectedValues","promoAttributeReference","preventSelect","FilterPromoContext","Consumer","filterPromoContextProps","showRequestContentModal","modal","RequestContentModal","logoUrl","showAfterDelay","Label","refineable","RefineElement","ControlledCheckbox","_label$split2","label1","label2","isRefineable","categoryValue","showAllRefinements","setShowAllRefinements","shownCategories","setShownCategories","refinementsToRemove","setRefinementsToRemove","renderElements","setRenderElements","resultCount","refineableCategories","curr","every","result","array","allCategories","val","includes","showingRefiments","RefinementListWithPromoContext","currentPromoAttribute","SearchBox","connectSearchBox","currentTarget","algoliaAppId","algoliaApiKey","metadataConstants","SearchResults","isSearchStalled","showFilters","Stats","translations","stats","CurrentRefinements","Search","showMobileFilters","setShowMobileFilters","newPromoAttr","setFilterPromoContextState","filterPromoContextState","searchClient","algoliasearch","remove","outsideFilterClickListener","$target","contains","closeMiniPromo","showMiniAplusPromo","MiniAPlus","InstantSearch","indexName","Provider","GuideRefinementList","TypeRefinementList","GenreMultiSelect","TimePeriodRefinementList","LiteraryPeriodRefinementList","LiteraryMovementRefinementList","AuthorNationalityMultiSelect","AuthorEthnicityMultiSelect","AuthorGenderMultiSelect","GradeLevelRefinementList","defaultRefinement","append","Shakescleare","Poetry","Mythology","litGuideReference","poetryGuideReference","shakesReference","litTermReference","proseFictionReference","proseNonfictionReference","poetryReference","playDramaReference","mythologyReference","genre","timePeriod","literaryPeriod","literaryMovement","authorEthnicity","authorNationality","authorGender","gradeLevel","UserDownloadsSortControl","sortBy","$list","containerSelector","listSelector","$listItems","listItemSelector","sort","aVal","bVal","get","detach","appendTo","updateSort","baseClassName","UserHighlightsFilterControl","each","updateFilter","actionOptions","beForgottenOptions","dataTransferOptions","errorMessages","requestDataAccessOptions","stopProcessingDataOptions","GdprRequestForm","ActionComponent","action","setAction","reason","Input","inputId","InputComponent","additional_info","additionalInfo","transferRecipient","transfer3rdParty","transfer_3rd_party","incorrectData","incorrect_data","correct_data","correctData","email","view","detectUserInput","globalViews","applyUtilityClasses","events","toast","initialize","views","ready","toastMessage","toastNotify","toastLink"],"sourceRoot":""}