{"version":3,"sources":["webpack:///./app/react/packages/search/components/extensions/ClearRefinements.js","webpack:///./app/react/packages/search/components/extensions/InfiniteHits.js","webpack:///./app/react/packages/search/components/extensions/MenuSelect.js","webpack:///./app/react/packages/search/components/extensions/SearchBox.js","webpack:///./app/react/packages/search/components/extensions/SortBy.js","webpack:///./app/react/packages/search/constants/ui.js","webpack:///./app/react/packages/search/components/hits/ImagePlaceholder.js","webpack:///./app/react/packages/search/components/hits/HitWrapper.js","webpack:///./app/react/packages/search/constants/levels.js","webpack:///./app/react/packages/search/components/hits/Levels.js","webpack:///./app/react/packages/search/constants/audiences.js","webpack:///./app/react/packages/search/components/hits/LevelsAndAudiences.js","webpack:///./app/react/packages/search/constants/materialTypes.js","webpack:///./app/react/packages/search/constants/propShapes.js","webpack:///./app/react/packages/search/utils/hitLinks.js","webpack:///./app/react/packages/search/utils/getHitLevelsByType.js","webpack:///./app/react/packages/search/utils/getPreferredLevelType.js","webpack:///./app/react/packages/search/components/hits/GenericFlashcardHit.js","webpack:///./app/react/packages/search/components/hits/GenericVideoHit.js","webpack:///./app/react/packages/search/components/hits/HitImage.js","webpack:///./app/react/packages/search/constants/labels.js","webpack:///./app/react/packages/search/components/hits/LessonHit.js","webpack:///./app/react/packages/search/components/hits/PostHit.js","webpack:///./app/react/packages/search/components/hits/CollectionHit.js","webpack:///./app/react/packages/search/components/hits/GenericCourseHit.js","webpack:///./app/react/packages/search/components/hits/PollHit.js","webpack:///./app/react/packages/search/components/hits/AllMaterialsListHit.js","webpack:///./app/react/packages/search/components/hits/AllMaterialsGridHit.js","webpack:///./app/react/packages/search/components/hits/FlashcardCategoryHit.js","webpack:///./app/react/packages/search/components/hits/FlashcardHit.js","webpack:///./app/react/packages/search/components/hits/VideoHit.js","webpack:///./app/react/packages/search/components/refinements/AudienceFilter.js","webpack:///./app/react/packages/search/components/refinements/LevelFilter.js","webpack:///./app/react/packages/search/components/refinements/MaterialTypeFilter.js","webpack:///./app/react/packages/search/constants/indices.js","webpack:///./app/react/packages/search/components/refinements/Sort.js","webpack:///./app/react/packages/search/hooks/useViewMode.js","webpack:///./app/react/packages/search/components/ViewModeToggle.js"],"names":["ClearRefinements","items","refine","onClick","color","px","py","icon","pr","as","fontWeight","propTypes","PropTypes","arrayOf","object","isRequired","func","connectCurrentRefinements","InfiniteHits","emptyStateHeading","emptyStateMessage","hasMore","hitComponent","hits","hitsWrapper","isSearchStalled","refineNext","searching","searchResults","hitComponentProps","WrapperComponent","HitComponent","isLoading","nbHits","my","textAlign","mb","clearsQuery","map","hit","objectID","disabled","display","defaultProps","children","string","bool","connectInfiniteHits","connectStateResults","MenuSelect","currentRefinement","label","value","onChange","e","currentTarget","item","isRefined","shape","connectMenu","SearchInput","styled","Input","attrs","props","type","iconRight","withCancelButton","placeholder","SearchBox","noValidate","action","role","onSubmit","preventDefault","style","position","right","top","height","width","inputIconWidth","zIndex","title","connectSearchBox","SortBy","defaultRefinement","connectSortBy","resultImageSize","listView","compactView","descriptionCharLimitDefault","descriptionCharLimitMd","ImagePlaceholder","size","borderRadius","bg","alignItems","justifyContent","mx","fontSize","oneOfType","HitWrapper","Box","boxShadow","theme","shadows","displayName","none","cefr","clb","eld","nrs","levelFiltersByPreference","sortByElementPositionIn","levels","reduce","accumulator","currentElement","index","eslLevels","eslLevelSort","eldLevelSort","nrsLevelSort","Levels","preferredLevels","preferredLevelType","shouldBeAllLevels","allEslLevels","length","printLevelRange","join","mr","flexShrink","firstItem","toUpperCase","eldLevels","replace","printEldLevelRange","printLevels","oneOf","allAudiences","LevelsAndAudiences","audiences","shouldBeAllAudiences","filteredAudiences","filter","a","includes","flashcard","flashcardCategory","lesson","post","collection","video","studyPack","course","poll","materialTypeLabels","cefrLevels","clblevels","lessonPropShape","cefr_levels","clb_levels","eld_levels","lesson_section_id","number","lesson_section_title","description","has_audio","has_video","id","image_url","is_featured","is_resource","flashcardPropShape","category","slug","genre","flashcardCategoryPropShape","postPropShape","author","categories","category_titles","created_at","excerpt","collectionPropShape","list_category_id","list_category_title","list_category_slug","list_category_image_url","tag","videoPropShape","tag_list","coursePropShape","subtitle","studyPackPropShape","pollPropShape","topic","getFlashcardLink","genreSlug","categorySlug","getLessonLink","lessonSectionSlug","isUserLoggedIn","getPostLink","getCollectionLink","listCategorySlug","getVideoLink","getPollLink","getCourseLink","getStudyPack","getHitLevelsByType","clbLevels","nrsLevels","nrs_levels","getPreferredLevelType","levelPreference","hitLevels","GenericFlashcardHit","imageUrl","getInitialState","link","reset","href","alt","src","undefined","compact","GenericVideoHit","descriptionCharLimit","useMedia","mediaQueries","md","categoryTitle","weight","objectFit","measure","substring","HitImage","CoverImage","text","LessonHit","lesson_section_slug","lessonSectionTitle","hasAudio","hasVideo","labelsList","labels","isResource","teacherDiscretion","teacher_discretion","isMd","cleanDescription","removeMd","isUserFree","lessonLabels","l","ml","m","PostHit","showTypeLabel","publishedAt","published_at","cleanExcerpt","DOMPurify","sanitize","ALLOWED_TAGS","excerptCharLimit","mt","getFormattedDate","CollectionHit","listCategoryImageUrl","listCategoryTitle","GenericCourseHit","categoryName","name","PollHit","hitComponents","AllMaterialsListHit","Component","DISPLAY_LEVELS_FOR_TYPES","AllMaterialsGridHit","linkByType","secondaryInfo","gridHitImageSize","hasImage","getCoverImageBorderRadius","p","resource","FlashcardCategoryHit","left","FlashcardHit","VideoHit","borderTopLeftRadius","borderTopRightRadius","approvedRefinements","AudienceFilter","attribute","transformItems","refinements","r","ascendByLabel","ascendByParsedLabel","x","parseInt","ascendByEslLevelValue","ascendByEldLevelValue","ascendByNrsLevelValue","formatLevelsByPreference","LevelFilter","algoliaEnv","process","materials","materialsAlphabetical","materialsRecent","materialsRanking","sortItems","sortItemsCollections","Sort","origin","ORIGIN","collections","useViewMode","createLocalStorageStateHook","ViewModeToggle","viewMode","setViewMode"],"mappings":"woCAOA,SAASA,EAAT,GAA8C,IAAlBC,EAAiB,EAAjBA,MAAOC,EAAU,EAAVA,OACjC,OACE,eAAC,oBAAD,CACEC,QAAS,kBAAMD,EAAOD,IACtBG,MAAM,UACNC,GAAI,EACJC,GAAI,EAJN,UAME,cAAC,OAAD,CAAMC,KAAK,WAAWC,GAAI,IAC1B,cAAC,OAAD,CAAMC,GAAG,OAAOC,WAAY,IAA5B,2BAONV,EAAiBW,UAAY,CAC3BV,MAAOW,IAAUC,QAAQD,IAAUE,QAAQC,WAC3Cb,OAAQU,IAAUI,KAAKD,YAGVE,kBAA0BjB,G,4aCTzC,SAASkB,EAAT,GAYI,IAXFC,EAWC,EAXDA,kBACAC,EAUC,EAVDA,kBACAC,EASC,EATDA,QACAC,EAQC,EARDA,aACAC,EAOC,EAPDA,KACAC,EAMC,EANDA,YACAC,EAKC,EALDA,gBACAC,EAIC,EAJDA,WACAC,EAGC,EAHDA,UACAC,EAEC,EAFDA,cACAC,EACC,EADDA,kBAEMC,EAAmBN,EACnBO,EAAeT,EAEfU,EAAYP,GAAmBE,EAErC,OAA8B,KAAb,OAAbC,QAAa,IAAbA,OAAA,EAAAA,EAAeK,QAEf,eAAC,MAAD,CAAKC,GAAI,CAAC,EAAG,KAAM,KAAM,GAAIC,UAAU,SAAvC,UACE,cAAC,UAAD,CAAS1B,GAAG,KAAK2B,GAAI,EAArB,SACGjB,IAEH,cAAC,OAAD,UAAOC,IACP,cAAC,MAAD,CAAKc,GAAI,EAAT,SACE,cAAC,EAAD,CAAkBG,aAAW,SAOnC,qCACE,cAACP,EAAD,UACGP,EAAKe,KAAI,SAAAC,GAAG,OACX,cAACR,E,+VAAD,EAAcQ,IAAKA,GAA4BV,GAAlBU,EAAIC,eAGpCnB,GACC,cAAC,MAAD,CAAKc,UAAU,SAASD,GAAI,EAA5B,SACE,eAAC,SAAD,CAAQ/B,QAASuB,EAAYe,SAAUT,EAAvC,UACE,cAAC,OAAD,CAAMU,QAAQ,eAAelC,GAAI,EAAjC,uBAGCwB,EAAY,cAAC,iBAAD,IAAqB,cAAC,OAAD,CAAMzB,KAAK,uBAQzDW,EAAayB,aAAe,CAC1BxB,kBAAmB,mBACnBC,kBACE,uEACFI,YAAa,gBAAGoB,EAAH,EAAGA,SAAH,OAAkB,8BAAMA,MAGvC1B,EAAaP,UAAY,CACvBQ,kBAAmBP,IAAUiC,OAC7BzB,kBAAmBR,IAAUiC,OAC7BvB,aAAcV,IAAUI,KAAKD,WAC7BQ,KAAMX,IAAUC,QAAQD,IAAUE,QAClCU,YAAaZ,IAAUI,KACvBK,QAAST,IAAUkC,KACnBpB,WAAYd,IAAUI,KAAKD,WAE3Bc,kBAAmBjB,IAAUE,QAGhBiC,kBAAoBC,YAAoB9B,I,UCpFvD,SAAS+B,EAAT,GAAwE,IAAlDC,EAAiD,EAAjDA,kBAAmB3C,EAA8B,EAA9BA,KAAMN,EAAwB,EAAxBA,MAAOkD,EAAiB,EAAjBA,MAAOjD,EAAU,EAAVA,OAC3D,OACE,eAAC,WAAD,CACEiD,MAAOA,EACP5C,KAAMA,EACN6C,MAAOF,GAAqB,GAC5BG,SAAU,SAAAC,GAAC,OAAIpD,EAAOoD,EAAEC,cAAcH,QAJxC,UAME,wBAAQA,MAAM,GAAd,iBACCnD,EAAMqC,KAAI,SAAAkB,GAAI,OACb,wBAEEJ,MAAOI,EAAKC,UAAYP,EAAoBM,EAAKJ,MAFnD,SAIGI,EAAKL,OAHDK,EAAKL,aAUpBF,EAAWN,aAAe,CACxBO,kBAAmB,MAGrBD,EAAWtC,UAAY,CACrBuC,kBAAmBtC,IAAUiC,OAC7BtC,KAAMK,IAAUiC,OAAO9B,WACvBd,MAAOW,IAAUC,QACfD,IAAU8C,MAAM,CACdP,MAAOvC,IAAUiC,OAAO9B,WACxBqC,MAAOxC,IAAUiC,OAAO9B,cAE1BA,WACFoC,MAAOvC,IAAUiC,OAAO9B,WACxBb,OAAQU,IAAUI,KAAKD,YAGV4C,kBAAYV,G,kBCvCrBW,EAAcC,kBAAOC,SAAOC,OAAM,SAAAC,GAAK,MAAK,CAChDC,KAAM,SACN1D,KAAM,SACN2D,UAAWF,EAAMG,kBAAoBH,EAAMZ,MAAQ,QAAU,GAC7DD,MAAO,mBACPiB,YAAaJ,EAAMI,gBALJ,kDAAGP,CAAH,kHAejB,SAASQ,EAAT,GAKI,IAJFnB,EAIC,EAJDA,kBACAkB,EAGC,EAHDA,YACAlE,EAEC,EAFDA,OACAiE,EACC,EADDA,iBAEA,OACE,uBACEG,YAAU,EACVC,OAAO,GACPC,KAAK,SACLC,SAAU,SAAAnB,GAAC,OAAIA,EAAEoB,kBACjBC,MAAO,CAAEC,SAAU,YALrB,UAOE,cAAChB,EAAD,CACEQ,YAAaA,EACbf,SAAU,SAAAC,GAAC,OAAIpD,EAAOoD,EAAEC,cAAcH,QACtCA,MAAOF,EACPiB,iBAAkBA,IAEnBA,GAAoBjB,GACnB,cAAC,oBAAD,CACE0B,SAAS,WACTC,MAAO,EACPC,IAAK,EACLC,OAAO,OACPC,MAAOC,iBACPC,OAAQ,EACRjB,KAAK,QACLkB,MAAM,qBACNhF,QAAS,kBAAMD,EAAO,UAOhCmE,EAAU1B,aAAe,CACvBwB,kBAAkB,GAGpBE,EAAU1D,UAAY,CACpBuC,kBAAmBtC,IAAUiC,OAAO9B,WACpCqD,YAAaxD,IAAUiC,OAAO9B,WAC9Bb,OAAQU,IAAUI,KAAKD,WACvBoD,iBAAkBvD,IAAUkC,MAGfsC,kBAAiBf,G,UC9DhC,SAASgB,EAAT,GAA0E,IAAxDpF,EAAuD,EAAvDA,MAAOiD,EAAgD,EAAhDA,kBAAmBoC,EAA6B,EAA7BA,kBAAmBpF,EAAU,EAAVA,OAC7D,OACE,cAAC,WAAD,CACEiD,MAAM,UACN5C,KAAK,WACL6C,MAAOF,GAAqBoC,EAC5BjC,SAAU,SAAAC,GAAC,OAAIpD,EAAOoD,EAAEC,cAAcH,QAJxC,SAMGnD,EAAMqC,KAAI,SAAAkB,GAAI,OACb,wBAAyBJ,MAAOI,EAAKJ,MAArC,SACGI,EAAKL,OADKK,EAAKJ,YAQ1BiC,EAAO1E,UAAY,CACjBV,MAAOW,IAAUC,QACfD,IAAU8C,MAAM,CACdP,MAAOvC,IAAUiC,OAAO9B,WACxBqC,MAAOxC,IAAUiC,OAAO9B,cAE1BA,WACFmC,kBAAmBtC,IAAUiC,OAAO9B,WACpCuE,kBAAmB1E,IAAUiC,OAAO9B,WACpCb,OAAQU,IAAUI,KAAKD,YAGVwE,kBAAcF,G,QCpChBG,EAAkB,CAAC,SAAU,KAAM,UAAW,QAG9CC,EAAW,OACXC,EAAc,UAGdC,EAA8B,GAC9BC,EAAyB,ICFvB,SAASC,EAAT,GAA2C,IAAfC,EAAc,EAAdA,KAAMvF,EAAQ,EAARA,KAC/C,OACE,cAAC,MAAD,CACEuF,KAAMA,EACNC,aAAa,WACbC,GAAG,UACHtD,QAAQ,OACRuD,WAAW,SACXC,eAAe,SACfC,GAAG,OAPL,SASE,cAAC,OAAD,CAAM5F,KAAMA,EAAM6F,SAAU,EAAGhG,MAAM,cAK3CyF,EAAiBlD,aAAe,CAC9BmD,KAAMN,EACNjF,KAAM,UAGRsF,EAAiBlF,UAAY,CAC3BJ,KAAMK,IAAUiC,OAChBiD,KAAMlF,IAAUyF,UAAU,CACxBzF,IAAUiC,OACVjC,IAAUC,QAAQD,IAAUiC,WC3BhC,IAAMyD,EAAazC,kBAAO0C,OAAKxC,OAAM,iBAAO,CAC1CiC,GAAI,QACJD,aAAc,UACdnB,SAAU,WACV4B,UAAW,MAJG,sCAAG3C,CAAH,2KAcE,SAAAG,GAAK,OAAIA,EAAMyC,MAAMC,QAAQ,MAU/CJ,EAAWK,YAAc,aAEVL,I,EAAAA,I,yRC5BR,IAAMM,EAAO,OACPC,EAAO,OACPC,EAAM,MACNC,EAAM,MACNC,GAAM,MAENC,IAAwB,OAClCJ,EAAO,eAD2B,IAElCC,EAAM,cAF4B,IAGlCC,EAAM,cAH4B,IAIlCC,GAAM,cAJ4B,IAKlCJ,EAAO,UAL2B,GAW/BM,GAA0B,SAAAC,GAC9B,OAAOA,EAAOC,QAAO,SAACC,EAAaC,EAAgBC,GACjD,OAAO,IAAQD,EAAgBC,EAAOF,KACrC,KAGQG,GAAY,CAAC,UAAW,MAAO,UAAW,MAAO,WAAY,OAE7DC,GAAeP,GAAwBM,IA6BvCE,GAAeR,GAVH,CACvB,UACA,QACA,QACA,QACA,QACA,QACA,UAOWS,GAAeT,GAFH,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,O,0mCC5CzC,SAASU,GAAT,GAKX,IAJFJ,EAIC,EAJDA,UACAK,EAGC,EAHDA,gBACAC,EAEC,EAFDA,mBACG9D,EACF,SAEK+D,EACJ,IAASP,EAAWQ,KAAsC,IAArBR,EAAUS,OAwB3CC,EAAkB,SAAAf,GAAM,OAC5B,IAAO,CAAC,IAAOA,GAAS,IAAOA,KAAUgB,KAAK,uBA0BhD,OACE,eAAC,MAAD,OACEzF,QAAQ,OACRuD,WAAW,WACX7D,GAAI,CAAC,EAAG,KAAM,GACdgG,GAAI,CAAC,EAAG,KAAM,IACVpE,GALN,cAOE,cAAC,OAAD,CAAMgB,MAAM,OAAOxE,GAAI,EAAG6H,WAAY,EAAG9H,KAAK,cAC9C,cAAC,OAAD,UAAOwH,EAAoB,aAjCX,WAGlB,GAAIF,IAAoBL,IAAcK,EAAgBI,OACpD,OAAOC,EAAgBV,GAGzB,GAA2B,QAAvBM,EAA8B,CAChC,IAAMQ,EAAY,IAAOT,GAEzB,MAAM,WAAN,OACgB,YAAdS,EAA0B,GAAKR,EAAmBS,cADpD,mBA9BuB,SAAAC,GACzB,IAAMF,EAAY,IAAOE,GACzB,MAAkB,YAAdF,EACK,IAAO,CAACA,EAAW,IAAOE,KAAaL,KAAK,sBAG9C,IAAO,CACZG,EAAUG,QAAQ,OAAQ,IAC1B,IAAOD,GAAWC,QAAQ,OAAQ,MACjCN,KAAK,sBAuBJO,CAAmBb,GAFrB,oBAGGK,EAAgBV,GAHnB,WAOF,MAAM,WAAN,OACIM,EAAmBS,cADvB,mBAEIL,EAAgBL,GAFpB,oBAGKK,EAAgBV,GAHrB,WAgB4CmB,SAKhDf,GAAOjF,aAAe,CACpB6E,UAAW,GACXK,gBAAiB,IAGnBD,GAAOjH,UAAY,CACjB6G,UAAW5G,IAAUC,QAAQD,IAAUiC,QACvCgF,gBAAiBjH,IAAUC,QAAQD,IAAUiC,QAC7CiF,mBAAoBlH,IAAUgI,MAAM,CAAC/B,EAAMC,EAAKC,EAAKC,GAAKJ,IAAO7F,YC7F5D,I,GAAM8H,GAAe,CAAC,iBAAkB,QAAS,UCOzC,SAASC,GAAT,GAKX,IAJFC,EAIC,EAJDA,UACAvB,EAGC,EAHDA,UACAK,EAEC,EAFDA,gBACAC,EACC,EADDA,mBAKMkB,EAAuB,IAAM,KAAS,GAAO,EAChDD,EAAUd,OACX,IAASc,EAAWF,MAIhBI,EAAoBF,EAAUG,QAAO,SAAAC,GAAC,OAAIN,GAAaO,SAASD,MAEtE,OACE,eAAC,MAAD,CAAK/C,SAAU,EAAG1D,QAAS,CAAC,QAAS,KAAM,QAA3C,UACE,cAACkF,GAAD,CACEJ,UAAWA,EACXK,gBAAiBA,EACjBC,mBAAoBA,IAEtB,eAAC,MAAD,CAAKpF,QAAQ,OAAOuD,WAAW,WAA/B,UACE,cAAC,OAAD,CAAMjB,MAAM,OAAOxE,GAAI,EAAG6H,WAAY,EAAG9H,KAAK,kBAC9C,cAAC,OAAD,UACGyI,EAAuB,WAAaC,EAAkBd,KAAK,c,yHAOtEW,GAAmBnG,aAAe,CAChCoG,UAAW,GACXvB,UAAW,GACXK,gBAAiB,IAGnBiB,GAAmBnI,UAAY,CAC7BoI,UAAWnI,IAAUC,QAAQD,IAAUiC,QACvC2E,UAAW5G,IAAUC,QAAQD,IAAUiC,QACvCgF,gBAAiBjH,IAAUC,QAAQD,IAAUiC,QAC7CiF,mBAAoBlH,IAAUgI,MAAM,CAAC/B,EAAMC,EAAKC,EAAKC,GAAKJ,IAAO7F,YCrD5D,IAAMsI,GAAY,YACZC,GAAoB,qBACpBC,GAAS,SACTC,GAAO,OACPC,GAAa,OACbC,GAAQ,QACRC,GAAY,OACZC,GAAS,SACTC,GAAO,OAEPC,IAAkB,SAC5BT,GAAY,cADgB,MAE5BC,GAAoB,wBAFQ,MAG5BC,GAAS,uBAHmB,MAI5BC,GAAO,cAJqB,MAK5BC,GAAa,eALe,MAM5BC,GAAQ,UANoB,MAO5BC,GAAY,eAPgB,MAQ5BC,GAAS,WARmB,MAS5BC,GAAO,SATqB,ICLzBd,GAAYnI,IAAUC,QAC1BD,IAAUgI,MAAM,CAAC,iBAAkB,QAAS,YAGxCmB,GAAanJ,IAAUC,QAC3BD,IAAUgI,MAAM,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,QAGjDoB,GAAYpJ,IAAUC,QAC1BD,IAAUgI,MAAM,CACd,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,KACA,QAIEJ,GAAY5H,IAAUC,QAC1BD,IAAUgI,MAAM,CACd,UACA,QACA,QACA,QACA,QACA,QACA,WAIEzB,GAASvG,IAAUC,QAAQD,IAAUgI,MAAMpB,KAEpCyC,GAAkBrJ,IAAU8C,MAAM,CAC7CqF,UAAWA,GAAUhI,WACrBmJ,YAAaH,GACbI,WAAYH,GACZI,WAAY5B,GACZ6B,kBAAmBzJ,IAAU0J,OAAOvJ,WACpCwJ,qBAAsB3J,IAAUiC,OAAO9B,WACvCyJ,YAAa5J,IAAUiC,OACvB4H,UAAW7J,IAAUkC,KACrB4H,UAAW9J,IAAUkC,KACrB6H,GAAI/J,IAAU0J,OAAOvJ,WACrB6J,UAAWhK,IAAUiC,OAAO9B,WAC5B8J,YAAajK,IAAUkC,KACvBgI,YAAalK,IAAUkC,KACvBqE,UACAhC,MAAOvE,IAAUiC,OAAO9B,aAGbgK,GAAqBnK,IAAU8C,MAAM,CAChDqF,aACAiC,SAAUpK,IAAU8C,MAAM,CACxBiH,GAAI/J,IAAU0J,OAAOvJ,WACrBoE,MAAOvE,IAAUiC,OAAO9B,WACxBkK,KAAMrK,IAAUiC,OAAO9B,aACtBA,WACHmJ,YAAaH,GACbI,WAAYH,GACZI,WAAY5B,GACZ0C,MAAOtK,IAAU8C,MAAM,CACrBiH,GAAI/J,IAAU0J,OAAOvJ,WACrBoE,MAAOvE,IAAUiC,OAAO9B,WACxBkK,KAAMrK,IAAUiC,OAAO9B,aACtBA,WACHoG,UACAwD,GAAI/J,IAAU0J,OAAOvJ,WACrB6J,UAAWhK,IAAUiC,OAAO9B,WAC5BoE,MAAOvE,IAAUiC,OAAO9B,aAGboK,GAA6BvK,IAAU8C,MAAM,CACxDqF,aACAmB,YAAaH,GACbI,WAAYH,GACZI,WAAY5B,GACZ0C,MAAOtK,IAAU8C,MAAM,CACrBiH,GAAI/J,IAAU0J,OAAOvJ,WACrBoE,MAAOvE,IAAUiC,OAAO9B,WACxBkK,KAAMrK,IAAUiC,OAAO9B,aACtBA,WACHoG,UACAwD,GAAI/J,IAAU0J,OAAOvJ,WACrB6J,UAAWhK,IAAUiC,OACrBoI,KAAMrK,IAAUiC,OAAO9B,WACvBoE,MAAOvE,IAAUiC,OAAO9B,aAGbqK,GAAgBxK,IAAU8C,MAAM,CAC3CqF,aACAsC,OAAQzK,IAAUiC,OAAO9B,WACzBuK,WAAY1K,IAAUC,QACpBD,IAAU8C,MAAM,CACdiH,GAAI/J,IAAU0J,OAAOvJ,WACrBoE,MAAOvE,IAAUiC,OAAO9B,WACxBkK,KAAMrK,IAAUiC,OAAO9B,cAEzBA,WACFwK,gBAAiB3K,IAAUC,QAAQD,IAAUiC,QAAQ9B,WACrDmJ,YAAaH,GACbI,WAAYH,GACZI,WAAY5B,GACZgD,WAAY5K,IAAUiC,OAAO9B,WAC7B0K,QAAS7K,IAAUiC,OACnBsE,UACAwD,GAAI/J,IAAU0J,OAAOvJ,WACrB6J,UAAWhK,IAAUiC,OAAO9B,WAC5BkK,KAAMrK,IAAUiC,OAAO9B,WACvBoE,MAAOvE,IAAUiC,OAAO9B,aAGb2K,GAAsB9K,IAAU8C,MAAM,CACjDqF,aACA4B,GAAI/J,IAAU0J,OAAOvJ,WACrBmJ,YAAaH,GACbI,WAAYH,GACZI,WAAY5B,GACZgC,YAAa5J,IAAUiC,OACvBsE,UACAwE,iBAAkB/K,IAAU0J,OAAOvJ,WACnC6K,oBAAqBhL,IAAUiC,OAAO9B,WACtC8K,mBAAoBjL,IAAUiC,OAAO9B,WACrC+K,wBAAyBlL,IAAUiC,OAAO9B,WAC1C6J,UAAWhK,IAAUiC,OACrBoI,KAAMrK,IAAUiC,OAAO9B,WACvBoE,MAAOvE,IAAUiC,OAAO9B,WACxBgL,IAAKnL,IAAUiC,SAGJmJ,GAAiBpL,IAAU8C,MAAM,CAC5CqF,aACA4B,GAAI/J,IAAU0J,OAAOvJ,WACrBoE,MAAOvE,IAAUiC,OAAO9B,WACxBkK,KAAMrK,IAAUiC,OAAO9B,WACvBmJ,YAAaH,GACbI,WAAYH,GACZI,WAAY5B,GACZgC,YAAa5J,IAAUiC,OACvBsE,UACAyD,UAAWhK,IAAUiC,OACrBmI,SAAUpK,IAAU8C,MAAM,CACxBiH,GAAI/J,IAAU0J,OAAOvJ,WACrBoE,MAAOvE,IAAUiC,OAAO9B,WACxBkK,KAAMrK,IAAUiC,OAAO9B,aACtBA,WACHmK,MAAOtK,IAAU8C,MAAM,CACrBiH,GAAI/J,IAAU0J,OAAOvJ,WACrBoE,MAAOvE,IAAUiC,OAAO9B,WACxBkK,KAAMrK,IAAUiC,OAAO9B,aACtBA,WACHkL,SAAUrL,IAAUC,QAAQ,CAACD,IAAUiC,WAG5BqJ,GAAkBtL,IAAU8C,MAAM,CAC7CiH,GAAI/J,IAAU0J,OAAOvJ,WACrBoE,MAAOvE,IAAUiC,OAAO9B,WACxBkK,KAAMrK,IAAUiC,OAAO9B,WACvBoL,SAAUvL,IAAUiC,OACpB2H,YAAa5J,IAAUiC,OACvBsE,UACAyD,UAAWhK,IAAUiC,OACrBkG,aACAmB,YAAaH,GACbI,WAAYH,GACZI,WAAY5B,GACZwC,SAAUpK,IAAU8C,MAAM,CACxBiH,GAAI/J,IAAU0J,OAAOvJ,WACrBoE,MAAOvE,IAAUiC,OAAO9B,WACxBkK,KAAMrK,IAAUiC,OAAO9B,aACtBA,WACHkL,SAAUrL,IAAUC,QAAQ,CAACD,IAAUiC,WAG5BuJ,GAAqBF,GAErBG,GAAgBzL,IAAU8C,MAAM,CAC3CiH,GAAI/J,IAAU0J,OAAOvJ,WACrBoE,MAAOvE,IAAUiC,OAAO9B,WACxBuL,MAAO1L,IAAUiC,OAAO9B,WACxBkK,KAAMrK,IAAUiC,OAAO9B,WACvByJ,YAAa5J,IAAUiC,OACvB+H,UAAWhK,IAAUiC,OACrBkG,aACA5B,UACA+C,YAAaH,GACbI,WAAYH,GACZI,WAAY5B,GACZyD,SAAUrL,IAAUC,QAAQ,CAACD,IAAUiC,WCvMlC,SAAS0J,GAAT,GAA4D,IAAhCC,EAA+B,EAA/BA,UAAWC,EAAoB,EAApBA,aAAc9B,EAAM,EAANA,GAC1D,MAAM,qBAAN,OAA4B6B,EAA5B,YAAyCC,GAAzC,OACE9B,EAAE,qBAAiBA,GAAO,IAIvB,SAAS+B,GAAT,GAAqE,IAA5CC,EAA2C,EAA3CA,kBAAmB1B,EAAwB,EAAxBA,KACjD,OADyE,EAAlB2B,eAE/C,WAAN,OAAkB3B,GAGd,YAAN,OAAmB0B,EAAnB,YAAwC1B,GAGnC,SAAS4B,GAAT,GAAgC,IAAT5B,EAAQ,EAARA,KAC5B,MAAM,SAAN,OAAgBA,GAGX,SAAS6B,GAAT,GAAwD,IAA3BC,EAA0B,EAA1BA,iBAAkB9B,EAAQ,EAARA,KACpD,MAAM,gBAAN,OAAuB8B,EAAvB,YAA2C9B,GAGtC,SAAS+B,GAAT,GAAiC,IAAT/B,EAAQ,EAARA,KAC7B,MAAM,UAAN,OAAiBA,GAGZ,SAASgC,GAAT,GAAgC,IAAThC,EAAQ,EAARA,KAC5B,MAAM,uBAAN,OAA8BA,GAGzB,SAASiC,GAAT,GAAkC,IAATjC,EAAQ,EAARA,KAC9B,MAAM,UAAN,OAAiBA,GAGZ,SAASkC,GAAT,GAAiC,IAATlC,EAAQ,EAARA,KAC7B,MAAM,UAAN,OAAiBA,GCjCnB,IA4BemC,GA5BY,SAACnJ,EAAM1B,GAChC,IACewH,EAKXxH,EALF2H,YACYmD,EAIV9K,EAJF4H,WACY3B,EAGVjG,EAHF6H,WACYkD,EAEV/K,EAFFgL,WACApG,EACE5E,EADF4E,OAGF,OAAIlD,IAAS8C,GAAT,OAAgByB,QAAhB,IAAgBA,KAAWP,OACtBO,EAGLvE,IAAS6C,GAAT,OAAgBuG,QAAhB,IAAgBA,KAAWpF,OACtBoF,EAGLpJ,IAAS4C,GAAT,OAAiBkD,QAAjB,IAAiBA,KAAY9B,OACxB8B,EAGL9F,IAAS+C,IAAT,OAAgBsG,QAAhB,IAAgBA,KAAWrF,OACtBqF,EAGFnG,GClBMqG,GAPe,SAACC,EAAiBC,GAC9C,OAAID,IAAoB7G,GAAS8G,EAAUzF,OAGpCwF,EAFE7G,GCyBI,SAAS+G,GAAT,GAAuC,IAARpL,EAAO,EAAPA,IAE1CwG,EASExG,EATFwG,UACAiC,EAQEzI,EARFyI,SACAE,EAOE3I,EAPF2I,MACW0C,EAMTrL,EANFqI,UACAD,EAKEpI,EALFoI,GACAxD,EAIE5E,EAJF4E,OACA8D,EAGE1I,EAHF0I,KACA9F,EAEE5C,EAFF4C,MACAlB,EACE1B,EADF0B,KAGMwJ,EAAoBI,cAApBJ,gBAEFC,EAAYN,GAAmBK,EAAiBlL,GAMhDuF,EAAqB0F,GAAsBC,EAAiBC,GAE5DI,EAEAvB,GADJtI,IAASoF,GACY,CACfmD,UAAWtB,EAAMD,KACjBwB,aAAczB,EAASC,KACvBN,MAEe,CAAE6B,UAAWtB,EAAMD,KAAMwB,aAAcxB,IAE9D,OACE,cAAC,OAAD,CAAM8C,OAAK,EAACC,KAAMF,EAAlB,SACE,cAAC,EAAD,CAAYzN,GAAI,EAAGC,GAAI,CAAC,EAAG,KAAM,GAAI8B,GAAI,CAAC,EAAG,KAAM,GAAnD,SACE,eAAC,UAAD,WACE,cAAC,MAAD,CAAK4C,MAAO,CAAC,EAAG,KAAM,EAAI,GAA1B,SACE,cAAC,MAAD,CAAK5C,GAAI,CAAC,EAAG,KAAM,GAAnB,SACGwL,EACC,cAAC,QAAD,CACEK,IAAI,GACJC,IAAKN,EACL9H,KAAMN,EACN9C,QAAQ,QACRyD,GAAI,MAACgI,EAAW,KAAM,QACtBpI,aACE9B,IAASqF,GAAoB,WAAa,YAI9C,cAACzD,EAAD,QAIN,eAAC,MAAD,CAAKb,MAAO,CAAC,EAAG,KAAM,EAAI,GAA1B,UACE,cAAC,MAAD,CAAK5C,GAAI,EAAT,SACE,eAAC,QAAD,CAAOgM,SAAO,EAACnK,KAAK,eAApB,UACE,cAAC,OAAD,CACE1D,KAAM0D,IAASqF,GAAoB,SAAW,OAC9C9I,GAAI,IAELyD,IAASqF,GACN,qBACA,iBAGR,cAAC,UAAD,CAAS7I,GAAG,KAAK2B,GAAI,EAArB,SACG+C,IAEH,cAAC,OAAD,CAAMzE,WAAY,IAAlB,SAAwBsK,GAAYA,EAAS7F,QAC7C,cAAC,MAAD,CAAKjD,GAAI,EAAT,SACE,cAAC4G,GAAD,CACEC,UAAWA,EACXvB,UAAWL,EACXU,gBAAiB6F,EACjB5F,mBAAoBA,gBAUpC6F,GAAoBhN,UAAY,CAC9B4B,IAAK3B,IAAUyF,UAAU,CAAC0E,GAAoBI,KAC3CpK,Y,6BCtFU,SAASsN,GAAT,GAAmC,IAAR9L,EAAO,EAAPA,IAE3BqL,EAMTrL,EANFqI,UACAK,EAKE1I,EALF0I,KACA9F,EAIE5C,EAJF4C,MACAgH,EAGE5J,EAHF4J,SACA3B,EAEEjI,EAFFiI,YACAQ,EACEzI,EADFyI,SAKIsD,EAFOC,KAASC,eAAaC,IAG/B7I,EACAD,EAEW+I,EAAkB1D,EAAzB7F,MACR,OACE,cAAC,OAAD,CAAM4I,OAAK,EAACC,KAAMhB,GAAa,CAAE/B,SAAjC,SACE,cAAC,EAAD,CAAY5K,GAAI,EAAGC,GAAI,CAAC,EAAG,KAAM,GAAI8B,GAAI,CAAC,EAAG,KAAM,GAAnD,SACE,eAAC,UAAD,WACE,cAAC,MAAD,CAAK4C,MAAO,CAAC,EAAG,KAAM,EAAI,GAA1B,SACE,cAAC,MAAD,CAAK5C,GAAI,CAAC,EAAG,KAAM,GAAIwC,SAAS,WAAhC,SACGgJ,EACC,qCACE,cAAC,MAAD,CAAKhJ,SAAS,WAAWkB,KAAK,OAA9B,SACE,cAAC,MAAD,CACEA,KAAMN,EACNO,aAAa,WACbC,GAAG,qBACHtD,QAAQ,OACRwD,eAAe,SACfD,WAAW,SACXE,GAAI,MAACgI,EAAW,KAAM,QAPxB,SASE,cAAC,OAAD,CAAM5N,KAAK,OAAOoO,OAAO,QAAQvO,MAAM,cAG3C,cAAC,QAAD,CACE6N,IAAI,GACJC,IAAKN,EACL9H,KAAMN,EACN9C,QAAQ,QACRyD,GAAI,MAACgI,EAAW,KAAM,QACtBpI,aAAa,WACbpB,MAAO,CAAEiK,UAAW,cAIxB,cAAC/I,EAAD,CAAkBtF,KAAK,cAI7B,eAAC,MAAD,CAAKyE,MAAO,CAAC,EAAG,KAAM,EAAI,GAA1B,UACE,cAAC,MAAD,CAAK5C,GAAI,EAAT,SACE,eAAC,QAAD,CAAOgM,SAAO,EAACnK,KAAK,eAApB,UACE,cAAC,OAAD,CAAM1D,KAAK,QAAQC,GAAI,IADzB,aAKF,cAAC,UAAD,CAASC,GAAG,KAAK2B,GAAI,EAArB,SACG+C,IAEH,cAAC,OAAD,CAAMzE,WAAY,IAAlB,SAAwBgO,IACvBvC,GACC,eAAC,MAAD,CAAKzJ,QAAQ,OAAOuD,WAAW,WAAW/D,GAAI,EAA9C,UACE,cAAC,OAAD,CAAM8C,MAAM,OAAOxE,GAAI,EAAG6H,WAAY,EAAG9H,KAAK,cAC9C,cAAC,OAAD,CAAM6F,SAAU,EAAhB,SAAoB+F,OAGvB3B,GACC,cAAC,OAAD,CAAMpE,SAAU,EAAGyI,SAAO,EAA1B,SACGrE,EAAYvC,OAASqG,EAArB,UACM9D,EAAYsE,UAAU,EAAGR,GAD/B,UAEG9D,cAUpB6D,GAAgB1N,UAAY,CAC1B4B,IAAK3B,IAAUyF,UAAU,CAAC0E,GAAoBI,KAC3CpK,Y,yBC9GCgO,GAAWlL,kBAAOmL,cAAYjL,OAAM,SAAAC,GAAK,MAAK,CAClDkK,IAAKlK,EAAMkK,IACXD,IAAK,GACLnI,KAAMN,EACNW,GAAI,MAACgI,EAAW,KAAM,QACtB/L,GAAI,CAAC,EAAG,KAAM,OALF,oCAAGyB,CAAH,MAQdkL,GAASpI,YAAc,WAERoI,I,GAAAA,M,yHCDf,iBACGxF,GAAS,CACRhJ,KAAM,WACN0O,KAAM,WAHV,iBAKY,CACR1O,KAAM,SACN0O,KAAM,aAPV,MASGzF,GAAO,CACNjJ,KAAM,SACN0O,KAAM,cAXV,MAaG5F,GAAY,CACX9I,KAAM,OACN0O,KAAM,cAfV,MAiBG3F,GAAoB,CACnB/I,KAAM,SACN0O,KAAM,uBAnBV,iBAqBY,CACR1O,KAAM,WACN0O,KAAM,aAvBV,mBAyBc,CACV1O,KAAM,WACN0O,KAAM,QA3BV,qBA6BgB,CACZ1O,KAAM,aACN0O,KAAM,WA/BV,aAiCQ,CACJ1O,KAAM,aACN0O,KAAM,SAnCV,gBAqCW,CACP1O,KAAM,OACN0O,KAAM,YAvCV,oBAyCe,CACX1O,KAAM,QACN0O,KAAM,gBA3CV,uBA6CkB,CACd1O,KAAM,QACN0O,KAAM,mBA/CV,MAiDGxF,GAAa,CACZlJ,KAAM,OACN0O,KAAM,eAnDV,MAqDGvF,GAAQ,CACPnJ,KAAM,OACN0O,KAAM,UAvDV,MAyDGrF,GAAS,CACRrJ,KAAM,gBACN0O,KAAM,WA3DV,MA6DGtF,GAAY,CACXpJ,KAAM,WACN0O,KAAM,eA/DV,MAiEGpF,GAAO,CACNtJ,KAAM,cACN0O,KAAM,WAnEV,ICee,SAASC,GAAT,GAA6B,IAAR3M,EAAO,EAAPA,IAEhCwG,EAaExG,EAbFwG,UACqB4D,EAYnBpK,EAZF4M,oBACsBC,EAWpB7M,EAXFgI,qBACAC,EAUEjI,EAVFiI,YACW6E,EAST9M,EATFkI,UACW6E,EAQT/M,EARFmI,UACWkD,EAOTrL,EAPFqI,UACQ2E,EAMNhN,EANFiN,OACArI,EAKE5E,EALF4E,OACA8D,EAIE1I,EAJF0I,KACawE,EAGXlN,EAHFuI,YACoB4E,EAElBnN,EAFFoN,mBACAxK,EACE5C,EADF4C,MAGIyK,EAAOrB,KAASC,eAAaC,IAE7BoB,EAAmBC,KAAStF,GAE5B8D,EAAuBsB,EACzBhK,EACAD,EAEJ,EAAwDkI,cAAhDJ,EAAR,EAAQA,gBAAiBb,EAAzB,EAAyBA,eAAgBmD,EAAzC,EAAyCA,WAEnCrC,EAAYN,GAAmBK,EAAiBlL,GAMhDuF,EAAqB0F,GAAsBC,EAAiBC,GAE5DsC,EAAeD,EACjBR,EACAA,EAAWrG,QAAO,SAAA+G,GAAC,MAAU,SAANA,GAAsB,iBAANA,KAE3C,OACE,cAAC,OAAD,CACElC,OAAK,EACLC,KAAMtB,GAAc,CAAEC,oBAAmB1B,OAAM2B,mBAFjD,SAIE,cAAC,EAAD,CAAYvM,GAAI,EAAGC,GAAI,CAAC,EAAG,KAAM,GAAI8B,GAAI,CAAC,EAAG,KAAM,GAAnD,SACE,eAAC,UAAD,WACE,cAAC,MAAD,CAAK4C,MAAO,CAAC,EAAG,KAAM,EAAI,GAA1B,SACE,cAAC,GAAD,CAAUkJ,IAAKN,MAEjB,eAAC,MAAD,CAAK5I,MAAO,CAAC,EAAG,KAAM,EAAI,GAA1B,UACE,eAAC,MAAD,CAAK5C,GAAI,EAAG8N,IAAK,EAAjB,UACE,eAAC,QAAD,CAAO9B,SAAO,EAACnK,KAAK,eAAekM,EAAG,EAAtC,UACE,cAAC,OAAD,CAAM5P,KAAMkP,EAAa,SAAW,WAAYjP,GAAI,IACnDiP,EAAa,WAAa,YAE5BO,EAAa1N,KAAI,SAAAa,GAAK,OACrB,eAAC,QAAD,CAAOiL,SAAO,EAACnK,KAAMd,EAAOgN,EAAG,EAA/B,UACE,cAAC,OAAD,CAAM5P,KAAMiP,GAAOrM,GAAO5C,KAAMC,GAAI,IACnCgP,GAAOrM,GAAO8L,WAGlBI,GACC,eAAC,QAAD,CAAOjB,SAAO,EAAC+B,EAAG,EAAlB,UACE,cAAC,OAAD,CAAM5P,KAAK,YAAYC,GAAI,IAD7B,eAKD8O,GACC,eAAC,QAAD,CAAOlB,SAAO,EAAC+B,EAAG,EAAlB,UACE,cAAC,OAAD,CAAM5P,KAAK,QAAQC,GAAI,IADzB,eAKDkP,GACC,eAAC,QAAD,CAAOtB,SAAO,EAACnK,KAAK,UAApB,UACE,cAAC,OAAD,CAAM1D,KAAK,uBAAuBC,GAAI,IADxC,2BAMJ,cAAC,UAAD,CAASC,GAAG,KAAK2B,GAAI,EAArB,SACG+C,IAEH,cAAC,OAAD,CAAMzE,WAAY,IAAlB,SAAwB0O,IACxB,cAAC,MAAD,CAAKlN,GAAI,EAAT,SACE,cAAC4G,GAAD,CACEC,UAAWA,EACXvB,UAAWL,EACXU,gBAAiB6F,EACjB5F,mBAAoBA,MAGvB0C,GACC,cAAC,OAAD,CAAMpE,SAAU,EAAGyI,SAAO,EAA1B,SACGgB,EAAiB5H,OAASqG,EAA1B,UACMuB,EAAiBf,UAAU,EAAGR,GADpC,UAEGuB,cAUpBX,GAAUvO,UAAY,CACpB4B,IAAK0H,GAAgBlJ,Y,kCC1GR,SAASqP,GAAT,GAA0C,IAAvB7N,EAAsB,EAAtBA,IAAK8N,EAAiB,EAAjBA,cAEnChF,EAQE9I,EARF8I,OACAtC,EAOExG,EAPFwG,UACA0C,EAMElJ,EANFkJ,QACWmC,EAKTrL,EALFqI,UACAzD,EAIE5E,EAJF4E,OACcmJ,EAGZ/N,EAHFgO,aACAtF,EAEE1I,EAFF0I,KACA9F,EACE5C,EADF4C,MAGIyK,EAAOrB,KAASC,eAAaC,IAE7B+B,EAAeC,KAAUC,SAASjF,EAAS,CAAEkF,aAAc,KAE3DC,EAAmBhB,EACrBhK,EACAD,EAEI8H,EAAoBI,cAApBJ,gBAEFC,EAAYN,GAAmBK,EAAiBlL,GAMhDuF,EAAqB0F,GAAsBC,EAAiBC,GAElE,OACE,cAAC,OAAD,CAAMK,OAAK,EAACC,KAAMnB,GAAY,CAAE5B,SAAhC,SACE,cAAC,EAAD,CAAY5K,GAAI,EAAGC,GAAI,CAAC,EAAG,KAAM,GAAI8B,GAAI,CAAC,EAAG,KAAM,GAAnD,SACE,eAAC,UAAD,WACE,cAAC,MAAD,CAAK4C,MAAO,CAAC,EAAG,KAAM,EAAI,GAA1B,SACE,cAAC,GAAD,CAAUkJ,IAAKN,MAEjB,eAAC,MAAD,CAAK5I,MAAO,CAAC,EAAG,KAAM,EAAI,GAA1B,UACGqL,GACC,cAAC,MAAD,CAAKjO,GAAI,EAAT,SACE,eAAC,QAAD,CAAOgM,SAAO,EAACnK,KAAK,eAApB,UACE,cAAC,OAAD,CAAM1D,KAAK,SAASC,GAAI,IAD1B,iBAMJ,cAAC,UAAD,CAASC,GAAG,KAAK2B,GAAI,EAArB,SACG+C,IAEH,eAAC,OAAD,CAAMzE,WAAY,IAAK0B,GAAI,EAA3B,gBACMiJ,KAEN,cAAC,OAAD,CAAMjF,SAAU,EAAGhE,GAAI,EAAGyO,GAAI,EAA9B,SACGC,aAAiBR,KAEpB,cAAC,MAAD,CAAKpO,GAAI,EAAT,SACE,cAAC4G,GAAD,CACEC,UAAWA,EACXvB,UAAWL,EACXU,gBAAiB6F,EACjB5F,mBAAoBA,MAGxB,cAAC,OAAD,CAAM1B,SAAU,EAAGyI,SAAO,EAA1B,SACG2B,EAAavI,OAAS2I,EAAtB,UACMJ,EAAa1B,UAAU,EAAG8B,GADhC,UAEGJ,cCnEH,SAASO,GAAT,GAAgD,IAAvBxO,EAAsB,EAAtBA,IAAK8N,EAAiB,EAAjBA,cAEzCtH,EASExG,EATFwG,UACyBiI,EAQvBzO,EARFuJ,wBACqBmF,EAOnB1O,EAPFqJ,oBACoBmB,EAMlBxK,EANFsJ,mBACArB,EAKEjI,EALFiI,YACWoD,EAITrL,EAJFqI,UACAzD,EAGE5E,EAHF4E,OACA8D,EAEE1I,EAFF0I,KACA9F,EACE5C,EADF4C,MAGI0K,EAAmBC,KAAStF,GAG5B8D,EAFOC,KAASC,eAAaC,IAG/B7I,EACAD,EAEI8H,EAAoBI,cAApBJ,gBAEFC,EAAYN,GAAmBK,EAAiBlL,GAMhDuF,EAAqB0F,GAAsBC,EAAiBC,GAElE,OACE,cAAC,OAAD,CAAMK,OAAK,EAACC,KAAMlB,GAAkB,CAAEC,mBAAkB9B,SAAxD,SACE,cAAC,EAAD,CAAY5K,GAAI,EAAGC,GAAI,CAAC,EAAG,KAAM,GAAI8B,GAAI,CAAC,EAAG,KAAM,GAAnD,SACE,eAAC,UAAD,WACE,cAAC,MAAD,CAAK4C,MAAO,CAAC,EAAG,KAAM,EAAI,GAA1B,SACE,cAAC,GAAD,CACEkJ,IAAKN,GAAYoD,EACjBjL,aAAc6H,EAAW,WAAa,UACtC5H,GAAG,YAGP,eAAC,MAAD,CAAKhB,MAAO,CAAC,EAAG,KAAM,EAAI,GAA1B,UACGqL,GACC,cAAC,MAAD,CAAKjO,GAAI,EAAT,SACE,eAAC,QAAD,CAAOgM,SAAO,EAACnK,KAAK,eAApB,UACE,cAAC,OAAD,CAAM1D,KAAK,OAAOC,GAAI,IADxB,kBAMJ,cAAC,UAAD,CAASC,GAAG,KAAK2B,GAAI,EAArB,SACG+C,IAEH,cAAC,OAAD,CAAMzE,WAAY,IAAK0B,GAAI,EAA3B,SACG6O,IAEH,cAAC,MAAD,CAAK/O,GAAI,EAAT,SACE,cAAC4G,GAAD,CACEC,UAAWA,EACXvB,UAAWL,EACXU,gBAAiB6F,EACjB5F,mBAAoBA,MAGvB0C,GACC,cAAC,OAAD,CAAMpE,SAAU,EAAGyI,SAAO,EAA1B,SACGgB,EAAiB5H,OAASqG,EAA1B,UACMuB,EAAiBf,UAAU,EAAGR,GADpC,UAEGuB,cDQpBO,GAAQzN,aAAe,CACrB0N,eAAe,GAGjBD,GAAQzP,UAAY,CAClB4B,IAAK6I,GAAcrK,WACnBsP,cAAezP,IAAUkC,MCJ3BiO,GAAcpO,aAAe,CAC3B0N,eAAe,GAGjBU,GAAcpQ,UAAY,CACxB4B,IAAKmJ,GAAoB3K,WACzBsP,cAAezP,IAAUkC,M,YCnFZ,SAASoO,GAAT,GAAoC,IAAR3O,EAAO,EAAPA,IAEvC4C,EAQE5C,EARF4C,MACA8F,EAOE1I,EAPF0I,KACAD,EAMEzI,EANFyI,SACA/G,EAKE1B,EALF0B,KACAuG,EAIEjI,EAJFiI,YACArD,EAGE5E,EAHF4E,OACWyG,EAETrL,EAFFqI,UACA7B,EACExG,EADFwG,UAGI6G,EAAOrB,KAASC,eAAaC,IAE7BoB,EAAmBC,KAAStF,GAE5B8D,EAAuBsB,EACzBhK,EACAD,EAEI8H,EAAoBI,cAApBJ,gBAEFC,EAAYN,GAAmBK,EAAiBlL,GAMhDuF,EAAqB0F,GAAsBC,EAAiBC,GAEpDyD,GAAiBnG,GAAY,IAAnCoG,KAER,OACE,cAAC,OAAD,CACErD,OAAK,EACLC,KACE/J,IAAS0F,GAAYwD,GAAa,CAAElC,SAAUiC,GAAc,CAAEjC,SAHlE,SAME,cAAC,EAAD,CAAY5K,GAAI,EAAGC,GAAI,CAAC,EAAG,KAAM,GAAI8B,GAAI,CAAC,EAAG,KAAM,GAAnD,SACE,eAAC,UAAD,WACE,cAAC,MAAD,CAAK4C,MAAO,CAAC,EAAG,KAAM,EAAI,GAA1B,SACE,cAAC,GAAD,CAAUkJ,IAAKN,EAAU7H,aAAa,YAExC,eAAC,MAAD,CAAKf,MAAO,CAAC,EAAG,KAAM,EAAI,GAA1B,UACE,cAAC,MAAD,CAAK5C,GAAI,EAAG8N,IAAK,EAAjB,SACE,eAAC,QAAD,CAAO9B,SAAO,EAACnK,KAAK,eAAekM,EAAG,EAAtC,UACE,cAAC,OAAD,CAAM5P,KAAMiP,GAAOvL,GAAM1D,KAAMC,GAAI,IAClCgP,GAAOvL,GAAMgL,UAGlB,cAAC,UAAD,CAASxO,GAAG,KAAK2B,GAAI,EAArB,SACG+C,IAEFgM,GAAgB,cAAC,OAAD,CAAMzQ,WAAY,IAAlB,SAAwByQ,IAEzC,cAAC,MAAD,CAAKjP,GAAI,EAAT,SACE,cAAC4G,GAAD,CACEC,UAAWA,EACXvB,UAAWL,EACXU,gBAAiB6F,EACjB5F,mBAAoBA,MAGvB0C,GACC,cAAC,OAAD,CAAMpE,SAAU,EAAGyI,SAAO,EAA1B,SACGgB,EAAiB5H,OAASqG,EAA1B,UACMuB,EAAiBf,UAAU,EAAGR,GADpC,UAEGuB,cCtEL,SAASwB,GAAT,GAA2B,IAAR9O,EAAO,EAAPA,IAE9B4C,EAOE5C,EAPF4C,MACAmH,EAME/J,EANF+J,MACArB,EAKE1I,EALF0I,KACAT,EAIEjI,EAJFiI,YACWoD,EAGTrL,EAHFqI,UACA7B,EAEExG,EAFFwG,UACA5B,EACE5E,EADF4E,OAGIyI,EAAOrB,KAASC,eAAaC,IAE7BoB,EAAmBC,KAAStF,GAE5B8D,EAAuBsB,EACzBhK,EACAD,EAEI8H,EAAoBI,cAApBJ,gBAEFC,EAAYN,GAAmBK,EAAiBlL,GAMhDuF,EAAqB0F,GAAsBC,EAAiBC,GAElE,OACE,cAAC,OAAD,CAAMK,OAAK,EAACC,KAAMf,GAAY,CAAEhC,SAAhC,SACE,cAAC,EAAD,CAAY5K,GAAI,EAAGC,GAAI,CAAC,EAAG,KAAM,GAAI8B,GAAI,CAAC,EAAG,KAAM,GAAnD,SACE,eAAC,UAAD,WACE,cAAC,MAAD,CAAK4C,MAAO,CAAC,EAAG,KAAM,EAAI,GAA1B,SACE,cAAC,GAAD,CAAUkJ,IAAKN,MAEjB,eAAC,MAAD,CAAK5I,MAAO,CAAC,EAAG,KAAM,EAAI,GAA1B,UACE,cAAC,MAAD,CAAK5C,GAAI,EAAG8N,IAAK,EAAjB,SACE,eAAC,QAAD,CAAO9B,SAAO,EAACnK,KAAK,eAAekM,EAAG,EAAtC,UACE,cAAC,OAAD,CAAM5P,KAAK,cAAcC,GAAI,IAD/B,kBAKF,cAAC,UAAD,CAASC,GAAG,KAAK2B,GAAI,EAArB,SACGkK,IAEH,cAAC,OAAD,CAAM5L,WAAY,IAAlB,SAAwByE,IACxB,cAAC,MAAD,CAAKjD,GAAI,EAAT,SACE,cAAC4G,GAAD,CACEC,UAAWA,EACXvB,UAAWL,EACXU,gBAAiB6F,EACjB5F,mBAAoBA,MAGvB0C,GACC,cAAC,OAAD,CAAMpE,SAAU,EAAGyI,SAAO,EAA1B,SACGgB,EAAiB5H,OAASqG,EAA1B,UACMuB,EAAiBf,UAAU,EAAGR,GADpC,UAEGuB,c,yHDqBpBqB,GAAiBvQ,UAAY,CAC3B4B,IAAK2J,GAAgBnL,YCZvBsQ,GAAQ1Q,UAAY,CAClB4B,IAAK8J,GAActL,YC9ErB,I,GAAMuQ,IAAa,SAChBjI,GAAYsE,IADI,MAEhBrE,GAAoBqE,IAFJ,MAGhBpE,GAAS2F,IAHO,MAIhB1F,GAAO4G,IAJS,MAKhB3G,GAAasH,IALG,MAMhBrH,GAAQ2E,IANQ,MAOhB1E,GAAYuH,IAPI,MAQhBtH,GAASsH,IARO,MAShBrH,GAAOwH,IATS,IAYJ,SAASE,GAAT,GAAuC,IAARhP,EAAO,EAAPA,IACpC0B,EAAS1B,EAAT0B,KACFuN,EAAYF,GAAcrN,GAEhC,OAAO,cAACuN,EAAD,CAAWjP,IAAKA,EAAK8N,eAAa,I,yHAG3CkB,GAAoB5Q,UAAY,CAC9B4B,IAAK3B,IAAU8C,MAAM,CACnBO,KAAMrD,IAAUgI,MAAM,CACpBa,GACAJ,GACAC,GACAC,GACAC,GACAE,GACAC,GACAC,GACAC,KACC9I,aACFA,YCDL,IAAM0Q,IAAwB,SAC3BlI,IAAS,GADkB,MAE3BK,IAAS,GAFkB,MAG3BD,IAAY,GAHe,MAI3BH,IAAO,GAJoB,MAK3BH,IAAY,GALe,MAM3BC,IAAoB,GANO,MAO3BG,IAAa,GAPc,MAQ3BC,IAAQ,GARmB,MAS3BG,IAAO,GAToB,IAyBf,SAAS6H,GAAT,GAAuC,IAAD,IAAPnP,EAAO,EAAPA,IAE1C8I,EAiBE9I,EAjBF8I,OACAL,EAgBEzI,EAhBFyI,SACqB2B,EAenBpK,EAfF4M,oBACsBC,EAcpB7M,EAdFgI,qBACAW,EAaE3I,EAbF2I,MACAP,EAYEpI,EAZFoI,GACWiD,EAWTrL,EAXFqI,UACa6E,EAUXlN,EAVFuI,YACA3D,EASE5E,EATF4E,OACA8D,EAQE1I,EARF0I,KACA9F,EAOE5C,EAPF4C,MACAmH,EAME/J,EANF+J,MACAH,EAKE5J,EALF4J,SACAlI,EAIE1B,EAJF0B,KACyB+M,EAGvBzO,EAHFuJ,wBACqBmF,EAEnB1O,EAFFqJ,oBACoBmB,EAClBxK,EADFsJ,mBAGF,EAA4CgC,cAApCJ,EAAR,EAAQA,gBAAiBb,EAAzB,EAAyBA,eAEnBc,EAAYN,GAAmBK,EAAiBlL,GAMhDuF,EAAqB0F,GAAsBC,EAAiBC,GAE5DiE,GAAU,QACbtI,GAAYkD,GAAiB,CAC5BC,UAAS,OAAEtB,QAAF,IAAEA,OAAF,EAAEA,EAAOD,KAClBwB,aAAY,OAAEzB,QAAF,IAAEA,OAAF,EAAEA,EAAUC,KACxBN,QAJY,KAMbrB,GAAoBiD,GAAiB,CACpCC,UAAS,OAAEtB,QAAF,IAAEA,OAAF,EAAEA,EAAOD,KAClBwB,aAAcxB,KARF,KAUb1B,GAASmD,GAAc,CAAEC,oBAAmB1B,OAAM2B,oBAVrC,KAWbpD,GAAOqD,GAAY,CAAE5B,UAXR,KAYbxB,GAAaqD,GAAkB,CAAEC,mBAAkB9B,UAZtC,KAabvB,GAAQsD,GAAa,CAAE/B,UAbV,KAcbtB,GAAYwD,GAAa,CAAER,oBAAmB1B,UAdjC,KAebrB,GAASsD,GAAc,CAAEP,oBAAmB1B,UAf/B,KAgBbpB,GAAOoD,GAAY,CAAEhC,UAhBR,GAmBV2G,GAAa,QAChBvI,GADgB,OACJ2B,QADI,IACJA,OADI,EACJA,EAAU7F,OADN,KAEhBoE,GAAS6F,GAFO,KAGhB5F,GAHgB,aAGH6B,IAHG,KAIhB5B,GAAawH,GAJG,KAKhBtH,GALgB,OAKJqB,QALI,IAKJA,OALI,EAKJA,EAAUoG,MALN,KAMhBxH,GANgB,OAMPoB,QANO,IAMPA,OANO,EAMPA,EAAUoG,MANH,KAOhBvH,GAAO,eAPS,GAUbgI,EAAmB,CAAC,OAAQ,KAAM,QAOlC9L,EAhF0B,SAAC9B,EAAM6N,GACvC,OAAI7N,IAAS4F,GAAa,QAOtB5F,IAASoF,IAAcpF,IAASwF,KAAeqI,EAAkB,QAE9D,WAsEcC,CAA0B9N,IAAQ2J,GAEvD,OACE,cAAC,OAAD,CAAMG,OAAK,EAACC,KAAM2D,EAAW1N,GAA7B,SACE,eAAC,EAAD,CAAYvB,QAAQ,OAAOsP,EAAG,CAAC,EAAG,KAAM,GAAIjN,OAAO,OAAnD,UACE,cAAC,MAAD,CAAKqD,GAAI,CAAC,EAAG,KAAM,GAAnB,SACGwF,GAAYoD,EACX,eAAC,MAAD,CAAKpM,SAAS,WAAd,UACGX,IAASyF,IACR,cAAC,MAAD,CAAK9E,SAAS,WAAWkB,KAAK,OAA9B,SACE,cAAC,MAAD,CACEA,KAAM+L,EACN9L,aAAa,WACbC,GAAG,qBACHtD,QAAQ,OACRwD,eAAe,SACfD,WAAW,SACXE,GAAI,MAACgI,EAAW,KAAM,QAPxB,SASE,cAAC,OAAD,CAAM5N,KAAK,OAAOoO,OAAO,QAAQvO,MAAM,cAI7C,cAAC,aAAD,CACE8N,IAAKN,GAAYoD,EACjBhL,GAAG,cACHiI,IAAI,GACJnI,KAAM+L,EACN9L,aAAcA,OAIlB,cAAC,EAAD,CAAmCD,KAAM+L,MAG7C,eAAC,MAAD,WACE,cAAC,OAAD,CAAMzL,SAAU,EAAGhG,MAAM,UAAUgC,GAAI,EAAG1B,WAAW,MAArD,SACG+O,EAAaD,GAAOyC,SAAShD,KAAOO,GAAOvL,GAAMgL,OAEpD,cAAC,UAAD,CAASxO,GAAG,KAAK2B,GAAI,EAArB,SACGkK,GAASnH,IAEXlB,IAASqF,IACR,cAAC,OAAD,CAAMlD,SAAU,EAAhB,SAAoBwL,EAAc3N,KAGnCwN,GAAyBxN,GACxB,cAAC,MAAD,CAAK/B,GAAI,EAAT,SACE,cAAC0F,GAAD,CACExB,SAAU,EACVoB,UAAWL,EACXU,gBAAiB6F,EACjB5F,mBAAoBA,MAGtB,KAEHqE,GAAYlI,IAASyF,IACpB,eAAC,MAAD,CAAKhH,QAAQ,OAAOuD,WAAW,WAAW/D,GAAI,EAA9C,UACE,cAAC,OAAD,CAAM8C,MAAM,OAAOxE,GAAI,EAAG6H,WAAY,EAAG9H,KAAK,cAC9C,cAAC,OAAD,CAAM6F,SAAU,EAAhB,SAAoB+F,eCpMnB,SAAS+F,GAAT,GAAwC,IAAR3P,EAAO,EAAPA,IAC/BkK,EAAoDlK,EAA1D0I,KAAoBC,EAAsC3I,EAAtC2I,MAAkB0C,EAAoBrL,EAA/BqI,UAAqBzF,EAAU5C,EAAV4C,MAE1CqH,EAActB,EAApBD,KAER,OACE,cAAC,OAAD,CAAM8C,OAAK,EAACC,KAAMzB,GAAiB,CAAEC,YAAWC,iBAAhD,SACE,eAAC,EAAD,CAAYuF,EAAG,CAAC,EAAG,KAAM,GAAIjN,OAAO,OAApC,UACE,cAAC,OAAD,CACExE,KAAK,SACLqE,SAAS,WACTE,IAAK,CAAC,EAAG,KAAM,GACfqN,KAAM,CAAC,EAAG,KAAM,GAChB/L,SAAU,CAAC,EAAG,KAAM,GACpBhG,MAAM,YAEPwN,EACC,cAAC,aAAD,CACE9H,KAAMN,EACN0I,IAAKN,EACLK,IAAG,uCAAkC9I,GACrCgB,GAAG,OACH/D,GAAI,IAGN,cAACyD,EAAD,IAEF,cAAC,UAAD,CAASpF,GAAG,KAAK2B,GAAI,EAArB,SACG+C,SC7BI,SAASiN,GAAT,GAAgC,IAAR7P,EAAO,EAAPA,IAC7ByI,EAAoDzI,EAApDyI,SAAUE,EAA0C3I,EAA1C2I,MAAOP,EAAmCpI,EAAnCoI,GAAeiD,EAAoBrL,EAA/BqI,UAAqBzF,EAAU5C,EAAV4C,MAEnCuJ,EAAsC1D,EAA7C7F,MAA4BsH,EAAiBzB,EAAvBC,KAChBuB,EAActB,EAApBD,KAER,OACE,cAAC,OAAD,CAAM8C,OAAK,EAACC,KAAMzB,GAAiB,CAAEC,YAAWC,eAAc9B,OAA9D,SACE,eAAC,EAAD,CAAYqH,EAAG,CAAC,EAAG,KAAM,GAAIjN,OAAO,OAApC,UACE,cAAC,OAAD,CACExE,KAAK,OACLqE,SAAS,WACTE,IAAK,CAAC,EAAG,KAAM,GACfqN,KAAM,CAAC,EAAG,KAAM,GAChB/L,SAAU,CAAC,EAAG,KAAM,GACpBhG,MAAM,YAER,cAAC,QAAD,CACEsC,QAAQ,QACRoD,KAAMN,EACN0I,IAAKN,EACLK,IAAG,8BAAyB9I,GAC5BgB,GAAG,OACH/D,GAAI,IAEN,cAAC,UAAD,CAAS3B,GAAG,KAAK2B,GAAI,EAArB,SACG+C,IAEH,cAAC,OAAD,CAAMiB,SAAU,EAAhB,SAAoBsI,SC7Bb,SAAS2D,GAAT,GAA4B,IAAR9P,EAAO,EAAPA,IACdqL,EAA8CrL,EAAzDqI,UAAqBK,EAAoC1I,EAApC0I,KAAM9F,EAA8B5C,EAA9B4C,MAAOgH,EAAuB5J,EAAvB4J,SAE3BuC,EAFkDnM,EAAbyI,SAE5C7F,MAER,OACE,cAAC,OAAD,CAAM4I,OAAK,EAACC,KAAMhB,GAAa,CAAE/B,SAAjC,SACE,eAAC,EAAD,CAAYlG,OAAO,OAAnB,UACE,cAAC,QAAD,CACErC,QAAQ,QACRwL,IAAKN,EACLK,IAAG,0BAAqB9I,GACxBH,MAAO,EACPsN,oBAAoB,UACpBC,qBAAqB,UACrBxN,OAAQ,CAAC,IAAK,KAAM,KAAM,KAC1BJ,MAAO,CACLiK,UAAW,SAEbxM,GAAI,IAEN,eAAC,MAAD,CAAK4P,EAAG,CAAC,EAAG,KAAM,GAAlB,UACE,cAAC,UAAD,CAASvR,GAAG,KAAK2B,GAAI,EAArB,SACG+C,IAEH,cAAC,OAAD,CAAMiB,SAAU,EAAhB,SAAoBsI,IACnBvC,GACC,eAAC,MAAD,CACEzJ,QAAQ,OACRuD,WAAW,WACX/D,GAAI,EACJE,GAAI,CAAC,EAAG,KAAM,GACdgG,GAAI,CAAC,EAAG,KAAM,GALhB,UAOE,cAAC,OAAD,CAAMpD,MAAM,OAAOxE,GAAI,EAAG6H,WAAY,EAAG9H,KAAK,cAC9C,cAAC,OAAD,CAAM6F,SAAU,EAAhB,SAAoB+F,eH4KlCuF,GAAoB/Q,UAAY,CAC9B4B,IAAK3B,IAAUyF,UAAU,CACvBqF,GACAP,GACAJ,GACAd,GACAmB,GACAY,GACAI,GACAF,GACAG,KACCtL,YCrLLmR,GAAqBvR,UAAY,CAC/B4B,IAAK4I,GAA2BpK,YCHlCqR,GAAazR,UAAY,CACvB4B,IAAKwI,GAAmBhK,YCQ1BsR,GAAS1R,UAAY,CACnB4B,IAAKyJ,GAAejL,Y,oJChDtB,I,GAAMyR,GAAmB,CAAI,OAAJ,O,iDAAc3J,K,ukBAExB,SAAS4J,KACtB,OACE,cAAC,EAAD,CACEtP,MAAM,MACN5C,KAAK,gBACLmS,UAAU,YACVC,eAAgB,SAAAC,GAAW,OACzBA,EAAY1J,QAAO,SAAA2J,GAAC,OAAIL,GAAoBpJ,SAASyJ,EAAE1P,a,kzBCK/D,IAAM2P,GAAgB,KACpB,UAEE,KAAO,WAILC,GAAsB,MAAS,SAAAC,GAAC,OAAIC,SAAS,KAAO,QAASD,GAAI,OAEjEE,GAAwB,MAAS,SAAAF,GAAC,OAAIvL,GAAa,KAAO,QAASuL,OACnEG,GAAwB,MAAS,SAAAH,GAAC,OAAItL,GAAa,KAAO,QAASsL,OACnEI,GAAwB,MAAS,SAAAJ,GAAC,OAAIrL,GAAa,KAAO,QAASqL,OAEnEK,IAAwB,SAC3BxM,GAAO,SAAA5G,GAAK,OACX,KAAO6S,GAAe7S,GAAOqC,KAAI,SAAAkB,GAAI,gBAChCA,GADgC,IAEnCL,MAAM,QAAD,OAAUK,EAAKL,eAJI,MAM3B2D,GAAM,SAAA7G,GAAK,OACV,KAAO8S,GAAqB9S,GAAOqC,KAAI,SAAAkB,GAAI,gBACtCA,GADsC,IAEzCL,MAAM,OAAD,OAASK,EAAKL,eATK,MAW3B4D,GAAM,SAAA9G,GAAK,OAAI,KAAOkT,GAAuBlT,MAXlB,MAY3B+G,IAAM,SAAA/G,GAAK,OACV,KAAOmT,GAAuBnT,GAAOqC,KAAI,SAAAkB,GAAI,gBACxCA,GADwC,IAE3CL,MAAM,OAAD,OAASK,EAAKL,eAfK,MAiB3ByD,GAAO,SAAA3G,GAAK,OAAI,KAAOiT,GAAuBjT,MAjBnB,IAoBf,SAASqT,KACtB,IAAQ7F,EAAoBI,cAApBJ,gBAER,OACE,cAAC,EAAD,CACEtK,MAAM,QACN5C,KAAK,YACLmS,UAAWzL,GAAyBwG,GACpCkF,eAAgBU,GAAyB5F,GACzCnI,kBAAkB,K,6rBCxDT,SAASmN,KACtB,OACE,cAAC,EAAD,CACEtP,MAAM,gBACN5C,KAAK,YACLmS,UAAU,OACVC,eAAgB,SAAA1S,GAAK,OACnBA,EAAMqC,KAAI,SAAAkB,GAAI,gBACTA,GADS,IAEZL,MAAO2G,GAAmBtG,EAAKL,e,cCZnCoQ,GAAaC,aAGNC,GAAS,oBAAgBF,IAGzBG,GAAqB,iCAA6BH,IAGlDI,GAAe,2BAAuBJ,IAGtCK,GAAgB,4BAAwBL,ICD/CM,GAAY,CAChB,CACE1Q,MAAO,YACPC,MAAOqQ,IAET,CACEtQ,MAAO,eACPC,MAAOsQ,IAET,CACEvQ,MAAO,eACPC,MAAOuQ,KAKLG,GAAuB,CAC3B,CACE3Q,MAAO,YACPC,MAAOwQ,IAET,CACEzQ,MAAO,eACPC,MAAOsQ,IAET,CACEvQ,MAAO,eACPC,MAAOuQ,KAII,SAASI,GAAT,GAA2B,IAAXC,EAAU,EAAVA,OAC7B,OACE,cAAC,EAAD,CACE/T,MAAO+T,IAAWC,KAAOC,YAAcJ,GAAuBD,GAC9DvO,kBACE0O,IAAWC,KAAOC,YAAcN,GAAmBH,KAM3DM,GAAKpR,aAAe,CAClBqR,OAAQ,MAGVD,GAAKpT,UAAY,CACfqT,OAAQpT,IAAUiC,Q,wBCjDLsR,GALKC,aAClB,wBACA3O,G,s9BCCa,SAAS4O,KACtB,SAAgCF,KAAhC,GAAOG,EAAP,KAAiBC,EAAjB,KAKA,OACE,eAAC,MAAD,CAAK7R,QAAQ,OAAb,UACE,cAAC,KAAD,CAAYvC,QALI,kBAAMoU,EAAY9O,IAKAhD,SAAU6R,IAAa7O,EAAzD,SACE,cAAC,OAAD,CAAMlF,KAAK,WAEb,cAAC,KAAD,CACEJ,QARiB,kBAAMoU,EAAY7O,IASnCjD,SAAU6R,IAAa5O,EAFzB,SAIE,cAAC,OAAD,CAAMnF,KAAK","file":"package-search.71c0474a83c1745a8e01.chunk.js","sourcesContent":["import PropTypes from 'prop-types'\nimport { connectCurrentRefinements } from 'react-instantsearch-dom'\n\nimport { Icon, Text, TransparentButton } from '@redriverpress/system'\n\n// Extension of Algolia's ClearRefinements component\n// https://www.algolia.com/doc/api-reference/widgets/clear-refinements/react/\nfunction ClearRefinements({ items, refine }) {\n return (\n refine(items)}\n color='blue700'\n px={3}\n py={2}\n >\n \n \n Start Over\n \n \n )\n}\n\nClearRefinements.propTypes = {\n items: PropTypes.arrayOf(PropTypes.object).isRequired,\n refine: PropTypes.func.isRequired,\n}\n\nexport default connectCurrentRefinements(ClearRefinements)\n","import PropTypes from 'prop-types'\nimport {\n connectInfiniteHits,\n connectStateResults,\n} from 'react-instantsearch-dom'\n\nimport {\n Box,\n Button,\n Icon,\n Heading,\n LoadingSpinner,\n Text,\n} from '@redriverpress/system'\n\nimport ClearRefinements from './ClearRefinements'\n\n// Extension of Algolia's InfiniteHits component\n// https://www.algolia.com/doc/api-reference/widgets/infinite-hits/react/\nfunction InfiniteHits({\n emptyStateHeading,\n emptyStateMessage,\n hasMore,\n hitComponent,\n hits,\n hitsWrapper,\n isSearchStalled,\n refineNext,\n searching,\n searchResults,\n hitComponentProps,\n}) {\n const WrapperComponent = hitsWrapper\n const HitComponent = hitComponent\n\n const isLoading = isSearchStalled || searching\n\n if (searchResults?.nbHits === 0) {\n return (\n \n \n {emptyStateHeading}\n \n {emptyStateMessage}\n \n \n \n \n )\n }\n\n return (\n <>\n \n {hits.map(hit => (\n \n ))}\n \n {hasMore && (\n \n \n \n )}\n \n )\n}\n\nInfiniteHits.defaultProps = {\n emptyStateHeading: 'No results found',\n emptyStateMessage:\n 'We’re unable to find any results based on your search\\u00A0terms.',\n hitsWrapper: ({ children }) =>
{children}
, // eslint-disable-line react/prop-types\n}\n\nInfiniteHits.propTypes = {\n emptyStateHeading: PropTypes.string,\n emptyStateMessage: PropTypes.string,\n hitComponent: PropTypes.func.isRequired,\n hits: PropTypes.arrayOf(PropTypes.object),\n hitsWrapper: PropTypes.func,\n hasMore: PropTypes.bool,\n refineNext: PropTypes.func.isRequired,\n // eslint-disable-next-line react/forbid-prop-types\n hitComponentProps: PropTypes.object,\n}\n\nexport default connectInfiniteHits(connectStateResults(InfiniteHits))\n","import PropTypes from 'prop-types'\nimport { connectMenu } from 'react-instantsearch-dom'\n\nimport { SelectUI } from '@redriverpress/system'\n\n// Extension of Algolia's MenuSelect component\n// https://www.algolia.com/doc/api-reference/widgets/menu-select/react/\nfunction MenuSelect({ currentRefinement, icon, items, label, refine }) {\n return (\n refine(e.currentTarget.value)}\n >\n \n {items.map(item => (\n \n {item.label}\n \n ))}\n \n )\n}\n\nMenuSelect.defaultProps = {\n currentRefinement: null,\n}\n\nMenuSelect.propTypes = {\n currentRefinement: PropTypes.string,\n icon: PropTypes.string.isRequired,\n items: PropTypes.arrayOf(\n PropTypes.shape({\n label: PropTypes.string.isRequired,\n value: PropTypes.string.isRequired,\n })\n ).isRequired,\n label: PropTypes.string.isRequired,\n refine: PropTypes.func.isRequired,\n}\n\nexport default connectMenu(MenuSelect)\n","import PropTypes from 'prop-types'\nimport styled from 'styled-components'\nimport { connectSearchBox } from 'react-instantsearch-dom'\n\nimport { Input, TransparentButton, inputIconWidth } from '@redriverpress/system'\n\nconst SearchInput = styled(Input).attrs(props => ({\n type: 'search',\n icon: 'search',\n iconRight: props.withCancelButton && props.value ? 'times' : '',\n label: 'Search for…',\n placeholder: props.placeholder,\n}))`\n &[type='search']::-webkit-search-cancel-button,\n &[type='search']::-webkit-search-decoration {\n appearance: none;\n }\n`\n\n// Extension of Algolia's Search Box component\n// https://www.algolia.com/doc/api-reference/widgets/search-box/react/\nfunction SearchBox({\n currentRefinement,\n placeholder,\n refine,\n withCancelButton,\n}) {\n return (\n e.preventDefault()}\n style={{ position: 'relative' }}\n >\n refine(e.currentTarget.value)}\n value={currentRefinement}\n withCancelButton={withCancelButton}\n />\n {withCancelButton && currentRefinement && (\n refine('')}\n />\n )}\n \n )\n}\n\nSearchBox.defaultProps = {\n withCancelButton: false,\n}\n\nSearchBox.propTypes = {\n currentRefinement: PropTypes.string.isRequired,\n placeholder: PropTypes.string.isRequired,\n refine: PropTypes.func.isRequired,\n withCancelButton: PropTypes.bool,\n}\n\nexport default connectSearchBox(SearchBox)\n","import PropTypes from 'prop-types'\nimport { connectSortBy } from 'react-instantsearch-dom'\n\nimport { SelectUI } from '@redriverpress/system'\n\n// Extension of Algolia's SortBy component\n// https://www.algolia.com/doc/api-reference/widgets/sort-by/react/\nfunction SortBy({ items, currentRefinement, defaultRefinement, refine }) {\n return (\n refine(e.currentTarget.value)}\n >\n {items.map(item => (\n \n ))}\n \n )\n}\n\nSortBy.propTypes = {\n items: PropTypes.arrayOf(\n PropTypes.shape({\n label: PropTypes.string.isRequired,\n value: PropTypes.string.isRequired,\n })\n ).isRequired,\n currentRefinement: PropTypes.string.isRequired,\n defaultRefinement: PropTypes.string.isRequired,\n refine: PropTypes.func.isRequired,\n}\n\nexport default connectSortBy(SortBy)\n","export const resultImageSize = ['4.5rem', null, '6.75rem', '9rem']\n\n// All Materials view modes\nexport const listView = 'list'\nexport const compactView = 'compact'\n\n// Hit descriptions\nexport const descriptionCharLimitDefault = 90\nexport const descriptionCharLimitMd = 180\n","import PropTypes from 'prop-types'\n\nimport { Box, Icon } from '@redriverpress/system'\n\nimport { resultImageSize } from '../../constants/ui'\n\nexport default function ImagePlaceholder({ size, icon }) {\n return (\n \n \n \n )\n}\n\nImagePlaceholder.defaultProps = {\n size: resultImageSize,\n icon: 'images',\n}\n\nImagePlaceholder.propTypes = {\n icon: PropTypes.string,\n size: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.arrayOf(PropTypes.string),\n ]),\n}\n","import styled from 'styled-components'\n\nimport { Box } from '@redriverpress/system'\n\nconst HitWrapper = styled(Box).attrs(() => ({\n bg: 'white',\n borderRadius: 'rounded',\n position: 'relative',\n boxShadow: 2,\n}))`\n &:after {\n content: '';\n display: block;\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n box-shadow: ${props => props.theme.shadows[2]};\n opacity: 0;\n transition: opacity 0.3s ease-out;\n }\n\n &:hover:after {\n opacity: 1;\n }\n`\n\nHitWrapper.displayName = 'HitWrapper'\n\nexport default HitWrapper\n","import R from 'ramda'\n\nexport const none = 'none'\nexport const cefr = 'cefr'\nexport const clb = 'clb'\nexport const eld = 'eld'\nexport const nrs = 'nrs'\n\nexport const levelFiltersByPreference = {\n [cefr]: 'cefr_levels',\n [clb]: 'clb_levels',\n [eld]: 'eld_levels',\n [nrs]: 'nrs_levels',\n [none]: 'levels',\n}\n\n/**\n * Given an array produces a hash where the key is the element and the value is the index.\n */\nconst sortByElementPositionIn = levels => {\n return levels.reduce((accumulator, currentElement, index) => {\n return R.assoc(currentElement, index, accumulator)\n }, {})\n}\n\nexport const eslLevels = ['Pre Beg', 'Beg', 'Low Int', 'Int', 'High Int', 'Adv']\n\nexport const eslLevelSort = sortByElementPositionIn(eslLevels)\n\nexport const clbLevels = [\n '1',\n '2',\n '3',\n '4',\n '5',\n '6',\n '7',\n '8',\n '9',\n '10',\n '11',\n '12',\n]\n\nexport const cefrLevels = ['A0', 'A1', 'A2', 'B1', 'B2', 'C1', 'c2']\n\nexport const eldLevels = [\n 'Pre ELD',\n 'ELD 1',\n 'ELD 2',\n 'ELD 3',\n 'ELD 4',\n 'ELD 5',\n 'ELD 6',\n]\n\nexport const eldLevelSort = sortByElementPositionIn(eldLevels)\n\nexport const nrsLevels = ['1', '2', '3', '4', '5', '6', '6+']\n\nexport const nrsLevelSort = sortByElementPositionIn(nrsLevels)\n","import PropTypes from 'prop-types'\nimport R from 'ramda'\n\nimport { Box, Icon, Text } from '@redriverpress/system'\n\nimport {\n cefr,\n clb,\n eld,\n nrs,\n eslLevels as allEslLevels,\n none,\n} from '../../constants/levels'\n\nexport default function Levels({\n eslLevels,\n preferredLevels,\n preferredLevelType,\n ...props\n}) {\n // Levels should be shown as 'All levels' if the material has been tagged with every level, or no levels\n const shouldBeAllLevels =\n R.equals(eslLevels, allEslLevels) || eslLevels.length === 0\n\n // This code was adapted from the logic on the BE to correct display the levels on two situations:\n // - with Pre ELD\n // Pre ELD - ELD 3\n // - without Pre ELD\n // ELD 2-3\n const printEldLevelRange = eldLevels => {\n const firstItem = R.head(eldLevels)\n if (firstItem === 'Pre ELD') {\n return R.uniq([firstItem, R.last(eldLevels)]).join('\\u202f\\u2013\\u202f')\n }\n\n return R.uniq([\n firstItem.replace('ELD ', ''),\n R.last(eldLevels).replace('ELD ', ''),\n ]).join('\\u202f\\u2013\\u202f')\n }\n\n // Prints the first and last index of a set of levels.\n // If the first and last index of a set of levels are unique,\n // joins them with an en-dash (\\u2013) with a narrow non-breaking space (\\u202f) on each side of it.\n // If the first and last indexes are not unique, just prints that one index.\n // Adapted from Michael’s code!\n const printLevelRange = levels =>\n R.uniq([R.head(levels), R.last(levels)]).join('\\u202f\\u2013\\u202f')\n\n const printLevels = () => {\n // User has chosen Ellii levels as their preferred level system,\n // OR user's preferred levels are not available on this item\n if (preferredLevels === eslLevels || !preferredLevels.length) {\n return printLevelRange(eslLevels)\n }\n\n if (preferredLevelType === 'eld') {\n const firstItem = R.head(preferredLevels)\n\n return `\n ${firstItem === 'Pre ELD' ? '' : preferredLevelType.toUpperCase()}\n ${printEldLevelRange(preferredLevels)}\n (${printLevelRange(eslLevels)})\n `\n }\n\n return `\n ${preferredLevelType.toUpperCase()}\n ${printLevelRange(preferredLevels)}\n (${printLevelRange(eslLevels)})\n `\n }\n\n return (\n \n \n {shouldBeAllLevels ? 'All levels' : printLevels()}\n \n )\n}\n\nLevels.defaultProps = {\n eslLevels: [],\n preferredLevels: [],\n}\n\nLevels.propTypes = {\n eslLevels: PropTypes.arrayOf(PropTypes.string),\n preferredLevels: PropTypes.arrayOf(PropTypes.string),\n preferredLevelType: PropTypes.oneOf([cefr, clb, eld, nrs, none]).isRequired,\n}\n","/* eslint-disable import/prefer-default-export */\n\nexport const allAudiences = ['Young Learners', 'Teens', 'Adults']\n","import PropTypes from 'prop-types'\nimport R from 'ramda'\n\nimport { Box, Icon, Text } from '@redriverpress/system'\n\nimport Levels from './Levels'\nimport { cefr, clb, eld, nrs, none } from '../../constants/levels'\nimport { allAudiences } from '../../constants/audiences'\n\nexport default function LevelsAndAudiences({\n audiences,\n eslLevels,\n preferredLevels,\n preferredLevelType,\n}) {\n // Audiences should be shown as 'All audiences' if:\n // - the item has not been tagged with any audiences, OR\n // - it has been tagged with every (permitted) audience\n const shouldBeAllAudiences = R.any(R.equals(true), [\n !audiences.length,\n R.equals(audiences, allAudiences),\n ])\n\n // Don't display grade band audiences for now\n const filteredAudiences = audiences.filter(a => allAudiences.includes(a))\n\n return (\n \n \n \n \n \n {shouldBeAllAudiences ? 'All ages' : filteredAudiences.join(', ')}\n \n \n \n )\n}\n\nLevelsAndAudiences.defaultProps = {\n audiences: [],\n eslLevels: [],\n preferredLevels: [],\n}\n\nLevelsAndAudiences.propTypes = {\n audiences: PropTypes.arrayOf(PropTypes.string),\n eslLevels: PropTypes.arrayOf(PropTypes.string),\n preferredLevels: PropTypes.arrayOf(PropTypes.string),\n preferredLevelType: PropTypes.oneOf([cefr, clb, eld, nrs, none]).isRequired,\n}\n","export const flashcard = 'flashcard'\nexport const flashcardCategory = 'flashcard_category'\nexport const lesson = 'lesson'\nexport const post = 'post'\nexport const collection = 'list'\nexport const video = 'video'\nexport const studyPack = 'pack'\nexport const course = 'course'\nexport const poll = 'poll'\n\nexport const materialTypeLabels = {\n [flashcard]: 'Flashcards',\n [flashcardCategory]: 'Flashcard Categories',\n [lesson]: 'Lessons & Resources',\n [post]: 'Blog Posts',\n [collection]: 'Collections',\n [video]: 'Videos',\n [studyPack]: 'Study Packs',\n [course]: 'Courses',\n [poll]: 'Polls',\n}\n","/* eslint-disable camelcase */\nimport PropTypes from 'prop-types'\n\nimport { eslLevels } from './levels'\n\nconst audiences = PropTypes.arrayOf(\n PropTypes.oneOf(['Young Learners', 'Teens', 'Adults'])\n)\n\nconst cefrLevels = PropTypes.arrayOf(\n PropTypes.oneOf(['A0', 'A1', 'A2', 'B1', 'B2', 'C1', 'C2'])\n)\n\nconst clblevels = PropTypes.arrayOf(\n PropTypes.oneOf([\n '1',\n '2',\n '3',\n '4',\n '5',\n '6',\n '7',\n '8',\n '9',\n '10',\n '11',\n '12',\n ])\n)\n\nconst eldLevels = PropTypes.arrayOf(\n PropTypes.oneOf([\n 'Pre ELD',\n 'ELD 1',\n 'ELD 2',\n 'ELD 3',\n 'ELD 4',\n 'ELD 5',\n 'ELD 6',\n ])\n)\n\nconst levels = PropTypes.arrayOf(PropTypes.oneOf(eslLevels))\n\nexport const lessonPropShape = PropTypes.shape({\n audiences: audiences.isRequired,\n cefr_levels: cefrLevels,\n clb_levels: clblevels,\n eld_levels: eldLevels,\n lesson_section_id: PropTypes.number.isRequired,\n lesson_section_title: PropTypes.string.isRequired,\n description: PropTypes.string,\n has_audio: PropTypes.bool,\n has_video: PropTypes.bool,\n id: PropTypes.number.isRequired,\n image_url: PropTypes.string.isRequired,\n is_featured: PropTypes.bool,\n is_resource: PropTypes.bool,\n levels,\n title: PropTypes.string.isRequired,\n})\n\nexport const flashcardPropShape = PropTypes.shape({\n audiences,\n category: PropTypes.shape({\n id: PropTypes.number.isRequired,\n title: PropTypes.string.isRequired,\n slug: PropTypes.string.isRequired,\n }).isRequired,\n cefr_levels: cefrLevels,\n clb_levels: clblevels,\n eld_levels: eldLevels,\n genre: PropTypes.shape({\n id: PropTypes.number.isRequired,\n title: PropTypes.string.isRequired,\n slug: PropTypes.string.isRequired,\n }).isRequired,\n levels,\n id: PropTypes.number.isRequired,\n image_url: PropTypes.string.isRequired,\n title: PropTypes.string.isRequired,\n})\n\nexport const flashcardCategoryPropShape = PropTypes.shape({\n audiences,\n cefr_levels: cefrLevels,\n clb_levels: clblevels,\n eld_levels: eldLevels,\n genre: PropTypes.shape({\n id: PropTypes.number.isRequired,\n title: PropTypes.string.isRequired,\n slug: PropTypes.string.isRequired,\n }).isRequired,\n levels,\n id: PropTypes.number.isRequired,\n image_url: PropTypes.string,\n slug: PropTypes.string.isRequired,\n title: PropTypes.string.isRequired,\n})\n\nexport const postPropShape = PropTypes.shape({\n audiences,\n author: PropTypes.string.isRequired,\n categories: PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.number.isRequired,\n title: PropTypes.string.isRequired,\n slug: PropTypes.string.isRequired,\n })\n ).isRequired,\n category_titles: PropTypes.arrayOf(PropTypes.string).isRequired,\n cefr_levels: cefrLevels,\n clb_levels: clblevels,\n eld_levels: eldLevels,\n created_at: PropTypes.string.isRequired,\n excerpt: PropTypes.string,\n levels,\n id: PropTypes.number.isRequired,\n image_url: PropTypes.string.isRequired,\n slug: PropTypes.string.isRequired,\n title: PropTypes.string.isRequired,\n})\n\nexport const collectionPropShape = PropTypes.shape({\n audiences,\n id: PropTypes.number.isRequired,\n cefr_levels: cefrLevels,\n clb_levels: clblevels,\n eld_levels: eldLevels,\n description: PropTypes.string,\n levels,\n list_category_id: PropTypes.number.isRequired,\n list_category_title: PropTypes.string.isRequired,\n list_category_slug: PropTypes.string.isRequired,\n list_category_image_url: PropTypes.string.isRequired,\n image_url: PropTypes.string, // some collection may not have an image_url but will always have a list_category_image_url\n slug: PropTypes.string.isRequired,\n title: PropTypes.string.isRequired,\n tag: PropTypes.string,\n})\n\nexport const videoPropShape = PropTypes.shape({\n audiences,\n id: PropTypes.number.isRequired,\n title: PropTypes.string.isRequired,\n slug: PropTypes.string.isRequired,\n cefr_levels: cefrLevels,\n clb_levels: clblevels,\n eld_levels: eldLevels,\n description: PropTypes.string,\n levels,\n image_url: PropTypes.string, // some collection may not have an image_url but will always have a list_category_image_url\n category: PropTypes.shape({\n id: PropTypes.number.isRequired,\n title: PropTypes.string.isRequired,\n slug: PropTypes.string.isRequired,\n }).isRequired,\n genre: PropTypes.shape({\n id: PropTypes.number.isRequired,\n title: PropTypes.string.isRequired,\n slug: PropTypes.string.isRequired,\n }).isRequired,\n tag_list: PropTypes.arrayOf([PropTypes.string]),\n})\n\nexport const coursePropShape = PropTypes.shape({\n id: PropTypes.number.isRequired,\n title: PropTypes.string.isRequired,\n slug: PropTypes.string.isRequired,\n subtitle: PropTypes.string,\n description: PropTypes.string,\n levels,\n image_url: PropTypes.string,\n audiences,\n cefr_levels: cefrLevels,\n clb_levels: clblevels,\n eld_levels: eldLevels,\n category: PropTypes.shape({\n id: PropTypes.number.isRequired,\n title: PropTypes.string.isRequired,\n slug: PropTypes.string.isRequired,\n }).isRequired,\n tag_list: PropTypes.arrayOf([PropTypes.string]),\n})\n\nexport const studyPackPropShape = coursePropShape\n\nexport const pollPropShape = PropTypes.shape({\n id: PropTypes.number.isRequired,\n title: PropTypes.string.isRequired,\n topic: PropTypes.string.isRequired,\n slug: PropTypes.string.isRequired,\n description: PropTypes.string,\n image_url: PropTypes.string,\n audiences,\n levels,\n cefr_levels: cefrLevels,\n clb_levels: clblevels,\n eld_levels: eldLevels,\n tag_list: PropTypes.arrayOf([PropTypes.string]),\n})\n","export function getFlashcardLink({ genreSlug, categorySlug, id }) {\n return `/media/flashcards/${genreSlug}/${categorySlug}${\n id ? `?flashcard=${id}` : ''\n }`\n}\n\nexport function getLessonLink({ lessonSectionSlug, slug, isUserLoggedIn }) {\n if (isUserLoggedIn) {\n return `/lesson/${slug}`\n }\n\n return `/lessons/${lessonSectionSlug}/${slug}`\n}\n\nexport function getPostLink({ slug }) {\n return `/blog/${slug}`\n}\n\nexport function getCollectionLink({ listCategorySlug, slug }) {\n return `/collections/${listCategorySlug}/${slug}`\n}\n\nexport function getVideoLink({ slug }) {\n return `/video/${slug}`\n}\n\nexport function getPollLink({ slug }) {\n return `/gather/ellii-polls/${slug}`\n}\n\nexport function getCourseLink({ slug }) {\n return `/packs/${slug}`\n}\n\nexport function getStudyPack({ slug }) {\n return `/packs/${slug}`\n}\n","import { cefr, clb, eld, nrs } from '../constants/levels'\n\nconst getHitLevelsByType = (type, hit) => {\n const {\n cefr_levels: cefrLevels,\n clb_levels: clbLevels,\n eld_levels: eldLevels,\n nrs_levels: nrsLevels,\n levels,\n } = hit\n\n if (type === eld && eldLevels?.length) {\n return eldLevels\n }\n\n if (type === clb && clbLevels?.length) {\n return clbLevels\n }\n\n if (type === cefr && cefrLevels?.length) {\n return cefrLevels\n }\n\n if (type === nrs && nrsLevels?.length) {\n return nrsLevels\n }\n\n return levels\n}\n\nexport default getHitLevelsByType\n","import { none } from '../constants/levels'\n\nconst getPreferredLevelType = (levelPreference, hitLevels) => {\n if (levelPreference !== none && !hitLevels.length) {\n return none\n }\n return levelPreference\n}\n\nexport default getPreferredLevelType\n","import PropTypes from 'prop-types'\n\nimport {\n Box,\n Columns,\n Col,\n Icon,\n Heading,\n Image,\n Label,\n Link,\n Text,\n} from '@redriverpress/system'\n\nimport getInitialState from 'Common/utils/getInitialState'\n\nimport ImagePlaceholder from './ImagePlaceholder'\nimport HitWrapper from './HitWrapper'\nimport LevelsAndAudiences from './LevelsAndAudiences'\nimport { flashcard, flashcardCategory } from '../../constants/materialTypes'\nimport {\n flashcardPropShape,\n flashcardCategoryPropShape,\n} from '../../constants/propShapes'\nimport { getFlashcardLink } from '../../utils/hitLinks'\nimport { resultImageSize } from '../../constants/ui'\nimport getHitLevelsByType from '../../utils/getHitLevelsByType'\nimport getPreferredLevelType from '../../utils/getPreferredLevelType'\n\nexport default function GenericFlashcardHit({ hit }) {\n const {\n audiences,\n category, // flashcards only\n genre, // flashcards & flashcard categories\n image_url: imageUrl,\n id, // flashcards & flashcard categories\n levels,\n slug, // flashcard categories\n title,\n type,\n } = hit\n\n const { levelPreference } = getInitialState()\n\n const hitLevels = getHitLevelsByType(levelPreference, hit)\n\n // If the user's level preference isn't Ellii's,\n // but there are no levels on this hit for their level type,\n // use Ellii's levels.\n // Otherwise, use their level preference.\n const preferredLevelType = getPreferredLevelType(levelPreference, hitLevels)\n\n const link =\n type === flashcard\n ? getFlashcardLink({\n genreSlug: genre.slug,\n categorySlug: category.slug,\n id,\n })\n : getFlashcardLink({ genreSlug: genre.slug, categorySlug: slug })\n\n return (\n \n \n \n \n \n {imageUrl ? (\n \n ) : (\n \n )}\n \n \n \n \n \n \n \n {title}\n \n {category && category.title}\n \n \n \n \n \n \n \n )\n}\n\nGenericFlashcardHit.propTypes = {\n hit: PropTypes.oneOfType([flashcardPropShape, flashcardCategoryPropShape])\n .isRequired,\n}\n","import PropTypes from 'prop-types'\nimport useMedia from 'use-media'\n\nimport {\n Box,\n Columns,\n Col,\n Icon,\n Heading,\n Image,\n Label,\n Link,\n mediaQueries,\n Text,\n} from '@redriverpress/system'\n\nimport ImagePlaceholder from './ImagePlaceholder'\nimport HitWrapper from './HitWrapper'\nimport {\n flashcardPropShape,\n flashcardCategoryPropShape,\n} from '../../constants/propShapes'\n\nimport { getVideoLink } from '../../utils/hitLinks'\nimport {\n resultImageSize,\n descriptionCharLimitDefault,\n descriptionCharLimitMd,\n} from '../../constants/ui'\n\nexport default function GenericVideoHit({ hit }) {\n const {\n image_url: imageUrl,\n slug,\n title,\n subtitle,\n description,\n category,\n } = hit\n\n const isMd = useMedia(mediaQueries.md)\n\n const descriptionCharLimit = isMd\n ? descriptionCharLimitMd\n : descriptionCharLimitDefault\n\n const { title: categoryTitle } = category\n return (\n \n \n \n \n \n {imageUrl ? (\n <>\n \n \n \n \n \n \n \n ) : (\n \n )}\n \n \n \n \n \n \n \n {title}\n \n {categoryTitle}\n {subtitle && (\n \n \n {subtitle}\n \n )}\n {description && (\n \n {description.length > descriptionCharLimit\n ? `${description.substring(0, descriptionCharLimit)}…`\n : description}\n \n )}\n \n \n \n \n )\n}\n\nGenericVideoHit.propTypes = {\n hit: PropTypes.oneOfType([flashcardPropShape, flashcardCategoryPropShape])\n .isRequired,\n}\n","import styled from 'styled-components'\n\nimport { CoverImage } from '@redriverpress/system'\n\nimport { resultImageSize } from '../../constants/ui'\n\nconst HitImage = styled(CoverImage).attrs(props => ({\n src: props.src,\n alt: '',\n size: resultImageSize,\n mx: [undefined, null, 'auto'],\n mb: [3, null, 0],\n}))``\n\nHitImage.displayName = 'HitImage'\n\nexport default HitImage\n","// Mirrors /app/assets/stylesheets/old-style/base/typography.css.scss\n// and /app/views/lessons/_lesson_summary.html.slim\n\nimport {\n collection,\n lesson,\n post,\n flashcard,\n flashcardCategory,\n video,\n course,\n studyPack,\n poll,\n} from './materialTypes'\n\nexport default {\n [lesson]: {\n icon: 'file-alt',\n text: 'Lesson',\n },\n resource: {\n icon: 'wrench',\n text: 'Resource',\n },\n [post]: {\n icon: 'pencil',\n text: 'Blog Post',\n },\n [flashcard]: {\n icon: 'bolt',\n text: 'Flashcard',\n },\n [flashcardCategory]: {\n icon: 'images',\n text: 'Flashcard Category',\n },\n featured: {\n icon: 'bookmark',\n text: 'Featured',\n },\n new_lesson: {\n icon: 'sparkles',\n text: 'New',\n },\n sample_label: {\n icon: 'unlock-alt',\n text: 'Sample',\n },\n free: {\n icon: 'unlock-alt',\n text: 'Free',\n },\n revised: {\n icon: 'redo',\n text: 'Revised',\n },\n coming_soon: {\n icon: 'clock',\n text: 'Coming Soon',\n },\n now_with_video: {\n icon: 'video',\n text: 'Now with video',\n },\n [collection]: {\n icon: 'list',\n text: 'Collection',\n },\n [video]: {\n icon: 'list',\n text: 'Video',\n },\n [course]: {\n icon: 'user-graduate',\n text: 'Course',\n },\n [studyPack]: {\n icon: 'backpack',\n text: 'Study Pack',\n },\n [poll]: {\n icon: 'poll-people',\n text: 'Gather',\n },\n}\n","import removeMd from 'remove-markdown'\nimport useMedia from 'use-media'\n\nimport {\n Box,\n Columns,\n Col,\n Icon,\n Heading,\n Label,\n Link,\n Text,\n mediaQueries,\n} from '@redriverpress/system'\n\nimport getInitialState from 'Common/utils/getInitialState'\n\nimport HitWrapper from './HitWrapper'\nimport HitImage from './HitImage'\nimport LevelsAndAudiences from './LevelsAndAudiences'\nimport labels from '../../constants/labels'\nimport {\n descriptionCharLimitDefault,\n descriptionCharLimitMd,\n} from '../../constants/ui'\nimport { getLessonLink } from '../../utils/hitLinks'\nimport { lessonPropShape } from '../../constants/propShapes'\nimport getHitLevelsByType from '../../utils/getHitLevelsByType'\nimport getPreferredLevelType from '../../utils/getPreferredLevelType'\n\nexport default function LessonHit({ hit }) {\n const {\n audiences,\n lesson_section_slug: lessonSectionSlug,\n lesson_section_title: lessonSectionTitle,\n description,\n has_audio: hasAudio,\n has_video: hasVideo,\n image_url: imageUrl,\n labels: labelsList,\n levels,\n slug,\n is_resource: isResource,\n teacher_discretion: teacherDiscretion,\n title,\n } = hit\n\n const isMd = useMedia(mediaQueries.md)\n\n const cleanDescription = removeMd(description)\n\n const descriptionCharLimit = isMd\n ? descriptionCharLimitMd\n : descriptionCharLimitDefault\n\n const { levelPreference, isUserLoggedIn, isUserFree } = getInitialState()\n\n const hitLevels = getHitLevelsByType(levelPreference, hit)\n\n // If the user's level preference isn't Ellii's,\n // but there are no levels on this hit for their level type,\n // use Ellii's levels.\n // Otherwise, use their level preference.\n const preferredLevelType = getPreferredLevelType(levelPreference, hitLevels)\n\n const lessonLabels = isUserFree\n ? labelsList\n : labelsList.filter(l => l !== 'free' && l !== 'sample_label')\n\n return (\n \n \n \n \n \n \n \n \n \n {lessonLabels.map(label => (\n \n ))}\n {hasAudio && (\n \n )}\n {hasVideo && (\n \n )}\n {teacherDiscretion && (\n \n )}\n \n \n {title}\n \n {lessonSectionTitle}\n \n \n \n {description && (\n \n {cleanDescription.length > descriptionCharLimit\n ? `${cleanDescription.substring(0, descriptionCharLimit)}…`\n : cleanDescription}\n \n )}\n \n \n \n \n )\n}\n\nLessonHit.propTypes = {\n hit: lessonPropShape.isRequired,\n}\n","import DOMPurify from 'dompurify'\nimport PropTypes from 'prop-types'\nimport useMedia from 'use-media'\n\nimport {\n Box,\n Columns,\n Col,\n Icon,\n Heading,\n Label,\n Link,\n Text,\n mediaQueries,\n} from '@redriverpress/system'\n\nimport getInitialState from 'Common/utils/getInitialState'\nimport { getFormattedDate } from 'Common/utils/datetime'\n\nimport HitWrapper from './HitWrapper'\nimport HitImage from './HitImage'\nimport LevelsAndAudiences from './LevelsAndAudiences'\nimport {\n descriptionCharLimitDefault,\n descriptionCharLimitMd,\n} from '../../constants/ui'\nimport { getPostLink } from '../../utils/hitLinks'\nimport { postPropShape } from '../../constants/propShapes'\nimport getHitLevelsByType from '../../utils/getHitLevelsByType'\nimport getPreferredLevelType from '../../utils/getPreferredLevelType'\n\nexport default function PostHit({ hit, showTypeLabel }) {\n const {\n author,\n audiences,\n excerpt,\n image_url: imageUrl,\n levels,\n published_at: publishedAt,\n slug,\n title,\n } = hit\n\n const isMd = useMedia(mediaQueries.md)\n\n const cleanExcerpt = DOMPurify.sanitize(excerpt, { ALLOWED_TAGS: [] })\n\n const excerptCharLimit = isMd\n ? descriptionCharLimitMd\n : descriptionCharLimitDefault\n\n const { levelPreference } = getInitialState()\n\n const hitLevels = getHitLevelsByType(levelPreference, hit)\n\n // If the user's level preference isn't Ellii's,\n // but there are no levels on this hit for their level type,\n // use Ellii's levels.\n // Otherwise, use their level preference.\n const preferredLevelType = getPreferredLevelType(levelPreference, hitLevels)\n\n return (\n \n \n \n \n \n \n \n {showTypeLabel && (\n \n \n \n )}\n \n {title}\n \n \n by {author}\n \n \n {getFormattedDate(publishedAt)}\n \n \n \n \n \n {cleanExcerpt.length > excerptCharLimit\n ? `${cleanExcerpt.substring(0, excerptCharLimit)}…`\n : cleanExcerpt}\n \n \n \n \n \n )\n}\n\nPostHit.defaultProps = {\n showTypeLabel: false,\n}\n\nPostHit.propTypes = {\n hit: postPropShape.isRequired,\n showTypeLabel: PropTypes.bool,\n}\n","import removeMd from 'remove-markdown'\nimport PropTypes from 'prop-types'\nimport useMedia from 'use-media'\n\nimport {\n Box,\n Columns,\n Col,\n Icon,\n Heading,\n Label,\n Link,\n Text,\n mediaQueries,\n} from '@redriverpress/system'\n\nimport getInitialState from 'Common/utils/getInitialState'\n\nimport HitWrapper from './HitWrapper'\nimport LevelsAndAudiences from './LevelsAndAudiences'\nimport {\n descriptionCharLimitDefault,\n descriptionCharLimitMd,\n} from '../../constants/ui'\nimport { getCollectionLink } from '../../utils/hitLinks'\nimport { collectionPropShape } from '../../constants/propShapes'\nimport HitImage from './HitImage'\nimport getHitLevelsByType from '../../utils/getHitLevelsByType'\nimport getPreferredLevelType from '../../utils/getPreferredLevelType'\n\nexport default function CollectionHit({ hit, showTypeLabel }) {\n const {\n audiences,\n list_category_image_url: listCategoryImageUrl,\n list_category_title: listCategoryTitle,\n list_category_slug: listCategorySlug,\n description,\n image_url: imageUrl,\n levels,\n slug,\n title,\n } = hit\n\n const cleanDescription = removeMd(description)\n const isMd = useMedia(mediaQueries.md)\n\n const descriptionCharLimit = isMd\n ? descriptionCharLimitMd\n : descriptionCharLimitDefault\n\n const { levelPreference } = getInitialState()\n\n const hitLevels = getHitLevelsByType(levelPreference, hit)\n\n // If the user's level preference isn't Ellii's,\n // but there are no levels on this hit for their level type,\n // use Ellii's levels.\n // Otherwise, use their level preference.\n const preferredLevelType = getPreferredLevelType(levelPreference, hitLevels)\n\n return (\n \n \n \n \n \n \n \n {showTypeLabel && (\n \n \n \n )}\n \n {title}\n \n \n {listCategoryTitle}\n \n \n \n \n {description && (\n \n {cleanDescription.length > descriptionCharLimit\n ? `${cleanDescription.substring(0, descriptionCharLimit)}…`\n : cleanDescription}\n \n )}\n \n \n \n \n )\n}\n\nCollectionHit.defaultProps = {\n showTypeLabel: false,\n}\n\nCollectionHit.propTypes = {\n hit: collectionPropShape.isRequired,\n showTypeLabel: PropTypes.bool,\n}\n","import removeMd from 'remove-markdown'\nimport useMedia from 'use-media'\n\nimport {\n Box,\n Columns,\n Col,\n Icon,\n Heading,\n Label,\n Link,\n Text,\n mediaQueries,\n} from '@redriverpress/system'\n\nimport getInitialState from 'Common/utils/getInitialState'\nimport { studyPack } from 'Packages/search/constants/materialTypes'\n\nimport HitWrapper from './HitWrapper'\nimport HitImage from './HitImage'\nimport LevelsAndAudiences from './LevelsAndAudiences'\nimport labels from '../../constants/labels'\nimport {\n descriptionCharLimitDefault,\n descriptionCharLimitMd,\n} from '../../constants/ui'\nimport { getCourseLink, getStudyPack } from '../../utils/hitLinks'\nimport { coursePropShape } from '../../constants/propShapes'\nimport getHitLevelsByType from '../../utils/getHitLevelsByType'\nimport getPreferredLevelType from '../../utils/getPreferredLevelType'\n\nexport default function GenericCourseHit({ hit }) {\n const {\n title,\n slug,\n category,\n type,\n description,\n levels,\n image_url: imageUrl,\n audiences,\n } = hit\n\n const isMd = useMedia(mediaQueries.md)\n\n const cleanDescription = removeMd(description)\n\n const descriptionCharLimit = isMd\n ? descriptionCharLimitMd\n : descriptionCharLimitDefault\n\n const { levelPreference } = getInitialState()\n\n const hitLevels = getHitLevelsByType(levelPreference, hit)\n\n // If the user's level preference isn't Ellii's,\n // but there are no levels on this hit for their level type,\n // use Ellii's levels.\n // Otherwise, use their level preference.\n const preferredLevelType = getPreferredLevelType(levelPreference, hitLevels)\n\n const { name: categoryName } = category || {}\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n {title}\n \n {categoryName && {categoryName}}\n\n \n \n \n {description && (\n \n {cleanDescription.length > descriptionCharLimit\n ? `${cleanDescription.substring(0, descriptionCharLimit)}…`\n : cleanDescription}\n \n )}\n \n \n \n \n )\n}\n\nGenericCourseHit.propTypes = {\n hit: coursePropShape.isRequired,\n}\n","import removeMd from 'remove-markdown'\nimport useMedia from 'use-media'\n\nimport {\n Box,\n Columns,\n Col,\n Icon,\n Heading,\n Label,\n Link,\n Text,\n mediaQueries,\n} from '@redriverpress/system'\n\nimport getInitialState from 'Common/utils/getInitialState'\n\nimport HitWrapper from './HitWrapper'\nimport HitImage from './HitImage'\nimport LevelsAndAudiences from './LevelsAndAudiences'\nimport {\n descriptionCharLimitDefault,\n descriptionCharLimitMd,\n} from '../../constants/ui'\nimport { getPollLink } from '../../utils/hitLinks'\nimport { pollPropShape } from '../../constants/propShapes'\nimport getHitLevelsByType from '../../utils/getHitLevelsByType'\nimport getPreferredLevelType from '../../utils/getPreferredLevelType'\n\nexport default function PollHit({ hit }) {\n const {\n title,\n topic,\n slug,\n description,\n image_url: imageUrl,\n audiences,\n levels,\n } = hit\n\n const isMd = useMedia(mediaQueries.md)\n\n const cleanDescription = removeMd(description)\n\n const descriptionCharLimit = isMd\n ? descriptionCharLimitMd\n : descriptionCharLimitDefault\n\n const { levelPreference } = getInitialState()\n\n const hitLevels = getHitLevelsByType(levelPreference, hit)\n\n // If the user's level preference isn't Ellii's,\n // but there are no levels on this hit for their level type,\n // use Ellii's levels.\n // Otherwise, use their level preference.\n const preferredLevelType = getPreferredLevelType(levelPreference, hitLevels)\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n {topic}\n \n {title}\n \n \n \n {description && (\n \n {cleanDescription.length > descriptionCharLimit\n ? `${cleanDescription.substring(0, descriptionCharLimit)}…`\n : cleanDescription}\n \n )}\n \n \n \n \n )\n}\n\nPollHit.propTypes = {\n hit: pollPropShape.isRequired,\n}\n","import PropTypes from 'prop-types'\n\nimport GenericFlashcardHit from './GenericFlashcardHit'\nimport GenericVideoHit from './GenericVideoHit'\nimport LessonHit from './LessonHit'\nimport PostHit from './PostHit'\nimport CollectionHit from './CollectionHit'\nimport {\n collection,\n course,\n flashcard,\n flashcardCategory,\n lesson,\n poll,\n post,\n studyPack,\n video,\n} from '../../constants/materialTypes'\nimport GenericCourseHit from './GenericCourseHit'\nimport PollHit from './PollHit'\n\nconst hitComponents = {\n [flashcard]: GenericFlashcardHit,\n [flashcardCategory]: GenericFlashcardHit,\n [lesson]: LessonHit,\n [post]: PostHit,\n [collection]: CollectionHit,\n [video]: GenericVideoHit,\n [studyPack]: GenericCourseHit,\n [course]: GenericCourseHit,\n [poll]: PollHit,\n}\n\nexport default function AllMaterialsListHit({ hit }) {\n const { type } = hit\n const Component = hitComponents[type]\n\n return \n}\n\nAllMaterialsListHit.propTypes = {\n hit: PropTypes.shape({\n type: PropTypes.oneOf([\n collection,\n flashcard,\n flashcardCategory,\n lesson,\n post,\n video,\n studyPack,\n course,\n poll,\n ]).isRequired,\n }).isRequired,\n}\n","import PropTypes from 'prop-types'\n\nimport {\n Box,\n CoverImage,\n Icon,\n Heading,\n Link,\n Text,\n} from '@redriverpress/system'\n\nimport getInitialState from 'Common/utils/getInitialState'\n\nimport FlashcardCategoryImagePlaceholder from './ImagePlaceholder'\nimport HitWrapper from './HitWrapper'\nimport Levels from './Levels'\nimport labels from '../../constants/labels'\nimport {\n lesson,\n post,\n flashcard,\n flashcardCategory,\n collection,\n video,\n studyPack,\n course,\n poll,\n} from '../../constants/materialTypes'\nimport {\n collectionPropShape,\n flashcardCategoryPropShape,\n flashcardPropShape,\n lessonPropShape,\n postPropShape,\n videoPropShape,\n studyPackPropShape,\n coursePropShape,\n pollPropShape,\n} from '../../constants/propShapes'\nimport {\n getCollectionLink,\n getCourseLink,\n getFlashcardLink,\n getLessonLink,\n getPollLink,\n getPostLink,\n getStudyPack,\n getVideoLink,\n} from '../../utils/hitLinks'\nimport getHitLevelsByType from '../../utils/getHitLevelsByType'\nimport getPreferredLevelType from '../../utils/getPreferredLevelType'\n\nconst DISPLAY_LEVELS_FOR_TYPES = {\n [lesson]: true,\n [course]: true,\n [studyPack]: true,\n [post]: false,\n [flashcard]: false,\n [flashcardCategory]: false,\n [collection]: false,\n [video]: false,\n [poll]: false,\n}\n\nconst getCoverImageBorderRadius = (type, hasImage) => {\n if (type === poll) return 'large'\n\n /**\n * Based on the designs:\n * if a collection has an image, the border radius must be circular.\n * if a collection doesn't have an image, the Category's image will be used instead, and the border radius must be rounded.\n */\n if (type === flashcard || (type === collection && !hasImage)) return 'small'\n\n return 'circular'\n}\n\nexport default function AllMaterialsGridHit({ hit }) {\n const {\n author, // posts\n category, // flashcards\n lesson_section_slug: lessonSectionSlug, // lessons\n lesson_section_title: lessonSectionTitle, // lessons\n genre, // flashcards & flashcard categories\n id,\n image_url: imageUrl,\n is_resource: isResource,\n levels,\n slug,\n title,\n topic,\n subtitle,\n type,\n list_category_image_url: listCategoryImageUrl, // collections\n list_category_title: listCategoryTitle, // collections\n list_category_slug: listCategorySlug, // collections\n } = hit\n\n const { levelPreference, isUserLoggedIn } = getInitialState()\n\n const hitLevels = getHitLevelsByType(levelPreference, hit)\n\n // If the user's level preference isn't Ellii's,\n // but there are no levels on this hit for their level type,\n // use Ellii's levels.\n // Otherwise, use their level preference.\n const preferredLevelType = getPreferredLevelType(levelPreference, hitLevels)\n\n const linkByType = {\n [flashcard]: getFlashcardLink({\n genreSlug: genre?.slug,\n categorySlug: category?.slug,\n id,\n }),\n [flashcardCategory]: getFlashcardLink({\n genreSlug: genre?.slug,\n categorySlug: slug,\n }),\n [lesson]: getLessonLink({ lessonSectionSlug, slug, isUserLoggedIn }),\n [post]: getPostLink({ slug }),\n [collection]: getCollectionLink({ listCategorySlug, slug }),\n [video]: getVideoLink({ slug }),\n [studyPack]: getStudyPack({ lessonSectionSlug, slug }),\n [course]: getCourseLink({ lessonSectionSlug, slug }),\n [poll]: getPollLink({ slug }),\n }\n\n const secondaryInfo = {\n [flashcard]: category?.title,\n [lesson]: lessonSectionTitle,\n [post]: `by ${author}`,\n [collection]: listCategoryTitle,\n [studyPack]: category?.name,\n [course]: category?.name,\n [poll]: 'Ellii Polls',\n }\n\n const gridHitImageSize = ['3rem', null, '5rem']\n\n /**\n * Based on the designs:\n * if a collection has an image, the border radius must be circular.\n * if a collection doesn't have an image, the Category's image will be used instead, and the border radius must be rounded.\n */\n const borderRadius = getCoverImageBorderRadius(type, !!imageUrl)\n\n return (\n \n \n \n {imageUrl || listCategoryImageUrl ? (\n \n {type === video && (\n \n \n \n \n \n )}\n \n \n ) : (\n \n )}\n \n \n \n {isResource ? labels.resource.text : labels[type].text}\n \n \n {topic || title}\n \n {type !== flashcardCategory && (\n {secondaryInfo[type]}\n )}\n\n {DISPLAY_LEVELS_FOR_TYPES[type] ? (\n \n \n \n ) : null}\n\n {subtitle && type === video && (\n \n \n {subtitle}\n \n )}\n \n \n \n )\n}\n\nAllMaterialsGridHit.propTypes = {\n hit: PropTypes.oneOfType([\n collectionPropShape,\n flashcardCategoryPropShape,\n flashcardPropShape,\n lessonPropShape,\n postPropShape,\n videoPropShape,\n studyPackPropShape,\n coursePropShape,\n pollPropShape,\n ]).isRequired,\n}\n","import { CoverImage, Icon, Heading, Link } from '@redriverpress/system'\n\nimport ImagePlaceholder from './ImagePlaceholder'\nimport HitWrapper from './HitWrapper'\nimport { flashcardCategoryPropShape } from '../../constants/propShapes'\nimport { getFlashcardLink } from '../../utils/hitLinks'\nimport { resultImageSize } from '../../constants/ui'\n\nexport default function FlashcardCategoryHit({ hit }) {\n const { slug: categorySlug, genre, image_url: imageUrl, title } = hit\n\n const { slug: genreSlug } = genre\n\n return (\n \n \n \n {imageUrl ? (\n \n ) : (\n \n )}\n \n {title}\n \n \n \n )\n}\n\nFlashcardCategoryHit.propTypes = {\n hit: flashcardCategoryPropShape.isRequired,\n}\n","import { Icon, Heading, Image, Link, Text } from '@redriverpress/system'\n\nimport HitWrapper from './HitWrapper'\nimport { flashcardPropShape } from '../../constants/propShapes'\nimport { getFlashcardLink } from '../../utils/hitLinks'\nimport { resultImageSize } from '../../constants/ui'\n\nexport default function FlashcardHit({ hit }) {\n const { category, genre, id, image_url: imageUrl, title } = hit\n\n const { title: categoryTitle, slug: categorySlug } = category\n const { slug: genreSlug } = genre\n\n return (\n \n \n \n \n \n {title}\n \n {categoryTitle}\n \n \n )\n}\n\nFlashcardHit.propTypes = {\n hit: flashcardPropShape.isRequired,\n}\n","import { Box, Icon, Heading, Image, Link, Text } from '@redriverpress/system'\n\nimport HitWrapper from './HitWrapper'\nimport { getVideoLink } from '../../utils/hitLinks'\nimport { videoPropShape } from '../../constants/propShapes'\n\nexport default function VideoHit({ hit }) {\n const { image_url: imageUrl, slug, title, subtitle, category } = hit\n\n const { title: categoryTitle } = category\n\n return (\n \n \n \n \n \n {title}\n \n {categoryTitle}\n {subtitle && (\n \n \n {subtitle}\n \n )}\n \n \n \n )\n}\n\nVideoHit.propTypes = {\n hit: videoPropShape.isRequired,\n}\n","import MenuSelect from '../extensions/MenuSelect'\nimport { allAudiences } from '../../constants/audiences'\n\nconst approvedRefinements = ['All', ...allAudiences]\n\nexport default function AudienceFilter() {\n return (\n \n refinements.filter(r => approvedRefinements.includes(r.label))\n }\n />\n )\n}\n","import R from 'ramda'\n\nimport getInitialState from 'Common/utils/getInitialState'\n\nimport MenuSelect from '../extensions/MenuSelect'\nimport {\n cefr,\n clb,\n eld,\n nrs,\n eslLevelSort,\n eldLevelSort,\n nrsLevelSort,\n levelFiltersByPreference,\n none,\n} from '../../constants/levels'\n\nconst ascendByLabel = R.ascend(\n R.compose(\n R.toLower,\n R.prop('label')\n )\n)\n\nconst ascendByParsedLabel = R.ascend(x => parseInt(R.prop('label', x), 10))\n\nconst ascendByEslLevelValue = R.ascend(x => eslLevelSort[R.prop('label', x)])\nconst ascendByEldLevelValue = R.ascend(x => eldLevelSort[R.prop('label', x)])\nconst ascendByNrsLevelValue = R.ascend(x => nrsLevelSort[R.prop('label', x)])\n\nconst formatLevelsByPreference = {\n [cefr]: items =>\n R.sort(ascendByLabel, items).map(item => ({\n ...item,\n label: `CEFR ${item.label}`,\n })),\n [clb]: items =>\n R.sort(ascendByParsedLabel, items).map(item => ({\n ...item,\n label: `CLB ${item.label}`,\n })),\n [eld]: items => R.sort(ascendByEldLevelValue, items),\n [nrs]: items =>\n R.sort(ascendByNrsLevelValue, items).map(item => ({\n ...item,\n label: `NRS ${item.label}`,\n })),\n [none]: items => R.sort(ascendByEslLevelValue, items),\n}\n\nexport default function LevelFilter() {\n const { levelPreference } = getInitialState()\n\n return (\n \n )\n}\n","import MenuSelect from '../extensions/MenuSelect'\nimport { materialTypeLabels } from '../../constants/materialTypes'\n\nexport default function AudienceFilter() {\n return (\n \n items.map(item => ({\n ...item,\n label: materialTypeLabels[item.label],\n }))\n }\n />\n )\n}\n","const algoliaEnv = process.env.ALGOLIA_ENV\n\n// The default materials index\nexport const materials = `Materials_${algoliaEnv}`\n\n// Materials replica index, sorted alphabetically by titles\nexport const materialsAlphabetical = `Materials_alphabetical_${algoliaEnv}`\n\n// Materials replica index, sorted by most recent\nexport const materialsRecent = `Materials_recent_${algoliaEnv}`\n\n// Materials replica index, sorted by ranked material type plus titles\nexport const materialsRanking = `Materials_ranking_${algoliaEnv}`\n","import PropTypes from 'prop-types'\nimport ORIGIN from 'Common/constants/search'\nimport SortBy from '../extensions/SortBy'\nimport {\n materials,\n materialsAlphabetical,\n materialsRecent,\n materialsRanking,\n} from '../../constants/indices'\n\n// Search page\nconst sortItems = [\n {\n label: 'Relevance',\n value: materials,\n },\n {\n label: 'Alphabetical',\n value: materialsAlphabetical,\n },\n {\n label: 'Last Updated',\n value: materialsRecent,\n },\n]\n\n// Collections page\nconst sortItemsCollections = [\n {\n label: 'Relevance',\n value: materialsRanking,\n },\n {\n label: 'Alphabetical',\n value: materialsAlphabetical,\n },\n {\n label: 'Last Updated',\n value: materialsRecent,\n },\n]\n\nexport default function Sort({ origin }) {\n return (\n \n )\n}\n\nSort.defaultProps = {\n origin: null,\n}\n\nSort.propTypes = {\n origin: PropTypes.string,\n}\n","import { createLocalStorageStateHook } from 'use-local-storage-state'\n\nimport { listView } from '../constants/ui'\n\nconst useViewMode = createLocalStorageStateHook(\n 'ellii-search-viewMode',\n listView\n)\n\nexport default useViewMode\n","import { Box, Icon } from '@redriverpress/system'\n\nimport { CompactButton, ListButton } from 'Common/components/viewModeToggle'\n\nimport useViewMode from '../hooks/useViewMode'\nimport { compactView, listView } from '../constants/ui'\n\nexport default function ViewModeToggle() {\n const [viewMode, setViewMode] = useViewMode()\n\n const setListView = () => setViewMode(listView)\n const setCompactView = () => setViewMode(compactView)\n\n return (\n \n \n \n \n \n \n \n \n )\n}\n"],"sourceRoot":""}